目标检测入门_下(吴恩达老师深度学习课程笔记)

 

目录

交互比(Intersection over union)

非极大值抑制(Non-max suppression)

Anchor Boxes

YOLO算法

候选区域(Region proposals )


交互比(Intersection over union)

交互比可以用来判断检测算法的好坏

黄色面积除以绿色面积,IoU的面积>0.5(阈值),则检测正确。

非极大值抑制(Non-max suppression)

假设需要在这张图片里检测汽车,按照上个博客中提到的bounding box方法,假设上面放个19×19网格,这辆车只有一个中点,所以理论上应该只有一个格子做出有车的预测。但是在实践中,对于每个格子都运行一次目标定位算法,会可能让多个格子都认为这个车的中点在这个格子内,即最后可能会对同一个对象做出多次检测,而非极大值抑制就是确保一辆车只检测一次,而不是每辆车都触发多次检测。

具体做法:这里的公式简化了,假设只检测一类C1,所以Pc直接用C1代替,Pc表示是C1类别的概率(实际上是Pc乘以c1c2c3 )。

先把概率小于0.6的预测格子删除(这样可以加快运算速度),如下图。

注 :这里蓝色框可以大于划分的小格,是因为bw,bh可以大于1(上篇博客有讲)。

接下来剩下的边界框,就一直选择概率Pc最高的边界框,然后把它输出成预测结果(高亮),同时把剩下边界框与下图高亮的边界框有高IoU值的边框去掉。

这里的一直选择很重要,等于是先选出概率为0.9的这个框,然后通过非极大值抑制(即去除高IoU),去除面包车旁的两个框,然后再剩下的框中选择概率为0.8的框,然后循环迭代,直到没有多余的框

这样就实现了每次只用一个框识别出一个车,每个车都只被检测一次,如果直接选择最高概率的框,这只能一张图中只能检测到一辆汽车了。

Anchor Boxes

让一个格子检测出多个对象的方法。

      

假设要分类两个目标,车和行人,则预先定义几个不同形状的anchor box(人工设定,也有自动的一些算法),这里举例两个,然后输出的Y则是之前两个y合并的向量。

之前Y的输出是3×3×8,现在有两个anchor box后,Y的输出是3×3×16,预测出的两个框(紫色),和标记的红框相比,选择IoU(交互比)高的作为预测框

YOLO算法

构造训练集:

(定义了两个anchor box)

实践中,会把格子划分的更小如19×19,anchor box设置的更多如5个

中间的省略号是 卷积神经网络(其中全连接层用卷积层代替,所以可以输出一个3×3×16的张量,表示有3×3个y)

YOLO检测过程

首先每个格子预测出两个anchor box

 然后去掉概率值低的anchor box

然后对每个分类目标运行非极大值抑制方法得到最终的预测结果。

候选区域(Region proposals )

典型代表是著名的R-CNN的算法,意思是带区域的卷积神经网络。这个算法尝试选出一些区域,在这些区域上运行卷积网络分类器是有意义的,而不需要对整个图像的每个格子都运行检测算法,而是只选择一些窗口,在少数窗口上运行卷积神经网络。

选出候选区域的方法是运行图像分割算法,分割出不同的色块,然后在每个色块上运行分类器,最后输出一个标签和边界框。

但实际上会分割出很多色块,导致R-CNN算法太慢了,所以这些年来有一些对R-CNN算法的改进工作

例如 —

fast R-CNN在分割出的每个色块中运行卷积实现的滑动窗口(即没有全连接层)

faster R-CNN使用卷积神经网络而不是传统的分割算法来获得候选区域色块

注:吴恩达老师认为大多数Faster R-CNN的算法实现还是比YOLO算法慢很多,虽然候选区域是一个有趣的想法,但这个方法需要两步,首先得到候选区域,然后再分类,这不如YOLO可以只看一次更直接。