
    kh2                     &   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
 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 d	d
lmZmZmZ d	dlmZ d	dlmZmZ g dZ edg d      Z ee	e   e	e   de _!        e Z" G d dejF                        Z$ G d dejF                        Z% G d dejF                        Z& G d dejF                        Z' G d de      Z( e        ede(jR                  f      dddde	e(   de*d ed!e$fd"              Z+y)#    N)
namedtuple)partial)AnyCallableListOptionalTuple)Tensor   )ImageClassification)_log_api_usage_once   )register_modelWeightsWeightsEnum)_IMAGENET_CATEGORIES)_ovewrite_named_paramhandle_legacy_interface)	GoogLeNetGoogLeNetOutputs_GoogLeNetOutputsGoogLeNet_Weights	googlenetr   )logitsaux_logits2aux_logits1c                        e Zd ZddgZ	 	 	 	 	 	 	 ddedededee   deeede	j                  f         ded	ed
df fdZded
efdZded
eeee   ee   f   fdZej$                  j&                  dededee   d
efd       Zded
efdZ xZS )r   
aux_logitstransform_inputNnum_classesinit_weightsblocks.dropoutdropout_auxreturnc           	         t         |           t        |        |t        t        t
        g}|t        j                  dt               d}t        |      dk7  rt        dt        |             |d   }|d   }	|d   }
|| _        || _         |ddd	dd
      | _        t        j                  ddd      | _         |ddd      | _         |dddd      | _        t        j                  ddd      | _         |	ddddddd      | _         |	ddddddd      | _        t        j                  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      | _        t        j                  ddd      | _         |	d dddddd      | _         |	d d!dd!ddd      | _        |r! |
d||"      | _         |
d||"      | _         nd | _        d | _         t        jB                  d#      | _"        t        jF                  |$      | _$        t        jJ                  d%|      | _&        |r| jO                         D ]  }tQ        |t        jR                        stQ        |t        jJ                        r9tT        j                  jV                  jY                  |jZ                  d&d'd(d)       ptQ        |t        j\                        st        jV                  j_                  |jZ                  d       t        jV                  j_                  |j`                  d        y y )*NzThe default weight initialization of GoogleNet will be changed in future releases of torchvision. If you wish to keep the old behavior (which leads to long initialization times due to scipy/scipy#11299), please set init_weights=True.T   z%blocks length should be 3 instead of r   r   r   @      )kernel_sizestridepadding)r+   	ceil_moder*      r*   r,   `                i     0   i      p            i   i  i@  i@  i  )r#   )r   r   p   g        g{Gz?)meanstdab)1super__init__r   BasicConv2d	InceptionInceptionAuxwarningswarnFutureWarninglen
ValueErrorr   r   conv1nn	MaxPool2dmaxpool1conv2conv3maxpool2inception3ainception3bmaxpool3inception4ainception4binception4cinception4dinception4emaxpool4inception5ainception5baux1aux2AdaptiveAvgPool2davgpoolDropoutr#   Linearfcmodules
isinstanceConv2dtorchinittrunc_normal_weightBatchNorm2d	constant_bias)selfr    r   r   r!   r"   r#   r$   
conv_blockinception_blockinception_aux_blockm	__class__s               X/var/www/teggl/fontify/venv/lib/python3.12/site-packages/torchvision/models/googlenet.pyrF   zGoogLeNet.__init__    s    	D!>!9l;FMML 	  Lv;!DS[MRSSAY
 )$Qi$.21QJ
