
    Ng[                    Z(   d Z ddlmZ ddlmZmZmZmZmZ ddl	Z	ddl
mZ ddlmc 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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l0m1Z1 ddl2m3Z3m4Z4m5Z5 ddgZ6 G d dej7                  Z8 G d dej7                  Z9ddZ:d	dZ;d	dZ<d	dZ=	 	 d
dZ>	 	 ddZ?d	dZ@d	dZA	 	 ddZB	 ddZC	 dd ZDdd!ZE	 dd"ZF	 dd#ZG	 dd$ZH	 dd%ZI	 dd&ZJ	 	 dd'ZKd	d(ZLdd)ZMdd*ZNdd+ZOdd,ZPdd.ZQ e3i d/ eQ            d0 eQ            d1 eQd2d34          d5 eQ            d6 eQ            d7 eQd8d34          d9 eQd:d34          d; eQ            d< eQd=d34          d> eQd3eed?d@A          dB eQd3eed?d@A          dC eQd3eedDd?dE          dF eQ            dG eQdHd3dIJ          dK eQ            dL eQdMd34          dN eQdOd34          i dP eQdQd34          dR eQdSd34          dT eQdUd3dVJ          dW eQdXd3dVJ          dY eQdZd34          d[ eQd3eedDd?dE          d\ eQd3eed]dDd^d_d`          da eQdbd3d?dc          dd eQded3d?d^d_df          dg eQdhd3d_didjdf          dk eQdld3djdmdndf          do eQd3dpdqddrs          dt eQd3dudvd@dwx          dy eQd-dzd{d|}          d~ eQd-ddd}          d eQd-ddd}          d eQd-ddd}          i d eQ            d eQ            d eQ            d eQd_didjd          d eQd_didjd          d eQ            d eQdd34          d eQdd3d]d^d          d eQdd3ddmd          d eQdd34          d eQdd3ddmd          d eQ            d eQ            d eQd]d^d          d eQdd34          d eQd]d^d          d eQddid          i d eQddmd          d eQddd          d eQdd3d]d^dee          d eQdd3ddidee          d eQdd3ddmdee          d eQdd3dd_dd          d eQdd3dd_dd          d eQdd3d_dndid          d eQdd3djdudmd          d eQd_dndid          d eQdjdudmd          d eQdnddd          d eQdnddd          d eQdd3dɦ          d eQdd3d]d^d          d eQdd3ddid          d eQdd3ddmd          i d eQdd3ddd          d eQdd3ddd֬          d eQdd3dzd{d|          d eQdd3ddd          d eQdd3dddެ          d eQdd3dddᬖ          d eQdd3eed          d eQdd3eed]d^d          d eQdd3eeddid          d eQdd3eeddmd          d eQdd3eeddd          d eQdd3eeddd֬          d eQdd3eedzd{d|          d eQdd3eeddd          d eQdd3eeddd          d eQdd3ddd֬          d eQdd3ddd          i d eQdd3ddd          d eQdd3dɦ          d eQdd3d]d^d          d  eQdd3ddid          d eQdd3ddmd          d eQdd3ddd          d eQdd3ddd֬          d eQd	d3dzd{d|          d
 eQdd3ddd          d eQdd3dɦ          d eQdd3d]d^d          d eQdd3ddid          d eQdd3ddmd          d eQdd3ddd          d eQdd3ddd֬          d eQdd3ddd          d eQdd3ddd]d^d          i d eQdd3ddddmd          d eQd d3ee!          d" eQd#d3ee!          d$ eQd%d3eed]d^d          d& eQd'd3dddI(          d) eQd*d3ddd]d^ddI+          d, eQd-d3ddddiddI+          d. eQd/d3ddddmddV+          d0 eQd1d3ddddd2dV+          d3 eQd4d3ddddndmd5          d6 eQd7d3dddnddddr8	  	        d9 eQd:d3dddnddddr8	  	        d; eQd<d3dddnddddr8	  	        d= eQd>d3ddddndmd5          d? eQd@d3dddnddddr8	  	        dA eQdBd3dddnddddr8	  	        dC eQdDd3dddEddndmdF	  	        i dG eQdHd3dddEdnddddrI
  
        dJ eQdKd3dddEdnddddrI
  
        dL eQdMd3dddEdnddddrI
  
        dN eQdOd3dPddQR          dS eQdTd3dPd]dQd          dU eQdVd3dWddd          dX eQd3eed]dd^dDdrY          dZ eQd[d3d]dd^d          d\ eQd3eedEd]dd^d]          d^ eQd_d34          d` eQdad34          db eQdcd34          dd eQded34          df eQ            dg eQdhd34          di eQdjd34          dk eQdld34           eQdPdQdmd3n           eQdodQdpd3n           eQdqdQdrd3n           eQdsdtdud3n           eQdvdwdxd3n           eQddDy           eQddDy           eQddDy           eQd3eedDd?d@E           eQddDy           eQd3dzdtd@{           eQd3dzdtd@{           eQd3dddzdtd@|           eQd3dddzdtd@|          d}          ZRe4dd~e8fd            ZSe4dd~e8fd            ZTe4dd~e8fd            ZUe4dd~e8fd            ZVe4dd~e8fd            ZWe4dd~e8fd            ZXe4dd~e8fd            ZYe4dd~e8fd            ZZe4dd~e8fd            Z[e4dd~e8fd            Z\e4dd~e8fd            Z]e4dd~e8fd            Z^e4dd~e8fd            Z_e4dd~e8fd            Z`e4dd~e8fd            Zae4dd~e8fd            Zbe4dd~e8fd            Zce4dd~e8fd            Zde4dd~e8fd            Zee4dd~e8fd            Zfe4dd~e8fd            Zge4dd~e8fd            Zhe4dd~e8fd            Zie4dd~e8fd            Zje4dd~e8fd            Zke4dd~e8fd            Zle4dd~e8fd            Zme4dd~e8fd            Zne4dd~e8fd            Zoe4dd~e8fd            Zpe4dd~e8fd            Zqe4dd~e8fd            Zre4dd~e8fd            Zse4dd~e8fd            Zte4dd~e8fd            Zue4dd~e8fd            Zve4dd~e8fd            Zwe4dd~e8fd            Zxe4dd~e8fd            Zye4dd~e8fd            Zze4dd~e8fd            Z{e4dd~e8fd            Z|e4dd~e8fd            Z}e4dd~e8fd            Z~e4dd~e8fd            Ze4dd~e8fd            Ze4dd~e8fd            Ze4dd~e8fd            Ze4dd~e8fd            Ze4dd~e8fd            Ze4dd~e8fd            Ze4dd~e8fd            Ze4dd~e8fd            Ze4dd~e8fd            Ze4dd~e8fd            Ze4dd~e8fd            Ze4dd~e8fd            Ze4dd~e8fd            Ze4dd~e8fd            Ze4dd~e8fd            Ze4dd~e8fd            Ze4dd~e8fd            Ze4dd~e8fd            Ze4dd~e8fd            Ze4dd~e8fd            Ze4dd~e8fd            Ze4dd~e8fd            Ze4dd~e8fd            Ze4dd~e8fdÄ            Ze4dd~e8fdĄ            Ze4dd~e8fdń            Ze4dd~e8fdƄ            Ze4dd~e8fdǄ            Ze4dd~e8fdȄ            Ze4dd~e8fdɄ            Ze4dd~e8fdʄ            Ze4dd~e8fd˄            Ze4dd~e8fd̄            Ze4dd~e8fd̈́            Ze4dd~e8fd΄            Ze4dd~e8fdτ            Ze4dd~e8fdЄ            Ze4dd~e8fdф            Ze4dd~e8fd҄            Ze4dd~e8fdӄ            Ze4dd~e8fdԄ            Ze4dd~e8fdՄ            Ze4dd~e8fdք            Ze4dd~e8fdׄ            Ze4dd~e8fd؄            Ze4dd~e8fdل            Ze4dd~e8fdڄ            Ze4dd~e8fdۄ            Ze4dd~e8fd܄            Ze4dd~e8fd݄            Ze4dd~e8fdބ            Ze4dd~e8fd߄            Ze4dd~e8fd            Ze4dd~e8fd            Ze4dd~e8fd            Ze4dd~e8fd            Ze4dd~e8fd            Ze4dd~e8fd            Ze4dd~e8fd            Ze4dd~e8fd            Ze4dd~e8fd            Ze4dd~e8fd            Ze4dd~e8fd            Ze4dd~e8fd            Ze4dd~e8fd            Ze4dd~e8fd            Ze4dd~e8fd            Ze4dd~e8fd            Ze4dd~e8fd            Ze4dd~e8fd            Z e5ei ddddddddddddddddddddǓddʓdd̓ddΓddГd dғddדddٓddߐd3d6d9d;dCdGdJdL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ListOptionalTupleUnionN)
