μ½˜ν…μΈ λ‘œ κ±΄λ„ˆλ›°κΈ°

κ³ κΈ‰ μ‚¬μš©μž 지정

Ultralytics YOLO λͺ…령쀄과 Python μΈν„°νŽ˜μ΄μŠ€λŠ” λͺ¨λ‘ κΈ°λ³Έ 엔진 싀행기에 λŒ€ν•œ 높은 μˆ˜μ€€μ˜ 좔상화일 λΏμž…λ‹ˆλ‹€. νŠΈλ ˆμ΄λ„ˆ 엔진을 μ‚΄νŽ΄λ³΄κ² μŠ΅λ‹ˆλ‹€.



Watch: λ§ˆμŠ€ν„°λ§ Ultralytics YOLOv8 : κ³ κΈ‰ μ‚¬μš©μž 지정

베이슀 νŠΈλ ˆμ΄λ„ˆ

베이슀 νŠΈλ ˆμ΄λ„ˆμ—λŠ” 일반적인 μƒμš©κ΅¬ νŠΈλ ˆμ΄λ‹ 루틴이 ν¬ν•¨λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€. μ˜¬λ°”λ₯Έ ν˜•μ‹μ„ λ”°λ₯΄κΈ°λ§Œ ν•˜λ©΄ ν•„μš”ν•œ ν•¨μˆ˜λ‚˜ 연산을 μž¬μ •μ˜ν•˜μ—¬ λͺ¨λ“  μž‘μ—…μ— 맞게 μ‚¬μš©μž 지정할 수 μžˆμŠ΅λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄, μ΄λŸ¬ν•œ ν•¨μˆ˜λ₯Ό μž¬μ •μ˜ν•˜μ—¬ 자체 μ‚¬μš©μž 지정 λͺ¨λΈκ³Ό 데이터 λ‘œλ”λ₯Ό 지원할 수 μžˆμŠ΅λ‹ˆλ‹€:

  • get_model(cfg, weights) - ν•™μŠ΅ν•  λͺ¨λΈμ„ κ΅¬μΆ•ν•˜λŠ” ν•¨μˆ˜
  • get_dataloader() - λ°μ΄ν„°λ‘œλ”λ₯Ό λΉŒλ“œν•˜λŠ” ν•¨μˆ˜ μžμ„Έν•œ λ‚΄μš©κ³Ό μ†ŒμŠ€ μ½”λ“œλŠ” λ‹€μŒμ—μ„œ 확인할 수 μžˆμŠ΅λ‹ˆλ‹€. BaseTrainer μ°Έμ‘°

탐지 νŠΈλ ˆμ΄λ„ˆ

μ‚¬μš© 방법은 λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€. YOLOv8 DetectionTrainer λ₯Ό ν΄λ¦­ν•˜κ³  μ‚¬μš©μž μ§€μ •ν•©λ‹ˆλ‹€.

from ultralytics.models.yolo.detect import DetectionTrainer

trainer = DetectionTrainer(overrides={...})
trainer.train()
trained_model = trainer.best  # get best model

탐지 νŠΈλ ˆμ΄λ„ˆ μ‚¬μš©μž 지정

νŠΈλ ˆμ΄λ„ˆλ₯Ό 맞좀 μ„€μ •ν•΄ λ³΄κ² μŠ΅λ‹ˆλ‹€. 을 μ‚¬μš©ν•˜μ—¬ μ‚¬μš©μž 지정 탐지 λͺ¨λΈμ„ ν•™μŠ΅ν•©λ‹ˆλ‹€. λ₯Ό 직접 μ§€μ›ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. 이 μž‘μ—…μ„ μˆ˜ν–‰ν•˜λ €λ©΄ κΈ°μ‘΄ the get_model κΈ°λŠ₯을 μ œκ³΅ν•©λ‹ˆλ‹€:

from ultralytics.models.yolo.detect import DetectionTrainer


class CustomTrainer(DetectionTrainer):
    def get_model(self, cfg, weights):
        ...


trainer = CustomTrainer(overrides={...})
trainer.train()

이제 νŠΈλ ˆμ΄λ„ˆλ₯Ό 더 μ‚¬μš©μž 지정해야 ν•œλ‹€λŠ” 것을 μ•Œκ²Œ λ˜μ—ˆμŠ΅λ‹ˆλ‹€:

  • μ‚¬μš©μž 지정 loss function.
  • μΆ”κ°€ callback 맀 10μ΄ˆλ§ˆλ‹€ Google λ“œλΌμ΄λΈŒμ— λͺ¨λΈμ„ μ—…λ‘œλ“œν•©λ‹ˆλ‹€. epochs 방법은 λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€:
from ultralytics.models.yolo.detect import DetectionTrainer
from ultralytics.nn.tasks import DetectionModel


class MyCustomModel(DetectionModel):
    def init_criterion(self):
        ...


class CustomTrainer(DetectionTrainer):
    def get_model(self, cfg, weights):
        return MyCustomModel(...)


# callback to upload model weights
def log_model(trainer):
    last_weight_path = trainer.last
    print(last_weight_path)


trainer = CustomTrainer(overrides={...})
trainer.add_callback("on_train_epoch_end", log_model)  # Adds to existing callback
trainer.train()

콜백 트리거 이벀트 및 μ§„μž… 지점에 λŒ€ν•œ μžμ„Έν•œ λ‚΄μš©μ€ 콜백 κ°€μ΄λ“œλ₯Ό ν™•μΈν•˜μ„Έμš”.

기타 엔진 ꡬ성 μš”μ†Œ

λ‹€μŒκ³Ό 같이 μœ μ‚¬ν•˜κ²Œ μ‚¬μš©μž 지정할 수 μžˆλŠ” λ‹€λ₯Έ ꡬ성 μš”μ†Œλ„ μžˆμŠ΅λ‹ˆλ‹€. Validators 그리고 Predictors. 이에 λŒ€ν•œ μžμ„Έν•œ λ‚΄μš©μ€ μ°Έμ‘° μ„Ήμ…˜μ„ μ°Έμ‘°ν•˜μ„Έμš”.



생성 2023-11-12, μ—…λ°μ΄νŠΈ 2024-02-03
μž‘μ„±μž: glenn-jocher (4), RizwanMunawar (1), AyushExel (1), Laughing-q (1)

λŒ“κΈ€