2020年发表在CVPR上的一篇使用涂鸦注释的弱监督显著目标检测论文
论文原文
代码地址

文章目录

  • 摘要
  • 一、创新点
  • 二、Related Work
    • 1.Learning Saliency from Weak Annotations
    • 2.Weakly-Supervised Semantic Segmentation
    • 3.Recovering Structure from Weak Labels
    • 4.Comparison with Existing Scribble Models
  • 三.Learning Saliency from Scribbles
    • 1.Weakly-Supervised Salient Object Detection
      • Saliency prediction network (SPN)
      • Edge detection network (EDN)
      • Edge-enhanced saliency prediction module (ESPM)
      • Gated structure-aware loss
      • Objective Function
    • 2.Scribble Boosting(涂鸦增强)
    • 3.Saliency Structure Measure
    • 4.Network Details
  • 四.实验

摘要

与费力的像素级密集标注相比,用涂鸦标注数据要容易得多,标注一张图片只需花费1∼2秒。然而,使用涂鸦标签来学习显著目标检测还没有被探索过。在本文中,我们提出了一个弱监督的显著目标检测模型,从这种标注中学习显著性。在此过程中,我们首先重新用涂鸦标注了现有的大规模显著目标检测数据集,记为S-DUTS。由于物体的结构和细节信息不被涂鸦所识别,直接用涂鸦标签进行训练会导致显著图的边界定位不佳。为了缓解这个问题,我们提出了一个辅助的边缘检测任务来明确定位物体的边缘,以及一个门控结构感知损失来对要恢复的结构范围进行约束。此外,我们设计了一个涂鸦增强方案,以反复巩固我们的涂鸦标注,然后将其作为监督来学习高质量的显著图。由于现有的显著性评价指标忽视了对预测结构的度量,因此显著图的评价指标可能不符合人类的感知。我们提出了一个新的指标,称为显著性结构度量,作为一个补充度量来评估预测的锐度。在六个基准数据集上进行的大量实验表明,我们的方法不仅优于现有的弱监督/无监督方法,而且与几个完全监督的最先进的模型相当。


一、创新点

  • 提出了一种新的从涂鸦中学习显著性的弱监督显著性目标检测方法,并引入了一种新的基于涂鸦的显著性数据集S-DUTS;
  • 我们提出了一种门控结构感知损失来约束预测显著图在显著区域与输入图像共享相似的结构;
  • 我们设计了一种涂鸦增强方案来扩展我们的涂鸦注释,从而实现高质量的显著图获取;
  • 我们提出了一种新的评价指标来衡量预测显著图的结构一致性,它更符合人类的视觉感知;
  • 在六个显著的目标检测基准上的实验结果表明,我们的方法优于最先进的弱监督算法。

二、Related Work

1.Learning Saliency from Weak Annotations

2.Weakly-Supervised Semantic Segmentation

3.Recovering Structure from Weak Labels

4.Comparison with Existing Scribble Models

三.Learning Saliency from Scribbles

1.Weakly-Supervised Salient Object Detection

Saliency prediction network (SPN)

我们在VGG16-Net的基础上,通过删除第五池化层之后的层来构建前端显著性预测网络。与[43]类似,我们将生成相同分辨率特征映射的卷积层分组为网络的一个阶段(如图4所示)。因此,我们将前端模型表示为f1(x, θ) = {s1,…, s5},其中sm(m = 1,…, 5)表示第m阶段最后一个卷积层(本文为“relu1 2, relu2 2, relu3 3, relu4 3, relu5 3”)的特征,θ为前端网络参数。
正如[39]中所讨论的,通过不同的扩张率扩大感受野,可以将辨别信息传播到非辨别对象区域。我们在前端模型的基础上使用了一个密集的空洞空间金字塔池(DenseASPP)模块,从特征s5生成具有更大接受域的特征图s’5。特别是,我们在DenseASPP的卷积层中使用了不同的膨胀率。然后,使用两个额外的1 × 1卷积层将s ’ 5映射到一个单通道的粗略的显著图sc。

Dense Atrous Spatial Pyramid Pooling——密集的空洞空间金字塔池化(DenseASPP)

好处:(1)密集特征金字塔;(2)更大的感受野
原文参考:Dense Atrous Spatial Pyramid Pooling(DASPP)

