본문 바로가기
CV(Computer Vision)

DenseNet (Densely Connected Convolutional Networks)

by namduhus 2026. 5. 25.

[논문 정보]

Gao Huang, Zhuang Liu, Laurens van der Maaten, Kilian Q. Weinberger et al.
Densely Connected Convolutional Networks
arXiv:1608.06993
2016년 8월 초판 / 2018년 1월 v5


1. 서론

CNN은 이미지 인식 분야에서 AlexNet, VGG, GoogLeNet, ResNet을 거치며 점점 깊어지는 방향으로 발전해왔다. 초기 LeNet은 5개 층 수준이었지만, VGG는 19개 층, ResNet과 Highway Network는 100층 이상의 네트워크를 효과적으로 학습할 수 있음을 보여주었다. 이 흐름에서 중요한 문제는 단순히 “네트워크를 더 깊게 만들 수 있는가”가 아니라, 깊어진 네트워크 안에서 입력 정보와 그래디언트가 손실되지 않고 끝까지 전달될 수 있는가였다.

 

깊은 CNN에서 대표적으로 발생하는 문제는 vanishing gradient와 feature degradation이다. 입력에 가까운 층에서 추출된 저수준 특징은 뒤쪽 층으로 전달되는 과정에서 약해질 수 있고, 반대로 loss에서 발생한 학습 신호는 앞쪽 층까지 충분히 전달되지 않을 수 있다. ResNet은 이 문제를 identity skip connection으로 완화했다. 즉, 어떤 층의 출력에 비선형 변환 결과를 더하는 방식으로, 그래디언트가 우회 경로를 통해 흐를 수 있게 했다.

 

DenseNet은 ResNet의 문제의식에서 출발하지만, 해결 방식은 다르다. ResNet이 이전 feature와 새 feature를 더하기로 결합했다면, DenseNet은 모든 이전 layer의 feature map을 현재 layer의 입력으로 concatenation한다. 논문은 이를 "각 layer가 모든 이전 layer의 feature-map을 입력으로 받고, 자신의 feature-map을 모든 이후 layer에 전달하는 구조"로 정의한다. 전통적인 L-layer CNN이 대략 L개의 순차 연결을 갖는다면, DenseNet은 약 L(L+1)/2개의 직접 연결을 갖는다.  

 

이 구조의 핵심은 feature reuse다. 기존 CNN에서는 각 layer가 이전 layer의 상태를 받아 새 상태로 변환하고, 다음 layer에 넘긴다. 이 과정에서 유지해야 할 정보와 새로 생성해야 할 정보가 섞인다. DenseNet은 이미 만들어진 feature를 계속 보존하고, 각 layer는 새로운 feature 몇 개만 추가하도록 설계한다. 따라서 네트워크는 매 layer마다 모든 정보를 다시 학습할 필요가 없고, 이전 layer의 feature를 직접 재사용할 수 있다.

 

이러한 설계는 직관적으로는 파라미터 수를 증가시킬 것처럼 보인다. 모든 layer가 서로 연결되기 때문이다. 그러나 논문은 오히려 DenseNet이 더 적은 파라미터로 높은 성능을 낼 수 있음을 보인다. 이유는 각 layer가 매우 좁게 설계될 수 있기 때문이다. DenseNet에서 한 layer가 새로 추가하는 feature-map 수는 growth rate k로 조절된다. 예를 들어 k=12라면 각 layer는 12개의 feature-map만 새로 생성하고, 나머지는 이전 layer들의 feature를 그대로 활용한다.

 

결국 DenseNet의 기여는 단순히 "skip connection을 많이 추가했다"가 아니다. 핵심은 정보 보존과 정보 추가를 분리한 CNN 구조를 제안했다는 점이다. ResNet은 이전 정보와 새 정보를 더해서 하나의 상태로 만든다. DenseNet은 이전 정보를 그대로 보존하고, 새 정보는 뒤에 붙인다. 이 차이가 feature reuse, parameter efficiency, implicit deep supervision이라는 효과로 이어진다.


2. 문제 정의

이 논문이 다루는 문제는 깊은 CNN에서 발생하는 정보 흐름의 비효율성이다. CNN이 깊어질수록 receptive field가 커지고 복잡한 추상 feature를 학습할 수 있지만, 동시에 입력 정보와 학습 신호가 여러 층을 거치며 약해지는 문제가 발생한다. 특히 앞쪽 layer는 이미지의 edge, texture, local pattern 같은 중요한 저수준 feature를 학습하는데, 이러한 feature가 뒤쪽 layer에서 필요함에도 불구하고 직접 접근하기 어렵다.

 

전통적인 feed-forward CNN은 다음과 같이 표현할 수 있다.

\[x_l=H_l(x_{l-1})\]

