[OpenR8 解決方案] Image_Age_SSD_Keras (影像分析使用 SSD 512 演算法及 Keras 函式庫進行年齡預測)

一、 Image_Age_SSD_Keras

 

此 Image_Age_SSD_Keras 是在深度學習 Keras 的框架下,先使用 SSD (Single Shot MultiBox Detector) 演算法來訓練模型,再透過已訓練好的模型進行年齡預測,本次訓練圖片大小為 512 × 512。

主要流程如下圖1。

首先,我們需準備想要讓模型學習的影像,將影像中的目標框選起來,且將框選的框標記是什麼類別,此目的是為了讓模型知道這個影像中框起來的物件是屬於何物。

接著透過一系列的 flow 檔案,產生兩個 pkl 檔,以此讓模型知道有哪些檔案是要進行訓練測試,再執行 flow 檔對兩個 pkl 檔訓練,訓練完成後依據想測試影像選擇不同的 flow 檔測試。

 

圖1.SSD 預測年齡流程.png

圖1.SSD 預測年齡流程。

 

 

二、步驟一:前置處理 - 感興趣區域標記

 

圖1.1SSD 預測年齡流程.png

 

  1. 目的:

準備框選標記感興趣的區域。

  1. 內容介紹: 在影像中框選想要讓模型學習的物件。例如:想要讓模型學習人臉的年齡就準備人臉的影像,再將影像中的人臉框選起來、標記其年齡大小。如此一來,模型才會知道這個影像框起來的區域其人臉的年齡大小。以此類推,想要讓模型學習什麼東西,就準備好影像、框選與標記類別。

因此我們所需準備的檔案包含以下兩項

(1). 影像 (想要讓模型學習的影像)

(2). 標記圖像目標位置的 xml 檔案 (框選後,會自動產生的檔案)

  1. 範例:

在此 Image_Age_SSD_Keras 方案範例中:

預測影像中人臉的年齡,我們透過 labelImg.exe (下圖2) 將影像中的目標人臉框選標記,如下圖3紅框是框選人臉以及將其標記成 age (人臉年齡) 的類別。標記完,儲存時會自動產生 .xml 檔案。

請將影像放置指定資料夾位置。如下圖4。

【訓練】

影像請放置 openR8/solution/Image_Age_SSD_Keras/data/image

xml請放置 openR8/solution/Image_Age_SSD_Keras/data/annotation

  1. 補充說明:

標記的軟體 labelImg.exe 已隨 OpenR8 檔案附上,其檔案路徑為openR8 > solution > Image_Age_SSD_Keras > labelImg.exe,如下圖2,其使用方法可參考開源機器人俱樂部 [ezAI 簡單學 AI] labelImg 使用方法 (Windows 版本)

 

圖2.標籤工具所在位置.png

圖2.標籤工具所在位置。

 

圖3.標記影像中的目標物件.png

圖3.標記影像中的目標物件。

 

圖4.訓練樣本資料夾之標記完之影像與 xml 檔案放置位置.png

圖4.訓練樣本資料夾之標記完之影像與 xml 檔案放置位置。

 

 

三、步驟二:前置處理 – 產生 pkl 檔

 

圖4.1訓練樣本資料夾之標記完之影像與 xml 檔案放置位置.png

 

此步驟為將標記好的訓練影像轉成後續訓練模型所需的 pkl 檔案。

  1. 開啟 1_prepare flow 檔案

如果電腦有安裝顯示卡,請【滑鼠雙擊 R8_Python3.6_GPU.bat】,沒有安裝顯示卡,請【滑鼠雙擊 R8_Python3.6_CPU.bat】=>點選【File】=>【Open】=>【OpenR8 > solution 下的 Image_Age_SSD_Keras】=> 【1_prepare.flow】。示意圖如下圖5圖6圖7圖8。

對於開啟軟體至載入解決方案有任何疑問可參閱【OpenR8 操作手冊】

 

圖5.R8_Python3.6_GPU.bat 與 R8_Python3.6_CPU.png

圖5.R8_Python3.6_GPU.bat 與 R8_Python3.6_CPU.bat。

 

圖6.檔案開啟.png

圖6.檔案開啟。

 

圖7.選擇 Image_Age_SSD_Keras 資料夾的 1_prepare.png

圖7.選擇 Image_Age_SSD_Keras 資料夾的 1_prepare。

 

圖8.載入 1_prepare.png

