[PaddlePaddle/PaddleOCR]识别模型微调训练,数据集组成应该是什么样的?

2024-05-13 97 views
7

请提供下述完整信息以便快速定位问题/Please provide the following information to quickly locate the problem

  • 系统环境/System Environment:Docker desktop,镜像是registry.baidubce.com/paddlepaddle/paddle:2.6.0-gpu-cuda11.7-cudnn8.4-trt8.4
  • 版本号/Version:Paddle:v2.12
  • PaddleOCR: v2.7

-使用模型为:ch_ppocr_mobile_v2.0_rec中的预训练模型 -修改配置文件中的batch_size,改为16 -修改字典,在原有的ppocr_keys_v1.txt基础上,新增几个生僻字 -数据集是用textRender合成的图片,用了12中背景,6种字体,18句包含新增生僻字的文本,合成了1000张图片用于训练,500张图片用于验证 -opt工具是PaddleLite-v2.12编译出来的

过程:使用修改后的配置文件以及合成的数据集,调用 python3 tools/train.py -c configsChange/rec/rec_chinese_lite_train_v2.0.yml -o Global.pretrained_model=./pretrain_models/ch_ppocr_mobile_v2.0_rec_pre/best_accuracy 开始训练,大约在150轮次左右acc达到0.9999,我就中断了训练,用输出的best_accuracy转推理转nb后,更换到androidDemo中,识别效果很差,基本都是错的

问题: 1.使用预训练模型进行微调,要求字典要新增字符,上面的数据集是否不够?不够的话多少比较合适? 2.数据集的内容是否只要带有新增字符的图片就可以了?其他常规字符是否也要有相应的图片? 3.训练acc基本保持在0.999时,我中断训练,使用best_accuracy的操作是允许的吗? 4.另外反馈一个问题,使用v3的训练模型,比如ch_PP-OCRv3_rec,不修改配置文件转成推理模型,然后用PaddleLite-v2.12编译出来的opt工具转成nb模型,会报错 Check failed: it != attrs().end(): No attributes called beta found for swish 即使是pip install paddlelite 安装v2.13rc0也有这个报错,这是为什么?

回答

2

分析了下日志,评估准确率0 重新用textRender合成了1w训练+500验证,还是出现训练准确率90%+,评估只有7%,这两种都是过拟合吧? 那么需要修改字典新增字符的情况,在微调时数据集组成应该是要怎么样的?是所有图片都要出现新增字符吗?

7

修改了下数据集组成,1w训练集改成了5k合成图+5k“中文文档文字识别”里面前5k张图,训练准确率96%+,评估准确率到了40%+,比之前好不少。 那使用预训练模型的情况下进行微调,数据集是要包括字典中所有字符,每个字大概要出现在200+张图里面,是这样吗? 新增字符,修改字典的情况下,也是要满足字典字符出现在至少200张图这个要求吗?如果是,那是不是微调都是要在原有数据集上面进行修改才行?

7

还有个问题,在rec_chinese_lite_train_v2.0.yml文件中,我在dataset这里改了下标签文件

label_file_list: ["./train_data/new/tr_train.txt","./train_data/new/chinese_dataset.txt","./train_data/new/synthetic_chinese_string_dataset.txt"]
    ratio_list: [0.1,0.004,0.2]

按照文档说明,应该是会在这三个标签里面分别抽10%,4%,20%作为训练集。训练也成功跑起来了,但是中间输出log

