模型微调 #15001
Unanswered
daijun-hub
asked this question in
Q&A
模型微调
#15001
Replies: 1 comment
-
针对您提出的「能否冻结原预训练模型一些参数,只训练橖字,请给出完整的配置文件」,确实可以通过“冻结模型参数”的方式,仅微调特定层(如最后的分类层)以适配新增的「橖」字,从而避免整个网络因类别极端不均衡而过拟合。这是一种常用的迁移学习策略,即“冻结 backbone,只训练头(head)”。 以下是实现该策略所需的完整配置文件修改方案(以PP-OCRv3 识别模型为例): 一、冻结预训练模型的骨干网络参数 在配置文件中添加如下字段,设置哪些部分需冻结(以SVTR模型结构为例): 在Global字段下新增: Global:
...
freeze_params: ["Backbone", "Neck"] # 冻结Backbone和Neck,只更新Head层参数 或在主结构定义下细粒度冻结特定组件: Train:
...
freeze_params:
- name: Backbone
- name: Neck 二、使用自定义字典包含橖字 确保config中设置了自定义字典路径,包含橖字: Global:
character_dict_path: ./ppocr/utils/your_custom_dict.txt
use_space_char: False # 覆盖使用空格字符视具体字典情况而定 三、完整配置例子(参考PP-OCRv3文本识别模型,自定义修改) Global:
use_gpu: true
epoch_num: 100
log_smooth_window: 20
print_batch_step: 10
save_model_dir: ./output/rec_fix_backbone
save_epoch_step: 5
eval_batch_step: [0,200]
cal_metric_during_train: True
pretrained_model: ./pretrain_models/PP-OCRv3/best_accuracy # 指定预训练模型路径
checkpoints:
save_inference_dir:
use_visualdl: False
infer_img:
character_dict_path: ./ppocr/utils/your_custom_dict.txt # 包含橖字
use_space_char: False
save_res_path: ./output/rec_fix_backbone/predicts.txt
freeze_params: ["Backbone", "Neck"]
Optimizer:
lr:
name: Piecewise
decay_epochs : [50, 80]
values : [0.0001, 0.00005]
warmup_epoch: 5
regularizer:
name: 'L2'
factor: 0
Architecture:
model_type: rec
algorithm: SVTR
Transform:
Backbone:
name: MobileNetV1Enhance
scale: 0.5
last_conv_stride: [1, 2]
last_pool_type: avg
Neck:
name: SequenceEncoder
encoder_type: svtr
dims: 64
depth: 2
hidden_dims: 120
use_guide: False
Head:
name: CTCHead
fc_decay: 0.0
Loss:
name: CTCLoss
PostProcess:
name: CTCLabelDecode
Metric:
name: RecMetric
main_indicator: acc
Train:
dataset:
name: SimpleDataSet
data_dir: ./train_data/
label_file_list:
- ./train_data/train_with_orange.txt
ratio_list: [1.0]
transforms:
- RecAug:
- CTCLabelEncode:
- KeepKeys:
keep_keys: [image, label, length]
loader:
shuffle: True
drop_last: False
batch_size_per_card: 64
num_workers: 8
Eval:
dataset:
name: SimpleDataSet
data_dir: ./val_data/
label_file_list:
- ./val_data/val.txt
transforms:
- CTCLabelEncode:
- KeepKeys:
keep_keys: [image, label, length]
loader:
shuffle: False
drop_last: False
batch_size_per_card: 64
num_workers: 4 四、其他建议与注意事项:
如你基于PP-OCRv4,请按上述方式配置并参考PP-OCRv4对应结构进一步微调配置路径。是否使用distillation结构也需酌情调整。 如果你有具体模型路径、设备等信息,也可进一步优化配置。 Response generated by 🤖 feifei-bot | chatgpt-4o-latest |
Beta Was this translation helpful? Give feedback.
0 replies
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
-
我在训练PP-OCRv4模型时,我在字典文件里增加了一个橖字,准备了带橖字的图片1000张左右,主要就是橖字,用了PP-OCRv4的预训练模型,训练出的模型在识别其他文字时,都识别成了橖字.我该如何调整我的训练配置文件
根据你描述的问题,训练数据主要集中在新增的「橖」字,导致模型在识别其他文本时也倾向输出「橖」,这属于训练数据中类别分布严重不平衡导致的过拟合现象。为了解决该问题,建议你在PP-OCRv4识别模型微调时:
除了「橖」字图像,还需要混入原始通用识别数据,按比例混合训练;
设置合理的学习率与batch size;
并适当减少「橖」字样本在整个训练集中的占比(推荐比例 1:5 ~ 1:10);
同时停止使用可能造成过拟合的GTC策略。
能否冻结原预训练模型一些参数,只训练橖字,请给出完整的配置文件
Beta Was this translation helpful? Give feedback.
All reactions