TensorFlow 检测模型的转换和使用 OpenCV Python 启动

本文介绍了如何使用OpenCVAPI将TensorFlow模型转换为cv.dnn.Net,包括获取冻结图、提取模型、以及使用TFSSDMobileNetV1实例进行模型推理的过程。作者详细展示了从模型准备到实际应用的步骤,包括配置和参数调整。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

介绍

让我们简要回顾一下使用 OpenCV API 进行 TensorFlow 模型转换的管道中涉及的关键概念。将 TensorFlow 模型转换为 cv.dnn.Net 的第一步是获取冻结的 TF 模型图。冻结图定义了模型图结构与所需变量(例如权重)的保留值的组合。冻结的图形保存在 protobuf () 文件中。OpenCV 中有用于读取图形的特殊函数:cv.dnn.readNetFromTensorflow 和 cv.dnn.readNet.pb.pb

要求

为了能够试验以下代码,您需要安装一组库。为此,我们将使用 python3.7+ 的虚拟环境:

virtualenv -p /usr/bin/python3.7 <env_dir_path>
源<env_dir_path>/bin/activate

对于从源代码构建 OpenCV-Python,请遵循 OpenCV 简介中的相应说明。

在开始安装库之前,可以自定义要求 .txt,排除或包含(例如)某些依赖项。以下行将需求安装启动到先前激活的虚拟环境中:opencv-python

pip 安装 -r 要求.txt

实践

在这一部分中,我们将介绍以下几点:

  1. 创建 TF 分类模型转换管道并提供推理
  2. 提供推理、过程预测结果

模型准备

本子章中的代码位于模块中,可以使用以下行执行:samples/dnn/dnn_model_runner

python -m dnn_model_runner.dnn_conversion.tf.detection.py_to_py_ssd_mobilenet

以下代码包含 TF SSD MobileNetV1 模型检索的步骤:

tf_model_name = 'ssd_mobilenet_v1_coco_2017_11_17'
graph_extraction_dir = “./”
frozen_graph_path = extract_tf_frozen_graph(tf_model_name,graph_extraction_dir)
print(“{}: {}”.format(tf_model_name, frozen_graph_path))

在函数中,我们提取模型存档中提供的用于进一步处理:extract_tf_frozen_graphfrozen_inference_graph.pb

# 定义模型归档文件名称
tf_model_tar = model_name + '.tar.gz'
# 定义用于检索模型存档的链接
model_link = DETECTION_MODELS_URL + tf_model_tar
tf_frozen_graph_name = 'frozen_inference_graph'
尝试:
urllib.request.urlretrieve(model_link, tf_model_tar)
例外情况除外:
print(“TF {} 未检索到: {}”.format(model_name, model_link))
返回
print(“TF {} 被检索到。格式(model_name))
tf_model_tar = tarfile.open(tf_model_tar)
frozen_graph_path = “”
对于 tf_model_tar.getmembers() 中的model_tar_elem:
如果tf_frozen_graph_name os.path.basename(model_tar_elem.name):
tf_model_tar.extract(model_tar_elem, extracted_model_path)
frozen_graph_path = os.path.join(extracted_model_path, model_tar_elem.name)
tf_model_tar.关闭()

成功执行上述代码后,我们将得到以下输出:

检索到TF ssd_mobilenet_v1_coco_2017_11_17。
ssd_mobilenet_v1_coco_2017_11_17冻结的图形路径:./ssd_mobilenet_v1_coco_2017_11_17/frozen_inference_graph.pb

为了提供模型推断,我们将使用以下双层巴士照片(在 Pexels 许可下):

pexels_double_decker_bus.jpg

双层巴士

要启动测试过程,我们需要提供适当的模型配置。我们将使用 TensorFlow 对象检测 API 中的 ssd_mobilenet_v1_coco.config。TensorFlow 对象检测 API 框架包含用于对象检测模型操作的有用机制。

我们将使用此配置来提供文本图表示形式。为了生成,我们将使用相应的 samples/dnn/tf_text_graph_ssd.py 脚本:.pbtxt

python tf_text_graph_ssd.py --input ssd_mobilenet_v1_coco_2017_11_17/frozen_inference_graph.pb --config ssd_mobilenet_v1_coco_2017_11_17/ssd_mobilenet_v1_coco.config --output ssd_mobilenet_v1_coco_2017_11_17.pbtxt

成功执行后将创建。ssd_mobilenet_v1_coco_2017_11_17.pbtxt

在运行之前,我们先来看看 SSD MobileNetV1 测试进程配置的默认值。它们位于 models.yml 中:object_detection.py

ssd_tf:
型号: “ssd_mobilenet_v1_coco_2017_11_17.pb”
配置:“ssd_mobilenet_v1_coco_2017_11_17.pbtxt”
平均值:[0, 0, 0]
比例:1.0
宽度: 300
高度: 300
RGB:真
类:“object_detection_classes_coco.txt”
示例:“object_detection”

要获取这些值,我们需要提供冻结的图形模型和文本图形:ssd_mobilenet_v1_coco_2017_11_17.pbssd_mobilenet_v1_coco_2017_11_17.pbtxt

python object_detection.py ssd_tf --input ../数据/pexels_double_decker_bus.jpg

此行等效于:

python object_detection.py --model ssd_mobilenet_v1_coco_2017_11_17.pb --config ssd_mobilenet_v1_coco_2017_11_17.pbtxt --input ../data/pexels_double_decker_bus.jpg --width 300 --height 300 --classes ../数据/dnn/object_detection_classes_coco.txt

结果是:

opencv_bus_res.jpg

OpenCV SSD 总线结果

有几个有用的参数,也可以为结果校正自定义:阈值 () 和非最大抑制 () 值。--thr--nms

   在线教程

有需要的小伙伴,可以点击下方链接免费领取或者V扫描下方二维码免费领取🆓

请添加图片描述

人工智能书籍

第一阶段:零基础入门(3-6个月)

新手应首先通过少而精的学习,看到全景图,建立大局观。 通过完成小实验,建立信心,才能避免“从入门到放弃”的尴尬。因此,第一阶段只推荐4本最必要的书(而且这些书到了第二、三阶段也能继续用),入门以后,在后续学习中再“哪里不会补哪里”即可。

第二阶段:基础进阶(3-6个月)

熟读《机器学习算法的数学解析与Python实现》并动手实践后,你已经对机器学习有了基本的了解,不再是小白了。这时可以开始触类旁通,学习热门技术,加强实践水平。在深入学习的同时,也可以探索自己感兴趣的方向,为求职面试打好基础。

第三阶段:工作应用

这一阶段你已经不再需要引导,只需要一些推荐书目。如果你从入门时就确认了未来的工作方向,可以在第二阶段就提前阅读相关入门书籍(对应“商业落地五大方向”中的前两本),然后再“哪里不会补哪里”。

 有需要的小伙伴,可以点击下方链接免费领取或者V扫描下方二维码免费领取🆓

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值