石建樹
(江蘇科技大學 鎮江 212003)
AUV(水下自主機器人)在執行任務時由于受到水下通信距離和速率,以及自身能源消耗的約束需要定時回航與回收塢站對接完成充電及數據傳輸。AUV回航階段末期需要使用視覺定位彌補超短基線及慣導近距離定位的不足,能否正確識別光源引導信號就變得非常重要。
一般水下近距離定位使用的是光視覺圖像。與空氣中的圖像不同,由于水介質的光學特性,水下圖像在不同的水下條件下容易產生模糊、顏色偏移、對比度降低和光照不均勻的效果,且在不同的位置和角度(方向度)下拍攝會產生變形,這是水下對接的一個難題。許多國內外學者對該問題投入了研究,取得了不少研究成果。現有的光源識別方法大多是基于經典的普通分類識別方法進行設計和修改的。文獻[1]提出了一種基于仿射不變矩作為衡量標準,以顏色、形狀、紋理和SISF、SIFT、HOG作為局部不變特征,以SVM做分類的光源檢測方法。該方法使得檢測具備一定魯棒性,對于正面目標查準率能達到90.3%。文獻[2]提出了基于幾何關系的偽光源剔除,根據真偽光源一般所處的位置關系剔除偽光源,識別真光源。文獻[3]提出了一種基于BLOB分析的貝葉斯最小錯誤率偽光源剔除,以BLOB算子從7個維度對光源圖像進行分析,并從實驗中提取了200多個光源的BLOB算子下的特征建立起高斯模型并以貝葉斯最小錯誤率準則進行剔除偽光源,再將剩下的光源與模板進行匹配獲得識別結果。以往的研究多以水下光源的直觀形態特征作為分類識別的標準,研究者多以自己的經驗和圖像的直觀表現選擇圖像特征,而水下情況復雜、水質、亮度、距離等都將影響到最后的識別結果,是否有一種方法能夠自己提取圖像有關特征并進行識別是一個值得研究的問題。
近年來深度學習技術在人工智能領域備受關注,監督學習在卷積神經網絡(Convolutional Neural Network,CNN)訓練過程中的應用,使深度學習技術的實際應用成為可能[4~7]。水下圖像作為一種信息量較大的圖像類型,也可以應用深度學習進行算法開發。在訓練樣本較小的情況下,由于CNN的識別分類效果并不能與常規圖像分類算法,如相比于尺度不變特征變換(Scale Invariant Feature Transform,SIFT)[8]和壓縮梯度直方圖(Compressed Histogram of Gradients,CHoG)[9]等拉開明顯差距,為了準確分辨出水下各種情況下的光源圖像,首先利用CNN網絡對采集到的圖像進行訓練,以訓練所得的模型提取目標圖像CNN特征,并用這些特征訓練支持向量機(Support Vector Machine,SVM)完成目標分類。并且由于缺少水下光源的現有數據集,如果直接帶入CNN模型進行訓練,容易導致過擬合,使得訓練完成的模型泛化型較差,不能滿足篩選出光源目標的要求。
為了準確地篩選出目標光源,推出來一種基于CNN、遷移學習(Transfer Learning)[10]和SVM[11]的光源識別算法。該算法基于ImageNet數據庫訓練完成的網絡,對光源識別算法進行了遷移學習訓練,并以采集圖像訓練所得CNN模型所得的特征為輸入,再將特征向量帶入SVM的圖像從而實現圖像分類。
CNN是一種輸入層后帶有卷積結構的深度神經網絡,該網絡采用端到端的學習模型,通過卷積運算由淺人深地提取圖像不同層次的特征,彌合了低級視覺特征和高層語義之間的鴻溝。通常包含5種類型的層[12]。網絡的最前端為輸入層(data input layer),通常將圖像分為紅(R),綠(G),藍(B)三個顏色的亮度矩陣作為網絡輸入,放入輸入層。輸入層后會concat不同維度、不同數量的卷積層(convolutional layer)。卷積層作用在像素矩陣上能夠提取出圖像的部分特征。不同的卷積核能提取出不同的特征。現階段CNN在卷積層后會加上池化層(pooling layer)以縮小模型大小、提高計算速度,同時提高特征提取的魯棒性。很多時候將卷積層和池化層統稱為卷積層。卷積層后concat全連接層(fully connected layer),最后加上softmax分類器作為輸出層(output)。
現知名的CNN模型模型有AlexNet、VGGNet、ResNet以 及Google的Inception network。早 期 的LeNet-5網絡過于簡單,無法滿足水下圖像的識別要求,VGGNet最少也有1.38億個參數,需要訓練的特征數量非常巨大。而ResNet主要通過直連通道構成殘差塊,再以殘差塊作為基礎搭建網絡,主要是用來解決深度很深的網絡在訓練時梯度丟失和梯度爆炸以至于代價函數無法正常下降的問題。Inception網絡能夠自動選取卷積核的數量和維數,但是其結構復雜,計算量需求大。而AlexNet結構不如前者那么復雜且擁有6500萬個神經元,能夠從原始圖像中獲得更多的特征滿足水下圖像處理的需求。AlexNet網絡的網絡結構如圖1所示。

