【2023 CCF 大数据与计算智能大赛】基于TPU平台实现超分辨率重建模型部署 基于FSRCNN的TPU平台超分辨率模型部署方案

本文主要是介绍【2023 CCF 大数据与计算智能大赛】基于TPU平台实现超分辨率重建模型部署 基于FSRCNN的TPU平台超分辨率模型部署方案,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

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

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

基于FSRCNN的TPU平台超分辨率模型部署方案

WELL

刘渝

人工智能 研一

西安交通大学

中国-西安

1461003622@qq.com

史政立

网络空间安全 研一

西安交通大学

中国-西安

1170774291@qq.com

崔琳、张长昊、郭金伟

软件工程等 研一

北京大学软微学院

中国-北京

g1335129739@163.com

团队简介

刘渝:西安交通大学本硕,目前研一,研究兴趣是机器人多模态感知

史政立:西安交通大学本硕,网络空间安全专业。曾获得首届人工智能安全大赛优秀奖

崔琳:本科毕业于西安交通大学,目前北京大学软件与微电子学院研一在读,主要进行多模态和dml方向的研究以及学习

张长昊:研究生就读于北大软微软件工程专业,研究兴趣是时序数据预测

郭金伟:本科毕业于辽宁工程技术大学,在校期间获得数学竞赛国家一等奖,辽宁省acm竞赛银牌,硕士就读于北京大学软件与微电子学院,录取方向为人工智能

摘要

视觉效果逼真的Stable Diffusion在生成高分辨率图像时效率较低,在TPU平台上提高Stable Diffusion模型生成高分辨率图像的效率可以依靠超分辨率模型作为上采样器。

赛题的目标是为在边缘计算设备上提高高分辨率图像生成效率提供有效的技术方案,降低资源和内存需求,同时保证图像质量。

针对本赛题,我们经过对比分析采用了FSRCNN作为超分辨率模型,并设计了集中式超分辨率(Centralized Super Resolution)的方法与插值组合到一起用于提高图像分辨率。此外,我们将前后处理集成到模型中,利用TPU的算力加速前后处理的速度,以减少处理时间。

实验结果表明,我们的方法在牺牲一部分图像质量评估指标NIQE的情况下,显著减少了处理时间,在赛题给定的评价指标上具有较高的得分。我们还讨论了性能改进的可能性,包括考虑使用Bmcv硬件加速部分操作。

关键词

图像超分辨率,TPU模型部署

1 赛题数据分析

赛题的任务是针对给定的数据在TPU上进行超分辨率处理,以期实现推理速度与图像质量之间的最佳平衡。

我们首先从大小和内容两个方面分析了数据的基本构成,从尺寸上说:最大尺寸:2039*2039,最小尺寸:183*510。

根据最大尺寸和最小尺寸对图像分组,组1:长宽均小于500,组2:去除组1后长宽均小于1000,组3:组2中长或宽为510,组4:去除组1、2后长宽均小于1500,组5:去除组1、2、4后的数量。根据分组对数据进行统计,得到下表:

组别12345
数量14944009213

可以看出小尺寸图像占比较大,大尺寸图像占比较少,同时长或宽为510的图像占比很大。

同时我们采样查看了数据图像的内容,图像确实包含各个场景,既包含外景也包含人像,还有虚拟二次元人物,内容比较丰富。我们认为赛题使用的是网络搜集的图像可以避免直接使用Diffusion生成的图像与实际情况可能的偏差,从而避免可能对NIQE这一自然评价指标有所影响。

2 方案介绍

本节将介绍我们采用的方案的具体内容, 我们针对比赛任务主要进行了三方面设计:超分辨率模型选取、集中式超分辨率处理(CSR)设计和前后处理集成。

2.1 超分模型选取

在经过多次比较实验之后,我们最终选用FSRCNN[1]作为超分模型使用。以下说明其设计结构及主要思想:

1、特征提取层:使用少量的卷积层来提取图像特征。我们使用的卷积核。

2、收缩层:减少特征维度,以降低后续处理的计算复杂度。我们使用的卷积核对特征提取层的高维数据降维。

3、映射层:一系列的卷积层,用于学习输入到输出(低分辨率到高分辨率)的映射关系。我们使用 的卷积核进行非线性映射。

4、扩张层:增加特征维度,准备进行分辨率提升。我们采用 的小卷积核恢复图像至收缩前的维度。

5、放大层:对图像进行分辨率提升。我们采用的卷积核放大图像尺寸。

总结结构如下图所示:
在这里插入图片描述

图1:FSRCNN结构

2.2 超分实施策略

官方代码通过将原图分解成多个小块进行超分辨率处理,然后使用权重融合来消融边界,这是比较优雅的处理。但是根据我们对评价公式的分析,运算速度的提高即运算时间的减少带来的收益高于图像质量带来的收益。

我们了解JPEG压缩图像是通过丢弃即使丢失也不会显著影响图像视觉质量的信息,从而在保持相对较高视觉质量的同时,能够以更小的文件大小存储和传输。受此启发,对于增大图像分辨率的任务,直接通过插值算法放大的质量通常比使用超分辨率模型放大的效果更差,因此我们可以仅使用超分辨率模型放大图像中对视觉效果影响更大的一部分,从而在时间和效果之间达到更好的平衡。

