
    RЦi@                     p   S r SSKJr  SSKJrJrJrJr  SSKrSSK	J
r
  SSKJrJr  SSKJrJrJrJrJrJr  SSKJr  SS	KJr  SS
KJr  SSKJrJr  S/r " S S\
R>                  5      r  " S S\
R>                  5      r! " S S\
R>                  5      r" " S S\
R>                  5      r# " S S\
R>                  5      r$S#S jr%S$S jr&\" \&" SSS9\&" SS9\&" SS9\&" SS9\&" SSS9\&" SSS9S.5      r'\S#S\$4S jj5       r(\S#S\$4S jj5       r)\S#S\$4S  jj5       r*\S#S\$4S! jj5       r+\S#S\$4S" jj5       r,g)%a  Pytorch impl of Aligned Xception 41, 65, 71

This is a correct, from scratch impl of Aligned Xception (Deeplab) models compatible with TF weights at
https://github.com/tensorflow/models/blob/master/research/deeplab/g3doc/model_zoo.md

Hacked together by / Copyright 2020 Ross Wightman
    )partial)ListDictTypeOptionalNIMAGENET_INCEPTION_MEANIMAGENET_INCEPTION_STD)ClassifierHeadConvNormActDropPathPadTypecreate_conv2dget_norm_act_layer)	to_3tuple   )build_model_with_cfg)checkpoint_seq)register_modelgenerate_default_cfgsXceptionAlignedc                      ^  \ rS rSrSSSS\R
                  \R                  SS4S\S\S\S	\S
\S\S\	\R                     S\	\R                     4U 4S jjjrS rSrU =r$ )SeparableConv2d      r    Nin_chsout_chskernel_sizestridedilationpadding	act_layer
norm_layerc                 h  > XS.n[         TU ]  5         X0l        XPl        [	        UUU4UUUSS.UD6U l        U" U40 UD6U l        Ub  U" SS9O[        R                  " 5       U l	        [	        X4SS0UD6U l
        U" U40 UD6U l        Ub  U" SS9U l        g [        R                  " 5       U l        g )NdevicedtypeTr    r"   r!   	depthwiseinplacer   r   )super__init__r   r!   r   conv_dwbn_dwnnIdentityact_dwconv_pwbn_pwact_pw)selfr   r   r   r    r!   r"   r#   r$   r'   r(   dd	__class__s               [/var/www/html/ai-image-ml/venv/lib/python3.13/site-packages/timm/models/xception_aligned.pyr.   SeparableConv2d.__init__   s     /&  %	
 	
 	
  -"-
1:1Fi-BKKM %VJ!JrJ.2.
1:1Fi-BKKM    c                     U R                  U5      nU R                  U5      nU R                  U5      nU R                  U5      nU R	                  U5      nU R                  U5      nU$ N)r/   r0   r3   r4   r5   r6   r7   xs     r:   forwardSeparableConv2d.forward>   sU    LLOJJqMKKNLLOJJqMKKNr<   )r3   r6   r0   r5   r/   r4   r!   r   )__name__
__module____qualname____firstlineno__r1   ReLUBatchNorm2dintr   r   Moduler.   rA   __static_attributes____classcell__r9   s   @r:   r   r      s    
  !!)+*,..#Z#Z #Z 	#Z
 #Z #Z #Z BII#Z RYY#Z #ZJ r<   r   c                      ^  \ rS rSrSSSS\R
                  \R                  SSS4	S\S\S	\S
\S\S\S\	\R                     S\	\R                     S\4U 4S jjjrS rSrU =r$ )PreSeparableConv2dH   r   r   r   TNr   r   r   r    r!   r"   r#   r$   	first_actc                   > XS.n[         TU ]  5         [        XS9nX0l        XPl        U	(       a  U" U4SS0UD6O[
        R                  " 5       U l        [        UUU4UUUSS.UD6U l	        [        X4SS0UD6U l
        g )Nr&   r#   r,   Tr)   r   r   )r-   r.   r   r   r!   r1   r2   normr   r/   r4   )r7   r   r   r   r    r!   r"   r#   r$   rQ   r'   r(   r8   norm_act_layerr9   s                 r:   r.   PreSeparableConv2d.__init__I   s     /+JL& BKN6>4>2>QSQ\Q\Q^	$	
 	
 	
 %VJ!JrJr<   c                 l    U R                  U5      nU R                  U5      nU R                  U5      nU$ r>   )rT   r/   r4   r?   s     r:   rA   PreSeparableConv2d.forwardm   s.    IIaLLLOLLOr<   )r/   r4   r!   r   rT   )rC   rD   rE   rF   r1   rG   rH   rI   r   r   rJ   boolr.   rA   rK   rL   rM   s   @r:   rO   rO   H   s    
  !!)+*,..""K"K "K 	"K
 "K "K "K BII"K RYY"K "K "KH r<   rO   c                      ^  \ rS rSrSSSSS\R
                  SSSS4
