文章目录
0. 前言
- 全景分割调研系列文章分为4篇
- 问题引入与性能指标
- 常用数据集
- 当前研究现状 - 现有模型分类以及当前常见研究方向(本文)
- 相关开源项目简介
1. 研究现状
- 从输入数据上分,全景分割可以分为
- 基于RGB图像的全景分割,常见的数据集包括 COCO/Cityscapes/Mapillary/IDD/ADE20K 等
- 基于点云数据的全景分割,常见的包括 SemanticKITTI 等
- 基于RGB图像的全景分割算法可以分为
- box-based(主要都是 top-down 方法),thing/stuff 使用不同的 branch 预测,thing 的预测基于 box,如 PanopticFPN
- box-free(主要是 bottom-up 方法),thing/stuff 使用不同的 branch 预测,先预测 semantic再生成instance,没有用到 bbox,如 Panoptic-DeepLab
- thing/stuff 完全使用相同的结构进行预测,只有一篇,即 PanopticFCN
2. 单篇论文笔记
- 后面就分别介绍
- PanopticFPN:top-down,box-based
- Panoptic-Deeplab:bottom-up,box-free
- PanopticFCN:unified framework
2.1 Panoptic Feature Pyramid Networks
- 相关资料:
- 论文基本信息
- 领域:全景分割
- 作者单位:FAIR
- 发表时间:CVPR 2019
- 一句话总结:在 Mask R-CNN(用于识别thing) 的基础上添加了一个 FCN 分支用于实现 stuff 识别。
- 要解决什么问题
- 像是对开山论文 Panoptic Segmentation 的补充。
- 在原始论文中,使用的 baseline 方法就是两个模型的叠加,没有参数共享。
- 用了什么方法
- 全景分割可以看成是语义分隔+实例分割。那一种很朴素的想法就是,在实例分割模型(Mask R-CNN)的基础上实现语义分割(就是添加一个branch)。
- 总体结构如下图,语义分割branch参考Figure3
- 后处理类似NMS,包括
- resolving overlaps between different instances based on their confidence scores,多个实例之间如果有重叠,就根据 confidence score 来进行选择
- resolving overlaps between instance and semantic segmentation outputs in favor of instances,如果实例与stuff有重叠则选择实例
- removing any stuff regions labeled ‘other’ or under a given area threshold. 删除类别为 other 的stuff,以及一些面积小于阈值的stuff。
- 效果如何:本文算是全景分割领域的baseline吧,是基于 box 方法的代表作。结果也就看个热闹
- 还存在什么问题&可借鉴之处
- 这篇论文没什么能多说的,感觉只是比较直观的想法,没有太多insights。
2.2 Panoptic-DeepLab: A Simple, Strong, and Fast Baseline for Bottom-Up Panoptic Segmentation
- 相关资料:
- 论文基本信息
- 领域:全景分割
- 作者单位:UIUC & Google
- 发表时间:CVPR 2020
- 一句话总结:提出一种基于 deeplab/bottom-up/box-free 的全景分割模型
- 要解决什么问题
- 之前全景分割主要都是 top-down 方法,例如 PanopticFCN,基本都是 two-stage 的,普遍速度比较慢。
- 用了什么方法
- 提出了 bottom-up 的方法,先语义分割,再根据分割结果获取实例。
- 整体模型如下图所示
- thing/stuff 通用了 encoder 部分
- decoder部分前面的结构都非常类似,使用了ASPP和一系列decoder(注意,decoder有skip connection)
- stuff 的最终预测就是普通的 deeplab 算法,dense prediction
- thing 的预测使用了 instance center prediction 和 instance center regression
- 这部分其实比较麻烦。
- Instance center regression 的 channels 是2,也就是每个点到对应instance中心点的偏移量。
- 那么,通过聚类我们就可以得到每个中心点对应的一组像素点,聚类结果就是该instance 的mask。
- 还有一个问题,如何获取instance的类别?在前一步聚类的时候,就是通过 semantic 的预测结果,对每一类分别进行聚类的。
- 这样得到的 instance 没有 confidence,基于 yolo 提出了一种 confidence 的计算方法。
- 效果如何:又是一个全景分割baseline,速度快
- 还存在什么问题&可借鉴之处
- 这是提出了一种解决方案,其中的 deeplab 可以通过其他语义分割模型替换。
2.3 Fully Convolutional Networks for Panoptic Segmentation
- 相关资料:
- 论文基本信息
- 领域:全景分割
- 作者单位:港中文&牛津&港大&旷视&思谋
- 发表时间:2021 CVPR
- 一句话总结:Panoptic FCN,提出一种可同时处理 things 和 stuff 的方法,实现真正的 end-to-end 全景分割。
- 要解决什么问题
- 全景分割的一个主要问题在于,处理things区分个体而stuff不区分个体。
- 两类任务所需的特征不太相同
- things 需要 instance-aware features,stuff 需要 semantic-aware features。
- 因此,如果公用特征图,会导致模型能下降;不公用特征图会导致模型太大,需要算力太多。
- 为了解决这种不同,之前的全景分割模型一般都是份两路,一路实现实例分割,一路实现全景分割,结果通过后处理(类似NMS)进行筛选。
- 由于有后处理的存在,所以不能完全当作是 end-to-end 的结构,且模型推理速度也因此存在瓶颈。
- 用了什么方法
- 提出了一种新的结构,如下图所示。
- 其主要组件就是:FPN +Kernel Generator + Kernel Fusion + Feature Encoder
- Kernel Generator 分为两部分
- Position Head:生成与输入特征图同尺寸(长宽)的Object Centers(things相关,由于不同的实例中心点不同,所以可以通过物体中心点来表示,channels是things类别数量)和Stuff regions(stuff相关,用来表示stuff标签,channels是stuff类别数量)
- 为了更好的计算 Position Head 的损失函数,有多种GT生成方法,比如CenterNet中的Gaussian Kernels。所有Predictions都是在0到1之间。
- Kernel Head:CoordConv + 3*Conv。
- Kernek Fusion:根据 Position Head 的结果,选择对应位置的 Kernel Head 的结果,多原始FPN中多个stage结果进行合并。设置Objects数量为M,stuff数量为N
- 最终得到的 predictions 就是 Kernel Fusion 的结果与 Feature Encoder 结果的进行矩阵乘法。
- 如何通过 Predictions 得到最终结果?
- 先通过 Kenrel Generator,获取things的中心点以及stuff的位置
- 感觉,Prediction 的每一层都是一个mask。
- 损失函数分为两部分
- Position Head 一部分 计算 pos loss,使用了 Focal Loss
- Prediction 一部分,计算 seg loss,使用了 Dice Loss
- 效果如何:结果很多就不都贴了,放一个有代表性的,本文的方法,又快又好。
- 还存在什么问题&可借鉴之处
- 这篇论文已经有 TensorRT 量化了。
- 不知道换 backbone 效果如何。