
    9i((                         S SK r S SKJ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g)    Nc                   8   ^  \ rS rSrSr SU 4S jjrS rSrU =r$ )InceptionBaseConv3D   zr
Constructs basic inception 3D conv.
Modified from https://github.com/TengdaHan/CoCLR/blob/main/backbone/s3dg.py.
c           	        > [         [        U ]  5         [        R                  " UUUUUSS9U l        [        R                  " U5      U l        [        R                  " SS9U l	        U R
                  R                  R                  R                  SSS9  U R                  R                  R                  R                  S5        U R                  R                  R                  R                  5         g )	NFkernel_sizestridepaddingbiasTinplacer   {Gz?meanstd   )superr   __init__nnConv3dconvBatchNorm3dbnReLUreluweightdatanormal_fill_r   zero_)selfcfg	in_planes
out_planesr   r	   r
   	__class__s          l/var/www/html/land-doc-ocr/venv/lib/python3.13/site-packages/modelscope/models/cv/action_recognition/s3dg.pyr   InceptionBaseConv3D.__init__   s     	!413II#	 ..,GGD)	 			%% 	& 	!!!$!    c                 l    U R                  U5      nU R                  U5      nU R                  U5      nU$ N)r   r   r   r!   xs     r&   forwardInceptionBaseConv3D.forward&   s.    IIaLGGAJIIaLr(   )r   r   r   r   	__name__
__module____qualname____firstlineno____doc__r   r-   __static_attributes____classcell__r%   s   @r&   r   r      s     "0 r(   r   c                   2   ^  \ rS rSrSrU 4S jrS rSrU =r$ )InceptionBlock3D-   
Element constructing the S3D/S3DG.
See models/base/backbone.py L99-186.

Modified from https://github.com/TengdaHan/CoCLR/blob/main/backbone/s3dg.py.
c                    > [         [        U ]  5         UR                  R                  R
                  R                  n[        U5      S:X  d   e[        U[        5      (       d   eUu  pVpxp[        R                  " [        XUSSS95      U l        [        R                  " [        XUSSS9[        UUUSSSS95      U l        [        R                  " [        XUSSS9[        UUU	SSSS95      U l        [        R                  " [        R"                  " SSSS9[        XU
SSS95      U l        ['        XWX/5      U l        X@l        U(       aA  [-        U5      U l        [-        U5      U l        [-        U	5      U l        [-        U
5      U l        g g )N   r   r   r	      r   r	   r
   r@   r@   r@   )r   r:   r   VIDEOBACKBONEBRANCHGATINGlen
isinstancelistr   
Sequentialr   branch0STConv3dbranch1branch2	MaxPool3dbranch3sumout_channelsgating
SelfGating	gating_b0	gating_b1	gating_b2	gating_b3)r!   r"   r#   r$   _gatingnum_out_0_0anum_out_1_0anum_out_1_0bnum_out_2_0anum_out_2_0bnum_out_3_0br%   s              r&   r   InceptionBlock3D.__init__5   s   .0))$$++22:!###*d++++
 	
 }}!AGJ }}!AG

 }}!AG

 }}LLYq!D!AG
  DF '5DN'5DN'5DN'5DN	 r(   c                 j   U R                  U5      nU R                  U5      nU R                  U5      nU R                  U5      nU R                  (       aD  U R                  U5      nU R                  U5      nU R                  U5      nU R                  U5      n[        R                  " X#XE4S5      nU$ )Nr   )rK   rM   rN   rP   rS   rU   rV   rW   rX   torchcat)r!   r,   x0x1x2x3outs          r&   r-   InceptionBlock3D.forwardk   s    \\!_\\!_\\!_\\!_;;#B#B#B#Bii(!,
r(   )
rK   rM   rN   rP   rS   rU   rV   rW   rX   rR   r0   r8   s   @r&   r:   r:   -   s    46l r(   r:   c                   .   ^  \ rS rSrU 4S jrS rSrU =r$ )rT   {   c                 `   > [         [        U ]  5         [        R                  " X5      U l        g r*   )r   rT   r   r   Linearfc)r!   	input_dimr%   s     r&   r   SelfGating.__init__}   s     j$(*))I1r(   c                     [         R                  " U/ SQS9nU R                  U5      n[         R                  " U5      nUSS2SS2SSS4   U-  $ )zFeature gating as used in S3D-G)   r@      )dimN)rb   r   rn   sigmoid)r!   input_tensorspatiotemporal_averageweightss       r&   r-   SelfGating.forward   sK    !&Li!H''01--(q!T4-.==r(   )rn   )r1   r2   r3   r4   r   r-   r6   r7   r8   s   @r&   rT   rT   {   s    2> >r(   rT   c                   D   ^  \ rS rSrSr SU 4S jjr SS jrS rSrU =r	$ )rL      r<   c           	        > [         [        U ]  5         [        U[        5      (       a  US   nUS   nOUnUR
                  R                  U l        [        UR
                  R                  5      U l
        U R                  XX4UXv5        g )Nr   )r   rL   r   rH   tupleBNMOMENTUMbn_mmtfloatEPSbn_eps_construct_branch)	r!   r"   r#   r$   r   r	   r
   t_strider%   s	           r&   r   STConv3d.__init__   sp     	h&(fe$$ayHBZFHffooCFFJJ'sz'	2r(   c           	         [         R                  " UUSXD4SXU4SXw4SS9U l        [         R                  " UUUSS4USS4USS4SS9U l        [         R                  " X0R
                  U R                  S9U l        [         R                  " X0R
                  U R                  S9U l        [         R                  " SS9U l
        U R                  R                  R                  R                  SSS	9  U R                  R                  R                  R                  SSS	9  U R                  R                  R                  R                  S5        U R                  R                  R                  R!                  5         U R                  R                  R                  R                  S5        U R                  R                  R                  R!                  5         g )
Nr   r   Fr   )epsmomentumTr   r   r   )r   r   conv1conv2r   r   r   bn1bn2r   r   r   r   r   r   r   r    )r!   r"   r#   r$   r   r	   r   r
   s           r&   r   STConv3d._construct_branch   sw    YYK5v&)
 YY$a+a#aO
 >>KK$++?>>KK$++?GGD)	 	

&& 	' 	

&& 	' 	""1%  """1%  "r(   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$ r*   )r   r   r   r   r   r+   s     r&   r-   STConv3d.forward   sU    JJqMHHQKIIaLJJqMHHQKIIaLr(   )r   r   r   r   r   r   r   r/   )
r1   r2   r3   r4   r5   r   r   r-   r6   r7   r8   s   @r&   rL   rL      s'     24 #$%#N r(   rL   c                   8   ^  \ rS rSrSrU 4S jrS rS rSrU =r	$ )Inception3D   zr
Backbone architecture for I3D/S3DG.
Modified from https://github.com/TengdaHan/CoCLR/blob/main/backbone/s3dg.py.
c                 x   > [         [        U ]  5         UR                  R                  nU R                  X5        g)z/
Args:
    cfg (Config): global config object.
N)r   r   r   DATANUM_INPUT_CHANNELS_construct_backbone)r!   r"   _input_channelr%   s      r&   r   Inception3D.__init__   s/    
 	k4)+44  5r(   c           	         [        XSSSSS9U l        [        R                  " U R                  5      U l        [        R
                  " SSSS9U l        [        USSS	S	S
9U l        [        USSSS	S	S9U l	        [        R                  " U R                  U R                  U R                  5      U l
        [        R
                  " SSSS9U l        [        US/ SQS9U l        [        US/ SQS9U l        [        R                  " U R                  U R                  U R                  5      U l        [        R
                  " SSSS9U l        [        US/ SQS9U l        [        US/ SQS9U l        [        US/ SQS9U l        [        US/ SQS9U l        [        US/ SQS9U l        [        R                  " U R                   U R"                  U R$                  U R&                  U R(                  U R*                  5      U l        [        R
                  " SSSS9U l        [        US/ SQS9U l        [        US/ SQS9U l        [        R                  " U R.                  U R0                  U R2                  5      U l        g )N@      rr   r@   rA   )r   r@   r@   )r   rr   rr   )r   r   r   r   r?      )r   `             r   )r#   r$      )r   r   r   r   r   r   rB   )rr   rr   rr   )r   r   r   i  )r   r      r   0   r   i   )   p         r   r   )r   r   r   r   r   r   )r      i   r   r   r   i  )r   r   i@  r   r   r   )r   r   r   i@  )  r   r   r   r   r   )rL   Conv_1ar   rJ   block1rO   
MaxPool_2ar   Conv_2bConv_2cblock2
MaxPool_3ar:   Mixed_3bMixed_3cblock3
MaxPool_4aMixed_4bMixed_4cMixed_4dMixed_4eMixed_4fblock4
MaxPool_5aMixed_5bMixed_5cblock5)r!   r"   input_channels      r&   r   Inception3D._construct_backbone   s6   !QH mmDLL1 ,,!)YH*RQq2Sa1> mmOOLLLL ,,!)YH(3+DF(3+FH mmOOMMMM ,,!)YH(3+EG(3+FH(3+FH(3+FH(3+HJ mmOOMMMMMMMMMM ,,!)YH(3+HJ(3+HJ mmOOMMMMr(   c                     [        U[        5      (       a  US   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video)rH   dictr   r   r   r   r   r+   s     r&   r-   Inception3D.forward(  s^    a'
AKKNKKNKKNKKNKKNr(   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   )
r1   r2   r3   r4   r5   r   r   r-   r6   r7   r8   s   @r&   r   r      s    
6BH r(   r   )	rb   torch.nnr   Moduler   r:   rT   rL   r    r(   r&   <module>r      sf     "")) "JKryy K\> >Iryy IX[")) [r(   