圖8.載入 1_prepare。

 

  1. 執行 1_prepare 流程檔案

請點選 Run,執行完成後,會產生 prior_boxes_ssd512.pkl 與 AGE.pkl (或更新原有的 prior_boxes_ssd512.pkl 與 AGE.pkl),如下圖9圖10。

 

圖9.執行完成.png

圖9.執行完成。

 

圖10.產生 AGE.pkl 與 prior_boxes_ssd512.png

圖10.產生 AGE.pkl 與 prior_boxes_ssd512。

 

 

 

四、步驟三:訓練模型 – train

 

圖10.1產生 AGE.pkl 與 prior_boxes_ssd512.png

 

介紹主要分兩部分,第一點先介紹如何開始做訓練,接著如果有興趣知道每一個流程方塊可觀看第二點之介紹此流程的詳細內容。

  1. 前置準備資料完成後,開始訓練模型。

首先,使用 OpenR8 開啟【2_train.flow】檔案,載入 2_train.flow,如下圖11圖12。

按下【Run】開始訓練模型,此步驟需花一點時間等待程式建立模型。如下圖13。 當此執行完成後會產生訓練好的模型,其模型檔案生成放置,如下圖14。

路徑 : OpenR8/solution/Image_Age_SSD_Keras/data/output/

檔案名稱 : xxx.hdf5

備註:圖13中 CMD 視窗的 700 指的是訓練影像總張數。

 

圖11.2_train.flow 檔案路徑.png

圖11.2_train.flow 檔案路徑.。

 

圖12.開啟 2_train.flow.png

圖12.開啟 2_train.flow。

 

圖13.執行 2_train.flow 與其執行過程圖.png

圖13.執行 2_train.flow 與其執行過程圖。

 

圖14.訓練完產生模型.png

圖14.訓練完產生模型。

 

  1. 2_train 流程介紹:

►Python:

【result】預設不填,此參數為接收 python 回傳的訊息。

【path】執行 ssd_run_training.py 的路徑。

【arg】預設不填,此參數為要傳給 ssd_run_training.py 的參數。

【pythonPath】預設不填,此參數為要呼叫的 python.exe 位置。

 

圖15.2_train.flow 流程之 Python.png

圖15.2_train.flow 流程之 Python。

 

 

五、步驟四:測試已訓練好的模型 - inference_image

 

圖15.12_train.flow 流程之 Python.png

 

當模型已訓練好後,可以藉由這一個步驟測試訓練出來的模型。

先使用 OpenR8 開啟【3_inference_folder.flow】,載入檔案。如下圖16、圖17

  1. 測試流程

►選擇欲測試的影像資料夾位置,如下圖18,填入從 3_inference_folder.flow 開始算起的影像資料夾位置。

►選擇訓練好的 model 來偵測影像。如下圖19,填入從 3_inference_folder.flow 開始算起的 hdf5 資料夾位置。

►觀看結果訊息。按下 Run,透過已訓練好的模型,偵測出影像上面有預測出人臉的年齡且將其人臉框選出來。如下圖20。按下 Enter 鍵可繼續看通資料夾中下一張影像結果,直到資料夾內影像皆檢測過為止。如下圖21。

 

圖16.3_inference_folder.flow.png

圖16.3_inference_folder.flow。

 

圖17.載入 3_inference_folder.flow.png

圖17.載入 3_inference_folder.flow。

 

圖18.3_inference_folder 選擇測試影像資料夾.png

圖18.3_inference_folder 選擇測試影像資料夾。

 

圖19.3_inference_folder 設定model 的位置.png

圖19.3_inference_folder 設定model 的位置。

 

圖20.3_inference_folder 執行結果.png

圖20.3_inference_folder 執行結果。

 

圖21.3_inference_folder 另一張影像測試結果.png

圖21.3_inference_folder 另一張影像測試結果。

 

  1. 3_inference_folder 流程內容介紹

►Python:

【result】預設不填,此參數為接收 python 回傳的結果。

【path】ssd_run_inference_folder.py 的路徑 (從 3_inference_folder.flow 開始算起)。

【arg】傳給 ssd_run_inference_folder.py 的參數,這裡傳要測試的影像資料夾路徑訓練好的 model 的路徑之參數,影像資料夾與 model 路徑之間用空格隔開。

【pythonPath】預設不填,此參數為要呼叫的 python.exe 位置。

 

 

