计算机视觉——典型的目标检测算法(Fast R-CNN算法)(五)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了计算机视觉——典型的目标检测算法(Fast R-CNN算法)(五)相关的知识,希望对你有一定的参考价值。

参考技术A 【嵌牛导读】目标检测在现实中的应用很广泛,我们需要检测数字图像中的物体位置以及类别,它需要我们构建一个模型,模型的输入一张图片,模型的输出需要圈出图片中所有物体的位置以及物体所属的类别。在深度学习浪潮到来之前,目标检测精度的进步十分缓慢,靠传统依靠手工特征的方法来提高精度已是相当困难的事。而ImageNet分类大赛出现的卷积神经网络(CNN)——AlexNet所展现的强大性能,吸引着学者们将CNN迁移到了其他的任务,这也包括着目标检测任务,近年来,出现了很多目标检测算法。

【嵌牛鼻子】计算机视觉

【嵌牛提问】如何理解目标检测算法——Fast R-CNN

【嵌牛正文】

        为克服SPP-Net 存在的问题,2015 年Girshick 等提出基于边界框和多任务损失分类的Fast R-CNN[31]算法。该算法将SPP 层简化,设计出单尺度的ROI Pooling 池化层结构;将整张图像的候选区域采样成固定大小,生成特征图后作SVD分解,通过RoI Pooling层得到Softmax的分类得分和BoundingBox 外接矩形框的窗口回归两个向量;用Softmax 代替SVM 提出多任务损失函数思想,将深度网络和SVM分类两个阶段整合,即将分类问题和边框回归问题进行合并。

算法详解:

Fast R-CNN的流程图如下,网络有两个输入: 图像和对应的region proposal 。其中region proposal由selective search方法得到,没有表示在流程图中。对每个类别都训练一个回归器,且只有非背景的region proposal才需要进行回归。

ROI pooling:ROI Pooling的作用是对不同大小的region proposal,从最后卷积层输出的feature map提取大小固定的feature map。简单讲可以看做是SPPNet的简化版本,因为全连接层的输入需要尺寸大小一样,所以不能直接将不同大小的region proposal映射到feature map作为输出,需要做尺寸变换。在文章中,VGG16网络使用H=W=7的参数,即将一个h*w的region proposal分割成H*W大小的网格,然后将这个region proposal映射到最后一个卷积层输出的feature map,最后计算每个网格里的最大值作为该网格的输出,所以不管ROI pooling之前的feature map大小是多少,ROI pooling后得到的feature map大小都是H*W。

因此可以看出Fast RCNN主要有3个改进:1、卷积不再是对每个region proposal进行,而是直接对整张图像,这样减少了很多重复计算。原来RCNN是对每个region proposal分别做卷积,因为一张图像中有2000左右的region proposal,肯定相互之间的重叠率很高,因此产生重复计算。2、用ROI pooling进行特征的尺寸变换,因为全连接层的输入要求尺寸大小一样,因此不能直接把region proposal作为输入。3、将regressor放进网络一起训练,每个类别对应一个regressor,同时用softmax代替原来的SVM分类器。

在实际训练中,每个mini-batch包含2张图像和128个region proposal(或者叫ROI),也就是每张图像有64个ROI。然后从这些ROI中挑选约25%的ROI,这些ROI和ground truth的IOU值都大于0.5。另外只采用随机水平翻转的方式增加数据集。

测试的时候则每张图像大约2000个ROI。

损失函数的定义是将分类的loss和回归的loss整合在一起,其中分类采用log loss,即对真实分类(下图中的pu)的概率取负log,而回归的loss和R-CNN基本一样。分类层输出K+1维,表示K个类和1个背景类。

这是回归的loss,其中t^u表示预测的结果,u表示类别。v表示真实的结果,即bounding box regression target。

