a
    þdÐ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__© úa/var/www/html/stable-diffusion-webui/venv/lib/python3.9/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   )Z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   ZweightZBatchNorm2dÚinitZ	constant_Zbias)r'   ro   Zin_chansrˆ   r›   rr   rx   Znorm_epsry   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>:  ó    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>>  r§   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°   @  r§   )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J dƒ‚d S )Nz$gradient checkpointing not supportedr-   )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¡rFJ ‚|}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   )Ú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   %,/ 

ýýóý