Использование cpp tflite API в dev-платформе кораллов - PullRequest
0 голосов
/ 31 октября 2019

Я пытаюсь использовать API cpp tflite для запроса модели на плате разработчика. Код был протестирован с помощью USB-флешки и работает нормально, однако на плате разработчика я получаю сообщение об ошибке:

model_interpreter_ = coral::BuildEdgeTpuInterpreter(*model_, this->edgetpu_context_.get());

это ошибка:

INFO: Initialized TensorFlow Lite runtime.
ERROR: Failed to retrieve TPU context.
ERROR: Node number 0 (edgetpu-custom-op) failed to prepare.

Та же модель работает нормально, используя python API.

Есть ли поддержка tflite cpp API на dev-board?

На dev-board у меня последняя версия (12-1) иэто то, что я сделал для сборки библиотеки tflite:

  1. Локальная сборка tflite для arm64 (с использованием универсального сценария сборки, не так, как описано здесь ) Я использовал ветку v. 2,0. * причина в недостатке виртуальной памяти и дискового пространства для сборки на плате разработчика.

  2. На плате разработчика установлен flatbuffer.

Редактировать: Мне удалось собрать tflite из ветки tenorflow v2.0 на dev-плате, обновленной для ссылки на локально собранную библиотеку, все еще получая ту же ошибку ...

РЕДАКТИРОВАТЬ 2: Мне удалось воспроизвести тот же beaviour с tflite скомпилированной формы tf-r1.15. Также я попытался добавить отпечаток num доступных tpus, как было предложено @Nam Vu. так вот фрагмент кода:

cout << "check num available tpus\n";
    cout << available_tpus.size() << "\n";
    cout << "get edge session\n";
    this->edgetpu_context_ = edgetpu::EdgeTpuManager::GetSingleton()->OpenDevice();
    cout << "check num available tpus again:\n";
    cout << available_tpus.size() << "\n";
    cout << "get model buffer\n";
    this->model_ = tflite::FlatBufferModel::BuildFromFile(model_path.c_str());
    cout << "build model interpeter\n";
    this->model_interpreter_ = coral::BuildEdgeTpuInterpreter(*model_, this->edgetpu_context_.get());

, в результате чего:

Hello
check num available tpus
3689348814741910324
get edge session
check num available tpus again:
3689348814741910324
get model buffer
build model interpeter
Segmentation fault

1 Ответ

0 голосов
/ 31 октября 2019

Интересно, если это как-то не обнаруживает процессор, можете попробовать это:

const auto& available_tpus = edgetpu::EdgeTpuManager::GetSingleton()->EnumerateEdgeTpu();
cout << available_tpus.size() << "\n"; // hopefully we'll see 1 here

Затем создайте контекст:

std::shared_ptr<edgetpu::EdgeTpuContext> edgetpu_context =
          edgetpu::EdgeTpuManager::GetSingleton()->OpenDevice(
            available_tpus[0].type, available_tpus[0].path);
...