Mask R-CNN-论文笔记-理解

来源:互联网 发布:python 跨平台 编辑:程序博客网 时间:2024/05/29 18:22

论文:Mask R-CNN

论文翻译:http://blog.csdn.net/xiaqunfeng123/article/details/78716136

理解参考:http://blog.csdn.net/zhangjunhit/article/details/64920075?locationNum=6&fps=1
http://blog.csdn.net/linolzhang/article/details/71774168
https://zhuanlan.zhihu.com/p/25954683

核心技术:
一定程度上Mask R-CNN可以理解为升级了的Faster R-CNN,在Faster R-CNN的基础上再添加一个分支网络,用于在实现目标检测的同时进行目标分割的操作.
这里写图片描述
图片转载自这里
主要进行的改动:
使用Roi-Align层替换了Faster R-CNN中的Poi Pooling层,在最后的输出新增一个FCN层(mask结果输出).
这里写图片描述
强化了基础网络,使用ResNetXt-101+FPN用作特征提取网络
这里写图片描述
采用 ROIAlign 替代 RoiPooling(改进池化操作)。引入了一个插值过程,先通过双线性插值到14*14,再 pooling到7*7,很大程度上解决了仅通过 Pooling 直接采样带来的 Misalignment 对齐问题。

关于Loss Function:
每个 ROIAlign 对应 K * m^2 维度的输出。K 对应类别个数,即输出 K 个mask,m对应 池化分辨率(7*7)。Loss 函数定义:
Lmask(Cls_k) = Sigmoid (Cls_k), 平均二值交叉熵 (average binary cross-entropy)Loss,通过逐像素的 Sigmoid 计算得到。
为什么使用 K个mask?通过对每个 Class 对应一个 Mask 可以有效避免类间竞争(其他 Class 不贡献 Loss )

突出贡献:
在边框识别的基础上添加分支网络,用于 语义Mask 识别;
训练简单,相对于 Faster R-CNN仅增加一个小的 Overhead,可以跑到 5FPS;
可以方便的扩展到其他任务,比如人的姿态估计 等;
不借助 Trick,在每个任务上,效果优于目前所有的 single-model entries;