U
    ¯Ê¹jÐB  ã                	   @   s�  d Z ddlmZ ddlZddlmZ ddlm  mZ ddl	m
Z
mZmZmZ ddlmZmZmZmZ ddlmZ ddlmZ dd	lmZ dd
lmZmZmZ dg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$d,dd„Z%d-dd„Z&ee&dd d!�e&dd"�e&dd"�e&dee
d#�d$œƒZ'ed.e$d%œd&d'„ƒZ(ee)d(d)d*d+œƒ dS )/zˆ Inception-V3

Originally from torchvision Inception3 model
Licensed BSD-Clause 3 https://github.com/pytorch/vision/blob/master/LICENSE
é    )ÚpartialN)ÚIMAGENET_DEFAULT_STDÚIMAGENET_DEFAULT_MEANÚIMAGENET_INCEPTION_MEANÚIMAGENET_INCEPTION_STD)Útrunc_normal_Úcreate_classifierÚLinearÚConvNormActé   )Úbuild_model_with_cfg)Úresolve_pretrained_cfg)Úflatten_modules)Úregister_modelÚgenerate_default_cfgsÚregister_model_deprecationsÚInceptionV3c                       s.   e Zd Zd‡ fdd„	Zdd„ Zdd„ Z‡  ZS )	Ú
InceptionANc                    s�   t t| ƒ ¡  |pt}||ddd�| _||ddd�| _|ddddd�| _||ddd�| _|ddd	dd�| _|ddd	dd�| _	|||dd�| _
d S )
Né@   r   ©Úkernel_sizeé0   é   é   ©r   Úpaddingé`   é   )Úsuperr   Ú__init__r
   Ú	branch1x1Úbranch5x5_1Úbranch5x5_2Úbranch3x3dbl_1Úbranch3x3dbl_2Úbranch3x3dbl_3Úbranch_pool)ÚselfÚin_channelsÚpool_featuresÚ
conv_block©Ú	__class__© úW/var/www/html/bwave/python/venv/lib/python3.8/site-packages/timm/models/inception_v3.pyr      s    zInceptionA.__init__c                 C   sh   |   |¡}|  |¡}|  |¡}|  |¡}|  |¡}|  |¡}tj|dddd�}|  |¡}||||g}|S ©Nr   r   ©r   Ústrider   )	r    r!   r"   r#   r$   r%   ÚFÚ
avg_pool2dr&   )r'   Úxr    Z	branch5x5Úbranch3x3dblr&   Úoutputsr-   r-   r.   Ú_forward&   s    






zInceptionA._forwardc                 C   s   |   |¡}t |d¡S ©Nr   ©r7   ÚtorchÚcat©r'   r4   r6   r-   r-   r.   Úforward6   s    
zInceptionA.forward)N©Ú__name__Ú
__module__Ú__qualname__r   r7   r=   Ú__classcell__r-   r-   r+   r.   r      s   r   c                       s.   e Zd Zd‡ fdd„	Zdd„ Zdd„ Z‡  ZS )	Ú
InceptionBNc                    s`   t t| ƒ ¡  |pt}||dddd�| _||ddd�| _|ddddd	�| _|ddddd�| _d S )
Né€  r   r   ©r   r1   r   r   r   r   r   )r   rC   r   r
   Ú	branch3x3r#   r$   r%   ©r'   r(   r*   r+   r-   r.   r   =   s    zInceptionB.__init__c                 C   sF   |   |¡}|  |¡}|  |¡}|  |¡}tj|ddd�}|||g}|S ©Nr   r   rE   )rF   r#   r$   r%   r2   Ú
max_pool2d)r'   r4   rF   r5   r&   r6   r-   r-   r.   r7   F   s    




zInceptionB._forwardc                 C   s   |   |¡}t |d¡S r8   r9   r<   r-   r-   r.   r=   R   s    
zInceptionB.forward)Nr>   r-   r-   r+   r.   rC   ;   s   	rC   c                       s.   e Zd Zd‡ fdd„	Zdd„ Zdd„ Z‡  ZS )	Ú
InceptionCNc                    sÊ   t t| ƒ ¡  |pt}||ddd�| _|}|||dd�| _|||ddd�| _||dddd�| _|||dd�| _|||ddd�| _	|||ddd�| _
|||ddd�| _||dddd�| _||ddd�| _d S )	NéÀ   r   r   ©r   é   ©r   r   r   ©rM   r   ©r   r   )r   rJ   r   r
   r    Úbranch7x7_1Úbranch7x7_2Úbranch7x7_3Úbranch7x7dbl_1Úbranch7x7dbl_2Úbranch7x7dbl_3Úbranch7x7dbl_4Úbranch7x7dbl_5r&   )r'   r(   Úchannels_7x7r*   Zc7r+   r-   r.   r   Y   s    zInceptionC.__init__c                 C   s†   |   |¡}|  |¡}|  |¡}|  |¡}|  |¡}|  |¡}|  |¡}|  |¡}|  |¡}t	j
