
    kh                        d dl mZ d dlmZmZmZ d dlZd dlmZ d dlm	Z	 ddl
mZ ddlmZ d	d
lmZmZmZ d	dlmZ d	dlmZmZ g dZ G d dej0                        Z G d dej4                        Z G d dej4                        Z G d de      Z e        edej<                  f      ddddee   dededefd              Z y)    )partial)AnyCallableOptionalN)nn)Conv3dNormActivation   )VideoClassification)_log_api_usage_once   )register_modelWeightsWeightsEnum)_KINETICS400_CATEGORIES)_ovewrite_named_paramhandle_legacy_interface)S3DS3D_Weightss3dc                   V     e Zd Zdededededededej                  f   f fdZ xZS )	TemporalSeparableConv	in_planes
out_planeskernel_sizestridepadding
norm_layer.c                     t         |   t        ||d||fd||fd||fd|      t        |||ddf|ddf|ddfd|             y )N   r   F)r   r   r   biasr   )super__init__r   )selfr   r   r   r   r   r   	__class__s          X/var/www/teggl/fontify/venv/lib/python3.12/site-packages/torchvision/models/video/s3d.pyr"   zTemporalSeparableConv.__init__   sv     	 [966*GW-% !(!Q/1~ !Q%	
    )	__name__
__module____qualname__intr   r   Moduler"   __classcell__r$   s   @r%   r   r      sT    

 
 	

 
 
 S"))^,
 
r&   r   c                   d     e Zd Zdedededededededed	ej                  f   f fd
Zd Z xZ	S )SepInceptionBlock3Dr   b0_outb1_midb1_outb2_midb2_outb3_outr   .c	                    t         	|           t        ||dd|      | _        t	        j
                  t        ||dd|      t        ||ddd|            | _        t	        j
                  t        ||dd|      t        ||ddd|            | _        t	        j
                  t	        j                  ddd      t        ||dd|            | _
        y )Nr   r   r   r   r	   )r   r   r   r   r	   r	   r	   r   r   r   )r!   r"   r   branch0r   
Sequentialr   branch1branch2	MaxPool3dbranch3)
r#   r   r0   r1   r2   r3   r4   r5   r   r$   s
            r%   r"   zSepInceptionBlock3D.__init__7   s     	+Iv1UVcmn}} F!Xbc!&&aSTakl
 }} F!Xbc!&&aSTakl
 }}LLYq!D F!Xbc
r&   c                     | j                  |      }| j                  |      }| j                  |      }| j                  |      }t	        j
                  ||||fd      }|S )Nr   )r:   r<   r=   r?   torchcat)r#   xx0x1x2x3outs          r%   forwardzSepInceptionBlock3D.forwardR   sT    \\!_\\!_\\!_\\!_iiRR(!,
r&   )
r'   r(   r)   r*   r   r   r+   r"   rI   r,   r-   s   @r%   r/   r/   6   sh    

 
 	

 
 
 
 
 S"))^,
6r&   r/   c            
       z     e Zd ZdZ	 	 	 d
dededeedej                  j                  f      ddf fdZd	 Z xZS )r   aW  S3D main class.

    Args:
        num_class (int): number of classes for the classification task.
        dropout (float): dropout probability.
        norm_layer (Optional[Callable]): Module specifying the normalization layer to use.

    Inputs:
        x (Tensor): batch of videos with dimensions (batch, channel, time, height, width)
    Nnum_classesdropoutr   .returnc                    t         |           t        |        |t        t        j
                  dd      }t	        j                  t        ddddd|      t	        j                  ddd	
      t        dddd|      t        ddddd|      t	        j                  ddd	
      t        ddddddd|      t        ddddddd|      t	        j                  ddd
      t        ddddddd|      t        ddddddd|      t        ddddddd|      t        ddddddd|      t        d ddd!ddd|      t	        j                  ddd"
      t        d#ddd!ddd|      t        d#d$dd$ddd|            | _        t	        j                  d%d&      | _        t	        j                  t	        j                  |'      t	        j                  d(|ddd)*            | _        y )+NgMbP?)epsmomentumr	   @      r   )r   r	   r	   )r   r   r   )r   r   r   r9   r   r7      `                r8   )r   r   r   )r   r   r   i     0   i      p            i   i  i@  )r   r   r   i@  i  )r   rR   rR   )r   r   )pi   T)r   r   r    )r!   r"   r   r   r   BatchNorm3dr;   r   r>   r   r/   features	AvgPool3davgpoolDropoutConv3d
classifier)r#   rK   rL   r   r$   s       r%   r"   zS3D.__init__h   s    	D! UUKJ!!RAq*=LLYy)T % ""c1aJ?LLYy)TRS"b"jIS#sBB
KLLYy)TS"c2r2zJS#sBB
KS#sBB
KS#sBB
KS#sBS*MLLYy)TS#sBS*MS#sBS*M-
0 ||	!D--JJ!IIdKQqtL
r&   c                     | j                  |      }| j                  |      }| j                  |      }t        j                  |d      }|S )N)r   r	      )dim)rb   rd   rg   rA   mean)r#   rC   s     r%   rI   zS3D.forward   s@    MM!LLOOOAJJqi(r&   )i  g?N)r'   r(   r)   __doc__r*   floatr   r   rA   r   r+   r"   rI   r,   r-   s   @r%   r   r   \   s[    	 ?C	(
(
 (
 Xc588??&:;<	(

 
(
Tr&   r   c                   V    e Zd Z ed eedd      ddedddd	d
ddiddd	      ZeZy)r   z4https://download.pytorch.org/models/s3d-d76dad2f.pth)r]   r]   )rX   rX   )	crop_sizeresize_size   zOhttps://github.com/pytorch/vision/tree/main/references/video_classification#s3dzThe weights aim to approximate the accuracy of the paper. The accuracies are estimated on clip-level with parameters `frame_rate=15`, `clips_per_video=1`, and `clip_len=128`.i0~ zKinetics-400gd;OQ@g33333V@)zacc@1zacc@5gv1@gF?@)	min_sizemin_temporal_size
categoriesrecipe_docs
num_params_metrics_ops
_file_size)url
transformsmetaN)	r'   r(   r)   r   r   r
   r   KINETICS400_V1DEFAULT r&   r%   r   r      s`    B "
 #!#1g\ "##!  #
N6 Gr&   r   
pretrained)weightsT)r   progressr   r   kwargsrM   c                     t         j                  |       } | #t        |dt        | j                  d                t        di |}| "|j                  | j                  |d             |S )a  Construct Separable 3D CNN model.

    Reference: `Rethinking Spatiotemporal Feature Learning <https://arxiv.org/abs/1712.04851>`__.

    .. betastatus:: video module

    Args:
        weights (:class:`~torchvision.models.video.S3D_Weights`, optional): The
            pretrained weights to use. See
            :class:`~torchvision.models.video.S3D_Weights`
            below for more details, and possible values. By default, no
            pre-trained weights are used.
        progress (bool): If True, displays a progress bar of the download to stderr. Default is True.
        **kwargs: parameters passed to the ``torchvision.models.video.S3D`` base class.
            Please refer to the `source code
            <https://github.com/pytorch/vision/blob/main/torchvision/models/video/s3d.py>`_
            for more details about this class.

    .. autoclass:: torchvision.models.video.S3D_Weights
        :members:
    rK   rt   T)r   
check_hashr   )r   verifyr   lenr}   r   load_state_dictget_state_dict)r   r   r   models       r%   r   r      si    0   )GfmSl9S5TUM&MEg44hSW4XYLr&   )!	functoolsr   typingr   r   r   rA   r   torchvision.ops.miscr   transforms._presetsr
   utilsr   _apir   r   r   _metar   _utilsr   r   __all__r;   r   r+   r/   r   r   r~   boolr   r   r&   r%   <module>r      s     * *   5 6 ( 7 7 + C
BMM 
@#")) #L;")) ;|+ > ,0J0J!KL,04  H[)  D  SV  [^   M  r&   