searchusermenu
  • 发布文章
  • 消息中心
点赞
收藏
评论
分享
原创

2022 CCF 大数据与计算智能大赛 "基于TPU平台实现人群密度估计" 亚军方案分享

2023-04-26 11:47:44
20
0

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.2 参数选择

在确定模型结构之后,需要确定模型输入大小。此外,根据先前的分析,需要将大图切割成小图再输入模型进行推理,因此,原始图片缩放范围也是一个重要的超参数。经过总结,确定以下参数可能会影响综合得分。

参数名称

作用

模型输入大小

影响推理速度与精度

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张测试图片上进行实验,得到每组参数的综合分数。

在经过网格参数搜索后,可得到以下结论:

  1. Batch Size对推理速度影响较小,Batch推理耗时跟单张图片推理几乎是线性关系,因此固定Batch Size为1。
  2. 若模型输入大小一定,随着图片尺寸增加,精度提升,但是切割后小图数量增加导致推理次数增多,速度分降低更快。
  3. 较小的模型输入大小对精度影响较小。

因此,最终选择较小的图片尺寸和较小的模型输入,即:将测试图片统一缩放到最小为288x384,最大为768x768的范围;模型输入大小固定为144x192;Batch Size固定为1。使用上述参数进行实验,基于FP32 BModel模型测试,即可获得较高综合分数。

2.3 模型量化

官方提供了一键量化命令 auto_cali对FP32模型进行量化,需要先生成lmdb数据集,推荐使用200张训练数据集进行校准。

我们尝试了两种方案准备lmdb数据集:

  1. 直接使用200张训练数据集进行校准。
  2. 将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.

0条评论
0 / 1000
周****伟
5文章数
0粉丝数
周****伟
5 文章 | 0 粉丝
原创

2022 CCF 大数据与计算智能大赛 "基于TPU平台实现人群密度估计" 亚军方案分享

2023-04-26 11:47:44
20
0

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.2 参数选择

在确定模型结构之后,需要确定模型输入大小。此外,根据先前的分析,需要将大图切割成小图再输入模型进行推理,因此,原始图片缩放范围也是一个重要的超参数。经过总结,确定以下参数可能会影响综合得分。

参数名称

作用

模型输入大小

影响推理速度与精度

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张测试图片上进行实验,得到每组参数的综合分数。

在经过网格参数搜索后,可得到以下结论:

  1. Batch Size对推理速度影响较小,Batch推理耗时跟单张图片推理几乎是线性关系,因此固定Batch Size为1。
  2. 若模型输入大小一定,随着图片尺寸增加,精度提升,但是切割后小图数量增加导致推理次数增多,速度分降低更快。
  3. 较小的模型输入大小对精度影响较小。

因此,最终选择较小的图片尺寸和较小的模型输入,即:将测试图片统一缩放到最小为288x384,最大为768x768的范围;模型输入大小固定为144x192;Batch Size固定为1。使用上述参数进行实验,基于FP32 BModel模型测试,即可获得较高综合分数。

2.3 模型量化

官方提供了一键量化命令 auto_cali对FP32模型进行量化,需要先生成lmdb数据集,推荐使用200张训练数据集进行校准。

我们尝试了两种方案准备lmdb数据集:

  1. 直接使用200张训练数据集进行校准。
  2. 将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.

文章来自个人专栏
文章 | 订阅
0条评论
0 / 1000
请输入你的评论
0
0