手把手教你跑通EPNet(图像语义增强点特征以进行 3D 对象检测)

跑通EPNet代码

代码地址:https://github.com/happinesslz/EPNet
论文地址:https://arxiv.org/pdf/2007.08856.pdf


一、环境配置

Linux (tested on Ubuntu 16.04)
Python 3.6+
PyTorch 1.0+

开始配置EPNet的环境

1.打开终端,激活conda: conda activate
在这里插入图片描述

2.创建一个新环境:conda create -n 随便取一个名字 python=3.8
在这里插入图片描述

3.激活刚才创建环境:conda activate 随便取的名字
在这里插入图片描述
4. 根据你电脑的cuda版本安装torch
在这里插入图片描述
点这里进入pytorch官网找到和自己电脑cuda版本对应的torch
在这里插入图片描述
在终端输入安装地址:
在这里插入图片描述
注意:一定要在你刚才创建的环境下安装!
5. 安装其他的依赖库
打开EPNet文件中的requirements.txt,将torch=1.2.0和torchvision=0.4.0删除(因为之前已经安装了与你cuda版本对应的torch和torchvision,所以这边不需要再重复安装了)将pyyaml改成pyyaml==5.4.1(新版本的pyyaml有一些功能不支持,所以选择安装老版本)

在终端cd到EPNet文件夹下,然后输入pip install -r requirements.txt
在这里插入图片描述
6. 修改CPP文件的代码!
很重要!!!要不然会编译失败!!

编译过程要进行以下修改:

主要是改了三个模块的cpp代码。

                PointRCNN/pointnet2_lib/pointnet2/src

                PointRCNN/lib/utils/iou3d/src

                PointRCNN/lib/utils/roipool3d/src

(1)将所有cpp文件中以下代码替换
#define CHECK_CUDA(x) AT_CHECK(x.type().is_cuda(), #x, " must be a CUDAtensor ")
#define CHECK_CONTIGUOUS(x) AT_CHECK(x.is_contiguous(), #x, " must be contiguous ")
#define CHECK_INPUT(x) CHECK_CUDA(x);CHECK_CONTIGUOUS(x)
替换为

#define CHECK_CUDA(x) AT_ASSERTM(x.type().is_cuda(), #x " must be a CUDA tensor")
#define CHECK_CONTIGUOUS(x) AT_ASSERTM(x.is_contiguous(), #x " must be contiguous")
#define CHECK_INPUT(x) CHECK_CUDA(x); CHECK_CONTIGUOUS(x)

//#define CHECK_CUDA(x) AT_CHECK(x.type().is_cuda(), #x, " must be a CUDAtensor ")
//#define CHECK_CONTIGUOUS(x) AT_CHECK(x.is_contiguous(), #x, " must be contiguous ")
//#define CHECK_INPUT(x) CHECK_CUDA(x);CHECK_CONTIGUOUS(x)
 
#define CHECK_CUDA(x) AT_ASSERTM(x.type().is_cuda(), #x " must be a CUDA tensor")
#define CHECK_CONTIGUOUS(x) AT_ASSERTM(x.is_contiguous(), #x " must be contiguous")
#define CHECK_INPUT(x) CHECK_CUDA(x); CHECK_CONTIGUOUS(x)

(2)将所有cpp文件中

以下两行注释
extern THCState *state; 

cudaStream_t stream = THCState_getCurrentStream(state);

修改为:

cudaStream_t stream = c10::cuda::getCurrentCUDAStream();

(3)执行 sh build_and_install.sh

在这里插入图片描述
这一部分的修改来源于CSDN博主「花花花哇_」的原创文章,原文链接:https://blog.csdn.net/sinat_39307513/article/details/123741116。感谢「花花花哇_」提供的思路!

以上EPNet的环境和库就全部配置完成了!

二、数据集

在EPNet的文件夹下创建以下的文件夹:

EPNet
├── data
│   ├── KITTI
│   │   ├── ImageSets
│   │   ├── object
│   │   │   ├──training
│   │   │      ├──calib & velodyne & label_2 & image_2 & (optional: planes)
│   │   │   ├──testing
│   │   │      ├──calib & velodyne & image_2
├── lib
├── pointnet2_lib
├── tools

KITTI官网下载以下几个数据集:
在这里插入图片描述下载好之后放入data文件夹下对应的文件当中!

还需要准备训练和测试的文件,我已经准备好了!点击这里下载提取码66td。下载好之后放在 ImageSets文件夹下!
最后单个GPU训练的话输入:

CUDA_VISIBLE_DEVICES=0 python train_rcnn.py --cfg_file cfgs/LI_Fusion_with_attention_use_ce_loss.yaml --batch_size 2 --train_mode rcnn_online --epochs 50 --ckpt_save_interval 1 --output_dir ./log/Car/full_epnet_without_iou_branch/   --set LI_FUSION.ENABLED True LI_FUSION.ADD_Image_Attention True RCNN.POOL_EXTRA_WIDTH 0.2 RPN.SCORE_THRESH 0.2 RCNN.SCORE_THRESH 0.2  USE_IOU_BRANCH False TRAIN.CE_WEIGHT 5.0

两个GPU训练的话输入:

CUDA_VISIBLE_DEVICES=0,1 python train_rcnn.py --cfg_file cfgs/LI_Fusion_with_attention_use_ce_loss.yaml --batch_size 6 --train_mode rcnn_online --epochs 50 --mgpus --ckpt_save_interval 1 --output_dir ./log/Car/full_epnet_without_iou_branch/   --set LI_FUSION.ENABLED True LI_FUSION.ADD_Image_Attention True RCNN.POOL_EXTRA_WIDTH 0.2 RPN.SCORE_THRESH 0.2 RCNN.SCORE_THRESH 0.2  USE_IOU_BRANCH False TRAIN.CE_WEIGHT 5.0

总结

以上就是搭建EPNet环境和训练EPNet的全过程!

  • 3
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 32
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 32
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值