当前位置: 首页 > 编程日记 > 正文

干货!仅有 100k 参数的高效显著性检测方法

作者 | 南开大学 程明明、依图科技 颜水成

责编 | Carol

封图 | CSDN 下载自视觉中国

显著性目标检测模型通常需要花费大量的计算成本才能对每个像素进行精确的预测,因此这使得其几乎不适用于低功耗的设备。

本文旨在通过提高网络计算效率来缓解计算花费与模型性能之间的矛盾。本文提出了一种灵活的卷积模块,即广义的OctConv(generalized OctConv, gOctConv),以有效的利用级内和跨级的多尺度特征,同时通过一种新颖的动态权重衰减方案来减少特征的冗余。

这种有效的动态权重衰减方案可稳定地提高训练期间参数的稀疏性,支持gOctConv中每个尺度的可学习通道数,从而可在性能下降忽略不计的情况下,减少80%的参数。利用gOctConv,本文构造了一个非常轻量的模型,即CSNet,该模型在公开的显著性检测基准数据集上,仅使用大型模型约0.2%的参数(100k),即可获得相同的性能。源代码会在文末公开。

引言

显著性目标检测(SOD)是一项非常重要的计算机视觉任务,它在图像检索,视觉跟踪和弱监督语义分割中有多种应用。尽管基于卷积神经网络(CNN)的SOD方法已经取得了很大的进步,但这些方法大多数都集中在通过利用精细细节和全局语义,注意力以及边缘信息来提升最新技术(SOTA)的性能。

尽管这些模型的性能十分出色,但它们通常非常耗费资源,因此几乎不适用于存储/计算能力有限的低功耗设备。如何构建具有SOTA性能的超轻量级SOD模型是一个重要但研究较少的领域。

SOD任务需要为每个图像像素生成准确的预测分数,因此既需要大规模的高级特征表示以正确定位显著对象,又需要精细的低级特征表示以进行精确的边界细化。建立超轻量级的SOD模型面临两个主要挑战。

首先,当高级特征的低频特性满足显著性图的高输出分辨率时,可能会出现严重的冗余。其次,SOTA 的SOD模型通常依赖ImageNet预训练的模型来提取特征,而这些特征提取本身就是十分耗费资源的。

最近,Chen等人也注意到了低频特征的空间冗余问题。为了替代普通的卷积,他们设计了一个OctConv运算来处理在低空间分辨率上变化较慢的特征图,从而降低了计算成本。但是,直接使用OctConv去减少SOD任务中的冗余问题仍然面临两个主要的挑战。(1)仅利用OctConv中的低和高分辨率两个维度,不足以完全减少SOD任务中的冗余问题,SOD任务比分类任务需要更强的多尺度表征能力。(2)在OctConv中,每个尺度的通道数是手动选择的,由于SOD任务需要的类别信息较少,因此需要花费大量努力为显着性模型做出重新调整。

在本文中,作者通过在以下几个方面进行扩展,提出了一个广义上的OctConv(gOctConv),用于构建极轻量的SOD模型。(1)可以灵活地从级内和跨级特征中获取任意数量的尺度输入,可以实现更大范围的多尺度表示。(2)本文提出了一种动态权重衰减方案,以支持每种尺度下可学习的通道数,从而使得在性能几乎无下降的情况下,减少80%的参数。

得益于gOctConv的灵活性和效率,本文提出了一个高度轻量级的模型CSNet,该模型充分研究了级内和跨级的多尺度特征。为了参数数量可以非常少,本文的CSNet可以从头开始直接进行训练,而无需ImageNet进行预训练,从而避免了不必要的特征表示。总而言之,作者在本文主要有两个贡献:

  • 本文提出了一种灵活的卷积模块,即gOctConv,它可以有效地利用级内和跨级的多尺度特征来进行SOD任务,同时通过一种新颖的动态权重衰减方案来减少表征冗余。

  • 利用gOctConv,本文建立了一个非常轻量级的SOD模型CSNet,该模型在公开的SOD基准上,相较于SOTA的大型模型,可以在仅使用约0.2%的参数下(100k),取得相似的性能。

方法

1.方法概述

