[Mono Depth/3DOD]单目3D检测基础
1. 数据增强
- 图像放缩和裁剪后,相机内参要做相应变化
import random
def random_scale(image, calib, scale_range=(0.8, 1.2)):scale = random.uniform(*scale_range)width, height = image.sizeimage = image.resize((int(width * scale), int(height * scale)))calib[:2, :] *= scalereturn image, calibdef random_crop(image, left, w_out, upper, h_out, calib):right = left + w_outlower = upper + h_outimage = image.crop((left, upper, right, lower))calib[0, 2] -= left # cx - ducalib[1, 2] -= upper # cy - dvcalib[0, 3] -= left * calib[2, 3] # tx - du * tz calib[1, 3] -= upper * calib[2, 3] # ty - dv * tz
2. 数据集
2.1. KITTI

- Rotation_y(全局航向角<BOC):
- 车头方向与相机的x轴正方向的夹角
- 描述目标在现实世界中的朝向,不随目标的位置和采集车的位置变化而变化
- theta:目标方位角
- Alpha:目标观测角,Alpha = theta + Rotation_y

- 单目3D学习alpha角,因为alpha是跟图像特征相关的
3. 单目3D检测任务问题总结
- 单目3D模型对相机的内外参变换敏感
- 对遮挡和截断目标的检测性能下降明显
- 对远距离的小目标性能下降严重(KITTI数据集,把超过46m的物体过滤)
- 2D检测框和3D检测框在2D图像上的投影不完全重合(传感器的时间同步问题,相机频率(20HZ)快于lidar频率(10HZ))
- 航向角预测不达标
- 无时序约束,3D检测结果抖动明显
单目3D检测的难点:
- 输入信息(2维)维度少于输出信息(3D)的维度
- 2D检测:输入输出都是2D
- 雷达检测:输入输出都是3D
- 输入的信息熵小于输出的信息熵
- 单目图像缺少深度信息

上图来自论文:https://openreview.net/pdf?id=mPlm356yMIP,ICLR 2022
- 现有3D检测方法的深度误差下限跟理论下限对比深度误差随着深度呈指数增长,理论误差与深度呈二次方增长
- CaDDN和Monodle在40米后呈现指数增长
- KITTI数据集,40米的深度理论误差是1.48米,60米是3.3
4. 单目3D检测范式

上图来自论文:3D Object Detection for Autonomous Driving: A Comprehensive Survey
- Images-only 单目3D检测(绿色)
- 单阶段anchor-base
- 单阶段anchor-free
- 两阶段3D检测
- Depth-assisted 单目3D检测(深蓝色)
- Depth-images based mono3D
- Pseudo-Lidar based mono3D
- Patch-based mono3D
- Prior-guide 单目3D检测(蓝色)
4.1. Images-only 单目3D检测

- 单阶段anchor-base (yolo3D)
- 利用图像特征和预定义的3D anchor来预测3D box的参数
- 单阶段anchor-free (centernet, KM3D)
- 直接利用图像特征来预测3D box的参数
- 两阶段3D检测
- 从2D检测生成2D边界框并crop 2D ROI
- 通过从2D ROI特征预测3D对象参数,将2D检测提升到3D空间
4.2. Depth-assisted 单目3D检测(引入深度先验)

- Depth-images based mono3D
- 融合RGB图像和深度图得到depth-aware特征
- 深度图由预训练的深度预测模型得到
- Pseudo-Lidar based mono3D
- 基于伪激光雷达的方法,首先讲深度图转为3D伪激光点云,再用基于激光雷达的3D检测算法进行检测
- Patch-based mono3D
- 基于patch的方法,将深度图转化为二维坐标图(2D coordinate map),然后在坐标图上用CNN进行检测
4.3. Prior-guide 单目3D检测

先验引导方法利用物体形状先验、几何先验、分割和时间约束来帮助检测3D物体
单目3D检测的先验信息:
- 先验信息:3D box下底边的中心点在图像的投影点的越靠近消失线,深度越大
- 物体3D尺寸与2D图像上投影比例关系
- 场景集合信息(消失点,消失线,车道线,天空)
3D检测用到的几何信息
- 相机没有pitch角,车辆没有抖动
- 地面是平的,地面没有起伏
注:对于没有深度图预测的3D检测算法,基本是在放宽这两个假设上,通过几何关系求深度

