o
    پi                  	   @   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"defddZed"defddZed"defddZed"defddZed"defddZed"def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dt||dt tjfi t|t	|d|d|}d}t
}d}	|d	dr9d
}d}	t}t||| f| |	d|}
|rOt|
j|
_|
S )zCreates a hardcorenas model

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

    i   hard_sigmoid)
gate_layerforce_act_layerrd_round_fn    
hard_swish)
block_argsnum_features	stem_size
norm_layer	act_layerse_layerFNfeatures_onlyT)num_classesr   global_pool	head_conv	head_biasr    )pretrained_strictkwargs_filter )r   r	   nnReLUr   dictr
   BatchNorm2dr   r   r   popr   r   r   default_cfg)
pretrainedvariantarch_defkwargsr   r   model_kwargsr   	model_clsr$   modelr%   r%   K/home/ubuntu/.local/lib/python3.10/site-packages/timm/models/hardcorenas.py_gen_hardcorenas   s@   
r4    c                 K   s   | dddddt tddd
|S )	Ni  )      r7   )   r8   g      ?bilinear	conv_stem
classifier)
urlr   
input_size	pool_sizecrop_pctinterpolationmeanstd
first_convr;   r   )r<   r/   r%   r%   r3   _cfg7   s   rD   ztimm/)	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 d| 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.   Nr%   r4   r,   r/   r.   r2   r%   r%   r3   rR   K   s   

rR   c                 K   sD   dgg dg dg dg dg ddgg}t d| d|d	|}|S )z hardcorenas_B rG   )rH   rI   ir_r1_k3_s1_e3_c24_nre)rJ   ir_r1_k5_s1_e3_c40_nrerW   )ir_r1_k5_s2_e3_c80ir_r1_k5_s1_e3_c80ir_r1_k3_s1_e3_c80rZ   )ir_r1_k5_s1_e3_c112ir_r1_k3_s1_e3_c112r\   r\   rO   rP   zir_r1_k3_s1_e3_c192_se0.25rQ   hardcorenas_brS   Nr%   rT   rU   r%   r%   r3   r^   W   s   r^   c                 K   D   dgddgg dg dg dg ddgg}t d| d	|d
|}|S )z hardcorenas_C rG   rH   rI   )rJ   rW   rW   rW   )ir_r1_k5_s2_e4_c80rM   rZ   rZ   )rN   r\   r\   r\   r]   rQ   hardcorenas_crS   Nr%   rT   rU   r%   r%   r3   ra   e   s   
ra   c                 K   r_   )z hardcorenas_D rG   ir_r1_k5_s2_e3_c24_nre_se0.25rI   )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.25rf   rf   )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rO   rP   rP   ir_r1_k3_s1_e6_c192_se0.25rQ   hardcorenas_drS   Nr%   rT   rU   r%   r%   r3   rk   s      
rk   c                 K   sD   dgddgg dddgg dg dd	gg}t d| d
|d|}|S )z hardcorenas_E rG   rb   rI   )ir_r1_k5_s2_e6_c40_nre_se0.25rc   rc   rd   re   zir_r1_k3_s1_e6_c80_se0.25)rN   rN   rN   rh   ri   rQ   hardcorenas_erS   Nr%   rT   rU   r%   r%   r3   rn      s   
rn   c                 K   sD   dgddgddgg dg dg dd	gg}t d| d
|d|}|S )z hardcorenas_F rG   rb   rI   rm   rK   )rL   rM   rf   rf   )zir_r1_k3_s1_e6_c112_se0.25rN   rN   rg   )rO   rP   rj   rj   rQ   hardcorenas_frS   Nr%   rT   rU   r%   r%   r3   ro      rl   ro   )r5   )F)!	functoolsr   torch.nnr&   	timm.datar   r   _builderr   r   _efficientnet_blocksr	   _efficientnet_builderr
   r   r   r   	_registryr   r   mobilenetv3r   r   __all__r4   rD   default_cfgsrR   r^   ra   rk   rn   ro   r%   r%   r%   r3   <module>   s@    
'

