论文地址:https://webdocs.cs.ualberta.ca/~xuebin/BASNet.pdf
内容简介
- 这个网络是用来做显著目标检测的(SOD),可以在边界处取得比较出色的效果
- Boundary Aware指的是用了个针对边界进行关注的loss
- 有种把预测问题建模成了中间预测和边缘预测的感觉
网络结构
还是算一个比较经典的Encoder-Decoder + Refine的结构,先整一个粗的结果,然后再考虑怎么优化。
Encoder-Decoder:
- 每个decoder的输出(图中的sup)受ground truth监督,从而降低过拟合的风险
- Encoder用的是修改后的Resnet-34
Refine:
大多数情况下一个Encoder-Decoder出来其实就"高度可用"了,后面要做的就是疯狂尝试怎么去打磨。首先是这么个思想:
S
refined
=
S
coarse
+
S
residual
S_{\text {refined }}=S_{\text {coarse }}+S_{\text {residual }}
Srefined =Scoarse +Sresidual
这个式子这么理解:refine网络需要学习的是ground truth(实际值)减去coarse(预测值)得到的"残差"。
而这篇文章很有意思的分析了什么叫coarse:
a是ground truth,gt显著图只有0和1两种情况。
b是第一种coarse的情形。因为模型输出的是一个概率图,所以会有个从0到1过渡的过程,但在视觉上这就会造成边缘变淡,看起来模糊。而这个模糊对应的gt有一部分是0,有一部分是1,因此确实有可能找到一个"自适应"的阈值将其分割,从而使得边缘更加锐利。
c是第二种coarse的情形。没有绝对的0和1,中间区域呈现出模糊的情况,这也是目前大部分模型在解决的问题。
d是一般的情形,结合两种coarse的综合情况,中间和边缘都糊。
而具体落实到refine网络的结构上…其实就是一个简化的一阶段encoder-decoder,个人感觉没有太多好研究的。
Loss
首先总的loss是6个side output加上2个output(sup7,sup8)的loss:
L
=
∑
k
=
1
K
α
k
ℓ
(
k
)
\mathcal{L}=\sum_{k=1}^{K} \alpha_{k} \ell^{(k)}
L=k=1∑Kαkℓ(k)
l
(
k
)
l^{(k)}
l(k)就是第k个side output的loss,
α
k
\alpha_{k}
αk是权重,对中间层的输出进行监督训练有助于减轻过拟合。
而对于某个具体的
l
(
k
)
l^{(k)}
l(k)而言:
ℓ
(
k
)
=
ℓ
b
c
e
(
k
)
+
ℓ
s
s
i
m
(
k
)
+
ℓ
i
o
u
(
k
)
\ell^{(k)}=\ell_{b c e}^{(k)}+\ell_{s s i m}^{(k)}+\ell_{i o u}^{(k)}
ℓ(k)=ℓbce(k)+ℓssim(k)+ℓiou(k)
给人的感觉就比较,缝合(文中也直接干脆叫了Hybrid Loss,混合损失)…标题中所谓的"Boundary Aware"也是源自于里面的
ℓ
s
s
i
m
(
k
)
\ell_{s s i m}^{(k)}
ℓssim(k),一个用来针对边界进行监督的loss。
个人感觉这个loss对整个结果贡献巨大:
把Hybrid Loss换成别的单(双)loss后…结果有点过于夸张。