摘? 要? 以人工智能課程中的卷積神經(jīng)網(wǎng)絡(luò)算法為例,設(shè)計基于人工智能開發(fā)板的應(yīng)用案例進行實驗教學(xué),在幫助學(xué)生掌握算法理論的同時,有效培養(yǎng)其工程實踐能力。
關(guān)鍵詞? 人工智能;卷積神經(jīng)網(wǎng)絡(luò);K210開發(fā)板;機器學(xué)習(xí);邊緣智能
中圖分類號:G633.67? ? 文獻標識碼:B
文章編號:1671-489X(2022)17-0031-03
0? 引言
目前,人工智能課程教學(xué)已在中小學(xué)普遍實施,因課程專業(yè)理論體系涉及數(shù)學(xué)、計算機軟硬件等課程基礎(chǔ),給課程的有效落地實施帶來一定難度。日常教學(xué)如單純等同于一般計算機語言教學(xué),則會使學(xué)生感覺枯燥乏味;在教學(xué)實踐中如恰當引入開源硬件單片機實驗教學(xué),則會使課程實施達到事半功倍的效果。機器學(xué)習(xí)系統(tǒng)的訓(xùn)練通常在電源充足和計算性能強勁的遠程服務(wù)器中及云端進行,當訓(xùn)練完成后,機器學(xué)習(xí)系統(tǒng)就可以依據(jù)經(jīng)驗自動分析新的數(shù)據(jù)即推演。機器學(xué)習(xí)系統(tǒng)的推演過程通常在本地即在邊緣設(shè)備完成。為此,為增強機器學(xué)習(xí)課程教學(xué)實效,突出工程實踐性教學(xué),教學(xué)中在通俗講解機器學(xué)習(xí)課程算法基礎(chǔ)和模型實現(xiàn)的基礎(chǔ)上,增設(shè)邊緣智能實驗的教學(xué)設(shè)計環(huán)節(jié),從而極大對提高學(xué)生學(xué)習(xí)的興趣和課堂教學(xué)質(zhì)量。以下從經(jīng)典的深度學(xué)習(xí)模型卷積神經(jīng)網(wǎng)絡(luò)算法分析入手,基于K210開發(fā)板進行邊緣智能實驗設(shè)計。
1? 卷積神經(jīng)網(wǎng)絡(luò)算法分析
通常數(shù)學(xué)卷積的卷積核需要翻轉(zhuǎn),而卷積神經(jīng)網(wǎng)絡(luò)的卷積是提取圖像特征進行加權(quán)求和,不翻轉(zhuǎn),稱為互相關(guān),也稱為不翻轉(zhuǎn)卷積,其卷積核是根據(jù)數(shù)據(jù)訓(xùn)練學(xué)習(xí)的參數(shù),不是給定的,無論翻轉(zhuǎn)與否,對應(yīng)的都是待學(xué)習(xí)的未知參數(shù)。卷積神經(jīng)網(wǎng)絡(luò)(CNN)與全連接神經(jīng)網(wǎng)絡(luò)(DNN)都屬于前饋神經(jīng)網(wǎng)絡(luò),其正向傳播的算法原理大致相同,整個網(wǎng)絡(luò)可看作一個復(fù)合函數(shù)。按照現(xiàn)有經(jīng)典著作講解卷積神經(jīng)網(wǎng)絡(luò)計算損失函數(shù)關(guān)于權(quán)重參數(shù)梯度的常規(guī)算法非常煩瑣。為此,借鑒計算機進行矩陣運算轉(zhuǎn)為向量運算這一思想,將卷積核和卷積層矩陣平鋪拼接為向量形式,就得到類似全連接神經(jīng)網(wǎng)絡(luò)的前向傳播公式,相應(yīng)的反向傳播求導(dǎo)就可以簡化。
1.1? 卷積圖像轉(zhuǎn)為列向量(求傳播誤差)
1.1.1? 前向傳播
將待卷積圖像矩陣(按行向量優(yōu)先)轉(zhuǎn)為列向量X(活性值)、卷積核W(按行向量優(yōu)先)拼接為行向量(與待卷積圖像矩陣元素不相關(guān)的對應(yīng)位置處以0為間隔拼接),以卷積子圖像數(shù)為矩陣行數(shù)轉(zhuǎn)換成新矩陣A,由矩陣相乘再加偏置向量b得到卷積后列向量Y(凈活性值),等價于卷積圖像與卷積核W做互相關(guān)運算(特稱為正向卷積,為窄卷積)。卷積神經(jīng)網(wǎng)絡(luò)l層的前向傳播公式變?yōu)椋篩=AXl+b,Xl=f(Yl-1)。
1.1.2? 反向傳播
卷積操作通過仿射變換(Y=AX)可實現(xiàn)由高維特征到低維特征的轉(zhuǎn)換,也可以轉(zhuǎn)置A實現(xiàn)低維到高維的反向映射。如果對上述卷積核經(jīng)鋪開拼接得到的矩陣A進行轉(zhuǎn)置,然后與低維輸入向量Y做矩陣乘法即反向映射,得到高維輸出向量X,等價于卷積核W與正向卷積的輸出圖像做數(shù)學(xué)卷積運算(稱為轉(zhuǎn)置卷積或反卷積,為寬卷積)[1]。
1.2? 卷積核轉(zhuǎn)為列向量(求參數(shù)梯度)
1.2.1? 前向傳播? 將卷積核矩陣所有行拼接為一個列向量(W),將輸入圖像X每個卷積子圖像(按照行優(yōu)先)拼接為一個行向量,所有卷積子圖像形成的行向量按原定的卷積順序組合形成矩陣A(矩陣行數(shù)為卷積子圖像數(shù)),前向傳播公式等價為:Y=AW+b。
1.2.2? 反向傳播
同樣可以借助轉(zhuǎn)置卷積,此轉(zhuǎn)置卷積等價于輸入卷積圖像與卷積輸出圖像做互相關(guān)運算(為窄卷積)。根據(jù)卷積核或卷積圖像轉(zhuǎn)為列向量的前向傳播公式對偏置向量求導(dǎo),為便于與對W求偏導(dǎo)數(shù)相統(tǒng)一,借助將卷積核轉(zhuǎn)為列向量的前向傳播公式Y(jié)=AW+b求導(dǎo)。
1.3? 匯聚層求導(dǎo)
因匯聚層為下采樣操作,當?shù)趌層為匯聚層時,采取上采樣由l層的損失函數(shù)誤差得到第l-1層的損失函數(shù)誤差。上采樣之后,由于匯聚是一個線性函數(shù)的過程,因此要求針對上一層的Yl-1的梯度,中間只有一個上一層的Yl-1到Xl的激活函數(shù)。匯聚層下采樣有平均匯聚和最大匯聚兩種方法。
2? 邊緣智能實驗設(shè)計
剖析卷積神經(jīng)網(wǎng)絡(luò)模型算法原理后,便可以借助TensorFlow等深度學(xué)習(xí)開發(fā)框架進行模型訓(xùn)練和測試,通常將由TensorFlow保存的HDF5模型轉(zhuǎn)換為TFLite格式,在正式進入邊緣智能實驗之前,由于NNC模型量化工具對TFLite格式支持較好,故需在電腦上將訓(xùn)練完成的模型轉(zhuǎn)換為TFLite格式后再進行量化,生成KModel格式模型(由NNCase
工具轉(zhuǎn)換)供K210單片機調(diào)用。K210芯片架構(gòu)包含一個自研的神經(jīng)網(wǎng)絡(luò)硬件加速器KPU以便進行卷積神經(jīng)網(wǎng)絡(luò)運算。KPU支持主流訓(xùn)練框架按照特定限制規(guī)則訓(xùn)練出來的定點化模型。教學(xué)實踐中以亞博智能K210開發(fā)板為載體,下載已在外部設(shè)備訓(xùn)練好的普適模型,基于開發(fā)板自帶傳感設(shè)備采集的數(shù)據(jù)進行測試預(yù)測,從而實現(xiàn)一定功能。以下以亞博智能K210開發(fā)板(技術(shù)資料參考亞博智能K210開發(fā)板套件)為例,搭建基于C(亞博智能K210開發(fā)板隨機資料只提供C語言學(xué)習(xí)代碼)和Python兩種嵌入式開發(fā)環(huán)境系統(tǒng),調(diào)用卷積神經(jīng)網(wǎng)絡(luò)模型對人臉識別案例進行實驗設(shè)計教學(xué)。
2.1? 基于C語言的環(huán)境搭建
人臉檢測技術(shù),一是判斷圖片中是否包含人臉區(qū)域;二是如果圖片中存在人臉,將人臉的位置預(yù)測出來。推薦在Win10系統(tǒng)下通過VSCode編輯器搭建K210的開發(fā)環(huán)境。
2.1.1? 人臉檢測技術(shù)代碼流程及代碼
1)系統(tǒng)內(nèi)部初始化:①系統(tǒng)時鐘初始化;②串口初始化;③硬件引腳初始化;④IO電壓設(shè)置; ⑤系統(tǒng)中斷初始化;⑥Flash初始化。
2)外部硬件初始化:①LCD初始化;②OV2640(攝像頭)初始化。
3)人臉檢測初始化:①模型加載;②人臉檢測層配置初始化。
4)人臉檢測業(yè)務(wù)邏輯層:①等待攝像頭采集完成;②傳入攝像頭采集的圖像到KPU運行模型;③等待KPU處理完成;④獲取KPU最終處理的結(jié)果;⑤把KPU處理的結(jié)果帶入?yún)^(qū)域?qū)佑嬎阕罱K
位置;⑥根據(jù)獲取的人臉個數(shù)進行逐一標記。
核心代碼:
int main(void)
{
sysclock_init();? ?/*系統(tǒng)時鐘初始化*/
uarths_init();? ? ?/*串口初始化*/
hardware_init();? ?/*硬件引腳初始化*/
io_set_power();? ? /*設(shè)置IO口電壓*/
plic_init();? ? ? ?/*系統(tǒng)中斷初始化*/
printf(“flash init\n”);
w25qxx_init(3, 0);? ? ? ? ? ?/*Flash init*/
w25qxx_enable_quad_mode();? ?/*Flash 四
倍模式開啟*/
/*KModel加載方式:1.分開燒錄模式;
2.直接與代碼合并編譯*/
#if LOAD_KMODEL_FROM_FLASH
model_data = (uint8_t*)malloc(KMODEL_
SIZE + 255);
uint8_t *model_data_align(uint8_t*)(((uintptr_t)model_data+255)&(~255));
#else
uint8_t *model_data_align = model_data;
#endif
ov2640_init();
/*加載KModel,需要與NNCase配合使用*/
if (kpu_load_kmodel(&face_detect_task, model_
data_align) != 0)
{
printf(“\nmodel init error\n”);
while (1);
}
2.1.2? 代碼編譯? 把K210隨機資料中的 face_
detection文件夾復(fù)制到SDK中的src目錄下,然后進入build目錄,刪除build目錄下所有文件,最后運行以下命令編譯:
cmake .. -DPROJ=face_detection -G “MinGW Makefiles”?make
編譯完成后在build文件夾下生成對應(yīng)文件名的待燒寫二進制文件。
2.1.3? 代碼燒錄
打開kflash下載程序?qū)⑸傻拇裏龑懚M制文件燒錄到K210開發(fā)板。
2.2? 基于MicroPython的環(huán)境搭建
下載MaixPy固件到K210開發(fā)板(相當于給開發(fā)板燒錄系統(tǒng)),MaixPy使用MicroPython腳本語法[2],不像C語言一樣需要編譯,要使用MaixPy IDE,開發(fā)板固件必須是V0.3.1版本以上,否則MaixPy IDE連接不上開發(fā)板,使用前盡量都更新到最新版以保障能正常使用。通常一個固件文件中至少有四個文件,以“maixpy_v0.5.0_31_gd3e71c0”固件為例,具體說明如下。
1)eif_maixpy_v0.5.0_31_gd3e71c0.7z:普通用戶不用關(guān)心,用于死機調(diào)試。
2)maixpy_v0.5.0_31_gd3e71c0_m5stickv:M5STACK環(huán)境。
3)maixpy_v0.5.0_31_gd3e71c0_minimum:MaixPy固件最小集合,不支持MaixPy IDE,不包含OpenMV的相關(guān)算法。
4)maixpy_v0.5.0_31_gd3e71c0.bin:完整版的MaixPy固件。
正常使用的完整版MaixPy固件,搭建步驟如下所示。
1)確定開發(fā)板:工具—選擇開發(fā)板—kendryte?KD233。
2)安裝驅(qū)動,選擇端口:工具—打開終端—串行端口—COM3—115200。
3)連接:圖標綠色變紅色表示已連接。
主要代碼為:
import sensor
import image
import lcd
import KPU as kpu
import time
from Maix import FPIOA, GPIO
import gc
from fpioa_manager import fm
from board import board_info
import utime
task_fd = kpu.load(0x300000)
task_ld = kpu.load(0x400000)
task_fe = kpu.load(0x500000)
lcd.init()
sensor.reset()
sensor.set_pixformat(sensor.RGB565)
sensor.set_framesize(sensor.QVGA)
sensor.set_hmirror(0)
sensor.set_vflip(0)
sensor.skip_frames()? ? /*跳過一些幀數(shù),因為攝像頭啟動時圖像沒穩(wěn)定*/
lcd.init(invert=1)
sensor.run(1)
3? 結(jié)束語
在機器學(xué)習(xí)課程中引入邊緣智能實驗教學(xué),可以彌補教學(xué)實施“重軟輕硬”(即重視基礎(chǔ)理論教學(xué),忽視實踐應(yīng)用教學(xué))的不足,引導(dǎo)一線教師重視邊緣智能實踐應(yīng)用教學(xué),有效提升人工智能課程的教學(xué)效益,為培養(yǎng)軟硬能力兼?zhèn)涞募夹g(shù)應(yīng)用人才奠定基礎(chǔ)。
參考文獻
[1] 邱錫鵬.神經(jīng)網(wǎng)絡(luò)與深度學(xué)習(xí)[M].北京:機械工業(yè)出版社,2020:115-129.
[2] 邵子揚.MicroPython入門指南[M].北京:電子工業(yè)出版社,2018:6-22.
*項目來源:2021年度山東省教育教學(xué)研究一般課題“中小學(xué)人工智能課程內(nèi)容設(shè)計與實施范例研究”(課題編號:2021JXY383)。
作者:穆明,淄博市基礎(chǔ)教育研究院,高級教師,研究方向為機器學(xué)習(xí)算法(255033)。