
    kh5                     R   d Z ddlmZ ddlmZmZmZ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 dd
lmZmZ dgZ G d de
j2                        Z G d de
j2                        Z G d de
j2                        Z G d de
j2                        Z G d de
j2                        Z G d de
j2                        Z G d de
j2                        Z  G d de
j2                        Z! G d de
j2                        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%y)+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)
    )partial)ListOptionalTupleUnionN)IMAGENET_INCEPTION_MEANIMAGENET_INCEPTION_STD)create_classifierConvNormAct   )build_model_with_cfg)feature_take_indices)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      | _        y )N      stride@   `   kernel_sizer   )superr   __init__nn	MaxPool2dmaxpoolconvself
conv_block	__class__s     T/var/www/teggl/fontify/venv/lib/python3.12/site-packages/timm/models/inception_v4.pyr   zMixed3a.__init__   s4    gt%'||Aa0r21Q?	    c                 z    | j                  |      }| j                  |      }t        j                  ||fd      }|S Nr   )r!   r"   torchcatr$   xx0x1outs        r'   forwardzMixed3a.forward   s5    \\!_YYq\iiR!$
r(   __name__
__module____qualname__r   r   r2   __classcell__r&   s   @r'   r   r      s    "- @
r(   r   c                   (     e Zd Zef fd	Zd Z xZS )Mixed4ac                    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            | _        y )N   r   r   r   r   r   r      r   r   r   r   paddingr>   r   r   r   )r   r   )r   r:   r   r   
Sequentialbranch0branch1r#   s     r'   r   zMixed4a.__init__"   s    gt%'}}sBAa8r21Q7

 }}sBAa8r26!VLr26!VLr26!<	
r(   c                 z    | j                  |      }| j                  |      }t        j                  ||fd      }|S r*   )rE   rF   r+   r,   r-   s        r'   r2   zMixed4a.forward1   s5    \\!_\\!_iiR!$
r(   r3   r8   s   @r'   r:   r:   !   s    "- 
r(   r:   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      | _        y )N   r   r   r   r   )r   rI   r   r"   r   r    r!   r#   s     r'   r   zMixed5a.__init__9   s4    gt%'sCQqA	||Aa0r(   c                 z    | j                  |      }| j                  |      }t        j                  ||fd      }|S r*   )r"   r!   r+   r,   r-   s        r'   r2   zMixed5a.forward>   s5    YYq\\\!_iiR!$
r(   r3   r8   s   @r'   rI   rI   8   s    "- 1
r(   rI   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            | _	        y )
N  r   r   r   r   r   r@   Fr   rA   count_include_pad)
r   rN   r   rE   r   rD   rF   branch2	AvgPool2dbranch3r#   s     r'   r   zInceptionA.__init__F   s    j$(*!#rqC}}sBAa8r21QB

 }}sBAa8r21QBr21QB
 }}LL1a5IsBAa8
r(   c                     | j                  |      }| j                  |      }| j                  |      }| j                  |      }t	        j
                  ||||fd      }|S r*   rE   rF   rS   rU   r+   r,   r$   r.   r/   r0   x2x3r1   s          r'   r2   zInceptionA.forwardZ   T    \\!_\\!_\\!_\\!_iiRR(!,
r(   r3   r8   s   @r'   rN   rN   E   s    "- 
(r(   rN   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
      | _        y )NrP   r   r   r   rK   r      r@      r   )	r   r]   r   rE   r   rD   rF   r    rS   r#   s     r'   r   zReductionA.__init__d   sr    j$(*!#s!D}}sCQq9sCQq!DsCQq9
 ||Aa0r(   c                     | j                  |      }| j                  |      }| j                  |      }t        j                  |||fd      }|S r*   rE   rF   rS   r+   r,   r$   r.   r/   r0   rY   r1   s         r'   r2   zReductionA.forwardp   D    \\!_\\!_\\!_iiRa(
r(   r3   r8   s   @r'   r]   r]   c   s    "- 
1r(   r]   c                   (     e Zd Zef fd	Zd Z xZS )
InceptionBc                    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            | _	        y )N   rP   r   r   rK   r_   r=   r?   r@   r`   rB   rC   r   FrQ      )
r   rf   r   rE   r   rD   rF   rS   rT   rU   r#   s     r'   r   zInceptionB.__init__y   s    j$(*!$1E}}tSa:sCVAvNsCVAvN
 }}tSa:sCVAvNsCVAvNsCVAvNsCVAvN
 }}LL1a5ItSa:
