U
    ¯Ê¹jý„  ã                   @   s°  d Z ddlmZ ddlmZmZmZmZ ddlZddl	m
Z
 ddlm
  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mZmZmZmZ dd	lmZmZ dd
lm Z  ddl!m"Z"m#Z#m$Z$m%Z%m&Z&m'Z'm(Z(m)Z) ddl*m+Z+m,Z, ddl-m.Z. ddl/m0Z0m1Z1m2Z2 ddgZ3G dd„ de
j4ƒZ5G dd„ de
j4ƒZ6d{e7e8e5dœdd„Z9d|e7e:e8e5dœdd„Z;d}e7e:e8e5dœdd„Z<d~e7e:e8dœdd„Z=de7e:e8dœd d!„Z>d€e7e:e8dœd"d!„Z>d�e7d$œd%d&„Z?e0e?d#d$�e?d'd(d)d*�e?d+d,d-d.d/d0d)d1�e?d2d)d.d/d+d,d-d3d4�e?d5d)d'd6�e?d7d)d'd6�e?d8d)d'd6�e?d9d)d'd6�e?d:d)eed;�e?d<d)eed;�e?d=d)eed;�e?d>d)eed;�e?d?d)eed;�e?d@d)eed;�e?dAd)dBdCdD�e?dEd)dBdCdD�e?dFd)dGdHdCdIdJ�e?ƒ e?dKd)d'd6�e?dLd)d'd6�e?dMd)d'd6�e?ƒ dNœƒZ@e1d‚e8e5dOœdPdQ„ƒZAe1dƒe8e5dOœdRdS„ƒZBe1d„e8e5dOœdTdU„ƒZCe1d…e8e5dOœdVdW„ƒZDe1d†e8e5dOœdXdY„ƒZEe1d‡e8e5dOœdZd[„ƒZFe1dˆe8e5dOœd\d]„ƒZGe1d‰e8e5dOœd^d_„ƒZHe1dŠe8e5dOœd`da„ƒZIe1d‹e8e5dOœdbdc„ƒZJe1dŒe8e5dOœddde„ƒZKe1d�e8e5dOœdfdg„ƒZLe1dŽe8e5dOœdhdi„ƒZMe1d�e8e5dOœdjdk„ƒZNe1d�e8e5dOœdldm„ƒZOe1d‘e8e5dOœdndo„ƒZPe1d’e8e5dOœdpdq„ƒZQe1d“e8e5dOœdrds„ƒZRe1d”e8e5dOœdtdu„ƒZSe1d•e8e5dOœdvdw„ƒZTe2eUdxdydzœƒ dS )–z× MobileNet V3

A PyTorch impl of MobileNet-V3, compatible with TF weights from official impl.

Paper: Searching for MobileNetV3 - https://arxiv.org/abs/1905.02244

Hacked together by / Copyright 2019, Ross Wightman
é    )Úpartial)ÚCallableÚListÚOptionalÚTupleN)Ú
checkpoint)ÚIMAGENET_DEFAULT_MEANÚIMAGENET_DEFAULT_STDÚIMAGENET_INCEPTION_MEANÚIMAGENET_INCEPTION_STD)ÚSelectAdaptivePool2dÚLinearÚ	LayerTypeÚPadTypeÚcreate_conv2dÚget_norm_act_layeré   )Úbuild_model_with_cfgÚpretrained_cfg_for_features)ÚSqueezeExcite)Ú	BlockArgsÚEfficientNetBuilderÚdecode_arch_defÚefficientnet_init_weightsÚround_channelsÚresolve_bn_argsÚresolve_act_layerÚBN_EPS_TF_DEFAULT)ÚFeatureInfoÚFeatureHooks)Úcheckpoint_seq)Úgenerate_default_cfgsÚregister_modelÚregister_model_deprecationsÚMobileNetV3ÚMobileNetV3Featuresc                       s
  e Zd ZdZdddddddd	d	d	ded
