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

news2024/12/29 14:38:02

基于TPU平台实现人群密度估计

队名:innovation

陈照照
 数据科学与大数据技术20级
 台州学院
 中国-瑞安
  479253198@qq.com
董昊
数据科学与大数据技术20级
 台州学院
 中国-杭州
  donghaowifi@163.com
陈晓聪
数据科学与大数据技术20级
 台州学院
 中国-宁波
 2637491414@qq.com
卓佳伟
数据科学与大数据技术20级
 台州学院
 中国-福州
 976819856@qq.com
董坤
数据科学与大数据技术20级
 台州学院
 中国-定西
 2167719990@qq.com
陶欣
讲师
 台州学院
 中国-台州
 xin.tao@tzc.edu.cn

团队简介

我们因大学相遇,因志趣相识,同属20级数据科学与大数据技术专业,就读于台州学院。台州学院坐落在新兴的滨海城市——台州,东濒东海,南连雁荡,北倚天台,山水神秀,人杰地灵,是理想的治学修身之地。

我们热爱数据科学与人工智能,在参与竞赛的过程中丰富自己的经历,在实践中寻找自己的不足,在相互帮助之下共同成长,共同进步,并以之为跳板开拓视野。

摘要

人群密度估计在公共安全管理中发挥着重要的作用,估计人群密度的模型需要兼顾准确性与实时性。本文在模型选择与转换、模型量化、图像处理等方面探索并定量比较了多种配置下人群密度估计模型的推理效果。通过对比我们复现的评分指标以及官方给出的测试结果,选用VGG模型并量化成int8bmodel格式,将测试集图像大小强制调整为高576px,宽768px,锐度和亮度同时提高1.5倍是我们得出的最好方法。实验结果表明,与出题方给出的原始解法相比,该方法在推理速度与推理精度上均有明显的提高。

关键词

TPU、人群密度估计、图像处理

1 研究背景与思路

人群密度估计是计算机视觉中的一项重要任务。在公共场所,人群踩踏事件对公共安全产生了巨大的负面影响。准确而有效地估计人群密度是监测人群状态、制定疏散策略的关键[1]。对于人群密度估计问题,现有的的研究分为两类。一类基于机器学习,如基于集成回归的机器学习模型[2],一类基于深度学习,如CNN[3]、CSRNet[4]。这些方法已经真实地应用于现实生活的人群密度检测来避免人群踩踏事故的发生。本文研究的目的是选用最优的深度学习预训练模型在兼顾推理精度与速度的情况下部署在算能TPU芯片上,使模型的实用性和泛化性得到进一步的提高。

本文研究思路如图1所示,首先确定评估方法为推理精度与推理速度得分的总和,推理精度由MAE、RMSE、NAE得出。然后在CSRNet、MCNN、VGG模型中三选一,在fp32bmodel、int8bmodel模型转换格式中二选一。在模型的量化中尝试200、230、250、350、500为迭代次数。最后对测试集图像的大小进行按比例以及不按比例的调整,并对图像的对比度、锐度、亮度、色度进行增强,选出一个最合适的方法。

图1:研究思路

 

2 评估方法

本次赛题通过Mean Absolute Error(MAE)平均绝对误差、Root Mean Squared Error(RMSE)均方根误差和Normalized Absolute Error(NAE)标准化绝对误差,三个指标评估模型精度。

MAE得分计算公式: 

(1) 

RMSE得分计算公式:

(2) 

NAE得分计算公式:

(3)

三个指标得分公式:

(4)

(5) 

(6) 

将计算得到的MAE_SCORERMSE_SCORENAE_SCORE之和称为ACC_SCORE,精确度得分公式:

(7)

 时间方面的得分称为TIME_SCORE,TIME为数据集单张图片推理的平均时间,单位为秒,时间得分公式:

(8) 

最终分称为FINAL_SCORE最终得分计算公式为:

(9) 

