如何跑通PointRcnn


最近在进行点云目标检测方面论文工作,对于PointRcnn虽然readme已经写得很清楚了,但是复现过程中依然会遇到很多问题,以下是我对与readme的重述和对整个程序运行流程的一些说明。


论文链接:
PointRCNN paper

code:
PointRCNN code

环境要求

Linux (tested on Ubuntu 14.04/16.04)
Python 3.6+
PyTorch 1.0
依赖包easydict 、tqdm、tensorboardX 、fire、numba、pyyaml、scikit-image 、shapely

数据准备

PointRcnn使用的Data是KITTI数据集,KITTI数据集可以在官网上进行下载,官网地址:
KITTI数据集链接
下载红箭头标注的数据集,分别是image_2,velodyne,calib,以及label.

推荐迅雷下载,下载速度比较快。
然后按照如下所示的结构组织Data的结构,将准备好的数据集放入object文件夹中,并将其放在PointRcnn文件的KITTI/object下

PointRCNN
├── data
│   ├── KITTI
│   │   ├── ImageSets
│   │   ├── object
│   │   │   ├──training
│   │   │      ├──calib
│   │   │      ├──velodyne
│   │   │      ├──label_2
│   │   │      ├──image_2
│   │   │   ├──testing
│   │   │      ├──calib
│   │   │      ├──velodyne
│   │   │      ├──image_2
├── lib
├── pointnet2_lib
├── tools

使用时本人数据集中未包含plane,所以要将plane使用部分代码注释掉。

程序准备

1 克隆源程序,其中“–recursive”很重要.

git clone --recursive https://github.com/sshaoshuai/PointRCNN.git

2 配置依赖包

conda install pytorch==1.0.0 torchvision==0.2.1 cuda100 -c pytorch
pip install easydict
pip install tqdm
pip insatll tensorboardX 
pip install fire
pip install numba
pip install pyyaml
pip install scikit-image 
pip install shapely

3 安装pointnet2_lib, iou3d, roipool3d库
cd命令进入PointRcnn目录 ,运行

sh build_and_install.sh

组织数据

PointRCNN
├── data
│   ├── KITTI
│   │   ├── ImageSets
│   │   ├── object
│   │   │   ├──training
│   │   │      ├──calib
│   │   │      ├──velodyne
│   │   │      ├──label_2
│   │   │      ├──image_2
│   │   │   ├──testing
│   │   │      ├──calib
│   │   │      ├──velodyne
│   │   │      ├──image_2
├── lib
├── pointnet2_lib
├── tools

至此前期准备工作完毕

程序运行

训练模型

Step1 进入tools文件夹:

cd /home/seeta-yuzoye/PointRCNN/tools

Step2 准备数据

python generate_gt_database.py --class_name 'Car' --split train

Step3 第一阶段训练:(生成checkpoint_epoch_200.pth)
CPU训练(200次迭代)

python train_rcnn.py --cfg_file cfgs/default.yaml --batch_size 16 --train_mode rpn --epochs 200

多GPU进行训练(200次迭代)

CUDA_VISIBLE_DEVICES=0,1 python train_rcnn.py --cfg_file cfgs/default.yaml --batch_size 16 --train_mode rpn --epochs 200 --mgpus 

Step4 第二阶段训练(用step3生成的checkpoint_epoch_200.pth进行训练)
CPU训练(70次迭代)

python train_rcnn.py --cfg_file cfgs/default.yaml --batch_size 4 --train_mode rcnn --epochs 70  --ckpt_save_interval 2 --rpn_ckpt ../output/rpn/default/ckpt/checkpoint_epoch_200.pth

多GPU训练(70次迭代)

CUDA_VISIBLE_DEVICES=0,1 python train_rcnn.py --cfg_file cfgs/default.yaml --batch_size 4 --train_mode rcnn --epochs 70  --ckpt_save_interval 2 --rpn_ckpt ../output/rpn/default/ckpt/checkpoint_epoch_200.pth --mgpus 

