基于FPGA轻松玩转AI

启动人工智能应用从来没有像现在这样容易!受益于像Xilinx Zynq UltraScale+ MPSoC 这样的FPGA,AI现在也可以离线使用或在边缘部署、使用.可用于开发和部署用于实时推理的机器学习应用,因此将AI集成到应用中变得轻而易举。图像检测或分类、模式或语音识别推动了制造业、医疗、汽车和金融服务等产业的升级。

--

快速开启基于AIFPGA应用

人工智能正在占据越来越多的应用和生活场景,例如图像检测和分类,翻译和推荐系统等等。基于机器学习技术的应用数量庞大且还在不断增长。采用瑞苏盈科结合FPGA和ARM处理器的核心板模块,在离线和边缘使用AI前所未有的容易。

人工智能(AI)历史悠久,自1955年便被公认为一门学科。人工智能是计算机模仿人类智能、从经验中学习、适应新信息并执行类似人类活动的能力。人工智能的应用包括专家系统、自然语言处理(NLP)、语音识别和机器视觉。

AI的复兴

在经历了几波乐观和失望之后,人们对人工智能产生了新的兴趣,而且越来越感兴趣。在过去15年左右的时间里,成千上万的人工智能初创公司成立了,而且速度在不断增长。这背后有几个驱动因素:可能最重要的一个是现在可以以承担得起的价格获得巨大的计算能力。不仅硬件更快,而且现在每个人都可以访问云中的超级计算机。这使得运行人工智能所需的硬件平台变得大众化,使得初创企业得以大量涌现。

undefined

图1:一种具有2个隐含层的前馈人工神经网络的简化视图

人工神经网络(图1)现在扩展到几十到几百个隐藏层节点(图2)。即使是有10000个隐藏层的网络也已经实现了。这种进化正在增加神经网络的抽象能力,并使新的应用成为可能。如今,神经网络可以在数万个CPU或GPU核上进行训练,大大加快了开发广义学习模型的过程。

undefined

图2: ImageNet识别挑战获胜者展示了在新的神经网络架构中不断增加的隐藏层

人们对人工智能兴趣增加的另一个原因是近年来机器学习方面的突破性进展。这有助于吸引科技投资和初创企业的兴趣,进一步加速人工智能的发展和完善。

机器如何学习

人工神经网络是一种受人脑启发的计算模型。它由一个简单的处理单元相互连接的网络组成,这些网络可以通过修改它们的连接来学习经验(图1)。所谓的深度神经网络(DNN -具有许多隐藏层的神经网络)目前为许多大型计算问题提供了最佳解决方案。

目前应用最广泛的深度学习系统是卷积神经网络(Convolutional Neural Network, CNNs)。这些系统使用前馈的人工神经元网络将输入特征映射到输出,他们使用反向馈入系统进行学习(即训练),并产生一组权重来校准CNN(反向传播,图3)。

undefined

图3:神经网络需要经过训练来学习如何解决问题或挑战

机器学习中计算强度最大的过程是训练神经网络。对于一个最先进的网络来说,它可能需要数天到数周的时间,需要数十亿的浮点计算和大量的训练数据(GByte到数百GByte),直到网络达到所需的精度。幸运的是,这个步骤在大多数情况下都不需要时间限制,并且可以转移到云上。

当网络接受训练时,它可以被输入一个新的、未标记的数据集,并根据它之前学习的数据对数据进行分类。这一步称为推断,是开发应用的实际目标。

告诉我你看到了什么

输入的分类可以在云中进行,也可以在边缘(大部分是离线)进行。虽然通过神经网络处理数据通常需要专用加速器(FPGA、GPU、DSP或ASIC),但额外的任务最好由CPU处理,CPU可以用传统的编程语言编程。这就是带有集成CPU(所谓的片上系统(SoC))的FPGA的优势所在,尤其是在边缘。SoC将推理加速器(FPGA阵列)和CPU组合在一块芯片中。CPU运行控制算法和数据流管理。同时,与基于GPU或ASIC的解决方案相比,FPGA提供了许多优势,其中包括易于集成多个接口和传感器,以及适应新神经网络架构的灵活性(图4)。

undefined

图4:人工智能推理应用的不同技术的比较

