目录
参考链接:
https://blog.csdn.net/qq_47233366/article/details/131326554?ops_request_misc=%25257B%252522request%25255Fid%252522%25253A%252522171196013016800213023649%252522%25252C%252522scm%252522%25253A%25252220140713.130102334..%252522%25257D&request_id=171196013016800213023649&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2alltop_positive~default-1-131326554-null-null.142%5Ev100%5Epc_search_result_base5&utm_term=maskrcnn%25E5%25AE%259E%25E4%25BE%258B%25E5%2588%2586%25E5%2589%25B2&spm=1018.2226.3001.4187
Mask RCNN是在Faster RCNN的基础上提出的,因此你需要对Faster RCNN的结构相当了解,Mask RCNN中又嵌入了FCN语义分割模块。
1. 总体网络结构
Mask RCNN的网络结构
主要分为两个部分,下图中黄框框住的部分为Faster RCNN结构,绿框框住的是一个FCN结构。也就是说,Mask RCNN是在Faster RCNN的基础上添加了一个FCN结构,
Mask RCNN的结构就是这么简单,却能起到非常好的效果。而且可扩展行非常好,比如我们还添加一个可以检测人体关键点信息的网络,
2. Mask RCNN细节
对于一张输入图片,我们先将其经过特征提取骨干网络得到特征图,然后将特征图送入RPN网络得到一系列候选框,接着利用刚刚得到的候选框,剪裁出候选框对应特征图的部分
,
候选框的坐标是相对原图而言,
然后送入ROI Align层【先当成ROI Pooling即可】 获得尺寸一致的特征图,然后分别送入分支①(class、box分支)和分支②(Mask分支),分支①用于获取图像中物体的位置和类别信息,分支②用于获取图像中物体的分割信息。分支①和分支②之前的部分大家应该很熟悉才是,完全和Faster RCNN一样.
分支②,其就是一个FCN结构,其详细结构如下图所示:
一些基础的卷积和转置卷积操作,最后的输出Mask尺寸为:
对于coco数据集来说
RoIAlign的作用就是将输入统一到指定大小,上图将原始输入H × W × 256 H×W×256H×W×256统一至14 × 14 × 256 14×14×25614×14×256大小
RoIAlign的作用和RoIPool的作用是一致的,不过RoIAlign相比RoIPool做了一些优化,
当我们使用softmax时,分数高的会抑制分数低的,因为所有类别的预测概率要满足和为1的条件 。
作者认为这使得不同类别之间存在相互竞争,这被称为是一种耦合关系,是不利于最终的结果的。
于是作者希望消除这种耦合,即解耦。
由于在Mask RCNN中我们还有一个分类和回归分支来预测类别和边界框,因此我们可以利用分类分支的预测类别直接提取出对应的Mask,这样就消除了不同类别间的竞争关系。
3. loss
Mask RCNN就在Faster RCNN的基础上加上了一个Mask分支,那么Mask RCNN的损失即为Faster RCNN损失加上Mask分支的损失
点说一下Mask损失,其就是一个交叉熵损失,在Mask RCNN中是怎么计算交叉熵损失的呢
首先输入RoIAlign的是一个个候选框,输出的是14 × 14 × c 14×14×c14×14×c大小的特征图,然后经过一系列的卷积、转置等操作得到logits【因为使用的是sigmoid输出得到】,其是尺度为:
论文不采用传统FCN的方式实现分割,因为这样会让不同类别之前存在竞争关系,会导致最后的分割精度下降。这里我们会利用class、box分支中的类别信息,
比如我们通过class、box分支会知道当前的候选框的GT类别是cat(猫),于是我们就提取出logits中对应类别为猫的mask,此时这个mask是单通道的28×28大小的图像,这样就得到了Mask分支的预测输出
那么只要这个Mask和GT计算交叉熵损失即可,
那么我们将这个候选框在原图对应的GT【注:原图对应的GT是单通道的喔,目标区域为1,背景区域为0】上进行裁剪并将裁剪后图片缩放到28×28大小得到GT Mask,此时计算GT Mask和Mask分支的损失即可。
4. 预测
看看此时输入Mask分支的候选框来自哪里 ?会发现,其不再和训练阶段一样由RPN网络提供,而是由Fast RCNN网络提供,这一部分也非常好理解,在预测阶段我们只需要一个最准确的候选框就好了,直接从Fast RCNN网络中获得候选框即可,FPN中得到的候选框没有经过一系列微调,不准确。
经过RoIAlign后,和训练阶段一样我们会得到一个28×28的单通道图片,然后将其缩放到预测目标候选框同样大小,接着将其放到原图对应的区域,得到Mask。
最后还会设置一个阈值,比如0.5,将刚刚得到的Mask转换为二值图像,具体操作为将预测值大于0.5的区域设置为前景剩下区域都设置为背景。最后我们就能够在一张图像上展示出类别信息,边界框信息和Mask信息。