先声明这篇只是快速的复习用, 用词比较自我加随性,多见谅
代码解说的地方很多参考了这个连结

首先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 可变形卷积的理解相关推荐

  1. 深度学习之 DCN(Deformable Convolution)-可变形卷积

    Paper link: http://openaccess.thecvf.com/content_ICCV_2017/papers/Dai_Deformable_Convolutional_Netwo ...

  2. 可变形卷积神经网络 | Deformable Network

    论文标题:Deformable Convolutional Networks 论文链接:https://arxiv.org/abs/1703.06211 所要解决的问题 视觉识别的关键挑战是如何在对象 ...

  3. Deformable Convolution 可变形卷积

      可变形卷积概念出自2017年论文:Deformable Convolutional Networks   顾名思义,可变形卷积的是相对于标准卷积的概念而来. (a) 一个经典的 3×33 \tim ...

  4. RepPoints(本质是可变形卷积DCN)再理解

    虽然在之前学习过RepPoints这个网络,但当时理解较为浅显,现在再看论文和一些博客解释,感觉又有了新的收获. RepPoints是一种anchor-free网络,说的是使用具有一组代表性的点来表示 ...

  5. 更灵活、有个性的卷积——可变形卷积(Deformable Conv)

    作者简介 CW,广东深圳人,毕业于中山大学(SYSU)数据科学与计算机学院,毕业后就业于腾讯计算机系统有限公司技术工程与事业群(TEG)从事Devops工作,期间在AI LAB实习过,实操过道路交通元 ...

  6. Deformable Convolutional可变形卷积回顾

    点击上方"AI公园",关注公众号,选择加"星标"或"置顶" 作者:Sik-Ho Tsang 编译:ronghuaiyang 导读 使用可变形 ...

  7. 可变形卷积(Deformable Convolution)

    可变形卷积 前言: 一.可变形卷积 1.原文摘要(Abstract) 2.可变形卷积 前言: 之前分了两次将深度学习中常用的各种卷积操作进行了汇总介绍,具体包括标准2D卷积.1×1卷积.转置卷积.膨胀 ...

  8. 可变形卷积(DCN)

    ICCV 2017的一篇文章.论文地址:https://openaccess.thecvf.com/content_ICCV_2017/papers/Dai_Deformable_Convolutio ...

  9. 可变形卷积网络--Deformable Convolutional Networks

    https://arxiv.org/abs/1703.06211 Microsoft Research Asia Code coming soon 本文可以看做是对 Spatial Transform ...

最新文章

  1. jvisualvm安装Visual GC插件
  2. jquery检索name_jquery怎么获取name属性值?
  3. 327 区间和的个数
  4. JSX详解React的事件绑定事件参数的传递
  5. 《软件项目管理(第二版)》第 10 章——项目收尾 重点部分总结
  6. 拳王虚拟项目公社:月入16000+的虚拟商品教程,虚拟项目全自动化的升级玩法拆解
  7. 鸿蒙手机测试报名,鸿蒙2.0报名下载-鸿蒙2.0申请公测报名入口 v1.0-优盘手机站...
  8. python菜鸟教程100例-菜鸟教程python
  9. charles(青花瓷)抓包配置mac ios版,详细好用
  10. SPSS做Shapiro-Wilk正态分析
  11. 基于预测分析表法的语法分析程序
  12. 外卖行业现状分析_2020年中国外卖行业市场现状与发展前景分析
  13. 【科研分享】推荐系统SCI顶会及顶级期刊 更新于2022-07-13
  14. zibll子比主题6.7用户徽章功能详解及配置教程[V6.7新功能]
  15. 最值得用的五款 chrome 插件 Vimium momentum The Great Suspender等 附下载地址。
  16. Integer 十六进制
  17. 建议收藏:不能不刷的100道数字IC笔/面试题!
  18. 版本 3.1(最终版)
  19. 最小二乘法直线拟合、圆拟合
  20. 电脑内存不足怎么处理

热门文章

  1. 支付宝小额免密码支付
  2. CY7C68013A EEPROM烧写
  3. solor mysql_solr7.4.0+mysql+solrj(简而优美)
  4. 各种加密算法的速度对比
  5. 【文献阅读】ShEF: Shielded Enclaves for Cloud FPGAs
  6. java宠物管理系统类图,阅读下列说明、图以及Java程序。 [说明] 某订单管理系统的部分UML类图如下图所示。 上图中,Product...
  7. 一键安装部署SSL(https)——腾讯云服务器提供
  8. 【星海出品】数据库原理
  9. 基于采用哈代-温伯格均衡和交叉指数的随机交配的进化配接算法(EMA)(Matlab代码实现)
  10. 软件领域的作家、导师兼咨询师杰里·温伯格去世