안녕하세요~


이번글에서는 최초의 딥러닝 기술이 적용된 object detection 모델인 RCNN에 대해서 알아보도록 할거에요. 


CNN 챕터처럼 논문을 세세하게 분석하지 않고 보기 편하게 "1. Motivation ->2.Architecture -> 3. Training -> 4. Result" 순서로 간단하게 설명해드리도록 할게요!





<1. Motivation>


앞선글에서 다루었던 DPM 같은 구조의 문제점은 다음과 같이 요약할 수 있어요.


1) 굉장히 복잡한 구조


DPM에서 classification 과정은 매우 복잡해요. 다양한 filter들(low level, high context )의 hog feature 와 각각의 filter들을 적용한 후 SVM을 이용하여 classification을 하게 됩니다. 그리고 모든 filter들의 결과를 합산하는 ensemble 기법을 거쳐 최종 classification을 하게되요. 상당히 복잡한 구조이죠;; 또한 hog feature 기반의 SVM classification 결과도 뛰어나지 않아요;;; 






2)  Bounding box


다양한 크기의 resolution에서 sliding window 방식으로 진행하게되면 굉장히 많은 bounding box가 생성될거에요. 이렇게 많은 bounding box 각각에 대해서 복잡한 dpm classification 알고리즘을 적용한다면 시간도 굉장히 오래걸릴거에요.

     



이렇게 시간도 오래걸리고 classification 결과도 좋지 않은 모델이 2012년까지는 최고의 성능을 보이는 object detection 모델이라고 하면 믿어지시겠어요? 하지만 2012년 혜성같이 등장한 AlexNet으로 인해 Object detection 영역은 큰 변혁을 맞이하게 됩니다.










<2. Architecture>


논문에서는 RCNN 구조를 세 가지의 module (Extract region proposals, Compute CNN features, Classfiy regions)로 구성하고 있어요.




<사진1>



1) Region proposals (Extract region proposals)

: 먼저 입력 이미지가 들어오게되면 이미지 내에서 bounding box가 될 만한 후보(candidate bounding box)들을 선별해주게되요. 객체가 무엇인지에 따라 bounding box가 선별되어 그려지는 것이 아니고 (category-independent region proposal), 그냥 객체가 될만한 영역들에 대해서 candidate bounding box를 선별해 줍니다. 예를들어, 객체가 될만한 것들은 보통 인접한 pixel과 굉장한 차이가 날거에요. 그럼 이러한 정보들을 기반으로해서 객체라고 생각되는 영역에 대한 candidate bounding box를 생성해 줍니다.




이렇게 candidate bounding box (region)를 선별(proposal)해주는 것을 region proposal 방식이라고 해요. 일반적으로 object detection=classification+localization 이라고 할 수 있는데, region proposal 같은 경우는 localization을 위한 기법이라고 생각하시면되요.


Region proposal 방식은 굉장히 다양하게 존재 했어요. RCNN은 selective search라는 알고리즘을 통해 candidate bounding box를 선별해 주었어요 (selective search에 대한 개념은 기회가되면 segmentation 파트에서 더 자세히 다루려고해요. 그러니 이곳에서는 "RCNN의 region proposal 방식이 selective search 구나!" 정도로만 이해하시면 좋을 것 같아요)





2)  Feature Extraction


두 번째 모듈은 feature extraction이에요. 선별된 candidate bounding box들은 개별적으로 CNN이 수행이되요. CNN 작업이 수행되는 이유는 각각의 candidate bounding box에 있는 물체들의 특징(feature)을 추출하기 위해서에요.


(보통 CNN은 이렇게 뽑은 특징들을 softmax로 통해 분류하는데 여기에서는 CNN으로 feature만 뽑아주고, classification은 기존 DPM에서 사용하던 방식인 SVM 방식을 택했어요. 아마 CNN을 그대로 적용시키는 것 보다 object detection 영역에서 기존에 사용했던 classification 방식을 택하는것이 더 좋을거라 판단했었나봐요.)


RCNN은 feature extraction 용도로써 AlexNet을 적용했어요. Softmax를 제외하고 5 conv layer, 2 fc layer를 통해 feature extraction을 진행했습니다.


<사진2>

