蔡宇恒, 滕奇志, 涂秉宇
(四川大學電子信息學院圖像信息研究所, 成都 610065)
在石油地質行業中,對孔隙區域的提取是孔隙特征參數分析的首要問題,其提取結果的好壞將直接影響孔隙分析質量以及后續喉道分割的精準度,因此對巖石鑄體薄片進行高效的孔隙提取有著重大的意義[1]。在巖石鑄體薄片中,鑄體的顏色通常呈現藍色或紅色,目前主流的孔隙提取方法是利用RGB彩色空間對巖石鑄體圖像進行閾值分割。然而有許多鑄體顏色與顆粒顏色較為接近的巖石鑄體薄片,提取的孔隙區域的精度不高。并且針對全薄片圖像,存在許多鑄體顏色分布不均勻的情況,閾值分割很難一次性得到較好的分割效果,需要加入大量的人工操作才能得到較完整的孔隙區域,效率很低。針對這些問題,現有的研究方法提供了一些解決方案。代賀等[2]利用同一批樣本的巖石鑄體圖像在HLS彩色空間存在的相似規律,對圖像樣本進行半人工式訓練,得出其在HLS彩色空間上的規律閾值范圍,再根據范圍對和訓練圖像同批樣本的鑄體圖像進行孔隙劃分。但該方法在實際應用中可行性較低,針對不同的薄片需要大量樣本反復訓練得到對應閾值,并且需要人工交互,效率較低。李周[3]通過深度學習的圖像分割網絡全卷積網絡[4](fully convolutional network, FCN)對鑄體圖像進行孔隙提取,但是由于FCN網絡在池化階段的信息損失,導致提取結果不佳,且使用反卷積進行上采樣,分割后的圖片存在鋸齒效應,實用性不強。
孔隙提取的問題屬于圖像分割問題,圖像分割是一個經典難題,不斷有新的算法提出,近年在機器學習和深度學習方面也有學者開展研究,如王巖等[5]提出了改進的FCMS算法進行圖像分割。徐昭洪等[6]提出了基于VGG-16預編碼的圖像分割方法,該方法使用VGG-16作為卷積神經網絡的編碼器,實現端到端的圖像分割。但對于鑄體薄片圖像分割這一具體問題的解決,考慮到效率、精度等因素,這些算法并不太適用。
針對上述方法存在的問題,現提出一種新的巖石鑄體圖像孔隙自動提取模型,以期以較高的精確度提取孔隙區域,提升效率,不再同傳統方法一樣需要人工交互操作。
鑄體圖像是通過將巖石薄片樣本置于光學顯微鏡下成像所得,如圖1所示。不同的鑄體薄片圖像的明暗程度不一,且藍色與藍色、紅色與紅色之間也存在著深淺不一的情況,難以直接進行高精度的提取。
現基于深度學習的理論以及方法,提出了一種巖石鑄體圖像孔隙自動提取模型。該模型主要基于U-net[7]架構搭建,從多個尺度進行特征的提取,其次加入殘差模塊[8],加深網絡的深度,借此提取更深層次的特征,并且加入空洞卷積來提取更加全局化的特征。最后針對原本U-net架構進行優化處理,加入了更多的上采樣以及引入短連接構建新的融合特征方式,將淺層特征和深層高位特征進行融合,得到更高的分割精度。

