a
    Df                     @   s  d Z ddlZddlZddlZddlZddlZddlZddlZddlm	Z	m
Z
 ddlmZ ddlmZ ddlmZ ddlZddlZddlZddl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 m!Z! ddl"m#Z#m$Z$m%Z%m&Z&m'Z'm(Z(m)Z)m*Z*m+Z+m,Z,m-Z-m.Z.m/Z/m0Z0m1Z1 ddl2m3Z3m4Z4m5Z5 ddl6m7Z7m8Z8 dEddZ9G dd dej:Z;G dd de;Z<G dd dej=Z>G dd dej:Z?G dd dej:Z@G dd dej:ZAG dd dej:ZBG dd  d ej:ZCG d!d" d"ej:ZDG d#d$ d$eDZEG d%d& d&eDZFG d'd( d(eDZGG d)d* d*eDZHG d+d, d,ej:ZIG d-d. d.ej:ZJG d/d0 d0ej:ZKG d1d2 d2ej:ZLG d3d4 d4ej:ZMG d5d6 d6ej:ZNG d7d8 d8ej:ZOG d9d: d:ej:ZPG d;d< d<ej:ZQG d=d> d>ej:ZRG d?d@ d@ZSG dAdB dBej:ZTG dCdD dDej:ZUdS )Fz
Common modules
    N)OrderedDict
namedtuple)copy)Path)urlparse)Image)amp)	TryExcept)exif_transpose	letterbox)LOGGERROOTProfilecheck_requirementscheck_suffixcheck_versioncolorstrincrement_path
is_jupytermake_divisiblenon_max_suppressionscale_boxes	xywh2xyxy	xyxy2xywh	yaml_load)	Annotatorcolorssave_one_box)	copy_attrsmart_inference_mode   c                    s`    dkr4t | tr" | d  d n fdd| D } |d u r\t | trN| d ndd | D }|S )Nr    c                    s   g | ]} |d   d  qS )r     .0xdr!   C/data/NAS7/SABIOD/METHODE/ermites/yolo-dyni/yolov5/models/common.py
<listcomp>'       zautopad.<locals>.<listcomp>   c                 S   s   g | ]}|d  qS )r*   r!   r"   r!   r!   r'   r(   )   r)   )
isinstanceint)kpr&   r!   r%   r'   autopad$   s
    , r/   c                       s6   e Zd Ze Zd
 fdd	Zdd Zdd	 Z  Z	S )Convr    NTc	           	   
      sf   t    tj||||t|||||dd| _t|| _|du rH| jnt	|tj
rX|nt | _d S )NF)groupsdilationbiasT)super__init__nnConv2dr/   convBatchNorm2dbndefault_actr+   ModuleIdentityact)	selfc1c2r-   sr.   gr&   r>   	__class__r!   r'   r5   1   s    
$zConv.__init__c                 C   s   |  | | |S N)r>   r:   r8   r?   r$   r!   r!   r'   forward7   s    zConv.forwardc                 C   s   |  | |S rF   )r>   r8   rG   r!   r!   r'   forward_fuse:   s    zConv.forward_fuse)r    r    Nr    r    T)
__name__
__module____qualname__r6   SiLUr;   r5   rH   rI   __classcell__r!   r!   rD   r'   r0   -   s   r0   c                       s   e Zd Zd fdd	Z  ZS )DWConvr    Tc              	      s&   t  j||||t||||d d S )N)rC   r&   r>   r4   r5   mathgcd)r?   r@   rA   r-   rB   r&   r>   rD   r!   r'   r5   @   s    zDWConv.__init__)r    r    r    TrJ   rK   rL   r5   rN   r!   r!   rD   r'   rO   >   s   rO   c                       s   e Zd Zd fdd	Z  ZS )DWConvTranspose2dr    r   c                    s&   t  j||||||t||d d S )N)r1   rP   )r?   r@   rA   r-   rB   p1p2rD   r!   r'   r5   F   s    zDWConvTranspose2d.__init__)r    r    r   r   rS   r!   r!   rD   r'   rT   D   s   rT   c                       s$   e Zd Z fddZdd Z  ZS )TransformerLayerc                    sx   t    tj||dd| _tj||dd| _tj||dd| _tj||d| _tj||dd| _	tj||dd| _
d S )NFr3   )	embed_dim	num_heads)r4   r5   r6   Linearqr-   vMultiheadAttentionmafc1fc2)r?   crZ   rD   r!   r'   r5   L   s    
zTransformerLayer.__init__c                 C   s@   |  | || || |d | }| | || }|S )Nr   )r_   r\   r-   r]   ra   r`   rG   r!   r!   r'   rH   U   s    (zTransformerLayer.forwardrJ   rK   rL   r5   rH   rN   r!   r!   rD   r'   rW   J   s   	rW   c                       s$   e Zd Z fddZdd Z  ZS )TransformerBlockc                    s\   t    d | _| kr$t| | _t  | _tj fddt|D  | _	 | _
d S )Nc                 3   s   | ]}t  V  qd S rF   )rW   r#   _rA   rZ   r!   r'   	<genexpr>c   r)   z,TransformerBlock.__init__.<locals>.<genexpr>)r4   r5   r8   r0   r6   r[   linear
SequentialrangetrrA   )r?   r@   rA   rZ   
num_layersrD   rg   r'   r5   ]   s    
 zTransformerBlock.__init__c                 C   sb   | j d ur|  |}|j\}}}}|dddd}| || | ddd|| j||S )Nr*   r   r    )r8   shapeflattenpermuterl   ri   reshaperA   )r?   r$   brf   whr.   r!   r!   r'   rH   f   s
    

