
    ^jxI              
       x   d Z 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mZmZmZ ddlmZmZmZ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g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j@                        Z% G d dej@                        Z& G d dej@                        Z'd(dZ(d)dZ) e e)dd       e)d       e)d       e)dee       d!      Z*ed(d"e'fd#       Z+ ee,d$d%d&d'       y)*z Inception-V3

Originally from torchvision Inception3 model
Licensed BSD-Clause 3 https://github.com/pytorch/vision/blob/master/LICENSE
    )partial)OptionalTypeN)IMAGENET_DEFAULT_STDIMAGENET_DEFAULT_MEANIMAGENET_INCEPTION_MEANIMAGENET_INCEPTION_STD)trunc_normal_create_classifierLinearConvNormAct   )build_model_with_cfg)resolve_pretrained_cfg)flatten_modules)register_modelgenerate_default_cfgsregister_model_deprecationsInceptionV3c            	       `     e Zd Z	 	 	 ddededeeej                        f fdZd Z	d Z
 xZS )
InceptionAin_channelspool_features
conv_blockc                 (   ||d}t         |           |xs t        } ||dfddi|| _         ||dfddi|| _         |d
ddd|| _         ||dfddi|| _         |dd	dd|| _         |dd	dd|| _         |||fddi|| _	        y )Ndevicedtype@   kernel_sizer   0         r    padding   )r!   r   r   `   r(   r(   )
super__init__r   	branch1x1branch5x5_1branch5x5_2branch3x3dbl_1branch3x3dbl_2branch3x3dbl_3branch_pool)selfr   r   r   r   r   dd	__class__s          c/var/www/ramen.bs-engineer-server.com/venv/lib/python3.12/site-packages/timm/models/inception_v3.pyr+   zInceptionA.__init__   s     /.;
#KIIbI%k2K1KK%M!QM"M(bNaN2N(PQPRP(PQPRP%k=VaVSUV    c                 2   | j                  |      }| j                  |      }| j                  |      }| j                  |      }| j	                  |      }| j                  |      }t        j                  |ddd      }| j                  |      }||||g}|S Nr&   r   r    strider%   )	r,   r-   r.   r/   r0   r1   F
avg_pool2dr2   )r3   xr,   	branch5x5branch3x3dblr2   outputss          r6   _forwardzInceptionA._forward/   s    NN1%	$$Q'	$$Y/	**1-**<8**<8ll1!AqI&&{3i{Cr7   c                 P    | j                  |      }t        j                  |d      S Nr   rB   torchcatr3   r>   rA   s      r6   forwardzInceptionA.forward?   !    --"yy!$$r7   NNN__name__
__module____qualname__intr   r   nnModuler+   rB   rI   __classcell__r5   s   @r6   r   r      sJ     59WW W !bii1	W, %r7   r   c                   \     e Zd Z	 	 	 ddedeeej                        f fdZd Z	d Z
 xZS )
InceptionBr   r   c                     ||d}t         |           |xs t        } ||dfddd|| _         ||dfddi|| _         |d
ddd	|| _         |dddd|| _        y )Nr     r&   r#   r    r;   r   r    r   r$   r'   r)   )r*   r+   r   	branch3x3r/   r0   r1   r3   r   r   r   r   r4   r5   s         r6   r+   zInceptionB.__init__F   s     /.;
#KT!ATQST(bNaN2N(PQPRP(OQqOBOr7   c                     | j                  |      }| j                  |      }| j                  |      }| j                  |      }t	        j
                  |dd      }|||g}|S Nr&   r#   rY   )rZ   r/   r0   r1   r<   
max_pool2d)r3   r>   rZ   r@   r2   rA   s         r6   rB   zInceptionB._forwardV   sc    NN1%	**1-**<8**<8ll1!A>lK8r7   c                 P    | j                  |      }t        j                  |d      S rD   rE   rH   s      r6   rI   zInceptionB.forwardb   rJ   r7   rK   rL   rT   s   @r6   rV   rV   D   s?    
 59PP !bii1P 
