[OpenR8 解決方案] Image_Face_SSD_Keras (影像分析使用 SSD 512 演算法及 Keras 函式庫進行人臉物件偵測)

一、Image_Face_SSD_Keras

 

此 Image_Face_SSD_Keras 是透過 Keras 的函式庫,使用 SSD (Single Shot MultiBox Detector) 方法來辨識人臉。此解決方案是使用 Keras,圖片大小為 512 x 512,另外有 Caffe 版本可以提供大家參考,解決方案為 : Image_FaceRecognitionCelebrity。

我們的主要流程如下圖1。

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

標記檔案準備好後,輸入想要分類的類別與數量,接著剩下只要透過 OpenR8 Image_Face_SSD_Keras 三個 flow 檔案,依序執行即可完成訓練與測試。

 

圖1.訓練模型流程.png

圖1.訓練模型流程。

 

 

二、資料夾介紹

 

此解決方案 Image_Face_SSD_Keras 資料夾內容如下圖2。

內容主要分為前置處理,訓練以及測試三種用途。

 

圖2.資料夾示意圖.png

圖2.資料夾示意圖。

 

  1. 前置處理

前置處理主要為標記框選檔案與執行 .py 檔產生訓練所需的檔案兩部分。

【標記框選檔案】

data/annotation : 放置標記的 xml 檔案。例如 : 1.xml、2.xml 等。

data/image : 放置想要訓練的影像檔。例如 : 1.png、2.png 等。

src/get_data_from_XML_FACE.py。設定分類的種類名稱以及分類數之檔案。

【產生訓練所需的檔案】

1_prepare.flow。將標記好的檔案轉為訓練所需的 .pkl 檔案。

data/FACE.pkl。為上述執行 1_prepare.flow 所產生的檔案。

  1. 訓練模型 訓練模型包含使用者需執行的檔案以及訓練運行的檔案兩部分。

【使用者所需執行或修改之檔案】

2_train.flow。OpenR8 訓練模型之流程檔案,下指令執行 .py 檔案。

src/ssd_run_training.py。設定要分類的類別數量。

data/output/weights.20.hdf5 為訓練完產生的模型檔案。

【訓練運行之檔案】

ssd.py、ssd_layers.py、ssd_utils.py。Keras 函式庫之 SSD 算法以及訓練檔。     data 資料夾。

  1. 測試模型

【使用者所需執行之檔案】

3_inference_folder.flow.flow。OpenR8 測試模型之流程檔案。下指令執行 .py 檔案。

src/ssd_inference.py。設定分類的類別。

【測試運行之檔案】

src/ssd_run_inference_folder.py。測試運行的檔案。

 

 

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

 

在圖像中框選想要讓模型學習的物件。例如想要讓模型學習哪一個人臉就準備其圖片,接著將影像中的人臉框選起來以及將這個框標記人名。如此一來,模型才會知道這個圖片框起來的區域就是誰。以此類推,想要讓模型學習誰,就準備好圖片與框選好做標記。

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

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

檔案放置位置 : openR8/solution/Image_Face_SSD_Keras/data/image

(依照目前的 batch size等網路參數設定,建議圖片大於 26 張。此外圖片通道是 3 個通道,如果不是請自行改為 RGB 3 channel)

  1. 標記圖像中目標的 xml 檔案 (框選後才會產生的紀錄檔案)

檔案放置位置 : openR8/solution/Image_Face_SSD_Keras/data/annotation

 

圖3.標籤完之影像與 xml 檔案放置位置.png

圖3.標籤完之影像與 xml 檔案放置位置。

 

在此 Image_Face_SSD_Keras 方案範例中:

目標為偵測與辨識影像中的人臉,我們透過 labelImg.exe (下圖4) 將影像中的目標人臉框選標記,如下圖11。綠框是框選人臉以及將其標記其人臉名稱的類別標記完,儲存時會產生 .xml 檔案。

標記步驟方法如下:

第一步:開啟標記軟體 標記軟體位置 OpenR8solutionImage_Face_SSD_Keras,如下圖4,點擊兩下,開啟畫面如圖5:

 

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

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

 

