潘 驍,王 勛,蘇冬勝,封李紅,王 軍
(1.廣西生態(tài)工程職業(yè)技術(shù)學(xué)院,廣西 柳州 545004;2.廣西師范大學(xué),廣西 桂林 541004)
森林資源是人類賴以生存的重要資源[1]。我國(guó)幅員遼闊,森林資源和植物類型極為豐富。而森林火災(zāi)突發(fā)性強(qiáng),破壞性大,直接破壞林業(yè)產(chǎn)業(yè)鏈中上游的林木資源,對(duì)生態(tài)環(huán)境與人類生命財(cái)產(chǎn)安全造成極大的威脅[2]。為了避免森林火災(zāi)造成的經(jīng)濟(jì)財(cái)產(chǎn)損失,降低森林火災(zāi)帶來(lái)的威脅,國(guó)內(nèi)外十分重視在森林火災(zāi)檢測(cè)技術(shù)方面的研究探索。
目前,已有的森林火災(zāi)監(jiān)測(cè)主要有人工巡檢、瞭望臺(tái)監(jiān)護(hù)、傳感器感應(yīng)、護(hù)林飛機(jī)、無(wú)人機(jī)航拍和衛(wèi)星遙感監(jiān)測(cè)等多種方法。這些方法對(duì)于森林這種廣范圍、高空間且復(fù)雜的環(huán)境,難以避免空間、時(shí)間、天氣以及設(shè)備高成本局限等問(wèn)題[3]。隨著計(jì)算機(jī)視覺(jué)技術(shù)的快速發(fā)展,當(dāng)前火災(zāi)煙霧和火焰識(shí)別與檢測(cè)均在計(jì)算機(jī)上應(yīng)用卷積神經(jīng)網(wǎng)絡(luò)完成,并沒(méi)有在終端設(shè)備上實(shí)現(xiàn)。本文基于嘉楠科技自主研發(fā)的堪智K210嵌入式AI微控制器,在K210上運(yùn)行YOLO卷積神經(jīng)網(wǎng)絡(luò)對(duì)白天森林火災(zāi)早期煙霧和夜間火焰進(jìn)行識(shí)別,從而及時(shí)預(yù)警,在森林火災(zāi)的防范中具有較好的應(yīng)用價(jià)值。
本系統(tǒng)采用K210芯片作為主控模塊。K210芯片內(nèi)部包含KPU(Knowledge Processing Unit)通用神經(jīng)網(wǎng)絡(luò)處理器,內(nèi)置卷積、批歸一化、激活以及池化運(yùn)算單元[4],支持YOLO、mobilenet等卷積神經(jīng)網(wǎng)絡(luò)實(shí)現(xiàn)物體的識(shí)別[5]。
首先,系統(tǒng)搜集森林火災(zāi)煙霧圖片,將圖片上的煙霧圖像進(jìn)行標(biāo)注,然后通過(guò)Tensorflow深度學(xué)習(xí)開(kāi)源框架得到Kmodel格式的訓(xùn)練模型文件,最后編寫MicroPython程序,調(diào)用YOLOv2-Tiny卷積神經(jīng)網(wǎng)絡(luò)和模型文件,并將模型文件和MicroPython程序部署到K210微控制器上,即可通過(guò)攝像頭識(shí)別檢測(cè)煙霧。系統(tǒng)設(shè)計(jì)流程如圖1所示。
圖1 系統(tǒng)設(shè)計(jì)流程
堪智 K210是嘉楠科技自主研發(fā)的一款采用RISC-V處理器架構(gòu)Dual Core 64 bit內(nèi)核,使用臺(tái)積電超低功耗的28 nm先進(jìn)制程,主頻400 MHz,內(nèi)置8 MB的SRAM,其中6 MB通用SRAM,2 MB AI專用SRAM,并支持TensorFlow、Keras 、Darknet、Caffe等主流深度學(xué)習(xí)框架,總算力可達(dá) 1 TOPS。K210內(nèi)置多種硬件加速單元(KPU、FPU、FFT 等),其中KPU是一種神經(jīng)網(wǎng)絡(luò)處理器,能夠在先前訓(xùn)練的模型上加快推理過(guò)程。KPU內(nèi)置卷積、批歸一化、激活和池化運(yùn)算單元,實(shí)時(shí)工作的最大固定點(diǎn)模型大小為5~5.9 MiB,并支持1×1和3×3卷積內(nèi)核[6]。pyAI-K210模塊核心板如圖2所示。
圖2 K210模塊核心板
本系統(tǒng)的圖像采集模塊采用Omni Vision公司的OV2640 COMS高清攝像頭。OV2640具有單片UXGA攝像頭和影像處理器的所有功能,UXGA圖像最高達(dá)到15幀/秒,SVGA可達(dá) 30幀/秒,CIF可達(dá)60幀/秒,支持圖像同時(shí)輸出到 KPU 和顯示屏。K210模塊的DVP接口可以與兼容DVP接口的OV2640攝像頭相連接,通過(guò)SCCB 協(xié)議配置攝像頭寄存器,即可采集圖像。
顯示模塊采用2.8寸TFT彩色LCD顯示屏,使用8位并口總線進(jìn)行通信。圖像采集與顯示模塊如圖3所示。
在深度學(xué)習(xí)圖像目標(biāo)檢測(cè)算法中,YOLO卷積神經(jīng)網(wǎng)絡(luò)圖像檢測(cè)算法相比于其他兩階段 CNN 算法,YOLO將目標(biāo)檢測(cè)看成一個(gè)回歸問(wèn)題,在模型的輸入輸出端對(duì)圖像進(jìn)行規(guī)范。YOLO通過(guò)輸入端將圖片輸入網(wǎng)絡(luò),在輸出層利用CNN全局特征完成目標(biāo)檢測(cè),同時(shí)完成邊界框回歸[7]。YOLO 是第一個(gè)單階段目標(biāo)檢測(cè)方法,也是第一個(gè)實(shí)現(xiàn)了實(shí)時(shí)目標(biāo)檢測(cè)的方法。
本系統(tǒng)采用YOLOv2-Tiny作為目標(biāo)檢測(cè)網(wǎng)絡(luò)。YOLOv2-Tiny目標(biāo)檢測(cè)模型是由Redmon等[8]在2017年提出的,在YOLO的基礎(chǔ)上加入了細(xì)粒度特性和多尺度訓(xùn)練并簡(jiǎn)化網(wǎng)絡(luò),提高了平均精度、定位的準(zhǔn)確以及召回率。YOLOv2的簡(jiǎn)化版YOLOv2-Tiny只有 9 個(gè)卷積層、6個(gè)最大池化層以及最后1層的檢測(cè)層,非常適用于移動(dòng)和嵌入式設(shè)備[9]。YOLOv2-Tiny的網(wǎng)絡(luò)結(jié)構(gòu)如圖4所示。
圖4 YOLOv2-Tiny網(wǎng)絡(luò)結(jié)構(gòu)
在MaixPy IDE開(kāi)發(fā)平臺(tái)上進(jìn)行MicroPython程序設(shè)計(jì)。首先導(dǎo)入sensor、image、 lcd、 time、KPU等相關(guān)庫(kù),然后進(jìn)行攝像頭傳感器和LCD的初始化配置,最后打開(kāi)攝像頭進(jìn)行圖像采集,運(yùn)行YOLOv2-Tiny卷積神經(jīng)網(wǎng)絡(luò)進(jìn)行目標(biāo)檢測(cè)。當(dāng)檢測(cè)煙霧和火焰目標(biāo)時(shí),對(duì)目標(biāo)進(jìn)行畫(huà)矩形識(shí)別[10]。主要程序代碼如下:
task=None
task = kpu.load(model_addr)#加載模型文件
kpu.init_yolo2(task, 0.5, 0.3, 5, anchors) #初始化YOLOv2-Tiny網(wǎng)絡(luò),其中0.5為threshold值, 0.3為box_iou 門限值,5為錨點(diǎn)數(shù),anchors為錨點(diǎn)參數(shù)
while(True):
img = sensor.snapshot()#采集圖像
objects = kpu.run_yolo2(task, img)#運(yùn)行YOLOv2-Tiny網(wǎng)絡(luò)
if objects:
for obj in objects:
pos = obj.rect()#獲得目標(biāo)矩形框位置
img.draw_rectangle(pos,color=(255,0,0))
img.draw_string(pos[0],pos[1],"%s : %.2f" %(labels[obj.classid()], obj.value()), scale=2, color=(255, 0, 0))#顯示標(biāo)簽信息
img.draw_string(0, 200, 'FPS: '+str(clock.fps()), color = (255, 255,255), scale = 2,mono_space = False) #顯示幀數(shù)
lcd.display(img)#顯示圖片
首先,收集森林火災(zāi)煙霧圖像410張,火焰圖像共400張,其中80%作為訓(xùn)練集,20%作為測(cè)試集。其次,對(duì)圖像中的煙霧和火焰形態(tài)進(jìn)行數(shù)據(jù)標(biāo)注,并建立“Smog”和“Fire”標(biāo)簽。最后,在Maix Hub在線Tensorflow深度學(xué)習(xí)框架上設(shè)置訓(xùn)練超參數(shù):迭代次數(shù)為180次,批數(shù)據(jù)量大小設(shè)置為32,最大學(xué)習(xí)效率為0.001。模型訓(xùn)練結(jié)果如圖5所示。
圖5 模型訓(xùn)練損失和平均準(zhǔn)確率
將訓(xùn)練好的文件通過(guò)nncase工具將其轉(zhuǎn)換為kmodel格式文件,和main.py程序文件一起保存至SD卡根目錄下,并插入pyAI-K210硬件模塊,將模塊通電測(cè)試。通過(guò)攝像頭對(duì)100張森林火災(zāi)煙霧和100張火焰圖像進(jìn)行采集,其中,正確識(shí)別檢測(cè)到煙霧形態(tài)91張,識(shí)別檢測(cè)火焰形態(tài)90張,準(zhǔn)確率分別為91%和90%。部分煙霧及火焰檢測(cè)結(jié)果分別如圖6—7所示。
圖6 森林火災(zāi)煙霧識(shí)別結(jié)果
圖7 森林火焰識(shí)別結(jié)果
本文設(shè)計(jì)的基于K210嵌入式AI的森林火災(zāi)圖像檢測(cè)系統(tǒng),在K210上運(yùn)行YOLOv2-Tiny網(wǎng)絡(luò),加載訓(xùn)練好的模型文件,通過(guò)攝像頭采集圖像并識(shí)別檢測(cè),在本測(cè)試集下煙霧和火焰識(shí)別檢測(cè)準(zhǔn)確度分別達(dá)91%和90%。系統(tǒng)具有本地計(jì)算、響應(yīng)速度快、非接觸式、無(wú)時(shí)空限制、檢測(cè)范圍廣等優(yōu)點(diǎn),便于對(duì)森林火災(zāi)早期煙霧和火焰進(jìn)行檢測(cè),為嵌入式AI技術(shù)在森林火災(zāi)檢測(cè)工作中的應(yīng)用提供技術(shù)參考。