YOLO v2 環境建置與操作

* 在 Windows 下工具讀取 Linux 檔案的工具:Ext2Fsd

訓練環境的比較

若使用 NVIDIA GTX 1080Ti 進行訓練,標準 YOLO 架構 40,000 次迭代,大約耗時兩個整天。

若使用 Tiny YOLO 進行訓練,67 個鐘頭可約訓練 100,000 次迭代。

訓練資料集準備

資料集準備與YOLO v1 藥品辨識訓練文件中是相同的,擷取如下:

不管你原本把 darknet 資料夾放在哪兒

請先將 darknet 資料夾移到 /home 目錄下!

VOCdevkit

首先,請下載 voc_label.py 這個檔案在 /home 目錄下。

我們必須將所有分類的標籤(以 21 種藥品為例)放在 class 陣列當中:

classes = ["Amlodipine_Atorvastatin", "Aprovel_300mg",  "Buscopan_10mg" , "Celecoxib_200mg", "Coaprovel",  "Defense_f_c_tab",  "Dipyridamole_25mg", "Dulcolax_5mg", "Ethambutol_HCL_400mg",  "Famotidine_20mg", "Folinate_15mg", "Irbesartan", "Irbesartan_Hydr", "Mebeverine_HCL_100mg",  "Nicametate_Citrate_50mg", "Sinbaby_120gm", "'Tegafur_Uracil", "Theophylline_Anhydrous_250mg", "Theophylline_Anhydrous_125mg", "Trospium_chloride_10mg",  "Ursodeoxycholic_acid"]

如果我有一大堆用類別名稱命名的資料夾,如何快速產生這樣的標籤呢?

請參考這裡的 Windows 技巧,產生 TXT 檔後要注意:要刪掉「XXX.bat」與「list.txt」這兩行,因為他們不是我們要訓練的類別;刪掉後使用 Word 之類的工具,將「換行」取代為「", "」,並在第一行的開頭補上一個「"」。

建立路徑

接著,我們要開始蓋一堆東西(懶人包在這兒):

  1. 在 /home 目錄下建立名為 VOCdevkit 的目錄。

  2. VOCdevkit 目錄中,建立名為 VOC2012 的目錄。

  3. VOC2012 目錄中,建立 AnnotationsImageSetsJPEGImages 三個目錄。

  4. Annotations 目錄中,放入藥品的所有 .xml 檔案。

  5. ImageSets 目錄中,建立 Main 目錄,並在 Main 目錄中放入 trainval.txt 檔案(內容是從數字 1 開始,一路排到與訓練圖數量相同的數字 n 的檔案;請參考這兒的方法四)。

  6. JPEGImages 目錄中,放入作為訓練樣本的 n 張圖片(.jpg)。

完成後,就可以在 /home 目錄下,執行 voc_label.py 檔案:

python voc_label.py

執行後,會在 /home 目錄下出現 2012_trainval.txt 檔案(裡面包含了所有訓練圖庫的路徑),並在 /home/ee303/VOCdevkit/VOC2012/ 目錄下建立 labels 資料夾,裡面包含 n 筆 .txt 的檔案。

訓練環境準備

在 YOLO v2 的環境建置中,有大幅的修改與簡化步驟。當我們準備好與 YOLO v1 相同的訓練資料集VOCdevkit後:

  • 下載此 YOLO v2 的深度學習架構包

  • ~/cfg/yolo-drug.cfg - 修改 classes 數量、修改最下面的 filter = (classes + 5) * 5。

  • ~/cfg/voc-drug.data - 修改 classes 數量、train.txt 的檔案路徑、test.txt 的檔案路徑、.names 檔案路徑、backup 的資料夾路徑。

  • ~/data/voc_drug.names - 放入所有藥品的名稱,以「換行」分類。

  • ~/src/detector.c - 修改所有你看得到的路徑與最下方的 classes 數量。

  • ~/train.txt - 修改為訓練照片的路徑。

  • ~/test.txt - 修改為測試照片的路徑。

設定完成後記得在 darknet 目錄下使用make指令重新編譯。

系統指令

深度學習訓練:

./darknet detector train cfg/voc-drug.data cfg/yolo-drug.cfg

(這已在 Jetson 上實作,別在桌機實作)搭配傳統影像處理的實時藥物辨識:

./darknet detector drug_test cfg/voc-drug.data cfg/yolo-drug.cfg backup/yolo-drug_final.weights /home/ee303/darknet_drug_200/Combine_result/

(Step 2. 分類)根據 test.txt 進行藥物識別,在 test_all 資料夾中輸出一堆測試結果的 TXT 檔:

./darknet detector test_all cfg/voc-drug.data cfg/yolo-drug.cfg backup/yolo-drug_final.weights test_all/

隨後再用 testall.py 檔案來分析資料夾中的所有 TXT 檔,並輸出評估結果。

(Step 1. 偵測,在 darknet_detection 中)大量測試 multi_test 資料夾中的藥物照片:

框選與辨識結果將存檔於 multi_test/result 資料夾中;而裁減出來的藥物區域,將放在 multi_test/cut 當中。

(要修改 detector.c 中 multi_test 函式的 for 迴圈藥物數量;目前仍有 killed 問題,需要清理使用free指令記憶體)

./darknet detector multi_test cfg/voc-drug.data cfg/yolo-drug.cfg backup/yolo-drug_final.weights multi_test/

 

下面是幾乎不會用到的...

傳統辨識(測試單張圖片,輸出圖片):

./darknet detector test cfg/voc-drug.data cfg/yolo-drug.cfg backup/yolo-drug_final.weights /home/ee303/Combine_result/result.png

Recall 測試:

./darknet detector recall cfg/voc-drug.data cfg/yolo-drug.cfg backup/yolo-drug_final.weights

Validate 測試:

./darknet detector valid cfg/voc-drug.data cfg/yolo-drug.cfg backup/yolo-drug_final.weights

特殊用途註解

  • 若想在實時藥物辨識時,關閉 "Cannot load image" 的訊息,請到 ~/src/image.c,找到image load_image_cv函式。
  • 因為我們訓練或辨識的圖片可能是 .png 檔,與 YOLO 系統預設的 .jpg 並不相同,因此我們必須在 validate_detector_recall 函式中找到 find_replace 區塊,加上find_replace(labelpath, ".png", ".txt", labelpath);指令,程式才能找到對應的 .png 與 .txt 檔。

results matching ""

    No results matching ""