a
    dA                     @   s  U d dl Z d dlZd dl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Zd dlmZmZ d dlmZ ddl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 ddl m!Z! ddl"m#Z#m$Z$m%Z% g dZ&eG dd dZ'G dd de'Z(G dd de'Z)G dd dej*Z+G dd dej*Z,G dd dej*Z-eee(e)f  e.ee/ ee e0ee-dddZ1e2eeeee(e)f  ee/ f dd d!Z3d"e!iZ4e	e2ef e5d#< i e4d$d%d&Z6i e4d'd(d&Z7G d)d* d*eZ8G d+d, d,eZ9G d-d. d.eZ:G d/d0 d0eZ;G d1d2 d2eZ<G d3d4 d4eZ=G d5d6 d6eZ>G d7d8 d8eZ?G d9d: d:eZ@G d;d< d<eZAG d=d> d>eZBe e%d?e8jCfd@ddAdBee8 e0ee-dCdDdEZDe e%d?e9jCfd@ddAdBee9 e0ee-dCdFdGZEe e%d?e:jCfd@ddAdBee: e0ee-dCdHdIZFe e%d?e;jCfd@ddAdBee; e0ee-dCdJdKZGe e%d?e<jCfd@ddAdBee< e0ee-dCdLdMZHe e%d?e=jCfd@ddAdBee= e0ee-dCdNdOZIe e%d?e>jCfd@ddAdBee> e0ee-dCdPdQZJe e%d?e?jCfd@ddAdBee? e0ee-dCdRdSZKe e%d?e@jCfd@ddAdBee@ e0ee-dCdTdUZLe e%d?eAjCfd@ddAdBeeA e0ee-dCdVdWZMe e%d?eBjCfd@ddAdBeeB e0ee-dCdXdYZNdS )Z    N)	dataclass)partial)AnyCallableDictListOptionalSequenceTupleUnion)nnTensor)StochasticDepth   )Conv2dNormActivationSqueezeExcitation)ImageClassificationInterpolationMode)_log_api_usage_once   )register_modelWeightsWeightsEnum)_IMAGENET_CATEGORIES)_make_divisible_ovewrite_named_paramhandle_legacy_interface)EfficientNetEfficientNet_B0_WeightsEfficientNet_B1_WeightsEfficientNet_B2_WeightsEfficientNet_B3_WeightsEfficientNet_B4_WeightsEfficientNet_B5_WeightsEfficientNet_B6_WeightsEfficientNet_B7_WeightsEfficientNet_V2_S_WeightsEfficientNet_V2_M_WeightsEfficientNet_V2_L_Weightsefficientnet_b0efficientnet_b1efficientnet_b2efficientnet_b3efficientnet_b4efficientnet_b5efficientnet_b6efficientnet_b7efficientnet_v2_sefficientnet_v2_mefficientnet_v2_lc                   @   sn   e Zd ZU eed< eed< eed< eed< eed< eed< edejf ed< e	deee
e ed
ddZd	S )_MBConvConfigexpand_ratiokernelstrideinput_channelsout_channels
num_layers.blockN)channels
width_mult	min_valuereturnc                 C   s   t | | d|S )N   )r   )r<   r=   r>    rA   h/var/www/html/stable-diffusion-webui/venv/lib/python3.9/site-packages/torchvision/models/efficientnet.pyadjust_channels8   s    z_MBConvConfig.adjust_channels)N)__name__
__module____qualname__float__annotations__intr   r   Modulestaticmethodr   rC   rA   rA   rA   rB   r4   .   s   
r4   c                       sX   e Zd Zd
eeeeeeeeeedejf  dd
 fddZ	e
eeddd	Z  ZS )MBConvConfig      ?N.)
r5   r6   r7   r8   r9   r:   r=   
depth_multr;   r?   c
           
   	      sL   |  ||}|  ||}| ||}|	d u r0t}	t |||||||	 d S N)rC   adjust_depthMBConvsuper__init__)
selfr5   r6   r7   r8   r9   r:   r=   rN   r;   	__class__rA   rB   rS   ?   s    zMBConvConfig.__init__r:   rN   c                 C   s   t t| | S rO   )rI   mathceilrW   rA   rA   rB   rP   R   s    zMBConvConfig.adjust_depth)rM   rM   N)rD   rE   rF   rG   rI   r   r   r   rJ   rS   rK   rP   __classcell__rA   rA   rU   rB   rL   =   s"   
   rL   c                       s@   e Zd Zdeeeeeeeedejf  dd fddZ	  Z
