o
    پiJ                    @   s  d Z ddlmZ ddlmZmZ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mZmZmZ ddl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"m#Z#m$Z$m%Z%m&Z&m'Z'm(Z(m)Z)m*Z* ddl+m,Z,m-Z-m.Z. ddl/m0Z0m1Z1 ddl2m3Z3m4Z4m5Z5 ddgZ6G dd dej7Z8G dd dej7Z9dddZ:dddZ;dddZ<dddZ=		dddZ>		dddZ?dd d!Z@dd"d#ZA	$	dd%d&ZB	dd'd(ZC	dd)d*ZDdd+d,ZE	dd-d.ZF	dd/d0ZG	dd1d2ZH	dd3d4ZI	dd5d6ZJ	$	dd7d8ZKdd9d:ZLdd;d<ZMdd=d>ZNdd?d@ZOddAdBZPddDdEZQe3i dFeQ dGeQ dHeQdIdJdKdLeQ dMeQ dNeQdOdJdKdPeQdQdJdKdReQ dSeQdTdJdKdUeQdJeedVdWdXdYeQdJeedVdWdXdZeQdJeed[dVdd\d]eQ d^eQd_dJd`dadbeQ dceQdddJdKdeeQdfdJdKi dgeQdhdJdKdieQdjdJdKdkeQdldJdmdadneQdodJdmdadpeQdqdJdKdreQdJeed[dVdd\dseQdJeedtd[dudvddwdxeQdydJdVddzd{eQd|dJdVdudvdd}d~eQddJdvdddd}deQddJddddd}deQdJddddddeQdJdddWdddeQdCdddddeQdCdddddeQdCdddddeQdCddddi deQ deQ deQ deQdvdddddeQdvdddddeQ deQddJdKdeQddJdtdudddeQddJdddddeQddJdKdeQddJdddddeQ deQ deQdtdudddeQddJdKdeQdtdudddeQddddi deQdddddeQdddddeQddJdtdudeedǍdeQddJdddeedǍdeQddJdddeedǍdeQddJddvdddЍdeQddJddvdddЍdeQddJdvddddЍdeQddJdddddЍdeQdvdddd؍deQddddd؍deQddddd؍deQddddd؍deQddJdddeQddJdtdudddeQddJdddddeQddJddddi deQddJdddddeQddJdddddeQddJdddddeQddJdddddeQddJdddddeQddJdddddeQddJeedddeQddJeedtdudddeQd dJeedddddeQddJeedddddeQddJeedddddeQddJeedddddeQddJeeddddd	eQd
dJeedddddeQddJeedddddeQddJdddddeQddJddddi deQddJdddddeQddJdddeQddJdtdudddeQddJdddddeQddJdddddeQddJdddddeQddJdddddeQd dJddddd!eQd"dJddddd#eQd$dJddd%eQd&dJdtduddd'eQd(dJddddd)eQd*dJddddd+eQd,dJddddd-eQd.dJddddd/eQd0dJd1d1ddd2eQd3dJd1d1dtduddi d4eQd5dJd1d1ddddd6eQd7dJeed8d9eQd:dJeed8d;eQd<dJeedtduddd=eQd>dJd1d1d`d?d@eQdAdJd1d1dtdudd`dBdCeQdDdJd1d1dddd`dBdEeQdFdJd1d1ddddmdBdGeQdHdJd1d1ddÐdIdmdBdJeQdKdJd1d1dddddLdMeQdNdJd1d1ddddddO	dPeQdQdJd1d1ddddddO	dReQdSdJd1d1ddddddO	dTeQdUdJd1d1dddddLdVeQdWdJd1d1ddddddO	dXeQdYdJd1d1ddddddO	dZeQd[dJd1d1d\ddddd]	i d^eQd_dJd1d1d\dddddd`
daeQdbdJd1d1d\dddddd`
dceQdddJd1d1d\dddddd`
deeQdfdJdgdΐdhdidjeQdkdJdgdtdhddЍdleQdmdJdnddddЍdoeQdJeedtddud[ddpdqeQdrdJdtdduddЍdseQdJeed\dtdduddtdueQdvdJdKdweQdxdJdKdyeQdzdJdKd{eQd|dJdKd}eQ d~eQddJdKdeQddJdKdeQddJdKeQdgdhddJdeQddhddJdeQddhddJdeQddddJdeQddddJdeQdd[deQdd[deQdd[deQdJeed[dVdWd\eQdd[deQdJdddWdeQdJdddWdeQdJd1d1dddWdeQdJd1d1dddWddZRe4dde8fddZSe4dde8fddZTe4dde8fddZUe4dde8fddZVe4dde8fddZWe4dde8fddZXe4dde8fddZYe4dde8fddZZe4dde8fddZ[e4dde8fddZ\e4dde8fddZ]e4dde8fddZ^e4dde8fddZ_e4dde8fddZ`e4dde8fddZae4dde8fddZbe4dde8fddZce4dde8fddZde4dde8fddZee4dde8fddZfe4dde8fddZge4dde8fddZhe4dde8fddÄZie4dde8fdĐdńZje4dde8fdƐdǄZke4dde8fdȐdɄZle4dde8fdʐd˄Zme4dde8fd̐d̈́Zne4dde8fdΐdτZoe4dde8fdАdфZpe4dde8fdҐdӄZqe4dde8fdԐdՄZre4dde8fd֐dׄZse4dde8fdؐdلZte4dde8fdڐdۄZue4dde8fdܐd݄Zve4dde8fdސd߄Zwe4dde8fddZxe4dde8fddZye4dde8fddZze4dde8fddZ{e4dde8fddZ|e4dde8fddZ}e4dde8fddZ~e4dde8fddZe4dde8fddZe4dde8fddZe4dde8fddZe4dde8fddZe4dde8fddZe4dde8fddZe4dde8fddZe4dde8fddZe4dde8fd dZe4dde8fddZe4dde8fddZe4dde8fddZe4dde8fdd	Ze4dde8fd
dZe4dde8fddZe4dde8fddZe4dde8fddZe4dde8fddZe4dde8fddZe4dde8fddZe4dde8fddZe4dde8fddZe4dde8fddZe4dde8fddZe4dde8fd d!Ze4dde8fd"d#Ze4dde8fd$d%Ze4dde8fd&d'Ze4dde8fd(d)Ze4dde8fd*d+Ze4dde8fd,d-Ze4dde8fd.d/Ze4dde8fd0d1Ze4dde8fd2d3Ze4dde8fd4d5Ze4dde8fd6d7Ze4dde8fd8d9Ze4dde8fd:d;Ze4dde8fd<d=Ze4dde8fd>d?Ze4dde8fd@dAZe4dde8fdBdCZe4dde8fdDdEZe4dde8fdFdGZe4dde8fdHdIZe4dde8fdJdKZe4dde8fdLdMZe4dde8fdNdOZe4dde8fdPdQZe4dde8fdRdSZe4dde8fdTdUZe4dde8fdVdWZe4dde8fdXdYZe4dde8fdZd[Ze4dde8fd\d]Ze4dde8fd^d_Ze4dde8fd`daZe4dde8fdbdcZe4dde8fdddeZe4dde8fdfdgZe4dde8fdhdiZe4dde8fdjdkZe4dde8fdldmZe4dde8fdndoZe4dde8fdpdqZe4dde8fdrdsZe4dde8fdtduZe4dde8fdvdwZe4dde8fdxdyZe4dde8fdzd{Ze5ei d|dd}dd~ddddddddddd	ddddޓdddddddddddddddddJdMdPdRdZd^dadcdŐdǐddd dS (  a   The EfficientNet Family in PyTorch

An implementation of EfficienNet that covers variety of related models with efficient architectures:

* EfficientNet-V2
  - `EfficientNetV2: Smaller Models and Faster Training` - https://arxiv.org/abs/2104.00298

* EfficientNet (B0-B8, L2 + Tensorflow pretrained AutoAug/RandAug/AdvProp/NoisyStudent weight ports)
  - EfficientNet: Rethinking Model Scaling for CNNs - https://arxiv.org/abs/1905.11946
  - CondConv: Conditionally Parameterized Convolutions for Efficient Inference - https://arxiv.org/abs/1904.04971
  - Adversarial Examples Improve Image Recognition - https://arxiv.org/abs/1911.09665
  - Self-training with Noisy Student improves ImageNet classification - https://arxiv.org/abs/1911.04252

* MixNet (Small, Medium, and Large)
  - MixConv: Mixed Depthwise Convolutional Kernels - https://arxiv.org/abs/1907.09595

* MNasNet B1, A1 (SE), Small
  - MnasNet: Platform-Aware Neural Architecture Search for Mobile - https://arxiv.org/abs/1807.11626

* FBNet-C
  - FBNet: Hardware-Aware Efficient ConvNet Design via Differentiable NAS - https://arxiv.org/abs/1812.03443

* Single-Path NAS Pixel1
  - Single-Path NAS: Designing Hardware-Efficient ConvNets - https://arxiv.org/abs/1904.02877

* TinyNet
    - Model Rubik's Cube: Twisting Resolution, Depth and Width for TinyNets - https://arxiv.org/abs/2010.14819
    - Definitions & weights borrowed from https://github.com/huawei-noah/CV-Backbones/tree/master/tinynet_pytorch

* And likely more...

The majority of the above models (EfficientNet*, MixNet, MnasNet) and original weights were made available
by Mingxing Tan, Quoc Le, and other members of their Google Brain team. Thanks for consistently releasing
the models and weights open source!

Hacked together by / Copyright 2019, Ross Wightman
    )partial)CallableDictListOptionalTupleUnionN)IMAGENET_DEFAULT_MEANIMAGENET_DEFAULT_STDIMAGENET_INCEPTION_MEANIMAGENET_INCEPTION_STD)create_conv2dcreate_classifierget_norm_act_layer	LayerTypeGroupNormActLayerNormAct2dEvoNorm2dS0   )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feature_take_indices)checkpoint_seq
checkpoint)generate_default_cfgsregister_modelregister_model_deprecationsEfficientNetEfficientNetFeaturesc                %       s  e Zd ZdZdddddddddddded	d	d
fdededededededededede	e
 de	e
 de	e
 de	e
 dededededdf$ fddZdejfdd ZejjdBd!edeeeeef f fd"d#ZejjdCd%eddfd&d'Zejjdejfd(d)ZdDdededdfd*d+Z				,		dEd-ejd.e	eeee f  d/ed0ed1ed2ed3edeeej eejeej f f fd4d5Z	6		$	dFd.eeee f d7ed8ed3edee f
d9d:Zd-ejdejfd;d<Z dBd-ejd=edejfd>d?Z!d-ejdejfd@dAZ"  Z#S )Gr(   a  EfficientNet model architecture.

    A flexible and performant PyTorch implementation of efficient network architectures, including:
      * EfficientNet-V2 Small, Medium, Large, XL & B0-B3
      * EfficientNet B0-B8, L2
      * EfficientNet-EdgeTPU
      * EfficientNet-CondConv
      * MixNet S, M, L, XL
      * MnasNet A1, B1, and small
      * MobileNet-V2
      * FBNet C
      * Single-Path NAS Pixel1
      * TinyNet

    References:
      - EfficientNet: https://arxiv.org/abs/1905.11946
      - EfficientNetV2: https://arxiv.org/abs/2104.00298
      - MixNet: https://arxiv.org/abs/1907.09595
      - MnasNet: https://arxiv.org/abs/1807.11626
                F N        avg
block_argsnum_classesnum_featuresin_chans	stem_sizestem_kernel_sizefix_stemoutput_stridepad_type	act_layer
norm_layeraa_layerse_layerround_chs_fn	drop_ratedrop_path_rateglobal_poolreturnc              
      s:  t t|   |
ptj}
|ptj}t||
}|pt}|| _|| _	d| _
|s)||}t|||d|	d| _||dd| _t||	||
||||d}tj||| | _|j| _dd | jD | _|j}|d	krzt||d
|	d| _||dd| _| | _| _nt | _t | _| | _| _t| j| j|d\| _| _t|  dS )a  Initialize EfficientNet model.

        Args:
            block_args: Arguments for building blocks.
            num_classes: Number of classifier classes.
            num_features: Number of features for penultimate layer.
            in_chans: Number of input channels.
            stem_size: Number of output channels in stem.
            stem_kernel_size: Kernel size for stem convolution.
            fix_stem: If True, don't scale stem channels.
            output_stride: Output stride of network.
            pad_type: Padding type.
            act_layer: Activation layer class.
            norm_layer: Normalization layer class.
            aa_layer: Anti-aliasing layer class.
            se_layer: Squeeze-and-excitation layer class.
            round_chs_fn: Channel rounding function.
            drop_rate: Dropout rate for classifier.
            drop_path_rate: Drop path rate for stochastic depth.
            global_pool: Global pooling type.
        F   stridepaddingTinplace)r8   r9   r>   r:   r;   r<   r=   r@   c                 S   s   g | ]}|d  qS )stage .0frJ   rJ   L/home/ubuntu/.local/lib/python3.10/site-packages/timm/models/efficientnet.py
<listcomp>   s    z)EfficientNet.__init__.<locals>.<listcomp>r   r   )rF   	pool_typeN)superr(   __init__nnReLUBatchNorm2dr   r   r2   r?   grad_checkpointingr   	conv_stembn1r   
Sequentialblocksfeaturesfeature_info
stage_endsin_chs	conv_headbn2r3   head_hidden_sizeIdentityr   rA   
classifierr   )selfr1   r2   r3   r4   r5   r6   r7   r8   r9   r:   r;   r<   r=   r>   r?   r@   rA   norm_act_layerbuilderhead_chs	__class__rJ   rN   rS   Q   sJ   )






zEfficientNet.__init__c                 C   sP   | j | jg}|| j || j| j| jg |t| j	| j
g tj| S )z3Convert model to sequential for feature extraction.)rX   rY   extendr[   r`   ra   rA   rT   Dropoutr?   rd   rZ   )re   layersrJ   rJ   rN   as_sequential   s
   
zEfficientNet.as_sequentialcoarsec                 C   s   t d|rdnddfdgdS )zCreate regex patterns for parameter groups.

        Args:
            coarse: Use coarse (stage-level) grouping.

        Returns:
            Dictionary mapping group names to regex patterns.
        z^conv_stem|bn1z^blocks\.(\d+)z^blocks\.(\d+)\.(\d+)N)zconv_head|bn2)i )stemr[   )dict)re   ro   rJ   rJ   rN   group_matcher   s   
zEfficientNet.group_matcherTenablec                 C   
   || _ dS zEnable or disable gradient checkpointing.

        Args:
            enable: Whether to enable gradient checkpointing.
        NrW   re   rs   rJ   rJ   rN   set_grad_checkpointing      
z#EfficientNet.set_grad_checkpointingc                 C   s   | j S )zGet the classifier module.)rd   re   rJ   rJ   rN   get_classifier   s   zEfficientNet.get_classifierc                 C   s$   || _ t| j| j |d\| _| _dS )zReset the classifier head.

        Args:
            num_classes: Number of classes for new classifier.
            global_pool: Global pooling type.
        rP   N)r2   r   r3   rA   rd   )re   r2   rA   rJ   rJ   rN   reset_classifier   s   
zEfficientNet.reset_classifierNCHWxindicesnorm
stop_early
output_fmtintermediates_onlyextra_blocksc                    s.  |dv sJ dg }|rt t jd |\}	}
nt t j|\}	}
 fdd|	D }	 j|
 }
d} |} |}||	v rF|| tj	 sM|sQ j}n jd|
 }t
|ddD ]\}} jrptj	 spt||}n||}||	v r}|| q^|r|S | jd	 kr |} |}||fS )
a  Forward features that returns intermediates.

        Args:
            x: Input image tensor.
            indices: Take last n blocks if int, all if None, select matching indices if sequence.
            norm: Apply norm layer to compatible intermediates.
            stop_early: Stop iterating over blocks when last desired intermediate hit.
            output_fmt: Shape of intermediate feature outputs.
            intermediates_only: Only return intermediate features.
            extra_blocks: Include outputs of all blocks and head conv in output, does not align with feature_info.

        Returns:
            List of intermediate features or tuple of (final features, intermediates).
        )r}   zOutput shape must be NCHW.r   c                    s   g | ]} j | qS rJ   )r^   )rL   irz   rJ   rN   rO      s    z6EfficientNet.forward_intermediates.<locals>.<listcomp>r   N)start)r"   lenr[   r^   rX   rY   appendtorchjitis_scripting	enumeraterW   r#   r`   ra   )re   r~   r   r   r   r   r   r   intermediatestake_indices	max_indexfeat_idxr[   blkrJ   rz   rN   forward_intermediates   s8   






z"EfficientNet.forward_intermediatesr   
prune_norm
prune_headc                 C   s   |rt t| jd |\}}nt t| j|\}}| j| }| jd| | _|s/|t| jk r9t | _t | _|rA| dd |S )a  Prune layers not required for specified intermediates.

        Args:
            indices: Indices of intermediate layers to keep.
            prune_norm: Whether to prune normalization layers.
            prune_head: Whether to prune the classifier head.
            extra_blocks: Include all blocks in indexing.

        Returns:
            List of indices that were kept.
        r   Nr   r.   )	r"   r   r[   r^   rT   rc   r`   ra   r|   )re   r   r   r   r   r   r   rJ   rJ   rN   prune_intermediate_layers  s   


z&EfficientNet.prune_intermediate_layersc                 C   sX   |  |}| |}| jrtj st| j|dd}n| |}| |}| 	|}|S )z/Forward pass through feature extraction layers.T)flatten)
rX   rY   rW   r   r   r   r#   r[   r`   ra   re   r~   rJ   rJ   rN   forward_features6  s   




zEfficientNet.forward_features
pre_logitsc                 C   s:   |  |}| jdkrtj|| j| jd}|r|S | |S )zForward pass through classifier head.

        Args:
            x: Feature tensor.
            pre_logits: Return features before final classifier.

        Returns:
            Output tensor.
        r/   )ptraining)rA   r?   Fdropoutr   rd   )re   r~   r   rJ   rJ   rN   forward_headB  s   


zEfficientNet.forward_headc                 C   s   |  |}| |}|S )zForward pass.)r   r   r   rJ   rJ   rN   forwardQ  s   

zEfficientNet.forwardFT)r0   )NFFr}   FF)r   FTF)$__name__
__module____qualname____doc__r   r   intboolstrr   r   r   floatrS   rT   rZ   rn   r   r   ignorer   r   r   rr   rx   Moduler{   r|   Tensorr   r   r   r   r   r   __classcell__rJ   rJ   ri   rN   r(   ;   s    	
W& 	
>
c                !       s   e Zd ZdZdddddddddddded	d	fd
edeedf dedededede	dedede
e de
e de
e de
e dededef  fddZejjd$de	ddfd d!Zdeej fd"d#Z  ZS )%r)   z EfficientNet Feature Extractor

    A work-in-progress feature extraction module for EfficientNet, to use as a backbone for segmentation
    and object detection models.
    )r   r   rC   r,      
bottleneckr,   r-   Fr.   Nr/   r1   out_indices.feature_locationr4   r5   r6   r7   r8   r9   r:   r;   r<   r=   r>   r?   r@   c                    s   t t|   |
ptj}
|ptj}t||
}|pt}|| _d| _	|s&||}t
|||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 d S )NFrC   rD   TrG   )	r8   r9   r>   r:   r;   r<   r=   r@   r   c                 S   s   i | ]	}|d  |d qS )rI   indexrJ   rK   rJ   rJ   rN   
<dictcomp>  s    z1EfficientNetFeatures.__init__.<locals>.<dictcomp>r   )module	hook_type)keys)rR   r)   rS   rT   rU   rV   r   r   r?   rW   r   rX   rY   r   rZ   r[   r    r\   r]   	get_dicts_stage_out_idxr   feature_hooksr!   named_modules)re   r1   r   r   r4   r5   r6   r7   r8   r9   r:   r;   r<   r=   r>   r?   r@   rf   rg   hooksri   rJ   rN   rS   _  s>   


zEfficientNetFeatures.__init__Trs   rB   c                 C   rt   ru   rv   rw   rJ   rJ   rN   rx     ry   z+EfficientNetFeatures.set_grad_checkpointingc                 C   s   |  |}| |}| jd u rEg }d| jv r|| t| jD ]"\}}| jr2tj	
 s2t||}n||}|d | jv rB|| q |S | | | j|j}t| S )Nr   r   )rX   rY   r   r   r   r   r[   rW   r   r   r   r$   
get_outputdevicelistvalues)re   r~   r\   r   boutrJ   rJ   rN   r     s"   






zEfficientNetFeatures.forwardr   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   rS   r   r   r   rx   r   r   r   r   rJ   rJ   ri   rN   r)   X  sj    	
	
9Fc                 K   s|   d}t }d }|ddrd|v sd|v rd}nd}t}d}t|| |f|dk|dk|d	|}|dkr<t|j |_|_|S )
Nr.   features_onlyFfeature_cfgfeature_clscfg)r2   r3   	head_convrA   cls)r   pretrained_strictkwargs_filter)r(   popr)   r   r   pretrained_cfgdefault_cfg)variant
pretrainedkwargsfeatures_mode	model_clsr   modelrJ   rJ   rN   _create_effnet  s.   	r         ?c              
   K   x   dgdgdgdgdgdgdgg}t dt|dtt|d	|d
dp+ttjfi t|d|}t| |fi |}|S )zCreates a mnasnet-a1 model.

    Ref impl: https://github.com/tensorflow/tpu/tree/master/models/official/mnasnet
    Paper: https://arxiv.org/pdf/1807.11626.pdf.

    Args:
      channel_multiplier: multiplier to number of channels per layer.
    ds_r1_k3_s1_e1_c16_noskipir_r2_k3_s2_e6_c24zir_r3_k5_s2_e3_c40_se0.25ir_r4_k3_s2_e6_c80zir_r2_k3_s1_e6_c112_se0.25zir_r3_k5_s2_e6_c160_se0.25ir_r1_k3_s1_e6_c320r-   
multiplierr;   Nr1   r5   r>   r;   rJ   	rq   r   r   r   r   rT   rV   r   r   r   channel_multiplierr   r   arch_defmodel_kwargsr   rJ   rJ   rN   _gen_mnasnet_a1  $   
 r   c              
   K   r   )Creates a mnasnet-b1 model.

    Ref impl: https://github.com/tensorflow/tpu/tree/master/models/official/mnasnet
    Paper: https://arxiv.org/pdf/1807.11626.pdf.

    Args:
      channel_multiplier: multiplier to number of channels per layer.
    ds_r1_k3_s1_c16_noskipir_r3_k3_s2_e3_c24ir_r3_k5_s2_e3_c40ir_r3_k5_s2_e6_c80ir_r2_k3_s1_e6_c96ir_r4_k5_s2_e6_c192ir_r1_k3_s1_e6_c320_noskipr-   r   r;   Nr   rJ   r   r   rJ   rJ   rN   _gen_mnasnet_b1  r   r   c              
   K   r   )r   ds_r1_k3_s1_c8ir_r1_k3_s2_e3_c16ir_r2_k3_s2_e6_c16zir_r4_k5_s2_e6_c32_se0.25zir_r3_k3_s1_e6_c32_se0.25zir_r3_k5_s2_e6_c88_se0.25ir_r1_k3_s1_e6_c144   r   r;   Nr   rJ   r   r   rJ   rJ   rN   _gen_mnasnet_small  s$   
	
 r   c                 K   s   dgdgdgdgdgg}t t|d}	|r|rdntd|	dnd}
tdt||||d	|
d
||	|ddp>t tjfi t|t	|dd|}t
| |fi |}|S )z
    Ref impl: https://github.com/tensorflow/models/blob/master/research/slim/nets/mobilenet/mobilenet_v2.py
    Paper: https://arxiv.org/abs/1801.04381
    dsa_r1_k3_s1_c64dsa_r2_k3_s2_c128dsa_r2_k3_s2_c256dsa_r6_k3_s2_c512dsa_r2_k3_s2_c1024r   i   r   depth_multiplierfix_first_last
group_sizer-   r;   Nrelu6r1   r3   r5   r7   r>   r;   r:   rJ   )r   r   maxrq   r   r   rT   rV   r   r   r   )r   r   r   r   fix_stem_headr   r   r   r   r>   head_featuresr   r   rJ   rJ   rN   _gen_mobilenet_v15  s4   	 r  c                 K   s   dgdgdgdgdgdgdgg}t t|d}tdt||||d	|r#d
ntd
|d
d|||ddp<t tjfi t|t	|dd|}	t
| |fi |	}
|
S )z Generate MobileNet-V2 network
    Ref impl: https://github.com/tensorflow/models/blob/master/research/slim/nets/mobilenet/mobilenet_v2.py
    Paper: https://arxiv.org/abs/1801.04381
    ds_r1_k3_s1_c16r   ir_r3_k3_s2_e6_c32ir_r4_k3_s2_e6_c64ir_r3_k3_s1_e6_c96ir_r3_k3_s2_e6_c160r   r   r   r+   r-   r;   Nr   r   rJ   )r   r   rq   r   r   r   rT   rV   r   r   r   )r   r   r   r   r   r   r   r   r>   r   r   rJ   rJ   rN   _gen_mobilenet_v2Y  s6   		 r  c                 K   s   dgddgg dg dddgdgd	gg}t dt|d
dtt|d|ddp0ttjfi t|d|}t| |fi |}|S )ai   FBNet-C

        Paper: https://arxiv.org/abs/1812.03443
        Ref Impl: https://github.com/facebookresearch/maskrcnn-benchmark/blob/master/maskrcnn_benchmark/modeling/backbone/fbnet_modeldef.py

        NOTE: the impl above does not relate to the 'C' variant here, that was derived from paper,
        it was used to confirm some building block details
    ir_r1_k3_s1_e1_c16ir_r1_k3_s2_e6_c24ir_r2_k3_s1_e1_c24)ir_r1_k5_s2_e6_c32ir_r1_k5_s1_e3_c32ir_r1_k5_s1_e6_c32ir_r1_k3_s1_e6_c32)ir_r1_k5_s2_e6_c64ir_r1_k5_s1_e3_c64ir_r2_k5_s1_e6_c64ir_r3_k5_s1_e6_c112ir_r1_k5_s1_e3_c112ir_r4_k5_s2_e6_c184ir_r1_k3_s1_e6_c352   i  r   r;   N)r1   r5   r3   r>   r;   rJ   r   r   rJ   rJ   rN   _gen_fbnetc~  s&   
	
 r  c              
   K   s~   dgdgddgddgddgd	gd
gg}t dt|dtt|d|ddp.ttjfi t|d|}t| |fi |}|S )zCreates the Single-Path NAS model from search targeted for Pixel1 phone.

    Paper: https://arxiv.org/abs/1904.02877

    Args:
      channel_multiplier: multiplier to number of channels per layer.
    r   r   ir_r1_k5_s2_e6_c40ir_r3_k3_s1_e3_c40ir_r1_k5_s2_e6_c80ir_r3_k3_s1_e3_c80ir_r1_k5_s1_e6_c96ir_r3_k5_s1_e3_c96r   r   r-   r   r;   Nr   rJ   r   r   rJ   rJ   rN   _gen_spnasnet  s$   

 r  r   c                 K   s   dgdgdgdgdgdgdgg}t t||d}tdt|||d	|d
d|t|d|ddp8t tjfi t|d|}	t	| |fi |	}
|
S )ax  Creates an EfficientNet model.

    Ref impl: https://github.com/tensorflow/tpu/blob/master/models/official/efficientnet/efficientnet_model.py
    Paper: https://arxiv.org/abs/1905.11946

    EfficientNet params
    name: (channel_multiplier, depth_multiplier, resolution, dropout_rate)
    'efficientnet-b0': (1.0, 1.0, 224, 0.2),
    'efficientnet-b1': (1.0, 1.1, 240, 0.2),
    'efficientnet-b2': (1.1, 1.2, 260, 0.3),
    'efficientnet-b3': (1.2, 1.4, 300, 0.3),
    'efficientnet-b4': (1.4, 1.8, 380, 0.4),
    'efficientnet-b5': (1.6, 2.2, 456, 0.4),
    'efficientnet-b6': (1.8, 2.6, 528, 0.5),
    'efficientnet-b7': (2.0, 3.1, 600, 0.5),
    'efficientnet-b8': (2.2, 3.6, 672, 0.5),
    'efficientnet-l2': (4.3, 5.3, 800, 0.5),

    Args:
      channel_multiplier: multiplier to number of channels per layer
      depth_multiplier: multiplier to number of repeats per stage

    ds_r1_k3_s1_e1_c16_se0.25ir_r2_k3_s2_e6_c24_se0.25ir_r2_k5_s2_e6_c40_se0.25ir_r3_k3_s2_e6_c80_se0.25ir_r3_k5_s1_e6_c112_se0.25ir_r4_k5_s2_e6_c192_se0.25ir_r1_k3_s1_e6_c320_se0.25r   divisorr   r+   r-   swishr;   Nr1   r3   r5   r>   r:   r;   rJ   
r   r   rq   r   r   r   rT   rV   r   r   )r   r   r   channel_divisorr   r   r   r   r>   r   r   rJ   rJ   rN   _gen_efficientnet  s*   	 	r.  c           
      K   s   dgdgdgdgdgdgg}t t|d}tdt|||d|d	d
||ddp1t tjfi t|t|dd|}t	| |fi |}	|	S )z Creates an EfficientNet-EdgeTPU model

    Ref impl: https://github.com/tensorflow/tpu/tree/master/models/official/efficientnet/edgetpu
    er_r1_k3_s1_e4_c24_fc24_noskiper_r2_k3_s2_e8_c32er_r4_k3_s2_e8_c48ir_r5_k5_s2_e8_c96ir_r4_k5_s1_e8_c144ir_r2_k5_s2_e8_c192r   r)  r+   r-   r;   Nrelur1   r3   r5   r>   r;   r:   rJ   
r   r   rq   r   r   rT   rV   r   r   r   
r   r   r   r   r   r   r   r>   r   r   rJ   rJ   rN   _gen_efficientnet_edge  s(   
 	r9  c           
      K   s   dgdgdgdgdgdgdgg}t t|d}tdt|||d	|d
d||ddp3t tjfi t|t|dd|}t	| |fi |}	|	S )zCreates an EfficientNet-CondConv model.

    Ref impl: https://github.com/tensorflow/tpu/tree/master/models/official/efficientnet/condconv
    r   r!  r"  r#  zir_r3_k5_s1_e6_c112_se0.25_cc4zir_r4_k5_s2_e6_c192_se0.25_cc4zir_r1_k3_s1_e6_c320_se0.25_cc4r   )experts_multiplierr+   r-   r;   Nr*  r6  rJ   r7  )
r   r   r   r:  r   r   r   r>   r   r   rJ   rJ   rN   _gen_efficientnet_condconv  s*    	r;  c                 K   s   dgdgdgdgdgdgdgg}t dt||dd	d
ddtt|dt|d|ddp4ttjfi t|d|}t	| |fi |}|S )a  Creates an EfficientNet-Lite model.

    Ref impl: https://github.com/tensorflow/tpu/tree/master/models/official/efficientnet/lite
    Paper: https://arxiv.org/abs/1905.11946

    EfficientNet params
    name: (channel_multiplier, depth_multiplier, resolution, dropout_rate)
      'efficientnet-lite0': (1.0, 1.0, 224, 0.2),
      'efficientnet-lite1': (1.0, 1.1, 240, 0.2),
      'efficientnet-lite2': (1.1, 1.2, 260, 0.3),
      'efficientnet-lite3': (1.2, 1.4, 280, 0.3),
      'efficientnet-lite4': (1.4, 1.8, 300, 0.3),

    Args:
      channel_multiplier: multiplier to number of channels per layer
      depth_multiplier: multiplier to number of repeats per stage
    ds_r1_k3_s1_e1_c16r   ir_r2_k5_s2_e6_c40ir_r3_k3_s2_e6_c80r  r   r   T)r   r+   r-   r   r   r;   Nr1   r3   r5   r7   r>   r:   r;   rJ   )
rq   r   r   r   r   r   rT   rV   r   r   r   r   r   r   r   r   r   r   rJ   rJ   rN   _gen_efficientnet_lite1  s*   	
 
rA  c           
      K   s   dgdgdgdgdgdgg}t t|dd}tdt|||d	|d
d||ddp2t tjfi t|t|dd|}t	| |fi |}	|	S )z Creates an EfficientNet-V2 base model

    Ref impl: https://github.com/google/automl/tree/master/efficientnetv2
    Paper: `EfficientNetV2: Smaller Models and Faster Training` - https://arxiv.org/abs/2104.00298
    cn_r1_k3_s1_e1_c16_skiper_r2_k3_s2_e4_c32er_r2_k3_s2_e4_c48zir_r3_k3_s2_e4_c96_se0.25zir_r5_k3_s1_e6_c112_se0.25zir_r8_k3_s2_e6_c192_se0.25r/   r   round_limitr)  r+   r-   r;   Nsilur6  rJ   r7  r8  rJ   rJ   rN   _gen_efficientnetv2_baseZ  s(   	 	rH  c                 K   s   dgdgdgdgdgdgg}d}|rdg|d	< d
