学习

目标检测算法

2022-09-21  本文已影响0人  小黄不头秃

(一)目标检测算法的介绍

(1)R-CNN

算法的核心是,首先使用启发式搜索算法来选择锚框。使用与训练模型对锚框内的特征进行抽取。训练一个SVM来对类别分类。然后是训练一个线性回归模型来预测边缘框偏移。

rcnn

这里有一个重要的问题是,锚框的大小是不确定的。那就出现了一个问题,怎么来组成一个形状一样的batch呢?这个模型使用的是兴趣区域(Rol)池化层。

rol pooling

给定一个锚框,将其均匀的分割成n x m块,输出每一块里面的最大值。所以就能做到输出总是n*m个值。

(2)Fast RCNN

这是对R-CNN的一个改进,R-CNN在抽取特征的时候是对每一个锚框里面的内容进行特征提取,这将会花费大量的时间。Fast RCNN想要做到更快,于是它选择先使用CNN对图片抽取特征形成feature map。然后再在图片上锚框,但是抽取特征的时候是按照锚框的比例在feature map上提取特征。然后再用兴趣区域(Rol)池化层生成固定长度的特征。然后就可以接入分类预测和边缘框预测了。

fast rcnn
(3)Faster RCNN

他觉得fast rcnn还是不够快,我能不能再快一些?那么改进的关注点放在了启发式搜索锚框算法。他们发现这个算法还是过于冗杂了,能不能使用神经网络来代替呢?锚框的选择算法变成了区域提议网络

faster rcnn

我们从图中可以看出,他将CNN输出的feature map作为了区域提取网络(region proposal network)的输入,输出是一堆锚框。然后把锚框再通过另一个二分类的网络,目的是看看锚框选择是否合适,然后对合适的锚框进行边缘预测。然后去掉一些类似的锚框,这时锚框的选取就结束了。

然后和上面的网络一样,对图片锚框区域映射feature map。不同大小的feature map区域经过Rol之后,进入到图片分类和边缘预测。

(4)Mask RCNN

无限套娃,他又在原来的基础上加了一个FCN。如果有像素级别的标号,那么我们需要对每个像素都要预测。因为使用了Rol的预测精度是比较模糊的。例如在图像分割上他的边界就会比较模糊。

mask rcnn

Mask R-CNN是基于Faster R-CNN修改而来的。
具体来说,Mask R-CNN将兴趣区域汇聚层替换为了
兴趣区域对齐层,使用双线性插值(bilinear interpolation)来保留特征图上的空间信息,从而更适于像素级预测。
兴趣区域对齐层的输出包含了所有与兴趣区域的形状相同的特征图。
它们不仅被用于预测每个兴趣区域的类别和边界框,还通过额外的全卷积网络预测目标的像素级位置。

总结
(5)单发多框检测(SSD,single shot detection)

生成锚框:就是上一篇“物体检测”中讲到的算法,对每一个像素,以他为中心生成一些锚框。相对RCNN系列比,生成锚框将会更高效。

ssd

我们先看他的主干,先通过一个基础网络来抽取特征,然后接下来多个多尺度特征块,会对特征图的高宽减半,重复很多次。
然后每一个段都会生成一些锚框。底部段用于拟合一些小物品,顶部的特征图用俩预测大的物体。
对每一个锚框都要预测类别和边缘框。

这个算法相对速度比RCNN更快但是比RCNN的精度低了很多。

总结
(6)YOLO(只看一次)

SSD中的锚框方法有大量的重叠,因此浪费了大量的计算。YOLO将图片均匀的非为S X S个锚框。每个锚框预测B个边缘框

它是将图片像切蛋糕一样,平均的分成多个锚框,现在的锚框当然是没有重叠的。但是出现了一个问题就是如果有一个物体出现在锚框的边界怎么办呢?于是就必须让每个锚框把预测每一个类别的边缘框(假设共有B类)

上一篇下一篇

猜你喜欢

热点阅读