Mask RCNN 何凯明大神的经典论文之一,是一个实例分割算法,正如文中所说,Mask RCNN是一个简单、灵活、通用的框架,该框架主要作用是实例分割,目标检测,以及人的关键点检测。Mask RCNN是基于Faster RCNN的一种改进,增加一个FCN的分支。

1、Mask RCNN 网络架构

Mask RCNN就是Faster RCNN+FCN组成的,Faster RCNN完成分类和边框预测,FCN在筛选出的ROI中进行图像分割。损失函数由三部分组成:

Mask RCNN算法流程:

  1. 图像预处理操作,或者预处理后的图片;
  2. 输入到一个预训练好的神经网络中(ResNet)获得对应的feature map;
  3. 通过anchors对这个feature map中的每一点设定预定个的ROI,从而获得多个候选ROI;
  4. 将这些候选的ROI送入RPN网络进行二值分类(前景或背景)和BB回归,过滤掉一部分候选的ROI;
  5. 对这些剩下的ROI进行ROIAlign操作(即先将原图和feature map的pixel对应起来,然后将feature map和固定的feature对应起来);
  6. 对这些ROI进行分类(N类别分类)、BB回归和MASK生成(在每一个ROI里面进行FCN操作)。

也就是说,Mask RCNN相对于Faster RCNN主要是两点改进,分别是FCN和ROI Align。

2、Faster RCNN网络

参考【原理篇】一文读懂Faster RCNN_Eyesleft_being的博客-CSDN博客

3、 FCN

FCN(Fully Convolutional Networks)全卷积网络是图像语义分割的一个经典网络,属于挖坑的,从此就有无穷无尽的人去填这个坑。

我们知道,CNN如AlexNet, ResNet等都是分类网络,都是给一个图像提取特征然后分类,很自然的可以想到,如果对图像的每一个像素点分类,不就可以进行图像分割了吗。实际上,FCN就是这样干的,每一个像素都分类为前景或者背景,就完成了图像分割。

上图是FCN的整体网络架构图,从图中可以看出,所谓全卷积,就是不要全连接而已,因为网络要预测每一个像素的类别,最终的输出一定要是二维的才对,也就是heatmap图(对比CNN里的feature map)。实际上,完全可以把heatmap当作feature map来理解。

众所周知,卷积是一个下采样操作(卷积、池化)来提取抽象特征,在FCN中输入图像是H*W大小,经过一系列池化操作后最终变为H/32*W/32。

这样,同一个网络中,输入图像的尺寸就可以是任意的,最终只是缩放了多少倍而已。

现在的问题是,得到了抽象特征heatmap,比如要分类为1000类,heatmap的特征图大小就是H/32*W/32*1000。最终是要还原为H*W*1000才能预测输出的,也就是说在得到heatmap后,还需要上采样还原为H*W大小。

上采样

上采样就是增大图像分辨率,下采样就是缩小图像分辨率。在传统图像处理中,一般用插值算法做上采样,比如最近邻插值、双线性插值等。试想一下,如果采用插值的办法上采样,训练出的网络实际上heatmap就是概率图,每个特征点对应原图感受野的类别,然后插值算出来的概率,都是大概近似而已。这样得到的分割效果明显是不精确的。

转置卷积

可以联想到,如果能够训练参数,搞一个形式上类似反向卷积的东西,得到的网络应该就比较准确的,这个就是转置卷积。

先看看卷积操作,对于一个输入大小的图像,卷积核大小,padding=0, stride=1,将得到的输出,是多个像素映射为一个像素的函数,输出尺寸对应关系为:

其中,n为图像尺寸,p为padding,f为卷积核大小,s为stride

这一卷积过程可以通过变形表示为矩阵形式:

C为卷积核,x为图片。在这个例子中,输入为4*4,卷积核为3*3,输出为2*2,可以理解为x是16*1, C是4*16, 则y为4*1。那么从原理上,只要找一个尺寸16*4的矩阵,就能把4*1的向量映射为16*1,然后重新排列就行了。这是一个从少数对应多数的函数关系。

注意这里的转置只是一个形式上的转置操作,为了恢复到原始的尺寸,不是真正的求逆和转置操作。我们知道卷积其实是一种稀疏连接和参数共享,所以排列为矩阵后有很多零元素,转置也是一样,具有很多零元素,史迹上,转置卷积就是先给原图填充很多零元素,再进行正常卷积,就达到了上采样的效果。当然这里以少数到多数的映射是不能求解析解的,只能学习。

转置卷积的输出输入尺寸对应关系为:

现在再来看FCN的详细网络结构

网络过程归结如下:

  1. 图像H*W*3经过五层卷积提取抽象特征,五层分别下采样为1/2, 1/4, 1/8, 1/16, 1/32;
  2. 把全连接层变为卷积层,得到heatmap;
  3. 进行Transpose Convolution上采样层,这样可以上采样为2x,4x等与之前的下采样的特征进行特征融合;
  4. 输出最终预测结果H*W*class_num。

4、ROI Align

