Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Network

 자습용으로 공부하기 정리한 자료 입니다. 출처는 맨 밑에 있습니다.
 

NIPS 2015년 유명한 논문

1. computer vision task


   semantic segmentation, classification + Localization, Object detection, Segmentation

 

2. RCNN history
   rcnn -> fast r-cnn -> faster r-cnn -> master
   
3. Faster Rcc의 속도


   Object Detection 알고리즘의 속도 SSD, Faster Rcnn, R-FCN
   Faster 는 정확도는 좋으나 속도가 약간 느림
   SSD, F-FCN은 일반적으로 속도가 빠르다 
   대신 FasterR-CNN은 Region Proposal 갯수를 조절하면 속도가 약간 향상이 가능하다.

 

4. R-CNN(Regions with CNN)
  1) 이미지에서 일단 ROI (Regions if interest)를 뽑는다.
     *어떻게 뽑는지는 나중에 설명(2천번을 돌림)
     CNN은 Input을 맞춰줘야 하기 때문에 어떤 사이즈의
     ROI(Regions of Interest)가 들어와도 같은 사이즈로 맞춰줌(Warping)
     여기서는 CNN의 마지막 레이어의 피처를 가지고 SVM으로 분류
     ROI를 미세조정하기 위한 bbox 리그레션을 하는 2가지 네트워크로 분류

  2) Region Proposals- Selective Search (원래는 segmatation)


     처음에는 조각조각 잘라냈다가-> 조금씩 머지를 함
     그 바운더리를 따라서 박스를 뽑아내면 ROI가 나옴
     처음은 그래프 베이스로 근접한 Pixel 기준으로 위치관계나 Grouping을 함
     그다음 각종 기준(RGB, HSV, 합쳐졌을때 홀이 생기냐 등등)
     요인을 가지고 머지를 해나감

  3) RCNN의 트레이닝 방법


     AlexNet을 기준으로 이미지넷 데이터를 가지고  pretraining 시킴
     마지막 1000개 짤라내고, 디텍션을 위한 20개로 바꿈(fine tuning) 
     * POSCAL VOC데이터를많이 씀
     마지막 피처를 짤라내서 Disk에 저장하고
     그걸 가지고 SVM으로 Classfication 학습 시킨다.
     그걸 가지고 BBox Regrssor를 훈련시킴
     문제 :
      – 문제가 프리트레인된 CNN까지 훈련이 안됨
      – 느리다
     * ROI가 2천개 정도 뽑는데, 웬만하면 되어 있다는것을 가정

     
  4) Bounding box Regression


     P는 처음에 뽑은 즉 Selective Search에 나온 값임(x, y, width, height)
     G는 Ground Truth 정답의 X,Y,W,H
     G^x =  Pw d(P) + Px  (1)
     (1)식의 예제를 보면 
     결국 P를 가지고 적당히 변환을 해서 G^을 찾도록 하는 D를 찾아보자
      * 로그펑션, 지수, e(2.7xxx)      
     t가 결국 G^을 G로 봤을때 dx의 값을 t로 설정하고 앞에서 나온 식을
     dx를 왼쪽에 넣고 전개하면 됨
     t는 Ground Truth 와 우리가 처음에 뽑은 P의 차이를 구해주는 dx를 t라고 함
     결국 t와 dx의 차이를 최소화 하게 하는 것이다.
     t와 P(selective서치)나온 값과 weight의 를 곱해서 나온값을 차이를 L2 Loss 를 구하고
     레귤라이제이션이 중요하다고 논문이 이야기함. 람다를 1000이상한다.

* 참고자료 백터 정규화, 로그와 지수

     
     단점 :
     결국 RCNN은 너무 느리다.
     SVM와 bbox를 훈련한 결과가 CNN에 영향을 끼치지 않는다.
     훈련할때 시간도 오래 걸린다.