圖1 AlexNet網絡結構
Alex網絡具有5層卷積層(含池化層),3層全連接層,總深度8層。卷積層C1、C2、C5帶有池化層,最終可以將227*227*3的圖像分為1000類。
假設Alex網絡識別K類I個訓練圖像,訓練樣本為(xi,yi),xi為輸入訓練圖像,yi為識別結果編號。第L層共有sl個網絡節點,則l層的第n個節點的bias為bl n,第l層的n節點與第l+1層的m節點間的weigh為,其中n和m分別是l和l+1層的神經元序號,n=1,2,…,sl;m=1,2,…,sl+1。則l+1層的輸出特征向量為

其中,l+1層輸入為上層輸出向量為,輸出向量為,是由組成的與等長的bias向量。Alex網絡中采用ReLU作為激活函數代替sigmoid函數,以線型函數代替指數運算,簡化其反向傳播計算。
假設I個訓練圖像的樣本集為{(x1,y1),…,(xi,yi),…,(xI,yI)},則該CNN模型的代價函數為[7]

其中λ為權重衰減參數,以抑制過擬合,L為網絡總層數,yi是期望向量,是與期望等長的輸出向量,訓練中使用批量梯度下降法調整權重和,目標使代價函數最小收斂,則得到訓練好的CNN模型,記學習率為α,則網絡第l層按照如下公式更新:

卷積神經網絡作為一種擁有多參數的監督學習系統需要大量的訓練樣本才能夠保證訓練完成的網絡具備良好的泛化性。
遷移學習[13]是指通過利用不同學習目標之間的共性,將不同訓練任務的網絡中間層進行遷移,也能適應新場景的任務需求。研究表明,通過遷移學習,能夠有效地大幅度提升小樣本訓練下的卷積神經網絡的準確度[10]。遷移學習分為兩部分。
1)特征提取器(feature extractor)。被遷移的CNN模型一般作為待檢測目標的特征提取器。例如一個已訓練完成的花鳥分類卷積神經網絡,將其除最后Softmax分類層外所有的層都freeze,加入其它數據集進行訓練也能使這個CNN模型達到一個很好的識別分類效果。
2)模型微調(fine-tuned model)。當原數據集不足以完全訓練出一個良好的新網絡時,微調策略能夠避免網絡從頭訓練[14]。微調策略不僅能使訓練網絡以適應新的數據集,而且能通過反向傳播算法來調整網絡參數,一般視數據集大小決定調整多少層網絡。
通常CNN前幾層學習的是圖像的底層通用特征,適用于大多數的視覺任務,后幾層是為特定任務學習的高層特征,因此一般選擇網絡的后幾層作為調整層,就可以取得良好的分類效果。模型微調策略直接解決了由于訓練樣本較小不能滿足從頭訓練完整網絡而導致的過擬合問題,是小樣本規模訓練,尤其是機器視覺領域應用的有效策略[15]。
基于CNN、遷移學習和SVM的水下光源識別算法流程,如圖2所示。

