PaddleX模型产线使用概览¶
若您已经体验过PaddleX中的预训练模型产线效果,希望直接进行模型微调,可以跳转到模型选择
完整的PaddleX模型产线开发流程如下图所示:
graph LR
select_pipeline(选择产线) --> online_experience[快速体验]
online_experience --> online_ok{效果满意?}
online_ok --不满意--> select_model[选择模型]
select_model --> model_finetune[模型微调]
online_ok --满意--> development_integration(开发集成/部署)
model_finetune --> pipeline_test[产线测试]
pipeline_test --> test_ok{效果满意?}
test_ok --不满意--> select_model
test_ok --满意--> development_integration
PaddleX 所提供的预训练的模型产线均可以快速体验效果,如果产线效果可以达到您的要求,您可以直接将预训练的模型产线进行开发集成/部署,如果效果不及预期,可以使用私有数据对产线中的模型进行微调,直到达到满意的效果。
下面,让我们以登机牌识别的任务为例,介绍PaddleX模型产线工具的本地使用过程,在使用前,请确保您已经按照PaddleX本地安装教程完成了PaddleX的安装。
1、选择产线¶
PaddleX中每条产线都可以解决特定任务场景的问题如目标检测、时序预测、语义分割等,您需要根据具体任务选择后续进行开发的产线。例如此处为登机牌识别任务,对应 PaddleX 的【通用 OCR 】产线
2、快速体验¶
PaddleX的每条产线都集成了众多预训练模型,您可以先体验PaddleX的预训练模型产线的效果,如果预训练模型产线的效果符合您的预期,即可直接进行开发集成/部署,如果不符合,再根据后续步骤对产线的效果进行优化。
以实现登机牌识别任务的通用OCR产线为例,一行命令即可快速体验产线效果:
paddlex --pipeline OCR --input https://paddle-model-ecology.bj.bcebos.com/paddlex/imgs/demo_image/general_ocr_002.png --device gpu:0
--pipeline:产线名称,此处为OCR产线
--input:待处理的输入图片的本地路径或URL
--device 使用的GPU序号(例如gpu:0表示使用第0块GPU,gpu:1,2表示使用第1、2块GPU),也可选择使用CPU(--device cpu)
此外,也可在执行命令时加入 -y
参数,则可跳过路径选择,直接将产线配置文件保存至当前目录。
获取产线配置文件后,可将 --pipeline
替换为配置文件保存路径,即可使配置文件生效。例如,若配置文件保存路径为 ./ocr.yaml
,只需执行:
paddlex --pipeline ./ocr.yaml --input https://paddle-model-ecology.bj.bcebos.com/paddlex/imgs/demo_image/general_ocr_002.png
--model
、--device
等参数无需指定,将使用配置文件中的参数。若依然指定了参数,将以指定的参数为准。
运行后,得到的结果为:
{'img_path': '/root/.paddlex/predict_input/general_ocr_002.png', 'dt_polys': [[[5, 12], [88, 10], [88, 29], [5, 31]], [[208, 14], [249, 14], [249, 22], [208, 22]], [[695, 15], [824, 15], [824, 60], [695, 60]], [[158, 27], [355, 23], [356, 70], [159, 73]], [[421, 25], [659, 19], [660, 59], [422, 64]], [[337, 104], [460, 102], [460, 127], [337, 129]], [[486, 103], [650, 100], [650, 125], [486, 128]], [[675, 98], [835, 94], [835, 119], [675, 124]], [[64, 114], [192, 110], [192, 131], [64, 134]], [[210, 108], [318, 106], [318, 128], [210, 130]], [[82, 140], [214, 138], [214, 163], [82, 165]], [[226, 136], [328, 136], [328, 161], [226, 161]], [[404, 134], [432, 134], [432, 161], [404, 161]], [[509, 131], [570, 131], [570, 158], [509, 158]], [[730, 138], [771, 138], [771, 154], [730, 154]], [[806, 136], [817, 136], [817, 146], [806, 146]], [[342, 175], [470, 173], [470, 197], [342, 199]], [[486, 173], [616, 171], [616, 196], [486, 198]], [[677, 169], [813, 166], [813, 191], [677, 194]], [[65, 181], [170, 177], [171, 202], [66, 205]], [[96, 208], [171, 205], [172, 230], [97, 232]], [[336, 220], [476, 215], [476, 237], [336, 242]], [[507, 217], [554, 217], [554, 236], [507, 236]], [[87, 229], [204, 227], [204, 251], [87, 254]], [[344, 240], [483, 236], [483, 258], [344, 262]], [[66, 252], [174, 249], [174, 271], [66, 273]], [[75, 279], [264, 272], [265, 297], [76, 303]], [[459, 297], [581, 295], [581, 320], [459, 322]], [[101, 314], [210, 311], [210, 337], [101, 339]], [[68, 344], [165, 340], [166, 365], [69, 368]], [[345, 350], [662, 346], [662, 368], [345, 371]], [[100, 459], [832, 444], [832, 465], [100, 480]]], 'dt_scores': [0.8183103704439653, 0.7609575621092027, 0.8662357274035412, 0.8619508290334809, 0.8495855993183273, 0.8676840017933314, 0.8807986687956436, 0.822308525056085, 0.8686617037621976, 0.8279022169854463, 0.952332847006758, 0.8742692553015098, 0.8477013022907575, 0.8528771493227294, 0.7622965906848765, 0.8492388224448705, 0.8344203789965632, 0.8078477124353284, 0.6300434587457232, 0.8359967356998494, 0.7618617265751318, 0.9481573079350023, 0.8712182945408912, 0.837416955846334, 0.8292475059403851, 0.7860382856406026, 0.7350527486717117, 0.8701022267947695, 0.87172526903969, 0.8779847108088126, 0.7020437651809734, 0.6611684983372949], 'rec_text': ['www.997', '151', 'PASS', '登机牌', 'BOARDING', '舱位 CLASS', '序号SERIALNO.', '座位号SEATNO', '航班 FLIGHT', '日期DATE', 'MU 2379', '03DEC', 'W', '035', 'F', '1', '始发地FROM', '登机口 GATE', '登机时间BDT', '目的地TO', '福州', 'TAIYUAN', 'G11', 'FUZHOU', '身份识别IDNO.', '姓名NAME', 'ZHANGQIWEI', '票号TKTNO.', '张祺伟', '票价FARE', 'ETKT7813699238489/1', '登机口于起飞前10分钟关闭GATESCLOSE1OMINUTESBEFOREDEPARTURETIME'], 'rec_score': [0.9617719054222107, 0.4199012815952301, 0.9652514457702637, 0.9978302121162415, 0.9853208661079407, 0.9445787072181702, 0.9714463949203491, 0.9841841459274292, 0.9564052224159241, 0.9959094524383545, 0.9386572241783142, 0.9825271368026733, 0.9356589317321777, 0.9985442161560059, 0.3965512812137604, 0.15236201882362366, 0.9976775050163269, 0.9547433257102966, 0.9974752068519592, 0.9646636843681335, 0.9907559156417847, 0.9895358681678772, 0.9374122023582458, 0.9909093379974365, 0.9796401262283325, 0.9899340271949768, 0.992210865020752, 0.9478569626808167, 0.9982215762138367, 0.9924325942993164, 0.9941263794898987, 0.96443772315979]}
......
可视化结果如下:
3、模型选择(可选)¶
由于一个产线中可能包含一个或多个模型,在进行模型微调时,您需要根据测试的情况确定微调其中的哪个模型。以此处登机牌识别任务的OCR产线为例,该产线包含文本检测模型(如 PP-OCRv4_mobile_det
)和文本识别模型(如 PP-OCRv4_mobile_rec
),如发现文字的定位不准,则需要微调文本检测模型,如果发现文字的识别不准,则需要微调文本识别模型。
4、模型微调(可选)¶
在确定好需要微调的模型后,您需要用私有数据集对模型进行训练,PaddleX提供了单模型开发工具,一行命令即可完成模型的训练:
python main.py -c paddlex/configs/text_recognition/PP-OCRv4_mobile_rec.yaml \
-o Global.mode=train \
-o Global.dataset_dir=your/dataset_dir
5、产线测试(可选)¶
当您使用私有数据集完成微调训练后,可获得本地模型权重文件。
若您需要使用微调后的模型权重,只需对产线配置文件做修改,将微调后模型权重的本地路径替换至产线配置文件中的对应位置即可:
......
Pipeline:
det_model: PP-OCRv4_server_det #可修改为微调后文本检测模型的本地路径
det_device: "gpu"
rec_model: PP-OCRv4_server_rec #可修改为微调后文本识别模型的本地路径
rec_batch_size: 1
rec_device: "gpu"
......
如果效果满意,即可将微调后的产线进行开发集成/部署,如果不满意,即可回到模型选择尝试继续微调其他任务模块的模型,直到达到满意的效果。
6、开发集成/部署¶
PaddleX提供了简洁的Python API,用几行代码即可将模型产线集成到您的项目中。此处用于集成登机牌识别的OCR产线示例代码如下:
from paddlex import create_pipeline
pipeline = create_pipeline(pipeline="OCR")
output = pipeline.predict("https://paddle-model-ecology.bj.bcebos.com/paddlex/imgs/demo_image/general_ocr_001.png")
for res in output:
res.print(json_format=False)
res.save_to_img("./output/")
res.save_to_json("./output/res.json")
同时,PaddleX提供了三种部署方式及详细的部署教程:
🚀 高性能部署:在实际生产环境中,许多应用对部署策略的性能指标(尤其是响应速度)有着较严苛的标准,以确保系统的高效运行与用户体验的流畅性。为此,PaddleX 提供高性能推理插件,旨在对模型推理及前后处理进行深度性能优化,实现端到端流程的显著提速,详细的高性能部署流程请参考PaddleX高性能部署指南。
☁️ 服务化部署:服务化部署是实际生产环境中常见的一种部署形式。通过将推理功能封装为服务,客户端可以通过网络请求来访问这些服务,以获取推理结果。PaddleX 支持用户以低成本实现产线的服务化部署,详细的服务化部署流程请参考PaddleX服务化部署指南。
📱 端侧部署:端侧部署是一种将计算和数据处理功能放在用户设备本身上的方式,设备可以直接处理数据,而不需要依赖远程的服务器。PaddleX 支持将模型部署在 Android 等端侧设备上,详细的端侧部署流程请参考PaddleX端侧部署指南。 您可以根据需要选择合适的方式部署模型产线,进而进行后续的 AI 应用集成。
❗ 温馨提醒:PaddleX为每个产线都提供了详细的使用说明,您可以根据需要进行选择,所有产线对应的使用说明如下:
产线名称 | 详细说明 |
---|---|
文档场景信息抽取v3 | 文档场景信息抽取v3产线Python脚本使用说明 |
通用OCR | 通用OCR产线Python脚本使用说明 |
通用表格识别 | 通用表格识别产线Python脚本使用说明 |