基于YOLOv8的摄像头下铁路工人安全作业检测系统

💡💡💡本文摘要:基于YOLOv8的铁路工人安全作业检测系统,属于小目标检测范畴,并阐述了整个数据制作和训练可视化过程,

 

博主简介

AI小怪兽,YOLO骨灰级玩家,1)YOLOv5、v7、v8优化创新,轻松涨点和模型轻量化;2)目标检测、语义分割、OCR、分类等技术孵化,赋能智能制造,工业项目落地经验丰富;

原创自研系列, 2024年计算机视觉顶会创新点

《YOLOv8原创自研》

《YOLOv5原创自研》

《YOLOv7原创自研》

23年最火系列,内涵80+优化改进篇,涨点小能手,助力科研,好评率极高

《YOLOv8魔术师》

 《YOLOv7魔术师》

《YOLOv5/YOLOv7魔术师》

《RT-DETR魔术师》

应用系列篇:

《YOLO小目标检测》

《深度学习工业缺陷检测》

《YOLOv8-Pose关键点检测》

1.YOLOv8介绍

         Ultralytics YOLOv8是Ultralytics公司开发的YOLO目标检测和图像分割模型的最新版本。YOLOv8是一种尖端的、最先进的(SOTA)模型,它建立在先前YOLO成功基础上,并引入了新功能和改进,以进一步提升性能和灵活性。它可以在大型数据集上进行训练,并且能够在各种硬件平台上运行,从CPU到GPU。

具体改进如下:

  1. Backbone:使用的依旧是CSP的思想,不过YOLOv5中的C3模块被替换成了C2f模块,实现了进一步的轻量化,同时YOLOv8依旧使用了YOLOv5等架构中使用的SPPF模块;

  2. PAN-FPN:毫无疑问YOLOv8依旧使用了PAN的思想,不过通过对比YOLOv5与YOLOv8的结构图可以看到,YOLOv8将YOLOv5中PAN-FPN上采样阶段中的卷积结构删除了,同时也将C3模块替换为了C2f模块;

  3. Decoupled-Head:是不是嗅到了不一样的味道?是的,YOLOv8走向了Decoupled-Head;

  4. Anchor-Free:YOLOv8抛弃了以往的Anchor-Base,使用了Anchor-Free的思想;

  5. 损失函数:YOLOv8使用VFL Loss作为分类损失,使用DFL Loss+CIOU Loss作为分类损失;

  6. 样本匹配:YOLOv8抛弃了以往的IOU匹配或者单边比例的分配方式,而是使用了Task-Aligned Assigner匹配方式

框架图提供见链接:Brief summary of YOLOv8 model structure · Issue #189 · ultralytics/ultralytics · GitHub

2.铁路工人安全作业检测数据集介绍

该数据集用于正确检测工人、他们的反光背心和安全帽。该数据集有3222张图片,其中包含三个标签:工人、反光背心和安全帽。

用途举例:

  1. 可以判断是否有工人正在铁路上作业;
  2. 可以判断工人是否正确佩戴反光背心和安全帽规范作业。

部分数据集图片如下:

下图可以看出识别对象为小目标检测 

2.1 split_train_val.py

# coding:utf-8import os
import random
import argparseparser = argparse.ArgumentParser()
#xml文件的地址,根据自己的数据进行修改 xml一般存放在Annotations下
parser.add_argument('--xml_path', default='Annotations', type=str, help='input xml label path')
#数据集的划分,地址选择自己数据下的ImageSets/Main
parser.add_argument('--txt_path', default='ImageSets/Main', type=str, help='output txt label path')
opt = parser.parse_args()trainval_percent = 0.9
train_percent = 0.8
xmlfilepath = opt.xml_path
txtsavepath = opt.txt_path
total_xml = os.listdir(xmlfilepath)
if not os.path.exists(txtsavepath):os.makedirs(txtsavepath)num = len(total_xml)
list_index = range(num)
tv = int(num * trainval_percent)
tr = int(tv * train_percent)
trainval = random.sample(list_index, tv)
train = random.sample(trainval, tr)file_trainval = open(txtsavepath + '/trainval.txt', 'w')
file_test = open(txtsavepath + '/test.txt', 'w')
file_train = open(txtsavepath + '/train.txt', 'w')
file_val = open(txtsavepath + '/val.txt', 'w')for i in list_index:name = total_xml[i][:-4] + '\n'if i in trainval:file_trainval.write(name)if i in train:file_train.write(name)else:file_val.write(name)else:file_test.write(name)file_trainval.close()
file_train.close()
file_val.close()
file_test.close()

2.2 voc_label.py生成适合YOLOv8训练的txt

