PaddleOCR文本检测-模型训练配置文件
1. Global(全局配置)
字段 |
含义 |
model_name: PP-OCRv5_server_det |
任务名称,仅用于日志/保存路径等标识。 |
debug: false |
关闭调试信息。 |
use_gpu: true |
强制使用 GPU 训练。 |
epoch_num: &epoch_num 500 |
训练 500 个 epoch;&epoch_num 是 YAML 锚点,后文可用 *epoch_num 引用。 |
log_smooth_window: 20 |
日志中 loss 取最近 20 个 batch 的滑动平均。 |
print_batch_step: 10 |
每 10 个 batch 打印一次 log。 |
save_model_dir: ./output/PP-OCRv5_server_det |
训练过程中保存 checkpoints 的根目录。 |
save_epoch_step: 10 |
每 10 个 epoch 保存一次 checkpoint。 |
eval_batch_step: [0, 1500] |
训练到第 0 个 batch 就开始第一次验证,此后每 1500 个 batch 再验证一次。 |
cal_metric_during_train: false |
训练 forward 时不立即算指标,节省显存。 |
checkpoints: |
当需要从某个 checkpoint 继续训练时填写路径;这里留空表示从头训练。 |
pretrained_model: <url...> |
预训练权重。 |
save_inference_dir: null |
训练完成后若需要导出 inference 模型,可填目录;null 表示不导出。 |
use_visualdl: false |
不使用 VisualDL 可视化。 |
infer_img: doc/imgs_en/img_10.jpg |
单张图快速推理时的默认图片。 |
save_res_path: ./checkpoints/det_db/predicts_db.txt |
推理结果保存路径。 |
distributed: true |
开启多卡分布式训练(需 paddle.distributed.launch 启动)。 |
2. Architecture(网络结构)
字段 |
含义 |
model_type: det |
任务类型:检测(det)。 |
algorithm: DB |
检测算法:Differentiable Binarization。 |
Transform: null |
未使用额外变换模块。 |
Backbone.name: PPHGNetV2_B4 |
主干网络,PPHGNetV2_B4 是飞桨自研轻量级网络。 |
Backbone.det: True |
打开检测任务的特定结构开关。 |
Neck.name: LKPAN |
颈部网络,LKPAN = Large Kernel PAN。 |
Neck.out_channels: 256 |
LKPAN 输出通道数。 |
Neck.intracl: true |
启用 Intra-channel CL(通道内上下文增强)。 |
Head.name: PFHeadLocal |
检测头,PFHeadLocal 表示局部感知预测头。 |
Head.k: 50 |
每个像素取最近的 50 个轮廓点做预测。 |
Head.mode: "large" |
使用 large 模式,对应高分辨率场景。 |
3. Loss(损失函数)
字段 |
含义 |
name: DBLoss |
DB 论文的复合损失。 |
balance_loss: true |
正负样本平衡。 |
main_loss_type: DiceLoss |
主损失为 Dice Loss。 |
alpha: 5, beta: 10 |
控制 shrink map 与 threshold map 损失的权重。 |
ohem_ratio: 3 |
OHEM 时负样本/正样本 ≈ 3:1。 |
4. Optimizer(优化器)
字段 |
含义 |
name: Adam |
使用 Adam。 |
beta1 / beta2 |
Adam 默认 0.9 / 0.999。 |
lr.name: Cosine |
余弦退火学习率。 |
lr.learning_rate: 0.001 |
基础 lr,对应 8×8=64 卡总 batch_size 时的经验值;若你 batch_size 不同需线性缩放。 |
lr.warmup_epoch: 2 |
前 2 个 epoch 线性 warmup。 |
regularizer.name: L2, factor: 1e-6 |
权重衰减 1e-6。 |
5. PostProcess(后处理)
字段 |
含义 |
name: DBPostProcess |
DB 官方后处理。 |
thresh: 0.3 |
二值化阈值。 |
box_thresh: 0.6 |
文本框 score 阈值。 |
max_candidates: 1000 |
单图最多输出 1000 个框。 |
unclip_ratio: 1.5 |
轮廓外扩比例。 |
6. Metric(评估指标)
字段 |
含义 |
name: DetMetric |
检测指标:precision / recall / hmean。 |
main_indicator: hmean |
以 hmean 作为 early-stop / best-checkpoint 的依据。 |
7. Train(训练阶段数据与增强)
字段 |
含义 |
dataset.name: SimpleDataSet |
飞桨统一格式检测数据集。 |
data_dir / label_file_list |
图片根目录 + 训练标注 txt。 |
ratio_list: [1.0] |
目前仅用 1 份训练集。 |
Transforms 列表 |
|
DecodeImage |
读图,BGR 格式。 |
DetLabelEncode |
把标注解析为多边形。 |
CopyPaste |
随机 copy-paste 增强。 |
IaaAugment |
Albumentations-style 增强:翻转、±10°旋转、0.5~3 倍尺度缩放。 |
EastRandomCropData |
随机 crop 出 640×640 的小图。 |
MakeBorderMap |
为 threshold map 生成训练目标。 |
MakeShrinkMap |
为 shrink map 生成训练目标。 |
NormalizeImage |
ImageNet 归一化。 |
ToCHWImage |
HWC→CHW。 |
KeepKeys |
指定网络输入的 key 顺序。 |
loader.batch_size_per_card: 8 |
单卡 batch=8,总 batch = 8 × GPU 数。 |
loader.num_workers: 8 |
每个卡 8 个子进程加载数据。 |
8. Eval(验证阶段)
字段 |
含义 |
dataset/label_file_list |
验证集标注 txt。 |
DetResizeForTest |
验证时按原图长边不超过 2560 进行等比例缩放(默认逻辑)。 |
其余 transforms 与训练阶段一致,但不做随机增强。 |
|
batch_size_per_card: 1 |
验证时单卡 batch=1,避免大图显存爆炸。 |
num_workers: 2 |
验证数据加载进程数。 |
9. profiler_options: null
未开启 Paddle Profiler 性能分析。
使用建议
1、GPU 显存不足
可把 batch_size_per_card
从 8 调到 4,或把 EastRandomCropData.size
降到 [512,512]
。
2、学习率
若只用 1-2 张卡,需把 learning_rate
线性减小(例如单卡设 0.001/8 ≈ 0.000125)。
模型训练中日志输出内容详解
模型训练中单次step的日志
ppocr INFO: epoch: [1/500], global_step: 10, lr: 0.000090, loss: 1.843800, loss_shrink_maps: 0.954784, loss_threshold_maps: 0.559544, loss_binary_maps: 0.191454, loss_cbn: 0.191454, avg_reader_cost: 0.07927 s, avg_batch_cost: 0.40427 s, avg_samples: 4.0, ips: 9.89442 samples/s, eta: 1:24:09, max_mem_reserved: 6279 MB, max_mem_allocated: 5350 MB
|
这段日志是 PaddleOCR 文本检测模型训练过程中的一次 step 日志输出,发生在 第 1 个 epoch、第 10 个 global_step 时。
以下是详细解释:
字段 |
含义 |
epoch: [1/500] |
当前是第 1 个 epoch,总共训练 500 个 epoch。 |
global_step: 10 |
从训练开始累计的第 10 个 batch。 |
lr: 0.000090 |
当前学习率(warmup 阶段,还没升到预设的 0.001)。 |
loss: 1.843800 |
总损失,是下面各项损失的加权和。 |
loss_shrink_maps: 0.954784 |
收缩图(shrink map)的 Dice Loss,用于学习文字区域核心区域。 |
loss_threshold_maps: 0.559544 |
阈值图(threshold map)的 L1 Loss,用于学习二值化阈值。 |
loss_binary_maps: 0.191454 |
二值图(binary map)的 Dice Loss,用于学习最终二值化结果。 |
loss_cbn: 0.191454 |
与 loss_binary_maps 相同,可能是兼容旧版本的字段名。 |
性能相关字段 |
含义 |
avg_reader_cost: 0.07927 s |
每 batch 数据读取平均耗时(79ms)。 |
avg_batch_cost: 0.40427 s |
每 batch 总耗时(包括前向+反向+优化器更新)。 |
avg_samples: 4.0 |
每 batch 实际样本数(你设的是 batch_size_per_card: 4 )。 |
ips: 9.89442 samples/s |
当前实际吞吐 ≈ 10 张图/秒。 |
eta: 1:24:09 |
预计剩余训练时间 1 小时 24 分 9 秒(基于当前速度)。 |
max_mem_reserved: 6279 MB |
GPU 显存最大预留量(PyTorch/Paddle 显存池)。 |
max_mem_allocated: 5350 MB |
GPU 显存实际使用量。 |
结论
- 训练已正常启动,GPU 显存占用 ≈ 5.3 GB,无 OOM。
- 数据加载耗时占比不高(79 ms vs 404 ms),说明数据 pipeline 合理。
- 吞吐 10 img/s,如果 GPU 利用率低,可考虑:
- 增大
batch_size_per_card
;
- 提高
num_workers
;
- 开启 AMP (
--amp_level=O2
) 加速。
训练完成后的模型评估结果日志
ppocr INFO: best metric, hmean: 0.7633587786259542, is_float16: False, precision: 0.78125, recall: 0.746268656716418, fps: 30.84728874632143, best_epoch: 60
|
这段日志是 训练完成后的“最佳模型”评估结果,记录了在 验证集 上表现最好的那次 epoch(这里是第 60 个 epoch)的检测性能指标。逐项解释如下:
字段 |
含义 |
best metric |
说明这是到目前为止 最好的综合指标 的一行日志。 |
hmean: 0.7633587786259542 |
F-score(H-mean),即 Precision 与 Recall 的调和平均数,是检测任务的核心评价指标,越高越好。这里约为 **76.34%**。 |
is_float16: False |
表示 未启用 FP16 混合精度 推理(即使用 FP32)。 |
precision: 0.78125 |
精确率 ≈ 78.13%,即预测为文本的框中有 78.13% 是正确的。 |
recall: 0.746268656716418 |
召回率 ≈ 74.63%,即所有真实文本框中有 74.63% 被成功检测到。 |
fps: 30.84728874632143 |
推理速度,约 30.85 帧/秒(基于验证集单张图测试)。 |
best_epoch: 60 |
在 第 60 个 epoch 时达到上述最佳成绩。 |
结论
- 当前模型在验证集上取得 H-mean ≈ 76.3% 的效果,属于 中等偏上的检测精度(具体好坏取决于数据集难度)。
- Precision > Recall 说明模型更“保守”,漏检略多于误检。
- 推理速度 30.85 FPS,可满足实时场景(≥25 FPS)。
- 若需要更高精度,可继续训练(尚未到 500 epoch),或尝试数据增强、更大 backbone、FP16 推理提速。