团队名称:就你手搓CPU是吧
报名编号:CICC1607
文章编号:2
我们组计划计划基于E203内核搭建用于手势识别任务的智能Soc,算法方面选择了轻量级网路LeNet-5。它是个经典的卷积神经网路结构,常用于手写数字和英文字母的识别。在这里我们用于完成我们的手势识别任务。它的结构如下所示:
第一层是输入层,大小为输入图像的尺寸,由于采用灰度图,故为32* 32* 1,接下来进行卷积+池化操作,共两次,之后将得到的特征展开输入全连接层,最后输出种类。
事实上,卷积核大小、卷积核个数(特征图需要多少个)、池化核大小(采样率多少)这些参数都是变化的,这就是所谓的CNN调参,需要根据任务需要进行不同的选择。
在我们自己训练时,对部分参数进行了调整。为了兼顾效率与精度,我们采取40*40的网络输入。数据集如下所示,共包含120000张图片,进行旋转等操作后喂入神经网络。
采用pytorch进行训练,设置交叉熵损失函数,SGD优化器,训练过程如下所示:
epoch = 0 train_acc = 0.772 test_acc = 0.918
epoch = 1 train_acc = 0.942 test_acc = 0.952
epoch = 2 train_acc = 0.963 test_acc = 0.899
epoch = 3 train_acc = 0.972 test_acc = 0.873
epoch = 4 train_acc = 0.977 test_acc = 0.967
epoch = 5 train_acc = 0.984 test_acc = 0.642
epoch = 6 train_acc = 0.978 test_acc = 0.976
epoch = 0 train_acc = 0.708 test_acc = 0.815
epoch = 1 train_acc = 0.91 test_acc = 0.927
epoch = 2 train_acc = 0.946 test_acc = 0.852
epoch = 3 train_acc = 0.963 test_acc = 0.947
epoch = 4 train_acc = 0.973 test_acc = 0.952
epoch = 5 train_acc = 0.98 test_acc = 0.973
epoch = 6 train_acc = 0.986 test_acc = 0.856
epoch = 7 train_acc = 0.988 test_acc = 0.977
epoch = 8 train_acc = 0.991 test_acc = 0.978
训练过程很快就收敛了,得到了300k左右大小的模型,在可接受范围内。这一模型用于后续完成手势识别任务。