또르르's 개발 Story

[33] Object detection 본문

부스트캠프 AI 테크 U stage/이론

[33] Object detection

또르르21 2021. 3. 10. 14:54

1️⃣ Semantic segmentation과 Instance segmentation 다른 점

 

Semantic segmentation은 각각의 Instacne를 비교하지 못하지만 (ex. 사람, 자동차이 같은 색깔로 mapping) Instance segmentation과 panoptic segmentation은 각각의 Instance를 비교할 수 있습니다.(ex. 사람1, 사람2, 자동차1, 자동차2, .... 등 모두 다른 색깔로 mapping)

 

[Kirillov et al., CVPR 2019]

 

2️⃣ Object detection

 

"Classification + Box localization" 을 합친 기술

 

 

3️⃣ Two-stage detector

1) Gradient-based detector (e.g., HOG)

약 10년 전에는 경계선을 찾아서 물체를 탐지하고 인식하는 기술이 발달했습니다.

따라서 경계선을 바탕으로 물체를 찾는 알고리즘을 설계한 것이 HOG입니다.

 

여기서 SVM는 간단한 선형 classifier를 통해서 관심 영역인지 아닌지를 판별기를 학습했습니다.

 

[Dalal et al., CVPR 2005]

 

2) Selective Search

사람이나 특정 물체뿐 아니라 다양한 물체 후보군에 대해서 영역을 특정해서 제안해주는 방식입니다.

즉, bounding box를 제안(box proposal)해주는 것입니다.

 

  1. Over-segmentation : 영상을 비슷한 색끼리 잘게 분할을 하는 방법

  2. Iteratively merging similar regions : 비슷한(색깔, gradient 특징, 분포 등) 영역들끼리 합침

  3. Extracting candidate boxes from all remaining segmentations : 영역들을 포함하는 bounding box를 추천해서 물체의 후보군으로 사용

 

[Uijlings et al., IJCV 2013]

 

 

3) R-CNN

CNN을 사용한 최초의 Object Detection입니다.

 

  1. Selective Search와 같은 방법으로 region proposals를 수행 (~2k개 미만으로)

  2. CNN에 적절한 input size로 warped 시킨 후, CNN에 넣고 classification 수행 (classifier는 SVM 사용)

 

[Girshick et al., CVPR 2014]

 

단점으로는 각각의 Region proposal 하나하나마다 모델에 넣어서 processing해야하기 때문에 속도가 굉장히 느리고, region proposal은 hand design 된 알고리즘이기 때문에 학습을 통해서 성능 향상에 한계가 존재합니다.

 

 

4) Fast R-CNN

Fast R-CNN의 경우에는 전체 image를 CNN에 넣어서 Feature map을 만들고, 그 후에 ROI(Region of Interest)를 수행합니다.

 

  1. CNN을 통해 전체 image의 feature map을 뽑아냅니다. (FCN이기 때문에 입력 Size를 wrap할 필요 X)

  2. ROI에 해당하는 Feature만을 추출하고 해당 부분을 Resizeing(resampling)합니다.

  3. Classification (Softmax)와 Bounding box regression (bbox regression)을 수행합니다.

    여기서 3~4개 정도의 FC layer들을 사용하게 됩니다.

 

[Girshick et al., ICCV 2015]

 

5) Faster R-CNN

Faster R-CNN에서는 region proposal을 neural network 기반으로 대체했습니다.

Object detection에서는 Faster R-CNN이 최초의 End-to-end 모델(모든 파트들이 neural network 기반)이 되었습니다.

 

 

(1) IOU (Intersection Over Union)

 

IOU는 두 영역의 overlap을 측정하는 기술입니다.

 

IOU=

 

https://www.pyimagesearch.com/2016/11/07/intersection-over-union-iou-for-object-detection/

 

이 수치가 높을수록 두 영익이 잘 정합했다라고 볼 수 있습니다.

 

https://www.pyimagesearch.com/2016/11/07/intersection-over-union-iou-for-object-detection/

 

 

(2) Anchor boxes

 

Anchor box는 Feature Map의 각 위치에서 발생할 것 같은 box들을 미리 정의해놓은 후보군입니다.

ratio와 scale이 다른 영역들, 각 위치마다 미리 정의해놓고 사용하게 됩니다.

 

 

Faster R-CNN에서는 서로 다른 ratio 3개와 서로 다른 scale 3개, 총 9개의 anchor box를 사용했습니다. 

따라서 각 anchor box의 IOU를 계산해 일정 비율을 넘은 box 한 개만 positive sample을 하고, 나머지는 negative sample로 판별합니다.

 

  • IoU with GT > 0.7 ⇒ positive sample
  • IoU with GT < 0.3 ⇒ negative sample

 

