[2020-CVPR] Dynamic Region-Aware Convolution 论文简析

[2020-CVPR] Dynamic Region-Aware Convolution 论文简析

论文地址:https://arxiv.org/abs/2003.12243
参考代码地址(非官方):https://github.com/shallowtoil/DRConv-PyTorch

代码笔者自己试了一下,应该是可以的,但是没做到文中的性能,欢迎讨论。

本文设计了一种新型动态区域感知卷积(DRConv),根据图像的信息将图像划分为多个区域,并为每个区域单独生成定制的卷积核。有强大的语义表示能力并且保持了平移不变性,本文还具体设计了此种卷积的反向传播方式,根据总体的梯度进行参数更新,实现了端到端的训练,该卷积在多项任务上具有极其优异的性能。

DRConv针对的问题是常规卷积同一个通道中所有卷积核共享参数,无法对图像的不同的语义区域进行有针对性的卷积操作,所以标准卷积只能通过增加通道数来提取更多的视觉元素,这无疑会大幅增加计算的开销。而本文提出的DRConv会根据图像中不同的语义信息划分不同的区域,然后针对每个语义区域定制不同的卷积核进行卷积,即不同区域间的卷积核的参数是不共享的、定制化的,这使得DRConv比标准卷积在建模语义信息的多样性上表现更好。即DRConv将通道维度上的卷积核个数的增加转换为了空间维度上可学习的区域划分,这不仅提高了卷积的表示能力,并且保持了标准卷积的计算量和平移不变形。
作者还针对这个过程中的argmax函数无法反向传播求梯度的问题提出了用softmax在反向传播是近似代替argmax(hardmax)的解决方案。

实验部分,作者将DRConv替换掉MobileNet等网络的一些卷积层,在分类、人脸识别、检测和分割任务上都取得了比较好的效果。

在这里插入图片描述

DRConv的具体结构如图所示,我们先对输入图像使用标准卷积来得到guided feature。根据guided feature,将空间维度划分为若干区域。如图所示,guided mask中相同颜色的像素表示同一块区域。在每个共享区域中,我们使用filter generator模块来生成一个卷积核去执行2维的卷积操作。这样需要优化的参数主要在filter generator模块中,并且这些参数的数量与图像本身的大小没有关系。因此,除了大幅提升模型的性能外,DRConv相较于局部卷积来说参数的数量也大大下降了,与标准卷积的参数量相当。

标准卷积在空间域卷积核都使用权值共享。问题是计算不够高效,并且优化困难。
局部卷积在不同的像素位置使用不同的权值在空间维度上使用多卷积核的方法来利用语义信息的多样性,如此比标准卷积在提取空间特征是更加高效。但问题一是大大增加了参数量,而是是破坏了卷积的平移不变性。而且其在不同的样本之间还是共享卷积核的,这使它对于每个样本各自的特定特征不够敏感。

具体来说,作者设计了一个可学习的guided mask模块,来根据输入图像的特点将空间维度划分为多个区域,将图像划分成不同的区域,在不同的区域上使用不同的卷积。区域内卷积是通用的,不同区域卷积不通用。GGG 是生成卷积的模块,有多少个区域,就生成多少个卷积核 WiW_iWi 。在每个区域内部只有一个共享的卷积核。不同样本的不同区域的卷积核会根据输入的相应特征动态生成,这能够使我们更加高效地关注于它们的关键特征。

Method

标准卷积:
Yu,v,o=∑c=1CXu,v,o∗Wc(o)Y_{u,v,o}=\sum_{c=1}^CX_{u,v,o}*W_c^{(o)} Yu,v,o=c=1CXu,v,oWc(o)
局部卷积:
Yu,v,o=∑c=1CXu,v,o∗W(u,v,c)(o)Y_{u,v,o}=\sum_{c=1}^CX_{u,v,o}*W_{(u,v,c)}^{(o)} Yu,v,o=c=1CXu,v,oW(u,v,c)(o)
DRConv:
Yu,v,g=∑c=1CXu,v,o∗W(t,c)(o)Y_{u,v,g}=\sum_{c=1}^CX_{u,v,o}*W_{(t,c)}^{(o)} Yu,v,g=c=1CXu,v,oW(t,c)(o)
可概括为两步,两个主要模块:learnable guided mask模块和filter generator模块,前者决定哪个分类起被分配到哪个块,后者决定根据输入特征生成相关的卷积核

learnable guided mask

该模块根据相应的损失函数进行参数更新,所以可以适应不同的图像输入产生不同的分块

具体来说,对于一个k*k的DRConv(k是卷积核尺寸),m个区域。我们先使用k*k的标准卷积来生成m个通道的guided feature,

对于空间域中每个位置,有:
Mu,v=argmax(Fu,v0^,Fu,v1^,...,Fu,vm−1^)M_{u,v}=argmax(\hat{F_{u,v}^0},\hat{F_{u,v}^1},...,\hat{F_{u,v}^{m-1}}) Mu,v=argmax(Fu,v0^,Fu,v1^,...,Fu,vm1^)
M是guided mask(U*V),F是guided feature在(u,v)处的特征向量,有m个元素(U*V*m),该argmax取的是索引(M是个索引,取值在0到m-1之间)

