resnet이 위 수식처럼 feature map을 summation 해주는 방식이었다면 densenet은 feature map들을 feed-forward 형태로 concatenate 해주며 이를 통해 layer에서 추가될 정보와 보존해야할 정보가 명시적으로 구분된다.
densenet 팀은 Stochastic depth 논문에서 residual block을 random하게 drop해주면 네트워크의 성능을 향상시키는 점에서 deep network에서 수 많은 redundancy layer가 있다는 것을 관찰하였고 densenet의 feature reuse 를 통해 parameter를 최소한으로 사용하면서 network의 최대 potential을 뽑아냈다고 설명한다.
또한 이러한 dense connection 구조를 통해 Deeply Supervised Network(DSN)에서 auxiliary classifier 에 의해 internel layer들의 gradient를 강화시켜주는 것 처럼 Implicit Deep Supervision 을 이끈다고 설명한다.
Dense block내의 Composite function 은 Resnet의 pre-activation 구조인 BN-ReLU-Conv 순서의 구조를 사용하였다.
위 그림처럼 DenseNet은 하나의 Dense Block후에 feature map을 downsampling하기 위한 Transition Layer를 거친다.
Transition Layer는 BN - ReLu - 1x1 Conv - 2x2 average pooling 구조를 갖는다.
논문에서는 Transition Layer의 1x1 Conv에서 줄일 channel수를 결정하는 를 hyper-parameter로 사용한다고 하며 experiment때 로 0.5를 사용하여 Transition Layer를 거칠때 feature map의 수 (channel수)를 반으로 줄여주었다고 한다.
Figure1 에서 보다시피 각 conv layer는 feature map을 4개씩 생성해주며 이는 input feature와 concatenate되어 다음 layer의 input으로 들어간다.
이때 k개씩 증가되는 feature map을 hyper-parameter로 두었으며 과 같이 layer의 feature map수를 나타낼 수 있다.
이러한 hyper-parameter k를 Growth rate 라고 하고 논문에서는 DenseNet은 k=12 와 같이 작은 Growth rate를 사용하여 narrow layer 를 갖어 상대적으로 적은 parameter 수를 갖는다고 말한다.
그림 출처 : Hoya012's Research Blog
위 그림에서 보다시피 Resnet 에서 1x1 conv를 통해 channel수를 줄이고 3x3 conv연산 후 다시 channel수를 맞춰주는 형태와 조금 다르게 DenseNet 에서는 1x1 conv 에서 4k 만큼의 channel을 생성하여 3x3 conv의 input을 (k일때보다) 증가시켜주고 다시 3x3 conv에서 k만큼 channel을 줄여주는 형태를 갖는다.
그림 출처 : Hoya012's Research Blog
CIFAR-10에 대한 아키텍쳐는 위와 같이 조금 다른 구성을 갖는다.
논문에 나와있는 CIFAR-10에 대한 training config는 다음과 같다.
위 table을 통해 DenseNet은 ResNet보다 적은 parameter를 사용하며 훨씬 적은 error rate를 보인다.
이러한 적은 parameter 사용으로 인해 overfitting이 덜 발생하는 경향을 보인다고 한다.