作者 | Andrew Zhuravchak

译者 | 弯月

封图 | CSDN 下载自 VCG

出品 | CSDN(ID:CSDNnews)

如今,机器学习已到达巅峰,并在各个领域得到了应用。机场有人脸识别系统,Facebook 有个性化的广告。

然而,机器学习与嵌入式设备的相结合仍然存在非常大的鸿沟。

我们不了解什么是嵌入式世界

我们已经习惯了使用强大的计算能力来处理机器学习。

AlexNet 需要 727MFlops 的运算能力(Flops=浮点运算)以及 235Mb 的内存才能处理小小的一张 227 x 227 像素的图像。例如,Google Nexus S 上的 ARM Cortex-A8 的处理能力为每秒 66MFlops。因此,你必须等待大约 11 秒才能进行推断。这也太慢了!

大学里我上了几门与机器学习相关的课程。我们做了很多有趣的作业。但是当时即便是 4GB GTX1050 也不足以训练所有模型。

一般的机器学习工程师很少考虑计算资源。而且他们也很少关心内存的使用情况。为什么?因为这些硬件都很便宜,甚至是你的手机都拥有相当不错的 CPU 和大量内存。

你已经很久没有过聚会拍照时发现自己手机上的存储不够的情况了吧?想象一下,你使用的是只有 256KB 闪存的 TrueTouch 感应控制器。没错,只有 256KB。而且由于固件占用了一部分, 因此你不能完全使用这点存储。算下来,你能使用的也就是大约 100KB。回头再看看你的上一个模型的大小。可能比这个大多了。

有意思吧?我们来继续看。

当听到“嵌入式设备”时你会想起什么?记住脑海中出现的第一印象。

1. 嵌入式设备可以是任何电动机械,甚至是微波炉和洗衣机

没错,你答对了!

如今,几乎所有的电气设备都是嵌入式的。这些设备内部可能拥有一个或多个控制器来负责每个功能:触摸感应、发动机状态监控等。

2. Arduino 和树莓派

恭喜你,再次答对了!

二者是 DIY 项目中最受欢迎和使用最广泛的工具包之一。它们也是嵌入式设备。

3. Jetson Nano 及类似的产品

再次回答正确。

这是一种特殊的开发套件,简称迷你计算机,专门为运行机器学习模型而开发。它非常强大,而且非常酷。

但似乎有些不对。

我有很多朋友都在做一些很棒的硬件业余项目。通常他们会使用 Arduino 或 STM32。

我认识几个 AI 工程师对 Jetson Nano 和类似设备超有兴趣。他们认为这些设备是嵌入式 AI 的未来。

那么,接下来请考虑这样一个问题:“这些设备有多少用在了生产级别的产品中?”

答案:微乎其微

想一想你家中有多少电气设备,然后再想想汽车中包含的大量控制器,以及工作上用到的安保系统,等等。

每个设备都有一个控制器。通常,这些控制器都是微型,且超级便宜。它们根本无法企及 Jetson 或树莓派的资源和功能。

假设你有一个微控制器。它的主要任务是处理手指触摸屏幕。它拥有 ARM Cortex-M0 处理器,256KB 内存(其中只有 80–120KG 可用)。这是一个实时系统,因此你只需很少的时间来推断模型,例如 100 微秒。你的目标是改善算法或替换算法。

祝你好运,欢迎来到“嵌入式 AI”的世界。

重点:真正的嵌入式世界,由资源极其有限的 1-2 美元芯片组成。而生产级别的产品使用的就是这种芯片。

纯基础设施

我一直在从事上述项目,进展良好,我开发了一个适合该微控制器的小型神经网络。

接下来,我需要将模型从我的电脑转移到设备上!

1. 量化

该处理器无法执行浮点数运算。即使可以,我们也不会使用,因为它的操作非常复杂且需要大量时间。

因此,我对模型的权重进行量化,即将连续范围内的值转换为有限范围内的离散值。

你猜怎么着?PyTorch 和 TensorflowLite 都无法完全支持。它们不能支持所有激活函数(尽管我使用了非常简单的 HardTanh)。PyTorch 甚至无法将量化模型保存到文件中。

所以,我不得不亲自动手。

2. 推理代码生成

你想在这个控制器上运行模型,对吧?那么你就需要使用 C 代码进行模型推断。

告诉你一个不幸的消息,这一步你也必须手动完成。为什么?因为 PyTorch 没有推断代码生成的功能。相比之下,TFLite 虽然有这个功能,但功能相当有限,并且不支持常见的激活函数。

所以,我不得不再次亲自动手。

在工作中,我遇到过很多这样的情况。我并不是想抨击 PyTorch 和 TensorflowLite,而是在“求救”。

重点:机器学习社区还有一个重大的问题:没有“嵌入式 AI”的专业工具。

黑暗中的光明?

我看到大型半导体公司对 AI 产生了极大的兴趣,他们在积极地做非常有价值和重要的事情。

  • CMSIS-NN:用于 Arm Cortex-M CPU 的高效神经网络内核。

  • 有些编译器能够产生高效的推理代码,而且这些推理代码能够根据你的硬件进行优化。

  • 还有很多其他很棒的东西。

英文:Machine Learning Fails When It Comes to Embedded System. Here’s Why

链接:https://towardsdatascience.com/machine-learning-fails-when-it-comes-to-embedded-system-9ce6def9ba75

作者:Andrew Zhuravchak,研发系统工程师。

译者:弯月

【END】

推荐阅读 

