
    kh              
          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 ZddZ e ed       ed       ed       ed       ed       ed      d      Zeddefd       Zeddefd       Zeddefd       Zeddefd       Zeddefd       Zeddefd       Z y)    )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                    d}t        t        dt        j                  t              }t        dt        |      |dt        t        j                  fi t        |      t        |d      |d|}d}t        }d}	|j                  d	d      r
d
}d}	t        }t        ||| f| |	d|}
|rt        |
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&   models              S/var/www/teggl/fontify/venv/lib/python3.12/site-packages/timm/models/hardcorenas.py_gen_hardcorenasr6      s     L}QSQXQXftuH "8,!2>>E_V-DE#FL9 L MIM/o'	  ,+# E 78I8IJL    c                 0    | dddddt         t        ddd
|S )	Ni  )      r:   )   r;   g      ?bilinear	conv_stem
classifier)
urlr!   
input_size	pool_sizecrop_pctinterpolationmeanstd
first_convr>   r   )r?   r1   s     r5   _cfgrG   7   s0    4}SYJ%.B!	
  r7   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_in1kreturnc                 N    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/   r0   r'   r6   r.   r1   r0   r4   s       r5   rV   rV   K   sd     **-EGf,g)+JK,.IJ-/KL-/KLOaNb	dH
 i
OV^ibhiELr7   c                 N    dgg dg dg dg dg ddgg}t        d
| d|d	|}|S )z hardcorenas_B rK   )rL   rM   ir_r1_k3_s1_e3_c24_nre)rN   ir_r1_k5_s1_e3_c40_nrer\   )ir_r1_k5_s2_e3_c80ir_r1_k5_s1_e3_c80ir_r1_k3_s1_e3_c80r_   )ir_r1_k5_s1_e3_c112ir_r1_k3_s1_e3_c112ra   ra   rS   rT   zir_r1_k3_s1_e3_c192_se0.25rU   hardcorenas_brW   r'   rX   rY   s       r5   rc   rc   W   sE     **e^hlj#$&H i
OV^ibhiELr7   c                 N    dgddgg dg dg dg ddgg}t        d| d	|d
|}|S )z hardcorenas_C rK   rL   rM   )rN   r\   r\   r\   )ir_r1_k5_s2_e4_c80rQ   r_   r_   )rR   ra   ra   ra   rb   rU   hardcorenas_crW   r'   rX   rY   s       r5   rf   rf   e   sM     **-EGf,g+osj#$&H i
OV^ibhiELr7   c                 N    dgddgg dg dg dg ddgg}t        d| d	|d
|}|S )z hardcorenas_D rK   ir_r1_k5_s2_e3_c24_nre_se0.25rM   )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.25rl   rl   )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rS   rT   rT   ir_r1_k3_s1_e6_c192_se0.25rU   hardcorenas_drW   r'   rX   rY   s       r5   rq   rq   s   sR     **-LNm,ns.//1C0DFH i
OV^ibhiELr7   c                 N    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 rK   rh   rM   )ir_r1_k5_s2_e6_c40_nre_se0.25ri   ri   rj   rk   zir_r1_k3_s1_e6_c80_se0.25)rR   rR   rR   rn   ro   rU   hardcorenas_erW   r'   rX   rY   s       r5   rt   rt      sX     **-LNm,n24OQl3m//1C0DFH i
OV^ibhiELr7   c                 N    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 rK   rh   rM   rs   rO   )rP   rQ   rl   rl   )zir_r1_k3_s1_e6_c112_se0.25rR   rR   rm   )rS   rT   rp   rp   rU   hardcorenas_frW   r'   rX   rY   s       r5   rv   rv      sX     **-LNm,n02QR.//1C0DFH i
OV^ibhiELr7   ) )F)!	functoolsr   torch.nnr(   	timm.datar   r   _builderr   r	   _efficientnet_blocksr
   _efficientnet_builderr   r   r   r   	_registryr   r   mobilenetv3r   r   __all__r6   rG   default_cfgsrV   rc   rf   rq   rt   rv   r'   r7   r5   <module>r      s     A * 1 / f f < 9
$N %%)G%<%)G%<%)G%<%)G%<%)G%<%)G%<&     
 
 
 
 
 
    
 
 
   r7   