LabVIEW深度相机与三维定位实战(下)
🏡博客主页: virobotics的CSDN博客:LabVIEW深度学习、人工智能博主
🎄所属专栏:『LabVIEW深度学习实战』
🍻上期文章:『LabVIEW深度相机与三维定位实战(上)』
📰如觉得博主文章写的不错或对你有所帮助的话,还望大家多多支持呀! 欢迎大家✌关注、👍点赞、✌收藏、👍订阅专栏
文章目录
- 前言
- 一、立体匹配与ACV算法
- 1.1 立体匹配
- 1.2 ACV算法
- 二、环境搭建
- 2.1 部署本项目时所用环境
- 2.2 LabVIEW工具包下载及安装
- 三、LabVIEW实现ACVNet立体匹配
- 3.1 获取模型
- 3.2 测试范例
- 四、项目源码
- 总结
前言
Hello,大家好,这里是virobotics。今天给大家分享在LabVIEW中实现深度相机与三维定位:立体匹配与ACV算法。关于双目相机基础支持可查看上一篇博文『LabVIEW深度相机与三维定位实战(上)』
一、立体匹配与ACV算法
1.1 立体匹配
-
基本思路
如上一篇博文所述,如果已知左右相机画面中的两个像素来源于空间中的同一个点,那么就可以通过视差来计算出该点到基线的距离(深度)。
如果有一种算法:针对左目画面中的每一个像素,能够分别找到它们在右目画面中对应空间中同一点的像素(假如存在的话),那么就可以计算出单目画面中每一个点的深度,从而形成立体视觉。
-
立体匹配的任务
立体匹配的目标,就是从不同视点图像中找到匹配的对应点。该模型的输入为若干不同视角的相机采集的图像,输出是这些图像上的点的对应关系。
立体匹配是目前机器视觉领域的一个难点,近年来不断有人发明或改良出新的方法,以求提高效率和准确性。本文接下来将介绍其中一种方法——ACV。
1.2 ACV算法
-
简介
该算法来源于今年(2022)发表于CVPR上的一篇论文:
Attention Concatenation Volume for Accurate and Efficient Stereo Matching
原文下载地址: https://arxiv.org/abs/2203.02146ACV,即 Attention Concatenation Volume,意为:注意力连接(代价)体。它是文章提出的一种新的立体匹配“代价体”的构建方法。
“该方法利用相关线索生成注意力权重,以抑制冗余信息,增强连接体积中的匹配相关信息。为了产生可靠的注意力权重,本文提出了多级自适应补丁匹配,以提高不同视差下匹配成本的显著性,即使是无纹理区域。”
-
ACVNet网络结构
如下图所示,首先通过CNN分别提取左右画面的特征图,然后上下“兵分两路”:
1、下边将左右特征图,按照一定规律拼接,生成初始连接代价体(Concat volume);
2、上边将(不同层的)左右特征图,进行多级自适应补丁匹配(MAPM),最终生成注意力权重 (Attention Weights);
3、用注意力权重 对Concat volume进行过滤,以增强相关抑制冗余,得到注意力连接代价体(Attention concat volume);
4、最后ACV通过一个代价聚合网络(Cost Aggregation),输出最终结果(Left画面每一点的视差预测)。

-
初始连接代价体的构建
给定一个尺寸为H×W×3的输入立体图像对,对于每个图像,我们通过CNN特征提取,分别得到左、右图像的一元特征图fl和fr。特征图的大小为Nc×H/4×W/4(Nc=32)。然后通过连接每个视差水平的fl和fr形成初始连接体,即为

