作者:Alexander Kirillov Yuxin Wu Kaiming He Ross Girshick
机构:Facebook AI Research (FAIR)
引用:Kirillov A, Wu Y, He K, et al. Pointrend: Image segmentation as rendering[C]//Proceedings of the IEEE/CVF conference on computer vision and pattern recognition. 2020: 9799-9808.
源码地址 https://github.com/facebookresearch/detectron2/blob/main/projects/PointRend
以语义分割任务为例: https://github.com/facebookresearch/detectron2/blob/main/projects/PointRend/point_rend/semantic_seg.py class PointRendSemSegHead
Abstract
用于高效的、高质量的图像分割
像素标记任务面临的过采样和欠采样问题,模拟经典的用于有效渲染的计算机视觉方法,从新的视角去看待图像分割问题(点渲染)
论文提出了 PointRend(Point-based Rendering 基于点渲染)的神经网络模块:这个模块基于迭代细分算法(an iterative subdivision algorithm),自适应的选择位置,然后在这些位置上进行基于点的分割预测。
这个模块是通用的,能够集成在实例和语义分割任务
效果输出更加清晰的边缘
每一步,在光滑区域进行双线性上采样;在数量较少的,自适应选择的位置上(偏向于物体边界)进行更高分辨率的预测
Introduction
图像分割就是将采样在规则网格上的像素映射成标签图
输入图像是像素组成的规则网格;
中间特征表达是特征向量组成的规则网格;
输出是规则网络上的类别图
强调规则网格上的图像和标签图
这种规则的网格对于卷积计算是方便的,但是计算上并不理想
预测的标签图是光滑的,
比如:相邻的像素通常具有相同的标签;高频区域只在稀疏的边界上;
规则网格将不必要的过采样光滑区域同时欠采样轮廓;
这导致过量的计算集中在光滑和模糊的轮廓上;
图像分割在低分辨率的规则网格上进行预测,如1/8边长(语义分割);28x28 mask R-CNN; 作为过采样和欠采样的折中
在计算机图形学中,将一个3d模型渲染在规则的2d网络上;虽然输出是规则网格,但是计算并非均匀的分布在网格上。
常用的图形学策略就是,在图像上,自适应选择点的不规则子集,计算像素值。
PointRend 接受一个或多个定义在规则网格上的特征图作为输入;在精心选择的位置上进行预测预测。
通过插值的方式,提取出选择点的特征,然后使用 point-head 预测这些点特征。
总结:
图像分割的输出通常是在低分辨率的,如1/8或1/4边长;
原因是计算量和显存的限制,原因之一就在于过量的计算都集中在光滑的区域或模糊的轮廓上
而在计算机图形学中,渲染时计算是非均匀的分布在网格上的,常用的策略就是在一些自适应选择的点上计算像素值
这篇工作就是将图像分割看作渲染问题,高效的渲染高质量的分割结果
提出了 PointRend,一个基于点渲染的神经网络模块,使用细分策略,自适应的选择不均匀的点集计算标签
Method
将计算机视觉得图像分割问题模拟为计算机图形学中的图像渲染问题
渲染是将模型展示在一个像素组成的规则网格上;
最然输出表达是一个规则网格,但是潜在的物理实体是连续的,图像平面上任意实数点的物理占用和物理属性都能通过物理和几何推理得到,如光追。
图像分割可以视为底层连续实体的占用图,分割的输出就是由这个底层实体中渲染得到。
这个实体就编码在特征图当中,可以通过插值的方式访问其任意点。
可以用一个参数化的方程(线性层)通过训练,学习物理和几何推理,完成从任意插值点到占用图的预测。
基于这个分析,文章提出了基于点渲染的叫做PointRend的模块,用于图像分割。
光追就是光线追踪,光线跟踪也叫raytracing或者光束投射法,是一个在二维屏幕上呈现三维图像的方法。
中学物理中就曾讲过光学知识,当光线透射到物体表面时,通常会同时发生3件事,那就是光被吸收、反射和折射。特别是当光被折射到不同方向时,光谱就会发生变化。无论怎样,光线总会经过一系列的衰减最后进入人的眼睛,光线追踪就是要计算出光线发出后经过一系列衰减再进入人眼时的情况,特别是对第一人称的游戏来说,这种技术非常有助于提高游戏场景的真实感。其实,这种技术并不是在DirectX 10时代才诞生的,它被提出、被研究已经超过30年了。近些年来也常被应用于电影3D特效中。不过应用于电脑游戏中,还是从DirectX 10开始的。
水面倒影、玻璃反光,环境里的阴影部分,都是光追实时还原的光影效果。
PointRend 模块通常以一个或多个C通道的CNN特征图为输入,这些特征图通常比原图粗糙4倍或16倍,然后输出类别预测,输出更高分辨率的结果。
模块包括三部分:
- point selection strategy, 选择实数点预测,避免计算均匀分布在所有像素上,导致过量计算。
- point-wise feature representation,利用双线性插值策略,将第一步中的实数点提取出来。(更好的挖掘编码在通道维度上的信息)
- point head 神经网络,用于预测 point-wise feature representation
Point Selection for Inference and Training (重新渲染哪些点)
直觉的,这些点应该集中分布在高频区域,如目标轮廓,类似于光追中的抗锯齿问题。
分为推理和训练两个过程
Inference
这个技术用于高效的渲染高分辨率图像,通过只计算容易出现错误的位置(预测向量 top1 - top2 差值越小表明约容易预测错误)
采用迭代的方式渲染最终结果;
每次上采样两倍后,选择 N 个最不确定的点重新渲染;
重复这个过程,直到上采样到期望的分辨率。
Train
训练阶段的点选择策略与推理时相似;不过采用基于随机采样的非迭代策略;
采样策略在特征图上选择N个点进行训练;但是让采样点更趋向于不确定区域。
具体策略如下:
首先均匀的随机采样kN个点(k>1);然后从kN个点中选择
β
N
\beta N
βN 个最不确定的点;剩余
(
1
−
β
)
N
(1-\beta)N
(1−β)N 点均匀采样得到。
这些点坐标是没有刻度的,,由最近的四个点插值得到。
训练时计算顶层粗分割的损失和N个点的分类损失
Point-wise Representation and Point Head (如何重新渲染)
Fine-grained features 细粒度特征是从层次特征中获取的如(res2 or res2-res5)主要包含低级的局部线索
Coarse prediction features 是分割的类别预测结果!!!(K-dim vectors),包含更多区域信息和语义信息
点特征由这两种特征插值得到,拼接在一起输入PointHead
Point Head 是一个3个层的MLP层,输出 K-dim 的类别预测