首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

2019恩智浦杯MCU挑战赛二等奖作品好在哪?

果皮、骨头属于湿垃圾,榴莲壳、面膜属于干垃圾,易拉罐、牛奶盒属于可回收垃圾……你是否还在为如何垃圾分类而摸不着头脑呢?今天给大家介绍的作品可就能帮到你大忙了,让我们走到大赛第二名面前,看看他是如何实现智能垃圾分类的。

Demo秀

作者:杨迎尧 | 硕士研究生

苏州大学下一代网络与智能计算研究组

项目介绍

本项目旨在利用LPC55S69芯片双核计算资源,运用图像识别、智能控制技术实现智慧垃圾投放和监测系统。Core0内核和PowerQuad将用来处理图像分类中的计算,Core1内核则负责实时监测垃圾桶状态。具体功能如:

系统基于神经网络算法在开发板中实现图像识别,并结合机械装置对垃圾进行精确投放。

监测垃圾桶的多维属性,如垃圾桶编号及满溢程序投入垃圾的种类、数量以及网络接入等状态,同时系统将周期性地将数据经由WIFI上传并在LCD屏上显示。

项目的想法是由最近国内大火的垃圾分类给出的灵感,目前大部分垃圾分类还都是由人工进行垃圾分类,这就导致了高昂的代价。所以能不能将深度学习加到垃圾分类中的想法油然而生。专家点评如下:

该作品具有较好的完成度,同时充分利用了双核和 PowerQuad 的优势,用VC写了一套训练和推理的程序并且把推理部分移植到MCU了,实现了camera 和 CNN 算法,并对功耗进行了考虑。且垃圾分类贴切生活,很实用。

下面,跟着作者往下看他是如何设计的吧。

硬件设计

项目在硬件方面使用了LPC55S69、SG90舵机、OV7670摄像头、HCSR04超声波传感器、LCD屏幕、ESP8266-wifi模块。一共使用了10个通用IO口、两个串口资源。

主控MCU

LPC55S69开发板

PowerQuad介绍

LPC55S69的性能很强,由于双核的使用,在主核心高速运算的同时从核心能够同时获取传感器数据、处理部分任务。

本系统中,需要资源的就是主核心采集和推理图片的过程,其他过程都是简单的数据传输,因此在主核心需要处理图片时,将开发板以150M全速前进,在处理完之后的部分时间内以12M低速运行,来降低电量消耗。而对于LPC55S69的使用过程,作者有如下体会:

在使用中,可以很好的感受到其功耗优势。在同一个开发板上,同时接入五个设备(包含一个显示屏)并且全速运行时,不会出现电压跳变。双核的运行也很稳定,就算是主频降低时,我在从核心中的CRC加密以及数据经由wifi的传输都没有出现掉帧的情况。

SG90舵机

将摄像头先转换为灰度图片,然后通过串口与开发板通信。

OV7670摄像头

HCSR04超声波传感器

项目所用到的资源

项目软件框架

软件方面使用到了电源管理、PowerQuad、SPI、USART、MailBox、双核等资源。

整体流程为Core0内核使用摄像头采集图像数据并对图像经由神经网络进行推理,推理完成后Core0通过邮箱机制将数据发送给Core1,Core1整合推理结果和其他采集用传感器数据经过wifi发送给上位机。

在M33内核处理大量运算时,由于双核的使用,Core0能够更快的处理大量运算并配合PowerQuad实现数学运算加速,由于神经网络的加入,Core0需要用到更多的ram,目前设计的模型需要占用97.9k的内存,一共有12534个参数;Core1能够拥有更多的时间来采集超声波测距hcsr04,并且及时整合Core0推理结果,大大提高了系统实时性。

微型CNN架构

程序中使用了卷积神经网络(CNN,convolutional neural network)。AI发展到如今这个阶段,加上开发板性能的不断迭代提升,就算是做嵌入式开发,也可以接触和使用AI,让AI为我们服务。

使用流程在VS训练出模型,然后将模型移植到开发板中,开发板只需要按照模型进行推理。所谓模型,就是代码中Core0内核程序的主函数中的数据,推理的过程是利用这些参数进行数学运算的过程。

模型分配

卷积过程

堆积方法

具体步骤:

(1)图像调整:图像经过预处理模块之后,尺寸为60*60,但是如果用该尺寸作为模型的后续处理标准,终端将无法完全存储模型所需要的参数。

(2)卷积层C1:用5个11*11的卷积核,对图像进行卷积操作,得到22*22*5的特征图。

(3)池化层S2:将C1中的每一个特征图的2*2的单元内的四个值相加,乘以一个可训练参数再加上偏置项,最后通过激活函数Sigmoid。

(4)卷积层C3:为了进一步的降低参数,增加下一步中全连接层的输入,我们同样采用不对称的连接方式。这里我们采用10个11*11的特征图。

(5)全连接层F4、F5:将最后的1*1*10作为两层全连接的输入,这里我们每层全连接取8个神经元。

(6)输出层:原始的LeNet-5采用欧几里得径向基函数,每个核代表一种分类结果,输出值最小的值所在的类别即为最后的分类结果。本方案考虑到具体的移植,将其改为ReLU激活函数,输出的4个值中最大的值即为分类结果。

实物图点亮

系统识别垃圾成像显示

写在最后

本次项目主要是实现图像分类功能。尽管出发点只是垃圾分类这一点,但是我在设计之初就将整套系统的兼容性强、可移植性高作为初衷,无论是本次比赛用的LPC55S69还是只有64k内存低功耗系列,均能够成功部署这一套系统。

虽然项目已经完成,但是其中很多地方可以改进,譬如屏幕的刷新率问题、LPC55S69的PowerQuad更深入使用等等,这些都可以极大的提升使用体验。项目的PC端和开发板端的代码我都上传了,希望能给想要入门神经网络的道友们一点启发。神经网络没有很高的门槛,最重要的就是理解参数的计算。

彩蛋

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20200703A04QRY00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券