劉 顏 朱志宇 張 冰
(江蘇科技大學電子信息學院 鎮江 212003)
目標檢測技術是計算機視覺領域中的重要組成部分,具有較高的研究價值。目標檢測包括目標的定位和分類兩個部分。隨著計算機技術的發展和計算機視覺[1]原理的廣泛應用,利用計算機圖像處理技術實時跟蹤目標的研究越來越熱。目標的動態實時跟蹤和定位在智能交通系統、智能監控系統、軍事目標檢測和手術器械定位等方面廣泛應用[2]。2014年,RBG使用候選區域+卷積神經網絡[3]設計了基于區域的卷積神經網絡[4]框架,開啟了基于深度學習目標檢測熱潮。R-CNN 這個領域目前研究非常活躍,先后出現了R-CNN、SPP-net、Fast R-CNN[5]、Faster R-CNN、R-FCN、YOLO[6]、SSD 等研究。
在深度學習研究中,結構簡單、識別準確率高的模型是使用者一直追求的。Mobilenet[7]模型是Google 提出的適合移動環境下的深度學習輕量級分類模型,延遲很低但可以保持一定的精度。SSD結合了YOLO 中的回歸思想和Faster R-CNN 中的anchor 機制,不但有YOLO 速度快的特性,而且可以像Faster R-CNN 一樣精準。SSD-Mobilenet 網絡模型由于該模型結合了Mobilenet 和SSD 兩種類型網絡的優勢,在識別精確度和性能消耗都有很好的表現。
Mobilenet 使用深度可分離卷積來構建輕量級深度神經網絡。深度可分離卷積將標準卷積分解成為如圖1 所示的深度卷積和一個如圖2 所示1×1的逐點卷積。如圖3 所示,假設輸入特征圖有M 個通道,輸出特征圖的通道數N,卷積核大小為DK×DK。將深度卷積與標準卷積部分的計算量相比:

可見,Mobilenet網絡的卷積方式和標準卷積方式相比大大減少了計算量。Mobilenet 卷積神經網絡模型結構為表1 所示。Mobilenet 總共28 層,由輸入層,13 層卷積層,以及平均池化層與全連接層組成。

圖1 深度卷積

圖2 逐點卷積

圖3 標準卷積
SSD,全 稱Single Shot MultiBox Detector,是Wei Liu 在ECCV 2016 提 出 的 目 標 檢 測 算 法[8]。SSD 網絡結構如圖4 所示,算法的主網絡結構是VGG16,將兩個全連接層改成卷積層再增加4 個卷積層構造網絡結構。SSD 在計算損失函數的時候,用到了兩項的和,包括定位損失函數與回歸損失函數。總的損失函數:

N 是匹配的default boxes 的個數,x 表示匹配了的框是否屬于類別p,取值{0,1};g 是真實值(ground truth box);c 是指所框選目標屬于類別p 的置信度(confidence)。

圖4 SSD網絡模型

圖5 SSD-Mobilenet卷積神經網絡結構
SSD-Mobilenet 網絡結構類似于VGG_SSD 網絡結構,在conv13卷積層后增加8 個卷積層,其中6個卷積層用于檢測目標。SSD-Mobilenet 網絡模型用SSD 模型作為基礎模型,結合Mobilenet 使用參數少,降低計算量的特點。其網絡結構如圖5 所示。由于該模型結合了Mobilenet 和SSD 兩種類型網絡的優勢,在保證良好精確度的基礎上,使用小規模參數網絡,減少計算量,降低資源消耗,縮短了訓練時間,改善模型性能。
遷移學習的目的是將從一個環境中學習到的知識運用到新的環境中。神經網絡所學習到的知識主要體現于在特定任務上所訓練得到的權重參數上,因而迀移學習的本質即為權重的迀移。傳統的機器學習要求訓練數據與測試數據相同分布,而且無法獲取足夠多的有效樣本,需要重新標注大量的樣本數據以滿足需求。使用迀移學習的方法可以解決以上兩個問題,允許將學習到的已有知識運用到新的且僅有少量樣本數據的領域內。這意味著對于一個已經訓練過的現有模型,并重新訓練它最后一層或幾層網絡,不需要太長的訓練時間便可以得到效果較好的網絡模型[9~15]。
經過預訓練的SSD-Mobilenet網絡模型可以網絡結構與參數的分離,只要網絡結構不變,就可以使用之前已經訓練好的參數初始化網絡。在實驗中采用了COCO2014數據集對模型進行預訓練,這個數據集圖像包括80 類目標,包括人類、交通工具、動物、家用電器、電子產品等12 個大類。用于重新訓練全連接層的參數的數據集使用的是牛津大學視覺幾何組-寵物數據集(Visual Geometry Group-Pets Dataset),這個數據集包含37 種不同種類的寵物圖片,本文使用了其中shiba_inu與pomeranian這兩類圖片。

