【MLP-BEV(7)】深度的计算。针孔相机和鱼眼相机对于深度depth的采样一个是均匀采样,一个是最大深度均匀采样

文章目录

  • 1.1 问题提出
    • 1.1 看看DD3D 的深度是怎么处理的
      • 给出代码示例
    • 1.2 我们看看BEVDepth的代码

1.1 问题提出

针孔相机和鱼眼相机的投影模型和畸变模型不一样,如果对鱼眼的模型不太了解可以到我的这篇博客【鱼眼镜头11】Kannala-Brandt模型和Scaramuzza多项式模型区别,哪个更好?,以及这个系列看看。

真空相机可以对于深度depth的采样一个是均匀采样,鱼眼来说,一个是最大深度均匀采样合适。

1.1 看看DD3D 的深度是怎么处理的

在3d head 中输出了深度,看这个代码

box3d_quat, box3d_ctr, box3d_depth, box3d_size, box3d_conf, dense_depth = self.fcos3d_head(features)

特征x经过 box3d_tower 卷积层后输出

box3d_tower_out = self.box3d_tower(features)
depth = self.box3d_depth[_l](box3d_tower_out)

而这个box3d_tower就是一群3x3卷积

box3d_tower.append(Conv2d(in_channels,in_channels,kernel_size=3,stride=1,padding=1,bias=norm_layer is None,norm=norm_layer,activation=F.relu))

得到后得到深度

        pixel_size = torch.norm(torch.stack([inv_intrinsics[:, 0, 0], inv_intrinsics[:, 1, 1]], dim=-1), dim=-1)depth = depth / (pixel_size * scale_depth_by_focal_lengths_factor)

与相机的内参(intrinsics)和深度图(depth map)的处理有关。
这两行代码的目的是根据相机的焦距和某个比例因子来调整深度图的值。这在计算机视觉和3D重建等任务中是很常见的操作。

  • inv_intrinsics: 这应该是一个表示相机内参逆矩阵的Tensor。在相机标定中,内参矩阵通常是一个3x3的矩阵,包含了焦距(fx, fy)、主点(cx, cy)和可能的扭曲因子等。但是在这里,我们只关心对角线元素,即焦距的倒数(假设fx和fy已经被取倒数)。
  • torch.stack([inv_intrinsics[:, 0, 0], inv_intrinsics[:, 1, 1]], dim=-1): 这将逆内参矩阵的第一行第一列和第二行第二列的元素(即fx和fy的倒数)沿着最后一个维度(dim=-1)堆叠成一个新的Tensor。结果是一个形状为[batch_size, 2]的Tensor,其中batch_sizeinv_intrinsics的第一个维度的大小。
  • torch.norm(..., dim=-1): 这计算了沿着最后一个维度(dim=-1)的范数。但是,由于我们堆叠的是两个值(即两个焦距的倒数),实际上计算的是这两个值的L2范数,也就是它们的平方根之和(但在这个特殊情况下,由于只有两个正数,L2范数就是它们的几何平均值)。但是,因为这里两个数都是正数并且只是简单的堆叠,所以实际上torch.norm在这里计算的是这两个值的平方根的和,这与直接取它们的平均值(或者只是取它们的和,如果后续操作是除法)在效果上可能差别不大。但几何平均值或平方根的和可能用于平滑或归一化目的。
  • pixel_size: 最终得到的Tensor包含了每个图像或图像批次的“像素大小”的某种度量,这个度量是基于焦距的倒数来计算的。
  • depth: 这是一个表示深度图的Tensor,其中每个值可能代表图像中对应像素的真实世界深度(或某种与深度相关的量度)。
  • pixel_size * scale_depth_by_focal_lengths_factor: 这部分计算了每个像素的“大小”与某个比例因子scale_depth_by_focal_lengths_factor的乘积。这个比例因子可能是用于根据焦距来缩放或调整深度值的。
  • depth / ...: 最后,原始的深度图被这个乘积除以,得到一个新的深度图,其中每个像素的深度值都根据焦距和比例因子进行了调整。这种调整可能是为了将深度图从某种原始度量(如像素单位的倒数)转换为更物理的度量(如米或厘米),或者为了校正由于相机内参引起的某种偏差。

给出代码示例

首先,我们需要确保inv_intrinsics是一个形状为[batch_size, 3, 3]的Tensor,其中包含了逆相机内参矩阵的集合,每个矩阵的(0, 0)(1, 1)位置是焦距的倒数(即1/fx1/fy)。同时,depth应该是一个形状为[batch_size, ...]的Tensor,其中包含了每个像素的深度值。

以下是代码示例,说明了如何计算pixel_size并更新depth

