ResNet의 아이디어를 이어서 굉장히 좋은 성능을 보이는 Densely Connected ConvNets(DenseNet)에 대해서 알아보도록 하겠습니다.
3. Densely Connected ConvNets(DensNet)
첫 번째 입력을 전부다 연결, 그 다음 layer도... 모두 연결된 Dense한 connection이 있는 구조입니다.
구조를 자세히 살펴보면,
input영상이 들어왔을 때, 먼저 Conv layer로 feature map을 만듭니다. 그 다음, Dense Block을 이용해서 그 사이의 모든 Conv layer는 Dense Connected되어 있습니다. (그림처럼)
그 후 Conv layer로 채널 조정을 해주고, MaxPooling으로 영상 크기를 줄입니다.
이러한 과정을 여러번 반복합니다.
즉, DensNet은 ResNet의 아이디어의 연장선에 있으며, Dense Block을 제안하고 있다. Dense Block 내에는 ResNet과 같이 Pre-Activation 구조 (Batch Normalizatio-ReLu activation-Conv)구조를 사용합니다.
1) Dense Block 내부 구조의 이해
옆 그림의 Dense Block은 이리저리 연결된 Skip Connection때문에 자칫 복잡해 보일 수 있지만, 이는 Concateration이라고 보면 됩니다.
입력이 들어오면 -> Growth Rate만큼 만들어지는 feature이 만들어진다. 이걸 기존에 있던 입력과 concatenate해서 연결해줍니다. -> 그러면 c에서 c+4 -> 이 과정을 반복하면, 누적되어 skip connection이 있는 것과 마찬가지입니다.
2) Bottleneck 구조
Dense block에서도 GooLeNet에서 나온 개념인 Bottleneck을 사용할 수 있습니다. Layer가 깊어지면서 연산량이 급격히 증가하는 것을 막기 위해, 1x1 Conv를 이용한 Bottleneck Layer을 사용합니다.
예를 들어, 3x3x(Channel in + Growth rate * 몇 번째 Growth) x k 를 Bottle neck구조에서는 이를 두 개로 쪼개어서
아래의 그림처럼 됩니다.
'Data Science > Convolutional Neural Network(CNN)' 카테고리의 다른 글
6. Advanced CNN-2 (0) | 2020.03.18 |
---|---|
5. Advanced CNN-1 (0) | 2020.03.18 |
4. Basic CNN Implementation(v2) (0) | 2020.03.15 |
4. Basic CNN Implementation(v1) (0) | 2020.03.15 |
3. Batch Normalization (0) | 2020.03.14 |