이때, negative sample에 대해 Loss를 줘서 Loss를 최소화시키는 방향으로 학습을 하게 됩니다. 

 

 

(3) RPN (Region Proposal Network)

 

영상 하나에서부터 공유되는 feature map을 뽑은 후, RPN에서 Region Proposal을 여러 개 뽑게 되고, 뽑아진 Region Porposal을 가지고 ROI pooling을 수행합니다.

 

[Ren et al., NeurIPS, 2015]

 

RPN은 다음과 같은 방법으로 수행합니다.

 

  1. feature map에서는 sliding window 방식으로 위치를 얻으면서, 매 위치마다 k개의 anchor box를 고려합니다.

  2. 각 위치에서 256-d짜리 feature vector를 추출합니다.

  3. 2k개의 Object인지 아닌지를 판단하는 Classfication score를 산출합니다.

  4. 4k개의 bounding box를 regression하는 regression output을 산출합니다.

    (여기서 Anchor box가 있는데 regression을 다시 해주는 이유는 anchor box가 촘촘하면 문제가 되지 않지만, 엄청난 계산 복잡도가 생깁니다. 따라서 적당한 크기의 anchor box를 사용하면서 regression으로 정확한 위치를 잡아주는 방법을 사용합니다.)

 

[Ren et al., NeurIPS, 2015]

 

(4) Non Maximum Suppression

 

하지만 RPN을 사용하게 되면 test할 때는 중복된 bounding box가 엄청나게 생성될 가능성이 높습니다.

따라서 bounding box를 효과적으로 filtering 해주기 위한 방법으로 Non-Maximum Suppression을 사용합니다.

 

https://www.analyticsvidhya.com/blog/2020/08/selecting-the-right-bounding-box-using-non-max-suppression-with-implementation/

 

4️⃣ Single-stage detector

 

Single Stage Detecter는 정확도를 좀 포기하더라도 속도를 확보해서 Real time detection이 가능하도록 설계한 것이 목적입니다.

 

Single stage는 region proposal을 기반으로 한 ROI pooling을 사용하지 않고 곧바로 box regression과 classification을 하기 때문에 구조가 간단하고 빠른 수행시간을 보여줍니다.

 

[Ndonhong et al., Offshore Technology Conference 2019]

 

1) YOLO

YOLO는 S x S grid로 나누고 각각의 bounding box와 confidence score를 예측합니다.

Bounding box로 regression을 수행하는 부분도 포함되어 있습니다.

 

[Redmon et al., CVPR 2016]

 

YOLO에서 학습시킬 때도 Anchor box 개념과 동일합니다.

Ground Truth와의 match는 Anchor box를 positive로 간주하고, 학습 label을 positive로 걸어주게 됩니다.

 

[Redmon et al., CVPR 2016]

 

YOLO Architecture의 구성은 일반 CNN의 구성과 거의 동일합니다.

CNN을 돌려 나오는 최종 결과는 7 x 7의 해상도에 30 channel의 결과가 나오는 것을 확인할 수 있습니다.

 

여기서 channel이 30개가 나오는 이유는 bounding box의 anchor는 2개를 사용했고, Class는 20개를 고려했기 때문에,

channel의 개수는 (x, y, w, h, obj score) : 5개 x B : 2개 + class : 20개 = 30으로 나오게 됩니다. (5B+C)

 

[Redmon et al., CVPR 2016]

 

여기서 S x S grid로 나눈다고 했는데 S=7이 나오게 됩니다. S는 convolution network의 최종 출력의 해상도로 결정됩니다.

 

 

2) SSD(Single Shot MultiBox Detector)

YOLO는 맨 마지막 layer에서만 prediction을 하기 떄문에 localization 정확도가 떨어지는 문제를 가지고 있습니다.

따라서 이러한 문제를 해결한 SSD가 나오게 되었습니다.

 

SSD는 Multi-scale object를 더 잘 처리하기 위해서 중간 feature를 각 해상도에 적절한 bounding box들을 출력할 수 있도록, Multi-scale 구조를 만들었습니다.

 

아래 그림과 같이 8 x 8 feature map에서는 bounding box가 작은 크기를 갖게 되고, 4 x 4 feature map에서는 bounding box가 큰 크기를 가지게 됩니다. 즉, 각 feature map마다 해상도에 적절한 bounding box의 크기들을 예측할 수 있도록 만들었습니다.

 

[Liu et al., ECCV 2016]

 

SSD의 Architecture는 다음과 같습니다.

 

VGG-16을 Backbone으로 해서 처음 feature map에서 마지막 feature map까지 출력할 수 있게끔 Multi-scale classifier가 있습니다. 따라서 각 Scale마다 Object detection 결과를 출력해서 다양한 scale의 결과에 더 잘 대응할 수 있도록 만들었습니다.

 

