動機:想要玩 Darknet(YOLOv3) 來 訓練/預測 自己的圖片,要如何做呢?!
準備環境:
1.Ubuntu 18.04
2.Anaconda 2020.02 for Linux (Python 3.7)
3.Darknet
4.OpenCV 3.4.9
5.CUDA 10.0
6.Geforce GTX 1080 Ti * 2
實作步驟:
準備環境:
1.Ubuntu 18.04
2.Anaconda 2020.02 for Linux (Python 3.7)
3.Darknet
4.OpenCV 3.4.9
5.CUDA 10.0
6.Geforce GTX 1080 Ti * 2
實作步驟:
1.建立工作目錄: 先建立一個主要的目錄外加四個子目錄,如下圖:
2.建立分類: 依照類別(label)建立文字檔,並命名為 drug_voc.names,存放在 drug_detect 目錄內,如下:
https://gist.github.com/dvsseed/c5c21a16cec29764b9c0d6f58f97dc20
3.圖檔命名: 整理自己的圖檔,並按照上述第2.項的類別自編流水號 ( 示範格式: 類別流水號_類別名稱_圖檔流水號.jpg ),存放在 JPEGImages 子目錄內,如下圖:
4.圖檔標註: 這裡筆者喜歡在 Windows 10 內操作,先下載 labelImg v1.8.1 (https://github.com/tzutalin/labelImg/files/2638199/windows_v1.8.1.zip),安裝完成後執行 labelImg.exe 操作功能如下:
5.整理 train、val 圖檔名稱檔: 利用指令 ( $ ls -d JPEGImages/* > train.txt ) 將所有的圖檔名稱輸入至文字檔,再利用 Editor 編輯並按比例 80/20 將 80% 存成 train.txt、20% 存成 val.txt
6.產生 train、val 文字檔: 利用 python 程式碼來生成 drug_train.txt 及 drug_val.txt 並將 PascalVOC (.xml) 轉換成 YOLO (.txt),如下:
https://gist.github.com/dvsseed/e34a8241cd5059e83bad0abb16609ede
直接執行指令 ( $ python voc_label.py )
7.製作 drug_voc.data 文字檔: 利用 Editor 編輯產生,存放於 drug_detect 目錄內,內容如下:
https://gist.github.com/dvsseed/29e8d1f81aae033b197223220d3bd9e6
8.製作 yolov3-voc.cfg 參數檔: 利用 Editor 編輯產生,存放於 drug_detect 目錄內,內容如下:
https://gist.github.com/dvsseed/ad718262f026462438c8891d72eafa40
這個部分的重點是要根據 GPU 的 RAM來控制 batch 及 subdivisions 的值,也要根據類別數量來改 classes 的值及計算出 filters [=(classes + 5) * 3]
2.建立分類: 依照類別(label)建立文字檔,並命名為 drug_voc.names,存放在 drug_detect 目錄內,如下:
https://gist.github.com/dvsseed/c5c21a16cec29764b9c0d6f58f97dc20
3.圖檔命名: 整理自己的圖檔,並按照上述第2.項的類別自編流水號 ( 示範格式: 類別流水號_類別名稱_圖檔流水號.jpg ),存放在 JPEGImages 子目錄內,如下圖:
4.圖檔標註: 這裡筆者喜歡在 Windows 10 內操作,先下載 labelImg v1.8.1 (https://github.com/tzutalin/labelImg/files/2638199/windows_v1.8.1.zip),安裝完成後執行 labelImg.exe 操作功能如下:
- 按左方 Open Dir 並選擇 JPEGImages 子目錄
- 按下 Change Save Dir 並選擇 Annotations 子目錄
- save format 預設為 PascalVOC 不用變
- W (產生方框,進行標記)
- Ctrl+S (存檔,請輸入上述第2.項的類別名稱)
- D (下一張)
5.整理 train、val 圖檔名稱檔: 利用指令 ( $ ls -d JPEGImages/* > train.txt ) 將所有的圖檔名稱輸入至文字檔,再利用 Editor 編輯並按比例 80/20 將 80% 存成 train.txt、20% 存成 val.txt
6.產生 train、val 文字檔: 利用 python 程式碼來生成 drug_train.txt 及 drug_val.txt 並將 PascalVOC (.xml) 轉換成 YOLO (.txt),如下:
https://gist.github.com/dvsseed/e34a8241cd5059e83bad0abb16609ede
直接執行指令 ( $ python voc_label.py )
7.製作 drug_voc.data 文字檔: 利用 Editor 編輯產生,存放於 drug_detect 目錄內,內容如下:
https://gist.github.com/dvsseed/29e8d1f81aae033b197223220d3bd9e6
8.製作 yolov3-voc.cfg 參數檔: 利用 Editor 編輯產生,存放於 drug_detect 目錄內,內容如下:
https://gist.github.com/dvsseed/ad718262f026462438c8891d72eafa40
這個部分的重點是要根據 GPU 的 RAM來控制 batch 及 subdivisions 的值,也要根據類別數量來改 classes 的值及計算出 filters [=(classes + 5) * 3]
9.下載 YOLO Pre-trained Convolutional Weights,並存放於 darknet 目錄內,指令如下:
$ wget https://pjreddie.com/media/files/darknet53.conv.74
$ wget https://pjreddie.com/media/files/darknet53.conv.74
10.執行訓練,並保存LOG到.txt文件,指令如下:
$ ./darknet detector train drug_detect/drug_voc.data drug_detect/yolov3-voc.cfg darknet53.conv.74 -gpus 1 | tee -a train_drug_record.txt
$ ./darknet detector train drug_detect/drug_voc.data drug_detect/yolov3-voc.cfg darknet53.conv.74 -gpus 1 | tee -a train_drug_record.txt
經過12個小時的等待後~~~
11.使用訓練好的模型進行預測(須修改 yolov3-voc.cfg 裡面的 batch=1、subvision=1)
$ ./darknet detector test drug_detect/drug_voc.data drug_detect/yolov3-voc.cfg drug_detect/backup/yolov3-voc.backup drug_detect/JPEGImages/0_Binin-U_0.jpg
顯示預測結果如下圖
心得:首先要感謝 labelImg 的作者(Tzuta Lin)及 Yanwei Liu 的網文(如參攷 1.),讓筆者省下了不少的摸索時間,更要大大的感謝 Darknet 的大神 Joseph Redmon,讓我們受惠及學習到這麼多!!
參攷:
1.Python影像辨識筆記(九):分別在Windows和Ubuntu 18.04上安裝並執行YOLOv3(使用GPU), https://medium.com/@yanweiliu/python%E5%BD%B1%E5%83%8F%E8%BE%A8%E8%AD%98%E7%AD%86%E8%A8%98-%E5%85%AB-%E5%88%86%E5%88%A5%E5%9C%A8windows%E5%92%8Cubuntu-18-04%E4%B8%8A%E5%AE%89%E8%A3%9D%E4%B8%A6%E5%9F%B7%E8%A1%8Cyolov3-%E4%BD%BF%E7%94%A8gpu-d2b77347fde
2.【AI_Column】如何以YOLOv3訓練自己的資料集 ─ 以小蕃茄為例, https://makerpro.cc/2019/12/train-your-dataset-with-yolov3/
3.建立自己的YOLO辨識模型 – 以柑橘辨識為例, https://chtseng.wordpress.com/2018/09/01/%E5%BB%BA%E7%AB%8B%E8%87%AA%E5%B7%B1%E7%9A%84yolo%E8%BE%A8%E8%AD%98%E6%A8%A1%E5%9E%8B-%E4%BB%A5%E6%9F%91%E6%A9%98%E8%BE%A8%E8%AD%98%E7%82%BA%E4%BE%8B/
4.DarkNet-YOLOv3 训练自己的数据集 Ubuntu16.04+cuda8.0, https://zhuanlan.zhihu.com/p/35490655
留言