使用OpenPCDet训练与测试多传感器融合模型BEVFusion,OPenPCdet代码架构介绍

引言

在自动驾驶领域,多传感器融合技术是一种常见的方法,用于提高感知系统的准确性和鲁棒性。其中,BevFusion是一种流行的融合方法,可以将来自不同传感器的数据进行融合,生成具有丰富信息的鸟瞰图(BEV)表示。在本文中,我们将介绍如何使用OpenPCdet框架训练和测试多传感器融合BevFusion

环境搭建与数据准备
  1. 安装OpenPCDet: 确标Python环境,确保安装PyTorch及OpenPCDet。克隆仓库后,执行依赖安装。

    参考:安装、测试和训练OpenPCDet:一篇详尽的指南

  2. nuScenes数据集: 从官方网站下载数据集,包含LiDAR、相机图像、雷达等多模态数据,为训练和评估准备。存放到相应的路径。

​        参考:nuscenes生成数据信息info

模型训练
#单个GPU
python train.py --cfg_file ./cfgs/nuscenes_models/bevfusion.yaml
#多GPU
sh scripts/dist_train.sh 3 --cfg_file ./cfgs/nuscenes_models/bevfusion.yaml
模型测试
python test.py --cfg_file ./cfgs/nuscenes_models/bevfusion.yaml --batch_size 4 --ckpt ../checkpoints_office/cbgs_bevfusion.pth
mAP: 0.5754
mATE: 0.3975
mASE: 0.4431
mAOE: 0.4555
mAVE: 0.4208
mAAE: 0.3252
NDS: 0.5835
Eval time: 2.6sPer-class results:
Object Class    AP    ATE    ASE    AOE    AVE    AAE
car    0.920    0.165    0.157    0.090    0.112    0.068
truck    0.778    0.144    0.149    0.017    0.104    0.011
bus    0.995    0.152    0.069    0.028    0.540    0.395
trailer    0.000    1.000    1.000    1.000    1.000    1.000
construction_vehicle    0.000    1.000    1.000    1.000    1.000    1.000
pedestrian    0.931    0.120    0.252    0.298    0.204    0.126
motorcycle    0.690    0.185    0.256    0.342    0.051    0.000
bicycle    0.535    0.153    0.197    0.324    0.355    0.000
traffic_cone    0.906    0.055    0.351    nan    nan    nan
barrier    0.000    1.000    1.000    1.000    nan    nan
2024-06-07 17:03:17,225   INFO  ----------------Nuscene detection_cvpr_2019 results-----------------
***car error@trans, scale, orient, vel, attr | AP@0.5, 1.0, 2.0, 4.0
0.17, 0.16, 0.09, 0.11, 0.07 | 85.35, 92.91, 94.20, 95.42 | mean AP: 0.9197057440961336
***truck error@trans, scale, orient, vel, attr | AP@0.5, 1.0, 2.0, 4.0
0.14, 0.15, 0.02, 0.10, 0.01 | 75.16, 78.18, 78.18, 79.76 | mean AP: 0.7781960247370747
***construction_vehicle error@trans, scale, orient, vel, attr | AP@0.5, 1.0, 2.0, 4.0
1.00, 1.00, 1.00, 1.00, 1.00 | 0.00, 0.00, 0.00, 0.00 | mean AP: 0.0
***bus error@trans, scale, orient, vel, attr | AP@0.5, 1.0, 2.0, 4.0
0.15, 0.07, 0.03, 0.54, 0.40 | 99.53, 99.53, 99.53, 99.53 | mean AP: 0.9953412532028887
***trailer error@trans, scale, orient, vel, attr | AP@0.5, 1.0, 2.0, 4.0
1.00, 1.00, 1.00, 1.00, 1.00 | 0.00, 0.00, 0.00, 0.00 | mean AP: 0.0
***barrier error@trans, scale, orient, vel, attr | AP@0.5, 1.0, 2.0, 4.0
1.00, 1.00, 1.00, nan, nan | 0.00, 0.00, 0.00, 0.00 | mean AP: 0.0
***motorcycle error@trans, scale, orient, vel, attr | AP@0.5, 1.0, 2.0, 4.0
0.18, 0.26, 0.34, 0.05, 0.00 | 64.87, 68.47, 70.18, 72.33 | mean AP: 0.6896328768856833
***bicycle error@trans, scale, orient, vel, attr | AP@0.5, 1.0, 2.0, 4.0
0.15, 0.20, 0.32, 0.36, 0.00 | 52.81, 52.81, 52.81, 55.62 | mean AP: 0.5350891766510515
***pedestrian error@trans, scale, orient, vel, attr | AP@0.5, 1.0, 2.0, 4.0
0.12, 0.25, 0.30, 0.20, 0.13 | 91.38, 92.03, 93.15, 95.71 | mean AP: 0.9306973397899039
***traffic_cone error@trans, scale, orient, vel, attr | AP@0.5, 1.0, 2.0, 4.0
0.06, 0.35, nan, nan, nan | 90.58, 90.58, 90.58, 90.58 | mean AP: 0.9057559715637864
--------------average performance-------------
trans_err:     0.3975
scale_err:     0.4431
orient_err:     0.4555
vel_err:     0.4208
attr_err:     0.3252
mAP:     0.5754
NDS:     0.5835

