Closed chenyixun1112 closed 2 years ago
在中文识别模型中,要识别的文字字典中不存在,我是不是在字典中添加对应的值再参与训练即可 答:是,但是不要官方的预训模型。因为shape不一样 如何提高一些生僻字、图片较模型的数据的准确率呢 答:增加样本量
在中文识别模型中,要识别的文字字典中不存在,我是不是在字典中添加对应的值再参与训练即可 答:是,但是不要官方的预训模型。因为shape不一样 如何提高一些生僻字、图片较模型的数据的准确率呢 答:增加样本量
不要官方的预训练模型指的是不使用预训练模型进行训练吗?
是,因为你增加了新字符,需要从新训练
在中文识别模型中,要识别的文字字典中不存在,我是不是在字典中添加对应的值再参与训练即可 答:是,但是不要官方的预训模型。因为shape不一样 如何提高一些生僻字、图片较模型的数据的准确率呢 答:增加样本量
不要官方的预训练模型指的是不使用预训练模型进行训练吗?
依然可以加载官方的预训练模型的,只不过是加载大部分网络参数,最后一个连接层不加载重新训练
在中文识别模型中,要识别的文字字典中不存在,我是不是在字典中添加对应的值再参与训练即可 答:是,但是不要官方的预训模型。因为shape不一样 如何提高一些生僻字、图片较模型的数据的准确率呢 答:增加样本量
不要官方的预训练模型指的是不使用预训练模型进行训练吗?
依然可以加载官方的预训练模型的,只不过是加载大部分网络参数,最后一个连接层不加载重新训练
这个正确,生僻字可以试一下带centerloss的ctc
在中文识别模型中,要识别的文字字典中不存在,我是不是在字典中添加对应的值再参与训练即可 答:是,但是不要官方的预训模型。因为shape不一样 如何提高一些生僻字、图片较模型的数据的准确率呢 答:增加样本量
不要官方的预训练模型指的是不使用预训练模型进行训练吗?
依然可以加载官方的预训练模型的,只不过是加载大部分网络参数,最后一个连接层不加载重新训练
这个正确,生僻字可以试一下带centerloss的ctc
以下步骤是否合理: 目标:21330字符 1.先训练Teacher模型(ch_PP-OCRv2_rec_enhanced_ctc_loss.yml) 2.再用Teacher为预训模型训练(ch_PP-OCRv2_rec_distillation.yml)
顺序反了,先训练ch_PP-OCRv2_rec_distillation.yml,这样你才能计算每个字符的中心center,才能使用center loss
顺序反了,先训练ch_PP-OCRv2_rec_distillation.yml,这样你才能计算每个字符的中心center,才能使用center loss
多谢
在中文识别模型中,要识别的文字字典中不存在,我是不是在字典中添加对应的值再参与训练即可 答:是,但是不要官方的预训模型。因为shape不一样 如何提高一些生僻字、图片较模型的数据的准确率呢 答:增加样本量
不要官方的预训练模型指的是不使用预训练模型进行训练吗?
依然可以加载官方的预训练模型的,只不过是加载大部分网络参数,最后一个连接层不加载重新训练
这个正确,生僻字可以试一下带centerloss的ctc
代码哪里重新修改最后一层呢
不需要修改,代码会自动处理的
训练ch_PP-OCRv2_rec_di
因为我想用预训练模型,代码也不用改吗
不需要,有两种方式加载预训练模型训练ch_PP-OCRv2_rec_distillation.yml
第一种是下载官方的预训练模型ch_PP-OCRv2_rec_train.tar解压,在ch_PP-OCRv2_rec_distillation.yml的pretrained_model参数指定路径即可,这种方式我没试过不知道能不能训练出来。
第二种是我目前使用的能够训练出来的方式,同样下载官方的预训练模型ch_PP-OCRv2_rec_train.tar解压,然后按照https://github.com/PaddlePaddle/PaddleOCR/blob/release/2.4/doc/doc_ch/knowledge_distillation.md 这种参考文件的2.1.5节从预训练模型中分别提取出student和teacher模型,然后在ch_PP-OCRv2_rec_distillation.yml的网络定义部分,在student和teacher的pretrained参数分别指定提取出来的student和teacher模型的路径即可。
以上两种方式都不需要更改代码,代码会自动加载网络结构一致的参数,不一样的地方会重新训练。
Since you haven\'t replied for more than 3 months, we have closed this issue/pr. If the problem is not solved or there is a follow-up one, please reopen it at any time and we will continue to follow up. It is recommended to pull and try the latest code first. 由于您超过三个月未回复,我们将关闭这个issue/pr。 若问题未解决或有后续问题,请随时重新打开(建议先拉取最新代码进行尝试),我们会继续跟进。
不需要,有两种方式加载预训练模型训练ch PP-ocr v2 rec _ distillation . yml
第一种是下载官方的预训练模型ch_PP-OCRv2_rectrain.tar解压,在ch PP-ocr v2 rec distillation . yml的预训练_模型参数指定路径即可,这种方式我没试过不知道能不能训练出来。
第二种是我目前使用的能够训练出来的方式,同样下载官方的预训练模型ch_PP-OCRv2_rectrain.tar解压,然后按照[https://github . com/paddle paddle/paddle ocr/blob/release/2.4/doc/doc ch/knowledge _ distillation . MD](https://github.com/PaddlePaddle/PaddleOCR/blob/release/2.4/doc/doc_ch/knowledge_distillation.md)这种参考文件的2.1.5节从预训练模型中分别提取出学生和教师模型,然后在ch PP-ocr v2 rec _ distillation . yml的网络定义部分,在学生和教师的预训练参数分别指定提取出来的学生和教师模型的路径即可。
以上两种方式都不需要更改代码,代码会自动加载网络结构一致的参数,不一样的地方会重新训练。
你好,我也是想新增生僻字训练识别模型,是按你第二种方法修改ch_PP-OCRv2_rec_distillation.yml进行训练,只需要把.pdparams文件提取出来吗,我分别提取了老师和学生模型的.pdparams文件,然后用下载的训练模型中相同的.pdopt和.states分别和老师和学生模型的.pdparams文件保存到一个目录,然后再修改配置文件的老师模型和学生pretrained为对应目录,其他没有修改,但是好像“最后一个连接层不加载重新训练”没有成功,到第6个epoch后loss和acc都变为nanxxx了。
部分显示如下
可以帮忙看看配置文件是不是还需要更改哪些呢,谢谢
Global:
debug: false
use_gpu: true
epoch_num: 800
log_smooth_window: 20
print_batch_step: 10
save_model_dir: /tmp/output/
save_epoch_step: 3
eval_batch_step: [0, 2000]
cal_metric_during_train: true
pretrained_model:
checkpoints:
save_inference_dir:
use_visualdl: false
infer_img: doc/imgs_words/ch/word_1.jpg
character_dict_path: ppocr/utils/ppocr_keys_v2.txt
max_text_length: 25
infer_mode: false
use_space_char: true
distributed: true
save_res_path: /tmp/output/predicts_pp-OCRv2_distillation.txt
Optimizer:
name: Adam
beta1: 0.9
beta2: 0.999
lr:
name: Piecewise
decay_epochs : [700, 800]
values : [0.001, 0.0001]
warmup_epoch: 5
regularizer:
name: L2
factor: 2.0e-05
Architecture:
model_type: &model_type "rec"
name: DistillationModel
algorithm: Distillation
Models:
Teacher:
pretrained: /tmp/dataset/model/model/teacher/best_accuracy
freeze_params: false
return_all_feats: true
model_type: *model_type
algorithm: CRNN
Transform:
Backbone:
name: MobileNetV1Enhance
scale: 0.5
Neck:
name: SequenceEncoder
encoder_type: rnn
hidden_size: 64
Head:
name: CTCHead
mid_channels: 96
fc_decay: 0.00002
Student:
pretrained: /tmp/dataset/model/model/student/best_accuracy
freeze_params: false
return_all_feats: true
model_type: *model_type
algorithm: CRNN
Transform:
Backbone:
name: MobileNetV1Enhance
scale: 0.5
Neck:
name: SequenceEncoder
encoder_type: rnn
hidden_size: 64
Head:
name: CTCHead
mid_channels: 96
fc_decay: 0.00002
Loss:
name: CombinedLoss
loss_config_list:
- DistillationCTCLoss:
weight: 1.0
model_name_list: ["Student", "Teacher"]
key: head_out
- DistillationDMLLoss:
weight: 1.0
act: "softmax"
use_log: true
model_name_pairs:
- ["Student", "Teacher"]
key: head_out
- DistillationDistanceLoss:
weight: 1.0
mode: "l2"
model_name_pairs:
- ["Student", "Teacher"]
key: backbone_out
PostProcess:
name: DistillationCTCLabelDecode
model_name: ["Student", "Teacher"]
key: head_out
Metric:
name: DistillationMetric
base_metric_name: RecMetric
main_indicator: acc
key: "Student"
Train:
dataset:
name: SimpleDataSet
data_dir: /tmp/dataset/rec_img/rec_img/train/data
label_file_list:
- /tmp/dataset/rec_img/rec_img/train/rec_gt_label.txt
transforms:
- DecodeImage:
img_mode: BGR
channel_first: false
- RecAug:
- CTCLabelEncode:
- RecResizeImg:
image_shape: [3, 32, 320]
- KeepKeys:
keep_keys:
- image
- label
- length
loader:
shuffle: true
batch_size_per_card: 128
drop_last: true
num_sections: 1
num_workers: 8
Eval:
dataset:
name: SimpleDataSet
data_dir: /tmp/dataset/rec_img/rec_img/eval/data
label_file_list:
- /tmp/dataset/rec_img/rec_img/eval/rec_gt_label.txt
transforms:
- DecodeImage:
img_mode: BGR
channel_first: false
- CTCLabelEncode:
- RecResizeImg:
image_shape: [3, 32, 320]
- KeepKeys:
keep_keys:
- image
- label
- length
loader:
shuffle: false
drop_last: false
batch_size_per_card: 128
num_workers: 8
请提供下述完整信息以便快速定位问题/Please provide the following information to quickly locate the problem