CastleJo의 개발일지

Computer Vision - Object Detection

|

Object Detection

요즘 상당히 유명한 주제이다.

Semantic segmentation에서 Instance, Panoptic segmentation으로 넘어가기 위한 한 가지 과제는, 동일한 클래스의 여러가지 객체를 각각 따로따로 구분할 수 있는지 없는지에 있다.

Object Detection은 처음에는 해당 객체의 Bounding Box로 Xmin, Ymin, Xmax, Ymax를 구하는 방식으로 발전되었다.

과거의 Selective search는 영상의 분포를 비슷한 기준으로 바꾼 뒤 도출된 Segmentation을 포함하는 Bounding Box를 추출해주는 방식을 사용했다.

Two-stage detector

  • R-CNN
    영상의 region proposals을 약 2천개가량 구한 뒤, 미리 훈련된 CNN을 사용하여 클래스를 구분하는 방법이다. 각각의 국소적 이미지를 모델에 돌려야하기 때문에 속도가 매우 느린 단점이 있었다.
  • Fast R-CNN
    영상 전체에 대한 feature map을 한번에 추출한 뒤 RoI Pooling을 하여 RoI Feature extraction을 추출한다.
    해당 layer에 미리 훈련된 모델을 사용하여 클래스를 구분한다.
  • Faster R-CNN
    최초의 End-to-End 모델이다.
    미리 Bounding Box의 후보군이 될 수 있는 직사각형, 정사각형을 가진 Anchor box를 가정하는 Rough한 Region Proposal Network을 만든다.
    그 다음 Region Proposal Network에 RoI Pooling을 먹인 이미지를 통과시킨다.
    그렇게 상당히 많은 Box들이 나오게 되는데, 이를 필터링하기 위한 방법이 Non-Maximum Suppression이다.

Single-stage detector

Single stage는 당연히 정확도는 조금 포기하지만 빠른 속도를 보장하는 detector이다.

상당히 간단한 구조를 가지며 RoI 과정이 없다는 장점이 있다.

대표적으로는 You only look once(YOLO)가 있다.
미리 Bounding box와 confidence를 정해놓고 또 각 위치마다 Class probablity map을 정해놓고 더 정교한 박스를 regression해주는 방법이다.

  • SSD: 각 레이어마다 클래스를 구분하여 여러개의 feature map을 통해 다양한 bounding box를 합쳐서 구분하는 방법이다.

Two stage vs One stage

  • One stage는 RoI Pooling이 없어 학습할 때 배경과 같은 모든 영역에서 Gradient를 발생시킨다.
    이 문제를 방지하기 위하여 Focal Loss라는, 가까운 위치는 적은 loss를 주고 먼 위치는 크게 loss를 주는 방법을 사용한다.
    이런 방식이 점점 생기면서 Two Stage보단 One Stage를 좀 더 많이 사용하게 되었다.