代码地址:https://github.com/happinesslz/EPNet
论文地址:https://arxiv.org/pdf/2007.08856.pdf
Linux (tested on Ubuntu 16.04)
Python 3.6+
PyTorch 1.0+
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的全过程!