
    /jO                        d dl mZ d dlmZ d dlmZ d dl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 d
dlmZ d
dlmZ  G d de          ZdS )    )annotations)Path)AnyN)Model)DEFAULT_CFG_DICT)attempt_download_asset)
torch_load)
model_info   )NASPredictor)NASValidatorc                  R     e Zd ZdZdd fdZddd
ZdddZedd            Z xZ	S )NASa  YOLO-NAS model for object detection.

    This class provides an interface for the YOLO-NAS models and extends the `Model` class from Ultralytics engine. It
    is designed to facilitate the task of object detection using pre-trained or custom-trained YOLO-NAS models.

    Attributes:
        model (torch.nn.Module): The loaded YOLO-NAS model.
        task (str): The task type for the model, defaults to 'detect'.
        predictor (NASPredictor): The predictor instance for making predictions.
        validator (NASValidator): The validator instance for model validation.

    Methods:
        info: Log model information and return model details.

    Examples:
        >>> from ultralytics import NAS
        >>> model = NAS("yolo_nas_s")
        >>> results = model.predict("ultralytics/assets/bus.jpg")

    Notes:
        YOLO-NAS models only support pre-trained models. Do not provide YAML configuration files.
    yolo_nas_s.ptmodelstrreturnNonec                    t          |          j        dvs
J d            t                                          |d           dS )z<Initialize the NAS model with the provided or default model.>   .yml.yamlz0YOLO-NAS models only support pre-trained models.detect)taskN)r   suffixsuper__init__)selfr   	__class__s     a/home/longshao/multi-rider-rag/.venv/lib/python3.11/site-packages/ultralytics/models/nas/model.pyr   zNAS.__init__,   sJ    E{{!)::::<n:::X.....    Nweightsc                    ddl }t          |          j        }|dk    r"t          t	          |                     _        n,|dk    r&|j        j                            |d           _         fd} j        j	         j        _
        | j        _	        d fd		 j        _        t          j        d
g           j        _        t          t!           j        j                             j        _        d  j        _        i  j        _        t+          |           j        _        d j        _        i t0           j         j        _         j                                         dS )zLoad an existing NAS model weights or create a new NAS model with pretrained weights.

        Args:
            weights (str): Path to the model weights file or model name.
            task (str, optional): Task type for the model.
        r   Nz.pt coco)pretrained_weightsc                8    j                             |           S )z%Ignore additional __call__ arguments.)r   _original_forward)xargskwargsr   s      r   new_forwardzNAS._load.<locals>.new_forwardA   s    ://222r    Tc                    j         S N)r   )verboser   s    r   <lambda>zNAS._load.<locals>.<lambda>I   s	    tz r        c                     dS )NF r2   r    r   r/   zNAS._load.<locals>.<lambda>L   s    e r    r   )T)super_gradientsr   r   r	   r   r   trainingmodelsgetforwardr'   fusetorchtensorstridedict	enumerate_class_namesnamesis_fusedyamlr   pt_pathr   r   	overridesr)   eval)r   r!   r   r3   r   r+   s   `     r   _loadz	NAS._load1   sH    	g%U??#$:7$C$CDDDJJr\\(18<<WY_<``DJ	3 	3 	3 	3 	3 (,z'9
$(
 :9999
!L"..
	$**A B BCC
+m

 \\
"
@-@@

r    FTdetailedboolr.   dict[str, Any]c                2    t          | j        ||d          S )a  Log model information.

        Args:
            detailed (bool): Show detailed information about model.
            verbose (bool): Controls verbosity.

        Returns:
            (tuple): Model information as a tuple of (layers, parameters, gradients, GFLOPs).
        i  )rF   r.   imgsz)r
   r   )r   rF   r.   s      r   infozNAS.infoS   s     $*xPSTTTTr    dict[str, dict[str, Any]]c                $    dt           t          diS )zPReturn a dictionary mapping tasks to respective predictor and validator classes.r   )	predictor	validator)r   r   )r   s    r   task_mapzNAS.task_map_   s     <PPQQr    )r   )r   r   r   r   r-   )r!   r   r   r   )FT)rF   rG   r.   rG   r   rH   )r   rL   )
__name__
__module____qualname____doc__r   rE   rK   propertyrP   __classcell__)r   s   @r   r   r      s         ./ / / / / / /
         D
U 
U 
U 
U 
U R R R XR R R R Rr    r   )
__future__r   pathlibr   typingr   r9   ultralytics.engine.modelr   ultralytics.utilsr   ultralytics.utils.downloadsr   ultralytics.utils.patchesr	   ultralytics.utils.torch_utilsr
   predictr   valr   r   r2   r    r   <module>ra      s   # " " " " "              * * * * * * . . . . . . > > > > > > 0 0 0 0 0 0 4 4 4 4 4 4 ! ! ! ! ! !      NR NR NR NR NR% NR NR NR NR NRr    