QqDABA6
CQB
QqDA*3BRRH*3S#r2rJQqDA*3Rb"bI*3S#r2rJ*3S#r2rJ*3S#r2rJ*3S#r3LQqDA*3S#r3L*3S#r3L+CkRDI+CkRDIDIDI++F3zzG,))D+.\\^ 1a+z!RYY/GHHMM//sPRVW/X2>>2GG%%ahh2GG%%affa01     xc                 "   | j                   rt        j                  |d d df   d      dz  dz   }t        j                  |d d df   d      dz  dz   }t        j                  |d d df   d      dz  d	z   }t        j                  |||fd      }|S )
Nr   r   gZd;O?gQgy&1?gI+r   g?gMbȿ)r   rk   	unsqueezecat)rr   rz   x_ch0x_ch1x_ch2s        rx   _transform_inputzGoogLeNet._transform_inputf   s    OOAadGQ/;?BUUEOOAadGQ/;?BUUEOOAadGQ/;?BUUE		5%/3Ary   c                 j   | j                  |      }| j                  |      }| j                  |      }| j                  |      }| j	                  |      }| j                  |      }| j                  |      }| j                  |      }| j                  |      }d }| j                  | j                  r| j                  |      }| j                  |      }| j                  |      }| j                  |      }d }| j                  | j                  r| j                  |      }| j                  |      }| j!                  |      }| j#                  |      }| j%                  |      }| j'                  |      }t)        j*                  |d      }| j-                  |      }| j/                  |      }|||fS Nr   )rO   rR   rS   rT   rU   rV   rW   rX   rY   ra   trainingrZ   r[   r\   rb   r]   r^   r_   r`   rd   rk   flattenr#   rg   )rr   rz   ra   rb   s       rx   _forwardzGoogLeNet._forwardn   s~   JJqMMM!JJqMJJqMMM! QQMM!Q!%99 }}yy|QQQ!%99 }}yy|QMM!QQ LLOMM!QLLOGGAJ$}ry   rb   ra   c                 P    | j                   r| j                  rt        |||      S |S N)r   r   r   )rr   rz   rb   ra   s       rx   eager_outputszGoogLeNet.eager_outputs   s#    ==T__$Qd33Hry   c                 ,   | j                  |      }| j                  |      \  }}}| j                  xr | j                  }t        j
                  j                         r$|st        j                  d       t        |||      S | j                  |||      S )Nz8Scripted GoogleNet always returns GoogleNetOutputs Tuple)r   r   r   r   rk   jitis_scriptingrJ   rK   r   r   )rr   rz   rb   ra   aux_defineds        rx   forwardzGoogLeNet.forward   s|    !!!$a(4mm799!!#XY#AtT22%%at44ry   )i  TFNNg?ffffff?)__name__
__module____qualname____constants__intboolr   r   r   rP   ModulefloatrF   r
   r   r	   r   rk   r   unusedr   r   r   __classcell__rw   s   @rx   r   r      s.   !#45M   %'+;? D1D1 D1 	D1
 tnD1 hsBII~678D1 D1 D1 
D1L& V 5& 5U68F3CXfEU+U%V 5n YYv V 8F;K P`  	5 	5$4 	5ry   r   c                        e Zd Z	 ddededededededed	eed
ej                  f      ddf fdZde	de
e	   fdZde	de	fdZ xZS )rH   Nin_channelsch1x1ch3x3redch3x3ch5x5redch5x5	pool_projrs   .r%   c	           	         t         	|           |t        } |||d      | _        t	        j
                   |||d       |||dd            | _        t	        j
                   |||d       |||dd            | _        t	        j
                  t	        j                  dddd       |||d            | _	        y )Nr   r.   r'   r0   T)r*   r+   r,   r-   )
rE   rF   rG   branch1rP   
Sequentialbranch2branch3rQ   branch4)
rr   r   r   r   r   r   r   r   rs   rw   s
            rx   rF   zInception.__init__   s     	$J!+u!D}}{H!<jSXfgqr>s
 }}{H!< xAqA	
 }}LLQq!tL{I1=
ry   rz   c                     | j                  |      }| j                  |      }| j                  |      }| j                  |      }||||g}|S r   )r   r   r   r   )rr   rz   r   r   r   r   outputss          rx   r   zInception._forward   sI    ,,q/,,q/,,q/,,q/GWg6ry   c                 P    | j                  |      }t        j                  |d      S r   )r   rk   r}   )rr   rz   r   s      rx   r   zInception.forward   s!    --"yy!$$ry   r   )r   r   r   r   r   r   rP   r   rF   r
   r   r   r   r   r   s   @rx   rH   rH      s     :>

 
 	

 
 
 
 
 Xc299n56
 

@& T&\ % %F %ry   rH   c                   n     e Zd Z	 	 ddededeedej                  f      deddf
 fdZ	d	e
de
fd
Z xZS )rI   Nr   r    rs   .r#   r%   c                     t         |           |t        } ||dd      | _        t	        j
                  dd      | _        t	        j
                  d|      | _        t	        j                  |      | _	        y )Nr2   r   r.   i   r?   r=   )
rE   rF   rG   convrP   rf   fc1fc2re   r#   )rr   r   r    rs   r#   rw   s        rx   rF   zInceptionAux.__init__   s_     	$J{CQ?	99T4(99T;/zzG,ry   rz   c                    t        j                  |d      }| j                  |      }t        j                  |d      }t        j
                  | j                  |      d      }| j                  |      }| j                  |      }|S )N)   r   r   Tinplace)	Fadaptive_avg_pool2dr   rk   r   relur   r#   r   rr   rz   s     rx   r   zInceptionAux.forward   sj    !!!V,IIaLMM!QFF488A;-LLOHHQK ry   )Nr   )r   r   r   r   r   r   rP   r   r   rF   r
   r   r   r   s   @rx   rI   rI      se    
 :>-- - Xc299n56	-
 - 
-  F ry   rI   c                   @     e Zd Zdedededdf fdZdedefdZ xZS )	rG   r   out_channelskwargsr%   Nc                     t         |           t        j                  ||fddi|| _        t        j
                  |d      | _        y )Nrq   FgMbP?)eps)rE   rF   rP   rj   r   ro   bn)rr   r   r   r   rw   s       rx   rF   zBasicConv2d.__init__  s<    IIk<NeNvN	..59ry   rz   c                 t    | j                  |      }| j                  |      }t        j                  |d      S )NTr   )r   r   r   r   r   s     rx   r   zBasicConv2d.forward  s-    IIaLGGAJvva&&ry   )	r   r   r   r   r   rF   r
   r   r   r   s   @rx   rG   rG   
  s7    :C :s :c :d :
' 'F 'ry   rG   c                   R    e Zd Z ed eed      ddedddd	d
idddd      ZeZy)r   z:https://download.pytorch.org/models/googlenet-1378be20.pthr:   )	crop_sizeie )   r   zOhttps://github.com/pytorch/vision/tree/main/references/classification#googlenetzImageNet-1KgoqQ@gRaV@)zacc@1zacc@5g+?g!rhH@z1These weights are ported from the original paper.)
num_paramsmin_size
categoriesrecipe_metrics_ops
_file_size_docs)url
transformsmetaN)	r   r   r   r   r   r   r   IMAGENET1K_V1DEFAULT ry   rx   r   r     sP    H.#>! .g##   L
M& Gry   r   
pretrained)weightsT)r   progressr   r   r   r%   c                    t         j                  |       } |j                  dd      }| Nd|vrt        |dd       t        |dd       t        |dd       t        |dt	        | j
                  d                t        di |}| P|j                  | j                  |d	             |sd|_	        d|_
        d|_        |S t        j                  d
       |S )a  GoogLeNet (Inception v1) model architecture from
    `Going Deeper with Convolutions <http://arxiv.org/abs/1409.4842>`_.

    Args:
        weights (:class:`~torchvision.models.GoogLeNet_Weights`, optional): The
            pretrained weights for the model. See
            :class:`~torchvision.models.GoogLeNet_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.GoogLeNet``
            base class. Please refer to the `source code
            <https://github.com/pytorch/vision/blob/main/torchvision/models/googlenet.py>`_
            for more details about this class.
    .. autoclass:: torchvision.models.GoogLeNet_Weights
        :members:
    r   FNr   Tr!   r    r   )r   
check_hashz`auxiliary heads in the pretrained googlenet model are NOT pretrained, so make sure to train themr   )r   verifygetr   rM   r   r   load_state_dictget_state_dictr   ra   rb   rJ   rK   )r   r   r   original_aux_logitsmodels        rx   r   r   -  s    *  &&w/G **\59F*!&*;TBflD9fne<fmSl9S5TUEg44hSW4XY"$EEJEJ L	 MMr Lry   ),rJ   collectionsr   	functoolsr   typingr   r   r   r   r	   rk   torch.nnrP   torch.nn.functional
functionalr   r
   transforms._presetsr   utilsr   _apir   r   r   _metar   _utilsr   r   __all__r   __annotations__r   r   r   rH   rI   rG   r   r   r   r   r   ry   rx   <module>r      s    "  7 7      5 ' 6 6 ' B c 02Z[ .4XfEUfnoufv#w    % X5		 X5v,%		 ,%^ 299  F	'")) 	' . ,0A0O0O!PQ8<t *(#45 * *_b *gp * R *ry   