
    NgcC              
          d Z ddlm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)           dS ),z Inception-V3

Originally from torchvision Inception3 model
Licensed BSD-Clause 3 https://github.com/pytorch/vision/blob/master/LICENSE
    )partial)OptionalN)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 )
InceptionANc                 x   t          t          |                                            |pt          } ||dd          | _         ||dd          | _         |dddd          | _         ||dd          | _         |ddd	d          | _         |ddd	d          | _	         |||d          | _
        d S )
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/html/ai-engine/env/lib/python3.11/site-packages/timm/models/inception_v3.pyr#   zInceptionA.__init__   s    j$((***.;
#KCCC%:k21EEE%:b"!QGGG(jbaHHH(jRQJJJ(jRQJJJ%:k=aPPP    c                 h   |                      |          }|                     |          }|                     |          }|                     |          }|                     |          }|                     |          }t          j        |ddd          }|                     |          }||||g}|S Nr!   r   r   strider   )	r$   r%   r&   r'   r(   r)   F
avg_pool2dr*   )r+   xr$   	branch5x5branch3x3dblr*   outputss          r0   _forwardzInceptionA._forward'   s    NN1%%	$$Q''	$$Y//	**1--**<88**<88l1!AqIII&&{33i{Cr1   c                 V    |                      |          }t          j        |d          S Nr   r<   torchcatr+   r8   r;   s      r0   forwardzInceptionA.forward7   %    --""y!$$$r1   N__name__
__module____qualname__r#   r<   rC   __classcell__r/   s   @r0   r   r      sa        Q Q Q Q Q Q   % % % % % % %r1   r   c                   ,     e Zd Zd fd	Zd Zd Z xZS )
InceptionBNc                    t          t          |                                            |pt          } ||ddd          | _         ||dd          | _         |dddd	          | _         |dddd          | _        d S )
N  r!   r   r   r5   r   r   r   r    r   )r"   rM   r#   r   	branch3x3r'   r(   r)   r+   r,   r.   r/   s      r0   r#   zInceptionB.__init__>   s    j$((***.;
#K!ANNN(jbaHHH(jRQJJJ(jRQqIIIr1   c                     |                      |          }|                     |          }|                     |          }|                     |          }t	          j        |dd          }|||g}|S Nr!   r   rP   )rQ   r'   r(   r)   r6   
max_pool2d)r+   r8   rQ   r:   r*   r;   s         r0   r<   zInceptionB._forwardG   ss    NN1%%	**1--**<88**<88l1!A>>>lK8r1   c                 V    |                      |          }t          j        |d          S r>   r?   rB   s      r0   rC   zInceptionB.forwardS   rD   r1   rE   rF   rK   s   @r0   rM   rM   <   sa        J J J J J J
 
 
% % % % % % %r1   rM   c                   ,     e Zd Zd fd	Zd Zd Z xZS )
InceptionCNc                    t          t          |                                            |pt          } ||dd          | _        |} |||d          | _         |||dd          | _         ||ddd          | _         |||d          | _         |||dd          | _	         |||dd          | _
         |||dd          | _         ||ddd          | _         ||dd          | _        d S )	N   r   r   r      r   r!   r   r\   r   r!   r   )r"   rX   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        r0   r#   zInceptionC.__init__Z   s9   j$((***.;
