热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

第三十六课.可变形卷积

目录背景DCN实例效果DCNv2DCN范式关于api内部操作的细节Reference背景视觉识别的一个关键挑战是如何适应物体尺度、姿态、视点和零件变形的几何变化或模型几何变换。但对于视觉识别的传统CN

目录

  • 背景
  • DCN
  • 实例效果
  • DCNv2
  • DCN范式
    • 关于api内部操作的细节
  • Reference
背景

视觉识别的一个关键挑战是如何适应物体尺度、姿态、视点和零件变形的几何变化或模型几何变换。

但对于视觉识别的传统CNN模块,不可避免的都存在固定几何结构的缺陷:卷积单元在固定位置对输入特征图进行采样;池化层以固定比率降低空间分辨率;一个ROI(感兴趣区域)池化层将一个ROI分割成固定的空间单元;缺乏处理几何变换的内部机制等。

这些将会引起一些明显的问题。例如,同一CNN层中所有激活单元的感受野大小是相同的,这对于在空间位置上编码语义的高级CNN层是不需要的。而且,对于具有精细定位的视觉识别(例如,使用全卷积网络的语义分割)的实际问题,由于不同的位置可能对应于具有不同尺度或变形的对象,因此,尺度或感受野大小的自适应确定是可取的

为了解决以上所提到的局限性,一个自然地想法就诞生了:卷积核自适应调整自身的形状。这就产生了可变形卷积的方法。

DCN

可变形卷积顾名思义就是卷积的位置是可变形的,并非在传统的N NN个采样点的网格上做卷积,这样的好处就是更准确地提取到我们想要的特征(传统的卷积仅仅只能提取到矩形框的特征),通过一张图我们可以更直观地了解:
fig1
在上面这张图里面,左边传统的卷积显然没有提取到完整绵羊的特征,而右边的可变形卷积则提取到了完整的不规则绵羊的特征。

那可变卷积实际上是怎么做的呢?其实就是在每一个卷积采样点加上了一个偏移量,如下图所示:
fig2
a 所示的正常卷积规律的采样 9 个点(绿点);b,c,d 为可变形卷积,在正常的采样坐标上加上一个位移量(蓝色箭头);其中 c和d 作为 b 的特殊情况,展示了可变形卷积可以处理尺度变换,比例变换和旋转变换等特殊情况。

普通的卷积,以3 × 3 3\times 33×3卷积为例,对于每个输出y ( p 0 ) , p 0 = ( 0 , 0 ) y(p_{0}),p_{0}=(0,0)y(p0),p0=(0,0),都要从x xx上面采样9个位置,这9个位置都在中心位置x ( p 0 ) x(p_{0})x(p0)向四周扩散,( − 1 , − 1 ) (-1,-1)(1,1)代表x ( p 0 ) x(p_{0})x(p0)的左上角,( 1 , 1 ) (1,1)(1,1)代表x ( p 0 ) x(p_{0})x(p0)的右下角。采样区域包括:R = { ( − 1 , − 1 ) , ( − 1 , 0 ) , . . . , ( 1 , 1 ) } R=\left\{(-1,-1),(-1,0),...,(1,1)\right\}R={(1,1),(1,0),...,(1,1)}所以传统卷积输出的就是:y ( p 0 ) = ∑ p n ∈ R w ( p n ) ⋅ x ( p 0 + p n ) y(p_{0})=\sum_{p_{n}\in R}w(p_{n})\cdot x(p_{0}+p_{n})y(p0)=pnRw(pn)x(p0+pn)其中,p n p_{n}pn是采样网格中的第n nn个点,w ( p n ) w(p_{n})w(pn)为对应的卷积核权重系数。