checkpoint)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)generate_default_cfgsregister_modelregister_model_deprecationsEfficientNetEfficientNetFeaturesc            #       z    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f" fdZd Zej        j        d5d            Zej        j        d6d             Zej        j        d!ej        fd"            Zd7dedefd#Z	 	 	 	 	 	 d8d%ej        d&e	eeee         f                  d'ed(ed)ed*ed+ed!eeej                 eej        eej                 f         f         fd,Z	 	 	 	 d9d&eeee         f         d.ed/ed+efd0Zd1 Zd5d2efd3Zd4 Z  xZ!S ):r(   a   EfficientNet

    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
                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_poolc           
      ~   t          t          |                                            |
pt          j        }
|pt          j        }t          ||
          }|pt          }|| _        || _	        d| _
        |s ||          }t          |||d|	          | _         ||d          | _        t          ||	||
||||          }t          j         |||           | _        |j        | _        d | j        D             | _        |j        }|dk    r9t          ||d	|	
          | _         ||d          | _        |x| _        | _        n>t          j                    | _        t          j                    | _        |x| _        | _        t5          | j        | j        |          \  | _        | _        t;          |            d S )NF   stridepaddingTinplace)r9   r:   r?   r;   r<   r=   r>   rA   c                     g | ]
}|d          S )stage .0fs     T/var/www/html/ai-engine/env/lib/python3.11/site-packages/timm/models/efficientnet.py
<listcomp>z)EfficientNet.__init__.<locals>.<listcomp>|   s    AAA!1W:AAA    r   r   )rG   	pool_type)superr(   __init__nnReLUBatchNorm2dr   r   r3   r@   grad_checkpointingr   	conv_stembn1r   
Sequentialblocksfeaturesfeature_info
stage_endsin_chs	conv_headbn2r4   head_hidden_sizeIdentityr   rB   
classifierr   )selfr2   r3   r4   r5   r6   r7   r8   r9   r:   r;   r<   r=   r>   r?   r@   rA   rB   norm_act_layerbuilderhead_chs	__class__s                        rP   rV   zEfficientNet.__init__L   s   ( 	lD!!**,,,(	12>
+J	BB,}&""'  	0$Y//I&x<LUV`hiii!>)T::: &'%!)	
 	
 	
 mWWY
%C%CD#,AAt/@AAA> !*8\1hWWWDN%~lDAAADH8DDD 5 5[]]DN{}}DH8@@D 5,=t/;-H -H -H)$/ 	"$'''''rR   c                 "   | j         | j        g}|                    | j                   |                    | j        | j        | j        g           |                    t          j        | j	                  | j
        g           t          j        | S N)r[   r\   extendr^   rc   rd   rB   rW   Dropoutr@   rg   r]   )rh   layerss     rP   as_sequentialzEfficientNet.as_sequential   sv    .$(+dk"""t~tx1ABCCCrz$.114?CDDD}f%%rR   c                 4    t          d|rdndd fdg          S )Nz^conv_stem|bn1z^blocks\.(\d+)z^blocks\.(\d+)\.(\d+))zconv_head|bn2)i )stemr^   )dict)rh   coarses     rP   group_matcherzEfficientNet.group_matcher   s8    "&,J""2JDQ,
 
 
 	
rR   Tc                     || _         d S rn   rZ   rh   enables     rP   set_grad_checkpointingz#EfficientNet.set_grad_checkpointing       "(rR   returnc                     | j         S rn   )rg   )rh   s    rP   get_classifierzEfficientNet.get_classifier   s
    rR   c                 f    || _         t          | j        | j         |          \  | _        | _        d S )NrS   )r3   r   r4   rB   rg   )rh   r3   rB   s      rP   reset_classifierzEfficientNet.reset_classifier   s<    &,=t/;-H -H -H)$///rR   NCHWxindicesnorm
stop_early
output_fmtintermediates_onlyextra_blocksc                     |dv s
J d            g }|r)t          t           j                  dz   |          \  }	}
n@t          t           j                  |          \  }	}
 fd|	D             }	 j        |
         }
d}                     |          }                     |          }||	v r|                    |           t          j        	                                s|s j        }n j        d|
         }|D ]+}|dz  } ||          }||	v r|                    |           ,|r|S | j        d         k    r* 
                    |          }                     |          }||fS )aa   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:

        )r   zOutput shape must be NCHW.r   c                 *    g | ]}j         |         S rL   )ra   )rN   irh   s     rP   rQ   z6EfficientNet.forward_intermediates.<locals>.<listcomp>   s     EEE1DOA.EEErR   r   N)r#   lenr^   ra   r[   r\   appendtorchjitis_scriptingrc   rd   )rh   r   r   r   r   r   r   r   intermediatestake_indices	max_indexfeat_idxr^   blks   `             rP   forward_intermediatesz"EfficientNet.forward_intermediates   s   . Y&&&(D&&& 	3&:3t{;K;Ka;OQX&Y&Y#L))&:3t;O;OQX&Y&Y#L)EEEEEEEL	2INN1HHQKK|##  ###9!!## 	-: 	-[FF[),F 	( 	(CMHAA<''$$Q''' 	!  tr***q!!AA-rR   r   
prune_norm
prune_headc                    |r)t          t          | j                  dz   |          \  }}n2t          t          | j                  |          \  }}| j        |         }| j        d|         | _        |s|t          | j                  k     r0t	          j                    | _        t	          j                    | _        |r|                     dd           |S )z@ Prune layers not required for specified intermediates.
        r   Nr   r/   )	r#   r   r^   ra   rW   rf   rc   rd   r   )rh   r   r   r   r   r   r   s          rP   prune_intermediate_layersz&EfficientNet.prune_intermediate_layers   s      	3&:3t{;K;Ka;OQX&Y&Y#L))&:3t;O;OQX&Y&Y#L)	2Ik*9*- 	%S%5%555[]]DN{}}DH 	)!!!R(((rR   c                 R   |                      |          }|                     |          }| j        r6t          j                                        st          | j        |d          }n|                     |          }|                     |          }| 	                    |          }|S )NT)flatten)
r[   r\   rZ   r   r   r   r$   r^   rc   rd   rh   r   s     rP   forward_featureszEfficientNet.forward_features   s    NN1HHQKK" 	59+A+A+C+C 	t{At<<<AAAANN1HHQKKrR   
pre_logitsc                     |                      |          }| j        dk    r!t          j        || j        | j                  }|r|n|                     |          S )Nr0   )ptraining)rB   r@   Fdropoutr   rg   )rh   r   r   s      rP   forward_headzEfficientNet.forward_head  sW    Q>B	!t~FFFA6qqDOOA$6$66rR   c                 Z    |                      |          }|                     |          }|S rn   )r   r   r   s     rP   forwardzEfficientNet.forward  s-    !!!$$a  rR   FT)r1   )NFFr   FF)r   FTF)"__name__
__module____qualname____doc__r   r   intboolstrr   r   r   floatrV   rr   r   r   ignorerw   r|   rW   Moduler   r   Tensorr   r   r   r   r   r   r   r   __classcell__rl   s   @rP   r(   r(   <   sW        $  $ $$%"!#-1.2,0,0%3!$&$%@( @(!@( @( 	@(
 @( @( "@( @( @( @(  	*@( !+@( y)@( y)@( #@(  !@(" "#@($ %@( @( @( @( @( @(D& & & Y
 
 
 
 Y) ) ) ) Y	    H HC Hc H H H H 8<$$',!&7  7 |7  eCcN347  	7 
 7  7  !%7  7  
tEL!5tEL7I)I#JJ	K7  7  7  7 v ./$#!& 3S	>*  	
    ,	 	 	7 7$ 7 7 7 7      rR   c            !           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Zej        j        d d            Zdeej                 fdZ x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   rD   r-      
bottleneckr-   r.   Fr/   Nr0   r2   out_indices.feature_locationr5   r6   r7   r8   r9   r:   r;   r<   r=   r>   r?   r@   rA   c                    t          t          |                                            |
pt          j        }
|pt          j        }t          ||
          }|pt          }|| _        d| _	        |s ||          }t          |||d|	          | _         ||d          | _        t          ||	||
|||||	  	        }t          j         |||           | _        t!          |j        |          | _        d | j                                        D             | _        t+          |            d | _        |dk    rD| j                            d	
          }t/          ||                                           | _        d S d S )NFrD   rE   TrH   )	r9   r:   r?   r;   r<   r=   r>   rA   r   c                 ,    i | ]}|d          |d         S )rK   indexrL   rM   s     rP   
<dictcomp>z1EfficientNetFeatures.__init__.<locals>.<dictcomp>H  s"    ]]]!qz1W:]]]rR   r   )module	hook_type)keys)rU   r)   rV   rW   rX   rY   r   r   r@   rZ   r   r[   r\   r   r]   r^   r!   r_   r`   	get_dicts_stage_out_idxr   feature_hooksr"   named_modules)rh   r2   r   r   r5   r6   r7   r8   r9   r:   r;   r<   r=   r>   r?   r@   rA   ri   rj   hooksrl   s                       rP   rV   zEfficientNetFeatures.__init__  s   & 	"D))22444(	12>
+J	BB,}""'  	0$Y//I&x<LUV`hiii!>)T::: &'%!)-

 

 

 mWWY
%C%CD'(8+FF]]t?P?Z?Z?\?\]]]!$''' "|++%//5L/MME!-eT5G5G5I5I!J!JD ,+rR   Tc                     || _         d S rn   ry   rz   s     rP   r|   z+EfficientNetFeatures.set_grad_checkpointingR  r}   rR   r~   c                 J   |                      |          }|                     |          }| j        g }d| j        v r|                    |           t          | j                  D ]g\  }}| j        r/t          j	        
                                st          ||          }n ||          }|dz   | j        v r|                    |           h|S |                     |           | j                            |j                  }t          |                                          S )Nr   r   )r[   r\   r   r   r   	enumerater^   rZ   r   r   r   r	   
get_outputdevicelistvalues)rh   r   r_   r   bouts         rP   r   zEfficientNetFeatures.forwardV  s   NN1HHQKK%HD'''"""!$+.. ' '1* 593I3I3K3K "1a((AA!Aq5D///OOA&&&OKKNNN$//99C

%%%rR   r   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   rV   r   r   r   r|   r   r   r   r   r   s   @rP   r)   r)     s         ,;$0$%"!#-1.2,0,0%3!$&#7K 7K!7K sCx7K "	7K
 7K 7K "7K 7K 7K 7K  	*7K !+7K y)7K y)7K #7K  !7K" "#7K 7K 7K 7K 7K 7Kr Y) ) ) )&D. & & & & & & & &rR   Fc                     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                  x|_        |_        |S )
