OCR/GPU: PaddleServing部署流程记录(cuda10.1)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了OCR/GPU: PaddleServing部署流程记录(cuda10.1)相关的知识,希望对你有一定的参考价值。

参考技术A

准备工作:

其中--gpus all 需要提前安装 nvidia-container-toolkit (即 nvidia-docker 的升级版)表示允许容器访问使用所有gpu(或指定gpu设备序列id,如--gpus 0或--gpus 0,1,2)
-e NVIDIA_DRIVER_CAPABILITIES=compute,utility -e NVIDIA_VISIBLE_DEVICES=all 等docker容器启动参数可能在部分场景下需要使用但本次部署未使用到

容器已经预安装python 3.5、3.7、3.8等常用版本,默认python3为3.5

// 或者获取服务端模型进行转换,(测试ch_ppocr_server_v2.0_rec和ch_ppocr_server_v2.0_det发现无效且返回错误码err_no:5)
获取用于测试的数据集(可选)

启动服务并将日志输出至log.txt(在同级目录下的./Pipelinexxxx/pipeline.log也记录有一部分启动运行的日志)

运行客户端访问服务测试

关于坐标,直接读取如下中的dt_boxes_list或dt_boxes_list[0]都可获得正常的坐标,但需要自己做格式处理(直接用str()函数处理示例图片结果得到的文本字符如dt_boxes_list将得到 [array([[[292, 298], [332, 298], [345, 848], [305, 848]], [[345, 298], [377, 298], [382, 660], [350, 660]]], dtype=int16)] ):

在尝试部署环境前未确认各版本对应关系就进行安装容易出问题,目前我使用PaddleOCR部署GPU的pdserving和hubserving识别环境均失败,异常为

通过各种命令查询版本未发现有误,除了我病急乱投医自己去直接pip3.7 install torch 的版本打印需求为cuda10.2(PaddleOCR环境没有这个包,且后来发现根据网文介绍还需要安装指定torch版本的基础上进行测试)
部分文章提到可能是paddle版本对不上,这个暂未尝试

2021/12/02
发现确实是paddle版本对不上,docker_hub上的镜像容器已经携带配套的paddle,但我按文档来一步步安装时,文档中安装paddle的步骤会把镜像容器中的版本卸载掉;

如何一小时杀入天池OCR比赛前排?

“英特尔创新大师杯”深度学习挑战赛:通用场景OCR文本识别任务

本次比赛的主要目的是以端到端的方式检测和识别所提供图像中的每个文本实例。主要任务为中文文本识别。

比赛链接:https://tianchi.aliyun.com/competition/entrance/531902/introduction

环境配置

paddlepaddle

安装paddlepaddle-gpu,在安装好CUDA的情况下,可以直接通过pip安装。

官方安装文档:https://www.paddlepaddle.org.cn/install/quick

其他环境

  • python3

  • 需要有GPU

总步骤:一键训练预测

为了方便大家运行baseline,这里写好了训练和预测代码,在GPU的情况下需要训练半个小时,然后10分钟预测。

git clone https://gitee.com/coggle/tianchi-intel-PaddleOCR
cd tianchi-intel-PaddleOCR
sh run.sh

当然也可以分步骤执行,参考下面的教程。注意下面教程都在代码根目录执行。最后提交就可以得到0.65线上分数!

步骤1:下载比赛图片

python3 down_image.py

保存目录为train_data/tianchi/image,按照文件名进行保存,训练集和测试集存储在一起。

步骤2:下载预测模型

由于OCR包括多个步骤,此时我们只对其中检测的部署进行fientune,所以其他部署的权重也需要下载。

mkdir inference && cd inference/

# 下载模型
wget https://paddleocr.bj.bcebos.com/dygraph_v2.0/ch/ch_ppocr_server_v2.0_det_infer.tar
wget https://paddleocr.bj.bcebos.com/dygraph_v2.0/ch/ch_ppocr_mobile_v2.0_cls_infer.tar
wget https://paddleocr.bj.bcebos.com/dygraph_v2.0/ch/ch_ppocr_server_v2.0_rec_infer.tar

