【2023 CCF 大数据与计算智能大赛】基于TPU平台实现超分辨率重建模型部署 基于预训练ESPCN的轻量化图像超分辨率模型TPU部署方案

news2024/11/27 13:35:12

2023 CCF 大数据与计算智能大赛

《基于TPU平台实现超分辨率重建模型部署》

作品名:基于预训练ESPCN的轻量化图像超分辨率模型TPU部署方案

队伍名:Absofastlutely

蒋松儒

计算机科学与技术系 硕士

南京大学

中国-江苏

kahsolt@qq.com

吕欢欢

计算机科学与技术系 博士

南京大学

中国-江苏

huanhuanlv@smail.nju.edu.cn

张凯铭

物理学系 本科

四川大学

中国-四川

2835742517@qq.com

团队简介

一个喜欢折腾神经网络和量子计算的无名小队,学艺不精脑洞不大,啥都只会一点,但没关系可以慢慢学的嘛……

摘要

本文介绍了一种在TPU平台上部署轻量化超分模型ESPCN的方法。介绍了三种图像分块策略、两种定义和搜索最优分块大小的方法;介绍了多线程加速、后处理滤波等模型性能优化技巧。最后在TPU平台上进行了模型部署和性能评估实验。

关键词

超分辨率,轻量化,TPU,模型部署

1 引言

2022年是图像生成式网络发展再度爆炸的一年。自Stable Diffusion开源,Embedding/Hypernetwork/LoRA微调、Depthmap/ControlNet条件化、AnimeDiff/Tune-A-Video连续帧化等等优化技术和下游应用也快速涌现。

但Stable Diffusion能直接产出相对优质图像尺寸是512~1024px,而我们时常需要更高分辨率如4k/8k的图像才能满足生产需求,因此超分辨率模型成了解决这个问题的一个可行桥梁方案。

总之就是,比赛要求参赛者在边缘设备TPU上移植并部署一个超分辨率模型。

2 解决方案

2.1 模型选择

考虑到TPU设备的计算性能相对较低,我们主要调研了轻量化的图像和视频超分辨率网络,并先后尝试了Real-ESRGAN[1]、NinaSR[4]、CARN、FSRCNN、ESPCN[2]等多种网络结构,最后选定了使用ESPCN。

2.1 图像分块

模型编译过程中需要确定输入张量的尺寸,虽然TPU文档里指出支持动态大小输入,但可用的SDK并未提供此功能,因此为了应对尺寸各异的输入图像,做统一尺寸的图像分块是必要的步骤。

2.1.1 分块策略

我们尝试了三种典型的分块策略:

  • 朴素分块:即无重叠地裁剪后,各块分别推理,最后无重叠地粘接在一起。这种方式有最低的时间开销,但是会导致生成图像存在接缝。
  • 重叠缝合:有重叠地裁剪后,各块分别推理,最后有重叠地粘接在一起,重叠区域按朴素平均、高斯羽化等方式做缝合。这种方式需要计算CNN模型的填充感受野,在重叠区域设置大于填充感受野时可以做到理论的无接缝,但缝合会产生额外的时间开销。
  • 边缘裁剪:有重叠地裁剪后,各块分别推理并裁剪掉一圈边缘,最后无重叠地粘接在一起。这种方式也能实现理论的无接缝,额外计算面积比重叠缝合法小,但如果分片尺寸设置不合适,可能会导致更多的分片数量,反而增加额外计算量。

在这里插入图片描述

图1:三种分块策略(朴素分块、重叠缝合、边缘裁剪)

在这里插入图片描述

图2:朴素分块导致的接缝

考虑到时间效率优先,我们最终选用了朴素分块的策略。

2.1.2 最优分块大小

分块大小直接决定了分块数量,间接决定了模型处理处理的事件,因此合适的分块大小选取可以节省不必要的额外计算开销。我们探索了两种估算最优分块大小的方法:

  • 最小化冗余计算量:考虑最小化分片导致的外向填充区域的面积。定义代价函数:

如图3所示,为代表原始图像大小的灰色区域,为所有红色分片总共覆盖的面积大小,为分片数量;是一个正则化常数,避免分片尺寸退化到无穷小,实验中取值为1。

在这里插入图片描述

图3:分片外向填充

使用双重退火、差分演化或者暴力穷举法最小化此代价函数都可以得到最优解 。

  • 最小化单位计算费率:考虑最小化TPU处理张量中每个数据单元的时间开销。我们测试了ESPCN模型在TPU上处理不同尺寸输入的开销:

在这里插入图片描述

图4:TPU上处理不同尺寸输入的开销

观察可知,TPU设备上使用批处理并没有时间并行化效果,并且越小的张量尺寸计算费率越低。可以得到最优解 。

2.2 性能优化

