a
    dD+                     @   sL  d Z ddlmZ ddlZddlmZ ddlmZmZ ddl	m
Z
mZ ddlmZ ddl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G dd dejZG dd	 d	ejZd+edddZedd d!d"d#d$d%eed&d'd(
iZed,d)d*ZdS )-z Pytorch Inception-V4 implementation
Sourced from https://github.com/Cadene/tensorflow-model-zoo.torch (MIT License) which is
based upon Google's Tensorflow implementation and pretrained weights (Apache 2.0 License)
    )partialN)IMAGENET_INCEPTION_MEANIMAGENET_INCEPTION_STD)create_classifierConvNormAct   )build_model_with_cfg)register_modelgenerate_default_cfgsInceptionV4c                       s(   e Zd Zef fdd	Zdd Z  ZS )Mixed3ac                    s4   t t|   tjddd| _|ddddd| _d S )N      stride@   `   kernel_sizer   )superr   __init__nn	MaxPool2dmaxpoolconvself
conv_block	__class__ a/var/www/html/stable-diffusion-webui/venv/lib/python3.9/site-packages/timm/models/inception_v4.pyr      s    zMixed3a.__init__c                 C   s(   |  |}| |}t||fd}|S Nr   )r   r   torchcatr   xx0x1outr    r    r!   forward   s    

zMixed3a.forward__name__
__module____qualname__r   r   r*   __classcell__r    r    r   r!   r      s   r   c                       s(   e Zd Zef fdd	Zdd Z  ZS )Mixed4ac                    s~   t t|   t|ddddd|ddddd| _t|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      r   r   r   r   paddingr3   r   r   r   )r   r   )r   r0   r   r   
Sequentialbranch0branch1r   r   r    r!   r       s    zMixed4a.__init__c                 C   s(   |  |}| |}t||fd}|S r"   )r:   r;   r#   r$   r%   r    r    r!   r*   /   s    

zMixed4a.forwardr+   r    r    r   r!   r0      s   r0   c                       s(   e Zd Zef fdd	Zdd Z  ZS )Mixed5ac                    s4   t t|   |ddddd| _tjddd| _d S )N   r   r   r   r   )r   r<   r   r   r   r   r   r   r   r    r!   r   7   s    zMixed5a.__init__c                 C   s(   |  |}| |}t||fd}|S r"   )r   r   r#   r$   r%   r    r    r!   r*   <   s    

zMixed5a.forwardr+   r    r    r   r!   r<   6   s   r<   c                       s(   e Zd Zef fdd	Zdd Z  ZS )
InceptionAc                    s   t t|   |ddddd| _t|ddddd|dddddd| _t|ddddd|dddddd|dddddd| _ttjddddd	|ddddd| _	d S )
N  r   r   r   r   r   r5   Fr   r6   Zcount_include_pad)
r   r>   r   r:   r   r9   r;   branch2	AvgPool2dbranch3r   r   r    r!   r   D   s    zInceptionA.__init__c                 C   s@   |  |}| |}| |}| |}t||||fd}|S r"   r:   r;   rA   rC   r#   r$   r   r&   r'   r(   x2x3r)   r    r    r!   r*   X   s    



zInceptionA.forwardr+   r    r    r   r!   r>   C   s   r>   c                       s(   e Zd Zef fdd	Zdd Z  ZS )
ReductionAc              
      sj   t t|   |ddddd| _t|ddddd|dddddd|dd	ddd| _tjddd
| _d S )Nr?   r   r   r   r=   r      r5      r   )	r   rH   r   r:   r   r9   r;   r   rA   r   r   r    r!   r   b   s    zReductionA.__init__c                 C   s4   |  |}| |}| |}t|||fd}|S r"   r:   r;   rA   r#   r$   r   r&   r'   r(   rF   r)   r    r    r!   r*   n   s
    


zReductionA.forwardr+   r    r    r   r!   rH   a   s   rH   c                       s(   e Zd Zef fdd	Zdd Z  ZS )
InceptionBc                    s   t t|   |ddddd| _t|ddddd|dddddd	|dd
dddd	| _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	| _ttjddddd|ddddd| _	d S )N   r?   r   r   r=   rI   r2   r4   r5   rJ   r7   r8   r   Fr@      )
r   rM   r   r:   r   r9   r;   rA   rB   rC   r   r   r    r!   r   w   s$    zInceptionB.__init__c                 C   s@   |  |}| |}| |}| |}t||||fd}|S r"   rD   rE   r    r    r!   r*      s    



zInceptionB.forwardr+   r    r    r   r!   rM   v   s   rM   c                       s(   e Zd Zef fdd	Zdd Z  ZS )
ReductionBc                    s   t t|   t|ddddd|ddddd| _t|ddddd|ddddd	d
|dddddd
|ddddd| _tjddd| _d S )NrN   r=   r   r   r   r   rJ   r2   r4   r5   i@  r7   r8   r   )	r   rP   r   r   r9   r:   r;   r   rA   r   r   r    r!   r      s    zReductionB.__init__c                 C   s4   |  |}| |}| |}t|||fd}|S r"   rK   rL   r    r    r!   r*      s
    


zReductionB.forwardr+   r    r    r   r!   rP      s   rP   c                       s(   e Zd Zef fdd	Zdd Z  ZS )
InceptionCc              	      s   t 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d| _	|dddddd| _
|ddd	dd
d| _ttjddddd|ddddd| _d S )N   rJ   r   r   r?   )r   r   )r   r   r5   )r   r   )r   r   i  i   r   Fr@   )r   rQ   r   r:   	branch1_0
branch1_1a
branch1_1b	branch2_0	branch2_1	branch2_2
branch2_3a
branch2_3br   r9   rB   rC   r   r   r    r!   r      s    zInceptionC.__init__c                 C   s   |  |}| |}| |}| |}t||fd}| |}| |}| |}	| 	|	}
| 
|	}t|
|fd}| |}t||||fd}|S r"   )r:   rS   rT   rU   r#   r$   rV   rW   rX   rY   rZ   rC   )r   r&   r'   Zx1_0Zx1_1aZx1_1br(   Zx2_0Zx2_1Zx2_2Zx2_3aZx2_3brF   rG   r)   r    r    r!   r*      s    









zInceptionC.forwardr+   r    r    r   r!   rQ      s   rQ   c                       s|   e Zd Z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 edddZdd Z  ZS )!r     r               avgbatchnorm2dMbP?reluc	           
   	      sd  t t|   |dksJ || _d| _ttd||t|dtddd  |ddd	d
 ddddd
 ddddddt t	 t
 g}	|	 fddtdD 7 }	|	t g7 }	|	 fddtdD 7 }	|	t g7 }	|	 fddtdD 7 }	tj|	 | _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| _t| j| j||d\| _| _| _d S ) Nr\   rR   r   )ZepsT)Zinplace)r6   
norm_layer	act_layerZnorm_kwargsZ
act_kwargsr   r   r   r   r   r5   c                    s   g | ]}t  qS r    )r>   .0_r   r    r!   
<listcomp>       z(InceptionV4.__init__.<locals>.<listcomp>   c                    s   g | ]}t  qS r    )rM   rd   rg   r    r!   rh      ri   r3   c                    s   g | ]}t  qS r    )rQ   rd   rg   r    r!   rh      ri   z
features.2)Znum_chsZ	reductionmoduler1   z
features.3r?      z
features.9rN      zfeatures.17zfeatures.21)	pool_type	drop_rate)r   r   r   num_classesnum_featuresr   r   dictr   r0   r<   rangerH   rP   r   r9   featuresZfeature_infor   global_pool	head_droplast_linear)
r   rp   Zin_chansZoutput_stridero   ru   rb   Znorm_epsrc   rt   r   rg   r!   r      sD    
zInceptionV4.__init__Fc                 C   s   t dddS )Nz^features\.[012]\.z^features\.(\d+))stemblocks)rr   )r   Zcoarser    r    r!   group_matcher  s    zInceptionV4.group_matcherTc                 C   s   |rJ dd S )Nz$gradient checkpointing not supportedr    )r   enabler    r    r!   set_grad_checkpointing  s    z"InceptionV4.set_grad_checkpointingc                 C   s   | j S N)rw   )r   r    r    r!   get_classifier  s    zInceptionV4.get_classifierc                 C   s$   || _ t| j| j |d\| _| _d S )N)rn   )rp   r   rq   ru   rw   )r   rp   ru   r    r    r!   reset_classifier  s    
zInceptionV4.reset_classifierc                 C   s
   |  |S r}   )rt   r   r&   r    r    r!   forward_features   s    zInceptionV4.forward_features)
pre_logitsc                 C   s&   |  |}| |}|r|S | |S r}   )ru   rv   rw   )r   r&   r   r    r    r!   forward_head#  s    

zInceptionV4.forward_headc                 C   s   |  |}| |}|S r}   )r   r   r   r    r    r!   r*   (  s    

zInceptionV4.forward)r[   r   r\   r]   r^   r_   r`   ra   )F)T)r^   )F)r,   r-   r.   r   r#   Zjitignorerz   r|   r~   r   r   boolr   r*   r/   r    r    r   r!   r      s&           0

F)returnc                 K   s   t t| |fdtddi|S )NZfeature_cfgT)Zflatten_sequential)r   r   rr   )variant
pretrainedkwargsr    r    r!   _create_inception_v4.  s    r   zinception_v4.tf_in1kztimm/r[   )r   +  r   )rl   rl   g      ?Zbicubiczfeatures.0.convrw   )
Z	hf_hub_idrp   Z
input_sizeZ	pool_sizeZcrop_pctinterpolationmeanZstdZ
first_conv
classifierc                 K   s   t d| fi |S )Ninception_v4)r   )r   r   r    r    r!   r   C  s    r   )F)F)__doc__	functoolsr   r#   Ztorch.nnr   Z	timm.datar   r   Ztimm.layersr   r   Z_builderr   	_registryr	   r
   __all__Moduler   r0   r<   r>   rH   rM   rP   rQ   r   r   Zdefault_cfgsr   r    r    r    r!   <module>   s:   !*S
