[OpenR8 解決方案] Image_PCB_YOLOv3_Keras (影像分析使用 YOLOv3 演算法及 Keras 函式庫進行 PCB 物件偵測)

 

 

一、Image_PCB_YOLOv3_Keras 介紹

 

Image_PCB_YOLOv3_Keras 是使用 Keras 的 YOLO 第三版— YOLOv3 來判斷目標進行分類、檢測。

YOLO 演算法全稱為 You Only Look Once,它的優勢在於檢測速度與 SSD 差不多快,準確度也算高,這裡的解決方案使用 YOLOv3 來判斷電容的位置,主要的使用流程為下圖 1,每一個步驟於本文件之每一章節會依序詳細介紹。

 

圖 1.製作訓練樣本的流程 .png

圖 1.製作訓練樣本的流程 。

 

 

二、Image_PCB_YOLOv3_Keras 資料夾介紹

 

Image_PCB_YOLOv3_Keras 位於 OpenR8 的 solution 資料夾內,其中包含:

 

  1. 資料夾:【data 資料夾】、【src 資料夾】。

 

  1. flow 檔案:【1_train_cpu.flow】、【1_train_gpu.flow】、【2_inference.flow】。

 

初次使用者,建議先只改動 data 資料夾內的檔案內容,等熟悉後,再自行更動至想要的位置。

 

圖2. Image_PCB_YOLOv3_Keras位置.png

圖 2.Image_PCB_YOLOv3_Keras 位置 。

 

圖3. Image_PCB_YOLOv3_Keras 資料夾.png

圖 3.Image_PCB_YOLOv3_Keras 資料夾 。

 

名稱

用途與功能

內容

data

存放樣本圖片、樣本類別、數據庫的地方,其資料夾內容表 2會做說明。

train_annot_folder、

train_image_folder、

valid_annot_folder、

vaild_image_folder。

1_train_cpu.flow 1_train_gpu.flow

選擇 CPU 或 GPU 模式來訓練樣本。

 

2_inference.flow

測試訓練樣本。

 

config.json config_gpu.json

1_train_cpu.flow 或1_train_gpu.flow 參數設定時會用到,用來設定訓練用的一些參數,關於參數的說明,可參考表 3。

 

train.py

predict.py

callbacks.py

evaluate.py

gen_anchors.py

generarot.py

voc.py

yolo.py

1_train_cpu.flow、1_train_gpu.flow 及 2_inference.flow 會用到的 python 檔。

 

表1. Image_PCB_YOLOv3_Keras 資料夾介紹。

 

圖 4.Image_PCB_YOLOv3_Keras 的 data 資料夾內容 .png

圖 4. Image_PCB_YOLOv3_Keras 的 data 資料夾內容 。

 

 

 

data 資料夾內容

用途

資料夾/檔案 內容

train_annot_folder

放置訓練樣本類別的資料夾。

存放透過 labelImg.exe 標記完的樣本類別檔案 (xml 檔)。

train_image_folder

放置訓練樣本圖片的資料夾。

存放樣本圖片。

valid_annot_folder

放置測試樣本類別的資料夾。

存放透過 labelImg.exe 標記完的測試樣本類別檔案(xml 檔)。

vaild_image_folder

放置測試樣本圖片的資料夾。

存放測試樣本圖片。

表2. Image_PCB_YOLOv3_Keras 的 data 資料夾介紹。

 

 

三、準備訓練樣本圖

 

我們要訓練之前時,要先決定好方向,以此文件為例,我們想檢測電容所在的位置,所以我們須將樣本圖片一一標示它們的類別(電容),才能加入訓練。

 

第一步:開啟標記軟體。

開啟 “LABELIMG.EXE” 來標記我們想訓練的樣本類別。

 

圖 5.LABELIMG.EXE 的介面 .png

圖 5. LABELIMG.EXE 的介面 。

 

第二步:選擇樣本圖片存放資料夾。

點選 Open Dir 來開啟圖片樣本所放的資料夾位置,以下圖 6為例,將圖片放在 data/ train_image_folder 中(根據每個人放的位置,資料夾的位置也不同,第一次使用建議放在 data /train_image_folder 取代原本的圖),然後按下【選擇資料夾】。

 

圖 6.開啟樣本圖檔所在的位置 .png

圖 6.開啟樣本圖檔所在的位置 。

 

第三步:選擇存放類別標記資料夾。

點選 Change Save Dir 選擇存放類別標記資料夾位置,以下圖 7為例,將圖片放在  datatrain_annot_folder 中(根據每個人放的位置,資料夾的位置也不同,第一次使用建議放在 datatrain_annot_folder 取代原本的標記檔案),然後按下【選擇資料夾】。

 

