参考链接:
https://github.com/PaddlePaddle/PaddleDetection/blob/release/2.0-rc/docs/tutorials/DetectionPipeline.md
文教程以路标数据集为例,使用yoloV3算法详细说明paddleDetection全流程使用教程,包含:准备数据,选择模型,训练模型,评估,预测,模型压缩和模型部署。
数据准备
关于数据准备的请参考:
注意:
(1)数据集中路径名、文件名不要包含空格,尽量不要使用中文
(2)用户数据,建议在训练前仔细检查 数据,避免因数据标注格式错误或图像数据不完整造成训练过程中的中断
(2)如果图像尺寸太大的话,在不限制读入数据尺寸情况下,占用内存较多,会造成内存/显存溢出,请合理设置batch_size,可从小到大尝试
模型选择
PaddleDetection中提供了丰富的模型库,具体可在模型库中查看各个模型的指标,您可依据实际部署算力的情况,选择合适的模型。
本教程选用YOLOv3作为训练模型。
训练和模型评估
请参考此链接:
推理部署
在模型部署之前,如果您需要对模型进行压缩,PaddleDetection提供了基于PaddleSlim 进行模型压缩的完整教程和实验结果,详细请参考:量化、剪枝、蒸馏、搜索 。
详细部署文档请参考PaddleDetection预测部署文档。这里以PaddleServing部署方式为例说明。
安装paddle-serving-client和paddle-serving-server
# 安装 paddle-serving-client
pip install paddle-serving-client -i https://mirror.baidu.com/pypi/simple
# 安装 paddle-serving-server
pip install paddle-serving-server -i https://mirror.baidu.com/pypi/simple
# 安装 paddle-serving-server-gpu
pip install paddle-serving-server-gpu -i https://mirror.baidu.com/pypi/simple
导出模型
python tools/export_serving_model.py -c configs/yolov3_mobilenet_v1_roadsign.yml -o use_gpu=true weights=output/yolov3_mobilenet_v1_roadsign/best_model --output_dir=./inference_model
以上命令会在./inference_model文件夹下生成一个yolov3_mobilenet_v1_roadsign文件夹:
inference_model
│ ├── yolov3_mobilenet_v1_roadsign
│ │ ├── infer_cfg.yml
│ │ ├── serving_client
│ │ │ ├── serving_client_conf.prototxt
│ │ │ ├── serving_client_conf.stream.prototxt
│ │ ├── serving_server
│ │ │ ├── conv1_bn_mean
│ │ │ ├── conv1_bn_offset
│ │ │ ├── conv1_bn_scale
│ │ │ ├── ...
启动PaddleServing服务
cd inference_model/yolov3_mobilenet_v1_roadsign/
# GPU
python -m paddle_serving_server_gpu.serve --model serving_server --port 9393 --gpu_ids 0
# CPU
python -m paddle_serving_server.serve --model serving_server --port 9393
注意:
遇到的一些问题:
1:/root/anaconda3/lib/python3.7/site-packages/paddle_serving_server/serving-cpu-avx-openblas-0.5.0/serving: /lib64/libstdcn `CXXABI_1.3.8' not found (required by /root/anaconda3/lib/python3.7/site-packages/paddle_serving_server/serving-cpu-av0/serving)
https://github.com/cdr/code-server/issues/347#issuecomment-482670081
2:
测试部署的服务
准备label_list.txt文件
# 进入到导出模型文件夹
cd inference_model/yolov3_mobilenet_v1_roadsign/
# 将数据集对应的label_list.txt文件拷贝到当前文件夹下
cp ../../dataset/roadsign_voc/label_list.txt .
设置测试文件test_client.py中的prototxt文件路径为serving_client/serving_client_conf.prototxt 。
设置fetch为fetch=[“multiclass_nms_0.tmp_0”])
测试
# 进入目录
cd inference_model/yolov3_mobilenet_v1_roadsign/
# 测试代码 test_client.py 会自动创建output文件夹,并在output下生成`bbox.json`和`road554.png`两个文件
python ../../deploy/serving/test_client.py ../../demo/road554.png
请关注我的个人微信公众号
参考链接
- https://github.com/PaddlePaddle/PaddleDetection/blob/release/2.0-rc/docs/tutorials/DetectionPipeline.md