Bahasa Inggris | tidak
Repositori resmi untuk makalah Matting Video Resolusi Tinggi yang Kuat dengan Panduan Temporal. RVM dirancang khusus untuk pembuatan video manusia yang tangguh. Tidak seperti model saraf yang ada yang memproses bingkai sebagai gambar independen, RVM menggunakan jaringan saraf berulang untuk memproses video dengan memori temporal. RVM dapat melakukan matting secara real-time pada video apa pun tanpa input tambahan. Ini mencapai 4K 76FPS dan HD 104FPS pada GPU Nvidia GTX 1080 Ti. Proyek ini dikembangkan di ByteDance Inc.
[03 Nov 2021] Memperbaiki bug di train.py.
[16 September 2021] Kode dirilis ulang di bawah lisensi GPL-3.0.
[25 Agustus 2021] Kode sumber dan model terlatih dipublikasikan.
[27 Juli 2021] Makalah diterima oleh WACV 2022.
Tonton video showreel (YouTube, Bilibili) untuk melihat penampilan sang model.
Semua cuplikan dalam video tersedia di Google Drive.
Demo Webcam: Jalankan model secara langsung di browser Anda. Visualisasikan keadaan berulang.
Demo Colab: Uji model kami di video Anda sendiri dengan GPU gratis.
Kami merekomendasikan model MobileNetv3 untuk sebagian besar kasus penggunaan. Model ResNet50 adalah varian yang lebih besar dengan sedikit peningkatan kinerja. Model kami tersedia di berbagai kerangka inferensi. Lihat dokumentasi inferensi untuk instruksi lebih lanjut.
Kerangka | Unduh | Catatan |
PyTorch | rvm_mobilenetv3.pth rvm_resnet50.pth | Bobot resmi untuk PyTorch. Dokter |
OborHub | Tidak ada yang perlu diunduh. | Cara termudah untuk menggunakan model kami di proyek PyTorch Anda. Dokter |
skrip obor | rvm_mobilenetv3_fp32.torchscript rvm_mobilenetv3_fp16.torchscript rvm_resnet50_fp32.skrip obor rvm_resnet50_fp16.skrip obor | Jika inferensi dilakukan di perangkat seluler, pertimbangkan untuk mengekspor sendiri model terkuantisasi int8. Dokter |
ONNX | rvm_mobilenetv3_fp32.onnx rvm_mobilenetv3_fp16.onnx rvm_resnet50_fp32.onnx rvm_resnet50_fp16.onnx | Diuji pada ONNX Runtime dengan CPU dan backend CUDA. Model yang disediakan menggunakan opset 12. Doc, Eksportir. |
Aliran Tensor | rvm_mobilenetv3_tf.zip rvm_resnet50_tf.zip | TensorFlow 2 Model Tersimpan. Dokter |
TensorFlow.js | rvm_mobilenetv3_tfjs_int8.zip | Jalankan model di web. Demo, Kode Pemula |
intiML | 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 tidak mendukung resolusi dinamis. Resolusi lain dapat diekspor sendiri. Model memerlukan iOS 13+. s menunjukkan downsample_ratio . Dok, Eksportir |
Semua model tersedia di Google Drive dan Baidu Pan (kode: gym7).
Instal dependensi:
instalasi pip -r persyaratan_inferensi.txt
Muat model:
impor torchfrom model import MattingNetworkmodel = MattingNetwork('mobilenetv3').eval().cuda() # atau "resnet50"model.load_state_dict(torch.load('rvm_mobilenetv3.pth'))
Untuk mengonversi video, kami menyediakan API konversi sederhana:
dari inferensi import convert_videoconvert_video(model, # Model, bisa di perangkat apa pun (cpu atau cuda).input_source='input.mp4', # File video atau direktori urutan gambar.output_type='video', # Pilih "video " atau "png_sequence"output_composition= 'com.mp4', # Jalur file jika video; jalur direktori jika png sequence.output_alpha="pha.mp4", # [Opsional] Keluarkan prediksi alfa mentah.output_foreground="fgr.mp4", # [Opsional] Keluarkan prediksi latar depan mentah.output_video_mbps=4, # Output video mbps. tidak diperlukan untuk urutan png.downsample_ratio=Tidak ada, # Hyperparameter untuk sesuaikan atau gunakan None untuk auto.seq_chunk=12, # Proses n frame sekaligus untuk paralelisme yang lebih baik.)
Atau tulis kode inferensi Anda sendiri:
dari torch.utils.data import DataLoaderfrom torchvision.transforms import ToTensorfrom inference_utils import VideoReader, VideoWriterreader = VideoReader('input.mp4', transform=ToTensor())writer = VideoWriter('output.mp4', frame_rate=30)bgr = torch .tensor([.47, 1, .6]).tampilan(3, 1, 1).cuda() # Latar belakang hijau.rec = [Tidak Ada] * 4 # Status berulang awal.downsample_ratio = 0,25 # Sesuaikan berdasarkan video Anda.dengan torch.no_grad():untuk src di DataLoader(pembaca): # Tensor RGB dinormalisasi ke 0 ~ 1.fgr, pha, *rec = model(src.cuda(), *rec, downsample_ratio) # Siklus berulang States.com = fgr * pha + bgr * (1 - pha) # Komposit dengan latar belakang hijau. writer.write(com) #Tulis bingkai.
Model dan API konverter juga tersedia melalui TorchHub.
# Muat model.model = torch.hub.load("PeterL1n/RobustVideoMatting", "mobilenetv3") # atau "resnet50"# Converter API.convert_video = torch.hub.load("PeterL1n/RobustVideoMatting", "converter")
Silakan lihat dokumentasi inferensi untuk detail tentang hyperparameter downsample_ratio
, argumen konverter selengkapnya, dan penggunaan lebih lanjut.
Silakan merujuk ke dokumentasi pelatihan untuk melatih dan mengevaluasi model Anda sendiri.
Kecepatan diukur dengan inference_speed_test.py
sebagai referensi.
GPU | dJenis | HD (1920x1080) | 4K (3840x2160) |
---|---|---|---|
RTX3090 | FP16 | 172FPS | 154FPS |
RTX 2060 Super | FP16 | 134FPS | 108FPS |
GTX 1080 Ti | FP32 | 104FPS | 74FPS |
Catatan 1: HD menggunakan downsample_ratio=0.25
, 4K menggunakan downsample_ratio=0.125
. Semua pengujian menggunakan ukuran batch 1 dan frame chunk 1.
Catatan 2: GPU sebelum arsitektur Turing tidak mendukung inferensi FP16, jadi GTX 1080 Ti menggunakan FP32.
Catatan 3: Kami hanya mengukur throughput tensor. Skrip konversi video yang disediakan dalam repo ini diperkirakan jauh lebih lambat, karena tidak menggunakan pengkodean/dekode video perangkat keras dan tidak melakukan transfer tensor pada thread paralel. Jika Anda tertarik untuk mengimplementasikan pengkodean/dekode video perangkat keras dengan Python, silakan merujuk ke PyNvCodec.
Shanchuan Lin
Linjie Yang
Imran Saleemi
Soumyadip Sengupta
NCNN C++ Android (@FeiGeChuanShu)
lite.ai.toolkit (@DefTruth)
Demo Web Gradio (@AK391)
Demo Unity Engine dengan NatML (@natsuite)
Demo MNN C++ (@DefTruth)
Demo TNN C++ (@DefTruth)