圖 7.選擇樣本圖檔標記類別後所存放的資料夾位置 .png

圖 7.選擇樣本圖檔標記類別後所存放的資料夾位置 。

 

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

按下 Create RectBox 來框選樣本範圍,接著選擇類別,一張圖片並不侷限框同一種類別,框好後,按下 Save 儲存標記類別的檔案。

按 Next Image 繼續框選下一張樣本圖片,直到所有樣本圖片皆標記好類別為止。

 

圖 8.樣本圖檔 .png

圖 8.樣本圖檔 。

 

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

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

 

圖 10.選擇樣本類別後按下 OK .png

圖 10.選擇樣本類別後按下 OK 。

 

圖 11.框好樣本類別後按下 Save .png

圖 11.框好樣本類別後按下 Save 。

 

圖 12.按下 Next Image 繼續框選下一張圖片類別 .jpg

圖 12.按下 Next Image 到下一張圖片繼續框選類別 。

 

※有關於其他 labelImg.exe 的其他使用方法,請參考[ezAI 簡單學AI] labelImg 使用方法 (Windows  版本)

 

 

 

 

四、執行 1_train_cpu.flow 或 1_train_gpu.flow

 

在【OpenR8 資料夾】底下有一個【R8.exe】執行檔。如下圖 13。滑鼠點擊兩下即可執行 R8.exe。

 

圖 13.執行 R8.exe .png

圖 13.執行 R8.exe 。

 

執行 R8.exe 後,第一次登入需輸入帳號密碼。如下圖 14。

Open Robot ID (Email) : 登入開源機器人俱樂部的帳號。

Password : 登入開源機器人俱樂部會員的密碼。

 

圖 14.登入開源機器人帳號 .png

圖 14.登入開源機器人帳號 。

 

請點選【File】=>【Language】=>【繁體中文】=>【確定】。如下圖 15。 點選完,請重新啟動 OpenR8。關閉 OpenR8,再次執行 R8.exe。即可顯示繁體中文介面。如下圖 16

 

圖 15.變更語言成為繁體中文介面 .png

圖 15.變更語言成為繁體中文介面 。

 

圖 16.繁體中文介面 .png

圖 16.繁體中文介面 。

 

請點選【檔案】=>【開啟】=>【進入到 OpenR8 底下的 solution 資料夾】=>【選擇 Image_PCB_YOLOv3_Keras 資料夾】=>【選擇 1_train_cpu.flow 開啟】或【選擇 1_train_gpu.flow 開啟】,如圖 18、圖 19。

 

※可根據自己執行電腦的硬體設備是否有支援 GPU 加速來選擇不同的檔案,如果有支援 GPU,可以改選擇 1_train_gpu.flow 來加速訓練,如果不支援 GPU,請選擇 1_train_cpu.flow 訓練,如圖 21

 

※在運行前,請先確認 PKL 檔案是否已刪除,如圖 17

 

※在運行前,如果沒有要沿用之前的 model ,請刪除所有 h5 檔案(但保留backend.h5)。

 

圖 17.刪除 PKL 檔 .png

圖 17.刪除 PKL 檔。

 

圖 18.選擇 1_train_cpu.flow .png

圖 18.選擇 1_train_cpu.flow。

 

圖 19.開啟 1_train_cpu.flow .png

圖 19.開啟 1_train_cpu.flow。

 

  • python:

使用 python 函式執行 train.py 檔來訓練樣本。

輸出字串:預設不填寫參數,如果需要看回傳的內容時,可自行新增參數。

py 路徑:要執行的 py 檔案,這裡要執行的是【train.py】。

參數:要傳給執行的 py 檔案,所需的參數,這裡傳的是【-c config.json】。

python 路徑:預設不填寫參數,若【train.py】並不在原本的位置(Image_PCB_SSD_Keras 的資料夾內)時,需自行新增參數修改【train.py】路徑。

 

圖 20.1_train_cpu.flow 的 python 函式 .png

圖 20.1_train_gpu.flow 的 python 函式 。

 

確認完所有參數後,即可按下執行開始訓練樣本,直到跳出「Press any key to continue…」。

 

※在執行前,如果想改變 “訓練模型”、“訓練次數”、“分類類別” ……等參數設定,請看第六章 ― config.json。

 

如果開啟的檔案為【1_train_gpu.flow 】時,參數也有些變化。

圖 21.1_train_gpu.flow 的 python 函式 .png

圖 21.1_train_gpu.flow 的 python 函式 

 

 

  • python:

使用python 函式執行 train.py 檔來訓練樣本。

