前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >卷积神经网络(四) ——目标检测与YOLO算法

卷积神经网络(四) ——目标检测与YOLO算法

作者头像
用户1327360
发布2018-03-29 16:59:30
5.4K0
发布2018-03-29 16:59:30
举报
文章被收录于专栏:决胜机器学习决胜机器学习

卷积神经网络(四)

——目标检测与YOLO算法

(原创内容,转载请注明来源,谢谢)

一、概述

目标检测,主要目的是在图片中,分类确认是否有需要的物体,如果有则标出对应的物体。

二、目标定位

目标定位(object localization),目的是确定物体的位置。为了得到物体的位置,需要对softmax输出的结果进行改造,增加输出的结果。

原来一个四分类softmax,输出结果是1*4,标记该结果的值。为了实现目标检测,则需要增加输出标记图片中心点横纵坐标、图片长宽、是否有感兴趣的图片等字段。

如下图所示,假设图片左上角坐标(0,0),右下角坐标(1,1):用bx和by标记输出结果中心位置的横、纵坐标相对于整个图的位置(因此都小于1);用bw、bh标记坐标的宽度和高度相对于图片的比例(因此也都小于1)。另外,用字段pc标记图片含有目标物体的概率,当pc很小时,表示该区域不存在目标物体,则不关心其他的值。

三、特征点检测

对于一张图片,有时候要关注图片内部的某些点,如人眼的四个眼角等,则此时输出值更多,不止bx和by,将会包含多组的x和y,标记各个关注点的位置,这称为特征点检测(landmark detection)。

延伸出去,对于一幅图片关注的n个点,需要增加2n个输出,即每个点都需要对应的x和y坐标。

四、滑动窗口法目标检测

要检测一幅图中是否有目标物体,可以采用滑动窗口法(sliding windows)。

1、做法

滑动窗口法:1)初始设定一个窗口和滑动的步长,从图片左上角开始,按照步长依次检测每个小方块对应的图片,是否存在目标物体。2)遍历完整幅图片后,选择大一些的窗口,再次上述操作。3)可多次选择不同的窗口进行操作,直到获取想要的物体。

2、缺点

由于每次判断一个窗口是否含有目标物体,都需要进行卷积、池化、全连接、softmax等,因此这样计算量大。考虑到滑动窗口过程中,存在很多重叠的部分,因此可以优化。

五、卷积的滑动窗口

1、全连接层转回成卷积层

要实现快速计算滑动窗口,首先需要修正输出,把原先softmax的输出,转化成卷积常见的维度形式。例如1个四分类的softmax,原来输出的是1*4,现在需要拓展成1*1*4的结果。

对于1一个14*14*3的窗口,可以经过下面的卷积路径得到1*1*4的矩阵。这即全连接成转成卷积层,目的是为后面做理论基础。

2、卷积滑动窗口

现假设窗口是14*14*3,图片大小是16*16*3,设步长为2,则按照正常的滑动窗口,需要计算4次卷积。

当使用上面的fc转conv方法时,可以按照把14*14*3转成1*1*4的卷积路径,对16*16*3的图片使用同样的方式卷积,则会得到一个2*2*4的结果。经过验证,这个2*2*4的结果,左上角的1*1*4即滑动窗口在图片左上角的结果,右上、左下、右下同理。

同理,可以扩展到28*28*3以及更大的图片。

这样做的好处,即是一次卷积运算,可以得到滑动窗口需要移动若干次才能得到的结果,加快了计算速度。

存在的缺点,是无法准确预测边界框。

六、YOLO算法

1、概述

YOLO算法,是比较常用的目标检测算法,包括边界框预测、非极大值抑制、anchor boxes等概念,下面一一介绍。

2、边界框预测

边界框预测(bounding box),即一开始就确定好图像的边界框,例如3*3(更常用的是19*19),然后得到结果。这里的结果也是一次计算得到的,和上面的滑动卷积窗口的计算方式一样。

这里需要说明的是,这样计算时,得到的bx和by仍小于1,但是bw和bh可能会大于1。因为图像有可能超出划定的这个小方框。

3、交并比

交并比(intersection over union,IoU),是用于计算两个图片重叠程度与相似程度的。这里用到的交集和并集的概念,这里的交集是两幅图片的共同部分,并集是两幅图片总的区域。

IoU的计算,目的是为了后面非极大值抑制做理论基础。

IoU=交集面积/并集面积,通常来说IoU≥0.5时说明两个图片相似。0.5这个值可以理解成阈值,也可以设定成0.6或者更高,但是很少设定成小于0.5的值。

4、非极大值抑制

由于滑动窗口过程中,步长如果设定的不太好,可能出现对于同一个物体,多次被输出,如下图所示。

非极大值抑制(non-max suppression),就是为了剔除重复的目标检测结果。步骤如下:

1)在所有找出的边界框输出中,剔除pc≤0.6的边界框。由于比0.6小,表示这里圈出的物体是目标物体的概率不大,故不考虑。

2)选出此时最大的pc对应的边界框,输出该边界框,并剔除该边界框。

3)再次选出此时最大的pc对应的边界框,与输出的边界框进行IoU的计算,如果IoU的结果≥0.5,则认为这个边界框和已经输出的边界框相似,则不输出边界框;否则输出边界框。处理完毕后,剔除该边界框。

4)重复步骤3,直到处理完所有的边界框。

5、anchor box

上面的处理过程,都没有考虑一个图片中出现两个物体的情况,anchor box就是为了处理这个情况的。

考虑下面这张图,人和车重叠了,而且中心位置接近,则此时为了准确获取输出结果,还需要对输出进行改造。

假设输出结果可能的有两种形状(称为两个anchor box),则先预设这两个形状,然后把输出的y扩充成两倍的长度,分别有pc1和pc2来表示该输出存在物体1的概率和存在物体2的概率,其他参数如bx、by等同样也都需要,如下图所示:

Anchor box无法解决的问题:超过预设anchor box个物体的重叠(如上图定义了两个anchor box,但是有三个物体重叠),或两个物体的形状非常相似且重叠(如两个人靠的非常近)。

解决方案:讲边界框切割的更小,通常不用3*3,而用19*19。

说明:边界框通常需要人工设置,根据图片以及关注的物体的样子进行设定。也可以使用K-Means算法,确认分类结果并且设定对应的anchor box。

6、YOLO总结

YOLO是一个非常快速的目标检测的算法,实际中通常设置边界框为19*19,设置anchor box 5个左右。最终输出的y,维度是 边界框维度*边界框维度*(5+分类数)*anchor数,这里的5,指的是pc、bx、by、bh、bw。

七、R-CNN

除了YOLO,还有一种思想可以解决目标检测。

考虑到YOLO,需要对图片中大量没有目标物体的位置进行计算,因此可以考虑指定区域进行计算。这里R-CNN的R,即region(区域),这个算法又称为RPN(region proposal network,候选区域网络)。

主要做法,是先加一个区域选定算法,把图像分成若干区域。然后再根据每个区域的大致形状,类比目标物体的形状,对于可能的形状进行卷积判断,如下图所示:

由于这样相当于要对图像进行两次处理,因此速度远远慢于YOLO。这个算法经过若干的改进,包括用卷积来划分区域、用卷积来滑动窗口等,但是速度还是比YOLO要慢。

——written by linhxx 2018.03.13

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-03-13,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 决胜机器学习 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档