首页 > 其他分享 >BEVDet的进阶BEVPoolv2:A Cutting-edge Implementation of BEVDet Toward Deployment

BEVDet的进阶BEVPoolv2:A Cutting-edge Implementation of BEVDet Toward Deployment

时间:2024-02-20 10:47:23浏览次数:34  
标签:进阶 Implementation BEVPoolv2 索引 作者 BEVDet 方法 锥体

论文地址:

https://arxiv.org/pdf/2211.17111.pdf​ arxiv.org/pdf/2211.17111.pdf

代码地址:

GitHub - HuangJunJie2017/BEVDet: Official code base of the BEVDet series .​ github.com/HuangJunJie2017/BEVDet/tree/dev2.0

整体思想:

作者从工程优化的角度考虑优化BEVDet,提出了BEVPoolv2,优化视图转换过程,使其在计算和存储方面降低消耗。它通过省略视锥体特征的计算和预处理来实现这一点。处理640 * 1600的分辨率仅需要0.82ms,比之前的方法快了15.1倍. 此外,与以前的实现相比,它的缓存消耗也更少,这自然是因为它不再需要存储大型视锥体特性,这也使部署到其他平台变得更方便。作者还提供了一个部署到tensorrt的例子,并展示了运行速度。除了BEVPoolv2,作者还选择并集成了过去一年中提出的一些实质性进展。作为示例配置,BEVDet4D-R50-Depth-CBGS在NuScenes验证集上的得分为52.3 NDS,使用PyTorch可以以16.4FPS的速度进行处理。

背景

在自动驾驶中多camera的3D目标检测是一个基础任务,当前已有大量的方法在研究3D目标检测。作者提出了一个叫做bevDet2.0的3D目标检测方法,这是一个面向部署的,在速度和精度方面都做的很好的一个方法。

动机

LSS的方法的缺点是它必须进行计算、存储、预处理大尺度的视锥体特征,这个视锥体的尺度为(N,D,H,W,C),N是相机数量,D是深度,H和W分别是特征的高和宽,C是特征的通道数。如图1左图所示。

图1 左边是LSS的计算抽象图 右边是本文提出来的BEVPoolv2加速视图转换的方法示意图

很多基于LSS的方法,都无法避免这种大量的计算,比如BEVFusion,虽然使用多线程进行加速了,但是本质上计算量没有减少,BEVDepth和BEVStereo也是采用了LSS的视图转化方法。如图2和图3所示

图2 不同特征深度和分辨率下,推理速度的对比 图3 不同深度和分辨率下,内存消耗的对比

由图可以看出作者的方法可以很大程度上避免内存消耗,优化速度,这也是为工程部署所做的贡献。

作者方法

作者方法的idea很简单,如图1右图所示,作者只使用视锥体点的索引作为它们的轨迹,并使用它们的体素索引单独进行预处理。然后根据视锥体索引访问处理线程中视锥体点特征的值。通过这种方式,不会再有视锥体特征的计算、存储和预处理。因此,可以节省内存和计算,并且可以进一步加快推理速度。体素索引和视锥体索引都可以离线预计算和预处理。在推断过程中,它们只是充当固定参数。也就是说体素索引和视锥体索引都是一一对应的,且是固定的,可以提前计算出来。从图中可以看出,这个方法超快,已经远远优于其他的方法,这使得视图转换不再是BEV的瓶颈。作者的方法取得了52.3的NDS

Tensorrt的部署

作者方法支持Tensorrt的部署,下表为推理速度,硬件平台就是3090 使用resnet50进行推理,下表是推理显示地应该是一个sample需要的时间

标签:进阶,Implementation,BEVPoolv2,索引,作者,BEVDet,方法,锥体
From: https://www.cnblogs.com/jimchen1218/p/18022559

