【立体匹配论文阅读】AANet: Adaptive Aggregation Network for Efficient Stereo Matching
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
-
总体架构

与流行的端到端立体匹配方法一样,AANet同样包含四部分:特征提取、构建代价体、代价聚合和输出视差图。在提取特征部分,会输出multi-scale feature map,分别对应不同stage的特征输出,然后利用这不同尺寸的特征图分别构建各自尺寸的代价体。
作者在这构建的是相关性(correlation)代价体,对第sss个stage的左视图特征FlsF^{s}_{l}Fls和右视图特征FrsF^{s}_{r}Frs,计算视差ddd的相关度,计算方式如下
Cs(d,h,w)=1N⟨Fls(h,w),Frs(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)=N1⟨Fls(h,w),Frs(h,w−d)⟩
计算出来的代价体是三维的,因为特征通道维度上已通过内积操作进行加和而消除掉了。
随后作者设计尺度内聚合模块(ISA)和跨尺度聚合模块(CSA)对代价体进行代价聚合,并输出对应尺度的视差图。
-
尺度内聚合模块
作者关注到一个常见的问题,在不连续视差中容易出现edge-fattening问题,这个问题本质是常规卷积窗口在边缘时容易聚合了较大视差邻域的代价,因此提出一个自适应的弹性稀疏采样方案,即对特定的视差位置,与它语义上关联度更高的位置进行聚合,整体思路与deformable convolution(v2)一致,所以直接采用他们的实现
C~(d,p)=∑k=1K2wk⋅C(d,p+pk+Δpk)⋅mk\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=1∑K2wk⋅C(d,p+pk+Δpk)⋅mk
与原始deformable convolution稍有不同的是,Δpk\Delta{p_k}Δpk和mkm_kmk是对所有channel共享的,作者的实现是将视差等分成GGG组,每一组使用单独的一套Δpk\Delta{p_k}Δpk和mkm_kmk。
一个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数,没有压缩通道和计算量。
-
跨尺度聚合模块
而立体匹配的另一个问题,弱纹理匹配问题,比较容易在粗颗粒度的代价体中找到纹理信息,因此作者设计了一个跨尺度的聚合模块来解决此类问题。尺度sss的聚合结果可以表示为
C^s=∑k=1Sfk(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=1∑Sfk(C~k),s=1,2,...,S
这个设计的灵感来源HRNet的跨尺度特征聚合,因此函数fkf_kfk定义为
fk={I,k=s(s−k)convs3×3,stride2,k<supsampling⊕conv1×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(s−k)convs3×3,stride2upsampling⊕conv1×1,k=s,k<s,k>s
虽然与HRNet结构相似,但设计的初衷和作用是不同的,AANet主要为了聚合不同尺度下代价体蕴含的几何信息,而HRNet是为了学习更丰富的特征。
-
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的估计视差图作为软标签Dpseudo(⋅)D_{pseudo}(\cdot)Dpseudo(⋅)。对每个分辨率输出的视差图,首先双线性插值到原始尺寸,然后计算损失
Li=∑pV(p)⋅L(Dpredi(p),Dgt(p))+(1−V(p))⋅L(Dpredi(p),Dpseudo(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=p∑V(p)⋅L(Dpredi(p),Dgt(p))+(1−V(p))⋅L(Dpredi(p),Dpseudo(p))
V(p)V(p)V(p)表示像素位置ppp上是否真实ground truth,L\mathcal{L}L表示smooth L1。整个网络的损失则是各分辨率之间的加权平均数
L=∑iλi⋅LiL = \sum_i{\lambda_{i}}\cdot{L_i} L=i∑λi⋅Li
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的操作设计也很巧妙,但同样会面临计算并行度问题
相关文章:
【立体匹配论文阅读】AANet: Adaptive Aggregation Network for Efficient Stereo Matching
Authors: Haofei Xu, Juyong Zhang Link: https://arxiv.org/abs/2004.09548 Years: 2020 Credit Novelty and Question set up 主流的立体匹配模型的代价聚合操作主要用了3D卷积,这部分操作的算力和内存消耗过大,因此作者提出一种新的模型AANet&#x…...
服务器防入侵攻击,安全加固措施
服务器防入侵攻击,安全加固措施当服务器被入侵,被攻击的时候,很多服务器维护人员不懂得如何去防止入侵,防止黑客的攻击,只能眼巴巴的看着服务器被任意的攻击,给服务器上的网站造成严重的经济损失࿰…...
解读:“出境标准合同”与“出境安全评估”要点与异同
《数据安全法》第四条及《个人信息保护法》第三章对数据出境、个人信息跨境提出明确要求,《数据安全法》与《个人信息保护法》存在互相包含、被包含、衔接、特性、独立性、相互补充等内涵。本文通过上位法互相衔接、关联、特性的思路,去观察《个人信息出…...
python带你成功复刻热门手机游戏——飞翔的小鸟
前言 大家早好、午好、晚好吖 ❤ ~欢迎光临本文章 飞翔的小鸟(游戏英文名:Flappy Bird) 一款由越南独立开发者开发的手机游戏,是之前非常流行的一款手机游戏 小游戏目标:让小鸟穿过管子,不要碰到任何物体…...
YOLOv8初体验:检测、跟踪、模型部署
安装 YOLOv8有两种安装方式,一种是直接用pip命令安装: pip install ultralytics另外一种是通过源码安装: git clone https://github.com/ultralytics/ultralytics cd ultralytics pip install -e .[dev]安装完成后就可以通过yolo命令在命令…...
Vue 监听(watch handler)
普通监听 缺点:不能深度监听(对象属性的改变),刷新或首次加载不能执行。 watch: { carts: function (val, oldVal) { console.log(new: %s, old: %s, val, oldVal) } } 高级监…...
前端代码质量-圈复杂度原理和实践
1. 导读 你们是否也有过下面的想法? 重构一个项目还不如新开发一个项目…这代码是谁写的,我真想… 你们的项目中是否也存在下面的问题? 单个项目也越来越庞大,团队成员代码风格不一致,无法对整体的代码质量做全面的…...
汽车微控制器芯片F280039CPZRQ1、F280039CSPM、F280039CSPN规格参数
F280039CPZRQ1、F280039CSPM、F280039CSPN是C2000实时微控制器系列中的一款器件。C2000微控制器是可扩展、超低延迟器件,旨在提高电力电子设备的效率,包括但不限于:高功率密度、高开关频率,并支持使用 GaN和SiC技术。F280039CPZRQ…...
禾观科技三面经历
智力题 一天中时针和分钟重合多少次 由于时针1分钟旋转的圆心角度数为0.5度(30/60min) 分针1分钟旋转的圆心角度为6度(30/5min) 当两针第一次重合时后到第二次重合,分针比时针多旋转过的圆心角度数为360度。(快的比慢的多跑一圈,也就是360度) 这类问题实际上是分针追时…...
Spring Boot 实现接口幂等性的 4 种方案
一、什么是幂等性 幂等是一个数学与计算机学概念,在数学中某一元运算为幂等时,其作用在任一元素两次后会和其作用一次的结果相同。 在计算机中编程中,一个幂等操作的特点是其任意多次执行所产生的影响均与一次执行的影响相同。幂等函数或幂…...
Android Studio开发APP
1.下载Android Studio 官网下载:Android Studio for Window ... 百度云下载:android-studio-bundle-141.1903250-windows.exe Android Studio 是谷歌推出的一个Android集成开发工具,基于IntelliJ IDEA. 类似 Eclipse ADT,Android Studio 提供了集成的 Android 开发工具用…...
Spring之实例化Bean _ @Resource和@Autowired实现原理(3)
目录 1. 搜集注解信息 applyMergedBeanDefinitionPostProcessor(*) 2. 将实例化的Bean放入3级缓存中 addSingletonFactory(***)为循环依赖做准备 3. 根…...
华为HCIE学习之Openstack Cinder组件(cinder对接glusterfs)
文章目录一、MQ的作用二、cinder架构图三、各组件的作用四、cinder对接glusterfs一、MQ的作用 服务内各组件交互通过MQ进行 二、cinder架构图 IET,Linux用软件做存储,CNA识别过去就是IETTGT,物理存储,CNA识别过去就是TGT 三、…...
关于Go语言的底层,你想知道的都在这里!
文章目录1. GoLang语言1.1 Slice1.2 Map1.3 Channel1.4 Goroutine1.5 GMP调度1.6 垃圾回收机制1.7 其他知识点2. Web框架Gin和微服务框架Micro2.1 Gin框架2.2 Micro框架2.3 Viper2.4 Swagger2.5 Zap2.6 JWT文章字数大约1.95万字,阅读大概需要65分钟,建议…...
每日一问-ChapGPT-20230308-关于技术与思考的问题
文章目录每日一问-ChapGPT系列起因每日一问-ChapGPT-20230308-关于技术与思考的问题matplotlib_venn 中 venn2函数调用时,subsets传入A list (or a tuple) containing two set objects,怎么理解plt.pie() 包含哪些参数,以及每个参数的意义mat…...
Oracle表分区的创建、新增、拆分
Oracle中为了方便管理、查询数据当数据量大于500w或者2G时最好用分区表,常见的一种是使用时间作为分区。 分区表添加新的分区有 2 种情况: (1) 原分区里边界是 maxvalue 或者 default。 这种情况下,我们需要把边界分区 drop 掉,加…...
如何快速升级Java 8 到Java11
老板让我把一个项目从 Java 8 迁移到 Java 11,我该怎么办呢? 最简单的办法,当然是直接强行升级,遇到一个错就改一个错,别看它 low,但是对于一个小型且非核心的项目来说,已经足够了。 当然,对于比较重要的项目,且代码行数不少的情况,最标准的姿势就是对着官方文档进…...
内卷把同事逼成了“扫地僧”,把Git上所有面试题整理成足足24W字Java八股文
互联网大厂更多的是看重学历还是技术?毫无疑问,是技术,技术水平相近的情况下,肯定学历高/好的会优先一点,这点大家肯定都理解。说实话,学弟学妹们找工作难,作为面试官招人也难呀!&am…...
【计组】主存储器有关知识梳理
一、主存储器 主存储器可以直接和CPU进行通信,但是只能保存临时数据,在断电后数据就消失。还有一个特点是,主存储器的容量小,速度快,造价高。 1.构成 2.主存中存储体的构造 最小的存储单位是存储元,存储元…...
QT对象树
对象模型(对象树) 在Qt中创建对象的时候会提供一个Parent对象指针,下面来解释这个parent到底是干什么的。 l QObject是以对象树的形式组织起来的。 n 当你创建一个QObject对象时,会看到QObject的构造函数接收一个QObject指针作…...
网络编程(Modbus进阶)
思维导图 Modbus RTU(先学一点理论) 概念 Modbus RTU 是工业自动化领域 最广泛应用的串行通信协议,由 Modicon 公司(现施耐德电气)于 1979 年推出。它以 高效率、强健性、易实现的特点成为工业控制系统的通信标准。 包…...
SkyWalking 10.2.0 SWCK 配置过程
SkyWalking 10.2.0 & SWCK 配置过程 skywalking oap-server & ui 使用Docker安装在K8S集群以外,K8S集群中的微服务使用initContainer按命名空间将skywalking-java-agent注入到业务容器中。 SWCK有整套的解决方案,全安装在K8S群集中。 具体可参…...
Redis相关知识总结(缓存雪崩,缓存穿透,缓存击穿,Redis实现分布式锁,如何保持数据库和缓存一致)
文章目录 1.什么是Redis?2.为什么要使用redis作为mysql的缓存?3.什么是缓存雪崩、缓存穿透、缓存击穿?3.1缓存雪崩3.1.1 大量缓存同时过期3.1.2 Redis宕机 3.2 缓存击穿3.3 缓存穿透3.4 总结 4. 数据库和缓存如何保持一致性5. Redis实现分布式…...
ESP32读取DHT11温湿度数据
芯片:ESP32 环境:Arduino 一、安装DHT11传感器库 红框的库,别安装错了 二、代码 注意,DATA口要连接在D15上 #include "DHT.h" // 包含DHT库#define DHTPIN 15 // 定义DHT11数据引脚连接到ESP32的GPIO15 #define D…...
【快手拥抱开源】通过快手团队开源的 KwaiCoder-AutoThink-preview 解锁大语言模型的潜力
引言: 在人工智能快速发展的浪潮中,快手Kwaipilot团队推出的 KwaiCoder-AutoThink-preview 具有里程碑意义——这是首个公开的AutoThink大语言模型(LLM)。该模型代表着该领域的重大突破,通过独特方式融合思考与非思考…...
Spring AI与Spring Modulith核心技术解析
Spring AI核心架构解析 Spring AI(https://spring.io/projects/spring-ai)作为Spring生态中的AI集成框架,其核心设计理念是通过模块化架构降低AI应用的开发复杂度。与Python生态中的LangChain/LlamaIndex等工具类似,但特别为多语…...
【生成模型】视频生成论文调研
工作清单 上游应用方向:控制、速度、时长、高动态、多主体驱动 类型工作基础模型WAN / WAN-VACE / HunyuanVideo控制条件轨迹控制ATI~镜头控制ReCamMaster~多主体驱动Phantom~音频驱动Let Them Talk: Audio-Driven Multi-Person Conversational Video Generation速…...
C/C++ 中附加包含目录、附加库目录与附加依赖项详解
在 C/C 编程的编译和链接过程中,附加包含目录、附加库目录和附加依赖项是三个至关重要的设置,它们相互配合,确保程序能够正确引用外部资源并顺利构建。虽然在学习过程中,这些概念容易让人混淆,但深入理解它们的作用和联…...
redis和redission的区别
Redis 和 Redisson 是两个密切相关但又本质不同的技术,它们扮演着完全不同的角色: Redis: 内存数据库/数据结构存储 本质: 它是一个开源的、高性能的、基于内存的 键值存储数据库。它也可以将数据持久化到磁盘。 核心功能: 提供丰…...
【Post-process】【VBA】ETABS VBA FrameObj.GetNameList and write to EXCEL
ETABS API实战:导出框架元素数据到Excel 在结构工程师的日常工作中,经常需要从ETABS模型中提取框架元素信息进行后续分析。手动复制粘贴不仅耗时,还容易出错。今天我们来用简单的VBA代码实现自动化导出。 🎯 我们要实现什么? 一键点击,就能将ETABS中所有框架元素的基…...
