需要使用的官方的文档链接如下:
1:https://github.com/open-mmlab/mmdetection3d/tree/master/data/sunrgbd
2:https://github.com/open-mmlab/mmdetection3d/blob/master/docs/getting_started.md

总的来说,按照官方文档的步骤进行操作,踩了挺多坑的,并非一帆风顺,还好,最后搞定了。

大坑:该框架只支持linux和mac,我最初以为测试的步骤啥的只是处理数据集,那么只涉及到一些文件的读取,然后就直接在windows下面运行官网上的一些命令,但是,后来发现,无论怎么弄,都不行,即使找到bug所在,但由于我对matlab不熟,也没办法找到解决方案。后面没法了,就去ubuntu下去试那些命令行,果不其然,运行没问题了。所以,不要在windows下运行该框架,听官网的话。

小坑:在进行数据预处理的时候,是使用的matlab来处理的,然后其中的extract_rgbd_data_v2.m这个文件里面第37行代码,parfor imageId = 1:10335,我不知道什么原因,我在这个文件debug的时候,运行到这里matlab就直接蹦了。因为parfor是并行运算,我本以为是我配置 不给力,但是如果我单独建立一个.m文件,然后就在这里运行一块parfor的命令,也能运行,搞来搞去,实在想不出招了,只能将parfor变成for,不使用并行运算了。改了之后,文件能正常运行了,但是,速度很慢,基本要一个多小时才能将这个文件跑完。

流程:
因为要使用到matlab去处理数据集,我们首先要做的就是在liunx下安装matlab,我这里给个链接:https://www.cnblogs.com/hEllOwOrlD2017/p/6936768.html?utm_source=itdadao&utm_medium=referral
,按照这个链接里面来安装吧,我安装下来没问题。
然后,找到matlab的安装路径,一般在安装的过程中会看见,我的安装目录是:/usr/local/MATLAB/R2017a/bin/matlab,你们根据自己的情况调整。最后我们使用下面的命令让matlab可以在终端执行:

sudo ln -s /usr/local/MATLAB/R2017a/bin/matlab  /usr/local/bin/matlab

执行完后,我们就可以在终端直接输入matlab直接启动这个软件了,也可以在终端输入相关命令直接运行.m文件。

matlab安装好之后,要按照作者给的流程去测试的话,需要下载数据集,最开始想按照第二个链接给的那样,去测试scannet数据集,但是这个数据集不好获得,我给scannet的人发邮件了,但是一直没有回我,后面在第一个链接里面看见作者给了下载sunrgbd的数据集,于是打算测试后者。当我们下载数据集之后,我们只需要在sunrgbd下新建一个OFFICIAL_SUNRGBD的文件夹就行了,然后将数据集按照下面的文件目录放置。另外的文件夹和文件会在运行作者的命令的时候生成。然后再进行一系列操作得到权重文件。我感觉应该不是训练数据集,因为如果是从头开始训练,训练时长不会这么短,但是如果不按照上面第一个链接那么操作,直接按照第二个链接操作,会提示缺少某个文件,而那个文件就是第一个链接中执行完命令后得到的文件。

执行的命令如下:

cd matlab
matlab -nosplash -nodesktop -r 'extract_split;quit;'
matlab -nosplash -nodesktop -r 'extract_rgbd_data_v2;quit;'
matlab -nosplash -nodesktop -r 'extract_rgbd_data_v1;quit;'
cd ..
python sunrgbd_data.py --gen_v1_data
cd ../..
python tools/create_data.py sunrgbd --root-path ./data/sunrgbd --out-dir ./data/sunrgbd --extra-tag sunrgbd

如果一切顺利,经过两三个小时(主要是extract_rgbd_data_v2这个文件,如果将parfor改为for,只能一个一个文件执行,速度贼慢。还有就是create_data.py,这个文件好像也要半个多小时才能执行完毕),就可以的得到上面图片中的文件夹和文件,我们可以开始进行测试阶段了。

测试之前,我们需要去下载已经训练好的votenet关于sunrgbd的模型,下载链接:https://github.com/open-mmlab/mmdetection3d/tree/master/configs/votenet,在这个页面你能找到下载位置,经测试,不需要翻墙出去下载。记住你下载的这个文件的位置,我们按照官网的说明,将其放到checkpoints这个文件夹下面。然后,我们就可以执行下面的命令了:

python tools/test.py configs/votenet/votenet_16x8_sunrgbd-3d-10class.py checkpoints/votenet_16x8_sunrgbd-3d-10class_20200620_230238-4483c0c0.pth --show --show-dir ./data/sunrgbd/show_results1

这行命令会在./data/scannet/show_results下生成非常多的文件夹,然后每个文件夹下面有两个文件:…obj和…ply文件。这两个文件是专门的3d点云数据保存的形式,初次看见这个,我也很懵逼,还好网络大佬多,百度了一下,大概就知道这文件啥意思了,给大家一个链接:ply文件解释,建议大家自己用Python或者其他语言打开这个文件去看看数据,打开ply的方式在后面会给出。

还有一种命令:

python tools/test.py configs/votenet/votenet_16x8_sunrgbd-3d-10class.py checkpoints/votenet_16x8_sunrgbd-3d-10class_20200620_230238-4483c0c0.pth  --eval mAP --options 'show=True' 'out_dir=./data/sunrgbd/show_results1'

这个命令会输出三个文件,…obj, …gt.ply, …pred.ply,而且最后还会输出map的结果,值得注意一下的是,这些生成的文件是在整个命令结束后才会生成,不是边运行边生成的。在官方给的解释中,obj文件是原始的点云数据,…pred.ply是预测的结果,…gt.ply是预测的边框这些,个人感觉,…gt.ply是在…pred.ply的基础上进行筛选的,就跟2d目标检测的时候利用nms来筛选。这几个生成的文件,当前,只能通过第三方的软件来显示,比如meshlab这个软件,官方给的前景是后续会给出相应的接口来显示点云数据。我们就使用这个软件看看效果吧,效果如下:
初始点云的显示:
预测点云的显示:
大家可以看见很多3d的边框,那就是预测的结果。

筛选后,也就是…gt.ply的点云数据显示:
可以看出,第三张照片比第二张少了很多边框,就是筛选后的结果。

刚开始的时候,我得到这些图片一直有些不理解,为什么不像其它的3d检测预测一样,将最后的3d边框直接画在正常的图像上面。也就是rgb图像上,后面我又去看了看votenet这个网络模型,才知道votenet设计的初衷就是只利用点云数据来进行预测,这是他的一个创新点,所以最后这样显示也就可以理解了。

为了方便我们直接调用votenet的模型去预测,官方也给了相应的接口,接口如下:

from mmdet3d.apis import init_detector, inference_detectorconfig_file = 'configs/votenet/votenet_8x8_scannet-3d-18class.py'
checkpoint_file = 'checkpoints/votenet_8x8_scannet-3d-18class_20200620_230238-2cea9c3a.pth'# build the model from a config file and a checkpoint file
model = init_detector(config_file, checkpoint_file, device='cuda:0')# test a single image and show the results
point_cloud = 'test.bin'
result, data = inference_detector(model, point_cloud)
# visualize the results and save the results in 'results' folder
model.show_results(data, result, out_dir='results')

但是值得注意一个地方,那就是这个接口是直接预测点云数据的,而ply文件里面除了点云数据,还有额外的东西,所以需要对ply文件进行处理,将Ply转化为纯粹的点云,转化代码如下:

import numpy as np
import pandas as pd
from plyfile import PlyDatadef conver_ply(input_path, output_path):plydata = PlyData.read(input_path)  # read filedata = plydata.elements[0].data  # read datadata_pd = pd.DataFrame(data)  # convert to DataFramedata_np = np.zeros(data_pd.shape, dtype=np.float)  # initialize array to store dataproperty_names = data[0].dtype.names  # read names of propertiesfor i, name in enumerate(property_names):  # read data by propertydata_np[:, i] = data_pd[name]data_np.astype(np.float32).tofile(output_path)

我一直很奇怪的是,官网只是将最后预测的boundingbox的点云数据给出来了,但是,每个boundingbox对应的标签,我查看官网的文档,一直没有找到解释,上面测试生成的ply文件,里面也没有标签数据。所以,还得进一步去看看源代码或者看看官网文档,毕竟这个最后预测的类别的数据还是很重要的。

2020 8.13
ps:利用官方的接口inference_detector(model, point_cloud),最后返回的数据中,results里面是有标签数据的,同时,返回的预测的boundingbox的array中,每行有七列,分别对应的是中心的的x,y,z,以及boundingbox的长,宽,高,以及整个boundingbox和z的航向角。

