吴恩达deeplearning.ai《卷积神经网络》-目标检测(三)

目标定位

image classification图像分类,解决识别出图像中是否是汽车
classification with localization图像分类并定位,识别出图像中是否有汽车,并且用方框圈出来位置
detection目标检测,图像中有多个车辆或行人等事物,同时用方框圈出来其位置
在这里插入图片描述
为了实现图像分类并定位,我们要求神经网络的输出,不仅有softmax的分类结果,还要输出识别结果的位置信息,形成bounding box(bx,by,bh,bw)。bx,by为横纵坐标,bh为图像框高度,bw为图像框宽度
在这里插入图片描述
故,我们的输出结果构成了向量y = [pc bx by bh bw c1 c2 c3]。pc表示图像中,是否有我们要识别的物体。也就是当图像中存在类1(pedestrian),类2,类3时,pc=1。c1,c2,c3为物体最后归属于哪一类。

那么也就是当pc=1时(图像中存在我们要检测的物体),后面的bx,by,bh,bw,c1,c2,c3有意义。当pc=0时(图像中不存在我们要检测的物体),后面的数字多少是无所谓的。

所以,我们的损失函数(以平方误差举例),

在y=1时,L(y^, y)=(y1^ - y1)2+(y2^ - y2)2+…+(y8^ - y8)2
  y=0时,L(y^,y)= (y1^ - y1)2
在这里插入图片描述

特征点检测

我们还可以识别图像中的特征点(landmark),如人的眼角位置。那么也就是左外眼角,左内眼角,右外眼角,右内眼角。分别让神经网络输出为(l1x,l1y);(l2x,l2y);(l3x,l3y);(l4x,l4y)。假如人脸上我们取64个特征点,那么我们可能能检测出人是否微笑,脸型,等等功能。Snapchat APP中,可以给人脸照片上加上帽子,皇冠等功能,其基础就是landmark detection这项技术。

同样,在运动姿态检测中,我们也可将头的位置,肩膀位置,手肘位置……标记为特征点。那么我们就可以检测出一个人的运动姿态。
在这里插入图片描述

目标检测

首先将我们的训练集切割成合适的形状。训练集中正例都是我们要识别的汽车。我们可以让训练集的图像中,汽车处在最中间,并且只有汽车。
在这里插入图片描述
使用小,中,大的方框,在检测图片上进行滑动操作。

缺点:

对于神经网络来说,每一次滑动都要进行计算。而神经网络的计算成本,要高于其他检测算法。故,这个方法对于计算成本要求很高。
在这里插入图片描述

卷积的滑动窗口实现

我们可以使用卷积层来代替全连接层,而达到原来全连接层的功能。

做法:

传统的全连接层,就是把5×5×16的图像节点,展开成1维的向量。即,展开成5×5×16=400的(400,1)维向量。我们可以使用5×5×16的filter,对5×5×16的图像节点进行卷积操作。那么最后得到的节点,同样是1×1×400的图像。在数学中,一个向量(400,1)与1×1×400的图像是等价的。故,我们可以用卷积操作来代替全连接的操作
在这里插入图片描述
如果我们将代替全连接层,产生的卷积操作结果。从1×1×400修改成2×2×400,那么在2×2这4个格子中,我们就会发现:左上角的格子,对应了原图中左上角14×14的图像。右下角的格子,对应了原图中右下角14×14的图像。

因为当我们的输入图像为14×14时,我们使用了同样大小的filter,最后会产生1×1的结果。故同样的网络结构与filter大小。当我们把图像进行padding两个像素后,最后产生的2×2的结果。相当于16×16中,取出14×14。

MAX-POOLING的大小为2,这相当于以2的步幅,在原始图像上分次应用神经网络。

在这里插入图片描述
故,应用这种方法,相当于代替了原图像滑动窗口,并不停进行卷积操作。滑动窗口时,卷积进行的相同计算,可以被利用。达到14×14的图形框,在原始图像中进行检测的原理。
在这里插入图片描述

Bounding Box预测

我们可以看到虽然使用滑动窗口的方法可以检测到汽车。但是,我们最终目的是需要输出汽车的位置方框。由于步幅大小问题,我们的滑动窗口方框,并不一定能完美的覆盖上整个汽车。
在这里插入图片描述
YOLO算法的步骤就是:将图像分成9(S×S)个格子,在每个格子中分别进行卷积操作。若某个物体的中心位置的坐标落入到某个格子,那么这个格子就负责检测出这个物体。
故9个格子会输出9个向量,最后结果构成3×3×8的输出图像。
在这里插入图片描述
我们如何标记红色位置矩形框,对于每个格子我们设定其左上角为坐标系(0,0)点,右下角为坐标系(1,1)点。故我们可以表示出物体中心位置的坐标。如图中其中心点坐标位于第二行第三个格子的(0.4,0.3)的位置。其次我们用跟方框长度的比例,来表示位置矩形框的长和宽。如图中,长度为边长1的0.9倍,那么也就是0.9。宽度为0.5倍。

注意:

由于坐标系,我们的中心点坐标一定小于1。边长的长宽比例,可能大于1。
在这里插入图片描述

交并比