OctConv最初的设计仅是为替代传统卷积单元,它在一个阶段内引入高/低两个尺度进行卷积操作。但是,一个阶段只有两个尺度是不能引入SOD任务所需的足够的多尺度信息。因此,作者提出了一种广义的OctConv(gOctConv),如图2所示。作为原始OctConv的通用版本,gOctConv主要从以下几个方面进行了改进:

  • 任意数量的输入和输出尺度可以支持更大范围的多尺度表示。

  • 除了级内的特征外,gOctConv还可以从特征提取器以任意比例处理跨级的特征。

  • gOctConv通过本文提出的动态权重衰减方案可以学习每个尺度的通道数。

  • 可以关闭跨尺度的特征交互,提升灵活性。在下面的轻量模型设计中,本文将详细介绍gOctConv的不同实例。

2.轻量级模型设计

如下图所示,本文提出的轻量级网络是由特征提取器和跨阶段的融合部分组成,可同时处理多个尺度的特征。特征提取器与本文提出的层内多尺度块(即ILBlocks)堆叠在一起,并根据特征图的分辨率分为4个阶段,每个阶段分别具有3、4、6和4个ILBlock。由gOctConvs组成的跨阶段融合部分会处理来自特征提取器各阶段的特征以获得高分辨率的输出。 

其中gOctConv用于在ILBlock中引入多尺度。gOctConv通过消除跨尺度的运算,使每个输入通道对应于具有相同分辨率的输出通道。每个尺度内的depthwise操作可进一步节省计算成本。ILBlock由一个原始OctConv和两个3×3 gOctConv组成,如上图所示。原始OctConv会与两个尺度进行交互,而每个尺度由gOctConvs提取特征。块中的多尺度特征将分别进行处理和交互。每个卷积后面紧跟着BatchNorm和PRelu。

为了保持高的输出分辨率,常规方法会在特征提取器的高层语义上进行操作,这不可避免地增加了计算冗余。相反,本文仅使用gOctConvs融合来自特征提取器各阶段的多尺度特征,并生成高分辨率输出。作为效率和性能之间的折衷,仅使用了后三个stage的特征。gOctConv 1×1将每个阶段最后一次转换的特征作为输入,并进行跨阶段卷积以输出具有不同比例的特征。为了在粒度级别上提取多尺度特征,特征的每个尺度都由一组具有不同扩展率的并行卷积处理。

3.动态权重衰减

作者建议在训练过程中利用本文提出的动态权重衰减方法,为gOctConv中的每个尺度获取可学习的通道数。动态权重衰减可在引入稀疏性的同时保持通道之间的权重分布稳定,从而有助于修剪算法消除冗余通道。具体的算法过程如下

实验

1.基本设置

本文方法是基于PyTorch框架。对于轻量级模型,本文使用Adam优化器,批处理大小为24,从头开始训练300个epoch。在没有ImageNet预训练的情况下,CSNet仍可以达到与基于预训练主干的大模型相当的性能。最初将学习率设置为1e-4,然后在200个epoch和250个epoch时衰减10倍。本文仅使用了随机翻转和裁剪的数据增强。gOctConvs之后的BatchNorms权重衰减,作者建议使用动态的权重衰减替代,默认权重为3,而其他权重的权重衰减默认设置为5e-3。

训练数据集是DUST-TR,并在几个常见的测试集上进行评价,包括ECSSD,PASCAL-S,DUT-O,HKU-IS,SOD和DUTS-TE。

2.实验结果

图5显示了使用本文提出的轻量级CSNet进行显著性检测的可视化结果。

3.固定通道数 VS 可学习的通道数

特征提取器仅由ILBlocks组成。使用固定的参数,并仅调整ILBlocks的gOctConvs中高分辨率/低分辨率特征的通道数分配比例。如表格1所示,就F-measure而言,CSNet-5 / 5的F值比特征提取器3/1高出1.4%。即使在极端情况下,仅具有低分辨率功能的CSNet-0 / 1的性能也比具有所有高分辨率功能的提取器1/0多44%的FLOPs。但是,手动调整具有不同分辨率的特征通道数的分割比例可能在性能和计算成本之间仅能达到次优。

如表格2所示。ResNet + CSF仅使用53%的参数和21%的FLOP达到与ResNet + PoolNet相似的性能。gOctConvs可以在主干的不同阶段获得高分辨率和低分辨率的特征,从而获得高分辨率输出,同时节省了大量计算资源。

4.运行时间

CSNet的设计初衷是轻量级且可以高效地执行SOD任务。因此本文在i7-8700K CPU的单核上使用224×224的图像测试了运行时间。与大模型相比,本文提出的CSNet具有超过x10的加速。

