jpg 神经网络 手势识别_在STM32上跑神经网络做手势识别

论坛 期权论坛 编程之家     
选择匿名的用户   2021-6-2 16:18   3097   0

为了在Cortex-M的MCU上成功跑起CNN,用的模型是一个不到10层FCN网络,但是即便如此,对于主频只有不到100MHz,SRAM只有不到100K的单片机来说依然是极其吃力的,模型不做量化的话肯定无法做到实时的。

硬件资源:作品硬件自制,使用的MCU是STM32F407。在168 MHz频率下,从Flash存储器执行时,STM32F407单片机能够提供210 DMIPS/566 CoreMark性能,并且利用ART加速器实现了FLASH零等待状态。DSP指令和浮点单元扩大了产品的应用范围。迄今基于Cortex-M内核的微控制器产品中,F407的性能得分是非常高的。

等不及,先展示最终实现结果。实现细节、详细介绍等整理好资料后,再来分享。

知识补给—CNN 与 FCN

4662e2a37beb9d2aa78de618baca74c8.png

通常CNN网络在卷积层之后会接上若干个全连接层, 将卷积层产生的特征图(feature map)映射成一个固定长度的特征向量。以AlexNet为代表的经典CNN结构适合于图像级的分类和回归任务,因为它们最后都期望得到整个输入图像的一个数值描述(概率),比如AlexNet的ImageNet模型输出一个1000维的向量表示输入图像属于每一类的概率(softmax归一化)。

栗子:下图中的猫, 输入AlexNet, 得到一个长为1000的输出向量, 表示输入图像属于每一类的概率, 其中在“tabby cat”这一类统计概率最高。

b6cb56bb54d600b81c38af7455af2ba3.png

FCN对图像进行像素级的分类,从而解决了语义级别的图像分类(semantic segmentation)问题。与经典的CNN在卷积层之后使用全连接层得到固定长度的特征向量进行分类(全联接层+softmax输出)不同,FCN可以接受任意尺寸的输入图像,采用反卷积层对最后一个卷积层的feature map进行上采样, 使它恢复到输入图像相同的尺寸,从而可以对每个像素都产生了一个预测, 同时保留了原始输入图像中的空间信息, 最后在上采样的特征图上进行逐像素分类。

最后逐个像素计算softmax分类的损失, 相当于每一个像素对应一个训练样本。下图是Longjon用于语义分类所采用的全卷积网络(FCN)的结构示意图:

a2e3bb5ba0768656ef52ae1523c43c1e.png

简单的来说,FCN与CNN的区别在把于CNN最后的全连接层换成卷积层,输出的是一张已经Label好的图片。

88f4d4b9b29a59cd715e24eb14681ee8.png

CNN的强大之处在于它的多层结构能自动学习特征,并且可以学习到多个层次的特征:较浅的卷积层感知域较小,学习到一些局部区域的特征;较深的卷积层具有较大的感知域,能够学习到更加抽象一些的特征。这些抽象特征对物体的大小、位置和方向等敏感性更低,从而有助于识别性能的提高。

分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:3875789
帖子:775174
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP