嵌入式Linux开发流程
在学习嵌入式开发的过程中,尤其是开始入门时,包括各种各样的教程,都是在讲学习linux,很少讲如何利用linux来开发属于自己的嵌入式项目,也就是没有一个全局的概念,简单理解,大概流程如下:
一、建立开发环境
操作系统当然是LInux,或者在win系统下安装虚拟机,通过网络下载相应的GCC交叉编译器进行安装,或者安装产品厂家提供的交叉编译器。
这一步,就相当于在win系统下,要安装一个IDE开发环境,如MDK,IAR等。
二、配置开发主机
主要是配置minicom,也就是串口助手,minicom软件是作为调试嵌入式开发板信息输出的监视器和键盘输入工具,是一个非常方便的工具,我们开发其他嵌入式程序时,其实很多时候也采用串口调试,所以最终原理都是相通的。
配置网络,主要是配置NFS网络文件系统,这个主要是用于下载程序,当然不配置也可以,有很多别的办法。
三、建立引导装在程序的bootloader
常用的bootloader主要有u-boot、vivi等,貌似主流的就是u-boot,这个根据自己具体的芯片进行移植修改。有些芯片是没有内置引导加载程序的,这就需要编写开发板上的Flash的少些程序,当然也可以用windows下的通过JTAG并口和仿真器少些Flash芯片程序,也有linux下的公开源代码的J-Flash程序,所以在设计自己的硬件时,可以预留多种方式。
简单的讲,其实就是要做好一个属于自己板子的u-boot,完成初始化,内核引导,下载、烧写等。
四、移植嵌入式Linux操作系统
如果有专门针对你使用的CPU的Linux再好不过,比如uCLinux、ARM-Linux、PPC-Linux等,如果没有,就要尝试移植专属自己的linux了,然后再添加自己特定硬件的驱动程序,进行调试修改,对于带MMU的CPU可以使用模块方式调试驱动,而对于uCLinux这样的系统则需要编译进内核,与内核为一体,再进行调试。
五、建立根文件系统
前面的文章讲述过,没有根文件系统的Linux是无法正常工作的,还需要根文件系统。所以需要下载使用busybox软件来实现制作根文件系统。
再根据自己的应用需要来添加其他程序,默认的启动脚本一般都不会符合应用的需求(因为所有的嵌入式开发都是自由定制的),所以就要修改根文件系统中的启动脚本,它的存放位置至于/etc目录下,包括:/etc/init.d/rc.S、/etc/profile、/etc/.profile等,自动挂载文件系统的配置文件/etc/fstab,其实就是定制自己要开机启动的程序,具体情况会随着系统的不同而不同,根文件系统在嵌入式系统中一般设为只读,需要使用mkcramfs、genromfs等工具产生少些映像文件。
六、建立应用程序的Flash磁盘分区
一般会使用jffs2或者YAFF文件系统,这需要在内核中提供这些文件系统的驱动,有的系统使用NORFLASH,有的系统使用NANDFLASH,也有的系统两种flash都使用,那么jffs2的作用是什么呢?
百科里的介绍是:jffs2全名为journallingflashfilesystemversion2(闪存日志型文件系统第二版),其功能就是管理MTD设备上实现的日志型文件系统,日志系统也是一个完整系统所必须的,不管是windows还是linux,有了这些才不算耍流氓,嘿嘿。jffs2并不准备提供提供类似与传统文件系统的功能,它只会直接在MTD设备上实现日志结构的文件系统,除了提供具有断电可靠性的日志结构文件系统,jffs2还会在它管理的MTD设备上实现"损耗平衡"和“数据压缩”等特性。
MTD(memorytechnologydevice内存技术设备),就是各种flash。
七、开发应用程序
应用程序可以放到根文件系统中,也可以放到yaffs、jffs2文件系统中,有的应用不使用根文件系统,直接将应用程序和内核设计在一起,就是类似于uCOS-II的方式。
其实,写到这,这一步才是最终的目的,前面的步骤都是为了这一步,我自己的理解,开发应用程序呈现的方式应该是有三种的:
(1)直接讲应用程序和内核设计在一起,类似与uCOS-II的方式,这种方式就是属于私人订制了,实现的功能种类是比较少的,只是专属,但是稳定性要求高的,比如说复杂交换机、防火墙等,可能更看中linux系统的稳定性和各种优秀的外围资源吧。
(2)基于qt等GUI开发应用程序,之前一直以为qt是linux绕不开的,其实随着了解,不尽然,qt其实就是一个桌面系统,比如说ubuntu,对于高手来说,有没有桌面都是无所谓的,因为所有都是可以通过shell来完成的,使用qt是方便用户使用,所以对于那些需要操作,有屏幕的嵌入式设备,这个是一个很好的方案。比如目前工控触摸屏还有各种手持式带有屏幕的仪表器械,都是这种方式。
(3)没有屏幕,只有简单的人机接口,比如串口,按键,数码管,这种也能实现复杂功能开发,比如说,完全可以开发一个基于linux的PLC,可编程方案,通过脚本实现,这也是一种很好的方案实现。
八、烧写内核、根文件系统、应用程序
无论怎么加载,模块也好,所有的这些开发,过程资料,都是要烧写到flash中的,然后应用程序需要什么,就加载对应的功能程序即可。
九、发布产品
写到最后,发现,之前还是过于迷信linux,不是说linux不好,而是说,对于嵌入式开发工程师来说,没有最好的,只有最适合的,开发一款产品,用什么,不用什么,都是因地制宜的。
比如说一个简单的跑马灯,你非要使用嵌入式linux方案,那就是烧包,只需要一个简单的2051,裸机程序就能开发,既便宜,又好用。
开发一款小型控制器设备,如果功能不太复杂,可以使用稍微高级的CPU,裸机或者ucos等来开发,也很方便,也能做很多定制版的工业小型控制器。
开发一款中高型的控制器设备,功能比较复杂,甚至需要复杂的屏幕交互,比如手机(安卓是linux的亲儿子,OS是linux的亲表弟),取款机,服务器交易系统,那么linux就非常合适了。
学习笔记:嵌入式系统的设计和开发过程
(一)嵌入式系统的设计过程1.设计过程中使用的概念(1)抽象:首先要对每个问题的组件进行抽象。例如,机器人系统问题的抽象可以根据手臂和电机的控制进行。(2)硬件和软件体系结构:在开始设计之前,必须很好的理解体系结构。(3)外部功能属性:待开发系统的外部功能属性应该从设计中充分理解。(4)相关系统系列设计:在设计过程中,应该对早期开发的相关系统系列加以考虑。(5)模块化设计:系统设计是将软件分解为将要实现的模块。模块应该在后来还能够组合(耦合或集成)起来。有效的模块设计应该确保有效的功能独立性、内聚性以及耦合性。(6)映射:根据软件需求映射为各种表示形式。在设计过程中使用转换和事务映射设计过程。(7)用户界面设计:用户界面是按照每个用户的需求、环境和系统功能的分析进行设计的。(8)改进:每个组件和模块设计都需要反复改进,直到它们最适合软件小组的实现。
2.设计指标功耗、性能、处理的最后期限、用户接口、大小、工程费用、制造费用、灵活性、原型开发时间、上市时间、系统和用户安全和维护性
3.设计过程中的抽象步骤设计过程一般分为自底向上设计和自顶向下设计。目前最受欢迎的方式是自顶向下设计方式,它的设计过程有5个抽象层次:(1)需求:包括对系统需求的定义和分析。需要完全清楚最终开发出来的系统的用途、输入、输出、功能、设计指标和需求确认。需求要有一致性。(2)说明书:能够清晰、精确地描述了所需系统的参数和功能,说明用户对产品的期望,同时说明系统的体系结构。(3)体系结构:定义了数据建模设计、数据结构属性、数据流图、程序模型、软件体系结构层次和硬件体系结构。(4)组件:定义了软件组件:过程、接口和算法。(5)系统集成:把已完成的组件集成到系统中。
4.嵌入式系统设计中的挑战主要这几个方面:(1)需要的硬件数量和类型(2)优化电力损耗和消耗(3)过程的最后期限(4)灵活性和升级能力(5)可靠性
5.优化设计指标(1)相对于处理的最后期限、事件的响应时间和延迟,优化处理器成本(2)相对于性能优化工程设计成本(3)相对于性能、功耗和能耗优化NRE成本(4)相对于NRE成本、性能、功能和能耗优化尺寸(5)优化上市时间和设计成本
6.嵌入式软件开发的挑战和问题(1)软件体系结构问题软件体系结构包含3层。(a)第一层是体系结构设计层。体系结构显示了不同元素的组织——数据结构、数据库、算法、控制函数、状态转换函数、过程、数据和程序流路径。挑战:这些元素的组织。(b)第二层包含数据设计。主要考虑的问题:数据结构和数据库如何设计才最适用于给定的问题?数据组织结构为树形结构合适吗?数据中的组件如何设计?挑战:元素的数据设计。(c)第三层包含接口设计。主要考虑的问题:什么样的接口才能集成组件?系统集成如何设计?如何设计接口,从数据对象、结构和数据库中提取输入,并交付输出?接收输入和传递输出的端口采用什么结构?挑战:嵌入式程序接口设计
(2)软件组件设计第四层是组件级的设计。主要考虑的问题:每个组件如何设计?每个组件如何优化?如何高效地编码,以使用较少的存储器实物,不必从存储器中重复提取相同的数据?存储器的使用图和优化?
(3)软件组成与系统集成设计出来的组件在系统中集成。系统应能正常运转,并验证设计指标的有效性。选择合适的测试来测试系统的运行状况。调试工具用于发现错误,校正错误条件。每个组件及其接口都被集成到系统中。
(4)软件开发过程中的挑战和问题(a)程序简单:程序的简单性应在实现过程中维护。在维护程序的简单性,同时程序执行复杂的计算,是设计过程中的一个问题。(b)使用编程模型:组件及其接口应作为程序模型。选择合适的模型是设计过程中的一个问题。(c)程序使用特定的语言实现,例如C++、VisualC++、C#和NET框架:设计可能需要实时操作系统。软件设计可能需要IDE、开发和源代码工程工具。选择合适的语言。框架、OS和工具是设计过程中的一个问题
(5)使用面向对象的方法设计组件,保证其可重用性和其他功能7.嵌入式系统中软硬件的协同设计软硬件的协同设计表示同时设计硬件和软件。设计人员考虑硬件和软件分别执行计算得那个部分和何时执行。划分计算需求,使特定功能、单个目标或特定目标的计算部分在需要时由硬件完成。
(1)软硬件的权衡嵌入式系统需要硬件和软件。权衡意味着在使用运行于GPP的软件和在硬件单元上实现特定功能的平衡,并优化设计指标。设计工程师要进行软硬件的权衡,以优化设计指标。
(2)优化设计指标挑战:优化和获得最佳的系统指标参考:嵌入式系统——体系结构、编程与设计.清华大学出版社[参考日期2019-11-03]
EAI嵌入式人工智能发展现状研究
11.1从AI到EAIAI即人工智能,赋予机器可以模仿人类利用知识完成某些行为。
嵌入式设备种类繁多,在生活中到处可见,例如手机、家电、电动车、电梯。生活中存在的海量嵌入式设备,是EAI发展的现实基础,而人工智能技术在近几年的突飞猛进,为EAI的发展提供了技术保障。
EAI即EmbeddedAI嵌入式人工智能,早在2018年9月中国(上海)国际嵌入式大会期间,何积丰院士指出,人工智能有向嵌入式系统迁移的趋势,嵌入式人工智能是一个崭新的重要机遇,同时指出,边缘计算、机器学习、AI芯片是嵌入式人工智能的三项前沿技术【1】。苏州大学王宜怀老师认为,嵌入式人工智能是以一般意义上的人工智能算法为基础,以嵌入式应用实践为目标,将人工智能训练和推理算法构件驻留于嵌入式计算机内部,实现嵌入式终端智能化,它是伴随着机器学习理论与算法的发展、嵌入式芯片性能的提高、嵌入式智能终端的市场需求而提出的,是人工智能产业化落地的主要形式【2】。
1.2嵌入式芯片的发展我国首款嵌入式人工智能视觉芯片是在2017年12月20日由地平线机器人技术团队发布的面向智能驾驶的“征程1.0”处理器和面向智能摄像头的“旭日1.0”处理器,该芯片完全由中国企业自主研发,具有高性能、低功耗、低延时等特点,可直接嵌入至终端设备。
“征程1.0”处理器具备同时对行人、机动车、非机动车、交通指示牌等多类目标进行精准实时检测与识别的处理能力。基于该芯片研发的智能驾驶平台支持260种交通标志牌的检测,对红绿灯、当前车道和相邻车道可行驶区域的识别准确率大于95%。
“旭日1.0”处理器具备在前端实现大规模人脸识别检测跟踪、视频结构化的处理能力,能应用于智能城市、智能商业等场景。结合该芯片形成的人脸抓拍识别系统单帧最高能抓拍120个人脸,功耗仅为1.5瓦。
2018到2019年是嵌入式人工智能发展非常有历史性的两年,这两年期间各大厂商做出了端侧神经网络超级计算芯片,并将功耗控制在了电池可使用的范围内。例如intel推出的Movidius神经网络计算棒,Nvidia推出的Jetson-Nano、瑞芯微推出的3399Pro等等,使得原先不可能实现的嵌入式人工智能项目可以成功落地。由此可见,人工智能芯片的发展极大地推动了嵌入式人工智能项目的发展。而嵌入式芯片之所以突飞猛进,是因为舍弃了通用指令集,因为通用指令集的功耗和性能,并不能体现出嵌入式的优势,所以各大厂商使用了自己的指令集,因为各大厂商指令集的不通用性,大大提高了嵌入式开发的复杂性,而使用通用指令集,则可单纯依靠高级编程语言,编码再编译后即可使用。
22.1案例一2015年成立的深圳地平线机器人科技有限公司,为嵌入式人工智能平台发布了许多人工智能专用处理器BrainProcessingUnit(BPU),以及智能驾驶处理器。曾在2018年发布过嵌入式人工智能抓拍识别摄像机,搭载的就是他们自研的嵌入式人工智能视觉芯片,将使用人工智能技术处理人脸识别问题,从旧式的上传照片到服务器再进行处理的云端处理方式,改进为了在摄像机本地提取人脸数据特征,只将人脸特征数据传送到服务器即可。我在工作时曾使用过这个摄像机,主要用于智能安防方向。综上所示,这样做的好处包括:实时性高、无用数据传输量减少、对网络依赖性小和使用专用嵌入式人工智能处理器,性能更强【3】。
2.2案例二当前智能手机都有语音助手,例如苹果手机的Siri,华为的小艺,小米的小爱,微软的小娜,但这些语音助手都只能联网使用,在断网状态下功能相当不完善,可知这些语音助手都是在云端进行数据处理的,如果可以将语音助手程序本地化部署在嵌入式设备中,则在断网状态下也可正常使用。此案例可总结出,在嵌入式设备中本地化部署人工智能程序,可有效提高系统的可靠性,减少流量消耗,有效的保护用户隐私数据。
2.3案例三京东配送机器人是由京东研发,进行快递包裹配送的人工智能机器人。它拥有基于认知的智能决策规划技术,遇到障碍物时,在判断障碍物的同时判断出行人位置,并判断出障碍物与行人运动方向与速度,通过不断深度学习与运算,做出智能行为的决策。除此之外,京东无人仓的日处理订单能力相当于人工仓库效率的5倍。
毫无疑问,未来会有很多岗位被机器人取代,而实现这种机器人的技术就是在嵌入式平台上的人工智能应用。
33.1国内近期讨论GTIC2021嵌入式AI创新峰会于5月25日在北京举办,此处介绍会议上的一些观点。
大华股份先进技术研究院科学家朱树磊做《嵌入式AI算法模型微服务的设计与实践》演讲。微服务架构在服务端开发中已十分普遍,它把功能模块拆分出来,运行在不同的进程或不同的服务器上,相比于单体架构,微服务提高了开发效率、降低了开发难度、维护成本和开发时间,可扩展性强。他认为,在当前行业AI智能需求快速增长的背景下,嵌入式算法产品架构设计和开发流程亟须变革,嵌入式平台模型微服务化能够降低嵌入式开发的门槛。但是相比于云原生微服务,嵌入式微服务在功耗、算力、内存等资源方面受限,无法复用成熟的云原生生态,需要自己打造。他认为,打造模型、接口、代码三大编译器是嵌入式平台模型微服务化的关键。
知存科技CEO王绍迪谈到,当前已进入后摩尔时代,尤其当芯片进入7nm和5nm阶段后,研发速度放缓,芯片研发成本急剧增高,每一次迭代单个芯片成本增加1倍。但嵌入式设备对先进工艺芯片的需求并不强烈,反而更青睐于低成本、低功耗、易开发的芯片。目前的芯片都是采用冯诺依曼架构,早期的冯诺依曼计算机结构是以运算器为中心,后期的冯诺依曼计算机结构以存储器为中心,而存储器的速度与芯片速度严重不匹配,导致计算机整体计算速度慢。为了解决存储器瓶颈问题,出现了许多不同的方案,包括3DXpoint、近内存计算、近存储计算和存内计算。王绍迪认为存算一体是最高效率的AI计算【4】。存算一体芯片技术,旨在把传统以计算为中心的架构转变为以数据为中心的架构,其直接利用存储器进行数据处理,从而把数据存储与计算融合在同一个芯片当中,可以彻底消除冯诺依曼计算架构瓶颈,特别适用于深度学习神经网络这种大数据量大规模并行的应用场景。
44.1EAI论文阅读总结以下是我在知网上查找到的论文,论文内容多为人工智能算法在嵌入式平台的实现。做了一个表对论文简单进行统计,关注重点为神经网络模型和嵌入式设备。
论文
神经网络模型
嵌入式设备
基于CNN的汽车安全驾驶辅助系统的设计与实现_陶文
LeNet-5
Caffe
树莓派、
IntelMovidius神经计算棒
基于NB_IoT的垃圾回收智能管理系统研究与实现_戚逸然
LeNet-5
基于STM32微控制器的开发板,阿里云服务器
基于机器学习的人脸表情识别与分析系统_孙雨琛
MTCNN
Multi-taskconvolutionalneuralnetwork(多任务卷积神经网络)
NVIDIAJetsonTX2,一台7.5瓦的单模组超级计算机,可为终端提供AI计算功能
基于卷积神经网络的手势识别算法优化及嵌入式实现_张玉婷
CNN(卷积神经网络)
XilinxZC706开发板
基于人工智能的罐车装料口视觉跟踪系统研究_朱佩
SSD
SingleShotMultiBoxDetector
以Contex-A7为处理器的开发板
基于人工智能的水稻病害检测系统研究_牛旭
CNN
TensorFlow
ARM开发板
基于人脸属性识别的嵌入式电影推荐系统_许锐
宽残差神经网络
Keras、TensorFlow
RK3399开发板
基于深度学习的视觉目标跟踪系统设计与实现_张明喆
GOTURN
基于深度学习的物体追踪
NVIDIAJetsonTX1
嵌入式人工智能与物联网实验开发板教学应用_杨焕峥
意法半导体公司的STM32系列
轻量级卷积神经网络的嵌入式人脸检测与识别系统设计与实现_郭嘉
MTCNN
NVIDIAJetsonTX2
树莓派
通过对以上论文的阅读,可以发现在以上的嵌入式人工智能应用系统中,嵌入式设备都是性能强大、功能完善的开发板,使用这些开发板可以简化底层的工作,在将代码从不同平台移植的时候,可以更加方便,但成本也会上升。
以上论文中大部分嵌入式平台都搭载了Linux操作系统,目前常用的嵌入式操作系统除了Linux还有Android等。但是与PC开发不同,嵌入式的开发环境更加复杂,为了实现更低的功耗和专一的功能,嵌入式芯片厂商往往会加入专有的IP核、DSP、ASIC等来实现特定的运算加速,嵌入式专用芯片的效率远远高于PC,而成本和功耗又低于PC的CPU。开发嵌入式人工智能项目,往往都是在PC上开发完成,再移植到嵌入式平台,需要多注意嵌入式平台芯片的指令集与通用指令集的异同。
以上论文的共性为,都是做的计算机视觉。对论文的内容进行概括,可以知道要成为一名EAI开发工程师所需要的技术栈,包括嵌入式Linux开发、STM32开发、人工智能等。
嵌入式系统开发流程
一、嵌入式系统开发流程1、系统需求分析:根据需求,确定设计任务和设计目标,指定设计说明书。2、体系结构设计:描述系统如何实现所述的功能需求,包括对硬件、软件和执行装置的功能划分以及系统的软件、硬件选型。3、硬件/软件协同设计:基于体系结构的设计结果,对系统的硬件、软件进行详细设计。一般情况下嵌入式系统设计的工作大部分都集中在软件设计上,现代软件工程经常采用的方法是面向对象技术、软件组件技术和模块化设计。4、系统集成:把系统的硬件、软件和执行装置集成在一起进行调试,发现并改进设计过程中的不足之处。5、系统测试:对设计好的系统进行测试,检验系统是否满足实际需求。二、嵌入式软件开发嵌入式软件开发的一般流程为需求分析、软件概要设计、软件详细设计、软件实现和软件测试。与一般的软件开发区别主要在于软件实现的编译和调试两部分即为交叉编译与交叉调试。
EAI嵌入式人工智能发展现状研究
11.1从AI到EAIAI即人工智能,赋予机器可以模仿人类利用知识完成某些行为。
嵌入式设备种类繁多,在生活中到处可见,例如手机、家电、电动车、电梯。生活中存在的海量嵌入式设备,是EAI发展的现实基础,而人工智能技术在近几年的突飞猛进,为EAI的发展提供了技术保障。
EAI即EmbeddedAI嵌入式人工智能,早在2018年9月中国(上海)国际嵌入式大会期间,何积丰院士指出,人工智能有向嵌入式系统迁移的趋势,嵌入式人工智能是一个崭新的重要机遇,同时指出,边缘计算、机器学习、AI芯片是嵌入式人工智能的三项前沿技术【1】。苏州大学王宜怀老师认为,嵌入式人工智能是以一般意义上的人工智能算法为基础,以嵌入式应用实践为目标,将人工智能训练和推理算法构件驻留于嵌入式计算机内部,实现嵌入式终端智能化,它是伴随着机器学习理论与算法的发展、嵌入式芯片性能的提高、嵌入式智能终端的市场需求而提出的,是人工智能产业化落地的主要形式【2】。
1.2嵌入式芯片的发展我国首款嵌入式人工智能视觉芯片是在2017年12月20日由地平线机器人技术团队发布的面向智能驾驶的“征程1.0”处理器和面向智能摄像头的“旭日1.0”处理器,该芯片完全由中国企业自主研发,具有高性能、低功耗、低延时等特点,可直接嵌入至终端设备。
“征程1.0”处理器具备同时对行人、机动车、非机动车、交通指示牌等多类目标进行精准实时检测与识别的处理能力。基于该芯片研发的智能驾驶平台支持260种交通标志牌的检测,对红绿灯、当前车道和相邻车道可行驶区域的识别准确率大于95%。
“旭日1.0”处理器具备在前端实现大规模人脸识别检测跟踪、视频结构化的处理能力,能应用于智能城市、智能商业等场景。结合该芯片形成的人脸抓拍识别系统单帧最高能抓拍120个人脸,功耗仅为1.5瓦。
2018到2019年是嵌入式人工智能发展非常有历史性的两年,这两年期间各大厂商做出了端侧神经网络超级计算芯片,并将功耗控制在了电池可使用的范围内。例如intel推出的Movidius神经网络计算棒,Nvidia推出的Jetson-Nano、瑞芯微推出的3399Pro等等,使得原先不可能实现的嵌入式人工智能项目可以成功落地。由此可见,人工智能芯片的发展极大地推动了嵌入式人工智能项目的发展。而嵌入式芯片之所以突飞猛进,是因为舍弃了通用指令集,因为通用指令集的功耗和性能,并不能体现出嵌入式的优势,所以各大厂商使用了自己的指令集,因为各大厂商指令集的不通用性,大大提高了嵌入式开发的复杂性,而使用通用指令集,则可单纯依靠高级编程语言,编码再编译后即可使用。
22.1案例一2015年成立的深圳地平线机器人科技有限公司,为嵌入式人工智能平台发布了许多人工智能专用处理器BrainProcessingUnit(BPU),以及智能驾驶处理器。曾在2018年发布过嵌入式人工智能抓拍识别摄像机,搭载的就是他们自研的嵌入式人工智能视觉芯片,将使用人工智能技术处理人脸识别问题,从旧式的上传照片到服务器再进行处理的云端处理方式,改进为了在摄像机本地提取人脸数据特征,只将人脸特征数据传送到服务器即可。我在工作时曾使用过这个摄像机,主要用于智能安防方向。综上所示,这样做的好处包括:实时性高、无用数据传输量减少、对网络依赖性小和使用专用嵌入式人工智能处理器,性能更强【3】。
2.2案例二当前智能手机都有语音助手,例如苹果手机的Siri,华为的小艺,小米的小爱,微软的小娜,但这些语音助手都只能联网使用,在断网状态下功能相当不完善,可知这些语音助手都是在云端进行数据处理的,如果可以将语音助手程序本地化部署在嵌入式设备中,则在断网状态下也可正常使用。此案例可总结出,在嵌入式设备中本地化部署人工智能程序,可有效提高系统的可靠性,减少流量消耗,有效的保护用户隐私数据。
2.3案例三京东配送机器人是由京东研发,进行快递包裹配送的人工智能机器人。它拥有基于认知的智能决策规划技术,遇到障碍物时,在判断障碍物的同时判断出行人位置,并判断出障碍物与行人运动方向与速度,通过不断深度学习与运算,做出智能行为的决策。除此之外,京东无人仓的日处理订单能力相当于人工仓库效率的5倍。
毫无疑问,未来会有很多岗位被机器人取代,而实现这种机器人的技术就是在嵌入式平台上的人工智能应用。
33.1国内近期讨论GTIC2021嵌入式AI创新峰会于5月25日在北京举办,此处介绍会议上的一些观点。
大华股份先进技术研究院科学家朱树磊做《嵌入式AI算法模型微服务的设计与实践》演讲。微服务架构在服务端开发中已十分普遍,它把功能模块拆分出来,运行在不同的进程或不同的服务器上,相比于单体架构,微服务提高了开发效率、降低了开发难度、维护成本和开发时间,可扩展性强。他认为,在当前行业AI智能需求快速增长的背景下,嵌入式算法产品架构设计和开发流程亟须变革,嵌入式平台模型微服务化能够降低嵌入式开发的门槛。但是相比于云原生微服务,嵌入式微服务在功耗、算力、内存等资源方面受限,无法复用成熟的云原生生态,需要自己打造。他认为,打造模型、接口、代码三大编译器是嵌入式平台模型微服务化的关键。
知存科技CEO王绍迪谈到,当前已进入后摩尔时代,尤其当芯片进入7nm和5nm阶段后,研发速度放缓,芯片研发成本急剧增高,每一次迭代单个芯片成本增加1倍。但嵌入式设备对先进工艺芯片的需求并不强烈,反而更青睐于低成本、低功耗、易开发的芯片。目前的芯片都是采用冯诺依曼架构,早期的冯诺依曼计算机结构是以运算器为中心,后期的冯诺依曼计算机结构以存储器为中心,而存储器的速度与芯片速度严重不匹配,导致计算机整体计算速度慢。为了解决存储器瓶颈问题,出现了许多不同的方案,包括3DXpoint、近内存计算、近存储计算和存内计算。王绍迪认为存算一体是最高效率的AI计算【4】。存算一体芯片技术,旨在把传统以计算为中心的架构转变为以数据为中心的架构,其直接利用存储器进行数据处理,从而把数据存储与计算融合在同一个芯片当中,可以彻底消除冯诺依曼计算架构瓶颈,特别适用于深度学习神经网络这种大数据量大规模并行的应用场景。
44.1EAI论文阅读总结以下是我在知网上查找到的论文,论文内容多为人工智能算法在嵌入式平台的实现。做了一个表对论文简单进行统计,关注重点为神经网络模型和嵌入式设备。
论文
神经网络模型
嵌入式设备
基于CNN的汽车安全驾驶辅助系统的设计与实现_陶文
LeNet-5
Caffe
树莓派、
IntelMovidius神经计算棒
基于NB_IoT的垃圾回收智能管理系统研究与实现_戚逸然
LeNet-5
基于STM32微控制器的开发板,阿里云服务器
基于机器学习的人脸表情识别与分析系统_孙雨琛
MTCNN
Multi-taskconvolutionalneuralnetwork(多任务卷积神经网络)
NVIDIAJetsonTX2,一台7.5瓦的单模组超级计算机,可为终端提供AI计算功能
基于卷积神经网络的手势识别算法优化及嵌入式实现_张玉婷
CNN(卷积神经网络)
XilinxZC706开发板
基于人工智能的罐车装料口视觉跟踪系统研究_朱佩
SSD
SingleShotMultiBoxDetector
以Contex-A7为处理器的开发板
基于人工智能的水稻病害检测系统研究_牛旭
CNN
TensorFlow
ARM开发板
基于人脸属性识别的嵌入式电影推荐系统_许锐
宽残差神经网络
Keras、TensorFlow
RK3399开发板
基于深度学习的视觉目标跟踪系统设计与实现_张明喆
GOTURN
基于深度学习的物体追踪
NVIDIAJetsonTX1
嵌入式人工智能与物联网实验开发板教学应用_杨焕峥
意法半导体公司的STM32系列
轻量级卷积神经网络的嵌入式人脸检测与识别系统设计与实现_郭嘉
MTCNN
NVIDIAJetsonTX2
树莓派
通过对以上论文的阅读,可以发现在以上的嵌入式人工智能应用系统中,嵌入式设备都是性能强大、功能完善的开发板,使用这些开发板可以简化底层的工作,在将代码从不同平台移植的时候,可以更加方便,但成本也会上升。
以上论文中大部分嵌入式平台都搭载了Linux操作系统,目前常用的嵌入式操作系统除了Linux还有Android等。但是与PC开发不同,嵌入式的开发环境更加复杂,为了实现更低的功耗和专一的功能,嵌入式芯片厂商往往会加入专有的IP核、DSP、ASIC等来实现特定的运算加速,嵌入式专用芯片的效率远远高于PC,而成本和功耗又低于PC的CPU。开发嵌入式人工智能项目,往往都是在PC上开发完成,再移植到嵌入式平台,需要多注意嵌入式平台芯片的指令集与通用指令集的异同。
以上论文的共性为,都是做的计算机视觉。对论文的内容进行概括,可以知道要成为一名EAI开发工程师所需要的技术栈,包括嵌入式Linux开发、STM32开发、人工智能等。
EAI嵌入式人工智能发展现状研究blog.51cto.com/u_15061951/…