S )FusedMBConvConfigN.)r5   r6   r7   r8   r9   r:   r;   r?   c              	      s(   |d u rt }t ||||||| d S rO   )FusedMBConvrR   rS   )rT   r5   r6   r7   r8   r9   r:   r;   rU   rA   rB   rS   Y   s    
zFusedMBConvConfig.__init__)N)rD   rE   rF   rG   rI   r   r   r   rJ   rS   rZ   rA   rA   rU   rB   r[   W   s   
 r[   c                       sR   e Zd Zefeeedejf edejf dd fddZ	e
e
dddZ  ZS )	rQ   .N)cnfstochastic_depth_prob
norm_layerse_layerr?   c           	         s  t    d|j  kr dks*n td|jdko>|j|jk| _g }tj}|	|j|j
}||jkr|t|j|d||d |t|||j|j|||d td|jd }||||ttjddd	 |t||jd|d d tj| | _t|d
| _|j| _d S )Nr   r   illegal stride valuekernel_sizer_   activation_layer)rc   r7   groupsr_   rd      T)inplace)Z
activationrow)rR   rS   r7   
ValueErrorr8   r9   use_res_connectr   SiLUrC   r5   appendr   r6   maxr   
Sequentialr;   r   stochastic_depth)	rT   r]   r^   r_   r`   layersrd   expanded_channelsZsqueeze_channelsrU   rA   rB   rS   i   sL    

zMBConv.__init__inputr?   c                 C   s&   |  |}| jr"| |}||7 }|S rO   r;   rj   ro   rT   rs   resultrA   rA   rB   forward   s
    

zMBConv.forward)rD   rE   rF   r   rL   rG   r   r   rJ   rS   r   rw   rZ   rA   rA   rU   rB   rQ   h   s   :rQ   c                       sB   e Zd Zeeedejf dd fddZe	e	dddZ
  ZS )	r\   .N)r]   r^   r_   r?   c              
      s   t    d|j  kr dks*n td|jdko>|j|jk| _g }tj}|	|j|j
}||jkr|t|j||j|j||d |t||jd|d d n"|t|j|j|j|j||d tj| | _t|d| _|j| _d S )Nr   r   ra   rc   r7   r_   rd   rb   rh   )rR   rS   r7   ri   r8   r9   rj   r   rk   rC   r5   rl   r   r6   rn   r;   r   ro   )rT   r]   r^   r_   rp   rd   rq   rU   rA   rB   rS      sH    

zFusedMBConv.__init__rr   c                 C   s&   |  |}| jr"| |}||7 }|S rO   rt   ru   rA   rA   rB   rw      s
    

zFusedMBConv.forward)rD   rE   rF   r[   rG   r   r   rJ   rS   r   rw   rZ   rA   rA   rU   rB   r\      s   4r\   c                	       sn   e Zd Zdeeeef  eeee	e
dejf  e	e dd fddZeedd	d
ZeedddZ  ZS )r   皙?  N.)inverted_residual_settingdropoutr^   num_classesr_   last_channelr?   c              
      s<  t    t|  |s tdn$t|tr<tdd |D sDtd|du rRtj	}g }|d j
}|td|dd|tjd	 td
d |D }	d}
|D ]p}g }t|jD ]L}t|}|r|j|_
d|_|t|
 |	 }||||| |
d7 }
q|tj|  q|d j}|dur |nd| }|t||d|tjd tj| | _td| _ttj|ddt||| _|  D ]}t|tjrtjj |j!dd |j"dur4tj#|j" nrt|tj	tj$frtj%|j! tj#|j" n@t|tjrdt&'|j( }tj)|j!| | tj#|j" qdS )a  
        EfficientNet V1 and V2 main class

        Args:
            inverted_residual_setting (Sequence[Union[MBConvConfig, FusedMBConvConfig]]): Network structure
            dropout (float): The droupout probability
            stochastic_depth_prob (float): The stochastic depth probability
            num_classes (int): Number of classes
            norm_layer (Optional[Callable[..., nn.Module]]): Module specifying the normalization layer to use
            last_channel (int): The number of channels on the penultimate layer
        z1The inverted_residual_setting should not be emptyc                 S   s   g | ]}t |tqS rA   )
isinstancer4   ).0srA   rA   rB   
<listcomp>      z)EfficientNet.__init__.<locals>.<listcomp>z:The inverted_residual_setting should be List[MBConvConfig]Nr      r   rx   c                 s   s   | ]}|j V  qd S rO   )r:   )r   r]   rA   rA   rB   	<genexpr>  r   z(EfficientNet.__init__.<locals>.<genexpr>r   rf   rb   T)prg   Zfan_out)moderM   )*rR   rS   r   ri   r   r	   all	TypeErrorr   BatchNorm2dr8   rl   r   rk   sumranger:   copyr9   r7   rG   r;   rn   featuresZAdaptiveAvgPool2davgpoolZDropoutZLinear
classifiermodulesZConv2dinitZkaiming_normal_ZweightZbiasZzeros_Z	GroupNormZones_rX   sqrtZout_featuresZuniform_)rT   r{   r|   r^   r}   r_   r~   rp   Zfirstconv_output_channelsZtotal_stage_blocksZstage_block_idr]   Zstage_Z	block_cnfZsd_probZlastconv_input_channelsZlastconv_output_channelsmZ
init_rangerU   rA   rB   rS      sx    







zEfficientNet.__init__)xr?   c                 C   s.   |  |}| |}t|d}| |}|S )Nr   )r   r   torchflattenr   rT   r   rA   rA   rB   _forward_implL  s
    


zEfficientNet._forward_implc                 C   s
   |  |S rO   )r   r   rA   rA   rB   rw   V  s    zEfficientNet.forward)ry   rz   NN)rD   rE   rF   r	   r   rL   r[   rG   rI   r   r   r   rJ   rS   r   r   rw   rZ   rA   rA   rU   rB   r      s       c
r   )r{   r|   r~   weightsprogresskwargsr?   c                 K   sR   |d urt |dt|jd  t| |fd|i|}|d urN||j|d |S )Nr}   
categoriesr~   )r   )r   lenmetar   Zload_state_dictZget_state_dict)r{   r|   r~   r   r   r   modelrA   rA   rB   _efficientnetZ  s    r   )archr   r?   c                 K   s:  |  drtt|d|dd}|dddddd|d	dd
ddd
|d	dd
ddd
|d	dd
ddd|d	ddddd|d	dd
ddd|d	dddddg}d }n|  drtdddddd
tddd
dddtddd
dddtddd
ddd	td	dddddtd	dd
dddg}d}n|  drtddddddtddd
dddtddd
dddtddd
dddtd	dddddtd	dd
dd d!td	ddd d"dg}d}n|  d#r$tddddddtddd
dddtddd
dd$dtddd
d$dd%td	dddd&d'td	dd
d&d(d)td	ddd(d*dg}d}ntd+|  ||fS ),NZefficientnet_br=   rN   r=   rN   r   r             r         (   P   p      rf   @  r1   0   @         	         i   r2            i0     i   r3   `   
              i  zUnsupported model type )
