1. idea
당시 CNN의 연구에서 ResNet이 굉장한 성능을 보여주면서 short connection을 통해 효율적으로 모델을 학습시키는 형식으로 발전하고 있었다.
DenseNet은 당시의 관점에 초점을 맞추어 feed forward에서 각 레이어들이 다른 모든 레이어들과 connection을 갖는 구조로 연구되었다. 이름에서 알 수 있듯이 DenseNet은 이전 레이어가 하위의 레이어와만 연결 구조를 갖는 것이 아니라 L(L+1)/2개의 connection을 갖는 Dense한 구조라고 할 수 있다.
- DenseNet의 장점
- 기울기 소실 보완
- feature propagation 강화
- feature 재사용 권장
- 파라미터 수 감소
- ResNet에 비해 직관적인 information, gradient flow
- 효율적인 computational cost
2. Dense Block
위 이미지는 Dense Block의 구조로, input부터 output까지 전부 connectino이 보이는 걸 확인할 수 있다.
ResNet 같은 경우는 특정 layer의 input과 output의 feature map 사이즈를 동일하게 하여 element-wise하게 add하는 방식이지만, DenseNet 같은 경우 layer의 input feature map들과 output feature map들을 concat하여 채널 수가 늘어나는 식으로 다음 layer의 input을 만들고 있다. 이 때 각 dense block에서 몇 개의 feature map을 뽑을지 결정하는 하이퍼파라미터는 growth rate 'k'라고 하며, 이 값은 모델 파라미터 수에 직접적인 인자이다. 위 이미지는 k=4인 경우이다. 본래는 모델이 깊이가 깊어질수록 conv block 한 번에 많은 feature map들을 뽑지만, 논문에서는 block마다 k-12로 설정하는 것이 효율적인 구조라고 한다.
모델 마지막의 Transition Layer는 1X1 conv layer와 2X2 avgPooling(2stride)로 구성되어있다. 해당 레이어는 Dense Block에서 feature map의 down sizing을 할 수 없어, 1X1 conv layer로 채널을 정리해준 뒤, Pooling을 통해 feature map size를 반으로 줄여준다. 여기서도 하이퍼 파라미터 θ가 존재하는데, 이는 dense block에서 m개의 채널을 입력받았을 때, Transition layer가 출력하는 채널 개수를 조정하는 인자로써 mXθ 로 출력 채널을 맞춘다. 논문에서는 0.5로 설정되어있다.
3. 전체 구조
DenseNet은 BatchNorm-ReLU-Conv 순서의 pre-activation 구조를 사용한다.
또한 ResNet과 마찬가지로 bottleneck 구조를 사용하는데, 차이점은 1X1 conv 적용 시 4*k개의 채널로 줄이며, 3X3 conv 적용 시 input feature map의 채널 수가 아닌 growth rate인 k개의 채널로 줄인다는 것이다. 이러한 Bottleneck 구조를 사용하면 사용하지 않을 때와 비슷한 파라미터 개수로 더 좋은 성능을 보인다고 논문에서 밝히고 있다.