g|d< d}t t|d}	tdt|||d|	|d|	|ddpAt tjfi t|t|dd|}
t	| |fi |
}|S )a[   Creates an EfficientNet-V2 Small model

    Ref impl: https://github.com/google/automl/tree/master/efficientnetv2
    Paper: `EfficientNetV2: Smaller Models and Faster Training` - https://arxiv.org/abs/2104.00298

    NOTE: `rw` flag sets up 'small' variant to behave like my initial v2 small model,
        before ref the impl was released.
    cn_r2_k3_s1_e1_c24_skiper_r4_k3_s2_e4_c48er_r4_k3_s2_e4_c64zir_r6_k3_s2_e4_c128_se0.25zir_r9_k3_s1_e6_c160_se0.25zir_r15_k3_s2_e6_c256_se0.25r+   er_r2_k3_s1_e1_c24r   zir_r15_k3_s2_e6_c272_se0.25r   i   r   r)     r;   NrG  r6  rJ   r7  )r   r   r   r   rwr   r   r   r3   r>   r   r   rJ   rJ   rN   _gen_efficientnetv2_sx  s2   

 	rO  c           	      K      dgdgdgdgdgdgdgg}t dt|||dd	d
tt|d|ddp/ttjfi t|t|dd|}t	| |fi |}|S )z Creates an EfficientNet-V2 Medium model

    Ref impl: https://github.com/google/automl/tree/master/efficientnetv2
    Paper: `EfficientNetV2: Smaller Models and Faster Training` - https://arxiv.org/abs/2104.00298
    cn_r3_k3_s1_e1_c24_skiper_r5_k3_s2_e4_c48er_r5_k3_s2_e4_c80zir_r7_k3_s2_e4_c160_se0.25zir_r14_k3_s1_e6_c176_se0.25zir_r18_k3_s2_e6_c304_se0.25zir_r5_k3_s1_e6_c512_se0.25r)  r+   rM  r   r;   NrG  r6  rJ   
rq   r   r   r   r   rT   rV   r   r   r   	r   r   r   r   r   r   r   r   r   rJ   rJ   rN   _gen_efficientnetv2_m  (   


 	rV  c           	      K   rP  )z Creates an EfficientNet-V2 Large model

    Ref impl: https://github.com/google/automl/tree/master/efficientnetv2
    Paper: `EfficientNetV2: Smaller Models and Faster Training` - https://arxiv.org/abs/2104.00298
    cn_r4_k3_s1_e1_c32_skiper_r7_k3_s2_e4_c64er_r7_k3_s2_e4_c96zir_r10_k3_s2_e4_c192_se0.25zir_r19_k3_s1_e6_c224_se0.25zir_r25_k3_s2_e6_c384_se0.25zir_r7_k3_s1_e6_c640_se0.25r)  r+   r-   r   r;   NrG  r6  rJ   rT  rU  rJ   rJ   rN   _gen_efficientnetv2_l  rW  r[  c           	      K   rP  )z Creates an EfficientNet-V2 Xtra-Large model

    Ref impl: https://github.com/google/automl/tree/master/efficientnetv2
    Paper: `EfficientNetV2: Smaller Models and Faster Training` - https://arxiv.org/abs/2104.00298
    rX  er_r8_k3_s2_e4_c64er_r8_k3_s2_e4_c96zir_r16_k3_s2_e4_c192_se0.25zir_r24_k3_s1_e6_c256_se0.25zir_r32_k3_s2_e6_c512_se0.25zir_r8_k3_s1_e6_c640_se0.25r)  r+   r-   r   r;   NrG  r6  rJ   rT  rU  rJ   rJ   rN   _gen_efficientnetv2_xl  rW  r^  c                 K   s   	 |dkrdgdgdgdgdgdgdgg}ndgd	gd
gdgdgdgdgg}t t||d}	tdt|||d|	dd|	t|d|ddpNt tjfi t|d|}
t	| |fi |
}|S )a  Creates an EfficientNet model.

    Ref impl: https://github.com/tensorflow/tpu/blob/master/models/official/efficientnet/efficientnet_model.py
    Paper: https://arxiv.org/abs/1905.11946

    EfficientNet params
    name: (channel_multiplier, depth_multiplier, resolution, dropout_rate)
    'efficientnet-x-b0': (1.0, 1.0, 224, 0.2),
    'efficientnet-x-b1': (1.0, 1.1, 240, 0.2),
    'efficientnet-x-b2': (1.1, 1.2, 260, 0.3),
    'efficientnet-x-b3': (1.2, 1.4, 300, 0.3),
    'efficientnet-x-b4': (1.4, 1.8, 380, 0.4),
    'efficientnet-x-b5': (1.6, 2.2, 456, 0.4),
    'efficientnet-x-b6': (1.8, 2.6, 528, 0.5),
    'efficientnet-x-b7': (2.0, 3.1, 600, 0.5),
    'efficientnet-x-b8': (2.2, 3.6, 672, 0.5),
    'efficientnet-l2': (4.3, 5.3, 800, 0.5),

    Args:
      channel_multiplier: multiplier to number of channels per layer
      depth_multiplier: multiplier to number of repeats per stage

    r   zds_r1_k3_s1_e1_c16_se0.25_d1zer_r2_k3_s2_e6_c24_se0.25_nrezer_r2_k5_s2_e6_c40_se0.25_nrer#  r$  r%  r&  zer_r2_k3_s2_e4_c24_se0.25_nrezer_r2_k5_s2_e4_c40_se0.25_nrezir_r3_k3_s2_e4_c80_se0.25r'  r)  r+   r-   rG  r;   Nr+  rJ   r,  )r   r   r   r-  r   versionr   r   r   r>   r   r   rJ   rJ   rN   _gen_efficientnet_x   s>   	 	r`  c                 K   s   dgddgddgddgdd	gd
dgg}t dt|ddtt|d|ddp/ttjfi t|d|}t| |fi |}|S )zCreates a MixNet Small model.

    Ref impl: https://github.com/tensorflow/tpu/tree/master/models/official/mnasnet/mixnet
    Paper: https://arxiv.org/abs/1907.09595
    r<  zir_r1_k3_a1.1_p1.1_s2_e6_c24zir_r1_k3_a1.1_p1.1_s1_e3_c24z ir_r1_k3.5.7_s2_e6_c40_se0.5_nsw(ir_r3_k3.5_a1.1_p1.1_s1_e6_c40_se0.5_nswz&ir_r1_k3.5.7_p1.1_s2_e6_c80_se0.25_nswz$ir_r2_k3.5_p1.1_s1_e6_c80_se0.25_nswz+ir_r1_k3.5.7_a1.1_p1.1_s1_e6_c120_se0.5_nswz-ir_r2_k3.5.7.9_a1.1_p1.1_s1_e3_c120_se0.5_nswz&ir_r1_k3.5.7.9.11_s2_e6_c200_se0.5_nswz(ir_r2_k3.5.7.9_p1.1_s1_e6_c200_se0.5_nsw   r  r   r;   Nr1   r3   r5   r>   r;   rJ   r   r   rJ   rJ   rN   _gen_mixnet_sS  s$   
 rd  c                 K   s   dgddgddgddgdd	gd
dgg}t dt||ddddtt|d|ddp2ttjfi t|d|}t| |fi |}|S )zCreates a MixNet Medium-Large model.

    Ref impl: https://github.com/tensorflow/tpu/tree/master/models/official/mnasnet/mixnet
    Paper: https://arxiv.org/abs/1907.09595
    ds_r1_k3_s1_e1_c24z ir_r1_k3.5.7_a1.1_p1.1_s2_e6_c32zir_r1_k3_a1.1_p1.1_s1_e3_c32z"ir_r1_k3.5.7.9_s2_e6_c40_se0.5_nswra  z!ir_r1_k3.5.7_s2_e6_c80_se0.25_nswz-ir_r3_k3.5.7.9_a1.1_p1.1_s1_e6_c80_se0.25_nswzir_r1_k3_s1_e6_c120_se0.5_nswz-ir_r3_k3.5.7.9_a1.1_p1.1_s1_e3_c120_se0.5_nswz#ir_r1_k3.5.7.9_s2_e6_c200_se0.5_nswz(ir_r3_k3.5.7.9_p1.1_s1_e6_c200_se0.5_nswrounddepth_truncrb  rM  r   r;   Nrc  rJ   r   r@  rJ   rJ   rN   _gen_mixnet_mt  s$   
 ri  c                 K   s   dgdgdgdgdgdgdgg}t dt||dd	td
td
|ddddtt|dt|d|ddp<ttjfi t	|d|}t
| |fi |}|S )zCreates a TinyNet model.
    r   r!  r"  r#  r$  r%  r&  rf  rg  r+   r   Nr-   Tr   r*  r;   r?  rJ   )rq   r   r   r   r   r   r   rT   rV   r   r   )r   model_widthr   r   r   r   r   r   rJ   rJ   rN   _gen_tinynet  s$   
 
rk  c                 K   sH  d| v rTd}d}d}d}t |d}	dtt dtfdd	}
d
| v r)d}d}g d}n%d| v r2g d}nd| v r=g d}d}nd| v rLd}d}g d}d}nJ |
||}n d}d}d}t |d}	dgddgddgddgd dgd!d"gd#gg}td(t|||||tt|d$|d%d&pttj	fi t
||	d'|}t| |fi |}|S ))z
    Based on definitions in: https://github.com/tensorflow/models/tree/d2427a562f401c9af118e47af2f030a0a5599f55/official/projects/edgetpu/vision
    
edgetpu_v2@      r+   r5  chsr   c              
   S   s   d| d  gd| d  d| d| d  gd| d  d| d| d  d| d  d| d| d  gd| d	  d
| d	  gd| d  d
| d  gd| d  d
| d  gd| d  ggS )Ncn_r1_k1_s1_cr   er_r1_k3_s2_e8_cr   er_r1_k3_s1_e4_gs_crC   er_r1_k3_s1_e4_cr,   ir_r3_k3_s1_e4_cir_r1_k3_s1_e8_cr   ir_r1_k3_s2_e8_crn     rJ   )ro  r   rJ   rJ   rN   	_arch_def  s    z)_gen_mobilenet_edgetpu.<locals>._arch_defedgetpu_v2_xsr-   r,   )r  r-   0   `            edgetpu_v2_s)rM  r{  rm     r~  r     edgetpu_v2_m)r-   rm  P   r~  r     @  i@  edgetpu_v2_l   r  )r-   rm  r|  r  r  r    i  Fcn_r1_k1_s1_c16er_r1_k3_s2_e8_c32er_r3_k3_s1_e4_c32er_r1_k3_s2_e8_c48er_r3_k3_s1_e4_c48ir_r1_k3_s2_e8_c96ir_r3_k3_s1_e4_c96ir_r1_k3_s1_e8_c96_noskipir_r1_k5_s2_e8_c160ir_r3_k5_s1_e4_c160ir_r1_k3_s1_e8_c192r   r;   N)r1   r3   r5   r6   r>   r;   r:   rJ   )r   r   r   rq   r   r   r   r   rT   rV   r   r   )r   r   r   r   r   r5   r6   r   r3   r:   ry  channelsr   r   r   rJ   rJ   rN   _gen_mobilenet_edgetpu  s`   




 
r  c           	      K   s   dgdgdgdgdgg}t t|dd}tdt|||dd	||d
dp.t tjfi t|t|dd|}t	| |fi |}|S )z* Minimal test EfficientNet generator.
    rB  er_r1_k3_s2_e4_c24er_r1_k3_s2_e4_c32zir_r1_k3_s2_e4_c48_se0.25zir_r1_k3_s2_e4_c64_se0.25r/   rE  r  rM  r;   NrG  r6  rJ   r7  )	r   r   r   r   r   r   r>   r   r   rJ   rJ   rN   _gen_test_efficientnet  s&    	r  r.   c                 K   s   | dddddt tddd
