본문 바로가기
딥러닝관련/Detection

Rich feature hierarchies for accurate object detection and semantic segmentation (R-CNN) 정리

by 머리올리자 2021. 11. 30.

ABSTRACT


R-CNN에서는 두 가지 중요한 점을 이용

 

(1)

object를 localize 하고 segment 하기 위해 

bottom-up region proposals에 CNN을 적용

 

(2)

Labeled training data가 부족한 경우,

auxiliary task에 supervised pre-training 및

domain별 fine-tuning이 상당한 성능 향상을 가져온다.

 

Region Proposal을 CNN과 결합하기 때문에 R-CNN이라고 함.

 

Introduction


2012년에 ImageNet challenge에서 CNN이 좋은 성적을 보인 이후

ImageNet challenge의 CNN의 classification 결과가

PASCAL VOC Challenge의 object detection 결과로

generalize 될 수 있는지 궁금했음.

 

Image classification과 달리 detection은 localization이 필요하다.

(localization : 이미지에서 하나 이상의 객체의 위치를 식별하고 범위 주변에 풍부한 상자를 그리는 것)

 

Localization 문제를 regression 문제로 프레임화 되었을 때 결과가 좋지 않았음

(C. Szegedy, A. Toshev, and D. Erhan. Deep neural networks for object detection. In NIPS, 2013)

 

이를 대안으로,

 

sliding-window detector 방식을 차용하였음.

 

Test Time 때

 

1)

Input 이미지에 대하여, 2000개의 category-independent region proposals을 생성하고

 

2.

CNN을 사용하여 각 proposal에서 fixed-length vector를 extract 한 다음,

 

3.

category-specific linear SVM으로 각 영역을 classify 한다.

 

Region에는 다양한 shape이 있는데, affine image warping(resize) 방법을 사용하여 크기를 일정 사이즈로 고정 시킨다.

(사용된 CNN이 고정된 사이즈의 input resolution을 받기 때문에 영역을 resize 해준다)

 

 

출처 : https://arxiv.org/pdf/1311.2524.pdf

위 사진은 R-CNN에 대한 대략적인 흐름을 나타낸다.

 

이들이 object detection 에서 마주한 또 다른 문제는 labeled data가 부족하다는 점.

 

-> 이는 fine-tuning으로 해결

(Fintuning으로 mAP가 8% 상승)

 

class-specific computation

1) small matrix-vector product

2) greedy non-maximum suppression

 

간단한 bounding-box regression 방법이 mislocalization(대부분의 오류 케이스)을 줄여주는 것을 확인.

 

Object detection with R-CNN


Object Detection system에는 세 가지 모듈로 구성

 

1) category-independent region proposals

2) 각 region에서 fixed-length vector를 extract하는 large CNN

3) set of class-specific linear SVMs

 

Module Design


Region Proposals

 

Selective search를 이용

 

Feature Extraction

 

Alexnet을 이용하여 각 region proposal에서 4096 dimensional vector를 추출.

(227 x 227 RGB 이미지 -> network의 input으로 들어감)

 

object proposal transformation

 

CNN의 input으로 들어가기 위해 R-CNN에서 아래와 같이 다양한 transformation 방법 시도

 

출처 : https://arxiv.org/pdf/1311.2524.pdf

 

                                                              (A) : 실제 scale의 original object proposal

                                                              (B) : context가 있는 tightest한 정사각형

                                                                       (object proposal 기준 주변 영역을 포함하여 정사각형)

                                                              (C) : context가 없는 가장 tightest한 정사각형

                                                              (D) : (C)를 warp한 것

 

Original object proposal 주위에 추가 이미지 context를 포함하는 것도 고려.

 

context padding의 양(p)는 transformed input coordinate frame에서

original object proposal 주위의 border size로 정의

 

윗쪽 행은 p = 0

아래 행은 p = 16

을 적용한 예시

 

Warped training sample들은 아래와 같음

 

출처 : https://arxiv.org/pdf/1311.2524.pdf

 

Test-time detection


1. region proposal(selective search)

Test-time에 test image에 대해 selective search를 이용하여 약 2000개의 proposal을 만든다.

(selective search의 "fast mode" 를 사용한다 함)

 

2. Warp -> CNN

Feature를 계산하기 위해 각 proposal을 warp 하여 CNN으로 foward propagate

 

3. SVM

