Tensorflow 网络冻结

本文介绍了Tensorflow中的网络冻结过程,即将训练好的模型转换为静态图以优化推理性能。Tensorflow提供freeze_graph.py脚本来实现这一操作。尽管在Tensorflow2中该功能被弃用,但其原理仍然适用。此外,由于OpenCV的DNN模块不支持Tensorflow的SavedModel格式,因此在使用OpenCV进行模型推理前,需要先冻结模型。

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.

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值