рдЙрдиреНрдирдд рдЕрдиреБрдХреВрд▓рди
рджреЛрдиреЛрдВ Ultralytics YOLO рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рдФрд░ Python рдЗрдВрдЯрд░рдлреЗрд╕ рдмреЗрд╕ рдЗрдВрдЬрди рдирд┐рд╖реНрдкрд╛рджрдХреЛрдВ рдкрд░ рдмрд╕ рдПрдХ рдЙрдЪреНрдЪ-рд╕реНрддрд░реАрдп рдЕрдореВрд░реНрддрддрд╛ рд╣реИред рдЖрдЗрдП рдЯреНрд░реЗрдирд░ рдЗрдВрдЬрди рдкрд░ рдПрдХ рдирдЬрд╝рд░ рдбрд╛рд▓реЗрдВред
рд╕рддрд░реНрдХрддрд╛: рдорд╛рд╣рд┐рд░ 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
рдбрд┐рдЯреЗрдХреНрд╢рдирдЯреНрд░реЗрдирд░ рдХреЛ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░рдирд╛
рдЖрдЗрдП рдЯреНрд░реЗрдирд░ рдХреЛ рдХрд╕реНрдЯрдорд╛рдЗрдЬрд╝ рдХрд░реЗрдВ рдХрд╕реНрдЯрдо рдбрд┐рдЯреЗрдХреНрд╢рди рдореЙрдбрд▓ рдХреЛ рдкреНрд░рд╢рд┐рдХреНрд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬреЛ рд╕реАрдзреЗ рд╕рдорд░реНрдерд┐рдд рдирд╣реАрдВ рд╣реИред рдЖрдк рдЗрд╕реЗ рдХреЗрд╡рд▓ рдореМрдЬреВрджрд╛ рдХреЛ рдУрд╡рд░рд▓реЛрдб рдХрд░рдХреЗ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ get_model
рдкреНрд░рдХрд╛рд░реНрдпрд╛рддреНрдордХрддрд╛:
from ultralytics.models.yolo.detect import DetectionTrainer
class CustomTrainer(DetectionTrainer):
def get_model(self, cfg, weights):
"""Loads a custom detection model given configuration and weight files."""
...
trainer = CustomTrainer(overrides={...})
trainer.train()
рдЕрдм рдЖрдк рдорд╣рд╕реВрд╕ рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдЖрдкрдХреЛ рдЯреНрд░реЗрдирд░ рдХреЛ рдФрд░ рдЕрдзрд┐рдХ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:
- рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░реЗрдВ
loss function
. - рдЖрдЧреЗ рдХрд╣рдирд╛
callback
рдЬреЛ рдЖрдкрдХреЗ рд▓рд┐рдП рдореЙрдбрд▓ рдЕрдкрд▓реЛрдб рдХрд░рддрд╛ рд╣реИ Google рд╣рд░ 10 рдХреЗ рдмрд╛рдж рдбреНрд░рд╛рдЗрд╡ рдХрд░реЗрдВepochs
рдпрд╣рд╛рдВ рдмрддрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ рдХрд┐ рдЖрдк рдЗрд╕реЗ рдХреИрд╕реЗ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
from ultralytics.models.yolo.detect import DetectionTrainer
from ultralytics.nn.tasks import DetectionModel
class MyCustomModel(DetectionModel):
def init_criterion(self):
"""Initializes the loss function and adds a callback for uploading the model to Google Drive every 10 epochs."""
...
class CustomTrainer(DetectionTrainer):
def get_model(self, cfg, weights):
"""Returns a customized detection model instance configured with specified config and weights."""
return MyCustomModel(...)
# callback to upload model weights
def log_model(trainer):
"""Logs the path of the last model weight used by the 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
. рдЗрди рдкрд░ рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд▓рд┐рдП рд╕рдВрджрд░реНрдн рдЕрдиреБрднрд╛рдЧ рджреЗрдЦреЗрдВред
рдЕрдХреНрд╕рд░ рдкреВрдЫреЗ рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдкреНрд░рд╢реНрди
рдореИрдВ рдХреИрд╕реЗ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░реВрдВ Ultralytics YOLOv8 рд╡рд┐рд╢рд┐рд╖реНрдЯ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдбрд┐рдЯреЗрдХреНрд╢рдирдЯреНрд░реЗрдирд░?
рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП Ultralytics YOLOv8 DetectionTrainer
рдХрд┐рд╕реА рд╡рд┐рд╢рд┐рд╖реНрдЯ рдХрд╛рд░реНрдп рдХреЗ рд▓рд┐рдП, рдЖрдк рдЕрдкрдиреЗ рдХрд╕реНрдЯрдо рдореЙрдбрд▓ рдФрд░ рдбреЗрдЯрд╛рд▓реЛрдбрд░ рдХреЗ рдЕрдиреБрдХреВрд▓ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕рдХреЗ рддрд░реАрдХреЛрдВ рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЗрдирд╣реЗрд░рд┐рдЯ рдХрд░рдХреЗ рдкреНрд░рд╛рд░рдВрдн рдХрд░реЗрдВ DetectionTrainer
рдФрд░ рдлрд┐рд░ рддрд░реАрдХреЛрдВ рдХреЛ рдлрд┐рд░ рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░реЗрдВ рдЬреИрд╕реЗ get_model
рдЕрдкрдиреА рдХрд╕реНрдЯрдо рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛рдУрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред рдпрд╣рд╛рдБ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИ:
from ultralytics.models.yolo.detect import DetectionTrainer
class CustomTrainer(DetectionTrainer):
def get_model(self, cfg, weights):
"""Loads a custom detection model given configuration and weight files."""
...
trainer = CustomTrainer(overrides={...})
trainer.train()
trained_model = trainer.best # get best model
рдЖрдЧреЗ рдХреЗ рдЕрдиреБрдХреВрд▓рди рдХреЗ рд▓рд┐рдП рдЬреИрд╕реЗ рдмрджрд▓рдирд╛ loss function
рдпрд╛ рдПрдХ рдЬреЛрдбрд╝рдирд╛ callback
, рдЖрдк рд╣рдорд╛рд░реЗ рд╕рдВрджрд░реНрдн рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХреЙрд▓рдмреИрдХ рдЧрд╛рдЗрдб.
рдореЗрдВ BaseTrainer рдХреЗ рдкреНрд░рдореБрдЦ рдШрдЯрдХ рдХреНрдпрд╛ рд╣реИрдВ Ultralytics YOLOv8?
рд╡рд╣реА BaseTrainer
рдореЗрдВ Ultralytics YOLOv8 рдкреНрд░рд╢рд┐рдХреНрд╖рдг рджрд┐рдирдЪрд░реНрдпрд╛ рдХреЗ рд▓рд┐рдП рдиреАрдВрд╡ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рд░реНрдп рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЗрд╕рдХреЗ рд╕рд╛рдорд╛рдиреНрдп рддрд░реАрдХреЛрдВ рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░рдХреЗ рд╡рд┐рднрд┐рдиреНрди рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдкреНрд░рдореБрдЦ рдШрдЯрдХреЛрдВ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ:
get_model(cfg, weights)
рдкреНрд░рд╢рд┐рдХреНрд╖рд┐рдд рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдореЙрдбрд▓ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПредget_dataloader()
рдбреЗрдЯрд╛рд▓реЛрдбрд░ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдПред
рдЕрдиреБрдХреВрд▓рди рдФрд░ рд╕реНрд░реЛрдд рдХреЛрдб рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд▓рд┐рдП, рджреЗрдЦреЗрдВ BaseTrainer
рд╣рд╡рд╛рд▓рд╛.
рдореИрдВ рдХреЙрд▓рдмреИрдХ рдХреИрд╕реЗ рдЬреЛрдбрд╝ рд╕рдХрддрд╛ рд╣реВрдВ Ultralytics YOLOv8 рдбрд┐рдЯреЗрдХреНрд╢рди рдЯреНрд░реЗрдирд░?
рдЖрдк рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреА рдирд┐рдЧрд░рд╛рдиреА рдФрд░ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЙрд▓рдмреИрдХ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ Ultralytics YOLOv8 DetectionTrainer
. рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрд╣рд╛рдВ рдмрддрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ рдХрд┐ рдЖрдк рдкреНрд░рддреНрдпреЗрдХ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдпреБрдЧ рдХреЗ рдмрд╛рдж рдореЙрдбрд▓ рд╡реЗрдЯ рд▓реЙрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЙрд▓рдмреИрдХ рдХреИрд╕реЗ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ:
from ultralytics.models.yolo.detect import DetectionTrainer
# callback to upload model weights
def log_model(trainer):
"""Logs the path of the last model weight used by the trainer."""
last_weight_path = trainer.last
print(last_weight_path)
trainer = DetectionTrainer(overrides={...})
trainer.add_callback("on_train_epoch_end", log_model) # Adds to existing callbacks
trainer.train()
рдХреЙрд▓рдмреИрдХ рдШрдЯрдирд╛рдУрдВ рдФрд░ рдкреНрд░рд╡реЗрд╢ рдмрд┐рдВрджреБрдУрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд▓рд┐рдП, рд╣рдорд╛рд░реЗ рдХреЙрд▓рдмреИрдХ рдЧрд╛рдЗрдб рдХреЛ рджреЗрдЦреЗрдВред
рдореБрдЭреЗ рдХреНрдпреЛрдВ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП Ultralytics YOLOv8 рдореЙрдбрд▓ рдкреНрд░рд╢рд┐рдХреНрд╖рдг рдХреЗ рд▓рд┐рдП?
Ultralytics YOLOv8 рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рдЗрдВрдЬрди рдирд┐рд╖реНрдкрд╛рджрдХреЛрдВ рдкрд░ рдПрдХ рдЙрдЪреНрдЪ-рд╕реНрддрд░реАрдп рдЕрдореВрд░реНрддрддрд╛ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рдЗрд╕реЗ рддреЗрдЬреА рд╕реЗ рд╡рд┐рдХрд╛рд╕ рдФрд░ рдЕрдиреБрдХреВрд▓рди рдХреЗ рд▓рд┐рдП рдЖрджрд░реНрд╢ рдмрдирд╛рддрд╛ рд╣реИред рдкреНрд░рдореБрдЦ рд▓рд╛рднреЛрдВ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ:
- рдЙрдкрдпреЛрдЧ рдореЗрдВ рдЖрд╕рд╛рдиреА: рдХрдорд╛рдВрдб-рд▓рд╛рдЗрди рдФрд░ рджреЛрдиреЛрдВ Python рдЗрдВрдЯрд░рдлреЗрд╕ рдЬрдЯрд┐рд▓ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рд╕рд░рд▓ рдмрдирд╛рддреЗ рд╣реИрдВред
- рдкреНрд░рджрд░реНрд╢рди: рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рдордп рд╡рд╕реНрддреБ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдФрд░ рд╡рд┐рднрд┐рдиреНрди рджреГрд╖реНрдЯрд┐ рдПрдЖрдИ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдЕрдиреБрдХреВрд▓рд┐рддред
- рдЕрдиреБрдХреВрд▓рди: рдХрд╕реНрдЯрдо рдореЙрдбрд▓, рд╣рд╛рдирд┐ рдХрд╛рд░реНрдпреЛрдВ рдФрд░ рдбреЗрдЯрд╛рд▓реЛрдбрд░ рдХреЗ рд▓рд┐рдП рдЖрд╕рд╛рдиреА рд╕реЗ рд╡рд┐рд╕реНрддрд╛рд░ рдпреЛрдЧреНрдпред
рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рдЬрд╛рдиреЗрдВ YOLOv8рдкрд░ рдЬрд╛рдХрд░ рдХреНрд╖рдорддрд╛рдУрдВ Ultralytics YOLO.
рдХреНрдпрд╛ рдореИрдВ Ultralytics YOLOv8 рдЧреИрд░-рдорд╛рдирдХ рдореЙрдбрд▓ рдХреЗ рд▓рд┐рдП рдбрд┐рдЯреЗрдХреНрд╢рдирдЯреНрд░реЗрдирд░?
рд╣рд╛рдБ Ultralytics YOLOv8 DetectionTrainer
рдЕрддреНрдпрдзрд┐рдХ рд▓рдЪреАрд▓рд╛ рд╣реИ рдФрд░ рдЧреИрд░-рдорд╛рдирдХ рдореЙрдбрд▓ рдХреЗ рд▓рд┐рдП рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рд╕реЗ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдорд┐рд▓рд╛ DetectionTrainer
, рдЖрдк рдЕрдкрдиреЗ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдореЙрдбрд▓ рдХреА рдЬрд░реВрд░рддреЛрдВ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд┐рднрд┐рдиреНрди рддрд░реАрдХреЛрдВ рдХреЛ рдЕрдзрд┐рднрд╛рд░ рджреЗ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣рд╛рдБ рдПрдХ рд╕рд░рд▓ рдЙрджрд╛рд╣рд░рдг рд╣реИ:
from ultralytics.models.yolo.detect import DetectionTrainer
class CustomDetectionTrainer(DetectionTrainer):
def get_model(self, cfg, weights):
"""Loads a custom detection model."""
...
trainer = CustomDetectionTrainer(overrides={...})
trainer.train()
рдЕрдзрд┐рдХ рд╡реНрдпрд╛рдкрдХ рдирд┐рд░реНрджреЗрд╢реЛрдВ рдФрд░ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЗ рд▓рд┐рдП, DetectionTrainer рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг рдХреА рд╕рдореАрдХреНрд╖рд╛ рдХрд░реЗрдВред
рдмрдирд╛рдпрд╛ рдЧрдпрд╛ 2023-11-12, рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ 2024-07-04
рд▓реЗрдЦрдХ: рдЧреНрд▓реЗрди-рдЬреЛрдЪрд░ (7), рд░рд┐рдЬрд╡рд╛рди рдореБрдирд╡реНрд╡рд░ (1), рдЖрдпреБрд╖рдПрдХреНрд╕рд▓ (1), рд▓рд╛рдлрд┐рдВрдЧ-рдХреНрдпреВ (1)