o
    ûpií_  ã                   @   sx  d dl Z d dlZd dlZd dl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mZ d dlmZ d dlmZ eee jddZejdd	d
dd„ ƒZejddd
ejddd
ejddd
ejddd
dd„ ƒƒƒƒZejddd
ejddd
dd„ ƒƒZ ejddd
dd„ ƒZ!ejddd
dd„ ƒZ"ejddd
dd „ ƒZ#ejd!dd
d"d#„ ƒZ$ejd$dd
d%d&„ ƒZ%dS )'é    N)Ú
get_logger)Úadd_1D_constant_layerÚfill_constant_layerÚget_input_constant_valueÚget_shape_tensor_elementÚget_trt_pluginÚset_layer_nameÚ
trt_concatÚtrt_divÚ
trt_gatherÚtrt_prodÚ	trt_shapeÚtrt_subÚtrt_sumÚtrt_unsqueeze)Úconverter_registry)ÚRefitManagerz&%(asctime)s-%(levelname)s: %(message)s)Úfmtzpd_op.multiclass_nms3ztrt_version_ge=8.0)Útrt_versionc           "      C   s<  |d }|d }|  ¡  d¡}|  ¡  d¡}|  ¡  d¡}|  ¡  d¡}|  ¡  d¡}	|  ¡  d¡}
|jd }|j}|d |d d|d	 g}|  |¡}t |¡|_t||ƒ |  |¡}d
|_t||ƒ | 	d¡| 	d¡g}t 
dtjdgtjdtjj¡t 
dtj|tjdtjj¡t 
dtj|tjdtjj¡t 
dtj|tjdtjj¡t 
dtj|	tjdtjj¡t 
dtj|tjdtjj¡t 
dtj|tjdtjj¡t 
dtj|
tjdtjj¡t 
dtjdgtjdtjj¡g	}t |¡}d}d}t|||ƒ}|  ||¡}t||ƒ | 	d¡}| 	d	¡}| 	d¡}|  |¡}t||ƒ |  |¡}t||ƒ t |d |	dg¡|_t |d |	dg¡|_| 	d¡| 	d¡|g}| j|d}d	|_t||ƒ | 	d¡}|  |¡}t |d |jd g¡|_t||ƒ t tjdgtjd¡} |  ddg| ¡}!t|!|ƒ | 	d¡|! 	d¡| 	d¡fS )Nr   é   Úbackground_labelÚscore_thresholdÚ	nms_top_kÚnms_thresholdÚ
keep_top_kÚ
normalizedé   )r   r   r   ZshareLocation©ÚdtypeZbackgroundLabelIdZ
numClassesZtopKZkeepTopKZscoreThresholdZiouThresholdZisNormalizedZ	clipBoxesZBatchedNMSDynamic_TRTÚ1é   )Úinputséÿÿÿÿ)ÚattrsÚgetÚshapeÚadd_shuffleÚtrtÚDimsÚreshape_dimsr   Úfirst_transposeÚ
get_outputÚPluginFieldÚnpÚarrayÚint32ÚPluginFieldTypeÚINT32Úfloat32ÚFLOAT32ÚPluginFieldCollectionr   Úadd_plugin_v2Úadd_concatenationÚaxisÚWeightsÚadd_constant)"ÚnetworkÚ	paddle_opr!   ZbboxesZscoresr   r   r   r   r   r   Znum_classesZbboxes_dimsZbboxes_expand_dimsZbboxes_expand_layerZscores_transpose_layerZbatch_nms_inputsÚplugin_fieldsÚplugin_field_collectionÚplugin_nameÚplugin_versionÚpluginZbatch_nms_layerZnmsed_boxesZnmsed_scoresZnmsed_classesZnmsed_scores_transpose_layerZnmsed_classes_reshape_layerÚconcat_inputsZnms_concat_layerZnms_concat_outputZnms_shuffle_layerÚshape_weightZconstant_layer© rC   úc/home/app/PaddleOCR-VL/.venv_paddleocr/lib/python3.10/site-packages/paddle/tensorrt/impls/others.pyÚmulticlass_nms3_converter-   sÖ   




þýýýýýýýýý×
/ÿ







ÿÿý


ÿ

