
    Ngu+                        d Z ddlmZ ddlZddlmZ ddlmZmZ ddl	m
Z
mZ ddlmZ ddl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 G d dej                  Z G d d	ej                  Zd)defdZ eddd d!d"d#d$eed%d&d'
i          Zed)d(            ZdS )*z Pytorch Inception-V4 implementation
Sourced from https://github.com/Cadene/tensorflow-model-zoo.torch (MIT License) which is
based upon Google's Tensorflow implementation and pretrained weights (Apache 2.0 License)
    )partialN)IMAGENET_INCEPTION_MEANIMAGENET_INCEPTION_STD)create_classifierConvNormAct   )build_model_with_cfg)register_modelgenerate_default_cfgsInceptionV4c                   (     e Zd Zef fd	Zd Z xZS )Mixed3ac                     t          t          |                                            t          j        dd          | _         |dddd          | _        d S )N      stride@   `   kernel_sizer   )superr   __init__nn	MaxPool2dmaxpoolconvself
conv_block	__class__s     T/var/www/html/ai-engine/env/lib/python3.11/site-packages/timm/models/inception_v4.pyr   zMixed3a.__init__   sS    gt%%'''|Aa000Jr21Q???			    c                     |                      |          }|                     |          }t          j        ||fd          }|S Nr   )r   r   torchcatr   xx0x1outs        r"   forwardzMixed3a.forward   s:    \\!__YYq\\iR!$$
r#   __name__
__module____qualname__r   r   r-   __classcell__r!   s   @r"   r   r      sU        "- @ @ @ @ @ @
      r#   r   c                   (     e Zd Zef fd	Zd Z xZS )Mixed4ac                 b   t          t          |                                            t          j         |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 S )N   r   r   r   r   r   r      r   r   r   r   paddingr9   r   r   r   )r   r   )r   r5   r   r   
Sequentialbranch0branch1r   s     r"   r   zMixed4a.__init__    s    gt%%'''}JsBAa888Jr21Q777
 

 }JsBAa888Jr26!VLLLJr26!VLLLJr26!<<<	
 
r#   c                     |                      |          }|                     |          }t          j        ||fd          }|S r%   )r@   rA   r&   r'   r(   s        r"   r-   zMixed4a.forward/   s:    \\!__\\!__iR!$$
r#   r.   r3   s   @r"   r5   r5      sO        "- 
 
 
 
 
 
      r#   r5   c                   (     e Zd Zef fd	Zd Z xZS )Mixed5ac                     t          t          |                                             |dddd          | _        t	          j        dd          | _        d S )N   r   r   r   r   )r   rD   r   r   r   r   r   r   s     r"   r   zMixed5a.__init__7   sS    gt%%'''JsCQqAAA	|Aa000r#   c                     |                      |          }|                     |          }t          j        ||fd          }|S r%   )r   r   r&   r'   r(   s        r"   r-   zMixed5a.forward<   s:    YYq\\\\!__iR!$$
r#   r.   r3   s   @r"   rD   rD   6   sO        "- 1 1 1 1 1 1
      r#   rD   c                   (     e Zd Zef fd	Zd Z xZS )
InceptionAc                    t          t          |                                             |dddd          | _        t	          j         |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                    | _        t	          j        t	          j        dddd	           |dddd                    | _	        d S )
N  r   r   r   r   r   r;   Fr   r<   count_include_pad)
r   rI   r   r@   r   r?   rA   branch2	AvgPool2dbranch3r   s     r"   r   zInceptionA.__init__D   s   j$((***!z#rqCCC}JsBAa888Jr21QBBB
 

 }JsBAa888Jr21QBBBJr21QBBB
 
 }L1a5IIIJsBAa888
 
r#   c                     |                      |          }|                     |          }|                     |          }|                     |          }t	          j        ||||fd          }|S r%   r@   rA   rN   rP   r&   r'   r   r)   r*   r+   x2x3r,   s          r"   r-   zInceptionA.forwardX   ]    \\!__\\!__\\!__\\!__iRR(!,,
r#   r.   r3   s   @r"   rI   rI   C   sO        "- 
 
 
 
 
 
(      r#   rI   c                   (     e Zd Zef fd	Zd Z xZS )
ReductionAc           
      :   t          t          |                                             |dddd          | _        t	          j         |dddd           |ddddd           |dd	dd                    | _        t	          j        dd
          | _        d S )NrK   r   r   r   rF   r      r;      r   )	r   rX   r   r@   r   r?   rA   r   rN   r   s     r"   r   zReductionA.__init__b   s    j$((***!z#s!DDD}JsCQq999JsCQq!DDDJsCQq999
 
 |Aa000r#   c                     |                      |          }|                     |          }|                     |          }t          j        |||fd          }|S r%   r@   rA   rN   r&   r'   r   r)   r*   r+   rT   r,   s         r"   r-   zReductionA.forwardn   K    \\!__\\!__\\!__iRa((
r#   r.   r3   s   @r"   rX   rX   a   sO        "- 
1 
1 
1 
1 
1 
1      r#   rX   c                   (     e Zd Zef fd	Zd Z xZS )
InceptionBc                 D   t          t          |                                             |dddd          | _        t	          j         |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	                    | _        t	          j        t	          j        dddd           |dddd                    | _	        d S )N   rK   r   r   rF   rZ   r8   r:   r;   r[   r=   r>   r   FrL      )
r   ra   r   r@   r   r?   rA   rN   rO   rP   r   s     r"   r   zInceptionB.__init__w   sb   j$((***!z$1EEE}JtSa:::JsCVAvNNNJsCVAvNNN
 
 }JtSa:::JsCVAvNNNJsCVAvNNNJsCVAvNNNJsCVAvNNN
 
 }L1a5IIIJtSa:::
 
r#   c                     |                      |          }|                     |          }|                     |          }|                     |          }t	          j        ||||fd          }|S r%   rR   rS   s          r"   r-   zInceptionB.forward   rV   r#   r.   r3   s   @r"   ra   ra   v   sO        "- 
 
 
 
 
 
.      r#   ra   c                   (     e Zd Zef fd	Zd Z xZS )
ReductionBc                    t          t          |                                            t          j         |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                    | _        t          j        dd          | _        d S )Nrc   rF   r   r   r   r   r[   r8   r:   r;   i@  r=   r>   r   )	r   rg   r   r   r?   r@   rA   r   rN   r   s     r"   r   zReductionB.__init__   s    j$((***}JtSa:::JsCQq999
 

 }JtSa:::JsCVAvNNNJsCVAvNNNJsCQq999	
 
 |Aa000r#   c                     |                      |          }|                     |          }|                     |          }t          j        |||fd          }|S r%   r]   r^   s         r"   r-   zReductionB.forward   r_   r#   r.   r3   s   @r"   rg   rg      sO        "- 1 1 1 1 1 1"      r#   rg   c                   (     e Zd Zef fd	Zd Z xZS )
InceptionCc           	      D   t          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ddd          | _	         |ddddd          | _
         |ddd	dd
          | _        t          j        t          j        dddd           |dddd                    | _        d S )N   r[   r   r   rK   )r   r   )r   r   r;   )r   r   )r   r   i  i   r   FrL   )r   rk   r   r@   	branch1_0
branch1_1a
branch1_1b	branch2_0	branch2_1	branch2_2
branch2_3a
branch2_3br   r?   rO   rP   r   s     r"   r   zInceptionC.__init__   s^   j$((***!z$1EEE#D#1QGGG$*S#6!U[\\\$*S#6!U[\\\#D#1QGGG#C&TZ[[[#C&TZ[[[$*S#6!U[\\\$*S#6!U[\\\}L1a5IIIJtSa:::
 
r#   c                 8   |                      |          }|                     |          }|                     |          }|                     |          }t	          j        ||fd          }|                     |          }|                     |          }|                     |          }	| 	                    |	          }
| 
                    |	          }t	          j        |
|fd          }|                     |          }t	          j        ||||fd          }|S r%   )r@   rn   ro   rp   r&   r'   rq   rr   rs   rt   ru   rP   )r   r)   r*   x1_0x1_1ax1_1br+   x2_0x2_1x2_2x2_3ax2_3brT   rU   r,   s                  r"   r-   zInceptionC.forward   s    \\!__~~a  %%%%Yu~q))~~a  ~~d##~~d##%%%%Yu~q))\\!__iRR(!,,
r#   r.   r3   s   @r"   rk   rk      sO        "- 
 
 
 
 
 
(      r#   rk   c                        e Zd Z	 	 	 	 	 	 	 	 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defdZd Z xZS )r     r               avgbatchnorm2dMbP?reluc	           
        
 t          t          |                                            |dk    sJ || _        dx| _        | _        t          t          d||t          |          t          d                    
 
|ddd	
           
dddd
           
ddddd          t          
          t          
          t          
          g}	|	
fdt          d          D             z  }	|	t          
          gz  }	|	
fdt          d          D             z  }	|	t          
          gz  }	|	
fdt          d          D             z  }	t          j        |	 | _        t          dd	d          t          ddd          t          ddd          t          ddd          t          ddd          g| _        t'          | j        | j        ||          \  | _        | _        | _        d S )Nr   rm   r   )epsT)inplace)r<   
norm_layer	act_layernorm_kwargs
act_kwargsr   r   r   r   r   r;   c                 .    g | ]}t                    S  )rI   .0_r    s     r"   
<listcomp>z(InceptionV4.__init__.<locals>.<listcomp>   !    >>>Z
++>>>r#      c                 .    g | ]}t                    S r   )ra   r   s     r"   r   z(InceptionV4.__init__.<locals>.<listcomp>   r   r#   r9   c                 .    g | ]}t                    S r   )rk   r   s     r"   r   z(InceptionV4.__init__.<locals>.<listcomp>   r   r#   z
features.2)num_chs	reductionmoduler7   z
features.3rK      z
features.9rc      zfeatures.17zfeatures.21)	pool_type	drop_rate)r   r   r   num_classesnum_featureshead_hidden_sizer   r   dictr   r5   rD   rangerX   rg   r   r?   featuresfeature_infor   global_pool	head_droplast_linear)r   r   in_chansoutput_strider   r   r   norm_epsr   r   r    r!   s             @r"   r   zInceptionV4.__init__   sA    	k4  ))+++""""&488D1!***D)))
 
 

 Jx1===Jr21Q777Jr21QBBBJJJ
 	>>>>U1XX>>>>Z
++,,>>>>U1XX>>>>Z
++,,>>>>U1XX>>>>x0q>>>,???,???MBBBMBBB
 >Ot/;R[>] >] >]:$.$*:*:*:r#   Fc                 $    t          dd          S )Nz^features\.[012]\.z^features\.(\d+))stemblocks)r   )r   coarses     r"   group_matcherzInceptionV4.group_matcher  s    &&
 
 
 	
r#   Tc                     |r
J d            d S )Nz$gradient checkpointing not supportedr   )r   enables     r"   set_grad_checkpointingz"InceptionV4.set_grad_checkpointing  s    AAAAAAAAr#   returnc                     | j         S N)r   )r   s    r"   get_classifierzInceptionV4.get_classifier  s    r#   r   r   c                 f    || _         t          | j        | j         |          \  | _        | _        d S )N)r   )r   r   r   r   r   )r   r   r   s      r"   reset_classifierzInceptionV4.reset_classifier  s?    &->t/;.H .H .H*$***r#   c                 ,    |                      |          S r   )r   r   r)   s     r"   forward_featureszInceptionV4.forward_features   s    }}Qr#   
pre_logitsc                     |                      |          }|                     |          }|r|n|                     |          S r   )r   r   r   )r   r)   r   s      r"   forward_headzInceptionV4.forward_head#  sC    QNN17qqD$4$4Q$7$77r#   c                 Z    |                      |          }|                     |          }|S r   )r   r   r   s     r"   r-   zInceptionV4.forward(  s-    !!!$$a  r#   )r   r   r   r   r   r   r   r   F)T)r   )r/   r0   r1   r   r&   jitignorer   r   r   Moduler   intstrr   r   boolr   r-   r2   r3   s   @r"   r   r      sI        $.] .] .] .] .] .]` Y
 
 
 
 YB B B B Y 	        H HC Hc H H H H
     8 8$ 8 8 8 8
      r#   Fr   c                 J    t          t          | |fdt          d          i|S )Nfeature_cfgT)flatten_sequential)r	   r   r   )variant
pretrainedkwargss      r"   _create_inception_v4r   .  sA      D111	
   r#   zinception_v4.tf_in1kztimm/r   )r   +  r   )r   r   g      ?bicubiczfeatures.0.convr   )
	hf_hub_idr   
input_size	pool_sizecrop_pctinterpolationmeanstd
first_conv
classifierc                     t          d| fi |S )Ninception_v4)r   )r   r   s     r"   r   r   C  s    
EEfEEEr#   r   )__doc__	functoolsr   r&   torch.nnr   	timm.datar   r   timm.layersr   r   _builderr	   	_registryr
   r   __all__r   r   r5   rD   rI   rX   ra   rg   rk   r   r   default_cfgsr   r   r#   r"   <module>r      s                 E E E E E E E E 6 6 6 6 6 6 6 6 * * * * * * < < < < < < < </
 
 
 
 
bi 
 
 
    bi   .
 
 
 
 
bi 
 
 
       <       *       B       4' ' ' ' ' ' ' 'TP P P P P") P P Pf      %$=vI'0F'} &   F F F F F Fr#   