반응형

기본 개념 

객체 탐지(Object Detection, OD) 입력으로 받은 이미지에서 객체의 위치를 찾고(Localization), 객체가 무엇인지 분류(Classification)하는 2가지 작업이 이뤄져야 하는 보다 복합적인 작업입니다. 그러다보니, 별도의 데이터 포맷 형태나 측정 지표가 개발되어 사용되고 있습니다.

 

2024.10.03 - [Python/Data Prep] - [CV] 객체 탐지(Object Detection) 대표 데이터 포맷 공부 | COCO, Pascal VOC, YOLO

 

[CV] 객체 탐지(Object Detection) 대표 데이터 포맷 공부 | COCO, Pascal VOC, YOLO

데이터 포맷주어진 이미지와 그에 해당하는 클래스가 대응되는 분류 문제와 다르게 객체 탐지 문제는 객체를 찾고(Localization), 이를 분류(Classification)해야 하는 두가지 일이 존재하기 때문에 데

seanpark11.tistory.com

 

2024.10.02 - [노트/Computer Vision] - [CV] 객체 탐지(Object Detection) 성능 판단 지표 정리 | IOU, mAP, FPS, FLOPS

 

[CV] 객체 탐지(Object Detection) 성능 판단 지표 정리 | IOU, mAP, FPS, FLOPS

IoUIoU (Intersection Over Union)은 모델이 얼마나 객체 탐지를 정확하게 했는지, 즉 모델이 찾은 객체의 위치가 실제 데이터셋의 ground truth와 겹치는지를 확인하는 지표 입니다. 영문 명칭에서 확인할

seanpark11.tistory.com

 

두가지 주요한 작업(Localization, Classification)이 있다보니, 이를 2가지로 나눠 처리하는 모델을 2-Stage Detector라고 합니다. 대표적인 모델은 R- CNN 이름이 붙은 모델들이 해당합니다. 여기서 2가지 단계는 Region Proposal, Classification으로 구분할 수 있습니다.  

OD 모델의 구조 [1]

Region Proposal 

먼저 이미지에서 객체가 있을 가능성이 높은 영역을 찾아냅니다. 후보 영역을 제안(생성)한다는 명칭으로 전체 이미지에서 객체가 있을 법한 영역을 예측하는 것 입니다. Region Proposal 방법은 각 모델마다 제시될 정도로 다양하며, 이전 모델에서 갖고 있던 한계나 문제점을 개선하는 방식으로 진화해왔습니다. 

Classification 

다음으로 첫 번째 단계에서 추출한 영역들을 정교하게 분류하여 객체의 클래스를 추론합니다. 때로는 Region Proposal과 경계에 있는 과정으로 박스의 위치를 조정하는 과정을 거치기도 합니다. 앞으로 살펴볼 2-Stage Detector 모델들의 변천사를 살펴볼 때 앞서 이야기한 2가지를 중점적으로 살펴볼 예정입니다. 


2-Stage Detector 변천사

R-CNN

Regions with CNN features(R-CNN)이란 이름에서 알 수 있는 것처럼 OD 분야에서 최초로 CNN을 적용시킨 모델이 R-CNN 입니다. R-CNN에서 사용한 방법은 다음과 같습니다. 

 

1. 입력 이미지에서 Selective Search를 통해 약 2000개의 영역(Region of Interest, RoI)를 추출합니다.

2. RoI의 크기를 분류에 사용할 크기로 변형합니다. (warped region)

3. 각 2000개의 RoI를 CNN에 통과해 특징을 추출합니다.

4. 추출된 특징을 SVM에 넣어서 분류를 진행합니다. 여기서 분류는 전체 클래스 C개 + 배경 여부를 포함한 C+1개에 대해 분류를 진행했습니다. 

5. Selective Search 결과로 나온 RoI의 Bounding Box(bbox)에 대해 선형회귀를 통해 bbox 위치를 조정하는 과정을 거칩니다. 

 

만약 Selective Search에 대한 보다 깊은 이해를 원하신다면, 아래 파일을 참고해보시기 바랍니다. 

Schuyler Smith_Selective Search for Object Recogntion.pdf
12.95MB

SPPNet

R-CNN은 CNN의 입력 이미지가 고정되어 있다보니 그 크기를 맞춰주는 과정이 필요했고, 모든 RoI (약 2,000개)에 대해 CNN을 통과해야 해서 시간이 다소 소요되는 단점이 있습니다. Spatial Pyramid Pooling Network (SPPNet)은 기존에 있던 이미지를 조정(Crop/Warp)하는 과정 대신에 Spatial Pyramid Pooling을 도입하면서 이러한 문제를 해결하고자 등장했습니다.

 

