๐Ÿฝ๏ธ SCANEAT ํ”„๋กœ์ ํŠธ ์ฝ”๋“œ ์ •๋ฆฌ

๐Ÿ“‹ ๋ชฉ์ฐจ

  1. ๋ฐ์ดํ„ฐ ์ค€๋น„ & ์ „์ฒ˜๋ฆฌ
  2. ๊ธฐ๋ณธ ํ•™์Šต
  3. ๋ฐ์ดํ„ฐ ์ฆ๊ฐ•
  4. Fine-tuning ์‹œ๋„
  5. ๋ชจ๋ธ ๊ฒฝ๋Ÿ‰ํ™”

1๏ธโƒฃ ๋ฐ์ดํ„ฐ ์ค€๋น„ & ์ „์ฒ˜๋ฆฌ

๐Ÿ“‚ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ

scaneat_yolov8/
โ”œโ”€โ”€ train/
โ”‚   โ”œโ”€โ”€ images/  (621์žฅ)
โ”‚   โ””โ”€โ”€ labels/  (CVAT ๋ผ๋ฒจ๋ง)
โ”œโ”€โ”€ valid/       (38์žฅ)
โ”œโ”€โ”€ test/        (์†Œ๋Ÿ‰)
โ””โ”€โ”€ data.yaml

๐Ÿ”ง ์ „์ฒ˜๋ฆฌ ์ฝ”๋“œ

# Box โ†’ Polygon ๋ณ€ํ™˜ (Segmentation์šฉ)
def fix_all_labels_to_polygon(label_dir):
    for txt_file in Path(label_dir).glob('*.txt'):
        # Box format (cx, cy, w, h) โ†’ Polygon (4์ )
        if len(coords) == 4:
            x1 = cx - w/2
            y1 = cy - h/2
            x2 = cx + w/2
            y2 = cy + h/2
            # 4์  polygon์œผ๋กœ ๋ณ€ํ™˜
            polygon = f"{cls} {x1} {y1} {x2} {y1} {x2} {y2} {x1} {y2}"

ํ•ต์‹ฌ: YOLOv8-seg๋Š” Polygon ํ•„์š”! Box๋งŒ ์žˆ์œผ๋ฉด ๋ณ€ํ™˜ ํ•„์ˆ˜


2๏ธโƒฃ ๊ธฐ๋ณธ ํ•™์Šต

๋ชจ๋ธ: YOLOv8s-seg

from ultralytics import YOLO

model = YOLO('yolov8s-seg.pt')

results = model.train(
    data='data.yaml',
    epochs=100,
    imgsz=640,
    batch=8,
    device=0,  # GPU

    # ๊ธฐ๋ณธ ์ฆ๊ฐ•
    degrees=10.0,
    fliplr=0.5,
    mosaic=0.0,  # ์ฒ˜์Œ์—” ๋”

    patience=20,
)