5. Fast R-CNN

    *중간에 SPP가 있음(레지듀얼을 만든사람)
     결국 End-to-End학습, Single 스테이지 학습
     RCNN과 SPP-NET의 잘못된것을 거의 해결
     
  1) Fast Rcnn 방법


     처음은 같다. Selective search로 ROI를 뽑아내는것은 동일함
     RCNN은 일단 크롭한다음 와핑해서 CNN을 태우는데,
     FAST RCNN은 이미지를 일단 CNN에 태우고,
     Seletive Search에 나온 bbox를 CNN의 마지막에서 찾아내서
     프로젝션을 한다.
     매 바운딩 박스마다 ROI풀링을 하고 FC를 하고 두개가 나가는데
     하나는 Classfication 하나는 bbox regression임
     *핵심은 ROI풀링
     
  2) ROI풀링은 무엇인가요
     VGG 3*3*513의 마지막 feature Map에서 ROI맥스 풀링을 하는데
     FC로 가기전에 Input 갯수를 맞춰준다 VGG를 예를 들면 7*7임
     21*14를 3×2로 3,2로 맥스풀링하면 7*7이 나옴
     35*42 5*6 으로 5,6 맥스풀링하면 7*7 임
     결국 FCN에 넣기 전에 사이즈를 맞춰줌


     
  3) 트레이닝방법


     a) input에서 bbox를 넣는다.
     b) 컨볼루션에서 그것을 찾고
     C) 각각의 1000개 2000개 에 대해서 Fixed length feature vector를 
        ROI 풀링 레이어를 통해 뽑고
     d) classficaton도 하고 배경까지 포함해서 K+1 labels
     e) bbox regression도 한다
     f) 로스평선을 두개를 합쳐서 훈련한다!!!!
     * L(p,u,tu,v) = L cls(p,u) + 람다[u>1]L loc(tu,v)
       p는 prediction class
       u는 labels class
       L cls는 크로스엔트로피로 학습하고
       tu는 그라운드 트루쓰 정답
       v는 내가 뽑아낸것이고
       Smooth L1로스를 만들어  냈고
       u는 클레스 번호가 1보다 크면 나오고 1보다 작으면 0이 된다
       (0이 백그라운드)
       백그라운드는 훈련안함
  4) 성능
     RCNN은 84시간, RCNN은 8.75시간     
     FastRCNN 2.3초 selective가 2초가 걸림
     2초 빼면 0.32밖에 안걸림     
     selective search가 테스트 타임때 병목을 일으킨다.
     2.3초가 패스트인가?

  6. Faser R-CNN(RPN + Fasr R-CNN)

     그럼 selective search가 느리고, CPU에서 도는것도 느리니깐
     Regin Proposal network(RPN)을 Convoluional layer에 넣고
     GPU를 사용해보자
     
     리전을 뽑아내는 네트워크를 만들어보자 그중 베이스가 되는 
     conv layer는 공유하자. 
     네트워크가 하나인것 처럼 하자
    
  1) 핵심은 RPNRegion Proposal Network)이다.


     컨볼루션 피쳐맵에서 여기서 CONV FILTER를 더 쓴다. 
     3 * 3필터를 256개 이미지 사이즈가 7*7 256 피처맵인데
     이것을 1 * 1 컨볼루션을 해서 classficatin 하나, bbox reg하나를 뽑는다.
     가벼워야 하기 때문에 classfication은 물체가 있는지 없는지만 봄

* 1 by 1 Conv?


    
     박스를 리그레션 하기 위해서 역시 박스의 초기값을 설정해줘야 한다.
    
     그래서 앵커라는 개념이 나옴(k개의 acchar box가 Predefined됨) 총 9개
     가로 세로 3개, 비율 3개, 그래서 총 9개
     
     3*3필터가 지나갈때 바운딩 박스의 형태를 미리 지정해 놓는다(앵커)
     가로세로 비율 및 가로세로 길이(논문에서는 9개를 사용함)
     각각의 앵커박스에 대해서 클래시피케이션을 하는데 2개로(맞냐 ,아니냐)
     K개의 바운딩박스 리그레션할려면 4K개의 좌표가 필요함
    


     RPN을 할때 1*1의 컨볼루션 레이가의 필터가 몇개가 필요하느냐?
     ZF 는 마지막 레이어의 depth가 256
     3*3*256
     classification -> 1*1 (앵커박스 9개 o, x 2개 18개)
     bbox reg : 1*1 (앵커박스 9개 4개의 좌표 36개)
    
    
  2) 포지티브, 네가티브 샘플이 나옴


     하이스트 IOU를 당연하 positive
      * iou intersection over union
      두물체의 겹친면적을 합친면적으로 나눈것
     0.3미만은 네가티브, 0.7이상은 파지티브 사이는 버린다.
     50% 50%으로 샘플링 하고


    
  3) RPN 로스 평선


    pi*는 (물체가 있으면 1, 없으면 0) 
    논문에는 람다랑 레귤라이제이션을 별로 중요하지 않다.
    
  4) 학습방법


    0. 일단 RPN을 만든고
    1. 이미지 넷으로 프리트레인된 RPN을 학습 M0 -> M1로 바뀜
    2. 여기서 학습된 M1으로 리전 프로포셜을 p1으로 뽑(ROI)
    3. 여기서 학습된 P1을 가지고 M0랑 Train_fast_rcnn을 함 -> M2
    4. 여기서 M2를 기반으로 M2는 RPN을 학습시키는데, CONV는 
       건드리지 않음 M3
    5. M3에서 새로운 리전 프로포셜을 뽑고 P2
    6. M3와 P2를 가지고 다시 M4임
    7. M4가 최종임
     * 여러번 하는데 여러번 해도 별로 안좋아짐이 논문에 있음
  5) Faster Rcnn
    Rcnn 1x 66   Fast-Rcnn 25x 66.9   Faster Rcnn 250X 69.9
    논문실험 앵커를 바꿨는데 어떻게 바뀌나 봤는데 3개 3개가 좋다
    람다는 별로 의미 없다.
    
  6) 마지막


    ROI풀링을 하거나, ROI 7*7이야기를 했는데, 만약 7 이 아닌
    ROI가 뽑혀 나오면 오차가 나올수밖에 없음
    그래서 2017년 MASK RCNN이 나옴 -> interpolation (보간)

#1 : https://arxiv.org/pdf/1506.01497.pdf
#2 : https://tensorflow.blog/tag/faster-r-cnn/
#3 : http://blog.naver.com/PostView.nhn?blogId=laonple&logNo=220692793375 (1 by 1)
#4 : https://www.youtube.com/watch?v=rWbz33rMfMQ (1 by 1)

 

Leave a Reply

Your email address will not be published. Required fields are marked *