[OpenR8 解決方案] Image_FaceRecognitionCelebrity (名人人臉辨識)

一、Image_FaceRecognitionCelebrity

 

使用 Caffe 的框架,透過 SSD (Single Shot MultiBox Detector) 方法來偵測與辨識影像中的人臉。主要流程如下圖1

 

  1. 框圖與標記 : 我們需準備想要讓模型學習的影像,將影像中的目標框選起來,且將框選的框標記是什麼人,此目的是為了讓模型知道這個影像中框起來的人物是屬於何人。
  2. 執行 flow 檔來完成訓練與測試 : 透過 OpenR8 Image_ FaceRecognitionCelebrity 內的三個 flow 檔案,依序執行即可完成訓練與測試。

 

圖1.訓練模型流程圖.png

圖1.訓練模型流程圖。

 

 

二、資料夾介紹

 

此解決方案 Image_ FaceRecognitionCelebrity 資料夾內容如下圖2圖3

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

 

圖2.資料夾示意圖.png

圖2.資料夾示意圖。

 

圖3.data 資料夾示意圖.png

圖3.data 資料夾示意圖。

 

  1. 前置處理

 

檔案名稱

用途

使用者所需的標記相關檔案

labelImg.exe

標記軟體

datapredefined_classes.txt

紀錄讓模型學習的類別

dataannotation

想要讓模型學習圖片的標記類別檔

dataimage

想要讓模型學習的圖片

dataimage_test

用來測試訓練模型的圖片

datatrainval.txt

紀錄所有要訓練圖片及標記檔的檔案名稱

使用者所需執行的 flow 檔案

1_annoset_to_lmdb.flow

將資料 (圖片及其標記檔) 轉成下一步訓練所需要的 lmdb 檔

 

執行的 flow 產生的檔案

test_lmdb

(data.mdb、lock.mdb)

執行 1_annoset_to_lmdb.flow 所產生的測試所需 lmdb 檔

 

trainval_lmdb

(data.mdb、lock.mdb)

執行 1_annoset_to_lmdb.flow 所產生的訓練所需 lmdb 檔

 

 

  1. 訓練

 

檔案名稱

用途

使用者所需執行的 flow 檔案

2_train.flow

OpenR8 訓練模型之流程檔案

訓練完成產出的檔案

snapshot_iter_80000.caffemodel

.caffemodel 附檔名為訓練產生的模型檔案

訓練運行之檔案

deploy.prototxt

labelmap.prototxt

solver.prototxt

test.prototxt

train.prototxt

訓練所需的網路設定及參數

 

  1. 測試模型

 

檔案名稱

用途

使用者所需執行的 flow 檔案

3_inference_image.flow

OpenR8 測試模型所需的檔案

4_inference_webcam.flow

OpenR8 偵測與辨識 webcam 即時畫面人物所需的檔案

 

 

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

 

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

 

因此我們所需準備的檔案包含以下三項。如下:

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

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

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

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

  1. 紀錄分類類別的 txt 檔。請使用 notepad++ 開啟,將要辨識的人名依序從上至下輸入 (第一個必為 background 請勿刪除)。如下圖4

其檔案放置位置 : openR8/solution/Image_FaceRecognitionCelebrity/data/predefined_classes.txt

 

圖4.predefined_classes.txt 內容.png

圖4.predefined_classes.txt 內容。

 

標記方式可參考 Image_PCB_SSD_Keras 方案範例如下述,只需將路徑更換成上述本解決方案的圖檔、xml 檔的路徑。

目標為偵測 PCB 中的電容,我們透過 labelImg.exe (下圖5) 將 PCB 影像中的目標電容框選標記,如下圖12。綠框是框選電容以及將其標記成 capacitor (電容) 的類別。標記完,儲存時會產生 .xml 檔案。

標記步驟方法如下:

第一步:開啟標記軟體

標記軟體位置 openR8/tool/Deep Learning/labelImg,如下圖5,點擊兩下,開啟畫面如圖6:

 

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

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

 

圖6.開啟標籤工具.png

圖6.開啟標籤工具。

 

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

 

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

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

 

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

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

 

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

 

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

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

 

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

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

 

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

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

 

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

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

 

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

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

 

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

 

 

 

四、步驟二:前置處理 - 建立檔案位置的 txt 檔

 

  1. 目的:

定義 【訓練】 和 【測試】 的影像與其標記的位置。

  1. 使用說明:

使用 labelImage 將 data/image 與 data/annotation 兩個資料夾的檔案合成一個清單。

按下 Customized > Export file list > 產生filelist.txt > 將 filelist.txt 重新命名為 trainval.txt 取代原來的檔案。 如下 圖13圖14。

 

圖13.產生 train.txt 1 .jpg

圖13.產生 train.txt (1)。

 

圖14.產生 train.txt 2 .png

圖14.產生 train.txt (2)。

 

 

五、步驟三:前置處理 - 建立標籤類別 txt 檔

 

  1. 目的:

建立類別 txt,此目的是跟模型說我們這些資料要分成哪幾種類別,藉此讓模型可自行學習將影像進行偵測分類。

  1. 內容介紹:

請在 openR8/solution/Image_FaceRecognitionCelebrity/data 路徑下面建立【labelmap.prototxt】檔案。檔案內容格式如下:

item {

name: "none_of_the_above"

label: 0

display_name: "background"

}

item {

name: "類別標籤名字"

label: 1

display_name: "顯示此類別的名字"

}

……

item {

name: "類別標籤名字"

label: n

display_name: "顯示此類別的名字"

}

請注意:上述的【name】【display_name】請勿必與【標記感興趣區域標記】的xml 之類別名稱、數量相符合。

 

  1. 範例:

在 openR8/solution/Image_ FaceRecognitionCelebrity/data 資料夾內的labelmap.prototxt,可透由 notepad++ 或記事本開啟檔案。如下圖15。

檔案內容如下圖16,可以看出我們將影像分類成 none_of_the_above (以上皆非) 以及14 個人名,其中個別標籤編號為 0 ~14。

如果要自行新增類別,請增加類別名稱及標籤號碼,可見如下圖16 (右)。

 

圖15.labelmap.prototxt 檔案路徑.png

圖15.labelmap.prototxt 檔案路徑。

 

圖16.labelmap內容示意圖 左 增加類別示意圖 右 .png

圖16.labelmap內容示意圖(左),增加類別示意圖(右)。

 

 

六、步驟四:前置處理 - 1_annoset_to_lmdb.flow

 

接著剩下來的步驟,都只需要開啟 OpenR8 軟體,執行 flow 檔。 此步驟只需兩步驟,載入流程檔案與點擊執行,即可完成將前面準備的好的檔案轉成訓練所需的 lmdb 檔案。

  1. 載入流程檔案。

請【滑鼠雙擊 R8.exe】=>點選【檔案】=>【開啟】=>【solution 資料夾內的 Image_FaceRecognitionCelebrity】=>【1_annoset_to_lmdb.flow】。示意圖如下圖17圖18圖19圖20。

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

 

圖17.R8.png

圖17.R8.exe。

 

圖18.檔案開啟.png

圖18.檔案開啟。

 

圖19.選擇 1_annoset_to_lmdb.jpg

圖19.選擇 1_annoset_to_lmdb。

 

圖20.載入 1_prepare.flow.jpg

圖20.載入 1_prepare.flow。

 

圖21.運行 1_annoset_to_lmdb.flow.png

圖21.運行 1_annoset_to_lmdb.flow。

 

圖22.執行完成 1_annoset_to_lmdb.flow 產生 lmdb 檔.png

圖22.執行完成 1_annoset_to_lmdb.flow 產生 lmdb 檔。

 

 

七、步驟五:訓練模型 - 2_train

 

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

  1. 開啟流程。

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

  1. 執行流程。

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

*ERROR! No GPU! The GPU string value must be empty! 如果裝置未支援 NVIDIA,請將 [Caffe_訓練] 函式內的 GPU 從 [all] 改為[]。

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

當此執行完成後會產生訓練好的模型,其模型檔案生成放置,如下圖26。路徑為: solution/Image_FaceRecognitionCelebrity/data/檔案名稱 : xxx. caffemodel

 

圖23.2_train 檔案路徑.png

圖23.2_train 檔案路徑。

 

圖24.開啟 2_train.jpg

圖24.開啟 2_train。

 

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

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

 

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

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

 

 

八、步驟六:測試已訓練好的模型 - inference_image

 

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

  1. 開啟流程檔案。

使用 openR8 開啟 【3_inference_image.flow】 ,載入檔案。如下圖27圖28。

  1. 設定測試影像。

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

其中測試的影像放置於: 資料夾根目錄/solution/Image_FaceRecognitionCelebrity /data/image_test。

  1. 選擇已訓練好的模型。如下圖30。
  2. 執行,顯示結果。如下圖31圖32。

*ERROR! No GPU! The GPU string value must be empty! 如果裝置未支援 NVIDIA,請將 [Caffe_物件偵測_讀取網路] 與 [Caffe_物件偵測_影像推論] 兩函式內的 GPU 從 [all] 改為[]。

  1. 如果無 GPU 解決方式為將 GPU 的參數填為空值。如下圖33圖34。

 

圖27.3_inference_image.png

圖27.3_inference_image。

 

圖28.載入 3_inference_image.jpg

圖28.載入 3_inference_image。

 

圖29.3_inference_image 選擇測試影像.png

圖29.3_inference_image 選擇測試影像。

 

圖30.選擇模型.png

圖30.選擇模型。

 

圖31.3_inference_image run 測試結果.png

圖31.3_inference_image run 測試結果。

 

圖32.3_inference_image debug 測試結果.png

圖32.3_inference_image debug 測試結果。

 

圖33.跳出沒有 GPU 錯誤訓練.jpg

圖33.跳出沒有 GPU 錯誤訓練。

 

圖34.跳出沒有 GPU 錯誤訓練_解決.jpg

圖34.跳出沒有 GPU 錯誤訓練_解決。

 

 

九、步驟六:測試已訓練好的模型 - 4_inference_webcam.flow

 

當模型已訓練好後,可以開啟 webcam 偵測人物及辨識其是何人。

  1. 開啟流程檔案。

使用 openR8 開啟 【3_inference_webcam.flow】 ,載入檔案。如下圖35圖36。

  1. 選擇已訓練好的模型。如下圖37。
  2. 執行,顯示結果。如下圖38。

*ERROR! No GPU! The GPU string value must be empty! 如果裝置未支援 NVIDIA,請將 [Caffe_物件偵測_讀取網路] 與 [Caffe_物件偵測_影像推論] 兩函式內的 GPU 從 [all] 改為[]。

 

圖35.3_inference_ webcam.png

圖35.3_inference_ webcam。

 

圖36.載入 3_inference_webcam.jpg

圖36.載入 3_inference_webcam。

 

圖37.選擇模型.png

圖37.選擇模型。

 

圖38.3_inference_webcam 及時偵測辨識.png

圖38.3_inference_webcam 及時偵測辨識。


延伸閱讀

1.
OpenR8 - 人人都會用的 AI 軟體 (下載)

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