Ë
    ëÓ^jB7  ã                   ó’  — d Z ddlZddlZddlZddlmZ ddlZddlm	Z	m
Z
 ddlZddl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  e«       Zd„ Zd„ Zd	„ Zd
„ Zd„ Zdd„Z dd„Z! G d„ de"«      Z# G d„ dejH                  «      Z%	 	 	 	 dde&de&de'de(de(ddfd„Z)e*dk(  rddl+m,Z,  e,e)«       yy# e$ r dZY Œ~w xY w# e$ r dZY Œ„w xY w)zñThis tool provides performance benchmarks by using ONNX Runtime and TensorRT to run inference on a given model with
the COCO validation set.

It offers reliable measurements of inference latency using ONNX Runtime or TensorRT on the device.
é    N)ÚOrderedDictÚ
namedtuple)ÚImage)Útqdm)Ú
get_loggerc                 ó€   — t        | d«      5 }t        j                  |«      }d d d «       |d   S # 1 sw Y   d   S xY w)NÚrÚimages)ÚopenÚjsonÚload)Úann_fileÚfinÚdatas      úb/var/www/ramen.bs-engineer-server.com/venv/lib/python3.12/site-packages/rfdetr/export/benchmark.pyÚget_image_listr   *   s?   € Ü	ˆh˜Ó	ð  Ü�y‰y˜‹~ˆ÷à�‰>Ð÷à�‰>Ðús   �0°=c                 óJ   — t        j                  | «      j                  d«      S )NÚRGB)r   r   Úconvert)Ú	file_paths    r   Ú
load_imager   0   s   € Ü�:‰:�iÓ ×(Ñ(¨Ó/Ð/ó    c                  óŠ   — ddl m} m}m}m} ddlm}  |  |d«       |«        |t        j                  d¬«       |«       g«      S )Nr   )ÚComposeÚResizeÚToDtypeÚToImage)Ú	Normalize)é€  r   T)Úscale)	Útorchvision.transforms.v2r   r   r   r   Úrfdetr.datasets.transformsr   ÚtorchÚfloat32)r   r   r   r   r   s        r   Úinfer_transformsr%   4   s=   € ßKÓKå4áá�:ÓÙ‹IÙ”E—M‘M¨Ô.Ù‹Kð		
óð r   c                 ó  — | j                  d«      \  }}}}|d|j                  d¬«      z  z
  |d|j                  d¬«      z  z
  |d|j                  d¬«      z  z   |d|j                  d¬«      z  z   g}t        j                  |d¬«      S )Néÿÿÿÿg      à?g        )Úmin©Údim)ÚunbindÚclampr#   Ústack)ÚxÚx_cÚy_cÚwÚhÚbs         r   Úbox_cxcywh_to_xyxyr4   C   s‘   € Ø—X‘X˜b“\�N€Cˆˆa�à	ˆs�Q—W‘W �WÓ%Ñ%Ñ	%Ø	ˆs�Q—W‘W �WÓ%Ñ%Ñ	%Ø	ˆs�Q—W‘W �WÓ%Ñ%Ñ	%Ø	ˆs�Q—W‘W �WÓ%Ñ%Ñ	%ð		€Aô �;‰;�q˜bÔ!Ð!r   c           	      óª  — | d   | d   }}t        |«      t        |«      k(  sJ ‚|j                  d   dk(  sJ ‚|j                  «       }t        j                  |j                  |j                  d   d«      dd¬«      \  }}|}||j                  d   z  }||j                  d   z  }	t        |«      }
