最初のモデルを実行する
| 項目 | 値 |
|---|---|
| カテゴリ | モデルと推論 |
| 難易度 | 初級 |
| 推定所要時間 | <5 minutes |
| ラベル | model, inference, foundations |
これは最初の章です。目標は、可能な限り最小限の完全な推論です。コンパイルされたモデルを取得し、1つの画像を入力として与え、予測されたクラスのインデックスを出力します。グラフも、スレッドも、ストリーミングもありません。すべての Neat プログラムが構築されている3つの呼び出しだけです。
コンパイルされたモデル は、デプロイ可能な .tar.gz アーカイブであり、MPK推論コントラクトが含まれています。これには、モデルのアーティファクトと、ターゲットデバイスで実行するために Neat が必要とするランタイムメタデータが含まれます。アーカイブを解凍したり、ステージを自分で接続したりする必要はありません。Neat にアーカイブを指し示し、入力を与え、出力を読み取ります。最終的には、3行で推論を実行し、top1= クラスのインデックスを出力できます。
ウォークスルー
モデルをロードする
最初の行は、ディスク上のパスを、実行可能な Model に変換します。コンストラクションは、アーカイブをロードし、実行に備えて準備します。
build_options(size) を2番目の引数として渡して、このモデルが期待する入力コントラクト(RGBカラー、224×224、およびResNet-50がトレーニングされたImageNet正規化)を宣言します。ここで宣言することで、ランタイムは、生の画像をモデルが要求するテンソルに変換する方法を認識します。
simaai::neat::Model model(model_path, build_options(size));
入力を準備する
次に、分類する正確に1つの画像を生成します。--image を渡すと、画像が読み込まれ、224×224 にリサイズされ、入力コントラクトに一致するようにRGBに変換されます。それ以外の場合は、単色のグレーフレームを合成して、完全なロード→実行→読み取りパスが、手元にアセットがなくても、最初から最後まで実行されるようにします。
フレームは cv::Mat であり、load_rgb(...) によって生成されるか、グレーのプレースホルダーとして生成されます。
cv::Mat input = image.empty() ? cv::Mat(size, size, CV_8UC3, cv::Scalar(99, 99, 99))
: load_rgb(image, size);
推論を実行し、結果を読み取る
3番目の行は、実際の処理を実行します。run() は、入力と timeout_ms を受け取り、モデルを同期的に実行し、出力を返します。timeout_ms は、待機する最大壁時計時間です。2000 ミリ秒の場合、「デバイスが2秒以内に出力を生成しない場合は、エラーを発生させる」という意味であり、無限にハングするわけではありません。(-1 を渡すと、無期限にブロックされます。実際のコードでは、有限の値を優先してください。)次に、argmax を使用して出力を単一のクラスインデックスに減らし、top1= を出力します。
run() は TensorList を返します。最初のテンソルのバイトを map_read() を使用して読み取ります。
simaai::neat::TensorList outputs = model.run(std::vector<cv::Mat>{input}, /*timeout_ms=*/2000);
実行
実行すると、予測されたクラスのインデックスが標準出力に出力されるはずです。Neat のインストールルート(share/ と lib/ を含むディレクトリ)から Python および C++(事前に構築されたもの) コマンドを実行します。ソースからビルドする コマンドは、リポジトリのルートから実行します。
C++ (prebuilt):
./lib/sima-neat/tutorials/tutorial_001_run_your_first_model \
--model /tmp/resnet_50.tar.gz
C++ (build from source):
./build.sh --target tutorial_001_run_your_first_model
./build/tutorials-standalone/tutorial_001_run_your_first_model \
--model /tmp/resnet_50.tar.gz
予想される出力(正確なインデックスは画像によって異なります):
top1=285
[OK] 001_run_your_first_model
この章のC++ソースを、カスタムの CMakeLists.txt を使用して独自のプロジェクトに統合する方法(追加のフォルダーは必要ありません)については、ランディングページにある「チュートリアルの実行方法」を参照してください。
スループット、バッチ処理、またはライブストリームについては、第2章に進んでください。参照:モデル。
実践
チュートリアルとテストがモデルアーカイブ(.tar.gz)とサンプルアセットを探す場所、およびそれらをローカルで提供する方法。これは、モデルをベースにしたすべてのチュートリアルの前提条件です。