o
    )ÎjQE  ã                   @   s¦  d Z ddlZddlZddlZddlmZ ddlZddl	Z	ddl
mZ ddlm  mZ G dd„ dejƒZG dd„ dejƒZG dd„ dejƒZG d	d
„ d
ejƒZG dd„ dejƒZG dd„ dejƒZG dd„ dejƒZG dd„ dejƒZG dd„ dejƒZG dd„ dejƒZG dd„ dejƒZG dd„ de	jjƒZG dd„ dejƒZdd„ Zdd „ Zed!krÑed"d"d#d$dd%Z e	 !g d&¢¡Z"e	 #dd'd$g¡Z$e e"e$ƒZ%e&e%j'ƒ dS dS )(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                       ó$   e Zd Z‡ fdd„Zdd„ Z‡  ZS )Ú
DownSamplec                    ó   t ƒ  ¡  || _d S ©N©ÚsuperÚ__init__Ú
layer_type©Úselfr	   ©Ú	__class__© úi/var/www/html/Deteccion_Ine/venv/lib/python3.10/site-packages/modelscope/models/audio/vc/src/Starganv3.pyr      ó   

zDownSample.__init__c                 C   sH   | j dkr|S | j dkrt |d¡S | j dkrt |d¡S td| j  ƒ‚)NÚnoneÚtimepreserve©é   é   Úhalfr   zHGot unexpected donwsampletype %s, expected is [none, timepreserve, half])r	   ÚFZ
avg_pool2dÚRuntimeError©r   Úxr   r   r   Úforward   s   


ÿÿzDownSample.forward©Ú__name__Ú
__module__Ú__qualname__r   r   Ú__classcell__r   r   r   r   r      ó    r   c                       r   )ÚUpSamplec                    r   r   r   r
   r   r   r   r   *   r   zUpSample.__init__c                 C   sP   | j dkr|S | j dkrtj|dddS | j dkr!tj|dddS td| j  ƒ‚)	Nr   r   r   Únearest)Zscale_factorÚmoder   r   zFGot unexpected upsampletype %s, expected is [none, timepreserve, half])r	   r   Zinterpolater   r   r   r   r   r   .   s   


ÿÿzUpSample.forwardr   r   r   r   r   r"   (   r!   r"   c                       sD   e Zd Ze d¡dddf‡ fdd„	Zdd„ Zdd	„ Zd
d„ Z‡  Z	S )ÚResBlkçš™™™™™É?Fr   c                    sª   t ƒ  ¡  || _|| _t|ƒ| _||k| _t ||ddd¡| _	t ||ddd¡| _
| jrBt |¡| _t |¡| _|rBd| j_d| j_| jrStj||ddddd| _d S d S )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   r   r   r   =   s    


ÿzResBlk.__init__c                 C   s$   | j r|  |¡}| jr|  |¡}|S r   )r-   r6   r,   r   r   r   r   Ú	_shortcutV   s
   

zResBlk._shortcutc                 C   sV   | j r|  |¡}|  |¡}|  |¡}|  |¡}| j r|  |¡}|  |¡}|  |¡}|S r   )r+   r3   r*   r0   r,   r4   r1   r   r   r   r   Ú	_residual]   s   






zResBlk._residualc                 C   s"   |   |¡|  |¡ }|t d¡ S )Nr   )r:   r;   ÚmathÚsqrtr   r   r   r   r   i   s   zResBlk.forward©
r   r   r   r.   Ú	LeakyReLUr   r:   r;   r   r    r   r   r   r   r%   ;   s    úr%   c                       s2   e Zd Z		d‡ fdd„	Zdejfdd„Z‡  ZS )	ÚAdaINFNc                    sb   t ƒ  ¡  t |¡| _|rd| j_t ||d ¡| _tj d|¡| _	tj 
t dd|g¡¡| _d S )NFr   éÀ   r   iè  )r   r   r.   r2   Únormr5   ÚLinearÚfcÚtorchÚembÚ	ParameterÚrandnÚspk_emb)r   Ú	style_dimZnum_featuresr9   Údevicer   r   r   r   p   s   
zAdaIN.__init__Úsc                 C   s    |   |¡}| d¡}tj|| j dd}tj|dd d¡}tj| j| dd}|  |¡}| | d¡| d¡dd¡}tj	|ddd\}}d| |  
|¡ | S )Nr   éÿÿÿÿ©Údimr   r   )ÚchunksrO   )rF   Ú	unsqueezerE   ÚsumrI   ZsoftmaxrD   ÚviewÚsizeÚchunkrB   )r   r   rL   ZscoreÚvalueÚhÚgammaÚbetar   r   r   r   ~   s   