SPP 구조 [2]

 

Spatial Pyramid Pooling은 CNN을 통과해서 나온 특징 맵들을 영역만 나눠서 고정된 길이의 표현을 동일하게 전달하는 방식입니다. 해당 개념이 제안된 논문에서는 4x4, 2x2, 1x1의 세 영역을 max pooling으로 받는다고 설명합니다. Region Proposal에서 이러한 방식을 도입하 항상 동일한 크기의 입력을 받을 수 있고, 여러 RoI를 통과해야 하는 불편함을 제거할 수 있게 됐습니다.

 

Spatial Pyramid Pooling 개념 [2]

Fast R-CNN

이름에 나와있는 것처럼 R-CNN의 속도에 대한 문제를 해결하기 위해 등장한 것이 Fast R-CNN 모델입니다. 기존 R-CNN 모델은 Region Proposal 과정에서 여러 가지 요소들 때문에 굉장히 많은 시간이 소요됩니다. 하지만, Fast R-CNN에서는 이러한 속도 저하 현상을 해결할 수 있는 여러 아이디어를 제안하여 문제를 해결하였습니다.

 

먼저 Fast R-CNN의 전반적인 과정을 살펴보면 다음과 같습니다. ([3], [4])

 

1. 이미지를 CNN을 통과시켜 특징 맵을 추출합니다. (여기서 CNN에 사용되는 모델은 backbone이라고 불립니다.)

2. 이미지에서 Selective Search를 통해 RoI를 추출합니다. 여기서 이미지를 추출하는 것이 아니라, (x,y,h,w)와 같이 정의된 튜플을 추출합니다. 

3. 1에서 추출한 특징 맵에 줄어든 비율만큼 튜플을 변경시키는 과정을 수행합니다. (이를 RoI Projection라 합니다.)

4. 특징 맵과 변경된 튜플을 RoI Pooling을 통과해 고정된 사이즈의 벡터를 얻습니다.

5. 이렇게 얻은 고정된 벡터를 Fully-Connected layer(FC)에 통과시켜 하나는 분류를 수행하고, 나머지 하나는 bbox의 위치를 조정하는 bbox regressor에 전달합니다. 

 

Fast R-CNN의 전반 구조 [5]

 

이전에 없던 새로운 개념들이 추가되었는데, 이에 대해 아래에서 세부적으로 살펴보고 위에 흐름을 다시 살펴보면 이해에 도움이 될 것 입니다. 

RoI Pooling

RoI Pooling은 특징 맵에서 RoI를 일정한 크기의 영역으로 나눈 후 max pooling을 수행하는 방법입니다. 이 방법은 앞서 SPP에서 유사한데, 논문에서도 SPP의 단일 층에 대해서  수행하는 특수 케이스로 설명하고 있습니다. 

훈련 (Multi-task loss)

Fast R-CNN 모델에서는 RoI Pooling 후 FC를 통과한 값을 Softmax classifier와 bbox regressor로 전달합니다. (여기서 클래스의 개수는 배경을 포함한 C+1 개) 각각의 작업의 손실함수는 분류에 대해서는 크로스 엔트로피를 사용하고 있으며, bbox에 대해서는 Smooth L1 loss를 사용합니다. 

 

Smooth L1 loss [5]

 

한편, 두가지 작업을 수행하기 위한 새로운 손실로 Multi-task loss를 제안하는데, 이는 분류와 bbox 회귀의 값을 합한 형태로 구성됩니다. 

 

Multi-task loss [5]

Hierachical sampling

Fast R-CNN에서는 N개의 이미지, R개의 region proposal을 한다고 할 때 이미지에서 R/N개의 region proposal을 샘플링합니다. 이렇게 하여 한 배치 안의 같은 이미지에서 추출된 RoI들에 대해서는 forward, backward 연산에서 메모리를 공유할 수 있도록 해서 효율성을 높입니다.

 

이외에도 Truncated SVD 등 연산 효율성을 높이려는 시도를 통해 속도를 개선하였습니다.

Faster R-CNN

Fast R-CNN에서 여러 시도를 통해 속도 측면에서 개선을 이뤘지만, 여전히 CPU에서 동작하는 Selective Search [6]를 사용하기 때문에 시간의 제약은 존재하고 있습니다. Faster R-CNN은 더 빨라진 R-CNN을 말하는 것처럼, 다른 방식(RPN)을 사용하여 연산의 방식을 개선하였습니다. 

Region Proposal Network (RPN)

