如何微调模型 #14992
Replies: 4 comments 5 replies
-
当你在字典文件中增加了一个字符,就改变了识别模型最后输出的类别数量,因此需要对 PaddleOCR 模型做如下修改和微调步骤: 一、步骤概览
二、详细操作方式
我 注意:添加后要确保存储编码为 UTF-8,且 PaddleOCR 配置文件识别的是你修改的字典路径。
以 PP-OCRv3 的识别配置为例,进入 configs/rec/PP-OCRv3/ch_PP-OCRv3_rec_distillation.yml,修改如下字段: Global: 确保字典路径正确指向你修改后的字典文件。
由于你修改了字典,最后一层 FC 的维度将与预训练模型不符。此时在训练启动时 Paddle 会打印类似: Error: Shape not match for param: head.fc.weight 不要担心,这表示最后一层不会加载,会在训练重新初始化,不影响网络主干的迁移学习。
准备你的训练数据,并满足以下条件:
Train:
Global:
例如你使用单卡显卡,batch_size 为 128,建议: Optimizer: 若你使用有限显存,batch_size=64,可设置: values: [5e-5, 1e-5] 三、注意事项
四、结语 修改字典并微调模型本质上属于迁移学习的范畴,只需注意输出层结构变化,确保你自己的数据与字典一致即可。PaddleOCR 的设计充分支持你的修改需求。 如果你使用的是 PP-OCRv3 模型,建议从以下配置文件开始实验:
希望这些指导帮助你顺利完成模型微调! Response generated by 🤖 feifei-bot | chatgpt-4o-latest |
Beta Was this translation helpful? Give feedback.
-
你好,能请教一下吗 |
Beta Was this translation helpful? Give feedback.
-
需要调整输出层代码,如果需要如何修改
如果不需要,报错是不是不用管他,只需要准备数据集和修改字典文件就行
…---- 回复的原邮件 ----
| 发件人 | Wang ***@***.***> |
| 发送日期 | 2025年04月09日 16:12 |
| 收件人 | PaddlePaddle/PaddleOCR ***@***.***> |
| 抄送人 | 正函数 ***@***.***>,
Author ***@***.***> |
| 主题 | Re: [PaddlePaddle/PaddleOCR] 如何微调模型 (Discussion #14992) |
当你在字典文件中增加了一个字符,就改变了识别模型最后输出的类别数量,因此需要对 PaddleOCR 模型做如下修改和微调步骤:
一、步骤概览
修改字典文件,添加新字符。
修改模型配置文件,使其读取新的字典。
忽略预训练模型的输出层参数(automatically 忽略 shape 不一致的 FC)。
重新使用你自己的数据进行训练 —— 完成微调。
跟踪 acc,调节学习率、batch size 等超参优化效果。
二、详细操作方式
修改字典文件
假设你的字典文件是 ppocr/utils/ppocr_keys_v1.txt,只需在末尾添加你需要的新字符,如:
我
新
字
注意:添加后要确保存储编码为 UTF-8,且 PaddleOCR 配置文件识别的是你修改的字典路径。
修改配置文件
以 PP-OCRv3 的识别配置为例,进入 configs/rec/PP-OCRv3/ch_PP-OCRv3_rec_distillation.yml,修改如下字段:
Global:
character_dict_path: ppocr/utils/ppocr_keys_v1.txt
确保字典路径正确指向你修改后的字典文件。
加载预训练模型时忽略输出层
由于你修改了字典,最后一层 FC 的维度将与预训练模型不符。此时在训练启动时 Paddle 会打印类似:
Error: Shape not match for param: head.fc.weight
不要担心,这表示最后一层不会加载,会在训练重新初始化,不影响网络主干的迁移学习。
继续训练(模型微调)
准备你的训练数据,并满足以下条件:
标签以纯文本形式存储,内容必须使用你更新后的字典中所包含的字符编码;
建议数据量为 >5000 张图像;
数据集配置见配置文件中 Train.dataset 与 Eval.dataset,对应字段:
Train:
dataset:
name: SimpleDataSet
data_dir: ./train_data/
label_file_list:
- ./train_data/train_list.txt
ratio_list: [1.0]
设置预训练模型路径
Global:
pretrained_model: ./path_to_pretrained_model/best_accuracy
调整学习率与 batch size
例如你使用单卡显卡,batch_size 为 128,建议:
Optimizer:
lr:
values : [0.0001, 0.00002]
若你使用有限显存,batch_size=64,可设置:
values: [5e-5, 1e-5]
三、注意事项
如果模型迭代初期 acc = 0 是正常的,输出层 FC 是空的,需要训练一段时间才能恢复准确率;
推荐在训练数据中加强包含新字符的样本,可以使用 TextRenderer 工具生成;
可加入通用识别场景数据混合训练,提升泛化能力,参照 ratio_list 配置方式。
四、结语
修改字典并微调模型本质上属于迁移学习的范畴,只需注意输出层结构变化,确保你自己的数据与字典一致即可。PaddleOCR 的设计充分支持你的修改需求。
如果你使用的是 PP-OCRv3 模型,建议从以下配置文件开始实验:
Text Recognition 配置: configs/rec/PP-OCRv3/ch_PP-OCRv3_rec_distillation.yml
预训练模型: ch_PP-OCRv3_rec_train/best_accuracy.pdparams
希望这些指导帮助你顺利完成模型微调!
Response generated by 🤖 feifei-bot | chatgpt-4o-latest
|
Beta Was this translation helpful? Give feedback.
-
正常训练就可以了是吧,不用管警告报错是吗
…---- 回复的原邮件 ----
| 发件人 | Wang ***@***.***> |
| 发送日期 | 2025年04月09日 23:03 |
| 收件人 | PaddlePaddle/PaddleOCR ***@***.***> |
| 抄送人 | 正函数 ***@***.***>,
Author ***@***.***> |
| 主题 | Re: [PaddlePaddle/PaddleOCR] 如何微调模型 (Discussion #14992) |
这是因为预训练的fc层shape和你的字典不一致,是正常的。上面的是机器人回复,只会回复一次。
—
Reply to this email directly, view it on GitHub, or unsubscribe.
You are receiving this because you authored the thread.Message ID: ***@***.***>
|
Beta Was this translation helpful? Give feedback.
Uh oh!
There was an error while loading. Please reload this page.
-
我现在是要在字典文件中增加一个字符,如何微调模型:
给了这样的逻辑流程
保留预训练模型其他层参数(网络主体结构)
修改字典和输出层结构
加载预训练模型时忽略输出层(报错提示维度不一致即可忽略)
用你自己的数据进行继续训练(通常称为迁移学习或微调)
我现在不清楚如何调整代码
Beta Was this translation helpful? Give feedback.
All reactions