
    khGC              
       h   d Z ddl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
    )partialN)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 fd	Zd Zd Z xZS )
InceptionAc                 $   t         t        |           |xs t        } ||dd      | _         ||dd      | _         |dddd      | _         ||dd      | _         |ddd	d      | _         |ddd	d      | _	         |||d      | _
        y )
N@   r   kernel_size0         r   padding`      )superr   __init__r   	branch1x1branch5x5_1branch5x5_2branch3x3dbl_1branch3x3dbl_2branch3x3dbl_3branch_pool)selfin_channelspool_features
conv_block	__class__s       T/var/www/teggl/fontify/venv/lib/python3.12/site-packages/timm/models/inception_v3.pyr"   zInceptionA.__init__   s    j$(*.;
#KC%k21E%b"!QG(baH(RQJ(RQJ%k=aP    c                 2   | j                  |      }| j                  |      }| j                  |      }| j                  |      }| j	                  |      }| j                  |      }t        j                  |ddd      }| j                  |      }||||g}|S Nr    r   r   strider   )	r#   r$   r%   r&   r'   r(   F
avg_pool2dr)   )r*   xr#   	branch5x5branch3x3dblr)   outputss          r/   _forwardzInceptionA._forward&   s    NN1%	$$Q'	$$Y/	**1-**<8**<8ll1!AqI&&{3i{Cr0   c                 P    | j                  |      }t        j                  |d      S Nr   r;   torchcatr*   r7   r:   s      r/   forwardzInceptionA.forward6   !    --"yy!$$r0   N__name__
__module____qualname__r"   r;   rB   __classcell__r.   s   @r/   r   r      s    Q %r0   r   c                   ,     e Zd Zd fd	Zd Zd Z xZS )
InceptionBc                     t         t        |           |xs t        } ||ddd      | _         ||dd      | _         |dddd	      | _         |dddd      | _        y )
N  r    r   r   r4   r   r   r   r   r   )r!   rL   r"   r   	branch3x3r&   r'   r(   r*   r+   r-   r.   s      r/   r"   zInceptionB.__init__=   sc    j$(*.;
#K!AN(baH(RQJ(RQqIr0   c                     | j                  |      }| j                  |      }| j                  |      }| j                  |      }t	        j
                  |dd      }|||g}|S Nr    r   rO   )rP   r&   r'   r(   r5   
max_pool2d)r*   r7   rP   r9   r)   r:   s         r/   r;   zInceptionB._forwardF   sc    NN1%	**1-**<8**<8ll1!A>lK8r0   c                 P    | j                  |      }t        j                  |d      S r=   r>   rA   s      r/   rB   zInceptionB.forwardR   rC   r0   rD   rE   rJ   s   @r/   rL   rL   ;   s    J
%r0   rL   c                   ,     e Zd Zd fd	Zd Zd Z xZS )
InceptionCc                    t         t        |           |xs t        } ||dd      | _        |} |||d      | _         |||dd      | _         ||ddd      | _         |||d      | _         |||dd      | _	         |||dd      | _
         |||dd      | _         ||ddd      | _         ||dd      | _        y )	N   r   r   r      r   r    r   r[   r   r    r   )r!   rW   r"   r   r#   branch7x7_1branch7x7_2branch7x7_3branch7x7dbl_1branch7x7dbl_2branch7x7dbl_3branch7x7dbl_4branch7x7dbl_5r)   )r*   r+   channels_7x7r-   c7r.   s        r/   r"   zInceptionC.__init__Y   s    j$(*.;
#K!D%k21E%b"&&Q%b#66R(baH(RVVT(RVVT(RVVT(SffU%k3AFr0   c                    | j                  |      }| j                  |      }| j                  |      }| j                  |      }| j	                  |      }| j                  |      }| j                  |      }| j                  |      }| j                  |      }t        j                  |ddd      }| j                  |      }||||g}|S r2   )r#   r_   r`   ra   rb   rc   rd   re   rf   r5   r6   r)   )r*   r7   r#   	branch7x7branch7x7dblr)   r:   s          r/   r;   zInceptionC._forwardk   s    NN1%	$$Q'	$$Y/	$$Y/	**1-**<8**<8**<8**<8ll1!AqI&&{3i{Cr0   c                 P    | j                  |      }t        j                  |d      S r=   r>   rA   s      r/   rB   zInceptionC.forward~   rC   r0   rD   rE   rJ   s   @r/   rW   rW   W   s    G$&%r0   rW   c                   ,     e Zd Zd fd	Zd Zd Z xZS )
InceptionDc                    t         t        |           |xs t        } ||dd      | _         |dddd      | _         ||dd      | _         |dddd	
      | _         |dddd
      | _         |dddd      | _	        y )NrY   r   r   @  r    r   rO   rZ   r\   r   r]   r^   )
