§
    ù²Åjb  ã                   ó¢  — 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j        ¦  «        Z G d„ dej        ¦  «        Z G d„ dej        ¦  «        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 dS )é    )Ú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                   óR   ‡ — 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|¬¦  «        ¦  «         d S )Né   r   F)r   r   r   Úbiasr   )ÚsuperÚ__init__r   )Úselfr   r   r   r   r   r   Ú	__class__s          €úMC:\Projects\Historical\venv\Lib\site-packages\torchvision/models/video/s3d.pyr"   zTemporalSeparableConv.__init__   s£   ø€ õ 	‰Œ×ÒÝ ØØØ ¨[Ð9Ø˜6 6Ð*Ø˜G WÐ-ØØ%ðñ ô õ !ØØØ(¨!¨QÐ/Ø  1�~Ø  ! Q˜ØØ%ðñ ô ñ	
ô 	
ð 	
ð 	
ð 	
ó    )	Ú__name__Ú
__module__Ú__qualname__Úintr   r   ÚModuler"   Ú__classcell__©r$   s   @r%   r   r      s‚   ø€ € € € € ð
àð
ð ð
ð ð	
ð
 ð
ð ð
ð ˜S "¤)˜^Ô,ð
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
r&   r   c                   ó`   ‡ — 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|¬¦  «        ¦  «        | _
        d S )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  ø€ õ 	‰Œ×ÒÑÔÐå+¨I°vÈ1ÐUVÐcmÐnÑnÔnˆŒÝ”}Ý  ¨FÀÈ!ÐXbÐcÑcÔcÝ! &¨&¸aÈÐSTÐakÐlÑlÔlñ
ô 
ˆŒõ ”}Ý  ¨FÀÈ!ÐXbÐcÑcÔcÝ! &¨&¸aÈÐSTÐakÐlÑlÔlñ
ô 
ˆŒõ ”}ÝŒL Y°qÀ!ÐDÑDÔDÝ  ¨FÀÈ!ÐXbÐcÑcÔcñ
ô 
ˆŒˆˆr&   c                 óà   — |                       |¦  «        }|                      |¦  «        }|                      |¦  «        }|                      |¦  «        }t	          j        ||||fd¦  «        }|S )Nr   )r:   r<   r=   r?   ÚtorchÚcat)r#   ÚxÚx0Úx1Úx2Úx3Úouts          r%   ÚforwardzSepInceptionBlock3D.forwardR   s]   € Ø�\Š\˜!‰_Œ_ˆØ�\Š\˜!‰_Œ_ˆØ�\Š\˜!‰_Œ_ˆØ�\Š\˜!‰_Œ_ˆÝŒi˜˜R  RÐ(¨!Ñ,Ô,ˆàˆ
r&   )
r'   r(   r)   r*   r   r   r+   r"   rI   r,   r-   s   @r%   r/   r/   6   s¥   ø€ € € € € ð
àð
ð ð
ð ð	
ð
 ð
ð ð
ð ð
ð ð
ð ˜S "¤)˜^Ô,ð
ð 
ð 
ð 
ð 
ð 
ð6ð ð ð ð ð ð r&   r/   c            
       ór   ‡ — 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)¬*¦  «        ¦  «        | _        d S )+Ngü©ñÒMbP?)Ú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   rT   rT   )r   r   )Úpi   T)r   r   r    )r!   r"   r   r   r   ÚBatchNorm3dr;   r   r>   r   r/   ÚfeaturesÚ	AvgPool3dÚavgpoolÚDropoutÚConv3dÚ
classifier)r#   rM   rN   r   r$   s       €r%   r"   zS3D.__init__h   s-  ø€ õ 	‰Œ×ÒÑÔÐÝ˜DÑ!Ô!Ð!àÐÝ ¥¤°UÀUÐKÑKÔKˆJåœÝ! ! R¨¨A¨q°*Ñ=Ô=ÝŒL Y°yÈ)ÐTÑTÔTÝ ØØØØØ%ðñ ô õ " " c¨1¨a°°JÑ?Ô?ÝŒL Y°yÈ)ÐTÑTÔTÝ  R¨¨S°"°b¸"¸jÑIÔIÝ  S¨#¨s°B¸¸BÀ
ÑKÔKÝŒL Y°yÈ)ÐTÑTÔTÝ  S¨"¨c°2°r¸2¸zÑJÔJÝ  S¨#¨s°B¸¸BÀ
ÑKÔKÝ  S¨#¨s°B¸¸BÀ
ÑKÔKÝ  S¨#¨s°B¸¸BÀ
ÑKÔKÝ  S¨#¨s°B¸¸SÀ*ÑMÔMÝŒL Y°yÈ)ÐTÑTÔTÝ  S¨#¨s°B¸¸SÀ*ÑMÔMÝ  S¨#¨s°B¸¸SÀ*ÑMÔMñ-
ô 
ˆŒõ0 ”|°	À!ÐDÑDÔDˆŒÝœ-ÝŒJ˜Ð!Ñ!Ô!ÝŒI�d˜K°Q¸qÀtÐLÑLÔLñ
ô 
ˆŒˆˆr&   c                 ó°   — |                       |¦  «        }|                      |¦  «        }|                      |¦  «        }t          j        |d¬¦  «        }|S )N)r   r	   é   )Údim)rd   rf   ri   rA   Úmean)r#   rC   s     r%   rI   zS3D.forward’   sL   € Ø�MŠM˜!ÑÔˆØ�LŠL˜‰OŒOˆØ�OŠO˜AÑÔˆÝŒJ�q˜iÐ(Ñ(Ô(ˆØˆr&   )rK   rL   N)r'   r(   r)   Ú__doc__r*   Úfloatr   r   rA   r   r+   r"   rI   r,   r-   s   @r%   r   r   \   s    ø€ € € € € ð	ð 	ð ØØ?Cð	(
ð (
àð(
ð ð(
ð ˜X c¨5¬8¬?Ð&:Ô;Ô<ð	(
ð
 
ð(
ð (
ð (
ð (
ð (
ð (
ðTð ð ð ð ð ð r&   r   c                   ód   — 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dS )r   z4https://download.pytorch.org/models/s3d-d76dad2f.pth)r_   r_   )rZ   rZ   )Ú	crop_sizeÚresize_sizeé   zOhttps://github.com/pytorch/vision/tree/main/references/video_classification#s3dz®The 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@5g´Èv¾Ÿú1@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Ž   € € € € € Ø�WØBØ�7ØØ Ø"ð
ñ 
ô 
ð #Ø!#Ø1Øgð\ð "àØ#Ø#ð!ð !ðð Ø ð#
ð 
ðñ ô €Nð6 €G€G€Gr&   r   Ú
pretrained)ÚweightsT)r„   Úprogressr„   r…   ÚkwargsrO   c                 ó   — t                                | ¦  «        } | �)t          |dt          | j        d         ¦  «        ¦  «         t          di |¤Ž}| �*|                     |                      |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:
    NrM   rv   T)r…   Ú
check_hashr‚   )r   Úverifyr   Úlenr   r   Úload_state_dictÚget_state_dict)r„   r…   r†   Úmodels       r%   r   r   ¹   s€   € õ0 × Ò  Ñ)Ô)€GàÐÝ˜f mµS¸¼ÀlÔ9SÑ5TÔ5TÑUÔUÐUåˆMˆM�&ˆMˆM€EàÐØ×Ò˜g×4Ò4¸hÐSWÐ4ÑXÔXÑYÔYÐ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Ð 5Ð 5Ð 5Ð 5Ð 5à 6Ð 6Ð 6Ð 6Ð 6Ð 6Ø (Ð (Ð (Ð (Ð (Ð (Ø 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7Ø +Ð +Ð +Ð +Ð +Ð +Ø CÐ CÐ CÐ CÐ CÐ CÐ CÐ Cðð ð €ð
ð 
ð 
ð 
ð 
˜BœMñ 
ô 
ð 
ð@#ð #ð #ð #ð #˜"œ)ñ #ô #ð #ðL;ð ;ð ;ð ;ð ;ˆ"Œ)ñ ;ô ;ð ;ð|ð ð ð ð �+ñ ô ð ð> €ÑÔØÐ ,°Ô0JÐ!KÐLÑLÔLØ,0À4ð  ð  ð  �H˜[Ô)ð  ¸Dð  ÐSVð  Ð[^ð  ð  ð  ñ MÔLñ Ôð ð  ð  r&   