
    /j                    r    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	 ddl
mZmZ  G d d	e          Zd
S )    )annotations)copy)DetectionTrainer)RTDETRDetectionModel)RANKcolorstr   )RTDETRDatasetRTDETRValidatorc                  ,    e Zd ZdZddd
ZdddZd ZdS )RTDETRTrainera  Trainer class for the RT-DETR model developed by Baidu for real-time object detection.

    This class extends the DetectionTrainer class for YOLO to adapt to the specific features and architecture of
    RT-DETR. The model leverages Vision Transformers and has capabilities like IoU-aware query selection and adaptable
    inference speed.

    Attributes:
        loss_names (tuple): Names of the loss components used for training.
        data (dict): Dataset configuration containing class count and other parameters.
        args (dict): Training arguments and hyperparameters.
        save_dir (Path): Directory to save training results.
        test_loader (DataLoader): DataLoader for validation/testing data.

    Methods:
        get_model: Initialize and return an RT-DETR model for object detection tasks.
        build_dataset: Build and return an RT-DETR dataset for training or validation.
        get_validator: Return a DetectionValidator suitable for RT-DETR model validation.

    Examples:
        >>> from ultralytics.models.rtdetr.train import RTDETRTrainer
        >>> args = dict(model="rtdetr-l.yaml", data="coco8.yaml", imgsz=640, epochs=3)
        >>> trainer = RTDETRTrainer(overrides=args)
        >>> trainer.train()

    Notes:
        - F.grid_sample used in RT-DETR does not support the `deterministic=True` argument.
        - AMP training can lead to NaN outputs and may produce errors during bipartite graph matching.
    NTcfgdict | Noneweights
str | Noneverboseboolc                    t          || j        d         | j        d         |o
t          dk              }|r|                    |           |S )aW  Initialize and return an RT-DETR model for object detection tasks.

        Args:
            cfg (dict, optional): Model configuration.
            weights (str, optional): Path to pre-trained model weights.
            verbose (bool): Verbose logging if True.

        Returns:
            (RTDETRDetectionModel): Initialized model.
        ncchannels)r   chr   )r   datar   load)selfr   r   r   models        d/home/longshao/multi-rider-rag/.venv/lib/python3.11/site-packages/ultralytics/models/rtdetr/train.py	get_modelzRTDETRTrainer.get_model,   sS     %STYt_:AV`g`vlptvlvwww 	 JJw    valimg_pathstrmodebatch
int | Nonec                    t          || j        j        ||dk    | j        d| j        j        pd| j        j        pdt          | d          | j        j        | j        |dk    r| j        j        nd          S )as  Build and return an RT-DETR dataset for training or validation.

        Args:
            img_path (str): Path to the folder containing images.
            mode (str): Dataset mode, either 'train' or 'val'.
            batch (int, optional): Batch size for rectangle training.

        Returns:
            (RTDETRDataset): Dataset object for the specific mode.
        trainFNz: g      ?)r!   imgsz
batch_sizeaugmenthyprectcache
single_clsprefixclassesr   fraction)	r
   argsr(   r-   r.   r   r0   r   r1   )r   r!   r#   r$   s       r   build_datasetzRTDETRTrainer.build_dataset<   s     )/GO	)/)Ty+4utKKK((I%+/7??TY''
 
 
 	
r   c                l    d| _         t          | j        | j        t	          | j                            S )z@Return an RTDETRValidator suitable for RT-DETR model validation.)	giou_losscls_lossl1_loss)save_dirr2   )
loss_namesr   test_loaderr8   r   r2   )r   s    r   get_validatorzRTDETRTrainer.get_validatorV   s-    <t/$-dSWS\oo^^^^r   )NNT)r   r   r   r   r   r   )r    N)r!   r"   r#   r"   r$   r%   )__name__
__module____qualname____doc__r   r3   r;    r   r   r   r      sd         :     
 
 
 
 
4_ _ _ _ _r   r   N)
__future__r   r   ultralytics.models.yolo.detectr   ultralytics.nn.tasksr   ultralytics.utilsr   r   r    r
   r   r   r@   r   r   <module>rE      s    # " " " " "       ; ; ; ; ; ; 5 5 5 5 5 5 , , , , , , , , / / / / / / / /K_ K_ K_ K_ K_$ K_ K_ K_ K_ K_r   