d
dfeeeeeeeee	e
 e	e
 e	e
 eeeeedœ‡ fdd„Zdd„ Zejjd$edœdd„ƒZejjd%edœdd„ƒZejjdd„ ƒZd&eedœdd„Zejejdœdd„Zd'ejeejdœd d!„Zejejdœd"d#„Z‡  ZS )(r$   a‡   MobiletNet-V3

    Based on my EfficientNet implementation and building blocks, this model utilizes the MobileNet-v3 specific
    'efficient head', where global pooling is done before the head convolution without a final batch-norm
    layer before the classifier.

    Paper: `Searching for MobileNetV3` - https://arxiv.org/abs/1905.02244

    Other architectures utilizing MobileNet-V3 efficient head that are supported by this impl include:
      * HardCoRe-NAS - https://arxiv.org/abs/2102.11646 (defn in hardcorenas.py uses this class)
      * FBNet-V3 - https://arxiv.org/abs/2006.02049
      * LCNet - https://arxiv.org/abs/2109.15099
    éè  é   é   Fé   TÚ Nç        Úavg)Ú
block_argsÚnum_classesÚin_chansÚ	stem_sizeÚfix_stemÚnum_featuresÚ	head_biasÚpad_typeÚ	act_layerÚ
norm_layerÚse_layerÚse_from_expÚround_chs_fnÚ	drop_rateÚdrop_path_rateÚglobal_poolc              
      s2  t t| ƒ ¡  |	ptj}	|
p tj}
t|
|	ƒ}|p2t}|| _|| _	|| _
d| _|sX||ƒ}t||dd|d�| _||dd�| _td||||	|
||d�}tj|||ƒŽ | _|j| _|j}t|d	�| _|| j ¡  }t|| j	d
||d�| _|	dd�| _|rüt d
¡nt ¡ | _|dk�rt| j	|ƒnt ¡ | _t| ƒ dS )aG  
        Args:
            block_args: Arguments for blocks of the network.
            num_classes: Number of classes for classification head.
            in_chans: Number of input image channels.
            stem_size: Number of output channels of the initial stem convolution.
            fix_stem: If True, don't scale stem by round_chs_fn.
            num_features: Number of output channels of the conv head layer.
            head_bias: If True, add a learnable bias to the conv head layer.
            pad_type: Type of padding to use for convolution layers.
            act_layer: Type of activation layer.
            norm_layer: Type of normalization layer.
            se_layer: Type of Squeeze-and-Excite layer.
            se_from_exp: If True, calculate SE channel reduction from expanded mid channels.
            round_chs_fn: Callable to round number of filters based on depth multiplier.
            drop_rate: Dropout rate.
            drop_path_rate: Stochastic depth rate.
            global_pool: Type of pooling to use for global pooling features of the FC head.
        Fr'   é   ©ZstrideÚpaddingT©Zinplaceé    )Úoutput_strider4   r9   r8   r5   r6   r7   r;   ©Z	pool_typer   )r?   Zbiasr   N) Úsuperr$   Ú__init__ÚnnÚReLUÚBatchNorm2dr   r   r.   r2   r:   Úgrad_checkpointingr   Ú	conv_stemÚbn1r   Ú
SequentialÚblocksÚfeaturesÚfeature_infoZin_chsr   r<   Z	feat_multÚ	conv_headÚact2ÚFlattenÚIdentityÚflattenr   Ú
classifierr   )Úselfr-   r.   r/   r0   r1   r2   r3   r4   r5   r6   r7   r8   r9   r:   r;   r<   Znorm_act_layerÚbuilderZhead_chsZnum_pooled_chs©Ú	__class__© úV/var/www/html/bwave/python/venv/lib/python3.8/site-packages/timm/models/mobilenetv3.pyrE   -   sB    &


ø
 zMobileNetV3.__init__c                 C   sV   | j | jg}| | j¡ | | j| j| jg¡ | t ¡ t 	| j
