第一次写文章,主要是遇见的坑太多,怕以后记不住
配置:ubuntu18.0 cuda11.2 cudnn8.1 paddle2.2-gpu
下载官方paddle:https://www.paddlepaddle.org.cn/
然后下载OCR:https://github.com/PaddlePaddle/PaddleOCR
数据集制作参考:https://blog.csdn.net/Andrwin/article/details/120162193
【1】这里遇到了第一个bug,是读不出来汉字,原因是编码解码的问题
加一个编码格式就好了
with open("F:/10w/special.txt",encoding='utf-8-sig') as f:
【2】最后的部分为了导出成paddleocr的格式,需要做一些代码修改,不过都很简单,根据你生成的数量,调整一下zfill补0的值就好了
word,fontPath,save_dir,words_lenth,img_count = config()
line_words_list = generate_words(word,img_count,words_lenth)
filename='word_'
t=1
for line in line_words_list:
length = len(line)
font_size = 33 if np.random.randint(0,2)==0 else 20
file_name = filename+str(t).zfill(6)+".jpg"
t+=1
if(font_size==33):
size = (42,math.ceil(length*34.4))
draw_to_image(size,fontPath,font_size,line,save_dir,file_name)
else:
size = (29,math.ceil(length*20.8))
draw_to_image(size,fontPath,font_size,line,save_dir,file_name)
with open("d:/label.txt","a",encoding='utf-8') as f:
f.write("train_data/rec/train/"+file_name+"\t"+line+"\n")
【3】这里首先遇见的bug就是,原代码里生成的数据集TXT编码,并不是UTF-8,所以解码出错,上面已经进行了修改。
【4】之后是cuda和cudnn的问题,因为最开始用了cpu,后来想用GPU训练的时候,发现各种问题,又更改cuda的链接和cudnn的库之类的,然后又和GCC版本不兼容啊,驱动不兼容啊之类的问题,不过如果一开始就安装好版本,应该就没这么多事了
【5】搞定环境之后,根据自己的GPU降低了batch_size的大小,最后又出现out_memory这一类的bug,上网找了好多,都说是batch_size太大,或者是cuda啊cudnn版本不对啊之类的,最后发现都不是,无奈的又再次看了一下最开始就查看过的显存,nvidia-smi查看发现,确实没有进程占用GPU,但是神奇的是显存就是6500/7973这样,所以就关机重启了,再查看,果然就175/7973,然后就完美运行了。
【6】训练过程中一直出现找不到train和text里的word_000001.jpg的图片,相对路径和绝对路径都试过了,完全没用,就只好听之任之了,好在loss和acc都是在变化的。
【7】我的训练集是2w张,设置是32的batch_size,预先设置是500epoch,不过在14轮就已经loss到峰值了,再之后就又回升了
停止训练之后,预测图片,发现自己的model并不存在,原来少了一步转换,官方文档里有写:
-c 后面设置训练算法的yml配置文件
-o 配置可选参数
Global.pretrained_model 参数设置待转换的训练模型地址,不用添加文件后缀 .pdmodel,.pdopt或.pdparams。
Global.save_inference_dir参数设置转换的模型将保存的地址。
python3 tools/export_model.py -c configs/rec/ch_ppocr_v2.0/rec_chinese_lite_train_v2.0.yml -o Global.pretrained_model=./ch_lite/ch_ppocr_mobile_v2.0_rec_train/best_accuracy Global.save_inference_dir=./inference/rec_crnn/
【8】再次测试,依旧读不出东西,官方文档里有写:如果训练时修改了文本的字典,在使用inference模型预测时,需要通过–rec_char_dict_path指定使用的字典路径,并且设置 rec_char_type=ch
然而设置指明了文档以后,仍然不好用,现在怀疑是不是字典除了问题,因为最开始没发现是显存问题的时候,第一个warn就是model【5283】not match 【6623】这种,发现应该是预训练的模型是中文字典,现在是指向了自己的字典,字数不同不匹配,于是我就加了一些常用字进去,凑够了字数,现在在想是不是这一步出现了问题,但是常用字测不出来正常,但总不至于自己数据集的图片都识别不出来啊,所以下一步准备更换字典,或者重新训练,看看not match会不会影响训练,亦或者是终止
Original: https://blog.csdn.net/qq_37589363/article/details/121537252
Author: 白禹赫
Title: PaddleOCR在ubuntu18.0上finetune中文模型遇到的各种坑
原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/531516/
转载文章受原作者版权保护。转载请注明原作者出处!