上篇内容介绍了一些基本的只是概念,这篇主要介绍一下运用这些基本概念产生的基于候选框的识别方法。

R-CNN

该方法作为深度学习用于物体识别的开山之作,后续很多基于候选框为基础的方法都是在该方法上进行改进得到的。该方法的具体实现为:

(1):输入一张图片

(2):利用selective  search的方式从图中选出2000个左右的Region proposal 。

(3):对每一个Region proposal内的图片缩放至指定的大小并放入CNN中进行特征提取,并将指定的特征存储下来。

(4):训练一个SVM分类器,对存储的特征进行分类。

缺点:

(1):每一个框进行一次训练,一副图片有多个候选框就需要进行多次,因此速度慢。

(2):每个特征存储下来,浪费存储空间。

(3):分类器的训练和特征提取的训练被强行分离开,导致训练分类器时没有更新网络参数。

(4):图片被强行缩放至指定的尺寸,会引起物体的形变。

 

Fast  R-CNN:

根据R-CNN的缺点,该方法采用先将一副图片放入到卷积神经网络中生成对应的特征即(feature map),然后将候选框的位置按照网络实现的方式对应到feature map中(上面提到的区域计算),接着在feature map中找出各个不同框包括的物体,送入SPP Net中使其得到相同大小的输出。这样就解决了每个候选框进行一次卷积以及图片强行缩放的问题,通过卷积层共享以提高计算的速度。通过SPP将不同输入变成了相同的输出。最后通过softmax进行物体分类以及bounding box进行边框回归以保证分类的过程和卷积的提取过程相一致。其具体步骤如下:

(1):输入图片并采用selective search算法从图片中选出对应的候选框。

(2):将图片整体放入到CNN网络中得到feature map

(3):将候选框映射到feature map中找出不同的特征大小

(4): 通过SPP Net将不同大小的feature 变成固定输出大小并训练分类器(softmax)和边框回归(bounding box regression)

缺点:

(1):依然需要提前产生大量的候选框,该计算依然比较复杂。

Faster R-CNN

针对Fast R-CNN存在的问题,研究者提出了使用神经网络来完成候选框的提取以提高候选框的速度,减少候选框的数量,提高候选框的质量。也就是RPN Net的诞生,这样就产生了Faster R-CNN,其具体实现步骤如下:

(1):输入一张任意大小的图片,

(2):将图片的整体放入到CNN中得到对应的feature,

(3):使用RPN网络生成对应的proposal(300个),

(4):将proposal放入feature map中。

(5):使用ROI Pooling(一种特殊的SPP)将不同的feature map变成固定大小的输出,并使用softmax和bounding  boxing进行回归。

 

                                           

检测到目标站点存在javascript框架库漏洞 不升级版本的解决方法 目标检测候选框_faster  r-cnn

                                            

检测到目标站点存在javascript框架库漏洞 不升级版本的解决方法 目标检测候选框_人工智能_02

 

缺点:

(1):ROI Pooling池化丢失了一定的细节信息,

(2):过分依赖于RPN网络的锚点,固定尺寸对应变化的大小会存在较大差异导致收敛过慢,

(3):ROI Pooling后面用于目标识别的子网络对每个候选框都要处理一遍,训练量大,并且后面的全连接层较多,

(4):ROI Pooling池化会打破平移不变性。

(5):ROI Pooling池化对应的一个点也许是原来的一个较大区域,因为此时一个大区域变成了一个固定的尺寸中的一个点。会导致空间量化太过粗糙。

(6):小目标检测性能不佳

Mask R-CNN

Mask R-CNN主要是根据Faster R-CNN的最后一个问题,将ROI Pooling变成了ROI Align,减少ROI Pooling 过程中使用的量化过程。并且又增加了一个图像分割的过程,将分类,定位,分割三者联合训练,其在检测精度和实例分割方面均近已达到目前比较高的水平。其具体流程如下:

                                          

检测到目标站点存在javascript框架库漏洞 不升级版本的解决方法 目标检测候选框_mask  r-cnn_03

 

相当于在整个Faster R-CNN中增加了一个mask branch 分支用来进行图像的分割,主体框架依然是Faster R-CNN,但此时使用的基础网络是ResNext-101的结构,此结构有更大的分类效果。

其实Mask R-CNN的根本宗旨是Faster R-CNN加FCN(全卷积网络,没有全连接层,全部是卷积计算),主要目的是完成图像像素级别上的分割。至于ROI Align只是方法,是策略,是一种手段并不是Mask特有的。其流程大概如下:

                                            

检测到目标站点存在javascript框架库漏洞 不升级版本的解决方法 目标检测候选框_目标检测_04

关于Mask部分最后的几层卷积采用了上采样(尺寸变大),主要是为了保证图片恢复至原图的大小,进行像素级别上的分割。

该方法实例分割准确,检测精度高,但是实例分割的代价也很大

总结

上述过程是目前主要流行的基于候选框的物体检测方法,其中使用较为广泛的是Faster R-CNN和Mask R-CNN。 Mask R-CNN在理论精度上是目前基于候选框识别方法的最高水平。

但无论哪一种方式均存在一定的优缺点,Faster R-CNN虽然真正完成端到端的训练测试,但是其模型较为复杂,小目标检测不到,并且空间量化粗糙。Mask R-CNN虽然可以满足实例分割,提高准确度,但是其分割的代价又比较大。

除此之外,无论是哪种基于候选框的检测方法均存在一个缺点,就是由于卷积计算越靠后其一个点对应的原图中的区域越大,换句话也就是说原图中的一个较大范围在随着网络的加深,范围慢慢变小甚至消失。所以只使用最后一层网络无法捕捉小目标物体。此时可以加入FPN网络使用高低特征相结合的方式来解决。在mask结构的设计时将该网络加入了RPN层,即不止使用最后一个输出的feature map进行RPN。所以他可以检测小物体(具体可以见效果展示部分)。但是该方法是一个解决问题的通用方法绝不是Mask 特有的。