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

news2025/1/11 2:34:43

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

加速器队伍

黄显钧
个人名义参赛
中国-广东广州

peterhuang0323@qq.com

团队简介

加速器队伍队长:黄显钧,现任某科技公司的高级工程师,技术栈涉足嵌入式全栈开发,AI 开发等领域,对技术充满热情,自驱力强,喜欢研究前沿的技术并将其应用于实际生产中。信奉的一句话是:实践出真知。

摘要

第一步是选定好基础模型,然后在基础模型上使用不同的方案进行调优。根据经验调优方案是使用不同的输入尺度进行测试,最终效果明显。

关键词

VGG,图片预处理尺寸范围,模型输入尺寸

1. 模型选择

我的经验是进行模型加速的流程第一步是选择不同模型在加速后的表现情况,表现好的模型才去进行下一步调优,因为如果一个模型加速之后表现不好,或者因其网络结构、算子不兼容的原因无法加速的话,我再怎么调优都是徒劳的,所以第一步是选择加速之后表现好的模型。

比赛页面提的官方 demo:https://github.com/sophon-ai-algo/contest-demos/tree/main/SOPHGO-CCF-Contest 提供了4个开源的模型权重:CANNet、CSRNet、MCNN、VGG。我先对每个权重进行转换 TPU 的 bmodel 。

下表是每个模型直接转 FP32 bmodel的测试结果一览表,所有模型均未进行调优:

模型名称

最大图片尺寸

最小图片尺寸

模型输入尺寸

推理平均速度(秒)

A榜得分

CSRNet

2048x2048

576x768

576x768

2

3.4

CANNet

2048x2048

576x768

576x768

初始权重文件损坏

x

MCNN

2048x2048

576x768

576x768

1.2

-6.74

VGG

2048x2048

576x768

576x768

1.5

63

表1:直接转 FP32 bmodel的测试结果一览表

从上表可以看出转 bmodel FP32之后的推理结果成绩最高的是 VGG 模型权重,故我就选定了 VGG 作为我的初始模型去进行调优。

2. 模型原理

我采用的模型VGG 比较常用的有2种结构,分别是VGG16和VGG19。我使用的 VGG 指的是 VGG16,其结构包含16个子网络层,每个子网络层由13层卷积层+3层全连接层组成。下图是从 VGG 论文展示VGG网络图,共有6中不同结构,其中 D列为我这次使用的VGG16的结构。

我可以看到,每个子网络层的结构基本一致,都是由3 x 3卷积外加max pool 层。

图1:VGG 网络结构展示图

从图1看到,VGG的优点就是结构比较简单,而且随着网络的加深,效果也会逐步提升,不会到过拟合或者梯度爆炸的情况。

同时,使用了小的卷积 ——3 x 3卷积 ,而不是 7 x 7的卷积,这样的计算量会大大的减少,而且 3 x 3的卷积更有利于保持图像的信息。

VGG的结构让网络更加深的同时,让特征图更加宽。卷积专注于扩大通道数,max pool 层专注于缩小图片的宽高,使得模型对不同宽高的图片具有更强的泛化性。

VGG在测试的时候,将模型的3个全连接层替换为3个卷积模块,使得测试的时候得到的模型结构的输入不再局限于接受固定的大小的图片,而是可以接收任意高度或宽度的输入,这使得模型的易用性大大增强,同时也对不同图片的识别更加有利。

3. 调优方案

确定好了网络结构,下一步是寻找优化方案。

我刚开始也是比较迷茫,于是乎我去研究官方提供demo的整体流程,在研究的过程中我发现数据预处理的过程中,会将图片大小进行缩放。从经验来看,对图片的缩放有助于提高速度,一个好的缩放比例能够保证图片缩小的情况下,精度还是会和之前持平,但是如果调整的不好的话精度有可能会下降明显,所以我就尝试着修改图片预处理时的图片大小。

除了图片尺寸,不同的 batch size 也可以加快模型的推理,因此我也测试了不一样的 batch size 对模型的变化,我在转换模型的时候,将原本的 batch size 1 换成 8,发现 batch size 变化之后,速度反而加倍了,根据以往提测的经验,分数和速度挂钩,若速度慢了,分数也会有一定的下降,而且这次翻倍了,分数应该不理想,故放弃修改 batch size 的调优方案。

我测试了很多组不同的输入大小,主要是从数据预处理的图片最大尺寸和最小尺寸,外加对模型的输入尺寸做调整,下面是我的记录表:

模型名称

最大图片尺寸

最小图片尺寸

模型输入尺寸

推理平均速度(秒)

A榜得分(只保留整数部分)

VGG

2048x2048

576x768

576x768

1.5

63

VGG

960x960

152x152

152x152

0.4

183

VGG

680x680

132x132

132x132

0.2

186

VGG

960x960

136x136

136x136

0.4

太慢没测

VGG

816x816

128x128

128x128

0.25

185

VGG

816x816

136x136

136x136

0.2

192

VGG

780x780

144x144

144x144

0.2

193

VGG

720x720

144x144

144x144

0.2

189

VGG

720x720

136x136

136x136

0.2

187

VGG

640x640

144x144

144x144

0.15

186

VGG-bs8

780x780

144x144

144x144

0.4

太慢没测

表2:图片尺寸优化测试结果一览表

从表2可以看出,最佳的成绩预处理设置图片最大尺寸780x780,最小尺寸是144x144,模型的输入尺寸设置为144x144是效果最好的,故选择该方案最为最佳方案。

4. 最终成绩

从A榜的表现来看,我最终选择了 VGG模型,图片预处理将最大图片尺寸设置为 780x780,最小图片尺寸为 144x144,模型输入尺寸设置为 144x144,AB榜最佳的结果如下表所示:

榜单

模型名称

最大图片尺寸

最小图片尺寸

模型输入尺寸

推理平均速度(秒)

最高得分(只保留整数部分)

A榜

VGG

780x780

144x144

144x144

0.2

193

B榜

VGG

780x780

144x144

144x144

0.2

247

表3:AB榜单的最佳成绩一览表

致谢

时间飞逝,比赛结束了,很荣幸能够参与本次大赛。本次大赛让我对 TPU 有了进一步的了解,对模型加速的理解更加深刻了。

感谢我自己的自驱力,让我不断进步,让我不满足于当下自己的技术水平,更加发奋学习新的技术,同时不断的发现问题和解决问题,让我的经验得到进一步的积累,从而使我在多数情况下能够快速解决问题。

另外,我还要感谢我家人的支持,倘若没有家人的支持,我就不能全心全意、全程专注地参与本次大赛,也不会获得我现在的成绩,是他们的支持,让我能够沉浸在技术的学习中去,不断突破自己。

最后,要感谢平台方、举办方举办了这个比赛,这个比赛让我的模型加速技术能力得到进一步的提升,让我的经验变得更加丰富。

参考

[1]    Karen Simonyan, Andrew Zisserman(2014年)。 Very Deep Convolutional Networks for Large-Scale Image Recognition。 https://arxiv.org/abs/1409.1556。

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

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

相关文章

云桌面 Vscode 远程debug python

云桌面 Vscode 远程debug python1、进入云桌面2、下载VScode配套软件3、挂载本地磁盘4、安装软件4.1 安装VScode4.2 安装插件vsix文件4.3 在服务端安装vscode server5、VScode 配置6、远程调试6.1 python解释器选择6.2 设置debug7. mtu 配置Author: 沧海一阳1、进入云桌面 根据…

傻白入门芯片设计,盘点计算机体系结构顶会

