写点什么

超分辨率在移动实时音视频的应用实践

2019 年 11 月 29 日

超分辨率在移动实时音视频的应用实践

在 RTC 2019 实时互联网大会上,声网 Agora AI 算法工程师周世付,分享了超分辨率应用于移动端实时音视频场景下,遇到的难点、通用解决方法,以及解决思路。


近年来,超分辨率(简称超分)在图像增强、去噪、细节恢复、图像放大方面展现出广阔的应用前景,成为计算机视觉领域的研究热点,受到学术界和工业界的关注和重视,业界也纷纷举办超分竞赛,比如优酷的视频超分竞赛、声网的图像超分竞赛和深圳市政府举办的 AI+4K HDR 竞赛,旨在吸引更多的人参与超分算法的研究和促进超分算法的落地。因为超分算法的大规模应用落地还存在一些亟需解决的问题。


移动端实时超分的难点

目前,移动端实时音视频应用目前存在的一个痛点问题是传输的视频分辨偏低,而终端显示屏的分辨率高,存在分辨率不匹配的问题。实时传输的视频分辨率普遍偏低,是由于受到传输带宽的限制和实时性的要求。低分辨率视频不能有效的展现图像细节,因而带来的用户体验有限。为了解决传输视频与终端显示屏分辨率不匹配的问题,通常的做法是将低分辨率视频进行放大。


传统最常用的放大方法是插值法,如 bicubic、nearest、bilinear 等,优点是速度快,但缺点也很明显,即图像放大后,图像存在模糊、细节丢失的现象。



而随着深度学习的出现,基于深度学习的超分已经成为了新的解决方案,也是学术界与工业界都在研究的方法。它能有效地恢复图像的细节,并保持图像清晰度。但基于深度学习的超分算法在落地应用的过程中,也面临着挑战,主要表包括:(1)超分模型过大;(2)超分算法运算复杂。



超分与 Bicubic 对比


目前学术界有两个经典超分模型 SRGAN 和 ESRGAN,如下表所示,我们列出了两个模型的参数量和算法复杂度。SRGAN 和 ESRGAN 的参数量分别达到 150 万和 1600 万,所需要的存储空间分别是 6MB 和 63MB。对于移动设备来说,模型太大,会占用过多存储。


再看运算复杂度方面。以 360x480 大小的图像作为输入,进行 4 倍的放大,SRGAN 和 ESRGAN 的运算复杂度分别可以达到 446GFLOPs 和 3100GFLOPs。而目前主流的手机 iphone XR 的 gpu 的运算能力大约为 500GFLOPs。由此可见,目前的移动设备的运算能力,还无法实时运行现有的超分模型,需要降低模型的算法复杂度和减小模型的体积,才能可能让实时超分模型在移动设备实时运行。



如何降低算法复杂度与模型体积?

降低模型的算法复杂度和减小模型的体积的方法,通常是模型压缩和模型加速。模型压缩的目的,是通过减小模型中冗余的权重,去掉对模型性能贡献小的分支,从而达到减小模型的参数量,降低模型的运算量。而模型加速,则是侧重降低卷积运算的开销,提高卷积运算的效率,从而提高模型的运行速度。模型压缩和模型加速,是相辅相成的,通过合理的模型压缩算法和模型加速算法的结合,能够有效地减小模型体积和提高模型的运算速度。


模型压缩方法,可以分为权重优化和模型结构设计。权重优化也可分为剪枝和量化。


剪枝,是将模型中冗余的权重去掉,以达到模型瘦身的目的。比如,Deep compression[1],通过权值剪枝、权值量化和权值编码,能够将模型的体积减小 49 倍。


权重量化,则将权值以低码率进行存储,从而减小模型的体积,比如,XNornet[2]模型,对输入的 featuremaps 和权值均进行二进制量化,实现 58x 的模型压缩和 32 倍的加速。


经典的轻量级模型有 suqeezenet[3]、mobilenet[4]和 shufflenet[5]。他们从模型结构设计角度来讲,通常会采用小卷积核替代大卷积核,如用 3x3 替代 5x5、7x7, 或者 1x1 替代 3x3。在同等条件下,3x3 的运算是 5x5、7x7 的 9/25、9/49,而且 1x1 是 3x3 的 1/9。


