الإنجليزية | 中文
المستودع الرسمي للورقة الخاصة بتغطية الفيديو القوية عالية الدقة مع التوجيه الزمني. تم تصميم RVM خصيصًا لتصوير الفيديو البشري القوي. على عكس النماذج العصبية الموجودة التي تعالج الإطارات كصور مستقلة، يستخدم RVM شبكة عصبية متكررة لمعالجة مقاطع الفيديو ذات الذاكرة المؤقتة. يمكن لـ RVM إجراء عملية الدمج في الوقت الفعلي على أي مقاطع فيديو دون مدخلات إضافية. إنه يحقق 4K 76FPS و HD 104FPS على وحدة معالجة الرسوميات Nvidia GTX 1080 Ti. تم تطوير المشروع في شركة ByteDance Inc.
[03 نوفمبر 2021] تم إصلاح الخلل في Train.py.
[16 سبتمبر 2021] تمت إعادة إصدار الكود بموجب ترخيص GPL-3.0.
[25 أغسطس 2021] تم نشر كود المصدر والنماذج المُدربة مسبقًا.
[27 يوليو 2021] تم قبول الورقة من قبل WACV 2022.
شاهد الفيديو العرضي (يوتيوب، بيليبيلي) لمشاهدة أداء العارضة.
جميع اللقطات في الفيديو متوفرة في Google Drive.
عرض كاميرا الويب: قم بتشغيل النموذج مباشرة في متصفحك. تصور الحالات المتكررة.
Colab Demo: اختبر نموذجنا على مقاطع الفيديو الخاصة بك باستخدام وحدة معالجة الرسومات المجانية.
نوصي باستخدام نماذج MobileNetv3 لمعظم حالات الاستخدام. تعد نماذج ResNet50 هي الإصدار الأكبر مع تحسينات صغيرة في الأداء. نموذجنا متاح في أطر الاستدلال المختلفة. راجع وثائق الاستدلال لمزيد من التعليمات.
نطاق | تحميل | ملحوظات |
باي تورش | rvm_mobilenetv3.pth rvm_resnet50.pth | الأوزان الرسمية لـ PyTorch. وثيقة |
TorchHub | لا شيء للتحميل. | أسهل طريقة لاستخدام نموذجنا في مشروع PyTorch الخاص بك. وثيقة |
تورتشسكريبت | rvm_mobilenetv3_fp32.torchscript rvm_mobilenetv3_fp16.torchscript rvm_resnet50_fp32.torchscript rvm_resnet50_fp16.torchscript | إذا كان الاستدلال على الهاتف المحمول، فكر في تصدير نماذج int8 الكمية بنفسك. وثيقة |
اونكس | rvm_mobilenetv3_fp32.onnx rvm_mobilenetv3_fp16.onnx rvm_resnet50_fp32.onnx rvm_resnet50_fp16.onnx | تم اختباره في وقت تشغيل ONNX مع الواجهات الخلفية لوحدة المعالجة المركزية (CPU) وCUDA. تستخدم النماذج المتوفرة opset 12.Doc, Exporter. |
TensorFlow | rvm_mobilenetv3_tf.zip rvm_resnet50_tf.zip | نموذج TensorFlow 2 المحفوظ. وثيقة |
TensorFlow.js | rvm_mobilenetv3_tfjs_int8.zip | قم بتشغيل النموذج على الويب. العرض التوضيحي، رمز البدء |
CoreML | rvm_mobilenetv3_1280x720_s0.375_fp16.mlmodel rvm_mobilenetv3_1280x720_s0.375_int8.mlmodel rvm_mobilenetv3_1920x1080_s0.25_fp16.mlmodel rvm_mobilenetv3_1920x1080_s0.25_int8.mlmodel | لا يدعم CoreML الدقة الديناميكية. يمكن تصدير القرارات الأخرى بنفسك. تتطلب النماذج iOS 13+. s يدل على downsample_ratio . وثيقة، مصدر |
جميع الموديلات متوفرة في Google Drive وBaidu Pan (الرمز: Gym7).
تثبيت التبعيات:
تثبيت النقطة -r متطلبات_inference.txt
تحميل النموذج:
استيراد الشعلة من النموذج import MattingNetworkmodel = MattingNetwork('mobilenetv3').eval().cuda() # أو "resnet50"model.load_state_dict(torch.load('rvm_mobilenetv3.pth'))
لتحويل مقاطع الفيديو، نقدم واجهة برمجة تطبيقات تحويل بسيطة:
من الاستدلال استيراد Convert_videoconvert_video(model, # يمكن أن يكون النموذج على أي جهاز (وحدة المعالجة المركزية أو cuda).input_source='input.mp4', # ملف فيديو أو دليل تسلسل الصور.output_type='video', # اختر "فيديو" " أو "png_sequence"output_composition='com.mp4', # مسار الملف إذا كان الفيديو؛ مسار الدليل إذا كان pngتسلسل.output_alpha="pha.mp4"، # [اختياري] إخراج تنبؤ ألفا الأولي.output_foreground="fgr.mp4"، # [اختياري] إخراج تنبؤ المقدمة الأولية.output_video_mbps=4, # إخراج الفيديو بالميغابايت في الثانية غير مطلوب لتسلسل png.downsample_ratio=None، # معلمة تشعبية لضبطها أو استخدامها لا شيء لـ auto.seq_chunk=12، # قم بمعالجة الإطارات n مرة واحدة للحصول على توازي أفضل.)
أو اكتب رمز الاستدلال الخاص بك:
من torch.utils.data استيراد DataLoaderمن torchvision.transforms استيراد ToTensorfrom inference_utils استيراد VideoReader، VideoWriterreader = VideoReader('input.mp4', تحويل=ToTensor())writer = VideoWriter('output.mp4',frame_rate=30)bgr = torch .الموتر([.47، 1، .6]).view(3, 1, 1).cuda() # خلفية خضراء.rec = [لا شيء] * 4 # الحالات المتكررة الأولية.downsample_ratio = 0.25 # اضبط بناءً على الفيديو الخاص بك. مع torch.no_grad(): لـ src في DataLoader(reader): # موتر RGB تم تطبيعه إلى 0 ~ 1.fgr, pha, *rec = model(src.cuda(), *rec, downsample_ratio) # قم بتدويرstates.com المتكررة = fgr * pha + bgr * (1 - pha) # مركب إلى خلفية خضراء. Writer.write(com) # إطار الكتابة.
النماذج وواجهة برمجة تطبيقات المحول متاحة أيضًا من خلال TorchHub.
# قم بتحميل model.model = torch.hub.load("PeterL1n/RobustVideoMatting"، "mobilenetv3") # أو "resnet50"# Converter API.convert_video = torch.hub.load("PeterL1n/RobustVideoMatting"، "converter")
يرجى الاطلاع على وثائق الاستدلال للحصول على تفاصيل حول المعلمة المفرطة downsample_ratio
والمزيد من وسائط المحول والاستخدام الأكثر تقدمًا.
يرجى الرجوع إلى وثائق التدريب لتدريب النموذج الخاص بك وتقييمه.
يتم قياس السرعة باستخدام inference_speed_test.py
كمرجع.
GPU | dType | عالي الدقة (1920 × 1080) | 4K (3840 × 2160) |
---|---|---|---|
ار تي اكس 3090 | FP16 | 172 إطارًا في الثانية | 154 إطارًا في الثانية |
آر تي إكس 2060 سوبر | FP16 | 134 إطارًا في الثانية | 108 إطارًا في الثانية |
جي تي اكس 1080 تي آي | FP32 | 104 إطارًا في الثانية | 74 إطارًا في الثانية |
ملاحظة 1: يستخدم HD downsample_ratio=0.25
، بينما يستخدم 4K downsample_ratio=0.125
. تستخدم جميع الاختبارات حجم الدفعة 1 وقطعة الإطار 1.
ملاحظة 2: وحدات معالجة الرسوميات قبل بنية Turing لا تدعم استدلال FP16، لذا تستخدم بطاقة GTX 1080 Ti FP32.
ملاحظة 3: نحن نقيس فقط إنتاجية الموتر. من المتوقع أن يكون البرنامج النصي لتحويل الفيديو المقدم في هذا الريبو أبطأ بكثير، لأنه لا يستخدم تشفير/فك تشفير فيديو الأجهزة ولا يتم إجراء نقل الموتر على سلاسل متوازية. إذا كنت مهتمًا بتنفيذ تشفير/فك تشفير فيديو الأجهزة في Python، فيرجى الرجوع إلى PyNvCodec.
شانتشوان لين
لينجي يانغ
عمران السليمي
سومياديب سينغوبتا
NCNN C++ Android (@FeiGeChuanShu)
lite.ai.toolkit (@DefTruth)
عرض ويب Gradio (@AK391)
عرض توضيحي لمحرك Unity باستخدام NatML (@natsuite)
عرض MNN C++ التجريبي (@DefTruth)
عرض TNN C++ التجريبي (@DefTruth)