相关文章

  • 03 进阶篇-高阶数据类型BitMaps、HyperLogLogs
    BitMaps介绍BitMaps的基本概念,它是一种通过位来表示数据的方法,能高效地处理大量布尔值。展示BitMaps在用户在线状态、统计等方面的应用示例。介绍相关的命令,如SETBIT,GETBIT,BITCOUNT,BITOP等。BitMaps的基本概念BitMaps,或称为位图,是Redis中用于高效处理大量布尔值的......
  • 前端知识回顾概览--ES进阶
    了解ES新增特性并熟悉1. ES6规范详解ECMAScript规范发展简介ES6新增API解析&&ESNext规范中的API解析generator/asyncawait简介函数进阶(箭头函数、默认参数)模板字符串对象和数组的扩展用法Proxy、Reflect、Map、Set、Symbolfor...of、迭代器模式、生成......
  • 从零开始的 dbt 入门教程 (dbt core 开发进阶篇)
    引在上一篇文章中,我们花了专门的篇幅介绍了dbt更多实用的命令,那么我们继续按照之前的约定来聊dbt中你可能会遇到的疑惑以及有用的概念,如果你是dbt初学者,我相信如下知识点一定会对你有极大的帮助:了解dbt_project配置文件,以及不同字符的作用了解dbt工程化,为dev以及......
  • RK3568驱动指南|驱动基础进阶篇-进阶6 内核运行ko文件实验——系统调用
    瑞芯微RK3568芯片是一款定位中高端的通用型SOC,采用22nm制程工艺,搭载一颗四核Cortex-A55处理器和MaliG522EE图形处理器。RK3568支持4K解码和1080P编码,支持SATA/PCIE/USB3.0外围接口。RK3568内置独立NPU,可用于轻量级人工智能应用。RK3568支持安卓11和linux系统,主要面向......
  • 7.NET中GRPC进阶,可空类型,返回集合
     1.添加两个类,一个类型可空,一个不可空publicclassPerson1{publicintId{get;set;}publicdoubleMoney{get;set;}publicfloatWeight{get;set;}publicboolGender{get;set;}publiclongPhoneNum{get;set;}publicst......
  • 【Vue前端】vue使用笔记0基础到高手第2篇:Vue进阶知识点介绍(附代码,已分享)
    本系列文章md笔记(已分享)主要讨论vue相关知识。Vue.js是前端三大新框架:Angular.js、React.js、Vue.js之一,Vue.js目前的使用和关注程度在三大框架中稍微胜出,并且它的热度还在递增。Vue.js是一个轻巧、高性能、可组件化的MVVM库,同时拥有非常容易上手的API。Vue.js是一个构建数据驱动......
  • 大数进阶(3)——稳定(单段)
    前言接下来的稳定序数是真正的空白地带,其行为多种多样,层级复杂嵌套,并且还没有被完全解析\(\Sigma_1\)稳定定义定义:若\(L_\alpha\prec_{\Sigma_1}L_\beta\),则称\(\alpha\)是\(\Sigma_1\)稳定(stable)序数,\(\alpha\)稳定到\(\beta\),记为\(\lambda\alpha.\beta\)或者\(\alpha\ri......
  • 大数进阶(2)——反射($\Pi_2$及其上)
    前言\(\Pi_1\)反射看上去行为非常简单,强度也不高,那为什么要用这种奇怪的东西?真正上强度是从\(\Pi_2\)反射开始,随着强度的大幅度提升,序数的行为逐渐复杂,这需要对其行为更深刻的理解,也即对于数学基础的更高要求在进入\(\Pi_2\)反射之前,需要更多的基础来往后推进,否则只会一头雾水......
  • 线段树进阶
    线段树进阶动态开点定义动态存储数据的线段树,可以优化空间复杂度实现为了避免\(N<<1\),不再使用完全二叉树存储,而记录左右儿子\(ls,rs\)此外需要\(tot\)记录已经开了多少点在递归时要记录点的左右区间,确保开点时能知道区间大小voidmodify(int&p,intL,intR,intl,i......
  • 线段树进阶
    线段树进阶线段树分治P5787判断二分图可以用扩展域并查集,采用线段树分治,线段树上的每一个结点作为每一段时间。每个结点上的修改和回溯需要用到可撤销的并查集。时间复杂度\(O(n\logk\logn)\)扫描线扫描线求矩形面积#include<bits/stdc++.h>usingnamespacestd;typ......