模型加速方法,在 convolution 的基础上,衍生出了 depth-wise convolution、group convolution,point-wise convolution。在 mobilenett 模型中,大量使用了 depth-wise convolution 和 point-wise convolution。而在 shufflenet 模型中,则采用了 group convolution 和 point-wise convolution。



在以上的研究基础之上,声网也自研了超分算法。声网的超分模型的体积,比 mobilenet v2 还要小。对 360p 的图像进行 2 倍的放大时,其运算复杂度小于 2GFLOPs,可实现在移动设备上的实时运行。在运算速度和超分效果实现较好的前提下,有效地提高移动实时音视频的用户体验。


本文转载自公众号声网 Agora(ID:shengwang-agora)。


原文链接:


https://mp.weixin.qq.com/s/oBrrGAnXvAU4Y2hUfy2R4g


2019 年 11 月 29 日 16:49320

评论

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

从湖南“软硬兼施”,管窥三湘水畔的智能浪潮

脑极体

ARTS打卡 第15周

引花眠

微服务 ARTS 打卡计划

不支持原子性的 Redis 事务也叫事务吗?

海星

Java redis 事务

区块链交易所搭建技术方案|去中心化交易所开发

WX13823153201

区块链交易所搭建

一点思考|工作十几年了,竟从未用过do-while!

王磊

Java

阿里巴巴发布国内首个公益区块链标准 用技术让公益公开透明

CECBC区块链专委会

区块链 公益

Spring 5 中文解析测试篇-Spring测试

青年IT男

Spring5 JUnit

usdt支付系统开发|承兑商支付跑分系统搭建

WX13823153201

usdt支付系统开发

[翻译] Go Concurrency Patterns: Pipelines and cancellation[Go并发模式]

卓丁

channel pipeline

实战解读丨Linux下实现高并发socket最大连接数的配置方法

华为云开发者社区

Linux TCP socket 高并发

LeetCode题解:239. 滑动窗口最大值,单调队列,JavaScript,详细注释

Lee Chen

LeetCode 前端进阶训练营

给DevOps加点料——融入安全性的DevSecOps

陈琦

DevOps 运维 测试 开发 安全性

有奖征文重磅来袭,来!一起玩把大的!

小红豆

Redis 数据同步机制--主从模式

是老郭啊

redis 主从配置 主从同步 redis主从 主从复制

用函数式写法精简Java代码的一个例子

Sean

Java 函数式编程

架构师训练营第十三周总结

张明森

读后感之《任正非:以客户为中心》

王新涵

程序的机器级表示-数组的分配和访问

引花眠

计算机基础

学习 Java,有什么书籍推荐?学习的方法和过程是怎样的?

沉默王二

Java 学习 程序员 书单

一个银行客户经理的“变形记”

华为云开发者社区

人工智能 金融科技

oeasy教您玩转linux010206 蒸汽机车 sl

o

Golang Package sync 透析

卓丁

golang sync

大数据管理:构建数据自己的“独门独院”

华为云开发者社区

大数据 数据湖

Go: gops如何与Go运行时交互?

陈思敏捷

go golang gops

用 Python 实现一个简易版的 Pong 游戏 (一)

Matrix Chan

Python Turtle Python游戏

翻转链表,机器学习视觉训练,对数据的人工标注,使信息丢失,John 易筋 ARTS 打卡 Week 16

John(易筋)

学习 ARTS 打卡计划 翻转链表 Google论文评判人工预处理 大数据架构Spark

握草,你竟然在代码里下毒!

小傅哥

Java 程序员 小傅哥 bug 有毒代码

usdt跨境入金支付系统搭建|区块链跑分系统开发

WX13823153201

数字货币交易所开发方案|去中心化交易所搭建

WX13823153201

数字货币交易所开发

3. 站在使用层面,Bean Validation这些标准接口你需要烂熟于胸

YourBatman

Hibernate-Validator Bean Validation 数据校验

你问我答:容器平台改造后的安全是如何解决的?

博云技术社区

云计算 容器 微服务 PaaS 博云

超分辨率在移动实时音视频的应用实践-InfoQ