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

'AI > 이론' 카테고리의 다른 글

Panoptic segmentation  (0) 2021.03.11
Instance segmentation  (0) 2021.03.11
Conditional generative model  (0) 2021.03.11
torch.autograd  (0) 2021.03.10
Semantic segmentation  (0) 2021.03.09
Image classification II  (0) 2021.03.09
Annotation data efficient learning  (2) 2021.03.08
Image classification I  (0) 2021.03.08

+ Recent posts