写点什么

如何为实时音视频设计小且优的深度学习模型?(下)

  • 2019-11-30
  • 本文字数:2463 字

    阅读完需:约 8 分钟

如何为实时音视频设计小且优的深度学习模型?(下)

如何设计小且优的深度学习模型?

众所周知深度学习最好的结果是采用比较大的模型,在比较大的机器平台,比如说服务器,有成千上万的 GPU 作并行处理来训练,并且需要有非常大量的训练数据集。


但是现在针对移动设备的应用很多,我们做移动社交、做直播、通讯,面临的挑战是要设计一个小的模型,最好能满足下面三个条件:


  • 这个小模型能够在移动设备上实时地跑,并且不会消耗太多功耗,不会引起发热等等问题。

  • 另外它的结果还要足够好,不能因为模型做小了而没有效果,这个没有意义。

  • 训练要能够基于比较合理数量的数据集就能够取得好的效果,要上百万个甚至上千万个数据往往不够现实,因为数据收集的成本太高。


接下来我们作复杂性分析,我们的目标是缩小模型。来看一些典型的模型,经典的一些作图像分析和识别的深度神经网络,像 VGG 模型,是很大的模型,它的参数个数,也就是权重的个数,是衡量这个模型复杂性的一个重要指标。


VGG16 模型有一亿多个参数。为了在移动平台能够运行,业界做了大量的工作,这些工作包括把这个模型做剪枝、压缩和重新训练模型等,也有通过更复杂的技术,比如通过强化学习来达成一个更小的模型。这些方法都有一些潜在的问题,比如最终出来的结构不够简单,计算量仍然不够少,或者不易于并行实现等。


谷歌在这方面也做了很好的工作,最新的结果是 MobileNet v2 的 340 万个参数,不到 VGG16 参数个数的 3%,缩小了很多,将近两个数量级,非常小。但是对我们来说,340 万个参数的模型还是很大,尤其在移动设备上以软件实现仍不是很理想,当然我们的任务有点不一样,我们是做图像超分,而上述模型是做做物体识别的。

基于 ReLU 的 CNN

我们来看一下基于 ReLU 的 CNN,实际上是分段线性函数,这个很容易理解,尤其是当 stride 为 1 的时候,分段线性的映射还是保持的。


为了更好地理解下面的内容,我再介绍一个概念,就是流型。举个例子来说流型比较容易理解,比如关于人脸的图像,虽然可以是在 1000×1000 个大的尺寸上,有一百万个像素点,但真正表征人脸不需要一百万个点,一两百个参数就可以,实际上在比较低维的一个空间里即可以表征出来,这个过程就是从它的背景空间映射到它的参数空间,或者称为隐空间的过程,这实际上是一个编码的过程,是一个降维处理。


反过来从这个低维空间到高维空间是一个解码的过程,是一个生成器。一般来说编码是把数据压缩到更低维的参数空间,叫隐空间。存在一个映射,从高维流型到低维的空间之间,正映射和逆映射都是连续的,这就是同胚映射。我们想隐空间这个低维的参数空间里做些操作。


刚才说过深度学习实际上是一个分段线性的映射,它是对流型的一个分段线性的逼近,比如这个模型比较简单的时候,它是以两条线来逼近,模型复杂的时候以四条线來逼近,这时逼近的程度更高。实际上一个更复杂的深度学习网络能产生的效果更好,逼近的精度更高,当然它的复杂度也更高。


另外,不同的逼近方法达到的效果也不一样,换一个方式可能逼近的更好,实际上不同的权重对应不同的映射,对应不同的逼近效果,我们训练的过程就是在找一个最优化的逼近,至少是找一个局部最优化的逼近过程,使得它达到的效果某种意义上是最优的。精度是由逼近的质量来衡量的。


我把我们的结果报告一下,最后做到了只有万级的参数个数,比谷歌的用于移动设备的 MobileNet v2 模型还小了两个多数量级。声网模型不到它的 1%,进一步小了非常多。通常模型变小之后会有一个问题,GAN 本身隐含的问题就变得更突出,模式坍塌就是其中一个问题。

模式坍塌

模式坍塌是什么问题?生成器很难学习多模态的分布。举一个在圆环上的八个高斯分布的例子。生成器想学习这个分布,但是在一个简单模型的训练的过程及最后结果都只能收敛到其中一个高斯分布。用在实际应用的例子上,比如生成数字,我们期望它像第一行图像中这样能生成 0-9 的各个数字,但是很容易它就像第二行这样只能生成其中一个数字,比如总生成 1 或者某个含混难辩的数字,因为 1 容易在判别器那里蒙混过关,这虽然做对了,但是它生成不了别的数字,用处不大。


如何解决这个问题或者缓解这个问题呢?我们做了一系列的工作,简单来说,我们加了一些约束,加了对局域的约束,加了对切空间的约束,再加了对隐空间的优化,接下来不能一一讲述,就简单讲解一下对隐空间的优化。

隐空间的优化

