OAK 结合 YOLOX 实现 安全帽检测
前言
安全生产是社会发展永恒的主题,然而传统的安全生产监督方法存在监控盲区大、监督效率低、外包人员管理困难等缺点。而深度学习的发展,为安全生产带来新的解决思路。
按照规定,正确佩戴安全帽对于安全生产有着重要的意义,但是传统的安全帽佩戴检查需要耗费极大的人力与物力,在实际检查过程中存在诸多不便。使用深度学习网络模型检测安全帽的佩戴情况,可以弥补传统方法的不足。具体的应用场景包括:
- 高危工作区域安全生产:在高危工作区域内部署安全帽佩戴检测系统,通过监控画面实时监测在岗人员安全帽佩戴情况,若未按规定佩戴安全帽,则输出报警信息,自动保存工作人员未按规定佩戴安全帽的截图作为凭证,并通知后台监控人员。该应用可以通过视频监控系统,实时监测高危工作区域工作人员的安全帽佩戴情况,既能确保安全生产的平稳进行,又可以降低监管难度和管理成本。
- 智慧工地:将安全帽检测系统与高空坠落物检测、工作人员疲劳程度检测系统结合起来,打造智慧工地,及时对潜在的危险进行预警,通知相关人员采取措施,从而及时阻断人身伤害事故,确保安全生产。
分析
怎样定义“安全帽佩戴检测”这个问题呢?正常来看是需要判断行人头部区域有没有安全帽,比如有些做法是先用目标检测模型如SSD、Yolo系列及改进系列(各种加速版及适用移动端的网络)检测行人区域,然后再设计一个小的分类网络判断区域内是否存在安全帽。这种做法的好处是比较简单:
- 一来,行人检测算是做的比较多的应用,数据集、算法都比较多;
- 二来,很多数据都是以监控视频的形式存在,标注的时候标注较粗粒度的区域即可,然后做分类。
不过这种做法的劣势也比较明显:
- 第一,这种做法并不是一个端到端的预测过程,显然要做到先检测出行人,再用分类网络判断是否存在安全帽;
- 第二,目标检测和分类的区别,如果用这种粗粒度的标注方法,也就是标注出包含安全帽的较大的区域,而不是紧紧包含安全帽的那块区域,分类效果并不会太好;
- 第三,严谨来说,对于用户更希望得到的是,定位出佩戴安全帽的目标位置,很多情况安全帽虽然在行人区域内,但这时候并不是出于“佩戴”状态。
基于以上分析,这里用的方法是注重安全帽“佩戴”状态,所以业务层面来看,需要的数据是有“佩戴”安全帽和未“佩戴”安全帽的图片。如下图所示:
其中红色的bounding box是未佩戴安全帽的目标,绿色的bounding box是佩戴安全帽的目标,这样可以更精准、更直接的确定是否佩戴的状态,不过需要覆盖更多场景的正负类目标数据。
实现
基于之前的分析,这里的任务可以看成一个常规的目标检测的情形,目标检测算法发展很快,单阶段的多阶段的,各种anchor及anchor-free的,GIoU,soft-NMS,各种金字塔多尺度预测的等等,不过很多sota的方法很难应用在实际项目中,毕竟速度、功耗、成本等因素均要考虑在内,本文仅用 YOLOX-nano 做示例,效果图如下:
源代码:helmet_yolox