기존 Fast R-CNN에서는 Selective Search를 통해 RoI Projection을 하는 방식으로 region proposal을 진행했습니다.  Faster R-CNN에서는 서로 다른 크기(scale)와 가로-세로비율(aspect ratio)을 적용한 사전에 만들어진 anchor box라는 개념을 제시합니다. 크기 [128, 256, 512] / 비율 [1:1, 1:2, 2:1] 3가지씩을 제시해 총 9 개의 서로 다른 anchor box를 사전에 정의합니다. 이로써 더 다양한 크기의 객체를 탐지할 수 있게 됩니다. 

 

RPN은 CNN backbone에서 만들어진 특징 맵을 입력으로 받아 정의된 anchor box를 생성합니다. 그리고 그것들을 3x3 conv을 통과시켜 intermediate layer를 생성하고, 1x1 conv를 통과시켜 binary classification(객체인지 아닌지)과 bbox regression(x, y, w, h)을 수행할 수 있게 전달합니다. 이 일련의 과정을 통해 이미지의 region proposal을 수행합니다. 

 

RPN 구조 [6]

Non Maximum Suppression (NMS)

하지만, 여러 proposal이 만들어지는만큼 겹치는 것도 발생하게 되는데 이를 제거하기 위해 NMS라는 방법을 사용합니다. NMS는 IoU를 기준으로 일정 기준 이상인 proposal에 대해서는 중복된 영역으로 간주하고 제거하는 방식으로 동작합니다. (아래처럼 요약할 수 있습니다.[7])

 

1) 특정 클래스의 Score(혹은 confidence) 중 가장 높은 proposal을 선택 및 최종 제안에 추가

2) 해당 클래스에 대한 Score가 높은 proposal과 IoU 값이 일정 기준 이상이면, 동일한 물체라고 간주하고 제거 

3) 나머지 제안 중 Confidence가 높은 proposal로 바꿔 1~2 과정 반복

Faster R-CNN 전체 과정

Faster R-CNN은 Fast R-CNN과 큰 차이는 없지만, region proposal을 RPN으로 대체합니다. 전체 과정은 아래와 같이 요약될 수 있습니다. [8]

 

1. 원본 이미지에 대해서 anchor box를 생성합니다. 

2.  CNN backbone에서 특징 맵을 추출합니다.

3. 추출한 특징 맵을 3x3, 1x1 conv를 통과시켜 class layer, bbox regressor에 전달합니다.

4. 1에서 만든 anchor box와 RPN에서 학습한 class score, bbox regressor를 통해 region proposal을 수행합니다. NMS로 불필요한 proposal은 제거하고 class score 상위 anchor box를 추출합니다. 그리고 regressor로 anchor box를 조정합니다.

5. RPN이 학습하는데 사용할 수 있는 anchor를 1) ground truth와 가장 큰 IoU를 갖는 경우 2) ground truth와 IoU가 0.7을 넘는 것으로 선택합니다. 

6. region proposal과 ground truth와 IoU가 0.5를 기준으로 이상이면 positive / 그 외에는 negative로 레이블링한 샘플을 선택합니다.

7. 추출했던 특징 맵과 6을 통해 얻은 샘플에 대해 RoI Pooling을 수행합니다. (Fast R-CNN 참고)

8. 이렇게 얻은 고정된 벡터를 Fully-Connected layer(FC)에 통과시켜 하나는 분류를 수행하고, 나머지 하나는 bbox의 위치를 조정하는 bbox regressor에 전달하고 결과 값에서 Multi-task loss를 계산해 Fast R-CNN 모델을 학습합니다. 여기서 RPN과 Fast R-CNN 학습을 위해 아래와 같은 4단계를 반복합니다.

참고자료

[1] Alexey Bochkovskiy, Chien Yao Wang, Hong Yuan Mark Liao. YOLOv4: Optimal Speed and Accuracy of Object Detection

[2] Kaming He, Xiangyu Zhang, Shaoqing Ren, Jian Sun. "Spatial Pyramid Pooling in Deep Convolutional Networks for Visual Recognition"

[3] https://blog.naver.com/siniphia/221538276677

[4] https://herbwood.tistory.com/8

[5] Ross Girshick. "Fast R-CNN" 

[6] Shaoqing Ren, Kaiming He, Ross Girshick, Jian Sun. "Faster R-CNN : Towards Real-Time Object Detection with Region Proposal Networks"

[7] https://ctkim.tistory.com/entry/Non-maximum-Suppression-NMS

[8] https://herbwood.tistory.com/10

 

 

 

 

반응형