o
    hK                     @   s  U d dl mZ d dlmZmZmZmZ d dlZd dlm	Z	 ddl
m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 g dZG dd de	jZdGdeeeef  dede	jfddZg dg dg dg ddZ e!eeeeef  f e"d< dededee dededefddZ#ded d!d"Z$G d#d$ d$eZ%G d%d& d&eZ&G d'd( d(eZ'G d)d* d*eZ(G d+d, d,eZ)G d-d. d.eZ*G d/d0 d0eZ+G d1d2 d2eZ,e ed3e%j-fd4dd5d6dee% dededefd7d8Z.e ed3e&j-fd4dd5d6dee& dededefd9d:Z/e ed3e'j-fd4dd5d6dee' dededefd;d<Z0e ed3e(j-fd4dd5d6dee( dededefd=d>Z1e ed3e)j-fd4dd5d6dee) dededefd?d@Z2e ed3e*j-fd4dd5d6dee* dededefdAdBZ3e ed3e+j-fd4dd5d6dee+ dededefdCdDZ4e ed3e,j-fd4dd5d6dee, dededefdEdFZ5dS )H    )partial)AnycastOptionalUnionN   )ImageClassification)_log_api_usage_once   )register_modelWeightsWeightsEnum)_IMAGENET_CATEGORIES)_ovewrite_named_paramhandle_legacy_interface)VGGVGG11_WeightsVGG11_BN_WeightsVGG13_WeightsVGG13_BN_WeightsVGG16_WeightsVGG16_BN_WeightsVGG19_WeightsVGG19_BN_Weightsvgg11vgg11_bnvgg13vgg13_bnvgg16vgg16_bnvgg19vgg19_bnc                       sN   e Zd Z	ddejdedededd	f
 fd
dZde	j
de	j
fddZ  ZS )r     T      ?featuresnum_classesinit_weightsdropoutreturnNc                    s"  t    t|  || _td| _ttddt	dtj
|dtddt	dtj
|dtd|| _|r|  D ]P}t|tjr^tjj|jddd |jd ur]tj|jd	 q>t|tjrutj|jd
 tj|jd	 q>t|tjrtj|jd	d tj|jd	 q>d S d S )N)   r)   i b  i   T)pZfan_outZrelu)modeZnonlinearityr   r
   g{Gz?)super__init__r	   r$   nnZAdaptiveAvgPool2davgpool
SequentialZLinearReLUZDropout
classifiermodules
isinstanceConv2dinitZkaiming_normal_weightZbiasZ	constant_BatchNorm2dZnormal_)selfr$   r%   r&   r'   m	__class__ \/home/www/facesmatcher.com/frenv_anti/lib/python3.10/site-packages/torchvision/models/vgg.pyr-   $   s:   





	
zVGG.__init__xc                 C   s.   |  |}| |}t|d}| |}|S )Nr
   )r$   r/   torchflattenr2   )r9   r?   r=   r=   r>   forwardA   s
   


zVGG.forward)r"   Tr#   )__name__
__module____qualname__r.   Moduleintboolfloatr-   r@   ZTensorrB   __classcell__r=   r=   r;   r>   r   #   s    r   Fcfg
batch_normr(   c                 C   s   g }d}| D ]<}|dkr|t jdddg7 }qtt|}t j||ddd}|r6||t |t jddg7 }n
||t jddg7 }|}qt j| S )	N   Mr   )kernel_sizeZstrider
   )rO   paddingT)Zinplace)r.   Z	MaxPool2dr   rG   r5   r8   r1   r0   )rK   rL   ZlayersZin_channelsvZconv2dr=   r=   r>   make_layersI   s   

