VoxelNet:基于点云的三维空间信息逐层次学习网络

本文是对苹果公司2017年VoxelNet论文的复现项目介绍。该网络基于点云实现3D物体检测,通过VFE层提取体素特征,经3D卷积和RPN网络完成检测。项目可训练评估,但单卡训练未达论文精度,存在内存泄漏问题。还介绍了数据集准备、库安装、训练评估步骤及部分结果指标。

☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 免费无限量使用 DeepSeek R1 模型☜☜☜

voxelnet:基于点云的三维空间信息逐层次学习网络 - 创想鸟

VoxelNet: End-to-End Learning for Point Cloud Based 3D Object Detection

VoxelNet:基于点云的三维空间信息逐层次学习网络

1、项目总览

①、简介

本项目主要是对来自2017年苹果公司基于点云的3D物体检测论文”VoxelNet: End-to-End Learning for Point Cloud Based 3D Object Detection”进行复现。 VoxelNet只利用点云数据,在无人驾驶环境下实现了高精度的三维物体检测。

Note:项目目前可以训练、可以评估预测。但是(单卡训练,bs=2,epoch=100)未达到论文精度(论文bs=16,epoch=160)。有兴趣的同学可以自己尝试

另外重要的是:训练存在内存泄漏问题,之前定位到dataloader泄漏,不知道是数据预处理部分有问题还是paddle的问题,但是自己没闲功夫修改了,具体位置有兴趣的同学自己排查吧。 不然就得训练一段时间断掉再resume,其中train_fix_oom.py就是采用了读取内存,超过阈值resume的方案~

想要复现指标,一个是要调整参数(主要是yaml文件里的参数,但是参数改动可能造成出错),一个是要把项目里的bug fix掉噢!我认为调大batchsize应该会有大的提升!但是我并未尝试过多卡训练,所以可能会出问题。

ps:本项目主要是从second修改而来,所以稍加修改即可复现second和pointpillar。

之前训练(未训练完)的某次结果指标:

Car AP@0.70, 0.70, 0.70:bbox AP:53.40, 41.52, 35.37bev  AP:52.85, 40.87, 34.853d   AP:50.86, 36.90, 30.71aos  AP:28.13, 23.91, 21.17Car AP@0.70, 0.50, 0.50:bbox AP:53.40, 41.52, 35.37bev  AP:53.44, 42.09, 35.773d   AP:53.42, 41.90, 35.65aos  AP:28.13, 23.91, 21.17

   

2、网络简介

将三维点云划分为一定数量的Voxel,经过点的随机采样以及归一化后,对每一个非空Voxel使用若干个VFE(Voxel Feature Encoding)层进行局部特征提取,得到Voxel-wise Feature,然后经过3D Convolutional Middle Layers进一步抽象特征(增大感受野并学习几何空间表示),最后使用RPN(Region Proposal Network)对物体进行分类检测与位置回归。VoxelNet整个pipeline如下图所示。

①、网络结构

VoxelNet:基于点云的三维空间信息逐层次学习网络 - 创想鸟        

通过层叠的VFE层将体素编码,然后3D卷积进一步放大局部voxel特征,将点云转化成高维的体积的表达。最后通过RPN产生检测结果。

②、特征提取模块:VFE

VoxelNet:基于点云的三维空间信息逐层次学习网络 - 创想鸟        

3、RPN模块

VoxelNet:基于点云的三维空间信息逐层次学习网络 - 创想鸟        

论文中提到,RPN 中的 FCN网络分为 3 块,每一块都会实现 2x 效果的下采样率。然后,又实现了向上采样,将倒数 3 块上采样到固定的尺寸,然后拼接起来。最终,由上采样拼接后的卷积引出 2 个目标分支:概率图和回归图 注意它们的尺寸,概率图通道数是 2,代表正负 anchor 的概率,这个概率应该通过 softmax 处理过。 回归图的通道数是 7,代表的就是一个 anchor 的 3D 信息(x,y,z,l,w,h,theta)

②、损失函数

VoxelNet:基于点云的三维空间信息逐层次学习网络 - 创想鸟        

总体 Loss 由 2 部分组成:

分类 Loss回归 Loss

3、网络训练

1、数据集的准备(十几分钟解压)

