DeepLearing—CV系列(七)——多类多目标物体的侦测——R-CNN系列

DeepLearing—CV系列(七)——多类多目标物体的侦测——R-CNN系列
计算机视觉的任务
分类->分类+回归->目标侦测->实例分割

单目标识别追踪
DeepLearing—CV系列(七)——多类多目标物体的侦测——R-CNN系列
多目标识别追踪:R-CNN系列

一、R-CNN

DeepLearing—CV系列(七)——多类多目标物体的侦测——R-CNN系列
在原图进行操作,根据聚类算法(颜色,边缘,纹理等)对图像区域分割成块,分割后的图像区域大小不一样,要做一个合并,再缩放到相同大小,再把不同大小的图像输入到同一个网络当中去,进行回归/分类(SVM),用全连接输出,所以输入的图像大小要固定。
缺点:
①慢,同一张图像会有2000张建议框,选择性搜索
②每个区域大小不一样,要缩放到固定大小
③SVM效果不够好

二、Fast R-CNN

DeepLearing—CV系列(七)——多类多目标物体的侦测——R-CNN系列
在特征图上进行操作把图像直接输入到卷积网络中,在特征图上进行操作,把相似区域合并,会减少一些特征图,在特征图上聚类也会聚类的少一些;对特征框进行聚类,再对特征框进行ROI Pooling,得到相同大小的特征图7*7,统一输入到全连接,进行分类(softmax)/回归(线性层)。

没用SPP(空间金字塔池化),用的ROI Pooling: 输入不同,得到相同大小的输出
对每个建议框,先进行下采样(Vgg下采样5次),再池化成7*7; 池化时,小数部分去掉
800x800里有665x665的目标,下采样时为20.78,取20,20除以7,画成7x7的格子,每个格子的大小为2.86,取为2x2,再取最大的值做为特征,即为7x7

三、SPP-Net

**空间金字塔池化:**设计池化核及步长不一样,使输出相同,不再需要缩放;9个建议框。
DeepLearing—CV系列(七)——多类多目标物体的侦测——R-CNN系列

四、ASPP

空洞空间卷积池化金字塔(atrous spatial pyramid pooling (ASPP)
DeepLearing—CV系列(七)——多类多目标物体的侦测——R-CNN系列

五、Faster-R-CNN

DeepLearing—CV系列(七)——多类多目标物体的侦测——R-CNN系列
如上图,Faster RCNN其实可以分为4个主要内容

1)Conv layers。作为一种CNN网络目标检测方法,Faster RCNN首先使用一组基础的conv+relu+pooling层提取image的feature maps。该feature maps被共享用于后续RPN层和全连接层。
2)Region Proposal Networks。RPN网络用于生成region proposals。该层通过softmax判断anchors属于positive或者negative,再利用bounding box regression修正anchors获得精确的proposals。
3)Roi Pooling。该层收集输入的feature maps和proposals,综合这些信息后提取proposal feature maps,送入后续全连接层判定目标类别。
4)Classification。利用proposal feature maps计算proposal的类别,同时再次bounding box regression获得检测框最终的精确位置。

5.1 Conv layers

DeepLearing—CV系列(七)——多类多目标物体的侦测——R-CNN系列

上图展示了python版本中的VGG16模型中的faster_rcnn_test.pt的网络结构,可以清晰的看到该网络对于一副任意大小PxQ的图像:

1)首先缩放至固定大小MxN,然后将MxN图像送入网络;
2)而Conv layers中包含了13个conv层+13个relu层+4个pooling层; RPN网络首先经过3x3卷积,再分别生成positive
3)anchors和对应bounding box regression偏移量,然后计算出proposals;
4) 而Roi Pooling层则利用proposals从feature maps中提取proposalfeature送入后续全连接和softmax网络作classification(即分类proposal到底是什么object)。

Conv layers包含了conv,pooling,relu三种层。这里有一个非常容易被忽略但是又无比重要的信息,在Conv layers中:

所有的conv层都是:kernel_size=3,pad=1,stride=1
所有的pooling层都是:kernel_size=2,pad=0,stride=2

