0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

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

Posted at

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)

unnamed-3.jpg

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

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?