VoxelNet:基于点云的三维空间信息逐层次学习网络 - 创想鸟

    VoxelNet网络在KITTI数据集中的3D Detection数据集上面进行训练,数据集中包含7481张训练图片以及7518张测试图片,一共有80256个标记物体,并且测试模式包含普通的视角以及鸟瞰视角。

In [ ]

!rm -rf kitti/!mkdir -p kitti/training/velodyne_reduced!mkdir -p kitti/testing/velodyne_reduced

   In [ ]

!unzip data/data50186/data_object_calib.zip -d kitti/

   In [ ]

!unzip data/data50186/image_training.zip -d kitti/training/!unzip data/data50186/data_object_label_2.zip -d kitti/training/!unzip data/data50186/velodyne_training_1.zip -d kitti/training/!unzip data/data50186/velodyne_training_2.zip -d kitti//training/!unzip data/data50186/velodyne_training_3.zip -d kitti/training/

   In [ ]

!unzip data/data50186/image_testing.zip -d kitti/testing/!unzip data/data50186/velodyne_testing_1.zip -d kitti/testing/!unzip data/data50186/velodyne_testing_2.zip -d kitti/testing/!unzip data/data50186/velodyne_testing_3.zip -d kitti/testing/

   In [ ]

!mv kitti/training/training/* kitti/training/!rm -rf kitti/training/training/!mv kitti/testing/testing/* kitti/testing/!rm -rf kitti/testing/testing/

   In [ ]

!mkdir kitti/training/velodyne!mv kitti/training/velodyne_training_1/* kitti/training/velodyne/!mv kitti/training/velodyne_training_2/* kitti/training/velodyne/!mv kitti/training/velodyne_training_3/* kitti/training/velodyne/!rm -rf kitti/training/velodyne_training_1!rm -rf kitti/training/velodyne_training_2!rm -rf kitti/training/velodyne_training_3!mkdir kitti/testing/velodyne!mv kitti/testing/velodyne_testing_1/* kitti/testing/velodyne!mv kitti/testing/velodyne_testing_2/* kitti/testing/velodyne!mv kitti/testing/velodyne_testing_3/* kitti/testing/velodyne!rm -rf kitti/testing/velodyne_testing_1!rm -rf kitti/testing/velodyne_testing_2!rm -rf kitti/testing/velodyne_testing_3

   

2、安装必要的库

In [ ]

!pip install shapely pybind11 protobuf scikit-image pillow fire scikit-image memory_profiler psutil!pip install numpy==1.17!pip install numba==0.48.0

   

3、数据集处理与准备

    对KITTI数据集进行处理。

       

数据集应有结构

kitti/├── training/├──    ├── calib├──    ├── image_2├──    ├── label_2├──    ├── velodyne├──    └── velodyne_reduced├── testing/├──    ├── calib├──    ├── image_2├──    ├── velodyne├──    └── velodyne_reduced├── gt_database/├── 4264_Car_1.bin    ...├── kitti_dbinfos_train.pkl├── kitti_infos_test.pkl├── kitti_infos_train.pkl├── kitti_infos_trainval.pkl├── kitti_infos_val.pkl├── test.txt├── train.txt├── trainval.txt└── val.txt

   In [ ]

!tree -L 1 kitti/

   In [ ]

%cp -r kittiinfo/* kitti/

   In [ ]

%cd Voxelnet

   In [ ]

!python create_data.py create_kitti_info_file --data_path=/home/aistudio/kitti ## 报错的话,可能需要修改create_data.py内的路径

   In [ ]

!python create_data.py create_reduced_point_cloud --data_path=/home/aistudio/kitti

   In [ ]

!python create_data.py create_groundtruth_database --data_path=/home/aistudio/kitti

   

4、训练

In [15]

# !python train.py train --cfg_file=configs/voxelnet_kitti_car.yaml --model_dir=./output#或者!python train_mgpu.py --config=configs/voxelnet_kitti_car.yaml --model_dir=./output --use_vdl=True

   

5、评估

In [ ]

!python eval.py eval --cfg_file=configs/voxelnet_kitti_car.yaml --model_dir=./output

   

以上就是VoxelNet:基于点云的三维空间信息逐层次学习网络的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/52081.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年11月9日 02:16:50
下一篇 2025年11月9日 02:22:31

相关推荐

  • 利用正则表达式在字符串中查找文件路径并转换为自定义URL

    本文旨在提供一种利用正则表达式在字符串中查找文件路径,并将其转换为自定义URL方案(例如 src:///path/to/file:43)的方法。该方法适用于将编译器或其他工具的输出转换为可点击链接,方便直接跳转到代码编辑器中的指定行。文章将详细介绍如何构建合适的正则表达式,并提供代码示例和注意事项,…

    好文分享 2025年12月16日
    000
  • 使用Go语言设置浏览器Cookie的全面指南

    本文详细介绍了如何在go语言中使用`net/http`包来正确设置浏览器cookie。我们将从`http.cookie`结构体的初始化,到利用`http.setcookie`函数将cookie发送给客户端浏览器进行深入讲解,并提供完整的示例代码和关键注意事项,帮助开发者避免常见错误,确保cookie…

    2025年12月16日
    000
  • GDB 调试 Go CGO 程序变量异常问题分析与解决

    在 go 1.1 版本中,使用 gdb 调试包含 cgo 代码的 go 程序时,存在一个已知问题,即 gdb 无法正确显示 go 语言变量的值。此问题在 go 1.0 版本中运行正常,但在 go 1.1 中因内部更改而出现。go 团队已意识到此缺陷并正在积极修复,建议用户关注官方更新或在条件允许下考…

    2025年12月16日
    000
  • Golang:获取 Multipart 文件信息,如大小和 MIME 类型

    本文将介绍如何在 Golang 中获取通过 `multipart.File` 上传的文件信息。我们将重点讲解如何获取文件的大小和 MIME 类型,并提供示例代码帮助你理解和应用这些技术。通过本文,你将能够轻松地从上传的文件中提取所需的信息,从而进行后续处理,例如文件类型验证、大小限制等。 在 Gol…

    2025年12月16日
    000
  • Go语言中安全地传递net.Listener文件描述符给子进程

    本文详细阐述了在go语言中,如何利用`exec.command.extrafiles`机制,安全且跨平台地将父进程的`net.listener`文件描述符(fd)传递给子进程。通过提供具体的代码示例,文章解释了父进程如何获取并传递fd,以及子进程如何接收并重构`net.listener`,旨在为开发…

    2025年12月16日
    000
  • Go语言RSA加密:EncryptPKCS1v15函数随机源参数详解

    在使用go语言进行rsa pkcs1v15模式加密时,`rsa.encryptpkcs1v15`函数要求提供一个非`nil`的`io.reader`作为随机源。若传入`nil`,将导致运行时恐慌(panic)。本文将详细阐述这一参数的重要性,并提供使用`crypto/rand.reader`作为安全…

    2025年12月16日
    000
  • Golang如何实现测试跳过功能

    使用t.Skip或t.SkipNow可跳过Go测试,如环境变量缺失、非目标系统或开启-short模式时跳过特定测试,提升测试效率与CI稳定性。 在Go语言中,有时我们希望根据某些条件跳过测试,比如只在特定操作系统、环境变量缺失或资源不可用时跳过。Go的测试框架提供了内置方式来实现测试跳过功能,主要通…

    2025年12月16日
    000
  • Go并发编程中的数据竞争与同步实践

    本文深入探讨了go语言并发编程中常见的数据竞争问题,并提供了一套健壮的解决方案。通过一个字符计数示例,我们分析了共享状态、指针传递以及同步机制可能引发的错误,并展示了如何利用局部变量、数据复制和`sync.waitgroup`等go语言特性,构建出高效且结果一致的并发程序,同时强调了使用go竞态检测…

    2025年12月16日
    000
  • Golang如何使用go test命令执行测试

    go test是Go语言执行测试的标准方式,通过_test.go文件中的Test开头函数进行单元测试,Benchmark开头函数进行性能测试,支持-v、-run等选项控制执行行为。 在Go语言中,go test 是执行测试的标准方式。只要按照约定编写测试文件,就可以轻松运行单元测试、性能测试,并查看…

    2025年12月16日
    000
  • Go SWIG 示例代码构建指南及常见问题解决

    本文详细介绍了如何构建 go 语言中 swig 示例代码,特别是针对 `misc/swig/callback` 目录下的示例。教程涵盖了环境变量配置、使用 `go install` 命令进行编译的步骤,并重点提供了解决 `g++` 编译错误的方法,包括确保 `g++` 及其相关多架构库的正确安装与验…

    2025年12月16日
    000
  • Go语言:安全高效地获取与解析HTTP JSON响应

    本教程将指导您如何在go语言中安全高效地从http get请求中获取并解析json数据。我们将重点介绍使用json.newdecoder直接处理响应体以提高效率,并强调配置http.client超时机制的重要性,以避免程序因网络延迟或服务器无响应而挂起,从而提升应用程序的健壮性。 Go语言在处理网络…

    2025年12月16日
    000
  • Go语言Web开发:深入理解HTTP HEAD方法与模板渲染的兼容性问题

    本文探讨了go语言`net/http`服务中,使用`html/template`渲染模板时,http head方法可能导致的“请求方法或响应状态码不允许包含正文”错误。文章分析了head方法的规范要求,解释了该错误产生的原因,并提供了在处理head请求时,通过条件判断避免向响应体写入内容的最佳实践,…

    2025年12月16日
    000
  • 使用Trie数据结构高效搜索固定长度字节数组的前缀

    本文探讨了在大量固定长度字节数组中高效进行前缀搜索的方法。针对此类需求,trie(前缀树)数据结构被证明是一种极其有效的解决方案。通过将字节数组存储为trie的路径,可以快速定位所有匹配给定前缀的元素,显著提升查询性能。文章将详细阐述trie的原理、实现思路及其在实际应用中的优势。 在处理大量固定长…

    2025年12月16日
    000
  • Go 并行快速排序中的死锁问题分析与解决

    本文旨在帮助开发者理解并解决 Go 语言并行快速排序实现中常见的死锁问题。通过分析问题代码,我们将深入探讨死锁产生的原因,并提供修正后的代码示例,确保并行快速排序能够正确、高效地运行。本文还将讨论在并发编程中需要注意的关键点,以避免类似问题的再次发生。 在 Go 语言中实现并行快速排序可以显著提升排…

    2025年12月16日
    000
  • Golang使用go test-vv查看详细测试信息

    go test -v 可显示测试执行详情,如用例运行状态与耗时,但无 -vv 参数;通过 -v 结合 -cover、-race 等参数可增强输出,t.Log 配合 -v 还能输出调试日志,满足多数调试需求。 在 Go 语言中,使用 go test -v 可以查看测试的详细输出,但并不存在 -vv 这…

    2025年12月16日
    000
  • Golang如何开发基础的客服聊天系统

    答案:基于Gorilla WebSocket实现双向通信,通过Client结构体区分用户与客服,利用全局clients、waitingUsers和sessions映射管理连接与会话,消息按会话关系点对点转发,前端通过WebSocket发送与接收消息,服务端用HTTP路由升级连接并处理实时交互,核心在…

    2025年12月16日
    000
  • Go 并行快速排序中的死锁分析与解决方案

    本文深入探讨了在 go 语言中实现并行快速排序时常见的死锁问题。核心问题源于两个方面:一是未能正确处理空切片作为排序函数的基础情况,二是主 goroutine 直接调用排序函数导致其在向自身通道写入时阻塞。文章通过具体代码示例详细分析了死锁的成因,并提供了包括创建独立 goroutine 执行排序以…

    2025年12月16日
    000
  • Go语言错误处理的实践与最佳范式

    本文深入探讨了go语言中错误处理的核心机制与最佳实践。go语言推崇显式错误处理,其中`if err != nil`模式被广泛认为是惯用的且推荐的做法。文章将通过代码示例,阐释这种模式在go标准库中的普遍应用,并强调其在确保程序健壮性与可读性方面的重要性,帮助开发者构建清晰、可靠的go应用程序。 在G…

    2025年12月16日
    000
  • Golang如何实现WebSocket数据收发

    Go语言通过gorilla/websocket库实现WebSocket通信,首先使用go get安装依赖,然后创建Upgrader实例将HTTP连接升级为WebSocket,示例代码展示了服务端接收并回显消息的过程,客户端可用JavaScript测试连接,关键点包括允许跨域、读写消息及连接关闭,适用…

    2025年12月16日
    000
  • Go Web应用中表单数据与Datastore的集成:存取实践

    本文详细介绍了如何在go语言开发的web应用中,将html表单提交的数据(`r.formvalue`)存储到google app engine的datastore,并从datastore中检索这些数据。通过具体代码示例,涵盖了数据模型的定义、上下文的获取、数据写入(`datastore.put`)和…

    2025年12月16日
    000

发表回复

登录后才能评论
关注微信