Lesson4(CNN)--week3--目标检测

Object detection 目标检测
这里写图片描述

图像分类与定位

之前我们学习到的输入一张图片,输出为图片的分类的方法都是image classification(图像识别),但有些时候,我们不仅要知道图像的分类,还需要知道目标所在的位置,这种任务叫作image classification and localization,另外有些时候,一张图片中含有多个目标,此时的任务叫作目标检测object detection。
目标定位任务中,输出y的设定为:
这里写图片描述

特征点检测

输入一张图片,输出这张图片中的特征点。eg:输入一张图片,当图片中含有人脸时,我们需要标注出人的各眼角点,假设需要标注的有64个眼角点,每个点有一个横坐标和一个纵坐标组成,加上目标检测的pc点,一共的输出就是64×2+1=129个数字。
在一些图片处理软件中,比如抖音的变脸功能,实际上就是检测出人脸的各个部位,然后对各部位进行处理,因此就是一个目标定位的任务。

目标检测

目标检测怎么做?
首先在训练过程中,我们通过对图片进行剪裁得到视图基本为车辆的图片,输出为label Y=1,视图不为车的图片输出Y=0,对神经网络训练之后,得到参数。
在测试的时候,使用sliding window object detection algorithm,即滑动窗口目标检测:对于多目标的任务,我们就必须对一个图片使用滑窗处理,每次使用一个滑窗对一张图片进行逐个处理,下次使用一个更大的滑窗进行处理,依次下去。这样我们可以检测到图片中所有目标。但这种方法的一个缺点是计算成本太高,首先使用各种不同大小的滑窗取出一个小部分的图像,然后将它送入卷积神经网络中进行处理。
这个方法的改进版本是使用卷积网络来实现滑动窗口目标检测,避免重复的计算。
在具体介绍这个方法之前,我们先来认识一个等效替换,当我们将一个5×5×16的结构拉成一个向量作为全连接层时,我们同样可以对这个5×5×16的结构使用卷积核大小为5×5,通道数为400的卷积操作完成。
因此转换的具体实现过程是:
这里写图片描述
图中的14×14指的是滑动窗的大小,对于一个14×14的滑动窗有一个输出label,对于16×16的图片,stride=1时,就有2×2的输出,也就是4个label,正是使用滑动窗的4个输出label。这样使用卷积网络,就避免了使用一个滑动窗时造成的计算量过大的问题,可以一次解决一个滑动窗大小的label输出。但这样仍旧有一个缺点:当滑动窗过大时,定位就不准确了,也就是没有精确的定位。
解决这个问题的方法叫作YOLO(you only look once)。

YOLO

首先使用一个3×3的网格对原始图片进行切分,然后对一个切分后的图片子块做目标定位的输出,也就是每个输出是一个长度为8的向量,在这个例子中,输出是3×3×8的张量。一般情况,我们会选择更加精细的划分,比如19×19的网格切分。这种算法对于一个网格中只存在一个对象的情况是有效的。确定对象存在于哪个网格中的规则是:找出对象的中点,中点在哪个网格中就将这个对象分配到那个网格中。
YOLO方法中需要注意的两点:1.它与图像分类与定位算法十分类似,输出都是一个长度为8的向量;2.它的训练过程是一个卷积网络,输入为原始图像,输出为3×3×8的张量或19×19×8的张量,这样既降低了计算量又实现了精确定位。
这里写图片描述

判别输出

使用IOU系数:Intersection over union: I U
即两个方框:实际边界框与标记框的交集比并集的比例
IOU>0.5作为阈值判断定位准确。当然阈值可以设置的更高一些,比如0.6,0.7
这里写图片描述
当多个标记框都输出包含目标时,为了去除重复的检测,这时可以使用non max suppession,具体实现过程如下:
这里写图片描述
这样就能保证对一个对象检测没有重复的输出。当我们要检测的对象有多类时,比如车,人和人行道时,我们可以独立地对某一个类别实行非最大值抑制,保证每一类没有重复的输出。

多对象检测

当多个对象出现在同一个格子中时,我们如何给这个格子定义一个输出呢?例如:当人和车同时出现在一个格子里的时候,每个格子的输出应该是一个长为8×2的向量,当对图片划分为3×3的格子时,输出应该是3×3×16的张量。对每个格子两类不同输出的方法是为格子中的对象分配两个anchor box.如图:
这里写图片描述
anchor box1适用于检测瘦高的对象,而achor box2适用于检测宽胖的对象,因此输出的y前8个数值检测anchor box1对应的人这一类,后8个数值检测anchor box2对应的车这一类。Anchor box的具体算法是:
这里写图片描述
总结YOLO算法的整个流程:
1)首先将一张图片切分为3×3(或者19×19)的网格,然后对各个网格中的对象进行标记,之后进行训练,得到卷积网络参数;
2)然后使用该参数对新的输入进行预测,使用anchor box实现多目标预测;
3)然后对预测出现的结果使用non max suppression的方法去掉重复的预测。

猜你喜欢

转载自blog.csdn.net/zhouhong0284/article/details/80357198
今日推荐