Krizhevsky의 '12 CNN은 첫 번째 계층에서 253,440 개의 뉴런을 어떻게 얻습니까?


24

에서 알렉스 Krizhevsky, 등. 심층 컨볼 루션 신경망을 사용한 이미지 넷 분류 는 각 계층의 뉴런 수를 열거합니다 (아래 다이어그램 참조).

네트워크의 입력은 150,528 차원이며 네트워크의 나머지 계층에있는 뉴런의 수는 253,440–186,624–64,896–64,896–43,264–4096–4096–1000으로 제공됩니다.

CNN

3D 뷰

첫 번째 이후의 모든 층에 대한 뉴런의 수는 분명합니다. 뉴런을 계산하는 간단한 방법 중 하나는 해당 레이어의 3 차원을 단순히 곱하는 것입니다 ( planes X width X height).

  • 레이어 2 : 27x27x128 * 2 = 186,624
  • 레이어 3 : 13x13x192 * 2 = 64,896
  • 기타

그러나 첫 번째 레이어를 보면 :

  • 층 1 : 55x55x48 * 2 = 290400

이는 것을 알 수 없습니다 253,440 로 종이에 지정된!

출력 크기 계산

컨벌루션의 출력 텐서를 계산하는 다른 방법은 다음과 같습니다.

입력 화상은 3D 텐서 인 경우 nInputPlane x height x width, 출력 영상 사이즈 것이다 nOutputPlane x owidth x oheight

owidth = (width - kW) / dW + 1

oheight = (height - kH) / dH + 1 .

( 토치 SpatialConvolution 문서에서 )

입력 이미지는 다음과 같습니다

  • nInputPlane = 3
  • height = 224
  • width = 224

컨볼 루션 레이어는 다음과 같습니다.

  • nOutputPlane = 96
  • kW = 11
  • kH = 11
  • dW = 4
  • dW = 4

(예 : 커널 크기 11, 보폭 4)

우리는 그 숫자를 꽂습니다.

owidth = (224 - 11) / 4 + 1 = 54 oheight = (224 - 11) / 4 + 1 = 54

따라서 55x55용지와 일치하는 데 필요한 치수 중 하나가 부족 합니다. 패딩 일 수 있습니다 (그러나 cuda-convnet2모델은 명시 적으로 패딩을 0으로 설정합니다)

54크기를 측정하면 96x54x54 = 279,936뉴런 이 생깁니다 . 여전히 너무 많습니다.

그래서 내 질문은 이것입니다 :

첫 번째 컨볼 루션 레이어에 대해 어떻게 253,440 개의 뉴런을 얻습니까? 내가 무엇을 놓치고 있습니까?


이 문제를 해결 한 적이 있습니까? 계산과 함께 pedantic하기 위해서 : owidth와 oheight는 실제로 54.25입니다. 나는 이것을 알아 내려고 노력했으며 첫 번째 단계로 253440 뉴런을 96 필터로 나누었고 필터 당 2640 뉴런을 생성했습니다. 이것은 제곱이 아닙니다. 그래서 우리 둘 다 여기에 오해가 있거나 저자에 의해 실수가있을 수 있습니다 ... 당신은 그들에게 연락 했습니까?
anderas

저와 마찬가지로, 이것은 매우 혼란 스럽습니다. btw 입력이 224x224x3입니까? 227x227x3이어야한다고 생각합니다. 크기가 2x1127 인 첫 번째 왼쪽에 5 개의 셀과 마지막 오른쪽에 5 개의 셀이 커널 컨볼 루션의 중심이 될 수 없는지 살펴 보겠습니다. 따라서 커널의 첫 번째 중심은 셀 (6,6)이고 첫 번째 행의 중심 커널의 마지막은 셀 (6x222)입니다. stride-4를 사용하면 여섯 번째 행에서 커널의 중심을 얻게됩니다. -1) * 4 : 열 222가 k 번째 중심 = (222-6) / 4 +1 = 55가되도록

4
48 * 48 * 55 * 2 = 253440이므로 첫 번째 레이어의 뉴런 수를 계산할 때 오타가있을 수 있습니다 (55 대신 48을 곱함).
tsiki


@Firebug 이것은 [references] 태그의 흥미로운 사용법입니다. 참조 를 요구 하는 질문에만 사용한다고 생각했습니다 . 그러나 아마도 내가 틀렸다. 다르게 사용하십니까?
amoeba는

답변:


8

NN의 스탠포드 노트에서 :

실제 예. Krizhevsky et al. 2012 년에 ImageNet 과제를 수상한 아키텍처는 [227x227x3] 크기의 이미지를 허용했습니다. 첫 번째 Convolutional Layer에서는 수용 필드 크기 F = 11, 보폭 S = 4 및 제로 패딩 P = 0이없는 뉴런을 사용했습니다. (227-11) / 4 + 1 = 55 이후, Conv 레이어의 깊이는 K = 96이므로 Conv 레이어 출력 볼륨의 크기는 [55x55x96]입니다. 이 부피의 55 * 55 * 96 뉴런 각각은 입력 부피에서 크기 [11x11x3]의 영역에 연결되었습니다. 또한, 각 깊이 열의 모든 96 개 뉴런은 입력의 동일한 [11x11x3] 영역에 연결되어 있지만 물론 가중치가 다릅니다. 재미있게도, 실제 논문을 읽으면 입력 이미지가 224x224라고 주장합니다. (224-11) / 4 + 1은 분명히 정수가 아니기 때문에 정확하지 않습니다. 이것은 ConvNets의 역사에서 많은 사람들을 혼란스럽게 만들었으며 어떤 일이 일어 났는지는 거의 알려져 있지 않습니다. 내 자신의 가장 좋은 추측은 Alex가 논문에서 언급하지 않은 3 개의 추가 픽셀을 0으로 채우는 것입니다.

참조 : http://cs231n.github.io/convolutional-networks/

이 노트는 Stanford CS 클래스 CS231n : 시각적 인식을위한 컨볼 루션 신경망에 수반됩니다. 과제와 관련하여 Justin Johnson과 연락하거나 코스 노트와 관련하여 Andrej Karpathy에게 연락 / 질문 / 버그보고


해당 노트의 저자를 명명하여 크레딧을 제공 할 수 있습니까?
실버 피쉬

저자는 노트에서 명확하게 자기 참조됩니다. cs231n.github.io
Bacon

2
링크를 따라 가면 명확하게 참조되지만 인용문도 여기에 표시되므로 여기에 신용도 있어야합니다. 이는 부분적으로 예의가 있지만 링크가 작동을 멈출 수 있기 때문에 (예 : 자료가 제거 / 페이 월 / 새 주소로 이동 된 경우) 불행히도 우리는이 사이트에서 "링크 썩음"에 심각한 문제가 있습니다. 통계 질문에 대한 고품질 답변의 장기 저장소로 사용 되려고하지만 이전 답변의 대부분은 더 이상 작동하지 않는 링크로 인해 더 이상 사용되지 않습니다. . 따라서 가능한 한 독립적 인 답변을 시도하는 것이 일반적으로 더 안전합니다.
Silverfish

0

이 논문은 정말 혼란 스럽다. 먼저, 이미지의 입력 크기가 잘못되었습니다. 224x224는 55의 출력을 제공하지 않습니다. 이러한 뉴런은 단순히 하나의 그룹화 된 픽셀과 유사하므로 출력은 임의의 값 (뉴런 값)의 2D 이미지입니다. 따라서 기본적으로 뉴런의 수 = widthxheightxdepth입니다.이를 알아낼 비밀은 없습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.