keras xception速度优化报告

目录

一、背景介绍

二、keras转tensorflow后,再用tensorflow tool:graph_transforms优化

2.1 keras转tensorflow

2.2 tensorflow tool:graph_transforms使用步骤

2.3 转换和压缩前后模型速度结果对比

三、Pocketflow

3.1 背景介绍

3.2 学习模块

3.3 超参数优化模块

3.4 性能

3.5 结论

四、keras压缩工具

4.1 压缩keras模型的工具

4.2 结论


 

一、背景介绍

待优化模型介绍:xception,keras模型,200ms左右

目标:优化速度

 

尝试了如下三种方法进行优化:

(1)针对tensorflow框架的pocketflow

(2)keras-compress工具

(3)tensorflow工具:graph_transforms

经过实验和对比,最终采用第3种方法:tensorflow工具graph_transforms进行速度优化。

接下来3个章节,先介绍最终采用的第三种方法的介绍和结果;最后,再介绍一下另外两种方法,尤其是pocketflow,对于tensorflow的压缩优化功能很强大,可作为之后模型优化的备选方案。

 

二、keras转tensorflow后,再用tensorflow tool:graph_transforms优化

2.1 keras转tensorflow

(1)转换代码:https://github.com/amir-abdi/keras_to_tensorflow

(2)转换方法:

python keras_to_tensorflow.py --input_model="path/to/keras/model.h5" --output_model="path/to/save/model.pb"

 

2.2 tensorflow tool:graph_transforms使用步骤

(1)安装bazel

官网安装指南:

https://docs.bazel.build/versions/master/install-ubuntu.html#install-with-installer-ubuntu

发布版本:

https://github.com/bazelbuild/bazel/releases

 

安装步骤:

sudo apt-get install pkg-config zip g++ zlib1g-dev unzip python

wget https://github.com/bazelbuild/bazel/releases/download/0.21.0/bazel-0.21.0-installer-linux-x86_64.sh

sudo chmod +x bazel-0.21.0-installer-linux-x86_64.sh

export PATH="$PATH:$HOME/bin"

注意:一定要安装最新版本的bazel,否则在编译代码时可能会报错

 

(2)编译tensorflow最新代码

git clone https://github.com/tensorflow/tensorflow.git

cd ./tensorflow

编译graph_transforms模块,需要等待一段时间,编译很耗费CPU资源和时间

bazel build tensorflow/tools/graph_transforms:transform_graph

 

(3)速度优化主要采用github官方资源的“Optimizing for Deployment”部分

https://github.com/tensorflow/tensorflow/tree/master/tensorflow/tools/graph_transforms

 

2.3 转换和压缩前后模型速度结果对比

如下是测试了1000张图片的平均速度:

序号

模型

平均速度

速度相对keras模型提升

说明

1

Xception_keras

180ms

 

原xcpeion的keras模型

2

Xception_tf

120ms

33%

keras转tensorflow

3

Xception_tfc

110ms

40%

tensorflow进行bn合并,去除无用点,无用op

测试结论:

(1)Keras-tensorflow:可加速。

(2)量化:不仅不加速,还降低速度。

(3)BN合并,去掉没用到的节点,去除一些无用的op:可加速。

(4)最终keras-tensorflow,再进行BN合并以及去除无用部分后,可加速40%。

 

三、Pocketflow

官方文档地址:https://pocketflow.github.io/

 

3.1 背景介绍

针对tensorflow的模型压缩和优化框架。由两部分组成:学习模块和超参数优化模块。初始模型,经过学习模块后,使用一些随机选择的超参数来产生候选的压缩模型。候选模型的精度和计算效率作为超参数优化模块的输入,来决定下一次学习模块的超参数选择。经过多次上述迭代,最优的候选模型作为最终输出的压缩模型。

 

3.2 学习模块

学习模块是指一些模型压缩方法。pocketflow目前支持的模型压缩算法如下:

压缩方法

描述

通道剪枝(2种)

2017/2018

权重稀疏

2018

权重量化(3种)

2018/TF/2016

网络蒸馏

为进一步降低精度损失,将压缩前模型的输出作为参考,来指导压缩模型的训练。

多GPU训练

加快训练速度

剪枝、权重稀疏和量化,通过剪枝mask或者量化函数实现。生成的模型可以通过小数据集进行部分迭代即可快速finetune。也可以通过完整的训练集进行finetune,这样精度更高,但耗时更长。

 

3.3 超参数优化模块

压缩算法的超参数很难人工设定,尤其是对于不熟悉算法细节的开发者。Pocketflow介绍一种迭代获取最优超参数的方法。首先提供一些基于GP/TPE/DDPG等模型的超参数优化器,然后通过迭代的方式进行超参数优化。

每一个迭代:

    超参数优化模块选择一些超参数的组合

    学习模块通过快速tune的方式产生一个候选的压缩模型

    候选模型被用来评估当前超参数的选择,超参数模块更新模型,产生更好的超参数

多个迭代后,选出最优模型。

这个模型可以通过使用全部的训练数据训练,从而降低损失。

 

3.4 性能

列举了剪枝和权重稀疏前后的精度对比,没有说速度。

如下是权重量化的对比结果:

看小模型mobilenet表现,8bit量化前后,精度不仅无损失还有所提高;同时速度提升2倍多。

 

3.5 结论

以后针对tensorflow模型的优化,可以对比tensorlfow的trans_graph工具以及pocket_flow。

 

四、keras压缩工具

4.1 压缩keras模型的工具

https://github.com/DwangoMediaVillage/keras_compressor

压缩后,模型大小减少,但是模型速度没有提升。

 

4.2 结论

如果以后涉及到keras模型压缩,如果只考虑模型大小的减少,可以看下该工具的压缩效果。

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值