0. 网络冻结概念:
神经网络模型中存在大量的权重,这些参数在模型训练的过程中通过反向传播来不断更新,所参数使用的是变量。 冻结网络就是将这些变量转换为常量。
Tensorflow的Checkpoint或者SavedModels格式均采用多文件的方式存储,包含了对推理无用的冗余信息。而我们推理时希望模型尽可能的简单。所以就希望冻结(freeze)模型。
Tensorflow提供了冻结脚本。可以把模型转换为冻结网络。
tensorflow/freeze_graph.py at master · tensorflow/tensorflow · GitHub
python3 freeze_graph.py --input_graph=some_graph_def.pb \
--input_checkpoint=model.ckpt-8361242 \
--output_graph=/tmp/frozen_graph.pb \
--output_node_names=softmax
Tensorflow训练的模型可以保存为ckpt格式或SaveModel。其中SaveModel与语言无关。
SavedModel时,将创建一个SavedModel目录,由assets目录,variables目录,saved_model.pb组成。
assets: 用于存放无侧室的辅助信息。
variables:存放变量信息。
saved_model.pb: 存放MaeGraphDef.
在Tensorflow2中,网咯冻结被弃用。但网络冻结的原理依然存在。
在OpenCV3中,加入了DNN模块,实现了一些基本的神经网络Layer。 之后又加入readNetFrom....()来加载模型。 但OpenCV不支持Tensorflow所推荐的SavedModel. 所以若要使用OpenCV DNN加载和推理,则模型首先要Freeze.
本文介绍了Tensorflow中的网络冻结过程,即将训练好的模型转换为静态图以优化推理性能。Tensorflow提供freeze_graph.py脚本来实现这一操作。尽管在Tensorflow2中该功能被弃用,但其原理仍然适用。此外,由于OpenCV的DNN模块不支持Tensorflow的SavedModel格式,因此在使用OpenCV进行模型推理前,需要先冻结模型。

3669

被折叠的 条评论
为什么被折叠?