r!   rn   r"   r   branch3x3_1branch3x3_2branch7x7x3_1branch7x7x3_2branch7x7x3_3branch7x7x3_4rQ   s      r/   r"   zInceptionD.__init__   s    j$(*.;
%k3AF%c3AaH'SaH'SffU'SffU'SaJr0   c                    | j                  |      }| j                  |      }| j                  |      }| j                  |      }| j	                  |      }| j                  |      }t        j                  |dd      }|||g}|S rS   )rq   rr   rs   rt   ru   rv   r5   rT   )r*   r7   rP   branch7x7x3r)   r:   s         r/   r;   zInceptionD._forward   s    $$Q'	$$Y/	((+((5((5((5ll1!A>k;7r0   c                 P    | j                  |      }t        j                  |d      S r=   r>   rA   s      r/   rB   zInceptionD.forward   rC   r0   rD   rE   rJ   s   @r/   rn   rn      s    	K%r0   rn   c                   ,     e Zd Zd fd	Zd Zd Z xZS )
InceptionEc                 h   t         t        |           |xs t        } ||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      | _        y )Nrp   r   r   rN   )r   r    )r   r   r   )r    r   )r   r   i  r    rY   )r!   r{   r"   r   r#   rq   branch3x3_2abranch3x3_2br&   r'   branch3x3dbl_3abranch3x3dbl_3br)   rQ   s      r/   r"   zInceptionE.__init__   s    j$(*.;
#K!D%k3AF&sCVVT&sCVVT(cqI(cq!L)#sPVW)#sPVW%k3AFr0   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    r3   )r#   rq   r}   r~   r?   r@   r&   r'   r   r   r5   r6   r)   )r*   r7   r#   rP   r9   r)   r:   s          r/   r;   zInceptionE._forward   s    NN1%	$$Q'	i(i(
	 IIi+	**1-**<8  .  .
 yyq1ll1!AqI&&{3i{Cr0   c                 P    | j                  |      }t        j                  |d      S r=   r>   rA   s      r/   rB   zInceptionE.forward   rC   r0   rD   rE   rJ   s   @r/   r{   r{      s    G 0%r0   r{   c                   &     e Zd Zd fd	Zd Z xZS )InceptionAuxc                     t         t        |           |xs t        } ||dd      | _         |ddd      | _        d| j
                  _        t        d|      | _        d| j                  _        y )N   r   r      r   g{Gz?MbP?)	r!   r   r"   r   conv0conv1stddevr
   fc)r*   r+   num_classesr-   r.   s       r/   r"   zInceptionAux.__init__   s_    lD*,.;
Sa@
Sa8
 

k*r0   c                     t        j                  |dd      }| j                  |      }| j                  |      }t        j                  |d      }t        j                  |d      }| j                  |      }|S )Nr   r    rO   )r   r   r   )r5   r6   r   r   adaptive_avg_pool2dr?   flattenr   r*   r7   s     r/   rB   zInceptionAux.forward   sd    LL!4JJqMJJqM !!!V,MM!QGGAJr0   rD   )rF   rG   rH   r"   rB   rI   rJ   s   @r/   r   r      s    r0   r   c                   l    e Zd ZU dZej
                  j                  e   ed<   	 	 	 	 	 	 	 	 d 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_logitsc	           
      l   t         t        |           || _        || _        t        t        d||t        |      t        d            }	 |	|ddd	      | _         |	ddd
      | _	         |	dddd      | _
        t        j                  dd	      | _         |	ddd
      | _         |	ddd
      | _        t        j                  dd	      | _        t#        dd|	      | _        t#        dd|	      | _        t#        dd|	      | _        t+        d|	      | _        t/        dd|	      | _        t/        dd|	      | _        t/        dd|	      | _        t/        dd|	      | _        |rt9        d||	      | _        nd | _        t=        d|	      | _        tA        d|	      | _!        tA        d|	      | _"        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                  ||#      \  | _'        | _(        | _)        | 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   )epsT)inplace)r   
norm_layer	act_layernorm_kwargs
act_kwargs    r    r   rO   r   r   r   r   P   rY   )r,   r-      i   )r-   r   r   )rg   r-      i   i   Conv2d_2b_3x3)num_chs	reductionmodule   Conv2d_4a_3x3   Mixed_5d   Mixed_6eMixed_7c)	pool_type	drop_rater   g?)std)6r!   r   r"   r   r   r   r   dictConv2d_1a_3x3Conv2d_2a_3x3r   nn	MaxPool2dPool1Conv2d_3b_1x1r   Pool2r   Mixed_5bMixed_5cr   rL   Mixed_6arW   Mixed_6bMixed_6cMixed_6dr   r   	AuxLogitsrn   Mixed_7ar{   Mixed_7br   feature_infonum_featureshead_hidden_sizer	   global_pool	head_dropr   modules
isinstanceConv2dr
   hasattrr   r   weightBatchNorm2dinit	constant_bias)r*   r   in_chansr   r   r   r   norm_epsr   r-   mr   r.   s               r/   r"   zInceptionV3.__init__   s    	k4)+&$!*D)

 ("!AN'BA>'BAqI\\a:
'BA>'CQ?\\a:
"3bZP"3bZP"3bZP"3:>"3SZP"3SZP"3SZP"3SZP)#{zRDN!DN"3:>"4J?"4J?qA/B*=:>J?
 598D14E!	5
