코린이의 공부일기

[Boost camp] 2 Stage Detectors 본문

BOOST CAMP_정리

[Boost camp] 2 Stage Detectors

SOJUNG 2021. 9. 28. 00:29

2 Stage Detectors

 

 

 

1. R-CNN

 

-입력 이미지로부터 후보영역들을 선정 (Sliding window , Selective Search)

-뽑힌 이미지들을 고정된 사이즈로 변경하여(Semantic vector) Classification하는 방식

 

 

 

그렇다면 Sliding Window가 무엇일까 ?

 

왼쪽의 Window가 이미지를 sliding하여 뽑아낸다 -> 무수히 많은 후보영역이 나온다.(대부분은 배경)

-> 그래서 Sliding window는 잘 사용하지 않음

 

*그래서 Selective Search을 많이 사용한다

 

 

그렇다면 Selective Search란 무엇일까?

 

 

 

색감, 질감, 모양과 같은 이미지의 특징들을 갖고 후보영역들을 나눠 통합하는 방식으로 후보영역을 셀렉한다.

 

 

 

 

Pipeline  1 - 입력 이미지 받기

 

-1. Selective Search을 통해 약 2000개의 ROI(Region of interest)을 추출

-2. ROI의 크기를 조절해 모두 동일한 사이즈로(Wrapping) 변경(CNN의 마지막인 FC layer의 입력 사이즈가 고정이므로 이 과정을 수행해야한다)

 

 

 

 

Pipeline 2 - 분류 진행

 

 

SVM

ROI을 통해나온 2000개의 이미지들을 Class(C+1)개와 Confidence score을 도출

 

Bounding Box Regression

Selective Search을 통해서 러프하게 나온 후보영역의 위치를 미세조정을하여 정갈하게 맞추는 작업

(Bounding box을 Ground truth box에 맞추는 작업)

Bounding box의 중심점을 Ground truth box중심점에 맞추어주는 δ(델타)

Width, height을 Ground truth box의 Width와 height δ(델타)

을 훈련시켜주는 것

 

Summary

 

 

 

 

-R-CNN의 한계점

 

1. 2000개의 Region을 각각 CNN통과 -> 연산량이 너무 많음, 시간이 오래걸림

2. 강제 Warping(사이즈의 크기차이가 많이 나는 이미지들을 강제로 고정사이즈로 맞춤), 성능 하락 가능성

3. CNN, SVM classifier, bounding box regressor 을 모두 따로 학습함

4, End to End 라고 볼 수 없다.

 

 

그래서 이 후 연구들은 R-CNN의 한계점을 보안하려는 방향으로 이루어졌다.

 

 

 

한계점 1,2를 보안한 Spatial Pyramid Pooling

 

R-CNN에서는 input image을 바로 Warpping 했다면, SPP-Net은 

먼저 Conv-layer을 지나고 ROI을 뽑아내고 spatial pyramid pooling을 통해 사이즈를 맞추는 방식이다.

 

 

 

 

 

Spatial Pyramid Pooling_Overall Architecture

 

 

 

 

 

 

그렇다면 Spatial pyramid pooling은 무엇일까?

 

 

ROI을 통해 얻은 여러 사이즈의 이미지들을 뽑아내고 Target Feautre map의 사이즈를 정해준다. 

Ex(위 그림 왼쪽부터 4X4 ,2X2, 1X1 feature map)

 

 

조금 더 자세히 설명하자면,

 

위 그림처럼 Input image을 binning(비닝) 작업을 통해서 2X2 pyramid size을 맞추어 줄 수 있다.

-> R-CNN의 1,2 번 단점을 해결

 

 

 

 

 

Fast R-CNN

 

-Overall Architecture

 

-> 이 전과 다르게 Spatial pyramid pooling이 아닌 ROI pooling을 시행한다.

2000개의 image로 부터 ROI을 뽑아내고 뽑힌 ROI을 Conv을 통해 나온 Feature map에 Projection을 진행한다. 

 

 

 

그렇다면 ROI pooling은 무엇일까?

 

먼저 ROI Projection을 알아보자면,

 

왼쪽에서 오른쪽으로 Feature map이 1/10만큼 줄었다면, Selective search을 통해 나온  ROI 사이즈도 1/10으로 축소해 Projection을 진행한다.

 

 

그렇다면 ROI pooling과 Spatial pyramid pooling의 차이점은 무엇일까?

 