t        j                  |
d|j                  d«      j                  ddd	«      «      }
|j                  d«      \  }}t        j                  ||||gd¬«      }|
|d d …d d d …f   z  }
t        ||	|
«      D ���cg c]  \  }}}|||d
œ‘Œ }}}}|S c c}}}w )NÚlabelsÚdetsé   é   r   r'   i,  r)   é   )Úscoresr6   Úboxes)ÚlenÚshapeÚsigmoidr#   ÚtopkÚviewr4   ÚgatherÚ	unsqueezeÚrepeatr+   r-   Úzip)ÚoutputsÚtarget_sizesÚ
out_logitsÚout_bboxÚprobÚtopk_valuesÚtopk_indexesr;   Ú
topk_boxesr6   r<   Úimg_hÚimg_wÚ	scale_fctÚscoreÚlabelÚboxÚresultss                     r   Úpost_processrU   N   se  € Ø" 8Ñ,¨g°f©o�€Jäˆz‹?œc ,Ó/Ò/Ð/Ð/Ø×Ñ˜aÑ  AÒ%Ð%Ð%à×ÑÓ€DÜ %§
¡
¨4¯9©9°Z×5EÑ5EÀaÑ5HÈ"Ó+MÈsÐXYÔ ZÑ€K�Ø€FØ ×!1Ñ!1°!Ñ!4Ñ4€JØ˜J×,Ñ,¨QÑ/Ñ/€FÜ˜xÓ(€EÜ�L‰L˜  :×#7Ñ#7¸Ó#;×#BÑ#BÀ1ÀaÈÓ#KÓL€Eð  ×&Ñ& qÓ)�L€Eˆ5Ü—‘˜U E¨5°%Ð8¸aÔ@€IØ�Iša ¢q˜jÑ)Ñ)€EäY\Ð]cÐekÐmrÓYs×tÐtÑDUÀEÈ5ÐRU˜%¨5¸3Ó?Ðt€GÒtà€Nùô us   Ä7Ec                 ó¤  — g }t        |«      D �]‚  }t        t        j                  j	                  ||d   «      «      }	|	j
                  \  }
}t        j                  ||
g«      } t        «       |	d «      \  }}|d    j                  «       }|j                  «        |5  t        |«      D ]  }| j                  d d|i«      }Œ 	 d d d «       |j                  |j                  |z  «       i }t        j                  d   «      j                  |«      |d<   t        j                  |d   «      j                  |«      |d<   t        j                   |gd¬«      j                  |«      }t#        ||«      }|d   |d   i}|€�Œr|j%                  |«       �Œ… t&        j)                  d	j+                  d
t-        |«      z  t/        |«      z  «      «       i }|�p|j1                  «        |j3                  «        |j5                  «        |j6                  d   j8                  j;                  «       |d<   t&        j)                  |«       y y # 1 sw Y   �Œ„xY w)NÚ	file_nameÚinputr8   r6   r   r7   r)   Úidz%Model latency with ONNX Runtime: {}mséè  ÚbboxÚcoco_eval_bbox)r   r   ÚosÚpathÚjoinÚsizer#   ÚTensorr%   ÚnumpyÚresetÚrangeÚrunÚappendÚtotalÚtor-   rU   ÚupdateÚloggerÚinfoÚformatÚsumr=   Úsynchronize_between_processesÚ
accumulateÚ	summarizeÚ	coco_evalÚstatsÚtolist)ÚsessÚcoco_evaluatorÚtime_profileÚprefixÚimg_listÚdeviceÚrepeatsÚ	time_listÚimg_dictÚimageÚwidthÚheightÚorig_target_sizesÚimage_tensorÚ_ÚsamplesÚresrF   rT   rr   s                       r   Ú
infer_onnxr…   f   s  € Ø€IÜ˜“Nó 'ˆÜœ2Ÿ7™7Ÿ<™<¨°¸Ñ0EÓFÓGˆØŸ
™
‰ˆˆvÜ!ŸL™L¨&°%¨Ó9ÐØ,Ô*Ó,¨U°DÓ9‰ˆ�aà˜tÑ$×*Ñ*Ó,ˆà×ÑÔØñ 	9Ü˜7“^ò 9�Ø—h‘h˜t g¨wÐ%7Ó8‘ñ9÷	9ð 	×Ñ˜×+Ñ+¨gÑ5Ô6ØˆÜ!ŸL™L¨¨Q©Ó0×3Ñ3°FÓ;ˆ�ÑÜŸ,™, s¨1¡vÓ.×1Ñ1°&Ó9ˆ�‰ä!ŸK™KÐ):Ð(;ÀÔC×FÑFÀvÓNÐÜ˜wÐ(9Ó:ˆØ˜‰~˜w q™zÐ*ˆØÒ%Ø×!Ñ! #Ö&ð+'ô. ‡K�KÐ7×>Ñ>¸tÄcÈ)ÃnÑ?TÔWZÐ[cÓWdÑ?dÓeÔfð €EØÐ!Ø×4Ñ4Ô6Ø×!Ñ!Ô#Ø× Ñ Ô"Ø"0×":Ñ":¸6Ñ"B×"HÑ"H×"OÑ"OÓ"QˆÐÑÜ�‰�EÕð "÷%	9ñ 	9ús   Â%IÉI	c                 ó  — g }t        |«      D �]4  }t        t        j                  j	                  ||d   «      «      }	|	j
                  \  }
}t        j                  ||
g«      } t        «       |	d «      \  }}|d    j                  |«      }|j                  \  }}}}|j                  «        |5  t        |«      D ]  } | d|i«      }Œ 	 d d d «       |j                  |j                  |z  «       t        j                  |gd¬«      j                  |«      }|€�Œt!        |«      }|d   |d   i}|j#                  |«       �Œ7 t$        j'                  dj)                  dt+        |«      z  t-        |«      z  «      «       i }|�p|j/                  «        |j1                  «        |j3                  «        |j4                  d   j6                  j9                  «       |d	<   t$        j'                  |«       y y # 1 sw Y   �Œ.xY w)
NrW   rX   r   r)   rY   z!Model latency with TensorRT: {}msrZ   r[   r\   )r   r   r]   r^   r_   r`   r#   ra   r%   rh   r>   rc   rd   rf   rg   r-   rU   ri   rj   rk   rl   rm   r=   rn   ro   rp   rq   rr   rs   )Úmodelru   rv   rw   rx   ry   rz   r{   r|   r}   r~   r   r€   r�   r‚   rƒ   r2   r1   rF   rT   r„   rr   s                         r   Úinfer_enginerˆ   ‹   sà  € Ø€IÜ˜“Nó 'ˆÜœ2Ÿ7™7Ÿ<™<¨°¸Ñ0EÓFÓGˆØŸ
™
‰ˆˆvÜ!ŸL™L¨&°%¨Ó9ÐØ,Ô*Ó,¨U°DÓ9‰ˆ�aà˜tÑ$×'Ñ'¨Ó/ˆØ—]‘]‰
ˆˆ1ˆa�ð 	×ÑÔØñ 	4Ü˜7“^ò 4�Ù ¨'Ð 2Ó3‘ñ4÷	4ð 	×Ñ˜×+Ñ+¨gÑ5Ô6Ü!ŸK™KÐ):Ð(;ÀÔC×FÑFÀvÓNÐØÒ%Ü" 7Ð,=Ó>ˆGØ˜D‘> 7¨1¡:Ð.ˆCØ×!Ñ! #Ö&ð+'ô. ‡K�KÐ3×:Ñ:¸4Ä#ÀiÃ.Ñ;PÔSVÐW_ÓS`Ñ;`ÓaÔbð €EØÐ!Ø×4Ñ4Ô6Ø×!Ñ!Ô#Ø× Ñ Ô"Ø"0×":Ñ":¸6Ñ"B×"HÑ"H×"OÑ"OÓ"QˆÐÑÜ�‰�EÕð "÷	4ñ 	4ús   Â/G7Ç7H	c                   ól   — e Zd ZdZ	 ddefd„Zdefd„Zd„ Zd„ Z	d„ Z
dd
„Zd„ Zd„ Zd„ Zd„ Zd„ Zdd„Zy	)ÚTRTInferencezTensorRT inference engine.Ú	sync_modec                 óF  — t         st        d«      ‚|| _        || _        || _        || _        |r-t        j                  t         j                  j                  «      n,t        j                  t         j                  j                  «      | _	        | j                  |«      | _        | j                  j                  «       | _        | j                  | j                  | j                  | j
                  | j                  «      | _        t!        d„ | j                  j#                  «       D «       «      | _        | j'                  «       | _        | j+                  «       | _        d | _        | j                  s*t0        st        d«      ‚t1        j2                  «       | _        d | _        y )NzGTensorRT is not installed. Please install TensorRT to use TRTInference.c              3   ó>   K  — | ]  \  }}||j                   f–— Œ y ­w©N)Úptr)Ú.0ÚnÚvs      r   ú	<genexpr>z(TRTInference.__init__.<locals>.<genexpr>Å   s   è ø€ Ò(V¹¸¸1¨!¨Q¯U©U¬Ñ(Vùs   ‚zUpycuda is not installed. Please install `pycuda` to use TRTInference with async mode.)ÚtrtÚImportErrorÚengine_pathry   r‹   Úmax_batch_sizeÚLoggerÚVERBOSEÚINFOrj   Úload_engineÚengineÚcreate_execution_contextÚcontextÚget_bindingsÚbindingsr   ÚitemsÚbindings_addrÚget_input_namesÚinput_namesÚget_output_namesÚoutput_namesÚstreamÚcudaÚStreamrv   )Úselfr–   ry   r‹   r—   Úverboses         r   Ú__init__zTRTInference.__init__³   s4  € õ ÜÐgÓhÐhà&ˆÔØˆŒØ"ˆŒØ,ˆÔá8?”c—j‘j¤§¡×!3Ñ!3Ô4ÄSÇZÁZÔPS×PZÑPZ×P_ÑP_ÓE`ˆŒà×&Ñ& {Ó3ˆŒà—{‘{×;Ñ;Ó=ˆŒà×)Ñ)¨$¯+©+°t·|±|ÀT×EXÑEXÐZ^×ZeÑZeÓfˆŒÜ(Ñ(VÀÇÁ×@SÑ@SÓ@UÔ(VÓVˆÔà×/Ñ/Ó1ˆÔØ ×1Ñ1Ó3ˆÔØˆŒà�~Š~ÝÜ!Økóð ô Ÿ+™+›-ˆDŒKð !ˆÕr   Ú
batch_sizec                 óŒ  — i }| j                   j                  «       D ]¤  \  }}| j                  j                  |«      t        j
                  j                  k(  sŒ=t        j                  d|› d|j                  › �«       t        j                  |g|j                  dd  ¢­Ž j                  «       j                  d«      ||<   Œ¦ |S )Nzmake dummy input z with shape r8   úcuda:0)r    r¡   rœ   Úget_tensor_moder”   ÚTensorIOModeÚINPUTrj   rk   r>   r#   ÚrandÚfloatrh   )rª   r­   ÚblobÚnameÚbindings        r   Úget_dummy_inputzTRTInference.get_dummy_inputÖ   s¨   € ØˆØ!Ÿ]™]×0Ñ0Ó2ò 	]‰MˆD�'Ø�{‰{×*Ñ*¨4Ó0´C×4DÑ4D×4JÑ4JÓJÜ—‘Ð/°¨v°\À'Ç-Á-ÀÐQÔRÜ"ŸZ™Z¨