Nr/   features_onlyFfeature_cfgfeature_clscfg)r3   r4   	head_convrB   cls)r   pretrained_strictkwargs_filter)r(   popr)   r   r   pretrained_cfgdefault_cfg)variant
pretrainedkwargsfeatures_mode	model_clsr   models          rP   _create_effnetr   k  s    MIMzz/5)) "F""mv&=&=!MMWM,I!M  $u,'50#   E 3NuOc3d3ddu0LrR         ?c                    dgdgdgdgdgdgdgg}t          dt          |          dt          t          |	          |                    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r2   r6   r?   r<   rL   	ru   r   r   r   r   rW   rY   r   r   r   channel_multiplierr   r   arch_defmodel_kwargsr   s          rP   _gen_mnasnet_a1r     s     
%%		$%		%&	%&	H   "8,,^8JKKK::lD11gWR^5g5g_eOfOf5g5g	 
  L 7J??,??ELrR   c                    dgdgdgdgdgdgdgg}t          dt          |          dt          t          |	          |                    d
d          p#t          t
          j        fi t          |          d|}t          | |fi |}|S )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   rL   r   r   s          rP   _gen_mnasnet_b1r     s     
""						%&H   "8,,^8JKKK::lD11gWR^5g5g_eOfOf5g5g	 
  L 7J??,??ELrR   c                    dgdgdgdgdgdgdgg}t          dt          |          dt          t          |	          |                    d
d          p#t          t
          j        fi t          |          d|}t          | |fi |}|S )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   rL   r   r   s          rP   _gen_mnasnet_smallr    s     
			$%	$%	$%	H  "8,,^8JKKK::lD11gWR^5g5g_eOfOf5g5g	 
  L 7J??,??ELrR   c                 ~   dgdgdgdgdgg}t          t          |          }	|r|rdnt          d |	d                    nd}
