A Simple Pooling-Based Design for Real-Time Salient Object Detection

2024-01-27 04:20

本文主要是介绍A Simple Pooling-Based Design for Real-Time Salient Object Detection,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一种基于简单池化的实时显着目标检测——PoolNet(解读)(原论文)


摘要

通过研究如何扩展卷积神经网络中池化部分来解决显着目标检测问题。

网络基于U形结构,贡献有:

  • 首先在自下而上的路径上构建全局引导模块(GGM),旨在为不同特征层提供潜在显着对象的位置信息。
  • 设计了一个特征聚合模块(FAM),使粗级语义信息与自上而下的路径中的精细级别特征完美融合。

通过在自上而下路径中的融合操作之后添加FAM,来自GGM的粗略特征可以与各种尺度的特征无缝地合并。这两个基于池化的模块允许逐步细化高级语义特征,从而产生细节丰富的显着性映射。


模型

模型包括基于特征金字塔网络(FPN)的两个主要模块:

  1. 全局引导模块(GGM):金字塔池模块(PPM)的修改版本和一系列全局引导流程(GGF)组成。GGM是一个单独的模块。更具体地说,PPM被放置在主干的顶部以捕获全局指导信息(显着对象所在的位置)。通过引入GGF,PPM收集的高级语义信息可以传递到所有金字塔等级的特征图,从而弥补了U型网络的缺点,即自上而下的信号逐渐被稀释的缺点
  2. 特征聚合模块(FAM):针对的是GGF粗糙特征图与金字塔不同尺度特征图的融合问题。该模块首先将融合特征映射转换为多个特征空间,以捕获不同尺度的局部上下文信息,然后组合信息以更好地权衡融合输入特征映射的组成

模型网络构架

主干网络

基于特征金字塔网络(FPN)的一种经典的U形架构,以自下而上和自上而下的方式设计,图1左上角所示。引入了一个建立在自下而上路径顶部的全局指导模块(GGM)。通过将GGM提取的高级信息聚合到每个要素级别的要素图中,目标是明确注意显着对象所在的不同要素级别的图层。在GGM的指导信息与不同级别的特征合并之后,进一步引入特征聚合模块(FAM),以确保可以无缝合并不同规模的特征映射。

全局引导模块(GGM)

FPN提供了一种经典架构,用于组合分类主干的多级功能。然而,由于自上而下的路径建立在自下而上的主干上,这种类型的U形结构的问题之一是当高级特征传输到较低层时,它们将逐渐被稀释。CNN的经验感受域远小于理论上的感知域,特别是对于更深的层,因此整个网络的感受域不足以捕获输入图像的全局信息。 对此的直接影响是,只能发现部分显着物体。关于自上而下路径中精细级别特征映射缺乏高级语义信息,引入一个全局指导模块,其中包含金字塔池化模块(PPM)的修改版本和一系列全局引导流(GGF)明确地使每个级别的特征图知道显着对象的位置。

PPM由四个子分支组成,用于捕获输入图像的上下文信息。第一个子分支和最后一个子分支分别是恒等映射层和全局平均池化层。对于两个中间分支,采用自适应平均池化层,以确保它们的输出特征图为3×3和5×5

GGM独立于U形结构。通过引入一系列全局引导流,可以轻松地将高级语义信息传递到各个级别的特征映射。通过这种方式,明确增加了自顶向下路径各部分的全局引导信息权重,以确保在构建FPN时不会稀释位置信息。

为了更好地证明GGM的有效性,进行了一些视觉比较。如图2所示,展示了由vgnet版本的fpns2生成的一些显著性图。可以很容易地发现,只有FPN主干网,很难为一些复杂的场景找到突出的对象。也有一些结果只检测到突出物体的一部分。然而,当GGM被合并时,得到的显著性地图的质量大大提高。如图2f所示,可以精确地发现突出物体,这说明了GGM的重要性。

功能聚合模块(FAM)

每个模块包含四个子分支,如图所示。在正向过程中,首先将输入特征映射转换为不同的比例空间,将其输入到具有不同下采样率的平均池化层中。然后将来自不同子分支的上采样特征图合并在一起,然后是3×3卷积层。

它有助于我们的模型减少上采样的混叠效果,特别是当上采样率较大时。此外,它还允许每个空间位置在不同的尺度空间中查看上下文,进一步扩大整个网络的接收域

为了验证FAM的有效性,在图4中可视化了FAM附近的特征图。通过比较左边部分(W/FAMS)和右边部分(W/O FAMS),FAMS之后的特征映射(A列)比没有FAMS的特征映射(C列)能更好地捕获突出的对象。除了可视化中间特征图外,还展示了一些由不同设置的模型生成的显著性图,如图2所示。通过比较F列(W/O FAMS)和G列(W/FAMS)的结果,可以很容易地发现,多次引入FAM可以使我们的网络更好地锐化突出对象的细节。通过观察图2的第二行,这种现象尤其明显。


边缘检测联合训练

首先,试图通过添加一个额外的预测分支来解决这个问题,该分支建立在图1的架构之上,以估计突出对象的边界。详细结构见图1的顶部。在FAMS之后,在自顶向下的路径中添加了三个剩余块,用于信息转换。这些剩余块从细到粗的通道数为128、256、512。每个剩余块之后是一个16通道3×3卷积层用于特征压缩,再加上一个1通道1×1卷积层用于边缘预测。将这三个16通道3×3卷积层连接起来,并将它们馈送给三个连续的3×3卷积层(48个通道),以将捕获的边缘信息传输到突出目标检测分支以进行细节增强。

在训练阶段,使用突出物体的边界作为联合训练的基本真理。然而,这个过程并没有带来任何性能提升,而且一些结果仍然缺少对象边界的细节信息。例如,如图5的C列所示,对于前景和背景对比度较低的场景,生成的显著性图和边界图仍然不明确。其原因可能是由突出物体生成的地面真值边缘图仍然缺乏突出物体的大部分详细信息。它们只是告诉我们突出物体的最外边界在哪里,特别是在突出物体之间有重叠的情况下。


实验结果


源代码

PyTorch代码:https://github.com/backseason/PoolNet

这篇关于A Simple Pooling-Based Design for Real-Time Salient Object Detection的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/649040

相关文章

Retrieval-based-Voice-Conversion-WebUI模型构建指南

一、模型介绍 Retrieval-based-Voice-Conversion-WebUI(简称 RVC)模型是一个基于 VITS(Variational Inference with adversarial learning for end-to-end Text-to-Speech)的简单易用的语音转换框架。 具有以下特点 简单易用:RVC 模型通过简单易用的网页界面,使得用户无需深入了

uva 10014 Simple calculations(数学推导)

直接按照题意来推导最后的结果就行了。 开始的时候只做到了第一个推导,第二次没有继续下去。 代码: #include<stdio.h>int main(){int T, n, i;double a, aa, sum, temp, ans;scanf("%d", &T);while(T--){scanf("%d", &n);scanf("%lf", &first);scanf

linux 下Time_wait过多问题解决

转自:http://blog.csdn.net/jaylong35/article/details/6605077 问题起因: 自己开发了一个服务器和客户端,通过短连接的方式来进行通讯,由于过于频繁的创建连接,导致系统连接数量被占用,不能及时释放。看了一下18888,当时吓到了。 现象: 1、外部机器不能正常连接SSH 2、内向外不能够正常的ping通过,域名也不能正常解析。

【Python报错已解决】AttributeError: ‘list‘ object has no attribute ‘text‘

🎬 鸽芷咕:个人主页  🔥 个人专栏: 《C++干货基地》《粉丝福利》 ⛺️生活的理想,就是为了理想的生活! 文章目录 前言一、问题描述1.1 报错示例1.2 报错分析1.3 解决思路 二、解决方法2.1 方法一:检查属性名2.2 步骤二:访问列表元素的属性 三、其他解决方法四、总结 前言 在Python编程中,属性错误(At

UMI复现代码运行逻辑全流程(一)——eval_real.py(尚在更新)

一、文件夹功能解析 全文件夹如下 其中,核心文件作用为: diffusion_policy:扩散策略核心文件夹,包含了众多模型及基础库 example:标定及配置文件 scripts/scripts_real:测试脚本文件,区别在于前者倾向于单体运行,后者为整体运行 scripts_slam_pipeline:orb_slam3运行全部文件 umi:核心交互文件夹,作用在于构建真

python内置模块datetime.time类详细介绍

​​​​​​​Python的datetime模块是一个强大的日期和时间处理库,它提供了多个类来处理日期和时间。主要包括几个功能类datetime.date、datetime.time、datetime.datetime、datetime.timedelta,datetime.timezone等。 ----------动动小手,非常感谢各位的点赞收藏和关注。----------- 使用datet

时间序列|change point detection

change point detection 被称为变点检测,其基本定义是在一个序列或过程中,当某个统计特性(分布类型、分布参数)在某时间点受系统性因素而非偶然因素影响发生变化,我们就称该时间点为变点。变点识别即利用统计量或统计方法或机器学习方法将该变点位置估计出来。 Change Point Detection的类型 online 指连续观察某一随机过程,监测到变点时停止检验,不运用到

Axure元件库Ant Design中后台原型模板:提升设计与开发效率的利器

企业对于中后台产品的设计与开发需求日益增长。为了提升用户体验和开发效率,设计者和开发者们不断寻求更加高效、统一的解决方案。Ant Design,作为阿里巴巴开源的一套企业级UI设计语言和React组件库,凭借其丰富的组件和统一的设计风格,已成为众多项目的首选。而在Axure中使用Ant Design元件库,更是为中后台产品的原型设计带来了极大的便利。 Ant Design简介 Ant D

error while loading shared libraries: libnuma.so.1: cannot open shared object file:

腾讯云CentOS,安装Mysql时: 1.yum remove libnuma.so.1 2.yum install numactl.x86_64

【UVA】11400-Lighting System Design(动态规划)

这道题感觉状态式不是很好推。。。 WA了好几次是因为排序的时候出问题了。 这道题出在线性结构里了,先说一下最长上升子序列吧。 dp[i]代表了以array[i]结尾的时候,最长子序列长度。 推导的时候,以起点递增的顺序进行推导。 #include<cstdio>#include<cstring>#include<iostream>#include<algorithm>#i