CV《物体识别与检测3 - 多目标识别的优化技术》
本文是根据Andrew Ng的深度学习视频学习,自己总结的。这一系列先只学习关键技术和设计,具体的实例等下一期进行。
这里讲一些在YOLO中经常用到的一些概念和优化算法。
一:交并比(Intersection over union)
如何衡量两个区域的重合度呢?也就是看看两个区域的相似程度。
假设有两个区域A和B,
也就是用区域的重合交集面积比上总的并集面积,取值在0~1之间,取值越大,重合度越高,两个区域越相似。一般取一个阈值,大于该阈值,即可认为是相似区域,即A和B所要描述的是一个区域,这个阈值一般取0.5,如果要求严格一点可以取0.6甚至是0.7更大的值。
二:非极大抑制(Non-max suppression)
顾名思义,不是最大的就抑制住。
当我们划分完子域后,建立了模型,训练完毕后,对某个测试图像进行测试,结果发现有一些临近的子域都是在试图举手表明自己该区域发现了某个物体,且都给出了自己的置信概率度Pc,如下图,我们一看,输出了好几个结果,但是其实就是两个结果是最好的。怎么用算法得出我们想要的结果呢?
非极大抑制算法过程如下:
1:将所有的物体检测输出都放到一个“容器(程序上的)”内,先过丢弃Pc小于某个阈值的,加入是0.6的,我们要求严格一些。
2:找到最大Pc的物体检测区域A,输出这个预测,得到了一个结果。
3:计算其他“容器”内所剩下的同类别的预测和A的IoU值,将IoU大于某个阈值的区域也去抑制掉,丢弃掉,因为很可能是在描述同一个物体,严格一点的话,阈值可能是0.6/0.7。
4:重复步骤2,直到“容器”内为空了。
这个思路很简单,我就是想得到大概率有物体的区域,且把重合度高的区域的预测给屏蔽。
有一点需要明确的是,非极大值抑制是同类别之间的抑制,不同类别的话就不用这个操作了。
三:Anchor Boxes
之前说,如果出现了多个物体中心点出现在一个区域如何处理,我们给出的方案是,适当增加区域M的划分,减少重合概率,其实就是这里要讲的方法。
我们之前通过单目标检测和多目标检测都是划定了一个区域(单目标检测都是将整个图像作为唯一的区域,多目标检测是将图像划分到了MXM个子区域),每个区域都是1X1X(1+4+N)的张量,这个输出和标签的设计就限制了我们再一个区域内检测物体的数目只能是1个,那么Anchor Box的做法就是修改标签设计,使得每个区域可以有多个物体的中心点,如下:
不管是单目标检测还是多目标检测,在每个区域内的标签张量都是
Y = [Pc,Bx,By,Bh,Bw,C1,C2,…,CN]
现在对齐做出改变
Y = [Pc,Bx,By,Bh,Bw,C1,C2,…,CN,Pc,Bx,By,Bh,Bw,C1,C2,…,CN]
或者是
Y = [Pc,Bx,By,Bh,Bw,C1,C2,…,CN,Pc,Bx,By,Bh,Bw,C1,C2,…,CN,Pc,Bx,By,Bh,Bw,C1,C2,…,CN]
等等等等。
将其重复设置两个位置出来,就提供了在一个区域内检测多个物体的可能性。一半情况下,一个区域内出现两个已经是比较罕见了,因为如果你已经采用了比较大的M区域划分,那么久已经很大概率减少了这种情况出现的可能性,所以一般情况下设置2个Anchor的位置即可。
那么在人为打标签的时候,也就多了一些信息,如果设置Anchor Box是2个,区域划分是M,在一个图像内就可以检测 2 X M X M个物体了。
最后都是要经过非极大值抑制的,使用了Anchor box后一个区域内现在可以输出多个物体的检测预测,再去抑制其他跟自己同类别的IoU大于某个阈值的预测,步骤都是一样的。