BlumNet: Graph Component Detection for Object Skeleton Extraction阅读笔记

BlumNet:用于对象骨架提取的图组件检测

摘要: 本文提出一个简单有效的框架:BlumNet,用于提取自然图像和 binary shapes 中的对象骨架。BlumNet有三方面优势:(1)图分解和重构策略进一步将骨架提取任务简化为图组件检测问题,从而显著提高骨架提取的准确性和鲁棒性。(2) 直观表示每个具有多结构和重叠线段的骨架分支,可以有效防止骨架分支消失问题。(3) 不同于传统的骨架热图,本方法直接输出更适用的骨架图。实验验证了BlumNet的优势:与sota AdaLSN相比,其精度明显更高(0.826 vs 0.786),显著提高了 mixed object deformations 骨架检测的鲁棒性,并在 binary shapes 上实现sota(例如,在MPEG7数据集上为0.893)。


1 INTRODUCTION

骨架(或中轴)是binary shpe (图1(a))或自然图像(图1(b))中紧密且有意义的物体表示。实际中,为了便于骨架修剪、匹配、分类和分析,对象骨架常编码为图形格式,即“骨架图”。骨架图的各种组件定义如下(见图1(c ),(d))① Endpoint 端点:骨架点只有一个相邻点。② Junction point 接合点:有三个或更多相邻点。③ Connection point:既不是 Endpoint 也不是Junction point。④ 骨架分支:两个直接连接的骨架点内的 Connection point 序列。

在这里插入图片描述

图1:骨架图:(a)二元形状,(b)自然图像,(c)Endpoint(橙色)和 junction points(绿色),(d)不同颜色的骨架分支。

1.1 Challenges on Skeleton Extraction

现有的方法主要侧重于使用 CNN 提取骨架,但很难在实际中应用它们,特别是需要高质量骨架图时,因为现有方法提取的骨架在图的完整性和稳定性方面都很有限。
质量有限:大多数方法要么不能保证表示中的拓扑和几何特征,要么在热图(也称为骨架图)中输出有噪声、不相交和不完整的骨架分支。
在这里插入图片描述

图2:图像骨架提取的比较:(a)HED,(b)SRN,(c)Hi-Fi,(d)DeepFlux,(e)AdaLSN,以及(f)BlumNet。

鲁棒性有限:现有方法主要关注全局骨架结构,而非细粒度骨架分支。仔细观察图3中的红色椭圆:几何体的任何变形都很容易导致细粒段的消失、扭曲和延伸。因此,生成的骨架图在骨架分支处尤不稳定。

在这里插入图片描述

图3:AdaLSN (top)和 BlumNet(bottom)关于三种图像变形的评估。骨骼差异用红色椭圆标记。

1.2 Tackling the Challenges

BlumNet主要应对质量和健壮性挑战,它恰当地结合了粗粒度(全局骨架结构)和细粒度(局部分支分布)特征来提取骨架图。简而言之,BlumNet将骨架图分解为结构化组件,并将骨架提取问题简化为图组件检测和组装任务(类似于自下而上姿态估计中的检测与分组)。
BlumNet由三部分组成:(a)用于 training data preparation 的骨架图分解策略,(b)用于检测和识别初始组件的 Graph Component Detector (GCD) ,(c)用于重建骨架分支和最终骨架图的 Graph Reconstructor (GR)。
进一步将骨架分支分解为重叠线段可以提高BlumNet的效率,且该策略通过检测细粒度和重叠线段有效防止分支消失。用简单的 vector 编码点(endpoint和joint point)和线段能够简化任务从而提高GCD的效率。因此,现有的 line segment detectors 可扩展用于GCD任务,例如,可以在GCD中合并transformer架构以捕获点和线段检测的空间和上下文特征。由于来自分支、噪声和对象的线段很容易混淆,因此每个线向量都会联合生成两个额外的metrics(isBranch和Graph ID),以确定其在骨架和图形上的分组分配。因此,GR本质上对噪声更不敏感,支持多对象。
BlumNet更具泛化性,在多种图像上具有鲁棒性(见图2(f)),并且它以端到端的方式直接从多个对象中提取骨架图。

2 RELATED WORKS

如图4所示,大多基于CNN提取的骨架要么有噪波和脱节的片段,要么有不完整的骨架分支。
在这里插入图片描述

图4:使用基于CNN的方法提取形状骨架:FHN、U-Net、DISCO、SDE、SkeletonNetV2和BlumNet。

3 BLUMNET

对于图像I,gt骨架图G由endpoints E、junction points J及其对应的骨架分支B组成:
在这里插入图片描述G中的单个endpoint、junction point和分支分别表示: e, j, b。对包含多个对象的图像,将每个对象视为G中的子图,并通过唯一索引标识。将最简单的图G定义为一条曲线:一个骨架分支b,具有两个endpoint: e1和e2,其中b∈ B、 e1、e2∈ E。

3.1 Skeleton Graph Decomposition

对GT骨架G,本节的主要目的是将其分解为点和线段,以进行GCD训练。通过以下方式将G形式化:
在这里插入图片描述
L表示B中提取的线段, l k l_k lk是L中的一条线段 l k ∈ L 且 k ≥ 1 l_k∈L 且 k ≥ 1 lkLk1,k的最大值 K 取决于 l k l_k lk 的长度 ( ∣ l k ∣ |l_k| lk) 以及相邻线段 l k , l k + 1 l_k, l_{k+1} lk,lk+1 的重叠程度 o∈[0,1],图5是个直观的示例,p1到p4是沿着分支的四个骨架点,p2和p3 anchor 了重叠,然后用对应于相邻线段 l k , l k + 1 l_k, l_{k+1} lk,lk+1 的重叠向量 p 1 p 3 → 和 p 2 p 4 → \overrightarrow{p_1p_3}和\overrightarrow{p_2p_4} p1p3 p2p4 近似分支。若 ∣ l k ∣ |l_k| lk更大或 o 更小则减小K(更少的线)。

在这里插入图片描述

图5:骨架图分解的思想。

实际上, l k l_k lk由带有固定 ∣ l k ∣ |l_k| lk的滑动窗口沿着B中b的path提取,(例如图5(b)中的 p 1 p 3 → \overrightarrow{p_1p_3} p1p3 ),之后 o 用于定位顺时针方向相邻线段 l k + 1 l_{k+1} lk+1 的起点(例如 p 2 p_2 p2)。对于长度短于 ∣ l k ∣ |l_k| lk的分支, 用方向相反的两次 l k l_k lk 来表示,例如( p 1 p 3 →    p 3 p 1 → \overrightarrow{p_1p_3}\;\overrightarrow{p_3p_1} p1p3 p3p1 )。o在实验中设为0.6,重叠和近似策略通过检测多个简单线段来描述复杂骨架,从而降低分支消失的可能性,因此可以有效提高GCD的精度。 最后,如公式2所示,来自G的训练数据包括:(1)端点E,(2)连接点J,(3)线段L,以及(4)它们的 sub-graph 标识。

3.2 Graph Component Detection

给定一幅图像I,GCD使用一个single网络 f ( I ; θ ) = ( E ^ , J ^ , L ^ ) f(I;\theta)= (\widehat{E},\widehat{J}, \widehat{L}) f(I;θ)=(E ,J ,L ) ,预测初始骨架组件, θ \theta θ是网络权重, E ^ , J ^ , L ^ \widehat{E},\widehat{J}, \widehat{L} E ,J ,L 分别是预测的endpoints、 junction points 和 line segments。为了便于Graph Reconstructor(GR), L ^ \widehat{L} L 中的每条线都包含一个置信度分数(isBranch),表示属于G的一条线的概率。 E ^ , J ^ , L ^ \widehat{E},\widehat{J}, \widehat{L} E ,J ,L 中的所有元素都包含一个Graph ID,用于标识G中的不同对象。

3.2.1 Network Architecture.

如图7所示,网络由两个主要部分组成:① 目标 query 特征生成网络(顶部)和 ②初始骨架组件预测分支(底部)。对于第一部分,扩展Deformable DETR(DEtection TRansformer)来编码和解码目标 query 特征。

在这里插入图片描述

图7:GCD网络。扩展了用于编码和解码骨架组件(如线和点)的transformer架构。

