Ошибка Tensorflow Lite arm64: невозможно преобразовать ‘const int8x8_t? - PullRequest
1 голос
/ 09 мая 2019

Я пытался собрать AARCH64 на Ubuntu 16.04.Я следовал этому руководству (Native Compling) https://tensorflow.google.cn/lite/guide/build_arm64.

Но я получил эту ошибку.Что проблема ?Также я хочу попробовать пример на Orange Pi 3. Как я могу использовать файл libtensorflow-lite.a после сборки для arm64.Я знаю Qt ide и c & c ++.Спасибо.

In file included from ./tensorflow/lite/kernels/internal/optimized/depthwiseconv_uint8.h:22:0,
                 from tensorflow/lite/kernels/depthwise_conv.cc:29:
./tensorflow/lite/kernels/internal/optimized/depthwiseconv_uint8_3x3_filter.h: In static member function ‘static void tflite::optimized_ops::depthwise_conv::WorkspacePrefetchWrite<(tflite::DepthwiseConvImplementation)3>::Run(int8, int, int8*)’:
./tensorflow/lite/kernels/internal/optimized/depthwiseconv_uint8_3x3_filter.h:5782:71: note: use -flax-vector-conversions to permit conversions between vectors with differing element types or numbers of subparts
       vst1_lane_u32(reinterpret_cast<uint32_t*>(ptr), fill_data_vec, 0);
                                                                       ^
./tensorflow/lite/kernels/internal/optimized/depthwiseconv_uint8_3x3_filter.h:5782:71: error: cannot convert ‘const int8x8_t {aka const __vector(8) signed char}’ to ‘uint32x2_t {aka __vector(2) unsigned int}’ for argument ‘2’ to ‘void vst1_lane_u32(uint32_t*, uint32x2_t, int)’
./tensorflow/lite/kernels/internal/optimized/depthwiseconv_uint8_3x3_filter.h:5785:35: error: cannot convert ‘const int8x8_t {aka const __vector(8) signed char}’ to ‘uint32x2_t {aka __vector(2) unsigned int}’ for argument ‘2’ to ‘void vst1_lane_u32(uint32_t*, uint32x2_t, int)’
                   fill_data_vec, 0);
                                   ^
tensorflow/lite/tools/make/Makefile:225: recipe for target '/tensorflow/tensorflow/lite/tools/make/gen/aarch64_armv8-a/obj/tensorflow/lite/kernels/depthwise_conv.o' failed
make: *** [/tensorflow/tensorflow/lite/tools/make/gen/aarch64_armv8-a/obj/tensorflow/lite/kernels/depthwise_conv.o] Error 1
make: *** Waiting for unfinished jobs....

Ответы [ 2 ]

2 голосов
/ 10 мая 2019

После нескольких часов попытки решить проблему, я думаю, что нашел решение для этого:

Просто добавьте параметр "-flax-vector-Conversions" в переменную CXXFLAGS в файле tenorflow / lite / tools / make / Makefile.

Для меня это было в строке 58:

CXXFLAGS := -O3 -DNDEBUG -fPIC -flax-vector-conversions

Предыдущая ошибка исчезла, но теперь я получаю другую ошибку:

undefined reference to `shm_open'

После этого я добавил "-lrt" в tenorflow / lite / tools / make / target / aarch64_makefile.inc

LIBS := \
-lstdc++ \
-lpthread \
-lm \
-ldl \
-lrt

и изменилось BUILD_WITH_NNAPI в Makefile на false

Процесс компиляции сработал. Я протестирую библиотеку TF как можно скорее.

0 голосов
/ 07 июня 2019

Чтобы собрать Tensorflow Lite для arm64, я изменил:

тензор потока / lite / tools / make / target / aarch64_makefile.inc

, добавив оба к CXXFLAGSи CFLAGS:

-flax-vector-conversions \
-fomit-frame-pointer \

, что дает:

  CXXFLAGS += \
    -march=armv8-a \
    -funsafe-math-optimizations \
    -ftree-vectorize \
    -flax-vector-conversions \
    -fomit-frame-pointer \
    -fPIC

  CFLAGS += \
    -march=armv8-a \
    -funsafe-math-optimizations \
    -ftree-vectorize \
    -flax-vector-conversions \
    -fomit-frame-pointer \
    -fPIC

Для меня это избавило от error: cannot convert, а также error: x29 cannot be used in asm here.

После этого я смог собрать libtensorflow-lite.a.

Команда из учебника по-прежнему выдает ошибку при сборке примеров приложений: undefined reference to flatbuffers::ClassicLocale::instance_, решение этой проблемы описано в

https://github.com/tensorflow/tensorflow/issues/28863


В качестве идентификатора, если вы пытаетесь использовать док-контейнер из руководства:

https://tensorflow.google.cn/lite/guide/build_arm64

Itрекомендует использовать tensorflow/tensorflow:nightly-devel, который в соответствии с докер-хабом в настоящее время является 6-месячным изображением (определенно не ночным):

https://hub.docker.com/r/tensorflow/tensorflow/tags/?page=1

По той же ссылке вы можете найти более свежую devel контейнер, в моем случае я использовал devel-py3

...