일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 딥러닝
- BFS
- bfs문제
- 영상처리
- 코테
- 그리디
- tflite
- 코테 문제
- 알고리즘
- 포스코 AI교육
- 포스코 교육
- 다이나믹프로그래밍
- 임베디드 딥러닝
- sort
- 초소형머신러닝
- 포스코 ai 교육
- dfs
- tinyml
- TensorFlow Lite
- MCU 딥러닝
- 삼성역테
- 삼성코테
- 삼성역량테스트
- DP
- dfs문제
- 삼성코딩테스트
- 코딩테스트
- 자료구조
- DP문제
- 컴퓨팅사고
- Today
- Total
코딩뚠뚠
[머신러닝 공부] 딥러닝/Faster RCNN (object detection) 본문
지금까지 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)
1. Selective Search 를 진행하지 않고 input 이미지를 그대로 CNN에 집어넣는다.
2. CNN의 output인 feature map을 input값으로 RPN을 돌린다.
- 여기서 anchor의 사이즈를 크기별, 종횡비 별로 미리 저장해 둔다.
- RPN이 진행되면 filter가 feature map을 슬라이딩 할텐데, 해당 위치의 anchor에 대한 score(객체O,객체X)와 생성된 ROI좌표(x,y,높이,넓이)가 생성된다.
- 이 때 anchor의 IoU값(F<0.3<other<0.7<T)을 기준으로 positive와 negative를 구분하여 학습을 진행한다. (Training Data : RPN으로부터 얻은 anchors와 GT boxex)
- score의 값이 높은 순서대로 anchor들을 나열하여 bbox regression을 진행하고 ROI값을 구한다.
이런식으로 ROI를 구한다.
3. Classification, Bounding Box Regression
- Classification : Softmax 이용
- bounding box regression 에서는 Linear를 통해 regression
2) Translation Invariant Anchor and Multi-scale anchors
MultiBox - 객체의 translation이 anchor box가 이동한 객체를 찾는데에 영향을 미치지는 않는다.
또한 RPN에서의 anchor box의 특징은 9개의 anchor box를 제공하여 더 정확한 localization(위치) 성능을 얻게 된다.
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)
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/?
'공부 > ML&DL' 카테고리의 다른 글
[머신러닝 공부] 딥러닝/YOLO V1 (object detection) (0) | 2021.04.21 |
---|---|
[머신러닝 공부] K-Fold Cross Validation 이란 (0) | 2021.04.18 |
[머신러닝 공부] 딥러닝/Fast RCNN (object detection) (0) | 2021.04.17 |
[머신러닝 공부] 딥러닝/SPP Net (object detection) (0) | 2021.04.15 |
[머신러닝 공부] 딥러닝/RCNN (object detection) (0) | 2021.04.14 |