FCN
에서Transposed conv
를 사용해32배
,16배
,8배
로Upscaling
해주는 연산이 어떻게 딱딱n배
로 떨어지는지 이해가 가지않아 직접 그림을 그리고 점화식(?)을 도출해 보았다.- 편의를 위해 1차원의 그림으로 표현하였다
input
의 크기w
를 2,kernel size
를 3,stride
의 크기를 2,padding
의 크기를 1이라고 가정해보자
- 직접 그림으로 그려보면 위의 그림과 같은
shape
을 얻을 수 있다.- 처음의
k
만큼의shape
이 생기고 그 다음 남은input
의 크기(w-1
)만큼s
가 추가된다.- 그 후 양쪽 끝에서
p
만큼 사이즈가 줄어든다.- 따라서 라는 식을 세울 수 있고, 위의 그림의 값을 대입해보면 이라는 결과를 얻을 수 있다.
- 이라고 가정해보자
- 이번에도 마찬가지로 한 번의 만큼
shape
이 추가된 이후 남은input
의 크기()만큼s
가 추가되는 것을 확인할 수 있다.- 그 후 양쪽 끝에서
padding
크기만큼 사이즈가 줄어든다.
(a)
Transposed Conv
의output shape
을 계산하는 식을 정리해보면 위의 식 (a)를 얻을 수 있다.
- 해당 식을 사용해
input의 n배
크기의 영상을 얻고 싶을 때는 다음과 같이 할 수 있다.
(b)
- (b)의 값을 (a)의 식에 대입하면, 아래와 같은 식 (c)가 나온다
(c)
- 위의 식 (c)에서, 첫번째항과 세번째항을 먼저 연산하면 이 남는다. 따라서,
(d)
라는 식이 남게되고, 위의 두 항을 더해주면
결국
만 남게되어,input size
w
에n
배한output
을 얻을 수 있게 된다.
Transposed Conv
를 통해feature map
을n
배하고 싶을 때에는,kernel size=2n
,stride=n
,padding=1/2n
을 해주도록 하자.