《Frustum PointNets for 3D Object Detection from RGB-D Data》论文及代码学习(二)——代码部分

2023-10-29

《Frustum PointNets for 3D Object Detection from RGB-D Data》论文及代码学习(二)——代码部分

数据生成

frustum-pointnets-master/kitti/下面一共有两个文件夹,3个py文件,一个编译得到的pyc,三个单独下载下来的处理好的数据。

./rgb_detection

这个文件加下面存放着提前得到的2D估计结果,包括训练集结果和交叉验证集结果。结果格式为:
图片数据路径 类别标签 概率 矩阵坐标(应该是对角的两个点)

frustum支持从2D数据的基础上估计3D目标模型,这个数据可以用他们提供的,也可以自己生成其他的2D结果。

./kitty_object.py

文件的学习说明参见另一条博文
这个文件是用来检查所需要的KITTI 3D数据库是否正确下载并且按照dataset/README.md中的要求放置在对应的文件夹下面。当所有文件都放好了,运行命令:

python kitti/kitti_object.py

应该看到3D点云数据的平面和立体显示,如下图所示(运行过程会有一点慢,耐心等待):
首先获得平面图像:
3D点云1

在终端按下回车,继续得到3D点云图像:
3D点云2

此时,终端上显示出各项参数:

终端显示1

此时就可以开始生成用于训练和测试的数据集了。除了运行下面的代码外,也可以直接下载论文作者生成好的数据集

sh scripts/command_prep_data.sh

这个过程就是依照2D bounding box真值(训练集和验证集)和目标检测器估计的2D bounding box(验证集)将KITTI中的四棱台点云和对应的类别标签提取出来。其中,训练集和测试集的图片标号分别保存在路径kitti/image_sets/train.txt和kitti/image_sets/val.txt下。也会从上面提到的kitti/rgb_detections/rgb_detection_val.txt文件中提取验证集的估计2D bounding box结果。

运行下面的代码可以看到具体的数据生成步骤:

python kitti/prepare_data.py --demo

第一步:提取2D和3D bounding boxes
第一步

第2步:获取点云
点云

第3步:将点云投射到图像平面
投射图像

第4步:提取3D bounding box内的点云
截取点云

第5步:提取从2D bounding box看出去的点云四棱台
2D窗口看过去的点云四棱台

第6步:提取目标bounding box对应的点云四棱台
目标四棱台

结束。
具体的程序实现过程可以参照文件 kitti/prepare_data.py,由于目前博主并不关心具体的实现过程,此处就不做详细阅读和说明了。

网络训练

训练网络可以在终端运行下面的命令:

CUDA_VISIBLE_DEVICES=0 sh scripts/command_train_v1.sh

类似地,要训练v2只需要训练scripts/command_train_v2.sh即可。训练数据和检查节点信息会保存在train/log_v1(或train/log_v2)中。训练中的参数可以通过python train/train.py -h查看。

训练好的网络参数可以直接从论文作者提供的网址下载获得,只需要将下载的文件解压,并将log_*文件夹放置在train文件夹下即可。

下图是显示出的可供调节的训练命令:
训练参数

文件scripts/command_train_v1.sh中的命令是这样的:

python train/train.py --gpu 0 --model frustum_pointnets_v1 --log_dir train/log_v1 --num_point 1024 --max_epoch 201 --batch_size 32 --decay_step 800000 --decay_rate 0.5

其中train/train.py的详细注解请参照学习笔记

其他命令说明:
命令--gpu 0设定的是用来运行程序的GPU编号,0就是第一块GPU;
命令--model frustum_pointnets_v1指定了用于图像分割的网络结构是v1还是v2,这里指定的是v1;
命令--log_dir train/log_v1确定的是log的存储路径;
命令--num_point 1024指定对于每一个样本只从点云四棱台中抽取1024个点用于训练;
命令--max_epoch 201指定一共要运行多少个epoch(一个epoch中会运行数次迭代);
命令--batch_size 32规定batch size为32;
命令--decay_step 800000规定每多少次进行衰减;
命令--decay_rate 0.5规定初始衰减率。

网络测试

可运行下面的程序测试网络:

CUDA_VISIBLE_DEVICES=0 sh scripts/command_test_v1.sh

同样,如果要测试网络2,只需要运行scripts/command_test_v2.sh文件即可。这个代码会基于2D目标检测器的2D bounding box计算结果,自动评估frustum pointnets在验证集上的效果(2D检测器的代码不包含在frustum pointnets中);随后运行KITTI的离线评估代码,计算并显示2D检测、bird’s eye view检测和3D检测的平均精度。

如果想看网络的估计结果,博主写了一个python程序,下载后放在kitti文件夹下运行就可以啦。如果对大家有帮助,请在GitHub上Star一下哦。

尽管这里没有公布对于测试集的测试代码,但是算法的README文件给出了可行的方案:

首先,要用一个2D检测器获取KITTI测试集的检测结果,并将其存储在kitti/rgb_detections的一个文件中;
随后,要修改kitti/prepare_data.py从而获取测试集的点云四棱台;
接下来,可以修改在scripts下的文件中的数据路径、刚才生成的训练数据路径、以及输出文件名。

论文作者说明:他们所提供的结果报告是用了全部的trainval训练网络得到的。

测试结果

下图是车辆的2D检测结果

car2d

3D检测结果
car3d

以2D bounding box真值为输入的结果
car3dgt

根据评估曲线可以看到,虽然3D检测结果好坏在一定程度上依赖2D的检测精度,但二者并非是简单的叠加关系。算法本身的精度还有可提升的空间,尤其对于行人和自行车,算法的效果仍然可以提高。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

《Frustum PointNets for 3D Object Detection from RGB-D Data》论文及代码学习(二)——代码部分 的相关文章

  • ansible主机连通性测试报错

    报错提示 root yx01 site packages ansible all m ping WARNING provided hosts list is empty only localhost is available Note th
  • linux下boost裁剪笔记

    目录 1 裁剪流程 2 操作过程详解 3 裁剪boost库 4 备注 boost中所有库目录 最近在开发c 项目 遇到大量使用正则表达式 由于windows上使用vs2022 工具集版本比较高对c 11属性支持的比较好 没遇到什么问题 但是
  • 8051单片机实战分析(以STC89C52RC为例)

    在第一篇到第九篇博文中 我们认识到了一些基于IO口输入与输出的基础电子器件使用 8051单片机实战分析 以STC89C52RC为例 01 点亮一个LED 8051单片机实战分析 以STC89C52RC为例 02 LED延时约5s闪烁 805
  • pinia 介绍与安装

    目录 一 什么是pinia 二 为什么要使用pinia 三 准备工作 1 基于Vue3 TS Vite创建项目 2 安装pinia 四 搭建pinia模块 1 在src下创建store目录 并创建index ts文件 2 挂载pinia 一
  • Python入门教程(三)

    一 条件控制 Python条件语句是通过一条或多条语句的执行结果 true或者false 来决定执行的代码块 1 if语句 Python中if语句格式为 if condition1 为true时将执行statement的语句 如果condi
  • powershell使用conda activate激活环境出错的三个解决方法

    可能有两个原因 一共三个解决办法 方法一 原因很有可能是上次未deactivate windows系统下在powershell终端输入 activate deactivate 如果是Mac或Linux系统输入 激活环境 source act
  • CUDA矩阵乘法

    include
  • java8 retry 重试机制_Python异常失败重试模块:retrying,python爬虫必备利器

    图 文 迷神 从之前写的 Python登陆小米路由器拨号更换IP 绕过网站反爬IP限制机制 我们就可以看到python有一种重试机制 很好用 特别是在写爬虫的时候 简直是python爬虫必备利器 工作中也经常碰到的问题就是 某个方法出现了异
  • VS2017社区版Community 许可证过期解决方法

    之前过期可以登录自己的github账号再认证一下就OK了 但是这次就是登录不上会有脚本错误的弹窗 搜到一个方法亲测有效 也非常简单 找一个同等开发环境 把对应路径下的许可证文件夹拷贝放到自己的文件夹下即可 感谢各位大佬愿意分享
  • AD学习笔记(二)——PCB布局布线

    PCB布局布线 1 先确定板子的大小 用Keep out层或机械层确定边框 2 布线 走线连接需为钝角 不能出现直角 锐角 布局时要考虑走线的难易 线长 走线要尽量短 和可能出现的绕线情况 顶层和底层线大规律要十字交叉 走线与边框距离大于1

