YOLO(You Only Look Once) v1~v3

LegendKi·2024년 2월 17일
0

CV

목록 보기
4/6
post-thumbnail

YOLO

YOLO(You Only Look Once)는 실시간 Object detection을 가능하게 하는 빠른 detection 속도와 정확도로 여러 버전에 걸쳐 발전해왔다. 이 글에서는 YOLO의 세 가지 버전, 즉 YOLO v1 부터 v3까지의 각각의 특징을 비교하고 설명한다.

YOLO v1, v2, v3 비교

항목v1v2v3
원본 이미지 크기446 x 446416 x 416416 x 416
Feature ExtractorInception 변형Darknet 19Darknet 53
Grid 당 Anchor Box 수2개(not anchor box)5개Ouput Feature Map당 3개 서로다른 크기와 스케일로 총 9개
Anchor box 결정 방법K-Means ClusteringK-Means Clustering
Output Feature Map 크기(Depth 제외)7 x 713 x 1313 x 13, 26 x 26, 52x 52 3개의 Feature Map 사용
Feature Map Scaling 기법FPN(Feature Pyramid Network

YOLO v1


YOLO v1은 입력 이미지를 S * S Grid로 나누고 각 Grid의 Cell이 하나의 Object에 대한 Detection을 수행한다. 각 Grid Cell 마다 2개의 Bounding Box 후보를 기반으로 Object의 Bounding Box를 예측한다.

YOLO v1 네트워크 구성, Prediction 값


YOLO v1의 네트워크는 이미지를 Grid로 나누고 각 Grid Cell마다 여러개의 Bounding Box와 Class 확률을 예측한다.

  • (20 + 4)개의 Convolutional layers : Feature extraction을 위한 Backbone이 20개로 구성되어 있으며 Inception을 변형한 구조로 이루어져있다. 나머지 4개의 Head와 2개의 Fully Connected layers는 7, 7, 30 사이즈의 3차원 텐서를 출력 값으로 내놓으며 64*64 영역을 대표하고 이 영역에서 검출된 30개
    (x,y,width,height,confidencescore)2+classscore20(x, y, width, height, confidence\,score) * 2 + class\,score\,20개
    를 출력한다.
  • 2개의 Fully connected layers : 최종 예측을 위해 사용된다.
  • 7 * 7 Grid : 전체 이미지를 7 * 7 Grid로 나누어 각 Grid Cell은 객체의 중심이 존재할 경우 해당 객체를 담당한다.
  • Bounding Box와 Class 확률 : 각 Grid Cell은 Bounding Box에 대한 5개의 예측값(x, y, width, height, Confidence Score)과 Class 확률을 예측한다.

YOLO v1 Loss

λcoordi=0S2j=0B1ijobj[(xix^i)2+(yiy^i)2]\lambda_{\text{coord}} \sum_{i=0}^{S^2} \sum_{j=0}^{B} 1_{ij}^{\text{obj}} \left[ (x_i - \hat{x}_i)^2 + (y_i - \hat{y}_i)^2 \right]
+λcoordi=0S2j=0B1ijobj[(wiw^i)2+(hih^i)2]+ \lambda_{\text{coord}} \sum_{i=0}^{S^2} \sum_{j=0}^{B} 1_{ij}^{\text{obj}} \left[ \left( \sqrt{w_i} - \sqrt{\hat{w}_i} \right)^2 + \left( \sqrt{h_i} - \sqrt{\hat{h}_i} \right)^2 \right]
+i=0S2j=0B1ijobj(CiC^i)2+ \sum_{i=0}^{S^2} \sum_{j=0}^{B} 1_{ij}^{\text{obj}} (C_i - \hat{C}_i)^2
+λnoobji=0S2j=0B1ijnoobj(CiC^i)2+ \lambda_{\text{noobj}} \sum_{i=0}^{S^2} \sum_{j=0}^{B} 1_{ij}^{\text{noobj}} (C_i - \hat{C}_i)^2
+i=0S21iobjcclasses(pi(c)p^i(c))2+ \sum_{i=0}^{S^2} 1_{i}^{\text{obj}} \sum_{c \in \text{classes}} (p_i(c) - \hat{p}_i(c))^2

Bounding Box center(x, y) 좌표 Loss
예측 좌표 x, y 값과 Ground Truth 좌표 x, y 값의 오차 제곱을 기반으로 모든 Cell의 2개의 Bounding Box 중에 예측 Bounding Box를 책임지는 Bounding Box만 Loss 계산한다. 1ijobj1_{ij}^{\text{obj}} 는 98개의 Bounding Box 중 객체 예측을 책임지는 Bbox만 1이고 나머지는 0이 된다.

λcoordi=0S2j=0B1ijobj[(xix^i)2+(yiy^i)2]\lambda_{\text{coord}} \sum_{i=0}^{S^2} \sum_{j=0}^{B} 1_{ij}^{\text{obj}} \left[ (x_i - \hat{x}_i)^2 + (y_i - \hat{y}_i)^2 \right]

Bounding Box width, height Loss
예측 너비, 높이값과 Ground Truth 너비 높이 값의 오차제곱을 기반으로 하되 크기가 큰 객체의 경우 오류가 상대적으로 커짐을 제약하기 위해 제곱근을 취한다.

λcoordi=0S2j=0B1ijobj[(wiw^i)2+(hih^i)2]\lambda_{\text{coord}} \sum_{i=0}^{S^2} \sum_{j=0}^{B} 1_{ij}^{\text{obj}} \left[ \left( \sqrt{w_i} - \sqrt{\hat{w}_i} \right)^2 + \left( \sqrt{h_i} - \sqrt{\hat{h}_i} \right)^2 \right]

Object Confidence Loss
예측된 Object Confidence Score와 Ground Truth의 IOU의 예측 오차를 기반으로 Object를 책임지는 Bounding Box Confidence loss + Object 가 없어야하는 Bounding Box의 Confidence Loss이다.

i=0S2j=0B1ijobj(CiC^i)2+λnoobji=0S2j=0B1ijnoobj(CiC^i)2\sum_{i=0}^{S^2} \sum_{j=0}^{B} 1_{ij}^{\text{obj}} (C_i - \hat{C}_i)^2 + \lambda_{\text{noobj}} \sum_{i=0}^{S^2} \sum_{j=0}^{B} 1_{ij}^{\text{noobj}} (C_i - \hat{C}_i)^2

Classification Loss
예측 Classification 확률 오차의 제곱으로 Object를 책임지는 Bounding Box만을 대상으로한다.

i=0S21iobjcclasses(pi(c)p^i(c))2\sum_{i=0}^{S^2} 1_{i}^{\text{obj}} \sum_{c \in \text{classes}} (p_i(c) - \hat{p}_i(c))^2

NMS(Non Max Suppression) 으로 최종 Bounding Box 예측

개별 Class별 NMS 수행
1. 특정 Confidence 값 이하는 모두 제거한다.
2. 가장 높은 Confidence값을 가진 순으로 Bounding Box 정렬한다
3. 가장 높은 Confidence를 가진 Bounding Box의 IOU와 겹치는 부분이 IOU Threshold 보다 큰 Bounding Box는 모두 제거한다.
4. 남아있는 Bounding Box에 대해 3번 Step을 반복한다.

YOLO v1의 문제점

  • 작은 객체에 대한 검출 문제 : 하나의 Grid Cell이 단 하나의 객체만을 예측할 수 있기 때문에 작은 객체나 군집으로 나타나는 객체를 검출하는데 어려움이 있다.
  • 정확도 : 높은 일반화 능력으로 인해 정확도가 다소 떨어진다.
  • Bounding Box의 위치 정밀도 : Bounding Box의 위치를 정밀하게 조정하는데 한계가 있다.

YOLO v2


YOLO v2는 YOLO 시리즈의 두 번째 버전으로 v1의 한계를 개선해 더 빠르고 정확한 Object Detection을 가능하게 했다.

YOLO v2 네트워크 구성

Darknet 19 Backbone


Darknet 19는 Classfication Layer에 Fully Connected Layer를 제거하고 Convolutional layer를 적용해 19개의 Convolutional Layers와 5개의 Max Pooling Layers로 구성된다. 이는 YOLO v2의 Feature Extractor로 사용되고 Batch Normalization을 각 합성곱 층에 적용하여 학습을 안정화시키고 overfitting을 줄인다.

Passthrough modeule을 통한 fine grained feature


좀 더 작은 오브젝트를 Detect 하기 위해서 26 x 26 x 512 feature map의 특징을 유지한 채 13 x 13 x 2048로 reshape 한 뒤 13 x 13 x 1024에 추가하여 feature map을 생성한다.

YOLO v2 Ouput Feature Map

  • 13 x 13 크기의 Feature Map : 이미지 상단에 표시된 긴 입체 구조는 13 x 13 크기의 Feature Map에서 Bounding Box를 예측하는 5개의 Detector를 나타낸다. 각 Detector는 특정 Grid cell에 대한 Object Detection을 담당한다. 예를 들어 Detector 1은 (0, 12)위치의 Grid cell을 기반으로 예측을 수행한다.
  • Bounding Box 별 25개의 정보
    - tx,tyt_x, t_y : Grid cell에 대한 상대적인 Bounding Box의 중심 위치이다.
    • tw,tht_w, t_h : Bounding Box의 width와 height에 대한 상대적 크기이다.
    • p0p_0 : 해당 Bounding Box 내에 객체가 존재할 확률을 나타낸다.
    • p1,p2,,pcp_1, p_2, \ldots, p_c : 객체의 클래스에 대한 확률 정보를 나타낸다.

YOLO v2의 특징

Direct Location Prediction


YOLO v1의 Grid 기반 위치 예측에서 발전하여 YOLO v2는 객체의 위치를 직접 예측한다. 이는 위치 예측의 정확도를 향상시킨다.

bx=σ(tx)+cxby=σ(ty)+cybw=pwetwbh=phethPr(object)IoU(b,object)=σ(to)b_x = \sigma(t_x) + c_x \\ b_y = \sigma(t_y) + c_y \\ b_w = p_w e^{t_w} \\ b_h = p_h e^{t_h} \\ \text{Pr}(\text{object}) \cdot \text{IoU}(b, \text{object}) = \sigma(t_o)
  • (Pw,Ph)(P_w, P_h) : Anchor Box Size
  • (tx,ty,tw,th)(t_x, t_y, t_w, t_h) : 모델 예측 offset 값
  • (bx,by),(bw,bh)(b_x, b_y), (b_w, b_h) : 예측 Bounding Box 중심 좌표와 Size
  • Center 좌표가 Cell 중심을 너무 벗어나지 못하도록 0~1 사이의 시그모이드 값으로 조절한다.

Multi-Scale Training

  • 동적 이미지 크기 조정 : 훈련 도중 입력 이미지의 크기를 동적으로 변화시켜 네트워크가 고정된 이미지 크기에 의존하지 않고 다양한 크기의 객체를 처리하는 능력을 향상시킨다.
  • 배치마다 크기 변경 : 학습 과정에서 일정한 배치가 지날 때마다 입력이미지의 크기를 변경한다. 일반적으로 32의 배수로 설정되며 320에서 608 픽셀 사이로 조정된다.
  • 클래스 분류 층의 동적 생성 : Classfication layer는 Convolution layer를 통해 생성되므로 네트워크는 이미지 크기의 변화에 따라 유연하게 적응한다. 이는 Classification layer가 고정된 크기를 가지지 않고 입력 크기에 따라 동적으로 구성되기 때문이다.

Multi-Scale Training의 장점

  • 유연성 : 모델이 다양한 해상도에서 이미지를 처리할 수 있게 되므로 실제 응용 프로그램에서 다양한 크기릥 입력에 대해 더 나은 성능을 보인다.
  • 객체 크기 적응성 : 모델은 작은 객체부터 큰 객체까지 다양한 크기에 대해 객체를 Detection 할 수 있는 능력을 갖추게 된다.
  • 일반화 능력 향상 : 다양한 크기의 데이터에 대한 노출은 일반화 능력을 향상시켜 overfitting을 방지하는 데 도움이 된다.

Anchor box로 1 Cell에서 여러개의 Object Detection

  • Convolutinoal With Anchor Boxes : 일반적인 YOLO v2의 Grid(13x13)의 하나의 Grid Cell에 여러개의 Anchor Boxes가 할당되며 각 Anchor Box는 다른 비유로가 크기를 가지고 있어 다양한 형태의 객체를 Detection 할 수 있다.
  • 5개의 Anchor Box 하나의 Grid Cell에 할당된 5개의 Anchor Boxes는 다양한 크기와 비율의 객체를 예측하기 위해 사용된다. YOLO v2 모델은 각 Cell 당 Anchor Boxes를 사용하여 Grid 내의 객체들을 Detection 한다.
  • K-Means Clustering : K-Means 클러스터링을 이용해 Anchor Boxes의 크기를 결정하며 이 과정에서 훈련 데이셋에 있는 실제 Bounding Box의 크기를 분석하여 가장 흔한 형태의 Bounding Box 크기를 결정한다. 이를 통해 모델은 주어진 데이터셋에 최적화된 Anchor Boxes를 가질 수 있다.

YOLO v3


YOLO v3는 YOLO시리즈의 세 번재 주요 업데이트로 이전 버전들의 성능을 크게 향상 시킨 Object Detection모델이다. 더 깊은 신경망 구조와 향상된 Feature Extraction능력으로 높은 정확도로 빠른 속도를 보인다.

YOLO v3 모델 아키텍처

Backbone

Backbone은 CNN으로 이미지로부터 고수준의 Feature Extraction을 하는 역할이다. YOLO v3에서는 Darknet-53 네트워크가 이 역할로 다양한 크기의 Convolution 필터와 층을 쌓아 올려 깊이있는 Feature Extraction을 수행한다.

FPN (Feature Pyramid Network)

FPN은 다양한 크기의 Feature Map을 생성한다. 이는 Object detection 시스템이 다양한 크기의 객체를 Detect할 수 있도록 해주며 FPN은 핵심 Feature Map에서 Upsampling을 수행하고 이를 이전 층의 Feature Map과 결합한다. 이렇게 함으로써 더 상세한 정보를 가지는 세밀한 Feature Map과 더 넒은 Context를 가지는 광범위한 Feature Map을 모두 활용할 수 있다.

Feature Pyramid

Feature Pyramid는 FPN으로부터 생성된 여러 크기의 Feature Map(P3, P4, P5 등)을 나타낸다. 각각의 Feature Map은 서로 다른 크기의 객체를 Detection하는 데 사용되고 작은 객체는 더 세밀한 Feature Map에서 큰 객체는 더 광범위한 Feature Map에서 Detect될 수 있다.

Head는 Feature Map을 기반으로 최종적인 객체의 class와 위치를 예측한다. YOLO v3는 각 Feature Map마다 여러개의 Head를 가지고 있으며 이는 객체의 class, 위치, objectness를 예측한다.

YOLO Loss

YOLO Loss는 예측된 객체 정보와 실제 정보 사이의 오차를 측정한다. 이는 네트워크가 훈련을 통해 더나 은 예측을 할 수 있도록 도와주는 지표로, class 예측 오차, 위치 오차, objectness 오차를 포함한다.

Cross Entropy 및 IOU Loss

YOLO v3는 Classfication 오차를 측정하기 위해 Cross Entropy Loss를 사용하고 예측된 Bounding Box와 Ground Truth Bounding Box 사이의 IOU를 측정하기 위해 IOU LOSS를 사용한다.

YOLO v3 네트워크 구성

FPN(Feature Pyramid Network) in YOLO v3

FPN은 각기 다른 해상도의 Feature Map에서 동시에 Object Detection을 수행한다. 이 구조는 여러 레벨의 Feature Map을 생성하여 작은 객체부터 큰 객체까지 다양한 크기의 객체를 효과적으로 Detect 할 수 있도록 한다.

  • 다층적인 Feature Map : YOLO v3의 FPN은 다수의 Feature Map을 통해 이미지를 분석하며 상위 레벨의 Feature Map은 큰 객체를 하위 벨의 Feature Map은 작은 객체를 감지하는데 이용된다.
  • 예측 브랜치 : 각 Feature Map 레벨은 예측 브랜치를 가지고 있으며 각각의 브랜치는 해당 스케일에 최적화된 Object Detection을 수행한다.

다양한 스케일에서의 Object Detection

  • Scale 1 (Stride 32) : 가장 깊은 Feature Map으로 큰 객체를 Detect하는데 사용된다.
  • Scale 2 (Stride 16) : 중간 크기의 Feature Map으로 중간 크기의 객체를 Detect하는데 사용된다.
  • Scale 3 (Stride 8) : 가장 표면적인 Feature Map으로 작은 객체를 Detect하는데 사용된다.

YOLO v3의 특징

FPN(Feature Pyramid Network)의 적용

  • Multi-Scale Detection : YOLO v3는 세 가지 다른 스케일의 Feature Map을 사용하여 Object Detection을 수행한다. 각 Feature Map은 다른 크기의 anchor box를 통해 다양한 크기의 객체를 Detection하도록 설계되었다.
  • 3개의 Feature Map Output : 모델은 3개의 서로 다른 크기와 스케일을 가진 출력을 생성한다. 이를 통해 모델은 작은 객체부터 큰 객체까지 다양한 스케일의 객체를 정확하게 Detect할 수 있다.

Backbone 성능 향상 - Darknet-53

  • Darknet-53 : 53개의 CNN layers로 구성된 Darknet-53은 각 layer에서 더 정교한 Feature Extraction 성능을 가능하게한다.
  • 성능 향상 : 이전 버전의 Darknet-19에 비해 더 많은 CNN layer를 가지고 있어 더 복잡하고 깊은 Feature 학습이 가능하다.

Multi Labels 예측

YOLO v3는 softmax 기반의 Classifier 대신 sigmoid 기반의 logistic classifier를 사용한다. 이 변경으로 인해 YOLO v3는 한 객체에 대해 여러 레이블을 예측할 수 있게 되엇따.

  • Logistic Classifier : 이 Classifier는 각 클래스에 대해 독립적인 예측을 수행하므로 하나의 개체가 여러 class에 속할 수 있음을 인식할 수 있다.
  • Multi Labels : 이 기능은 하나의 이미지 내 객체가 다중 class에 속하는 복잡한 시나리오를 처리하는데 유용하다.

YOLO v3 Output Feature Map

Multi-Scale Feature Maps

  • 13x13: 큰 객체를 Detect하기 위한 상대적으로 저해상도의 Feature Map으로 각 셀은 넓은 영역을 커버하며 큰 객체의 중심을 정확히 예측할 수 있다.
  • 26x26: 중간 크기의 객체를 Detect하기 위한 Feature Map으로 더 세밀한 예측을 가능하게 하며, 중간 크기의 객체에 대한 정보를 더 많이 포함한다.
  • 52x52: 작은 객체를 Detect하기 위한 고해상도 Feature Map으로 각 셀은 더 작은 영역을 대상으로 하며, 작은 객체의 세밀한 위치를 정확히 파악하는 데 도움이 된다.

Bounding Box 속성

  • tx,tyt_x, t_y : Bounding Box의 중심 좌표
  • tw,tht_w, t_h : Bounding Box의 width와 height
  • p0p_0 : Objectness Score로 Bounding Box가 객체를 포함하고 있는지 없는지를 나타내는 점수이다.
  • p1,p2,,pcp_1, p_2, \ldots, p_c : 각 class에 속할 확률을 나타내는 점수이다.

YOLO v3는 이러한 각 속성을 Feature Map의 각 셀에 대해 계산하고 각 해상도의 Feature Map을 통합하여 객체의 위치, 크기, class를 예측한다.

0개의 댓글