英語 | 中文
具有時間指導的穩健高解析度影片摳圖論文的官方儲存庫。 RVM 專為強大的人體視訊摳圖而設計。與將幀作為獨立影像處理的現有神經模型不同,RVM 使用循環神經網路來處理具有時間記憶的影片。 RVM 可對任何視訊進行即時摳圖,無需額外輸入。它在 Nvidia GTX 1080 Ti GPU 上實現了4K 76FPS和HD 104FPS 。此專案由位元組跳動公司開發。
[2021 年 11 月 3 日] 修正了 train.py 中的錯誤。
[2021 年 9 月 16 日] 代碼根據 GPL-3.0 許可證重新發布。
[2021 年 8 月 25 日] 原始碼和預訓練模型已發布。
[2021 年 7 月 27 日] 論文被 WACV 2022 接收。
觀賞表演影片(YouTube、Bilibili),了解模特兒的表演。
影片中的所有片段均可在 Google 雲端硬碟中找到。
網路攝影機演示:在瀏覽器中即時運行模型。可視化重複狀態。
Colab 演示:使用免費 GPU 在您自己的影片上測試我們的模型。
對於大多數用例,我們推薦 MobileNetv3 型號。 ResNet50 模型是較大的變體,效能改進較小。我們的模型可用於各種推理框架。如需更多說明,請參閱推理文件。
框架 | 下載 | 筆記 |
火炬 | rvm_mobilenetv3.pth rvm_resnet50.pth | PyTorch 的官方權重。醫生 |
火炬中心 | 沒什麼好下載的。 | 在 PyTorch 專案中使用我們的模型的最簡單方法。醫生 |
TorchScript | rvm_mobilenetv3_fp32.torchscript rvm_mobilenetv3_fp16.torchscript rvm_resnet50_fp32.torch腳本 rvm_resnet50_fp16.torchscript | 如果在行動裝置上進行推理,請考慮自行匯出 int8 量化模型。醫生 |
奧恩克斯 | rvm_mobilenetv3_fp32.onnx rvm_mobilenetv3_fp16.onnx rvm_resnet50_fp32.onnx rvm_resnet50_fp16.onnx | 在具有 CPU 和 CUDA 後端的 ONNX 運行時上進行了測試。提供的模型使用 opset 12。 |
TensorFlow | rvm_mobilenetv3_tf.zip rvm_resnet50_tf.zip | TensorFlow 2 SavedModel。醫生 |
TensorFlow.js | rvm_mobilenetv3_tfjs_int8.zip | 在網路上運行模型。示範、入門程式碼 |
核心機器學習 | rvm_mobilenetv3_1280x720_s0.375_fp16.ml模型 rvm_mobilenetv3_1280x720_s0.375_int8.mlmodel rvm_mobilenetv3_1920x1080_s0.25_fp16.ml模型 rvm_mobilenetv3_1920x1080_s0.25_int8.mlmodel | CoreML 不支援動態解析。其他解析度可以自行導出。型號需要 iOS 13+。 s 表示downsample_ratio 。文件,出口商 |
所有模型均可在 Google Drive 和百度盤中取得(代碼:gym7)。
安裝依賴項:
pip install -r requests_inference.txt
載入模型:
import torchfrom model import MattingNetworkmodel = MattingNetwork('mobilenetv3').eval().cuda() # 或 "resnet50"model.load_state_dict(torch.load('rvm_mobilenetv3.pth'))
為了轉換視頻,我們提供了一個簡單的轉換 API:
from inference import Convert_videoconvert_video(model, # 模型,可以在任何裝置上(cpu 或 cuda)。input_source='input.mp4', # 視訊檔案或映像序列 directory.output_type='video', # 選擇「video」 " or "png_sequence"output_composition='com.mp4', # 如果是video,則為檔案路徑;如果是png,則為目錄路徑sequence.output_alpha="pha.mp4", # [可選] 輸出原始alpha Prediction.output_foreground ="fgr.mp4" , # [可選] 輸出原始前景預測.output_video_mbps=4, # 輸出視訊 mbps,對於 png 來說不需要。
或編寫自己的推理程式碼:
from torch。 .tensor([.47, 1, .6]).view(3, 1, 1).cuda() # 綠色背景.rec = [None] * 4 # 初始循環狀態.downsample_ratio = 0.25 # 根據您的情況進行調整video.with torch.no_grad():for src in DataLoader(reader): # RGB 張量歸一化為0 ~ 1.fgr, pha, *rec = model(src.cuda(), *rec, downsample_ratio ) # 循環循環states.com = fgr * pha + bgr * (1 - pha) # 合成為綠色背景。 writer.write(com) # 寫入幀。
模型和轉換器 API 也可透過 TorchHub 取得。
# 載入模型.model = torch.hub.load("PeterL1n/RobustVideoMatting", "mobilenetv3") # 或 "resnet50"# 轉換器 API.convert_video = torch.hub.load("PeterL1n/RobustVideoMatting", "converter")
有關downsample_ratio
超參數、更多轉換器參數和更高級用法的詳細信息,請參閱推理文件。
請參考訓練文件來訓練和評估您自己的模型。
使用inference_speed_test.py
測量速度以供參考。
圖形處理器 | 類型 | 高清 (1920x1080) | 4K (3840x2160) |
---|---|---|---|
RTX 3090 | FP16 | 172幀/秒 | 154幀/秒 |
RTX 2060 超級 | FP16 | 134幀/秒 | 108幀/秒 |
GTX 1080 鈦 | FP32 | 104幀/秒 | 74幀/秒 |
註1:高清使用downsample_ratio=0.25
,4K 使用downsample_ratio=0.125
。所有測試均使用批次大小 1 和幀塊 1。
註2:圖靈架構之前的GPU不支援FP16推理,因此GTX 1080 Ti使用FP32。
註3:我們只測量張量吞吐量。該儲存庫中提供的視訊轉換腳本預計會慢得多,因為它不使用硬體視訊編碼/解碼,並且沒有在並行線程上完成張量傳輸。如果您有興趣用Python實現硬體影片編解碼,請參考PyNvCodec。
林山川
楊林傑
伊姆蘭·薩利米
蘇米亞迪普·森古塔
NCNN C++ Android (@FeiGeChuanShu)
lite.ai.toolkit (@DefTruth)
Gradio 網路展示 (@AK391)
使用 NatML 的 Unity 引擎演示 (@natsuite)
MNN C++ 演示 (@DefTruth)
TNN C++ 演示 (@DefTruth)