【论文阅读】CASENet: Deep Category-Aware Semantic Edge Detection

论文地址:http://arxiv.org/abs/1705.09759

学习参考:【读书笔记】CASENet: Deep Category-Aware Semantic Edge Detection - 知乎

CASENet: Deep Category-Aware Semantic Edge Detection论文解读_我的博客有点东西-CSDN博客

学习过程:原文翻译自行理解、经典博客学习、形成自己的博客(包括论文要点以及阅读疑问)要反复、学会提炼重点、找到可以真正学习的点、公式的理解也慢慢加入

目录

 摘要

 一、问题描述:

多类别的损失函数 

 二、网络框架:

基本网络:

 基本结构:

深监督框架:

 CASENet框架:

 实验


 摘要

本文主要是给出一个类别感知的语义边缘检测算法。传统的边缘检测本身就是一个具有挑战性的二元问题,相比之下类别感知的语义边缘检测是一个更具有挑战性的多元问题因为边缘像素出现在属于两个或更多个语义类的轮廓或连接点中,所以本文对每个边缘像素与至少两个类别相关联这个问题进行建模,并提出了一种新的基于ResNet的端到端深度语义边缘学习架构,以及新的跳跃结构,其中顶层卷积层上的类别边缘特征进行共享并与同一组底层特征进行融合。最后,提出了一个多类别的损失函数来监督特征的融合。

多元问题、跳跃结构、特征共享、特征融合、多类别损失函数

图1所示。用我们的方法进行边缘检测和分类。
对于街景图像,我们的目标是同时检测边界,并为每个边缘像素分配一个或多个语义类别。
(b)和(c)是用HSV编码的颜色,其中色调和饱和度共同代表类别的组成和相关强度。 

上图是CItyscapes数据集中的一张道路图,其中有几类物体,比如:建筑地面天空汽车等等(疑问:各种颜色是具体啥意思?仅仅代表不同类别吗?典型的类别组合的颜色(可以看到图一上面对应颜色表示的含义图例);绿色和蓝色表示正确检测和错过的边缘像素?(这是下文中提到的,这句话是不是仅仅代表图2中颜色含义和图1无关?))。

  • 其中位于建筑物和杆轮廓上的边缘像素可以与这两个类别都相关联。在上图中对边界进行了可视化,列出了典型的类别组合的颜色,如“建筑+杆”和“道路+人行道”。
  • 关联程度:在本文的问题中,每个边缘像素由一个向量表示,其中向量的每个元素表示该像素与不同语义类别之间的关联程度
  • 多标签学习问题:虽然大多数边缘像素只与两个类别对象相关联,但在路口的情况下,可能边缘像素与三个甚至更多的类别像素相关联。因此,不限制一个像素可以关联的类别对象的数量,这也奠定了本文是作为一个多标签学习问题来进行研究的。

 图2。一个测试图像的例子和缩放的边缘映射对应的边界框区域。
可视化的边缘图分别属于人、车和路三个类别。
绿色和蓝色表示正确检测和错过的边缘像素。

在本文中,提出了CASENet,一个能够检测类别感知语义边缘的深度网络。给定K个语义类别,网络实际上产生个独立的边缘图,其中每个图表示某个类别的边缘概率(边缘图转化为数学思想就是边缘概率?)。上图分别给出了测试图像的边缘图。

本文的工作与HED(下面会介绍)同样采用了嵌套体系结构,但是将问题扩展到更困难的类别感知语义边缘检测问题上。
【论文阅读】(边缘检测相关)HED:Holistically-Nested Edge Detection_dujuancao11的博客-CSDN博客
其中主要贡献如下:

1. 为了解决边缘分类,提出了一种多类别的学习框架,比传统的多类框架更好地学习边缘特征。

2. 提出了一个新的嵌套结构,在ResNet上不使用深监督,其中底部的特征用于加强顶部的分类。

本文还发现深监督对该问题没有益处(深监督可以参考DSN的结构,即对每一个侧面的输出都进行监督学习)。 

 一、问题描述:

  • 给定输入图形,其目标是基于预定义类别计算相对应的语义边缘图。(端到端?图到图?)
  • 数量上:输出对应每个输入图像的K种语义类别(输出图数量为语义类别数1------K)
  • 大小上每个边缘图的大小与输入图像I 大小相同(1------1)
  • 网络输出条件概率表示像素p的第k个语义类别的边缘概率。

多类别的损失函数 

可能由于语义分割的多类性质的原因,关于类别感知语义边缘检测的几个相关文章都是从多类学习的角度来研究问题(一个object属于一个label)
本文认为这个问题本质上应该允许一个像素同时属于多个类别的,并且应该由多标签学习框架来解决。

多类学习与多标签学习的区别:

  • 多类学习:一个object属于一个label
  • 多标签学习:允许一个像素同时属于多个类别的
    (一个人的边缘的一部分也恰恰是一栋建筑的边缘,那么这部分的边缘的label就有两类。
    所以 one hot编码不能用于这种label
    官方代码使用了uint32来表示label,按照位数来判断像素的label,如果像素属于第一类也属于第5类,那么他的label就是1000…010001,一共32位数字,最高位代表loss是否计算这个样本。)

作为多label分类问题,自然不能用多分类问题的交叉熵做损失了。多label分类和多分类不是一样的概念。 

 

 其中\beta是图像中非边缘像素占样本数偏度的百分比(用来平衡?)用来平衡样本的不均性。p只每一个像素位置。

该损失函数很好解释,可以视作对每一类别都进行一次二分类的交叉熵。最后将k个结果叠加。

 二、网络框架:

在网络的设计上,不能和语义分割的设计一致,不能使用encorder,因为边缘属于低级特征,需要从低到高的设计网络。而语义属于高级特征,才可以用decorder结构,不断对高级语义特征refine。

本文提出了CASENet,一种端到端可训练的卷积神经网络(CNN)架构(如图c所示)来解决类别感知语义边缘检测。在描述CASENet之前,首先提出两种可选的网络架构,尽管这两种架构也可以检测出边缘,但是都有一些无法解决的问题,本文通过提出CASENet架构来解决这些问题。

两种可选网络架构的不足--------进而说明自己网络的优势(同时也表达自己网络的设计原理)

图3。本文设计的三个CNN架构如图(a)-(c)所示。
实心矩形表示CNN层的复合块。其宽度的任何减少都表明该块输出特征图的空间分辨率下降了2倍。箭头旁边的数字表示块输出特性的通道数。蓝色实心矩形是ResNet块的堆栈
紫色实心矩形是我们的分类模块
红色虚线表示块的输出由方程1中的损失函数监督
灰色实心矩形是我们的边特征提取模块
一个深绿色的实心矩形是我们的融合分类模块执行K-grouped 1×1 卷积
(d)-(h)描述了(a)-(c)中使用的各个模块的更多细节,其中用矩形框表示输入和输出特征图。

(应该搞清楚新的网络为什么要这样进行改进??还有每个模块细节设计的意义??)

基本网络:

基于 ResNet-101框架的一些改进点

  1. 本文采用ResNet-101框架,通过删除原来的平均池完全连接的层,并保留底层卷积
    为了更好地保留低级边缘信息,进一步修改基本网络。
  2. 本文将ResNet-101中的第一和第五卷积层(上图中的“res1”和“res5”)的步长大小从2变为1。
  3. 将扩张因子(dilation)引入后续的卷积层,以保持与 原来的ResNet相同大小的感受野。

 基本结构:

 (d):分类模块:

  • 一个1×1卷积层后面加一个双线性上采样(由K组反卷积层去实现)以产生个激活图,每个都与图像大小相同(双线性上采样的作用?1×1卷积层+双线性上采样组合的作用?
  • 公式(多类别损失函数中的公式)给出的单元来计算一个像素属于第K类边缘的概率.

深监督框架:

全局嵌套边缘检测(HED)网络的是一个有深监督嵌套架构

  • 基本思想是除了顶部的网络损失之外,也计算底部卷积层造成的损失(当时的创新点损失同时计算)
  • 另外,通过监督侧面激活的线性组合来获得融合边缘图。

HED----》CASENet

扩展:二进制边缘检测到多类别多标签(用于处理K个通道的侧边输出的和K个通道的最终输出。每个激活图都有K个通道,K通道对应K标签吧?切片级联层融合5个激活图,最终产生5xK个通道的激活图

(DSN) 切片级联

通过切片拼接层(图3(g)中颜色表示通道指数)融合这5个激活图,得到一个5k通道激活图

这里的连接采用切片级联和组卷积的原因如下:
由于5个侧面激活是被监督的,所以限制侧面激活的每一个通道,以使它带来与相应类最相关的信息(切片操作的一些理解?)

通过切片连接和分组卷积,像素p的融合激活由下式给出:

 

 这基本上集成了来自不同尺度的相应类的激活作为最终融合的激活,同样地,本文也使用了这种设计。 

 CASENet框架:

在介绍完基本框架和DSN框架后,发现类别感知语义边缘检测任务中存在几个潜在的问题

  1. 第一,底部的感受野是有限的。因此,由于早期的网络给出的语义分类是不合理的,所以给出上下文信息在语义分类中起着重要作用
    本文认为,语义分类应该在顶部发生,其中特征由高级信息进行编码
  2. 第二,底面侧面特征有助于增强顶级分类,抑制非边缘像素并提供详细的边缘定位和结构信息。因此,在边缘检测中应该考虑到它们。

本文提出的CASENet架构(图c)是可以解决上述问题的。该网络采用嵌套架构,在某种程度上与DSN有些相似,但也包含了几个关键的改进。总结这些改进如下:

  1. 底部的分类模块更换为特征提取模块。
  2. 分类模块放在网络的顶部,并进行监督。
  3. 执行共享级联(图h),而不是切片级联(这俩的具体区别?)

 ​​​​​​​

 

(采用侧面特征提取(而非侧面分类),仅输出单通道特征图F^{i} 而不是K类激活图,最后采用的是共享级联(而非切片级联)从side 1-3复制底层特征F={ {F^{1},F^{2},F^{3}}},并分别连接到K个顶部激活中的每个激活。公式的具体含义需要再理解一下?) 

 一般来说,CASENet可以被认为是一个联合边缘检测和分类网络,通过让低级特征参与,并通过跳跃结构来增强更高层次的语义分类。

参考学习: CASENet: Deep Category-Aware Semantic Edge Detection论文解读_我的博客有点东西-CSDN博客

在这里插入图片描述 

 解读:

  • 主干网络采用resnet101,前3个stage的特征都送到侧特征提取器(side extractor),然后和最后一个stage的特征做一个融合,用于监督计算loss。
  • 如果数据集有k类,则网络最后的输出应该为厚度为k的特征图,每个像素位置都有k维向量。向量的值描述属于对应的类别的概率。这是一个多label分类问题。
  • 并不对resent的顶层进行监督,而是利用低级特征(底层特征)增强高级特征用于分类。
  • 其中fused classification用的是group卷积。
    网络有几个特点:

  • 对前三个stage的特征提取特征,输出通道为1(灰色模块)

  • 对第5个stage做分类,输出k的通道的特征(紫色模块)

  • 以上两个模块都有上采样环节,保证了输出的分辨率和原图一致

作者认为,底层特征的感受野有限,所以让前几层去做语义分类是不合理的,所以前3个特征仅仅作为特征输入到另一个side feature extractor中。所以语义分类应该进行才高层中,因为高层特征有很强的高级信息。
同时底层特征因为具有更加详细的边缘位置信息和结构信息,用来增强高层的分类任务是有帮助的。所以设计了这样的结构:前三层的低级特征,融合到第5个stage的高级特征最后的监督。

如何能体现是低级特征帮助高级特征用于分类呢?

  • 注意到,side feature的输出通道为1,classification的输出通道为k,也是类别的输入。shared concat的做法是,对classification的每一个特征图(for map in k maps),前3个stage的输出都插队排进去,所以最终的特征图通道是4*k的。
  • 而且fused classification中,用到的是group卷积,虽然示意图中一个卷积核对厚度为3的特征图卷积,但实际网络这里是每4个map一组做卷积,每四个map,其中一个来自于高级特征,剩下三个来自于低级特征。
  • 加入膨胀因子

    因为修改了resnet的结构,stride改变了,最后的特征图的分辨率是原来的1/8,所以感受野也变小了。为了增大感受野,在stride本来为2的层之后的卷积层都是用空洞卷积。(在网络设计过程中一些卷积的巧妙使用。

总体的思路见原文:

一般来说,CASENet可以被认为是一个联合的边缘检测和分类网络,通过一个跨层架构,让较低层次的特征参与并增强较高层次的语义分类。

 实验

预处理部分

考虑到人工标注和真实的边缘存在错误标注和label领域的像素的label又具有不明确的类别信息,作者生成了更粗一点的label为网络的训练GT。这可以通过在label边缘的邻域内寻找和分割标签不一样位置的像素,把这些像素也归为边缘得到。(要我说直接用形态学操作也行吧)

除了对label的预处理,还有几点细节需要注意:

resnet使用空洞卷积,在除了第一个conv,和1x1的卷积,其他的卷积都使用空洞率为2的卷积。
使用预训练模型,在ms coco上的做预训练
参数和数据增强见下

猜你喜欢

转载自blog.csdn.net/dujuancao11/article/details/122918643
今日推荐