(그림에서는 input이 224x224라고 나오는데 실제로는 input이 227x227이어야 해요. 논문에 설정된 stride와 padding을 고려했을때, 여러 레이어를 거쳐 13x13으로 도달하려면 227x227이 맞다고해요.AlexNet 논문의 그림이 잘 못된거라고 합니다)


RCNN은 AlexNet을 적용하기 때문에 candidate bounding box들을 227x227 이미지로 만들때 여러 실험(B,C,D)을 했어요.


A: Region proposal 방식을 통해 선별된 candidate bounding box in original input image


B: A 이미지 -> 배경을 포함하는 tightest squre: A이미지에서 배경을 조금 더 포함해서 isotropically 방식으로 227x227 size로 조정 (비어있는 부분 zero 패딩으로 맞추는듯; 확실한 건 아님)

C: A 이미지 -> 배경을 포함하지 않는 tightest squre: A이미지에서 배경 포함하지 않고 isotropically 방식으로 227x227 size로 조정 (비어있는 부분 zero 패딩으로 맞추는듯; 확실한 건 아님)

D: A 이미지 -> A 이미지를 단순히 warping


Top-row: p=0 -> 배경을 아예 무시

Bottom-row: p=16 -> 배경을 padding=16 만큼 포함.

(예를들어, C 방식에서 p=16을 적용한다면, C방식 (A이미지에서 배경이 포함되지 않는 객체)을 기준으로 배경을 p=16 만큼 포함시킨다는 뜻) 


논문에서는 D 방식을 선택했을때 p=16을 적용하면 classification 결과가 좀 더 좋게 나왔다고 하네요.




결국 위와 같이 region proposal 방식으로 선별된 candidate bounding box 를 AlexNet에 입력해주기 위해 warping 작업을 하게 됩니다. 그리고 resizing(warping)된 227x227 이미지에 대해서 AlexNet을 적용해 feature extraction을 수행하게 되는거에요.





3) Classification


AlexNet으로 feature extration을 한 후에는 SVM을 통해 classification을 하게됩니다.





지금까지 RCNN이 어떻게 구성되어 있고 어떤 순서(알고리즘)로 detection 하는지 알아보았어요. 그렇다면 이제 부터는 좀 더 디테일하게 RCNN이 tranining하는 방식에 대해서 알아보도록 할게요.



[Detection 요약]

1. Input image -> RCNN 모델에 입력

2. Selective Search (region proposal)방식으로 candidate bounding box 선별

3. 선별된 candidate bounding box를 warping 해줌 (227x227; for AlexNet input size/ p=16)

4. warping된 227x227 이미지를 입력하여 AlexNet으로 부터 feature extraction

5. AlexNet으로 부터 추출된 feature들을 이용해서 SVM을 적용









 

<3. Training>


Training은 classification(SVM)과 localization(bounding box) 두 task로 나뉘어요. 그렇기 때문에 classification 및 localization은 따로따로 학습이 된다고 보시면되요.






1) Classifciation


기본적으로 classification을 위해 AlexNet이 쓰이는데요. RCNN에서는 처음부터 AlexNet을 만들어 Pascal VOC 데이터로 학습시키지 않고, 기존에 ILSVRC 2012에서 학습된 AlexNet을 사용해요. 보통 이를 pre-trained model을 사용했다고 하는데요. 어차피 Object detection에서 쓰이는 AlexNet도 객체를 classification하는 목적을 갖고 있어요. 그렇다면 ImageNet dataset이나 Pascal VOC dataset에 있는 객체들의 형태가 크게 다르진 않을거에요. 그렇기 때문에 ImageNet dataset으로 training된 AlexNet을 갖고 Pascal VOC dataset을 조금만 학습시켜도 될거에요. 이러한 작업을 fine-tuning 했다고 해요. 


만약 AlexNet 모델을 처음부터 구현하고 Pascal VOC dataset으로 학습시키면 dataset 양도 적을 거고 (Pascal VOC < Pre-trained model: Pascal VOC+ImageNet), 학습시키는데 시간이 굉장히 오래걸릴거에요 (Object detection은 classification말고도 localization에 대해서도 학습이 되어야 하니까 training 시간은 배로 더 걸리겠네요.)


RCNN은 Pascal VOC dataset으로 추가적인 training을 시켜주기 때문에 fine-tuning이라고 했죠?

좀 더 엄격히 말하자면 RCNN은 AlexNet모델에 transfer learning을 적용했다고 이야기 할 수 있는데요.


