CTCGreedyDecoderSeqLen

バージョン名: CTCGreedyDecoderSeqLen-6

カテゴリー: シーケンス処理

簡単な説明: CTCGreedyDecoderSeqLen は、最初の入力として提供されたロジットのグリードなデコードを実行します。シーケンス長は 2 番目の入力として提供されます。

詳細説明:

この操作は TensorFlow CTCGreedyDecoder に似ています。

CTCGreedyDecoderSeqLen 操作は、最適なパスデコードを実装します。デコードは 2 つの手順で行われます。

  1. タイムステップごとに最も可能性の高いクラスを連結して、最適なパスを生成します。

  2. merge_repeated 属性が true である場合、重複した連続要素を削除してその後すべての空白要素を削除します。

バッチ内のシーケンスは異なる長さを持ちます。シーケンス長は、2 番目の入力テンソル sequence_length でコード化されます。

CTCGreedyDecoder と CTCGreedyDecoderSeqLen の違いは 2 番目の入力にあります。CTCGreedyDecoder はバッチ内のシーケンスのシーケンスマスクを持つ 2D 入力浮動小数点テンソルを使用しますが、CTCGreedyDecoderSeqLen はシーケンス長を持つ 1D 整数テンソルを使用します。

属性:

  • merge_repeated

    • 説明: merge_repeatedは、CTC 計算中に繰り返しラベルをマージするフラグです。値が false の場合、シーケンス ABB*B*B (‘*’ は空のクラス) は ABBBB のように見えます。ただし、値が true の場合、シーケンスは ABBB になります。

    • 値の範囲: true または false

    • タイプ: boolean

    • デフォルト値: true

    • 必須: いいえ

  • classes_index_type

    • 説明: クラスのインデックス付きの出力テンソルのタイプ

    • 値の範囲: “i64” または “i32”

    • タイプ: 文字列

    • デフォルト値: “i32”

    • 必須: いいえ

  • sequence_length_type

    • 説明: シーケンス長付きの出力テンソルのタイプ

    • 値の範囲: “i64” または “i32”

    • タイプ: 文字列

    • デフォルト値: “i32”

    • 必須: いいえ

入力:

  • 1: data - シーケンスのバッチを含む、形状 [N, T, C] のタイプ T_F の入力テンソル。ここで、T は最大シーケンス長、N はバッチサイズ、C はクラスの数です。必須。

  • 2: sequence_length - シーケンス長を持つ形状 [N] のタイプ T_I の入力テンソル。シーケンス長は T 以下である必要があります。必須。

  • 3: blank_index - T_I タイプの 1 要素を持つスカラーまたは 1D テンソル。空のクラスに使用するクラス・インデックスを指定します。merge_repeated 属性の値にかかわりなく、特定のバッチおよびタイムステップの出力インデックスが blank_index に対応する場合、新しい要素は出力されません。デフォルト値は C-1 です。オプション。

Output

  • 1: T_IND1 タイプ [N, T] 形状の出力テンソルで、デコードされたクラスが含まれます。シーケンスクラスをコード化しないすべての要素には -1 が設定されます。

  • 2: T_IND2 タイプ [N] 形状の出力テンソルで、各バッチのデコードされたクラスのシーケンスの長さを含みます。

タイプ:

  • T_F: サポートされている浮動小数点タイプ。

  • T_I: int32 または int64

  • T_IND1: int32 または int64 は、classes_index_type 属性に依存します。

  • T_IND2: int32 または int64 は、sequence_length_type 属性に依存します。

例:

<layer ... type="CTCGreedyDecoderSeqLen" version="opset6">
    <data merge_repeated="true" classes_index_type="i64" sequence_length_type="i64"/>
    <input>
        <port id="0">
            <dim>8</dim>
            <dim>20</dim>
            <dim>128</dim>
        </port>
        <port id="1">
            <dim>8</dim>
        </port>
        <port id="2"/>  <!-- blank_index = 120 -->
    </input>
    <output>
        <port id="0" precision="I64">
            <dim>8</dim>
            <dim>20</dim>
        </port>
        <port id="1" precision="I64">
            <dim>8</dim>
        </port>
    </output>
</layer>