Ë
    FêñiÀ  ã                  óŽ   — d dl mZ d dlZd dlmZmZ d dlmZ d dlZ	d dl
Z
d dlmZmZmZmZ d dlmZmZ ddlmZ  G d	„ d
e«      Zy)é    )ÚannotationsN)ÚOrderedDictÚ
namedtuple)ÚPath)Ú	IS_JETSONÚLINUXÚLOGGERÚPYTHON_VERSION)Úcheck_requirementsÚcheck_versioné   )ÚBaseBackendc                  ó    — e Zd ZdZdd„Zdd„Zy)ÚTensorRTBackenda  NVIDIA TensorRT inference backend for GPU-accelerated deployment.

    Loads and runs inference with NVIDIA TensorRT serialized engines (.engine files). Supports both TensorRT 7-9 and
    TensorRT 10+ APIs, dynamic input shapes, FP16 precision, and DLA core offloading.
    c                óØ
  — t        j                  d|› d�«       t        rt        t        d«      rt        d«       	 ddl}t        |j                  dd	¬
«       t        |j                  dd¬«       | j                  j                  dk(  rt        j                  d«      | _
        t        dd«      }|j                  |j                  j                  «      }t!        |d«      5 }|j#                  |«      5 }	 t$        j'                  |j)                  d«      d¬«      }t+        j,                  |j)                  |«      j/                  d«      «      }|j1                  dd«      }	|	�t%        |	«      |_        |j9                  |j)                  «       «      }