zTransformerBlock.forwardrc   r!   r!   rD   r'   rd   [   s   	rd   c                       s&   e Zd Zd fdd	Zdd Z  ZS )	
BottleneckTr          ?c                    sL   t    t|| }t||dd| _t||dd|d| _|oD||k| _d S )Nr       rC   r4   r5   r,   r0   cv1cv2add)r?   r@   rA   shortcutrC   ec_rD   r!   r'   r5   p   s
    
zBottleneck.__init__c                 C   s*   | j r|| | | S | | |S rF   r|   r{   rz   rG   r!   r!   r'   rH   w   s    zBottleneck.forward)Tr    rv   rc   r!   r!   rD   r'   ru   n   s   ru   c                       s&   e Zd Zd fdd	Zdd Z  ZS )	BottleneckCSPr    Trv   c                    s   t    t||  t| dd| _tj| dddd| _tj  dddd| _td  |dd| _	t
d  | _t | _tj fddt|D  | _d S )Nr    FrX   r*   c                 3   s    | ]}t   d dV  qdS       ?)r~   Nru   re   r   rC   r}   r!   r'   rh      r)   z)BottleneckCSP.__init__.<locals>.<genexpr>)r4   r5   r,   r0   rz   r6   r7   r{   cv3cv4r9   r:   rM   r>   rj   rk   mr?   r@   rA   nr}   rC   r~   rD   r   r'   r5   }   s    

zBottleneckCSP.__init__c              
   C   sB   |  | | |}| |}| | | t||fdS Nr    )	r   r   rz   r{   r   r>   r:   torchcatr?   r$   y1y2r!   r!   r'   rH      s    
zBottleneckCSP.forward)r    Tr    rv   rc   r!   r!   rD   r'   r   {   s   r   c                       s&   e Zd Zd	 fdd	Zdd Z  ZS )
	CrossConvrw   r    r   Fc           	         s\   t    t|| }t||d|fd|f| _t|||df|df|d| _|oT||k| _d S )Nr    rx   ry   )	r?   r@   rA   r-   rB   rC   r~   r}   r   rD   r!   r'   r5      s
    
zCrossConv.__init__c                 C   s*   | j r|| | | S | | |S rF   r   rG   r!   r!   r'   rH      s    zCrossConv.forward)rw   r    r    r   Frc   r!   r!   rD   r'   r      s   r   c                       s&   e Zd Zd fdd	Zdd Z  ZS )	C3r    Trv   c                    sn   t    t||  t| dd| _t| dd| _td  |d| _tj fddt	|D  | _
d S )Nr    r*   c                 3   s    | ]}t   d dV  qdS r   r   re   r   r!   r'   rh      r)   zC3.__init__.<locals>.<genexpr>)r4   r5   r,   r0   rz   r{   r   r6   rj   rk   r   r   rD   r   r'   r5      s    
zC3.__init__c              	   C   s(   |  t| | || |fdS r   )r   r   r   r   rz   r{   rG   r!   r!   r'   rH      s    z
C3.forward)r    Tr    rv   rc   r!   r!   rD   r'   r      s   r   c                       s   e Zd Zd fdd	Z  ZS )C3xr    Trv   c                    sH   t  |||| t||  tj fddt|D  | _d S )Nc              	   3   s"   | ]}t   d ddV  qdS )rw   r    r   N)r   re   r   r!   r'   rh      r)   zC3x.__init__.<locals>.<genexpr>r4   r5   r,   r6   rj   rk   r   r   rD   r   r'   r5      s    zC3x.__init__)r    Tr    rv   rS   r!   r!   rD   r'   r      s   r   c                       s   e Zd Zd fdd	Z  ZS )C3TRr    Trv   c                    s6   t  |||||| t|| }t||d|| _d S )N   )r4   r5   r,   rd   r   )r?   r@   rA   r   r}   rC   r~   r   rD   r!   r'   r5      s    zC3TR.__init__)r    Tr    rv   rS   r!   r!   rD   r'   r      s   r   c                       s   e Zd Zd fdd	Z  ZS )C3SPP   	      r    Trv   c           	         s4   t  |||||| t|| }t|||| _d S rF   )r4   r5   r,   SPPr   )	r?   r@   rA   r-   r   r}   rC   r~   r   rD   r!   r'   r5      s    zC3SPP.__init__)r   r    Tr    rv   rS   r!   r!   rD   r'   r      s   r   c                       s   e Zd Zd fdd	Z  ZS )C3Ghostr    Trv   c                    sD   t  |||||| t||  tj fddt|D  | _d S )Nc                 3   s   | ]}t   V  qd S rF   )GhostBottleneckre   r   r!   r'   rh      r)   z#C3Ghost.__init__.<locals>.<genexpr>r   r   rD   r   r'   r5      s    zC3Ghost.__init__)r    Tr    rv   rS   r!   r!   rD   r'   r      s   r   c                       s&   e Zd Zd fdd	Zdd Z  ZS )r   r   c                    sX   t    |d }t||dd| _t|t|d  |dd| _tdd |D | _d S )Nr*   r    c                 S   s    g | ]}t j|d |d dqS )r    r*   kernel_sizestridepadding)r6   	MaxPool2dr"   r!   r!   r'   r(      r)   z SPP.__init__.<locals>.<listcomp>)	r4   r5   r0   rz   lenr{   r6   
ModuleListr   r?   r@   rA   r-   r   rD   r!   r'   r5      s
    
zSPP.__init__c              	      sh   |    t B td | t g fdd| jD  dW  d    S 1 sZ0    Y  d S )Nignorec                    s   g | ]}| qS r!   r!   )r#   r   r$   r!   r'   r(      r)   zSPP.forward.<locals>.<listcomp>r    )rz   warningscatch_warningssimplefilterr{   r   r   r   rG   r!   r   r'   rH      s    


