본문 바로가기

부스트캠프 AI Tech/[Week9] Object Detection (1)

[Week9] Object Detection - 1 stage detector [Day3]

1. 1 Stage Detectors

 

*2 stage Detectors

  • RCNN, FastRCNN, SPPNet, FasterRCNN ...
    1. Localization (후보 영역 찾기)
    2. Classification (후보 영역에 대한 분류)
  • Limitation : 속도가 매우 느림
  • Real World에서 응용 가능한 Object Detectors는 없을까?

 

*2 stage detectors vs 1 stage detectors

*1 stage Detectors

  • Localization, Classification이 동시에 진행
  • 전체 이미지에 대해 특징 추출, 객체 검출이 이루어짐 → 간단하고 쉬운 디자인
  • 속도가 매우 빠름 (Real-time detection)
  • 영역을 추출하지 않고 전체 이미지를 보기 때문에 객체에 대한 맥락적 이해가 높음
    • Background error가 낮음
  • YOLO, SSD, RetinaNet, …

 

*History

 

 

2. YOLO v1

 

2.1 Overview

You Only Look Once History

  • YOLO v1 : 하나의 이미지의 Bbox와 classification 동시에 예측하는 1 stage detector 등장
  • YOLO v2 : 빠르고 강력하고 더 좋게
    • 3가지 측면에서 model 향상
  • YOLO v3 : multi-scale feature maps 사용
  • YOLO v4 : 최신 딥러닝 기술 사용
    • BOF : Bag of Freebies, BOS: Bag of Specials
  • YOLO v5: 크기별로 모델 구성
    • Small, Medium, Large, Xlarge

 

*접근 전략

 

*YOLO 특징

  • Region proposal 단계 X
  • 전체 이미지에서 bounding box예측과 클래스를 예측하는 일을 동시에 진행
    • 이미지, 물체를 전체적으로 관찰하여 추론 (맥락적 이해 높아짐)

 

2.2 Pipeline

*Network

  • GoogLeNet 변형
    • 24개의 convolution layer : 특징 추출
    • 2개의 fully connected layer : box의 좌표값 및 확률 계산


  • 입력 이미지를 SxS 그리드 영역으로 나누기 (S=7)
  • 각 그리드 영역마다 B개의 Bounding box와 Confidence score 계산 (B=2)
    • 신뢰도(confidence) = Pr(𝑂𝑏𝑗𝑒𝑐𝑡) × 𝐼𝑂𝑈𝑝𝑟𝑒𝑑 𝑡𝑟𝑢𝑡ℎ
  • 각 그리드 영역마다 C개의 class에 대한 해당 클래스일 확률 계산 (C=20)
    • conditional class probability = Pr(𝐶𝑙𝑎𝑠𝑠𝑖 |𝑂𝑏𝑗𝑒𝑐𝑡)

*Output channel의 의미

  • S x S 그리드에서 1셀당 2개의 bbox를 가짐. 따라서 1셀의 30채널중 2개의 bbox 정보를 가짐.
  • 5개 (x,y,w,h,c) x 2(bbox의수) = 10

 

  • 나머지 20채널은 class의 갯수 (Pascal dataset 기준임)

 

  • 2개의 bbox confidence를 각각의 클래스의 확률과 곱해준다. -> 2개의 20x1 클래스 예측 확률이 나온다.

 

  • 총 98개의 각각의 클래스에 대한 예측 확률이 나온다.

 

 

  • 98개의 bbox 예측 확률에서 threshold를 적용하여 임계값보다 낮은 score들을 제거한다.
  • 이후 각 클래스마다 내림차순으로 정렬
  • NMS를 적용하여 한번더 제거
  • 남은 bbox는 prediction bbox

 

 

 

 

*Loss

  • Localization loss :
    • 첫번째 시그마 - 각 그리드의 셀별로, 두번째 시그마 - 각 bbox마다
    • Object를 포함하고 있을때, 중심점의 위치를 regression loss를 계산
    • 첫번째 시그마 - 각 그리드의 셀별로, 두번째 시그마 - 각 bbox마다
    • Object를 포함하고 있을때, w, h regression loss를 계산
  • Confidence loss :
    • 첫번째 시그마 - 각 그리드의 셀별로, 두번째 시그마 - 각 bbox마다
    • Object를 포함하고 있을때, confidence score를 계산
    • 첫번째 시그마 - 각 그리드의 셀별로, 두번째 시그마 - 각 bbox마다
    • Object를 포함하고 있지 않을때, confidence score를 계산 (람다는 두항의 밸런스를 조절)
  • Classification Loss :
    • 첫번째 시그마 - 각 그리드의 셀별로, 두번째 시그마 - 각 클래스마다
    • Object를 포함하고 있을때, 클래스 예측 확률에 대한 MSE를 계산

 

 

