[논문 리뷰] R-CNN 시리즈
https://arxiv.org/pdf/1311.2524.pdf : Rich feature hierarchies for accurate object detection and semantic segmentation Tech report (v5)
https://arxiv.org/pdf/1504.08083.pdf : Fast R-CNN
https://arxiv.org/pdf/1506.01497.pdf : Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks
위 논문들을 참고하여 작성하였다.
Input 이미지 속 사물, 사람, 동물 등을 detect 하는 Detection 분야에 한 획을 그은 R-CNN 시리즈에 대해 리뷰하고자 한다.
R-CNN
1. Input 이미지에 Selective Search 알고리즘을 적용하여 약 2,000개의 region proposal을 생성해준다.
2. 추출한 region proposal 들을 2-3단계 사이에 있는 warped region 처럼 region을 resize(warp) 해준다.
3. 3 번째 단계처럼 wawrped region을 CNN에 통과하여 각 proposal 마다 고정된 길이의 feature vecotr 들을 추출한다.
4. 각 region마다 SVM을 적용하여 classification을 수행해준다.
Q. Selective search?
이미지 초기 segment를 정하여 수많은 region 영역을 생성한다.
greedy 알고리즘을 이용하여 각 region을 기준으로 주변의 유사한 영역을 결합시켜 준다.
결합 되어 커진 region을 최종 proposal로 제안한다.
따라서 영역을 적절히 통합하여 최종적으로 개수가 줄어든 box 후보들을 result 값으로 준다.
R-CNN의 단점
R-CNN의 치명적인 단점은 RoI (Region of Interest) 마다 CNN 연산을 하기때문에 속도가 매우 저하된다. 또한 CNN, SVM, Bounding Box Regression 총 3가지 모델이 여러 단계로 학습된다.
이를 RoI pooling으로 해결하고자 한 논문이 Faster R-CNN 논문이다.
Fast R-CNN
CNN feature 추출, classification, bouding box regression 까지 하나의 모델에서 학습시키자는 배경에서 나온 모델 Fast R-CNN에 대해 알아보자.
전체적인 흐름은 위 그림에서 알 수 있듯, 전체 Image를 CNN에 통과시켜 feature map을 추출시킨다. 그리고 Selective search를 통해 RoI를 찾는다. (R-CNN과 동일) 각각의 RoI pooling을 진행하여 고정된 크기의 feature vector를 얻는다. 하나는 soft max를 통과하여 RoI에 대해 분류, 하나는 bounding box regression을 통해 selective search로 찾은 box 위치를 조정한다.
RoI Pooling
CNN 연산 감소를 위해 사용한 RoI pooling을 하기 전에 입력 Image 크기에 상관없이 convolutional layer를 통과시키고 FC layer 통과 이전에 feature map들을 동일한 크기로 조정해주는 과정을 거친다.
Q. Spatial Pyramid Pooling (SPP) ?
input image : 이미지를 CNN에 통과시켜 feature map을 추출한다
feature maps of convs(arbitrary size) to pyramid : 미리 정해진 영역의 pyramid로 feature map을 나눠준다
Bin 내에서 (pyramid의 한칸을 bin이라한다) max pooling을 적용하여 각 bin마다 하나의 값을 추출하고, 최종적으로 피라미드 크기만큼 max 값을 추출하여 3개의 pyramid의 결과를 이어붙여 고정된 크기 vector를 만든다.
만들어진 vector가 FC layer input으로 들어간다
< 과정 >
1. Fast R-CNN에서 먼저 첫번째 그림과 같이 Input image를 CNN에 통과 시켜 feature map을 추출한다.
2. 이후 미리 Selective search를 통해 만들어 놨던 RoI를 feature map에 projection 시킨다.
3. 미리 설정한 HxW 크기로 만들어주기 위해 h x w 크기의 RoI는 h/H x w/W 크기의 sub-window로 분할됩니다.
4. RoI를 grid 크기로 split 시킨 뒤, max pooling을 적용시켜 각 grid마다 하나의 값을 추출한다.
Q. 여기서 다른 부위는 무시가 되는 것이 아닌가? 정보의 loss가 있지 않은가?...
이 과정을 통해 feature map에 투영했던 h x w 크기의 RoI는 H x W 크기의 고정된 feature vector로 변환된다.
따라서 크기가 다른 RoI 영역을 동일한 크기로 맞춰 FC layer Input으로 넣어 줄 수 있게 된다.
→ 영역의 크기가 동일하지 않음에도, 고정된 크기의 vector로 만드는 것이 RoI Pooling 역할이다.
→ 2000개의 regoin proposal 마다 수행했던 2000번의 CNN 연산이 1개로 감소
또한, Fast R-CNN은 RoI Pooling으로 인해 동일한 데이터가 각각 classification을 하는 softmax, localization을하는 bounding box regression 으로 들어가기 때문에 연산이 공유 되어 end-to-end가 가능하다.
Q. End-to-End?
End-to-end는 모델의 매개변수가 하나의 손실함수에 대해 동시에 훈련되는 경로가 가능한 network로서 backpropagation으로 인해 최적화가 가능하다는 의미이다.
Conclusion
따라서 Fast R-CNN은 R-CNN이 했던 2000번의 연산을 1개로 감소 시켰고, 변경된 feature vector가 기존의 region proposal을 projection 시킨 후 연산 한 것이기 때문에 해당 ouput 으로 classification과 bounding box regression 학습이 가능하다.
그러나, RoI를 생성하는 Selective search Algorithm이 CNN 외부에서 진행하기 때문에 속도가 매우 느리다. (CPU 진행)
이를 해결한 논문이 Faster R-CNN이다!
Faster R-CNN
Faster R-CNN은 region proposal generation & objection detection tasks들이 모두 같은 convolutional network에서 진행된다. 이전의 R-CNN과 Fast R-CNN의 경우 Region Proposal Network (RPN) 은 Selective search로 생성한 이후 object class 분류와 bounding box 찾기는 CNN based를 사용한다. 따라서 R-CNN과 Fast R-CNN에서는 RPN과 Detection network가 분리 되어 계산하기 때문에 치명적인 단점을 지녔다.
따라서 Faster R-CNN은 RPN을 CNN을 통해 해결하고자 하였다.
RPN Network
위 사진과 같이 Faster R-CNN 은 RPN network를 정의하였다.
1. Input image는 convolution layer를 통과하여 feature map을 추출한다.
2. Feature map 위 각 위치마다 sliding window를 사용한다.
3. 각 위치마다 region proposal 생성을 위해 k anchor boxes 들을 사용한다. (128,256,512 scale & 1:1, 1:2, 2:1 ratio)
4. k boxes에 대해 classification layer가 object인지 아닌지에 대해 2k scores를 output값으로 내놓는다.
(k개의 anchor box에 대해 object인지 아닌지 2개의 답)
5. Box regression layer는 k boxes에 대해 각 좌표 (w,h,x,y) 4k coordinates를 output 값으로 내놓는다.
(여기서 w는 width, h 는 height, x와 y는 center의 좌표로 각 k boxes마다 4개의 좌표)
6. W x H feature map, WHk anchors in total
RPN network는 어떤 location이 object을 가지는 지에 대한 pre-check 일뿐이다. 여기서 얻은 location과 bounding box들은 detection network를 pass한다.
Loss Function
- 2개의 classes 분류에 대한 loss (object의 존재 유&무에 대해)
- Bounding box(object가 있을때만 p_i*=1)에 대한 regression loss
Faster R-CNN
RPN을 제외하고 남은 part는 Fast R-CNN과 비슷하다. RoI Pooling이 먼저 등장하고 그리고 pooled area가 CNN을 통과한다. 그리고 class softmax와 bounding box 를 위한 2개의 FC layer를 통과하게 된다.
reference : https://better-tomorrow.tistory.com/entry/Selective-Search-%EA%B0%84%EB%8B%A8%ED%9E%88-%EC%A0%95%EB%A6%AC (selective search 그림) , https://production-media.paperswithcode.com/methods/1_YZMAa60ycjCzLn5T_HkXgQ.png (RoI pooling 그림),
https://deep-learning-study.tistory.com/456 (Fast R-CNN 논문 리뷰)