強化學習練就18般武藝!伯克利開源DeepMimic
還記得今年4月伯克利BAIR實驗室釋出的那個會“18般武藝”的 DeepMimic 模型嗎?他們使用強化學習技術,用動作捕捉片段訓練模型,教會了AI智慧體完成24種動作,走路、跑步就不用說了,還包括翻跟斗、側翻跳、投球、高踢腿等等高能動作。
體會一下:
訓練每一種動作都需要動作捕捉和深度強化學習,而BAIR的研究者創造了一個全新的系統,教會agent完成複雜、逼真的動作任務。
作者Xue Bin Peng等人將這個系統命名為DeepMimic,比已有工作更進一步的是,他們的目標是在訓練一個agent完成特定任務的前提下,使它的動作更貼近真實。他們的論文發表在SIGGRAPH 2018。
除了人形機器人外,他們還訓練了Atlas機器人、暴龍、龍等形態的agent。
Atlas機器人
整個DeepMimic所需要的input分為三部分:一個被稱為Character的Agent模型;希望Agent學習的參考動作(reference motion);希望Agent完成的任務(task)所定義的reward function。
訓練之後會得到一個可以控制Agent同時滿足與參考動作相似且可以完成任務的控制器。
四種翻滾動作
現在,DeepMimic的程式碼、資料和訓練策略已經全部開源,感興趣的讀者不妨試試拿來訓練自己的“功夫小子”。
開原始碼
SIGGRAPH 2018論文:“DeepMimic: Example-Guided Deep Reinforcement Learning of Physics-Based Character Skills”的程式碼。這個框架使用強化學習來訓練一個模擬人形智慧體來模仿來自mocap資料的各種運動技能。
專案頁面:
https://xbpeng.github.io/projects/DeepMimic/index.html
C++:
● Bullet 2.87 (https://github.com/bulletphysics/bullet3/releases)
● Eigen (http://www.eigen.tuxfamily.org/index.php?title=Main_Page)
● OpenGL >= 3.2
● freeglut (http://freeglut.sourceforge.net/)
● glew (http://glew.sourceforge.net/)
Python:
● PyOpenGL (http://pyopengl.sourceforge.net/)
● Tensorflow (https://www.tensorflow.org/)
● MPI4Py (https://mpi4py.readthedocs.io/en/stable/install.html)
Misc:
● SWIG (http://www.swig.org/)
● MPI
● Windows: https://docs.microsoft.com/en-us/message-passing-interface/microsoft-mpi
● Linux: sudo apt install libopenmpi-dev
Build
模擬環境是用C++編寫的,python包裝器使用SWIG構建。要安裝python依賴項,請執行
pip install -r requirements.txt
請注意,必須在MPI4Py之前安裝MPI。
Windows
wrapper使用DeepMimicCore.sln構建。
1. 從配置管理器中選擇x64配置。
2. 在DeepMimicCore的專案屬性下,修改要包含的其他包含目錄
● Bullet源目錄
● Eigen包括目錄
● python包含目錄
3. 修改要指定的其他庫目錄
● Bullet lib目錄
● python lib目錄
使用Release_Swig配置構建DeepMimicCore專案,這應該在DeepMimicCore/. 中生成DeepMimicCore.py。
Linux
1. 通過指定以下內容修改DeepMimicCore中的Makefile,
● EIGEN_DIR:Eigen包含目錄
● BULLET_INC_DIR:Bullet源目錄
● PYTHON_INC:python包含目錄
● PYTHON_LIB:python lib目錄
2. 建立wrapper,
make python
這應該在DeepMimicCore/中生成DeepMimicCore.py
如何使用
一旦構建了python wrapper,就可以使用Tensorflow完全在python中完成訓練。DeepMimic.py執行用於檢視模擬的視覺化工具。使用mpi_run.py完成訓練,它使用MPI在多個程序之間並行訓練。
通過指定提供場景配置的引數檔案來執行DeepMimic.py。例如,
python DeepMimic.py --arg_file args/run_humanoid3d_spinkick_args.txt
將為“迴旋踢”執行一個預訓練的policy。同樣的,
python DeepMimic.py --arg_file args/kin_char_args.txt
將載入並播放mocap片段。
要訓練一個策略(policy),請通過指定引數檔案和工作程序數來執行mpi_run.py。例如,
python mpi_run.py --arg_file args/train_humanoid3d_spinkick_args.txt --num_workers 4
將訓練一個策略,使用4個workers進行“迴旋踢”。作為訓練方案,它會定期列印統計資料並將其記錄到output/,以及最新策略的.ckpt。通常需要大約6千萬個樣本來訓練一個策略,而訓練16個workers需要一天時間。16個workers可能是框架所能支援的最大workers數量。
args中已經為不同的技能提供了許多引數檔案。train_ [something] _args.txt檔案是為mpi_run.py設定的,用於訓練策略,併為DeepMimic.py設定run_ [something] _args.txt檔案以執行其中一個預訓練策略。要執行自己的策略,請使用run_ [something] _args.txt的檔案之一,並指定要使用--model_file執行的策略。確保引用的動作--motion_file對應於策略所訓練的動作,否則策略將無法正常執行。
介面
● 右上角的圖顯示了價值函式的預測
● 單擊右鍵並拖動將平移相機
● 單擊左鍵並拖動將對特定位置處的角色施加力
● 滾輪會放大/縮小
● 按“r”將重置該episode
● 按'l'將重新載入引數檔案並重建所有內容
● 按'x'將使用隨機的框投向角色
● 按空格將暫停/恢復模擬
● 按’>'將逐步執行模擬
Mocap Data
Mocap clips位於data/motions/中。要播放剪輯,首先修改args/kin_char_args.txt並指定要使用的檔案--motion_file,然後執行
python DeepMimic.py --arg_file args/kin_char_args.txt
動作檔案遵循JSON格式。“Loop”欄位指定運動是否是迴圈的。“wrap”指定一個迴圈運動,該迴圈將在結束時回到起始點,而“none”指定一旦運動結束就會停止的非迴圈運動。“Frames”列表中的每個向量指定運動中的關鍵幀。每個框架具有以下格式:
位置以米為單位指定,球面關節的3D旋轉指定為四元數(w,x,y,z),轉動關節(例如膝關節和肘關節)的1維旋轉用弧度的標量表示。根位置和旋轉在世界座標中,但所有其他關節旋轉都在關節的區域性座標中。要使用你自己的動作剪輯,請將其轉換為類似格式的JSON檔案。