【干货】圣诞老人是否真实存在?训练Tensorflow的对象检测API能够告诉你答案

背景:最近我们看到了一篇文章,关于如何用于你自己的数据集,训练Tensorflow的对象检测API。这篇文章让我们对对象检测产生了关注,正巧圣诞节来临,我们打算用这种方法试着找到圣诞老人。

  • 文章地址:https://medium.com/towards-data-science/how-to-train-your-own-object-detector-with-tensorflows-object-detector-api-bec72ecfe1d9

代码在下面的地址中。从这段代码中生成的模型可以扩展,以发现其他类别的角色是动画还是真实的。

  • 地址:https://github.com/turnerlabs/character-finder

正在活动的圣诞老人

收集数据 与任何机器学习模型一样,数据是最重要的方面。因为我们想要找到不同类型的圣诞老人,我们的训练数据必须是多样化的。为了收集数据,我们编写了一个流处理器,它使用VLC(多媒体播放器)从任何在线资源流播放视频,并从中捕获帧。流处理器在视频中捕获帧,而不需要等待视频加载。如果当前播放的视频是2秒,那么流处理器将从4或5秒的标记中捕获帧。作为额外的奖励,你可以在ASCII观看视频,这是观看视频的最酷的方式。

  • 流处理器的使用说明:https://github.com/turnerlabs/stream-processor

在ASCII上圣诞老人冲浪的视频

下面是我们收集的不同类型的圣诞老人照片的一小部分。所有这些图片都是从YouTube上收集的。正如你所看到的,有不同类型的动画版和真人版圣诞老人。

不同种类的圣诞老人

给数据贴标签 下一步是给数据贴上标签,比如在圣诞老人的脸上画一个边界框。图像标记的一个常见选择是使用工具贴标签,但是我们使用了“辛普森一家的角色识别和检测(第2部分)”这篇文章中出现的自定义脚本。

  • 文章地址:https://medium.com/alex-attia-blog/the-simpsons-characters-recognition-and-detection-part-2-c44f9d5abf37

要给图像贴上标签,先点击人物面部的左上角,然后再点击右下角。如果图像中没有出现人物角色,双击相同的点并删除图像。

  • 脚本的代码:https://github.com/turnerlabs/character-finder/blob/master/detect_labels.py

创建Tensorflow记录文件 一旦边界框信息存储在一个csv文件中,下一步就是将csv文件和图像转换为一个TF记录文件,这是Tensorflow的对象检测API使用的文件格式。将csv文件转换为TF记录的脚本可以在下面地址中找到。

地址:https://github.com/turnerlabs/character-finder/blob/master/object_detection/create_characters_tf_record.py

还需要一个protobuf(可扩展的序列化结构数据格式)文本文件,用于将标签名转换为数字id。对于我们的实例,它只是一个类。

item {
id: 1
Name: santa
}

创建配置文件 对于训练,我们使用faster_rcnn_inception_resnet配置文件作为基础。我们将配置文件中的类参数更改为1,因为我们只有一个类——“圣诞老人(santa)”,并将输入路径参数更改指向我们在上一步中创建的TFrecord文件。我们使用了预先训练过的检查点用作faster_rcnn_inception_resnet配置文件。我们使用这个模型是因为模型的准确性比模型训练的速度更重要。还有其他一些提供不同训练速度和准确性的模型,可以在下面这个地址中找到。

  • https://github.com/tensorflow/models/blob/master/research/object_detection/g3doc/detection_model_zoo.md

训练 训练代码是在本地计算机上运行的,以检查是否一切都在正常工作。一旦它在正常的工作,它就会被部署到Google云平台的ML引擎上。该模型接受了超过10万步长的训练。

  • ML引擎:https://cloud.google.com/ml-engine/

动画版圣诞老人

这个模型对动画和真人的图片都很有效果。

真人版圣诞老人

