0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

介绍TensorFlow物体检测API训练神经网络、Python脚本寻找威利的过程

zhKF_jqr_AI 2017-12-28 16:08 次阅读

《威利在哪里?》(Where’s Wally)是由英国插画家马丁·汉德福特(Martin Handford)创作的一套儿童绘本。这个书的目标就是在一张人山人海的图片中找出一个特定的人物——威利(Wally)。“Where’s Wally”的商标已在28个国家进行了注册,为方便语言翻译,每一个国家都会给威利起一个新名字,最成功的是北美版的“Where’s Waldo”,在这里,威利改名成了沃尔多(Waldo)。

现在,机器学习博主Tadej Magajna另辟蹊径,利用深度学习解开“威利在哪里”的问题。与传统的计算机视觉图像处理方法不同的是,它只使用了少数几个标记出威利位置的图片样本,就训练成了一套“寻找威利”的系统。

训练过的图像评估模型和检测脚本发布在作者的GitHub repo上。

本文介绍了用TensorFlow物体检测API训练神经网络、并用相应的Python脚本寻找威利的过程。大致分为以下几步:

将图片打标签后创建数据集,其中标签注明了威利在图片中的位置,用x,y表示;

TensorFlow物体检测API获取并配置神经网络模型;

在数据集上训练模型;

用导出的图像测试模型;

开始前,请确保你已经按照说明安装了TensorFlow物体检测API。

创建数据集

虽说深度学习中最重要的环节是处理神经网络,但不幸的是,数据科学家们总要花费大量时间准备训练数据。

最简单的机器学习问题最终得到的通常是一个标量(如数字检测器)或是一个分类字符串。TensorFlow物体检测API在训练数据是则将上述两个结果结合了起来。它由一系列图像组成,并包含目标对象的标签和他们在图像中的位置。由于在二维图像中,两个点足以在对象周围绘制边界框,所以图像的定位只有两个点。

为了创建训练集,我们需要准备一组Where’s Wally的插画,并标出威利的位置。在此之前已经有人做出了一套解出威利在哪里的训练集。

最右边的四列描述了威利所在的位置

创建数据集的最后一步就是将标签(.csv)和图片(.jpeg)打包,存入单一二分类文件中(.tfrecord)。详细过程可参考这里,训练和评估过程也可以在作者的GitHub上找到。

准备模型

TensorFlow物体检测API提供了一组性能不同的模型,它们要么精度高,但速度慢,要么速度快,但精度低。这些模型都在公开数据集上经过了预训练。

虽然模型可以从头开始训练,随机初始化网络权重,但这可能需要几周的时间。相反,这里作者采用了一种称为迁移学习(Transfer Learning)的方法。

这种方法是指,用一个经常训练的模型解决一般性问题,然后再将它重新训练,用于解决我们的问题。也就是说,与其从头开始训练新模型,不如从预先训练过的模型中获取知识,将其转移到新模型的训练中,这是一种非常节省时间的方法。

作者使用了在COCO数据集上训练过的搭载Inception v2模型的RCNN。该模型包含一个.ckpycheckpoint文件,可以利用它开始训练。

配置文件下载完成后,请确保将“PATHTOBE_CONFIGURED”字段替换成指向checkpoint文件、训练和评估的.tfrecord文件和标签映射文件的路径。

最后需要配置的文件是labels.txt映射文件,其中包含我们所有不同对象的标签。由于我们寻找的都是同一个类型的对象(威利),所以标签文件如下:

item {

id: 1

name: 'waldo'

}

最终应该得到:

一个有着checkpoint文件的预训练模型;

经过训练并评估的.tfrecord数据集;

标签映射文件;

指向上述文件的配置文件。

然后就可以开始训练啦。

训练

TensorFlow物体检测API提供了一个十分容易上手的Python脚本,可以在本地训练模型。它位于models/research/object_detection中,可以通过以下命令运行:

python train.py --logtostderr --pipeline_config_path= PATH_TO_PIPELINE_CONFIG --train_dir=PATH_TO_TRAIN_DIR

PATH_TO_PIPELINE_CONFIG是通往配置文件的路径,PATH_TO_TRAIN_DIR是新创建的directory,用来储存checkpoint和模型。

train.py的输出看起来是这样:

用最重要的信息查看是否有损失,这是各个样本在训练或验证时出现错误的总和。当然,你肯定希望它降得越低越好,因为如果它在缓慢地下降,就意味着你的模型正在学习(要么就是过拟合了你的数据……)。

你还可以用Tensorboard显示更详细的训练数据。

脚本将在一定时间后自动存储checkpoint文件,万一计算机半路崩溃,你还可以恢复这些文件。也就是说,当你想完成模型的训练时,随时都可以终止脚本。

但是什么时候停止学习呢?一般是当我们的评估集损失停止减少或达到非常低的时候(在这个例子中低于0.01)。

测试

现在,我们可以将模型用于实际测试啦。

首先,我们需要从储存的checkpoint中输出一个推理图(interference graph),利用的脚本如下:

python export_inference_graph.py — pipeline_config_path PATH_TO_PIPELINE_CONFIG --trained_checkpoint_prefix PATH_TO_CHECPOINT --output_directory OUTPUT_PATH

产生的推理图就是用来Python脚本用来找到威利的工具。

作者写了几个简单目标定位的脚本,其中find_wally.py和find_wally_pretty.py都可以在他的GitHub上找到,并且运行起来也很简单:

python find_wally.py

或者

python find_wally_pretty.py

