【OCR】CTC loss原理

1 CTC loss出现的背景

在图像文本识别、语言识别的应用中,所面临的一个问题是神经网络输出与ground truth的长度不一致,这样一来,loss就会很难计算,举个例子来讲,如果网络的输出是”-sst-aa-tt-e’', 而其ground truth为“state”,那么像之前经常用的损失函数如cross entropy便都不能使用了,因为这些损失函数都是在网络输出与ground truth的长度一致情况下使用的。除了长度不一致的情况之外,还有一个比较难的点在于有多种情况的输出都对应着ground truth,根据解码规则(相邻的重复字符合并,去掉blank), path1: “-ss-t-a-t-e-” 和path2: "–stt-a-tt-e"都可以解码成“state”,与ground truth对应, 也就是many-to-one。为了解决以上问题,CTC loss就产生啦~
2 CTC loss原理

2.1 前序

在说明原理之前,首先要说明一下CTC计算的对象:softmax矩阵,通常我们在RNN后面会加一个softmax层,得到softmax矩阵,softmax矩阵大小是timestep*num_classes, timestep表示的是时间序列的维度,num_class表示类别的维度。

import numpy as np
ts = 12
num_classes = 26+1 #26 for the number of english character, 1 for blank
rnn_output = np.random.random((ts, 16))#16 for hidden node number
w = np.random.random((16,num_classes))
logits = np.matmul(rnn_output,w)#logits: ts*num_classes=[12,27]
#calculate softmax matrix
maxvalue = np.max(logits, axis=1, keepdims=True)
exp = np.exp(logits-maxvalue) #minus maxvalue for avoiding overflow
exp_sum = np.sum(exp, axis=1, keepdims=True)
y = softmax = exp/exp_sum #softmax:ts*num_classes=[12,27]

2.2 forward-backward计算

其实呢,整体过程可以看做是对输入的y也就是softmax做了相应的映射得到解码结果,在希望解码结果尽量正确的情况下(使用概率来衡量),对网络的参数进行梯度下降。
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

只有在timestep=7时为a的路径才会使用​

进行路径的分数计算,所以求偏导的时候只对这部分路径求取就可以啦

path1:“-ss-t-a-t-e-” 第7个timestep为a, path2: "–stt-a-tt-e"第7个timestep也为a, 以a为中点,将这两条路径分别分成两段。

path1_forward: “-ss-t-” path1_backward: “-t-e-”

path2_forward: “–stt-” path2_backward: “-tt-e”

​你也会发现 path1_forward+“a”+path2_backward也能够解码成正确的”state", 我们使用path3来表示该路径 , 同样的, path2_forward+“a”+path1_backward也可以解码成正确的“state",我们使用path4表示该路径

在下式中我们考虑​中仅仅包含path1,path2, path3, path4

在这里插入图片描述

在这里插入图片描述

其中​表示的是解码后​的长度。先看forward部分。

2.2.1 forward部分


在这里插入图片描述

这个公式计算的是所有能够解码成​的概率,

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

公式可能一下子不能理解透,举个例子好啦,先看上面的那种情况,也就是特殊情况下的递推公式:

在这里插入图片描述

def forward(y, labels):
    T,C = y.shape #T: timestep  
    L = len(labels)
    alpha=np.zeros([T,L])
    alpha[0,0]=y[0,labels[0]]
    alpha[0,1]=y[0,labels[1]]
    for t in range(1,T):
        for i in range(L):
            s= labels[i]
            a = alpha[t-1,i]
            if i-1>=0:
                a += alpha[t-1,i-1]
            if i-2>=0 and s!=0 and s!=labels[i-2]:
                a +=alpha[t-1,i-2]
            alpha[t,i]=a*y[t,s]
    return alpha
  
labels = [0, 19, 0, 20, 0, 1, 0, 20, 0, 5, 0]
alpha = forward(y,labels)

​ 就像刚刚所说,末尾带有blank和不带有blank都是正确的,“-s-t-a-t-e-“和”-s-t-a-t-e"都可以正确解码,所以

p = alpha[-1,lables[-1]]+alpha[-1,lables[-2]]

2.2.2 backward部分

forward讲清楚之后, backward快速的过一遍就好啦
在这里插入图片描述

这个公式计算的是所有能够解码成​的概率,


在这里插入图片描述

上面三个式子是说第T个timestep的解码成”blank“的概率是在这里插入图片描述

​, 解码成​中第一个字符的概率是在这里插入图片描述

​, 其他的字符的概率为0, 可以这样理解,如果路径能够解码成正确的”state", 那么第T个timestep的肯定是blank或者"e", 只有这样才能解码正确。 我们可以得到与forward相似的递推式:

在这里插入图片描述

套用上面forward的方式去理解,应该不难的~

def backward(y, labels):
    T,C = y.shape #T: timestep  
    L = len(labels)
    beta=np.zeros([T,L])
    beta[-1,-1]=y[-1,labels[-1]]
    beta[-1,-2]=y[-1,labels[-2]]
    for t in range(T-2-1,-1):
        for i in range(L):
            s= labels[i]
            b = beta[t+1,i]
            if i+1<L:
                b += beta[t+1,i+1]
            if i+2<L and s!=0 and s!=labels[i+2]:
                b +=beta[t+1,i+2]
            beta[t,i]=b*y[t,s]
    return beta
  
labels = [0, 19, 0, 20, 0, 1, 0]
beta = backward(y,labels)

2.3 梯度

求了上面的forward和backward之后,就可以求解梯度啦

根据在这里插入图片描述

可以得到
在这里插入图片描述

因为
在这里插入图片描述

所以对​求导的话, 仅有当​为类别k的那一项不为0, 其余项的偏导都为0
在这里插入图片描述

def gradient(y,labels):
    T,C = y.shape
    L = len(labels)
    alpha = forward(y,labels)
    beta = backward(y,labels)
    p = alpha[-1,-1]+alpha[-1,-2]
    gradient = np.zeros([T,V])
    for t in range(T):
        for c in range(C):
            lab = [idx for idx, item in enumerate(labels) if item == c]
            for i in lab:
                gradient[t, s] += alpha[t, i] * beta[t, i]
            gradient[t,c]/=-(y[t,c]**2)
    return gradient3

3 CTC loss优缺点

优点:在文本识别和语言识别领域中,能够比较灵活地计算损失,进行梯度下降

缺点:存在假设前提即每个lable相互独立, 因此可以计算路径的概率,才有了接下来的推导过程,但是在很多情况下上下文的label是有关联的,CTC loss很难考虑这一点,不过这些可以通过引入语言模型解码来解决啦~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/12799.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

深入剖析:如何优化Android应用的性能和内存管理

深入剖析&#xff1a;如何优化Android应用的性能和内存管理 性能和内存管理的重要性 在今天的移动应用开发中&#xff0c;用户对于应用的性能和体验要求越来越高。一款性能卓越的Android应用能够提供流畅的操作体验、快速的响应速度以及较低的资源消耗&#xff0c;从而提高用户…

SpringBoot 集成webSocket

pom.xml <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.apache.org/POM/4.0.0 …

HTML5 Input 类型

文章目录 HTML5 Input 类型Input 类型: colorInput 类型: dateInput 类型: datetimeInput 类型: datetime-localInput 类型: emailInput 类型: monthInput 类型: numberInput 类型: rangeInput 类型: searchInput 类型: telInput 类型: timeInput 类型: urlInput 类型: weekHTM…

CLIMS:弱监督语义分割的跨语言图像匹配

文章目录 CLIMS: Cross Language Image Matching for Weakly Supervised Semantic Segmentation摘要方法语言图像匹配框架 实验结果 CLIMS: Cross Language Image Matching for Weakly Supervised Semantic Segmentation 摘要 存在的问题 CAM(类激活图)通常只激活有区别的对象…

辉煌优配|黄金价格创近两年半新高!2只黄金股一季度预增

黄金板块早盘走强。 4月14日早盘&#xff0c;黄金板块团体走高&#xff0c;次新股四川黄金开盘半小时内拉升至涨停&#xff0c;封单资金到达7279.78万元&#xff0c;中润资源、晓程科技涨幅居前&#xff0c;分别为8.96%、8.48% 消息面上来看&#xff0c;近期全球黄金期货价格节…

HTML中表格标签<table><tr><tb><th>中单元格的合并问题

前情知晓 层级关系如下&#xff1a; <table><tr><td> </td><th> </th></tr></table> <table>...</table> 用于定义一个表格开始和结束 <tr>...</tr> 定义一行标签&#xff0c;一组行标签内可以建立…

Spring Cloud微服务网关Zuul的注解@EnableZuulProxy或@EnableZuulServer做了什么事情

一、Zuul的工作原理 Zuul 1.x的版本是由Servlet以及一系列的Filter组成的&#xff0c;各个组件之间协同合作完成功能&#xff0c;且易于扩展。参看官方的架构图我画了张图&#xff1a; Zuul声明周期&#xff1a; HTTP Request -> DispatcherServlet -> ZuulHandlerMappi…

面了 6 家大厂,并拿下 5 家 offer,进大厂好像也没有那么困难吧....

前言 二月份的时候因为换工作的缘故&#xff0c;陆续参加了华为、阿里巴巴、字节跳动、拼多多、百度、Paypal 的社招面试&#xff0c;除了字节跳动流程较长&#xff0c;我主动结束面试以外&#xff0c;其他的都顺利拿到了 Offer。 最近时间稍微宽裕点了&#xff0c;写个面经&…

2021遥感应用组二等奖:近20年黄河流域植被动态与生态环境效应

