Recurrent Neural Network[CTC]
<http://www.cnblogs.com/shouhuxianjian/p/8036105.html>

0. 背景

1. CTC原理



图 CTC结构图


CTC是看似和HMM有些联系,然后也采用DP来进行求解,将CTC结构图中

图 用前向-后向算法计算CTC
上图如CTC结构图,


* 最开始只能以(-)或者标签序列中第一个字符开始,即这里的t=1时,是{(-),(C)};
* 在结尾也只能以(-)或标签序列中最后一个字符结束,即这里的t=T时,是{(-),(T)};
所以,在所有的路径中,只有开始和结束的点算是确定的。不过值得注意的是,这里最开始和结束的空白符,分别是t=1的最开始空白符和t=T的结束空白符

训练tricks:

* 1 - 标点符号:在建立数据集的时候,需要将中文的如[,.'
";:]等标点符号换成英文的,或者反过来,不要有两份一样的,因为目前不论是attention_ocr还是ctc都算是象形文字,所以模型看到中文分号和英文分号,总觉得是同一个东西,所以会分错;
* 2 - 训练集
:在建立数据集的时候,因为ctc_loss中有个sequence_length,所以,为了增加数据分布一致性和ctc的效率,最好先对图片对应的文字进行长度排序,比如前面100个样本的label都是小于5的字符串;后面100个都是小于10的字符串;后面100个都是小于15的字符串,等等。
* 3 - batch间独立,batch内相等
:在读取数据的时候,同一个batch中因为图片大小需要相同,而如果是全卷积网络,是可以让不同batch之间独立的。所以图片的缩放可以按照batch之间各自决定。比如第一个batch
读取长度小于5的label和图片,将其缩放到100*32;第二个读取长度小于10的label和图片,将其缩放到200*32;
* 4 - 训练集双尾问题:为了数据的平衡性,需要将数据集中出现次数特别少的和出现次数特别多的label的样本删除,保证每个字符的频率都适中;
ps:字库可以去搜狗输入法 <https://pinyin.sogou.com/dict/>上下载,然后将scel转换成txt,然后就能接着生成自己需要的了
ps:关于CRNN模型的训练集问题:
CRNN 语料 <https://github.com/chineseocr/chinese-ocr/issues/1>;CRNN数据预处理
<https://github.com/chineseocr/chinese-ocr/issues/7>;训练loss
<https://github.com/chineseocr/chinese-ocr/issues/12>;中文数据集
<https://github.com/chineseocr/chinese-ocr/issues/13>;CRNN训练
<https://github.com/chineseocr/chinese-ocr/issues/14>;空格识别
<https://github.com/chineseocr/chinese-ocr/issues/18>;文字方向
<https://github.com/chineseocr/chinese-ocr/issues/57>;CRNN样本制作策略
<https://github.com/chineseocr/chinese-ocr/issues/70>;随机组合不可行
<https://github.com/chineseocr/chinese-ocr/issues/89>;语料来源
<https://github.com/chineseocr/chinese-ocr/issues/112>;图片尺寸讨论
<https://github.com/chineseocr/chinese-ocr/issues/108>;CTPN语料来源
<https://github.com/chineseocr/chinese-ocr/issues/142>

文字图片生成 <https://github.com/JarveeLee/SynthText_Chinese_version>
'''在其中的colorize3_poisson.py中''' l_out =
blit_images(l_normal.color,l_bg.color.copy())
'''等同于http://www.learnopencv.com/seamless-cloning-using-opencv-python-cpp/
这里实现的泊松图像编辑中的混合模式, 所以整个项目中的poisson_reconstruct.py脚本可以删除''' obj =
l_normal.color bgi= l_bg.color.copy() mask = 255 * np.ones(obj.shape,
obj.dtype) width, height, channels= bgi.shape center = (height//2, width//2)
mixed_clone= cv2.seamlessClone(obj, bgi, mask, center, cv2.MIXED_CLONE) l_out =
mixed_clone
在使用合成代码的时候,还是有一些问题的,如:
增加新背景图片 <https://github.com/ankush-me/SynthText/issues/5>;用此合成的去做ocr
<https://github.com/ankush-me/SynthText/issues/11>;
文字合成后属性问题
文本角度 <https://github.com/ankush-me/SynthText/issues/40>;文本角度
<https://github.com/ankush-me/SynthText/issues/93>;得到更大的文字
<https://github.com/ankush-me/SynthText/issues/42>;更长的字
<https://github.com/ankush-me/SynthText/issues/86>;调整字符间距
<https://github.com/ankush-me/SynthText/issues/91>;
对比度问题
文本颜色渲染 <https://github.com/ankush-me/SynthText/issues/36>;渲染问题
<https://github.com/ankush-me/SynthText/issues/81>;调整生成的文字的对比度
<https://github.com/ankush-me/SynthText/issues/58>;文字与背景对比度
<https://github.com/ankush-me/SynthText/issues/89>;
图片分割问题
图片分割 <https://github.com/ankush-me/SynthText/issues/33>;替换ucm
<https://github.com/ankush-me/SynthText/issues/44>;
depth2xyz的bug <https://github.com/ankush-me/SynthText/issues/70>;生成裁剪的单词图片
<https://github.com/ankush-me/SynthText/issues/52>;pt和px的问题
<https://github.com/ankush-me/SynthText/issues/51>;文字在放置的时候区域的选择-lee
<https://github.com/ankush-me/SynthText/issues/47>;平面上生成文字
<https://github.com/ankush-me/SynthText/issues/75>;字符频率的意义
<https://github.com/ankush-me/SynthText/issues/85>
取消坡度粘贴:随机生成每个图片的depth即可,然后将plane2xyz中z =
np.ones_like(z)*-0.1,使得该函数失效,每一个点的z轴高度一致,然后删除place_text中2个透视映射homography函数

整个图片都作为背景区域:将图片的seg修改为整个图片大小,然后计算其中的像素点,格式如原来。然后将get_text_placement_mask中place_mask前面加一句ROW=W;COL=H,使得每次都选取整个图片。


建议:可以在batch获取的时候,先统一高resize成32,然后取batch中最长的那个width为准,其他不足的以雪花点不全(先生成一个imgW*32的雪花点矩阵,且imgW很长)。从而防止图像失真。


猜测:上面的几个链接中,是先训练2个字的语料,然后逐渐上升到10个字的语料(虽然里面也有人说直接训练10个字的语料,这不是重点)。不过实际做inference的时候,该模型却能对应15甚至20个字的图片进行预测。所以个人猜测,是不是其实本身学习的也还是一种映射机制,即只是为了让整个模型能够将某些图像对应成某个字:




如上图中几个国字,因为“象形”,所以其实是为了学习不同背景,不同形状下的对应关系,所以其实背景的复杂程度加上字体本身的变化,颜色等等,才是数据集建立的关键,而lstm本身读取语料的语义虽然有纠错功能,不过却并不是识别的本质?




url:http://www.cnblogs.com/shouhuxianjian/p/8036105.html

友情链接
KaDraw流程图
API参考文档
OK工具箱
云服务器优惠
阿里云优惠券
腾讯云优惠券
华为云优惠券
站点信息
问题反馈
邮箱:ixiaoyang8@qq.com
QQ群:637538335
关注微信