0. 背景

1. CTC原理

Recurrent Neural Network[CTC]-LMLPHP

图 CTC结构图

CTC是看似和HMM有些联系,然后也采用DP来进行求解,将CTC结构图中<RNN输出,CTC层>单独拿出来,得到如下形式:

Recurrent Neural Network[CTC]-LMLPHP

图 用前向-后向算法计算CTC

上图如CTC结构图,

所以,在所有的路径中,只有开始和结束的点算是确定的。不过值得注意的是,这里最开始和结束的空白符,分别是t=1的最开始空白符和t=T的结束空白符

训练tricks:

ps:字库可以去搜狗输入法上下载,然后将scel转换成txt,然后就能接着生成自己需要的了

ps:关于CRNN模型的训练集问题:

文字图片生成

'''在其中的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

在使用合成代码的时候,还是有一些问题的,如:

增加新背景图片用此合成的去做ocr

文字合成后属性问题

文本角度文本角度得到更大的文字更长的字调整字符间距

对比度问题

文本颜色渲染渲染问题调整生成的文字的对比度文字与背景对比度

图片分割问题

图片分割替换ucm

depth2xyz的bug生成裁剪的单词图片pt和px的问题文字在放置的时候区域的选择-lee平面上生成文字字符频率的意义

取消坡度粘贴:随机生成每个图片的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个字的图片进行预测。所以个人猜测,是不是其实本身学习的也还是一种映射机制,即只是为了让整个模型能够将某些图像对应成某个字:

Recurrent Neural Network[CTC]-LMLPHP

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

05-11 21:44