zSPP.forward)r   rc   r!   r!   rD   r'   r      s   r   c                       s&   e Zd Zd fdd	Zdd Z  ZS )SPPFr   c                    sP   t    |d }t||dd| _t|d |dd| _tj|d|d d| _d S )Nr*   r    r   r   )r4   r5   r0   rz   r{   r6   r   r   r   rD   r!   r'   r5      s
    
zSPPF.__init__c                 C   st   |  |}t N td | |}| |}| t|||| |fdW  d    S 1 sf0    Y  d S )Nr   r    )rz   r   r   r   r   r{   r   r   r   r!   r!   r'   rH      s    




zSPPF.forward)r   rc   r!   r!   rD   r'   r      s   r   c                       s&   e Zd Zd fdd	Zdd Z  ZS )	Focusr    NTc              	      s*   t    t|d ||||||d| _d S )Nr   r>   )r4   r5   r0   r8   )r?   r@   rA   r-   rB   r.   rC   r>   rD   r!   r'   r5      s    
zFocus.__init__c                 C   sr   |  t|dd d dd d df |ddd dd d df |dd d ddd df |ddd ddd df fdS )N.r*   r    )r8   r   r   rG   r!   r!   r'   rH      s    zFocus.forward)r    r    Nr    Trc   r!   r!   rD   r'   r      s   r   c                       s&   e Zd Zd fdd	Zdd Z  ZS )	GhostConvr    Tc              	      sF   t    |d }t||||d ||d| _t||ddd ||d| _d S )Nr*   r   r   r    )r4   r5   r0   rz   r{   )r?   r@   rA   r-   rB   rC   r>   r   rD   r!   r'   r5      s    
zGhostConv.__init__c                 C   s    |  |}t|| |fdS r   )rz   r   r   r{   )r?   r$   yr!   r!   r'   rH      s    
zGhostConv.forward)r    r    r    Trc   r!   r!   rD   r'   r      s   r   c                       s&   e Zd Zd fdd	Zdd Z  ZS )r   rw   r    c                    s   t    |d }tt||dd|dkr<t||||ddnt t||dddd| _|dkrtt||||ddt||ddddnt | _	d S )Nr*   r    Fr   )
r4   r5   r6   rj   r   rO   r=   r8   r0   r}   )r?   r@   rA   r-   rB   r   rD   r!   r'   r5     s    
  zGhostBottleneck.__init__c                 C   s   |  || | S rF   )r8   r}   rG   r!   r!   r'   rH     s    zGhostBottleneck.forward)rw   r    rc   r!   r!   rD   r'   r     s   
r   c                       s&   e Zd Zd fdd	Zdd Z  ZS )Contractr*   c                    s   t    || _d S rF   r4   r5   gainr?   r   rD   r!   r'   r5     s    
zContract.__init__c                 C   sj   |  \}}}}| j}||||| ||| |}|dddddd }|||| | || || S )Nr   rw   r   r    r*   r   sizer   viewrp   
contiguousr?   r$   rr   rb   rt   rs   rB   r!   r!   r'   rH     s
    zContract.forward)r*   rc   r!   r!   rD   r'   r     s   r   c                       s&   e Zd Zd fdd	Zdd Z  ZS )Expandr*   c                    s   t    || _d S rF   r   r   rD   r!   r'   r5   %  s    
zExpand.__init__c                 C   sj   |  \}}}}| j}||||||d  ||}|dddddd }||||d  || || S )Nr*   r   rw   r   r    r   r   r   r!   r!   r'   rH   )  s
    zExpand.forward)r*   rc   r!   r!   rD   r'   r   #  s   r   c                       s&   e Zd Zd fdd	Zdd Z  ZS )Concatr    c                    s   t    || _d S rF   )r4   r5   r&   )r?   	dimensionrD   r!   r'   r5   3  s    