由于NIQE通过分析图像的统计特性,评估其视觉质量,从而更接近于人眼对图像的感知评价;另一方面,测试使用的图像种类也非常丰富。因此我们只能寻找一个普适的注意力集中的区域。

在计算机视觉和图像处理领域,有一些研究关注人眼视觉系统在观察图像时对中心区域的更高关注度[2]。这种现象通常被称为"中心偏向"(center bias)。受此启发,我们决定采用集中式超分辨率处理Centralized Super Resolution (CSR) 的策略。我们针对更高关注度的中心区域采用模型处理,而其他较低关注度的区域采用插值处理,这一方案首先符合人眼认知,而下一节我们将重点介绍其统计原理。

2.3 统计特性分析

为了进一步说明提出的CSR框架的有效性,我们对CSR、ESR(Edge Super Resolution)和GSR(Global Super Resolution)统计特性分析,深入探究不同超分辨率策略对图像的影响,并为它们的性能进行客观评估(NIQE)提供有力依据。

频率统计差异(幅度谱): 如图2所示,相较于ESR, CSR和GSR的的幅度谱变化更加自然,趋于一致,ESR在高频阶段能量增加剧烈。
在这里插入图片描述

图2:频谱特性曲线

亮度统计差异: GSR亮度特性与CSR和ESR均不同。GSR图像缺乏亮度饱和区域,并且整个直方图分布较为不均匀。ESR和CSR图像则出现饱和的像素值,相对于ESR,CSR亮度分布更加均匀一点。
在这里插入图片描述

图3:亮度直方图

局部亮度、对比度以及频率的t检验差异: t检验(t-test)旨在利用两组样本数据判断其均值是否存在显著差异。在这里我们利用t检验的p值进行比较。p值越小,代表两组数据存在显著性差异。我们比较GSR与CSR和GSR与ESR的t检验p值,相较后者,GSR与CSR的p值较大,这也就意味着,从统计平均的意义而言,GSR与CSR之间的统计特性更加接近。从像素域到频域,GSR和CSR共享统计特征。

P-value亮度对比度频率
GSR+CSR0.4870.5810.00100
GSR+ESR0.4850.5580.00003

三种统计特性的分析旨在证明CSR这种启发式的超分策略与一般的全局超分策略GSR之间存在更强的统计一致性。而NIQE指标正是建立在这种统计特性基础之上,因此CSR相较于其他超分策略,其NIQE值会更接近GSR。

2.3 前后处理集成

一方面TPU的算力比较强大,另一方面我们采用了中央超分的设计,因此我们观察到在处理图像时,TPU推理时间相对较短,而前后处理时间则占据了整体处理时间的较大部分。

通过查阅手册我们了解到,TPU配套软件提供的bmcv可以通过TPU的加速来提高前后处理的速度,但是我们认为这样仍然不如直接把计算以算子形式直接放到TPU上运行的速度快。

考虑到本任务的前后处理相对简单,使用的均为TPU软件支持的算子,同时前后处理方式固定,没有分支等结构,我们希望能够把数据的前后处理都集成到模型中,直接使用TPU进行处理。

具体而言我们集成的包括如下操作:输入图像0-255到0-1的转换、BGR到yCbCr和yCbCr到BGR的通道转换、输入TPU图像的插值放大,其中输入TPU的图像也要插值放大的原因是超分辨率模型仅对y通道进行处理,其余通道需要插值获得。

2.4 流程总结

最终总结流程图如下:
在这里插入图片描述

图4:方案流程图

3 效果对比说明

3.1 模型对比

我们采用官方提供的推理流程代码进行实验,仅对输入输出的不同进行少量处理,测试了ESRGAN、SRCNN和FSRCNN在官方代码下的运行效果,如下表所示:

项目ESRGANSRCNNFSRCNN
时间/s5.18332.37281.8364
NIQE4.40125.88644.7701

FSRCNN以少量的NIQE的损失,大大减少了处理时间,显著提高了运行效率。

3.2 超分策略对比

修改代码逻辑为CSR的形式,通道域转换等前后处理操作在CPU上进行,模型推理使用TPU进行,结果如下表所示:

项目GSRCSR
时间/s1.83640.5896
NIQE4.77015.9271

采用CSR处理之后模型以一定的NIQE损失换来了巨大的推理时间改善;我们的结果证实了中央超分不仅在视觉效果上符合人类的观察习惯,而且在客观的图像质量评估标准上也显示出优越性。

3.3 前后处理集成对比

未集成表示前后处理均通过Opencv进行,集成表示将所有可以转移到TPU处理的步骤都通过TPU支持的算子进行,结果如下表所示:

项目未集成集成
时间/s0.51870.0141
NIQE6.04816.3400

TPU的加速显著减少了前后处理的时间,使结果又有一次比较大的提升。

4 性能改进讨论

4.1 Bmcv加速

