Google AI 自動編舞 Demo 與環境安裝筆記

Youngmi huang
10 min readDec 27, 2021

--

任務說明

這是一個 Innovation day 的題目,主題是:AI 自動編舞

每年到了這個時候是一年一度的尾牙(aka 年會),相信每年到這個時候,康樂團隊/公司菜鳥等級的工程師會需要出表演。於是我們在想,有沒有技術方法可以生成表演視頻呢?我們參考了 Google 的兩個 repo 作為 idea 的發想:

AI 自動編舞主要是結合兩段任務, Music to Motion && Motion to Real People,下面是兩份論文的主要框架,本文主要涵蓋第一部分 Music to Motion 的部分。

Part1 Music to Motion
Part2 Motion to Real People

先來看看 Demo 成果

SPMLMesh mode
SPML mode

使用數據與環境說明

1.Github Repo:AI Choreographer: Music Conditioned 3D Dance Generation with AIST++AIST++ API

2.數據集:AIST Dance Video Database (AIST Dance DB) ,這是 Google 已經標注好的數據。

  • 網站下載已經經過處理好的 TFRecord 格式,並新增 data folder,放到 mint/data 底下。

3.使用環境:Mac Pro M1 (arm64)

環境配置&實作紀錄

由於需要在一週內的業餘時間跑通,時間緊迫,技術細節可以自行參考上述Repo 裡的程式碼。本篇主要著重在 debug 紀錄。

Overall

  • Step1. Homebrew
  • Step2. Python3.8 +Tensorflow2.5 + Tensorflow add-ons + dependencies package..
  • Step3. git clone MINT repoAISTplusplus_api repo; related dataset ; SPML pre-trained model

1. Homebrew

需要安裝 openexr 與 CV 相關的 package,因此首先需要安裝 homebrew。

  • 安裝 m1 版本的 homebrew:官方的無效,會一直失敗。試了不同的方法,找到了以下有效解法:
# 有效地 homebrew 安裝來源
/bin/bash -c "$(curl -fsSL https://cdn.jsdelivr.net/gh/ineo6/homebrew-install/install.sh)"
# uninstall homebrew (如果安裝官方版本失敗)
/bin/zsh -c "$(curl -fsSL https://gitee.com/cunkai/HomebrewCN/raw/master/HomebrewUninstall.sh)"
# 安裝 opencv related package
brew install openexr
brew install zlib

2. Python + Tensorflow 環境配置

如果你也是 M1 且還沒下載 conda,需要先下載 miniforge,這是 M1 Mac 上使用 Anaconda 的暫時替代方案。我使用的環境是 Python3.8 + Tensorflow2.6。按照這一篇安裝即可:https://zhuanlan.zhihu.com/p/349409718。注意需把文中的 0.1a2替換成 0.1a3 ,需注意你下載的 TF 對應的版本號,例如我是下載帶 alpha3 後綴的版本。

# 創建虛擬環境
conda create -—name mintpy38 python=3.8
conda activate mint py38

3. Mint/AISTplusplus_api Repo

3.1 安裝部分

按照 ReadME 安裝即可,會需要一點時間,因為會連帶把一些 third-party 的 model 都一起下載下來。

# git clone 
git clone https://github.com/liruilong940607/mint --recursive
# install packages
conda install protobuf numpy
pip install tensorflow absl-py tensorflow-datasets librosa
-- sudo apt-get install libopenexr-dev # m1 找不到相關安裝方式; 若不處理數據直接使用 mint 裡面轉換好的 tfrecord 格式,可忽略pip install --upgrade OpenEXR
-- pip install tensorflow-graphics tensorflow-graphics-gpu # 這一段會報錯,後面說明
git clone https://github.com/arogozhnikov/einops /tmp/einops
cd /tmp/einops/ && pip install . -U

git clone https://github.com/google/aistplusplus_api /tmp/aistplusplus_api
cd /tmp/aistplusplus_api && pip install -r requirements.txt && pip install . -U

git clone若遇到連線逾時的問題,可參考以下解法:

# 需要重設 DNS 不然會有 github time-out error (連接逾時的問題)sudo vim /etc/hosts# 測試是否能夠連上 github 
ping raw.githubusercontent.com
ping github.com
從 ipaddress.com 上輸入 raw.githubusercontent.com 可以找到的 ip 位置

