Transformers documentation
Video Vision Transformer (ViViT)
Model ini dipublikasikan di HF papers pada 2021-03-29 dan disumbangkan ke Hugging Face Transformers pada 2023-07-11.
Video Vision Transformer (ViViT)
Ikhtisar
Model Vivit diusulkan dalam ViViT: A Video Vision Transformer oleh Anurag Arnab, Mostafa Dehghani, Georg Heigold, Chen Sun, Mario Lučić, Cordelia Schmid. Kertas kerja ini mengusulkan salah satu kumpulan model berbasis pure-transformer pertama yang berhasil untuk pemahaman video.
Abstrak dari makalah tersebut adalah sebagai berikut:
Kami menyajikan model berbasis pure-transformer untuk klasifikasi video, yang terinspirasi dari keberhasilan terkini model semacam itu dalam klasifikasi citra. Model kami mengekstrak token spatio-temporal dari video input, yang kemudian dienkod oleh serangkaian lapisan transformer. Untuk menangani sekuens token panjang yang ditemui dalam video, kami mengusulkan beberapa varian efisien dari model kami yang memfaktorisasi dimensi spasial dan temporal dari input. Meskipun model berbasis transformer diketahui hanya efektif ketika dataset pelatihan besar tersedia, kami menunjukkan bagaimana model dapat diregularisasi secara efektif selama pelatihan dan memanfaatkan model citra pretrained agar mampu dilatih pada dataset yang relatif kecil. Kami melakukan studi ablation yang menyeluruh dan mencapai hasil state-of-the-art pada beberapa benchmark klasifikasi video, termasuk Kinetics 400 dan 600, Epic Kitchens, Something-Something v2, dan Moments in Time, melampaui metode sebelumnya yang berbasis jaringan konvolusional 3D dalam.
Model ini disumbangkan oleh jegormeister. Kode aslinya (ditulis dalam JAX) dapat ditemukan di sini.
Menggunakan Scaled Dot Product Attention (SDPA)
PyTorch menyertakan operator scaled dot-product attention (SDPA) native sebagai bagian dari torch.nn.functional. Fungsi ini mencakup beberapa implementasi yang dapat diterapkan tergantung pada input dan perangkat keras yang digunakan. Lihat dokumentasi resmi atau halaman GPU Inference untuk informasi lebih lanjut.
SDPA digunakan secara default untuk torch>=2.1.1 ketika implementasi tersedia, tetapi Anda juga dapat mengatur attn_implementation="sdpa" di from_pretrained() untuk secara eksplisit meminta penggunaan SDPA.
from transformers import VivitModel
model = VivitModel.from_pretrained("google/vivit-b-16x2-kinetics400", attn_implementation="sdpa", device_map="auto")
...Untuk percepatan terbaik, kami merekomendasikan memuat model dalam presisi setengah (misalnya torch.float16 atau torch.bfloat16).
Pada benchmark lokal (A100-40GB, PyTorch 2.3.0, OS Ubuntu 22.04) dengan float32 dan model google/vivit-b-16x2-kinetics400, kami melihat peningkatan kecepatan berikut selama inferensi.
Pelatihan
| num_training_steps | batch_size | apakah cuda | Percepatan (%) | Puncak memori Eager (MB) | mem puncak sdpa (MB) | Penghematan memori (%) |
|---|---|---|---|---|---|---|
| 100 | 1 | Benar | 7.122 | 2575.28 | 5932.54 | 130.364 |
Inferensi
| num_batches | batch_size | apakah cuda | adalah setengah | Percepatan (%) | Memori eager (MB) | Mem BT (MB) | Memori yang dihemat (%) |
|---|---|---|---|---|---|---|---|
| 20 | 1 | Benar | False | 15.422 | 715.807 | 317.079 | 125.75 |
| 20 | 2 | Benar | False | 17.146 | 1234.75 | 447.175 | 176.122 |
| 20 | 4 | Benar | False | 18.093 | 2275.82 | 709.864 | 220.6 |
| 20 | 8 | Benar | False | 19.284 | 4358.19 | 1233.24 | 253.393 |
VivitConfig
kelas transformers.VivitConfig
< source >( transformers_version: str | None = Nonearchitectures: list[str] | None = Noneoutput_hidden_states: bool | None = Falsereturn_dict: bool | None = Truedtype: str | torch.dtype | None = Nonechunk_size_feed_forward: int = 0is_encoder_decoder: bool = Falseid2label: dict[int, str] | dict[str, str] | None = Nonelabel2id: dict[str, int] | dict[str, str] | None = Noneproblem_type: Literal['regression', 'single_label_classification', 'multi_label_classification'] | None = Noneimage_size: int | list[int] | tuple[int, int] = 224num_frames: int = 32tubelet_size: list[int] | tuple[int, ...] = (2, 16, 16)num_channels: int = 3hidden_size: int = 768num_hidden_layers: int = 12num_attention_heads: int = 12intermediate_size: int = 3072hidden_act: str = 'gelu_fast'hidden_dropout_prob: float | int = 0.0attention_probs_dropout_prob: float | int = 0.0initializer_range: float = 0.02layer_norm_eps: float = 1e-06qkv_bias: bool = Truepooler_output_size: int | None = Nonepooler_act: str = 'tanh' )
Parameter
- image_size (
Union[int, list[int], tuple[int, int]], opsional, defaultnya224) — Ukuran (resolusi) dari setiap gambar. - num_frames (
int, opsional, default 32) — Jumlah frame dalam setiap video. - tubelet_size (
list[int], opsional, default[2, 16, 16]) — Ukuran (resolusi) dari setiap tubelet. - num_channels (
int, opsional, defaultnya3) — Jumlah saluran input. - hidden_size (
int, opsional, default768) — Dimensi dari representasi tersembunyi. - num_hidden_layers (
int, opsional, default12) — Jumlah lapisan tersembunyi dalam decoder Transformer. - num_attention_heads (
int, opsional, default12) — Jumlah attention head untuk setiap lapisan attention di decoder Transformer. - intermediate_size (
int, opsional, default3072) — Dimensi representasi MLP. - hidden_act (
str, opsional, defaultgelu_fast) — Fungsi aktivasi non-linear (fungsi atau string) di decoder. Misalnya,"gelu","relu","silu", dan sebagainya. - hidden_dropout_prob (
Union[float, int], opsional, default0.0) — Probabilitas dropout untuk semua lapisan fully connected di embeddings, encoder, dan pooler. - attention_probs_dropout_prob (
Union[float, int], opsional, default0.0) — Rasio dropout untuk probabilitas perhatian. - initializer_range (
float, opsional, defaultnya0.02) — Standar deviasi dari truncated_normal_initializer untuk menginisialisasi semua matriks bobot. - layer_norm_eps (
float, opsional, defaultnya1e-06) — Epsilon yang digunakan oleh lapisan normalisasi lapisan. - qkv_bias (
bool, opsional, defaultnyaTrue) — Apakah akan menambahkan bias ke queries, keys, dan values. - pooler_output_size (
int, opsional) — Dimensi dari lapisan pooler. Jika None, defaultnya adalahhidden_size. - pooler_act (
str, opsional, default"tanh") — Fungsi aktivasi yang akan digunakan oleh pooler.
Ini adalah kelas konfigurasi untuk menyimpan konfigurasi dari VivitModel. Kelas ini digunakan untuk membuat instans model Vivit berdasarkan argumen yang ditentukan, sehingga mendefinisikan arsitektur model. Membuat instans konfigurasi dengan nilai bawaan akan menghasilkan konfigurasi yang serupa dengan konfigurasi dari google/vivit-b-16x2-kinetics400
Objek konfigurasi mewarisi dari PreTrainedConfig dan dapat digunakan untuk mengontrol output model. Baca dokumentasi dari PreTrainedConfig untuk informasi lebih lanjut.
Contoh:
>>> from transformers import VivitConfig, VivitModel
>>> # Initializing a ViViT google/vivit-b-16x2-kinetics400 style configuration
>>> configuration = VivitConfig()
>>> # Initializing a model (with random weights) from the google/vivit-b-16x2-kinetics400 style configuration
>>> model = VivitModel(configuration)
>>> # Accessing the model configuration
>>> configuration = model.configVivitImageProcessor
kelas transformers.VivitImageProcessor
< source >( do_resize: bool = Truesize: dict[str, int] | None = Noneresample: Resampling = <Resampling.BILINEAR: 2>do_center_crop: bool = Truecrop_size: dict[str, int] | None = Nonedo_rescale: bool = Truerescale_factor: int | float = 0.00784313725490196offset: bool = Truedo_normalize: bool = Trueimage_mean: float | list[float] | None = Noneimage_std: float | list[float] | None = None**kwargs )
Parameter
- do_resize (
bool, opsional, defaultTrue) — Apakah akan mengubah ukuran dimensi (tinggi, lebar) gambar menjadisizeyang ditentukan. Dapat ditimpa oleh parameterdo_resizepada metodepreprocess. - size (
dict[str, int]optional, defaults to{"shortest_edge" -- 256}): Size of the output image after resizing. The shortest edge of the image will be resized tosize["shortest_edge"]while maintaining the aspect ratio of the original image. Can be overridden bysizein thepreprocessmethod. - resample (
PILImageResampling, opsional, defaultResampling.BILINEAR) — Filter resampling yang digunakan jika mengubah ukuran gambar. Dapat ditimpa oleh parameterresamplepada metodepreprocess. - do_center_crop (
bool, opsional, defaultTrue) — Apakah akan melakukan center crop pada gambar kecrop_sizeyang ditentukan. Dapat ditimpa oleh parameterdo_center_croppada metodepreprocess. - crop_size (
dict[str, int], opsional, default{"height" -- 224, "width": 224}): Ukuran gambar setelah menerapkan center crop. Dapat ditimpa oleh parametercrop_sizepada metodepreprocess. - do_rescale (
bool, opsional, defaultTrue) — Apakah akan melakukan penskalaan ulang gambar dengan skalarescale_factoryang ditentukan. Dapat ditimpa oleh parameterdo_rescalepada metodepreprocess. - rescale_factor (
intataufloat, opsional, default1/127.5) — Menentukan faktor skala yang digunakan jika melakukan rescaling pada gambar. Dapat ditimpa oleh parameterrescale_factorpada metodepreprocess. - offset (
bool, opsional, defaultTrue) — Apakah akan menskalakan gambar ke arah negatif dan positif. Dapat ditimpa olehoffsetdi metodepreprocess. - do_normalize (
bool, opsional, defaultTrue) — Apakah akan menormalisasi gambar. Dapat ditimpa oleh parameterdo_normalizepada metodepreprocess. - image_mean (
floatataulist[float], opsional, defaultIMAGENET_STANDARD_MEAN) — Rata-rata yang digunakan untuk menormalisasi gambar. Ini adalah float atau daftar float dengan panjang sesuai jumlah channel pada gambar. Dapat ditimpa oleh parameterimage_meanpada metodepreprocess. - image_std (
floatataulist[float], opsional, defaultIMAGENET_STANDARD_STD) — Standar deviasi yang digunakan untuk menormalisasi gambar. Ini adalah float atau daftar float dengan panjang sesuai jumlah channel pada gambar. Dapat ditimpa oleh parameterimage_stdpada metodepreprocess.
Membangun pemroses gambar Vivit.
praproses
< source >( videos: typing.Union[ForwardRef('PIL.Image.Image'), numpy.ndarray, ForwardRef('torch.Tensor'), list['PIL.Image.Image'], list[numpy.ndarray], list['torch.Tensor']]do_resize: bool | None = Nonesize: dict[str, int] | None = Noneresample: PIL.Image.Resampling | None = Nonedo_center_crop: bool | None = Nonecrop_size: dict[str, int] | None = Nonedo_rescale: bool | None = Nonerescale_factor: float | None = Noneoffset: bool | None = Nonedo_normalize: bool | None = Noneimage_mean: float | list[float] | None = Noneimage_std: float | list[float] | None = Nonereturn_tensors: str | transformers.utils.generic.TensorType | None = Nonedata_format: ChannelDimension = <ChannelDimension.FIRST: 'channels_first'>input_data_format: str | transformers.image_utils.ChannelDimension | None = None )
Parameter
- videos (
ImageInput) — Frame video untuk dipreprocess. Mengharapkan satu atau batch frame video dengan nilai piksel berkisar dari 0 hingga 255. Jika Anda memasukkan frame dengan nilai piksel antara 0 dan 1, seteldo_rescale=False. - do_resize (
bool, opsional, defaultnyaself.do_resize) — Apakah akan mengubah ukuran gambar. - size (
dict[str, int], opsional, defaultself.size) — Ukuran gambar setelah resize diterapkan. - resample (
PILImageResampling, opsional, defaultself.resample) — Filter resampling yang digunakan saat mengubah ukuran gambar. Nilai ini dapat berupa salah satu enumPILImageResampling, dan hanya berpengaruh jikado_resizediatur keTrue. - do_center_crop (
bool, opsional, defaultself.do_centre_crop) — Apakah akan melakukan pemotongan tengah (centre crop) pada gambar. - crop_size (
dict[str, int], opsional, defaultself.crop_size) — Ukuran gambar setelah menerapkan pemotongan tengah. - do_rescale (
bool, opsional, defaultself.do_rescale) — Apakah akan menskalakan ulang nilai gambar ke[-1 - 1]jikaoffsetadalahTrue, atau[0, 1]jika tidak. - rescale_factor (
float, opsional, defaultnyaself.rescale_factor) — Faktor rescale untuk menskalakan ulang gambar jikado_rescalediatur keTrue. - offset (
bool, opsional, defaultself.offset) — Apakah akan menskalakan gambar ke arah negatif dan positif. - do_normalize (
bool, opsional, defaultnyaself.do_normalize) — Apakah akan menormalisasi gambar. - image_mean (
floatataulist[float], opsional, defaultself.image_mean) — Rata-rata gambar. - image_std (
floatataulist[float], opsional, defaultself.image_std) — Standar deviasi gambar. - return_tensors (
stratauTensorType, opsional) — Jenis tensor yang akan dikembalikan. Bisa berupa salah satu dari:- Unset: Mengembalikan daftar
np.ndarray. TensorType.PYTORCHatau'pt': Mengembalikan batch bertipetorch.Tensor.TensorType.NUMPYatau'np': Mengembalikan batch bertipenp.ndarray.
- Unset: Mengembalikan daftar
- data_format (
ChannelDimensionataustr, opsional, defaultnyaChannelDimension.FIRST) — Format dimensi channel untuk gambar keluaran. Bisa berupa salah satu dari:ChannelDimension.FIRST: gambar dalam format (num_channels, height, width).ChannelDimension.LAST: gambar dalam format (height, width, num_channels).- Unset: Gunakan format dimensi channel yang disimpulkan dari gambar input.
- input_data_format (
ChannelDimensionataustr, opsional) — Format dimensi channel untuk gambar input. Jika tidak disetel, format dimensi channel akan disimpulkan dari gambar input. Bisa berupa salah satu dari:"channels_first"atauChannelDimension.FIRST: gambar dalam format (num_channels, height, width)."channels_last"atauChannelDimension.LAST: gambar dalam format (height, width, num_channels)."none"atauChannelDimension.NONE: gambar dalam format (height, width).
Praproses sebuah gambar atau kumpulan gambar.
VivitVideoProcessor
kelas transformers.VivitVideoProcessor
< source >( **kwargs: *<class 'transformers.processing_utils.VideosKwargs'> )
Parameter
- do_convert_rgb (
bool, kwargs, opsional, defaultTrue) — Apakah akan mengkonversi gambar ke RGB. - do_resize (
bool, kwargs, opsional, defaultTrue) — Apakah akan mengubah ukuran gambar. - size (
Annotated[int | list[int] | tuple[int, ...] | dict[str, int] | None, None], kwargs, defaultnya{'shortest_edge' -- 256}): Menggambarkan dimensi input maksimum untuk model. - default_to_square (
bool, kwargs, opsional, defaultnyaFalse) — Apakah akan menggunakan gambar persegi sebagai default saat mengubah ukuran, jika size berupa int. - resample (
Annotated[Union[int, PILImageResampling, NoneType], None], kwargs, defaultnya2) — Filter resampling yang digunakan jika mengubah ukuran gambar. Ini bisa berupa salah satu enumPILImageResampling. Hanya berpengaruh jikado_resizediatur keTrue. - do_rescale (
bool, kwargs, opsional, defaultTrue) — Apakah akan melakukan penskalaan ulang pada gambar. - rescale_factor (
float, kwargs, opsional, default0.00784313725490196) — Faktor penskalaan ulang untuk menskalakan ulang gambar jikado_rescalediatur keTrue. - do_normalize (
bool, kwargs, opsional, defaultTrue) — Apakah akan menormalisasi gambar. - image_mean (
Union[float, list[float], tuple[float, ...]], kwargs, opsional, defaultnya[0.5, 0.5, 0.5]) — Rata-rata gambar yang digunakan untuk normalisasi. Hanya berpengaruh jikado_normalizediatur keTrue. - image_std (
Union[float, list[float], tuple[float, ...]], kwargs, opsional, defaultnya[0.5, 0.5, 0.5]) — Standar deviasi gambar yang digunakan untuk normalisasi. Hanya berpengaruh jikado_normalizediatur keTrue. - do_center_crop (
bool, kwargs, opsional, defaultTrue) — Apakah akan melakukan center crop pada gambar. - do_pad (
bool, kwargs, opsional) — Apakah akan melakukan padding pada gambar. Padding dilakukan ke ukuran terbesar dalam batch atau ke ukuran persegi tetap per gambar. Strategi padding yang tepat bergantung pada model. - crop_size (
Annotated[int | list[int] | tuple[int, ...] | dict[str, int] | None, None], kwargs, defaultnya{'height' -- 224, 'width': 224}): Ukuran gambar keluaran setelah menerapkancenter_crop. - data_format (
Union[str, ~image_utils.ChannelDimension], kwargs, opsional) — HanyaChannelDimension.FIRSTyang didukung. Ditambahkan untuk kompatibilitas dengan prosesor lambat. - input_data_format (
Union[str, ~image_utils.ChannelDimension], kwargs, opsional) — Format dimensi channel untuk gambar input. Jika tidak diset, format dimensi channel akan disimpulkan dari gambar input. Bisa berupa salah satu dari:"channels_first"atauChannelDimension.FIRST: gambar dalam format (num_channels, height, width)."channels_last"atauChannelDimension.LAST: gambar dalam format (height, width, num_channels)."none"atauChannelDimension.NONE: gambar dalam format (height, width).
- device (
Annotated[Union[str, torch.device, NoneType], None], kwargs) — Perangkat untuk memproses video. Jika tidak disetel, perangkat akan disimpulkan dari video input. - do_sample_frames (
bool, kwargs, opsional, defaultFalse) — Apakah akan mengambil sampel frame dari video sebelum diproses atau memproses seluruh video. - video_metadata (
Annotated[~video_utils.VideoMetadata | dict | list[dict | ~video_utils.VideoMetadata] | list[list[dict | ~video_utils.VideoMetadata]] | None, None], kwargs) — Metadata dari video yang berisi informasi tentang durasi total, fps, dan jumlah total frame. Metadata ini akan digunakan untuk mengambil sampel frame dari video atau menghitung timestamp. Jangan kirimkan metadata apa pun kecuali Anda mencoba mendekode video secara manual sebelum diproses - fps (
Annotated[int | float | None, None], kwargs) — Target frame yang akan disampel per detik ketikado_sample_frames=True. - num_frames (
Annotated[int | None, None], kwargs) — Jumlah maksimum frame yang akan disampelkan saatdo_sample_frames=True. - return_metadata (
bool, kwargs, opsional, defaultFalse) — Apakah akan mengembalikan metadata video atau tidak. Metadata video adalah objek yang berisi informasi tentang durasi video, fps, backend decoding, dll. - return_tensors (
Annotated[str | ~utils.generic.TensorType | None, None], kwargs) — Jika diset, akan mengembalikan tensor dari framework tertentu. Nilai yang dapat diterima adalah:'pt': Mengembalikan objek PyTorchtorch.Tensor.'np': Mengembalikan objek NumPynp.ndarray.
- **kwargs (VideosKwargs, opsional) — Opsi pemrosesan tambahan untuk setiap modalitas (teks, gambar, video, audio). Parameter spesifik model tercantum di atas; lihat kelas TypedDict untuk daftar lengkap argumen yang didukung.
Membangun pemroses video VivitVideoProcessor.
praproses
< source >( videos: typing.Union[list['PIL.Image.Image'], numpy.ndarray, ForwardRef('torch.Tensor'), list[numpy.ndarray], list['torch.Tensor'], list[list['PIL.Image.Image']], list[list[numpy.ndarray]], list[list['torch.Tensor']], transformers.video_utils.URL, list[transformers.video_utils.URL], list[list[transformers.video_utils.URL]], transformers.video_utils.Path, list[transformers.video_utils.Path], list[list[transformers.video_utils.Path]]]**kwargs: *<class 'transformers.processing_utils.VideosKwargs'> ) → ~image_processing_base.BatchFeature
Parameter
- videos (
Union[list[PIL.Image.Image], numpy.ndarray, torch.Tensor, list[numpy.ndarray], list[torch.Tensor], list[list[PIL.Image.Image]], list[list[numpy.ndarray]], list[list[torch.Tensor]], ~video_utils.URL, list[~video_utils.URL], list[list[~video_utils.URL]], ~video_utils.Path, list[~video_utils.Path], list[list[~video_utils.Path]]]) — Video yang akan dipreprocess. Mengharapkan satu video atau batch video dengan nilai piksel berkisar dari 0 hingga 255. Jika mengirimkan video dengan nilai piksel antara 0 dan 1, aturdo_rescale=False. - do_convert_rgb (
bool, kwargs, opsional) — Apakah akan mengonversi gambar ke RGB. - do_resize (
bool, kwargs, opsional) — Apakah akan mengubah ukuran gambar. - size (
Annotated[int | list[int] | tuple[int, ...] | dict[str, int] | None, None], kwargs) — Menggambarkan dimensi input maksimum untuk model. - default_to_square (
bool, kwargs, opsional) — Apakah akan menggunakan gambar persegi sebagai default saat mengubah ukuran, jika size berupa int. - resample (
Annotated[Union[int, PILImageResampling, NoneType], None], kwargs) — Filter resampling yang digunakan jika mengubah ukuran gambar. Ini dapat berupa salah satu enumPILImageResampling. Hanya berpengaruh jikado_resizediatur keTrue. - do_rescale (
bool, kwargs, opsional) — Apakah akan melakukan penskalaan ulang pada gambar. - rescale_factor (
float, kwargs, opsional) — Faktor rescale untuk menskalakan ulang gambar jikado_rescalediatur keTrue. - do_normalize (
bool, kwargs, opsional) — Apakah akan menormalisasi gambar. - image_mean (
Union[float, list[float], tuple[float, ...]], kwargs, opsional) — Rata-rata gambar yang digunakan untuk normalisasi. Hanya berpengaruh jikado_normalizediatur keTrue. - image_std (
Union[float, list[float], tuple[float, ...]], kwargs, opsional) — Standar deviasi gambar yang digunakan untuk normalisasi. Hanya berpengaruh jikado_normalizediatur keTrue. - do_center_crop (
bool, kwargs, opsional) — Apakah akan melakukan center crop pada gambar. - do_pad (
bool, kwargs, opsional) — Apakah akan melakukan padding pada gambar. Padding dilakukan ke ukuran terbesar dalam batch atau ke ukuran persegi tetap per gambar. Strategi padding yang tepat bergantung pada model. - crop_size (
Annotated[int | list[int] | tuple[int, ...] | dict[str, int] | None, None], kwargs) — Ukuran gambar keluaran setelah menerapkancenter_crop. - data_format (
Union[str, ~image_utils.ChannelDimension], kwargs, opsional) — HanyaChannelDimension.FIRSTyang didukung. Ditambahkan untuk kompatibilitas dengan prosesor lambat. - input_data_format (
Union[str, ~image_utils.ChannelDimension], kwargs, opsional) — Format dimensi channel untuk gambar input. Jika tidak diset, format dimensi channel akan disimpulkan dari gambar input. Bisa berupa salah satu dari:"channels_first"atauChannelDimension.FIRST: gambar dalam format (num_channels, height, width)."channels_last"atauChannelDimension.LAST: gambar dalam format (height, width, num_channels)."none"atauChannelDimension.NONE: gambar dalam format (height, width).
- device (
Annotated[Union[str, torch.device, NoneType], None], kwargs) — Perangkat untuk memproses video. Jika tidak disetel, perangkat akan disimpulkan dari video input. - do_sample_frames (
bool, kwargs, opsional) — Apakah akan mengambil sampel frame dari video sebelum diproses atau memproses seluruh video. - video_metadata (
Annotated[~video_utils.VideoMetadata | dict | list[dict | ~video_utils.VideoMetadata] | list[list[dict | ~video_utils.VideoMetadata]] | None, None], kwargs) — Metadata dari video yang berisi informasi tentang durasi total, fps, dan jumlah total frame. Metadata ini akan digunakan untuk mengambil sampel frame dari video atau menghitung timestamp. Jangan kirimkan metadata apa pun kecuali Anda mencoba mendekode video secara manual sebelum diproses - fps (
Annotated[int | float | None, None], kwargs) — Target frame yang akan disampel per detik ketikado_sample_frames=True. - num_frames (
Annotated[int | None, None], kwargs) — Jumlah maksimum frame yang akan disampelkan saatdo_sample_frames=True. - return_metadata (
bool, kwargs, opsional) — Apakah akan mengembalikan metadata video atau tidak. Metadata video adalah objek yang berisi informasi tentang durasi video, fps, backend decoding, dll. - return_tensors (
Annotated[str | ~utils.generic.TensorType | None, None], kwargs) — Mengembalikan tensor bertumpuk jika diset ke'pt', selain itu mengembalikan daftar tensor.
Mengembalikan
~image_processing_base.BatchFeature
- data (
dict) — Kamus berisi daftar/array/tensor yang dikembalikan oleh metode call (‘pixel_values’, dll.). - tensor_type (
Union[None, str, TensorType], opsional) — Anda dapat memberikan tensor_type di sini untuk mengonversi daftar bilangan bulat menjadi Tensor PyTorch/Numpy saat inisialisasi.
VivitModel
kelas transformers.VivitModel
< source >( config: VivitConfigadd_pooling_layer: bool = True )
Parameter
- config (VivitConfig) — Kelas konfigurasi model dengan semua parameter model. Inisialisasi dengan file konfigurasi tidak memuat bobot yang terkait dengan model, hanya konfigurasinya. Lihat metode from_pretrained() untuk memuat bobot model.
- add_pooling_layer (
bool, opsional, defaultTrue) — Apakah akan menambahkan lapisan pooling
Model Vivit polos yang menghasilkan hidden-states mentah tanpa head spesifik di atasnya.
Model ini mewarisi dari PreTrainedModel. Periksa dokumentasi kelas induk untuk metode generik yang diimplementasikan oleh pustaka untuk semua model (seperti mengunduh atau menyimpan, mengubah ukuran embedding input, memangkas kepala, dll.)
Model ini juga merupakan subclass dari torch.nn.Module PyTorch. Gunakan sebagai PyTorch Module biasa dan merujuk ke dokumentasi PyTorch untuk semua hal yang berkaitan dengan penggunaan dan perilaku umum.
forward
< source >( pixel_values: typing.Optional[torch.Tensor] = Noneinterpolate_pos_encoding: bool = Falseattention_mask: typing.Optional[torch.Tensor] = None**kwargs: *<class 'transformers.utils.generic.TransformersKwargs'> ) → BaseModelOutputWithPooling or tuple(torch.Tensor)
Parameter
- pixel_values (
torch.Tensordengan bentuk(batch_size, num_channels, image_size, image_size), opsional) — Tensor yang sesuai dengan gambar input. Nilai piksel dapat diperoleh menggunakan VivitImageProcessor. Lihat VivitImageProcessor.call() untuk detailnya (processor_classmenggunakan VivitImageProcessor untuk memproses gambar). - interpolate_pos_encoding (
bool, opsional, defaultFalse) — Apakah akan menginterpolasi posisi encoding yang telah dilatih sebelumnya. - attention_mask (
torch.Tensordengan bentuk(batch_size, sequence_length), opsional) — Mask untuk menghindari eksekusi attention pada indeks token padding. Nilai mask dipilih dari[0, 1]:- 1 untuk token yang tidak dimasker,
- 0 untuk token yang dimasker.
Mengembalikan
BaseModelOutputWithPooling atau tuple(torch.Tensor)
BaseModelOutputWithPooling atau tuple dari
torch.Tensor (jika return_dict=False dilewatkan atau ketika config.return_dict=False) yang terdiri dari berbagai
elemen tergantung pada konfigurasi (VivitConfig) dan input.
Metode forward dari VivitModel menimpa metode khusus __call__.
Meskipun resep untuk forward pass perlu didefinisikan di dalam fungsi ini, sebaiknya panggil instance
Modulesetelahnya alih-alih fungsi ini, karena yang pertama menangani langkah-langkah pra-pemrosesan dan pasca-pemrosesan, sedangkan yang kedua mengabaikannya secara diam-diam.
last_hidden_state (
torch.Tensordengan bentuk(batch_size, sequence_length, hidden_size)) — Urutan hidden-states pada keluaran lapisan terakhir model.pooler_output (
torch.Tensordengan bentuk(batch_size, hidden_size)) — Hidden-state lapisan terakhir dari token pertama dalam urutan (token klasifikasi) setelah diproses lebih lanjut melalui lapisan yang digunakan untuk tugas pra-pelatihan tambahan. Misalnya, untuk keluarga model BERT, ini mengembalikan token klasifikasi setelah diproses melalui lapisan linear dan fungsi aktivasi tanh. Bobot lapisan linear dilatih dari tujuan prediksi kalimat berikutnya (klasifikasi) selama pra-pelatihan.hidden_states (
tuple(torch.Tensor), opsional, dikembalikan saatoutput_hidden_states=Truedilewatkan atau saatconfig.output_hidden_states=True) — Tuple daritorch.Tensor(satu untuk output dari embeddings, jika model memiliki lapisan embedding, + satu untuk output dari setiap lapisan) dengan bentuk(batch_size, sequence_length, hidden_size).Hidden-states model pada output setiap layer ditambah output embedding awal yang opsional.
attentions (
tuple(torch.Tensor), opsional, dikembalikan saatoutput_attentions=Truedilewatkan atau saatconfig.output_attentions=True) — Tuple daritorch.Tensor(satu untuk setiap layer) dengan bentuk(batch_size, num_heads, sequence_length, sequence_length).Bobot perhatian setelah softmax perhatian, digunakan untuk menghitung rata-rata berbobot di kepala perhatian diri (self-attention).
Contoh:
>>> import av
>>> import numpy as np
>>> from transformers import VivitImageProcessor, VivitModel
>>> from huggingface_hub import hf_hub_download
>>> np.random.seed(0)
>>> def read_video_pyav(container, indices):
... '''
... Decode the video with PyAV decoder.
... Args:
... container (`av.container.input.InputContainer`): PyAV container.
... indices (`list[int]`): List of frame indices to decode.
... Returns:
... result (np.ndarray): np array of decoded frames of shape (num_frames, height, width, 3).
... '''
... frames = []
... container.seek(0)
... start_index = indices[0]
... end_index = indices[-1]
... for i, frame in enumerate(container.decode(video=0)):
... if i > end_index:
... break
... if i >= start_index and i in indices:
... frames.append(frame)
... return np.stack([x.to_ndarray(format="rgb24") for x in frames])
>>> def sample_frame_indices(clip_len, frame_sample_rate, seg_len):
... '''
... Sample a given number of frame indices from the video.
... Args:
... clip_len (`int`): Total number of frames to sample.
... frame_sample_rate (`int`): Sample every n-th frame.
... seg_len (`int`): Maximum allowed index of sample's last frame.
... Returns:
... indices (`list[int]`): List of sampled frame indices
... '''
... converted_len = int(clip_len * frame_sample_rate)
... end_idx = np.random.randint(converted_len, seg_len)
... start_idx = end_idx - converted_len
... indices = np.linspace(start_idx, end_idx, num=clip_len)
... indices = np.clip(indices, start_idx, end_idx - 1).astype(np.int64)
... return indices
>>> # video clip consists of 300 frames (10 seconds at 30 FPS)
>>> file_path = hf_hub_download(
... repo_id="nielsr/video-demo", filename="eating_spaghetti.mp4", repo_type="dataset"
... )
>>> container = av.open(file_path)
>>> # sample 32 frames
>>> indices = sample_frame_indices(clip_len=32, frame_sample_rate=1, seg_len=container.streams.video[0].frames)
>>> video = read_video_pyav(container=container, indices=indices)
>>> image_processor = VivitImageProcessor.from_pretrained("google/vivit-b-16x2-kinetics400")
>>> model = VivitModel.from_pretrained("google/vivit-b-16x2-kinetics400")
>>> # prepare video for the model
>>> inputs = image_processor(list(video), return_tensors="pt")
>>> # forward pass
>>> outputs = model(**inputs)
>>> last_hidden_states = outputs.last_hidden_state
>>> list(last_hidden_states.shape)
[1, 3137, 768]VivitForVideoClassification
kelas transformers.VivitForVideoClassification
< source >( config: VivitConfig )
Parameter
- config (VivitConfig) — Kelas konfigurasi model dengan semua parameter model. Inisialisasi dengan file konfigurasi tidak memuat bobot yang terkait dengan model, hanya konfigurasinya. Lihat metode from_pretrained() untuk memuat bobot model.
Model Transformer ViViT dengan kepala klasifikasi video di atasnya (sebuah lapisan linear di atas keadaan tersembunyi akhir dari token [CLS]) misalnya untuk Kinetics-400.
Perlu dicatat bahwa ViT dapat di-*fine-tune* pada gambar dengan resolusi lebih tinggi daripada yang digunakan saat pelatihan, dengan mengatur
interpolate_pos_encodingmenjadiTruedi *forward* model. Hal ini akan menginterpolasi *position embeddings* yang telah dilatih ke resolusi yang lebih tinggi.
Model ini mewarisi dari PreTrainedModel. Periksa dokumentasi kelas induk untuk metode generik yang diimplementasikan oleh pustaka untuk semua model (seperti mengunduh atau menyimpan, mengubah ukuran embedding input, memangkas kepala, dll.)
Model ini juga merupakan subclass dari torch.nn.Module PyTorch. Gunakan sebagai PyTorch Module biasa dan merujuk ke dokumentasi PyTorch untuk semua hal yang berkaitan dengan penggunaan dan perilaku umum.
forward
< source >( pixel_values: typing.Optional[torch.Tensor] = Nonelabels: typing.Optional[torch.LongTensor] = Noneinterpolate_pos_encoding: bool = False**kwargs: *<class 'transformers.utils.generic.TransformersKwargs'> ) → ImageClassifierOutput or tuple(torch.Tensor)
Parameter
- pixel_values (
torch.Tensordengan bentuk(batch_size, num_channels, image_size, image_size), opsional) — Tensor yang sesuai dengan gambar input. Nilai piksel dapat diperoleh menggunakan VivitImageProcessor. Lihat VivitImageProcessor.call() untuk detailnya (processor_classmenggunakan VivitImageProcessor untuk memproses gambar). - labels (
torch.LongTensordengan bentuk(batch_size,), opsional) — Label untuk menghitung loss klasifikasi/regresi gambar. Indeks harus berada dalam[0, ..., config.num_labels - 1]. Jikaconfig.num_labels == 1, loss regresi dihitung (Mean-Square loss). Jikaconfig.num_labels > 1, loss klasifikasi dihitung (Cross-Entropy). - interpolate_pos_encoding (
bool, opsional, defaultFalse) — Apakah akan menginterpolasi posisi encoding yang telah dilatih sebelumnya.
Mengembalikan
ImageClassifierOutput atau tuple(torch.Tensor)
Sebuah ImageClassifierOutput atau tuple dari
torch.Tensor (jika return_dict=False diteruskan atau ketika config.return_dict=False) yang terdiri dari berbagai
elemen tergantung pada konfigurasi (VivitConfig) dan input.
Metode forward dari VivitForVideoClassification menimpa metode khusus __call__.
Meskipun resep untuk forward pass perlu didefinisikan di dalam fungsi ini, sebaiknya panggil instance
Modulesetelahnya alih-alih fungsi ini, karena yang pertama menangani langkah-langkah pra-pemrosesan dan pasca-pemrosesan, sedangkan yang kedua mengabaikannya secara diam-diam.
loss (
torch.Tensordengan bentuk(1,), opsional, dikembalikan saatlabelsdisediakan) — Loss klasifikasi (atau regresi jika config.num_labels==1).logits (
torch.Tensordengan bentuk(batch_size, config.num_labels)) — Skor klasifikasi (atau regresi jika config.num_labels==1) (sebelum SoftMax).hidden_states (
tuple(torch.Tensor), opsional, dikembalikan saatoutput_hidden_states=Truedilewatkan atau saatconfig.output_hidden_states=True) — Tuple daritorch.Tensor(satu untuk output dari embeddings, jika model memiliki lapisan embedding, + satu untuk output dari setiap tahap) dengan bentuk(batch_size, sequence_length, hidden_size). Hidden-states (juga disebut feature maps) dari model pada output dari setiap tahap.attentions (
tuple(torch.Tensor), opsional, dikembalikan saatoutput_attentions=Truedilewatkan atau saatconfig.output_attentions=True) — Tuple daritorch.Tensor(satu untuk setiap layer) dengan bentuk(batch_size, num_heads, patch_size, sequence_length).Bobot perhatian setelah softmax perhatian, digunakan untuk menghitung rata-rata berbobot di kepala perhatian diri (self-attention).
Contoh:
>>> import av
>>> import numpy as np
>>> import torch
>>> from transformers import VivitImageProcessor, VivitForVideoClassification
>>> from huggingface_hub import hf_hub_download
>>> np.random.seed(0)
>>> def read_video_pyav(container, indices):
... '''
... Decode the video with PyAV decoder.
... Args:
... container (`av.container.input.InputContainer`): PyAV container.
... indices (`list[int]`): List of frame indices to decode.
... Returns:
... result (np.ndarray): np array of decoded frames of shape (num_frames, height, width, 3).
... '''
... frames = []
... container.seek(0)
... start_index = indices[0]
... end_index = indices[-1]
... for i, frame in enumerate(container.decode(video=0)):
... if i > end_index:
... break
... if i >= start_index and i in indices:
... frames.append(frame)
... return np.stack([x.to_ndarray(format="rgb24") for x in frames])
>>> def sample_frame_indices(clip_len, frame_sample_rate, seg_len):
... '''
... Sample a given number of frame indices from the video.
... Args:
... clip_len (`int`): Total number of frames to sample.
... frame_sample_rate (`int`): Sample every n-th frame.
... seg_len (`int`): Maximum allowed index of sample's last frame.
... Returns:
... indices (`list[int]`): List of sampled frame indices
... '''
... converted_len = int(clip_len * frame_sample_rate)
... end_idx = np.random.randint(converted_len, seg_len)
... start_idx = end_idx - converted_len
... indices = np.linspace(start_idx, end_idx, num=clip_len)
... indices = np.clip(indices, start_idx, end_idx - 1).astype(np.int64)
... return indices
>>> # video clip consists of 300 frames (10 seconds at 30 FPS)
>>> file_path = hf_hub_download(
... repo_id="nielsr/video-demo", filename="eating_spaghetti.mp4", repo_type="dataset"
... )
>>> container = av.open(file_path)
>>> # sample 32 frames
>>> indices = sample_frame_indices(clip_len=32, frame_sample_rate=4, seg_len=container.streams.video[0].frames)
>>> video = read_video_pyav(container=container, indices=indices)
>>> image_processor = VivitImageProcessor.from_pretrained("google/vivit-b-16x2-kinetics400")
>>> model = VivitForVideoClassification.from_pretrained("google/vivit-b-16x2-kinetics400")
>>> inputs = image_processor(list(video), return_tensors="pt")
>>> with torch.no_grad():
... outputs = model(**inputs)
... logits = outputs.logits
>>> # model predicts one of the 400 Kinetics-400 classes
>>> predicted_label = logits.argmax(-1).item()
>>> print(model.config.id2label[predicted_label])
LABEL_116