圖6 Mobilenet 卷積神經網絡模型結構

圖7 檢測流程圖
目標檢測流程圖如圖7所示,首先Mobilenet網絡用COCO 數據集進行預訓練得到模型參數、瓶頸描述因子和初始特征,然后目標域Pets數據集重新確定全連接層參數,最后將訓練好的Mobilenet 模型與融合特征傳入SSD網絡,即可實驗對圖片中目標的定位與分類。
Tensorflow 是Google 的可移植機器學習和神經網絡庫,對Python 具有良好的支持,它還有用于顯示和理解描述其計算的數據流圖Tensorboard。本實驗的運行平臺為Windows 10,開發語言為Python,使用的深度學習框架為Tensorflow,本實驗的運行環境如圖8所示。

圖8 實驗運行環境表

圖9 部分標注信息表格文件示例
本文在Pets 數據集中選取了博美犬和柴田犬這兩類的圖片各200張,其中160張作為訓練集,30張作為測試集,10 張用于檢測訓練好的模型。首先標注圖像使用的是labellmg 工具,樣本被標注好后,生成與樣本一一對應的xml 文件。然后,調用xml_to_csv.py腳本生成表格,如圖9所示,圖的第一列filename 是圖像的名稱;第二列和第三列代表了圖片的大小;第五列到第八列代表在目標檢測框的坐標;class的值設為pomerianian,代表博美犬,若為shiba_inu 代表柴田犬。接下來,調用調用generate_tfrecord.py 把對應的csv 格式轉換成Tensorflow能識別的tfrecord格式。
本文的訓練過程是在GPU上訓練。如圖10(a)所示每一步的運行時間大約為0.9s。如圖11(a)所示,隨著訓練過程的進展,總損失會降低到可能的最小值,當總損失不會因更多迭代而下降可以認定到訓練已經完成。總共訓練了40K步,總損失值約為3.2。
訓練完成后,保存訓練好的模型就可以開始做一些檢測了。在test_images 文件夾里放了每個分類各10張圖片。這20張圖片的平均檢測準確率達到74.5%。如圖12,最高的準確率達到99%。如圖13 所示,這兩張檢測結果圖出現了同一個檢測對象有多個檢測框的情況,這個問題存在的原因可能是在打標簽時由于每張圖片中狗的外貌和姿態以及背景的差別,打框時有的框出了目標對象身體的全部,有的只框出來目標對象身體的一部分,這使得網絡接收到的信息存在著差別。如圖11 所示,檢測中還存在分類錯誤的情況,將博美犬分到柴田犬類,出現這種情況的原因不能完全歸于模型的不夠優秀,事實上,圖片中的博美犬確實和柴田犬有著極大的相似。

圖10 訓練步數與時間關系圖

圖11 訓練步數與總損失關系圖

圖12 準確率99%

圖13 一個目標有多個檢測框圖

圖14 分類錯誤

圖15 同一張圖片使用三種模型做目標檢測
本實驗還訓練了SSD_inception 網絡與faster_rcnn 網絡進行實驗結果的對比。訓練步數與時間的關系圖如圖10(b)、10(c),所示,總損失與時間的關系圖如圖11(b)、11(c)所示。同一張圖片用三種模型檢測效果如圖15 所示,從左至右分別使用的 模 型 為 SSD_Mobilenet,SSD_inception,faster_rcnn。

圖16 三種模型性能參數比較
SSD-Mobilenet 是一種新型目標識別網絡模型,它既結合了輕量型Mobilenet 網絡節省存儲空間以及低能耗的優點,又有SSD網絡同時保持高效率與高準確率的特點。運用遷移學習的思維方式,在COCO 數據集進行過預訓練的SSD-Mobilenet 模型再用Pets數據集進行網絡參數微調,使得網絡經過較短的訓練時間便可以收斂具有很好的檢測目標的能力。在這次的實驗中出現的對一個目標有多個檢測框和由于兩類目標的相似性分類錯誤的問題,在今后的實驗中需要進一步探究,力求得到更加性能優秀的網絡。