t          dt	          ||||	          |
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r2   r4   r6   r8   r?   r<   r;   rL   )r   r   maxru   r   r   rW   rY   r   r   r   )r   r   r  r  fix_stem_headr   r   r   r   r?   head_featuresr   r   s                rP   _gen_mobilenet_v1r    s    
				H >6HIIILR[b]MTTD,,t:L:L0M0M0MabM "-(!	
 
 
 #!::lD11gWR^5g5g_eOfOf5g5g#FG44   L 7J??,??ELrR   c                 z   dgdgdgdgdgdgdgg}t          t          |          }t          dt          ||||	          |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  rL   )r   r   ru   r   r  r   rW   rY   r   r   r   )r   r   r  r  r  r   r   r   r?   r   r   s              rP   _gen_mobilenet_v2r    s    
						H >6HIIIL "-(!	
 
 
 +MTTD,,t:L:L0M0M!::lD11gWR^5g5g_eOfOf5g5g#FG44   L 7J??,??ELrR   c                     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          p#t          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)r2   r6   r4   r?   r<   rL   r   r   s          rP   _gen_fbnetcr.  3  s     
	34```JJJ	 56		H  "8,,^8JKKK::lD11gWR^5g5g_eOfOf5g5g   L 7J??,??ELrR   c                    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          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   rL   r   r   s          rP   _gen_spnasnetr6  Q  s     
""		34	34	34		%&H   "8,,^8JKKK::lD11gWR^5g5g_eOfOf5g5g	 
  L 7J??,??ELrR   r  c                 T   dgdgdgdgdgdgdgg}t          t          ||          }t          dt          |||	           |d
          d|t	          |d          |                    dd          p#t          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r2   r4   r6   r?   r;   r<   rL   
r   r   ru   r   r   r   rW   rY   r   r   )r   r   r  channel_divisorr  r   r   r   r?   r   r   s              rP   _gen_efficientnetrF  t  s    8 
%%	$%	$%	$%	%&	%&	%&H >6HRabbbL "8-=*UUU!\$''!#FG44::lD11gWR^5g5g_eOfOf5g5g   L 7J??,??ELrR   c                 N   dgdgdgdgdgdgg}t          t          |          }t          dt          |||           |d	          d
||                    dd          p#t          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   rA  r,   r.   r<   Nrelur2   r4   r6   r?   r<   r;   rL   
r   r   ru   r   r   rW   rY   r   r   r   
r   r   r  r  r   r   r   r?   r   r   s
             rP   _gen_efficientnet_edgerR    s     
**						H >6HIIIL "8-=*UUU!\$''!::lD11gWR^5g5g_eOfOf5g5g#FF33   L 7J??,??ELrR   c                 R   dgdgdgdgdgdgdgg}t          t          |          }t          dt          |||	           |d
          d||                    dd          p#t          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
    r8  r9  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<   NrB  rO  rL   rP  )
r   r   r  rT  r   r   r   r?   r   r   s
             rP   _gen_efficientnet_condconvrU    s     
%%	$%	$%	$%	)*	)*	)*H >6HIIIL "8-=Rdeee!\$''!::lD11gWR^5g5g_eOfOf5g5g#FG44   L 7J??,??ELrR   c                 >   dgdgdgdgdgdgdgg}t          dt          ||d	          d
ddt          t          |          t	          |d          |                    dd          p#t          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r2   r4   r6   r8   r?   r;   r<   rL   )
ru   r   r   r   r   r   rW   rY   r   r   r   r   r  r   r   r   r   r   s           rP   _gen_efficientnet_liter\    s    & 
						H  	"8-=dSSS^8JKKK#FG44::lD11gWR^5g5g_eOfOf5g5g	 	 	 	L 7J??,??ELrR   c                 P   dgdgdgdgdgdgg}t          t          |d          }t          dt          |||	           |d
          d||                    dd          p#t          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.25r0   r   round_limitrA  r,   r.   r<   NsilurO  rL   rP  rQ  s
             rP   _gen_efficientnetv2_baserd    s     
##			$%	%&	%&H >6HVXYYYL "8-=*UUU!\$''!::lD11gWR^5g5g_eOfOf5g5g#FF33   L 7J??,??ELrR   c                 r   dgdgdgdgdgdgg}d}|rdg|d	<   d
g|d<   d}t          t          |          }	t          dt          |||           |	|          d|	|                    dd          p#t          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   rA     r<   Nrc  rO  rL   rP  )r   r   r  r  rwr   r   r   r4   r?   r   r   s               rP   _gen_efficientnetv2_srl  -  s    
##			%&	%&	&'H L	 +,56>6HIIIL "8-=*UUU!\,//!::lD11gWR^5g5g_eOfOf5g5g#FF33   L 7J??,??ELrR   c                 <   dgdgdgdgdgdgdgg}t          dt          |||          d	d
t          t          |          |                    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.25rA  r,   rj  r   r<   Nrc  rO  rL   
ru   r   r   r   r   rW   rY   r   r   r   	r   r   r  r  r   r   r   r   r   s	            rP   _gen_efficientnetv2_mrs  U  s     
##			%&	&'	&'	%&H  "8-=*UUU^8JKKK::lD11gWR^5g5g_eOfOf5g5g#FF33   L 7J??,??ELrR   c                 <   dgdgdgdgdgdgdgg}t          dt          |||          d	d
t          t          |          |                    dd          p#t          t
          j        fi t          |          t          |d          d|}t          | |fi |}|S )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.25rA  r,   r.   r   r<   Nrc  rO  rL   rq  rr  s	            rP   _gen_efficientnetv2_lrx  u       
##			&'	&'	&'	%&H  "8-=*UUU^8JKKK::lD11gWR^5g5g_eOfOf5g5g#FF33   L 7J??,??ELrR   c                 <   dgdgdgdgdgdgdgg}t          dt          |||          d	d
t          t          |          |                    dd          p#t          t
          j        fi t          |          t          |d          d|}t          | |fi |}|S )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
    ru  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.25rA  r,   r.   r   r<   Nrc  rO  rL   rq  rr  s	            rP   _gen_efficientnetv2_xlr}    ry  rR   c                    	 |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          ||          }	t          dt          |||           |	d          d|	t	          |d          |                    dd          p#t          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?  rA  r,   r.   rc  r<   NrC  rL   rD  )r   r   r  rE  r  versionr   r   r   r?   r   r   s               rP   _gen_efficientnet_xr    s5   6, !||+,,-,-())*)*)*
 ,,,-,-())*)*)*
 >6HRabbbL "8-=*UUU!\$''!#FF33::lD11gWR^5g5g_eOfOf5g5g   L 7J??,??ELrR   c                    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          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
    rW  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r2   r4   r6   r?   r<   rL   r   r   s          rP   _gen_mixnet_sr    s     
	')GH	+-WX	13YZ	68gh	13]^H  "8,,^8JKKK::lD11gWR^5g5g_eOfOf5g5g   L 7J??,??ELrR   c                 $   dgddgddgddgdd	gd
dgg}t          dt          ||d          ddt          t          |          |                    dd          p#t          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_nswr  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_truncr  rj  r   r<   Nr  rL   r   r[  s           rP   _gen_mixnet_mr  )  s     
	+-KL	-/YZ	,.]^	(*YZ	.0Z[H  "8-=7SSS^8JKKK::lD11gWR^5g5g_eOfOf5g5g   L 7J??,??ELrR   c                 z   dgdgdgdgdgdgdgg}t          dt          ||d	          t          d
t          d
|dd                    ddt	          t          |          t          |d          |                    dd          p#t	          t          j        fi t          |          d|}t          | |fi |}|S )zCreates a TinyNet model.
    r8  r9  r:  r;  r<  r=  r>  r  r  r,   r  Nr.   Tr   rB  r<   rZ  rL   )ru   r   r  r   r   r   r   rW   rY   r   r   )r   model_widthr  r   r   r   r   r   s           rP   _gen_tinynetr  J  s     
%%(C'D	$%(C'D	%&)E(F	%&	H  	"8-=7SSS~dKDIIJJ^DDD#FG44::lD11gWR^5g5g_eOfOf5g5g	 	 	 	L 7J??,??ELrR   c                 D   d| v rtd}d}d}d}t          |d          }	dt          t                   dt          fd}
d	| v r	d
}d}g d}n%d| v rg d}nd| v rg d}d}nd| v rd}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%          p#t          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,   rN  chsr  c           
      >   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_crD   er_r1_k3_s1_e4_cr-   ir_r3_k3_s1_e4_cir_r1_k3_s1_e8_cr   ir_r1_k3_s2_e8_cr     rL   )r  r  s     rP   	_arch_defz)_gen_mobilenet_edgetpu.<locals>._arch_defl  s    *Q))*,CF,,.X*.X.XPSTUPV.X.XY 0s1v//>
>>c!f>>/s1v//>
>>c!f>>	 -CF,,.IQ.I.IJ,CF,,.IQ.I.IJ,CF,,.IQ.I.IJ,CF,,-' rR   edgetpu_v2_xsr.   r-   )r-  r.   0   `            edgetpu_v2_s)rj  r  r     r  r     edgetpu_v2_m)r.   r  P   r  r     @  i@  edgetpu_v2_l   r  )r.   r  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)r2   r4   r6   r7   r?   r<   r;   rL   )r   r   r   ru   r   r   r   r   rW   rY   r   r   )r   r   r  r   r   r6   r7   r  r4   r;   r  channelsr   r   r   s                  rP   _gen_mobilenet_edgetpur  a  s    w	
%ff55		49 	# 	 	 	 	. g%%I 666HHw&&777HHw&&777HLLw&& J777HLLL9Xz22 	%ff55	 !#78!#78!#78(*>?"$9:"#
"  	"8-=>>!)^8JKKK::lD11gWR^5g5g_eOfOf5g5g	 	 	 	L 7J??,??ELrR   c                 H   dgdgdgdgdgg}t          t          |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.
    r^  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.25r0   ra  r  rj  r<   Nrc  rO  rL   rP  )	r   r   r  r   r   r   r?   r   r   s	            rP   _gen_test_efficientnetr    s     
##			$%	$%H >6HVXYYYL "8-=>>!\#&&!::lD11gWR^5g5g_eOfOf5g5g#FF33   L 7J??,??ELrR   r/   c                 4    | dddddt           t          ddd
|S )	Nr+   r-      r  r  r  g      ?bicubicr[   rg   )
urlr3   
input_size	pool_sizecrop_pctinterpolationmeanstd
first_convrg   )r
   r   )r  r   s     rP   _cfgr    s5    4}SYI%.B!	 
  rR   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  r3   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  r3   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  r3   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  )r  r  )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  r3   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  )r  r  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_in1kr~   c                 "    t          dd| i|}|S )z& MNASNet B1, depth multiplier of 0.5. mnasnet_050r  r   )r  r  r   r   r   r   s      rP   r  r    !     PP:PPPELrR   c                 "    t          dd| i|}|S )z' MNASNet B1, depth multiplier of 0.75. mnasnet_075      ?r   )r  r  r  r  s      rP   r  r  %  s!     QQJQ&QQELrR   c                 "    t          dd| i|}|S )z& MNASNet B1, depth multiplier of 1.0. mnasnet_100r   r   )r  r   r  r  s      rP   r  r  ,  r  rR   c                 "    t          dd| i|}|S )z& MNASNet B1,  depth multiplier of 1.4 mnasnet_140ffffff?r   )r  r  r  r  s      rP   r  r  3  r  rR   c                 "    t          dd| i|}|S )z- MNASNet A1 (w/ SE), depth multiplier of 0.5 semnasnet_050r  r   )r  r  r   r  s      rP   r  r  :  !     RRZR6RRELrR   c                 "    t          dd| i|}|S )z0 MNASNet A1 (w/ SE),  depth multiplier of 0.75. semnasnet_075r  r   )r  r  r  r  s      rP   r  r  A  s!     SSjSFSSELrR   c                 "    t          dd| i|}|S )z. MNASNet A1 (w/ SE), depth multiplier of 1.0. semnasnet_100r   r   )r  r   r  r  s      rP   r  r  H  r  rR   c                 "    t          dd| i|}|S )z. MNASNet A1 (w/ SE), depth multiplier of 1.4. semnasnet_140r  r   )r	  r  r  r  s      rP   r	  r	  O  r  rR   c                 "    t          dd| i|}|S )z* MNASNet Small,  depth multiplier of 1.0. mnasnet_smallr   r   )r  r   )r  r  s      rP   r  r  V  s!     UU