S\S\S	\S
\S\S\S\S\	\R                     S\\	\R                        S\\R                     4U 4S jjjrS rSrU =r$ )XceptionModulet   r   r   TFNr   r   r    r!   pad_typestart_with_reluno_skipr#   r$   	drop_pathc                 j  > XS.n[         TU ]  5         [        U5      nXl        US   U l        Xpl        U(       dB  U R                  U R                  :w  d  US:w  a"  [        UU R                  S4UU	SS.UD6U l        OS U l        U(       a  S OUn[        R                  " 5       U l
        [        S5       Hu  nU(       a)  U R                  R                  SUS-    3U" US:  S	95        U R                  R                  S
US-    3[        UX/   S4US:X  a  UOSUUUU	S.UD65        X/   nMw     Xl        g )Nr&   r   F)r    r$   	apply_actr   actr   r+   conv   )r    r!   r"   r#   r$   )r-   r.   r   in_channelsout_channelsr_   r   shortcutr1   
Sequentialstackrange
add_moduler   r`   )r7   r   r   r    r!   r]   r^   r_   r#   r$   r`   r'   r(   r8   separable_act_layerir9   s                   r:   r.   XceptionModule.__init__u   sJ    /G$!#BKD--1A1AAVq['!! % DM !DM&5d9]]_
qA

%%AE7mYq1u5MNJJ!!DQ./

3 "#avQ! -%
3 
3 
 ZF   #r<   c                     UnU R                  U5      nU R                  b  U R                  U5      nU R                  (       d"  U R                  b  U R                  U5      nX-   nU$ r>   )rk   ri   r_   r`   r7   r@   skips      r:   rA   XceptionModule.forward   sW    JJqM==$==&D||~~)NN1%Ar<   )r`   rg   r_   rh   ri   rk   rC   rD   rE   rF   r1   rG   rI   r   rY   r   rJ   r   r.   rA   rK   rL   rM   s   @r:   r[   r[   t   s    
  "$(!)+48-14#4# 4# 	4#
 4# 4# "4# 4# BII4# !bii14#  		*4# 4#l	 	r<   r[   c                      ^  \ rS rSrSSSS\R
                  SSSS4	S\S\S\S	\S
\S\S\	\R                     S\\	\R                        S\\R                     4U 4S jjjrS rSrU =r$ )PreXceptionModule   r   r   FNr   r   r    r!   r]   r_   r#   r$   r`   c                 J  > XS.n[         TU ]  5         [        U5      nXl        US   U l        X`l        U(       d?  U R                  U R                  :w  d  US:w  a  [        XR                  S4SU0UD6U l        O[        R                  " 5       U l        [        XS9" U4SS0UD6U l        [        R                  " 5       U l        [        S5       HI  nU R                  R                  S	US-    3[!        UX-   S4US
:X  a  UOSUUUUUS:  S.UD65        X-   nMK     Xl        g )Nr&   rb   r   r    rS   r,   Tr   re   rf   r   )r    r!   r"   r#   r$   rQ   )r-   r.   r   rg   rh   r_   r   ri   r1   r2   r   rT   rj   rk   rl   rm   rO   r`   )r7   r   r   r    r!   r]   r_   r#   r$   r`   r'   r(   r8   ro   r9   s                 r:   r.   PreXceptionModule.__init__   s)    /G$!#BKD--1A1AAVq[)&2C2CQ\v\Y[\DMKKMDM&zGcX\c`bc	]]_
qAJJ!!DQ.2D
3 "#avQ! #%a%3 3  ZF  #r<   c                     U R                  U5      nUnU R                  U5      nU R                  (       d1  U R                  b  U R                  U5      nXR	                  U5      -   nU$ r>   )rT   rk   r_   r`   ri   rr   s      r:   rA   PreXceptionModule.forward   sV    IIaLJJqM||~~)NN1%MM$''Ar<   )r`   rg   r_   rT   rh   ri   rk   ru   rM   s   @r:   rw   rw      s    
  "!)+48-1*#*# *# 	*#
 *# *# *# BII*# !bii1*#  		**# *#X r<   rw   c                     ^  \ rS rSrSrSSSS\R                  \R                  SSSS	S	4S
\\	   S\
S\
S\
S\S\\R                     S\\R                     S\S\S\4U 4S jjjr\R$                  R&                  SS j5       r\R$                  R&                  S S j5       r\R$                  R&                  S\R                  4S j5       rS!S\
S\\   4S jjrS rSS\4S jjrS rSrU =r$ )"r      zModified Aligned Xception
      r       F        avgN	block_cfgnum_classesin_chansoutput_stridepreactr#   r$   	drop_ratedrop_path_rateglobal_poolc                   > [         TU ]  5         XS.nUS;   d   eX l        X0l        Xl        SU l        [        SXgS.UD6n[        R                  " [        US4SSS.UD6U(       a  [        SSS	S.UD6O[        SSS	S.UD6/6 U l        S	nSn/ U l        [        R                  " 5       U l        U(       a  [        O[        n[!        U5      nS
n[#        U5       H  u  nnU	U-  US	-
  -  nUS:  a  [%        U5      OS US'   UUS'   US   S	:  a_  U(       a  SU S3OSU S3nU =R                  [        ['        US   5      S   UUS9/-  sl        UUS   -  nUU:  a  UUS   -  nS	US'   OUnU R                  R)                  [+        U5      U" S0 UDUD65        U R                  S   R,                  U l        US	-  nM     U =R                  [        U R.                  US[+        [!        U R                  5      S	-
  5      -   S9/-  sl        U(       a  U" SS9O[        R0                  " 5       U l        U R.                  U l        [7        SU R.                  UU
US.UD6U l        g )Nr&   )      r   F)r#   r$   r   r   rf   )r   r    r   r   r   r`   r!   r    zblocks.z.stack.conv2z.stack.act3r   )num_chs	reductionmodulerb   Tr+   )in_featuresr   	pool_typer    )r   @   )r-   r.   r   r   r   grad_checkpointingdictr1   rj   r   r   stemfeature_infoblocksrw   r[   len	enumerater   r   rm   strrh   num_featuresr2   rd   head_hidden_sizer   head)r7   r   r   r   r   r   r#   r$   r   r   r   r'   r(   r8   
layer_argscurr_dilationcurr_stride	module_fnnet_num_blocksnet_block_idxro   b	block_dprnamenext_strider9   s                            r:   r.   XceptionAligned.__init__   s    	/+++& ""'KIKK
MM"L!ALLDJM@a@R@FAaF:F$
 	 mmo)/%^	Yi(DAq&6.1:LMI4=NXi0AkN)AjM{Q4:<0'!K@X!!d9Qy\3J23NZenr&s%tt!)AhK7.!Qx[0M"#AhK"-KKK""3q69+Gq+GJ+GH $B < <DQM )" 	d%%YQTUXY]YdYdUehiUiQjEjl m 	m.49T*"++- $ 1 1" 
))#!	

 
	r<   c                     [        SSS9$ )Nz^stemz^blocks\.(\d+))r   r   )r   )r7   coarses     r:   group_matcherXceptionAligned.group_matcher5  s    $
 	
r<   c                     Xl         g r>   )r   )r7   enables     r:   set_grad_checkpointing&XceptionAligned.set_grad_checkpointing<  s    "(r<   returnc                 .    U R                   R                  $ r>   )r   fc)r7   s    r:   get_classifierXceptionAligned.get_classifier@  s    yy||r<   c                 B    Xl         U R                  R                  XS9  g )N)r   )r   r   reset)r7   r   r   s      r:   reset_classifier XceptionAligned.reset_classifierD  s    &		;r<   c                    U R                  U5      nU R                  (       a:  [        R                  R	                  5       (       d  [        U R                  U5      nOU R                  U5      nU R                  U5      nU$ r>   )r   r   torchjitis_scriptingr   r   rd   r?   s     r:   forward_features XceptionAligned.forward_featuresH  sY    IIaL""599+A+A+C+Ct{{A.AAAHHQKr<   
pre_logitsc                 P    U(       a  U R                  XS9$ U R                  U5      $ )N)r   )r   )r7   r@   r   s      r:   forward_headXceptionAligned.forward_headQ  s#    6@tyyy2RdiiPQlRr<   c                 J    U R                  U5      nU R                  U5      nU$ r>   )r   r   r?   s     r:   rA   XceptionAligned.forwardT  s'    !!!$a r<   )rd   r   r   r   r   r   r   r   r   r   r   F)Tr>   )rC   rD   rE   rF   __doc__r1   rG   rH   r   r   rI   rY   r   rJ   floatr   r.   r   r   ignorer   r   r   r   r   r   r   rA   rK   rL   rM   s   @r:   r   r      sY     $!# )+*,..!$&$@
Dz@
 @
 	@

 @
 @
 BII@
 RYY@
 @
 "@
 @
 @