각 class에 대해 trained SVM을 사용하여 feature vector를 추출하고 그 feature vector의 score를 매긴다.

 

4.

이미지의 모든 scored region이 주어지면, non-maximum suppression(각 class에 독립적으로)

 

2021.06.24 - [딥러닝관련/Detection] - Non-maximum Suppression

 

Non-maximum Suppression

< Problem > Object detection model은 성능을 더욱 향상 시키고, 다양한 모양과 크기의 object를 capture하기 위해 아래와 같이 다양한 크기와 aspect ratios를 가진 여러 bounding box를 예측한다. 하지만, 모..

better-tomorrow.tistory.com

 

 

Run-time analysis

 

두 가지 속성이 detection을 효율적으로 만듦

 

1) -> 모든 CNN 파라미터는 모든 categories에서 공유된다.

 

2) -> CNN에 의해 계산된 feature vector는 bag-of-visual-word 인코딩이 되어 있는 spatial pyramid와 같은 

다른 일반적인 접근 방식과 비교할 때 low-dimensional

(feature 파라미터가 다른 연구들보다 작다고 얘기하는 듯)

 


Image classification에서의 bag of words

 

Image classification task에서 word에 해당하는 것은 local image features다

 

이 image feature를 단어처럼 처리하여 image classification에 적용하는 것이라고 간단히 정리할 수 있다.

 

(자세한 건 나중에...)


class-specific 하게 계산하는 것은 features와 SVM weight간의 dot product와 NMS다.

 

feature matrix는 2000 x 4096

SVM weight matrix는 4096 x N

(N은 class 수)

 

논문 내에서 UVA 시스템과 비교하여 우수성을 설명하지만  현재 기준으로 보았을 때,

selective search를 CPU로 실행하는 것과 모든 box region에 대해서 CNN을 돌리는 방법은 매우 느리며 비효욜적임

 

Training


Supervised pre-training

ILSVRC2012 classification datasets에 대해 CNN을 pre-training 했음.

 

Domain-specific fine-tuning

CNN을 새 작업인 detection과 새 도메인인 warped proposal windows에 적용하기 위해

warped region proposals에 대해서만 SGD training을 진행하였음.

 

CNN의 ImageNet-specific 1000-way classification layer을 

randomly 초기화된 (N+1)-way classification layer로 교체하는 것 외에는

CNN 구조는 바뀌지 않았다.

(여기서 N은 object classes의 갯수이며, 1을 더한 것은 background이다)

(Pascal VOC는 N = 20, ILSVRC2013은 N = 200)

 

R-CNN에서는 ground-truth box와 0.5 IoU 이상 겹치는 

모든 region proposal을 해당 상자의 클래스에 대한 positive으로 처리,

0.5 IoU 보다 아래면 negative로 처리.

 

Learning rate : 0.001

 

각 SGD iteration에서

32개의 positive windows(모든 클래스에 대해)와

96개의 배경 창을

균일하게 샘플링하여

크기 128의 미니 배치를 구성

 

Sampling window가 background에 비해 적기 때문에 positive windows에 bias를 두었음

 

Object category classifiers

 

자동차를 detect 하기 위해 binary classifier를 training 한다고 가정.

 

자동차를 타이트하게 둘러싸고 있는 image region은 분명 positive example 일것이다.

 

비슷하게, 자동차와 관련이 없는 배경 영역은 negative example일 수밖에 없음.

 

여기서 헷갈리는 것은,

 

자동차와 부분적으로 겹치는 영역에 label을 지정하는 방법은 덜 명확

(무엇을 보고 이 영역이 positive 인지 negative 인지 알 수 없기 때문)

 

이 때, IoU overlap threshold을 사용하여 이 문제를 해결.

 

이 threshold 아래에서는 region이 negative로 정의.

 

 그렇다면 threshold 기준을 어떻게 정할 것인가?

 

R-CNN에서는 0.3으로 정하였는데 이는,

validation set을 통해 {0, 0.1, ..., 0.5}의 범위에서 grid search한 결과.

 

threshold를 고르는 일은 매우 중요함.

(Threhold 값 변동에 따라 mAP가 변동함)

 

Positive example은 각 class에 대한 ground-truth bounding box로 정의

 

Feature가 추출되고 training label이 정의되면 각 class당 하나의 linear SVM을 적용

 

