趙 陽,張俊華
云南大學 信息學院,昆明650500
脊柱側凸是一種脊柱三維結構的畸形疾病,全球有1%~4%的青少年受到此疾病的影響[1]。該疾病的診斷主要參考患者的脊柱側凸角度,目前X線成像方式是診斷脊柱側凸的首選,在X 線圖像中分割脊柱是后續測量、配準以及三維重建的基礎。
近期出現了不少脊柱X線圖像分割方法。Anitha等人[2-3]提出了使用自定義的濾波器自動提取椎體終板以及自動獲取輪廓的形態學算子的方法,但這些方法存在一定的觀察者間的誤差。Sardjono等人[4]提出基于帶電粒子模型的物理方法來提取脊柱輪廓,實現過程復雜且實用性不高。葉偉等人[5]提出了一種基于模糊C均值聚類分割算法,該方法過程繁瑣且實用性欠佳。以上方法都只對椎體進行了分割,卻無法實現對脊柱的整體輪廓分割。
深度學習在圖像分割的領域有很多應用。Long等人提出了全卷積網絡[6](Full Convolutional Network,FCN),將卷積神經網絡的最后一層全連接層替換為卷積層,得到特征圖后再經過反卷積來獲得像素級的分類結果。通過對FCN 結構改進,Ronneberger 等人提出了一種編碼-解碼的網絡結構U-Net[7]解決圖像分割問題。Wu 等人提出了BoostNet[8]來對脊柱X 線圖像進行目標檢測以及一個基于多視角的相關網絡[9]來完成對脊柱框架的定位。上述方法并未直接對脊柱圖像進行分割,僅提取了關鍵點的特征并由定位的特征來獲取脊柱的整體輪廓。Fang 等人[10]采用FCN 對脊柱的CT 切片圖像進行分割并進行三維重建,但分割精度相對較低。Horng等人[11]將脊柱X線圖像進行切割后使用殘差U-Net來對單個椎骨進行分割,再合成完整的脊柱圖像,從而導致分割過程過于繁瑣。Tan 等人[12]和Grigorieva 等人[13]采用U-Net 來對脊柱X 線圖像進行分割并實現對Cobb 角的測量或三維重建,但存在分割精度不高的問題。以上研究方法雖然在一定程度上完成脊柱分割,但仍存在兩個問題:(1)只涉及椎體的定位和計算脊柱側凸角度,卻沒有對圖像進行完整的脊柱分割。(2)分割精度不高。
針對上述問題,在U-Net 的基礎上提出了一種將Inception[14]結構和殘差網絡(Residual Network,ResNet)[15]與U-Net相結合的方法,首先使用類Inception網絡將其卷積層進行替換,增加網絡的深度使其可以提取多尺度的信息,并在跳躍連接之前增加ResNet 使其可以更穩定地提取信息,最后在U-Net第一次上采樣之前增加卷積塊注意力模塊(Convolutional Block Attention Module,CBAM)[16]對空間和通道的權重進行注意力監督。
如圖1 所示為U-Net 的結構,U-Net 主要由特征提取、上采樣和跳躍連接三個部分組成。特征提取主要由3×3 的卷積核和2×2 的最大池化層構成,每一層都提取了不同尺度的特征。上采樣可以恢復初始圖像大小,并在每一層通過跳躍連接將提取的特征進行特征融合來恢復目標的空間特征和細節。

圖1 原始U-Net結構圖
在醫學圖像處理任務中,在不同尺度下網絡能提取的特征是不一樣的,從特征圖中思考如何進行多尺度特征提取來增加網絡提取到的信息對分割結果有積極影響。Inception網絡就是一種提取多尺度特征的方法,基于該方法使用3×3、5×5、7×7 的卷積核來進行不同尺度下的特征提取。考慮到5×5、7×7的卷積核計算量過大,結合Szegedy等人[17]提出的方法,使用2個3×3的卷積核進行連接代替5×5 的卷積核,使用3 個3×3 的卷積核連接代替7×7 的卷積核可以減少模型計算量。與此同時使用1×1的短連接來獲取一些圖像的空域信息。
圖2所示即為Inceptionblock的結構,通過串并連接可以充分利用三個3×3的卷積核,三個支路的輸出分別為3×3、近似于5×5 以及近似于7×7 的卷積核。拼接之后的特征圖經過Relu激活層并輸入到最大池化層。

圖2 Inceptionblock結構
使用3×3的卷積核近似5×5和7×7的卷積核雖然減少了網絡的計算量并提取了多尺度的特征,但與此同時增加了網絡的寬度和深度,從而導致發生梯度爆炸或梯度消失。通過在Inceptionblock之后加入ResNet可以解決網絡加寬和加深的問題。
如圖3 所示,在Inception block 的后面添加3×3 和1×1的卷積核構成的ResNet,并通過一個Relu激活層和批標準化層。批標準化可以在一定程度上加快模型收斂速度并緩解梯度消失的問題,與ResNet 協同作用可以有效提高網絡的穩定性。通過對加入的Resblock 層數調整來進行實驗,確定需要的Resblock的層數。