기존의 AlexNet은 Softmax를 통해 classification을 진행했지만, RCNN에서 사용되는 AlexNet은 Softmax가 아닌 SVM을 통해서 classification을 하게되요. 이렇게되면 기존의 AlexNet의 softmax를 제거 하고 SVM을 연결시켜주어야 하는데, 이때 classifier 부분만 따로 학습을 해주어야해요. 이런 경우 우리가 transfer learning을 했다고 이야기하는데요.


Transfer learning을 적용하는 이유는 우리가 분류하려는 class의 종류가 달라질때에요. AlexNet은 1000개의 class에 대해 학습이 되었지만, 우리가 이를 적용할때는 다른 종류의 class 4개를 분류하고 싶을 때가 있어요. 이럴때에는 제일 뒷단에 위치한 classifier만 따로 다시 학습시키면 되는데요 이때 새로운 classifier를 이식(transfer)해서 학습시킨다고하여 transfer learning이라고 부르게 되었답니다.



Pascal VOC 대회에서는 20개의 클래스들에 대해서만 detection 성능을 평가하기 때문에, 기존의1000개의 클래스를 분류하는 목적을 갖는 AlexNet을 20개의 Pascal VOC 클래스에 대해서 분류하는 목적을 갖도록 transfer learning하게 됩니다. (좀 더 엄밀하게 이야기하면 21개의 클래스에 대해서 분류하게 됩니다 (20:classes; positive example + 1:background; negative example))


<사진3. Pascal VOC>



<사진4>


SVM을 학습시키기 위한 전제 조건은 positive example이어야만 한다는거에요. RCNN을 classification하는건 기본적으로 selective search를 통해 선별된 candidate bounding box에 대해서 학습이 진행되는데요. 아래 그림을 통해 candidate bounding box와 positive example이 어떤관계를 갖고 있는지 살펴볼게요.


RCNN을 통해 2개의 candidate bounding box가 선별되었어요. 하지만 이 두 개의 bounding box에 해당하는 class가 뭔지 아직 모르는 상태에요. 이때 학습 데이터로 사용되는 이미지 (ground truth (class, bounding box coordinate)를 포함)가 입력이되면 이 학습 데이터의 ground truth 정보와 2개의 candidate bounding box 정보를 비교대조하게되요. 만약 ground truth와 candidate bounding box의 IoU가 50% 이상이면 해당 candidate bounding box는 객체를 포함하고 있을 가능성이 높다고 판단하고, 해당 객체를 ground truth의 클래스라고 인식(=positive example)하고 학습을 진행해요. 반대로 IoU가 50% 이하이면 객체가 포함되어있을 확률이 낮다고 판단하여 객체가 아닌 background(=negative example)라고 인식하게 됩니다. 





이렇게 선정된 positive example에 대해서 학습이 classification 작업이 진행되요.






2) Localization (Bounding box)


Selective search를 통해 나온 candidate bounding box (아래그림 파란색)이 ground truth(아래그림 노란색)과 일치하지 않을 수 도 있어요. 이런 경우에는 candidate bounding box와 ground truth의 좌표정보들을 비교하여 regression 문제로 전환해주면 되요. 이렇게 되면 파란색 위치의 candidate bounding box가 ground truth를 보고 bounding box 위치를 학습하게 될거에요. 쉽게 말하면 아래와 같이 요약할 수 있겠네요.


"Selective search 만으로 stopsign의 위치를 찾아내는 능력이 조금 부정확해, 그러니까 너는(RCNN 모델) 정답지 (Ground truth의 올바른 위치) 를 보고 교정(training) 좀 하면 좋아질거야!  이렇게 학습(Training)을 마치게되면, 나중에 너(RCNN 모델)가 selective search를 이용하여 stopsign의 위치를 찾아낼 때, selective search 방식으로 candidate bounding box 를 뽑으면 위치가 조금 부정확했으니 배운대로 위치를 조금씩 조정해주면 더 좋은 localization이 될거야~"





이렇게 selective search를 통해서 나온 좌표값을 ground truth와 비교하여 '조금씩 조정'하게 되면 좋은 localization 성능을 얻게 되는데요. 이때 '조금씩 조정'하는 정도의 최적값을 찾기 위해서 bounding box를 찾는 문제를 아래와 같은 regression 문제로 정의하게되요.




