
    9is#                         S r SSKJr  SSKrSSKJr  SSK	r
SSKJrJr  SSKJrJr  SSKJr  / SQr " S S	5      rS
 rS r    SS jr    SS jrSS jrSS jrSS jrSS jrS r\S:X  a  gg)zv
CVPR 2020 submission, Paper ID 6791
Source code for 'Learning to Cartoonize Using White-Box Cartoon Representations'
    N)Paralleldelayed)colorsegmentation   )disc_sn)gjtY@g`"1]@gQ^@c                   L    \ rS rSrSS jrSS jrS rS rS rS r	S	 r
S
 rSrg)Vgg19   Nc                 l    [         R                  " USSS9R                  5       U l        [	        S5        g )Nlatin1T)encodingallow_picklezFinished loading vgg19.npy)nploaditem	data_dictprint)selfvgg19_npy_paths     a/var/www/html/land-doc-ocr/venv/lib/python3.13/site-packages/modelscope/models/cv/cartoon/loss.py__init__Vgg19.__init__   s/    XDBBF$& 	 	*+    c                 $	   US-   S-  n[         R                  " SSUS9u  pEn[         R                  " SU[        S   -
  U[        S   -
  U[        S   -
  /S9nU R	                  US5      U l        [         R                  R                  U R
                  5      U l        U R	                  U R                  S	5      U l	        [         R                  R                  U R                  5      U l
        U R                  U R                  S
5      U l        U R	                  U R                  S5      U l        [         R                  R                  U R                  5      U l        U R	                  U R                  S5      U l        [         R                  R                  U R                  5      U l        U R                  U R                   S5      U l        U R	                  U R"                  S5      U l        [         R                  R                  U R$                  5      U l        U R	                  U R&                  S5      U l        [         R                  R                  U R(                  5      U l        U R	                  U R*                  S5      U l        [         R                  R                  U R,                  5      U l        U R	                  U R.                  S5      U l        [         R                  R                  U R0                  5      U l        U R                  U R2                  S5      U l        U R	                  U R4                  S5      U l        [         R                  R                  U R6                  5      U l        U R	                  U R8                  S5      U l        [         R                  R                  U R:                  5      U l        U R	                  U R<                  S5      U l        [         R                  R                  U R>                  5      U l         U R	                  U R@                  S5      U l!        [         R                  R                  U RB                  5      U l"        U R                  U RD                  S5      U l#        U RB                  $ )Nr   g     _@   )axisnum_or_size_splitsvaluer      )r   valuesconv1_1conv1_2pool1conv2_1conv2_2pool2conv3_1conv3_2conv3_3conv3_4pool3conv4_1conv4_2conv4_3conv4_4pool4)$tfsplitconcatVGG_MEAN
conv_layerr"   nnrelurelu1_1r#   relu1_2max_poolr$   r%   relu2_1r&   relu2_2r'   r(   relu3_1r)   relu3_2r*   relu3_3r+   relu3_4r,   r-   relu4_1r.   relu4_2r/   relu4_3r0   relu4_4r1   )r   rgb
include_fc
rgb_scaledbluegreenredbgrs           r   build_conv4_4Vgg19.build_conv4_4   s   Ag&
88q
<Siix{"EHQK$7x{9J sI6uuzz$,,/t||Y?uuzz$,,/]]4<<9
tzz9=uuzz$,,/t||Y?uuzz$,,/]]4<<9
tzz9=uuzz$,,/t||Y?uuzz$,,/t||Y?uuzz$,,/t||Y?uuzz$,,/]]4<<9
tzz9=uuzz$,,/t||Y?uuzz$,,/t||Y?uuzz$,,/t||Y?uuzz$,,/]]4<<9
||r   c                 L    [         R                  R                  U/ SQ/ SQSUS9$ )N)r   r    r    r   SAME)ksizestridespaddingname)r2   r7   r;   )r   bottomrT   s      r   r;   Vgg19.max_poolJ   s+    uu~~    	r   c                 ,   [         R                  " U5         U R                  U5      n[         R                  R	                  X/ SQSS9nU R                  U5      n[         R                  R                  XE5      nUsS S S 5        $ ! , (       d  f       g = f)Nr   r   r   r   rP   )rS   )r2   variable_scopeget_conv_filterr7   conv2dget_biasbias_add)r   rU   rT   filtconvconv_biasesbiass          r   r6   Vgg19.conv_layerR   sg    t$''-D55<<lF<KD---K55>>$4D %$$s   A$B
Bc                    [         R                  " U5         UR                  5       R                  5       nSnUSS   H  nXE-  nM	     [         R                  " USU/5      nU R                  U5      nU R                  U5      n[         R                  R                  [         R                  " Xg5      U5      n	U	sS S S 5        $ ! , (       d  f       g = f)Nr   )
r2   rY   	get_shapeas_listreshapeget_fc_weightr\   r7   r]   matmul)
r   rU   rT   shapedimdxweightsbiasesfcs
             r   fc_layerVgg19.fc_layerZ   s    t$$$&..0EC12Y 

6B9-A((.G]]4(F		! 5v>B %$$s   B!C
Cc                 L    [         R                  " U R                  U   S   SS9$ )Nr   filterrT   r2   constantr   r   rT   s     r   rZ   Vgg19.get_conv_filterg   !    {{4>>$/2BBr   c                 L    [         R                  " U R                  U   S   SS9$ )Nr   ro   ru   rv   rx   s     r   r\   Vgg19.get_biasj   rz   r   c                 L    [         R                  " U R                  U   S   SS9$ )Nr   rn   ru   rv   rx   s     r   rh   Vgg19.get_fc_weightm   s!    {{4>>$/2CCr   )r"   r#   r%   r&   r(   r)   r*   r+   r-   r.   r/   r0   r   r$   r'   r,   r1   r9   r:   r<   r=   r>   r?   r@   rA   rB   rC   rD   rE   N)F)__name__
__module____qualname____firstlineno__r   rM   r;   r6   rq   rZ   r\   rh   __static_attributes__ r   r   r
   r
      s.    ,,\CCDr   r
   c                    [        [        R                  " U S5      5      nUR                  U5      nUR                  U5      nUR                  U5      nUR	                  5       R                  5       SS  u  pn
[        R                  R                  XV5      n[        R                  " U5      X-  U
-  -  n[        R                  R                  Xv5      n[        R                  " U5      X-  U
-  -  nX-   nU$ )Nz	vgg19.npyr   )
r
   ospjoinrM   re   rf   r2   lossesabsolute_differencereduce_mean)	model_dirinput_phototransfer_resinput_superpixel	vgg_model	vgg_photo
vgg_outputvgg_superpixelhwc	abs_photo
photo_lossabs_superpixelsuperpixel_losslosss                   r   content_lossr   q   s    chhy+67I''4I((6J,,-=>N!!#++-ab1GA!		--iDI	*aeai8JYY22>NNnn^4	BO'DKr   c           	          [        XSSS9n[        X SSS9n[        X5      u  pE[        [        UUSSSS9u  pg[        [        UUSSSS9u  pX-   n
X-   nX4$ )	N   g?)repsr   T	disc_gray)scalepatchrT   	disc_blur)guided_filtercolor_shift
lsgan_lossr   )input_cartoonoutput_cartoon	blur_fakeblur_cartoon	gray_fakegray_cartoond_loss_grayg_loss_grayd_loss_blurg_loss_blur
sty_g_loss
sty_d_losss               r   
style_lossr      s    ntLI ML).HI) K  * K ,J*J!!r   c           	         U " XXFUSS9nU " X#XFUSS9n[         R                  R                  U5      n[         R                  R                  U5      n[         R                  " [         R                  " U5      5      * n	[         R                  " [         R                  " U5      [         R                  " SU-
  5      -   5      * n
X4$ )NFrT   r   reuseTg      ?)r2   r7   sigmoidr   log)discriminatorrealfaker   channelr   rT   
real_logit
fake_logitr   r   s              r   gan_lossr      s     WuECJWuDBJ z*Jz*J>>"&&"455K>>"&&"4rvvb:o7N"NOOK##r   c           	          U " XXFUSS9nU " X#XFUSS9n[         R                  " US-
  S-  5      n	S[         R                  " US-
  S-  5      [         R                  " US-  5      -   -  n
X4$ )NFr   Tr   r    g      ?)r2   r   )r   r   r   r   r   r   rT   r   r   g_lossd_losss              r   r   r      s     WuECJWuDBJ ^^Z!^a/0F

Q*+bnnZ].KKMF >r   c           	      V   U R                  5       R                  5       SS u  p#[        R                  " U S S 2US 2S S 2S S 24   U S S 2S X!-
  2S S 2S S 24   -
  S-  5      n[        R                  " U S S 2S S 2US 2S S 24   U S S 2S S 2S X1-
  2S S 24   -
  S-  5      nXE-   SU-  U-  -  nU$ )Nr   r   r    )re   rf   r2   r   )imagek_sizer   r   tv_htv_wtv_losss          r   total_variation_lossr      s    ??$$&q+DA>>	q&'1a	 5KQZKA)=#>	>BDD>>	q!VWa	 5A{
{A)=#>	>BDD{q1uqy)GNr   c                    [         R                  " U 5      n[        [         R                  " SUS   US   S4U R                  S9U5      n[        X5      U-  n[        X5      U-  n[        X-  U5      U-  Xg-  -
  n[        X -  U5      U-  Xf-  -
  n	XU-   -  n
XzU-  -
  n[        X5      U-  n[        X5      U-  nX-  U-   nU$ )Nr   r    )dtype)r2   rj   tf_box_filteronesr   )rm   yr   r   x_shapeNmean_xmean_ycov_xyvar_xAbmean_Amean_boutputs                  r   r   r      s    hhqkG
GAJ
A.agg>	CA 1 1$F1 1$F15!$q(6?:F!%#a'&/9E#+AVA1 1$F1 1$FZ& FMr   c                 d   [         R                  " U SSS9u  p4n[         R                  " USSS9u  pgnUS:X  aa  [         R                  R                  S/SSS9n	[        R                  R                  S/SSS9n
[        R                  R                  S/S	SS9nOfUS
:X  a`  [         R                  R                  S/SSS9n	[         R                  R                  S/SSS9n
[         R                  R                  S/SSS9nW	U-  W
U-  -   WU-  -   X-   U-   -  nX-  X-  -   X-  -   X-   U-   -  nX4$ )Nr   )r   r   normalr   gv/?g?)rj   meanstddevgbX9?gA`"?uniformgy&1?g1Zd?)rj   minvalmaxvalg^I+?gCl?gFx?gK7?)r2   r3   randomr   r   r   )image1image2modeb1g1r1b2g2r2b_weightg_weightr_weightoutput1output2s                 r   r   r      sE   &QQ?JBB&QQ?JBBx99##1#E##F99##1#E##F99##1#E##F		99$$A3uU$K99$$A3uU$K99$$A3uU$K"}x"},x"}<h&(G}x},x}<h&(Gr   c                    ^^ U4S jm[         R                  " U 5      S   n[        US9" U4S jU  5       5      n[         R                  " U5      $ )Nc           	      f   > [         R                  " U TSSSSS9n[        R                  " XSSS9n U $ )Nr   
   T)
n_segmentssigmacompactnessconvert2labstart_labelavgr   )kindbg_label)r   slicr   	label2rgb)r   	seg_labelseg_nums     r   process_slic'simple_superpixel.<locals>.process_slic   s>     %%	 	uqIr   r   )n_jobsc              3   F   >#    U  H  n[        T5      " U5      v   M     g 7fr   )r   ).0r   r   s     r   	<genexpr>$simple_superpixel.<locals>.<genexpr>  s!      )?2=e$$+s   !)r   rj   r   array)batch_imager   num_job	batch_outr   s    `  @r   simple_superpixelr     sH    	 hh{#A&G( )?2=)? ?I88Ir   c                 b   U R                  5       R                  5       S   nSSU-  S-   S-  -  nU[        R                  " SU-  S-   SU-  S-   US45      -  n[        R                  " U5      R                  [        R                  5      n[        R                  R                  X/ SQS5      nU$ )Nrd   r   r    rX   rP   )
re   rf   r   r   r  astypefloat32r2   r7   depthwise_conv2d)rm   r   chweight
box_kernelr   s         r   r   r     s    	
			 	$B1q519q.!F"''1q519a!eaiQ"?@@J*%,,RZZ8JUU##A<HFMr   __main__)r       Fr   )r   )g{Gz?)r   )   )__doc__os.pathpathr   numpyr   scipy.statsstatsst
tensorflowr2   joblibr   r   skimager   r   networkr   r5   r
   r   r   r   r   r   r   r   r  r   r   r   r   r   <module>r!     s   
     $ ' %[D [D|": !$2 #(*$& z r   