D YY
 
 YY) ) YY		  <C <hsm <S$ S r<   c           	      :    [        [        U U4S[        SSS90UD6$ )Nfeature_cfgThook)flatten_sequentialfeature_cls)r   r   r   )variant
pretrainedkwargss      r:   	_xceptionr   Z  s3     DfE	
  r<   c                 2    U SSSSS[         [        SSSS	.UE$ )
Nr   )r   +  r   )
   r   gL7A`?bicubiczstem.0.convzhead.fcz
apache-2.0)urlr   
input_size	pool_sizecrop_pctinterpolationmeanstd
first_conv
classifierlicenser   )r   r   s     r:   _cfgr   d  s2    =xI'0F#9  r<   ztimm/gGz?)	hf_hub_idr   )r   )zxception65.ra3_in1kzxception41.tf_in1kzxception65.tf_in1kzxception71.tf_in1kzxception41p.ra3_in1kzxception65p.ra3_in1kr   c           	          [        SSSS9[        SSSS9[        SSSS9/[        SSSS9/S-  Q[        SS	SS9P[        S
SSSSS9Pn[        U[        [        R                  SSS9S9n[	        SSU 0[        U40 UD6D6$ )z!Modified Aligned Xception-41
    r      rf   r   r   r         r   r   r      r   r      r   i   TFr   r   r    r_   r^   MbP?皙?epsmomentumr   r$   r   )
xception41r   r   r1   rH   r   r   r   r   
model_argss       r:   r   r     s     	BA.CQ/CQ/	
 sC2
3a
7
 	C!21=
 	D"4Q^cd
I 	gbnnRVac6deJWjWD<Vv<VWWr<   c           	          [        SSSS9[        SSSS9[        SSSS9/[        SSSS9/S-  Q[        SS	SS9P[        S
SSSSS9Pn[        U[        [        R                  SSS9S9n[	        SSU 0[        U40 UD6D6$ )z!Modified Aligned Xception-65
    r   r   rf   r   r   r   r   r   r   r   r   TFr   r   r   r   r   r   )
xception65r   r   s       r:   r   r     s     	BA.CQ/CQ/	
 sC2
3b
8
 	C!21=
 	D"4Q^cd
I 	gbnnRVac6deJWjWD<Vv<VWWr<   c           
      (   [        SSSS9[        SSSS9[        SSSS9[        SSSS9[        SSSS9/[        SSSS9/S-  Q[        SS	SS9P[        S
SSSSS9Pn[        U[        [        R                  SSS9S9n[	        SSU 0[        U40 UD6D6$ )z!Modified Aligned Xception-71
    r   r   rf   r   r   r   r   r   r   r   r   TFr   r   r   r   r   r   )
xception71r   r   s       r:   r   r     s     	BA.CQ/CQ/CQ/CQ/ sC2
3b
8 	C!21= 	D"4Q^cdI 	gbnnRVac6deJWjWD<Vv<VWWr<   c           	          [        SSSS9[        SSSS9[        SSSS9/[        SSSS9/S-  Q[        SS	SS9P[        S
SSSS9Pn[        US[        R                  S9n[        SSU 0[        U40 UD6D6$ )z,Modified Aligned Xception-41 w/ Pre-Act
    r   r   rf   r   r   r   r   r   r   r   r   T)r   r   r_   r    r   r   r$   r   )xception41p)r   r1   rH   r   r   s       r:   r   r     s     	BA.CQ/CQ/	
 sC2
3a
7
 	C!21=
 	D"4d1M
I 	$2>>RJXzXT*=WPV=WXXr<   c           
          [        SSSS9[        SSSS9[        SSSS9/[        SSSS9/S-  Q[        SS	SS9P[        S
SSSS9Pn[        US[        [        R                  SSS9S9n[	        SSU 0[        U40 UD6D6$ )z,Modified Aligned Xception-65 w/ Pre-Act
    r   r   rf   r   r   r   r   r   r   r   r   T)r   r   r    r_   r   r   r   r   r   )xception65pr   r   s       r:   r  r    s     	BA.CQ/CQ/	
 sC2
3b
8
 	C!21=
 	D"4QM
I DWR^^QU`b5ceJXzXT*=WPV=WXXr<   r   )r   )-r   	functoolsr   typingr   r   r   r   r   torch.nnr1   	timm.datar	   r
   timm.layersr   r   r   r   r   r   timm.layers.helpersr   _builderr   _manipulater   	_registryr   r   __all__rJ   r   rO   r[   rw   r   r   r   default_cfgsr   r   r   r   r  r   r<   r:   <module>r     s    - -   E i i ) * ' <
-bii -`) )X@RYY @F5		 5phbii hV %
 111  !& * Xo X X$ Xo X X$ Xo X X( Y Y Y$ Y Y Yr<   