首页 > 机器人资讯 > 三分钟搞懂深度学习:物体的识别和检测,以“找椅子”为例

三分钟搞懂深度学习:物体的识别和检测,以“找椅子”为例

日期:2019-03-05   人气:  来源:互联网
简介:为什么选择椅子问题? 问题简单化:在清晰的图像中进行椅子识别 进一步的挑战:找到椅子的位置 一个先进的对象识别技术YOLO概述 将YOLO应用于椅子识别 面临的挑战以及未来将采取的步骤 为什么选择椅子问题? 首先我将阐述我为什么想要在一张照片中数椅子。……

为什么选择椅子问题?

问题简单化:在清晰的图像中进行椅子识别

进一步的挑战:找到椅子的位置

一个先进的对象识别技术YOLO概述

将YOLO应用于椅子识别

面临的挑战以及未来将采取的步骤

为什么选择椅子问题?

首先我将阐述我为什么想要在一张照片中数椅子。

在AnalyticsVidhya的办公室里,通常会有10到15个人。但到了夏天,实习生们就会涌入我们的办公室。所以,如果我们要在夏天开全员大会,机器人维修,我们就必须要从其他房间里拉出所有空的椅子。

我是一个特别懒的人,所以我想,有没有一种算法能够直接告诉我们哪间房间有空闲的椅子。这样一来,我们就不用挨个房间找椅子了,省时又省力。

这看上去是个再简单不过的问题,但我可以用它来尝试我获得的新技能。深度学习能够解决这个问题吗?老实说,我也不确定深度学习究竟能不能用来解决这一问题,但是试一下总没有坏处,不是吗?

问题中需完成的任务

既然你已经了解了我们需要解决的问题,那么接下来我会向你介绍我解决问题的过程。我会把这个问题分解为四个不同的任务

假如我们有一个房间的视频资源,那么在视频中有没有出现一把椅子?

如果视频中出现了椅子,那么这把椅子在房间的什么位置呢?

这把椅子是否被占用了?如果有未被占用的椅子,那么未被占用的椅子数量是多少呢?

我们应该从哪间房间里搬空椅子?

我决定先解决一个相对简单的问题,然后再尝试解决更复杂的问题。循序渐进,一步步达到我的目标。这也是我将这个问题分解为四个不同的任务的原因。在本文,我将详细介绍前两个任务的完成过程;在后续文章中,我会继续介绍后两个任务的完成过程。

问题简单化:在清晰的图像中进行椅子识别

解决椅子问题的第一步,也是最简单的一步,就是判断图片中的房间内是否有椅子。现在,我将这个问题进一步简化我将网络对视频资源的需求忽略,给网络输入了我拍摄的几张照片。

假设我给你两张照片,你能告诉我哪一张照片中有椅子吗?

答案是第一张,而你究竟是怎么知道的呢?

因为你见过椅子很多很多次了,所以对你来说判断图片里有没有椅子并不难。换言之,你对于现实中的椅子长什么样已经有了了解。同样的,我们可以训练一个神经网络,让网络帮我们完成这个识别的工作。

顺便提一下,我们之所以使用神经网络而不用其他的算法,是因为神经网络是在图像处理问题方面最强大、最先进的技术。

所以,我将一个经过ImageNet数据集预训练的神经网络应用到这些图像上。

但是当我让模型识别图像中的对象时,出现了一个问题它不能准确地分别图像中的对象。例如,下图是模型针对图像的输出结果。

[[('n03179701','desk',0.56483036),('n03337140','file',0.14689149),('n04550184','wardrobe',0.03918023)]]

它将图片中的椅子错误地判断成了书桌。这样的结果实在令人很失望,因为书桌和椅子的相似度不高,按理来说是非常容易区分的。

解决椅子还是书桌的问题

正如我在之前的文章中提到的,每当我在建立神经网络时遇到问题,我就会逐步解决这个问题。我会将每个步骤列成一个清单:

第一步:检查网络架构

第二步:检查神经网络的超参数

第三步:检查网络的复杂性

第四步:检查输入数据的结构

第五步:检查数据的分布

在一番检查评估之后,我发现模型的图像输入是不正确的,因为我没有正确地处理图像的纵横比例。所以,为了解决这个问题,我添加了一个自定义代码,该自定义代码之前在GitHub上的一个keras问题中出现过。更新的图像如下图:

[[('n02791124','barber_chair',0.77817303),('n03179701','desk',0.090379775),('n03337140','file',0.033129346)]]

处理完这个问题以后,模型就能开始正常地工作,输出正确的结果了。

进一步的挑战:找到椅子的位置

现在,我们已经判断出了图像中有一把椅子,那么接下来我们就要识别这把椅子在什么位置。除了这把椅子,我们还要识别出图像中的人。我们需要通过识别这个人来判断这把椅子是否被占用了。这两个任务(任务二和任务三)将有助于我们解决和处理更大的任务,判断作这把椅子是否被占用了。

与前面的任务一样,我们将使用一个预训练的网络,这个网络将给我们提供一个可接受的分数。目前,YOLO网络是对象检测的最佳模型,它能够实时地展示相当不错的性能。在本文,我对YOLO网络做了简单的介绍。下面,我们来看看如何利用YOLO解决这个问题。

使用YOLO进行椅子检测

在系统中设置YOLO网络,我们可以按照以下简单的步骤:

第一步:

gitclonehttps://github.com/pjreddie/darknet

cddarknet

make

第二步:

wgethttps://pjreddie.com/media/files/yolo.weights

用YOLO来解决我们的问题,你需要输入以下指令,并且提供你自己图像的位置

./darknetdetectcfg/yolo.cfgyolo.weights//data/image.jpg

在我们的图像上应用了YOLO之后,我发现其结果非常不错。下面是一些例子:

面临的挑战以及未来将采取的步骤

虽然开端进展得非常顺利,但是仍然有问题会阻碍这个项目的发展。以下是其中一些问题:

问题一:这个YOLO模型还是会出现一些错误,它并不是一个100%正确的模型。比如,在下面的这张图片中,一个垃圾桶竟然被错误地识别成了一个人!

问题二:如果在一张图像中,一把椅子挡住了另外一把椅子,算法还能识别出这把被挡住的椅子吗?这是个值得思考的问题。

除了这些可能出现的问题之外,还有一些更加实际的细节需要考虑,比如说,算法推荐一个解决方案需要多长时间?算法需要运行什么类型的硬件?等等。这些都是在把算法作为商品出售之前需要考虑和解决的问题。

同样,像之前所说的,KUKA机器人维修,在这篇文章中只讨论前面两个任务,还没有涉及到后面两个任务。那么,库卡机器人,接下来的任务就是计算出房间内的椅子数量,然后建立起一个端到端的产品。

尾注

本文内容涵盖了图像中的物体检测和识别,其中的物体就是椅子。针对物体识别,我们用了一个简单的预训练的模型来识别图像中的物体。另一方面,针对物体检测,我们使用了YOLO网络一项非常先进的对象实时检测技术。

免责声明:本网部分文章和信息来源于互联网,本网转载出于传递更多信息和学习之目的。如转载稿涉及版权等问题,请立即联系网站所有人,我们会予以更改或删除相关文章,保证您的权利。