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