全載玻片成像( WSI ),即使用全載玻片掃描儀對(duì)載玻片上的組織進(jìn)行數(shù)字化,正在醫(yī)療保健領(lǐng)域獲得廣泛關(guān)注。 WSI 使組織病理學(xué)、免疫組織化學(xué)和細(xì)胞學(xué)方面的臨床醫(yī)生能夠:
使用計(jì)算方法解釋圖像
將深度學(xué)習(xí)應(yīng)用于數(shù)字圖像以提高臨床分析的準(zhǔn)確性和再現(xiàn)性
提供有關(guān)患者數(shù)據(jù)的新見(jiàn)解
這篇文章解釋了 GPU 加速工具包如何提高輸入/輸出( I / O )性能和圖像處理任務(wù)。更具體地說(shuō),它詳細(xì)介紹了如何:
使用 GPU 加速工具包將平鋪數(shù)據(jù)從磁盤(pán)直接加載到 GPU 內(nèi)存
使用 CUDA 執(zhí)行圖像處理
將處理后的磁貼寫(xiě)回磁盤(pán)
使用加速組織病理學(xué)技術(shù)節(jié)省時(shí)間對(duì)于快速識(shí)別和治療疾病和疾病至關(guān)重要。
WSI I / O 和圖像處理面臨的挑戰(zhàn)
將深度學(xué)習(xí)融入到整個(gè)幻燈片圖像的處理中需要的不僅僅是訓(xùn)練和測(cè)試模型。使用深度學(xué)習(xí)的圖像分析需要大量的預(yù)處理和后處理來(lái)改善解釋和預(yù)測(cè)。整個(gè)幻燈片圖像必須準(zhǔn)備好用于建模,并且生成的預(yù)測(cè)需要額外的解釋處理。示例包括偽影檢測(cè)、顏色歸一化、圖像二次采樣和去除錯(cuò)誤預(yù)測(cè)。
此外,整個(gè)幻燈片圖像的大小通常非常大,分辨率高于 100000 x 100000 像素。這將強(qiáng)制平鋪圖像,這意味著在建模中使用來(lái)自整個(gè)幻燈片圖像的一系列子采樣。將這些平鋪圖像從磁盤(pán)加載到內(nèi)存中,然后處理平鋪圖像可能非常耗時(shí)。
加速 WSI I / O 和圖像處理的工具
本文中介紹的用例使用 GPU 加速工具進(jìn)行基準(zhǔn)測(cè)試,具體如下。
cuCIM 公司
cuCIM ( C 計(jì)算 U 統(tǒng)一設(shè)備架構(gòu) C lara IM age ) 是一個(gè)用于多維圖像的開(kāi)源加速計(jì)算機(jī)視覺(jué)和圖像處理軟件庫(kù)。用例包括生物醫(yī)學(xué)、地理空間、材料和生命科學(xué)以及遙感。 cuCIM 庫(kù)在許可證( Apache 2.0 )下公開(kāi)可用,歡迎社區(qū)貢獻(xiàn)。
Magnum IO GPU 直接存儲(chǔ)
Magnum IO GPUDirect Storage (GDS) 提供存儲(chǔ) I / O 加速,這是 Magnum IO 庫(kù)的一部分,用于并行、異步和智能數(shù)據(jù)中心 I / O 。 GDS 為 GPU 存儲(chǔ)器和存儲(chǔ)器之間的直接存儲(chǔ)器訪問(wèn)( DMA )傳輸提供了直接數(shù)據(jù)路徑,從而避免了通過(guò) CPU 的緩沖區(qū)反彈。此直接路徑增加了系統(tǒng)帶寬,減少了延遲,并減少了 CPU 的使用負(fù)載。
總體而言, GDS 具有以下優(yōu)勢(shì):
增加帶寬,減少延遲,并減少數(shù)據(jù)傳輸?shù)?CPU 和 GPU 負(fù)載
減少了性能影響和對(duì) CPU 處理存儲(chǔ)數(shù)據(jù)傳輸?shù)囊蕾?/p>
對(duì)于完全遷移到 GPU 的計(jì)算管道,在計(jì)算優(yōu)勢(shì)之上充當(dāng)力倍增器
支持與其他基于開(kāi)放源代碼的文件訪問(wèn)的互操作性,通過(guò)使用傳統(tǒng)的文件 I / O (然后由使用 cuFile API 的程序訪問(wèn)),可以將數(shù)據(jù)傳輸?shù)皆O(shè)備或從設(shè)備傳輸數(shù)據(jù)
GDS 可以通過(guò) kvikIO RAPIDS 包從 Python 訪問(wèn)。 KvikIO 提供 Python 和 C ++ API ,能夠在 GDS 支持下執(zhí)行讀或?qū)懖僮鳌#ó?dāng) GDS 不可用時(shí),返回到基本 POSIX 和cudaMemcpy操作。)
整個(gè)幻燈片圖像數(shù)據(jù) I / O
當(dāng)玻片在組織病理學(xué)中通過(guò)數(shù)字全玻片圖像掃描儀數(shù)字化時(shí),高分辨率圖像將以多個(gè)放大倍數(shù)拍攝。 WSI 有一個(gè)金字塔形的數(shù)據(jù)結(jié)構(gòu),每個(gè)放大倍數(shù)的圖像形成一個(gè) WSI 的“層”。這些圖像的最大放大倍數(shù)通常為 200 倍(使用放大倍數(shù)為 10 倍的 20 倍物鏡)或 400 倍(使用 10 倍的 40 倍物鏡)。
圖 1 和圖 2 顯示了乳腺癌研究的基準(zhǔn)用例比較。圖 1 顯示了 H & E 染色數(shù)字病理切片的放大視圖,其中突出顯示了感興趣區(qū)域( ROI )。圖 2 顯示了與圖 1 中突出顯示的 ROI 相對(duì)應(yīng)的高分辨率視圖。
為此用例選擇了具有以下特征的圖像數(shù)據(jù)集:
數(shù)字圖像中的層數(shù)為 XYZ
數(shù)字圖像的最高分辨率層,包含 2028 個(gè)大小( 512 、 512 )的紅、綠、藍(lán)( RGB )色塊
數(shù)字圖像的總大小為 XYZ
數(shù)字病理學(xué)用例
本節(jié)介紹了三種不同的數(shù)字病理學(xué)用例。
用例 1 :將 WSI 瓦片加載到 GPU 數(shù)組中
在這個(gè)圖像分析用例中,來(lái)自磁盤(pán)的 WSI 圖像中的每個(gè)單獨(dú)的區(qū)塊都被加載到具有和不具有 GDS 的 1D GPU 緩沖區(qū)中。目標(biāo) GPU 陣列已預(yù)先分配。在每次使用中,讀取區(qū)塊都會(huì)被重新整形并放置在 GPU 輸出陣列中的適當(dāng)位置,如圖 3 所示。
圖 3 。從主機(jī)上的 平鋪 TIFF 圖像讀取到 GPU 陣列
圖 4 所示的基準(zhǔn)測(cè)試結(jié)果繪制了與tifffile.imread的使用相關(guān)的加速度,然后調(diào)用cupy.asarray將陣列從主機(jī)傳輸?shù)?GPU 。如果沒(méi)有啟用 GDS , kivikIO 為單線程和并行讀取場(chǎng)景提供了 2.0 倍和 4.2 倍的加速。啟用 GDS 后,單線程情況下的加速?gòu)?2.0 倍提高到 2.7 倍,而并行讀取從 4.2 倍提高到 11.8 倍。
圖 4 。相對(duì)于tifffile.imread和cupy.asarray的使用,平鋪 TIFF 圖像讀取的性能
用例 2 :編寫(xiě)未壓縮的 Zarr 文件
在此圖像分析用例中,從 GPU 內(nèi)存中的 CuPy 陣列開(kāi)始。例如,您可以從用例 1 的輸出開(kāi)始。然后將此 GPU 數(shù)組平鋪寫(xiě)入到單獨(dú)的 Zarr 文件中,包括 GDS 和不包括 GDS 。這涉及到將 6084MB 的數(shù)據(jù)以每個(gè)“塊”寫(xiě)入獨(dú)立文件的格式寫(xiě)入磁盤(pán)。各種塊形狀的文件大小如下:
( 256 、 256 、 3 )== 768 kB
( 512 、 512 、 3 )== 3 MB
( 1024 、 1024 、 3 )== 12 MB
( 2048 、 2048 、 3 )== 48 MB
圖 5 顯示了塊大小( 2048 、 2048 、 3 )的結(jié)果。對(duì)于除最小塊大小( 256 、 256 、 3 )之外的所有塊,啟用 GDS (未示出)具有顯著的好處。
圖 5. GDS 寫(xiě)入 Zar 文件(分塊數(shù)組)的相對(duì)性能。顯示了 8 位整數(shù)和 32 位浮點(diǎn)圖像的結(jié)果。
用例 3 :平鋪圖像處理工作流
此圖像分析用例將加載、處理和保存整個(gè)幻燈片圖像合并到一個(gè)應(yīng)用程序中。這個(gè)用例如圖 6 所示。步驟如下:
將單個(gè)平鋪加載到 1D GPU 緩沖區(qū)
將平鋪放置到預(yù)分配的 GPU 陣列的適當(dāng)位置
使用基于 CUDA 的 Sobel 邊緣檢測(cè)內(nèi)核的過(guò)程
將單個(gè)數(shù)據(jù)塊寫(xiě)入 Zarr 文件到磁盤(pán)
一種方法是從用例 1 執(zhí)行平鋪?zhàn)x取,然后將 CUDA 內(nèi)核應(yīng)用于完整陣列,并從用例 2 執(zhí)行平鋪寫(xiě)入。這種方法具有相對(duì)較高的 GPU 內(nèi)存開(kāi)銷(xiāo),因?yàn)橥暾麍D像的兩個(gè)副本必須存儲(chǔ)在 GPU 內(nèi)存中。在圖 8 所示的基準(zhǔn)測(cè)試結(jié)果中,這種方法被標(biāo)記為“多線程全局”
一種內(nèi)存效率更高的方法是并行異步讀取、處理和寫(xiě)入各個(gè)區(qū)塊。在這種情況下, GPU 內(nèi)存需求大大減少,因?yàn)樵谌魏我粋€(gè)時(shí)間只有一小部分圖像在 GPU 內(nèi)存中。這種方法如圖 7 所示。在圖 8 所示的基準(zhǔn)測(cè)試結(jié)果中,這種方法被標(biāo)記為“多線程平鋪”
與禁用 GDS 的多線程全局方法相比,多線程平鋪方法的結(jié)果在性能方面是標(biāo)準(zhǔn)化的。在沒(méi)有 GDS 的情況下,執(zhí)行異步平鋪處理會(huì)有 15% 的性能損失,但 GDS 運(yùn)行時(shí)提高了約 2 倍,比使用 GDS 的全局方法略快。
平鋪 CUDA 處理方法的主要缺點(diǎn)是,由于平鋪處理,簡(jiǎn)單實(shí)現(xiàn)目前無(wú)法處理潛在的邊界偽影。這與像素計(jì)算無(wú)關(guān),如顏色空間轉(zhuǎn)換或數(shù)字病理學(xué)中從 RGB 到吸光度單位的轉(zhuǎn)換。
然而,對(duì)于涉及卷積的操作,使用單個(gè)瓦片的邊緣擴(kuò)展而不是來(lái)自相鄰?fù)咂膶?shí)際數(shù)據(jù)可能會(huì)產(chǎn)生細(xì)微的偽影。為了處理類似的圖像分析用例,我們建議先保存到 Dask 數(shù)組,然后使用 map blocks 執(zhí)行平鋪處理,這可以考慮這些邊界因素。
用于加速 WSI I / O 和圖像處理的示例腳本
用于基準(zhǔn)測(cè)試的腳本可以從 cuCIM repository 的 examples / python / gds _ whole _ slide 文件夾中獲得。目前,這些圖像分析用例使用 RAPIDS kvikIO 進(jìn)行 GDS 加速讀/寫(xiě)操作。這些組織病理學(xué)演示僅供說(shuō)明,尚未進(jìn)行生產(chǎn)使用測(cè)試。未來(lái),我們希望擴(kuò)展 cuCIM API ,為執(zhí)行這些類型的平鋪?zhàn)x寫(xiě)操作提供支持的方法。
總結(jié):為什么加快 WSI I / O 至關(guān)重要
本文中介紹的圖像分析用例表明, NVIDIA GPUDirect Storage 在減少需要讀取和寫(xiě)入平鋪數(shù)據(jù)集的各種高分辨率圖像的 I / O 時(shí)間方面具有顯著優(yōu)勢(shì)。使用加速組織病理學(xué)技術(shù)可以節(jié)省時(shí)間,這對(duì)于快速識(shí)別和治療疾病和疾病至關(guān)重要。
-
NVIDIA
+關(guān)注
關(guān)注
14文章
5076瀏覽量
103735 -
gpu
+關(guān)注
關(guān)注
28文章
4777瀏覽量
129362 -
AI
+關(guān)注
關(guān)注
87文章
31536瀏覽量
270358
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論