Mask RCNN论文笔记

Mask RCNN是大神Kaiming He的一大神作。

1、概述

Mask RCNN主要是再Faster RCNN上进行了一些调整(将RoIpooling层替换为了RoIAlign层),并且在RoIAlign后增加了一个进行instance segmentation的分支。

图片来源

上图展示了一个Mask RCNN的网络结构,用RoIAlign来代替RoIpooling部分,并且在分类与回归中添加了并列的分支FCN(mask层)

2、loss function

训练中,文章定义了多个任务的损失是对每一个RoI有L=L_{cls}+L_{reg}+L_{mask},其中的前两个损失是同faster RCNN中一样的定义,而第三个损失L_{mask}是mask层的损失计算。mask对应的每个RoI的输出维度是K*m^2,表示K个类别共有K个mxm的二进制掩码【论文中m*m对应池化分辨率7*7,通过对每个class对应一个mask可以有效地避免同类竞争】,这里使用的是per-pixel sigmoid【在论文中有与per-pixel softmax进行对比】,将损失函数定义为L_mask average binary cross-entropy,loss只定义在有对应gt的mask上,其他mask不对loss有贡献值。

3、RoIAlign【重点推荐:一篇不错的文

论文比较主要的地方是用RoIAlign来代替RoIpooling,因为原来的faster RCNN是无需做实例分割的,而实例分割是需要在pixel级别上有较高的精确度,但是因为RoIpooling的量化操作,使其对实力分割上的一个精度会比较低,因此作者就提出了使用RoIAlign来代替RoIpooling。

  • RoIpooling的操作主要是为了将不同尺寸的feature map操作成尺寸一样大小的feature。
  • RoIAlign没有像RoIpooling那样做量化操作【in paper, use x/16 instead of round(x/16)】,并且使用了双线性插值to compute the exact values of the input features at four regularly sampled locations in each RoI bin, and aggregate the result(using max or average)【具体细节等看完代码吧】

一张来自上面的链接博文的比较好的图。【理解:RoIAlign的RoI的边界无需量化取整,而是如图中RoIAlign部分,将得到的RoIAlign,框的边界仍然取浮点数,此时,在每个bin(最终需要得到的尺寸的规模为t*t,那么有t*t个bins)中取样四个点【平均取的四个点?】】,四个点的值由邻近的feature map的pixel值通过双线性插值法来取得,最后将这四个采样点的值进行max或average来作为这个bin的值,最终可得到尺寸大小一样的RoI所对应的更加精确的feature map区域值。   第三种方法是使用了积分的方法,链接博文中说会更加精确,但是会比较耗时。】

4、结果对比

图片来源

5、Mask RCNN扩展——

猜你喜欢

转载自blog.csdn.net/github_37973614/article/details/81947652
今日推荐