티스토리 뷰

MLDL/Theory

FasterRCNN

Lazyer 2018. 6. 18. 20:49

Faster RCNN

@lazyerIJ

1. History of R-CNN Series

 

Rich feature hierarchies for accurate object detection and semantic segmentation(2013)

 

 

Fast R-CNN(2015)

 

 

Faster R-CNN : Towards Real-Time Object Detection with Region Proposal Networds(2015)

 

 

Mask R-CNN(2017)

 


2. Compare Models

 

 

speed : Faster RCNN < R_FCN

 

 

ACC : Faster RCNN > R_FCN

 


3. R-CNN Architecture

 

 

 

bounding img almost 2k(Regions of Interest.ROI from a proposal method)

 

 

preprocessing(resize) to make conv input (rs.static size of convolution)

 

 

SVM with features of cnn output

 

 

regression to ROI boxes

 

 

이미지에서 2천개 가량의 ROI를 지정하고 각각 Conv연산을 수행 하는데 ROI를 선별한다. 이 때 Conv Input Size를 일정하게 맞춰주기 위하여 resize가 필요하고 여기서 Entropy 손실이 발생 한다.

 


4. Region Proposals - Selective Search

 

 

merging regions by correlation of pixels

 

 

Selective Search 는 관계있는 픽셀들을 merge하는 방법으로 CPU에서 실행된다는 것이 단점이며, 대부분의 실행 시간을 소모하게되어 bottleneck이 발생 한다.

 


5. R-CNN Training

 

Pre-train a ConNet(AlexNet) for ImageNet classification dataset

 

 

Fine-tune for object detection(softmax + log loss)

 

 

Cache feature vectors to disk

 

 

Train post hoc linear SVMs(hinge loss)

 

 

Train post hoc linear bounding-box regressors(squared loss)

 

 

Disadvantages : Convolution layers doesn't training!! training only SVM and bounding-box

 

 

Pre-train된 Conv-Net을 사용하며 SVM을 통하여 분류 한다. Conv-net에 대한 training은 일어나지 않으며 Bounding box를 선별하는 학습과 Conv-Net을 통과한 Features를 분류하는 학습이 개별적으로 진행 되어 속도가 느리다.

 


6. Bounding-Box regression

Pi=(Pxi,Pyi,Pwi,Phi)P^i = (P^i_x,P^i_y,P^i_w,P^i_h)Pi=(Pxi,Pyi,Pwi,Phi) : The pixel coordinates of the center of proposal PiP^iPi's bounded boxes together with PiP^iPi's width and height in pixels.
 
 
G=(Gx,Gy,Gw,Gh)G = (G_x, G_y, G_w, G_h)G=(Gx,Gy,Gw,Gh) : the ground-truth bounding box
 
 

 


6. Problems of R-CNN

 

Slow at time : neet to run full forware path of CNN for each region proposal

 

  • 13s/GPU(K40)
  • 53s/CPU

 

SVM and regressors are post-hoc : CNN features not updated in response to SVMs and regressors

 

 

Complex multistage training pipeline (84hours using K40)

 


7. Fast R-CNN

 

POINT : ROI Pooling
  • orgin : img -> roi -> cnn -> fc
  • change: img -> cnn -> roi -> roi pooling -> fc
  • Using projection of input img after CNN
     
     

     

  • set pooling size at roi in cnn output to fit fully-connected input size
  • 지역적 특성을 잡아내는 Convolution의 장점을 잘 활용하여 ROI영역이 아닌 Image 전체를 Conv-net에 통과시킨 후 Feature maps에 대하여 ROI를 선별한다.
    (이 때 ROI는 Conv-net 통과 이전 이미지에서 Selective-search에 의하여 선별된 것이며 위치적 특성을 기억하여 Featuremap에 적용.)
     
    Feature map을 원본 Image에 대한 Projection으로 생각하면되며, Image의 지역적이 보존되기때문에 가능한 로직이다.
    Feature map에 대하여 ROI를 수행할 때 Fully-connected Input size에 맞추기 위하여 ROI polling을 수행 한다. Conv연산이 2k에서 1번으로 줄어들어 시간이 많이 감소하였다.

8. Training & Testing

Output : K+1 Class labels(add 'backgroud image')
 
 

 

u : class number. u==0 if roi = 'background'
2개의 모델이 훈련되며 p,u에 의한 classify에 대한 훈련과 t,v에 의한 bounding-box regression에 대한 훈련 이다.
predicted bounding-box(v)에 대하여 true-class에 대한 label(u)이 1보다 클 때에만 학습이 수행 된다. u가 0일 때에는 background(no notion)을 의미한다. ROI 영역이 어느 label에도 속하지 않는다면 training에 penalty를 주는 것이다.

9. R-CNN vs SPP-net vs Fast R-CNN

 

SPP-net과 R-CNN의 차이점은 ROI영역에 대하여 Fully-Connected의 Input Size로 변환할 때의 방법 이다.
[SPP-net]
Featuremap을 1x1, 2x2, 4x4등의 고정 크기로 분할하여 각각 pooling작업을 수행한다.
1x1 -> 1 output, 2x2 -> 4 output, 4x4 -> 16 output 과 같이 고정 크기의 output이 생기기때문에 FC의 Input으로 활용 가능하다.
[R-CNN]
Feautremap의 크기에 따라 pooling size를 유동적으로 변경해준다(ROI Pooling Layer). Featurema 13*13, stride 7*7 의 경우 Output이 정수배로 떨어지지 않는 문제점이 발생하지만 pixel단위의 문제는 성능에 큰 영향이 없다고 한다. (이를 해결한 RoiAlign layer가 추후 등장)

10. Problems of Fast R-CNNN

Out-of network region proposals are the test-time computational bottleneck
 
  • bottleneck : rs > using CPU
