
    9i                        S SK r S SKrS SKrS SKrS SKrS SKJr  S SKrS SK	r
S SKrSSKJr  \R                  S:  a  \R                   R"                  r\R$                  " \R&                  SS9  \R(                  R                  R$                  r\R(                  R                  R+                  SSS	5        S
rSrSrSrSrSrSrSrS rSrSr S r!S
r"S r#S4S jr$      S5S jr%       S6S jr&       S6S jr'       S7S jr(       S7S jr)      S5S jr*S r+S r,S r-     S8S jr.S9S jr/S9S jr0S r1S4S  jr2S! r3S" r4S# r5S$ r6S% r7S& r8S' r9S( r:S) r;S* r<S+ r=S, r>S- r?S. r@S/ rAS0 rBS1 rCS2 rDS3 rEg):    N   )utilsz2.0T)
known_onlyweight_init_methodxavierzWeight initialization method                  c                    [         R                  R                  [         R                  R                  [         R                  R	                  [
        5      5      SR                  U 5      5      nSR                  [        [        R                  " 5       5      SS [        5      n[        R                  " X5        [        R                  " U5      nU$ )z#
Load TensorFlow operator library.
z	lib{0}.soz/tmp/lib{0}_{1}.soNr
   )ospathjoindirnamerealpath__file__formatstruuiduuid4LIB_NAMEshutilcopyfiletfload_op_library)lib_namelib_pathlib_copy_pathoplibs       e/var/www/html/land-doc-ocr/venv/lib/python3.13/site-packages/modelscope/pipelines/cv/ocr_utils/ops.py
load_oplibr$   0   s    
 ww||
((238$&H
 )//DJJL"1x)M
OOH,}-EL    c                    US:X  a  [         R                  " S5      nGO3US:X  a}  [        U5      S:X  a'  USS u  pgn[        R                  " SXg-  U-  -  5      n	O/[        U5      S:X  a  Uu  p[        R                  " S	U
-  5      n	OS
e[         R
                  " SU	5      nOUS:X  aa  [        U5      S:X  a)  [         R                  R                  R                  5       nOr[         R                  R                  R                  5       nOI[        U[        5      (       a/  [        U5      S:X  d   e[         R
                  " US   US   5      nOSU-   e[         R                  " XUS9nUb  [         R                  " X;5        U$ )a#  
Create or reuse a variable
ARGS
  name: variable name
  shape: variable shape
  init_method: 'zero', 'kaiming', 'xavier', or (mean, std)
  collection: if not none, add variable to this collection
  kwargs: extra parameters passed to tf.get_variable
RETURN
  var: a new or existing variable
zero        kaimingr   Nr          @r         ?zUnsupported shaper   r   r   z*Unsupported weight initialization method: )shapeinitializer)r   constant_initializerlenmathsqrttruncated_normal_initializerkerasinitializersglorot_normal
isinstancetupleget_variableadd_to_collection)namer,   init_method
collectionkwargsr-   khkwn_ininit_stdn_outvars               r#   _nn_variablerD   A   sJ    f--c2			!u:? !9LBDyy$!78HZ1_KDyyu-H%%55c8D		 u:?((//==?K((//==?K	K	'	'K A%&%55k!n6A!nF ;[HH
//$
EC
Z-Jr%   c
           	         U=(       d    [         R                  nU
R                  SS5      nUS:X  a  U R                  5       S   nU R                  5       S   nX-  S:X  a  [	        X4-
  S5      nO[	        X<U-  -
  S5      nX-  S:X  a  [	        X4-
  S5      nO[	        X=U-  -
  S5      nUS-  nUU-
  nUS-  nUU-
  n[
        R                  " SS/UU/UU/SS//5      n[
        R                  " U US5      nOU n[
        R                  " U	=(       d    S5         [        S	X3X/U4S
U(       a  SOS 0U
D6n[
        R                  R                  UUSXDS/SS9nUSL a:  [        SU/S4S
U(       a  SOS 0U
D6n[
        R                  R                  UU5      nWnUSL a  [
        R                  R                  U5      nS S S 5        UU4$ ! , (       d  f       WW4$ = f)N	trainableTSAMEr   r   r   CONSTANTconv2dweightr<   weightsVALIDpaddingbiasr'   biases)FLAGSr   get	get_shapemaxr   constantpadvariable_scoperD   nnrI   bias_addrelu)xr@   rB   ksizestriderN   weight_initrO   rZ   scoper=   rF   	in_heightin_widthpad_along_heightpad_along_width
pad_bottompad_top	pad_rightpad_leftpaddingsinput_paddedkernelycybys                             r#   rI   rI   l   s    9!9!9K

;-I6KKM!$	;;=#!#"5>15"5,>#?C"!%.!4O!%f+<"=qAO%*
"Z/#q(	"Y.;;A*(=!)9 51v ? @vva:6			5,H	-uT1 %.y4 	
 UU\\&1fa"8'  K 4< (18d 	D
 D)B4<

2A) 
.* q5L+ 
.	-* q5Ls   B$G
Gc                    [        U R                  5       5      S-
  n[        R                  " U [	        X-  5      /U-  U5      n/ n[        U5       H3  n[        X   X-  X%-  UUUUUU	SX4-  S9
u  nnUR                  U5        M5     [        R                  " XU
S-   S9n[        R                  R                  U5      n	UU	4$ )Nr   %s_%dr\   r]   rN   r^   rO   rZ   r_   _concatvaluesaxisr:   )r/   rS   r   splitintrangerI   appendconcatrX   rZ   )r[   r@   rB   r\   r]   grouprN   r^   rO   rZ   r:   r=   
group_axissplits	conv_listi
conv_split
relu_splitconvs                      r#   group_conv2d_relur      s     Q[[]#a'JXXa#dl+,u4jAFI5\!'ILM#TI%
"'
J 	$  99ITI=MND55::dD:r%   c                 .   [        U R                  5       5      S-
  n[        R                  " U [	        X-  5      /U-  U5      n/ n[        U5       H3  n[        X   X-  X%-  UUUUUU	SX4-  S9
u  nnUR                  U5        M5     [        R                  " XU
S-   S9n[        R                  " U
S-   5         [        R                  R                  USSS	S	S
9nS S S 5        [        R                  R                  W5      n	UU	4$ ! , (       d  f       N1= f)Nr   ro   rp   rq   rr   _bn?h㈵>Tmomentumepsilonscaletraining)r/   rS   r   ru   rv   rw   rI   rx   ry   rW   layersbatch_normalizationrX   rZ   )r[   r@   rB   r\   r]   rz   rN   r^   rO   rZ   r:   r=   r{   r|   r}   r~   r   r   r   bns                       r#   group_conv2d_bn_relur      s    Q[[]#a'JXXa#dl+,u4jAFI5\!'ILM#TI%
"'
J 	$  99ITI=MND			4%<	(YY**3D4 + I 
) 55::b>D:	 
)	(s   9"D
Dc                     [        U UUS-  4SSUUUU	U
S-   S.UD6u  p[        UUS-  US-  4UUUUUUU	U
S-   S.UD6u  p[        UUS-  U4SSUUUU	U
S-   S.UD6u  nnUU4$ Nr   r   _arp   _b)r\   r]   rz   rN   r^   rO   rZ   r:   _c)	conv_relur   r[   r@   rB   r\   r]   rz   rN   r^   rO   rZ   r:   r=   conv_arelu_aconv_brelu_bconv_crelu_cs                     r#   	next_convr      s     	q Tk NF 'q	 D[ NF 	 Tk NFF 6>r%   c                     [        U UUS-  4SSUUUU	U
S-   S.UD6u  p[        UUS-  US-  4UUUUUUU	U
S-   S.UD6u  p[        UUS-  U4SSUUUU	U
S-   S.UD6u  nnUU4$ r   )conv_bn_relur   r   s                     r#   next_conv_bnr   %  s     "	q Tk NF *q	 D[ NF "	 Tk NFF 6>r%   c
           	         U=(       d    [         R                  nU
R                  SS5      n[        R                  " U	=(       d    S5         [        SX3X/U4SU(       a  SOS 0U
D6n[        R                  R                  XSXDS/US9nUSL a9  [        S	U/S
4SU(       a  SOS 0U
D6n[        R                  R                  X5      nUSL a  [        R                  R                  U5      nS S S 5        U$ ! , (       d  f       W$ = f)NrF   TrI   rJ   r<   rK   r   rM   rO   r'   rP   )
rQ   r   rR   r   rW   rD   rX   rI   rY   rZ   )r[   r@   rB   r\   r]   rN   r^   rO   rZ   r_   r=   rF   rj   rm   s                 r#   
conv2d_orir   \  s    9!9!9K

;-I			5,H	-uT1 %.y4 	
 EELLQ$:GLL4< (18d 	D
 q'A4<

1A% 
.& H' 
.	-& Hs   B C55
Dc                  8    SUS'   SU;  a  SUS'   [        U 0 UD6$ NTrZ   r_   r   )rI   argsr=   s     r#   r   r     s,    F6Nf%w4"6""r%   c            	      .   SUS'   SU;  a  SUS'   [        U 0 UD6u  p#[        R                  " US   S-   5         [        R                  R	                  USSSSS9nS S S 5        [        R
                  R                  W5      nXE4$ ! , (       d  f       N0= f)	NTrZ   r_   r   r   r   r   r   )rI   r   rW   r   r   rX   rZ   )r   r=   r   rZ   r   bn_relus         r#   r   r     s    F6Nf%w((JD			6'?U2	3YY**3D4 + I 
4 eejjnG;	 
4	3s   "B
Bc                  8    SUS'   SU;  a  SUS'   [        U 0 UD6$ r   )r   r   s     r#   conv_relu_orir     s,    F6Nf%wt&v&&r%   c
                    U=(       d    [         R                  nU
R                  SS5      n[        R                  " U	=(       d    S5         [        SX3X/U4SU(       a  SOS 0U
D6n[        R                  R                  XXES9nUSL a9  [        SU/S	4SU(       a  S
OS 0U
D6n[        R                  R                  X5      nUSL a  [        R                  R                  U5      nUsS S S 5        $ ! , (       d  f       g = f)NrF   Tatrous_conv2drJ   r<   rK   rM   rO   r'   rP   )
rQ   r   rR   r   rW   rD   rX   r   rY   rZ   )r[   r@   rB   r\   dilationrN   r^   rO   rZ   r_   r=   rF   rj   rm   s                 r#   r   r     s     9!9!9K

;-I			53O	4uT1 %.y4 	
 EE8E4< (18d 	D
 q'A4<

1A' 
5	4	4s   BC22
D c           	          [         R                  " U=(       d    S5         [         R                  R                  U SXS/SX"S/U5      nS S S 5        U$ ! , (       d  f       W$ = f)Navg_poolr   )r   rW   rX   r   r[   r\   r]   rN   r_   rm   s         r#   r   r     Z    			5.J	/EENN1q%2Q4J"$ 
0 H 
0	/ H   )A
A"c           	          [         R                  " U=(       d    S5         [         R                  R                  U SXS/SX"S/U5      nS S S 5        U$ ! , (       d  f       W$ = f)Nmax_poolr   )r   rW   rX   r   r   s         r#   r   r     r   r   c                     [         R                  " [         R                  " U [         R                  5      USS5      n[         R                  R                  X5      n[         R                  " U5      $ )z^
Classification loss
ARGS
  gt_labels: int32 [n]
  match_scores: [n, n_classes]
RETURN
  loss
r+   r(   )r   one_hotcastint64rX   !softmax_cross_entropy_with_logits
reduce_sum)	gt_labelsmatch_scores	n_classes
embeddingslossess        r#   
score_lossr     sJ     BGGIrxx8)S#NJUU44\NF==  r%   c                    [         R                  " U=(       d    S5         [         R                  " U5      n[         R                  " X-
  5      n[         R                  " [         R
                  " US5      [         R                  5      nSU-
  nS[         R                  " U5      -  U-  nUS-
  U-  n[         R                  " Xg-   S5      sSSS5        $ ! , (       d  f       g= f)z
Smooth L1 loss between offsets and encoded_gt
ARGS
  offsets: [m?, 5], predicted offsets for one example
  gt_offsets: [m?, 5], corresponding groundtruth offsets
RETURN
  loss: scalar
smooth_l1_lossr+         ?r   N)	r   rW   stop_gradientabsr   lessfloat32squarer   )offsets
gt_offsetsr_   difflesser_masklarger_masklosses1losses2s           r#   r   r     s     
		54$4	5%%j1
vvg*+ggbggdC0"**=K'4(K7#:,}}W.2 
6	5	5s   B*C
C"c                    U S   nU S   nU S   nU S   nU S   nU S   nU S   nU S   nX-   U-   U-   S-  n	X$-   U-   U-   S-  n
[        XX45      n[        XVXx5      n[        XXX45      n[        XXVXx5      nX-   nX-   S-  n[        R                  " XB-
  X1-
  5      n[        R                  " Xh-
  XW-
  5      nUU-   S-  n[        R                  " XUUU/5      $ )	Nr   r   r   r   r   r	   r      )
point_distpoint_line_distnparctan2array)polygonx1y1x2y2x3y3x4y4c_xc_yw1w2h1h2hwtheta1theta2thetas                       r#   polygon_to_rboxer     s   	B	B	B	B	B	B	B	B7R<"
!C7R<"
!C	BB	#B	BB	#B	22	2B	22	2B
A	AAZZ)FZZ)Ff_!E88Sq!U+,,r%   c                 P    [         R                  " X -
  X -
  -  X1-
  X1-
  -  -   5      $ N)r   r1   )r   r   r   r   s       r#   r   r     s(    77BG(BG+@@AAr%   c                     SnXB-
  nXS-
  n[         R                  " Xw-  X-  -   5      U-   n	[         R                  " X-  X-  -
  XC-  -   XR-  -
  5      U	-  n
U
$ )Nư>)r   r1   r   )pxpyr   r   r   r   epsdxdydivdists              r#   r   r     s`    
C	B	B
''"'BG#
$s
*C66"'BG#bg-783>DKr%   c           	      .   US   nUS   n[         R                  " X2S4[         R                  5      n[        U R                  S   5       Hr  n[         R
                  " [         R                  " [        R                  " U 5      US S 24   [         R                  5      S5      n[        R                  " XF/SSS5        Mt     [        R                  " U[        R                  5      n[        R                  " USS[        R                  5      u  p[        R                   " U	[        R"                  [        R$                  5      u  pn['        U5      S:  a  US   n[        R(                  " U5      nU H7  n[        R(                  " U5      U:  d  M  Un[        R(                  " U5      nM9     [        R*                  " U5      n[         R                  " [        R,                  " U5      5      R                  S5      nU$ [         R                  " / S	Q5      nU$ )
Nr   r   r   )r   r   r   )   r   r   r      r   )r   r   r   r   r   r   r   r   )r   zerosuint8rw   r,   reshaper   r   rboxes_to_polygonsint32cv2drawContourscvtColorCOLOR_BGR2GRAY	thresholdTHRESH_BINARYfindContours	RETR_TREECHAIN_APPROX_SIMPLEr/   contourAreaminAreaRect	boxPoints)rboxesresize_sizeimage_wimage_himgr~   segmentimg2grayretthreshim2contours	hierarchycntmax_areacontrectcombined_polygons                     r#   get_combined_polygonr    s   !nG!nG
((Ga("((
3C6<<?#**HHU--f5ad;RXXF 	iOR@	 $
 ||C!3!34H--#sC4E4EFKC"//030G0G IC9
8}qqk??3'Dt$x/??40  s#88CMM$$78@@D  88$<=r%   c                    [         R                  " U 5      n U R                  S:X  d   S5       eU R                  S   S:X  d   S5       e[	        U 5      S:X  aM  U S   nU S   nU S	   nU S
   nU S   nU S   n[         R
                  " XV5      n[         R                  " XX4U/5      $ U S S 2S4   nU S S 2S4   n	U S S 2S4   n
U S S 2S4   n[         R
                  " UR                  5       U
R                  5       5      n[         R                  " U5      n[         R                  " XU-  -
  5      nX-  U-   X-  -
  US-  S-   -  nX-  U	-  X-  -   U-   US-  S-   -  n[         R                  " UU4S5      nSnSnSn[        [	        U5      5       Hr  nUUS S 24   n[        US-   [	        U5      5       HJ  nUUS S 24   n[         R                  " [         R                  " UU-
  S-  5      5      nUU:  d  MD  UnUnUnML     Mt     US:  a  US:  d   eU US S 24   nU US S 24   nUS S US S -   S-  u  nn[         R                  " U S S 2S4   5      nUUS   US   -   S-  -   nUUUUU4$ )Nr   zinvalid segs ndimr   r   zinvalid segs shaper   )r   r   )r   r   )r   r   )r   r   )r   r   )r   r	   r   r   r	   r*   r   )r   asarrayndimr,   r/   r   r   sumtanmeanstackrw   r1   ) segscxcyr   r   	theta_sin	theta_cosr   cxscys
theta_coss
theta_sins	bar_thetakbproj_xsproj_ysproj_pointsmax_distidx1idx2r~   point1jpoint2r   seg1seg2bcxbcybhbws                                    r#   combine_segsr?  -  s   ::dD99>...>::b>Q4 44
4yA~$Z$ZJJJ	J	

90xxu-.. q!t*C
q!t*CadJadJ

:>>+Z^^-=>I
yA
#gAw}qu$A2Gus{QW$q(QTAX6G((GW-r2K HDD3{#$QT"q1uc+./A A&F772666F?Q"678Dh 0 % 19""a=Da=DRa48#s*HC	ad	B	T!WtAw&#-	-BRY&&r%   c                    Sn/ n/ n[        U5       H  nX&   nXS S 2S S 24   nXS S 24   n	/ n
[        U5       HV  nU[        R                  " X:H  5      S   S S 24   nUR                  S   S:  d  M:  [	        U5      nU
R                  U5        MX     UR                  U
5        UR                  [        U
5      5        M     [        R                  " U5      n[        U5       HP  nXV   U:X  a  M  XU   -
  [        S/-  /-  n[        R                  " XF   [        R                  " U5      45      XF'   MR     [        R                  " U[        R                  5      [        R                  " U[        R                  5      4$ )Nr   r   r(   )rw   r   wherer,   r?  rx   r/   rT   RBOX_DIMvstackr   r  r   r   )segments_batchgroup_indices_batchsegment_counts_batch
batch_sizecombined_rboxes_batchcombined_counts_batchimage_idgroup_countsegmentsgroup_indicescombined_rboxesr~   segments_groupcombined_rbox	max_countcombined_rboxes_pads                   r#   combine_segments_batchrS  c  sr   J*%*4!Aq.1+aK8{#A%bhh}/A&B1&Eq&HIN##A&* ,^ <&&}5	 $
 	$$_5$$S%9: & ,-I*%$.);#,X/N#N(0C5(8'9#:.0ii&0-.0/1!+	 & ::+jj"#%::.CRXX#NO Or%   c                     [         R                  " [        XU/[         R                  [         R                  /5      u  p4X44$ r   )r   py_funcrS  r   r   )rL  rM  segment_countsrN  combined_countss        r#   combine_segments_pythonrX    s8    ')zz. I	RXX( $O ++r%   c                 >   XS   S   :  a  SnXS   S   -  nXS   S   -  nOXS   S   :  a)  SnXS   S   -
  US   S   -  nXS   S   -
  US   S   -  nOXS   S   :  a)  SnXS   S   -
  US   S   -  nXS   S   -
  US   S   -  nOXS   S   :  a)  SnXS   S   -
  US   S   -  nXS   S   -
  US   S   -  nO\XS   S   :  a)  SnXS   S   -
  US   S   -  nXS   S   -
  US   S   -  nO(SnXS   S   -
  US   S   -  nXS   S   -
  US   S   -  nX4U4$ )Nr   r   r   r   r   r	    )r   map_sizeoffsets_defaultsl_idxr[   rm   s         r#   	get_coordr^    s   !$Q''qk!n${1~%	A&q)	)*1--!Q?*1--(1+a.@	A&q)	)*1--!Q?*1--(1+a.@	A&q)	)*1--!Q?*1--(1+a.@	A&q)	)*1--!Q?*1--(1+a.@*1--!Q?*1--(1+a.@Q;r%   c                     XS   S   :  a  U [         -  nU [         -  nO9XS   S   -
  [         [        -   -  US   S   -   nXS   S   -
  [         [        -   -  n[        X1U5      u  pVnXVXt4$ Nr   r   )N_LOCAL_LINKSN_CROSS_LINKSr^  )r   r[  r\  offsets_nodelink_idxr]  r[   rm   s           r#   get_coord_linkre    s    !$Q''-/]*1"5a"88M)+-=a-@-CDq1!44M)+L4DEKEaQ  r%   c                 l    X0   S   nX0   S   nUS:  =(       a    X:  =(       a    US:  =(       a    X%:  $ r`  rZ  )r]  r[   rm   r[  r   r   s         r#   is_valid_coordrg    s;    AA60ae0Q0150r%   c                    U S:X  aE  SUS-
  US-
  4SXS-
  4SUS-   US-
  4SUS-
  U4SUS-   U4SUS-
  US-   4SXS-   4SUS-   US-   4/nO~XS-
  US-
  4XUS-
  4XS-   US-
  4XS-
  U4XS-   U4XS-
  US-   4XUS-   4XS-   US-   4U S-
  SU-  SU-  4U S-
  SU-  S-   SU-  4U S-
  SU-  SU-  S-   4U S-
  SU-  S-   SU-  S-   4/n/ nSnU H  u  pn
[        XX5      (       av  XH   S   X8   S   U
-  -   U	-   nU S:X  a   X@   S   X0   S   U-  U-   [        -  -   U-   nO(X0   S   U-  U-   [        [        -   -  nX@   S   U-   U-   nUR                  XU/5        US-  nM     U$ )Nr   r   r   )rg  ra  rb  rx   )r]  r[   rm   r[  r\  coordneighbours_offsetsrd  nl_idxnxnyneighbours_offset_nodeneighbours_offset_linkoff_tmps                 r#   get_neighboursrq    sc   zQUAE"Qq5MAq1ua!e3DQUAAE11q5!a%/@QAAE1q5 13 QA&AE"UE1q5$9Eq5!;LQ"UE1q5$9Ea!e;LQA&AE1q5(A!)QUQYA.AE1q5190M!)QUQYA	24 HB&b33%5%=&%a(2-&.02&3"z)9)@)COA&*Q.-G@ *@BJ*K& $?1-1A5!M13)9)@* *!#+*,&%%'JLA    r%   c                    Sn[         R                  " U Vs/ s H   n[         R                  " XeS[        /5      PM"     snSS9n[         R                  " U Vs/ s H   n[         R                  " XeS[        /5      PM"     snSS9n[         R                  " U Vs/ s H   n[         R                  " XeS[
        /5      PM"     snSS9n	[         R                  " [        XxX[         R                  " U5      /[         R                  [         R                  [         R                  [         R                  /5      u  ppXX4$ s  snf s  snf s  snf )Nr   r   rt   )r   ry   r   N_SEG_CLASSESN_LNK_CLASSES
OFFSET_DIMrU  decode_batchrU   r   r   
image_size	all_nodes	all_linksall_reganchor_sizesrG  oall_nodes_flatall_links_flatall_reg_flatrL  rM  rV  group_indices_alls                 r#   decode_segments_links_pythonr    s   JYYAJKAAB6	7KN YYAJKAAB6	7KN 99>EFgAB
3	4gFQPLACLKK%
 JJ"((BHH5	B7>H^
 NEE 	L 	L 	Gs   'D<'E'Ec                    [         R                  n[        R                  " U Vs/ s H   n[        R                  " XeS[
        /5      PM"     snSS9n[        R                  " U Vs/ s H   n[        R                  " XeS[        /5      PM"     snSS9n[        R                  " U Vs/ s H   n[        R                  " XeS[        /5      PM"     snSS9n	[        R                  " [        XxX[        R                  " U5      /[        R                  [        R                  [        R                  [        R                  /5      u  ppXX4$ s  snf s  snf s  snf )Nr   r   rs  )rQ   train_batch_sizer   ry   r   rt  ru  rv  rU  rw  rU   r   r   rx  s                 r#   decode_segments_links_trainr    s   ''JYYAJKAAB6	7KN YYAJKAAB6	7KN 99>EFgAB
3	4gFQPLACLKK%
 JJ"((BHH5	B7>H^
 NEE 	L 	L 	Gs   'E
&'E''Ec           	         U R                   S   n/ n/ n/ n/ n	[        U5       Hy  n
X
S S 2S S 24   nXS S 2S S 24   nX*S S 2S S 24   n[        XXU5      u  pnnUR                  U5        UR                  U5        UR                  U5        U	R                  U5        M{     [        R
                  " U5      n[        U5       H  n
X   U:X  a  M  UX   -
  [        S/-  /-  n[        R                  " Xj   [        R                  " U5      45      Xj'   [        R                  " Xz   [        R                  " UX   -
  S/-  5      45      Xz'   M     [        R                  " U[        R                  5      [        R                  " U[        R                  5      [        R                  " U[        R                  5      [        R                  " U	[        R                  5      4$ )Nr   r(   r   )r,   rw   decode_imagerx   r   rT   rv  rC  r   hstackr  r   r   )rz  r{  r|  ry  r}  rG  batch_segmentsbatch_group_indicesbatch_segments_countsbatch_group_indices_allrJ  image_node_scoresimage_link_scores	image_regimage_segmentsimage_group_indicesimage_segments_countsimage_group_indices_allrQ  batch_segments_pads                       r#   rw  rw    s   #JN *%%1n5%1n5aN+	^j)_[-BD[ 	n-""#67$$%:;&&'>? & ,-I*%$.);"+.C.M"M'1SE'9&:";')yy)2884F+GH(JN$,.II$."7"AAbTIKL-M) & ::nbjj12::
4::3 hh()+4K46HH*>> >r%   c                    / n/ nSnSn[        [        5       H  n	UR                  Xx/5        UR                  USSU	-   -  -  5        XuU	   S   XY   S   -  -  nU	S:X  a  XU	   S   XY   S   -  [        -  -  nMb  XU	   S   XY   S   -  [        [        -   -  -  nM     [        U U[        R                  [        R                  XV5      n
U
S-  n
U
[        R                  " U
S:  5      S      n[        U5      n[        R                  " U[        4[        R                  S9n[        [        R                  " U
S:  5      S   5       H  u  pX.S4   nX.S4   nX.S4   nX.S4   nX.S4   nX.S4   n[!        XU5      u  nnnUU   nSnUU-  SSU-   -  US	-   -  -   XS4'   UU-  SSU-   -  US	-   -  -   XS4'   [        R"                  " U5      U-  U-
  XS4'   [        R"                  " U5      U-  U-
  XS4'   UXS4'   UXS4'   M     XX4$ )
Nr   r   r   dtyper   r   r	   r   r   )rw   N_DET_LAYERSrx   ra  rb  decode_image_by_joinrQ   node_thresholdlink_thresholdr   rA  r/   r   rv  r   	enumerater^  exp)r  r  r  ry  r}  r[  r\  offsets_default_nodeoffsets_default_linkr~   r  r  r  r  r   
encoded_cx
encoded_cyencoded_widthencoded_heightencoded_theta_cosencoded_theta_sinr]  r[   rm   rsr   s                             r#   r  r  '  s   H< !5 LM
q1q5z23AQ ??6 QKNX[6 %"%# #  !QKNX[^$C-%/ /  ! 33D3D383G3G383G3G3;	O
 q 1"((1$3&&'3) * 34XX4jA$&JJ0N)@A)E Fq IJ
z*
z*
!1*-"A:.%qj1%qj13CDq!% )B!a%i.QW1MM!t)B!a%i.QW1MM!t!vvm4r9C?!t!vvn5:S@!t0!t0!t! K$ 0E^^r%   c                 0  ^^^^^^^ U S S 2[         4   U:  mUS S 2[         4   U:  n[        R                  " T[        R                  5      S-
  m[        R                  " TS:H  5      S   mU4S jmU4S jmU4S jmUUU4S jmUU4S jnUUU4S jnSn	[        T5       Hi  u  p[        XU5      u  pn[        XXU5      n[        U5       H9  u  nnUUS      nTUS      nU(       d  M  U(       d  M(  U	S-  n	U" UUS   5        M;     Mk     U" 5       nU$ )	Nr   r   c                    > TU    $ r   rZ  point
group_masks    r#   find_parent)decode_image_by_join.<locals>.find_parent`      %  r%   c                    > UTU '   g r   rZ  r  parentr  s     r#   
set_parent(decode_image_by_join.<locals>.set_parentc      "
5r%   c                    > T" U 5      S:H  $ Nr   rZ  r  r  s    r#   is_root%decode_image_by_join.<locals>.is_rootf      5!R''r%   c                 z   > U nSnT" U5      (       d  T" U5      nSnT" U5      (       d  M  U(       a  T" X5        U$ NFTrZ  r  rootupdate_parentr  r  r  s      r#   	find_root'decode_image_by_join.<locals>.find_rooti  B    $--t$D M $--
 u#r%   c                 B   > T" U 5      nT" U5      nX#:w  a	  T" X#5        g g r   rZ  )p1p2root1root2r  r  s       r#   r   "decode_image_by_join.<locals>.joinv  s'    "">u$ r%   c                     >^ 0 mU4S jn [         R                  " T[         R                  S9n[        T	5       H  u  p#T" U5      nU " U5      nXQU'   M     U$ )Nc                 <   > U T;  a  [        T5      S-   TU '   TU    $ Nr   r/   r  root_maps    r#   	get_index8decode_image_by_join.<locals>.get_all.<locals>.get_index  '    8#!$X!2D>!r%   r  r   
zeros_liker   r  )
r  maskr~   r  
point_rootbbox_idxr  r  	node_maskoffsets_poss
         @r#   get_all%decode_image_by_join.<locals>.get_all}  sV    	"
 }}Ybhh7!+.HA"5)J ,H"K / r%   )	POS_LABELr   r  r   rA  r  r^  rq  )node_scoreslink_scoresr  r  r[  r\  	link_maskr   r  pos_linkr~   r   r]  r[   rm   
neighboursn_idxnoffsets
link_valuenode_clsr  r  r  r  r  r  r  r  s                        @@@@@@@r#   r  r  Y  s   AyL)^;IAyL)^;Iy"((3a7J((9>*1-K!#(%  H,
3CD!#Ea;KL
(4OE8"8A;/J !-HzhhAWhqk*  5 - 9DKr%   c                    [         R                  " U5      n[         R                  " U SUS   S    [        S45      R	                  5       R                  US   S   5      USUS   S   & [         R                  " XS   S   US   S    [        [        -   S45      R	                  5       R                  US   S   US   S   -
  5      X1S   S   US   S   & [         R                  " XS   S   US   S    [        [        -   S45      R	                  5       R                  US   S   US   S   -
  5      X1S   S   US   S   & [         R                  " XS   S   US   S    [        [        -   S45      R	                  5       R                  US   S   US   S   -
  5      X1S   S   US   S   & [         R                  " XS   S   US   S    [        [        -   S45      R	                  5       R                  US   S   US   S   -
  5      X1S   S   US   S   & [         R                  " XS   S   S  [        [        -   S45      R	                  5       R                  [        U5      US   S   -
  5      X1S   S   S & U$ )Nr   r   r   r   r   r	   )r   r  tilera  	transposer   rb  r/   )r  r\  link_maxr  s       r#   get_link_maskr    s   h'I*,''!$Q'*+	+%IK0@0CA0F(G a #A&' @Bww1%a()9!)<Q)?@		&*@,,5IKa #&6q&9!&<<9? q!!$%5a%8%;< @Bww1%a()9!)<Q)?@		&*@,,5IKa #&6q&9!&<<9? q!!$%5a%8%;< @Bww1%a()9!)<Q)?@		&*@,,5IKa #&6q&9!&<<9? q!!$%5a%8%;< @Bww1%a()9!)<Q)?@		&*@,,5IKa #&6q&9!&<<9? q!!$%5a%8%;< *,1%a()*		&**,,5IK^.q1!4497 q!!$%&
 r%   c                 (   [         R                  " U R                  S   5      n[        [        5       H  nUS:X  aO  X   S   X   S   -  [
        -  nX   S   X   S   -  [
        S-   -  nX   S   X   S   -  [
        S-   -  nSUS U& MX  WX   S   X   S   -  [
        -  -   nXaU   S   X   S   -  [
        S-   -  -   nUnXaU   S   X   S   -  [
        S-   [        -   -  -  nSX'U& SX%U& M     U [         R                  " US:  5      S   S S 24   $ )Nr   r      )r   r   r,   rw   r  ra  rb  rA  )link_scores_rawr[  
link8_maskr~   offsets_startoffsets_endoffsets_linkoffsets_link_pres           r#   	get_link8r    s`   ?0035J< 6$KNX[^;mKM"+a.8;q>9"$K#;q>HKN:"$L)*J~&(8;q>HK= ,",# #M&!Q(+a.)H"*$ $K+QKNX[^;"]24 4L9:J634J<0# !$ 288JN3A69::r%   c                 $  ^^^ ^!^"^#^$^%^&^'^(^) U S S 2[         4   U:  m&US S 2[         4   nUS S 2[        4   n[        R                  " [        R                  " Xg45      SS9n[        R
                  " T&S:H  5      S   R                  5       m'X:  n	[        T&XX5      n
[        R                  " X-  U	-  * 5      nUS [        T'5      S-   n[        R                  " T&[        R                  S9S-
  m#[        T&5      / /-  m%U#4S jm!U#4S jm)U%4S jm(U"U$U%U(4S	 jm U U"U$U(4S
 jmU U(4S jmU!4S jm$U!U$U)4S jm"UU U"U)4S jnUU"4S jnU"U&U'4S jnSnSn[        U5       GH'  u  nn[        UUU5      u  nnnnUU   S   UU   S   U-  -   U-   nUT';   d  M8  [        UUUUU5      n[        [        R
                  " [        R                  " U5      S S 2S4   U:H  5      S   5      S:X  a  M  U[        R
                  " [        R                  " U5      S S 2S4   U:H  5      S   S      nUUS      nUUS      nT&US      nU(       a  UU:  a  US-  nU" UUS   5        GM  U(       d  GM  UU:  d  GM  US-  nU" UUS   5        GM*     U" 5       nU$ )Nr   rs  r   r
   r  c                    > TU    $ r   rZ  r  s    r#   r  *decode_image_by_mutex.<locals>.find_parent  r  r%   c                    > UTU '   g r   rZ  r  s     r#   r  )decode_image_by_mutex.<locals>.set_parent  r  r%   c                    > UTU '   g r   rZ  )r  mutex_point_list
mutex_masks     r#   set_mutex_constraint3decode_image_by_mutex.<locals>.set_mutex_constraint  s    ,
5r%   c                    > TU    n/ nU/ :X  d6  U H0  nT" U5      (       d  T" U5      nX2;  d  M  UR                  U5        M2     T" X5        U$ r   rx   )r  r  mutex_point_list_newmutex_pointr  r  r  r  s       r#   find_mutex_constraint4decode_image_by_mutex.<locals>.find_mutex_constraint  s_    %e,!2%/{++"+K"8K:(//<	  0
 	U9##r%   c                    > T" U 5      nT" U5      nU H0  nT" U5      (       d  T" U5      nXC;  d  M  UR                  U5        M2     T" X5        g r   r  )	r  r  r  mutex_parent_listr  r  r  r  r  s	        r#   combine_mutex_constraint7decode_image_by_mutex.<locals>.combine_mutex_constraint  sV    071&9+K;'''43!((5	 ,
 	V7r%   c                    > T" U 5      nT" U5      nX;  a  UR                  U 5        X;  a  UR                  U5        T" X5        T" X5        g r   r  )r  r  mutex_point_list1mutex_point_list2r  r  s       r#   add_mutex_constraint3decode_image_by_mutex.<locals>.add_mutex_constraint  sQ    1"51"5&$$R(&$$R(R3R3r%   c                    > T" U 5      S:H  $ r  rZ  r  s    r#   r  &decode_image_by_mutex.<locals>.is_root  r  r%   c                 z   > U nSnT" U5      (       d  T" U5      nSnT" U5      (       d  M  U(       a  T" X5        U$ r  rZ  r  s      r#   r  (decode_image_by_mutex.<locals>.find_root  r  r%   c                 l   > T" U 5      nT" U5      nX#:w  a  UT" U5      ;  a  T" X#5        T" X#5        g g g r   rZ  )r  r  r  r  r  r  r  r  s       r#   r   #decode_image_by_mutex.<locals>.join  s?    "">u,A%,HHu$$U2  I>r%   c                 B   > T" U 5      nT" U5      nX#:w  a	  T" X#5        g g r   rZ  )r  r  r  r  r  r  s       r#   disjoin&decode_image_by_mutex.<locals>.disjoin%  s'    ""> . r%   c                     >^ 0 mU4S jn [         R                  " T[         R                  S9n[        T	5       H  u  p#T" U5      nU " U5      nXQU'   M     U$ )Nc                 <   > U T;  a  [        T5      S-   TU '   TU    $ r  r  r  s    r#   r  9decode_image_by_mutex.<locals>.get_all.<locals>.get_index/  r  r%   r  r  )
r  r  _r  r  r  r  r  r  offsets_pos_lists
         @r#   r  &decode_image_by_mutex.<locals>.get_all,  sW    	"
 }}Ybhh7!"23HA"5)J ,H"K 4 r%   r   )r  	MUT_LABELr   rT   rC  rA  tolistr  argsortr/   r  r   r  re  rq  r   )*r  r  r  r  r[  r\  link_poslink_mutr  link_mask_thr  offsets_link_maxr   r  r  r  mut_linkr  r  r]  r[   rm   rd  r   r  r  link_pos_valuelink_mut_valuer  r  r  r  r  r  r  r  r  r  r  r  r  r  s*                                 @@@@@@@@@@@@r#   decode_image_by_mutexr&    s   AyL)^;I1i<(H1i<(Hvvbii 45A>Hxx	Q/299;-Li)9DIzzH$8<$G"HI'(B-=)>)BCy9A=JY2$&J!#-$ $8 8	4(3 3/  HH$%56< .|X/?!Aq!X"5)!,xq/AA/EEI&&'q!X(8:Jrxx 4Q5667 !8;C!D EEFH ILMN%bhhHHZ(A.(:'<<='??@'B C!)(1+!6!)(1+!6$Xa[1.!@MH(1+.X>N#BMHGXa[1' 7* 9DKr%   r   )r   rG   NTFN)r   r   rG   NTFgroup_conv2d)r   r   rG   NTFnext_conv2d)rG   NTFN)rG   N)Fr0   r   r   sysr   
absl.flagsflags
absl_flagsr   numpyr   
tensorflowr    r   __version__compatv1rQ   argvappDEFINE_stringrv  rB  ra  rb  rt  ru  MATCH_STATUS_POSMATCH_STATUS_NEGMATCH_STATUS_IGNOREr  r  	NEG_LABELr  r$   rD   rI   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r?  rS  rX  r^  re  rg  rq  r  r  rw  r  r  r  r  r&  rZ  r%   r#   <module>r:     s$    	  
   
   >>U	B   d +
   /9; 
   			"(^ 8~ $"& )L !" !'%)"#,"R  4v !#4v !H#	' !" F!3&-.B:3'lO@,:
!1BF(F( >F/_d@F:;0Cr%   