ROI pooling은 Spatial pyramid pooling과 방식은 완전히 똑같지만, spatial pyramid pooling은 여러가지 크기로 추출한다면 ROI pooling은 사이즈 7X7만 이용한다.

 

ROI pooling와 Fully connected layer 이후, Softmax Classifier와 Bounding box regressor 을 시행한다

=> 클래스 개수 C+1개(클래스 + 배경)

 

 

-Hierarchical sampling

R-CNN의 경우 이미지에 존재하는 2000개의 이미지 ROI을 전부 저장해 사용한다.

이전 R-CNN에서는 한 배치에 서로 다른 이미지의 ROI가 포함된다

BUT 

Fast-RCNN 같은 경우에는 한 배치에 한 이미지의 ROI만을 포함해 연산과 메모리를 공유할 수 있는 장점이 있다

 

-> R-CNN의 단점 3번 해결

 

그러나 완벽한 End-toEnd 구조라고 볼 수가 없다.

 

 

그래서 나온 모델이 Faster R-CNN이다

 

 

 

 

Faster R-CNN

 

 

-Fast R-CNN에서는 Selective Search을 사용했다면 Faster R-CNN은 RPN(neural network)을 도입했다.

 

 

 그렇다면 Faster-RCNN은 후보들을 뽑아낼까?

 

각 셀마다 scale을 다르게 둘 뿐 아니라 세로 또는 가로 마다 비율을 다르게 두고 N개의 Anchor box을 둔다.

->객체 사이즈에 대응하도록 Anchor box 크기를 가변적으로 둘 수 있다.

 

 

그렇기 때문에 우리는 Anchor box에 객체가 들어있는지 그리고 객체에 맞게 Anchor box크기를 미세조정할 필요가 있다. -> RPN network

 

 

 

 

Region Proposal Network(RPN)

 

 

 

RPN은 anchor box가 객체를 포함하는지 안하는지 확인 +anchor box 비율조정 (9개로 고정)

 

 

이 두 가지 과정을 조금 더 자세하게 보자면, (중요!)

 

 

 

첫 번째 CNN은 object인지 아닌지 (2가지) 9개의 anchor box

-> 18개가 나오는 것 !(객체인지 / 아닌지 Score을 예측)

두 번째 CNN은 각 anchor box별로 중심점의 좌표(x,y),W,H와 9개의 anchor box

-> 36개가 나오는 것

 

 

 

Pipeline 총 정리

 

 

input data는 backbone을 통해 feature map이 나오며 feature map에서 각 sell마다 9개의 anchor box을 select한다.

-> 64X64X9(anchor box)X4(x,y,w,h) 

무수히 많이 나온 anchor box 중 RPN을 통해 불필요한 것 을 제외시킨다

 Classification prediction을 통해 Score값을 도출(Score값이 크면 클수록 목포객체일 확률이 높음)

그 다음 Top score n개를 뽑아내 미세조정(Box prediction)을 진행한다.

-> ROI resion을 n개를 도출

 

 

추가적으로 NMS는 무엇일까?

 

5개의 Box을 지정해 Class score을 지정하고 제일 높은 score인 bb1을 기준으로 IoU score을 도출한다.

이전에 정한 Threshold는 0.7이기 때문에 bb1과 bb2는 거의 같다고 두기 때문에 bb2의 class score는 결국 0이 된다,

NMS 알고리즘은 유사한 box을 제거하는 알고리즘이라고 할 수 있다.

 

 

이제 RPN network의 Training하는 방식에 대해 알아보자

 

RPN 단계에서 classification과 regressor학습을 위해 anchor box을 positive/ negative samples로 구분

 

Dataset의 구성

* IoU>0.7 or highest ioU with GT:positive samples

* IoU<0.3 :negative samples(배경으로 정의)

Otherwise:학습데이터로 사용하지 않는다.

 

Loss function

Cross entropy(classification loss) + MSE loss (regression loss)

 

 

regression loss에서 Pi*은 object의 유무를 나타내는 지표로 객체가 포함되어있을 땐 1 아닐 땐 0으로 positive anchor box에 한해서 계산을 진행한다.

 

 

 

 

Faster R-CNN Training 하는 방식은 어떨까?

 

*Region proposal 이후 Fast RCNN 학습을 위해 positive/negative samples 로 구분

*Dataset의 구성

*IoU>0.5:positive samples -> 32개

*IoU<0.5:negative samples -> 96개

*128개의 samples 로 mini-batch 구성

 

 

 

 

Summary

 

*anchor box부분은 정말 중요! 꼭 이해하기

 

 

 

 

 

 

Comments