在Faster RCNN Conv layers中对所有的卷积都做了扩边处理( pad=1,即填充一圈0),导致原图变为(M+2)x(N+2)大小,再做3x3卷积后输出MxN 。正是这种设置,导致Conv layers中的conv层不改变输入和输出矩阵大小。

类似的是,Conv layers中的pooling层kernel_size=2,stride=2。这样每个经过pooling层的MxN矩阵,都会变为(M/2)x(N/2)大小。综上所述,在整个Conv layers中,conv和relu层不改变输入输出大小,只有pooling层使输出长宽都变为输入的1/2。

那么,一个MxN大小的矩阵经过Conv layers固定变为(M/16)x(N/16)!这样Conv layers生成的featuremap中都可以和原图对应起来。

5.2 Region Proposal Networks(RPN)

经典的检测方法生成检测框都非常耗时,如
①OpenCV adaboost使用滑动窗口+图像金字塔生成检测框;
②或如R-CNN使用SS(Selective Search)方法生成检测框。
③而Faster RCNN则抛弃了传统的滑动窗口和SS方法,直接使用RPN生成检测框,这也是Faster R-CNN的巨大优势,能极大提升检测框的生成速度。
DeepLearing—CV系列(七)——多类多目标物体的侦测——R-CNN系列

上图展示了RPN网络的具体结构。可以看到RPN网络实际分为2条线,上面一条通过softmax分类anchors获得positive和negative分类,下面一条用于计算对于anchors的bounding box regression偏移量,以获得精确的proposal。而最后的Proposal层则负责综合positive anchors和对应bounding box regression偏移量获取proposals,同时剔除太小和超出边界的proposals。其实整个网络到了Proposal Layer这里,就完成了相当于目标定位的功能。

其实RPN最终就是在原图尺度上,设置了密密麻麻的候选Anchor。然后用cnn去判断哪些Anchor是里面有目标的positive anchor,哪些是没目标的negative anchor。所以,仅仅是个二分类而已!

改进:聚类聚出的特征框,进行筛选,不是目标的去掉,是目标的送到模型里进行分类和回归;
加了区域选择网络(RPN):根据置信度选择。
DeepLearing—CV系列(七)——多类多目标物体的侦测——R-CNN系列
DeepLearing—CV系列(七)——多类多目标物体的侦测——R-CNN系列

VGG16输出 [50x38x512] 的特征,对应设置 [50x38xk] 个anchors,而RPN输出:大小为[50x38x2k] 的positive/negative softmax分类特征矩阵 大小为 [50x38x4k] 的regression坐标回归特征矩阵恰好满足RPN完成positive/negative分类+bounding box regression坐标回归.
每个anhcor要分positive和negative,所以每个点由256维feature转化为cls=2k scores;而每个anchor都有(x, y, w, h)对应4个偏移量,所以reg=4k coordinates.

5.3 RoI pooling

RoI Pooling层则负责收集proposal,并计算出proposal feature maps,送入后续网络。从图2中可以看到Rol pooling层有2个输入:
1)原始的feature maps
2)RPN输出的proposal boxes(大小各不相同)

5.4 Classification

Classification部分利用已经获得的proposal feature maps,通过full connect层与softmax计算每个proposal具体属于那个类别(如人,车,电视等),输出cls_prob概率向量;同时再次利用bounding box regression获得每个proposal的位置偏移量bbox_pred,用于回归更加精确的目标检测框。Classification部分网络结构如下图。

DeepLearing—CV系列(七)——多类多目标物体的侦测——R-CNN系列
从RoI Pooling获取到7x7=49大小的proposal feature maps后,送入后续网络,可以看到做了如下2件事:

1)通过全连接和softmax对proposals进行分类,这实际上已经是识别的范畴了
2)再次对proposals进行bounding box regression,获取更高精度的rect box

六、mask-R-CNN

做图像分割
DeepLearing—CV系列(七)——多类多目标物体的侦测——R-CNN系列

七、总结

DeepLearing—CV系列(七)——多类多目标物体的侦测——R-CNN系列

自己总结的R-CNN系列思维导图:DeepLearing—CV系列(七)——多类多目标物体的侦测——R-CNN系列