前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >使用TensorFlow一步步进行目标检测(1)

使用TensorFlow一步步进行目标检测(1)

作者头像
云水木石
发布2019-07-01 11:35:53
1K0
发布2019-07-01 11:35:53
举报

目标检测(Object Detection)是人工智能最基础的应用,不论是我们常见的人脸识别,还是高大上的自动驾驶,都离不开目标检测。要从一幅复杂的画面中识别出物体或人物,需要复杂的算法,想想就觉得深奥,不过好在有TensorFlow这样的框架,具有强大的目标检测API,让没有机器学习背景的人也可以快速构建和部署功能强大的图像识别软件。

本系列文章就是来探讨如何借助TensorFlow深度学习框架来构建目标检测软件。

回顾我之前写的系列文章<<一步步提高手写数字的识别率>>,Tensorflow实现机器学习算法的一般流程为:

  1. 加载数据集
  2. 定义算法公式,也就是前向计算的计算图
  3. 定义损失函数(loss function),选定优化器,并指定优化器优化损失函数
  4. 对数据进行迭代训练
  5. 在测试集或交叉验证数据集上进行准确率评估。

不过在实际项目中,我们可能会走一些捷径,其原因在于:

  1. 训练模型需要大量数据,通常情况下我们没有那么多有效的数据,特别是标注好的数据。
  2. 训练模型需要耗费大量的时间进行调参,为了获得一个满意的参数,可能需要反复尝试。

回想之前提到的迁移学习(transfer learning),我们可以采用一种策略:在预训练模型的基础上,使用自有数据对模型进行训练和调优。TensorFlow也支持这种流程,具体说来,有一个TensorFlow模型集市,上面有各种各样预训练的机器学习模型,用来解决各种各样的共性问题。开发者可以根据自身需要,下载模型。如果自身的问题域和模型问题域匹配度非常高,就可以直接使用模型。如果不完全一致,可以在下载模型的基础上,使用自己的数据改进模型,这比自己从头训练要高效得多。

将思维发散一点,将来一定会出现机器学习模型商店,大的公司和研究机构可以将预训练模型放到商店中,开发者可以根据需要购买模型,将精力集中在业务上,从而形成一个良性的生态。

回到文章主题,本文将创建一个交通信号灯分类器,它将尝试确定灯是绿色、黄色还是红色。内容包括选择模型、适配数据集、创建和标注你自己的数据集、修改模型配置文件、训练模型、保存模型,以及最后在软件中部署模型。

因为我的主要工作环境是Ubuntu,所以文章中都是以Ubuntu 16.04为例进行说明,不过TensorFlow和Python都具有良好的移植性,如果你使用的是Windows或MacOS,理论上只需稍作修改,即可工作。

选择模型

github上有TensorFlow模型集合,可以通过简单的命令获得这些预训练的模型:

代码语言:javascript
复制
git clone https://github.com/tensorflow/models.git

该仓库中包含多个TensorFlow模型,主要分为如下几大类:

  1. 官方模型(official目录)是使用TensorFlow的高级API的示例模型的集合,它们得到良好的维护,支持最新稳定API,经过了充分的测试,并进行过优化,是TensorFlow用户的首选。 我们特别推荐新的TensorFlow用户从这里开始。
  2. 研究模型(research目录)是研究人员在TensorFlow中实施的模型,它们没有得到官方支持,也不能保证在后续的TensorFlow发布版本中工作,带有一些研究性质。考虑到深度学习的快速发展,一些最新的研究成果不会出现在官方模型中,经常来这里找找,说不定有惊喜。
  3. samples文件夹包含代码片段和较小的模型,用于演示TensorFlow的功能,包括各种博客文章中提供的代码。
  4. tutorials文件夹是TensorFlow教程中描述的模型集合。

每个模型下面都有README,其中包含安装说明。我们先浏览一下official下的模型,并没有我们所需要的,再来看research目录,里面有一个object_detection子目录,这里面有我们所需的目标检测模型。

object_detections目录下的内容相当多,有数据集、模型文件、测试代码、示例等等,模型文件位于models子目录下,里面的模型也真不少:

查看下表,选择所需的与需求匹配的模型,这里只列出了一小部分模型。其中mAP代表平均精度,表示模型在COCO数据集上的执行情况。通常,计算时间更长的模型表现更好。然而,这些模型也有许多细微差别(例如小物体的性能),如果你想了解它们的优点和缺点,你需要阅读对应的论文。

详细的模型评估还可以参考research/object_detection/g3doc/detection_model_zoo.md文档。你如果想要认真评估模型在你的数据集上的效果,还可以使用测试代码测试模型。

测试模型

在research/objection_detection/ 文件夹中,打开object_detection_tutorial.ipynb并运行之(具体方法请Google搜索Jupyter Notebook)。

此时,应该有一些要分类的样本图像。将它们放在tests_images文件夹中,并将它们命名为image3.jpg、image4.jpg、imageN.jpg等。修改notebook中的如下代码行:

代码语言:javascript
复制
TEST_IMAGE_PATHS = [ os.path.join(PATH_TO_TEST_IMAGES_DIR, 'image{}.jpg'.format(i)) for i in range(1, N+1) ]

其中N是文件夹中的图像的最后一个数字。当我用3个样本交通灯图像测试时,我得到了以下结果:

正如上图所示,模型能够对第一张图像中的信号灯进行识别,但无法识别第二张图像中的信号灯。

示例中的默认模型是TensorFlow提供的最简单(也是最快)的预训练模型。要测试新模型,只需将jupyter notebook中的MODEL_NAME替换为指定模型。我最终选择了R-FCN模型,该模型在我的样本图像上产生了以下结果。

下一篇文章将展示如何将现有数据库转换为TensorFlow记录文件,这样可以使用它来重新训练模型。

参考
  1. Step by Step TensorFlow Object Detection API Tutorial — Part 1: Selecting a Model
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-07-26,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 云水木石 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 选择模型
  • 测试模型
  • 参考
相关产品与服务
图像识别
腾讯云图像识别基于深度学习等人工智能技术,提供车辆,物体及场景等检测和识别服务, 已上线产品子功能包含车辆识别,商品识别,宠物识别,文件封识别等,更多功能接口敬请期待。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档