本文用于博主记录在复现3D目标检测算法时所遇到的各种问题、踩坑。
参考链接:
1、kitti数据集准备
https://mmdetection3d.readthedocs.io/zh-cn/latest/advanced_guides/datasets/kitti.html
https://github.com/open-mmlab/mmdetection3d
2、kitti数据集下载
首先是配置环境,本次复现环境配置如下:
miniconda cuda11.7.0 python3.8.0 pytorch 11.3.0 (cudnn选择和cuda相同日期发布的即可,下面会讲)
一、安装miniconda
mkdir -p ~/miniconda3 #新建文件夹存放miniconda文件
wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh -O ~/miniconda3/miniconda.sh #下载
bash ~/miniconda3/miniconda.sh -b -u -p ~/miniconda3
rm ~/miniconda3/miniconda.sh
初始化miniconda
~/miniconda3/bin/conda init bash
~/miniconda3/bin/conda init zsh
安装完成后会在服务器中下载一个名为miniconda的文件夹,如图:
二、安装cuda和cudnn
参考 Linux下非root用户安装CUDA_非root安装cuda-CSDN博客
cuda我安装的是这一个:
最后一个命令有sudo,如果在服务器上可能没有管理员身份无法运行,把sudo删除直接运行就可以了。
cudnn的版本选择和cuda在同一日期的即可:
下载到本地,再上传到服务器端进行解压,并把里面的文件复制到cuda对应文件夹中去就可以了。最后记得nvcc一下看看是否改好哦!
三、安装pytorch
直接前往官网 PyTorch找到自己所需要的版本
在服务器终端输入安装命令以安装pytorch
四、安装mmdetection3D框架
1、首先安装引擎
pip install -U openmim
mim install mmengine
mim install 'mmcv>=2.0.0rc4'
mim install 'mmdet>=3.0.0'
如果安装没有cuda版本的mmcv,则使用以下命令:
mim install "mmcv-lite>=2.0.0rc4"
由于我的cuda版本之前是11.5,运行mmcv这条命令自动下载的事mmcv2.2.0rc4,mmdet3.0.0,但是mmdet3.0.0匹配的mmcv版本是>=2.0.0 & <2.2.0,.故mmcv2.2.0版本是不匹配的,需要自行下载其他版本(2.0.0或2.1.0都可以),首先需要下载cuda11.7:
注意在。bashrc文件中的路径需要修改:
修改之后的bashrc文件末尾几行应该是这样的(我看的教程上是把$PATH放在了=后面故而11.7没能成功显示)
大家根据自己的文件夹名和路径修改即可,不要完全和我的一致哈!
修改完毕后记得用命令使文件生效:
source ~/.bashrc
之后就可以安装其他版本,我这里下载的是2.0.0rc4:
2、安装mmdetection3D
直接开发和运行mmdet3d,则使用源代码安装
git clone https://github.com/open-mmlab/mmdetection3d.git -b dev-1.x
# "-b dev-1.x" means checkout to the `dev-1.x` branch.
cd mmdetection3d
pip install -v -e .
# "-v" means verbose, or more output
# "-e" means installing a project in edtiable mode,
# thus any local modifications made to the code will take effect without reinstallation.
如果仅仅将mmdet3d作为依赖相和第三方包,则使用mim安装
mim install "mmdet3d>=1.1.0"
我这里因为要复现算法,故采取第一种方法进行安装。安装完成后会在服务器中下载一个名为mmdetection3D的文件夹,如图:
参考链接中还有验证此框架是否正确安装,有需要的可以自行参考链接,下载配置文件和检查点文件验证推理演示。我没有进行验证,此处就不再进行介绍。
五、下载数据集
参考链接:kitti数据集在3D目标检测中的入门-CSDN博客
建议在本地下载后,再上传到服务器中
只需要下载RGB、Point Cloud、Calib和label四个压缩包
可以通过filezilla上传也可以直接拖拽到服务器中进行解压
filezilla安装地址:FileZilla - The free FTP solution
下载免费版的就可以用
数据集里有一个planes包是可选的,道路信息建议大家下载,这样在复现时精度应该会更高一点
数据全部下载好之后,要按照以下结构对文件夹进行组织:
前面下载的数据集解压后会自动生成Testing和training文件夹并自动分类,ImageSets文件夹需要自已创建,一会还要往里面下载文件:
mkdir ./data/kitti/ && mkdir ./data/kitti/ImageSets #创建ImageSets文件夹
链接里下载数据划分的代码:
wget -c https://raw.githubusercontent.com/traveller59/second.pytorch/master/second/data/ImageSets/test.txt --no-check-certificate --content-disposition -O ./data/kitti/ImageSets/test.txt
wget -c https://raw.githubusercontent.com/traveller59/second.pytorch/master/second/data/ImageSets/train.txt --no-check-certificate --content-disposition -O ./data/kitti/ImageSets/train.txt
wget -c https://raw.githubusercontent.com/traveller59/second.pytorch/master/second/data/ImageSets/val.txt --no-check-certificate --content-disposition -O ./data/kitti/ImageSets/val.txt
wget -c https://raw.githubusercontent.com/traveller59/second.pytorch/master/second/data/ImageSets/trainval.txt --no-check-certificate --content-disposition -O ./data/kitti/ImageSets/trainval.txt
如果在服务器终端没法运行的,可以自己去github上找到该项目下载这几个文件,下载后的文件夹组织结构应该是这样的:
下载完划分数据后运行以下代码(如果前面没有下planes文件则删除 --with planes):
python tools/create_data.py kitti --root-path ./data/kitti --out-dir ./data/kitti --extra-tag kitti --with-plane
全部下载完毕就可以开始训练算法了,这里以Pointpillar为例:
如果需要修改算法跑的轮数,则可以在/mmdetection3d/configs/pointpillars/pointpillars_hv_secfpn_8xb6-160e_kitti-3d-3class.py中找到epcho_num参数,修改成你想要跑的轮数即可(源代码中是80,我没有进行修改)
如果需要修改算法批处理的数量,则可以在/mmdetection3d/configs/_base_/datasets/kitti-3d-3class.py文件中修改batch_size参数即可。
接着运行下面的代码即可开始训练:
## 单卡训练
python tools/train.py configs/pointpillars/pointpillars_hv_secfpn_8xb6-160e_kitti-3d-3class.py
## 多卡训练
CUDA_VISIBLE_DEVICES=0,1,2,3 tools/dist_train.sh configs/pointpillars/pointpillars_hv_secfpn_8xb6-160e_kitti-3d-3class.py 4
其中多卡训练前面CUDA_VISIBLE_DEVICES参数指的是你用第几张卡去跑,这个根据自己实验室服务器的数量去决定即可。
接下来就可以看到算法在终端中跑起来啦:
我这边跑的时候由于有师兄在跑自己的算法,结果显存爆了哈哈。
顺带一提,在mmdetection3d文件夹下有一个work_dir文件夹,里面保存的是算法训练的结果:
到这就全部完毕啦!预祝大家都能早日修改好bug,跑完算法,早日发一区!!!
欢迎大家在评论区留言提问!!!