所以我正在尝试将morsecode信号转换成它们的字符串表示。一些形式的预处理产生从0,1到C/RNN的输入的标准化浮点数的一维数组。示例:

此图像沿y轴拉伸以获得更好的可见性,但NN的输入是1d。我正在寻找一种聪明的方式来翻译图像的内容,在这个例子中,正确的翻译应该是"WPM = TEXT I“。我当前的模型使用了this教程中的keras的ctc损失。但是,它将为每个单独的时间步检测字母"E“("E”是“”的摩尔斯等效项。或者图像中的小条),所以我认为"stepsize“太小了。另一次尝试加强了这一点,该尝试将超过某个阈值的每个时间步长归类为"E“,其他所有内容都归类为UNK/blank。
我认为主要的问题是"E“(一条细线)和其他字符(例如"=”)在大小上的巨大差异,例如“=”由小线表示,中间的两个粗线(-...-)构成框架。这在语音识别中应该不是什么问题,因为在那里你可以使时间段的语音感觉小到微秒(就像在“瘦”和“健身房”中听到"i“的声音),这在这种情况下是不可能的。
也许任何人都会想出一个聪明的解决方案,要么是对这个实现,要么是通过输入的不同表示,或者其他类似的东西。
发布于 2021-07-27 16:26:48
我还成功地使用CTC-loss从交通标志牌中提取文本信息。
直观地说,除非你有很多例子,以便CNN(编码器)可以提取并实际了解到不同大小的字符实际上可以指向同一个字母,否则你将无法成功地学习到这一点。
实际上,CTC的理论基础确实意味着损失函数能够学习不同的大小,但在您的特定情况下,(较粗的)线也可以很容易地归类为相同的前一个字母(较细的)线。
我可能会采用的一种尝试是减少你正在处理的单词的时间步长/最大长度。直观地说,这将(假设我们保持图像的宽度相同)对RNN实施更大的分类框架。在您的特定情况下,这可能被证明是一种有用的方法,因为您对解释更广泛区域的网络容量感兴趣(不像本教程中的CAPTCHA示例)。
因此,在下图中,bin的宽度将更宽,因此可以更好地掌握(粉红色矩形的宽度将更大)。
另一个需要考虑的重要方面是数据集的维度。确保您使用增强,并且您有足够的样本用于训练。我在CTC上还提到,为了获得成功的结果,您还需要分析各种文本(不仅是样本数量,还包括样本中的文本)。在这里,数据量起着更大的作用;网络更容易区分A和X,但更难区分更粗和更细的线。

https://stackoverflow.com/questions/68540017
复制相似问题