风格迁移模型压缩 第三期
1 安装bazel
Bazel是google推出的一款工程编译工具,并且已经将其开源。
Bazel可以快速地构建可靠的代码,谷歌的大多数软件都是由它来构建,因此,在谷歌的开发环境里,它主要负责处理代码构建相关问题:大规模数据构建问题,共享代码库问题,从源代码构建的软件的相关问题。
Bazel支持多种语言并且跨平台,还支持自动化测试和部署、具有再现性(Reproducibility)和规模化等特征。Bazel在谷歌大规模软件开发实践能力方面起着至关重要的作用。简单来说,Bazel类似于make。
1.1 Ubuntu18.04
未安装JDK8
sudo add-apt-repository ppa:webupd8team/java
sudo apt-get update
sudo apt-get install oracle-java8-installer
已安装JDK8
echo "deb http://storage.googleapis.com/bazel-apt stable jdk1.8" | sudo tee /etc/apt/sources.list.d/bazel.list
curl https://storage.googleapis.com/bazel-apt/doc/apt-key.pub.gpg | sudo apt-key add -
sudo apt-get update
sudo apt-get install bazel
sudo apt-get upgrade bazel
1.2 CentOS
- Download the corresponding
.repo
file from Fedora COPR and copy it to/etc/yum.repos.d/
. - Run the following command:
yum install bazel
2 模型导出
模型导出使用export.py文件,只需修改其中模型的输出路径,并且根据自己的文件位置传入正确的参数即可,导出成功后,在设定的输出文件夹中可以得到pb格式的模型文件,其大小与原来ckpt.data文件相同。
python export.py --model_file models/your_model.ckpt --model_name your_model_name
3 模型量化
git clone https://github.com/tensorflow/tensorflow
cd tensorflow
sudo bazel build tensorflow/tools/graph_transforms:transform_graph
sudo bazel-bin/tensorflow/tools/graph_transforms/transform_graph --in_graph=/your/.pb/file --outputs="output_node_name" --out_graph=/the/quantized/.pb/file --transforms='quantize_weights'
4 模型调优
TotalVariation
Total Variation Regularization. To encourage spatial smoothness in the output image yy, we follow prior work on feature inversion [6,20] and super- resolution [48,49] and make use of total variation regularizer ℓTV(y)ℓTV(y).
在读杨培文的博文《风格迁移三部曲》时发现了其提到了一个TV Loss,说是为了平滑图像。它的计算方法很简单:
将图像水平和垂直平移一个像素,与原图相减,然后计算绝对值的和,就是Total Variation。本来是想自己实现一个tv_loss,然后改进现有的风格迁移算法,但在现有代码中搜索时发现,原作者已经实现好了tv_loss,只是在yml的配置文件中,给tv_loss设置的权重为0,即没有使用这项损失。由于不知道tv_loss该设为多少,打算通过多次实验试出最佳值。