圖2 U-net網絡結構Fig.2 U-net network structure
U-net是一種全卷積神經網絡,主要結構分為編碼器和解碼器兩部分。編碼器部分的主要功能是完成對特征的提取,而解碼器部分則主要是進行上采樣對圖像進行還原,以此實現端到端的像素點分類,也就是語義級別的圖像分割問題。U-net的網絡結構如圖2所示。在編碼器部分,U-net的塊結構為先通過兩個3×3的卷積層,隨后通過一個激活層進行激活,激活函數為線性整流函數(rectified linear unit, ReLU),最后通過一個最大池化層進行下采樣,對特征進行壓縮并減小參數量。在每通過一個塊結構后,對特征通道的數量進行加倍,以此提取更多的特征。而在解碼器部分,對特征圖譜進行雙線性插值的上采樣,并連接編碼器中對應的特征圖譜。構建這種特征級聯可以將網絡下采樣階段的高分辨率圖像特征信息引入到上采樣階段網絡層中。這樣做既避免了原圖像的紋理信息在前半部分的池化層被損失掉,又保證了高分辨率的特征圖譜在上采樣層后得以恢復。隨后通過兩個2×2的卷積層以及激活層進一步恢復特征圖譜的像素值。
U-net的特點在于其使用了特征級聯,其示意圖如圖3所示。特征級聯主要是通過堆疊進行特征保留,與FCN采用的跳躍融合相比較,優點在于不同層之間的特征獨立性得以保留,通過后續的卷積操作,可以更好地對下采樣階段損失的特征進行恢復。

圖3 特征級聯Fig.3 Feature concatenation
殘差塊的主要結構如圖4所示,其輸出分為F(x)和x兩部分,其中x為上一層的輸出,F(x)為該層經過卷積后未激活的輸出,而F(x)的值實際上是與x有關的,即F(x)為x的函數。因此,若將該層的輸出假設為y,則該層的學習任務從將x映射成一個新的未知值y轉換成了在已知x的情況下求x和y之間的差值,即F(x)。殘差塊很大程度上減小了模塊中所需計算參數的值,這使得網絡中的參數對于反向傳導的損失值有了更加敏感的響應能力。在前向過程中,若淺層的輸出已經足夠成熟,那么深層網絡后面的層僅需要實現恒等映射的作用,而不像以往的深層網絡繼續學習而易造成過擬合或者梯度消失等問題。而反向傳播的過程中殘差結構可以幫助梯度的傳導,優化了模型的訓練。

圖4 基本殘差結構Fig.4 Basic residual structure
在卷積神經網絡中,感受野的定義是卷積神經網絡中每一層輸出的特征圖譜上的像素點在輸入圖片上映射區域的大小,主要用來表示網絡中不同位置的神經元對原圖像感受范圍的大小。感受野越大,表明該神經元對原圖像的感受范圍越大,也表明其提取到的特征更加的豐富并且蘊含更加全局化的特征[9]。若采用標準卷積,僅能通過增大卷積核的方式來增大感受野,但這會帶來更大的計算量和復雜度,降低網絡的效率。空洞卷積不同于標準卷積,其通過在卷積核中插入權重為0的不參與計算的空洞,在不擴大參數計算量的同時擴大了卷積核的感受野。如圖5(a)所示,為3×3的標準卷積核,感受野大小為3×3,而如圖5(b)所示,為3×3的空洞卷積核,感受野大小增大為5×5。因此本文在殘差模塊中加入空洞卷積,保證了較小計算量的同時增大了神經元的感受野,有利于提取更全局、語義層次更深的特征。