git clone 完之後在 mint 資料夾底下新增 checkpoints folder,然後把從 driver 上下載的 4 個檔案放進去:

如何安裝 tensorflow-graphics :重新安裝 Openexr 2.5.5版本(3.X版本似乎會不相容),然後 clone tensorflow-graphics 到本地,再進行安裝。

# 1.重新安裝 openexr
wget https://github.com/AcademySoftwareFoundation/openexr/archive/v2.5.5.tar.gz
tar -xvf v2.5.5.tar.gz
cd openexr-2.5.5/
mkdir build
cd build
cmake ../
make
make install
cd ../../ # pop back to starting directory.

# 2.安裝 TensorFlow Graphics
git clone https://github.com/tensorflow/graphics.git
cd graphics
python setup.py sdist bdist_wheel # Build pip pkg.
pip install --upgrade dist/*.whl

參考解法:https://githubmate.com/repo/tensorflow/graphics/issues/535

3.2 Run MINT code

官方的範例 proto code 會報錯:missing output directives

# compile protocols 應該改成
protoc --python_out=. ./mint/protos/*.proto

詳細解法與討論:https://github.com/protocolbuffers/protobuf/issues/5706

可以從第三步的 run training 開始跑,但因為時間急迫,總共 20000 iteration,嘗試用 CPU 跑了 200 iteration 花了將近 3 小時。在 fact_v5_deeper_t10_cm12.config 可以進行參數重置。

如果想快速產生結果,可以直接從第四步 run testing & evaluation 開始,不重新訓練,使用預訓練好的模型。產出的格式是 .npy 格式,會需要 reconstract 回 2D/3D,由於我們是想要跑通 Google 的這個 repo ,知道它錯最終的產出格式為何、極限在哪。

3.3 Run AISTplusplus_api code

此部分是模擬 AI 編舞後的產出,成果如前面 demo 的影片。

  • 使用的小藍人影片,是此 repo 底下的 SMPLMesh 模式
  • SMPL 全名是 Skinned Multi-Person Linear (SMPL) Model,人體動作捕捉模型。官網在此:https://smpl.is.tue.mpg.de/
  • 將下載好的 SMPL pre-trained 好的 model 放到 mint/data/smpl 底下,上述官網的下載連結需要先註冊,但註冊後的模型連結失效。有找到另一個百度網盤連結:SMPL model download (提取碼:4q1l)。並將 _m / _f 兩個檔案改成 SMPL_MALE.pkl& SMPL_FEMALE.pkl ,即可 load 成功。
百度雲盤包含的預訓練 SMPL 模型

下面程式碼改寫自 repo 當中的 demos/run_vis.py:

  • video_path: 到 https://aistdancedb.ongaaccel.jp/all_links/ 下載一支感興趣的影片。
  • 由於 AISTDataset 是已經經過標注好的 data,所以可以透過 API 的方式去拿到它的序列數據,如果是自己輸入的音樂/影片檔案,需要經由前面 MINT repo 去做 preprocessing & TFrecord 格式轉換。
  • 下面是產生第一支影片(mode = “SMPLMesh” ;小藍人),在第 86 & 93 行的地方從 index = 0 跑到 615,產生 300+張圖片,每一張圖片是動作的分解,可以以間隔 3–4 跑圖。上述影片我在前 200 張是從 0–200 間隔1跑圖,200–615以間隔4跑圖,最後用 imovie 剪成連貫動作的影片。
  • 下面是產生第二支影片(mode = ‘SMPL’ ; 真人+舞蹈標注)

後續研究議題/Lessons

  • Mac M1 下的 Tensorflow 模型如何運用 GPU 跑起來

由於看到評測 M1 可以使用 GPU 晶片,在 MINT 項目下,研究了一些方法之後,還是偵測不到 gpu 環境,猜測可能是環境配置or TF 版本存在潛在的 bug,留至後續有機會再行研究。

  • 各版本之間會有互斥的問題,有些 package 不支援 M1。若有 dependency 安裝錯誤,需要先解 dependency 版本的問題 (例如:tensorflow-graphics)。因此花了較多的時間耗費在環境建置的環節。
  • SMPL pre-trained model 的來源找了許久才找到可以使用的,並且居然是透過改名就可以 Loading 成功,實在是煉丹。

--

--

Youngmi huang

Participate in data science field, fascinated by something new. (Current: fraud risk modeling with ML/DL, Past: NLP)