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