태그 보관물: conv-neural-network

conv-neural-network

‘컨볼 루션으로 더 깊이 들어가기’에서 DepthConcat 작업은 어떻게 작동합니까? 제안 된 시작 모듈 의 빌딩 블록

읽기 컨볼 루션에 대해 더 깊이 이해하기 저는 제안 된 시작 모듈 의 빌딩 블록 인 DepthConcat 레이어를 발견했습니다 . 저자는 이것을 “필터 연결”이라고합니다. Torch 구현 이있는 것 같지만 실제로는 이해하지 못합니다. 누군가 간단한 말로 설명 할 수 있습니까?



답변

시작 모듈 의 출력 이 다른 크기 라고 생각하지 않습니다 .

여기에 이미지 설명을 입력하십시오

컨볼 루션 레이어의 경우 사람들은 종종 공간 해상도를 유지하기 위해 패딩을 사용합니다.

다른 컨볼 루션 레이어 중에서 오른쪽 아래 풀링 레이어 (파란색 프레임)가 어색해 보일 수 있습니다. 그러나 기존의 풀링 서브 샘플링 레이어 (빨간색 프레임, 보폭> 1)와 달리 풀링 레이어에는 보폭 1 을 사용했습니다 . 스트라이드 -1 풀링 레이어는 실제로 컨볼 루션 레이어와 같은 방식으로 작동하지만 컨볼 루션 연산은 max 연산으로 대체됩니다.

따라서 풀링 계층 이후의 해상도도 변경되지 않고 풀링 및 컨볼 루션 계층을 “깊이”차원으로 연결할 수 있습니다.

여기에 이미지 설명을 입력하십시오

위의 그림에서 종이에서 볼 수 있듯이 시작 모듈은 실제로 공간 해상도를 유지합니다.


답변

백서와 참고 자료를 읽으면서 구현에 관해 생각해 보았을 때와 동일한 질문을 염두에 두었습니다.

에서 당신이 참조 토치 코드 , 그것은 말합니다 :

--[[ DepthConcat ]]--
-- Concatenates the output of Convolutions along the depth dimension
-- (nOutputFrame). This is used to implement the DepthConcat layer
-- of the Going deeper with convolutions paper :

딥 러닝에서 “깊이”라는 단어는 약간 모호합니다. 다행히도이 SO Answer 는 다음과 같은 명확성을 제공합니다.

Deep Neural Networks에서 깊이는 네트워크의 깊이를 나타내지 만이 문맥에서 깊이는 시각적 인식에 사용되며 이미지의 3 차원으로 변환됩니다.

이 경우 이미지가 있으며이 입력의 크기는 32x32x3 (너비, 높이, 깊이)입니다. 깊이는 훈련 이미지의 다른 채널로 변환되므로 신경망은이 매개 변수를 기반으로 학습 할 수 있어야합니다.

따라서 DepthConcat은 텐서의 마지막 차원 인 깊이 차원과이 경우 3D 텐서의 3 차원을 따라 텐서를 연결합니다.

DepthConcat은 토치 코드가 말하는 것처럼 텐서를 깊이 차원이 아닌 모든 차원에서 동일하게 만들어야합니다 .

-- The normal Concat Module can't be used since the spatial dimensions
-- of tensors to be concatenated may have different values. To deal with
-- this, we select the largest spatial dimensions and add zero-padding
-- around the smaller dimensions.

예 :

A = tensor of size (14, 14, 2)
B = tensor of size (16, 16, 3)
result = DepthConcat([A, B])
where result with have a height of 16, a width of 16 and a depth of 5 (2 + 3).

여기에 이미지 설명을 입력하십시오

위의 다이어그램에서 DepthConcat 결과 텐서의 사진을 볼 수 있습니다. 여기서 흰색 영역은 0으로 채워지고 빨간색은 A 텐서이며 녹색은 B 텐서입니다.

이 예제에서 DepthConcat의 의사 코드는 다음과 같습니다.

  1. 텐서 A와 텐서 B를보고 가장 큰 공간 치수를 찾으십시오.이 경우 텐서 B의 너비와 높이가 16입니다. 텐서 A가 너무 작고 텐서 B의 공간 치수와 일치하지 않기 때문에 채워야합니다.
  2. 텐서 A의 크기를 만드는 첫 번째 및 두 번째 차원에 0을 추가하여 텐서 A의 공간 차원을 0으로 채 웁니다 (16, 16, 2).
  3. 패딩 된 텐서 A를 깊이 (3 차) 치수를 따라 텐서 B와 연결합니다.

나는 이것이 같은 백서를 읽는 동일한 질문을 생각하는 다른 누군가에게 도움이되기를 바랍니다.


답변