专业的编程技术博客社区

网站首页 > 博客文章 正文

一文带你掌握谷歌的目标检测与识别API,附实际测试效果

baijin 2024-10-02 11:23:44 博客文章 5 ℃ 0 评论

导读:深度学习做图像识别有很多不同的途径。谷歌最近发布了一个使用Tensorflow的物体识别API,让计算机视觉在各方面都更进了一步。小编带大家一起去了解如何使用TF物体识别API。本头条号专注于人工智能与深度学习领域,持续为大家带来好玩又好学的知识与视界,喜欢或者支持小编的朋友可以订阅、转发与评论,让知识也可以走在共享的时代上!

前景摘要

Google 发布 TensorFlow 物体检测 API,帮助开发人员和研究人员识别图片中的物体。Google 专注于提高 API 的易用性和性能,新的模型于 6 月 16 号发布,在基准测试中表现出良好的性能,并已经开始应用于研究工作当中。

物体检测 API 包含了高度依赖 Inception 的卷积神经网络和简化模型,这些模型可以运行在简单的机器上。比如,MobileNets 单次检测器经过优化,能够以实时的方式运行在智能手机上。

早前,Google 发布了轻量级的 MobileNets 计算机视觉模型家族,这些模型可以用于执行各种任务,如物体检测、面部识别和地标识别。

准备好了吗?

这些代码在谷歌的计算机视觉应用中非常有用,谷歌希望本次开源能够将这份便利带给所有人。谷歌同时也欢迎更多贡献者参与进来。现在,你可以下载代码,使用 Jupyter notebook 尝试在图片中识别物体,也可以开始在 Cloud ML 引擎中训练你自己的识别器了。

  • 代码:tensorflow/models

  • Jupyter notebook:tensorflow/models

  • Cloud ML:https://cloud.google.com/blog/big-data/2017/06/training-an-object-detector-using-cloud-machine-learning-engine

  • https://github.com/priya-dwivedi/Deep-Learning/blob/master/Object_Detection_Tensorflow_API.ipynb

其检测结果如下:

物体检测

API概述

采用Google前沿的TensorFlow开源框架实现物体分类检测;目前已达到60多个物体分类检测之多,其中包括人形、动物、车辆检测识别等,甚至可识别各类标志检测。总结了一下,大概有:

COCO数据集的一些物体种类

这个API提供了5种不同的模型。

其中包含一个可训练性检测模型的集合,包括:

  • 带有 MobileNets 的 SSD(Single Shot Multibox Detector)

  • 带有 Inception V2 的 SSD

  • 带有 Resnet 101 的 R-FCN(Region-Based Fully Convolutional Networks)

  • 带有 Resnet 101 的 Faster RCNN

  • 带有 Inception Resnet v2 的 Faster RCNN

  • 上述每一个模型的冻结权重(在 COCO 数据集上训练)可被用于开箱即用推理。

  • 一个 Jupyter notebook 可通过我们的模型之一执行开箱即用的推理

  • 借助谷歌云实现便捷的本地训练脚本以及分布式训练和评估管道

想要了解更多跟模型有关的知识

https://github.com/tensorflow/models/blob/477ed41e7e4e8a8443bc633846eb01e2182dc68a/object_detection/g3doc/detection_model_zoo.md

实际速度测试

使用最轻量级的模型(ssd_mobilenet)。主要步骤如下:

1. 下载一个打包模型(.pb-protobuf)并把它载入缓存

2. 使用内置的辅助代码来载入标签,类别,可视化工具等等。

3. 建立一个新的会话,在图片上运行模型。

总体来说步骤非常简单。而且这个API文档还提供了一些能运行这些主要步骤的Jupyter文档——

https://github.com/tensorflow/models/blob/master/object_detection/object_detection_tutorial.ipynb

这个模型在实例图像上表现得相当出色(如下图):

人与风筝

视频上测试

接下来我打算在视频上尝试这个API。我使用了Python moviepy库,主要步骤如下:

  • 首先,使用VideoFileClip函数从视频中提取图像;

  • 然后使用fl_image函数在视频中提取图像,并在上面应用物体识别API。fl_image是一个很有用的函数,可以提取图像并把它替换为修改后的图像。通过这个函数就可以实现在每个视频上提取图像并应用物体识别;

  • 最后,把所有处理过的图像片段合并成一个新视频。

对于3-4秒的片段,这个程序需要花费大概1分钟的时间来运行。但鉴于我们使用的是一个载入缓存的模型,而且没有使用GPU,我们实现的效果还是很惊艳的!很难相信只用这么一点代码,就可以以很高的准确率检测并且在很多常见物体上画出边界框。

当然,我们还是能看到有一些表现有待提升。比如下面的例子。这个视频里的鸟完全没有被检测出来。

原版视频与检测识别后视频对比

继续探索

几个进一步探索这个API的想法:

  • 尝试一些准确率更高但成本也更高的模型,看看他们有什么不同;

  • 寻找加速这个API的方法,这样它就可以被用于车载装置上进行实时物体检测;

  • 谷歌也提供了一些技能来应用这些模型进行传递学习。例如,载入打包模型后添加一个带有不同图像类别的输出层。

参考文献

  • Google Tensorflow Object Detection Github

  • COCO dataset

  • 知乎:何之源对于“谷歌开放的TensorFlow Object Detection API 效果如何?”的回答

  • 机器之心:如何使用TensorFlow API构建视频物体识别系统

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表