正如上面阐述的可变形卷积,就是在传统的卷积操作上加入了一个偏移量Δ p n \Delta p_{n}Δpn,正是这个偏移量才让卷积变形为不规则的卷积,这里要注意这个偏移量可以是小数,所以下面的式子的特征值需要通过双线性插值的方法来计算。y ( p 0 ) = ∑ p n ∈ R w ( p n ) ⋅ x ( p 0 + p n + Δ p n ) y(p_{0})=\sum_{p_{n}\in R}w(p_{n})\cdot x(p_{0}+p_{n}+\Delta p_{n})y(p0)=pnRw(pn)x(p0+pn+Δpn)这个偏移量的计算如下:
fig3
对于输入的input feature map,假设原来的卷积操作是3 × 3 3×33×3的,那么为了学习偏移量offset,我们定义另外一个3 × 3 3×33×3的卷积层(图中上面的那层),输出其实就是只用常规卷积输出的 output feature map大小,但是channel数等于2 ∗ 3 2 2*3^{2}232(分别表示x,y方向的偏移,3 33为卷积核的size)。

实例效果

fig4
可以从上图看到,可以看到当绿色点在目标上时,红色点所在区域也集中在目标位置,并且基本能够覆盖不同尺寸的目标,因此经过可变形卷积,我们可以更好地提取出感兴趣物体的完整特征,效果是非常不错的。

DCN听起来不错,但其实也有问题:我们的可变形卷积有可能引入了无用的上下文(区域)来干扰我们的特征提取,这显然会降低算法的表现。通过上图的对比实验结果(多边形区域框,第三行)我们也可以看到DCN会引入无关信息,比如墙面引入了过多的猫的信息。

也许我们应该放弃使用卷积学习偏移量,而考虑使用自注意力机制去学习更全局的偏移量以去除无关上下文信息的干扰。

DCNv2

为了解决无关区域的问题,在DCNv2中,引入权重系数Δ m k ∈ [ 0 , 1 ] \Delta m_{k}\in [0,1]Δmk[0,1],如果这个采样点的区域不感兴趣,权重系数的值会很小,DCNv2为:y ( p 0 ) = ∑ p n ∈ R w ( p n ) ⋅ x ( p 0 + p n + Δ p n ) ⋅ Δ m k y(p_{0})=\sum_{p_{n}\in R}w(p_{n})\cdot x(p_{0}+p_{n}+\Delta p_{n})\cdot\Delta m_{k}y(p0)=pnRw(pn)x(p0+pn+Δpn)Δmk同样的,Δ m k \Delta m_{k}Δmk也是由单独的卷积层输出的。

DCN范式

DCN期望的规范操作接口可以按照paddle api来定义:

paddle.vision.ops.deform_conv2d(*x*, *offset*, *weight*,
*bias=None*, *stride=1*, *padding=0*, *dilation=1*,
*deformable_groups=1*, *groups=1*, *mask=None*, *name=None*);

  • 参数x为输入:形状为( N , C i n , H i n , W i n ) (N,C_{in},H_{in},W_{in})(N,Cin,Hin,Win)
  • offset为可变形卷积的输入坐标偏移:形状为( N , 2 ∗ H f ∗ W f , H o u t , W o u t ) (N,2*H_{f}*W_{f},H_{out},W_{out})(N,2HfWf,Hout,Wout)
  • weight为卷积核参数:形状为( C o u t , C i n , H f , W f ) (C_{out},C_{in},H_{f},W_{f})(Cout,Cin,Hf,Wf)
  • mask为可变形卷积的输入掩码:形状为( N , H f ∗ W f , H o u t , W o u t ) (N,H_{f}*W_{f},H_{out},W_{out})(N,HfWf,Hout,Wout),当使用DCN v1时,mask设置为None

输出张量的形状为( N , C o u t , H o u t , W o u t ) (N,C_{out},H_{out},W_{out})(N,Cout,Hout,Wout)