#K!DDD%:k21EEE%:b"&&QQQ%:b#66RRR(jbaHHH(jRVVTTT(jRVVTTT(jRVVTTT(jSffUUU%:k3AFFFr1   c                    |                      |          }|                     |          }|                     |          }|                     |          }|                     |          }|                     |          }|                     |          }|                     |          }|                     |          }t          j
        |ddd          }|                     |          }||||g}|S r3   )r$   r`   ra   rb   rc   rd   re   rf   rg   r6   r7   r*   )r+   r8   r$   	branch7x7branch7x7dblr*   r;   s          r0   r<   zInceptionC._forwardl   s    NN1%%	$$Q''	$$Y//	$$Y//	**1--**<88**<88**<88**<88l1!AqIII&&{33i{Cr1   c                 V    |                      |          }t          j        |d          S r>   r?   rB   s      r0   rC   zInceptionC.forward   rD   r1   rE   rF   rK   s   @r0   rX   rX   X   sa        G G G G G G$  &% % % % % % %r1   rX   c                   ,     e Zd Zd fd	Zd Zd Z xZS )
InceptionDNc                 T   t          t          |                                            |pt          } ||dd          | _         |dddd          | _         ||dd          | _         |dddd	
          | _         |dddd
          | _         |dddd          | _	        d S )NrZ   r   r   @  r!   r   rP   r[   r]   r   r^   r_   )
r"   ro   r#   r   branch3x3_1branch3x3_2branch7x7x3_1branch7x7x3_2branch7x7x3_3branch7x7x3_4rR   s      r0   r#   zInceptionD.__init__   s    j$((***.;
%:k3AFFF%:c3AaHHH'ZSaHHH'ZSffUUU'ZSffUUU'ZSaJJJr1   c                 :   |                      |          }|                     |          }|                     |          }|                     |          }|                     |          }|                     |          }t          j        |dd          }|||g}|S rT   )rr   rs   rt   ru   rv   rw   r6   rU   )r+   r8   rQ   branch7x7x3r*   r;   s         r0   r<   zInceptionD._forward   s    $$Q''	$$Y//	((++((55((55((55l1!A>>>k;7r1   c                 V    |                      |          }t          j        |d          S r>   r?   rB   s      r0   rC   zInceptionD.forward   rD   r1   rE   rF   rK   s   @r0   ro   ro      sa        	K 	K 	K 	K 	K 	K  % % % % % % %r1   ro   c                   ,     e Zd Zd fd	Zd Zd Z xZS )
InceptionENc                    t          t          |                                            |p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          | _        d S )Nrq   r   r   rO   )r   r!   )r   r   r   )r!   r   )r   r   i  r!   rZ   )r"   r|   r#   r   r$   rr   branch3x3_2abranch3x3_2br'   r(   branch3x3dbl_3abranch3x3dbl_3br*   rR   s      r0   r#   zInceptionE.__init__   s   j$((***.;
#K!DDD%:k3AFFF&JsCVVTTT&JsCVVTTT(jcqIII(jcq!LLL)z#sPVWWW)z#sPVWWW%:k3AFFFr1   c                    |                      |          }|                     |          }|                     |          |                     |          g}t	          j        |d          }|                     |          }|                     |          }|                     |          | 	                    |          g}t	          j        |d          }t          j        |ddd          }|                     |          }||||g}|S )Nr   r!   r4   )r$   rr   r~   r   r@   rA   r'   r(   r   r   r6   r7   r*   )r+   r8   r$   rQ   r:   r*   r;   s          r0   r<   zInceptionE._forward   s   NN1%%	$$Q''	i((i((
	 Ii++	**1--**<88  ..  ..
 yq11l1!AqIII&&{33i{Cr1   c                 V    |                      |          }t          j        |d          S r>   r?   rB   s      r0   rC   zInceptionE.forward   rD   r1   rE   rF   rK   s   @r0   r|   r|      sa        G G G G G G   0% % % % % % %r1   r|   c                   &     e Zd Zd fd	Zd Z xZS )InceptionAuxNc                    t          t          |                                            |pt          } ||dd          | _         |ddd          | _        d| j        _        t          d|          | _        d| j        _        d S )N   r   r      r   g{Gz?MbP?)	r"   r   r#   r   conv0conv1stddevr   fc)r+   r,   num_classesr.   r/   s       r0   r#   zInceptionAux.__init__   s    lD!!**,,,.;
ZSa@@@
ZSa888
 
k**r1   c                    t          j        |dd          }|                     |          }|                     |          }t          j        |d          }t          j        |d          }|                     |          }|S )Nr   r!   rP   )r   r   r   )r6   r7   r   r   adaptive_avg_pool2dr@   flattenr   r+   r8   s     r0   rC   zInceptionAux.forward   so    L!444JJqMMJJqMM !!V,,M!QGGAJJr1   rE   )rG   rH   rI   r#   rC   rJ   rK   s   @r0   r   r      sL                   r1   r   c                   *    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_logits  r!           avgFbatchnorm2dr   reluc	           
      2   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          | j$        | j        ||#          \  | _'        | _(        | _)        | *                                D ]}
tW          |
t          j,                  stW          |
t          j-                  r0t]          |
d$          r|
j/        nd%}ta          |
j1        |&           ftW          |
t          j2                  rJt          j3        4                    |
j1        d           t          j3        4                    |
j5        d           d S )'Nr   )epsT)inplace)r   
norm_layer	act_layernorm_kwargs
act_kwargs    r!   r   rP   r   r   r   r   P   rZ   )r-   r.      i   )r.   r   r   )rh   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   rM   Mixed_6arX   Mixed_6bMixed_6cMixed_6dr   r   	AuxLogitsro   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               r0   r#   zInceptionV3.__init__   s    	k4  ))+++&$!***D)))
 
 

 (Z"!ANNN'ZBA>>>'ZBAqIII\a:::
'ZBA>>>'ZCQ???\a:::
"3bZPPP"3bZPPP"3bZPPP"3:>>>"3SZPPP"3SZPPP"3SZPPP"3SZPPP 	")#{zRRRDNN!DN"3:>>>"4J???"4J???qAAA/BBB*===:>>>J???
 598D14E!	5
 5
 5
1$.$'  	- 	-A!RY'' -:a+C+C -%,Q%9%9BsahF33333Ar~.. -!!!(A...!!!&!,,,	- 	-r1   c                     d t          t          |                                 d                    D                                 d           fd}|S )Nc                      i | ]\  }\  }}||S  r   ).0ik_s       r0   
<dictcomp>z-InceptionV3.group_matcher.<locals>.<dictcomp>;  s"    iiiyq&1aaiiir1   r   )prefixr   c           	      P    t           fddD                       rdS t           fddD                       rdS                                 D ]G}|t                               d          d t	          |                             k    r
|         c S Ht          d          S )	Nc                 :    g | ]}                     |          S r   
startswithr   nnames     r0   
<listcomp>z?InceptionV3.group_matcher.<locals>._matcher.<locals>.<listcomp>?  s%    III1DOOA&&IIIr1   )Conv2d_1Conv2d_2r   c                 :    g | ]}                     |          S r   r   r   s     r0   r   z?InceptionV3.group_matcher.<locals>._matcher.<locals>.<listcomp>A  s%    KKKQdooa((KKKr1   )Conv2d_3Conv2d_4r   .inf)anykeystuplesplitlenfloat)r   r   
module_maps   ` r0   _matcherz+InceptionV3.group_matcher.<locals>._matcher>  s    IIII0HIIIJJ $qKKKK2JKKKLL $q#** - -AE$**S//'3q66'":;;;;)!},,, <U||#r1   )	enumerater   named_childrenpop)r+   coarser   r   s      @r0   group_matcherzInceptionV3.group_matcher9  sj    iiIodFYFYF[F[df6g6g6g,h,hiii
w		$ 		$ 		$ 		$ 		$ r1   Tc                     |r
J d            d S )Nz$gradient checkpointing not supportedr   )r+   enables     r0   set_grad_checkpointingz"InceptionV3.set_grad_checkpointingJ  s    AAAAAAAAr1   returnc                     | j         S rE   r   )r+   s    r0   get_classifierzInceptionV3.get_classifierN  s	    wr1   r   r   c                 f    || _         t          | j        | j         |          \  | _        | _        d S )N)r   )r   r
   r   r   r   )r+   r   r   s      r0   reset_classifierzInceptionV3.reset_classifierR  s3    &$5d6GIYep$q$q$q!$'''r1   c                 |   |                      |          }|                     |          }|                     |          }|                     |          }|                     |          }|                     |          }|                     |          }|                     |          }|                     |          }| 	                    |          }| 
                    |          }|                     |          }|                     |          }|                     |          }|                     |          }|S rE   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   s     r0   forward_preauxzInceptionV3.forward_preauxV  s   q!!q!!q!!JJqMMq!!q!!JJqMMMM!MM!MM!MM!MM!MM!MM!MM!r1   c                     |                      |          }|                     |          }|                     |          }|S rE   )r   r   r   r   s     r0   forward_postauxzInceptionV3.forward_postauxh  s:    MM!MM!MM!r1   c                     |                      |          }| j        r.|                     |          }|                     |          }||fS |                     |          }|S rE   )r  r   r   r  r+   r8   auxs      r0   forward_featureszInceptionV3.forward_featuresn  sd    ""? 	..##C$$Q''Ac6M  ##r1   
pre_logitsc                     |                      |          }|                     |          }|r|S |                     |          }|S rE   )r   r   r   )r+   r8   r  s      r0   forward_headzInceptionV3.forward_headw  sG    QNN1 	HGGAJJr1   c                     | j         r1|                     |          \  }}|                     |          }||fS |                     |          }|                     |          }|S rE   )r   r
  r  r  s      r0   rC   zInceptionV3.forward  sj    ? 	**1--FAs!!!$$Ac6M!!!$$a  r1   )r   r!   r   r   Fr   r   r   F)T)r   )rG   rH   rI   __doc__r@   jitFinalbool__annotations__r#   ignorer   r   r   Moduler   intstrr  r  r  r
  r  rC   rJ   rK   s   @r0   r   r      s         	%%%% $C- C- C- C- C- C-J Y     YB B B B Y	    r rC rc r r r r  $     $          r1   Fc                    t          | |                    dd                     }|                    dd          }d}|r|j        dk    }|r|                    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          r0   _create_inception_v3r%    s    +GFJJO_aeDfDfgggNL%00JN 9'+y8 )::ou55555$(( &%    r1    c                 4    | 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     r0   _cfgr2    s5    =vI'0F*$   r1   ztimm/zDhttps://download.pytorch.org/models/inception_v3_google-1a9a5a14.pth)	hf_hub_idr*  )r3  )r3  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 )Ninception_v3r!  )r8  )r%  )r!  r"  models      r0   r8  r8    s     QQJQ&QQELr1   r4  r5  r6  )tf_inception_v3adv_inception_v3gluon_inception_v3r  )r&  ),r  	functoolsr   typingr   r@   torch.nnr   torch.nn.functional
functionalr6   	timm.datar   r   r   r   timm.layersr	   r
   r   r   _builderr   r   _manipulater   	_registryr   r   r   __all__r  r   rM   rX   ro   r|   r   r   r%  r2  default_cfgsr8  rG   r   r1   r0   <module>rI     sV   
                             r r r r r r r r r r r r M M M M M M M M M M M M * * * * * * , , , , , , ( ( ( ( ( ( Y Y Y Y Y Y Y Y Y Y/"% "% "% "% "% "% "% "%J% % % % % % % %8)% )% )% )% )% )% )% )%X% % % % % % % %>,% ,% ,% ,% ,% ,% ,% ,%^    29   :W W W W W") W W Wt   .    %$ DRT T T
 !D7333 !%w 7 7 7  $t"      & &  *      
  H-23' '     r1   