startswithr   rL   popr[   ri   )r   r   Z
bneck_confr{   r~   rA   rA   rB   _efficientnet_confm  sT    
			r   r   _COMMON_META)r   r   zUhttps://github.com/pytorch/vision/tree/main/references/classification#efficientnet-v1)Zmin_sizerecipe)!   r   zUhttps://github.com/pytorch/vision/tree/main/references/classification#efficientnet-v2c                
   @   sJ   e Zd Zedeeddejdi eddddd	id
ddddZ	e	Z
dS )r   zJhttps://download.pytorch.org/models/efficientnet_b0_rwightman-3dd342df.pthr   r   	crop_sizeresize_sizeinterpolationidP ImageNet-1Kg?5^IlS@g5^IbW@zacc@1zacc@5gNbX9?g~jts4@1These weights are ported from the original paper.
num_params_metrics_ops
_file_size_docsurlZ
transformsr   NrD   rE   rF   r   r   r   r   BICUBIC_COMMON_META_V1IMAGENET1K_V1DEFAULTrA   rA   rA   rB   r     s(   
r   c                   @   s   e Zd Zedeeddejdi eddddd	id
ddddZ	edeeddej
di edddddd	id
ddddZeZdS )r   zJhttps://download.pytorch.org/models/efficientnet_b1_rwightman-533bc792.pth   r   r   iv r   g+S@gClW@r   gCl?gM">@r   r   r   z@https://download.pytorch.org/models/efficientnet_b1-c27df63c.pth   zOhttps://github.com/pytorch/vision/issues/3995#new-recipe-with-lr-wd-crop-tuninggʡS@gƻW@gA`">@$  
                These weights improve upon the results of the original paper by using a modified version of TorchVision's
                `new training recipe
                <https://pytorch.org/blog/how-to-train-state-of-the-art-models-using-torchvision-latest-primitives/>`_.
            )r   r   r   r   r   r   N)rD   rE   rF   r   r   r   r   r   r   r   BILINEARZIMAGENET1K_V2r   rA   rA   rA   rB   r     sP   

