NIPS 2017斯坦福賽題:模擬人類肌肉骨骼,「學會奔跑」
GIF/1.7M
原文來源:crowdai.org、GitHub
「機器人圈」編譯:嗯~阿童木呀
GIF/1.5M
概況
歡迎來到「學會奔跑」(Learning to Run),這是此屆NIPS比賽新添的議程NIPS 2017 Competition Track中所要面對的5個官方賽題之一,你需要開發一個控制器,使一個基於生理學的人體模型儘可能快地跨越一個複雜的障礙物。你將獲得一個人體肌骨骼模型和一個基於物理學的模擬環境,在其中,你可以合成物理上和生理學上都十分準確的運動。而潛在的障礙則包括諸如台階,或光滑的地板等外部障礙,以及諸如肌肉無力或運動噪音等內部障礙。在比賽中,分數評定標準是你在一定時間內穿過障礙物路線的距離。
我們的目標是:
用深度強化學習來解決醫學領域的問題。
在強化學習研究中推廣開源工具(物理模擬器、強化學習環境和比賽平台,所有這些都是開源的)。
在計算複雜、且具有隨機性和高維度動作空間的環境中鼓勵進行強化學習研究。
你的任務是創建一個函數f,它採用當前狀態觀察(一個41維向量),並以最大化獎勵的方式返回肌肉刺激作用(一個18維矢量)。而你的總獎勵是最後一次迭代後,骨盆在x軸上的位置減去使用韌帶力的懲罰。韌帶是防止你的關節過於彎曲的組織——過度使用這些組織將導致受傷,所以我們想避免這個問題。總獎勵中的懲罰等於韌帶在試驗中產生的力的總和除以1000。
點擊此處獲取挑戰中數據集部分的入門指南。如果你已經做好準備,就讓我們開啟此次挑戰的大門吧。
GIF/2.0M
旅程開啟
為了模擬物理和生物力學,我們使用OpenSim——一個用於肌肉骨骼模擬的生物力學物理環境。
需要Anaconda來運行我們的模擬環境。Anaconda將創建一個具有所有必需的庫的虛擬環境,以避免與操作系統中的庫有所衝突。你可以從這裡獲取Anaconda。而在接下來的文章中,我們假設Anaconda已成功安裝。
我們支持Windows、Linux和Mac OSX(均為64位)系統。如果想要安裝我們的模擬器,你首先需要使用OpenSim包創建一個conda環境。
在Windows系統上,打開命令提示符並鍵入:
conda create -n opensim-rl -c kidzik opensim git python=2.7 activate opensim-rl
在Linux / OSX系統上,運行:
conda create -n opensim-rl -c kidzik opensim git python=2.7 source activate opensim-rl
這些命令將在你的計算機上創建一個安裝了所有必要的模擬庫的虛擬環境。接下來,你需要安裝我們的python強化學習環境。類型(在所有平台上可用):
conda install -c conda-forge lapack git pip install git+https://github.com/stanfordnmbl/osim-rl.git
如果命令python -c "import opensim"運行順利,你的工作就完成了!否則,請參閱我們的常見問題部分。
請注意,source activate opensim-rl會激活Anaconda虛擬環境。每次打開新終端時,都需要重新鍵入。
基本用法
GIF/447K
要執行該模擬的200次迭代,請輸入python解釋器,並運行以下命令:
from osim.env import RunEnv env = RunEnv(visualize=True) observation = env.reset(difficulty = 0)for i in range(200): observation, reward, done, info = env.step(env.action_space.sample())
函數env.action_space.sample()返回肌肉活動的隨機向量,因此在本示例中,肌肉將會隨機激活(紅色表示活動肌肉,藍色為非活動肌肉)。顯然,使用這種技術,走不了太遠。
你的目標是構建一個控制器,即一個從狀態空間(當前位置,關節的速度和加速度)到動作空間(肌肉刺激)的函數,這將使得能夠在固定的時間內儘可能快地完成從建模到執行。假設你訓練了一個從觀察(模型的當前狀態)映射到動作(肌肉刺激)的神經網路,即你有一個函數action = my_controller(observation),然後
# ...total_reward = 0.0for i in range(200): # make a step given by the controller and record the state and the reward observation, reward, done, info = env.step(my_controller(observation)) total_reward += reward if done: break# Your reward isprint("Total reward %f" % total_reward)
其實有很多種方法可以用來構造函數my_controller(observation)。我們將通過使用keras-rl來演示如何使用DDPG(深度確定性策略梯度)演算法來實現它。如果你已經有了訓練強化學習模型的經驗,你可以跳過下一節轉到評估部分。
訓練你的第一個模型
下面我們介紹如何使用keras-rl訓練基本的控制器。首先你需要安裝一個額外的包:
conda install keras -c conda-forge pip install git+https://github.com/matthiasplappert/keras-rl.git git clone http://github.com/stanfordnmbl/osim-rl.git
keras-rl是一款可以與OpenAI兼容的優秀軟體包,可讓你快速構建你的第一個模型!
從這個存儲庫轉到scripts子目錄
cd osim-rl/scripts
一共有兩個腳本:
example.py用於使用DDPG演算法訓練(和測試)agent。
submit.py將結果提交到crowdAI.org
訓練
python example.py --visualize --train --model sample
測試
關於步態的示例(儘可能地走):
python example.py --visualize --test --model sample
試驗繼續
請注意,訓練該模型是需要一些時間的。你可以在線查找許多教程,框架和課程。我們特別推薦:
強化學習教學與課程:
加州大學伯克利分校Sergey Levine 講授的深度強化學習課程
在Karpathy的博客上的關於強化學習的介紹
Tambet Matiisen對於強化學習的介紹
David Silver的關於強化學習的課程
關於深度強化學習的全面資源列表
演算法的框架和實現:
RLLAB
modular_rl
keras-RL
OpenSim和生物力學:
OpenSim Documentation
肌肉模型
描述OpenSim的相關論文
描述Simbody(多體動力學引擎)的相關論文
當然,這份清單並不詳盡。如果你還發現有一些資源特別適合本教程,請告訴我們!
評估
你的任務是創建一個採用當前狀態observation(一個41維向量)的函數f,並以最大化獎勵的方式返回肌肉刺激action(一個18維矢量)。而你的總獎勵是最後一次迭代後,骨盆在x軸上的位置減去使用韌帶力的懲罰。韌帶是防止你的關節過於彎曲的組織——過度使用這些組織將導致受傷,所以我們想避免這個問題。總獎勵中的懲罰等於韌帶在試驗中產生的力的總和除以10000。
在每次迭代之後,你得到的獎勵等於骨盆x軸在這次迭代中的變化減去在該迭代中使用的韌帶力的大小。
你可以在本地機器上測試你的模型。而在最終提交的時候,你需要與遠程環境進行交互:crowdAI會向你發送當前的observation,而你需要發回在給定狀態下執行的操作。同時,還將在三個不同的難度級別下對你的成果進行評估。詳情請參閱環境的細節。
提交
假設你的控制器是已訓練的,並作為函數my_controller(observation)返回一個action,你可以通過與環境的交互來將它提交給crowdAI:
import opensim as osim
from osim.env import RunEnv
# Settings
crowdai_token = "[YOUR_CROWD_AI_TOKEN_HERE]"
client = Client(remote_base)
# Create environment
observation = client.env_create(crowdai_token)
# IMPLEMENTATION OF YOUR CONTROLLER
# my_controller = ... (for example the one trained in keras_rl)
while True: [observation, reward, done, info] = client.env_step(my_controller(observation), True)
print(observation)
if done: observation = client.env_reset()
if not observation:
breakclient.submit()
在[YOUR_CROWD_AI_TOKEN_HERE]上,你可以從crowdai.org網站上的個人資料頁面上放置你的相關資料。
請注意,在提交過程中,環境將重新啟動。由於環境是隨機的,你需要提交三個試驗——這樣我們就可以確保你的模型是具有魯棒性的。
規則
為了避免訓練環境出現過度擬合,前十名參賽者將按照要求在第二輪挑戰中重新提交他們的解決方案。第二輪的環境具有與以往相同的結構,但它們將使用不同的種子進行初始化。而最終排名將基於第二輪的結果。
附加規則:
你不能使用外部數據集(例如,人體走動的運動學)
組織者保留根據需要修改挑戰規則的權利。
環境細節
在創造環境的時候,你需要使用:
from osim.env import RunEnv env = RunEnv(visualize = True)
參數:
visualize——打開和關閉視覺效果器
RunEnv
的相關方法
reset(difficulty = 2, seed = None)
重新啟動具有給定difficulty和seed的環境。
difficulty = 0
代表沒有障礙物,difficulty = 1、2、3表示的是隨機定位的障礙物(固定在地面上的球)個數,值為2與值為1大致相同,但同時能夠增加腰部肌肉的力量(這個肌肉可以幫助彎曲模型中的髖關節)。肌肉力量設定為z * 100%,其中z為標準變數,平均值為1,標準偏差為0.1。
seed——代表的是隨機數生成器的起始種子。如果種子是None,則種子的種植計劃將持續。
你的解決方案將在difficulty = 2的環境中進行評定,其實你可以先在
difficulty = 0
時候訓練你的模型,然後再用較高的difficulty係數進行再訓練。
step(action)
進行一次模擬迭代。
action——對應於肌肉刺激的,範圍在[0,1]之間的長度為18的連續值列表。
該函數返回:
observation——對應於模型當前狀態的長度為41的實際值列表。變數將在「模型的物理學原理」一節中說明。
reward——在上一次迭代中獲得的獎勵。獎勵的計算方法為骨盆沿x軸位置的變化減去使用韌帶的懲罰。有關詳細信息,請參閱「模型的物理性原理」部分。
done——指示所進行的移動是否是環境中的最後一步。如果達到1000次迭代或骨盆高度低於0.65米,則會發生這種情況。
info——與OpenAI兼容,目前未使用。
模型的物理和生物力學原理
該模型在OpenSim中實現,而是它依賴於Simbody物理引擎的。有一點值得注意,鑒於最近在無模型強化學習方面取得的成功,在此次挑戰中,對於生物力學方面的專業知識的要求力度就沒那麼高了。
總而言之,agent是一個肌肉骨骼模型,包括每條腿的身體段,一個骨盆段,以及一個代表身體上半截的部分(軀幹、頭部、手臂)。這些身體段與關節相連(例如:膝蓋和臀部),而這些關節的運動由肌肉刺激所控制的。模型中的肌肉有著複雜的路徑(例如:肌肉可以穿過多個關節,且具有多餘的肌肉)。肌肉執行器本身也是高度非線性的。例如,有一個一階微分方程,將神經系統發送到肌肉(刺激點)的電信號與肌肉的激活點相關聯(這描述了肌肉在給定的當前力量生成能力下,實際能夠產生多少力量)。考慮到骨骼、關節和肌肉的肌肉骨骼結構,在模擬的每一步(對應於0.01秒),引擎設置為:
根據提供的step()函數在刺激度向量中計算肌肉的活動量
根據這些活動量來驅動肌肉收縮
計算由於肌肉活動量而產生的力矩
計算因接觸地面而產生的力
計算關節和身體運動而產生的速度和所處位置
根據關節的力、速度和位置生成一個新的狀態。
在每個動作中,以下18個肌肉處於運動狀態(每條腿各9個):
腿筋(hamstrings)
股二頭肌(biceps femoris)
臀大肌(gluteus maximus)
髂腰肌(iliopsoas)
股直肌(rectus femoris)
股(vastus)
腓腸肌(gastrocnemius)
比目魚肌(soleus)
脛前肌(tibialis anterior),動作向量以相同的順序對應於這些肌肉(首先是右腿的9個肌肉,然後是左腿的9個肌肉)。
觀察值包含41個值:
骨盆位置(旋轉,x,y)
骨盆速度(旋轉,x,y)
每個踝關節、膝蓋和髖關節的旋轉(6個值)
每個腳踝、膝蓋和髖部的角速度(6個值)
重心位置(2個值)
重心速度(2個值)
頭、骨盆、軀幹、左右腳趾、左右距骨的位置(x,y)(14個值)
左右腰強度:當difficulty
下一個障礙物:x距離骨盆的距離,中心相對於地面的y位置,半徑。
有關模擬框架的更多詳細信息,請參閱Delp和Scott L等人所著的 《OpenSim:創建和分析動態運動模擬的開源軟體》;而有關我們使用的肌肉模型的更多信息,請參閱Thelen和D.G. 所著的《調整肌肉力學模型參數以模擬老年人的肌肉動態收縮》。
常見問題
「I"m getting "version GLIBCXX_3.4.21 not defined in file libstdc++.so.6 with link time reference" error」
如果你遇到此錯誤:
ImportError: /opensim-rl/lib/python2.7/site-packages/opensim/libSimTKcommon.so.3.6: symbol _ZTVNSt7__cxx1119basic_istringstreamIcSt11char_traitsIcESaIcEEE, version GLIBCXX_3.4.21 not defined in file libstdc++.so.6 with link time reference
嘗試安裝libgcc
我可以使用除了python以外的語言嗎?
當然!你只需要設置自己的python grader並與之進行交互https://github.com/kidzik/osim-rl-grader。點擊此處查看更多詳細信息OpenAI http client。
你有docker container?
是的,你可以使用https://hub.docker.com/r/stanfordnmbl/opensim-rl/,需要注意的一點是,將顯示器連接到docker可能會很棘手,且它與系統是緊密相關的。然而,如果考慮到訓練你的模型的話,顯示器其實沒那麼必要——docker container可以方便地使用多台機器。
有些庫處於缺失狀態。運行環境需要什麼呢?
大多數庫默認存在於操作系統的主要分布中,或者由conda環境自動下載。然而,有時一些庫仍然缺失。在Linux系統下可以安裝最小的依賴集:
sudo apt install libquadmath0 libglu1-mesa libglu1-mesa-dev libsm6 libxi-dev libxmu-dev liblapack-dev
為什麼沒有能量約束?
關於此問題的答案請參閱https://github.com/stanfordnmbl/osim-rl/issues/34。
此次挑戰的重頭戲——獎勵政策
AWS
截止到2017年8月13日,排行榜前100名表演者每人將獲得價值300美元的AWS雲信用額。為了有資格獲得這些信用額度,你的電子郵件帳戶與你在AWS上使用的電子郵件帳戶必須相同,否則我們將無法對你的AWS賬戶進行信用記錄(沒有例外)。
獎品
頂級參賽者的獎品包括:
受邀在NIPS比賽書籍中發表文章。
獲得參加2018年1月29日至30日在瑞士EPFL舉行的第二次應用機器學習日(Applied Machine Learning Days)邀請函,旅行和住宿費用全免。
受邀在斯坦福大學進行研究演講,旅行和住宿費用全免。
報銷NIPS 2017所產生的旅行和住宿費用。
※布里斯托與牛津提出機器人「倫理黑匣子」!詳解EBB框架及實現
※孿生網路如何識別面部相似度?這有一篇PyTorch實例教程
※蘋果發布首篇基於GAN的文章,可提升合成圖像的真實感
※機器人闖蕩娛樂圈,「粉絲收割機」如何煉成?
※谷歌Keras之父「連發兩文」全面解析深度學習的局限性與未來
TAG:機器人圈 |
※通過外骨骼大幅提高人類的勞動效率 「鐵甲鋼拳」完成1000萬元Pre-A輪融資
※解決肌肉骨骼疼痛,醫療創企Hinge Health獲2600萬美元B輪融資
※骨骼圖案,Air Force 1』07 Skeleton QS 十月登場!
※美圖T9發布:人像美顏+骨骼識別,3399元起;朝鮮發最新智能機:「阿里郎171」 頂尖安卓
※Skeletonics Arrive日本外骨骼機器人:售價將近60萬元
※為操控者量身打造的外骨骼機器人 Skeletonics Arrive,售價 1,000 萬日元
※Varjo推出95度FOV AR透視組件;uSens推手部骨骼追蹤AR SDK
※大排三分鐘|與Nike比氣墊?外骨骼支撐、配內置氣囊的競技靴(TCX R-S2 Air Boots)
※揭秘1921年北京西城發現8具3米高的史前人類骨骼
※預售高於原價!超酷的透視骨骼 Air Force 1 QS 下周三發售
※預售高於原價!超酷的透視骨骼 Air Force 1 QS 下周二發售
※FDA批准的日本Cyberdyne康復型外骨骼HAL正式投入美國市場
※夜光外底!超酷的透視骨骼 Air Force 1 QS 將在萬聖節發售
※正經GIF囧圖:27億人里都找不出1個會踢球的?骨骼精奇的少女
※冷知識:國人是高等種族嗎?為什麼外國人206骨骼,國人204
※《Science》公布人類骨骼納米結構
※206塊骨骼:人類物質生命指數系統部署
※揭示:科學家在3,500歲的青銅時代骨骼中找到「完美的微笑」
※三星展示外骨骼機器人Samsung GEMS
※夜光外底!這雙「骨骼清奇」的 Air Force 1 QS 將在萬聖節發售