ppocr INFO: epoch: [24/500], global_step: 14630, lr: 0.000996, acc: 0.562500, norm_edit_dis: 0.920164, loss: 3.474703, avg_reader_cost: 0.00025 s, avg_batch_cost: 0.12605 s, avg_samples: 16.0, ips: 126.92882 samples/s, eta: 11:22:31
[2024/03/07 07:54:02] ppocr INFO: epoch: [24/500], global_step: 14640, lr: 0.000996, acc: 0.562500, norm_edit_dis: 0.933726, loss: 3.482277, avg_reader_cost: 0.00017 s, avg_batch_cost: 0.12425 s, avg_samples: 16.0, ips: 128.77554 samples/s, eta: 11:22:26
[2024/03/07 07:54:03] ppocr INFO: save model in ./output/rec_chinese_lite_v2.0-8/latest
[2024/03/07 07:54:04] ppocr INFO: save model in ./output/rec_chinese_lite_v2.0-8/iter_epoch_24
[2024/03/07 07:54:04] ppocr INFO: Initialize indexs of datasets:['./train_data/new/tr_train.txt', './train_data/new/chinese_dataset.txt', './train_data/new/synthetic_chinese_string_dataset.txt']
list index out of range
[2024/03/07 07:54:07] ppocr INFO: epoch: [25/500], global_step: 14650, lr: 0.000996, acc: 0.531250, norm_edit_dis: 0.908424, loss: 4.393853, avg_reader_cost: 0.33753 s, avg_batch_cost: 0.48895 s, avg_samples: 16.0, ips: 32.72330 samples/s, eta: 11:23:34
[2024/03/07 07:54:09] ppocr INFO: epoch: [25/500], global_step: 14660, lr: 0.000996, acc: 0.562500, norm_edit_dis: 0.901296, loss: 5.419887, avg_reader_cost: 0.00026 s, avg_batch_cost: 0.13084 s, avg_samples: 16.0, ips: 122.28414 samples/s, eta: 11:23:30

这个list index out of range是报错来的吗?

3

还有个问题,在rec_chinese_lite_train_v2.0.yml文件中,我在dataset这里改了下标签文件

label_file_list: ["./train_data/new/tr_train.txt","./train_data/new/chinese_dataset.txt","./train_data/new/synthetic_chinese_string_dataset.txt"]
    ratio_list: [0.1,0.004,0.2]

按照文档说明,应该是会在这三个标签里面分别抽10%,4%,20%作为训练集。训练也成功跑起来了,但是中间输出log

ppocr INFO: epoch: [24/500], global_step: 14630, lr: 0.000996, acc: 0.562500, norm_edit_dis: 0.920164, loss: 3.474703, avg_reader_cost: 0.00025 s, avg_batch_cost: 0.12605 s, avg_samples: 16.0, ips: 126.92882 samples/s, eta: 11:22:31
[2024/03/07 07:54:02] ppocr INFO: epoch: [24/500], global_step: 14640, lr: 0.000996, acc: 0.562500, norm_edit_dis: 0.933726, loss: 3.482277, avg_reader_cost: 0.00017 s, avg_batch_cost: 0.12425 s, avg_samples: 16.0, ips: 128.77554 samples/s, eta: 11:22:26
[2024/03/07 07:54:03] ppocr INFO: save model in ./output/rec_chinese_lite_v2.0-8/latest
[2024/03/07 07:54:04] ppocr INFO: save model in ./output/rec_chinese_lite_v2.0-8/iter_epoch_24
[2024/03/07 07:54:04] ppocr INFO: Initialize indexs of datasets:['./train_data/new/tr_train.txt', './train_data/new/chinese_dataset.txt', './train_data/new/synthetic_chinese_string_dataset.txt']
list index out of range
[2024/03/07 07:54:07] ppocr INFO: epoch: [25/500], global_step: 14650, lr: 0.000996, acc: 0.531250, norm_edit_dis: 0.908424, loss: 4.393853, avg_reader_cost: 0.33753 s, avg_batch_cost: 0.48895 s, avg_samples: 16.0, ips: 32.72330 samples/s, eta: 11:23:34
[2024/03/07 07:54:09] ppocr INFO: epoch: [25/500], global_step: 14660, lr: 0.000996, acc: 0.562500, norm_edit_dis: 0.901296, loss: 5.419887, avg_reader_cost: 0.00026 s, avg_batch_cost: 0.13084 s, avg_samples: 16.0, ips: 122.28414 samples/s, eta: 11:23:30

这个list index out of range是报错来的吗?

500轮次训练完后,训练集准确率85%,验证集94%,这个是正常范围吗?(验证集和训练集一样设置从三个文件夹里面抽样,总共抽1000个,训练集是1w个)

6

还有个问题,在rec_chinese_lite_train_v2.0.yml文件中,我在dataset这里改了下标签文件

label_file_list: ["./train_data/new/tr_train.txt","./train_data/new/chinese_dataset.txt","./train_data/new/synthetic_chinese_string_dataset.txt"]
    ratio_list: [0.1,0.004,0.2]

按照文档说明,应该是会在这三个标签里面分别抽10%,4%,20%作为训练集。训练也成功跑起来了,但是中间输出log

ppocr INFO: epoch: [24/500], global_step: 14630, lr: 0.000996, acc: 0.562500, norm_edit_dis: 0.920164, loss: 3.474703, avg_reader_cost: 0.00025 s, avg_batch_cost: 0.12605 s, avg_samples: 16.0, ips: 126.92882 samples/s, eta: 11:22:31
[2024/03/07 07:54:02] ppocr INFO: epoch: [24/500], global_step: 14640, lr: 0.000996, acc: 0.562500, norm_edit_dis: 0.933726, loss: 3.482277, avg_reader_cost: 0.00017 s, avg_batch_cost: 0.12425 s, avg_samples: 16.0, ips: 128.77554 samples/s, eta: 11:22:26
[2024/03/07 07:54:03] ppocr INFO: save model in ./output/rec_chinese_lite_v2.0-8/latest
[2024/03/07 07:54:04] ppocr INFO: save model in ./output/rec_chinese_lite_v2.0-8/iter_epoch_24
[2024/03/07 07:54:04] ppocr INFO: Initialize indexs of datasets:['./train_data/new/tr_train.txt', './train_data/new/chinese_dataset.txt', './train_data/new/synthetic_chinese_string_dataset.txt']
list index out of range
[2024/03/07 07:54:07] ppocr INFO: epoch: [25/500], global_step: 14650, lr: 0.000996, acc: 0.531250, norm_edit_dis: 0.908424, loss: 4.393853, avg_reader_cost: 0.33753 s, avg_batch_cost: 0.48895 s, avg_samples: 16.0, ips: 32.72330 samples/s, eta: 11:23:34
[2024/03/07 07:54:09] ppocr INFO: epoch: [25/500], global_step: 14660, lr: 0.000996, acc: 0.562500, norm_edit_dis: 0.901296, loss: 5.419887, avg_reader_cost: 0.00026 s, avg_batch_cost: 0.13084 s, avg_samples: 16.0, ips: 122.28414 samples/s, eta: 11:23:30

这个list index out of range是报错来的吗?

这个是正常的哈,可以忽略

6

修改了下数据集组成,1w训练集改成了5k合成图+5k“中文文档文字识别”里面前5k张图,训练准确率96%+,评估准确率到了40%+,比之前好不少。 那使用预训练模型的情况下进行微调,数据集是要包括字典中所有字符,每个字大概要出现在200+张图里面,是这样吗? 新增字符,修改字典的情况下,也是要满足字典字符出现在至少200张图这个要求吗?如果是,那是不是微调都是要在原有数据集上面进行修改才行? 对于新增字符,最好是在原始数据集上修改哈,且对新增字符的样本数量也要足够多才行

1

修改了下数据集组成,1w训练集改成了5k合成图+5k“中文文档文字识别”里面前5k张图,训练准确率96%+,评估准确率到了40%+,比之前好不少。 那使用预训练模型的情况下进行微调,数据集是要包括字典中所有字符,每个字大概要出现在200+张图里面,是这样吗? 新增字符,修改字典的情况下,也是要满足字典字符出现在至少200张图这个要求吗?如果是,那是不是微调都是要在原有数据集上面进行修改才行? 对于新增字符,最好是在原始数据集上修改哈,且对新增字符的样本数量也要足够多才行

