ONNXパイプライン・モデル: イメージ埋込み

ONNXパイプライン・モデルは、イメージを入力として受け入れ、埋込みを出力として生成するイメージ埋込みモデルを提供します。パイプライン・モデルには、必要な前処理も用意されています。

イメージ埋込みパイプライン

  1. 入力: パイプラインへの入力はイメージです。各イメージはバイトの配列として表されます。これは、SQLを使用する場合はBLOB、またはPythonのio.ByetIOのような同様のインメモリー・バイト表現にすることができます。
  2. 前処理: イメージ埋込みパイプラインは、前処理ステップでイメージ・プロセッサを利用します。イメージ・プロセッサは、Hugging Faceリポジトリのモデル構成に依存します。事前トレーニング済イメージ・モデル("google/vit-base-patch16-224"など)を指定すると、パイプライン・ビルダーはモデルの構成からイメージ・プロセッサ・クラスを検索し、パイプライン・ビルダー・テンプレートでイメージ・プロセッサ名を検索して、それがサポートされているかどうかを判断します。一致が見つかった場合は、特定のイメージ・プロセッサがテンプレートに従ってロードおよび構成されます。次の表に、パイプライン・ビルダー・テンプレートとそれに対応するイメージ・プロセッサ・クラスの関係を示します。イメージ・プロセッサ・クラスは、トランスフォーマ・ライブラリによって提供されます。

    ノート:

    事前構成済のイメージ・モデルを使用する場合は、これらのテンプレートを参照する必要はありません。ただし、事前構成されていないモデルはテンプレートに基づいており、そのようなモデルにはこれらのテンプレートを使用できます。

    各イメージ・プロセッサには、特定の方法で入力イメージを変更する複数の操作があります。これらの各操作は、イメージ・プロセッサ・テンプレートの構成で表されます。これらの操作およびそれぞれの構成の変更はサポートされていません。この構成は表示でき、認識しておく必要があります。次の表に、イメージ操作とそれぞれの構成を示します:

    表4-1 イメージ・プロセッサの構成

    イメージ・プロセッサの操作 説明

    デコード

    圧縮されたイメージを3Dラスター形式に変換します。

    サイズ変更

    指定されたイメージを新しい形状にサイズ変更します。

    スケール変更

    イメージを数値でスケール変更します(要素別の乗算)。

    正規化

    (イメージ - 平均) / 標準偏差という公式を使用して、指定された平均と標準偏差(std)を使用してイメージを正規化します(ピクセルの強度値を目的の範囲(多くの場合、0から1の間)に調整します)。

    CenterCrop

    イメージを中央から固定サイズで切り取ります。

    ノート:

    イメージ・プリプロセッサは固定とみなされ、変更できません。これらの詳細は情報と理解のために公開しています。
  3. 元のモデル: Hugging Faceリポジトリからの事前トレーニング済のPyTorchモデル。このリポジトリには、既存の指定を持つ事前構成済モデルも含まれています。事前構成済リストのすべてのモデル名のリストを取得するには、show_preconfigured関数を使用します。前述のテンプレートを開始点として使用して、独自の指定を作成することもできます。
  4. 出力: パイプラインによって、入力イメージごとに埋込みが生成されます。

イメージ埋込みの例

  1. 事前構成済のイメージ・モデルのエクスポート:
    from oml.utils import ONNXPipeline
    pipeline =ONNXPipeline("google/vit-base-patch16-224")
    pipeline.export2file("your_preconfig_model_name")

    この例では、OML4Py 2.1に同梱されている事前構成済モデルであるgoogle/vit-base-patch16-224モデルを使用します。パイプラインはファイルにエクスポートされ、その結果、現在のディレクトリにyour_preconfig_model_name.onnxファイルが作成されます。このモデルは、オプションでpipeline.export2db関数を使用してデータベースに直接エクスポートできます。エクスポートされたパイプラインでは、分類出力ではなく、単に埋込みが生成されますが、OML分類モデルをトレーニングして、これらの埋込みを取得し、目的の分類を生成できます。

  2. テンプレートを使用した事前構成されていないモデルのエクスポート:

    ノート:

    テンプレートの詳細は、この項を参照してください
    from oml.utils import ONNXPipeline,ONNXPipelineConfig
    import oml
    config = ONNXPipelineConfig.from_template("Image_ViT")
    pipeline = ONNXPipeline("nateraw/food",config=config)
    oml.connect("pyquser","pyquser",dsn="pydsn")
    oml.export2db("your_preconfig_model_name")

    nateraw/foodモデルはOML4Py 2.1に事前構成済モデルとして含まれていないため、この例ではテンプレートによる方法が選択されています。これはViTベースのモデルであるため、ViTテンプレートが選択されます。

ONNX形式に変換されたイメージ・モデルをロードするプロセスは、テキストから生成されたONNX形式モデルと非常によく似ています。ONNXモデルをロードしてさらに使用する方法については、「ONNXパイプライン・モデル: テキスト埋込み」のステップ6から9を参照してください。