圖5 普通卷積和空洞卷積對比Fig.5 Comparison of ordinary convolution and hole convolution
1.4.1 網絡結構搭建
首先以傳統的U-net網絡為骨架搭建網絡,考慮到傳統U-net的編碼器部分僅僅是簡單的卷積和池化,對特征的提取以及利用率遠遠不夠[10],因此采用殘差模塊代替原本傳統U-net中的卷積模塊。本文采用了兩種不同類型的殘差模塊以應對不同的網絡結構,分別是Conv_block和Identity_block。其中Conv_block的結構如圖6(a)所示,該模塊主要用于上一層特征圖譜的通道數與該層特征圖譜的通道數不一致的情況。輸入特征圖譜的通道數為channels,因此將上一層的輸出經過一個通道數為2×channels的1×1的卷積層進行線性映射來變換維度,將其通道數轉化為與該層特征圖譜的通道數一致并作為shortcut傳遞到該模塊的輸出層。而中間層由3個卷積層構成,分別是通道數為channels的1×1卷積,通道數為channels、空洞(dilation)為2的3×3的空洞卷積,以及通道數為2×channels的1×1卷積。主要通過3×3的空洞卷積來提取特征并通過通道數為2×channels的1×1卷積來升維使其與shortcut一致。隨后將中間層的輸出以及shortcut相加,并通過激活函數為ReLU的激活層進行激活,得到Conv_block的輸出。
而Identity_block的結構如圖6(b)所示,該模塊主要用于上一層特征圖譜的通道數與該層特征圖譜的通道數一致的情況,其將上一層的輸出作為shortcut直接傳遞到該模塊的輸出層,使上一層的信息沒有阻礙的流入下一層,提高了信息的流通,并且也避免了由于網絡過深所引起的梯度消失和退化等問題。輸入特征圖譜的通道數為2×channels,一方面通過shortcut直接傳遞到后方,另一方面通過中間層輸出到后方。中間層共有4個卷積層構成,分別是通道數為channels的1×1卷積,通道數為channels的3×3卷積,通道數為channels、空洞(dilation)為2的3×3空洞卷積,以及通道數為2×channels的1×1卷積。該中間層搭建的主要思想是通過前后兩個1×1的卷積實現先降維再升維的操作來減少參數的計算量,而在兩個1×1的卷積層之間加入兩個3×3的卷積用于提取特征,并且加入空洞為2的空洞卷積來擴大神經元的感受野。隨后將中間層的輸出以及shortcut相加,并通過激活函數為ReLu的激活層進行激活,得到Identity_block的輸出。

圖6 本文的兩個殘差模塊Fig.6 Two residual modules in this article
在Resnet中,其采用步長為2的3×3非填充卷積來代替了池化進行下采樣。而本文考慮到最大池化對于特征提取可以保留更多的紋理信息[11],有助于對孔隙區域特征的提取,因此選用了最大池化層來進行下采樣,減少參數量計算的同時擴大神經元的感受野來獲取更高階的語義信息。
考慮到U-net通過特征級聯將不同的特征拼接在一起,形成更厚的特征。但部分的特征級聯屬于長連接,即級聯的跨度較大,例如在第一個最大池化層pool1處與最后一個上采樣層進行特征級聯,中間也損失了很多特征的信息,因此在傳統U-net間加入更多的卷積模塊以及上采樣模塊來提取這部分損失的特征,并且同樣使用特征級聯來將不同的特征拼接在一起。Yu等[12]將傳統U-net的長連接全部改為了相鄰模塊間的短連接,但這樣反而可能會損失掉原本長連接所提取的特征,因此本文在引入短連接的同時保留原本的長連接來傳遞特征信息,這樣可以獲得更多的不同深度的特征,有利于孔隙區域特征的提取。
此外,對于該網絡中的所有卷積層,均采用的是零填充卷積,而非傳統U-net中的非填充卷積。非填充卷積操作會導致圖像尺寸發生變化,而在進行特征級聯時,需要保證特征圖譜尺寸的一致性。因此本文在進行卷積操作時采用零填充卷積,即在卷積層中對圖像邊緣進行鏡像擴充。填充卷積前后的數據尺寸是一致的,這讓圖像邊緣細節得以保留的同時,也滿足特征級聯技術所需要的尺寸一致的要求。同時,在所有的卷積層后均引入批量歸一化層(batch normalization, BN)[13],該層能夠將前一層的輸出歸一化為均值為0,方差為1的正態分布。引入該層的目的是將輸出值往后續要進行的非線性變換的線性區拉動,增強反向傳播信息流動性,提高網絡的泛化能力并防止過擬合的出現。其表達式為

(1)
式(1)中:設該層有n維輸入X=(x(1),x(2),…,x(n));γ為標準差;β為方差;y(k)為歸一化得到的結果。