随机推荐

  • 如何通过开发机连接远程机器开发(端口转发)

    MobaXterm方式 可以解决公司需要要用跳板机连接远程机器的问题 打开mobaxterm gt tools gt MobaSSHtunnel 就进入以下界面 Forward Port 写本地没有被用过的端口 这里用的是10023 SSH
  • 【Git系列】了解什么是版本控制

    了解什么是版本控制 1 什么是版本控制 2 为什么要有版本控制 3 常见的版本控制工具 4 版本控制分类 4 1 本地版本控制 4 2 集中版本控制 4 3 分布式版本控制 其他系列 Git最详细的体系化教程 学习git之前 我们需要先明白
  • 找出1000以内所有素数

    今天和大家分享一个打印1000以内所有素数的程序 这是我第一次在平台上分享我写的代码 希望对一些像我一样的初学者有点帮助 include
  • 计算机论文参考文献最新年份,参考文献时间格式

    参考文献时间格式 论文的参考文献是在学术研究过程中 对某一著作或论文的整体的参考或借鉴 本篇是小编为大家收集整理的参考文献时间格式 喜欢的朋友不要错过啦 参考文献时间格式 1 期刊 序号 主要作者 文献题名 J 刊名 出版年份 卷号 期号
  • 计算机网络——绪论

    6个章节 外加实验和复习课时 题目来自于题库 重在理解 翻译 概述 物理层 链路层 网络层 传输层 应用层 复习课 实验课 一 计算机网络的基本概念 21 世纪的一些重要特征就是 数字化 网络化 和 信息化 是一个以网络为核心的信息时代 网
  • centos7下面php5.6添加postgresql相关扩展【试行】

    下载相关资源 首先 请下载PDO PGSQL及pq两个扩展包源码 PDO PGSQL pq 我下的是 请上传到centos服务器 上传完毕 解压及编译 解压后 分别编译扩展 编译pq扩展 步骤如下 注意 使用phpize的时候需要到扩展根目
  • void 可以避免编译警告

    下面这个函数被声明返回一个int类型 static int hns nic net stop struct net device ndev hns nic net down ndev return 0 如果在调用的时候不关心这个返回值的话
  • Linux 内核将用 Nftables 替代 iptables

    新的防火墙子系统 包过滤引擎 Nftables 将在 Linux 3 13 中替代有十多年历史的iptables iptables netfilter在2001年加入到2 4内核中 诞生于2008年的 NFTables 设计替代 iptab
  • Linux高级命令02 查看文件内容命令、链接命令

    Python Web篇学习汇总 Part 01 Linux基础命令 操作系统与虚拟机软件 了解Ubuntu操作系统 Linux查看 切换目录命令 绝对路径和相对路径 创建 删除 复制 移动文件及目录命令 ls命令选项 mkdir和rm命令选
  • SpringBoot入门了解

    第 1 章 Spring Boot入门 1 简介 简化Spring应用开发的一个框架 整个Spring技术栈的一个大整合 J2EE开发的一站式解决方案 2 微服务 微服务 架构风格 服务微化 一个应用应该是一组小型服务 各司其职 那么对于负
  • edge浏览器证书错误NET::ERR_CERT_AUTHORITY_INVALID

    解决方案 使用fiddler后edge浏览器频繁证书报错 重置浏览器设置后正常
  • java根据word模板导出word文件

    1 word模板文件处理 如下图所示在word 文档中填值的地方写入占位变量 2 将word文档另存为xml文件 编辑如下图 找到填写的占位 修改为 bcrxm 格式 3 将文件后缀名改为 ftl文件 4 java处理过程 引入frameM
  • eigen 矩阵求逆_C++学习笔记——6. Eigen入门(矩阵运算及几何模块)

    本文介绍了C 中Eigen库的代数运算模块和几何模块 以程序实例演示了常见指令用法 Eigen是一个高层次开源C 库 有效支持线性代数 矩阵和矢量运算 数值分析及其相关算法 在SLAM或者VIO研究中 对Eigen库的使用可以说非常多 因此
  • opencv使用(一):安装 -- 基于python3.7

    目录 pip安装 源码安装 测试 pip安装 打开命令行工具cmd 直接安装 安装成功即可获得最新版opencv python pip install opencv python 也可以指定版本 例如 pip install opencv
  • 服务器Linux系统安装 制作CentOS 7.6 U盘启动

    第一步 准备工作 1 8G以上U盘 2 UltraISO虚拟光驱 试用即可 破解的话自行找一下教程或者激活码 下载地址 https cn ultraiso net xiazai html 3 CentOS 7 6 镜像 这里推荐1810或者
  • qt中路径使用的小结

    QCoreApplication applicationDirPath 帮助文档中的解释 返回包含应用程序可执行文件的目录 例如 如果您在C Qt目录下安装了Qt 并且运行regexp示例 该函数将返回 C Qt examples tool
  • C#中的时间戳

    来源 https blog guoqianfan com 2019 11 24 timestamp in csharp 什么是时间戳 时间戳默认是Unix时间戳 首先要清楚JavaScript与Unix的时间戳的区别 JavaScript时
  • 对象存储的几种方法

    我们有时候会有这样的需求场景 需要将一个对象以二进制形式保存在文件或者字符流中 以便下一次加载时可以直接从二进制文件或者流中直接读取对象 并对对象进行操作 对象存储的目的 本质是要存储对象中各个成员的数据 因此我们从两个角度来思考这个问题
  • 3DMAX安装包+安装教程

    1 复制链接记得删除后缀哦 部分网站会自动标明出处 2 链接是永久链接 放心食用 3 版本选择建议 建议选择2014 2018之间版本 太高的版本容易有BUG 3DMAX2020 链接 https pan baidu com s 1i65C
  • 《Frustum PointNets for 3D Object Detection from RGB-D Data》论文及代码学习(二)——代码部分

    Frustum PointNets for 3D Object Detection from RGB D Data 论文及代码学习 二 代码部分 文章目录 Frustum PointNets for 3D Object Detection