ÐG°W·]±]À1À2Ð5FÒG×MÑMÓO×RÑRÐS[Ó\��T’
ð	]ð ˆr   c                 ó@  — t        j                  | j                  d«       t        |d«      5 }t        j                  | j                  «      5 }|j                  |j                  «       «      cddd«       cddd«       S # 1 sw Y   nxY wddd«       y# 1 sw Y   yxY w)zLoad engine.Ú ÚrbN)r”   Úinit_libnvinfer_pluginsrj   r   ÚRuntimeÚdeserialize_cuda_engineÚread)rª   r^   ÚfÚruntimes       r   r›   zTRTInference.load_engineÞ   sv   € ä×#Ñ# D§K¡K°Ô4Ü�$˜Óð 	= ¤C§K¡K°·±Ó$<ð 	=ÀØ×2Ñ2°1·6±6³8Ó<÷	=÷ 	=÷ 	=ó 	=ú÷ 	=÷ 	=ñ 	=ús#   ­ BÁA?Á,	BÁ?B	ÂBÂBc                 óÔ   — g }t        | j                  «      D ]M  \  }}| j                  j                  |«      t        j                  j
                  k(  sŒ=|j                  |«       ŒO |S rŽ   )Ú	enumeraterœ   r°   r”   r±   r²   rf   ©rª   Únamesr‚   r¶   s       r   r£   zTRTInference.get_input_namesä   s[   € ð ˆÜ  §¡Ó-ò 	#‰GˆAˆtØ�{‰{×*Ñ*¨4Ó0´C×4DÑ4D×4JÑ4JÓJØ—‘˜TÕ"ð	#ð ˆr   c                 óÔ   — g }t        | j                  «      D ]M  \  }}| j                  j                  |«      t        j                  j
                  k(  sŒ=|j                  |«       ŒO |S rŽ   )rÃ   rœ   r°   r”   r±   ÚOUTPUTrf   rÄ   s       r   r¥   zTRTInference.get_output_namesí   s[   € ð ˆÜ  §¡Ó-ò 	#‰GˆAˆtØ�{‰{×*Ñ*¨4Ó0´C×4DÑ4D×4KÑ4KÓKØ—‘˜TÕ"ð	#ð ˆr   Nc           	      óŠ  — t        dd«      }t        «       }t        |«      D ]ž  \  }}|j                  |«      }	t	        j
                  |j                  |«      «      }
|	d   dk(  rt        ‚t        j                  t        j                  |	|
¬«      «      j                  |«      } |||
|	||j                  «       «      ||<   Œ  |S )zBuild binddings.ÚBinding)r¶   Údtyper>   r   r�   r   r'   )rÊ   )r   r   rÃ   Úget_tensor_shaper”   ÚnptypeÚget_tensor_dtypeÚNotImplementedErrorr#   Ú
from_numpyÚnpÚemptyrh   Údata_ptr)rª   rœ   rž   r—   ry   rÉ   r    Úir¶   r>   rÊ   r   s               r   rŸ   zTRTInference.get_bindingsö   sµ   € ä˜YÐ(QÓRˆÜ“=ˆä  Ó(ò 		T‰GˆAˆtØ×+Ñ+¨DÓ1ˆEÜ—J‘J˜v×6Ñ6°tÓ<Ó=ˆEà�Q‰x˜2Š~Ü)Ð)ô ×'Ñ'¬¯©°¸eÔ(DÓE×HÑHÈÓP�Ù!(¨¨u°e¸TÀ4Ç=Á=Ã?Ó!S�˜’ð		Tð ˆr   c                 ó~  — | j                   j                  | j                  D �ci c]  }|||   j                  «       “Œ c}«       | j                  j                  t        | j                   j                  «       «      «       | j                  D �ci c]  }|| j                  |   j                  “Œ }}|S c c}w c c}w rŽ   )r¢   ri   r¤   rÒ   rž   Ú
execute_v2ÚlistÚvaluesr¦   r    r   )rª   rµ   r‘   rF   s       r   Úrun_synczTRTInference.run_sync  sš   € Ø×Ñ×!Ñ!À$×BRÑBRÖ"S¸Q 1 d¨1¡g×&6Ñ&6Ó&8Ñ#8Ò"SÔTØ�‰×Ñ¤ T×%7Ñ%7×%>Ñ%>Ó%@Ó AÔBØ59×5FÑ5FÖG°�1�d—m‘m AÑ&×+Ñ+Ñ+ÐGˆÐGØˆùò #TùâGs   ¤B5Â!B:c                 ó  — | j                   j                  | j                  D �ci c]  }|||   j                  «       “Œ c}«       | j                   j	                  «       D ��cg c]  \  }}t        |«      ‘Œ }}}| j                  j                  || j                  j                  ¬«       | j                  D �ci c]  }|| j                  |   j                  “Œ }}| j                  j                  «        |S c c}w c c}}w c c}w )N)r    Ústream_handle)r¢   ri   r¤   rÒ   r¡   Úintrž   Úexecute_async_v2r§   Úhandler¦   r    r   Úsynchronize)rª   rµ   r‘   r‚   r’   r¢   rF   s          r   Ú	run_asynczTRTInference.run_async  sÒ   € Ø×Ñ×!Ñ!À$×BRÑBRÖ"S¸Q 1 d¨1¡g×&6Ñ&6Ó&8Ñ#8Ò"SÔTØ,0×,>Ñ,>×,DÑ,DÓ,F×G¡D A qœ˜Q�ÐGˆÑGØ�‰×%Ñ%¨}ÈDÏKÉK×L^ÑL^Ð%Ô_Ø59×5FÑ5FÖG°�1�d—m‘m AÑ&×+Ñ+Ñ+ÐGˆÐGØ�‰×ÑÔ!Øˆùò #TùÛGùâGs   ¤C9Á#C>Â:!Dc                 ó^   — | j                   r| j                  |«      S | j                  |«      S rŽ   )r‹   rØ   rß   )rª   rµ   s     r   Ú__call__zTRTInference.__call__  s'   € Ø�>Š>Ø—=‘= Ó&Ð&à—>‘> $Ó'Ð'r   c                 ó^  — | j                   r=t        j                  j                  «       rt        j                  j	                  «        y | j
                  �| j
                  j	                  «        y t        j                  j                  «       rt        j                  j	                  «        y y rŽ   )r‹   r#   r¨   Úis_availablerÞ   r§   ©rª   s    r   rÞ   zTRTInference.synchronize  sm   € ð �>Š>Ü�z‰z×&Ñ&Ô(Ü—