不过当你在自己的模型或图像上运行脚本时,记得改变model-path和image-path的变量。

结语

模型的表现出乎意料地好。它不仅从数据集中成功地找到了威利,还能在随机从网上找的图片中找到威利。

但是如果威利在图中特别大,模型就找不到了。我们总觉得,不应该是目标物体越大越好找吗?这样的结果表明,作者用于训练的图像并不多,模型可能对训练数据过度拟合了。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 神经网络
    +关注

    关注

    42

    文章

    4765

    浏览量

    100550
  • python
    +关注

    关注

    56

    文章

    4782

    浏览量

    84468
  • tensorflow
    +关注

    关注

    13

    文章

    329

    浏览量

    60499

原文标题:如何用神经网络“寻找威利”

文章出处:【微信号:jqr_AI,微信公众号:论智】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    高阶API构建模型和数据集使用

    一、前言前面结合神经网络简要介绍TensorFlow相关概念,并给出了MNIST手写数字识别的简单示例,可以得出结论是,构建的神经网络目的就是利用已有的样本数据
    发表于 11-04 07:49

    【AI学习】第3篇--人工神经网络

    `本篇主要介绍:人工神经网络的起源、简单神经网络模型、更多神经网络模型、机器学习的步骤:训练与预测、训练
    发表于 11-05 17:48

    嵌入式中的人工神经网络的相关资料分享

    设备没有连接的时候。 在这种情况下,需要一个能够实时进行信号预处理和执行神经网络的平台,需要最低功耗,尤其是在一个电池设备上运行的时候。通过使用不同的工具(如 python 脚本) ,可以训练
    发表于 11-09 08:06

    轻量化神经网络的相关资料下载

    原文链接:【嵌入式AI部署&基础网络篇】轻量化神经网络精述--MobileNet V1-3、ShuffleNet V1-2、NasNet深度神经网络模型被广泛应用在图像分类、物体检测
    发表于 12-14 07:35

    图像预处理和改进神经网络推理的简要介绍

    为提升识别准确率,采用改进神经网络,通过Mnist数据集进行训练。整体处理过程分为两步:图像预处理和改进神经网络推理。图像预处理主要根据图像的特征,将数据处理成规范的格式,而改进
    发表于 12-23 08:07

    如何使用TensorFlow神经网络模型部署到移动或嵌入式设备上

    有很多方法可以将经过训练神经网络模型部署到移动或嵌入式设备上。不同的框架在各种平台上支持Arm,包括TensorFlow、PyTorch、Caffe2、MxNet和CNTK,如Android
    发表于 08-02 06:43

    传统检测、深度神经网络框架、检测技术的物体检测算法全概述

    物体检测一向是比较热门的研究方向,它经历了传统的人工设计特征+浅层分类器的框架,到基于大数据和深度神经网络的End-To-End的物体检测框架的发展,然而许多人其实并未系统的了解过物体检测
    的头像 发表于 10-22 15:07 2692次阅读
    传统<b class='flag-5'>检测</b>、深度<b class='flag-5'>神经网络</b>框架、<b class='flag-5'>检测</b>技术的<b class='flag-5'>物体检测</b>算法全概述

    python卷积神经网络cnn的训练算法

    python卷积神经网络cnn的训练算法  卷积神经网络(Convolutional Neural Network,CNN)一直是深度学习领域重要的应用之一,被广泛应用于图像、视频、语
    的头像 发表于 08-21 16:41 1614次阅读

    如何训练和优化神经网络

    神经网络是人工智能领域的重要分支,广泛应用于图像识别、自然语言处理、语音识别等多个领域。然而,要使神经网络在实际应用中取得良好效果,必须进行有效的训练和优化。本文将从神经网络
    的头像 发表于 07-01 14:14 400次阅读

    如何使用Python进行神经网络编程

    。 为什么使用PythonPython是一种广泛使用的高级编程语言,以其易读性和易用性而闻名。Python拥有强大的库,如TensorFlow、Keras和PyTorch,这些库提
    的头像 发表于 07-02 09:58 368次阅读

    tensorflow简单的模型训练

    TensorFlow开始,然后介绍如何构建和训练一个简单的神经网络模型。 1. 安装TensorFlow 首先,我们需要安装
    的头像 发表于 07-05 09:38 514次阅读

    怎么对神经网络重新训练

    重新训练神经网络是一个复杂的过程,涉及到多个步骤和考虑因素。 引言 神经网络是一种强大的机器学习模型,广泛应用于图像识别、自然语言处理、语音识别等领域。然而,随着时间的推移,数据分布可
    的头像 发表于 07-11 10:25 419次阅读

    使用TensorFlow进行神经网络模型更新

    使用TensorFlow进行神经网络模型的更新是一个涉及多个步骤的过程,包括模型定义、训练、评估以及根据新数据或需求进行模型微调(Fine-tuning)或重新
    的头像 发表于 07-12 11:51 350次阅读

    Python自动训练人工神经网络

    人工神经网络(ANN)是机器学习中一种重要的模型,它模仿了人脑神经元的工作方式,通过多层节点(神经元)之间的连接和权重调整来学习和解决问题。Python由于其强大的库支持(如
    的头像 发表于 07-19 11:54 309次阅读

    如何使用Python构建LSTM神经网络模型

    构建一个LSTM(长短期记忆)神经网络模型是一个涉及多个步骤的过程。以下是使用Python和Keras库构建LSTM模型的指南。 1. 安装必要的库 首先,确保你已经安装了Python
    的头像 发表于 11-13 10:10 167次阅读