0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

10行代码轻松在ZYNQ MP上实现图像识别

新疆切糕 来源:新疆切糕 作者:张超 2022-08-02 08:03 次阅读

如今各种机器学习框架的普及使得个人搭建和训练一个机器学习模型越来越容易。然而现实中大量的机器学习模型训练完后需要在边缘端部署,那么我们看看借助Xilinx Vitis-AI工具,如何仅仅使用10行代码,就能在ZYNQ MP器件上部署深度学习模型实现图像分类。

简介

Xilinx Vitis-AI 是用于 Xilinx 硬件平台上的 AI 推理的开发堆栈。它由优化的 IP、工具、库、模型和示例设计组成。

简单来说,它主要包含:

  • AI推理加速器IP,即DPU;
  • 支持将AI模型优化 (Optimizer)、量化 (Quantizer)、最后编译 (Compiler) 成DPU运行指令集的整套工具;
  • 支撑模型运行的运行时库(Vitis-AI runtime, Vitis-AI library);

poYBAGGYHQ6AfVkaAADzLurG3IQ789.png

更多具体介绍请 访问如下链接至官方文档:

https://github.com/Xilinx/Vitis-AI

https://www.xilinx.com/support/documentation/sw_manuals/vitis_ai/1_4/ug1...

本案例中,我们将使用 Xilinx Kria KV260开发板(包含ZynqMP器件)为目标运行设备。

本文使用的Vitis-AI 版本为1.4, 使用的platform基于Vitis/Vivado 2020.2。为了方便快速部署,我们直接使用官方发布的Linux系统启动镜像, 并且使用Vitis-AI library为编程接口

准备工作

开始工作前我们需要先搭建好运行环境,包括设置host端(X86机器)的交叉编译环境,以及 target端(KV260)的启动镜像烧写。

本文的主要目的是阐述 Vitis-AI Library 的使用,故运行环境的搭建不做过多介绍,可以完全参考以下链接中的步骤

“Step1: Setup cross-compiler”

“Step2: Setup the Target”

https://github.com/Xilinx/Vitis-AI/tree/master/setup/mpsoc/VART

注意因为KV260 的Vitis-AI 1.4 platform基于Vitis/Vivado 2020.2, 配置交叉编译环境使用的脚本为host_cross_compiler_setup_2020.2.sh

因为我们使用官方启动镜像,Step2中标注为“Optional”的步骤我们都可以省略。

当KV260成功启动,我们会在console中看到如下提示符:

root@xilinx-k26-starterkit-2020_2:~#

程序编译
可通过如下方式获得本案例中的代码,

git clone https://github.com/lobster1989/Image-classification-on-edge-with-10-lines-of-code.git

主要用到的文件为classification.cpp和Makefile。另外几个Jpeg文件可用于后续测试输入。

安装准备工作章节中配置好交叉编译环境后,切换到源码目录中直接运行make。make完成后文件夹中会生成执行文件“classification”。

运行演示
KV260 连接好串口,从SD卡启动运行(记得提前把执行文件和测试图片拷贝到SD下),

切换到执行文件和测试图片目录下,运行 ./classification.JPEG

分类结果如下:

poYBAGGYHRCAVdH9AAExDWpbehY532.png

代码分析

Vitis-AI包含了两组编程接口:VART (Vitis-AI Runtime) 比较底层,提供更大的自由度;Vitis-AI library属于高层次API,构建于 VART 之上,通过封装许多高效、高质量的神经网络,提供更易于使用的统一接口。

Vitis-AI Library的组成如下图,包含 base libraries, model libraries, library test samples, application demos几个部分:

  • base libraries提供底层接口;
  • model libraries是重要的部分,提供了主流模型(classification, detection, segmentation…) 的调用方法;
  • library test samples和application demos主要提供library的使用示例;

pYYBAGGYHROAO5XnAAKpWrNl7IU308.png

更多Vitis-AI library的细节可参考官方文档,

https://www.xilinx.com/support/documentation/sw_manuals/vitis_ai/1_4/ug1...

再来看本例子,如何用简单到10行代码实现图片分类:

int main(int argc, char* argv[]) {

    std::string image_name = argv[1];

    auto image = cv::imread(image_name);

    auto network = vitis::ai::Classification::create("resnet50");

    auto result = network->run(image);

    cout << "Classification result:" << endl;

    for (const auto &r : result.scores){

cout << result.lookup(r.index) << ": " << r.score << endl;

    }

}

源文件中除去include部分,只有10行代码,代码中最重要的有两句,第一句调用create方法创建了Classification类的一个实例,第二句调用run方法来运行神经网络获得推理结果。

auto network = vitis::ai::Classification::create("resnet50");

    auto result = network->run(image);

vitis::ai::Classification 是 model libraries 中的一个基础类,其作用是进行图片分类,这个类中包含如下方法:

poYBAGGYHRSAHtDaAACn7NHWsS4382.png

其中create方法接受一个模型名称作为参数,返回一个Classification类的实例。在安装了Vitis-AI Library的开发板上,已经训练编译好的模型文件放在开发板的/usr/share/vitis_ai_library/models/目录下,Vitis-AI Library会通过传递给create方法的模型名称来调用这些模型文件,比如我们用到的resnet50模型文件位置如下,

pYYBAGGYHRWAcfhGAACWtvmqNio802.png

如果用户训练并编译好了自己的模型,也可以把自己的模型文件放到对应位置来使用。

run方法接受一个/一组图片作为输入,输出这个/这些图片的分类结果。其工作简单来说就是把模型文件和图片数据传送给DPU, DPU运行并输出推理结果,CPU再读回结果。

再看下添加了注释的代码片段,整个过程实际上非常简单明了。

int main(int argc, char* argv[]) {

    std::string image_name = argv[1];

    auto image = cv::imread(image_name);                                    // 读入图片

    auto network = vitis::ai::Classification::create("resnet50");   // 用resnet50模型创建Classification类实例

    auto result = network->run(image);                                           //运行模型

    cout << "Classification result:" << endl;

    for (const auto &r : result.scores){

cout << result.lookup(r.index) << ": " << r.score << endl; //输出模型运行结果

    }

}

除了Classification基础类, Vitis-AI Library包含了非常多的常用机器学习任务(classification, detection, segmentation…)的基础类。这些类的使用方法基本一致,

  • 首先通过create方法创建基础类的实例,
  • 通过getInputWidth()/getInputHeight()来获取模型需要的图片尺寸,
  • resize图片,
  • 运行run方法来运行网络获得输出。

总结

通过这个例子,我们看到通过Vitis-AI工具,可以大大缩减模型到部署之间的距离。Vitis-AI包含了常用模型的Model-Zoo, 提供简单易用的编程接口,甚至可以让不熟悉机器学习或者FPGA的软件开发者都可以在极短的时间内在FPGA/SoC器件上部署神经网络应用。

审核编辑:郭婷

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • AI
    AI
    +关注

    关注

    87

    文章

    29892

    浏览量

    268185
  • 代码
    +关注

    关注

    30

    文章

    4730

    浏览量

    68265
  • 机器学习
    +关注

    关注

    66

    文章

    8357

    浏览量

    132336