由于我们在涂鸦注释中存在未知的类别像素,因此采用partial cross-entropy loss(部分交叉熵损失)[30]来训练我们的SPN:

其中Jl表示标记的像素集,(u, v)为像素坐标,Lu,v为(u, v)处的交叉熵损失。

Edge detection network (EDN)

边缘检测网络鼓励SPN产生具有丰富结构信息的显著特征。我们利用SPN的中间层特征生成一个通道边缘映射e。具体来说,我们映射每个si(i = 1,…, 5)到通道大小为M,具有1 × 1卷积层的特征图。然后我们将这5个特征映射连接起来,并将它们输入到一个1 × 1的卷积层中,生成一个边缘映射e。交叉熵损失Le用于训练EDN:

其中E是由现有的边缘检测器预先计算的。

Edge-enhanced saliency prediction module (ESPM)

我们引入了一个边缘增强显著性预测模块,从SPN中精炼粗显著性映射sc,得到一个边缘保留的精炼显著性映射sr。具体来说,我们将sc和e连接起来,然后将它们输入1 × 1卷积层,生成显著性映射sr。注意,我们使用显著性映射sr作为网络的最终输出。
与训练SPN类似,我们使用带有潦草注释的部分交叉熵损失来监督sr。

Gated structure-aware loss

我们期望所预测的显著图在显著区域内具有一致的强度,在物体边缘具有明显的边界。受平滑性损失的启发[9,38],我们也在显著区域内施加了这种约束。
回想一下,平滑损失是为了加强平滑,同时在整个图像区域保持图像结构。而显著目标检测则是将结构信息抑制在显著区域之外。因此,在整个图像区域强制平滑损失将使显著性预测模糊,如表2“M3”所示。
为了减少这种模糊性,我们采用了一种门机制,让我们的网络只关注显著区域,以减少背景结构造成的分心。具体地说,我们将门控结构感知损失定义为

其中Ψ定义为Ψ(s) =√s2 + 1e−6,以避免计算零的平方根,Iu,v为像素(u, v)处的图像强度值,d为x和y方向上的偏导数,G为结构感知损失的门(见图6 (d))。门控结构感知损失对显著图s的梯度施加L1惩罚,以鼓励其局部平滑,并用一个边缘感知的项∂I作为权值,以保持沿图像边缘的显著性区别。

具体来说,如图6所示,在训练过程中使用预测显著性图(a)),我们用k = 11的平方核对其进行扩展,得到一个放大的前景区域©)。然后通过自适应阈值化将gate (d))定义为二值化的gate ©)。如图6(e)所示,我们的方法能够聚焦于显著区域,并预测显著图中的尖锐边界。

实际代码中应用了sobel算子和拉普拉斯算子

代码如下:

 def laplacian_edge(img):laplacian_filter = torch.Tensor([[-1, -1, -1], [-1, 8, -1], [-1, -1, -1]])filter = torch.reshape(laplacian_filter, [1, 1, 3, 3])filter = filter.cuda()lap_edge = F.conv2d(img, filter, stride=1, padding=1)return lap_edgedef gradient_x(img):sobel = torch.Tensor([[-1, 0, 1], [-2, 0, 2], [-1, 0, 1]])filter = torch.reshape(sobel,[1,1,3,3])filter = filter.cuda()gx = F.conv2d(img, filter, stride=1, padding=1)return gxdef gradient_y(img):sobel = torch.Tensor([[-1, -2, -1], [0, 0, 0], [1, 2, 1]])filter = torch.reshape(sobel, [1, 1,3,3])filter = filter.cuda()gy = F.conv2d(img, filter, stride=1, padding=1)return gydef charbonnier_penalty(s):cp_s = torch.pow(torch.pow(s, 2) + 0.001**2, 0.5)return cp_sdef get_saliency_smoothness(pred, gt, size_average=True):alpha = 10s1 = 10s2 = 1## first oder derivative: sobelsal_x = torch.abs(gradient_x(pred))sal_y = torch.abs(gradient_y(pred))gt_x = gradient_x(gt)gt_y = gradient_y(gt)w_x = torch.exp(torch.abs(gt_x) * (-alpha))w_y = torch.exp(torch.abs(gt_y) * (-alpha))cps_x = charbonnier_penalty(sal_x * w_x)cps_y = charbonnier_penalty(sal_y * w_y)cps_xy = cps_x + cps_y## second order derivative: laplacianlap_sal = torch.abs(laplacian_edge(pred))lap_gt = torch.abs(laplacian_edge(gt))weight_lap = torch.exp(lap_gt * (-alpha))weighted_lap = charbonnier_penalty(lap_sal*weight_lap)smooth_loss = s1*torch.mean(cps_xy) + s2*torch.mean(weighted_lap)return smooth_loss

