参考:https://zhuanlan.zhihu.com/p/37998710
模型中的改进:
1.Faster R-CNN里的特征提取网络-->FPN:FPN产生特征金字塔[P2,P3,P4,P5,P6],大尺度的ROI要从低分辨率的feature map上切,有利于检测大目标,小尺度的ROI要从高分辨率的feature map上切,有利于检测小目标。
2.ROI pooling-->RoIAlign:Faster RCNN中,特征图与原始图像是不对准的,会影响检测精度;RoIAlign却可以保留大致的空间位置。
3.在ROIAlign之后添加卷积层,进行mask预测的任务。
Mask R-CNN网络结构
Mask RCNN沿用了Faster RCNN的思想,特征提取采用ResNet-FPN的架构,另外多加了一个Mask预测分支。
1.Faster R-CNN:
Faster R-CNN使用CNN提取图像特征,然后使用region proposal network(RPN)去提取出ROI,然后使用ROI pooling将这些ROI全部变成固定尺寸,再喂给全连接层进行Bounding box回归和分类预测。
2.ResNet-FPN (Feature Pyramid Network )
(1).FPN
FPN结构中包括自下而上,自上而下和横向连接三个部分,如下图所示。这种结构可以将各个层级的特征进行融合,使其同时具有强语义信息和强空间信息。
(2).ResNet-FPN
FPN实际上是一种通用架构,可以结合各种骨架网络使用,比如VGG,ResNet等。(这里用的就是ResNet-FPN)
自下而上:从下到上路径。可以明显看出,其实就是简单的特征提取过程,和传统的没有区别。具体就是将ResNet作为骨架网络,根据feature map的大小分为5个stage。stage2,stage3,stage4和stage5各自最后一层输出conv2,conv3,conv4和conv5分别定义为C2,C3,C4,C5,他们相对于原始图片的stride是{4,8,16,32}。需要注意的是,考虑到内存原因,stage1的conv1并没有使用。
自上而下和横向连接:自上而下是从最高层开始进行上采样,这里的上采样直接使用的是最近邻上采样,而不是使用反卷积操作,一方面简单,另外一方面可以减少训练参数。横向连接则是将上采样的结果和自底向上生成的相同大小的feature map进行融合。具体就是对C2,C3,C4,C5中的每一层经过一个conv 1x1操作(1x1卷积用于降低通道数),无激活函数操作,输出通道全部设置为相同的256通道,然后和上采样的feature map进行加和操作。在融合之后还会再采用3*3的卷积核对已经融合的特征进行处理,目的是消除上采样的混叠效应(aliasing effect)。
实际上,上图少绘制了一个分支:M5经过步长为2的max pooling下采样得到 P6,使用P6是想得到更大的anchor尺度512×512。但P6是只用在 RPN中用来得到region proposal的,并不会作为后续Fast RCNN的输入。
总结一下,ResNet-FPN作为RPN输入的feature map是[P2,P3,P4,P5,P6],而作为后续Fast RCNN的输入则是 [P2,P3,P4,P5] 。
3.ResNet-FPN+Fast RCNN
将ResNet-FPN和Fast RCNN进行结合,实际上就是Faster RCNN的了,但与最初的Faster RCNN不同的是,FPN产生了特征金字塔[P2,P3,P4,P5,P6],而并非只是一个feature map。金字塔经过RPN之后会产生很多region proposal。这些region proposal是分别由P2,P3,P4,P5,P6经过RPN产生的,但用于输入到Fast RCNN中的是[P2,P3,P4,P5],也就是说要在[P2,P3,P4,P5]中根据region proposal切出ROI进行后续的分类和回归预测。选择哪个feature map来切出这些ROI区域:我们会选择最合适的尺度的feature map来切ROI。具体来说,我们通过一个公式来决定宽w和高h的ROI到底要从哪个Pk来切:
这里224表示用于预训练的ImageNet图片的大小。k0 表示面积为w*h=224*224的ROI所应该在的层级。作者将  k0设置为4,也就是说w*h=224*224的ROI应该从  中切出来。假设ROI的scale小于224(比如说是112 * 112),k=k0-1=4-1=3,就意味着要从更高分辨率的P3中产生。另外,k值会做取整处理,防止结果不是整数。
4.ResNet-FPN+Fast RCNN+mask (得到了最终的Mask RCNN)
总结:  (1).骨干网络ResNet-FPN,用于特征提取,另外,ResNet还可以是:ResNet-50,ResNet-101,ResNeXt-50,ResNeXt-101;
(2).头部网络,包括边界框识别(分类和回归)+mask预测。头部结构见下图:
Mask R-CNN中的改进:Faster R-CNN存在的问题是:特征图与原始图像是不对准的(mis-alignment),所以会影响检测精度。而Mask R-CNN提出了RoIAlign的方法来取代ROI pooling,RoIAlign可以保留大致的空间位置。
(1).ROIpooling
用一张动图概括
(2).ROI Align
在Faster RCNN中,有两次整数化的过程:
1.region proposal的xywh通常是小数,但是为了方便操作会把它整数化。
2.将整数化后的边界区域平均分割成 k x k 个单元,对每一个单元的边界进行整数化。
两次整数化的过程如下图所示:
事实上,经过上述两次整数化,此时的候选框已经和最开始回归出来的位置有一定的偏差,这个偏差会影响检测或者分割的准确度。在论文里,作者把它总结为“不匹配问题”(misalignment)。
为了解决这个问题,ROI Align方法取消整数化操作,保留了小数,使用以上介绍的双线性插值的方法获得坐标为浮点数的像素点上的图像数值。但在实际操作中,ROI Align并不是简单地补充出候选区域边界上的坐标点,然后进行池化,而是重新进行设计。
下面通过一个例子来讲解ROI Align操作。如下图所示,虚线部分表示feature map,实线表示ROI,这里将ROI切分成2x2的单元格。如果采样点数是4,那我们首先将每个单元格子均分成四个小方格(如红色线所示),每个小方格中心就是采样点。这些采样点的坐标通常是浮点数,所以需要对采样点像素进行双线性插值(如四个箭头所示),就可以得到该像素点的值了。然后对每个单元格内的四个采样点进行maxpooling,就可以得到最终的ROIAlign的结果。
需要说明的是,在相关实验中,作者发现将采样点设为4会获得最佳性能,甚至直接设为1在性能上也相差无几。事实上,ROI Align 在遍历取样点的数量上没有ROIPooling那么多,但却可以获得更好的性能,这主要归功于解决了misalignment的问题。
Loss