|dddd�}|  |¡}||||g}|S r/   )r    rQ   rR   rS   rT   rU   rV   rW   rX   r2   r3   r&   )r'   r4   r    Z	branch7x7Zbranch7x7dblr&   r6   r-   r-   r.   r7   k   s    









zInceptionC._forwardc                 C   s   |   |¡}t |d¡S r8   r9   r<   r-   r-   r.   r=   ~   s    
zInceptionC.forward)Nr>   r-   r-   r+   r.   rJ   W   s   rJ   c                       s.   e Zd Zd‡ fdd„	Zdd„ Zdd„ Z‡  ZS )	Ú
InceptionDNc                    s‚   t t| ƒ ¡  |pt}||ddd�| _|ddddd�| _||ddd�| _|dddd	d
�| _|ddddd
�| _|ddddd�| _	d S )NrK   r   r   é@  r   r   rE   rL   rN   r   rO   rP   )
r   rZ   r   r
   Úbranch3x3_1Úbranch3x3_2Úbranch7x7x3_1Úbranch7x7x3_2Úbranch7x7x3_3Úbranch7x7x3_4rG   r+   r-   r.   r   …   s    zInceptionD.__init__c                 C   sZ   |   |¡}|  |¡}|  |¡}|  |¡}|  |¡}|  |¡}tj|ddd�}|||g}|S rH   )r\   r]   r^   r_   r`   ra   r2   rI   )r'   r4   rF   Zbranch7x7x3r&   r6   r-   r-   r.   r7   �   s    






zInceptionD._forwardc                 C   s   |   |¡}t |d¡S r8   r9   r<   r-   r-   r.   r=   �   s    
zInceptionD.forward)Nr>   r-   r-   r+   r.   rZ   ƒ   s   rZ   c                       s.   e Zd Zd‡ fdd„	Zdd„ Zdd„ Z‡  ZS )	Ú
InceptionENc                    s´   t t| ƒ ¡  |pt}||ddd�| _||ddd�| _|ddddd�| _|dddd	d�| _||d
dd�| _|d
dddd�| _	|ddddd�| _
|dddd	d�| _||ddd�| _d S )Nr[   r   r   rD   )r   r   )r   r   r   )r   r   )r   r   iÀ  r   rK   )r   rb   r   r
   r    r\   Úbranch3x3_2aÚbranch3x3_2br#   r$   Úbranch3x3dbl_3aÚbranch3x3dbl_3br&   rG   r+   r-   r.   r   ¤   s    zInceptionE.__init__c                 C   s”   |   |¡}|  |¡}|  |¡|  |¡g}t |d¡}|  |¡}|  |¡}|  |¡|  	|¡g}t |d¡}t
j|dddd�}|  |¡}||||g}|S )Nr   r   r0   )r    r\   rc   rd   r:   r;   r#   r$   re   rf   r2   r3   r&   )r'   r4   r    rF   r5   r&   r6   r-   r-   r.   r7   ´   s     

þ

þ
zInceptionE._forwardc                 C   s   |   |¡}t |d¡S r8   r9   r<   r-   r-   r.   r=   Ì   s    
zInceptionE.forward)Nr>   r-   r-   r+   r.   rb   ¢   s   rb   c                       s&   e Zd Zd‡ fdd„	Zdd„ Z‡  ZS )ÚInceptionAuxNc                    sV   t t| ƒ ¡  |pt}||ddd�| _|dddd�| _d| j_td|ƒ| _d| j_d S )Né€   r   r   é   r   g{®Gáz„?çü©ñÒMbP?)	r   rg   r   r
   Úconv0Úconv1Ústddevr	   Úfc)r'   r(   Únum_classesr*   r+   r-   r.   r   Ó   s    zInceptionAux.__init__c                 C   sJ   t j|ddd�}|  |¡}|  |¡}t  |d¡}t |d¡}|  |¡}|S )Nr   r   rE   )r   r   r   )r2   r3   rk   rl   Zadaptive_avg_pool2dr:   Úflattenrn   ©r'   r4   r-   r-   r.   r=   Ü   s    


zInceptionAux.forward)N)r?   r@   rA   r   r=   rB   r-   r-   r+   r.   rg   Ñ   s   	rg   c                       sš   e Zd ZU dZejje ed< d ‡ fdd„	Z	ejj
d!dd„ƒZejj
d"dd„ƒZejj
dd„ ƒZd#dd„Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Z‡  ZS )$r   zInception-V3
    Ú
aux_logitséè  r   ç        ÚavgFÚbatchnorm2drj   Úreluc	              	      s`  t t| ƒ ¡  || _|| _ttd||t|d�tdd�d�}	|	|dddd	�| _|	dddd
�| _	|	ddddd�| _
tjddd	�| _|	dddd
�| _|	dddd
�| _tjddd	�| _tdd|	d�| _tdd|	d�| _tdd|	d�| _td|	d�| _tdd|	d�| _tdd|	d�| _tdd|	d�| _tdd|	d�| _|�rDtd||	d�| _nd | _td|	d�| _t d|	d�| _!t d|	d�| _"tdddd�tdddd�tdddd�tdd d!d�tddd"d�g| _#d| _$t%| j$| j||d#�\| _&| _'| _(|  )¡ D ]v}
t*|
tj+ƒ�st*|
tj,ƒ�r*t-|
d$ƒ�r|
j.nd%}t/|
j0|d&� n.t*|
tj1ƒ�rätj2 3|
j0d¡ tj2 3|
j4d¡ �qäd S )'Nr   )ÚepsT)Zinplace)r   Ú
norm_layerÚ	act_layerZnorm_kwargsZ
act_kwargsé    r   r   rE   r   r   r   r   éP   rK   )r)   r*   é   i   )r*   ri   rh   )rY   r*   é    i   i   ÚConv2d_2b_3x3)Znum_chsZ	reductionÚmoduleé   ÚConv2d_4a_3x3é   ÚMixed_5dé   ÚMixed_6eÚMixed_7c)Ú	pool_typeÚ	drop_raterm   gš™™™™™¹?)Ústd)5r   r   r   ro   rr   r   r
   ÚdictÚConv2d_1a_3x3ÚConv2d_2a_3x3r   ÚnnZ	MaxPool2dÚPool1ÚConv2d_3b_1x1r‚   ÚPool2r   ÚMixed_5bÚMixed_5cr„   rC   ÚMixed_6arJ   ÚMixed_6bÚMixed_6cÚMixed_6dr†   rg   Ú	AuxLogitsrZ   ÚMixed_7arb   ÚMixed_7br‡   Zfeature_infoÚnum_featuresr   Úglobal_poolÚ	head_droprn   ÚmodulesÚ