圖7 巖石鑄體圖像孔隙自動提取算法網絡結構Fig.7 Network structure of automatic extraction algorithm of pores in rock cast image
不同于傳統的U-net結構,本網絡在保留傳統U-net的下采樣和上采樣部分之間的特征級聯間,加入了短連接,構建了新的融合特征的方式,網絡結構如圖7所示。傳統U-net是一直下采樣至特征圖譜足夠小后再依次上采樣,并在上采樣的過程中與下采樣階段的特征圖譜相級聯并卷積,該級聯的兩個特征圖譜跨度較大。而本文所引入的短連接指的是在下采樣的過程中同時進行上采樣,并跟上一級的特征圖譜進行級聯并卷積,形成新的特征圖譜,并將該特征圖譜繼續上采樣后同上一級的特征圖譜進行級聯和卷積,以此類推。最后的長連接部分將短連接生成的特征圖譜與下采樣部分和上采樣部分的特征圖譜相互級聯后,通過2個3×3的零填充卷積得到該層最終的特征圖譜。通過加入這種短連接來提取特征,彌補了原本長連接損失的特征信息,結合原本的長連接,有利于提取不同深度的特征, 并更好地將淺層特征與深層語義特征相結合,得到更加精細的孔隙區域。
本網絡輸入圖像的分辨率大小為256×256×3(圖像長度×圖像寬度×RGB三通道),編碼器部分采用多個Res-block相連的方式代替傳統U-net的3×3卷積來提取特征,下采樣采用最大池化進行處理。解碼器部分的上采樣采用雙線性插值進行處理。由于是二分類問題,最后的輸出層通過一個激活函數為Sigmoid的1×1卷積得到輸出圖像,分辨率大小為256×256×1。其中,Res-block是由不同數量的Conv_block和Identity_block連接而成,其具體組成如表1所示。

表1 各層Res-block的具體構成
1.4.2 實驗參數設置
卷積層的激活函數主要使用的是線性整流函數,其計算公式為

(2)
式(2)中:x表示激活層的輸入;R(x)表示激活層的輸出。
由于巖石鑄體圖像孔隙提取屬于二分類問題,損失函數使用的是二分類交叉熵,其計算公式為

(3)

最后一層的卷積層采用的激活函數為邏輯回歸函數,其計算公式為

(4)
式(4)中:S(x)表示激活層的輸出。
訓練過程中,采用Adam[14]優化器進行訓練,初始學習率設置為1×10-4,每經過2個周期學習率衰減0.1,共訓練50個周期,BatchSize設置為3,使用he_normal正態分布初始化[15]卷積核,采用梯度下降法對模型進行訓練使損失函數收斂。
數據集中應包含鑄體圖像的原圖以及與其相對應的孔隙區域標簽圖。本數據集是由高清相機在顯微鏡下進行采集,隨后將拍攝得到的鑄體圖像裁剪為256×256大小的圖像作為數據集的鑄體孔隙原圖,并且通過人工標記提取孔隙區域,得到對應的孔隙標記圖。圖8為鑄體孔隙原圖和對應標記圖,原始數據集大小總計約為4 200張。

圖8 鑄體孔隙原圖和標記Fig.8 Original and marked drawing of cast pores
為了更好地提取圖像特征并提高模型的泛化能力,在實驗中進行數據增強以擴充原始數據集。對于鑄體圖像而言,其彩色空間特征尤為重要。本文采用隨機旋轉,直方圖增強,翻轉平移等相結合的方法,對原始數據集進行擴充。如圖9所示,左上角為原始圖像,其余為數據擴充后的圖像。由于圖像在成像過程中會受到各種因素的影響,造成一定程度的差異。而對于原始圖像的數據擴充,可以彌補這種客觀影響造成的差異,提升訓練模型的泛化能力,從而使得訓練結果更符合預期效果。
實驗中使用的硬件配置如下:操作系統為Windows 10,深度學習框架為Tensorflow,開發語言為Python,處理器型號為Intel Core i7-3770K @ 3.50 GHz 四核,內存為16 GB,GPU型號為Nvidia GeForce GTX 1060 6 GB。
在實際應用中,普通的巖石鑄體薄片圖像大小普遍在3 648×2 432左右,本算法通過將原始圖像裁剪為512×512的小圖像后依次送入網絡中進行分割,最后統一將得到的分割結果依次進行拼接,得到完整的孔隙區域提取圖。
為評價分割結果的好壞,本文采用語義分割中常用的兩個標準,分別是像素精度(PA)和平均交并比(MIoU)來評價不同的分割模型對鑄體圖像的分割效果。PA以及MIoU的公式為

