内涵:CVPR2019之GCNet解读

2024-06-05 23:38
文章标签 解读 内涵 cvpr2019 gcnet

本文主要是介绍内涵:CVPR2019之GCNet解读,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

non-local论文地址
non-local代码地址
gcnet论文地址
gcnet代码地址
senet论文地址
senet代码地址

        这篇文章是发表于CVPR2019上的一篇文章,文章花了相当多的文笔放在另外两篇文章Non-local(CVPR2018)和Senet(CVPR2018)之上。而且感情基调较为明显,较为质疑 Non-local的做法,中性略带赞赏性的评价Senet。
        这篇文章的思路来源于:作者发现,对于一副图片,不同的query positions 通过 non-local结构获得的全局上下文信息几乎一样。因此作者“质疑”这样“费力”(复杂的网络结构、计算量、参数量)的获得query-specific的全局上下文信息意义不大。因此提出了一个query-independent的Simpled NL(snl)结构。并且通过实验证明,简化之后,参数量、计算量下来了,性能却outperforms Non-local。同时作者还提出,本文提出的gc block结构和Senet都属于一种"三步骤"通用框架:1、全局上下文建模;2、channel-wise 依赖关系转换;3、特征融合。并认为Senet是这种通用框架的实例对象,而GcNet则是一种性能更佳的实例对象。
        无论是non-local还是本文所提出的gcnet都属于"long-range dependency “。它们的目的都是尽可能从"global"的角度来理解图像,而不至于陷入盲人摸象的地步。单靠传统的卷积层是无法自己做到这一点的(或者说做的不够好),原因在于一个卷积操作是对一个"local neighborhood"的pixel 关系进行建模。虽然可以通过不断的加深网络,来达到网络后半部分的神经元的感受野变大,达到一种不那么“local”的效果。但这种粗暴的加深网络的做,有如下三个缺点:
1、不够精巧,参数量、计算量粗暴拼凑出来的。
2、网络越深,优化难度越大。
3、不那么"local"并不代表全局,有最大距离的限制。
        对上面第三点的理解可以为:在网络的后半部分,feature map右下角的cell,感受野可能扩大了,但可能还是始终无法获得原图片上左上角的信息(因为卷积操作最大距离的限制)。
        与之对应的,一个理想的神经网络应该是:不要那么深,让用户优化的太困难;网络涉及的精巧一点,最好较少的参数量达到原始网络结构的性能;真正的做到全局,没有最大距离的限制。
        从最近阅读的几篇论文来看,精巧或者说light的网络block单元是现在研究人员追求的一个目标,毕竟现在深度学习领域感觉有点进入瓶颈期的意思,很多论文现在都是在计算量下降的情况下,性能提升0.x个点,这种操作了。而全局则是一个相对较为火爆的切入点之一。从non-local的名字就可以看出,它也是从’global’的角度切入。对于每一个query position,计算该query position与图中其他点之间的关系来提取该点的特征。
        然而,作者对non-local的attention map进行可视化后发现不同的query point对应的attention map几乎一样如,图1所示:图1
                                                        图1
       既然attention map与具体点的位置无关,一个最直观的反应是,那就不要每一个点单独算一个attention map了。用另外一种同样能够获得全局信息,但一个feature map上的点共用的特征吧。基于此,本文作者提出了简化版的NL(snl)。从网络结构上可以看是如图2的变化:
在这里插入图片描述
               图2
        一个直观的感觉是block结构确实简化了。实际运算的变化,可以见图3中的公式变化。关键部分在于+号后面的变化。Nonlocal+号后面的内容与xi有关,因此每一个点i,需要计算一次。而snl的表达公式+号后面的内容已与xi无关,也即计算一次,然后大家公用,也映证了上文所讲的query-independent。

在这里插入图片描述
在这里插入图片描述图3
        到目前为止,该网络结构还只能称之为snl。作者对snl做了一些结构的优化,就变成了最终的GC block。主要有两点:
1、对于nsl模块中右下角的1x1卷积,它的参数量是CINCOUT。例如,输入通道是2048,输出通道是2048。则参数量就是4000000。这样会导致该模块不够轻量级,无法插入网络的任意位置。作者是通过一个bottleneck结构来替换。这样参数量可以从2cin*cout/r(r通常设置为16)。
2、two-level bottleneck 的引入增加了网路优化的难度,因此作者引入了layer norm(作者论文中实验讲,这一加入还是蛮有效的,0.x个点吧)。
到这里作者发现gcnet的组成已经和senet很像了(如图4所示)。
在这里插入图片描述
                 图4

        这时,作者提出了一个“Global context modeling framework”来抽象这一类结构(也即博客开头提到的三步骤结构)。如图5所示

在这里插入图片描述
               图5
        毕竟作者是投稿CVPR这样的顶会,还是要有创新性的。作者在论文中也总结了自己提出的gcnet与senet网络之间的差异:
1、senet 在融合的时候使用的是rescale,而gcnet使用的是sum。因此"SE recalibrate the importance of channels but inadequately models long-range dependency"。
2、Layer-norm的使用。
3、SE中用于提取全局信息的global pooling 是GCNET global attention pooling的一种特例。
4、在有就是性能上,outferms senet网络。

思考:
1、自己读下来non-local和gcnet。感觉gcnet虽然批判non-local花费了很大的笔墨。但我自己感觉,创新性上,gcnet有限,暂时理解的是简单的调整一下网络拼装结构,然后总结一个三步框架。感觉用作实习生工作的阶段性汇报,可以,但中一篇cvpr顶会,暂时还没感受到它的太大的价值。相比较而言,non-local,思想上的query-special的思想和实现,对自己的启发感觉更大。

附录:由于这篇文章涉及到比较多的non-local。因此non-local就暂时不准备单独开一篇博客了,附上对于理解Non-local自己感觉比较重要的一段论文和图。
在这里插入图片描述
在这里插入图片描述

这篇关于内涵:CVPR2019之GCNet解读的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

MySQL中时区参数time_zone解读

《MySQL中时区参数time_zone解读》MySQL时区参数time_zone用于控制系统函数和字段的DEFAULTCURRENT_TIMESTAMP属性,修改时区可能会影响timestamp类型... 目录前言1.时区参数影响2.如何设置3.字段类型选择总结前言mysql 时区参数 time_zon

MySQL中的锁和MVCC机制解读

《MySQL中的锁和MVCC机制解读》MySQL事务、锁和MVCC机制是确保数据库操作原子性、一致性和隔离性的关键,事务必须遵循ACID原则,锁的类型包括表级锁、行级锁和意向锁,MVCC通过非锁定读和... 目录mysql的锁和MVCC机制事务的概念与ACID特性锁的类型及其工作机制锁的粒度与性能影响多版本

Redis过期键删除策略解读

《Redis过期键删除策略解读》Redis通过惰性删除策略和定期删除策略来管理过期键,惰性删除策略在键被访问时检查是否过期并删除,节省CPU开销但可能导致过期键滞留,定期删除策略定期扫描并删除过期键,... 目录1.Redis使用两种不同的策略来删除过期键,分别是惰性删除策略和定期删除策略1.1惰性删除策略

Redis与缓存解读

《Redis与缓存解读》文章介绍了Redis作为缓存层的优势和缺点,并分析了六种缓存更新策略,包括超时剔除、先删缓存再更新数据库、旁路缓存、先更新数据库再删缓存、先更新数据库再更新缓存、读写穿透和异步... 目录缓存缓存优缺点缓存更新策略超时剔除先删缓存再更新数据库旁路缓存(先更新数据库,再删缓存)先更新数

C#反射编程之GetConstructor()方法解读

《C#反射编程之GetConstructor()方法解读》C#中Type类的GetConstructor()方法用于获取指定类型的构造函数,该方法有多个重载版本,可以根据不同的参数获取不同特性的构造函... 目录C# GetConstructor()方法有4个重载以GetConstructor(Type[]

MCU7.keil中build产生的hex文件解读

1.hex文件大致解读 闲来无事,查看了MCU6.用keil新建项目的hex文件 用FlexHex打开 给我的第一印象是:经过软件的解释之后,发现这些数据排列地十分整齐 :02000F0080FE71:03000000020003F8:0C000300787FE4F6D8FD75810702000F3D:00000001FF 把解释后的数据当作十六进制来观察 1.每一行数据

Java ArrayList扩容机制 (源码解读)

结论:初始长度为10,若所需长度小于1.5倍原长度,则按照1.5倍扩容。若不够用则按照所需长度扩容。 一. 明确类内部重要变量含义         1:数组默认长度         2:这是一个共享的空数组实例,用于明确创建长度为0时的ArrayList ,比如通过 new ArrayList<>(0),ArrayList 内部的数组 elementData 会指向这个 EMPTY_EL

Spring 源码解读:自定义实现Bean定义的注册与解析

引言 在Spring框架中,Bean的注册与解析是整个依赖注入流程的核心步骤。通过Bean定义,Spring容器知道如何创建、配置和管理每个Bean实例。本篇文章将通过实现一个简化版的Bean定义注册与解析机制,帮助你理解Spring框架背后的设计逻辑。我们还将对比Spring中的BeanDefinition和BeanDefinitionRegistry,以全面掌握Bean注册和解析的核心原理。

GPT系列之:GPT-1,GPT-2,GPT-3详细解读

一、GPT1 论文:Improving Language Understanding by Generative Pre-Training 链接:https://cdn.openai.com/research-covers/languageunsupervised/language_understanding_paper.pdf 启发点:生成loss和微调loss同时作用,让下游任务来适应预训

LLM系列 | 38:解读阿里开源语音多模态模型Qwen2-Audio

引言 模型概述 模型架构 训练方法 性能评估 实战演示 总结 引言 金山挂月窥禅径,沙鸟听经恋法门。 小伙伴们好,我是微信公众号《小窗幽记机器学习》的小编:卖铁观音的小男孩,今天这篇小作文主要是介绍阿里巴巴的语音多模态大模型Qwen2-Audio。近日,阿里巴巴Qwen团队发布了最新的大规模音频-语言模型Qwen2-Audio及其技术报告。该模型在音频理解和多模态交互