Mask R-CNN网络结构理解相关推荐

  1. CNN网络结构理解:感受野计算方法

    原文链接:http://www.cnblogs.com/objectDetect/p/5947169.html 1 感受野的概念 在卷积神经网络中,感受野的定义是 卷积神经网络每一层输出的特征图(fe ...

  2. CNN网络结构发展演变:从LeNet到HRNet(一)

    个人经验总结博客,写的不好的地方还请各路大神指正,不喜勿喷.网络结构图基本都是引用的,如有雷同,实在抱歉,可在下方评论中留言是否删除. 我们知道CNN网络结构一直在更新迭代,卷积可以理解为:" ...

  3. CNN网络结构发展最全整理

    来源:人工智能AI技术 本文约2500字,建议阅读9分钟 本文为你整理CNN网络结构发展史. 作者丨zzq 来源丨https://zhuanlan.zhihu.com/p/68411179 CNN基本 ...

  4. 收藏 | 一文遍览CNN网络结构的发展

    来源:人工智能AI技术本文约2600字,建议阅读8分钟 本文介绍了十五种经典的CNN网络结构. CNN基本部件介绍 1. 局部感受野 在图像中局部像素之间的联系较为紧密,而距离较远的像素联系相对较弱. ...

  5. Faster R CNN

    Faster R CNN 3 FASTER R-CNN 我们的Faster R CNN 由两个模块组成,第一个模块是 proposes regions 的全卷积网络,第二个是使用 proposed r ...

  6. R语言学习以及我对R语言的理解。

    关于对R语言的理解: 这里我讲一下自己对于R语言的理念,我不想重复那些已经被转播烂了的概念解释.发展历史.及其功能简介. R语言是统计学家开发的,出生之初就决定了它的使命是统计计算和数据可视化,这算是 ...

  7. CNN网络结构进化概述

    网络工程问题是深度学习中比较基础的问题,网络工程的难点在于,缺乏对深度神经网络的理论理解(即常说的黑盒模型),无法根据理论来设计网络结构,实际中更多的是不断的尝试,根据实验反馈出来的结果确定某一结构是 ...

  8. 【Pytorch深度学习实践】B站up刘二大人之BasicCNN Advanced CNN -代码理解与实现(9/9)

    这是刘二大人系列课程笔记的 最后一个笔记了,介绍的是 BasicCNN 和 AdvancedCNN ,我做图像,所以后面的RNN我可能暂时不会花时间去了解了: 写在前面: 本节把基础个高级CNN放在一 ...

  9. CNN网络结构的发展:从LeNet到EfficientNet

    关注上方"深度学习技术前沿",选择"星标公众号", 资源干货,第一时间送达! 作者:zzq https://zhuanlan.zhihu.com/p/68411 ...

最新文章

  1. 合川专升本计算机怎么学升学率,2019年重庆市合川太和中学高考喜报
  2. 厉害了!这支获得国家级荣誉的智能车队
  3. Apache HTTP服务器和支持程序 —— apachectl
  4. Validation-jQuery表单验证插件使用方法
  5. boost::iostreams模块实现大文件偏移量使用 file_descriptor 进行测试
  6. php做的物资管理系统,基于WEB的物资管理信息系统
  7. 非常恶俗地分享一首歌曲(子陵·周郎顾)
  8. edusoho linux 500错误,EduSoho网校系统如何处理500 Internal Server Error? - EduSoho官网
  9. oracle双引号拼接,oracle 单引号拼凑和动态sql | 学步园
  10. 等保2.0标准发布一周年,行业用户如何有效落实合规建设
  11. Jrebel激活方法
  12. 统计学作业4 概念
  13. 解读联想重组:终于裁员了
  14. 网络安全kali渗透学习 web渗透入门 Layer子域名挖掘机收集信息
  15. Android差分升级原理和实现方式
  16. 卓开发中必备的那些神器APP
  17. 运维监控工具之商用软件篇
  18. html交叉轴排列,CSS Flex 交叉轴水平方向
  19. wang editor Vue使用 + 使用自己方法上传图片
  20. 浮点数在内存中的存储

热门文章

  1. python实现网站内部视频批量下载
  2. JS 跑马灯效果实现(很好用)
  3. 软考高级-信息系统管理师之安全管理(最新版)
  4. Python练习19:合格率计算
  5. ssh登录、配置免密登录
  6. LBD算法 - Line Band Discriptor 描述符分析
  7. 染色基础知识(三)——用什么染?
  8. python画同心圆循环源代码_Python Turtle:使用circle()方法绘制同心圆
  9. 移远 4G EC20 高通 9X07 工业级 车规级 CAT4 CAT6
  10. 还搞不懂性能调优?让你见识这份《Java性能调优PDF》啃完你就知道多厉害了!