mmdetection3d调用votenet来进行3d预测相关推荐

  1. 【利用MMdetection3D框架进行单目3D目标检测(smoke算法】

    利用MMdetection3D框架进行3D目标检测(smoke算法) 1.mmdetection3d 2.mmdetection3d安装 2.1 依赖 3.进行单目3D目标检测 1.mmdetecti ...

  2. 【Python】(2022.07.03)在Jupyter Notebook中调用Stata17并绘制3D图展示回归结果的边际效应

    文章目录 背景介绍: 实现结果 安装过程 安装stata_setup包 检查是否安装成功 常见问题 调用stata 常见问题 1. stata安装在哪 2. 返回报错:TypeError: init( ...

  3. python彩票分析_033期钟玄福彩3D预测奖号:组选类型分析

    福彩3D第2021032期试机号为484,奖号为072,奖号类型为组六,奇偶比为1:2,大小比为1:2. 类型分析:福彩3D在上一个30期周期内(第2020291期-第2021007期),豹子号码没有 ...

  4. python 彩票分析_294期钱哥福彩3D预测奖号:杀号分析

    福彩3D第2020293期:奖号为:566,试机号为:676. 胆码: 福彩3D第2020289期-第2020293期连续5期开出号码分别为:086-418-753-941-566. 其中,小号出现了 ...

  5. python 彩票分析_285期庄德福彩3D预测奖号:类型判断

    福彩3D第2020284期奖号:502,试机号:416. 类型判断:上期奖号为502.号码0近10期开出6次,走势活跃,号码2出现6次,大热,号码5出现2次,走势较冷,三位号码走势总体较热,本期注意温 ...

  6. python彩票预测与分析_294期黄欢福彩3D预测奖号:跨度和值分析

    福彩3D第2020293期开出试机号676,奖号566.奖号形态为组三,奇偶比为1:2,012路比为2:0:1,大小比为3:0,和值为17,跨度为1. 一.和值分析: 上期开出和值17,遗漏20期解冻 ...

  7. python彩票预测与分析_297期四叔福彩3D预测奖号:奇偶、大小分析

    福利彩票3D第2020296期试机号为933,奖号为898. 福利彩票3D上周二:第2020290期试机号为339,奖号为418. 奖号类型分析:从近期周二开奖数据分析,组六近期热出,十周内出现7次, ...

  8. python彩票预测与分析_303期黄欢福彩3D预测奖号:奖号和值分析

    福彩3D 2020303期 福彩3D第2020302期开出试机号309,奖号397.奖号形态为组六,奇偶比为3:0,012路比为2:1:0,大小比为2:1,和值为19,跨度为6. 一.和值分析: 上期 ...

  9. python彩票分析_028期海天福彩3D预测奖号:百十个位012路分析

    福彩3D第2021027期开奖号:472,试机号:211.其中奖号和值:13,奇偶比1:2,大小比1:2. 和尾大小分析:在前50期开奖中和尾大小比为25:25,和尾大小走势基本相当:在前20期开奖中 ...

最新文章

  1. 重磅新政!土拍规则大调整!土地市场将迎“大降温”
  2. 蓄电池容量和环境温度的关系
  3. 阿里巴巴集团CRO刘振飞:双11的六维技术准备
  4. c语言构造数据类型有,《c语言程序设计基础7构造数据类型.ppt
  5. Listener监听器与Filter过滤器
  6. 史上最完整Java中将File转化为MultipartFile的方法(附阿里云腾讯云对象存储API对照)
  7. 在页面里点击一个按钮后出来一个层,可以操作的那么一个层!
  8. 乐视网回击贾跃亭:债务处理没有进展,先拿出57亿再说
  9. android检查内存泄露工具,Android内存泄露检测 LeakCanary2.0(Kotlin版)的实现原理
  10. STM32库函数模板创建
  11. ISO三体系认证辅导,ISO三体系验厂提升企业内部管理水平、降低企业各种风险
  12. Mysql数据库repair table 修复表
  13. linux 逗号分隔,linux-如何用逗号分割列表而不是sp
  14. CF 1606E Arena
  15. sql计算上班总时长——以每天的第一次上下班打卡时间为准
  16. 码分多路复用 CDM
  17. 百度paddleOcr安装与使用
  18. 开关电源雷击浪涌整改_一种防雷击浪涌的开关电源电路设计
  19. Metaverse 元宇宙入门-08-Content, Services, and Asset Businesses in the Metaverse 元界中的内容、服务和资产业务
  20. 课程设计-商店管理系统(一)----前端页面的制作(一)

热门文章

  1. 震惊!!!某教育机构一男性教师讲课流程曝光!!!内容→面向对象(二)
  2. 音频编辑服务UI SDK接入指导及常见问题
  3. 服务器上文件夹带锁子,win7文件夹带锁是什么意思_win7文件上的小锁如何取消-win7之家...
  4. 诸仙D3D游戏环境下如何实现真正D3D的窗口
  5. php正则表达式替换,php正则表达式如何替换字符
  6. 了解Android Studio中的Gradle
  7. 临界区互斥的软件实现方法
  8. AI照骗恐怖如斯!美女刷屏真假难辨,网友:AI网恋诈骗时代开启
  9. 2个1000微法的电容串联是多少微法
  10. pdf是什么?pdf文件又该怎么进行编辑?