2019||レンダリングとしてのPointRendImageセグメンテーションの詳細な解釈

§概要

効率的で高品質なオブジェクトとシーン画像のセグメンテーションのための新しい方法を提案します。

従来のコンピュータグラフィックス手法を使用してピクセルラベリングタスクを効率的にレンダリングする際に直面する課題を類推することにより、过采样和欠采样画像セグメンテーションをレンダリングの問題として扱う独自の視点を開発します。

この利点から、PointRend(ポイントベースのレンダリング)ニューラルネットワークモジュールを提案します。

  • このモジュールは、反復細分割アルゴリズムに基づいて、適応的に選択された場所でポイントベースのセグメンテーション予測を実行します。
  • PointRendは、既存の最先端モデルの上に構築することにより、インスタンスセグメンテーションおよびセマンティックセグメンテーションタスクに柔軟に適用できます。

PointRendは、正確にセグメント化されたオブジェクトを出力できます。

インスタンスまたはセマンティックセグメンテーションに関係なく、PointRendはCOCOと都市景観に大きなメリットをもたらします。既存の方法と比較して、PointRendの効率により、メモリまたは計算の観点から出力解像度がより現実的になります。

画像-20210805153540408

論文:arxiv.org/pdf/1912.08…

コード:github.com/facebookres…

§1。既存の問題

通常のグリッドは、滑らかな領域を不必要にオーバーサンプリングし、オブジェクトの境界をアンダーサンプリングします。滑らかな領域で過剰な計算が発生します。

§II・解決すべき問題

インスタンスセグメンテーションタスクでエッジが十分に洗練されていないという問題を解決するために、効率的で高品質のオブジェクトおよびシーン画像セグメンテーションの新しい方法が提案されています。

§3つのイノベーション:

ファジーポイントの予測にコンピューティングエネルギーを集中させましょう!

PointRendは、出力グリッド上のすべてのポイントを過剰に予測するのではなく、慎重に選択されたポイントに対してのみ予測を行います。ターゲットの輪郭領域から選択されたポイントのセグメンテーション予測を繰り返し改良し、オブジェクトエッジの画像セグメンテーションを最適化します。セグメント化が難しいオブジェクトのエッジや、高いエッジセグメント化精度が必要なシーンに適しています。

§4つの一般的な考え方

このペーパーの中心的なアイデアは、画像のセグメンテーションをレンダリングの問題として扱い、コンピューターグラフィックスの古典的なアイデアを使用して、高品質のラベルマップを効率的に「レンダリング」することです(図1の左下を参照)。

我们将这种计算思想封装在一个新的神经网络模块中,称为PointRend,该模块使用细分策略自适应地选择一个非一致的点集来计算标签。

画像-20210805153540408

思想缘由

对于之前的分割算法,可以看成是:

  1. 首先使用宽、高两个维度的坐标构成的均匀网格对图片进行划分。每个格子(每个坐标点,或者每个像素点)相当于一个采样点。
  2. 然后使用分割算法,对每个采样点进行分类。

然而一张任意图片里面,有低频、高频区域。在图像分割问题里面,两类区域有如下不同:

  1. 对于图片中低频区域(low-frequency、smooth-area),大概率属于同一个物体,没有必要多次采样。容易过采样(oversample);

  2. 对于图片中高频区域(high-frequency),靠近物体边界。如果这些区域的采样点太稀疏,最终会导致分割出来的物体边界过不真实,相当于欠采样(undersample);相反,如果采样点越多,分割出来的物体边界应该会更精细(sharp bounder)、真实。

用均匀网格划分图片采样的方式,对于低频区域来说,可能会过采样,浪费一些计算资源;对于高频区域来说,可能会欠采样,不能够得出精细的结果。

按照以上分析,即可得出优化分割算法的一个重要思路:优化采样方式

类似的采样问题,在graphics图像渲染领域,已经研究了很久。以图像渲染图(通过计算光源,物体材质等来添加光影,纹理等效果,使原来的图片获得3D效果)为例,一个常见的处理方式是:

  1. 首先进行不规则采样。比如,高频区域多采样、低频区域少采样。
  2. 然后渲染(rendering),将位置不规则的采样点的像素值,映射(例如插值)到位置规则的网格里面。

借鉴graphics里面渲染的思路,论文将分割问题看作一个类似的渲染问题来处理:

  1. 先通过一种“合理”的采样方式进行非均匀采样,计算出每个采样点的分割结果;
  2. 然后再将结果映射到规则的grid里面,类比rendering的过程。 论文将此方法称为:PointRend

§伍、 PointRend优点

  • 通用性

