PyTorch 深度学习实战 | 基于 YOLO V3 的安全帽佩戴检测

简介: 本期将提供一个利用深度学习检测是否佩戴安全帽的案例,从而展示计算机视觉中的目标识别问题的一般流程。目标检测是基于图片分类的计算机视觉任务,既包含了分类,又包含了定位。给出一张图片,目标检测系统要能够识别出图片的目标并给出其位置。由于图片中目标数是不确定的,且要给出目标的精确位置,目标检测相比分类任务更复杂,所以也有更多的使用场景,如无人驾驶、智慧安防、工业安全、医学图像等方面。而本案例就是工业安全领域的一个应用,也可移植到其他的目标检测任务。

image.png


本期将提供一个利用深度学习检测是否佩戴安全帽的案例,从而展示计算机视觉中的目标识别问题的一般流程。目标检测是基于图片分类的计算机视觉任务,既包含了分类,又包含了定位。给出一张图片,目标检测系统要能够识别出图片的目标并给出其位置。由于图片中目标数是不确定的,且要给出目标的精确位置,目标检测相比分类任务更复杂,所以也有更多的使用场景,如无人驾驶、智慧安防、工业安全、医学图像等方面。而本案例就是工业安全领域的一个应用,也可移植到其他的目标检测任务。

在一个项目开始时,首先需要明确最终的目标,然后对目标分解,并根据不同目标执行不同的实现方案。本案例较为容易分解出实现目标和实现方式,即通过深度学习中常用的目标检测方法对收集到的图片进行学习,从而得到可以用于结果推断的模型参数。基于这样的目标和方法,首先就需要进行数据收集、处理,然后选择合适的模型以及实现模型的框架。

1、数据采集与标注

数据采集和标注是很重要但繁杂的基础工作,是整个工程的很重要的一个环节。本案例中的数据主要是图片,而图片的选择和标注的质量往往决定着模型的精度,有时候质量太差的数据会导致模型无法收敛。

一般来说,采集图片可以借助于搜索引擎、在实际的业务场景的拍摄和借助已有的数据集三种方式。这些方式各有特点,很多时候需要结合这些方式来完成图片的采集。借助搜索引擎采集的图片在尺寸、内容上会更加丰富,这也意味着会对模型的泛化能力要求更高,但是采集相对简单,可以通过写爬虫的方式进行。而来自实际业务场景的图片或者视频则需要消耗人力和物力去拍摄,而且为了适应不同的时间和地点,拍摄前的规划也是很重要的。这种采集后的图片往往质量较高,规格较为统一,对后续的标注和训练也有很大的帮助。而最常用的一种就是借助已有的数据集,尤其是进行一些小的测试或者试验时。已有的数据集也有不同的类型,包括一些大的计算机视觉比赛发布的数据集,如PASCAL VOC、COCO 数据集;还有一些人工智能公司发布的数据集,如旷世联合北京智源发布的 Objects 365 数据集;还有个人采集标记的数据集等。不同类型的数据集的质量和数量是不同的,所以要优先选择质量较高的数据集。而且在实际应用时,很有可能只是抽取其中一部分,或者进行二次加工。

通过爬虫获取到的图片,由于图片质量、尺寸、是否包含检测目标等原因,一般是不能直接拿来用的,所以需要对获取到的图片进行过滤处理。当然,通过人工筛选的方式是可以的,但是如果图片数量过于大,就会耗时耗力,所以也可以用一些自动化脚本来进行处理。例如:利用已经训练好的成熟的分类模型对图片进行相似度判断,从而去除相似的图片;利用已经训练好的成熟的人体检测模型去除不包含人的图片等。
小技巧/

在使用爬虫获取图片时,一方面可以通过多线程的方式加快爬取速度,另一方面可在设置搜索关键词时只用“安全帽”这样的关键词是不够的,可以多设置一些类似“建筑工地”“建筑工人”等,以扩大搜索范围。而在对图片进行标注时,可以先标注一部分,然后根据这一小部分图片训练出一个粗糙模型,然后使用这个粗糙模型对剩下未标注的图片进行自动标注,然后再进行人工调整,这样会节省较多时间。

本案例使用的个人在 GitHub 上开源的安全帽检测数据集。该数据集共 7581 张图片,包含9044个佩戴安全帽的标注(正类),以及 111514 个未佩戴安全帽的标注(负类)。正类图片主要通过搜索引擎获取,负类图片一部分来自 SCUT-HEAD数据集。所有的图片用LabelImg 工具标注出目标区域及类别,包含两个类别标签:hat表示佩戴安全帽,person表示普通未佩戴的行人头部。

该数据集采用的是类似PASCAL VOC 数据集的结构。PASCAL VOC 数据集来自PASCAL VOC 挑战赛。该挑战赛是由欧盟资助的网络组织的世界级的计算机视觉挑战赛。PASCAL的英文全称为 Pattern Analysis, Statistical Modelling and Computational Learning。PASCAL VOC从2005年开始举办挑战赛,每年的内容都有所不同,从最开始的分类,到后面逐渐增加检测、分割、人体布局、动作识别等内容,数据集的容量以及种类也在不断地增加。目前,普遍被使用的是 VOC2007和VOC2012数据集两种,虽然是同一类数据集,但是数据并不相容,一般会将两组数据集结合使用。PASCAL VOC 数据集的基本结构代码如下:

640.png


由以上结构可以看出,该数据集以文件名作为索引,使用不同的.txt文件对图片进行分组,而每张图片的尺寸、目标标注等属性都会保存在.xml文件中。POSCAL VOC数据集.xml文件数据格式示例如图1所示。对于目标检测任务来说,需要关注的属性就是 filename(图片名称)、size (图片尺寸)、object 标签下的 name(目标类别)和 bnbox (目标的边界框)。

640.png


■ 图1 POSCAL VOC数据集.xml文件数据格式示例

2、模型选择

在实际的应用中,目标检测模型可以分为以下两种:

一种是 two-stage 类型,即把物体识别和物体定位分为两个步骤,然后分别完成。其典型代表是 R-CNN 系列,包括 R-CNN、Fast R-CNN、Faster-RCNN 等。这一类型的模型相对来说识别错误率较低,漏识别率也较低,但相对速度较慢,无法满足实时检测场景。

为了适应实时检测场景,出现了另一类目标检测模型,即one-stage 模型。该类型模型的典型代表有SSD系列、YOLO系列、EfficientNet系列等。这类模型识别速度很快,可以满足实时性要求,而且准确率也基本能达到Faster R-CNN的水平。尤其是YOLO系列模型,可以一次性预测多个Box位置和类别的卷积神经网络,既能够实现端到端的目标检测和识别,同时又能够具有基于该模型的各种变型,适用于各种场景,所以本案例选用 YOLO V3 模型作为实现模型。但是需要注意的是,在实际项目中要根据业务场景进行选择,例如是否要求实时性、是否要在终端设备上等。而且为了得到更好的效果,往往会对多个模型进行尝试,然后进行对比。
3

数据格式转换

有时候,数据集的格式与模型读取所需要的格式并不相同,所以可以通过写脚本来进行格式转换。类似PASCAL VOC类型的数据集,会以目录区分训练数据集、测试数据集等,这种形式不但读取复杂、慢,而且占用磁盘空间较大。而 TFRecord 是 Google公司官方推荐的一种二进制数据格式,是Google公司专门为TensorFlow设计的一种数据格式,内部是一系列实现了Protocol buffers 数据标准的Example。这样,就可以把数据集存储为一个二进制文件,从而可以不用目录进行区分。同时,这些数据只会占据一块内存,而不需要单独依次加载文件,从而获得更高的效率。所以,需要将 PASCAL VOC 格式的数据转换为 TFRecord 类型的数据。相对应的转换代码和注释如代码清单1所示。

代码清单1