출력 channel의 값은 (class의 개수 + (x,y,w,h) : 4개) x anchor box 개수 : 4 or 6개로 구성됩니다.

 

[Liu et al., ECCV 2016]

 

이때 8732라는 숫자는 다음과 같은 계산으로 나오게 됩니다.

각 layer에서 parsing된 detection bounding box의 총합을 보면 총 8732개가 나오게 됩니다.

각 feature map마다 몇 개의 anchor box가 각 위치마다 존재하는지를 계산해서 모든 layer를 더해주면 anchor box의 숫자가 나오게 됩니다.

 

[Liu et al., ECCV 2016]

 

SSD는 YOLO보다 훨씬 높은 성능과 훨씬 빠른 속도를 보여줍니다.

 

[Liu et al., ECCV 2016]

 

5️⃣ Two-stage detector vs. one-stage detector

 

Single stage 방법들은 ROI pooling이 없기 때문에 모든 영역에서의 Loss가 계산되고, 많은 gradient가 발생하게 됩니다. 

이 문제는 아래 사진과 같이 전체 사진에서 Postive 부분은 엄청 적은 반면에 배경과 같은 유용하지 못한 정보들은 엄청나게 많은 계수 문제로 Class imbalance 문제를 발생시키게 됩니다. 모든 Single-stage detector들이 이 문제를 가지고 있습니다.

 

https://unsplash.com/photos/GmVv2VmIxlc

 

이러한 Class imbalance 문제를 해결하기 위해서 Focal Loss라는 것이 제안되었습니다.

Focal loss는 Cross Entropy의 확장이라고 볼 수 있습니다.

Cross Entropy의 앞에 (1pt)γ를 붙이고, γ에 따라서 function의 shape을 결정하게 됩니다.

 

[Lin et al., ICCV 2017]

 

여기서 파란색 선은 Cross Entropy이며, Truth class에 대한 score가 높게 나와서 정답을 잘 맞히게 되는 영역 (well-classificated examples)은 낮은 Loss값을 반환하고, 맞추지 못한 부분은 큰 Loss값을 반환합니다.

 

Focal loss는 이러한 Cross Entropy에 확률 term을 붙여준 형태인데, 이 의미는 정답을 잘 맞힌 영역은 loss를 더 낮게 만들고, 맞추지 못한 영역은 더 sharp 한 Loss를 반환합니다.

 

γ가 큰 경우에 오답일 때는 더 작은 Loss를 갖게 되는데 이 의미는 gradient (위 선의 기울기)를 취하게 될 때 더 급격하게 변하게 됩니다. 

 

 

1) RetinaNet

Pyramid 구조를 가져서 low level의 feature와 high level의 feature를 잘 활용하면서도 각 scale별로 물체를 잘 찾기 위한 구조를 갖기 위해 설계가 되었습니다.

 

중간 중간에 feature들을 뒷 layer에 넘겨주고 거기서 덧셈 operation이 일어나게 됩니다.

 

(c)와 (d)는 class head와 box head가 따로따로 구성이 되어서 classification과 box regression을 dense 하게 수행하게 됩니다.

 

[Lin et al., ICCV 2017]

 

RetinaNet은 SSD보다 빠른 속도를 가지면서 높은 성능을 보였습니다.

 

[Lin et al., ICCV 2017]

 

2) DETR

DETR은 Tranformer을 Object detection에 적용한 사례입니다.

 

(1) 기본적으로 CNN을 통과한 feature와 postional encoding을 쌍으로해서 입력 토큰을 만들어줍니다. (backbone 영역)

 

(2) 입력 토큰을 encoder의 입력으로 하나씩 넣어주고, output을 뽑습니다. (encoder 영역)

 

(3) Object query(transformer에게 위치에 대해서 질의하는 query 문; 학습된 postional encoding)와 encoder에서 뽑은 output을 decoder에 넣어서 해당 위치에 어떤 물체가 있는지를 출력합니다. (decoder 영역)

 

(4) 빨간색, 초록색, 노란색, 파란색 등 각각의 위치에 있는 물체 정보나 질의의 결과가 parsing 되어서 나오게 됩니다. (prediction heads)

 

[Carion et al., ECCV 2020]

 

여기서 Object query를 넣어줄 때 무작정 넣어주는 것이 아닌 하나의 image에서 최대 n개의 objects가 발생 가능하다라는 maximum값을 미리 정해줍니다. 따라서 N개의 object query를 물어보고 N개의 위치에 대해서 bounding box를 출력해줍니다.

 


 

최근에는 box regression 대신에 중심점을 찾아서 하는 방법이나 box의 양 끝점을 찾아서 regression을 피해서 효율적 계산을 취하는 방법들이 개발되었습니다.

 

[Zhou et al., arXiv 2019]

 

 

Comments