采用SVD分解改进全连接层。如果是一个普通的分类网络,那么全连接层的计算应该远不及卷积层的计算,但是针对object detection,Fast RCNN在ROI pooling后每个region proposal都要经过几个全连接层,这使得全连接层的计算占网络的计算将近一半,如下图,所以作者采用SVD来简化全连接层的计算。另一篇博客链接讲的R-FCN网络则是对这个全连接层计算优化的新的算法。

稍微总结下训练和测试的结构,如下面两个图,对算法的理解会更清晰。

test结构图在ROI Pooling层是怎么输出的画得比较容易理解。

R-CNN, Fast R-CNN, Faster R-CNN, YOLO:目标检测算法总结

参考技术A

参考链接

以下是文中涉及的算法的最原始的文章:

一个最直接的解决办法是从图中取不同的感兴趣区域,然后对这些区域用CNN进行分类,检测这些区域中是否有物体的存在。
但是待检测物体可能存在于图片的不同位置而且有不同的长宽比例。所以以上方法需要选取量非常大的区域并需要非常大的计算量。

因此,R-CNN, Fast R-CNN, Faster R-CNN, YOLO被开发去又快又准地找物体。

为了解决上述提到的有大量区域被选择的问题, Ross Girshick et al 提出了一种方法:用了选择性搜索从图片提取了2000个区域,这些区域被称为”region proposals“。

用这种办法,我们不需要去分类巨大数量的区域了,我们只需要去处理2000个区域。这2000个区域是用如下的选择性搜索算法(selective search algorithm)来找到的:

这篇文章 介绍了更多关于选择性搜索算法(selective search algorithm)的内容。

RCNN步骤:

R-CNN存在的问题:

Fast R-CNN的几个改进:
The same author of the previous paper(R-CNN) solved some of the drawbacks of R-CNN to build a faster object detection algorithm and it was called Fast R-CNN. The approach is similar to the R-CNN algorithm.

Fast R-CNN更快的原因是:

Fast R-CNN更快:
From the above graphs, you can infer that Fast R-CNN is significantly faster in training and testing sessions over R-CNN. When you look at the performance of Fast R-CNN during testing time, including region proposals slows down the algorithm significantly when compared to not using region proposals. Therefore, region proposals become bottlenecks in Fast R-CNN algorithm affecting its performance.

上面两个算法的缺点:
selective search耗时
Both of the above algorithms(R-CNN & Fast R-CNN) uses selective search to find out the region proposals . Selective search is a slow and time-consuming process affecting the performance of the network.

Faster R-CNN的改进:
不用selective search去找region proposals;
用network去找region proposals;
Therefore, Shaoqing Ren et al . came up with an object detection algorithm that eliminates the selective search algorithm and lets the network learn the region proposals .

Faster R-CNN的步骤:

时间上的对比:
Faster R-CNN最快并且能用作实时目标检测

之前几种算法的缺点:
产生region的时候没有纵览整幅图。其实图的某些部分有更高的可能性包含物体。
All of the previous object detection algorithms use regions to localize the object within the image. The network does not look at the complete image. Instead, parts of the image which have high probabilities of containing the object .

YOLO的思想:
用一个单独的网络去预测bounding boxes和bounding boxes中存在物体的概率
YOLO or You Only Look Once is an object detection algorithm much different from the region based algorithms seen above.
In YOLO, a single convolutional network predicts (1) the bounding boxes and (2)the class probabilities for these boxes.

YOLO的具体步骤:
How YOLO works is that:

YOLO的优缺点:

以上是关于计算机视觉——典型的目标检测算法(Fast R-CNN算法)(五)的主要内容,如果未能解决你的问题,请参考以下文章

计算机视觉算法——目标检测网络总结

计算机视觉算法——目标检测网络总结

车道线检测算法-Ultra-Fast-Lane-Detection

计算机视觉算法——基于Anchor Free的目标检测网络总结

计算机视觉算法——基于Anchor Free的目标检测网络总结

计算机视觉算法——基于Transformer的目标检测(DETR / Deformable DETR / DETR 3D)