zAdaIN.forward)FN©r   r   r   r   rE   ZTensorr   r    r   r   r   r   r@   n   s
    ür@   c                       sF   e Zd Zdde d¡ddf‡ fdd„	Zdd	„ Zd
d„ Zdd„ Z‡  Z	S )ÚAdainResBlké@   r   r&   r   Fc                    s”   t ƒ  ¡  || _|| _t|ƒ| _||k| _t ||ddd¡| _	t ||ddd¡| _
t|||ƒ| _t|||ƒ| _| jrHtj||ddddd| _d S d S )Nr'   r   r   Fr(   )r   r   Úw_hpfr*   r"   Úupsampler-   r.   r/   r0   r1   r@   r3   r4   r6   )r   r7   r8   rJ   r]   r*   r^   r9   r   r   r   r   Ž   s   


ÿzAdainResBlk.__init__c                 C   s   |   |¡}| jr|  |¡}|S r   )r^   r-   r6   r   r   r   r   r:   £   s   

zAdainResBlk._shortcutc                 C   sN   |   ||¡}|  |¡}|  |¡}|  |¡}|  ||¡}|  |¡}|  |¡}|S r   )r3   r*   r^   r0   r4   r1   )r   r   rL   r   r   r   r;   ©   s   




zAdainResBlk._residualc                 C   s2   |   ||¡}| jdkr||  |¡ t d¡ }|S )Nr   r   )r;   r]   r:   r<   r=   )r   r   rL   Úoutr   r   r   r   ³   s   
zAdainResBlk.forwardr>   r   r   r   r   r[   Œ   s    ù
r[   c                       r   )ÚHighPassc                    s4   t t| ƒ ¡  t g d¢g d¢g d¢g¡| | _d S )N)rM   rM   rM   )rM   g       @rM   )r   r`   r   rE   ZtensorÚfilter)r   r]   r   r   r   r   ¼   s   
ÿzHighPass.__init__c                 C   s<   | j  d¡ d¡ | d¡ddd¡}tj||d| d¡dS )Nr   r   )ÚpaddingÚgroups)ra   rQ   ÚrepeatrT   r   Zconv2d)r   r   ra   r   r   r   r   Á   s   ÿzHighPass.forwardr   r   r   r   r   r`   º   s    r`   c                       s6   e Zd Z				d	‡ fdd„	Zdejfdd„Z‡  ZS )
Ú	Generatoré0   é€  Fc                    sR  t ƒ  ¡  || _t d|ddd¡| _t ¡ | _t ¡ | _t 	tj
|ddt d¡t |dddd¡¡| _|rH| j ¡ D ]}t|tjj
ƒrG| ¡  q:d}t|ƒD ]0}|dv rWd	}nd
}t|d |ƒ}	| j t||	d||d¡ | j dt|	||d||d¡ |	}qNtdƒD ]}
| j t|	|	d|d¡ qƒtdƒD ]}
| j dt|	|	|d|d¡ q–d S )Nr   r'   T©Zaffiner&   r   é   ©r   r'   r   r   r   )r+   r,   r9   )r]   r^   r9   )r+   r9   )r]   r9   )r   r   r9   r.   r/   ÚstemÚ
ModuleListÚencodeÚdecodeÚ
Sequentialr2   r?   Úto_outÚmodulesÚ
isinstancerE   ÚevalÚrangeÚminÚappendr%   Úinsertr[   )r   r7   rJ   Úmax_conv_dimr9   ÚmÚ
repeat_numÚlidÚ	_downtyper8   Ú_r   r   r   r   É   sz   


þ€ûÿúÿüÿûþÿzGenerator.__init__r   c                 C   sB   |   |¡}| jD ]}||ƒ}q| jD ]}|||ƒ}q|  |¡}|S r   )rk   rm   rn   rp   )r   r   ÚcÚblockr_   r   r   r   r     s   




zGenerator.forward)rf   rf   rg   FrZ   r   r   r   r   re   Ç   s    üCre   c                       s4   e Zd Z							d‡ fdd„	Zd	d
„ Z‡  ZS )Ú
Generator2rf   rg   é[  r   r   Fc                    s†  t ƒ  ¡  || _t d|ddd¡| _t ¡ | _t ¡ | _t 	tj
|ddt d¡t |dddd¡¡| _|| _tj ||¡| _d}|dkrH|d7 }t|ƒD ]/}	|	dv rUd	}
nd
}
t|d |ƒ}| j t||d|
d¡ | j dt|||||
dd¡ |}qLtdƒD ]}| j t||dd¡ q€tdƒD ]}| j dt|t|d ƒ |t|d ƒ ||dd¡ q’t tj ¡ r¸dnd¡}t||ƒ| _d S )Nr   r'   Trh   r&   r   ri   rj   r   r   r   F)r+   r,   )r]   r^   rB   )r+   )r]   rB   ÚcudaÚcpu)r   r   r9   r.   r/   rk   rl   rm   rn   ro   r2   r?   rp   Ú
F0_channelrE   Z	EmbeddingÚspk_embeddingrt   ru   rv   r%   rw   r[   ÚintrK   r‚   Zis_availabler`   Zhpf)r   r7   rJ   rx   Znum_spkr]   r„   r9   rz   r{   r|   r8   r}   rK   r   r   r   r     s`   


þÿúÿûþ	zGenerator2.__init__c                 C   st   | j r| dddd¡}|  |¡}| jD ]}||ƒ}q|  |¡}| jD ]}|||ƒ}q"|  |¡}| j r8|jdd}|S )Nr   r'   r   r   rN   )r9   Zpermuterk   rm   r…   rn   rp   Zsqueeze)r   r   r~   r   rL   r_   r   r   r   r   \  s   





zGenerator2.forward)rf   rf   rg   r   r   r   Fr   r   r   r   r   r€     s    ù>r€   c                       s.   e Zd Z				d	‡ fdd„	Zdd„ Z‡  ZS )
ÚMappingNetworké   rf   r   rg   c                    sÒ   t ƒ  ¡  g }|t ||¡g7 }|t ¡ g7 }tdƒD ]}|t ||¡g7 }|t ¡ g7 }qtj|Ž | _t ¡ | _	t|ƒD ])}|  j	t t ||¡t ¡ t ||¡t ¡ t ||¡t ¡ t ||¡¡g7  _	q=d S )Nr'   )
r   r   r.   rC   ZReLUrt   ro   Úsharedrl   Úunshared)r   Ú
latent_dimrJ   Únum_domainsÚ
hidden_dimZlayersr}   r   r   r   r   p  s,   





ù
ÿÿzMappingNetwork.__init__c                 C   sb   |   |¡}g }| jD ]	}|||ƒg7 }q
tj|dd}t t| d¡ƒ¡ |j¡}|||f }|S )Nr   rN   r   )	r‰   rŠ   rE   ÚstackÚ
LongTensorrt   rT   ÚtorK   )r   ÚzÚyrW   r_   ÚlayerÚidxrL   r   r   r   r   Œ  s   

zMappingNetwork.forward)rˆ   rf   r   rg   r   r   r   r   r   r‡   n  s    ür‡   c                       s.   e Zd Z				d‡ fdd„	Zdd„ Z‡  ZS )	ÚStyleEncoderrf   r   rg   c           	         sæ   t ƒ  ¡  g }|t d|ddd¡g7 }d}t|ƒD ]}t|d |ƒ}|t||ddg7 }|}q|t d¡g7 }|t ||ddd	¡g7 }|t d¡g7 }|t d¡g7 }tj	|Ž | _
t ¡ | _t|ƒD ]}|  jt ||¡g7  _qbd S )
Nr   r'   ri   r   r   ©r,   r&   é   r   )r   r   r.   r/   rt   ru   r%   r?   ÚAdaptiveAvgPool2dro   r‰   rl   rŠ   rC   )	r   r7   rJ   rŒ   rx   Úblocksrz   r}   r8   r   r   r   r   ™  s"   

ÿzStyleEncoder.__init__c                 C   st   |   |¡}| | d¡d¡}g }| jD ]	}|||ƒg7 }qtj|dd}t t| d¡ƒ¡ |j	¡}|||f }|S )Nr   rM   r   rN   )
r‰   rS   rT   rŠ   rE   rŽ   r   rt   r   rK   )r   r   r’   rW   r_   r“   r”   rL   r   r   r   r   ²  s   

zStyleEncoder.forward)rf   rf   r   rg   r   r   r   r   r   r•   —  s    ür•   c                       ó6   e Zd Z				d‡ fdd„	Zdd„ Zd	d
„ Z‡  ZS )ÚDiscriminatorrf   r   rg   ri   c                    s8   t ƒ  ¡  t||||d| _t||||d| _|| _d S )N)r7   rŒ   rx   rz   )r   r   ÚDiscriminator2dÚdisÚclsrŒ   )r   r7   rŒ   rx   rz   r   r   r   r   Ã  s   
üü
zDiscriminator.__init__c                 C   s   |   ||¡S r   )r   )r   r   r’   r   r   r   r   Ø  ó   zDiscriminator.forwardc                 C   s   | j  |¡S r   )rž   Úget_featurer   r   r   r   Ú
classifierÛ  rŸ   zDiscriminator.classifier©rf   r   rg   ri   )r   r   r   r   r   r¡   r    r   r   r   r   r›   Á  s    ür›   c                       s&   e Zd Zd‡ fdd„	Zdd„ Z‡  ZS )Ú
LinearNormTÚlinearc                    sF   t t| ƒ ¡  tjj|||d| _tjjj| jj	tjj 
|¡d d S )Nr(   )Zgain)r   r£   r   rE   r.   rC   Úlinear_layerÚinitZxavier_uniform_ÚweightZcalculate_gain)r   Zin_dimZout_dimr)   Zw_init_gainr   r   r   r   á  s   
þzLinearNorm.__init__c                 C   s
   |   |¡S r   )r¥   r   r   r   r   r   é  s   
zLinearNorm.forward)Tr¤   r   r   r   r   r   r£   ß  s    r£   c                       rš   )rœ   rf   r   rg   ri   c                    sÊ   t ƒ  ¡  g }|t d|ddd¡g7 }t|ƒD ]}t|d |ƒ}|t||ddg7 }|}q|t d¡g7 }|t ||ddd¡g7 }|t d¡g7 }|t d¡g7 }|t ||ddd¡g7 }tj	|Ž | _
d S )	Nr   r'   r   r   r–   r&   r—   r   )r   r   r.   r/   rt   ru   r%   r?   r˜   ro   Úmain)r   r7   rŒ   rx   rz   r™   r{   r8   r   r   r   r   ï  s   
zDiscriminator2d.__init__c                 C   s    |   |¡}| | d¡d¡}|S )Nr   rM   )r¨   rS   rT   )r   r   r_   r   r   r   r      s   
zDiscriminator2d.get_featurec                 C   s6   |   |¡}t t| d¡ƒ¡ |j¡}|||f }|S )Nr   )r    rE   r   rt   rT   r   rK   )r   r   r’   r_   r”   r   r   r   r   	  s   
zDiscriminator2d.forwardr¢   )r   r   r   r   r    r   r    r   r   r   r   rœ   í  s    ürœ   c                 C   s@   d}|   ¡ D ]}|| ¡ 7 }qt| ƒ t|ƒ td |¡ƒ dS )z"Print out the network information.r   zThe number of parameters: {}N)Ú
parametersZnumelÚprintÚformat)ÚmodelÚnameZ
num_paramsÚpr   r   r   Úprint_network  s   r¯   c                 C   sÆ   t | j| j| j| j| jd}t| j| j| j| jd}t	| j| j| j| jƒ}t
| j| j| j| jƒ}t |¡}t |¡}t |¡}	t|dƒ t|dƒ t|dƒ t||||||d}
t|||	d}|
|fS )N©r]   r„   )r   Ú	generatorÚmapping_networkÚstyle_encoder)r±   r²   r³   ÚdiscriminatorZf0_modelZ	asr_model)r±   r²   r³   )re   r7   rJ   rx   r]   r„   r‡   r‹   rŒ   r•   r›   Zn_repeatÚcopyÚdeepcopyrª   ZMunch)ÚargsZF0_modelZ	ASR_modelr±   r²   r³   r´   Zgenerator_emaZmapping_network_emaZstyle_encoder_emaÚnetsZnets_emar   r   r   Úbuild_model  sN   ûüÿ
ÿ





úýr¹   Ú__main__rf   é   r   r°   )r   r   i   éP   r   )(Ú__doc__rµ   r<   ÚosZos.pathÚpathZospÚnumpyÚnprE   Ztorch.nnr.   Ztorch.nn.functionalZ
functionalr   ÚModuler   r"   r%   r@   r[   r`   re   r€   r‡   r•   r›   r£   rœ   r¯   r¹   r   r±   rH   ÚaÚrandintr~   Úbrª   Úshaper   r   r   r   Ú<module>   s>    	3.UR)*#
&
û