r

您所在的位置:网站首页 mask-rcnn r

r

2023-01-10 03:21| 来源: 网络整理| 查看: 265

该系列核心思想为候选区域,即先找出候选区域, 再在候选区域上进行目标检测

http://www.telesens.co/2018/03/11/object-detection-and-classification-using-r-cnns/

1.R-CNN

基于候选区域的目标检测

通过选择性搜索算法, 对输入图像选取2000个候选区域在每一个候选区域上进行卷积提取特征对提取的特征分别做(1)svm分类, (2)线性回归bbox

因为对每一个候选区域做重复的事情, 切选择性搜索, 所以速度很慢

2.Fast RCNN

相对RCNN主要做了两个改进, 使的速度加快了.

直接对输入图片深层卷积提取特征, 在特征上进行选择性搜索获取ROI, 这样只用提取一次特征, 原来需要2000次.即一次提取特征+多任务学习.使用softmax分类器替换svm, 结果没有降低, 加快了速度

ROI pooling 用于将不同尺寸的POI通过池化后, 变成一样的尺寸.如

未解决的问题, ROI搜索算法

问题:多个roi池化后多任务学习怎么进行的?

3.Faster-RCNN

主要提出了RPN网络,用深度学习生成ROI, 取代选择搜索算法.可以理解为Faster-RCNN = rpn + fast-rcnn

原文这个conv feature map的维度是13*13*256的;作者在文章中指出,sliding window的大小是3*3的,那么如何得到这个256-d的向量呢? 这个很简单了,我们只需要一个3*3*256*256这样的一个4维的卷积核,就可以将每一个3*3的sliding window 卷积成一个256维的向量;作者这里画的示意图 仅仅是 针对一个sliding window的;在实际实现中,我们有很多个sliding window,所以得到的并不是一维的256-d向量,实际上还是一个3维的矩阵数据结构;可能写成for循环做sliding window大家会比较清楚,当用矩阵运算的时候,会稍微绕些;然后就是k=9,所以cls layer就是18个输出节点了,那么在256-d和cls layer之间使用一个1*1*256*18的卷积核,就可以得到cls layer,当然这个1*1*256*18的卷积核就是大家平常理解的全连接;所以全连接只是卷积操作的一种特殊情况(当卷积核的大小与图片大小相同的时候,其实所谓的卷积就是全连接了);reg layer也是一样了,reg layer的输出是36个,所以对应的卷积核是1*1*256*36,这样就可以得到reg layer的输出了;然后cls layer 和reg layer后面都会接到自己的损失函数上,给出损失函数的值,同时会根据求导的结果,给出反向传播的数据,这个过程读者还是参考上面给的文档,写的挺清楚的 

n*n*channals输入特征, k个anchors, 那么就会生成n*n*k个候选区域, 经过nms以及取top-N操作等, 过滤无效的区域, 剩余(2000或者300, 原文) 就可以得到roi.

rpn网络:https://blog.csdn.net/sloanqin/article/details/51545125 

参考:https://www.zhihu.com/question/265345106/answer/294410307

4.R-FCN

名字顾名思义, 和faster-rcnn比,主要是把ROI计算部分优化了, 之前有全连接层, 计算很慢,现在使用全卷积, 计算很快.同时提出位置敏感得分图的roi池化.

ROI被分裂为K*K个位置, 每一类有k*k个scoremap, 分别对应不同个位置.

position-sensitive ROI-pool:在k*k上的某一个位置, 在对应的位置得分图中ROI中的小区域,做avgpooling, 得到k*k的一个值, 最后得到k*k个值, 最后对k*k做avg, softmax得到某一类的概率.

所以一步卷积, 就得到了roi类的概率, 不用全连接.那么怎么回归bbox呢?原文这样说的:

作者在k*k*(C+1)并列拉了一个分支,生成通到为4*k*k的卷积层,同样的的经过位置敏感的ROI, vote, 得到一个4维的向量. 

对比faster-rcnn:RFCN无全连接, 分类和回归边界,变为全连接, 考虑了位置信息. 保证了分类的位置不变性,和回归的位置可变性.,全卷积意味着共享计算,可以大大加快运算速度.

进一步了解https://blog.csdn.net/baidu_32173921/article/details/71741970

faster-rcnn过程:

feature_maps = process(image) ROIs = region_proposal(feature_maps) for ROI in ROIs    patch = roi_pooling(feature_maps, ROI)    class_scores, box = detector(patch)         # Expensive!    class_probabilities = softmax(class_scores)

RFCN:

feature_maps = process(image) ROIs = region_proposal(feature_maps)         class_score_maps = compute_score_map(feature_maps) bbox_score_maps = compute_score_map(feature_maps) for ROI in ROIs    class_scores = vote_position_sensetive_roi_pool(class_score_maps, ROI)                         # Much simpler!    class_probabilities = softmax(class_scores)   bbox = vote_position_sensetive_roi_pool(bbox_score_maps, ROI)  

参考:

https://mp.weixin.qq.com/s?__biz=MzA3MzI4MjgzMw==&mid=2650730940&idx=1&sn=2a6a8520176368d467ca87fbc2e04c66&chksm=871b35c2b06cbcd41593cf07aa5b7a7d0913f5d07de708fd554059b9f20f1b332190dd934025&scene=21#wechat_redirect

https://www.jiqizhixin.com/articles/2018-04-27

https://imlogm.github.io/%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0/rcnn/

5.maskrcnn

在faster-rcnn基础上加一个并行的FCN, 即MASKRCNN, 右图为两种并行解构.本模型可以用作目标检测, 实例分割,以及关键点检测.把一个关键点作为一个one-hot mask, 即可把关键点任务转化为mask任务.所以maskrcnn可以同时出检测框以及关键点.nice!!!

同时本文针对roi部分提出了ROIAlign, 使得proposal的roi减小计算误差,结果更加准确. iounet提出了新的align, 见https://blog.csdn.net/yang_daxia/article/details/94736360

简单好用~~~, 有趣的是faster-rcnn加上了ROIalign效果也没有faster-rcnn好, 我理解是实例分割的任务促进了目标检测任务.

6.cascade rcnn

7.grid rcnn

将检测问题转化为关键点检测问题. 即把边界框转化为9个网格点, 建立了,边界框与网格点的对应关系.

所以模型前面类似maskrcnn, 后面是作者的创新点.

因为网格点互相是有空间位置关系的, 所以作者作了网格点特征融合.一阶融合,选取距离为1个网格点的,特征图, 通过连续3个conv5*5卷积, 与原来特征相加. 然后这个特征基础上做二阶特征融合, (距离为2的网格点).结果表明, 在map>0.5的时候表现很好, 在map=0.5的时候与别的方法持平.所以这是一个高精度的检测网络.



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3