昇腾 AI 行业案例(二):基于 AI 图像处理的安全帽检测
00 - 前言
欢迎学习《昇腾行业应用案例》的 “基于 AI 图像处理的安全帽检测” 实验。在本实验中,你将深入了解如何运用计算机视觉(CV)领域的 AI 模型,搭建一个高效精准的安全帽检测系统,并利用开源数据集对模型效果加以验证。为此,我们将使用昇腾的 AI 硬件以及 CANN 等软件产品。
学习目标
在本课程中,您将学习一些与使用 AI 图像处理技术实现安全帽检测有关的重要概念,包括:
图像数据的预处理方法
采用计算机视觉检测人物和安全帽的方法
目标检测后处理的方法
端到端深度学习工作流
目录
本实验分为四个核心部分。第一部分主要介绍案例的应用场景,第二部分会详细阐述端到端的解决方案,搭建起技术实现的整体框架。第三部分会手把手指导您完成代码编写与实现,最后一部分给出测试题,帮助您巩固学习内容。
场景介绍
解决方案
代码实战
课后测试
JupyterLab
在本实操实验中,我们将使用 JupyterLab 管理我们的环境。JupyterLab 界面是一个控制面板,可供您访问交互式 iPython Notebook、所用环境的文件夹结构,以及用于进入 Ubuntu 操作系统的终端窗口,只需要点击菜单栏的小三角就可以运行代码。
尝试执行下方单元中的一条简单的 print(打印)语句。
01 场景介绍
在各类建筑工地、工厂车间等生产作业场所,安全问题始终是重中之重。安全帽作为保护工作人员头部免受意外伤害的关键防护装备,正确佩戴与否直接关乎生命安全。然而,现实场景中,因人员疏忽、管理不善等因素,未佩戴或未正确佩戴安全帽的情况屡见不鲜,这无疑极大地增加了安全事故发生的风险。
据相关统计数据显示,在建筑行业,因头部受伤导致的伤亡事故占比颇高。每年,全球范围内都有众多工人因未规范佩戴安全帽,在高空坠物、设备碰撞等意外发生时,遭受重创甚至失去生命。这些惨痛的教训凸显出安全帽检测技术的迫切性与重要性。随着 AI 图像处理技术与深度学习的飞速发展,企业得以借助先进的 AI 技术实现作业现场的实时监控,精准、快速地判断工人是否正确佩戴安全帽。这项技术通过分析现场摄像头采集的图像,对画面中的人头进行定位识别,再细致判断安全帽的佩戴情况,一经发现违规现象,立即触发警报,通知现场管理人员及时纠正,从而有效预防安全事故的发生,为安全生产保驾护航。
02 解决方案
安全帽检测已然成为众多企业安全生产监控系统中的关键一环。典型的安全帽检测方案主要包含以下几大模块:
图像预处理模块:负责接收现场摄像头实时传输的图像数据,进行降噪、增强、尺寸调整等预处理操作,提升图像质量,剔除干扰信息,为后续模型处理奠定良好基础。
人物检测模型和头盔检测模型:运用 CV 领域成熟的目标检测模型,例如本课程选用的
YOLOv5
模型,精准定位图像中的人物位置和头盔位置,判断所有人物是否有佩戴安全帽。目标检测后处理模块:目标检测模型的输出结果通常会包含很多重复框,为了方便我们进行结果分析,我们需要对目标检测结果去重,主要使用的是
non_max_suppression
算法。
2.1 图像预处理模块
在真实业务场景中,需要连续分析多帧图像,所以需要构建一个图片管理器,持续给 AI 模型输送图片。此外,原始图片的形状、像素值往往和 AI 模型的输入要求不一致,所以我们需要对原始图片进行处理,包括 resize
、 transpose
、 padding
等操作。
2.2 目标检测模型
目标检测算法历经传统机器学习与 AI 视觉两个发展阶段。早期的机器学习模型多依赖手工设计特征,像 Haar 特征结合 AdaBoost 分类器,或是基于 HOG(Histogram of Oriented Gradients)特征与 SVM(Support Vector Machine)的组合。这些方法在简单场景下有一定效果,但面对复杂多变的施工现场,光照不均、人员密集、遮挡严重等问题使其泛化能力大打折扣,检测精度与效率难以满足需求。深度学习兴起后,基于卷积神经网络(CNN)的目标检测算法渐成主流,YOLOv5 模型便是其中佼佼者,凭借出色的实时性与准确性,广泛应用于目标检测任务。
YOLOv5 模型的主干网络采用的是 CSPDarknet53 结构,能够高效提取图像多尺度特征,为后续检测夯实基础,快速捕捉人物和头盔关键信息。Neck 部分引入了特征金字塔网络(FPN)与 PAN(Path Aggregation Network)结构,可以融合不同层次特征图,增强模型对不同大小目标物体的检测能力,确保小目标也无处遁形。YOLOv5 的 Head 部分负责最终分类与边界框回归任务,依据 Neck 传来的特征图,精准输出检测结果,框定目标位置,附带置信度信息。本课程选用 YOLOv5 模型有诸多优势:高准确性,经大量数据训练优化,精准定位人物和头盔;实时性能佳,满足施工现场实时监控需求;多尺度检测能力强,适配不同距离、大小的目标;模型结构紧凑,便于部署与优化。
03 动手实验
3.1 实验准备
数据集准备
实验所用图像数据源自公开的建筑工地监控数据集,该数据集收纳了海量工人施工场景图片,且均精准标注了安全帽佩戴情况,本实验选取了少量图片,存放于 ./test_data
目录下。
模型权重
本实验采用的 YOLOv5_s 模型权重可从GitHub 仓库下载,确保其适配安全帽佩戴判断任务;下载解压后,妥善置于指定目录,方便后续代码快速加载与调用。万事俱备,接下来让我们正式步入代码实操环节!
3.2 构建图像处理类
从测试图片目录读取图像,构建 Python 类封装图像预处理流程,实现代码复用与高效管理。首先,导入所需三方库:
创建图像预处理类 LoadImages:
其中的 letterbox
函数用于对图像进行填充:
测试该类,读取并预处理图像:
3.3 使用 YOLOv5 模型检测人物和头盔
依据 2.2 章节知识,用 YOLOv5_s 模型精准定位人头。首先,我们需要在服务器的工作目录克隆模型代码,并且把代码仓路径添加到 python 环境,便于我们调用模型:
此外,还需要下载 yolov5_s 的预训练权重 helmet_head_person_s.pt
。接下来测试一下模型的推理功能:
3.4 目标检测结果的后处理流程
正如前面提到的,模型输出的检测框可能存在大量重复的情况,所以我们需要实现 non_max_suppression 算法及其相关的支撑函数,来对这些结果进行过滤和优化。在实现 non_max_suppression
之前,我们需要先实现 2 个依赖函数,xywh2xyxy
用来把检测框的 [x, y, w, h]
坐标转成 [x1, y1, x2, y2]
坐标,box_iou
用来计算检测框之间的重合度。
接下来,我们就可以实现非极大抑制算法了。这个算法的步骤如下:
置信度排序:对于每个图像,NMS 算法首先根据检测到的对象的置信度(confidence)进行排序。置信度通常是指模型对于检测到的对象属于某个类别的概率。
选择最佳边界框:选择置信度最高的边界框,将其作为参考框(reference box)。
计算交并比(IoU):计算参考框与其他所有边界框的交并比(Intersection over Union,IoU)。IoU 是一个衡量两个边界框重叠程度的指标,计算公式为两个边界框交集面积与并集面积的比值。
抑制重叠边界框:如果某个边界框与参考框的 IoU 超过了预设的阈值(iou_thres),则认为这两个边界框重叠过多,将该边界框抑制(即从候选列表中移除)。
迭代处理:在移除所有与当前参考框重叠过多的边界框后,选择置信度次高的边界框作为新的参考框,重复步骤 3 和 4,直到所有边界框都被处理。
输出结果:经过 NMS 处理后,剩下的边界框即为最终的检测结果。
代码实现如下:
此外,我们还需要设计一个函数对检测框的坐标进行缩放,原因是我们在推理时为了让图片能够被 AI 模型处理,对它的形状进行了改变。为了让检测框准确地描绘在原来的图片上,我们需要时缩放函数 scale_boxes
及其支撑函数 clip_boxes
:
最后,我们还需要设计一个函数,用来分析检测到的人物和头盔,看看谁没有带头盔:
3.5 整合代码实现端到端检测
为达成施工现场安全帽佩戴情况的实时、精准监测,需将前文的图像预处理、安全帽佩戴判断等环节代码有机整合,封装成完整的端到端检测流程。
查看目标检测后的结果:
如此一来,便能一站式获取图像中所有人物的检测结果以及对应的安全帽佩戴状态。还可拓展代码,将检测结果可视化,标注在原始图像上,或是接入实时视频流,实现不间断监控,让安全生产管理更智能、高效。恭喜你!至此,你已成功完成基于 AI 图像处理的安全帽检测全部实验流程,希望你能熟练掌握这套技术方案,为更多安全生产场景赋能。
3.6 软件依赖
本实验的依赖软件版本信息如下:
Python:为了方便开发者进行学习,本课程采用 Python 代码实现,您可以在服务器上安装一个 Conda,用于创建 Python 环境,本实验使用的是
python 3.10
;ultralytics:AI 视觉模型三方库,提供了多种 CV 模型的调用接口,内置了模型的前后处理,方便用户调用模型,本实验使用的是
8.3.48
版本;opencv-python:opencv-python 是 OpenCV 库的 Python 接口,它提供了对 OpenCV 功能的访问,包括图像处理、视频分析、计算机视觉算法和实时图像处理等,使得开发者能够在 Python 环境中轻松实现复杂的视觉任务,本实验使用的是
4.10.0.84
版本;numpy: 开源的 Python 科学计算库,用于进行大规模数值和矩阵运算,本实验使用的是
1.26.4
版本;torch:AI 计算框架,本实验使用的是
2.1.0
版本;torch_npu:torch 在昇腾硬件上的适配插件,可以让 torch 在昇腾硬件上执行,本实验使用的是
2.1.0.post6
版本;torchvision:提供了处理图像和视频的常用工具和预训练模型,本实验使用的是
0.16.0
版本;CANN(Compute Architecture for Neural Networks):Ascend 芯片的使能软件,本实验使用的是
8.0.rc2
版本。
04 课后测试
如果把输入数据换成视频,如何处理?(提示:参考昇腾AI行业案例(一):基于AI图像处理的疲劳驾驶检测)
版权声明: 本文为 InfoQ 作者【AI布道Mr.Jin】的原创文章。
原文链接:【http://xie.infoq.cn/article/0d45dd15ada0b085d752f7f64】。文章转载请联系作者。
评论