上图来源论文:How do neural networks see depth in single images?
- h/H = f/Z,得到Z=Hf/h
- f:相机的焦距
- Z:深度
- H:实际世界中的车宽
- h:物体在图像中的像素高度
- y/Y:f/Z
- y:相机距离地面的安装高度
- Y:图像中车轮与地面接触点的纵坐标
- 直观上理解,离我们越近的物体它的纵坐标应该越靠近图像下方,越远的物体越靠图像上方
相关文章:
[Mono Depth/3DOD]单目3D检测基础
1. 数据增强 图像放缩和裁剪后,相机内参要做相应变化 import random def random_scale(image, calib, scale_range(0.8, 1.2)):scale random.uniform(*scale_range)width, height image.sizeimage image.resize((int(width * scale), int(height * scale)))cal…...
【Docker 内核详解】namespace 资源隔离(三):PID namespace
namespace 资源隔离(三):PID namespace 1.PID namespace 中的 init 进程2.信号与 init 进程3.挂载 proc 文件系统4.unshare() 和 setns() PID namespace 隔离非常实用,它对进程 PID 重新标号,即两个不同 namespace 下的…...
1600*C. Game On Leaves(博弈游戏树)
Problem - 1363C - Codeforces 解析: 我们将目标结点 x 当作树的根,显然,到当 x 的度为 1 的时候,此时行动的人胜利。 我们假设现在的情况为,只剩余三个点,再选择任意一个点,则对方获胜。但是两…...
Apache Ant的安装
介绍 Apache Ant是一个Java库和一个 命令行工具,可以用来构建Java应用。Ant提供了许多内置的任务(tasks),可以编译、组装、测试、运行Java应用。Ant也可以构建非Java应用,例如C、C应用。 Ant非常灵活,没有…...
考研:数学二例题--∞−∞和0⋅∞型极限
前言 本文只是例题,建议先参考具体如何做这类型例题。请到主文章中参考:https://blog.csdn.net/grd_java/article/details/132246630 ∞ − ∞ 和 0 ⋅ ∞ \infin - \infin 和 0\infin ∞−∞和0⋅∞ 例题 例1: lim x → ∞ x 2 x 2 −…...
C++算法:图中的最短环
题目 现有一个含 n 个顶点的 双向 图,每个顶点按从 0 到 n - 1 标记。图中的边由二维整数数组 edges 表示,其中 edges[i] [ui, vi] 表示顶点 ui 和 vi 之间存在一条边。每对顶点最多通过一条边连接,并且不存在与自身相连的顶点。 返回图中 …...
C++学习——类其实也是一种作用域
以下内容源于C语言中文网的学习与整理,非原创,如有侵权请告知删除。 其实也是一种作用域,每个类都会定义它自己的作用域。在类的作用域之外,普通的成员只能通过对象(可以是对象本身,也可以是对象指针或对象…...
Seata入门系列【4】undo_log、global_table、branch_table、lock_table字段及作用详解
1 客户端 1.1 undo_log 在AT模式中,需要在参与全局事务的数据库中,添加一个undo_log表,建表语句如下: SET NAMES utf8mb4; SET FOREIGN_KEY_CHECKS 0;-- ---------------------------- -- Table structure for undo_log -- --…...
虚幻引擎:数据表格的C++常用API
1.将数据表格中的所有数据存到一个数组中 //参数1 // 错误提示 //参数2 // 存储的数组 TArray<FKeyInfoHeader*> array; KeyInfoDT->GetAllRows<FKeyInfoHeader>(TEXT("错误"),array); 2.获取表格中所有的行名称 TArray<FName>array; …...
Java日期格式化(DateFormat类和SimpleDateFormat类)
格式化日期表示将日期/时间格式转换为预先定义的日期/时间格式。例如将日期“Fri May 18 15:46:24 CST2016” 格式转换为 “2016-5-18 15:46:24 星期五”的格式。 在 java 中,可以使用 DateFormat 类和 SimpleDateFormat 类来格式化日期,下面详细介绍这两…...
centos 7 lamp owncloud
OwnCloud是一款开源的云存储软件,基于PHP的自建网盘。基本上是私人使用,没有用户注册功能,但是有用户添加功能,你可以无限制地添加用户,OwnCloud支持多个平台(windows,MAC,Android&a…...
屏幕亮度调节保护您的眼睛
官方下载地址: 安果移动 视频演示:屏幕亮度调节-保护您的眼睛_哔哩哔哩_bilibili 嗨,亲爱的用户,你是否有过这样的体验:夜晚安静的时刻,想要在抖音上看看热门的舞蹈、在快手上发现生活的 趣味、或是在哔…...
CentOS Linux下CMake二进制文件安装并使用Visual Studio调试
cmake安装——二进制安装(很简单,推荐!!) 1)下载二进制包。首先就是官网下载二进制安装包(我们是64位系统,就下载对应的包),这里。 例如:在/home/DOWNLOAD目录下执行,即下载二进制…...
ASP.net相关目录,相关配置文件和.后缀名解释
App_Data:用于存储应用程序的数据文件,例如数据库文件或其他本地文件。 App_Start:包含应用程序的启动配置文件,例如路由配置、日志配置等。 Content:存放应用程序的静态资源文件,如 CSS、JavaScript、图…...
一键批量转换,轻松将TS视频转为MP4视频,实现更广泛的播放和分享!
在享受精彩视频内容的同时,有时我们可能会面临一个问题:某些视频格式可能不太适合我们的播放设备或分享平台。特别是TS格式的视频,在一些情况下可能无法直接播放或上传。但是不用担心,因为我们为您提供了一款强大的视频剪辑工具&a…...
【Redis】使用Java客户端操作Redis
目录 引入jedis依赖连接Redis命令get/setexists/delkeysexpire/ttltype 引入jedis依赖 连接Redis 命令 get/set exists/del keys expire/ttl type...
BSPHP 未授权访问 信息泄露
漏洞描述 BSPHP 存在未授权访问 泄露用户 IP 和 账户名信息 漏洞复现 访问url: 构造payload访问: /admin/index.php?madmin&clog&atable_json&jsonget&soso_ok1&tuser_login_log&page1&limit10&bsphptime16004073…...
Learning Sample Relationship for Exposure Correction 论文阅读笔记
这是中科大发表在CVPR2023的一篇论文,提出了一个module和一个损失项,能够提高现有exposure correction网络的性能。这已经是最近第三次看到这种论文了,前两篇分别是CVPR2022的ENC(和这篇文章是同一个一作作者)和CVPR20…...
Vue项目 -- 解决Eslint导致的console报错问题
在利用vue-cli3构建的项目中引入eslint进行语法检查时,使用console.log(‘xxx’)时,控制台抛出了Unexpected console statement (no-console) 异常, 例:一使用console就提示报错 解决办法是: 在 .eslintrc.js 文件中…...
uni-app 在已有的数据对象中动态添加更多的数据对象
原数据对象 flowData: {list: [], // 数据值column: 2, // 瀑布列数columnSpace: 2 // 瀑布列宽间距 } 动态添加后的数据对象 flowData: {list: [], // 数据值column: 2, // 瀑布列数columnSpace: 2, // 瀑布列宽间距column_1: [],column_2: [] } 动态添加更多的数据对象的…...
模型参数、模型存储精度、参数与显存
模型参数量衡量单位 M:百万(Million) B:十亿(Billion) 1 B 1000 M 1B 1000M 1B1000M 参数存储精度 模型参数是固定的,但是一个参数所表示多少字节不一定,需要看这个参数以什么…...
HTML 列表、表格、表单
1 列表标签 作用:布局内容排列整齐的区域 列表分类:无序列表、有序列表、定义列表。 例如: 1.1 无序列表 标签:ul 嵌套 li,ul是无序列表,li是列表条目。 注意事项: ul 标签里面只能包裹 li…...
鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院挂号小程序
一、开发准备 环境搭建: 安装DevEco Studio 3.0或更高版本配置HarmonyOS SDK申请开发者账号 项目创建: File > New > Create Project > Application (选择"Empty Ability") 二、核心功能实现 1. 医院科室展示 /…...
Auto-Coder使用GPT-4o完成:在用TabPFN这个模型构建一个预测未来3天涨跌的分类任务
通过akshare库,获取股票数据,并生成TabPFN这个模型 可以识别、处理的格式,写一个完整的预处理示例,并构建一个预测未来 3 天股价涨跌的分类任务 用TabPFN这个模型构建一个预测未来 3 天股价涨跌的分类任务,进行预测并输…...
P3 QT项目----记事本(3.8)
3.8 记事本项目总结 项目源码 1.main.cpp #include "widget.h" #include <QApplication> int main(int argc, char *argv[]) {QApplication a(argc, argv);Widget w;w.show();return a.exec(); } 2.widget.cpp #include "widget.h" #include &q…...
Psychopy音频的使用
Psychopy音频的使用 本文主要解决以下问题: 指定音频引擎与设备;播放音频文件 本文所使用的环境: Python3.10 numpy2.2.6 psychopy2025.1.1 psychtoolbox3.0.19.14 一、音频配置 Psychopy文档链接为Sound - for audio playback — Psy…...
【Zephyr 系列 10】实战项目:打造一个蓝牙传感器终端 + 网关系统(完整架构与全栈实现)
🧠关键词:Zephyr、BLE、终端、网关、广播、连接、传感器、数据采集、低功耗、系统集成 📌目标读者:希望基于 Zephyr 构建 BLE 系统架构、实现终端与网关协作、具备产品交付能力的开发者 📊篇幅字数:约 5200 字 ✨ 项目总览 在物联网实际项目中,**“终端 + 网关”**是…...
优选算法第十二讲:队列 + 宽搜 优先级队列
优选算法第十二讲:队列 宽搜 && 优先级队列 1.N叉树的层序遍历2.二叉树的锯齿型层序遍历3.二叉树最大宽度4.在每个树行中找最大值5.优先级队列 -- 最后一块石头的重量6.数据流中的第K大元素7.前K个高频单词8.数据流的中位数 1.N叉树的层序遍历 2.二叉树的锯…...
佰力博科技与您探讨热释电测量的几种方法
热释电的测量主要涉及热释电系数的测定,这是表征热释电材料性能的重要参数。热释电系数的测量方法主要包括静态法、动态法和积分电荷法。其中,积分电荷法最为常用,其原理是通过测量在电容器上积累的热释电电荷,从而确定热释电系数…...
A2A JS SDK 完整教程:快速入门指南
目录 什么是 A2A JS SDK?A2A JS 安装与设置A2A JS 核心概念创建你的第一个 A2A JS 代理A2A JS 服务端开发A2A JS 客户端使用A2A JS 高级特性A2A JS 最佳实践A2A JS 故障排除 什么是 A2A JS SDK? A2A JS SDK 是一个专为 JavaScript/TypeScript 开发者设计的强大库ÿ…...