Bounding box regressor의 학습 목표는 P를 G로 mapping할 수 있도록 최적의 변환(transformation)방식을 찾는거에요. 


"After learning these functions, we can transform an input proposal P into a predicted ground-truth box ˆG by applying the transformation"


아래와 같은 식을 기준으로 최적의 transformation 방식을 찾게 되는데, 이해가 잘 안되시죠?


 


아래의 그림에 적힌 설명대로 잘 따라가시면 위에서 언급한 수식들이 bounding box regression에 어떻게 적용되는지 알 수 있으실거에요.


(target-prediction에서 hypothesis function 개념은 아래 사이트를 여기 링크를 참조)



이렇게 최적의 d함수 값을 찾게되면 우리는 보편적으로 selective search를 통해 얻은 candidate bounding box를 학습된 transformation 방식으로 위치조정해주어 향상된 localization 성능을 얻을 수 있게 될거에요. 



<사진5>


<사진6>








3) Pool 5 feature를 Bounding box regression에 사용하는 이유


Pool 5 feature를 Bounding box regression을 위해 사용한 이유를 결론적으로 말씀드리면 'empirical study(경험적 연구)'이기 때문이에요. 즉, 여러 실험을 진행했는데 Pool 5 feature로 d함수를 구성하면 localization 성능 (mAP)이 좋게 나왔다는거에요.




아래결과를 보면  pool 5 feature (=6x6x256)를 이용하는것이 5 or 6 번째 Fully Connected layer feature (4096)를 이용하는것보다 mAP가 더 높게 나왔다는걸 아래 표로 보여주고 있어요.




그 외, CNN 모델을 AlexNet (아래 그림의 T-Net)을 사용한 경우와, VGGNet (아래 그림의 O-Net)을 사용한 경우에 대한 mAP도 보여주고 있네요. 그리고 BB라는건 위에서 언급한 bounding box regression 방식이 적용된 경우라고해요. (아마 BB라고 되어있지 않은 경우는 Selective Search 방식으로만 region proposal한 결과에 대해서 mAP를 계산한게 아닌가 싶어요)


이 결과를 보면 CNN의 성능이 d함수에서 사용되는 feature에 영향을 끼치고 이것이 곧 localization에 영향을 주게 되는걸 알 수 있어요. 그래서 CNN의 성능이 Object detection 모델의 mAP의 성능에도 영향을 끼치고 있다는걸 알 수 있을 겁니다.










<3. Result>


R-CNN 모델의 mAP가 딥러닝 기반 CNN 모델을 적용하지 않은 이전 세대의 object detection 모델 보다 월등히 성능이 뛰어난걸 보실 수 있으실거에요. 그 중에서도 bounding box regression 기법을 추가하게 되면 더욱 성능이 좋아진다는 것을 볼 수 있어요.

 



여기까지 RCNN에 대해서 알아보았어요. 다음글에서는 RCNN의 단점을 극복한 SPP-Net에 대해서 알아보도록 할게요!





[논문 레퍼런스]

Rich feature hierarchies for accurate object detection and semantic segmentation Tech report/ Ross. G. et al/ 2014/ https://arxiv.org/abs/1311.2524



[사진 래퍼런스]

사진1

https://woosikyang.github.io/fast-rcnn.html

사진2

https://papers.nips.cc/paper/4824-imagenet-classification-with-deep-convolutional-neural-networks.pdf

사진3

https://www.researchgate.net/figure/Illustration-on-our-annotations-of-semantic-object-parts-for-the-PASCAL-VOC-2010-dataset_fig3_284579150

사진4

https://www.researchgate.net/figure/R-CNN-Training-Workflow_fig3_329586511

사진5

https://lilianweng.github.io/lil-log/2017/12/31/object-recognition-for-dummies-part-3.html#bounding-box-regression

사진6

https://blog.lunit.io/2017/06/01/r-cnns-tutorial/


'Deep Learning for Computer Vision > Object Detection (OD)' 카테고리의 다른 글

7. Fast RCNN  (2) 2020.02.06
6. SPP Net  (2) 2020.02.05
4. DPM (Deformable Part Model)  (0) 2020.02.04
3. Object Detection과 CNN의 관계  (2) 2020.02.04
2-3. Object Detection 모델 평가지표 (FPS)  (6) 2020.02.04

+ Recent posts