앞서 살펴본 ResNet이 이전 layer 들의 feature 를 다음 layer 에 더해주는 방식이었다면, DenseNet은 전체 layer 를 모두 누적하여 쌓는 (concat) 방식이라고 할 수 있다.
출처 : Densely Connected Convolutional Networks
DenseNet의 목적은 ResNet과 마찬가지로 기울기 소실 방지 및 파라미터의 수를 절약하여 연산 속도를 빠르게 하는 데 있다. DenseNet 에 활용되는 개념에는 아래와 같은 것이 있다.
1. Growth Rate
DenseNet 또한 여러개의 feature 가 누적되는 개념이다 보니 channel 의 개수가 많은 경우 계속해서 channel 이 늘어날 수 있다. 따라서 DenseNet 에서는 각 layer feature의 channel 개수를 작은 값으로 설정하는데, 이를 Growth Rate 라고 부른다. 위의 그림은 Growth Rate 가 4인 예시를 보여주고 있다.
2. Bottleneck Layer
앞서 살펴본 Bottleneck Layer 가 DenseNet 에서도 사용된다. 다만 1x1 convolution 을 거쳐서 channel 개수를 줄이는 것은 동일하나, 연산 이후 feature 의 원래 channel 개수만큼 복원하는 것이 아닌 Growth Rate 만큼의 feature channel 을 복원하는 것이 특징이다.
3. Transition Layer
끝으로 DenseNet 에는 Transition Layer 가 존재한다. Transition Layer 는 feature 의 가로 세로 사이즈를 줄여주고 feature 의 개수를 줄여주는 역할을 담당하며 Batch Normalization, ReLU, 1x1 convolution, 2x2 average pooling 으로 구성되어 있다. 1x1 convolution 을 통해 feature의 개수를 줄여주고, 2x2 average pooling 을 통해 feature의 가로 세로 사이즈를 절반으로 줄여준다.
DenseNet 은 전체 feature를 모두 쌓는 방식이기 때문에 ResNet 보다 데이터 손실이 적고 이에 따라 성능은 뛰어나지만 ResNet의 개념을 약간 변형한 것이기 때문에 학술적으로는 ResNet 에 비해 활용도가 떨어지는 것이 현실이다.
'Dev' 카테고리의 다른 글
Mini-batch sample selection strategies for deep learning based speech recognitio (0) | 2023.05.02 |
---|---|
딥러닝 기반 음성인식 (0) | 2023.05.01 |
[maven] This build requires at least…, update your JVM, and run the build again (0) | 2023.04.24 |
[Node.js] Error: listen EADDRINUSE: address already in use 127.0.0.1:8080 (0) | 2023.04.23 |
CTRL (0) | 2023.03.26 |
댓글