Objective Function

如图4所示,我们将部分交叉熵损失Ls和门控结构感知损失Lb分别用于粗显著图sc和细化图sr,并将交叉熵损失Le用于边缘检测网络。我们的最终损失函数定义为

其中y表示涂鸦注释。部分交叉熵损耗Ls以涂鸦注释为监督,门控结构感知损耗Lb利用图像边界信息。这两种损失并不矛盾,因为Ls专注于将带注释的涂鸦像素传播到前景区域(依赖于SPN),而Lb强制sr与EDN提取的边缘很好地对齐,并阻止前景显著性像素传播到背景。

2.Scribble Boosting(涂鸦增强)


我们没有直接扩展涂鸦注释,而是将DenseCRF应用于初始显著性预测sinit,并将sinit更新为scrf。直接用scrf训练网络会给网络引入噪声,因为scrf不是精确的实体图。我们计算sinit和scrf的差值,并将sinit = scrf = 1的像素定义为新涂鸦注释中的前景像素,sinit = scrf = 0的像素定义为背景像素,其余的像素定义为未知像素。在图7 (g)和图7 (h)中,我们说明了涂鸦增强的中间结果。注意,我们的方法比在初始预测中应用DenseCRF获得了更好的显著性预测结果(见图7 (f))。这证明了我们的涂鸦增强方案的有效性。在我们的实验中,在进行了我们的涂鸦增强步骤的一次迭代之后,我们的性能几乎与完全监督的方法相同。

笔记︱图像语义分割(FCN、CRF、MRF)、论文延伸(Pixel Objectness、)

3.Saliency Structure Measure

现有的显著性评价指标(Mean absolute Error, Precision-recall curves, F-measure, E-measure[7]和S-measure[6])只关注预测的准确性,而忽略了预测的显著性图是否符合人的感知。也就是说,估计的显著性映射应该与输入图像的目标结构对齐。在[23]中,bIOU损失被用来惩罚显著边界长度。我们将bIOU损失作为误差度量Bµ来评估显著性图和它们的实体图之间的结构对齐。
给定一个预测显著图s和它的基于像素的地面真值y,它们的二值化边缘图分别定义为gs和gy。那么Bµ=
其中B μ∈[0,1]。Bµ= 0表示完美的预测。由于预测图和实体显著图的边缘尺度较小,可能无法很好地对齐,导致测量结果不稳定(如图8所示)。在计算Bµmeasure之前,我们将这两个边缘图都用大小为3的平方核进行扩展。如图B所示,预测的“µ”反映了预测的锐度,与人的感知一致。

4.Network Details

我们使用VGG16-Net[28]作为骨干网络。在边缘检测网络中,我们通过1×1卷积层将sm编码为通道大小为32的特征映射。在“DenseASPP”模块(图5)中,前三个卷积层产生通道大小为32的显著特征,最后一个卷积层将特征映射到与s5相同大小的s’5。然后我们使用两个连续卷积层将s ’ 5映射到一个通道粗显著图sc。Eq. 3和Eq.(4)中的超参数设为:α = 10, β1 = β2 = 0.3, β3 = 1。

我们使用Pytorch训练我们的模型50个周期,SPN初始化的参数来自于ImageNet[4]上预训练的VGG16-Net[28]。其他新增的卷积层随机初始化N(0,0.01)。初始化基本学习率为1e-4。整个培训需要6小时,培训批数为15,在一台配备NVIDIA GeForce RTX 2080 GPU的PC上进行。

四.实验


