业界 | 腾讯 AI Lab 正式开源PocketFlow,让深度学习放入手机!

机器之心发布

腾讯 AI Lab

9 月,机器之心曾报道腾讯 AI Lab 提出的自动化模型压缩框架 PocketFlow。近日,腾讯 AI Lab 在南京举办的腾讯全球合作伙伴论坛上宣布正式开源「PocketFlow」项目。

项目访问地址:https://github.com/Tencent/PocketFlow

据介绍,该项目是一个自动化深度学习模型压缩与加速框架,整合多种模型压缩与加速算法并利用强化学习自动搜索合适压缩参数,解决传统深度学习模型由于模型体积太大,计算资源消耗高而难以在移动设备上部署的痛点,同时极大程度的降低了模型压缩的技术门槛,赋能移动端 AI 应用开发。

这是一款适用于各个专业能力层面开发者的模型压缩框架,基于 Tensorflow 开发,集成了当前主流与 AI Lab 自研的多个模型压缩与训练算法,并采用超参数优化组件实现了全程自动化托管式的模型压缩。开发者无需了解具体模型压缩算法细节,即可快速地将 AI 技术部署到移动端产品上,实现用户数据的本地高效处理。

目前该框架在腾讯内部已对多个移动端 AI 应用模型进行压缩和加速,并取得了令人满意的效果,对应用整体的上线效果起到了非常重要的作用。

PocketFlow 框架

PocketFlow 框架本次开源内容主要由两部分组件构成,分别是模型压缩/加速算法部分和超参数优化部分,具体结构如下图所示:

模型压缩/加速算法部分包括多种深度学习模型压缩和加速算法:

  • 通道剪枝(channel pruning): 在 CNN 网络中,通过对特征图中的通道维度进行剪枝,可以同时降低模型大小和计算复杂度,并且压缩后的模型可以直接基于现有的深度学习框架进行部署。PocketFlow 还支持通道剪枝的分组 finetune/retrain 功能,通过实验发现此方法可以使原本压缩后的模型精度有明显的提升。
  • 权重稀疏化(weight sparsification):通过对网络权重引入稀疏性约束,可以大幅度降低网络权重中的非零元素个数;压缩后模型的网络权重可以以稀疏矩阵的形式进行存储和传输,从而实现模型压缩。
  • 权重量化(weight quantization):通过对网络权重引入量化约束,可以降低用于表示每个网络权重所需的比特数;同时提供了对于均匀和非均匀两大类量化算法的支持,可以充分利用 ARM 和 FPGA 等设备的硬件优化,以提升移动端的计算效率,并为未来的神经网络芯片设计提供软件支持。
  • 网络蒸馏(network distillation):对于上述各种模型压缩组件,通过将未压缩的原始模型的输出作为额外的监督信息,指导压缩后模型的训练,在压缩/加速倍数不变的前提下均可以获得 0.5%-2.0% 不等的精度提升。
  • 多 GPU 训练(multi-GPU training):深度学习模型训练过程对计算资源要求较高,单个 GPU 难以在短时间内完成模型训练,因此提供了对于多机多卡分布式训练的全面支持,以加快使用者的开发流程。无论是基于 ImageNet 数据的 Resnet-50 图像分类模型还是基于 WMT14 数据的 Transformer 机器翻译模型,均可以在一个小时内训练完毕。

超参数优化(hyper-parameter optimization)部分可以通过强化学习或者 AutoML,在整体压缩率一定的情况下,搜索出每一层最合适的压缩比例使得整体的精度最高。多数开发者对模型压缩算法往往了解较少,调节压缩算法参数需要长期的学习和实验才能有所经验,但超参数取值对最终结果往往有着巨大的影。PocketFlow 的超参数优化部分正是帮助开发者解决了这一大痛点,并且通过实验发现,其优化结果也要好于专业的模型压缩工程师手工调参的结果。其结构如下图:

PocketFlow 性能

通过引入超参数优化组件,不仅避免了高门槛、繁琐的人工调参工作,同时也使得 PocketFlow 在各个压缩算法上全面超过了人工调参的效果。以图像分类任务为例,在 CIFAR-10 和 ImageNet 等数据集上,PocketFlow 对 ResNet 和 MobileNet 等多种 CNN 网络结构进行有效的模型压缩与加速。

