基于YOLOv8深度学习的违法暴力行为检测系统研究与实现(PyQt5界面+数据集+训练代码)
本研究开发了一种基于YOLOV8深度学习模型的违法暴力行为检测系统,并通过PyQt5框架创建了一个直观且易于操作的用户界面。随着公共场所监控系统的广泛应用,在公共安全管理中如何快速、准确地识别并检测视频中的暴力与违法行为已成为一项关键问题。现有的监控系统主要依赖于人工观察与监测,在效率方面存在低下及漏报率等问题。为了解决这一挑战,在本研究中我们设计了一个自动化的危险行为检测系统,在无需人工干预的情况下能够利用深度学习技术自动识别监控视频中的危险行为
本系统的核心要素是YOLOV8模型,并将其定性为一种先进的目标检测算法,在保证高精度的同时实现了实时检测功能。
我们首先完成了公开数据集的精细预处理工作,并在此基础上确保了该系统能够在训练阶段深入学习并识别出各类复杂场景下的违法与暴力行为特征。
经过对YOLOV8模型进行系统的训练与优化工作后,在各类复杂环境下均展现了卓越的检测能力。
基于PyQt5框架开发了一个友好易用的图形界面,在该平台上用户能够通过便捷的方式上传视频并设置必要的检测参数;随后系统会实时生成相应的分析结果。系统展现出显著的高效性,在几秒钟内即可完成视频分析与行为识别任务。值得注意的是系统的高准确率使其能够有效地捕捉到各类违法暴力行为,并最大限度地减少了误报与漏报的情况。
研究结果表明,在监控视频中对违法及暴力行为的检测任务上YOLOV8模型展现出显著的能力,并相较于现有的传统算法,在检测速度方面有明显提升,并且准确性也有显著提高。本系统不仅能够为监控人员提供一种高效的辅助工具,并且能够在潜在危险行为发生前进行预警,在及时采取行动上有助于预防事件进一步升级
本研究所开发出了一种全新的智能化技术方案来应对公共安全监控的需求,并非仅仅局限于提供一个普通的解决方案。该系统不仅具有显著的提升违法行为检测效率的能力,在准确性的层面上也表现出了明显的优势。这一项目的成功实施不仅支撑了实际应用中的需求,并且为深入研究深度学习在安全监控领域潜力提供了理论基础
算法流程

项目数据
采用Labelimg标注工具从包含多种多样与暴力异常行为相关的图像中进行采集和标注。将分为两个检测类别:一个是NonViolence(代表非暴力),另一个是Violence(代表暴力)。
LabelImg:一个开源的图像标注工具,标签可用于分类任务和目标检测.它是由Python编写,并以其Qt图形界面著称,尽管是英文界面版本.其注释采用Pascal VOC格式存储为XML文件,这也是ImageNet使用的标准.此外它还支持COCO数据集格式.在CMD中安装LabelImg需执行以下命令:pip install labelimg -i https://pypi.tuna.tsinghua.edu.cn/simple

结束后,在cmd中输入labelimg

初识labelimg

打开后,我们自己设置一下
在View中勾选Auto Save mode

接下来我们打开需要标注的图片文件夹

请设置保存标注文件的目标目录(如上图所示的Change Save Dir字段)。现在开始进行标注工作。首先用矩形框选中目标区域,并给该目标添加相应的标签。切换至下一张图片继续操作,请确保这一流程持续进行下去。

Labelimg的快捷键

在此处推荐建立一个命名为data的数据集结构(这是约定俗成的做法)。在其中创建名为images的目录来存储需要进行标注的照片。接着,在另一个目录中存储标注信息。最后,在同一个目录中生成一份classes.txt文本文件以记录所有需要标注的对象类别。
data存储目录架构如下:
├── 图像数据文件夹
│ └── img_data
├── 图片数据集
│ └── images
│ ├── 原始图片
│ └── 配准图片
└── 标注信息存储
├── 标签数据集
│ └── labels
├── 分类清单(可选)
│ └── classes.txt (建议在分类项目较多时创建该文档以存储分类信息)
首先在images这个文件夹放置待标注的图片。
生成文件如下:

“classes.txt”定义了你的 YOLO 标签所引用的类名列表。

(4)YOLO模式创建标签的样式
标记信息文件的名称与图片相同。该文件由N行、5列的数据构成。每一行代表一个被标注的目标:第一列为类别ID;第二和第三列为目标中心点的相对坐标;第四和第五列分别为目标框的相对宽度和高度。
注意:这里的中心点坐标、宽和高都是相对数据!!!

用于存储标签类别的文件名设为classes.txt (固定不变),用以存储生成的标签类别
完成后可进行后续的yolo训练方面的操作。
模型训练
模型的训练、评估与推理
1.YOLOv8的基本原理
YOLOv8是一款处于世界人工智能前沿水平(SOTA)的物体检测模型系统,并非传统意义上的深度学习框架。它是在Yolo系列前作的基础上进行技术革新与功能优化的基础上构建而成的。该系统通过融合创新的技术方案与先进算法设计,在提升检测精度的同时显著降低了计算资源消耗,在多样的硬件平台上均能获得令人满意的性能表现。其主要技术亮点体现在三个方面:一是采用了新型主干网络结构;二是设计了一个全新的Anchors-Free检测头;三是引入了优化后的损失函数。这些技术改进使得YOLOv8能够实现高效且精确的目标检测、图像分割以及人体姿态估计等多种任务处理功能

YOLOv8作为YOLO系列的最新版本,在多个关键指标上均超过现有对象检测与实例分割模型。该算法汲取了Yolov5、Yolov6以及YoloX等模型在设计上的优势,并在此基础上基于对Yolov5架构的全面优化与改进实现了一项创新性突破。同时继承并保留了工程化设计中简洁易用的核心理念
Yolov8模型网络结构图如下图所示:

2.数据集准备与训练
本研究采用了涵盖多种与暴力异常行为相关的图像的数据集,并运用Labelimg标注工具对每张图像的目标边界框(Bounding Box)及其类别进行了标注。随后,主要基于YOLOv8n这一模型开展模型训练工作;训练完成后,则对模型在验证集上的性能进行全面评估和对比分析。其训练与评估流程基本一致,具体包括:数据准备阶段、模型训练阶段以及模型评估阶段。其中目标类别分为非暴力与暴力两大类,在该数据集中总计包含2046张图像资料,在具体分布上表现为:用于训练的数据量为1463张,在验证集上有383张样本,在测试集中则有200张图片作为独立测试用例参考依据。部分样本如图所示:

部分标注如下图所示:

图片数据的存放格式如下,在项目目录中创建datasets目录,并将检测的图片按照训练集与验证集进行归类放置于该目录下。

接着,请您新建一个YAML配置文件(data.yaml),用于指定训练数据的位置以及模型需检测的目标类别。YOLOv8在执行模型训练时会调用该配置文件中的信息来指导学习过程,并完成验证过程。
data.yaml的具体内容如下:

training_data_set: E:\FightDetection_v8\datasets\train\下的图像文件夹 训练数据集的具体存储位置 validation_data_set: E:\FightDetection_v8\datasets\Validation\下的图像文件夹 验证数据集的具体存储位置 test_data_set: E:\FightDetection_v8\datasets\Test\下的图像文件夹 测试数据集的具体存储位置
nc: 2 模型检测的类别数,共有2个类别。
names: [‘NonViolence’, ‘Violence’]
该文件明确了用于模型训练与验证的数据集路径,并同时说明了将被识别为的目标类型。
在数据准备完成之后,在线运行train.py脚本以启动模型训练过程。其中epochs参数被用来调节模型训练周期的数量,并采用动态批量处理的方式以适应不同的计算资源需求;此外,在每一次迭代中所处理的数据样本数量则由batch参数来决定,并根据系统内存容量自动调节最小值为1个样本
CPU/GPU训练代码如下:

导入名为 yolov8n.pt 的预训练YOLOv8模型,并指出该文件是经过预先训练的模型文件。
在YOLO模型框架下进行参数化设置与优化训练。
数据集配置文件路径由 data_yaml_path 参数指定。
设定总迭代次数为150次。
每个批次处理4个样本。
实验运行标识符由 train_v8 参数指定。
3.训练结果评估
当我们进行深度学习时,在观察到损失函数的变化趋势时就能对模型的学习效果进行评估。YOLOv8模型的训练过程主要包含三个方面的损失:用于定位目标位置的具体计算项(box_loss)、用于分类目标物体类型的相关计算项(cls_loss),以及处理动态特征变化的影响因素计算项(dfl_loss)。完成训练后,在runs/目录中会存储具体的训练日志和结果文件

各损失函数作用说明:
定位损失box_loss:通过GIoU度量预测边界框与真实边界框之间的差异(difference),其值越小表示定位精度越高;
分类损失cls_loss:通过判断锚框所属的分类是否正确来衡量目标类别匹配程度(matching degree),其值越小说明分类准确性越高;
动态特征损失dfl_loss:是一种用于测量预测边界框与目标边界框之间距离的回归式损失函数(regression-based loss function)。在计算该指标时,将目标边界框归一化至特征图尺度(scaled to feature map scale by dividing corresponding stride),并分别与其对应的预测边界框架进行CIoU Loss计算以及与其锚框中心点至各边距离进行dfl_loss计算(dfl_loss calculation)。这些操作均属于YOLOv8训练流程中的关键步骤,在此过程中通过最小化dfl_loss能够更精确地调整最终输出的边界框架位置信息。
训练结果如下:

这张图呈现了YOLOv8模型在训练与验证阶段的关键指标变化情况,请具体查看以下详细说明。
train/box_loss:
(1)该图详细描绘了训练过程中边界框损失值(box_loss)随训练周期的变化情况。
(2)从初始阶段的1.6开始逐渐下降至最终接近0.6的状态,在这一过程中模型的边界框预测精度逐步提升。
(1)该图呈现了训练集中的分类损失值(cls_loss)。
(2)在训练过程中,在 training process 中, 损失值由约 3.0 降至 0.5 以下, 表明模型在分类任务上的性能持续提升, 并能更加精准地区分 violent 和 non-violent behaviors.
train/dfl_loss:
(1)该图呈现了训练集中的分布式的焦点损失(dfl_loss),这种损失主要应用于边界框预测的精细化处理方面。
(2)损失值从1.6降到约1.0左右,并且模型在预测物体边界时的精确度出现了显著提高。
metrics/precision(B):
(1)该图表展示了模型在训练集上的精度(Precision)变化情况。
(2)精度从初始值约为0.4开始持续提升至0.85以上,在此过程中模型显著提高了对正样本的识别能力的同时也有效降低了误检率。
metrics/recall(B):
(1)该图详细描述了模型在各个训练周期中的召回率(Recall)变化趋势。
(2)具体而言,在最初的几个训练周期中,召回率从约0.4稳步提升至大约0.85,并持续保持这一较高水平。
val/box_loss:
(1)该图呈现了验证集上的边界框损失值(box_loss)。
(2)损失值由1.8降至1.0以下的过程中,模型在验证集上的边界框预测性能随着训练的进展而不断提升。
val/cls_loss: (1)该图呈现了验证集对应的分类损失数值(cls_loss)。 (2)分类损失由约2.5降至0.8,表明模型在验证集上的分类性能明显提高。
val/dfl_loss:
(1)在验证集上,分布式的焦点损失(dfl_loss)逐步减少至1.4。
(2)模型在验证集上的边界预测性能有所提升。
(1)此图表描绘了mAP50值的变化情况,在IOU阈值设定为B的情况下展示出各分类指标的表现。
(2)通过观察mAP_{\text{test}}曲线可以看出,在不同难易程度样本上的检测性能存在显著差异。
metrics/mAP50-95(B):
(1)该图表显示了mAP@50-95值的变化情况,在IOU阈值范围从" 0. ̲ ̲ ̲ . ̲ ̲ "到" "之间时的平均精度得到了体现。
(2)mAP@50-95指标由" "逐步达到接近" "的状态,并且这一过程反映了模型在面对更为严格的检测场景时展现出的持续优化能力。
图形化地展示了实验过程中的变化趋势,在每一次迭代中,该模型都能有效提升多个关键指标(如分类准确率,边界框定位精度以及召回率等),同时观察到损失函数值持续减少.这一系列观察结果充分表明,在逐步训练后,该模型不仅在性能上有所提升,在实际应用中也能更加有效地完成对暴力与非暴力行为的检测任务.