여기서 \( x_l \)은  \( l \) 번째 layer의 출력이고,  \( H_l \)은 convolution, batch normalization, activation 등으로 구성된 비선형 변환이다. 이 구조에서는 \( l \)번째 layer가 오직 직전 layer의 출력만 입력으로 받는다. 따라서 \( x_0 \)의 정보가 \( x_l \)까지 도달하려면 모든 중간 layer를 통과해야 한다.

ResNet은 이 문제를 다음과 같이 완화한다.

\[x_l=H_l(x_{l-1})+x_{l-1}\]

이 방식은 identity connection을 통해 그래디언트 흐름을 개선한다. 하지만 ResNet은 두 feature를 더하기 때문에, 이전 feature와 새 feature가 하나의 tensor로 합쳐진다. 이때 정보가 보존되기는 하지만, 어떤 feature가 어느 layer에서 왔는지 명시적으로 분리되어 유지되지는 않는다. 논문은 이 summation 방식이 정보 흐름을 제한할 수 있다고 본다.

 

DenseNet은 다음과 같이 문제를 재정의한다. "각 layer가 직전 layer만 보지 말고, 이전 모든 layer의 feature-map을 직접 볼 수 있으면 어떨까?" 이를 수식으로 표현하면 다음과 같다.

\[x_l=H_l([x_0,x_1,...,x_{l-1}])\]

이전 모든 feature-map의 concatenation이다. 즉, DenseNet의 l번째 layer는 네트워크가 지금까지 축적한 전체 feature 집합을 입력으로 받는다.

 

이 문제 설정의 어려움은 두 가지다. 첫째, 모든 layer를 연결하면 메모리와 연산량이 증가할 수 있다. 둘째, feature-map의 spatial size가 다르면 concatenation이 불가능하다. DenseNet은 이를 해결하기 위해 dense block과 transition layer를 도입한다. 같은 feature-map 크기를 갖는 layer들끼리는 dense connection을 만들고, block 사이에서는 convolution과 pooling을 통해 크기를 조정한다.


3. 제안 방법론

DenseNet의 핵심 아이디어는 다음 한 문장으로 요약할 수 있다.

각 layer가 이전 모든 layer의 feature-map을 입력으로 받고, 자신이 만든 feature-map을 이후 모든 layer에 전달하도록 만들어 feature reuse를 극대화한다.

3.1 Dense Connectivity

DenseNet에서 가장 중요한 구성은 dense connectivity다. 일반 CNN에서는 layer가 순차적으로 연결된다. 반면 DenseNet에서는 하나의 dense block 안에서 모든 layer가 이후 모든 layer와 직접 연결된다. 논문 Figure 1은 growth rate k=4인 5-layer dense block을 예시로 보여준다. 각 layer는 이전 layer 전체의 feature-map을 입력으로 받는다.

이 구조는 다음 수식으로 표현된다.

\[x_l=H_l([x_0,x_1,...,x_{l-1}])\]

여기서 중요한 점은 더하기가 아니라 concatenation이라는 것이다. ResNet은 더하는거라면, DenseNet은 channel dimension 방향으로 이어 붙인다. 따라서 이전 feature들이 사라지지 않고, 이후 layer에서 그대로 접근 가능하다.

 

이 방식은 feature reuse를 구조적으로 강제한다. 예를 들어 앞쪽 layer에서 edge나 texture를 잘 추출했다면, 뒤쪽 layer는 이를 다시 만들 필요가 없다. 필요할 때 그대로 가져다 쓰면 된다. 따라서 각 layer는 전체 표현을 새로 만드는 것이 아니라, 기존 feature 집합에 새로운 feature 몇 개를 추가하는 역할을 한다.


3.2 Composite Function

DenseNet의 각 layer \( H_l \)은 단순 convolution 하나가 아니라 composite function이다. 논문에서는 Batch Normalization, ReLU, 3×3 Convolution의 순서로 구성한다.

\[H_l(\cdot)=Conv(3 \times 3)(ReLU(BN(\cdot)))\]

이는 pre-activation ResNet의 설계 영향을 받은 구조다. Batch Normalization을 먼저 적용하고, ReLU를 거친 뒤 convolution을 수행하면 학습 안정성이 좋아진다. DenseNet은 모든 layer가 이전 feature-map을 많이 입력으로 받기 때문에, 입력 분포를 안정화하는 BN이 특히 중요하다.


3.3 Dense Block

Dense connection은 feature-map의 spatial size가 같을 때만 가능하다. 예를 들어 32×32 feature-map과 16×16 feature-map은 바로 concatenation할 수 없다. 따라서 DenseNet은 전체 네트워크를 여러 개의 dense block으로 나눈다.

 