刚才我提到过 DNN 实际上是把一个流型往隐空间或者参数空间做映射。一个图像通常被编码到一个低维的空间,就是隐空间。这里给大家做一个直观的解释,我们直接在这个编码空间,即隐空间里来做恢复,先在隐空间里均匀的去采样一些点,然后再通过这些点输入到生成器,生成器重构出来的图像点,把它们重叠到原来的图像上,有些恢复出来的点很密,但是有些地方比如头部脸部就很稀疏,这就意味着头部的恢复很差。生成器坍塌到一个局部最优,这个重构是很难或者不太容易得到很好的结果。当然我们可以更密集的取些采样点,最终头部也被覆盖到,但是代价会很大。


我们可以把这个隐空间先做优化,再在上面做均匀抽样,再把它输入进生成器,生成器出来,抽样点还是这么多,重构图像出来的重构点也是均匀的,也就是从这个点云里出来的东西也是均匀的。


打个比方,我们拿一张平的纸,使用各种不规则的方式任意折叠起来很多遍,你被要求在折叠起来的一团纸上抽取一定的采样点,然后把纸展开恢复平整后要求这些采样点是均匀的。这个很难,一般做不到,除非用暴力取足够多的点出来。但那样复杂性很高,与我们的目标相悖。我们想同时控制复杂性又控制效果。我们把类似的隐空间优化应用到了我们的模型训练里。因为我们最终模型的参数非常小,所以功耗在 iPhone7 上很少,另外手机也不会发热。效果基本上我们能做到,比如说一个 360P 的视频,出来的效果能够达到在 720P 的效果,能得到一个高清的效果。


我们未来还想从数学更多的理解一些深度网络,对某个点、某个问题上能够用数学的方式来描述,来进一步提高图像清晰度。这是我们未来要做的工作,谢谢大家。


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


原文链接:


https://mp.weixin.qq.com/s/G7uRFUoBMfFKMwf2vH-eJA


2019-11-30 22:11809

评论

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

Spring Boot零配置启动原理

码农参上

Spring Cloud springboot

居家办公竟比去公司上班还累? | 社区征文

架构精进之路

初夏征文

华为开启2022全球校园AI算法精英大赛 百万奖金等你来挑战算法极限

科技汇

web前端培训组件内部数据state的知识点分享

@零度

前端开发 state

Drive to APasS!使用明道云管理F1赛事

明道云

java培训redis集群原理详解

@零度

redis java培训

SpringCloud - Eureka核心源码解析

码农参上

微服务 SpringCloud Eureka 注册中心

面试突击60:什么情况会导致 MySQL 索引失效?

王磊

Java MySQL 面试

前端食堂技术周刊第 42 期:Vue 2.7 Beta、TS 4.8 Beta、React 开源奖、ECMAScript 2022

童欧巴

JavaScript typescript Vue 前端 React

基于STM32设计的蓝牙健康管理设备

DS小龙哥

6月月更

SpringBoot 3.0最低版本要求的JDK 17,这几个新特性不能不知道!

博文视点Broadview

政策关注 | 加快构建数据基础制度,维护国家数据安全

青藤云安全

数据治理 数据安全

私藏干货分享:关于企业架构中如何进行平台化

松子(李博源)

企业架构 数据架构 业务架构 大数据平台 平台

预约直播 | 主流视觉算法介绍及在PAI上的应用

阿里云大数据AI技术

机器学习 视觉算法

直播电子商务应用程序开发需要什么基本功能?未来发展前景如何?

开源直播系统源码

软件开发 直播源码 带货直播

Vue3+ElementPlus+Axios实现从后端请求数据并渲染

Python研究所

6月月更

EMQ携手谐云,打造车联网平台联合解决方案

EMQ映云科技

车联网 物联网 IoT 兼容性测试 6月月更

Rxjs mergeMap 的使用场合

汪子熙

typescript 响应式编程 angular RXJS 6月月更

Elasticsearch 在地理信息空间索引的探索和演进

vivo互联网技术

elasticsearch 数据分析 数据检索

红包雨: Redis 和 Lua 的奇妙邂逅

勇哥java实战分享

优博讯出席OpenHarmony技术日,全新打造下一代安全支付终端

极客天地

JavaScript 回调函数/Promise/ async/await

源字节1号

软件开发 前端开发 后端开发

秒云荣获《2022爱分析 · IT运维厂商全景报告》智能运维AIOps市场代表厂商

MIAOYUN

云原生 智能运维 IT运维 智能运维AIOps

TDengine 邀请函:做用技术改变世界的超级英雄,成为 TD Hero

TDengine

数据库 tdengine

Salesforce 容器化 ISV 场景下的软件供应链安全落地实践

阿里巴巴中间件

阿里云 容器 云原生

centos7防火墙完整操作命令,值得的收藏

迷彩

Linux 运维 Centos 7 防火墙 6月月更

我大抵是卷上瘾了,横竖睡不着!竟让一个Bug,搞我两次!

小傅哥

小傅哥 异常 bug 连接池 面试问题

Future & CompletionService

Ayue、

多线程 Future接口

在外企远程办公是什么体验? | 社区征文

Geek_rze78a

Java 程序员 远程办公 外企 初夏征文

大数据培训Scala 类和对象知识与案例分享

@零度

scala 大数据

【值得收藏】Centos7 安装mysql完整操作命令

迷彩

MySQL 数据库 centos 6月月更

如何为实时音视频设计小且优的深度学习模型?(下)_文化 & 方法_声网_InfoQ精选文章