ocr调参数trick

 

https://zhuanlan.zhihu.com/p/256458915

  1. P100, 5M图片,crnn识别一个epoch训练时间15h,第一次best_model出现在6epoch,第二次14epoch。batch_size=128, 占显存6g多。
  2. SynText文本生成器。
  3. seq2seq,两层bi-LSTM就够了,hidden_size:256或者512, backbone:resnet18足够。
  4. 图像增强用 imgaug。
  5. ctc与Atten的效果对比:众说纷纭,都可以试试,百度说ctc比Atten好,尤其中文。据说Adam与Atten最好不要同时用。
  6. resume与finetune模型要控制好。
  7. 可以在最开始将图片resize到h:32, w:256,其中汉字认为是正方形,所以n=w/h等于字数,一般是8个,长一点10个,至少满足80%样本。先固定h按比例缩放w,空白处补黑色,若缩放后不能装满整张图片,则要考虑只按比例缩放。英文默认为one Word= 3h
  8. 每次加载数据时可以存成train.pkl与evalidate.pkl,方便下次读取。
  9. finetune,bi-lstm_size有改动,不要加载bi-lstm预训练参数。
  10. dbnet输出的archor,不是长方形,要进行放射变换。
  11. 检测时,最后半个字没检测全,可以一个一个像素增加,观察准确率。
  12. 训练时,参数多的时候,容易过拟合;数据多的时候,不容易过拟合;训练到validate_acc最高时最好。
  13. 文本检测分为回归和检测两大类。回归类的,box回归和像素值回归,文本规则,水平,一般用CTPN,EAST;分割类的算法一般用PSENET 0.3s,对性能有要求时,用dbnet 0.1s。提升效率backbone可以换成mobilenetV3.0。
  14. 弯曲变形的文字可以先仿射变换,tps因为基准点不好确定,不够鲁棒,慎用。
  15. 准确率要求不高的任务,检测需要至少500张,识别最好每个字符出现在不同场景200张。
  16. 印章等背景干扰,检测时,过滤颜色,增加干扰的训练样本。识别时,同样增广图片。
  17. 单张图片多语种并存,1个检测模型+1个N分类模型+N个识别模型。
  18. 模型加速,简单的减少通道数,换小的backbone,数据类型精度调低,减少网络层数。TensorRT。
  19. oom,减少batch_size,梯度累加,减少模型参数,resnetXX_vd等方法。
  20. 确定图片方向,训练图片方向分类模型。
  21. 真实数据不足,处理方式看比例,保证一个batch内真实与合成数据比例最好不要低于1:3,若真实图片比例远低于这个比例,就只能先在合成数据集上先训练到最优,再在真实数据集上进行finetune。
  22. 稍微模糊,人眼不是很好识别的情况。有的可以识别出来的,增加该类型的数据增广即可。麻烦一点的用SR,要注意看模糊的原因,运动模糊,斑点噪声,伪影什么的,细分好原因,准备相应训练数据可以试着GAN一下,就是麻烦了,不如把数据直接数据增广。
  23. 特定文字检测,一般检测全部区域更好再后处理筛选更好,若只检查指定区域容易漏检,后面新增字段方便。
  24. 单 位,模型检测总是分开,数据增广,两个字离得远的,标记在一个框里,再加上后处理。
  25. 表格,可以借鉴TableOCR。
  26. 尽量不要用sigmoid,可以用tanh或者relu之类的激活函数.1. sigmoid函数在-4到4的区间里,才有较大的梯度。之外的区间,梯度接近0,很容易造成梯度消失问题。2. 输入0均值,sigmoid函数的输出不是0均值的。
  27. 训练集准确率高,测试集准确率低,过拟合说明训练数据少;训练集准确率低,测试集准确率低,欠拟合说明模型过于简单,需要增加模型的复杂度。推荐7M,resnet随便训。
  28. 新写的网络,最好用小数据训练到过拟合,观察loss是否缓慢降低。否则模型不对。
  29. 后处理,造一些基础的轮子,分为表格部分和非表格部分。姓名,日期,年龄,银行卡号,发票号,金额,税额,税率,单价等等。
  30. 用bk-tree做模板匹配。
  31. unet做分割,与文字图片进行点乘,可去除背景。
  32. transform+feature extraction+ seq model + predict, 各模块可配置。
  33. 手机端部署,ncnn。
  34. 遇到缺字的情况,可以试一下透视变换,可能是因为框有倾斜,导致字的分割出现问题。
  35. 增值税发票OCR,蓝字,绿字,橙色字,都要添加到训练数据中,印章干扰。
  36. 印章干扰,过滤掉红色。
  37. 版面分析
  38. tps与backbone可以设置不同的学习率。
  39. pytorch方便指定每层的学习率,在优化器里修改。
  40. 将数据加工成lmdb格式会快很多。
  41. dbnet:fpn+可学习的二值化。
  42. finetune若不收敛可以降低学习率,可同样降低tps的学习率。
  43. 预测时每张图片的预测结果都一样,可能是加载参数的问题。
  44. Pytorch多机多卡不要用DataParallel,用DistributedDataParallel、DistributedSampler。预测的时候也要分布加载参数,多卡时torch会在网络参数名前加上model.,一定要删掉前六个字符。否则只会用初始化的参数。
  45. 可以将ctc loss与attention loss做融合作为loss。即有长文本的效果,又有注意力机制。

 

https://www.cnblogs.com/Allen-rg/p/10072162.html

 

posted @ 2024-09-21 13:14  silence_cho  阅读(66)  评论(0)    收藏  举报