r   c                
   @   sJ   e Zd Zedeeddejdi edddddid	d
dddZ	e	Z
dS )r    zJhttps://download.pytorch.org/models/efficientnet_b2_rwightman-bcdf34b7.pthi   r   i r   gx&T@gp=
W@r   g rh?gʡEA@r   r   r   Nr   rA   rA   rA   rB   r      s(   
r    c                
   @   sJ   e Zd Zedeeddejdi eddddd	id
ddddZ	e	Z
dS )r!   zJhttps://download.pytorch.org/models/efficientnet_b3_rwightman-cf984f9c.pthi,  r   r   i r   gnT@g~jtX@r   gZd;?gd;OG@r   r   r   Nr   rA   rA   rA   rB   r!     s(   
r!   c                
   @   sJ   e Zd Zedeeddejdi eddddd	id
ddddZ	e	Z
dS )r"   zJhttps://download.pytorch.org/models/efficientnet_b4_rwightman-7eb33cd5.pthi|  r   r   i0!'r   gjtT@gt&X@r   g~jt@gKR@r   r   r   Nr   rA   rA   rA   rB   r"   /  s(   
r"   c                
   @   sJ   e Zd Zedeeddejdi edddddid	d
dddZ	e	Z
dS )r#   zJhttps://download.pytorch.org/models/efficientnet_b5_lukemelas-b6417697.pthi  r   ir   g#~jT@gx&1(X@r   gx&1$@gK7]@r   r   r   Nr   rA   rA   rA   rB   r#   G  s(   
r#   c                
   @   sJ   e Zd Zedeeddejdi edddddid	d
dddZ	e	Z
dS )r$   zJhttps://download.pytorch.org/models/efficientnet_b6_lukemelas-c76e70fd.pthi  r   ir   gn U@gv:X@r   g rh3@g$d@r   r   r   Nr   rA   rA   rA   rB   r$   _  s(   
r$   c                
   @   sJ   e Zd Zedeeddejdi edddddid	d
dddZ	e	Z
dS )r%   zJhttps://download.pytorch.org/models/efficientnet_b7_lukemelas-dcc49843.pthiX  r   icr   g+U@g'1:X@r   gsh|B@go@r   r   r   Nr   rA   rA   rA   rB   r%   w  s(   
r%   c                
   @   sJ   e Zd Zedeeddejdi edddddid	d
dddZ	e	Z
dS )r&   zBhttps://download.pytorch.org/models/efficientnet_v2_s-dd5fe13b.pthr   r   i8nGr   g;OU@gx&18X@r   gZd @gVT@r   r   r   NrD   rE   rF   r   r   r   r   r   _COMMON_META_V2r   r   rA   rA   rA   rB   r&     s.   r&   c                
   @   sJ   e Zd Zedeeddejdi edddddid	d
dddZ	e	Z
dS )r'   zBhttps://download.pytorch.org/models/efficientnet_v2_m-dc08266a.pth  r   i:r   gI+GU@gDlIX@r   gE8@gQ j@r   r   r   Nr   rA   rA   rA   rB   r'     s.   r'   c                
   @   sN   e Zd Zedeeddejdddi eddddd	id