논문 Figure 2는 세 개의 dense block으로 구성된 DenseNet 구조를 보여준다. 입력 이미지가 convolution을 통과한 뒤 Dense Block 1, transition layer, Dense Block 2, transition layer, Dense Block 3을 거쳐 최종 classifier로 전달된다. 각 dense block 내부에서는 dense connectivity가 적용되고, block 사이에서는 transition layer가 feature-map 크기를 줄인다.

이 설계는 CNN의 일반적인 계층적 표현 구조와 잘 맞는다. 앞쪽 block은 고해상도 feature를 다루고, 뒤쪽 block은 더 낮은 해상도에서 더 추상적인 feature를 다룬다. DenseNet은 이 계층 구조를 유지하면서도, 각 resolution stage 내부에서는 모든 layer가 feature를 공유하도록 만든다.


3.4 Transition Layer

Transition layer는 dense block 사이에 위치한다. 역할은 두 가지다. 첫째, feature-map의 spatial size를 줄인다. 둘째, channel 수를 조절한다. 논문에서는 transition layer를 Batch Normalization, 1×1 Convolution, 2×2 Average Pooling으로 구성한다.

 

1×1 convolution은 channel dimension을 조절하는 역할을 한다. 그 뒤 average pooling은 spatial resolution을 절반으로 줄인다. 예를 들어 CIFAR 실험에서는 세 개의 dense block이 각각 32×32, 16×16, 8×8 feature-map 크기를 갖도록 구성된다.

 

Max pooling이 아니라 average pooling을 사용한 점도 흥미롭다. DenseNet의 목적은 feature를 최대한 보존하고 재사용하는 것이다. Average pooling은 feature 정보를 비교적 부드럽게 축약하는 방식이므로, DenseNet의 정보 보존 철학과 잘 맞는다.


3.5 Growth Rate

DenseNet에서 각 layer가 새로 생성하는 feature-map 수를 growth rate k라고 한다. 만약 초기 입력 channel 수가 k_0이고, 각 layer가 k개의 feature-map을 생성한다면, l번째 layer의 입력 channel 수는 다음과 같다.

\[k_0+k \times(l-1)\]

즉, layer가 깊어질수록 입력 channel 수는 선형적으로 증가한다. 하지만 각 layer가 새로 추가하는 channel 수는 k개로 제한된다. 논문은 k=12처럼 작은 growth rate만으로도 좋은 성능을 낼 수 있음을 보인다.

growth rate의 직관은 "네트워크의 collective knowledge에 layer마다 얼마나 많은 새 정보를 추가할 것인가"이다. k가 크면 layer마다 많은 feature를 추가하므로 모델 capacity가 커진다. 그러나 파라미터와 연산량도 증가한다. k가 작으면 모델은 더 compact해지고, 이전 feature reuse에 더 의존한다.


3.6 BottleNeck Layer: DenseNet-B

DenseNet은 layer가 깊어질수록 입력 channel 수가 증가한다. 이때 3×3 convolution을 바로 적용하면 연산량이 커질 수 있다. 이를 줄이기 위해 논문은 bottleneck layer를 도입한다. DenseNet-B에서는 각 3×3 convolution 앞에 1×1 convolution을 추가한다.


3.7 Compression: DenseNet-C 

DenseNet-C는 transition layer에서 channel 수를 줄이는 방식이다. dense block이 m개의 feature-map을 출력한다면, 다음 transition layer는M개의 feature-map만 출력한다.


3.8 DenseNet-BC

DenseNet-BC는 bottleneck과 compression을 모두 적용한 버전이다. 즉, dense block 내부 layer에는 bottleneck 구조를 적용하고, dense block 사이 transition layer에서는 compression을 적용한다. 논문에서 가장 강력한 실험 결과를 보인 모델들이 DenseNet-BC다.


4. 핵심 통찰 및 의의

DenseNet의 첫 번째 핵심 통찰은 feature를 다시 학습하지 말고 재사용하라는 것이다. 기존 CNN에서는 layer가 깊어질수록 앞쪽 feature를 직접 사용하기 어렵다. ResNet은 identity path로 이를 완화했지만, feature를 summation으로 섞는다. DenseNet은 feature를 섞지 않고 보존한다. 이 차이 때문에 뒤쪽 layer는 앞쪽 layer의 feature-map을 명시적으로 다시 사용할 수 있다.

 

두 번째 통찰은 네트워크의 상태를 누적 feature 집합으로 볼 수 있다는 점이다. 전통적인 CNN은 각 layer가 상태를 읽고 수정한 뒤 다음 layer로 넘기는 구조다. DenseNet은 각 layer가 기존 상태를 수정하는 것이 아니라, 기존 상태에 새로운 feature를 추가한다. 이 관점에서 DenseNet은 "feature memory"를 가진 CNN처럼 해석할 수 있다.

 