‘
×&Ñ&Ô(Øà�;‰;Ð"Ø�K‰K×#Ñ#Õ%Ü�Z‰Z×$Ñ$Ô&Ü�J‰J×"Ñ"Õ$ð 'r   c                 óÜ   — | j                   j                  «        | j                   5  t        |«      D ]
  } | |«      }Œ 	 d d d «       | j                   j                  |z  S # 1 sw Y   Œ"xY wrŽ   )rv   rc   rd   rg   )rª   rµ   r‘   r‚   s       r   ÚspeedzTRTInference.speed)  sg   € Ø×Ñ×ÑÔ!Ø×Ññ 	Ü˜1“Xò �Ù˜“J‘ñ÷	ð × Ñ ×&Ñ&¨Ñ*Ð*÷	ð 	ús   §A"Á"A+c                 ó¢  — dt        t        j                  j                  «      z  }t        j                  | j
                  «      5 }|j                  |«      5 }t        j                  || j
                  «      5 }|j                  «       5 }|j                  t        j                  j                  d«       |j                  t        j                  j                  «       t        |d«      5 }	|j!                  |	j#                  «       «      s}t
        j%                  d«       t'        |j(                  «      D ]&  }
t
        j%                  |j+                  |
«      «       Œ( 	 ddd«       ddd«       ddd«       ddd«       ddd«       y	 ddd«       |j-                  ||«      }t        |d«      5 }|j/                  |«       ddd«       |cddd«       cddd«       cddd«       cddd«       S # 1 sw Y   ŒgxY w# 1 sw Y   Œ;xY w# 1 sw Y   nxY wddd«       n# 1 sw Y   nxY wddd«       n# 1 sw Y   nxY wddd«       y# 1 sw Y   yxY w)z§Takes an ONNX file and creates a TensorRT engine to run inference with
        http://gitlab.baidu.com/paddle-inference/benchmark/blob/main/backend_trt.py#L57
        r8   i   @r»   z%ERROR: Failed to parse the ONNX file.NÚwb)rÛ   r”   ÚNetworkDefinitionCreationFlagÚEXPLICIT_BATCHÚBuilderrj   Úcreate_networkÚ
OnnxParserÚcreate_builder_configÚset_memory_pool_limitÚMemoryPoolTypeÚ	WORKSPACEÚset_flagÚBuilderFlagÚFP16r   Úparser¿   Úerrorrd   Ú
num_errorsÚ	get_errorÚbuild_serialized_networkÚwrite)rª   Úonnx_file_pathÚengine_file_pathr—   Úexplicit_batch_flagÚbuilderÚnetworkÚparserÚconfigr‡   rö   Úserialized_enginerÀ   s                r   Úbuild_enginezTRTInference.build_engine0  sç  € ð  ¤C¬×)JÑ)J×)YÑ)YÓ#ZÑZÐä�K‰K˜Ÿ™Ó$ð	%Ø(/Ø×"Ñ"Ð#6Ó7ð	%à;BÜ�N‰N˜7 D§K¡KÓ0ð	%ð 5;Ø×)Ñ)Ó+ð		%ð 06à×(Ñ(¬×);Ñ);×)EÑ)EÀwÔOØ�O‰OœCŸO™O×0Ñ0Ô1ä�n dÓ+ð  ¨uØ—|‘| E§J¡J£LÔ1Ü—L‘LÐ!HÔIÜ!& v×'8Ñ'8Ó!9ò >˜ÜŸ™ V×%5Ñ%5°eÓ%<Õ=ð>à÷ ÷	%÷ 	%÷ 	%÷ 	%ð 	%ð 2÷ ð !(× @Ñ @ÀÈ&Ó QÐÜÐ&¨Ó-ð +°Ø—‘Ð)Ô*÷+ð %÷)	%÷ 	%÷ 	%÷ 	%ô 	%÷ ð  ú÷+ð +ú÷#	%ð 	%ú÷ 	%÷ 	%ñ 	%ú÷ 	%÷ 	%ñ 	%ú÷ 	%÷ 	%ñ 	%úsª   ÁIÁ!H0Á9HÂ
A H	Ã*A4G.ÅH	Å&HÅ.H0Å6IÆ&H	Æ.G:Ç 	H	Ç		HÇ	H0Ç	IÇ.G7Ç3H	Ç:HÇ?H	ÈHÈHÈ	H0ÈH$È H0È'	IÈ0H9	È5IÉI)zdino.enginer¯   Fé    F)r  N)r  )Ú__name__Ú
__module__Ú__qualname__Ú__doc__Úboolr¬   rÛ   r¸   r›   r£   r¥   rŸ   rØ   rß   rá   rÞ   ræ   r  © r   r   rŠ   rŠ   °   sX   „ Ù$ð otñ!!ØEIó!!ðF¨#ó ò=òòóò$òò(ò%ò+ô%r   rŠ   c                   ó*   — e Zd Zd„ Zd„ Zd„ Zd„ Zd„ Zy)ÚTimeProfilerc                 ó   — d| _         y ©Nr   ©rg   rä   s    r   r¬   zTimeProfiler.__init__M  ó   € ð ˆ�
r   c                 ó0   — | j                  «       | _        | S rŽ   )ÚtimeÚstarträ   s    r   Ú	__enter__zTimeProfiler.__enter__R  s   € ð —Y‘Y“[ˆŒ
Øˆr   c                 ód   — | xj                   | j                  «       | j                  z
  z  c_         y rŽ   )rg   r  r  )rª   ÚtypeÚvalueÚ	tracebacks       r   Ú__exit__zTimeProfiler.__exit__X  s   € Ø�
