일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- DNN 가속기
- DNN Accelerator
- linux makefile 작성
- 대구 반도체 설계기업 특화
- makefile
- 클럭 게이팅
- 이진수 곱셈 알고리즘
- gcc 컴파일
- Pyverilog 설치
- Design DNN Accelerator
- pyverilog 설치 오류
- CUDA
- 데이터 해저드
- Makefile compile
- pytest-pythonpath 설치 오류
- CLOCK GATING
- 남산업힐
- AMBA
- Pyverilog 튜토리얼
- pygraphviz 설치 오류
- Data HAzard
- systolic array
- Pyvrilog tutorial
- gpgpu-sim
- CDC
- 컨벌루션 연산
- Pyverilog 실행
- linux c 컴파일
- 딥러닝 가속기
- linux c++ 컴파일
- Today
- Total
오늘은 맑음
convolution transpose/ conv2d_transpose 본문
Autoencoder에서 encoding을 통해 feature를 추출하였다면 그 다음은 추출된 feature를 기반으로 다시 decoding을 하여 원래 이미지의 사이즈를 거치는 과정을 갖는다.
decoding과정에서 다시 feature map의 사이즈를 키우는 과정을 Upsampling이라고 하는데 대표적으로 두 가지 방법이 있다.
1. max pooling
2. convolution transpose
max pooling을 이용한 Upsampling은 과정이 convolution tanspose에 비해 단순하지만 전체적인 성능을 보자면 convolution연산을 거쳐 한번 더 feature를 추출해내서 Upsampling을 거치는 convolutoin transpose가 더 뛰어나기 때문에 최근에 주로 사용이 되고 있다.
conv2d_transpose를 설명할 때 사용되는 기호의 정의는 다음과 같다.
conv2d | conv2d_transpose | |
input size | i | i' |
output size | o | o' |
kernel | k | k' = k |
stride | s | s' |
padding | p | p' = k - p - 1 |
convolution transpose를 수행하는 예시를 그림으로 들어보자.
i' = 2, k' = 3, p' = 2라고 하자.
p' = 2이므로 convolution에서는 p = 0인 convolution연산과 같다
위의 조건에서 convolution transpose함수를 수행하면 4 x 4의 output feature map을 얻을 수 있다.
위는 stride가 1인 경우이다.
s' = 2인 경우에는 input feature map의 padding이 달라진다.
이번에는 i = 2, k = 3, p' = 2, s = 2인 경우를 보자.
s = 2인 경우 input feature map의 한 데이터를 중심으로 그 주변에 zero padding이 된 것을 볼 수 있다.
이 경우에 s = 2지만 s' = 1로 convolution연산을 수행한다.
따라서 결과 값으로는 5 x 5의 output feature map을 얻을 수 있다.
Convolution에서 처럼 상황을 분류하여 수식으로 나타내보면 다음과 같이 분류할 수 있다.
convolution transpose함수는 크게 네 가지 방식으로 분류할 수 있으며 앞서 convolution과 케이스는 같다.
1. No zero padding, unit strides, transposed
$$o' = i' + (k - 1)$$
2. Zero padding, unit strides, transposed
$$o' = i' + (k - 1) - 2p = i'$$
3. No zero padding, non-unit strides, transposed
$$o' = s(i' - 1) + k - 2p$$
4. Zero padding, non-unit strides, transposed
$$o' = s(i' - 1) + k - 2p$$
Convolution에서 p = 0.5인 상황이 있었다.
Convolution transpose 역시 마찬가지다.
Convolution의 예제를 역으로 생각해 보겠다.
i = 6, k = 3, s = 2인 경우 o = 3이 나왔다.
Convolution transpose로 i = 3인 feature map을 o = 6으로 복원하게 되면 어떻게 될까.
역시나 한 칸이 부족하다. Convolution에서 겪었던 상황이 다시 반복됬다.
하지만 transposed에서는 아래와 같이 패딩이 생긴다.
Convolution에서는 우측과 하단에 먼저 zero padding이 생겼지만 transposed에서는 좌측과 상단에 생긴다.
Convolution에서 참조문헌으로 링크했던 문서를 보면 이해할 수 있다.
'Deep learning' 카테고리의 다른 글
Convolution연산과 수식 (0) | 2020.04.20 |
---|---|
Pandas/DataFrame 함수(1) (0) | 2019.02.23 |