세 번째 통찰은 short path가 많을수록 학습이 쉬워진다는 점이다. ResNet, Highway Network, Stochastic Depth, FractalNet은 모두 어떤 방식으로든 앞쪽 layer와 뒤쪽 layer 사이의 경로를 짧게 만든다. DenseNet은 이를 가장 직접적인 방식으로 구현한다. 모든 layer가 이후 모든 layer와 연결되므로, loss에서 앞쪽 layer까지의 그래디언트 경로가 짧아진다. 논문은 이를 implicit deep supervision으로 해석한다.

 

네 번째 통찰은 parameter efficiency와 regularization이 연결되어 있다는 점이다. DenseNet은 layer마다 많은 feature를 새로 만들지 않고, 작은 growth rate로 feature를 추가한다. 따라서 파라미터 수가 줄고, 불필요한 feature 중복도 줄어든다. 이는 작은 데이터셋에서 과적합을 완화하는 효과로 이어진다.

 

다섯 번째 통찰은 DenseNet이 단순한 구조 변경이지만, CNN 설계 철학을 바꿨다는 점이다. VGG는 depth를, GoogLeNet은 multi-scale width를, ResNet은 residual learning을 강조했다. DenseNet은 feature reuse와 dense information flow를 강조한다. 이후 segmentation, detection, medical imaging, feature extraction 등 다양한 컴퓨터 비전 분야에서 DenseNet 계열 구조가 활용된 이유도 이 때문이다.


5. 한계점 및 향후 연구

DenseNet의 가장 큰 한계는 memory consumption이다. 모든 이전 feature-map을 concatenation해야 하므로, naive implementation에서는 feature-map 저장 비용이 커질 수 있다. 논문에서도 DenseNet의 단순 구현은 GPU memory 비효율이 있을 수 있으며, memory-efficient implementation에 대한 별도 기술 보고서를 참고하라고 언급한다.  

 

두 번째 한계는 concatenation으로 인해 channel 수가 계속 증가한다는 점이다. growth rate가 작으면 문제가 덜하지만, 깊은 네트워크나 큰 growth rate에서는 입력 channel 수가 빠르게 증가한다. 이를 해결하기 위해 bottleneck과 compression이 필요하며, 실제로 논문의 강력한 모델은 DenseNet-BC다.

 

세 번째 한계는 모든 task에서 깊은 DenseNet이 항상 좋은 것은 아니라는 점이다. SVHN처럼 상대적으로 쉬운 데이터셋에서는 더 깊은 DenseNet-BC가 짧은 모델보다 성능을 더 개선하지 못했다. 논문은 이 현상을 매우 깊은 모델이 쉬운 task에서 과적합할 수 있기 때문이라고 해석한다.  

 

향후 연구 관점에서 DenseNet은 feature transfer에 적합한 구조다. 논문 결론에서도 DenseNet이 compact internal representation과 reduced feature redundancy를 가지므로, convolutional feature를 기반으로 하는 다양한 vision task에서 좋은 feature extractor가 될 수 있다고 제안한다


6. 결론

DenseNet은 ResNet 이후 CNN 구조 연구에서 매우 중요한 전환점을 만든 논문이다. ResNet이 "깊은 네트워크를 학습 가능하게 만드는 방법"을 제시했다면, DenseNet은 "깊은 네트워크 내부의 feature를 어떻게 보존하고 재사용할 것인가"에 집중했다.

 

DenseNet의 핵심은 모든 layer를 dense하게 연결하고, 이전 feature-map을 summation이 아니라 concatenation으로 전달하는 것이다. 이를 통해 vanishing gradient를 완화하고, feature propagation을 강화하며, feature reuse를 유도하고, 파라미터 수를 줄인다.

 

실험적으로 DenseNet은 CIFAR-10, CIFAR-100, SVHN, ImageNet에서 강력한 성능을 보였고, 특히 DenseNet-BC는 ResNet 대비 훨씬 적은 파라미터로 유사하거나 더 좋은 성능을 달성했다. DenseNet-BC L=100, k=12가 ResNet-1001과 유사한 성능을 90% 적은 파라미터로 달성한 결과는 이 논문의 핵심 메시지를 잘 보여준다.  

 

이 논문의 의의는 단순히 classification 성능 향상에만 있지 않다. DenseNet은 "깊이", "연결성", "feature reuse", "parameter efficiency" 사이의 관계를 명확히 보여준 구조다. 이후 많은 컴퓨터 비전 모델이 multi-level feature aggregation, feature pyramid, skip connection, encoder-decoder 구조를 적극적으로 활용하게 된 흐름에서도 DenseNet의 영향은 크다.


References
논문 원문: Densely Connected Convolutional Networks

https://arxiv.org/abs/1608.06993