
    9iQE                     F   S 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
Jr  SSKJs  Jr   " S S\R                  5      r " S S\R                  5      r " S S\R                  5      r " S	 S
\R                  5      r " S S\R                  5      r " S S\R                  5      r " S S\R                  5      r " S S\R                  5      r " S S\R                  5      r " S S\R                  5      r " S S\R                  5      r " S S\	R                  R                  5      r " S S\R                  5      rS rS r\S:X  aO  \" S S S!S"SS#9r \	RB                  " / S$Q5      r"\	RF                  " SS%S"/5      r$\ " \"\$5      r%\&" \%RN                  5        gg)&a?  
StarGAN v2
Copyright (c) 2020-present NAVER Corp.
This work is licensed under the Creative Commons Attribution-NonCommercial
4.0 International License. To view a copy of this license, visit
http://creativecommons.org/licenses/by-nc/4.0/ or send a letter to
Creative Commons, PO Box 1866, Mountain View, CA 94042, USA.
    Nc                   .   ^  \ rS rSrU 4S jrS rSrU =r$ )
DownSample   c                 .   > [         TU ]  5         Xl        g Nsuper__init__
layer_typeselfr   	__class__s     h/var/www/html/land-doc-ocr/venv/lib/python3.13/site-packages/modelscope/models/audio/vc/src/Starganv3.pyr
   DownSample.__init__       $    c                     U R                   S:X  a  U$ U R                   S:X  a  [        R                  " US5      $ U R                   S:X  a  [        R                  " US5      $ [        SU R                   -  5      e)Nnonetimepreserve      halfr   zHGot unexpected donwsampletype %s, expected is [none, timepreserve, half])r   F
avg_pool2dRuntimeErrorr   xs     r   forwardDownSample.forward   si    ??f$H__.<<6**__&<<1%%Z//"# #r   r   __name__
__module____qualname____firstlineno__r
   r   __static_attributes____classcell__r   s   @r   r   r          %
# 
#r   r   c                   .   ^  \ rS rSrU 4S jrS rSrU =r$ )UpSample(   c                 .   > [         TU ]  5         Xl        g r   r   r   s     r   r
   UpSample.__init__*   r   r   c                     U R                   S:X  a  U$ U R                   S:X  a  [        R                  " USSS9$ U R                   S:X  a  [        R                  " USSS9$ [        SU R                   -  5      e)	Nr   r   r   nearest)scale_factormoder   r   zFGot unexpected upsampletype %s, expected is [none, timepreserve, half])r   r   interpolater   r   s     r   r   UpSample.forward.   sm    ??f$H__.==iHH__&==CCX//"# #r   r!   r"   r)   s   @r   r,   r,   (   r*   r   r,   c                   f   ^  \ rS rSr\R
                  " S5      SSS4U 4S jjrS rS rS r	S	r
