CCF BDCI|算能赛题决赛选手说明论文-02

news2024/11/26 20:44:42
周伟伟
 智能边缘事业部&算法工程师
 天翼云科技有限公司
 中国-广州
 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张测试图片上进行实验,得到每组参数的综合分数。

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

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

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

2.4 模型量化

官方提供了一键量化命令 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.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/143403.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

适合编程初学者的开源项目:小游戏2048(Flutter版)

目标 为编程初学者打造入门学习项目,使用各种主流编程语言来实现。 2048游戏规则 一共16个单元格,初始时由2或者4构成。 1、手指向一个方向滑动,所有格子会向那个方向运动。 2、相同数字的两个格子,相遇时数字会相加。 3、每次…

【库函数】-了解回调函数,并且手把手带你学习qsort函数!!还不知道的赶快进来看看

🎇作者:小树苗渴望变成参天大树 🎉作者宣言:认真写好每一篇博客 🎊作者gitee:link 如 果 你 喜 欢 作 者 的 文 章 ,就 给 作 者 点 点 关 注 吧! qsort🧨 前言✨一、什么是回调函数…

报表生成器FastReport.Net常见问题解答来了 | 联合厂商作答

FastReport .Net是一款全功能的Windows Forms、ASP.NET和MVC报表分析解决方案,使用FastReport .NET可以创建独立于应用程序的.NET报表,同时FastReport .Net支持中文、英语等14种语言,可以让你的产品保证真正的国际性。FastReport.NET官方版下…

智云通CRM:如何应对来自竞争对手的阻力?

当销售表明来意后,竞争性客户最常见的回答往往是:“我们和现在的供应商合作得很好。”销售应当牢记,此时我们的目标不是将竞争对手取而代之,而是要努力成为其配角,找机会发现竞争对手能力不足的方面。鉴于此&#xff0…

2023年春节跨年烟花网页特效

粉丝朋友们大家好,我是你们的 csdn的博主:lqj_本人 哔哩哔哩:小淼前端 另外,大家也可以关注我的哔哩哔哩账号,我会不定时的发布一些有关于全栈云开发以及前端开发的详解视频源码 1.微信小程序腾讯云开发之学生端收集数…

搭建VMware ESXi6.7(带图解)

目录 VMware ESXi介绍 准备文件 安装过程 VMware ESXi介绍 VMware ESXi是什么系统? VMware ESXi是可直接安装在物理服务器上的强大的裸机管理系统,不需安装其他操作系统,是VMware服务器虚拟化的基础。通过直接访问并控制底层资源&#x…

操作系统从入门到入土(一)之计算机系统概述

文章目录操作系统的基本概念1.概念2.功能和目标3.特征操作系统的发展操作系统运行环境1.处理器运行环境2.中断和异常3.系统调用系统结构操作系统的基本概念 1.概念 操作系统(Operating System, OS)是指控制和管理整个计算机系统的硬件和软件…

【C语言】字符串练习,压缩字符串,提取奇偶位(每日小细节015)

前言: 欢迎打开这篇博客,从今天开始,每天和大家分享一个C语言小细节,不久之后还会追加C 一些常常被忽视的小细节和思想统一的编程题目是这个专栏的核心哦 虽然简单但千万别在细节处失分!!!&…

《高效能人士的七个习惯》

专注做有意义的事情。《高效能人士的七个习惯》作者史蒂芬科维,这是一本难得的好书,如果你没有的读过,我推荐你一定要读一下。最近在豆瓣看到一句话说:一定要读经典书籍,因为我们在生活中很难遇到伟大的人物&#xff0…

V2V网络灵敏度分析(Matlab代码实现)

目录 💥1 概述 📚2 运行结果 🎉3 参考文献 👨‍💻4 Matlab代码 💥1 概述 灵敏度分析是研究与分析一个系统(或模型)的状态或输出变化对系统参数或周围条件变化的敏感程度的方法。…

Axure绘制登录功能

上一篇文章为大家介绍了一下登录功能的设计思路和相关的流程图,本篇主要带大家从0到1绘制一下B端产品的登录功能如何实现 一、功能解析 本篇主要是针对内部员工使用的B端产品,主要功能如下: ①手机号密码登录 ②忘记密码 ③记住密码 第…

从0到1完成一个Vue后台管理项目(二、使用element-ui)

从0到1完成一个Vue后台管理项目(一、创建项目) 1.全局引入 下载element-ui cnpm i element-ui -S main.js里引入 这里需要注意的是,我们引入的顺序不能错,一定要按照我这个箭头的顺序来 使用 然后我们按照文档正常使用即可 elem…

Go第 8 章:排序和查找

Go第 8 章:排序和查找 8.1 排序的基本介绍 8.2 冒泡排序的思路分析 8.3 冒泡排序实现 8.4 课后练习 要求同学们能够,不看老师的代码,可以默写冒泡排序法(笔试题) 8.5 查找 2) 请对一个有序数组进行二分查找 {1,8, 10, 89, 1000, 1234} &am…

C语言之复合类型下卷(十九)(自然法则)(2023)

上一篇: C语言之复合类型上卷(十八)(阴阳两极) 逐梦编程,让中华屹立世界之巅。 简单的事情重复做,重复的事情用心做,用心的事情坚持做; 文章目录前言一、结构体指针二、结构体嵌套指针三、const修饰的结构…

qsort函数详解以及模拟实现

qsort函数详解以及模拟实现一.qsort函数是什么二.具体的使用1.参数4(参数3在模拟实现时解释)2.例子1.排序整形2.排序结构体三.模拟实现qsort1.参数32.模拟排序1.排整形2.排结构体一.qsort函数是什么 qsort全称为quick_sort(快速排序&#xff…

Tomcat的基本使用

1, Tomcat 1.1 简介 1.1.1 什么是Web服务器 Web服务器是一个应用程序(软件),对HTTP协议的操作进行封装,使得程序员不必直接对协议进行操作,让Web开发更加便捷。主要功能是"提供网上信息浏览服务"。 Web服…

C语言rewind()函数:将文件指针重新指向文件开头

rewind()函数用于将文件指针重新指向文件的开头,同时清除和文件流相关的错误和eof标记,相当于调用fseek(stream, 0, SEEK_SET),其原型如下: void rewind(FILE * stream); 【参数】stream为已打开文件的指针。 注意:准…

深入理解Pytorch中的分布式训练

作者:台运鹏 (正在寻找internship...)主页:https://yunpengtai.top鉴于网上此类教程有不少模糊不清,对原理不得其法,代码也难跑通,故而花了几天细究了一下相关原理和实现,欢迎批评指正!关于此部…

【Python • 字符串】巧用python字符串切片

文章目录前言字符串切片常用用法理解一个字符串逆向下标的字符串字符串切片截取下标a到b的字符串取下标a以后的所有字符串取下标a以前的所有字符串间隔n个字符取字符串字符串逆序输出从下标a的字符开始逆序取字符串逆序输出从b到a的字符串逆序间隔一个字符串输出总结前言 在py…

站酷基于服务网格ASM的生产实践

作者:服务网格ASM 背景介绍 站酷(ZCOOL)2006 年 8 月创立于北京,深耕设计领域多年,聚集了 1500 万设计师、摄影师、插画师、艺术家、创意人,在设计创意群体中具有一定的影响力与号召力。站酷在创立之初&am…