본문 바로가기
논문 정리

Object Detection 정리(RCNN, FastRNN,FasterRCNN 중심으로)

by winston1214 2021. 6. 21.
반응형

전체적인 글 내용은 나동빈님의 유튜브를 참고하였습니다.(대신 홍보해요! 구독과 좋아요 눌러주세요..ㅎㅎ)

 

https://www.youtube.com/watch?v=jqNCdjOB15s&t=865s 

 

## Object Detection 개념

Object Detection은 다수의 사물이 존재하는 상황에서 각 사물의 위치와 클래스를 찾는 작업이다.

Classification, Object Detection, Segmentation

- Classification : 한 이미지가 있을 때 그 클래스가 무엇인지

- Object Detection : 한 이미지가 있을 때 그 안에 클래스가 무엇인지 + 그 위치는 어떻게 되는지

- Segmentation : 한 이미지가 있을 때 그 안에 클래스가 무엇인지 + 그 위치는 어떻게 되는지 + 픽셀단위로

 

## Object Detection의 두가지 방식

- 2-Stage Detector

물체의 위치를 찾는 문제(localization)과 분류(Classification)문제를 순차적으로 해결하는 방식이다.

즉, 물체가 있을 법한 위치를 찾은 뒤에 각각의 위치에 대해서 class를 분류하는 것이다.

사물이 존재할 법한 위치를 찾는 것을 Region proposal 이라고 한다. 그리고 이를 수행한 후 각각의 위치에 대해서 Feature Extraction을 진행한 후 이를 통해서 분류하고, 위치에 대한 정보를 정확히 regression 하는 방식이다. 

이는 기본적인 RCNN 구조이다. 여기서 Regression은 사물이 존재하는 bounding box의 좌표를 예측하는 것이다.

- 1-Stage Detector

이 방식은 물체의 위치를 찾는 문제(localization)과 분류(classification) 문제를 한 번에 해결하는 방식이다.

기본적으로 2 stage 방식보다 더 빠르게 동작하지만 정확도는 2 stage에 비해 떨어진다.

대표적인 1 stage detector로는 YOLO가 있다.

 

## 2 stage detector

RCNN 계열

1. RCNN

우선, 이미지에서 1차적으로 cpu 상에서 Selective Search를 진행한다. 이 Search 과정을 통해 물체가 있을 법한 위치 약 2000개 정도를 찾게 되고, 이러한 2000개의 부분을 Cropping과 Resizing을 하여서 개별적으로 CNN network를 거치면서 feature vector를 추출한다. 이러한 feature vector들을 SVM을 통해서 Classification을 진행하고 Regressor를 통해서 물체의 정확한 위치가 어딘지 bounding box를 예측하게 된다. 

2. Fast RCNN

RCNN 기법을 개선한 논문으로써, RCNN 보다 좀 더 빠른 성능을 보였다.

Fast RCNN은 기존의 RCNN과 마찬가지로 Selective Search를 통해 Region Proposal을 찾는다. 그리고 Feature vector를 추출하기 위해서 CNN을 거친다. 여기서 RCNN과 다른 점은 RCNN은 Selective Search된 이미지를 모두 CNN network를 거쳤는데, Fast RCNN은 단 한 번만 거치면서 기존의 RCNN 보다 빠른 성능을 가지게 된다.

그리고 ROI pooling을 통해 각각의 Region에 대해서 Feature에 대한 정보를 추출한다. 사실 CNN 구조상 각 객체에 대한 이미지의 위치 정보가 담겨져 있기 때문에 이러한 작업이 가능한 것이다. 

Fast RCNN에선 RCNN과 달리 Softmax layer를 거쳐서 각각의 class에 대한 확률 값을 구하고 이를 이용해 classification을 이뤄낸다.

3. Faster-RCNN

기존의 RCNN과 Fast-RCNN은 Selective Search과정이 모두 cpu내에서 이뤄지기 때문에 속도가 느릴 수 밖에 없었다. 

