facenet训练后模型使用tensorflow量化

1、使用facenent/src/freeze_graph.py将ckpt模型文件转化为pb模型文件,

需要注意的是,需要在这里面添加模型名称及scope,如下图所示,转化ResNeXt模型是需要添加ResNeXt:

2、使用bazel搭建tensorflow的quzntization工具,如下面命令所示;

$ cd ~/tensorflow/ (tensorflow的源码路径)

$ bazel build tensorflow/tools/quantization:quantize_graph

3、量化前需要修改/tensorflow/tensorflow/python/framework/graph_util_impl.py,由于“Identity”的原因有些层无法量化,使量化后的模型无法使用,需做如下图的修改:

facenet训练后模型使用tensorflow量化_第1张图片

3.1、if node.name == "input": \n continue解决了由于“Identity”不将input层量化的错误;

3.2、re.match(r".*/cond.*", input_name)能够结果下面的错误:

ValueError: graph_def is invalid at node 'InceptionResnetV1/Conv2d_1a_3x3/BatchNorm/cond/AssignMovingAvg/decay': More inputs specified ('InceptionResnetV1/Conv2d_1a_3x3/BatchNorm/cond/Switch:1') than the op expects.

4、量化指令:

bazel-bin/tensorflow/tools/quantization/quantize_graph \

--input=/tmp/classify_image_graph_def.pb \

--output_node_names="embeddings" \

--output=/tmp/quantized_graph.pb \

--mode=eightbit


参考文献:https://zhuanlan.zhihu.com/p/25323688

https://www.tensorflow.org/performance/quantization

你可能感兴趣的:(facenet训练后模型使用tensorflow量化)