%r7   rV   c            	       `     e Zd Z	 	 	 ddededeeej                        f fdZd Z	d Z
 xZS )
InceptionCr   channels_7x7r   c                    ||d}t         |           |xs t        } ||dfddi|| _        |} |||fddi|| _         |||fddd|| _         ||dfdd	d|| _         |||fddi|| _         |||fdd	d|| _         |||fddd|| _	         |||fdd	d|| _
         ||dfddd|| _         ||dfddi|| _        y )
Nr      r    r   r      r   r&   r$   rf   r   r&   r   )r*   r+   r   r,   branch7x7_1branch7x7_2branch7x7_3branch7x7dbl_1branch7x7dbl_2branch7x7dbl_3branch7x7dbl_4branch7x7dbl_5r2   )	r3   r   rb   r   r   r   r4   c7r5   s	           r6   r+   zInceptionC.__init__i   s4    /.;
#KJ!JrJ%k2K1KK%b"W&&WTVW%b#X66XUWX(bNaN2N(RZVVZWYZ(RZVVZWYZ(RZVVZWYZ(S[ff[XZ[%k3LALLr7   c                    | j                  |      }| j                  |      }| j                  |      }| j                  |      }| j	                  |      }| j                  |      }| j                  |      }| j                  |      }| j                  |      }t        j                  |ddd      }| j                  |      }||||g}|S r9   )r,   rj   rk   rl   rm   rn   ro   rp   rq   r<   r=   r2   )r3   r>   r,   	branch7x7branch7x7dblr2   rA   s          r6   rB   zInceptionC._forward   s    NN1%	$$Q'	$$Y/	$$Y/	**1-**<8**<8**<8**<8ll1!AqI&&{3i{Cr7   c                 P    | j                  |      }t        j                  |d      S rD   rE   rH   s      r6   rI   zInceptionC.forward   rJ   r7   rK   rL   rT   s   @r6   ra   ra   g   sJ     59MM M !bii1	M4&%r7   ra   c                   \     e Zd Z	 	 	 ddedeeej                        f fdZd Z	d Z
 xZS )
InceptionDr   r   c                    ||d}t         |           |xs t        } ||dfddi|| _         |dddd|| _         ||dfddi|| _         |ddd	d
|| _         |dddd
|| _         |dddd|| _        y )Nr   rd   r    r   r&   r#   rY   re   rg   r$   rh   ri   )rd   @  )rd   rd   )	r*   r+   r   branch3x3_1branch3x3_2branch7x7x3_1branch7x7x3_2branch7x7x3_3branch7x7x3_4r[   s         r6   r+   zInceptionD.__init__   s     /.;
%k3LALL%NAaN2N'SNaN2N'[ff[XZ['[ff[XZ['PaPRPr7   c                    | j                  |      }| j                  |      }| j                  |      }| j                  |      }| j	                  |      }| j                  |      }t        j                  |dd      }|||g}|S r]   )r{   r|   r}   r~   r   r   r<   r^   )r3   r>   rZ   branch7x7x3r2   rA   s         r6   rB   zInceptionD._forward   s    $$Q'	$$Y/	((+((5((5((5ll1!A>k;7r7   c                 P    | j                  |      }t        j                  |d      S rD   rE   rH   s      r6   rI   zInceptionD.forward   rJ   r7   rK   rL   rT   s   @r6   rx   rx      s?    
 59QQ !bii1Q$%r7   rx   c                   \     e Zd Z	 	 	 ddedeeej                        f fdZd Z	d Z
 xZS )
InceptionEr   r   c                 h   ||d}t         |           |xs t        } ||dfddi|| _         ||dfddi|| _         |dddd|| _         |dd	d
d|| _         ||dfddi|| _         |dddd|| _         |dddd|| _	         |dd	d
d|| _
         ||dfddi|| _        y )Nr   rz   r    r   rX   )r   r&   )r   r   r$   )r&   r   )r   r     r&   rd   )rX   rX   )r   rX   )r*   r+   r   r,   r{   branch3x3_2abranch3x3_2br/   r0   branch3x3dbl_3abranch3x3dbl_3br2   r[   s         r6   r+   zInceptionE.__init__   s     /.;
#KJ!JrJ%k3LALL&ZVVZWYZ&ZVVZWYZ(cOqOBO(Rq!RrR)]PV]Z\])]PV]Z\]%k3LALLr7   c                    | j                  |      }| j                  |      }| j                  |      | j                  |      g}t	        j
                  |d      }| j                  |      }| j                  |      }| j                  |      | j                  |      g}t	        j
                  |d      }t        j                  |ddd      }| j                  |      }||||g}|S )Nr   r&   r:   )r,   r{   r   r   rF   rG   r/   r0   r   r   r<   r=   r2   )r3   r>   r,   rZ   r@   r2   rA   s          r6   rB   zInceptionE._forward   s    NN1%	$$Q'	i(i(
	 IIi+	**1-**<8  .  .
 yyq1ll1!AqI&&{3i{Cr7   c                 P    | j                  |      }t        j                  |d      S rD   rE   rH   s      r6   rI   zInceptionE.forward   rJ   r7   rK   rL   rT   s   @r6   r   r      s?    
 59MM !bii1M.0%r7   r   c            	       Z     e Zd Z	 	 	 ddededeeej                        f fdZd Z	 xZ
S )InceptionAuxr   num_classesr   c                     ||d}t         |           |xs t        } ||dfddi|| _         |d	ddi|| _        d| j                  _        t        d|fi || _        d| j                  _        y )
Nr      r    r      r"   g{Gz?MbP?)r   r   )r*   r+   r   conv0conv1stddevr   fc)r3   r   r   r   r   r   r4   r5   s          r6   r+   zInceptionAux.__init__   sz     /.;
SFaF2F
>a>2>
 

k0R0r7   c                     t        j                  |dd      }| j                  |      }| j                  |      }t        j                  |d      }t        j                  |d      }| j                  |      }|S )Nr"   r&   rY   )r   r   r   )r<   r=   r   r   adaptive_avg_pool2drF   flattenr   r3   r>   s     r6   rI   zInceptionAux.forward
  sd    LL!4JJqMJJqM !!!V,MM!QGGAJr7   rK   )rM   rN   rO   rP   r   r   rQ   rR   r+   rI   rS   rT   s   @r6   r   r      sA     59  !bii1	"r7   r   c                       e Zd ZU dZej
                  j                  e   ed<   	 	 	 	 	 	 	 	 	 	 dde	de	de
dededede
d	ef fd
Zej
                  j                  dd       Zej
                  j                  dd       Zej
                  j                  dej"                  fd       Zdde	defdZd Zd Zd ZddefdZd Z xZS )r   zInception-V3
    
aux_logitsr   in_chans	drop_rateglobal_pool
norm_layernorm_eps	act_layerc           
      z   t         |           |	|
d}|| _        || _        || _        t        t        d||t        |      t        d            } ||dfdd	d
|| _         |d%ddi|| _	         |d&ddd|| _
        t        j                  dd	
      | _         |d'ddi|| _         |d(ddi|| _        t        j                  dd	
      | _        t#        d)d|d|| _        t#        d*d|d|| _        t#        d+d|d|| _        t+        d+d|i|| _        t/        d,d|d|| _        t/        d,d|d|| _        t/        d,d|d|| _        t/        d,d|d|| _        |rt9        d|fd|i|| _        nd | _        t=        d,d|i|| _        tA        d-d|i|| _!        tA        d.d|i|| _"        t        dd	d      t        ddd      t        ddd      t        ddd      t        ddd       g| _#        dx| _$        | _%        tM        | jH                  | j                  f||d!|\  | _'        | _(        | _)        | jU                         D ]  }tW        |t        jX                        stW        |t        jZ                        r2t]        |d"      r|j^                  nd#}ta        |jb                  |$       itW        |t        jd                        st        jf                  ji                  |jb                  d       t        jf                  ji                  |jj                  d        y )/Nr   r   )epsT)inplace)r%   r   r   norm_kwargs
act_kwargs    r&   r#   rY   r    r   r   r$   rd   )r   r      r   r   r   )rb   r         Conv2d_2b_3x3)num_chs	reductionmodule   Conv2d_4a_3x3   Mixed_5d   Mixed_6eMixed_7c)	pool_typer   r   g?)std)r   r   )r   r   )r   P   )r   rd   )rd   )   )r   )r   )i   )r   )6r*   r+   r   r   r   r   r   dictConv2d_1a_3x3Conv2d_2a_3x3r   rQ   	MaxPool2dPool1Conv2d_3b_1x1r   Pool2r   Mixed_5bMixed_5cr   rV   Mixed_6ara   Mixed_6bMixed_6cMixed_6dr   r   	AuxLogitsrx   Mixed_7ar   Mixed_7br   feature_infonum_featureshead_hidden_sizer   r   	head_dropr   modules
isinstanceConv2dr   hasattrr   r
   weightBatchNorm2dinit	constant_bias)r3   r   r   r   r   r   r   r   r   r   r   r4   r   mr   r5   s                  r6   r+   zInceptionV3.__init__!  s-    	/& $!*D)

 ("T!ATQST'DADD'OAqOBO\\a:
'DADD'EQE"E\\a:
"VbZVSUV"VbZVSUV"VbZVSUV"D:DD"VSZVSUV"VSZVSUV"VSZVSUV"VSZVSUV)#{XzXUWXDN!DN"D:DD"EJE"E"EJE"EqA/B*=:>J?
 598D14E5
 "	5

 5
1$.$'  	-A!RYY':a+C%,Q%9sahhF3Ar~~.!!!((A.!!!&&!,	-r7   c                     t        t        | j                         d            D ci c]  \  }\  }}|| c}}}j                  d       fd}|S c c}}}w )N )prefixr   c           	      \   t        dD cg c]  }| j                  |       c}      ryt        dD cg c]  }| j                  |       c}      ryj                         D ]2  }|t        | j	                  d      d t        |             k(  s-|   c S  t        d      S c c}w c c}w )N)Conv2d_1Conv2d_2r   )Conv2d_3Conv2d_4r   .inf)any
startswithkeystuplesplitlenfloat)namenk
module_maps      r6   _matcherz+InceptionV3.group_matcher.<locals>._matcherp  s    0HI1DOOA&IJ2JKQdooa(KL#* -AE$**S/'3q6":;;)!},- U|# JKs
   B$B))	enumerater   named_childrenpop)r3   coarseir   _r   r   s         @r6   group_matcherzInceptionV3.group_matcherk  sV    ,5odFYFYF[df6g,hiiyq&1aadi
w		$  js   Ac                     |rJ d       y )Nz$gradient checkpointing not supportedr   )r3   enables     r6   set_grad_checkpointingz"InceptionV3.set_grad_checkpointing|  s    AAAz6r7   returnc                     | j                   S Nr   )r3   s    r6   get_classifierzInceptionV3.get_classifier  s    wwr7   c                 p    || _         t        | j                  | j                   |      \  | _        | _        y )N)r   )r   r   r   r   r   )r3   r   r   s      r6   reset_classifierzInceptionV3.reset_classifier  s/    &$5d6G6GIYIYep$q!$'r7   c                    | j                  |      }| j                  |      }| j                  |      }| j                  |      }| j	                  |      }| j                  |      }| j                  |      }| j                  |      }| j                  |      }| j                  |      }| j                  |      }| j                  |      }| j                  |      }| j                  |      }| j                  |      }|S r   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   s     r6   forward_preauxzInceptionV3.forward_preaux  s    q!q!q!JJqMq!q!JJqMMM!MM!MM!MM!MM!MM!MM!MM!r7   c                 l    | j                  |      }| j                  |      }| j                  |      }|S r   )r   r   r   r   s     r6   forward_postauxzInceptionV3.forward_postaux  s1    MM!MM!MM!r7   c                     | j                  |      }| j                  r&| j                  |      }| j                  |      }||fS | j                  |      }|S r   )r  r   r   r  r3   r>   auxs      r6   forward_featureszInceptionV3.forward_features  sU    "??..#C$$Q'Ac6M  #r7   
pre_logitsc                 t    | j                  |      }| j                  |      }|r|S | j                  |      }|S r   )r   r   r   )r3   r>   r
  s      r6   forward_headzInceptionV3.forward_head  s:    QNN1HGGAJr7   c                     | j                   r)| j                  |      \  }}| j                  |      }||fS | j                  |      }| j                  |      }|S r   )r   r	  r  r  s      r6   rI   zInceptionV3.forward  s[    ??**1-FAs!!!$Ac6M!!!$a r7   )
  r&   g        avgFbatchnorm2dr   reluNNF)T)r  )rM   rN   rO   __doc__rF   jitFinalbool__annotations__rP   r   strr+   ignorer   r   rQ   rR   r   r  r  r  r	  r  rI   rS   rT   s   @r6   r   r     s5   		%%  $!$$+"#H-H- H- 	H-
 H- H- H- H- H-T YY   YYB B YY		  rC rc r$$ r7   c                     t        | |j                  dd             }|j                  dd      }d}|r|j                  dk(  }|r|j                  dd      rJ |}n| }t	        t
        | |f||d|S )Npretrained_cfg)r  r   Ftv_in1kfeatures_only)r  pretrained_strict)r   r   gettagr   r   )variant
pretrainedkwargsr  r   has_aux_logitsload_stricts          r6   _create_inception_v3r&    s    +GFJJO_aeDfgNL%0JN'++y8::ou555$(( &%  r7   c                 2    | dddddt         t        dddd	|S )
Nr  )r&   +  r(  )r   r   g      ?bicubiczConv2d_1a_3x3.convr   z
apache-2.0)urlr   
input_size	pool_sizecrop_pctinterpolationmeanr   
first_conv
classifierlicense)r   r	   )r*  r#  s     r6   _cfgr3    s2    =vI'0F*$<  r7   ztimm/zDhttps://download.pytorch.org/models/inception_v3_google-1a9a5a14.pth)	hf_hub_idr*  )r4  )r4  r/  r   )zinception_v3.tv_in1kinception_v3.tf_in1kinception_v3.tf_adv_in1kinception_v3.gluon_in1kr   c                      t        dd| i|}|S )Nr"  )inception_v3)r&  )r"  r#  models      r6   r9  r9    s     QJQ&QELr7   r5  r6  r7  )tf_inception_v3adv_inception_v3gluon_inception_v3r  ) )-r  	functoolsr   typingr   r   rF   torch.nnrQ   torch.nn.functional
functionalr<   	timm.datar   r   r   r	   timm.layersr
   r   r   r   _builderr   r   _manipulater   	_registryr   r   r   __all__rR   r   rV   ra   rx   r   r   r   r&  r3  default_cfgsr9  rM   r   r7   r6   <module>rK     s?  
  !     r r M M * , ( Y Y/*% *%Z %  %F1% 1%h#% #%L3% 3%l"299 "J\")) \~. % RT
 !73 !%w 7  $"  & *   
 H-23' r7   