目标定位(Object localization)
图片分类任务我们已经熟悉了,就是算法遍历图片,判断其中的对象是不是汽车,这就是图片分类。定位分类问题,这意味着,我们不仅要用算法判断图片中是不是一辆汽车,还要在图片中标记出它的位置,用边框或红色方框把汽车圈起来,这就是定位分类问题。其中“定位”的意思是判断汽车在图片中的具体位置。
图片分类问题我们已经并不陌生了,例如,输入一张图片到多层卷积神经网络。这就是卷积神经网络,它会输出一个特征向量,并反馈给 softmax 单元来预测图片类型。
如果你正在构建汽车自动驾驶系统,那么对象可能包括以下几类:行人、汽车、摩托车和背景,这四个分类就是 softmax 函数可能输出的结果,这就是标准的分类过程。如果你还想定位图片中汽车的位置,该怎么做呢?我们可以让神经网络多输出几个单元,输出一个边界框。具体说就是让神经网络再多输出 4 个数字,标记为bx,by,bh和bw,这四个数字是被检测对象的边界框的参数化表示。要确定边界框的具体位置,需要指定红色方框的中心点,这个点表示为(bx,by),边界框的高度为bh,宽度为bw。因此训练集不仅包含神经网络要预测的对象分类标签,还要包含表示边界框的这四个数字,接着采用监督学习算法,输出一个分类标签,还有四个参数值,从而给出检测对象的边框位置,图片左上角的坐标为(0,0),右下角标记为(1,1)。此例中,bx的理想值是 0.5,因为它表示汽车位于图片水平方向的中间位置;by大约是 0.7,表示汽车位于距离图片底部 3/10的位置;bh约为 0.3,因为红色方框的高度是图片高度的 0.3 倍;bw约为 0.4,红色方框的宽度是图片宽度的 0.4 倍。目标标签y的定义如下:
它是一个向量,第一个组件pc表示是否含有对象,如果对象属于前三类(行人、汽车、摩托车),则pc= 1,如果是背景,则图片中没有要检测的对象,则pc = 0。我们可以这样理解pc,它表示被检测对象属于某一分类的概率,背景分类除外。如果检测到对象,就输出被检测对象的边界框参数bx,by,bh和bw。最后,如果存在某个对象,那么pc = 1,同时输出c1、c2和c3,表示该对象属于 1-3 类中的哪一类,是行人,汽车还是摩托车。鉴于我们所要处理的问题,我们假设图片中只含有一个对象,所以针对这个分类定位问题,图片最多只会出现其中一个对象。
神经网络的损失函数,其参数为类别y和网络输出y^,如果采用平方误差策略,则:,损失值等于每个元素相应差值的平方和。如果图片中存在定位对象,那么y1 = 1,所以y1 = pc,同样地,如果图片中存在定位对象,pc = 1,损失值就是不同元素的平方和。另一种情况是,y1 = 0,也就是pc = 0,损失值是(y1^ − y1)2,因为对于这种情况,我们不用考虑其它元素,只需要关注神经网络输出pc 的准确度。