張海清,張 生
(上海理工大學 光電信息與計算機工程學院,上海 200093)
隨著深度學習與計算機硬件逐漸完善,神經網絡徹底改變了機器智能的許多領域,基于深度學習的方法已經被廣泛應用于實時目標檢測,能夠在圖像識別領域實現較高的精確度,它們一般建立在卷積神經網絡(CNN)的基礎上[1]。然而,提高精確度需要大量的計算資源,需要進行大量數據計算,給移動設備和嵌入式系統帶來了挑戰。云平臺能夠提供訓練深度學習模型的最佳環境,但是推理通常是在服務器,臺式機,移動設備和邊緣設備中完成。融合人工智能(AI)的應用程序結合硬件和軟件來加速在云中訓練的深度學習模型的推理。將AI部署到邊緣設備上非常重要,可以避免數據傳輸的延遲以及保護用戶數據隱私。這些移動端的應用對算法運行效率有較高的要求,在低功耗邊緣設備上部署物體檢測與識別深度學習網絡的相關工作是近幾年來積極研究的領域。
目前已提出多種目標檢測模型,基于深度學習的物體檢測方法可以分為兩類:一階段(one stage)檢測和兩階段(two stage)檢測[2]。兩階段檢測算法有基于區域建議(region proposal,RP)方法的R-CNN模型[3]、Fast R-CNN模型[4]、Faster R-CNN模型[5]、FPN模型[6]。一階段檢測算法有:基于回歸方法的SSD模型[7]以及YOLO模型[8]。SSD模型是當中檢測精確度相對較高的網絡結構,傳統的SSD算法采用VGG16[9]卷積作為基礎網絡進行特征提取,前向傳播計算時間大部分用在基本網絡中。考慮到低功耗嵌入式平臺運算能力有限,需要輕量化的卷積神經網絡,以實現輕量化模型。針對不同領域和產品(如機器人,無人機,機器視覺,智能家居),Up squared能夠提供完美硬件解決方案,在性能良好的Up squared設備上能夠實現基于深度學習的目標檢測任務。
針對工業物體檢測領域,該文提出了一種基于SSD MobileNetV2算法的鐵釘檢測方法,通過英特爾Movidius神經計算棒加速模型的實時推理,采用英特爾Realsence D435對檢測的鐵釘進行測距,實現在計算資源相對緊張的嵌入式邊緣計算設備樹莓派上進行鐵釘檢測,并在Up squared上進行實時的鐵釘檢測與測距。
單發多框目標檢測(single shot multibox detector,SSD)是一個單級檢測器,在保持實時效率的同時,其精度可與兩級檢測器媲美。相對于需要區域建議的兩階段檢測算法更加簡單,完全消除了區域建議和后續的像素或特征重采樣階段,并將所有計算封裝在一個網絡中。SSD算法使用的是Faster-RCNN中的anchor機制(文獻[8]中稱之為default box),與Faster-RCNN不同點為SSD算法每層的feature maps的感受野不同,能夠獲得不同的特征向量。SSD算法在主干網絡的特征圖上,使用卷積濾波器預測錨框的分類置信度和目標邊界框的位置偏移。SSD算法使用不同比例的候選框,以多種尺度的特征圖進行預測,它將YOLO算法的全連接層刪除,將全連接層換成全卷積層,顯著提升了檢測速度[10]。
SSD算法的主要流程如下:
·使輸入的圖像經過一系列卷積層,以不同比例(例如10×10、6×6、3×3等)生成幾個特征圖。
·對于特征圖中的每個位置,使用3×3卷積濾波器輸出一組默認邊界框[11]。
·對于每個邊界框,同時預測邊界框位置偏移和分類置信度。
·在訓練期間,將ground_truth框與這些基于IOU的預測框進行匹配。預測最準確的框將被標記為“正”。
SSD算法基于前饋卷積網絡會生成固定大小的邊界框集合,并為這些框中存在的物體進行打分,然后采用非最大抑制算法來篩選最終檢測的邊界框[12]。
基于深度學習的目標檢測算法在目標數據集訓練好模型后,通過遍歷的方式將圖像輸入到訓練好的網絡模型進行分類。首先,需要對輸入的圖像進行預處理,將輸入調整為網絡要求的尺寸大小并進行歸一化操作。通過推理并返回位置信息和類別信息,對于預測的邊框需要通過NMS算法選出有效檢測結果,并在原圖中畫框。非極大值抑制本質為搜索局部極大值,抑制非極大值元素。NMS算法的輸入為:候選框B,相應的置信度得分S和重疊閾值列表N。輸出為:檢測框列表D。NMS算法過程如下:
(1)將置信度得分排序,選取置信度最高的候選框,將其從B中刪除,并將其添加到最終輸出列表D中,D初始化為空。
(2)將該候選框與所有的候選框進行比較,計算該候選框與其他所有候選框的IOU(intersection over union)。如果IOU大于閾值N,則從B中刪除該候選框。
(3)從B中的其余候選框中選擇置信度最高的,將其從B中刪除并添加到D中。
(4)再使用B中的所有候選框計算該候選框的IOU,并刪除IOU高于閾值的框。重復此過程,直到B中沒有剩余的候選框。
其中,IOU表示兩個候選框的交集與并集部分的面積比值。它主要是衡量模型生成的錨框(bounding box)和標注的真實框(ground truth box)之間的重疊程度,計算公式為:
(1)
IOU越高,預測框的位置越準確,IOU閾值一般設為0.3~0.5。
SSD算法的損失函數由置信度損失(Softmax)與定位損失(Smooth L1)兩部分組成,公式如下:
(2)

針對一些移動、嵌入式邊緣設備,谷歌提出了MobileNetV2這種輕量級的深度卷積神經網絡,其設計的宗旨是使移動設備支持圖像分類與檢測等。MobileNetV2[13]基于MobileNetV1[14]的思想,使用深度可分離卷積作為有效的構建塊。但是,MobileNetV2向體系結構引入了兩個新功能:(1)層之間的線性瓶頸;(2)瓶頸之間的快捷連接。MobileNetV2體系結構如圖1所示。

圖1 MobileNetV2體系結構
MobileNetV2體系結構基于反向殘差結構,其中殘差塊的輸入和輸出是Bottleneck層,MobileNetV2對網絡輸入進行擴展升維,深度分離卷積,再壓縮降維,與傳統殘差模型相反[15],傳統殘差模型在輸入中使用擴展表示形式。MobileNetV2使用輕量級深度卷積來過濾中間擴展層中的特征。線性瓶頸(linear bottleneck)中包含了所有的必要信息,用shortcuts連接linear bottleneck,可以提升梯度在乘積層之間的傳播能力,提高內存的使用效率。圖1中Transformation模塊是bottleneck卷積的基本實現:先用conv 1×1變換通道,再用ReLU6激活。中間是深度卷積,后接Relu;最后的conv 1×1之后不再使用Relu,而是使用linear bottleneck。
MobileNetV2共包含28個網絡層,在該網絡的卷積層中,第一層采用的常規卷積(Conv2d)運算,其他的卷積層中,均把常規的卷積運算拆分成了depthwise卷積(Conv dw)和pointwise卷積(Conv pw)過程,這兩步運算被合稱為深度可分離卷積(depthwise separable convolution)。深度卷積用來對每個輸入通道應用單通道的輕量級濾波器,逐點卷積負責計算輸入通道的線性組合構建新的特征。常規卷積與深度可分離卷積的過程的對比如圖2所示。

