目标检测是计算机视觉领域中一个新兴的应用方向。相比前两年,它的性能越来越好。
对象定位
在构建对象检测之前,我们先了解一下对象定位。
定位分类问题:
不仅要用算法判断图片中是不是一辆汽车,还要在图片中标记出它的位置。
定位分类问题通常只有一个较大的对象位于图片中间位置。
对象检测问题:
图片可以含有多个对象,甚至单张图片中会有多个不同分类的对象。
图片分类的思路可以帮助学习分类定位,而对象定位的思路又有助于学习对象检测。
分类和定位
图片分类的流程(标准的分类pipeline):
- 输入一张图片到多层卷积神经网络
- 输出一个特征向量
- 特征向量反馈给softmax单元来预测图片类型
定位的思路
想定位图片中汽车的位置,实际上就是让神经网络多输出几个单元,输出一个边界框。
具体说就是让神经网络再多输出4个数字,标记为bx、by、bh和bw,这四个数字是被检测对象的边界框的参数化表示。
在这里规定,图片左上角的坐标为(0,0),右下角标记为(1,1),
要想确定边界框的具体位置,需要指定红色方框的中心点(bx,by),边界框的高度为bh,宽度为bw。
训练集的变化
训练集不仅包含神经网络要预测的对象分类标签,还包含表示边界框的这四个参数。
训练思路
接着采用监督学习算法,输出一个分类标签和这四个参数。
例子分析
此例中:
- bx的理想值是0.5(表示汽车位于图片水平方向的中间位置)
- by大约是0.7(表示汽车位于距离图片底部3/10的位置)
- bh约为0.3(表示红色方框的高度是图片高度的0.3倍)
- bw约为0.4(表示红色方框的宽度是图片宽度的0.4倍)。
定义目标标签y
神经网络输出的是四个参数、分类标签出现的概率。
鉴于我们所要处理的问题,我们假设图片中只含有一个对象。
则y是一个向量:
- 第一个组件Pc表示是否含有对象(如果对象属于前三类则Pc=1。如果是背景则Pc=0)。
- 第二个组件bx、by、bh和bw表示如果检测到对象,就输出被检测对象的边界框参数。
- 第三个组件c1、c2、c3表示在Pc=1的情况下,判断对象属于1-3中的哪一类
损失函数
上图是对误差函数的简单的描述。
通常做法是对边界框坐标应用平方误差或类似方法,对Pc应用逻辑回归函数(甚至采用平方预测误差也是可以的)。