Training data가 매우 많기 때문에 메모리 문제로 standard hard negative mining을 적용

 

Hard negative mining은 빠르게 수렴되고,

mAP는 모든 이미지를 한 번만 통과한 후에 증가를 멈춘다.


- Hard Negative Mining -

 

한 명 이상의 사람이 포함된 dataset을 제공하고 각 이미지에 대한 bounding box를 제공한다고 가정해보자

 

classifier는

positive example(사람)

negative example (사람 X)

모두가 필요하다.

 

각 사람에 대해서, 해당하는 bounding box의 내부를 살펴봄으로써 positive training example을 만들 수 있다.

 

그러나 negative example은?

 

좋은 방법은, 임의의 bounding box를 random하게 여러 개 생성하여 positive와 비교하여

 

overlap 하지 않은 각 box에 대해서 negative example로 두는 것.

 

이렇게 positive example과 negative example이 생성되면, classifier를 학습한다.

 

그러나, classifier의 성능은 좋지 않다.

 

왜냐...

 

많은 false positives가 검출되기 때문에

(*false positive : 실제로 사람이 없는 곳에서 사람이 감지됨)

 

이를 해결하기 위해 hard negative mining이 사용되는데,

Hard Negative는 false positive box를 가져와 명시적으로

해당 box에서 negative example을 만들고 해당 negative를 훈련 세트에 추가하는 방법이다.

(확실한 negative example을 확보하는 것)

 

(Hard: 어려운, negative: 사람 X, 

hard negative -> 사람이 아니라고 보기 어렵다는 말) 

 

 

Classifier를 retrain 시키려면, 이 추가 knowledge(hard negative mining)로 더 나은 성능을 발휘해야 하며,

 

false positive가 많이 발생되지 않는다는 가정하여 진행

 

----

hard negative mining 시

 

negative example을 단순히 random하게 뽑지 않고

 

confidence score가 가장 높은 순서대로 뽑은 negative example을

 

random하게 뽑은 positive example과 함께

 

training set에 넣어 학습

 

출처 :&amp;amp;amp;nbsp;https://jamiekang.github.io/page2/

----

 

 

참조

https://www.reddit.com/r/computervision/comments/2ggc5l/what_is_hard_negative_mining_and_how_is_it/

 

What is hard negative mining? And how is it helpful in doing that while training classifiers?

In these slides there is a mention of hard negative mining. http://www.csc.kth.se/cvap/cvg/rg/materials/hossein_005_slides.pdf What exactly is...

www.reddit.com


 


(Appendix B)

1.

CNN을 fine-tuning 하는 것과 SVM을 training하는 것에 따라

positive example과 negative example이 다르게 정의된다.

 

정의에 대해 살펴보면

 

fine-tuning에서는, 각 object proposal을 maximum IoU overlap(있는 경우)이 있는 ground-truth instance에 매핑하고,

(즉, object proposal box가 생기면 grouth truth box와 IoU를 계산하여 IoU 최대값을 가지는 box를 고르고)

 

IoU가 0.5 이상인 경우, 일치하는 ground-truth에 대해 positive label을 지정

 

이를 제외한 다른 모든 proposal box에는 "background" label이 지정 -> negative example

 

Training SVM 에서는, 각 클래스에 대한 positive example로 ground-turth box만을 취하고,

 

클래스의 모든 instance에 대해서 0.3 IoU overlap 미만에 대한 proposals에 대해서는 negative example로 labeling 한다.

 

Grey zone : IoU overlap 0.3 이상이나 ground truth는 아닌 영역에 대해서는 무시된다.

 

Historically speaking,

ImageNet pre-trained CNN에서 계산된 feature에 대해 SVM을 training 하는 것으로 시작했기 때문에,

당시에는, fine-tuning이 고려할 대상이 아니었다.

 

이 때, SVM training을 위한 특정 label definition에 대한 정의가 최적임을 발견했음

 

fine-tuning을 하기 시작했을 때, 처음에 SVM training과 동일한 positive and negative example 정의를 사용했다.

 

그런데 positive와 negative example에 대한 현재의 정의와 비교하여 훨씬 나쁜 결과가 나왔음

 

 

그러나 그들의 가설은 positives와 negatives를 정의하는 방법의 차이는 근본적으로 중요하지 않으며,

fune-tuning을 위한 데이터가 제한적이라는 사실에서 발생한다는 것.

 