1$.$'  	-A!RYY':a+C%,Q%9sahhF3Ar~~.!!!((A.!!!&&!,	-r0   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      r/   _matcherz+InceptionV3.group_matcher.<locals>._matcher=  s    0HI1DOOA&IJ2JKQdooa(KL#* -AE$**S/'3q6":;;)!},- U|# JKs
   B$B))	enumerater   named_childrenpop)r*   coarseir   _r   r   s         @r/   group_matcherzInceptionV3.group_matcher8  sV    ,5odFYFYF[df6g,hiiyq&1aadi
w		$  js   Ac                     |rJ d       y )Nz$gradient checkpointing not supportedr   )r*   enables     r/   set_grad_checkpointingz"InceptionV3.set_grad_checkpointingI  s    AAAz6r0   returnc                     | j                   S rD   r   )r*   s    r/   get_classifierzInceptionV3.get_classifierM  s    wwr0   r   r   c                 p    || _         t        | j                  | j                   |      \  | _        | _        y )N)r   )r   r	   r   r   r   )r*   r   r   s      r/   reset_classifierzInceptionV3.reset_classifierQ  s/    &$5d6G6GIYIYep$q!$'r0   c                    | j                  |      }| j                  |      }| j                  |      }| j                  |      }| j	                  |      }| j                  |      }| j                  |      }| j                  |      }| j                  |      }| j                  |      }| j                  |      }| j                  |      }| j                  |      }| j                  |      }| j                  |      }|S rD   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   s     r/   forward_preauxzInceptionV3.forward_preauxU  s    q!q!q!JJqMq!q!JJqMMM!MM!MM!MM!MM!MM!MM!MM!r0   c                 l    | j                  |      }| j                  |      }| j                  |      }|S rD   )r   r   r   r   s     r/   forward_postauxzInceptionV3.forward_postauxg  s1    MM!MM!MM!r0   c                     | j                  |      }| j                  r&| j                  |      }| j                  |      }||fS | j                  |      }|S rD   )r   r   r   r   r*   r7   auxs      r/   forward_featureszInceptionV3.forward_featuresm  sU    "??..#C$$Q'Ac6M  #r0   
pre_logitsc                 t    | j                  |      }| j                  |      }|r|S | j                  |      }|S rD   )r   r   r   )r*   r7   r   s      r/   forward_headzInceptionV3.forward_headv  s:    QNN1HGGAJr0   c                     | j                   r)| j                  |      \  }}| j                  |      }||fS | j                  |      }| j                  |      }|S rD   )r   r   r   r   s      r/   rB   zInceptionV3.forward~  s[    ??**1-FAs!!!$Ac6M!!!$a r0   )  r    g        avgFbatchnorm2dr   reluF)T)r  )rF   rG   rH   __doc__r?   jitFinalbool__annotations__r"   ignorer   r   r   Moduler   intstrr   r   r   r   r   rB   rI   rJ   s   @r/   r   r      s    		%% $C-J YY   YYB B YY		  rC rc r$$ r0   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          r/   _create_inception_v3r    s    +GFJJO_aeDfgNL%0JN'++y8::ou555$(( &%  r0   c                 0    | dddddt         t        ddd
|S )	Nr  )r    +  r  )r   r   g      ?bicubiczConv2d_1a_3x3.convr   )
urlr   
input_size	pool_sizecrop_pctinterpolationmeanr   
first_conv
classifier)r   r   )r  r  s     r/   _cfgr'    s0    =vI'0F*$  r0   ztimm/zDhttps://download.pytorch.org/models/inception_v3_google-1a9a5a14.pth)	hf_hub_idr  )r(  )r(  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      r/   r-  r-    s     QJQ&QELr0   r)  r*  r+  )tf_inception_v3adv_inception_v3gluon_inception_v3r  ) )*r  	functoolsr   r?   torch.nnr   torch.nn.functional
functionalr5   	timm.datar   r   r   r   timm.layersr   r	   r
   r   _builderr   r   _manipulater   	_registryr   r   r   __all__r  r   rL   rW   rn   r{   r   r   r  r'  default_cfgsr-  rF   r   r0   r/   <module>r>     s9  
      r r M M * , ( Y Y/"% "%J% %8)% )%X% %>,% ,%^299 :W")) Wt. % RT
 !73 !%w 7  $"  & *   
 H-23' r0   