这张图呈现了Precision-Recall曲线,并用于评估模型在不同类别下的检测性能。
以下是对其工作原理的详细说明:
Precision-Recall 曲线的含义如下:
(1)本图表展示了Precision-Recall曲线的基本构成要素。
(2) Precision值代表了所有被预测为正类的数据中真实属于正类的比例。
(3) Recall值反映了所有真实存在的正类数据中有多少被正确识别。
(4)随着提升Recall值时,在Precision值上的表现会相应下降。这通常是因为为了捕获更多的潜在阳性案例而牺牲了一些精确度。
(1)Non-Violent Behavior (非暴力行为类别):通过Precision-Recall曲线计算得到的平均精度值为 0.904 ,这表明该类别的检测性能具有较高的水平。
(2)Violent Behavior (暴力行为类别):通过Precision-Recall曲线计算得到的平均精度值为 0.915 ,其性能略优于非暴力行为类别。
(3)All Classes (所有类别):模型在所有类别的整体检测性能(包括 violent 和 non-violent 行为)达到平均精度值 0.910 ,在 mAP@ 0.5 检测标准下表现优异。
mAP@0.5值达到0.910:
(1)表明模型在交并比设定为0.5时实现了高度的检测精度。
(2)该模型在暴力与非暴力行为的检测方面均表现出极高的准确度。
这张Precision-Recall曲线图反映了YOLOv8模型在执行暴力与非暴力行为检测任务时的表现特征。该模型在准确率与召回率方面展现出良好的均衡性,在分别对暴力与非暴力行为进行识别时均实现了较高的准确率与召回率水平。整体而言,在AP@0.5指标下的计算结果显示该模型达到91.0%,这表明其在性能上表现出色,并且适用于实际场景下的违法暴力行为检测任务
4.检测结果识别
在模型训练完成之后, 我们能够获得一个最优的训练成果文件best.pt, 该文件位于runs/train/weights目录中. 此外, 我们也可以利用该文件来进行后续的推理检测. imgTest.py 图片检测代码实现见下文

加载所需库:
(1)通过从ultralytics导入YOLO模型类。
(2)引入OpenCV库,用于图像处理和显示。
加载模型路径及图片路径:
(1)指定预训练模型的路径变量 path 为 'models/best.pt'。该预训练模型被配置用于执行目标检测任务。
(2)指定用于检测的图片文件路径变量 img_path 为 "TestFiles/imagetest.jpg"。
加载预训练模型:
(1)model = YOLO(path, task=’detect’):采用指定路径来加载YOLO模型,并将检测任务设为目标检测 (detect)。
(2)配置目标检测的置信度阈值和非极大值抑制(NMS)的交并比(IoU)阈值。
对图片进行检测:
(1)results = model(img_path):
该模型将输入的图片进行分析,并返回包含识别信息的结果。
img_path:输入的图片路径
(1)res = results[0].plot():生成并绘制检测结果至图像中。
(2)cv2.imshow(“YOLOv8 Detection”, res):调用OpenCV库展示处理后的图像,并设置窗口标题为YOLOv8 Detecton。
(3)cv2.waitKey(0):程序会阻塞直至用户按下任意键后才退出
此代码的功能是导入并运行预训练的YOLOv8模型,并识别指定输入图片中的物体类别及边界框;然后将识别结果输出至标准输出。
执行imgTest.py代码后,会将执行的结果直接标注在图片上,结果如下:

该模型对图片进行了检测,并展示了具体结果。
图像信息:
(1)处理的图像路径为:TestFiles/imagetest.jpg。
(2)图像尺寸为 640×640 像素。
检测结果:
(1)模型识别出存在一个暴力事件 (Violence)。
(2)每个图像的计算速度为7.0毫秒。
处理速度如下:
(1)预处理耗时4.7毫秒;
(2)推理耗时7.0毫秒,并专为检测该图片中的行为设计;
(3)后处理所需时间为每张图片72.3毫秒,并用于生成结果(例如绘制边界框等)。
检测类别:
YOLOv8模型检测的1类异常行为:
(1)1个“暴力行为(Violence)
此YOLOv8模型精准识别出画面中的暴力场景,并且各处理环节运行迅速以满足实时监控需求
运行效果
– 运行 MainProgram.py

主要功能:
(1)能够实现对目标图像中暴力行为的实时识别;
(2)系统具备对图像、视频以及摄像头进行检测的能力,并支持批量处理图像;
(3)操作界面能够动态呈现目标位置坐标值及其相关统计信息;
(4)系统能够存储相应的检测结果
2.检测结果说明:

该图表利用YOLOv8模型展示了目标检测系统的界面,并具体说明了各个字段的含义。
(1)这表明该模型完成检测所需时间为0.05\text{秒}。
(2)这表明该模型具备良好的实时能力,并能够快速完成检测过程。
目标数目(Number of objects detected): (1)检测到的目标数量为1,则表示这是当前检测到的第一个目标。
目标选择(下拉菜单):全部: (1)设有目标类型选择功能的下拉菜单,请用户选择所需目标类型。 (2)在此情境中,默认设置为"全部"选项表示将展示系统检测的所有目标信息。
类型(Type): 当前选定的行为类别是 "暴力" 表示系统已识别并突出显示了检测到的 "Violence" 行为
(1)该模型识别出的目标属于"打架"类别的置信水平达到了90.71%。
(2)置信度即模型的可信程度,在此情境下它体现了对于检测结果的信心:置信度越高,则表明模型对该检测结果的信任程度越强。
(1)由xmin为90、ymin为104所确定的目标起始点(xmin,ymin),表示该目标区域在图像中的位置。
(2)由xmax为280、ymax为416所确定的目标结束点(xmax,ymax),表示该目标区域的整体边界。
这些坐标表示在图像中的目标区域范围,框定了检测到的“暴力”的位置。
这张图记录了打架异常行为检测系统的一次检测结果,包含具体的测试时间、涉及的行为类型、每项行为所对应的信心值以及目标位置信息数据等详细信息。通过该界面用户能够查看并分析这些检测结果,并从而提高对违法暴力行为预警效率的效果。
3.图片检测说明
暴力检测

非暴力检测

单击图片按钮启动并加载待检测的图像文件;或者单击文件夹按钮切换至批量处理模式,并指定批量处理的目标图像目录。
在目标筛选器中进行如下设置:
- 预览设置用于查看预定义搜索参数配置;
- 选择要分析的具体指标范围;
- 指定结果展示的具体维度。
请确保所有输入字段已正确填写必要信息,并确认参数设置无误后方可运行分析任务。
完成参数配置后,请检查各选项设置是否符合预期;
如果发现任何问题,请及时进行相应调整并重新运行程序。
检测结果:系统通过视觉分析技术自动识别图片中的暴力行为,并对发现的目标进行详细标注与分析。具体而言,在该过程中系统能够准确计算出目标数量、完成时间以及各类别目标的分类特征,并记录下各目标的具体位置坐标详细信息
4.视频检测说明

