논문 : Going Deeper With Convolutions
본 논문은 ImageNet Large-Scale Visual Recognition Challenge 2014(ILSVRC14)에서 classification과 detection을 위한 최신 기술인 Deep Convolutional neural network architecture
를 제안한다. 해당 구조는 Inception
이라 불린다.
NetWork 내부 자원 활용을 개선하여 깊고 넓은 모델을 연산 추가 없이 가능하게 한 것이 주요 특징이다.
최적화에는 Hebbian principle
과 multi-scale processing
을 사용하였다.
Hebbian Principle
뉴런간 weight를 결정, 조정하는 원칙이다.
- 2개의 뉴런이 동시에 활성화되면 Weight를 증가시킨다.
- 2개의 뉴런이 따로 활성화되면 Weight를 감소시킨다.
ILSVRC14에 제출한 22층의 깊은 네트워크를 GoogLeNet
이라고 부른다.
CNN의 발전으로 image recognition
과 object detection
은 크게 발전했다. 이러한 발전은 powerful한 하드웨어, 거대한 dataset, 커진 model뿐만 아니라 새로운 아이디어
, 알고리즘
, 개선된 network architecture
덕분이다. GoolgLeNet은 ILSVRC 2014의 이전 우승 모델보다 12배 적은 파라미터 개수를 가지지만 더 정확하다. Object detection은 deep architecture
과 기존의 computer vision
의 시너지 덕분에 크게 발전하였다.
모바일 및 임베디드 컴퓨터에서 전력과 메모리 사용 알고리즘 효율성이 더욱 중요해지고 있음도 주목할만하다. inference time
에서의 multiply-adds(곱, 덧셈으로 이루어진 연산)
연산이 1.5 billion번을 넘지 않도록 모델을 설계하여 단순히 학문적으로 끝나는 것이 아니라 실제 real world에서 사용할 수 있게 했다.
이 논문에서는 효율적인 deep neural network architecture(Inception)
에 집중한다. 여기서 Deep
은 2가지 의미로 사용된다. 먼저 Inception 모듈
이라는 새로운 구조를 제안하는 것을 의미한다. 두번째로는 말 그대로 network의 deapth
가 깊다는 것을 의미한다. 이 구조의 장점은 ILSVRC 2014 calssification and detection challenges
에서 현재 가장 좋은 성능을 보여주는 모델을 능가하는 성능을 보여주는 것으로 증명되었다.
CNN 구조와 최근 트렌드
LeNet-5 이후로 CNN의 일반적인 구조는 Convolutional layer를 쌓은 뒤 1개 이상의 fully-connected layer를 사용하는 것이다. 최근 MNIST 같이 큰 데이터 셋에 대한 트렌드는 dropout을 사용해 오버피팅을 해결하면서 layer의 개수와 size를 늘리는 것
이다.
Network-in-Network
Network-in-Network는 네트워크의 표현력을 증가시키기 위해 Lin이 제안한 방법이다. 이 방법을 Convolution layer에 적용하면 1×1 convolution layer를 적용한 것과 같다.
GoogLeNet은 1×1 convolution layer를 2가지 목적으로 사용한다.
1. 계산 병목 제거를 위한 차원 축소 모듈
2. 네트워크 depth와 width를 성능 패널티 없이 늘리기 위함
Network-in-Network
Convolution을 할 때 Filter대신 MLP를 사용하여 Feature를 추출하는 방법이다.
R-CNN
이다. R-CNN은 객체가 있을 것으로 추정하는 bounding box를 찾는 일
과 찾은 bounding box의 이미지를 분류하는 CNN
으로 나뉜다. 본 논문은 유사한 pipeline을 사용하지만 더 정확한 객체 bounding box 찾기와 이미지 분류 방법을 탐색한다. network size
늘리기
network의 성능을 개선하는 가장 쉬운 방법은 size(depth, width)를 늘리는 것이다. 그러나 이 방법은 2개의 큰 문제가 있다.
overfitting
으로 이어진다.연산이 크게 증가
한다.자원의 효율적 분배
가 중요하다. 위의 두가지 문제를 해결하는 가장 좋은 방법은 convolution 안까지 fully connected layer를 saparsely connected architecture
로 변경하는 것이다. 만약 dataset의 확률 분포를 알 수 있다면, 최적의 네트워크는 마지막 layer의 값의 상관관계를 분석하여 관련 높은 뉴런끼리 클러스터링하여 얻을 수 있다.
sparse 연산
의 비효울성
오늘날의 컴퓨터는 균일하지 않은 sparse data 계산에 매우 비효율적이다. lookup 오버헤드와 cache miss는 sparse matrix가 성공하지 못하는 큰 이유이다. 여러 논문에서는 sparse matrix 연산을 상대적으로 dense한 submatrices로 나누어 계산하면 좋은 성능을 보인다고 제안한다.
Inception
architecture
Inception architecture는 위에서 언급한 approximate sparse matrix의 case study로 시작되었다. learning rate, 하이퍼 파라미터 조정, 학습 방법 개선 등을 한 결과 localization과 object detection에서 좋은 효과를 보였다.
Inception architecture
Inception architecture는 CNN에서 최적의 local sparse
구조를 찾고, 이 구조를 dense components
로 바꾸는 것이 주요 아이디어이다. 최적의 local sparse 구조를 반복하면되기 때문이다.
편리를 위해 filter를 1×1
, 3×3
, 5×5
크기로 제한하여 사용한다. Filter들을 병력적으로 convolution하고 합쳐서 하나의 출력 벡터를 만든다. CNN에서 pooling layer은 필수적이므로 추가한다.
Naive version의 문제점
위에서 설명한 Inception은 naive version이다. High-level feature을 추출하기 위해서는 깊은 layer에서만 추출이 가능하다. 하지만 layer가 깊게 쌓일 수록 5×5 convolution 연산은 연산량을 매우 크게 만드는 문제가 발생한다.
1×1 Convolution layer
층을 쌓을 때 연산량이 과하게 늘어나는 것을 방지하기 위해 1×1 convolution layer를 사용한다. 1×1 convolution으로 차원을 축소하여 3×3, 5×5 convolution layer의 연산량을 줄인다. 1×1 convolution 후 ReLU를 적용하여 비선형성을 늘리는 장점도 있다.
Inception architecture의 장점
학습 기간에서 메모리 효율을 위해 lower layer에서는 전통적인 CNN을 사용하고, Inception은 higher layer에서 사용하는 것이 좋다.
Inception은 각 단계에서 unit 개수를 과한 연산량 증가 없이 늘릴 수 있도록 한다. Inception은 이미지를 다양한 scale로 처리하기 한 후에 합치기 때문에 동시에 다양한 크기의 feature를 추출할 수 있다는 장점도 있다.
GoogLeNet
GoogLeNet은 Inception 구조의 한 형태로 ILSVRC14에 제출한 모델이다. 성능은 살짝 낮지만 앙상블 기법을 사용하면 성능을 개선할 수 있다. 224×224 크기의 RGB 채널 이미지를 mean subtraction을 해서 입력으로 받는다. 모든 convolution 연산 뒤에는 ReLU
를 적용한다.
파라미터가 없는 pooling layer를 제외하면 22 layer
이고 총 100여개의 unit으로 구성된다.
Auxiliary classifier
Large depth는 back propagation에서 gradient 전달을 어렵게 만든다. 흥미로운 점은 shallower network가 좋은 성능을 낸다는 것이다. 즉 중간층에서 만드는 feature가 매우 discriminative
하다는 것을 알 수 있다. 따라서 중간에 auxiliary claasifers를 연결하여 역전파되는 gradient를 증가
시키고, regularization
효과가 나타나도록 하였다. Loss에는 0.3이 곱해진 값이 더해진다. 이후 inference에서는 사용하지 않는다.
출력 부분
최종 classifier 전에 average pooling layer를 사용한다. Global Average Pooling
을 사용한 것으로 각 feature를 하나의 값으로 만들어 결과를 1차원 벡터로 만들어 준다. Average pooling은 fine-tuning
을 쉽게 만든다. Average pooling을 사용하는 것이 fully connected layer를 사용하는 것보다 성능을 향상시켰지만, dropout은 average pooling에서도 필수적이었다.
Global Average Pooling
전체 구조
학습 방법
분산처리를 사용하였으며, optimizer로 asynchronous stochastic gradient descent
를 사용하였다. 8 epoch마다 learning rate가 4% 갑소한다.
sampling 방법
Image sampling method는 학습 중 계속 변경되었다. 이는 dropout, learning rate등 하이퍼파라미터의 변경과 동시에 이루어졌기 때문에 효율적인 학습을 위한 가이드를 제공하기는 어렵다. 그러나 전체 이미지의 8%~100% 크기의 이미지를 사용하고, 종횡비를 3/4과 4/3 사이로 사용하는 것이 효과적으로 보여진다.
Overfitting 방지
Photometric distortion
로 데이터를 늘려 overfitting을 방지했다.
aggressive crop
external data를 사용하지 않고 aggressive cropping 기법을 사용하였다. 먼저 이미지의 짧은 쪽이 256,288,320,252가 되도록 resize한다. 그 후 각 이미지에서 왼쪽, 가운데, 오른쪽 사가형을 가져온다. 가져온 이미지의 코너 4개와 가운데에서 224*224 크기를 crop하고 원래 이미지를 244*244로 resize하여 총 6개의 이미지를 얻는다. 마지막으로 모든 이미지에 mirrored version을 만들어 추가한다.
하나의 이미지로 4×3×6×2개의 이미지를 만들 수 있다.
number of models
7개의 독립적인 모델을 만들어 사용하였다. 모두 같은 GoogLeNet 모델이지만 sampling 방법과 input 순서만 다르다. 7개의 모델의 softmax를 평균내서 예측한다.
결과
별도의 training data를 활용하지 않았지만 1위를 차지하였다.
앙상블과 crop개수에 따른 모델 성능이다. Crop한 이미지가 많고 앙상블한 모델 수가 많은 경우 가장 좋은 성능을 보인다.
ILSVRC 2014 Detection Challenge
ILSVRC detection은 200개 class의 객체의 bounding box
를 만드는 문제이다. Bounding box가 정답과 최소 50% 겹치고, class를 맞게 분류하는 경우 정답으로 여긴다. Classification 문제와는 다르게 각 이미지는 object가 많거나 아예 없을 수도 있고 scale도 매우 다르다. Mean average precision(mAP)
로 평가한다.
Mean average precision(mAP)
Objeect Detection의 성능 평가 방법이다.
- Precision (정밀도) : 검출 결과 중 옳게 검출한 비율
- Recall (재현율) : 검출해야하는 객체 중 제대로 검출한 비율
recall에 대응하는 precision의 평균을 average Precision이라고 한다.
GoogLeNet Object Detection
객체 검출 후에 CNN을 사용하여 classification을 하는 R-CNN과 비슷한 과정을 사용한다. 시간이 부족하여 bounding box regression
은 하지 않았다.
Selective Search
+ multi-box prediction
을 사용한다. false positive(틀린 검출)
를 줄이기 위해 superpixel의 크기를 2배로 사용하여 selective search의 결과를 반으로 줄인다. 그 결과 single model에서 mAP가 1% 상승하였다. Inceptin Model
사용하여 region classification을 하였다. 6개의 ConvNet을 ensemble한 결과 accuracy가 40에서 43.9까지 개선되었다. 결과
2013년과 비교하여 object detection accuracy가 2배가 되었다.
single model의 성능만 비교하면 Deep Insight
가 더 높은 성능을 보인다. 하지만 Deep Insight는 ensemble했을 때 0.3%
만 성능이 증가한다. 반면 GoogLeNet은 ensemble 했을 때 성능이 크게 증가한다.
최적의 sparse structure를 dense building block으로 근사하는 방법이 neural network의 성능 개선
에 사용할 수 있는 방법임을 증명했다. (연산량은 조금 늘고, 성능을 상당히 향상시켰다.)
object detection에 context 고려, bounding box regression을 하지 않고도 경쟁력을 보여줬다. 이는 Inception Architecture
이 강점이 있음을 보여준다.
비슷한 depth와 width를 가지는 expensive 모델로도 비슷한 성능을 기대할 수 있다. 하지만 sparser achitecture
를 사용하는 것이 일반적으로 실현가능하고 유용한 아이디어이다.