a
    dy                     @   s   d Z ddlZddlmZ ddlmZmZ ddlmZ ddl	m
Z
mZ ddlmZ ddlmZ d	g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eddedddZe
dedddZe
d edddZe
d!edddZdS )"z ConvMixer

    NIMAGENET_DEFAULT_MEANIMAGENET_DEFAULT_STD)SelectAdaptivePool2d   )register_modelgenerate_default_cfgs)build_model_with_cfg)checkpoint_seq	ConvMixerc                       s$   e Zd Z fddZdd Z  ZS )Residualc                    s   t    || _d S N)super__init__fn)selfr   	__class__ ^/var/www/html/stable-diffusion-webui/venv/lib/python3.9/site-packages/timm/models/convmixer.pyr      s    
zResidual.__init__c                 C   s   |  || S r   )r   r   xr   r   r   forward   s    zResidual.forward)__name__
__module____qualname__r   r   __classcell__r   r   r   r   r      s   r   c                       s   e Zd Zddddddejf 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   	           avgg        c
                    s   t    || _| _d| _ttj|||d  t| _	tj fddt
|D  | _t|dd| _t|| _|dkrt|nt | _d S )NF)kernel_sizeZstridec                    sV   g | ]N}t tt t jd d  t t jdd  t qS )Zsame)groupspaddingr   )r"   )nn
Sequentialr   Conv2dBatchNorm2d).0i	act_layerdimr"   r   r   
<listcomp>2   s   	z&ConvMixer.__init__.<locals>.<listcomp>TZ	pool_typeflattenr   )r   r   num_classesnum_featuresgrad_checkpointingr%   r&   r'   r(   stemrangeblocksr   poolingZDropout	head_dropLinearIdentityhead)r   r-   depthr"   
patch_sizeZin_chansr1   global_poolZ	drop_rater,   kwargsr   r+   r   r      s"    
	zConvMixer.__init__Fc                 C   s   t ddd}|S )Nz^stemz^blocks\.(\d+))r4   r6   )dict)r   ZcoarseZmatcherr   r   r   group_matcherA   s    zConvMixer.group_matcherTc                 C   s
   || _ d S r   )r3   )r   enabler   r   r   set_grad_checkpointingF   s    z ConvMixer.set_grad_checkpointingc                 C   s   | j S r   )r;   )r   r   r   r   get_classifierJ   s    zConvMixer.get_classifierNc                 C   s@   || _ |d urt|dd| _|dkr2t| j|nt | _d S )NTr/   r   )r1   r   r7   r%   r9   r2   r:   r;   )r   r1   r>   r   r   r   reset_classifierN   s    zConvMixer.reset_classifierc                 C   s6   |  |}| jr(tj s(t| j|}n
| |}|S r   )r4   r3   torchjitZis_scriptingr
   r6   r   r   r   r   forward_featuresT   s
    

zConvMixer.forward_features)
pre_logitsc                 C   s&   |  |}| |}|r|S | |S r   )r7   r8   r;   )r   r   rI   r   r   r   forward_head\   s    

zConvMixer.forward_headc                 C   s   |  |}| |}|S r   )rH   rJ   r   r   r   r   r   a   s    

zConvMixer.forward)F)T)N)F)r   r   r   r%   ZGELUr   rF   rG   ignorerA   rC   rD   rE   rH   boolrJ   r   r   r   r   r   r   r      s$   '

Fc                 K   s   t t| |fi |S r   )r	   r   )variant
pretrainedr?   r   r   r   _create_convmixerg   s    rO    c                 K   s   | ddd ddt tddd
|S )Nr    )r      rQ   gQ?Zbicubicr;   zstem.0)
urlr1   Z
input_sizeZ	pool_sizeZcrop_pctinterpolationmeanZstd
classifierZ
first_convr   )rR   r?   r   r   r   _cfgk   s    rV   ztimm/)Z	hf_hub_id)zconvmixer_1536_20.in1kzconvmixer_768_32.in1kzconvmixer_1024_20_ks9_p14.in1k)returnc                 K   s*   t f ddddd|}td| fi |S )Ni      r   r   r-   r<   r"   r=   convmixer_1536_20r@   rO   rN   r?   Z
model_argsr   r   r   rZ   ~   s    rZ   c                 K   s.   t f ddddtjd|}td| fi |S )Ni       r   )r-   r<   r"   r=   r,   convmixer_768_32)r@   r%   ZReLUrO   r\   r   r   r   r^      s    r^   c                 K   s*   t f ddddd|}td| fi |S )Ni   rX   r      rY   convmixer_1024_20_ks9_p14r[   r\   r   r   r   r`      s    r`   )F)rP   )F)F)F)__doc__rF   Ztorch.nnr%   Z	timm.datar   r   Ztimm.layersr   	_registryr   r   Z_builderr	   Z_manipulater
   __all__Moduler   r   rO   rV   Zdefault_cfgsrZ   r^   r`   r   r   r   r   <module>   s.   	N

