一、前言
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 依赖的 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 的代码下载和编译可参考如上的官方文档,也可以参考下面的操作流程。
2.软硬件环境准备
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
3.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 如下:
4.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 , 敬请期待。
点击 点“在看”给小编加鸡腿