专栏首页贾志刚-OpenCV学堂使用Tensorflow Object Detection API实现对象检测

使用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),作者:gloomyfish

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

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

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

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 基于OpenCV与tensorflow实现实时手势识别

    基于OpenCV与tensorflow object detection API使用迁移学习,基于SSD模型训练实现手势识别完整流程,涉及到数据集收集与标注、V...

    OpenCV学堂
  • OpenCV4 部署DeepLabv3+模型

    前面说了OpenCV DNN不光支持图像分类与对象检测模型。此外还支持各种自定义的模型,deeplabv3模型是图像语义分割常用模型之一,本文我们演示OpenC...

    OpenCV学堂
  • tensorflow object detection API使用之GPU训练实现宠物识别

    之前写过几篇关于tensorflow object detection API使用的相关文章分享,收到不少关注与鼓励,所以决定再写一篇感谢大家肯定与支持。在具体...

    OpenCV学堂
  • 小团队管理与大团队管理

    我们公司和大部分传统软件公司一样,随着业务的发展和新领域的开拓,公司的管理风格越来越像华为,这是不是最佳的演进路线,我觉得值得探讨,以下是我的思考,希望跟大家讨...

    liulun
  • ElasticSearch嵌套模型基本操作

    我是攻城师
  • [第二周]Jupyter Notebook和Markdown知识点汇总

    打开Notebook,可以看到主面板。在菜单栏中有Files、Running、Clusters、Conda四个选项。用到最多的是Files,我们可以在这里完成n...

    OrekiShiko
  • 深度强化学习之DQN-深度学习与强化学习的成功结合

    原因:在普通的Q-Learning中,当状态和动作空间是离散且维数不高的时候可以使用Q-Table来存储每个状态动作对应的Q值,而当状态和动作空间是高维连续时,...

    CristianoC
  • 数据库索引对业务速度影响有多大?

    某采用云数据库的网站用户反映业务访问速度很慢,查询一条数据库的数据时间很长,怀疑是云数据库的性能问题,为此引出了今天的讨论课题。

    希望的田野
  • 高并发 Javascript: 存在的!(下)

    我们可以用整块的 butterfly (flat butterfly) ———— 我们现在的对象模型 ———— 在我们知道这些可能性还未发生的时候。这部分会讲一...

    疯狂的技术宅
  • 毕啸南专栏 | 对话驭势CEO吴甘沙:无人车结盟竞争是大势所趋

    作者简介:毕啸南,知名青年学者,量子位专栏作家,《中国AI领袖人物访谈》系列制片人、主持人。点击文末阅读原文,关注量子学园的毕啸南专栏,跟随他一起持续深度对话李...

    量子位

扫码关注云+社区

领取腾讯云代金券