tensorflow模型导出与OpenCVDNN中使用_第1页
tensorflow模型导出与OpenCVDNN中使用_第2页
tensorflow模型导出与OpenCVDNN中使用_第3页
tensorflow模型导出与OpenCVDNN中使用_第4页
tensorflow模型导出与OpenCVDNN中使用_第5页
免费预览已结束,剩余1页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、OpenCV DNN1 块Deep Neural Network - DNN 是OpenCV中的深度神经网络模块,支持基 于深度学习模块前馈网络运行、实现图像与视频场景中的?图像分类?对象检测?图像分割其模型导入与加载的相关API支持以下深度学习框架? tensorflow - readNetFromTensorflow? caffe - readNetFromCaffe? pytorch - readNetFromTorch? darknet - readNetFromDarknetOpenCV3.4.1以上版本支持tensorflow1.11版本以上的对象检测框架(object detet

2、ion) 模型导出使用,当前支持的模型包括以下:ModelVersionMobileNet-SSD v12017_11_17weightsconfigMobileNet-SSD v1 PPN2018_07_03weightsconfigMobileNet-SSD v22018_03_29weightsconfigInception-SSD v22017_11_17weightsconfigPaster-RCNN Inception v22018_01_28weightsconfigFaster-RCNN Res Net-502018_01_23weightsconfig也就是说通过 tenso

3、rflow object detection API框架进行迁移学习训练模型,导出预测图之后,可以通过OpenCV3.4.1以上版本提供几个python脚本导出graph配置文件,然后就可以在OpenCV DNN真块中使用tensorflow 相关的模型了。感觉十分方便,下面就按照操作走一波!使用t ensorf l ow模型OpenCV DNN 模块根据tensoflow中迁移学习或者下载预训练模型不同,提供如下可以使用脚本生成对应的模型配置文件tf_text_graph_ssd.pytf_text_graph_faster_rcnn.pytf_text_graph_mask_rcnn.py

4、这是因为,OpenCV DNNB要由g据text版本的模型描述文件来解析 tensorflow 的pb文件,实现网络模型加载。对SSD对象检测模型,生成模型描述文件运行以下命令行即可(在一行执行):python tf_text_graph_ssd.py-input /path/to/model.pb-config /path/to/example.config-output /path/to/graph.pbtxt以MobileNet-SSD v2 版本为例,首先下载该模型,解压缩以后会发现里面有一个 frozen_inference_graph.pb 文件,使用 tensorflow力口载预

5、测图进行预测的代码如下:import tensorflow as tfimport cv2 as cv# Read the graph.model_dir = 'D:/tensorflow/ssd_mobilenet_v2_coco_2018_03_29/frozen_inference_g raph.pb'with tf.gfile.FastGFile(model_dir, 'rb') as f:graph_def = tf.GraphDef()graph_def.ParseFromString(f.read()with tf.Session() as ses

6、s:# Restore sessionsess.graph.as_default()tf.import_graph_def(graph_def, name='')# Read and preprocess an image.img = cv.imread('D:/images/objects.jpg')rows = img.shape0cols = img.shape1inp = cv.resize(img, (300, 300)inp = inp:, :, 2, 1,0 # BGR2RGB# Run the modelout = sess.run(sess.g

7、raph.get_tensor_by_name('num_detections:0'), sess.graph.get_tensor_by_name('detection_scores:0'), sess.graph.get_tensor_by_name('detection_boxes:0'),sess.graph.get_tensor_by_name('detection_classes:0'), feed_dict='image_tensor:0': inp.reshape(1, inp.shape0, in

8、p.shape1, 3)# Visualize detected bounding boxes.num_detections = int(out00)for i in range(num_detections):classId = int(out30i)score = float(out10i)bbox = float(v) for v in out20iif score > 0.3:x = bbox1 * colsy = bbox0 * rowsright = bbox3 * colsbottom = bbox2 * rowscv.rectangle(img, (int(x), int

9、(y), (int(right), int(bottom), (125, 255, 51), thick ness=2) cv.imshow('TensorFlow MobileNet-SSD', img) cv.waitKey()运行结果如下:基于 frozen_inference_graph.pb 生成 graph.pbtxt模型酉己置文件,命令行运行截图如下:使用 OpenCV DNN®块力口载 tensorflow 模型(frozen_inference_graph.pb与graph.pbtxt),实现预测图使用的代码如下(注意此时不需要依赖tensorflo

10、w)import cv2 as cvmodel_path = 'D:/tensorflow/ssd_mobilenet_v2_coco_2018_03_29/frozenJnference_ graph.pb'config_path = 'D:/tensorflow/ssd_mobilenet_v2_coco_2018_03_29/graph.pbtxt'net = cv.dnn.readNetFromTensorflow(model_path, config_path)frame = cv.imread('D:/images/objects.jpg&#

11、39;)rows = frame.shape0cols = frame.shape1net.setInput(cv.dnn.blobFromImage(frame, size=(300, 300), swapRB=True, crop=Fal se)cvOut = net.forward()print(cvOut)for detection in cvOut0,0,:,:score = float(detection2)if score > 0.3:left = detection3 * colstop = detection4 * rowsright = detection5 * co

12、lsbottom = detection6 * rowscv.rectangle(frame, (int(left), int(top), (int(right), int(bottom), (23, 230, 210), thickness=2)cv.imshow('opencv-dnn-ssd-detect', frame)cv.waitKey()运行结果如下(跟tensorflow中的运行结果完全一致,OpenCV DNNM然靠谱):OpenCV DNN行人检测本人尝试了基于 tensoflow object detection API使用 MobileNet-SSDv2

13、迁移学习实现自定义数据集训练,导出预测图之后,使用 OpenCV DNN 模块的python脚本生成对象的图配置文件 graph.pbtxt ,通过 OpenCVto 载模型使用,实时预测,最后上一张运行结果图:OpenCV DNNM用代码如下 import cv2 as cv inference_pb = "D:/pedestrian_data/export_pb/frozen_inference_graph.pb" graph_text = "D:/pedestrian_data/export_pb/graph.pbtxt"# load tensor

14、flow modelnet = cv.dnn.readNetFromTensoflow(inference_pb, graph_text) image = cv.imread("D:/python/Pedestrian-Detection/test_images/3600.jpg")h = image.shape0w = image.shape1# 获得所有层名称与索引layerNames = net.getLayerNames()lastLayerld = net.getLayerId(layerNames-1)lastLayer = net.getLayer(lastL

15、ayerId)print(lastLayer.type)# 检测net.setInput(cv.dnn.blobFromImage(image, size=(300, 300), swapRB=True, crop=Fal se)cvOut = net.forward()for detection in cvOut0,0,:,:score = float(detection2)if score > 0.5:left = detection3*wtop = detection4*hright = detection5*wbottom = detection6*h#绘制cv.rectangle(image, (int(left), int(top), (int(right), int(bottom), (0, 255, 0), thic

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论