不同于输出bbox的原始解码器输出,GCD旨在预测线、点及其对应的 Graph ID,解码器还生成Type和IsBranch的辅助预测。为此,删除最后层中的线性投影和sigmoid函数,并为保留target query
embedding(即Target Query Features)(见图7(右上角))。Target Query Features由两部分组成:Line Query Features 和 Point Query Features,分别用于 line target和 point target。下面详细介绍五个预测任务的网络分支:
(i) Lines:Line Query Features的顶部加上一个三层FFN作为 detection head,FFN预测一个大小为 N l i n e × 4 N_{line}×4 Nline×4 的输出,每 n-th line vector 以 [ [ x 1 ( n ) , y 1 ( n ) ] , [ x 2 ( n ) , y 2 ( n ) ] ] [[x_1^{(n)}, y_1^{(n)}],[x_2^{(n)}, y_2^{(n)}]] [[x1(n),y1(n)],[x2(n),y2(n)]] 格式表示,坐标位置相对于图像宽度和高度。
(ii) isBranch:在 Line Query Features 的顶部加一个linear projection,然后添加一个softmax函数,用于分类一条 predicted line 是否属于G。对于 L ^ \widehat{L} L 中的每条line,isBranch给出两类分数(yes,no),例如[0.99,0.01]。
(iii) Points:在 Point Query Features 顶部添加一个FFN作为检测头。FFN预测一个大小为 N p o i n t × 2 N_{point}×2 Npoint×2 的输出,每 n-th 点由 [ x ( n ) , y ( n ) ] [x^{(n)}, y^{(n)}] [x(n),y(n)] 相对坐标格式表示,例如[0.56,0.74]。与线类似,相对坐标表示相对于图像宽度和高度的位置。
(iv) Type:在 Point Query Features 的顶部加一个linear projection ,然后接一个softmax函数,用于分类预测点的类型。对于 E ^ 和 J ^ \widehat{E}和\widehat{J} E J 中的每个点,Type给出三类分数:(‘end’, ‘junction’, ‘others’),例如[0.98、0.01、0.01]。
(v) Graph ID:在 Target Query Features 顶部添加一个 linear projection 来估计Graph ID。因为相比于具有预定义类的传统分类任务,G中的 sub-graph 数量未知,为此,我们采用associative embedding 的思想来表示联合目标预测和分组的输出。对于每个目标预测(线和点),embedding 用作“tag”来标识其子图分配,与同一 tag 值关联的所有预测都属于同一个子图。由于Graph ID是从 Target Query Features投影的,因此它本质上对应于预测的线和点。
上述分支的输出将用于 Graph Reconstructor中的预处理和骨架图重建。分解策略和GCD的 Transformer-based 模型是有效的(如图7(左下角)所示)。

3.2.2 Loss Function.

在这里插入图片描述
Line Loss: L l i n e L_{line} Lline基于匈牙利算法(即图论中寻找最大匹配的算法)计算以找到预测与gt间的二分匹配:
在这里插入图片描述
Point Loss:
在这里插入图片描述
ID Loss: ID Loss L i d L_{id} Lid 用于训练 tag 对(来自GCD的Graph ID分支)具有相似的值(如果相应的预测属于同一子图则具有相似值,否则具有不同值)。注意:网络没有准确的“GT”标签,因为重要的不是特定的 tag 值,而是它们之间的差异。
在这里插入图片描述

3.2.3 Implementation.

3.3 Skeleton Graph Reconstruction

用预测的 E ^ , J ^ , L ^ \widehat{E},\widehat{J}, \widehat{L} E ,J ,L 作输入,GR包含四个主要的步骤来输出重构子图。GR pipeline 如图8所示:
在这里插入图片描述

图8:GR pipelien。(c)中的分支和(d)中的子图用颜色(橙色和青色)区分。

具体步骤如下:
(1) Projection:先将预测的 E ^ , J ^ , L ^ \widehat{E},\widehat{J}, \widehat{L} E ,J ,L 投影到与 I 大小相似的 mask 上。
(2) Processing:先根据点和线的 Type,isBranch以及分数对其进行过滤。删除预测 Type 为 ‘others’ 的点,因为它们不对应于端点或连接点。预测的 lines 保留为分支(isBranch为true的概率更高)。然后根据 morphological dilation 和 erosion处理保留的线,以生成候选分支(参见(b))。
(3) Reconstruction: 点和分支候选对象根据其在 mask 中的位置进行迭代合并和连接。理想情况下,一个点应该完全重叠于其关联的分支,但实际上,大多数可能只是彼此接近(并不精确),为此,在一个点上迭代应用 dilation 操作,以检查与分支的交点。给定与分支关联的多个互斥点,将删除与分支距离较大(或isBranch分数较小)的点(类似于距离的“最大抑制”过程)。此外,丢弃没有任何关联点的分支候选。
(4) Identification: 使用最终候选分支及其Graph ID,识别并标记不同对象的子图(参见(d))。
算法1给出了重建细节。

在这里插入图片描述

Discussion. 对步骤(3) 的直观理解是:分支和候选点相互投影到图G上用于过滤和集成,但这两个迭代操作给 GR 带来了额外的计算复杂性。实际上,步骤(3)可以进一步简化为基于morphological dilation/erosion 和 branch growing的 branch generation 过程。除速度更快外,实验还表明,简化步骤(3)使 end 和 junction points 接近GT E和J,反映出BlumNet的高精度和鲁棒性。

猜你喜欢

转载自blog.csdn.net/unauna9739/article/details/127356639