英文數據集txt_YOLOv5在建筑工地中安全帽佩戴檢測的應用(已開源+數據集)

點擊上方“計算機視覺cv”即可“進入公眾號”

重磅干貨第一時間送達

前言

隨著人工智能的發展,現在越來越多的場景需要人工智能。在工廠的廠區中以安全為首,但工人普遍缺乏佩戴安全帽意識;工廠環境復雜,有各種各樣的禁止進入的區域,普通的圖像識別算法很難實現;加上使用傳統的人工監管存在諸多缺點。

基于計算機視覺的安全帽自動識別技術設計通過在施工現場布設視頻監控設備或利用現有的施工監控設備,采用機器視覺的相關方法進行安全帽的自動識別,可以實現對作業人員安全帽佩戴情況信息的全程快速識別,在降低監管費用的同時提升了監管信息化水平。

項目鏈接:

https://github.com/PeterH0323/Smart_Construction

數據集鏈接:

https://github.com/njvisionpower/Safety-Helmet-Wearing-Dataset

Smart_Construction

該項目是使用 YOLOv5 來訓練在智能工地安全領域中頭盔目標檢測的應用, 先來一波演示!ac590c1e479f977f96312e3c05903810.png08ea4c853fb2e13cb52b5e7c9e70da3b.png4954da4f940cbf07d3a45596fb1cfe4f.png98c891fc1d611593e1d1996aa0848737.png

指標

yolov5s 為基礎訓練,epoch = 50

分類PRmAP0.5
總體0.8840.8990.888
人體0.8460.8930.877
0.8890.8830.871
安全帽0.9170.9210.917

對應的 yolov5s 權重文件:百度云:https://pan.baidu.com/s/1ELPhtW-Q4G8UqEr4YrV_5A,提取碼: b981


yolov5m 為基礎訓練,epoch = 100

分類PRmAP0.5
總體0.8860.9150.901
人體0.8440.9060.887
0.90.9110.9
安全帽0.9130.9290.916

對應的 yolov5m 權重文件:百度云:https://pan.baidu.com/s/10hlKrgpxVsw4d_vHnPHwEA,提取碼: psst


yolov5l 為基礎訓練,epoch = 100

分類PRmAP0.5
總體0.8920.9190.906
人體0.8560.9140.897
0.8930.9130.901
安全帽0.9270.9290.919

對應的 yolov5l 權重文件:百度云:https://pan.baidu.com/s/1iMZkRNXY1fowpQCcapFDqw,提取碼: a66e


1.YOLO v5訓練自己數據集教程

使用的數據集:Safety-Helmet-Wearing-Dataset,感謝這位大神的開源數據集!

本文結合 YOLOv5官方教程 來寫

環境準備

首先確保自己的環境:

    Python >= 3.7
Pytorch == 1.5.x

訓練自己的數據

提示:

關于增加數據集分類的方法,請看【5. 增加數據集的分類】


1.1 創建自己的數據集配置文件

因為我這里只是判斷 【人沒有帶安全帽】、【人有帶安全帽】、【人體】 3個類別 ,基于 data/coco128.yaml 文件,創建自己的數據集配置文件 custom_data.yaml


#?訓練集和驗證集的?labels?和?image?文件的位置
train:?./score/images/train
val:?./score/images/val

#?number?of?classes
nc:?3

#?class?names
names:?['person',?'head',?'helmet']

1.2 創建每個圖片對應的標簽文件

使用標注工具類似于 Labelbox 、CVAT、精靈標注助手 標注之后,需要生成每個圖片對應的 .txt 文件,其規范如下:

  • 每一行都是一個目標
  • 類別序號是零索引開始的(從0開始)
  • 每一行的坐標 class x_center y_center width height 格式
  • 框坐標必須采用歸一化的 xywh格式(從01)。如果您的框以像素為單位,則將x_centerwidth除以圖像寬度,將y_centerheight除以圖像高度。代碼如下:
import?numpy?as?np
def?convert(size,?box):
????"""
????將標注的?xml?文件生成的【左上角x,左上角y,右下角x,右下角y】標注轉換為yolov5訓練的坐標
????:param size:?圖片的尺寸:?[w,h]
????:param?box:?anchor?box?的坐標?[左上角x,左上角y,右下角x,右下角y,]
????:return:?轉換后的?[x,y,w,h]
????"""

????x1?=?int(box[0])
????y1?=?int(box[1])
????x2?=?int(box[2])
????y2?=?int(box[3])

????dw?=?np.float32(1.?/?int(size[0]))
????dh?=?np.float32(1.?/?int(size[1]))

????w?=?x2?-?x1
????h?=?y2?-?y1
????x?=?x1?+?(w?/?2)
????y?=?y1?+?(h?/?2)

????x?=?x?*?dw
????w?=?w?*?dw
????y?=?y?*?dh
????h?=?h?*?dh
????return?[x,?y,?w,?h]

生成的 .txt 文件放置的名字是圖片的名字,放置在 label 文件夾中,例如:

./score/images/train/00001.jpg  # image
./score/labels/train/00001.txt # label

生成的 .txt 例子:

1 0.1830000086920336 0.1396396430209279 0.13400000636465847 0.15915916301310062
1 0.5240000248886645 0.29129129834473133 0.0800000037997961 0.16816817224025726
1 0.6060000287834555 0.29579580295830965 0.08400000398978591 0.1771771814674139
1 0.6760000321082771 0.25375375989824533 0.10000000474974513 0.21321321837604046
0 0.39300001866649836 0.2552552614361048 0.17800000845454633 0.2822822891175747
0 0.7200000341981649 0.5570570705458522 0.25200001196935773 0.4294294398277998
0 0.7720000366680324 0.2567567629739642 0.1520000072196126 0.23123123683035374

1.3 文件放置規范

文件樹如下

ab5be73c66ddbaca773902ffd9498866.png
在這里插入圖片描述

1.4 聚類得出先驗框(Yolov5 內部已做適配,可選)

使用代碼 ./data/gen_anchors/clauculate_anchors.py ,修改數據集的路徑

FILE_ROOT?=?r"xxx"?#?根路徑
ANNOTATION_ROOT?=?r"xxx"??#?數據集標簽文件夾路徑
ANNOTATION_PATH?=?FILE_ROOT?+?ANNOTATION_ROOT

跑完會生成一個文件 anchors.txt,里面有得出的建議先驗框:

Best Accuracy = 79.72%

Best Anchors = [[14.74, 27.64], [23.48, 46.04], [28.88, 130.0], [39.33, 148.07], [52.62, 186.18], [62.33, 279.11], [85.19, 237.87], [88.0, 360.89], [145.33, 514.67]]

1.5 選擇一個您需要的模型

在文件夾 ./models 下選擇一個你需要的模型然后復制一份出來,將文件開頭的 nc = 修改為數據集的分類數,下面是借鑒 ./models/yolov5s.yaml來修改的

#?parameters
nc:?3??#?number?of?classes?????<============?修改這里為數據集的分類數
depth_multiple:?0.33??#?model?depth?multiple
width_multiple:?0.50??#?layer?channel?multiple

#?anchors
anchors:?#?<============?根據?./data/gen_anchors/anchors.txt?中的?Best?Anchors?修改,需要取整(可選)
??-?[14,27,?23,46,?28,130]?
??-?[39,148,?52,186,?62.,279]?
??-?[85,237,?88,360,?145,514]

#?YOLOv5?backbone
backbone:
??#?[from,?number,?module,?args]
??[[-1,?1,?Focus,?[64,?3]],??#?0-P1/2
???[-1,?1,?Conv,?[128,?3,?2]],??#?1-P2/4
???[-1,?3,?BottleneckCSP,?[128]],
???[-1,?1,?Conv,?[256,?3,?2]],??#?3-P3/8
???[-1,?9,?BottleneckCSP,?[256]],
???[-1,?1,?Conv,?[512,?3,?2]],??#?5-P4/16
???[-1,?9,?BottleneckCSP,?[512]],
???[-1,?1,?Conv,?[1024,?3,?2]],??#?7-P5/32
???[-1,?1,?SPP,?[1024,?[5,?9,?13]]],
???[-1,?3,?BottleneckCSP,?[1024,?False]],??#?9
??]

#?YOLOv5?head
head:
??[[-1,?1,?Conv,?[512,?1,?1]],
???[-1,?1,?nn.Upsample,?[None,?2,?'nearest']],
???[[-1,?6],?1,?Concat,?[1]],??#?cat?backbone?P4
???[-1,?3,?BottleneckCSP,?[512,?False]],??#?13

???[-1,?1,?Conv,?[256,?1,?1]],
???[-1,?1,?nn.Upsample,?[None,?2,?'nearest']],
???[[-1,?4],?1,?Concat,?[1]],??#?cat?backbone?P3
???[-1,?3,?BottleneckCSP,?[256,?False]],??#?17

???[-1,?1,?Conv,?[256,?3,?2]],
???[[-1,?14],?1,?Concat,?[1]],??#?cat?head?P4
???[-1,?3,?BottleneckCSP,?[512,?False]],??#?20

???[-1,?1,?Conv,?[512,?3,?2]],
???[[-1,?10],?1,?Concat,?[1]],??#?cat?head?P5
???[-1,?3,?BottleneckCSP,?[1024,?False]],??#?23

???[[17,?20,?23],?1,?Detect,?[nc,?anchors]],??#?Detect(P3,?P4,?P5)
??]

1.6 開始訓練

這里選擇了 yolov5s 模型進行訓練,權重也是基于 yolov5s.pt 來訓練

python?train.py?--img?640?--batch?16?--epochs?10?--data?./data/custom_data.yaml?--cfg?./models/custom_yolov5.yaml?--weights?./weights/yolov5s.pt

其中,yolov5s.pt 需要自行下載放在本工程的根目錄即可,下載地址:https://drive.google.com/open?id=1Drs_Aiu7xx6S-ix95f9kNsA6ueKRpN2J

1.7 看訓練之后的結果

訓練之后,權重會保存在 ./runs 文件夾里面的每個 exp 文件里面的 weights/best.py ,里面還可以看到訓練的效果2ef3a5284c2572df758dd605db11a35c.png


2. 偵測

偵測圖片會保存在 ./inferenct/output/ 文件夾下

運行命令:

