CIFAR-10(Canadian Institute for Advanced Research - 10)是一个广泛使用的用于图像识别的数据集。它由10个类别中的60000张32x32彩色图像组成,每个类别6000张图像。这10个类别包括飞机、汽车、鸟类、猫、鹿、狗、青蛙、马、船和卡车。
该数据集被分为训练集(50000张图像)和测试集(10000张图像),用于机器学习模型的训练和评估。这个数据集很受欢迎,因为它相对较小,适合用于算法迭代和快速测试。它也是一个常用的基准数据集,因为它的图像对于人类和机器来说都具有一定的挑战性。CIFAR-10数据集被广泛用于图像分类、目标识别和其他计算机视觉任务的研究和实验。
在本次中将会使用CIFAR-10数据集完成一个完整的MAX78000的神经网络开发过程,会使用摄像头采集图片,通过CNN加速出推理结果,再将推理结果通过串口发送到电脑端。
整个AI开发流程如图所示,训练-量化-评估-生成c代码。
训练:
python train.py --deterministic --epochs 300 --optimizer Adam --lr 0.001 --wd 0 --compress policies/schedule-cifar-nas.yaml --model my_cifar10 --dataset CIFAR10 --device MAX78000 --batch-size 100 --print-freq 100 --validation-split 0 --use-bias --qat-policy policies/qat_policy_late_cifar.yaml --confusion
需要注意的是在这里我所使用的model为自己随便写的,并没有采用官方的model,仅做测试完成整个流程所使用,所以在精确度等方面会有所欠缺,仅仅是做一个测试使用,具体的模型结构如下
量化:
python quantize.py trained/my_cifar10.pth.tar trained/my_cifar10-q.pth.tar --device MAX78000 -v
评估:
python train.py --model my_cifar10 --dataset CIFAR10 --evaluate --device MAX78000 --exp-load-weights-from ../ai8x-synthesis/trained/my_cifar10-q.pth.tar -8 --use-bias
生成C代码:
python ai8xize.py --test-dir demos --prefix my_cifar10 --checkpoint-file trained/my_cifar10-q.pth.tar --config-file networks/my_cifar10.yaml --sample-input tests/sample_cifar-10.npy --softmax --device MAX78000 --timer 0 --display-checkpoint –verbose –fifo
至此我们成功生成了c代码,将所生产的c代码工程复制到电脑上,再进行移植,我们仅需cnn.c cnn.h softmax.c weights.h这几个文件即可,将其复制到我们的工程目录下
在这里我们还需要使用摄像头采集数据将数据显示到TFT上,所以我们需要调用下官方给我们提供的摄像头API,再将摄像头采集到的数据传入至CNN加速器中。因为摄像头采集的为32*32尺寸的图片所以还需要在TFT屏上进行放大方便观察。
通过cnn_unload函数卸载CNN加速器的推理结果,然后使用softmax 函数,其中包括寻找最大值、计算 softmax 分母,以及应用这些计算得到每个输出元素的值,将输出的值通过printf函数打印出推理结果的百分率。
推理结果如图,演示视频和详细代码可以参考附件。
视频展示: