3D模型學會了「唱、跳、Rap、籃球」,GitHub網友也沉迷雞你太美

機器之心報道

繼 B 站之後,GitHub 網友也開始沉迷「雞你太美」,讓 3D 姿態也學會了「唱、跳、Rap、籃球」,而且動作準確度和連貫性似乎一點也不輸練習時長兩年半的練習生。

3D模型學會了「唱、跳、Rap、籃球」,GitHub網友也沉迷雞你太美


看了這段 demo 之後,網友戲稱,「你的律師函已經在路上了」。

這段「看到停不下來」的 demo 來自一位用戶名為「zh-plus」的 GitHub 網友。他用 CVPR 2019 接收論文中的一項技術實現了這種效果。

實現地址:https://github.com/zh-plus/video-to-pose3D

這項技術是 3D 人體姿態預測的一種,項目作者利用該技術從原版視頻中預測出了人物的 3D 姿態,無需昂貴的拍攝設備,也不需要在人物身體的關鍵點上貼標籤。

該技術的論文作者是來自蘇黎世聯邦理工學院、Facebook 和谷歌大腦的團隊,相關論文《3D human pose estimation in video with temporal convolutions and semi-supervised training》發表在 2019 年的 CVPR 會議上。

在該論文中,研究者提出了一個用於 3D 人體姿態預測的全卷積模型,只需基於 2D 的關鍵點執行時間卷積,就可以對視頻中的人體實現精準的 3D 姿態預測。

此外,他們還介紹了一種簡單、高效的半監督訓練方法——反向投影(back-projection),可以利用沒有標註的視頻數據。具體步驟可以概括為:為沒有標籤的視頻預測 2D 關鍵點→預測 3D 姿態→將其反向投影到輸入的 2D 關鍵點上。

在有監督的情況下,這個全卷積模型在 Human3.6M 數據集上將誤差降低了 11%,在 HumanEva-I 數據集上也實現了很大的改進。在標註數據稀缺的半監督情況下,這種反向投影的方法也優於之前的 SOTA 結果。

論文地址:https://arxiv.org/abs/1811.11742

當然,除了唱、跳、Rap 和籃球,你也可以自己動手做出各種「專業選手」的 3D 模型。

3D模型學會了「唱、跳、Rap、籃球」,GitHub網友也沉迷雞你太美

拳擊。

3D模型學會了「唱、跳、Rap、籃球」,GitHub網友也沉迷雞你太美

打籃球。

3D模型學會了「唱、跳、Rap、籃球」,GitHub網友也沉迷雞你太美

優雅的「冰場公主」。

模型概括

研究者提出的這一方法聚焦於視頻中的 3D 人體姿態預測。他們以 SOTA 方法為基礎,將問題定義為 2D 關鍵點檢測和 3D 姿勢估計。雖然把問題分開可以降低任務的難度,但由於多個 3D 姿態可以映射到一個 2D 關鍵點上,因此處理起來依然是模糊的。

之前的研究通過利用循環神經網絡(RNN)建模時間信息來處理這種模稜兩可的問題,但卷積網絡在建模任務中的時間信息方面已經非常成功。卷積模型支持多幀的並行處理,而這是循環網絡所做不到的。

在這項研究工作中,研究者提出了一個全卷積架構(fully convolutional architecture)。該架構可以在 2D 關鍵點上執行時間卷積,以實現精準的視頻 3D 姿態預測,如下圖 1 所示。


3D模型學會了「唱、跳、Rap、籃球」,GitHub網友也沉迷雞你太美

圖 1:研究者提出的時間卷積模型以 2D 關鍵點序列(下)為輸入,生成 3D 姿態預測(上)。

這一方法兼容所有 2D 關鍵點檢測器,並且可以通過擴大卷積來高效處理大型語境。與依賴 RNN 的方法相比,該模型非常準確、簡潔和高效,在計算複雜度和參數量上都是如此。

有了這種準確、高效的架構,研究者將目光轉向缺乏標註數據的領域,引入了一個利用無標註視頻數據進行半監督訓練的新範式。

缺乏標註數據的領域對於需要大量標記訓練數據的神經網絡模型尤其具有挑戰性,而收集用於 3D 人體姿態估計的標記需要昂貴的動作捕捉設置和冗長的記錄 session。

本文研究者所提方法的靈感來自於無監督機器翻譯的循環一致性(cycle consistency),在此過程中,中間語言和原語言之間的雙向翻譯應接近於恆等函數。

具體來說,研究者先使用 2D 關鍵點檢測器來預測一個無標籤視頻的 2D 關鍵點,然後預測 3D 姿態,最後將其映射回 2D 空間。

與單幀基線相比,該模型可以利用時間來解決模糊問題並減少抖動/噪聲。與現有的 SOTA 方法相比,該方法在監督和半監督設置下都超越了之前表現最好的模型。研究者提出的監督模型優於其他模型,即使後者利用額外的標記數據進行訓練。

