FLming/CRNN.tf2

CTC decoder 时怎么知道哪个序号是我的 <blk>

Antonio-hi opened this issue · 3 comments

decoded, neg_sum_logits = tf.nn.ctc_greedy_decoder(

在这里项目里面,您的 /< /BLK> 应该对应的 index 是 37 也可以理解为 max len sequnce - 1, 也可以理解为 index -1 , 在训练的时候 ctc loss 我们可以特别指定 blank_index 是任意值,但是在 decoder 的时候,函数里面就没有这个 blank_index 参数了,请问假设我在训练的时候 blank_index 随便赋予了一个 index 666,decoder 的时候这个 666 对应的blk字符 就会被显示在输出 string 里面,这个问题怎么理解,有没有好的解决方案

TF 解码器API中缺失了这个参数,已经有PR在进行中,不知道什么时候会更新。你可以自行解码。
比如:

def map_to_chars(inputs, table, blank_index=0, merge_repeated=False):
    """Map to chars.
    
    Args:
        inputs: list of char ids.
        table: char map.
        blank_index: the index of blank.
        merge_repeated: True, Only if tf decoder is not used.
    Returns:
        lines: list of string.    
    """
    lines = []
    for line in inputs:
        text = ""
        previous_char = -1
        for char_index in line:
            if merge_repeated:
                if char_index == previous_char:
                    continue
            previous_char = char_index
            if char_index == blank_index:
                continue
            text += table[char_index]            
        lines.append(text)
    return lines

decoded, neg_sum_logits = tf.nn.ctc_greedy_decoder(

在这里项目里面,您的 /< /BLK> 应该对应的 index 是 37 也可以理解为 max len sequnce - 1, 也可以理解为 index -1 , 在训练的时候 ctc loss 我们可以特别指定 blank_index 是任意值,但是在 decoder 的时候,函数里面就没有这个 blank_index 参数了,请问假设我在训练的时候 blank_index 随便赋予了一个 index 666,decoder 的时候这个 666 对应的blk字符 就会被显示在输出 string 里面,这个问题怎么理解,有没有好的解决方案

默认值是num_classes - 1,TF API文档上有说明。

decoded, neg_sum_logits = tf.nn.ctc_greedy_decoder(

在这里项目里面,您的 /< /BLK> 应该对应的 index 是 37 也可以理解为 max len sequnce - 1, 也可以理解为 index -1 , 在训练的时候 ctc loss 我们可以特别指定 blank_index 是任意值,但是在 decoder 的时候,函数里面就没有这个 blank_index 参数了,请问假设我在训练的时候 blank_index 随便赋予了一个 index 666,decoder 的时候这个 666 对应的blk字符 就会被显示在输出 string 里面,这个问题怎么理解,有没有好的解决方案

默认值是num_classes - 1,TF API文档上有说明。

感谢问题已解决,主要是考虑到我把类别设置成一个大于当前已有类别的数值,将来客户让新加文字模型 fine-tuning 方便