zConcat.__init__c                 C   s   t || jS rF   )r   r   r&   rG   r!   r!   r'   rH   7  s    zConcat.forward)r    rc   r!   r!   rD   r'   r   1  s   r   c                       sn   e Zd Zdedddddf fdd	Zddd	Zd
d ZdddZe	dddZ
e	edfddZ  ZS )DetectMultiBackendz
yolov5s.ptcpuFNTc           L         s	  ddl m}m} t   tt|tr.|d n|}	| |	\}
}}}}}}}}}}}}||
ph|ph|ph|M }|p~|p~|p~|p~|}d}t	j
 o|jdk}|
s|s||	}	|
r|t|tr|n|	|d|d}tt|j d}t|dr|jjn|j}|r| n|  || _n||rtd|	 d	 d
di}t	jj|	||d}|rX| n|  |d
 rtj|d
 dd d}t|d |d  }}n|rtd|	 d td tj|	}n|rftd|	 d td|rdndf dd l }|rddgndg} |j!|	| d}!dd |!" D }"|!# j$}#d|#v rt|#d t%|#d  }}n.|rDtd|	 d td ddl&m'}$m(}%m)}& |$ }'t*|	+ st,t*|	-d }	|'j.|	t*|	/d!d"}(|(0 d 1 j2r|(0 d 3|%d# |&|(})|)j4r|)5 }*|'j6|(d$d%}+| 7t*|	/d&\}}nP|rtd|	 d' dd l8},t9|,j:d(dd) |jdkrt	;d*}t<d+d,}-|,=|,j=j>}.t?|	d-J}/|,@|.}0|0A|/B }W d    n1 s0    Y  W d    n1 s0    Y  |C }1tD }2g }"d.}d.}3tE|jFD ]}4|G|4}5|,H|I|4}6|J|4rd/tK|L|4v rd}3|1M|4tK|Nd|4d0  |6tOjPkrd}n