r(   c                     | j                  |      }| j                  |      }| j                  |      }| j                  |      }t	        j
                  ||||fd      }|S r*   rW   rX   s          r'   r2   zInceptionB.forward   r[   r(   r3   r8   s   @r'   rf   rf   x   s    "- 
.r(   rf   c                   (     e Zd Zef fd	Zd Z xZS )
ReductionBc                 N   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      | _        y )Nrh   rK   r   r   r   r   r`   r=   r?   r@   i@  rB   rC   r   )	r   rl   r   r   rD   rE   rF   r    rS   r#   s     r'   r   zReductionB.__init__   s    j$(*}}tSa:sCQq9

 }}tSa:sCVAvNsCVAvNsCQq9	
 ||Aa0r(   c                     | j                  |      }| j                  |      }| j                  |      }t        j                  |||fd      }|S r*   rb   rc   s         r'   r2   zReductionB.forward   rd   r(   r3   r8   s   @r'   rl   rl      s    "- 1"r(   rl   c                   (     e Zd Zef fd	Zd Z xZS )
InceptionCc           	         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            | _        y )N   r`   r   r   rP   )r   r   )r   r   r@   )r   r   )r   r   i  i   r   FrQ   )r   rp   r   rE   	branch1_0
branch1_1a
branch1_1b	branch2_0	branch2_1	branch2_2
branch2_3a
branch2_3br   rD   rT   rU   r#   s     r'   r   zInceptionC.__init__   s    j$(*!$1E#D#1QG$S#6!U[\$S#6!U[\#D#1QG#C&TZ[#C&TZ[$S#6!U[\$S#6!U[\}}LL1a5ItSa:
r(   c                    | j                  |      }| j                  |      }| j                  |      }| j                  |      }t	        j
                  ||fd      }| j                  |      }| j                  |      }| j                  |      }	| j                  |	      }
| j                  |	      }t	        j
                  |
|fd      }| j                  |      }t	        j
                  ||||fd      }|S r*   )rE   rs   rt   ru   r+   r,   rv   rw   rx   ry   rz   rU   )r$   r.   r/   x1_0x1_1ax1_1br0   x2_0x2_1x2_2x2_3ax2_3brY   rZ   r1   s                  r'   r2   zInceptionC.forward   s    \\!_~~a %%YYu~q)~~a ~~d#~~d#%%YYu~q)\\!_iiRR(!,