ddddZ	e	Z
dS )r(   zBhttps://download.pytorch.org/models/efficientnet_v2_l-59c71312.pthr   )      ?r   r   )r   r   r   meanZstdiHfr   gʡEsU@gOnrX@r   g
ףp=
L@gI+i|@r   r   r   N)rD   rE   rF   r   r   r   r   r   r   r   r   rA   rA   rA   rB   r(     s2   r(   Z
pretrained)r   T)r   r   )r   r   r   r?   c                 K   s<   t | } tdddd\}}t||dd|| |fi |S )a  EfficientNet B0 model architecture from the `EfficientNet: Rethinking Model Scaling for Convolutional
    Neural Networks <https://arxiv.org/abs/1905.11946>`_ paper.

    Args:
        weights (:class:`~torchvision.models.EfficientNet_B0_Weights`, optional): The
            pretrained weights to use. See
            :class:`~torchvision.models.EfficientNet_B0_Weights` below for
            more details, and possible values. By default, no pre-trained
            weights are used.
        progress (bool, optional): If True, displays a progress bar of the
            download to stderr. Default is True.
        **kwargs: parameters passed to the ``torchvision.models.efficientnet.EfficientNet``
            base class. Please refer to the `source code
            <https://github.com/pytorch/vision/blob/main/torchvision/models/efficientnet.py>`_
            for more details about this class.
    .. autoclass:: torchvision.models.EfficientNet_B0_Weights
        :members:
    r)   rM   r   r|   ry   )r   verifyr   r   r   r   r   r   r{   r~   rA   rA   rB   r)     s    
r)   c                 K   s<   t | } tdddd\}}t||dd|| |fi |S )a  EfficientNet B1 model architecture from the `EfficientNet: Rethinking Model Scaling for Convolutional
    Neural Networks <https://arxiv.org/abs/1905.11946>`_ paper.

    Args:
        weights (:class:`~torchvision.models.EfficientNet_B1_Weights`, optional): The
            pretrained weights to use. See
            :class:`~torchvision.models.EfficientNet_B1_Weights` below for
            more details, and possible values. By default, no pre-trained
            weights are used.
        progress (bool, optional): If True, displays a progress bar of the
            download to stderr. Default is True.
        **kwargs: parameters passed to the ``torchvision.models.efficientnet.EfficientNet``
            base class. Please refer to the `source code
            <https://github.com/pytorch/vision/blob/main/torchvision/models/efficientnet.py>`_
            for more details about this class.
    .. autoclass:: torchvision.models.EfficientNet_B1_Weights
        :members:
    r*   rM   皙?r   r|   ry   )r   r   r   r   r   r   rA   rA   rB   r*     s    
r*   c                 K   s<   t | } tdddd\}}t||dd|| |fi |S )a  EfficientNet B2 model architecture from the `EfficientNet: Rethinking Model Scaling for Convolutional
    Neural Networks <https://arxiv.org/abs/1905.11946>`_ paper.

    Args:
        weights (:class:`~torchvision.models.EfficientNet_B2_Weights`, optional): The
            pretrained weights to use. See
            :class:`~torchvision.models.EfficientNet_B2_Weights` below for
            more details, and possible values. By default, no pre-trained
            weights are used.
        progress (bool, optional): If True, displays a progress bar of the
            download to stderr. Default is True.
        **kwargs: parameters passed to the ``torchvision.models.efficientnet.EfficientNet``
            base class. Please refer to the `source code
            <https://github.com/pytorch/vision/blob/main/torchvision/models/efficientnet.py>`_
            for more details about this class.
    .. autoclass:: torchvision.models.EfficientNet_B2_Weights
        :members:
    r+   r   333333?r   r|   333333?)r    r   r   r   r   r   rA   rA   rB   r+   &  s    
r+   c                 K   s<   t | } tdddd\}}t||dd|| |fi |S )a  EfficientNet B3 model architecture from the `EfficientNet: Rethinking Model Scaling for Convolutional
    Neural Networks <https://arxiv.org/abs/1905.11946>`_ paper.

    Args:
        weights (:class:`~torchvision.models.EfficientNet_B3_Weights`, optional): The
            pretrained weights to use. See
            :class:`~torchvision.models.EfficientNet_B3_Weights` below for
            more details, and possible values. By default, no pre-trained
            weights are used.
        progress (bool, optional): If True, displays a progress bar of the
            download to stderr. Default is True.
        **kwargs: parameters passed to the ``torchvision.models.efficientnet.EfficientNet``
            base class. Please refer to the `source code
            <https://github.com/pytorch/vision/blob/main/torchvision/models/efficientnet.py>`_
            for more details about this class.
    .. autoclass:: torchvision.models.EfficientNet_B3_Weights
        :members:
    r,   r   ffffff?r   r|   r   )r!   r   r   r   r   r   rA   rA   rB   r,   E  s    

