
    ڧg2                     D   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j#                  Z$ G d dej#                  Z% G d dej#                  Z& G d dej#                  Z' G d de          Z( e             ede(j)        f          dddde	e(         de*d ed!e$fd"                        Z+dS )#    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                   8    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_input  TFN皙?ffffff?num_classesinit_weightsblocks.dropoutdropout_auxreturnc           	      .   t                                                       t          |            |t          t          t
          g}|t          j        dt                     d}t          |          dk    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          j!        d#          | _"        t          j#        |$          | _$        t          j%        d%|          | _&        |r| '                                D ]}tQ          |t          j)                  stQ          |t          j%                  r/tT          j        j+        ,                    |j-        d&d'd(d)           etQ          |t          j.                  rJt          j+        /                    |j-        d           t          j+        /                    |j0        d           d S d S )*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/html/ai-engine/env/lib/python3.11/site-packages/torchvision/models/googlenet.pyrI   zGoogLeNet.__init__    s    	D!!!>!9l;FML 	    Lv;;!RS[[RRSSSAY
 )$Qi$.Z21QJJJ
QqDAAAZBA666
ZCQBBB
QqDAAA*?3BRRHH*?3S#r2rJJQqDAAA*?3Rb"bII*?3S#r2rJJ*?3S#r2rJJ*?3S#r2rJJ*?3S#r3LLQqDAAA*?3S#r3LL*?3S#r3LL 	++CkRRRDI++CkRRRDIIDIDI+F33zG,,,)D+.. 	1\\^^ 1 1a++ 1z!RY/G/G 1HM//sPRVW/XXXX2>22 1G%%ah222G%%afa000	1 	11 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   rn   	unsqueezecat)ru   r}   x_ch0x_ch1x_ch2s        r{   _transform_inputzGoogLeNet._transform_inputf   s     	4OAaaadGQ//;?BUUEOAaaadGQ//;?BUUEOAaaadGQ//;?BUUE	5%/33Ar|   c                    |                      |          }|                     |          }|                     |          }|                     |          }|                     |          }|                     |          }|                     |          }|                     |          }|                     |          }d }| j	        | j
        r| 	                    |          }|                     |          }|                     |          }|                     |          }d }| j        | j
        r|                     |          }|                     |          }|                     |          }|                     |          }|                     |          }|                     |          }t)          j        |d          }|                     |          }|                     |          }|||fS Nr   )rR   rU   rV   rW   rX   rY   rZ   r[   r\   rd   trainingr]   r^   r_   re   r`   ra   rb   rc   rg   rn   flattenr&   rj   )ru   r}   rd   re   s       r{   _forwardzGoogLeNet._forwardn   s   JJqMMMM!JJqMMJJqMMMM! QQMM!Q!%9 } $yy||QQQ!%9 } $yy||QMM!QQ LLOOM!QLLOOGGAJJ$}r|   re   rd   c                 D    | j         r| j        rt          |||          S |S N)r   r   r   )ru   r}   re   rd   s       r{   eager_outputszGoogLeNet.eager_outputs   s,    = 	T_ 	$Qd333Hr|   c                 2   |                      |          }|                     |          \  }}}| j        o| j        }t          j                                        r'|st          j        d           t          |||          S | 
                    |||          S )Nz8Scripted GoogleNet always returns GoogleNetOutputs Tuple)r   r   r   r   rn   jitis_scriptingrM   rN   r   r   )ru   r}   rd   re   aux_defineds        r{   forwardzGoogLeNet.forward   s    !!!$$a((4m79!!## 	5 ZXYYY#AtT222%%at444r|   )r    TFNNr!   r"   )__name__
__module____qualname____constants__intboolr   r   r   rS   ModulefloatrI   r
   r   r	   r   rn   r   unusedr   r   r   __classcell__rz   s   @r{   r   r      s       !#45M   %'+;? D1 D1D1 D1 	D1
 tnD1 hsBI~678D1 D1 D1 
D1 D1 D1 D1 D1 D1L& V    5& 5U68F3CXfEU+U%V 5 5 5 5n Yv V 8F;K P`    	5 	5$4 	5 	5 	5 	5 	5 	5 	5 	5r|   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 )rK   Nin_channelsch1x1ch3x3redch3x3ch5x5redch5x5	pool_projrv   .r(   c	           	         t                                                       |t          } |||d          | _        t	          j         |||d           |||dd                    | _        t	          j         |||d           |||dd                    | _        t	          j        t	          j        dddd           |||d                    | _	        d S )Nr   r1   r*   r3   T)r-   r.   r/   r0   )
rH   rI   rJ   branch1rS   
Sequentialbranch2branch3rT   branch4)
ru   r   r   r   r   r   r   r   rv   rz   s
            r{   rI   zInception.__init__   s    	$J!z+u!DDD}J{H!<<<jjSXfgqr>s>s>s
 
 }J{H!<<< JxAqAAA	
 
 }LQq!tLLLJ{I1===
 
r|   r}   c                     |                      |          }|                     |          }|                     |          }|                     |          }||||g}|S r   )r   r   r   r   )ru   r}   r   r   r   r   outputss          r{   r   zInception._forward   sQ    ,,q//,,q//,,q//,,q//GWg6r|   c                 V    |                      |          }t          j        |d          S r   )r   rn   r   )ru   r}   r   s      r{   r   zInception.forward   s%    --""y!$$$r|   r   )r   r   r   r   r   r   rS   r   rI   r
   r   r   r   r   r   s   @r{   rK   rK      s         :>
 

 
 	

 
 
 
 
 Xc29n56
 

 
 
 
 
 
@& T&\    % %F % % % % % % % %r|   rK   c                   p     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 )rL   Nr"   r   r#   rv   .r&   r(   c                    t                                                       |t          } ||dd          | _        t	          j        dd          | _        t	          j        d|          | _        t	          j        |          | _	        d S )Nr5   r   r1   i   rB   r@   )
rH   rI   rJ   convrS   ri   fc1fc2rh   r&   )ru   r   r#   rv   r&   rz   s        r{   rI   zInceptionAux.__init__   s|     	$JJ{CQ???	9T4((9T;//zG,,,r|   r}   c                 *   t          j        |d          }|                     |          }t          j        |d          }t          j        |                     |          d          }|                     |          }|                     |          }|S )N)   r   r   Tinplace)	Fadaptive_avg_pool2dr   rn   r   relur   r&   r   ru   r}   s     r{   r   zInceptionAux.forward   sw    !!V,,IIaLLM!QF488A;;---LLOOHHQKK r|   )Nr"   )r   r   r   r   r   r   rS   r   r   rI   r
   r   r   r   s   @r{   rL   rL      s        
 :>- -- - Xc29n56	-
 - 
- - - - - -  F        r|   rL   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 )	rJ   r   out_channelskwargsr(   Nc                     t                                                       t          j        ||fddi|| _        t          j        |d          | _        d S )Nrt   FgMbP?)eps)rH   rI   rS   rm   r   rr   bn)ru   r   r   r   rz   s       r{   rI   zBasicConv2d.__init__  sS    Ik<NNeNvNN	.5999r|   r}   c                     |                      |          }|                     |          }t          j        |d          S )NTr   )r   r   r   r   r   s     r{   r   zBasicConv2d.forward  s5    IIaLLGGAJJva&&&&r|   )	r   r   r   r   r   rI   r
   r   r   r   s   @r{   rJ   rJ   
  s{        :C :s :c :d : : : : : :
' 'F ' ' ' ' ' ' ' 'r|   rJ   c                   `    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dS )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 r|   r{   r   r     sz        GH7.#>>>! .g##     L
 
  M& GGGr|   r   
pretrained)weightsT)r   progressr   r   r   r(   c                    t                               |           } |                    dd          }| `d|vrt          |dd           t          |dd           t          |dd           t          |dt	          | j        d                              t          di |}| V|                    |                     |d	                     |sd|_	        d|_
        d|_        n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   rP   r   r   load_state_dictget_state_dictr   rd   re   rM   rN   )r   r   r   original_aux_logitsmodels        r{   r   r   -  s   *  &&w//G **\599F**!&*;TBBBflD999fne<<<fmSl9S5T5TUUUEg44hSW4XXYYY" 	$EEJEJJMr   Lr|   ),rM   collectionsr   	functoolsr   typingr   r   r   r   r	   rn   torch.nnrS   torch.nn.functional
functionalr   r
   transforms._presetsr   utilsr   _apir   r   r   _metar   _utilsr   r   __all__r   __annotations__r   r   r   rK   rL   rJ   r   r   r   r   r   r|   r{   <module>r      s    " " " " " "       7 7 7 7 7 7 7 7 7 7 7 7 7 7                       5 5 5 5 5 5 ' ' ' ' ' ' 6 6 6 6 6 6 6 6 6 6 ' ' ' ' ' ' B B B B B B B B c
b
b :02Z2Z2Z[[ .4XfEUfnoufv#w#w    % X5 X5 X5 X5 X5	 X5 X5 X5v,% ,% ,% ,% ,%	 ,% ,% ,%^         29      F	' 	' 	' 	' 	'") 	' 	' 	'       . ,0A0O!PQQQ8<t * * *(#45 * *_b *gp * * * RQ * * *r|   