|S )	Nr*   r,      r  r  r  g      ?bicubicrX   rd   )
urlr2   
input_size	pool_sizecrop_pctinterpolationmeanstd
first_convrd   )r	   r
   )r  r   rJ   rJ   rN   _cfg  s   r  zmnasnet_050.untrainedzmnasnet_075.untrainedzmnasnet_100.rmsp_in1kzhhttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-weights/mnasnet_b1-74cb7081.pthztimm/)r  	hf_hub_idzmnasnet_140.untrainedzsemnasnet_050.untrainedzsemnasnet_075.rmsp_in1kzkhttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-weights/semnasnet_075-18710866.pthzsemnasnet_100.rmsp_in1kzhhttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-weights/mnasnet_a1-d9418771.pthzsemnasnet_140.untrainedzmnasnet_small.lamb_in1kzphttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-weights/mnasnet_small_lamb-aff75073.pthz#mobilenetv1_100.ra4_e3600_r224_in1k)r,   r  r  gffffff?)r  r  r  test_input_sizetest_crop_pctz$mobilenetv1_100h.ra4_e3600_r224_in1kz#mobilenetv1_125.ra4_e3600_r224_in1k?)r  r  r  r  r  r  zmobilenetv2_035.untrainedzmobilenetv2_050.lamb_in1kzmhttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-weights/mobilenetv2_050-3d30d450.pthr  )r  r  r  zmobilenetv2_075.untrainedzmobilenetv2_100.ra_in1kzphttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-weights/mobilenetv2_100_ra-b33bc2c4.pthzmobilenetv2_110d.ra_in1kzqhttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-weights/mobilenetv2_110d_ra-77090ade.pthzmobilenetv2_120d.ra_in1kzqhttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-weights/mobilenetv2_120d_ra-5987e2ed.pthzmobilenetv2_140.ra_in1kzphttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-weights/mobilenetv2_140_ra-21a4e913.pthzfbnetc_100.rmsp_in1kzhhttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-weights/fbnetc_100-c345b898.pthbilinearzspnasnet_100.rmsp_in1kzjhttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-weights/spnasnet_100-048bc3f4.pthzefficientnet_b0.ra_in1kzphttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-weights/efficientnet_b0_ra-3dd342df.pthz#efficientnet_b0.ra4_e3600_r224_in1kz#efficientnet_b1.ra4_e3600_r240_in1k)r,   r  r  )r   r   )r,      r  )r  r  r  r  r  r  r  r  zefficientnet_b1.ft_in1kzmhttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-weights/efficientnet_b1-533bc792.pth)r  r  r  r  zefficientnet_b2.ra_in1kzphttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-weights/efficientnet_b2_ra-bcdf34b7.pth)r  r  r  r  r  r  zefficientnet_b3.ra2_in1kzqhttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-weights/efficientnet_b3_ra2-cf984f9c.pth)	   r  )r,   r  r  zefficientnet_b4.ra2_in1kzuhttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-weights/efficientnet_b4_ra2_320-7eb33cd5.pth)
   r  )r,   r  r  z efficientnet_b5.sw_in12k_ft_in1k)r,     r  )   r  squash)r  r  r  r  	crop_modezefficientnet_b5.sw_in12k)r,     r  )   r  i-.  )r  r  r  r  r2   zefficientnet_b6.untrained)r,     r  )   r  g/$?)r  r  r  r  zefficientnet_b7.untrained)r,   X  r  )   r  g|?5^?zefficientnet_b8.untrained)r,     r  )   r  gI+?zefficientnet_l2.untrained)r,      r  )   r  gn?zefficientnet_b0_gn.untrainedzefficientnet_b0_g8_gn.untrainedz"efficientnet_b0_g16_evos.untrainedzefficientnet_b3_gn.untrained)r  r  r  r  zefficientnet_b3_g8_gn.untrainedzefficientnet_blur_b0.untrainedzefficientnet_es.ra_in1kzphttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-weights/efficientnet_es_ra-f111e99c.pthzefficientnet_em.ra2_in1kzqhttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-weights/efficientnet_em_ra2-66250f76.pthgMbX9?)r  r  r  r  r  zefficientnet_el.ra_in1kzmhttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-weights/efficientnet_el-3b455510.pth)r,   ,  r  g!rh?zefficientnet_es_pruned.in1kzvhttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-weights/efficientnet_es_pruned75-1b7248cf.pthzefficientnet_el_pruned.in1kzvhttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-weights/efficientnet_el_pruned70-ef2a2ccf.pthzefficientnet_cc_b0_4e.untrainedzefficientnet_cc_b0_8e.untrainedzefficientnet_cc_b1_8e.untrained)r  r  r  zefficientnet_lite0.ra_in1kzshttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-weights/efficientnet_lite0_ra-37913777.pthzefficientnet_lite1.untrainedzefficientnet_lite2.untrained)r,     r  g{Gz?zefficientnet_lite3.untrainedzefficientnet_lite4.untrained)r,   |  r  )   r  g/$?zefficientnet_b1_pruned.in1kzmhttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-tresnet/effnetb1_pruned-bea43a3a.pth)r  r  r  r  r  r  r  zefficientnet_b2_pruned.in1kzmhttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-tresnet/effnetb2_pruned-08c1b27c.pthzefficientnet_b3_pruned.in1kzmhttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-tresnet/effnetb3_pruned-59ecf72d.pthzefficientnetv2_rw_t.ra2_in1kzrhttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-weights/efficientnetv2_t_agc-3620981a.pthr  r  )r  r  r  r  r  r  zgc_efficientnetv2_rw_t.agc_in1kzxhttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-weights/gc_efficientnetv2_rw_t_agc-927a0bde.pthzefficientnetv2_rw_s.ra2_in1kzvhttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-weights/efficientnet_v2s_ra2_288-a6477665.pthzefficientnetv2_rw_m.agc_in1kzuhttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-weights/efficientnetv2_rw_m_agc-3d90cb1e.pthzefficientnetv2_s.untrained)r  r  r  r  zefficientnetv2_m.untrainedzefficientnetv2_l.untrained)r,     r  zefficientnetv2_xl.untrained)r,      r  ztf_efficientnet_b0.ns_jft_in1kzshttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-weights/tf_efficientnet_b0_ns-c0e6a31c.pth)r  r  r  ztf_efficientnet_b1.ns_jft_in1kzshttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-weights/tf_efficientnet_b1_ns-99dd0c41.pthztf_efficientnet_b2.ns_jft_in1kzshttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-weights/tf_efficientnet_b2_ns-00306e48.pthztf_efficientnet_b3.ns_jft_in1kzshttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-weights/tf_efficientnet_b3_ns-9d44bf68.pthztf_efficientnet_b4.ns_jft_in1kzshttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-weights/tf_efficientnet_b4_ns-d6313a46.pthztf_efficientnet_b5.ns_jft_in1kzshttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-weights/tf_efficientnet_b5_ns-6f26d0cf.pth)r,     r  )   r  gS?ztf_efficientnet_b6.ns_jft_in1kzshttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-weights/tf_efficientnet_b6_ns-51548356.pthztf_efficientnet_b7.ns_jft_in1kzshttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-weights/tf_efficientnet_b7_ns-1dbc32de.pthz"tf_efficientnet_l2.ns_jft_in1k_475zwhttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-weights/tf_efficientnet_l2_ns_475-bebbd00a.pth)r,     r  gʡE?ztf_efficientnet_l2.ns_jft_in1kzshttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-weights/tf_efficientnet_l2_ns-df73bb44.pthgQ?ztf_efficientnet_b0.ap_in1kzshttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-weights/tf_efficientnet_b0_ap-f262efe1.pth)r  r  r  r  r  ztf_efficientnet_b1.ap_in1kzshttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-weights/tf_efficientnet_b1_ap-44ef0a3d.pth)r  r  r  r  r  r  r  ztf_efficientnet_b2.ap_in1kzshttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-weights/tf_efficientnet_b2_ap-2f8e7636.pthztf_efficientnet_b3.ap_in1kzshttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-weights/tf_efficientnet_b3_ap-aad25bdd.pthztf_efficientnet_b4.ap_in1kzshttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-weights/tf_efficientnet_b4_ap-dedb23e6.pthztf_efficientnet_b5.ap_in1kzshttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-weights/tf_efficientnet_b5_ap-9e82fae8.pthztf_efficientnet_b6.ap_in1kzshttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-weights/tf_efficientnet_b6_ap-4ffb161f.pthztf_efficientnet_b7.ap_in1kzshttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-weights/tf_efficientnet_b7_ap-ddb28fec.pthztf_efficientnet_b8.ap_in1kzshttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-weights/tf_efficientnet_b8_ap-00e169fa.pthztf_efficientnet_b5.ra_in1kzshttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-weights/tf_efficientnet_b5_ra-9a3e5369.pthztf_efficientnet_b7.ra_in1kzshttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-weights/tf_efficientnet_b7_ra-6c08e654.pthztf_efficientnet_b8.ra_in1kzshttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-weights/tf_efficientnet_b8_ra-572d5dd9.pthztf_efficientnet_b0.aa_in1kzshttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-weights/tf_efficientnet_b0_aa-827b6e33.pthztf_efficientnet_b1.aa_in1kzshttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-weights/tf_efficientnet_b1_aa-ea7a6ee0.pthztf_efficientnet_b2.aa_in1kzshttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-weights/tf_efficientnet_b2_aa-60c94f97.pthztf_efficientnet_b3.aa_in1kzshttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-weights/tf_efficientnet_b3_aa-84b4657e.pthztf_efficientnet_b4.aa_in1kzshttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-weights/tf_efficientnet_b4_aa-818f208c.pthztf_efficientnet_b5.aa_in1kzuhttps://github.com/huggingface/pytorch-image-models/releases/download/v0.1-weights/tf_efficientnet_b5_aa-99018a74.pthztf_efficientnet_b6.aa_in1kzshttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-weights/tf_efficientnet_b6_aa-80ba17e4.pthztf_efficientnet_b7.aa_in1kzuhttps://github.com/huggingface/pytorch-image-models/releases/download/v0.1-weights/tf_efficientnet_b7_aa-076e3472.pthztf_efficientnet_b0.in1kzrhttps://github.com/huggingface/pytorch-image-models/releases/download/v0.1-weights/tf_efficientnet_b0-0af12548.pthztf_efficientnet_b1.in1kzrhttps://github.com/huggingface/pytorch-image-models/releases/download/v0.1-weights/tf_efficientnet_b1-5c1377c4.pthztf_efficientnet_b2.in1kzrhttps://github.com/huggingface/pytorch-image-models/releases/download/v0.1-weights/tf_efficientnet_b2-e393ef04.pthztf_efficientnet_b3.in1kzrhttps://github.com/huggingface/pytorch-image-models/releases/download/v0.1-weights/tf_efficientnet_b3-e3bd6955.pthztf_efficientnet_b4.in1kzrhttps://github.com/huggingface/pytorch-image-models/releases/download/v0.1-weights/tf_efficientnet_b4-74ee3bed.pthztf_efficientnet_b5.in1kzrhttps://github.com/huggingface/pytorch-image-models/releases/download/v0.1-weights/tf_efficientnet_b5-c6949ce9.pthztf_efficientnet_es.in1kzphttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-weights/tf_efficientnet_es-ca1afbfe.pth)      ?r  r  ztf_efficientnet_em.in1kzphttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-weights/tf_efficientnet_em-e78cfe58.pthztf_efficientnet_el.in1kzphttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-weights/tf_efficientnet_el-5143854e.pthztf_efficientnet_cc_b0_4e.in1kzvhttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-weights/tf_efficientnet_cc_b0_4e-4362b6b2.pth)r  r  r  r  ztf_efficientnet_cc_b0_8e.in1kzvhttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-weights/tf_efficientnet_cc_b0_8e-66184a25.pthztf_efficientnet_cc_b1_8e.in1kzvhttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-weights/tf_efficientnet_cc_b1_8e-f7c79ae1.pthztf_efficientnet_lite0.in1kzshttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-weights/tf_efficientnet_lite0-0aa007d2.pth)r  r  r  r  r  ztf_efficientnet_lite1.in1kzshttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-weights/tf_efficientnet_lite1-bde8b488.pth)r  r  r  r  r  r  r  r  ztf_efficientnet_lite2.in1kzshttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-weights/tf_efficientnet_lite2-dcccb7df.pthztf_efficientnet_lite3.in1kzshttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-weights/tf_efficientnet_lite3-b733e338.pthztf_efficientnet_lite4.in1kzshttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-weights/tf_efficientnet_lite4-741542c3.pthgq=
