目标检测介绍

目标定位(Object localization)

       不仅要正确分类目标,还要找出目标所在位置

  让神经网络多输出几个单元,输出一个边界框,具体说就是让神经网络再多输出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

       它是一个向量,第一个组件Pc表示是否含有对象,如果对象属于前三类,则Pc=1;如果是背景,则图片中没有要检测的对象,Pc=0。Pc可以表示被检测对象属于某一分类的概率,背景分类除外;接下来,如果检测到对象,就输出被检测对象的边界框参数bx,by,bh和bw;最后,如果存在某个对象,那么Pc=1,同时输出c1,c2,c3,表示该对象属于1-3中的哪一个类。

神经网络的损失函数

Ground truth:y

网络输出:y^

通常的做法是对边界框应用平方误差或者类似方法,对Pc应用逻辑回归函数

 

特征点检测(Landmark detection) 

       假设你正在构建一个人脸识别应用,你希望算法可以给出眼角的具体位置,眼角的坐标为(x,y),你可以让神经网络的最后一层多输出两个数字lx和ly,作为眼角的坐标值;如果你想知道两只眼睛的四个眼角的具体位置,那么从左到右,依次用四个特征点来表示这四个眼角,对神经网络稍作修改,输出第一个特征点(l1x,l1y),第二个特征点为(l2x,l2y),等等。因此这四个脸部特征点的位置就可以通过神经网络输出了。如果除了这四个点,你还想要得到更多的特征点输出值,假设脸部有64个特征点,选择这些特征点集合,并生成包含这些特征点的标签训练集,然后利用神经网络输出脸部关键特征点的位置。具体的做法是,准备一个卷积网络和一些特征集,将人脸图片输入卷积网络,输出0或1。1表示有人脸,0表示没有人脸,然后输出(l1x,l1y),…直到(l64x,l64y),这里有129(=1+2x64)个输出单元,由此实现对图片的人脸检测和定位。

       如果你对人体姿态检测感兴趣,你可以定义一些关键特征点,比如说胸部的中点,左肩、腰等,然后通过神经网络去学习。

 

目标检测(Object Detection)

       如何通过卷积网络进行目标检测?

       采用基于滑动窗口(sliding windows)的目标检测算法

       假设你要构建一个汽车检测算法,步骤如下:

1) 创建一个标签训练集,也就是X和Y,表示被剪裁后的汽车图片(即整张图片X几乎都被汽车占据)样本。

 

2)有了这个标签训练集,你就可以开始训练卷积网络了,输入这些适当剪切过的图像,卷积网络输出Y,0或1表示图片中有汽车或者没有汽车。

3)训练完这个卷积网络,就可以用它来实现滑动窗口目标检测

具体步骤如下:

  假设右图是一张测试图片,首先选定一个特定大小的窗口,比如图片下方这个窗口,将这个红色小方块输入卷积网络,卷积网络开始进行预测,即判断红色方框内有没有汽车;滑动窗口目标检测算法接下来会继续处理第二个图像即红色方框稍微向右滑动之后的区域,并输入给卷积网络,依次重复操作。思路是以固定的步幅滑动窗口,遍历图像的每个区域,把这些剪切后的小图像输入到卷积网络,对每个位置按0或1进行分类;重复上述操作,不过这次选择一个更大的窗口,截取更大的区域,并输入给卷积网络处理,你可以根据卷积网络对输入大小的要求调整这个区域,然后输入给卷积网络,输出0或1,遍历整个图像,输出结果;然后第三次重复操作,选用更大的窗口。

  使用这种方法,无论汽车在图像中什么位置,总有一个窗口可以覆盖到这个汽车,然后将这个输入到卷积网络,如果先前卷积网络训练的比较好,那么网络输入将会是1,说明网络检测到图片上有车辆。

  上面这种方法叫做滑动窗口目标检测算法。

  滑动窗口目标检测算法有一个很明显的缺点,就是需要大量的计算成本,因为你在图片中剪切出太多小方块,卷积网络要一个一个地处理;如果你选用的步幅很大,虽然会减少输入卷积网络的窗口个数,但是粗粒度可能对影响性能,反之如果采用小粒度或者小步幅,传递给卷积网络的小窗口会特别多,这意味着超高的计算成本。

  在卷积神经网络出来以前,由于采用的分类算法比较简单,计算成本很低,因此滑动窗口目标检测算法表现还算不错;然而对于卷积神经网络,计算成本却很高。

  滑动窗口不能输出最精准的边界框,目标比较新的算法YOLO可以解决这个问题,YOLO的介绍可以参考这篇文章:目标检测算法YOLO算法介绍

内容主要来自与:

Andrew Ng的卷积神经网络课程

原文地址:https://www.cnblogs.com/hejunlin1992/p/8453563.html