洪漢玉,孫建國,欒 琳,王 碩,鄭新波
(1.武漢工程大學 湖北省視頻圖像與高清投影工程技術(shù)研究中心,湖北 武漢 4300732.深圳光啟高等理工研究院,廣東 深圳 518000)
光啟云端號是一個特種充滿氦氣的纖維囊體,主要工作范圍在4 000 m~5 000 m高的空域,通過飛艇下面的吊艙做監(jiān)控和航拍服務(wù),吊艙使用最新計算機技術(shù)實現(xiàn)多種功能模塊靈活搭載,通過“一根纜”(光電復(fù)合纜)系留于地面錨泊系統(tǒng),最后接入大數(shù)據(jù)中心。在實際航拍中,所獲得的圖像會包含繩帶信息,而這種非均勻結(jié)構(gòu)的繩帶不僅不利于場景分析,也不利于進行有效目標的檢測,因此,必須使用圖像信息處理技術(shù)消除繩帶干擾,復(fù)原圖像中實際場景,為進一步分析圖像提供數(shù)據(jù)支撐。光啟云端號如圖1所示。
圖1 光啟云端號Fig. 1 Kuang-chi Cloud
圖像中繩帶去除主要包含繩帶圖像的檢測和繩帶圖像的修復(fù)兩部分,其中最關(guān)鍵的是繩帶圖像的檢測。繩帶圖像的檢測可以抽象為線檢測或者條帶檢測,目前對線檢測采用的方法大致有兩類:一類是基于Hough變換及其改進算法[1-3]的線檢測,該方法對噪聲不敏感,魯棒性好,對遮擋問題易處理,但是在實際情況中存在極大的局限性,如計算量大、準確率低且不能檢測彎曲部分等;另一類是基于對比度特征的線檢測方法,其基本原理是利用繩帶像素與繩帶周圍像素區(qū)域存在的對比度關(guān)系來提取特征[4-5],該方法可以檢測條狀特征的物體,但是在實際中該方法的檢測結(jié)果容易出現(xiàn)斷裂、誤檢等問題。因此,前面的2個檢測方法在圖像中繩帶的檢測難以適用。圖像中繩帶的修復(fù)主要采用FMM算法[6],該算法速度較快且對噪聲不敏感,在實際測試中能得到了很好的效果。
隨著機器學習理論的發(fā)展,深度學習在人臉識別、無人駕駛[7]等領(lǐng)域發(fā)揮著越來越重要的作用。基于深度學習的相關(guān)問題屬于圖像分割問題,其代表是FCN[8]及其改進網(wǎng)絡(luò)SegNet[9]。但是針對圖像中具體的內(nèi)容檢測如條帶檢測的文獻較少,現(xiàn)有的網(wǎng)絡(luò)存在難以訓練、數(shù)據(jù)需求大、訓練時間長等缺點,已有方法難以解決實際航拍圖像中背景復(fù)雜、繩帶彎曲等問題。目前,Ronneberger等人提出的U-net[10]在少量樣本數(shù)據(jù)和醫(yī)學圖像中的目標分割[11]上有著廣泛的應(yīng)用,該網(wǎng)絡(luò)是一個基于FCN思想設(shè)計的網(wǎng)絡(luò)模型,只有卷積層,沒有全連接層,可以有效地檢測圖像中的目標。將其應(yīng)用于圖像中繩帶的檢測分割中,發(fā)現(xiàn)存在繩帶數(shù)據(jù)過少,像素比例分布嚴重不均勻,模型不能收斂等問題。
為此,本文提出一種基于U-net的繩帶檢測改進模型,只需要較少的訓練數(shù)據(jù)和較短的訓練時間,模型就能夠收斂,得到的檢測結(jié)果通過改進的OTSU[12]做一個精細分割后,采用FMM修復(fù)算法能夠有效地去除圖像中的繩帶。
在云端號拍攝的圖像中背景有很多條狀的物體,這些物體給繩帶檢測帶來很大的干擾,基于多層卷積網(wǎng)絡(luò)的算法能夠很好學習到繩帶和背景信息的特征,這些特征經(jīng)過卷積的層層計算會越來越復(fù)雜,通過這些提取到的特征能夠用來區(qū)分這些非目標物體和目標物體,從而檢測出圖像中的繩帶。本文方法的流程如圖2所示。
圖2 本文檢測方法流程圖Fig 2 Flow chart of detection method of this paper
1.1.1 網(wǎng)絡(luò)結(jié)構(gòu)
基于深度學習的算法往往需要大量的隱藏層來提取更加抽象的特征,可以用來檢測更多類別的物體,但是在實際情況中,我們只需要檢測一個類別,并且這個任務(wù)可以歸于實例分割,所以原始網(wǎng)絡(luò)模型的參數(shù)會有很大冗余,而參數(shù)過于復(fù)雜會給模型收斂帶來困難。理論上已經(jīng)證明,通過去掉那些不重要的參數(shù),可以使模型具有更好的泛化能力[13],并且只需要更少的訓練數(shù)據(jù)就可以提高訓練和檢測速度。如圖3所示,在U-net的基礎(chǔ)上每層卷積核的數(shù)量做了適當調(diào)整(見圖3),輸入一個480×272×3 pixel的圖像,輸出一個單通道的繩帶檢測結(jié)果,模型結(jié)構(gòu)前半部分與VGG相似,所有的卷積都是3×3卷積+ReLU+批量歸一化的組合形式,解碼器部分均采用最大池化,編碼器部分均沒有池化層。由于數(shù)據(jù)的多樣性太少會增加過擬合風險,為了抑制過擬合,同時加快收斂速度,所以模型在同層的卷積中都加入一個Batch Normalization層[14]。最終的模型結(jié)構(gòu)的網(wǎng)絡(luò)層次和深度都是通過多次實驗后確定的,具體網(wǎng)絡(luò)結(jié)構(gòu)如圖3所示。
圖3 U-net模型結(jié)構(gòu)圖Fig .3 U-net model structure
1.1.2 深度可分離卷積
實驗中發(fā)現(xiàn)模型中的參數(shù)存在很大冗余,所以本文把大部分的傳統(tǒng)卷積全部換成深度可分離卷積[15],該卷積的計算過程為
(1)
式中:S為輸出特征圖;H為卷積核;I為輸入特征圖;i,j為特征圖像素位置;k,l為輸出特征圖分辨率;m為通道數(shù)。
深度可分離卷積包含depth-wise和point-wise,depth-wise中每個特征圖只用一個卷積核提取特征,point-wise則是傳統(tǒng)的1×1卷積,用來組合各個通道的特征圖。深度可分離卷積與傳統(tǒng)的卷積操作的參數(shù)量比例定義如下:
(2)
式中:K為depth-wise的卷積核的大?。籒為point-wise的卷積核數(shù)量;M為輸入特征圖的數(shù)量;G為point-wise卷積的分組數(shù)。由(2)式可知,輸出特征圖數(shù)量越多,深度可分離卷積參數(shù)數(shù)量壓縮率越大,通過這種方式提高卷積參數(shù)的利用率,從而大幅減小工程的存儲開銷。
1.1.3 引入雙線性插值的反卷積
在恢復(fù)分辨率時一般采用上采樣運算。上采樣是一般采樣的逆運算,即像素根據(jù)步長重復(fù),這個方法在實際中會使每層恢復(fù)分辨率后的特征圖會很粗糙,最后的繩帶位置可能會有略微的偏移。因此,本文采用雙線性插值的反卷積來恢復(fù)解碼部分的分辨率。雙線性插值的反卷積在像素之中增加了過渡值,預(yù)測的繩帶像素的概率值更加平滑和魯棒,使解碼器部分的特征圖更加合理,雙線性插值的反卷積的操作如圖4所示。
圖4 反卷積操作Fig. 4 Deconvolution operation
1.1.4 損失函數(shù)
本文模型最后一層使用Sigmoid計算每個像素點的值,Sigmoid公式為
(3)
式中:z表示輸入的像素值;sigmoid(z)為輸出的預(yù)測繩帶像素的概率值。
實驗中發(fā)現(xiàn)圖像中繩帶的數(shù)量較少,且繩帶像素在整個圖像中的比例非常小,此類任務(wù)屬于小目標的圖像分割,這種非均勻的樣本會給模型收斂帶來困難,當圖像中所有的像素都被識別成背景,準確率依然較高并且損失也較低。因此,繩帶像素的重要程度大于非繩帶像素,一種比較容易的解決方案是,處理這種類別不平衡的方式就是根據(jù)類別的重要程度加上不同的比例權(quán)重?;诮?jīng)驗本文定義的損失函數(shù)為
(1-w(x))·(1-p(x))·logq(x))
(4)
式中:X表示整幅圖像的像素;x為X中一個像素值;w(x)為繩帶像素的權(quán)重;q(x)為sigmoid在x處預(yù)測的像素值;p(x)為標記圖在x處的實際像素值; Loss表示預(yù)測結(jié)果與標記圖之間的距離。w(x)表示為
(5)
式中:x為計算時的像素,當x屬于繩帶位置時該點的損失的權(quán)值為w。(5)式表示繩帶像素與非繩帶像素的權(quán)重比例為w∶1,當w為1時,則退化成原始的交叉熵。
目前還沒有相關(guān)開源復(fù)雜背景的繩帶圖像數(shù)據(jù)可供下載,本文訓練數(shù)據(jù)主要為兩部分:一部分來自于云端號上直接拍攝的圖像數(shù)據(jù),可以直接訓練;另一部分是人工采集的其他相關(guān)數(shù)據(jù),采用拍攝的部分校園電線圖像數(shù)據(jù),通過Photoshop軟件標記繩帶。每對訓練的數(shù)據(jù)如圖5所示。
圖5 訓練的繩帶數(shù)據(jù)Fig.5 Training rope dataset
本文的原始數(shù)據(jù)總共有375對圖像,每對圖像包含一張繩帶圖像和對應(yīng)的繩帶標記圖,其中訓練集300對,測試集75對。使用TensorFlow的內(nèi)置數(shù)據(jù)增強工具,抖動參數(shù)設(shè)置為0.05,隨機裁剪參數(shù)設(shè)置為0.2,增強的數(shù)據(jù)都是在訓練時在線生成的,最終的訓練繩帶數(shù)據(jù)總共有2 400對。
本文訓練時采用Adam的優(yōu)化函數(shù),前10個epoch的學習率始終設(shè)置為0.001,后10個epoch的學習率為0.0003,所有的卷積核采用He[16]的均勻分布初始化,batch size設(shè)置為8,每個epoch迭代300次,由于硬件條件的限制,最終在訓練的時候,輸入圖像的尺寸會縮放到480×272×3 pixel,最后輸出480×272×1 pixel檢測后的繩帶灰度圖。
原始的U-net網(wǎng)絡(luò)收斂不穩(wěn)定,模型存在一定概率不能收斂,測試10次中有5次不能收斂或者收斂效果不好,本文提出的模型在10個epoch后能達到很好的效果,后面的提升很小,在經(jīng)過20個epoch后模型基本已經(jīng)收斂、趨于穩(wěn)定。本文的模型在最終測試時用了10個epoch,mAP(MeanAveragePrecision)達到98.56%,mIoU(Mean Intersection over Union,均交并比)達到62.8%,實驗中發(fā)現(xiàn)當 取10時能達到最好的效果。
前面在訓練的時候為了提高運行速度,對輸入的圖像進行了縮小,所以檢測的時候也需要縮小,同理輸出后的圖像需要放大到原來大小。經(jīng)過前面卷積的層層計算,最后得到一個0~1的繩帶像素預(yù)測概率矩陣,通過乘以255可以得到一個0~255的灰度圖。此時的結(jié)果中會有很多灰度較小的像素形成水霧現(xiàn)象,為了轉(zhuǎn)化成二值掩碼圖,采用OTSU做一個精細分割來剔除灰度值較小的像素,以便后面的圖像修復(fù)過程更準確。
圖像中繩帶的去除屬于圖像修復(fù),通過前面的算法可以檢測出繩帶的像素位置,此時需要根據(jù)檢測出來的結(jié)果去除圖像中繩帶。圖像修復(fù)算法目前主要分為基于樣本塊的算法和基于偏微分方程(PDE)的算法[17]兩大類,兩大類算法的前提都是要預(yù)先知道待修復(fù)區(qū)域的位置?;跇颖緣K的算法適用于修復(fù)較大的區(qū)域,但是存在速度慢、線性結(jié)構(gòu)易產(chǎn)生模糊等缺點;基于PDE的算法可以克服速度慢、線性模糊等缺點,但是只適用于較小的區(qū)域修復(fù)。因此本文采用的基于偏微分方程的FMM算法,如圖6(a)所示,先處理待修復(fù)區(qū)域邊緣上的像素點,點q周圍的像素為I,修復(fù)區(qū)域為Ω,修復(fù)邊界為?Ω,如圖6(b)所示,點p到點q的梯度為▽I,為點Iq(p)搭配點p的一階近似值。關(guān)系如下:
Iq(p)=Iq+▽Iq(p-q)
(3)
圖6 FMM方法的原理圖Fig. 6 Schematic diagram of FMM method
將q點周圍的值通過加權(quán)求和,最后歸一化值I(p)為
(4)
依次類推,層層向內(nèi)推進,直到修復(fù)完所有的像素點。
本文采用前面的圖像檢測和修復(fù)算法,對繩帶圖像進行了大量實驗,驗證算法的可靠性和正確性。在Ubuntu18.04 64位原生操作系統(tǒng)平臺上,用到的硬件環(huán)境為Intel I7-7700k、GTX1080、32G內(nèi)存,使用Tensorflow深度學習框架和OpenCV為主要工具。實驗2和實驗3均是在w取10時的結(jié)果。
實驗1,改進交叉熵實驗對比。本次實驗是權(quán)重對訓練時的準確率對比實驗(其中都是選取收斂了的情況),當w=1時損失函數(shù)為原始的交叉熵,此時能檢測一般直的繩帶,但是模型收斂不穩(wěn)定,存在一定幾率不能收斂,w=10時檢測的效果最好,同時模型也基本都能收斂,當w大于10時,收斂的效果開始變得較差,有較多的模型背景被識別為繩帶,這種情況給后續(xù)OTSU的精確分割帶來極大的困難。增加繩帶像素的損失函數(shù)權(quán)重,能更好地檢測出繩帶像素,但是當手動設(shè)置的權(quán)重太大時會導致模型收斂的效果變差,實驗中發(fā)現(xiàn)當w=10時能達到最好的效果。
圖7 損失函數(shù)取不同權(quán)重時的結(jié)果Fig .7 Partial results of loss function when taking different weights
實驗2,圖像繩帶檢測的實驗對比。基于隨機Hough變換、對比度特征的線檢測模型和U-net以及本文算法的實驗結(jié)果對比如圖8、圖9和圖10所示,圖片下面小圖均為部分細節(jié)放大9倍結(jié)果。對于圖8(b)、圖9(b)和圖10(b),Hough變換很難檢測出有用的信息,有大量背景信息被誤檢,同時彎曲打結(jié)等繩帶幾乎檢測不到;對于圖8(c)、圖9(c)和圖10(c),基于對比度特征的線檢測算法很難克服復(fù)雜背景、繩帶彎曲的困難,漏檢問題很嚴重;對于圖8(d)、圖9(d)和圖10(d),SegNet能很好地檢測到繩帶,但是在分割的邊緣部分存在很大的誤差;對于圖8(e)、圖9(f)、圖10(e)和圖10(f),U-net網(wǎng)絡(luò)和本文的方法能達到很好的效果,一般的彎曲繩帶信息都能被檢測出來;如圖8(e)和圖8(f),本文提出的模型在部分細節(jié)上比U-net表現(xiàn)出更出色的結(jié)果;而圖9(e)、圖9(f)、圖10(e)和圖10(f),由于繩帶被背景覆蓋,所以繩帶會出現(xiàn)少量漏檢,大部分情況下在繩帶寬度不確定時本文的模型表現(xiàn)出更高的準確率,在打結(jié)部分和細繩帶部分檢測的準確率更高。
圖8 多根繩帶時檢測結(jié)果對比Fig. 8 Comparison of test results when multiple ropes
圖9 繩帶打結(jié)時檢測結(jié)果對比Fig. 9 Comparison of test results when rope is knotted
圖10 復(fù)雜背景時檢測結(jié)果對比Fig. 10 Comparison of test results in complex background
原始U-net存在不能收斂的情況或者收斂的速度很慢,本文的模型收斂的更快,同時解決了模型收斂不穩(wěn)定的問題。最終模型的性能對比如表1所示。
表1 算法性能對比
實驗3,圖像去繩帶的修復(fù)算法。如圖11(a)和圖11(b)所示,在多根繩帶場景的實驗中,4根被檢測到的繩帶都被很好地去除了;如圖11(c)和圖11(d),在彎曲打結(jié)繩帶場景的實驗中,寬度不一的繩帶以及彎曲打結(jié)細節(jié)部分也被去除了;如圖11(e)和圖11(f),在復(fù)雜背景場景的實驗中,同樣出色地去除了圖像中繩帶,所有圖片下面小圖為部分細節(jié)放大9倍的結(jié)果。
本文提出一種基于改進U-net的圖像繩帶檢測模型。通過加入深度可分離卷積來壓縮模型參數(shù),同時優(yōu)化了網(wǎng)絡(luò)的結(jié)構(gòu),引入BN層減少過擬合,引入雙線性插值的反卷積提高分割精度,提出帶權(quán)重的交叉熵函數(shù)和采用的He初始化提高了收斂的穩(wěn)定性。從最終的實驗結(jié)果可以看出,U-net和本文的方法優(yōu)于傳統(tǒng)方法,但是本文模型的訓練和測試結(jié)果比U-net算法速度更快,同時解決了U-net收斂不穩(wěn)定的問題,在部分場景優(yōu)于原始的U-net,特別是在部分打結(jié)和彎曲的繩帶上,最終取得了很好的結(jié)果,mIOU達到62.8%,進一步證明本文算法的正確性。采用基于FMM的圖像修復(fù)算法,利用檢測到的繩帶位置,得到了非常好的圖像去繩帶效果,這一結(jié)果為在云端號上拍攝高質(zhì)量圖像提供了技術(shù)支持。
圖11 去繩帶實驗結(jié)果圖Fig. 11 Experimental results of rope removal test
致謝:本文的實驗數(shù)據(jù)由深圳光啟科技有限公司提供,寫作過程中黃正華老師對論文的研究方向做出了指導性的意見和推薦,提出了許多有益的改善性意見,在此致謝。