UfUUELrR   c                 "    t          dd| i|}|S ) MobileNet V1 mobilenetv1_100r   r   )r  r   r  r  s      rP   r  r  ]  !     VVVvVVELrR   c                 $    t          dd| d|}|S )r  mobilenetv1_100hr   T)r   r   )r  r   r  r  s      rP   r  r  d  s%     gR\gg`fggELrR   c                 "    t          dd| i|}|S )r  mobilenetv1_125      ?r   )r  r  r  r  s      rP   r  r  k  "     WW*WPVWWELrR   c                 "    t          dd| i|}|S )z) MobileNet V2 w/ 0.35 channel multiplier mobilenetv2_035ffffff?r   )r  r  r  r  s      rP   r  r  r  r  rR   c                 "    t          dd| i|}|S )z( MobileNet V2 w/ 0.5 channel multiplier mobilenetv2_050r  r   )r  r  r  r  s      rP   r  r  y  r  rR   c                 "    t          dd| i|}|S )z) MobileNet V2 w/ 0.75 channel multiplier mobilenetv2_075r  r   )r  r  r  r  s      rP   r  r    r  rR   c                 "    t          dd| i|}|S )z( MobileNet V2 w/ 1.0 channel multiplier mobilenetv2_100r   r   )r   r   r  r  s      rP   r   r     r  rR   c                 "    t          dd| i|}|S )z( MobileNet V2 w/ 1.4 channel multiplier mobilenetv2_140r  r   )r"  r  r  r  s      rP   r"  r"    r  rR   c                 (    t          	 ddd| d|}|S )z3 MobileNet V2 w/ 1.1 channel, 1.2 depth multipliersmobilenetv2_110d皙?333333?Tr  r  r   )r$  r%  r  r  s      rP   r$  r$    :     l25TV`l ldjl lELrR   c                 (    t          	 ddd| d|}|S )z4 MobileNet V2 w/ 1.2 channel, 1.4 depth multipliers mobilenetv2_120dr&  r  Tr'  )r*  r&  r  r  s      rP   r*  r*    r(  rR   c                 \    | r|                     dt                     t          dd| i|}|S )z	 FBNet-C bn_eps
fbnetc_100r   r   )r-  r   )
setdefaultr    r.  r  s      rP   r-  r-    s@      7($5666KKjKFKKELrR   c                 "    t          dd| i|}|S )z Single-Path NAS Pixel1spnasnet_100r   r   )r0  r   )r6  r  s      rP   r0  r0    s!     OO*OOOELrR   c                 (    t          	 ddd| d|}|S )z EfficientNet-B0 efficientnet_b0r   r   r  r   )r2  rF  r  s      rP   r2  r2    :     j.1CT^j jbhj jELrR   c                 (    t          	 ddd| d|}|S )z EfficientNet-B1 efficientnet_b1r   r%  r3  )r7  r4  r  s      rP   r7  r7    r5  rR   c                 (    t          	 ddd| d|}|S )z EfficientNet-B2 efficientnet_b2r%  r&  r3  )r9  r4  r  s      rP   r9  r9    r5  rR   c                 (    t          	 ddd| d|}|S z EfficientNet-B3 efficientnet_b3r&  r  r3  )r<  r4  r  s      rP   r<  r<    r5  rR   c                 (    t          	 ddd| d|}|S )z EfficientNet-B4 efficientnet_b4r  ?r3  )r>  r4  r  s      rP   r>  r>    r5  rR   c                 (    t          	 ddd| d|}|S  EfficientNet-B5 efficientnet_b5皙?皙@r3  rC  r4  r  s      rP   rC  rC    r5  rR   c                 (    t          	 ddd| d|}|S )z EfficientNet-B6 efficientnet_b6r?  @r3  )rH  r4  r  s      rP   rH  rH    r5  rR   c                 (    t          	 ddd| d|}|S )z EfficientNet-B7 efficientnet_b7       @@r3  )rK  r4  r  s      rP   rK  rK    r5  rR   c                 (    t          	 ddd| d|}|S )z EfficientNet-B8 efficientnet_b8rE  @r3  )rO  r4  r  s      rP   rO  rO    r5  rR   c                 (    t          	 ddd| d|}|S )z EfficientNet-L2.efficientnet_l2333333@333333@r3  )rR  r4  r  s      rP   rR  rR    r5  rR   c                 N    t          	 dt          t          d          | d|}|S )z EfficientNet-B0 + GroupNormefficientnet_b0_gnr  rA  )r<   r   )rV  rF  r   r   r  s      rP   rV  rV    sE     o)0!)L)L)LYco ogmo oELrR   c                 P    t          	 ddt          t          d          | d|}|S )z* EfficientNet-B0 w/ group conv + GroupNormefficientnet_b0_g8_gnr  rA  )r  r<   r   )rY  rW  r  s      rP   rY  rY    sE     ),-',[\:]:]:]) )!') )E LrR   c                 (    t          	 ddd| d|}|S )z+ EfficientNet-B0 w/ group 16 conv + EvoNormefficientnet_b0_g16_evosr-  )r  rE  r   )r[  r4  r  s      rP   r[  r[  "  s7     ")/12) )!') )E LrR   c           
      T    t          	 ddddt          t          d          | d|}|S )z EfficientNet-B3 w/ GroupNorm efficientnet_b3_gnr&  r  r-  rA  )r   r  rE  r<   r   )r]  rW  r  s      rP   r]  r]  +  sN     Z14s\^<B777JZ ZRXZ ZE LrR   c                 V    t          	 dddddt          t          d          | d|}|S )	z% EfficientNet-B3 w/ grouped conv + BNefficientnet_b3_g8_gnr&  r  r  r-  rA  )r   r  r  rE  r<   r   )r_  rW  r  s      rP   r_  r_  5  sQ     Z47#Z[mo<B777JZ ZRXZ ZE LrR   c                 *    t          	 ddd| dd|}|S )z EfficientNet-B0 w/ BlurPool efficientnet_blur_b0r   blurpc)r   r  r   r=   )ra  r4  r  s      rP   ra  ra  ?  s:     36Yc # E LrR   c                 (    t          	 ddd| d|}|S )z EfficientNet-Edge Small. efficientnet_esr   r3  )rd  rR  r  s      rP   rd  rd  J  :     #j.1CT^j jbhj jELrR   c                 (    t          	 ddd| d|}|S )zw EfficientNet-Edge Small Pruned. For more info: https://github.com/DeGirum/pruned-models/releases/tag/efficientnet_v1.0efficientnet_es_prunedr   r3  )rh  re  r  s      rP   rh  rh  R  :     # q583[eq qioq qELrR   c                 (    t          	 ddd| d|}|S )z EfficientNet-Edge-Medium. efficientnet_emr   r%  r3  )rk  re  r  s      rP   rk  rk  Y  rf  rR   c                 (    t          	 ddd| d|}|S )z EfficientNet-Edge-Large. efficientnet_elr&  r  r3  )rm  re  r  s      rP   rm  rm  a  rf  rR   c                 (    t          	 ddd| d|}|S )zw EfficientNet-Edge-Large pruned. For more info: https://github.com/DeGirum/pruned-models/releases/tag/efficientnet_v1.0efficientnet_el_prunedr&  r  r3  )ro  re  r  s      rP   ro  ro  h  ri  rR   c                 (    t          	 ddd| d|}|S )' EfficientNet-CondConv-B0 w/ 8 Experts efficientnet_cc_b0_4er   r3  )rr  rU  r  s      rP   rr  rr  o  s:     'p47#Zdp phnp pELrR   c                 *    t          	 dddd| d|}|S )rq  efficientnet_cc_b0_8er   rD   r   r  rT  r   )ru  rs  r  s      rP   ru  ru  x  :     ')47#bc) )!') )E LrR   c                 *    t          	 dddd| d|}|S )z' EfficientNet-CondConv-B1 w/ 8 Experts efficientnet_cc_b1_8er   r%  rD   rv  )ry  rs  r  s      rP   ry  ry    rw  rR   c                 (    t          	 ddd| d|}|S ) EfficientNet-Lite0 efficientnet_lite0r   r3  )r|  r\  r  s      rP   r|  r|    :     #m14sWam mekm mELrR   c                 (    t          	 ddd| d|}|S ) EfficientNet-Lite1 efficientnet_lite1r   r%  r3  )r  r}  r  s      rP   r  r    r~  rR   c                 (    t          	 ddd| d|}|S ) EfficientNet-Lite2 efficientnet_lite2r%  r&  r3  )r  r}  r  s      rP   r  r    r~  rR   c                 (    t          	 ddd| d|}|S ) EfficientNet-Lite3 efficientnet_lite3r&  r  r3  )r  r}  r  s      rP   r  r    r~  rR   c                 (    t          	 ddd| d|}|S ) EfficientNet-Lite4 efficientnet_lite4r  r?  r3  )r  r}  r  s      rP   r  r    r~  rR   c                     |                     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,  r:   sameefficientnet_b1_prunedr   r%  Tr   r  prunedr   r.  r    rF  )r   r   r   r   s       rP   r  r    sn     h 1222
