我的实例分割学习路线

本文总结自己目前对实例分割 的认识,和学习过程

什么是实例分割?

  • 目标检测针对的是目标,语义分割针对的是像素,而实例分割针对的是实例。所谓实例就是一个不管类别、不管是否连续的 1 个目标
  • 上图是对一张图上 3 类 4 个实例的分割示意图,最后的输出结果是每个实例的语义分割图

实例分割的原理?

  • Two-satge:既然实例分割是针对实例的语义分割,最直接的办法就是先找出单个实例的区域,然后对这个区域进行语义分割即可
  • one-stage:不找实例的区域,而是针对每个 grid 生成 1 个语义分割预测,通过后处理获得实例的类别及分割结果

实例分割的方法?

  • two-satge:类似于目标检测的 two-satge 模型,即先检测出目标的获选框,然后对候选框进行语义分割和位置回归
  • one-stage:类似于目标检测的 one-stage 模型,即先通过 grid 确保这个位置有目标,然后对这个位置进行位置回归 (目标检测)或者 mask 生成 (实例分割)
  • two-stage 的方法原始直接,但是对重叠目标的 Mask 预测比较麻烦,而且速度较慢;one-stage 类似 YOLO 系列的思想,速度较快

评价指标

  • 和目标检测一样,实例分割使用 mAP 评价模型性能,注意:统计某类的 TP、FP、FN 时,是针对所有图片的实例预测结果进行,不针对具体图片
  • AP 是指某个类别预测情况的平均精准率,mAP 指所有类别 AP 的平均
  • AP 可以通过求解 PR 曲线下的面积得到,求解方式包括11个点和矩形求解
  • 每个 PR 区域是某个 IOU 阈值绘制的,并且这个 IOU 阈值已经由单阈值发展到多阈值

two-stage

  • 自上而下的实例分割方法,首先按获取候选框,然后在此基础上进行目标框回归和 Mask 生成
  • Mask RCNN:使用 RPN 获得候选框、使用 Faster RCNN 预测目标类别、使用 FCN 生成 Mask
  • PAN:通过在 FPN 的基础上引入 bottom-up 路径,让底层信息更快传递到高层,其思想和 Mask RCNN 一致

One-stage

  • 自下而上的实例分割方法类似 YOLO 系列将每个 grid 看作 1 个目标,这类实例分割方法将每个 grid 视为一个实例,并为每个 grid 预测 1 个 Mask
  • SOLO:输出包含 2 个分支,一个是 heatmap 分支,判定该 grid 是否包含实例,另一个分支是为该 grid 生成 Mask
  • SOLOv2:在 SOLOv1 的基础上,将 Mask 分支解藕卷积核生成、卷积特征生成 2 个分支,监督网络学习卷积核,使得网络能动态学习实例的特征

学习路线

  1. MaskRCNN:在 Faster RCNN 的基础上增加 FCN 分支,提出 ROIAlign 对齐 ROI 下采样
  2. PAN:类似 MaskRCNN 过程,BackBone 使用 PAN 进行特征融合,最后融合所有尺度目标进行目标定位与分割
  3. yolact:首先生成一批 prototype mask,然后目标分支生成一组权重,加权得到每个 grid 的分割结果
  4. SOLO:首先 Category 分支对 grid 进行分类,然后 Mask 分支生成每个 grid 的分割,实际使用通过解藕头构建 Mask 分支
  5. SOLOv2:将 SOLO 的 Mask 生成分支解藕为掩码核预测分支和掩码特征学习分支,分别负责生成卷积核和需要卷积的特征映射
  6. yolactplusplus:基本和 yolact 类似,生成更多 anchor 、重新生成的 Mask scoreing 分支