【深度学习目标检测】五、基于深度学习的安全帽识别(python,目标检测)

深度学习目标检测方法则是利用深度神经网络模型进行目标检测,主要有以下几种:

R-CNN系列:包括R-CNN、Fast R-CNN、Faster R-CNN等,通过候选区域法生成候选目标区域,然后使用卷积神经网络提取特征,并通过分类器对每个候选区域进行分类。
SSD:Single Shot MultiBox Detector,通过在特征图上利用不同大小和形状的卷积核进行目标检测,同时预测目标的类别和位置。
YOLO:You Only Look Once,将目标检测问题转化为回归问题,通过将图像分割成网格单元,并预测每个单元中是否存在目标以及目标的位置和类别。
RetinaNet:通过引入Focal Loss解决目标检测中类别不平衡问题,提高了小目标的检测效果。

YOLOv8是一种用于对象检测的深度学习模型,它是YOLO系列模型的最新版本。本文介绍了基于Yolov8的任务的安全帽检测模型,包括训练过程和数据准备过程,同时提供了推理的代码。对准备计算机视觉相关的毕业设计的同学有着一定的帮助。

效果如下图(带了安全帽的类别是helmet,没带安全帽的head):

示例2:

一、yolov8安装

yolov8官方文档:主页 - Ultralytics YOLOv8 文档

安装部分参考:官方安装教程

二、数据集准备

本次使用的数据集是安全帽检测数据集,其包含的示例图片如下:

原数据集的格式为voc格式,来自aistudio平台,使用yolov8训练需要将voc格式转换为yolov8训练的格式,本文提供转换好的数据集连接:训练和验证图片、数据标签。

其中训练数据4000条,验证数据1000条,请将所有数据按照以下目录放置:

|-images|--|-train|--|-val|-labels|--|-train|--|-val

三、模型训练

1、数据集配置文件

在ultralytics/ultralytics/cfg/datasets目录下添加anquanmao.yaml,添加以下内容(path修改为自己的路径):

# Ultralytics YOLO 🚀, AGPL-3.0 license
# COCO 2017 dataset http://cocodataset.org by Microsoft
# Example usage: yolo train data=coco.yaml
# parent
# ├── ultralytics
# └── datasets
#     └── coco  ← downloads here (20.1 GB)# Train/val/test sets as 1) dir: path/to/imgs, 2) file: path/to/imgs.txt, or 3) list: [path/to/imgs1, path/to/imgs2, ..]
path: datasets/helmet/HelmetDetection-yolov8  #改成你的数据集路径,建议使用绝对路径
train: images/train 
val: images/val  
test: images/val # Classes
names:# 0: normal0: helmet1: head2: person

2、修改模型配置文件

在ultralytics/ultralytics/cfg/models/v8目录下添加yolov8n_helmet.yaml,添加以下内容:

# Ultralytics YOLO 🚀, AGPL-3.0 license
# YOLOv8 object detection model with P3-P5 outputs. For Usage examples see https://docs.ultralytics.com/tasks/detect# Parameters
nc: 3  # number of classes
scales: # model compound scaling constants, i.e. 'model=yolov8n.yaml' will call yolov8.yaml with scale 'n'# [depth, width, max_channels]n: [0.33, 0.25, 1024]  # YOLOv8n summary: 225 layers,  3157200 parameters,  3157184 gradients,   8.9 GFLOPss: [0.33, 0.50, 1024]  # YOLOv8s summary: 225 layers, 11166560 parameters, 11166544 gradients,  28.8 GFLOPsm: [0.67, 0.75, 768]   # YOLOv8m summary: 295 layers, 25902640 parameters, 25902624 gradients,  79.3 GFLOPsl: [1.00, 1.00, 512]   # YOLOv8l summary: 365 layers, 43691520 parameters, 43691504 gradients, 165.7 GFLOPsx: [1.00, 1.25, 512]   # YOLOv8x summary: 365 layers, 68229648 parameters, 68229632 gradients, 258.5 GFLOPs# YOLOv8.0n backbone
backbone:# [from, repeats, module, args]- [-1, 1, Conv, [64, 3, 2]]  # 0-P1/2- [-1, 1, Conv, [128, 3, 2]]  # 1-P2/4- [-1, 3, C2f, [128, True]]- [-1, 1, Conv, [256, 3, 2]]  # 3-P3/8- [-1, 6, C2f, [256, True]]- [-1, 1, Conv, [512, 3, 2]]  # 5-P4/16- [-1, 6, C2f, [512, True]]- [-1, 1, Conv, [1024, 3, 2]]  # 7-P5/32- [-1, 3, C2f, [1024, True]]- [-1, 1, SPPF, [1024, 5]]  # 9# YOLOv8.0n head
head:- [-1, 1, nn.Upsample, [None, 2, 'nearest']]- [[-1, 6], 1, Concat, [1]]  # cat backbone P4- [-1, 3, C2f, [512]]  # 12- [-1, 1, nn.Upsample, [None, 2, 'nearest']]- [[-1, 4], 1, Concat, [1]]  # cat backbone P3- [-1, 3, C2f, [256]]  # 15 (P3/8-small)- [-1, 1, Conv, [256, 3, 2]]- [[-1, 12], 1, Concat, [1]]  # cat head P4- [-1, 3, C2f, [512]]  # 18 (P4/16-medium)- [-1, 1, Conv, [512, 3, 2]]- [[-1, 9], 1, Concat, [1]]  # cat head P5- [-1, 3, C2f, [1024]]  # 21 (P5/32-large)- [[15, 18, 21], 1, Detect, [nc]]  # Detect(P3, P4, P5)

