云服务器复现PointRCNN代码踩坑总结

参考来源:pointRCNN原理与复现_github_37671026的博客-CSDN博客pointRCNN原理与复现:整体思路:https://zhuanlan.zhihu.com/p/71564244原理:https://blog.csdn.net/taifengzikai/article/details/96840993https://zhuanlan.zhihu.com/p/97716398涉及到的了解知识图像中的掩模mask是什么: https://blog.csdn.net/bitcarmanlee/article/details/79132017弱监督学习: htthttps://blog.csdn.net/github_37671026/article/details/108531862

云服务器: 没有显卡用,先用云服务器跑(2080ti)

1. 配置基本环境

这里我选的云服务器镜像(这个可以直接运行,不需要改代码)

其他镜像也可以,只不过需要改代码。具体参见以下链接


PointPillars与PointRCNN编译运行以及结果可视化(小白探索之路,清晰易懂)_lixushi的博客-CSDN博客_pointpillars可视化icon-default.png?t=LA92https://blog.csdn.net/lixushi/article/details/118728278

需要注意的是环境问题,python 3.6(千万不能高于3.6)pytorch==1.0.0 , 因为没有直接合适的镜像,所有需要手动搞1.0.0的pytorch

pytorch安装命令:

conda install pytorch==1.0.0 torchvision==0.2.1 cuda100 -c pytorch

然后,那一堆包可以搞个requirements.txt, 直接一行命令解决即可

pip install -r requirements.txt

 上面弄完了包,还有三个依赖pointnet2,iou3d,roipool3d要build(这块我在实验室机子上没搞好,老是报错Fatal error: cuda.h, No such file or directory,好多人用都把环境搞费了)

sh build_and_install.sh

然后还有个问题,有的镜像会报错gcc版本问题。我这里服务器的gcc版本是7,但是会有个报错是不支持gcc 6以上,因此需要切换gcc版本到5,这个可以查看下方链接解决

gcc/g++ 多版本间切换 - 知乎1. 查看 gcc/g++ 版本查看当前版本gcc -v g++ -v查看系统已有版本ls /usr/bin/gcc* ls /usr/bin/g++*若没有需要的版本,先进行安装,例如: sudo apt install gcc-4.9 sudo apt install g++-4.9 # 安装 gcc-7 / g+…https://zhuanlan.zhihu.com/p/261001751由于我用的是云服务器,所有数据和代码已经先放到云盘上了,所以到这里,第一步配置环境就结束了。

2. 跑代码 

   跑代码操作按照下面博客:如何跑通PointRcnn_三烽的博客-CSDN博客点云目标检测(一)——PointRcnn复现环境要求数据准备程序准备组织数据程序运行Test Model可能出现的问题总结最近在进行点云目标检测方面论文工作,对于PointRcnn虽然readme已经写得很清楚了,但是复现过程中依然会遇到很多问题,以下是我对与readme的重述和对整个程序运行流程的一些说明。论文链接:PointRCNN papercode:PointRCNN code环境要求Linux (tested on Ubuntu 14.04/16.04)Python 3.6+.https://blog.csdn.net/weixin_44657714/article/details/120041535

 准备数据没有问题

训练的时候出现问题

 yaml的版本兼容导致代码问题

解决方法:TypeError: load() missing 1 required positional argument: ‘Loader‘

找到 lib目录下的config.py文件下,找到这个代码,将函数中的yaml.load(f)改为yaml.safe_load(f)即可。

 

3. 显卡不行,跑不动代码(2080跑不动)

