paddlepaddle是百度公司自研的一个深度学习框架,最近做项目要用到paddle里的PaddleDetection做目标检测训练,所以要在服务器上先把环境搭好,记录一下整个安装过程。
*参考文档* https://www.paddlepaddle.org.cn/documentation/docs/zh/install/conda/linux-conda.html
*参考文档* https://github.com/PaddlePaddle/PaddleDetection/blob/release/2.1/docs/tutorials/INSTALL_cn.md
*参考文档* https://github.com/PaddlePaddle/PaddleDetection/blob/release/2.1/docs/tutorials/GETTING_STARTED_cn.md
*参考文档* https://zhuanlan.zhihu.com/p/267157006
服务器系统是Ubuntu 的,事先已经安装过了Anaconda,用conda自行创建一个虚拟环境,可劲造也不担心影响系统环境。
1.创建conda环境
conda create -n paddle_env python=3.7 #python版本号自己指定即可
2.进入conda环境
conda activate paddle_env
3.安装paddlepaddle
3.1 检查自己的cuda版本,一般要求在10.1以上了
cat /usr/local/cuda/version.txt #查看cuda版本号
3.2 GPU版本安装paddlepaddle
conda install paddlepaddle-gpu==2.1.1 cudatoolkit=10.1 --channel https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/Paddle/
3.3验证安装是否成功
#可以python或者python3进入python环境,输入import paddle
,再输入 paddle.utils.run_check()
,
#如果出现PaddlePaddle is installed successfully!
则说明安装成功
4.安装Paddledetection
注意!!!服务器一般都是多卡(多卡环境下使用PaddleDetection一定得先安装NCCL)
4.1安装nccl
比较稳妥的方法就是github源码build安装包
按照以下步骤
git clone https://github.com/NVIDIA/nccl.git
cd nccl
make -j src.build
sudo apt install build-essential devscripts debhelper fakeroot
make pkg.debian.build
ls build/pkg/deb/
之后在nccl/build/pkg/deb/目录下可以看到libnccl2和libnccl-dev的deb安装包,直接sudo dpkg -i安装即可
sudo dpkg -i ./libnccl2_********.deb
sudo dpkg -i ./libnccl-dev******.deb
执行完后可去/usr/lib/x86_64-linux-gnu/目录下查看有没有出现libnccl.so文件,有即为编译成功
然后执行操作
vim ~/.bashrc #打开设置环境变量文件
#添加一行环境变量
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/lib/x86_64-linux-gnu
#之后退出执行
source ~/.bashrc
4.2安装PaddleDetection
方法一:pip安装
注意: pip安装方式只支持Python3
pip install paddledet==2.1.0 -i https://mirror.baidu.com/pypi/simple
git clone https://github.com/PaddlePaddle/PaddleDetection.git
cd PaddleDetection
方法二:源码编译安装
cd <path/to/clone/PaddleDetection>
git clone https://github.com/PaddlePaddle/PaddleDetection.git
cd PaddleDetection
python setup.py install
pip install -r requirements.txt
安装后确认是否安装正确
python ppdet/modeling/tests/test_architectures.py
测试通过后会提示如下信息:
...
Ran 5 tests in 4.280s
OK
简单测试一张图
export CUDA_VISIBLE_DEVICES=0
python tools/infer.py -c configs/ppyolo/ppyolo_r50vd_dcn_1x_coco.yml -o use_gpu=true weights=https://paddledet.bj.bcebos.com/models/ppyolo_r50vd_dcn_1x_coco.pdparams --infer_img=demo/000000014439.jpg
结果会在output文件夹下生成画有预测框的图,可自行查看。
5.简单上手
后面可简单跑一个demo,测试一下单卡,多卡情况下使用是否正常
5.1准备数据集
dataset文件夹下有一些数据集,里面已经写好了Python文件,执行即可下载,跑一个 路标识别数据集
python dataset/roadsign_voc/download_roadsign_voc.py
5.2修改配置文件
使用configs/yolov3/yolov3_mobilenet_v1_roadsign配置进行训练。 在静态图版本下,一个模型往往可以通过两个配置文件(一个主配置文件、一个reader的读取配置)实现,在PaddleDetection 2.0后续版本,采用了模块解耦设计,用户可以组合配置模块实现检测器,并可自由修改覆盖各模块配置。
yolov3_mobilenet_v1_roadsign.yml配置需要依赖其他的配置文件。在该例子中需要依赖:
roadsign_voc.yml
runtime.yml
optimizer_40e.yml
yolov3_mobilenet_v1.yml
yolov3_reader.yml
yolov3_mobilenet_v1_roadsign 文件入口
roadsign_voc 主要说明了训练数据和验证数据的路径
runtime.yml 主要说明了公共的运行参数,比如说是否使用GPU、每多少个epoch存储checkpoint等
optimizer_40e.yml 主要说明了学习率和优化器的配置。
ppyolov2_r50vd_dcn.yml 主要说明模型、和主干网络的情况。
ppyolov2_reader.yml 主要说明数据读取器配置,如batch size,并发加载子进程数等,同时包含读取后预处理操作,如resize、数据增强等等
5.3训练
5.3.1单卡训练
export CUDA_VISIBLE_DEVICES=0 #windows和Mac下不需要执行该命令
python tools/train.py -c configs/yolov3/yolov3_mobilenet_v1_roadsign.yml
5.3.2多卡训练
export CUDA_VISIBLE_DEVICES=0,1,2,3,4,5,6,7 #windows和Mac下不需要执行该命令
python -m paddle.distributed.launch --gpus 0,1,2,3,4,5,6,7 tools/train.py -c configs/yolov3/yolov3_mobilenet_v1_roadsign.yml
5.3.3模型恢复训练
export CUDA_VISIBLE_DEVICES=0 #windows和Mac下不需要执行该命令
python tools/train.py -c configs/yolov3/yolov3_mobilenet_v1_roadsign.yml -r output/faster_rcnn_r50_1x_coco/10000
5.4.评估
5.4.1 默认将训练生成的模型保存在当前output文件夹下
export CUDA_VISIBLE_DEVICES=0 #windows和Mac下不需要执行该命令
python tools/eval.py -c configs/yolov3/yolov3_mobilenet_v1_roadsign.yml -o weights=https://paddledet.bj.bcebos.com/models/yolov3_mobilenet_v1_roadsign.pdparams
5.4.2边训练,边评估
export CUDA_VISIBLE_DEVICES=0,1,2,3,4,5,6,7 #windows和Mac下不需要执行该命令
python -m paddle.distributed.launch --gpus 0,1,2,3,4,5,6,7 tools/train.py -c configs/yolov3/yolov3_mobilenet_v1_roadsign.yml --eval
在训练中交替执行评估, 评估在每个epoch训练结束后开始。每次评估后还会评出最佳mAP模型保存到best_model文件夹下。
如果验证集很大,测试将会比较耗时,建议调整configs/runtime.yml 文件中的 snapshot_epoch配置以减少评估次数,或训练完成后再进行评估。
5.4.3通过json文件评估
export CUDA_VISIBLE_DEVICES=0 #windows和Mac下不需要执行该命令
python tools/eval.py -c configs/yolov3/yolov3_mobilenet_v1_roadsign.yml \
--json_eval \
-output_eval evaluation/
上述命令中没有加载模型的选项,则使用配置文件中weights的默认配置,weights表示训练过程中保存的最后一轮模型文件
json文件必须命名为bbox.json或者mask.json,放在evaluation目录下。
5.5.预测
python tools/infer.py -c configs/yolov3/yolov3_mobilenet_v1_roadsign.yml --infer_img=demo/000000570688.jpg -o weights=https://paddledet.bj.bcebos.com/models/yolov3_mobilenet_v1_roadsign.pdparams
设置参数预测
export CUDA_VISIBLE_DEVICES=0 #windows和Mac下不需要执行该命令
python tools/infer.py -c configs/yolov3/yolov3_mobilenet_v1_roadsign.yml \
--infer_img=demo/road554.png \
--output_dir=infer_output/ \
--draw_threshold=0.5 \
-o weights=output/yolov3_mobilenet_v1_roadsign/model_final \
--use_vdl=True