Skip to content

Commit

Permalink
pass slides syntax
Browse files Browse the repository at this point in the history
  • Loading branch information
astonzhang committed Dec 16, 2021
1 parent b5924f4 commit 031508a
Show file tree
Hide file tree
Showing 17 changed files with 285 additions and 285 deletions.
12 changes: 6 additions & 6 deletions chapter_computer-vision/fcn.md
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ from torch.nn import functional as F

## 더 모델

여기서는 완전 컨벌루션 네트워크 모델의 기본 설계에 대해 설명합니다.:numref:`fig_fcn`에서 볼 수 있듯이 이 모델은 먼저 CNN을 사용하여 이미지 특징을 추출한 다음 $1\times 1$ 컨벌루션 계층을 통해 채널 수를 클래스 수로 변환한 다음 마지막으로 도입된 전치된 컨벌루션을 통해 특징 맵의 높이와 너비를 입력 이미지의 높이와 너비로 변환합니다.:numref:`sec_transposed_conv`년에 있습니다.결과적으로 모델 출력값은 입력 영상과 높이와 너비가 동일하며, 여기서 출력 채널에는 동일한 공간 위치에 있는 입력 픽셀에 대한 예측된 클래스가 포함됩니다.
여기서는 완전 컨벌루션 네트워크 모델의 기본 설계에 대해 설명합니다.:numref:`fig_fcn`에서 볼 수 있듯이 이 모델은 먼저 CNN을 사용하여 이미지 특징을 추출한 다음 $1\times 1$ 컨벌루션 계층을 통해 채널 수를 클래스 수로 변환한 다음 마지막으로 도입된 전치된 컨벌루션을 통해 특징 맵의 높이와 너비를 입력 이미지의 높이와 너비로 변환합니다.:numref:`sec_transposed_conv`년에 있습니다.결과적으로 모델 출력값은 입력 영상과 높이와 너비가 동일하며, 여기서 출력 채널에는 동일한 공간 위치에 있는 입력 픽셀에 대한 예측된 클래스가 포함됩니다.

