
    kh;"                        d dl mZ d dl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 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ej0                        Z G d dej0                        Zdedee   dededef
dZedddZ G d de      Z G d de      Z  e        edejB                  f      ddd dee   dededefd!              Z" e        ede jB                  f      ddd dee    dededefd"              Z#y)#    )partial)AnyOptionalN   )ImageClassification)_log_api_usage_once   )register_modelWeightsWeightsEnum)_IMAGENET_CATEGORIES)_ovewrite_named_paramhandle_legacy_interface)
SqueezeNetSqueezeNet1_0_WeightsSqueezeNet1_1_Weightssqueezenet1_0squeezenet1_1c            
       l     e Zd Zdededededdf
 fdZdej                  dej                  fd	Z xZS )
Fireinplanessqueeze_planesexpand1x1_planesexpand3x3_planesreturnNc                    t         |           || _        t        j                  ||d      | _        t        j                  d      | _        t        j                  ||d      | _        t        j                  d      | _	        t        j                  ||dd      | _
        t        j                  d      | _        y )Nr	   kernel_sizeTinplace   )r   padding)super__init__r   nnConv2dsqueezeReLUsqueeze_activation	expand1x1expand1x1_activation	expand3x3expand3x3_activation)selfr   r   r   r   	__class__s        Y/var/www/teggl/fontify/venv/lib/python3.12/site-packages/torchvision/models/squeezenet.pyr$   zFire.__init__   s     yy>qI"$''$"7>3CQRS$&GGD$9!>3CQR\]^$&GGD$9!    xc                     | j                  | j                  |            }t        j                  | j	                  | j                  |            | j                  | j                  |            gd      S Nr	   )r)   r'   torchcatr+   r*   r-   r,   r.   r2   s     r0   forwardzFire.forward   sb    ##DLLO4yy&&t~~a'894;T;TUYUcUcdeUf;ghjk
 	
r1   )	__name__
__module____qualname__intr$   r5   Tensorr8   __classcell__r/   s   @r0   r   r      sH    : :c :S :dg :lp :
 
%,, 
r1   r   c            	       j     e Zd Zd	dedededdf fdZdej                  dej                  fdZ	 xZ
S )
r   versionnum_classesdropoutr   Nc                    t         |           t        |        || _        |dk(  rt	        j
                  t	        j                  dddd      t	        j                  d      t	        j                  ddd	      t        dd
dd      t        dd
dd      t        dddd      t	        j                  ddd	      t        dddd      t        dddd      t        dddd      t        dddd      t	        j                  ddd	      t        dddd            | _
        n|dk(  rt	        j
                  t	        j                  dddd      t	        j                  d      t	        j                  ddd	      t        dd
dd      t        dd
dd      t	        j                  ddd	      t        dddd      t        dddd      t	        j                  ddd	      t        dddd      t        dddd      t        dddd      t        dddd            | _
        nt        d| d      t	        j                  d| j                  d      }t	        j
                  t	        j                  |      |t	        j                  d      t	        j                  d            | _        | j                         D ]  }t!        |t        j                        s||u r#t#        j$                  |j&                  dd       nt#        j(                  |j&                         |j*                  qt#        j,                  |j*                  d        y )N1_0r!   `      r   )r   strideTr   )r   rH   	ceil_mode   @             0      i  i   1_1zUnsupported SqueezeNet version z: 1_0 or 1_1 expectedr	   r   )p)r	   r	   g        g{Gz?)meanstdr   )r#   r$   r   rB   r%   
