1

所以我试图将摩尔斯电码信号转换为它们的字符串表示。某些形式的预处理从 [0, 1] 产生一维标准化浮点数组,用作 C/RNN 的输入。例子:条码

该图像沿 y 轴拉伸以获得更好的可见性,但 NN 的输入为 1d。我正在寻找一种翻译图像内容的聪明方法,在这个例子中,正确的翻译是“WPM = TEXT I”。我当前的模型在本教程中使用 keras 的 ctc 损失。然而,它会为每个时间步检测字母“E”(“E”是“。”的莫尔斯等效值或图像中的一个小条),所以我认为“步长”太小了。另一种尝试强化了这一点,该尝试将高于某个阈值的每个时间步分类为“E”,其他所有内容都为 [UNK]/空白。

我认为主要问题是例如“E”(一条细线)和其他字符之间的大小差异很大,例如“=”,由小线表示,由中间看到的两条粗线框住( -...-)。这在语音识别中应该不是问题,因为您可以在语音识别小到微秒的时间段(比如在“瘦”和“健身房”中听到“i”音),这在这种情况下是不可能的.

也许任何人都想出了一个聪明的解决方案,要么是这个实现,要么是通过不同的输入表示或类似的东西。

4

1 回答 1

1

我还成功地使用 CTC-loss 从交通标志牌中提取文本信息。

直观地说,除非您有很多示例,以便 CNN(编码器)可以提取并实际学习不同大小实际上可以指向同一个字母,否则您将无法成功学习这一点。

事实上,CTC 的理论基础确实意味着损失函数能够学习不同的大小,但在您的特定情况下,(较粗的)线也可以很容易地归类为相同的前一个字母(较细)的线。

我会采用的一种可能尝试是减少您正在处理的单词的时间步长/最大长度。直观地说,这将(假设我们保持图像的相同宽度)为 RNN 实施更大的分类框架。在您的特定情况下,这可能被证明是一种有用的方法,因为您对您的网络解释更广泛区域的能力感兴趣(不像教程中的 CAPTCHA 示例)。

所以在下图中,bin 的宽度会更宽,因此可以更好地掌握(粉红色矩形的宽度会更大)。

另一个需要考虑的重要方面是数据集的维度。确保您使用增强并且您有足够的样本进行训练。我在 CTC 上还提到的是,为了获得成功的结果,您还需要分析各种文本(不仅是样本编号,还有样本中的文本)。在这里,数据量的作用更大;网络更容易区分 A 和 X,但更难区分粗线和细线。

https://towardsdatascience.com/intuitively-understanding-connectionist-temporal-classification-3797e43a86c

图片来源:https ://towardsdatascience.com/intuitively-understanding-connectionist-temporal-classification-3797e43a86c

于 2021-07-27T08:26:47.900 回答