原文:CASENet: Deep Category-Aware Semantic Edge Detection
代码:CASENet CVPR2017
1.简要介绍
这篇文主要讲的是关于多标签语义边缘检测任务,一般的边缘检测都是二元任务,如果还想让边缘有类别属性就更具挑战性。下图来自CItyscapes数据集,图中包含行人、建筑物、车等类别物品。图像中的边缘像素可以同时属于多种类,例如行人和建筑物在交接处的像素点与这两个类别都关联。
本文提出了CASENet,最终生成K张与原图大小一样的边缘图,每张图表示特定类的边缘概率,每个边缘像素由一个向量表示。下图是网络效果的一个例子。
对于输入图像 I 和类别数K,可以获得K个边缘图{
Y
1
,
.
.
.
,
Y
K
Y_1,...,Y_K
Y1,...,YK },用
Y
K
(
p
∣
I
,
W
)
∈
[
0
,
1
]
Y_K(p|I,W)∈[0,1]
YK(p∣I,W)∈[0,1]表示像素p在第K个类别的边缘概率,W表示参数。
本文主要贡献包括:
- 提出了一个多标签学习框架,比传统的多类框架有更好的边缘学习能力
- 提出了一种新的嵌套结构,不需要对ResNet进行深监督,底层特征只用于加强顶层分类
- 在 SBD和Cityscapes数据集上效果是当时的SOTA
2.主要内容
损失函数: 用的是交叉熵损失函数的变体,如下。
β表示图像中非边缘像素的百分比,因为正负样本像素数量差距很大。
网络结构: 在介绍本文提出的CASENet(图c)之前,先介绍两种可供选择的网络结构,这两种结构也可以解决语义边缘检测任务,但是有一些缺点,而CASENet能解决这些不足。
Base network: 利用全卷积网络解决边缘检测问题,采用ResNet-101结构并去掉原始的平均池化和全连接层,留下底层卷积块。为了更好地保存低级边缘信息,改变第一个和第五个卷积块的步长(res1,res5,2→1),然后在后续卷积层引入空洞卷积,保证和原始ResNet-101的感受野一致。
图a就是上述所说的Base network,在它顶层加了一个分类模块(细节见图d)。分类模块包含一个1x1卷积和一个双线性插值的上采样层,生成K个激活图{ A 1 , . . . , A K A_1,...,A_K A1,...,AK },每张图的尺寸也和原始图像一样,再通过sigmoid函数获得 Y k Y_k Yk。
Deeply Supervised Network (DSN): 如图b,在每个残差块后接一个分类模块,获得五个分类激活图{ A ( 1 ) , . . . , A ( 5 ) A^{(1)},...,A^{(5)} A(1),...,A(5) } ,每个分类图都是K通道。然后通过一个切片连接层(sliced concatenation layer,如图g,其中颜色代表通道标号 )融合这五个分类激活图,最终获得一个5K通道的激活图。
A f = A 1 ( 1 ) , . . . , A 1 ( 5 ) , A 2 ( 1 ) , . . . , A K ( 5 ) A^f = A^{(1)}_1,...,A^{(5)}_1, A^{(1)}_2,...,A^{(5)}_K Af=A1(1),...,A1(5),A2(1),...,AK(5) 。 A f A^f Af作为融合分类层(fused classification layer)的输入,获得一个K通道的激活图 A ( 6 ) A^{(6)} A(6),融合分类层是K组1x1的卷积。最终针对{ A ( 1 ) , . . . , A ( 6 ) A^{(1)},...,A^{(6)} A(1),...,A(6) } 计算6个损失函数,实现深监督。
CASENet: 在之前Base model和DSN的基础上,作者发现了一些点:
- 首先底层侧边的感受野有限,而上下文信息对于语义分类来说很重要,所以要求网络在早期进行语义分类很不合理。所以语义分类应该在高层实现,其获得的高级特征更能有利于语义分类。
- 底层特征对顶层分类有利,抑制非边缘像素,并提供详细的边缘定位和结构信息。因此,在边缘检测中应该考虑到它们。
作者提出的CASENet如图c,采用嵌套结构。跟DSN有些相似,相比DSN的提升如下:
- 底层侧边的分类模块改成特征提取模块
- 仅在顶层放一个分类模块以及实行监督
- 用shared concatenation替换掉sliced concatenation layer层
提取特征模块和分类模块的区别在于前者输出的是一个单通道特征图
F
(
j
)
F^{(j)}
F(j)而不是K类激活。shared concatenation层将来自side1-3的 F = {
F
(
1
)
、
F
(
2
)
、
F
(
3
)
F^{(1)}、F^{(2)}、F^{(3)}
F(1)、F(2)、F(3)}分别与顶层K激活融合,最终得到:
A
f
=
F
,
A
1
(
5
)
,
F
,
A
2
(
5
)
,
F
,
A
3
(
5
)
,
.
.
.
,
F
,
A
K
(
5
)
A^f = F,A^{(5)}_1,F,A^{(5)}_2, F,A^{(5)}_3,...,F,A^{(5)}_K
Af=F,A1(5),F,A2(5),F,A3(5),...,F,AK(5)
然后将结果输入到fused classification层,生成一个K通道的激活图 A ( 6 ) A^{(6)} A(6)。
总的来说,CASENet是一个通过跳接让低级特征来加强高级语义分类的边缘检测和分类网络。
Training labels:
考虑到人工标注和真实边缘的失调,以及边界附近像素的标签模糊性,作者利用的是更厚一点的GT边缘用于训练。这可以通过查看像素的邻域并在分割标签中寻找任何差异来实现。如果存在这种差异,则将像素视为边缘像素。邻域的最大范围设为2。在多标签框架下,来自不同类的边可能重叠。