import torch# 假设 inv_intrinsics 是一个形状为 [batch_size, 3, 3] 的 Tensor
# 假设 depth 是一个形状为 [batch_size, ...] 的 Tensor
# 假设 scale_depth_by_focal_lengths_factor 是一个标量或者与 depth 形状相同的 Tensor# 示例数据
batch_size = 4  # 假设批次大小为 4
inv_intrinsics = torch.randn(batch_size, 3, 3)  # 随机生成逆内参矩阵
depth = torch.randn(batch_size, 10, 10)  # 随机生成深度图,假设每个样本的深度图大小为 10x10
scale_depth_by_focal_lengths_factor = 0.5  # 假设的比例因子# 计算 pixel_size
# 注意:我们只关心逆内参矩阵的对角线元素,即焦距的倒数
pixel_size = torch.sqrt(inv_intrinsics[:, 0, 0] ** 2 + inv_intrinsics[:, 1, 1] ** 2)
# 或者,如果你想使用 torch.norm 来计算两个元素的 L2 范数(几何平均值),但这里更简单的方法是直接相加然后开方
# pixel_size = torch.norm(torch.stack([inv_intrinsics[:, 0, 0], inv_intrinsics[:, 1, 1]], dim=-1), dim=-1)# 更新 depth
depth = depth / (pixel_size.unsqueeze(1).unsqueeze(1) * scale_depth_by_focal_lengths_factor)
# 注意:我们需要使用 unsqueeze 来扩展 pixel_size 的维度,以便它可以与 depth 进行广播(broadcast)# 此时,depth 已经根据 pixel_size 和 scale_depth_by_focal_lengths_factor 进行了更新

在这个示例中,我使用了torch.sqrt来直接计算两个焦距倒数的平方和的平方根,这是更简单且等价于使用torch.norm计算L2范数的方法。同时,我使用了unsqueeze来扩展pixel_size的维度,以便它可以与depth进行广播操作。这确保了当我们将pixel_sizedepth相除时,广播规则能够正确地将pixel_size扩展到与depth相同的形状。

1.2 我们看看BEVDepth的代码

    def _forward_single_sweep(...):# 提取环视图片特征# img_feats:[1, 1, 6, 512, 16, 44]img_feats = self.get_cam_feats(sweep_imgs)source_features = img_feats[:, 0, ...]# 提取Depth以及contextdepth_feature = self._forward_depth_net(...)# 预测的距离分布 depth:[6, 112, 16, 44]depth = depth_feature[:, :self.depth_channels].softmax(1)# 对应论文中的 Context Feature * Depth Distribution 操作img_feat_with_depth = ... # 

depth 是采用depth = depth_feature[:, :self.depth_channels].softmax(1) 均匀采样,商汤采样的的是最大深度均匀采样

采样策略:

最大深度均匀采样主要关注最大深度范围内的均匀性,而不太关心近处或中间深度层次的细节。
均匀深度分布采样则在整个深度范围内追求均匀性,确保每个深度层次都得到同等的关注。

数据分布:

最大深度均匀采样可能导致近处或中间深度层次的点或像素被过度采样,而远处深度层次的点或像素被采样不足。
均匀深度分布采样则在整个深度范围内保持相对均匀的数据分布。

适用场景:

最大深度均匀采样适用于那些主要关注远处目标或障碍物检测的应用,因为远处目标往往对任务结果有更大影响。
均匀深度分布采样适用于需要全面考虑场景深度的应用,如三维重建或增强现实。

鱼眼相机镜头对光线有折射作用,以此获得更大的可视范围,越靠近边缘区域,折射率越大,生成的图片畸变程度越大。

由于畸变,使用均匀的深度分布来生成的点云大部分位于感兴趣范围以外。
在这里插入图片描述

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

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

相关文章

vscode刷LeetCode算法题环境配置

首先,下载nodejs 在vscode中安装LeetCode插件 安装好进行配置 选择leetcode-cn 填上刚才下载node.exe的路径 完成之后重启一下vscode 重启之后登陆LeetCode 完成之后就可以看到题目了 点击 code now 就可以开始刷题了

【Linux】进程优先级 | 环境变量

目录 Ⅰ. 进程优先级(Process Priority) 1. 什么是进程优先级? 2. 查看系统进程 3. 修改进程优先级 4.优先级调度原理 Ⅱ. 进程的切换(Process Switch) 1. 竞争与独立 2. 并行与并发 3. 进程抢占 4.实现切换…

鸿蒙期末项目(完结)