圖5.開啟標籤工具.jpg

圖5.開啟標籤工具。

 

第二步:設定開啟影像樣本所在資料夾位置。如下圖6。選擇後開啟顯示如下圖7。

 

圖6.選擇影像樣本所在的位置.png

圖6.選擇影像樣本所在的位置。

 

圖7.開啟影像樣本所在位置.png

圖7.開啟影像樣本所在位置。

 

第三步:選擇存放類別標記資料夾。如下圖8。選擇後開啟顯示如下圖9。

 

圖8.選擇儲存標記 xml 檔案所在的位置.png

圖8.選擇儲存標記 xml 檔案所在的位置。

 

圖9.載入儲存標記 xml 檔案所在的位置.png

圖9.載入儲存標記 xml 檔案所在的位置。

 

第四步: 框選樣本圖片並標記類別

按下 Create RectBox 來框選樣本範圍,接著選擇類別,一張圖片並不侷限框選同一種類別,框好後,就可按下 Save 儲存標記類別的檔案,按 Next Image 繼續框選下一張樣本圖片,直到所有樣本圖片皆標記好類別為止。

 

圖10.按下 Create RectBox 來框選樣本.png

圖10.按下 Create RectBox 來框選樣本。

 

圖11.選擇框選的所屬類別 .png

圖11.選擇框選的所屬類別。

 

 

四、步驟二:前置處理-定義類別與分類數量

 

此步驟是定義我們將資料分成哪幾種類別以及分類的數量,來讓模型可以透過這些資料學習分類。主要分成三個流程,如下1~3。

  1. 開啟 get_data_from_XML_FACE.py 檔案。

請使用 【Notepad++】 開啟 【get_data_from_XML_FACE.py】。如下圖12圖13

路徑 : solution/Image_Face_SSD_Keras/src/get_data_from_XML_FACE.py

  1. 修改 Notepad++ 的編碼。請點選 【Encoding】 => 【Encoding in UTF-8】。如下圖14。
  2. 設定想要將資料分類的數量。如下圖15。

請將檔案內的 self.num_classes = 14 的數量【14】改為分類數。

例如:我們將資料分類成 A 與 B 兩類,則 self.num_classes = 2。

  1. 設定想要將資料分類的類別。如下圖16。

請將 _to_one_hot (self, name) 裡面的

if name == 'capacitor':

one_hot_vector[0] = 1

設定成資料分類的類別格式,如下:

if name == '類別名稱 a':

one_hot_vector[0] = 1

elif name == '類別名稱 b':

one_hot_vector[1] = 1

…..以此類推

例如:我們分成兩種類別,名稱個別為 A 與 B。則需修改成:

if name == 'A':

one_hot_vector[0] = 1

elif name == 'B':

one_hot_vector[1] = 1

 

圖12.get_data_from_XML_FACE.py 路徑.png

圖12.get_data_from_XML_FACE.py 路徑。

 

圖13.get_data_from_XML_FACE.py 內容.png

圖13.get_data_from_XML_FACE.py 內容。

 

圖14.修改 Notepad 編碼為 UTF-8.png

圖14.修改 Notepad 編碼為 UTF-8。

 

圖15.設定分類數.png

圖15.設定分類數。

 

圖16.設定分類類別名稱.png

圖16.設定分類類別名稱。

 

 

五、步驟三:前置處理-1_prepare

 

接著剩下來的步驟,都只需要開啟 OpenR8 軟體,執行 flow 檔。

此步驟只需兩步驟,載入流程檔案與點擊執行,即可完成將前面準備的檔案轉成訓練所需的資料。

  1. 載入流程檔案。

請 【滑鼠雙擊 R8_Python3.6_GPU.bat 或 R8_Python3.6_CPU.bat (依需求選擇)】 => 點選 【檔案】 => 【開啟】 => 【 solution 資料夾內的 Image_Face_SSD_Keras 】 => 【1_prepare.flow】。示意圖如下 圖17圖18圖19。

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

 

圖17.開啟 R8.png

