尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

PaddleOCR 中的 EAST 场景文本检测算法:原理、配置、训练与推理部署全指南

PaddleOCR 中的 EAST 场景文本检测算法:原理、配置、训练与推理部署全指南 PaddleOCR 中的 EAST 场景文本检测算法原理、配置、训练与推理部署全指南【免费下载链接】PaddleOCRTurn any PDF or image document into structured data for your AI. A powerful, lightweight OCR toolkit that bridges the gap between images/PDFs and LLMs. Supports 100 languages.项目地址: https://gitcode.com/GitHub_Trending/pa/PaddleOCR导读EASTEfficient and Accurate Scene Text Detector是 2017 年 CVPR 提出的经典端到端场景文本检测算法它以单阶段、直接回归文本四边形的设计在速度和精度之间取得了良好平衡。本指南以 PaddleOCR 仓库中 EAST 算法文档 为核心骨架结合仓库内的配置文件与源码实现完整讲解 EAST 在 PaddleOCR 中的模型结构、训练配置、评估流程、Python 推理部署以及已知的部署限制。读完本文你将掌握如何用 PaddleOCR 的模块化配置训练 EAST 检测模型、如何将训练权重导出为推理模型、如何用predict_det.py完成单图检测并解读后处理参数以及 EAST 当前不支持 C/Serving 部署的边界条件。1. EAST 算法简介与论文出处EAST 由 Xinyu Zhou、Cong Yao 等人在 2017 年 CVPR 会议上提出论文标题为EAST: An Efficient and Accurate Scene Text DetectorarXiv:1704.03155。其核心思想是抛弃传统检测方法中候选框生成 分类 后处理的多阶段流水线改为直接预测文本实例的 score map得分图与 geometry map几何图score map 用于判断每个像素是否属于文本区域geometry map本仓库实现为 8 通道的四边形顶点偏移 1 通道短边归一化信息用于直接回归文本四边形的四个顶点坐标检测结果通过阈值过滤与 Locality-Aware NMS 合并相邻的四边形候选框。这种单阶段回归设计避免了滑动窗口和候选区域生成带来的计算开销使 EAST 在保持较高精度的同时具备明显的速度优势非常适合对实时性有要求的场景文本检测任务。1.1 PaddleOCR 中的复现效果在 ICDAR2015 文本检测公开数据集上PaddleOCR 对 EAST 的复现结果如下表所示数据来自 算法文档模型骨干网络配置文件PrecisionRecallHmean训练模型下载EASTResNet50_vddet_r50_vd_east.yml88.71%81.36%84.88%det_r50_vd_east_v2.0_train.tarEASTMobileNetV3det_mv3_east.yml78.20%79.10%78.65%det_mv3_east_v2.0_train.tar从表中可以看出PaddleOCR 为 EAST 提供了两套骨干网络配置精度优先的 ResNet50_vd 版本Hmean 84.88%与轻量优先的 MobileNetV3 版本Hmean 78.65%便于在不同硬件与实时性要求之间权衡。两个配置均存放于 configs/det 目录下。2. 环境准备在开始训练或推理之前需要先完成 PaddleOCR 运行环境的搭建与项目代码的克隆运行环境准备参考 《运行环境准备》包括安装 Python、PaddlePaddle 框架及 PaddleOCR 依赖项目代码克隆参考 《项目克隆》将仓库克隆到本地后进入项目根目录执行后续命令。需要特别说明的是EAST 的训练与推理属于 PaddleOCR 2.x 时代的经典流程其训练脚本为tools/train.py、推理脚本为tools/infer/predict_det.py因此建议按照仓库 2.x 文档说明配置对应版本的 PaddlePaddle 环境。3. EAST 模型结构从配置到源码的逐层拆解PaddleOCR 对检测模型代码进行了模块化网络被拆分为 transforms → backbones → necks → heads 四个部分目录见 ppocr/modeling。以 det_r50_vd_east.yml 为例其 Architecture 配置如下Architecture: model_type: det algorithm: EAST Transform: Backbone: name: ResNet_vd layers: 50 Neck: name: EASTFPN model_name: large Head: name: EASTHead model_name: large3.1 Backbone特征提取ResNet50_vdlarge 版name: ResNet_vd、layers: 50MobileNetV3轻量版在 det_mv3_east.yml 中为name: MobileNetV3、scale: 0.5、model_name: large。骨干网络负责从输入图像中提取多尺度特征其实现位于 ppocr/modeling/backbones。3.2 NeckEASTFPN 特征金字塔融合EASTFPN的实现位于 ppocr/modeling/necks/east_fpn.py。它采用类似 UNet 的解码结构将骨干网络输出的 4 个尺度特征图f逆序排列f x[::-1]从最深层特征开始通过DeConvBNLayer转置卷积 BN逐级上采样并与对应尺度的浅层特征paddle.concat拼接拼接后经h1_conv、h2_conv、h3_conv三个 ConvBN 层融合最后经g3_conv输出。model_name参数决定输出通道数large为 128 通道small为 64 通道源码self.out_channels分支。这也是两个配置文件在 Neck 上选用large/small的依据。3.3 HeadEASTHead 双分支输出EASTHead的实现位于 ppocr/modeling/heads/det_east_head.py其前向过程输出两个分支f_score self.score_conv(f_det) f_score F.sigmoid(f_score) # 得分图单通道 f_geo self.geo_conv(f_det) f_geo (F.sigmoid(f_geo) - 0.5) * 2 * 800 # 几何图8 通道f_score经过 sigmoid 归一化的得分图表示每个像素属于文本中心的概率f_geo8 通道几何图表示像素到四边形四个顶点每个顶点 dx、dy 两个分量的偏移输出前通过(sigmoid - 0.5) * 2 * 800将值域映射到 [-800, 800]与原论文的像素距离回归保持一致。model_name同样影响 Head 内部通道数large对应[128, 64, 1, 8]small对应[64, 32, 1, 8]。3.4 训练标签生成EASTProcessTrainEAST 的训练标签score_map、geo_map、training_mask由数据增强算子EASTProcessTrain在线生成实现位于 ppocr/data/imaug/east_process.py。其关键行为包括按image_shape将图像等比缩放并 pad 到统一尺寸以 0.5 概率对图像做 90°/180°/270° 随机旋转rotate_im_poly并对多边形坐标做同步旋转变换按random_scale [0.5, 1, 2.0, 3.0]随机缩放按background_ratio概率裁剪纯背景区域否则裁剪含文本的前景区域crop_area保证裁剪区域不横穿文本通过shrink_poly以 0.3 的比例收缩多边形生成 score map通过generate_quad计算 9 通道 geo map8 通道顶点偏移 1 通道短边归一化并对过小文本小于min_text_size或ignore_tags区域写入 training_mask 置 0。3.5 损失函数EASTLossEASTLoss的实现位于 ppocr/losses/det_east_loss.py由两部分组成dice_loss self.dice_loss(f_score, l_score, l_mask) # 得分图 Dice 损失 smooth_l1_loss paddle.mean(smooth_l1 * l_score) # 几何图 Smooth-L1 损失 total_loss dice_loss * 0.01 smooth_l1_loss # 组合损失得分图分支使用 Dice 损失实现见 ppocr/losses/det_basic_loss.py并按训练 mask 忽略难例区域几何图分支使用加权 Smooth-L1 损失8 个通道逐一计算权重与 score map、短边归一化通道相关最终dice_loss乘以 0.01 后再与smooth_l1_loss相加得到总损失。4. 训练、评估与预测上文表格中的 EAST 训练模型使用ICDAR2015 文本检测公开数据集训练得到。数据集下载与标注格式说明可参考 ocr_datasets其中ICDAR2015 训练集包含 1000 张图像测试集 500 张图像标注格式为图片路径 \t json.dumps 编码的标注列表标注中的points为文本框四点的顺时针坐标transcription为###时表示该框无效、训练时跳过。数据下载完成后完整训练流程参考 文本检测训练教程。由于 PaddleOCR 对代码进行了模块化训练不同的检测模型只需更换配置文件即可EAST 无需改动任何网络代码。4.1 配置文件详解以 det_r50_vd_east.yml 为例各关键参数含义如下Global全局参数默认值说明use_gputrue是否使用 GPUCPU 环境需改为falseepoch_num10000训练轮数save_model_dir./output/east_r50_vd/模型保存目录save_epoch_step1000每 N 轮保存一次模型eval_batch_step[4000, 5000]第 4000 次迭代后每 5000 次迭代执行一次评估cal_metric_during_trainFalse训练过程中是否计算指标pretrained_model./pretrain_models/ResNet50_vd_pretrained骨干网络预训练权重路径save_inference_dir空导出推理模型的保存目录由导出命令指定Optimizer优化器使用Adambeta10.9、beta20.999学习率0.001L2 正则系数0。PostProcess后处理EASTPostProcess三个关键阈值见下表与 tools/infer/utility.py 中的命令行参数默认值一致参数默认值命令行参数作用score_thresh0.8--det_east_score_thresh得分图像素级阈值低于该值的像素不作为文本候选cover_thresh0.1--det_east_cover_thresh四边形内部平均得分阈值用于过滤低置信候选框nms_thresh0.2--det_east_nms_threshLocality-Aware NMS 的 IoU 阈值MetricDetMetric主指标为hmean即上表中的 F1 调和平均。Train 数据管线使用SimpleDataSet数据目录与标注文件指向./train_data/icdar2015/text_localization/transforms 依次为DecodeImageBGR、非 channel_first、DetLabelEncode解析标注、EASTProcessTrainimage_shape: [512, 512]、background_ratio: 0.125、min_crop_side_ratio: 0.1、min_text_size: 10以及KeepKeys保留image, score_map, geo_map, training_mask四个键。loader 中batch_size_per_cardResNet50_vd 版为 8MobileNetV3 版为 16。Eval 数据管线同样使用SimpleDataSet与DetLabelEncode测试 transforms 采用DetResizeForTestlimit_side_len: 2400、limit_type: max即长边不超过 2400、NormalizeImagescale 1/255mean/std 采用 ImageNet 统计值[0.485, 0.456, 0.406]/[0.229, 0.224, 0.225]order: hwc、ToCHWImage与KeepKeys。评估时batch_size_per_card必须为 1。4.2 启动训练下载好 ICDAR2015 数据并按格式整理为train_icdar2015_label.txt/test_icdar2015_label.txt后参考检测训练教程中的通用命令即可# 单卡训练CPU 环境需在配置中把 use_gpu 设为 false python3 tools/train.py -c configs/det/det_r50_vd_east.yml \ -o Global.pretrained_model./pretrain_models/ResNet50_vd_pretrained # 多卡训练 python3 -m paddle.distributed.launch --gpus 0,1,2,3 \ tools/train.py -c configs/det/det_r50_vd_east.yml \ -o Global.pretrained_model./pretrain_models/ResNet50_vd_pretrained若需继续训练可指定Global.checkpoints./your/trained/modelGlobal.checkpoints优先级高于Global.pretrained_model。4.3 评估评估通常通过tools/eval.py配合-c指定 EAST 配置完成详细步骤见 文本检测训练教程评估指标由DetMetric计算输出 precision、recall 与 hmean最终以 hmean 作为模型选择依据。5. 推理与部署5.1 导出推理模型首先将训练过程中保存的模型转换为 inference model。以基于 ResNet50_vd 骨干、在 ICDAR2015 英文数据集上训练的模型det_r50_vd_east_v2.0_train.tar为例执行python3 tools/export_model.py -c configs/det/det_r50_vd_east.yml \ -o Global.pretrained_model./det_r50_vd_east_v2.0_train/best_accuracy \ Global.save_inference_dir./inference/det_r50_east/导出后将得到./inference/det_r50_east/目录下的推理模型文件model/params 等供predict_det.py加载。5.2 Python 推理EAST 文本检测模型推理时必须显式设置--det_algorithmEAST否则预测脚本会默认按 DB 算法默认值见 tools/infer/utility.py加载后处理导致结果错误python3 tools/infer/predict_det.py \ --image_dir./doc/imgs_en/img_10.jpg \ --det_model_dir./inference/det_r50_east/ \ --det_algorithmEASTpredict_det.py的实现位于 tools/infer/predict_det.py其中与 EAST 相关的后处理参数传递逻辑postprocess_params的构建可参见其TextDetector.__init__方法L102-L106当det_algorithm EAST时构造EASTPostProcess并从命令行读取det_east_score_thresh、det_east_cover_thresh、det_east_nms_thresh三个参数。执行完成后可视化文本检测结果默认保存到./inference_results文件夹结果文件名的前缀为det_res即det_res_原图文件名。上文示例图的对应文件为 det_res_img_10_east.jpg。5.3 EAST 后处理原理从得分图到文本框EAST 的后处理由EASTPostProcess完成实现位于 ppocr/postprocess/east_postprocess.py核心流程为阈值过滤np.argwhere(score_map score_thresh)选出高于得分阈值的像素恢复四边形restore_rectangle_quad用原点坐标减去 8 通道几何偏移将像素点还原为候选四边形注意乘 4 以对应 1/4 分辨率输出NMS 合并优先使用lanmspip3 install lanms-nova可加速未安装时回退到nms_locality实现见 ppocr/postprocess/locality_aware_nms.py平均得分过滤用cv2.fillPoly构建每个候选框的 mask计算框内得分图均值作为新得分再以cover_thresh过滤低质量框该步与原论文不同是 PaddleOCR 的改进坐标还原与排序按测试时的缩放比例ratio_w/ratio_h将坐标映射回原图过滤短边小于 5 像素的退化框并对顶点做顺时针排序。6. 部署边界C、Serving 与更多方式根据 算法文档 的明确说明EAST 的部署支持情况如下C 推理暂不支持。原因是 EAST 的后处理尚未使用 C 编写目前仅有 Python 实现于 ppocr/postprocess/east_postprocess.pyC 侧无法复用该逻辑Serving 服务化部署暂未支持更多推理部署暂未支持。因此在生产环境中若需将 EAST 集成到服务端应基于 Python 推理链路predict_det.py或在其基础上封装 HTTP 服务进行若对部署形态有强约束如纯 C 环境、Paddle Serving建议评估仓库中支持 C 后处理的检测算法作为替代。7. FAQ 与引用算法文档的 FAQ 章节当前未填充具体问答关于 EAST 训练中常见问题如lanms未安装时的 NMS 回退提示、CPU 训练需关闭use_gpu等可结合上文参数表与源码注释排查。如你在研究或论文中引用 EAST 算法请使用以下 BibTeX源自 算法文档inproceedings{zhou2017east, title{East: an efficient and accurate scene text detector}, author{Zhou, Xinyu and Yao, Cong and Wen, He and Wang, Yuzhi and Zhou, Shuchang and He, Weiran and Liang, Jiajun}, booktitle{Proceedings of the IEEE conference on Computer Vision and Pattern Recognition}, pages{5551--5560}, year{2017} }8. 相关资源速查以下为本指南涉及的核心仓库路径便于继续深入阅读内容路径EAST 算法文档英文docs/version2.x/algorithm/text_detection/algorithm_det_east.en.mdEAST 算法文档中文docs/version2.x/algorithm/text_detection/algorithm_det_east.mdResNet50_vd 配置configs/det/det_r50_vd_east.ymlMobileNetV3 配置configs/det/det_mv3_east.ymlEASTFPN Neckppocr/modeling/necks/east_fpn.pyEASTHeadppocr/modeling/heads/det_east_head.pyEASTLossppocr/losses/det_east_loss.py训练标签生成ppocr/data/imaug/east_process.pyEAST 后处理ppocr/postprocess/east_postprocess.py检测推理脚本tools/infer/predict_det.py检测训练教程docs/version2.x/ppocr/model_train/detection.en.mdOCR 数据集说明docs/datasets/ocr_datasets.en.md【免费下载链接】PaddleOCRTurn any PDF or image document into structured data for your AI. A powerful, lightweight OCR toolkit that bridges the gap between images/PDFs and LLMs. Supports 100 languages.项目地址: https://gitcode.com/GitHub_Trending/pa/PaddleOCR创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表