U =r$ )
ResBlk;   皙?Fr   c           	      "  > [         TU ]  5         X0l        X@l        [	        U5      U l        X:g  U l        [        R                  " XSSS5      U l	        [        R                  " XSSS5      U l
        U R                  (       a_  [        R                  " U5      U l        [        R                  " U5      U l        U(       a"  SU R                  l        SU R                  l        U R                  (       a  [        R                  " XSSSSS9U l        g g )N   r   Fr   bias)r	   r
   actv	normalizer   
downsample
learned_scnnConv2dconv1conv2InstanceNorm2dnorm1norm2trainingconv1x1)r   dim_indim_outr>   r?   out_for_onnxr@   r   s          r   r
   ResBlk.__init__=   s     		"$Z0 +YYvq!Q7
YYv1a8
>>**62DJ**62DJ&+

#&+

# ??99VaAEJDL r   c                     U R                   (       a  U R                  U5      nU R                  (       a  U R                  U5      nU$ r   )rA   rJ   r@   r   s     r   	_shortcutResBlk._shortcutV   s0    ??QA??"Ar   c                 8   U R                   (       a  U R                  U5      nU R                  U5      nU R                  U5      nU R	                  U5      nU R                   (       a  U R                  U5      nU R                  U5      nU R                  U5      nU$ r   )r?   rG   r>   rD   r@   rH   rE   r   s     r   	_residualResBlk._residual]   sq    >>

1AIIaLJJqMOOA>>

1AIIaLJJqMr   c                 z    U R                  U5      U R                  U5      -   nU[        R                  " S5      -  $ )Nr   )rP   rS   mathsqrtr   s     r   r   ResBlk.forwardi   s1    NN1q 11499Q<r   )	r>   rD   rJ   rE   r@   rA   rG   rH   r?   r#   r$   r%   r&   rB   	LeakyReLUr
   rP   rS   r   r'   r(   r)   s   @r   r7   r7   ;   s4    
 ll3' #"K2
   r   r7   c                   R   ^  \ rS rSr  SU 4S jjrS\R                  4S jrSrU =r	$ )AdaINn   c                   > [         TU ]  5         [        R                  " U5      U l        U(       a  SU R                  l        [        R                  " XS-  5      U l        [        R                  R                  SU5      U l	        [        R                  R                  [        R                  " SSU/5      5      U l        g )NFr      r   i  )r	   r
   rB   rF   normrI   Linearfctorchemb	Parameterrandnspk_emb)r   	style_dimnum_featuresrM   devicer   s        r   r
   AdaIN.__init__p   s    
 	%%l3	!&DII))Ia'7888??3	2xx))%++q$	6J*KLr   sc                    U R                  U5      nUR                  S5      n[        R                  " X R                  -  SS9n[        R
                  " USS9R                  S5      n[        R                  " U R                  U-  SS9nU R                  U5      nUR                  UR                  S5      UR                  S5      SS5      n[        R                  " USSS9u  pgSU-   U R                  U5      -  U-   $ )Nr   dimr   r   )chunksrp   )rd   	unsqueezerc   sumrg   softmaxrb   viewsizechunkr`   )r   r   rl   scorevaluehgammabetas           r   r   AdaIN.forward~   s    HHQKKKN		!ll*3e,66r:		$,,.A6GGENFF166!9affQiA.kk!A15E	TYYq\)D00r   )rd   rb   r`   rg   )FN
r#   r$   r%   r&   r
   rc   Tensorr   r'   r(   r)   s   @r   r\   r\   n   s&    
 $	M1ELL 1 1r   r\   c                   h   ^  \ rS rSrSS\R
                  " S5      SS4U 4S jjrS rS	 rS
 r	Sr
U =r$ )AdainResBlk   @   r   r9   r   Fc           	        > [         TU ]  5         X@l        XPl        [	        U5      U l        X:g  U l        [        R                  " XSSS5      U l	        [        R                  " X"SSS5      U l
        [        X1U5      U l        [        X2U5      U l        U R                  (       a  [        R                  " XSSSSS9U l        g g )Nr;   r   r   Fr<   )r	   r
   w_hpfr>   r,   upsamplerA   rB   rC   rD   rE   r\   rG   rH   rJ   )	r   rK   rL   rh   r   r>   r   rM   r   s	           r   r
   AdainResBlk.__init__   s     	
	 * +YYv1a8
YYwAq9
9l;
9|<
??99VaAEJDL r   c                 l    U R                  U5      nU R                  (       a  U R                  U5      nU$ r   )r   rA   rJ   r   s     r   rP   AdainResBlk._shortcut   s)    MM!??QAr   c                     U R                  X5      nU R                  U5      nU R                  U5      nU R                  U5      nU R	                  X5      nU R                  U5      nU R                  U5      nU$ r   )rG   r>   r   rD   rH   rE   )r   r   rl   s      r   rS   AdainResBlk._residual   se    JJqIIaLMM!JJqMJJqIIaLJJqMr   c                     U R                  X5      nU R                  S:X  a*  X0R                  U5      -   [        R                  " S5      -  nU$ )Nr   r   )rS   r   rP   rV   rW   )r   r   rl   outs       r   r   AdainResBlk.forward   s>    nnQ"::?**diil:C
r   )	r>   rD   rJ   rE   rA   rG   rH   r   r   rY   r)   s   @r   r   r      s7    
 ll3' #K* r   r   c                   .   ^  \ rS rSrU 4S jrS rSrU =r$ )HighPass   c                 x   > [         [        U ]  5         [        R                  " / SQ/ SQ/ SQ/5      U-  U l        g )N)rn   rn   rn   )rn   g       @rn   )r	   r   r
   rc   tensorfilter)r   r   r   s     r   r
   HighPass.__init__   s3    h&(llL- $& ')./r   c                     U R                   R                  S5      R                  S5      R                  UR                  S5      SSS5      n[        R
                  " XSUR                  S5      S9$ )Nr   r   )paddinggroups)r   rr   repeatrv   r   conv2d)r   r   r   s      r   r   HighPass.forward   sX    &&q)33A6==FF1Iq!Q xx1QVVAY??r   )r   r"   r)   s   @r   r   r      s    /
@ @r   r   c                   V   ^  \ rS rSr    SU 4S jjrS\R                  4S jrSrU =r	$ )	Generator   c                 .  > [         TU ]  5         X@l        [        R                  " SUSSS5      U l        [        R                  " 5       U l        [        R                  " 5       U l        [        R                  " [        R                  " USS9[        R                  " S5      [        R                  " USSSS5      5      U l        U(       a\  U R                  R                  5        H>  n[        U[        R                  R                  5      (       d  M.  UR!                  5         M@     Sn[#        U5       Hm  nUS;   a  S	nOS
n[%        US-  U5      n	U R                  R'                  [)        UU	SUUS95        U R                  R+                  S[-        U	UUSUUS95        U	nMo     [#        S5       H(  n
U R                  R'                  [)        W	U	SUS95        M*     [#        S5       H*  n
U R                  R+                  S[-        W	U	USUS95        M,     g )Nr   r;   Taffiner9   r      r   r;   r   r   r   )r?   r@   rM   )r   r   rM   )r?   rM   )r   rM   )r	   r
   rM   rB   rC   stem
ModuleListencodedecode
SequentialrF   rZ   to_outmodules
isinstancerc   evalrangeminappendr7   insertr   )r   rK   rh   max_conv_dimrM   m
repeat_numlid	_downtyperL   _r   s              r   r
   Generator.__init__   s   
 	(IIaAq1	mmommommfT2BLL4EIIfaAq)+ [[((*a!8!899FFH + 
$Cf}*	"	&1*l3GKK"(!-/0 KKq*#*#)#,)*,50< >? F- %2 qAKK"!-	/0  qAKK!-/0 r   r   c                     U R                  U5      nU R                   H  nU" U5      nM     U R                   H  nU" X5      nM     U R                  U5      nU$ r   )r   r   r   r   )r   r   cblockr   s        r   r   Generator.forward  sS    IIaL[[EaA ! [[EaA ! kk!n
r   )r   r   rM   r   r   )0   r     Fr~   r)   s   @r   r   r      s-     $#	A0F  r   r   c                   @   ^  \ rS rSr       SU 4S jjrS rSrU =r$ )
Generator2i  c                   > [         TU ]  5         Xpl        [        R                  " SUSSS5      U l        [        R                  " 5       U l        [        R                  " 5       U l        [        R                  " [        R                  " USS9[        R                  " S5      [        R                  " USSSS5      5      U l        X`l        [        R                  R                  XB5      U l        SnUS:  a  US-  n[#        U5       Hk  n	U	S;   a  S	n
OS
n
[%        US-  U5      nU R                  R'                  [)        XSU
S95        U R                  R+                  S[-        UUUUU
SS95        UnMm     [#        S5       H'  nU R                  R'                  [)        WUSS95        M)     [#        S5       HH  nU R                  R+                  S[-        W[/        US-  5      -   U[/        US-  5      -   UUSS95        MJ     [        R0                  " [        R2                  R5                  5       (       a  SOS5      n[7        X]5      U l        g )Nr   r;   Tr   r9   r   r   r   r   r   r   F)r?   r@   )r   r   r`   )r?   )r   r`   cudacpu)r	   r
   rM   rB   rC   r   r   r   r   r   rF   rZ   r   
F0_channelrc   	Embeddingspk_embeddingr   r   r   r7   r   r   intrj   r   is_availabler   hpf)r   rK   rh   r   num_spkr   r   rM   r   r   r   rL   r   rj   r   s                 r   r
   Generator2.__init__  s    	(IIaAq1	mmommommfT2BLL4EIIfaAq)+ %"XX//C
19!OJ$Cf}*	"	&1*l3GKKv%INPKKq*#*#)#,).,5(- /0 F# %( qAKKvgw$GH  qAKKc*q.11c*q.11 !  

(?(?(A(AfuME*r   c                 b   U R                   (       a  UR                  SSSS5      nU R                  U5      nU R                   H  nU" U5      nM     U R	                  U5      nU R
                   H  nU" X5      nM     U R                  U5      nU R                   (       a  UR                  SS9nU$ )Nr   r;   r   r   ro   )rM   permuter   r   r   r   r   squeeze)r   r   r   r   rl   r   s         r   r   Generator2.forward\  s    		!Q1%AIIaL[[EaA !q![[EaA ! kk!n++!+$C
r   )r   r   r   r   rM   r   r   r   )r   r   r   [  r   r   Fr"   r)   s   @r   r   r     s*     $#<+| r   r   c                   :   ^  \ rS rSr    SU 4S jjrS rSrU =r$ )MappingNetworkin  c                   > [         TU ]  5         / nU[        R                  " X5      /-  nU[        R                  " 5       /-  n[        S5       H6  nU[        R                  " XD5      /-  nU[        R                  " 5       /-  nM8     [        R                  " U6 U l        [        R                  " 5       U l	        [        U5       H  nU =R                  [        R                  " [        R                  " XD5      [        R                  " 5       [        R                  " XD5      [        R                  " 5       [        R                  " XD5      [        R                  " 5       [        R                  " XB5      5      /-  sl	        M     g )Nr;   )
r	   r
   rB   ra   ReLUr   r   sharedr   unshared)r   
latent_dimrh   num_domains
hidden_dimlayersr   r   s          r   r
   MappingNetwork.__init__p  s   
 	299Z4552779+qAryy899Frwwyk!F  mmV,{#AMMIIj5GGIIIj5GGIIIj5GGIIIj4
 
M $r   c                 ,   U R                  U5      n/ nU R                   H  nXE" U5      /-  nM     [        R                  " USS9n[        R                  " [        UR                  S5      5      5      R                  UR                  5      nXFU4   nU$ )Nr   ro   r   )	r   r   rc   stack
LongTensorr   rv   torj   )r   zyrz   r   layeridxrl   s           r   r   MappingNetwork.forward  s~    KKN]]EE!H:C #kk#1%uQVVAY/033AHH=QKr   r   r   )   r   r   r   r"   r)   s   @r   r   r   n  s      	8 r   r   c                   :   ^  \ rS rSr    SU 4S jjrS rSrU =r$ )StyleEncoderi  c                 |  > [         T	U ]  5         / nU[        R                  " SUSSS5      /-  nSn[	        U5       H"  n[        US-  U5      nU[        XSS9/-  nUnM$     U[        R                  " S5      /-  nU[        R                  " WUSSS	5      /-  nU[        R                  " S5      /-  nU[        R                  " S5      /-  n[        R                  " U6 U l
        [        R                  " 5       U l        [	        U5       H-  nU =R                  [        R                  " X5      /-  sl        M/     g )
Nr   r;   r   r   r   r@   r9      r   )r	   r
   rB   rC   r   r   r7   rZ   AdaptiveAvgPool2dr   r   r   r   ra   )
r   rK   rh   r   r   blocksr   r   rL   r   s
            r   r
   StyleEncoder.__init__  s   
 	299Q1a011
z"A&1*l3Gvf&ABBFF #
 	2<<$%%299Wgq!Q7882''*++2<<$%%mmV,{#AMMbii;<<M $r   c                 n   U R                  U5      nUR                  UR                  S5      S5      n/ nU R                   H  nXE" U5      /-  nM     [        R
                  " USS9n[        R                  " [        UR                  S5      5      5      R                  UR                  5      nXFU4   nU$ )Nr   rn   r   ro   )
r   ru   rv   r   rc   r   r   r   r   rj   )r   r   r   rz   r   r   r   rl   s           r   r   StyleEncoder.forward  s    KKNFF166!9b!]]EE!H:C # kk#1%uQVVAY/033AHH=QKr   r   )r   r   r   r   r"   r)   s   @r   r   r     s      !	=2 r   r   c                   @   ^  \ rS rSr    SU 4S jjrS rS rSrU =r$ )Discriminatori  c                 r   > [         TU ]  5         [        UUUUS9U l        [        UUUUS9U l        X l        g )N)rK   r   r   r   )r	   r
   Discriminator2ddisclsr   )r   rK   r   r   r   r   s        r   r
   Discriminator.__init__  sL    
 	 ##%!	# ##%!	#
 'r   c                 $    U R                  X5      $ r   )r   )r   r   r   s      r   r   Discriminator.forward  s    xx~r   c                 8    U R                   R                  U5      $ r   )r   get_featurer   s     r   
classifierDiscriminator.classifier  s    xx##A&&r   )r   r   r   r   r   r   r   )	r#   r$   r%   r&   r
   r   r   r'   r(   r)   s   @r   r   r     s%     !	'*' 'r   r   c                   2   ^  \ rS rSrSU 4S jjrS rSrU =r$ )
LinearNormi  c                 6  > [         [        U ]  5         [        R                  R                  XUS9U l        [        R                  R                  R                  U R                  R                  [        R                  R                  R                  U5      S9  g )Nr<   )gain)r	   r   r
   rc   rB   ra   linear_layerinitxavier_uniform_weightcalculate_gain)r   in_dimout_dimr=   w_init_gainr   s        r   r
   LinearNorm.__init__  si    j$(*!HHOOF$OG%%$$--k: 	& 	<r   c                 $    U R                  U5      $ r   r  r   s     r   r   LinearNorm.forward  s      ##r   r  )Tlinearr"   r)   s   @r   r   r     s    <$ $r   r   c                   @   ^  \ rS rSr    SU 4S jjrS rS rSrU =r$ )r   i  c                   > [         TU ]  5         / nU[        R                  " SUSSS5      /-  n[	        U5       H"  n[        US-  U5      nU[        XSS9/-  nUnM$     U[        R                  " S5      /-  nU[        R                  " WUSSS5      /-  nU[        R                  " S5      /-  nU[        R                  " S5      /-  nU[        R                  " XrSSS5      /-  n[        R                  " U6 U l
        g )	Nr   r;   r   r   r   r9   r   r   )r	   r
   rB   rC   r   r   r7   rZ   r   r   main)	r   rK   r   r   r   r   r   rL   r   s	           r   r
   Discriminator2d.__init__  s    
 	299Q1a011$C&1*l3Gvf&ABBFF %
 	2<<$%%299Wgq!Q7882<<$%%2''*++299W1a;<<MM6*	r   c                 j    U R                  U5      nUR                  UR                  S5      S5      nU$ )Nr   rn   )r  ru   rv   )r   r   r   s      r   r   Discriminator2d.get_feature  s,    iilhhsxx{B'
r   c                     U R                  U5      n[        R                  " [        UR	                  S5      5      5      R                  UR                  5      nX4U4   nU$ )Nr   )r   rc   r   r   rv   r   rj   )r   r   r   r   r   s        r   r   Discriminator2d.forward	  sN    q!uQVVAY/033AHH=q&k
r   )r  r   )	r#   r$   r%   r&   r
   r   r   r'   r(   r)   s   @r   r   r     s%     !	+*
 r   r   c                     SnU R                  5        H  nX#R                  5       -  nM     [        U 5        [        U5        [        SR                  U5      5        g)z"Print out the network information.r   zThe number of parameters: {}N)
parametersnumelprintformat)modelname
num_paramsps       r   print_networkr     sJ    Jggi
  	%L	$K	
(
/
/

;<r   c           	         [        U R                  U R                  U R                  U R                  U R
                  S9n[        U R                  U R                  U R                  U R                  S9n[        U R                  U R                  U R                  U R                  5      n[        U R                  U R                  U R                  U R                  5      n[        R                  " U5      n[        R                  " U5      n[        R                  " U5      n	[        US5        [        US5        [        US5        [        UUUUUUS9n
[        UUU	S9nX4$ )Nr   r   )r   	generatormapping_networkstyle_encoder)r#  r$  r%  discriminatorf0_model	asr_model)r#  r$  r%  )r   rK   rh   r   r   r   r   r   r   r   r   n_repeatcopydeepcopyr  Munch)argsF0_model	ASR_modelr#  r$  r%  r&  generator_emamapping_network_emastyle_encoder_emanetsnets_emas               r   build_modelr5    s4   jj??$I %$$	&O
 !dnnd>N>N!%!2!24M!$++t/?/?"&"3"3T]]DMMM),M--8m4	)[!	/,-	-)'##D +')H
 >r   __main__r      r   r"  )r   r   i   P   r   )(__doc__r*  rV   osos.pathpathospnumpynprc   torch.nnrB   torch.nn.functional
functionalr   Moduler   r,   r7   r\   r   r   r   r   r   r   r   r   r   r   r5  r#   r#  rf   arandintr   br  shape r   r   <module>rI     sm     	      # #&#ryy #&0 RYY 0 f1BII 1<+")) +\
@ryy 
@R		 RjO Od&RYY &R'299 'T'BII '<$ $ bii  F=#L z"b#Q1=I()Aas#A!QA	!''N r   