3D 姿態預測的實現

現在,就讓我們動動手指,將視頻中的人物一鍵轉為 3D 姿態。

你可以同時指定「--evaluate」和「--render」來渲染視頻。這個腳本會生成一個可視化的效果,包含三個可視窗口:2D 關鍵點輸入、3D 重建和 3D ground truth。注意,當你指定視頻時,2D 檢測仍然會通過既定參數從數據集中加載。你既可以選擇正確的視頻,也可以可視化未標註的視頻,這樣的話 ground truth 就不會顯示了。

下面是一份可視化相關的命令行參數列表:

  • --viz-subject: 渲染對象, e.g. S1;
  • --viz-action: 渲染動作, e.g. Walking 或者 Walking 1;
  • --viz-camera: 要渲染的攝像機, 對於 Human3.6M 來說從 0 到 3,對於 HumanEva 來說從 0 到 2。默認值: 0;
  • --viz-video: 需要呈現的 2D 視頻路徑。如果指定,該腳本將在視頻頂部呈現骨架疊加。如果未指定,則將呈現黑色背景(但仍將顯示 2D 檢測);
  • --viz-skip: 跳過指定視頻的前 N 幀(在 HumanEva 時有意義)默認值: 0;
  • --viz-output: 輸出文件名 ( .mp4 或者.gif 格式);
  • --viz-bitrate: 設置 MP4 視頻的比特率。默認值: 3000;
  • --viz-no-ground-truth: 默認情況下,視頻包含三個可視圖層:2D 動作輸入,3D 重建和 3Dground truth。這裡的意思是刪除最後一個;
  • --viz-limit: 僅渲染前 N 幀。默認情況下,將渲染所有幀;
  • --viz-downsample: 按指定因子對視頻進行下采樣,即降低幀頻。例如,如果設置為 2,則幀速率從 50 FPS 降低到 25 FPS。默認值:1(不進行下采樣);
  • --viz-size: 輸出分辨率乘數。較高=較大圖像。默認值:5;
  • --viz-export: 將 3D 節點座標(在攝影空間中)導出到指定的 NumPy 存檔。

示例 1:

python run.py -k cpn_ft_h36m_dbb -arc 3,3,3,3,3 -c checkpoint --evaluate pretrained_h36m_cpn.bin --render --viz-subject S11 --viz-action Walking --viz-camera 0 --viz-video "/path/to/videos/S11/Videos/Walking.54138969.mp4" --viz-output output.gif --viz-size 3 --viz-downsample 2 --viz-limit 60


3D模型學會了「唱、跳、Rap、籃球」,GitHub網友也沉迷雞你太美

從攝像頭 0 中生成 Walking(走路)的可視化圖,並將前幾幀(first frames)輸出到幀率為 25 FPS 的 GIF 動畫中。如果你刪除--viz-video 參數,則人體動作線條將呈現在空白背景上。

Human3.6M 數據集上的可視化效果圖可以立即實現,但 HumanEva 數據集上的可視化相對較為困難,因為必須對輸入的原始視頻進行手動分割。此外,無效幀和軟件同步也使可視化變得更復雜。儘管如此,通過選取驗證序列中的數據塊 0 以及利用--viz-skip 丟棄前幾幀,你依然可以獲得良好的可視化效果。

如果想要了解可以跳過的幀數,請查看 data/prepare_data_humaneva.py 上的 sync_data。

示例 2:

python run.py -d humaneva15 -k detectron_pt_coco -str Train/S1,Train/S2,Train/S3 -ste Validate/S1,Validate/S2,Validate/S3 -c checkpoint --evaluate pretrained_humaneva15_detectron.bin --render --viz-subject Validate/S2 --viz-action "Walking 1 chunk0" --viz-camera 0 --viz-output output_he.gif --viz-size 3 --viz-downsample 2 --viz-video "/path/to/videos/S2/Walking_1_(C1).avi" --viz-skip 115 --viz-limit 60


3D模型學會了「唱、跳、Rap、籃球」,GitHub網友也沉迷雞你太美

未標註視頻的可視化更加容易,因為這些視頻不需要與 ground truth 保持一致。在這種情況下,即使對於 HumanEva 數據集而言,可視化也是可以立即實現的。

示例 3:

python run.py -d humaneva15 -k detectron_pt_coco -str Train/S1,Train/S2,Train/S3 -ste Validate/S1,Validate/S2,Validate/S3 -c checkpoint --evaluate pretrained_humaneva15_detectron.bin --render --viz-subject Unlabeled/S4 --viz-action "Box 2" --viz-camera 0 --viz-output output_he.gif --viz-size 3 --viz-downsample 2 --viz-video "/path/to/videos/S4/Box_2_(C1).avi" --viz-limit 60


更多實現細節可以參見該論文的 GitHub 項目。

項目地址:https://github.com/facebookresearch/VideoPose3D


分享到:


相關文章: