可变卷积原理总结

简介: 可变卷积原理总结

1 背景

传统的CNN存在固定几何形状的缺陷: 卷积单元在固定位置对输入特征图进行采样池化层以固定比率降低空间分辨率;一个ROI(感兴趣区域)池化层将一个ROI分割成固定的空间单元;缺乏处理几何变换的内部机制等。

上述缺陷会引起下列问题

  1. 1. 同一CNN层中所有激活单元的感受野大小是相同的,这对于在空间位置上编码语义的高级CNN层是不需要的
  2. 2. 对于具有精细定位的视觉识别的实际问题,不同的位置对象可能具有不同尺度或形状。因此,固定位置进行采样很难提取完整的对象特征。尺度或感受野大小的自适应确定是可取的。
  3. 为了解决上面的问题,提出了可变卷积,在文本检测DBNet等文章中使用。

e15e9b85879a4b84af64ab48d92104fe.png上图左侧是传统的CNN提取特征,由于固定位置进行下采样,很难将羊的位置全部覆盖进行下采样,即没有完整提取羊的特征。

右侧是可形变卷积,由于卷积的形状自适应,进行的下采样卷积核形状不定,可以覆盖整个羊,从而提取到完整羊的特征。

2 可变卷积 DCN1

269d061fc8c34fd99f2b883edd9b57f3.png

其中图(a)是传统CNN,(b)©(d)是可变形卷积。

2.1 传统卷积

假设图(a)中虚线框是一个特征图F,9个绿色点构成了一个卷积核,那么该点的值应该是:

3f26745a87554cbc8564bf93a9162516.png

其中是卷积核在位置i的值,而(x,y)是卷积核该位置对应图像中一点的坐标。

2.2 可变卷积

可变卷积的计算与传统CNN的类似,只是多了一个偏移量

56017c4f94e64391ac80b3d603985901.png

该偏移量使得参与计算的点发生变化。如图(b)中,卷积核遍历到了9个绿色点的位置,但是参与计算的是通过9个绿色点和偏移量得到的蓝色点。相当于在控制卷积核的形状。

那么偏移量是如何生成的呢

将输入特征图通过一个卷积核,输出为大小为原特征图大小,out_channlel为2,代表x和y方向山的偏移量。然后提取ROI区域得到卷积核上在该次采样时的偏移量,如下图所示:

356fd2eb397148049a153ce5f1816c68.png

了解上面的东西后,再总结一下DCN 1的过程

c4882e1c42484f4dae2c3d8d79984a5c.png

本质上,我们利用的卷积核还是按照传统CNN一样遍历。但是遍历到某个位置后,由于偏量,我的结果是另外位置和卷积核参数的计算结果。

如上图,我们卷积核遍历到了绿色的位置。但是偏量使得我们真正参与计算的是蓝色的点。

3 可变卷积 DCN 2

DCN 2在DCN 1的基础上添加了一个采样点权重

484ce141d0c24113bf7d45cb7d2b50c8.png这个采样点的区域我们不感兴趣,则把权重学习为0即可。

4 参考文章

https://paddlepedia.readthedocs.io/en/latest/tutorials/CNN/convolution_operator/Deformable_Convolution.html


相关文章
|
机器学习/深度学习
普通卷积、分组卷积和深度分离卷积概念以及参数量计算
普通卷积、分组卷积和深度分离卷积概念以及参数量计算
980 0
普通卷积、分组卷积和深度分离卷积概念以及参数量计算
|
2天前
|
数据可视化
R语言进行数据结构化转换:Box-Cox变换、“凸规则”变换方法
R语言进行数据结构化转换:Box-Cox变换、“凸规则”变换方法
|
2月前
|
机器学习/深度学习 编解码 监控
YOLOv5改进 | 卷积篇 | SPD-Conv空间深度转换卷积(高效空间编码技术)
YOLOv5改进 | 卷积篇 | SPD-Conv空间深度转换卷积(高效空间编码技术)
117 0
|
10月前
|
机器学习/深度学习 PyTorch 算法框架/工具
【PyTorch】什么时候使用数组形式创建多个卷积层
【PyTorch】什么时候使用数组形式创建多个卷积层
61 0
|
11月前
|
机器学习/深度学习 存储 编解码
深度学习基础入门篇[9.3]:卷积算子:空洞卷积、分组卷积、可分离卷积、可变性卷积等详细讲解以及应用场景和应用实例剖析
深度学习基础入门篇[9.3]:卷积算子:空洞卷积、分组卷积、可分离卷积、可变性卷积等详细讲解以及应用场景和应用实例剖析
132 0
|
存储 Java 数据安全/隐私保护
java实现稀疏数组
稀疏数组是一种为了节约存储空间而产生的数据结构,本质上稀疏数组就是一个普通的二维数组。其实在真实的应用中,稀疏数组的用武之地很少,起码笔者工作了几年,是没有发现稀疏数组的用武之地的(感觉游戏领域可能会用到),但是作为数据结构的一种,我们学习他还是可以得到一些启发的,比如使用时间换空间的思想,反过来使用空间换时间不也是可以的吗。所以学习他不一定非要用,但是肯定会对自己的思维有帮助。
71 0
java实现稀疏数组
|
机器学习/深度学习 存储 运维
基于可变自动编码器(VAE)的生成建模,理解可变自动编码器背后的原理
基于可变自动编码器(VAE)的生成建模,理解可变自动编码器背后的原理
297 0
基于可变自动编码器(VAE)的生成建模,理解可变自动编码器背后的原理
|
机器学习/深度学习 编解码 计算机视觉
可变形卷积在视频学习中的应用:如何利用带有稀疏标记数据的视频帧
可变形卷积在视频学习中的应用:如何利用带有稀疏标记数据的视频帧
143 0
可变形卷积在视频学习中的应用:如何利用带有稀疏标记数据的视频帧
|
机器学习/深度学习 数据可视化 数据处理
1D卷积入门:一维卷积是如何处理数字信号的
1D卷积入门:一维卷积是如何处理数字信号的
466 0
1D卷积入门:一维卷积是如何处理数字信号的
|
Java
矩阵重叠(Java实现)
矩阵重叠(Java实现)
98 1
矩阵重叠(Java实现)