@BangBang
这个作者很懒,什么都没留下…
展开
-
使用osmnx生成sdmap数据
OSMnx 是一个强大的 Python 库,用于从 [OpenStreetMap (OSM)](https://www.openstreetmap.org/) 下载地理空间数据并进行图形化分析。它支持自动从 OSM 获取和分析道路网络、建筑物、兴趣点 (POIs) 等数据,并且可以与 NetworkX 无缝集成。原创 2025-01-10 18:31:16 · 214 阅读 · 0 评论 -
利用grid sample优化BevDet
input:输入的特征图,形状为。grid:形状为的网格张量,对应为采样的归一化坐标。这是一个浮点数张量,其中每个位置存储目标输出的采样点。grid 的最后一维表示目标位置的 (x, y) 坐标,范围在 [-1, 1] 之间。mode:插值模式,通常是 bilinear 或 nearest。bilinear:双线性插值(默认值)。nearest:最近邻插值。padding_mode:处理超出边界的模式,zeros, border, reflection。原创 2024-10-20 20:46:47 · 615 阅读 · 0 评论 -
bev pool 原理及代码讲解
个视锥点对应的3d坐标(voxel/bev坐标系), 其中Nprime = B x N x D x H x W(相当于视锥点个数)。将bev特征沿着Z方向(dim=2)拍平,得到shape大小为(B,C,X,Y)大小的bev特征,比如(1,80,200,200)。bev_pool的目的是。对于感知算法而言,我认为比较重要的是要了解在Bev视角下,x轴和y轴方向的感知距离,以及Bev网格的大小。(1)基于 geom_feats在bev网格中的位置(x,y,z)和batch_id,对其进行排序。原创 2024-09-17 23:27:33 · 520 阅读 · 0 评论 -
算子加速(3):自定义cuda扩展
编写CUDA扩展的一般策略是首先编写一个C++文件,该文件定义了将从Python中调用的函数,并使用pybind11将这些函数绑定到Python。此外,这个文件还将声明在CUDA(.cu)文件中定义的函数。C++函数会进行一些检查,并最终将其调用转至CUDA函数。在CUDA文件中,我们编写我们实际的CUDA内核。包将负责用C++编译器(如gcc)编译C++源文件,以及用NVIDIA的nvcc编译器编译CUDA 源文件。这确保每个编译器都负责编译它最擅长的文件。最终,他们将链接成一个共享库。原创 2024-09-15 22:56:40 · 391 阅读 · 1 评论 -
算子加速(2):自定义c++扩展
(1) 用纯pytorch和python 实现我们需要的功能,看效果再决定要不要进一步优化(2) 明确优化方向,用c++(或cuda)重写部分代码(3) 用纯c++实现(4) 将模型的部分移动到CUDA内核来进一步加速,以便从GPU提供的大规模并行中受益。原创 2024-09-08 20:45:32 · 414 阅读 · 0 评论 -
算子加速(1): torch.autograd.Function的使用
在做Bev项目时,我们会发对于一些计算量非常大的算子,通常会通过CUDA进行加速实现,将cuda计算封装到一个动态库.so,然后提供给python调用,相对于原先的python加速能显著的提升计算效率。比如bev_pool就是通过这种方式实现离线计算和cuda并行,从而速度提升了几个量级bev_pool是Bev算法的关键的运算瓶颈,针对该问题工程上做了大量的性能优化,包括离线运算和cuda并行计算,从而实现bev_pool的计算加速。代码示例如下x,B,D,H,W,return out。原创 2024-09-08 17:46:17 · 581 阅读 · 0 评论 -
自动驾驶坐标转换(代码)
这两种方式都可以进行ego2bev转换,区别他们的坐标圆点不一样,从而图像会出现颠倒。lidar2cam的变换矩阵和lidar2ego 变换矩阵的获取,基本是一摸一样的的。(1)计算lidar2ego 变换矩阵。其中rotation 4元数,可以调用。经过转换,就将bev转到ego坐标系。(2) 计算转换矩阵(R+T)包,将它转换为矩阵的形式`(1) 在bev空间上绘制。(2) 在rv图像上绘制。为圆点的bev 坐标系。为圆点的bev 坐标系。(1) 以bev的。(2) 以bev的。原创 2024-09-05 15:12:43 · 326 阅读 · 0 评论 -
vscode c++和cuda开发环境配置
通过网盘分享的文件:vscode-cuda-cpp-demo-0828.zip。,从而在调试的时候,能够对修改过的最新代码进行及时的编译。对应的bear版本相对比较低,一般为2.4左右。配置好函数跳转,下一步配置GDB调试(debug)了,同时鼠标放在该函数上会有函数的提示信息。(2)根据源文件的目录,可以修改如下代码。此时原先不能高亮显示,或跳转的函数,就能。(4) make clean 命令。(2)bear make 命令。则对应的bear版本一般为。(1) make 命令。编译器的option。原创 2024-08-28 22:47:27 · 1180 阅读 · 0 评论 -
CUDA-BEVFusion(1): 环境安装
将TensorRT 8.5.3的安装包下载下来,注意需要注册一个Nvidia账号,登入账号才可以下载。, 因此可以11.8的CUDA 版本,尽量下载最新的。, 当我们想用另一个版本的cuda,我们将cuda的软链接指定到另一个版本就可以了。, 然后选择TensorRT 8.5 GA进行下载(GA 表示稳定版本)官网下载,默认下载的是最新版本的cuDNN,我们这里点击。,TensorRT是依赖于CUDA和CUDANN的。(2) 首先解压下载的cudnn包并进入该目录下。(1) 首先解压下载的cudnn包。原创 2024-08-25 19:56:28 · 469 阅读 · 0 评论 -
Bev 数据增强
, 在Bev坐标系下(ego)对3d 标签进行数据增强。原创 2024-08-04 13:49:39 · 273 阅读 · 0 评论 -
Bev系列算法总结
Lss Based的算法的发展过程,从多视角融合(BevDet) -> 时序融合的BevDet4D -> 点云深度监督(BevDepth)->MVS(BevStero)->长时序(SoloFusion)->recurrent 时序(VideoBev)从nusense的指标来看,BevDet的mAP是29.8,再到SoloFusin的42.7已经有10几个点的性能提升,一步步发展过来性能提升还是很明显的Video Bev 降低了计算复杂度的同时,还保证了感知性能不会降低。原创 2024-06-24 00:54:34 · 1042 阅读 · 0 评论 -
LATR 算法解读
其中point_query也就是self.point_embedding, 它是利用。经过reshape和permute将tensor大小由。经过forward前向计算得到的。保存到output字典中。进行flatten得到。(4)然后再经过全连接。得到tensor大小为。其中具体损失计算通过。原创 2024-06-22 09:48:45 · 716 阅读 · 0 评论 -
Bev感知:sparse query
2D to 3D主要以LSS-based方法为主,主要是系列。如下图为例,这种方法一般都会有一个depth估计的网络,还会有一个语义特征提取的分支。利用外积的操作及voxel pooling把提取的image的图像特征拍平到Bev空间上。可以发现它是比较依赖深度估计的准确度的,如果深度估计不准的话,它投到3D空间上会出现位置的偏差,后续Bev Head 基于有偏差的Bev特征,就容易不好refine 回来,容易出现误差累计的问题。原创 2024-06-18 13:12:50 · 675 阅读 · 0 评论 -
Bev 车道标注方案及复杂车道线解决
对于U型或环导线这种大曲率的车道线,用基于transformer或者使用maptr 两级query的方法,对学习大曲率的车道线会更容易点(很多量产方案也是这样解决的),用其他的范式基本上很难学习好这种大曲率的车道线,无法表达出这种大曲率的车道线(比如anchor based 或 lane af 算法本身是预定义了规则的,很难学习好这些不规则的车道线)那我们就可以看到被柱子遮挡住的后面的东西。相当于车在开的过程中,被前面的大卡车遮挡了,当前帧是看不见前面的车道线的,当通过前几帧,这段车道线是可以看得见的。原创 2024-06-04 21:03:20 · 1419 阅读 · 0 评论 -
Bev算法在J5平台的部署
支持多种形式的Bev算法:ipmlss时序,以及基于transformer的gkt。原创 2024-06-02 21:47:19 · 506 阅读 · 0 评论 -
Bev任务issue汇总
在做update的话,需要等异步任务结束后再去做update。将每次backward结果存起来,等所有任异步务结束后,再做update。主干训练完的话,进行冻结,然后针对各个head进行训练。多任务更偏向于算法框架,需要解决:(1)(前), 超过110米其实效果就已经很差了,90米距离效果也比较差。单orin有两个DLA, DLA 通常是放backbone。scale更新的频率和网络参数更新的频率是1:1。的问题,是很难做好的,尤其是。学深度分布depth。lift这种几何投影。不同源的数据是处理的。原创 2024-06-01 16:14:12 · 741 阅读 · 0 评论 -
BevDet(1): 算法原理介绍介绍
BevDet首先需要做image的特征提取,对应这部分。使用传统的ResNet-50或作为Backbone, 在Neck部分使用FPN或者FPN-LSS(简化版的FPN),对16倍和32倍特征进行融合,最终得到融合后的下采样16倍的特征。输入1690x900的图片经过Image View Encoder得到44x16x256的图像特征。BevDet的View Transformer也是一个比较典型的LSS过程,最终生成一个的Bev特征。原创 2024-05-29 18:54:41 · 912 阅读 · 0 评论 -
maptr(2):论文及代码解读
Maptr来自于地平线的一篇论文,其中maptr nano可以达到实时的速度,达到25.1FPS,比目前最快的提高了8倍的速度。传统的实时建图采样的是SLAM-based方法,会产生很多问题比如复杂的pipeline和维护成本高。其中HDMapNet算法可以构建, 但它需要大量后处理,是比较耗时的。VectorMapNet把每一个地图的实例都当做一堆点的序列,网络去预测这些点的序列,推理时间会比较慢。为了解决这些问题,maptr通过设计一种DETR范式的端到端来构建(没有后处理,速度快)。创新点。原创 2024-05-26 23:25:16 · 1545 阅读 · 0 评论 -
maptr(1): 环境安装
【代码】maptr(1): 环境安装。原创 2024-05-26 23:24:42 · 293 阅读 · 0 评论 -
bevformer详解(3): 逐行代码讲解
在这篇文章中,我们将从BEVFormer算法代码入手,深入探究BEV转换的流程。BEVFormer是一种基于Transformer的BEV转换模型,其核心思想是利用自注意力机制和交叉注意力机制,从,并通过Object Query与BEV特征的交互,完成3D目标检测和地图分割等任务。https://developer.baidu.com/article/details/3224715bevformer的网络结构由三部分组成, 模型结构所示,其中的是部分,对于的是的结构,对于部分,沿用的中的decoder部分,原创 2024-05-22 19:58:08 · 2890 阅读 · 0 评论 -
BevDet-4d(2): 环境安装及效果展示
使用nuscense。原创 2024-05-21 13:40:14 · 495 阅读 · 0 评论 -
bevformer详解(2): 环境搭建
解压下载的数据,并将。原创 2024-05-13 01:07:20 · 666 阅读 · 0 评论 -
bevformer详解(1):论文介绍
3D 视觉感知任务,包括基于多摄像头的3D检测和地图分割对于自动驾驶系统至关重要。本文提出了一种名为BEVFormer的新框架,它通过使用空间和时间的学习统一的BEV表示来支持多个自动驾驶感知任务。简而言之,BEVFormer通过预定义的网格形式的Bev Query与空间和时间空间交互来提取时间空间信息。为了聚合空间信息,BEVFormer设计空间交叉注意力(spatial cross-attention),每个BEV Query从不同摄像头的感兴趣区域中提取空间特征。对于时间信息。原创 2024-05-11 23:17:54 · 578 阅读 · 0 评论 -
LSS 讲解(2): 环境配置及训练代码讲解
对于感知算法而言,我认为比较重要的是要了解在Bev视角下,x轴和y轴方向的感知距离,以及Bev网格的大小。CamEncode通过对原始图像逐个图像特征点进行深度和语义的预测,输出视锥特征。, 其中根本bev划分,Z的值为1, 因此final的tensor大小为。论文中指的是规控任务中的轨迹输出,因此不包含在感知任务的讨论范围内。估计深度方向的概率分布,并输出特征图每个位置的语义特征(64维)注意: 生成的锥点,其位置是基于图像坐标系的,同时锥点是。, 我们需要对体素中的所有柱子根据它所在的位置和。原创 2024-05-11 19:10:39 · 917 阅读 · 0 评论 -
自动驾驶中常见坐标系极其转换
自车坐标系一般指的是以车体后轴中心为原点(因为后轴中心不会随着车摆动而发生相对变化),左前上或右前上的空间坐标系,左(右)一般为横向,前一般为纵向,上指地面以上空间,坐标系随着车运动而运动。相机相对其它坐标系,旋转+平移矩阵,其中旋转外参与上述欧拉角【yaw,patch,roll】,旋转顺序一般为(z-y-x), 单位度;图像坐标系到像素坐标系之间的转换没有旋转变换,没有投影变换,但是坐标原点位置不一致,大小不一致,则设计伸缩变换及平移变换 dx,dy 代表一个像素代表多少米。,单位以“像素”最为常用。原创 2024-05-08 16:27:32 · 584 阅读 · 0 评论 -
OpenLane数据及标注介绍
OpenLane是迄今为止第一个真实世界和最大规模的3D车道数据集。OpenLane包含20万帧、超过88万条实例级车道、14个车道类别(单白色虚线、双黄色实体、左/右路边等),以及场景标签和路线邻近目标(CIPO)标注。详见。OpenLane数据集是在自动驾驶领域的主流数据集上构建的。在1.0版本中,在Waymo开放数据集上发布了标注。OpenLane数据集侧重于车道检测和CIPO (OD)。我们注释了每一帧中的所有车道,如果中间没有路边,则包括相反方向的车道。除了车道检测任务,我们还注释:(a)原创 2024-03-27 21:52:08 · 548 阅读 · 0 评论 -
使用OpenXlab下载数据集(推荐)
进入OpenXlab官方,在下载模型或者数据集前必须先注册账号,然后登入个人账号。(1) 查找要下载的数据(2) 数据详情介绍针对查找到的数据集,提供了:、、以及(3) 数据集下载支持多种下载方式,包括直接在网站上下载,CLI 以及SDK 3种下载方式, 推荐使用SDK下载比较方便。在使用下载时, 需要先获得,包括:和 ,注册的时候就会自动帮忙分配, 然后命令中,通过传入和 对应的值, 就可以进行下载了。方式1:直接下载如下图,在中, 点击右侧的按钮,即可下载对应的数据方式2:CLI命令行下载原创 2024-03-27 21:16:32 · 1146 阅读 · 0 评论 -
BevFusion (5):逐行代码详解
论文中给出了Bevfusion的架构图,它的输入是多视角的相机和点云图,经过两个特定的head,分别用于做检测任务和分割任务。图1 Bevfusion 结构图Bevfusion因为有两个模态的输入:多视角相机和点云,所以对应两个分支:相机分支和点云分支。相机分支:输入6个视角的图片后,提取特征,然后经VT(View Transformer)转换之后得到相机的Bev特征。激光雷达分支:输入点云数据,经过Encoder编码得到体素化Lidar特征,然后沿z方向展平,得到Lidar Bev特征。原创 2024-03-23 18:33:52 · 2664 阅读 · 0 评论 -
BevFusion (4): BevFusion 环境搭建
论文:Multi-Task Multi-Sensor Fusion with Unified Bird’s-Eye View Representation代码: https://github.com/mit-han-lab/bevfusion或者直接下载. zip 项目代码创建版本的虚拟环境,后续在该虚拟环境中配置Bevfusion的环境(1) 安装torch1.8.1+cu111(2) 安装torchvison0.9.1 + cu1111.3 安装 mmdet3d 相关环境参考博客: ope原创 2024-02-28 20:52:34 · 1946 阅读 · 1 评论 -
BevFusion (3): BevFusion论文详解
我们提出了BEVFusion,一个高效和通用的框架,用于多任务多传感器3D感知。BEVFusion将摄像头和激光雷达特征统一在一个共享的BEV表示空间中,充分保留了两者几何和语义信息。为了实现这一目标,我们将的 camera-to-BEV的转换的速度加快了40倍以上。BEVFusion打破了长期以来的点级融合是多传感器感知系统的黄金选择的惯例。BEVFusion达到了最先进的水平在3D检测和BEV地图分割任务上的性能,计算量减少1.5-1.9倍,现有解决方案相比,速度提高了1.3-1.6倍。原创 2024-02-27 22:58:18 · 1785 阅读 · 0 评论 -
BevFusion (2): nuScenes 数据介绍及点云可视化
nuScenes 数据集 (pronounced /nu:ːsiː:nz/) 是由 Motional (以前称为 nuTonomy) 团队开发的自动驾驶公共大型数据集。nuScenes 数据集的灵感来自于开创性的 KITTI 数据集。nuScenes 是第一个提供自动驾驶车辆整个传感器套件(6 个摄像头、1 个 LIDAR、5 个 RADAR、GPS、IMU) 数据的大型数据集。与 KITTI 相比,nuScenes 包含的对象注释多了 7 倍。原创 2024-02-27 22:54:47 · 2902 阅读 · 0 评论 -
BevFusion (1): 传感器介绍
激光雷达,也称光学雷达(LIght Detection And Ranging)是激光探测与测距系统的简称,它通过测定传感器发射器与目标物体之间的传播距离,分析目标物体表面的反射能量大小、反射波谱的幅度、频率和相位等信息,从而呈现出目标物精确的三维结构信息。激光雷达是自动驾驶车辆的关键传感器,如下图所示,车辆上方旋转的圆柱体对应就是激光雷达传感器。原创 2024-02-27 22:52:37 · 1129 阅读 · 0 评论 -
LSS 讲解(1):论文及代码介绍
1、LSS的方法提供了一个很好的融合到BEV视角下的方法。基于此方法,无论是动态目标检测,还是静态的道路结构认知,甚至是红绿灯检测,前车转向灯检测等等信息,都可以使用此方法提取到BEV特征下进行输出,极大地提高了自动驾驶感知框架的集成度。2、虽然LSS提出的初衷是为了融合多视角相机的特征,为“纯视觉”模型而服务。但是在实际应用中,此套方法完全兼容其他传感器的特征融合。如果你想融合超声波雷达特征也不是不可以试试。1、极度依赖Depth信息的准确性,且必须显示地提供Depth 特征。原创 2024-02-27 17:40:55 · 2453 阅读 · 0 评论 -
BEV视觉3D感知算法梳理
这部分的实现逻辑与传统的Transformer的Decoder的逻辑类似,利用Cross-Attention模块将生成的3D空间下的Object Query和具有3D空间位置的语义特征进行交互,得到Output Embedding,然后利用FFN网络充当3D检测头实现最终的3D检测结果。原创 2023-01-03 13:40:10 · 5688 阅读 · 1 评论