2.3 Results

  • 기존 Faster R-CNN 보다 FPS가 높다
  • Fast R-CNN은 background error가 높은데 반해 YOLO는 낮은편
  • 우측 상단 Fast R-CNN과 YOLO를 앙상블하니 결과가 좋더라

 

* 장점

  • Faster R-CNN에 비해 6배 빠른 속도
  • 다른 real-time detector에 비해 2배 높은 정확도
  • 이미지 전체를 보기 때문에 클래스와 사진에 대한 맥락적 정보를 가지고 있음
  • 물체의 일반화된 표현을 학습
    • 사용된 dataset외 새로운 도메인에 대한 이미지에 대한 좋은 성능을 보임

 

 

 

3. SSD

3.1 Overview

*YOLO 단점

  • 7x7 그리드 영역으로 나눠 Bounding box prediction 진행 → 그리드보다 작은 크기의 물체 검출 불가능
  • 신경망을 통과하며 마지막 feature만 사용 → 정확도 하락

 

*YOLO vs SSD

  • input size가 다름.
  • YOLO는 FC를 두개 사용하여 속도가 느려짐.  SSD는 1x1 conv 사용 FC 사용X.
  • YOLO는 마지막 feature map에서 detection 수행
  • SSD는 VGG backbone output에서 extra convolution 진행하여 추가로 feature map을 여러개를 만듦.

 

 

*SSD 특징

  • Extra convolution layers에 나온 feature map들 모두 detection 수행
    • 6개의 서로 다른 scale의 feature map 사용
    • 큰 feature map (early stage feature map)에서는 작은 물체 탐지
    • 작은 feature map (late stage feature map)에서는 큰 물체 탐지
  • Fully connected layer 대신 convolution layer 사용하여 속도 향상
  • Default box 사용 (anchor box)
    • 서로 다른 scale과 비율을 가진 미리 계산된 box 사용

 

3.2 Pipeline

*Network

  • VGG-16(Backbone) + Extra Convolution Layers
  • 입력 이미지 사이즈 300 x 300

 

*Multi-scale feature maps

  • 3x3 conv를 통해 일정한 채널 갯수로 변환

 

  • Offsets : Anchor box의 중심점의 좌표, 너비, 높이 -> 총 4개
  • Nc : class의 갯수 + background -> 총 21개

 

  • NBbox는 bbox의 갯수
  • bbox의 갯수를 정하는 방법?
  • Different scale per feature maps 방법을 적용하여 0.2~0.9 스케일에 해당하는 여러 스케일의 feature map을 만듦
  • Different aspect ratio 활용 
    • ar은 가로와 세로길이의 비율을 나타냄.
    • wk, hk 는 위에서 구한 scale과 가로,세로 비율인 ar을 곱해서 bbox의 영역을 정함
    • 그리고 ar=1인 박스에서 s1,s2의 중간 scale의 anchor box를 하나더 생성.
    • Example - 총 6개의 box

*Default Box

  • feature map의 각 cell마다 서로 다른 scale, 비율을 가진 미리 정해진 box 생성
  • Faster R-CNN의 anchor box와 유사

6 default boxes per each cells

*Output boxes

  • Predicted offset default box는 총 6개
  • 각 box별 class 예측 확률 21개
  • 위 정보들이 한 셀에 들어있음 (6x25) = 150개

 

 

  • 각 Convolution Layer의 default box의 수가 다름
  • low-level feature map 부터 high-level feature map이 존재하므로 작은 물체부터 큰 물체를 탐지 가능

 

 

  • Multi scale feature map을 활용하므로 작은 물체, 큰 물체 둘다 탐지 가능

 

 

 

*Training

  • Hard negative mining 수행
  • Non maximum suppression 수행
  • Loss : Localization loss + Confidence loss
    • Localization loss : anchor box에서 gt box로 가려면 얼마나 가야하는지 delta에 대해 학습
    • Confidence loss : (?)

 

 

3.3 Results

  • SSD는 YOLO보다 mAP, FPS둘다 개선되었음

 

 

4. YOLO Follow-up

 

4.1 YOLO v2

*Concepts

  • 3가지 파트에서 model 향상
    • Better : 정확도 향상
    • Faster : 속도 향상
    • Stronger : 더 많은 class 예측 (80 -> 9000)

 