2021-11-29 06:32:21,920   INFO  **********************Start training**********************
epochs:   0%|                                                                                                                                                       | 0/200 [00:07<?, ?it/s]
train:   0%|                                                                                                                                                        | 0/204 [00:00<?, ?it/sTraceback (most recent call last):                                                                                                                                                           
  File "train_rcnn.py", line 250, in <module>
    lr_scheduler_each_iter=(cfg.TRAIN.OPTIMIZER == 'adam_onecycle')
  File "/mnt/PointRCNN/tools/../tools/train_utils/train_utils.py", line 199, in train
    loss, tb_dict, disp_dict = self._train_it(batch)
  File "/mnt/PointRCNN/tools/../tools/train_utils/train_utils.py", line 132, in _train_it
    loss, tb_dict, disp_dict = self.model_fn(self.model, batch)
  File "/mnt/PointRCNN/tools/../lib/net/train_functions.py", line 35, in model_fn
    ret_dict = model(input_data)
  File "/root/miniconda3/envs/myconda/lib/python3.6/site-packages/torch/nn/modules/module.py", line 489, in __call__
    result = self.forward(*input, **kwargs)
  File "/mnt/PointRCNN/tools/../lib/net/point_rcnn.py", line 33, in forward
    rpn_output = self.rpn(input_data)
  File "/root/miniconda3/envs/myconda/lib/python3.6/site-packages/torch/nn/modules/module.py", line 489, in __call__
    result = self.forward(*input, **kwargs)
  File "/mnt/PointRCNN/tools/../lib/net/rpn.py", line 74, in forward
    backbone_xyz, backbone_features = self.backbone_net(pts_input)  # (B, N, 3), (B, C, N)
  File "/root/miniconda3/envs/myconda/lib/python3.6/site-packages/torch/nn/modules/module.py", line 489, in __call__
    result = self.forward(*input, **kwargs)
  File "/mnt/PointRCNN/tools/../lib/net/pointnet2_msg.py", line 67, in forward
    l_xyz[i - 1], l_xyz[i], l_features[i - 1], l_features[i]
  File "/root/miniconda3/envs/myconda/lib/python3.6/site-packages/torch/nn/modules/module.py", line 489, in __call__
    result = self.forward(*input, **kwargs)
  File "/mnt/PointRCNN/tools/../pointnet2_lib/pointnet2/pointnet2_modules.py", line 144, in forward
    interpolated_feats = pointnet2_utils.three_interpolate(known_feats, idx, weight)
  File "/mnt/PointRCNN/tools/../pointnet2_lib/pointnet2/pointnet2_utils.py", line 128, in forward
    output = torch.cuda.FloatTensor(B, c, n)
RuntimeError: CUDA out of memory. Tried to allocate 256.00 MiB (GPU 0; 7.80 GiB total capacity; 6.76 GiB already allocated; 249.12 MiB free; 32.81 MiB cached)

解决:搞一块2080ti显卡就能跑了,train是200epoch, 一个epoch要1分40秒,全跑完需要约5个半到6个小时。

结果可视化

pointRCNN 结果可视化_tiatiatiatia的博客-CSDN博客_pointrcnn可视化

首先下载作者训练好的权重PointRCNN.pth, 将PointRCNN.pth文件放在tools文件夹下

python eval_rcnn.py --cfg_file cfgs/default.yaml --ckpt PointRCNN.pth --batch_size 1 --eval_mode rcnn --set RPN.LOC_XZ_FINE False

运行之后,查看rcnn文件夹会eval里面会出现pred的预测文件,可以后续做可视化生成预测框用

然后,在创建软链接方面又出问题了

创建软连接要注意的是,文件不能在同一个文件夹下,所以git下来的kitti_object_vis代码不能和KITTI代码放在同一文件夹下,否则会报错function doesn't implement。

 保存好位置后,cd 到 kitti_object_vis目录的data文件夹下,此时刚下好的文件夹里应该有个object文件,将这个文件夹删除,在这里打开终端,创建软链接

ln -s ../PointRCNN/data/KITTI/object object

然后再切换回上一个目录,进行剩余操作即可。(这里注意终端按回车键可能报错mayavi无法连接engine,我在云服务器中这几个命令都没法按回车,在自己机子的ubuntu只可以在第一个命令上按回车切换图片)

命令分为几种:
(1) 只显示LiDAR 仅真值

cd kitti_object_vis
python kitti_object.py --show_lidar_with_depth --img_fov --const_box --vis
# 我的环境里只有这个可以终端按回车键进行下一张图

(2) 显示LiDAR和image 仅真值

python kitti_object.py --show_lidar_with_depth --img_fov --const_box --vis --show_image_with_boxes
# 这个终端按回车键可能报错mayavi无法连接上engine

(3) 显示特定某张图的LiDAR和image 仅真值

python kitti_object.py --show_lidar_with_depth --img_fov --const_box --vis --show_image_with_boxes --ind 100 
# ind 100表示就是图像编号为000100.txt

(4) 显示pointRCNN预测值+真值对比
在以上所有命令后面加 -p
例:

python kitti_object.py --show_lidar_with_depth --img_fov --const_box --vis --s

注:红色是预测框,绿色是真值框

 

  • 3
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
Pointrcnn是一种用于三维目标检测的深度学习算法,可以在点云数据上实现对目标的检测和定位。下面是一个关于如何复现Pointrcnn的简要步骤: 首先,需要准备点云数据集以及对应的目标标签。可以使用公开的点云数据集,如KITTI、SUN RGB-D等,并使用相应的标注工具对目标进行标注。 然后,搭建Pointrcnn的网络架构。Pointrcnn网络主要由三个模块组成:PointNet,RPN和RCNNPointNet用于提取点云的局部特征,RPN用于生成候选框,RCNN作为分类器和回归器。可以根据论文中的网络结构图来搭建这些模块,并使用TensorFlow或PyTorch等深度学习框架进行实现。 接下来,训练网络模型。将点云数据输入模型进行训练,使用交叉熵损失函数和平滑的L1损失函数对模型进行优化。此外,可以采用数据增强技术来增加训练集的多样性,如旋转、平移、缩放等。 在训练过程中,可以使用GPU加速计算以提高训练速度,同时监控网络的训练损失和精度,以便及时调整超参数。 最后,对测试集进行测试和评估。使用训练好的模型对测试集中的点云数据进行目标检测和定位,并根据预测结果和真实标签进行评估,如计算精确度、召回率和平均准确度等指标。 总结来说,复现Pointrcnn需要准备点云数据集和目标标签,搭建网络架构,训练网络模型,并对测试集进行测试和评估。这只是一个简要的概述,实际的复现过程可能还涉及一些细节和调整。
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值