总结各种物体检测算法

第一,覆盖所有基于区域的目标检测算法,包括:Fast RCNN, Faster-RCNN, Mask RCNN, R-FCN, FPN.

第二, 介绍SSD算法(single shoot detectors)

第三,介绍所有算法的表现和实现细节。

Part1 我们从基于区域的物体检测器中学到了什么?Part2 我们从SSD中学习到什么?Part3如何选择设计思路以及目标检测趋势

首先介绍滑动窗口检测器 sliding-windows detectors,(在基于anchor机制的RPN网络中使用滑动窗口和此处的滑动窗口作用不一样,后面会介绍)

最先使用物体检测器时,是使用暴力遍历所有方块(这些方块就是靠滑动窗口从左到右,从上到下使用分类算法判断这个窗口内的东西是不是我们想要的内容)。为了检测各种距离下的不同物体类型,我们使用不同大小的窗口和不同比率。

每滑动一次分出这部分的patch块,我们变形每个块到固定大小再输入到多个分类器。然而,我们训练不同的分类器来处理变形的图像是不会影响分类精度的。变形的图像块输入到CNN网络中来提取4096个特征图。然后使用SVM(one vs all)来识别类别以及使用另外的线性回归器来收紧bounding box.

伪代码:

for window in windows:
    patch = get_patch(image, window)
    results = detector(patch)

再介绍一下windows框框选择的算法:selective search(SS)

代替了原始暴力方法,我们使用一种提议区域方法 (SS) 来生成感兴趣区域(regions of interest ROI). 在SS方法中,开始时我们以每个独立的像素作为自己的组,然后,计算每个组的纹理并结合两个最相近的像素到一个组。但为了避免出现平凡解(只有一个区域),我们首先更倾向于首先聚集更小的组。我们一直合并这些小组直到该合并的小组都合并完了,在下面第二行的蓝色矩形框展示了处理过程中产生的所有可能的ROI 区域。绿色方框是我们想要检测的目标物体。


RCNN:

鼻祖RCNN,利用提议区域方法来生成大约2000个ROI。这些区域变形到规定大小图像并“喂到”训练好的CNN网络中。得到图像的feature maps后连接到全连接层来分类物体,并缩小其boundary box(by regressor)。




ROIs = region_proposal(image)
for ROI in ROIs:
    patch = get_patch(image, ROI)
    results = detectors(patch)

Boundary box Regressor:

区域提议方法是密集计算型(很明显看出来每张图片要提出2000个区域再输入到CNN中,在分类、回归,计算量太大),为了加速过程,我们经常挑一些计算不复杂的区域提议方法来生成ROI ,然后输入到一个线性回归模型(使用全连接层,全连接层也就是线性回归模型Wx + b)来进一步限定boundary box.

Fast RCNN

原RCNN需要很多的提议来更精确,但是其中有很多是重叠的。RCNN在训练和推断过程中都是很慢,当我们有2000个提议时每个提议区域块都需要单独地输出到CNN网络,也就是我们重复2000次特征提取过程。

在CNN中的特征图表示在更加密集的空间中的空间特征。我们思考能不能使用feature map来代替原图检测物体呢?



这就是Fast RCNN的创新点:不去从每个图像块中提取特征,而是使用一个特征提取器(一个CNN网络)来为整个图像提取特征。然后我们在特征图上应用区域提议方法。例如FastRCNN 选择从VGG16架构的conv5得到的featuremap中,来生成ROI区域,然后结合对应的特征图来构成物体检测的块。我们将生成的块变形到规定大小,使用ROIpooling 操作并将块输入到全连接网络用来分类和定位。



伪代码如下:

feature_maps = process(image):
ROIs = region_proposal(feature_maps)
for ROI in ROIs:
    patch = roi_pooling(feature_maps, ROI)
    results = detector(patch)

FastRCNN 使用多任务损失(multi-task loss)来计算总损失。

介绍下ROI pooling,和max/ average pooling的性质类似,目的是降维,便于管理,减少网络参数和运算次数(间接控制过拟合),是网络对输入图像的微小变换、失真、和平移更鲁棒(因为取的是最大值或者平均值),还能得到尺度不变的图像(无论物体在图像的哪个地方都可以检测)

但是ROI pooling主要是为了变形那些ROI区域到一个固定大小块。

具体流程(将8*8的feature map转换到2*2大小):下面四张图右上角表示我们使用ROI(蓝色)感兴趣的框框框定featuremap.

左下:我们分离ROI区域到目标维度。例如想要2*2 的目标区域,我们将ROI划分成4个小节具有相同或相似的大小。

右下:找到每个小节上最大的值放入到目标块上,就得到了我们变形的特征图。