代码结构

OpenPCDet 的代码结构清晰,主要由以下几个部分组成:

OpenPCDet
├── cfgs                  # 配置文件目录
├── data                  # 数据处理和加载相关代码
├── pcdet                 # 核心库代码
│   ├── datasets          # 数据集相关代码
│   ├── models            # 模型相关代码
│   ├── ops               # 常用操作实现(如 3D 点云操作)
│   ├── utils             # 工具函数和类
├── tools                 # 训练、测试、评估和可视化的脚本
├── scripts               # 辅助脚本(如多 GPU 训练脚本)
├── README.md             # 项目简介和使用说明

具体组成如何:

cfgs
  • cfgs 目录包含各种模型和数据集的配置文件。这些配置文件定义了模型架构、训练参数、数据处理流程等。配置文件通常采用 YAML 格式,便于阅读和修改。

data

data 目录包含数据处理和加载相关代码。主要包括数据集的转换脚本和数据加载器。不同的数据集(如 KITTI、nuScenes)通常有对应的转换脚本,用于将原始数据转换为 OpenPCDet 可用的格式。

pcdet

pcdet 是核心库目录,包含以下子目录:

datasets

datasets 目录包含各种数据集的实现,包括数据加载、预处理和增强等。每个数据集通常有对应的类来处理数据集特有的格式和要求。

  • data_processor: 包含数据预处理模块,例如点云特征提取、数据增强、数据格式转换等。
  • dataset: 包含数据集类,负责加载和预处理数据集,并生成训练和评估所需的数据批。
  • utils: 包含一些数据集相关的工具函数,例如数据集划分、数据集统计等。

model

models 目录包含各种 3D 目标检测模型的实现。每个模型通常由多个模块组成,如 backbone(骨干网络)、neck(中间层)、head(检测头)等。这些模块可以根据需要进行组合和配置。

  • backbone: 包含骨干网络模块,例如 PointNet、PointNet++、VoxelNet 等,负责提取点云特征。
  • head: 包含头部网络模块,例如 SECOND Head、PointPillar Head 等,负责预测目标框、类别和朝向角等。
  • post_processing: 包含后处理模块,例如 NMS (非极大值抑制) 等,用于筛选和合并目标框。
  • utils: 包含一些模型相关的工具函数,例如损失函数计算、指标计算等。

