DenseNet


- DenseNet은 ResNet의 아이디어(Skip-Connection)를 계승한 Dense-Connectivity를 사용해 좋은 성능을 냈다.
- Dense Block을 제안하고 있으며, 내부적으로는 ResNet과 같은 Pre-activation 구조를 사용한다.
1. Dense-Connectivity
- ResNet의 Skip-Connection과 DenseNet의 Dense-Connectivity의 수식을 보면 다음과 같다.
Skip-Connection | xl=f(xl−1)+xl−1
Dense-Connectivity | xl=f([x0,x1,...,xl−1])
- Skip-Connection은 이전의 feature들을 계속해서 Add하기 때문에, 네트워크가 깊어질수록 information-flow가 약해진다.
- 하지만 Dense-Connectivity의 경우에는 Concatenate로 레이어를 쌓아간다.

2. Dense Block

- Dense Block은 n개의 Dense layer로 이루어져 있으며, Dense layer는 (BN - Activation - Conv(1x1) - BN - Activation - Conv(3x3))의 Bottleneck 구조로 구성되어 있다.
- 각 Dense Block 마다 n 값이 다르다.
- Dense Layer는 input이 들어오면, Grouwth rate 개의 피쳐 맵을 생성한다.
- 따라서, Dense Block의 output shape는 다음과 같다
- Output=k0+Growthrate∗(n−1)
2.1. Bottleneck

- 레이어가 깊어지면서 연산량이 급격히 증가하는 것을 막기 위해서 Bottleneck Layer를 사용함.
2.2. Growth rate
- Dense Layer에서 Output으로 나오는 filter의 size를 의미함.
- 일반적으로 Grouwth rate가 높을수록 성능이 좋다고 함.
3. Transition Layer
- Dense Block 이후에 나오는 Conv(1x1) 레이어와 AveragePool(2x2) 레이어를 합쳐서 Transition Layer라고 부른다.
- Transition Layer는 Conv(1x1)을 통해 채널 수를 줄이고,
- AveragePool(2x2)를 통해 사이즈를 줄인다.
- Theta 값이 하이퍼 파라미터로 존재하는데 이는 채너 수를 얼마나 줄일지 정해준다. ( Output Channel = Input Channel * Theta )
4. Detail

'ML > CNN' 카테고리의 다른 글
[CNN] ResNet50 Implementation(Keras) (0) | 2021.08.09 |
---|---|
[CNN] GoogLeNet Implementation (Keras) (0) | 2021.08.06 |
[CNN] ResNet 요약 (0) | 2021.08.03 |
[CNN] GoogLeNet 요약 (0) | 2021.08.02 |
Convolutional : Autoencoder / Neural Network (0) | 2021.07.29 |
댓글