轉(zhuǎn)載自:3D視覺工坊
編輯:AI深度學(xué)習(xí)視線
教程來自:https://github.com/PeterH0323/Smart/_Construction
一、YOLO v5訓(xùn)練自己數(shù)據(jù)集教程
1.1 創(chuàng)建自己的數(shù)據(jù)集配置文件
1.2 創(chuàng)建每個圖片對應(yīng)的標(biāo)簽文件
1.3 文件放置規(guī)范
1.4 聚類得出先驗框(可選)
1.5 選擇一個你需要的模型
1.6 開始訓(xùn)練
1.7 看訓(xùn)練之后的結(jié)果
二、偵測
三、檢測危險區(qū)域內(nèi)是否有人
3.1 危險區(qū)域標(biāo)注方式
3.2 執(zhí)行偵測
3.3 效果:在危險區(qū)域里面的人體會被 紅色框 選出來
四、生成 ONNX
五、增加數(shù)據(jù)集的分類
該項目是使用 YOLOv5 v2.x 來訓(xùn)練在智能工地安全領(lǐng)域中頭盔目標(biāo)檢測的應(yīng)用,先來一波演示!
指標(biāo)
yolov5s 為基礎(chǔ)訓(xùn)練,epoch = 50
對應(yīng)的權(quán)重文件:https://pan.baidu.com/share/i.../_5A,提取碼: b981
yolov5m 為基礎(chǔ)訓(xùn)練,epoch = 100
對應(yīng)的權(quán)重文件:https://pan.baidu.com/share/i.../_vHnPHwEA,提取碼: psst
yolov5l 為基礎(chǔ)訓(xùn)練,epoch = 100
對應(yīng)的權(quán)重文件:https://pan.baidu.com/share/i...,提取碼: a66e
1
YOLOv5訓(xùn)練自己數(shù)據(jù)集教程
使用的數(shù)據(jù)集:Safety-Helmet-Wearing-Dataset ,感謝這位大神的開源數(shù)據(jù)集!
https://github.com/njvisionpo...
本文結(jié)合 YOLOv5官方教程 來寫
環(huán)境準(zhǔn)備
首先確保自己的環(huán)境:
Python >= 3.7
訓(xùn)練自己的數(shù)據(jù)
提示:
關(guān)于增加數(shù)據(jù)集分類的方法,請看【5. 增加數(shù)據(jù)集的分類】
1.1 創(chuàng)建自己的數(shù)據(jù)集配置文件
因為我這里只是判斷 【人沒有帶安全帽】、【人有帶安全帽】、【人體】 3個類別 ,基于 data/coco128.yaml 文件,創(chuàng)建自己的數(shù)據(jù)集配置文件 custom_data.yaml
# 訓(xùn)練集和驗證集的 labels 和 image 文件的位置
1.2 創(chuàng)建每個圖片對應(yīng)的標(biāo)簽文件
使用標(biāo)注工具類似于 Labelbox 、CVAT 、精靈標(biāo)注助手 標(biāo)注之后,需要生成每個圖片對應(yīng)的 .txt 文件,其規(guī)范如下:
每一行都是一個目標(biāo)
類別序號是零索引開始的(從0開始)
每一行的坐標(biāo) class x_center y_center width height 格式
框坐標(biāo)必須采用歸一化的 xywh格式(從0到1)。如果您的框以像素為單位,則將x_center和width除以圖像寬度,將y_center和height除以圖像高度。代碼如下:
import numpy as np
生成的 .txt 文件放置的名字是圖片的名字,放置在 label 文件夾中,例如:
./score/images/train/00001.jpg # image
生成的.txt例子
1 0.1830000086920336 0.1396396430209279 0.13400000636465847 0.15915916301310062
1.3文件放置規(guī)范
文件樹如下
1.4 聚類得出先驗框(Yolov5 內(nèi)部已做適配,可選)
使用代碼 ./data/gen_anchors/clauculate_anchors.py ,修改數(shù)據(jù)集的路徑
FILE_ROOT = r"xxx" # 根路徑
跑完會生成一個文件 anchors.txt,里面有得出的建議先驗框:
Best Accuracy = 79.72%
1.5 選擇一個您需要的模型
在文件夾 ./models 下選擇一個你需要的模型然后復(fù)制一份出來,將文件開頭的 nc = 修改為數(shù)據(jù)集的分類數(shù),下面是借鑒 ./models/yolov5s.yaml來修改的
# parameters
1.6 開始訓(xùn)練
這里選擇了 yolov5s 模型進行訓(xùn)練,權(quán)重也是基于 yolov5s.pt 來訓(xùn)練
pythontrain.py--img640--batch16--epochs10--data./data/custom_data.yaml--cfg./models/custom_yolov5.yaml--weights./weights/yolov5s.pt
其中,yolov5s.pt 需要自行下載放在本工程的根目錄即可,下載地址 官方權(quán)重
1.7 看訓(xùn)練之后的結(jié)果
訓(xùn)練之后,權(quán)重會保存在 ./runs 文件夾里面的每個 exp 文件里面的 weights/best.py ,里面還可以看到訓(xùn)練的效果
2
推斷
偵測圖片會保存在 ./inferenct/output/ 文件夾下
運行命令:
python detect.py --source 0 # webcam
例如使用我的 s 權(quán)重檢測圖片,可以運行以下命令,偵測圖片會保存在 ./inferenct/output/ 文件夾下
python detect.py --source 圖片路徑 --weights ./weights/helmet_head_person_s.pt
3
檢測危險區(qū)域內(nèi)是否有人
3.1 危險區(qū)域標(biāo)注方式
我這里使用的是 精靈標(biāo)注助手 標(biāo)注,生成了對應(yīng)圖片的 json 文件
3.2 執(zhí)行偵測
偵測圖片會保存在 ./inferenct/output/ 文件夾下
運行命令:
python area_detect.py --source ./area_dangerous --weights ./weights/helmet_head_person_s.pt
3.3 效果:在危險區(qū)域里面的人體會被 紅色框 選出來
生成 ONNX
4.1 安裝 onnx 庫
pip install onnx
4.2 執(zhí)行生成
python ./models/export.py --weights ./weights/helmet_head_person_s.pt --img 640 --batch 1
onnx 和 torchscript 文件會生成在 ./weights 文件夾中
增加數(shù)據(jù)集的分類
關(guān)于增加數(shù)據(jù)集分類的方法:
SHWD 數(shù)據(jù)集里面沒有 person 的類別,先將現(xiàn)有的自己的數(shù)據(jù)集執(zhí)行腳本生成yolov5需要的標(biāo)簽文件.txt,之后再用yolov5x.pt 加上 yolov5x.yaml ,使用指令檢測出人體
python detect.py --save-txt --source ./自己數(shù)據(jù)集的文件目錄 --weights ./weights/yolov5x.pt
yolov5
修改 ./data/gen_data/merge_data.py 中的自己數(shù)據(jù)集標(biāo)簽所在的路徑,執(zhí)行這個python腳本,會進行 person 類型的合并
本文僅做學(xué)術(shù)分享,如有侵權(quán),請聯(lián)系刪文。
審核編輯 黃昊宇
-
檢測
+關(guān)注
關(guān)注
5文章
4509瀏覽量
91626 -
深度學(xué)習(xí)
+關(guān)注
關(guān)注
73文章
5511瀏覽量
121366
發(fā)布評論請先 登錄
相關(guān)推薦
評論