PointRend可以被合并到流行的元架构中,用于实例分割(例如Mask R-CNN[19])和语义分割中。

  • 高效性

它的细分策略有效地计算高分辨率分割地图,使用的浮点运算比直接密集计算少一个数量级。

  • 适用性

适用于对难以分割的物体边缘,或是对边缘分割精度要求很高的场景下。 效果图: 画像-20210517132150068

§陆、Architecture架构

我们实验的网络的主体框架是带有 ResNet-50 [20] + FPN [28] backbone的Mask R-CNN。

Mask R-CNN中的默认的mask head 是一个逐区域的FCN。

MLP是的输入是来自主干CNN的细粒度特征映射和粗预测。粗预测使MLP能够在由两个或多个box包含的单个点上做出不同的预测。细分掩模绘制算法,可以迭代细化预测掩模的不确定区域。

画像-20210517132204341

一个标准的网络分割(红色实箭头)获取输入图像,并使用一个轻量级的分割为每个检测到的对象(红色框)产生一个粗糙的(例如7×7)掩模预测。为了细化粗掩模,PointRend选择难以预测的点(红点/边界),并使用较小的MLP对每个点独立进行预测,把网路的重心放在难以预测的地方(详见6.1的迭代上采样)。最后再把粗预测与细预测的结果融合(个人理解)输入MLP,MLP使用插值特征计算。

MLP使用在这些点(红色虚线箭头)上计算的插值特征,这些点来自(1)主干CNN的细粒度特征映射和(2)来自粗预测掩码。粗掩码特性使MLP能够在由两个或多个盒子包含的单个点上做出不同的预测。本文提出的细分掩模绘制算法(图4和§3.1)利用此过程迭代细化预测掩模的不确定区域。

§柒、 PointRend

PointRend模块主要由三个部分组成: (i)A point selection strategy (点选择策略):

选择少量真值点执行预测,避免对高分辨率输出网格中的所有像素进行过度计算。

点选择能够有效节省算力,避免对高分辨率输出网格中的所有像素进行过度计算。 (ii) 级联细粒度和粗略预测特征

粗预测:多次迭代计算不确定不确定点,从小的feature map 双线性插值为大的feature map,

细粒度:细粒度特征图具有原图尺寸。

如上图(Fig.3)所示。

细粒度特征具有物体的细节信息。粗预测特征提供更多的上下文信息,同时表达语义类别。最后拼接作为每个点的最终特征表示。

(iii)point head:

一个经过训练的小型神经网络,从这种逐点特征表示中独立地预测每个点的标签。

下面我们就对他们逐个进行介绍:

7.1 Point Selection for Inference and Training(点选择的推理和训练)

推理

我们的推理选择策略是受到计算机图形学中经典的自适应细分技术[48]的启发。

该技术通过只注重于高概率相邻像素不同的地方来渲染高分辨率的图像(例如,通过光线追踪); 对于所有其他位置的值都是通过插值已经计算出的输出值(从一个粗糙的网格开始)获得的。

对于每个区域,我们以一种从粗到细的方式迭代地“渲染”输出蒙版。最粗糙的水平预测是在一个规则的网格上的点(例如,通过使用一个标准的粗分割预测头)。具体内容如下:

最开始输入粗预测的是最原始的最小分辨率的feature map。

1.其进行预测。

2.对预测结果进行双线性插值进行上采样(对应于下图中间的28x28格子)。它是通过对7x7的格子使用双线性插值进行上采样后的结果。

3.然后在上采样的结果中选择 T o p β N Top-βN ​​​ 个 不确定的点。所谓最不确定,是指分割的概率最接近0.5的点(为什么是0.5?,如果一个像素点为背景,则预测值为较小的数据(e.g:0.3),这些点一般在边界不同物体的边界。

4.然后再对N个不确定的点(红点)进行预测,在更精细的网格上恢复细节。

重复迭代1~4这个过程,直到达到所需的网格分辨率。

画像-20210517132222340 画像-20210511104949787 画像-20210511104957843 画像-20210511105005337 画像-20210511105012751

画像-20210511154406302

论文中的单次迭代图(这个图里的图片尺寸与上面的不一样):

ここに画像の説明を挿入

训练

在训练过程中,PointRend还需要选择点来构建逐点特征,用于point head。原则上,点选择策略可以类似于在推理中使用的细分策略。然而,细分的策略会引入对神经网络的反向传播不太友好。故此,我们使用一种基于随机抽样的非迭代策略进行训练

采样策略在feature map上选择随机的N(超参数)个点进行训练。它的设计是为了使网络选择不确定的区域进行计算,同时保留一定程度的统一覆盖,一共三个原则:

  • 过生成:

我们从均匀分布中随机抽取KN(K>1)个点作为候选点。

  • 重要性抽样:

我们通过先插值所有KN点上的粗糙预测值,然后计算这些点不确定性,选择其中最不确定的 β N ( β [ 0 , 1 ] ) βN(β∈[0,1]) 个点,作为需要关注的具有不确定性的粗预测点。

  • 广域覆盖:

从从均匀分布采样(FIg.5 a))中选择(1−β)N个点。

