DenseNet
DenseNet(영어: Dense Convolutional Network, 덴스넷)은 층(layer) 간의 연결을 극대화하여 특징 재사용(feature reuse)과 기울기 흐름(gradient flow)을 개선한 컨볼루션 신경망(CNN) 구조이다.
개요[편집 | 원본 편집]
DenseNet은 각 층이 이전 모든 층의 출력(feature map)을 입력으로 받아들이고, 자신의 출력을 이후 모든 층이 다시 입력으로 전달하는 구조를 가진다. 즉, 하나의 Dense Block 내부에서 l번째 층의 입력은 0번째부터 (l−1)번째 층의 출력이 모두 연결(concatenate)된 형태이다. 이 구조는 정보 흐름을 원활하게 만들고, 기울기 소실(vanishing gradient) 문제를 완화하며, 특징 재사용을 극대화한다.
역사[편집 | 원본 편집]
DenseNet은 2017년 가오 후앙(Gao Huang), 즈앙 리우(Zhuang Liu), 로렌스 반 더 마아텐(Laurens van der Maaten), 킬리안 와인버거(Kilian Q. Weinberger)에 의해 제안되었다. 논문 제목은 “Densely Connected Convolutional Networks”이며, CVPR 2017에서 발표되었다. CIFAR-10, CIFAR-100, ImageNet 등 여러 벤치마크에서 당시 최상위 성능을 기록하였다.
아키텍처[편집 | 원본 편집]
DenseNet은 Dense Block과 Transition Layer로 구성된다.
Dense Block[편집 | 원본 편집]
Dense Block은 내부의 모든 층이 이전 모든 층의 출력을 입력으로 받는 구조를 가진다. 각 층은 새로운 특징 맵만 생성하고, 이전 특징 맵은 그대로 연결(concatenate)된다. 이때 “growth rate(k)”라는 하이퍼파라미터가 각 층이 새롭게 생성하는 채널 수를 결정한다.
Dense Block 내부의 연산 흐름은 다음과 같다.
- Batch Normalization
- ReLU 활성화 함수
- 1×1 컨볼루션 (Bottleneck layer, 선택적)
- Batch Normalization
- ReLU 활성화 함수
- 3×3 컨볼루션
- 출력 특징 맵을 이전 출력들과 연결(concatenate)
Transition Layer[편집 | 원본 편집]
Dense Block 사이에는 Transition Layer가 존재하며, 네트워크의 크기를 제어한다.
- 1×1 컨볼루션을 통해 채널 수를 줄인다.
- 2×2 평균 풀링(Average Pooling) 또는 스트라이드 2 다운샘플링을 수행한다.
이 과정을 통해 계산량과 메모리 사용량을 줄이고, 블록 간 연결을 효율적으로 관리한다.
전체 구조 (예시)[편집 | 원본 편집]
- 초기 컨볼루션 계층 (7×7 Conv, Stride 2)
- 맥스풀링 (3×3, Stride 2)
- Dense Block 1
- Transition Layer 1
- Dense Block 2
- Transition Layer 2
- Dense Block 3
- Transition Layer 3
- Dense Block 4
- 글로벌 평균 풀링 (Global Average Pooling)
- 완전연결층 (Fully Connected Layer) → Softmax 출력
주요 버전[편집 | 원본 편집]
- DenseNet-121
- 4개의 Dense Block으로 구성, 각 블록의 층 수는 [6, 12, 24, 16].
- Growth rate = 32.
- DenseNet-169
- 블록 구성: [6, 12, 32, 32].
- 더 깊은 네트워크로 CIFAR 및 ImageNet에서 높은 정확도 달성.
- DenseNet-201
- 블록 구성: [6, 12, 48, 32].
- 복잡한 특징 추출에 강함.
- DenseNet-264
- 블록 구성: [6, 12, 64, 48].
- 매우 깊은 구조로 고해상도 인식 과제에 사용됨.
기술적 특징[편집 | 원본 편집]
- 층 간의 직접 연결로 인해 기울기 소실 문제를 완화함.
- 특징 재사용이 활발하게 이루어져 파라미터 효율이 높음.
- 동일한 성능을 내는 기존 네트워크보다 훨씬 적은 파라미터를 가짐.
- 학습이 빠르고, 표현력 대비 모델 크기가 작음.
한계[편집 | 원본 편집]
- 모든 층의 출력을 연결(concatenate)하기 때문에 메모리 사용량이 증가함.
- 네트워크가 깊어질수록 계산량이 많아짐.
- Growth rate와 압축율(compression factor) 조절이 모델 효율에 큰 영향을 미침.
같이 보기[편집 | 원본 편집]
참고 문헌[편집 | 원본 편집]
- Gao Huang, Zhuang Liu, Laurens van der Maaten, Kilian Q. Weinberger, "Densely Connected Convolutional Networks," IEEE Conference on Computer Vision and Pattern Recognition (CVPR), 2017.
- Ian Goodfellow, Yoshua Bengio, Aaron Courville, "Deep Learning," MIT Press, 2016.
각주[편집 | 원본 편집]
없음