基于 NXP i.MX8 eIQ 环境搭建和编译

关键字 : i.MX8eIQ算法

一、前言

NXP 针对 Machine Learning ( ML ) 创建了 eIQ 工具,以方便开发者在 i.MX 系列设备上开发 ML 相关应用。

本篇将会分两个章节,一章节介绍 eIQ 软件,另外一章节将会对 eIQ 依赖的 Yocto 环境搭建和编译进行 Hands On 介绍。
(注:本篇不包含 Demo 范例演示,Demo 将会在下一篇博文展出)

二、NXP eIQ 软件介绍

eIQ 提供一系列的机器学习库和工具,应用于 I.MX 系列应用开发。eIQ 只支持网络模型的推测和标准的机器学习算法,即模型的训练需要离线完成。目前 eIQ 的 SDK 已经内含在 i.MX Linux OS 的 BSP 包中,eIQ 有包含如下 Yocto 代码包:

  • OpenCV 4.0.1
  • Arm Compute Library 19.02
  • Arm NN 19.02
  • ONNX runtime 0.3.0
  • Tensor Flow 1.12
  • Tensor Flow Lite 1.12

这里需要指出的是,目前 eIQ 暂还不支持 GPU 加速,如果需要 GPU 加速,独立于 eIQ ,自行用 OpenCL 进行开发。eIQ 的框架如下:
                                       eIQ 软件框架

三、eIQ 依赖的 Yocto 下载和编译

       eIQ 所依赖的 Yocto主要是 Linux L4.14.98_2.0.0 GA 版本。

1. Yocto L4.14.98_2.0.0源代码和文档入口地址:
    

https://www.nxp.com/design/i.mx-developer-resources/i.mx-software-and-development-tools:IMX-SW




   大家了解下代码和文档资料的来源,Yocto 的代码下载和编译可参考如上的官方文档,也可以参考下面的操作流程。

  1. 软硬件环境准备

 

2.1 硬件准备:

一台 Linux OS 以及预留 120 GB 、可联网的主机。

2.2 软件准备:

① Host Os : Ubuntu (本实验基于 Ubuntu 16.04 LTS)

② 按如下命令安装所依赖的包:

$ sudo apt-get install gawk wget git-core diffstat unzip texinfo gcc-multilib build-essential chrpath socat libsdl1.2-dev xterm sed cvs subversion  coreutils texi2html docbook-utils python-pysqlite2 help2man gcc  g++ make desktop-file-utils libgl1-mesa-dev libglu1-mesa-dev mercurial autoconf automake groff curl lzop asciidoc u-boot-tools

  1. eIQ 编译工具(Protobuf 3.5.1 )安装

  ① 下载 Protobuf 3.5.1 工具源码

      wget https://github.com/google/protobuf/archive/v3.5.1.tar.gz

 

  ② 安装 Protobuf 3.5

     解压后到 Protobuf 根目录逐步运行如下命令安装

baker@baker-VirtualBox:~$ cd protobuf-3.5.1/

baker@baker-VirtualBox:~/protobuf-3.5.1$./autogen.sh

baker@baker-VirtualBox:~/protobuf-3.5.1$./configure

baker@baker-VirtualBox:~/protobuf-3.5.1$ make -j8

 

安装结果 Log 如下:

        

  1. Repo 工具的获取

          ① 来源:https://mirrors.tuna.tsinghua.edu.cn/git/git-repo
          

         ② 给 repo 添加可执行权限
         

        ③ 修改 REPO_UR

         vim 打开 ./bashrc ,底部添加 REPO_URL
        
       

5.通过 Repo 下载 Yocto 源码

  ① 如下命令( 红色字体 )开始初始化 Yocto 仓库

baker@baker-VirtualBox:~/eIQ$ mkdir fsl-arm-yocto-bsp

baker@baker-VirtualBox:~/eIQ$ cd fsl-arm-yocto-bsp

baker@baker-VirtualBox:~/eIQ/ fsl-arm-yocto-bsp $ repo init -u https://source.codeaurora.org/external/imx/imx-manifest -b imx-linux-sumo -m imx-4.14.98-2.0.0_machinelearning.xml

    结果如下:
    


 ② 如下命令(红色字体)开始同步

baker@baker-VirtualBox:~/eIQ/fsl-arm-yocto-bsp$ repo sync

    同步结果如下:
    

    。。。。。。
   

   出现如上红色方框的内容,说明代码包已下载成功,接下来可以进行编译。

6.Yocto编译

① 按如下命令(红色字体)进行Yocto 编译变量设置,包含 i.MX8 开发板类型、目标 OS 类型、Machine Learing 属性

