王 茜 陳一民 丁友東
1(上海大學(xué)計(jì)算機(jī)工程與科學(xué)學(xué)院 上海 200072) 2(上海市公安局刑事偵查總隊(duì)科技信息科 上海 200083)
由于機(jī)動車公共管理和事件查控的需求,我們往往需要在海量視頻監(jiān)控圖像中快速獲得相應(yīng)分類屬性的目標(biāo)車輛或車輛集。車型屬性相對于機(jī)動車的顏色、品牌、用途、大小等屬性而言,分類更加明確而精細(xì),對我們的價(jià)值也更大,但針對其進(jìn)行圖像分類任務(wù)也面臨更多挑戰(zhàn)。以往各類方法或需要過多預(yù)處理操作,或識別率低,且多數(shù)僅基于小型數(shù)據(jù)集。自基于神經(jīng)網(wǎng)絡(luò)的深度學(xué)習(xí)問世以來,基于大規(guī)模圖像數(shù)據(jù)的應(yīng)用開始成為可能,如何基于有效CNN網(wǎng)絡(luò),對基于監(jiān)控圖像的海量機(jī)動車圖像進(jìn)行高精度的屬性分類,是公安需要解決的實(shí)際問題。
近幾年業(yè)內(nèi)熟知的Alex CNN[1]、GoogleNet V1[2]、VGGnet[3]、ResNet[4]等CNN網(wǎng)絡(luò),伴隨著網(wǎng)絡(luò)層級不斷增加,算法往往需要大量訓(xùn)練時(shí)間和計(jì)算量消耗,網(wǎng)絡(luò)層級增加導(dǎo)致參數(shù)變大的弊端也越來越凸顯。學(xué)者們開始把目光從原有通過致力于增加網(wǎng)絡(luò)深度以提升識別準(zhǔn)確率的研究方向,轉(zhuǎn)入到增加網(wǎng)絡(luò)廣度、減少網(wǎng)絡(luò)參數(shù)和提高收斂速度的研究中。2015年起,Googlenet在原有算法97中推出了V2版本[5],提出了更加有效提高學(xué)習(xí)率的批泛化層BN(Batch Normalization)取代原有成效不高的網(wǎng)絡(luò)的局部反應(yīng)歸一化層LRN(Local Response Normalization)。2015年底,Googlenet再次提出了V3版本[6],全面提出了inception單元的概念,對于減少網(wǎng)絡(luò)參數(shù)和提升網(wǎng)絡(luò)廣度做出了較大貢獻(xiàn)。
在解決一直困擾大家的不均衡樣本導(dǎo)致的識別偏差的問題上,難負(fù)樣本挖掘[7]HNM(Hard negative mining)是重要的通用性減輕樣本不均衡性的方法。文獻(xiàn)[7]就將該方法應(yīng)用于花卉問題,以期配合樣本增加解決花卉種類過多而樣本過少的問題;文獻(xiàn)[8]提到了方法對計(jì)算資源的消耗較大,并提出了減少挖掘算法次數(shù)的選擇性Hard negative mining方法,同時(shí)通過高斯分布函數(shù)計(jì)算正確和錯(cuò)誤預(yù)測的正樣本。
在防止過擬合和縮減網(wǎng)絡(luò)大小的進(jìn)展中,每一個(gè)神經(jīng)元擁有相同的概率被丟棄和保留的dropout方法被提出和廣泛應(yīng)用[9]。但部分學(xué)者提出了用不同決定性和隨機(jī)性影響因子替代原有隨機(jī)dropout參數(shù)的方法,以通過對復(fù)合數(shù)據(jù)集中不同部分集合的局部參數(shù)調(diào)整,實(shí)現(xiàn)對識別效果的整體優(yōu)化[9-10]。
本文基于前述方法,采用了節(jié)省網(wǎng)絡(luò)層級和時(shí)間消耗的CNN網(wǎng)絡(luò)。我們將該網(wǎng)絡(luò)輔以優(yōu)化后的dropout參數(shù)以加快收斂算法,通過改進(jìn)的Hard negative mining方法減少異類樣本分布不均衡性帶來的不利影響。
我們采用了真實(shí)城市道路中6個(gè)路口共計(jì)42 個(gè)多角度高清攝像頭,抓拍過往車輛圖片。經(jīng)過6個(gè)月的時(shí)間,我們?nèi)コ送囆椭袠颖緮?shù)少于100的極小類車型圖片和遮擋、模糊圖片,整理出車輛圖片共計(jì)100萬張,即使這樣,同一車型下最多樣本數(shù)達(dá)到了73 714張,最少樣本數(shù)僅為100張,數(shù)據(jù)集仍呈現(xiàn)了極度不均衡性。我們按80%和20%的比例將其分為訓(xùn)練集和測試集。
本文基于深度神經(jīng)網(wǎng)絡(luò)的車輛屬性分類算法示意如圖1所示。
圖1 基于深度神經(jīng)網(wǎng)絡(luò)的車輛車型屬性分類算法示意圖
算法詳細(xì)實(shí)施過程如下:
① 數(shù)據(jù)輸入(Input):
我們將共計(jì)T類車型的P張訓(xùn)練圖片集統(tǒng)一歸一化為3 200×160的RGB圖像,并將其表述為:
{xp|xp∈}(1≤p≤P)
(1)
② 神經(jīng)網(wǎng)絡(luò)(CNN)訓(xùn)練:
圖2所示為我們采用的神經(jīng)網(wǎng)絡(luò)模型。除輸入層外,中間經(jīng)過了共計(jì)三個(gè)卷積層Conv(Convolution)、一個(gè)池化層(pool)、六個(gè)Inception單元,兩個(gè)全連接層(Full connecting)。
圖2 算法卷積神經(jīng)網(wǎng)絡(luò)部分結(jié)構(gòu)圖
卷積層(Conv1-3):通過卷積,獲取圖像的多個(gè)特征。每個(gè)卷積后面均跟隨一個(gè)修正線性單元ReLU(Rectified Linear Units)和BN層。參數(shù)設(shè)置上patch size均為3,stride為2,channel為32,pad為2。Conv1-Conv3參數(shù)共計(jì)928+9 280+18 624=28 832個(gè)。
最大池化層(pool):采用最大池化層降低特征圖(feature map)一半的大小,stride為2(非重疊),patch size設(shè)為2。
Inception1-Inception6單元:為減少參數(shù)和加速收斂,將原有5×5卷積改為兩個(gè)3×3,增加了網(wǎng)絡(luò)的非線性。inception單元內(nèi)部參照googlenet V3中的設(shè)計(jì)[6],但單元數(shù)較之原算法減少一半。值得一提的是,我們將Inception2到Inception4和Inception4到Inception6單元之間,設(shè)計(jì)了兩條跳轉(zhuǎn)直連的網(wǎng)絡(luò)通路,目的是為了避免多次Inception傳輸后導(dǎo)致的特征損失(圖2中虛線表示)。
全連接層(1-2):將Inception單元最后獲得的“分布式特征表示”,映射到樣本標(biāo)記空間,下述的dropout就在全連接層1展開,具體見③,全連接層1生成大小為512的輸出,全連接層2將1輸出大小再次減半,最終獲得大小為H=256的輸出層記為{yp,n},為CNN后生成的全連接特征值??傻茫?/p>
(2)
式中:Fcnn(·)為xp經(jīng)過多重神經(jīng)網(wǎng)絡(luò)后生成yp的H個(gè)特征值的函數(shù)表示。
③ 分類:
直接根據(jù)歐式距離生成樣本間的距離函數(shù),任意兩張圖片p1和p2間距離為:
(3)
我們將生成距離用Softmax分類,盡可能讓類間距離最小,類內(nèi)距離最大,即下式最小:
(4)
式中:φ(·)為用Softmax回歸函數(shù)生成的預(yù)測概率和真實(shí)概率的交叉熵。最終完成車輛屬性分類,生成車型類別為1到T的集合結(jié)果。
④ 難負(fù)樣本挖掘:
{x(i,t)|xi,t∈} 1≤t≤T1≤i≤It
(5)
即xi,t為第t車型類別下的第i張圖片。
我們首先將本次CNN網(wǎng)絡(luò)迭代次數(shù)記為r,并假設(shè)在第r次迭代完成之前,C圖片已被神經(jīng)網(wǎng)絡(luò)判別為tc車型分類的positive數(shù)據(jù)集中,這時(shí)網(wǎng)絡(luò)的輸出層可表述為:
tc(r-1)∪HNeg(r-1)
(6)
即被分為相對于tc完全分類的true positive和hard negitive兩部分的數(shù)據(jù)集。所有的圖片可以在多次不同的迭代中分類到各自的true positive集中去,如圖片B被正確分類為tc,我們這里不做繼續(xù)討論。但設(shè)在第r次迭代中獲得的正樣本集為tc(r)中存在正確正分類Truetc(r)和錯(cuò)誤正分類Falsetc(r),即:
tc(r)=Truetc(r)∪Falsetc(r)
(7)
我們將錯(cuò)誤正分類并入原HNeg(r-1),正確正分類并入原tc(r-1),即:
HNeg(r)=HNeg(r-1)∪Falsetc(r)
(8)
tc(r)=tc(r-1)∪Truetc(r)
(9)
為考慮在類別t下正樣本過多情況下tc(r)不斷增長所引發(fā)的數(shù)據(jù)不均衡加劇的情況,不同于文獻(xiàn)[8]的處理方式,我們引入了質(zhì)心和距離函數(shù)δ(t,r,i),當(dāng)時(shí),即It(r)為第r次迭代在類別t下正樣本數(shù)與該迭代時(shí)的總樣本數(shù)P(r)的比值等于π(t,r)倍的總樣本均衡分類值時(shí),開始篩選tc(r)集合中的樣本。π(t,r)可寫為:
(10)
篩選時(shí),我們保留該集合下最邊界的樣本,即找出距離質(zhì)心最近的樣本的予以丟棄,以停止該分類下樣本數(shù)增長。距離函數(shù)定義為:
(11)
我們將丟棄操作記為Throw():
(12)
即在達(dá)到π(t,r)條件時(shí),執(zhí)行Throw()操作。其中findmin(δ(t,r,i))為找出距離質(zhì)心最小距離的樣本。根據(jù)我們車輛數(shù)據(jù)的不均衡度,我們將π(t,r)設(shè)為4,即保留正樣本數(shù)不超過樣本均衡分類值的4倍。值得注意的是,為了避免樣本差別大導(dǎo)致的質(zhì)心偏移,我們建議該方法應(yīng)用于不均衡性程度高且樣本量足夠大的數(shù)據(jù)集中。所得結(jié)果將不斷更新入網(wǎng)絡(luò)輸入層,隨著迭代次數(shù)的增加,增強(qiáng)各類別邊界的易混淆類別的數(shù)據(jù)易分性。
⑤ 基于神經(jīng)元重要性分值的dropout實(shí)施:
我們把dropout的操作實(shí)施在全連接層1上,未沿用以往隨機(jī)減去神經(jīng)元的做法,而是參考了文獻(xiàn)[10]的方法后,采用了簡單計(jì)算的基于分值的dropout方法。給每個(gè)神經(jīng)元m在網(wǎng)絡(luò)中所起到的重要性進(jìn)行打分,分值記為Score(m),設(shè):
Score(m)=φ(Fcnn(xp))-φ(Fcnn-m(xp))
(13)
式中:Fcnn-m(·)表示將神經(jīng)元m置為無效時(shí)的神經(jīng)網(wǎng)絡(luò),即我們把m無效時(shí)和有效時(shí),兩者的回歸概率差值作為該神經(jīng)元的重要性的分值函數(shù)。判定是否丟棄該神經(jīng)元的判定函數(shù)為:
(14)
式中:ω為重要性分值的臨界閾值。我們把ω置為0,即當(dāng)神經(jīng)元m有作用時(shí)予以保留(即dropout(m)=0),無作用或?yàn)樨?fù)作用時(shí)丟棄(即dropout(m)=1)。該方法既減少了隨機(jī)dropout帶來的盲目性,又可以根據(jù)ω值得設(shè)置,保留神經(jīng)網(wǎng)絡(luò)中發(fā)揮作用或作用最大的神經(jīng)元,在縮減網(wǎng)絡(luò)大小和去除無效網(wǎng)絡(luò)結(jié)構(gòu)的同時(shí),實(shí)現(xiàn)了提升網(wǎng)絡(luò)識別效果的雙重作用。
本文神經(jīng)網(wǎng)絡(luò)模型訓(xùn)練過程如圖3(a)所示,為便于比較性能,我們在圖3(b)中同時(shí)展示了Googlenet V3算法的訓(xùn)練情況。在兩者同樣進(jìn)行共計(jì)20.083 33小時(shí)的241 000次迭代過程中,本文算法在耗時(shí)15.92小時(shí)的191 000次迭代中達(dá)到收斂,此時(shí)識別率(accuracy)為91.69%,距離最終最高正確率91.96%僅0.27個(gè)百分點(diǎn);較之圖3(b)中Googlenet V3中在耗時(shí)18.33小時(shí)的第220 000次迭代達(dá)到收斂,具有訓(xùn)練時(shí)耗少、收斂速度快的特點(diǎn)。究其原因,本文在難負(fù)樣本挖掘和基于神經(jīng)元重要性分值的dropout步驟,起到了提升算法識別率和效率的作用。
(a)
(b) 圖3 本文神經(jīng)網(wǎng)絡(luò)算法與Googlenet V3訓(xùn)練過程比較
我們接著對本文神經(jīng)網(wǎng)絡(luò)與業(yè)界熟知的神經(jīng)網(wǎng)絡(luò)進(jìn)行了識別率的比較,結(jié)果如表1所示。我們看到,本文算法在前1(top1)和前5(top5)置信度上獲得了91.96%和96.42%的識別率,較之Lenet CNN、Alex CNN、Googlenet V197,在top1上都有較大的提升;在與較本文算法層級更多的Googlenet V3算法的識別率比較上,本文算法在top1上略高于V3算法0.74個(gè)百分點(diǎn),證明了算法在圖像分類上的優(yōu)越性。
表1 各主流神經(jīng)網(wǎng)絡(luò)算法與本文算法的識別正確率比較
本文利用一種識別率、收斂速度、訓(xùn)練耗時(shí)均優(yōu)于googlenet V3的改進(jìn)的CNN神經(jīng)網(wǎng)絡(luò)算法,實(shí)現(xiàn)了基于大規(guī)模機(jī)動車圖像庫的車型屬性分類。我們在該CNN網(wǎng)絡(luò)的基礎(chǔ)上,提出了通過難負(fù)樣本挖掘和基于神經(jīng)元中重要性分值的dropout方法,緩解了樣本不均衡性問題帶來的不利影響,進(jìn)一步提升了神經(jīng)網(wǎng)絡(luò)的特征提取能力,顯著減少了神經(jīng)網(wǎng)絡(luò)的算法消耗,提升了算法的訓(xùn)練速度。下一步我們擬進(jìn)一步增加樣本,及將該算法應(yīng)用在車輛其他屬性分類實(shí)踐中,實(shí)現(xiàn)車輛全屬性的分類。