[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: [] } 动态添加更多的数据对象的…...
XCTF-web-easyupload
试了试php,php7,pht,phtml等,都没有用 尝试.user.ini 抓包修改将.user.ini修改为jpg图片 在上传一个123.jpg 用蚁剑连接,得到flag...
Lombok 的 @Data 注解失效,未生成 getter/setter 方法引发的HTTP 406 错误
HTTP 状态码 406 (Not Acceptable) 和 500 (Internal Server Error) 是两类完全不同的错误,它们的含义、原因和解决方法都有显著区别。以下是详细对比: 1. HTTP 406 (Not Acceptable) 含义: 客户端请求的内容类型与服务器支持的内容类型不匹…...
MySQL 隔离级别:脏读、幻读及不可重复读的原理与示例
一、MySQL 隔离级别 MySQL 提供了四种隔离级别,用于控制事务之间的并发访问以及数据的可见性,不同隔离级别对脏读、幻读、不可重复读这几种并发数据问题有着不同的处理方式,具体如下: 隔离级别脏读不可重复读幻读性能特点及锁机制读未提交(READ UNCOMMITTED)允许出现允许…...
Qt Widget类解析与代码注释
#include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this); }Widget::~Widget() {delete ui; }//解释这串代码,写上注释 当然可以!这段代码是 Qt …...
2024年赣州旅游投资集团社会招聘笔试真
2024年赣州旅游投资集团社会招聘笔试真 题 ( 满 分 1 0 0 分 时 间 1 2 0 分 钟 ) 一、单选题(每题只有一个正确答案,答错、不答或多答均不得分) 1.纪要的特点不包括()。 A.概括重点 B.指导传达 C. 客观纪实 D.有言必录 【答案】: D 2.1864年,()预言了电磁波的存在,并指出…...
Nginx server_name 配置说明
Nginx 是一个高性能的反向代理和负载均衡服务器,其核心配置之一是 server 块中的 server_name 指令。server_name 决定了 Nginx 如何根据客户端请求的 Host 头匹配对应的虚拟主机(Virtual Host)。 1. 简介 Nginx 使用 server_name 指令来确定…...
Spring Boot面试题精选汇总
🤟致敬读者 🟩感谢阅读🟦笑口常开🟪生日快乐⬛早点睡觉 📘博主相关 🟧博主信息🟨博客首页🟫专栏推荐🟥活动信息 文章目录 Spring Boot面试题精选汇总⚙️ **一、核心概…...
第 86 场周赛:矩阵中的幻方、钥匙和房间、将数组拆分成斐波那契序列、猜猜这个单词
Q1、[中等] 矩阵中的幻方 1、题目描述 3 x 3 的幻方是一个填充有 从 1 到 9 的不同数字的 3 x 3 矩阵,其中每行,每列以及两条对角线上的各数之和都相等。 给定一个由整数组成的row x col 的 grid,其中有多少个 3 3 的 “幻方” 子矩阵&am…...
AI,如何重构理解、匹配与决策?
AI 时代,我们如何理解消费? 作者|王彬 封面|Unplash 人们通过信息理解世界。 曾几何时,PC 与移动互联网重塑了人们的购物路径:信息变得唾手可得,商品决策变得高度依赖内容。 但 AI 时代的来…...
Docker 本地安装 mysql 数据库
Docker: Accelerated Container Application Development 下载对应操作系统版本的 docker ;并安装。 基础操作不再赘述。 打开 macOS 终端,开始 docker 安装mysql之旅 第一步 docker search mysql 》〉docker search mysql NAME DE…...
