[RSH #3] YOLOv5 prior knowledge

윤하은·2024년 1월 16일
1

Robocup Soccer Humanoid

목록 보기
3/4
post-thumbnail

YOLOv5

Github : https://github.com/ultralytics/yolov5



YOLO architecture

YOLO 시리즈는 이미지에서 대상 객체를 end-to-end 접근법을 사용하여 감지하고 위치를 파악하며, 동시에 클래스와 위치를 예측한다. 일반적으로 Input, Backbone, Neck, Head 네 부분으로 구성된다.

  • Input : 데이터 증가 방법이 적용되어 훈련 데이터를 다양화한다.

  • Backbone : 서로 다른 수준의 특성을 추출한다.

  • Neck : 업샘플링 및 특성 연결 레이어를 사용하여 Feature를 융합시켜 더 많은 세부 정보를 제공한다.

  • Head : 객체의 클래스와 위치에 대한 최종 예측이 생성되고, 이를 지상 실측 라벨과 비교하여 손실 함수의 결과를 생성한다.




YOLO v5 architecture

  • Input : K-means 알고리즘을 통한 적응형 앵커 계산과 자기 적응형 이미지 스케일이 적용된다.

  • Backbone : Focus CSPDarknet53를 사용하여 초점 메커니즘을 도입하여 작은 객체 특징을 더 효과적으로 학습한다.

  • Neck : Cross stage partial connections (CSP)를 도입하여 FPN에 적용하여 특성 추출 네트워크를 최적화한다.

  • Head : FPN의 출력을 활용한 다중 스케일 객체 감지를 수행한다.




Auto Learning Bounding Box Anchors

YOLOv3에서 K-means 및 genetic learning 알고리즘을 사용하여 사용자 지정 데이터셋의 바운딩 박스 분포를 기반으로 앵커 박스를 학습하는 아이디어를 소개했다.

YOLOv5 네트워크는 바운딩 박스를 앵커 박스 차원 목록에서의 편차로 예측한다. 앵커 박스의 가장 극단적인 차이는 아주 크고 가느다란 기린이나 아주 넓고 납작한 마른 물갈퀴같은 것을 감지하려고 할 때 발생할 수 있다. YOLOv5에서는 사용자가 자체 데이터를 입력하면 모든 YOLO 앵커 박스가 자동으로 학습된다.

다음 YOLOv5 구성 파일에서 훈련 데이터에서 학습된 앵커의 예를 볼 수 있다.




Model Configuration Files

.yaml 파일은 네트워크의 다양한 레이어만을 지정하고 그 레이어를 블록의 레이어 수로 곱해서 압축된 형식이다. 실제로 n, s, m, l, x에 해당하는 모델 구성 파일에서 depth_multiple과 width_multiple를 제외하고는 동일한 값으로 구성되어 있다.

다음은 YOLOv5s 구성 파일이다:

# YOLOv5 🚀 by Ultralytics, AGPL-3.0 license

# Parameters
nc: 2  # number of classes
depth_multiple: 0.33  # model depth multiple
width_multiple: 0.50  # layer channel multiple
anchors:
  - [10,13, 16,30, 33,23]  # P3/8
  - [30,61, 62,45, 59,119]  # P4/16
  - [116,90, 156,198, 373,326]  # P5/32

# YOLOv5 v6.0 backbone
backbone:
  # [from, number, module, args]
  [[-1, 1, Conv, [64, 6, 2, 2]],  # 0-P1/2
   [-1, 1, Conv, [128, 3, 2]],  # 1-P2/4
   [-1, 3, C3, [128]],
   [-1, 1, Conv, [256, 3, 2]],  # 3-P3/8
   [-1, 6, C3, [256]],
   [-1, 1, Conv, [512, 3, 2]],  # 5-P4/16
   [-1, 9, C3, [512]],
   [-1, 1, Conv, [1024, 3, 2]],  # 7-P5/32
   [-1, 3, C3, [1024]],
   [-1, 1, SPPF, [1024, 5]],  # 9
  ]

# YOLOv5 v6.0 head
head:
  [[-1, 1, Conv, [512, 1, 1]],
   [-1, 1, nn.Upsample, [None, 2, 'nearest']],
   [[-1, 6], 1, Concat, [1]],  # cat backbone P4
   [-1, 3, C3, [512, False]],  # 13

   [-1, 1, Conv, [256, 1, 1]],
   [-1, 1, nn.Upsample, [None, 2, 'nearest']],
   [[-1, 4], 1, Concat, [1]],  # cat backbone P3
   [-1, 3, C3, [256, False]],  # 17 (P3/8-small)

   [-1, 1, Conv, [256, 3, 2]],
   [[-1, 14], 1, Concat, [1]],  # cat head P4
   [-1, 3, C3, [512, False]],  # 20 (P4/16-medium)

   [-1, 1, Conv, [512, 3, 2]],
   [[-1, 10], 1, Concat, [1]],  # cat head P5
   [-1, 3, C3, [1024, False]],  # 23 (P5/32-large)

   [[17, 20, 23], 1, Detect, [nc, anchors]],  # Detect(P3, P4, P5)
  ]



참고

0개의 댓글