r(   r3   r8   s   @r'   rp   rp      s    "- 
(r(   rp   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d	ej                  d
eeeee   f      dededededeeej                     eej                  eej                     f   f   fdZ	 	 	 dd
eeee   f   dedefdZd ZddefdZd Z xZS )r   c	           
         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}
|
t        d      D cg c]  }t        |	       c}z  }
|
t        |	      gz  }
|
t        d      D cg c]  }t        |	       c}z  }
|
t!        |	      gz  }
|
t        d      D cg c]  }t#        |	       c}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                  ||      \  | _        | _        | _        y c c}w c c}w c c}w )N    rr   r   )epsT)inplace)rA   
norm_layer	act_layernorm_kwargs
act_kwargsr   r   r   r   r   r@      r>   z
features.2)num_chs	reductionmoduler<   z
features.3rP      z
features.9rh      zfeatures.17zfeatures.21)	pool_type	drop_rate)r   r   r   num_classesnum_featureshead_hidden_sizer   r   dictr   r:   rI   rangerN   r]   rf   rl   rp   r   rD   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__   s    	k4)+"""&488D1!*D)

 x1=r21Q7r21QBJJJ
 	U1X>Z
+>>Z
+,,U1X>Z
+>>Z
+,,U1X>Z
+>>x0q>,?,?MBMB
 >Ot//;R[>]:$.$*: ?>>s   )F>GGc                     t        dd      S )Nz^features\.[012]\.z^features\.(\d+))stemblocks)r   )r$   coarses     r'   group_matcherzInceptionV4.group_matcher  s    &&
 	
r(   c                     |rJ d       y )Nz$gradient checkpointing not supported )r$   enables     r'   set_grad_checkpointingz"InceptionV4.set_grad_checkpointing  s    AAAz6r(   returnc                     | j                   S N)r   )r$   s    r'   get_classifierzInceptionV4.get_classifier  s    r(   r   r   c                 p    || _         t        | j                  | j                   |      \  | _        | _        y )N)r   )r   r
   r   r   r   )r$   r   r   s      r'   reset_classifierzInceptionV4.reset_classifier  s3    &->t//;.H*$*r(   r.   indicesnorm
stop_early
output_fmtintermediates_onlyc                    |dv sJ d       g }| j                   D cg c]"  }t        |d   j                  d      d         $ }	}t        t	        |	      |      \  }
}|
D cg c]  }|	|   	 }
}|	|   }t
        j                  j                         s|s| j                  }n| j                  d|dz    }t        |      D ]#  \  }} ||      }||
v s|j                  |       % |r|S ||fS c c}w c c}w )a   Forward features that returns intermediates.

        Args:
            x: Input image tensor
            indices: Take last n blocks if int, all if None, select matching indices if sequence
            norm: Apply norm layer to compatible intermediates
            stop_early: Stop iterating over blocks when last desired intermediate hit
            output_fmt: Shape of intermediate feature outputs
            intermediates_only: Only return intermediate features
        Returns:

        )NCHWzOutput shape must be NCHW.r   .Nr   )r   intsplitr   lenr+   jitis_scriptingr   	enumerateappend)r$   r.   r   r   r   r   r   intermediatesinfo
stage_endstake_indices	max_indexistagesfeat_idxstages                   r'   forward_intermediatesz!InceptionV4.forward_intermediates"  s   * Y&D(DD&EIEVEVWTc$x...s3B78W
W"6s:"Pi/;<!
1<<y)	 99!!#:]]F]]>IM2F(0 	(OHeaA<'$$Q'	(
   -' X<s   'C,!C1
prune_norm
prune_headc                    | j                   D cg c]"  }t        |d   j                  d      d         $ }}t        t	        |      |      \  }}||   }| j
                  d|dz    | _        |r| j                  dd       |S c c}w )z@ Prune layers not required for specified intermediates.
        r   r   r   Nr   r    )r   r   r   r   r   r   r   )r$   r   r   r   r   r   r   r   s           r'   prune_intermediate_layersz%InceptionV4.prune_intermediate_layersN  s     FJEVEVWTc$x...s3B78W
W"6s:"Piy)	ny1}5!!!R( Xs   'Bc                 $    | j                  |      S r   )r   r$   r.   s     r'   forward_featureszInceptionV4.forward_features^  s    }}Qr(   
pre_logitsc                 p    | j                  |      }| j                  |      }|r|S | j                  |      S r   )r   r   r   )r$   r.   r   s      r'   forward_headzInceptionV4.forward_heada  s8    QNN1q7D$4$4Q$77r(   c                 J    | j                  |      }| j                  |      }|S r   )r   r   r   s     r'   r2   zInceptionV4.forwardf  s'    !!!$a r(   )  r   r   g        avgbatchnorm2dgMbP?reluF)T)r   )NFFr   F)r   FT)r4   r5   r6   r   r+   r   ignorer   r   r   Moduler   r   strr   Tensorr   r   r   boolr   r   r   r   r   r2   r7   r8   s   @r'   r   r      s    $.]` YY
 
 YYB B YY 		    HC Hc H 8<$$',* ||*  eCcN34*  	* 
 *  *  !%*  
tELL!5tELL7I)I#JJ	K* \ ./$#	3S	>*  	  8$ 8
r(   r   c                 >    t        t        | |fdt        d      i|S )Nfeature_cfgT)flatten_sequential)r   r   r   )variant
pretrainedkwargss      r'   _create_inception_v4r   l  s1     D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     s    
EfEEr(   r   )&__doc__	functoolsr   typingr   r   r   r   r+   torch.nnr   	timm.datar   r	   timm.layersr
   r   _builderr   	_featuresr   	_registryr   r   __all__r   r   r:   rI   rN   r]   rf   rl   rp   r   r   default_cfgsr   r   r(   r'   <module>r     s    / /   E 6 * + </
bii 
bii .
bii 
 < * B 4' 'TL")) L^  %=vI'0F'}&  F Fr(   