tools

  • train: 包含模型训练工具,例如训练脚本、训练器类等,负责模型训练流程控制。
  • test: 包含模型评估工具,例如评估脚本、评估器类等,负责模型评估流程控制。
  • visualize: 包含模型可视化工具,例如可视化脚本、可视化器类等,负责模型可视化展示。
  • scripts: 包含一些常用的脚本文件,例如数据集划分脚本、模型训练脚本等。

scripts

  • dataset_converters: 包含数据集转换脚本,例如将原始数据集转换为 OpenPCDet 支持的格式。
  • data_split: 包含数据集划分脚本,例如将数据集划分为训练集、验证集和测试集。
  • train: 包含模型训练脚本,例如启动训练流程、保存训练模型等。
  • test: 包含模型评估脚本,例如启动评估流程、生成评估结果等。

总结

OpenPCDet 的代码结构清晰且模块化,每个部分都承担着不同的功能,协同工作完成 3D 目标检测任务。了解 OpenPCDet 的代码结构有助于更好地理解其工作原理和进行二次开发。

关注我的公众号auto_drive_ai(Ai fighting), 第一时间获取更新内容。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/24958.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

探索800G数据中心的高速布线解决方案

随着技术的快速进步,数据中心正以前所未有的速度迅速发展。虽然100G和400G数据中心已经普及,但800G数据中心正逐渐流行并展现出增长趋势。由于对高速数据传输的需求呈指数级增长,因此需要高效、可靠的线缆连接解决方案。本文将介绍800G数据中…

Cell-在十字花科植物中年生和多次开花多年生开花行为的互相转化-文献精读21

Reciprocal conversion between annual and polycarpic perennial flowering behavior in the Brassicaceae 在十字花科植物中年生和多次开花多年生开花行为的互相转化 亮点 喜马拉雅须弥芥 和 内华达糖芥 是两个多年生植物模型 MADS-box 基因的剂量效应决定了一年生、二年生…

[图解]企业应用架构模式2024新译本讲解11-领域模型4

1 00:00:00,160 --> 00:00:01,870 好,到这里的话 2 00:00:02,620 --> 00:00:05,060 文字处理器的产品对象就生成了 3 00:00:06,880 --> 00:00:09,180 同样下面就是电子表格 4 00:00:10,490 --> 00:00:11,480 电子表格也同样的 5 00:00:11,490 -->…

字符输出流

在Java的IO流中专门提供了用于字符输出的流对象 PrintWriter 。该对象具有自动换行刷新缓冲字符输出流。特点是可以按行写出字符串,并且可通过 println(); 方法实现自动换行。 public class TestPrintWriter {public static void main(String[] args){//创建字符输…

如何轻松修改Windows远程连接的端口号

为了增强远程连接的安全性,最好修改默认的远程桌面协议(RDP)端口号。以下步骤将指导您如何修改Windows注册表中的端口设置,并相应地更新防火墙规则。 一、修改注册表中的端口号 打开注册表编辑器: 按下Win R键&#…

用python编撰一个电脑清理程序

自制一个电脑清理程序,有啥用呢?在电脑不装有清理软件的时候,可以解决自己电脑内存不足的情况。 1、设想需要删除指定文件夹中的临时文件和缓存文件。以下是代码。 import os import shutil def clean_folder(folder_path): for root,…

11 IP协议 - IP协议头部

什么是 IP 协议 IP(Internet Protocol)是一种网络通信协议,它是互联网的核心协议之一,负责在计算机网络中路由数据包,使数据能够在不同设备之间进行有效的传输。IP协议的主要作用包括寻址、分组、路由和转发数据包&am…

计算机网络 期末复习(谢希仁版本)第4章

路由器:查找转发表,转发分组。 IP网的意义:当互联网上的主机进行通信时,就好像在一个网络上通信一样,看不见互连的各具体的网络异构细节。如果在这种覆盖全球的 IP 网的上层使用 TCP 协议,那么就…

【六袆 - Java】Java 驱动连接Oracle数据库; Java单元测试 连接Oracle;

Java 驱动连接Oracle数据库 JDK8 Oracle驱动包 ORACLE8 测试用例代码 @Testpublic void oracleConn(){ResultSet rs = null;Statement stmt = null;Connection conn = null

股票数据集1-纳斯达克NASDAQ 100简介

数据集信息 纳斯达克 100 指数 由纳斯达克证券交易所 上市的 100 家最大的非金融公司发行的股票证券组成,根据公司市值设置不同权重的加权指数,权重还受某些规则影响如公司影响力。该指数仅限于来自单一交易所的公司,并且没有任何金融公司。 …

2024 vite 静态 scp2 自动化部署

1、导入库 npm install scp2 // 自动化部署 npm install chalk // 控制台输出的语句 npm install ora2、核心代码 创建文件夹放在主目录下的 deploy/index.js 复制粘贴以下代码: import client from scp2; import chalk from chalk; import ora from ora;const s…

K8s速览

k8s的核心能力 ● 服务发现与负载均衡 ● 服务恢复 ● 服务伸缩 ● 自动发布与回滚 ● 批量执行 架构 server-client两层架构,Master作为中央管控节点,会和每一个Node进行一个连接; 所有UI层,client的操作,只会和Mat…

详解linux设备下的/dev/null

/dev/zero是一个特殊的设备文件,它在Linux系统中通常被用来生成无限数量的零数据流。 这个设备文件位于/dev目录下,它不代表任何实际的硬件设备,而是一个虚拟设备。 当从/dev/zero设备中读取数据时,会得到无限数量的零字节&…

unix环境编程编程扫描版:深度解析与实践指南

unix环境编程编程扫描版:深度解析与实践指南 在探索Unix环境编程的广阔天地时,我们如同行走在一条充满未知与奇遇的旅程中。本篇文章将从四个方面、五个方面、六个方面和七个方面,深入剖析Unix环境编程的精髓,帮助读者在编程的海…

【机器学习】因TensorFlow所适配的numpy版本不适配,用anaconda降低numpy的版本

目录 0 TensorFlow最高支持的numpy版本 1 激活你的环境(如果你正在使用特定的环境) 2 查找可用的NumPy版本 3 安装特定版本的NumPy 4. 验证安装 5.(可选)如果你更改了base环境 0 TensorFlow最高支持的numpy版本 要使用 …

树莓派设置开机自启动程序(可执行文件与python脚本)

最近调试树莓派,希望开机运行两个程序,其中一个是可执行文件,另一个是 python 脚本,他们都是无限循环的程序,也就是说不关机不会停止运行。中间还是遇到了很多 bug,现在记录一下自启动程序的设置方法以及de…

Python | Leetcode Python题解之第132题分割回文串II

题目: 题解: class Solution:def minCut(self, s: str) -> int:n len(s)g [[True] * n for _ in range(n)]for i in range(n - 1, -1, -1):for j in range(i 1, n):g[i][j] (s[i] s[j]) and g[i 1][j - 1]f [float("inf")] * nfor …

Websocket前端传参:深度解析与实战应用

Websocket前端传参:深度解析与实战应用 在现代Web开发中,Websocket作为一种双向通信协议,已经广泛应用于实时数据传输场景。前端传参作为Websocket通信的重要组成部分,其正确性和高效性直接影响到应用的性能和用户体验。本文将深…

k8s学习--kubernetes服务自动伸缩之水平收缩(pod副本收缩)HPA详细解释与案例应用

文章目录 前言HPA简介简单理解详细解释HPA 的工作原理监控系统负载模式HPA 的优势使用 HPA 的注意事项应用类型 应用环境1.metircs-server部署2.HPA演示示例(1)部署一个服务(2)创建HPA对象(3)执行压测 前言…

安装node

下载地址 Node.js — Run JavaScript Everywhere 按照下面的图操作即可 然后就下载完了。