본문 바로가기

Computer Vision/3) Object Detection

1강 - R-CNN (Region with Convolutional Neural Network)

reference : arxiv.org/pdf/1311.2524.pdf

0. Abstract

1) R-CNN이 Object detection 분야에 끼친 영향

1> 기존 방식보다 간단한 방법으로

2> PASCAL VOC 2012 data에 대해 mAP를 20% 향상시켰다.

- PASCAL VOC Challenge(Pattern Analysis, Statistical Modeling and Computational Learning)

-2005년부터 2012년까지 총 8회에 걸쳐서 매년 진행된 detection 대회

2) R-CNN의 핵심 2가지

1> CNN 이용

- ILSVRC 2012를 기점으로 크게 Computer vision 분야에 크게 기여한 CNN을 detection에 적용

- AlexNet (2012) -> ZFNet (2013) -> GoogleNet, VGGNet (2014)

2> data가 부족한 상황에서도 높은 성능을 보일 수 있다.

3) 기타

1> naming

- Region proposal을 CNN에 적용했기 때문에

- R-CNN(Region with Convolutional Neural Network)으로 부른다.

2> 비슷한 시기에 나온 OverFeat보다도 성능이 좋다.

 

 


1. Introduction

1) 이전 연구

1> SIFT, HOG 등을 이용해서 원하는 물체의 방향성이나 edge를 detect

2> ensemble

3> CNN도 1990년도에 도입이 되었지만 여러가지 문제(computing power, vanishing gradient 등) 로 사용이 어려웠습니다. (LeNet, 1998)

4> SVM 이용

=> 대체적으로 느리다는 단점이 있었으며 추후 소개될 R-CNN에 비해 성능도 떨어집니다.

2) R-CNN inference overview

R-CNN의 과정을 크게 1>~3> 3가지로 요약할 수 있습니다.

(읽어보면서 추후 R-CNN에서 무엇이 문제일지 생각해보세요)

0> dataset

- input: image

- label: bounding box(continous), class(discrete)

=> 그래서 regression과 classification 2가지 작업이 필요

(object detection dataset의 label을 보면 json, xml에 저장하며 csv파일 column에 bounding box를 저장하기도 합니다.)

1> Region Proposal

- 한 image 내에 object로 추정되는 2000개의 후보를 CNN에 전달

2> CNN computation

- 전 단계에서 제안된 region을 동일한 크기로 resize 작업을 선행합니다. (warped region)

- 이후 기존 CNN처럼 연산해서 feature vector 생성

3> Classification

- classification : object 여부와 class (by Linear SVM)

3) data 부족

CNN의 특성상 많은 data가 필요합니다.

1> use Pretrained CNN by ImageNet dataset

2> Fine-tuning by PASCAL VOC dataset

 

 


2. Object Detection with R-CNN

1) Module design (3단계 구성)

1> Region Proposal

- pixel -> component(픽셀 뭉치) -> segment(region) by graph theory

- Selective Search

만들어진 후보들 간의 color, texture, size, fill 계산 -> 이를 바탕으로 유사도 계산 -> 유사도 높은 순서대로 merge

=> 2000개의 region 선별

(가중치 a는 해당 논문에서 모두 같은 값으로 설정했습니다.)

2> feature extraction

- resize region (warp region) : CNN은 input size가 동일해야 하므로 resize (227X227)

(warping 할 때 16 pixel의 padding을 가한 후의 warping이 가장 성능이 좋았습니다. / D의 아래 부분을 의미합니다.)

- mean-subtracted

- CNN computation 후에 4096 dimension의 feature vector를 추출한다.

2) Test-time detection

0> Test image 준비

1> Selective search로 2000개의 region을 추출

2> 각 region을 warp(resize) -> CNN으로 feature vector까지 연산

3> feature vector를 SVM을 이용해서 각 class에 대한 score를 계산

4> score가 부여된 region들을 아래 기준에 의해 선별한다.

- IoU가 threshold(0.5)를 넘어야 한다.

- NMS(non-maximum suppression) : 겹치는 region들 중에서 가장 confidence가 높은 것만 남기는 작업

3) Training

1> Supervised pretraining

- ILSVRC2012 dataset으로 pretrained CNN 모델 준비

2> Domain-specific fine-tuning

(PASCAL VOC에 대해 fine-tuning class N = 20)

(ILSVRC 2013 dataset에 대해 fine-tuning class N = 200)

- warped region을 사용해야 한다. (CNN에 들어갈 input은 warped region이니까)

- SGD로 parameter update 진행

- fine-tuning할 때 classification layer의 unit 개수는 N+1이다. (원래 class N + 아무것도 없는 background class 1개)

- Positive sample : IoU가 0.5 이상인 region

- Netgative sample : Positive sample이 아닌 region (background)

- batch 구성: size는 128개로 1:3 = positive:negative로 구성했다.

3> Object category classifier(SVM)

- SVM을 따로 학습한 이유는 당시에 mAP(성능)가 softmax 사용(50.9%)한 것이 SVM(54.2%)보다 낮아서입니다.

- Positive sample : ground-truth boxes (정답 data / IoU 1)

- Negative sample : Iou 0.3 미만

- Network의 overfitting을 피하려면 "jittered example" (IoU가 1보다 작은 것)이 필요

- 하지만 training data가 적어서 "jittered example"이 부정확했다.

- 그로 인해 softmax classifier의 성능이 좋지 않고

- data가 적을 때 더 높은 성능을 발휘하는 SVM을 "jittered example"을 제거한 dataset으로 train

4) Results on PASCAL VOC 2010-12

1> UVA, Regionlets vs R-CNN

- Selective Search를 동일하게 사용하더라도

- CNN을 기반으로 하는 R-CNN의 성능이 높습니다.

2> R-CNN vs R-CNN BB

- Bouding Box regression을 사용했을 때 성능이 향상됩니다.

5) Results on ILSVRC2013 detection

1> R-CNN이 class가 많아져도 다른 기법보다 mAP가 더 잘 나오는 것을 볼 수 있습니다.

2> 특히, 비슷한 시기에 나온 OverFeat보다도 성능이 꽤 높습니다.

 

 

 


3. Visualization, ablation, and mode of error

1) Ablation studies

1> R-CNN >> DPM

- 이전 결과에서도 보았지만 baseline(DPM)에 비해 R-CNN의 성능이 매우 높습니다.

- 특히 몇몇 class (bird, boat)에서의 성능이 많이 개선되기도 합니다.

2> fc6 > fc7 > pool5

- fully-connected layer가 추가될수록 parameter가 증가합니다.

- 하지만 model의 scale이 증가할수록 mAP가 증가하지는 않습니다.

3> FT > non-FT

- fine-tuning 여부가 성능 개선에 큰 영향을 주는 것을 알 수 있습니다.

4> R-CNN FT fc7 > R-CNN FT fc BB

- Bouding Box regression을 사용했을 때 성능이 향상됩니다. (이전 결과에서도 검증)

2) Network architectures

1> R-CNN O-Net > R-CNN T-Net

- R-CNN T-Net : AlexNet 기반

- R-CNN O-Net : VGGNet 16 기반

- CNN 모델의 scale이 커질수록 성능이 향상된다는 경향이 detection 분야에서도 적용됨을 알 수 있습니다.

3) Detection error analysis

1> sensitivity to object characteristics

- occlusion(occ) : 맞물림

- truncation(trn) : 절단

- bounding box area(size) : bounding box로 인한 문제

- aspect ratio(asp) : warp로 인한 문제

- viewpoint(view) : 바라보는 각도와 같은 관점

- part visibility(part) : 특정 부위만 보이는 문제 (머리만)

2> distribution of top-ranked FP types

- Loc : poor localization (IoU가 작은 case)
- Sim : confusion with a similar category (유사 class와의 혼동)

- Oth : confusion with a dissimilar object category (유사하지 않은 class와의 혼동)

- BG : a FP that fired on background. (background의 방해)

(대체적으로 IoU가 작은 data로 인한 FP 문제가 많았습니다.)

4) Bounding-box regression

- proposed region과 ground-truth bounding box간의 비율을 맞추는 것이 중요합니다.

- 위치 좌표(x,y) => scale-invariant translation

- 크기 변수(w,h) => log-space translation

- L2 loss 형태에 regularization이 추가된 상황

- 해당 loss를 최소로 만드는 w(parameter)를 학습을 통해 찾는다.

 

 

 


4. The ILSVRC2013 detection dataset

(위의 내용과 유사한 부분이 많아서 다른 부분 위주로 간략히 설명하겠습니다.)

1) Dataset overview

1> 3-way split

- train (395,918), val (20,121), test (40,152)

2> 당연한 얘기이지만 validation set과 test set의 distribution은 동일하게 split해야 한다.

3> 더 정밀한 validation을 위해 validatation을 절반씩 val1, val2로 분할한다.

(과거 NIPS 2016에서 Andrew Ng이 4-way split을 주장한 적이 있습니다.)

2) Region proposals

1> 2403개의 region을 proposal

2> IoU = 0.5를 threshold로 설정

3) Training data

아래 3가지에 사용했으며 case별로 다른 data를 사용합니다. 그에 따른 결과도 아래에서 보겠습니다.

1> fine-tuning CNN

- NVIDIA Tesla K20을 이용

- framework로 Caffe를 사용

- 13시간 소요

2> detector SVM training

3> bounding-box regressor training

4) Validation and evaluation

1> 위에서 예고한대로 dataset을 달리해서 성능을 측정하기 때문에 다른 hyperparameter들은 fix

2> 모델 구조에 관한 hyperparameter는 변경될 수 있습니다.

5) Ablation study

이전과 비슷한 결론들을 얻을 수 있습니다.

성능 개선

1> SVM training dataset이 많을 수록 (약간의 개선)

2> CNN fine-tuning set이 많을 수록 (큰 개선)

3> Bounding box regression을 할 때

6) Relationship to OverFeat

1> OverFeat은 2.5)에서 보았듯이 성능 면에서 R-CNN보다 뒤쳐집니다.

2> 하지만 OverFeat은 sliding window라는 기법을 사용하며 이 과정에는 warp를 할 필요가 없습니다. 그래서 R-CNN보다 무조건 나쁘다고 할 수 없습니다.

(추후 detection 분야는 자율주행과 같은 분야에 상용화되어야 합니다. 그래서 단순히 정확도도 중요하지만 속도 또한 매우 중요한 요소입니다. R-CNN과 같이 탐색 영역을 찾는 Region Proposal 과 해당 영역을 분류하는 Detection 두 가지 과정이 순차적으로 수행되는 방법론을 2-stage object detector 라 부르며, 두 가지 과정을 한번에 처리하는 방법론을 1-stage object detector 라 부릅니다. detection 분야의 모델은 크게 2가지로 분류가 됩니다. 그에 따라 1-stage object detector는 속도에서, 2-stage object detector는 정확도에서 장점을 가질 수 있다고 쉽게 유추할 수 있습니다.)

3> 이러한 비교를 통해 추후 discussion에서 R-CNN은 추후 어떻게 발전해야할지 감을 잡을 수 있습니다.

 

 


5. Semantic segmentation

이제 R-CNN을 기반으로 detection 뿐 아니라 영역까지 구분해내는 Semantic segmentation을 시도했습니다.

1) 기법 소개

1> full

- region의 shape까지는 고려하지 않음 (기존 detection)

- 지금까지 설명한 방식 그대로 이용

- 그에 따라 직사각형이 아닌 region은 고려하지 못합니다.

2> fg

- region의 실제 영역을 CNN으로 연산

- 직사각형에서 region이 아닌 부분은 image pixel의 평균값으로 대체

3> full + fg

(사실 1>과 2> 모두 단점이 예상됩니다. full은 background가 noise로 작용할 것이고 fg의 경우도 마찬가지로 backgroudnd가 평균으로 채워지니 이 또한 noise가 됩니다. 그래서 3>과 같은 방법으로 noise를 상쇄해봅니다.)

- 위의 두 기법으로 나온 feature를 concatnate한다.

2) Results on VOC 2011

Segmentation mean accuracy라는 segmentation task의 metric으로 성능을 측정했습니다.

1> Segmentation mean accuracy (%) on VOC 2011 validation

- full과 fg를 각각 사용할 때보다 같이 사용한 full+fg에서 겅능이 더 좋습니다.

- full+fg가 기존에 있던 기법인 O2P보다도 성능이 좋습니다.

2> Segmentation accuracy (%) on VOC 2011 test

- 1>과 마찬가지로 다른 baseline 기법보다 full+fg가 성능이 높습니다.

 

 


6. Conclusion

1) 성과

1> CNN과 region proposal을 동시에 적용해서 높은 성능을 달성

2> large CNN을 사용하는데 data가 적어도 높은 성능을 보여줍니다. (by fine-tuning)

 

 


7. 나의 생각

1) 장점

1> 논문에서 얘기하는대로 높은 mAP를 달성했습니다.

2> 이를 통해 Deep Learning을 이용한 object detection 분야와 segmentation 분야를 개척했습니다.

2) 단점 & 개선방향

1> slow inference : region proposal에서 2000개의 region을 추출하고 CNN에서 연산하며 시간이 오래걸립니다. 그로 인해 병목현상까지 생깁니다.

=> 추후 Fast R-CNN, Faster R-CNN이 순차적으로 해결

(이름에서 암시하는 것처럼 속도 개선에 초점을 맞춰서 발전)

2> warp로 인한 image 왜곡

=> 이 또한 Fast R-CNN, Faster R-CNN에서 해결

3> 옛날 알고리즘을 사용하다보니 GPU 사용에 적합하지 않습니다.

(GPU는 단순 tensor연산에 최적화되어 있어서 전 과정을 GPU 연산에 적합한 구조로 만들게 발전)

=> Fast R-CNN에서 SVM 대신 Neural Network로 대체

=> Faster R-CNN에서 region proposal도 Neural Network 구조(RPN)로 대체

4> 3개의 모델을 학습시켜야 하는 문제

=> 3>에서 각 단계가 Fast R-CNN과 Faster R-CNN에서 간소화됨을 언급

=> 1-stage object detector가 정확도를 보완한다. (Yolo v1~v3, SSD)

 

참고

1> selective search : https://donghwa-kim.github.io/SelectiveSearch.html

'Computer Vision > 3) Object Detection' 카테고리의 다른 글

0강 - Intro  (0) 2019.10.18