圖3 Resblock結構
CBAM 是考慮了不同通道像素的重要性和同一通道不同位置像素的重要性提出的一種結合空間和通道的注意力模塊。最早提出通道注意力機制模塊的是SENet[18],SENet 通過學習自動獲取到每個特征通道的重要程度,然后按照這個重要程度增強有用的特征并抑制對當前任務用處不大的特征。CBAM 在此基礎上同時考慮了空間和通道的重要程度,由于卷積運算通過將跨通道和空間信息混合在一起來提取信息特征,因此該模塊將沿通道和空間這兩個主要維度來提取有意義的特征。
設F∈RC×H×W是特征圖的輸入,將其送入CBAM,則特征圖會經過一個1 維的通道注意力模塊Mc∈RC×1×1和2維的空間注意力模塊Ms∈R1×H×W,其運算過程如下:其中F'是F經過通道注意力模塊后輸出的特征圖,F″是F'經過空間注意力模塊后輸出的特征圖,?表示逐元素相乘。

式(1)為通道注意力的運算過程,Mc表示在通道上進行注意力運算。通道注意力的工作和SENet 很類似,首先將輸入的特征圖壓縮得到一個一維矢量,在對特征圖進行壓縮的過程中,不同點在于CBAM 使用了全局最大池化和全局平均池化,得到兩個不同的一維矢量。全局平均池化對特征圖的每一個像素點都有反饋,全局最大池化只對特征圖中響應最大的地方有反饋,為全局平均池化的補充。
以F表示輸入的特征圖,則Fcavg與Fcmax分別為特征圖經過全局平均池化AvgPool和全局最大池化MaxPool的特征向量,MLP為多層感知機運算,W0和W1為多層感知機的兩層參數,σ為sigmod激活函數,則通道注意力的運算過程如下:

其中W0需要使用Relu函數進行激活。
式(2)為空間注意力的運算過程,Ms表示在空間上進行注意力運算。將通道注意力模塊輸出的特征向量放進空間注意力模塊中,讓最大池化Fcmax和平均池化Fcavg輸出的特征進行一個拼接,并通過一個f7×7的卷積核進行降維,通過一個sigmod 激活層生成特征圖其運算過程如下:

將通道注意力和空間注意力的輸出進行相乘得到最后輸出的特征。特征圖通過CBAM后,網絡在特征學習的基礎上,在空間和通道上學習不同像素的重要程度。
圖4即為本實驗模型中CBAM的示意圖,通道注意力模塊和空間注意力模塊順序連接,嵌入網絡之中。本實驗將CBAM放置于Dropout層和上采樣層的中間,對最深層的特征進行注意力監督,在空間和通道上學習不同像素的重要程度,從而更準確地提取特征。

圖4 CBAM示意圖

圖5 改進的U-Net模型
如圖5 所示為改進的U-Net 模型,結合Inception 網絡和ResNet,用Inception block替換卷積層使得網絡可以進行多尺度特征提取融合,在Inception block后面加入ResNet 保證訓練過程的穩定和性能優化,在網絡的第四層和第五層后面加入dropout層防止訓練進入過擬合,在網絡的第一次上采樣層前加入CBAM 對空間和通道進行注意力監督,使得圖像信息可以更完整地保留。輸入的圖片尺寸為256×256×1,經過Inception block的3×3、5×5、7×7 的卷積核可以得到尺寸分別為256×256×8、256×256×17、256×156×26的特征圖,經過拼接后的特征圖尺寸為256×256×51,在Resblock之后,特征圖大小調整為256×256×32并在最大池化層被壓縮為128×128×32,直到經過第五個Inception block,其尺寸為16×16×853。在特征圖經過CBAM 時,其尺寸不會發生改變,僅通過學習通道和空間的特征權重讓網絡自行調整,并將通道和空間的特征權重與特征圖進行融合后輸入到上采樣層。上采樣后的特征圖與通過跳躍連接的原始圖像信息進行拼接融合,最終通過一個sigmod 激活層恢復原始圖像大小,得到預測圖。
和原有的U-Net 模型相比,改進的U-Net 模型的優勢如下:(1)進行多尺度特征提取,學習不同尺度下分割目標的特征。(2)在Resblock 的作用下解決多尺度網絡加寬帶來的梯度消失或梯度爆炸的問題。(3)CBAM 用于在空間和通道上學習不同像素的重要程度,從而獲得更加準確的分割結果。
本實驗采用的硬件環境為CPU CoreTMi7-8700k 3.7 GHz,GPU NVIDIA RTX2080 顯存8 GB。軟件環境為python3.6、tensorflow1.12為支撐的keras。
本實驗數據集來源自SpineWeb[19]。Wu 等人[8]也使用了該數據集來實驗。該數據集包括609張脊柱前后X線圖片,包括脊柱正常的樣本以及發生脊柱側凸的樣本,其格式為bmp。
本實驗使用python的標注工具labelme對數據集進行標注,在標注前將脊柱X 線圖像進行預處理,使其大小為256×256,位深為8位。在預處理后,對每一節椎骨進行標注后獲得標簽圖片并進行二值化處理,本實驗的標簽為醫生認可的真實值。
本實驗采用二元交叉熵來作為損失函數,表達式如式(5)所示:

二元交叉熵主要用于二分類任務,而本實驗主要是對脊柱進行分割,標簽只有背景和脊柱兩類,所以采用二元交叉熵作為損失函數。
本實驗使用Dice系數作為評價指標,Dice系數主要用于計算兩個不同集合的相似性。在本實驗中使用預測圖像與測試圖像的標簽來計算其Dice 系數,從而得到預測圖像與測試圖像的相似程度來評價模型的優劣程度。

將130 張脊柱X 線圖像分為110 張訓練集和20 張測試集,并使用圖像翻轉、平移、裁剪、變焦的方法來進行圖像增強。實驗選用Adam作為優化器,并將學習率設為0.000 1。網絡的batch_size 為11,訓練輪次為150輪,每一輪輸入的圖片為256張。本實驗采用了提前結束的回調機制,若超過10 個輪次模型的損失值沒有降低,則提前終止模型訓練。
為了體現出本實驗模型的優勢,本實驗一共設計了四組對比實驗,分別對改進的網絡是否使用CBAM 模塊、殘差連接的不同層數來進行測試。實驗1采用未添加CBAM的網絡,并在Inception block的后面僅添加一層ResNet,最終的平均Dice系數為0.823 6。實驗2采用未添加CBAM的網絡,在Inception block的后面添加四層ResNet,最終的平均Dice系數為0.827 2。實驗3采用添加了CBAM的網絡,并在Inception block后面添加一層ResNet,最終的平均Dice系數為0.828 2。而實驗4是采用添加了CBAM的網絡,并在Inception block的后面添加四層ResNet,最終的平均Dice 系數為0.845 7。從實驗結果來看增加殘差連接的層數和采用CBAM模塊都可以在不同程度上對網絡的性能有一定提升。表1給出了不同模型下分割精度的對比。

表1 各模型Dice系數對比
從文獻[13]當中采用的原始U-Net 網絡所取得的0.710 6 的Dice 系數來看,本文最終取得的Dice 系數為0.845 7,比之前提高了0.135 1。從圖6當中的紅框處可以看出,使用了Inception block以及殘差連接和添加了CBAM 的分割效果比原始的U-Net 網絡和只使用了Inception block 以及殘差連接的分割效果更好,且更接近于標簽的真實值。
從圖6當中的紅框處可以看出,本文最終的實驗模型的分割結果相比原始的U-Net 網絡分割結果有明顯的提高,減少了椎體之間的粘連且與標簽的真實值已非常接近,并減少了誤分割出現的次數。

圖6 測試結果(紅框內為不同模型差異之處)
從訓練時間上來看,如表2所示,原始的U-Net網絡每一個輪次上的訓練時間平均為110 s,改進的U-Net模型平均為每輪84 s,遠遠低于原始的U-Net 網絡訓練時間,分割的效果和訓練的效率上都已經超過U-Net原始網絡。

表2 各模型訓練時間對比
本實驗通過對U-Net網絡進行改進,提高了分割精度,但由于使用Inception block進行多尺度特征提取并在跳躍連接之前加入的Resblock 會增加模型的參數從而導致模型計算量和模型訓練時間的增加,通過表2可以看出使用四層Resblock的模型比只使用一層Resblock的模型每一個輪次的訓練時間多了30 s,從而在一定程度上增加了訓練代價,但對于醫學影像處理任務精度比速度更為重要,訓練代價的增加在可以接受的范圍之內。
為了驗證本實驗模型的有效性,將本實驗的數據集用于FCN32s、FCN8s以及Mask-R-CNN進行分割,并用Dice 系數進行評估,表3 給出了不同算法分割精度的對比。
通過使用上述算法和本實驗算法進行比較可以得出本文的算法模型的Dice系數相比于FCN32s、FCN8s、U-Net 和Mask-R-CNN 分別提高了23.98%、21.44%、19.01%和10.56%,充分表明本實驗模型在分割精度上與其他算法相比有顯著提高。

表3 不同算法Dice系數對比
本文提出了一種基于U-Net 改進的網絡并對脊柱進行自動分割的方法,通過對U-Net 原有卷積核的改進,使用Inception block 進行多尺度特征提取,使用ResNet 解決梯度消失和梯度爆炸的問題,并使用了CBAM對空間和通道的學習權重進行調整,從而提升網絡性能。實驗結果表明該模型可以有效提高脊柱X 線圖像的分割結果,但在一定程度上增加了訓練代價。后續可對實驗模型進一步探討,在盡可能不增加訓練代價的情況下得到更好的分割結果。本文在醫學影像處理領域有一定的參考價值,并為后續深入研究打下堅實的基礎。