谢谢大佬,我还想请教一下 Snipaste_2024-03-08_11-12-30 中文文档文字识别这个数据集中有彩色图字符长度不定和固定10字符的灰度图 图中test-train-1的训练集是“5k新增字符合成图+5k彩色图”,训练准确率96%+,验证准确率只有40%+ test-train-2的训练集是“1k新增字符合成图+5k彩色图+4k灰度图”,训练准确率85%+,验证准确率有94%+ 这两个都是从预训练模型开始训练的。 然后test-train-3是从test-train-2训练完的最佳模型的基础上,用同样的配置文件再次训练。

问题: 1.数据集是否要再扩大一些? 2.因为是从三个路径抽样训练,所以我想着用test-train-2的最佳模型,再跑一遍可能会有所提升,这是否是对的? 3.我现在是不是可以开始针对实际场景增加对应的数据集开始训练了?(因为验证准确率一直不太对,所以数据集主要是用通用中英文OCR数据集中的内容)

8
  1. 数据集可以根据需求再适当扩大
  2. 再跑一遍未必会提升,看test-train-3的训练曲线已经几乎不涨了,要防止过拟合
  3. 我觉得是可以的
0

python3 tools/export_model.py -c configs/rec/PP-OCRv3/ch_PP-OCRv3_rec_distillation.yml -o Global.pretrained_model="./pretrain_models/ch_PP-OCRv3_rec_train/best_accuracy" Global.save_inference_dir="./pretrain_models/ch_PP-OCRv3_rec_train/inference" ./opt --model_file=./rec/rec_v3/Student/inference.pdmodel --param_file=./rec/rec_v3/Student/inference.pdiparams --optimize_out=./rec/rec_v3/Student/ch_ppocr_v3.0_rec_opt --valid_targets=arm --optimize_out_type=naive_buffer 使用v3的识别训练模型,ch_PP-OCRv3_rec,不修改配置文件转成推理模型,然后用PaddleLite-v2.12编译出来的opt工具转成nb模型,会报错 Check failed: it != attrs().end(): No attributes called beta found for swish 即使是pip install paddlelite 安装v2.13rc0来转nb模型也有这个报错,这是为什么? 实际场景要用在android设备中,要转为nb模型,因为这个报错所以我目前是用V2模型。

4

python3 tools/export_model.py -c configs/rec/PP-OCRv3/ch_PP-OCRv3_rec_distillation.yml -o Global.pretrained_model="./pretrain_models/ch_PP-OCRv3_rec_train/best_accuracy" Global.save_inference_dir="./pretrain_models/ch_PP-OCRv3_rec_train/inference" ./opt --model_file=./rec/rec_v3/Student/inference.pdmodel --param_file=./rec/rec_v3/Student/inference.pdiparams --optimize_out=./rec/rec_v3/Student/ch_ppocr_v3.0_rec_opt --valid_targets=arm --optimize_out_type=naive_buffer 使用v3的识别训练模型,ch_PP-OCRv3_rec,不修改配置文件转成推理模型,然后用PaddleLite-v2.12编译出来的opt工具转成nb模型,会报错 Check failed: it != attrs().end(): No attributes called beta found for swish 即使是pip install paddlelite 安装v2.13rc0来转nb模型也有这个报错,这是为什么? 实际场景要用在android设备中,要转为nb模型,因为这个报错所以我目前是用V2模型。

请问这个问题你解决了吗?我遇到了同样的问题,我看有人说降级paddlepaddle-gpu到2.5.2就可以,但我这里试了没成功

4

python3 tools/export_model.py -c configs/rec/PP-OCRv3/ch_PP-OCRv3_rec_distillation.yml -o Global.pretrained_model="./pretrain_models/ch_PP-OCRv3_rec_train/best_accuracy" Global.save_inference_dir="./pretrain_models/ch_PP-OCRv3_rec_train/inference" ./opt --model_file=./rec/rec_v3/Student/inference.pdmodel --param_file=./rec/rec_v3/Student/inference.pdiparams --optimize_out=./rec/rec_v3/Student/ch_ppocr_v3.0_rec_opt --valid_targets=arm --optimize_out_type=naive_buffer 使用v3的识别训练模型,ch_PP-OCRv3_rec,不修改配置文件转成推理模型,然后用PaddleLite-v2.12编译出来的opt工具转成nb模型,会报错 Check failed: it != attrs().end(): No attributes called beta found for swish 即使是pip install paddlelite 安装v2.13rc0来转nb模型也有这个报错,这是为什么? 实际场景要用在android设备中,要转为nb模型,因为这个报错所以我目前是用V2模型。