其中:H o u t = ( H i n + 2 ∗ p a d d i n g s [ 0 ] − ( d i l a t i o n s [ 0 ] ∗ ( H f − 1 ) + 1 ) ) s t r i d e s [ 0 ] + 1 H_{out}=\frac{(H_{in}+2*paddings[0]-(dilations[0]*(H_{f}-1)+1))}{strides[0]}+1Hout=strides[0](Hin+2paddings[0](dilations[0](Hf1)+1))+1W o u t = ( W i n + 2 ∗ p a d d i n g s [ 1 ] − ( d i l a t i o n s [ 1 ] ∗ ( W f − 1 ) + 1 ) ) s t r i d e s [ 1 ] + 1 W_{out}=\frac{(W_{in}+2*paddings[1]-(dilations[1]*(W_{f}-1)+1))}{strides[1]}+1Wout=strides[1](Win+2paddings[1](dilations[1](Wf1)+1))+1

关于api内部操作的细节

每个input图片数据对应的输出feature map中的每个pixel位置都有一个大小为2 ∗ H f ∗ W f 2*H_{f}*W_{f}2HfWf的偏移项和H f ∗ W f H_{f}*W_{f}HfWf的掩膜。这样的大小设置是因为在每个输出pixel位置上我们有H f ∗ W f H_{f}*W_{f}HfWf个采样点,每个点都有对应的两个偏移方向和一个重要程度。前者就对应了我们的偏移项,后者就对应了掩膜项。

Reference

[1] Dai J , Qi H , Xiong Y , et al. Deformable Convolutional Networks[J]. IEEE, 2017.

[2] Zhu X , Hu H , Lin S , et al. Deformable ConvNets V2: More Deformable, Better Results[C]// 2019 IEEE/CVF Conference on Computer Vision and Pattern Recognition (CVPR). IEEE, 2019.


