极市导读
长三角(芜湖)人工智能大赛——基于AI组合模型街道场景下的垃圾识别冠军方案解读分享。 >>加入极市CV技术交流群,走在计算机视觉的最前沿
一、介绍
团队来自中国矿业大学。队长毕业于中国矿业大学,作为技术骨干参与国家自然科学基金等项目3项,以第一或通讯作者发表论文4篇(中科院一区);曾获得ECV2023睡岗识别亚军、2022天骄杯人员倾倒行为识别算法冠军。
本次比赛获得名次/分数如下表所示:
二、赛题分析
1.赛题存在的难点
(1)赛题任务是检测+分割;
(2)赛题成绩>=0.7;
(3)总分是由(f1-score*0.5+miou*0.5)*0.9+算法性能值*0.1三部分组成;
(4)需求为Linux SDK(C++实现)
2.数据集分析:
(1)训练集27260张,测试集2946张,图片无固定尺寸;
(2)检测两个类别:垃圾桶(garbage_can)、人(person);分割五个类别:木板(board)、瓶子(bottle)、盒子(carton)、泡沫(foam)、袋子(garbage_bag);
存在的问题:目标大小不一;(2)遮挡;(3)环境多样;(4)光照多样;(5)噪声多;
三、赛题思路
1.模型选择
我们在选择baseline考虑到以三个因素:
(1)部署场景:算法输入设备是摄像头/NVR,固定摄像头,高度3-10m;1080p分辨率下算法最大/最小识别像素为10*10;
(2)软硬件要求:运行在x86架构(酷睿i系列芯片和至强系列芯片,显卡支持RTX、GTX、Tesla);需求为Linux SDK(C++实现);英伟达显卡;
(3)指标要求:语义分割iou,目标检测f-score,性能绝对得分=所得性能值fps/赛道标准值fps(标准值fps为100),总分=(f-score*0.5+miou*0.5)*0.9+算法性能得分*0.1;
因此,我们选择了基于yolov5的yolov5ds,其特点如下:(1)yolov5的特点就是易训练、好部署、模型性能优,所以yolov5ds继承了其优点;(2)解耦头:使用小数据集情况下提升map,大数据效果不明显;(3)类别权重:改善数据集长尾分布情况;(4)语义分割是直接添加语义分割头。
2.框架优化
Yolov5ds在训练模型时,将检测和分割分为两步来训练,首先检测和分割数据是分别读取, 其次训练需要两次前向和反向计算,获得检测梯度和分割梯度,然后相加更新。流程图如下所示:
这种训练方式在读取数据时消耗过多CPU内存,训练时间也加长,因此根据这两点,我们对其进行优化,其过程为:
3.模型优化
Yolov5ds的检测解耦头利用多层卷积,目的是使用小数据集情况下提升map,但对大数据效果不明显。因此我们将检测解耦头简单化。另外我们对于分割头的通道减半,这样在保证精度无损失情况下,性能提升。
优点:(1)将检测头简化后,输入图像为960时,在精度损失0.2%,性能约从25.6fps提升至55.18fps;(2)分割头通道减半后,输入图像为960时,精度几乎无损失下,性能约从55.18fps提升至75.6fps;(3)两者都做到模型大小减少,节省内存;
4.训练时间优化
我们以输入图像以960*960*3为例,最初直接采用yolov5ds训练,这种数据加载方式是以张为单位,基于像素的访问,但是训练时速度很慢,可能受其他线程影响造成的,大概一轮要30分钟左右。然后我们就尝试了cache这种方式,它是将所有训练数据存入到内存中,全部读进去大约占70G的内存,平台是提供32G的内存,内存不足,无法训练;于是我们就尝试改进训练读取数据方式,我们采用的是cache+图像编解码的方式,内存占用仅是cache的1/6,由于添加了编解码,速度比cache慢点,但从数据比较来看,相差无几。这样既能节省内存又能加快训练速度。节省了我们训练过程的极力值和加快实验的步伐。
5.模型剪枝
模型剪枝大概分为权重剪枝、单位剪枝、结构剪纸、稀疏剪枝和动态剪枝五种方式。权重剪枝是移除那些权重值小于某个阈值的连接。优点:实现简单;缺点:可能会导致模型的结构变得不规则,从而影响硬件的优化。单位剪枝是移除整个神经元或者卷积核。优点:保持模型的结构规则,从而更适合硬件的优化;缺点:可能会对模型性能产生更大影响。结构剪纸是移除模型中部分结构,如卷积层或全连接层。优点:大大减小模型的大小;缺点:需要更复杂的算法来确定应该移除哪些结构。稀疏剪枝是试图在保持模型性能的同时,最大化模型的稀疏性。通常通过一些优化算法来实现,例如L1正则化。动态剪枝为模型的训练过程中动态地进行剪枝。优点:根据模型训练情况来调整剪枝策略;缺点:实现起来可能比较复杂。
我们采用pytorch自带的稀疏剪枝,因子设置为0.3。代码如下:
6.模型加速
TensorRT是一个高性能的深度学习推理(Inference)优化器,可以为深度深度学习应用提供低延迟、高吞吐率的部署推理,只负责模型的推理过程。TensotRT主要做了这两方面来提升模型的运行速度:(1)TensorRT支持INT8和FP16的计算。一般网络训练时,通常使用32位或16位数据,而TensorRT在网络推理时选用较低的精度,达到加速推理的目的;(2)TensorRT对于网络机构进行了重构,把一些能够合并的运算合并在一起,针对GPU的特性优化。
7.最后比赛结果
综合考虑,在保证精度的情况下,我们添加各种trick后,性能从25.6fps提升至98.6fps。
四、总结
本文针对2023长三角(芜湖)算法大赛------基于AI组合模型寄到场景下的垃圾识别算法任务进行总结与归纳。相关结论可以归纳为以下几点:
-
数据分析对于训练模型至关重要。数据不平衡、图像尺寸和目标大小不一、目标密集和遮挡等问题,应选用对应的baseline和应对策略。例如,数据不平衡可尝试过采样、focal loss、varifocal loss、数据增强等策略;图像尺寸和目标大小不一可采用多尺度、数据裁剪等方法。
-
针对算法精度和性能两者取舍来说,可先实验网络大小和输入图片大小对模型结果的影响,不同任务和不同数据情况,两者相差较大。所以不能一味为了提高速度,单纯压缩网络大小;
-
针对性能要求时,可采用TensorRT INT8、C++等方式部署模型,也采用模型剪枝等方式,这样可在保证速度的前提下,使用较大网络,提升模型精度。
五、参考文献
-
https://github.com/ultralytics/yolov5.git
-
https://cvmart.net/race/10911/base
-
https://github.com/midasklr/yolov5ds
-
https://blog.csdn.net/IEEE_FELLOW/article/details/121912670?spm=1001.2014.3001.5502

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

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