ףp?z!tf_efficientnetv2_s.in21k_ft_in1kz~https://github.com/rwightman/pytorch-image-models/releases/download/v0.1-effv2-weights/tf_efficientnetv2_s_21ft1k-d7dafa41.pth)r  r  r  r  r  r  r  r  z!tf_efficientnetv2_m.in21k_ft_in1kz~https://github.com/rwightman/pytorch-image-models/releases/download/v0.1-effv2-weights/tf_efficientnetv2_m_21ft1k-bf41664a.pth)	r  r  r  r  r  r  r  r  r  z!tf_efficientnetv2_l.in21k_ft_in1kz~https://github.com/rwightman/pytorch-image-models/releases/download/v0.1-effv2-weights/tf_efficientnetv2_l_21ft1k-60127a9d.pthz"tf_efficientnetv2_xl.in21k_ft_in1kzhttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-effv2-weights/tf_efficientnetv2_xl_in21ft1k-06c35c48.pthztf_efficientnetv2_s.in1kzwhttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-effv2-weights/tf_efficientnetv2_s-eb54923e.pthztf_efficientnetv2_m.in1kzwhttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-effv2-weights/tf_efficientnetv2_m-cc09e0cd.pthztf_efficientnetv2_l.in1kzwhttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-effv2-weights/tf_efficientnetv2_l-d664b728.pthztf_efficientnetv2_s.in21kz{https://github.com/rwightman/pytorch-image-models/releases/download/v0.1-effv2-weights/tf_efficientnetv2_s_21k-6337ad01.pthiSU  )	r  r  r  r  r2   r  r  r  r  ztf_efficientnetv2_m.in21kz{https://github.com/rwightman/pytorch-image-models/releases/download/v0.1-effv2-weights/tf_efficientnetv2_m_21k-361418a2.pth)
r  r  r  r  r2   r  r  r  r  r  ztf_efficientnetv2_l.in21kz{https://github.com/rwightman/pytorch-image-models/releases/download/v0.1-effv2-weights/tf_efficientnetv2_l_21k-91a19ec9.pthztf_efficientnetv2_xl.in21kz~https://github.com/rwightman/pytorch-image-models/releases/download/v0.1-effv2-weights/tf_efficientnetv2_xl_in21k-fd7e8abf.pthztf_efficientnetv2_b0.in1kzxhttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-effv2-weights/tf_efficientnetv2_b0-c7cc451f.pth)r,   r  r  )rx  rx  )r  r  r  r  r  ztf_efficientnetv2_b1.in1kzxhttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-effv2-weights/tf_efficientnetv2_b1-be6e41b0.pthztf_efficientnetv2_b2.in1kzxhttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-effv2-weights/tf_efficientnetv2_b2-847de54e.pth)r,      r  z"tf_efficientnetv2_b3.in21k_ft_in1k)r  r  r  r  r  r  r  r  ztf_efficientnetv2_b3.in1kzxhttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-effv2-weights/tf_efficientnetv2_b3-57773f13.pthztf_efficientnetv2_b3.in21k)r  r  r  r2   r  r  r  r  zmixnet_s.ft_in1kzfhttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-weights/mixnet_s-a907afbc.pthzmixnet_m.ft_in1kzfhttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-weights/mixnet_m-4647fc68.pthzmixnet_l.ft_in1kzfhttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-weights/mixnet_l-5a9a2ed8.pthzmixnet_xl.ra_in1kzjhttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-weights/mixnet_xl_ra-aac3c00c.pthzmixnet_xxl.untrainedztf_mixnet_s.in1kzihttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-weights/tf_mixnet_s-89d3354b.pthztf_mixnet_m.in1kzihttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-weights/tf_mixnet_m-0f4d8805.pthztf_mixnet_l.in1kzihttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-weights/tf_mixnet_l-6c92e0c8.pthzRhttps://github.com/huawei-noah/CV-Backbones/releases/download/v1.2.0/tinynet_a.pth)r  r  r  r  )r,      r  zRhttps://github.com/huawei-noah/CV-Backbones/releases/download/v1.2.0/tinynet_b.pth)r,      r  zRhttps://github.com/huawei-noah/CV-Backbones/releases/download/v1.2.0/tinynet_c.pth)r,      r  )rn  rn  zRhttps://github.com/huawei-noah/CV-Backbones/releases/download/v1.2.0/tinynet_d.pth)r,   j   r  )r   r   zRhttps://github.com/huawei-noah/CV-Backbones/releases/download/v1.2.0/tinynet_e.pth)r  r  )r,   r~  r~  )r  r  r  r  )r  r  r  r  r  r  )ztinynet_a.in1kztinynet_b.in1kztinynet_c.in1kztinynet_d.in1kztinynet_e.in1kzmobilenet_edgetpu_100.untrainedz!mobilenet_edgetpu_v2_xs.untrainedz mobilenet_edgetpu_v2_s.untrainedz*mobilenet_edgetpu_v2_m.ra4_e3600_r224_in1kz mobilenet_edgetpu_v2_l.untrainedztest_efficientnet.r160_in1kztest_efficientnet_ln.r160_in1kztest_efficientnet_gn.r160_in1kz test_efficientnet_evos.r160_in1krB   c                 K      t dd| i|}|S )z& MNASNet B1, depth multiplier of 0.5. mnasnet_050r  r   N)r  r  r   r   r   r   rJ   rJ   rN   r  i     r  c                 K   r  )z' MNASNet B1, depth multiplier of 0.75. mnasnet_075      ?r   N)r  r  r  r  rJ   rJ   rN   r  p  r  r  c                 K   r  )z& MNASNet B1, depth multiplier of 1.0. mnasnet_100r   r   N)r  r   r  r  rJ   rJ   rN   r  w  r  r  c                 K   r  )z& MNASNet B1,  depth multiplier of 1.4 mnasnet_140ffffff?r   N)r  r  r  r  rJ   rJ   rN   r  ~  r  r  c                 K   r  )z- MNASNet A1 (w/ SE), depth multiplier of 0.5 semnasnet_050r  r   N)r  r  r   r  rJ   rJ   rN   r    r  r  c                 K   r  )z0 MNASNet A1 (w/ SE),  depth multiplier of 0.75. semnasnet_075r  r   N)r  r  r  r  rJ   rJ   rN   r    r  r  c                 K   r  )z. MNASNet A1 (w/ SE), depth multiplier of 1.0. semnasnet_100r   r   N)r  r   r  r  rJ   rJ   rN   r    r  r  c                 K   r  )z. MNASNet A1 (w/ SE), depth multiplier of 1.4. semnasnet_140r  r   N)r  r  r  r  rJ   rJ   rN   r    r  r  c                 K   r  )z* MNASNet Small,  depth multiplier of 1.0. mnasnet_smallr   r   N)r  r   )r   r  rJ   rJ   rN   r    r  r  c                 K   r  ) MobileNet V1 mobilenetv1_100r   r   N)r  r   r  r  rJ   rJ   rN   r    r  r  c                 K   s   t dd| d|}|S )r  mobilenetv1_100hr   T)r   r   N)r  r   r  r  rJ   rJ   rN   r    s   r  c                 K   r  )r  mobilenetv1_125      ?r   N)r  r  r  r  rJ   rJ   rN   r    r  r  c                 K   r  )z) MobileNet V2 w/ 0.35 channel multiplier mobilenetv2_035ffffff?r   N)r  r  r  r  rJ   rJ   rN   r    r  r  c                 K   r  )z( MobileNet V2 w/ 0.5 channel multiplier mobilenetv2_050r  r   N)r  r  r  r  rJ   rJ   rN   r    r  r  c                 K   r  )z) MobileNet V2 w/ 0.75 channel multiplier mobilenetv2_075r  r   N)r  r  r  r  rJ   rJ   rN   r    r  r  c                 K   r  )z( MobileNet V2 w/ 1.0 channel multiplier mobilenetv2_100r   r   N)r  r   r  r  rJ   rJ   rN   r    r  r  c                 K   r  )z( MobileNet V2 w/ 1.4 channel multiplier mobilenetv2_140r  r   N)r  r  r  r  rJ   rJ   rN   r    r  r  c                 K      t 	ddd| d|}|S )z3 MobileNet V2 w/ 1.1 channel, 1.2 depth multipliersmobilenetv2_110d皙?333333?Tr   r   r   N)r  r  r  r  rJ   rJ   rN   r       r  c                 K   r  )z4 MobileNet V2 w/ 1.2 channel, 1.4 depth multipliers mobilenetv2_120dr  r  Tr  N)r  r  r  r  rJ   rJ   rN   r    r  r  c                 K   s&   | r| dt tdd| i|}|S )z	 FBNet-C bn_eps
fbnetc_100r   r   N)r  r   )
setdefaultr   r  r  rJ   rJ   rN   r    s   r  c                 K   r  )z Single-Path NAS Pixel1spnasnet_100r   r   N)r  r   )r  r  rJ   rJ   rN   r    r  r  c                 K      t 	ddd| d|}|S )z EfficientNet-B0 efficientnet_b0r   r   r   r   N)r  r.  r  rJ   rJ   rN   r       r  c                 K      t 	ddd| d|}|S )z EfficientNet-B1 efficientnet_b1r   r  r  N)r  r  r  rJ   rJ   rN   r  
  r  r  c                 K   r  )z EfficientNet-B2 efficientnet_b2r  r  r  N)r  r  r  rJ   rJ   rN   r    r  r  c                 K   r  z EfficientNet-B3 efficientnet_b3r  r  r  N)r  r  r  rJ   rJ   rN   r    r  r  c                 K   r  )z EfficientNet-B4 efficientnet_b4r  ?r  N)r  r  r  rJ   rJ   rN   r  %  r  r  c                 K   r   EfficientNet-B5 efficientnet_b5皙?皙@r  Nr  r  r  rJ   rJ   rN   r  .  r  r  c                 K   r  )z EfficientNet-B6 efficientnet_b6r  @r  N)r  r  r  rJ   rJ   rN   r  7  r  r  c                 K   r  )z EfficientNet-B7 efficientnet_b7       @@r  N)r  r  r  rJ   rJ   rN   r  @  r  r  c                 K   r  )z EfficientNet-B8 efficientnet_b8r  @r  N)r  r  r  rJ   rJ   rN   r  I  r  r  c                 K   r  )z EfficientNet-L2.efficientnet_l2333333@333333@r  N)r  r  r  rJ   rJ   rN   r  R  r  r  c                 K   s"   t 	dttdd| d|}|S )z EfficientNet-B0 + GroupNormefficientnet_b0_gnr   r)  )r;   r   N)r  r.  r   r   r  rJ   rJ   rN   r  \  s   r  c                 K   s$   t 	ddttdd| d|}|S )z* EfficientNet-B0 w/ group conv + GroupNormefficientnet_b0_g8_gnr   r)  )r   r;   r   N)r  r  r  rJ   rJ   rN   r  d  s   r  c                 K   r  )z+ EfficientNet-B0 w/ group 16 conv + EvoNormefficientnet_b0_g16_evosr  )r   r-  r   N)r  r  r  rJ   rJ   rN   r  m  s   r  c              	   K   s(   t 	ddddttdd| d|}|S )	z EfficientNet-B3 w/ GroupNorm efficientnet_b3_gnr  r  r  r)  )r   r   r-  r;   r   N)r  r  r  rJ   rJ   rN   r  v  s   r  c              
   K   s*   t 	d	ddddttdd| d|}|S )