|"Q|5 tK|1L|4}7t	RtOj2|7|6d1S|}8|-|5|6|7|8t|8T |2|5< q,tDd2d3 |2U D }9|2d4 jVd }*n~|rFtd|	 d5 dd lW}:|:jXY|	}nN|rtd|	 d6 dd lZ d.};|;r~ j[jX\|	n
 j]|	}n|rtd|	 d7 dd lZ  fd8d9}<d:d; }= ^ _ }>t?|	d-}/|>`|/B  W d    n1 s0    Y  |<|>d<|=|>d=}?nv|s*|r|zdd>lamb}@mc}A W n0 tdyn   dd lZ  jejb jejfjc }@}AY n0 |rtd|	 d? d@dAdBdCtgh  }B|@|	|A|BgdD}Cntd|	 dE |@|	dF}C|Ci  |Cj }D|Ck }Etlmtnjov tnp|	dGH}|q d }Ftrs|B|FtdH}#t|#d |#d  }}W d    n1 sN0    Y  W d    n1 sn0    Y  n|rtudIn|r@td|	 dJ t|rdKndL dd lvmw}G t*|	+ st,t*|	xdM}	t*|	/dN}|Gyt|	t|}H|r|HjzdOddP |G{|H}I|I||I} d }J|I~ }"nT|rtdQ|	 dR tdS ddTlm}K |K|	dU}|jdV}ntudW|	 dXdt vr|rt|d ndYdZ tEd[D }|d d\krt|d]krttd^ d }| jt  d S )_Nr   )attempt_downloadattempt_load    r   T)deviceinplacefusemodulezLoading z for TorchScript inference...z
config.txt )_extra_filesmap_locationc                 S   s   dd |   D S )Nc                 S   s&   i | ]\}}|  rt|n||qS r!   )isdigitr,   )r#   r-   r]   r!   r!   r'   
<dictcomp>d  s   zADetectMultiBackend.__init__.<locals>.<lambda>.<locals>.<dictcomp>)itemsr%   r!   r!   r'   <lambda>d  s   z-DetectMultiBackend.__init__.<locals>.<lambda>)object_hookr   namesz! for ONNX OpenCV DNN inference...zopencv-python>=4.5.4z for ONNX Runtime inference...onnxzonnxruntime-gpuonnxruntimeZCUDAExecutionProviderZCPUExecutionProvider)	providersc                 S   s   g | ]
}|j qS r!   namer"   r!   r!   r'   r(   q  r)   z/DetectMultiBackend.__init__.<locals>.<listcomp>z for OpenVINO inference...Zopenvino)CoreLayout	get_batchz*.xmlz.bin)modelweightsZNCHWCPU)device_namez.yamlz for TensorRT inference...z7.0.0)hardzcuda:0Binding)r   dtypern   dataptrrbFr*   )r   c                 s   s   | ]\}}||j fV  qd S rF   )r   )r#   r   r&   r!   r!   r'   rh     r)   z.DetectMultiBackend.__init__.<locals>.<genexpr>imagesz for CoreML inference...z' for TensorFlow SavedModel inference...z% for TensorFlow GraphDef inference...c                    sB   j j fddg }|jj}|j||j||S )Nc                      s   j jj ddS )Nr   r   )compatv1Zimport_graph_defr!   )gdtfr!   r'   r     r)   zHDetectMultiBackend.__init__.<locals>.wrap_frozen_graph.<locals>.<lambda>)r   r   Zwrap_functiongraphZas_graph_elementZpruneZnestZmap_structure)r   inputsoutputsr$   ger   )r   r'   wrap_frozen_graph  s    z6DetectMultiBackend.__init__.<locals>.wrap_frozen_graphc                 S   sP   g g  }}| j D ]}||j ||j qtdd tt|t| D S )Nc                 s   s"   | ]}| d s| dV  qdS )ZNoOpz:0N)
startswithr"   r!   r!   r'   rh     r)   zBDetectMultiBackend.__init__.<locals>.gd_outputs.<locals>.<genexpr>)nodeappendr   extendinputsortedlistset)r   	name_list
input_listr   r!   r!   r'   
gd_outputs  s
    

z/DetectMultiBackend.__init__.<locals>.gd_outputszx:0)r   r   )Interpreterload_delegatez* for TensorFlow Lite Edge TPU inference...zlibedgetpu.so.1zlibedgetpu.1.dylibzedgetpu.dll)LinuxDarwinWindows)
model_pathZexperimental_delegatesz! for TensorFlow Lite inference...)r   rzutf-8z.ERROR: YOLOv5 TF.js inference is not supportedz for PaddlePaddle inference...zpaddlepaddle-gpuZpaddlepaddlez	*.pdmodelz
.pdiparamsi   )Zmemory_pool_init_size_mb	device_idzUsing z as Triton Inference Server...ztritonclient[all])TritonRemoteModelurl
tensorflowzERROR: z is not a supported formatc                 S   s   i | ]}|d | qS )classr!   r#   ir!   r!   r'   r     r)   z/DetectMultiBackend.__init__.<locals>.<dictcomp>i  Z	n01440764  zdata/ImageNet.yaml)models.experimentalr   r   r4   r5   strr+   r   _model_typer   cudais_availabletypemaxr,   r   hasattrr   r   halffloatr   r   infojitloadjsonloadsr   r{   dnnZreadNetFromONNXr   ZInferenceSessionZget_outputsZget_modelmetaZcustom_metadata_mapevalZopenvino.runtimer   r   r   r   is_filenextglobZ
read_modelwith_suffixZget_parametersZ
get_layoutemptyZ
set_layoutZ	is_staticZ
get_lengthZcompile_model_load_metadataZtensorrtr   __version__r   r   LoggerINFOopenZRuntimeZdeserialize_cuda_enginereadZcreate_execution_contextr   rk   Znum_bindingsZget_binding_nameZnptypeZget_binding_dtypeZbinding_is_inputtupleget_binding_shapeset_binding_shapeZget_profile_shapenpfloat16r   
from_numpytodata_ptrr   rn   ZcoremltoolsmodelsZMLModelr  kerasZ
load_modelsaved_modelGraphZas_graph_defZParseFromStringZtflite_runtime.interpreterr   r   ImportErrorZliteexperimentalplatformsystemZallocate_tensorsZget_input_detailsZget_output_details
contextlibsuppresszipfile
BadZipFileZipFilenamelistastliteral_evaldecodeNotImplementedErrorZpaddle.inferenceZ	inferencerglobZConfigZenable_use_gpuZcreate_predictorZget_input_handleZget_input_namesZget_output_namesZutils.tritonr  runtimer   localsr   r   r   __dict__update)Lr?   r   r   r  r   fp16r   r   r   rs   ptr  r   xmlenginecoremlr/  pbZtfliteZedgetpuZtfjspaddletritonnhwcr   r  r   r   extra_filesr&   netr   r   sessionoutput_namesmetar   r   r   Zienetwork	batch_dim
batch_sizeexecutable_networkZtrtr   loggerfr@  contextbindingsdynamicr  r   r   rn   imbinding_addrsctr.  r   r   r   frozen_funcr   r   Zdelegateinterpreterinput_detailsoutput_detailsZ	meta_fileZpdiconfig	predictorinput_handler  rD   r   r'   r5   =  s6   
$






N

 $.
Z


$zDetectMultiBackend.__init__c                    s  |j \}}}} jr(|jtjkr(| } jr>|dddd} jrj|sL|r\ j	|||dn 	|}n j
r~ 	|}n jr|  } j|  j }nȈ jr|  } j j j d j|i}n jr|  }t |g }nf jr" jr|j  jd j kr j	d}	 j |	|j   jd j!|j d jd<  jD ]0}
 j	|
}	 j|
 j"#t$ j%|	 ql jd j }|j |ksJ d|j  d	 jrd
nd d| t&|'  j(d<  j)t j(   fddt* jD }nP j+r|  }t,-|d d .d} j	/d|i}d|v rt0|d ||||gg }|d 1d|d 2d.t3j4 }}t35||6dd|6ddfd}ntt7| }n j8r*|  .t3j9} j:;|  j<   fdd jD }nH j=r@ 	|}n2|  } j>rv j?rj j	|ddn 	|}nʈ j@r jA jBC|d}n jDd }|d t3jEk}|r|d \}}|| | .t3jE} jFG|d |  jFH  g } jID ]F} jFJ|d }|r2|d \}}|.t3j9| | }|K| qdd |D }|d dd df  ||||g9  < tL|tt$frtM|dkr N|d S  fdd|D S  N|S d S ) Nr   r*   rw   r    )augment	visualizer   rn   zinput size  >znot equal toz max model size c                    s   g | ]} j | jqS r!   )rY  r   r"   r?   r!   r'   r(     r)   z.DetectMultiBackend.forward.<locals>.<listcomp>   uint8image
confidenceZcoordinatesr   c                    s   g | ]} j | qS r!   )rc  Zget_output_handleZcopy_to_cpur"   rj  r!   r'   r(   +  r)   F)trainingr   r   quantizationindexc                 S   s$   g | ]}t |tjr|n| qS r!   )r+   r(  ndarraynumpyr"   r!   r!   r'   r(   C  r)   .r   c                    s   g | ]}  |qS r!   )r*  r"   rj  r!   r'   r(   G  r)   )Orn   rD  r   r   r)  r  rL  rp   rE  r   r  r  r   rs  rN  ZsetInputrH   r   rO  runrP  
get_inputsr   rF  r   rU  valuesrG  rZ  rY  Zget_binding_indexrX  r'  _replacer   resize_r%  r&  r,   r,  r\  Z
execute_v2r   rH  r   	fromarrayastypepredictr   r  argmaxr(  r  concatenaterq   reversedrJ  float32rd  Zcopy_from_cpurc  rK  r/  r.  rI  r^  r   constantr`  rl  r_  
set_tensorZinvokera  
get_tensorr   r+   r   r*  )r?   r[  re  rf  rr   chrt   rs   r   r  r   rB   boxconfclsr   int8scale
zero_pointoutputr$   r!   rj  r'   rH     s    &$
"4
&$
"


$.zDetectMultiBackend.forwardc                 C   s"   t |tjrt|| jS |S rF   )r+   r(  rr  r   r*  r+  r   rG   r!   r!   r'   r*  K  s    zDetectMultiBackend.from_numpyr    rw     r  c                 C   s   | j | j| j| j| j| j| jf}t|r~| jj	dks:| jr~t
j|| jrLt
jnt
j| jd}t| jrhdndD ]}| | qnd S )Nr   )r   r   r*   r    )rE  r  r   rG  r/  rI  rK  anyr   r  r   r  rD  r  r  rk   rH   )r?   imgszZwarmup_typesr[  rf   r!   r!   r'   warmupN  s
     "zDetectMultiBackend.warmuppath/to/model.ptc                    s   ddl m} ddlm} t| j}| dds:t | t  fdd|D }|d  |d	  M  < t| ot	tfd
ddD j
g}||g S )Nr   )export_formats)is_urlF)checkc                    s   g | ]}|t  jv qS r!   )r   r   r#   rB   )r.   r!   r'   r(   `  r)   z2DetectMultiBackend._model_type.<locals>.<listcomp>   r   c                 3   s   | ]}| j v V  qd S rF   )schemer  r  r!   r'   rh   b  r)   z1DetectMultiBackend._model_type.<locals>.<genexpr>)httpZgrpc)exportr  utils.downloadsr  r   ZSuffixr   r   r  allnetloc)r.   r  r  sftypesrK  r!   )r.   r  r'   r  V  s    
*zDetectMultiBackend._model_typezpath/to/meta.yamlc                 C   s$   |   r t| }|d |d fS dS )Nr   r   )NN)existsr   )rW  r&   r!   r!   r'   r  e  s    z!DetectMultiBackend._load_metadata)FF)r  )r  )rJ   rK   rL   r   r   r5   rH   r*  r  staticmethodr  r   r  rN   r!   r!   rD   r'   r   ;  s     =
R
r   c                       sV   e Zd ZdZdZdZdZdZdZdZ	d fdd	Z
 fd	d
