劉 顏 朱志宇 張 冰
(江蘇科技大學(xué)電子信息學(xué)院 鎮(zhèn)江 212003)
目標(biāo)檢測技術(shù)是計(jì)算機(jī)視覺領(lǐng)域中的重要組成部分,具有較高的研究價(jià)值。目標(biāo)檢測包括目標(biāo)的定位和分類兩個(gè)部分。隨著計(jì)算機(jī)技術(shù)的發(fā)展和計(jì)算機(jī)視覺[1]原理的廣泛應(yīng)用,利用計(jì)算機(jī)圖像處理技術(shù)實(shí)時(shí)跟蹤目標(biāo)的研究越來越熱。目標(biāo)的動(dòng)態(tài)實(shí)時(shí)跟蹤和定位在智能交通系統(tǒng)、智能監(jiān)控系統(tǒng)、軍事目標(biāo)檢測和手術(shù)器械定位等方面廣泛應(yīng)用[2]。2014年,RBG使用候選區(qū)域+卷積神經(jīng)網(wǎng)絡(luò)[3]設(shè)計(jì)了基于區(qū)域的卷積神經(jīng)網(wǎng)絡(luò)[4]框架,開啟了基于深度學(xué)習(xí)目標(biāo)檢測熱潮。R-CNN 這個(gè)領(lǐng)域目前研究非常活躍,先后出現(xiàn)了R-CNN、SPP-net、Fast R-CNN[5]、Faster R-CNN、R-FCN、YOLO[6]、SSD 等研究。
在深度學(xué)習(xí)研究中,結(jié)構(gòu)簡單、識別準(zhǔn)確率高的模型是使用者一直追求的。Mobilenet[7]模型是Google 提出的適合移動(dòng)環(huán)境下的深度學(xué)習(xí)輕量級分類模型,延遲很低但可以保持一定的精度。SSD結(jié)合了YOLO 中的回歸思想和Faster R-CNN 中的anchor 機(jī)制,不但有YOLO 速度快的特性,而且可以像Faster R-CNN 一樣精準(zhǔn)。SSD-Mobilenet 網(wǎng)絡(luò)模型由于該模型結(jié)合了Mobilenet 和SSD 兩種類型網(wǎng)絡(luò)的優(yōu)勢,在識別精確度和性能消耗都有很好的表現(xiàn)。
Mobilenet 使用深度可分離卷積來構(gòu)建輕量級深度神經(jīng)網(wǎng)絡(luò)。深度可分離卷積將標(biāo)準(zhǔn)卷積分解成為如圖1 所示的深度卷積和一個(gè)如圖2 所示1×1的逐點(diǎn)卷積。如圖3 所示,假設(shè)輸入特征圖有M 個(gè)通道,輸出特征圖的通道數(shù)N,卷積核大小為DK×DK。將深度卷積與標(biāo)準(zhǔn)卷積部分的計(jì)算量相比:
可見,Mobilenet網(wǎng)絡(luò)的卷積方式和標(biāo)準(zhǔn)卷積方式相比大大減少了計(jì)算量。Mobilenet 卷積神經(jīng)網(wǎng)絡(luò)模型結(jié)構(gòu)為表1 所示。Mobilenet 總共28 層,由輸入層,13 層卷積層,以及平均池化層與全連接層組成。
圖1 深度卷積
圖2 逐點(diǎn)卷積
圖3 標(biāo)準(zhǔn)卷積
SSD,全 稱Single Shot MultiBox Detector,是Wei Liu 在ECCV 2016 提 出 的 目 標(biāo) 檢 測 算 法[8]。SSD 網(wǎng)絡(luò)結(jié)構(gòu)如圖4 所示,算法的主網(wǎng)絡(luò)結(jié)構(gòu)是VGG16,將兩個(gè)全連接層改成卷積層再增加4 個(gè)卷積層構(gòu)造網(wǎng)絡(luò)結(jié)構(gòu)。SSD 在計(jì)算損失函數(shù)的時(shí)候,用到了兩項(xiàng)的和,包括定位損失函數(shù)與回歸損失函數(shù)。總的損失函數(shù):
N 是匹配的default boxes 的個(gè)數(shù),x 表示匹配了的框是否屬于類別p,取值{0,1};g 是真實(shí)值(ground truth box);c 是指所框選目標(biāo)屬于類別p 的置信度(confidence)。
圖4 SSD網(wǎng)絡(luò)模型
圖5 SSD-Mobilenet卷積神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)
SSD-Mobilenet 網(wǎng)絡(luò)結(jié)構(gòu)類似于VGG_SSD 網(wǎng)絡(luò)結(jié)構(gòu),在conv13卷積層后增加8 個(gè)卷積層,其中6個(gè)卷積層用于檢測目標(biāo)。SSD-Mobilenet 網(wǎng)絡(luò)模型用SSD 模型作為基礎(chǔ)模型,結(jié)合Mobilenet 使用參數(shù)少,降低計(jì)算量的特點(diǎn)。其網(wǎng)絡(luò)結(jié)構(gòu)如圖5 所示。由于該模型結(jié)合了Mobilenet 和SSD 兩種類型網(wǎng)絡(luò)的優(yōu)勢,在保證良好精確度的基礎(chǔ)上,使用小規(guī)模參數(shù)網(wǎng)絡(luò),減少計(jì)算量,降低資源消耗,縮短了訓(xùn)練時(shí)間,改善模型性能。
遷移學(xué)習(xí)的目的是將從一個(gè)環(huán)境中學(xué)習(xí)到的知識運(yùn)用到新的環(huán)境中。神經(jīng)網(wǎng)絡(luò)所學(xué)習(xí)到的知識主要體現(xiàn)于在特定任務(wù)上所訓(xùn)練得到的權(quán)重參數(shù)上,因而迀移學(xué)習(xí)的本質(zhì)即為權(quán)重的迀移。傳統(tǒng)的機(jī)器學(xué)習(xí)要求訓(xùn)練數(shù)據(jù)與測試數(shù)據(jù)相同分布,而且無法獲取足夠多的有效樣本,需要重新標(biāo)注大量的樣本數(shù)據(jù)以滿足需求。使用迀移學(xué)習(xí)的方法可以解決以上兩個(gè)問題,允許將學(xué)習(xí)到的已有知識運(yùn)用到新的且僅有少量樣本數(shù)據(jù)的領(lǐng)域內(nèi)。這意味著對于一個(gè)已經(jīng)訓(xùn)練過的現(xiàn)有模型,并重新訓(xùn)練它最后一層或幾層網(wǎng)絡(luò),不需要太長的訓(xùn)練時(shí)間便可以得到效果較好的網(wǎng)絡(luò)模型[9~15]。
經(jīng)過預(yù)訓(xùn)練的SSD-Mobilenet網(wǎng)絡(luò)模型可以網(wǎng)絡(luò)結(jié)構(gòu)與參數(shù)的分離,只要網(wǎng)絡(luò)結(jié)構(gòu)不變,就可以使用之前已經(jīng)訓(xùn)練好的參數(shù)初始化網(wǎng)絡(luò)。在實(shí)驗(yàn)中采用了COCO2014數(shù)據(jù)集對模型進(jìn)行預(yù)訓(xùn)練,這個(gè)數(shù)據(jù)集圖像包括80 類目標(biāo),包括人類、交通工具、動(dòng)物、家用電器、電子產(chǎn)品等12 個(gè)大類。用于重新訓(xùn)練全連接層的參數(shù)的數(shù)據(jù)集使用的是牛津大學(xué)視覺幾何組-寵物數(shù)據(jù)集(Visual Geometry Group-Pets Dataset),這個(gè)數(shù)據(jù)集包含37 種不同種類的寵物圖片,本文使用了其中shiba_inu與pomeranian這兩類圖片。
圖6 Mobilenet 卷積神經(jīng)網(wǎng)絡(luò)模型結(jié)構(gòu)
圖7 檢測流程圖
目標(biāo)檢測流程圖如圖7所示,首先Mobilenet網(wǎng)絡(luò)用COCO 數(shù)據(jù)集進(jìn)行預(yù)訓(xùn)練得到模型參數(shù)、瓶頸描述因子和初始特征,然后目標(biāo)域Pets數(shù)據(jù)集重新確定全連接層參數(shù),最后將訓(xùn)練好的Mobilenet 模型與融合特征傳入SSD網(wǎng)絡(luò),即可實(shí)驗(yàn)對圖片中目標(biāo)的定位與分類。
Tensorflow 是Google 的可移植機(jī)器學(xué)習(xí)和神經(jīng)網(wǎng)絡(luò)庫,對Python 具有良好的支持,它還有用于顯示和理解描述其計(jì)算的數(shù)據(jù)流圖Tensorboard。本實(shí)驗(yàn)的運(yùn)行平臺為Windows 10,開發(fā)語言為Python,使用的深度學(xué)習(xí)框架為Tensorflow,本實(shí)驗(yàn)的運(yùn)行環(huán)境如圖8所示。
圖8 實(shí)驗(yàn)運(yùn)行環(huán)境表
圖9 部分標(biāo)注信息表格文件示例
本文在Pets 數(shù)據(jù)集中選取了博美犬和柴田犬這兩類的圖片各200張,其中160張作為訓(xùn)練集,30張作為測試集,10 張用于檢測訓(xùn)練好的模型。首先標(biāo)注圖像使用的是labellmg 工具,樣本被標(biāo)注好后,生成與樣本一一對應(yīng)的xml 文件。然后,調(diào)用xml_to_csv.py腳本生成表格,如圖9所示,圖的第一列filename 是圖像的名稱;第二列和第三列代表了圖片的大小;第五列到第八列代表在目標(biāo)檢測框的坐標(biāo);class的值設(shè)為pomerianian,代表博美犬,若為shiba_inu 代表柴田犬。接下來,調(diào)用調(diào)用generate_tfrecord.py 把對應(yīng)的csv 格式轉(zhuǎn)換成Tensorflow能識別的tfrecord格式。
本文的訓(xùn)練過程是在GPU上訓(xùn)練。如圖10(a)所示每一步的運(yùn)行時(shí)間大約為0.9s。如圖11(a)所示,隨著訓(xùn)練過程的進(jìn)展,總損失會(huì)降低到可能的最小值,當(dāng)總損失不會(huì)因更多迭代而下降可以認(rèn)定到訓(xùn)練已經(jīng)完成??偣灿?xùn)練了40K步,總損失值約為3.2。
訓(xùn)練完成后,保存訓(xùn)練好的模型就可以開始做一些檢測了。在test_images 文件夾里放了每個(gè)分類各10張圖片。這20張圖片的平均檢測準(zhǔn)確率達(dá)到74.5%。如圖12,最高的準(zhǔn)確率達(dá)到99%。如圖13 所示,這兩張檢測結(jié)果圖出現(xiàn)了同一個(gè)檢測對象有多個(gè)檢測框的情況,這個(gè)問題存在的原因可能是在打標(biāo)簽時(shí)由于每張圖片中狗的外貌和姿態(tài)以及背景的差別,打框時(shí)有的框出了目標(biāo)對象身體的全部,有的只框出來目標(biāo)對象身體的一部分,這使得網(wǎng)絡(luò)接收到的信息存在著差別。如圖11 所示,檢測中還存在分類錯(cuò)誤的情況,將博美犬分到柴田犬類,出現(xiàn)這種情況的原因不能完全歸于模型的不夠優(yōu)秀,事實(shí)上,圖片中的博美犬確實(shí)和柴田犬有著極大的相似。
圖10 訓(xùn)練步數(shù)與時(shí)間關(guān)系圖
圖11 訓(xùn)練步數(shù)與總損失關(guān)系圖
圖12 準(zhǔn)確率99%
圖13 一個(gè)目標(biāo)有多個(gè)檢測框圖
圖14 分類錯(cuò)誤
圖15 同一張圖片使用三種模型做目標(biāo)檢測
本實(shí)驗(yàn)還訓(xùn)練了SSD_inception 網(wǎng)絡(luò)與faster_rcnn 網(wǎng)絡(luò)進(jìn)行實(shí)驗(yàn)結(jié)果的對比。訓(xùn)練步數(shù)與時(shí)間的關(guān)系圖如圖10(b)、10(c),所示,總損失與時(shí)間的關(guān)系圖如圖11(b)、11(c)所示。同一張圖片用三種模型檢測效果如圖15 所示,從左至右分別使用的 模 型 為 SSD_Mobilenet,SSD_inception,faster_rcnn。
圖16 三種模型性能參數(shù)比較
SSD-Mobilenet 是一種新型目標(biāo)識別網(wǎng)絡(luò)模型,它既結(jié)合了輕量型Mobilenet 網(wǎng)絡(luò)節(jié)省存儲空間以及低能耗的優(yōu)點(diǎn),又有SSD網(wǎng)絡(luò)同時(shí)保持高效率與高準(zhǔn)確率的特點(diǎn)。運(yùn)用遷移學(xué)習(xí)的思維方式,在COCO 數(shù)據(jù)集進(jìn)行過預(yù)訓(xùn)練的SSD-Mobilenet 模型再用Pets數(shù)據(jù)集進(jìn)行網(wǎng)絡(luò)參數(shù)微調(diào),使得網(wǎng)絡(luò)經(jīng)過較短的訓(xùn)練時(shí)間便可以收斂具有很好的檢測目標(biāo)的能力。在這次的實(shí)驗(yàn)中出現(xiàn)的對一個(gè)目標(biāo)有多個(gè)檢測框和由于兩類目標(biāo)的相似性分類錯(cuò)誤的問題,在今后的實(shí)驗(yàn)中需要進(jìn)一步探究,力求得到更加性能優(yōu)秀的網(wǎng)絡(luò)。