Transposed Convolution shape 계산하는법

redgreen·2022년 4월 29일
0

DeepLearning

목록 보기
2/2
  • FCN에서 Transposed conv를 사용해 32배, 16배, 8배Upscaling해주는 연산이 어떻게 딱딱 n배로 떨어지는지 이해가 가지않아 직접 그림을 그리고 점화식(?)을 도출해 보았다.
  • 편의를 위해 1차원의 그림으로 표현하였다

예시1

  • input의 크기 w를 2,
  • kernel size를 3,
  • stride의 크기를 2,
  • padding의 크기를 1이라고 가정해보자
  • 직접 그림으로 그려보면 위의 그림과 같은 shape을 얻을 수 있다.
  • 처음의 k만큼의 shape이 생기고 그 다음 남은 input의 크기(w-1)만큼 s가 추가된다.
  • 그 후 양쪽 끝에서 p만큼 사이즈가 줄어든다.
  • 따라서 k+(w1)×s2×pk + (w-1)\times s - 2\times p라는 식을 세울 수 있고, 위의 그림의 값을 대입해보면 3+1×22×1=33 + 1 \times 2 - 2 \times 1 = 3이라는 결과를 얻을 수 있다.

예시2

  • w=3,  k=4,  s=3,  p=1w=3,\; k=4,\; s=3,\; p=1이라고 가정해보자
  • 이번에도 마찬가지로 한 번의 kk만큼 shape이 추가된 이후 남은 input의 크기(w1w-1)만큼 s가 추가되는 것을 확인할 수 있다.
  • 그 후 양쪽 끝에서 padding 크기만큼 사이즈가 줄어든다.

활용

(a) k+(w1)s2pk + (w-1)s - 2p

  • Transposed Convoutput shape을 계산하는 식을 정리해보면 위의 식 (a)를 얻을 수 있다.

  • 해당 식을 사용해 input의 n배 크기의 영상을 얻고 싶을 때는 다음과 같이 할 수 있다.

    (b) k=2n,  s=n,  p=12nk=2n,\; s=n,\; p=\cfrac{1}{2}n

  • (b)의 값을 (a)의 식에 대입하면, 아래와 같은 식 (c)가 나온다

    (c) 2n+(w1)n2×12n2n + (w-1)n - 2\times \cfrac{1}{2}n

  • 위의 식 (c)에서, 첫번째항세번째항을 먼저 연산하면 nn이 남는다. 따라서,

    (d) n+(w1)nn + (w-1)n

    라는 식이 남게되고, 위의 두 항을 더해주면
    결국
    wnwn만 남게되어, input size wn배한 output을 얻을 수 있게 된다.

결론

  • Transposed Conv를 통해 feature mapn배하고 싶을 때에는,
  • kernel size=2n, stride=n, padding=1/2n을 해주도록 하자.
profile
인공지능 꿈나무

0개의 댓글