
    /j                        d dl mZ d dlmZ d dlmZ d dlmZ d dlmZ d dl	m
Z
mZ  G d dej        j                  Zd	S )
    )annotations)copy)Path)yolo)SegmentationModel)DEFAULT_CFGRANKc                  <     e Zd ZdZeddfd fdZdddZd Z xZS )SegmentationTrainera  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="yolo26n-seg.pt", data="coco8-seg.yaml", epochs=3)
        >>> trainer = SegmentationTrainer(overrides=args)
        >>> trainer.train()
    N	overridesdict | None
_callbacksc                `    |i }d|d<   t                                          |||           dS )ad  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 (dict, optional): Dictionary of callback functions to be executed during training.
        Nsegmenttask)super__init__)selfcfgr   r   	__class__s       j/home/longshao/multi-rider-rag/.venv/lib/python3.11/site-packages/ultralytics/models/yolo/segment/train.pyr   zSegmentationTrainer.__init__   s<     I%	&i44444    Tr   dict | str | Noneweightsstr | Path | Noneverboseboolc                    t          || j        d         | j        d         |o
t          dk              }|r|                    |           |S )a  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="yolo26n-seg.yaml")
            >>> model = trainer.get_model(weights="yolo26n-seg.pt", verbose=False)
        ncchannels)r   chr   )r   datar	   load)r   r   r   r   models        r   	get_modelzSegmentationTrainer.get_model*   sS      "#$)D/di
>S]d]simqsisttt 	 JJwr   c                    d| _         t          j                            | j        | j        t          | j                  | j                  S )zIReturn an instance of SegmentationValidator for validation of YOLO model.)box_lossseg_losscls_lossdfl_losssem_loss)save_dirargsr   )	
loss_namesr   r   SegmentationValidatortest_loaderr-   r   r.   	callbacks)r   s    r   get_validatorz!SegmentationTrainer.get_validator@   sB    T|11t}4	??W[We 2 
 
 	
r   )r   r   r   r   )NNT)r   r   r   r   r   r   )	__name__
__module____qualname____doc__r   r   r&   r3   __classcell__)r   s   @r   r   r      s~          'ae 5 5 5 5 5 5 5    ,
 
 
 
 
 
 
r   r   N)
__future__r   r   pathlibr   ultralytics.modelsr   ultralytics.nn.tasksr   ultralytics.utilsr   r	   detectDetectionTrainerr    r   r   <module>rA      s    # " " " " "             # # # # # # 2 2 2 2 2 2 / / / / / / / /8
 8
 8
 8
 8
$+6 8
 8
 8
 8
 8
r   