基于以上公式,我们自行实现了评估指标函数。下文中各方案的比较中均使用该评估指标,考虑到实现方式与运行环境,可能与官方的得分计算方式略有差异。

3模型选择与转换

3.1 fp32bmodel

模型的转换有两种格式。首先是将traced_model.pt转换为fp32bmodel格式。为便于参赛选手模型优化,大赛方特选取A榜测试集10张图片给出参考答案。用A榜10张有参考答案的图片进行测试,VGG模型的精确度得分是最高的,其次是CSRNet模型。在时间得分上,MCNN得分最高。在总分上,VGG得分最高。用A榜1201张测试图片进行测试,在精确度得分上,MCNN模型的得分严重下滑,但在时间得分上依然保持最高。由于最终的得分需要考虑到模型的泛化问题,单凭10张图片的测试成绩是不够准确的。根据A榜测试集1201张图片的测试结果,我们暂且按FINAL_SCORE模型降序排名:VGG模型、CSRNet模型、MCNN模型。

 图2:A榜测试集CSRNet,MCNN,VGG 模型转为fp32bmodel格式测试结果

3.2 int8bmodel

接下来是将traced_model.pt转换为int8bmodel格式,默认量化校准图片数量为200张。结合图2,由于MCNN模型的精确度得分过低,考虑量化的时间成本,优先选择VGG和CSRNet模型转换为int8bmodel格式。又由于CSRNet模型和VGG模型在本次实验中呈现出来的结果与转换为fp32bmodel格式的结果呈正相关,推测MCNN在int8bmodel上也不会有更出色的表现。因此本次实验舍弃了MCNN模型。

对比CSRNet模型和VGG模型,无论是在精度得分,还是在时间得分上,无论是在A榜10张测试图片上进行测试,还是在A榜1201张测试图片上进行测试,VGG模型都略胜一筹,所以确定选择模型为VGG,转化格式为int8bmodel进行后续实验。

图3:A榜测试集CSRNet、VGG模型转为int8bmodel格式测试结果

 

4 模型的量化

选择VGG模型以及确定转换的格式后,继续进行模型的量化。命题方默认量化校准图片数量为200张,即从固定的200张图片中,反复随机选取200张。为了探究迭代次数对推理结果的影响,选取200张、230张、250张、350张、500张作为量化校准的迭代次数。

经过对比,在用A榜10张图片进行测试时,量化校准迭代次数为250时得分是最高的,其次是200、230。在用A榜1201张图片进行测试时,5种量化校准图片数量的得分趋于平缓,说明不同的迭代次数之间差别不大,迭代次数的变化对最终结果的得分不起关键性作用。但在A榜1201张图片的测试集中,用230张量化校准图片险胜250张,再一次考虑到模型的泛化问题,最终选择了量化校准迭代次数为230时的VGG模型。

由于A榜测试集10张图片人群密度答案已知,因此可以计算出精确度各分项得分,而A榜其它图片的答案是未公布的,暂无法计算出分项得分。

图4:A榜测试集VGG模型int8bmodel转换方法下不同量化校准数量测试结果

 

5 测试集图像的处理

5.1 图像大小

确定了模型以及模型的转化方法和量化方法,为探讨预训练模型对各种尺寸输入的适应性,将图像大小进行调整。由于模型的输入尺寸是固定的,在进行推理之前,需要将小于固定尺寸的图放大,大于固定尺寸的图需要用滑动窗口将输入切分成不大于576px*768px的子图分别推理。而大部分的图都是大于该固定尺寸的。因此,大部分的图像都需要被切分,且越大的图像就会被切分成更多的子图,有了更多的子图,推理速度也会更慢。

出赛方提供的demo中,将图像按比例缩放到高和宽最大不大于2048px*2048px,最小不小于576px*768px。为加速推理,在测试集图像大小的修改上,尝试图像按比例以及不按比例调整两种方法。将数据集中所有图片的高分别调整为不大于1536px、1280px、1216px、1168px、567px,宽则适应比例。如图5,随设定尺寸的减小,所有指标都成上升趋势。接着做了一个大胆的尝试,强制将所以图像的尺寸调为576px*768px,适应模型的最小尺寸。又考虑到高大于宽的图像失真过于明显,对于原始尺寸高大于宽的图像均做顺时针旋转90度的处理。在A榜10张图片测试的结果中,该方法的精确度得分与时间得分均有所提高且与假设预期符合。在用A榜1201张图片测试的结果中,最终得分也是成上升趋势。由于比赛时间与A榜提交次数的限制,没有得出用1201张图片测试的结果。

图5:A榜测试集VGG模型int8bmodel转换方法下不同尺寸图片测试结果

 

5.2 图像增强

5.2.1 提升对比度、锐度、亮度、色度

调整完图像大小后,模型推理速度得到了大幅的提高。增强图像对比度、锐度是深度学习图像预处理的常用方法[5]。为增加模型推理的精度,尝试以1.5倍增强图片的对比度、锐度、亮度以及色度。由图6可知,图像增强以后,在时间得分上相当,在精确度得分上,增强对比度分数下滑明显,增强色度未能使得分发生明显变化,但锐度与亮度的增强对精确度的得分小有提高。

图6:A榜测试集10张图片对比度、锐度、亮度、色度分别增强1.5倍测试结果

 

5.2.2 继续增强锐度、亮度

尝试将锐度、亮度分别增强2倍、3倍。在时间得分上,基本保持不变,略有下滑趋势。在精确度得分上,继续增强锐度未能使得分发生明显变化,略呈下滑趋势。但继续增强亮度使得分变化明显,不仅严重下滑,而且变成了负值。总体来说,继续增强锐度与亮度并没有达到更好地效果。

图7:A榜测试集10张图片锐度和亮度分别增强1.5、2、3倍测试结果

 

5.2.3 锐度与亮度的组合

锐度与亮度增强过度不能使得精确度继续增加,尝试将锐度与亮度同时增强1.5倍,如图8所示,除时间得分略有下降以外,其他指标均有所增加,整体分数有了显著提高。

图8:A榜测试集10张图片锐度、亮度分别增强1.5倍与组合增强1.5倍的对比

 

确定方法后在B榜测试集上做了7次实验,将时间得分得分最高的一次(test6)提交官网,用最终得分减test6的时间得分,得出其精确度得分。因方法相同精确度均相同,用其它6次的时间得分分别加上test6的精确度得分,即可得出最终得分。如图9,时间得分波动幅度在1分左右,最终得分呈现稳定状态。

图9:同时增加亮度、锐度1.5倍B 榜测试结果

 

小结

在模型选择与转化上,选取VGG模型以及转换为int8bmodel格式。在模型的量化上,选择用量化校准迭代次数为230。将测试集所有高大于宽的图片做顺时针旋转90度处理并将所有图片大小强制转换为高576px,宽768px来提高推理速度。为了提高测试精度,同时将锐度与亮度增强1.5倍,最终得分232.53747466,在B榜测试集排名第五。

致谢

在本次竞赛中,特别感谢赛会主办方和出题方给我们这个机会可以将所学用于实际。还要由衷感谢陶欣老师和宋海峰老师。因为有陶老师的技术指导以及宋老师的思路引导,为我们模型的部署以及方法的改进提供了很多帮助,让我们获益匪浅,特在此致以诚挚的谢意。

参考

  1. S. Wang, Z. Pu, Q. Li, Y. Guo and M. Li, "Edge Computing-Enabled Crowd Density Estimation based on Lightweight Convolutional Neural Network," 2021 IEEE International Smart Cities Conference (ISC2), 2021, pp. 1-7, doi: 10.1109/ISC253183.2021.9562877.
  2. Saleem, M.S., Khan, M.J., Khurshid, K. et al. Crowd density estimation in still images using multiple local features and boosting regression ensemble. Neural Comput & Applic 32, 16445–16454 (2020). https://doi.org/10.1007/s00521-019-04021-2
  3. Wang,S.,Pu等.Edge Computing-Enabled Crowd Density Estimation based on Lightweight Convolutional Neural Network[],2021.
  4.  Li Y ,  Zhang X ,  Chen D . CSRNet: Dilated Convolutional Neural Networks for Understanding the Highly Congested Scenes[J]. IEEE, 2018.
  5. Abdullah,,Faisal等.Multi-Person Tracking and Crowd Behavior Detection via Particles Gradient Motion Descriptor and Improved Entropy Classifier[J].ENTROPY,2021,23(5).

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

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

相关文章

Golang -- openwechat微信发送消息、自动回复

开篇 马上就要到农历新年了,不妨写一段代码准时为好友们送上祝福。 该 Demo 使用开源项目 openwechat ,实现获取好友列表、为好友发送消息、图片或文件,接收来自好友或群组的消息并设置自动回复等功能。 openwechat Github地址 openwechat 文…

管道(匿名,有名)

文章目录Linux 进程间通信的方式管道匿名管道有名管道Linux 进程间通信的方式 管道 管道特点 管道其实是一个在内核内存中维护的缓冲器,这个缓冲器的存储能力是有限的,不同的操作系统大小不一定相同管道拥有文件的特质:读操作、写操作 匿名管…

线扫相机DALSA-变行高拍照

CamExpert在线阵模式中默认的Buffer设置是Fixed Length。在这种设置下,在一帧采集结束前所接收到的新的帧触发信号都会被忽略。在有的应用中,需要新一帧的外触发信号能够中断当前帧的采集,开始新的一帧。这需要将Buffer设为Variable Length。…

【云原生】k8s之HPA,命名空间资源限制

内容预知 1.HPA的相关知识 2.HPA的部署运用 2.1 进行HPA的部署设置 2.2 HPA伸缩的测试演示 (1)创建一个用于测试的pod资源 (2)创建HPA控制器,进行资源的限制,伸缩管理 (3)进入其中一个pod容器仲&#xf…

Redhat OpenStack使用命令行发放云主机

OpenStack中各大组件的作用Glance:负责管理镜像(镜像的上传、删除、下载)Swift:提供镜像存储的空间Nova:负责配额的修改、启动云主机(实例)、创建密钥对、绑定弹性IP等Keystone:提供…

jQuery(二):属性、元素、尺寸位置操作、事件