rR   )@   rN      rN      rU   rN      rV   rN   rV   rV   rN   )rS   rS   rN   rT   rT   rN   rU   rU   rN   rV   rV   rN   rV   rV   rN   )rS   rS   rN   rT   rT   rN   rU   rU   rU   rN   rV   rV   rV   rN   rV   rV   rV   rN   )rS   rS   rN   rT   rT   rN   rU   rU   rU   rU   rN   rV   rV   rV   rV   rN   rV   rV   rV   rV   rN   )ABDEcfgsweightsprogresskwargsc                 K   sp   |d urd|d< |j d d urt|dt|j d  ttt|  |dfi |}|d ur6||j|dd |S )NFr&   
categoriesr%   )rL   T)r]   Z
check_hash)metar   lenr   rR   r[   Zload_state_dictZget_state_dict)rK   rL   r\   r]   r^   modelr=   r=   r>   _vggb   s   rc   )    rd   zUhttps://github.com/pytorch/vision/tree/main/references/classification#alexnet-and-vggzNThese weights were trained from scratch by using a simplified training recipe.)Zmin_sizer_   recipe_docsc                	   @   B   e Zd Zedeeddi edddddid	d
ddZeZdS )r   z6https://download.pytorch.org/models/vgg11-8a719046.pth   	crop_sizeihUImageNet-1KgzGAQ@gx&1(V@zacc@1zacc@5V-o@g=
ףp@
num_params_metrics_ops
_file_sizeurlZ
transformsr`   N	rC   rD   rE   r   r   r   _COMMON_METAIMAGENET1K_V1DEFAULTr=   r=   r=   r>   r   u   $    
r   c                	   @   rg   )r   z9https://download.pytorch.org/models/vgg11_bn-6002323d.pthrh   ri   ijrk   gHzQ@gp=
sV@rl   rm   gjt@rn   rs   Nru   r=   r=   r=   r>   r      ry   r   c                	   @   rg   )r   z6https://download.pytorch.org/models/vgg13-19584684.pthrh   ri   i(&rk   gZd{Q@g9vOV@rl   V-&@gQ@rn   rs   Nru   r=   r=   r=   r>   r      ry   r   c                	   @   rg   )r   z9https://download.pytorch.org/models/vgg13_bn-abd245e5.pthrh   ri   i(=rk   g/$Q@g-V@rl   rz   g=
ףp@rn   rs   Nru   r=   r=   r=   r>   r      ry   r   c                   @   s   e Zd Zedeeddi edddddid	d
ddZedeeddddi eddddededdid	ddddZ	eZ
dS )r   z6https://download.pytorch.org/models/vgg16-397923af.pthrh   ri   i(+?rk   gSQ@g rV@rl   q=
ף.@g|?5^~@rn   rs   zIhttps://download.pytorch.org/models/vgg16_features-amdegroot-88682ab5.pth)g;pΈ?gN]?g|
?)p?r|   r|   )rj   meanZstdNz5https://github.com/amdegroot/ssd.pytorch#training-ssdnang#~j~@a`  
                These weights can't be used for classification because they are missing values in the `classifier`
                module. Only the `features` module has valid values and can be used for feature extraction. The weights
                were trained using the original input standardization method as described in the paper.
            )ro   r_   re   rp   rq   rr   rf   )rC   rD   rE   r   r   r   rv   rw   rI   ZIMAGENET1K_FEATURESrx   r=   r=   r=   r>   r      sT    
r   c                	   @   rg   )r   z9https://download.pytorch.org/models/vgg16_bn-6c64b313.pthrh   ri   i(L?rk   gףp=
WR@g/$V@rl   r{   grh~@rn   rs   Nru   r=   r=   r=   r>   r      ry   r   c                	   @   rg   )r   z6https://download.pytorch.org/models/vgg19-dcbb9e9d.pthrh   ri   i(0rk   gMbR@gMbV@rl   oʡ3@g rh @rn   rs   Nru   r=   r=   r=   r>   r   
  ry   r   c                	   @   rg   )r   z9https://download.pytorch.org/models/vgg19_bn-c79401a0.pthrh   ri   i([rk   gˡER@gSV@rl   r   g/$!@rn   rs   Nru   r=   r=   r=   r>   r     ry   r   Z
pretrained)r\   T)r\   r]   c                 K       t | } tdd| |fi |S )ap  VGG-11 from `Very Deep Convolutional Networks for Large-Scale Image Recognition <https://arxiv.org/abs/1409.1556>`__.

    Args:
        weights (:class:`~torchvision.models.VGG11_Weights`, optional): The
            pretrained weights to use. See
            :class:`~torchvision.models.VGG11_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.vgg.VGG``
            base class. Please refer to the `source code
            <https://github.com/pytorch/vision/blob/main/torchvision/models/vgg.py>`_
            for more details about this class.

    .. autoclass:: torchvision.models.VGG11_Weights
        :members:
    rW   F)r   verifyrc   r\   r]   r^   r=   r=   r>   r   2     