Ze dddZ  ZS )	AutoShapeg      ?g?FNr  Tc                    s   t    |rtd t| |ddd t|t| _| j p@|j| _|	 | _
| jr| jrh| j
j
j
d n
| j
j
d }d|_d|_d S )NzAdding AutoShape... )yamlnchypr   r   abcr!   )includeexcluder   FT)r4   r5   r   r  r   r+   r   dmbrE  r  r   r   r  )r?   r   verboser   rD   r!   r'   r5   x  s    


 zAutoShape.__init__c                    sr   t  |} | jrn| jr&| jjjd n
| jjd }||j|_tt||j|_t	|j
trntt||j
|_
| S )Nr   )r4   _applyrE  r  r   r   r   mapgridr+   Zanchor_grid)r?   fnr   rD   r!   r'   r    s     zAutoShape._applyr  c                    s  t  t  t  f}|d  t|tr.||f}jrBtj ntjdjj	d}j
od|j	jdk}t|tjrt
|: j||j	||dW  d    W  d    S 1 s0    Y  t|ttfrt|t|fnd|gf\}}g g g   }	}
t|D ]J\}}d| }t|ttfrntt|drRtj|dd	jn|| }}tt|}n0t|tjrtt|t|d
|p| }}|
 t|!dj" |j#d dk r|$d}|j%dkr|dd df nt&'|t&j(}|j#d d }|	 | t)|t)|    fdd|D  |j*j+rF|nt,|||< q
