opencv打开pb_【OpenCV】OpenCV4调用tensorflow pb模型进行目标检测
先在visual studio 2015新建一个工程并配置好环境。
OpenCV调用tensorflow的pb模型,不仅需要一个.pb文件,还需要一个.pbtxt文件。
一些预训练好的pb模型的下载地址,在opencv_extra里有一些生成好的pbtxt文件。注意pb文件和pbtxt文件要对应,否则后面调用会出错。
如果没有pb文件对应的pbtxt文件,则在opencv里提供了tf_text_graph_faster_rcnn.py,tf_text_graph_mask_rcnn.py,tf_text_graph_ssd.py三个脚本来生成对应网络结构的pbtxt文件。用这个脚本生成pbtxt文件不仅要输入pb文件,还需要输入.config文件,这里有一些config文件。
使用方式如下:
python tf_text_graph_ssd.py \
--input /path/to/xxx.pb \
--config /path/to/xxx.config \
--output /path/to/xxx.pbtxt
准备就绪之后,可以开始写OpenCV的代码了。这里有几个关键点。
OpenCV的dnn模块提供了readNetFromTensorflow来读取tensorflow的pb模型,当然还有readNetFromDarknet,readNetFromCaffe,readNetFromTorch等等。这里就只关注tensorflow了。
dnn::Net net = dnn::readNetFromTensorflow(pbFile, pbTxt);
vectorouts;
vectoroutNames = net.getUnconnectedOutLayersNames();
Mat inputBlob = dnn::blobFromImage(cropImg, 1.0, Size(cropWidth, cropHeight), Scalar(), false, false);
net.setInput(inputBlob);
net.forward(outs, outNames);
其中, pbFile就是pb模型的路径,pbTxt就是pbtxt文件的路径。dnn::blobFromImage的1.0 / 255将数据归一化到0~1。
forward输出的outs是一个1 x 1 x N x 7的矩阵,N是预测结果的数量,可能很多,还需要进行后处理。
float* data = (float*)outs[0].data;
for (int i = 0; i < outs[0].total(); i += 7)
{
float confidence = data[i + 2];
if (confidence > confidenceTH)
{
int left = (int)(data[i + 3] * img.cols);
int top = (int)(data[i + 4] * img.rows);
int right = (int)(data[i + 5] * img.cols);
int bottom = (int)(data[i + 6] * img.rows);
int width = right - left + 1;
int height = bottom - top + 1;
classIds.push_back((int)(data[i + 1])-1);
boxes.push_back(Rect(left, top, width, height));
confidences.push_back(confidence);
}
}
因为是要进行目标检测,所以这里将结果转换成了boundingbox的形式,并且将confidence低于阈值的去掉。
接下来进行非极大值抑制,将重合度高的boundingbox去掉。
vectorindices;
dnn::NMSBoxes(boxes, confidences, confidenceTH, nmsTH, indices);
预测已经完成,将结果画出来。
rectangle(img, Point(left, top), Point(right, bottom), Scalar(0, 255, 0));
下载的很多模型效果都不是很好,精度很低。用脚本生成的pbtxt有时候不能使用。
最后成功的是在ssd_mobilenet_v1_coco_11_06_2017下载的,pbtxt文件用的是现成的ssd_mobilenet_v1_coco.pbtxt。有空了再试试其他的模型。
opencv打开pb_【OpenCV】OpenCV4调用tensorflow pb模型进行目标检测相关推荐
- OpenCvSharp (C# OpenCV) DNN模块加载自己训练的TensorFlow模型做目标检测(含手势识别、骰子识别、菜品识别)(附源码)
本文作者Color Space,文章未经作者允许禁止转载! 本文将介绍OpenCVSharp DNN模块加载自己训练的TensorFlow模型做目标检测(含手势识别.骰子识别.菜品识别)! 前言: 下 ...
- 查看tensorflow pb模型文件的节点信息
查看tensorflow pb模型文件的节点信息: import tensorflow as tf with tf.Session() as sess:with open('./quantized_m ...
- tensorflow精进之路(二十五)——Object Detection API目标检测(下)(VOC数据集训练自己的模型进行目标检测)
1.概述 上一讲,我们使用了别人根据COCO数据集训练好的模型来做目标检测,这一讲,我们就来训练自己的模型. 2.下载数据集 为了方便学习,我们先使用别人整理好的数据集来训练---VOC 2012数据 ...
- Tensorflow pb模型转uff模型方法及遇到KeyError20和expected Const问题解决
项目所需要将Tensorflow 生成的pb模型转为uff模型,方法很简单,但是遇到的问题着实很多,这里主要记录下问题及解决方法,总之,最后是成功生成uff格式的模型的,有需要的可以参考. pb模型转 ...
- pytorch .pth模型转tensorflow .pb模型
训练好的pytorch模型如何转化为tensorflow的pb模型? 本人初步使用的是onnx框架: pytorch ---> onnx ----> tensorflow 使用onnx转 ...
- TensorFlow pb模型修改和优化
TensorFlow 模型训练完成后,通常会通过frozen过程保存一个最终的pb模型.保存的pb模型是以GraphDef数据结构保存的,可以序列化保存为二进制pb模型或者文本pbtxt模型.Grap ...
- 使用tensorflow object_detection API完成目标检测(object_detection API使用)
硬件环境 操作系统:ubuntu16.04LTS 显卡:GTX1080Ti 10G显存 内存32G 代码托管在码云,因为github实在是太慢了,老是timeout,翻墙也不行,搞了半天搞不定,突然看 ...
- python怎么实现打开摄像头_python开启摄像头以及深度学习实现目标检测方法
最近想做实时目标检测,需要用到python开启摄像头,我手上只有两个uvc免驱的摄像头,性能一般.利用python开启摄像头费了一番功夫,主要原因是我的摄像头都不能用cv2的VideCapture打开 ...
- [深度学习]C++调用Python-YOLO模型进行目标检测
文章目录: 前言 C++调用Python的步骤 修改YOLOv5源码 C++读取Python返回值 前言 目前深度学习算法大多数是基于Python实现,但一些项目的框架是用C++搭建,所以 ...
最新文章
- MIT自然语言处理第二讲:单词计数(第一、二部分)
- Cachefiled
- 保驾护航金三银四,使用指南
- Hibernate知识问答
- SUSE上搭建Hadoop环境(单机模式+伪分布模式)
- linux 更新cuda 驱动程序,记:第一次更新服务器CUDA和GPU驱动
- java使用水晶报表,java水晶报表实例教程
- 解读SPSS多元方差分析中的多因素多变量的相互影响
- OpenGL 高质量纹理过滤的实例
- python中文分词器(jieba类库)
- html树状图怎么搜索节点,echarts2.* tree树形图节点点击事件和节点点击图标更改...
- 四.电影/综艺网站(包含搜索经验, 我的经验, 必看) 彻底帮你解决看电影/综艺的问题
- 西安长安茶馆/金领女子书院环境怎么样?路线怎么走?
- 大学生创新创业万学答案
- 化工厂人员定位详细解决方案
- GT30L32S4W中文字库芯片+墨水屏显示调好程序分享
- 算法时代必读——《算法霸权》数学杀伤性武器的威胁
- centos安装特定版本docker 和 docker-compose 以及防火墙的基本操作
- 关于单片机替代PLC的思考
- 关于Wechat 的充值
热门文章
- 可编程DDC控制器的实现 (1)
- php sqlite3菜鸟,SQLite 创建数据库 | 菜鸟教程
- perl-Git-1.8.3.1-14.el7_5.noarch 是 perl-Git-1.8.3.1-13.el7.noarch 的副本 perl-Git-1.8.3.1-14.el7_5.noar
- Android P内联优化导致的一个诡异Bug
- 数据到手了,第一件事先干啥?| 说人话的统计学
- 大数据的Lambda架构
- 微信第三方平台授权(第三方)
- 学会扒源码-HashMap
- 1905协议详解(四)数据帧分析总览
- idea中出现紫色_紫色测试和安全性实验中的混乱工程