
    ^j@                     |   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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 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$d#dZ%d$dZ& e e&dd       e&d       e&d       e&d       e&dd       e&dd      d      Z'ed#de$fd       Z(ed#de$fd       Z)ed#de$fd        Z*ed#de$fd!       Z+ed#de$fd"       Z,y)%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                        e Zd Zddddej                  ej
                  ddfdedededed	ed
edeej                     deej                     f fdZ
d Z xZS )SeparableConv2d   r    Nin_chsout_chskernel_sizestridedilationpadding	act_layer
norm_layerc                 t   |	|
d}t         |           || _        || _        t	        |||f|||dd|| _         ||fi || _        |	 |d      nt        j                         | _	        t	        ||fddi|| _
         ||fi || _        | |d      | _        y t        j                         | _        y )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               g/var/www/ramen.bs-engineer-server.com/venv/lib/python3.12/site-packages/timm/models/xception_aligned.pyr-   zSeparableConv2d.__init__   s     /&  %	
 	
 	
  -"-
1:1Fi-BKKM %VWJ!JrJ.2.
1:1Fi-BKKM    c                     | j                  |      }| j                  |      }| j                  |      }| j                  |      }| j	                  |      }| j                  |      }|S N)r.   r/   r2   r3   r4   r5   r6   xs     r9   forwardzSeparableConv2d.forward>   sU    LLOJJqMKKNLLOJJqMKKNr:   )__name__
__module____qualname__r0   ReLUBatchNorm2dintr   r   Moduler-   r?   __classcell__r8   s   @r9   r   r      s    
  !!)+*,..#Z#Z #Z 	#Z
 #Z #Z #Z BII#Z RYY#ZJr:   r   c                        e Zd Zddddej                  ej
                  dddf	dededed	ed
ededeej                     deej                     de
f fdZd Z xZS )PreSeparableConv2dr   r   r   TNr   r   r   r   r    r!   r"   r#   	first_actc                    |
|d}t         |           t        ||      }|| _        || _        |	r ||fddi|nt        j                         | _        t        |||f|||dd|| _	        t        ||fddi|| _
        y )Nr%   r"   r+   Tr(   r   r   )r,   r-   r   r   r    r0   r1   normr   r.   r3   )r6   r   r   r   r   r    r!   r"   r#   rK   r&   r'   r7   norm_act_layerr8   s                 r9   r-   zPreSeparableConv2d.__init__I   s     /+J)L& BKN6>4>2>QSQ\Q\Q^	$	
 	
 	
 %VWJ!JrJr:   c                 l    | j                  |      }| j                  |      }| j                  |      }|S r<   )rN   r.   r3   r=   s     r9   r?   zPreSeparableConv2d.forwardm   s.    IIaLLLOLLOr:   )r@   rA   rB   r0   rC   rD   rE   r   r   rF   boolr-   r?   rG   rH   s   @r9   rJ   rJ   H   s    
  !!)+*,..""K"K "K 	"K
 "K "K "K BII"K RYY"K "KHr:   rJ   c                        e Zd Zdddddej                  ddddf
dededed	ed
edededeej                     de
eej                        de
ej                     f fdZd Z xZS )XceptionModuler   r   TFNr   r   r   r    pad_typestart_with_reluno_skipr"   r#   	drop_pathc                 R   ||d}t         |           t        |      }|| _        |d   | _        || _        |s@| j                  | j                  k7  s|dk7  r"t        || j                  df||	dd|| _        nd | _        |rd n|}t        j                         | _
        t        d      D ]s  }|r,| j                  j                  d|dz     ||dkD  	             | j                  j                  d
|dz    t        |||   df|dk(  r|nd||||	d|       ||   }u |
| _        y )Nr%   r   F)r   r#   	apply_actr   actr   r*   conv   )r   r    r!   r"   r#   )r,   r-   r   in_channelsout_channelsrV   r   shortcutr0   
Sequentialstackrange
add_moduler   rW   )r6   r   r   r   r    rT   rU   rV   r"   r#   rW   r&   r'   r7   separable_act_layerir8   s                   r9   r-   zXceptionModule.__init__u   s[    /G$!#BKD--1A1AAVq['!! % DM !DM&5d9]]_
q 	 A

%%AE7mYq1u5MNJJ!!DQ./

3 "#avQ! -%
3 
3 
 QZF	   #r:   c                     |}| j                  |      }| j                  | j                  |      }| j                  s"| j                  | j                  |      }||z   }|S r<   )rb   r`   rV   rW   r6   r>   skips      r9   r?   zXceptionModule.forward   sY    JJqM==$==&D||~~)NN1%DAr:   r@   rA   rB   r0   rC   rE   r   rQ   r   rF   r   r-   r?   rG   rH   s   @r9   rS   rS   t   s    
  "$(!)+48-14#4# 4# 	4#
 4# 4# "4# 4# BII4# !bii14#  		*4#l	r:   rS   c                        e Zd Zddddej                  ddddf	dedededed	ed
edeej                     de
eej                        de
ej                     f fdZd Z xZS )PreXceptionModuler   r   FNr   r   r   r    rT   rV   r"   r#   rW   c                 H   |
|d}t         |           t        |      }|| _        |d   | _        || _        |s>| j                  | j                  k7  s|dk7  r t        || j                  dfd|i|| _        nt        j                         | _         t        ||      |fddi|| _        t        j                         | _        t        d      D ]I  }| j                  j                  d	|dz    t!        |||   df|d
k(  r|nd|||||dkD  d|       ||   }K |	| _        y )Nr%   rY   r   r   rM   r+   Tr   r\   r]   r   )r   r    r!   r"   r#   rK   )r,   r-   r   r^   r_   rV   r   r`   r0   r1   r   rN   ra   rb   rc   rd   rJ   rW   )r6   r   r   r   r    rT   rV   r"   r#   rW   r&   r'   r7   rf   r8   s                 r9   r-   zPreXceptionModule.__init__   sA    /G$!#BKD--1A1AAVq[)&$2C2CQ\v\Y[\DMKKMDMG&zYGcX\c`bc	]]_
q 	 AJJ!!DQ.2D
3 "#avQ! #%a%3 3  QZF	  #r:   c                     | j                  |      }|}| j                  |      }| j                  s1| j                  | j                  |      }|| j	                  |      z   }|S r<   )rN   rb   rV   rW   r`   rh   s      r9   r?   zPreXceptionModule.forward   sX    IIaLJJqM||~~)NN1%DMM$''Ar:   rj   rH   s   @r9   rl   rl      s    
  "!)+48-1*#*# *# 	*#
 *# *# *# BII*# !bii1*#  		**#Xr:   rl   c                       e Zd ZdZddddej
                  ej                  dddddfd	ee   d
e	de	de	de
deej                     deej                     dededef 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e   fdZd Zdde
fdZd Z xZS ) 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         |           ||d}|dv sJ || _        || _        || _        d| _        t        d||d|}t        j                  t        |dfddd||rt        ddd	d|nt        ddd	d|g | _        d	}d}g | _        t        j                         | _        |rt        nt        }t!        |      }d
}t#        |      D ]  \  }}|	|z  |d	z
  z  }|dkD  rt%        |      nd |d<   ||d<   |d   d	kD  r\|rd| dnd| d}| xj                  t        t'        |d         d   ||      gz  c_        ||d   z  }||kD  r||d   z  }d	|d<   n|}| j                  j)                  t+        |       |di ||       | j                  d   j,                  | _        |d	z  } | xj                  t        | j.                  |dt+        t!        | j                        d	z
        z         gz  c_        |r	 |d      nt        j0                         | _        | j.                  | _        t7        d| j.                  ||
|d|| _        y )Nr%   )      rq   F)r"   r#   rq   r   r]   )r   r   r   r   rr   rW   r    r   zblocks.z.stack.conv2z.stack.act3r   )num_chs	reductionmodulerY   Tr*   )in_featuresru   	pool_typery    )rq   @   )r,   r-   ru   rv   ry   grad_checkpointingdictr0   ra   r   r   stemfeature_infoblocksrl   rS   len	enumerater   r   rd   strr_   num_featuresr1   r[   head_hidden_sizer   head)r6   rt   ru   rv   rw   rx   r"   r#   ry   rz   r{   r&   r'   r7   
layer_argscurr_dilationcurr_stride	module_fnnet_num_blocksnet_block_idxrf   b	block_dprnamenext_strider8   s                            r9   r-   z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                     t        dd      S )Nz^stemz^blocks\.(\d+))r   r   )r   )r6   coarses     r9   group_matcherzXceptionAligned.group_matcher5  s    $
 	
