使用低成本模块和 MicroPython 快速构建基于 AI 的视觉和听觉设备

作者:Stephen Evanczuk

投稿人:DigiKey 北美编辑

为了满足市场对智能连接产品不断增长的需求,开发人员越来越多地转向机器学习 (ML) 等人工智能 (AI) 方法。不过,开发人员在选择硬件时常常感觉困难重重。他们可以在设计中采用具有成本效益的通用处理器,但这些处理器性能不足以实现复杂算法;他们也可以使用专用解决方案以实现高性能,但会增加设计成本和复杂性。

如今,他们终于有了其他选项。本文介绍了 Seeed Technology 推出的一种简单且高性价比的替代方案,能使开发人员使用熟悉的 MicroPython 编程语言部署基于 AI 的高性能解决方案。

机器学习方法

开发人员希望能够为众多应用找到更为有效的对象检测和语音识别方法,ML 算法的成功自然引起了他们的注意。在这些算法中,卷积神经网络 (CNN) 恰恰能够满足机器视觉和听觉应用所需的高精度识别。因此,在个人电子设备、可穿戴设备和物联网 (IoT) 设计中,对 CNN 及类似的深度神经网络 (DNN) 的应用日益广泛。

对于 CNN 推断要求不高的应用,利用在通用处理器(采用单指令多数据 (SIMD) 架构和数字信号处理 (DSP) 扩展)上运行的神经网络软件库,开发人员即可实现成功的解决方案(参见《利用 Raspberry Pi 构建机器学习应用》(Build a Machine Learning Application with a Raspberry Pi))。

而对于要求更高的应用,借助嵌入高性能 DSP 模块且能够加速 ML 算法的现场可编程门阵列 (FPGA),开发人员就可以构建功能更强大的基于 CNN 的设计(参见《使用 FPGA 构建具有机器学习能力的高性能嵌入式视觉应用》)。

相较于基于 FPGA 的 ML 设计,基于处理器的 ML 设计通常比较容易实现,但 CNN 模型的数学复杂性往往会减慢基于处理器解决方案的推断速度。基于 FPGA 的解决方案虽可以利用硬件实施关键的处理步骤来加速推断性能,但开发要求可能会令快速实施优化解决方案变得困难。

Seeed Technology 推出的 Sipeed MAIX-I 114991684 模块为开发人员提供另一种解决方案,可加快在智能产品和边缘计算设备中部署高性能 CNN 推断解决方案。

高性能 CNN 处理模块

MAIX-1 模块包括高性能双核处理器、Espressif SystemsESP8285 Wi-Fi 微控制器、WinbondW25Q128FW 128 Mbit 串行闪存、稳压器和 IPEX 天线连接器。无线版 Sipeed MAIX-I 114991695 模块不含 ESP8285 微控制器。该双核处理器设计用于增加在各种应用中的工作负载,集成了一对带浮点单元 (FPU) 的 64 位 RISC-V 处理器,以及适用于 CNN 模型、音频处理、加密和快速傅里叶变换 (FFT) 计算的加速器(图 1)。

Seeed Technology 的 MAIX-I 模块示意图图 1:Seeed Technology 的 MAIX-I 模块包括无线微控制器、闪存、直流稳压器、IPEX 天线连接器,以及高性能双核处理器和适用于卷积神经网络 (CNN) 处理及其他功能的加速器。(图片来源:Seeed Technology)

除 8 MB 的静态随机存取存储器 (SRAM) 和 128 Kbit 的一次性可编程 (OTP) 存储器外,该双核处理器还集成了液晶显示屏 (LCD) 端口和用于摄像机的数字视频端口 (DVP) 等全套接口。开发人员可以使用该处理器的现场可编程 IO 阵列 (FPIOA) 多路复用器,将 255 个内部功能映射到 48 个通用 IO (GPIO) 可用端口。

该处理器的加速器和集成功能支持典型智能产品设计的一系列要求。例如,音频处理单元 (APU) 支持多达八个麦克风,包含自身专用的 512 点 FFT 加速器。单单借助这些 APU 功能,开发人员就可以有效使用麦克风阵列来实现智能产品语音接口的音频波束成形定向拾取。对于关键词唤醒等语音接口功能,开发人员可以使用 APU 的预处理音频输出来驱动处理器的集成 CNN 加速器。

CNN 加速器

