卷积神经网络训练与硬件加速器实现? 图像识别系统的第二部分是 CNN 加速器,CNN 加速器的实现包含训练与推理两个阶段。 一是卷积神经网络训练,提取相应的权重值和偏置值,即训练阶段。二是根据网络模型实现 卷积神经网络,并做硬件加速,提升卷积神经网络运算的速率,即推理阶段。? ?卷积神经网络训练? 4.1.1 卷积神经网络模型搭建? 本文采用的 Flowers ?Recognition 数据集由 4242 张花卉图片组成,共 ?5 ?个类别,分别是 雏菊、郁金香、玫瑰、向日葵和蒲公英,每一类大约包含 800 张图片,且每张图片的大小大 约为 320×240。但每张图片并没有缩放到统一的大小,具有的不同的比例。? 本文采用 VGG[9]网络为卷积神经网络模型,它是牛津大学的 Visual Geometry Group 组在 2014 年 ILSVRC 竞赛中提出的。其中 VGG-11 网络由 8 个卷积层、5 个池化层和 3 个全连接 层构成,输入 224×224×3 的图像数据,输出 1000 类物体分类的结果。针对 Flowers Recognition 数据集的特征分布特点,本文保持 VGG-11 网络卷积层和池化层的网络结构不变,调整全连 接层的网络结构,将最后三层的全连接层的输出通道数分别修改为 1024、128 和 5,得到如 图 4.1 所示的 VGG-11 网络结构。?
按照图 4.1 所示的网络结构搭建卷积神经网络,本文采用 PyTorch[17]神经网络框架实现。 PyTorch 神经网络框架提供在 ImageNet[57]数据集中预训练好的 VGG-11 网络模型,且 ImageNet 数据集中包含部分花卉图片,故采用迁移学习[58]的方式训练 VGG-11 网络。
4.1.2 参数提取? CNN 网络训练完毕后,采用 PyTorch 神经网络框架将卷积神经网络模型及其参数保存在 pt 文件中。而 PyTorch 神经网络框架提供了 load 方法,可以很方便地读取文件中保存的参数, 但输出格式为张量,无法直接使用。故先转换为 Numpy[61]的数据格式,再提取其中的参数, 以固定的格式保存数据,按照如算法 4.1 所示的伪代码实现。
?如 CNN 网络中最后一层全连接层的权重的大小为 128×5,则 Numpy 保存的数据为 128 行 5 列的数组,shape(array)[0]、shape(array)[1]对应的数值分别为 128、5,array[i][j]则对应于 数组 array 中 i 行 j 列的元素,并在每一个元素后添加换行符。? CNN 网络中所有层的偏置值和卷积层的权重值与全连接层的权重值的维度有所不同,可 按照类似的算法提取并保存参数。提取出来的数据,保存至 bin 文件中,再将 bin 文件拷贝到 SD 卡,从 SD 卡中读取相应的权重值和偏置值。?
?
|