Проблемы, в том числе Eigen для простой тестовой программы C ++ TensorFlow Lite - PullRequest
0 голосов
/ 20 февраля 2019

Я скомпилировал библиотеку для API C ++ для TensorFlow Lite (r1.97), используя скрипт ${TENSORFLOW_ROOT}/tensorflow/lite/tools/make/build_rpi_lib.sh, выполнив шаги, предложенные на этой официальной странице (Собственная компиляция, загрузка необходимых библиотек), где${TENSORFLOW_ROOT} - это корневая папка, в которой я клонировал репозиторий.

Я пытаюсь скомпилировать эту простую test.cpp программу:

#include <memory>

#include "tensorflow/lite/interpreter.h"

int main(void)
{
    std::unique_ptr<tflite::Interpreter> interpreter(new tflite::Interpreter);
}

с помощью команды:

gcc-6 test.cpp -I${TENSORFLOW_ROOT} -I${TENSORFLOW_ROOT}/tensorflow/contrib/makefile/downloads/eigen -I${TENSORFLOW_ROOT}/tensorflow/contrib/makefile/downloads/protobuf/src -I${TENSORFLOW_ROOT}/tensorflow/contrib/makefile/downloads -L${TENSORFLOW_ROOT}/tensorflow/lite/tools/make/gen/rpi_armv7l/lib -lstdc++ -ldl -ltensorflow-lite

Список включений был предложен на странице Интеграция библиотек TensorFlow (в частности, из раздела iOS).Компиляция завершается неудачно со следующей ошибкой, связанной с включением Eigen:

${TENSORFLOW_ROOT}/third_party/eigen3/unsupported/Eigen/CXX11/Tensor:1:42: fatal error: unsupported/Eigen/CXX11/Tensor: No such file or directory
 #include "unsupported/Eigen/CXX11/Tensor"

Я нашел несколько ссылок, где обсуждается, по-видимому, похожая проблема (например, one ), но предложенные решенияиспользование ссылок на пакет Python TensorFlow, что невозможно в моем случае (и это выглядит довольно неоднозначно - я не рассматриваю использование python для этого проекта).

Я также пытался использовать другой путь включенияto Eigen (например, ${TENSORFLOW_ROOT}/third_party/eigen3):

gcc-6 test.cpp -I${TENSORFLOW_ROOT} -I${TENSORFLOW_ROOT}/third_party/eigen3 -I${TENSORFLOW_ROOT}/tensorflow/contrib/makefile/downloads/protobuf/src -I${TENSORFLOW_ROOT}/tensorflow/contrib/makefile/downloads -L${TENSORFLOW_ROOT}/tensorflow/lite/tools/make/gen/rpi_armv7l/lib -lstdc++ -ldl -ltensorflow-lite

, а также это приводит к ошибкам компиляции, связанным с Eigen, такого рода:

...
${TENSORFLOW_ROOT}/third_party/eigen3/unsupported/Eigen/CXX11/Tensor:1:42: error: #include nested too deeply
 #include "unsupported/Eigen/CXX11/Tensor"
...
${TENSORFLOW_ROOT}/third_party/eigen3/Eigen/Core:1:22: error: #include nested too deeply
 #include "Eigen/Core"
...

Есть предложения о том, как решить эту проблему?Каков правильный набор путей включения?

1 Ответ

0 голосов
/ 21 февраля 2019

Оказывается, я включил не ту папку.Вместо ${TENSORFLOW_ROOT}/tensorflow/contrib/makefile/downloads/eigen или ${TENSORFLOW_ROOT}/third_party/eigen3 правильным является ${TFLITE_ROOT}/tensorflow/lite/tools/make/downloads/eigen.

. Я все еще озадачен количеством eigen папок в хранилище:

find . -name "eigen*" -type d                                                                                                                                             
./third_party/eigen3
./tensorflow/lite/tools/make/downloads/eigen
...