일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 영상처리
- DP
- 알고리즘
- dfs
- 포스코 교육
- DP문제
- 그리디
- 포스코 ai 교육
- 포스코 AI교육
- sort
- BFS
- 삼성코테
- 다이나믹프로그래밍
- 컴퓨팅사고
- 삼성코딩테스트
- 초소형머신러닝
- MCU 딥러닝
- dfs문제
- bfs문제
- 임베디드 딥러닝
- 삼성역량테스트
- TensorFlow Lite
- 코테 문제
- tinyml
- 코테
- 딥러닝
- tflite
- 자료구조
- 코딩테스트
- 삼성역테
- Today
- Total
코딩뚠뚠
[머신러닝 공부] 딥러닝/Fast RCNN (object detection) 본문
이번에는 저번 글에 이어 Object Detection model의 발전과정에 대해 계속 짚어나가도록 한다.
RCNN -> SPP-Net -> ??
1. 배경
SPP-Net의 어떠한 단점을 극복하기 위함
1) Three stage pipeline (RCNN과 SPP-Net의 공통 단점)
학습방법에의 문제이다. 순서는 아래와 같다.
- CNN모델을 사용할 때 pre-trained 모델을 사용하여 fine-tuning 한다.
- Fine-tuning 후 softmax를 사용하지 않고 SVM을 사용, 학습시켜준다.
- classification 학습 마무리 후 bounding box regression을 학습시켜준다.
즉 학습을 세 번에 나누어 실시하여 시간 소모가 많다.
2) Feature vectors stored in harddisk
RCNN은 Conv layer에서의 feature map을 하드디스크에 저장하고 그 정보를 SVM 학습 때 가져다 쓴다.
접근 시간에 따른 시간 소모
3) 느린 Test time
Real-time 으로 detection 하기에 두 모델은 느린 속도를 보인다.
2. 구조
1) ROI pooling layer
앞선 두 모델과 비교하여 Fast RCNN 의 돋보이는 특징은 ROI pooling layer 이다.
Conv layer에서 추출한 feature map에서 ROI pooling을 진행하게 된다.
- Conv layer에서 추출된 feature map에 selective search를 적용해서 ROI들을 선별해낸다.
- ROI들을 모두 7x7 size로 만들어 주기 위한 작업을 진행한다 (적절한 window size와 stride값, max pooling을 적용한다)
- 생성된 7x7 feature map이 flatten 되어 2개의 FC layer를 거친다.
- 2개를 거쳐 생성된 feature 들은 softmax, bounding box regressor에 각각 사용되게 된다.
2) Single bin
1)번과정에서와 같이 7x7 spatial bin을 사용하면 SPP Net에서의 1x1 2x2 4x4 spatial bin에 비해 아래와 같은 장점이 존재한다.
Overfitting 문제를 피할 수 있게 된다.
- SPP Net과 같은 방식으로 학습을 시키면 하나의 ROI객체를 3개의 resolution으로 학습하는 것이기 때문에 하나의 객체를 여러번 학습하여 overfitting문제가 발생할 수 있다.
3) Truncated SVD
Fast RCNN의 마지막 FC layer에는 Truncated SVD 기법이 적용되어있다.
CNN구조에서 걸리는 시간은 FC layer에서보다 Conv layer에서 더 많다.
하지만 Fast RCNN 같은 경우엔 단 한번의 CNN만 하고 이후에 2000개의 ROI가 선택된 후, 이에 대해서 FC layer를 진행하기 때문에 Conv layer 시간은 줄이고 FC layer에서의 시간을 늘리게 된다.
FC layer에서 시간을 늘리게 되었는데 이를 Truncated SVD기법으로 압축하여 parameter 수를 줄이게 된다.
SVD에 대한 설명은 아래 블로그 참조
3. 학습
1) A single training stage (streamline)
1-1) One loss function with two multi task
RCNN과 SPP Net에서는 bounding box와 classification을 따로 학습시켜주었다.
Faster RCNN은 하나의 loss function을 통해 multi-task를 수행하도록 만들어주었다.
전체 진행과정 중 3번이 해당사항
- 0. Input Image에 Selective Search 를 진행하여 ROI 영역을 뽑아놓기
- 1. CNN 모델에 이미지 전체를 집어넣어 featue map을 뽑아내기
- 2. 뽑아놨던 ROI영역을 feature map에 적용시킨 후 ROI pooling 을 진행하여 fixed length feature vector를 생성
- 3. FC layer를 거쳐 두 자식 layer 를 통해 classfication, bounding box regression 을 진행
Multi-task loss function은 아래와 같다.
- classification loss 에는 log loss function을 사용
- bounding box regression loss (Localization loss function)에는 smooth L1 loss를 사용
1-2) fine tuning
기존 RCNN 같은 경우엔 CNN, SVM, bbox regression에 대해 각각 Pascal VOC로 fine tuning 하는 꼴이었다.
Faster RCNN은 SVM으로 classification을 수행하지 않고 기존 CNN classifier인 softmax를 이용하여 CNN, softmax, bbox를 학습하기 때문에 Pascal VOC 데이터를 한번만 쓰게 된다.
VGGNet을 기준으로했을때 conv3_1에서부터 fine-tuning을 하는 것이 효율적
2) Eliminate disk storage
RCNN에서는 SVM과 bounding box에 feature를 넘기기전에 hard disk에 우선 넘긴다.
하지만 Fast RCNN은 메모리단에서 학습을 시켜준다.
3) Hierarchical sampling
RCNN ,SPP Net은 batch size = 128로, 한 번 학습시 마다 128개의 서로 다른 이미지 중 128개의 ROI를 추출한다.
이렇게 되면 128번의 CNN이 수행되어야 하기 때문에 시간이 많이 소모된다.
Fast RCNN은 hierarchical sampling 방식을 취해 128개보다 적은 개수(논문에선 2개)의 이미지에서 128개의 ROI에 대해 연산을 수행한다.
이렇게 되면 2번의 CNN만 수행해 주면 될 것이다.
4) Inefficient of SPP Net back propagation
SPP Net의 backpropagation 때문에 weight의 update가 비효율 적으로 일어난다.
spatial pyramid pooling layer 때문이라고 한다.
이보다 ROI pooling backpropagation이 더 효율적이다.
4. 기타
지금까지 object detection 모델 중 RCNN, SPP-Net, Fast RCNN 에 대해 간단히 알아보았다.
그러나.. 19년도 논문까지만 해도 아래와 같은 모델들이 남아있다ㅎㅎ
다음 포스팅에서는 Faster RCNN에 대해 알아보도록 한다.
인턴을 진행할 시에도 중요 요소모듈에 사용했던 Faster RCNN.
어떤장점이 있길래 아직까지 쓰고 있던걸까 궁금하다.
5. References
89douner.tistory.com/90?category=878735
blog.airlab.re.kr/2019/10/Fast-R-CNN
woosikyang.github.io/fast-rcnn.html
lilianweng.github.io/lil-log/2017/12/31/object-recognition-for-dummies-part-3.html
neocarus.tistory.com/entry/VGGNet-CNN-architecture-%EA%B8%B0%EB%B0%98-%EB%AA%A8%EB%8D%B8
'공부 > ML&DL' 카테고리의 다른 글
[머신러닝 공부] K-Fold Cross Validation 이란 (0) | 2021.04.18 |
---|---|
[머신러닝 공부] 딥러닝/Faster RCNN (object detection) (0) | 2021.04.17 |
[머신러닝 공부] 딥러닝/SPP Net (object detection) (0) | 2021.04.15 |
[머신러닝 공부] 딥러닝/RCNN (object detection) (0) | 2021.04.14 |
[머신러닝 공부] 딥러닝/FCN (Fully Convolutional Networks) (0) | 2021.04.06 |