圖2 常規卷積與深度可分離卷積
假設常規卷積使用4個大小為3*3的卷積核,每個卷積核將對包含3個通道的輸入進行卷積運算得到特征圖,進行一次卷積需要4*3*3*3=108個要學習的參數。MobilenetV2將傳統的convolution換成depthwise卷積和pointwise卷積,進行深度可分離卷積時,depthwise卷積的過程是使用3個二維的卷積核分別與輸入的3個通道進行卷積,得到的3張特征圖并與1×1×3大小的卷積核進行pointwise卷積輸出特征圖,但卷積過程中的參數卻只有3×3×3+1×1×3×4=39個。其中depthwise卷積使用3*3大小卷積核進行3次卷積運算,pointwise卷積使用1*1*3大小卷積核進行1次卷積,總學習參數為3*3*3+1*1*3=39。深度可分離卷積通過減少了卷積過程中的學習參數來降低計算復雜度和模型的大小。
MobileNetV2通過增大depthwise卷積的步幅來實現對輸入特征的下采樣,除了最后的全連接層外,其他各個網絡層的輸出都先進行了一次批標準化,再使用Relu函數進行激活,實現加快模型的收斂速度。所有空間卷積核尺寸使用3×3卷積核大小,在32個卷積核的全卷積層之后接上17個反向殘差瓶頸模塊,并采用Relu6作為非線性激活函數,確保低精度計算的魯棒性。
英特爾Movidius神經計算棒(NCS)是一款深度學習加速計算設備,旨在為低功耗移動和嵌入式視覺等邊緣設備上加速AI推理,例如樹莓派或Up Squared board。目前已推出NCS1和NCS2兩個系列。1代神經計算棒NCS基于英特爾Myriad 2 VPU(視覺處理單元),2代神經計算棒NCS2基于Myriad X VPU,性能顯著優于1代。1代需要依賴NCSDK環境中進行編譯、部署,以實現加速網絡計算,NCSDK包括一組用于編譯,分析和驗證深度神經網絡的軟件工具,還包括用于以C/C++或Python開發應用程序的Intel Movidius NCAPI。基于NCSDK的開發流程如圖3所示。

圖3 NCSDK應用開發流程
2代神經計算棒在NCSDK上不支持,而是使用OpenVINO代替NCSDK。OpenVINO是英特爾發布的視覺推理和神經網絡優化軟件開發套件(SDK),旨在為英特爾視覺產品(支持AI的處理器和加速器的產品組合)之間擴展工作負載并優化性能。OpenVINO詳細的開發應用流程如圖4所示。

圖4 OpenVINO應用開發流程
實驗主要硬件設備如圖5所示,實驗中分別采用了樹莓派3B+和UP Squared開發板,UP Squared采用英特爾賽揚TM,奔騰TM和凌動TM處理器,是工業物聯網邊緣設備的理想選擇。搭載Intel MovidiusTMMyriadTM2 VPU的UP Squared只需很少的功耗即可實現本地深度學習和計算視覺算法。UP Squared board大小與樹莓派相同,可以運行一般的Windows、Linux或Android系統。