| j;                  |«       ddd«       ddd«       	 
j=                  «       | _        tE        «       | _#        g | _$        d| _%        d| _&        tO        |
d«       | _(        | jP                  rtS        |
jT                  «      ntS        |
jV                  «      }|D �]r  }| jP                  r–|
jY                  |«      }|j[                  |
j]                  |«      «      }|
j_                  |«      |j`                  jb                  k(  }te        |
jg                  |«      «      }|rte        |
ji                  |d«      d   «      nd}n~|
jk                  |«      }|j[                  |
jm                  |«      «      }|
jo                  |«      }te        |
jq                  |«      «      }|rte        |
js                  d|«      d   «      nd}|rkd|v rLd	| _&        | jP                  r| j>                  ju                  ||«       n| j>                  jw                  ||«       |tx        jz                  k(  r#d	| _%        n| jH                  j}                  |«       | jP                  r$te        | j>                  jg                  |«      «      n#te        | j>                  jq                  |«      «      }t        j~                  ty        j€                  ||¬«      «      jƒ                  | j                  «      } |||||t%        |j…                  «       «      «      | jF                  |<   �Œu tE        d„ | jF                  j‡                  «       D «       «      | _D        |
| _E        y# t        $ r t        rt        d«       ddl}Y �ŒÃw xY w# t4        $ r |j7                  d«       d}Y �Œµw xY w# 1 sw Y   �Œ‹xY w# 1 sw Y   �Œ�xY w# t@        $ r}t        jB                  d«       |‚d}~ww xY w) z±Load an NVIDIA TensorRT engine from a serialized .engine file.

        Args:
            weight (str | Path): Path to the .engine file with optional embedded metadata.
        zLoading z for TensorRT inference...z<=3.8.10znumpy==1.23.5r   Nztensorrt>7.0.0,!=10.1.0z>=7.0.0T)Úhardz!=10.1.0z5https://github.com/ultralytics/ultralytics/pull/14239)ÚmsgÚcpuzcuda:0ÚBinding)ÚnameÚdtypeÚshapeÚdataÚptrÚrbé   Úlittle)Ú	byteorderzutf-8Údlaz?TensorRT model exported with a different version than expected
FÚnum_bindingsé   r   éÿÿÿÿ)r   c              3  ó>   K  — | ]  \  }}||j                   f–— Œ y ­w)N)r   )Ú.0ÚnÚds      úb/var/www/pod-logistic/pod-ai/venv/lib/python3.12/site-packages/ultralytics/nn/backends/tensorrt.pyú	<genexpr>z-TensorRTBackend.load_model.<locals>.<genexpr>q   s   è ø€ Ò(V¹¸¸1¨!¨Q¯U©U¬Ñ(Vùs   ‚)Fr	   Úinfor   r   r
   r   ÚtensorrtÚImportErrorr   Ú__version__ÚdeviceÚtypeÚtorchr   ÚLoggerÚINFOÚopenÚRuntimeÚintÚ
from_bytesÚreadÚjsonÚloadsÚdecodeÚgetÚDLA_coreÚUnicodeDecodeErrorÚseekÚdeserialize_cuda_engineÚapply_metadataÚcreate_execution_contextÚcontextÚ	ExceptionÚerrorr   ÚbindingsÚoutput_namesÚfp16ÚdynamicÚhasattrÚis_trt10ÚrangeÚnum_io_tensorsr    Úget_tensor_nameÚnptypeÚget_tensor_dtypeÚget_tensor_modeÚTensorIOModeÚINPUTÚtupleÚget_tensor_shapeÚget_tensor_profile_shapeÚget_binding_nameÚget_binding_dtypeÚbinding_is_inputÚget_binding_shapeÚget_profile_shapeÚset_input_shapeÚset_binding_shapeÚnpÚfloat16ÚappendÚ
from_numpyÚemptyÚtoÚdata_ptrÚitemsÚbinding_addrsÚmodel)ÚselfÚweightÚtrtr   ÚloggerÚfÚruntimeÚmeta_lenÚmetadatar   ÚengineÚeÚnumÚir   r   Úis_inputr   Úprofile_shapeÚims                       r'   Ú
load_modelzTensorRTBackend.load_model   sb  € ô 	�‰�h˜v˜hÐ&@ÐAÔBåœ¤~°zÔBÜ˜Ô/ð	#Û"ô 	�c—o‘o y°tÕ<Ü�c—o‘o zÐ7nÕoà�;‰;×Ñ˜uÒ$ÜŸ,™, xÓ0ˆDŒKä˜YÐ(QÓRˆØ—‘˜CŸJ™JŸO™OÓ,ˆô �&˜$Óð 	* 1 c§k¡k°&Ó&9ð 	*¸Wð ÜŸ>™>¨!¯&©&°«)¸x˜>ÓH�ÜŸ:™: a§f¡f¨XÓ&6×&=Ñ&=¸gÓ&FÓG�Ø—l‘l 5¨$Ó/�Ø�?Ü'*¨3£x�GÔ$ð ×4Ñ4°Q·V±V³XÓ>ˆFØ×Ñ Ô)÷	*÷ 	*ð	Ø!×:Ñ:Ó<ˆDŒLô $›ˆŒØˆÔØˆŒ	ØˆŒÜ# F¨NÓ;Ð;ˆŒØ.2¯mªmŒe�F×)Ñ)Ô*ÄÀv×GZÑGZÓA[ˆàó  	VˆAØ�}Š}Ø×-Ñ-¨aÓ0�ØŸ
™
 6×#:Ñ#:¸4Ó#@ÓA�Ø!×1Ñ1°$Ó7¸3×;KÑ;K×;QÑ;QÑQ�Ü˜f×5Ñ5°dÓ;Ó<�ÙV^¤ f×&EÑ&EÀdÈAÓ&NÈqÑ&QÔ RÐdh‘à×.Ñ.¨qÓ1�ØŸ
™
 6×#;Ñ#;¸AÓ#>Ó?�Ø!×2Ñ2°1Ó5�Ü˜f×6Ñ6°qÓ9Ó:�ÙLT¤ f×&>Ñ&>¸qÀ!Ó&DÀQÑ&GÔ HÐZ^�áØ˜‘;Ø#'�D”LØ—}’}ØŸ™×4Ñ4°T¸=ÕIàŸ™×6Ñ6°q¸-ÔHØœBŸJ™JÒ&Ø $�D•Ià×!Ñ!×(Ñ(¨Ô.ð —=’=ô �d—l‘l×3Ñ3°DÓ9Ô:ä˜4Ÿ<™<×9Ñ9¸!Ó<Ó=ð ô
 ×!Ñ!¤"§(¡(¨5¸Ô">Ó?×BÑBÀ4Ç;Á;ÓOˆBÙ")¨$°°u¸bÄ#ÀbÇkÁkÃmÓBTÓ"UˆD�M‰M˜$ÓðA 	VôD )Ñ(VÀÇÁ×@SÑ@SÓ@UÔ(VÓVˆÔØˆ�
øôY ò 	#ÝÜ"Ð#<Ô=Þ"ð	#ûô, &ò  Ø—‘�q”	Ø“ð ú÷	*ñ 	*ú÷ 	*ñ 	*ûô ò 	Ü�L‰LÐ[Ô\ØˆGûð	úsr   ¼S" Ã T7Ã2T*Ã4A=TÅ10T*Æ!T7Æ2U Ó"TÔTÔT'Ô#T*Ô&T'Ô'T*Ô*T4	Ô/T7Ô7UÕ	U)ÕU$Õ$U)c                ó®  — | j                   �rØ|j                  | j                  d   j                  k7  �r±| j                  r¸| j                  j                  d|j                  «       | j                  d   j                  |j                  ¬«      | j                  d<   | j                  D ]L  }| j                  |   j                  j                  t        | j                  j                  |«      «      «       ŒN ní| j                  j                  d«      }| j                  j                  ||j                  «       | j                  d   j                  |j                  ¬«      | j                  d<   | j                  D ]g  }| j                  j                  |«      }| j                  |   j                  j                  t        | j                  j                  |«      «      «       Œi | j                  d   j                  }|j                  |k(  s(J d|j                  › d| j                   rdnd› d|› �«       ‚t!        |j#                  «       «      | j$                  d<   | j                  j'                  t)        | j$                  j+                  «       «      «       t-        | j                  «      D �cg c]  }| j                  |   j                  ‘Œ c}S c c}w )a  Run NVIDIA TensorRT inference with dynamic shape handling.

        Args:
            im (torch.Tensor): Input image tensor in BCHW format on the CUDA device.

        Returns:
            (list[torch.Tensor]): Model predictions as a list of tensors on the CUDA device.
        Úimages)r   zinput size ú ú>znot equal toz max model size )rG   r   rD   rI   rA   rZ   Ú_replacerE   r   Úresize_rR   rS   re   Úget_binding_indexr[   rX   r4   rb   rd   Ú
execute_v2ÚlistÚvaluesÚsorted)rf   rt   r   rq   ÚsÚxs         r'   ÚforwardzTensorRTBackend.forwardt   s.  € ð �<‹<˜BŸH™H¨¯©°hÑ(?×(EÑ(EÓEØ�}Š}Ø—‘×,Ñ,¨X°r·x±xÔ@Ø*.¯-©-¸Ñ*A×*JÑ*JÐQS×QYÑQYÐ*JÓ*Z�—‘˜hÑ'Ø ×-Ñ-ò a�DØ—M‘M $Ñ'×,Ñ,×4Ñ4´U¸4¿<¹<×;XÑ;XÐY]Ó;^Ó5_Õ`ñað —J‘J×0Ñ0°Ó:�Ø—‘×.Ñ.¨q°"·(±(Ô;Ø*.¯-©-¸Ñ*A×*JÑ*JÐQS×QYÑQYÐ*JÓ*Z�—‘˜hÑ'Ø ×-Ñ-ò _�DØŸ
™
×4Ñ4°TÓ:�AØ—M‘M $Ñ'×,Ñ,×4Ñ4´U¸4¿<¹<×;YÑ;YÐZ[Ó;\Ó5]Õ^ð_ð �M‰M˜(Ñ#×)Ñ)ˆØ�x‰x˜1Š}Ðs ¨B¯H©H¨:°Q¸d¿lºl±sÐP^Ð6_Ð_oÐpqÐorÐsÓsˆ}ä'*¨2¯;©;«=Ó'9ˆ×Ñ˜8Ñ$Ø�‰×Ñ¤ T×%7Ñ%7×%>Ñ%>Ó%@Ó AÔBÜ/5°d×6GÑ6GÓ/HÖI¨!�—‘˜aÑ ×%Ó%ÒIÐIùÒIs   Ê/ KN)rg   z
str | PathÚreturnÚNone)rt   ztorch.Tensorr„   zlist[torch.Tensor])Ú__name__Ú
__module__Ú__qualname__Ú__doc__ru   rƒ   © ó    r'   r   r      s   „ ñóYôvJr‹   r   )Ú
__future__r   r7   Úcollectionsr   r   Úpathlibr   Únumpyr\   r/   Úultralytics.utilsr   r   r	   r
   Úultralytics.utils.checksr   r   Úbaser   r   rŠ   r‹   r'   ú<module>r“      s5   ðõ #ã ß /Ý ã Û ç FÓ Fß Få ô~J�kõ ~Jr‹   