(5)

(6)
式中:k表示共有k+1類,由于對巖石鑄體薄片圖像提取孔隙屬于二分類問題,因此本實驗中一共分為兩類,一類為孔隙區域,一類為背景;pij表示原本屬于第i類卻被誤分到第j類的像素點數量;pii代表分類正確的像素點數量。
PA表示的是標記正確的像素點占總像素點的比例。MIoU是在每個類別上分別計算IoU值,即真正樣本的數量與真正樣本數量、假負樣本數量以及假正樣本數量之和的比值,然后統一求平均。MIoU表示的是兩個集合的交集和并集之比。
圖10為本文網絡在訓練過程中損失函數隨著迭代次數變化的曲線圖,可以看出在經歷了50次迭代的訓練后損失函數逐漸收斂至極小值。

圖10 訓練損失曲線Fig.10 Training loss curve
實驗中為了測試本文所提出的網絡的實際效果并與傳統的閾值分割方法和其他主流的卷積神經網絡相對比,將主流的卷積神經網絡以及本文網絡用同樣的鑄體圖像數據集進行訓練,并將訓練好的網絡和傳統閾值分割方法針對同一組測試集圖片進行相應評價指標的檢測,評價結果如表2所示。
圖11、圖12分別是藍色鑄體圖像和紅色鑄體圖像為原圖通過傳統方法及不同的主流卷積神經網絡進行孔隙提取的結果圖。通過將各個結果圖進行對比可以看出,傳統的RGB閾值分割效果明顯弱于通過深度學習進行孔隙提取的方法,主要原因在于鑄體的顏色深淺不一,分布不均勻,難以直接通過閾值分割進行較好的孔隙提取,若想達到較好的分割效果,需要加入大量的人工交互操作。相較于傳統方法,采用深度學習進行自動的孔隙提取可以在有效地減少人工交互操作量的同時,較大幅度的提升孔隙提取的精度。而采用深度學習進行孔隙提取的網絡中,FCN-8s由于采用了反卷積進行上采樣,圖像存在明顯的鋸齒效應;Segnet提取的結果圖存在較明顯的欠提取,其主要原因應該是提取特征的方式過于單一;FCN+PSP提取的結果圖較為完整,但由于上采樣部分同FCN一樣采用的是反卷積,因此也存在輕微的鋸齒效應;U-net和U-net+DLA都存在一些欠提取的情況,主要是缺少了一些細節處的提取,并且分割出的孔隙區域的邊緣存在一定的毛刺現象,不夠平滑;而本文網絡則較好地完整的提取出了孔隙區域,孔隙區域的邊緣也較為平滑。

表2 不同的孔隙提取方法在測試集上的各項指標

圖11 藍色鑄體圖像分割結果圖例Fig.11 Legend of the blue cast image segmentation result

圖12 紅色鑄體圖像分割結果圖例Fig.12 Legend of the red cast image segmentation result
針對傳統的巖石鑄體薄片圖像孔隙提取方法以及部分目前應用于巖石鑄體圖像孔隙提取的卷積神經網絡存在的分割精度不高,實用性不強等問題,提出了一種基于新的基于深度學習的巖石鑄體圖像孔隙提取方法。該方法基于U-net搭建卷積神經網絡的骨架,在此基礎之上,引入殘差塊來提升網絡的深度并且在其中加入空洞卷積來增大神經元的感受野,以此來提取更全局、語義層次更深的特征。殘差模塊的引入使得提升網絡深度的同時防止過擬合或者梯度消失等問題。除此之外還加入了網絡模塊間的短連接,在保留傳統U-net的長連接的同時,彌補長連接損失的信息,將淺層特征與深層語義特征相結合,得到更好的提取效果。實驗結果表明,該方法優于傳統的孔隙提取方法,具有更高的分割精度且無需人工操作,與主流卷積神經網絡相比也具有更高的精度和平均交并比。在接下來的研究中,我們將對該模型進行進一步改進,在不增加網絡規模和計算參數量的前提下,繼續提升網絡的泛化性能,改善孔隙提取的效果。