¡| jg¡ tj|Ž S ©N)rJ   rK   ÚextendrM   r<   rP   rQ   rF   rR   ZDropoutr:   rU   rL   )rV   ZlayersrZ   rZ   r[   Úas_sequential|   s
    zMobileNetV3.as_sequential)Úcoarsec                 C   s   t d|rdndd�S )Nz^conv_stem|bn1z^blocks\.(\d+)z^blocks\.(\d+)\.(\d+))ÚstemrM   )Údict)rV   r_   rZ   rZ   r[   Úgroup_matcherƒ   s    
þzMobileNetV3.group_matcher©Úenablec                 C   s
   || _ d S r\   ©rI   ©rV   rd   rZ   rZ   r[   Úset_grad_checkpointingŠ   s    z"MobileNetV3.set_grad_checkpointingc                 C   s   | j S r\   )rU   )rV   rZ   rZ   r[   Úget_classifierŽ   s    zMobileNetV3.get_classifier)r.   r<   c                 C   sL   || _ t|d�| _|r t d¡nt ¡ | _|dkr>t| j|ƒnt ¡ | _	d S )NrC   r   r   )
r.   r   r<   rF   rR   rS   rT   r   r2   rU   )rV   r.   r<   rZ   rZ   r[   Úreset_classifier’   s    zMobileNetV3.reset_classifier©ÚxÚreturnc                 C   sD   |   |¡}|  |¡}| jr6tj ¡ s6t| j|dd�}n
|  |¡}|S )NT)rT   )rJ   rK   rI   ÚtorchÚjitÚis_scriptingr    rM   ©rV   rk   rZ   rZ   r[   Úforward_features™   s    


zMobileNetV3.forward_features)rk   Ú
pre_logitsrl   c                 C   sX   |   |¡}|  |¡}|  |¡}|  |¡}|r0|S | jdkrNtj|| j| jd�}|  |¡S )Nr+   )ÚpÚtraining)	r<   rP   rQ   rT   r:   ÚFZdropoutrt   rU   )rV   rk   rr   rZ   rZ   r[   Úforward_head¢   s    




zMobileNetV3.forward_headc                 C   s   |   |¡}|  |¡}|S r\   )rq   rv   rp   rZ   rZ   r[   Úforward­   s    

zMobileNetV3.forward)F)T)r,   )F)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   ÚintÚboolr   r   r   r   ÚfloatÚstrrE   r^   rm   rn   Úignorerb   rg   rh   ri   ÚTensorrq   rv   rw   Ú__classcell__rZ   rZ   rX   r[   r$      sZ   ïïO
	c                       s¤   e Zd ZdZddddddded	d
d
d
ddfeeedf eeee	ee
ee	ee ee ee eedœ‡ fdd„Zejjde	dœdd„ƒZejeej dœdd„Z‡  ZS )r%   z­ MobileNetV3 Feature Extractor

    A work-in-progress feature extraction module for MobileNet-V3 to use as a backbone for segmentation
    and object detection models.
    )r   r   r=   r'   é   Ú
bottleneckr'   r(   FrA   r*   TNr+   .)r-   Úout_indicesÚfeature_locationr/   r0   r1   rB   r4   r9   r8   r5   r6   r7   r:   r;   c                    sô   t t| ƒ ¡  |ptj}|p tj}|p(t}|| _d| _|sB|	|ƒ}t	||dd|d�| _
||ƒ| _|dd�| _t|||	|
|||||d�	}tj|||ƒŽ | _t|j|ƒ| _dd	„ | j ¡ D ƒ| _t| ƒ d
| _|dkrð| jjdd�}t||  ¡ ƒ| _d
S )añ  
        Args:
            block_args: Arguments for blocks of the network.
            out_indices: Output from stages at indices.
            feature_location: Location of feature before/after each block, must be in ['bottleneck', 'expansion']
            in_chans: Number of input image channels.
            stem_size: Number of output channels of the initial stem convolution.
            fix_stem: If True, don't scale stem by round_chs_fn.
            output_stride: Output stride of the network.
            pad_type: Type of padding to use for convolution layers.
            round_chs_fn: Callable to round number of filters based on depth multiplier.
            se_from_exp: If True, calculate SE channel reduction from expanded mid channels.
            act_layer: Type of activation layer.
            norm_layer: Type of normalization layer.
            se_layer: Type of Squeeze-and-Excite layer.
            drop_rate: Dropout rate.
            drop_path_rate: Stochastic depth rate.
        Fr'   r=   r>   Tr@   )	rB   r4   r9   r8   r5   r6   r7   r;   r†   c                 S   s   i | ]}|d  |d “qS )ZstageÚindexrZ   )Ú.0ÚfrZ   rZ   r[   Ú
