觉非科技数据闭环系列 | BEV感知研发实践
随着自动驾驶迈向量产场景,“BEV感知+数据闭环”已成为新一代自动驾驶量产系统的核心架构。数据成为了至关重要的技术驱动力,发挥数据闭环的飞轮效应或将成为下半场从1到N的胜负关键。
觉非科技在此方面已进行了大量的研究工作,并在实际量产项目中开始了部分技术的应用。结合这些实践的经验,觉非科技感知算法专家戚玉涵博士近期在「生成式AI热潮下的自动驾驶」技术论坛中进行了分享,系统介绍了觉非科技“BEV感知+数据闭环”技术架构与研发进展。
一.觉非科技的数据闭环
Fig.1觉非基于BEV感知的量产架构图
- 觉非科技利用离线高精地图生成静态要素真值数据,用于训练基于BEV的静态要素感知模型;将模型部署于车端,实时推理时产生静态要素的栅格图结果并上传云端,在云端对栅格图进行SLAM拼接以及矢量化等后处理,通过量产化制图能力产生大规模的高精度地图数据库,进而实现静态要素的数据闭环。
- 觉非构建的大数据中心可实现快速不断的迭代,供给生成BEV感知算法的训练数据。觉非BEV感知任务包括三个部分:动态目标的3D检测与跟踪、静态要素的分割、以及静态要素的拓扑结构矢量图。
觉非的采集车配备7V相机(其中,采集车前向安装一台长焦相机,主要用于感知远距离目标),以及一台128线束的激光雷达。目前依赖点云检测来生成视觉BEV 3D动态目标感知的真值数据,其高度依赖于高精度的传感器标定和时空同步。
Fig.2相机软件触发与硬件触发数采方式下,训练模型BEV 3D感知效果对比图
上图:相机软件触发方式采集训练数据的BEV 3D模型推理结果
下图:相机根据LiDAR相位角触发方式采集训练数据的BEV 3D模型推理结果
为此,觉非科技自研了基于高精地图的点云与相机的外参标定技术,同时依靠自研GNSS授时和根据LiDAR相位角硬件触发相机采集的同步板卡,对激光雷达和相机进行硬件同步,保证了BEV动态目标3D感知结果的位置精度。
二.觉非科技对BEV感知算法的优化方式
觉非BEV多任务联合感知算法的框架中,先将车周环视相机的图像接入BEV编码器,其结构包括backbone与neck,用于较好地提取图像特征;经视角变换模块得到稠密的BEV特征,与缓存的历史帧BEV特征一起送入时序融合模块,进行时序BEV特征聚合,时序融合能够提高被遮挡的动态目标的召回率,且提高视觉感知方式下目标速度的检测精度。
针对不同的感知任务,由BEV feature sampler设定不同的感知范围和BEV网格的粒度,对采样后的BEV特征进行解码和task head,得到最终动态目标3D检测和静态要素栅格图语义分割结果。
Fig.3觉非BEV多任务联合感知模型框架图
在算法持续迭代的进程中,觉非的主要优化方向包含几个方面:
1.视角转化(view transform)
目前学界在视角转换上存在很多范式,主流的方法主要包括LSS、MLP、Transformer
等。在考虑部署的便利性以及硬件平台对算子的支持等因素后,觉非选用的是LSS范式。
LSS范式下,视角变换模块利用depthnet网络输出两组信息,一是每一个像素点对应的图像上下文语义特征,其次是每个像素点上预测的深度分布,两路信息进行外积后可得出各个相机的视锥体(frustum)中每个像素点的上下文特征信息,从而实现2D到3D的提升。视角变换模块在工程化部署的方式上有两种方式:
Fig.4觉非视角转化模块
- 对于Nvidia的芯片,对每个像素点的上下文语义特征与估计得到的深度分布权重和进行外积实现Lifting,得到描述各个相机视锥体特征的到五维向量(B*N,c,d,h,w),而后根据相机参数将各个相机视锥体的特征splat到BEV视角下,可调用英伟达CUDA Kernal的多线程做并行加速来实现BEV的Pooling,得到聚合后的稠密BEV特征。
- 对于地平线J5芯片,根据车机视觉模组内外参数可预先计算出视锥体中每一个像素点与BEV网格唯一的哈希映射关系,而后在BEV网格进行特征聚合时,根据预设好的映射关系通过视锥体中像素点的索引值分别提取上下文特征和深度值进行相乘,所有BEV网格内的特征进行张量的求和,从而实现特征聚合。
BEV pooling过程中的预先计算视锥点与BEV网格,可以在节约推理耗时,保证了模型在车端部署的实时性。例如,在实际落地实践中,觉非的BEV 3D感知可实现自车前后80米、左右40米范围,哈希映射计算前置与BEV pooling的并行加速节约耗时可达到16毫秒。
2.相机视椎体切割(Camera Frustum Cutting)
在BEV pooling环节中,可以根据预设的感知范围对参与BEV特征聚合的各个相机的视锥体进行裁剪,仅保留BEV感知范围内的视锥点参与特征聚合,可以节约参与BEV pooling的计算量。
3.远距离感知(Long-distance Perception Range)
学界在BEV 3D感知上一般可实现车周半径51.2m(nuScenes数据集),或是75m(waymo数据集),而在真实的量产实践中,感知范围远远不能满足下游规划控制的需求。
觉非科技的BEV感知方案中,除6v环视相机以外,在自车前视方向增加了1台长焦相机,可以感知远距离的目标;同时设计了一种非均匀粒度分布的BEV网格,在扩大BEV感知范围的同时,不额外增加过多的网格数量和模型计算量;同时引入点云数据对相机视锥点深度估计的显式监督,能保证模型对远距离动态目标的召回与较为精确的空间位置。
4.BEV坐标样本BEV Grid Sampler
觉非的BEV感知为多任务联合训练模型,感知任务包含对动态目标的3D检测与跟踪,静态要素的语义分割。其中静态要素的语义分割任务中,高分辨率的BEV特征是保证地面要素检测精度的前提。
因此在模型的设置上,觉非加入了BEV Grid Sampler模块,在对BEV特征解码前,该模块根据设定的地面要素感知的范围,对稠密BEV特征进行裁剪,并利用双线性差值方式对BEV特征上采样还原得到高精度、精细化的BEV特征。
Fig.5 BEV网格采样器示意图
在联合训练的过程中,为避免同时训练不同任务对各个子任务性能的负面影响(一般称为:负迁移),觉非的联合训练模型中对不同的感知子任务设计了独立解码器,在解码过程中,各任务不共享BN(Batch Normalization)层的参数,可提升联合训练模型的稳定性并降低负迁移的影响。
Fig.6多任务联合训练策略
5.基于MapTR的创新与优化
在车端与路端大规模数据积累的基础上,觉非基于MapTR提出了相应创新优化,其中包括:
①对车道信息的表达方式进行优化,采用车道中心线进行表征并加入道路拓扑要素的建模;
②在不额外增加解码器query数量的基础上,通过回归车道宽度的方式还原车道标线的几何位置;
③学习车道线的虚实信息,可用于变道时判断旁边车道是否可以跨越;
④加入车道方向信息的学习,用于区分自车车道与对向车道;
⑤在MapTR的基础上加入了地图先验信息,有效提升模型输出地图元素的准确度与召回率。觉非对MapTR的创新能够系统化提升单车实时建图的能力,更易于自动驾驶规控使用。
Fig.7在线矢量化地图构建
目前觉非科技正在对“BEV感知+数据闭环”进行持续的优化,通过数据与算法的自研经验,以及在数据闭环搭建过程中大量的Know-How积累,为开发和迭代提供一套高效的工具链,并提升模型的泛化能力,在自动驾驶「数据驱动」的时代,推动数据闭环在量产车不断落地。
相关文章:

