
    .h                        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y	)
    )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="yolo11n-seg.pt", data="coco8-seg.yaml", epochs=3)
        >>> trainer = SegmentationTrainer(overrides=args)
        >>> trainer.train()
    Nc                :    |i }d|d<   t         |   |||       y)ag  
        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       c/var/www/html/ai-service/venv/lib/python3.12/site-packages/ultralytics/models/yolo/segment/train.pyr   zSegmentationTrainer.__init__   s+     I%	&i4    c                    t        || j                  d   | j                  d   |xr	 t        dk(        }|r|j                  |       |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="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_modelzSegmentationTrainer.get_model,   sF    " "#$))D/dii
>S]d]simqsistJJwr   c                    d| _         t        j                  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)save_dirargsr   )	
loss_namesr   r   SegmentationValidatortest_loaderr(   r   r)   	callbacks)r   s    r   get_validatorz!SegmentationTrainer.get_validatorC   sG    H||11t}}4		?W[WeWe 2 
 	
r   )r   zdict | None)NNT)r   zdict | str | Noner    zstr | Path | Noner   bool)	__name__
__module____qualname____doc__r   r   r"   r.   __classcell__)r   s   @r   r   r      s!      'RV 5.
r   r   N)
__future__r   r   pathlibr   ultralytics.modelsr   ultralytics.nn.tasksr   ultralytics.utilsr   r	   detectDetectionTrainerr    r   r   <module>r=      s/    #   # 2 /;
$++66 ;
r   