데이터 제한적인 부분을 해결하기 위해 "jittered" examples (IoU overlap 0.5 ~ 1 사이지만 ground truth가 아닌 proposal)을 만들어,

positive example 수를 약 30배까지 확대하는 계획을 세웠었음.

 

그러나 이 방법은 차선책으로 두어야 했는데 이는, network가 정확한 localization을 위해 fine-tuning되지 않았기 때문이다.

(아무래도 localization 부터 정확히 되고 나서, jittering(augmentation) 방법을 적용해야 정확도가 더 올라가지 않을까라고 생각했던 거 같다)

 

2.

Fine-tuning 후에 SVM을 training 시키는 이유

 

사실, 21-way softmax regression classifier인 fine-tuned network의 마지막 layer를 object detector로 간단히 적용하는 것이 깔끔.

 

그러나 이는 성능 drop을 발생 시켰음(mAP 54.2% -> 50.9%)

 

이는

fine-tuning에 사용된 positive example의 정의가 정확한 localization을 하지 않고,

softmax classifier가 training에 사용된 "hard negatives"의 subset이 아닌 randomly sampled negative example에 대해 trained 된 것 등

여러 요인의 조합으로 발생할 수 있음.

 

Results on PASCAL VOC 2010-12


출처 :&amp;amp;nbsp;https://arxiv.org/pdf/1311.2524.pdf

위 결과는 PASCAL VOC 2010에 대한 결과

(각 클래스 별로 average precision 결과)

 

 

 

Results on ILSVRC2013 detection


출처 :&amp;amp;nbsp;https://arxiv.org/pdf/1311.2524.pdf

위 결과는 ILSVRC2013에 대한 결과

(아래는 클래스별 average precision 결과)

 

 

R-CNN 프로세스 

 

[1단계]

이미지 입력

출처 :&nbsp;https://www.robots.ox.ac.uk/~tvg/publications/talks/fast-rcnn-slides.pdf

[2단계]

selective search를 사용한 region proposal

출처 :&nbsp;https://www.robots.ox.ac.uk/~tvg/publications/talks/fast-rcnn-slides.pdf

Selective search를 사용한 이유는 위에 언급했듯이 기존의 detection 방법의 비효율성을 개선하기 위해

 

[Warped image regions]

출처 :&nbsp;출처 :&nbsp;https://www.robots.ox.ac.uk/~tvg/publications/talks/fast-rcnn-slides.pdf

이미지 사이즈를 고정된 사이즈 (227 x 227)로 resize한다.

 

Resize 이유는 fully connected layer 때문에 CNN이 fixed-size 해상도를 input으로 받기 때문.

 

[3 단계]

Resize된 이미지를 CNN(AlexNet)의 입력

출처 : https://www.robots.ox.ac.uk/~tvg/publications/talks/fast-rcnn-slides.pdf

[4단계-1]

추출한 features를 기반으로 classification (SVM)

출처 : https://www.robots.ox.ac.uk/~tvg/publications/talks/fast-rcnn-slides.pdf

[4단계 2]

Bounding box regression

출처 : https://www.robots.ox.ac.uk/~tvg/publications/talks/fast-rcnn-slides.pdf

Bounding box의 정확도를 높히기 위해 bounding box regression 수행

2021.06.28 - [딥러닝관련/Detection] - Bounding box regression

 

Bounding box regression

Selective search를 통해 찾은 박스 위치는 정확하지 않다. 이를 해결하기 위해 박스 위치가 물체를 감싸도록 조정해주는 bounding box regression이 필요 예측 박스를 다음과 같이 표기 가능 x, y는 중심점,

better-tomorrow.tistory.com


[R-CNN의 단점]

 

  1.  Selective search로 2000개의 region proposal을 뽑고 모두 CNN을 거치기 때문에 시간이 매우 오래 걸린다.

      (selective search는 CPU로 동작한다)

R-CNN, SPP-Net과 Fast R-CNN의 training 및 Testing time 비교 출처 :&nbsp;https://towardsdatascience.com/r-cnn-fast-r-cnn-faster-r-cnn-yolo-object-detection-algorithms-36d53571365e

 

  2.  CNN, SVM, bounding box regression이 multi-stage로 구성되어 있기 때문에

연산을 공유하지 않아 end-to-end로 학습하지 않는다.