edwith의 부스트코스 강의 Part 3 - CNN <Lab-10-1 Convolution>를 정리한 글입니다. 잘못된 부분이 있으면 말씀해 주세요!
Convolution
이미지 위에 stride 값 만큼 filter(kernel)을 이동시키면서 겹쳐지는 부분의 각 원소의 값을 모두 곱한 뒤 더한 값을 출력하는 연산
Stride and Padding
- stride: filter를 한 번에 이동하는 간격
- padding: input의 크기 만큼 이미지의 상하좌우에 '0'으로 된 pad가 둘러지게 됨
- zero-padding: 이미지 상하좌우에 둘러진 '0' 값이 없음
Pytorch nn.Conv2d
torch.nn.Conv2d(in_channels, out_channels, kernel_size, stride=1, padding=0, dilation 1, groups=1, bias=True)
(dilation과 groups에 대한 내용은 많이 다루지 않으므로 생략함)
- in_channels = 1
- out_channels = 1
- kernel_size = 3 (경우에 따라서는 3, 1 등으로 사이즈를 바꿀 수 있음)
입력의 형태
- input type: torch.Tensor (Tensor 형태로 되어 있어야 함)
- input shape : (N x C x H x W) -> batch_size, channel, height, width
Convolution의 output 크기
예제 1)
- 227 - 11 + (2 * 0) = 226
- 226 / 4 = 54
- 54 + 1 = 55
예제 2) 소수점이 있는 경우, 소수점을 버림
- 64 - 7 + (2 * 0 ) / 2 = 28.5
- 28 + 1 = 29
예제 3)
- 32 - 5 + (2 * 2) / 1 = (27 + 4 ) / 1 = 31
- 31 + 1 = 32
예제 4) Input size가 다른 경우
- (32, 64) - 5 + (2 * 0) / 1 = ((32-5, 64-5 / 1 )
- ((27, 59) / 1 ) + 1 = 28 * 60
- out.shape >> torch.Size([1, 1, 28, 60])
예제 5)
- 64 * 32
- out.shape >> torch.Size([1, 1, 64, 32])
output size를 터미널에서 확인하는 경우 (예제 1)
import torch
import torch.nn as nn
conv = nn.Conv2d(1, 1, 11, stride=4, padding=0)
conv
>> Conv2d(1, 1, kernel_size(11, 11), stride = (4, 4))
Neuron과 Convolution의 관계
Perceptron의 weight 값으로 filter가 들어가게 된다. input값 중 첫 번째에 해당하는것과 weight가 곱해지게 된다. Perceptron을 거쳐 값은 8이 된다.Filter 역시 bias를 가질 수 있으며, 실제 출력값은 8 + bias가 된다.
Pooling
(1) 이미지의 크기를 줄이거나 (2) fully connected 연산을 대체하기 위해 average pooling을 사용하기도 한다.
CNN Implementation
import torch
import torch.nn as nn
import = torch.Tensor(1, 1, 28, 28)
conv1 = nn.Conv2(1, 5, 5)
pool = nn.MaxPool2d(2)
out = conv1(input)
out2 = pool(out)
out2.size()
>> torch.Size([1, 5, 12, 12])
Cross-correlation
Convolution은 뒤집고 계산하며, Cross-correlation으로 적힌 이유는 filter를 뒤집지 않고 계산한다.
'20. 인공지능과 딥러닝' 카테고리의 다른 글
[PyTorch로 시작하는 딥러닝 기초] Lab-10-3 visdom (0) | 2020.03.08 |
---|---|
[PyTorch로 시작하는 딥러닝 기초] Lab-10-2 Mnist CNN (0) | 2020.03.07 |
[PyTorch로 시작하는 딥러닝 기초] 09-4 Batch-Normalization (0) | 2020.02.09 |
[PyTorch로 시작하는 딥러닝 기초] 08. Perceptron (0) | 2020.02.08 |
[PyTorch로 시작하는 딥러닝 기초] 05. Logistic Regression (0) | 2020.02.02 |
댓글