劉津龍,賈郭軍
(山西師范大學(xué) 數(shù)學(xué)與計算機科學(xué)學(xué)院, 山西 臨汾041000)
目標(biāo)檢測是將目標(biāo)從圖像中提取出來的計算機視覺技術(shù),是計算機視覺領(lǐng)域的重要組成部分,是一切計算機視覺任務(wù)的基礎(chǔ),具有較高的研究價值。運動目標(biāo)檢測是從不斷變化的序列圖像中進行目標(biāo)的識別和定位,分為靜態(tài)背景下的目標(biāo)檢測和動態(tài)背景下的目標(biāo)檢測。 目前,解決目標(biāo)檢測問題的思路主要有如下兩種:一是依賴于目標(biāo)的先驗知識,提前為運動目標(biāo)建模,然后在圖像序列中實時找到匹配的目標(biāo);二是不依賴于先驗知識,直接從圖像序列中檢測到運動目標(biāo),并進行類別判定。
傳統(tǒng)的目標(biāo)檢測一般使用滑動窗口的檢測機制,主要包括以下三個步驟:第一步利用不同尺寸的滑動窗口[1]在滑動途中覆蓋的某一部分作為候選區(qū)域;第二步提取候選區(qū)域相關(guān)的視覺特征形成特征向量,例如人臉檢測常用的Harr 特征[2],行人檢測和普通目標(biāo)檢測常用HOG 特征[3];第三步利用提取到的特征對目標(biāo)進行識別和定位。 該類目標(biāo)檢測算法的窗口區(qū)域選擇策略沒有針對性,時間復(fù)雜度高,窗口冗余相對較多。 手工設(shè)計的特征對目標(biāo)可能出現(xiàn)的多樣性變化沒有較強的魯棒性,比如形態(tài)變化和光照影響等。
隨著深度學(xué)習(xí)的發(fā)展,當(dāng)前的目標(biāo)檢測算法均使用了卷積神經(jīng)網(wǎng)絡(luò)進行端到端的檢測。 該類模型通常會預(yù)先設(shè)置一組固定大小和寬高比的錨點框,如R-CNN[4]系列模型。 使用錨點框的目標(biāo)檢測算法克服了滑動窗口檢測算法的兩個缺點:一是滑動窗口尺寸固定,對形變較大物體的檢測效果不佳。二是滑動窗口的數(shù)量通常較多,模型計算壓力較大。在之后的Faster R-CNN[5]、YOLO 系列[6]、SSD[7]等模型中,均采用了錨點框取代滑動窗口的方式進行更為精準(zhǔn)的檢測。
在Faster R-CNN[5]、YOLO 系列[6]、SSD[7]等模型中,錨點框的選取通常是由人為設(shè)定的,這種方式對多類目標(biāo)的識別具有較強的泛化能力,但不同類別的物體之間在位置上和尺寸上存在明顯差異,使用統(tǒng)一的錨點框無法使模型更好地適用于特定的應(yīng)用場景。 針對這一問題,本文利用特定目標(biāo)數(shù)據(jù)集真實框?qū)捀弑鹊慕y(tǒng)計學(xué)特征進行錨點框的選定,使模型能夠適用于特定的應(yīng)用場景。
目標(biāo)檢測過程中最主要的工作是預(yù)測物體所在的邊界框,同時要盡可能地壓縮模型的規(guī)模,使模型在維持較高準(zhǔn)確度的前提下保持較少的計算量。 通常在不同深度的卷積層利用不同尺寸的特征圖生成不同大小的邊界框,再應(yīng)用于檢測不同尺寸的目標(biāo)。 較淺的卷積層其感受野[8]較小,表現(xiàn)出來的特征為淺層特征,適合檢測較小的物體;而較深的卷積層感受野較大,其提取的特征更加抽象,適合檢測較大的物體。SSD-Mobilenet 模型的算法思想也是如此。 該算法是將SSD[7]和Mobilenet[9]進行結(jié)合衍生出的一種輕量化目標(biāo)檢測模型,同時具備了兩模型各自的優(yōu)勢,即多尺度預(yù)測和模型輕量化。
SSD[7]算法是2016 年由Wei Liu 提出的一種目標(biāo)檢測模型,算法的主干網(wǎng)絡(luò)是VGG-16[10]。 SSD[7]共抽取6 個卷積層用于檢測目標(biāo),經(jīng)過卷積計算后得到的特征圖具有不同的感受野,多尺度的特征圖包含了原圖像不同的語義信息[11],使模型能夠?qū)Σ煌叽绲哪繕?biāo)進行識別和定位,這樣的設(shè)計增加了模型的運算量,但是提高了檢測精度。
Mobilenet[9]是Google 提出的一種小巧且高效的模型,其核心思想是對常規(guī)的標(biāo)準(zhǔn)卷積操作進行分解,將常規(guī)的標(biāo)準(zhǔn)卷積操作替換為深度卷積和點向卷積。 更進一步地,引入了寬度因子和分辨率因子來調(diào)整網(wǎng)絡(luò)的運算量,簡化了網(wǎng)絡(luò)。 深度卷積和點向卷積是Mobilenet[9]的兩個基本組件,二者通常進行組合操作,稱作深度可分離卷積(depthwise separable convolution)。在實際應(yīng)用中,會在每次卷積操作后加入Batch_normal[12]層和ReLU[13]激活層。
SSD-Mobilenet 將SSD[7]算法的主干網(wǎng)絡(luò)VGG-16[9]更換成更加輕量級的Mobilenet[9],去掉網(wǎng)絡(luò)后端的全連接層和softmax 層,在主網(wǎng)絡(luò)之后添加8 層深度可分離卷積層,并在整個網(wǎng)絡(luò)中共選取6 層作為錨點框的提取層用作最后的目標(biāo)檢測任務(wù),模型從這6 層分別提取出不同尺寸的錨點框。
SSD-Mobilenet 的網(wǎng)絡(luò)結(jié)構(gòu) 如圖1 所 示。 表1 對比了SSD-Mobilenet 和SSD[7]的網(wǎng)絡(luò)結(jié)構(gòu)。
SSD-Mobilenet 的損失函數(shù)分為兩部分: 預(yù)選框預(yù)測到目標(biāo)類別的置信度損失(confidence loss)和相應(yīng)的位置回歸損失(location loss)。
圖1 SSD-Mobilenet 網(wǎng)絡(luò)結(jié)構(gòu)圖
表1 SSD 與SSD-MobileNet 結(jié)構(gòu)對比
式中,N 表示匹配到真實框的預(yù)選框數(shù)量;C 為類別置信度的預(yù)測值;α 參數(shù)用于調(diào)整置信度損失和位置損失之間的比例,默認值設(shè)為1;i 表示第i個默認框;j 表示第p 個類。 置信度損失函數(shù)遍歷所有取到的正樣本和負樣本,對于反例預(yù)測框,其定位損失是0。表示第i 個正樣本是p 類的概率,表示第i 個預(yù)選框匹配到了第j 個類別為p 的真實框,位置損失采用的是smooth L1 loss:
式(3)~式(7)中,g 代表 真實 框,l 代表預(yù)測 框,d 代表默認框,w 代表寬度,h 代表高度。 在預(yù)測過程中對目標(biāo)會預(yù)測出多個相互重疊的預(yù)測框,網(wǎng)絡(luò)后端通過非極大值抑制算法NMS[14]去除相互重疊的部分,保留最優(yōu)的預(yù)測框作為目標(biāo)的位置檢測結(jié)果。
在SSD-Mobilenet 中,錨點框使用手工設(shè)計的寬高比,分別為{1:1,1:2,1:3,2:1,3:1},手工設(shè)計的錨點框具有較強的泛化能力,但同時存在一定的主觀性。 在特定場景下,出現(xiàn)的單一類別目標(biāo)的寬度和高度大致穩(wěn)定在一個特定的范圍內(nèi),例如生產(chǎn)線上的某種零件、監(jiān)控視頻中的行人等場景下等。對于單一類別物體的數(shù)據(jù)集,根據(jù)其真實框的寬高比合理地設(shè)置錨點框的寬高比, 能夠更加精確地預(yù)測目標(biāo)的位置, 使模型能夠應(yīng)用于特定場景下對單一類別目標(biāo)的檢測任務(wù)。
本文使用統(tǒng)計學(xué)中的K-Means 方法對單一類別數(shù)據(jù)集中目標(biāo)的真實框的寬高比做聚類分析,得到數(shù)據(jù)集中目標(biāo)真實框的寬高比,通過聚類發(fā)現(xiàn)其統(tǒng)計學(xué)規(guī)律,將聚類結(jié)果加入到模型訓(xùn)練,消除人工設(shè)置錨點框?qū)捀弑冗^程中存在的主觀因素。 加入K-Means 聚類后目標(biāo)檢測流程如圖2 所示。
圖2 引入K-Means 聚類的目標(biāo)檢測流程圖
在使用聚類算法優(yōu)化模型之前,錨點框的尺寸由手動進行選擇,使用K-Means 算法計算出更符合樣本中對象尺寸的錨點框,可以減少網(wǎng)絡(luò)微調(diào)先驗框到實際框的難度,本文選用的是標(biāo)準(zhǔn)歐氏距離的K-Means 算法,目的是提高IOU 的分數(shù),IOU 越大,“距離”越近,距離度量使用d=1-IOU(標(biāo)注框,聚類中心邊框)。
使用K-Means 進行聚類時,聚類中心點個數(shù)需要人為指定,初始位置需要隨機確定。 本文使用聚類算法的步驟如下:
(1)使用的聚類原始數(shù)據(jù)是XML 標(biāo)簽文件,每一個真實框包含四個坐標(biāo)。
(2)給定k 個聚類中心點。
(3)計算每個標(biāo)注框與各個聚類中心點的距離d=1-IOU(標(biāo)注框,聚類中心邊框),計算時每個標(biāo)注框的中心點都與聚類中心重合, 將標(biāo)注框分配給“距離”最近的聚類中心。
(4)所有標(biāo)注框分配完畢以后,對每個簇重新計算聚類中心點。
(5)重復(fù)步驟(3)、(4),直到聚類中心改變量很小。
K-Means 算法的偽代碼描述如下:
輸入:樣本集{X1,X2,…,Xm},設(shè)聚類數(shù)目k
過程:
經(jīng)過K-Means 算法對數(shù)據(jù)集進行預(yù)處理后,可以得出單個類別物體的真實框?qū)捀弑?,利用聚類后的值對SSD-Mobilenet 模型中錨點框進行優(yōu)化配置, 使模型能夠更加精確地對單一類別的目標(biāo)進行檢測。
實驗采用的操作系統(tǒng)環(huán)境為Windows 10, 中央處理器為Inter?Xeon?W-2123CPU@3.6GHz,顯卡為NVIDIA GeForce GTX1080,顯存大小為8 GB。 軟件環(huán)境采用Python3.5 語言,使用Google 的深度學(xué)習(xí)框架TensorFlow-gpu==1.9.0 版本。
實驗采用的數(shù)據(jù)集是Pascal VOC 2007 數(shù)據(jù)集。訓(xùn)練集包含5 011 張圖片、15 662 個圖像標(biāo)注,測試集包含4 952 張圖片、14 976 個圖像標(biāo)注。 在數(shù)據(jù)集標(biāo)簽文件中存在如圖3 所示的標(biāo)注順序不一致的問題,本文對數(shù)據(jù)集標(biāo)注進行重新編排,使其能更好地應(yīng)用于模型訓(xùn)練和測試。 數(shù)據(jù)集示例如圖4所示。
圖3 數(shù)據(jù)集樣例對比
將標(biāo)注的數(shù)據(jù)按照Pascal VOC 2007 格式進行保存,本文使用Google 的TensorFlow 深度學(xué)習(xí)框架進行模型訓(xùn)練。由于VOC 格式數(shù)據(jù)集是XML 格式的,不能直接進行訓(xùn)練,需要先將其轉(zhuǎn)換成CSV 格式,再進一步轉(zhuǎn)換成tfRecord 格式的數(shù)據(jù)。 數(shù)據(jù)集CSV格式示例如表2 所示。
在進行聚類之前,先將Pascal VOC 2007 數(shù)據(jù)集按照20 個類別通過開發(fā)Python 自動化程序進行拆分,將各個類別的圖片存入其所屬類別的文件夾,得到20 個類別的圖片數(shù)據(jù)集。 得到的各個類別的訓(xùn)練集和測試集圖片數(shù)量如表3 所示。
類似地,將20 個類別的XML 文件也通過同樣的方式進行分類,得到各個類別對應(yīng)的標(biāo)簽文件。 經(jīng)過對20 個類別的數(shù)據(jù)集真實框?qū)捀弑鹊腒-Means聚類,得到的結(jié)果如表4 所示。
圖4 數(shù)據(jù)集示例
表2 bounding box 標(biāo)注數(shù)據(jù)示例
表3 數(shù)據(jù)集切分后各類別數(shù)量統(tǒng)計
表4 各類別真實框?qū)捀弑菿-Means 聚類結(jié)果
3.4.1 模型訓(xùn)練損失
實驗過程中使用了TensorFlow 官方提供的目標(biāo)檢測API。 模型使用指數(shù)衰減學(xué)習(xí)率,初始學(xué)習(xí)率設(shè)定為0.02,衰減指數(shù)為0.95,每訓(xùn)練1 000 輪更新一次學(xué)習(xí)率。 調(diào)整錨點框后,在數(shù)據(jù)集上訓(xùn)練20 000 輪,訓(xùn)練損失曲線如圖5 所示。
模型的損失由兩部分構(gòu)成,即分類損失和定位損失,損失曲線上顯示,模型的損失在訓(xùn)練過程中逐漸下降并趨于平緩,最終達到收斂。
3.4.2 模型檢測效果
本文對比了SSD-Mobilenet 原模型與K-Means聚類優(yōu)化后的模型在Pascal VOC 2007 數(shù)據(jù)集上對20 個類別的檢測結(jié)果,并對模型進行評估,將評估結(jié)果與Fast RCNN、Faster RCNN、SSD、YOLO 等經(jīng)典算法作對比。
在Pascal VOC 2007 數(shù)據(jù)集上對優(yōu)化后的SSDMobilenet 模型進行評估, 得到模型在使用K-Means聚類算法優(yōu)化前后對20 個類別的檢測AP 值,如表5 所示,從中可以看出,模型對不同類別的物體檢測效果不盡相同, 對飛機識別的準(zhǔn)確率能達到100%,但是對瓶子的識別只達到了38.44%。
與Fast RCNN、Faster RCNN、SSD、YOLO 等經(jīng)典算法在Pascal VOC 2007 數(shù)據(jù)集上的mAP 值[15]比較結(jié)果如表6 所示。
在Pascal VOC 2007 數(shù)據(jù)集上,經(jīng)過20 000 輪的訓(xùn)練,對4 952 張圖片進行測試,得到的mAP 值為59.85%。 通過使用K-Means 算法對數(shù)據(jù)集分類別進行真實框的寬高比聚類,得到的mAP 值為71.42%,模型對各個類別識別與定位的檢測效果均有提升,對比先前經(jīng)典算法(見表6),本文對SSD-Mobilenet算法的優(yōu)化策略使mAP 值有所提升。
表5 Pascal VOC 數(shù)據(jù)集不同類別AP 值(IOU>0.5)
圖5 訓(xùn)練損失曲線
表6 不同算法在Pascal VOC 2007 測試集上的mAP 值
在測試集上進行測試,最高的檢測置信度可達到99%,如圖6 所示。
3.4.3 模型參數(shù)量和計算量
SSD-Mobilenet 的參數(shù)量和計算量相比SSD[7]算法大幅降低,如圖7 所示。 參數(shù)量的大幅降低可以使模型能夠部署在性能相對較低的硬件環(huán)境上,使模型易于應(yīng)用在實際生產(chǎn)環(huán)境中。
圖6 檢測結(jié)果示例
圖7 SSD、Mobilenet、SSD-Mobilenet 計算量和參數(shù)量比較
SSD-Mobilenet 模型是一種輕量化的目標(biāo)檢測模型,在保持模型檢測精度的前提下壓縮了網(wǎng)絡(luò)的規(guī)模,本文對于數(shù)據(jù)集目標(biāo)真實框的寬高比,通過K-Means 聚類得到其統(tǒng)計學(xué)特征,有效規(guī)避了人為設(shè)置的先驗性,該優(yōu)化策略提升了模型在特定場景下對單一類別目標(biāo)的檢測能力。 為了使模型適用于特定場景,本文提出的方法還可以對特定的數(shù)據(jù)集進行分析,得出更加準(zhǔn)確的錨點框,提升模型的可移植性,使其能夠在特定場景下完成特定的目標(biāo)檢測任務(wù)。