딥러닝/기본 연산들
-
CNN 파라미터 수 계산 방법딥러닝/기본 연산들 2022. 6. 4. 14:43
CNN 아키텍처의 컨볼루션 층 파라미터 개수 세는 법을 알아보겠습니다. 컨볼루션 층은 스트라이드가 1 또는 2일 때, 커널 사이즈가 1x1, 3x3, 5x5 일때로 또 다시 구분합니다. 스트라이드=1, 패딩=1, 커널 사이즈=3x3 배치 차원을 뺀 입력 차원 수는 (224, 224, 3)이고 3x3 컨볼루션을 쓰며 출력 차원 수는 (224, 224, 8)이라고 생각해 봅시다. 컨볼루션 연산을 통해 XY 평면 차원수는 그대로 유지하였고 채널 차원 수만 3에서 8로 증가했습니다. 이때 파라미터 수를 계산해 봅시다. 3x3x3 인 커널이 8개 존재하는 것이므로 3x3x3x8이 됩니다. 스트라이드=2, 패딩=2 , 커널 사이즈 5x5 배치 차원을 뺀 입력 차원 수는 (224, 224, 8)이고 3x3 컨볼루션을..
-
컨볼루션의 패딩 적용딥러닝/기본 연산들 2022. 6. 3. 21:39
컨볼루션에 패딩을 적용하면 해상도가 조금 늘어납니다. 그럼 과연 얼만큼 늘어날지 내가 알던게 맞을지 확인해 보도록 하겠습니다. 패딩은 컨볼루션의 입력 XY 평면 차원을 증가시킵니다. 보통 패딩을 주면 오른쪽과 하단쪽에만 주는 것으로 잘못 이해할 수 있습니다. 하지만 이런 패딩이 아닙니다. 이렇게 패딩을 주는 것이 아닙니다. Padding=1을 적용할 경우 동서남북 방향으로 +1씩 패딩이 주어집니다. 이렇게 말입니다. 몇 가지 예시를 보면 감을 잡을 수 있습니다. 입력 XY 차원 수가 (6, 6)이고 Conv 3x3 커널을 패딩 없이 적용할 경우 입력 XY 차원 수가 (6, 6)이고 Conv 3x3 커널을 패딩=1로 적용할 경우 입력 XY 차원 수가 (14, 14)이고 Conv 7x7 커널을 패딩 없이 적..
-
셔플 연산과 Conv 1x1의 공통점딥러닝/기본 연산들 2022. 6. 3. 19:52
셔플넷 (ShuffleNet)의 셔플 연산과 컨볼루션 1x1 연산간에는 공통점과 차이점이 있다는 점 알고 계신가요? 이 둘의 공통점은 채널 차원으로 엘리먼트들을 섞는다는 점입니다. 차이점도 알아보도록 하겠습니다. 셔플과 1x1 컨볼루션은 모두 채널 별로 뉴런들을 섞는 공통점이 있습니다. 채널 단위로 뉴런들을 섞습니다. 셔플은 특히 XY 평면 상에서는 뉴런의 움직임이 없습니다. 1x1 컨볼루션은 컨볼루션 정의 상 어쩔 수 없이 XY 평면 방향에서 보았을 때도 뉴런 값의 변형이 일어납니다. 그래서 XY 평면 상의 정보를 보존하고 싶을 때는 셔플을 사용하여 채널 별로 섞는 것이 바람직해 보입니다. 그리고 단순히 채널 별 정돈이 안되어 있는 경우에 적절히 섞어서 정돈만 하고 싶으면 셔플을 쓰는 것도 좋은 방법입..
-
Group Conv 그룹 컨볼루션딥러닝/기본 연산들 2022. 6. 3. 19:28
그룹 컨볼루션의 정확한 정의를 알아보도록 하겠습니다. 각 그룹별 컨볼루션 커널은 공유되는 것일까요? 아닐까요? 정답은 아닙니다. 그럼 자세히 알아보도록 하겠습니다. 정의에 따르면 일반적인 컨볼루션 커널의 차원수는 (배치 수, X, Y, Depth) 인데 이 중 Depth 값이 현재 레이어의 Depth 전체입니다. 이렇게 무심코 컨볼루션을 써 왔다면 한 번쯤은 Depth의 값이 너무 길다는 사실에 의문을 가질 법 했습니다. 그래서 컨볼루션 커널의 Depth 값을 줄여보고 싶었습니다. 그래서 탄생한 것이 Group Conv입니다. 그림에서 보듯이 Group Conv는 Depth를 3분할하여 각각에 대해 서로 가중치 값이 다르면서 Depth 길이가 1/3로 줄어든 1/3 컨볼루션을 차용하고 있습니다. 각 분할..
-
딥러닝 컨볼루션 conv 이란?딥러닝/기본 연산들 2022. 6. 3. 19:11
Conv 컨볼루션 연산의 정확한 정의에 대해 알아보도록 하겠습니다. 컨볼루션 연산을 설명할 때 흔히 2D 그래픽 이미지로 컨볼루션 커널을 표현하여 혼동이 될 때가 있습니다. 그래서 3D 그림으로 설명하겠습니다. Depth 차원이 어떻게 되는지를 먼저 아셔야 합니다. 컨볼루션층을 한번 거치면 Depth는 1이 아니라 커널의 개수 N입니다. 거대한 나무젓가락 한짝 같은 좁고 긴 컨볼루션 커널 (필터) 를 한번에 적용합니다. 적용시에는 Element-wise Multiplication 이라고 엘리먼트 간 곱셈이란 연산을 사용합니다. 이러한 커널을 XY차원 방향으로 한 번 쓱 훑고 지나갈 경우 1 Depth에 해당하는 뉴런들이 생성됩니다. 하나의 컨볼루션 연산은 여러 커널로 구성됩니다. 따라서 커널 수가 64개..
-
딥러닝 셔플 Shuffle 연산으로 채널 차원을 섞어주세요.딥러닝/기본 연산들 2022. 6. 3. 13:54
채널 방향으로 엘리먼트들을 섞을 수 있는 셔플이란 연산에 대해 알아보도록 하겠습니다. (H, W, C) 차원 부분이 원래는 (C, H, W) 차원으로 표기되었어야 하는데 감안하고 읽어주세요. 모델을 설계하다 보면 채널 방향으로 뉴런 값들을 섞고 싶은 지점이 있을 것입니다. 예를 들어 ResBlock 1, 2, 3를 배치하려고 해 봅시다. ResBlock 1 끝나는 지점에서 블록 사이에 원본 이미지 (배치, 224, 224, 3) 를 2번 주입하고 싶습니다. 단순히 행렬 합보다 이어 붙이는 것이 더 나을 것 같아 CAT (Concatination) 을 2번 했습니다. 평면 차원 해상도 차원이 (224, 224)가 아니라면 이미지 축소를 한 후에 CAT 하면 됩니다. 문제는 CAT 후에 채널 방향으로 보았을..