极市导读
长三角(芜湖)人工智能大赛——未佩戴头盔驾驶电动车和摩托车的人员进行检测赛题冠军方案解读分享。 >>加入极市CV技术交流群,走在计算机视觉的最前沿
一、介绍
作者硕士毕业于哈尔滨工业大学电气自动化专业,在目标检测/图像分类/语义分割等主流方向经验丰富,多次天池比赛位列Top10,在kaggle平台独立参赛获得过两次银牌;目前已在极市平台先后完成了来自于不同行业的多个视觉算法项目,并完成了算法的落地封装。本次比赛由个人独立完成。
二、赛题分析
任务说明:
-
本赛题的主要任务是对图像中未佩戴头盔驾驶电动车和摩托车的人员进行检测; -
评分标准:采取算法精度和性能加权的方式,精度衡量标准为 f1-score@iou0.5;性能分满分需要达到100FPS的推理速度;
任务难点:
-
样本是由不同的相机采集得到,因此拍摄角度、场景变化多样,模型需要具备较强的泛化能力; -
数据集由26类目标构成,各类别尺寸大小不一,且小目标检测难度较大; -
模型实时性要求较高(100FPS),需要比较好地实现速度和精度的均衡;
训练集真值可视化效果图(脱敏后)如下:
数据分布统计:
-
训练集样本数量:20540张,测试集样本数量:3896张 -
图像分辨率大小不一,训练集和测试集多数为1920x1080,分布接近; -
共存在26类目标,这里根据实际业务需求,在数据预处理阶段将和业务逻辑无关的类别过滤掉,同时合并特征相近的类别:如电动车和摩托车类,以及自行车头盔和摩托车头盔类别,仅保留电动车,hat,head 以及 helmet;
算法选型/整体方案:这里选择YOLOv6完成后续整体方案的开发;YOLOv6是由美团提出的面向工业应用领域的网络,在速度和精度平衡方面做到了接近SOTA的水平;并且在int8后量化以及量化感知训练方面做了非常多的工作,能够实现在精度接近无损的前提下,大幅提高模型的推理速度;
三、赛题思路
算法流程及实现
-
模型配置
-
基于yolov6s模型,采用长边1280像素作为输入尺寸,目的是显著提高小目标的检出能力; -
采用一定的数据增强策略,包括:mosaic,仿射变换、颜色/亮度/对比度增强等,提高检测精度,增强模型的泛化能力; -
训练流程
-
第一阶段:设置随机数种子1,按照4:1划分训练集和验证集;加载yolov6s coco预训练模型,使用强数据增强; -
第二阶段:设置随机数种子2,按照4:1划分训练集和验证集;采用第一阶段的模型作为预训练模型,采用弱数据增强,学习率调低; -
第三阶段:设置随机数种子3,按照4:1划分训练集和验证集;采用第二阶段的模型作为预训练模型,关闭数据增强,学习率调低;
模型推理优化
-
后处理逻辑优化 -
常规的bbox解码以及按类别进行nms,对不同类别设置不同的置信度阈值,从而提高最终的模型精度; -
同时,无论是横向还是纵向行驶的电动车,head的位置多数位于靠近电动车外框上方顶部中心的位置,因此可以通过增加一定的坐标约束来减少head和hat误检;
-
推理耗时优化 -
前处理使用cuda编程实现resize, transpose等算子(也可以选择直接放在模型中),后处理nms实现放到模型中; -
采用int8 PTQ量化方式,从训练集中随机抽取了100张样本作为校准集,量化后精度损失小于0.5%;
消融实验结果
四、总结
精度优化
-
选择了面向工业应用的目标检测框架 YOLOv6,通过 mosaic 数据增强以及增加输入尺寸等方式有效缓解了小目标检测的问题,模型精度提升了3%以上;同时对训练策略进行优化,在未增加耗时的前提下模型精度进一步提升了1%, -
基于业务数据特点,对后处理逻辑进行优化,包括电动车、head、hat类置信度阈值的设置以及 head、hat在x,y方向的坐标约束,模型精度提升了3%以上;
速度优化
-
使用 cuda编程实现resize, transpose等算子,显著降低模型预处理耗时; -
基于Tensorrt推理引擎,并采用 int8 PTQ量化方式,最终量化后精度损失相比fp16模型小于0.5%,模型推理速度提升近40%;
最终,取得了模型榜和算法榜的top1;
参考文献
YOLOv6: A Single-Stage Object Detection Framework for Industrial Applications.
YOLOv6 v3.0: A Full-Scale Reloading.

公众号后台回复“数据集”获取100+深度学习各方向资源整理
极市干货

点击阅读原文进入CV社区
收获更多技术干货