輸出字串:預設不填寫參數,如果需要看回傳的內容時,可自行新增參數。

py 路徑:要執行的 py 檔案,這裡要執行的是【train.py】。

參數:要傳給執行的 py 檔案,所需的參數,這裡傳的是【-c config_gpu.json】。

python 路徑:預設不填寫參數,若【train.py】並不在原本的位置(Image_PCB_SSD_Keras 的資料夾內)時,需自行新增參數修改【train.py】路徑。

 

 

五、執行 2_inference.flow 看訓練結果

 

在執行完 1_train_cpu.flow 或 1_train_gpu.flow 訓練結束後,開啟 2_inference.flow 來測試圖片,如圖 22圖 23

 

圖 22.選擇 2_inference.flow .png

圖 22.選擇 2_inference.flow 。

 

圖 23.開啟 2_inference.flow .png

圖 23.開啟 2_inference.flow 。

 

  • python:

python 函式執行 train.py 檔來訓練樣本。

輸出字串:預設不填寫參數,如果需要看回傳的內容時,可自行新增參數。

py 路徑:要執行的 py 檔案,這裡要執行的是【predice.py】。

參數:要傳給執行的py檔案,所需的參數,這裡傳的是【-c config.json -i data/valid_image_folder/13.png】。

python 路徑:預設不填寫參數,若【predice.py】並不在原本的位置(Image_PCB_SSD_Keras 的資料夾內)時,需自行新增參數修改【predice.py】路徑。

 

圖 24. 2_inference.flow 的 python 函式 .png

圖 24. 2_inference.flow 的 python 函式 

 

※請根據訓練時,使用 config.json 還是 config_gpu.json 來填寫上面參數紅字部分,舉例:【-c config_gpu.json -i data/valid_image_folder/13.png】。

 

確認完參數後,即可按下執行看結果。

 

圖 25. 2_inference.flow 的測試結果.png

圖 25. 2_inference.flow 的測試結果。

 

※補充說明:

圖 24 的函式中,參數欄位【-c config.json -i data/valid_image_folder/13.png】,

如果要測試其他圖片:

請將 data/valid_image_folder/13.png 改成想測試的圖片路徑,舉例 data/valid_image_folder/11.png

如果要測試整個資料夾的圖片:

請將 data/valid_image_folder/13.png 改成想測試資料夾路徑,舉例 data/valid_image_folder。

 

 

六、config.json介紹

 

config.json 與 config_gpu.json 的差異在於 “gpus” 填入的是 “1” 、 “0” 或是 “” 的差異,當 “gpus” : “” 時,表示不使用 GPU 加速。

 

圖 26. config_gpu.json 的內容 .png

圖 26. config_gpu.json 的內容 。

 

圖 26為config.json 的內容,其中,有可能會變動到的參數如下表 3。

參數名稱

對應的參數值

參數說明

labels

["capacitor"]

標示類別的名稱,本文件為例,只有標示“capacitor”而已,如果想再增加類別,其樣式為 ["capacitor","新增加類別名稱","新增加類別名稱2"…….] 以此類推,如圖 27。

train_image_folder

"data/train_image_folder/"

放訓練樣本圖片的資料夾位置。

train_annot_folder

"data/train_annot_folder/"

放訓練樣本標記類別的資料夾位置。

gpus

“”

如果有要運行 GPU 加速時,根據想要運行的 GPU 數量改變數字,假設有兩個 GPU,想使用後來裝的 GPU 時,可將值改為 “1”,若只有一個 GPU 時,其值為 “0”。

saved_weights_name

“pcb.h5”

讀取 yolo model 的檔案名稱。

valid_image_folder

"data/ valid_image_folder/"

放置測試樣本圖片的資料夾位置。

valid_annot_folder

"data/ valid _annot_folder/"

放置測試標記類別的資料夾位置。

表3.config.json 的參數介紹。

 

圖 27. labels 增加類別 .png

圖 27. labels 增加類別 。

 

圖 28. gpus 增加 gpu 數量 .png

圖 28. gpus 增加 gpu 數量 。

 


延伸閱讀

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

2.
[OpenR8 解決方案] Image_PCB_SSD300_Caffe (影像分析使用 SSD 300 演算法及 Caffe 函式庫進行 PCB 物件偵測)

3.
[OpenR8 解決方案] Image_PCB_SSD300_Keras (影像分析使用 SSD 300 演算法及 Keras 函式庫進行 PCB 物件偵測)

4.
[OpenR8 解決方案] Image_Webcam_SSD300_Caffe (使用 Caffe SSD 演算法偵測 webcam 即時影像中的物件)

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