朱炯滔,王 成
(武漢理工大學 機電工程學院,湖北 武漢 430070)
計算機層析成像(CT成像)是醫(yī)學影像領域一種十分重要的成像方法,該方法可以有效地反映人體內(nèi)部的組織結(jié)構、組成成分等信息[1-2]。深度學習技術的迅猛發(fā)展為CT成像帶來了新的機遇。2017年,BoZhu等[3]提出了在神經(jīng)網(wǎng)絡中構建全連層來學習醫(yī)學圖像中的重建算法,但構建全連接層必然會產(chǎn)生規(guī)模龐大的神經(jīng)網(wǎng)絡參數(shù),運行時不僅對計算資源消耗巨大還會增加時間成本[4]。針對上述問題,筆者提出一種支持GPU(graphics processing unit)并行化計算的FBP(filter back projection)方法,該方法在深度學習平臺Tensorflow下實現(xiàn)。
TensorFlow是由Google DeepMind團隊開發(fā)為機器學習和深度學習提供支持的一種開源軟件平臺[5],其具有高度的可移植性,用戶可以輕松地將其部署在多種計算設備上。相對于市面上其他的深度學習框架,TensorFlow在性能、通用性、靈活性、語言支持等方面都具有較大的優(yōu)勢[6]。TensorFlow使用數(shù)據(jù)流圖進行數(shù)值計算,節(jié)點(OP)表示數(shù)學操作,線則表示節(jié)點間相互聯(lián)系的張量(tensor)。TensorFlow也開放了自定義的OP編程接口,用戶可以根據(jù)自己的需求來添加數(shù)學函數(shù)。鑒于TensorFlow具有以上優(yōu)點,筆者提出了在TensorFlow平臺上并行化FBP實現(xiàn)方法。
濾波反投影算法(FBP)是一種經(jīng)典的CT圖像重建算法,該算法兼顧了重建質(zhì)量和重建時間兩個CT性能指標,是目前應用最廣泛的CT重建算法[7]。因此使用支持GPU并行化計算的FBP方法具有重要的現(xiàn)實意義[8-9]。
FBP算法的投影幾何如圖1所示,SO為X射線源,SOP為中心射線,點O為旋轉(zhuǎn)中心,中心線向兩端的張開角度都為γm,錐形的位置由中心射線SOP與y軸的夾角β決定,同一錐形中的任意射線SOE都可由轉(zhuǎn)角γ確定。因此在笛卡爾坐標系中,射線的位置可由(β,γ)唯一確定。
圖1 投影幾何示意圖
設點E為重建圖像內(nèi)任意一點,極坐標為(r,φ),f(r,φ)為該點的像素值,pβ(s)為穿過該點像素的射線在探測器上的投影。FBP重建公式為:
(1)
算法的實現(xiàn)步驟分為三步執(zhí)行:
(1)對投影函數(shù)進行修正,以校正投影偏移值。若探測器間距為Δd,則:
pβ(s)=pβ(nΔd)
(2)
Δd=dm/N
(3)
(4)
(2)對投影圖進行卷積濾波。
(5)
式中:h(nΔd)為卷積函數(shù),選用Ramp濾波函數(shù)。
(3)反投影,重建圖像。在360°下共采集M個投影數(shù)據(jù),即數(shù)據(jù)的采集步距為Δβ=2π/M,對應的離散重建表達式為:
(6)
式中:
(7)
(8)
設在360°角度下,采集投影個數(shù)為M,每個投影的采樣點個數(shù)為N,重建圖像大小為n×n,執(zhí)行的偽代碼如下:
修正階段:
for x=0:N
for y=0:M
根據(jù)式(4)對每個點進行修正計算
end
end
卷積濾波階段:
for y=0:M
根據(jù)式(5)進行卷積
end
反投影階段:
for β=0:M-1
for x=0:n
for y=0:n
根據(jù)式(7)計算n,n差值取整,根據(jù)式(8)計算U。
end
end
end
由偽代碼可知,在圖像重建的3個階段中,計算結(jié)果相互獨立,算法具有明顯的并行化能力,因此適合使用GPU進行加速計算。
FBP的并行化基于NVIDIA廠商推出的CUDA平臺實現(xiàn)。FBP算法的重建過程如下:主機端將投影數(shù)據(jù)傳入GPU顯存當中并設置塊(block)和線程(thread)的數(shù)量,因本實驗中需要處理512×512大小的二維圖像,故設置塊數(shù)量為64×64,每個塊包含的線程數(shù)量為8×8,即GPU一次可以對512×512個像素進行重建計算。然后GPU的處理器調(diào)用重建函數(shù)(kernel)進行計算,計算完成后將再將數(shù)據(jù)傳回主機端內(nèi)存。至此,F(xiàn)BP算法的實現(xiàn)方法為:①設備初始化,分配內(nèi)存和顯存。②設置block、thread。③設置投影角度數(shù)n。④主機將Projection按投影角度分批傳入GPU顯存中。⑤GPU對當前角度下的投影數(shù)據(jù)進行FBP。⑥GPU將Image傳入主機內(nèi)存。
使用系統(tǒng)自帶的C++或者clang編譯器將FBP重建代碼編譯為Linux系統(tǒng)下的動態(tài)鏈接庫。然后使用TensorFlow的Python接口調(diào)用動態(tài)庫將FBP重建算法作為一種新的數(shù)學操作(OP)注冊到TensorFlow平臺[10]。
實驗PC采用的配置為Intel Core i7-4790(3.6 GHz)處理器,8 G內(nèi)存,NVIDIA公司的GeForce GTX 1070 8 G顯卡、運算能力6.1。操作系統(tǒng)Linux16.04,TensorFlow版本1.6。
實驗選取人體腹部組織第1、第50、第100、第150張的切片投影圖進行重建,重建尺寸為512×512,重建圖像如圖2所示。其中,輸入正弦圖為設備掃描后的投影圖像,并且正弦圖在TensorFlow平臺下進行圖像重建。
圖2 512×512重建圖
為了測量圖像在網(wǎng)絡訓練過程中的圖像重建速度,使用了Python自帶的計時器函數(shù)time.time()進行FBP重建計時,該方法可以將GPU與內(nèi)存交換數(shù)據(jù)的時間計算在內(nèi),提高了計時的準確性。FBP運行時間如表1所示。
表1 FBP運行時間
使用GPU進行FBP重建的方法屬于硬件加速法,其運行性能不受計算數(shù)據(jù)的影響,由表1可以看出GPU在重建人體不同部位所需時間穩(wěn)定且重建速度快,滿足實際的使用需求。
GPU中顯存的作用主要用來存放網(wǎng)絡參數(shù)和計算數(shù)據(jù),顯存越大可以搭建的網(wǎng)絡也就越大,其在GPU中的作用類似于內(nèi)存。神經(jīng)網(wǎng)絡參數(shù)存儲在顯存中的數(shù)據(jù)類型主要為單精度浮點型(float),在GPU中占用4個字節(jié)(Byte)。
神經(jīng)網(wǎng)絡中全連層的每一個節(jié)點都與上一層的所有節(jié)點相連,用于提取上一層的所有特征。若使用全連層將848×900的投影數(shù)據(jù)重建出512×512的圖像需要200 068,300 800個浮點數(shù)據(jù),占用約745.3 G大小的顯存空間,遠超出所使用顯卡的8 G顯存。因此,參考文獻[3]中提出的AUTOMAP網(wǎng)絡,采用AUTOMAP網(wǎng)絡引用全連層來進行圖像重建,網(wǎng)絡結(jié)構如圖3所示。使用添加FBP算法的網(wǎng)絡如圖4所示。
圖3 AUTOMAP網(wǎng)絡
圖4 自定義OP網(wǎng)絡
圖4使用OP網(wǎng)絡相較于圖3中的全連層網(wǎng)絡,可以節(jié)省出大量的網(wǎng)絡參數(shù),減少GPU的運算負荷進而提升網(wǎng)絡的訓練速度。以本論文中的數(shù)據(jù)為例,圖4中的OP只需要申請848×4個字節(jié)的單角度投影空間和512×512×4個字節(jié)的重建圖像空間,共計約1 M的顯存空間即可完成重建任務。使用市面上銷售的普通顯卡即可運行該網(wǎng)絡,相對比文獻[3]中使用兩塊NVIDIA P100(市面售價3.5萬)顯卡進行圖像重建,節(jié)省了大量成本。
為了對GPU的加速性能進行更直觀的對比,采用文獻[11]中提供的開源CPU重建代碼,分別對重建尺寸為256×256和512×512的CT圖像進行加速對比。其中,GPU重建圖像采用GPU并行加速處理的結(jié)果圖像,CPU重建圖像為CPU處理的結(jié)果圖像。重建效果對比如圖5所示。GPU和CPU的重建時間對比如表2所示。
圖5 重建效果對比
表2 重建時間對比
由表2可以看出GPU相對比CPU進行重建加速具有很好的加速能力,可以節(jié)省大量計算時間。
以CT成像為研究內(nèi)容,以支持GPU加速的并行化FBP方法為研究重點,借助深度學習的工具,提出了一種基于TensorFlow的并行化FBP方法。實驗表明,該方法可以有效節(jié)省計算資源,降低時間成本和設備成本。