为了使该模块可学习,需要有梯度来更新参数,但是guided feature,argmax并没有梯度,为此,本文设计了一种得到guided feature近似梯度的方法。

前向传播

我们已经根据上式得到了guided mask,有每个位置(u,v)的卷积核如下:
W^u,v=WMu,v,Mu,v∈[0,m−1]=W∗Mu,v\hat{W}_{u,v}=W_{M_{u,v}},\ \ \ \ \ \ \ \ \ \ \ M_{u,v}\in[0,m-1]=W*M_{u,v} W^u,v=WMu,v,           Mu,v[0,m1]=WMu,v

WMu,vW_{M_{u,v}}WMu,v 是由filter generator模块G生成的m个卷积核之一,Mu,vM_{u,v}Mu,v是guided feature FFF位置(u,v)通道维度中最大值的索引。这样,m个卷积核会与所有的位置建立相关关系,整个空间域的所有像素会被分成m组。各组中的像素使用同样的滤波器,他们具有相似的语义,因为他们是通过具有平移不变性的标准卷积将他们的信息转换到guided feature 上的。

注意:前向传播时是one hot的hardmax

在这里插入图片描述

反向传播

Mu,vM_{u,v}Mu,v 的one-hot形式,如 Mu,v=2M_{u,v}=2Mu,v=2, m=5m=5m=5,则其one-hot形式:(0,0,1,0,0)(0, 0, 1, 0, 0)(0,0,1,0,0) 作softmax得到 F^\hat{F}F^

因为argmax是hardmax,没法求导,所以这里在反向传播的时候使用了softmax来近似代替。

filter generator

该模块功能主要体现在针对不同输入图像,抓住其独有特征。

具体做法如上图右侧所示:先经过一个自适应的池化层将 U∗V∗CU*V*CUVC 的图像降采样到 k∗k∗Ck*k*CkkC ,再经过两个 1∗11*111 的卷积得到 mmm 个卷积核。

experiments

分类检测分割均有提升,表就不放了,有兴趣请自行查看原文。

可以看到模型规模越小,本文方法提升越明显,这是因为DRConv在空间维上提高了语义表达能力,对于表达能力较弱的小模型,帮助更为明显。
在这里插入图片描述
在这里插入图片描述

不同层的可视化,可以看到有比较明显的按照语义进行区域划分的效果。

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/532868.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

mmdetection 使用笔记 01: 安装与简单的推理demo

mmdetection 使用笔记 01: 安装与简单的推理demo mmdetection是来自商汤和港中文联合实验室openmmlab推出的目标检测工具包,与其同系列的还有基础视觉包mmcv,图像分类mmclassification,还有mmaction,mmaction2等等。 今天第一次…

php无限评论回复_php实现无限级评论功能_后端开发

php去除数组的键名的方法_后端开发在php中可以使用“array_values()”函数去除数组的键名,该函数返回包含数组中所有的值的数组,其语法是“array_values(array)”,其参数“array”表示规定的数组,返回值是包含数组中所有的值的数组…

错误类型、混淆矩阵及目标检测常用评价指标

目标检测常用评价指标 本文主要参考陈恺大佬在B站商汤账号的介绍mmdetection的视频。 检测结果的正确/错误类型 真阳性(Ture Positive):算法检测到了某类物体(Positive),而实际图中也确实有这个物体&…

使用yolov5训练自己的目标检测数据集

使用yolov5训练自己的目标检测数据集 yolov4出来后不久,又出现了yolov5,没有论文。虽然作者没有放上和yolov4的直接测试对比,但在COCO数据集的测试效果还是很可观的。很多人考虑到YOLOv5的创新性不足,对算法是否能够进化&#xf…

php获取h1,jQuery获取h1-h6标题元素值方法实例

本文主要介绍了jQuery实现获取h1-h6标题元素值的方法,涉及$(":header")选择器操作h1-h6元素及事件响应相关技巧,需要的朋友可以参考下,希望能帮助到大家。1、问题背景:查找到h1-h6,并遍历它们,打印出内容2、实现代码&am…

[2021-CVPR] Jigsaw Clustering for Unsupervised Visual Representation Learning 论文简析及关键代码简析

[2021-CVPR] Jigsaw Clustering for Unsupervised Visual Representation Learning 论文简析及关键代码简析 论文:https://arxiv.org/abs/2104.00323 代码:https://github.com/dvlab-research/JigsawClustering 总结 本文提出了一种单批次&#xff0…

matlab legend 分块,matlab legend 分块!

