การใช้งาน VideoMambaPro อย่างเป็นทางการ: การก้าวกระโดดของ Mamba ในการทำความเข้าใจวิดีโอ
เราตรวจสอบความคล้ายคลึงและความแตกต่างของการเอาใจใส่ตนเองและ Mamba จากมุมมองของสิ่งหลัง และเปิดเผยข้อจำกัดของ Mamba ในงานทำความเข้าใจวิดีโอ เราขอเสนอ VideoMambaPro ที่ใช้ VideoMamba เป็นแกนหลัก แต่เพิ่มประสิทธิภาพในงานทำความเข้าใจวิดีโออย่างมาก โดยลดช่องว่างด้วยหม้อแปลง
แพ็กเกจที่จำเป็นอยู่ในไฟล์ requirements.txt
และคุณสามารถรันคำสั่งต่อไปนี้เพื่อติดตั้งสภาพแวดล้อม
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
เราอ่านและประมวลผลในลักษณะเดียวกับ VideoMAE แต่มีรูปแบบไฟล์รายการข้อมูลที่แตกต่างกัน
เราฝึกโมเดลล่วงหน้าบนชุดข้อมูล ImageNet-1K โดยที่โมเดลโหลดไฟล์รายการข้อมูลด้วยรูปแบบต่อไปนี้:
ป้ายกำกับ frame_folder_path Total_frames
มีการใช้งานชุดข้อมูลแบบละเอียด VideoClsDataset
และ RawFrameClsDataset
ของเราสองแบบ ซึ่งรองรับข้อมูลวิดีโอและข้อมูล Rawframes ตามลำดับ โดยที่ SSV2 ใช้ RawFrameClsDataset
เป็นค่าเริ่มต้น และชุดข้อมูลที่เหลือใช้ VideoClsDataset
VideoClsDataset
โหลดไฟล์รายการข้อมูลด้วยรูปแบบต่อไปนี้:
ป้ายกำกับ video_path
ในขณะที่ RawFrameClsDataset
โหลดไฟล์รายการข้อมูลด้วยรูปแบบต่อไปนี้:
ป้ายกำกับ frame_folder_path Total_frames
ตัวอย่างเช่น รายการข้อมูลวิดีโอและรายการข้อมูล Rawframes จะแสดงอยู่ด้านล่าง:
# 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
...
โครงการของเราใช้ VideoMamba เพื่อการเปรียบเทียบที่ยุติธรรม เพื่อแก้ไขข้อจำกัด 1&2 ในรายงานของเรา เราเปลี่ยนไปป์ไลน์ของ Mamba เป็นหลักโดยการใช้มาสก์แนวทแยงระหว่าง SSM ด้านหลัง และใช้การเชื่อมต่อที่เหลือบน SSM แบบสองทิศทาง การเชื่อมต่อที่เหลือของ Ab รับรู้ในฟังก์ชัน selector_scan_ref ใน mamba/mamba_ssm/ops/selective_scan_interface.py และตัวเลือกหลักอยู่ด้านล่าง:
x = u[:, :, 0].unsqueeze(-1).expand(-1, -1, dstate)
x = deltaA[:, :, i] * x + deltaB_u[:, :, i]
การกำหนดมาสก์ทำได้ผ่านการตั้งค่าฟังก์ชันการเลือกสองฟังก์ชัน ได้แก่ Selective_scan_ref และ Selective_scan_ref_sub ใน mamba/mamba_ssm/ops/selective_scan_interface.py เมื่อคำนวณ mamba แบบสองทิศทาง เช่น ใน bimamba_inner_ref ของ mamba/mamba_ssm/ops/selective_scan_interface.py รหัสคีย์จะอยู่ด้านล่าง:
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])
链接: https://pan.baidu.com/s/1vJN_XTRct65cDA_0AB259g?pwd=ghqb 提取码: ghqb