코딩뚠뚠

[머신러닝 공부] 딥러닝/Faster RCNN (object detection) 본문

공부/ML&DL

[머신러닝 공부] 딥러닝/Faster RCNN (object detection)

로디네로 2021. 4. 17. 23:31
반응형

 

지금까지 Object detection model 중

 

RCNN SPP-Net Fast-RCNN 에 대해 공부해보았다.

 

이번 포스팅에서는 Faster-RCNN에 대해 짚어보도록 한다.

 

 


 

 

1. 배경

 

RCNN, SPP-Net, Fast-RCNN은 모두 Realtime의 어려움을 극복하지 못했다.

 

상세히 살펴보면 Fast RCNN에서는 region proposal 방식인 selective search 중 대부분의 시간을 소모했다.

 

따라서 region proposal 방식을 selective search 방식이 아닌 다른 방식으로 바꿔줘야 할 필요성이 대두되었다.

 

 

 


 

 

2. 구조

Faster RCNN 과 Fast RCNN이 다른점은 region proposal의 방식(ROI를 구하는 과정)의 차이뿐이다.

 

region proposal 방식 : selective search -> region proposal network (RPN)

 

 

1) RPN (Region Proposal Network)

https://towardsdatascience.com/faster-rcnn-object-detection-f865e5ed7fc4

1. Selective Search 를 진행하지 않고 input 이미지를 그대로 CNN에 집어넣는다.

 

2. CNN의 output인 feature map을 input값으로 RPN을 돌린다. 

  1. 여기서 anchor의 사이즈를 크기별, 종횡비 별로 미리 저장해 둔다.
  2. RPN이 진행되면 filter가 feature map을 슬라이딩 할텐데, 해당 위치의 anchor에 대한 score(객체O,객체X)와 생성된 ROI좌표(x,y,높이,넓이)가 생성된다.
  3. 이 때 anchor의 IoU값(F<0.3<other<0.7<T)을 기준으로 positive와 negative를 구분하여 학습을 진행한다. (Training Data : RPN으로부터 얻은 anchors와 GT boxex)
  4. score의 값이 높은 순서대로 anchor들을 나열하여 bbox regression을 진행하고 ROI값을 구한다. 

이런식으로 ROI를 구한다.

 

3. Classification, Bounding Box Regression

  • Classification : Softmax 이용
  • bounding box regression 에서는 Linear를 통해 regression

RPN loss function

 

2) Translation Invariant Anchor and Multi-scale anchors

 

MultiBox - 객체의 translation이 anchor box가 이동한 객체를 찾는데에 영향을 미치지는 않는다.

또한 RPN에서의 anchor box의 특징은 9개의 anchor box를 제공하여 더 정확한 localization(위치) 성능을 얻게 된다.

https://towardsdatascience.com/faster-rcnn-1506-01497-5c8991b0b6d3

 

 


 

 

3. 학습

 

RCNN에서는 Classification과 Bounding Box Regression을 따로 학습했고 Fast RCNN에서는 두가지를 합한 Multi-task loss로 학습을 진행하였다.

 

하지만 Faster RCNN은 ROI를 구하는 과정까지 (RPN) 같이 학습시키기 때문에 총 4개의 loss로 학습을 진행한다.

 

즉 Faster RCNN = Fast RCNN + RPN

 

과정

1. Imagenet data + pretrained CNN model로 RPN 학습

M1 = train_rpn(M0)

 

2. 학습된 RPN에서 ROI를 추출한다.

P1 = generate_proposals(M1)

 

3. pretrained CNN model과 ROI를 적용하여 Fast RCNN을 학습

M2 = train_fast_rcnn(M0, P1)

 

https://89douner.tistory.com/91?category=878735

 

 

4. 학습된 Fast RCNN을 가져와 RPN을 다시 학습시킨다. (Fast RCNN, RPN CNN share)

M3 = train_rpn_frozen_conv(M2)

5. RPN에서 ROI를 추출한다.

P2 = generate_proposals(M3)

 

6. 추출된 ROI와 재학습된 RP을 다시 Fast RCNN에 학습시킨다.

M4 = train_fast_rcnn_frozen_conv (M3,P2)

 

 


 

 

4. 결과

 

Test time을 0.2초로 줄였으나 아직 Real-time을 논할 수준까지는 아니다.

 

30fps = 1/30s = 0.03s 정도는 되어야 Real-time을 논할 수 있게 된다.

 

 

 


 

 

5. References

89douner.tistory.com/91?category=878735

hwangtoemat.github.io/paper-review/2020-02-09-FasterRCNN-%EB%82%B4%EC%9A%A9/?

medium.com/@smallfishbigsea/faster-r-cnn-explained-864d4fb7e3f8

incredible.ai/deep-learning/2018/03/17/Faster-R-CNN/?

 

 

 

반응형