RIS 系列 Locate Then Segment: A Strong Pipeline for Referring Image Segmentation 论文阅读笔记

一、Abstract二、引言三、相关工作3.1 目标分割3.2 指代定位与分割3.3 跨模态交互

四、提出的方法4.1 视觉和语言特征提取视觉特征语言特征融合

4.2 定位相关滤波Transformer

4.3 分割4.4 训练和推理

五、实验5.1 实验步骤数据集和指标实施细节

5.2 主要结果5.3 定量分析5.4 消融实验

六、结论

写在前面

  一篇 21 年的文章,为啥还要继续写篇博客呢,因为 21 年基本上都是在搞大模型,这篇文章还算正常点。

论文地址:Locate then Segment: A Strong Pipeline for Referring Image Segmentation代码地址:原文暂未提供收录于:CVPR 2021Ps:2023 年每周一篇博文阅读笔记,主页 更多干货,欢迎关注呀,期待 6 千粉丝有你的参与呦~

一、Abstract

  Referring image segmentation (RIS) 的定义。之前的方法未能显式地建模指代实例的定位信息,而通常聚焦于设计隐式的特征交互机制,融合视觉特征从而直接生成最后的分割 mask。本文通过另外一个角度,将其解耦合为 “Locate-Then-Segment” (LTS) 定位-分割” 的计划。LTS 首先提取和融合视觉-文本特征,得到一个跨模态表示。然后在视觉-文本特征上应用一个跨模特交互来定位到指代目标,最后采用一个轻量化的分割网络生成 mask。实验结果表明本文提出的方法很有效。

二、引言

  本文研究语言引导的目标分割任务,旨在根据一个自然语言表达式分割出图像上特定目标的 mask。应用很广泛。接下来是一些难点的介绍。

  给定图像和指代句子,有两个影响模型性能的关键因素:首先模型必须突出图像上最显著的关联目标;模型必须生成一个最好的分割结果。现有的方法大致总结如下:利用一个 CNN 和 RNN 来表示图像特征和文本特征;利用跨模态注意力和循环的 LSTM 来融合生成一个粗糙的 mask,利用 Dense CRF (DCRF) 进一步后处理从而得到最终精炼 mask。

  之前的工作主要关注如何融合图像和语言特征,直接的解决方法是利用拼接-卷积的方法,然而未能有效对齐视觉-语言模态。于是一些方法提出跨模特注意力机制,自适应地融合图像中的重要区域以及语言表达式中的关键词。最近一些工作利用不同类型的信息词来学习对齐的多模态表示,要么通过表达式感知所有的实体,要么利用语言结构作为一个引导来分割指代目标。相应的问题就是:算法越来越复杂,使得算法分析和比较更加困难。此外,这些方法未能显式地定位到由语言表达式引导的目标,仅仅利用耗时的后处理操作来生成最终分割的 mask。

  于是本文从其它维度来解决这一问题,将 RIS 任务划分为两个子任务:指代目标位置预测+目标分割 mask 的生成。具体来说,首先融合视觉和语言特征得到跨模态特征,然后提出一个定位模块来直接获得与表达式相关的视觉内容,这一目标先验可以用于后续分割模块的视觉位置引导。接下来拼接目标先验与跨模态特征,然后应用一个轻量化的 ConvNets 得到最终的分割 mask。

三、相关工作

3.1 目标分割

  基于全卷积的分割网络:DeepLab、PSPNet,以及 Mask R-CNN、FCNs 系列。

3.2 指代定位与分割

  指代定位是指用 bounding box 定位到语言表达式所指图像中的特定目标,然后是一些工作的列举。

3.3 跨模态交互

  最近,注意力机制表明在提取与语言表达式相关的视觉内容时效果很好。

  相关滤波算法可以视为注意力机制的一种简单方式,在计算机视觉任务中被广泛使用,目标追踪用的比较多,目标分类任务也使用这个。而在本文,利用基于语言的条件相关滤波来得到相关的热力图,其中高回应值被视为相关的目标先验。

  除滤波外,很多跨模态注意力模型提出自适应地关注图像中的重要区域,和语言表达式中的关键词。而本文提出利用统一的基于注意力的 building block Transformer 来得到跨模态相关的注意力,去除了复杂注意力模型的设计。