baker@baker-VirtualBox:~/eIQ/fsl-arm-yocto-bsp$ EULA=1 MACHINE=imx8qmmek DISTRO=fsl-imx-xwayland source ./fsl-setup-release.sh -b buildxwayland

baker@baker-VirtualBox:~/eIQ/fsl-arm-yocto-bsp/buildxwayland$ echo "BBLAYERS += \" \${BSPDIR}/sources/meta-imx-machinelearning \"" >> conf/bblayers.con
f


过程如下:


 

② 修改 conf/local.conf ,添加 OpenCV / OpenCL / CMake / TensorFlow 相关设定

#Add basic development capabilities:

EXTRA_IMAGE_FEATURES = " dev-pkgs debug-tweaks tools-debug tools-sdk ssh-server-openssh"#Add packages for networking capabilities:

IMAGE_INSTALL_append = " net-tools iputils dhcpcd"

#Add some generic tools:

IMAGE_INSTALL_append = " which gzip python python-pip"

IMAGE_INSTALL_append = " wget cmake gtest git zlib patchelf"

IMAGE_INSTALL_append = " nano grep vim tmux swig tar unzip"

IMAGE_INSTALL_append = " parted e2fsprogs e2fsprogs-resize2fs"

#Configure the OpenCV package:

IMAGE_INSTALL_append = " opencv python-opencv"

PACKAGECONFIG_remove_pn-opencv_mx8 = "python3"

PACKAGECONFIG_append_pn-opencv_mx8 = " dnn python2 qt5 jasper openmp test neon"

#Remove the OpenCL support from packages:

PACKAGECONFIG_remove_pn-opencv_mx8 = "opencl"

PACKAGECONFIG_remove_pn-arm-compute-library = "opencl"

#Add CMake for SDK’s cross-compile:

TOOLCHAIN_HOST_TASK_append = " nativesdk-cmake nativesdk-make"

#Add packages:

IMAGE_INSTALL_append = " arm-compute-library tensorflow tensorflow-lite armnn onnxruntime"

PREFERRED_VERSION_opencv = "4.0.1%"

PREFERRED_VERSION_tensorflow = "1.12.0%"

PREFERRED_VERSION_tensorflow-lite = "1.12.0%"

③ 开始 bitbake 编译 ,这一步将会产生最终的固件

baker@baker-VirtualBox:~/eIQ/fsl-arm-yocto-bsp/buildxwayland$ bitbake fsl-image-qt5

在 buildxwayland/tmp/deploy/images/imx8qmmek 目录下,可以看到已经成功生成固件 “fsl-image-qt5-imx8qmmek.sdcard.bz2



至此,eIQ 的环境搭建以及编译已完成。

下一篇将会带大家一起在 i.MX8QMMEK demo 板上运行 eIQ Demo , 敬请期待。

★博文内容均由个人提供,与平台无关,如有违法或侵权,请与网站管理员联系。

★文明上网,请理性发言。内容一周内被举报5次,发文人进小黑屋喔~

评论

HiI'm building an image and encountered an issue as follow...what should i do?ERROR: tensorflow-1.12.0-r0 do_configure: Function failed: do_configure (log file is located at /home/stu/fsl-arm-yocto-bsp/build-xwayland/tmp/work/aarch64-poky-linux/tensorflow/1.12.0-r0/temp/log.do_configure.84900)ERROR: Logfile of failure stored in: /home/stu/fsl-arm-yocto-bsp/build-xwayland/tmp/work/aarch64-poky-linux/tensorflow/1.12.0-r0/temp/log.do_configure.84900Log data follows:| DEBUG: Executing shell function do_configure| downloading https://bitbucket.org/eigen/eigen/get/fd6845384b86.tar.gz| | gzip: stdin: unexpected end of file| tar: Child returned status 1| tar: Error is not recoverable: exiting now| WARNING: exit code 2 from a shell command.| ERROR: Function failed: do_configure (log file is located at /home/stu/fsl-arm-yocto-bsp/build-xwayland/tmp/work/aarch64-poky-linux/tensorflow/1.12.0-r0/temp/log.do_configure.84900)ERROR: Task (/home/stu/fsl-arm-yocto-bsp/sources/meta-imx-machinelearning/recipes-libraries/tensorflow/tensorflow_1.12.0.bb:do_configure) failed with exit code '1'NOTE: Tasks Summary: Attempted 6041 tasks of which 0 didn't need to be rerun and 1 failed.Summary: 1 task failed: /home/stu/fsl-arm-yocto-bsp/sources/meta-imx-machinelearning/recipes-libraries/tensorflow/tensorflow_1.12.0.bb:do_configureSummary: There were 14 WARNING messages shown.Summary: There was 1 ERROR message shown, returning a non-zero exit code.
期待下一篇“在 i.MX8QMMEK demo 板上运行 eIQ Demo”

我来评论