可变形卷积 DeformConv2d

可变性卷积

  • 前言
  • 为什么要用DConv
  • 普通卷积和与可变形卷积计算过程
    • 普通卷积计算过程
    • Pytorch官方API
    • 可变形卷积计算过程
  • 参考资源

前言

可变形卷积即DCN(缩写取自Deformable ConvNets)提出于ICCV 2017的paper:
Deformable Convolutional Networks
论文paper地址:https://openaccess.thecvf.com/content_ICCV_2017/papers/Dai_Deformable_Convolutional_Networks_ICCV_2017_paper.pdf

codebase地址:(很多框架中都已实现,这里选择以pytorch的为例)https://github.com/4uiiurz1/pytorch-deform-conv-v2/blob/master/deform_conv_v2.py


在这里插入图片描述
3×3标准和可变形卷积的采样位置图示。(a) 标准卷积的规则采样网格(绿点)。(b) 可变形卷积中带有增强偏移量(浅蓝色箭头)的变形采样位置(深蓝色点)。(c)(d)是(b)的特例,表明可变形卷积概括了尺度、(各向异性)长宽比和旋转的各种变换。


为什么要用DConv

卷积单元(卷积核)对输入的特征图在固定的位置进行采样;池化层不断减小着特征图的尺寸;RoI池化层产生空间位置受限的RoI。然而,这样做会产生一些问题,比如,卷积核权重的固定导致同一CNN在处理一张图的不同位置区域的时候感受野尺寸都相同,这对于编码位置信息的深层卷积神经网络是不合理的。因为不同的位置可能对应有不同尺度或者不同形变的物体,这些层需要能够自动调整尺度或者感受野的方法。再比如,目标检测的效果很大程度上依赖于基于特征提取的边界框,这并不是最优的方法,尤其是对于非网格状的物体而言。


普通卷积和与可变形卷积计算过程

普通卷积计算过程

在这里插入图片描述

在这里插入图片描述
这里dilation:controls the spacing between the kernel points;
stride相似,实际含义为:每个点之间有空隙的过滤器,即为dilation。例如,在一个维度上,一个大小为 3 3 3的过滤器 w w w会对输入的x进行如下计算: w [ 0 ] ∗ x [ 0 ] + w [ 1 ] ∗ x [ 1 ] + w [ 2 ] ∗ x [ 2 ] w[0] * x[0] + w[1] * x[1] + w[2] * x[2] w[0]x[0]+w[1]x[1]+w[2]x[2] 。若 d i l a t i o n = 1 dilation = 1 dilation=1,过滤器会计算: w [ 0 ] ∗ x [ 0 ] + w [ 1 ] ∗ x [ 2 ] + w [ 2 ] ∗ x [ 4 ] w[0] * x[0] + w[1] * x[2] + w[2] * x[4] w[0]x[0]+w[1]x[2]+w[2]x[4];换句话说,在不同点之间有一个1的差距。(Pytoch中 d i l a t i o n dilation dilation默认等于 1 1 1,但是实际为不膨胀,也就是说设置 d i l a t i o n = 2 dilation = 2 dilation=2时才会真正进行膨胀操作)
下面动画的 d i l a t i o n = 2 dilation = 2 dilation=2 的卷积操作
在这里插入图片描述

Pytorch官方API

torch.nn.Conv2d(in_channels, out_channels, kernel_size, stride=1, padding=0, dilation=1, groups=1, bias=True, padding_mode='zeros')
  • in_channels参数代表输入特征矩阵的深度即channel,比如输入一张RGB彩色图像,那in_channels = 3;
  • out_channels参数代表卷积核的个数,使用n个卷积核输出的特征矩阵深度即channel就是n;
  • kernel_size参数代表卷积核的尺寸,输入可以是int类型如3 代表卷积核的height = width = 3,也可以是tuple类型如(3, 5)代表卷积核的height = 3,width = 5;
  • stride参数代表卷积核的步距默认为1,和kernel_size一样输入可以是int类型,也可以是tuple类型,这里注意,若为tuple类型即第一个int用于高度尺寸,第二个int用于宽度尺寸;
  • padding参数代表在输入特征矩阵四周补零的情况默认为0,同样输入可以为int型如1代表上下方向各补一行0元素,左右方向各补一列0像素(即补一圈0),如果输入为tuple型如(2, 1) 代表在上方补两行下方补两行,左边补一列,右边补一列。可见下图,padding[0]是在H高度方向两侧填充的,padding[1]是在W宽度方向两侧填充的;
    在这里插入图片描述
    使用方法可见官方文档:https://pytorch.org/docs/stable/generated/torch.nn.Conv2d.html#

可变形卷积计算过程