请问这个问题你解决了吗?我遇到了同样的问题,我看有人说降级paddlepaddle-gpu到2.5.2就可以,但我这里试了没成功

没有解决。我目前用的paddlepaddle-gpu是2.6.0,还没试过降版本。 我有一次忘记改配置文件,用了V2的配置文件来将V3的训练模型转为推理模型,然后再去转nb模型是成功的,不过这个模型我没去验证识别效果。 所以我有个想法是,会不会官方给的V3训练模型使用的配置文件,和configs/rec/PP-OCRv3/ch_PP-OCRv3_rec_distillation.yml是有差别的?官方训练的时候用了一些还没发布的东西?那如果用这个训练模型,用ch_PP-OCRv3_rec_distillation.yml简单训练一下,拿训练出的模型去转会不会就可以了? 我目前用的电脑配置一般,训练比较耗时,加上Android的Demo用的是v2,v2模型能正常转nb,所以我暂时没有按这个想法继续走,而是先用着v2模型来摸索训练相关的东西,就还没验证这个想法。

6

python3 tools/export_model.py -c configs/rec/PP-OCRv3/ch_PP-OCRv3_rec_distillation.yml -o Global.pretrained_model="./pretrain_models/ch_PP-OCRv3_rec_train/best_accuracy" Global.save_inference_dir="./pretrain_models/ch_PP-OCRv3_rec_train/inference" ./opt --model_file=./rec/rec_v3/Student/inference.pdmodel --param_file=./rec/rec_v3/Student/inference.pdiparams --optimize_out=./rec/rec_v3/Student/ch_ppocr_v3.0_rec_opt --valid_targets=arm --optimize_out_type=naive_buffer 使用v3的识别训练模型,ch_PP-OCRv3_rec,不修改配置文件转成推理模型,然后用PaddleLite-v2.12编译出来的opt工具转成nb模型,会报错 Check failed: it != attrs().end(): No attributes called beta found for swish 即使是pip install paddlelite 安装v2.13rc0来转nb模型也有这个报错,这是为什么? 实际场景要用在android设备中,要转为nb模型,因为这个报错所以我目前是用V2模型。

请问这个问题你解决了吗?我遇到了同样的问题,我看有人说降级paddlepaddle-gpu到2.5.2就可以,但我这里试了没成功

还有个现象是,下载推理模型,然后转为nb模型是成功的。所以我推测是训练模型转推理模型这一步出了问题,最大可能就是配置文件不同导致的

8

python3 tools/export_model.py -c configs/rec/PP-OCRv3/ch_PP-OCRv3_rec_distillation.yml -o Global.pretrained_model="./pretrain_models/ch_PP-OCRv3_rec_train/best_accuracy" Global.save_inference_dir="./pretrain_models/ch_PP-OCRv3_rec_train/inference" ./opt --model_file=./rec/rec_v3/Student/inference.pdmodel --param_file=./rec/rec_v3/Student/inference.pdiparams --optimize_out=./rec/rec_v3/Student/ch_ppocr_v3.0_rec_opt --valid_targets=arm --optimize_out_type=naive_buffer 使用v3的识别训练模型,ch_PP-OCRv3_rec,不修改配置文件转成推理模型,然后用PaddleLite-v2.12编译出来的opt工具转成nb模型,会报错 Check failed: it != attrs().end(): No attributes called beta found for swish 即使是pip install paddlelite 安装v2.13rc0来转nb模型也有这个报错,这是为什么? 实际场景要用在android设备中,要转为nb模型,因为这个报错所以我目前是用V2模型。

