코딩하는 해맑은 거북이

[컴퓨터비전] Object Detection - 1 Stage Detectors 본문

AI

[컴퓨터비전] Object Detection - 1 Stage Detectors

#CJE 2023. 5. 3.
본 게시물의 내용은 '부스트캠프 AI Tech - Object Det(송원호)' 강의를 듣고 작성하였다.
해당 글은 아래의 5가지를 다룬다.
📌 1 Stage Detectors 등장 배경
📌 YOLO v1
📌 SSD
📌 YOLO v2
📌 YOLO v3

📌 RetinaNet

📌 1 Stage Detectors 등장 배경

이전에 2 Stage Detectors는 속도가 매우 느리다는 한계가 있었다.

그럼 Real World에서 응용 가능한 Object Detectors로 1 Stage Detectors가 등장하였다.

 

🔷 1 Stage Detectors 특징

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

 

📌 YOLO v1

YOLO는 You Only Look Once의 약자로, 해당 글에서는 ~v3 까지 설명한다.

 

🔷 YOLO 의 역사 (현재는 더 다양한 버전이 있음)

  • 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예측과 클래스를 예측하는 일을 동시에 진행
    • 이미지, 물체를 전체적으로 관찰하여 추론 (맥락적 이해 높아짐)

 

🔷 네트워크

GoogLeNet을 변형한 구조를 Backbone으로 사용하고,

24개의 convolution layer는 특징 추출, 2개의 fully connected layer 는 box의 좌표값 및 확률을 계산한다.

 

🔷 YOLO의 기본 학습방법

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

 

🔷 YOLO v1 의 학습방법  예시

1. 30x7x7 크기의 Feature map을 입력으로 받고, 입력 이미지를 7x7 그리드 영역으로 나눈다.

2. Feature map의 한 grid cell 마다 1x30 크기의 벡터를 생성한다.

1x30 = 5 (Bounding box+Confidence Score) + 5 (Bounding box+Confidence Score) + 20 (Conditional Class Probability)

즉, 2개의 Bounding Box+Confidence Score와 나머지 20개는 각 클래스에 해당할 확률을 나타낸다.

3. 2개의 Confidence Score에 대해 각각 20개의 Conditional Class Probability을 곱해서 2개의 20x1 크기의 Class Score Vector를 생성한다.

 

4. 2~3 과정을 모든 grid cell에 대해 반복한다.

5. 20x1 크기의 Class Score Vector는 2x49 개가 생성된다. 총 98개 bbox가 생성된다.

6. 이후 후처리

- Class Score 값이 Threshold 이하인 값은 0 으로 설정한다.

- Class Score 를 내림차순으로 정렬한다.

- NMS를 수행한다.

 

🔷 Loss

🔷 장점

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

 

 

📌 SSD

🔷 YOLO의 단점

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

 

🔷 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 사용

   → YOLO보다 빠른 속도를 보여주고, 정확도를 향상시켰음

 

🔷 네트워크

VGG-16을 Backbone으로 사용하고, FC Layer 대신 Extra Convolution Layers를 사용한다.

그리고, 입력 이미지 사이즈는 300x300을 받는다.

 

🔷 학습과정

SSD는 Extra Convolution Layers에서 생성된 Multi-Scale Feature Map들을 모두 이용한다.

 

1. Feature map에 3x3 Conv를 적용하여, Channel을 N_Bbox * (offsets + Nc) 로 만든다.

- N_Bbox를 만드는 방법은 Different scale per feature maps, Different as[ect ratio 공식으로 정하고, m이 bbox의 갯수가 된다.

* Default Box : Feature map의 각 cell마다 서로 다른 scale, 비율을 가진 미리 정해진 box 생성(Faster R-CNN의 anchor box와 유사)

2. m=6 이라고 하면, 5x5 Feature map에서 생성되는 출력은 5x5x(6x(4+21)) 이다.

3. 각 Feature map(6 단계)에 대해 위의 연산을 반복하면, 8732개의 bbox가 생성된다.

4. 후처리로 Hard Negative Mining과 NMS(Non Maximum Suppression)를 수행하여 예측한다.

 

🔷 Loss

 

 

 

📌 YOLO v2

YOLO v2는 3가지 Concepts으로 Better, Faster, Stronger 에서 성능을 향상시켰다.

Backbone으로 Darknet-19를 사용한다.

 

🔷 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

 

🔷 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))

 

🔷 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)

 

 

📌 YOLO v3

YOLO v3는 YOLO v2와 비교하여 Backbone과 Multi-scale Feature maps을 개선하였다.

🔷 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 정보를 얻음

 

 

📌 RetinaNet

🔷 1 Stage detectors의 문제점

  • 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)

 

🔷 Focal Loss

RetinaNet은 Focal Loss를 사용하여 1 Stage detectors의 문제점을 개선하였다.

 

Object Detection에서 background와의 class imbalance 조정하거나,

Object Detection 뿐만 아니라 Class imbalance가 심한 Dataset을 학습할 때 이를 활용한다.

 

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

 

Comments