Test Model

Quick demo
用预训练模型进行测试(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的预测文件,可以后续做可视化生成预测框用

用最终模型进行测试
此处readme添加的模型文件是checkpoint_epoch_200.pth,而最终测试需要的的文件在…/output/rcnn/ckp目录下,因此我们修改命令

python eval_rcnn.py --cfg_file cfgs/default.yaml --ckpt ../output/rcnn/ckpt/checkpoint_epoch_70.pth --batch_size 4 --eval_mode rcnn  

Eval所有checkpoint

python eval_rcnn.py --cfg_file cfgs/default.yaml --eval_mode rcnn --eval_all

可能出现的问题

1、plane数据集未使用,代码无法运行。

解决方法:将数据增强部分代码注释掉然后在进行运行。

2、在test model时出现卡住没有反应的问题,一开始以为是服务器卡了,后来发现是numba包的版本问题。
解决方法如下:

将numba包从0.51.2降级到0.49.0


总结

如何跑通PointRcnn的代码,引用请注明来源,如有错误欢迎指正。一起学习,共同进步。

### 如何正确配置和运行 AODNet 模型 PyTorch 实现 #### 配置环境 为了成功运行 AODNet 的 PyTorch 实现,首先需要确保开发环境中安装了必要的依赖库。PyTorch 是核心依赖项之一,可以过以下命令安装适合当前系统的版本: ```bash pip install torch torchvision torchaudio ``` 如果目标是在 GPU 上加速计算,则需确认 CUDA 工具链已正确定义并兼容所选的 PyTorch 版本。 #### 加载预训练权重 AODNet 的部署常涉及加载预先训练好的权重文件。这些权重常是过 `.pth` 或其他序列化格式保存下来的模型状态字典。以下是加载权重的一个典型方法[^1]: ```python import torch from aodnet_model import AODNet # 假设这是定义 AODNet 架构的模块 model = AODNet() state_dict = torch.load('path_to_pretrained_weights.pth') model.load_state_dict(state_dict) model.eval() # 切换到评估模式 ``` 上述代码片段展示了如何实例化 `AODNet` 类,并加载存储于指定路径中的预训练权重。调用 `eval()` 方法可禁用 Dropout 和 BatchNorm 层的训练行为,从而适配推理阶段的需求。 #### 使用 Trace 方式导出 Libtorch 文件 对于 C++ 推理场景下的应用需求,可以采用 TorchScript 提供的 trace 功能来捕获模型的行为特征,并将其转换成独立于 Python 解释器的形式——即 *.pt* 文件。具体操作如下所示: ```python dummy_input = torch.randn(1, 3, 256, 256) # 创建虚拟输入张量 traced_script_module = torch.jit.trace(model, dummy_input) # 将追踪后的脚本模块保存至磁盘 traced_script_module.save("aodnet_libtorch.pt") ``` 这里的关键在于构建一个形状匹配实际数据分布的随机张量作为占位符参与前向传播过程;与此同时,“跟踪”机制会自动记录下各层之间的连接关系及其对应的参数值集合。 #### 运行预测流程 完成以上准备工作之后,即可利用已经准备就绪的模型执行图像去雾任务。下面给出一段简单的测试逻辑用于验证功能是否正常工作: ```python from PIL import Image import numpy as np def preprocess_image(image_path): img = Image.open(image_path).convert('RGB').resize((256, 256)) img_np = np.array(img).astype(np.float32) / 255. img_tensor = torch.from_numpy(img_np.transpose((2,0,1))).unsqueeze_(0) return img_tensor input_img = preprocess_image('test_foggy.jpg') output = model(input_img)[0].detach().numpy().transpose((1,2,0)) plt.imshow(output.clip(0.,1.)) # 显示处理后的清晰图片 plt.show() ``` 此部分实现了从读取原始含雾图象直至展示最终结果的整体链条。注意调整尺寸大小以及归一化的范围要严格遵循原作者设定的标准。
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

三烽

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值