Faster RCNN은 GPU상에서 연산을 하기 위해 Region Proposal Network(RPN)을 제안한다. 이는 Feature map을 보고 어느 곳에 물체가 있을지 예측한다. 즉, Selective Search의 시간적인 단점을 해결하는 부분이다. RPN을 통해 한 번의 forwarding을 수행하면서 어느 곳에 물체가 있을 법 한지 예측이 가기 때문에 더 빠르고 정확하게 모델이 동작할 수 있다. 나머지는 Fast RCNN과 동일하게 Softmax 함수를 사용한다.

### RCNN, Fast RCNN, Faster RCNN 장단점

RCNN 장점 CNN을 이용해 각 Region의 클래스를 분류할 수 있다.
단점 전체 framework를 End-to-End 방식으로 학습할 수 없다.
Global Optimal Solution을 찾을 수 없다.
Fast RCNN 장점 Feature Extraction, ROI poolingm Region Classification,Bouding Box Regression 단계를 모두 End-to-End로 묶어서 학습될 수 있다.
단점 여전히 첫번째 Selective Search는 CPU에서 수행되므로 속도가 느리다.
Faster RCNN 장점 RPN을 제안하여, 전체 프레임워크를 End-to-End로 학습할 수 있다.
단점 여전히 많은 컴포넌트로 구성되며, Region Classification 단계에서 각 특징 벡터(feature vector)는 개별적으로 FC layer로 Forward 된다

 

## Region Proposal

### Sliding Window 기법

이미지에서 다양한 형태의 window를 슬라이딩하며 물체가 존재하는지 확인한다.

Sliding Window 예시

이러한 과정으로 인해 너무 많은 영역에 대하여 확인해야 한다는 단점이 있다. 그리고 이는 feature map이 아니라 입력 이미지에 대해서 cpu 장치를 이용해 sliding window를 진행하게 되면 넓은 input space 상에서 모두 탐색하게 되어 느릴 수 있다는 단점이 있다.

 

### Selectvie Search

인접한 영역(region) 끼리 유사성을 측정큰 영역으로 차례대로 통합해서 나간다. 이러한 방식은 대표적으로 RCNNFast RCNN에서 주로 쓰이는 Region Proposal 방법이다.

