Abstract
基于深度学习的无监督显著性检测USOD
主要依赖于传统手工方法或预训练网络生成的噪声显著性伪标签。为了解决噪声标签问题,现有的方法只关注具有可靠标签的简单样本easy sample
,而忽略了困难样本hard sample
中有价值的知识(信息)。
本文,提出新的USOD
方法从易分样本、难分样本中挖掘丰富而准确的显著性知识(信息)。
- 提出基于样本置信度的显著性蒸馏策略
CSD
,对样本进行分类,引导模型从易分样本到难分样本的渐进式学习。 - 提出边界感知纹理匹配策略
BTM
,通过匹配预测边界周围的纹理来细化噪声标签的边界。
1.Introduction
- 提出基于样本置信度的显著性蒸馏机制
CSD
,根据样本的置信度对带有噪声标签的样本进行评分,然后通过自适应损失引导网络从易分样本到难分样本渐进地学习显著性知识(信息)。 - 提出边界感知纹理匹配机制
BTM
,通过匹配预测边界周围的纹理来细化噪声标签的边界。在训练过程中,预测的显著性边界在整个图像的外观空间中向周围边缘移动。 - 产生高质量的伪标签训练广义显著性检测器
2. Related Works
2.1. Supervised Salient Object Detection
2.2. Unsupervised Salient Object Detection
3. Our Approach
本文提出两种机制挖掘基于深度网络
Φ
\Phi
Φ生成的噪声激活图的准确显著性知识。
Activation map generation
为获得初始预测,使用本团队相关工作《Activation to Saliency: Forming High-Quality Labels for Completely Unsupervised Salient Object Detection》中的A2S
利用深度网络
Φ
(
X
)
=
Y
\Phi(X)=Y
Φ(X)=Y将输入图像
X
X
X生成激活图
Y
Y
Y,公式表征如下:
E
3
,
E
4
,
E
5
=
E
n
c
o
d
e
r
(
X
)
E_3,E_4,E_5=Encoder(X)
E3,E4,E5=Encoder(X)
F
i
=
S
E
(
E
i
)
,
i
∈
{
3
,
4
,
5
}
F_i=SE(E_i),i\in\{3,4,5\}
Fi=SE(Ei),i∈{3,4,5}
H
=
S
E
(
c
o
n
c
a
t
(
F
3
,
F
4
,
F
5
)
)
H=SE(concat(F_3,F_4,F_5))
H=SE(concat(F3,F4,F5))
Y
=
i
n
v
(
S
i
g
m
o
i
d
(
s
u
m
(
H
−
H
‾
)
)
)
Y=inv(Sigmoid(sum(H-\overline H)))
Y=inv(Sigmoid(sum(H−H)))
其中,
H
‾
\overline H
H是
H
H
H的空间均值。
使用MoCo-v2
预训练的ResNet-50
作为编码器,无额外手动注释。
解码器中,合成4个SE
块。
H
−
H
‾
H-\overline H
H−H确保噪声标签在使用固定阈值时自适应输入图像,同时保证正负样本共存。
s
u
m
(
⋅
)
sum(·)
sum(⋅)对通道维度上的特征求和。
S
i
g
m
o
i
d
(
⋅
)
Sigmoid(·)
Sigmoid(⋅)生成最终的显著性分数。
i
n
v
(
⋅
)
inv(·)
inv(⋅)识别更多的像素作为背景。
pred = torch.sum(feat, dim=1, keepdim=True)
# inv之前无sigmoid
pred = pred * foreground_sign(pred)
"""
针对包含更多角的预测区域判断为是背景
(4个角应当都是背景,如果4个角大于0的个数过多,就应该前景背景翻转,取反操作(此时预测的前景过多,前景远大于背景))
"""
def foreground_sign(pred):
b, c, w, h = pred.size()
p = pred.gt(0).float()
num_pos = p[:, :, 0, 0] + p[:, :, w-1, 0] + p[:, :, w-1, h-1] + p[:, :, 0, h-1]
sign = ((num_pos < 2).float() * 2 - 1).view(b, c, 1, 1)
return sign
Training strategy
由
Φ
\Phi
Φ生成的激活图可以感知输入图像
X
X
X中的判别区域,但由于存在噪声,激活图质量仍很低。
为提高激活图质量,采用三个策略训练
Φ
\Phi
Φ:
L
Φ
=
λ
c
(
L
c
s
d
+
L
^
c
s
d
)
+
λ
b
(
L
b
t
m
+
L
^
b
t
m
)
+
λ
m
L
m
s
L_\Phi=\lambda_c(L_{csd}+\hat L_{csd})+\lambda_b(L_{btm}+\hat L_{btm})+\lambda_mL_{ms}
LΦ=λc(Lcsd+L^csd)+λb(Lbtm+L^btm)+λmLms
其中,
L
^
\hat L
L^是不同尺度(对原图像进行缩放)下的预测损失。
首先,提出一种置信感知显著性蒸馏策略CSD
,从易分样本中挖掘有价值的显著性知识。
其次,提出一种边界感知纹理匹配策略BTM
对齐外观上的边界和预测显著图。
同时,多尺度一致性损失
L
m
s
L_{ms}
Lms确保对多尺度输入产生一致的预测。
3.1. Confidence-aware Saliency Distilling
提出前提:对于困难样本,隐藏在噪声中的显著性知识没有得到充分挖掘。
CSD
根据样本的置信度和训练进度对带有噪声标签的样本进行评分(固定阈值0.5,接近0.5即为困难样本)。
具体来说,简单样本包含可靠的知识,而困难样本的显著性知识隐藏在噪声中,可能在网络训练早期阶段破坏脆弱的显著性模式。受自步学习的启发,通过引入一个因子
ρ
\rho
ρ动态调整样本的梯度(训练进度)。随着训练的进行,
ρ
\rho
ρ从0线性增加到1。损失计算如下:
L
c
s
d
=
−
1
N
∑
i
N
∣
Φ
(
x
i
)
−
0.5
∣
(
2
1
−
ρ
)
L_{csd}=-\frac{1}{N}\sum^N_i|\Phi(x_i)-0.5|^{(2^{1-\rho})}
Lcsd=−N1i∑N∣Φ(xi)−0.5∣(21−ρ)
其中,
N
N
N是像素数量,
Φ
(
x
i
)
\Phi(x_i)
Φ(xi)是像素
x
i
x_i
xi的显著性检测。
省略了噪声标签
G
G
G,因为它是基于
Φ
(
x
i
)
\Phi(x_i)
Φ(xi)生成的。
因此,可以用更简单的方法计算像素
x
i
x_i
xi的置信分数
∣
k
i
∣
|k_i|
∣ki∣,即
∣
k
i
∣
=
∣
Φ
(
x
i
)
−
0.5
∣
|k_i|=|\Phi(x_i)-0.5|
∣ki∣=∣Φ(xi)−0.5∣,恒定值0.5与
H
‾
\overline H
H相关。
∂
L
c
s
d
∂
Φ
(
x
i
)
=
−
s
i
g
n
(
k
i
)
2
(
1
−
ρ
)
∣
k
i
∣
2
(
1
−
ρ
)
−
1
\frac{\partial L_{csd}}{\partial\Phi(x_i)}=-sign(k_i)2^{(1-\rho)}|k_i|^{2^{(1-\rho)}-1}
∂Φ(xi)∂Lcsd=−sign(ki)2(1−ρ)∣ki∣2(1−ρ)−1
其中,
s
i
g
n
(
k
i
)
∈
{
−
1
,
1
}
sign(k_i)\in \{-1,1\}
sign(ki)∈{−1,1}。
3.2. Boundary-aware Texture Matching
提出目的:通过匹配纹理细节, 从而对齐显著性边界和图像边缘
通常,显著性边界的外观与显著性预测具有相似的纹理。因此,匹配不同图map
的纹理可以指导产生合理的显著性分数。该策略同样适合其他模态,例如深度图、热图像和光流。
类似于LBP
特征,分别从显著性预测和外观中提取纹理向量。
对于显著性检测,第
i
i
i个像素的纹理向量
T
i
s
=
[
t
i
,
1
s
,
t
i
,
2
s
,
…
…
,
t
i
,
k
2
s
]
T^s_i=[t^s_{i,1},t^s_{i,2},……,t^s_{i,k^2}]
Tis=[ti,1s,ti,2s,……,ti,k2s]由
t
i
,
j
s
=
∣
Φ
(
x
i
)
−
Φ
(
x
j
)
∣
,
j
∈
K
i
t^s_{i,j}=|\Phi(x_i)-\Phi(x_j)|,j\in K_i
ti,js=∣Φ(xi)−Φ(xj)∣,j∈Ki,其中
K
i
K_i
Ki是像素
x
i
x_i
xi的
K
×
K
K\times K
K×K领域。
对于外观信息,可以是RGB图像、光流、深度图或热图像。
为了从多模态数据中提取更多的特征,计算纹理向量
T
i
a
=
[
t
i
,
1
a
,
t
i
,
2
a
,
…
…
,
t
i
,
k
2
a
]
,
t
i
,
j
a
=
e
x
p
(
−
α
∑
m
∣
∣
x
i
(
m
)
−
x
j
(
m
)
∣
∣
2
)
,
j
∈
K
i
T^a_i=[t^a_{i,1},t^a_{i,2},……,t^a_{i,k^2}],t^a_{i,j}=exp(-\alpha \sum_m||x_i^{(m)}-x_j^{(m)}||^2), j\in K_i
Tia=[ti,1a,ti,2a,……,ti,k2a],ti,ja=exp(−α∑m∣∣xi(m)−xj(m)∣∣2),j∈Ki,其中
α
\alpha
α是超参数,
x
i
(
m
)
x^{(m)}_i
xi(m)是模态m
的外观数据。
两个元素之间的微小差异会在
T
s
T^s
Ts中产生小元素,但会在
T
a
T^a
Ta中产生大元素。
因此,
T
i
s
⋅
(
T
i
a
)
T
T_i^s \cdot (T_i^a)^T
Tis⋅(Tia)T被定义为将像素
x
i
x_i
xi作为显著性边界而非相似性边界的匹配惩罚项。
损失计算如下:
L
b
t
m
=
∑
i
b
i
T
i
s
⋅
(
T
i
a
)
T
∑
i
b
i
L_{btm}=\frac{\sum_ib_iT^s_i\cdot (T^a_i)^T}{\sum_ib_i}
Lbtm=∑ibi∑ibiTis⋅(Tia)T
如图5所示,对于预测的边缘像素,发现一些附近的像素在显著性得分上有显著差异。一般来说,边界和这些像素之间的外观不同,因为它们分别位于显著物体和背景中。如果不是这种情况,期望边界像素的显著性分数接近附近的像素,这样边界就会向相反的方向移动。经过一个迭代训练,可以将预测的显著性边界与图像边缘对齐。
# 膨胀and腐蚀
def get_contour(label):
lbl = label.gt(0.5).float()
ero = 1 - F.max_pool2d(1 - lbl, kernel_size=5, stride=1, padding=2) # erosion
dil = F.max_pool2d(lbl, kernel_size=5, stride=1, padding=2) # dilation
edge = dil - ero
return edge
def BTMLoss(pred, image, radius, config=None):
alpha = config['rgb']
modal = config['trset']
num_modal = len(modal) if 'c' in modal else len(modal)+1
slices = range(0, 3*num_modal+1, 3)
sal_map = F.interpolate(pred, scale_factor=0.25, mode='bilinear', align_corners=True)
image_ = F.interpolate(image, size=sal_map.shape[-2:], mode='bilinear', align_corners=True)
mask = get_contour(sal_map)
features = torch.cat([image_, sal_map], dim=1)
N, C, H, W = features.shape
diameter = 2 * radius + 1
kernels = F.unfold(features, diameter, 1, radius).view(N, C, diameter, diameter, H, W)
kernels = kernels - kernels[:, :, radius, radius, :, :].view(N, C, 1, 1, H, W)
dis_modal = 1
# 从外观信息计算纹理表示
for idx, slice in enumerate(slices):
if idx == len(slices) - 1:
continue
dis_map = (-alpha * kernels[:, slice:slices[idx+1]] ** 2).sum(dim=1, keepdim=True).exp()
# Only RGB
if config['only_rgb'] and idx > 0:
dis_map = dis_map * 0 + 1
dis_modal = dis_modal * dis_map
# 从显著性信息计算纹理表示
dis_sal = torch.abs(kernels[:, slices[-1]:])
distance = dis_modal * dis_sal
loss = distance.view(N, 1, (radius * 2 + 1) ** 2, H, W).sum(dim=2)
loss = torch.sum(loss * mask) / torch.sum(mask)
return loss
3.3. Multi-scale Consistency
显著目标在多尺度输入中是一致的。因此,将输入图像的大小调整为参考尺度,并产生一致的预测:
L
m
s
=
∑
i
∣
y
i
−
r
e
s
i
z
e
(
y
^
i
)
∣
2
L_{ms}=\sum_i|y_i-resize(\hat y_i)|^2
Lms=i∑∣yi−resize(y^i)∣2
其中,
y
i
y_i
yi和
y
^
i
\hat y_i
y^i是不同尺度的显著性预测。
3.4. Training a Generalized Detector
根据之前USOD
方法,基于显著性预测
Y
Y
Y通过
Y
¨
=
C
R
F
(
Y
)
\ddot Y=CRF(Y)
Y¨=CRF(Y)生成伪标签
Y
¨
\ddot Y
Y¨,训练具有IOU
损失的额外显著性检测器。
对于RGB SOD
,使用与之前相同的检测器。
对于多模态SOD
,使用MIDD
网络作为检测器。
4. Experiments