Š
�d—i‘i“k D§J¡JÑ.Ñ.Ž
r   c                 ó   — d| _         y r  r  rä   s    r   rc   zTimeProfiler.reset[  r  r   c                 ó¢   — t         j                  j                  «       rt         j                  j                  «        t	        j
                  «       S rŽ   )r#   r¨   rã   rÞ   r  Úperf_counterrä   s    r   r  zTimeProfiler.time`  s3   € ô �:‰:×"Ñ"Ô$Ü�J‰J×"Ñ"Ô$Ü× Ñ Ó"Ð"r   N)r  r  r  r¬   r  r  rc   r  r
  r   r   r  r  L  s   „ òò
ò/òó
#r   r  r^   Ú	coco_pathry   Úrun_benchmarkÚdisable_evalÚreturnc           	      ó  — t         j                  | ||||dœ«       t        j                  |d«      }t	        |«      }t        j                  |d«      }|rd}t         j                  d«       nd}|sddlm}	  |	|d	«      }
nd
}
t        «       }| j                  d«      r.dd
l	}|j                  | dg¬«      }t        ||
|||d|› �|¬«       y
| j                  d«      r't        | dd|› �¬«      }t        ||
|||d|› �|¬«       y
t        d«      ‚)a'  Performance benchmark tool for ONNX/TRT models.

    Args:
        path: Engine file path (.onnx or .engine).
        coco_path: COCO dataset path.
        device: CUDA device index.
        run_benchmark: Repeat inference 10x to measure latency.
        disable_eval: Skip COCO evaluation.
    )r^   r  ry   r  r  z"annotations/instances_val2017.jsonÚval2017é
   z6Inference for each image will be repeated 10 times ...r8   r   )ÚCocoEvaluator)r[   Nz.onnxÚCUDAExecutionProvider)Ú	providerszcuda:)ry   rz   z.engineT)r‹   ry   zFOnly model file names ending with ".onnx" and ".engine" are supported.)rj   rk   Úospr_   r   Úrfdetr.evaluation.coco_evalr$  r  ÚendswithÚonnxruntimeÚInferenceSessionr…   rŠ   rˆ   rÎ   )r^   r  ry   r  r  Úcoco_gtrx   rw   rz   r$  ru   rv   Únxrunrt   r‡   s                  r   Úmainr.  h  s  € ô  ‡K�KàØ"ØØ*Ø(ñ	
