1. Yolov5에서는 29개의 하이퍼 파라미터가 존재합니다. 여기에 대해 직접 자신의 데이터에 맞게 커스텀 할 수 있으며, 이렇게 커스텀 작업을 진행하려면 너무 많은 시간과 자원 및 테스트가 필요하기 때문에 보통은 제작자들이 제시하는 값을 사용하는게 효율적이라고 말하고 있습니다.
  2. 우선은 하이퍼 파라미터의 종류에 어떠한 것이 있는지 살펴보겠습니다. 대부분이 Image Augmentaiton 작업을 진행하는 것에 사용되어지고 있습니다. 정확하게 어떤 작업을 하는지 알 수 있어야 추가적인 커스텀이 가능할 것이라 생각합니다.
  3. 제작자들이 만들어 둔 하이퍼 파라미터 표는 5가지 정도가 있습니다. yolo5→data→hyps 에 들어가면 필요한 파일이 다양하게 존재합니다. (Object365, VOC, scratch-high, scratch-low, scratch-med) 저는 VOC를 기준으로 하이퍼 파라미터에 대한 설명을 적어보도록 하겠습니다.

실제 사용되는 obb 하이퍼파라미터

lr0: 0.01  # initial learning rate (SGD=1E-2, Adam=1E-3)
lrf: 0.1  # final OneCycleLR learning rate (lr0 * lrf)
momentum: 0.937  # SGD momentum/Adam beta1
weight_decay: 0.0005  # optimizer weight decay 5e-4
warmup_epochs: 3.0  # warmup epochs (fractions ok)
warmup_momentum: 0.8  # warmup initial momentum
warmup_bias_lr: 0.1  # warmup initial bias lr
box: 0.05  # box loss gain
cls: 0.3  # cls loss gain
cls_pw: 1.0  # cls BCELoss positive_weight
obj: 0.7  # obj loss gain (scale with pixels)
obj_pw: 1.0  # obj BCELoss positive_weight
iou_t: 0.20  # IoU training threshold
anchor_t: 4.0  # anchor-multiple threshold
# anchors: 3  # anchors per output layer (0 to ignore)
fl_gamma: 0.0  # focal loss gamma (efficientDet default gamma=1.5)

hsv_h: 0.015  # image HSV-Hue augmentation (fraction)
hsv_s: 0.7  # image HSV-Saturation augmentation (fraction)
hsv_v: 0.4  # image HSV-Value augmentation (fraction)
degrees: 0.0  # image rotation (+/- deg)
translate: 0.1  # image translation (+/- fraction)
scale: 0.9  # image scale (+/- gain)
shear: 0.0  # image shear (+/- deg)
perspective: 0.0  # image perspective (+/- fraction), range 0-0.001
flipud: 0.0  # image flip up-down (probability)
fliplr: 0.5  # image flip left-right (probability)
mosaic: 1.0  # image mosaic (probability)
mixup: 0.1  # image mixup (probability)
copy_paste: 0.1  # segment copy-paste (probability)

Evolve & Custome Hyper params

해당 값을 위처럼 하나하나 보고 조절해주어도 되지만 편의를 위해서 —evolve라는 옵션을 제작자들이 만들어 둔 것 같습니다. 해당 옵션은 GA 알고리즘이라는 방법을 사용하여 일정부분 훈련을 진행하고, 그에 맞게 하이퍼 파라미터를 자동으로 조절하여 최적의 값을 산출합니다. 해당 옵션을 사용해서 내가 훈련시키기 위한 모델의 하이퍼 파라미터를 미리 파악하고, 해당 값을 사용해서 더 좋은 모델을 훈련해도 좋을 것 같습니다. 물론 모델별로 최적의 하이퍼 파라미터를 가지는 것이 가장 베스트라고 생각하지만, 엄청나게 많은 시간과 자원을 소비합니다.

<aside> 📌 300 Epochs를 돌려 실험해본 결과 300번을 1회 돌고나니 계속해서 반복하는 것을 보았습니다. 이렇게 1G가 생성되어 최적의 하이퍼 파라미터를 산출하고, 계속해서 반복하여 최고의 값을 선출하는 것 같습니다.

</aside>