z% EfficientNet-B3 w/ grouped conv + BNefficientnet_b3_g8_gnr  r  r   r  r)  )r   r   r   r-  r;   r   N)r  r  r  rJ   rJ   rN   r    s   r  c                 K   s   t 	ddd| dd|}|S )z EfficientNet-B0 w/ BlurPool efficientnet_blur_b0r   blurpc)r   r   r   r<   N)r  r  r  rJ   rJ   rN   r    s   r  c                 K   r  )z EfficientNet-Edge Small. efficientnet_esr   r  N)r  r9  r  rJ   rJ   rN   r    r  r  c                 K   r  )zw EfficientNet-Edge Small Pruned. For more info: https://github.com/DeGirum/pruned-models/releases/tag/efficientnet_v1.0efficientnet_es_prunedr   r  N)r  r  r  rJ   rJ   rN   r    r  r  c                 K   r  )z EfficientNet-Edge-Medium. efficientnet_emr   r  r  N)r  r  r  rJ   rJ   rN   r    r  r  c                 K   r  )z EfficientNet-Edge-Large. efficientnet_elr  r  r  N)r  r  r  rJ   rJ   rN   r    r  r  c                 K   r  )zw EfficientNet-Edge-Large pruned. For more info: https://github.com/DeGirum/pruned-models/releases/tag/efficientnet_v1.0efficientnet_el_prunedr  r  r  N)r  r  r  rJ   rJ   rN   r    r  r  c                 K   r  )' EfficientNet-CondConv-B0 w/ 8 Experts efficientnet_cc_b0_4er   r  N)r  r;  r  rJ   rJ   rN   r    r  r  c                 K   s   t 	dddd| d|}|S )r  efficientnet_cc_b0_8er   rC   r   r   r:  r   N)r!  r   r  rJ   rJ   rN   r!       r!  c                 K      t 	dddd| d|}|S )z' EfficientNet-CondConv-B1 w/ 8 Experts efficientnet_cc_b1_8er   r  rC   r"  N)r%  r   r  rJ   rJ   rN   r%    r#  r%  c                 K   r  ) EfficientNet-Lite0 efficientnet_lite0r   r  N)r'  rA  r  rJ   rJ   rN   r'    r  r'  c                 K   r  ) EfficientNet-Lite1 efficientnet_lite1r   r  r  N)r*  r(  r  rJ   rJ   rN   r*    r  r*  c                 K   r  ) EfficientNet-Lite2 efficientnet_lite2r  r  r  N)r,  r(  r  rJ   rJ   rN   r,    r  r,  c                 K   r  ) EfficientNet-Lite3 efficientnet_lite3r  r  r  N)r.  r(  r  rJ   rJ   rN   r.    r  r.  c                 K   r  ) EfficientNet-Lite4 efficientnet_lite4r  r  r  N)r0  r(  r  rJ   rJ   rN   r0    r  r0  c                 K   s:   | dt | dd d}t|fddd| d|}|S )	zc EfficientNet-B1 Pruned. The pruning has been obtained using https://arxiv.org/pdf/2002.08258.pdf  r  r9   sameefficientnet_b1_prunedr   r  Tr   r   prunedr   r  r   r.  )r   r   r   r   rJ   rJ   rN   r2  	  s   r2  c                 K   6   | dt | dd t	d
ddd| d|}|S )zb EfficientNet-B2 Pruned. The pruning has been obtained using https://arxiv.org/pdf/2002.08258.pdf r  r9   r1  efficientnet_b2_prunedr  r  Tr3  N)r7  r5  r  rJ   rJ   rN   r7  	     r7  c                 K   r6  )zb EfficientNet-B3 Pruned. The pruning has been obtained using https://arxiv.org/pdf/2002.08258.pdf r  r9   r1  efficientnet_b3_prunedr  r  Tr3  N)r9  r5  r  rJ   rJ   rN   r9  	  r8  r9  c                 K   r$  )z; EfficientNet-V2 Tiny (Custom variant, tiny not in paper). efficientnetv2_rw_t皙?r  Fr   r   rN  r   N)r:  rO  r  rJ   rJ   rN   r:  %	     r:  c                 K   s    t 	ddddd| d|}|S )	zR EfficientNet-V2 Tiny w/ Global Context Attn (Custom variant, tiny not in paper). gc_efficientnetv2_rw_tr;  r  Fgc)r   r   rN  r=   r   N)r?  r=  r  rJ   rJ   rN   r?  -	  s   r?  c                 K   s   t dd| d|}|S )z EfficientNet-V2 Small (RW variant).
    NOTE: This is my initial (pre official code release) w/ some differences.
    See efficientnetv2_s and tf_efficientnetv2_s for versions that match the official w/ PyTorch vs TF padding
    efficientnetv2_rw_sT)rN  r   N)rA  r=  r  rJ   rJ   rN   rA  6	  s   rA  c                 K   r$  )z* EfficientNet-V2 Medium (RW variant).
    efficientnetv2_rw_mr  )r  r  r  r  r  r  Tr<  N)rB  r=  r  rJ   rJ   rN   rB  @	  r#  rB  c                 K      t dd| i|}|S )z EfficientNet-V2 Small. efficientnetv2_sr   N)rD  r=  r  rJ   rJ   rN   rD  J	  r  rD  c                 K   rC  )z EfficientNet-V2 Medium. efficientnetv2_mr   N)rE  )rV  r  rJ   rJ   rN   rE  Q	  r  rE  c                 K   rC  )z EfficientNet-V2 Large. efficientnetv2_lr   N)rF  )r[  r  rJ   rJ   rN   rF  X	  r  rF  c                 K   rC  )z EfficientNet-V2 Xtra-Large. efficientnetv2_xlr   N)rG  )r^  r  rJ   rJ   rN   rG  _	  r  rG  c                 K   4   | dt | dd t	ddd| d|}|S )	z1 EfficientNet-B0. Tensorflow compatible variant  r  r9   r1  tf_efficientnet_b0r   r  N)rI  r5  r  rJ   rJ   rN   rI  f	     rI  c                 K   4   | dt | dd t	d	dd| d|}|S )
z1 EfficientNet-B1. Tensorflow compatible variant  r  r9   r1  tf_efficientnet_b1r   r  r  N)rL  r5  r  rJ   rJ   rN   rL  p	  rJ  rL  c                 K   rK  )
z1 EfficientNet-B2. Tensorflow compatible variant  r  r9   r1  tf_efficientnet_b2r  r  r  N)rM  r5  r  rJ   rJ   rN   rM  z	  rJ  rM  c                 K   rK  )
z0 EfficientNet-B3. Tensorflow compatible variant r  r9   r1  tf_efficientnet_b3r  r  r  N)rN  r5  r  rJ   rJ   rN   rN  	  rJ  rN  c                 K   rK  )
z0 EfficientNet-B4. Tensorflow compatible variant r  r9   r1  tf_efficientnet_b4r  r  r  N)rO  r5  r  rJ   rJ   rN   rO  	  rJ  rO  c                 K   rK  )
z0 EfficientNet-B5. Tensorflow compatible variant r  r9   r1  tf_efficientnet_b5r  r  r  N)rP  r5  r  rJ   rJ   rN   rP  	  rJ  rP  c                 K   rK  )
z0 EfficientNet-B6. Tensorflow compatible variant r  r9   r1  tf_efficientnet_b6r  r  r  N)rQ  r5  r  rJ   rJ   rN   rQ  	     rQ  c                 K   rK  )
z0 EfficientNet-B7. Tensorflow compatible variant r  r9   r1  tf_efficientnet_b7r	  r
  r  N)rS  r5  r  rJ   rJ   rN   rS  	  rR  rS  c                 K   rK  )
