写点什么

移动 AI 系列 - 实时超分的探索与实践

2020 年 12 月 27 日

移动 AI 系列 - 实时超分的探索与实践

一、背景


随着移动设备的普及,基于移动端的内容生产和消费变得越来越容易。百度 App 作为内容分发平台,承载着大量来自 PGC 和 UGC 贡献的图文和视频内容。在 2K 手机屏幕分辨率已是主流的当下,人们对观看高清晰度的资源的诉求也变得理所当然。图片和视频的采集、传输和存储受限于各种因素,难免会有一些清晰度和分辨率相对较差的资源存在,这就势必会影响到用户的观看体验。百度 App 联合百度视觉技术部团队,通过基于深度学习的实时超分辨率重建技术来提升端图片和视频显示效果。


二、如何提升分辨率


通常意义所说的图像、影像的分辨率是代表物理场景在成像平面上单位面积的像素多少,是反应图像细节的分辨能力的一个指标。它可用来描述图像的清晰度,分辨率越高,可呈现细节越多,所承载的像素值越精确,在同等显示硬件下,往往可以获得更好的观赏体验,这意味着更好的图片质量,同时资源文件也会更大。


不同分辨率的展示效果 (图片源自Wikipedia)


超分辨率可以理解为是基于现有图片像素内容来创建更多像素的过程。


传统提升图像分辨率的方式诸如插值法等,是依据固定规则来计算增加像素的值。往往会有马赛克、锯齿和边缘模糊等各种问题。


近年来,得益于深度学习技术的不断发展,诸如卷积神经网络借鉴了人类视觉系统感知图形图像的方法,通过对图像特征的提取和学习来完成重建,可达到更好更稳定的重建效果。


三、百度 App 超分重建模型


超分重建模型是基于 VDSR 的残差学习网络框架,通过模型剪裁和使用 Depthwise Separable Convolution 等方法对模型计算进行提速。模型输入为已经经过算法上采样至目标分辨率的 Y 通道,支持可变输入。


(图片源自VDSR Paper)


四、移动端实时超分辨率的难度与挑战



五、移动端实时超分的策略与优化


应用层优化:


1.图像超分内存:针对超大图像,通过将原始图片切块,分队列多实例并行超分,动态约束预测时内存的占用峰值。

2.视频超分实时性:由策略模块提供极限超分和安全帧率超分的播放稳定性保障。

3.计算资源调度:将部分基于 CPU 的前后处理迁移成 GPU 算子,前后处理和预测由 GPU 统一处理。



推理引擎优化:


优化成果:


1. 图片 &视频超分预测耗时,优化至原耗时的 50%以下。Batch 能力:iOS 可优化至 CoreML 耗时的 1/4。480p 预测速度:iPhone XR 为 25ms;安卓骁龙 845 机型为 23ms。

2. 图片 &视频超分 GPU 材质内存占用,降低至 50%以下。



六、业务应用与效果比对


图像超分与视频超分均已在百度多个移动端产品应用落地。每日有千万级的图片、视频经过端超分重建处理后,向用户展示和播放。全流程无 Server 干预,同时减轻了低频资源在 Server 端重建时的计算、存储和带宽占用。


低分辨率超分重建至目标分辨率 VS. 目标分辨率原画质


七、端到端接入方案


百度 App 将于近日开放视频超分能力,敬请期待。


// iOS/**超分@param image 待超分Image@param scaleType SR倍数@param block result回调*/ - (void)executeSuperResolutionWithImage:(UIImage *)aImage      scale:(MMLImageSuperResolutionScaleType)scaleType completion:(void (^)(UIImage *srImage, NSError *error))block API_AVAILABLE(ios(9.0));
//Android/** * 执行图片超分 * * @param inputBitmap 待超分的图片 * @param scale SR倍数 * @param onSrResultListener 超分结果回调 */void sr(Bitmap inputBitmap, float scale, OnSrResultListener onSrResultListener);
复制代码


八、参考文献


https://en.wikipedia.org/wiki/Image_resolution

https://arxiv.org/abs/1511.04587


头图:Unsplash

原文移动AI系列-实时超分的探索与实践

来源:百度 App 技术 - 微信公众号 [ID:gh_59f5931152fe]

转载:著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

2020 年 12 月 27 日 22:46760

评论

发布
暂无评论
发现更多内容

SpringBoot瘦身

JFound

Spring Boot sprnig

Java 25周年:MovedByJava之观点

范学雷

Java 架构 编程语言

程序员的修行之路-人生是一场修行

牧马人

程序员人生

教你快速升职加薪(毒鸡汤,慎服……)

无箭的丘比特

团队管理 企业文化 个人成长 团队建设

市场调研分析师走向末法时代

人称T客

Enhanced Github:一个 GitHub 专用的好插件

非著名程序员

GitHub 程序员 效率工具

往日之歌

彭宏豪95

分布式系统选主怎么玩

奈学教育

分布式系统

用友2019财报:你们看到的是数字,我却看到了office

人称T客

为什么要云原生?

Aaron_涛

架构 云原生

SaaS生态比拼,谁会是这场PK中的主角?

人称T客

Django的ListView超详细用法(含分页paginate功能)

BigYoung

Python django ListView 分页

职场“潜”规则

俊毅

个人成长 职场 新人 人才培养 能力模型

一个产品最不重要的东西

Neco.W

产品 外包 产品经理

Java开发架构篇:DDD模型领域层决策规则树服务设计

小傅哥

领域驱动设计 DDD 小傅哥 重构

金蝶2019财报在此——比头条更精彩

人称T客

Redis6.0 多线程源码分析

代码诗人

redis 源码 技术 线程模型

万字长文带你看懂Mybatis缓存机制

程序员小岑

Java 源码 技术 mybatis

我的编程之路-4(进阶)

顿晓

进阶 看书 编程之路

Redis 命令执行过程(下)

程序员历小冰

redis 源码分析

游戏夜读 | 写游戏用什么语言?

game1night

3亿办公族合力,第三代SaaS抵达战场

人称T客

kotlin 200行代码开发一个简化版Guice

陈吉米

Java kotlin guice ioc mynlp

一个前端工程师与死神的较量

陈辰

前端工程 压力 医院 生活质量 工程师

Elastic Stack 系列专辑

Yezhiwei

elasticsearch Logstash Kibana ELK Elastic Stack

回“疫”录(22):我以为结束了,其实才开始

小天同学

疫情 回忆录 现实纪录 纪实

Spring Security 如何将用户数据存入数据库?

江南一点雨

Java spring Spring Cloud Spring Boot spring security

Spring Security+Spring Data Jpa 强强联手,安全管理只有更简单!

江南一点雨

Java spring Spring Boot spring security

python实现·十大排序算法之冒泡排序(Bubble Sort)

南风以南

Python 排序算法 冒泡排序

深入剖析ThreadLocal原理

JFound

Java

竟然有人想看我的「日记」,满足一下大家

非著名程序员

学习 程序人生 提升认知

Hummer 轻量级跨端技术框架详解及实战

Hummer 轻量级跨端技术框架详解及实战

移动 AI 系列 - 实时超分的探索与实践-InfoQ