ROI Align是对应于ROI Pooling的优化。为了给所有的ROI获得同样尺寸的feature map,需要ROI池化,但在ROI池化中,非整数要进行量化操作(取整),这样会造成一定的误差。我们知道,feature map中的一个像素点对应于原图中较大的一块感受野,所以在feature map上的偏差,反映到原图中,将是比较大的误差,ROI Align就是用线性插值的方法代替了量化,从而解决了这个问题,提升了性能。

5、Mask RCNN使用测试

6、Mask RCNN 训练

【原理篇】一文读懂Mask RCNN相关推荐

  1. 一文读懂Faster RCNN

    来源:信息网络工程研究中心本文约7500字,建议阅读10+分钟 本文从四个切入点为你介绍Faster R-CNN网络. 经过R-CNN和Fast RCNN的积淀,Ross B. Girshick在20 ...

  2. 【原理篇】一文读懂Faster RCNN

    0. Faster RCNN概述 论文地址:https://arxiv.org/pdf/1506.01497.pdf Faster R-CNN源自2016年发表在cs.CV上的论文<Faster ...

  3. 转:一文读懂Faster RCNN

    引自:https://zhuanlan.zhihu.com/p/31426458 经过R-CNN和Fast RCNN的积淀,Ross B. Girshick在2016年提出了新的Faster RCNN ...

  4. 一文读懂Faster R-CNN目标检测

    目标检测就是将对目标的分割和识别合二为一,是一种基于目标几何和统计特征的图像分割.当需要在一个复杂场景中对多个目标进行实时处理时,目标的自动提取和识别就尤其重要.简而言之,目标检测与识别就是指从一张图 ...

  5. EXCEL函数篇之一文读懂VLOOKUP精准查找、近似查找、模糊查找的区别

    大家好!本期和大家分享一下如何用VLOOKUP进行精准查找.近似查找.模糊查找. EXCEL版本:Microsoft 365商业应用版 先上语法: VLOOKUP(查找值,数据表,列序数,[匹配条件( ...

  6. 双时隙的工作原理_一文读懂跨阻放大器的工作原理

    跨阻放大器(TIA)是光学传感器(如光电二极管)的前端放大器,用于将传感器的输出电流转换为电压.跨阻放大器的概念很简单,即运算放大器(op amp)两端的反馈电阻(RF)使用欧姆定律VOUT= I × ...

  7. 宜信区块链|一篇干货文读懂宜信的区块链实践

    12月6日下午,每月一次的CEO座谈会在北京如期举办,近百位同事到场参加.本期座谈会邀请了宜信首席技术官向江旭.宜信区块链实验室主任.翼启云服区块链业务总监于明扬.宜信金融科技产业基金合伙人秦琴等三位 ...

  8. 一文读懂 MySQL Explain 执行计划

    一.前言 上周老周的一个好朋友让我出一篇教你读懂 SQL 执行计划,和我另一位读者反馈的面试题如何排查慢 SQL 的强相关,索性先出一篇一文读懂 MySQL Explain 执行计划.Explain ...

  9. 一文读懂anchor-base和anchor-free

    1. 从Faster-RCNN看Anchor Faster-RCNN相对于Fast-RCNN的一个改进是引入了RPN网络,RPN用于区域推荐,替换了此前的SS算法使得网络在整体上更加的CNN化.那么R ...

最新文章

  1. 大规模数据处理Apache Spark开发
  2. 74. Leetcode 501. 二叉搜索树中的众数 (二叉搜索树-中序遍历类)
  3. spring的DI/IOC机制
  4. JQ trigger触发a标签点击事件
  5. Mysql 中Sql控制流语句_DCL语句/控制流语句
  6. python字符子串_子字符串和子序列(Python),子串,python
  7. mysql故障排查思路_Mysql高负载排查思路
  8. 给考研迷茫中的你的一封信
  9. JSON3-翻译(不当之处,请指正)
  10. JavaScript入门学习书籍的阶段选择
  11. Python基础知识入门(一)
  12. 最详细的SAI笔刷设置教程,非常全面详细!
  13. 【干货分享】迄今为止最好用的编程字体-支持中文正确显示:同时彻底解决eclipse中文注释缩进排版混乱问题
  14. BP算法的身份证号码识别
  15. Windows图片查看器不见了注册表可以帮你修复
  16. vue3 loadsh 防抖功能
  17. FlashFXP官方U盘绿色版
  18. 【嵌入式】SIM808/SIM900发送短信AT指令0X1A
  19. Mybatis配置分页
  20. (14)ObjectARX2015 + vs2012创建和编辑对象时的动态拖动技术

热门文章

  1. 数据预处理(一)——数据预处理的必要性
  2. 关于IP协议首部长度的计算
  3. python代码测试端口是否能通
  4. minio:缩略图(netcore)
  5. C专家编程 第7章 对内存的思考 7.3 虚拟内存
  6. 计算机的收获初一作文,我的收获作文700字
  7. item_password-获得淘口令真实url-返利API
  8. python处理图片重命名
  9. HOOK 低层键盘消息---WH_KEYBOARD_LL
  10. 5G初级中级选择和判断