ICLR 2022 | 涨点神器!Intel提出ODConv:即插即用的动态卷积

2024-03-24 15:30

本文主要是介绍ICLR 2022 | 涨点神器!Intel提出ODConv:即插即用的动态卷积,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

点击下方卡片,关注“CVer”公众号

AI/CV重磅干货,第一时间送达

转载自:极市平台  |  作者:happy

导读

 

本文介绍了一篇动态卷积的工作:ODConv,其通过并行策略采用多维注意力机制沿核空间的四个维度学习互补性注意力。作为一种“即插即用”的操作,它可以轻易的嵌入到现有CNN网络中。并且实验结果表明它可提升大模型的性能,又可提升轻量型模型的性能,实乃万金油是也!

d43c6b52e97b79ba9163fe33f174f12e.png

Omni-Dimensional Dynamic Convolution 

论文链接:https://openreview.net/forum?id=DmpCfq6Mg39

ICLR2022前段时间已经放榜,涌现了大量优秀的工作。笔者在浏览时偶然发现一篇关于动态卷积的文章ODConv(Omni-dimensional Dynamic Convolution, ODConv),Intel实验室姚安邦:https://yaoanbang.github.io/团队的工作。作为一种“即插即用”的操作,还是非常值得一读的,故做记录以飨各位。

动态卷积这几年研究的非常多了,比较知名的有谷歌的CondConv,旷视科技的WeightNet、MSRA的DynamicConv、华为的DyNet、商汤的CARAFE等。笔者曾经也对相关paper进行过解读,各个动态卷积之间的差异性也曾进行深入分析。

高性能涨点的动态卷积 DyNet 与 CondConv、DynamicConv 有什么区别联系?

一定程度上讲,ODConv可以视作CondConv的延续,将CondConv中一个维度上的动态特性进行了扩展,同时了考虑了空域、输入通道、输出通道等维度上的动态性,故称之为全维度动态卷积。ODConv通过并行策略采用多维注意力机制沿核空间的四个维度学习互补性注意力。作为一种“即插即用”的操作,它可以轻易的嵌入到现有CNN网络中。ImageNet分类与COCO检测任务上的实验验证了所提ODConv的优异性:即可提升大模型的性能,又可提升轻量型模型的性能,实乃万金油是也!值得一提的是,受益于其改进的特征提取能力,ODConv搭配一个卷积核时仍可取得与现有多核动态卷积相当甚至更优的性能

Backgroud

在正式介绍ODConv之前,我们首先对现有动态卷积进行回顾,然后再对ODConv进行描述,说明其特性与实现细节。

常规卷积只有一个静态卷积核且与输入样本无关。对于动态卷积来说,它对多个卷积核进行线性加权,而加权值则与输入有关,这就使得动态卷积具有输入依赖性。它可以描述如下:

402 Payment Required

尽管动态卷积的定义很简单,但CondConv与DyConv的实现是不相同的,主要体现在计算的结构、训练策略以及实施动态卷积的层,这些实现上的差异导致了不同的模型精度、模型大小以及推理效率。

  • 两者均为采用了类SE架构,但CondConv采用的是Sigmoid,而DyConv采用的是Softmax;

  • DyConv采用的退化策略进行训练以抑制Softmax的one-hot输出;

  • 对于他们嵌入的CNN架构,CondConv替换了最后几个模块的卷积与全连接层,而DyConv则对除第一个卷积外的其他卷积均进行了替换。

根据动态卷积的公式来看,动态卷积有两个基本元素:

  • 卷积核;

  • 用于计算注意力的注意力函数

给定n个卷积核,其对应的核空间有以下四个维度:

  • 空间核尺寸;

  • 输入通道数

  • 输出通道数

  • 卷积核数量n

然而,对于CondConv与DyConv来说,均采用单个注意力标量,这就意味着它的的输出滤波器对于输入具有相同的注意力值。换句话说,卷积核 的空间维度、输入通道维度以及输出通道维度均被CondConv与DyConv所忽视了。这就导致了关于核空间的粗糙探索。这可能就是为什么CondConv与DyConv对于大网络的性能增益较低的原因。

此外,相比常规卷积,动态卷积的卷积核参数往往是其n倍。比如CondConv中的n=8,DyConv中的n=4。当动态卷积使用过多时无疑会极大程度提升模型大小。我们发现:当 移除掉CondConv/DyConv中的注意力机制(即)后,其性能提升接近于零。比如,对于ResNet18,其性能增益从1.78%/2.51%下降到了0.08%/0.14。

上述发现意味着:动态卷积中的注意力机制起关键性作用,更有效的设计也许可以在模型精度与大小之间得到更好的平衡。

ODConv

dde9aec057ff72e187afa76ab97fcde8.png