Sequentialr&   r(   	MaxPool2dr   features
ValueErrorDropoutAdaptiveAvgPool2d
classifiermodules
isinstanceinitnormal_weightkaiming_uniform_bias	constant_)r.   rA   rB   rC   
final_convmr/   s         r0   r$   zSqueezeNet.__init__%   s   D!&eMM		!RQq9%1ERR$S"b"%S"c3'1ES"c3'S"c3'S"c3'S"c3'1ES"c3'DM MM		!RQq9%1ERR$S"b"%1ES"c3'S"c3'1ES"c3'S"c3'S"c3'S"c3'DM& >wiG\]^^ YYsD$4$4!D
--JJ!:rwwt/DbFZFZ[aFb
  	.A!RYY'
?LL>))!((366%NN1661-	.r1   r2   c                 r    | j                  |      }| j                  |      }t        j                  |d      S r4   )rW   r[   r5   flattenr7   s     r0   r8   zSqueezeNet.forward^   s/    MM!OOA}}Q""r1   )rE   i  g      ?)r9   r:   r;   strr<   floatr$   r5   r=   r8   r>   r?   s   @r0   r   r   $   sA    7. 7.# 7.u 7._c 7.r# #%,, #r1   r   rA   weightsprogresskwargsr   c                     |#t        |dt        |j                  d                t        | fi |}|"|j	                  |j                  |d             |S )NrB   
categoriesT)rk   
check_hash)r   lenmetar   load_state_dictget_state_dict)rA   rj   rk   rl   models        r0   _squeezenetru   d   s]     fmSl9S5TUw)&)Eg44hSW4XYLr1   z@https://github.com/pytorch/vision/pull/49#issuecomment-277560717zXThese weights reproduce closely the results of the paper using a simple training recipe.)rn   recipe_docsc                   T    e Zd Z ed eed      i edddddd	id
dd      ZeZy)r   z>https://download.pytorch.org/models/squeezenet1_0-b66bff10.pth   	crop_size)   r|   i ImageNet-1KgM@g{GT@zacc@1zacc@5gh|?5?g&1@min_size
num_params_metrics_ops
_file_sizeurl
transformsrq   N	r9   r:   r;   r   r   r   _COMMON_METAIMAGENET1K_V1DEFAULT r1   r0   r   r   |   T    L.#>

 !##  
M" Gr1   r   c                   T    e Zd Z ed eed      i edddddd	id
dd      ZeZy)r   z>https://download.pytorch.org/models/squeezenet1_1-b8a52dc0.pthry   rz   )   r   i( r}   gX9M@g-'T@r~   gtV?g"~@r   r   Nr   r   r1   r0   r   r      r   r1   r   
pretrained)rj   T)rj   rk   c                 H    t         j                  |       } t        d| |fi |S )a  SqueezeNet model architecture from the `SqueezeNet: AlexNet-level
    accuracy with 50x fewer parameters and <0.5MB model size
    <https://arxiv.org/abs/1602.07360>`_ paper.

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

    .. autoclass:: torchvision.models.SqueezeNet1_0_Weights
        :members:
    rE   )r   verifyru   rj   rk   rl   s      r0   r   r      s(    2 $**73Gugx:6::r1   c                 H    t         j                  |       } t        d| |fi |S )a/  SqueezeNet 1.1 model from the `official SqueezeNet repo
    <https://github.com/DeepScale/SqueezeNet/tree/master/SqueezeNet_v1.1>`_.

    SqueezeNet 1.1 has 2.4x less computation and slightly fewer parameters
    than SqueezeNet 1.0, without sacrificing accuracy.

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

    .. autoclass:: torchvision.models.SqueezeNet1_1_Weights
        :members:
    rQ   )r   r   ru   r   s      r0   r   r      s(    6 $**73Gugx:6::r1   )$	functoolsr   typingr   r   r5   torch.nnr%   torch.nn.initr^   transforms._presetsr   utilsr   _apir
   r   r   _metar   _utilsr   r   __all__Moduler   r   rh   boolru   r   r   r   r   r   r   r   r1   r0   <module>r      sl          5 ' 6 6 ' B m
299 
$=# =#@k"  	
 $ 'PkK *K * ,0E0S0S!TU26;./;BF;Y\;; V ;6 ,0E0S0S!TU26;./;BF;Y\;; V ;r1   