Deformable ConvNet DCN 可变形卷积的理解
先声明这篇只是快速的复习用, 用词比较自我加随性,多见谅
代码解说的地方很多参考了这个连结
首先DCN有两个版本, 大家都知道的v1就是单纯的加了offset偏移, 另一个v2就是从v1的基础上再加上了modulation, 也就是对学习对所有位置的权重
DCN v1 作用
- v1: 多用了一个卷积学习出偏移offset的值, 相较于原先标准的卷积在感受野上有多更多分布的采样点, 原来标准的卷积不就是一个矩形的样子? 这样能学的特征非常的受到限制, 所以可变卷积就tm的问世了
公式
标准卷积(方便对照)
DCNv1
- p表示为特征图上每一个点
- y(p0)就表示 output feature map
- w 表示权重, 就是conv kernel 上的每一个值
- ΔPn\Delta P_nΔPn表示经由Conv学习到的偏值
- x 包含了输入特征图上的原采样点加上了学习到的偏值, 然后经过线性插值的过程
看最上边那张图, 经过conv_offset(就是最上图那个绿色的卷积)这个卷积学习出来的通道数为2N, 为什么是2, 因为学习出来的偏移有两个direction的, 一个为x, 一个为y, 一个通道负责一个方向, 那么N是表示采样点的个数, 比如用conv3x3去学习出offset, 那么就有2x3x3个点
这边记得从conv_offset学习出来的偏值通常会是float, 因为坐标需要整形
所以需要用一个bilinear interpolation来对学习出来的offset进行预处理
以下公式为线性插值方法
- G(q,p)G(q, p)G(q,p) 就是bilinear interpolation function
- 这里的p就是(p0+pn+Δpn)(p_0 + p_n + \Delta p_n)(p0+pn+Δpn)
接下来讲一下代码的实现思路
参考 代码
init的部分把相关信息配置好
p_conv就是用来学习offset的,这里仔细看outchannel的参数定义为2kernelsizekernelsize, 就是前面说到的2x3x3
m_conv就是DCNv2用来学习所以采样点的权重的
然后看到执行过程
看到经过了p_conv 得到offset, 如果有经过m_conv则会用一个sigmoid压缩成[0, 1]之间
这边看到用了一个 forward中用了_get_p
函数, 里面又用到了_get_p_0
, 所以tm的两个都要看才行
先tm的看_get_p_n
函数, 主要是计算出所有卷积核的中心坐标, 为啥可以刚好计算出卷积核的中心坐标??
看下图, 假设一个input fmap(5x7), conv为3x3, 则输出的outmap为2x3, 则输出map上的每一个元素值就刚好等于卷积核中心的”位置(坐标)“了,
继续接着看代码, 用torch.meshgrid
函数计算出卷积核上的九个坐标, 也就是(-1, 1)~…(1, 1)等9个, 最后噼里啪啦得到p_n
形状是(1, 2N, 1, 1), 这里的2N就是前面说到2N
再来看到_get_p_0
这个函数, 用来获取卷积核中心的坐标就是他妈的公式上的p0
传入的是output map的h跟w
最后看到_get_p
, 这个函数求出来的就是 p0+pn+Δpnp0 + pn + \Delta p_np0+pn+Δpn
再来复习一下p0就是卷积核中心点
pn就是周围的点, 如果是(-1, 1), 那最终就是
0 + (-1, 1)+ offset了
最后因为取出来的offset是float, 需要用bilinear interpolation进行插值转换成整数, 坐标毕竟是整数
线性插值法请参考博客 博客
以下是截取参考链接的
根据线性插值理论我们需要获取4个整数坐标,所以在获取所有可变卷积核的坐标p后,通过floor()获取不超过本身的最大整数,也就是左上角坐标q_lt,同时为了防止偏移量过大移出feature map的范围通过torch.clamp对卷积核坐标做了限制。接下来只要通过左上角坐标就可以推出左下角(q_lb),右上角(q_rt),右下角(q_rb)坐标。
获取4个点的坐标后根据上图公式可以计算出像素值前面的系数(即 [公式] 这部分),代码中这4个系数分别为g_lt,g_rb,g_lb,g_rt。现在只获取了坐标值,我们最终木的是获取相应坐标上的值,这里我们通过self._get_x_q()获取相应值。如下
_get_x_q
可以从求出的四个坐标求出相应的值
接下来就自己看个明白或者看一开始的参考链接了
不然我也只是照抄而已, 老实说实际算法也没必要完全理解, 知道怎么用就行
这篇纯属记录一下这个算法思路
写些打加~~~
Deformable ConvNet DCN 可变形卷积的理解相关推荐
- 深度学习之 DCN(Deformable Convolution)-可变形卷积
Paper link: http://openaccess.thecvf.com/content_ICCV_2017/papers/Dai_Deformable_Convolutional_Netwo ...
- 可变形卷积神经网络 | Deformable Network
论文标题:Deformable Convolutional Networks 论文链接:https://arxiv.org/abs/1703.06211 所要解决的问题 视觉识别的关键挑战是如何在对象 ...
- Deformable Convolution 可变形卷积
可变形卷积概念出自2017年论文:Deformable Convolutional Networks 顾名思义,可变形卷积的是相对于标准卷积的概念而来. (a) 一个经典的 3×33 \tim ...
- RepPoints(本质是可变形卷积DCN)再理解
虽然在之前学习过RepPoints这个网络,但当时理解较为浅显,现在再看论文和一些博客解释,感觉又有了新的收获. RepPoints是一种anchor-free网络,说的是使用具有一组代表性的点来表示 ...
- 更灵活、有个性的卷积——可变形卷积(Deformable Conv)
作者简介 CW,广东深圳人,毕业于中山大学(SYSU)数据科学与计算机学院,毕业后就业于腾讯计算机系统有限公司技术工程与事业群(TEG)从事Devops工作,期间在AI LAB实习过,实操过道路交通元 ...
- Deformable Convolutional可变形卷积回顾
点击上方"AI公园",关注公众号,选择加"星标"或"置顶" 作者:Sik-Ho Tsang 编译:ronghuaiyang 导读 使用可变形 ...
- 可变形卷积(Deformable Convolution)
可变形卷积 前言: 一.可变形卷积 1.原文摘要(Abstract) 2.可变形卷积 前言: 之前分了两次将深度学习中常用的各种卷积操作进行了汇总介绍,具体包括标准2D卷积.1×1卷积.转置卷积.膨胀 ...
- 可变形卷积(DCN)
ICCV 2017的一篇文章.论文地址:https://openaccess.thecvf.com/content_ICCV_2017/papers/Dai_Deformable_Convolutio ...
- 可变形卷积网络--Deformable Convolutional Networks
https://arxiv.org/abs/1703.06211 Microsoft Research Asia Code coming soon 本文可以看做是对 Spatial Transform ...
最新文章
- jvisualvm安装Visual GC插件
- jquery检索name_jquery怎么获取name属性值?
- 327 区间和的个数
- JSX详解React的事件绑定事件参数的传递
- 《软件项目管理(第二版)》第 10 章——项目收尾 重点部分总结
- 拳王虚拟项目公社:月入16000+的虚拟商品教程,虚拟项目全自动化的升级玩法拆解
- 鸿蒙手机测试报名,鸿蒙2.0报名下载-鸿蒙2.0申请公测报名入口 v1.0-优盘手机站...
- python菜鸟教程100例-菜鸟教程python
- charles(青花瓷)抓包配置mac ios版,详细好用
- SPSS做Shapiro-Wilk正态分析
- 基于预测分析表法的语法分析程序
- 外卖行业现状分析_2020年中国外卖行业市场现状与发展前景分析
- 【科研分享】推荐系统SCI顶会及顶级期刊 更新于2022-07-13
- zibll子比主题6.7用户徽章功能详解及配置教程[V6.7新功能]
- 最值得用的五款 chrome 插件 Vimium momentum The Great Suspender等 附下载地址。
- Integer 十六进制
- 建议收藏:不能不刷的100道数字IC笔/面试题!
- 版本 3.1(最终版)
- 最小二乘法直线拟合、圆拟合
- 电脑内存不足怎么处理
热门文章
- 支付宝小额免密码支付
- CY7C68013A EEPROM烧写
- solor mysql_solr7.4.0+mysql+solrj(简而优美)
- 各种加密算法的速度对比
- 【文献阅读】ShEF: Shielded Enclaves for Cloud FPGAs
- java宠物管理系统类图,阅读下列说明、图以及Java程序。 [说明] 某订单管理系统的部分UML类图如下图所示。 上图中,Product...
- 一键安装部署SSL(https)——腾讯云服务器提供
- 【星海出品】数据库原理
- 基于采用哈代-温伯格均衡和交叉指数的随机交配的进化配接算法(EMA)(Matlab代码实现)
- 软件领域的作家、导师兼咨询师杰里·温伯格去世