التنفيذ الرسمي لبرنامج VideoMambaPro: قفزة للأمام لشركة 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، حيث يقوم النموذج بتحميل ملف قائمة بيانات بالتنسيق التالي:
تسمية إطار_مجلد_مسار إجمالي_الإطارات
هناك تطبيقان لمجموعة البيانات الدقيقة الخاصة بنا VideoClsDataset
و RawFrameClsDataset
، يدعمان بيانات الفيديو وبيانات الإطارات الأولية، على التوالي. حيث يستخدم SSV2 RawFrameClsDataset
بشكل افتراضي وتستخدم بقية مجموعات البيانات VideoClsDataset
.
يقوم VideoClsDataset
بتحميل ملف قائمة البيانات بالتنسيق التالي:
تسمية مسار الفيديو
بينما يقوم RawFrameClsDataset
بتحميل ملف قائمة البيانات بالتنسيق التالي:
تسمية إطار_مجلد_مسار إجمالي_الإطارات
على سبيل المثال، تظهر أدناه قائمة بيانات الفيديو وقائمة بيانات الإطارات الأولية:
# 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 في الوظيفة Selective_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. عند حساب المامبا ثنائية الاتجاه، على سبيل المثال، في 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