ýrE   úpd_op.set_valuez8.xúpd_op.set_value_úpd_op.set_value_with_tensorúpd_op.set_value_with_tensor_c               
   C   s,  |d }|  ¡ dks|  ¡ dkr)t||dƒd }t||dƒd }t||dƒd }nt||dƒd }t||dƒd }t||dƒd }| ¡ d d }|j}|dk rV|t|ƒ7 }|dk r`||| 7 }||| krj|| }|  ¡ d	ksv|  ¡ d
kr{|d }	nh| ¡  d¡}
t| ||  ¡ dgd}g }tt|ƒƒD ]}| t	| |||  ¡ d|› gd¡ q•|d | | d g}t
| ||  ¡ d|› gd||< t| |d|  ¡ dgd}t| |t|jƒ|
|j|  ¡ dgd}	t d|› ¡ | ¡ d }t|ƒdkrt|	jƒt|jƒkrt| |	||  ¡ dgd}	t|	jƒ}t|jƒ}|  ¡ }||ks&J dƒ‚t d|	j› ¡ |	j}|| dks=J dƒ‚|| dksHJ dƒ‚t|ƒ}||ksUJ dƒ‚||| ks`J dƒ‚|d | | d }|| |ksuJ dƒ‚dgt|ƒ }t tjdgtjd¡}|  ||¡}t||ƒ | d¡}t| ||	|  ¡ dgd}|  |¡}t||ƒ | dtj¡ | d¡}dgt|ƒ }|| ||< g }t|||ƒD ]}| |¡ qÏt tj|tjd¡}|  ||¡}t||ƒ | d¡}t| |||  ¡ dgd}|  |||	tjj ¡}t||ƒ ||_!| d¡S )Nr   rF   rG   r   r   r    é   ÚaxesrH   rI   ÚvaluesÚinput_shape_tensor©ÚnameZvec_tensor_Úoutput_shape_tensorÚupdatesz#Set_value_op: input's dimension is Údecrease_axesz¢value's rank is not equal to input's rank, you should modify trt_config(a TensorRTConfig object) and set trt_config.disable_ops = ["{op_name}"] to forbid this op z,Set_value_op: updates tensor's simension is zWthe update value shape[{axes}] must be greater than 0, but received {update_dims[axes]}zOthe input shape[{axes}] must be greater than 0, but received {input_dims[axes]}z;The axes {axes} is larger than total axes {input_dims_rank}zOThe start {starts} of dim {axes} is larger than origin shape {input_dims[axes]}zdthe {axes}th axis of update dim error, should be {target_update_dim}, but we got {update_dims[axes]}r   Úindice_tensor)"rO   r   r#   r%   Úlenr$   r   ÚrangeÚappendr   r   r	   r   r   Ú_loggerÚinfor   r'   r8   r-   r.   r2   r9   r   r+   r   Úadd_identityZset_output_typer/   r   Zadd_scatterZScatterModeZELEMENTr7   ) r:   r;   r!   ÚxZstartsZendsZstepsrK   Ú
input_dimsrQ   ÚvaluerM   Z
vec_tensorÚiZaxes_vecrP   rR   Z
value_rankZ
input_rankZop_nameZupdate_dimsZinput_dims_rankZtarget_update_dimZshape_0rB   Zzero_tensorrS   Z
cast_layerZshape_1Ztmp_1Z
one_tensorÚlayerrC   rC   rD   Úset_value_converter¬   sî   
ÿüÿ	
ÿ
ü
ú	$
ü

ÿÿÿÿÿÿ

ÿ





üÿ

r_   zpd_op.share_datazpd_op.share_data_c                 C   s&   |d }|   |¡}t||ƒ | d¡S )Nr   )rY   r   r+   )r:   r;   r!   rZ   Zidentity_layerrC   rC   rD   Úshare_data_converterC  s   


r`   zpd_op.temporal_shiftc           -      C   sÊ  |d }|  ¡ d d }|  ¡ d }|  ¡  dd¡}|dkr5|  |¡}t g d¢¡|_t||ƒ | d¡}|j}|d	 |d
 |d }	}
}|  |¡}t 	d||	|
|g¡|_
t||ƒ | d¡}t| g d¢| ¡ dgd}t| g d¢| ¡ dgd}d}t| dg| | ¡ dgd}t| ||| ¡ dgd}t| ||| ¡ dgd}t| || ¡ dgd}t| ||| ¡ dgd}d	g| }|}|  ||||¡}| d	|¡ | d
|¡ t||ƒ tj d¡}t|d ƒdks÷t|d ƒdkrýt|d	 ƒdkrýtjj|_ntjj|_t|	| ƒ}t|	| d
 ƒ}|}t| dd
|ddg| ¡ dgd}t| dd	|ddg| ¡ dgd}t| || ¡ dgd}t| dd|	| ddg| ¡ dgd}t| dd|	| | ddg| ¡ dgd} t| dd|ddg| ¡ dgd}!t| ||| ¡ dgd}"t| || | ¡ d gd}#t| ||!| ¡ d!gd}$| j| d¡|||d"}%|% d	|¡ |% d
|"¡ t|%|ƒ | j| d¡|||d"}&|& d	|¡ |& d
|#¡ t|&|ƒ | j| d¡|||d"}'|' d	|¡ |' d
|$¡ t|'|ƒ |& d¡|' d¡g}(|dkr|  |(¡})d
|)_t|)|ƒ n|% d¡|& d¡|' d¡g}(|  |(¡})d
|)_t|)|ƒ |  |) d¡¡}*t 	d|	|
|g¡|*_
t|*|ƒ |dkr^|  |* d¡¡}+t g d#¢¡|+_t|+|ƒ |+ d¡},|,S |* d¡},|,S )$Nr   Úshift_ratiogH¯¼šò×z>Zseg_numÚdata_formatÚNCHWÚNHWC©r   r    r   r   r   r   r    r"   )r   r   r   r   r   Úpre_padrN   Úpost_padé   ÚzerosÚstartÚtotal_paddingÚinput_shapeÚsizeÚ.é   Úslice_start2Úslice_start3Úslice_size_baseÚ	sub_size1Ú	sub_size2Ú	sub_size3Úslice_size1Úslice_size2Úslice_size3)rj   r%   Ústride©r   r   r    r   )r#   r$   r&   r'   ÚPermutationr*   r   r+   r%   r(   r)   r   rO   r   r   r   Z	add_sliceÚ	set_inputÚ__version__ÚsplitÚintZ
SampleModeZFILLÚmodeZ	SliceModer6   r7   )-r:   r;   r!   Zinput_tensorra   ÚTrb   Ztranspose_layerr[   ÚCÚHÚWZreshape_layerrf   rg   Údimsri   rj   rk   rl   rm   ry   ÚdummyZslice_layerr   Zslice_cZslice_c2Zslice_start1rp   rq   rr   rs   rt   ru   rv   rw   rx   Zslice1_layerZslice2_layerZslice3_layerrA   Zconcat_layerZreshape_layer3Ztranspose_layer2Zoutput_tensorrC   rC   rD   Útemporal_shift_converterL  s   





ÿÿÿÿÿÿ

 
ÿÿÿÿ
ýÿ
ü
ü
üÿ
ÿ
ÿ


ý






þr‡   zpd_op.anchor_generatorc                 C   s„  |d }|j }| ¡  d¡}| ¡  d¡}| ¡  d¡}| ¡  d¡}| ¡  d¡}t|ƒt|ƒ }	|d }
|d }||
 |	 }tj}t dtj|tjd	tj	j
¡t dtj|tjd	tj	j
¡t dtj|tjd	tj	j
¡t dtj|tjd	tj	j
¡t dtj|tjd	tj	j
¡t d
tj|	tjd	tj	j¡g}t |¡}d}d}t|||ƒ}|  |g|¡}t||ƒ | d¡}| d¡}||fS )Nr   Úanchor_sizesÚaspect_ratiosry   Ú	variancesÚoffsetr   r   r   Únum_anchorsZ#pir_anchor_generator_plugin_dynamicr   )r%   r#   r$   rT   r'   r2   r,   r-   r.   r0   r3   r/   r1   r4   r   r5   r   r+   )r:   r;   r!   r[   rˆ   r‰   ry   rŠ   r‹   rŒ   ÚheightÚwidthZbox_numZ	data_typer<   r=   r>   r?   r@   Zanchor_generator_layerZout0Zout1rC   rC   rD   Úanchor_generator_converterè  sl   ýýýýýýæ
 ÿ


r   zpd_op.affine_channelc                 C   sL  |\}}}|  ¡  d¡}t|tjƒr"tƒ }| |j¡}| |j¡}	n|}|}	|dkr/d}
|}n |dkrH|  |¡}d|_	t
||ƒ | d¡}d}
ntd|› ƒ‚|j|	jkrbtd|j› d	|	j› d
ƒ‚tj|jftjd}t |¡}| j|tjj|	|||
d}t
||ƒ |s‰tdƒ‚| d¡}|dkr¤|  |¡}d|_	t
||ƒ | d¡}|S )NÚdata_layoutrc   r   rd   re   r   z$affine_channel: Unsupported layout: zaffine_channel: scale.size(z) != bias.size(ú)r   )Úinputr€   ÚshiftÚscaleÚpowerÚchannel_axisz$affine_channel: add_scale_nd failed.rz   )r#   r$   Ú
isinstancer'   ZITensorr   Zget_trt_weight_tensorrO   r&   r*   r   r+   Ú
ValueErrorrm   r-   Zonesr2   r8   Zadd_scale_ndZ	ScaleModeZCHANNELÚRuntimeError)r:   r;   r!   rZ   r”   Zbiasr   Zrefit_managerZscale_weightsZbias_weightsr–   Zx_inputZshuffle_layer1Zpower_arrayZpower_weightsr^   Z
out_tensorZshuffle_layer2rC   rC   rD   Úaffine_channel_converter%  sT   



ÿ
ú




rš   zpd_op.shuffle_channelc                 C   s4  |d }|  ¡  d¡}t| || ¡ dgd}t| |d| ¡ dgd}t| |d| ¡ dgd}t| || ¡ dgd}t| ||| ¡ d	gd}	d
dg}
t| ||
| ¡ dgd}|||	|g}t| || ¡ dgd}|  	|¡}| 
d|¡ t g d¢¡}||_t||ƒ | d¡}|  	|¡}| 
d|¡ t||ƒ | d¡S )Nr   ÚgrouprM   rN   Úbatch_shape_tensorr   Úchannel_shape_tensorÚgroup_tensorÚnew_channel_shape_tensorr   r    Úshape_dim2_tensorÚreshape_tensor)r   r   r   r    rJ   )r#   r$   r   rO   r   r   r
   r   r	   r&   r|   r'   r{   Zsecond_transposer   r+   )r:   r;   r!   r’   r›   rM   rœ   r   rž   rŸ   Z
shape_dim2r    Zitensorsr¡   r^   Ztranspose_embedÚoutputZoutput_layerrC   rC   rD   Úshuffle_channel_converter]  sf   ÿ
ü
üÿ
ü
üüÿ





r£   zpd_op.full_batch_size_likec                    sh  |d }|  ¡  d¡}|  ¡  d¡‰ |  ¡  d¡}|  ¡  d¡‰t|ƒ}t| || ¡ dgd}t| ||| ¡ dgd}t| ˆ| ¡ d	gd}‡ ‡fd
d„ttˆƒƒD ƒ}	||g}
t	| |
| ¡ dgd}t
| ||	| ¡ dgd}| jdtjjd}t| |gd| ¡ dgd}dgtˆƒ }t| |d| ¡ dgd}| d|¡ | d|¡ | d|¡ t||ƒ | d¡S )Nr   Úinput_dim_idxÚoutput_dim_idxr\   r%   rM   rN   Úbatch_tensorÚshape_attr_tensorc                    s    g | ]}|ˆ krt ˆƒn|‘qS rC   )rT   )Ú.0r]   ©r¥   r%   rC   rD   Ú
<listcomp>¬  s    ÿz2full_batch_size_like_converter.<locals>.<listcomp>Úconcat_tensorÚout_shape_tensorrC   )r%   ÚopTÚvalue_tensor)Z	is_scalarrO   g        FÚbeta_tensorr   r   )r#   r$   Úfloatr   rO   r   r   rU   rT   r	   r   Zadd_fillr'   ZFillOperationZLINSPACEr|   r   r+   )r:   r;   r!   r’   r¤   r\   rM   r¦   r§   Zgather_output_shape_indicesrA   r«   r¬   r^   r®   Zbeta_vecr¯   rC   r©   rD   Úfull_batch_size_like_converter•  sd   ÿ
üÿ
ÿÿ
ü
ü
ü

r±   )&ÚloggingÚnumpyr-   Ztensorrtr'   Zpaddle.base.log_helperr   Zpaddle.tensorrt.converter_utilsr   r   r   r   r   r   r	   r
   r   r   r   r   r   r   Zpaddle.tensorrt.registerr   Zpaddle.tensorrt.utilr   Ú__name__ÚINFOrW   ÚregisterrE   r_   r`   r‡   r   rš   r£   r±   rC   rC   rC   rD   Ú<module>   sD   @ÿÿ
| 
 
<
7
7