目錄
- 寫在前頭
- 編譯運作
-
- 運作環境及準備
- 安裝編譯環境
- 收集資料
- 進行配置
- 執行訓練
- 測試訓練結果
- 拓展
- 錯誤彙總
- 小結
寫在前頭
第一次寫,寫了一下午感覺寫的還是比較細緻的,在最後也附上了源碼連結,如果在參照此方法訓練資料出現任何問題的歡迎微信(BreakALegToday)交流探讨,共同進步。自己也是小白一個,希望能夠一步步有所改進~~~~也歡迎大佬提點指導。下面開始跑起來~
編譯運作
運作環境及準備
- 筆記本(最好有帶gpu的電腦)
- pytorch版yolov3
-
Win10系統:
3.1 安裝Git
-
python環境及編譯器
4.1 安裝python3.7
4.2 安裝pycharm
4.3 安裝pipenv 建構虛拟環境(嫌麻煩的可以安裝AnaConda)
4.4 下載下傳labelImg标注工具
- 安裝CUDNN+CUDA加速運作,教程
安裝編譯環境
- 安裝源檔案及建構python虛拟環境
選擇一個路徑,打開powershell(在檔案夾空白處shift+滑鼠右鍵)輸入以下代碼
git clone https://github.com/ultralytics/yolov3.git
轉移到yolov3檔案夾下,使用pipenv shell建立該檔案夾下的虛拟環境。
pipenv shell
-
安裝yolov3所需環境
源址中提到所需的環境和安裝方式,報Error.1的錯誤
pip3 install torch===1.3.1 torchvision===0.4.2 -f https://download.pytorch.org/whl/torch_stable.html
pip3 install opencv-python
pip3 install tqdm
pip3 install matplotlib
安裝完成後都會有Successfully installed xxx的提示,numpy在安裝torch時已經安裝,matplotlib是程式中畫圖有用到
收集資料
-
一些公開資料(持續更新)
紅細胞資料集
螺母資料集
昆蟲資料集
-
收集自己資料
若不想收集資料的話可以使用上述資料。如果想訓練自己特定的目标時,則需要先收集資料。
選擇免費無水印的圖檔庫pixabay,相應的收集參照教程
pycharm建立一個collect.py
pixabay的組織形式有點變化,在上述教程上稍微做了些改動,主要是連結位址的變化,可參看源碼
運作成功後如下,從圖檔第3頁開始總共下載下傳1頁
下載下傳完成後,先删除一些無效圖檔或不相關圖檔,再進行标注,标注工具LabelImg
可以在view裡面設定自動儲存等,快捷鍵d下一張圖,a上一張圖,w框選器
标注完成後更改儲存路徑,每一張圖檔都有對應的一張xml的
進行配置
-
資料拷貝至data目錄下
本次訓練采用紅細胞來訓練,可參考,下載下傳後的資料放到Data檔案夾中并将JPEGImages重命名為Images
-
劃分資料
運作根目錄下的maketxt.py将資料集劃分,再運作labelPy.py擷取圖像路徑及标注資訊
-
配置檔案
配置訓練資料和網絡結構,在data檔案夾下添加ReadBlood.data 以及ReadBlood.names
ReadBlood.data
classes=1
train=data/train.txt
valid=data/test.txt
names=data/RedBlood.names
backup=backup/
ReadBlood.names
RedBloodCeil
在cfg檔案夾yolov3-tiny.cfg配置搜尋yolo,更改所有[yolo]下的classes和上面一個filters,隻需更改一個
同時更改cfg中的batch類
執行訓練
-
準備權重檔案
直接運作會報錯,需準備權重檔案,參照Solution.2下載下傳權重yolov3-tiny.weighs 并放于weights檔案夾下
-
執行訓練
在pycharm的terminal中運作下列代碼
python train.py --data data/RedBlood.data --cfg cfg/yolov3-tiny.cfg --weights weights/yolov3-tiny.weights --epochs 10
能夠開始訓練,如果安裝了CUDNN CUDA的話能夠看到GPU的使用情況,此處用的為CPU訓練~~有示例未使用了轉換的權重檔案進行處理,詳見Expend.3
訓練完成後的顯示上圖,并在文檔中生成一個best.pt的權重檔案
同時我用帶GPU的電腦訓練了另一類資料,效果還可以,訓練完成結果如上。
測試訓練結果
在images裡面随機挑幾張圖檔放入simple中,運作如下指令
python detect.py --data data/rbc.data --cfg cfg/yolov3-tiny.cfg --weights weights/best.pt
在output裡面有一系列檢測結果,可以看到訓練的效果一般很多誤檢測。
拓展
Expend.1 為什麼不用AnaConda來建構環境?
使用pipenvl而不用Anaconda的原因是因為之前在做别的項目時,在pyinstaller打包exe時使用pipenv建構的純淨環境能夠極大的減少exe的大小。是以一直使用pipenv建構虛拟環境,如果沒有這方面需求的可以考慮直接用AnaConda
Expend.2 為什麼使用yolov3-tiny.cf來配置?
所需的gpu資源小
Expend.3 使用改造後的weights進行finetune?
之前配置過c++版本的yolov3 生成有.exe的darknet
在powershell中運作可以得到yolov3-tiny.conv.15
./darknet partial cfg/yolov3-tiny.cfg yolov3-tiny.weights yolov3-tiny.conv.15 15
在源碼中附有該conv.15
Expend.4 攝像頭檢測
首先将detect.py中的資料改一下
再運作
python detect.py --cfg cfg/yolov3-tiny.cfg --weights weights/best.pt --source 0
錯誤彙總
Error.1:yoloV3運作需要上述環境,直接參照安裝源址或在pycharm裡面安裝時pytorch報安裝失敗
Solution.1:去官方網站上下載下傳安裝指令
Error.2:不轉換權重時出現的錯誤
預設權重檔案為weights/ultralytics68.pt,而直接運作時,發現在weights檔案夾下無該類檔案,故進行下載下傳,而國内又被屏蔽。是以需要自己下載下傳後轉換
Solution.2:
官網下載下傳權重檔案
小結
上述源碼連結還有很多待完善的部分,如下:
problem.1:直接用下載下傳的weight和轉換後conv.15訓練的差別多大,或者說finetune的技巧?(貌似conv.15是保留相應的前15層權重最後一層不要??)
problem.2:如何用我訓練的資料連接配接攝像頭進行動态識别? 參見Expend.4
problem.3:粗略通熟的了解算法,以及能夠作哪些調整對訓練有比較大的幫助,減少時間、提高精度等等?
problem.4:如何部署到手機上進行操作?
以上問題一個個慢慢學習逐漸解決,首要目标!先能用再來優~附上張微信名片,歡迎交流和指導,再接再厲!