r:   c                     || _         y r<   )r   )r6   enables     r9   set_grad_checkpointingz&XceptionAligned.set_grad_checkpointing<  s
    "(r:   returnc                 .    | j                   j                  S r<   )r   fc)r6   s    r9   get_classifierzXceptionAligned.get_classifier@  s    yy||r:   c                 L    || _         | j                  j                  ||       y )N)r   )ru   r   reset)r6   ru   r{   s      r9   reset_classifierz XceptionAligned.reset_classifierD  s    &		{;r:   c                     | j                  |      }| j                  r5t        j                  j	                         st        | j                  |      }n| j                  |      }| j                  |      }|S r<   )r   r   torchjitis_scriptingr   r   r[   r=   s     r9   forward_featuresz XceptionAligned.forward_featuresH  sV    IIaL""599+A+A+Ct{{A.AAAHHQKr:   
pre_logitsc                 N    |r| j                  ||      S | j                  |      S )N)r   )r   )r6   r>   r   s      r9   forward_headzXceptionAligned.forward_headQ  s%    6@tyyzy2RdiiPQlRr:   c                 J    | j                  |      }| j                  |      }|S r<   )r   r   r=   s     r9   r?   zXceptionAligned.forwardT  s'    !!!$a r:   F)Tr<   )r@   rA   rB   __doc__r0   rC   rD   r   r   rE   rQ   r   rF   floatr   r-   r   r   ignorer   r   r   r   r   r   r   r?   rG   rH   s   @r9   r   r      sN     $!# )+*,..!$&$@
Dz@
 @
 	@

 @
 @
 BII@
 RYY@
 @
 "@
 @
D YY
 
 YY) ) YY		  <C <hsm <S$ Sr:   c                 @    t        t        | |fdt        dd      i|S )Nfeature_cfgThook)flatten_sequentialfeature_cls)r   r   r   )variant
pretrainedkwargss      r9   	_xceptionr   Z  s3     DfE	
  r:   c                 2    | dddddt         t        dddd	|S )
Nrp   )r   +  r   )
   r   gL7A`?bicubiczstem.0.convzhead.fcz
apache-2.0)urlru   
input_size	pool_sizecrop_pctinterpolationmeanstd
first_conv
classifierlicenser   )r   r   s     r9   _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           	      0   t        ddd      t        ddd      t        ddd      gt        ddd      gdz  t        dd	d      t        d
dddd      }t        |t        t        j                  dd            }t	        dd| it        |fi |S )z" Modified Aligned Xception-41
    r      r]   r   r   r        r   r}   r      r   r      r   i   TFr   r   r   rV   rU   MbP?皙?epsmomentumrt   r#   r   )
xception41r   r   r0   rD   r   r   r   rt   
model_argss       r9   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           	      0   t        ddd      t        ddd      t        ddd      gt        ddd      gdz  t        dd	d      t        d
dddd      }t        |t        t        j                  dd            }t	        dd| it        |fi |S )z" Modified Aligned Xception-65
    r   r   r]   r   r   r   r   r~   r   r   r   TFr   r   r   r   r   r   )
xception65r   r   s       r9   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           	      d   t        ddd      t        ddd      t        ddd      t        ddd      t        ddd      gt        ddd      gdz  t        dd	d      t        d
dddd      }t        |t        t        j                  dd            }t	        dd| it        |fi |S )z" Modified Aligned Xception-71
    r   r   r]   r   r   r   r   r~   r   r   r   TFr   r   r   r   r   r   )
xception71r   r   s       r9   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           	         t        ddd      t        ddd      t        ddd      gt        ddd      gdz  t        dd	d      t        d
ddd      }t        |dt        j                        }t        dd| it        |fi |S )z- Modified Aligned Xception-41 w/ Pre-Act
    r   r   r]   r   r   r   r   r}   r   r   r   T)r   r   rV   r   rt   rx   r#   r   )xception41p)r   r0   rD   r   r   s       r9   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           	      0   t        ddd      t        ddd      t        ddd      gt        ddd      gdz  t        dd	d      t        d
ddd      }t        |dt        t        j                  dd            }t	        dd| it        |fi |S )z- Modified Aligned Xception-65 w/ Pre-Act
    r   r   r]   r   r   r   r   r~   r   r   r   T)r   r   r   rV   r   r   r   r   r   )xception65pr   r   s       r9   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.nnr0   	timm.datar	   r
   timm.layersr   r   r   r   r   r   timm.layers.helpersr   _builderr   _manipulater   	_registryr   r   __all__rF   r   rJ   rS   rl   r   r   r   default_cfgsr   r   r   r   r   r   r:   r9   <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:   