【ARMNN/编译】tensorflow lite版本

说在前面

  • PC环境:ubuntu16.04
  • 目标平台:armv8-A
  • 编译方式:交叉编译
  • 参考:为Tensorflow、Tensorflow lite配置Arm NN SDK编译环境、arm developer
  • 其他说明:主要按照第一篇博文中的过程来,记录一些小问题
  • 吐槽:目前单个树莓派真的不适合做神经网络之类的

tensorflow版本补充

  • 由于下述过程需要contrib文件夹,目前最新版本(>2.1.0)的tf中没有该文件夹
  • 2.0.0版本可行

各种库的下载

  • 嫌github下载慢可到码云下载

编译ComputeLibrary补充

  • 这里我用到的命令为

    sudo scons arch=arm64-v8a extra_cxx_flags="-fPIC" benchmark_tests=0 \
      validation_tests=0 Werror=1 debug=0 asserts=0 \
      neon=1 opencl=1 embed_kernels=1
    

    参考Tutorial: Cartoonifying Images on Raspberry Pi with the Compute Library、Tutorial: Cartoonifying Images on Raspberry Pi with the Compute Library

  • 且不支持python3.x,切换python版本见采用update-alternatives 切换python版本

  • 需要与ARMNN保持版本一致

编译google protobuf补充

  • 安装缺失工具
    apt-get install libtool autoconf autogen
    
    不然会出现错误
    ./autogen.sh: 10: ./autogen.sh: autoreconf: not found
    
    以及
    configure.ac:163: error: possibly undefined macro: AC_PROG_LIBTOOL
    
  • 在交叉编译cmake后别忘了make install

编译Google flatbuffers补充

  • 若启用ArmnnConverterArmnnQuantizer,则需编译native(即在主机上使用本地编译工具编译)和arm两个版本,因为要用到flatc
    mkdir build_native
    cd build_native
    cmake .. -G "Unix Makefiles" -DCMAKE_BUILD_TYPE=Release
    make
    

编译tensorflow protobuf补充

  • 应该使用x86_64版本的protoc
    ../armnn/script/generate_tensorflow_protobuf.sh \ 
     ../tensorflow-2.0.0_protobuf ../prtobuf_x86_64_root
    

编译ARMNN补充

  • 启用NEONCL加速请添加
    -DARMCOMPUTENEON=1
    -DARMCOMPUTECL=1
    
    启用的话注意ARMNNComputeLibrary版本要一致,不然可能出现类似的错误:
    error: no matching function for call to ‘arm_compute::PoolingLayerInfo::PoolingLayerInfo(const arm_compute::PoolingType&, const arm_compute::DataLayout&)’
             return arm_compute::PoolingLayerInfo(poolingType, dataLayout);
    
  • 建议启用ArmnnConverterArmnnQuantizer
    -DARMNNREF=1
    -DBUILD_ARMNN_SERIALIZER=1 \
    -DBUILD_ARMNN_QUANTIZER=1 \
    -DFLATC=/home/liang/armnn/flatbuffers/flatc
    
  • 我用的为
    CC=aarch64-linux-gnu-gcc CXX=aarch64-linux-gnu-g++ \ 
    cmake .. \
    -DARMCOMPUTE_ROOT=/home/liang/armnn/ComputeLibrary \
    -DARMCOMPUTE_BUILD_DIR=/home/liang/armnn/ComputeLibrary/build/ \
    -DBOOST_ROOT=/home/liang/armnn/boost_root/ \
    -DTF_GENERATED_SOURCES=/home/liang/armnn/tensorflow-2.0.0_protobuf/ \
    -DBUILD_TF_PARSER=1 \
    -DBUILD_TF_LITE_PARSER=1 \
    -DBUILD_TESTS=1 \
    -DARMCOMPUTENEON=1 \
    -DARMCOMPUTECL=1 \
    -DTF_LITE_GENERATED_PATH=/home/liang/armnn/tensorflow/tensorflow/lite/schema/ \
    -DPROTOBUF_ROOT=/home/liang/armnn/protobuf_arm64_root/ \
    -DPROTOBUF_LIBRARY_DEBUG=/home/liang/armnn/protobuf_arm64_root/lib/libprotobuf.so \
    -DPROTOBUF_LIBRARY_RELEASE=/home/liang/armnn/protobuf_arm64_root/lib/libprotobuf.so \
    -DARMNNREF=1 \
    -DPROTOBUF_INCLUDE_DIRS=/home/liang/armnn/protobuf_arm64_root/include/ \
    -DFLATBUFFERS_ROOT=/home/liang/armnn/flatbuffers/ \
    -DFLATBUFFERS_LIBRARY=/home/liang/armnn/flatbuffers/libflatbuffers.a \
    -DBUILD_ARMNN_SERIALIZER=1 \
    -DBUILD_ARMNN_QUANTIZER=1 \
    -DFLATC=/home/liang/armnn/flatbuffers/build_native/flatc
    

运行实例

  • arm设备上编译运行官方的例子时,可能会出现libprotocbuf.so.15, needed by xxx, not found的错误
  • 需要将在arm设备上本地编译google protocbuf

暂无

你可能感兴趣的:(树莓派)