【原理篇】一文读懂Mask RCNN
Mask RCNN 何凯明大神的经典论文之一,是一个实例分割算法,正如文中所说,Mask RCNN是一个简单、灵活、通用的框架,该框架主要作用是实例分割,目标检测,以及人的关键点检测。Mask RCNN是基于Faster RCNN的一种改进,增加一个FCN的分支。
1、Mask RCNN 网络架构
Mask RCNN就是Faster RCNN+FCN组成的,Faster RCNN完成分类和边框预测,FCN在筛选出的ROI中进行图像分割。损失函数由三部分组成:
Mask RCNN算法流程:
- 图像预处理操作,或者预处理后的图片;
- 输入到一个预训练好的神经网络中(ResNet)获得对应的feature map;
- 通过anchors对这个feature map中的每一点设定预定个的ROI,从而获得多个候选ROI;
- 将这些候选的ROI送入RPN网络进行二值分类(前景或背景)和BB回归,过滤掉一部分候选的ROI;
- 对这些剩下的ROI进行ROIAlign操作(即先将原图和feature map的pixel对应起来,然后将feature map和固定的feature对应起来);
- 对这些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的详细网络结构
网络过程归结如下:
- 图像H*W*3经过五层卷积提取抽象特征,五层分别下采样为1/2, 1/4, 1/8, 1/16, 1/32;
- 把全连接层变为卷积层,得到heatmap;
- 进行Transpose Convolution上采样层,这样可以上采样为2x,4x等与之前的下采样的特征进行特征融合;
- 输出最终预测结果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相关推荐
- 一文读懂Faster RCNN
来源:信息网络工程研究中心本文约7500字,建议阅读10+分钟 本文从四个切入点为你介绍Faster R-CNN网络. 经过R-CNN和Fast RCNN的积淀,Ross B. Girshick在20 ...
- 【原理篇】一文读懂Faster RCNN
0. Faster RCNN概述 论文地址:https://arxiv.org/pdf/1506.01497.pdf Faster R-CNN源自2016年发表在cs.CV上的论文<Faster ...
- 转:一文读懂Faster RCNN
引自:https://zhuanlan.zhihu.com/p/31426458 经过R-CNN和Fast RCNN的积淀,Ross B. Girshick在2016年提出了新的Faster RCNN ...
- 一文读懂Faster R-CNN目标检测
目标检测就是将对目标的分割和识别合二为一,是一种基于目标几何和统计特征的图像分割.当需要在一个复杂场景中对多个目标进行实时处理时,目标的自动提取和识别就尤其重要.简而言之,目标检测与识别就是指从一张图 ...
- EXCEL函数篇之一文读懂VLOOKUP精准查找、近似查找、模糊查找的区别
大家好!本期和大家分享一下如何用VLOOKUP进行精准查找.近似查找.模糊查找. EXCEL版本:Microsoft 365商业应用版 先上语法: VLOOKUP(查找值,数据表,列序数,[匹配条件( ...
- 双时隙的工作原理_一文读懂跨阻放大器的工作原理
跨阻放大器(TIA)是光学传感器(如光电二极管)的前端放大器,用于将传感器的输出电流转换为电压.跨阻放大器的概念很简单,即运算放大器(op amp)两端的反馈电阻(RF)使用欧姆定律VOUT= I × ...
- 宜信区块链|一篇干货文读懂宜信的区块链实践
12月6日下午,每月一次的CEO座谈会在北京如期举办,近百位同事到场参加.本期座谈会邀请了宜信首席技术官向江旭.宜信区块链实验室主任.翼启云服区块链业务总监于明扬.宜信金融科技产业基金合伙人秦琴等三位 ...
- 一文读懂 MySQL Explain 执行计划
一.前言 上周老周的一个好朋友让我出一篇教你读懂 SQL 执行计划,和我另一位读者反馈的面试题如何排查慢 SQL 的强相关,索性先出一篇一文读懂 MySQL Explain 执行计划.Explain ...
- 一文读懂anchor-base和anchor-free
1. 从Faster-RCNN看Anchor Faster-RCNN相对于Fast-RCNN的一个改进是引入了RPN网络,RPN用于区域推荐,替换了此前的SS算法使得网络在整体上更加的CNN化.那么R ...
最新文章
- 大规模数据处理Apache Spark开发
- 74. Leetcode 501. 二叉搜索树中的众数 (二叉搜索树-中序遍历类)
- spring的DI/IOC机制
- JQ trigger触发a标签点击事件
- Mysql 中Sql控制流语句_DCL语句/控制流语句
- python字符子串_子字符串和子序列(Python),子串,python
- mysql故障排查思路_Mysql高负载排查思路
- 给考研迷茫中的你的一封信
- JSON3-翻译(不当之处,请指正)
- JavaScript入门学习书籍的阶段选择
- Python基础知识入门(一)
- 最详细的SAI笔刷设置教程,非常全面详细!
- 【干货分享】迄今为止最好用的编程字体-支持中文正确显示:同时彻底解决eclipse中文注释缩进排版混乱问题
- BP算法的身份证号码识别
- Windows图片查看器不见了注册表可以帮你修复
- vue3 loadsh 防抖功能
- FlashFXP官方U盘绿色版
- 【嵌入式】SIM808/SIM900发送短信AT指令0X1A
- Mybatis配置分页
- (14)ObjectARX2015 + vs2012创建和编辑对象时的动态拖动技术