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

为树莓派3b部署手写数字识别卷积神经网络

《e络盟杯树莓派创意设计大赛》

三等奖 作品

简介

在2012年的ImageNet竞赛上,基于卷积神经网络的AlexNet横空出世,以绝对优势拿下冠军。从那以后,人们开始认识到神经网络在图像识别领域具有巨大的潜力。其实早在1986年时,LeCun就发表了Lenet,但是由于计算能力等问题,神经网络一直没有流行起来。直到2012年,Hinton和他的弟子Alex创新地使用两块Gtx 580进行神经网络的计算,才使得计算能力的问题在一定程度上得到了解决。

同样是因为计算能力的问题,现在的神经网络训练甚至使用都得在装有高级显卡的服务器或者PC上运行,使得神经网络的应用场景受到很大的限制。

为了让神经网络能在嵌入式设备上运行(如树莓派3b),微软发布了Embedded Learning Library (以下简称ELL)。ELL允许开发者将神经网络的模型部署到资源有限的嵌入式设备中,比如Raspberry Pi,Arduino和micro:bit等。这些网络可以在本地运行,不需要和云端交换数据,不用网络连接也可以运行。

本文的目标就是使用ELL将Lenet部署到树莓派中,让树莓派可以识别手写字符。

项目需要的软硬件:

卷积神经网络的原理:

卷积神经网络在当前计算机视觉,自然语言处理,自动驾驶技术中都有非常广泛的应用。就计算机视觉来说,卷积神经网络是google net, vgg net, gan等的重要组成部分。这里我们简要的介绍下神经网络,卷积神经网络的原理。

神经网络:

图1中为单个神经元的模型。该神经元可以看作一个计算单元,输入为(其中+1表示添加一个偏置,也就是后面的+b,这是为了编程方便),输出为。称为激活函数(activation function)。

图1. 单个神经元

神经网络就是有多个神经元组成的,如图2为一个神经网络的模型。图中最左边的称为输入层,最右边的称为输出层,中间的为计算单元。

图2. 神经网络

在这个网络中,输入层是给定的,输出层是输入层经过计算layer 计算出来的。因此,网络中可以训练的参数在中。

图中神经网络的计算过程为:

我们将上面的过程称为前向传播。

神经网络除了前向传播算法,还有方向传播算法,因为树莓派中部署了网络以后用到的主要是前向传播,因此就不再介绍。

卷积神经网络

图3为卷积神经网络的计算过程。黄色部分代表卷积核,绿色的部分代表输入的数据(如图像),粉色的为输出的数据。

图3. 卷积神经网络的计算过程

与神经网络类似,卷积核参数可以表示为。卷积核在图像上计算,移位,再计算,再移位,往复循环,最终得到一个输出矩阵。

每次计算可以表示为:

上面描述的为卷积神经网络的前向传播过程,在树莓派中用到的也是卷积神经网络的前向传播过程。

Lenet介绍

Lenet是由Yan Lecun提出的用来识别手写字母的卷积神经网络。该网络包含两个卷积和两个全连接层。

ELL介绍

ELL是微软推出的可用于嵌入式设备的神经网络框架。在官网里面有用于树莓派3b上的教程,在教程中使用的是用于ImageNet的模型。因此他的模型比较大,在树莓派上跑的时候速度比较慢。因此,我需要自己训练模型,移植到树莓派上。训练模型的时候用到的是CNTK。

CNTK介绍

CNTK(Cognitive Tooki)是微软推出的一款开源的深度学习框架。他用代码来构建深度学习的运算图。CNTK中包含了神经网络所需的DNN,CNN,RNN/LSTM单元,SGD,ADAM等学习算法也一应俱全。同时,CNTK支持使用GPU进行计算。除此之外,CNTK支持的编程语言非常广泛,包括python,C, C++, C#等等。CNTK训练出来的模型可以直接使用ELL进行转换,因此,我们使用CNTK。

过程

请见github地址*

在PC上安装ELL

参考链接*在ubuntu系统的电脑上安装ELL。具体过程就不描述了,严格对照安装指南中的版本号检测自己的GCC和CMAKE基本上不会出现问题。

在树莓派3b上安装ELL

根据github*再树莓派3b上安装ELL。

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

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券