Unique

バージョン名: Unique-10

カテゴリー: データ移動

簡単な説明: Unique は、指定された入力テンソルの一意の要素を検索します。オペレーターの属性に応じて、(平坦化された) テンソル全体でグローバルに一意の値を検索するか、指定された軸に沿って検索を実行します。

詳細な説明: オペレーターは、テンソル全体で一意の値を検索する要素ごとのモードで作業することも、指定された軸に沿った入力テンソルのスライスを考慮することもできます。このようにして、操作 (op) は入力データ内で一意のサブテンソルを見つけることができます。固有の要素を除いて、オペレーターは入力テンソル内の固有の要素のインデックスと、入力データ内の固有の要素の出現数も生成します。

属性:

  • sorted

    • 説明: 出力テンソルの一意の要素を昇順でソートするかどうかを制御します。

    • 値の範囲:

      • false - 出力テンソルの要素がソートされません

      • true - 出力テンソルの要素がソートされます

    • タイプ: ブール値

    • デフォルト値: true

    • 必須: いいえ

  • index_element_type

    • 説明: インデックスを含む出力テンソルのデータタイプを制御します。

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

    • タイプ: 文字列

    • デフォルト値: “i64”

    • 必須: いいえ

  • count_element_type

    • 説明: 最後の出力テンソルのデータタイプを制御します。

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

    • タイプ: 文字列

    • デフォルト値: “i64”

    • 必須: いいえ

入力:

  • 1: タイプ T の任意の形状のテンソル。必須。

  • 2: T_AXIS タイプのテンソル。許可されるテンソル形状は、単一要素またはスカラーを含む 1D です。指定される場合、この入力は定数に接続する必要があります。オプション この入力が与えられると、固有の要素の処理が開始される前に、指定された軸に沿って入力テンソルをスライスに “分割” するために使用されます。この入力がない場合、オペレーターは入力テンソルの平坦化バージョンを処理します (要素ごとの処理)。許可される値の範囲は [-r; r-1] です。ここで、r は入力テンソルのランクです。

出力:

  • 1: 一意の要素 (個々の値またはサブテンソル) を含む出力テンソル。このテンソルのタイプは、最初の入力テンソル T のタイプと一致します。このテンソルの値は昇順に並べ替えられるか、入力テンソルと同じ順序を維持します。この出力の形状は入力テンソルの値に依存し、多くの場合動的になります。OpenVINO で動的形状がどのように処理されるかを説明した記事を参照してください。

  • 2: 一意の要素の位置のインデックスを含む出力テンソル。インデックスは、最初の出力テンソルの要素を入力テンソルの位置にマップします。インデックスは常に、入力テンソル内の特定の一意の出力要素の最初の出現を指します。これは、index_element_type 属性によって制御されるタイプを持つ 1D テンソルです。

  • 3: 最初の出力テンソル内の入力テンソルの要素の位置のインデックスを含む出力テンソル。これは、入力テンソルの各要素について、この出力がこのオペレーターの最初の出力テンソルの一意の値を指すことを意味します。これは、index_element_type 属性によって制御されるタイプを持つ 1D テンソルです。

  • 4: 最初の出力テンソルでこのオペレーターによって生成された各一意の値の出現数を含む出力テンソル。これは、count_element_type 属性によって制御されるタイプを持つ 1D テンソルです。

タイプ:

  • T: サポートされている任意のデータタイプ。

  • T_AXIS: int64 または int32

例:

例 1: ‘ゼロ’ を含む定数に接続された軸入力

 <layer ... type="Unique" ... >
     <data sorted="false" index_element_type="i32"/>
     <input>
         <port id="0" precision="FP32">
             <dim>3</dim>
             <dim>3</dim>
         </port>
     </input>
     <input>
         <port id="1" precision="I64">
             <dim>1</dim>
         </port>
     </input>
     <output>
         <port id="2" precision="FP32">
             <dim>-1</dim>
             <dim>3</xdim>
         </port>
         <port id="3" precision="I32">
             <dim>-1</dim>
         </port>
         <port id="4" precision="I32">
             <dim>3</dim>
         </port>
         <port id="5" precision="I64">
             <dim>-1</dim>
         </port>
     </output>
 </layer>

例 2: 軸が指定されていない場合

 <layer ... type="Unique" ... >
     <input>
         <port id="0" precision="FP32">
             <dim>3</dim>
             <dim>3</dim>
         </port>
     </input>
     <output>
         <port id="1" precision="FP32">
             <dim>-1</dim>
         </port>
         <port id="2" precision="I64">
             <dim>-1</dim>
         </port>
         <port id="3" precision="I64">
             <dim>9</dim>
         </port>
         <port id="4" precision="I64">
             <dim>-1</dim>
         </port>
     </output>
 </layer>

例 3: 軸が指定されず、デフォルト以外の出力精度

 <layer ... type="Unique" ... >
     <data sorted="false" index_element_type="i32" count_element_type="i32"/>
     <input>
         <port id="0" precision="FP32">
             <dim>3</dim>
             <dim>3</dim>
         </port>
     </input>
     <output>
         <port id="1" precision="FP32">
             <dim>-1</dim>
         </port>
         <port id="2" precision="I32">
             <dim>-1</dim>
         </port>
         <port id="3" precision="I32">
             <dim>9</dim>
         </port>
         <port id="4" precision="I32">
             <dim>-1</dim>
         </port>
     </output>
 </layer>