目录 一、集成电路/半导体领域的三大顶会: (1)ISSCC (2)IEDM (3)VLSI 二、计算机体系结构四大顶会 (1)ISCA (2)HPCA (3&#x…

42. 网络中的网络(NiN)

LeNet、AlexNet和VGG都有一个共同的设计模式:通过一系列的卷积层与汇聚层来提取空间结构特征;然后通过全连接层对特征的表征进行处理。 AlexNet和VGG对LeNet的改进主要在于如何扩大和加深这两个模块。 或者,可以想象在这个过程的早期使用全连…

利用GithubPage和Hexo搭建个人博客

title: 利用Github搭建个人博客 date: 2022-11-28 20:55:30 tags: [blogs] categories: Hexo 建立Git远程仓库 固定格式为:name.github.io ![]](https://img-blog.csdnimg.cn/fa9d7320d1cc422a8a79f2b41dd8458e.png) 开启Github Pages 设置github的token登陆 连接…

免费在线绘制高颜值,带填充的连贯堆叠柱状图

堆叠柱状图是我们日常工作中经常使用的一类图形。然而当分类较多时,堆叠柱状图看起来不是那么清晰,通过添加额外的连线,可以增加堆叠柱状图的颜值,给人一种连贯的感觉,并且能够更好地观察数据比例的变化。 图1. 堆叠柱…

1.8 异常 模块和包

文章目录了解异常异常的捕获方法为什么需要捕获异常捕获常规的异常捕获指定的异常捕获多个异常捕获所有的异常异常else异常的finally异常的传递Python模块模块的导入自定义模块测试模块\_all\_模块Python包了解异常 当我们的解释器运行时发生了一些没办法的操作,或…

初学Java web(十)

Filter和Listener 一.Filter 概念:Filter表示过滤器,是JavaWeb三大组件(Servlet、Filter、Listener)之一。 过滤器可以把对资源的请求拦截下来,从而实现一些特殊的功能。 过滤器一般完成一些通用的操作,比如:权限控…

新键盘到了,我的工作效率提升了数十倍

前言:快过年了,找到了一份满意的实习,正好旧的键盘坏掉了,最近入手了一款不错的机械键盘奖励自己。到货使用一段时间了,来一篇键盘开箱的博客做一个反馈。 新键盘使用感言:优良的键盘如图云上漫步&#xf…

白质中的BOLD信号激活检测问题

白质中BOLD信号的生理意义存在争议的两个主要原因: BOLD信号依赖于脑血流量CBF和脑血容量CBV,但是白质中的血流量和血容量比灰质中的少得多(利用MRI估计的微血管数量:白质为10-192条/mm^2,灰质为99-761条/mm^2&#x…

【GUI界面】基于Python的WSG84三点定位系统(经纬度坐标与平面坐标转换法求解)

【GUI界面】基于Python的WSG84三点定位系统(经纬度坐标与平面坐标转换法求解) 方法汇总: blog.csdn.net/weixin_53403301/article/details/128441789 【精准三点定位求解汇总】利用Python或JavaScript高德地图开放平台实现精准三点定位&…

[开源工具]使用Fiddler简单计算QPS[新手开箱可用]

使用Fiddler简单计算QPS1.什么是QPS?2.怎么计算QPS?3.如何使用Fiddler得到一个API接口的QPS?3.1配置:打开Fiddler文件夹,点击Fiddler.exe运行fiddler进行配置4.如何得到本机的核心数?5.根据公式计算QPS?6.扩展计算单机可支撑PV(理论值)?1.什么是QP…

springboot中controller层接收参数,servers层调用mapper层,一条sql搞定排序

前言 很多小伙伴们在公司不管是测试C端产品还是B端产品,都会测到排序的业务需求;那么我们就会好奇排序是如何实现的呢?下面我们开始介绍代码的实现 数据库建表 我们需要创建一个书籍book表结构,如下图所示 CREATE TABLE book ( …

嵌入式C语言面向对象编程 --- 总结

什么是 C 语言面向对象? 在开始嵌入式 C 语言设计模式系列文章之前,先通过三篇文章讲述了如何使用 C 语言实现面向对象的三大特性,封装,继承,多态。 图片来源公众号:码农翻身 对于“面向对象”这个词语,相信很多软件工程师都不会感觉到陌生,并且很多软件工程师在刚开…

ABAP: 定义关键字的区别

问题:TYPE、LIKE、LIKE TABLE OF、LIKE LINE OF、TYPE TABLE OF 的区别? 1、TYPE 用于变量的类型定义,可以是表中预定义好的字段,也可以是C(字符),F(浮点型),I(整型)等。 例如: DATA: NAME TY…

Spring Cloud简介

一、什么是SpringCloud? Spring Cloud 是一系列框架的有序集合。 Spring Cloud 并没有重复制造轮子,它只是将目前各家公司开发的比较成熟、经得起实际考验的服务框架组合起来。 通过 Spring Boot 风格进行再封装屏蔽掉了复杂的配置和实现原理&#xff…

Python 图像边缘检测 | 利用 opencv 和 skimage 的 Canny 算法

文章目录一、简介二、opencv 实践三、skimage 实践CSDN 叶庭云:https://yetingyun.blog.csdn.net/ 一、简介 提取图片的边缘信息是底层数字图像处理的基本任务之一。边缘信息对进一步提取高层语义信息有很大的影响。大部分边缘检测算法都是上个世纪的了&#xff0c…

【Java基础】day11

day11 一、BIO、NIO、AIO 三种 IO 模型分别是什么? BIO (Blocking I/O)同步阻塞的 I/O 、NIO(New/Non-blocking I/O) 同步非阻塞的 I/O 、AIO(Asynchronous I/O) 异步非阻塞的 I/O 。这三种 I…

前端例程20221227:下雪动画

演示 动图太大了不好上传&#xff0c;这里就放个静态图吧&#xff0c;实际上这里是雪花从上到下飘落的效果。 代码 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content&quo…

【Spring【AOP】】——20、搭建一个AOP测试环境?

&#x1f4eb;作者简介&#xff1a;zhz小白 公众号&#xff1a;小白的Java进阶之路 专业技能&#xff1a; 1、Java基础&#xff0c;并精通多线程的开发&#xff0c;熟悉JVM原理 2、熟悉Java基础&#xff0c;并精通多线程的开发&#xff0c;熟悉JVM原理&#xff0c;具备⼀定的线…

Linux系统运行时参数命令--CPU性能监控

目录 2 CPU性能监控 2.1 平均负载和CPU使用率 1 平均负载基础 2 使用uptime命令分析平均负载 3 平均负载与 CPU 使用率 4 CPU使用率监测命令 ps查找进程信息 top命令查询进程的cpu、内存信息 mpstat pidstat 场景一&#xff1a;CPU 密集型进程 场景二&#xff1a;I…