fddt-)dD fdd|D }t,t-|$d}t.||j	|d }W d    n1 s0    Y  t
| |d  j||d}W d    n1 s0    Y  |d v t/j0r6|n|d j1j2j3j4j5j6d}t7|D ]*}t8|| d d d df |	|  qbW d    n1 s0    Y  t9|||
|j:|j#W  d    S 1 s0    Y  d S )Nr   r    r   r   )re  rm  r  T)streamfilenamez.jpgr   )r    r*   r   rw   .r*   c                    s   g | ]}t |  qS r!   )r,   )r#   r   rx   r!   r'   r(     r)   z%AutoShape.forward.<locals>.<listcomp>c                    s   g | ]}t | jqS r!   )r   r   r"   rj  r!   r'   r(     r)   c                    s   g | ]}t | d dd qS )F)autor   )r   )r#   r[  )shape1r!   r'   r(     r)   )r   rw   r    r*   rk  )max_detr   );r   r+   r,   rE  r  r   
parametersr   r  r   r   r  Tensorautocastr+  type_asr   r%  r   	enumerater
  r   r   r#  r   requestsgetrawr(  asarrayr
   getattrr   r  r   rn   	transposendimr{   ZcvtColorZCOLOR_GRAY2BGRr  r   r   ascontiguousarrayarrayr*  r   r  r  iouclassesagnosticmulti_labelr  rk   r   
Detectionsr   )r?   imsr   re  profiledtr.   r  r   shape0filesr  r[  rW  rB   r$   r   r!   )rC   r?   r  r'   rH     s\    
&H,
0"
*
 <
.
HzAutoShape.forward)T)r  FF)rJ   rK   rL   r  r  r  r  r  r  r   r5   r  r   rH   rN   r!   r!   rD   r'   r  n  s   r  c                       s   e Zd Zd  fdd	Zddddddedfdd	Zed
d!ddZd"ddZd#ddZ	d$ddZ
dd Zdd Zdd Zdd Zdd Zdd Z  ZS )%r  r   r   r   Nc                    s   t    |d j  fdd|D }|_|_|_|_|_|_dd |D _	dd t
j|D _dd t
j	|D _tj_tfdd|D _t|_d S )	Nr   c                    s4   g | ], t jg  fd ddD dddqS )c                 3   s   | ]} j | V  qd S rF   rg  r  r[  r!   r'   rh     r)   z1Detections.__init__.<locals>.<listcomp>.<genexpr>)r    r   r    r   r    r  )r   tensor)r#   r%   r  r'   r(     r)   z'Detections.__init__.<locals>.<listcomp>c                 S   s   g | ]}t |qS r!   )r   r"   r!   r!   r'   r(     r)   c                 S   s   g | ]\}}|| qS r!   r!   r#   r$   rC   r!   r!   r'   r(     r)   c                 S   s   g | ]\}}|| qS r!   r!   r  r!   r!   r'   r(     r)   c                 3   s   | ]}|j  j d  V  qdS )g     @@N)tr   r"   rj  r!   r'   rh     r)   z&Detections.__init__.<locals>.<genexpr>)r4   r5   r   r  predr   r  timesxyxyxywhzipxyxynxywhnr   r   r%  r  rB   )r?   r  r  r  r  r   rn   gnrD   )r&   r?   r'   r5     s    

