基于FPGA的数字识别-实时视频处理的定点卷积神经网络实现
因为之前写的系列文章反应不是特别好,所以还是决定把一些复杂的东西简单化(尽量不写系列文章了),所以本篇文章将会完成所有的内容。
整篇文章主要内容如下所示:
效果:
PS:图像模糊的原因是一个人拍摄相机不好聚焦。
电脑显示数字(手写也可以,要求是浅色背景上检测深色数字(要求是训练集的问题)),通过摄像头采集缓存到SDRAM后在显示屏上显示摄像头数据,然后右下角显示监测到的数字。
下面就简单介绍一下相关知识。
手写数字识别的MNIST数据集(http://yann.lecun.com/exdb/mnist/)广泛应用于计算机视觉领域。然而,并不适合在我们的应用中训练神经网络,因为它与相机图像有很大的不同。主要区别包括:
鉴于MNIST数据集的识别性能非常高,我们将摄像机图像的大小减少到28×28像素,并将其转换为灰度。这有助于我们解决以下问题:
由于图像变换也是在硬件级上执行的,因此必须预先考虑最小的一组算术函数,这些函数可以有效地将图像转换为所需的形式。修改摄像头图像的算法如下所示:
即RGB的权重为5:8:3
为了便于FPGA编程实现,我们可以在FPGA中使用移位实现8的乘法和16的除法。
由此产生的算法简单,适合FPGA实现并且速度非常快。
为了使用MNIST图像训练神经网络,需要把MINIST训练集进行修改:
上诉操作可以使用MATLAB或者Python批量处理。
CNN的体系一直在发展(也就是为什么ASIC没有批量生产,还用FPGA验证一些CNN最新的算法),但是本质仍然是一样,因为我们使用的FPGA是一个入门型的,所以我们也不用最新的CNN。
CNN的本质:输入大小从一层到另一层减小,而过滤器的数量增加。在网络的末端,形成一组特征,这些特征被馈送到分类层,并且输出层指示图像属于特定类别的可能性。
由于使用FPGA实现所以权重的总数对于设计来说是个瓶颈,所以需要最小化存储权重的总数(这对于移动系统至关重要),并促进向定点计算(FPGA只能进行定点计算)的转移:
在将神经网络转换为硬件之前,在准备好的数据集上对其进行训练,并保留软件实现的方式以供测试。使用Keras和Tensorflow后端的软件实现。
在神经网络实现的方案中,在GPU(快速)或CPU(慢速)上使用浮点计算方案是最常见的方案,例如,使用float32类型。在使用FPGA实现时,浮点运算对于这个“硬疙瘩”实在是很难实现,所以我们需要将浮点运算转换成定点计算(在牺牲一点识别率的情况)。
考虑一下神经网络的第一卷积层,它是卷积结构的主要构造。
层输入是一个二维矩阵(原始图片)28×28,其值从[0;1]。当a∈[−1,1]和b∈[−1,1]时,a·b∈[−1, 1].
对于3×3卷积,第二层中特定像素(i,j)的值计算公式如下:
当使用卷积块的定点计算时,有几种不同的策略:
整个硬件架构如下:
整个硬件数据流:摄像头将图像以低频率写入FIFO,然后SDRAM控制器以高频率读取数据。然后FPGA将SDRAM中的数据写入屏幕FIFO。
来自摄像头的图片经过SDRAM后,按原样显示在屏幕上,并将图像转换为灰度并降低分辨率的图像输入到神经网络进行识别。当神经网络操作完成后,结果也直接输出到屏幕上。
逻辑使用率如下所示:
PS:可以通过修改使用的卷积块提高运行速率,但是会占用更多的逻辑。
代码会开源,不过现在还有一些问题,完善后会第一时间开源出来,请持续关注本公众号(OpenFPGA),谢谢大家支持。
[1] Huang, Gao, et al. "Densely connected convolutional networks." CVPR. Vol. 1. No. 2. 2017.
[2] Chen, Liang-Chieh, et al. "Deeplab: Semantic image segmentation with deep convolutional nets, atrous convolution, and fully connected crfs." IEEE transactions on pattern analysis and machine intelligence 40.4 (2018): 834-848.
[3] A. Shvets, A. Rakhlin, A. A. Kalinin, and V. Iglovikov, “Automatic instrument segmentation in robot-assisted surgery using deep learning,” arXiv preprint arXiv:1803.01207, 2018.
[4] Sandler M. et al. “Inverted residuals and linear bottlenecks:Mobile networks for classification, detection and segmentation” arXiv preprint arXiv:1801.04381, 2018.