首页 > 其他分享 >遥遥领先!BEVHeight++:针对路侧视觉3D目标检测新方案!

遥遥领先!BEVHeight++:针对路侧视觉3D目标检测新方案!

时间:2023-10-04 12:33:06浏览次数:34  
标签:BEVHeight ++ 图像 高度 路侧 深度 视觉 BEV 3D

前言 回归到地面的高度,以实现距离不可知的公式,从而简化仅相机感知方法的优化过程。在路侧camera的3D检测基准上,方法大大超过了以前所有以视觉为中心的方法。它比BEVDepth产生了+1.9%的NDS和+1.1%的mAP的显著改善。在nuScenes测试集上,方法取得了实质性的进步,NDS和mAP分别增加了+2.8%和+1.7%。

本文转载自自动驾驶之心

作者:汽车人

仅用于学术分享,若侵权请联系删除

欢迎关注公众号CV技术指南,专注于计算机视觉的技术总结、最新技术跟踪、经典论文解读、CV招聘信息。

CV各大方向专栏与各个部署框架最全教程整理

【CV技术指南】CV全栈指导班、基础入门班、论文指导班 全面上线!!

题目:BEVHeight++: Toward Robust Visual Centric 3D Object Detection

论文链接:https://arxiv.org/pdf/2309.16179.pdf

作者单位:清华大学,中山大学,菜鸟网络,北京大学

虽然最近的自动驾驶系统专注于开发自车辆传感器的感知方法,但人们往往忽视了一种利用智能路边摄像头将感知能力扩展到视觉范围之外的替代方法。作者发现,最先进的以视觉为中心的BEV检测方法在路边摄像头上的性能较差。这是因为这些方法主要集中在恢复关于相机中心的深度,在相机中心,汽车和地面之间的深度差随着距离的增加而迅速缩小。在本文中,作者提出了一种简单而有效的方法,称为BEVHeight++,来解决这个问题。本质上,作者回归到地面的高度,以实现距离不可知的公式,从而简化仅相机感知方法的优化过程。通过结合高度和深度编码技术,实现了从2D到BEV空间的更准确和稳健的投影。在路边摄像头的流行3D检测基准上,方法大大超过了以前所有以视觉为中心的方法。就自车辆场景而言,BEVHeight++具有优于仅深度的方法。

具体而言,在nuScenes验证集上进行评估时,它比BEVDepth产生了+1.9%的NDS和+1.1%的mAP的显著改善。此外,在nuScenes测试集上,方法取得了实质性的进步,NDS和mAP分别增加了+2.8%和+1.7%。

图1:(a)为了从单目图像中产生3D边界框,最先进的方法首先显式或隐式地预测每像素深度,以确定前景对象与背景的3D位置。然而,当我们在图像上绘制每像素深度时,我们注意到,当汽车远离相机时,车顶和周围地面上的点之间的差异会迅速缩小,这使得优化变得次优,尤其是对于远处的物体。(b) 相反,我们绘制了到地面的每像素高度,并观察到无论距离如何,这种差异都是不可知的,并且在视觉上更适合网络检测目标。然而,不能仅通过预测高度来直接回归3D位置。(c) 为此,我们提出了一个新的框架BEVHeight++来解决这个问题。经验结果表明,我们的方法在干净设置上超过了最佳方法5.49%,在嘈杂设置上超过28.2%。

网络结构

预测高度和深度的比较。(a) 概述了以前基于深度的方法和我们提出的基于高度的管道。请注意,本文提出了一种新颖的2D到3D投影模块。(b) 绘制每像素深度(顶部)和地面高度(底部)的直方图,可以清楚地观察到,深度范围超过200米,而高度在5米以内,这使得高度更容易学习。

目标在图像上的行坐标与其深度和高度之间的相关性。目标在图像中的位置,可以定义为(u,v),v坐标表示图像的行坐标。(a) 噪声设置的视觉示例,在正态分布中添加沿滚转和俯仰方向的旋转偏移。(b) 是深度分布的散点图。(c) 是指离地高度。可以发现,与深度相比,高度的噪声设置与其原始分布有更大的重叠,这表明高度估计更具鲁棒性。

BEVHeight++的总体框架,检测器由三个子网络组成,分别是基于深度的分支(青色)、基于高度的分支(绿色)和特征融合过程(灰色)。基于深度的pipeline使用估计的每像素深度来将图像视图特征提升为基于深度的BEV特征(基于D的BEV)。基于高度的pipeline将对图像视图中升力特征的地面高度预测应用于基于高度的BEV特征(基于H的BEV)。特征融合包括图像融合和鸟瞰融合。图像-视图融合通过级联高度分布和图像特征来获得融合的特征,这些特征用于后续的提升操作。鸟瞰图融合通过可变形交叉注意力从基于高度的BEV特征和基于深度的BEV特性中获得融合的BEV特点,然后将其用作检测头的输入。

实验结果

 

 

欢迎关注公众号CV技术指南,专注于计算机视觉的技术总结、最新技术跟踪、经典论文解读、CV招聘信息。

计算机视觉入门1v3辅导班

【技术文档】《从零搭建pytorch模型教程》122页PDF下载

QQ交流群:470899183。群内有大佬负责解答大家的日常学习、科研、代码问题。

其它文章

分享一个CV知识库,上千篇文章、专栏,CV所有资料都在这了

明年毕业,还不知道怎么做毕设的请抓紧机会了

LSKA注意力 | 重新思考和设计大卷积核注意力,性能优于ConvNeXt、SWin、RepLKNet以及VAN

CVPR 2023 | TinyMIM:微软亚洲研究院用知识蒸馏改进小型ViT

ICCV2023|涨点神器!目标检测蒸馏学习新方法,浙大、海康威视等提出

ICCV 2023 Oral | 突破性图像融合与分割研究:全时多模态基准与多交互特征学习

听我说,Transformer它就是个支持向量机

HDRUNet | 深圳先进院董超团队提出带降噪与反量化功能的单帧HDR重建算法

南科大提出ORCTrack | 解决DeepSORT等跟踪方法的遮挡问题,即插即用真的很香

1800亿参数,世界顶级开源大模型Falcon官宣!碾压LLaMA 2,性能直逼GPT-4

SAM-Med2D:打破自然图像与医学图像的领域鸿沟,医疗版 SAM 开源了!

GhostSR|针对图像超分的特征冗余,华为诺亚&北大联合提出GhostSR

Meta推出像素级动作追踪模型,简易版在线可玩 | GitHub 1.4K星

CSUNet | 完美缝合Transformer和CNN,性能达到UNet家族的巅峰!

AI最全资料汇总 | 基础入门、技术前沿、工业应用、部署框架、实战教程学习

计算机视觉入门1v3辅导班

计算机视觉交流群

聊聊计算机视觉入门

标签:BEVHeight,++,图像,高度,路侧,深度,视觉,BEV,3D
From: https://www.cnblogs.com/wxkang/p/17742135.html

相关文章

  • C++ bitset 用法和应用
    C++的bitset在bitset头文件中,它是一种类似数组的结构,它的每一个元素只能是0或1,每个元素仅用1bit空间。下面是具体用法构造函数bitset常用构造函数有四种,如下bitset<4>bitset1;//无参构造,长度为4,默认每一位为0bitset<8>bitset2(12);//长度为8,二进制保存,前......
  • C++ typedef用法详解
    typedef的语法描述 在现实生活中,信息的概念可能是长度,数量和面积等。在C语言中,信息被抽象为int、float和double等基本数据类型。从基本数据类型名称上,不能够看出其所代表的物理属性,并且int、float和double为系统关键字,不可以修改。为了解决用户自定义数据类型名称的需求,C语言......
  • C++ 初始化列表
    何谓初始化列表与其他函数不同,构造函数除了有名字,参数列表和函数体之外,还可以有初始化列表,初始化列表以冒号开头,后跟一系列以逗号分隔的初始化字段。在C++中,struct和class的唯一区别是默认的访问性不同,而这里我们不考虑访问性的问题,所以下面的代码都以struct来演示。structfoo......
  • C++ thread 互斥操作
    ThreadMutexstd::mutex是C++11最基本的互斥量,该类的实例化对象提供了资源独占所有权的特性,用于保护共享数据免受多个线程同时访问的同步原语。Mutex用法头文件#include<mutex>类型std::mutex最基础的Mutex类std::recursive_mutex递归的Mutex类std......
  • 关于Actor Component的思考--学习斯坦佛UE+C++
    跟着B站的视频学习,感觉自己的头很混乱。所以浅浅总结一下创建ActorComponent之后其的作用和相关操作。ActorComponent首先Component为一个组件,源码就是一个类的声明和类的实现。所以对其的操作就是对类的操作。可以在其源码内部定义一些物体属性,比如一个角色的Component。我们......
  • 十四天学会C++之第二天(函数和库)
    1.函数的定义和调用在C++中,函数是组织和结构化代码的关键工具之一。它们允许您将一段代码封装成一个可重复使用的模块,这有助于提高代码的可读性和维护性。为什么使用函数?函数在编程中的作用不可小觑。它们有以下几个重要用途:模块化编程:函数允许将代码划分为小的、独立的单元,使得......
  • C++ Thread 基础使用
    C++11Thread使用基础用法头文件#include<thread>函数初始化threadthread(<function_name>);线程分离thread.detach();线程阻塞thread.join()线程取消this_thread::yield();线程休眠this_thread::sleep_for(chrono::seconds(3));代码#in......
  • C++特种成员函数生成机制及相关原则
    C++特种成员函数生成机制及相关原则注:默认C++标准是C++11及以后的标准,因为C++11之前的标准定义的默认成员函数不包含移动构造函数和移动赋值运算符1.C++默认成员函数默认成员函数的定义:类中没有显示声明,在需要时由编译器自动生成的函数,包括默认构造函数、默认析构函数、......
  • 基于hash_table对STL unordered系列容器的封装 #C++
    概述本文对hash_table进行封装,以模仿SGISTL对unordered系列容器进行简单实现,旨在加深对C++封装与泛型技法的体会与理解。阅读本文之前,建议先对哈希表进行学习。unordered_map与map一样,unordered_map的所有元素类型都是pair,pair的第一个成员为Key,第二个成员为Value。因为Key在任何......
  • C++ 对拍详解 和解读
    对拍是什么#​对拍,是一个比较实用的工具。它能够非常方便地对于两个程序的输出文件进行比较,可以帮助我们实现一些自动化的比较输出结果的问题。​众所周知,几乎每一道编程题目,都会有某种正解能拿到满分;当我们想不出正解时,我们往往可以打暴力代码来获取部分分数。​但是,当我们觉......