U
    ¯Ê¹j  ã                	   @   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t|ƒŽt	|dƒ|dœ|—Ž}d}t
}d}	| d	d¡rnd
}d}	t}t||| f| |	dœ|—Ž}
|ršt|
jƒ|
_|
S )zˆCreates 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!   úV/var/www/html/bwave/python/venv/lib/python3.8/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ÚinterpolationZ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"   r8   K   s    
 ür8   c                 K   sR   dgdddgdddgddd	d	gd
dddgdddgdgg}t f | d|dœ|—Ž}|S )z hardcorenas_B r-   r.   r/   Zir_r1_k3_s1_e3_c24_nrer0   Úir_r1_k5_s1_e3_c40_nreZir_r1_k5_s2_e3_c80Zir_r1_k5_s1_e3_c80Úir_r1_k3_s1_e3_c80Zir_r1_k5_s1_e3_c112Úir_r1_k3_s1_e3_c112r5   r6   úir_r1_k3_s1_e3_c192_se0.25r7   Úhardcorenas_br9   r:   r;   r!   r!   r"   r@   W   s    

úr@   c                 K   sR   dgddgddddgddddgd	d
d
d
gdddgdgg}t f | d|dœ|—Ž}|S )z hardcorenas_C r-   r.   r/   r0   r<   Zir_r1_k5_s2_e4_c80r3   r=   r4   r>   r5   r6   r?   r7   Úhardcorenas_cr9   r:   r;   r!   r!   r"   rA   e   s    
ÿ

úrA   c              	   K   sR   dgddgdddgddddgd	d
ddgddddgdgg}t f | d|dœ|—Ž}|S )z hardcorenas_D r-   úir_r1_k5_s2_e3_c24_nre_se0.25r/   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.25z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.25r5   r6   úir_r1_k3_s1_e6_c192_se0.25r7   Úhardcorenas_dr9   r:   r;   r!   r!   r"   rJ   s   s    
ÿÿÿùrJ   c              	   K   sP   dgddgddddgddgd	d	d	d
gddddgdgg}t f | d|dœ|—Ž}|S )z hardcorenas_E r-   rB   r/   úir_r1_k5_s2_e6_c40_nre_se0.25rC   rD   rE   zir_r1_k3_s1_e6_c80_se0.25r4   rH   r5   r6   rI   r7   Úhardcorenas_er9   r:   r;   r!   r!   r"   rL   ‚   s    
ÿÿÿúrL   c              	   K   sP   dgddgddgddddgd	d
d
dgddddgdgg}t f | d|dœ|—Ž}|S )z hardcorenas_F r-   rB   r/   rK   r1   r2   r3   rF   zir_r1_k3_s1_e6_c112_se0.25r4   rG   r5   r6   rI   r7   Úhardcorenas_fr9   r:   r;   r!   r!   r"   rM   �   s    
ÿÿÿùrM   )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_cfgsr8   r@   rA   rJ   rL   rM   r!   r!   r!   r"   Ú<module>   s>   '

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