上述三个步骤可示意为下图(图5),在k和β变化的情况下(对于train和inference,N的值可以不同),得到了各点对不同的偏向。

在训练时,除了粗分割,预测和损失函数只在N采样点(βN+(1-β)N)上计算,这比通过细分步骤更简单和高效。这种设计类似于Faster R-CNN系统[13]中RPN + Fast R-CNN的并行训练。

ここに画像の説明を挿入

上图展示了Fig.4中采样方式。论文指出,mildly biased采样在training过程中的效果最好。

biased采样,是指:向预测结果不确定的点“偏移“的采样方式。

7.2 Point-wise Representation

PointRend通过组合两种特性类型(细粒度和粗预测特性),在选定的点上构造逐点的特性,下面将进行描述。

细粒度特性(包含相对低级的信息)

使用例如ResNet这样的backbone CNN网络抽取出来的feature。

为了让PointRend渲染我们从CNN的feature maps中提取的特征向量精细分割细节。

为了让PointRend渲染精细分割细节,我们从CNN特征图中提取特征矢量采样点。由于点是一个实值的二维坐标,我们按照标准实践[22,19,10],在特征图上进行双线性插值去计算特征向量。特征可以从一个简单的特征映射中提取(例如,res2 in a ResNet),它们也可以从多个特征映射(例如,res2到res5,或它们的特征金字塔[28]对等体)中提取,并按照超列方法[17](Hypercolumns for object segmentation and fine-grained localization.)连接。

粗预测功能

网络计算出的一个粗略的分割结果。

细粒度特性支持解析细节,但在两个方面也存在缺陷。

①首先,它们不包含特定区域的信息,因此被两个实例的边界框重叠的同一点将具有相同的细粒度特征。然而,一点只能在一个实例前景。因此,对于实例分割任务,不同区域可能对同一点预测不同的标签,需要额外的区域特定信息。

②其次,根据细粒度特性所使用的特性映射,这些特性可能只包含相对低级的信息(例如,我们将在DeepLabV3中使用res2)。在这种情况下,具有更多上下文和语义信息的特性源可能会很有帮助。这个问题同时影响实例和语义分割。

基于这些考虑,第二种特征类型是来自网络的粗分割预测,即区域(盒)中每一点的k维向量表示一个k类预测。根据设计,粗解析提供更更全面的上下文,而通道传递语义类。

Point Head

相当于一个MLP多层网络。把前两个步骤计算出每个特殊点的feature后,通过MLP,对每一个点的feature进行处理,得到一个新的预测结果。

对于每个选定点的逐点特征表示,PointRend使用简单的多层感知器(MLP)进行逐点分割预测。这个MLP跨所有点(和所有区域)共享权值,类似于图卷积[23]或PointNet[43]。由于MLP预测每个点的分段标签,它可以通过标准的特定任务分段损失(在论文中§4和§5中描述)来训练。

ここに画像の説明を挿入

§捌·网络过程(一些细节)

Colab:https://colab.research.google.com/drive/1isGPL5h5_cKoPPhVL9XhMokRtHDvmMVL#scrollTo=-meq_L0xLhr0&uniqifier=2

1、Prepare input image.

2、在Resnet中得到layer2(res2即细分割)与layer4(out输入pointhead后得到粗分割)

画像-20210805202645417

3、得到粗分割

画像-20210805202846421

画像-20210511100342099

4、随机生成KN(K>1)个点坐标,在其中选出N个不确定点。

画像-20210511101258739

从KN中选N个点,这也是为什么这个飞机没有被红点连成封闭图形的原因。

画像-20210514135949657

5、在粗分割与细分割上进行点采样

while out.shape[-1] != x.shape[-1]:
	coarse = point_sample(out, points, align_corners=False)
	fine = point_sample(res2, points, align_corners=False)
复制代码

6、将粗分割与细分割concat起来输入MLP

feature_representation = torch.cat([coarse, fine], dim=1)
rend = self.mlp(feature_representation)
复制代码

关于得到不确定点的细节