与为其他任务设计的模型相比,CSNet以相似的速度实现了F-measure最高6%的增长。但是,由于当前的深度学习框架尚未针对原始的OctConvs和本文的gOctConvs进行优化,因此FLOPs与运行时间之间仍然不具有很强的关系。


总结

在本文中,作者提出了一种具有更大灵活性的广义OctConv,可以有效利用级内和跨级的多尺度特征,同时通过一种新颖的动态权重衰减方案来减少冗余。动态权重衰减方案可在通道之间保持稳定的权重分布,并在训练过程中稳定提高参数的稀疏性。

动态权重衰减支持学习gOctConvs中每个尺度的通道数,从而减少了近80%的参数,而性能下降却忽略不计。本文建立了一个非常轻量级的模型CSNet,该模型在公开的显著性物体检测基准上,相较于大模型,可在仅使用约0.2%参数(100K)的情况下,保持相似的性能。

论文:https://arxiv.org/abs/2003.05643

代码:https://github.com/MCG-NKU/Sal100K

推荐阅读
  • 想提前目睹人到中年的发型?试试这款自制秃头生成器

  • 阿里巴巴副总裁司罗:达摩院如何搭建NLP技术体系?

  • 重磅!CSDN 发布「AI开源贡献奖Top5」「AI新锐公司奖Top10」「AI优秀案例奖Top30」三大榜单

  • 用机器学习还原《隐秘的角落》那些被修改的台词

  • Python轻松搞定Excel中的20个常用操作

  • 厉害!国内大学生计算机编程第一人,一人挑战一个队,百度最年轻 T10,现创业自动驾驶

  • Balancer因通缩代币STA遭遇闪电贷攻击,价值50万美元资产被黑

你点的每个“在看”,我都认真当成了AI

相关文章:

如何将一个彩色图像转换成黑白图像

作者:未知彩色图像转换为黑白图像时需要计算图像中每像素有效的亮度值,通过匹配像素 亮度值可以轻松转换为黑白图像。 计算像素有效的亮度值可以使用下面的公式: Y0.3RED0.59GREEN0.11Blue 然后使用 Color.FromArgb(Y,Y,Y) 来把计算后的值…

修改Activity响应音量控制键修改的音频流

转自:http://rainhomepage.appspot.com/2010/05/hardware-volume-controls-audio-stream-setvolumecontrolstream 当开发多媒体应用或者游戏应用的时候,需要使用音量控制键来设置程序的音量大小。在Android系统中有多中音频流,通过Activity中…

css3选择器二

在HTML中,通过各种各样的属性可以给元素增加很多附加的信息,了解和掌握css3一些的选择器,是很有必要的。 :enabled 和 :disabled选择器表单元素有可用(“:enabled”)和不可用(“:disabled”)状态…

结合ashx来在DataGrid中显示从数据库中读出的图片

作者&#xff1a;木子 http://blog.csdn.net/derny/下面利用ashx文件可以方便实现从数据库中读取图片并显示在datagrid当中 //---------------------------------------BindImage.aspx ---------------------------------------- <% Page language"c#" Codebehi…

如何度过二十多岁这段又穷又迷茫的岁月?

我们在后台常常会收到读者的留言我马上毕业了&#xff0c;但是现在很迷茫&#xff0c;不知道学校里学的&#xff0c;能不能真正的适应工作...我工作两三年&#xff0c;还是不知道怎么规划自己的技术成长路线&#xff0c;不知道该学什么来提升自己的竞争力...人生需要长线的经营…

Qt 自定义信号与槽

注 对象与槽理解 //第一个参数lineEdit是激发事件对象,信号中的方法必须在对象中存在&#xff0c;并在对象类头文件signals下定义&#xff0c;//第二个参数信号&#xff0c;//第三个参数this是槽方法所属类的对象&#xff0c;且必须在对象类的头文件的slots下定义//第四个参数槽…

php解析ip列表并入库

前一段时间因为要开发一个新项目&#xff0c;需要一个ip库&#xff0c;由于公司原本无这样一个库&#xff0c;所以急需从文件中匹配ip地址然后存库。下面是我下的一段程序&#xff0c;可能效率不是很高&#xff0c;代码也没有做过多的优化&#xff0c;有些地方比较繁琐&#xf…

AI 领域新突破,腾讯发布首个AI药物研发平台「云深智药」

7月9日&#xff0c;2020世界人工智能大会云端峰会开幕。会上&#xff0c;腾讯首席运营官任宇昕公布了用AI助力药物研发领域的最新进展——由腾讯自主研发的首个AI驱动的药物发现平台“云深智药&#xff08;iDrug&#xff09;”正式对外发布。云深智药平台的推出&#xff0c;将帮…

写入和读取图片(c# asp.net sqlserver)

作者&#xff1a;木子 http://blog.csdn.net/derny/首先要创建一个表包含自段image 和 type 类型各自为image 和 vnanchar WebForm1.aspx <% Page language"c#" Codebehind"WebForm1.aspx.cs" AutoEventWireup"false" Inherits"ReadA…

【MyBatis学习01】宏观上把握MyBatis框架

今天开始学习mybatis框架&#xff0c;博客主要记录学习过程中的一些总结&#xff0c;如有错误之处&#xff0c;欢迎留言指正~先用mybatis的鸟鸟来镇个楼&#xff0c;咳咳~~ mybatis框架是一个持久层框架&#xff0c;是Apache下的顶级项目。mybatis可以让开发者的主要精力放在s…

消除图片在ie中缓存而无法更新的问题

程序中图片是动态显示的 原先把打算把图片保存在服务器端然后显示 可是由于ie的缓存问题导致图片无法实时更新显示 所以改为把图片存在session中然后再显示 需要保存的时候再保存到本地 //&#xff0d;&#xff0d;&#xff0d;&#xff0d;&#xff0d;&#xff0d;&…

Linux shell笔记

由于工作的需要&#xff0c;越来越多的接触到linux系统。最近看了《Linux与Unix Shell》这本书&#xff0c;安装书的章节整理了一些自己认为比较重要的命令&#xff0c;方便以后查阅。 No.001 文件安全与权限 1. umask 决定了新建文件的权限 2. 软链接(符号链接) ln -s source_…

ACL最佳论文提出最新NLP模型测试方法,最佳论文提名也不可小觑

译者 | 刘畅出品 | AI科技大本营&#xff08;ID:rgznai100&#xff09;导读&#xff1a;近日&#xff0c;ACL 2020公布了最佳论文奖&#xff0c;另有两篇最佳论文荣誉提名奖也各自提出了解决NLP领域问题的创新方法。最佳论文&#xff1a;Beyond Accuracy: Behavioral Testing o…

LVM逻辑卷的缩减与删除,LVM逻辑卷快照,btrfs文件系统,网络管理

逻辑卷缩减缩减的时候要注意缩减的空间不要超过文件系统的空间&#xff0c;不然缩减的时候会损坏文件系统。第一步要先取消挂载&#xff08;必须&#xff09;第二部检查文件完整性&#xff08;必须&#xff09;e2fsck -f /dev/vg0/lv0第三部文件系统缩减&#xff0c;先缩减文件…

屏掉F5刷新的办法

<body οnkeydοwn"KeyDown()"> function KeyDown(){ //屏蔽退格删除键,屏蔽 F5 刷新键,Ctrl R if ((event.keyCode116)||(event.ctrlKey && event.keyCode82)) { event.keyCode0; event.returnValuefalse; } }

WAIC汇聚全球顶级科学家,畅谈人工智能的未来挑战与突破

7月9日&#xff0c;2020世界人工智能大会&#xff08;WAIC&#xff09;正式拉开帷幕。当天下午&#xff0c;2020世界人工智能大会科学前沿全体会议召开&#xff0c;作为今年WAIC唯一一场聚焦前沿科技的大会&#xff0c;邀请了世界范围内最顶级的AI专家探讨技术趋势。其中&#…

ant学习笔记之(ant执行命令的详细参数和Ant自带的系统属性)

2019独角兽企业重金招聘Python工程师标准>>> 一&#xff1a;ant执行命令的详细参数 -buildfile<file>,-file<file>,-f<file> :要指定执行构件的的位置和名称。 -find<file>,-s<file>: 查找构件文件&#xff0c;并执行找到的构件文件。…

mipi和dsi

转自&#xff1a; http://blog.csdn.net/longxiaowu/article/details/24410021 一、MIPI MIPI&#xff08;移动行业处理器接口&#xff09;是Mobile Industry Processor Interface的缩写。MIPI&#xff08;移动行业处理器接口&#xff09;是MIPI联盟发起的为移动应用处理器制定…

在asp.net中调用Office来制作各种(3D)统计图

作者&#xff1a;未知 由于本文网上多处见到 对于谁是作者 无法肯定1、下载owc11 COM组件 http://www.microsoft.com/downloads/details.aspx?FamilyID7287252c-402e-4f72-97a5-e0fd290d4b76&displaylangen 2、注册owc11 在工程中添加 C:/Program Files/Common File…

个人谈谈seo

为什么80%的码农都做不了架构师&#xff1f;>>> 我不知道大家有没有做过seo的工作。以前我是一各技术人员。纯技术开发或技术管理人员。基本上也没有接触过seo的相关工作&#xff0c;整天在写代码或看别人的代码 。干了六年只见他们都在谈友情链接。做推广&#xf…

“编程能力差的程序员,90%输在这事上!”谷歌AI专家:都是瞎努力!

Google 人工智能开发者专家彭靖田老师说——超90%的程序员在初学Python 人工智能时&#xff0c;都会遇到下面3个问题&#xff1a;1.想学人工智能&#xff0c;但不知从何学起&#xff0c;也不知道该选择什么方向...2.Python语法、机器学习/深度学习框架、算法都能看懂&#xff0…

[译]JavaScript中,{}+{}等于多少?

最近,Gary Bernhardt在一个简短的演讲视频“Wat”中指出了一个有趣的JavaScript怪癖:在把对象和数组混合相加时,会得到一些你意想不到的结果.本篇文章会依次讲解这些计算结果是如何得出的. 在JavaScript中,加法的规则其实很简单,只有两种情况:你只能把数字和数字相加,或者字符串…

大数量查询分页显示

微软的解决办法 using System; using System.Data; using System.Data.SqlClient; using System.Drawing; using System.Windows.Forms; public class PagingSample: Form { // Form controls. Button prevBtn new Button(); Button nextBtn new Button(); static DataGrid …

Sep 26 09:22:41 ck01 kernel: Buffer I/O error on device sda2, logical block 2

错误 kernel: sd 0:2:0:0: SCSI error: return code kernel: end_request: I/O error, dev sda, sector 2308509 kernel: Buffer I/O error on device sda2, logical block 2 kernel: Buffer I/O error on device sda2, logical block 2 硬盘扇区问题&#xff1f; 更换一块硬盘…

启信宝CEO陈青山:AI+大数据驱动下的金融新生态

人工智能怎样潜移默化影响金融业务&#xff1f;合合信息联合创始人、启信宝CEO陈青山在2020世界人工智能大会云端峰会.未来金融论坛上做了“AI大数据&#xff0c;共创金融新生态”的主题演讲&#xff0c;讲述了如何通过数字化构建一个虚拟世界&#xff0c;协助金融类企业建立新…

新手安装ruby on rails(ror)的成功必备手册

2019独角兽企业重金招聘Python工程师标准>>> 如何快速正确的安装 Ruby, Rails 运行环境 每一位使用windows系统来进行ROR开发项目的都是这个世界上折翼的天使。对于新入门的开发者&#xff0c;如何在windows系统上安装 Ruby, Ruby Gems 和 Rails 的运行环境可能会是…

Logback学习笔记1

Logback介绍 Logback 分为三个模块&#xff1a;Core、Classic 和 Access。Core模块是其他两个模块的基础。 Classic模块扩展了core模块。 Classic模块相当于log4j的显著改进版。Logback-classic 直接实现了 SLF4J API。 要引入logback&#xff0c;由于Logback-classic依赖slf4j…

微软亚洲研究院副院长刘铁岩:AI如何助力节能减排?

7月10日&#xff0c;在微软举办的WAIC●2020人工智能予力永续未来论坛&#xff0c;微软亚洲研究院副院长刘铁岩围绕 AI 在节能减排领域的应用&#xff0c;探讨了如何推进整个社会的可持续发展。 刘铁岩指出&#xff0c;人工智能在助力节能环保方面具有巨大潜力。例如&#xff…

如何在域控制器上安装asp.net?

作者&#xff1a;网际浪子专栏&#xff08;曾用名littlehb&#xff09; http://blog.csdn.net/littlehb/在域控制器或备份域控制器上安装 Microsoft Visual Studio .NET 或 Microsoft .NET 框架后&#xff0c;如果您尝试运行 ASP.NET 应用程序&#xff0c;则浏览器…

前端思想实现:面向UI编程_____前端框架设计开发

引子&#xff0c;我去小说看多了&#xff0c;写博客竟然写引子了&#xff01;&#xff01;&#xff01;不过&#xff0c;没引子不知道怎么写了。言归正传吧&#xff0c;前端这个职业&#xff0c;也就这几年刚刚火起来的职业&#xff0c;以前那个混乱的年代&#xff0c;前端要么…