YOLO8实战:暴力行为检测系统

本篇文章首先介绍YOLOV8实现暴力行为检测的原理,文末附项目代码下载地址

近年来,从恐怖袭击到日常打斗、斗殴以及校园霸凌等,国内外公共安全问题频频引发关注,这些都对国家和民众的安全造成了严重威胁。随着社会的不断发展和进步,我国的视频监控基础设施逐渐完备,各类公共场所也都广泛安装了视频监控系统。在维护国家和民众安全方面,视频监控系统发挥着重要作用。然而,传统的视频监控方式通常只在犯罪发生后提供线索和证据,在有效制止或预防违法犯罪活动方面的效果有限。尤其在面对突发性暴力事件时,实时监测和检测仍然面临着许多挑战。因此,基于深度学习的背景,本研究将探讨如何运用深度学习技术,智能检测暴力行为,以更好地保障公共安全。

YOLOv8作为一种尖端的、最先进的(SOTA)模型,具备在大型数据集上进行训练的能力,并能在各种硬件平台上运行,从CPU到GPU。它建立在先前YOLO系列模型的成功基础上,并引入了新功能和改进,以进一步提升性能和灵活性。这使得YOLOv8成为开发打架斗殴行为检测系统的理想选择。

基于YOLOv8的打架斗殴检测系统具有重要的背景和意义。首先,基于YOLOv8的打架斗殴检测系统利用深度学习算法,可以实现对打架斗殴行为的自动化识别和检测。这种系统不仅提高了检测的准确性,还减少了对人力资源的依赖,使得打架斗殴事件能够被及时发现并采取相应的措施。在公共场所如商场、地铁站等,安装打架斗殴检测系统可以帮助监控人员及时发现异常情况,从而防止潜在的安全隐患。

综上所述,基于YOLOv8的打架斗殴检测系统具有重要的研究意义和应用价值,不仅可以提高检测的准确性和效率,还可以保护人们的生命财产安全,推动人工智能技术在安全领域的应用。

1.数据集

使用的打架斗殴图片数据集为自制数据集。数据集制作的具体步骤是,在网上爬取了2831张打架斗殴图片。然后使用labeling标注图片,将图片分为一类:fight。数据集格式保存为YOLO格式,并按80%、20%的比例划分为训练集和验证集。数据集样张如图3.1所示。转化为txt格式如图3.2所示

图3.1 数据集样张 

图3.2 txt格式样张

2.数据增强

本项目涉及到的数据增强方法主要有以下几种:

1.对原图做数据增强

①像素级:HSV增强、旋转、缩放、平移、剪切、透视、翻转等

②图片级:MixUp、Cutout、CutMix、Mosaic、Copy-Paste(Segment)等

2.对标签做同样的增强

①变换后的坐标偏移量

②防止标签坐标越界

除了上述最基本的数据增强方法外,还使用了 Mosaic 数据增强方法,其主要思想就是将4张图片进行随机裁剪、缩放后,再随机排列拼接形成一张图片,实现丰富数据集的同时,增加了小样本目标,提升网络的训练速度。在进行归一化操作时会一次性计算4张图片的数据,因此模型对内存的需求降低。Mosaic数据增强的流程如图所示。

图3.3 Mosaic数据增强的流程

Mosaic数据增强的代码主要流程如下:

①假设模型输入尺寸为s,首先初始化一幅尺寸为2s*2s的灰色大图

②在大图中从点A(s/2, s/2)和点B(3s/2, 3s/2)限定的矩形内随机选择一点作为拼接点

③随机选择四张图,取其部分拼入大图,超出的部分将被舍弃

④根据原图坐标的偏移量,重新计算GT框的坐标,并使用np.clip防止更新后的标签坐标越界

3. yolo核心原理简要概述

在 yolov1 检测网络之中,一共有24个卷积层,另外还有两个全积层。如图4-11所示。

图4-11 yolo网络结构图

这里面所内含的卷积层,主要负责对图像的特征捕获采集,而两个全积层则是来处理分析得到图像的预测位置,另外还有类别概率值。从 yolo 模式看来,该网络借鉴了 GoogLeNet 的分类网络结构。但与该网络不同的是,yolo 算法系统之中未使用 inception module,反而 yolo 使用 1*1 卷积层+3*3 卷积层来简单替代那一复杂结构,大大缩小了成本,特别注意的是此处 1*1 卷积层的存在是为了跨通道信息整合。

在发表的 yolo 论文中,为了告别复杂结构,作者提出了一个更加轻快的,更加便捷 的检测网络 Fast yolo,因为它仅仅只有 9 个卷积层和 2 个全连接层。使用 titan*GPU,Fast yolo 并且在这样简单的结构下,仍可以实现 155fps 这样的快速检测速度,但同时,系统 MAP 值也从 yolo 的 63.4%降到了 52.7%,尽管如此,这样的成绩仍然要远高于过去检测方法(DPM)的 MAP 值。

(2)输出 representation 定义

yolo 算法实现的过程即是,首先将输入的图像,分割成大小相等的全等正方形,每个方格都同时负责检测内部物体落入情况,简言之就是物体中心落入的格子来负责检测出该物体的类型信息,如图4-12所示,图像成功识别物体狗。

图4-12  yolo全连连接输出层示意

在每个格子之中,都回输出B个bounding box(包含物体的矩形区域)信息,同时也输出C个物体属于某种类别的概率信息。