在所有功能中,Sipeed MAIX-I 模块最出众的特性在于模块双核处理器中集成的 CNN 加速器。神经网络处理器,即内核处理单元 (KPU),旨在加快 CNN 下各核函数的处理速度,可提供组成 CNN 模型各层核函数的硬件实现,包括卷积、批量归一化、激活和池化(参见《利用现成的软硬件启动机器学习》(Get Started with Machine Learning Using Readily Available Hardware and Software))。

凭借这些功能,开发人员可以实现低功耗设计,使用 CNN 识别音频接口的语音激活词,或在基于视觉的应用中进行对象检测和分类。实际上,KPU 可以使用处理器的集成 SRAM,借助 5.9 MB 的定点 CNN 推断模型或 11.8 MB 的预量化浮点模型来执行实时推断。例如,在机器视觉应用中,KPU 使用较小图像帧类型,以 30 fps 以上速度进行推断,用于智能产品的面部或对象检测。对于非实时应用,开发人员可以使用外部闪存来处理模型大小,从而只受限于闪存的容量。

KPU 内部使用先进先出 (FIFO) 缓冲器执行推断模型,按顺序处理典型 CNN 模型的各层(图 2 上)。KPU 从片上 SRAM 或外部闪存中读取各层的模型参数和数据,并使用经加速的相关核函数来执行该层的核函数(图 2 下)。该层处理流水线内置的回调机制,允许开发人员在 KPU 硬件完成每个处理序列时执行自己的例程。

执行推断示意图,完整的 KPU 任务包括多层图 2:在执行推断时,完整的 KPU 任务(上)包括多层,每层都涉及相关核函数的执行(下)。(图片来源:Seeed Technology)

开发平台

KPU 在专用硬件背后,抽象化 CNN 算法执行的复杂性。对于开发人员而言,Seeed 结合了硬件产品和软件包,简化了基于 CNN 开发的复杂性。结合 MAIX-I 模块,开发人员可以使用具有增强功能的 Seeed 板级产品来快速评估和开发基于 MAIX-I 的设计。

Seeed 110991188 开发套件是一款基础级产品,基板上安装了 MAIX-I 模块,配置了 2.4 英寸 LCD 以及 Seeed 114991881 OV2640 鱼眼相机。Seeed 110991189 套件的功能与非 Wi-Fi 版 MAIX-I 模块基本相同。

针对原型开发,Seeed 102991150 Bit 评估板则将 MAIX-I 模块安装在专用于模拟板试验的电路板上。Seeed Technology 的 110991190 MAIX-I Bit 套件包括 Bit 评估板、2.4 英寸显示屏、OV2640 摄像头,以及一对用于将 Bit 评估板连接至试验板的排针。

针对更加复杂的应用开发,Seeed 110991191 Sipeed MAIX Go 开发板套件包括 MAIX-I 模块、STMicroelectronicsSTM32F103C8 微控制器、摄像头、I2S 麦克风、扬声器、锂电池管理单元、MicroSD 插槽和多接口连接器(图 3)。电路板背面可连接随附的 2.8 英寸 LCD,因此开发人员可以有效利用该套件作为 AI 驱动数字视频系统的开发平台。

Seeed Technology 的 Sipeed MAIX Go 开发板图片图 3:Sipeed MAIX Go 开发板是 Seeed Technology 推出的 MAIX 系列板级产品之一,包括 MAIX-I 模块、STMicroelectronics 的 STM32F103C8 微控制器、摄像头、显示屏和多个接口,可提供独立的对象识别成像系统。(图片来源:Seeed Technology)

这些电路板提供的独立解决方案可满足许多智能产品的需求。此外,还支持 MicroPython,因而易于使用。通过将 Seeed Sipeed 电路板与 MicroPython 结合使用,开发人员可以采用更为简单的方法来开发基于 AI 的智能产品。

使用 MicroPython 快速开发

创建 MicroPython 旨在为资源受限的微控制器提供 Python 编程语言的优化子集。MicroPython 为硬件访问提供直接支持,为嵌入式系统软件开发引入相对简单的基于 Python 的开发。

开发人员使用熟悉的 Python 导入机制,而非 C 语言库,来加载所需的库。例如,开发人员只需导入 MicroPython 机器模块即可访问微控制器的 I2C 接口、定时器等。对于使用图像传感器的设计,开发人员可以通过导入传感器模块,然后调用 sensor.snapshot(),从图像传感器返回一个帧,进而捕获图像。

Seeed 的 MaixPy 项目扩展了 MicroPython 的功能,支持作为 MAIX-I 模块核心的双核 K210 处理器和相关开发板。MaixPy MicroPython 解释器在 MAIX-I 模块的 K210 处理器上运行,可使用 MicroPython 功能和囊括了 K210 处理器 KPU 功能的MaixPy 专用模块,例如 MaixPy KPU 模块。

开发人员可以使用 MaixPy 和 KPU 模块轻松部署 CNN 推断。实际上,Seeed MaixHub 模型库提供了许多预训练的 CNN 模型,以便帮助开发人员着手使用 MAIX-I 模块。如需下载这些模型,开发人员就需提供机器 ID。该 ID 可通过在 MAIX 板上运行 ID 生成器实用程序获得。

例如,借助带 LCD 的 Seeed Sipeed MAIX Go 套件,开发人员可以加载面部检测的预训练模型。使用该模型执行推断只需要几行 Python 代码(清单 1)。

复制 import sensor import image import lcd import KPU as kpu lcd.init() sensor.reset() sensor.set_pixformat(sensor.RGB565) sensor.set_framesize(sensor.QVGA) sensor.run(1) task = kpu.load(0x300000) # you need put model(face.kfpkg) in flash at address 0x300000 # task = kpu.load("/sd/face.kmodel") anchor = (1.889, 2.5245, 2.9465, 3.94056, 3.99987, 5.3658, 5.155437, 6.92275, 6.718375, 9.01025) a = kpu.init_yolo2(task, 0.5, 0.3, 5, anchor) while(True): img = sensor.snapshot() code = kpu.run_yolo2(task, img) if code: for i in code: print(i) a = img.draw_rectangle(i.rect()) a = lcd.display(img) a = kpu.deinit(task) 

清单 1:借助闪存中的神经网络模型,开发人员只需几行 MicroPython 代码即可实施推断。(代码来源:Seeed Technology)

预训练模型实现了一种名为 Yolo (you only look once) 的 CNN 模型,这种模型在训练和推断时使用整幅图像,而不似早期的 CNN 算法使用一系列滑动窗口,来加快推断执行的速度。MaixHub 模型库中提供的 "Tiny Yolo2" 模型则对 Yolo 算法作了进一步优化,因而这一高性能模型允许在 MAIX Go 上进行实时面部检测(图 4)。

实时面部检测图片图 4:借助 Sipeeed MAIX Go 开发板,开发人员可以使用专用的预训练 CNN 推断模型快速实现实时面部检测。(图片来源:Seeed Technology)

当然,推断还只处于复杂 DNN 模型开发过程的部署阶段,而上述示例简单易行,要实现有效模型是比较艰巨的。

如需开发自定义模型,开发人员就必须为模型训练获取足够大的样本集。对于训练,开发人员可使用 TensorFlow 等深度学习框架来配置模型,并使用训练数据执行训练。

这些步骤看似很繁琐,但 MAIX-I 生态系统会使推断部署变得相对简单。

Seeed 推出的转换器使开发人员可将 TensorFlow、Keras 或 Darknet 中开发的模型转换为适用于 KPU 的专用 kmodel 格式。与从 MaixHub 模型库下载的预训练模型一样,开发人员可以将他们的自定义模型上载至 MAIX-I 模块,并使用 MicroPython 评估其性能,如上所述。

此外,Seeed 还提供了软件开发工具包 (SDK),可使用 C 编程语言创建自定义软件应用程序。不同 SDK 的功能有所不同:有的支持独立的 C 应用程序,有的则支持实时操作系统 (RTOS) 上构建的 C 应用程序。

总结

智能产品的设计资源本身有限,随着人们快速接受这些产品的图像和语音接口,开发人员在设计中采用机器学习算法的兴趣也越来越浓厚。过去鲜少有易于实现、功能强大、足以提供实时机器学习功能的有效解决方案可供开发人员选择。

如上所述,借助 Seeed Technology 的 MAIX-I 模块和相关开发板,开发人员能够在硬件平台上快速部署推断模型,从而能够从音频或视频流数据中实时识别语音或对象。

免责声明:各个作者和/或论坛参与者在本网站发表的观点、看法和意见不代表 DigiKey 的观点、看法和意见,也不代表 DigiKey 官方政策。

关于此作者

Stephen Evanczuk

Stephen Evanczuk 拥有 20 多年的电子行业编辑经验,主题涉猎广泛,涵盖硬件、软件、系统以及包括物联网在内的各种应用。他拥有神经网络领域的神经科学博士学位,曾经从事航空航天领域大规模分布式安全系统和算法加速方法方面的工作。目前,他不是在撰写技术和工程文章,就是在研究深度学习在识别和推荐系统方面的应用。

关于此出版商

DigiKey 北美编辑