总结:fast RCNN的贡献在于将原来分散的模块,统一到一个网络当中,并使用图像输入到CNN的特征图来提取特征块,网络只需要训练一次,推断也很快,并使用ROI pooling得到目标大小的块。 

接下来就是Faster RCNN:

Fast RCNN 的主要缺点还是在于需要一个外部的区域提议算法类似SS。然而,这些算法在CPU上很慢,在测试时FastRcnn处理每张图片需要2.3秒,其中2秒都是用来生成2000个ROI。

那么Faster RCNN就是为了避免这个问题而应运而生, Faster 和Fast的结构几乎一致,除了Faster使用一个内部网络RPN来代替原来的SS区域提议方法。RPN在生成ROI时比ss快10ms。其实也没快多少(所以还有继续做文章,例如简历一个稀疏表达方法,来约束众多的提议区域,还有使用NMS非极大值抑制)。




RPN网络以卷积网络的特征图输出作为输入。使用3*3filters在特征图上滑动来生成不可知类别的提议,使用一个类似ZF网络的卷积网络。其他网络如VGG or ResNet 可以被用来更全面的特征提取。ZF网络输出256个值,并将其输入到两个分离的全连接层来预测一个boundary box 和2个物体打分。这个物体打分衡量这个box中是否包含物体(前景和背景)。我们可以使用一个回归器来计算单个物体分数但是太简单了,Faster使用一个分类器具有两个可能的类别:一个是有物体,一个没有物体(背景类别)。


对特征图上每个定位,RPN生成K个猜测,因此RPN输出4*K个坐标(包括左下角的xy, 还有框框的height,width)还有2*k(前景和背景类别)的打分在每个定位上。

下面图例显示了8*8的特征图,使用3*3的卷积核,输出总共8*8*3(k = 3)个ROI感兴趣区域。右边的图显示了在每个定位上生成的3中提议。


我们得到3个猜测并且允许之后更精确我们的猜想。当我们只需要一个是正确的时候,若初始的猜测很不一样的话我们将更好的抛弃。因此Faster 不能生成随机的boundary box 提议。而是去预测一个抵消补偿offset(不是很懂???)deltaX, deltaY, 和一些参考的box的左上角相关 称为anchors(这个也不是很懂,我经常看到的是一群点,先做个聚类,聚类中心称为anchor,图像中的anchor是个啥,还需要看看源码去,留坑),但是这些补偿值的约束下,我们猜测一定程度上和anchor相关。


为了预测每个位置的k个预测,我们需要k个锚点,其锚点在每个位置的中心。每个预测关联这一个特定的锚点,但不同的定位共享相同的锚点形状。


这些锚点都是很仔细的预筛选后,所以他们多种多样的,覆盖了实际生活中不同尺度和比例的物体形状。这个知道初始训练使用更好的猜测并允许每个预测在一个特定形状中确定下来。这种策略使得训练更稳定和简单。

Faster使用很多锚点。部署了9个锚点框:3中不同尺度,三种不同比率。ZF网络提取256特征,每个位置使用9个锚点,生成2*9个物体打分和4*9的坐标。



其实Anchor也称为先验或者是默认的boundary boxes。


  • 8
    点赞
  • 56
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
OpenCV是一个流行的计算机视觉库,它提供了用于图像处理和计算机视觉任务的各种功能和算法。要测量物体的偏移量,可以使用以下步骤: 1. 图像预处理:从摄像机获取图像后,首先需要对图像进行预处理,以便提高后续处理的精度和效果。预处理步骤可以包括图像去噪、图像增强、图像平滑等。 2. 物体检测和跟踪:使用物体检测算法(如Haar分类器、HOG+SVM分类器或深度学习模型)来检测图像中的物体。一旦物体检测到,就可以使用物体跟踪算法(如卡尔曼滤波器、基于Kalman滤波的MeanShift算法等)跟踪物体的运动。 3. 物体偏移计算:一旦物体被跟踪,可以使用相邻图像帧之间的物体位置信息来计算物体的偏移量。这可以通过计算物体在图像中的中心坐标的差异来实现。实际上,可以根据应用需求计算物体在水平方向和垂直方向上的偏移量。 4. 偏移量分析和应用:计算得到的偏移量可以用来分析物体的运动趋势和速度,也可以用于控制其他设备或系统。例如,偏移量可以用于机器人导航,自动驾驶车辆的跟踪和避障等。 总结来说,通过在OpenCV中使用物体检测和跟踪算法,以及计算图像帧之间物体位置信息的差异,就可以实现物体偏移的测量算法。这种算法对于各种应用领域,如计算机视觉、自动化和机器人等都有广泛的应用。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值