在这里插入图片描述
在这里插入图片描述
∇ P n \nabla P_n Pn是由普通卷积计算得到的,这里的 o u t _ c h a n n e l = 2 ∗ k e r n e l _ s i z e 2 out\_channel =2*kernel\_size^2 out_channel=2kernel_size2,变换生成kernel_size*kernel_size 大小的 ∇ R \nabla R R表。
在这里插入图片描述
使用双向线性插值方法确定最后的位置,后计算value。
在这里插入图片描述
在这里插入图片描述
可变卷积形pytorch API 地址
https://pytorch.org/vision/main/generated/torchvision.ops.deform_conv2d.html#torchvision.ops.deform_conv2d

参考资源

1.https://blog.csdn.net/jiangqixing0728/article/details/126269423
2.https://www.bilibili.com/video/BV1Sh4y1y75i/?spm_id_from=333.337.search-card.all.click&vd_source=17d3748d0773a2015a74ab52544dd499

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

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

相关文章

Linux设置禁止SSH空密码登录

为什么要禁止SSH空密码登陆? 禁止SSH空密码登录的原因是出于安全考虑。如果允许使用空密码进行SSH登录,那么任何人都可以通过尝试使用空密码来尝试登录到系统,从而获取系统的访问权限,这显然是非常不安全的。 此外,使…

计算机毕业论文内容参考|基于深度学习的交通标识智能识别系统的设计与维护

文章目录 导文摘要前言绪论1课题背景2国内外现状与趋势3课题内容相关技术与方法介绍系统分析总结与展望导文 基于深度学习的交通标识智能识别系统是一种利用深度学习模型对交通标识进行识别和解析的系统。它可以帮助驾驶员更好地理解交通规则和安全提示,同时也可以提高道路交通…

【Linux】一

本文使用的是云服务器来获取Linux环境 (使用虚拟机同样可以学习使用命令), 并且介绍了常用的Linux 命令. 获取Linux环境 使用xshell连接到云服务器 1.新建会话 输入主机号(云服务器的外网ip) 2.输入用户名/密码 centos的用户名:root 密码就是在后台设置的 3.成功进入 ~描…

cvf_使用lora方法增强能力

cvf_使用lora方法增强能力 实验对比图最终代码简介详细解析实验对比图 最终代码 import paddle import numpy as np import pandas as pd from tqdm import tqdmclass FeedFroward(paddle.nn.Layer)

IPSec:strongswan -- IKEv2如何检测到经过了nat设备

拓扑 其中NAT设备将来自DUTA的报文源IP 101.0.0.2转换为102.0.0.2。DUTA发起IPSec连接。 DUTA计算natd_chunk和natd_hash DUTA先用自己的SPI,对等体的SPI(为0),IP和端口号做SHA1处理。如下图: 代码位于ike_natd.c的函…

随着大模型中数据局限问题的严峻化,向量数据库应运而生

向量数据库与亚马逊大模型 什么是向量数据库 向量嵌入(vector embedding)已经无处不在。它们构成了许多机器学习和深度学习算法的基础,被广泛运用于各种应用,从搜索引擎到智能助手再到推荐系统等。通常,机器学习和深度…

Python 自动化: eip、cen监控数据对接到 grafana

新钛云服已累计为您分享775篇技术干货 概览 日常运维中,我们有时需要关注阿里云中 EIP 和 CEN 的监控数据,如果每次登录到平台查看,不太方便。 可以通过 API 获取监控数据,并输入到 influxDB,然后再到 Grafana 中展示&…

Django学习日志07

多表查询(跨表查询) 子查询:分步查询 链表查询:把多个有关系的表拼接成一个大表(虚拟表) inner join left join 展示左表所有数据数据,右表展示符合查询条件的数据,查询不到的用null填充 …

ChatGpt3.5已经应用了一段时间,分享一些自己的使用心得.

首先ChatGpt3.5的文本生成功能十分强大,但是chatgpt有一些使用规范大家需要注意,既然chat是一种工具,我们就需要学会它的使用说明,学会chatgpt的引用语句,会极大的方便我们的使用。我们需要做以下的准备。 明确任务和目…

键盘方向键移动当前选中的table单元格,并可以输入内容

有类似于这样的表格&#xff0c;用的<table>标签。原本要在单元格的文本框里面输入内容&#xff0c;需要用鼠标一个一个去点以获取焦点&#xff0c;现在需要不用鼠标选中&#xff0c;直接用键盘的上下左右来移动当前正在输入的单元格文本框。 const currentCell React.u…

Diagrams——制作短小精悍的流程图

今天为大家分享的是一款轻量级的流程图绘制软件——Diagrams。 以特定的图形符号加上说明&#xff0c;表示算法的图&#xff0c;称为流程图或框图。流程图是流经一个系统的信息流、观点流或部件流的图形代表。我们常用流程图来说明某一过程。 流程图使用一些标准符号代表某些类…

Jenkins代码检测和本地静态检查

1&#xff1a;Jenkins简介 Jenkins是一个用Java编写的开源的持续集成工具&#xff1b;Jenkins自动化部署可以解决集成、测试、部署等重复性的工作&#xff0c;工具集成的效率明显高于人工操作&#xff1b;并且持续集成可以更早的获取代码变更的信息&#xff0c;从而更早的进入测…