[X:AI] InceptionV2/3 논문 리뷰
Rethinking the Inception Architecture for Computer Vision
Rethinking the Inception Architecture for Computer Vision
Convolutional networks are at the core of most state-of-the-art computer vision solutions for a wide variety of tasks. Since 2014 very deep convolutional networks started to become mainstream, yielding substantial gains in various benchmarks. Although incr
arxiv.org
Abstract
- 2014년부터 매우 깊은 CNN (합성곱 신경망, Convolution Neural Networks)은 여러 벤치마크에서 상당한 성능 향상을 가져옴
- 모델 크기와 계산 비용이 증가하면 대부분의 task에서 품질이 즉시 향상되는 경향이 있지만, On-Device 환경에는 적합하지 않음
- 본 논문에서는 factorized convolution과 aggresive regularization을 통해 계산 비용을 효율적으로 사용하면서도 성능을 높이는 방법을 찾으려고 함
1. Introduction
- 2012년 ImageNet 대회에서 우승한 'AlexNet' 모델 이후, 더 깊고 넓은 VGGNet, GoogLeNet 등 모델들이 나옴
- 비록 VGGNet은 구조가 단순하지만 parameter가 너무 많음(AlexNet 3배)
- 반면 GoogLeNet의 Inception 아키텍처는 성능을 유지하면서도 계산 비용과 메모리 사용량을 크게 줄임
- GoogLeNet은 단 500만개 parameter 사용(AlexNet의 1/12)
- 그럼에도 불구하고 Inception 아키텍처의 복잡성 때문에 새로운 task에 맞게 수정하거나 확장하는 것은 어려움
- 단순히 네트워크를 확장하면 계산 비용과 파라미터 수가 비례해서 크게 증가할 것
- 따라서 본 논문에서 CNN를 효율적으로 크키를 키우기 위한 일반적인 원칙들과 최적화 아이디어 제공
2. General Design Principles
- 아래에서 언급할 원칙들은 추측성이기에 그 정확성에 대한 검증은 추후 추가적인 실험 증거 필요
- 하지만 이 원칙들에서 벗어나기만해도 네트워크의 성능이 떨어지는 것을 확인
[1]
- Feed-forward 네트워크는 input layer에서 classifier나 regressor로 정보가 전달되는 비순환적인 그래프 구조
- 이는 정보의 흐름에 명확한 방향이 있다는 것
- 신경망을 통해 정보가 흐를 때, 정보의 과도한 압축으로 인한 병목현상을 피해야 함 (특히 네트워크 초기)
- 즉, representation 사이즈는 입력부터 출력까지 서서히 줄어들어야 함
* 네트워크 후반으로 갈수록 추상적인 특징 (엣지, 모양 등)을 추출 -> receptive field 이해 필요
[2]
- feature map 채널을 늘리면 더 명확하게 disentangled feature를 얻을 수 있음
- 결과적으로 네트워크를 더 빠르게 훈련
* feature map의 채널을 증가시키려면 filter의 개수를 늘려야 함
[3]
- Spatial aggregation 전(쉽게 말해 convolution 하기 전)에 차원 축소를 사용하여 큰 정보 손실 없이 저차원 채널로 임베팅 시킬 수 있음
- 인접한 픽셀들 간에는 강한 상관관계가 존재하기 때문
- 학습 속도 향상에 기여
[4]
- 네트워크의 '너비'(각 계층의 채널의 수)와 '깊이'(계층의 총 수) 사이의 적절한 균형을 찾는 것이 중요
- 너비와 깊이를 모두 적절히(균형있게) 증가시키면, 네트워크의 성능 향상으로 이어짐
3. Factorizing Convolutions with Large Filter Size
- 해당 섹션에서는 convolution filter 크기를 효율적으로 나누어 계산 비용을 줄이고, 네트워크의 학습 속도를 높이는 방법에 대해 설명
3.1 Factorization into smaller convolutions
- 5×5 filter나 7×7 filter와 같은 큰 filter는 계산량이 많아 비효율적
- 5×5 filter는 3×3 filter보다 약 2.78배 더 많은 계산이 필요
- 큰 filter는 더 넓은 범위의 특징을 포착하는 데 유리하지만, 계산량이 너무 커서 네트워크의 효율성을 떨어뜨릴 수 있음
해결책 : 5x5 filter를 두 개의 3x3 filter로 대체
- 5x5 filter를 사용하는 대신, 두 개의 3x3 convolution으로 대체
- 5x5 convolution은 25번 연산, 3x3 convolution 2번은 각각 9번 연산
- 연산량 및 파라미터 수 18/25, 계산량이 28% 감소
- 연산량은 줄였지만 5x5 filter처럼 넓은 범위의 정보를 학습할 수 있음 (receptive field 이해 필요)
- 첫 번째 3x3은 linear activation, 두 번째 3x3은 ReLU activation을 사용하는 것과 둘 다 ReLU activation을 사용한 경우를 실험 했을 때 두 3x3 convolution에 ReLU를 사용한 것이 정확도가 더 높았음
- 추가로 Batch Normalization을 사용하면 더 안정적인 학습이 이루어
- 따라서 Inception module에서 5x5 convolution 부분을 두 개의 3x3 convolution으로 대체
3.2 Spatial Factorization into Asymmetric Convolutions
- 3x3 convolution을 더 작은 2x2 convolution 등으로 분해할 수 있을까
- 실험 결과 2x2보다는 nx1과 같은 asymmetric (비대칭) convolution을 사용했을 때 더 좋은 성능
- 3x3 convolution을 1x3 convolution, 3x1 convolution으로 분해 (33%의 연산량 절감)
- 2x2 convolution으로 분해하면 11%의 연산량 절감
- 2x2 convolution일 때는 어떤 구조인지 생각해보기
- nxn convolution을 nx1과 1xn convolution으로 대체하면 아래와 같은 Inception 모듈이 만들어짐
- n이 커질수록 계산량 절감 효과는 더욱 커짐
- nxn filter는 n2 연산을 필요로 하지만, 1xn + nx1은 2n 연산만 필요
- 해당 방식은 네트워크의 초반 레이어에서는 잘 작동하지 않음
- 초기 레이어는 입력 데이터에서 기본적인 특징(엣지, 색상 등)을 추출하기 때문에 전체적인 공간 정보가 중요
- 그러나 중간 레이어(12×12~20×20 크기의 feature map)에서는 매우 좋은 결과를 보임
4. Utility of Auxiliary Classifiers
- GooLeNet 논문에서 Auxiliary Classifiers (보조 분류기)를 통해 신경망의 수렴을 개선하고 vanishing gradient 문제를 해결하고자 함
- 하지만, 실험 결과 별다른 효과가 없었고, 오히려 Auxiliary Classifiers에 Dropout이나 Batch Normalization을 사용했을 때, main classifiers의 성능이 향상됨
- 이를 통해 Auxiliary Classifiers는 성능 향상의 효과보다 정규화 효과가 있을 것이라고 추측
- 1x1 Convolution 사용 이유 -> 채널 크기 조정
- Auxiliary Classifier를 추가하면 왜 vanishing gradient 문제가 완화될 가능성이 있는지 파악하기
5. Efficient Grid Size Reduction
- 일반적인 CNN 신경망은 차원 축소를 위해 pooling을 사용
- 하지만, 해당 방식은 연산 비용을 크게 줄일 수 있지만, 신경망의 표현력도 감소시킴
- 정보를 잃지 않기 위해, 먼저 convolution 필터 수를 늘린 후 pooling
- 이미지 크기 dxd 에서 d/2 x d/2로 줄이기 전에, 필터 수를 k에서 2k로 증가
- 하지만 계산비용이 2d2k2 기하급수적으로 증가
- Convolution과 Pooling의 순서 변화
- 아래 좌측 그림은 연산량이 낮은 대신에 표현력 감소, 우측은 연산량이 좌측에 비해 3배
- 본 논문에서는 표현력을 감소시키지 않으면서 연산을 줄일 수 있는 또 다른 방법 제안
- stride 2를 지닌 pooling layer와 conv layer를 병렬로 사용하여 둘을 concat
- 연산량이 2(d/2)2k2 로 4배 줄어듦
6. Inception-v2
- 지금까지 설명한 주요 방법들을 결합하여 새로운 아키텍처 Inception-v2 제안
- 핵심 개선점
- 기존의 7×7 크기 필터를 3개의 3×3 필터로 나눔으로써 계산량을 줄이고 효율을 높임
- 구조
- 초기에는 35×35 크기에서 288개의 필터를 가진 Inception 모듈 3개 사용
- 이를 17×17 크기로 줄이며, 필터 개수를 768개로 증가
- 이후, 5개의 Inception 모듈로 처리
- 마지막으로 8×8 크기로 줄이며, 필터 개수를 1280개로 만듦
- 마지막 단계에서 두 개의 Inception 모듈을 통해 2048개의 필터 출력을 만듦
- 효율성
- 네트워크는 42층으로 깊지만, 계산량은 GoogLeNet의 약 2.5배 수준
- 하지만 여전히 VGGNet보다 훨씬 효율적임
7. Model Regularization via Label Smoothing
- 문제점
- 딥러닝 모델은 학습 중 실제 라벨(y)에 확률 1, 다른 클래스에는 확률 0을 부여
- 이로 인해 모델이 특정 데이터에 대해 overfitting하거나, 예측을 수정할 여지가 줄어드는 문제가 생김
- Label Smoothing
- 라벨 확률 분포 조정 (for 일반화 성능 향상)
- ex) 실제 라벨(y)에 90% 확률을 두고, 나머지 10%를 모든 클래스에 균등하게 나누는 방식
- (epsilon) : Smoothing 조절하는 값
- ex) → 정답 확률을 90%, 나머지 10%를 다른 클래스에 분산
- u(k) : 균등 분포 (1/K)
- K는 클래스
- 라벨 확률 분포 조정 (for 일반화 성능 향상)
8. Training Methodology
- Gradient Clipping 사용
- gradient 값이 너무 커지면, 가중치가 급격히 업데이트되어 모델이 불안정해질 수 있음
- 본 논문에서의 threshold : 2.0
9. Performance on Lower Resolution Input
- 낮은 해상도의 이미지를 네트워크에 입력했을 때 성능에 미치는 영향을 실험
- 3가지 네트워크를 만들어 비교 (모두 계산 비용이 비슷하도록 설정)
- 299×299 해상도
- stride 2
- max pooling 사용
- 151×151 해상도
- stride 1
- max pooling 사용
- 79×79 해상도
- stride 1
- pooling 사용 안 함
- 해상도가 낮아도 모델의 구조를 적절히 조정하면 성능이 크게 떨어지지 않음
- 단순히 입력 해상도만 낮추고 모델을 수정하지 않으면, 더 적은 계산량으로 더 어려운 작업을 하게 되어 성능이 떨어질 가능성이 높음
10. Experimental Results and Comparisons
- Inception-v2와 Inception-v3 모델의 성능을 평가
- 각각의 모델은 새로운 기능을 하나씩 추가하면서 누적된 결과를 기록
- Label Smoothing: 모델이 더 일반화되도록 도와주는 기술
- Factorized 7×7: 계산 효율성을 위해 7×7 filter를 3×3 filter 여러 개로 나눔
- BN-auxiliary: 보조 분류기에서 batch normalization를 적용.
11. Conclusion
- Inception 아키텍처를 기반으로 한 확장 가능한 convolution 네트워크 설계 원칙 제시하고 상대적으로 적은 계산 비용으로 고품질 비전 네트워크를 구출할 수 있다는 것을 보여줌