C ++ APIを使用したGoogle Edge TPU


C ++を使用してモデルで推論を実行する場合、主に使用するので TensorFlow Lite C ++ API のある程度の経験が必要です。 追加のedgetpu.hファイルには、Edge TPUデバイスを指定するコンテキストオブジェクトや、TensorFlow Lite InterpreterAPIでカスタムopを登録するためのAPIなど、APIの小さなセットのみが含まれています。 (Edge TPU C ++ APIには、Python APIにあるような推論を実行するための便利なメソッドは含まれていません。)

C ++ Edge TPU APIの詳細については、edgetpu.hファイルを読む必要がありますが、基本的な使用には以下が必要です:

  • EdgeTpuContext:これにより、Edge TPUに関連付けられたオブジェクトが作成されます。 通常、使用するEdge TPUは1つだけなので、これを EdgeTpuManager :: OpenDevice() でインスタンス化できます。 ただし、複数のEdge TPUを使用することは可能であるため、このメソッドはオーバーロードされるため、使用するEdge TPUを指定できます。

  • kCustomOp and RegisterCustomOp()tflite :: Interpreterがコンパイル済みモデル内でEdge TPUカスタムopを実行する方法を理解するために、これらをtflite :: BuiltinOpResolver.AddCustom()に渡す必要があります。

一般に、記述する必要があるコードには次の要素が含まれます:

1.コンパイル済みのEdge TPUモデルをFlatBufferModelとしてロードします:

const std::string model_path = "/path/to/model_compiled_for_edgetpu.tflite";
std::unique_ptr<tflite::FlatBufferModel> model =
    tflite::FlatBufferModel::BuildFromFile(model_path.c_str());

このモデルは、以下のtflite :: InterpreterBuilder()で必要です。

2.EdgeTpuContextオブジェクトを作成します:

std::shared_ptr<edgetpu::EdgeTpuContext> edgetpu_context =
    edgetpu::EdgeTpuManager::GetSingleton()->OpenDevice();

このコンテキストは、以下のtflite :: Interpreter.SetExternalContext()で必要です。

3.Interpreterオブジェクトを作成するときに、Edge TPUカスタムopを指定します:

std::unique_ptr<tflite::Interpreter> model_interpreter =
    BuildEdgeTpuInterpreter(*model, edgetpu_context.get());

std::unique_ptr BuildEdgeTpuInterpreter(
    const tflite::FlatBufferModel& model,
    edgetpu::EdgeTpuContext* edgetpu_context) {
  tflite::ops::builtin::BuiltinOpResolver resolver;
  resolver.AddCustom(edgetpu::kCustomOp, edgetpu::RegisterCustomOp());
  std::unique_ptr interpreter;
  if (tflite::InterpreterBuilder(model, resolver)(&interpreter) != kTfLiteOk) {
    std::cerr << "Failed to build interpreter." << std::endl;
  }
  // Bind given context with interpreter.
  interpreter->SetExternalContext(kTfLiteEdgeTpuContext, edgetpu_context);
  interpreter->SetNumThreads(1);
  if (interpreter->AllocateTensors() != kTfLiteOk) {
    std::cerr << "Failed to allocate tensors." << std::endl;
  }
  return interpreter;
}

4.次に、インタープリター(上記のmodel_interpreter)を使用して、tflite APIを使用して推論を実行します。 主な手順はtflite :: Interpreter :: Invoke()を呼び出すことですが、入力を準備してから出力を解釈する必要もあります。 詳細については、[TensorFlow Liteのドキュメントを参照してください]。(https://www.tensorflow.org/lite/guide/inference)

開発ボードとアクセラレータはどちらもGoogleのEdge TPUチップを搭載しています。これは、汗をかくことなくAIモデルを実行するように設計された、あなたの指の爪ほどの大きさのASICプロセッサです。その間、カメラは開発ボードのためのアドオンとしてあります。https://store.gravitylink.com/global で贩卖を開始できます。