当我们需要评价物体识别的效果的时候,即算法标记的方框与实际的方框重合程度。我们可以采用交并比函数(intersection over union),即IoU。
其思想就是用两个图像框的交集 除以 两个图像框的并集。

并集(绿色)

在这里插入图片描述

交集(黄色)

在这里插入图片描述

我们一般约定loU大于等于0.5时,可以说算法识别正确。

在这里插入图片描述

非极大值抑制

当实际使用时,我们经常会遇到算法对于同一个目标识别了多次。即,一辆车,可能有多个不同的位置矩形框。故,我们采用了方法:非极大值抑制(Non-max suppression)
当我们用算法跑19×19个格子时,理论上我们汽车的中心点只有一个。但是实际中,由于是分类算法。可能有多个格子中都识别到了汽车,即多个格子都认为汽车的中心点,属于它们自己的那个格子。所以会产生多个位置的方框。
在这里插入图片描述
我们首先让输出结果Pc不在输出0或1,而是可能为汽车类对象的概率。如,方框一可能为汽车的概率为0.9,方框二可能为汽车的概率为0.7,方框三可能为汽车的概率为0.6。
在这里插入图片描述
我们让概率最大的矩形(0.9),看做最可靠的检测。其他跟概率最大矩形,有很大重叠率(Iou)的矩形就会被抑制。

我们可以看到左边的汽车其中有方框概率为0.7,右边汽车也有方框概率为0.7。故,Iou大的,即右边汽车0.9的方框与右边汽车0.7的方框有重叠。那么,右边汽车0.7的方框即被抑制。
在这里插入图片描述
当然我们也可以直接丢弃掉,被抑制的方框。
在这里插入图片描述
算法的步骤:
首先输出每个格子的结果向量
丢弃掉所有概率 <= 0.6的方框

对于剩下的方框
我们找出概率最大的那个方框,作为预测值。
丢弃掉与剩下这个方框重叠率高的方框(IoU>= 0.5)
在这里插入图片描述

Anchor Boxes

目前我们的一个格子只能检测出一个对象,为了让我们的一个格子可以检测出多个对象。我们可以采用Anchor Boxes算法。

如下图,我们可以看到一个格子中,女士的中心点和汽车的中心点都处在同一个格子。那么由于女士一般都是高一点的方框,汽车一般都是宽一点的方框。故我们可以定义两种类型的Anchor Box,来表示汽车和女士。那么输出向量也变为两套输出。y^ = [pc bx by bh bw c1 c2 c3 pc bx by bh bw c1 c2 c3]
在这里插入图片描述
我们的输出的物体,不光其中心点分配到格子中,还要将物体分配给一个anchor box。也就是我们要看预测的矩形框与两个anchor box的重叠率(IoU)。跟某一个anchor box重叠率高的话,即可以认为识别物体属于某一类。(跟人的anchor box重叠率高,那么其分类矩形框很可能是人)
故,我们输出向量变为3×3×16维
在这里插入图片描述
我们可以看到同时有人和车的情况输出的向量,如左边第二个向量所示。而只有汽车,没有行人的情况,如左边第三个向量所示。

Anchor box的缺点:

1.一个格子中有三个物体同时出现,但是我们只设定了两个anchor box。算法无法解决

2.两个物体形状相似(即卡车和汽车的形状相似),导致了anchor box也相似。那么导致算法无法区分。

遇到这些情况,我们需要设定一些默认处理,来避开这些问题。实际中,多个物体出现在同一格子的概率,本身就很小。

对于选定合适的anchor box形状,原来我们采用人工选定形状。在后期的YOLO算法中,我们采用k-means聚类算法,将两类对象形状聚类,用来选择anchor box形状。
在这里插入图片描述

YOLO算法

YOLO算法的运行步骤如下:
在这里插入图片描述
在这里插入图片描述
如果我们有两个anchor boxes,那么对于每一个格子,我们都有两个预测的图像框。
在这里插入图片描述
这时,我们抛弃概率低的图像框。得到下图
在这里插入图片描述
再运行非极大值抑制,得到最终的预测结果
在这里插入图片描述
在这里插入图片描述

RPN网络

region proposals候选区域
传统的滑动窗口算法运行效率十分低,消耗大量计算资源。当我们采用卷积操作实现滑动窗口的功能时,我们可以发现在完全没有识别物体的地方。我们完全没有必要进行窗口识别。如,天空和大地的位置,我们没有必要进行大量的滑动窗口识别,会消耗大量计算资源。

所以,我们引入了色块来区分每一个区域。segmentation algorithm分割算法,比如人整体可能相近于一个色块,汽车相近于另外一个色块。我们在每个色块上(可能有2000个色块),进行分类算法。就能减少大量的计算资源。
在这里插入图片描述
R-CNN:采用了传统的滑动窗口,实现效果。
Fast R-CNN:加入了卷积操作来改进滑动窗口。提高了效率
Faster R-CNN:对于区域分割过程中,传统的算法采用了聚类来选择区域。Faster R-CNN,使用了神经网络来进行色块选择区域。进一步提高了效率。

大多数情况Faster R-CNN可能比YOLO算法运行速度慢。

在这里插入图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值