안 쓰던 블로그
RCNN, SPM, SPP, SPPNet 본문
RCNN
Region Proposal 기반의 Object Detection 모델
Object Detection
-원본 이미지->Feature Extrator->Feature Map->FC Layer->Soft max Class score
-Sliding Window 방식과 Region Propsal 방식(대표적인 방법: Selective search)
RCNN(Regions with CNN)
-Region Proposal과 CNN Detection이 섞인 방법
1. 원본 이미지에서 Selective search로 후보 추출(2천개 정도)
2. 추출된 후보 이미지를 다 동일한 사이즈라고 가정(warped region), 후보를 가지고 CNN Detection
3. 후보들 Classify
RCNN 장단점
높은 Detection 정확도 but 너무 느린 Detection 시간과 복잡한 아키텍처 및 학습 프로세스(각 이미지마자 selective search수행->2000개의 region영역 이미지 추출, 개별 이미지마다 CNN Feature map생성.. 이 과정이 느리기도 하고 복잡하다)
->Deep Learning 기반 Object Detection 성능, Region Proposal 기반 성능 입증
->Detection 수행 시간을 줄이고 복잡하게 분리된 개별 아키텍처를 통합 할 수 있을까?
개선 방안
2000개의 Region Proposal이미지를 CNN으로 Feature Extraction하지 않고, 원본 이미지만 CNN으로 Feature Map생성한다
뒤에 원본 이미지의 Selective search 로 추천된 영역의 이미지만 Feature Map으로 매핑하여 별도 추출
또 문제점: CNN은 서로 다른 사이즈의 Image를 수용하지 않음(Flatten Fully Connection Input의 크기가 고정이 되어야 하기 때문). 그런데 Resion Proposal 이미지는 서로 다른 크기를 가졌다
또 문제점의 개선 방안
Feature 맵으로 투영된 서로 다른 크기를 가진 Region Proposal 이미지를 SPP Net를 통과시키면, 고정된 크기 Vector로 변환하여 FC에 제공
SPP: CNN상에서 Image classification에서 서로 다른 이미지의 크기를 고정된 크기로 변환하는 기법. 길쭉한 이미지를 늘리거나(warp), 자르거나(crop)해서 고정된 크기로 바꾼다
Spatial Pyramid Matching(SPM)
SPP가 서로 다른 이미지 크기를 고정된 크기로 변환한다고 하였다
SPP는 오래전부터 컴퓨터 비전 영역에서 활용된 Spatial Pyramid Matching 기법에 근간을 둔다
그리고 SPM이 나오기 전에 Bag of Visual words라는 것이 있었다
Bag of Visual words
오브젝트에서 자잘한 특징들을 뽑아내는 방법. 문장에서의 각 알파벳 등장 수를 찾을 때를 생각하면 된다
문제점: 바닷가 같이 사진에 뽑아낼 특징이 딱히 없고 다 비슷하다면 정확성이 떨어짐
Spatial Pyramid Matching
1. 처음 level0에서는 전체 이미지에서 특징을 뽑는다. 특징이 3개로 이루어진 이미지라고 할 때, 3가지 값이 나오게 된다
2. level1에서는 4등분한 이미지에서 각 영역마다의 특징을 뽑는다. 4등분된 특징이 3가지 나오니까 총 12가지 값이 나오게 된다
3. level2에서는 16등분한 이미지에서 각 영역마다 특징을 뽑는다. 16등분된 특징이 3가지 나오니까 총 48가지 값이 나오게 된다
즉, 8x8 Feature Map에서는 3+12+48=63개 원소의 vector 값으로 표현 가능하다
이 방법은 꼭 정사각형이 아니라도 사용할 수 있다
예를 들어 8x12 Feature Map이 있다고 해도 분면의 크기가 아닌, 분면을 몇 개로 나누냐가 중요하다
분면을 나누는 것만 동일하게 나누면 된다
Spatial Pyramid Pooling(SPP)
SPM과 방법은 동일하지만 가져오는 벡터의 수가 달라진다
SPM에서는 특징이 3개로 이루어진 8x8 Feature Map이 있을 때, 3, 12, 48개 값이 나왔다
그러나 SPP에서는 Max Pooling만 적용하므로, 각 분할에서 가장 큰 값만 가져온다
1. level0에서는 전체 이미지에서 가장 큰 값 1가지를 뽑는다
2. level1에서는 4등분한 이미지에서 각 영역마다 가장 큰 값 1가지씩을 뽑는다. 총 4가지 값이 나온다
3. level2에서는 16등분한 이미지에서 각 영역마다 가장 큰 값 1가지씩을 뽑는다. 총 16가지 값이 나온다
즉, 8x8 Feature Map에서는 1+4+16=21개 원소의 vector 값으로 표현 가능하다
SPP-Net 이미지 Classification
1. 원본 이미지에서 Selective search를 해서 뽑은 2000개의 영역에 대해 Feature Map을 맵핑
2. SPP Layer를 통과하면 2000개에 대한 동일 크기 벡터가 생성
3. FC Layer를 통과하거나 Bounding Box Regression 적용
요약
R-CNN: 이미지 한 개에 2000번 CNN을 통과해야 함
SPP-Net: 이미지 한 개는 한 번만 CNN을 통과
->성능은 비슷하지만 수행시간이 아주 줄어들었다
참고: 파이썬 딥러닝 컴퓨터 비전
'머신러닝 > 머신러닝' 카테고리의 다른 글
RPN (0) | 2021.01.20 |
---|---|
Faster RCNN (0) | 2021.01.20 |
OpenCV를 활용한 영상 처리 (0) | 2021.01.17 |
OpenCV를 활용한 이미지 처리 (0) | 2021.01.17 |
Object Detection_5. Pascal VOC 데이터 세트 가져오기 (0) | 2021.01.17 |