概述
CTC(Connectionist Temporal Classification), ctc擅长单行验证码识别:
两组谷歌验证码示例
ctc可以提高单行文本识别鲁棒性(不同长度不同位置 )。本文用几个重点直观的见解把ctc讲的简洁易懂,所以在这里就和大家一起补一补ctc 。
首先ctc算不上一个框架,更像是连接在神经网络后的一个归纳字符连接性的操作:
来自:https://towardsdatascience.com/intuitively-understanding-connectionist-temporal-classification-3797e43a86c
cnn提取图像像素特征,rnn提取图像时序特征,而ctc归纳字符间的连接特性。
那么CTC有什么好处?
因手写字符的随机性,人工可以标注字符出现的像素范围,但是太过麻烦,ctc可以告诉我们哪些像素范围对应的字符:
手写字符的单行像素标注, 来自:https://towardsdatascience.com/intuitively-understanding-connectionist-temporal-classification-3797e43a86c
如上图标注“t”的位置出现t字符,标注o的区域出现o字符。是的就是这样简单,ctc会总结出上述标注规律,不用人工标注,你所要做的只是提供loss函数做模型训练。
CTC是如何工作的?
ctc的编码有一个地方需要注意即是对重复字符的处理,如上述例子中的“to”, 如果真实字符串是“too”,而编码时也为“to”,就会和真实字符串“to”混淆。
所以在重复字符处要引入一个占位符号“-” 。下面是一些例子:
来自:https://towardsdatascience.com/intuitively-understanding-connectionist-temporal-classification-3797e43a86c
然后,ctc会计算loss ,从而找到最可能的像素区域对应的字符。事实上,这里loss的计算本质是对概率的归纳:
来自:https://towardsdatascience.com/intuitively-understanding-connectionist-temporal-classification-3797e43a86c
如上图,对于最简单的时序为2的(t0t1)的字符识别,可能的字符为“a”,“b”和“-”,颜色越深代表概率越高。
对于真实字符为空即“”的概率为0.6*0.6=0.36
而真实字符为“a”的概率不只是”aa” 即0.4*0.4 , 实时上,“aa”, “a-“和“-a”都是代表“a”,所以,“a”的概率为:
0.40.4 + 0.4 * 0.6 + 0.60.4 = 0.16+0.24+0.24 = 0.64
所以“a”的概率比空“”的概率高!通过对概率的计算,就可以对之前的神经网络进行方向传播更新。
最后,ctc的解码也是根据概率获得最高的那条路径:
来自: https://towardsdatascience.com/intuitively-understanding-connectionist-temporal-classification-3797e43a86c
当然,我们讨论到现在,CTC的适用范围还只是单行文本,对于多行如双行的黄牌识别就可能需要介入一些分行算法(line segmentation algorithms 参考【2】)的集成:
来自:http://blog.sina.com.cn/s/blog_13ead40120102wsxh.html
对于多行复杂的文本也是一样的:
参考文献:
- https://towardsdatascience.com/intuitively-understanding-connectionist-temporal-classification-3797e43a86c
- Joint Line Segmentation and Transcription for End-to-End Handwritten Paragraph Recognition
最后
以上就是舒适故事为你收集整理的CTC的直观理解(Connectionist Temporal Classification连接时序分类),单行文本时序分类识别的端到端方法的全部内容,希望文章能够帮你解决CTC的直观理解(Connectionist Temporal Classification连接时序分类),单行文本时序分类识别的端到端方法所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复