全流程机器视觉工程开发(二)PaddleDetection:拉框,然后开始训练模型
前言
我現(xiàn)在在準(zhǔn)備做一個(gè)全流程的機(jī)器視覺的工程,之前做了很多理論相關(guān)的工作。大概理解了機(jī)器視覺的原理,然后大概了解了一下,我發(fā)現(xiàn)現(xiàn)在的庫其實(shí)已經(jīng)很發(fā)展了,完全不需要用到非常多的理論,只需要知道開發(fā)過程就可以了,甚至paddlex已經(jīng)直接有了傻瓜式模型訓(xùn)練的軟件,所以我現(xiàn)在準(zhǔn)備來做一個(gè)全流程機(jī)器視覺工程開發(fā),不涉及過多理論。
書接上文,我們?cè)谙惹暗奈恼氯鞒虣C(jī)器視覺工程開發(fā)(一)環(huán)境準(zhǔn)備,paddledetection和labelme中說明了如何準(zhǔn)備PaddleDetection環(huán)境和Labelme工具,現(xiàn)在我們來做后續(xù)的開發(fā)工作。
到這里開始我們就可以開始嘗試訓(xùn)練模型了。當(dāng)然了,工欲善其事,必先利其器,我們?cè)谡接?xùn)練模型之前,先要學(xué)會(huì)如何獲得數(shù)據(jù)集。
在正式開始訓(xùn)練和使用之前,可以先來測(cè)試一下如何使用paddledetection庫。與傳統(tǒng)的python庫不同,PaddleDetection庫與其說是一個(gè)庫,不如說是一個(gè)類似于ffmpg那樣的一個(gè)程序,通過給程序入口點(diǎn)參數(shù)來控制PaddleDetection庫的行為
在當(dāng)前的文章中,所有的操作都是直接通過python直接操作具體的文件執(zhí)行的,所以我們現(xiàn)在在CMD上默認(rèn)你已經(jīng)轉(zhuǎn)到了PaddleDetection的目錄下,比如我的電腦上是這樣:
cd /d E:\Leventure\WorkShop\Python\PaddleDetection
然后所有的命令也都是通過cmd執(zhí)行的,當(dāng)然了你也可以通過腳本或者python終端去完成這些任務(wù),這些都是無所謂的。
注:為了寫文檔的方便,下文中為了編寫的方便,Paddledetection庫統(tǒng)一稱為PD庫,當(dāng)前目錄指的是PaddleDetection的庫根目錄
試用
首先我們安裝完成后,按照教程,先嘗試這個(gè)命令檢查庫的安裝情況:
python ppdet/modeling/tests/test_architectures.py
通過后會(huì)提示如下信息:
..........
----------------------------------------------------------------------
Ran 12 tests in 2.480s
OK (skipped=2)
在PD庫中,已經(jīng)提供了一些Demo圖片以供測(cè)試,就在當(dāng)前目錄下的demo文件夾中
我們這里取000000014439.jpg進(jìn)行測(cè)試,在cmd中輸入如下命令:
python tools/infer.py -c configs/ppyolo/ppyolo.yml -o use_gpu=true weights=https://paddlemodels.bj.bcebos.com/object_detection/ppyolo.pdparams --infer_img=demo/000000014439.jpg
這里我暫時(shí)先不解釋這條命令做了什么,我們先來看結(jié)果。結(jié)果輸出到當(dāng)前目錄/output文件夾下
開發(fā)流程
開發(fā)一個(gè)訓(xùn)練模型,我們大概有如下流程:
- 使用labelme對(duì)數(shù)據(jù)集標(biāo)簽進(jìn)行劃分
- 轉(zhuǎn)換labelme數(shù)據(jù)集到COCO數(shù)據(jù)集或者VOC數(shù)據(jù)集,這里轉(zhuǎn)換成COCO數(shù)據(jù)集
- 修改PaddleDetection的配置文件,以我們給定的數(shù)據(jù)集為訓(xùn)練集
- 進(jìn)行訓(xùn)練
- 進(jìn)行預(yù)測(cè)
使用labelme 對(duì)數(shù)據(jù)集進(jìn)行劃分
這個(gè)部分比較簡單,參考圖片標(biāo)注工具Labelme的安裝及使用方法
然后我們獲得了圖片和標(biāo)簽,我們畫好文件夾,如圖:
圖片在文件夾:
標(biāo)簽在
J:\Train\labelme_annos
轉(zhuǎn)換labelme數(shù)據(jù)集到COCO數(shù)據(jù)集或者VOC數(shù)據(jù)集,這里轉(zhuǎn)換成COCO數(shù)據(jù)集
我們這里要用到PD項(xiàng)目下的工具,tools/x2coco.py
我們?cè)赾md中輸入:
python tools/x2coco.py --dataset_type labelme --json_input_dir J:\Train\labelme_annos --image_input_dir J:\Train\labelme_imgs --output_dir J:\Train\cocome --train_proportion 0.8 --val_proportion 0.2 --test_proportion 0.0
上面每一個(gè)--標(biāo)簽 空格后面的內(nèi)容就是參數(shù)的內(nèi)容
--dataset_type :當(dāng)前轉(zhuǎn)換的數(shù)據(jù)類型
--json_input_dir:標(biāo)簽json文件的目錄路徑
--image_input_dir:圖片文件的目錄路徑
--output_dir:輸出路徑
--train_proportion:訓(xùn)練集數(shù)據(jù)占比
--val_proportion:評(píng)估集數(shù)據(jù)占比
--test_proportion:測(cè)試集數(shù)據(jù)占比
我們這里輸入這個(gè)命令,就會(huì)在J:\Train\cocome文件夾下創(chuàng)建一個(gè)COCO數(shù)據(jù)格式的數(shù)據(jù)集
修改PaddleDetection的配置文件,以我們給定的數(shù)據(jù)集為訓(xùn)練集
在使用之前,我們要先選定一個(gè)模型
能用的模型有挺多的,我們這里以yolov3為例
找到y(tǒng)olov3_mobilenet_v1_270e_coco的配置文件,在.configs/yolov3/yolov3_mobilenet_v1_270e_coco.yml
這里這個(gè)../datasets/coco_detection.yml就是當(dāng)前這個(gè)模型配置數(shù)據(jù)集的目錄,我們轉(zhuǎn)到這個(gè)文件
./configs/datasets/coco_detection.yml
這里我已經(jīng)改了,你可以按照我給的目錄和注釋自己修改。
到此就已經(jīng)配置好了我們想要的數(shù)據(jù)集。
進(jìn)行訓(xùn)練
進(jìn)行訓(xùn)練的話,比較簡單,就是直接調(diào)庫。
python -u tools/train.py -c configs/yolov3/yolov3_mobilenet_v1_270e_coco.yml --eval
這里的configs路徑是根據(jù)我們前面挑選和使用的模型來進(jìn)行修改,不同的模型有不同的優(yōu)勢(shì),準(zhǔn)確度或者訓(xùn)練時(shí)間或者mAP值都不同,這里我們不關(guān)心細(xì)節(jié),只關(guān)心結(jié)果。
這里就已經(jīng)開始進(jìn)行了訓(xùn)練,這里可以看到需要訓(xùn)練好幾個(gè)小時(shí),慢慢等吧。
等訓(xùn)練結(jié)束后,輸入命令
python -u tools/export_model.py -c configs/yolov3/yolov3_mobilenet_v1_270e_coco.yml --output_dir=./inference_model
導(dǎo)出這個(gè)模型,當(dāng)然了這個(gè)模型也會(huì)保存在C盤一個(gè)臨時(shí)位置,后面再訓(xùn)練模型的話會(huì)把原先這個(gè)模型覆蓋掉也是很正常的。
導(dǎo)出之后,會(huì)導(dǎo)出一個(gè).pdparams文件,這個(gè)文件之后我們會(huì)用。
進(jìn)行預(yù)測(cè)
進(jìn)行預(yù)測(cè)的命令也很簡單,這個(gè)時(shí)候我們就可以來看看我們本文開頭的那個(gè)測(cè)試命令了:
python tools/infer.py -c configs/ppyolo/ppyolo.yml -o use_gpu=true weights=https://paddlemodels.bj.bcebos.com/object_detection/ppyolo.pdparams --infer_img=demo/000000014439.jpg
我們通過這個(gè)infer.py來進(jìn)行的預(yù)測(cè)工作,參數(shù)列表如下:
-c :模型的配置文件
-o : use_gpu=true 是否使用gpu weights= 用什么模型,這里我們可以使用我們自己訓(xùn)練的,網(wǎng)上實(shí)際上也提供了一些訓(xùn)練好的模型,當(dāng)你在初始化訓(xùn)練的時(shí)候?qū)嶋H上已經(jīng)把訓(xùn)練好的模型下載到你本地了,訓(xùn)練完成后你也可以自行導(dǎo)出到本地。你可以自己找找
--infer_img :需要推測(cè)的圖片
在這里插入圖片描述
總結(jié)
以上是生活随笔為你收集整理的全流程机器视觉工程开发(二)PaddleDetection:拉框,然后开始训练模型的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 5分钟教会你如何在生产环境debug代码
- 下一篇: 大数据技术发展史