Cconcat 的尺寸为2Nc ×D/4×H/4×W/4 ,其中D为最大视差。
🔍 帮助理解:
1、左右特征图都是Nc通道。并且经过多次卷积之后,尺寸已经缩小为原来的1/4。那么原图最大视差D,就对应特征图的最大视差为D/4;
2、通俗地讲解拼接过程:
把Nc通道的右特征图的所有像素,沿X轴向右平移1个像素,然后拼接在Nc通道的左特征图的后面,得到第1组2Nc通道的拼接特征图。
平移2个像素拼接得到第2组、平移3个像素拼接得到第3组……直到平移D/4,一共D/4组2Nc通道的拼接特征图。因此Cconcat 的尺寸为2Nc ×D/4×H/4×W/4
3、这种连接体的构建,实际是在列举所有视差匹配的可能性。理想双目只在X方向有视差,即同源点必然位于左右特征图的同一条水平线上,且XL一定大于XR。因此我们对右侧特征图沿X向右平移1到D/4个单位,再分别与左侧特征图叠加,就能让所有同源点得到一次“左右重合”的机会。重合时对应的平移距离,反映了该点的视差大小,进而反映该点的深度。
- 多级自适应补丁匹配(MAPM)
从特征提取模块得到3个不同层次的特征图l1、l2、l3,其通道数分别为64、128、128。对于每一个处于特定水平的像素,我们利用一个具有预定尺寸和自适应学习权重的atrous patch来计算匹配成本。通过控制膨胀率,我们确保patch的范围与特征图层有关,同时在计算中心像素的相似度时保持相同的像素数量。然后,两个相应的像素的相似性是patch内相应像素之间的相关性的加权和。

🔍 帮助理解:
1、虽然算法复杂,但是目的简单,就是在估计左右特征图上的两个点是空间同一点的可能性(权重);
2、估算可能性的方法,是选取该点及其周围点,参与加权计算。这个选取范围叫做patch,是个会膨胀的自适应范围。但无论怎么膨胀,参与计算的点数是恒定的9个,就是图中红色和橙色的点。白色的点是膨胀产生的空洞,不参与计算。
将l1、l2和l3的三级特征图连接起来,形成Nf个通道的单级特征图(Nf=320)。将Nf通道平均分成Ng组(Ng=40),前8组来自l1,中间16组来自l2,最后16组来自l3。不同级别的特征图不会相互干扰。我们把第g个特征组表示为 
,多级补丁匹配量Cpatch的计算方法为:

-
注意力权重过滤
在得到注意权重A后,我们用它来消除初始连接代价体中的冗余信息,进而提高其表示能力。
通道 i 处的注意力连接代价体(ACV)计算为:

⊙表示对应像素点乘,注意力权重 A 应用于初始连接代价体的所有通道的过滤。 -
代价聚合与视差预测
用一个预沙漏模块来处理ACV,它由4个3D卷积组成(包括批归一化、ReLU)、2个3D堆叠沙漏网络,堆叠在一个 encoder-decoder结构。由代价聚合获得3个输出,对于每个输出,使用2个3D卷积得到单通道4D volume,然后上采样并通过softmax转化为置信体。3个预测的视差图表示为d0、d1、d2。最终,预测值就是每一层视差与置信度乘积求和。(k表示视差层级,pk表示对应的置信度)

二、环境搭建
2.1 部署本项目时所用环境
- 操作系统:Windows10
- python:3.6及以上
- LabVIEW:2018及以上 64位版本
- AI视觉工具包:techforce_lib_opencv_cpu-1.0.0.98.vip
- onnx工具包:virobotics_lib_onnx_cuda_tensorrt-1.0.0.16.vip【1.0.0.16及以上版本】
2.2 LabVIEW工具包下载及安装
- AI视觉工具包下载与安装参考:
https://blog.csdn.net/virobotics/article/details/123656523 - onnx工具包下载与安装参考:
https://blog.csdn.net/virobotics/article/details/124998746
三、LabVIEW实现ACVNet立体匹配
3.1 获取模型
项目中提供一个onnx格式的ACVNet模型,模型文件位于:“范例\acvnet_maxdisp192_sceneflow_240x320.onnx”
模型的输入为左右两张彩色图,大小均为 3240320,须归一化到(-1~1)之间。
最大视差为maxdisp = 192 。
模型的输出为3个层级下的,左图各个像素的视差预测。通常我们只取其中一个层级下的预测结果。
3.2 测试范例
-
打开“范例\ACVNet_main.vi”;
-
切换到程序框图,检查依赖的模型文件路径、左右图片路径是否正确。
-
切换到前面板,运行VI,观察输出结果。(本范例采用灰度图对预测结果进行后处理,灰度大小与该点的视差大小正相关)