收藏 人收藏

    评论

    相关推荐

    如何用10代码轻松ZYNQ MP实现图像识别

    Vitis-AI工具,如何仅仅使用10代码,就能在ZYNQ MP器件上部署深度学习模型实现
    的头像 发表于 10-09 10:47 4617次阅读
    如何用<b class='flag-5'>10</b><b class='flag-5'>行</b><b class='flag-5'>代码</b><b class='flag-5'>轻松</b><b class='flag-5'>在</b><b class='flag-5'>ZYNQ</b> <b class='flag-5'>MP</b><b class='flag-5'>上</b><b class='flag-5'>实现</b><b class='flag-5'>图像识别</b>

    基于DSP的快速纸币图像识别技术研究

    本课题通过对现有图像识别技术进行研究和分析,针对当前DSP(数字信号处理)技术的新发展,提出了基于DSP的快速图像识别概念。快速图像识别技术以嵌入式系统为算法的实现平台,它结合了当前最
    发表于 11-05 14:43

    【瑞芯微RK1808计算棒试用申请】图像识别以及芯片评测

    棒完成计算后把数据送回PC4,拥有PC开发界面经验,有使用python开发PyQt5界面经验,能工完成PC端数据处理,图像传送和接收预计成果:1,PyQT界面,实现图像传送和接收功能2,计算棒端数据处理
    发表于 09-18 19:21

    图像识别模组(包括PCB图、图像识别模组源代码)

    图像识别模组电路原理图、图像识别模组PCB图、图像识别模组源代码图像识别模组用户使用手册
    发表于 01-02 19:14 121次下载

    简单介绍图像识别技术各类行业的应用

    其实对于图像识别技术,大家已经不陌生,人脸识别、虹膜识别、指纹识别等都属于这个范畴,但是图像识别远不只如此,它涵盖了生物
    的头像 发表于 01-23 11:26 3.5w次阅读

    图像识别技术农业领域的应用

    随着计算机技术的进步,以图像识别为代表的人工智能技术得以迅速发展并被广泛用于航空、医学等多个领域。今天,图像识别技术也已成为发展现代农业不可缺少的组成部分,成为实现农业信息化与自动化的重要技术力量。
    发表于 03-19 15:02 5152次阅读

    如何在APT-Pi实现图像识别功能

    不用自己训练模型,也能进行 AI 图像识别;借助百度云平台,我们可以 APT-Pi 实现图像识别功能。 创建
    的头像 发表于 10-09 15:46 9964次阅读
    如何在APT-Pi<b class='flag-5'>上</b><b class='flag-5'>实现</b><b class='flag-5'>图像识别</b>功能

    10代码轻松ZYNQ MP实现图像识别的步骤

    Xilinx Vitis-AI 是用于 Xilinx 硬件平台上的 AI 推理的开发堆栈。它由优化的 IP、工具、库、模型和示例设计组成。
    的头像 发表于 07-04 09:20 1364次阅读
    <b class='flag-5'>10</b><b class='flag-5'>行</b><b class='flag-5'>代码</b><b class='flag-5'>轻松</b><b class='flag-5'>在</b><b class='flag-5'>ZYNQ</b> <b class='flag-5'>MP</b><b class='flag-5'>上</b><b class='flag-5'>实现</b><b class='flag-5'>图像识别</b>的步骤

    Imagga利用DGX Station实现快速图像识别

    Imagga利用DGX Station实现快速图像识别
    的头像 发表于 08-01 15:10 612次阅读

    模拟矩阵图像识别中的应用

    讯维模拟矩阵图像识别中的应用主要是通过构建一个包含多种图像数据的模拟矩阵,来训练和测试深度学习模型,从而提高图像识别的准确性和效率。
    的头像 发表于 09-04 14:17 542次阅读
    模拟矩阵<b class='flag-5'>在</b><b class='flag-5'>图像识别</b>中的应用

    如何使用Python进行图像识别的自动学习自动训练?

    如何使用Python进行图像识别的自动学习自动训练? 使用Python进行图像识别的自动学习和自动训练需要掌握一些重要的概念和技术。本文中,我们将介绍如何使用Python中的一些常用库和算法来
    的头像 发表于 01-12 16:06 525次阅读

    图像识别技术原理 图像识别技术的应用领域

    图像识别技术已经各个领域广泛应用,其应用领域包括但不限于以下几个方面。 一、智能安防领域 图像识别技术智能安防领域得到了广泛的应用。通过对监控摄像头中的
    的头像 发表于 02-02 11:01 2214次阅读

    如何利用CNN实现图像识别

    卷积神经网络(CNN)是深度学习领域中一种特别适用于图像识别任务的神经网络结构。它通过模拟人类视觉系统的处理方式,利用卷积、池化等操作,自动提取图像中的特征,进而实现高效的图像识别。本
    的头像 发表于 07-03 16:16 1039次阅读

    图像识别技术医疗领域的应用

    一、引言 图像识别技术是一种利用计算机视觉技术对图像进行分析和处理的技术。随着计算机技术、人工智能技术、大数据技术等的发展,图像识别技术各个领域的应用越来越广泛。
    的头像 发表于 07-16 10:48 700次阅读

    AI图像识别摄像机

    ?AI图像识别摄像机是一种集成了先进算法和深度学习模型的智能监控设备。这些摄像机不仅能够捕捉视频画面,还能实时分析和处理所拍摄的内容,从而实现对特定对象、场景或
    的头像 发表于 11-08 10:38 80次阅读
    AI<b class='flag-5'>图像识别</b>摄像机