目标检测(Object detection)
目标定位:图片分类任务我们已经熟悉了,就是算法遍历图片,判断其中的对象是不是汽车,这就是图片分类。而这里我们要学习构建神经网络的另一个问题,即定位分类问题。这意味着,我们不仅要用算法判断图片中是不是一辆汽车,还要在图片中标记出它的位置,用边框或红色方框把汽车圈起来,这就是定位分类问题。其中“定位”的意思是判断汽车在图片中的具体位置。比如,你正在做一个自动驾驶程序,程序不但要检测其它车辆,还要检测其它对象,如行人、摩托车等等。
图片分类问题你已经并不陌生了,例如,输入一张图片到多层卷积神经网络。这就是卷积神经网络,它会输出一个特征向量,并反馈给softmax单元来预测图片类型。
如果你正在构建汽车自动驾驶系统,那么对象可能包括以下几类:行人、汽车、摩托车和背景,这意味着图片中不含有前三种对象,也就是说图片中没有行人、汽车和摩托车,输出结果会是背景对象,这四个分类就是softmax函数可能输出的结果。
这就是标准的分类过程,如果你还想定位图片中汽车的位置,该怎么做呢?我们可以让神经网络多输出几个单元,输出一个边界框。具体说就是让神经网络再多输出4个数字,标记为,
,
和
,这四个数字是被检测对象的边界框的参数化表示。
我们先来约定本周课程将使用的符号表示,图片左上角的坐标为(0,0),右下角标记为(1,1)。要确定边界框的具体位置,需要指定红色方框的中心点,这个点表示为(,
),边界框的高度为
,宽度为
。因此训练集不仅包含神经网络要预测的对象分类标签,还要包含表示边界框的这四个数字,接着采用监督学习算法,输出一个分类标签,还有四个参数值,从而给出检测对象的边框位置。此例中,
的理想值是0.5,因为它表示汽车位于图片水平方向的中间位置;
大约是0.7,表示汽车位于距离图片底部
的位置;
约为0.3,因为红色方框的高度是图片高度的0.3倍;
约为0.4,红色方框的宽度是图片宽度的0.4倍。
下面我再具体讲讲如何为监督学习任务定义目标标签y 。
请注意,这有四个分类,神经网络输出的是这四个数字和一个分类标签,或分类标签出现的概率。目标标签y的定义如下
它是一个向量,第一个组件表示是否含有对象,如果对象属于前三类(行人、汽车、摩托车),则
=1,如果是背景,则图片中没有要检测的对象,则
=0。我们可以这样理解
,它表示被检测对象属于某一分类的概率,背景分类除外。
如果检测到对象,就输出被检测对象的边界框参数,
,
和
。最后,如果存在某个对象,那么
=1,同时输出
、
和
,表示该对象属于1-3类中的哪一类,是行人,汽车还是摩托车。鉴于我们所要处理的问题,我们假设图片中只含有一个对象,所以针对这个分类定位问题,图片最多只会出现其中一个对象。
我们再看几个样本,假如这是一张训练集图片,标记为x,即上图的汽车图片。而在y当中,第一个元素=1,因为图中有一辆车,
,
,
和
会指明边界框的位置,所以标签训练集需要标签的边界框。图片中是一辆车,所以结果属于分类2,因为定位目标不是行人或摩托车,而是汽车,所以
=0,
=1,
=0,
,
和
中最多只有一个等于1。
这是图片中只有一个检测对象的情况,如果图片中没有检测对象呢?如果训练样本是这样一张图片呢?
这种情况下,,的其它参数将变得毫无意义,这里我全部写成问号,表示“毫无意义”的参数,因为图片中不存在检测对象,所以不用考虑网络输出中边界框的大小,也不用考虑图片中的对象是属于、和中的哪一类。针对给定的被标记的训练样本,不论图片中是否含有定位对象,构建输入图片和分类标签的具体过程都是如此。这些数据最终定义了训练集。
最后,我们介绍一下神经网络的损失函数,其参数为类别y和网络输出,如果采用平方误差策略,则
,损失值等于每个元素相应差值的平方和。
如果图片中存在定位对象,那么,所以
,同样地,如果图片中存在定位对象,
,损失值就是不同元素的平方和。
另一种情况是,也就是
,损失值是
,因为对于这种情况,我们不用考虑其它元素,只需要关注神经网络输出
的准确度。
回顾一下,当时,也就是这种情况(编号1),平方误差策略可以减少这8个元素预测值和实际输出结果之间差值的平方。如果
, y矩阵中的后7个元素都不用考虑(编号2),只需要考虑神经网络评估
(即
)的准确度。
为了让大家了解对象定位的细节,这里我用平方误差简化了描述过程。实际应用中,你可以不对、
、
和softmax激活函数应用对数损失函数,并输出其中一个元素值,通常做法是对边界框坐标应用平方差或类似方法,对应用逻辑回归函数,甚至采用平方预测误差也是可以的。
目标检测:学过了对象定位和特征点检测,今天我们来构建一个对象检测算法。我们将学习如何通过卷积网络进行对象检测,采用的是基于滑动窗口的目标检测算法。
假如你想构建一个汽车检测算法,步骤是,首先创建一个标签训练集,也就是x和y表示适当剪切的汽车图片样本,这张图片(编号1)x是一个正样本,因为它是一辆汽车图片,这几张图片(编号2、3)也有汽车,但这两张(编号4、5)没有汽车。出于我们对这个训练集的期望,你一开始可以使用适当剪切的图片,就是整张图片x几乎都被汽车占据,你可以照张照片,然后剪切,剪掉汽车以外的部分,使汽车居于中间位置,并基本占据整张图片。有了这个标签训练集,你就可以开始训练卷积网络了,输入这些适当剪切过的图片(编号