圖5 實驗主要硬件設備
深度學習模型需要大量的訓練樣本,由于很難具有足夠采樣的數據集,可通過數據增強方法擴充數據集,數據增強策略在提高模型的精度與泛化方面非常重要。為此,對所有訓練圖像進行隨機采樣,通過對輸入數據進行變換,自動生成新的訓練樣本。例如,移位、隨機裁剪、旋轉、垂直和水平翻轉圖像。實驗中需要檢測的物體只有一類,原始采集的圖像有一百張,通過數據增強擴充數據集,總共200張,其中,90%用于訓練,10%用于測試。
標注圖像使用的是labelImg工具,每標注一張圖片后,會產生一個.xml文件,由于檢測物體只有一類(釘子,nail),標簽映射pbtxt中只需一個item,id設置為1,name設置為nail。之后將標注圖像生成的所有.xml文件轉換為.csv格式,再將.csv文件轉換為.Record文件,用于TensorFlow物體檢測API進行訓練。實驗過程中使用Tensorboard查看模型訓練指標,例如損失和精確度。
隨著計算機視覺在無人駕駛汽車、人臉識別、智能駕駛系統等領域的用例日益增長,用戶希望能夠建立定制的機器學習模型以實現物體的檢測與識別。但是,從頭開始構建訓練模型需要大量的專業知識,時間和計算資源。為減少深度學習入門障礙,Google發布了TensorFlow物體檢測API和TensorFlow Hub平臺,使人們能夠通過遷移學習來快速構建自定義模型。
該文使用Google推出的TensorFlow深度學習框架來訓練模型,TensorFlow物體檢測API能夠輕松構建、訓練和部署物體檢測模型。通過物體檢測API結合給定的圖像數據集即可訓練自定的目標檢測模型。目前在龐大的數據集上已有許多可用的預訓練模型,通過遷移學習在SSD MobileNetV2模型上進行微調,只需數小時即可完成模型的訓練,進行推理即可獲得較好的結果。SSD MobileNetV2模型在COCO數據集上經過預訓練,數據集包含32.8萬張帶有250萬個標注的實例圖片,共91類物體。通過遷移學習,基于Google預訓練的SSD MobileNetV2模型進行微調,采用隨機梯度下降法(stochastic gradient descent,SGD)進行訓練,動量因子為0.9,衰減因子為0.000 5。初始學習率為0.005,并使用指數衰減學習率衰減策略。在顯存為8 GB NVIDIA RTX2070的主機上訓練,整個訓練過程為200 000次迭代。
基于TensorFlow訓練導出的模型包含ckpt格式和固化的.pb格式文件,對于1代的神經計算棒NCS,需要通過安裝NCSDK將訓練好的模型編譯為graph格式。如果是2代神經計算棒NCS2,則訓練結束后要將導出的模型通過OpenVINO工具包中的模型優化器轉化為中間表示IR格式,它由.xml和.bin兩個文件組成。xml文件中保存了模型網絡結構信息,bin文件中保存了模型的權重。之后結合神經計算棒將轉換后的專用網絡部署在邊緣設備上進行物體檢測。
表1和表2為實驗中基于Movidius神經計算棒的鐵釘檢測結果。本實驗中,基于樹莓派的鐵釘檢測,USB攝像頭的性能稍好于Pi攝像頭。測試分辨率為640×480,將Pi Camera的分辨率降低到320×240,可以得到約5 FPS的圖像,這表明可以通過降低輸入圖像的分辨率的大小以提高幀速率。與單個線程處理當前幀再等待處理下一幀相比,通過線程優化處理的檢測效果有所提升。檢測性能還會受幀中檢測到的物體數量的影響,當有多個物體檢測時,NCS需要對輸出進行更多的反序列化和圖像處理。與樹莓派CPU相比,基于Movidius神經計算棒的檢測推理速度獲得明顯提升。

表1 基于Movidius的樹莓派檢測性能

表2 基于OpenVINO和Movidius的檢測性能
在搭載Movidius的UP Squared設備上測試(見圖6),實時檢測幀率約23.4 FPS,通過Realsence D435相機獲取深度圖像的深度值來計算被檢測鐵釘的距離,能夠實時地檢測鐵釘并進行測距。

圖6 基于Movidius神經計算棒的樹莓派與Up Squared實時鐵釘檢測
實驗在低功耗設備上進行基于SSD MobileNetV2的鐵釘檢測,比較了1代神經計算棒和2代神經計算棒在低功耗設備上的鐵釘檢測性能,并利用Realsence D435相機獲取深度圖像的深度值來計算鐵釘的距離,在UP Squared平臺上對檢測的鐵釘進行實時測距。實驗結果表明,基于Movidius神經計算棒能夠顯著提升樹莓派的物體檢測性能。通過OpenVINO優化基于SSD MobileNetV2網絡模型結構,結合英特爾2代神經計算棒與Reasence D435相機,能夠在Up Squared上進行實時鐵釘檢測與測距。