subsampling은 데이터를 낮은 빈도로 샘플링했을 때의 샘플을 근사하는 연산이다. 데이터가 이미지라면 이미지 크기를 줄이는 연산이기 때문에 다운샘플링(Downsampling)이라고도 부른다.
Pooling
https://pasongsong.tistory.com/210
풀링 연산은 이미지상에서 pooling filter를 슬라이딩하면서 요약 통계량을 구하는 연산이다. 주로 평균, 최댓값과 같은 요약 통계량을 사용하지만 최소, 가중 합산, \( L_{2} \) 노름 등도 사용할 수 있다.
pooling filter 크기
초기 CNN에서는 연산 한번 pooling 한번 이렇게 진행했지만 최근에 나오는 CNN 모델은 계층을 깊게 쌓기 위해 연산을 여러 번 하고 pooling을 한번 진행한다. pooling filter의 크기를 정하는 문제는 어떤 크기의 수용 역역 내에서 위치불변성을 줄 것인가를 정하는 문제이다.
보통 2x2 filter를 사용하지만 모델 학습 목적에 따라 다르다.
각 계층의 직육면체는 activation map이자 뉴런이고 안에 점선으로 된 직육면체는 convolution filter를 나타낸다.
계층이 깊어지면 뉴런의 수용 영역이 넓어지며 subsampling을 하면 수용 영역은 더 빠르게 넓어진다. subsampling을 하면 이미지 크기가 줄어들기 때문에 특징 공간이 손실되므로 convolution filter 개수를 늘려서 다양한 특징을 학습하게 만든다.
추상화된 전역적 특징은 세분되고 다양해지기 때문에 channel을 늘려야 정확하게 인식할 수 있기 때문에 CNN의 계층이 깊어질수록 map의 크기는 줄어들지만 channel수는 늘어나는 형태를 가질 수 있다.
Stride
https://pasongsong.tistory.com/180
convolution 연산과 pooling 연산을 할 때 filter의 슬라이딩 간격을 스트라이드라고 한다. 대부분 subsampling 없이 특징을 학습할 때는 한 칸씩 슬라이딩하고 subsampling 할 때는 두 칸씩 슬라이딩하지만, 종종 슬라이딩 간격을 더 크게 두기도 한다.
7x7이미지를 3x3필터가 있다고 하고 strde는 1이라고 할 때 가중 합산 연산의 결과로 5x5 activation map이 나온다.
출력 크기
이미지 크기 = N
필터 크기 = F
스트라이크 크기 = S
일 때 Output의 크기는 위의 식과 같다.
패딩 Padding
convolution 연산을 하면 filter가 입력 이미지 안에서만 슬라이딩하므로 출력하기 때문에 출력 이미지의 크기는 입력 이미지의 크기보다 작아진다. 이러한 상황이 계속되면 어느 순간 convolution 연산을 할 수 없는 크기로 변하기 때문에 이를 해결하기 위해 Padding 작업을 실시한다.
N = 7, F = 1, S = 1 일 때 세 개의 계층을 지나면 출력 이미지 크기가 1이 되는 것을 알 수 있다.
Padding은 가장자리 옆에 픽셀을 추가 시키는 것으로 아래와 같이 이미지를 변형할 수 있다.
출력 크기
$$ O=\frac{(N+2\times P)-F}{S}+1 $$
각 양쪽에 픽셀이 P 만큼 생기기 때문에 아까의 식에서 N에 2P를 더해주면 된다.
이미지 크기 유지
원래의 이미지 사이즈로 돌아가기 위해서는 Padding을 몇으로 설정해야 할까? 앞의 계산식을 통해 P를 재정의 할 수 있고 식은 아래와 같다.
$$ P=\frac{(O-1)\times S-(N-F)}{2} $$
원래 이미지 사이즈로 돌아가기 위해서 O와 N을 같은 값으로 넣어주면 그에 맞는 P 값을 찾을 수 있다.
'Vision' 카테고리의 다른 글
[CNN] 개선된 convolution 연산 (0) | 2023.01.26 |
---|---|
[CNN] CNN의 성질 (0) | 2023.01.26 |
[CNN] CNN의 구조 (0) | 2023.01.25 |
[CNN] Convolutions 사용 이유 (0) | 2022.11.28 |
[CNN] LeNet-5 구조 (0) | 2022.10.13 |