配置环境

参考:https://github/PaddlePaddle/PaddleDetection/blob/release/2.4/docs/tutorials/INSTALL_cn.md
我的配置是:3090 cuda驱动版本11.3 runtime版本11.0 CUDNN 8.0
先有个虚拟环境:

conda create --name paddledetection python=3.7

paddledetection是paddlepaddle下的一个子模块。所以必须要先安装paddlepaddle才能运行paddledetection,因此先在官网https://www.paddlepaddle/ 找到自己配置相关的paddlepaddle命令,安装paddlepaddle:

python -m pip install paddlepaddle-gpu==2.3.1.post111 -f https://www.paddlepaddle.org.cn/whl/linux/mkl/avx/stable.html

然后测一下:

python -c "import paddle; print(paddle.__version__)"

然后安装paddleDetection:

pip install -r requirements.txt #安装依赖
python setup.py install #编译安装paddledet

再测试一下:

python ppdet/modeling/tests/test_architectures.py
整个过程其实很快。

测试推理:

# 在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

会先给下载一个模型:

结果: 看起来是显存不足,因为我其他程序占用着显存,清理后再执行推理: 推理成功。

准备数据集

参考官方文档:

https://paddledetection.readthedocs.io/tutorials/Custom_DataSet.html

一般我打标注用labelimg,我手头有一些VOC格式的数据,如何准备的可以先参照这个文章:

https://raychiu.blog.csdn/article/details/119342153

我需要根据PaddleDetection的VOC格式要求整理一下数据:
到Annotations同级目录下:
第一步创建label文件:

echo -e "invalid\npositive\nnegative" > label_list.txt

第二步把所有图片路径组织到一个文件里:

ls JPEGImages/*.jpg | shuf > all_image_list.txt

第三步按照图片路径在前标注文件在后的格式组织一个文件:

awk -F"/" '{print $2}' all_image_list.txt | awk -F".jpg" '{print $1}'  | awk -F"\t" '{print "JPEGImages/"$1".jpg Annotations/"$1".xml"}' > all_list.txt

第四步自己按照8:2的比例计算一下训练集和验证集的数目划分数据集:

head -n 1820 all_list.txt > test.txt
tail -n 7281 all_list.txt > trainval.txt

如果要训练、验证、测试都要划分,假如是8:1:1那么:

head -n 910 all_list.txt > test.txt
head -n 1820 all_list.txt | tail -n 910 > val.txt
tail -n 7281 all_list.txt > train.txt

数据集也划分好了,删了不用的文件:

rm -rf all_image_list.txt all_list.txt

是这样的目录:

## 开始训练 用yolov3训练: 先找到和是的yml文件: 注意修改voc.yml中的数据路径。
python tools/train.py -c configs/yolov3/yolov3_darknet53_270e_voc.yml --eval --use_vdl=true --vdl_log_dir=vdl_dir/scalar -o use_gpu=true

参数解释:

–eval #边训练边验证 吃GPU
–use_vdl #类似于tensorboard,true开启,训练完loss可视化
–vdl_log_dir #log文件保存路径,和上面一句一起使用
-o use_gpu #是否使用gpu训练

会先自动下载一个预训练模型,然后开始训练了:

怎么用VisualDL工具看日志呢,因为服务器没有显示功能,只能远程服务器看,步骤如下: 第一步,服务器先启动VisualDL服务:
visualdl --logdir vdl_dir/scalar/
可以看到自动起了一个8040的服务 第二步,windows远程服务器,并做一个端口转发:
ssh -L 10086:127.0.0.1:8040 xiaoling@192.168.6.55

第三步浏览器访问地址:http://localhost:10086/ 即可看到日志页面了:

训练完成:

## 模型部署 测试推理:
python -u tools/infer.py -c configs/yolov3/yolov3_darknet53_270e_voc.yml    --infer_img=demo/3.bmp
导出模型:
python -u tools/export_model.py -c configs/yolov3/yolov3_darknet53_270e_voc.yml  --output_dir=./inference_model
使用python端进行预测:
python deploy/python/infer.py --model_dir=./inference_model/yolov3_darknet53_270e_voc --image_file=demo/3.bmp  --device=GPU

更多推荐

paddleDetection训练自己的模型