圖17.開啟 R8。

 

圖18.檔案開啟.png

圖18.檔案開啟。

 

圖19.選擇 Image_Face_SSD_Keras 資料夾.png

圖19.選擇 Image_Face_SSD_Keras 資料夾。

 

圖20.選擇 1_prepare.flow.png

圖20.選擇 1_prepare.flow。

 

圖21.載入 1_prepare.flow.png

圖21.載入 1_prepare.flow。

 

  1. 執行流程檔案。只需點擊【執行】就會開始運行流程檔案,利用下指令的方式執行前面準備的 get_data_from_XML_Face.py。如下圖22圖23。

 

圖22.運行 1_prepare.flow.png

圖22.運行 1_prepare.flow。

 

圖23.執行完成 1_prepare.flow 產生 FACE.pkl 檔.png

圖23.執行完成 1_prepare.flow 產生 FACE.pkl 檔。

 

 

六、步驟四:訓練模型-2_train

 

介紹主要分兩部分,第一點先介紹如何開始做訓練。

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

  1. 填入訓練的參數。請開啟OpenR8/solution/Image_Face_SSD_Keras/src/ssd_run_training.py

在內容中找到 NUM_CLASSES = 14 + 1,前面的 14 表示為想要分類的數量,後面的 1 表示背景。

例如 : 分 2 種類別,前面的 14 需修改為 2,也就是 NUM_CLASSES = 2 + 1。

  1. 開啟流程。

使用 OpenR8【開啟 2_train.flow】檔案,載入 2_train,如下圖24圖25。

  1. 執行流程。

按下【執行】開始訓練模型,此步驟需花一點時間等待程式建立模型。如下圖26。

  1. 執行完成,產生模型。

當此執行完成後會產生訓練好的模型,其模型檔案生成放置,如下圖27。路徑為:

檔案根目錄/solution/Image_Face_SSD_Keras/data/output/檔案名稱 1:xxx. hdf5

 

圖24.2_train 檔案路徑.png

圖24.2_train 檔案路徑。

 

圖25.開啟 2_train.png

圖25.開啟 2_train。

 

圖26.執行 2_train 與其執行過程圖.png

圖26.執行 2_train 與其執行過程圖。

 

圖27.執行完成 2_train 產生的 model 檔.png

圖27.執行完成 2_train 產生的 model 檔。

 

 

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

 

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

  1. 開啟流程檔案。

使用 OpenR8 開啟【3_inference_folder.flow】,載入檔案。如下圖28圖29。

  1. 設定測試影像。

接著設定需要測試的影像。方法如下圖30。

  1. 設定測試的模型。

檔案位置 :  OpenR8/solution/Image_Face_SSD_Keras/src/ssd_inference.py

找到內容 :  modelPath = 'data/output/weights.60.hdf5'

將 weights.60.hdf5 改成想要測試的模型檔名。

Ps. 上一個步驟訓練出來的模型放置於此解決方案的 data/output 資料夾。

  1. 設定測試所需要用的類別。

檔案位置 : OpenR8/solution/Image_Face_SSD_Keras/src/ssd_inference.py

請將內容 : voc_classes = ['Abe', 'Benedict', 'ChrisEvans', 'IU', 'KimJongUn', 'KP', 'Leonardo', 'LiBingBing', 'ParkShinHye', 'Scarlett', 'Stallone', 'SteveJobs', 'Trump', 'YangMi']

修改成自己定義的類別

voc_classes = [‘類別1’, ‘類別2’, ‘類別3’….],類別1、類別2……為前面定義好的類別名稱。

例如 : 想要分類電容與LED共兩類,voc_classes = [‘capacitor’, ‘LED’]。

  1. 執行,顯示結果。

點選執行。如下圖31。

 

圖28.3_inference.png

圖28.3_inference。

 

圖29.載入 3_inference.png

圖29.載入 3_inference。

 

圖30.3_inference 選擇測試影像.png

圖30.3_inference 選擇測試影像。

 

圖31.3_inference 測試結果.png

圖31.3_inference 測試結果。

 


延伸閱讀

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

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