from ultralytics import YOLO

model = YOLO('yolo11n.pt')

results = model.train(
    data='dataset.yaml',
    epochs=100,
    imgsz=320,
    batch=64,
    device="cuda:0",
    workers=2,

    # Optimizer & LR
    optimizer='SGD',
    lr0=0.01,
    lrf=0.1,
    weight_decay=0.0005,
    cos_lr=True,
    warmup_epochs=5,
    warmup_momentum=0.8,
    warmup_bias_lr=0.1,

    # 성능 최적화
    amp=True,
    cache="disk",

    # Loss
    box=5.0,
    cls=2.0,
    dfl=1.0,

    # Augmentation
    hsv_s=0.10,
    hsv_v=0.10,
    translate=0.05,
    scale=0.10,
    fliplr=0.2,
    mosaic=0.3,   # 안정화
    mixup=0.1,    # 안정화

    # Project
    project="runs/train",
    name="yolo11n_custom",
    exist_ok=False,

    # Save
    save_period=10,
    patience=5, # early stopping
)

									 Class     Images  Instances    Box(P.     R          mAP50      mAP50-95  
                   all       8546       8546      0.919      0.887      0.936      0.566
          bounding box       8546       8546      0.919      0.887      0.936      0.566     0.555