詹煒 (長江大學(xué)計算機科學(xué)學(xué)院,湖北 荊州 434023)
Inomjon Ramatov (長江大學(xué)計算機科學(xué)學(xué)院,國際學(xué)院,湖北 荊州 434023)
崔萬新,喻晶精 (長江大學(xué)計算機科學(xué)學(xué)院,湖北 荊州 434023)
從計算機誕生之時,人們就希望它可以幫助甚至代替人類完成一些重復(fù)性工作。利用巨大的存儲空間和極快的運算速度優(yōu)勢,計算機可以輕易地完成一些對于人類非常困難的問題。如統(tǒng)計一本書中不同單詞出現(xiàn)的次數(shù),存儲一個圖書館中所有的藏書,計算復(fù)雜的數(shù)學(xué)公式,都可以通過計算機輕松解決。然而,一些人類可以輕松解決的問題,目前卻難以通過計算機實現(xiàn)。如自然語言理解、圖像識別、語音識別等,而這些就是人工智能(artificial intelligence,AI)[1]需要解決的問題。
2006年以來,隨著深度學(xué)習(xí)的出現(xiàn),機器學(xué)習(xí)領(lǐng)域取得突破性進展。深度學(xué)習(xí)是機器學(xué)習(xí)的一個分支,其動機在于建立、模擬人腦進行分析學(xué)習(xí)的神經(jīng)網(wǎng)絡(luò),它模仿人腦的機制來解釋數(shù)據(jù),如圖像、聲音和文本。2006年加拿大多倫多大學(xué)教授、機器學(xué)習(xí)領(lǐng)域的泰斗Geoffrey Hinton和他的學(xué)生Ruslan Salakhutdinov在《Science》上發(fā)表了一篇文章,掀起了深度學(xué)習(xí)在學(xué)術(shù)界和工業(yè)界的研究和應(yīng)用浪潮[2]。之后一直到2016年由Google開發(fā)的AlphaGo擊敗圍棋世界冠軍李世石,人工智能的深度學(xué)習(xí)展現(xiàn)出了極大的潛力。
雖然人工智能目前已經(jīng)可以擊敗圍棋世界冠軍,但讓人工智能實現(xiàn)汽車自動駕駛?cè)匀皇掷щy。要實現(xiàn)汽車自動駕駛,計算機需要判斷哪里是路,哪里是障礙,這些對人類非常直觀的東西對計算機卻是相當困難,這是因為人類有最重要的感知系統(tǒng)——視覺。人類大腦中幾乎一半的神經(jīng)元與視覺有關(guān),視覺系統(tǒng)主要解決的是物體識別、物體形狀和方位確認、物體運動判斷這3個問題。人類能通過視覺從復(fù)雜結(jié)構(gòu)的圖片中找到關(guān)注重點,在幽暗的環(huán)境中認出熟人。但由于主觀及客觀條件的影響,導(dǎo)致許多信息無法被人類視覺系統(tǒng)準確獲取,于是便產(chǎn)生了計算機視覺(computer vision,CV)[3]。隨著信息時代的到來,大量圖像和視頻數(shù)據(jù)的產(chǎn)生,計算機視覺已成為人工智能最重要和發(fā)展最快的研究領(lǐng)域之一。
計算機視覺是一個跨領(lǐng)域的交叉學(xué)科,通過計算機模擬人的視覺系統(tǒng),實現(xiàn)人的視覺功能,以適應(yīng)、理解外界環(huán)境和控制自身的運動。計算機視覺能夠增強、改善人們的生活,代替人類完成更多的任務(wù):一方面,它為人類自身視覺提供強有力的輔助和增強,極大地改善人與世界交互的方式,如通過圖片搜索引擎找到與之相關(guān)信息;另一方面,機器可以準確、客觀而穩(wěn)定地看見,突破人類視覺的局限,代替人類完成更多的任務(wù),如24h不間斷、不疲倦地進行場景監(jiān)控。
人工智能基礎(chǔ)架構(gòu)如圖1所示,計算機視覺賦予機器“看”和“認知”的功能,是人工智能的一類基礎(chǔ)應(yīng)用技術(shù),它與語言識別[4]、語音識別[5]一起構(gòu)成人工智能的感知智能,讓機器完成對外部世界的探測,進而做出判斷,采取行動,讓更復(fù)雜層面的智慧決策、自主行動成為可能。基于深度學(xué)習(xí)算法模型和CPU、GPU等關(guān)鍵硬件的支撐,計算機視覺技術(shù)應(yīng)用得以實現(xiàn),并最終集成于多類產(chǎn)品和應(yīng)用場景之中,目前計算機視覺正應(yīng)用于車輛交通檢測[6]、智慧工業(yè)[7]、農(nóng)業(yè)自動化[8]等多個領(lǐng)域。
圖1 人工智能基礎(chǔ)架構(gòu)
圖2 目標檢測流程
作為圖像理解和計算機視覺的基石,目標檢測(object detection)是計算機視覺中真正核心的任務(wù),也一直都是一個活躍的研究領(lǐng)域。目標檢測流程如圖2所示,目標檢測不是簡單的將圖像分類,是將目標定位和目標分類結(jié)合起來,通過海量而優(yōu)質(zhì)的圖片數(shù)據(jù)訓(xùn)練算法模型,從而實現(xiàn)機器判斷出輸入圖像中具有所需特征的物體,并且確定目標物體的位置與范圍。其準確性和實時性是整個系統(tǒng)的重要指標。然而,這其中有很多難點,如視角、不同照明條件、可變型、遮擋、圖片背景混亂、類內(nèi)差異,算法需要處理這些難點,這是具有挑戰(zhàn)性的難題。
傳統(tǒng)的目標檢測算法[9]多是通過在輸入圖像中滑動一個固定大小的窗口,將窗口中的子圖像作為候選區(qū),使用尺度不變特征變換(Scale-Invariant Feature Transform,SIFT)[10~12]、方向梯度直方圖(Histogram of Oriented Gradient,HOG)[13~15]、Haar[16]提取特征,再使用訓(xùn)練完成的分類器進行分類,如部位形變模型(Deformable Part Model,DPM)[17~20]、支持向量機(Support Vector Machine,SVM)模型[21]等。但是,由于傳統(tǒng)目標檢測主要存在的2個缺陷(基于滑動窗口的區(qū)域選擇策略的針對性不強,導(dǎo)致時間復(fù)雜度提高,窗口冗余;設(shè)計的特征難以應(yīng)用于多目標檢測),使得其目標檢測的準確性達不到實際需求。為促進計算機視覺的發(fā)展,從2009年開始,ImageNet團隊組織了ImageNet大規(guī)模視覺識別大賽,其中具有7層的AlexNet卷積網(wǎng)絡(luò)[22]在2012年度的大賽中以絕對的優(yōu)勢取得冠軍,其效果遠超傳統(tǒng)算法,將大眾的視野聚集到了卷積神經(jīng)網(wǎng)絡(luò)(Convolutional Neuron Networks,CNN)。
從2012年到2015年,通過對深度學(xué)習(xí)算法的不斷研究,ImageNet圖像分類的錯誤率以4%的速度遞減,這說明深度學(xué)習(xí)算法完全打破了傳統(tǒng)算法在圖像分類上的瓶頸,讓圖像分類問題得到了更好的解決。到2015年時,深度學(xué)習(xí)算法的錯誤率為4.94%,已經(jīng)成功超越了人工標注的錯誤率(5.1%),實現(xiàn)了計算機視覺研究領(lǐng)域的一個突破。
圖3 LeNet-5模型
一個簡單的卷積神經(jīng)網(wǎng)絡(luò)是由各種層按照順序排列組成,主要由輸入層、卷積層、池化層、全連接層、輸出層組成。通過將這些層疊加起來,就可以組成一個完整的神經(jīng)網(wǎng)絡(luò)。由加拿大多倫多大學(xué)LeCun教授提出的LeNet-5網(wǎng)絡(luò)[23]如圖3所示,該模型由8層網(wǎng)絡(luò)結(jié)構(gòu)構(gòu)成,除輸出層外,其余每層都有訓(xùn)練參數(shù)。
卷積層是構(gòu)建卷積神經(jīng)網(wǎng)絡(luò)的核心層,它產(chǎn)生網(wǎng)絡(luò)中大部分的計算量。卷積層越多,特征的表達能力就越強。卷積核是卷積層的重要組成,其作用是對輸入圖像的深層信息進行提取。輸入圖像大小為32×32(像素),卷積核大小為5×5(像素),采用滑動窗口的方法對圖像進行卷積,得到的特征圖大小為28×28(像素)。特征圖之間是相互聯(lián)系的,上層特征圖會影響下一層特征圖。
(1)
常用的激活函數(shù)為sigmoid函數(shù)和tanh函數(shù):
(2)
(3)
通常,在連續(xù)的卷積層之間會周期性地插入一個池化層。池化層的作用是逐漸降低數(shù)據(jù)體的空間尺寸,減少網(wǎng)絡(luò)中參數(shù)的數(shù)量,使得計算資源耗費變少,也能有效地控制過擬合。一般池化層可以通過以下方式計算:
(4)
圖4 卷積和池化過程
式中:d(x)為池化操作,一般是進行最大池化操作,它是將輸入的圖像劃分為若干個局部區(qū)域,對每個局部區(qū)域輸出最大值。池化層會不重疊地選擇局部區(qū)域,再次計算出圖像重要的特征值。經(jīng)過圖像的二次特征提取,池化層降低了空間尺寸,提高了抗畸變的能力。卷積和池化操作如圖4所示。卷積過程為:利用卷積核fx卷積圖像,再加上偏移量bx,最后得到特征圖。池化過程為:最常用的降采樣操作是取最大值,這里使用的是尺寸為2×2大小(像素)的濾波器,每個取最大值操作是從4個數(shù)字中選取(即2×2的方塊區(qū)域中)。
全連接層在整個卷積神經(jīng)網(wǎng)絡(luò)中起到“分類器”的作用,全連接層位于提取特征之后,全連接層將上一層的所有神經(jīng)元和當前層的每個神經(jīng)元相互連接,將局部特征結(jié)合成全局特征。
全連接層的一般形式為:
xl=f(wlxl-1+bl)
(5)
式中:wl表示全連接層的權(quán)重;bl表示全連接層的偏移量;函數(shù)f(x)表示非線性激活函數(shù),即sigmoid函數(shù)或tanh函數(shù)。
由Girshick等提出的R-CNN是將卷積神經(jīng)網(wǎng)絡(luò)用于目標檢測的開端[24]。圖5是R-CNN進行目標檢測步驟。首先是利用Selective search方法[25]從輸入圖片中預(yù)測目標可能出現(xiàn)的位置,生成若干個候選區(qū)域;然后將每個候選區(qū)域轉(zhuǎn)換為固定大小并使用卷積神經(jīng)網(wǎng)絡(luò)對其提取特征;最后使用SVM分類器對特征進行分類,并通過邊界回歸得到精確的目標區(qū)域。
圖5 R-CNN目標檢測流程圖
圖6 空間金字塔池化層工作過程
圖7 Fast R-CNN目標檢測流程
雖然R-CNN較傳統(tǒng)的CNN在目標檢測方面準確性更高,但實時性達不到實際需求,其原因是:①訓(xùn)練分為多個階段,微調(diào)卷積神經(jīng)網(wǎng)絡(luò),對SVM分類器進行訓(xùn)練,對邊界回歸器進行訓(xùn)練,訓(xùn)練空間和時間代價很高;②多個候選區(qū)域?qū)?yīng)的圖像需要預(yù)先提取,占用較大的磁盤空間,R-CNN對每個候選區(qū)域都放入卷積神經(jīng)網(wǎng)絡(luò)進行特征提取,計算量巨大。
卷積神經(jīng)網(wǎng)絡(luò)需要輸入固定大小的圖像尺寸(如224×224)才能進行特征提取和特征分類。為了卷積神經(jīng)網(wǎng)絡(luò)能夠處理任意尺寸和比例的圖像,何愷明等[26]提出了空間金字塔池化層(Spatial Pyramid Pooling,SPP)??臻g金字塔池化層工作過程如圖6所示。通過將空間金字塔池化層替換掉全連接層之前的最后一個池化層,有效解決了R-CNN需要對每一個候選區(qū)域獨立計算的問題,該網(wǎng)絡(luò)結(jié)構(gòu)稱為SPP-net。
空間金字塔池化層工作過程為:輸入圖像在卷積層中進行特征提取,得到一個隨意大小的特征圖,接著在空間金字塔池化層中把特征圖分成不同大小的空間塊,如4×4、2×2、1×1,在每個空間塊中進行一次最大池化。池化后的特征拼接得到一個k×w維的固定維度向量(k為最后一層卷積層的卷積核數(shù)量,w代表空間塊的數(shù)目), 這個固定維度的向量就是全連接層的輸入。雖然SPP-net在檢測速度上大大提高,但是SPP-net仍然存在著同R-CNN一樣的問題:訓(xùn)練分為多個階段,步驟繁瑣。
由Girshick提出的Fast R-CNN[27]修正了R-CNN和SPP-net的缺點,同時提高其速度和準確性。圖7是Fast R-CNN目標檢測流程。
Fast R-CNN目標檢測的過程為:整個網(wǎng)絡(luò)首先會使用多個卷積層和池化層來處理輸入圖像,產(chǎn)生特征圖。對每一個候選區(qū)域,用ROI池化層從特征圖中提取出固定長度的特征向量。然后特征向量將被送入一系列全連接層中,這將分支成2個同級輸出層:一個使用softmax輸出N個類別的概率估計,另一個輸出N個類別的檢測框坐標,修正邊界位置。
ROI是卷積特征圖中的一個矩形窗口,ROI池化層是對任何有效的ROI卷積特征圖通過最大池化轉(zhuǎn)換成固定空間范圍(H×W)的小特征圖,其中H和W是層的超參數(shù),獨立于任何一個ROI。如一個尺寸大小為h×w的ROI窗口分割成H×W個網(wǎng)格,那么子窗口大小需要劃分為(h/H)×(w/W),然后對每個子窗口進行最大池化,得到相應(yīng)的輸出。ROI池化層其實只是SPP-net中使用的空間金字塔池化層的特殊情況,只有一個金字塔層。
Fast R-CNN網(wǎng)絡(luò)主要有以下優(yōu)點:①訓(xùn)練使用多任務(wù)損失函數(shù)的單階段訓(xùn)練,實現(xiàn)端到端的訓(xùn)練過程;②訓(xùn)練可以更新所有網(wǎng)絡(luò)層參數(shù);③不需要額外的磁盤空間來緩存特征。其主要缺點在于,使用selective search算法提取候選區(qū)域,使得目標檢測時間大多消耗在提取候選區(qū)域上,實時性無法滿足實際需求。
圖8 RPN網(wǎng)絡(luò)結(jié)構(gòu)程
圖9 Mask R-CNN實例分割框架
R-CNN和Fast R-CNN都是使用selective search算法提取候選區(qū)域,但候選區(qū)域生成速度慢,特征層次較低,生成的候選區(qū)域質(zhì)量不高。因此,任少卿等提出了Faster R-CNN[28],主要由區(qū)域建議網(wǎng)絡(luò)(Region proposal -network,RPN)候選框提取模塊和Fast R-CNN檢測模塊2個模塊組成。
RPN網(wǎng)絡(luò)結(jié)構(gòu)如圖8所示。對于任意大小的圖像輸入到RPN中,都可以生成高質(zhì)量的區(qū)域建議框。RPN網(wǎng)絡(luò)中使用一個3×3的卷積核,采用滑動窗口機制,在最后一個共享卷積層參數(shù)的特征圖上滑動,以滑動窗口的中心對應(yīng)位置映射回輸入圖像,預(yù)設(shè)3種尺度和3種長寬比,這樣在特征圖的每一個位置都對應(yīng)著9個錨框。如果特征圖的大小是H×W,則一共有H×W×9個錨框,采用滑動窗口能夠關(guān)聯(lián)特征圖的全部特征空間,使得RPN提取的候選區(qū)域更加準確。之后再連接2個同級的1×1卷積層,其中一個使用softmax分類輸出錨框目標和背景的分數(shù),另一個用于輸出錨框?qū)?yīng)于真實目標邊界框的回歸偏移量。通過這2個輸出對錨框進行初步篩選和初步偏移,最終得到候選區(qū)域。
為了實現(xiàn)實例分割,何愷明等[29]提出了Mask R-CNN。該模型在Faster R-CNN的基礎(chǔ)上增加了第3個模塊——目標掩碼模塊。Mask R-CNN實例分割框架如圖9所示。
ROI池化層在進行歸一化過程中,會導(dǎo)致ROI和提取的特征之間產(chǎn)生錯位,因此Mask R-CNN模型使用ROI Align層替代了ROI池化層。ROI Align層采用了雙線性內(nèi)插法,根據(jù)ROI中的4個采樣點計算輸入特征的精確值并匯總結(jié)果,對提取的特征和輸入之間進行了校準。
Mask R-CNN定義了一個多任務(wù)損失函數(shù)L:
L=Lcls+Lbox+Lmask
(6)
式中:Lcls是分類誤差;Lbox是真實目標邊界框回歸誤差;Lmask是分割誤差。對于每一個ROI,掩碼分支都有一個Km2維的矩陣輸出,即K個類別在分辨率為m×m上的二進制掩碼。對于每一個像素,都是采用sigmoid函數(shù)求得平均二值交叉熵損失函數(shù),即Lmask。對于僅與第K類相關(guān)聯(lián)的ROI,Lmask僅在第K個上定義掩碼,避免了不同類別掩碼之間的影響,有效增強了實例分割的效果。
表1 基于候選區(qū)域的深度卷積網(wǎng)絡(luò)在目標檢測方面的性能對比
基于候選區(qū)域的深度卷積網(wǎng)絡(luò)在目標檢測方面的性能對比如表1所示,F(xiàn)aster-RCNN在準確性和實時性上遠遠超越其余模型,而Mask R-CNN在性能上與Faster R-CNN差別不大,因為Mask R-CNN主要用于掩碼輸出,故表1中未標注Mask R-CNN。
傳統(tǒng)的目標檢測任務(wù)使用滑動窗口的框架,把一張圖分解成幾百萬個不同位置不同尺度的子窗口,針對每一個窗口使用分類器判斷是否包含目標物體,這有極大的局限性。近年來,基于候選區(qū)域的深度學(xué)習(xí)目標檢測算法飛速發(fā)展,從最初的R-CNN到現(xiàn)在的Mask R-CNN,其準確性和實時性比傳統(tǒng)的目標檢測有極大的突破,同時還在實例分割方面達到了目前最高的水準,但是距離廣泛地實際應(yīng)用還有一段差距。除此之外,還產(chǎn)生了基于回歸的深度學(xué)習(xí)目標檢測YOLO[30]、SSD[31]系列算法。R-CNN系列算法和YOLO、SSD系列算法為研究深度學(xué)習(xí)目標檢測提供了2種基本框架。以下是基于深度卷積神經(jīng)網(wǎng)絡(luò)的目標檢測的研究熱點:
1)多層網(wǎng)絡(luò)特征融合[32]。傳統(tǒng)的卷積神經(jīng)網(wǎng)絡(luò)就是把輸入圖像一層一層地進行映射和過濾,其中最后一層的特征就是最后的結(jié)果。在此過程中,不同的卷積神經(jīng)網(wǎng)絡(luò)層提取的特征是不相同的,淺層網(wǎng)絡(luò)提取的大多是層次信息,最深層的網(wǎng)絡(luò)得到的則是更加抽象的語義信息,所以傳統(tǒng)的卷積神經(jīng)網(wǎng)絡(luò)只是利用最深層網(wǎng)絡(luò)提取出的特征信息來構(gòu)建分類器,過濾掉淺層網(wǎng)絡(luò)的特征信息,因此需要更有效地解決多層網(wǎng)絡(luò)特征融合來增強模型算法對圖像的表現(xiàn)能力。
2)合理利用有效感受野。感受野是指卷積神經(jīng)網(wǎng)絡(luò)中神經(jīng)元對應(yīng)輸入圖像的區(qū)域,即特征輸出受感受野區(qū)域內(nèi)的像素點的影響。當對輸入圖像中的每個像素進行預(yù)測時,每個輸出像素具有大的感受野是至關(guān)重要的,這會使重要的信息在預(yù)測時不被遺漏。有效感受野即是感受野在預(yù)測時作用較大的區(qū)域,它具有高斯分布,且僅占整個理論的感受野很小的一部分。有效感受野對卷積神經(jīng)網(wǎng)絡(luò)的深度工作非常重要,如果有效感受野在目標中占有的面積很大,則目標檢測中該神經(jīng)元的效果好。
3)利用上下文關(guān)聯(lián)信息。目標檢測在實際應(yīng)用中目標不可能是一個獨立存在的個體,它或多或少會與周圍其他的對象或者環(huán)境有一定關(guān)系,這就是上下文關(guān)聯(lián)信息。機器需要通過捕捉不同的對象之間的相互作用信息,依此來對新目標進行檢測。上下文關(guān)聯(lián)信息能提高識別的準確度和精確度。但是想要將其廣泛應(yīng)用于實踐之中仍有很多問題需要解決,因此有效利用上下文關(guān)聯(lián)信息還是如今研究的熱點。
總而言之,基于深度卷積網(wǎng)絡(luò)的目標檢測依舊是一個充滿了挑戰(zhàn)性的課題,其研究意義和應(yīng)用價值十分重要。隨著更多更全面的數(shù)據(jù)集和各種開源深度學(xué)習(xí)框架的出現(xiàn),該課題將會更加快速地發(fā)展。