DenseNet과 SENet: 딥러닝 논문을 이해하자 II

오대근·2022년 7월 4일
0

Going Deeper

목록 보기
2/6

ResNet 이후 시도(1) Connection을 촘촘히

1. DenseNet

Densely Connected Convolutional Networks의 저자들은 DenseNet이 ResNet의 shortcut connection을 Fully Connected Layer처럼 촘촘히 가지도록 한다면 더욱 성능 개선 효과가 클 것이라고 생각하고 이를 실험으로 입증함.

1-1. Dense Connectivity

일반적인 컨볼루션 네트워크가 LL개의 레이어에 대해 각 레이어 간 하나씩의 연결, 즉 총 LL개의 연결을 갖는 것과는 달리, DenseNet의 기본 블록은 LL 개의 레이어가 있을 때 레이어 간 L(L+1)/2L(L+1)/2 개의 직접적인 연결(direct connection)을 만든다.

이러한 연결 구조를 "dense connectivity" 라고 부르며, 위처럼 H1 로 표기하고 이를 합성함수(composite function)라고 부름.

Shortcut connection이 있어 ResNet과 비슷해 보일 수 있지만 ResNet은 shortcut을 원소별로 단순히 더해주었던 반면, DenseNet은 하나하나를 차원으로 쌓아서(concatenate) 하나의 텐서로 만들어 낸다는 사실이 다름.

1-2. Growth Rate

특성 맵을 더해주던 ResNet과 달리 DenseNet에서는 특성 맵을 채널 방향으로 쌓아서 사용
4개의 채널을 가진 CNN 레이어 4개를 DenseNet 블록으로 만들었을 때, 입력값의 채널 개수가 4인 경우 블록 내 각 레이어의 입력값은 몇 개 채널을 가지게 될까?

첫 번째 레이어: 입력값의 채널 그대로 4.
두 번째 레이어: 입력값은 입력 데이터 채널 4 + 첫 번째 레이어 출력값 채널 4 = 8.
세 번째 레이어: 입력 데이터의 채널 4 + 첫 번째 레이어 출력값 채널 4 + 두 번째 레이어 출력값 채널 4 = 12개의 특성 맵을 입력받음
네 번째 레이어: 같은 방식으로 16개의 특성 맵을 입력받음.

DenseNet 구현체는 growth rate로 32를 사용했다고 하자.
12개의 컨볼루션 레이어가 있는 두 번째 Dense block을 구현할 때 각 레이어에서 입력받는 채널은 몇 개가 될까?
두 번째 Dense block에 주어지는 입력은 32개의 채널을 가지고 있다.

ResNet 이후 시도(2) 어떤 특성이 중요할까?

2. SENet(Squeeze-and-Excitation Networks)

일반적인 CNN은 입력에 대해서 컨볼루션 필터를 필터 사이즈(filter size)에 따라 적용
필터의 개수가 곧 컨볼루션 레이어 출력값의 채널 개수
SqueezeNet에서는 이때 채널 방향으로 global average pooling을 적용, 압축된 정보를 활용하여 중요한 채널이 활성화되도록 함.
(CNN에서 나온 특성 맵의 채널에 어텐션(attention) 매커니즘을 적용한 블록을 만들어낸 것과 비슷)

2-1. Squeeze


Squeeze: 특성에서 중요한 정보를 짜내는 과정
특성 맵의 채널에서 어느 채널이 중요한지 정보를 만들기 위해서는 우선 채널에 따른 정보를 압축해서 가져와야 함.

어떻게 채널별 정보를 압축할 수 있을까?
-> 풀링(pooling) 기법을 사용
GAP: Global Average Pooling
풀링은 보통 커널(kernel) 영역의 정보를 압축하는 데 사용.
Max Pooling: 커널 영역에 대해 최댓값만 남김.
Average Pooling: 커널 영역에 대해 평균값을 남김.


Squeeze는 Fsq함수에서 일어남.
Ftr이라는 컨볼루션 레이어를 거치면 "H x W x C"의 크기를 가진 특성 맵 U가 나옴.
U에 Squeeze를 적용하면 "1x1xC"의 크기가 나옴.
벡터의 차원으로 볼 수 있듯이 각 채널별로 딱 1개의 숫자만 남도록 2D 특성맵 전체에 대해 평균값을 남기는 global average pooling을 수행.
이렇게 얻어진 "1x1xC"의 벡터는 채널별 정보를 압축해 담고 있음.

2-2. Excitate

채널별 정보를 짜냈으니 채널별 정보에 따라 어떤 채널을 강조해야 할지 판단해야함.
1. z는 위에서 global average pooling을 적용한 특성, 즉 "squeeze" 활동의 결과물.
2. 이 특성에 W1(가중치)을 곱해주는 linear 레이어를 거치고 ReLU 활성화 함수 δ(delta)를 거침.
3. 이후 두 번째 W2를 곱해주는 linear layer를 거치고
마지막으로 시그모이드 활성화 함수 σ(sigma)를 거침.

시그모이드 사용 이유: 가장 중요한 하나의 채널만 활성화되는 것이 아닌, 여러 채널들이 서로 다른 정도로 활성화되도록 하기 위함
(데이터셋에 정답 라벨이 하나뿐인 단순 분류 모델 활성화 함수로 소프트맥스(SoftMax)를 사용해서 단 하나의 최댓값을 찾지만, 하나의 대상에도 여러 개의 클래스의 정답 라벨을 지정할 수 있는 다중 라벨 분류(multi label classification)에서는 시그모이드를 사용하는 것과 같은 방식.)

이렇게 계산된 벡터를 기존의 특성 맵에 채널에 따라서 곱해주어 중요한 채널이 활성화 되도록 만들어 줌.

profile
neuro.deeplearning

0개의 댓글