版权声明:本文为qq_40943760原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/qq_40943760/article/details/124984314
推荐阅读
  • 本文深入探讨了 MXOTDLL.dll 在 C# 环境中的应用与优化策略。针对近期公司从某生物技术供应商采购的指纹识别设备,该设备提供的 DLL 文件是用 C 语言编写的。为了更好地集成到现有的 C# 系统中,我们对原生的 C 语言 DLL 进行了封装,并利用 C# 的互操作性功能实现了高效调用。此外,文章还详细分析了在实际应用中可能遇到的性能瓶颈,并提出了一系列优化措施,以确保系统的稳定性和高效运行。 ... [详细]
  • PHP中元素的计量单位是什么? ... [详细]
  • 在 HihoCoder 1505 中,题目要求从给定的 n 个数中选取两对数,使这两对数的和相等。如果直接对所有可能的组合进行遍历,时间复杂度将达到 O(n^4),因此需要考虑优化选择过程。通过使用哈希表或其他高效的数据结构,可以显著降低时间复杂度,从而提高算法的效率。具体实现中,可以通过预处理和存储中间结果来减少重复计算,进一步提升性能。 ... [详细]
  • 深入解析 Django 中用户模型的自定义方法与技巧 ... [详细]
  • 本文详细探讨了Java集合框架的使用方法及其性能特点。首先,通过关系图展示了集合接口之间的层次结构,如`Collection`接口作为对象集合的基础,其下分为`List`、`Set`和`Queue`等子接口。其中,`List`接口支持按插入顺序保存元素且允许重复,而`Set`接口则确保元素唯一性。此外,文章还深入分析了不同集合类在实际应用中的性能表现,为开发者选择合适的集合类型提供了参考依据。 ... [详细]
  • 本文深入探讨了算法进阶中的多个核心主题,包括最大似然估计在统计建模中的应用、赔率计算在风险评估中的重要性、FuzzyWuzzy库在字符串相似度匹配中的高效使用、主成分分析(PCA)在数据降维与特征提取中的关键作用,以及One-Hot编码在处理分类变量时的技术细节。通过这些内容,读者将获得对算法应用的全面理解。 ... [详细]
  • Ceph API微服务实现RBD块设备的高效创建与安全删除
    本文旨在实现Ceph块存储中RBD块设备的高效创建与安全删除功能。开发环境为CentOS 7,使用 IntelliJ IDEA 进行开发。首先介绍了 librbd 的基本概念及其在 Ceph 中的作用,随后详细描述了项目 Gradle 配置的优化过程,确保了开发环境的稳定性和兼容性。通过这一系列步骤,我们成功实现了 RBD 块设备的快速创建与安全删除,提升了系统的整体性能和可靠性。 ... [详细]
  • 在稀疏直接法视觉里程计中,通过优化特征点并采用基于光度误差最小化的灰度图像线性插值技术,提高了定位精度。该方法通过对空间点的非齐次和齐次表示进行处理,利用RGB-D传感器获取的3D坐标信息,在两帧图像之间实现精确匹配,有效减少了光度误差,提升了系统的鲁棒性和稳定性。 ... [详细]
  • 题目描述:小K不幸被LL邪教洗脑,洗脑程度之深使他决定彻底脱离这个邪教。在最终离开前,他计划再进行一次亚瑟王游戏。作为最后一战,他希望这次游戏能够尽善尽美。众所周知,亚瑟王游戏的结果很大程度上取决于运气,但通过合理的策略和算法优化,可以提高获胜的概率。本文将详细解析洛谷P3239 [HNOI2015] 亚瑟王问题,并提供具体的算法实现方法,帮助读者更好地理解和应用相关技术。 ... [详细]
  • 在高清节目的高比特率传输过程中,使用外接USB硬盘进行时间平移(timeshift)时,出现了性能不足和流数据丢失的问题。通过深入研究,我们发现通过对图像组(GOP)和图像头(I-frame)的精确定位技术进行优化,可以显著提升系统的性能和稳定性。本研究提出了改进的图像组与图像头定位算法,有效减少了数据丢失,提高了流媒体传输的效率和质量。 ... [详细]
  • 结语 | 《探索二进制世界:软件安全与逆向分析》读书笔记:深入理解二进制代码的逆向工程方法
    结语 | 《探索二进制世界:软件安全与逆向分析》读书笔记:深入理解二进制代码的逆向工程方法 ... [详细]
  • 微信支付授权目录配置详解及操作步骤
    在使用微信支付时,若通过WeixinJSBridge.invoke方法调用支付功能,可能会遇到“当前页面URL未注册”的错误提示,导致get_brand_wcpay_request:fail调用微信JSAPI支付失败。为解决这一问题,需要正确配置微信支付授权目录,确保支付页面的URL已成功注册。本文将详细介绍微信支付授权目录的配置步骤和注意事项,帮助开发者顺利完成支付功能的集成与调试。 ... [详细]
  • Spring框架入门指南:专为新手打造的详细学习笔记
    Spring框架是Java Web开发中广泛应用的轻量级应用框架,以其卓越的功能和出色的性能赢得了广大开发者的青睐。本文为初学者提供了详尽的学习指南,涵盖基础概念、核心组件及实际应用案例,帮助新手快速掌握Spring框架的核心技术与实践技巧。 ... [详细]
  • 【前端开发】深入探讨 RequireJS 与性能优化策略
    随着前端技术的迅速发展,RequireJS虽然不再像以往那样吸引关注,但其在模块化加载方面的优势仍然值得深入探讨。本文将详细介绍RequireJS的基本概念及其作为模块加载工具的核心功能,并重点分析其性能优化策略,帮助开发者更好地理解和应用这一工具,提升前端项目的加载速度和整体性能。 ... [详细]
  • 利用Swiss数据集进行多元线性回归分析,首先通过散点图矩阵(pairs plot)初步探索各变量之间的关系。接着,绘制残差图以评估模型的拟合效果和假设条件的合理性,进一步诊断和验证模型的有效性。通过这些图形工具,可以更深入地理解模型的性能和潜在问题。 ... [详细]
author-avatar
郝蕾雅老_206
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有