而在Bounding box信息之中,包含5个数据值,分别是x,y,w,h和confidence。在这之中 x,y代表当前格子预测得到的物体的 bounding box 的中心位置的坐标。W,h是bounding box的宽度和高度。而在实际操作对其训练时w 和 h 的值使用图像的宽度和高度进行归一化到[0,1]区间内;x,y是bounding box中心位置相对于当前格子位置的偏移值,并且被归一化到[0,1]区间内。而confidence 则是反映当前bounding box是否包含物体以及物体位置的准确性,该模式的计算方式如下:

confidence = P(object)*IOU, 在该计算公式之中,bounding box 包含物体,则P(object) = 1;否则 P(object) = 0。IOU(intersection over union)为预测 bounding box与物体真实区域的交集面积,并且以像素为单位,用真实区域的像素面积归一化到[0,1]区间内。

因此,yolo 网络最终的全连接层的输出维度是 S*S*(B*5+C)。yolov1 论文中,作者训练采用的输入图像分辨率是 448*448,S=7,B=2;采用 VOC 20 类标注物体作为训练数据,C=20。因此输出向量为 7*7*(20+2*5)=1470 维。作者开源出的 yolo 代码中,全连接层输出特征向量各维度对应内容如下图4-13所示:

图4-13 yolo输出层特征向量各维度对应图示

 Yolov8 算法是在原有 yolo 目标检测架构的基础上,采用了近些年 CNN 领域中最优秀的优化策略,从数据处理、主干网络、网络训练、激活函数、损失函数等各个方面都有着不同程度的优化。

与之前的YOLO版本相比,YOLOv8在以下几个方面有所不同:

骨干网络:YOLOv8采用了全新的骨干网络,以提高模型的性能和准确性。YOLOv8的骨干网络是Darknet-53。Darknet-53是一个深度卷积神经网络模型,它由53个卷积层和池化层组成,用于提取图像特征。其实Darknet-53在YOLOv3网络中就已经被广泛使用,并在YOLOv4和YOLOv5中也得到了应用。它具有较强的特征提取能力,能够在目标检测任务中提供较好的性能。

检测头:YOLOv8采用了Anchor-Free的检测头,这意味着它不再需要预先定义一组固定的先验框来检测目标,而是可以直接从原始图像中预测目标的边界框,这有助于提高模型的灵活性和准确性。

损失函数:YOLOv8采用了新的损失函数,以更好地优化模型的训练过程,进一步提高模型的性能。YOLOv8的损失函数由多个部分组成,包括分类损失(VFL Loss)、回归损失为CIOU Loss+DFL的形式。

4. 模型训练

将标注后的数据集划分为训练集和验证集后,开始对我们搭建的网络进行训练。一般为了缩短网络的训练时间,并达到更好的精度,我们一般加载预训练权重进行网络的训练。而yolov8给我们提供了几个预训练权重,我们可以对应我们不同的需求选择不同的版本的预训练权重。预训练权重越大,训练出来的精度就会相对来说越高,但是其检测的速度就会越慢。本次训练自己的数据集用的预训练权重为yolov8n.pt。其中主要的代码如下:

from ultralytics import YOLO
if __name__=='__main__':
    model=YOLO('yolov8n.pt')
    model.train(data='./data.yaml',imgsz=(640,640),workers=1,batch=16,epochs=250)

详细的训练教程可以参考这篇博客 

 5.项目UI设计

本项目采用streamlit 框架搭建起推理界面,方便用户使用模型进行推理。

5.1 streamlit 框架介绍

Streamlit是一个专门为机器学习和数据科学团队设计的应用开发框架,它的主要目标是帮助数据科学家和开发人员更快速地创建和部署交互式数据应用程序,以便将研究成果转化为实际应用。这个框架的主要优势在于其易用性和高效性。使用Streamlit,开发者只需要几行代码就可以创建出交互式应用,无需编写HTML、CSS或JavaScript。同时,Streamlit支持大量表格、图表、数据表等对象的渲染,并封装了大量互动组件,如滑动条、单选框、复选框等,使得应用界面丰富且用户友好。Streamlit也支持实时预览,即在编辑代码时,应用会自动重新加载,开发者可以实时查看更改的效果。此外,Streamlit还可以自动调整布局和大小,以适应不同的屏幕和设备,实现栅格化响应式布局。Streamlit的另一个显著特点是对Python数据科学库的广泛支持,如Pandas、Numpy、Matplotlib、Scikit-Learn等,这使得开发者可以利用这些库的功能,直接在Streamlit应用中实现数据分析和可视化。Streamlit的应用场景非常广泛,比如可以用于搭建预测模型的Web应用,或者用于自动化处理Excel文件的Web应用等。它可以帮助用户将复杂的机器学习或者深度学习模型或数据处理流程转化为易于理解和使用的Web界面,从而方便非专业人员的使用。总的来说,Streamlit是一个功能强大且易于使用的应用开发框架,特别适合于机器学习和数据科学领域的快速应用开发。

5.2 系统主要功能

  • 可以识别图片与视频,也支持本地摄像头识别。其中图片识别支持统计检测到的物体数量,并以表格形式返回到前端页面显示,表格支持搜索、查询、excel导出。系统支持不同角色登录注册
  • 可以通过UI界面动态调节模型置信度与IOU,系统可以根据电脑配置的运行环境自动选择模型进行加速推理,若运行环境为GPU,选择pt模型推理,若为CPU运行环境,选择onnx模型加速推理

6.系统功能展示及运行演示

yolov8打架斗殴识别系统 暴力行为识别系统

另外,限于本篇文章的篇幅,更细致的原理讲解、代码实现将在项目说明文档中体现,需要数据集、项目源码、原理说明报告的小伙伴在微信公众号搜索 ‘编程学习园地’ ,回复关键字‘yolo8实战’即可获得下载链接。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

城南皮卡丘

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值