z0 EfficientNet-B8. Tensorflow compatible variant r  r9   r1  tf_efficientnet_b8r  r  r  N)rT  r5  r  rJ   rJ   rN   rT  	  rR  rT  c                 K   rK  )
z= EfficientNet-L2 NoisyStudent. Tensorflow compatible variant r  r9   r1  tf_efficientnet_l2r  r  r  N)rU  r5  r  rJ   rJ   rN   rU  	  rR  rU  c                 K   rH  )	z9 EfficientNet-Edge Small. Tensorflow compatible variant  r  r9   r1  tf_efficientnet_esr   r  N)rV  r  r   r9  r  rJ   rJ   rN   rV  	  rJ  rV  c                 K   rK  )
z: EfficientNet-Edge-Medium. Tensorflow compatible variant  r  r9   r1  tf_efficientnet_emr   r  r  N)rX  rW  r  rJ   rJ   rN   rX  	  rJ  rX  c                 K   rK  )
z9 EfficientNet-Edge-Large. Tensorflow compatible variant  r  r9   r1  tf_efficientnet_elr  r  r  N)rY  rW  r  rJ   rJ   rN   rY  	  rJ  rY  c                 K   rH  )	zF EfficientNet-CondConv-B0 w/ 4 Experts. Tensorflow compatible variant r  r9   r1  tf_efficientnet_cc_b0_4er   r  N)rZ  r  r   r;  r  rJ   rJ   rN   rZ  	  rR  rZ  c                 K   s6   | dt | dd t	d	ddd| d|}|S )
zF EfficientNet-CondConv-B0 w/ 8 Experts. Tensorflow compatible variant r  r9   r1  tf_efficientnet_cc_b0_8er   rC   r"  N)r\  r[  r  rJ   rJ   rN   r\  	     r\  c                 K   r6  )zF EfficientNet-CondConv-B1 w/ 8 Experts. Tensorflow compatible variant r  r9   r1  tf_efficientnet_cc_b1_8er   r  rC   r"  N)r^  r[  r  rJ   rJ   rN   r^  
  r]  r^  c                 K   rH  )	r&  r  r9   r1  tf_efficientnet_lite0r   r  N)r_  r  r   rA  r  rJ   rJ   rN   r_  
  rR  r_  c                 K   rK  )
r)  r  r9   r1  tf_efficientnet_lite1r   r  r  N)ra  r`  r  rJ   rJ   rN   ra  
  rR  ra  c                 K   rK  )
r+  r  r9   r1  tf_efficientnet_lite2r  r  r  N)rb  r`  r  rJ   rJ   rN   rb  %
  rR  rb  c                 K   rK  )
r-  r  r9   r1  tf_efficientnet_lite3r  r  r  N)rc  r`  r  rJ   rJ   rN   rc  0
  rR  rc  c                 K   rK  )
r/  r  r9   r1  tf_efficientnet_lite4r  r  r  N)rd  r`  r  rJ   rJ   rN   rd  ;
  rR  rd  c                 K   .   | dt | dd tdd| i|}|S )z7 EfficientNet-V2 Small. Tensorflow compatible variant  r  r9   r1  tf_efficientnetv2_sr   N)rf  )r  r   rO  r  rJ   rJ   rN   rf  F
     rf  c                 K   re  )z8 EfficientNet-V2 Medium. Tensorflow compatible variant  r  r9   r1  tf_efficientnetv2_mr   N)rh  )r  r   rV  r  rJ   rJ   rN   rh  O
  rg  rh  c                 K   re  )z7 EfficientNet-V2 Large. Tensorflow compatible variant  r  r9   r1  tf_efficientnetv2_lr   N)ri  )r  r   r[  r  rJ   rJ   rN   ri  X
  rg  ri  c                 K   re  )z? EfficientNet-V2 Xtra-Large. Tensorflow compatible variant
    r  r9   r1  tf_efficientnetv2_xlr   N)rj  )r  r   r^  r  rJ   rJ   rN   rj  a
  s   rj  c                 K   re  )z4 EfficientNet-V2-B0. Tensorflow compatible variant  r  r9   r1  tf_efficientnetv2_b0r   N)rk  r  r   rH  r  rJ   rJ   rN   rk  k
  rg  rk  c                 K   rK  )
z4 EfficientNet-V2-B1. Tensorflow compatible variant  r  r9   r1  tf_efficientnetv2_b1r   r  r  N)rm  rl  r  rJ   rJ   rN   rm  t
  rJ  rm  c                 K   rK  )
z4 EfficientNet-V2-B2. Tensorflow compatible variant  r  r9   r1  tf_efficientnetv2_b2r  r  r  N)rn  rl  r  rJ   rJ   rN   rn  ~
  rJ  rn  c                 K   rK  )
z3 EfficientNet-V2-B3. Tensorflow compatible variant r  r9   r1  tf_efficientnetv2_b3r  r  r  N)ro  rl  r  rJ   rJ   rN   ro  
  rJ  ro  c                 K   r  r  r`  r  rJ   rJ   rN   efficientnet_x_b3
  r  rq  c                 K   r  r   rp  r  rJ   rJ   rN   efficientnet_x_b5
  r  rr  c                 K   r$  )r  r  gQ?r  rC   )r   r   r_  r   Nr  rp  r  rJ   rJ   rN   efficientnet_h_b5
  r>  rs  c                 K      t 	dd| d|}|S )z"Creates a MixNet Small model.
    mixnet_sr   r   r   N)ru  )rd  r  rJ   rJ   rN   ru  
     ru  c                 K   rt  )z#Creates a MixNet Medium model.
    mixnet_mr   rv  N)rx  ri  r  rJ   rJ   rN   rx  
  rw  rx  c                 K   rt  )z"Creates a MixNet Large model.
    mixnet_l?rv  N)rz  ry  r  rJ   rJ   rN   rz  
  rw  rz  c                 K   r  )zgCreates a MixNet Extra-Large model.
    Not a paper spec, experimental def by RW w/ depth scaling.
    	mixnet_xlr  r  r  N)r|  ry  r  rJ   rJ   rN   r|  
     r|  c                 K   r  )znCreates a MixNet Double Extra Large model.
    Not a paper spec, experimental def by RW w/ depth scaling.
    
mixnet_xxlg333333@r{  r  N)r~  ry  r  rJ   rJ   rN   r~  
  r}  r~  c                 K   2   | dt | dd t	dd| d|}|S )	z@Creates a MixNet Small model. Tensorflow compatible variant
    r  r9   r1  tf_mixnet_sr   rv  N)r  )r  r   rd  r  rJ   rJ   rN   r  
     r  c                 K   r  )	zACreates a MixNet Medium model. Tensorflow compatible variant
    r  r9   r1  tf_mixnet_mr   rv  N)r  r  r   ri  r  rJ   rJ   rN   r  
  r  r  c                 K   r  )	z@Creates a MixNet Large model. Tensorflow compatible variant
    r  r9   r1  tf_mixnet_lr{  rv  N)r  r  r  rJ   rJ   rN   r  
  r  r  c                 K      t dd| i|}|S )N)	tinynet_ar   r  r   rk  r  rJ   rJ   rN   r  
     r  c                 K   r  )N)	tinynet_br  r  r   r  r  rJ   rJ   rN   r    r  r  c                 K   r  )N)	tinynet_cHzG?g333333?r   r  r  rJ   rJ   rN   r    r  r  c                 K   r  )N)	tinynet_dr  g=
ףp=?r   r  r  rJ   rJ   rN   r    r  r  c                 K   r  )N)	tinynet_egRQ?g333333?r   r  r  rJ   rJ   rN   r    r  r  c                 K   rC  )z MobileNet-EdgeTPU-v1 100. mobilenet_edgetpu_100r   N)r  r  r  rJ   rJ   rN   r    r  r  c                 K   rC  )z# MobileNet-EdgeTPU-v2 Extra Small. mobilenet_edgetpu_v2_xsr   N)r  r  r  rJ   rJ   rN   r     r  r  c                 K   rC  )z MobileNet-EdgeTPU-v2 Small. mobilenet_edgetpu_v2_sr   N)r  r  r  rJ   rJ   rN   r  '  r  r  c                 K   rC  )z MobileNet-EdgeTPU-v2 Medium. mobilenet_edgetpu_v2_mr   N)r  r  r  rJ   rJ   rN   r  .  r  r  c                 K   rC  )z MobileNet-EdgeTPU-v2 Large. mobilenet_edgetpu_v2_lr   N)r  r  r  rJ   rJ   rN   r  5  r  r  c                 K   s   t dd| i|}|S )Ntest_efficientnetr   )r  )r  r  rJ   rJ   rN   r  <  r  r  c                 K   "   t 	d| ttddd|}|S )Ntest_efficientnet_gnr   r)  r   r;   )r  )r  r   r   r  rJ   rJ   rN   r  B     r  c                 K   s   t 	d| td|}|S )Ntest_efficientnet_lnr  )r  )r  r   r  rJ   rJ   rN   r  I  s   r  c                 K   r  )Ntest_efficientnet_evosr   r)  r  )r  )r  r   r   r  rJ   rJ   rN   r  P  r  r  tf_efficientnet_b0_aptf_efficientnet_b1_aptf_efficientnet_b2_aptf_efficientnet_b3_aptf_efficientnet_b4_aptf_efficientnet_b5_aptf_efficientnet_b6_aptf_efficientnet_b7_aptf_efficientnet_b8_aptf_efficientnet_b0_nstf_efficientnet_b1_nstf_efficientnet_b2_nstf_efficientnet_b3_nstf_efficientnet_b4_nstf_efficientnet_b5_nstf_efficientnet_b6_nstf_efficientnet_b7_ns)tf_efficientnet_l2_ns_475tf_efficientnet_l2_nstf_efficientnetv2_s_in21ft1ktf_efficientnetv2_m_in21ft1ktf_efficientnetv2_l_in21ft1ktf_efficientnetv2_xl_in21ft1ktf_efficientnetv2_s_in21ktf_efficientnetv2_m_in21ktf_efficientnetv2_l_in21ktf_efficientnetv2_xl_in21kefficientnet_b2aefficientnet_b3a
mnasnet_a1
mnasnet_b1r   )r   F)r   r   NFFF)r   r   NFF)r   r   r   NF)r   r   NF)r   r   r   F)r   r   F)r   r   r   Nr   F)r.   )r   	functoolsr   typingr   r   r   r   r   r   r   torch.nnrT   torch.nn.functional
functionalr   	timm.datar	   r
   r   r   timm.layersr   r   r   r   r   r   r   _builderr   r   _efficientnet_blocksr   _efficientnet_builderr   r   r   r   r   r   r   r   	_featuresr    r!   r"   _manipulater#   r$   	_registryr%   r&   r'   __all__r   r(   r)   r   r   r   r   r  r  r  r  r.  r9  r;  rA  rH  rO  rV  r[  r^  r`  rd  ri  rk  r  r  r  default_cfgsr  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r!  r%  r'  r*  r,  r.  r0  r2  r7  r9  r:  r?  rA  rB  rD  rE  rF  rG  rI  rL  rM  rN  rO  rP  rQ  rS  rT  rU  rV  rX  rY  rZ  r\  r^  r_  ra  rb  rc  rd  rf  rh  ri  rj  rk  rm  rn  ro  rq  rr  rs  ru  rx  rz  r|  r~  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   rJ   rJ   rJ   rN   <module>   s   % $(  ^$$%%$3! *)!!!S!!Y
	$%*+.148<BEINRVZ^adfhjnopqsuwz~                       !  &  ,  0  4  8  =  ?  A  C  F  J  N  R  V  Z  ^  b  f  j  o  s  x  }                           !    %    *    .    2    6    :    >    B    F    K    O    S    W    [    _    d    i    n    t    x    |           	                  
      "      '
      ,
      1
      7      <
      A
      G      L
      Q
      V
      \
      `      d
      h
      l      p      u      x      {      ~                               
        



        F				
		


								



			





						


	
