趙 陽,張俊華
云南大學(xué) 信息學(xué)院,昆明650500
脊柱側(cè)凸是一種脊柱三維結(jié)構(gòu)的畸形疾病,全球有1%~4%的青少年受到此疾病的影響[1]。該疾病的診斷主要參考患者的脊柱側(cè)凸角度,目前X線成像方式是診斷脊柱側(cè)凸的首選,在X 線圖像中分割脊柱是后續(xù)測量、配準以及三維重建的基礎(chǔ)。
近期出現(xiàn)了不少脊柱X線圖像分割方法。Anitha等人[2-3]提出了使用自定義的濾波器自動提取椎體終板以及自動獲取輪廓的形態(tài)學(xué)算子的方法,但這些方法存在一定的觀察者間的誤差。Sardjono等人[4]提出基于帶電粒子模型的物理方法來提取脊柱輪廓,實現(xiàn)過程復(fù)雜且實用性不高。葉偉等人[5]提出了一種基于模糊C均值聚類分割算法,該方法過程繁瑣且實用性欠佳。以上方法都只對椎體進行了分割,卻無法實現(xiàn)對脊柱的整體輪廓分割。
深度學(xué)習(xí)在圖像分割的領(lǐng)域有很多應(yīng)用。Long等人提出了全卷積網(wǎng)絡(luò)[6](Full Convolutional Network,F(xiàn)CN),將卷積神經(jīng)網(wǎng)絡(luò)的最后一層全連接層替換為卷積層,得到特征圖后再經(jīng)過反卷積來獲得像素級的分類結(jié)果。通過對FCN 結(jié)構(gòu)改進,Ronneberger 等人提出了一種編碼-解碼的網(wǎng)絡(luò)結(jié)構(gòu)U-Net[7]解決圖像分割問題。Wu 等人提出了BoostNet[8]來對脊柱X 線圖像進行目標檢測以及一個基于多視角的相關(guān)網(wǎng)絡(luò)[9]來完成對脊柱框架的定位。上述方法并未直接對脊柱圖像進行分割,僅提取了關(guān)鍵點的特征并由定位的特征來獲取脊柱的整體輪廓。Fang 等人[10]采用FCN 對脊柱的CT 切片圖像進行分割并進行三維重建,但分割精度相對較低。Horng等人[11]將脊柱X線圖像進行切割后使用殘差U-Net來對單個椎骨進行分割,再合成完整的脊柱圖像,從而導(dǎo)致分割過程過于繁瑣。Tan 等人[12]和Grigorieva 等人[13]采用U-Net 來對脊柱X 線圖像進行分割并實現(xiàn)對Cobb 角的測量或三維重建,但存在分割精度不高的問題。以上研究方法雖然在一定程度上完成脊柱分割,但仍存在兩個問題:(1)只涉及椎體的定位和計算脊柱側(cè)凸角度,卻沒有對圖像進行完整的脊柱分割。(2)分割精度不高。
針對上述問題,在U-Net 的基礎(chǔ)上提出了一種將Inception[14]結(jié)構(gòu)和殘差網(wǎng)絡(luò)(Residual Network,ResNet)[15]與U-Net相結(jié)合的方法,首先使用類Inception網(wǎng)絡(luò)將其卷積層進行替換,增加網(wǎng)絡(luò)的深度使其可以提取多尺度的信息,并在跳躍連接之前增加ResNet 使其可以更穩(wěn)定地提取信息,最后在U-Net第一次上采樣之前增加卷積塊注意力模塊(Convolutional Block Attention Module,CBAM)[16]對空間和通道的權(quán)重進行注意力監(jiān)督。
如圖1 所示為U-Net 的結(jié)構(gòu),U-Net 主要由特征提取、上采樣和跳躍連接三個部分組成。特征提取主要由3×3 的卷積核和2×2 的最大池化層構(gòu)成,每一層都提取了不同尺度的特征。上采樣可以恢復(fù)初始圖像大小,并在每一層通過跳躍連接將提取的特征進行特征融合來恢復(fù)目標的空間特征和細節(jié)。
圖1 原始U-Net結(jié)構(gòu)圖
在醫(yī)學(xué)圖像處理任務(wù)中,在不同尺度下網(wǎng)絡(luò)能提取的特征是不一樣的,從特征圖中思考如何進行多尺度特征提取來增加網(wǎng)絡(luò)提取到的信息對分割結(jié)果有積極影響。Inception網(wǎng)絡(luò)就是一種提取多尺度特征的方法,基于該方法使用3×3、5×5、7×7 的卷積核來進行不同尺度下的特征提取??紤]到5×5、7×7的卷積核計算量過大,結(jié)合Szegedy等人[17]提出的方法,使用2個3×3的卷積核進行連接代替5×5 的卷積核,使用3 個3×3 的卷積核連接代替7×7 的卷積核可以減少模型計算量。與此同時使用1×1的短連接來獲取一些圖像的空域信息。
圖2所示即為Inceptionblock的結(jié)構(gòu),通過串并連接可以充分利用三個3×3的卷積核,三個支路的輸出分別為3×3、近似于5×5 以及近似于7×7 的卷積核。拼接之后的特征圖經(jīng)過Relu激活層并輸入到最大池化層。
圖2 Inceptionblock結(jié)構(gòu)
使用3×3的卷積核近似5×5和7×7的卷積核雖然減少了網(wǎng)絡(luò)的計算量并提取了多尺度的特征,但與此同時增加了網(wǎng)絡(luò)的寬度和深度,從而導(dǎo)致發(fā)生梯度爆炸或梯度消失。通過在Inceptionblock之后加入ResNet可以解決網(wǎng)絡(luò)加寬和加深的問題。
如圖3 所示,在Inception block 的后面添加3×3 和1×1的卷積核構(gòu)成的ResNet,并通過一個Relu激活層和批標準化層。批標準化可以在一定程度上加快模型收斂速度并緩解梯度消失的問題,與ResNet 協(xié)同作用可以有效提高網(wǎng)絡(luò)的穩(wěn)定性。通過對加入的Resblock 層數(shù)調(diào)整來進行實驗,確定需要的Resblock的層數(shù)。
圖3 Resblock結(jié)構(gòu)
CBAM 是考慮了不同通道像素的重要性和同一通道不同位置像素的重要性提出的一種結(jié)合空間和通道的注意力模塊。最早提出通道注意力機制模塊的是SENet[18],SENet 通過學(xué)習(xí)自動獲取到每個特征通道的重要程度,然后按照這個重要程度增強有用的特征并抑制對當(dāng)前任務(wù)用處不大的特征。CBAM 在此基礎(chǔ)上同時考慮了空間和通道的重要程度,由于卷積運算通過將跨通道和空間信息混合在一起來提取信息特征,因此該模塊將沿通道和空間這兩個主要維度來提取有意義的特征。
設(shè)F∈RC×H×W是特征圖的輸入,將其送入CBAM,則特征圖會經(jīng)過一個1 維的通道注意力模塊Mc∈RC×1×1和2維的空間注意力模塊Ms∈R1×H×W,其運算過程如下:其中F'是F經(jīng)過通道注意力模塊后輸出的特征圖,F(xiàn)″是F'經(jīng)過空間注意力模塊后輸出的特征圖,?表示逐元素相乘。
式(1)為通道注意力的運算過程,Mc表示在通道上進行注意力運算。通道注意力的工作和SENet 很類似,首先將輸入的特征圖壓縮得到一個一維矢量,在對特征圖進行壓縮的過程中,不同點在于CBAM 使用了全局最大池化和全局平均池化,得到兩個不同的一維矢量。全局平均池化對特征圖的每一個像素點都有反饋,全局最大池化只對特征圖中響應(yīng)最大的地方有反饋,為全局平均池化的補充。
以F表示輸入的特征圖,則Fcavg與Fcmax分別為特征圖經(jīng)過全局平均池化AvgPool和全局最大池化MaxPool的特征向量,MLP為多層感知機運算,W0和W1為多層感知機的兩層參數(shù),σ為sigmod激活函數(shù),則通道注意力的運算過程如下:
其中W0需要使用Relu函數(shù)進行激活。
式(2)為空間注意力的運算過程,Ms表示在空間上進行注意力運算。將通道注意力模塊輸出的特征向量放進空間注意力模塊中,讓最大池化Fcmax和平均池化Fcavg輸出的特征進行一個拼接,并通過一個f7×7的卷積核進行降維,通過一個sigmod 激活層生成特征圖其運算過程如下:
將通道注意力和空間注意力的輸出進行相乘得到最后輸出的特征。特征圖通過CBAM后,網(wǎng)絡(luò)在特征學(xué)習(xí)的基礎(chǔ)上,在空間和通道上學(xué)習(xí)不同像素的重要程度。
圖4即為本實驗?zāi)P椭蠧BAM的示意圖,通道注意力模塊和空間注意力模塊順序連接,嵌入網(wǎng)絡(luò)之中。本實驗將CBAM放置于Dropout層和上采樣層的中間,對最深層的特征進行注意力監(jiān)督,在空間和通道上學(xué)習(xí)不同像素的重要程度,從而更準確地提取特征。
圖4 CBAM示意圖
圖5 改進的U-Net模型
如圖5 所示為改進的U-Net 模型,結(jié)合Inception 網(wǎng)絡(luò)和ResNet,用Inception block替換卷積層使得網(wǎng)絡(luò)可以進行多尺度特征提取融合,在Inception block后面加入ResNet 保證訓(xùn)練過程的穩(wěn)定和性能優(yōu)化,在網(wǎng)絡(luò)的第四層和第五層后面加入dropout層防止訓(xùn)練進入過擬合,在網(wǎng)絡(luò)的第一次上采樣層前加入CBAM 對空間和通道進行注意力監(jiān)督,使得圖像信息可以更完整地保留。輸入的圖片尺寸為256×256×1,經(jīng)過Inception block的3×3、5×5、7×7 的卷積核可以得到尺寸分別為256×256×8、256×256×17、256×156×26的特征圖,經(jīng)過拼接后的特征圖尺寸為256×256×51,在Resblock之后,特征圖大小調(diào)整為256×256×32并在最大池化層被壓縮為128×128×32,直到經(jīng)過第五個Inception block,其尺寸為16×16×853。在特征圖經(jīng)過CBAM 時,其尺寸不會發(fā)生改變,僅通過學(xué)習(xí)通道和空間的特征權(quán)重讓網(wǎng)絡(luò)自行調(diào)整,并將通道和空間的特征權(quán)重與特征圖進行融合后輸入到上采樣層。上采樣后的特征圖與通過跳躍連接的原始圖像信息進行拼接融合,最終通過一個sigmod 激活層恢復(fù)原始圖像大小,得到預(yù)測圖。
和原有的U-Net 模型相比,改進的U-Net 模型的優(yōu)勢如下:(1)進行多尺度特征提取,學(xué)習(xí)不同尺度下分割目標的特征。(2)在Resblock 的作用下解決多尺度網(wǎng)絡(luò)加寬帶來的梯度消失或梯度爆炸的問題。(3)CBAM 用于在空間和通道上學(xué)習(xí)不同像素的重要程度,從而獲得更加準確的分割結(jié)果。
本實驗采用的硬件環(huán)境為CPU CoreTMi7-8700k 3.7 GHz,GPU NVIDIA RTX2080 顯存8 GB。軟件環(huán)境為python3.6、tensorflow1.12為支撐的keras。
本實驗數(shù)據(jù)集來源自SpineWeb[19]。Wu 等人[8]也使用了該數(shù)據(jù)集來實驗。該數(shù)據(jù)集包括609張脊柱前后X線圖片,包括脊柱正常的樣本以及發(fā)生脊柱側(cè)凸的樣本,其格式為bmp。
本實驗使用python的標注工具labelme對數(shù)據(jù)集進行標注,在標注前將脊柱X 線圖像進行預(yù)處理,使其大小為256×256,位深為8位。在預(yù)處理后,對每一節(jié)椎骨進行標注后獲得標簽圖片并進行二值化處理,本實驗的標簽為醫(yī)生認可的真實值。
本實驗采用二元交叉熵來作為損失函數(shù),表達式如式(5)所示:
二元交叉熵主要用于二分類任務(wù),而本實驗主要是對脊柱進行分割,標簽只有背景和脊柱兩類,所以采用二元交叉熵作為損失函數(shù)。
本實驗使用Dice系數(shù)作為評價指標,Dice系數(shù)主要用于計算兩個不同集合的相似性。在本實驗中使用預(yù)測圖像與測試圖像的標簽來計算其Dice 系數(shù),從而得到預(yù)測圖像與測試圖像的相似程度來評價模型的優(yōu)劣程度。
將130 張脊柱X 線圖像分為110 張訓(xùn)練集和20 張測試集,并使用圖像翻轉(zhuǎn)、平移、裁剪、變焦的方法來進行圖像增強。實驗選用Adam作為優(yōu)化器,并將學(xué)習(xí)率設(shè)為0.000 1。網(wǎng)絡(luò)的batch_size 為11,訓(xùn)練輪次為150輪,每一輪輸入的圖片為256張。本實驗采用了提前結(jié)束的回調(diào)機制,若超過10 個輪次模型的損失值沒有降低,則提前終止模型訓(xùn)練。
為了體現(xiàn)出本實驗?zāi)P偷膬?yōu)勢,本實驗一共設(shè)計了四組對比實驗,分別對改進的網(wǎng)絡(luò)是否使用CBAM 模塊、殘差連接的不同層數(shù)來進行測試。實驗1采用未添加CBAM的網(wǎng)絡(luò),并在Inception block的后面僅添加一層ResNet,最終的平均Dice系數(shù)為0.823 6。實驗2采用未添加CBAM的網(wǎng)絡(luò),在Inception block的后面添加四層ResNet,最終的平均Dice系數(shù)為0.827 2。實驗3采用添加了CBAM的網(wǎng)絡(luò),并在Inception block后面添加一層ResNet,最終的平均Dice系數(shù)為0.828 2。而實驗4是采用添加了CBAM的網(wǎng)絡(luò),并在Inception block的后面添加四層ResNet,最終的平均Dice 系數(shù)為0.845 7。從實驗結(jié)果來看增加殘差連接的層數(shù)和采用CBAM模塊都可以在不同程度上對網(wǎng)絡(luò)的性能有一定提升。表1給出了不同模型下分割精度的對比。
表1 各模型Dice系數(shù)對比
從文獻[13]當(dāng)中采用的原始U-Net 網(wǎng)絡(luò)所取得的0.710 6 的Dice 系數(shù)來看,本文最終取得的Dice 系數(shù)為0.845 7,比之前提高了0.135 1。從圖6當(dāng)中的紅框處可以看出,使用了Inception block以及殘差連接和添加了CBAM 的分割效果比原始的U-Net 網(wǎng)絡(luò)和只使用了Inception block 以及殘差連接的分割效果更好,且更接近于標簽的真實值。
從圖6當(dāng)中的紅框處可以看出,本文最終的實驗?zāi)P偷姆指罱Y(jié)果相比原始的U-Net 網(wǎng)絡(luò)分割結(jié)果有明顯的提高,減少了椎體之間的粘連且與標簽的真實值已非常接近,并減少了誤分割出現(xiàn)的次數(shù)。
圖6 測試結(jié)果(紅框內(nèi)為不同模型差異之處)
從訓(xùn)練時間上來看,如表2所示,原始的U-Net網(wǎng)絡(luò)每一個輪次上的訓(xùn)練時間平均為110 s,改進的U-Net模型平均為每輪84 s,遠遠低于原始的U-Net 網(wǎng)絡(luò)訓(xùn)練時間,分割的效果和訓(xùn)練的效率上都已經(jīng)超過U-Net原始網(wǎng)絡(luò)。
表2 各模型訓(xùn)練時間對比
本實驗通過對U-Net網(wǎng)絡(luò)進行改進,提高了分割精度,但由于使用Inception block進行多尺度特征提取并在跳躍連接之前加入的Resblock 會增加模型的參數(shù)從而導(dǎo)致模型計算量和模型訓(xùn)練時間的增加,通過表2可以看出使用四層Resblock的模型比只使用一層Resblock的模型每一個輪次的訓(xùn)練時間多了30 s,從而在一定程度上增加了訓(xùn)練代價,但對于醫(yī)學(xué)影像處理任務(wù)精度比速度更為重要,訓(xùn)練代價的增加在可以接受的范圍之內(nèi)。
為了驗證本實驗?zāi)P偷挠行裕瑢⒈緦嶒灥臄?shù)據(jù)集用于FCN32s、FCN8s以及Mask-R-CNN進行分割,并用Dice 系數(shù)進行評估,表3 給出了不同算法分割精度的對比。
通過使用上述算法和本實驗算法進行比較可以得出本文的算法模型的Dice系數(shù)相比于FCN32s、FCN8s、U-Net 和Mask-R-CNN 分別提高了23.98%、21.44%、19.01%和10.56%,充分表明本實驗?zāi)P驮诜指罹壬吓c其他算法相比有顯著提高。
表3 不同算法Dice系數(shù)對比
本文提出了一種基于U-Net 改進的網(wǎng)絡(luò)并對脊柱進行自動分割的方法,通過對U-Net 原有卷積核的改進,使用Inception block 進行多尺度特征提取,使用ResNet 解決梯度消失和梯度爆炸的問題,并使用了CBAM對空間和通道的學(xué)習(xí)權(quán)重進行調(diào)整,從而提升網(wǎng)絡(luò)性能。實驗結(jié)果表明該模型可以有效提高脊柱X 線圖像的分割結(jié)果,但在一定程度上增加了訓(xùn)練代價。后續(xù)可對實驗?zāi)P瓦M一步探討,在盡可能不增加訓(xùn)練代價的情況下得到更好的分割結(jié)果。本文在醫(yī)學(xué)影像處理領(lǐng)域有一定的參考價值,并為后續(xù)深入研究打下堅實的基礎(chǔ)。