j&)))&Gm$'#dWam mekm mELrR   c                     |                     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,  r:   r  efficientnet_b2_prunedr%  r&  Tr  )r  r  r  s      rP   r  r    g     h 1222
j&))) )583W[) )!') )E LrR   c                     |                     dt                     |                     dd           t          	 d	ddd| d|}|S )
zb EfficientNet-B3 Pruned. The pruning has been obtained using https://arxiv.org/pdf/2002.08258.pdf r,  r:   r  efficientnet_b3_prunedr&  r  Tr  )r  r  r  s      rP   r  r    r  rR   c                 *    t          	 dddd| d|}|S )z; EfficientNet-V2 Tiny (Custom variant, tiny not in paper). efficientnetv2_rw_t皙?r  Fr   r  rk  r   )r  rl  r  s      rP   r  r    s=     "x25PUblx xpvx xELrR   c           	      ,    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  rk  r>   r   )r  r  r  s      rP   r  r    s@     " B5834JB B:@B BE LrR   c                 $    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)rk  r   )r  r  r  s      rP   r  r    s$     "bDZbb[abbELrR   c                 *    t          	 dddd| d|}|S )z* EfficientNet-V2 Medium (RW variant).
    efficientnetv2_rw_mr&  )r&  r&  r&  r&  rD  rD  Tr  )r  r  r  s      rP   r  r    s;     ")25H_dh) )!') )E LrR   c                 "    t          dd| i|}|S )z EfficientNet-V2 Small. efficientnetv2_sr   )r  r  r  s      rP   r  r    !     "VVVvVVELrR   c                 "    t          dd| i|}|S )z EfficientNet-V2 Medium. efficientnetv2_mr   )r  )rs  r  s      rP   r  r  	  r  rR   c                 "    t          dd| i|}|S )z EfficientNet-V2 Large. efficientnetv2_lr   )r  )rx  r  s      rP   r  r  	  r  rR   c                 "    t          dd| i|}|S )z EfficientNet-V2 Xtra-Large. efficientnetv2_xlr   )r  )r}  r  s      rP   r  r  	  s"     #XX:XQWXXELrR   c                     |                     dt                     |                     dd           t          	 ddd| d|}|S )z1 EfficientNet-B0. Tensorflow compatible variant  r,  r:   r  tf_efficientnet_b0r   r3  )r  r  r  s      rP   r  r  	  g     h 1222
j&)))m14sWam mekm mELrR   c                     |                     dt                     |                     dd           t          	 ddd| d|}|S )	z1 EfficientNet-B1. Tensorflow compatible variant  r,  r:   r  tf_efficientnet_b1r   r%  r3  )r  r  r  s      rP   r  r  %	  r  rR   c                     |                     dt                     |                     dd           t          	 ddd| d|}|S )	z1 EfficientNet-B2. Tensorflow compatible variant  r,  r:   r  tf_efficientnet_b2r%  r&  r3  )r  r  r  s      rP   r  r  /	  r  rR   c                     |                     dt                     |                     dd           t          	 ddd| d|}|S )	z0 EfficientNet-B3. Tensorflow compatible variant r,  r:   r  tf_efficientnet_b3r&  r  r3  )r  r  r  s      rP   r  r  9	  r  rR   c                     |                     dt                     |                     dd           t          	 ddd| d|}|S )	z0 EfficientNet-B4. Tensorflow compatible variant r,  r:   r  tf_efficientnet_b4r  r?  r3  )r  r  r  s      rP   r  r  C	  r  rR   c                     |                     dt                     |                     dd           t          	 ddd| d|}|S )	z0 EfficientNet-B5. Tensorflow compatible variant r,  r:   r  tf_efficientnet_b5rD  rE  r3  )r  r  r  s      rP   r  r  M	  r  rR   c                     |                     dt                     |                     dd           t          	 ddd| d|}|S )	z0 EfficientNet-B6. Tensorflow compatible variant r,  r:   r  tf_efficientnet_b6r?  rI  r3  )r  r  r  s      rP   r  r  W	  g     h 1222
j&)))m14sWam mekm mELrR   c                     |                     dt                     |                     dd           t          	 ddd| d|}|S )	z0 EfficientNet-B7. Tensorflow compatible variant r,  r:   r  tf_efficientnet_b7rL  rM  r3  )r  r  r  s      rP   r  r  b	  r  rR   c                     |                     dt                     |                     dd           t          	 ddd| d|}|S )	z0 EfficientNet-B8. Tensorflow compatible variant r,  r:   r  tf_efficientnet_b8rE  rP  r3  )r  r  r  s      rP   r  r  m	  r  rR   c                     |                     dt                     |                     dd           t          	 ddd| d|}|S )	z= EfficientNet-L2 NoisyStudent. Tensorflow compatible variant r,  r:   r  tf_efficientnet_l2rS  rT  r3  )r  r  r  s      rP   r  r  x	  r  rR   c                     |                     dt                     |                     dd           t          	 ddd| d|}|S )z9 EfficientNet-Edge Small. Tensorflow compatible variant  r,  r:   r  tf_efficientnet_esr   r3  )r  r.  r    rR  r  s      rP   r  r  	  g     h 1222
j&)))"m14sWam mekm mELrR   c                     |                     dt                     |                     dd           t          	 ddd| d|}|S )	z: EfficientNet-Edge-Medium. Tensorflow compatible variant  r,  r:   r  tf_efficientnet_emr   r%  r3  )r  r  r  s      rP   r  r  	  r  rR   c                     |                     dt                     |                     dd           t          	 ddd| d|}|S )	z9 EfficientNet-Edge-Large. Tensorflow compatible variant  r,  r:   r  tf_efficientnet_elr&  r  r3  )r  r  r  s      rP   r  r  	  r  rR   c                     |                     dt                     |                     dd           t          	 ddd| d|}|S )zF EfficientNet-CondConv-B0 w/ 4 Experts. Tensorflow compatible variant r,  r:   r  tf_efficientnet_cc_b0_4er   r3  )r  r.  r    rU  r  s      rP   r  r  	  sg     h 1222
j&)))&"s7:S]gs skqs sELrR   c                     |                     dt                     |                     dd           t          	 dddd| d|}|S )	zF EfficientNet-CondConv-B0 w/ 8 Experts. Tensorflow compatible variant r,  r:   r  tf_efficientnet_cc_b0_8er   rD   rv  )r  r  r  s      rP   r  r  	  g     h 1222
j&)))&")7:Sef) )!') )E LrR   c                     |                     dt                     |                     dd           t          	 d	ddd| d|}|S )
zF EfficientNet-CondConv-B1 w/ 8 Experts. Tensorflow compatible variant r,  r:   r  tf_efficientnet_cc_b1_8er   r%  rD   rv  )r  r  r  s      rP   r  r  	  r  rR   c                     |                     dt                     |                     dd           t          	 ddd| d|}|S )r{  r,  r:   r  tf_efficientnet_lite0r   r3  )r  r.  r    r\  r  s      rP   r  r  	  g     h 1222
j&)))"p47#Zdp phnp pELrR   c                     |                     dt                     |                     dd           t          	 ddd| d|}|S )	r  r,  r:   r  tf_efficientnet_lite1r   r%  r3  )r  r  r  s      rP   r  r  	  r  rR   c                     |                     dt                     |                     dd           t          	 ddd| d|}|S )	r  r,  r:   r  tf_efficientnet_lite2r%  r&  r3  )r  r  r  s      rP   r  r  	  r  rR   c                     |                     dt                     |                     dd           t          	 ddd| d|}|S )	r  r,  r:   r  tf_efficientnet_lite3r&  r  r3  )r  r  r  s      rP   r  r  	  r  rR   c                     |                     dt                     |                     dd           t          	 ddd| d|}|S )	r  r,  r:   r  tf_efficientnet_lite4r  r?  r3  )r  r  r  s      rP   r  r  	  r  rR   c                     |                     dt                     |                     dd           t          dd| i|}|S )z7 EfficientNet-V2 Small. Tensorflow compatible variant  r,  r:   r  tf_efficientnetv2_sr   )r  )r.  r    rl  r  s      rP   r  r  	  O     h 1222
j&)))!YYJYRXYYELrR   c                     |                     dt                     |                     dd           t          dd| i|}|S )z8 EfficientNet-V2 Medium. Tensorflow compatible variant  r,  r:   r  tf_efficientnetv2_mr   )r  )r.  r    rs  r  s      rP   r  r  
  r  rR   c                     |                     dt                     |                     dd           t          dd| i|}|S )z7 EfficientNet-V2 Large. Tensorflow compatible variant  r,  r:   r  tf_efficientnetv2_lr   )r  )r.  r    rx  r  s      rP   r  r  
  r  rR   c                     |                     dt                     |                     dd           t          dd| i|}|S )z? EfficientNet-V2 Xtra-Large. Tensorflow compatible variant
    r,  r:   r  tf_efficientnetv2_xlr   )r  )r.  r    r}  r  s      rP   r  r  
  sO     h 1222
j&)))"[[j[TZ[[ELrR   c                     |                     dt                     |                     dd           t          dd| i|}|S )z4 EfficientNet-V2-B0. Tensorflow compatible variant  r,  r:   r  tf_efficientnetv2_b0r   )r  r.  r    rd  r  s      rP   r  r   
  sO     h 1222
j&)))$]]
]V\]]ELrR   c                     |                     dt                     |                     dd           t          	 ddd| d|}|S )	z4 EfficientNet-V2-B1. Tensorflow compatible variant  r,  r:   r  tf_efficientnetv2_b1r   r%  r3  )r  r  r  s      rP   r  r  )
  g     h 1222
j&)))$o36Yco ogmo oELrR   c                     |                     dt                     |                     dd           t          	 ddd| d|}|S )	z4 EfficientNet-V2-B2. Tensorflow compatible variant  r,  r:   r  tf_efficientnetv2_b2r%  r&  r3  )r  r  r  s      rP   r  r  3
  r  rR   c                     |                     dt                     |                     dd           t          	 ddd| d|}|S )	z3 EfficientNet-V2-B3. Tensorflow compatible variant r,  r:   r  tf_efficientnetv2_b3r&  r  r3  )r  r  r  s      rP   r  r  =
  r  rR   c                 (    t          	 ddd| d|}|S r;  r  r  s      rP   efficientnet_x_b3r  G
  s:      j.1CT^j jbhj jELrR   c                 (    t          	 ddd| d|}|S rA  r  r  s      rP   efficientnet_x_b5r  P
  s:      j.1CT^j jbhj jELrR   c                 *    t          	 dddd| d|}|S )rB  rC  gQ?rE  rD   )r   r  r  r   rF  r  r  s      rP   efficientnet_h_b5r  X
  s=      v.2SRS`jv vntv vELrR   c                 &    t          	 dd| d|}|S )z"Creates a MixNet Small model.
    mixnet_sr   r   r   )r  )r  r  s      rP   r  r  `
  7     M'*zM MEKM MELrR   c                 &    t          	 dd| d|}|S )z#Creates a MixNet Medium model.
    mixnet_mr   r  )r  r  r  s      rP   r  r  i
  r  rR   c                 &    t          	 dd| d|}|S )z"Creates a MixNet Large model.
    mixnet_l?r  )r  r  r  s      rP   r  r  r
  r  rR   c                 (    t          	 ddd| d|}|S )zgCreates a MixNet Extra-Large model.
    Not a paper spec, experimental def by RW w/ depth scaling.
    	mixnet_xlrD  r&  r3  )r  r  r  s      rP   r  r  {
  s9    
 d(+cjd d\bd dELrR   c                 (    t          	 ddd| d|}|S )znCreates a MixNet Double Extra Large model.
    Not a paper spec, experimental def by RW w/ depth scaling.
    
mixnet_xxlg333333@r   r3  )r  r  r  s      rP   r  r  
  s9    
 e),sze e]ce eELrR   c                     |                     dt                     |                     dd           t          	 dd| d|}|S )z@Creates a MixNet Small model. Tensorflow compatible variant
    r,  r:   r  tf_mixnet_sr   r  )r  )r.  r    r  r  s      rP   r  r  
  d     h 1222
j&)))P*-*P PHNP PELrR   c                     |                     dt                     |                     dd           t          	 dd| d|}|S )zACreates a MixNet Medium model. Tensorflow compatible variant
    r,  r:   r  tf_mixnet_mr   r  )r	  r.  r    r  r  s      rP   r	  r	  
  r  rR   c                     |                     dt                     |                     dd           t          	 dd| d|}|S )z@Creates a MixNet Large model. Tensorflow compatible variant
    r,  r:   r  tf_mixnet_lr   r  )r  r
  r  s      rP   r  r  
  r  rR   c                 "    t          dd| i|}|S )N)	tinynet_ar   r&  r   r  r  s      rP   r  r  
  s    PP:PPPELrR   c                 "    t          dd| i|}|S )N)	tinynet_br  r%  r   r  r  s      rP   r  r  
      QQJQ&QQELrR   c                 "    t          dd| i|}|S )N)	tinynet_cHzG?g333333?r   r  r  s      rP   r  r  
  s    RRZR6RRELrR   c                 "    t          dd| i|}|S )N)	tinynet_dr  g=
ףp=?r   r  r  s      rP   r  r  
  s    SSjSFSSELrR   c                 "    t          dd| i|}|S )N)	tinynet_egRQ?g333333?r   r  r  s      rP   r  r  
  r  rR   c                 "    t          dd| i|}|S )z MobileNet-EdgeTPU-v1 100. mobilenet_edgetpu_100r   )r  r  r  s      rP   r  r  
  s"     #\\z\U[\\ELrR   c                 "    t          dd| i|}|S )z# MobileNet-EdgeTPU-v2 Extra Small. mobilenet_edgetpu_v2_xsr   )r  r  r  s      rP   r  r  
  s"     #^^^W]^^ELrR   c                 "    t          dd| i|}|S )z MobileNet-EdgeTPU-v2 Small. mobilenet_edgetpu_v2_sr   )r   r  r  s      rP   r   r   
  "     #]]
]V\]]ELrR   c                 "    t          dd| i|}|S )z MobileNet-EdgeTPU-v2 Medium. mobilenet_edgetpu_v2_mr   )r#  r  r  s      rP   r#  r#  
  r!  rR   c                 "    t          dd| i|}|S )z MobileNet-EdgeTPU-v2 Large. mobilenet_edgetpu_v2_lr   )r%  r  r  s      rP   r%  r%  
  r!  rR   c                 "    t          dd| i|}|S )Ntest_efficientnetr   )r'  )r  r  s      rP   r'  r'  
  s     "XX:XQWXXELrR   c                 N    t          	 d| t          t          d          d|}|S )Ntest_efficientnet_gnr  rA  r   r<   )r)  )r  r   r   r  s      rP   r)  r)  
  sC    "q+5',cdBeBeBeq qioq qELrR   c                 0    t          	 d| t          d|}|S )Ntest_efficientnet_lnr*  )r,  )r  r   r  s      rP   r,  r,  
  s5    "\+5.\ \TZ\ \ELrR   c                 N    t          	 d| t          t          d          d|}|S )Ntest_efficientnet_evosr  rA  r*  )r.  )r  r   r   r  s      rP   r.  r.    sC    " r-7GKdeDfDfDfr rjpr rELrR   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_nsr9  r<  r  r  )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   torch.nnrW   torch.nn.functional
functionalr   torch.utils.checkpointr	   	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$   	_registryr%   r&   r'   __all__r   r(   r)   r   r   r   r  r  r  r.  r6  rF  rR  rU  r\  rd  rl  rs  rx  r}  r  r  r  r  r  r  r  default_cfgsr  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>  rC  rH  rK  rO  rR  rV  rY  r[  r]  r_  ra  rd  rh  rk  rm  ro  rr  ru  ry  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  r  r  r  r  r  r  r	  r  r  r  r  r  r  r  r  r   r#  r%  r'  r)  r,  r.  r   rL   rR   rP   <module>r^     s4  $ $J       9 9 9 9 9 9 9 9 9 9 9 9 9 9                 - - - - - - r r r r r r r r r r r r. . . . . . . . . . . . . . . . . . G G G G G G G G / / / / / /J J J J J J J J J J J J J J J J J J J J F F F F F F F F F F ' ' ' ' ' ' Y Y Y Y Y Y Y Y Y Y1
2S S S S S29 S S SlV& V& V& V& V&29 V& V& V&r   4! ! ! !H! ! ! !H   < ;>JO! ! ! !J ;>9>" " " "J   <       H PQ$)/ / / /f \a   B af   @& & & &T \a   > fk% % % %R \a   B \a   B \a   B PQ/4P P P Pf   B   B   .V V V Vr   0    %$ &TTVV&TTVV& TTv  & TTVV& ttvv& tty     & ttv     & ttvv&  tt~     !&( *44$*@%T, , ,)&2 +DD$*@%T- - -3&< *44$*@m3, , ,=&H  I&J  {" " "K&T  U&V tt~     W&\ ! ! !]& &b ! ! !c&h tt~     i&p DDv " " "q&x ddx " " "y&D tt~     E&J *44$*@m3,H ,H ,HK&R *44$*@ 3&%S	,: ,: ,:S&\ tt{%S :  :  :]&d tt~ FMad f  f  fe&l  FMad!f !f !fm&t  D Hmcf!h !h !hu&| ' Hsh)X )X )X}&B  HtQV!X !X !XC&H  =Hu"N "N "NI&L  =Hu"N "N "NM&P  =Hu"N "N "NQ&T  =Hu"N "N "NU& & &\ #DDFF]&^ &ttvv_&` )$$&&a&b #DD FM\_%a %a %ac&f &tt FM\_(a (a (ag&j %ddffk&n tt~     o&t  FU!D !D !Du&| tt{ Hu F  F  F}&F "44 E$ $ $G&L "44 E Hu$F $F $FM&V &ttvvW&X &ttvvY&Z &tt}PVaf'g'g'g[&^ !$$ B# # #_&d #DD FU%D %D %De&h #DD FU%D %D %Di& & &l #DD Hu%F %F %Fm&p #DD Hu%F %F %Fq&v "44{ F4:P	$R $R $Rw&@ "44{ F4:P	$R $R $RA&J "44{ H4:P	$R $R $RK&V #DD A -6\_%a %a %aW&^ &tt G -6\_(a (a (a_&f #DD E -6\_%a %a %ag&n #DD D -8^a%c %c %co&x !$$ -6\_#a #a #ay&| !$$ -8^a#c #c #c}&@ !$$ -8^a#c #c #cA&D "44 -8^a$c $c $cE&J %dd B '" '" '"K&R %dd B FU'D 'D 'DS&Z %dd B FU'D 'D 'D[&b %dd B Hu'F 'F 'Fc& & &j %dd B Hu'F 'F 'Fk&r %dd B Hu'F 'F 'Fs&z %dd B Hu'F 'F 'F{&B %dd B Hu'F 'F 'FC&J )$$ F Hu+F +F +FK&R %dd B Ht'E 'E 'ES&\ !$$ B$*@]#\ #\ #\]&d !$$ B$*@ FU	#D #D #De&n !$$ B$*@ FU	#D #D #Do&x !$$ B$*@ Hu	#F #F #Fy&B !$$ B$*@ Hu	#F #F #FC&L !$$ B$*@ Hu	#F #F #FM&V !$$ B$*@ Hu	#F #F #FW&` !$$ B$*@ Hu	#F #F #Fa&j !$$ B$*@ Hu	#F #F #Fk&v !$$ B Hu#F #F #Fw&~ !$$ B Hu#F #F #F& & &F	 !$$ B Hu#F #F #FG	&P	 !$$ B #" #" #"Q	&X	 !$$ B FU#D #D #DY	&`	 !$$ B FU#D #D #Da	&h	 !$$ B Hu#F #F #Fi	&p	 !$$ B Hu#F #F #Fq	&x	 !$$ D Hu#F #F #Fy	&@
 !$$ B Hu#F #F #FA
&H
 !$$ D Hu#F #F #FI
&R
 tt A  "  "  "S
&Z
 tt A FU D  D  D[
&b
 tt A FU D  D  Dc
&j
 tt A Hu F  F  Fk
&r
 tt A Hu F  F  Fs
&z
 tt A Hu F  F  F{
&D tt~/ 	 $  $  $E&N tt~/ FU	 D  D  DO& & &X tt~/ Hu	 F  F  FY&d $TT E$*@&B &B &Be&l $TT E$*@&B &B &Bm&t $TT E$*@ FU	&D &D &Du&@ !$$ B/	# # #A&L !$$ B/ FU# # #M&Z !$$ B/ FU# # #[&h !$$ B/ HuT^	#` #` #`i&r !$$ B/ HuT^	#` #` #`s&~ ( M/ -8^a	*c *c *c&H ( M/ -8^amu	*w *w *wI&R ( M/ -8^amu	*w *w *wS&\ )$$ P/ -8^amu	+w +w +w]&h  F/ -8^a	!c !c !ci&r  F/ -8^amu	!w !w !ws&|  F/ -8^amu	!w !w !w}&H   J/u -8^a	"c "c "cI& & &R   J/u -8^amu	"w "w "wS&\   J/u -8^amu	"w "w "w]&f !$$ M/u -8^amu	#w #w #wg&r   G -6"S "S "Ss&z   G -6\a"c "c "c{&B   G -6\a"c "c "cC&J )$$$*@ -6\_ks+u +u +uK&R   G -6\a"c "c "cS&Z !$$$*@e -6\a#c #c #c[&d t  e&j t  k&p t  q&v x  w&| DDFF}&@ w  A&F w  G&L w  M& &T d F`   d F`   d F`   d F`   d F`  
 (,t 3(0 (0 (0 *. 3*0 *0 *0 )- 3)0 )0 )0 37$$*@m43 3 3
 )- 3)0 )0 )0 $(4 FT$C $C $C '+d FT'C 'C 'C '+d/ FT'C 'C 'C )-/ FT)C )C )Cw& & &  D  |      |      |      |                                    <      L      <      <      <      <      <      <      L      L      l            <      <      <      <      <      <      <      <      <      <      l            L      l                  <      ,      <      <      ,                        l      l      l      l      l      ,      ,      ,      |      ,      |      |      L      L      L      \      l      l      l      l      l      l      l      l      l      l      l      l      l      L      L      L                                    |      |      |                                    \      \      \      L      L      L      \      l      |      |      |      \    
  \    
  \    
  \    
  \    
        <      ,      ,      ,      \    
              ,      H  '9 '9 ' 9 ' 9	 '
 9 ' 9 ' 9 ' 9 ' 9 ' = ' = ' = ' = ' = ' = '  =! '" =# '$ "F=$G$G$G%I!<!<!<">))!? '  '  '          rR   