
    h                        S SK Jr  S SKJr  S SKJr  S SKJr  S SKJr  S SK	J
r
Jr   " S S\R                  R                  5      rg	)
    )annotations)copy)Path)yolo)SegmentationModel)DEFAULT_CFGRANKc                  N   ^  \ rS rSrSr\SS4SU 4S jjjrS	S
S jjrS rSr	U =r
$ )SegmentationTrainer   ag  
A class extending the DetectionTrainer class for training based on a segmentation model.

This trainer specializes in handling segmentation tasks, extending the detection trainer with segmentation-specific
functionality including model initialization, validation, and visualization.

Attributes:
    loss_names (tuple[str]): Names of the loss components used during training.

Examples:
    >>> from ultralytics.models.yolo.segment import SegmentationTrainer
    >>> args = dict(model="yolo11n-seg.pt", data="coco8-seg.yaml", epochs=3)
    >>> trainer = SegmentationTrainer(overrides=args)
    >>> trainer.train()
Nc                :   > Uc  0 nSUS'   [         TU ]  XU5        g)a7  
Initialize a SegmentationTrainer object.

Args:
    cfg (dict): Configuration dictionary with default training settings.
    overrides (dict, optional): Dictionary of parameter overrides for the default configuration.
    _callbacks (list, optional): List of callback functions to be executed during training.
Nsegmenttask)super__init__)selfcfg	overrides
_callbacks	__class__s       _/home/james-whalen/.local/lib/python3.13/site-packages/ultralytics/models/yolo/segment/train.pyr   SegmentationTrainer.__init__   s)     I%	&4    c                    [        XR                  S   U R                  S   U=(       a	    [        S:H  S9nU(       a  UR                  U5        U$ )aw  
Initialize and return a SegmentationModel with specified configuration and weights.

Args:
    cfg (dict | str, optional): Model configuration. Can be a dictionary, a path to a YAML file, or None.
    weights (str | Path, optional): Path to pretrained weights file.
    verbose (bool): Whether to display model information during initialization.

Returns:
    (SegmentationModel): Initialized segmentation model with loaded weights if specified.

Examples:
    >>> trainer = SegmentationTrainer()
    >>> model = trainer.get_model(cfg="yolo11n-seg.yaml")
    >>> model = trainer.get_model(weights="yolo11n-seg.pt", verbose=False)
ncchannels)r   chverbose)r   datar	   load)r   r   weightsr   models        r   	get_modelSegmentationTrainer.get_model,   sD    " "#))D/dii
>S]d]simqsistJJwr   c                    SU l         [        R                  R                  U R                  U R
                  [        U R                  5      U R                  S9$ )zIReturn an instance of SegmentationValidator for validation of YOLO model.)box_lossseg_losscls_lossdfl_loss)save_dirargsr   )	
loss_namesr   r   SegmentationValidatortest_loaderr+   r   r,   	callbacks)r   s    r   get_validator!SegmentationTrainer.get_validatorC   sG    H||11t}}4		?W[WeWe 2 
 	
r   )r-   )r   zdict | None)NNT)r   zdict | str | Noner"   zstr | Path | Noner   bool)__name__
__module____qualname____firstlineno____doc__r   r   r$   r1   __static_attributes____classcell__)r   s   @r   r   r      s+      'RV 5 5.
 
r   r   N)
__future__r   r   pathlibr   ultralytics.modelsr   ultralytics.nn.tasksr   ultralytics.utilsr   r	   detectDetectionTrainerr    r   r   <module>rC      s/    #   # 2 /;
$++66 ;
r   