觉非科技数据闭环系列 | BEV感知研发实践
随着自动驾驶迈向量产场景,“BEV感知数据闭环”已成为新一代自动驾驶量产系统的核心架构。数据成为了至关重要的技术驱动力,发挥数据闭环的飞轮效应或将成为下半场从1到N的胜负关键。 觉非科技在此方面已进行了大量的研究工作,并在实际量产项…...

程序员情绪把控
文章目录 建议情绪 建议 保持稳定的情绪在工作中非常重要,以下是一些建议: 自我意识:保持对自己情绪的觉察和理解,了解自己的情绪状态和触发情绪的因素。通过自我反省和观察,你可以更好地管理和调节情绪。 健康生活方…...

弱监督目标检测:ALWOD: Active Learning for Weakly-Supervised Object Detection
论文作者:Yuting Wang,Velibor Ilic,Jiatong Li,Branislav Kisacanin,Vladimir Pavlovic 作者单位:Rutgers University;The Institute for Artificial Intelligence Research and Development of Serbia;Nvidia Corporation 论文链接:http:…...

驱动开发 day3
总结:自动创建设备节点udev的流程 1.如何创建节点 手动创建:mknod 地址 设备文件类型 主设备号 次设备号(0 - 255) 自动创建:devfs (创建节点的逻辑在内核 ---> 2.4版本以前使用) udev (创建节点的逻辑在应用层) mdev (轻量级的udev) 2.…...

