CNN의 parameter 개수와 tensor 사이즈 계산하기
25 Jan 2019 | CNN parameter tensor sizeCNN의 parameter 개수와 tensor 사이즈 계산하기
- 이번 글에서는 네트워크의 텐서 사이즈와 파라미터의 갯수를 계산하는 공식에 대해 다루려 한다.
- 아래의 AlexNet을 이용하여 예시를 든다.
- AlexNet의 구조
- Input: 2272273 크기의 컬러 이미지. 논문의 224*224 사이즈는 오타임
- Conv-1: 11*11 크기의 커널 96개, stride=4, padding=0
- MaxPool-1: stride 2, 3*3 max pooling layer
- Conv-2: 5*5 크기의 커널 256개, stride=1, padding=2
- MaxPool-2: stride 2, 3*3 max pooling layer
- Conv-3: 3*3 크기의 커널 384개, stride=1, padding=1
- Conv-4: 3*3 크기의 커널 384개, stride=1, padding=1
- Conv-5: 3*3 크기의 커널 256개, stride=1, padding=1
- Maxpool-3: stride 2, 3*3 max pooling layer
- FC-1: 4096개의 fully connected layer
- FC-2: 4096개의 fully connected layer
- FC-3: 1000개의 fully connected layer
- 본 글에서는 AlexNet을 이용하여 아래의 내용을 알아본다.
- 각 단계에서 텐서의 크기를 계산하는 방법
- 네트워크에서 총 파라미터 개수를 계산하는 방법
Convolution layer의 output tensor size
- 각각 기호를 아래와 같이 정의
- $O$: Size(width) of output image
- $I$: Size(width) of input image
- $K$: Size(width) of kernels used in the Conv layer
- $N$: Number of kernels
- $S$: Stride of the convolution operation
- $P$: Padding size
- $O$(Size(width) of output image)는 다음과 같이 정의 됨
- 출력 이미지의 채널 수는 커널의 갯수($N$)와 같음
Example on AlexNet
- AlexNet의 입력 이미지 크기는 2272273
- 첫 번째 conv layer(Conv-1)는 11113 크기의 커널 96개, stride=4, padding=0
- 따라서, Conv-1 의 출력 출력 tensor size는 $55\times 55\times 96$임.
- 각 커널 당 하나의 채널을 나타내므로, 3채널(RGB) 이미지에 대해 3배가 곱해져 총 $55\times 55\times 96\times 3$이 됨.
- Conv-2, 3, 4, 5도 동일한 방법으로 계산 가능
MaxPool layer의 output tensor size
- 각각 기호를 아래와 같이 정의
- $O$: Size(width) of output image
- $I$: Size(width) of input image
- $S$: Stride of the convolution operation
- $P_{s}$: Pooling size
- $O$(Size(width) of output image)는 다음과 같이 정의 됨
- Convolution layer와는 다르게 출력의 채널 수는 입력의 개수와 동일
- Conv layer의 $O$ 수식에서 커널 크기($K$)를 $P_{s}$로 대체하고 $P=0$으로 설정하면 동일한 식이 됨
Example on AlexNet
- MaxPool-1은 stride 2, 사이즈는 3*3, 이전 단(Conv-1)의 출력 크기는 $55\times 55\times 96$임
- 따라서 출력의 크기는 $27\times 27\times 96$
- MaxPool-2, 3도 동일한 방법으로 계산
Fully Connected layer의 output tensor size
- FC layer는 layer의 뉴런 수와 동일한 길의의 벡터를 출력
- AlexNet summary
- AlexNet에서 입력은 크기 227x227x3의 이미지
- Conv-1의 출력은 MaxPool-1을 거치며 55x55x96에서 27x27x96으로 변환됨
- Conv-2 이후에는 size가 27x27x256에서 MaxPool-2을 거치며 13x13x256으로 변경됨
- Conv-3은 크기를 13x13x384로 변환
- Conv-4는 크기가 유지됨
- Conv-5는 크기를 27x27x256으로 변환함
- 마지막으로 MaxPool-3는 크기를 6x6x256으로 줄임
- 이 이미지는 크기 4096x1 크기의 벡터로 변환되는 FC-1에 feed됨
- FC-2는 크기를 유지
- FC-3 은 size를 1000x1로 변환
Convolution layer의 parameter 갯수
- CNN의 각 layer는 weight parameter와 bias parameter가 존재.
-
전체 네트워크의 parameter 수는 각 conv layer 파라미터 수의 합
- 각각 기호를 아래와 같이 정의
- $W_{c}$: Number of weights of the Conv layer
- $B_{c}$: Number of biases of the Conv layer
- $P_{c}$: Number of parameters of the Conv layer
- $K$: Size(width) of kernels used in the Conv layer
- $N$: Number of kernels
- $C$: Number of channels of the input image
- Conv layer에서 모든 커널의 깊이는 항상 입력 이미지의 채널 수와 같음
- 따라서 모든 커널에는 $K^{2}\times C$개의 parameter들이 있으며, 그러한 커널들이 $N$개 존재
Example on AlexNet
- AlexNet의 Conv-1에 대해
- 입력 이미지의 채널 수 $C=3$
- Kernel size $K=11$
- 전체 커널 개수 $N=96$
- 따라서 파라미터의 갯수는 아래와 같이 정의됨
- Conv-2/3/4/5도 동일한 방법으로 각각 614,656/885,120/1,327,488/884,992개의 parameter를 갖는것을 계산 가능
- AlexNet conv layer의 parameter 개수는 3,747,200개
- FC layer의 parameter 수가 더해지지 않았으므로 전체 네트워크의 parameter 개수가 아님
- Conv layer의 장점은 weight parameter가 공유되므로 FC layer에 비해 매개변수가 훨씬 작다는 장점이 있음
MaxPool layer의 parameter 갯수
- Pooling, stride, padding은 hyper parameter임(계산 X)
Fully Connnected layer의 parameter 갯수
- CNN에는 두 종류의 FC layer가 존재
- 마지막 Conv layer의 바로 뒤에 붙는 FC layer
- 다른 FC layer에 연결되는 FC layer
Case1: FC layer connected to a Conv layer
- 각각의 기호를 아래와 같이 정의
- $W_{cf}$: Number of weights of a FC layer which is connected to a Conv layer
- $B_{cf}$: Number of biases of a FC layer which is connected to a Conv layer
- $P_{cf}$: Number of parameters of a FC layer which is connected to a Conv layer
- $O$: Size(width) of th output image of the previous Conv layer
- $N$: Number of kernels in the previous Conv layer
- $F$: Number of neurons in the FC Layer
Example on AlexNet
- Conv layer의 마지막단에 바로 붙는 FC-1 layer에 대해, $O=6$, $N=256$, $F=4096$임
- 이 수는 모든 Conv layer의 pameter 갯수들보다 많은 수(그만큼 FC layer에는 많은 파라미터들이 필요)
Case2: FC layer connected to a FC Layer
- 각각의 기호를 아래와 같이 정의
- $W_{ff}$: Number of weights of a FC layer which is connected to a FC layer
- $B_{ff}$: Number of biases of a FC layer which is connected to a FC layer
- $P_{ff}$: Number of parameters of a FC layer which is connected to a FC layer
- $F$: Number of neurons in th FC layer
- $F_{-1}$: Number of neurons in the previous FC layer
- 위의 식에서, $F_{-1}\times F$는 이전 FC layer의 neuron과 현재 FC layer의 neuron 사이의 총 연결 가중치의 개수.
- Bias parameter의 개수는 뉴런의 개수($F$)와 같음
Example on AlexNet
- 마지막 FC layer인 FC-3은 $F_{-1}=4096,\; F=1000$이므로
- FC-2 layer의 parameter 개수도 동일한 방법으로 16,781,312개로 계산 됨
AlexNet의 총 parameter 개수 및 tensor size
- AlexNet의 전체 parameter 수는 5개의 convolution layer와 3개의 FC layer에서 계산되는 parameter 개수들의 합
- 62,378,344 개.
- 자세한 parameter 및 tensor size는
- [참고 글]
https://www.learnopencv.com/number-of-parameters-and-tensor-sizes-in-convolutional-neural-network/