AI/이론

Object Detection

N-analyst 2021. 3. 10. 23:32
Object Detection

Object Detection


✅ Two-stage detector

1️⃣ R-CNN

image.png

  1. Input image를 구한다.
  2. Selective Search 같은 것을 통해서 region proposals을 먼저 구한다.(2천개 이하)
  3. 이제 각 region propsals을 Image Classification Network에 넣는다. 이때 이미지의 크기는 입력에 맞게 조정해서 넣어준다.
  4. 그 해당 결과로 분류를 하게 된다.

📌 단점

  • 각 region proposals을 다 CNN에 넣어서 처리해야 하기 때문에 속도가 굉장히 느리다.
  • region proposals는 별도의 hand design된 알고리즘을 사용해서 학습을 통해서 성능 향상의 한계가 있다.


2️⃣ Fast R-CNN

영상 전체에 대한 feature를 한번에 추출하고 그 다음에 이를 재활용을 해서 여러 object들을 detection할 수 있게 한다.

1. 원본 이미지로 부터 Conv. feature map를 얻는다. image.png



2. ROI(Region of Interest) pooling을 통한 feature map에서 ROI feature를 추출한다.

image.png

  • 일정 size로 resize한다. ROI pooling layer는 고정된 크기를 가질 수 있게 만든다.
  • ROI는 region proposal의 후보 위치를 의미한다.



3. 각 ROI에 대해서 Class와 box prediction를 구하게 된다.

image.png

📌 한계점

  • 하지만 여기에서도 역시 아직 region proposals은 hand design된 알고리즘을 사용하여 한계가 존재하였다.

3️⃣ Faster R-CNN

📌 기본 개념

image.png

image.png

  • 두 영역의 교집합을 합집합으로 나눈 값인 IoU를 통해서 값을 계산할 수 있다.

📌 Anchor Boxes

image.png

  • 각 위치에서 발생할 거 같은 box들의 후보군의 크기를 미리 정해 놓는다.
  • scale별로 가로,세로 비율별로 준비해 놓는다.
  • GT(Ground Truth)와 IoU값 > 0.7 → positive sample
  • GT와 IoU값 < 0.3 → negative sample

image.png

  • 기존 영역 제안을 RPN을 통해서 제안하는 형식으로 바뀌게 된다.


RPN을 좀 더 자세히 살펴보자 image.png

  • sliding window방식으로 돌면서 각 위치마다 k개의 anchor boxes를 고려한다.
  • 이때 각 위치에서 256-d의 feature map을 추출한다.
  • Object인지 아닌지 $2k$개의 scores를 가지고 class를 구별한다.
  • $4k$개(x,y,w,h)의 좌표값을 가지고 reg layer를 지난다. 좀 더 정교한 bbox를 만들기 위해서


📌 Non-Maximum Suppression(NMS)

일정 score이상 나오는 box들이 많고 일정 threshold를 정하기 힘들기 때문에 매우 많이 겹쳐진 bounding box들이 생성되게 된다. NMS는 이를 효과적으로 filtering하기 위한 방법이다.

image.png

  • 1 단계 : objectiveness score가 가장 높은 상자 선택
  • 2 단계 : 이 상자의 IoU를 다른 상자와 비교
  • 3 단계 : IoU가 50% 이상인 경계 상자 제거
  • 4 단계 : 다음으로 높은 객관성 점수로 이동
  • 5 단계 : 2-4 단계 반복


🔎 요약

image.png



✅ Single-stage detector

📌 One-stage vs Two-stage

image.png

  • 큰 차이는 ROI pooling이 없다.
  • 이 때문에 One-stage가 더 빠른 속도를 가진다.

1️⃣ YOLO

image.png

  1. 먼저 input image를 SxS grid로 나눈다.
  2. 각 grid마다 4개의 좌표와 1개의 confidence score를 B개씩 가지고 예측을 하게 된다.
  3. 그리고 각 위치에 따른 class score도 따로 예측하게 된다.

image.png

학습 시킬때도 이전에 fast R-CNN에서 학습한 방식과 동일하다. Ground Truth와 매치된 anchor box를 positive로 간주하고 학습 label를 positive로 걸어주게 된다.


📌 전체적인 구조

image.png

  • 여기서 B=2, C=20을 사용하였다.
  • 따라서 마지막 결과의 channel이 30인것은 위에 5B+C를 계산한 값이 된다.
  • 각 위치마다 30d의 결과가 나오게 되는 것이다.
  • 여기서 grid를 SxS로 나누는데 여기서는 7의 값을 가진다.



2️⃣ SSD(Single Shot MultiBox Detector)

image.png

  • 각 feature map에 해상도에 맞게 bounding box를 출력할 수 있는 구조로 만들어졌다.


📌 전체적인 구조

image.png



✅ Two-Stage detector vs One-Stage detector

1️⃣ Focal loss

📌 Class imbalance problem

image.png

  • One-Stage의 경우 ROI pooling이 없다보니까 모든 영역에서 loss가 계산이 된다.
  • 실제 영상은 배경이 더 크고 실제 찾으려는 물체는 배경보다 작은 영역에 존재하게 된다. 이는 쓸모 없는 영역에 대한 계산이 많아 지는 것을 의미한다.
  • Class imbalance란 #neg. anchor boxes >> #pos. anchor boxes일 때를 의미한다.
  • 모든 One-Stage의 경우 이런 문제를 가지고 있다.


📌 Focal loss

image.png

  • Class imbalance 문제를 해결하기 위한 방안
  • Cross entropy의 확장이다. Cross entropy에 $(1-p_{t})^{\gamma}$값이 곱해진 형태이다.
  • $\gamma$값이 커질수록 정답이 아니었을때 gradient가 더 큰 값을 가지는 것을 알 수 있다.
  • 이는 정답이 아니었을때 더 큰 weight를 주게 된다.


2️⃣ RtinaNet

image.png

  • One-Stage Network이다.

📌 성능

image.png



✅ Detection with Transformer

Transformer는 NLP에서 굉장히 성공적이다. 이를 CV에서도 적용하면 좋겠다라는 생각으로 CV에 적용한 사례를 살펴보자.

  • Vit(Vision Transformer) by Google
  • DeiT(Data-efficient image Transformer) by Facebook
  • DETR(DEtection TRansformer) by Facebook


1️⃣ DETR

image.png