ôô �h‰h�yÐ"FÓG€GÜ˜gÓ&€HÜ�X‰X�i Ó+€FÙØˆÜ�‰ÐLÕMàˆáÝ=á& w°	Ó:‰àˆÜ“>€Là‡}�}�WÔÛ#à×%Ñ% dÐ7NÐ6OÐ%ÓPˆÜ�4˜¨°v¸xÐRWÐX^ÐW_ÐP`ÐjqÖrØ	�‰�yÔ	!Ü˜T¨T¸EÀ&ÀÐ:JÔKˆÜ�U˜N¨L¸&À(ÐUZÐ[aÐZbÐScÐmtÖuä!Ð"jÓkÐkr   Ú__main__)ÚCLI)r8   )z	data/cocor   FF)-r  Ú
contextlibr   r]   Úos.pathr^   r'  r  Úcollectionsr   r   rb   rÐ   r#   ÚPILr   Ú	tqdm.autor   Ú	_tensorrtr”   r•   Úpycuda.driverÚdriverr¨   Úrfdetr.utilities.loggerr   rj   r   r   r%   r4   rU   r…   rˆ   ÚobjectrŠ   ÚContextDecoratorr  ÚstrrÛ   r	  r.  r  Újsonargparser0  r
  r   r   ú<module>r>     s$  ðñó Û Û 	Ý Û ß /ã Û Ý Ý ðÛðÝ õ /á	‹€òò0òò"òó0"óJ"ôJY%�6ô Y%ôx#�:×.Ñ.ô #ð< !ØØØñ3lØ
ð3làð3lð ð3lð ð	3lð
 ð3lð 
ó3lðl ˆzÒÝ áˆ…Ið øðC ò Ø
‚Cðûð
 ò Ø‚Dðús"   ¶B/ »B< Â/B9Â8B9Â<CÃC