<annotation>
<folder>hat0l</folder><filename>000000.jpg</filename><path>D;\dataset\hat01\000000.jpg</path><source>
<database>Unknown</database></source><size>
<width>947</width><height>1421</height><depth>3</depth>
</size>
<segmented>0</segmented><object>
<name>hat</name><pose>Unspecified</pose><truncated>0</truncated><difficult>0</difficult><bndbox>
<xmin>60</xmin><ymin>66</ymin><xmax>910</xmax><ymax>1108</ymax></bndbox>
</object>
</annotation>
目录
相关文章
|
22天前
|
机器学习/深度学习 人工智能 PyTorch
PyTorch深度学习 ? 带你从入门到精通!!!
🌟 蒋星熠Jaxonic,深度学习探索者。三年深耕PyTorch,从基础到部署,分享模型构建、GPU加速、TorchScript优化及PyTorch 2.0新特性,助力AI开发者高效进阶。
PyTorch深度学习 ? 带你从入门到精通!!!
|
1月前
|
机器学习/深度学习 存储 PyTorch
Neural ODE原理与PyTorch实现:深度学习模型的自适应深度调节
Neural ODE将神经网络与微分方程结合,用连续思维建模数据演化,突破传统离散层的限制,实现自适应深度与高效连续学习。
80 3
Neural ODE原理与PyTorch实现:深度学习模型的自适应深度调节
|
23天前
|
机器学习/深度学习 数据采集 人工智能
深度学习实战指南:从神经网络基础到模型优化的完整攻略
🌟 蒋星熠Jaxonic,AI探索者。深耕深度学习,从神经网络到Transformer,用代码践行智能革命。分享实战经验,助你构建CV、NLP模型,共赴二进制星辰大海。
|
2月前
|
机器学习/深度学习 传感器 人工智能
火灾火焰识别数据集(2200张图片已划分、已标注)|适用于YOLO系列深度学习分类检测任务【数据集分享】
在人工智能和计算机视觉的快速发展中,火灾检测与火焰识别逐渐成为智慧城市、公共安全和智能监控的重要研究方向。一个高质量的数据集往往是推动相关研究的核心基础。本文将详细介绍一个火灾火焰识别数据集,该数据集共包含 2200 张图片,并已按照 训练集(train)、验证集(val)、测试集(test) 划分,同时配有对应的标注文件,方便研究者快速上手模型训练与评估。
火灾火焰识别数据集(2200张图片已划分、已标注)|适用于YOLO系列深度学习分类检测任务【数据集分享】
|
2月前
|
机器学习/深度学习 人工智能 监控
坐姿标准好坏姿态数据集(图片已划分、已标注)|适用于YOLO系列深度学习分类检测任务【数据集分享】
坐姿标准好坏姿态数据集的发布,填补了计算机视觉领域在“细分健康行为识别”上的空白。它不仅具有研究价值,更在实际应用层面具备广阔前景。从青少年的健康教育,到办公室的智能提醒,再到驾驶员的安全监控和康复训练,本数据集都能发挥巨大的作用。
坐姿标准好坏姿态数据集(图片已划分、已标注)|适用于YOLO系列深度学习分类检测任务【数据集分享】
|
2月前
|
机器学习/深度学习 编解码 人工智能
102类农业害虫数据集(20000张图片已划分、已标注)|适用于YOLO系列深度学习分类检测任务【数据集分享】
在现代农业发展中,病虫害监测与防治 始终是保障粮食安全和提高农作物产量的关键环节。传统的害虫识别主要依赖人工观察与统计,不仅效率低下,而且容易受到主观经验、环境条件等因素的影响,导致识别准确率不足。
|
2月前
|
机器学习/深度学习 自动驾驶 算法
道路表面缺陷数据集(裂缝/井盖/坑洼)(6000张图片已划分、已标注)|适用于YOLO系列深度学习分类检测任务【数据集分享】
随着城市化与交通运输业的快速发展,道路基础设施的健康状况直接关系到出行安全与城市运行效率。长期高强度的使用、气候变化以及施工质量差异,都会导致道路表面出现裂缝、坑洼、井盖下沉及修补不良等缺陷。这些问题不仅影响驾驶舒适度,还可能引发交通事故,增加道路养护成本。
道路表面缺陷数据集(裂缝/井盖/坑洼)(6000张图片已划分、已标注)|适用于YOLO系列深度学习分类检测任务【数据集分享】
|
1月前
|
机器学习/深度学习 数据采集 人工智能
PyTorch学习实战:AI从数学基础到模型优化全流程精解
本文系统讲解人工智能、机器学习与深度学习的层级关系,涵盖PyTorch环境配置、张量操作、数据预处理、神经网络基础及模型训练全流程,结合数学原理与代码实践,深入浅出地介绍激活函数、反向传播等核心概念,助力快速入门深度学习。
106 1
|
5月前
|
机器学习/深度学习 PyTorch API
PyTorch量化感知训练技术:模型压缩与高精度边缘部署实践
本文深入探讨神经网络模型量化技术,重点讲解训练后量化(PTQ)与量化感知训练(QAT)两种主流方法。PTQ通过校准数据集确定量化参数,快速实现模型压缩,但精度损失较大;QAT在训练中引入伪量化操作,使模型适应低精度环境,显著提升量化后性能。文章结合PyTorch实现细节,介绍Eager模式、FX图模式及PyTorch 2导出量化等工具,并分享大语言模型Int4/Int8混合精度实践。最后总结量化最佳策略,包括逐通道量化、混合精度设置及目标硬件适配,助力高效部署深度学习模型。
771 21
PyTorch量化感知训练技术:模型压缩与高精度边缘部署实践
|
20天前
|
边缘计算 人工智能 PyTorch
130_知识蒸馏技术:温度参数与损失函数设计 - 教师-学生模型的优化策略与PyTorch实现
随着大型语言模型(LLM)的规模不断增长,部署这些模型面临着巨大的计算和资源挑战。以DeepSeek-R1为例,其671B参数的规模即使经过INT4量化后,仍需要至少6张高端GPU才能运行,这对于大多数中小型企业和研究机构来说成本过高。知识蒸馏作为一种有效的模型压缩技术,通过将大型教师模型的知识迁移到小型学生模型中,在显著降低模型复杂度的同时保留核心性能,成为解决这一问题的关键技术之一。

热门文章

最新文章

推荐镜像

更多