- 1. Basic Vision Model
- [12′ NIPS] ImageNet Classification with Deep Convolutional Neural Networks (AlexNet) 핵심 리뷰
- [15′ CVPR] Going deeper with convolutions (GoogleNet, inception) 핵심 리뷰
- [15′ ICLR] VERY DEEP CONVOLUTIONAL NETWORKS FOR LARGE-SCALE IMAGE RECOGNITION (VGGNet)
- [15′ ICML] Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift
- [16′ CVPR] Deep Residual Learning for Image Recognition (ResNet)
- 2. Vision Model 응용 버전
- [16′ BMVC] Wide ResNet : Wide Residual Networks
- [17′ CVPR] Xception: Deep Learning with Depthwise Separable Convolutions
- [17′ ICLR] FRACTALNET: ULTRA-DEEP NEURAL NETWORKS WITHOUT RESIDUALS
- [17′ CVPR] Densely Connected Convolutional Networks (DenseNet)
- [17′ CVPR] Deep Pyramidal Residual Networks (PyramidNet)
- [17′ CVPR] Active Convolution: Learning the Shape of Convolution for Image Classification
- [17′ CVPR] Residual Attention Network for Image Classification
- [18′ CVPR] SENet : Squeeze and excitation networks
- [18′ BMVC] BAM: Bottleneck Attention Module
- [18′ ECCV] CBAM : convolutional block attention module
- [19′ CVPR] Selective Kernel Networks (SKNet)
- [19′ ICML] EfficientNet : Rethinking Model Scaling for Convolutional Neural Networks
- [21′ ICLR] Vision Transformer : AN IMAGE IS WORTH 16X16 WORDS: TRANSFORMERS FOR IMAGE RECOGNITION AT SCALE
- [21′ NIPS] MLP-Mixer: An all-MLP Architecture for Vision
- [논문 리뷰] KAN: Kolmogorov–Arnold Networks
내용 요약
Basic Vision Model의 응용 버전에 해당하는 Wide ResNet, PyramidNet, FractalNet, DenseNet, Xception, Active Convolution에 대해 살펴봅니다.
1. 들어가며
2012년 AlexNet이 출현한 이후로 다양한 Vision Model이 발표되었습니다. 그 중에서도 가장 중요한 논문은 단연 ResNet과 Inception이라고 할 수 있습니다. 2016년 ~ 2017년 사이에는 이 두 네트워크의 철학을 다양한 방법으로 응용한 연구가 많이 발표됩니다. 이들을 철학 별로 나누어 살펴보도록 하겠습니다.
2. 철학 별 비교
이번 챕터에서는 Vision Model 응용 버전 모델들을 철학별로 나누어 하나씩 살펴보겠습니다.
2-1. 넓을수록 좋다
먼저 넓을수록 좋다는 철학을 발전시킨 구조들을 살펴보겠습니다. 이러한 철학에 해당하는 네트워크는 Wide ResNet, PyramidNet이 있습니다. Wide ResNet과 PyramidNet을 Feature Map 관점에서 ResNet과 비교해보겠습니다.
검은색 직육면체를 연산과정에서 나오는 Feature Map 이라고 생각해보겠습니다.
가장 왼쪽의 ResNet은 Convolution 연산과 (파란색 화살표) Pooling 연산 (초록색 화살표) 순서로 진행되는 모습을 볼 수 있습니다.
이제 가운데의 Wide ResNet을 보겠습니다. ResNet의 연산 과정과 비교하면 무엇이 달라졌나요? Pooling 이후의 Feature Map이 더 넓어진(길어진) 모습을 볼 수 있습니다. 이때 넓다는 의미는 Feature Map의 Channel 수가 많아졌다는 것을 의미합니다. 이렇게 Wide ResNet은 ResNet에서 Feature Map의 Width만 증가시켜도 성능이 좋아진다는 사실을 증명합니다.
이제 오른쪽의 PyramidNet을 보겠습니다. Wide ResNet의 연산 과정과 비교하면 무엇이 달라졌나요? Wide ResNet에서는 Pooling 후의 Feature Map에서만 Width가 증가했습니다. 반면 PyramidNet에서는 모든 연산 과정에서 Feature Map의 Width를 증가시켜줍니다. 이는 Wide ResNet의 철학인 “넓을수록 좋다”를 최대화하는 철학이라고 할 수 있습니다.
2-2. 지름길을 더 만들자
이번에는 지름길에 대한 철학을 발전시킨 구조들을 살펴보겠습니다. ResNet의 핵심 철학 중 하나는 ‘지름길’입니다. 네트워크가 깊어지면서 생기는 Gradient Vanishing 문제를 지름길을 연결해줌으로써 해결해주었습니다. 지름길이 그렇게 좋다면, 지름길을 더 많이 만들어주면 더 좋지 않을까요? 이러한 철학을 발전시킨 네트워크에는 DenseNet과 FractalNet이 있습니다. DenseNet과 FractalNet을 Feature Map 관점에서 ResNet과 비교해보겠습니다.
검은색 동그라미를 연산 과정에서의 Feature Map이라 생각해보겠습니다.
가장 왼쪽의 ResNet 연산을 보겠습니다. 중간중간 Feature Map 끼리를 지름길로 연결해준 모습을 볼 수 있습니다. 이때 지름길은 Identity Mapping 방식을 사용했습니다. (그대로 더해주기)
이제 중간의 DenseNet 연산을 보겠습니다. ResNet의 연산 과정과 비교하면 무엇이 달라졌나요? ResNet과 비교했을 때 지름길이 훨씬 많아진 모습을 볼 수 있습니다. 이는 ‘지름길을 만들어주는 게 성능 증가에 도움이 되었다면, 최대한 많이 만들어주자’는 철학이라고 할 수 있습니다.
이번에는 오른쪽의 FractalNet 연산을 보겠습니다. ResNet의 연산 과정과 비교하면 무엇이 달라졌나요? 우선 첫 번째로 지름길이 더 많아진 모습입니다. 하지만 이는 DenseNet과 비교했을 때 더 적은 수의 지름길입니다. 따라서 지름길의 개수만으로는 DenseNet보다 더 좋은 성능을 낼 수는 없습니다. 이를 FractalNet에서는 지름길의 종류를 변경하는 방법으로 해결합니다. ResNet과 DenseNet에서는 지름길을 Identity Mapping 방식으로 연결해주었습니다. 이는 기존의 정보를 그대로 전달해주는 방법입니다. 이 방법은 정보의 손실 없이 다음 층으로 전달한다는 장점이 있었습니다. 하지만 반대로 연산을 추가로 수행할 수 없다는 단점이기도 합니다. FractalNet에서는 지름길을 Convolution 연산으로 연결해줍니다. 이는 정보 손실을 최소화하면서 동시에 연산을 추가로 수행하여 정보를 전달할 수 있게 해주었습니다.
2-3. 위치정보와 객체 정보를 분리하자
다음은 Inception의 철학을 응용한 사례를 살펴보겠습니다. Inception의 핵심 철학 중 하나는 ‘위치정보와 객체 정보의 분리’입니다. 1×1 Convolution 연산은 위치정보 없이 객체 정보만을 연산합니다. 이외에 3×3 Convolution, 5×5 Convolution 등은 위치정보를 같이 연산합니다. Inception은 이 둘을 조합함으로써 적은 연산 양으로도 좋은 성능을 낼 수 있었습니다.
이러한 철학을 응용한 버전으로는 Xception이 있습니다. Inception과 Xception을 Convolution 연산의 조합 관점에서 비교해보겠습니다.
먼저 왼쪽의 Inception은 1×1 Convolution과 다양한 연산을 병렬로 조합하여 수행하는 모습입니다.
이번에는 오른쪽의 Xception을 보겠습니다. 먼저 Inception과 달리 1×1 Convolution과 3×3 Convolution만을 사용하는 모습을 볼 수 있습니다. 이는 1×1 Convolution으로는 객체 정보만을, 3×3 Convolution으로는 위치정보를 연산하겠다는 의도로 볼 수 있습니다. 또한 이 둘을 아주 많은 병렬 연산으로 연결해주었습니다. 이를 통해 ‘위치정보와 객체 정보를 분리하여 연산하자’는 철학을 최대화하여 구현할 수 있었습니다.
2-4. Convolution 연산을 개선하자
위의 내용들은 Convolution Neural Network를 ‘어떻게 구성할 것인가?’에 대한 고민이라고 할 수 있습니다. ‘구성’은 그대로 하면서 Convolution 연산을 개선하여 성능을 올릴 수는 없을까요? 이러한 관점에서 연구된 네트워크는 Active Convolution이 있습니다. 기존의 Convolution과 Active Convolution을 Receptive Field Size의 관점에서 비교해보겠습니다.
왼쪽의 기존 Convolution 연산을 보겠습니다. 고정된 Receptive Field Size를 갖는 모습입니다. 이는 입력 이미지가 어떻든 내가 볼 수 있는 시야의 크기는 고정되어 있다 의미입니다.
반면 오른쪽의 Active Convolution을 보겠습니다. 각각의 Convolution 연산이 움직이면서 수행되어 Receptive Field Size가 변하는 모습입니다. 따라서 Active Convolution은 입력 이미지의 사이즈에 따라 적절한 시야를 갖게 됩니다.