当前位置: 首页 > news >正文

[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:图像中车轮与地面接触点的纵坐标
    • 直观上理解,离我们越近的物体它的纵坐标应该越靠近图像下方,越远的物体越靠图像上方
http://www.lryc.cn/news/192496.html

相关文章:

  • 【Docker 内核详解】namespace 资源隔离(三):PID namespace
  • 1600*C. Game On Leaves(博弈游戏树)
  • Apache Ant的安装
  • 考研:数学二例题--∞−∞和0⋅∞型极限
  • C++算法:图中的最短环
  • C++学习——类其实也是一种作用域
  • Seata入门系列【4】undo_log、global_table、branch_table、lock_table字段及作用详解
  • 虚幻引擎:数据表格的C++常用API
  • Java日期格式化(DateFormat类和SimpleDateFormat类)
  • centos 7 lamp owncloud
  • 屏幕亮度调节保护您的眼睛
  • CentOS Linux下CMake二进制文件安装并使用Visual Studio调试
  • ASP.net相关目录,相关配置文件和.后缀名解释
  • 一键批量转换,轻松将TS视频转为MP4视频,实现更广泛的播放和分享!
  • 【Redis】使用Java客户端操作Redis
  • BSPHP 未授权访问 信息泄露
  • Learning Sample Relationship for Exposure Correction 论文阅读笔记
  • Vue项目 -- 解决Eslint导致的console报错问题
  • uni-app 在已有的数据对象中动态添加更多的数据对象
  • 【LeetCode】17. 电话号码的字母组合
  • 使用 Apache Kafka 进行发布-订阅通信中的微服务
  • valarray 包含对象成员的类(cpp14章)
  • 2023双11笔记本电脑候选名单(截止2023.10.13的价格,双十一活动可能会更便宜一点)
  • Springcloud笔记(4)-客户端负载均衡Ribbon
  • MediaRecorder媒体录音机
  • 短视频如何批量添加水印
  • RT-Thread MQTT(学习)
  • Vue_Bug VUE-ELEMENT-ADMIN默认是英文模式
  • Spark中的Driver、Executor、Stage、TaskSet、DAGScheduler等介绍
  • docker的资源限制参数设置错误,导致的clickhouse性能瓶颈