1. 입력 데이터 불균형 해결

모델에 입력하기 전 데이터 불균형 해결 용도로 데이터 수를 필요에 맞게 늘린다.

클래스 0, 1, 2 샘플에 대해 동일한 변환을 수행.

다른 증강 기법은 모델 학습 과정에서 자체적으로 수행할 것이므로 부족한 샘플 수를 늘리는 데 집중.

샘플 수가 적은 클래스 0 는 해당 변환을 2번 수행하여 샘플 수를 2배로 증가시켰다.

  1. 변환

    transform2 = A.Compose([
            A.OneOf([ # 변환 중 하나를 확률적으로 선택. 여기서는 각각 1/4 확률
                A.NoOp(p=1), # 원본 그대로 유지 (변환x)
    
                A.SafeRotate(limit=(90, 90), # Range from which a random angle is picked.
                            border_mode=cv2.BORDER_REPLICATE, 
                            p=1.0),
    
                A.SafeRotate(limit=(180, 180),
                border_mode=cv2.BORDER_REPLICATE, 
                p=1.0),
    
                A.SafeRotate(limit=(270, 270),
                border_mode=cv2.BORDER_REPLICATE, 
                p=1.0),
            ], p=1.0)
        ],bbox_params=A.BboxParams('yolo'))
    
  2. 변환 후 데이터 분포

    지금까지의 결과상, class 0/1/2 중 class 1 에 대한 train/val/test 결과가 유난히 떨어지므로 class 1의 샘플 수가 가장 많도록 의도적으로 조절.

    train
    [3856 5313 3768]
    negative sample
    [258 756 638]
    val
    [ 778 1160  824]
    negative sample
    [ 54 164 141]
    test
    [ 762 1199  805]
    negative sample
    [ 52 163 136]
    

2. 하이퍼 파라미터 튜닝 - yolov11

성능차이가 그렇게까지 크지는 않지만 속도가 더 빠른 v11로 변경하여 수행.

50 epoch 100 iteration

→ 24시간동안 수행한 결과 19번 iteration 까지 수행

## best_hyperparameters.yaml

# 19/100 iterations complete ✅ (83831.56s)
# Results saved to runs/detect/tune2
# Best fitness=0.12938 observed at iteration 7
# Best fitness metrics are {'metrics/precision(B)': 0.37343, 'metrics/recall(B)': 0.27888, 'metrics/mAP50(B)': 0.25289, 'metrics/mAP50-95(B)': 0.11566, 'val/box_loss': 1.40477, 'val/cls_loss': 4.8316, 'val/dfl_loss': 1.34261, 'fitness': 0.12938}
# Best fitness model is runs/detect/train9
# Best fitness hyperparameters are printed below.
lr0: 0.00833
lrf: 0.01038
momentum: 0.98
weight_decay: 0.00039
warmup_epochs: 3.42688
warmup_momentum: 0.70109
box: 6.14484
cls: 0.52543
dfl: 1.40943
hsv_h: 0.01202
hsv_s: 0.67783
hsv_v: 0.37822
degrees: 0.0
translate: 0.1006
scale: 0.53258
shear: 0.0
perspective: 0.0
flipud: 0.0
fliplr: 0.64925
bgr: 0.0
mosaic: 0.9856
mixup: 0.0
copy_paste: 0.0

results.png

best fitness model runs/detect/train9