FPGA固有的可重构性也使其能够利用不断演化的神经网络拓扑、更新的传感器类型和配置,以及更新的软件算法。使用SoC可以在需要时保证低而确定的延迟,例如,用于实时对象检测。同时,SoC也非常节能。从FPGA中获得最佳性能的主要挑战是在不失去精度的情况下将浮点模型有效地映射到定点FPGA实现(图5),这就是供应商工具的作用所在。

undefined

-

图5:将浮点模型有效映射到定点FPGA实现的过程称为压缩

选择合适的工具

现在有很多工具可以帮助我们降低实现第一个AI项目的门槛。例如,Vitis AI开发工具为用户提供了在FPGA上开发和部署用于实时推理的机器学习应用程序的工具。它们支持许多常见的机器学习框架,如Caffe和TensorFlow,PyTorch支持也将很快推出。它们使最先进的神经网络能够有效适应FPGA,用于嵌入式人工智能应用(图5)。

undefined

6核心板模块

结合标准的核心板模块(SoM),人工智能应用可以比以往更快地实现(图7)。

undefined

7:已被业界证实的人工智能应用解决方案,基于Xilinx Zynq UltraScale+ MPSoC

为了展示这种组合的性能和快速上市能力,信迈科技在短短几天内开发了一个基于人工智能的图像识别系统。这些图像是用一个连接到火星ST3底板的标准USB摄像头拍摄的。如需更高的性能,可使用底板上的MIPI接口。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/827906.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python写个二维码

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、进入官网下载二、下载一下三.输入代码 前言 提示:以下是本篇文章正文内容,下面案例可供参考 一、进入官网下载 官网 pip insta…

vue3推荐算法

Vue 3 推荐算法主要指的是在 Vue 3 框架中实现的或者适用于 Vue 3 的算法库或组件库。Vue 3 由于其优秀的设计和性能,被广泛应用于构建各种类型的应用程序,包括需要复杂算法支持的项目。以下是一些在 Vue 3 中可能会用到的推荐算法资源: Vue-…

田忌赛马【洛谷P1650】

P1650 田忌赛马 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) #include<iostream> #include <algorithm> #include<cstdio> #include <map> using namespace std; const int N1e5100; int n; map<int,int>a,b;//映射&#xff0c;速度->数量…

新网站上线需要注意什么?

质量保证&#xff1a;确保网站的所有功能和页面都经过了充分的测试&#xff0c;并且在各种不同的浏览器和设备上都能够正常运行。检查所有链接、表单和交互式元素&#xff0c;确保它们都能够按照预期工作。优化性能&#xff1a;确保网站加载速度快&#xff0c;响应迅速。优化图…

Python-VBA函数之旅-isinstance函数

目录 一、isinstance函数的常见应用场景&#xff1a; 二、isinstance函数使用注意事项&#xff1a; 三、如何用好isinstance函数&#xff1f; 1、isinstance函数&#xff1a; 1-1、Python&#xff1a; 1-2、VBA&#xff1a; 2、推荐阅读&#xff1a; 个人主页&#xff…

基于spring boot学生综合测评系统

基于spring boot学生综合测评系统设计与实现 开发语言&#xff1a;Java 框架&#xff1a;springboot JDK版本&#xff1a;JDK1.8 服务器&#xff1a;tomcat7 数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09; 数据库工具&#xff1a;Navicat11 开发软件…

typedef 定义函数指针

typdef int(*FUNC_TYPE)(int,int) FUNC_TYPE p NULL; 定义了一个函数指针 函数指针作为函数的参数的用法demon

黄金行情下跌有投资机会吗?

尽管黄金价格的波动常常引起投资者的高度关注&#xff0c;但行情的下跌未必只是警讯&#xff0c;亦可能蕴藏着某些难得的投资机会。总之&#xff0c;答案是肯定的——在黄金行情下跌时&#xff0c;依旧有适宜的投资机会&#xff0c;只是这需要投资者具备相应的应对知识和策略。…

美森快船和以星快船有什么区别?美线海运都有哪些快船?

在繁忙的国际海运市场中&#xff0c;快船服务以其高效、快捷的特点受到广大货主的青睐。其中&#xff0c;美森快船和以星快船作为知名的海运服务提供商&#xff0c;凭借着卓越的服务品质&#xff0c;在航运界树立了良好的口碑。那么&#xff0c;美森快船和以星快船究竟有何不同…

利用ollama和open-webui本地部署通义千问Qwen1.5-7B-Chat模型

