
极市导读
本文为ECV2022竞赛获得街道垃圾识别方案冠军的思路分享,作者给大家分享了他在比赛的过程中是如何基于赛题选择模型以及算法流程的实现,希望能够对有所帮助~ >>【极市平台 x VALSE2022 CV开发者之夜】非正式交流晚宴向您发出邀请!🌟🌟🌟来现场朋友请戳此报名:https://sourl.cn/eiRQ84
Part 1 / 赛题分析
项目背景:街道垃圾识别算法主要用于城市街道场景,通过视频输入自动识别,监控区域内如果存在垃圾,则算法需要产生报警,将报警信息发送至管理人员。相较于传统只能依靠人工巡检维护的方式,成本低,识别率高。
数据集:训练数据集包含24474张图片,测试数据集包含10467张
评价指标:该赛道最终得分采用报警模块准确度、正确报警准确率综合得分形式,具体形式如下:
最终得分=算法准确率0.9+算法性能绝对值0.1
模型选择
当前目标检测网络主要分为Anchor-based和Anchor-Free两大类
anchor-based:
优点:加入了先验知识,模型训练相对稳定;密集的anchor box可有效提高召回率,对于小目标检测来说提升非常明显。
缺点:对于多类别目标检测,超参数相对难设计;冗余box非常多,可能会造成正负样本失衡;在进行目标类别分类时,超参IOU阈值需根据任务情况调整。
anchor-free:
优点:计算量减少;可灵活使用。
缺点:存在正负样本严重不平衡;两个目标中心重叠的情况下,造成语义模糊性;检测结果相对不稳定。
考虑赛题为街道垃圾识别,其中垃圾大部分为小目标,综合考虑上述因素,决定使用anchor-based,可以调整相应的超参数进行调整。
由于需要进行部署,当前YOLO系列的部署比较完善,结合性能以及准确率的要求下,我们选用YOLOv5作为主体框架。
综合考虑YOLOv5的模型准确率,推理速度,以及参数量,最终选择YOLOv5l作为最终的模型
Part 2 / 算法流程及实现
数据预处理
赛题提供是标注的xml文件以及相应的图像,但是YOLOv5的输入为图像以及相应的txt文件,因此需要将xml文件转换为相应的txt文件
模型框架:
模型提升:
-
数据增强:通过旋转,随机剪裁等方式对训练数据进行增强,来提高模型的泛化能力,提高模型识别的准确率。 -
冻结训练:通过冻结训练减少内存的使用,提高训练的速度,,可以测试多种超参数对模型的影响。 -
调整图片的输入大小以及NMS过程中超参数 -
使用python+tensorrt进行部署 -
使用C++进行部署
冻结训练
C++ 部署
C++部署主体框架参考极市平台提供的封装代码 https://gitee.com/cvmart/ev_sdk_demo4.0_vehicle_plate_detection.git
C++部署中遇到问题:平台提供的C++部署代码是基于YOLOX的,而我使用YOLOv5的代码,使用export.py导出onnx模型时,由于YOLOv5代码本身的问题导致导出的onnx模型存在精度问题,平台所提供的代码无法正确预测。因此我对代码进行了一次重构
最终测试YOLOV5s 使用C++推理速度可以达到330FPS,并且识别准确率下降不到1%
Part 3 / 实验结果
F1-Score
FPS
Part 4 / 方案总结
-
建模过程中,对数据进行分析很重要,对于数据不平衡、图像尺寸和目标大小不一、目标太小,选用不同的网络以及相应的解决方案。比如说,本赛题中,考虑训练数据太少,采用旋转,随机剪裁来增加训练数据。 -
对于网络的精度以及网络的推理速度,应该需要综合考虑二者之间的关系。 -
使用C++进行推理,不仅仅大幅度的提升推理速度,而且有利于模型的部署。
参考文献
公众号后台回复“极市直播”获取极市直播第101期(PseCo:FPN错位对齐,实现高效半监督目标检测)PPT下载~

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