圖2 水下光源識別算法流程
算法主要包括四個步驟:
1)用ImageNet上的數據集對AlexNet進行訓練,得到用于遷移的初始網絡模型。
2)利用現有的水下圖像數據集對初始網絡模型最后的Softmax分類層及最后一層全連接層的參數進行微調訓練,使得AlexNet模型最終的輸出為代表著正面光源目標,側面光源目標,其他光源目標及其他物體的4維輸出,則可以使得經過遷移的原網絡正常地對光源進行識別分類。
3)對訓練好的AlexNet模型輸入水下圖像,并提取全連接層第二層的輸出,即fc2層的4096維特征作為CNN-TL特征,并將特征向量按照L1-norm標準歸一化。
4)將歸一化后的特征向量輸入到支持向量機中作為輸入x,以實際圖像類別作為期望輸出y,進行訓練,得到一個能夠根據特征向量進行分類的SVM。
本方法以ImageNet作為輔助數據庫,以水下各種光源圖像作為調整數據庫,首先利用輔助數據庫進行CNN訓練,得到初始CNN模型,隨后對利用調整數據庫對網絡末端進行微調以實現遷移學習。具體流程如圖3所示。

圖3 遷移學習訓練原理
圖中Alex網絡總共8層,其中卷積層5層(含池化層),全連接層3層,總深度8層。各層參數如下:
C1:96*11*11*3共34848個參數;
C2:256*5*5*48共307200個參數;
C3:384*3*3*256共884736個參數;
C4:256*3*3*192共663552個參數;
C5:4096*6*6*256共442368個參數;
FC1:4096*6*6*256共37748736個參數;
FC2:4096*4096共16777216個參數;
FC3:4096*1000共4096000個參數。
總計60924656個參數。
本方法使用輔助數據庫中的數據集對原CNN模型進行訓練,共需要訓練60924656個參數,而后將C1到FC2所有參數進行遷移至光源圖像識別的模型中,再使用反向傳播算法訓練,使得網絡所需要訓練的參數降到了20873216個,使用SVM代替Softmax分類層后實際用到的訓練的參數為1677721個,AlexNet的Dropout將全臉層的一些神經元節點舍去,加之SVM的訓練適應,能夠大幅度提高模型的泛化性。
經過遷移學習并帶入水下圖像集訓練的模型能夠通過Softmax分類器完成光源識別,而FC2層輸出的4096維向量即所需要的特征向量FC,將其L1歸一化以降低SVM計算復雜度。

支持向量機是一種大間距分類器,其本質是擁有大邊距的邏輯回歸模型。本方法選用高斯核函數(RBF kernel),以預測與實際的之間的“距離”衡量代價。RBF核定義如下:

將CNN-TL特征帶入作為輸入進行訓練,訓練代價函數表示為

為了驗證本文提出算法的識別性能,在水下圖像數據集上進行了分類實驗,同時與BOLB算子模型結合貝葉斯最小錯誤率分析、仿射不變矩+SVM、CNN這三個已有的識別算法進行對比。實驗在TensoFlow環境下進行,PC配置為Windows10,CPU i7-7700hq,GPU NVDA GTX1070ti。
實驗中使用的目標光源圖片部分來自于已有實驗拍攝取得的AUV導向罩目標光源、自身攜帶光源、捕魚工作誘餌光源以及水下工作時所攜帶的探照光源圖像等。
實驗中采用的水下數據集根據需求分為4類,根據AUV視覺對接定位需求分別為正向光源,側向光源,背景光源及其他物體。每類包含50幅在不同條件(拍攝距離,水質,背景亮度)下獲得的水下圖片,并使用數據擴充(加噪,旋轉,部分遮蔽)對有限的樣本進行擴充,得到額外300張擴充數據集。共1400張數據圖片其中隨機取1000張作為訓練集,400張為測試集。

圖4 水下數據集光源圖像例圖
為了驗證增強模型對其他數據類型的識別性能,實驗采用從ImageNet數據庫中選取了250張魚類、水母等水下經常出現的物體作為訓練集,將其分類至其他類中。根據AlexNet的輸入要求,所有的圖像數據均以227*227*3的尺寸輸入。
多角度識別測試:每次測試在測試集中隨機找出5張正面光源圖像,15張側面光源圖像,其中側面圖像來自于正面圖像現有側面圖像或正面圖像定向模糊產生的模擬側面圖像。最終調整圖像大小部分距離產生的影響,帶入本文算法及對比算法中進行測試,共15次,取識別率的均值。識別效果見表1。