Selective Search는 다음과 같은 순서로 진행된다.(https://m.blog.naver.com/laonple/220918802749)

1. 초기 sub-segmentation을 수행한다.

각각의 객체가 1개의 영역에 할당이 될 수 있도록 많은 초기 영역을 생성한다.

Selective Search 1단계

 

2. 작은 영역을 반복적으로 큰 영역으로 통합한다.

Greedy 알고리즘을 사용하여 이 과정을 진행한다. 우선 여려 엉역으로부터 가장 비슷한 영역을 고르고 이것들을 좀 더 큰 영역으로 통합을 하며, 이 과정을 1개의 영역이 남을 때 까지 반복을 한다. 초기의 복잡한 영역들을 유사도에 따라 점점 통합이 된다.

Selective Search 2단계

3. 통합된 영역들을 바탕으로 후보 영역을 만들어낸다.

Selective Serach 3단계

 

## Object Detection 정확도 측정 방법

- 성능평가 지표(Precision & Recall)

성능 평가 지표는 그 전에도 많이 다뤘지만, 다시 한 번 정리하는 느낌으로 정리해보겠다.

confusion matrix

1. Precision : 올바르게 탐지한 물체의 수(TP) / 모델이 탐지한 물체의 개수(TP+FP)  = TP/(TP+FP)

2. Recall : 올바르게 탐지한 물체의 수(TP) / 실제 정답 물체의 수(TP+FN)  = TP/(TP+FN)

 

Example 1 : 강아지가 20마리 존재할 때 모델이 10마리의 강아지를 검출하여 5마리는 정확히 맞힌 경우

-> TP : 5, FP : 5, FN : 15  ∴ Precision = 5/(5+5) = 1/2  Recall = 5/(15+5) = 1/4

Example 2 : 강아지가 10마리 존재할 때 모델이 20마리의 강아지를 검출하여 7마리 정확히 맞힌 경우

-> TP : 7, FP : 13, FN : 3 ∴ Precision = 7/(13+7) = 7/20  Recall = 7/(7+3) = 7/10

 

실제 모델의 성능을 측정하기 위해선 Precision과 Recall을 모두 고려하는 Average Precision(AP) 값을 사용한다.

일반적으로 Precision과 Recall은 반비례 관계를 가지기 때문에 Recall에 따른 Precision값을 고려하기 위하여 Average Precision으로 측정을 한다.

이는 모델의 Confidence값에 따라서 평균을 구한다. 이 때, Confidence 값이 높아지면 Precision은 높아짐을 기억해야한다.

AP 구하는 방법

이걸 단조 감소 그래프로 표현하고 빨간색 영역을 채워넣고 보라색과 빨간색을 모두 합친 영역의 넓이를 계산한다. 그리고 이걸 Average Precision으로 사용한다. 

- IoU(Intersection over Union)

IoU란 두 bounding box가 겹치는 비율을 의미한다. 이 값을 통해 True 값인지 False 값인지를 판단한다.

IoU를 그림으로 표현하면 다음과 같다.

IOU

정답 bounding box와 예측한 bounding box의 IOU 비율이 높을수록 정확히 예측한 것으로 판단한다. 

IoU를 통해 성능 평가하는 예시는 다음과 같다.

mAP@0.5 = 정답과 예측의 IoU가 50% 이상일 때 정답으로 판정하겠다는 의미

NMS = 같은 class 끼리 IoU가 50% 이상일 때 낮은 confidence box를 제거하여 중복된 box를 지우는 것이다.

 

- NMS(Non Maximum Suppression)

이름을 곧이 곧대로 풀어쓰면 제일 큰 것을 제외하고 나머지는 압축해버리자라는 뜻으로 해석된다. 

Object Detection은 하나의 instance에 하나의 bounding box가 적용되어야한다. 즉, 하나의 물체가 있으면 거기에 단 하나의 bounding box만 적용되야 한다는 것이다.

따라서 이를 위해 사용하는 것이 NMS 방법이다.

그래서 IoU가 특정 임계점(threshold) 이상인 중복 bounding box를 제거하는 것이다.

NMS 예시

 

 

## R-CNN : Regions with CNN features (CVPR2014)

RCNN은 위에서도 언급했듯이 Selective Search를 이용해 2000개의 Region Proposal을 생성한다. 그리고 이 Region Proposal에서 선택된 이미지 값들을 하나하나씩 CNN에 넣어서 결과를 계산한다.

이 때 CNN에 input image로 넣을 때는 정사각형의 크기로 맞춰준다. 따라서 crop이나 reshape을 통해서 size를 맞춰줘야한다. 

RCNN을 한 번 더 요약한 그림을 보면 다음과 같다.

RCNN

RCNN의 동작 과정은 다음과 같이 이뤄진다.

1. Selective Search를 이용해 2000개의 ROI(Region of Interest)를 추출한다. ( on CPU )

2. 각 ROI에 대하여 warping을 수행하여 동일한 크기의 입력 이미지로 변경한다.

3. Warped image를 CNN에 넣어서 이미지 feature를 추출한다.

4. 해당 feature를 SVM에 넣어 class의 분류 결과를 얻는다.(binary SVM Classifier[Yes or No] 모델 사용)

5. 해당 feature를 Regressor에 넣어 위치(bounding box)를 예측한다.

 

여기서 Bounding BOX regression에 대해서 조금 더 알아보겠다.

Bounding Box regression은 지역화(localization) 성능을 높이기 위해 사용하는 것이다.

Bounding Box Regression

예측 위치는 P(predict)로 bounding box의 중심점 x,y 좌표와 bounding box의 width, height 좌표로 구성되어있다. 실제 위치 G(Ground Truth)도 동일하게 구성되어 있다.

따라서 이 좌표(x,y,w,h)에 대해서 학습을 진행하면서 linear regression으로 좌표의 위치를 조정 및 예측한다.

RCNN의 한계점은 다음과 같다.

1. 입력 이미지에 대해서 CPU 기반의 Selective Search를 진행해야하므로 많은 시간이 소요된다.

2. 전체 아키텍처에서 SVM, Regressor 모듈이 CNN과 분류되어 있다. 따라서 SVM과 Regressor의 결과를 통해서 CNN을 업데이트 할 수 없다. 따라서 이는 End-to-End 방식으로 학습할 수가 없다.

3. 모든 ROI를 CNN에 넣고 학습해야하기 때문에 ROI의 개수만큼 즉, 본 논문에선 2000번의 CNN 연산이 필요하다. 따라서 이로 인해 많은 시간이 소요된다.

 

## Fast RCNN (ICCV 2015)

Fast RCNN은 RCNN과 다르게 동일한 Region Proposal 방식을 사용하지만 이미지를 한 번만 CNN에 넣어 Feature map을 생성한다. 이 때, Feature map의 정보는 원본 이미지에서의 위치에 따른 정보를 포함하고 있다. 그래서 Feature map으로 ROI projection을 시켜서 사물이 존재할 법한 위치를 feature map 상에서 찾을 수 있도록 한다. 

그리고 ROI pooling을 거칠 때, 그 전 layer에서 추출한 feature map을 기반으로 사물이 존재할 수 있는 위치를 찾는다.

이를 통해 얻어진 ROI feature vector를 softmax층을 통과 시켜서 classification을 하고 , bounding box regression을 진행한다.

Fast RCNN

Fast RCNN의 핵심 아이디어인 ROI Pooling에 대해 자세히 알아보겠다.

classification을 할 때, FC(Fully Connected) layer를 이용해야되기 때문에 Fully connected layer의 입력으로 고정된 크기가 들어갈 수 있도록 설정해준다.

그래서 항상 고정된 크기의 feature vector를 뽑기 위해서 각 ROI 영역에 대하여 Max Pooling을 진행한다.

ROI pooling 예시

위의 그림을 예시로 들어서 설명하겠다.

2x2의 feature vector를 추출한다고 하면 특정한 크기의 ROI 부분이 2x2로 나눠질 수 있게 만든다. 전체 activation 영역이 최대한 같은 비율로 나눠질 수 있게 만든다. 그리고 이 영역에 대해서 Max Pooling을 진행한다.

하지만 Fast RCNN은 물체가 있을법한 위치를 찾기 위해 CPU를 활용하기 때문에 느리다.(Selective Search)

 

## Faster RCNN(NIPS2015)

Faster RCNN은 Fast RCNN에서 병목현상에 해당하던 CPU를 사용하여 Region proposal 하는 부분을 GPU 장치에서 수행하도록 한다. 이게 Faster RCNN의 핵심 RPN(Region Proposal Networks) 이다. 

그리고 이러한 과정은 모두 이미지에 대해서 수행되기 때문에 Region Proposal이나 Detector 부분의 결과가 feature map에 반영될 수 있다. 따라서 이 아키텍쳐는 End-to-End 방식으로 학습이 가능하다

Faster RCNN

아키텍쳐의 수행 과정은 다음과 같다.

1. VGGNet 기반의 CNN으로 이미지에서 feature map을 추출한다.

2. feature map을 기반으로 RPN 을 통해 물체가 있을 법한 위치(region proposals)를 찾아낸다.

3. RPN에서 탐지한 위치 정보를 중심으로 Classification 과 Regression을 진행한다.

 

본 논문의 핵심인 RPN에 대해서 정리해보겠다.

RPN은 앞서 언급했듯이 feature map이 주어졌을 때 물체가 있을 법한 위치를 예측하는 것이다.

그리고 다양한 객체를 인식할 수 있도록 다양한 크기의 k개의 anchor box를 이용한다. 여기서 anchor box의 비율은 본 논문에선 1x1, 1x2,2x1 등으로 구성한다.

기본적으로 Feature map 상에서 왼쪽에서 오른쪽으로 sliding window를 적용한다.

RPN

sliding window를 적용하면서 각 위치마다 intermediate feature vector를 뽑고, 여기서 추출된 vector로 regression과 classification을 진행한다.

이 때 RPN에서의 classification은 물체가 있는지 없는지의 여부만 따져서 binary classification을 하게 된다. 그리고 regression은 bounding box의 위치(center_x,center_y, width,height)를 예측해준다.

 

반응형

댓글