# 解压模型
tar -xf ch_ppocr_server_v2.0_rec_infer.tar 
tar -xf ch_ppocr_server_v2.0_det_infer.tar
tar -xf ch_ppocr_mobile_v2.0_cls_infer.tar

下载完成后可以验证是否可以成功预测:

python3 tools/infer/predict_system.py --image_dir="./1.jpg" --det_model_dir="./inference/ch_ppocr_server_v2.0_det_infer/"  --rec_model_dir="./inference/ch_ppocr_server_v2.0_rec_infer/" --cls_model_dir='./inference/ch_ppocr_mobile_v2.0_cls_infer/' --use_angle_cls=True --use_space_char=True

输出结果为:

dt_boxes num : 2, elapse : 0.9568207263946533
cls num  : 2, elapse : 0.006417512893676758
rec_res num  : 2, elapse : 0.05788707733154297
Predict time of ./1.jpg: 1.036s
土地整治与土壤修复研究中心, 0.973
华南农业大学-东图, 0.992

如果直接使用预训练模型,其实也可以得到不错的分数。但是比赛数据集与通用数据集存在差异,finetune后精度会更好。

步骤3:训练预检测模型

首先下载检测模块的预训练模型:

cd inference
wget https://paddleocr.bj.bcebos.com/dygraph_v2.0/ch/ch_ppocr_server_v2.0_det_train.tar
tar -xf ch_ppocr_server_v2.0_det_train.tar

然后进行finetune,这里训练4个epoch,30分钟左右完成训练。

python3 tools/train.py -c configs/det/ch_ppocr_v2.0/ch_det_res18_db_v2.0.yml -o Global.pretrain_weights=./inference/ch_ppocr_server_v2.0_det_train/

步骤4:对测试集进行预测

训练完成后,接下来需要将模型权重导出,用于预测。并对测试集的图片进行预测,写入json。

# 将模型导出
python3 tools/export_model.py -c configs/det/ch_ppocr_v2.0/ch_det_res18_db_v2.0.yml -o Global.pretrained_model=output/ch_db_res18/best_accuracy  Global.save_inference_dir=output/ch_db_res18/

# 对测试集进行预测
python3 tools/infer/predict_system_tianchi.py --image_dir="./doc/imgs/11.jpg" --det_model_dir="output/ch_db_res18/"  --rec_model_dir="./inference/ch_ppocr_server_v2.0_rec_infer/" --cls_model_dir='./inference/ch_ppocr_mobile_v2.0_cls_infer/' --use_angle_cls=True --use_space_char=True

# 将结果文件压缩
zip -r submit.zip Xeon1OCR_round1_test*

学习交流

一起组队参赛,学习交流。将在群内分享比赛基础方案、相关论文和实践经验。已在相关群不需要重复进。

若群满,可在后台回复【OCR】进

参考资料

https://github.com/PaddlePaddle/PaddleOCR/blob/release/2.1/doc/doc_ch/customize.md

https://github.com/PaddlePaddle/PaddleOCR/blob/release/2.1/doc/doc_ch/recognition.md

https://github.com/PaddlePaddle/PaddleOCR/blob/release/2.1/doc/doc_ch/inference.md

整理不易,三连

以上是关于OCR/GPU: PaddleServing部署流程记录(cuda10.1)的主要内容,如果未能解决你的问题,请参考以下文章

给AI换个“大动力小心脏”之OCR异构加速

[转]Theano下用CNN(卷积神经网络)做车牌中文字符OCR

CPU互联/GPU互联总线

[C#][原创]利用paddleocr.net库编写C#代码进行ocr检测和识别

tf识别非固定长度图片ocr(数字+字母 n位长度可变)- CNN+RNN+CTC

fuser -v /dev/nvidia*卡死的替代方法