# -*- coding: utf-8 -*-
import xml.etree.ElementTree as ET
import pickle
import os
from os import listdir, getcwd
from os.path import join
sets = ['train','val','test']
classes = ['vest','helmet','worker']def convert(size, box):dw = 1. / size[0]dh = 1. / size[1]x = (box[0] + box[1]) / 2.0y = (box[2] + box[3]) / 2.0w = box[1] - box[0]h = box[3] - box[2]x = x * dww = w * dwy = y * dhh = h * dhreturn (x, y, w, h)
def convert_annotation(image_id):in_file = open('Annotations/%s.xml' % (image_id))out_file = open('labels/%s.txt' % (image_id), 'w')tree = ET.parse(in_file)root = tree.getroot()size = root.find('size')w = int(size.find('width').text)h = int(size.find('height').text)for obj in root.iter('object'):difficult = obj.find('difficult').textcls = obj.find('name').textif cls not in classes or int(difficult) == 1:continuecls_id = classes.index(cls)xmlbox = obj.find('bndbox')b = (float(xmlbox.find('xmin').text), float(xmlbox.find('xmax').text), float(xmlbox.find('ymin').text),float(xmlbox.find('ymax').text))bb = convert((w, h), b)out_file.write(str(cls_id) + " " + " ".join([str(a) for a in bb]) + '\n')
wd = getcwd()
print(wd)
for image_set in sets:if not os.path.exists('labels/'):os.makedirs('labels/')image_ids = open('ImageSets/Main/%s.txt' % (image_set)).read().strip().split()list_file = open('%s.txt' % (image_set), 'w')for image_id in image_ids:list_file.write('images/%s.jpg\n' % (image_id))convert_annotation(image_id)list_file.close()

3.如何训练YOLOv8

3.1 配置Railroad.yaml

ps:建议填写绝对路径


path: F:/ultralytics-RailroadWorkerDetection/data/Railroad # dataset root dir
train: train.txt  # train images (relative to 'path') 118287 images
val: val.txt  # val images (relative to 'path') 5000 images# number of classes
nc: 3# class names
names:0: vest1: helmet2: worker

3.2 如何训练

import warnings
warnings.filterwarnings('ignore')
from ultralytics import YOLOif __name__ == '__main__':model = YOLO('ultralytics/cfg/models/v8/yolov8.yaml')#model.load('yolov8n.pt') # loading pretrain weightsmodel.train(data='data/Railroad/Railroad.yaml',cache=False,imgsz=640,epochs=100,batch=32,workers=0,device='0',optimizer='SGD', # using SGDproject='runs/train',name='exp',)

3.3 训练可视化结果

F1_curve.png:F1分数与置信度(x轴)之间的关系。F1分数是分类的一个衡量标准,是精确率和召回率的调和平均函数,介于0,1之间。越大越好。

TP:真实为真,预测为真;

FN:真实为真,预测为假;

FP:真实为假,预测为真;

TN:真实为假,预测为假;

精确率(precision)=TP/(TP+FP)

召回率(Recall)=TP/(TP+FN)

F1=2*(精确率*召回率)/(精确率+召回率)

 PR_curve.png :PR曲线中的P代表的是precision(精准率)R代表的是recall(召回率),其代表的是精准率与召回率的关系。

预测结果: 

关注下方名片点击关注,源码获取途径。  

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/804544.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

3D模型在线轻量化工具

在计算机图形学领域,3D模型简化工具是一种强大的工具,用于减少模型的面数,以提高模型在渲染和处理过程中的性能。本文将全面介绍为何需要简化模型、简化的方法、常见的简化算法以及一款三维模型优化产品 的使用方法,帮助读者更好地…

tomcat处理Http请求流程的步骤

假设来我们在浏览器上输入: http://localhost:8080/my-web-mave/index.jsp ;在tomcat中是如何处理这个请求流程的: 1: 我们的请求被发送到本机端口8080,被在那里侦听的Coyote HTTP/1.1 Connector获得。 2:…

Ble的认证与授权

在BLE(Bluetooth Low Energy)中,认证(Authentication)和授权(Authorization)是确保设备间安全通信的重要概念。这两个过程通常是相互关联的,但它们的具体实现和需求可能会根据应用场景和安全要求而有所不同。 认证(Authentication) 认证是指在设备之间建立信任关系…

IP爆发出蓬勃生命力,泡泡玛特2023营收过亿IP达到10个

“原来我们是基于潮流在事情,后来是基于流行,然后我们现在想去做一个更大的圈,我们想基于快乐。”在2023年9月的一场采访中,泡泡玛特CEO王宁如是说。半年后,泡泡玛特交出了一份还不错的成绩单。近期,泡泡玛…

[StartingPoint][Tier1]Crocodile

Task 1 What Nmap scanning switch employs the use of default scripts during a scan? (哪些 Nmap 扫描开关在扫描期间使用默认脚本?) -sC Task 2 What service version is found to be running on port 21? 发现端口 21 上运行的服务版本是什么&#xff1f…

DEVOPS详解

一、简介 DevOps一词是由英文 Development(开发)和 Operations(运维)组合而成,但它所代表的理念和实践要比单独或组合的两个词广阔的多。DevOps 涵盖了开发、测试、安全、协作方式、数据分析、运维等许多方面。传统的开…

w1r3s 靶机学习