四、提出的方法

  首先,引入视觉和文本表示的提取过程,之后描述下两个包含滤波(或者基于 Transformer 的定位模块)和基于分割的轻量化 ConvNets 网络。最后,给出模型学习过程的细节。

4.1 视觉和语言特征提取

  如上图所示,模型的输入由图像

I

I

I 和指代表达式

X

X

X 组成。首先采用 ConvNets 和 GRU 分别提取图像和文本特征。

视觉特征

  对于输入的图像

I

R

H

×

W

×

3

I\in\mathbb{R}^{H\times W\times 3}

I∈RH×W×3,利用视觉 Backbone 提取多层级的视觉特征

F

v

1

R

H

32

×

W

32

×

d

1

F_{v_{1}}\in\mathbb{R}^{\frac{H}{32}\times\frac{W}{32}\times d_{1}}

Fv1​​∈R32H​×32W​×d1​、

F

v

2

R

H

16

×

W

16

×

d

2

F_{v_{2}}\in\mathbb{R}^{\frac{H}{16}\times\frac{W}{16}\times d_{2}}

Fv2​​∈R16H​×16W​×d2​、

F

v

3

R

H

8

×

W

8

×

d

3

F_{v_{3}}\in\mathbb{R}^{\frac{H}{8}\times\frac{W}{8}\times d_{3}}

Fv3​​∈R8H​×8W​×d3​,其中

d

d

d 为特征通道的维度,

H

H

H、

W

W

W 分别是图像的高和宽。

语言特征

  给定一个指代句子

X

=

[

x

1

,

x

2

,

,

x

m

]

X= [x_1,x_2,\ldots,x_m]

X=[x1​,x2​,…,xm​],其中

x

i

x_i

xi​ 为第

i

i

i 个 token。首先应用 table lookup(这是啥?)得到词 embedding。通过 Glove,embedding 初始化为一个 300 维的向量。然后使用标准的双向 Gated Recurrent Unit (GRU) 来解决初始的 embedding 文本向量:

h

t

=

G

R

U

(

x

t

,

h

t

)

,

h

0

=

0

h

t

=

G

R

U

(

x

t

,

h

t

+

1

)

,

h

m

+

1

=

0

\begin{aligned}\overrightarrow{h_t}&=\overrightarrow{GRU}(x_t,\overrightarrow{h_{t-}}),h_0=0\\ \overbrace{h_t}&=\overleftarrow{GRU}(x_t,\overleftarrow{h_{t+1}}),h_{m+1}=0\\\end{aligned}

ht​

​ht​

​​=GRU

(xt​,ht−​

​),h0​=0=GRU

(xt​,ht+1​

​),hm+1​=0​其中

G

R

U

\overrightarrow{GRU}

GRU

G

R

U

\overleftarrow{GRU}

GRU

分别表示前向和后向 GRUs。然后在所有词表示上执行全局平均池化:

f

t

e

x

t

=

a

v

g

(

h

1

,

h

2

,

.

.

.

,

h

m

)

h

t

=

c

o

n

c

a

t

(

h

t

,

h

t

)

,

t

[

1

,

2

,

.

.

.

,

m

]

\begin{gathered}f_{text}=avg(h_1,h_2,...,h_m)\\h_t=concat(\overrightarrow{h_t},\overleftarrow{h_t}),t\in[1,2,...,m]\end{gathered}

ftext​=avg(h1​,h2​,...,hm​)ht​=concat(ht​

​,ht​

​),t∈[1,2,...,m]​

融合

  通过融合

F

v

1

F_{v1}

Fv1​ 和

f

t

e

x

t

f_{text}

ftext​ 得到多模态 tensor:

f

m

1

l

=

g

(

f

v

1

l

W

v

1

)

g

(

f

t

e

x

t

W

t

)

f_{m_1}^l=g(f_{v_1}^lW_{v_1})\cdot g(f_{text}W_t)

fm1​l​=g(fv1​l​Wv1​​)⋅g(ftext​Wt​)其中

g

g

g 表示 Leaky ReLU,

f

m

1

l

f_{m_1}^l

fm1​l​ 和

f

v

1

l

f_{v_1}^l

fv1​l​ 为

F

m

1

