系统基础环境:ubuntu 18.04 + python 3.8 + cuda 11.1
1 安装显卡驱动
1.1首先输入如下命令,查询系统推荐的驱动程序
ubuntu-drivers devices
输出如上,找到driver recommended 即为当前计算机所推荐的显卡。
1.2 接着输入下述指令进行显卡驱动的安装
sudo apt install nvidia-driver-525
等待后即可完成显卡驱动的安装
重启电脑后,在终端输入以下指令,用于检查驱动是否安装成功,若成功则输出如下图
nvidia-smi
2 cuda和cudnn的安装
本人下载的cuda11.1版本(建议cuda版本不要太高,避免与mmdetection3d版本不兼容)
a. cuda 11.1 下载安装NVIDIA官网下载界面
打开终端输入
wget https://developer.download.nvidia.com/compute/cuda/11.1.1/local_installers/cuda_11.1.1_455.32.00_linux.run
sudo sh cuda_11.1.1_455.32.00_linux.run
按照默认选项安装即可,若提示Existing package manager installation of the driver found. It is strongly recommended that you remove this before continuing.,选择continue,在下一步中(按Enter取消)去除driver项,之后选择install,如下图所示
安装完成如下图所示
安装完成后输入如下指令进行系统路径配置
sudo gedit ~/.bashrc
在文件末尾加上2行代码即可:
export PATH=/usr/local/cuda-11.1/bin${PATH:+:${PATH}}
export LD_LIBRARY_PATH=/usr/local/cuda-11.1/lib64${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}
此时检查cuda是否安装成功只需在终端输入nvcc -V,如果不能显示下图所示,重启电脑后再次输入即可
nvcc -V
输出上述信息则安装cuda完成
b. cudnn8.0.5下载安装
CUDA11.1对应的cuDNN版本为8.0.5,下载地址为cudnn下载地址
在下载的安装包文件夹下打开终端,解压文件,输入如下:
tar -zxvf cudnn-11.1-linux-x64-v8.0.5.39.tgz
进入解压目录,打开终端输入:
sudo cp cuda/include/cudnn.h /usr/local/cuda/include
sudo cp cuda/lib64/libcudnn* /usr/local/cuda/lib64
sudo chmod a+r /usr/local/cuda/include/cudnn.h /usr/local/cuda/lib64/libcudnn*
检验安装是否成功,打开终端输入:
cat /usr/local/cuda/include/cudnn_version.h | grep CUDNN_MAJOR -A 2
或
cat /usr/local/cuda/include/cudnn.h | grep CUDNN_MAJOR -A 2
cudnn安装成功界面如下图:
如果没有显示上图成功界面,原因为NVIDIA把版本信息换到cudnn_version.h中了,执行下面代码后再次检验安装是否成功
sudo cp cuda/include/cudnn_version.h /usr/local/cuda/include/
至此完成cudnn的安装
3 Anaconda的安装
进入官网下载,anaconda下载地址
进入下载的sh文件所在的文件夹,并打开终端输入以下代码(看一些文件名是否正确)
bash Anaconda3-2022.10-Linux-x86_64.sh
接下来按回车和yes无脑安装即可
最后重启终端(后续检验如果有问题,建议重启电脑再检验一次),即可使用Anaconda3
终端输入python查看是否更换成了anaconda内的python解释,如下图所示:python版本信息后面带了anaconda的标识即安装成功
终端输入conda --version如下图所示:显示conda版本信息,则conda已经加入环境变量中。以后可以在命令行使用conda命令
终端输入anaconda-navigator 启动anaconda
anaconda-navigator
4 conda新环境创建与pytorch 安装
输入如下指令创建并激活虚拟环境
conda create -n mmdet3d python=3.8 -y
conda activate mmdet3d
安装torch1.8.0, 进入torch官网:然后进入到下图中入口,选择 pytorch 1.8 和 cuda 11.1
conda install pytorch==1.8.0 torchvision==0.9.0 torchaudio==0.8.0 cudatoolkit=11.1 -c pytorch -c conda-forge
进行pytorch安装
安装完成后检查pytorch是否安装成功,能否使用cuda
在当前终端输入
python
import torch
torch.cuda.is_available()
输出结果如上代表pytorch安装成功!
5 安装mmdetecion3d
5.1指定版本安装
a. mmcv-full
pip install mmcv-full==1.3.8
b. mmdet
pip install mmdet==2.14.0
c. mmsegmentation
pip install mmsegmentation==0.14.1
d. mmdetection3d
git clone https://github.com/open-mmlab/mmdetection3d.git
cd mmdetection3d
git checkout v0.17.1
pip install -v -e .
e. pycocotools2.0.6, 如果不装这个,后面处理数据的时候会报错(一般情况下执行完上面代码这个软件包会自动安装的)
pip install pycocotools2.0.6
5.2不指定版本安装
pip install openmim
mim install mmcv-full
mim install mmdet
mim install mmsegmentation
git clone https://github.com/open-mmlab/mmdetection3d.git
cd mmdetection3d
pip install -e .
输出上述信息代表整个mmdetection3d安装成功
5.3另一种方式安装
创建环境
conda create -n mmdete python=3.8 -c https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main
激活环境
conda activate mmdete
安装torch环境
pip install torch==1.10.0+cu111 torchvision==0.11.0+cu111 torchaudio==0.10.0 -f https://download.pytorch.org/whl/torch_stable.html
拉取mmcv源码到本地(源码编译完整算子的方式安装)
安装依赖包
pip install -r requirements/optional.txt
安装mmcv(MAX_JOBS=16是根据自己的CPU线程数来选择的,我的电脑是8核心16线程)
MMCV_WITH_OPS=1 MAX_JOBS=16 pip install -e .
输入pip list可以查找mmcv版本和安装路径
拉取mmdetection源码到本地(源码编译的方式安装)
安装mmdet(MAX_JOBS=16是根据自己的CPU线程数来选择的,我的电脑是8核心16线程)
MAX_JOBS=16 pip install -e .
输入pip list可以查找mmdet版本和安装路径
6.验证安装好的环境
以/mmdetection/configs/yolox为例
复制README.md中的链接,下载训练好的权重
wget https://download.openmmlab.com/mmdetection/v2.0/yolox/yolox_tiny_8x8_300e_coco/yolox_tiny_8x8_300e_coco_20211124_171234-b4047906.pth
6.1运行以下代码验证环境(代码后加 --out-file result.jpg 保存到本地)
python demo/image_demo.py demo/demo.jpg configs/yolox/yolox_tiny_8x8_300e_coco.py yolox_tiny_8x8_300e_coco_20211124_171234-b4047906.pth
输出结果
6.2运行以下代码验证环境(代码后加 --out result.mp4 保存到本地)
python demo/video_demo.py demo/demo.mp4 configs/yolox/yolox_tiny_8x8_300e_coco.py yolox_tiny_8x8_300e_coco_20211124_171234-b4047906.pth --show
python demo/video_demo.py demo/demo.mp4 configs/yolox/yolox_tiny_8x8_300e_coco.py yolox_tiny_8x8_300e_coco_20211124_171234-b4047906.pth --out result.mp4
6.3运行以下代码验证环境(实时检测摄像头画面)
python demo/webcam_demo.py configs/yolox/yolox_tiny_8x8_300e_coco.py yolox_tiny_8x8_300e_coco_20211124_171234-b4047906.pth
至此完成环境验证
7.公开的COCO数据集
下载COCO数据集
python tools/misc/download_dataset.py --dataset-name coco2017
下载好的数据集已经自动解压到mmdetection/data目录下,Linux系统建议移动到其他目录,并使用软连接的方式链接到data文件夹下(删除文件夹指令rm -rf data/coco/)
数据集移动到目录home/Downloads/datasets/coco
终端输入ln -s 连接的源目录 要连接的目录
ln -s ~/Downloads/datasets/coco ~/PycharmProjects/mmdetection/data/
确保数据集目录和文档一致即可
准备好数据集后测试现有模型,仍然以yolox为例,输入以下代码将会逐一展示预测结果
python tools/test.py configs/yolox/yolox_tiny_8x8_300e_coco.py yolox_tiny_8x8_300e_coco_20211124_171234-b4047906.pth --show
如果需要批量预测只需要把–show改为–show-dir,后面加上yolox-tiny是要保存的路径
python tools/test.py configs/yolox/yolox_tiny_8x8_300e_coco.py yolox_tiny_8x8_300e_coco_20211124_171234-b4047906.pth --show-dir yolox-tiny
如果只需要测试mAP(均值平均精度,作为 object dection 中衡量检测精度的指标,mAP=所有类别的平均精度求和除以所有类别)或是bbox(2D检测框的准确率),只需要加上–eval 要测试的指标
这里以bbox为例
python tools/test.py configs/yolox/yolox_tiny_8x8_300e_coco.py yolox_tiny_8x8_300e_coco_20211124_171234-b4047906.pth --eval bbox
可以看到预测结果
那么如何在公开数据集上训练自己的模型,训练模型有两个最重要的超参数,学习率和批大小(batch size)。若学习率过大,loos反而会增高,网络发散,若学习率过小loss值下降很慢,导致训练时间过长。学习率较大刚开始下降很快,但容易在极值点附近反复横跳,所以选择合适的学习率非常重要。
mmdetection已经支持学习率自动缩放,强烈建议在训练时开启,只需要加入这行命令即可
-- auto-scale-lr
过小的batch size可能会陷入局部最优解,但batch size与GPU显存有关,过大会导致显存溢出,batch size应根据自己的模型和GPU显存来设置
以训练yolox-nano为例,yolox-nano是基于yolox-tiny,yolox-tiny是基于yolox-s
在yolox-s里可以找到batch size(samples_per_gpu=8)和GPU线程数(workers_per_gpu=4),输入训练命令,开启学习率自动缩放,修改batch size为16,GPU线程数一般为4或8,这里选择为8
python tools/train.py configs/yolox/yolox_nano_8x8_300e_coco.py --auto-scale-lr --options samples_per_gpu=16 workers_per_gpu=8
在训练时Linux在终端输入以下命令可以打开英伟达系统管理界面,可看到核心显存占用率
watch -n 0.1 nvidia-smi
训练结束后会在Work_dirs下,找到训练的log和权重