r,   c                 K   s<   t | } tdddd\}}t||dd|| |fi |S )a  EfficientNet B4 model architecture from the `EfficientNet: Rethinking Model Scaling for Convolutional
    Neural Networks <https://arxiv.org/abs/1905.11946>`_ paper.

    Args:
        weights (:class:`~torchvision.models.EfficientNet_B4_Weights`, optional): The
            pretrained weights to use. See
            :class:`~torchvision.models.EfficientNet_B4_Weights` below for
            more details, and possible values. By default, no pre-trained
            weights are used.
        progress (bool, optional): If True, displays a progress bar of the
            download to stderr. Default is True.
        **kwargs: parameters passed to the ``torchvision.models.efficientnet.EfficientNet``
            base class. Please refer to the `source code
            <https://github.com/pytorch/vision/blob/main/torchvision/models/efficientnet.py>`_
            for more details about this class.
    .. autoclass:: torchvision.models.EfficientNet_B4_Weights
        :members:
    r-   r   ?r   r|   皙?)r"   r   r   r   r   r   rA   rA   rB   r-   i  s    

r-   c                 K   sL   t | } tdddd\}}t||dd|| |fdttjdd	d
i|S )a  EfficientNet B5 model architecture from the `EfficientNet: Rethinking Model Scaling for Convolutional
    Neural Networks <https://arxiv.org/abs/1905.11946>`_ paper.

    Args:
        weights (:class:`~torchvision.models.EfficientNet_B5_Weights`, optional): The
            pretrained weights to use. See
            :class:`~torchvision.models.EfficientNet_B5_Weights` below for
            more details, and possible values. By default, no pre-trained
            weights are used.
        progress (bool, optional): If True, displays a progress bar of the
            download to stderr. Default is True.
        **kwargs: parameters passed to the ``torchvision.models.efficientnet.EfficientNet``
            base class. Please refer to the `source code
            <https://github.com/pytorch/vision/blob/main/torchvision/models/efficientnet.py>`_
            for more details about this class.
    .. autoclass:: torchvision.models.EfficientNet_B5_Weights
        :members:
    r.   g?g@r   r|   r   r_   MbP?{Gz?epsZmomentum)r#   r   r   r   r   r   r   r   r   rA   rA   rB   r.     s    

r.   c                 K   sL   t | } tdddd\}}t||dd|| |fdttjdd	d
i|S )a  EfficientNet B6 model architecture from the `EfficientNet: Rethinking Model Scaling for Convolutional
    Neural Networks <https://arxiv.org/abs/1905.11946>`_ paper.

    Args:
        weights (:class:`~torchvision.models.EfficientNet_B6_Weights`, optional): The
            pretrained weights to use. See
            :class:`~torchvision.models.EfficientNet_B6_Weights` below for
            more details, and possible values. By default, no pre-trained
            weights are used.
        progress (bool, optional): If True, displays a progress bar of the
            download to stderr. Default is True.
        **kwargs: parameters passed to the ``torchvision.models.efficientnet.EfficientNet``
            base class. Please refer to the `source code
            <https://github.com/pytorch/vision/blob/main/torchvision/models/efficientnet.py>`_
            for more details about this class.
    .. autoclass:: torchvision.models.EfficientNet_B6_Weights
        :members:
    r/   r   g@r   r|   r   r_   r   r   r   )r$   r   r   r   r   r   r   r   r   rA   rA   rB   r/     s    

r/   c                 K   sL   t | } tdddd\}}t||dd|| |fdttjdd	d
i|S )a  EfficientNet B7 model architecture from the `EfficientNet: Rethinking Model Scaling for Convolutional
    Neural Networks <https://arxiv.org/abs/1905.11946>`_ paper.

    Args:
        weights (:class:`~torchvision.models.EfficientNet_B7_Weights`, optional): The
            pretrained weights to use. See
            :class:`~torchvision.models.EfficientNet_B7_Weights` below for
            more details, and possible values. By default, no pre-trained
            weights are used.
        progress (bool, optional): If True, displays a progress bar of the
            download to stderr. Default is True.
        **kwargs: parameters passed to the ``torchvision.models.efficientnet.EfficientNet``
            base class. Please refer to the `source code
            <https://github.com/pytorch/vision/blob/main/torchvision/models/efficientnet.py>`_
            for more details about this class.
    .. autoclass:: torchvision.models.EfficientNet_B7_Weights
        :members:
    r0   g       @g@r   r|   r   r_   r   r   r   )r%   r   r   r   r   r   r   r   r   rA   rA   rB   r0     s    