表1 多角度識別測試下的識別率
抗干擾性能測試:取出能夠正確多角度識別的圖片組成抗干擾性能測試集,每次分別取出10張正面光源、側面光源以及背景光源,在每張圖片上隨機加上一種噪聲或遮蔽,帶入本文算法與對比算法中進行測試,共15次,取識別率的均值。識別效果見表2。

表2 抗干擾測試下的識別率
距離及背景測試:取出能夠正確多角度識別的圖片,還原成原尺寸,組成距離及背景測試集。每次在測試集中取出10個不同的光源對其加以調整亮度,光源的大小以模擬背景的亮度和光源的距離,大小和亮度調整隨機,15次測量識別率取均,識別效果見表3。

表3 距離及背景測試下的識別率
結合表中數據可知本文算法在水下多角度和強干擾下的情況下識別精度均好于傳統識別方法,也略優于原始CNN模型,說明本算法魯棒性較強。當光源處于側面時由于水下懸浮物的緣故會產生散射,光源形狀改變較大,此時BLOB+Bayes這種依賴先驗形態學模型的算法識別精度會大打折扣,而SIFT具備一定的抗干擾型,四種算法都有著不錯的光照尺度不變性,而本文算法主要優勢在于面對非正向光源與強干擾下光源的識別。
直接用測試集對本文算法及對比算法進行測試,以驗證其實際泛化能力。對于一個識別算法,輸入輸出關系由“混淆矩陣”給出,如表4所示。

表4 混淆矩陣
對于一個識別檢測算法,準確率是一個最常見的評價指標,準確率的計算公式如下:

準確率是一個很直觀的評價指標,但是有時候準確率高并不能代表一個算法的好壞。因此本文采用查準率P(Precision)和召回率R(Recall)來衡量本文及對比算法的性能。查準率P和召回率R的計算公式如下:

查準率表明識別為正的示例中真正為正的比例,召回率表明識別為正的示例與實際所有為正的比例。本文算法及對比算法的識別率和召回率如圖5所示,由于BLOB不能衡量規則圖型以外的事物,SIFT對于水中其他物體的分類也不夠明確,故不統計其于其他物體識別性能。

圖5 識別算法泛化性能圖
從圖中分析可知,BLOB算子和樸素貝葉斯分類器對于一般形狀不變的正面光源識別率尚可,P和R均接近0.8,但是由于其度量算子不具備旋轉,遮蔽等不變性,對于側面光源及偽光源的識別能力較差。SIFT由于其具備一定的尺度,旋轉不變性,對于正面光源的識別能力優于上算法,P已接近0.9,但是對于正面光源外的識別還是不夠理想。CNN對各類均具有不錯的識別率,而CNN+SVM對于正面光源及其他物體的P和R均超過0.9。由于其所需訓練的參數較少,加之SVM對CNN提取特征的二次訓練,在樣本容量不夠充足的條件下識別能力要強于CNN。
對于一個識別算法,查重率和召回率越高,其識別效果越好,但是查重率和召回率對于一個算法是矛盾的,是一對此消彼長的量,因此本文采用F-Measure對其統一得出一個綜合評價指標。F-Measure是Precision和Recall加權調和平均:

當a=1時,就是F1,即:

各算法對各類的綜合評價指標如表5所示。

表5 算法綜合評價指標
從表格中可以看出本文算法對于各項識別綜合性能都高于其他算法,單純的CNN的識別效果也很好,而SIFT對于正面光源的泛化性能不錯,但是側面光源的效果不佳,貝葉斯分類器效果不夠理想,對側面光的識別效果較差。
本文提出了一種基于CNN和SVM的水下光源識別方法主要以提高水下光源的識別率,為AUV水下對接工作提供較高可靠性。該方法采用遷移學習的方法彌補水下數據集缺乏的影響,并且將CNN全連接層的輸出作為特征向量,帶入SVM訓練以增強其泛化能力。實驗結果表明該算法有著不錯的魯棒性和泛化性,識別能力強于現有算法。