忙的不是很彻底,继续看论文撸代码,找找灵感。
这篇论文主要针对实例分割中的标签做了优化,列举了之前的 Polar Mask,LSNet,Deep snake 等方法的优缺点。提出自己的方法,确实很有新意。这篇文章写的也比较好,实验很是充分,是篇好文章。
基于轮廓的方法使用粗糙的特征以及手工设计的轮廓初始化,限制了模型的性能;而固定式预测标签角点对的方法会导致学习困难。本文提出了一种基于轮廓的方法 E2EC。首先,应用了一种可学习的轮廓初始化方式(轮廓初始化模块+全局轮廓可变形模块);其次,提出了一种新的标签采样计划:多方向对齐策略;再者提出了动态匹配合适的预测目标对,即动态匹配损失。数据集 KITTI INStance (KINS) ,Semantic Boundaries Dataset (SBD),Cityscapes,COCO。在 A6000,512x512 的图片推理速度达到 36 fps。
上来介绍一些经典的方法,并提出不足之处。关键:通常由 128 个角点组成的轮廓能够描述大多数的实例。基于轮廓的方法仍然有很多缺点:采用手工设计的轮廓,导致不合理的路径;局部的或者有限的信息应用到轮廓的调整上,导致轮廓粗糙;局部聚合不得不无效地重复获得全局信息;GT和预测的顶点之间是固定的匹配,忽视了预测角点的轮廓位置需要调整。
本文提出了 E2EC,主要3点贡献:可学习的轮廓初始化结构;多方向对齐;动态匹配损失函数。
实验效果很厉害,如果去除了迭代的可变形模块,推理速度更快。
遍历之前经典的双阶段/单阶段实例分割方法,指出其缺点,实时性不行,需要复杂的后处理且不能应用于模态实例分割任务上?(原文:cannot be applied to amodal instance segmentation tasks)
缺点:通常分割质量比较粗糙。
看这一个吧,Poly Transform,训练非端到端,速度慢。
首先生成热力图定位实例中心,然后根据每个初始轮廓角点的偏移量直接基于中心点回归,于是初始轮廓点就是中心点的坐标加上偏移量。
N N N 个初始点的坐标 + 1个中心点坐标通过 MLP 得到粗糙的实例轮廓(N=128)。
通过固定一些与中心点有关的顶点方向,然后在固定点周边采样。当采样点的数量等于选取的方向时,就变成了 PolarMask,当方向选取为 0 时,就变成了 LSNet。
损失由两部分组成:预测的角点对准标签边界上的最近邻点;关键标签点推动最近预测点朝着其本身位置移动。
用公式表示如下:
x i ∗ = arg min x ∥ p r e d i i n − g t x i p t ∥ 2 L 1 ( pred , g t ) = 1 N ∑ i = 1 N ∥ p r e d i out − g t x i ∗ i p t ∥ 1 y i ∗ = arg min y ∥ p r e d y i n − g t i k e y ∥ 2 L 2 ( pred , g t ) = 1 n k e y ∑ i = 1 n k e y ∥ p r e d y i ∗ out − g t i k e y ∥ 1 L ( pred , g t ) = L 1 ( pred , g t ) + L 2 ( pred , g t ) 2 \begin{array}{c} x_{i}^{*}=\arg \min _{x}\left\|p r e d_{i}^{i n}-g t_{x}^{i p t}\right\|_{2} \\ L_{1}(\text { pred }, g t)=\frac{1}{N} \sum_{i=1}^{N}\left\|p r e d_{i}^{\text {out }}-g t_{x_{i}^{*}}^{i p t}\right\|_{1} \\ y_{i}^{*}=\arg \min _{y}\left\|p r e d_{y}^{i n}-g t_{i}^{k e y}\right\|_{2} \\ L_{2}(\text { pred }, g t)=\frac{1}{n_{k e y}} \sum_{i=1}^{n_{k e y}}\left\|p r e d_{y_{i}^{*}}^{\text {out }}-g t_{i}^{k e y}\right\|_{1} \\ L(\text { pred }, g t)=\frac{L_{1}(\text { pred }, g t)+L_{2}(\text { pred }, g t)}{2} \end{array} xi∗=argminx∥ ∥prediin−gtxipt∥ ∥2L1( pred ,gt)=N1∑i=1N∥ ∥prediout −gtxi∗ipt∥ ∥1yi∗=argminy∥ ∥predyin−gtikey∥ ∥2L2( pred ,gt)=nkey1∑i=1nkey∥ ∥predyi∗out −gtikey∥ ∥1L( pred ,gt)=2L1( pred ,gt)+L2( pred ,gt)
其中 g t i p t gt^{ipt} gtipt 表示最近的 GT 角点, p r e d i n pred^{in} predin 初始的轮廓点, p r e d o u t pred^{out} predout 粗糙的轮廓点, g t i k e y gt_{i}^{key} gtikey GT 关键点, p r e d y i n pred_{y}^{in} predyin 初始轮廓中的关键点, p r e d y ∗ o u t pred_{y^{*}}^{out} predy∗out 粗糙轮廓中的关键点,L1 损失和 L2 损失同时使用。
可以基于任何检测器来实现,只需将其输出从 H × W × 2 H\times W \times 2 H×W×2 改为 H × W × ( N × 2 ) H\times W \times \left(N \times 2\right) H×W×(N×2),其中 N N N 为初始轮廓上角点的数量。这里采用 CenterNet 作为主干检测器。
L1 损失来监督初始化轮廓分支:
L i n i t = 1 N ∑ i = 1 N smooth l 1 ( x ~ i i n i t − x i g t ) L coarse = 1 N ∑ i = 1 N smooth l 1 ( x ~ i coarse − x i g t ) L i ter 1 = 1 N ∑ i = 1 N smooth l 1 ( x ~ i iter 1 , x i g t ) \begin{aligned} L_{i n i t} &=\frac{1}{N} \sum_{i=1}^{N} \text { smooth } l 1\left(\tilde{x}_{i}^{i n i t}-x_{i}^{g t}\right) \\ L_{\text {coarse }} &=\frac{1}{N} \sum_{i=1}^{N} \text { smooth } l 1\left(\tilde{x}_{i}^{\text {coarse }}-x_{i}^{g t}\right) \\ L_{i \text { ter } 1} &=\frac{1}{N} \sum_{i=1}^{N} \text { smooth } l 1\left(\tilde{x}_{i}^{\text {iter } 1}, x_{i}^{g t}\right) \end{aligned} LinitLcoarse Li ter 1=N1i=1∑N smooth l1(x~iinit−xigt)=N1i=1∑N smooth l1(x~icoarse −xigt)=N1i=1∑N smooth l1(x~iiter 1,xigt)
其中 x ~ i i n i t \tilde{x}_{i}^{i n i t} x~iinit 为预测的初始轮廓角点, x ~ i coarse \tilde{x}_{i}^{\text {coarse }} x~icoarse 为预测的粗糙轮廓角点, x i g t x_{i}^{g t} xigt 为标签轮廓角点, x ~ i iter 1 \tilde{x}_{i}^{\text {iter } 1} x~iiter 1 为变形后的轮廓角点。
接下来是 DML 损失函数:
L i ter 2 = L D M L ( x ~ i i ter 2 , x i g t ) L i ter = L i ter 1 + L i ter 2 \begin{array}{c} L_{i \text { ter } 2}=L_{D M L}\left(\tilde{x}_{i}^{i \text { ter } 2}, x_{i}^{g t}\right) \\ L_{i \text { ter }}=L_{i \text { ter } 1}+L_{i \text { ter } 2} \end{array} Li ter 2=LDML(x~ii ter 2,xigt)Li ter =Li ter 1+Li ter 2其中 x ~ i i ter 2 \tilde{x}_{i}^{i \text { ter } 2} x~ii ter 2 为第二个可变形模块中变形后的轮廓角点。
整体损失为:
L overall = L det + α L i n i t + β L coarse + β L_{\text {overall }}=L_{\text {det }}+\alpha L_{i n i t}+\beta L_{\text {coarse }}+\beta Loverall =Ldet +αLinit+βLcoarse +β其中 α = β = 0.1 \alpha=\beta=0.1 α=β=0.1, L det L_{\text {det }} Ldet 为中心点的检测损失。
采用 KINS,SBD,Cityscapes,COCO 数据集。
标准的 AP \text{AP} AP 以及 AP m s k \text{AP}^{msk} APmsk 表示分割质量, AP b d y \text{AP}^{bdy} APbdy 表示边框质量。
150 个 epochs,多尺度数据增强,学习率 0.0001 0.0001 0.0001 在 80 和 120 epochs 时衰减一半。
如表 1 (a) 所示。
如表 1(c) 所示。可视化结果:
如表 1(d) 所示。可视化结果图 7。
测试在单个分辨率为 768x2496 的图像上,结果如下表所示,
可视化结果:
使用多尺度训练,输入单张分辨率图像为 512x512,结果如下表所示:
可视化的结果如图 9 所示。
多尺度训练,测试在单张分辨率为 1216×2432 的图像上进行。
表 5 和表 4,可视化结果图 9。
本文提出了由3个模块组成的 E2EC,在数据集上性能很好,去除可变形模块后,FPS 很高。
写在后面
这篇文章写作和创新点都很好,既对前面的方法进行了总结,又将自己的方法做足了实验,值得精度。
还没关注的同学点点关注,持续输出干货文章。