?譯者 | 朱先忠
審校 | 孫淑娟
位于美國波士頓的病理人工智能技術(shù)公司PathAI是病理學(xué)(疾病研究)人工智能技術(shù)工具和服務(wù)的領(lǐng)先供應(yīng)商。他們開發(fā)的平臺旨在利用機器學(xué)習(xí)中的現(xiàn)代方法,如圖像分割、圖神經(jīng)網(wǎng)絡(luò)和多實例學(xué)習(xí),大幅提高復(fù)雜疾病的診斷準確性和療效評估。
傳統(tǒng)的手工病理學(xué)易于出現(xiàn)主觀性和觀察者的變異性,從而對診斷和藥物開發(fā)試驗產(chǎn)生負面影響。在深入研究如何使用Pytorch改進診斷工作流程之前,讓我們先介紹一下不依賴機器學(xué)習(xí)的傳統(tǒng)模擬病理工作流程。
傳統(tǒng)生物制藥的工作原理
生物制藥公司可以通過多種途徑發(fā)現(xiàn)新的治療方法或診斷方法。其中一個途徑在很大程度上依賴于通過病理切片的分析來回答各種問題:特定的細胞通信途徑是如何工作的?特定疾病狀態(tài)是否與特定蛋白質(zhì)的存在或缺乏有關(guān)?為什么臨床試驗中的特定藥物對某些患者有效,而對其他患者無效?患者治療效果與新的生物標志物之間是否存在關(guān)聯(lián)?等等。
為了幫助回答這些問題,生物制藥公司一般都是依靠專業(yè)病理學(xué)家來分析幻燈片,并幫助評估他們可能存在的問題。
正如你可能想象的那樣,需要一位經(jīng)過專家委員會認證的病理學(xué)家才能做出準確的解釋和診斷。在一項研究中,36名不同的病理學(xué)家獲得了一個單一的活檢結(jié)果,結(jié)果出現(xiàn)18種不同的診斷結(jié)論,其嚴重程度包括從不需治療到必要的積極治療等各種情形。病理學(xué)家也經(jīng)常在困難的邊緣病例中征求同事的反饋。鑒于問題的復(fù)雜性,即使經(jīng)過專家培訓(xùn)和合作,病理學(xué)家仍很難做出正確的診斷。這種潛在差異可能是被批準的藥物與未通過臨床試驗的藥物之間的差異所致。
PathAI如何利用機器學(xué)習(xí)推動藥物開發(fā)
PathAI公司開發(fā)了一系列機器學(xué)習(xí)模型,旨在為藥物研發(fā)、臨床試驗和診斷提供見解。為此,PathAI利用Pytork框架進行幻燈片級推理,使用各種方法,包括圖神經(jīng)網(wǎng)絡(luò)(GNN)和多實例學(xué)習(xí)等途徑。在這種情況下,“載玻片”是指載玻片的全尺寸掃描圖像,載玻片就是玻璃片,中間有一薄層組織,染色后顯示各種細胞形成物。PyTorch使我們的團隊能夠使用這些不同的方法共享一個通用框架,該框架足夠強大,可以在我們需要的所有條件下工作。此外,PyTorch的高級、命令式和pythonic語法使我們能夠快速原型化模型,然后在得到想要的結(jié)果后將這些模型擴展。
千兆圖像的多實例學(xué)習(xí)
將機器學(xué)習(xí)技術(shù)應(yīng)用于病理學(xué)的一個獨特挑戰(zhàn)是圖像的巨大尺寸。這些數(shù)字幻燈片的分辨率通常為100000 x 100000像素或更高,大小為GB級。在GPU內(nèi)存中加載完整圖像并在其上應(yīng)用傳統(tǒng)的計算機視覺算法幾乎是不可能的任務(wù)。注釋完整的幻燈片圖像(100k x 100k)也需要花費大量的時間和資源,尤其是當(dāng)注釋者需要的是領(lǐng)域?qū)<遥ㄎ瘑T會認證的病理學(xué)家)時。我們經(jīng)常建立模型來預(yù)測圖像級別的標簽,例如在覆蓋整個圖像數(shù)千像素的患者幻燈片上是否存在癌癥。癌變區(qū)域有時只是整個幻燈片的一小部分,這使得機器學(xué)習(xí)問題類似于大海撈針。另一方面,有些問題,如某些組織學(xué)生物標志物的預(yù)測,需要從整個載玻片中聚集信息,然而由于圖像的尺寸問題,使得這一目標同樣很難實現(xiàn)。當(dāng)將機器學(xué)習(xí)技術(shù)應(yīng)用于病理學(xué)問題時,所有這些因素都增加了顯著的算法、計算和邏輯復(fù)雜性。
將圖像分解為較小的切片(patch),學(xué)習(xí)切片表示,然后將這些表示合并以預(yù)測圖像級標簽是解決此問題的一種方法,如下圖所示。一種常用的方法稱為多實例學(xué)習(xí)(Multiple Instance Learning,簡稱“MIL”)。每個切片被視為一個“實例”,一組切片形成一個“包”。將單個切片表示匯總在一起,以預(yù)測最終的包級標簽。在算法上,包中的單個切片實例不需要標簽;因此,允許我們以弱監(jiān)督的方式學(xué)習(xí)包級標簽。它們還使用置換不變池函數(shù),使預(yù)測獨立于切片的順序,并允許有效地聚合信息。
通常,使用基于注意力的池功能,不僅可以有效聚合,還可以為包中的每個切片提供注意力值。這些值表明了相應(yīng)切片在預(yù)測中的重要性,可以可視化以更好地理解模型預(yù)測??山忉屝缘倪@一要素對于推動這些模型在現(xiàn)實世界中的采用非常重要,我們使用諸如加性MIL模型之類的變體來實現(xiàn)這種空間解釋性。在計算上,MIL模型避免了將神經(jīng)網(wǎng)絡(luò)應(yīng)用于大尺寸圖像的問題,因為切片表示是獨立于圖像大小獲得的。
在PathAI中,我們使用基于深度網(wǎng)絡(luò)的自定義MIL模型來預(yù)測圖像級標簽。該過程概述如下:
1.使用不同的采樣方法從幻燈片中選擇切片。
2、基于隨機抽樣或啟發(fā)式規(guī)則構(gòu)造一包切片。
3、基于預(yù)訓(xùn)練模型或大規(guī)模表示學(xué)習(xí)模型為每個實例生成切片表示。
4.應(yīng)用置換不變池函數(shù)來獲得最終的幻燈片級別分數(shù)。
現(xiàn)在,我們已經(jīng)了解了Pytork中有關(guān)MIL的一些高級細節(jié)。接下來,讓我們看看一些代碼,在Pytork中從構(gòu)思到生產(chǎn)代碼有多么簡單。我們首先定義采樣器、轉(zhuǎn)換和MIL數(shù)據(jù)集:
#創(chuàng)建一袋采樣器,從幻燈片中隨機采樣切片
bag_sampler = RandomBagSampler(bag_size=12)
#設(shè)置轉(zhuǎn)換
crop_transform = FlipRotateCenterCrop(use_flips=True)
#創(chuàng)建為每個包加載切片的數(shù)據(jù)集
train_dataset = MILDataset(
bag_sampler=bag_sampler,
samples_loader=sample_loader,
transform=crop_transform,
)
在定義了采樣器和數(shù)據(jù)集之后,我們需要定義使用該數(shù)據(jù)集實際訓(xùn)練的模型。通過使用大家熟悉的PyTorch模型定義語法很容易做到這一點,同時也允許我們創(chuàng)建定制模型。
classifier = DefaultPooledClassifier(hidden_dims=[256, 256], input_dims=1024, output_dims=1)
pooling = DefaultAttentionModule(
input_dims=1024,
hidden_dims=[256, 256],
output_activation=StableSoftmax()
)
# 定義由特征化器、池模塊和分類器組成的模型
model = DefaultMILGraph(featurizer=ShuffleNetV2(), classifier=classifier, pooling = pooling)
由于這些模型經(jīng)過端到端的訓(xùn)練,因此它們提供了一種強大的方法,可以直接從千兆像素的整張幻燈片圖像轉(zhuǎn)換為單個標簽。由于其廣泛適用于不同的生物問題,其實施和部署的兩個方面很重要:
- 對管道每個部分的可配置控制,包括數(shù)據(jù)加載器、模型的模塊化部分以及它們之間的交互。
- 通過“形成概念-實現(xiàn)-實驗-產(chǎn)品化”循環(huán)能夠快速迭代。
Pytork在MIL建模方面具有各種優(yōu)勢。它提供了一種直觀的方法來創(chuàng)建具有靈活控制流的動態(tài)計算圖,這對于快速研究實驗非常有用。映射風(fēng)格的數(shù)據(jù)集、可配置的采樣器和批量采樣器允許我們自定義如何構(gòu)建切片包,從而實現(xiàn)更快的實驗。由于MIL模型是IO密集型的,數(shù)據(jù)并行性和pythonic數(shù)據(jù)加載程序使任務(wù)非常高效且用戶友好。最后,PyTorch的面向?qū)ο筇匦灾С謽?gòu)建可重用的模塊,這有助于快速實驗、可維護的實現(xiàn)和易于構(gòu)建管道的組合組件。
在PyTorch中用GNN探索空間組織結(jié)構(gòu)
在健康組織和病變組織中,細胞的空間排列和結(jié)構(gòu)往往與細胞本身一樣重要。例如,在評估肺癌時,病理學(xué)家試圖觀察腫瘤細胞的整體分組和結(jié)構(gòu)(它們形成固體薄片嗎?還是以較小的局部簇出現(xiàn)?)來確定癌癥是否屬于差異很大的特定亞型。細胞和其他組織結(jié)構(gòu)之間的這種空間關(guān)系可以使用圖建模,以便同時捕捉組織拓撲和細胞組成。圖神經(jīng)網(wǎng)絡(luò)(GNN)允許學(xué)習(xí)這些圖中與其他臨床變量相關(guān)的空間模式,例如某些癌癥中的基因過度表達。
2020年末,當(dāng)PathAI公司開始在組織樣本上使用GNN時,PyTorch通過PyG包獲得了對GNN功能的最佳和最成熟的支持。這使得PyTork成為我們團隊的自然選擇,因為我們知道GNN模型是我們想要探索的重要機器學(xué)習(xí)概念。
在組織樣本的背景下,GNN的主要附加值之一是,圖本身可以揭示空間關(guān)系,否則僅通過視覺檢查很難找到這些關(guān)系。在我們最近的AACR出版論文中,我們指出,通過使用GNN,我們可以更好地了解腫瘤微環(huán)境中免疫細胞聚集體(特別是三級淋巴結(jié)構(gòu),或TLS)的存在對患者預(yù)后的影響。在這種情況下,GNN方法用于預(yù)測與TLS存在相關(guān)的基因表達,并識別TLS區(qū)域以外與TLS相關(guān)的組織學(xué)特征。如果沒有ML模型的幫助,則很難從組織樣本圖像中識別這種對基因表達的見解。
我們成功使用的最有前途的GNN變體之一是自注意力圖池。接下來,讓我們看一下我們是如何使用PyTorch和PyG來定義自注意力圖池(SAGPool)模型的:
class SAGPool(torch.nn.Module):
def __init__(self, ):
super().__init__()
self.conv1 = GraphConv(in_features, hidden_features, aggr='mean')
self.convs = torch.nn.ModuleList()
self.pools = torch.nn.ModuleList()
self.convs.extend([GraphConv(hidden_features, hidden_features, aggr='mean') for i in range(num_layers - 1)])
self.pools.extend([SAGPooling(hidden_features, ratio, GNN=GraphConv, min_score=min_score) for i in range((num_layers) // 2)])
self.jump = JumpingKnowledge(mode='cat')
self.lin1 = Linear(num_layers * hidden_features, hidden_features)
self.lin2 = Linear(hidden_features, out_features)
self.out_activation = out_activation
self.dropout = dropout
在上面的代碼中,我們首先定義一個卷積圖層,然后添加兩個模塊列表層,允許我們傳入可變數(shù)量的層。然后,我們獲取空模塊列表,并附加可變數(shù)量的GraphConv層,后跟可變數(shù)量的SAGPooling層。然后,我們通過添加JumpingKnowledge層、兩個線性層、激活函數(shù)和退出值來完成SAGPool定義。PyTorch直觀的語法使我們能夠抽象出使用最先進方法(如SAG池)的復(fù)雜性,同時保持我們熟悉的通用模型開發(fā)方法。
像我們上面描述的使用一個SAG池這樣的模型只是GNN與PyTorch如何允許我們探索新想法的一個例子。我們最近還探索了多模式CNN-GNN混合模型,其結(jié)果比傳統(tǒng)病理學(xué)家共識分數(shù)高20%。這些創(chuàng)新以及傳統(tǒng)CNN和GNN之間的相互作用,再次得益于從研究到生產(chǎn)的短期模型開發(fā)循環(huán)。
改善患者預(yù)后
總而言之,為了實現(xiàn)我們使用人工智能驅(qū)動的病理學(xué)改善患者預(yù)后的使命,PathAI需要借助于ML開發(fā)框架,該框架:(1)在開發(fā)和探索的初始階段促進快速迭代和輕松擴展(即模型配置為代碼)(2)將模型訓(xùn)練和推理擴展到海量圖像(3)輕松可靠地為我們產(chǎn)品的生產(chǎn)使用(在臨床試驗及以后)提供模型。
正如我們在本文中所展示的,PyTorch為我們提供了所有上述功能以及更多功能支持。我們對PyTorch框架的未來感到無比興奮,甚至迫不及待地想看到我們可以使用該框架解決哪些其他有影響力的挑戰(zhàn)。
譯者介紹
朱先忠,51CTO社區(qū)編輯,51CTO專家博客、講師,濰坊一所高校計算機教師,自由編程界老兵一枚。早期專注各種微軟技術(shù)(編著成ASP.NET AJX、Cocos 2d-X相關(guān)三本技術(shù)圖書),近十多年投身于開源世界(熟悉流行全棧Web開發(fā)技術(shù)),了解基于OneNet/AliOS+Arduino/ESP32/樹莓派等物聯(lián)網(wǎng)開發(fā)技術(shù)與Scala+Hadoop+Spark+Flink等大數(shù)據(jù)開發(fā)技術(shù)。
原文標題:??Case Study: PathAI Uses PyTorch to Improve Patient Outcomes with AI-powered Pathology???,作者:Logan Kilpatrick, Harshith Padigela, Syed Ashar Javed, Robert Egger?