isinstanceZConv2dr	   Úhasattrrm   r   ÚweightZBatchNorm2dÚinitZ	constant_Zbias)r'   ro   Zin_chansr‰   rœ   rr   ry   Znorm_epsrz   r*   Úmrm   r+   r-   r.   r   ó   sh    ú	ûüzInceptionV3.__init__c                    s8   dd„ t t|  ¡ dd�ƒD ƒ‰ ˆ  d¡ ‡ fdd„}|S )Nc                 S   s   i | ]\}\}}||“qS r-   r-   )Ú.0ÚiÚkÚ_r-   r-   r.   Ú
<dictcomp>:  s    
  z-InceptionV3.group_matcher.<locals>.<dictcomp>r-   )Úprefix©rn   c                    sx   t ‡ fdd„dD ƒƒrdS t ‡ fdd„dD ƒƒr4dS ˆ ¡ D ].}|tˆ  d¡d t|ƒ… ƒkr<ˆ|   S q<td	ƒS d S )
Nc                    s   g | ]}ˆ   |¡‘qS r-   ©Ú
startswith©r¤   Ún©Únamer-   r.   Ú
<listcomp>>  s     z?InceptionV3.group_matcher.<locals>._matcher.<locals>.<listcomp>)ZConv2d_1ZConv2d_2r   c                    s   g | ]}ˆ   |¡‘qS r-   r«   r­   r¯   r-   r.   r±   @  s     )ZConv2d_3ZConv2d_4r   Ú.Úinf)ÚanyÚkeysÚtupleÚsplitÚlenÚfloat)r°   r¦   ©Z
module_mapr¯   r.   Ú_matcher=  s    z+InceptionV3.group_matcher.<locals>._matcher)Ú	enumerater   Znamed_childrenÚpop)r'   Zcoarser»   r-   rº   r.   Úgroup_matcher8  s    

zInceptionV3.group_matcherTc                 C   s   |rt dƒ‚d S )Nz$gradient checkpointing not supported)ÚAssertionError)r'   Úenabler-   r-   r.   Úset_grad_checkpointingI  s    z"InceptionV3.set_grad_checkpointingc                 C   s   | j S ©Nrª   )r'   r-   r-   r.   Úget_classifierM  s    zInceptionV3.get_classifierc                 C   s$   || _ t| j| j |d�\| _| _d S )N)rˆ   )ro   r   r›   rœ   rn   )r'   ro   rœ   r-   r-   r.   Úreset_classifierQ  s    zInceptionV3.reset_classifierc                 C   sš   |   |¡}|  |¡}|  |¡}|  |¡}|  |¡}|  |¡}|  |¡}|  |¡}|  |¡}|  	|¡}|  
|¡}|  |¡}|  |¡}|  |¡}|  |¡}|S rÂ   )rŒ   r�   r   r�   r�   r‚   r‘   r’   r“   r„   r”   r•   r–   r—   r†   rq   r-   r-   r.   Úforward_preauxU  s     














zInceptionV3.forward_preauxc                 C   s"   |   |¡}|  |¡}|  |¡}|S rÂ   )r™   rš   r‡   rq   r-   r-   r.   Úforward_postauxg  s    


zInceptionV3.forward_postauxc                 C   s:   |   |¡}| jr,|  |¡}|  |¡}||fS |  |¡}|S rÂ   )rÅ   rr   r˜   rÆ   ©r'   r4   Zauxr-   r-   r.   Úforward_featuresm  s    



zInceptionV3.forward_featuresc                 C   s"   |   |¡}|  |¡}|  |¡}|S rÂ   )rœ   r�   rn   rq   r-   r-   r.   Úforward_headv  s    


zInceptionV3.forward_headc                 C   s>   | j r&|  |¡\}}|  |¡}||fS |  |¡}|  |¡}|S rÂ   )rr   rÈ   rÉ   rÇ   r-   r-   r.   r=   |  s    


zInceptionV3.forward)rs   r   rt   ru   Frv   rj   rw   )F)T)ru   )r?   r@   rA   Ú__doc__r:   ZjitÚFinalÚboolÚ__annotations__r   Úignorer¾   rÁ   rÃ   rÄ   rÅ   rÆ   rÈ   rÉ   r=   rB   r-   r-   r+   r.   r   î   s.   
        ÷E

	Fc                 K   sl   t | | dd ¡d�}| dd¡}d}|r2|jdk}|rL| dd¡rFt‚|}n| }tt| |f||dœ|—ŽS )NÚpretrained_cfg)rÏ   rr   FZtv_in1kZfeatures_only)rÏ   Zpretrained_strict)r   r½   ÚgetÚtagr¿   r   r   )ÚvariantÚ
pretrainedÚkwargsrÏ   rr   Zhas_aux_logitsZload_strictr-   r-   r.   Ú_create_inception_v3†  s&    
ýûúrÕ   Ú c                 K   s   | dddddt tdddœ
|–S )	Nrs   )r   é+  r×   )rƒ   rƒ   g      ì?ZbicubiczConv2d_1a_3x3.convrn   )
Úurlro   Z
input_sizeZ	pool_sizeZcrop_pctÚinterpolationÚmeanrŠ   Z
first_convÚ
classifier)r   r   )rØ   rÔ   r-   r-   r.   Ú_cfg�  s         ûúrÜ   ztimm/zDhttps://download.pytorch.org/models/inception_v3_google-1a9a5a14.pth)Ú	hf_hub_idrØ   )rÝ   )rÝ   rÚ   rŠ   )zinception_v3.tv_in1kúinception_v3.tf_in1kúinception_v3.tf_adv_in1kúinception_v3.gluon_in1k)Úreturnc                 K   s   t dd| i|—Ž}|S )NÚinception_v3rÓ   )râ   )rÕ   )rÓ   rÔ   Úmodelr-   r-   r.   râ   ½  s    râ   rÞ   rß   rà   )Ztf_inception_v3Zadv_inception_v3Zgluon_inception_v3)F)rÖ   )F)*rÊ   Ú	functoolsr   r:   Ztorch.nnrŽ   Ztorch.nn.functionalZ
functionalr2   Z	timm.datar   r   r   r   Ztimm.layersr   r   r	   r
   Z_builderr   r   Z_manipulater   Ú	_registryr   r   r   Ú__all__ÚModuler   rC   rJ   rZ   rb   rg   r   rÕ   rÜ   Zdefault_cfgsrâ   r?   r-   r-   r-   r.   Ú<module>   sR   %,/ 

ýýóý