美文网首页
IOT设备AI搭建2:树莓派部署TF Lite(图片分类实例)

IOT设备AI搭建2:树莓派部署TF Lite(图片分类实例)

作者: 古风子 | 来源:发表于2020-04-16 21:45 被阅读0次

    系列目录:

    IOT设备AI搭建1:Linux上构建Tensorflow Lite
    IOT设备AI搭建2:树莓派部署TF Lite(图片分类实例)
    IOT设备AI搭建3:TF Lite构建过程解析
    IOT设备AI搭建4:MakeFile基础语法

    上一边文章,我们构建了最简单的minimal的例子,本章节,我们编译下label_image的例子,并将其部署到树莓派上

    为了编译label_image的例子,我们修改了buid和Makefile文件,是的可以指定编译任何的实例;
    修改后的文件为
    build文件内容

    MakeFile文件内容

    编译

    build_rpi.sh文件为

    set -x
    set -e
    
    SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
    TENSORFLOW_DIR="${SCRIPT_DIR}/../../../.."
    
    FREE_MEM="$(free -m | awk '/^Mem/ {print $2}')"
    # Use "-j 4" only memory is larger than 2GB
    if [[ "FREE_MEM" -gt "2000" ]]; then
      NO_JOB=4
    else
      NO_JOB=1
    fi
    
    if [[ ! -z "${TARGET_ARCH}" ]]; then
      make -j ${NO_JOB} TARGET=rpi -C "${TENSORFLOW_DIR}" -f tensorflow/lite/tools/make/Makefile TARGET_ARCH=${TARGET_ARCH}
    else
      make -j ${NO_JOB} TARGET=arm -C "${TENSORFLOW_DIR}" -f tensorflow/lite/tools/make/Makefile TARGET_ARCH=armv7l
    fi
    
    

    rpi对应的编译配置文件为:

    tensorflow/lite/tools/make/targets/rpi_makefile.inc
    

    在Makefile中你需要修改指向的程序路径,为了更通用,我将MININAL_SRC的名称改成了TARGET_PROGRAM_SRCS

    TARGET_PROGRAM_SRCS := \
    tensorflow/lite/examples/label_image/label_image.cc \
    tensorflow/lite/examples/label_image/bitmap_helpers.cc
    

    编译成功后,会在响应目录生成可执行文件

    ensorflow/lite/tools/make/gen/arm_armv7l/bin$ ls
    benchmark_model  benchmark_model_performance_options  tf_common
    
    
    

    应用图像分类

    将tf_common 拷贝到树莓派系统中;下载模型和标签文件;并获取TF源码中的示例图片tensorflow/lite/examples/label_image/testdata/grace_hopper.bmp

    运行命令:

    tensorflow/lite/tools/make/gen/linux_x86_64/bin$ ./tf_common  -v 1 -m ./mobilenet_v1_1.0_224_quant.tflite -i ./grace_hopper.bmp -l ./labels_mobilenet_quant_v1_224.txt 
    
    

    图片加测结果:

    average time: 407.108 ms 
    0.780392: 653 military uniform #%78概率是军装
    0.105882: 907 Windsor tie %10的概率是绳子
    0.0156863: 458 bow tie #领带
    0.0117647: 466 bulletproof vest #防弹衣
    0.00784314: 835 suit #西装
    

    报错分析

    禁用gpu加速,因为我的电脑不支持

    label_image.cc:(.text+0x39): undefined reference to `tflite::evaluation::CreateGPUDelegate()'
    /home/jiadongfeng/tensorflow/tensorflow-r2.2/tensorflow/lite/tools/make/gen/linux_x86_64/obj/tensorflow/lite/examples/label_image/label_image.o: In function `tflite::label_image::GetDelegates[abi:cxx11](tflite::label_image::Settings*)':
    label_image.cc:(.text+0xa2c): undefined reference to `tflite::evaluation::CreateHexagonDelegate(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, bool)'
    label_image.cc:(.text+0xb06): undefined reference to `tflite::evaluation::CreateNNAPIDelegate()'
    

    修改方法:
    因为我的电脑不支持GPU加速,Intel的。将相关加速代码去除即可

    交叉编译版本问题造成的差异

    error:version `GLIBC_2.27' not found

    因为我的电脑的交叉编译版本比较高,对应的GLIBC的版本是GLIBC_2.27;而树莓派上交叉编译工具只有GLIBC_2.24

    pi@raspberrypi:/lib $ strings arm-linux-gnueabihf/libc.so.6 |grep GLIBC
    GLIBC_2.4
    GLIBC_2.5
    GLIBC_2.6
    GLIBC_2.7
    GLIBC_2.8
    GLIBC_2.9
    GLIBC_2.10
    GLIBC_2.11
    GLIBC_2.12
    GLIBC_2.13
    GLIBC_2.14
    GLIBC_2.15
    GLIBC_2.16
    GLIBC_2.17
    GLIBC_2.18
    GLIBC_2.22
    GLIBC_2.23
    GLIBC_2.24
    GLIBC_PRIVATE
    GNU C Library (Debian GLIBC 2.24-11+deb9u3) stable release version 2.24, by Roland McGrath et al.
    

    需要将编译的电脑的交叉编译工具换成树莓派的,更换方式:

    
    #指向你的交叉编译工具的位置
    TOOLCHAIN=/lib/arm-bcm2708/arm-rpi-4.9.3-linux-gnueabihf/bin/
    echo "TOOLCHAIN="${TOOLCHAIN}
    if [ ! -d ${TOOLCHAIN} ];then
        echo "[ERROR]TOOLCHAIN="${TOOLCHAIN}" not exist!";
       return;
    fi
    #将交叉工具目录添加到path中
    export PATH=${TOOLCHAIN}:$PATH
    echo "PATH="$PATH;
    
    

    更换编译方式后,重新编译tflite,再重新拷贝到树莓派上;成功

    相关文章

      网友评论

          本文标题:IOT设备AI搭建2:树莓派部署TF Lite(图片分类实例)

          本文链接:https://www.haomeiwen.com/subject/psdjvhtx.html