作品介绍 1 研究目的 基于MODIS NDVI植被指数、土地利用数据和气象数据集&#xff0c;辅以趋势分析、偏相关分析、马尔科夫转移矩阵变化分析、多元回归分析等方法&#xff0c;全面分析黄河流域2001-2020年植被时空变化特征&#xff0c;并通过构建统计模型方式&#xff0c;定量…

图染色问题的NP完全性证明

文章目录 1.Overview2.CNF 3-sat3. Gadgets3.1 Concolorous Edges3.2 Starter/Variable Gadget3.3 Splitter Gadget3.4 OR Gadget3.5 Clause Gadget 4. To Planar Graph 最近在学 6.890&#xff0c;然后 devans 刚好问了我这个问题&#xff0c;然后尝试编了一个证明。 1.Overv…

独家 | 招商银行:玩转校园招聘新方式 挖掘金融科技新人才

数字经济时代&#xff0c;金融科技人才队伍的引进与培养是招商银行人才体系建设的关键任务。 01.金融科技校招2大核心课题 招商银行数字化转型过程中&#xff0c;线上化、生态化、平台化、智能化、数据化全面加速发展&#xff0c;对人才队伍能力提出新要求。 2大核心课题&am…

Spring Bean的生命周期

Spring Bean 的完整生命周期主要包括以下阶段&#xff1a; 实例化&#xff08;Instantiation&#xff09;&#xff1a;Spring 容器通过调用 Bean 的构造函数来创建 Bean 的实例。这是 Bean 生命周期的第一步。 设置属性值&#xff08;Setting Bean Properties&#xff09;&…

【分布式】熔断、降级傻傻分不清楚-熔断和降级的真实关系

文章目录 前言降级熔断什么是服务熔断 熔断和降级的关系降级方式1、熔断降级&#xff08;不可用&#xff09;2、超时降级3、限流降级 总结 前言 刚开始我以为熔断和降级是一体的&#xff0c;以为他们必须配合使用&#xff1b; 只不过名字不一样而已&#xff0c;但是当我经过思…

如何实现视觉识别形状

1. 功能说明 通过摄像头识别圆形及矩形两种形状。 2. 电子硬件 本实验中采用了以下硬件&#xff1a; 主控板 Basra主控板&#xff08;兼容Arduino Uno&#xff09; 扩展板 Bigfish2.1 电池7.4V锂电池通信2510通信转接板WiFi路由器 其它 摄像头 配置OpenCV的Visual Studio 2015.…

MySQL having关键字详解、与where的区别

1、having关键字概览 1.1、作用 对查询的数据进行筛选 1.2、having关键字产生的原因 使用where对查询的数据进行筛选时&#xff0c;where子句中无法使用聚合函数&#xff0c;所以引出having关键字 1.3、having使用语法 having单独使用&#xff08;不与group by一起使用&a…

(SQL学习随笔3)SQL语法——SELECT语句

导航 基本认识FROM关键字LIMIT与OFFSETORDER BY WHERE条件查询单值比较多条件组合范围筛选空值匹配LIKE通配条件分组 运算符和函数数据变换 分组运算表连接内连接左(右)外连接全外连接 外键约束窗口函数UNION&#xff1a;表上下拼接子查询条件判断PostgreSQLMySQL 基本认识 SE…

两种方法实现杨辉三角(java实现)

&#x1f389;&#x1f389;&#x1f389;点进来你就是我的人了 博主主页&#xff1a;&#x1f648;&#x1f648;&#x1f648;戳一戳,欢迎大佬指点!人生格言&#xff1a;当你的才华撑不起你的野心的时候,你就应该静下心来学习! 欢迎志同道合的朋友一起加油喔&#x1f9be;&am…

Consul TTL健康检查方式

consul比较常用的健康检查方式为http健康检查方式&#xff0c;也还有使用TTL方式来进行健康检查的&#xff0c;下面从spring-cloud-consul-discovery这个SDK来着手分析。 构建ConsulAutoRegistration&#xff0c;这里的工作是组成服务注册的报文&#xff0c;有一个setCheck方法…

钉钉消息防撤回功能研究与实现-可查看历史消息[文件/图文/管理员/链接 撤回拦截]

研究背景 由于在某个大学进行上课的时候,遇到的某个老师,总是习惯发过的消息,到第二天的时候撤回,我们用聊天工具的其中一个原因,不就是因为可以随时去查看发过的消息吗&#xff0c;&#xff0c;而这位老师的操作,也让包括我在内的很多人感到痛不欲生。 想一想,当自己想要去看下…

常见的九种大数据分析模型

常见的9种大数据分析模型分别为&#xff1a; 事件分析、 属性分析、 渠道分析、 Session分析、 留存分析、 归因分析、 漏斗分析、 路径分析、 分布分析 1、【事件分析】 事件分析&#xff0c;是指用户在 APP、网站等应用上发生的行为&#xff0c;即何人&#xff0c;何时&…