为了进一步加速运行和提高图像质量,我们引入多线程处理和经典后处理滤波EDGE_ENHANCE和一个简化版本的UnsharpMask。后处理可以在CPU或者TPU上实现,视具体情况而定。
在这里插入图片描述

图5:引入多线程和后处理的稳定提升

3 部署和评估

模型部署:使用TPU-mlir[5]工具箱,将预训练好的ESPCN网络权重编译为TPU可加载的bmodel格式,量化类型设置为FP16,输入张量形状绑定为[1, 3, 128, 128],部署运行时代码到TPU设备sophon BM1684[6]上。

使用下列计算公式来评估模型得分:

其中为平均自然图像质量评估度量[7]的得分,越小越好,而为模型的平均推理运行时间(单位为秒),同样越小越好。在两个各含有600张2k以下尺寸图像的数据集上测试表现如下:

模型数据集runtimeniqescore
Real-ESRGANtest5.24623.936466.7269
ESPCNtest0.19244.44651661.0888
ESPCNval0.09834.37613295.7186

对比可见,轻量化的ESPCN相比作为基准模型的Real-ESRGAN而言,虽然NIQE质量还很差,但凭借极高的推理速度,从而在综合得分方面有显著的提升。

致谢

感谢CCF BDCI平台提供的比赛机会和开放计算资源;感谢其他参赛队伍令人触目惊心的刷榜分数;感谢无数个太阳、朝露、地神的吐息。

参考

[1] Wang X, Xie L, Dong C, et al. Real-esrgan: Training real-world blind super-resolution with pure synthetic data[C]//Proceedings of the IEEE/CVF international conference on computer vision. 2021: 1905-1914.

[2] Shi W, Caballero J, Huszár F, et al. Real-time single image and video super-resolution using an efficient sub-pixel convolutional neural network[C]//Proceedings of the IEEE conference on computer vision and pattern recognition. 2016: 1874-1883.

[3] Lornatang. ESPCN-PyTorch [EB/OL] https://github.com/Lornatang/ESPCN-PyTorch

[4] Coloquinte. NinaSR: scalable neural network for Super-Resolution [EB/OL] https://github.com/Coloquinte/torchSR/blob/main/doc/NinaSR.md

[5] sophgo. TPU-MLIR [EB/OL] https://github.com/sophgo/tpu-mlir

[6] sophgo. BM1684X Introduction V1.7 [EB/OL] https://sophon-file.sophon.cn/sophon-prods3/drive/23/03/02/20/BM1684X%20Introduction%20V1.7.pdf

[7] Anish Mittal, Rajiv Soundararajan and Alan C. Bovik, Fellow, IEEE. Making a ‘Completely Blind’ Image Quality Analyzer. [EB/OL] http://live.ece.utexas.edu/research/quality/niqe_spl.pdf

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

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

相关文章

Windows搭建RTMP视频流服务(Nginx服务器版)

文章目录 引言1、安装FFmpeg2、安装Nginx服务器3、实现本地视频推流服务4、使用VLC或PotPlayer可视化播放器播放视频5、RTSP / RTMP系列文章 引言 RTSP和RTMP视频流的区别 RTSP (Real-Time Streaming Protocol)实时流媒体协议。 RTSP定义流格式&#xff…

26K star! 跨平台的开源AirDrop 替品

现在大家的设备都很多,平时在家里手机,电脑,平板之间怎么传文件?如果你是苹果党,那肯定AirDrop最方便。但是当你需要跨平台来传输内容时,怎么样能更方便呢?各种网盘们都需要网络,如果…

MySQL 数据库系列课程 03:MySQL数据库相关软件的下载和安装

俗话说:“工欲善其事,必先利其器”,开始学习 MySQL 之前我们一定是要做环境准备的,接下来我们来讲解一下 MySQL 的安装。 一、MySQL下载 步骤一:官方入口的寻找 (1)大家可以尝试在官网寻找 M…

java基础-回忆性记录

java基础 Java概括 jaava是一种计算机交流的高级编程语言,1995年java衍生,詹姆斯高斯林被世人称之为java之父。 java语言具有跨平台性 java程序并非可以直接运行的,在java程序编译完成后会形成与编译无关的class文件。Java具有跨平台性&a…

【前端学习指南】第一站 Vue 生命周期初探

🍭 Hello,我是爱吃糖的范同学 🔴 想把自己学习技术的经历和一些总结分享给大家! 🔴 通过这样的方式记录自己成长,同时沉淀自己的技术,我会把所有额外的时间和经历投放到CSDN和公众号&#xff0…

Flink1.17实战教程(第四篇:处理函数)

系列文章目录 Flink1.17实战教程(第一篇:概念、部署、架构) Flink1.17实战教程(第二篇:DataStream API) Flink1.17实战教程(第三篇:时间和窗口) Flink1.17实战教程&…

DDR终端匹配电阻的长度多少合适?

