논문 읽기/Classification

[논문 읽기] DenseNet(2017) 리뷰, Densely Connected Convolutional Networks

AI 꿈나무 2021. 3. 17. 16:56
반응형

 이번에 읽어볼 논문은 DenseNet, 'Densely Connected Convolutional Networks'입니다.

 

 DenseNet은 ResNet과 Pre-Activation ResNet보다 적은 파라미터 수로 더 높은 성능을 가진 모델입니다. DensNet은 모든 레이어의 피쳐맵을 연결합니다. 이전 레이어의 피쳐맵을 그 이후의 모든 레이어의 피쳐맵에 연결합니다. 연결할 때는 ResNet과 다르게 덧셈이 아니라 concatenate(연결)을 수행합니다. 따라서 연결할 때는, 피쳐맵 크기가 동일해야 합니다. 피쳐맵을 계속해서 연결하면 채널수가 많아질 수 있기 때문에, 각 레이어의 피쳐맵 채널 수는 굉장히 작은 값을 사용합니다.

 

 

 이렇게 연결하면 어떤 장점이 있을까요?

 

1. strong gradient flow와 information flow를 갖습니다. 이는 기울기 소실 문제를 완화하고 feature reuse 효과가 있습니다.

 기존의 CNN 모델은 처음 레이어의 피쳐맵이 다음 레이어의 입력값으로 전달됩니다. 많은 레이어를 통과하여 신경망의 끝에 다다르면, 처음 레이어의 피쳐맵에 대한 정보는 사라질 수 있습니다. 이것을 feature reuse 문제라고 합니다. DenseNet은 처음 레이어의 피쳐맵을 마지막 레이어의 피쳐맵까지 연결합니다. 따라서 정보가 소실되는 것을 방지합니다. 오차 역전파법을 진행하다 보면 초기의 gradient는 소실될 수 있습니다. 초기 값을 마지막으로 직접적으로 전달하므로 오차 역전파를 진행할 때도, 값이 직접적으로 전달됩니다. 따라서 기울기 소실 문제도 완화합니다. 다양한 레이어의 피쳐맵을 연결해서 학습되기 때문에 정규화 효과도 있다고 하네요

 

2. 파라미터수와 연산량이 적습니다.

 DenseNet은 적은 채널수를 이용합니다. 각 레이어의 피쳐맵을 연결하여 다음 레이어로 전달하면, 적은 채널 수의 피쳐맵을 생성합니다. 그리고 이 피쳐맵은 이전 레이어의 피쳐맵과 결합하여 다음 레이어로 전달됩니다. 따라서 파라미터 수가 적습니다.

 

 이제 DenseNet 구조에 대해서 알아보겠습니다.

 

DenseNet

1. ResNet connectivity

 DenseNet을 ResNet과 비교하여 설명합니다. ResNet의 l번째 레이어 출력값은 $x_l$ = H($x_{l-1}$) + $x_{l-1}$이 됩니다. H()는 conv, bn, relu 함수의 연산을 의미합니다. 그리고 + xl-1은 skip connection에 의한 덧셈입니다. 이 경우에 레이어의 입력값이 출력값에 더해져 gradient flow가 직접적으로 전달됩니다. 하지만 덧셈으로 결합되기 때문에 신경망에서 정보 흐름(information flow)이 지연될 수 있다고 합니다.

 

2. Dense connectivity

 DenseNet은 이전 레이어를 모든 다음 레이어에 직접적으로 연결합니다. 따라서 정보 흐름(information flow)가 향상됩니다.

 위 수식 처럼 이전 레이어 $x_0, ... , x_{l-1}$가 다 결합되어 H() 연산을 수행합니다. DensNet에서 H() 함수는 BN, ReLU, 3x3 conv입니다. pre-activation resnet의 순서를 따랐습니다.

 

3. Dense Block

 연결(concatenation) 연산을 수행하기 위해서는 피쳐맵의 크기가 동일해야 합니다. 하지만 피쳐맵 크기를 감소시키는 pooling 연산은 conv net의 필수적인 요소입니다. pooling 연산을 위해 Dense Block 개념을 도입합니다. Dense Block은 여러 레이어로 구성되어 있습니다. Dense Block 사이에 pooling 연산을 수행합니다. pooling 연산은 BN, 1x1conv, 2x2 avg_pool로 수행합니다. 그리고 이를 transition layer이라고 부릅니다.

 

 transition layer에는 theta 하이퍼 파라미터가 존재합니다. theta는 transition layer가 출력하는 채널 수를 조절합니다. transition layer의 입력값 채널 수가 m이면 theta * m 개의 채널수를 출력합니다. 1x1 conv에서 채널 수를 조절하는 것입니다. 논문에서는 theta=0.5를 사용하여 transition layer의 출력 채널 수를 0.5m으로 합니다. 즉, transition layer는 피쳐 맵의 크기와 채널 수를 감소시킵니다.

 

 아래 그림을 보면 DenseNet은 3개의 Dense Block과 2개의 transition layer로 이루어져 있습니다.

 

4. Growth rate

Dense Block 내의 레이어는 k개의 피쳐 맵을 생성합니다. 그리고 이 k를 Growth rate라고 부르는 하이퍼파라미터 입니다. 논문에서는 k=12를 사용합니다. l번째 레이어는 k0 + k * (l-1) 개의 입력값을 갖습니다. k0은 입력 레이어의 채널 수 입니다. 이 Growth rate는 각 레이어가 전체에 어느 정도 기여를 할지 결정합니다.

 

5. Bottleneck layers

 DenseNet은 Bottleneck layer를 사용합니다. 보틀넥 레이어는 3x3 conv의 입력값 채널을 조절하여 연산량에 이점을 얻기 위해 사용됩니다. 1x1 conv는 3x3 conv의 입력값을 4k로 조절합니다. 그리고 3x3 conv는 k개의 피쳐맵을 생성하고 이전 레이어와 연결됩니다. 

 

 

6. DenseNet architecture

 ImageNet dataset에 대한 DenseNet의 전체 구조입니다. ImageNet은 다른 데이터 셋에비해 이미지 사이즈가 크기 때문에 다른 구조를 갖습니다. ImageNet에서는 k=32를 사용합니다. CIFAR-10, SVHN dataset에 대한 구조는 논문에 안나와 있네요.

 

 

Experiments

 CIFAR10, CIFAR100, SVHN dataset에 대한 DenseNet의 성능입니다. C10은 CIFAR10, C10+은 data augmentation이 적용된 것을 의미합니다.

 

 

 ResNet과의 파라미터 수와 학습 곡선 비교입니다.

 


참고자료

[1] arxiv.org/abs/1608.06993

[2] hoya012.github.io/blog/DenseNet-Tutorial-1/

반응형