六、步驟五:擷取 webcam 影像測試已訓練好的模型 - inference_camera

 

圖21.13_inference_folder 另一張影像測試結果.png

 

當模型已訓練好後,也可以藉由這一個步驟擷取 webcam 的影像來測試訓練出來的模型。

先使用 OpenR8 開啟【4_inference_camera.flow】,載入檔案。如下圖22圖23。

  1. 測試流程

►選擇訓練好的 model 來偵測影像。要使用的訓練模型放在 data/output/ 的 hdf5 檔。如下圖24。

►按下執行,透過已訓練好的模型,偵測 webcam 擷取影像的物件目標的座標位置以及其類別。如下圖25。

 

圖22.4_inference_camera.flow.png

圖22.4_inference_camera.flow。

 

圖23.載入 4_inference_camera.flow.png

圖23.載入 4_inference_camera.flow。

 

圖24.4_inference_camera 確認 model 檔.png

圖24.4_inference_camera 確認 model 檔。

 

圖25.4_inference_camera 執行結果.png

圖25.4_inference_camera 執行結果。

 

  1. inference_camera.flow 流程內容介紹

►Python:

【result】預設不填,此參數為接收 python 回傳的結果。

【path】ssd_run_inference_camera.py 的路徑 (從 4_inference_camera.flow 開始算起)。

【arg】傳給 ssd_run_inference_camera.py 的參數,這裡傳訓練好的 model 的路徑之參數。

【pythonPath】預設不填,此參數為呼叫 python.exe 位置。

 

 

七、參數設定

 

從準備資料到影像年齡預測之間有許多可變動的參數,以下會列出各種情況時可以設定的參數。

要使用 GPU 加速時,在開啟 bat 時,請務必選擇 R8_Python3.6_GPU.bat 開啟;相反的,如果想使用CPU 時則開啟 R8_Python3.6_CPU.bat。

1_prepare.flow 運行前後

(1) 設定要訓練的類別數量:訓練的影像分幾種類別,就設定多少,如果運行後出現如圖26的 unknown label,代表有未知的類別名稱,請到 get_data_from_XML.py 新增或修改類別名稱並確認類別數量,如圖27圖28。

PS. 如果get_data_from_XML.py 類別數量改了,請記得 ssd_run_training.py 也要修改類別數量,如圖29。

 

圖26.在運行 1_prepare.flow 時出現 unknown label.png

圖26.在運行 1_prepare.flow 時出現 unknown label。

 

圖27.在 get_data_from_XML.py 中新增類別.png

圖27.在 get_data_from_XML.py 中新增類別。

 

圖28.在 get_data_from_XML.py 中類別數量的位置.png

圖28.在 get_data_from_XML.py 中類別數量的位置。

 

2_train.flow 運行前

(1) 設定訓練的類別數量:訓練的影像分幾種類別,就設定多少,如圖29。

(2) 設定訓練影像的資料夾位置:訓練影像資料夾位置,如圖30。

(3) 調整 batch_size 值:如果出現像圖31的錯誤,可嘗試調小此參數值,其位置如圖32。

(4) 設定訓練次數:設定訓練的次數,如圖33。

 

圖29.在 ssd_run_training.py 更改類別數量.png

圖29.在 ssd_run_training.py 更改類別數量。

 

圖30.在 ssd_run_training.py 更改訓練資料夾位置.png

圖30.在 ssd_run_training.py 更改訓練資料夾位置。

 

圖31.訓練時記憶體不足.png

圖31.訓練時記憶體不足。

 

圖32.設定 batch size 的地方.png

圖32.設定 batch size 的地方。

 

圖33.訓練的次數.png

圖33.訓練的次數。

 

 


延伸閱讀

1.
OpenR8 社群版 - 人人都會用的 AI 軟體 (免費下載)

[CP 值最好的 AI 人工智慧電腦熱賣中]
硬體採用最新最快的 Titan RTX, RTX-2080Ti-11G, 及 TESLA V100!
視窗圖控介面,易學易用。
硬體優勢:針對深度學習最佳化設計,且經過客戶端 24H 運作驗證。
軟體優勢:事先安裝人工智慧軟體及優化設定,每週提供最新 AI 演算法下載。
公司優勢:專業人工智慧機器人設計公司,資本額一億。
歡迎企業、學校、及公家機關大量採購。
可租用,歡迎來信或來電洽詢。
詳細資料請參閱以下網址: https://tw.openrobot.club/ai_computer