请问这个问题你解决了吗?我遇到了同样的问题,我看有人说降级paddlepaddle-gpu到2.5.2就可以,但我这里试了没成功

尝试了下训练两轮,用latest的模型去转换,还是不行,同样的报错

7

python3 tools/export_model.py -c configs/rec/PP-OCRv3/ch_PP-OCRv3_rec_distillation.yml -o Global.pretrained_model="./pretrain_models/ch_PP-OCRv3_rec_train/best_accuracy" Global.save_inference_dir="./pretrain_models/ch_PP-OCRv3_rec_train/inference" ./opt --model_file=./rec/rec_v3/Student/inference.pdmodel --param_file=./rec/rec_v3/Student/inference.pdiparams --optimize_out=./rec/rec_v3/Student/ch_ppocr_v3.0_rec_opt --valid_targets=arm --optimize_out_type=naive_buffer 使用v3的识别训练模型,ch_PP-OCRv3_rec,不修改配置文件转成推理模型,然后用PaddleLite-v2.12编译出来的opt工具转成nb模型,会报错 Check failed: it != attrs().end(): No attributes called beta found for swish 即使是pip install paddlelite 安装v2.13rc0来转nb模型也有这个报错,这是为什么? 实际场景要用在android设备中,要转为nb模型,因为这个报错所以我目前是用V2模型。

请问这个问题你解决了吗?我遇到了同样的问题,我看有人说降级paddlepaddle-gpu到2.5.2就可以,但我这里试了没成功

还有个现象是,下载推理模型,然后转为nb模型是成功的。所以我推测是训练模型转推理模型这一步出了问题,最大可能就是配置文件不同导致的

我也是使用预训练的不行,但是直接下载inference模型转nb可以成功,我打算对比官方Ai-Studio的环境和训练配置试试,之前用ai-studio里面简单操作后发现v3、v4的model都是能转成功的

2

目前paddlelite对ppocrv4的兼容较差,我们在评估这一需求。

6

python3 tools/export_model.py -c configs/rec/PP-OCRv3/ch_PP-OCRv3_rec_distillation.yml -o Global.pretrained_model="./pretrain_models/ch_PP-OCRv3_rec_train/best_accuracy" Global.save_inference_dir="./pretrain_models/ch_PP-OCRv3_rec_train/inference" ./opt --model_file=./rec/rec_v3/Student/inference.pdmodel --param_file=./rec/rec_v3/Student/inference.pdiparams --optimize_out=./rec/rec_v3/Student/ch_ppocr_v3.0_rec_opt --valid_targets=arm --optimize_out_type=naive_buffer 使用v3的识别训练模型,ch_PP-OCRv3_rec,不修改配置文件转成推理模型,然后用PaddleLite-v2.12编译出来的opt工具转成nb模型,会报错 Check failed: it != attrs().end(): No attributes called beta found for swish 即使是pip install paddlelite 安装v2.13rc0来转nb模型也有这个报错,这是为什么? 实际场景要用在android设备中,要转为nb模型,因为这个报错所以我目前是用V2模型。

请问这个问题你解决了吗?我遇到了同样的问题,我看有人说降级paddlepaddle-gpu到2.5.2就可以,但我这里试了没成功

有个不知道算不算好消息的消息。我之前的paddlepaddle-gpu是2.6.0,然后试了2.5.0,2.5.2,2.6.1都不行,会2.5.0,2.5.2报了其他错误,2.6.1则是相同报错。 然后我看着其他issue里面的回答,都是写的paddlepaddle,就尝试了把paddlepaddle-gpu卸了,改成paddlepaddle,版本2.5.0,然后就能转nb模型了……

paddlepaddle用2.6.1又会报No attributes called beta found for swish这个错误

0

python3 tools/export_model.py -c configs/rec/PP-OCRv3/ch_PP-OCRv3_rec_distillation.yml -o Global.pretrained_model="./pretrain_models/ch_PP-OCRv3_rec_train/best_accuracy" Global.save_inference_dir="./pretrain_models/ch_PP-OCRv3_rec_train/inference" ./opt --model_file=./rec/rec_v3/Student/inference.pdmodel --param_file=./rec/rec_v3/Student/inference.pdiparams --optimize_out=./rec/rec_v3/Student/ch_ppocr_v3.0_rec_opt --valid_targets=arm --optimize_out_type=naive_buffer 使用v3的识别训练模型,ch_PP-OCRv3_rec,不修改配置文件转成推理模型,然后用PaddleLite-v2.12编译出来的opt工具转成nb模型,会报错 Check failed: it != attrs().end(): No attributes called beta found for swish 即使是pip install paddlelite 安装v2.13rc0来转nb模型也有这个报错,这是为什么? 实际场景要用在android设备中,要转为nb模型,因为这个报错所以我目前是用V2模型。

请问这个问题你解决了吗?我遇到了同样的问题,我看有人说降级paddlepaddle-gpu到2.5.2就可以,但我这里试了没成功

有个不知道算不算好消息的消息。我之前的paddlepaddle-gpu是2.6.0,然后试了2.5.0,2.5.2,2.6.1都不行,会2.5.0,2.5.2报了其他错误,2.6.1则是相同报错。 然后我看着其他issue里面的回答,都是写的paddlepaddle,就尝试了把paddlepaddle-gpu卸了,改成paddlepaddle,版本2.5.0,然后就能转nb模型了……

paddlepaddle用2.6.1又会报No attributes called beta found for swish这个错误

也就是2.5.0的CPU版本没错?😂那真的很尴尬了,不过能否按如下工作流做:用paddlepaddle-gpu2.5.0训练,用paddlepaddle2.5.0转模型,这样合理不

3

python3 tools/export_model.py -c configs/rec/PP-OCRv3/ch_PP-OCRv3_rec_distillation.yml -o Global.pretrained_model="./pretrain_models/ch_PP-OCRv3_rec_train/best_accuracy" Global.save_inference_dir="./pretrain_models/ch_PP-OCRv3_rec_train/inference" ./opt --model_file=./rec/rec_v3/Student/inference.pdmodel --param_file=./rec/rec_v3/Student/inference.pdiparams --optimize_out=./rec/rec_v3/Student/ch_ppocr_v3.0_rec_opt --valid_targets=arm --optimize_out_type=naive_buffer 使用v3的识别训练模型,ch_PP-OCRv3_rec,不修改配置文件转成推理模型,然后用PaddleLite-v2.12编译出来的opt工具转成nb模型,会报错 Check failed: it != attrs().end(): No attributes called beta found for swish 即使是pip install paddlelite 安装v2.13rc0来转nb模型也有这个报错,这是为什么? 实际场景要用在android设备中,要转为nb模型,因为这个报错所以我目前是用V2模型。

请问这个问题你解决了吗?我遇到了同样的问题,我看有人说降级paddlepaddle-gpu到2.5.2就可以,但我这里试了没成功

有个不知道算不算好消息的消息。我之前的paddlepaddle-gpu是2.6.0,然后试了2.5.0,2.5.2,2.6.1都不行,会2.5.0,2.5.2报了其他错误,2.6.1则是相同报错。 然后我看着其他issue里面的回答,都是写的paddlepaddle,就尝试了把paddlepaddle-gpu卸了,改成paddlepaddle,版本2.5.0,然后就能转nb模型了…… paddlepaddle用2.6.1又会报No attributes called beta found for swish这个错误

也就是2.5.0的CPU版本没错?😂那真的很尴尬了,不过能否按如下工作流做:用paddlepaddle-gpu2.5.0训练,用paddlepaddle2.5.0转模型,这样合理不

这个操作我就不清楚了,如果转出来的nb识别率是正常的话,那应该是可以的吧。我把这个情况提了个issue,看看大佬回复吧。

1

这个操作是可以的哈,后续可以验证一下模型精度