3、训练模型

使用如下命令训练模型,相关路径更改为自己的路径,建议绝对路径:

yolo detect train project=deploy name=yolov8_helmet exist_ok=False optimizer=auto val=True amp=True epochs=100  imgsz=640 model=ultralytics/ultralytics/cfg/models/v8/yolov8_helmet.yaml  data=ultralytics/ultralytics/cfg/datasets/anquanmao.yaml

4、验证模型

使用如下命令验证模型,相关路径根据需要修改:

yolo detect val imgsz=640 model=deploy/yolov8_helmet/weights/best.pt data=ultralytics/ultralytics/cfg/datasets/anquanmao.yaml

精度如下:

四、推理

训练好了模型,可以使用如下代码实现推理,将权重放到同级目录:

from PIL import Image
from ultralytics import YOLO# 加载预训练的YOLOv8n模型
model = YOLO('best.pt')# 在'bus.jpg'上运行推理
image_path = 'hard_hat_workers1.png'
results = model(image_path)  # 结果列表# 展示结果
for r in results:im_array = r.plot()  # 绘制包含预测结果的BGR numpy数组im = Image.fromarray(im_array[..., ::-1])  # RGB PIL图像im.show()  # 显示图像im.save('results.jpg')  # 保存图像

五、相关资料下载

您可以在推理代码下载本文训练好的权重和推理代码。

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

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

相关文章

Android audio pop 音产生和解决方法

一、pop音产生原因 pop noise其实是隔直电容被充电产生。 二、pop音解决办法 1.插入模拟LPF 一般比较困难,pop noise是由于音频路径上隔直电容两端上电时候的压差而导致快速充电产生的,一般是在Audio PA的输入RC LPF上作调整,通过减小串联…

Qt图像处理-基于OpenCv的图像的腐蚀、膨胀、打开、关闭

一、概述 膨胀、腐蚀、开、闭运算是数学形态学最基本的变换。 膨胀:把二值图像各1像素连接成分的边界扩大一层(填充边缘或0像素内部的孔); 腐蚀:把二值图像各1像素连接成分的边界点去掉从而缩小一层(可提取骨干信息,去掉毛刺,去掉孤立的0像素); 开:先腐蚀再膨胀…

[Stream]自定义的Collect筛选

这里使用map就是让map中的内容作用到s上去 然后我们在map(s->{})中的部分完成了筛选 并且返回一个Actor类型的值 import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.function.Function; import java.util.stream.Colle…

安装Nacos2.2.3集群

目录 一、传统方式安装 二、Docker安装 一、传统方式安装 1、配置jdk环境 vi /etc/profile JAVA_HOME/usr/local/java JRE_HOME/usr/local/java/jre CLASSPATH.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib PATH$JAVA_HOME/bin:$PATH export PATH JAVA_…

(第26天)Oracle 数据泵分析table_exists_action参数

前言 关于 Oracle 数据泵导入时目标端已存在表时,数据如何处理的问题,可以使用 table_exists_action 参数: ## table_exists_action(导入数据处理方式) table_exists_action=[SKIP | APPEND | TRUNCATE | REPLACE]SKIP:跳过当前表进行下一个。如果 CONTENT 参数设置为 …

用什么文件传输工具来进行企业远程文件传输好?

企业在远程文件传输工具的选择上面临一个非常实际的问题。在当今社会,企业间的合作、沟通和交流都离不开文件的传输。如果文件传输速度慢、不稳定、不安全,将直接影响企业的效率和声誉。因此,选择一款易用的文件传输工具至关重要。 企业远程文…

通过 Java 17、Spring Boot 3.2 构建 Web API 应用程序