输出模型 训练结束后,该模型被导出用于在不同图像上进行测试。为了导出模型,我们选择了从训练工作中获得的最新的检查点,并将其输出到一个冻结的推理图中。

  • 将检查点转换为冻结推理图的脚本:https://github.com/turnerlabs/character-finder/blob/master/object_detection/export_inference_graph.py

我们还为我们的模型建立了一个网页,网页从google搜索中提取图像,并试图在还原的图像中找到圣诞老人。这个网页的结果被过滤了,只显示了超过60%的置信度。下图是网页的快照。

我们发现了圣诞老人! !

下一个步骤 当训练工作开始的时候,我们注意到总损失很快就降到1以下,这就意味着这个模型在寻找圣诞老人方面做得很好。

总损失

我们知道我们的模式不可能变得完美。虽然该模型在准确地找到圣诞老人方面做得相当不错,我们也得到了错误的判断。错误的判断对于这种情况来说是指,图像中没有圣诞老人,但模型却预测图像中会有。

错误的判断

结论 在使预测变得更准确和减少错误判断的数量上,还有很大的改进空间。接下来的步骤是了解更多关于配置文件中不同参数的信息,并更好地了解它们如何影响模型的训练及其预测。我们希望你现在能够为你自己的数据集训练对象检测器。

原文发布于微信公众号 - ATYUN订阅号(atyun_com)

原文发表时间:2017-12-25

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

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏ATYUN订阅号

【实践操作】:六步教你如何用开源框架Tensorflow对象检测API构建一个玩具检测器

TensorFlow对象检测API是一个建立在TensorFlow之上的开源框架,可以轻松构建,训练和部署对象检测模型。 到目前为止,API的性能给我留下了深刻...

3918
来自专栏机器之心

开源 | 浏览器上最快的DNN执行框架WebDNN:从基本特性到性能测评

选自Github 机器之心编译 参与:蒋思源、晏奇 WebDNN 是网页浏览器中最快的 DNN 执行框架,而本文首先简单介绍了 WebDNN 特征与其框架结构...

2866
来自专栏机器之心

教程 | 如何在浏览器使用synaptic.js训练简单的神经网络推荐系统

3664
来自专栏XAI

Java分布式神经网络库Deeplearning4j 环境搭建和运行一个例子

DeeplearningforJava简单介绍: deeplearning4j是一个Apache 2.0-licensed,开源的,分布式神经网络库编写的jav...

3438
来自专栏大数据智能实战

DrQA实践

2017年七月份Facebook开源了其开放域问答系统DrQA的代码。关于DrQA,还有一篇2017年发表在ACL上的论文《Reading Wikipedi...

2895
来自专栏AI科技大本营的专栏

重磅消息 | 深度学习框架竞争激烈 TensorFlow也支持动态计算图

今晨 Google 官方发布消息,称 TensorFlow 支持动态计算图。 原文如下: 在大部分的机器学习中,用来训练和分析的数据需要经过一个预处理过程,输入...

2685
来自专栏数据的力量

excel双坐标图表的做法(两个Y轴)

所谓双坐标图表,就是左右各一个Y轴,分别显示不同系列的数值。该图表主要用于两个系列数值差异较大的情况。如下例。

1042
来自专栏Python小屋

几行Python代码生成饭店营业额模拟数据并保存为CSV文件

CSV文件是一种通用的、简单的文件格式,以纯文本形式存储表格数据(数字和文本),在多个领域都有广泛应用,经常用来在不同程序之间交换数据。 下面的代码使用Pyth...

3889
来自专栏机器之心

资源 | 基于TensorFlow和Sonnet,DeepMind开源可微神经计算机实现包

选自Github 机器之心编译 参与:蒋思源 去年 DeepMind 在自然期刊上曾介绍过一种记忆增强式的神经网络形式-可微神经计算机。而近日,DeepMin...

2773
来自专栏小詹同学

人脸识别(二)——训练分类器

上一篇简单整理了下人脸识别的相关基础知识,这一篇将着重介绍利用pencv(2.4.9)已有的模型进行分类器训练。 一、关于ORL人脸数据库 ORL是一个40个...

3895

扫码关注云+社区