目录 1 安装ollama 2 安装open-webui 2.1 镜像下载 3 配置ollama的模型转换工具环境 3.1 下载ollama源码 3.2 下载ollama子模块 3.3 创建ollama虚拟环境 3.4 安装依赖 3.5 编译量化工具 7 创建ollama模型 8 运行模型 参考文献&#xff1a; 1 安装ollama curl -fsSL …

2-2 任务:闰年判断

本次课&#xff0c;我们讨论了闰年的判断方法、关系运算符与关系表达式、逻辑运算符与逻辑表达式&#xff0c;以及流程控制结构中的选择结构。 闰年判断 闰年是为了使日历年与地球绕太阳公转的时间保持一致而设定的&#xff0c;具有366天。闰年的判断规则如下&#xff1a; 普…

16V/2A高集成功率MOS同步降压转换器SOT23-6封装

概述&#xff1a; PCD8020 是一款内部集成两个功率 MOS 的高效率 2A 同步整流降压转换器。 该器件提供PWM 与 PFM 两种控制模式&#xff0c; 能够在很宽的负载范围内实现高效率。PCD8020 采用小巧的 SOT23-6 封装&#xff0c; 外围器件少&#xff0c; 从而实现小尺寸的系统电源…

【算法】约瑟夫环

文章目录 题目一1.数组模拟1.1出圈顺序递归求出圈顺序 1.2最后出圈人 2.环形链表【DEMO】3.递推求最后出圈人3.13.2 题目二1.数组模拟2.递推求最后出圈人2.12.2 题目一 1-n编号 s开始1-m报数 报到m出圈 求出圈顺序or最后人 1.数组模拟 1.1出圈顺序 递归求出圈顺序 // AC输入…

python 如何判断两个字典是否相等

Python 字典的 cmp() 函数用于比较两个字典元素。 语法 cmp()方法语法&#xff1a; cmp(dict1, dict2)参数 dict1 -- 比较的字典。 dict2 -- 比较的字典。 返回值 如果两个字典的元素相同返回0&#xff0c;如果字典dict1大于字典dict2返回1&#xff0c;如果字典dict1小于…

为AI电脑生态注入强悍动力,安耐美PlatiGemini 1200W高性能电源

在DIY攒机的过程中&#xff0c;电源是非常重要的一环&#xff0c;现在高性能的硬件功耗往往很高&#xff0c;因此一款优秀的电源整个系统稳定运行的基石。最近&#xff0c;我发现一款由安耐美&#xff08;Enermax&#xff09;推出的PlatiGemini 1200W电源&#xff0c;它不仅满足…

ShardingSphere-JDBC快速入门

ShardingSphere-JDBC读写分离快速入门 一、ShardingSphere-JDBC 读写分离1.创建springboot程序1.1 添加依赖1.2 java代码1.3 配置 2.测试 二、ShardingSphere-JDBC垂直分片1.创建springboot程序1.1 导入依赖1.2 java代码1.3 配置 2.测试 三、ShardingSphere-JDBC水平分片1.创建…

flutter笔记-万物皆是widget

文章目录 helloFlluter自定义Widget优化 这篇文章后就不见写了&#xff0c;学flutter主要是为了更好的使用 flutter-webrtc&#xff0c;所以到这里基本就了解了大部分的知识&#xff0c;后续边用边查&#xff1b; 在flutter中所有的view都叫widget&#xff0c;类似文本组件Tex…

对象与JSON字符串互转

1、JSON字符串转化成JSON对象 JSONObject jsonobject JSON.parseObject(str); 或者 JSONObject jsonobject JSONObject.parseObject(str); 功能上是一样的&#xff0c;都是将JSON字符串&#xff08;str&#xff09;转换成JSON对象 jsonobject 。注意str一定得是以键值对存在…

C语言进阶 数据的存储(上)

一、 数据类型详细介绍 我们前面已经学习了基本的内置类型 char 字符数据类型 short 短整型 int 整型 long 长整型 long long 更长的整型 float 单精度浮点型 double 双精度浮点形 类型有什么意义呢&#xff1f; 1 使用这个类型开辟内存空间的大小 比如说 int 4个字节 short 两…

Python | Leetcode Python题解之第41题缺失的第一个正数

题目&#xff1a; 题解&#xff1a; class Solution:def firstMissingPositive(self, nums: List[int]) -> int:n len(nums)for i in range(n):while 1 < nums[i] < n and nums[nums[i] - 1] ! nums[i]:nums[nums[i] - 1], nums[i] nums[i], nums[nums[i] - 1]for …