a
    d                  	   @   sP  d dl 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dl
mZ ddlmZmZmZmZ dd	lmZmZ dd
lmZmZ g Zdd Zd!ddZeeddeddedd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ed%edddZed&edddZed'eddd Z dS )(    )partialNIMAGENET_DEFAULT_MEANIMAGENET_DEFAULT_STD   )build_model_with_cfg)pretrained_cfg_for_features)SqueezeExcite)decode_arch_defresolve_act_layerresolve_bn_argsround_channels)register_modelgenerate_default_cfgs)MobileNetV3MobileNetV3Featuresc              
   K   s   d}t tdtjtd}tf t||dt tjfi t|t	|d|d|}d}t
}d}	|d	drrd
}d}	t}t||| f| |	d|}
|rt|
j|
_|
S )zCreates a hardcorenas model

    Ref impl: https://github.com/Alibaba-MIIL/HardCoReNAS
    Paper: https://arxiv.org/abs/2102.11646

    i   Zhard_sigmoid)Z
gate_layerZforce_act_layerZrd_round_fn    Z
hard_swish)Z
block_argsnum_featuresZ	stem_sizeZ
norm_layerZ	act_layerse_layerFNfeatures_onlyT)num_classesr   global_poolZ	head_convZ	head_biasr   )Zpretrained_strictkwargs_filter)r   r	   nnZReLUr   dictr
   ZBatchNorm2dr   r   r   popr   r   r   Zdefault_cfg)
pretrainedvariantarch_defkwargsr   r   Zmodel_kwargsr   Z	model_clsr   model r!   `/var/www/html/stable-diffusion-webui/venv/lib/python3.9/site-packages/timm/models/hardcorenas.py_gen_hardcorenas   s@    
r#    c                 K   s   | dddddt tddd
|S )	Ni  )      r&   )   r'   g      ?ZbilinearZ	conv_stem
classifier)
urlr   Z
input_sizeZ	pool_sizeZcrop_pctinterpolationmeanZstdZ
first_convr(   r   )r)   r   r!   r!   r"   _cfg7   s    r,   ztimm/)Z	hf_hub_id)zhardcorenas_a.miil_green_in1kzhardcorenas_b.miil_green_in1kzhardcorenas_c.miil_green_in1kzhardcorenas_d.miil_green_in1kzhardcorenas_e.miil_green_in1kzhardcorenas_f.miil_green_in1kF)returnc                 K   sD   dgddgddgddgddgd	d
gdgg}t f | d|d|}|S )z hardcorenas_A ds_r1_k3_s1_e1_c16_nreir_r1_k5_s2_e3_c24_nreir_r1_k5_s1_e3_c24_nre_se0.25ir_r1_k5_s2_e3_c40_nreir_r1_k5_s1_e6_c40_nre_se0.25ir_r1_k5_s2_e6_c80_se0.25ir_r1_k5_s1_e6_c80_se0.25ir_r1_k5_s1_e6_c112_se0.25ir_r1_k5_s2_e6_c192_se0.25ir_r1_k5_s1_e6_c192_se0.25cn_r1_k1_s1_c960hardcorenas_ar   r   r   r#   r   r   r   r    r!   r!   r"   r9   K   s    

r9   c                 K   sD   dgg dg dg dg dg ddgg}t f | d|d	|}|S )
z hardcorenas_B r.   )r/   r0   Zir_r1_k3_s1_e3_c24_nre)r1   ir_r1_k5_s1_e3_c40_nrer=   )Zir_r1_k5_s2_e3_c80Zir_r1_k5_s1_e3_c80ir_r1_k3_s1_e3_c80r>   )Zir_r1_k5_s1_e3_c112ir_r1_k3_s1_e3_c112r?   r?   r6   r7   zir_r1_k3_s1_e3_c192_se0.25r8   hardcorenas_br:   r;   r<   r!   r!   r"   rA   W   s    rA   c                 K   sD   dgddgg dg dg dg ddgg}t f | d	|d
|}|S )z hardcorenas_C r.   r/   r0   )r1   r=   r=   r=   )Zir_r1_k5_s2_e4_c80r4   r>   r>   )r5   r?   r?   r?   r@   r8   hardcorenas_cr:   r;   r<   r!   r!   r"   rB   e   s    
rB   c                 K   sD   dgddgg dg dg dg ddgg}t f | d	|d
|}|S )z hardcorenas_D r.   ir_r1_k5_s2_e3_c24_nre_se0.25r0   )zir_r1_k5_s2_e3_c40_nre_se0.25ir_r1_k5_s1_e4_c40_nre_se0.25ir_r1_k3_s1_e3_c40_nre_se0.25)ir_r1_k5_s2_e4_c80_se0.25ir_r1_k3_s1_e3_c80_se0.25rG   rG   )zir_r1_k3_s1_e4_c112_se0.25zir_r1_k5_s1_e4_c112_se0.25ir_r1_k3_s1_e3_c112_se0.25ir_r1_k5_s1_e3_c112_se0.25r6   r7   r7   ir_r1_k3_s1_e6_c192_se0.25r8   hardcorenas_dr:   r;   r<   r!   r!   r"   rL   s   s    
rL   c                 K   sD   dgddgg dddgg dg dd	gg}t f | d
|d|}|S )z hardcorenas_E r.   rC   r0   )ir_r1_k5_s2_e6_c40_nre_se0.25rD   rD   rE   rF   zir_r1_k3_s1_e6_c80_se0.25)r5   r5   r5   rI   rJ   r8   hardcorenas_er:   r;   r<   r!   r!   r"   rN      s    
rN   c                 K   sD   dgddgddgg dg dg dd	gg}t f | d
|d|}|S )z hardcorenas_F r.   rC   r0   rM   r2   )r3   r4   rG   rG   )zir_r1_k3_s1_e6_c112_se0.25r5   r5   rH   )r6   r7   rK   rK   r8   hardcorenas_fr:   r;   r<   r!   r!   r"   rO      s    
rO   )r$   )F)F)F)F)F)F)!	functoolsr   Ztorch.nnr   Z	timm.datar   r   Z_builderr   r   Z_efficientnet_blocksr	   Z_efficientnet_builderr
   r   r   r   	_registryr   r   Zmobilenetv3r   r   __all__r#   r,   Zdefault_cfgsr9   rA   rB   rL   rN   rO   r!   r!   r!   r"   <module>   s>   '