虽然我们把大部分前后处理操作转移到TPU进行,但是仍有一部分无法转移,这部分操作可以使用官方库Bmcv通过硬件加速。

我们详细阅读文档使用了Bmcv对代码进行了改写,但是23.5.1版本的Bmcv不支持cubic插值,这对我们方案的效果影响比较大,因此最终放弃了Bmcv加速的方案。

致谢

感谢史政立和刘渝同学的共同辛苦努力,感谢崔琳、张长昊、郭金伟同学的共同积极参与。

参考

[1] Dong C, Loy C C, Tang X. Accelerating the super-resolution convolutional neural network[C]//Computer Vision–ECCV 2016: 14th European Conference, Amsterdam, The Netherlands, October 11-14, 2016, Proceedings, Part II 14. Springer International Publishing, 2016: 391-407.

[2] Tseng P H, Carmi R, Cameron I G M, et al. Quantifying center bias of observers in free viewing of dynamic natural scenes[J]. Journal of vision, 2009, 9(7): 4-4.

这篇关于【2023 CCF 大数据与计算智能大赛】基于TPU平台实现超分辨率重建模型部署 基于FSRCNN的TPU平台超分辨率模型部署方案的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/550041

相关文章

C++使用栈实现括号匹配的代码详解

《C++使用栈实现括号匹配的代码详解》在编程中,括号匹配是一个常见问题,尤其是在处理数学表达式、编译器解析等任务时,栈是一种非常适合处理此类问题的数据结构,能够精确地管理括号的匹配问题,本文将通过C+... 目录引言问题描述代码讲解代码解析栈的状态表示测试总结引言在编程中,括号匹配是一个常见问题,尤其是在

Java实现检查多个时间段是否有重合

《Java实现检查多个时间段是否有重合》这篇文章主要为大家详细介绍了如何使用Java实现检查多个时间段是否有重合,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录流程概述步骤详解China编程步骤1:定义时间段类步骤2:添加时间段步骤3:检查时间段是否有重合步骤4:输出结果示例代码结语作

使用C++实现链表元素的反转

《使用C++实现链表元素的反转》反转链表是链表操作中一个经典的问题,也是面试中常见的考题,本文将从思路到实现一步步地讲解如何实现链表的反转,帮助初学者理解这一操作,我们将使用C++代码演示具体实现,同... 目录问题定义思路分析代码实现带头节点的链表代码讲解其他实现方式时间和空间复杂度分析总结问题定义给定

Java覆盖第三方jar包中的某一个类的实现方法

《Java覆盖第三方jar包中的某一个类的实现方法》在我们日常的开发中,经常需要使用第三方的jar包,有时候我们会发现第三方的jar包中的某一个类有问题,或者我们需要定制化修改其中的逻辑,那么应该如何... 目录一、需求描述二、示例描述三、操作步骤四、验证结果五、实现原理一、需求描述需求描述如下:需要在

ElasticSearch+Kibana通过Docker部署到Linux服务器中操作方法

《ElasticSearch+Kibana通过Docker部署到Linux服务器中操作方法》本文介绍了Elasticsearch的基本概念,包括文档和字段、索引和映射,还详细描述了如何通过Docker... 目录1、ElasticSearch概念2、ElasticSearch、Kibana和IK分词器部署

部署Vue项目到服务器后404错误的原因及解决方案

《部署Vue项目到服务器后404错误的原因及解决方案》文章介绍了Vue项目部署步骤以及404错误的解决方案,部署步骤包括构建项目、上传文件、配置Web服务器、重启Nginx和访问域名,404错误通常是... 目录一、vue项目部署步骤二、404错误原因及解决方案错误场景原因分析解决方案一、Vue项目部署步骤

如何使用Java实现请求deepseek

《如何使用Java实现请求deepseek》这篇文章主要为大家详细介绍了如何使用Java实现请求deepseek功能,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1.deepseek的api创建2.Java实现请求deepseek2.1 pom文件2.2 json转化文件2.2

python使用fastapi实现多语言国际化的操作指南

《python使用fastapi实现多语言国际化的操作指南》本文介绍了使用Python和FastAPI实现多语言国际化的操作指南,包括多语言架构技术栈、翻译管理、前端本地化、语言切换机制以及常见陷阱和... 目录多语言国际化实现指南项目多语言架构技术栈目录结构翻译工作流1. 翻译数据存储2. 翻译生成脚本

Linux流媒体服务器部署流程

《Linux流媒体服务器部署流程》文章详细介绍了流媒体服务器的部署步骤,包括更新系统、安装依赖组件、编译安装Nginx和RTMP模块、配置Nginx和FFmpeg,以及测试流媒体服务器的搭建... 目录流媒体服务器部署部署安装1.更新系统2.安装依赖组件3.解压4.编译安装(添加RTMP和openssl模块

如何通过Python实现一个消息队列

《如何通过Python实现一个消息队列》这篇文章主要为大家详细介绍了如何通过Python实现一个简单的消息队列,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录如何通过 python 实现消息队列如何把 http 请求放在队列中执行1. 使用 queue.Queue 和 reque