本心、输入输出、结果 文章目录 通过 Java 17、Spring Boot 3.2 构建 Web API 应用程序前言Spring Boot 3.2 更新了哪些内容Java 17 新特性构建步骤花有重开日,人无再少年实践是检验真理的唯一标准通过 Java 17、Spring Boot 3.2 构建 Web API 应用程序 编辑:简简单单 Online…

【Java8系列08】Java8中reducing妙用

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

2024年天津仁爱学院专升本专业课报名、确认缴费操作流程说明

2024年天津仁爱学院高职升本科专业考试报名、确认缴费操作流程说明 一、报名操作流程 1. 报名注册 请考生于2023年12月15日上午9点—12月20日下午16:00点登录天津仁爱学院报名系统 https://jw.tjrac.edu.cn/zsb,点击“注册”按钮后进入报名登录界面&a…

单例模式:饿汉模式、懒汉模式

目录 一、什么是单例模式 二、饿汉模式 三、懒汉模式 一、什么是单例模式 单例模式是Java中的设计模式之一,能够保证某个类在程序中只存在唯一一份实例,而不会创建出多个实例 单例模式有很多实现方式,最常见的是饿汉和懒汉两种模式 二、…

收货地址 不能自动获取地区,并且报错

https://www.crmeb.com/ask/thread/20527 https://www.crmeb.com/ask/thread/20527 腾讯地图申请地址: https://doc.crmeb.com/pro/crmebprov2/6117?search%E5%9C%B0%E5%9D%80 新建一个应用

提升数据分析效率:Amazon S3 Express One Zone数据湖实战教程

前言 什么是 Amazon S3?什么是 S3 Express One Zone?实现概述 技术架构组件实现步骤概览 第一步:构建数据湖的基础第二步:选择并查看数据集第三步:在 Athena 中搭建架构第四步:数据转换与优化第五步&#x…

【Spring】@Transactional事务属性详解

文章目录 1、事务传播行为注意事务传播行为在不同类之间调用生效Propagation.REQUIRED(默认传播行为)Propagation.REQUIRES_NEWPropagation.NESTED 2、事务的隔离级别隔离级别设置 3、设置事务异常回滚3.1、默认情况3.2、设置回滚异常3.3、设置不回滚的异常 4、超时时间5、只读…

【c++】string类的模拟实现

目录 介绍: 一,构造函数和析构函数 二,赋值运算符与流运算符 三,迭代器和运算符重载 四,容器接口函数的实现 1,增删操作 2,查找与插入 3,接口的常规操作 介绍: S…

STM32 map文件详解

文章目录 1. 前言2. 生成 .map 文件3 .map 文件的组成3.1 Section Cross References - 各个源文件之间函数的调用关系3.2 Removing Unused input sections from the image - 移除未使用的模块3.3 Image Symbol Table - 映射符号表:描述各(程序段 / 数据&…

Spark分布式内存计算框架

目录 一、Spark简介 (一)定义 (二)Spark和MapReduce区别 (三)Spark历史 (四)Spark特点 二、Spark生态系统 三、Spark运行架构 (一)基本概念 &#x…

Antd v5.8 modal.confirm 手动控制关闭

开发中经常需要使用操作提示弹窗,在 Antd 中的 Modal 组件提供了 confirm 方法,可以快速实现操作提示弹窗。本文就来介绍一下如何使用 Modal.useModal 创建弹窗,并且实现手动控制弹窗的关闭逻辑。 一、代码演示 import { message, Modal } f…

C++ SEH结构化异常捕获处理(双平台支持 Linux、Windows)。

测试: try_ctor();try_call([](){printf("1111111111111111111111\r\n");int* p NULL;*p 100;throw 1;// try_eeh();}, [](){printf("2222222222222222222222\r\n");}); 设置NULL指针P的值引发程式崩溃,可以被正确捕获&#xff0…

禾匠榜店商城系统 RCE漏洞复现

0x01 产品简介 禾匠榜店商城系统是浙江禾匠信息科技有限公司的一套基于PHP和MySQL的商城系统。 0x02 漏洞概述 禾匠榜店商城系统的api/testOrderSubmit模块下的preview方法存在命令执行漏洞,攻击者可以向服务器写入木马文件,直接获取服务器权限 0x03 漏洞概述 FOFA:bod…

2312llvm,编译X86的clang与llvm

先从这里下载llvm-project. 然后解压后,进入clang目录. 输入命令: cmake -DLLVM_ENABLE_PROJECTSclang -G "Visual Studio 17 2022" -A Win32 -Thostx64 ..\llvm表示,用x64的cl编译X86版本,用-A Win32代表X86版本. 然后生成llvm.sln有2M大. 编译选项技巧: 因为,内存…