인프런 - 권철민 님의 '딥러닝 컴퓨터 비전 완벽 가이드'를 정리한 내용입니다.
RCNN 계열
RCNN 계열은 2가지 stage, Object 위치를 찾는 과정과 Object를 분류하는 과정으로 이루어진 알고리즘 들이다.
1. RCNN
RCNN의 동작 단계는 이미지에서 Object가 있을 만한 위치 2000개를 지정하고 2000개 모두 분류 모델에 넣어 분류하는 방법이다.
Object 위치를 찾는 방법으로 graph-based segment 기법인 selective search를 이용한다.
이미지를 분류하는 방법은 Imagenet을 이용, feature를 만들고 SVM을 이용하여 이미지 분류, Bounding Box Regression을 수행한다.
동시대 다른 알고리즘에 비해 매우 높은 Detection 성능을 보여주었다.
● 문제점
- imagenet에 들어가야 하는 이미지의 크기는 정해져 있다. rescale 하는 과정에서 이미지가 찌그러지는(Warp) 현상이 불가피하다.
(실제로 찌그러진 이미지를 학습한 모델을 사용하기도 했다.)
- 3개의 딥러닝 모델(imagenet, SVM, Bounding Box regression)에 대해 2000개의 input에 연산을 하기 때문에 시간이 오래걸린다.
(1장의 이미지 약 50초, CPU환경에서)
2. SPPnet
SPPnet은 RCNN의 문제점(긴 수행 시간 및 이미지 찌그러짐)을 개선하는 방향으로 변화된 알고리즘이다.
RCNN과 다르게 전체 이미지를 imagenet 모델에 넣어 feature를 먼저 생성한 뒤 selective search를 통해 feature map에서
Object 위치를 찾는다. 이 과정을 통해 2000번 수행되던 imagenet이 1번만 수행된다.
결론적으로 mAP값은 유지하면서 64배 빠른 모델이 되었다.
● 문제점
- feature에서 잘라내었기 때문에 FC layer로 전달될 입력의 개수가 다르게 되었다. (큰 부분인 경우 입력 개수가 많고 작으면 적어진다.)
이 문제를 해결하기 위해 SPP layer가 도입된다.
● SPP (Spatial pyramid Pooling)
이미지를 특정 규칙으로 잘라 Pooling을 통해 FC layer로 입력 개수를 맞춰주는 방법
이미지를 1x1, 2x2, 4x4등으로 잘라 낸 뒤 그 영역에서 maxpooling을 수행한다.
이 과정을 통해 모든 크기에서 같은 개수의 값을 얻을 수 있다.
1x1, 2x2, 4x4로 이미지를 잘라 maxpooling을 수행한다면 이미지 크기와 상관없이
1x1 -> 1개의 값
2x2 -> 4개의 값
4x4 -> 16개의 값
-> 총 21개의 값을 얻게 된다.
● SPPnet의 전체 과정
3. Fast RCNN
SPPnet의 세부적인 부분에 변화를 준 알고리즘이다.
SPP layer를 RoI Pooling layer로 변경하고 Object를 분류하던 SVM 모델 대신 Softmax로 바로 예측한다.
Multi-task loss 함수로 Object 분류와 Box 위치 추정을 한 번에 학습한다.
● ROI pooling
SPP가 단계적인 피라미드 형식(1x1, 2x2,4x4)으로 이미지를 나누어 pooling 하지만
ROI Pooling은 이미지를 HxW로 한 번만 나누어 pooling을 하는 방법이다.(출력 개수 HxW)
● RCNN, SPPnet, Fast RCNN 모델 속도 비교
4. Faster RCNN
위 3개의 모델이 영역을 처음 추정할 때 selective search를 이용하였다.(그 후 영역에 대한 학습)
Faster RCNN에서는 영역을 추정하는 과정 또한 딥러닝 모델을 이용하여 학습이 가능한 RPN을 이용한다.(그 후 학습은 동일)
● RPN
selective search를 대신하여 영역을 추정하는 layer이다. GPU를 사용하여 연산이 가능하기 때문에 빠르고 학습이 가능하기 때문에
end-to-end 모델을 만들 수 있게 해 주었다.
입력으로 imagenet을 통해 만들어진 featuremap을 받고 출력으로는 2가지, Object 인지 아닌지 분류와 영역 Box 좌표를 내보낸다.
▶ 영역을 특정하는 방법
RPN에서 분류, 영역 좌표를 계산하기 위해서는 영역의 후보를 정하는 과정이 필요하다. 후보를 정하고 후보에 대한 분류와 좌표를 생성하는
일이 가능하다.
이때, 사용하는 개념이 Anchor Box이다.
한 지점에서 9가지 종류의 가상의 박스를 만들어 영역 후보를 만드는 과정이다. (개수나 모양은 변경 가능)
슬라이딩 윈도우 방식처럼 Anchor Box를 이미지 위에서 움직여가며 후보 영역을 생성한다. 이때 모든 점에서 수행하는 것이 아니라
40 x 50처럼 이미지를 나누어 중심을 설정하고 설정된 중심에서 Anchor Box를 적용한다.
아래 그림처럼 약 2000개의 지점에서 Anchor Box를 수행한다.(총 2000 x 9개의 영역)
● Anchor Box의 장점
- 정사각형, 세로로 긴, 가로로 긴 물체(크기별)를 각각 탐지할 수 있다. (슬라이딩 윈도우 처럼 많은 계산을 할 필요 없다.)
● RPN 학습 시 주의할 점
- 영역 후보들 중에 Object가 아닌 경우가 많아 학습 시 Negative 데이터에 대해 편향될 수 있다.
Positive와 Negative의 개수를 맞춰주어 학습시킨다.
● 전체적인 Faster RCNN 학습 순서
1. RPN을 학습한다. (imagenet 포함 모든 파라미터를 학습한다.)
2. 최종 출력(Object 분류/영역 좌표)을 학습한다.
3. RPN 마지막 layer를 fine tuning 한다.
4. 최종 출력 마지막 layer(FC)를 fine tuning 한다.
최종 비교 이미지
'python > 딥러닝' 카테고리의 다른 글
[컴퓨터 비전] SSD 개요 (0) | 2021.05.06 |
---|---|
[컴퓨터 비전] OpenCV 안에 있는 Detection 모델 사용하기 (0) | 2021.04.29 |
[컴퓨터 비전] 주요 Dataset 과 openCV, 컴퓨터 비전 패키지 (0) | 2021.04.22 |
[컴퓨터 비전] 개요 및 Object Detection (0) | 2021.04.21 |
[딥러닝] - few shot learning, 적은 데이터로 학습하기 (0) | 2021.04.12 |
댓글