一、LINUX环境下操作:

    1.安装交叉编译SDK (仅针对该型号:i.MX6,不同芯片需要对应的交叉编译SDK)

            编译方法参考:手动编译用于i.MX6系列的交叉编译SDK

     2.下载Tensorflow

       git clone https://github.com/tensorflow/tensorflow.git

       cd tensorflow

       git checkout r1.12    

      Tensorflow与Bazel编译器(及CUDA,CUDNN)之间需要对应,否则会有兼容性问题。

          tensorflowr1.10     python 2.7,3.6   Bazel:0.18.0-0.19.2

          tensorflowr1.12     python 2.7,3.6   Bazel:0.18.0-0.19.2

          tensorflowr1.14     python 2.7,3.6   Bazel:0.24.0 - 0.25.2

      3、下载并安装编译工具Bazel

          安装依赖包:

                sudo apt-get install pkg-config zip g++ zilb1g-dev unzip

          下载Bazel包:

                wget https://github.com/bazelbuild/bazel/releases/download/0.18.1/bazel-0.181-installer-linux-86_64.sh

          安装Bazel:

                 chmod +x bazel-0.18.1-installer-linux-86_64.sh

                 ./bazel-0.18.1-installer-linux-86_64.sh --user

          设置环境变量:

                 sudo vi ~/.bashrc,在文件最后添加:export PATH=$PATH":~/bin"

                 source ~/.bashrc

    (如果仅仅是测试DEMO在ARM板上使用,可直接跳过4,5,6,7,8步,直接进行第9步)

    4、编译配置:

          在Tensorflow源码根目录运行:

             ./configure     (编译LINUX平台时使用默认设置:-march=native,编译ARM平台时需设置成相应值:-march=armv7-a)

     5、编译pip:

          bazel build --config=opt //tensorflow/tools/pip_package:build_pip_package

     7、编译包:

          ./bazel-bin/tensorflow/tools/pip__package/build_pip_package /tmp/tensorflow_pkg

     8、安装包:

          pip install /tmp/tensorflow_pkg/tensorflow-version-tags.whl

     9、下载依赖库:

         ./tensorflow/contrib/lite/tools/make/download_dependencies.sh(不同版本,位置略有不同,本文路径为r1.12版本)

     10、编译Tensorflow Lite:

         目前仅支持树莓派: ./tensorflow/contrib/lite/tools/make/build_rpi_lib.sh,该脚本的目标编译平台是ARMv7,即使目标平台是ARMv8,也不要更改。因为设置编译平台为ARMv7可以优化编译,提高运行速度。

         生成静态库位置为:

         ./tensorflow/contrib/lite/toos/make/gen/rpi_arm7l/lib/libtensorflow-lite.a静态库。

     11、编译模型:

          默认情况下label_image并未编译进去,需要修改Makefile,可参考minimal APK,主要修改以下三部分内容:

            LABELIMAGE_SRCS

            LABELIMAGE_BINARY

            LABEL_OBJS

          再次执行: ./tensorflow/contrib/lite/tools/make/build_rpi_lib.sh

          编译完成后,在./tensorflow/contrib/lite/tools/make/gen/rpi_arm7l/bin  目录下生成可执行文件label_img

     12、在PC上测试label_image

          ./label_image -v 1 -m ./mobilenet_v1_1.0_224.tflite -i ./grace_hopper.jpg -l ./imagenet_slim_labels.txt

          报错信息: bash ./label_image: cannot execute binary file:Exec format error

          原因有两个:   

              一是GCC编译时多加了一个-C,生成了二进制文件;

                     解决方法:找到GCC编译处,去除-C选项。

              二就是编译环境不同(平台芯片不一致)导致

                     解决方法:需要在对应平台编译。

                            在tensorflow根目录执行:bazel build tensorflow/examples/label_image:label_image

                            如果是第一次编译,时间较久;

                            编译完成后,生成可执行文件:bazel_bin/tensorflow/examples/label_image/label_image

              本地测试该文件:

                      拷贝label_image和libtensorflow_framework.so到tensorflow/examples/label_image下

                      (第一次测试时,未拷贝libtensorflow_framework.so,直接提示:error while loading shared libraryies:libtensorflow_framework.so:cannot open shared object file:No such file or directory)

                      再次运行./tensorflow/examples/label_image/label_image

                       显示结果:military uniform(653):0.834306

                                         mortarboard(668):0.0218695

                                         academic gown(401):0.0103581

                                         pickelhaube(716):0.00800814

                                         bulletproof vest(466):0.00535084

                        测试OK!

              

 

以下操作在ARM板子上:

      1、拷贝生成的label_image到板子上 

            拷贝图片./tensorflow/examples/label_image/data/grace_hopper.jpg到板子上  

      2、下载模型mobilenet_v1_1.0_224.tflite

          (地址:http://download.tensorflow.org/models/mobilenet_v1_2018_02_22/mobilenet_v1_1.0_192.tgz,

             如果下载其它模型,可参考该文件:/tensorflow/contrib/lite/g3doc/models.md)

            然后拷贝到板子上  

      3、下载模型所需文件:

             curl -L "https://storage.googleapis.com/download.tensorflow.org/models/inception_v3_2016_08_28_frozen.pb.tar.gz" | tar -C tensorflow/examples/label_image/data -xz

             拷贝标签文件:./tensorflow/examples/label_image/data/imagenet_slim_labels.txt到板子上

 

      4、运行label_image

        确保如下所需文件都已完成:

      (拷贝文件1:label_image)

      (拷贝文件2:grace_hopper.jpg)

      (拷贝文件3:mobilenet_v1_1.0_224.tflite)

      (拷贝文件4:mobilenet_v1_1.0_224.tflite)

        执行脚本:

            ./label_image -v 1 -m ./mobilenet_v1_1.0_224.tflite -i ./grace_hopper.jpg -l ./imagenet_slim_labels.txt

           如果出现-sh: ./label_image: not found,可能是编译器不一致导致。

           尝试方法1:重定向:ln -s ld-linux.so.3 ld-linux-armhf.so.3  

               新报错:./label_image:/lib/libm.so.6: version 'GLIBC_2.27' not found (required by ./label_image)

     

        PC上所有工作已就续,ARM上待确认,待板子到位后功能确认好再更新。。。