在 CIFAR-10 数据集上,PocketFlow 以 ResNet-56 作为基准模型进行通道剪枝,并加入了超参数优化和网络蒸馏等训练策略,实现了 2.5 倍加速下分类精度损失 0.4%,3.3 倍加速下精度损失 0.7%,且显著优于未压缩的 ResNet-44 模型; 在 ImageNet 数据集上,PocketFlow 可以对原本已经十分精简的 MobileNet 模型继续进行权重稀疏化,以更小的模型尺寸取得相似的分类精度;与 Inception-V1、ResNet-18 等模型相比,模型大小仅为后者的约 20~40%,但分类精度基本一致(甚至更高)。

相比于费时费力的人工调参,PocketFlow 框架中的 AutoML 自动超参数优化组件仅需 10 余次迭代就能达到与人工调参类似的性能,在经过 100 次迭代后搜索得到的超参数组合可以降低约 0.6% 的精度损失;通过使用超参数优化组件自动地确定网络中各层权重的量化比特数,PocketFlow 在对用于 ImageNet 图像分类任务的 MobileNet-v1 模型进行压缩时,取得了一致性的性能提升;用 PocketFlow 平均量化比特数为 8 时,准确率不降反升,从量化前的 70.89% 提升到量化后的 71.29%。

PocketFlow 内部应用

据了解,在腾讯公司内部,PocketFlow 框架正在为多项移动端业务提供模型压缩与加速的技术支持。例如,在手机拍照 APP 中,人脸关键点定位模型是一个常用的预处理模块,通过对脸部的百余个特征点(如眼角、鼻尖等)进行识别与定位,可以为后续的人脸识别、智能美颜等多个应用提供必要的特征数据。腾讯 AI Lab 基于 PocketFlow 框架,对人脸关键点定位模型进行压缩,在保持定位精度不变的同时,大幅度地降低了计算开销,在本身已经十分精简的网络上取得了 1.3 ~ 2 倍不等的加速效果,压缩后的模型已经在实际产品中得到部署。

在人体体态识别项目中,PocketFlow 更是在满足上线精度的要求下,使得模型推理速度有 3 倍以上的加速,为项目的移动端落地起到了决定性的作用。

原文发布于微信公众号 - 机器之心(almosthuman2014)

原文发表时间:2018-11-04

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏PPV课数据科学社区

【学习】数据模型需要多少训练数据?

有奖转发活动 回复“抽奖”参与《2015年数据分析/数据挖掘工具大调查》有奖活动。 【编者的话】毫无疑问机器学习是大数据分析不可或缺的一部分,在使用机器学习技术...

3686
来自专栏机器之心

观点 | AutoML、AutoKeras......这四个「Auto」的自动机器学习方法你分得清吗?

让我们先来看一个简短的童话故事… 从前,有一个魔法师,他使用一种无人再使用的编程语言,在一种无人再使用的框架下训练模型。一天,一位老人找到他,让他为一个神秘的...

1354
来自专栏AI科技大本营的专栏

如何瞬间找到视频中的目标片段?这篇顶级论文帮你详解CDC网络如何实现视频的精准定位

作者|周翔 上个月 22 日,备受瞩目的 CVPR 2017 最佳论文在夏威夷会议中心揭晓。本届 CVPR 2017 共有两篇最佳论文(分别被康奈尔和清华团队...

3915
来自专栏机器之心

学界 | 有趣的研究奥巴马Net:从文本合成真实的唇语口型

36212
来自专栏AI研习社

智能手机哪家强?实时人像分割大比拼!

近年来,各种图像效果越来越受到人们的关注。散景一个很受欢迎的例子是在图像的非聚焦范围进行虚化。这个效果由快速镜头大光圈实现。不幸的是,手机摄像头很难实现这种效果...

1392
来自专栏人工智能

如何提高深度学习的性能

您可以使用这20个提示,技巧和技术来解决过度拟合问题并获得更好的通用性

6487
来自专栏UDNZ

后端视角的高性能、高可用设计概要

应用开发,不只是实现什么功能,完成什么算法,使用了什么技术就好的,还应当有产品级的意识。理论落地到实际使用,转化为生产力才有意义。作为产品,首先是可用。不可用的...

2115
来自专栏信数据得永生

《Scikit-Learn与TensorFlow机器学习实用指南》 第1章 机器学习概览

46410

何时使用线性回归,聚类或决策树

决策树,聚类和线性回归算法之间的差异已经在很多文章中得到了说明(比如这个和这个)。但是, 在哪里使用这些算法并不总是很清楚。通过这篇博文,我将解释在哪里可以使用...

2848
来自专栏小小挖掘机

推荐系统遇上深度学习(十一)--神经协同过滤NCF原理及实战

好久没更新该系列了,最近看到了一篇关于神经协同过滤的论文,感觉还不错,跟大家分享下。

4594

扫码关注云+社区