學(xué)圖像分割與通用語(yǔ)義分割:從U-Net到nnU-Net的主線脈絡(luò))
做語(yǔ)義分割方向的研究和項(xiàng)目最難的不是看懂某一篇論文而是站在全局去判斷“這個(gè)思路值不值得跟進(jìn)”“這個(gè)方法在醫(yī)學(xué)影像上能不能用”。我這兩年把語(yǔ)義分割和醫(yī)學(xué)圖像分割兩個(gè)方向的論文反復(fù)篩過幾輪各種會(huì)議期刊、預(yù)印本、開源代碼都過了一遍踩過不少只看標(biāo)題就動(dòng)手復(fù)現(xiàn)的坑也總結(jié)出了一套比較順的讀論文和選模型的方法。這篇就來盤一盤分割方向的主線脈絡(luò)重點(diǎn)講清楚醫(yī)學(xué)圖像分割和通用分割的差異以及哪些工作是真正值得精讀的。如果你正準(zhǔn)備入門分割方向或者已經(jīng)在做醫(yī)學(xué)影像相關(guān)的項(xiàng)目想快速建立自己的“論文地圖”這篇文章可以直接當(dāng)作索引用。1. 醫(yī)學(xué)圖像分割為什么不能照搬通用語(yǔ)義分割很多初學(xué)者會(huì)先入為主地認(rèn)為醫(yī)學(xué)圖像分割只是通用語(yǔ)義分割在某個(gè)數(shù)據(jù)集上的應(yīng)用把圖像分類或分割的經(jīng)典模型拿過來改個(gè)輸入輸出就能跑。這種思路不能算錯(cuò)但實(shí)際做項(xiàng)目時(shí)會(huì)發(fā)現(xiàn)醫(yī)學(xué)影像的難度系數(shù)和通用視覺完全不在一個(gè)量級(jí)。得先弄清楚差異才能理解為什么后文提到的那些模型會(huì)被單獨(dú)拎出來講。先看數(shù)據(jù)的本質(zhì)差異。通用分割處理的基本是自然圖像比如街景、人像、家居場(chǎng)景類別之間的外觀差異很大一個(gè)行人、一輛車、一棵樹的紋理和形狀有天然區(qū)分度。而醫(yī)學(xué)圖像往往是灰度影像CT、MRI、超聲不同組織之間的灰度值接近邊界不清晰病灶和周邊正常組織的對(duì)比度可能只有幾個(gè)灰度級(jí)。比如肝臟腫瘤分割腫瘤區(qū)域和肝實(shí)質(zhì)在CT上都是軟組織密度肉眼都很難分辨邊界算法想單靠紋理或顏色特征切出準(zhǔn)確輪廓難度非常大。再看樣本量。通用分割常用的公開基準(zhǔn)動(dòng)輒上萬(wàn)張甚至幾十萬(wàn)張標(biāo)注圖像而醫(yī)學(xué)影像的標(biāo)注高度依賴專業(yè)醫(yī)生。一個(gè)熟練的放射科醫(yī)生給一批CT切片逐層勾畫器官邊界一例就要幾個(gè)小時(shí)所以醫(yī)學(xué)分割公開數(shù)據(jù)集通常只有幾十到幾百例帶精細(xì)標(biāo)注的更是稀缺。數(shù)據(jù)量不足導(dǎo)致深度模型很容易過擬合訓(xùn)練集的Dice很高一換醫(yī)院掃描儀、一換序列參數(shù)就崩。還有一個(gè)經(jīng)常被忽略的問題類別不平衡。通用分割的類別分布雖然也有偏差但通常不會(huì)特別極端。醫(yī)學(xué)場(chǎng)景里病灶區(qū)域往往只占整幅圖像的百分之幾甚至千分之幾典型的比如肺結(jié)節(jié)檢測(cè)結(jié)節(jié)像素可能只有整張CT的0.1%。如果用普通交叉熵?fù)p失模型很快就學(xué)會(huì)了把所有像素都預(yù)測(cè)為背景因?yàn)檫@樣loss已經(jīng)很低了。這也是醫(yī)學(xué)分割必須特殊設(shè)計(jì)損失函數(shù)的原因。然后是空間維度的問題。通用分割處理的是2D圖像3D的分割任務(wù)在自然圖像領(lǐng)域很少遇到。但CT和MRI本身就是體數(shù)據(jù)橫斷面、冠狀面、矢狀面各有一組切片逐層2D分割會(huì)丟失切片間的空間連續(xù)性而直接做3D分割又要處理顯存和標(biāo)注密度的問題。醫(yī)學(xué)圖像分割的另一個(gè)常見場(chǎng)景是多模態(tài)輸入同一個(gè)病人的T1加權(quán)MRI、T2加權(quán)MRI、增強(qiáng)掃描、PET/CT各序列提供不同方面的信息怎么把多模態(tài)特征有效融合也是通用分割很少考慮的課題。所以醫(yī)學(xué)圖像分割實(shí)際上是一個(gè)標(biāo)簽受限、邊界模糊、正負(fù)類極端失衡、有時(shí)還是三維多模態(tài)輸入的細(xì)分方向。通用分割的主線模型能提供基礎(chǔ)能力但要在醫(yī)學(xué)任務(wù)上真正落地必須針對(duì)這些特點(diǎn)做改造。下面幾章從通用主線講起再落到醫(yī)學(xué)特化方案。2. 通用分割主線上的六個(gè)關(guān)鍵節(jié)點(diǎn)先梳理通用語(yǔ)義分割的發(fā)展主線。這條線其實(shí)非常清晰從全卷積到編碼解碼再到多尺度、注意力、Transformer每一代工作都在解決前一代的某個(gè)瓶頸。2.1 FCN開創(chuàng)了“全卷積”的革命2015年前后深度學(xué)習(xí)做圖像任務(wù)的主流做法還是卷積層提取特征后接全連接層輸出分類概率。要做像素級(jí)別的分割最直接的想法是對(duì)每個(gè)像素都跑一個(gè)分類但這樣重復(fù)計(jì)算浪費(fèi)嚴(yán)重。FCN的核心改動(dòng)是把分類網(wǎng)絡(luò)最后的全連接層全部換成卷積層讓網(wǎng)絡(luò)接受任意尺寸輸入輸出空間維度被保留的密集預(yù)測(cè)圖再用轉(zhuǎn)置卷積做上采樣把低分辨率的特征圖恢復(fù)到原圖分辨率。這個(gè)改動(dòng)看似簡(jiǎn)單但意義重大。我第一次復(fù)現(xiàn)FCN的時(shí)候最大的感觸是理解了“感受野”的作用。最后一層卷積的感受野已經(jīng)覆蓋了足夠大的范圍所以輸出的每個(gè)像素分類不只是看局部patch而是包含了全圖上下文信息。FCN還引入了跳層結(jié)構(gòu)把淺層的細(xì)節(jié)特征和深層的高層語(yǔ)義特征相加融合彌補(bǔ)上采樣過程中丟失的邊緣細(xì)節(jié)。它把語(yǔ)義分割真正變成了一個(gè)端到端的密集預(yù)測(cè)任務(wù)后續(xù)所有模型幾乎都能追溯到這個(gè)框架。2.2 U-Net用跳躍連接打穿了編碼解碼的對(duì)稱結(jié)構(gòu)U-Net提出的時(shí)間比FCN晚不了多久但它的影響力在醫(yī)學(xué)分割領(lǐng)域持續(xù)到今天。U-Net不是簡(jiǎn)單地把VGG之類的分類骨架改成全卷積而是精心設(shè)計(jì)了對(duì)稱的編碼器和解碼器結(jié)構(gòu)。編碼器逐級(jí)下采樣特征分辨率減半、通道數(shù)加倍解碼器逐級(jí)上采樣恢復(fù)分辨率每一級(jí)解碼前都會(huì)把編碼器對(duì)應(yīng)級(jí)別的特征圖拼接進(jìn)來。這種“跳躍連接”讓解碼器同時(shí)獲得高層語(yǔ)義和低層細(xì)節(jié)在邊緣信息極其重要的醫(yī)學(xué)分割任務(wù)上效果顯著。U-Net能成為醫(yī)學(xué)分割的基準(zhǔn)模型背后是有道理的。醫(yī)學(xué)數(shù)據(jù)集小模型太深容易過擬合U-Net參數(shù)量適中結(jié)構(gòu)簡(jiǎn)單而且它的下采樣壓縮和上采樣重建天然適配解剖結(jié)構(gòu)的尺度變化。但也別神話它U-Net本身的改進(jìn)空間很大后面幾章我會(huì)具體展開醫(yī)學(xué)方向怎么對(duì)它做改造。2.3 DeepLab系列和PSPNet用空洞卷積解決多尺度多尺度目標(biāo)一直是分割難點(diǎn)。一張街景圖里行人可能只有幾十個(gè)像素卡車卻能占滿整幅圖網(wǎng)絡(luò)單尺度特征很難同時(shí)覆蓋兩類目標(biāo)??斩淳矸e是其中的關(guān)鍵工具它通過在卷積核里填零來擴(kuò)大感受野不增加參數(shù)和計(jì)算量。DeepLab v2把不同膨脹率的空洞卷積并聯(lián)起來組成ASPP模塊每一路抓不同范圍的特征最后拼接融合。PSPNet則更直接用不同大小的池化核做金字塔池化再上采樣拼接得到全局上下文。我當(dāng)時(shí)做城市街景分割項(xiàng)目時(shí)對(duì)比過這兩類結(jié)構(gòu)的實(shí)際效果ASPP對(duì)于中等尺度目標(biāo)提升明顯金字塔池化對(duì)全局場(chǎng)景理解更好。兩者的共同思路是“在同一層特征上同時(shí)看宏觀和微觀”這一思想后來被Transformer里的多尺度窗口機(jī)制沿襲了。2.4 注意力機(jī)制從Non-local到自注意力傳統(tǒng)卷積的感受野再大也是有限的而語(yǔ)義分割的理想狀態(tài)是每個(gè)像素都能感知全圖。Non-local工作第一次提出用自注意力機(jī)制計(jì)算任意兩點(diǎn)間的響應(yīng)關(guān)系讓每個(gè)位置的輸出依賴所有位置的特征極大增強(qiáng)了長(zhǎng)距離依賴建模。之后DANet、CBAM、CCNet等在一個(gè)方向做文章有的把通道注意力和空間注意力分開做并聯(lián)融合有的用稀疏圖近似全圖關(guān)系來降低計(jì)算量。自注意力其實(shí)就隱含了位置嵌入和全局建模Transformer架構(gòu)在視覺方向興起之后這類思想逐漸被新的范式取代。但Non-local時(shí)代的很多模塊設(shè)計(jì)比如空間注意力、通道注意力、交叉注意力現(xiàn)在仍然出現(xiàn)在醫(yī)學(xué)圖像分割的論文里讀歷史工作可以幫助理解后續(xù)的混合架構(gòu)。2.5 Transformer架構(gòu)把分割變成了序列建模視覺Transformer在分類任務(wù)上成功后分割方向涌現(xiàn)了兩條路線。一條是直接換骨架把編碼器換成ViT或者Swin Transformer代表如SETR和Swin-UNet特征提取能力更強(qiáng)上下文建模更好但需要更大的數(shù)據(jù)預(yù)訓(xùn)練。另一條是編解碼混合架構(gòu)比如TransUNet用CNN作為編碼器底層提取局部細(xì)節(jié)Transformer模塊在中高層建模全局關(guān)系再交給CNN解碼器恢復(fù)結(jié)構(gòu)。Transformer對(duì)分割的真正貢獻(xiàn)不在于替換卷積而在于打破了固定感受野的限制讓模型天然具備了捕捉長(zhǎng)距離依賴的能力。但代價(jià)也很明顯——訓(xùn)練數(shù)據(jù)需求大、顯存開銷高、位置編碼對(duì)輸入尺寸敏感。醫(yī)學(xué)分割數(shù)據(jù)量本來就不大純Transformer架構(gòu)直接訓(xùn)練效果往往還不如U-Net這也是后來很多工作走“混合”路線的現(xiàn)實(shí)原因。2.6 Mamba狀態(tài)空間模型分割線最新的變量最近一兩年?duì)顟B(tài)空間模型SSM的代表作Mamba把分割社區(qū)又?jǐn)噭?dòng)了一遍。Mamba的核心是選擇性掃描機(jī)制輸入每個(gè)位置的隱藏狀態(tài)都會(huì)根據(jù)當(dāng)前內(nèi)容動(dòng)態(tài)決定保留和遺忘什么配合線性復(fù)雜度讓長(zhǎng)序列建模比Transfomer更高效。VM-UNet、U-Mamba這些工作把Mamba塞進(jìn)U-Net式結(jié)構(gòu)在長(zhǎng)距離建模能力上想和Transformer掰手腕參數(shù)量和顯存占用又比Transformer友好。不過這個(gè)方向剛起步工程上還不成熟。我復(fù)現(xiàn)過幾版SSM分割模型發(fā)現(xiàn)它們對(duì)框架版本、GPU型號(hào)很敏感同一套代碼換張卡可能結(jié)果差異很大。如果只是做項(xiàng)目不必急著換Mamba如果是水論文做創(chuàng)新點(diǎn)這個(gè)方向確實(shí)還有不少可做的位置值得持續(xù)關(guān)注。階段代表結(jié)構(gòu)核心貢獻(xiàn)主要局限全卷積化FCN端到端密集預(yù)測(cè)上采樣粗糙、邊界差編解碼U-Net跳躍連接融合細(xì)節(jié)感受野受限多尺度DeepLab/PSPNet空洞卷積/金字塔池化全局建模不足注意力Non-local系列長(zhǎng)距離依賴計(jì)算復(fù)雜度高TransformerTransUNet/Swin-UNet全局自注意力數(shù)據(jù)要求高狀態(tài)空間Mamba系列長(zhǎng)序列低復(fù)雜度工程穩(wěn)定性待驗(yàn)證3. 醫(yī)學(xué)分割的專用武器從U-Net到nnU-Net通用分割的模型到了醫(yī)學(xué)場(chǎng)景往往要經(jīng)過專門改造才能發(fā)揮效果醫(yī)學(xué)方向也慢慢發(fā)展出了自己的專用武器庫(kù)。3.1 為什么U-Net成為醫(yī)學(xué)分割事實(shí)上的標(biāo)準(zhǔn)答案不是簡(jiǎn)單的“因?yàn)樾Ч谩倍且驗(yàn)閁-Net的結(jié)構(gòu)契合了醫(yī)學(xué)圖像三大痛點(diǎn)。第一跳躍連接在每一層都保留了解剖結(jié)構(gòu)細(xì)節(jié)這對(duì)邊界模糊的器官分割尤其重要深層語(yǔ)義可以告訴你“這是肝”淺層特征可以告訴你“肝的邊界在哪”。第二U-Net對(duì)輸入尺寸要求靈活醫(yī)學(xué)影像設(shè)備出的圖像尺寸千差萬(wàn)別U-Net可以裁剪成任意patch尺寸訓(xùn)練不像分類網(wǎng)絡(luò)那樣對(duì)輸入固定不變。第三U-Net在少量訓(xùn)練數(shù)據(jù)下就能比較穩(wěn)定地收斂這一點(diǎn)我在只有幾十例標(biāo)注數(shù)據(jù)的項(xiàng)目里反復(fù)驗(yàn)證過別的復(fù)雜模型經(jīng)常不收斂U-Net調(diào)整一下學(xué)習(xí)率Dice一般能到可用水平。但是也別把U-Net當(dāng)成萬(wàn)能藥。原始U-Net的卷積層數(shù)和通道數(shù)是固定的沒有針對(duì)不同器官大小做自適應(yīng)配置。一個(gè)分割微小視網(wǎng)膜血管的模型和一個(gè)分割整個(gè)肝臟的模型需要完全不同的下采樣層數(shù)和感受野。所以后續(xù)的改進(jìn)工作很大一部分是在U-Net骨架上做結(jié)構(gòu)搜索和自適應(yīng)配置。3.2 從2D切片到3D體素V-Net與3D U-NetCT和MRI是三維體數(shù)據(jù)如果只做2D切片分割模型看不到相鄰切片之間的解剖連續(xù)性。3D U-Net把編碼器、解碼器里的2D卷積全部換成3D卷積直接對(duì)整個(gè)體數(shù)據(jù)進(jìn)行下采樣和上采樣。V-Net在此基礎(chǔ)上引入了殘差連接并在損失函數(shù)里首次使用了Dice系數(shù)作為優(yōu)化目標(biāo)。3D分割最大的工程挑戰(zhàn)是顯存。一個(gè)常見的CT體數(shù)據(jù)是512×512×200直接整塊輸入網(wǎng)絡(luò)不現(xiàn)實(shí)。主流做法是隨機(jī)裁剪成128×128×64之類的小patch配合滑動(dòng)窗口推理。這樣做的代價(jià)是模型看到的局部信息變多全局位置信息變少很多解剖結(jié)構(gòu)是相對(duì)定位的比如膽囊一定在肝臟下方只看一個(gè)patch就丟失了這種位置線索。一些工作通過在模型頭部加入位置編碼或者降低第一層下采樣倍率來緩解但這個(gè)問題至今沒有徹底解決。3.3 nnU-Net一個(gè)把工程問題自動(dòng)化的標(biāo)桿如果說有哪個(gè)開源工具值得醫(yī)學(xué)分割從業(yè)者無腦先跑一遍那一定是nnU-Net。它的核心思想很直接把U-Net在不同醫(yī)學(xué)數(shù)據(jù)集上的最佳配置參數(shù)經(jīng)驗(yàn)固化下來針對(duì)新數(shù)據(jù)集自動(dòng)完成預(yù)處理、網(wǎng)絡(luò)結(jié)構(gòu)選擇、patch尺寸、batch size、訓(xùn)練策略的配置不需要手工調(diào)參。我自己的經(jīng)驗(yàn)是用nnU-Net做基線非常省心。它有三種預(yù)設(shè)模式2D、3D和3D全分辨率跑之前它會(huì)先分析數(shù)據(jù)的體素間距、圖像形狀、類別分布然后自動(dòng)決定下采樣次數(shù)、patch大小和損失函數(shù)權(quán)重。對(duì)于大多數(shù)規(guī)模適中的醫(yī)學(xué)分割任務(wù)nnU-Net跑出來的結(jié)果已經(jīng)超過很多手工設(shè)計(jì)的復(fù)雜模型這讓醫(yī)學(xué)分割的基線標(biāo)準(zhǔn)被抬高了一大截。新提出的模型如果連nnU-Net都打不過基本沒有發(fā)表價(jià)值。不過nnU-Net也有局限。它高度依賴U-Net這個(gè)基礎(chǔ)架構(gòu)對(duì)于邊界極其模糊或形態(tài)復(fù)雜的結(jié)構(gòu)比如腦膠質(zhì)瘤的浸潤(rùn)邊界單靠U-Net式結(jié)構(gòu)很難再往上突破。后續(xù)的很多醫(yī)學(xué)分割創(chuàng)新比如基于Transformer的混合模型做成開源框架后經(jīng)常拿nnU-Net來作為對(duì)比對(duì)象。3.4 多模態(tài)融合讓模型同時(shí)看多種序列醫(yī)學(xué)影像的分割很多時(shí)候不只看單一序列比如腦腫瘤分割通常同時(shí)使用T1、T1增強(qiáng)、T2和FLAIR四個(gè)序列的MRI每個(gè)序列對(duì)腫瘤不同區(qū)域的敏感度不一樣。多模態(tài)融合最粗的方式是把多張圖像并列拼成多個(gè)通道輸入模型相當(dāng)于造一個(gè)更大的輸入張量。更精細(xì)的做法是在特征層面做融合編碼器每個(gè)模態(tài)各走一條支路然后在某個(gè)深度把特征相加或者做注意力加權(quán)。自注意力機(jī)制天然適合多模態(tài)融合因?yàn)樽⒁饬梢詫W(xué)習(xí)“當(dāng)前像素該更相信哪個(gè)模態(tài)”。有些工作甚至直接不區(qū)分模態(tài)通道把所有序列都塞進(jìn)特征序列里讓網(wǎng)絡(luò)自己學(xué)效果反而不如顯式區(qū)分模態(tài)的結(jié)構(gòu)。我的建議是在數(shù)據(jù)規(guī)模有限時(shí)先用多通道輸入這種簡(jiǎn)單方式能提幾個(gè)點(diǎn)的Dice再考慮復(fù)雜融合結(jié)構(gòu)因?yàn)楹笳邔?duì)訓(xùn)練數(shù)據(jù)的量要求更高。3.5 小樣本與半監(jiān)督把未標(biāo)注數(shù)據(jù)用起來醫(yī)學(xué)影像標(biāo)注貴未標(biāo)注數(shù)據(jù)多所以半監(jiān)督和自監(jiān)督方向在醫(yī)學(xué)分割里特別活躍。半監(jiān)督的典型做法是先用少量標(biāo)注數(shù)據(jù)訓(xùn)練一個(gè)教師模型教師模型對(duì)大量未標(biāo)注數(shù)據(jù)預(yù)測(cè)偽標(biāo)簽再用偽標(biāo)簽和學(xué)生模型互相訓(xùn)練代表方法如Mean Teacher框架。自監(jiān)督則直接不依賴標(biāo)簽通過對(duì)比學(xué)習(xí)或遮罩重建去學(xué)習(xí)影像的通用特征。這類方法在實(shí)際項(xiàng)目里的收益差異很大。如果標(biāo)注數(shù)據(jù)本身已經(jīng)有幾十例半監(jiān)督再多加幾百例未標(biāo)注數(shù)據(jù)提升通常有限如果標(biāo)注數(shù)據(jù)只有個(gè)位數(shù)半監(jiān)督帶來的提升能接近一倍。自監(jiān)督預(yù)訓(xùn)練在醫(yī)學(xué)影像上的坑在于域差異太大在自然圖像上預(yù)訓(xùn)練過的權(quán)重直接在醫(yī)學(xué)數(shù)據(jù)上微調(diào)往往不如在相同模態(tài)的未標(biāo)注醫(yī)學(xué)數(shù)據(jù)上做自監(jiān)督預(yù)訓(xùn)練哪怕數(shù)據(jù)量小一些。4. 損失函數(shù)與評(píng)估指標(biāo)的實(shí)戰(zhàn)選擇很多論文在方法部分寫清楚模型結(jié)構(gòu)后損失函數(shù)往往被一筆帶過仿佛只是像素交叉熵。但在醫(yī)學(xué)分割里損失函數(shù)的選擇幾乎和模型結(jié)構(gòu)同等重要直接決定模型收斂方向和最終精度。4.1 評(píng)估指標(biāo)各有各的“盲區(qū)”先看評(píng)估指標(biāo)因?yàn)閾p失函數(shù)設(shè)計(jì)通常要跟評(píng)估指標(biāo)對(duì)齊。分割任務(wù)最常用的兩類指標(biāo)是Dice系數(shù)和IoU也叫Jaccard指數(shù)兩者本質(zhì)上是同一個(gè)東西的兩種表達(dá)方式都是計(jì)算預(yù)測(cè)區(qū)域和真實(shí)區(qū)域的重疊程度只是Dice放大了一倍權(quán)重。它們的共同問題是兩個(gè)方向都不獎(jiǎng)勵(lì)也不懲罰如果預(yù)測(cè)面積整體比真實(shí)區(qū)域大了一圈只要重疊部分不變大Dice也上不去如果病灶很小一個(gè)什么都沒預(yù)測(cè)出來的模型和一個(gè)勉強(qiáng)圈住病灶中心的模型在Dice上的差距可能出乎意料地小。還有一個(gè)常用的是Hausdorff距離它衡量的是兩個(gè)輪廓之間最遠(yuǎn)的距離差。Dice只看面積重疊不管邊界形狀是否吻合而Hausdorff距離對(duì)邊界形狀極其敏感。臨床上更關(guān)注邊界誤差比如放療靶區(qū)勾畫需要精確到毫米級(jí)別此時(shí)光看Dice是不夠的。我見過不少論文Dice刷得很高但邊界的Hausdorff距離大得離譜這類模型直接臨床上沒有實(shí)用價(jià)值。指標(biāo)衡量?jī)?nèi)容對(duì)病灶小的敏感度對(duì)邊界匹配敏感度適合場(chǎng)景Dice/IoU面積重疊中等低通用報(bào)告像素準(zhǔn)確率全圖正確比例極低低僅作輔助Hausdorff距離最大邊界誤差高高放療勾畫、細(xì)分割平均表面距離平均邊界偏差高高器官輪廓評(píng)估4.2 從交叉熵到Dice Loss再到組合損失交叉熵?fù)p失對(duì)每個(gè)像素獨(dú)立計(jì)算損失天然適合于類別均衡的任務(wù)但醫(yī)學(xué)分割里正負(fù)類比例極端失衡直接用交叉熵幾乎必崩。處理失衡的第一個(gè)辦法是加權(quán)交叉熵給出現(xiàn)次數(shù)少的類別更高權(quán)重但權(quán)重的設(shè)定很依賴人工經(jīng)驗(yàn)和數(shù)據(jù)分布調(diào)起來非常痛苦。Dice Loss直接把Dice系數(shù)變成可微的損失函數(shù)它是區(qū)域級(jí)別的優(yōu)化天然不懼類別不平衡模型不會(huì)陷入“全背景”陷阱。它的缺點(diǎn)是訓(xùn)練不穩(wěn)定尤其是在剛開始訓(xùn)練時(shí)預(yù)測(cè)概率都很低Dice Loss的梯度過陡容易振蕩?,F(xiàn)在的通用做法是把Dice Loss和加權(quán)交叉熵組合起來前面幾個(gè)epoch用較大權(quán)重監(jiān)督全局分類后面逐漸讓Dice Loss主導(dǎo)邊界精修。還有一個(gè)值得一試的Boundary Loss它的思路是把分割問題建模為距離圖回歸優(yōu)化預(yù)測(cè)邊界和真實(shí)邊界之間的距離。單獨(dú)用不好但跟Dice Loss疊加能讓分割邊界更貼近真實(shí)輪廓顯著降低Hausdorff距離。做放療靶區(qū)這類對(duì)邊界精度要求極高的項(xiàng)目時(shí)我會(huì)在組合損失里加上Boundary Loss這一項(xiàng)。4.3 我的組合配方與訓(xùn)練經(jīng)驗(yàn)跑過大量分割實(shí)驗(yàn)之后我常用的配置是Dice Loss和Focal Loss按7比3的比例加權(quán)前面50個(gè)epoch用之后把Boundary Loss加進(jìn)去權(quán)重設(shè)為0.3同時(shí)給不同器官類別的Dice Loss按體積倒數(shù)加權(quán)。這個(gè)配比不是從某一篇論文抄的而是針對(duì)不同任務(wù)反復(fù)調(diào)出來的未必適合你的數(shù)據(jù)但可以當(dāng)作一個(gè)起點(diǎn)。具體的訓(xùn)練技巧方面有幾個(gè)坑值得注意。第一醫(yī)學(xué)影像數(shù)據(jù)增強(qiáng)一定不要用太暴力的幾何變換水平翻轉(zhuǎn)和隨機(jī)旋轉(zhuǎn)可以但不要做任意角度旋轉(zhuǎn)因?yàn)榻馄式Y(jié)構(gòu)有固定的方向性肝臟不會(huì)倒著長(zhǎng)。第二彈性形變是醫(yī)學(xué)分割的經(jīng)典增強(qiáng)方式模擬組織變形能明顯提升在跨病人數(shù)據(jù)上的泛化能力。第三如果顯存不夠優(yōu)先減小patch尺寸而不是減小batch sizepatch縮小語(yǔ)義信息受損嚴(yán)重而batch size小一點(diǎn)只是收斂慢效果損失相對(duì)小。5. 論文復(fù)現(xiàn)與訓(xùn)練技巧讓代碼跑出論文指標(biāo)讀論文只是第一步把論文里的方法真正跑起來又是一道坎。我復(fù)現(xiàn)過不下二十篇分割論文經(jīng)驗(yàn)教訓(xùn)不算少這里集中講一講最容易出問題的幾個(gè)環(huán)節(jié)。5.1 復(fù)現(xiàn)前的信息核對(duì)清單拿到一篇論文先別急著跑代碼花二十分鐘把下面幾項(xiàng)核對(duì)清楚。第一訓(xùn)練數(shù)據(jù)是哪個(gè)版本訓(xùn)練集和驗(yàn)證集是否劃分過如果論文用了五折交叉驗(yàn)證你只跑單折直接跟單模型結(jié)果對(duì)比是沒意義的。第二輸入圖像預(yù)處理包括是否歸一化、強(qiáng)度裁剪到哪個(gè)窗寬窗位、有沒有使用類權(quán)重。第三訓(xùn)練時(shí)是否用了多尺度測(cè)試或翻轉(zhuǎn)測(cè)試有些論文的最終結(jié)果依賴測(cè)試時(shí)增強(qiáng)TTA關(guān)掉之后指標(biāo)會(huì)掉兩三個(gè)點(diǎn)。第四訓(xùn)練使用的推理patch尺寸和滑窗步長(zhǎng)推理時(shí)如果patch輸入和訓(xùn)練時(shí)不一致性能也會(huì)波動(dòng)。這四個(gè)信息在很多論文的正文里不會(huì)寫全往往藏在補(bǔ)充材料或者開源代碼的配置里。我的習(xí)慣是直接找代碼倉(cāng)庫(kù)看它的默認(rèn)配置文件和訓(xùn)練腳本寧可多花時(shí)間也不要盲跑。5.2 關(guān)于預(yù)訓(xùn)練權(quán)重的兩難選擇醫(yī)學(xué)圖像分割的模型初始化有兩種常見方式。一是用ImageNet預(yù)訓(xùn)練的分類權(quán)重通用特征提取能力強(qiáng)但醫(yī)學(xué)影像灰度分布和自然圖像差異大底層特征其實(shí)用不太上。二是在同模態(tài)的未標(biāo)注醫(yī)學(xué)數(shù)據(jù)上做自監(jiān)督預(yù)訓(xùn)練特征更貼合醫(yī)學(xué)數(shù)據(jù)但預(yù)訓(xùn)練成本很高不是每個(gè)項(xiàng)目都有算力。我的觀察是對(duì)于2D醫(yī)學(xué)分割比如皮膚鏡圖像、眼底OCT圖像用ImageNet預(yù)訓(xùn)練權(quán)重作為起點(diǎn)效果往往不錯(cuò)因?yàn)槟繕?biāo)結(jié)構(gòu)跟自然圖像里的紋理有一定的可遷移性。對(duì)于3D CT/MRI分割I(lǐng)mageNet預(yù)訓(xùn)練權(quán)重根本用不上因?yàn)檩斎刖S度都不一樣這類任務(wù)通常直接從零開始訓(xùn)練或者用公開模型在大規(guī)模同模態(tài)數(shù)據(jù)上預(yù)訓(xùn)練過的權(quán)重。做項(xiàng)目之前先想清楚輸入數(shù)據(jù)是2D還是3D預(yù)訓(xùn)練策略完全不同。5.3 訓(xùn)練過程最常翻車的三個(gè)環(huán)節(jié)翻車點(diǎn)一學(xué)習(xí)率過大且沒有預(yù)熱。分割模型動(dòng)輒幾千萬(wàn)參數(shù)隨機(jī)初始化后直接以較高的學(xué)習(xí)率訓(xùn)練前幾百步loss不僅不降還會(huì)劇烈震蕩甚至變成NaN。常見的解決方案是先用2到3個(gè)epoch做線性預(yù)熱讓學(xué)習(xí)率從極小值逐步升到正常值再按余弦退火方案逐步衰減。翻車點(diǎn)二驗(yàn)證指標(biāo)和訓(xùn)練loss方向不一致。偶爾會(huì)看到訓(xùn)練Dice Loss穩(wěn)定下降但驗(yàn)證Dice不升反降這是典型的過擬合信號(hào)。解決辦法不是繼續(xù)訓(xùn)練而是加強(qiáng)數(shù)據(jù)增強(qiáng)或加上早停。我一般會(huì)以驗(yàn)證集Dice作為監(jiān)控指標(biāo)連續(xù)15個(gè)epoch不刷新就保存當(dāng)前最優(yōu)模型并停止訓(xùn)練。翻車點(diǎn)三推理和訓(xùn)練時(shí)的操作不一致。最常見的是訓(xùn)練時(shí)做了歸一化和數(shù)據(jù)增強(qiáng)推理時(shí)忘了套用相同的預(yù)處理pipeline或者歸一化統(tǒng)計(jì)量用了batch統(tǒng)計(jì)而不是全數(shù)據(jù)集統(tǒng)計(jì)。找一個(gè)干凈的驗(yàn)證樣本把訓(xùn)練流程和推理流程的前處理輸出對(duì)比一遍這種問題基本都能當(dāng)場(chǎng)發(fā)現(xiàn)。5.4 把nnU-Net當(dāng)作復(fù)現(xiàn)校準(zhǔn)器如果手頭論文的模型跑出來的指標(biāo)比nnU-Net低先別懷疑論文造假先檢查自己是不是哪里有疏漏。nnU-Net是我做醫(yī)學(xué)分割實(shí)驗(yàn)的默認(rèn)基線它的預(yù)處理、訓(xùn)練策略、推理流程全部整理成了規(guī)范模式只要數(shù)據(jù)格式按要求編排好跑出來的Dice就是當(dāng)前數(shù)據(jù)集上一個(gè)相對(duì)公平的參考值。把復(fù)雜模型跟這個(gè)基線對(duì)比能暴露很多問題。比如有的模型在nnU-Net預(yù)處理過的數(shù)據(jù)上指標(biāo)突然就正常了那是因?yàn)閚nU-Net里的強(qiáng)度裁剪和歸一化解決了很多模型對(duì)影像設(shè)備差異的敏感問題換了自己寫的粗糙預(yù)處理就崩了。用nnU-Net的預(yù)處理管線把你的數(shù)據(jù)先期處理一遍再喂給自定義模型能大幅減少因?yàn)轭A(yù)處理差異導(dǎo)致的無效實(shí)驗(yàn)。6. 未來的三個(gè)方向基礎(chǔ)模型、多模態(tài)與文本引導(dǎo)分割方向最近兩年的變化比過去五年都大有些新趨勢(shì)已經(jīng)不只是論文里的概念開始逐漸進(jìn)入實(shí)際項(xiàng)目。這里只講我觀察到的、且真正在落地的三個(gè)方向。6.1 分割基礎(chǔ)模型的沖擊以SAM為代表的提示分割模型興起后“給我?guī)讉€(gè)點(diǎn)或一個(gè)框就能把任意目標(biāo)分割出來”已經(jīng)成了現(xiàn)實(shí)。這類模型在自然圖像上的零樣本分割能力很強(qiáng)但直接拿醫(yī)學(xué)圖像測(cè)試表現(xiàn)并不理想。原因不復(fù)雜醫(yī)學(xué)圖像對(duì)比度低、邊界模糊、結(jié)構(gòu)相對(duì)固定而基礎(chǔ)模型訓(xùn)練數(shù)據(jù)里這類樣本占比很低。不過很多工作已經(jīng)在做醫(yī)學(xué)適配。一種思路是在醫(yī)學(xué)影像數(shù)據(jù)上用指令微調(diào)的方式調(diào)整基礎(chǔ)模型讓它懂得“分割肝臟”“分割腫瘤”這樣的文本指令。另一種思路是把基礎(chǔ)模型當(dāng)成一個(gè)特征提取器用它輸出的嵌入特征來輔助傳統(tǒng)分割模型在邊界模糊的區(qū)域補(bǔ)充上下文信息。這類方法的實(shí)用價(jià)值現(xiàn)在還不好說因?yàn)獒t(yī)學(xué)分割對(duì)精度要求遠(yuǎn)高于自然圖像但方向已經(jīng)明確值得密切關(guān)注。6.2 多模態(tài)大模型帶來的“全模態(tài)”記憶影像組學(xué)和多模態(tài)學(xué)習(xí)的趨勢(shì)是把文本報(bào)告、基因組數(shù)據(jù)、病理切片和影像放在同一個(gè)模型框架里學(xué)習(xí)。這個(gè)方向在醫(yī)學(xué)分割上的應(yīng)用場(chǎng)景主要是解剖結(jié)構(gòu)的語(yǔ)境理解。比如一個(gè)模型同時(shí)閱讀MRI和對(duì)應(yīng)的診斷報(bào)告報(bào)告描述“右側(cè)額葉可見不規(guī)則強(qiáng)化灶”模型在后續(xù)分割時(shí)就能對(duì)位置和形態(tài)有先驗(yàn)預(yù)期。這類方法的工程實(shí)現(xiàn)難度不小最大的瓶頸是醫(yī)學(xué)多模態(tài)數(shù)據(jù)的配對(duì)很難獲取報(bào)告和影像標(biāo)注往往來自不同的系統(tǒng)清洗和配準(zhǔn)的成本很高。但一旦打通對(duì)邊界模糊病灶分割的提升潛力很大是一個(gè)理論與實(shí)際都很有吸引力的方向。6.3 無監(jiān)督與自監(jiān)督分割真正開始實(shí)用化半監(jiān)督和自監(jiān)督從論文走向了工程原因很現(xiàn)實(shí)醫(yī)學(xué)大數(shù)據(jù)里標(biāo)注比例不足百分之一能自動(dòng)利用未標(biāo)注數(shù)據(jù)的模型就是降本增效的直接工具。目前比較實(shí)用的是兩類一類是通過對(duì)比學(xué)習(xí)讓模型學(xué)到不同掃描儀下同一結(jié)構(gòu)的穩(wěn)定表征模型對(duì)這個(gè)域差異不再敏感另一類是基于偽標(biāo)簽的自訓(xùn)練方法先在少量標(biāo)注數(shù)據(jù)上訓(xùn)練對(duì)大量無標(biāo)注數(shù)據(jù)預(yù)測(cè)并篩選高置信度樣本加入訓(xùn)練集迭代幾輪。這類方法在項(xiàng)目里的實(shí)施難點(diǎn)不在算法而在流程設(shè)計(jì)。偽標(biāo)簽篩選的閾值怎么定、每次新增樣本量多少、怎么防止錯(cuò)誤標(biāo)簽污染訓(xùn)練集這些都需要工程經(jīng)驗(yàn)。我的建議是先在同一個(gè)數(shù)據(jù)源內(nèi)部驗(yàn)證增益再考慮跨中心跨設(shè)備的場(chǎng)景不要一上來就挑戰(zhàn)高難度的域泛化問題。做分割方向的論文解讀本質(zhì)上是在建立自己的一套坐標(biāo)系。先弄懂通用分割的主線脈絡(luò)再理解醫(yī)學(xué)分割的特殊約束然后針對(duì)具體問題選擇合適的模型結(jié)構(gòu)和損失策略最后用標(biāo)準(zhǔn)化的基線工具去驗(yàn)證——這條路徑我能走通我相信你也可以。如果剛開始建議直接從復(fù)現(xiàn)U-Net和nnU-Net入手把損失函數(shù)和訓(xùn)練流程跑熟再逐步擴(kuò)展到Transformer、Mamba這些新結(jié)構(gòu)脈絡(luò)自然就清楚了。