jQuery属性操作内容文本值元素操作尺寸、位置操作事件注册事件处理事件对象拷贝对象属性操作 1.获取固有属性语法 prop(‘‘属性’’) 固有属性就是html自带的,例如a元素里面的 href ,input 元素里面的 type。 2.设置固有属性语法 prop(‘‘属性’’, …

Python NumPy 搜索 数组

前言NumPy(Numerical Python的缩写)是一个开源的Python科学计算库。使用NumPy,就可以很自然地使用数组和矩阵。NumPy包含很多实用的数学函数,涵盖线性代数运算、傅里叶变换和随机数生成等功能。本文主要介绍Python NumPy 搜索 数组…

Linux小黑板(8)管道

"让我们,笑吧"一、什么是通信?管道是属于进程间通信的一个实现方式。再讲管道之前呢,我们先来说说什么叫做进程间通信。我们日常生活中,给自己的家人、朋友给一个call,或者弹一条微信、QQ等等,从而让人家能够知道我们想…

Databend 开源周报第 76 期

英文版移步:https://databend.rs/blog/2023-01-11-databend-weekly Databend 是一款强大的云数仓。专为弹性和高效设计。自由且开源。即刻体验云服务:https://app.databend.com 。 What’s New 探索 Databend 本周新进展,遇到更贴近你心意的…

vue 中由浅拷贝引发问题的一些场景

在工作的过程中踩了很多的由浅拷贝导致的坑,今天总结在这里,希望对大家有所帮助 1. 组件中直接抛出一个引用类型变量 🌰举个例子 (ps: 以下代码为伪代码,主要展示逻辑用) 子组件(uploadImg&a…

线 程 同 步、线程的死锁问题

线程同步: 模拟售票程序出现问题:当多个线程同时访问共享数据时,产生无序、重复、超额售票等多线程安全问题 解决:将多个线程需要访问的共享数据,包装起来视为一个整体,确保一次只有一个线程执行流访问共享…

春节福利丨神策数据 2022 年数字化营销资料打包全送

2022 年,神策数据出品多份行业研究报告,覆盖银行、证券、零售、教育、电商、融合媒体等多个行业,帮助更多企业通过多视角洞见紧握数字化营销的方向和趋势,用方法论结合落地实践驱动企业数字化经营。01B2B 电商数字化运营聚焦四类 …

【自学Python】Python查找字符串位置

Python查找字符串位置 大纲 Python查找字符串位置教程 在开发过程中,很多时候我们有在一个 字符串 中查找另一个字符串位置的需求,在 Python 中,在一个字符串中查找另一个字符串的位置我们使用 index() 函数。 index() 函数的功能与 find(…

力扣(78.90)补9.22

78.子集 感觉不太难&#xff0c;但是就是不会写。感觉回溯里有很多细节问题。 class Solution { private: vector<vector<int>> res; vector<int> num; void back(vector<int>& nums,int index,int end){ res.push_back(num); …

【JavaEE初阶】第三节.多线程基础篇

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 目录 文章目录 前言 一、认识线程 二、多线程程序 2.1 第一个Java多线程程序 2.2 怎么样观察线程的详细情况 2.3 sleep方法 2.4 run 和 start 方法的区别是什么 三、创…

在springboot中配置热部署

今天什么节日也不是&#xff0c;那就祝大家今天快乐。 热部署 所谓热部署&#xff0c;就是在应用正在运行的时候升级软件&#xff0c;却不需要重新启动应用。对于Java应用程序来说&#xff0c;热部署就是在运行时更新Java类文件。在以往&#xff0c;我们对java代码进行修改之后…

【HBU】大一下期末重点

物理简答题一、牛顿第二定律&#xff08;Fdp/dt &#xff09;&#xff1a;1. 飞机怕小鸟:Fdp/dt 力与作用时间的乘积等于物体动量的变化。由于小鸟与飞机相对速度很大&#xff0c;作用时间很短,产生的作用力很大&#xff0c;当小鸟与飞机向撞&#xff0c;效果与同质量炮弹撞飞机…

正则表达式入门及常用正则表达式

常用正则表达式 1 正则表达式的基础概念 1.1 预定义字符 . 表示任何字符&#xff08;与行结束符可能匹配也可能不匹配&#xff09; \d 数字&#xff1a;[0-9] \D 非数字字符&#xff1a;[^0-9] \s 空白字符&#xff1a;[\t\n\xoB\f\r] \S 非空白字符&#xff1a;[^\s] \w 单…

k8s的YAML部署rocketmq记录

说明 测试环境是k8s集群&#xff0c;在上边部署一套单节点的rocketmq nameserver部署 Service和StatefulSet脚本如下 apiVersion: v1 kind: Service metadata:labels:app: rocketmqnamesrvname: rocketmqnamesrv spec:type: ClusterIPports:- port: 9876targetPort: 9876na…

Pytorch深度学习【十四】

批量归一化 归一化 损失出现在最后&#xff0c;后面的层(高级语义层)训练较快数据输入在最底部 底部的层训练慢底部层一变化&#xff0c;所有高级语义层都得跟着变最后的那些层需要重新学习多次—收敛速度变慢 问题—是否可以在学习底部层的时候避免变化顶部层 批量归一化 固定…