许可license分析 第一章
许可分析是指对软件许可证进行详细的分析和评估,以了解组织内部对软件许可的需求和使用情况。通过许可分析,可以帮助组织更好地管理和优化软件许可证的使用。以下是一些可能的许可分析方法和步骤: 收集许可证信息:首先,…...

Goby 漏洞发布|管家婆订货易在线商城 SelectImage.aspx 文件上传漏洞
漏洞名称:管家婆订货易在线商城 SelectImage.aspx 文件上传漏洞 English Name: GJP SelectImage.aspx file upload vulnerability CVSS core: 9.8 影响资产数:2617 漏洞描述: 任我行率先针对中小企业推出了管家婆进销存、财务…...

Android屏幕录制
这里使用Java语言编写实现,完整代码如下: 文件 AndroidMainfest.xml 的主要配置 <?xml version"1.0" encoding"utf-8"?> <manifest xmlns:android"http://schemas.android.com/apk/res/android"package"…...

实在智能牵手埃林哲,“TARS-RPA-Agent+云时通”双剑合璧共推企业数字化转型
近日,《数字中国建设整体布局规划》进一步明确了数字化发展的方向和节奏,对企业数字化建设提出了新要求。回看过去几十年,信息化建设如火如荼,各类IT系统如雨后春笋般涌现,系统的自动化操作及系统间数据交互共享等需求…...

拥有这个中文版CustomGPT,你也能定制自己的AI问答机器人
人工智能技术的快速发展为各行各业带来了前所未有的机会,其中之一就是定制化的问答机器人。这些机器人可以用于客户支持、知识管理、虚拟助手等多个领域,帮助企业提高效率,提供更好的用户体验。很多人可能都知道通过CustomGPT能够设计自己的人…...

fastadmin 基本使用配置
fastadmin 版本 1.3.5 thinkphp 版本 5.0.25 配置 cache 为 redis 保存 // ---------------------------------------------------------------------- // | 缓存设置 // ---------------------------------------------------------------------- cache …...

netty 线程组
我们的bossgroup和workgroup都是使用的NioEventLoopGroup。其内部有一个EventExecutor类型的数组用来存储所有的线程组。 NioEventLoopGroup {EventExecutor[] children; }NioEventLoopGroup继承自MultithreadEventExecutorGroup,构造函数不指定线程数默认会根据系…...

Reactor 第十二篇 WebFlux集成PostgreSQL
1 引言 在现代的应用开发中,数据库是存储和管理数据的关键组件。PostgreSQL 是一种强大的开源关系型数据库,而 WebFlux 是 Spring 框架提供的响应式编程模型。本文将介绍如何使用 Reactor 和 WebFlux 集成 PostgreSQL,实现响应式的数据库访问…...

红队打靶:Me and My Girlfriend打靶思路详解(vulnhub)
目录 写在开头 第一步:主机发现和端口扫描 第二步:Web渗透(修改XFF代理) 第三步:数据库手工枚举 第四步:sudo php提权 总结与思考 写在开头 本篇博客在自己的理解之上根据大佬红队笔记的视频进行…...

Mysql高级——索引(2)
常见索引 索引分类 在MySQL数据库,将索引的具体类型主要分为以下几类:主键索引、唯一索引、常规索引、全文索引。 分类含义特点关键字主键索引针对于表中主键创建的索引默认自动创建, 只能有一个PRIMARY唯一索引避免同一个表中某数据列中的值重复可以…...

【史上最硬核分享】Docker+jenkinsPipeline 运行实现 python 自动化(超详细)
一、实现思路 在 Linux 服务器安装 docker创建 jenkins 容器jenkins 中创建 pipeline 项目根据自动化项目依赖包构建 python 镜像(构建自动化 python 环境)运行新的 python 容器,执行 jenkins 从仓库中拉下来的自动化项目执行完成之后删除容器 二、环境准备 Linu…...

leetcode 3. 无重复字符的最长子串
2023.9.15 本题我用的暴力双层for循环 unordered_set 解决的,外循环控制字符起始位置,内循环将字符放入 unordered_set,并查找有无重复的元素。 用了一个全局变量记录最长字串的长度,局部变量count记录当前层循环的最长子串长度…...

doccano 文本标注工具使用
最近在做面向大模型的文本标注工作,涉及到多人协同的问题,因此用到了doccano工具。 这个工具可以使用docker进行安装,安装之后的启动也都比较简单。 关于基础使用(例如管理员登录、新建任务、上传数据集等)ÿ…...

