AI 정리

CNN 발전 과정(5) - one-Stage Detector(SSD, YOLO 계열) -Object Detection

dawon-project 2025. 3. 30. 02:45

One-Stage Detector : end-to-end 방식으로서 딥러닝 네트워크 하나만으로 Region Proposal +  Classification + Localization을 통한 Bounding Box까지 한번에 처리하는 방식
-> 이미지 전체를 한번에 분석

ex) YOLO 계열과 SSD 계열

 

Backbone(Feature Extractor: 특징 추출기) : 딥러닝 모델에서 기본이 되는 특징(Feature)을 추출하는 신경망을 의미 => Feature Map 생성
-> 즉 입력 이미지를 받아서 주요 특징을 뽑아주는 역할을 하는 CNN 네트워크
-> Yolo 계열과 SSD 계열의 경우 입력 이미지가 GoogleNet, VGG19와 같은 Backbone을 통과해서 Feature Map을 생성하고 그 Feature Map을 사용해 Localization과 클래스 예측함

 

Confidence score 계산법

- pr(Object) : 물체의 중심 좌표가 그리드에 속한다면 Pr(Object) =1 , 속하지 않는다면 Pr(Object) =0

IoU(Intersection over Union)

- 교집합/ 합집합 뜻으로 Ground truth(실제 Object가 있는 box)와의 합집합 영역을 분모로 하고 교집합 영역을 분자로 한 값
-> 꼭 Ground truth가 아니어도됨

YOLOv1 

: 제일 처음 One-stage Detector 계열 모델로, GoogleNet 스타일의 CNN 구조를 BackBorn으로 사용했다.
-> 다만 GoogleNet의 Inception 모듈 대신에 1 x 1 Conv와 3 x 3 Conv를 조합하여 특징 추출

YOLOv1 (You Only Look Once) 수행 과정

CNN을 통과한 최종 Feature Map에 이와 같은 방법을 적용해서 Classification과 Localization을 수행했다.

1. S x S 크기의 그리드 셀 생성
-> 각 그리드 셀은 자신이 포함하는 객체만 예측

2. 각 그리드 셀마다 B 개의 앵커 박스를 생성
-> 일반적으로 2개의 Bounding Box 예측 -> 물체들의 중심점이 겹치는 갯수가 2개의 물체 이상 없을 것이다라고 가정한 것  

3. 각 앵커 박스에는 5개의 정보 (x, y, w, h, Confidence score C)가 들어 있다.-> Confidence score(C)는 1 ~ 0 값을 가짐

4. 각 그리드 셀마다 c개의 클래스들에 대한 분류 스코어를 산출한다.
-> Confidence Score과 곱해서 최종 클래스별 확률을 계산

5. 최종적으로 S x S x (B x (5 + c)) 크기의 예측 텐서가 출력

6.  각 클래스에 대해서 NMS(Non- Maximum Suppression) 진행

7. 이제 학습을 계속하면서 손실 함수를 바탕으로 실제 GT(Ground Truth) 값과 비교를 통해서 Anchor Box 크기 조정 및 Classification 학습을 하게 된다. ( 1 ~ 6 반복)

8. 최종 Anchor Box가 Bounding Box가 된다.

 

(예시는 알아보기 쉽게 이미지로 한것이지만 실제 마지막 Feature map을 봤을 때는 함축적인(많은 정보가 담긴) 이미지라 알아보기 힘들다.)

Yolov1 의 한계점

  • 작은 크기의 Object는 감지에 대한 성능이 떨어진다. 
    ->CNN의 최종 Feature map에서 진행하기 때문
  • 각 Grid cell 별로 하나의 Object만을 detect함
    -> 각 그리드마다 앵커박스 여러개에 대한 데이터가 있더라도 제일 큰 1개만 선택됨

 

SSD(Single Shot Multibox Detector) -> Yolov1 과 달리 벡터에 P가 없다.

나오게 된 배경 : 작은 크기의 Object는 감지에 대한 성능이 떨어지는 Yolov1의 문제들을 해결하기 위함
-> 여러 Convolution 층의 Feature map에 적용해서 중간중간에 결과를 뽑는 방식
->더욱 다양한 anchor box를 찾아내는 방식

-> 위의 사진을 보면 SSD는 여러 층의 Feature Map에서 객체 검출을 하는 것을 볼 수 있다.

 

SSD의 특징

  • Multi Scale Feature Maps for Detection -> 여러 CNN층의 Feature map에서 객체 검출함
    -> 작은 크기의 물체 또한 감지하기에 쉬워짐
    ->앞쪽 feature map에서 찾을 수록 작은 물체가 detect(감지)되고 뒤쪽 feature map에서 찾을 수록 큰 물체를 감지하기 쉽다.
    -> Convolution 과정이 깊어질수록 큰 영역의 이미지를 탐지하고 초반에는 조그만 영역의 객체를 탐색할 수 있다.

8x8 앞 쪽 feature map / 4x4 뒤쪽 feature map

  • Default Boxex(=Anchor Box) Generation : 6개의 Feature map마다 각각의 가로 , 세로 비가 다르고, 이는 곧 grid cell 크기도 달라진다는 것이기 때문에 6개의 Feature map마다 input image 대비 default box의 크기 비율 Sk를 지정해주는 것
    -> 여러개의 Anchor box 생성

SSD 과정

  • SSD는 중간 중간의 Feature map마다 조절한  anchor box를 바탕으로 객체 검출을 진행하는 것 외에는 순서가 YOLO와 달라진점이 없다. 

 

Yolov3 ->anchor box vector에서  P 사용

-> ResNet의 Residual layer을 사용

-> High-level feature map을 upsampling하여 크기를 맞춘 후 하위 level에 있는 feature map과 합친 결과의 feature map들을 가지고 객체 검출을 함으로써 다양한 크기의 객체를 더 잘 예측할 수 있게 되었다. 

 

Anchor Box(앵커 박스) : 객체 검출 (Object Detection) 모델에서 물체의 위치와 크기를 예측하기 위해 사용되는 고정된 사전 정의된 바운딩 박스 
-> Anchor box를 사용하면 네트워크가 여러 개체, 다른 크기의 개체 그리고 겹치는 개체를 감지할 수 있다.
-> 여러 데이터들을 기반으로 K-mean(평균)을 통해 앵커 박스 표준 크기들을 정함

앵커 박스를 사용하는 대표적인 객체 검출 모델 정리

  • Faster R-CNN
    • 이 모델은 CNN기반의 Region Proposal Network(RPN)을 사용하여, 앵커 박스를 통해 후보 영역을 제안하고 이를 바탕으로 객체를 검출
  • YOLO (You Only Look Once)
    • YOLO 모델은 한 번의 전방향 패스 즉, 마지막 feature map에서 객체를 검출하는 방식으로 동작하며, 이미지 내 그리드 셀마다 고정된 앵커 박스를 사용하여 객체의 위치와 크기를 예측
    • YOLOv3와 같은 버전에서 앵커 박스 개념이 사용
      -> YOLOv3이후로 SSD 같은 Anchor Box 방식 채용
  • SSD 
    • 여러 feature map에서 다양한 Anchor Box를 생성 후  객체 검출

 

 

 

https://wikidocs.net/142280 -> SSD 자료
https://deep-learning00.tistory.com/15 -> Yolov1 자료

https://wikidocs.net/163613 -> Yolov3 자료