安全帽佩戴检测算法是高危作业环境中不可或缺的环节。传统依靠人工监管的方式存在效率低下、管理范围有 限、时效性差、无法全场监测等诸多缺陷,因此基于图像视觉的安全帽佩戴检测算法逐渐成为企业实施管理的主要手段。近年来,随着工业4.0概念的提出和深度学习等 高新技术的发展,场景目标物体检测逐渐成为计算机视觉领域的研究热点。

传统视频监控系统对于工厂生产过程中设备或人为的异常情况,只能通过即时的人为监视或人工巡检,以及事后通过历史数据,查找当时事件发生状况。而智能检测系统能够在无人值守监控的情况下,随时随地使用一套固定的逻辑,及时记录不遵循规范的现场人员并通知相关人员。因此,研究如何从监控中提取有用信息,并对感兴趣的信息进行处理,具有重要的实际意义。 对于安全帽识别任务,目前大多数学者是基于传统方法。其中,利用肤色信息定位,再借助自动化仪表支持向量机,通过交叉验证选定合适的核函数,最终实现安全帽佩戴状态的识别;通过连续图像检测运动目标,根据颜色特征判断运动目标是否佩戴安全帽。上述研究已经取得了一些成果。但由于头盔颜色形状差异,以及相机角度、距离、光线等外界因素变化,这些安全帽识别算法的鲁棒性较差,易受外界环境干扰。综上所述,对于安全帽识别任务,目前欠缺一种高鲁棒性的分类算法。随着深度学习技术的不断发展,提出了多种基于深度学习的目标检测和目标跟踪算法,为研究者提供崭新的思路。

我们利用安全帽佩戴检测数据集(SHWD)了解了YOLO模型的基本原理。YOLO网络是一个以目标检测为目的而设计的网络。YOLO系列算法的基本思想是将输入图像分割为S×S个单元格, 且每个单元格生成B个边界框,由被检测目标中心点所在的单元格负责该目标的检测,并计算对应边界框的置信度。YOLO网络仅使用卷积层,属于全卷积网络。这在减少了参数变量的同时,加快了网络的运行速度。相比于其他神经网络,YOLO系列神经网络通过合理的设计,成功地将目标检测问题转化为回归问题,因而直接通过网络产生物体的位置和所属类别信息。而其他主流网络,大多数需要对已经过神经网络处理输出的图像进行再处理。

YOLOv3网络是YOLO网络作者根据初代YOLO网络,经过数次改良的产物,具有更好的性能。YOLOv3主体卷积网络是以 Darknet53结构为基础。Darknet 53 结构由53层卷积层搭建而成。为了防止梯度消失以及梯度爆炸现象,Darknet-53 网路之间由加入了残差单元,这样可以让网络进行层数更深的训练。由于残差单元过多会导致其他不良的结果,因此 Darknet-53 选择加入五个残差单元( Resnetunit)。每个残差单元的搭建上层原始输入不仅仅会通过两个DBL单元输入到更下层,还会跳过DBL单元直接到下层。换而言之,下层会收到原始上层数据以及处理过的上层数据。通过这种方式,构建了一个残差单元。

DBL单元结构包含卷积层、 批归一化层和leakyrelu激活函数层,共计3层结构。YOLOv3加入了更多的卷积层,用于提取物体的深层特征。YOLOv3 共有 75 个卷积层,包括跳跃连接和上采样层。此外,它以2步长的卷积层替代了传统的最大池化层。卷积与池化层相比,有了更多变化的可能。YOLOv3 网络对输入图片总共进行了5次降采样,并分别在最后3次降采样中对目标进行预测。最后3次降采样的输出,可以理解为分别包含了3个尺度目标检测的特征图。当尺度越大时,其提取的特征图就越小。这些大小不同的特征图也有各自的作用:小特征图提供了深层次语义信息,大特征图则提供了目标位置信息。此外,YOLOv3 网络中事先准备了通路,使得小特征图可以经过上采样和大特征图融合,从而使大特征图中含有小特征图中的特征信息。即使模型设定的检测目标较大,图中小特征的丢失也较少。因此,YOLOv3网络对于大小各异的目标均有不错的定位效果。

1.    import random
 2.    import string
 3.    
 4.    f1 = open('1.txt', 'x')
 5.    for x in range(10000):
 6.        string0 = str(''.join(random.sample(
 7.            ['z', 'n', 'm', 'l', 'k', 'j', 'i', 'h', 'g', 'f', 'e', 'd', 'c', 'b', 'a'], 4)))
 8.        f1.write(string0)
 9.        if x % random.randint(1, 50) == 0:
 10.            f1.write(' ')
 11.            continue
 12.        if x != 9999:
 13.            f1.write('\n')
 14.    f1.close()
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.