Bazel压缩神经网络模型
一、用二进制安装程序安装安装Bazel
安装程序包含Bazel二进制文件1。还必须安装一些其他库才能使Bazel工作。
第1步:安装所需的包
首先,安装先决条件:pkg-config,zip,g++,zlib1g-dev,unzip,和python。
sudo apt-get install pkg-config zip g++ zlib1g-dev unzip python
第2步:下载Bazel
接下来,bazel--installer-linux-x86_64.sh 从GitHub上的Bazel发布页面下载Bazel二进制安装程序。我安装的是bazel-3.1.0-installer-linux-x86_64.sh(2020.5.13最新版本)
第3步:运行安装程序
按如下方式运行Bazel安装程序:
// 以下是统一写法
chmod +x bazel-<version>-installer-linux-x86_64.sh
./bazel-<version>-installer-linux-x86_64.sh --user
// 以下是对应版本的写法
chmod +x bazel-3.1.0-installer-linux-x86_64.sh
./bazel-3.1.0-installer-linux-x86_64.sh --user
该–user标志将Bazel安装到 H O M E / b i n 系 统 上 的 目 录 并 设 置 . b a z e l r c 路 径 HOME/bin系统上的目录并设置.bazelrc路径 HOME/bin系统上的目录并设置.bazelrc路径HOME/.bazelrc。使用该–help命令可以查看其他安装选项。
第4步:设置您的环境
如果您使用–user上面的标志运行Bazel安装程序,则Bazel可执行文件将安装在您的$HOME/bin目录中。将此目录添加到默认路径是个好主意,如下所示:
export PATH="$PATH:$HOME/bin"
您也可以将此命令添加到您的~/.bashrc文件中。
sudo gedit ~/.bashrc,最后一行加上
export PATH="$PATH:$HOME/bin"
然后使之生效:source ~/.bashrc
二、下载TensorFlow
git clone https://github.com/tensorflow/tensorflow.git
解压
unzip tensorflow-master.zip
进入tensorflow-master文件夹执行
bazel build tensorflow/tools/graph_transforms:transform_graph
此步可能会报一些模块找不到的错误,依次安装相应模块后重新编译即可。
bazel-bin/tensorflow/tools/graph_transforms/transform_graph \
--in_graph=/home/cynthia/Chen/Code/Downloads/model_regression/pb_model/model.pb \
--out_graph=/home/cynthia/Chen/Code/Downloads/model_regression/pb_model/model_optimized.pb \
--inputs='ImgInput' \
--outputs='ImgOutput' \
--transforms='fold_constants(ignore_errors=true) fold_batch_norms quantize_weights strip_unused_nodes sort_by_execution_order'
转换成功模型减小为原来的1/4.
上述转换操作的各个意思为:
-
remove_node : 该参数表示删除节点,后面的参数表示删除的节点类型,注意该操作有可能删除一些必须节点
-
fold_constans: 查找模型中始终为常量的表达式,并用常量替换他们。
-
fold_batch_norms: 训练过程中使用批量标准化时可以优化在Conv2D或者MatMul之后引入的Mul。需要在fold_cnstans之后使用。(fold_old_batch_norms和他的功能一样,主要是为了兼容老版本)
-
quantize_weights:将float型数据改为8位计算方式(默认对小于1024的张量不会使用),该方法是压缩模型的主要手段。
-
strip_unused_nodes:除去输入和输出之间不使用的节点,对于解决移动端内核溢出存在很大的作用。
-
merge_duplicate_nodes: 合并一些重复的节点
-
sort_by_execution_order: 对节点进行排序,保证给定点的节点输入始终在该节点之前。
更多模型加速及量化细节请参考:
TensorFlow C++ CPU 模型预测优化加速
TensorFlow Mobile模型压缩
tensorflow之模型压缩
基于OpenGL ES的深度学习框架编写
阿里开源!轻量级深度学习端侧推理引擎 MNN
更多推荐



所有评论(0)