①建立logit模型

我们先来科普一下这个模型

Logit is Log of odds.

img

img

论文是把预测值输入这个logit,然后对这个结果取绝对值,然后加负号,然后取Top K 就是需要的不确定点。

②对建立logit模型以及搞一些奇奇怪怪的操作(取绝对值后添加负号)的理解

图片中某一行像素点进行预测,其最大可能的预测输出为:

[0,2,0.4,0.5 ,0.7,……] (这里我们着重注意0.2,之所以会出现0.2的概率,可能是因为这个是背景图,所以预测不到东西)

下图为对应的logit:

image-20210805194549437

取绝对值

image-20210805194849002

取负数

image-20210805195010551

最后再用torch.topk取前 β K βK 个为不确定点。

③ 真·不确定点=不确定点+随机点

最后用于计算的不确定点为:概率为0.5左右的不确定点+随机得到的点坐标

image-20210514133258003image-20210514133313417

详细见柒.训练中的三个原则。

数据集

我们使用两个标准的实例分割数据集:COCO[29]和Cityscapes。我们报告了标准掩模AP度量[29],使用了COCO 3次运行的中位数和Cityscapes 5次运行的中位数(它有更高的方差)。COCO有80个具有实例级注释的类别。我们在train2017(约118k图像)上训练,并在val2017 (5k图像)上报告结果。正如[16]中提到的,COCO ground-truth通常是粗糙的,数据集的AP可能不能完全反映掩模质量的改进。因此,我们用用LVIS[16]的80个COCO类别子集(用AP?表示)测量的AP来补充COCO结果。LVIS注释的质量显著提高。我们使用在COCO上训练过的相同模型,并使用LVIS评估API简单地针对更高质量的LVIS注释重新评估它们的预测。Cityscapes是一个以自我为中心的街景数据集与COCO (1024×2048像素)相比,该图像具有更高的分辨率,具有更精细、更精确的地物真相实例分割

小问号Q&A

①Q:为什么要在随机选KN个点,然后在其中选βN个点?为什么不直接在全部的像素点中选取一定比例的点作为不确定点呢?

A1:为了实现高性能,每个区域只采样少量的点,并采用温和的偏置采样策略(即下图中的C),使系统在训练时更有效率。

image-20210516150557725

A2:从3D图像处理方法进行借鉴

image-20210515203300128

在规则网络上对2D图像的计算是主要方式,但是这不是其他视觉任务的情况。在3D形状识别中,由于立方体的限制,难以实现大的3D网格。

最近的网络考虑到更多有效的非均匀表示,如网格[47,14]、符号距离函数[37]和八叉树[46]。与符号距离函数类似[37],PointRend可以计算任意点的分割值。

Occupancy Networks: Learning 3D Reconstruction in Function Space这篇论文就是PointRend提到的[37],下面是我在这篇论文中找到的相关的内容

image-20210516143139932

为了学习神经网络fθ(p, x)的参数θ,我们在考虑的对象的三维边界体中随机抽样点:对于训练批中的第i个样本,我们抽样K个点 p i j R 3 , j = 1 , . . . , K p_{ij}∈R^3, j = 1,..., K ​​​,然后我们评估这些位置的小批量损失 L B L_B

我们可以看到,这篇论文中也只提到了一下在三维边界物体进行随机取样。(似乎并没有其他的解释,也许是我没有找到,或者这是一些我不知道的三维图像知识。求求相关理解或了解的大佬科普。)

总结

  • つまり、PointRendは不均一なサンプリング方法を使用します。アップサンプリングする場合、いくつかの高周波位置で特別な処理を実行して、結果をより洗練されたものにします。

  • セグメンテーションモデルが判断するのが最も難しいポイントは基本的にオブジェクトのエッジであり、エッジはオブジェクト全体のごく一部しか占めていないためです。したがって、著者は、毎回細分割予測のために予測マスクでN点を選択できることを提案します。目標は、解像度を上げた後、境界上のポイントを識別し、これらのポイントを分類することです。

  • この方法は、マスクr-cnnやFCNなどの現在の主流のセグメンテーションアーキテクチャに組み込むことができます。

  • その戦略は、直接集中的な計算よりも桁違いに少ない浮動小数点計算を使用し、高解像度のセグメンテーションマスクを効率的に計算できます。

  • この新しいアップサンプリング方法は、オブジェクトエッジの画像セグメンテーションを最適化し、セグメント化が難しいオブジェクトエッジや、高いエッジセグメンテーション精度が必要なシナリオに適しています。

おすすめ

転載: juejin.im/post/7087480930805235748