程國建,卞晨亮,陳 琛,楊 倬
1.西安石油大學,西安 710065
2.中國石油長慶油田分公司勘探開發(fā)研究院,西安 710018
隨著無人機技術(shù)的廣泛應用,其安全著陸被越來越多的學者關(guān)注,無人機著陸中首要的任務是準確識別和檢測出著陸跑道線,這成為了近年來研究熱點的方向和急需解決的難題。目前國內(nèi)外很多研究機構(gòu)已經(jīng)開展了相關(guān)方面的研究,如南京航空航天大學對無人機的視覺著陸進行了深入的研究[1],涵蓋了基于視覺的整個著陸過程;文獻[2]中使用支持向量機(support vector machine,SVM)訓練離線分類器識別著陸標識。Transformer是一種基于自注意力機制深度神經(jīng)網(wǎng)絡(luò),劉文婷等[3]介紹了注意力機制在計算機視覺有關(guān)任務上的應用。張馨月等[4]提出一種融合特征增強和自注意力的SSD小目標檢測算法FA-SSD,增強淺層特征圖的語義信息,對于復雜場景下的小目標有著較好的檢測效果。饒穎露等[5]提出一種適用于無人機板載端輕量高效的Onboard-YOLO算法,使用可分離卷積提升計算速度,通過注意力機制自動學習通道特征權(quán)重提高模型準確度并在5種干擾環(huán)境下進行降落測試。梅立春等[6]提出了一種快速輪廓角點檢測算法優(yōu)化了角點個數(shù)及最遠距離兩點的尋找方法,在很大程度上減少了計算時間且降低了復雜度。趙珊等[7]雙注意力機制引入到目標檢測算法,緩解了特征融合方式存在的特征提取能力不足問題,提高了算法的檢測精度。文獻[8]中通過橢圓輪廓檢測與卷積神經(jīng)網(wǎng)絡(luò)預測出正確的無人機著陸標識。Liu等[9]將跑道作為視覺標志,提出了一種著陸視覺導航P3P問題唯一解的求解方法,實現(xiàn)了無人機與跑道之間六自由度位姿解算。
上述方法一部分場景比較固定,對于場景轉(zhuǎn)換明顯的地方顯得有些不足;一部分計算量較大,模型的運行速度比較慢且魯棒性較差。為此,本文結(jié)合卷積神經(jīng)網(wǎng)絡(luò)、殘差模型、注意力機制以及加權(quán)的損失函數(shù),設(shè)計出一種基于深度學習的LineNet算法(algorithm for runway line detection),在一定程度上彌補了傳統(tǒng)方法的不足之處,經(jīng)實驗仿真表明了新方法的可行性。
由于著陸場景是從遠及近、從高到低,整個過程的變化角度比較大,所以設(shè)計的模型本身需要提取到圖像盡可能多的細節(jié)信息,使得算法可以適應遠目標和近目標的檢測,提高算法的泛化性能。檢測思路是經(jīng)過查閱資料和相關(guān)模型設(shè)計出一種適應于無人機著陸跑道線檢測的算法,然后在推薦的區(qū)域內(nèi)檢測跑道特征點。
1.1.1 LineNet網(wǎng)絡(luò)結(jié)構(gòu)
LineNet網(wǎng)絡(luò)結(jié)構(gòu)采用卷積神經(jīng)網(wǎng)絡(luò)設(shè)計,提取圖像特征模塊使用簡化的VGG-16,主干網(wǎng)絡(luò)中有8個3×3卷積層、3個通道轉(zhuǎn)換卷積層以及4個最大池化層(max pooling),激活函數(shù)為Leaky ReLU,并通過批標準化(batch normalization,BN)層進行批歸一化處理,在進入非線性激活之前增加BN層,在一定程度上可以緩解梯度消失和梯度爆炸的情況。采用4種大小不同的卷積核提取到比較好的圖像特征信息,將模型LineNet中有豐富的上下文信息,并且具有較大的感受野的高層次特征圖和前期具有定位的低層次特征圖按像素結(jié)合,提升網(wǎng)絡(luò)模型的檢測精度。對LineNet網(wǎng)絡(luò)最后一個卷積層的特征圖使用雙線性插值算法[10]進行上采樣操作,然后使用softmax層進行分類。如圖1所示即為跑道線檢測網(wǎng)絡(luò)LineNet結(jié)構(gòu)。
圖1 LineNet網(wǎng)絡(luò)架構(gòu)Fig.1 LineNet architecture diagram
為了降低卷積操作所產(chǎn)生的計算量,大多都采用組卷積或深度可分離卷積來。但是使用的1×1卷積占有較多的計算量,Shuffle Net提出了通道混洗緩解這一問題。組卷積之后,使用通道混洗就可以實現(xiàn)組間信息的流通,增強了特征的表達能力。具體如圖2所示,圖2中的字母是對輸入通道進行編號,從a~f,使用Reshape操作將通道升為兩維,并且使用Transpose實現(xiàn)擴兩個維度置換,可以在不增加計算量的情況下,使組卷積通道之間信息融合,最后結(jié)合Flatten恢復為初始維度,完成通道混洗。
圖2 通道混洗實現(xiàn)過程Fig.2 Channel shuffling realization process
根據(jù)以上表述,一個1×1組卷積和一個通道混洗操作的組合可以代替一個逐點卷積操作,與標準卷積相比,組卷積的計算量和參數(shù)量有較大減少并具有正則化的作用,可以在一定程度上降低過擬合?;谶@些方面考慮,對普通卷積為3×3和1×1的模塊做出調(diào)整,更換為組卷積和通道混洗模塊,進而對模型壓縮。
對輸入的原始圖像使用4組卷積提取特征,將每組最后一次卷積的結(jié)果特征圖存儲起來。因為每一次池化操作都會損失一些圖像細節(jié)信息。模型(LineNet)采用如圖3所示的結(jié)構(gòu),首先對上采樣的結(jié)果特征圖使用1×1的卷積,得到與之相對應卷積層通道數(shù)相同的特征結(jié)果圖,其次將該特征圖與之相應成鏡像關(guān)系的卷積層輸出的特征圖融合,對應位置的像素直接相加并經(jīng)過非線性激活層,然后傳入下一層。跳層融合特征可以解決網(wǎng)絡(luò)層數(shù)較深梯度消失的現(xiàn)象,也有利于梯度信息的反向傳播,從而加快訓練過程。同時融合卷積層的特征圖到上采樣層,有助于提取到更多圖像細節(jié)信息,這在一定程度可以降低圖像細節(jié)信息的損失。
圖3 特征融合模塊Fig.3 Feature fusion module
為了有效提高算法的收斂速度和準確率,跳層連接融合中加入空洞空間金字塔池化注意力機制(ASPPSA),可以降低上下文語義信息的丟失并提高算法的檢測時間。ASPP-SA模塊中引入殘差的跳躍結(jié)構(gòu),去除圖像特征的池化操作并且簡化空洞卷積,其中采樣率分別為2、4和8的卷積層對應的感受野大小為7×7、15×15和31×31。ASPP-SA模塊如圖4所示,將前一階段空洞卷積的輸出結(jié)果記為g和相對應的路徑信息記為x。首先,不改變x和g特征圖的大小,采用1×1的卷積核生成相同通道數(shù)的特征圖,其次進行逐像素相加和連接非線性激活層(ReLU),然后經(jīng)過另一個1×1的卷積層和激活函數(shù)(Sigmoid)生成一個0到1的分數(shù)指標分配給特征圖對應的位置,最后使用帶有分數(shù)特征圖乘以x傳遞給下一層。
圖4 注意力(ASPP-SA)模塊Fig.4 Attention(ASPP-SA)module
1.1.2 LineNet損失函數(shù)
由于在跑道線檢測中屬于跑道線的像素點相對于背景信息少一點,因此對特征圖使用相同的權(quán)重計算時,模型很有可能會把屬于跑道線的像素劃分為負樣本(即背景信息),以至于降低檢測的準確度。模型為了進一步提高對跑道線的檢測質(zhì)量以及緩解正樣本和負樣本分布不均勻的情況,使用加權(quán)的交叉熵損失函數(shù),其函數(shù)公式如式(1)。具體的做法為在交叉熵損失函數(shù)的基礎(chǔ)上增加一個權(quán)重,對跑道線分類時乘以一個較大的權(quán)重,背景分類時乘以一個較小的權(quán)重,由于背景的像素總數(shù)比跑道線的像素要更多一些,因此模型的損失值和實際情況是相符合的。
L2正則化損失函數(shù)表達式為:
式(2)中系數(shù)λ為權(quán)重衰減系數(shù),n表示模型中需要優(yōu)化的權(quán)重的數(shù)量個數(shù),wi為每一輪訓練結(jié)束時各個權(quán)重的值。
LineNet的損失函數(shù)表達式為:
1.2.1 連通域約束
LineNet網(wǎng)絡(luò)檢測得到的結(jié)果是二值圖像,為了區(qū)分出各個像素點隸屬哪個跑道,選用了兩種方法,一種是聚類的方法,一種是連通區(qū)域約束的方法。經(jīng)過實驗和理論分析,DBSCAN(density-based spatial clustering of applications with noise)聚類方法相比連通區(qū)域方法較復雜,并且需要對距離閾值、鄰域樣本數(shù)閾值聯(lián)合調(diào)參,不同的參數(shù)組合對最后的聚類效果有較大影響。無人機著陸場景變化尺度較大,超參數(shù)的值對最終結(jié)果影響很大,經(jīng)過實驗選用了連通區(qū)域約束方法。連通區(qū)域[11]一般是指圖像中具有相同像素值、位置相鄰的前景像素點組成的圖像區(qū)域,連通區(qū)域分析(connected component analysis,CCA)是指將圖像中的各個連通區(qū)域找出并使用規(guī)則標記,如算法1所示,采用種子填充法查找連通區(qū)域。
算法1Seed Filling(種子填充法)
輸入:二值圖。
輸出:圖像的連通區(qū)域。
1.掃描圖像,直到當前像素點B(x,y)=1:
1.1將B(x,y)作為種子(像素位置)并賦予其label值,然后將該種子相鄰的所有前景像素都壓入棧中;
1.2彈出棧頂像素,賦予其相同的label,然后再將與該棧頂像素相鄰的所有前景像素都壓入棧中;
1.3重復步驟1.2,直到棧為空;
此時,便找到了圖像B中的一個連通區(qū)域,將該區(qū)域內(nèi)的像素標記出來;
2.重復步驟1,直到掃描結(jié)束。
1.2.2 跑道線擬合
跑道線擬合是由跑道線點的集合得到跑道線的過程。針對無人機攝像頭拍攝的跑道線圖像基本為直線,采用最小二乘法[12]對集合中的點坐標進行擬合。
線性函數(shù)模型的殘差形式為:
ei為(Xi,Yi)的誤差,平方損失函數(shù)為:
使Q最小確定一條直線,Q是以B1、B0為變量的函數(shù),要最小化Q,即,,得到式(6):
化簡為式(7):
代入集合中的數(shù)據(jù)對上述方程進行求解就可以得到斜率B1和截距B0。
本文中的無人機著陸跑道線檢測算法分為跑道線檢測階段與擬合直線階段?;贚ineNet算法的實時跑道線檢測方法的流程如圖5所示。
圖5 LineNet算法流程圖Fig.5 LineNet algorithm flow chart
實驗將深度學習算法模塊與傳統(tǒng)算法優(yōu)化結(jié)合完成算法建模。實驗階段,采用Tensorflow框架和OpenCV庫函數(shù),所用CPU為Inteli7-9750H,GPU為NVIDIA GTX 1060,采用CUDA 10.0與CUDNN V7.5并結(jié)合Python語言實現(xiàn)了算法內(nèi)容,模型最終的推理過程采用C++語言編寫,并移植到開發(fā)板上進行調(diào)試。
文中使用Labelme標注工具對圖像進行標注,Labelme是麻省理工(MIT)計算機科學和人工智能實驗室(CSAIL)研發(fā)的圖像標注工具,可以使用該工具創(chuàng)建定制化標注任務或執(zhí)行圖像標注。Labelme可以對圖像進行多邊形、矩形、圓形、線段和點的形式的標注(可用于目標檢測和目標分割)等任務,本文使用線段的標注方式對9 000張圖像進行標注。標注過程如圖6所示,標注完成后會生成相應的JSON文件。
圖6 無人機著陸跑道線標注樣本Fig.6 UAV runway marking sample
此處以標注左右兩條跑道線和一條橫向的跑道線為例,如圖6所示。在第一視角可以看到兩條橫線的情況下標注特征明顯的圖片,當只能看到一條橫線的情況下標注該橫線。該標注的方式是為了結(jié)合相應的視覺定位算法。
模型訓練將數(shù)據(jù)集分為兩個部分:訓練集(7 500個采樣)、驗證集(1 000個采樣)和測試集(500個采樣)。為了防止過擬合,訓練過程中對數(shù)據(jù)集進行增強,主要的方法包括隨機旋轉(zhuǎn)、平移、縮放、裁剪、填充、顏色變換,以及對圖像添加噪聲擾動(比如椒鹽噪聲)。訓練參數(shù)設(shè)置迭代次數(shù)為16 000,批處量大小為12,基礎(chǔ)學習率初始為0.000 5,其中動量和權(quán)重衰減分別配置0.9和0.000 55。訓練過程中優(yōu)化器選用Adam[13],該優(yōu)化容易實現(xiàn)、高效以及對內(nèi)存要求較少。訓練損失和驗證損失值均采用加權(quán)的交叉熵函數(shù)與L2正則化損失函數(shù)的損失之和,訓練完成后訓練損失值收斂到0.097 978,驗證誤差收斂到0.101 275。圖7為LineNet網(wǎng)絡(luò)模型在跑道線數(shù)據(jù)集下的訓練誤差和驗證誤差變化圖。
圖7 LineNet訓練誤差和驗證誤差Fig.7 LineNet training error and verification error
圖7可以直觀地看出來訓練誤差和驗證誤差在迭代次數(shù)達到15 000次的時候基本達到平穩(wěn)狀態(tài),損失值接近于0。前8 000的輪次訓練損失值下降比較快,主要因為采用了加權(quán)的損失函數(shù),對屬于跑道線的部分乘以較大的權(quán)重加快了訓練的次數(shù)。
本文提出的LineNet算法是深度學習分割算法和優(yōu)化方法融合方法,所以使用圖像分割的評價指標對檢測結(jié)果評估。F值(F-measure)又稱為F1分數(shù)(F1-score)[14],它是準確率(precision,P)和召回率(recall,R)的加權(quán)平均值,用來判斷模型的優(yōu)劣,表達式為:
將參數(shù)β設(shè)為1時,即F值函數(shù)設(shè)為常見的F1,它是準確率和召回率綜合的結(jié)果,F(xiàn)1越高則說明分割模型越優(yōu)秀。其中P、R按式(9)計算:
式(9)中,TP為正類樣本預測為正類,F(xiàn)P為負類樣本預測為正類。
LineNet網(wǎng)絡(luò)檢測到跑道線區(qū)域后,首先對網(wǎng)絡(luò)的輸出結(jié)果進行形態(tài)學處理,其次用連通域約束方法剔除噪聲并標記各個連通區(qū)域?qū)ε艿谰€像素點分類。最后,采用最小二乘法擬合同一類別的像素點,進而確定跑道線的直線方程。
這里采用三張測試用例描述實驗的過程,圖8(a)為原始圖像縮放后網(wǎng)絡(luò)的輸入圖像,包括了無人機由遠及近的3張圖像。圖8(b)代表Linenet算法的檢測結(jié)果,將背景區(qū)域和跑道線進行分離。網(wǎng)絡(luò)輸入圖像大小為512×256,需要把跑道線像素點投影到原始圖像上面,具體做法為首先創(chuàng)建一個1 024×768的全0矩陣,然后對網(wǎng)絡(luò)的輸出結(jié)果做相應的仿射變換,還原檢測結(jié)果到原始圖像。對測試集的圖像檢測時,找到的連通區(qū)域包括從0開始(0表示背景)的區(qū)域的編號和每個區(qū)域的面積,根據(jù)無人機著陸場景的需要,只需要檢測出三條跑道,因此先對各個連通區(qū)域的面積進行降序排序,選擇出前面的三個面積(忽略背景區(qū)域的面積,即編號為0的區(qū)域),每一個面積包括的像素點代表著一條跑道線,然后采用最小二乘法擬合直線方程。圖9為該算法擬合的直線。為了驗證模型的泛化能力,測試模型包括如圖10(a)所示,原始圖像是晴朗天氣情況下并且?guī)в性肼暤?,從圖中可以看出圖像在一定程度上變得模糊,該模型的輸出結(jié)果如10(b)所示,基本上和圖9測試效果一致,從而說明該模型具有一定的泛化能力。
圖8 原始圖像與二值圖像Fig.8 Original image and binary image
圖9 跑道線擬合直線Fig.9 Fitting straight line to runway line
圖10 不同場景和帶噪聲的檢測結(jié)果Fig.10 Different scenes and noisy detection results
在上述實驗結(jié)果基礎(chǔ)上,保持原有模型結(jié)構(gòu)一致性,仿真出如圖11(a)、(c)所示的較復雜場景,利用遷移學習的思想使模型適應該場景,遷移學習可以使訓練時間較少。檢測結(jié)果示意圖如圖11(b)、(d),其中包括2張從遠及近的仿真艦船圖像和3張較復雜場景下不同距離的著陸跑道圖像。經(jīng)仿真數(shù)據(jù)驗證表明該模型可以在訓練集中學習到有用的特征,在一定程度可以適應較復雜的跑道線場景,在無人機著陸方面有一定的借鑒作用。
圖11 復雜場景下檢測結(jié)果Fig.11 Detection results in complex scenes
消融對比實驗分為4個組別,分別為加權(quán)的交叉域損失函數(shù)以及連通區(qū)域處理或聚類處理三個方向進行對比實驗,結(jié)果如表1所示。Lab1、Lab2表明,連通域處理的方法可以降低由于聚類錯誤導致檢測結(jié)果的不準確性;Lab1、Lab3表明,通過采用LineNet網(wǎng)絡(luò)結(jié)構(gòu)模型以及采用加權(quán)的損失函數(shù),降低了單幀圖像的運行時間,提高了檢測的實時性;Lab2、Lab3、Lab4表明將三處方向融合,使召回率基本不改變的前提下,可以提高模型的準確率。
表1 LineNet算法不同模塊對模型性能的影響對比Table 1 Comparison of impact of different modules of LineNet algorithm on model performance
LineNet算法與其他幾種檢測算法對比效果如表2所示。BP+Hough結(jié)合的方法以及CNN+Hough結(jié)合的方法需要對具體樣本特點手動調(diào)節(jié)算子,從而使檢測結(jié)果依賴算子的選擇好壞以及模型的魯棒性較差。LaneNet算法[15]和SegNet[16]算法使用較多的卷積操作和反卷積操作,增加了模型計算的復雜度以及LaneNet后期采用了基于密度的聚類算法(DBSCAN)延長了模型的檢測時間。LineNet在一定程度上避免了上述問題,并提高檢測時間和檢測的準確性。從表2可知,LineNet算法和其他4種方法相比之下,在單幀圖像處理時間以及檢測精度兩方面都有了提升,其中檢測速度比BP+Hough變化算法提高了接近12倍。檢測準確率比LaneNet算法和SegNet算法分別提升了12.82和9.95個百分點,基本實現(xiàn)了檢測實時性與準確性。
表2 LineNet算法與幾種檢測算法對比Table 2 Comparison of LineNet algorithm and several detection algorithms
本文基于深度學習算法,設(shè)計了無人機視覺導航著陸跑道線的檢測算法LineNet。
(1)考慮到模型后期需要移植到開發(fā)板中,其內(nèi)存大小和計算能力等情況,設(shè)計了參數(shù)量比較少的網(wǎng)絡(luò)模型,提出了新的空洞空間金字池化注意力機制塊(ASPP-SA),并加入到淺層特征和深層特征的融合中,以及引入了加權(quán)交叉熵損失函數(shù),最后對模型的上采樣與下采樣卷積進行剪枝操作,保證了模型較高的準確率和運行速度。
(2)通過網(wǎng)絡(luò)檢測算法獲取包含跑道線的區(qū)域,并在區(qū)域內(nèi)進行形態(tài)學和連通區(qū)域處理,利用最小二乘法擬合出跑道線的方程,得到無人機著陸跑道線的信息。
運用本文提出的LineNet檢測方法,能夠有效地檢測和正確識別無人機跑道線,該模型的魯棒性比傳統(tǒng)算法提高了20%以上。所研究的無人機跑道線檢測在無人機著陸的后續(xù)研究開發(fā)中有一定借鑒意義。在后續(xù)的研究工作中,為了更簡單地建模跑道線,可以嘗試將跑道線檢測定義為尋找跑道線在圖像中某些行的位置的集合,即基于行方向上的位置選擇、分類[17-18]。這樣可以將計算復雜度縮減到一個極小的范圍內(nèi),可以加快檢測算法的速度,使其更加適合于嵌入式設(shè)備。