☞黑莓手机将停售;三大运营商:疫情防控期间用户欠费不停机;Chrome 测试移除搜索结果页网址 | 极客头条

Web 爬虫现已合法?

☞科技驰援背后:技术没有假期!

假期延长,抢票软件到底还行不?

☞火神山医院完工,2月3日收治病人!“云监工”请放心!

阿里腾讯华为在行动!程序员远程办公究竟用哪个视频会议好?

☞疫情肆虐下,程序员们都在哪里?

☞延迟上班别发愁,远程办公抗疫情!

你点的每一个在看,我认真当成了喜欢

为什么机器学习在嵌入式系统中会失败?相关推荐

  1. 嵌入式系统中看门狗概述。。。

    一直以来对于嵌入式中的watch dog(看门狗)都比较陌生,一直都不知道它到底是做什么的,单从名字上看也不知其所以然,然后就在网上找到了一篇blog,就是再说看门狗的作用和概述,原文如下: 1.概述 ...

  2. 嵌入式系统中时间的应用以及rtc的验证过程

    在嵌入式系统中时间分为3种,分别为当前时间,系统时间,硬件时间,三种之间有一定的关联关系,如果开发板没有电池,用于保持开发板的时钟,那么当开发板断电后,时钟恢复为默认时间,一般为1970年1月1日,0 ...

  3. 嵌入式系统中进程间通信的监视方法

    概述 复杂的嵌入式系统中,常常同时运行着相当多的进程.这些进程之间频繁的进行着大量的通信动作.进程的运行状态与这些不断发生的通信有着直接和紧密的联系.通过对进程间通信的监视,开发人员可以掌控系统内部运 ...

  4. python好还是c+-嵌入式系统中,Python与C/C++哪方更为适用?

    [51CTO.com快译]长久以来,C/C++一直编译着嵌入式系统编程领域,但二者亦拥有自己的缺陷.相比之下,Python则成为嵌入式系统中的另一大***语言选项.在今天的文章中,我们将共同探讨双方的 ...

  5. 【原创】QT在嵌入式系统中显示中文的方法

    [原创]QT在嵌入式系统中显示中文的方法 此篇文章主要借鉴:http://zzqh007.blog.163.com/blog/static/44434847201011312168296/ 移植QT4 ...

  6. 嵌入式系统中对汉字的处理

    现在要解决的问题是,嵌入式系统中经常要使用的并非是完整的汉字库,往往只是需要提供数量有限的汉字供必要的显示功能.例如,一个微波炉的LCD上没有必要提供显示"电子邮件"的功能: 一个 ...

  7. python嵌入式系统开发_Python在开发实时嵌入式系统中的作用

    原标题:Python在开发实时嵌入式系统中的作用 在过去的几年里,Python已经成为一种热门的程序语言.以著名的Monty Python喜剧小组命名,该语言是面向对象和解释.该属性导致Python在 ...

  8. 看门狗(Watch Dog)是嵌入式系统中一种常用的保证系统可靠性的技术,()会产生看门狗中断。【详细!小白也能看懂!】

    看门狗(Watch Dog)是嵌入式系统中一种常用的保证系统可靠性的技术,()会产生看门狗中断. A. 软件喂狗 B. 处理器温度过高 C. 外部中断 D. 看门狗定时器超时 解析: 思考方式: 每个 ...

  9. 单片机c语言位运算写法,单片机与嵌入式系统中C语言的位运算小记

    原标题:单片机与嵌入式系统中C语言的位运算小记 编了个PIC的项目,对里的还是蛮有感悟的,特此记录一下. 譬如说,在程序中定义了一个char类型的变量, purge_short_enable_flag ...

最新文章

  1. session cookie
  2. VTK:超树网格源用法实战
  3. 初用WEB IOU,IE LAB备战启航
  4. 白话SOA:面向服务+组件+架构
  5. c语言取反运算详细步骤,C语言之位运算详解
  6. 《Python知识手册》V2.1版,高清PDF免费获取
  7. Vue中computed,watch,Methods的比较
  8. greenDAO简单使用经验
  9. 网络安全 Windows用户密码破解 使用破解MD5值的在线网站和监听工具Cain
  10. linux中屏蔽定时任务,linux中的定时任务
  11. 树链剖分 - 月下“毛景树”(BZOJ 4151)
  12. HTML5前端期末大作业 HTML+CSS+JavaScript防锤子手机商城官网 web前端网页设计实例 企业网站制作
  13. 识别PDF关键词,在文件页数和坐标
  14. OS学习笔记-15(清华大学慕课)处理机调度
  15. 我的北京生活,2018面向新的开始
  16. 监控 - Prometheus监控
  17. 广州 人才引进,家属随迁(有小孩),自己房产,外省户口,复核所需资料
  18. 群晖服务器216j增加硬盘,群晖DS216j影视库搭建方法 | 群晖DS216j存储服务器怎么样_什么值得买...
  19. 空间变形网络——STN
  20. 交通-城市规划专业常用——10分钟步行圈(百度API)

热门文章

  1. 关于TTThumbsViewController加载更多
  2. opensuse ati 显卡驱动安装
  3. Python 中文文本分词(包含标点的移除)
  4. Spark:通过start-slaves.sh脚本启动worker报错:Permission denied
  5. 检查虚拟机是否使用virtio
  6. configure 查看默认安装路径
  7. MATLAB-电力电子技术仿-单向半波整流电路分析
  8. 强化学习的数学基础2---PPO算法
  9. 中国机器人清洁器行业市场供需与战略研究报告
  10. 2021-2025年中国伊维菌素原料药行业市场供需与战略研究报告