淡谈自然场景下小样本OCR文字识别
1. 环境准备
实验中使用了centos7.6,intel core i4710,gtx980M(老机器重装) 安装的时候要注意,linux内核版本和实际版本要一致,不然会报错
Linux下Nvidia驱动的安装参见(kernel版本不一致先升级内核): https://blog.csdn.net/qq_44961869/article/details/115954258
cuda切换参见: https://www.cnblogs.com/jyroy/p/14378146.html
其他 linux安装宝塔一键安装命令如下: yum install -y wget && wget -O install.sh http://download.bt.cn/install/install_6.0.sh && sh install.sh
内网穿透推荐: https://frp.fujuage.com/
2.anaconda
linux安装anaconda教程参见: https://blog.csdn.net/ychgyyn/article/details/82258136
conda更换源(推荐中科大源–清华源是个坑)参见: https://ask.hellobi.com/blog/safa/36820
conda删除源方法 conda config --remove-key channels
3.pytorch版本
不同的版本要有不同的pytorch版本要对应不同的cuda版本,参见官网: https://pytorch.org/get-started/previous-versions/
4.OCR文字识别现有成熟架构
图像预处理->目标检测->ctcloss->softmax分类器 完整参见项目:https://blog.csdn.net/qq_24819773/article/details/104605994?utm_medium=distribute.pc_relevant.none-task-blog-2defaultbaidujs_title~default-0.no_search_link&spm=1001.2101.3001.4242
5.小样本OCR文字处理的困境
由于小样本需要不断对神经网络得到的特征向量做torcat函数(简单的讲特征向量做差),然后再放入网络之中所以无法直接使用ctcloss做文字的识别所以打算采用的架构如下: 图像预处理->目标检测(文字块)->文字块切割->小样本分类网络
6.图像预处理
1.图像去雾算法 参见:https://github.com/xiaominghero/ImageDehazing
2.图片文字褶皱恢复 参见:https://github.com/tommyMessi/waveCorrection
3.图片大小变换 参见:https://www.cnblogs.com/zhuxiangru/p/10620814.html
4.图片旋转 参见:https://www.cnblogs.com/bob-jianfeng/p/11237806.html
5.图片去噪(四种滤波器) 参见:https://blog.csdn.net/qq_27261889/article/details/80822270
7.目标检测
这一块算法比较多,一般来讲会使用RCNN用来识别,这里推荐几个开源更好的顶级会议算法: 1.TextFuseNet 参见:https://github.com/ying09/TextFuseNet
2.ABCNet 参见:https://zhuanlan.zhihu.com/p/126255677
3.MaskTextSpotterV3 参见:https://github.com/MhLiao/MaskTextSpotterV3
得到目标之后对的到图片求最小外接矩阵并且拉直 参见:https://www.jianshu.com/p/90572b07e48f
8.文字切割
这一块比较难,由于现有成熟的架构下都用了ctcloss这一类函数来避免由于粘连而导致的种种问题,而传统的基于水平方向,垂直方向投影的自然场景下文字分割效果实在是太差,实验中推荐使用MSER+NMS 文本检测,由于MSER+NMS的最大问题是识别的杂信息过多,但是其文本还是能基本识别出的,通过神经网络对其文字块进行分割之后再利用其算法得到的效果还是蛮好的。 算法参见:https://blog.csdn.net/javastart/article/details/111587778
9.小样本学习算法
关于小样本学习的基本算法可以参见这篇综述:https://zhuanlan.zhihu.com/p/61215293
通过研究顶会发现近两年流行图学习:传统的小样本学习、机器学习算法,在网络之中仅仅学习了网络节点的信息而忽视了网络节点之间边和边之间的联系。
这里推荐两个算法: 1.成熟的小样本学习算法:关系网络算法(Few shot learning) 参见: https://github.com/gitabcworld/FewShotLearning https://github.com/floodsung/LearningToCompare_FSL 2.DPGN:图网络 参见: https://github.com/megvii-research/DPGN
|