-
修改图片路径,用上一篇博文采集的left.png和right.png图片作为输入,运行测试。

四、项目源码
如需源码,可在一键三连并订阅本专栏后评论区留下邮箱
总结
以上就是今天要给大家分享的内容,希望对大家有用。我是virobotics,我们下篇文章见~
如果文章对你有帮助,欢迎✌关注、👍点赞、✌收藏、👍订阅专栏
推荐阅读
LabVIEW图形化的AI视觉开发平台(非NI Vision),大幅降低人工智能开发门槛
LabVIEW图形化的AI视觉开发平台(非NI Vision)VI简介
LabVIEW AI视觉工具包OpenCV Mat基本用法和属性
手把手教你使用LabVIEW人工智能视觉工具包快速实现图像读取与采集
👇技术交流 · 一起学习 · 咨询分享,请联系👇
相关文章:
LabVIEW深度相机与三维定位实战(下)
🏡博客主页: virobotics的CSDN博客:LabVIEW深度学习、人工智能博主 🎄所属专栏:『LabVIEW深度学习实战』 🍻上期文章:『LabVIEW深度相机与三维定位实战(上)』 &#…...
【基础类】—CSS盒模型的全面认识
一、基本概念:标准IE模型 盒模型:margin border padding content 标准模型:将元素的宽度和高度仅计算为内容区域的尺寸(content-box,默认) 当CSS盒模型为 标准盒模型 (box-sizing: conten…...
ATFX汇评:非农就业报告来袭,汇市或迎剧烈波动
ATFX汇评:美国非农就业报告每月发布一次,其中非农就业人口和失业率两项数据最受关注。7月季调后非农就业人口,将于今日20:30公布,前值为20.9万人,预期值20万人;7月失业率,同一时间公布ÿ…...
SpringBoot的常用注解的服用方式
1. SpringBootApplication 1.1 概述 SpringBootApplication是SpringBoot应用程序的核心注解,通常用于主类上。它包含了以下三个注解: Configuration:表示该类是一个配置类,用于定义Spring的配置信息。EnableAutoConfiguration&…...
[课程][原创]CMakeLists编写实战linux版
课程地址:https://edu.csdn.net/course/detail/38887 课程介绍课程目录讨论留言 你将收获 学会如何编写CMakeLIsts 学会如何调试自己cmake项目 学会如何引用头文件和库 学会如何调用开源库 适用人群 对CMakeLists感兴趣的入门学者 课程介绍 CMake是一个跨…...
静态路由下一跳地址怎么确定(静态路由配置及讲解)
一、用到的所有命令及功能 ①ip route-static 到达网络地址 子网掩码 下一跳 // 配置静态路由下一跳指的是和当前网络直接连接的路由器的接口地址非直连网段必须全部做路由路径是手工指定的,在大规模网络上不能用,效率低,路径是固定的稳定的…...
SPSS‖参数与非参数检验对比课程中的 配对样本T检验
特点:在配对样本T检验中,强调被试一定要同质(同一样本,不同变量环境),其目的就为了消除目的是额外变量的影响,更能反映自变量和因变量之间的关系。 •配对样本t检验的过程,是对两个…...
AI赋能转型升级 助力打造“数智辽宁”——首次大模型研讨沙龙在沈成功举行
当前,以“ChatGPT”为代表的大模型正在引领新一轮全球人工智能技术发展浪潮,推动人工智能从以专用小模型定制训练为主的“手工作坊时代”,迈入以通用大模型预训练为主的“工业化时代”,正不断加速实体经济智能化升级,深…...
JVM、Redis、反射
JVM JVM是Java virtual machine(Java虚拟机)的缩写,是一种用于计算机的规范,是通过在实际计算机上仿真模拟各种计算机功能来实现的。 主要组件构成: 1.类加载器 子系统负责从文件系统或者网络中加载Class文件&…...
【Spring练习项目】博客系统
目录 1.项目展示2.项目结构设计3.项目功能设计4 数据库准备4.1 建表4.2 DB相关数据 5.项目模块6.添加项目公共模块6.1 common6.2 实现前端界面 7.功能实现7.1实现博客列表约定前后端交互接口实现服务器代码实现客户端代码 7.2实现博客详情约定前后端交互接口实现服务器代码实现…...
神策新一代分析引擎架构演进
近日,神策数据已经推出全新的神策分析 2.5 版本,该版本支持分析模型与外部数据的融合性接入,构建全域数据融合模型,实现从用户到经营的全链路、全场景分析。新版本的神策分析能够为企业提供更全面、更有效的市场信息和经营策略&am…...
Systemui的介绍以及与普通应用的差异
一.SystemUI的介绍 简介 SystemUI是Android操作系统的一个关键组件,主要负责管理和提供用户界面的核心元素,如状态栏、导航栏和锁屏界面等。从下面两点出发了解SystemUI的特性: 一下就是systemui的部分界面,还包括锁屏界面&…...
群狼调研—产业园物业满意度的调研对象
群狼调研**(湖南物业满意度调查)**受顾客委托开展产业园物业满意度调查,产业园物业满意度调研对象:产业园物业满意度调研的对象主要是产业园内的企业和租户。这包括在产业园内租用场地或办公空间的企业、工厂、工作室等࿰…...
想参加华为杯竞赛、高教社杯和数学建模国赛的小伙伴看过来
本文目录 ⭐ 赛事介绍⭐ 辅导比赛 ⭐ 赛事介绍 ⭐ 参赛好处 ⭐ 辅导比赛 ⭐ 写在最后 ⭐ 赛事介绍 华为杯全国研究生数学建模竞赛是由华为公司主办的一项面向全国研究生的数学建模竞赛。该竞赛旨在通过实际问题的建模和解决,培养研究生的创新能力和团队合作精神&a…...
ELK 企业级日志分析系统
目录 ELK 概述 1、ELK 简介 2、为什么要使用 ELK: 3、完整日志系统基本特征 4、ELK 的工作原理: 总结 ELK Elasticsearch 集群部署(在Node1、Node2节点上操作) 1.环境准备 2.部署 Elasticsearch …...
PyTorch Lightning教程六:优化代码
有时候模型训练很慢,代码写得冗长之后,没法诶个检查到底那块出现了占用了时空间,本节通过利用Lightning的一些方法,检查分析是那块代码出现了问题,从而来进一步指导和优化代码 本节主要基于性能分析方法,通…...
基于linux下的高并发服务器开发(第四章)- 多线程实现并发服务器
>>了解文件描述符 文件描述符分为两类,一类是用于监听的,一类是用于通信的,在服务器端既有监听的,又有通信的。而且在服务器端只有一个用于监听的文件描述符,用于通信的文件描述符是有n个。和多少个客户端建立了…...
YUV 色彩空间中U 和 V 分量的范围
在YUV色彩空间中,U分量和V分量的范围通常是-0.5到0.5。 具体来说,对于标准的YUV色彩空间(例如YUV420),取样是按照4:2:0的比例进行的。这意味着在水平和垂直方向上,U和V分量的取样比Y分量少一半。因此&…...
【云原生】K8S二进制搭建一
目录 一、环境部署1.1操作系统初始化 二、部署etcd集群2.1 准备签发证书环境在 master01 节点上操作在 node01与02 节点上操作 三、部署docker引擎四、部署 Master 组件4.1在 master01 节点上操 五、部署Worker Node组件 一、环境部署 集群IP组件k8s集群master01192.168.243.1…...
自动化应用杂志自动化应用杂志社自动化应用编辑部2023年第11期目录
数据处理与人工智能 大数据视域下无轨设备全生命周期健康管理技术的研究 赖凡; 1-3 三维激光扫描结合无人机倾斜摄影在街区改造测绘中的技术应用 张睿; 4-6 井上变电站巡检机器人的设计与应用 刘芳; 7-9 《自动化应用》投稿邮箱:cnqikantg126.com 基于机…...
【大模型RAG】拍照搜题技术架构速览:三层管道、两级检索、兜底大模型
摘要 拍照搜题系统采用“三层管道(多模态 OCR → 语义检索 → 答案渲染)、两级检索(倒排 BM25 向量 HNSW)并以大语言模型兜底”的整体框架: 多模态 OCR 层 将题目图片经过超分、去噪、倾斜校正后,分别用…...
JavaSec-RCE
简介 RCE(Remote Code Execution),可以分为:命令注入(Command Injection)、代码注入(Code Injection) 代码注入 1.漏洞场景:Groovy代码注入 Groovy是一种基于JVM的动态语言,语法简洁,支持闭包、动态类型和Java互操作性,…...
ES6从入门到精通:前言
ES6简介 ES6(ECMAScript 2015)是JavaScript语言的重大更新,引入了许多新特性,包括语法糖、新数据类型、模块化支持等,显著提升了开发效率和代码可维护性。 核心知识点概览 变量声明 let 和 const 取代 var…...
MySQL 隔离级别:脏读、幻读及不可重复读的原理与示例
一、MySQL 隔离级别 MySQL 提供了四种隔离级别,用于控制事务之间的并发访问以及数据的可见性,不同隔离级别对脏读、幻读、不可重复读这几种并发数据问题有着不同的处理方式,具体如下: 隔离级别脏读不可重复读幻读性能特点及锁机制读未提交(READ UNCOMMITTED)允许出现允许…...
django filter 统计数量 按属性去重
在Django中,如果你想要根据某个属性对查询集进行去重并统计数量,你可以使用values()方法配合annotate()方法来实现。这里有两种常见的方法来完成这个需求: 方法1:使用annotate()和Count 假设你有一个模型Item,并且你想…...
高防服务器能够抵御哪些网络攻击呢?
高防服务器作为一种有着高度防御能力的服务器,可以帮助网站应对分布式拒绝服务攻击,有效识别和清理一些恶意的网络流量,为用户提供安全且稳定的网络环境,那么,高防服务器一般都可以抵御哪些网络攻击呢?下面…...
Map相关知识
数据结构 二叉树 二叉树,顾名思义,每个节点最多有两个“叉”,也就是两个子节点,分别是左子 节点和右子节点。不过,二叉树并不要求每个节点都有两个子节点,有的节点只 有左子节点,有的节点只有…...
【C++特殊工具与技术】优化内存分配(一):C++中的内存分配
目录 一、C 内存的基本概念 1.1 内存的物理与逻辑结构 1.2 C 程序的内存区域划分 二、栈内存分配 2.1 栈内存的特点 2.2 栈内存分配示例 三、堆内存分配 3.1 new和delete操作符 4.2 内存泄漏与悬空指针问题 4.3 new和delete的重载 四、智能指针…...
基于IDIG-GAN的小样本电机轴承故障诊断
目录 🔍 核心问题 一、IDIG-GAN模型原理 1. 整体架构 2. 核心创新点 (1) 梯度归一化(Gradient Normalization) (2) 判别器梯度间隙正则化(Discriminator Gradient Gap Regularization) (3) 自注意力机制(Self-Attention) 3. 完整损失函数 二…...
RabbitMQ入门4.1.0版本(基于java、SpringBoot操作)
RabbitMQ 一、RabbitMQ概述 RabbitMQ RabbitMQ最初由LShift和CohesiveFT于2007年开发,后来由Pivotal Software Inc.(现为VMware子公司)接管。RabbitMQ 是一个开源的消息代理和队列服务器,用 Erlang 语言编写。广泛应用于各种分布…...
