0
点赞
收藏
分享

微信扫一扫

边缘检测之RCF

code:​​https://github.com/meteorshowers/RCF-pytorch​​paper:​​https://arxiv.org/abs/1612.02103​​


文章目录

  • ​​摘要​​
  • ​​网络架构​​
  • ​​loss function​​

摘要

边缘检测是计算机视觉中的一个基本问题。近年来,卷积神经网络(CNNs)在这一领域取得了显著的进展。现有的方法采用特定层次的深度cnn,由于尺度和纵横比的变化,可能无法捕捉到复杂的数据结构。在本文中,我们提出了一种使用更丰富的卷积特征(RCF)的精确边缘检测器。RCF将所有卷积特性封装成更具判别性的表示形式,这很好地利用了丰富的特性层次结构,并且可以通过反向传播进行训练。RCF充分利用了目标的多尺度、多层次信息,全面地进行图像对图像的预测。使用VGG16网络,我们在几个可用的数据集上实现了最先进的性能。当在众所周知的BSDS500基准上进行评估时,我们在保持较快的速度(8 FPS)的同时,实现了0.811的ODS F-measure。此外,我们的快速版本的RCF在30fps的情况下达到了0.806的ODS F-measure。通过将RCF边缘应用于经典图像分割,我们也证明了该方法的通用性。

网络架构

边缘检测之RCF_损失函数

基于VGG16构造了一个简单的网络,产生conv3_1, conv3_2, conv3_3, conv4_1, conv4_2和conv4_3的边输出。可以清楚地看到,卷积特征逐渐变粗,中间层conv3_1、conv3_2、conv4_1和conv4_2包含了很多其他层没有的有用的细节。

边缘检测之RCF_特征向量_02
其建立在VGG16之上,根据其修改而来。与原来的VGG16相比:

  • RCF网络去除了原来所有的全连接层(最后的三个全连接层)以及最后的池化层。这样做是因为与VGG网络的设计初衷——图像分类问题不同,这个网络旨在边缘检测,VGG最后的全连接层得到的1×1×4096的输出是没有意义的,所以将其删去。
  • 为了进行边缘信息的提取,所以需要对像素值本身进行重新计算,所以在VGG16的每个卷积层后,都添加了一个1×1−21的卷积层,先升维,后通过1×1−1进行降维。
  • 其在每一个stage的最后添加了cross-entropy loss / sigmoid层以计算损失,更新参数。
  • 每一层中有deconv层进行上采样,将图像大小映射回原来的大小,最后在fusion部分将每一个stage的输出叠加,在进行一遍1×1−1的卷积将多通道合并,来达到获取多种混合信息的能力。

loss function

由于数据集通常是由多个标记者 (Annotator) 标记的。虽然每个人的认知不同,但是大家的结果都具有很高的一致性。对于每一张图片,我们将所有人的标记取平均值来生成一个边缘存在的概率图。对于每一个点,0代表没有标记者认为这个点是边缘,1则代表所有人都认为这个点是边缘。这里定义一个超参数η:如果一个点是边缘的概率大于η,则这个点我们认为其是边缘;若这个点的概率是0,则其不是边缘;此外,认为那些概率介于0和η之间的点是属于有争议的点,不计入损失函数。所以,每一个点的损失函数可以记为:
边缘检测之RCF_特征向量_03
其中:
边缘检测之RCF_损失函数_04
|Y+| 表示图中一定是边缘的点的个数,|Y−|表示图中一定不是边缘的点的个数,λ则是超参数。在像素i的特征向量和是否为边缘的事实表示分别为Xi和yi,P(X)是一个标准的Sigmoid激活函数,W则代表网络中的所有学习参数。所以,整个图片的损失函数可以记为:
边缘检测之RCF_卷积_05

其中,X(k)i表示stage k的特征向量,Xfusei表示stage fusion的特征向量,|I|代表像素个数,|K|代表阶段数(此处为5)


举报

相关推荐

0 条评论