Implementasi Resmi VideoMambaPro: Sebuah Lompatan ke Depan bagi Mamba dalam Pemahaman Video
kami menyelidiki persamaan dan perbedaan perhatian diri dan Mamba dari sudut pandang Mamba, dan mengungkap keterbatasan Mamba dalam tugas pemahaman video. Kami mengusulkan VideoMambaPro yang menggunakan VideoMamba sebagai tulang punggung, namun secara signifikan meningkatkan kinerja dalam tugas pemahaman video, mempersempit kesenjangan dengan transformator.
Paket yang diperlukan ada di file requirements.txt
, dan Anda dapat menjalankan perintah berikut untuk menginstal lingkungan
conda create -n videomambapro python=3.10
conda activate videomambapro
conda install cudatoolkit==11.8 -c nvidia
pip install torch==2.1.1 torchvision==0.16.1 torchaudio==2.1.1 --index-url https://download.pytorch.org/whl/cu118
conda install -c "nvidia/label/cuda-11.8.0" cuda-nvcc
conda install packaging
pip install causal_conv1d==1.4.0 (we recommend to install through .whl file)
pip install mamba-ssm
pip install -r requirements.txt
Kami membaca dan memproses dengan cara yang sama seperti VideoMAE, tetapi dengan konvensi berbeda untuk format file daftar data.
Kami melakukan pra-latihan model pada kumpulan data ImageNet-1K, di mana model memuat file daftar data dengan format berikut:
label frame_folder_path total_frames
Ada dua implementasi dari kumpulan data finetune kami, VideoClsDataset
dan RawFrameClsDataset
, yang masing-masing mendukung data video dan data rawframe. Dimana SSV2 menggunakan RawFrameClsDataset
secara default dan kumpulan data lainnya menggunakan VideoClsDataset
.
VideoClsDataset
memuat file daftar data dengan format berikut:
label jalur_video
sementara RawFrameClsDataset
memuat file daftar data dengan format berikut:
label frame_folder_path total_frames
Misalnya, daftar data video dan daftar data rawframe ditunjukkan di bawah ini:
# The path prefix 'your_path' can be specified by `--data_root ${PATH_PREFIX}` in scripts when training or inferencing.
# k400 video data validation list
your_path/k400/jf7RDuUTrsQ.mp4 325
your_path/k400/JTlatknwOrY.mp4 233
your_path/k400/NUG7kwJ-614.mp4 103
your_path/k400/y9r115bgfNk.mp4 320
your_path/k400/ZnIDviwA8CE.mp4 244
...
# ssv2 rawframes data validation list
your_path/SomethingV2/frames/74225 62 140
your_path/SomethingV2/frames/116154 51 127
your_path/SomethingV2/frames/198186 47 173
your_path/SomethingV2/frames/137878 29 99
your_path/SomethingV2/frames/151151 31 166
...
Proyek kami didasarkan pada VideoMamba untuk perbandingan yang adil. Untuk mengatasi batasan 1&2 dalam makalah kami, kami terutama mengubah jalur pipa Mamba dengan menerapkan topeng diagonal selama SSM mundur dan menerapkan koneksi sisa pada SSM dua arah. Koneksi sisa Ab diwujudkan dalam fungsiselective_scan_ref di mamba/mamba_ssm/ops/selective_scan_interface.py, dan opsi kuncinya ada di bawah:
x = u[:, :, 0].unsqueeze(-1).expand(-1, -1, dstate)
x = deltaA[:, :, i] * x + deltaB_u[:, :, i]
Penetapan mask diwujudkan melalui pengaturan dua fungsi selektif, yaitu selektif_scan_ref, dan selektif_scan_ref_sub di mamba/mamba_ssm/ops/selective_scan_interface.py. Saat menghitung mamba dua arah, misalnya, di bimamba_inner_ref dari mamba/mamba_ssm/ops/selective_scan_interface.py, kode kuncinya ada di bawah:
y = selective_scan_fn(x, delta, A, B, C, D, z=z, delta_bias=delta_bias, delta_softplus=True)
y_b = selective_scan_ref_sub(x.flip([-1]), delta.flip([-1]), A_b, B.flip([-1]), C.flip([-1]), D, z.flip([-1]), delta_bias, delta_softplus=True)
y = y + y_b.flip([-1])
Alamat: https://pan.baidu.com/s/1vJN_XTRct65cDA_0AB259g?pwd=ghqb Jawaban: ghqb