使用Tensorflow Object Detection API实现对象检测

一:预训练模型介绍

Tensorflow Object Detection API自从发布以来,其提供预训练模型也是不断更新发布,功能越来越强大,对常见的物体几乎都可以做到实时准确的检测,对应用场景相对简单的视频分析与对象检测提供了极大的方便与更多的技术方案选择。tensorflow object detection提供的预训练模型都是基于以下三个数据集训练生成,它们是:

  • COCO数据集
  • Kitti数据集
  • Open Images数据集

每个预训练模型都是以tar文件形式存在,其中包括以下几个部分:

  • 图协议graph.pbtxt
  • 检查点(checkpoint)文件(odel.ckpt.data-00000-of-00001, model.ckpt.index, model.ckpt.meta)
  • 冻结图协议包含作为常量的权重数据
  • 一个config的配置文件

基于COCO数据集训练的模型名称、运行速度、mAP指标及输出列表如下:

二:使用模型实现对象检测

这里我们使用ssd_mobilenet模型,基于COCO数据集训练生成的,支持90个分类物体对象检测,首先需要读取模型文件,代码如下

tar_file = tarfile.open(MODEL_FILE)
for file in tar_file.getmembers():
  file_name = os.path.basename(file.name)
  if 'frozen_inference_graph.pb' in file_name:
    tar_file.extract(file, os.getcwd())

然后加载模型完成计算图构建

detection_graph = tf.Graph()
with detection_graph.as_default():
  od_graph_def = tf.GraphDef()
  with tf.gfile.GFile(PATH_TO_CKPT, 'rb') as fid:
    serialized_graph = fid.read()
    od_graph_def.ParseFromString(serialized_graph)
    tf.import_graph_def(od_graph_def, name='')

最后通过session来执行计算图并输入适当的参数即可

# image_np == [1, None, None, 3]
image_np_expanded = np.expand_dims(image_np, axis=0)
image_tensor = detection_graph.get_tensor_by_name('image_tensor:0')
boxes = detection_graph.get_tensor_by_name('detection_boxes:0')
scores = detection_graph.get_tensor_by_name('detection_scores:0')
classes = detection_graph.get_tensor_by_name('detection_classes:0')
num_detections = detection_graph.get_tensor_by_name('num_detections:0')
# Actual detection.
(boxes, scores, classes, num_detections) = sess.run(
  [boxes, scores, classes, num_detections],
  feed_dict={image_tensor: image_np_expanded})

最终检测效果 - 检测人与书

检测我的苹果电脑与喝水玻璃杯

原文发布于微信公众号 - OpenCV学堂(CVSCHOOL)

原文发表时间:2018-05-08

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏杨熹的专栏

了解 Sklearn 的数据集

学习资料:大家可以去莫烦的学习网站学到更多的知识。 学习资料: 相关代码 更多可用数据 网址 ---- ? 今天来看 Sklearn 中的 data s...

3418
来自专栏大数据挖掘DT机器学习

解析Tensorflow官方PTB模型的demo

RNN 模型作为一个可以学习时间序列的模型被认为是深度学习中比较重要的一类模型。在Tensorflow的官方教程中,有两个与之相关的模型被实现出来。第一个模型...

4008
来自专栏机器之心

资源 | 微软发布可变形卷积网络代码:可用于多种复杂视觉任务

选自Github 机器之心编译 编辑:吴攀 上个月,微软代季峰等研究者发布的一篇论文提出了一种可变形卷积网络,该研究「引入了两种新的模块来提高卷积神经网络(CN...

3496
来自专栏北京马哥教育

20行 Python 代码实现验证码识别

一、探讨 识别图形验证码可以说是做爬虫的必修课,涉及到计算机图形学,机器学习,机器视觉,人工智能等等高深领域…… 简单地说,计算机图形学的主要研究内容就是研究如...

5738
来自专栏专知

【前沿】见人识面,TensorFlow实现人脸性别/年龄识别

【导读】近期,浙江大学学生Boyuan Jiang使用TensorFlow实现了一个人脸年龄和性别识别的工具,首先使用dlib来检测和对齐图片中的人脸,然后使用...

1.4K6
来自专栏专知

【资源】Python实现多种模型(Naive Bayes, SVM, CNN, LSTM, etc)用于推文情感分析

【导读】近日,Abdul Fatir 在自己的CS5228课程报告使用不同的方法进行Tweets情感分析(作为二分类问题),并对这些方法的性能进行比较,主要是基...

44410
来自专栏机器之心

心中无码:这是一个能自动脑补漫画空缺部分的AI项目

本文将简要介绍这项研究与 DeepCreamPy 实现项目,读者可下载项目代码或预构建的二进制文件,并尝试修复漫画图像或马赛克。这一个项目可以直接使用 CPU ...

1003
来自专栏FreeBuf

AI安全初探:利用深度学习检测DNS隐蔽通道

DNS 隐蔽通道简介 DNS 通道是隐蔽通道的一种,通过将其他协议封装在DNS协议中进行数据传输。 由于大部分防火墙和入侵检测设备很少会过滤DNS流量,这就给D...

3025
来自专栏机器之心

GPU捉襟见肘还想训练大批量模型?谁说不可以

2018 年的大部分时间我都在试图训练神经网络时克服 GPU 极限。无论是在含有 1.5 亿个参数的语言模型(如 OpenAI 的大型生成预训练 Transfo...

3253
来自专栏新智元

手把手教你用OpenCV和Python实现图像和视频神经风格迁移(代码)

2015年,Gatsys等人在论文A Neural Algorithm of Artistic Style中提出了最初的神经风格迁移算法。2016年,Johns...

3472

扫码关注云+社区