快速排序算法的递归和非递归
基本思路 选择一个基准值,将数组划分三个区域,小于基准值的区域位于左侧,等于基准值的区域位于中间,大于基准值的区域位于右侧。将大于和小于区域继续进行分区,周而复始,不断进行分区和交换,直…...

Maven无法拉取SNAPSHOT依赖的解决办法
背景 自己所在的部门主要是为其他项目组提供基础组件,如果需要使用新特性,其他项目组还会经常引用SNAPSHOT版本的组件进行开发测试。平时自己做测试的时候,因为手里有源码,所以每次都是先执行 mvn install 在本地安装后ÿ…...

day16-面向对象综合练习(上)
1. 设计游戏的目的 锻炼逻辑思维能力利用Java的图形化界面,写一个项目,知道前面学习的知识点在实际开发中的应用场景 2. 游戏的最终效果呈现 Hello,各位同学大家好。今天,我们要写一个非常有意思的小游戏 —《拼图小游戏》 我们…...

在Windos 10专业版搭建Fyne(Go 跨平台GUI)开发环境
目录 在Windos 10专业版搭建Fyne(Go 跨平台GUI)开发环境一 Fyne 和 MSYS2简介1.1 Fyne1.2 MSYS2 二 安装 MSYS22.1 下载MSYS22.2 安装2.3 环境变量设置2.4 检测安装环境 三 参考文档 在Windos 10专业版搭建Fyne(Go 跨平台GUI)开发…...

漫谈:C、C++字符串的困局
由于历史的原因,C、C字符串是个很让程序员头疼的东西。 字符串被解读为字符数组,但是又不等价于字符数组,而是带有附加的结束符的字符数组。 结束符‘\0’也是一个字符,但是又不计算在字符串长度里面(strlen࿰…...

基于python+selenium的自动批量添加
场景 点击添加”新增“按钮,弹出”新增对话框“,输入各种数据,然后点击”确定“按钮,如此循环。数量多,这样操作累人。 selenium Selenium 是一个用于自动化 Web 浏览器操作的库,可以实现模拟点击、输入…...

gdb监视
怀疑踩内存了,如何利用gdb监视一段内存的值 在实际情况中,如果怀疑一个进程中的变量被踩内存了,但是不知道什么时候会被踩,就可以用下面的方法进行debug。GDB(GNU Debugger)是一个功能强大的调试工具&…...

STM32基础知识点总结
一、基础知识点 1、课程体系介绍 单片机概述arm体系结构STM32开发环境搭建 STM32-GPIO编程-点亮世界的那盏灯 STM32-USART串口应用SPI液晶屏 STM32-中断系统 STM32-时钟系统 STM32-ADC DMA 温湿度传感器-DHT11 2.如何学习单片机课程 多听理论、多理解、有问题及时提问 自己多…...

Python vs C#:首先学习哪种编程语言最好?
进入编码可能很困难。 最艰难的部分? 决定先学什么语言。 当谈到 Python 与 C# 时,可能很难知道在您的决定中要考虑哪些因素。 我们为您提供了有关这些全明星编程语言的所有信息。 什么是 C#? 自 2000 年作为 Microsoft Visual Studio 的一部分开发 C# 以来,它一直是开发人…...

代理IP和Socks5代理:跨界电商与全球爬虫的关键技术
跨界电商在全球化市场中崭露头角,而代理IP和Socks5代理则成为实现全球市场洞察和数据采集的不可或缺的工具。本文将深入探讨这两种代理技术在跨界电商、爬虫技术和出海战略中的关键作用。 引言: 介绍跨界电商的崛起和全球市场的机遇与挑战。引出代理IP…...

CentOS 7 调优之周期性的访问中断
文章目录 背景问题描述原因分析解决方案相关版本 背景 操作系统版本:CentOS Linux release 7.6.1810 (Core) 操作系统镜像安装后,未进行任何调整。正常部署应用,应用在 CentOS 7.9 未出现过此类现象。 问题描述 问题描述:负载教…...

SpringBoot表现层数据一致性
1.定义Restful类 说明:使用Data注解是Lombok库提供的一个注解,用于自动生成类的getter、setter、equals、hashcode和toString方法。 package com.forever.controller.utils;import lombok.Data;Data public class Restful {private Boolean flag;//dat…...

vue路由-两个树形结构数据-递归处理方法
1.vue静态路由 const dynamicRoutes [{path: /,name: /,component: () > import(//layout/index.vue),redirect: /home,meta: {isKeepAlive: true,},children: [{path: /home,name: home,component: () > import(//views/home/index.vue),meta: {title: 首页,isLink: ,…...