enough fast?!
Selective Search를 수행한 후, Convolution Featuremap에 대하여 ROI를 수행하기 때문에 여전이 end-to-end학습이 아니며, Selective Search에 대한 bottlenect 현상이 해결되지 못하였다.

11. Faster R-CNN(RPN + Fast R-CNN)

selective-search : by CPU
Region Proposal Network : by GPU
share CNN network in RPN & classifier

 

ROI를 선별하는 작업이었던 Selective-Search가 사라지고 수행되는 위치도 Conv-Net이후 로 바뀐다. Region Proposal Network가 등장함으로써 모든 작업이 end-to-end로 GPU에서 일어난다

12. How it work!!

Selective Search 알고리즘이 제외되고 Region Proposal Network(RPN)이라는 ROI를 선별하는 네트워크가 생겨난다. 간단하게 흐름을 살펴보면 다음과 같다.
 
 

 

 
Anchor

 

ROI로 선택될 영역이다. 가로, 새로 종횡비가 미리 정해진 Anchor size 9개를 정의한다. 그 다음 3x3 Conv window를 통해 FeatureMap을 탐색하고, 각 위치마다 미리 정해진 크기의 Anchor를 정의한다. 이 과정에서 Conv-Net Output은 512dim에서 256dim으로 감소한다.

 

600x800 크기의 Feature Map이 있다고 가정하자. Stride를 16으로 설정하였을 때, 3951의 탐색이 필요하다. 각 위치마다 9개의 Anchor를 가지므로 총 3951*9개의 Anchor가 생성되며 이들은 Object인지 아닌지를 구별하는 binary classification을 위한 2개의 label을 가진다. 또한 각각의 coordinate를 표현하는 4개의 값을 가진다.
이후 1x1 Conv를 통과하여 classigication, gox regression을 수행하는데 각 위치마다 생성된 Anchor을 모두 사용하지 않고 어떠한 기준을 통하여 선별한 후 RPN학습에 이용한다. Label이 존재하는 경우를 forground, 존재하지 않는 경우를 background라고 하며 IOU라고 하는 면적 크기 비율을 이용하여 결정한다. ground-truth box는 실제로 이미지에 박스처리된 정답 데이터이다.

 

IOU값에 의해 Anchor을 결정한다.

 

면적이 0.7 이상 겹칠 때, 또는 0.3 이하로 겹칠 때에만 Training에 활용하며, 그 이외의 Anchor들은 학습에 사용하지 않는다.
Object 여부 이외에 Bounding-box regression에 활용되는 4개의 좌표값은 Anchor의 꼭지점 4군데 값이 아니라 다른 값을 가집니다. t는 Anchor로부터 생성되며 t*는 ground-truth로부터 생성됩니다.

 

 
 
 
t_x,t_y : 박스의 center coordinates
t_w, t_h : 박스의 width, height
x,y,w,h : predicted box
x_a, y_a, w_a, h_a : anchor box
x*, y*, w*, h* : ground-truth box
 
 
Anchor로 부터 추출되는 t와 ground-truth로부터 추출되는 t*를 통하여 학습이 진행되는데, t가 생성되는 식을 보면 x,y,w,h라는 predictied box라는 것이 있다.
RPN의 목적이 말그대로 Region Proposal을 선별하는 Network라는 것을 생각해 볼 때 위에서 Anchor들을 IoU비율로 선별한 이후에 Learning을 통한 Predict과정이 필요함을 알 수 있는데, Anchor로부터 예측된 box들을 predicted-box라 한다. 아래 그림을 참고하면 이해하기 쉽다.

 

t는 predicted-box에서 anchor에 대한 값을 빼고, t*는 ground-truth box에서 anchor에 대한 값을 빼는것을 보면, predicted-box를 ground-truth에 근사시키기 위한 학습임을 알 수 있다.
 
ROI Pooling
이제 위에서 생성된 predicted_box는 모두 다른 크기의 Size를 가지기 때문에 Fully-connected layer의 입력으로 바꾸기 위하여 모두 같은 크기로 변환하여야한다. Fast RCNN과는 다른방법으로 Pooling을 수행하며 SPP Net과 조금 비슷하다. 아래 이미지를 보면 쉽게 이해가 가능하다.

 

Sampling
anchor들에 대하여 training시에 positive(forground), negative(background) 50:50비율로 샘플링 해준다. negative sample이 압도적으로 많을 것이기 때문에, positive sample의 비율을 1/2로 맞춰주기 어렵다고하는데, 이럴 때에는 sample들에 대하여 zero-padding을 적용하거나 IoU값이 가장 높은 값을 가진 sample을 positive sample로 사용한다고 한다.
 
Loss Function

 

i : Index of anchor
p_i : forground / background 예측 값(background -> 0)
p*_i : forground / background ground-truth label
t_i : bounding box vector
t*_i : ground-truth box vector
L_cls : Object인지 아닌지에 대한 log loss
L_reg  : smoothL1smooth_L1smoothL1 loss(background != 0 일 때에만 수행)
N_cls : normalization. mini-batch 크기와 동일 (256)
N_reg : normalization. anchor locations수와 동일 (~2400)
lamba : lambda value(실험 결과에서 lambda값은 크게 중요하지 않다고 결론)

 

binary classification과 regression에 대한 학습이 동시에 진행됨을 알 수 있다.

13. Result

R-CNN, Fast R-CNN, Faster R-CNN의 속도차이는 다음과 같다.

 

 

RPN을 적용하여 end-to-end모델을 생성함으로써 실행 속도, fps를 보았을 때 매우 빨라졌음을 확인할 수 있다. 기타 다른 실험에 대한 결과들은 논문에서 확인가능하다.

 

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
글 보관함