<dictcomp>ú   s      z0MobileNetV3Features.__init__.<locals>.<dictcomp>Nr„   )ÚmoduleZ	hook_type)Úkeys)rD   r%   rE   rF   rG   rH   r   r:   rI   r   rJ   rK   Úact1r   rL   rM   r   rN   rO   Z	get_dictsÚ_stage_out_idxr   Úfeature_hooksr   Znamed_modules)rV   r-   r…   r†   r/   r0   r1   rB   r4   r9   r8   r5   r6   r7   r:   r;   rW   ÚhooksrX   rZ   r[   rE   º   s<    $


÷zMobileNetV3Features.__init__rc   c                 C   s
   || _ d S r\   re   rf   rZ   rZ   r[   rg     s    z*MobileNetV3Features.set_grad_checkpointingrj   c                 C   s¼   |   |¡}|  |¡}|  |¡}| jd kr”g }d| jkr@| |¡ t| jƒD ]D\}}| jrnt	j
 ¡ snt||ƒ}n||ƒ}|d | jkrJ| |¡ qJ|S |  |¡ | j |j¡}t| ¡ ƒS d S )Nr   r   )rJ   rK   r�   r�   rŽ   ÚappendÚ	enumeraterM   rI   rm   rn   ro   r   Z
get_outputZdeviceÚlistÚvalues)rV   rk   rN   ÚiÚbÚoutrZ   rZ   r[   rw     s"    






zMobileNetV3Features.forward)T)rx   ry   rz   r{   r   r   r   r|   r   r}   r   r   r   r   r~   rE   rm   rn   r€   rg   r�   r   rw   r‚   rZ   rZ   rX   r[   r%   ³   sF   	ð
ðJF)ÚvariantÚ
pretrainedrl   c                 K   sn   d}t }d }| dd¡r2d|kr&d}nd}t}d}t|| |f|dk|dk|dœ|—Ž}|dkrjt|jƒ|_|S )	Nr*   Úfeatures_onlyFZfeature_cfgÚcfg)r.   r2   Z	head_convr3   r<   Úcls)rš   Zpretrained_strictÚkwargs_filter)r$   Úpopr%   r   r   Zdefault_cfg)r˜   r™   ÚkwargsZfeatures_modeZ	model_clsr�   ÚmodelrZ   rZ   r[   Ú_create_mnv3  s.    ýúù	r¡   ç      ð?)r˜   Úchannel_multiplierr™   rl   c                 K   s|   dgddgdgdddgdgd	gd
gg}t f t|ƒdtt|d�ttjft|ƒŽt|dƒttdd�dœ|—Ž}t	| |f|Ž}|S )ú°Creates a MobileNet-V3 model.

    Ref impl: ?
    Paper: https://arxiv.org/abs/1905.02244

    Args:
      channel_multiplier: multiplier to number of channels per layer.
    Zds_r1_k3_s1_e1_c16_nre_noskipÚir_r1_k3_s2_e4_c24_nreÚir_r1_k3_s1_e3_c24_nreúir_r3_k5_s2_e3_c40_se0.25_nreÚir_r1_k3_s2_e6_c80úir_r1_k3_s1_e2.5_c80úir_r2_k3_s1_e2.3_c80úir_r2_k3_s1_e6_c112_se0.25úir_r3_k5_s2_e6_c160_se0.25Úcn_r1_k1_s1_c960F©Ú
multiplierÚ
hard_swishÚhard_sigmoid)Ú
gate_layer)r-   r3   r9   r6   r5   r7   )
ra   r   r   r   rF   rH   r   r   r   r¡   ©r˜   r£   r™   rŸ   Úarch_defÚmodel_kwargsr    rZ   rZ   r[   Ú_gen_mobilenet_v3_rw8  s(    ò

úù	r¶   c           
      K   s<  d| krld}d| kr@t |dƒ}dgddgdd	gd