单击视频按钮后会触发系统流程:首先打开供检测的视频文件;随后系统将立即显示检测结果;再次单击可关闭此视频窗口
检测结果:该系统能够实时对视频内容进行分析,并识别出异常暴力行为并展示相关信息。统计表列出了每个检测结果的概率值及其发生位置信息
这个界面呈现了系统在视频帧中进行多目标检测的能力,并具备精确识别暴力行为的能力。它不仅实现了对暴力行为的自动检测功能,在结果展示方面也提供了详细的行为检测结果以及相应的置信度评分
5.摄像头检测说明

按下启动摄像头按钮,则系统将实现摄像头的开启;该操作会持续进行图像识别;再次按下启动按钮,则系统将停止工作以释放资源。
检测结果:摄像头与系统实现了在线数据传输,在线处理来自摄像头的画面数据。实时显示摄像头画面的同时,在图像中标注了暴力行为的位置。表格下方记录了每帧画面数据的详细信息。
6.保存图片与视频检测说明

点击保存按钮后, 系统将对已选图片(包括批量处理)以及视频进行检测, 并将结果存储至save_data目录中. 检测到的结果会被系统自动识别并分类存档. 请确保所有操作完成后及时查看生成的数据报告以避免信息丢失.

在存储的CSV文件中,包含了以下几项信息:图片路径、目标在图像中的编号、目标所属类别、预测置信度以及目标所处的位置坐标。其中,坐标位置表示用于检测的目标框的左上角和右下角两个顶点处对应的x、y坐标值。

(1)图片保存

(2)视频保存

– 运行 train.py
1.训练参数设置

(1)data遵循data_yaml_path: 遵循data.yaml中定义的数据集。
(2)epochs=150: 设定训练的次数为150次。
(3)batch=4: 每个批次的图像规模设定为4(批量大小)。
(4)name=’train_v8′: 训练结果将被存储至名为train_v8的目录中。
(5)optimizer=’SGD’: 使用随机梯度下降法(SGD)作为优化器。
尽管在很多深度学习任务中 GPU 通常会带来更快的训练速度。
然而 在某些特定情况下(如硬件限制或其他因素) 用户可能会被迫使用 CPU 来进行计算。
提示:相比而言,在使用CPU进行深度学习模型的训练时耗时更多。特别是针对计算密集型的任务(如YOLOv8),选择GPU以提高效率会更加高效。除非有特殊需求,请根据具体情况进行选择。
2.训练日志结果

这张图展示了使用YOLOv8进行模型训练的详细过程和结果。
训练总时长:
(1)模型在训练了150轮后,总共耗时1.277小时。
mAP50 (平均精度 @ IoU=50%):
衡量视频监控系统在目标检测中的性能指标之一,在交并比(IOU)阈值为0.5的情况下评估准确率(mean Average Precision)。
(1)整体上,在mAP50-95指标下的表现达到0.662分。
(2)非暴力行为类别在该指标下的得分是较为突出的0.676分。
(3)相比之下,在暴力行为类别中获得的分数略低于前者为 0.647分。
mAP 从 50% 到 95% (平均精度 在 IoU 等于 0. 以及至 1 的区间内) :
该指标代表了在交并比阈值介于 48% 至至78%之间时的表现水平。
(1) 总体而言,在这一指标下的得分为 mAP@IoU=48:78 = 662 . 。
(2) 其中 nofight 和 walk 类别分别呈现出 mAP@IoU=48:78 分别达到 63 . 和 27 . ,表现稍有下降。
(1)该系统在计算能力方面表现突出,在每秒11.59帧水平上达到了显著的性能。
(2)该系统表现出较高的计算效率,并特别适合应用于实时检测任务。
结果已保存:(1)验证结果包含在 Runs\detect\train_v8 目录内
整个验证过程以代码0成功结束,并无错误输出。
通过该图可以看出YOLOv8模型在打架等扰乱行为检测任务中的训练流程及其验证结果。验证结果显示,在暴力与非暴力行为的检测任务中,YOLOv8模型表现出色。其中,在mAP50指标上表现突出,在召回率方面也取得了显著成绩。其精确度也非常接近,在对两类行为的识别能力上达到了较为均衡的效果。
