본문 바로가기

딥러닝/object detection

[2주차] Object Detection - rcnn, sppnet

    RCNN

1. 후보영역 추출
2. 고정된 사이즈로 wraping 
3. 모델에 넣고, 

selective search 
: 이미지에 색깔, 질감 (texture), shape등을 활용해서,
이미지를 무수히 많은 작은 영역으로 나눈다음, 이 영역을 점차 통합해 나가는 과정을 거친다. 

통합된 최종결과를 후보영역으로 사용한다. 

selective search는 이미지 한장에 대해서 2000개의 roi를 추출한다. 
추출된 후보영역을 동일한 사이즈로 warping  ( cnn의 fc는 입력사이즈가 고정되어있다)

5-1) 
cnn을 통해 나온 feature를 svm에 넣어 분류를 진행한다. 

input : 2000x4096 features

output : class(C+1), confidence scores

 

5-2) 

selective search를 통해 나온 bouding box 가 매우 러프 하므로, 

ss는 객체가 존재할만한 위치를 를 정확하게 예측해주지 않는다. 대충 예측함,

따라서 이 위치를 미세조정해주는 regresseer을 학습해야한다. 

이 regressser 은

bb의 중심점을 gt의 중심점으로 옮기고,

bb의 w,h를 gt의 w,h로 옮긴다. 

 

 

2.3 Training 

# AlexNext (feature extraction) 

- Domain Specific finetuning 

- finenuting 진행시 dataset 구성을 

  iou > 0.5 positive samples

  iou < 0.5 negative sampes

  한 배치는 positive sampe 32, negative samples 96 로 구성된다. 

 

# Linear SVM (predict class) 

  •   dataset 구성
    gt  : positive samples,
    IoU < 0.3 : negative samples
    한 배치에 positive 32, negative samples 96
  • Hard negative mining 
    hard negative : false positive 
    모델이 배경으로 식별하기 어려운 샘플들을 강제로 다음 배치의 negative sampel로 mining 하는 방법
    수행하는 이유? : 2000 의 제안된 roi  들 중 객체를 포함하는 region은 매우 적고, 대부분 배경이다. 
    그래서 negative region 을 quality 있게 포함하기 위해 해당 작업 수행

# BB regressor 

  • dataset 구성 - iou > 0.6 positive samples (negative samples 는 bb가 없으므로)

2.4 단점 (r-cnn) 

1. 2000개의 region 을 각 cnn에 통과시킴 (cnn을 2000번이나! 매우느림) 

2. 객체크기를 고정된 사이즈로 warping 하므로 객체정보가 손실된다. 

3. CNN, SVM,BB regressor을 따로 학습하므로 -> e2e가아님 구조적인 측면에서 한계점이 존재. 

 


    SPP-NET

효과 : 컨볼루션이 1번이다!! / 강제 warping을 spartial pyramid pooling을 통해 해결 !

 

- 입력 이미지에 컨볼루션을 수행하여 나온 feature map에서 2000개의 region 을 뽑아 낸다. -- 추후 정리

- Spatial Pyramid Pooling Layer  (warping 대신 수행하는 부분 ) 설명

 

 

# Spatial Pyramid Pooling 

 

 

 

 

  비닝한다.

 

 

타겟 사이즈 피라미드 사이즈가 (2x2)면 입력 이미지를 사이즈에 맞게 나누고, 

1개의 bin에서 1개의 특징을 추출한다 (max pooling, average pool을 하던 ) 

 :  효과 input사이즈 (roi)에 상관없이 고정된 개수의 feature를 추출 할 수 있다.  

   

   

  

 

 

 

 

 

# 256은 filter 수

 

 

 


    Fast R-CNN

" RoI Pooling "  :  고정된 사이즈의 features vector 

VGG16을 사용

 

이미지에서 VGG16 네트워크를 사용해서 feature map을 얻음 

 

feature map 에서 roi를 뽑아내야한다.

feature map에 selective search(=원본이미지의 색, 텍스쳐를 통한 그룹핑) 를 할 수 없음! 

 

따라서 selective search는 원본이미지에서 수행해서 roi 영역을 뽑아내고(=bb) 대응되는 feature map에서 feature을 가져온다. 

 

근데 문제가 있음, 

cnn통과했을때, feature map이 convolution 때문에 줄어드는 경우도 있음, 이때는 roi사이즈를 조절 해줘야함

 

Roi Pooling 을 통해 일정한 크기의 feature 추출 

- 고정된 vector을 얻기 위한 과정 

target size 가 7x7 1개이다.