w1r3s 靶机学习 0x01 IP C for command kali ip 10.10.10.128victim ip 10.10.10.1290x02 开扫 C sudo nmap -sn 10.10.10.0/24-sn 多一步入侵和轻量级侦察 发送四项请求 -sL 列表扫描,多用于探测可用ip,广播扫描 –send-ip 时间戳请求&#xff0…

分贝和功率相关的概念

对于刚接触分贝 (dB) 的人来说,分贝 (dB) 的概念很困难且令人困惑,因为射频中经常涉及增益、功率、电压,再加上dB、dBm、dBW、瓦特、毫瓦等名词,且通常需要在线性值和分贝值之间来回转换,所以需要耐心地梳理他们之间的…

libcurl上手笔记-HTTP方法 GET、POST、PUT、DELETE

GET GET方法比较简单,使用一条语句设置即可。 curl_easy_setopt(curl, CURLOPT_HTTPGET, 1L); POST {//方法1 /*使用CURLOPT_POST时,会将方法设置成POST,但是默认还需要从stdin读取提交的内容 * 所以需要用CURLOPT_POSTFIELDSIZE显试设置不…

常见性能测试工具对比

在性能测试工作中,我们常常会遇到好几个工具,但是每一个工具都有自己的优势,一时间不知道怎么选择。 今天我们就将性能测试常用的工具进行对比,这样大家在选择工具的时候心里就有底啦! 阿里云PTS 性能测试PTS&#xff…

【群智能算法改进】一种改进的鹦鹉优化算法 改进鹦鹉优化器 IPO算法【Matlab代码#73】

文章目录 【获取资源请见文章第5节:资源获取】1. 原始鹦鹉优化算法PO2. 改进后的IPO算法2.1 自适应切换因子2.2 混合柯西和高斯变异 3. 部分代码展示4. 仿真结果展示5. 资源获取 【获取资源请见文章第5节:资源获取】 1. 原始鹦鹉优化算法PO 鹦鹉优化算法…

互联网人才现状分析

作者:哈哥撩编程(视频号、抖音、公众号同名) 新星计划全栈领域优秀创作者博客专家全国博客之星第四名超级个体COC上海社区主理人特约讲师谷歌亚马逊演讲嘉宾科技博主极星会首批签约作者 🏆 推荐专栏: 🏅…

C#操作MySQL从入门到精通(6)——对查询数据进行排序

前言 在和MySql数据库交互的过程中,查询数据是使用最频繁的操作,并且我们经常需要对查询到的数据进行排序后输出,比如我想查询1列数据的最小值,那么我可以将查询到的数据进行升序(从小到大)排列,然后取第一个数据就是最小值。本文详细介绍了对查询数据进行排序的各种操…

数学建模-最优包衣厚度终点判别法-二(K-Means聚类)

💞💞 前言 hello hello~ ,这里是viperrrrrrr~💖💖 ,欢迎大家点赞🥳🥳关注💥💥收藏🌹🌹🌹 💥个人主页&#xff…

【ZZULIOJ】1052: 数列求和4(Java)

目录 题目描述 输入 输出 样例输入 Copy 样例输出 Copy code 题目描述 输入n和a,求aaaaaa…aa…a(n个a),如当n3,a2时,222222的结果为246 输入 包含两个整数,n和a,含义如上述,你可以假定n和a都是小于10的非负整…

OpenLCA案例分析:环境影响与碳排放生命周期评估应用、GREET下载与安装、生物质能源的碳排放

目录 第一章 生命周期评价的理论基础 第二章 OpenLCA的安装使用及生命周期评估模型构建 第三章 GREET的介绍 第四章 生物质能源的碳排放 更多应用 生命周期分析是一种分析工具,它可帮助人们进行有关如何改变产品或如何设计替代产品方面的环境决策,即…

./build/examples/openpose/openpose.bin在windows中调用(步骤非常简单)

下载openpose:https://github.com/CMU-Perceptual-Computing-Lab/openpose/releases 打开进入models 这里面还缺几个模型 打开一个github项目:https://github.com/ihp-lab/OpenSense/blob/fefe13ccf250e4811f4f61edf0b212e4ded78d19/Interoperations/O…

【cocos creator】【编辑器插件】cocos creator文件复制时,解决cocos creator uuid冲突

!!!修改前先备份 1、将文件夹放在packages文件夹下 2、打开项目,选择要刷新uuid的文件夹 3、菜单栏点击 扩展->refresh-uuid 4、等控制台提示:资源uuid刷新完成,重启项目(!&#…

算法概述(一)

一、算法 在计算机领域里,算法是一系列程序指令,用于处理特定的运算和逻辑问题。 二、衡量算法的好坏重要标准 1、时间复杂度 2、空间复杂度 三、算法应用场景 1、运算 如:超大整数求积 2、查找 如:在度娘,谷歌上搜索…

小程序变更主体流程是怎样的?

小程序迁移变更主体有什么作用?“小程序主体变更”是指小程序账号开发者将其小程序项下业务交由其他开发者承接、运营和服务。主体变更完成后,小程序的运营权限、主体信息将发生变化。小程序迁移变更主体的条件有哪些?1、境外小程序不支持小程…