r   c                 K   r   )a|  VGG-11-BN from `Very Deep Convolutional Networks for Large-Scale Image Recognition <https://arxiv.org/abs/1409.1556>`__.

    Args:
        weights (:class:`~torchvision.models.VGG11_BN_Weights`, optional): The
            pretrained weights to use. See
            :class:`~torchvision.models.VGG11_BN_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.vgg.VGG``
            base class. Please refer to the `source code
            <https://github.com/pytorch/vision/blob/main/torchvision/models/vgg.py>`_
            for more details about this class.

    .. autoclass:: torchvision.models.VGG11_BN_Weights
        :members:
    rW   T)r   r   rc   r   r=   r=   r>   r   L  r   r   c                 K   r   )ap  VGG-13 from `Very Deep Convolutional Networks for Large-Scale Image Recognition <https://arxiv.org/abs/1409.1556>`__.

    Args:
        weights (:class:`~torchvision.models.VGG13_Weights`, optional): The
            pretrained weights to use. See
            :class:`~torchvision.models.VGG13_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.vgg.VGG``
            base class. Please refer to the `source code
            <https://github.com/pytorch/vision/blob/main/torchvision/models/vgg.py>`_
            for more details about this class.

    .. autoclass:: torchvision.models.VGG13_Weights
        :members:
    rX   F)r   r   rc   r   r=   r=   r>   r   f  r   r   c                 K   r   )a|  VGG-13-BN from `Very Deep Convolutional Networks for Large-Scale Image Recognition <https://arxiv.org/abs/1409.1556>`__.

    Args:
        weights (:class:`~torchvision.models.VGG13_BN_Weights`, optional): The
            pretrained weights to use. See
            :class:`~torchvision.models.VGG13_BN_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.vgg.VGG``
            base class. Please refer to the `source code
            <https://github.com/pytorch/vision/blob/main/torchvision/models/vgg.py>`_
            for more details about this class.

    .. autoclass:: torchvision.models.VGG13_BN_Weights
        :members:
    rX   T)r   r   rc   r   r=   r=   r>   r     r   r   c                 K   r   )ap  VGG-16 from `Very Deep Convolutional Networks for Large-Scale Image Recognition <https://arxiv.org/abs/1409.1556>`__.

    Args:
        weights (:class:`~torchvision.models.VGG16_Weights`, optional): The
            pretrained weights to use. See
            :class:`~torchvision.models.VGG16_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.vgg.VGG``
            base class. Please refer to the `source code
            <https://github.com/pytorch/vision/blob/main/torchvision/models/vgg.py>`_
            for more details about this class.

    .. autoclass:: torchvision.models.VGG16_Weights
        :members:
    rY   F)r   r   rc   r   r=   r=   r>   r     r   r   c                 K   r   )a|  VGG-16-BN from `Very Deep Convolutional Networks for Large-Scale Image Recognition <https://arxiv.org/abs/1409.1556>`__.

    Args:
        weights (:class:`~torchvision.models.VGG16_BN_Weights`, optional): The
            pretrained weights to use. See
            :class:`~torchvision.models.VGG16_BN_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.vgg.VGG``
            base class. Please refer to the `source code
            <https://github.com/pytorch/vision/blob/main/torchvision/models/vgg.py>`_
            for more details about this class.

    .. autoclass:: torchvision.models.VGG16_BN_Weights
        :members:
    rY   T)r   r   rc   r   r=   r=   r>   r     r   r   c                 K   r   )ap  VGG-19 from `Very Deep Convolutional Networks for Large-Scale Image Recognition <https://arxiv.org/abs/1409.1556>`__.

    Args:
        weights (:class:`~torchvision.models.VGG19_Weights`, optional): The
            pretrained weights to use. See
            :class:`~torchvision.models.VGG19_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.vgg.VGG``
            base class. Please refer to the `source code
            <https://github.com/pytorch/vision/blob/main/torchvision/models/vgg.py>`_
            for more details about this class.

    .. autoclass:: torchvision.models.VGG19_Weights
        :members:
    rZ   F)r   r   rc   r   r=   r=   r>   r      r   r    c                 K   r   )a|  VGG-19_BN from `Very Deep Convolutional Networks for Large-Scale Image Recognition <https://arxiv.org/abs/1409.1556>`__.

    Args:
        weights (:class:`~torchvision.models.VGG19_BN_Weights`, optional): The
            pretrained weights to use. See
            :class:`~torchvision.models.VGG19_BN_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.vgg.VGG``
            base class. Please refer to the `source code
            <https://github.com/pytorch/vision/blob/main/torchvision/models/vgg.py>`_
            for more details about this class.

    .. autoclass:: torchvision.models.VGG19_BN_Weights
        :members:
    rZ   T)r   r   rc   r   r=   r=   r>   r!     r   r!   )F)6	functoolsr   typingr   r   r   r   r@   Ztorch.nnr.   Ztransforms._presetsr   utilsr	   Z_apir   r   r   _metar   Z_utilsr   r   __all__rF   r   liststrrG   rH   r0   rR   r[   dict__annotations__rc   rv   r   r   r   r   r   r   r   r   rw   r   r   r   r   r   r   r    r!   r=   r=   r=   r>   <module>   sn    &&"&1*******.