基于YOLOv8的景区异常目标检测系统的设计与实现
作者: 李佳颖 张墉 唐家杰 林心雨 许良武
关键词: 异常识别;目标检测;YOLOv8;监控预警;智慧景区
中图分类号:TP18 文献标识码:A
文章编号:1009-3044(2025)03-0016-05 开放科学(资源服务) 标识码(OSID) :
0引言
随着生活水平的提高,越来越多的人选择旅行,但这也带来了景点管理上的挑战[1]。主要问题包括游客过多导致的拥挤和安全事故、游客分布不均影响体验,以及潜在的安全风险,如游客进入禁止区域、火灾、山体滑坡和儿童失踪等[2]。为了解决这些问题,开发了智慧景区监控预警系统。该系统利用摄像头等设备实时监测景区内的风险情况,能够在第一时间检测人员分布、判断是否有人员进入危险区域的行为以及景点是否发生意外事故。一旦发现相关迹象,系统会自动触发报警,通知相关部门进行紧急处理,从而大大提高对异常行为的救援效率。
近年来,基于视频的异常监控已成为国内外学者的重要研究领域,并取得了一些成果。柴等人[3]在YOLOv8[4]的基础上,针对异常行为目标检测中存在的目标分布密集、尺度变化范围较大、检测背景较为复杂等问题,将注意力机制CA引入主干网络部分的C2f 模块,从而增强网络在复杂背景下对目标的关注能力;高等人[5]基于YOLO网络结构,结合行人在图像中呈现宽高比小的特点,聚类选取合适的候选框数量和规格,调整候选框在X、Y轴方向的分布密度,构建了适用于行人检测的网络结构;Chen 等人[6] 引入CFG_SI_YOLO模型进行道路标线缺陷检测,该模型通过多通道的CoordConv模块,根据道路标线缺陷的分布特点,增强了网络对细微细节的关注能力,有效避免了模型压缩和池化操作造成的道路标线信息丢失。由此可见,国内外学者通过优化不同的结构模型,提高了异常检测的准确性和效率。
本文提出了一种基于YOLOv8的景区异常目标检测系统,并构建了视频监控与告警联动的闭环管理系统,有效提升了景区安全管理效能。
1 系统框架结构设计
本系统设计基于YOLOv8算法,主要分为三个模块:服务器模块、AI推理服务模块和后台管理模块。示意图如图1所示。服务器模块负责将监控采集到的视频传递给异常识别接口进行推理分析和异常检测,并将最终的处理结果传送到后台管理模块。
1.1 服务器模块
系统采用阿里云服务器,服务器模块通过建立网络连接接收客户端发送的视频数据流,并对其进行解码处理。有时还会存储数据,以供进一步分析或使用。
1.2 AI 推理服务模块
LOv8A目I推标理检服测务模模块块、目包标括追视踪频模数块据和预行处为理识模别块模、Y块O。⁃首先,视频在服务器上进行预处理,确定检测目标,并调整检测框的大小和帧率。随后,通过YOLOv8进行目标检测、追踪并识别异常行为。当异常行为发生时,启用目标追踪模块,追踪异常行为发生的位置,并进行行为识别。处理结果传回服务器,若检测到异常,则发送警告,由管理中心进行处理。
1.3 后台管理模块
终端通过电脑和手机实时监控景区的异常情况。当识别到异常情况时,客户端界面会发出警告并自动标记异常位置。异常信号会传送至管理中心,管理中心模块包括数据存储与管理模块、报警处理模块和系统运行管理模块,这三个模块互不干扰。
1) 数据存储与管理模块负责存储和管理视频数据处理结果,便于快速查看。
2) 报警处理模块在YOLOv8检测与追踪发现异常行为后触发报警,提醒管理人员立即处理。
3) 系统运行管理模块负责系统日常运行的维护,包括日志记录和参数配置,以保障系统的运行效率和稳定性。
2 关键技术的实现
2.1 YOLO 目标检测
常见的目标检测算法主要有两种,分别是One- stage算法[7]和Two-stage算法[8]。其中,One-stage算法(如YOLO[9]和SSD[10]) 直接在图像上预测目标的位置和类别,无须生成候选框。这些算法将目标检测问题转化为回归问题,通过在图像上预测目标的位置和类别完成检测。
YOLO系列是一种快速目标检测算法,自2015年推出以来,经过多个版本的迭代不断优化。该算法通过将目标检测简化为回归问题来提高检测速度,但在检测小目标和复杂场景时可能存在准确度不足的问题。此外,YOLO算法因其快速处理能力,广泛应用于视频监控、自动驾驶、医学图像分析和工业自动化等领域,在实时目标识别和检测任务中发挥了重要作用。
该算法将输入图像划分为网格单元,每个单元负责预测落入其中的目标框。通过端到端的方式,直接在整幅图像上预测目标的位置和类别,并使用非最大抑制(NMS) 筛选出最终的检测结果。具体工作流程为:YOLO网络将待检测图像划分为n×n的网格,每个网格负责跟踪和识别物体中心位置落在该网格中的目标边界和类别。这种端到端的检测方法速度较快,每秒可检测几十帧图像[11]。
2.2 YOLOv8算法
YOLOv8是YOLO系列的改进版本,该算法不断引入新功能和优化,以满足不同任务的需求。本系统选择使用YOLOv8进行目标检测。YOLOv8通过单个神经网络同时预测边界框和类别概率,相较于传统目标检测算法,具有更快的运行速度和更高的检测效率。
YOLOv8的整体网络结构主要由三个模块组成:Head(输入端) 、Backbone(主干模块) 和Neck(中间特征提取模块) ,其主要网络结构如图2所示。
2.2.1 输入端(Head)
首先,输入要求为640×640的图像,对其进行图像预处理、归一化、通道转换和维度调整等操作。
① 检测头:包含一系列卷积层和反卷积层,用于生成检测结果。这些层负责预测每个锚框的边界框回归值和目标存在的置信度。
②分类头:采用全局平均池化(Global Average Pooling)对每个特征图进行分类,通过减少特征图的维度,输出每个类别的概率分布。分类头的设计使得YOLOv8能够有效处理多类别分类任务。
③ Anchor-free机制:减少了锚框的超参数设置,通过直接预测目标的中心点来简化训练过程。
④ 自适应NMS(Non-Maximum Suppression) :改进了传统的NMS算法,通过自适应调整阈值,减少误检和漏检,提高检测精度。
⑤自动混合精度训练(Automatic Mixed Precision Training) :通过在训练过程中动态调整计算精度,加快训练速度,同时减少显存占用。
2.2.2 Backbone模块
Backbone模块负责特征提取,采用了一系列卷积和反卷积层,同时使用了残差连接和瓶颈结构来减小网络的大小并提高性能。该模块由多个C2f模块和空间金字塔池化(SPPF) 模块组成。其中,C2f模块是一种用于融合局部特征和全局特征的技术,能够在特征提取阶段将不同层级的特征图进行融合,从而提高特征的丰富性和多样性。通过C2f模块,网络可以更全面地提取特征,从而提升模型的性能和准确性。此外,Backbone模块还包括一些常见的改进技术,如深度可分离卷积(Depthwise Separable Convolution) 和膨胀卷积(Dilated Convolution) ,以进一步增强特征提取能力。
Backbone中的卷积模块(Conv) 是神经网络中最常见的一种层,用于提取输入数据的特征。卷积操作通过滑动一个滤波器(卷积核) 在输入数据上,在不同位置进行加权和求和操作,从而得到输出特征图。卷积操作能够有效提取输入数据的局部特征,是深度神经网络中至关重要的组成模块。
此外,SPPF 模块被应用于特征提取网络(Back⁃ bone) 和颈部网络(Neck) 之间。特征提取网络负责提取输入图像的特征信息,而颈部网络则负责将这些特征信息进行融合和整合。SPPF模块基于一种空间金字塔池化技术,该技术可以处理不同尺度的特征图,并允许网络在多个尺度下对特征图进行池化操作,实现局部特征和全局特征的融合,从而提高特征表达能力和网络的泛化能力。通过SPPF模块,网络能够更好地捕捉输入数据的局部结构和全局信息,从而提升特征提取能力。面对不同的任务需求,SPPF模块还可以通过调整池化层的数量和尺寸来适应。
2.2.3 Neck模块
在YOLOv8模型中,Neck模块负责对来自Back⁃ bone的特征进行进一步处理和融合,以提高目标检测的准确性。它通过引入不同的结构和技术,将多尺度的特征图进行融合,从而更好地捕捉不同尺度目标的信息。
YOLOv8的Neck模块采用了PAN-FPN结构,但不同于YOLOv5 中的PAN-FPN 结构,YOLOv8 删除了PAN-FPN上采样阶段中的卷积结构,同时将C3模块替换为C2f模块。PAN-FPN结构将特征金字塔网络(FPN) 与路径聚合网络(PAN) 相结合,以提高目标检测的准确性和效率。其中,FPN结构通过在不同层级上建立特征金字塔,使模型能够在不同尺度上进行目标检测。它通过上采样和下采样操作,将低层级的细节特征与高层级的语义特征进行融合,以获取更全面和丰富的特征。而PAN用于跨网络的不同层聚合这些特征,这使得网络能够检测不同大小和分辨率的目标。
YOLOv8模型采用C2f结构,通过多尺度特征融合和注意力机制解决了FPN在特征融合过程中可能存在的信息丢失和不完整问题。
3实验及结果分析
3.1数据集
本系统采用两类图像数据:一部分是从COCO128 数据集中提取的,专注于“person”类别的图像;另一部分来源于网络图片,涵盖了火灾、溺水和山体滑坡等紧急场景。所有图像均以JPG格式保存。
考虑到不同类别样本数量的差异可能会影响模型的识别效果,本系统对火灾、溺水、山体滑坡等样本数不足的类别,通过翻转、随机旋转、裁剪等数据增强手段增加了样本数量,使各类样本数达到基本平衡。最终构建了包含4963张图像的数据集,其中包括了person、火灾、溺水、山体滑坡等类别。
3.2训练方法
迁移学习是一种通过利用在一个相关领域上训练得到的模型知识,加速在另一个不同但相关领域上的训练过程的方法。即使在目标领域数据较少的情况下,迁移学习也能获得较好的性能。它基于源领域和目标领域之间的相似性,使源领域学习到的特征表示能够对目标任务有所帮助。
迁移学习通常包括以下步骤:1) 选择一个在相关任务上预训练的模型,提取或利用该模型学习到的特征表示;2) 根据新任务的需求调整模型结构;3) 冻结模型的某些层以保留已学习的特征;4) 微调其他层以适应新任务;5) 在目标任务的数据上进行训练,以优化模型对新任务的适应性;6) 最终评估并迭代模型性能。
在选择预训练模型时,应考虑以下因素:模型与目标任务在特征和结构上的相似性、预训练数据集与目标数据集的一致性、模型在源任务上的性能表现、所需的计算资源以及模型的通用性,以确保模型能够有效地将源任务中学到的知识迁移到目标任务中。
冻结参数:通过设置参数的requires_grad属性为False,可以防止这些参数在训练过程中更新。这通常适用于模型的早期层,因为它们捕获的是更通用的特征。
微调参数:对于模型的后期层,特别是那些与特定任务相关的层,可以设置requires_grad为True,以便在训练过程中更新这些参数。
本次迁移学习将COCO128数据集作为源域,训练YOLOv8n模型,使模型充分学习复杂特征。随后,将自制的数据集作为目标域,继续训练YOLOv8n模型,使其具备识别人、火灾、溺水和山体滑坡的能力。迁移学习流程图如图3所示。