MachineLearning in UNITY(windows環境下)
本文分享如何安裝機器學習代理工具(Unity Machine Learning Agents),並通過官方範例3D小球,瞭解整個環境的安裝過程。
在本文中使用的案例是3D平衡小球(3D Balance Ball)的執行環境。該環境包含多個平板和小球。這些平板可以自己做縱向及橫向旋轉,來保持小球不掉離平板。每個平板都是一個代理,通過保持小球在平板上的時間得到獎勵;掉出平板,則會扣除獎勵。這個訓練過程的目的在於讓平半學習永遠不讓球落下。
架在Windows 10平臺上:
本教學需要安裝的軟體清單如下: Nvidia CUDA toolkit - CUDA 8.0.61 CUDNN檔案 - CUDA 8.0使用的v6.0版 安裝Anaconda會安裝以下套件:
- Python
- Jupyter
- TensorFlow
- Matplotlib
- numpy
- pillow
- docopt Unity範例專案
設定Unity機器學習代理工具和TensorFlow環境(Windows 10)
說明 本章節針對Windows 10平臺。 請注意軟體所對應的版本,如果版本不同可能會導致安裝不成功。 下載和安裝軟體前關閉Unity和Visual Studio,並確認你的Windows 10電腦採用NVIDIA顯示卡,因為本文所使用的GPU加速工具包是NVIDIA的CUDA。
安裝CUDA工具 首先需要下載CUDA 8.0.61。請到CUDA下載頁面,選擇下載CUDA Toolkit 8.0 GA2
接下來需要下載CUDA深度神經網路庫(CUDA Deep Neural Network),簡稱CUDNN。它是專門針對深度神經網路框架設計的一套GPU計算加速方案。全世界的深度學習研究者和框架開發者都使用CUDNN來增強GPU計算效能。這讓他們能專注於訓練神經網路、開發軟體應用,不用在低階別的GPU效能調整上耗費時間。CUDNN支援當下流行的各種深度學習框架,包括Caffe2、MATLAB、Microsoft Cognitive Toolkit、TensorFlow和PyTorch等。
CUDNN下載頁面,選擇CUDA 8.0使用的v6.0版本下載。當下載CUDNN時,Nvidia 會要求你登陸,可以註冊一個免費賬號登陸。
下載完成後解壓縮會有三個目錄(bin、include和lib資料夾),確定CUDA工具安裝完成後,把這三個目錄複製到CUDA 8.0工具資料夾。
一般來說安裝CUDA時的預設路徑是: C:\Program Files\NVIDIA GPU Computing Toolkit\cuda\v8 設定環境變數和路徑 接下來需要幫Windows系統增加環境變數和路徑設定。
1.控制面板->系統和安全->系統 2.進入高階系統設定,點選環境變數 3.進入環境變數 可新增路徑 4.點選新建按鈕 加一個CUDA_HOME,數值設為: C:\Program Files\NVIDIA GPU Computing Toolkit\cuda\v8.0 選擇確定。 編輯路徑Path
先找到Path,點選編輯,會出現系統路徑快捷表。 新增兩個系統路徑。 C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v8.0\lib\x64 和 C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v8.0\extras\CUPTI\libx64 最上面兩個是安裝CUDA時產生的不要去動它 新加的路徑會在最下面,注意不要打錯字了
安裝Anaconda 為了要安裝Python和Jpyther套件,為了避免繁鎖的安裝流程,建議採用Anaconda來安裝會比較容易。 到Anaconda的下載頁面,下載Python 3.6,選擇64位版本。下載完成後安裝Anaconda,按照系統下一步到完成安裝。 安裝完成後你應該可以載快速選擇單找到Anaconda Prompt,開啟它。 接下來所有的Command line指令都是在Anaconda Prompt執行。
下一步,我們要建立使用Python 3.5.2的執行環境。在Anaconda Prompt中輸入指令來建立環境:
conda create -n tensorflow-gpu python=3.5.2
然後輸入指令啟動剛剛建立的環境:
activate tensorflow-gpu
最後用這個指令安裝TensorFlow:
pip install tensorflow-gpu
當安裝完成後,你就可以輸入指令啟動Python來測試剛剛的流程是否成功。指令為:
python
然後輸入指令測試:import tensorflow as tf
下載Unity的範例專案
接下來要瞎咋本次的3D小球專案,你需要從Github頁面下載專案,可以直接下載並解壓縮到任意位置,或是通過Github Desktop直接克隆一份到你的電腦上。為了讓工作輕鬆建議不要太深的目錄,例如D:\ml\就好。
接下來從選單裡面找到Anaconda Prompt。用右鍵點選Anaconda Prompt,選擇更多->以系統管理員身份執行 剛剛解壓縮後的unity-3D小球專案目錄下有一個python目錄。從這個Anaconda prompt視窗把目錄切換到剛剛下載好的ml-agents專案的python目錄位置。
例如:我把ml資料夾放在D:\ml\ml-agents\,那麼我們要把目錄切換到D:\ml\ml-agents\python。執行:
cd d:\ml\ml-agents\python
然後要安裝html5lib庫,輸入指令:
conda install --force html5lib
然後輸入:
pip install . 注意:install後面有個.
安裝專案所需的Python庫和工具 以下說明兩個安裝方法,可以二選一: 方法一:
安裝Jupyter Notebook
Jupyter Notebook是一個開源的Web應用程式,可以讓你建立和共用包含即時程式碼,方程式,視覺化和說明文字的文件。 用途包括:資料清理與轉換,數值類比,統計建模,機器學習等等。
輸入
pip3 install jupyter
安裝Jupyter Notebook
安裝NumPy
NumPy是Python語言的開源數學擴充套件庫。支援高階大量的維度的陣列與矩陣運算,此外也針對陣列運算提供大量的數學函式程式庫。由於NumPy剛剛宣佈不再支援Python 2,所以建議直接使用Python 3。
輸入
pip3 install numpy
安裝 NumPy。
安裝Pillow
Pillow是PIL(Python Imaging Library,Python影象庫)的一個分支,提供了對於開發者許多比較友好和直觀的功能。
輸入
pip3 install pillow
安裝 Pillow。
安裝docopt
docopt是Python的命令列引數解析器,其基於多年來用於描述程式介面的說明諮詢而設計的,因此可以給開發者清晰的輸出體驗。
輸入
pip3 install docopt
安裝 docopt 。
安裝TensorFlow
TensorFlow是現今非常流行的使用資料流程圖進行數值計算的開源軟體庫。圖中的節點代表數學運算, 而圖中的邊則代表在這些節點之間傳送的多維陣列。這種靈活的架構可以讓你使用一個API將計算工作部署到裝置,伺服器或者移動裝置中的一個或多個CPU或GPU。TensorFlow 最初是由Google 機器智慧研究部門的 Google Brain 團隊中的研究人員和工程師開發的,用於進行機器學習和深度神經網路的研究,但它是一個非常基礎的系統,因此也可以應用於眾多其他領域。
輸入
pip3 install tensorflow
安裝 TensorFlow。 方法二: Python庫快捷安裝 一步步通過pip3安裝這些庫有些麻煩,如果你已經安裝了Python3,並且克隆了Github上完整的ml-agents專案。 你可以開啟Terminal,把目錄該島ml-agents專案下python的目錄:
cd /Users/(你的名字)/UnityMachineLearningAgents/python 輸入pip3 install. 安裝以上所有的Python庫和工具。
完成安裝 如果你按照上面兩種方法順利操作的話,接下來我們就可以到unity裡面設定要學習的內容 確保你已經下載Unity載github上ml-agents專案 確保使用Unity2017.1或以上版本
設定Unity環境 啟動unity,開啟剛剛下載資料李的unity-environment目錄 載啟動視窗中,選擇open,並載彈出的視窗中,選擇unity-environment,點選Open
注意:如果彈出警告“Opening Project in Non-Matching Editor Installation",請自動忽略。
開啟專案後,載project視窗,到資料夾Assets/ML-Agents/Examples/3DBall/,按兩下Scene的示例場景。 點選功能Edit -> Project Settings -> Player,選中Resolution and Presentation裡的Run in Background屬性。 將Resolution and Presentation中的Display Resolution Dialog屬性,選擇Disabled。 在左邊的場景hierarchy 視察中,展開Ball3DAcademy遊戲物件,並選中它的子物件Brain3DBrain,在右邊的Inspector中檢視屬性。
將物件的Type of Brain設定為External。 (注:設為External是為了在外部做訓練,未來把訓練資料放回專案後,設回Internal就可以在Unity裡面看到訓練後的行為) 點選File -> Build Settings 選擇目標平臺。選項勾選development build來記錄除錯諮詢。點build開始打包。 注意:存檔路徑請之間直接指定ml-agents底下的python目錄,給予的檔名也要記住,待會兒要填入一樣的檔名。 用強化學習訓練大腦
如果上面已經跑過Jupyter安裝流程,你可以: 開啟Anaconda Prompt 切換目錄到專案的python目錄
cd d:\ml\ml-agents\python
執行jupyter notebook
開啟瀏覽器localhost:8888就會看到jupyter notebook在python的位置被開啟(
用PPO訓練模型 下一步我們訓練代理,讓它在平臺上平衡小球的位置,我們會使用一個叫做近端策略優化(Proximal Policy Optimization),簡稱PPO的強化學習演演算法。這個演算法經過實驗,證明是十分安全、高效且比其他強化學習演演算法實用性更強的,所以我們選擇這個演演算法來作為Unity機器學習代理的範例演演算法。
如果想要了解更多關於近端策略優化演演算法的諮詢,請參考OpenAI釋出的文章:
現在請按照下面步驟操作:
在Jupyter中開啟PPO.ipynb 修改env_name的值 = 剛剛打包的專案檔名字 run_path目前設定為ppo,依需求可以改到別的目錄也可以不改
(可選)針對本專案例如果你想要快點訓練完成,可以多調整以下設定: max_steps = 5000 buffer_size = 5000 batch_size = 512 注意,訓練方法和ml-agent v0.2不同。v0.2使用Jupyter notebook執行ppo.ipynb檔案。但是v0.3改為使用命令列的方法。
我們回到Anacoda Prompt,輸入以下命令:
python learn.py 3dball --run-id=test --train
觀察訓練過程 如果順利的話,你的機器人應該已經開始訓練。要更仔細的觀察訓練過程,你可以使用Tensorboard。
在Anaconda Prompt視窗切換目錄到專案的python目錄
cd d:\ml\ml-agents\python
輸入:
tensorboard --logdir=summaries
然後再瀏覽器中開啟localhost:6006
將訓練好的模型載入Unity環境
訓練結果資料儲存在models\test\下 停止執行PPO就能停止訓練。現在你就已經有訓練好的TensorFlow模型。你必須將儲存的模型轉換為Unity可使用的格式,透過以下步驟載入到Unity中。
把訓練好的bytes複製到: Assets/ML-Agents\Examples\3Dball\TFModels 設定對TensorFlowSharp的支援 因為對TensorFlowSharp的支援目前還處於實驗階段,預設情況下它是被禁用的。要開啟它,你必須按照下列不揍。 請注意Internal Brain模式只在完成以下步驟後才能使用。
從這裡下載TensorFlowSharp套件,並加入Unity中。 功能表選擇Edit -> Project Settings -> Player。找到Other Settings,在Scripting Runtime Version屬性中選擇Experimental (.NET 4.6 Equivalent),在Scripting Defined Symbols屬性中,加入ENABLE_TENSORFLOW。(請注意:多個平臺代表每個平臺都要設定) 重啟Unity 重新開啟3DBall場景 從場景的hierarchy檢視選擇Ball3DBrain物件 如下圖將Type of Brain改為Internal 如下圖將Graph Model指定剛剛加入.bytes檔案 將Graph Placeholder的size值設為1 增加名為epsilon的placeholder,設定型別為floating point,範圍從0到0。
注意:上面這兩個設定應該在專案裡已經設好了。 設定這兩個步驟是有必要的,因為3DBall是個持續的控制環境,而TensorFlow模型會用噪音引數來決定行動。但那樣的情況下控制過程是很難得的,所以不需要epsilon變數)
最後按Play按鈕,檢視訓練後的結果在Unity Edito裡面呈現。
流程非常繁瑣但現在你應該可以看到被訓練好的模型已經能自行控制平衡小球的行為。