训练CRNN时,关于ctc_loss的几点注意事项

这个ctc_loss很魔性,训练CRNN虐了我几个来回。

我的数据集图片大小不一,我是先等比例缩小到固定高度为32,宽度不定。

常见三个问题:

1.CTC Loss Error: invalidArgumentError: Not Enough time for target transition sequence.

2.CTC Loss Error: InvalidArgumentError: sequence_length(b) <= time

3.ctc_loss error “No valid path found.” (这个错误对模型收敛没有很大影响,只是出错的那一个batch参数没有更新优化。如果这个错误很少,可以忽略。如果这个错误很多的话就建议用下面方法优化一下训练集。)

导致这三个问题的原因,就是label_length 和input_length的取值问题。

1. CRNN一个主要优点就是可以识别任意长度的图片。在训练的时候,先统一将图片padding到一个固定的很长的宽度。然后input_length设置为你等比例缩小后,padding之前的图片的宽除以四。部分代码如下:

 
  1. Img = Image.open(imagepath).convert('L')

  2. ResizedImg = cv2.resize(Img, (int(Img.shape[1] * (32 / Img.shape[0])), 32))

  3. input_length[i] = ResizedImg.shape[1] // 4

2. label_length很简单理解,就是ground truth的长度。

3. 如果你以为这样就完事大吉可以训练你就错了。因为你的图片可能有不合格的存在。导致问题3出现,loss变为inf。

4. 所以在训练前,应该过滤一遍所有训练集和验证集的图片。ctc_loss在计算预测结果和真值的loss的时候,会在你真值label中重复的字符之间插入空符,所以必须将label_length加上空符个数大于input_length的图片删除掉。而代码中的2,是我考虑有可能在label的开头和末尾存在空符。(我并没有验证这个想法,只是为了保险起见。)举个例子,你图片高度为32,宽度为160,那么input_length=40。label='abbbccddddcccaa',label_length=15,经过计算repreat_number为2(bbb)+1(cc)+3(dddd)+2(ccc)+1(aa),然后再加上开头结果的空符数2,最终等于11。也就是说必须满足label_length(15)+repreat_number(11)<=input_length(40)的图片才是合格的图片。部分代码如下:

 
  1. Img = np.array(Image.open(ImgRootPath + '/' + imgName).convert('L'))

  2. ResizedImg = cv2.resize(Img, (int(Img.shape[1] * (32 / Img.shape[0])), 32))

  3. l = [len(list(g)) for k, g in itertools.groupby(Label)]

  4. repeat_number = 0

  5. for n in l:

  6. if n > 1:

  7. repeat_number += (n - 1)

  8. input_length = ResizedImg.shape[1] // 4

  9. if len(Label)+repeat_number+2 > input_length:

  10. continue

 

### 回答1: crnn_lite_lstm_bk.onnx 是一个深度学习模型文件,以 ONNX 格式存储。ONNX 是一个开放的神经网络交换格式,可以在不同的深度学习框架之间进行模型的转换和共享。 这个模型是一个轻量级的CRNN(卷积循环神经网络)模型,用于文本识别任务。CRNN 是一种结合了卷积神经网络(CNN)和循环神经网络(RNN)的模型,能够同处理图像和序列数据,适合于需要从图像中提取文本信息的应用领域。 模型的主要结构包括卷积层、循环层和全连接层。卷积层用于提取图像的特征,循环层用于处理间序列数据,全连接层用于将提取的特征映射到具体的文本分类或识别结果。此外,模型还使用了LSTM(长短期记忆)单元,用于捕捉序列数据中的长程依赖关系。 使用这个模型,可以将输入的图像数据传入模型中,经过前向推理过程,得到对应的文本识别结果。模型训练需要一定的标注数据,包含输入图像以及对应的文本标签。可以使用现有的深度学习框架加载并运行这个模型,提供输入图像后,即可完成文本识别任务。 总之,crnn_lite_lstm_bk.onnx 是一个用于文本识别的轻量级CRNN模型,采用ONNX格式进行存储,可以方便地应用于不同的深度学习框架中,用于图像文本识别等相关任务。 ### 回答2: crnn_lite_lstm_bk.onnx是一个基于ONNX格式的神经网络模型文件。CRNN代表了卷积循环神经网络,在图像处理和文字识别领域非常有用。CRNN模型结合了卷积神经网络和循环神经网络,可以对包含文字的图像进行识别和理解。 在文字识别任务中,crnn_lite_lstm_bk.onnx模型可以通过输入一张包含文字的图像,输出对文字的识别结果。模型通过多层卷积神经网络来提取图像的特征信息,并通过LSTM(长短期记忆神经网络)对这些特征进行序列建模,最后使用全连接层输出对文字的分类结果。 crnn_lite_lstm_bk.onnx模型是一个精简版本的CRNN模型,特点是模型体积较小,适合在资源受限的设备上运行。模型通过降低网络的深度和参数量,以及采用轻量级的LSTM模块,实现了模型体积的降低。这使得模型在嵌入式设备或移动设备上能够高效地运行,并且能够处理实的文字识别任务。 总之,crnn_lite_lstm_bk.onnx是一个基于ONNX格式的文字识别模型,结合了卷积神经网络和循环神经网络,适用于在资源受限的设备上进行实文字识别任务。它的精简版本设计使其在嵌入式设备或移动设备上具备高效运行的能力。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值