李碩,陳春雨,劉文龍
哈爾濱工程大學(xué) 信息與通信工程學(xué)院,黑龍江 哈爾濱 150001
近些年,隨著深度學(xué)習(xí)和移動(dòng)互聯(lián)網(wǎng)的不斷發(fā)展,大數(shù)據(jù)和人工智能越來(lái)越和我們的日常生活息息相關(guān),將很多人工智能移植應(yīng)用在移動(dòng)端上也成了熱點(diǎn)研究問(wèn)題。如何將深度學(xué)習(xí)和移動(dòng)應(yīng)用緊密結(jié)合起來(lái),快速高效地在移動(dòng)端[1]部署深度學(xué)習(xí)模型成為了熱門(mén)話(huà)題。但由于在深度學(xué)習(xí)中,很多模型太大致使在嵌入式平臺(tái)[2]和移動(dòng)設(shè)備上使用不方便已經(jīng)成為當(dāng)前移動(dòng)部署所面臨的一大問(wèn)題。目前,很多模型例如分類(lèi)算法的模型大小基本都在500 MB 以上,在自然語(yǔ)言處理的模型方面其模型大小有很多在1 GB 以上,機(jī)器翻譯的模型大都也在500 MB 以上。對(duì)于嵌入式設(shè)備或一部手機(jī)來(lái)說(shuō),很難實(shí)現(xiàn)加載一個(gè)超過(guò)500 MB的模型。所以,怎么樣把一個(gè)大模型轉(zhuǎn)換成小模型是當(dāng)前面臨的一個(gè)嚴(yán)峻挑戰(zhàn)。因?yàn)樵谝苿?dòng)設(shè)備上,不僅是對(duì)存儲(chǔ)空間或者是內(nèi)存的限制,更多的是受限于能源消耗。因此,在移動(dòng)端不允許我們使用太大的模型。近年來(lái),我國(guó)的養(yǎng)殖業(yè)迅速發(fā)展,每年生豬出欄總數(shù)不斷創(chuàng)歷史新高。至2018 年底,我國(guó)生豬全年產(chǎn)量已突破7.2 億頭,與2000 年比較,增速為41%[3]。隨著養(yǎng)殖場(chǎng)向著更大規(guī)模發(fā)展,傳統(tǒng)人工觀察、飼養(yǎng)已經(jīng)無(wú)法滿(mǎn)足養(yǎng)殖的高效性,現(xiàn)代的、科學(xué)的生豬養(yǎng)殖模式被逐步推廣。在傳統(tǒng)的檢測(cè)系統(tǒng)中,對(duì)于豬只的個(gè)體識(shí)別主要采用耳標(biāo)射頻識(shí)別(radio frequency identification,RFID)技術(shù),但該技術(shù)在一定程度上會(huì)干擾豬只的正常生活[4],并且當(dāng)多個(gè)RFID 應(yīng)答器接近于接收器時(shí),低頻RFID 無(wú)法準(zhǔn)確識(shí)別出特定個(gè)體[5]。
本系統(tǒng)采用豬場(chǎng)數(shù)據(jù)集是帶有快速反應(yīng)(quick response,QR)二維碼的耳標(biāo),數(shù)據(jù)集使用的QR 二維碼耳標(biāo)如圖1 所示,其具有能存儲(chǔ)大量信息、對(duì)變臟和破損的適應(yīng)能力強(qiáng)且可以從任意方向進(jìn)行讀取的特點(diǎn)。
圖1 QR 二維碼耳標(biāo)
本系統(tǒng)共分為2 部分:耳標(biāo)檢測(cè)和耳標(biāo)識(shí)別。利用神經(jīng)網(wǎng)絡(luò)模型對(duì)耳標(biāo)進(jìn)行檢測(cè),判斷豬只是否帶有耳標(biāo);同時(shí)采用ZXing 技術(shù)對(duì)于豬只的QR 二維碼耳標(biāo)進(jìn)行豬只個(gè)體身份識(shí)別,并且完成了在移動(dòng)端框架上的部署。在耳標(biāo)檢測(cè)部分,由于卷積神經(jīng)網(wǎng)絡(luò)在很多任務(wù)上效果很好但其學(xué)到的內(nèi)容和規(guī)則很難用人類(lèi)理解的方式來(lái)呈現(xiàn)(相對(duì)于傳統(tǒng)機(jī)器學(xué)習(xí)算法例如決策樹(shù)或者邏輯回歸等),所以被很多人認(rèn)為是“黑盒”。本系統(tǒng)使用CAM[6]方法可視化模型感興趣的區(qū)域,增加模型的可信性。
本系統(tǒng)由耳標(biāo)檢測(cè)和耳標(biāo)識(shí)別(對(duì)應(yīng)豬只個(gè)體身份)構(gòu)成,系統(tǒng)結(jié)構(gòu)如圖2 所示。利用移動(dòng)神經(jīng)網(wǎng)絡(luò)(mobile neural network,MNN)框架搭建的調(diào)用程序,同時(shí)調(diào)用耳標(biāo)檢測(cè)模塊和耳標(biāo)識(shí)別模塊。對(duì)于檢測(cè)到耳標(biāo)的時(shí)候查看耳標(biāo)識(shí)別的結(jié)果,最后對(duì)于檢測(cè)到耳標(biāo)但沒(méi)有識(shí)別結(jié)果的圖像數(shù)據(jù)進(jìn)行分析,尋找沒(méi)有識(shí)別的原因。
圖2 系統(tǒng)結(jié)構(gòu)
本系統(tǒng)耳標(biāo)檢測(cè)部分的設(shè)計(jì)流程如圖3 所示。
圖3 設(shè)計(jì)流程
首先對(duì)豬場(chǎng)的豬只數(shù)據(jù)進(jìn)行采集,制作成豬只可視耳標(biāo)的數(shù)據(jù)集,在電腦端利用PyTorch 框架搭建模型,對(duì)標(biāo)記好的數(shù)據(jù)集進(jìn)行訓(xùn)練。當(dāng)模型收斂至一定程度后,生成開(kāi)放神經(jīng)網(wǎng)絡(luò)交換[7](open neural network exchange,ONNX)格式文件,可用于模型在不同框架之間進(jìn)行轉(zhuǎn)移。再利用MNN轉(zhuǎn)化的應(yīng)用程序編程接口(application programming interface,API)將ONNX 格式文件轉(zhuǎn)換為MNN 類(lèi)型的模型文件。
1.2.1 算法選擇
目前常見(jiàn)的分類(lèi)網(wǎng)絡(luò)有ResNet[8],VGG-16[9],Inception-V4[10]等,根據(jù)文獻(xiàn)[11]中提到的在ImageNet數(shù)據(jù)集上與其他網(wǎng)絡(luò)從參數(shù)量、TOP-1、浮點(diǎn)運(yùn)算數(shù)(floating point operations,F(xiàn)LOPs)進(jìn)行對(duì)比,結(jié)果如表1 所示,由表1 可知,MobileNet_V3 small網(wǎng)絡(luò)在準(zhǔn)確率(TOP-1)上不如MobileNet_V2 和MnasNet 網(wǎng)絡(luò),但參數(shù)量和向前推理的計(jì)算量小于其他網(wǎng)絡(luò),尤其是FLOPs,即向前推理的計(jì)算量遠(yuǎn)小于其他網(wǎng)絡(luò)。在本系統(tǒng)中,出于對(duì)精度和延時(shí)時(shí)間的綜合考慮,選擇了更適合部署在嵌入式設(shè)備上的基于寬度因子和分辨率因子[12]構(gòu)建合適規(guī)模、合適速度的MobileNet_V3 small 網(wǎng)絡(luò)結(jié)構(gòu)。
表1 網(wǎng)絡(luò)對(duì)比
網(wǎng)絡(luò)基本結(jié)構(gòu)如圖4 所示,網(wǎng)絡(luò)的整體配置清單[11]如表2 所示。其網(wǎng)絡(luò)結(jié)構(gòu)的基本思想是把空間的相關(guān)性和通道間的相關(guān)性完全分離出來(lái),同時(shí)減少計(jì)算量和參數(shù)量[13]。由于在MobileNet_V3 small 的網(wǎng)絡(luò)結(jié)構(gòu)中使用了大量的3×3 卷積核,不僅對(duì)于模型的準(zhǔn)確率的影響較小,同時(shí)可以大大減少計(jì)算量,在保障了模型的準(zhǔn)確率的同時(shí)也加快了模型運(yùn)算的速度。
圖4 網(wǎng)絡(luò)基本結(jié)構(gòu)
表2 網(wǎng)絡(luò)整體配置清單
1.2.2 移動(dòng)端推理框架選擇
MNN 是一個(gè)輕量級(jí)的深度神經(jīng)網(wǎng)絡(luò)推理引擎,對(duì)于深度卷積神經(jīng)網(wǎng)絡(luò)的模型,在端側(cè)加載并且進(jìn)行推理和預(yù)測(cè)。跟Tensorflow、Caffe2 這些能同時(shí)進(jìn)行訓(xùn)練和推理功能的通用框架不同的是,MNN 更注重于模型在推理階段的加速和優(yōu)化,這樣是為了更好地提高在模型部署階段的效率,進(jìn)而可以更高效地在移動(dòng)端實(shí)現(xiàn)模型背后的業(yè)務(wù)。在大規(guī)模機(jī)器學(xué)習(xí)的應(yīng)用當(dāng)中,端智能應(yīng)用的最重要的模塊就是端側(cè)的推理引擎。由于大規(guī)模模型的部署在推理側(cè)中的計(jì)算量很大,約為訓(xùn)練側(cè)的10 倍以上,需要在有限算力和內(nèi)存等限制條件下充分利用資源,快速完成推理,所以對(duì)于推理側(cè)的優(yōu)化就顯得十分重要??傮w來(lái)說(shuō),模型是否能在端側(cè)運(yùn)行的最大決定因素就是端側(cè)推理引擎的優(yōu)劣,MNN 是一個(gè)可利用的且具有巨大優(yōu)勢(shì)的端側(cè)推理引擎。
1.2.3 嵌入式平臺(tái)選擇
本系統(tǒng)選取樹(shù)莓派4B[14]作為嵌入式平臺(tái),樹(shù)莓派4B 是個(gè)微型卡片式計(jì)算機(jī),可以支持Windows操作系統(tǒng)或Linux 操作系統(tǒng)的運(yùn)行,應(yīng)用在物聯(lián)網(wǎng)和嵌入式中,同時(shí)還可以當(dāng)作小型的服務(wù)器使用,完成某些特定的功能。與51 單片機(jī)和STM32等嵌入式微控制器相比,不僅可以使用IO 引腳完成同樣的控制操作,由于運(yùn)行有相應(yīng)的操作系統(tǒng),還可以實(shí)現(xiàn)更復(fù)雜的任務(wù)管理與調(diào)度,給開(kāi)發(fā)者們開(kāi)發(fā)更上層的應(yīng)用,提供了更大的操作和應(yīng)用空間。樹(shù)莓派可以將底層硬件和上層應(yīng)用連接起來(lái),實(shí)現(xiàn)物聯(lián)網(wǎng)的云控制與云管理,同時(shí)也可以將IO 控制忽略,直接使用樹(shù)莓派通過(guò)搭建小型網(wǎng)絡(luò)服務(wù)器來(lái)實(shí)現(xiàn)測(cè)試開(kāi)發(fā)的功能和服務(wù)。樹(shù)莓派提供的IO 引腳與通用的PC 不同的地方還在于其可以直接對(duì)其他底層硬件進(jìn)行控制,完成通用PC 做不到的功能,且其體積和成本更小。
本系統(tǒng)采用ZXing 技術(shù)對(duì)QR 二維碼耳標(biāo)進(jìn)行豬只個(gè)體身份識(shí)別。ZXing 是谷歌推出的用來(lái)識(shí)別多種格式條形碼的項(xiàng)目[15]。其API 包含了多種主流編程語(yǔ)言,具有良好的可定制性和擴(kuò)展性。
ZXing 庫(kù)支持以下格式的條形碼編碼和解碼:UPC-A,UPC-E;EAN-8,EAN-13;39 碼;93 碼;QR 碼;數(shù)據(jù)矩陣等等。它的主要部分支持以下幾個(gè)功能:核心代碼的使用、適用于J2SE 客戶(hù)端、Android 客戶(hù)端(Barcode Scanner)以及Android 的集成(通過(guò)Intent 支持和Barcode Scanner 的集成)等。
本系統(tǒng)使用類(lèi)激活映射可解釋方法,為卷積神經(jīng)網(wǎng)絡(luò)模型的分類(lèi)圖像作可視化解釋?zhuān)固卣鲄^(qū)域更加明顯可見(jiàn)。通過(guò)CAM 使任何目標(biāo)特征的梯度經(jīng)過(guò)最后一個(gè)卷積層后產(chǎn)生大致的局部特征圖,凸顯出圖像中對(duì)目標(biāo)預(yù)測(cè)分類(lèi)重要的區(qū)域,為模型中的故障模型提供了解釋依據(jù),使看起來(lái)不合理的預(yù)測(cè)有了合理的解釋。
2.1.1 數(shù)據(jù)準(zhǔn)備
本系統(tǒng)使用的數(shù)據(jù)來(lái)自某豬場(chǎng)采集的豬只可視耳標(biāo)圖像共3 512 個(gè)數(shù)據(jù),其中包含1 756 個(gè)224×224 的正樣本(圖像中豬只帶有可視耳標(biāo)),1 756個(gè)224×224 的負(fù)樣本。對(duì)數(shù)據(jù)進(jìn)行隨機(jī)劃分為3 部分,其中訓(xùn)練集占整個(gè)數(shù)據(jù)集的80%,驗(yàn)證集占數(shù)據(jù)集的10%,測(cè)試集占數(shù)據(jù)集的10%。訓(xùn)練集和測(cè)試集、驗(yàn)證集的數(shù)據(jù)量比值大約為8∶1∶1,如表3 所示。
表3 實(shí)驗(yàn)數(shù)據(jù)集劃分
2.1.2 本地模型訓(xùn)練
本系統(tǒng)使用NVIDIA RTX2060 顯卡進(jìn)行模型訓(xùn)練,模型訓(xùn)練的超參數(shù)設(shè)置為:總的迭代次數(shù)設(shè)置為100,批量訓(xùn)練的大小為10,初始學(xué)習(xí)率0.001。其中學(xué)習(xí)率和批次大小根據(jù)實(shí)驗(yàn)設(shè)備的硬性條件調(diào)整得到。
2.1.3 模型轉(zhuǎn)換
為了將模型部署到移動(dòng)端,先利用PyTorch在本地訓(xùn)練模型,當(dāng)模型收斂到一定程度的時(shí)候生成ONNX 模型文件,它也是一種模型文件的格式,再利用MNN 轉(zhuǎn)化的API 將ONNX 格式文件轉(zhuǎn)換為MNN 類(lèi)型的模型文件。模型轉(zhuǎn)換后大小對(duì)比如表4 所示,由表4 可知實(shí)現(xiàn)了86% 的模型尺寸壓縮。
表4 模型大小對(duì)比
2.2.1 硬件實(shí)現(xiàn)
在系統(tǒng)測(cè)試時(shí),樹(shù)莓派硬件連接如圖5 所示。左邊部分為樹(shù)莓派4B 和外接攝像頭,用來(lái)獲取圖像數(shù)據(jù),右邊部分是樹(shù)莓派外接顯示屏顯示程序調(diào)用頁(yè)面。
圖5 硬件連接
2.2.2 功能測(cè)試
對(duì)豬只可視耳標(biāo)數(shù)據(jù)集中測(cè)試集中帶有QR二維碼耳標(biāo)的共178 張數(shù)據(jù)進(jìn)行測(cè)試。檢測(cè)、識(shí)別的測(cè)試結(jié)果如表5 所示。通過(guò)樹(shù)莓派外接攝像頭獲取QR 二維碼耳標(biāo)模擬豬場(chǎng)豬只的圖像數(shù)據(jù),檢測(cè)、識(shí)別結(jié)果如圖6 所示。
表5 檢測(cè)、識(shí)別結(jié)果
圖6 模擬檢測(cè)、識(shí)別結(jié)果
由測(cè)試結(jié)果可知:
1)耳標(biāo)檢測(cè)部分:準(zhǔn)確率為98.3%,有3 張有耳標(biāo)的沒(méi)有成功檢測(cè)出來(lái)。
2)耳標(biāo)識(shí)別部分:對(duì)于成功檢測(cè)出耳標(biāo)的175 張圖像數(shù)據(jù)中,正確識(shí)別的數(shù)量約占92.5%,任選一張正確識(shí)別的結(jié)果如圖7 所示,漏識(shí)別的約占7.5%。查看測(cè)試結(jié)果發(fā)現(xiàn),當(dāng)QR 二維碼耳標(biāo)不全(圖8),耳標(biāo)圖像數(shù)據(jù)有臟物遮擋時(shí)(圖9),不能正確識(shí)別個(gè)體身份。對(duì)于不能成功檢測(cè)出耳標(biāo)的3 張圖片數(shù)據(jù)中,查看測(cè)試結(jié)果,都是屬于漏識(shí)別的,3 張圖片都為QR 二維碼耳標(biāo)不全的圖像。
圖7 正確檢測(cè)和識(shí)別
圖8 耳標(biāo)不全
圖9 耳標(biāo)有臟物遮擋
2.2.3 CAM 可視化
類(lèi)激活映射是將最后一個(gè)卷積層的輸出特征圖和該特征圖對(duì)應(yīng)的輸入圖像的仿射矩陣相結(jié)合,進(jìn)而生成與輸入圖像尺寸相同的掩碼圖[16],疊加到原圖上如圖10 所示。由圖10 可知,響應(yīng)越高的區(qū)域越能代表模型的分類(lèi)依據(jù),由此可得,模型感興趣的區(qū)域集中在耳標(biāo)區(qū)域。
圖10 CAM 可視化
本系統(tǒng)以智能養(yǎng)殖為創(chuàng)新點(diǎn),從實(shí)際需求出發(fā),同時(shí)結(jié)合了可視耳標(biāo)的檢測(cè)和識(shí)別,更加準(zhǔn)確、高效地確定豬只的個(gè)體身份。在進(jìn)行一系列對(duì)比論證后,敲定了以輕量型MNN 為框架,結(jié)合MobileNet 卷積神經(jīng)網(wǎng)絡(luò)的方案來(lái)實(shí)現(xiàn)系統(tǒng)功能。利用樹(shù)莓派4B 作為嵌入式平臺(tái),最終完成了在可視耳標(biāo)檢測(cè)、識(shí)別在移動(dòng)端的部署,通過(guò)對(duì)于整套系統(tǒng)進(jìn)行測(cè)試,可以得到一個(gè)比較理想的測(cè)試結(jié)果。
1)通過(guò)對(duì)于測(cè)試結(jié)果的查看,可以定位到無(wú)法正確識(shí)別的原因,對(duì)于可視耳標(biāo)有臟物遮擋的情況可以指導(dǎo)豬場(chǎng)人員對(duì)耳標(biāo)進(jìn)行擦拭,以達(dá)到重新識(shí)別的效果。
2)通過(guò)CAM 可視化的方法可以得出模型感興趣的區(qū)域在耳標(biāo)部分,為人們更相信卷積神經(jīng)網(wǎng)絡(luò)提供依據(jù)。
3)受限于數(shù)據(jù)集的數(shù)量,后續(xù)的改進(jìn)可以通過(guò)擴(kuò)充數(shù)據(jù)集來(lái)得到更理想的效果。
4)后續(xù)可以修改網(wǎng)絡(luò)結(jié)構(gòu),在不損失精度的前提下提高模型檢測(cè)的速度。