基于前述讨论,ODConv通过并行策略引入一种多维注意力机制以对卷积核空间的四个维度学习更灵活的注意力。上图给出CondConv、DyConv以及ODConv的差异图。

延续动态卷积的定义,ODConv可以描述成如下形式:

其中,表示卷积核的注意力标量,

402 Payment Required

表示新引入的三个注意力,分别沿空域维度、输入通道维度以及输出通道维度。这四个注意力采用多头注意力模块 计算得到。 dc69dc73592bad97522a41557a7e05cc.png

在ODConv中,对于卷积核,对空域位置上的卷积参数赋予不用的注意力值,见上图a;对不同输入通道的卷积滤波器赋予不同的注意力值,见上图b;对不同输出通道的卷积滤波器赋予不同的注意力值,见上图c;而则对n个整体卷积核赋予不同的值,见上图d。

原则上来讲,这四种类型的注意力是互补的,通过渐进式对卷积沿位置、通道、滤波器以及核等维度乘以不同的注意力将使得卷积操作对于输入存在各个维度的差异性,提供更好的性能以捕获丰富上下文信息。因此,ODCOnv可以大幅提升卷积的特征提取能力;更重要的是,采用更少卷积核的ODConv可以取得与CondConv、DyConv相当甚至更优的性能。

对比前面两种动态卷积的公式可以发现:ODConv是一种更广义的动态卷积。此外,当设置时,ODConv则退化为仅具有滤波器层面的注意力,基于输入对卷积滤波器进行调制后再进行卷积,类似于SE。故SE是ODConv的一个特例。

1fd1164e28d6c0162d9847e58ca8dad2.png

那么如何实现ODConv的四种类型的注意力值呢?延续CondConv与DyConv,我们同样采用SE风格的注意力模块,但使其具有多个头以计算多种类型注意力,整体结构见上图。具体来说,对于输入先通过GAP收缩为长度为的特征向量,然后采用FC与四个头生成不同类型的注意力值。对于四个头,其维度分别为。

在训练方面,我们采用了DyConv中的退化策略以加速训练。在具体架构嵌入方面,我们参考DyConv对除第一个卷积外的其他所有卷积进行替换。

Experiments

在对标骨干方面,我们选用了MobileNetV2与ResNet系列;在对标动态卷积方面,我们选择了CondConv、DyConv以及DCD。此外,我们还对标了不同的注意力,比如SE、CBAM、ECA、WE、CGC以及WeightNet。

8d5a921df0516245807fc231893bbd87.png

上表给出了以MobileNetV2为基础架构不同方案的性能对比,从中可以看到:

  • 采用的单个卷积核的ODConv取得比8个卷积核的CondCOnv更佳的性能,同时具有与4个卷积核的DyConv相当的性能,而ODConv的参数量远小于DyConv。这说明:ODConv可以提供更好的精度与模型大小均衡;

  • 相比DCD,采用单个卷积核的ODConv同样取得了更佳的性能;

  • 采用4个卷积核的ODConv则进一步取得了性能提升。

2ed72b3aa06b6f5d2dbcf38455f8c7d5.png

上表给出了以ResNet为基础架构不同方案的性能对比,从中可以看到:

  • 当采用ResNet18作为基础骨干时,动态卷积具有比注意力更佳的性能,而ODConv的性能比其他动态卷积还要优秀,最高性能提升达3.72%;

  • 当采用ResNet50作为基础骨干时,CondConv、DyConv以及DCD反而比注意力机制的性能更低,而ODConv仍可以取得比注意力机制更佳的性能;

  • 当以ResNet101作为基础骨干时,ODConv仍具有非常好的性能,且比注意力机制更优。

64016549178a65ee51e2cf54df8b1c97.png

上表给出了COCO检测任务上的性能对比,从中可以看到:ODConv再次取得了比其他动态卷积更优的性能

 
ODConv论文下载后台回复:ODConv,即可下载上述论文PDF

ICCV和CVPR 2021论文和代码下载

后台回复:CVPR2021,即可下载CVPR 2021论文和代码开源的论文合集

后台回复:ICCV2021,即可下载ICCV 2021论文和代码开源的论文合集

后台回复:Transformer综述,即可下载最新的3篇Transformer综述PDF

CVer-Transformer交流群成立

扫码添加CVer助手,可申请加入CVer-Transformer 微信交流群,方向已涵盖:目标检测、图像分割、目标跟踪、人脸检测&识别、OCR、姿态估计、超分辨率、SLAM、医疗影像、Re-ID、GAN、NAS、深度估计、自动驾驶、强化学习、车道线检测、模型剪枝&压缩、去噪、去雾、去雨、风格迁移、遥感图像、行为识别、视频理解、图像融合、图像检索、论文投稿&交流、PyTorch和TensorFlow等群。

一定要备注:研究方向+地点+学校/公司+昵称(如Transformer+上海+上交+卡卡),根据格式备注,可更快被通过且邀请进群

e057a65f9d6b0f090768e3a3fb16fc4a.png

▲长按加小助手微信,进交流群

CVer学术交流群(知识星球)来了!想要了解最新最快最好的CV/DL/ML论文速递、优质开源项目、学习教程和实战训练等资料,欢迎扫描下方二维码,加入CVer学术交流群,已汇集数千人!

d925965f4d09bb7254c9f5a29c071cd2.png

▲扫码进群

▲点击上方卡片,关注CVer公众号

整理不易,请点赞和在看0d91345c86c45be0e90cb61ae6d17f62.gif

这篇关于ICLR 2022 | 涨点神器!Intel提出ODConv:即插即用的动态卷积的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

Java调用C#动态库的三种方法详解

《Java调用C#动态库的三种方法详解》在这个多语言编程的时代,Java和C#就像两位才华横溢的舞者,各自在不同的舞台上展现着独特的魅力,然而,当它们携手合作时,又会碰撞出怎样绚丽的火花呢?今天,我们... 目录方法1:C++/CLI搭建桥梁——Java ↔ C# 的“翻译官”步骤1:创建C#类库(.NET

MyBatis编写嵌套子查询的动态SQL实践详解

《MyBatis编写嵌套子查询的动态SQL实践详解》在Java生态中,MyBatis作为一款优秀的ORM框架,广泛应用于数据库操作,本文将深入探讨如何在MyBatis中编写嵌套子查询的动态SQL,并结... 目录一、Myhttp://www.chinasem.cnBATis动态SQL的核心优势1. 灵活性与可

基于Python+PyQt5打造一个跨平台Emoji表情管理神器

《基于Python+PyQt5打造一个跨平台Emoji表情管理神器》在当今数字化社交时代,Emoji已成为全球通用的视觉语言,本文主要为大家详细介绍了如何使用Python和PyQt5开发一个功能全面的... 目录概述功能特性1. 全量Emoji集合2. 智能搜索系统3. 高效交互设计4. 现代化UI展示效果

Mybatis嵌套子查询动态SQL编写实践

《Mybatis嵌套子查询动态SQL编写实践》:本文主要介绍Mybatis嵌套子查询动态SQL编写方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录前言一、实体类1、主类2、子类二、Mapper三、XML四、详解总结前言MyBATis的xml文件编写动态SQL

Python+PyQt5实现MySQL数据库备份神器

《Python+PyQt5实现MySQL数据库备份神器》在数据库管理工作中,定期备份是确保数据安全的重要措施,本文将介绍如何使用Python+PyQt5开发一个高颜值,多功能的MySQL数据库备份工具... 目录概述功能特性核心功能矩阵特色功能界面展示主界面设计动态效果演示使用教程环境准备操作流程代码深度解

SpringBoot实现Kafka动态反序列化的完整代码

《SpringBoot实现Kafka动态反序列化的完整代码》在分布式系统中,Kafka作为高吞吐量的消息队列,常常需要处理来自不同主题(Topic)的异构数据,不同的业务场景可能要求对同一消费者组内的... 目录引言一、问题背景1.1 动态反序列化的需求1.2 常见问题二、动态反序列化的核心方案2.1 ht

golang实现动态路由的项目实践

《golang实现动态路由的项目实践》本文主要介绍了golang实现动态路由项目实践,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习... 目录一、动态路由1.结构体(数据库的定义)2.预加载preload3.添加关联的方法一、动态路由1

Python Selenium动态渲染页面和抓取的使用指南

《PythonSelenium动态渲染页面和抓取的使用指南》在Web数据采集领域,动态渲染页面已成为现代网站的主流形式,本文将从技术原理,环境配置,核心功能系统讲解Selenium在Python动态... 目录一、Selenium技术架构解析二、环境搭建与基础配置1. 组件安装2. 驱动配置3. 基础操作模

Python+PyQt5开发一个Windows电脑启动项管理神器

《Python+PyQt5开发一个Windows电脑启动项管理神器》:本文主要介绍如何使用PyQt5开发一款颜值与功能并存的Windows启动项管理工具,不仅能查看/删除现有启动项,还能智能添加新... 目录开篇:为什么我们需要启动项管理工具功能全景图核心技术解析1. Windows注册表操作2. 启动文件

慢sql提前分析预警和动态sql替换-Mybatis-SQL

《慢sql提前分析预警和动态sql替换-Mybatis-SQL》为防止慢SQL问题而开发的MyBatis组件,该组件能够在开发、测试阶段自动分析SQL语句,并在出现慢SQL问题时通过Ducc配置实现动... 目录背景解决思路开源方案调研设计方案详细设计使用方法1、引入依赖jar包2、配置组件XML3、核心配