matlab legend 分块!(2013-03-26 18:07:38)%%%压差clc;clear all;figure(55);set (gcf,Position,[116 123 275 210],color,w);P[25 26 27 28 29 30 31 32 33 34 35];%理论q0.00006*pi*28*P*10^(6)*0.03^3/(12*0.028448*5);q1110.00006*pi*28*P*10^(6)*0.03^3/(12*0.…

利用opencv-python绘制多边形框或(半透明)区域填充(可用于分割任务mask可视化)

利用opencv-python绘制多边形框或(半透明)区域填充(可用于分割任务mask可视化) 本文主要就少opencv中两个函数polylines和fillPoly分别用于绘制多边形框或区域填充,并会会以常见用途分割任务mask(还是笔者…

Positional Encodings in ViTs 近期各视觉Transformer中的位置编码方法总结及代码解析 1

Positional Encodings in ViTs 近期各视觉Transformer中的位置编码方法总结及代码解析 最近CV领域的Vision Transformer将在NLP领域的Transormer结果借鉴过来,屠杀了各大CV榜单。对其做各种改进的顶会论文也是层出不穷,本文将聚焦于各种最新的视觉trans…

mysql 分析查询语句,MySQL教程之SQL语句分析查询优化

怎么获取有功能问题的SQL1、经过用户反应获取存在功能问题的SQL2、经过慢查询日志获取功能问题的SQL3、实时获取存在功能问题的SQL运用慢查询日志获取有功能问题的SQL首要介绍下慢查询相关的参数1、slow_query_log 发动定制记载慢查询日志设置的办法,能够经过MySQL指…

树莓派摄像头基础配置及测试

树莓派摄像头基础配置 step 1 硬件连接 硬件连接,注意不要接反了,排线蓝色一段朝向网口的方向。(笔者的设备是树莓派4B) step 2 安装raspi-config 安装 raspi-config raspi-config在raspbian中是预装的,而在kali、…

使用百度云智能SDK和树莓派搭建简易的人脸识别系统 Python语言版

硬件 树莓派4B一个CSI摄像头一个 笔者使用的是树莓派4B和CSI摄像头,但是树莓派3和USB摄像头等相似设备均可。 百度云智能设置 Step 1 登录 百度云智能 网址https://cloud.baidu.com/ 首先登录百度账号,与百度云、百度贴吧等互通,可直接…

xp搭建 php环境,windows xp 下 LAMP环境搭建

1. apache安装步骤如下图在浏览器中输入:localhost,出现下面页面说明已成功安装apache。2. mysql安装如下图显示在运行里面输入cmd ,然后连接测试mysql ,如图所示:3. php安装(1)将php压缩包解压到安装路径中的php目录…

C++中的虚函数(表)实现机制以及用C语言对其进行的模拟实现

C中的虚函数(表)实现机制以及用C语言对其进行的模拟实现 声明:本文非博主原创,转自https://blog.twofei.com/496/,博主读后受益良多,特地转载,一是希望好文能有更多人看到,二是为了日后自己查阅。 前言 …

C++中数组和指针的关系(区别)详解

C中数组和指针的关系(区别)详解 本文转自:http://c.biancheng.net/view/1472.html 博主在阅读后将文中几个知识点提出来放在前面: 没有方括号和下标的数组名称实际上代表数组的起始地址,这意味着数组名称实际上就是…

安装php独立环境,0507-php独立环境的安装与配置 Web程序 - 贪吃蛇学院-专业IT技术平台...

1.在一个纯英文目录下新建三个文件夹2.安装apache(选择好版本)过程中该填的按格式填好,其余的只更改安装目录即可如果报错1901是安装版本的问题。检查:安装完成后localhost打开为It works!添加到电脑属性环境变量:3.将php文件解压文档放到AMP…

linux中PATH变量-详细介绍

转自:https://blog.csdn.net/haozhepeng/article/details/100584451 转载者勘误 原文最后提到的 echo 命令对于环境变量的修改无影响。这是肯定的,echo 命令相当于只是一个打印的函数(比如 Python 中的 print)。这里要修改环境变…

php assert eval,代码执行函数之一句话木马

前言大家好,我是阿里斯,一名IT行业小白。非常抱歉,昨天的内容出现瑕疵比较多,今天重新整理后再次发出,修改并添加了细节,另增加了常见的命令执行函数如果哪里不足,还请各位表哥指出。eval和asse…

显卡、显卡驱动、CUDA、CUDA Toolkit、cuDNN 梳理

显卡、显卡驱动、CUDA、CUDA Toolkit、cuDNN 梳理 转自:https://www.cnblogs.com/marsggbo/p/11838823.html#nvccnvidia-smi GPU型号含义 显卡: 简单理解这个就是我们前面说的GPU,尤其指NVIDIA公司生产的GPU系列,因为后面介绍的…

VS Code的Error: Running the contributed command: ‘_workbench.downloadResource‘ failed解决

VS Code的Error: Running the contributed command: _workbench.downloadResource failed解决 转自:https://blog.csdn.net/ibless/article/details/118610776 1 问题描述 此前,本人参考网上教程在VS Code中配置了“Remote SSH”插件(比如这…