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安装paddledet

pip install paddledet==2.1.0 -i https://mirror.baidu.com/pypi/simple

下载使用源码中的配置文件和代码示例

git clone https://github.com/PaddlePaddle/PaddleDetection.git
cd PaddleDetection

方法二:源码编译安装

克隆PaddleDetection仓库

cd <path/to/clone/PaddleDetection>
git clone https://github.com/PaddlePaddle/PaddleDetection.git

编译安装paddledet

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

简单测试一张图

在GPU上预测一张图片

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
Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