Problems with deeper layers
Alexnet에서 VGGNet으로 발전하면서 더 깊고 넓은 neural network를 가질 수 있게 되었다. 더 깊은 레이어를 가지게되면 복잡한 관계에서 학습이 가능하고 영상 application에서는 더 큰 receptive field를 가져 더 많은 주변의 정보를 참조한다.
하지만 더 깊게 쌓는다면 더 좋아지는 것일까?
실제로 더 깊게 쌓는다면 Gradient vanishing/exploding과 계산 복잡도가 더 커지게 된다. 그리고 이전에는 overfitting 문제에 취약할 것이다라고 생각했지만 degradation 문제라는 다른 문제가 있는 것이라고 한다.
CNN architectures for image classification
1. GoogLeNet
GoogLeNet는 inception module 구조를 제안하였다. 하나의 레이어에서 다양한 크기의 convolution filter를 사용하여 여러 측면으로 activation을 관찰하겠다는 의지로 구현하였다. 또한 깊이있게 쌓는 것이 아닌 수평 확장이라고 볼 수 있다.
하지만 이렇게 한 층에 여러 필터를 사용하게되면 계산 복잡도가 커지기 때문에 1x1 convolution을 사용하여 parameter 수를 줄임으로서 해결하였다.
GoogLeNet의 전체적인 구조는 다음과 같다.
- Stem network : vanilla convolution networks
- inception module들을 여러 개 쌓음
- backpropagation에서 gradient vanishing 문제를 해결하기 위해 중간에 Auxiliary classifiers를 추가함
Auxiliary classifier는 다음과 같이 2개의 FC layer와 하나의 1x1 Conv.layer를 사용하였다.
2. ResNet
ResNet이 개발되고나서 더 깊은 레이어를 쌓는 모델을 만들 수 있었고 최초로 인간의 성능을 뛰어넘는 모델이 되었다.
- Degradation problem
- 이전에는 레이어가 더 깊고 parameter의 수가 더 많아지면 overfitting에 취약해질 것이다라고 주장했지만 사실 optimization(최적화)문제이다. 만약 overfitting 문제라고 한다면 아래에서 56-layer가 20-layer보다 낮은 그래프가 그려질 것이다.
- Hypothesis
- plain layer를 사용할 경우 H(x)라는 것을 학습할 때 input x와의 관계가 더 복잡해진다.
- residual block의 경우 F(x) + x를 최소화하는 목적으로 한다. 즉, F(x)를 0에 가깝게 만드는 것이 목적이 된다. 왜냐하면 F(x)가 0이 되면 입출력이 모두 x로 같아지게되기 때문이다. 따라서 F(x) = H(x) - x이므로 F(x)를 최소로 해준다는 것은 H(x) - x를 최소로 해주는 것과 동일한 의미를 가진다. 여기서 H(x) - x를 잔차(residual)라고 한다. 여기서 residual block을 사용했을때 gradient vanishing이 해결된 이유는 skip connection(또는 shortcut connection)으로 전달되는 dH(x)/dx = 1이 더해지므로 1 이상의 값이 나오기 때문이다
- Analysis of residual connection
skip connection이 어떤 역할을 해서 좋은 결과를 얻는 것일까?
residual network는 다음과 같이 다른 길이의 많은 paths이 생성된다. 이 때 path는 $2^n$만큼 생성되고 복잡한 mapping을 학습할 수 있게 된다.
- Overall architecture
- 첫 번째 Conv.layer에서는 residual network에 적합한 He initialization을 사용하였다.
- 모든 residual block은 3x3 Conv.layer를 쌓았고 모든 Conv.layer 이후에 BN를 사용하였다.
- Block마다 spatial pooling을 적용하여 down-sampling을 하였다.
3. DenseNet
다음과 같은 dense block들에서는 모든 output의 각 layer가 channel 축을 기준으로 concatenate가 일어난다. 이렇게 모든 layer의 feature를 concatenate를 함으로서 feature propagation이 더 강해지고 feature의 재사용이 용이해진다.
- addition과 concatenation의 차이
resnet에서는 두 가지 신호를 합쳐버리지만 concatenation의 경우에는 그 신호를 그대로 보전하고 channel이 늘어난다. channel이 늘어남에따라 계산 복잡도는 커지지만 feature의 정보를 그대로 보전되기 때문에 상위 레이어에서 하위 레이어를 참조해야할 필요성이 있을 때 잘 끌어서 쓸 수 있다.
4. SE(Squeeze and Excitation)Net
- Squeeze
각 채널들의 중요한 정보만 추출한다. 이때 가장 일반적인 방법론 중 하나인 GAP(Global Average Pooling)을 사용한다고 하는데 다른 방법론을 사용할 수 있다고 한다. 위 그림에서는 HxWxC 크기의 feature map들을 1x1xC 크기로 만든 부분이된다.
- Excitation
δ는 ReLU 함수이고 σ는 시그모이드 함수이다. 그리고 W_1과 W_2는 각각 FC layer를 뜻한다. 여기서 reduction ratio(r)을 통해서 W_1의 노드 수를 줄인 후 W_2에서 다시 feature map의 수만큼 증가시킨다. 예를 들어 feature map의 수가 8이고 r값이 4라면 다음과 같은 그림이 된다.
결국 excitation operation을 거친 스케일 값들은 모두 0~1사이의 값을 가지기 때문에 채널들의 중요도에 따라 스케일 된다.
- SE blcok의 장점
- 네트워크의 어떤 곳이라고 바로 붙일 수 있다.
- parameter 증가량에 비해 모델 성능 향상도가 매우 크다. 즉, 모델 복잡도와 계산 복잡도가 크게 증가하지 않는다는 뜻이다.
5. EfficientNet
- (a) : 넓게 확장하여 쌓는 방법
- (b) : 더 깊게 쌓는 방법
- (c) : input 이미지의 크기가 큰 것을 넣는 방법
- (d) : (a), (b), (c) 모두를 적절하게 비율로 동시에 스케일링을 하게되면 더 효과적인 architecture가 나올 것이다라는 생각에서 나온 방법 (EfficinetNet)
6. Deformable convolution
이전에는 고정된 영역에서만 특징을 추출했지만 Deformable Convolution은 irregular convolution을 사용하는 학습법으로 좀 더 flexible한 영역에서 특징을 추출한다. 다시말해 feature map에서 좀 더 광범위한 grid cell의 값을 sampling한다.
구조는 다음과 같이 되어있고 input feature map에서 2 branch로 나뉘어진다. 위쪽에 그려진 Conv -> offset field -> offsets와 같이 offset을 계산하는 branch와 offset 정보를 받아 conv 연산을 수행해 output feature map을 생성하는 branch가 있다.
아래 그림에서는 deformable convolution을 적용했을 때 object scale에 따라 receptive field가 다른 것을 확인 할 수 있다. 배경 이미지와 같이 큰 객체인 경우 receptive field가 넓고 자동차 같은 경우에는 좁은 범위가 형성된다.
'Boostcamp AI Tech' 카테고리의 다른 글
[Boostcamp Day-28] Computer Vision - Semantic Segmentation (0) | 2021.09.09 |
---|---|
[Boostcamp 6주차] 피어세션과 학습 회고 (0) | 2021.09.09 |
[Boostcamp Day-26] Computer Vision - Annotation, Data Efficient Learning (0) | 2021.09.08 |
[Boostcamp Day-25] Computer Vision - Image Classification 1 (0) | 2021.09.06 |
[Wrap-up report] Image Classification (0) | 2021.09.03 |