CIFAR-10(Canadian Institute for Advanced Research - 10)是一個廣泛使用的用于圖像識別的數(shù)據(jù)集。它由10個類別中的60000張32x32彩色圖像組成,每個類別6000張圖像。這10個類別包括飛機(jī)、汽車、鳥類、貓、鹿、狗、青蛙、馬、船和卡車。
該數(shù)據(jù)集被分為訓(xùn)練集(50000張圖像)和測試集(10000張圖像),用于機(jī)器學(xué)習(xí)模型的訓(xùn)練和評估。這個數(shù)據(jù)集很受歡迎,因?yàn)樗鄬^小,適合用于算法迭代和快速測試。它也是一個常用的基準(zhǔn)數(shù)據(jù)集,因?yàn)樗膱D像對于人類和機(jī)器來說都具有一定的挑戰(zhàn)性。CIFAR-10數(shù)據(jù)集被廣泛用于圖像分類、目標(biāo)識別和其他計(jì)算機(jī)視覺任務(wù)的研究和實(shí)驗(yàn)。
在本次中將會使用CIFAR-10數(shù)據(jù)集完成一個完整的MAX78000的神經(jīng)網(wǎng)絡(luò)開發(fā)過程,會使用攝像頭采集圖片,通過CNN加速出推理結(jié)果,再將推理結(jié)果通過串口發(fā)送到電腦端。
整個AI開發(fā)流程如圖所示,訓(xùn)練-量化-評估-生成c代碼。
訓(xùn)練:
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,僅做測試完成整個流程所使用,所以在精確度等方面會有所欠缺,僅僅是做一個測試使用,具體的模型結(jié)構(gòu)如下
量化:
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代碼,將所生產(chǎn)的c代碼工程復(fù)制到電腦上,再進(jìn)行移植,我們僅需cnn.c cnn.h softmax.c weights.h這幾個文件即可,將其復(fù)制到我們的工程目錄下
在這里我們還需要使用攝像頭采集數(shù)據(jù)將數(shù)據(jù)顯示到TFT上,所以我們需要調(diào)用下官方給我們提供的攝像頭API,再將攝像頭采集到的數(shù)據(jù)傳入至CNN加速器中。因?yàn)閿z像頭采集的為32*32尺寸的圖片所以還需要在TFT屏上進(jìn)行放大方便觀察。
通過cnn_unload函數(shù)卸載CNN加速器的推理結(jié)果,然后使用softmax 函數(shù),其中包括尋找最大值、計(jì)算 softmax 分母,以及應(yīng)用這些計(jì)算得到每個輸出元素的值,將輸出的值通過printf函數(shù)打印出推理結(jié)果的百分率。
推理結(jié)果如圖,演示視頻和詳細(xì)代碼可以參考附件。
視頻展示: