ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 3-2. Object Detection
    쿠다 4기/<네이버 부스트코스> 컴퓨터 비전 2023. 9. 27. 17:23

    1. Object Detection 이란?

    이번 포스팅에서 다룰 Object Detection은 사진 안의 각 픽셀을 카테고리로 분류하는 것이 아니라 물체 하나하나마다 bounding box로 특정 물체의 위치를 예측하고, 해당 물체의 클래스까지 분류하는 task이다. 위 사진처럼 이렇게 찾은 물체의 위치 정보와 카테고리 정보는 자율주행 기술, OCR등 다양한 분야에 사용된다.

    2. Semantic Two-stage Detector(rR-CNN family)

    1. R-CNN

    첫 번째 딥러닝 기반의 접근으로 Object Detection을 해결한 것은 R-CNN이다. R-CNN의 절차는 먼저 Selective Search등의 방법을  통해 region proposal을 구한다. 이 구한 region들을 CNN classification에 활용할 수 있으로 적절한 사이즈로 warping 한다. 이 warped region을 CNN으로 feature을 추출하고, SVM으로 classification하여 결과적으로 region에 대해 classification을 수행한다. 이 방법의 한계로는 region proposal 하나하나 마다 classification을 수행해야 하기에 속도가 매우 느리고 end-to-end network가 아니기에 학습을 통한 성능 향상에 제한이 있다는 것이다.

     

    2.Fast R-CNN

    속도가 느린 R-CNN을 개선한 방법으로 Fast R-CNN이 있다. 아이디어는 이미지 전체에 대한 feature을 한번에 추출하고ㅡ 이를 재활용하여 여러 object들을 탐지할 수 있도록 한 것이다. 구체적인 과정은 다음과 같다

    1. convolution layer을 통해 입력 이미지 전체의 feature map추출

    2. ROI Pooling을 통해 ROI에 해당하는 부분만 추출 후 고정된 사이즈로 resampling

    3. FC layer을 거쳐 region에 대한 classification을 수행하고, bounding box regression 수행

    R-CNN에 비해 속도가 18배 빨라졌지만, 여전히 region proposal을 위해 휴리스틱한 방법을 사용하기에 성능을 크게 향상시키진 못했다.

     

    3.Faster R-CNN

    앞의 Fast R-CNN의 한계인 region proposal의 방법을 개선하여 최초의 end - to-end object detection구조를 제안하였다. 기존의 time-consuming selective search방법을 Region Proposal Network(RPN) 모듈을 통해 region proposal을 수행하는 것이다.

    RPN 구조는 위와 같다.  Sliding window 방식으로 각 픽셀의 위치마다 k개의 anchor box를 고려한다. Anchor box는 각 픽셀 위치에서 발생할 확률이 높은 bounding box들을 사전에 정의해둔 일종의 후보군이라고 볼 수 있으며, Faster R-CNN에서는 서로 다른 크기와 비율을 가진 9개의 anchor box를 사용했다. 먼저 각 픽셀 위치에서 256 차원의 feature 벡터를 추출합니다. 이 벡터를 입력으로 classfication layer를 거쳐 object인지 object가 아닌지를 판별하는 2k개의 classification 점수를 출력하고, regression layer를 거쳐 4k개의 좌표값을 출력한다. 물론 여기서 사용되는 Loss는 RPN을 위한 것이고, 전체 ROI에 대한 classification loss는 따로 계산된다. 이렇게 RPN을 활용해 anchor box를 고르고, 가장 높은 점수를 가진 box를 고른다음에 이 박스와 IoU가 50%가 넘는 박스들을 삭제한다. 다음으로 점수가 높은 박스에 대해서도 같은방법으로 반복하고 나면, 최종 객체를 나타내는 box만 남는데 이것이 object detection알고리즘의 흐름이다.

     

    4. Single-stage Detector

    앞서 설명한 방법은 Two-stage detector이었는데, 정확도를 조금 포기하지만 더 빠르게 수행할 수 있는 방법인 One-stage detector도 있다. region proposal과정을 수행하지 않고 바로 bounding box regression과 classification을 수행한다. 대표적인 예시로 YOLO(You  Only Look Once) 가 있다. 입력 이미지를 SXS 그리드로 나누고 classification score을 예측하여 정리된 bounding box만을 출력하여 Localization성능이 낮은 YOLO와 달리 SSD(Single Shot MultiBox Detector)는 중간 feature들을 잘 고려한 bounding box를 출력할 수 있도록 동작한다. 따라서 YOLO보다 더 속도가 빠르고 성능이 좋다.

     

    Single-stage detector에서 생기는 class불균형 문제를 어떻게 해결할까?

    single-stage detector은 모든 영역에서 loss가 계산된다. 일반적으로 이미지를 보면 positive sample에 비해 negative sample의 영역이 크기 때문에 클래스 불균형 문제가 발생한다. 이를 완화하는 방법으로 cross-entrophy의 확장개념인 focal loss가 제안되었다.

    위 그림에서 focal loss의 식과 γ 값에 따라 함수의 형태가 결정되는 모습을 그래프에서 확인할 수 있다.  γ 항이 하는 역할은 모델이 잘 예측하고 있는 클래스에 대해서는 완곡한 loss 값을 주고, 잘 예측하지 못하고 있는 클래스에 대해서는 샤프한 loss값을 주는 역할을 한다. 따라서 focal loss를 사용할 경우, cross-entropy loss에 비해 class imbalance 문제를 효과적으로 해결해줄 수 있다.

     

    5. RetinaNet

     

     

    Featured Pyramid Network(FPN)구조도 있다. 이는 U-Net과 매우 유사하지만 concatenation이 아니라 합해주는 방식으로, classification head와 box head가 따로 구성되어있어 별도로 각각 수행해준다. low-level의 특징과 high-level의 특징을 잘 고려하며 multi-scale object를 잘 탐지하기 위해 제안된 구조이고, 이를 모두 합해 RetinaNet이라고 부른다. SSD와 비슷한 속도지만 훨씬 높은 성능을 보인다.

     

    6. DETR

     

    1. CNN을 통해 입력 이미지 특징 추출

    2. positional encoding과 더해 transformer encoder의 입력 토큰으로 넣어줌

    3.  Encoder의 출력으로 얻은 임베딩을 transformer decoder에서 attention 계산시 활용하고, decoder의 입력으로는 object       query를 사용

    4. Transformer decoder가 입력된 object query에 해당하는 object가 무엇인지에 대한 정보를 출력하며, 그 정보를 prediction heads(FFN)을 거쳐 최종적으로 어떤 object인지, 그리고 object가 있다면 그 bounding box의 위치까지 출력하는 구조.

     

Designed by Tistory.