软硬件环境
- ubuntu 18.04 64bit
- nvidia 1070Ti
- anaconda with python 3.7
- cuda 10.1
- cudnn 7.6
- paddlepaddle 1.8.4
- paddledetection 0.5
简介
引用官方的项目介绍
PaddleDetection飞桨目标检测开发套件,旨在帮助开发者更快更好地完成检测模型的组建、训练、优化及部署等全开发流程。PaddleDetection模块化地实现了多种主流目标检测算法,提供了丰富的数据增强策略、网络模块组件(如骨干网络)、损失函数等,并集成了模型压缩和跨平台高性能部署能力。经过长时间产业实践打磨,PaddleDetection已拥有顺畅、卓越的使用体验,被工业质检、遥感图像检测、无人巡检、新零售、互联网、科研等十多个行业的开发者广泛应用。
总结成一句话就是非常牛逼!
再来看看套件结构概览
Architectures | Backbones | Components | Data Augmentation |
|
|
|
|
眼睛都看花了,支持的也太xx全面了。除了功能,再来看看性能
各模型结构和骨干网络的代表模型在 COCO
数据集上精度 mAP
和单卡 Tesla V100
上预测速度( FPS
)对比图
图中模型均可在模型库中获取,地址是 https://github.com/PaddlePaddle/PaddleDetection#%E6%A8%A1%E5%9E%8B%E5%BA%93
安装PaddlePaddle
飞桨(PaddlePaddle
)是百度研发的中国首个开源开放、技术领先、功能完备的产业级深度学习平台,集深度学习核心训练和推理框架、基础模型库、端到端开发套件和丰富的工具组件于一体。
首先创建 python
的虚拟环境,然后安装 paddlepaddle-gpu
conda create -n ppdetection python=3.7
conda activate ppdetection
pip install paddlepaddle-gpu==1.8.4.post107 -i https://mirror.baidu.com/pypi/simple
如果需要使用到多 gpu
的话,还要安装 nvidia
的 NCCL
框架,它是用来进行多卡通讯的,下载地址是 https://developer.nvidia.com/nccl/nccl-download,选择匹配 CUDA
版本的下载
使用以下命令进行验证
(ppdetection) xugaoxiang@1070Ti:~/Works/github/PaddleDetection-release-0.5$ ipython
Python 3.7.9 (default, Aug 31 2020, 12:42:55)
Type 'copyright', 'credits' or 'license' for more information
IPython 7.19.0 -- An enhanced Interactive Python. Type '?' for help.
In [1]: import paddle.fluid as fluid
In [2]: fluid.install_check.run_check()
Running Verify Fluid Program ...
W1208 13:28:59.964426 13251 device_context.cc:252] Please NOTE: device: 0, CUDA Capability: 61, Driver API Version: 11.0, Runtime API Version: 10.0
W1208 13:29:00.090900 13251 device_context.cc:260] device: 0, cuDNN Version: 7.6.
Your Paddle Fluid works well on SINGLE GPU or CPU.
Your Paddle Fluid works well on MUTIPLE GPU or CPU.
Your Paddle Fluid is installed successfully! Let's start deep Learning with Paddle Fluid now
In [3]: import paddle
In [4]: paddle.__version__
Out[4]: '1.8.4'
In [5]:
安装其它依赖
pip install pycocotools
安装PaddleDetection
目前最新的版本是0.5,下载后进入目录安装必要的依赖
wget https://github.com/PaddlePaddle/PaddleDetection/archive/release/0.5.zip
unzip PaddleDetection-release-0.5.zip
cd PaddleDetection-release-0.5
pip install -r requirements.txt
确认下面测试通过
(ppdetection) xugaoxiang@1070Ti:~/Works/github/PaddleDetection-release-0.5$ python ppdet/modeling/tests/test_architectures.py
ss/home/xugaoxiang/Works/github/PaddleDetection-release-0.5/ppdet/core/workspace.py:118: DeprecationWarning: Using or importing the ABCs from 'collections' instead of from 'collections.abc' is deprecated since Python 3.3,and in 3.9 it will stop working
isinstance(merge_dct[k], collections.Mapping)):
..........
----------------------------------------------------------------------
Ran 12 tests in 2.866s
OK (skipped=2)
使用官方提供的预训练模型预测图片,快速体验模型预测效果
# 通过use_gpu参数设置是否使用GPU
python tools/infer.py -c configs/ppyolo/ppyolo.yml -o use_gpu=true weights=https://paddlemodels.bj.bcebos.com/object_detection/ppyolo.pdparams --infer_img=demo/000000014439.jpg
程序运行结束后,会在 output
文件夹下生成一个画有预测结果的同名图像
模型训练
这里以 paddledetection
自带的苹果、香蕉和桔子数据集为例,官方代码中提供了下载脚本及配置文件
cd dataset/fruit
# 下载数据集,vod格式
python download_fruit.py
这个水果数据集是采用的 VOC
格式,下载完成后,目录结构是这样的
接下来就可以开始训练了,这里使用 YOLOv3
作为训练模型,backbone
是 mobilenet_v1
python tools/train.py -c configs/yolov3_mobilenet_v1_fruit.yml --eval
其中 -c
指定训练配置文件,--eval
表示边训练边测试,配置文件中的参数解释可以参考 https://github.com/PaddlePaddle/PaddleDetection/blob/release/0.5/docs/advanced_tutorials/config_doc/yolov3_mobilenet_v1.md,非常的详细
通过 visualdl
命令可以实时查看变化曲线
# 设置visualdl参数
python tools/train.py -c configs/yolov3_mobilenet_v1_roadsign.yml --eval -o use_gpu=true --use_vdl=True --vdl_log_dir=vdl_dir/scalar
# 打开visualdl
visualdl --logdir vdl_dir/scalar/ --host <host_IP> --port <port_num>
训练好的模型存放在 output/yolov3_mobilenet_v1_fruit
下
使用训练好的模型进行预测
# 使用参数--infer_dir来预测图片文件夹
python tools/infer.py -c configs/yolov3_mobilenet_v1_fruit.yml -o weights=output/yolov3_mobilenet_v1_fruit/best_model.pdmodel --infer_img=demo/orange_71.jpg --output_dir=output