*Better

  • Batch normalization
    • mAP 2% ↑
  • High resolution classifier
    • YOLO v1: 224x224 이미지로 사전 학습된 VGG를 448x448 Detection 태스크에 적용
    • YOLO v2 : 448x448 이미지로 새롭게 finetuning
    • mAP 4% ↑
  • Convolution with anchor boxes
    • Fully connected layer 제거
    • YOLO v1 : grid cell의 bounding box의 좌표 값 랜덤으로 초기화 후 학습
    • YOLO v2 : anchor box 도입
    • K means clusters on COCO datasets
      • 5개의 anchor box
    • 좌표 값 대신 offset 예측하는 문제가 단순하고 학습하기 쉬움
    • mAP 5% ↑
  • Fine-grained features

    • 크기가 작은 feature map은 low level 정보가 부족
    • Early feature map은 작은 low level 정보 함축
    • Early feature map을 late feature map에 합쳐주는 passthrough layer 도입
    • 26x26 feature map을 분할 후 결합
  • Multi-scale training
    • 다양한 입력 이미지 사용 {320, 352, …, 608}
    • ≠ multi-scale feature map
    • 단순 image sampling! (Multi-scale feature map 사용한것은 아님)

 

 

*Faster

  • Backbone model
    • GoogLeNet → Darknet-19
  • Darknet-19 for detection

    • 마지막 fully conected layer 제거
    • 대신 3x3 convolution layer로 대체
    • 1x1 convolution layer 추가
      • channel 수 125 (=5 x (5+20))

 

 

*Results

 

 

 

 

*Stronger

  • Classification 데이터셋(ImageNet), detection 데이터셋(Coco) 함께 사용
    • Detection 데이터셋 : 일반적인 객체 class로 분류 ex) 개
    • Classification 데이터셋 : 세부적인 객체 class로 분류 ex) 불독, 요크셔테리어
  • “개”, “요크셔테리어”, 배타적 class로 분류하면 안된다.
  • WordTree 구성 (계층적인 트리)

    • Ex. “요크셔테리어” = 물리적객체(최상위 노드) – 동물 – 포유류 – 사냥개 – 테리어(최하위 노드)
    •  ImageNet 데이터셋과 CoCo 데이터셋 합쳐서 구성 : 9418 범주
  • ImageNet 데이터셋 : Coco 데이터셋 = 4: 1
    • Detection 이미지 : classification loss는 특정범주에 대해서만 loss 계산
      • ex. 개 이미지 : 물리적객체 – 동물 –포유류 – 개 에 대해서 loss 계산
    • Classification 이미지 : classification loss만 역전파 수행 (IoU)

 

 

 

4.2 YOLO v3

*Darknet-53

 

  • Skip connection 적용
  • Max pooling x, convolution stride 2사용
  • ResNet-101, ResNet-152와 비슷한 성능, FPS 높음

 

 

*Multi-scale Feature maps

  • 서로 다른 3개의 scale을 사용 (52x52, 26x26, 13x13)
  • Feature pyramid network 사용
    • High-level의 fine-grained 정보와 low-level의 semantic 정보를 얻음

 

5. RetinaNet

 

5.1 Overview

*1 Stage Detector Problems

RPN이 없기 때문에 grid를 나누었고, grid별로 bbox를 무조건 예측하도록 함. 따라서 background를 포함할 확률이 굉장히 높게 되고, Class imbalance문제가 생기게 됨. 따라서 이 문제를 해결하기 위한 방법 도입. (Focal loss)

  • Class imbalance
    • Positive sample(객체 영역) < negative sample(배경영역)
  • Anchor Box 대부분 Negative Samples (background)
    • 2 Stage detector의 경우 region proposal에서 background sample 제거 (selective search, RPN)
    • Positive/ negative sample 수 적절하게 유지 (hard negative mining)

 

 

5.2 Focal loss

*Concept

 

  • 새로운 loss function 제시 : cross entropy loss + scaling factor
  • 쉬운 예제에 작은 가중치, 어려운 예제에 큰 가중치
  • 결과적으로 어려운 예제에 집중

 

*Result

  • 이후 One-stage methods의 단점이였던 성능면에서 큰 향상을 이룸.

 

*사용

 

  • Object Detection에서 background와의 class imbalance 조정
  •  Object Detection 뿐만 아니라 Class imbalance가 심한 Dataset을 학습할 때 이를 활용
    • Classification, Segmentation, Kaggle, etc

 

 

*Summary

1 stage detector 연구 동향 및 paper

  • Anchor
    • [DAFS] Dynamic Anchor Feature Selection for Single-Shot Object Detection [ICCV' 19]
    • [FSAF] Feature Selective Anchor-Free Module for Single-Shot Object Detection [CVPR' 19]
  • Multi-scale feature map
    • M2Det: A Single-Shot Object Detector based on Multi-Level Feature Pyramid Network [AAAI' 19]
    • Learning Rich Features at High-Speed for Single-Shot Object Detection [ICCV' 19]
  • 경량화
    • YOLOv4: Optimal Speed and Accuracy of Object Detection [arXiv' 20]
    • Scaled-YOLOv4: Scaling Cross Stage Partial Network [CVPR’ 21]