两天仅睡3个小时的努力奋斗之下,终于写完了这个无比拉跨的项目,最后一篇博客总体展示一下本项目运行效果兼测试,随后就是答辩被同学乱沙(悲 刚打开软件,会看到如下欢迎界面,介绍本app的功能和优点 随后我们…

在线开发、实时交互 | 三维天地低代码开发平台助力提高项目交付速度

1.什么是低代码开发平台? 低代码开发平台基于北京三维天地科技股份有限公司自研原生技术架构研发。三维天地作为国内知名的检验检测信息化领域软件开发服务商,拥有多项自主知识产权及自主研发核心技术,致力于为客户提供信息化整体解决方案及相关软件产品与服务。 三维天地低…

【包邮送书】深度学习与信号处理

欢迎关注博主 Mindtechnist 或加入【智能科技社区】一起学习和分享Linux、C、C、Python、Matlab,机器人运动控制、多机器人协作,智能优化算法,滤波估计、多传感器信息融合,机器学习,人工智能等相关领域的知识和技术。关…

视觉震撼背后:带宽对渲染农场的重要性

在这个注重视觉体验的时代,无论是电影、电子游戏还是虚拟现实(VR),令人印象深刻的视觉效果都依赖于渲染农场的强大能力。而带宽,则是确保这些画面能够迅速且以高清晰度传递给我们的核心要素。 一、核心概念&#xff1a…

1.2章节input输入函数语法使用和示例

在Python中,input() 函数用于从用户获取输入。这个函数会等待用户输入一行文本,然后按回车键,最后将输入的文本作为字符串返回。 一、基本语法 当你运行上面的代码时,它会打印出 "请输入一些文字: ",然后等…

工商银行:低息差下的挣扎

时隔四年,市值再度超越贵州茅台成为A股“股王”。 今天要说的就是“宇宙行”——中国工商银行 虽然茅台的信仰开始崩塌,但各大银行股巨头们今年也不好过。2024年一季度六大行业绩集体受挫,息差普遍收窄超过20个基点。其中,包括工…

航天航空零部件装配制造MES系统解决方案详解

航天航空零部件制造行业是一个技术密集、工艺复杂且对精度和可靠性要求极高的行业。为了提升生产效率、保证产品质量并满足严格的行业标准,越来越多的航天航空零部件制造企业引入了MES系统。本文将详细介绍MES系统在航天航空零部件制造行业的应用方法及其价值。 一…

卸载vmware时2503,2502报错的解决办法

1.背景 windows 卸载vmware时,显示2503报错,无法完全卸载 2. 解决方案 2.1 参考安装报错2502,2503的处理方式 文献:https://blog.csdn.net/zhangvalue/article/details/80309828 2.1 步骤: 2.1.1 cmd 管理员打开…

《2023-2024安服安全技术研究白皮书(正式版)》

2023年5月,我们再次更新了《2022-2023安服安全技术研究白皮书》,这次我们进行了内容丰富,并特别介绍了我们围绕反APT技术栈的一些研究和想法,通过该技术栈的积累扩展了更多的安全能力,包括对攻击生命周期本身的认知、攻…

Arduino - 继电器

Arduino - 继电器 In a previous tutorial, we have learned how to turn on/off an LED. In this tutorial, we are going to learn how to turn on/off some kind of devices that use the high voltage power supply(such as a light bulb, fan, electromagnetic lock, lin…

亚马逊卖家的ERP代理贴牌与独立部署策略

贴牌,就是将亚马逊ERP进行个性化定制,包括更换成自己公司的logo、域名、收款账户,同时支持与自己的物流渠道进行对接,以满足自建仓库的需求。 对于独立部署,这需要有自己的服务器、数据库和存储空间等基础设施。在贴牌…

AI时代的风口,中小企业也不能错过

文|白 鸽 编|周效敬 这些场景,对你来说或许并不陌生: 在医院的大屏上,一个医生模样的数字人在做医疗知识科普;在抖音的直播间里,一个真人模样的数字人在线上直播带货,24小时无休无…

音频剪辑技巧:音频降噪在线怎么降噪?分享7种录音去除杂音方法

相信很多小伙伴们都有这种苦恼:在编辑音频时,你可能发现即使你使用了价格昂贵的隔音麦克风,在录音中仍然存在呼吸声和咳嗽声。因此,如果要传达清晰干净的声音以表达你的信息,你该如何从录音去除杂音呢?别心…

小程序消息定时任务(定时触发器)发送总结

文章目录 小程序消息定时任务(定时触发器)发送总结1.开发思路2.实现办法3.查看定时触发器是否正常运作4.总结小程序消息定时任务(定时触发器)发送总结 1.开发思路 在使用小程序的时候总是会遇到消息任务发送的情况,但是很多时候是预约发送,这个时候我们就要使用小程序里…

Android高级面试_2_IPC相关

Android 高级面试-3:语言相关 1、Java 相关 1.1 缓存相关 问题:LruCache 的原理? 问题:DiskLruCache 的原理? LruCache 用来实现基于内存的缓存,LRU 就是最近最少使用的意思,LruCache 基于L…

OverTheWire Bandit 靶场通关解析(上)

介绍 OverTheWire Bandit 是一个针对初学者设计的网络安全挑战平台,旨在帮助用户掌握基本的命令行操作和网络安全技能。Bandit 游戏包含一系列的关卡,每个关卡都需要解决特定的任务来获取进入下一关的凭证。通过逐步挑战更复杂的问题,用户可…

Interview preparation--elasticSearch倒排索引原理

搜索引擎应该具备哪些要求 查询速度快 优秀的索引结构设计高效率的压缩算法快速的编码和解码速度 结果准确 ElasiticSearch 中7.0 版本之后默认使用BM25 评分算法ElasticSearch 中 7.0 版本之前使用 TP-IDF算法 倒排索引原理 当我们有如下列表数据信息,并且系统…

【字符串】【双指针】1、仅仅反转字母+2、回文子串+ 3、最长回文子串+4、验证回文串+5、反转字符串中的单词

今天依旧是字符串!2道简单+3道中等 1、仅仅反转字母(难度:简单) 该题对应力扣网址 错误做法 一开始是“原始”思路,交了之后果然不对,错误的思路我也就不解释了。 class Solution { public:…