r0   c                 K   sD   t | } td\}}t||dd|| |fdttjddi|S )a  
    Constructs an EfficientNetV2-S architecture from
    `EfficientNetV2: Smaller Models and Faster Training <https://arxiv.org/abs/2104.00298>`_.

    Args:
        weights (:class:`~torchvision.models.EfficientNet_V2_S_Weights`, optional): The
            pretrained weights to use. See
            :class:`~torchvision.models.EfficientNet_V2_S_Weights` below for
            more details, and possible values. By default, no pre-trained
            weights are used.
        progress (bool, optional): If True, displays a progress bar of the
            download to stderr. Default is True.
        **kwargs: parameters passed to the ``torchvision.models.efficientnet.EfficientNet``
            base class. Please refer to the `source code
            <https://github.com/pytorch/vision/blob/main/torchvision/models/efficientnet.py>`_
            for more details about this class.
    .. autoclass:: torchvision.models.EfficientNet_V2_S_Weights
        :members:
    r1   r|   ry   r_   r   r   )r&   r   r   r   r   r   r   r   r   rA   rA   rB   r1     s    

r1   c                 K   sD   t | } td\}}t||dd|| |fdttjddi|S )a  
    Constructs an EfficientNetV2-M architecture from
    `EfficientNetV2: Smaller Models and Faster Training <https://arxiv.org/abs/2104.00298>`_.

    Args:
        weights (:class:`~torchvision.models.EfficientNet_V2_M_Weights`, optional): The
            pretrained weights to use. See
            :class:`~torchvision.models.EfficientNet_V2_M_Weights` below for
            more details, and possible values. By default, no pre-trained
            weights are used.
        progress (bool, optional): If True, displays a progress bar of the
            download to stderr. Default is True.
        **kwargs: parameters passed to the ``torchvision.models.efficientnet.EfficientNet``
            base class. Please refer to the `source code
            <https://github.com/pytorch/vision/blob/main/torchvision/models/efficientnet.py>`_
            for more details about this class.
    .. autoclass:: torchvision.models.EfficientNet_V2_M_Weights
        :members:
    r2   r|   r   r_   r   r   )r'   r   r   r   r   r   r   r   r   rA   rA   rB   r2   "  s    

r2   c                 K   sD   t | } td\}}t||dd|| |fdttjddi|S )a  
    Constructs an EfficientNetV2-L architecture from
    `EfficientNetV2: Smaller Models and Faster Training <https://arxiv.org/abs/2104.00298>`_.

    Args:
        weights (:class:`~torchvision.models.EfficientNet_V2_L_Weights`, optional): The
            pretrained weights to use. See
            :class:`~torchvision.models.EfficientNet_V2_L_Weights` below for
            more details, and possible values. By default, no pre-trained
            weights are used.
        progress (bool, optional): If True, displays a progress bar of the
            download to stderr. Default is True.
        **kwargs: parameters passed to the ``torchvision.models.efficientnet.EfficientNet``
            base class. Please refer to the `source code
            <https://github.com/pytorch/vision/blob/main/torchvision/models/efficientnet.py>`_
            for more details about this class.
    .. autoclass:: torchvision.models.EfficientNet_V2_L_Weights
        :members:
    r3   r|   r   r_   r   r   )r(   r   r   r   r   r   r   r   r   rA   rA   rB   r3   H  s    

r3   )Or   rX   Zdataclassesr   	functoolsr   typingr   r   r   r   r   r	   r
   r   r   r   r   Ztorchvision.opsr   Zops.miscr   r   Ztransforms._presetsr   r   utilsr   Z_apir   r   r   Z_metar   _utilsr   r   r   __all__r4   rL   r[   rJ   rQ   r\   r   rG   rI   boolr   strr   r   rH   r   r   r   r   r    r!   r"   r#   r$   r%   r&   r'   r(   r   r)   r*   r+   r,   r-   r.   r/   r0   r1   r2   r3   rA   rA   rA   rB   <module>   s  
(C=s80



"
"
#
#
#
$
$