上次我们对不加端接电阻和加端接电阻之后的仿真结果做了分析之后我们得出在DDR采用菊花链拓扑结构的时候是需要加端接电阻的,这次我们看看DDR末端的端接电阻距离最后一片DDR远一点效果好一些还是近一点效果好一些。 本次采用的案例依旧是我们上期的DDR3一拖八正反贴…

Kali Linux中的十大WiFi攻击工具介绍

在这十大WiFi攻击黑客工具中,我们将讨论一个非常受欢迎的主题:无线网络攻击以及如何防止黑客入侵。无线网络通常是网络的一个弱点,因为WiFi信号可以随处可见,任何人都可以使用。还有很多路由器包含漏洞,可以利用正确的…

【Web API系列】使用getDisplayMedia来实现录屏功能

文章目录 前言一、认识getD该处使用的url网络请求的数据。二、使用步骤1.使用方法一实现录屏2.使用方法二实现录屏3. 运行效果 延伸 前言 Web API经过长期的发展,尤其是最近,发展相当迅猛,现在已经支持很多功能了,一些原生就支持…

使用vivado使用的方法以及遇到的错误

文章目录 前言一、Vivado运行RTL分析闪退二、在创建完工程后修改开发板型号三、引脚分配时,没有对应引脚或是I/O Std四、创建bit流文件五、安装Modelsim的流程(有一步很重要)六、和谐Modelsim七、vivado联合Modelsim进行仿真 前言 学习vivad…

Linux性能优化全景指南

Part1 Linux性能优化 1、性能优化性能指标 高并发和响应快对应着性能优化的两个核心指标:吞吐和延时 应用负载角度:直接影响了产品终端的用户体验系统资源角度:资源使用率、饱和度等 性能问题的本质就是系统资源已经到达瓶颈,但…

【模拟电路】基础电路

一、模拟电路概述 二、计算机工作原理 三、电流 四、直流电(DC)和交流电(AC) 五、开路和闭路 六、电压 七、电阻和欧姆定律 八、串联电路和并联电路 模拟电路基础PPT 一、模拟电路概述 模拟电路是一种使用电子元件(如…

如何解决mac无法访问github

确定github能访问的ip地址 点击检测按钮,找到比较快的ip 修改hosts文件:打开终端,输入 open /etc/hosts 后回车,打开mac的文本编辑器 add github.com 140.82.121.4 github.com 199.232.69.194 github.global.ssl.fastly.net …

【GoLang】Go语言几种标准库介绍(二)

你见过哪些令你膛目结舌的代码技巧? 文章目录 你见过哪些令你膛目结舌的代码技巧?前言几种库container 库 (封装堆、列表和环形列表等容器)主要功能:示例 crypto (加密算法)主要的子包和功能:示例 database(数据库驱动和接口)主要…

椭圆中点算法

原理 椭圆的扫描转换与圆的扫描转换有相似之处,但也有不同,主要区别是椭圆弧上存在改变主位移方向的临界点。瞬时针绘制四分椭圆弧的中点算法,根据对称性可以绘制完整的椭圆。 四分椭圆弧 中心在原点,长半轴为 a a a、短半轴为…

python flask学生成绩管理系统,包含使用文档

python flask学生成绩管理系统。 一.功能介绍 系统交互 登录无需注册功能 学生以学生编号为用户名,密码默认为学生编号,可修改教师以教师编号为用户名,密码默认为教师编号,可修改管理员以admin作为用户名,密码为固定…

关于Unity使用图片字体示例

1.使用TexturePacker打包图集 下载地址 TexturePacker - Create Sprite Sheets for your game! 2.准备好数字图 3. 导入图片 4. 打包图集需要的设置 将重心点设置为左下方 点击回车 > 后点击回 >到精灵列表 选择导出的格式 导出后的内容 >导入unity 导入 >…

AI产品经理 - 方法篇-工作方法

一、AI产品经理-典型的工作方法 二、如何从0做一个AI产品 1. 完整的工作流程 2.项目经理: 3.项目实施:样本测试模型-推荐引擎 4.项目上线 5. 项目实施-产品设计研发

elasticsearch系列九:异地容灾-CCR跨集群复制

概述 起初只在部分业务中采用es存储数据,在主中心搭建了个集群,随着es在我们系统中的地位越来越重要,数据也越来越多,针对它的安全性问题也越发重要,那如何对es做异地容灾呢? 今天咱们就一起看下官方提供的…

NXP实战笔记(三):S32K3xx基于RTD-SDK在S32DS上配置WDT配置

目录 1、WDT概述 2、SWT配置 2.1、超时时间,复位方式的配置 2.2、中断形式 1、WDT概述 SWT 编程模型只允许 32 位(字)访问。 以下任何尝试访问都是无效的: •非32位访问 •写入只读寄存器 •启用SWT时,将不正确的值写入SR…