![Fully convolutional network.](../img/fcn.svg)
:label:`fig_fcn`
Expand Down Expand Up @@ -68,7 +68,7 @@ X = torch.rand(size=(1, 3, 320, 480))
net(X).shape
```

다음으로 출력 채널 수를 Pascal VOC2012 데이터 세트의 클래스 수 (21) 로 변환하기 위해 $1\times 1$ 컨벌루션 계층을 사용합니다.**] 마지막으로, 입력 이미지의 높이와 너비로 다시 변경하려면 (**특징 맵의 높이와 너비를 32 배 증가**) 해야합니다.:numref:`sec_padding`에서 컨벌루션 계층의 출력 형상을 계산하는 방법을 생각해 보십시오.$(320-64+16\times2+32)/32=10$과 $(480-64+16\times2+32)/32=15$부터 보폭이 $32$인 전치된 컨벌루션 계층을 구성하여 커널의 높이와 너비를 $64$로 설정하고 패딩을 $16$로 설정합니다.일반적으로 스트라이드 $s$, 패딩 $s/2$ ($s/2$이 정수라고 가정) 및 커널 $2s$의 높이와 너비에 대해 전치된 컨벌루션이 입력값의 높이와 너비를 $s$배 증가시킨다는 것을 알 수 있습니다.
다음으로 출력 채널 수를 Pascal VOC2012 데이터 세트의 클래스 수 (21) 로 변환하기 위해 $1\times 1$ 컨벌루션 계층을 사용합니다. 마지막으로, 입력 이미지의 높이와 너비로 다시 변경하려면 (**특징 맵의 높이와 너비를 32 배 증가**) 해야합니다.:numref:`sec_padding`에서 컨벌루션 계층의 출력 형상을 계산하는 방법을 생각해 보십시오.$(320-64+16\times2+32)/32=10$과 $(480-64+16\times2+32)/32=15$부터 보폭이 $32$인 전치된 컨벌루션 계층을 구성하여 커널의 높이와 너비를 $64$로 설정하고 패딩을 $16$로 설정합니다.일반적으로 스트라이드 $s$, 패딩 $s/2$ ($s/2$이 정수라고 가정) 및 커널 $2s$의 높이와 너비에 대해 전치된 컨벌루션이 입력값의 높이와 너비를 $s$배 증가시킨다는 것을 알 수 있습니다.

```{.python .input}
num_classes = 21
Expand All @@ -89,9 +89,9 @@ net.add_module('transpose_conv', nn.ConvTranspose2d(num_classes, num_classes,

우리는 전치된 컨벌루션 계층이 특징 맵의 높이와 너비를 증가시킬 수 있다는 것을 이미 알고 있습니다.이미지 처리에서 이미지를 확장해야 할 수도 있습니다 (예: *업샘플링*).
*쌍선형 보간*
일반적으로 사용되는 업샘플링 기법 중 하나입니다.또한 전치된 컨벌루션 계층을 초기화하는 데에도 자주 사용됩니다.
일반적으로 사용되는 업샘플링 기법 중 하나입니다.또한 전치된 컨벌루션 계층을 초기화하는 데에도 자주 사용됩니다.

쌍선형 보간을 설명하기 위해 입력 영상이 주어지면 업샘플링된 출력 영상의 각 픽셀을 계산하려고 한다고 가정해 보겠습니다.좌표 $(x, y)$에서 출력 이미지의 픽셀을 계산하려면 먼저 $(x, y)$를 입력 이미지에 좌표 $(x', y')$로 매핑합니다. 예를 들어 입력 크기와 출력 크기의 비율에 따라 매핑합니다.매핑된 $x'$ and $y'$는 실수입니다.그런 다음 입력 영상에서 좌표 $(x', y')$에 가장 가까운 4개의 픽셀을 찾습니다.마지막으로, 좌표 $(x, y)$에서 출력 이미지의 픽셀은 입력 이미지 상의 이들 4개의 가장 가까운 픽셀과 $(x', y')$로부터의 상대적 거리에 기초하여 계산된다.
쌍선형 보간을 설명하기 위해 입력 영상이 주어지면 업샘플링된 출력 영상의 각 픽셀을 계산하려고 한다고 가정해 보겠습니다.좌표 $(x, y)$에서 출력 이미지의 픽셀을 계산하려면 먼저 $(x, y)$를 입력 이미지에 좌표 $(x', y')$로 매핑합니다. 예를 들어 입력 크기와 출력 크기의 비율에 따라 매핑합니다.매핑된 $x'$ and $y'$는 실수입니다.그런 다음 입력 영상에서 좌표 $(x', y')$에 가장 가까운 4개의 픽셀을 찾습니다.마지막으로, 좌표 $(x, y)$에서 출력 이미지의 픽셀은 입력 이미지 상의 이들 4개의 가장 가까운 픽셀과 $(x', y')$로부터의 상대적 거리에 기초하여 계산된다.

쌍선형 보간의 업샘플링은 다음 `bilinear_kernel` 함수로 구성된 커널을 사용하여 전치된 컨벌루션 계층에 의해 구현될 수 있습니다.공간 제약으로 인해 알고리즘 설계에 대한 논의 없이 아래 `bilinear_kernel` 함수의 구현만 제공합니다.

Expand Down Expand Up @@ -179,7 +179,7 @@ print('output image shape:', out_img.shape)
d2l.plt.imshow(out_img);
```

완전 컨벌루션 네트워크에서는 쌍선형 보간의 업샘플링을 사용하여 전치된 컨벌루션 계층을 초기화합니다.$1\times 1$ 컨벌루션 계층의 경우 자비에르 초기화를 사용합니다.**]
완전 컨벌루션 네트워크에서는 쌍선형 보간의 업샘플링을 사용하여 전치된 컨벌루션 계층을 초기화합니다.$1\times 1$ 컨벌루션 계층의 경우 자비에르 초기화를 사용합니다.

```{.python .input}
W = bilinear_kernel(num_classes, num_classes, 64)
Expand Down Expand Up @@ -263,7 +263,7 @@ def label2image(pred):
return colormap[X, :]
```

테스트 데이터셋의 이미지는 크기와 모양이 다양합니다.이 모델은 스트라이드가 32인 전치된 컨벌루션 계층을 사용하므로 입력 영상의 높이 또는 너비를 32로 나눌 수 없는 경우 전치된 컨벌루션 계층의 출력 높이 또는 너비는 입력 영상의 모양에서 벗어납니다.이 문제를 해결하기 위해 이미지에서 높이와 너비가 32의 정수 배수 인 여러 직사각형 영역을 자르고 이러한 영역의 픽셀에 대해 개별적으로 순방향 전파를 수행 할 수 있습니다.이러한 직사각형 영역의 합집합은 입력 이미지를 완전히 덮어야 합니다.픽셀이 여러 직사각형 영역으로 덮여 있는 경우 동일한 픽셀에 대해 별도의 영역에 있는 전치된 컨벌루션 출력의 평균을 softmax 연산에 입력하여 클래스를 예측할 수 있습니다.
테스트 데이터셋의 이미지는 크기와 모양이 다양합니다.이 모델은 스트라이드가 32인 전치된 컨벌루션 계층을 사용하므로 입력 영상의 높이 또는 너비를 32로 나눌 수 없는 경우 전치된 컨벌루션 계층의 출력 높이 또는 너비는 입력 영상의 모양에서 벗어납니다.이 문제를 해결하기 위해 이미지에서 높이와 너비가 32의 정수 배수 인 여러 직사각형 영역을 자르고 이러한 영역의 픽셀에 대해 개별적으로 순방향 전파를 수행 할 수 있습니다.이러한 직사각형 영역의 합집합은 입력 이미지를 완전히 덮어야 합니다.픽셀이 여러 직사각형 영역으로 덮여 있는 경우 동일한 픽셀에 대해 별도의 영역에 있는 전치된 컨벌루션 출력의 평균을 softmax 연산에 입력하여 클래스를 예측할 수 있습니다.

간단하게하기 위해 몇 개의 큰 테스트 이미지만 읽고 이미지의 왼쪽 상단에서 시작하여 예측을 위해 $320\times480$ 영역을 자릅니다.이러한 테스트 이미지의 경우 잘린 영역, 예측 결과 및 지상 진실을 행별로 인쇄합니다.

Expand Down
14 changes: 7 additions & 7 deletions chapter_computer-vision/kaggle-cifar10.md
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
# 카글의 이미지 분류 (CIFAR-10)
:label:`sec_kaggle_cifar10`

지금까지 딥 러닝 프레임워크의 상위 수준 API를 사용하여 텐서 형식의 이미지 데이터 세트를 직접 얻었습니다.그러나 사용자 지정 이미지 데이터셋은 이미지 파일 형태로 제공되는 경우가 많습니다.이 섹션에서는 원시 이미지 파일부터 시작하여 단계별로 구성, 읽기 및 텐서 형식으로 변환합니다.
지금까지 딥 러닝 프레임워크의 상위 수준 API를 사용하여 텐서 형식의 이미지 데이터 세트를 직접 얻었습니다.그러나 사용자 지정 이미지 데이터셋은 이미지 파일 형태로 제공되는 경우가 많습니다.이 섹션에서는 원시 이미지 파일부터 시작하여 단계별로 구성, 읽기 및 텐서 형식으로 변환합니다.

우리는 컴퓨터 비전에서 중요한 데이터셋인 :numref:`sec_image_augmentation`의 CIFAR-10 데이터세트를 실험했습니다.이 섹션에서는 이전 섹션에서 배운 지식을 적용하여 CIFAR-10 이미지 분류의 Kaggle 경쟁을 연습합니다.(**대회의 웹 주소는 https://www.kaggle.com/c/cifar-10 **입니다)
우리는 컴퓨터 비전에서 중요한 데이터셋인 :numref:`sec_image_augmentation`의 CIFAR-10 데이터세트를 실험했습니다.이 섹션에서는 이전 섹션에서 배운 지식을 적용하여 CIFAR-10 이미지 분류의 Kaggle 경쟁을 연습합니다.(**대회의 웹 주소는 https://www.kaggle.com/c/cifar-10 입니다**)

:numref:`fig_kaggle_cifar10`는 대회 웹 페이지의 정보를 보여줍니다.결과를 제출하려면 Kaggle 계정을 등록해야 합니다.
:numref:`fig_kaggle_cifar10`는 대회 웹 페이지의 정보를 보여줍니다.결과를 제출하려면 Kaggle 계정을 등록해야 합니다.

![CIFAR-10 image classification competition webpage information. The competition dataset can be obtained by clicking the "Data" tab.](../img/kaggle-cifar10.png)
:width:`600px`
Expand Down Expand Up @@ -41,18 +41,18 @@ import shutil

경쟁 데이터셋은 훈련 세트와 테스트 세트로 나뉘며, 여기에는 각각 50000개 및 300,000개의 이미지가 포함되어 있습니다.테스트 세트에서는 10000개의 이미지가 평가에 사용되고 나머지 290000 개의 이미지는 평가되지 않습니다. 속임수를 쓰기 어렵게 만들기 위해 포함됩니다.
*테스트 세트의 결과가 수동으로* 표시됩니다.
이 데이터셋의 이미지는 모두 png 색상 (RGB 채널) 이미지 파일이며 높이와 너비는 모두 32픽셀입니다.이미지는 비행기, 자동차, 새, 고양이, 사슴, 개, 개구리, 말, 보트 및 트럭과 같은 총 10 개의 범주를 포함합니다.:numref:`fig_kaggle_cifar10`의 왼쪽 상단 모서리에는 데이터셋에 있는 비행기, 자동차 및 새의 일부 이미지가 표시됩니다.
이 데이터셋의 이미지는 모두 png 색상 (RGB 채널) 이미지 파일이며 높이와 너비는 모두 32픽셀입니다.이미지는 비행기, 자동차, 새, 고양이, 사슴, 개, 개구리, 말, 보트 및 트럭과 같은 총 10 개의 범주를 포함합니다.:numref:`fig_kaggle_cifar10`의 왼쪽 상단 모서리에는 데이터셋에 있는 비행기, 자동차 및 새의 일부 이미지가 표시됩니다.

### 데이터세트 다운로드

Kaggle에 로그인 한 후 :numref:`fig_kaggle_cifar10`에 표시된 CIFAR-10 이미지 분류 경쟁 웹 페이지에서 “데이터”탭을 클릭하고 “모두 다운로드”버튼을 클릭하여 데이터 세트를 다운로드 할 수 있습니다.`../data`에서 다운로드한 파일의 압축을 풀고 그 안에 `train.7z``test.7z`의 압축을 풀면 다음 경로에서 전체 데이터 세트를 찾을 수 있습니다.
Kaggle에 로그인 한 후 :numref:`fig_kaggle_cifar10`에 표시된 CIFAR-10 이미지 분류 경쟁 웹 페이지에서 “데이터”탭을 클릭하고 “모두 다운로드”버튼을 클릭하여 데이터 세트를 다운로드 할 수 있습니다.`../data`에서 다운로드한 파일의 압축을 풀고 그 안에 `train.7z``test.7z`의 압축을 풀면 다음 경로에서 전체 데이터 세트를 찾을 수 있습니다.

* `../data/cifar-10/train/[1-50000].png`
* `../data/cifar-10/test/[1-300000].png`
* `../data/cifar-10/trainLabels.csv`
* `../data/cifar-10/sampleSubmission.csv`

여기서 `train``test` 디렉토리에는 각각 교육 및 테스트 이미지가 포함되어 있습니다. `trainLabels.csv`은 교육 이미지에 대한 레이블을 제공하고 `sample_submission.csv`은 샘플 제출 파일입니다.
여기서 `train``test` 디렉토리에는 각각 교육 및 테스트 이미지가 포함되어 있습니다. `trainLabels.csv`은 교육 이미지에 대한 레이블을 제공하고 `sample_submission.csv`은 샘플 제출 파일입니다.

더 쉽게 시작할 수 있도록 [**처음 1000개의 훈련 이미지와 5개의 무작위 테스트 이미지가 포함된 데이터세트의 소규모 샘플을 제공합니다.**] Kaggle 경쟁의 전체 데이터세트를 사용하려면 다음 `demo` 변수를 `False`로 설정해야 합니다.

Expand Down Expand Up @@ -486,7 +486,7 @@ df['label'] = df['label'].apply(lambda x: train_valid_ds.classes[x])
df.to_csv('submission.csv', index=False)
```

위의 코드는 `submission.csv` 파일을 생성하며, 이 파일의 형식은 Kaggle 경쟁사의 요구 사항을 충족합니다.결과를 Kaggle에 제출하는 방법은 :numref:`sec_kaggle_house`의 방법과 유사합니다.
위의 코드는 `submission.csv` 파일을 생성하며, 이 파일의 형식은 Kaggle 경쟁사의 요구 사항을 충족합니다.결과를 Kaggle에 제출하는 방법은 :numref:`sec_kaggle_house`의 방법과 유사합니다.

## 요약

Expand Down
Loading

0 comments on commit 031508a

Please sign in to comment.