zDetections.__init__FTr   c                 C   s  dg  }}	t t| j| jD ]V\}
\}}|d|
d  dt| j d|jd  d|jd  d	7 }|jd r|d d d	f  D ]F}|d d d	f |k }|| d| jt	|  d
|dk  d7 }q|
d}|s|s|s|rt|t| jd}t|D ]^ }}}| jt	|  d|d}|rz|rR|d | jt	|  | j|
  nd }|	||||t||||dd n|j||r|ndt|d q |j}n|d7 }t|tjrt|tjn|}|rt rddlm} || n|| j|
  |r`| j|
 }|||  |
| j d kr`t!"d| j  dd
| j dk  dt#d|  |rt$|| j|
< q|r|%d}| d| j& | j' S |r|rt!"d| d |	S d S )Nr   z
image r    /z: r   r$   rh  r   rB   z, )examplez.2fcrops)filesave)r  r  r  labelr[  )colorz(no detections))displayzSaved z imagez to bold
zL
Speed: %.1fms pre-process, %.1fms inference, %.1fms NMS per image at shape zSaved results to )(r  r  r  r  r   rn   uniquesumr   r,   rstripr   r
  r~  r  r   r   Z	box_labelr   r[  r+   r(  rr  r   ry  rz  rl  r   ZIPython.displayr  showr  r   r   r  r   r  lstriprB   r  )r?   pprintr  r  croprenderlabelssave_dirrB   r  r  r[  r  rb   r   Z	annotatorr  r  r  r  r  r  rW  r!   r!   r'   _run  sX    
 8,
*
"$

.
zDetections._runz3Showing images is not supported in this environmentc                 C   s   | j d|d d S )NT)r  r  r  r?   r  r!   r!   r'   r    s    zDetections.showruns/detect/expc                 C   s"   t ||dd}| jd||d d S )NTmkdir)r  r  r  r   r  )r?   r  r  exist_okr!   r!   r'   r    s    zDetections.savec                 C   s&   |rt ||ddnd }| jd||dS )NTr  )r  r  r  r  )r?   r  r  r  r!   r!   r'   r    s    zDetections.cropc                 C   s   | j d|d | jS )NT)r  r  )r  r  r  r!   r!   r'   r  !  s    zDetections.renderc                    sf   t }d}d}tg d||||gD ]:\} fddt|D }t|| fdd|D  q&|S )N)xminyminxmaxymaxrn  r  r   )ZxcenterZycenterwidthheightrn  r  r   )r  r  r  r  c                    s"   g | ]} fd d|  D qS )c                    s6   g | ].}|d d t |d  jt |d  g qS )Nr   )r,   r   r"   rj  r!   r'   r(   +  r)   z0Detections.pandas.<locals>.<listcomp>.<listcomp>)tolistr"   rj  r!   r'   r(   +  r)   z%Detections.pandas.<locals>.<listcomp>c                    s   g | ]}t j| d qS ))columns)pd	DataFramer"   )rb   r!   r'   r(   ,  r)   )r   r  r  setattr)r?   newcacbr-   ar!   )rb   r?   r'   pandas%  s    zDetections.pandasc                    s    t  j} fdd|D }|S )Nc              	      s<   g | ]4}t  j| g j| g j| g j j jqS r!   )r  r  r  r  r  r   rB   r  rj  r!   r'   r(   2  r)   z%Detections.tolist.<locals>.<listcomp>)rk   r   )r?   r   r$   r!   rj  r'   r  /  s    
zDetections.tolistc                 C   s   t |   d S rF   )r   r  __str__rj  r!   r!   r'   print8  s    zDetections.printc                 C   s   | j S rF   )r   rj  r!   r!   r'   __len__;  s    zDetections.__len__c                 C   s   | j ddS )NT)r  r  rj  r!   r!   r'   r  >  s    zDetections.__str__c                 C   s   d| j  d|   S )NzYOLOv5 z
 instance
)rE   r  rj  r!   r!   r'   __repr__A  s    zDetections.__repr__)r  NN)T)Tr  F)Tr  F)T)rJ   rK   rL   r5   r   r  r	   r  r  r  r  r  r  r  r  r  r  rN   r!   r!   rD   r'   r    s   1



	r  c                       s&   e Zd Zd fdd	Zdd Z  ZS )Proto   r   c                    sJ   t    t||dd| _tjddd| _t||dd| _t||| _d S )Nrw   )r-   r*   nearest)scale_factormode)	r4   r5   r0   rz   r6   Upsampleupsampler{   r   )r?   r@   r   rA   rD   r!   r'   r5   G  s
    
zProto.__init__c              	   C   s   |  | | | |S rF   )r   r{   r  rz   rG   r!   r!   r'   rH   N  s    zProto.forward)r	  r   rc   r!   r!   rD   r'   r  E  s   r  c                       s&   e Zd Zd fdd	Zdd Z  ZS )	Classifyr    N        c           	         sV   t    d}t||||t|||| _td| _tj|dd| _	t
||| _d S )Ni   r    T)r.   r   )r4   r5   r0   r/   r8   r6   AdaptiveAvgPool2dpoolDropoutdropr[   ri   )	r?   r@   rA   r-   rB   r.   rC   	dropout_pr   rD   r!   r'   r5   T  s    
zClassify.__init__c              	   C   s8   t |trt|d}| | | | |dS r   )	r+   r   r   r   ri   r  r  r8   ro   rG   r!   r!   r'   rH   c  s    
zClassify.forward)r    r    Nr    r  rc   r!   r!   rD   r'   r  R  s        r  )Nr    )V__doc__r;  r5  r  rQ   r3  r   r7  collectionsr   r   r   pathlibr   urllib.parser   r{   rs  r(  r  r  r  r   torch.nnr6   PILr   
torch.cudar   utilsr	   utils.dataloadersr
   r   utils.generalr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   utils.plotsr   r   r   utils.torch_utilsr   r   r/   r<   r0   rO   ConvTranspose2drT   rW   rd   ru   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r  r!   r!   r!   r'   <module>   sj   D
	
  5ct