python?detect.py?--source???0??#?webcam
????????????????????????????file.jpg??#?image?
????????????????????????????file.mp4??#?video
????????????????????????????path/??#?directory
????????????????????????????path/*.jpg??#?glob
????????????????????????????rtsp://170.93.143.139/rtplive/470011e600ef003a004ee33696235daa??#?rtsp?stream
????????????????????????????http://112.50.243.8/PLTV/88888888/224/3221225900/1.m3u8??#?http?stream

例如使用我的 s 權重檢測圖片,可以運行以下命令,偵測圖片會保存在 ./inferenct/output/ 文件夾下

python?detect.py?--source?圖片路徑?--weights?./weights/helmet_head_person_s.pt

3. 檢測危險區域內是否有人

3.1 危險區域標注方式

我這里使用的是 精靈標注助手標注,生成了對應圖片的 json 文件

3.2 執行偵測

偵測圖片會保存在 ./inferenct/output/ 文件夾下

運行命令:

python?area_detect.py?--source?./area_dangerous?--weights?./weights/helmet_head_person_s.pt

3.3 效果:在危險區域里面的人體會被 紅色框 選出來

7276a4941e78fe3b09c73dbdde793ad2.pnga53f304060d82f7aaceb50693da1ca39.png


4. 生成 ONNX

4.1 安裝 onnx

pip?install?onnx

4.2 執行生成

python?./models/export.py?--weights?./weights/helmet_head_person_s.pt?--img?640?--batch?1

onnxtorchscript 文件會生成在 ./weights 文件夾中


5. 增加數據集的分類

關于增加數據集分類的方法:

SHWD 數據集里面沒有 person 的類別,先將現有的自己的數據集執行腳本生成 yolov5 需要的標簽文件 .txt,之后再用 yolov5x.pt 加上 yolov5x.yaml ,使用指令檢測出人體

python?detect.py?--save-txt?--source?./自己數據集的文件目錄?--weights?./weights/yolov5x.pt

yolov5 會推理出所有的分類,并在 inference/output 中生成對應圖片的 .txt 標簽文件;

修改 ./data/gen_data/merge_data.py 中的自己數據集標簽所在的路徑,執行這個python腳本,會進行 person 類型的合并


總結

以上就是 YOLOv5 實現 智慧工地安全帽和危險區域檢測系統 的全部內容。歡迎 star ???

本文轉載自csdn博客,文章鏈接:https://blog.csdn.net/hxj0323/article/details/109257255

67ef3378a2490bac1608209887b8d237.png

7938c5f8eeb8bf574bd196f200e76c1c.png

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/534198.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/534198.shtml
英文地址,請注明出處:http://en.pswp.cn/news/534198.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

浪潮集團PHP,浪潮php實習第一天(初識php)

先推薦幾個比較好的php初學者資料php manual.chm(可在csdn下載頻道下載&#xff0c;可查到大部分函數)比較好的開發工具1 eclipse PDT(對eclipse比較熟悉的比較適應)2.zendStudio(公認的最好的php集成開發環境)php沒有想象中的那么難學&#xff0c;不僅僅是它的語法&#xff0c…

檢測到目標url存在內部ip地址泄露_Cendertron,動態爬蟲與敏感信息泄露檢測

Cendertron&#xff0c;動態爬蟲與敏感信息泄露檢測Cendertron Crawler RendertronCendertron https://url.wx-coder.cn/HinPM 是基于 Puppeteer 的 Web 2.0 動態爬蟲與敏感信息泄露檢測工具。其依托于 xe-crawler 的通用爬蟲、調度與緩存模型&#xff0c;新增了 Monkey Test…

wamp2 php配置,wamp安裝后自定義配置的方法

WampServer是目前應用非常廣泛的PHP集成開發環境&#xff0c;本文就來講述Wamp安裝后自定義配置的方法。供大家參考借鑒。具體如下&#xff1a;wamp2.5安裝完畢后&#xff0c;自己手動重新設置了apache的默認根目錄。但是發現本機可以訪問&#xff0c;別人不能訪問。提示信息為…

屏幕壞點檢測圖片_iPhone新機如何檢測質量 iPhone新機檢測質量步驟【詳解】

iPhone新機怎么檢測好壞_iPhone新機檢測質量方法 說實話&#xff0c;蘋果對于iPhone的品控把握確實一代不如一代&#xff0c;特別是去年發布的iPhone7系列&#xff0c;很多用戶都反映自己新買的手機存在劃痕、屏幕發黃、掉漆等問題。那么當我們購買一部全新的iPhone7時&#xf…

php 安全mysql,關于php:我從mysql注入安全嗎?

本問題已經有最佳答案&#xff0c;請猛點這里訪問。這是否足以避免SQL注入&#xff1f;這里只需要mysql_real_escape_string()方法。在將數據插入數據庫之前&#xff0c;不應該執行htmlentities()或urlencode()。這些方法通常是在呈現您提供給用戶的視圖期間編寫的代碼。避免SQ…

excel單元格斜線_怎么在excel中畫斜線?怎么在excel表格中畫斜線?

在excel表格中畫斜線的技巧教程&#xff1a;1.在Excel中打開一個空白工作簿。 2.您可以在任何大小的單元格中執行此操作&#xff0c;但是如果先將其增大則更容易理解。為此&#xff0c;我們只需單擊并按住第1行和第2行之間的線&#xff0c;然后將其拖動到所需的高度即可。然后對…

php報表數據打印機,通過打印機打印帶打印功能的php表

我有以下php表,我如何只在php表中添加打印功能&#xff1f;點擊一個按鈕,下面的表格通過打印機打印,我試過’CTRL P’,我只得到頁面的html部分示例頁眉,頁腳,導航欄,而不是結果php結果echo "FILEIDFirstnameLastnameIssue DateInterest RateTermsBalance OutstandingBalan…

xbox one s驅動_理想照進現實 理想ONE開始接受預定

2016年4月22日&#xff0c;車和家創始人&CEO李想在源碼資本第二屆碼會年會首談車和家&#xff0c;改造城市出行。車和家 創始人&CEO 李 想2016年碼會年會演講2019年4月10日&#xff0c;增程式智能電動車「理想ONE」正式公布售價并開始接受預訂&#xff0c;并將于2019年…

two+few+arguments+php,PHP5.5 ~ PHP7.2 新特性整理

PHP5.5 ~ PHP7.2 新特性整理一、從PHP 5.5.x 移植到 PHP 5.6.x使用表達式定義常量在之前的 PHP 版本中&#xff0c; 必須使用靜態值來定義常量&#xff0c;聲明屬性以及指定函數參數默認值。 現在你可以使用包括數值、字符串字面量以及其他常量在內的數值表達式來 定義常量、聲…

date設置時間_解決 IDEA 無法找到 java.util.Date 的問題

原文首發于 https://studyidea.cn/問題最近在項目中頻繁使用到 java.util.Date&#xff0c;但是使用 IDEA 提示查找 Date 類&#xff0c;卻無法找到 java.util.Date。可以看到&#xff0c;智能提示的結果沒有 java.util.Date。沒辦法&#xff0c;只能暫時手動導入該包。最近閑下…

mysql插入語句例句,一句簡單的MySql插入語句怎么寫 ?

守候你守候我insert into 表名 values(default,"名字","2011-04-15 12:22:25"); //default可以換成null------------------------------insert into 表名 (name,datetime) values("名字","2011-04-15 12:22:25");使用SQL語法大寫&…

vue key重復_【第2112期】 import { reactive } from #39;vue#39;

前言今日早讀文章由Anthony Fu授權分享。Anthony Fu&#xff0c;是 Vue 的 Core Team 的一員&#xff0c;在 Vue主要負責 vue/composition-api 這個項目的維護。這是一個面向 Vue 2 的插件&#xff0c;它在 Vue 2 中增加了 Vue 3 的 Composition API 的支持。最近也加入了 Vite…

matlab系統穩定性分析,控制系統穩定性分析的MATLAB實現

收稿日期 :200706220 基金項目 :周口師范學院青年基金資助項目(No. ZKNUQN200621) 作者簡介 :劉  偉(1976 - ) ,女 ,河南太康人 ,助教 ,碩士 ,主要從事電力系統及其自動化仿真研究. 第 25 卷 第 2 期 周口師范學院學報 2008 年 3 月 Vol. 25 No. 2 Journal of Zhoukou Normal …

路由器下一跳地址怎么判斷_網絡基本功三:細說路由器

介紹以太網交換機工作在第二層即數據鏈路層&#xff0c;用于在同一網絡內部轉發以太網幀。但是&#xff0c;當源和目的IP地址位于不同網絡時&#xff0c;以太網幀必須發送給路由器。路由器負責在不同網絡間傳輸報文&#xff0c;通過路由表來決定最佳轉發路徑。當主機將報文發送…

HTML多選mysql,html多選下拉框 | 學步園

一個jquery ui,實現html的多選下拉框&#xff0c;在下拉里面加checkbox&#xff0c;不改變頁面的提交特性&#xff0c;只是動態的改變select選中的多選數據。jsp頁面例子&#xff1a;pageEncoding"UTF-8" import"java.util.*,java.text.*"%>String path…

利用逆矩陣解線性方程組_經典Jacobi方法用于求解矩陣特征值

1、引言求解線性方程組在許多領域中都有重要應用&#xff0c;寫成矩陣的形式&#xff1a; 。求解 可以寫成&#xff1a; &#xff0c;這里需要求解矩陣 的逆。《線性代數》中給出的方法主要有兩類&#xff1a;1、設置增廣矩陣&#xff0c;利用高斯消元法&#xff0c;通過初等行…

filename: core/loader.php,使用第三方包后出現的這個錯誤,你們都遇到過嗎?

使用了一些第三方包&#xff0c;經常會發現&#xff0c;引入某些第三方包后(比如在laravel5.6中引入viacreative/sudo-su)&#xff0c;使用命令行工具會遇到這樣的錯誤提示&#xff0c;卸載了第三方包后重新安裝vendor目錄問題立馬解決。真是把人頭發都愁白了&#xff1a;PHP F…

python函數的作用域_python學習第五篇 函數 變量作用域

原博文 2019-07-18 23:40 ? 函數 函數是組合好的&#xff0c;可以重復使用的&#xff0c;用來實現單一或相關聯功能的代碼片段作用 能提高應用的模塊性和代碼的重復利用率函數的創建 第一函數的規則 1.函數代碼塊一def關鍵字開頭&#xff0c;后接函數標識符名稱和圓括號‘&…

js post中文亂碼 php,AJAX之POST數據中文亂碼如何解決

本文主要和大家分享AJAX之POST數據中文亂碼如何解決&#xff0c;前端使用encodeURI進行編碼&#xff0c;希望能幫助到大家。var param encodeURI(param);$.ajax({url: url,methodtype: "POST",async: false,timeout: 60000,contentType: "application/json&quo…

python遞歸 數字全排列_利用遞歸實現全排列(python)

利用遞歸實現全排列(python) """ 利用遞歸實現全排列 第一個位置可能有n種可能&#xff0c;第二個位置可能 有n-1種可能...... 代碼思路就是第一個位置可以和n個元素交換&#xff0c; 第二個元素可以和n-1個元素進行交換&#xff0c;到最 后一個輸出這次排列&am…