【弱监督显著目标检测论文】Weakly-Supervised Salient Object Detection via Scribble Annotations相关推荐

  1. 【弱监督显著目标检测论文】Weakly-Supervised Salient Object Detection Using Point Supervison

    2022年在AAAI上发表的一篇使用点监督的弱监督显著目标检测论文 论文原文 代码地址 文章目录 摘要 一.创新点 二.方法 1.Adaptive Flood Filling 2.Non-Salien ...

  2. 【论文阅读】【弱监督-3D目标检测】Weakly Supervised 3D Object Detection from Point Clouds

    前言 ACM MM 2020录用的一篇文章.不使用任何真实的3D框来进行训练.通过采用归一化的点云密度来生成目标候选框.不过性能一般,算是第一个吃螃蟹的人 MIT和微软合作的论文,模型简称为VS3D ...

  3. [论文阅读] Structure-Consistent Weakly Supervised Salient Object Detection with Local Saliency Coherence

    论文地址:https://ojs.aaai.org/index.php/AAAI/article/view/16434 代码:http://github.com/siyueyu/SCWSSOD 发表于 ...

  4. 【开放域目标检测】一:Open-Vocabulary Object Detection Using Captions论文讲解

    出发点是制定一种更加通用的目标检测问题,目的是借助于大量的image-caption数据来覆盖更多的object concept,使得object detection不再受限于带标注数据的少数类别,从 ...

  5. 目标检测-Oriented RepPoints for Aerial Object Detection(CVPR 2022)

    目标检测-Oriented RepPoints for Aerial Object Detection(CVPR 2022) 论文地址:Oriented RepPoints for Aerial Ob ...

  6. Deeply supervised salient object detection with short connections 论文复现

    DSS Model论文复现 <Deeply supervised salient object detection with short connections>这篇文章是南开大学程明明教 ...

  7. 论文阅读:Salient Object Detection: A Benchmark

    论文阅读:Salient Object Detection: A Benchmark 南开大学的显著性检测benchmark 链接:http://mmcheng.net/zh/salobjbenchm ...

  8. [论文阅读] Boosting Salient Object Detection with Transformer-based Asymmetric Bilateral U-Net

    论文地址:https://arxiv.org/abs/2108.07851 发表于:Arxiv 2021.08 Abstract 现有的显著目标检测(SOD)方法主要依靠基于CNN的U型结构,通过跨层 ...

  9. 论文翻译《Salient object detection: A survey》

    传统的方法: 可大致分为三类:基于block和intrinsic cues的模型.基于region和intrinsic cues的模型.基于extrinsic cues的模型(包括block和regi ...

最新文章

  1. CVPR2018论文看点:基于度量学习分类与少镜头目标检测
  2. 建立一个php 基础类
  3. openmv4闪灯说明_OpenMV Cam
  4. 抽象类在ASP.NET的学习与应用
  5. 澳大利亚研究者研制出一种计算机芯片 他们,快讯:几乎看不见的3D打印机器人;西澳大利亚大学的研究人员开发出一种保护生态机器鱼;效率达CPU一万倍的神经形态芯片发布!...
  6. [转]json2.js 源码解读
  7. 低碳生活:充电电池及充电器
  8. CodeForces - 1358C Celex Update(思维)
  9. Linux ARM交叉编译工具链制作过程
  10. mybatis学习(28):获取自增id方式二(在全局中配置setting选项)
  11. 一般化机器学习与神经网络
  12. 安卓中java或取上下文_android-Xposed:如何获取挂钩的应用程序的上下文?
  13. C语言C++中memset()函数使用和注意事项
  14. Python办公自动化(四) | 批量处理文件
  15. Struts 常用标签的使用
  16. 品高打造西科大教育云,带你看懂高教云建设之路
  17. hadoop集群的搭建与配置(2)
  18. 简仿Path的商店表情弹出模块
  19. 计算机表格的名次怎么弄,excel表格函数名次怎么做
  20. reinterpret_cast、static_cast、dynamic_cast和const_cast,区别

热门文章

  1. vue地图绘制圆形、椭圆、矩形或其他自定义图案
  2. windows通知栏中显示 微信等应用软件 的通知
  3. linux pg启动日志查看,pg日志分析
  4. 反斜杠“\”与斜杠“/” 的区别
  5. 考研视频有点难,以后继续早上锻炼
  6. 二十六、多线程练习题
  7. 【搞定算法】蓄水池算法
  8. 如何实现多源异构系统数据整合?
  9. 二胎政策来袭 职场妈妈生还是升
  10. java 写 xml 文件 工具类_XML读写工具类