gdgdgg}qÚt |dƒ}dgddgddgdgdgdgg}nnd}d| krªt |dƒ}dgddgdgdddgdgdgdgg}n0t |dƒ}d gd!d"gd#gdddgd$gd%gdgg}ttd&tjtd'�}tf t|ƒ|d(|d)k tt|d*�ttjft	|ƒŽ||d+œ|—Ž}t
| |f|Ž}	|	S ),r¤   Zsmalli   ZminimalZreluZds_r1_k3_s2_e1_c16zir_r1_k3_s2_e4.5_c24zir_r1_k3_s1_e3.67_c24Zir_r1_k3_s2_e4_c40Zir_r2_k3_s1_e6_c40Zir_r2_k3_s1_e3_c48Zir_r3_k3_s2_e6_c96Zcn_r1_k1_s1_c576r°   zds_r1_k3_s2_e1_c16_se0.25_nrezir_r1_k3_s2_e4.5_c24_nrezir_r1_k3_s1_e3.67_c24_nreúir_r1_k5_s2_e4_c40_se0.25zir_r2_k5_s1_e6_c40_se0.25zir_r2_k5_s1_e3_c48_se0.25zir_r3_k5_s2_e6_c96_se0.25r)   Zds_r1_k3_s1_e1_c16Zir_r1_k3_s2_e4_c24Zir_r1_k3_s1_e3_c24Zir_r3_k3_s2_e3_c40r¨   r©   rª   Zir_r2_k3_s1_e6_c112Zir_r3_k3_s2_e6_c160r­   Zds_r1_k3_s1_e1_c16_nrer¥   r¦   r§   r«   r¬   r±   )r²   Úforce_act_layerÚrd_round_fnr(   ç      è?r®   )r-   r2   r0   r1   r9   r6   r5   r7   )r   r   r   rF   rG   r   ra   r   rH   r   r¡   )
r˜   r£   r™   rŸ   r2   r5   r´   r7   rµ   r    rZ   rZ   r[   Ú_gen_mobilenet_v3^  sl    	
ô
ô
ò
ò
ø	÷r»   )r˜   r£   r™   c                 K   s,  |   d¡d }|dkrHd}dgddgdd	gd
dgddgdddgdgg}nx|dkr‚d}dgddgddgddgddgdddgdgg}n>|dkr¼d }d!gd"d#gd$d%gd&d'gd(d)gd*d+d,gd-gg}nt‚tt|d.d/�}ttd0|d1�}t|d2ƒ}	tf t|ƒd3d4||d4ttj	ft
|ƒŽ|	|d5œ	|—Ž}
t| |f|
Ž}|S )6zÕ FBNetV3
    Paper: `FBNetV3: Joint Architecture-Recipe Search using Predictor Pretraining`
        - https://arxiv.org/abs/2006.02049
    FIXME untested, this is a preliminary impl of some FBNet-V3 variants.
    Ú_éÿÿÿÿ)Úar–   r(   Zds_r2_k3_s1_e1_c16Zir_r1_k5_s2_e4_c24Zir_r3_k5_s1_e2_c24zir_r1_k5_s2_e5_c40_se0.25zir_r4_k5_s1_e3_c40_se0.25Zir_r1_k5_s2_e5_c72Zir_r4_k3_s1_e3_c72zir_r1_k3_s1_e5_c120_se0.25zir_r5_k5_s1_e3_c120_se0.25zir_r1_k3_s2_e6_c184_se0.25zir_r5_k5_s1_e4_c184_se0.25zir_r1_k5_s1_e6_c224_se0.25Zcn_r1_k1_s1_c1344Údé   Zir_r1_k3_s2_e5_c24Zir_r5_k3_s1_e2_c24r·   zir_r4_k3_s1_e3_c40_se0.25Zir_r1_k3_s2_e5_c72zir_r1_k3_s1_e5_c128_se0.25zir_r6_k5_s1_e3_c128_se0.25zir_r1_k3_s2_e6_c208_se0.25zir_r5_k5_s1_e5_c208_se0.25zir_r1_k5_s1_e6_c240_se0.25Zcn_r1_k1_s1_c1440ÚgrA   Zds_r3_k3_s1_e1_c24Zir_r1_k5_s2_e4_c40Zir_r4_k5_s1_e2_c40zir_r1_k5_s2_e4_c56_se0.25zir_r4_k5_s1_e3_c56_se0.25Zir_r1_k5_s2_e5_c104Zir_r4_k3_s1_e3_c104zir_r1_k3_s1_e5_c160_se0.25zir_r8_k5_s1_e3_c160_se0.25zir_r1_k3_s2_e6_c264_se0.25zir_r6_k5_s1_e5_c264_se0.25zir_r2_k5_s1_e6_c288_se0.25Zcn_r1_k1_s1_c1728çffffffî?)r¯   Zround_limitr±   )r²   r¹   r°   iÀ  F)	r-   r2   r3   r0   r9   r8   r6   r5   r7   )ÚsplitÚNotImplementedr   r   r   r   ra   r   rF   rH   r   r¡   )r˜   r£   r™   rŸ   Zvlr0   r´   r9   r7   r5   rµ   r    rZ   rZ   r[   Ú_gen_fbnetv3¿  sd    ù	ù	ù

÷
örÅ   c                 K   sz   dgdgdgddgdgdgg}t f t|ƒdtt|d	�ttjft|ƒŽt|d
ƒttdtj	d�ddœ|—Ž}t
| |f|Ž}|S ©a   LCNet
    Essentially a MobileNet-V3 crossed with a MobileNet-V1

    Paper: `PP-LCNet: A Lightweight CPU Convolutional Neural Network` - https://arxiv.org/abs/2109.15099

    Args:
      channel_multiplier: multiplier to number of channels per layer.
    Zdsa_r1_k3_s1_c32Zdsa_r2_k3_s2_c64Zdsa_r2_k3_s2_c128Zdsa_r1_k3_s2_c256Zdsa_r1_k5_s1_c256Zdsa_r4_k5_s1_c256zdsa_r2_k5_s2_c512_se0.25r(   r®   r°   r±   )r²   r¸   r)   )r-   r0   r9   r6   r5   r7   r2   ©ra   r   r   r   rF   rH   r   r   r   rG   r¡   r³   rZ   rZ   r[   Ú
_gen_lcnetü  s(    ô
ùø
rÈ   c                 K   sz   dgdgdgddgdgdgg}t f t|ƒdtt|d	�ttjft|ƒŽt|d
ƒttdtj	d�ddœ|—Ž}t
| |f|Ž}|S rÆ   rÇ   r³   rZ   rZ   r[   rÈ   "  s(    ô
ùø
r*   )Úurlc                 K   s   | dddddt tdddœ
|–S )	Nr&   )r'   éà   rÊ   )é   rË   g      ì?ÚbilinearrJ   rU   )
rÉ   r.   Ú
input_sizeÚ	pool_sizeÚcrop_pctÚinterpolationÚmeanÚstdZ
first_convrU   )r   r	   )rÉ   rŸ   rZ   rZ   r[   Ú_cfgH  s          üûrÓ   Zbicubiczvhttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-weights/mobilenetv3_large_100_ra-f55367f5.pthztimm/)rÐ   rÉ   Ú	hf_hub_idrÌ   )r+   r+   r+   )r¢   r¢   r¢   z+https://github.com/Alibaba-MIIL/ImageNet21KzarXiv:2104.10972v4z€https://github.com/rwightman/pytorch-image-models/releases/download/v0.1-tresnet/mobilenetv3_large_100_1k_miil_78_0-66471c13.pth)rÐ   rÑ   rÒ   Ú
origin_urlÚ	paper_idsrÉ   rÔ   z~https://github.com/rwightman/pytorch-image-models/releases/download/v0.1-tresnet/mobilenetv3_large_100_in21k_miil-d71cc17b.pthiÕ+  )rÉ   rÔ   rÕ   rÖ   rÐ   rÑ   rÒ   r.   zyhttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-weights/mobilenetv3_small_050_lambc-4b7bbe87.pth)rÉ   rÔ   rÐ   zyhttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-weights/mobilenetv3_small_075_lambc-384766db.pthzxhttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-weights/mobilenetv3_small_100_lamb-266a294c.pthzmhttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-weights/mobilenetv3_100-35495452.pthzvhttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-weights/tf_mobilenetv3_large_075-150ee8b0.pth)rÉ   rÔ   rÑ   rÒ   zvhttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-weights/tf_mobilenetv3_large_100-427764d5.pthz~https://github.com/rwightman/pytorch-image-models/releases/download/v0.1-weights/tf_mobilenetv3_large_minimal_100-8596ae28.pthzvhttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-weights/tf_mobilenetv3_small_075-da427f52.pthzvhttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-weights/tf_mobilenetv3_small_100-37f49e2b.pthz~https://github.com/rwightman/pytorch-image-models/releases/download/v0.1-weights/tf_mobilenetv3_small_minimal_100-922a7843.pthzkhttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-weights/fbnetv3_b_224-ead5d2a1.pth)r'   é   r×   rÂ   )rÉ   rÔ   Útest_input_sizerÏ   zkhttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-weights/fbnetv3_d_224-c98bce42.pthzkhttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-weights/fbnetv3_g_240-0b1df83b.pth)r'   éð   rÙ   )r'   é   rÚ   )é   rÛ   )rÉ   rÔ   rÍ   rØ   rÏ   rÎ   zghttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-weights/lcnet_050-f447553b.pthzghttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-weights/lcnet_075-318cad2c.pthzghttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-weights/lcnet_100-a929038c.pth)zmobilenetv3_large_075.untrainedzmobilenetv3_large_100.ra_in1kú(mobilenetv3_large_100.miil_in21k_ft_in1kú mobilenetv3_large_100.miil_in21kzmobilenetv3_small_050.lamb_in1kzmobilenetv3_small_075.lamb_in1kzmobilenetv3_small_100.lamb_in1kzmobilenetv3_rw.rmsp_in1kztf_mobilenetv3_large_075.in1kztf_mobilenetv3_large_100.in1kz%tf_mobilenetv3_large_minimal_100.in1kztf_mobilenetv3_small_075.in1kztf_mobilenetv3_small_100.in1kz%tf_mobilenetv3_small_minimal_100.in1kzfbnetv3_b.ra2_in1kzfbnetv3_d.ra2_in1kzfbnetv3_g.ra2_in1kzlcnet_035.untrainedzlcnet_050.ra2_in1kzlcnet_075.ra2_in1kzlcnet_100.ra2_in1kzlcnet_150.untrained)r™   rl   c                 K   s   t dd| i|—Ž}|S )ú MobileNet V3 Úmobilenetv3_large_075rº   r™   )rß   rº   ©r»   ©r™   rŸ   r    rZ   rZ   r[   rß   ±  s    rß   c                 K   s   t dd| i|—Ž}|S )rÞ   Úmobilenetv3_large_100r¢   r™   )râ   r¢   rà   rá   rZ   rZ   r[   râ   ¸  s    râ   c                 K   s   t dd| i|—Ž}|S )rÞ   Úmobilenetv3_small_050ç      à?r™   )rã   rä   rà   rá   rZ   rZ   r[   rã   ¿  s    rã   c                 K   s   t dd| i|—Ž}|S )rÞ   Úmobilenetv3_small_075rº   r™   )rå   rº   rà   rá   rZ   rZ   r[   rå   Æ  s    rå   c                 K   s   t dd| i|—Ž}|S )rÞ   Úmobilenetv3_small_100r¢   r™   )ræ   r¢   rà   rá   rZ   rZ   r[   ræ   Í  s    ræ   c                 K   s"   |  dt¡ tdd| i|—Ž}|S )rÞ   Úbn_epsÚmobilenetv3_rwr¢   r™   )rè   r¢   )Ú
setdefaultr   r¶   rá   rZ   rZ   r[   rè   Ô  s    rè   c                 K   s.   |  dt¡ |  dd¡ tdd| i|—Ž}|S )rÞ   rç   r4   ÚsameÚtf_mobilenetv3_large_075rº   r™   )rë   rº   ©ré   r   r»   rá   rZ   rZ   r[   rë   Ü  s    rë   c                 K   s.   |  dt¡ |  dd¡ tdd| i|—Ž}|S )rÞ   rç   r4   rê   Útf_mobilenetv3_large_100r¢   r™   )rí   r¢   rì   rá   rZ   rZ   r[   rí   å  s    rí   c                 K   s.   |  dt¡ |  dd¡ tdd| i|—Ž}|S )rÞ   rç   r4   rê   Ú tf_mobilenetv3_large_minimal_100r¢   r™   )rî   r¢   rì   rá   rZ   rZ   r[   rî   î  s    rî   c                 K   s.   |  dt¡ |  dd¡ tdd| i|—Ž}|S )rÞ   rç   r4   rê   Útf_mobilenetv3_small_075rº   r™   )rï   rº   rì   rá   rZ   rZ   r[   rï   ÷  s    rï   c                 K   s.   |  dt¡ |  dd¡ tdd| i|—Ž}|S )rÞ   rç   r4   rê   Útf_mobilenetv3_small_100r¢   r™   )rð   r¢   rì   rá   rZ   rZ   r[   rð      s    rð   c                 K   s.   |  dt¡ |  dd¡ tdd| i|—Ž}|S )rÞ   rç   r4   rê   Ú tf_mobilenetv3_small_minimal_100r¢   r™   )rñ   r¢   rì   rá   rZ   rZ   r[   rñ   	  s    rñ   c                 K   s   t dd| i|—Ž}|S )z FBNetV3-B Ú	fbnetv3_br™   )rò   ©rÅ   rá   rZ   rZ   r[   rò     s    rò   c                 K   s   t dd| i|—Ž}|S )z FBNetV3-D Ú	fbnetv3_dr™   )rô   ró   rá   rZ   rZ   r[   rô     s    rô   c                 K   s   t dd| i|—Ž}|S )z FBNetV3-G Ú	fbnetv3_gr™   )rõ   ró   rá   rZ   rZ   r[   rõ      s    rõ   c                 K   s   t dd| i|—Ž}|S )z PP-LCNet 0.35Ú	lcnet_035çffffffÖ?r™   )rö   r÷   ©rÈ   rá   rZ   rZ   r[   rö   '  s    rö   c                 K   s   t dd| i|—Ž}|S )z PP-LCNet 0.5Ú	lcnet_050rä   r™   )rù   rä   rø   rá   rZ   rZ   r[   rù   .  s    rù   c                 K   s   t dd| i|—Ž}|S )ú PP-LCNet 1.0Ú	lcnet_075rº   r™   )rû   rº   rø   rá   rZ   rZ   r[   rû   5  s    rû   c                 K   s   t dd| i|—Ž}|S )rú   Ú	lcnet_100r¢   r™   )rü   r¢   rø   rá   rZ   rZ   r[   rü   <  s    rü   c                 K   s   t dd| i|—Ž}|S )z PP-LCNet 1.5Ú	lcnet_150ç      ø?r™   )rý   rþ   rø   rá   rZ   rZ   r[   rý   C  s    rý   rÜ   rÝ   )Zmobilenetv3_large_100_miilZ mobilenetv3_large_100_miil_in21k)F)r¢   F)r¢   F)r¢   F)r¢   F)r¢   F)r*   )F)F)F)F)F)F)F)F)F)F)F)F)F)F)F)F)F)F)F)F)Vr{   Ú	functoolsr   Útypingr   r   r   r   rm   Ztorch.nnrF   Ztorch.nn.functionalZ
functionalru   Ztorch.utils.checkpointr   Z	timm.datar   r	   r
   r   Ztimm.layersr   r   r   r   r   r   Z_builderr   r   Z_efficientnet_blocksr   Z_efficientnet_builderr   r   r   r   r   r   r   r   Z	_featuresr   r   Z_manipulater    Ú	_registryr!   r"   r#   Ú__all__ÚModuler$   r%   r   r}   r¡   r~   r¶   r»   rÅ   rÈ   rÓ   Zdefault_cfgsrß   râ   rã   rå   ræ   rè   rë   rí   rî   rï   rð   rñ   rò   rô   rõ   rö   rù   rû   rü   rý   rx   rZ   rZ   rZ   r[   Ú<module>   sz   ( k&a=&&
ý  û   ûýýýý ý ý ý ý ý ý ý ý   ýýýý¥_þ