メインコンテンツまでスキップ

データ形式とテンソルの意味

このページでは、InputOptions::formatOutputTensorOptions::format、テンソル画像メタデータ、およびサンプルペイロードタグで使用される公開形式の語彙について説明します。

タスクレベルでの使用については、テンソルとサンプルから開始します。グラフの境界に明示的な形式契約が必要な場合は、ここを参照してください。

形式タグ

FormatTag / FormatSpecは、ペイロードの形式を指定します。Pythonでは、形式フィールドにpyneat.Formatまたはpyneat.FormatTagの値を使用します。Pythonの形式フィールドに生の文字列を割り当てないでください。

Pythonは、一般的なユーザー向けの形式タグを公開します。BBOXMLAARGMAX、およびDETESSDEQUANTなどの、より低レベルのC++タグは、通常、テンソルの意味メタデータ、ペイロードタグ、または診断を通じて表示され、割り当て可能なpyneat.Format値としては表示されません。

一般的なタグ:

タグ一般的なペイロード意味
RGB画像パックされたRGB、各チャネルあたり8ビット。
BGR画像パックされたBGR、各チャネルあたり8ビット。OpenCVはデフォルトでこれを使用します。
GRAY8画像8ビットグレースケール。
NV12画像/ビデオY平面とインターリーブされたUV平面。幅と高さは偶数である必要があります。
I420画像/ビデオY、U、およびV平面。幅と高さは偶数である必要があります。
H264エンコード済みH.264アクセスユニット/NALストリーム。AVCはエイリアスです。
H265エンコード済みH.265 / HEVCアクセスユニット/NALストリーム。HEVCはエイリアスです。
ENCODEDエンコード済みジェネリックなエンコード済みペイロード。caps文字列は、専用の形式タグがないコーデックを識別します。
FP32テンソルFloat32テンソルペイロード。
INT8テンソル符号付きINT8テンソルペイロード。
UINT8テンソル符号なしUINT8テンソルペイロード。
BF16テンソルBF16テンソルペイロード。
BBOX検出パックされたバウンディングボックスペイロード。
ByteStreamテンソルの意味下流の契約によって解釈される不透明なバイトストリーム。

ペイロードファミリー

PayloadTypeは、グラフの境界を越える広範なファミリーを選択します。

ペイロードファミリー内部/メディアの意味一般的なメタデータ
Imageデコードされたピクセルピクセル形式、幅、高さ、レイアウト、画像セマンティックメタデータ
Tensorモデルまたはアプリのテンソルdtype、形状、レイアウト、テンソルセマンティックメタデータ
EncodedH.264、H.265、またはJPEGなどのエンコードされたメディアcaps文字列、コーデック形式、タイムスタンプ
Auto可能な場合は推論テンソル/サンプルメタデータだけで十分な場合にのみ使用

テキスト、オーディオ、バイトストリーム、および不透明なバイトペイロードは、テンソルの意味または特殊な仕様を使用します。これらは、このリリースでレビューされた公開APIのPayloadType列挙型の個別の値ではありません。

生の画像マッピング

フォーマットペイロードタイプテンソルレイアウト / シェイプ備考
RGBImageHWC, [H, W, 3]密にパックされたピクセル。
BGRImageHWC, [H, W, 3]cv2.imread または OpenCV BGR フレームで使用。
GRAY8ImageHW, [H, W]単一チャンネルのグレースケール。
NV12ImageHW, [H, W] + プレーンメタデータY + UV プレーンの複合。
I420ImageHW, [H, W] + プレーンメタデータY + U + V プレーンの複合。

パックされたフォーマットの場合、奥行きはチャンネル数です。テンソルペイロードの場合、奥行きは選択されたレイアウトとシェイプから導き出されます。

フォーマット、レイアウト、軸セマンティクスを組み合わせて読み取る

単一のフィールドを単独で読み取らないでください。

フィールド何を教えてくれるか
PixelFormat / 画像フォーマットメタデータRGB、BGR、GRAY8、NV12、または I420 などのピクセルチャンネルをどのように解釈するか。
TensorLayoutテンソルの次元がどのように順序付けされているか(例:HWC、CHW、HW)。
TensorAxisSemanticテンソルがより豊富なセマンティックメタデータを持つ場合に、軸が何を意味するか。
TensorDType各要素がどのように格納されているか(例:UInt8、INT8、FP32、BF16)。
ByteFormat / バイトストリームメタデータ次の段階で不透明なバイトをどのように解釈するか。

バイトは意味を持ちません。バッファーを再解釈する前に、メタデータフィールドを組み合わせて使用してください。

InputOptions フォーマットの例

simaai::neat::InputOptions input;
input.payload_type = simaai::neat::PayloadType::Image;
input.format = simaai::neat::FormatTag::BGR;
input.width = 640;
input.height = 480;

境界に必要なフィールドのみを設定します。テンソルまたはサンプルにすでに十分なメタデータが含まれている場合は、重複した推測を避けてください。

H.264とH.265には、それぞれ専用のH264H265タグがあります。入力境界に一致するタグを設定します。メディアタイプはそこから解決されます。専用のタグを持たないコーデックの場合のみ、ENCODEDを明示的なcaps文字列とともに使用します。

高度な画像/ビデオ出力アダプター

通常のモデル出力には、nodes.output(...)を使用し、pull_tensors(...)でテンソルを取得します。画像またはビデオ出力をCPUで扱いやすいUInt8テンソルに変換、サイズ変更、またはレート調整する必要がある場合にのみ、OutputTensorOptionsを使用します。

simaai::neat::OutputTensorOptions output;
output.format = simaai::neat::FormatTag::BGR;
output.target_width = 640;
output.target_height = 480;

graph.add_output_tensor(output);

add_output_tensor(...) は、デフォルトの出力データ型である TensorDType::UInt8 を受け入れます。モデルのテンソルや、完全な Sample エンベロープが必要な出力に対しては、通常の nodes.output(...) パスを維持してください。別のデータ型が必要な場合は、明示的なグラフまたはアプリケーション側の変換を追加します。

サンプルペイロードタグ

Sample::payload_tag は、下流のコンシューマーにとって推奨されるラベルです。これは、非推奨の Sample::format フィールドに取って代わります。

エンコードされたメディアまたはグラフ境界のネゴシエーションをデバッグする際には、payload_tagpayload_typemedia_type、および caps_string を組み合わせて使用します。

前処理メタデータと ROI ブレッドクラム

検出、デコード、レンダリング、および ROI ワークフローでは、モデル空間の座標をソースフレームの座標にマッピングするために、前処理メタデータが必要です。

そのメタデータには、以下を含めることができます。

  • ターゲットの幅と高さ。
  • スケールされたコンテンツの幅と高さ。
  • リサイズまたはレターボックスモード。
  • パディング値とジオメトリ。
  • 入力と出力のカラーフォーマット。
  • 軸の並べ替え。
  • 正規化、量子化、およびテッセレーションフラグ。
  • ROI ウィンドウ、ソース画像のサイズ、ROI バッチサイズ、および ROI ごとのアフィン変換。

ボックスまたはマスクが間違った場所に配置されている場合は、しきい値の変更前に、前処理メタデータがデコードまたはレンダリング段階に到達したかどうかを確認してください。ROI リストの前処理の詳細については、ROIリストを前処理する を参照してください。

関連項目