【立体匹配论文阅读】AANet: Adaptive Aggregation Network for Efficient Stereo Matching

news2024/9/24 17:12:47

Authors: Haofei Xu, Juyong Zhang
Link: https://arxiv.org/abs/2004.09548
Years: 2020

Credit

请添加图片描述

Novelty and Question set up

主流的立体匹配模型的代价聚合操作主要用了3D卷积,这部分操作的算力和内存消耗过大,因此作者提出一种新的模型AANet,旨在摒弃所有3D卷积操作。具体来说,作者提出多分辨率代价体构建,用基于稀疏采样点的尺度内聚合模块解决视差图的edge-fattening问题,用跨尺度聚合模块处理弱纹理问题。

Solutions and Details

  1. 总体架构
    请添加图片描述

    与流行的端到端立体匹配方法一样,AANet同样包含四部分:特征提取、构建代价体、代价聚合和输出视差图。在提取特征部分,会输出multi-scale feature map,分别对应不同stage的特征输出,然后利用这不同尺寸的特征图分别构建各自尺寸的代价体。

    作者在这构建的是相关性(correlation)代价体,对第 s s s个stage的左视图特征 F l s F^{s}_{l} Fls和右视图特征 F r s F^{s}_{r} Frs,计算视差 d d d的相关度,计算方式如下

    C s ( d , h , w ) = 1 N ⟨ F l s ( h , w ) , F r s ( h , w − d ) ⟩ C^{s}(d,h,w) = \frac{1}{N}\langle F^{s}_{l}(h,w),F^{s}_{r}(h,w-d)\rangle Cs(d,h,w)=N1Fls(h,w),Frs(h,wd)⟩

    计算出来的代价体是三维的,因为特征通道维度上已通过内积操作进行加和而消除掉了。

    随后作者设计尺度内聚合模块(ISA)和跨尺度聚合模块(CSA)对代价体进行代价聚合,并输出对应尺度的视差图。

  2. 尺度内聚合模块

    作者关注到一个常见的问题,在不连续视差中容易出现edge-fattening问题,这个问题本质是常规卷积窗口在边缘时容易聚合了较大视差邻域的代价,因此提出一个自适应的弹性稀疏采样方案,即对特定的视差位置,与它语义上关联度更高的位置进行聚合,整体思路与deformable convolution(v2)一致,所以直接采用他们的实现

    C ~ ( d , p ) = ∑ k = 1 K 2 w k ⋅ C ( d , p + p k + Δ p k ) ⋅ m k \tilde{C}(d,p)=\sum_{k=1}^{K^{2}}{w_k}\cdot{C(d,p+p_{k}+\Delta{p_k})}\cdot{m_k} C~(d,p)=k=1K2wkC(d,p+pk+Δpk)mk

    与原始deformable convolution稍有不同的是, Δ p k \Delta{p_k} Δpk m k m_k mk是对所有channel共享的,作者的实现是将视差等分成 G G G组,每一组使用单独的一套 Δ p k \Delta{p_k} Δpk m k m_k mk

    一个ISA模块即由3个conv和一个残差结构组合而成,类似bottleneck的设计,三层分别是 1 × 1 , 3 × 3 , 1 × 1 {1}\times{1},{3}\times{3},{1}\times{1} 1×1,3×3,1×1卷积,而其中的 3 × 3 {3}\times{3} 3×3卷积即是deformable convolution,但与bottleneck不一样的是作者这里三层采用的一样的channel数,没有压缩通道和计算量。

  3. 跨尺度聚合模块

    而立体匹配的另一个问题,弱纹理匹配问题,比较容易在粗颗粒度的代价体中找到纹理信息,因此作者设计了一个跨尺度的聚合模块来解决此类问题。尺度 s s s的聚合结果可以表示为

    C ^ s = ∑ k = 1 S f k ( C ~ k ) , s = 1 , 2 , . . . , S \hat{C}^{s}=\sum_{k=1}^{S}{f_k(\tilde{C}^{k})},s=1,2,...,S C^s=k=1Sfk(C~k),s=1,2,...,S

    这个设计的灵感来源HRNet的跨尺度特征聚合,因此函数 f k f_k fk定义为

    f k = { I ,k=s ( s − k ) c o n v s 3 × 3 , s t r i d e 2 ,k<s u p s a m p l i n g ⊕ c o n v 1 × 1 ,k>s \begin{equation} f_k= \begin{cases} \mathcal{I}& \text{,k=s} \\ (s-k)convs_{3\times{3},stride2}& \text{,k<s} \\upsampling{\oplus}conv_{1\times{1}}& \text{,k>s} \end{cases} \end{equation} fk= I(sk)convs3×3,stride2upsamplingconv1×1,k=s,k<s,k>s

    虽然与HRNet结构相似,但设计的初衷和作用是不同的,AANet主要为了聚合不同尺度下代价体蕴含的几何信息,而HRNet是为了学习更丰富的特征。

  4. AANet设计和损失函数设计

    上述的ISA+CSA模块组成最终的AAModule(Adaptive Aggregation Module),在AANet中,作者采用了6个AAModule进行代价聚合,头3个用了普通2d卷积,后3个才用了deformable convolution。

    在特征提取部分,作者采用类似ResNet的结构,将其中6个普通2d替换成deformable convolution。然后利用FPN结构分别提取出1/3x,1/6x,1/12x三个分辨率的特征图。最后利用StereoDRNet提出的refine模块来将1/3x视差图refine到原始输入尺寸。视差图的输出依然是用了softargmin来实现。

    KITTI数据集提供的ground truth是稀疏深度,因此作者利用GA-Net的估计视差图作为软标签 D p s e u d o ( ⋅ ) D_{pseudo}(\cdot) Dpseudo()。对每个分辨率输出的视差图,首先双线性插值到原始尺寸,然后计算损失

    L i = ∑ p V ( p ) ⋅ L ( D p r e d i ( p ) , D g t ( p ) ) + ( 1 − V ( p ) ) ⋅ L ( D p r e d i ( p ) , D p s e u d o ( p ) ) L_i =\sum_{p}{V(p)\cdot{\mathcal{L}(D^{i}_{pred}(p),D_{gt}(p))}} + (1-V(p))\cdot{\mathcal{L}(D^{i}_{pred}(p), D_{pseudo}{(p)})} Li=pV(p)L(Dpredi(p),Dgt(p))+(1V(p))L(Dpredi(p),Dpseudo(p))

    V ( p ) V(p) V(p)表示像素位置 p p p上是否真实ground truth, L \mathcal{L} L表示smooth L1。整个网络的损失则是各分辨率之间的加权平均数

    L = ∑ i λ i ⋅ L i L = \sum_i{\lambda_{i}}\cdot{L_i} L=iλiLi

Results

  • 作者在Sceneflow和KITTI-2012/2015数据集上进行验证和对比实验

  • 首先对比两个提出的主要聚合模块的作用,可以看出,ISA和CSA都用上效果是最好的
    请添加图片描述

  • 可视化证明ISA的自适应能力:在边界处时会选择临近但语义相似位置的特征,而在弱纹理区域,则倾向于搜索范围更广的区域
    请添加图片描述

  • 在各个使用3d卷积进行代价聚合的模型上使用AAModule进行替换,精度-速度均衡会变得更好
    请添加图片描述

  • 与其他SOTA在Sceneflow上进行比较,精度-速度均衡基本上能达到最佳,AANet*是网络深度更深的改进版本
    请添加图片描述

  • 在KITTI-2012/2015上与其他SOTA比较精度,依然能达到较好的水平
    请添加图片描述

Thoughts

  • 作者提出的AAModule包含了尺度内和跨尺度聚合模块,针对对应的问题进行特定优化,相对比较直观
  • 其中ISA使用了deformable convolution,设计比较巧妙,但在实际落地,尤其是端侧上,deformable convolution可能对硬件不太友好
  • 作者使用相关性构建代价体而非特征拼接,因此可以直接使用2d卷积进行代价聚合,在参数量和计算量上都有一定优势,但引入了deformable convolution则一定程度上抵消了这个优势
  • CSA模块仿照HRNet的操作设计也很巧妙,但同样会面临计算并行度问题

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C#项目--GridControl数据绑定及数据引入

系列文章 C#项目–业务单据号生成器&#xff08;定义规则、自动编号、流水号&#xff09; 本文链接&#xff1a;https://blog.csdn.net/youcheng_ge/article/details/129129787 C#项目–开始日期结束日期范围计算&#xff08;上周、本周、明年、前年等&#xff09; 本文链接&…

KUKA机器人修改机器人名称和IP地址的具体方法示例

KUKA机器人修改机器人名称和IP地址的具体方法示例 修改机器人名称 如下图所示,首先切换用户组到管理员,输入默认密码:kuka, 如下图所示,点击菜单键—投入运行—机器人数据, 如下图所示,此时可以看到机器人的名称为rrr445, 如下图所示,修改之后,点击左侧的“”…

C#项目--打印模板解决方案(自定义模板、条形码、二维码、图片)

系列文章 C#项目–业务单据号生成器&#xff08;定义规则、自动编号、流水号&#xff09; 本文链接&#xff1a;https://blog.csdn.net/youcheng_ge/article/details/129129787 C#项目–开始日期结束日期范围计算&#xff08;上周、本周、明年、前年等&#xff09; 本文链接&…

win11安装ubuntu子系统与桌面 填坑记录

win11安装ubuntu子系统win11可以直接从应用市场安装ubuntu子系统。详细安装步骤见参考资料。这里列出一些博主遇到的问题。填坑之路从应用市场获取ubuntu系统时会报0x80240438或者0x80072efd等错误。网络连接有问题&#xff0c;关闭windows防火墙再试&#xff0c;多试几遍安装u…

【刷题笔记】--二分-P2440 木材加工

题目&#xff1a; 思路&#xff1a; 先在所有树中找到最长的树&#xff0c;从 1 到 这个最长的树的长度 的所有数作为二分查找的值&#xff0c;让每棵树除这个值&#xff0c;表示可以切出几段出来&#xff0c;累加在一起得到s&#xff0c;s表示一共有几段。s与k比较&#xf…

windows如何安装两个版本的mysql的方法

Windows上安装两个版本的mysql 背景&#xff1a;在学习项目的时候&#xff0c;项目中使用mysql5.7的版本&#xff0c;而自己的windows系统中安装的是mysql8.0版本&#xff0c;在尝试将项目中的mysql5.7版本的代码更改到8.0版本后仍然报错&#xff0c;故尝试更改windows系统中的…

低代码有哪些典型应用场景?

低代码有哪些典型应用场景&#xff1f; 低代码是一种全新的应用开发方式&#xff0c;它通过可视化的拖拽式界面&#xff0c;将传统的繁琐代码编写转化为简单的拖拽操作&#xff0c;让非技术人员也能够快速地开发出应用程序。 随着数字化转型的不断加速&#xff0c;低代码平台…

1.webpack的基本使用

webpack是做工程化用的&#xff0c;并且可以对代码进行压缩(搞成min.js那样)&#xff0c;处理浏览器端JS兼容性&#xff0c;性能优化 vue-cli与webpack作用相同 目录 1 基本使用 1.1 引入场景 1.2 安装webpack 1.3 配置webpack 1.4 使用webpack 2 webpack.config.…

C++11:lambda表达式

文章目录1. 概念2. 语法3. 示例示例1示例2示例3示例44. 捕捉方式基本方式隐式和混合补充5. 传递lambda表达式示例6. 原理7. 内联属性1. 概念 lambda表达式实际上是一个匿名类的成员函数&#xff0c;该类由编译器为lambda创建&#xff0c;该函数被隐式地定义为内联。因此&#…

某智能驾驶企业:CACTER云网关为O365系统护航

01 客户背景 某智能驾驶企业是一家国际性的高科技创新型企业&#xff0c;在智能驾驶领域处于全球领先地位&#xff0c;专注于为广大客户提供个性化的智能驾驶解决方案&#xff0c;共建美好智能新时代。 使用产品&#xff1a;CACTER邮件安全云网关 02 痛点难点问题 根据Corema…

Hive---sqoop安装教程及sqoop操作

sqoop安装教程及sqoop操作 文章目录sqoop安装教程及sqoop操作上传安装包解压并更名添加jar包修改配置文件添加sqoop环境变量启动sqoop操作查看指定mysql服务器数据库中的表在hive中创建一个teacher表跟mysql的mysql50库中的teacher结构相同将mysql中mysql50库中的sc数据导出到h…

k8s学习之路 | k8s 工作负载 DaemonSet

文章目录1. DaemonSet 基础1.1 什么是 DS1.2 DS 的典型用法1.3 如何编写 DS 资源1.4 DS 示例文件1.5 DS Pod 是如何被调度的1.6 更新 DS1.7 DS 替代方案1.8 DS 工作负载字段描述2. DaemonSet 的使用2.1 每个节点运行一个2.2 DS 更新策略2.3 滚动更新2.4 OnDelete 更新2.6 更新回…

重新认识下网页水印

使用背景图图片 单独使用 css 实现&#xff0c;使用 backgroundImage&#xff0c;backgroundRepeat 将背景图片平铺到需要加水印的容器中即可。 如果希望实现旋转效果&#xff0c;可以借助伪元素&#xff0c;将背景样式放到伪元素中&#xff0c;旋转伪元素实现&#xff1a; &l…

CHAPTER 5 文件共享 - FTP

文件共享 - FTP1 FTP1.1 传输方式1. ASCII传输方式2. 二进制传输模式3. 两种传输方式的区别1.2 支持的模式1. 主动模式(PORT)2. 被动模式(PASV)3. 如何选择4. 为什么绝大部分互联网应用都是被动模式&#xff1f;1.3 搭建FTP服务器&#xff08;使用vsftpd&#xff09;1. 安装软件…

计算机中信息的表示和处理 整数和小数的二进制表示

信息的表示和处理整数进制字移位运算无符号数和有符号数加法运算小数定点表示IEEE 浮点表示规格化和非规格化舍入浮点运算现代计算机存储和处理的信息以二值信号表示&#xff0c;这些二进制数字称为位&#xff0c;为什么要用二进制来进行编码&#xff1f;因为二进制只有1和0两种…

信捷 XDH Ethercat A_STOP指令

本指令使运动中的轴进行减速停止/急停。最常见的情况是用来停止以指定速度运行的轴。只要在运动&#xff0c;都可以用本指令停止。上图中&#xff0c;在M150的上升沿&#xff0c;执行A_STOP指令。A_STOP HD150 D150 M151 K0HD150--输入参数起始地址&#xff0c;HD158--输入参数…

创宇猎幽APT流量监测系统获CSTC年度网络安全优秀案例

近日&#xff0c;由中国软件评测中心发起的“2022 年度网络安全和数据安全优秀案例评选”活动评选结果正式公布。在众多参与案例中&#xff0c;创宇猎幽APT流量监测系统&#xff08;NDR&#xff09;凭借出色的行业场景实践和出众的产品表现力脱颖而出&#xff0c;成功入选“202…

5、score diffusion model

DDIM中遇到的Score-based SDE这里采用表示神经网络的预测值&#xff0c;用表示。同时等价于DDPM回顾贝叶斯公式原始公式前向过程表示连乘反向过程由前向过程可知&#xff1a;所以&#xff1a;正态分布&#xff1a;重参数技巧&#xff1a;反向过程&#xff1a;优化目标&#xff…

ASP.NETCore学习资料

1.ASP.NETCore比ASP.NET更具优势的地方是什么&#xff1f; ASP.NET Core(ASP.NET Core 简介) ASP.NET Core 是一个跨平台的开源框架&#xff0c;用于在 Windows、macOS 或 Linux 上生成基于云的新式 Web 应用。 ASP.NET(ASP.NET 简介) ASP.NET 是一个成熟的框架&#xff0c;提…

Git学习笔记(七)——其他操作

一、自定义Git Git除了配置user.name 和user.email 还有很多可配置项。 &#xff08;1&#xff09;命令git config --global color.ui true 让Git显示颜色&#xff0c;会让命令输出看起来更醒目.Git 会适当显示不同的颜色。 $ git config --global color.ui true查看分支会有…