周伟伟 智能边缘事业部&算法工程师 天翼云科技有限公司 中国-广州 zhouweiwei@chinatelecom.cn | 黄宇生 智能边缘事业部&算法工程师 天翼云科技有限公司 中国-广州 huangyush@chinatelecom.cn | 林瑞玉 智能边缘事业部&算法工程师 天翼云科技有限公司 中国-广州 linry@chinatelecom.cn |
团队简介
深藏blue团队成员来自于天翼云科技有限公司智能边缘事业部大数据与AI产品线。团队成员包括周伟伟、黄宇生、林瑞玉,成员长期从事人工智能算法开发,在计算机视觉方向积累了丰富的经验。
摘要
人群密度估计是计算机视觉中的一项重要任务,旨在同时识别各种情况下的任意大小的目标,包括稀疏和杂乱的场景。它主要应用于现实生活中的自动化公共监控,能够在公共安全管理、公共空间设计、数据收集分析等方面发挥重要的作用。
“基于TPU平台实现人群密度估计”比赛致力于人群密度估计算法在算能TPU平台的落地,对于给定的预训练模型,通过优化预处理、模型推理方式、模型量化等,兼顾推理精度与推理速度。本赛题的难点在于精度和推理速度的平衡,对于给出的四个预训练模型,我们先通过同等输入大小和同等预处理下,分别比较FP32和INT8模型的综合分数,选择VGG作为后续模型;引入网格搜索的方法,进行最优参数区间确定;结合人工先验知识,确定最后的预处理方法和推理形式。与官方的基线模型相比,我们的方案取得了非常显著的综合提升,最终获得了B榜排名第二的成绩。
关键词
人群密度估计,TPU,算能
1. 赛题分析
人群密度估计与计数是指对拥挤场景中人群分布及数量进行统计,对安全系统、交通控制等具有重要意义。
本赛题不需要参赛选手训练人群密度估计模型,给定4个预训练模型CANNet【1】、CSRNet[2]、MCNN[3]、VGG[4],选手需要通过实验自主选择预训练模型,在数据预处理、模型输入、模型量化等几个方面进行优化,兼顾推理精度和推理速度。算法推理过程需要在算能云空间中使用TPU卡实现,可选的模型格式包括FP32和INT8的BModel。
评测指标包括精度和速度两个方面:
在精度方面,通过Mean Absolute Error(MAE)、Root Mean Squared Error(RMSE)和Normalized Absolute Error(NAE)三个指标评估模型精度。
在速度方面,通过模型推理时间TIME评估模型性能,为数据集图片推理的平均时间,单位为s。
最终得分计算公式为:
SCORE=(250-MAE)*0.2+(500-RMSE)*0.1+(0.4-NAE)*200+(2-TIME)*100
从分数加权公式可以看出,对于推理精度有多方位的考察,推理速度占据了较高的权重。
因此,在处理该赛题时不能一味追求精度或者速度,必须在两者之间取得平衡。
2. 解决方法
我们认真分析了数据集与任务的特点,从数据处理、模型选取、量化方式、推理方式几个层面进行优化。
2.1 数据分析
图1:测试图片0067.jpg
图2:测试图片0009.jpg
图3:测试图片0008jpg
通过分析测试数据集的特点,发现存在着不同尺度、不同数量级人群密度的图片,如图1、图2和图3,人群密度相差巨大,大密度的图片尺寸往往也较大。 对于人群密度估计模型,能搞较好处理图1、图2这类目标面积较大的图片。由于卷积神经网络下采样作用,会使得原始图片上的区域在经过卷积后尺寸变小,图3中的人头区域将会丢失特征,导致无法获得准确计数,因此有必要将大尺寸图片进行分割后进行推理,同时,为保证高密度人群图片的推理效果,不适宜将图片缩放至统一尺寸,而应该缩放到一个区间内,使得原始尺寸较大的图片缩放后也有较大尺寸。
按照通用经验,先对数据集进行尺寸和宽高比分析,有助于确定模型的输入大小或者比例。
图4:测试图片宽度直方图
图5:测试图片高度直方图
图6:测试图片宽高比直方图
由图4可知,大部分图片宽度集中在500-5000。由图5可知,测试图片的高度集中在4000以内。由图6可知,测试集的宽高比主要分布在1.5附近,因此,选择一个宽高比在1.5左右的模型输入大小,推理图片的缩放形变较小。
2.2 模型选择
本赛题提供了四个预训练权重CANNet、CSRNet、MCNN、VGG,无需训练模型。因此,必须先确定好预训练权重才能更好开展后续优化工作,为此我们采取一种非常直接的方法,即固定数据集、预处理方法、模型输入大小情况下,只更换预训练模型,来测试各个模型在测试数据集上的综合表现。对于本次实验,选用官方给定的10张带标签的图片进行分数计算。将图片的尺寸(H*W)缩放到(576,768)~(2048,2048),模型输入大小为(3,576,768),分别测试FP32和INT8模型的综合分数。由于提供的CANNet权重无法正常加载,故忽略该模型。
模型 | FP32 | INT8 |
CANNet | / | / |
CSRNet | 68.34 | 65.19 |
MCNN | 169.76 | 161.49 |
VGG | 186.74 | 177.64 |
表1:4个预训练权重在相同条件下的得分
通过表1可以得出VGG和MCNN均远高于CSRNet的得分,且VGG综合表现优于MCNN,因此选择VGG作为后续实验的预训练模型。
2.3 参数选择
在确定模型结构之后,需要确定模型输入大小。此外,根据先前的分析,需要将大图切割成小图再输入模型进行推理,因此,原始图片缩放范围也是一个重要的超参数。经过总结,确定以下参数可能会影响综合得分。
参数名称 | 作用 |
模型输入大小 | 影响推理速度与精度 |
Batch Size | 影响推理速度 |
图片缩放范围 | 影响推理数量和精度 |
FP32或INT8 | 影响推理速度与精度 |
表2:影响综合得分的因素
由于将模型进行INT8量化需要一定时间,包含在参数搜索中将耗费较长时间,且根据先前模型选择实验,INT8综合分数通常低于FP32,因此在进行网格搜索时只考虑模型输入大小,Batch Size和图片缩放范围,后续确定超参数后再进行量化过程的优化策略。
对于模型输入大小,采取16的倍数,从112x112到576x768,选取几个有代表性的输入尺寸作为搜索范围。Batch Size从1到16,逐次乘以2。测试图片的宽度在500-5000,高度集中在4000以内,因此选择宽度最小值一半左右且为16倍数的位置作为最小搜索尺寸,即288。最大尺寸同样选择介于宽高最大值4000~5000一半的位置,选取2048这个值作为最大搜索尺寸。参数搜索范围如表3所示。
参数名称 | 参数范围 |
模型输入大小 [H,W] | [[112,112],[144,144],[144,192], [224,224],[288,384],[576,768]] |
Batch Size | [1,2,4,8,16] |
图片缩放范围 [minH,minW, maxH,maxW] | [[224,224,768,768], [288,384,1024,1024], [288,384,2048,2048], [432,576,1536,1536], [576,768,2048,2048]] |
表3:网格搜索参数范围
使用以上参数在10张测试图片上进行实验,得到每组参数的综合分数。
在经过网格参数搜索后,可得到以下结论:
- Batch Size对推理速度影响较小,Batch推理耗时跟单张图片推理几乎是线性关系,因此固定Batch Size为1。
- 若模型输入大小一定,随着图片尺寸增加,精度提升,但是切割后小图数量增加导致推理次数增多,速度分降低更快。
- 较小的模型输入大小对精度影响较小。
因此,最终选择较小的图片尺寸和较小的模型输入,即:将测试图片统一缩放到最小为288x384,最大为768x768的范围;模型输入大小固定为144x192;Batch Size固定为1。使用上述参数进行实验,基于FP32 BModel模型测试,即可获得较高综合分数。
2.4 模型量化
官方提供了一键量化命令 auto_cali对FP32模型进行量化,需要先生成lmdb数据集,推荐使用200张训练数据集进行校准。
我们尝试了两种方案准备lmdb数据集:
- 直接使用200张训练数据集进行校准。
- 将200张训练图片按预处理方式进行缩放并根据模型输入大小进行裁剪,得到更多数量的小图,并随机选取不同数量小图进行校准。
对于方案1和方案2,FP32转为INT8综合得分均有所降低,故最终放弃INT8的方案。受限于时间,未能进行更多的尝试。
最终,我们选择将图片统一缩放到最小为288x384,最大为768x768的范围,模型输入大小固定为144x192,Batch Size固定为1,FP32 BModel模型推理作为最终方案,在B榜获得了第二名。
3. 比赛总结
本次比赛我们很快就确定了优化方向,通过分析数据和任务特点确定了可优化的参数和策略,使用网格搜索的方式很快确定了一组较好的参数,获得了显著提升。
通过该比赛了解到人群密度估计模型落地的困难点,针对任务特点设计优化策略,学习使用国产TPU进行量化和推理,使个人算法能力得到较大提升。但是,受限于时间,我们没有对INT8量化造成较大精度损失原因进一步分析,没有更加深入研究官方量化工具中的一些自定义参数,这也限制了分数的进一步提升。希望日后能更加深入理解和使用TPU的量化工具。
致谢
感谢主办方和承办方等各单位提供本次竞赛的平台和资源,在后续的工作中,我们将会更多支持国产框架和芯片,共同推动国内人工智能产业的发展。
参考
[1] Liu W , Salzmann M , Fua P . Context-Aware Crowd Counting:, 10.48550/arXiv.1811.10452[P]. 2018.
[2] Li Y , Zhang X , Chen D . CSRNet: Dilated Convolutional Neural Networks for Understanding the Highly Congested Scenes[J]. IEEE, 2018.
[3] Zhang Y , Zhou D , Chen S , et al. Single-Image Crowd Counting via Multi-Column Convolutional Neural Network[C]// 2016 IEEE Conference on Computer Vision and Pattern Recognition (CVPR). IEEE, 2016.
[4] Gao J , Lin W , Zhao B , et al. C^3 Framework: An Open-source PyTorch Code for Crowd Counting:, 10.48550/arXiv.1907.02724[P]. 2019.