F_{m_1}

Fm1​​ 和

F

v

1

F_{v_1}

Fv1​​ 的特征向量。

W

v

1

W_{v_1}

Wv1​​ 和

W

t

W_t

Wt​ 分别是两个变形矩阵,将视觉和文本表示转变为相同的特征维度。然后获得接下来的

F

m

2

F_{m_2}

Fm2​​ 和

F

m

3

F_{m_3}

Fm3​​:

F

m

i

1

=

U

p

S

a

m

p

l

e

(

F

m

i

1

)

F

m

i

=

c

o

n

c

a

t

(

g

(

F

m

i

1

W

m

i

1

)

,

g

(

F

v

i

W

v

i

)

)

\begin{aligned}F_{m_{i-1}}^{'}&=UpSample(F_{m_{i-1}})\\F_{m_i}&=concat(g(F_{m_{i-1}}^{'}W_{m_{i-1}}),g(F_{v_i}W_{v_i}))\end{aligned}

Fmi−1​′​Fmi​​​=UpSample(Fmi−1​​)=concat(g(Fmi−1​′​Wmi−1​​),g(Fvi​​Wvi​​))​其中

i

[

2

,

3

]

i\in[2,3]

i∈[2,3],上采样步长为

2

×

2

2\times2

2×2。在后续过程中,利用

F

m

3

F_{m_3}

Fm3​​ 作为输入来生成分割 mask。之前的工作通常采用循环注意力机制来得到分割结果。本文表明定位-分割的性能更好。

4.2 定位

  为了定位到与语言表达式相关的目标,提出两种方式捕捉多模态特征间的上下文,包含相关滤波和统一的注意力 block 块 Transformer,这能避免复杂的注意力模型的设计。

相关滤波

  首先生成语言引导的内核

K

=

f

t

e

x

t

W

k

K=f_{text}W_k

K=ftext​Wk​,其中

K

R

d

k

K\in\mathbb {R}^{d_k}

K∈Rdk​,然后将其转化为

R

d

k

×

1

×

1

\mathbb{R}^{d_k\times 1\times 1}

Rdk​×1×1 对融合的特征

F

m

3

F_{m_3}

Fm3​​ 进行过滤:

H

m

a

s

k

=

c

o

n

v

(

K

,

F

m

3

)

H_{mask}=conv(K,F_{m_3})

Hmask​=conv(K,Fm3​​)其中

H

m

a

s

k

R

H

8

×

W

8

H_{mask}\in \mathbb{R}^{\frac{H}{8}\times\frac{W}{8}}

Hmask​∈R8H​×8W​,

c

o

n

v

conv

conv 表示卷积操作,热力图

H

m

a

s

k

H_{mask}

Hmask​ 为分割的粗糙 mask,其中具有最高得分的区域意味着最可能对应的语言表达式。

Transformer

  为维持与相关滤波的一致性,这里并不使用 Transformer 编码器来提取文本表示,而是将全局文本表示

f

t

e

x

t

f_{text}

ftext​ 作为编码器的输出。

  解码器采用标准的 Transformer 结构,使用多头注意力机制将多模态特征

F

m

3

F_{m_3}

Fm3​​ 的信息转换到激活图

H

m

a

s

k

H_{mask}

Hmask​ 上:

H

m

a

s

k

=

d

e

c

o

d

e

r

(

F

m

3

,

f

t

e

x

t

)

H_{mask}=decoder(F_{m_3},f_{text})

Hmask​=decoder(Fm3​​,ftext​)   解码器将序列作为输入,因此展平

F

m

3

F_{m_3}

Fm3​​ 的空间维度,得到一个形状为

d

×

H

W

64

d\times\frac{HW}{64}

d×64HW​ 的特征图。由于 Transformer 结构是输入不变的,再添加位置 embedding。

4.3 分割

  给定视觉目标先验,分割模块旨在生成最终的分割 mask。首先拼接原始的跨模态特征

F

m

3

F_{m_3}

Fm3​​ 和视觉目标先验

H

m

a

s

k

H_{mask}

Hmask​,利用一个分割模块来提炼粗糙的分割结果:

P

m

a

s

k

=

S

e

g

(

c

o

n

c

a

t

(

F

m

3

,

H

m

a

s

k

)

)

P_{\boldsymbol{mas}\boldsymbol{k}}=Seg(concat(F_{\boldsymbol{m}_3},H_{\boldsymbol{mas}\boldsymbol{k}}))

Pmask​=Seg(concat(Fm3​​,Hmask​))其中

S

e

g

Seg

Seg 的主体结构为 ASPP,采用可分离卷积,上采样特征图 2 倍。于是预测的 mask 为

P

m

a

s

k

R

H

4

×

W

4

P_{mask}\in\mathbb{R}^{\frac{H}{4}\times\frac{W}{4}}

Pmask​∈R4H​×4W​。

4.4 训练和推理

  在训练过程中,采用 Sigmoid Binary Cross Entropy (BCE) 损失训练:

L

s

e

g

=

l=1

H

4

×

W

4

[

y

l

log

(

p

l

)

+

(

1

y

l

)

log

(

1

p

l

)

]

\begin{aligned} L_{seg}& = \sum_{\text{l=1}}^{\frac{H}{4}\times\frac{W}{4}}[y_l\log(p_l)+(1-y_l)\log(1-p_l)] \end{aligned}

Lseg​​=l=1∑4H​×4W​​[yl​log(pl​)+(1−yl​)log(1−pl​)]​其中

y

l

y_l

yl​ 和

p

l

p_l

pl​ 分别为下采样 GT mask 的元素以及预测的 mask

P

m

a

s

k

P_{mask}

Pmask​。

  此外,为确保模型能够关注于相应的图像区域,添加了一个定位损失来监督位置预测:

L

l

o

c

=

l

=

1

H

8

×

W

8

[

y

l

log

(

h

l

)

+

(

1

y

l

)

log

(

1

h

l

)

]

L_{loc}=\sum_{l=1}^{\frac{H}{8}\times\frac{W}{8}}[y_l\log(h_l)+(1-y_l)\log(1-h_l)]

Lloc​=l=1∑8H​×8W​​[yl​log(hl​)+(1−yl​)log(1−hl​)]其中

h

l

h_l

hl​ 为下采样图

H

m

a

s

k

H_{mask}

Hmask​ 中的元素。最终,定义总损失如下:

L

=

L

s

e

g

+

λ

L

l

o

c

L=L_{seg}+\lambda L_{loc}

L=Lseg​+λLloc​其中

λ

=

0.1

\lambda=0.1

λ=0.1。

  在推理过程中,上采样预测的分割 mask

P

m

a

s

k

P_{mask}

Pmask​ 到原始图像尺寸

H

×

W

H\times W

H×W,并以 0.25 的阈值进行二值化得到最终的结果。

五、实验

5.1 实验步骤

数据集和指标

  RefCOCO、Ref-COCO+、RefCOCOg

  intersectionover-union (IoU)、prec@X

实施细节

  Darknet53 作为视觉 Backbone,预训练在 MSCOCO 上。输入图像尺寸

416

×

416

416\times416

416×416。在 RefCOCO 和 RefCOCO+ 数据集上,句子最大长度 15;而在 RefCOOCg 上则为 20。1024 维度的双向 GRU 用于挖掘文本特征。

d

k

=

1024

d_k=1024

dk​=1024。解码器 1 层,4 个头,1024 个隐藏单元。Adam 优化器,初始学习率

0.001

0.001

0.001,在第 30 个 epoch 时,乘 0.1。Batch_size 18,epoch 45。

5.2 主要结果

5.3 定量分析

5.4 消融实验

六、结论

  RIS 任务的挑战,文本提出将这一任务划分为两个子任务:指代目标预测和细粒度的目标分割生成。实验表明方法性能很好。

  尽管当前的 IoUs 大于之前的工作,但是仍低于 GT,而最近在图像分割的工作可能会带来一些进步。此外,本文仅利用简单的视觉和语言 Backbone,更复杂的结构可能有助于进一步提升性能。

写在后面

  这篇文章可以说是没赶上大模型的热潮啊,不然应该中不了的。文章提出的框架非常简单,然后创新点在当时看来也是足够的。实验很充足,就是结论部分略微偏少了。

精彩链接

评论可见,请评论后查看内容,谢谢!!!
 您阅读本篇文章共花了: