C++ 版本的 Opencv 调用 TensorFlow object detection API 训练的模型(训练调用全过程)

最近做的一个项目需要在c++程序中调用目标检测模型,但是在使用opencv调用模型时总是遇到各种各样的错误,一直没有成功。最近终于打通了这一过程,总结如下(本文以SSD_MobileNet模型为例)。

运行环境
opencv >= 3.4.4,
Visual Studio 2015,
训练环境参考本文引用的其他文章。

1. opencv 调用训练好的目标检测模型

具体调用代码参考 opencv dnn模块 示例(5) 目标检测 object_detection (4) TensorFlow SSD,代码中调用的两个模型文件分别来自 ssd_mobilenet_v1_coco_2017_11_17.pb,ssd_mobilenet_v1_coco_2017_11_17.pbtxt。文件 object_detection_classes_coco.txt 可以在 opencv 安装目录下的 \sources\samples\data\dnn 目录中找到。

2. 使用自己的数据在 TensorFlow object detection API 中训练模型

详细的训练过程参考 naisy/train_ssd_mobilenet,该文是在 API 的 Branch r1.5 上实现的,安装 API 可以参考这篇文章Ubuntu 16.04 安装Tensorflow Object Detection API (一)。

在训练完成后可以得到./output/frozen_inference_graph.pb 模型文件。

3. 生成 .pbtxt 模型文件

参考官方wiki Generate a config file,需要下载 tf_text_graph_ssd.py 和 tf_text_graph_common.py 两个文件,–input 的参数是你训练得到的 frozen_inference_graph.pb 模型文件,–config 的参数是你训练模型时使用的那个 .config 文件。

至此,得到的 .pb 和 .pbtxt 文件可以应用到第一节的代码中了,最后将训练模型时的 label_map.pbtxt 文件按照 object_detection_classes_coco.txt 的格式修改一份,就可以成功运行了。

你可能感兴趣的:(opencv)