国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

nnUNet保姆級使用教程!從環(huán)境配置到訓(xùn)練與推理(新手必看)

這篇具有很好參考價值的文章主要介紹了nnUNet保姆級使用教程!從環(huán)境配置到訓(xùn)練與推理(新手必看)。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報違法"按鈕提交疑問。


寫在前面

本人初步接觸深度學(xué)習(xí)與醫(yī)學(xué)圖像分割領(lǐng)域,第一個項(xiàng)目就是運(yùn)用nnUNet網(wǎng)絡(luò)對BrainTumour的數(shù)據(jù)集進(jìn)行分割,在學(xué)習(xí)的過程中,學(xué)了很多資料,踩了很多坑,也解決了很多bug,在此把自己的學(xué)習(xí)經(jīng)驗(yàn)分享出來,希望有需要的同學(xué)可以少走一些彎路。

本篇博客的操作均在服務(wù)器的linux系統(tǒng)(Ubuntu)上進(jìn)行。作者的建議也是使用linux系統(tǒng)。

本篇文章使用的數(shù)據(jù)集為Medical Segmentation Decathlon比賽的Task01_BrainTumour數(shù)據(jù)集,如果你想訓(xùn)練自己的數(shù)據(jù)集,請參考我的另一篇博客。
抱歉,今年一直忙著競賽和保研,現(xiàn)在有時間寫了,但是nnUNet v2已經(jīng)發(fā)布,關(guān)于v1的教程就有些沒必要了,大家可以自行研究v2,歡迎在評論區(qū)或私信交流!

才疏學(xué)淺,如有錯誤,歡迎批評指正??!


nnUNet是什么?

nnU-Net是由德國癌癥研究中心、海德堡大學(xué)以及海德堡大學(xué)醫(yī)院研究人員(Fabian Isensee, Jens Petersen, Andre Klein)提出來的一個自適應(yīng)任何新數(shù)據(jù)集的醫(yī)學(xué)影像分割框架,該框架能根據(jù)給定數(shù)據(jù)集的屬性自動調(diào)整所有超參數(shù),整個過程無需人工干預(yù)。僅僅依賴于樸素的U-Net結(jié)構(gòu)(就是原始U-Net)和魯棒的訓(xùn)練方案,nnU-Net在六個得到公認(rèn)的分割挑戰(zhàn)中實(shí)現(xiàn)了最先進(jìn)的性能。

  • 關(guān)于nnUNet,如果你想更加深入的了解,我推薦看一下這篇博客論文解讀- nnU-Net: Self-adapting Framework for U-Net-Based Medical Image Segmentation(附實(shí)現(xiàn)教程)_Tina姐的博客-CSDN博客,是比較概括性的講解,更深入的學(xué)習(xí)還是建議精讀論文

一、配置虛擬環(huán)境

首先,我們想實(shí)現(xiàn)nnUNet的使用,需要配置類似如下的環(huán)境:

nnunet,nnU-Net,python,深度學(xué)習(xí),pytorch,人工智能,ubuntu

  • 上圖所示為nnUNet的官方readme文檔建議的環(huán)境配置,如果你對cuda,cudnn,torch之類的詞語還不算熟悉,可以看一下我的另一篇博客用人話講解深度學(xué)習(xí)中CUDA,cudatookit,cudnn和pytorch的關(guān)系_江江ahh的博客-CSDN博客

  • 至于為什么要在虛擬環(huán)境中安裝nnUNet,當(dāng)我們在安裝包的時候,pip install django安裝一個包會附帶安裝數(shù)個其他關(guān)聯(lián)的包。但是當(dāng)我們刪除這個包的時候,我們之后僅僅刪除這一個包,安裝時附帶的其他包并不會刪除。**簡單來說,當(dāng)我們的環(huán)境使用時間長的時候,我們的包是很難進(jìn)行管理的。**所以非常建議在一個全新的虛擬環(huán)境中來完成接下來的操作?。?!

  • 如果你對虛擬環(huán)境還比較陌生,建議看一下這位大佬的視頻安裝不算完事,只有理解了虛擬環(huán)境才算真正掌握 Python 環(huán)境_嗶哩嗶哩_bilibili

  • 當(dāng)你了解虛擬環(huán)境的作用以后,可以參考我的另一篇博客來配置nnUNet所需的環(huán)境在conda虛擬環(huán)境中配置cuda+cudnn+pytorch深度學(xué)習(xí)環(huán)境(新手必看!簡單可行?。江江ahh的博客-CSDN博客_在虛擬環(huán)境中安裝cuda


二、安裝nnUNet框架

此時,你應(yīng)該已經(jīng)配置好了自己的虛擬環(huán)境并且可以打印出類似上圖的環(huán)境版本(可以更高,但最好不要太低),注意,后續(xù)的操作均要在你激活你想要使用的那個虛擬環(huán)境的前提下進(jìn)行?。。。?/strong>

1.安裝nnUNet

根據(jù)readme文檔,這里應(yīng)該有兩種方案可供選擇

(1)用作標(biāo)準(zhǔn)化基線、開箱即用的分割算法或使用預(yù)訓(xùn)練模型進(jìn)行推理:

pip install nnunet

(2)用作集成框架(這將在您的計算機(jī)上創(chuàng)建nnU-Net代碼的副本,以便您可以根據(jù)需要對其進(jìn)行修改)

你想把nnUNet的文件夾放在哪,就在哪個路徑下運(yùn)行這些命令!

git clone https://github.com/MIC-DKFZ/nnUNet.git
cd nnUNet
pip install -e .#最后這個點(diǎn)也不能忽略

對于我來說,因?yàn)槲液罄m(xù)是要改網(wǎng)絡(luò)代碼的,所以我選擇第二種方法,下面詳細(xì)說明一下這三行命令都是什么意思:

git clone其實(shí)就是把人家github上的代碼克隆過來,這一步其實(shí)和直接復(fù)制粘貼代碼文件是一樣的,總共也就1Mb

cd nnUNet不用說了,就是進(jìn)入文件夾

其實(shí)這個時候就已經(jīng)有一個nnUNet完整的文件夾了,里面包含這些東西:

nnunet,nnU-Net,python,深度學(xué)習(xí),pytorch,人工智能,ubuntu

最后pip install -e .相當(dāng)于python setup.py,也就是運(yùn)行上圖這個setup.py文件

這個文件是用來干什么的呢?

  1. 安裝nnUNet需要的python包
  2. 向終端添加幾個新命令。這些命令用于運(yùn)行整個nnU-Net pipeline。您可以從系統(tǒng)上的任何位置執(zhí)行它們。所有nnU-Net命令都帶有前綴“nnUNet_”,以便于識別。
這一步我遇到的兩個問題:

(1)從github上git clone代碼的時候速度慢的離譜(20kb/s),這個問題主要是github的域名在國內(nèi)被限制了,網(wǎng)上有很多方法解決,比如下面這個網(wǎng)址可以參考https://www.jianshu.com/p/d58ab49ba98b/

(2)運(yùn)行pip命令的時候速度很慢,這個問題導(dǎo)致我運(yùn)行pip install -e .的時候超時報錯了,同樣給出解決方法的鏈接解決Linux,Ubuntu下使用python包管理工具pip命令安裝和下載包速度很慢、失敗或者connection timeout等問題_一點(diǎn)兒也不萌的萌萌的博客-CSDN博客_linux 下載python failed: connection timed out.

2.安裝隱藏層hiddenlayer(可選)

隱藏層使nnU-net能夠給出其生成的網(wǎng)絡(luò)拓?fù)鋱D(后面會細(xì)說),安裝命令如下(這是一整行命令,請務(wù)必一起復(fù)制粘貼)

pip install --upgrade git+https://github.com/FabianIsensee/hiddenlayer.git@more_plotted_details#egg=hiddenlayer

這里我遇到的唯一問題就是上面說的pip命令速度太慢,也是根據(jù)上述解決方案來解決的。


三、數(shù)據(jù)集準(zhǔn)備

nnUNet對于你要訓(xùn)練的數(shù)據(jù)是有嚴(yán)格要求的,這第一點(diǎn)就體現(xiàn)在我們保存數(shù)據(jù)的路徑上,請初學(xué)者務(wù)必按照我下面的樣式來創(chuàng)建相應(yīng)的文件夾并存入數(shù)據(jù)!?。?/h5>

? 第一步:你現(xiàn)在應(yīng)該有一個名為nnUNet的文件夾(上面有圖),進(jìn)入它,在里面創(chuàng)建一個名為nnUNetFrame的文件夾

nnunet,nnU-Net,python,深度學(xué)習(xí),pytorch,人工智能,ubuntu

? 第二步:在nnUNetFrame文件夾中創(chuàng)建一個名為DATASET的文件夾,后面我們會用它來存放數(shù)據(jù)

nnunet,nnU-Net,python,深度學(xué)習(xí),pytorch,人工智能,ubuntu

? 第三步:在DATASET文件夾中創(chuàng)建三個文件夾,它們分別是nnUNet_raw,nnUNet_preprocessed,nnUNet_trained_models

nnunet,nnU-Net,python,深度學(xué)習(xí),pytorch,人工智能,ubuntu

? 第四步:進(jìn)入上面第二個文件夾nnUNet_raw,創(chuàng)建nnUNet_cropped_data文件夾和nnUNet_raw_data文件夾,右邊存放原始數(shù)據(jù),左邊存放crop以后的數(shù)據(jù)。

nnunet,nnU-Net,python,深度學(xué)習(xí),pytorch,人工智能,ubuntu

? 第五步:進(jìn)入右邊文件夾nnUNet_raw_data,創(chuàng)建一個名為Task01_BrainTumour的文件夾(解釋:這個Task01_BrainTumour是nnUNet的作者參加的一個十項(xiàng)全能競賽的子任務(wù)名,也是我要實(shí)踐的分割任務(wù),類似的還有Task02_Heart,就是分割心臟的。如果你想分割自己的數(shù)據(jù)集,建議Task_id從500開始,這樣以確保不會與nnUNet的預(yù)訓(xùn)練模型發(fā)生沖突(ID不能超過999))

? 第六步:將下載好的公開數(shù)據(jù)集或者自己的數(shù)據(jù)集放在上面創(chuàng)建好的任務(wù)文件夾下,下面還以Task01_BrainTumour競賽為例,解釋下數(shù)據(jù)應(yīng)該怎么存放和編輯:

  1. 進(jìn)入這個網(wǎng)站http://medicaldecathlon.com/.下載對應(yīng)的數(shù)據(jù)集(<–網(wǎng)上學(xué)科議建<–),取代上面你自己創(chuàng)建的Task01_BrainTumour文件夾。
  2. 你會發(fā)現(xiàn)目錄是這個樣子的:json文件是對三個文件夾內(nèi)容的字典呈現(xiàn)(關(guān)乎你的訓(xùn)練),imagesTr是你的訓(xùn)練數(shù)據(jù)集,打開后你會發(fā)現(xiàn)很多的有序的nii.gz的訓(xùn)練文件,而labelsTr里時對應(yīng)這個imagesTr的標(biāo)簽文件,同樣為nii.gz。目前只能是nii.gz文件,nii文件都不行。訓(xùn)練階段的imageTs文件夾先不管,其實(shí)這個文件夾出現(xiàn)在任何位置都可以。(解釋:nnUNet使用的是五折交叉驗(yàn)證,并沒有驗(yàn)證集)

nnunet,nnU-Net,python,深度學(xué)習(xí),pytorch,人工智能,ubuntu


四、設(shè)置nnUNet讀取文件的路徑

nnUNet是如何知道你的文件存放在哪兒呢,當(dāng)然要在環(huán)境中創(chuàng)建一個路徑,這個路徑你唯一需要更改的是/nnUNet之前的路徑,因?yàn)楹竺娴穆窂侥愫臀沂且粯拥摹?br> 第一步:在home目錄下按ctrl + h,顯示隱藏文件
第二步:找到.bashrc文件,打開
第三步:在文檔末尾添加下面三行,保存文件。

export nnUNet_raw_data_base="/home/work/nnUNet/nnUNetFrame/DATASET/nnUNet_raw"
export nnUNet_preprocessed="/home/work/nnUNet/nnUNetFrame/DATASET/nnUNet_preprocessed"
export RESULTS_FOLDER="/home/work/nnUNet/nnUNetFrame/DATASET/nnUNet_trained_models"

? 第四步:在home下打開終端,輸入source .bashrc來更新該文檔

現(xiàn)在nnUNet已經(jīng)知道怎么讀取你的文件了。


五、數(shù)據(jù)集轉(zhuǎn)換

1.數(shù)據(jù)集轉(zhuǎn)換是什么,為什么要進(jìn)行數(shù)據(jù)集轉(zhuǎn)換?

nnUNet要求將原始數(shù)據(jù)轉(zhuǎn)換成特定的格式,以便了解如何讀取和解釋數(shù)據(jù)。

每個分割數(shù)據(jù)集存儲為單獨(dú)的“任務(wù)”。命名包括任務(wù)與任務(wù)ID,即三位整數(shù)和相關(guān)聯(lián)的任務(wù)名稱。

比如Task001_BrainTumour的任務(wù)名稱為“腦瘤”,任務(wù)ID為1。

在每個任務(wù)文件夾中,預(yù)期的結(jié)構(gòu)如下:

Task001_BrainTumour/
├── dataset.json
├── imagesTr
├── (imagesTs)
└── labelsTr

圖像可能具有多種模態(tài),這對于醫(yī)學(xué)圖像來說尤其常見。

nnU-Net通過其后綴(文件名末尾的四位整數(shù))識別成像模態(tài)。因此,圖像文件必須遵循以下命名約定:case_identifier_XXXX.nii.gz。

這里,XXXX是模態(tài)標(biāo)識符。dataset.json文件中指定了這些標(biāo)識符所屬的模態(tài)。

標(biāo)簽文件保存為case_identifier.nii.gz

此命名方案產(chǎn)生以下文件夾結(jié)構(gòu)。用戶有責(zé)任將其數(shù)據(jù)轉(zhuǎn)換為這種格式!

下面是MSD的第一個任務(wù)的示例:BrainTumor。每個圖像有四種模態(tài):FLAIR(0000)、T1w(0001)、T1gd(0002)和T2w(0003)。請注意,imagesTs文件夾是可選的,不必存在。

nnUNet_raw_data_base/nnUNet_raw_data/Task001_BrainTumour/
├── dataset.json
├── imagesTr
│   ├── BRATS_001_0000.nii.gz
│   ├── BRATS_001_0001.nii.gz
│   ├── BRATS_001_0002.nii.gz
│   ├── BRATS_001_0003.nii.gz
│   ├── BRATS_002_0000.nii.gz
│   ├── BRATS_002_0001.nii.gz
│   ├── BRATS_002_0002.nii.gz
│   ├── BRATS_002_0003.nii.gz
│   ├── BRATS_003_0000.nii.gz
│   ├── BRATS_003_0001.nii.gz
│   ├── BRATS_003_0002.nii.gz
│   ├── BRATS_003_0003.nii.gz
│   ├── BRATS_004_0000.nii.gz
│   ├── BRATS_004_0001.nii.gz
│   ├── BRATS_004_0002.nii.gz
│   ├── BRATS_004_0003.nii.gz
│   ├── ...
├── imagesTs
│   ├── BRATS_485_0000.nii.gz
│   ├── BRATS_485_0001.nii.gz
│   ├── BRATS_485_0002.nii.gz
│   ├── BRATS_485_0003.nii.gz
│   ├── BRATS_486_0000.nii.gz
│   ├── BRATS_486_0001.nii.gz
│   ├── BRATS_486_0002.nii.gz
│   ├── BRATS_486_0003.nii.gz
│   ├── BRATS_487_0000.nii.gz
│   ├── BRATS_487_0001.nii.gz
│   ├── BRATS_487_0002.nii.gz
│   ├── BRATS_487_0003.nii.gz
│   ├── BRATS_488_0000.nii.gz
│   ├── BRATS_488_0001.nii.gz
│   ├── BRATS_488_0002.nii.gz
│   ├── BRATS_488_0003.nii.gz
│   ├── BRATS_489_0000.nii.gz
│   ├── BRATS_489_0001.nii.gz
│   ├── BRATS_489_0002.nii.gz
│   ├── BRATS_489_0003.nii.gz
│   ├── ...
└── labelsTr
    ├── BRATS_001.nii.gz
    ├── BRATS_002.nii.gz
    ├── BRATS_003.nii.gz
    ├── BRATS_004.nii.gz
    ├── ...

如果對于數(shù)據(jù)集轉(zhuǎn)換這件事還是不明白,打開你的nnUNet文件夾,在/nnUNet/documentation/文件夾下找到dataset_conversion這個文件來進(jìn)一步學(xué)習(xí)。

2.運(yùn)行數(shù)據(jù)集轉(zhuǎn)換的命令

依舊以Task01_BrainTumour為例:

nnUNet_convert_decathlon_task -i /home/work/nnUNet/nnUNetFrame/DATASET/nnUNet_raw/nnUNet_raw_data/Task01_BrainTumour

轉(zhuǎn)換操作完成以后,你會發(fā)現(xiàn)在你的Task01_BrainTumour文件夾旁邊,出現(xiàn)了一個Task001_BrainTumour文件夾,打開看一下,里面的格式應(yīng)該和我上面展示的一樣。

3.關(guān)于dataset.json文件

這個文件包含你的訓(xùn)練數(shù)據(jù)信息和任務(wù)信息,如果你按照我的建議下載了Task01的數(shù)據(jù)集,那里面是包含dataset.json文件的,如果你有訓(xùn)練自己的數(shù)據(jù)集的需求,在我的另一篇博客里會有詳細(xì)的說明。

nnunet,nnU-Net,python,深度學(xué)習(xí),pytorch,人工智能,ubuntu


六、數(shù)據(jù)預(yù)處理

nnUNet_plan_and_preprocess -t 1 --verify_dataset_integrity

只需要一行命令,因?yàn)槲覀兊腡ask_id是1,所以這里的數(shù)字就是1。這個過程會消耗很多的時間,速度慢的原因在于對要進(jìn)行插值等各種操作。

根據(jù)nnUNet框架,三維醫(yī)學(xué)圖像分割的通用預(yù)處理可以分為四步,分別是數(shù)據(jù)格式的轉(zhuǎn)換,裁剪crop,重采樣resample以及標(biāo)準(zhǔn)化normalization。如果你想進(jìn)一步學(xué)習(xí),推薦學(xué)習(xí)這篇文章如何針對三維醫(yī)學(xué)圖像分割任務(wù)進(jìn)行通用數(shù)據(jù)預(yù)處理:nnUNet中預(yù)處理流程總結(jié)及代碼分析 - 知乎 (zhihu.com)

運(yùn)行“nnUNet_plan_and_preprocess”將使用預(yù)處理數(shù)據(jù)填充文件夾。

我們將在nnUNet_preprocessed/Task001_BrainTumour中找到這條命令的輸出結(jié)果。使用2D U-Net以及所有適用的3D U-Net的預(yù)處理數(shù)據(jù)創(chuàng)建子文件夾。它還將為2D和3D配置創(chuàng)建“plans”文件(結(jié)尾為.pkl)。這些文件包含生成的分割 pipeline 配置,將由nnUNetTrainer讀?。ㄒ娤挛模?。請注意,預(yù)處理的數(shù)據(jù)文件夾僅包含訓(xùn)練案例。測試圖像沒有經(jīng)過預(yù)處理。測試集的預(yù)處理將會在推理過程中實(shí)時進(jìn)行。

nnunet,nnU-Net,python,深度學(xué)習(xí),pytorch,人工智能,ubuntu

另外,`–verify_dataset_integrity”應(yīng)至少在給定數(shù)據(jù)集上首次運(yùn)行命令時運(yùn)行。這將對數(shù)據(jù)集執(zhí)行一些檢查,以確保其與nnU-Net兼容。如果此檢查通過一次,則可以在以后的運(yùn)行中省略。如果您遵守數(shù)據(jù)集轉(zhuǎn)換指南(請參見上文),那么這條命令一定會通過的。


七、模型訓(xùn)練

1.寫在訓(xùn)練前:更改epoch

nnUNet默認(rèn)原始的epoch是1000,這太久了,我們打開nnUNet/nnunet/training/network_training/nnUNetTrainerV2.py

第48行的max_epoch來修改epoch

nnunet,nnU-Net,python,深度學(xué)習(xí),pytorch,人工智能,ubuntu

2.關(guān)于訓(xùn)練的運(yùn)行命令

nnU-Net在5倍交叉驗(yàn)證中訓(xùn)練所有U-Net配置。這使nnU-Net能夠確定訓(xùn)練數(shù)據(jù)集的后處理和集合(參見下文)。

如果你不清楚什么是K折交叉驗(yàn)證,可以學(xué)習(xí)這篇博客【技術(shù)分享】什么是K折交叉驗(yàn)證?_AISec鹽究員的博客-CSDN博客_k折交叉驗(yàn)證

我們在數(shù)據(jù)預(yù)處理那一步的時候創(chuàng)建了三個U-Net配置:2D U-Net、對全分辨率圖像進(jìn)行操作的3D U-Net以及3D U-Net級聯(lián),其中級聯(lián)的第一個U-Net在下采樣圖像中創(chuàng)建粗分割圖,然后由第二個U-Net進(jìn)行細(xì)化。我們在訓(xùn)練的時候可以自由選用它們。

訓(xùn)練模型使用“nnUNet_train”命令完成。命令的一般結(jié)構(gòu)為

nnUNet_train CONFIGURATION TRAINER_CLASS_NAME TASK_NAME_OR_ID FOLD  --npz (additional options)
  1. CONFIGURATION是一個字符串,用于標(biāo)識所請求的U-Net配置。
  2. TRAINER_CLASS_NAME是model trainer的名稱。如果您實(shí)施定制trainers(nnU-Net作為一個框架),您可以在此處指定您的定制trainers。
  3. TASK_NAME_OR_ID指定應(yīng)訓(xùn)練的數(shù)據(jù)集,F(xiàn)OLD指定訓(xùn)練的是5倍交叉驗(yàn)證的哪一倍。
  4. “–npz”使模型在最終驗(yàn)證期間保存softmax輸出。它僅適用于計劃在之后運(yùn)行“nnUNet_find_best_configuration”的訓(xùn)練
    (這是nnU Nets自動選擇最佳性能(集合)配置,見下文)。
對于我們的Task01來說,應(yīng)該運(yùn)行的命令如下
nnUNet_train 3d_fullres nnUNetTrainerV2 1 0 --npz
  • 3d_fullres代表我們選用對全分辨率圖像進(jìn)行操作的3D U-Net
  • nnUNetTrainerV2是我們選用的訓(xùn)練器
  • 1代表你的任務(wù)ID
  • 0代表五折交叉驗(yàn)證中的第0折
下面給出各種配置的nnUNet網(wǎng)絡(luò)需要的訓(xùn)練命令

2D U-Net

For FOLD in [0, 1, 2, 3, 4], run:

nnUNet_train 2d nnUNetTrainerV2 TaskXXX_MYTASK FOLD --npz

3D full resolution U-Net 3D全分辨率U-Net

For FOLD in [0, 1, 2, 3, 4], run:

nnUNet_train 3d_fullres nnUNetTrainerV2 TaskXXX_MYTASK FOLD --npz

3D U-Net cascade 3D U-net級聯(lián)

①3D low resolution U-Net

For FOLD in [0, 1, 2, 3, 4], run:

nnUNet_train 3d_lowres nnUNetTrainerV2 TaskXXX_MYTASK FOLD --npz

②3D full resolution U-Net

For FOLD in [0, 1, 2, 3, 4], run:

nnUNet_train 3d_cascade_fullres nnUNetTrainerV2CascadeFullRes TaskXXX_MYTASK FOLD --npz

注意,級聯(lián)的3D全分辨率U-Net需要預(yù)先完成低分辨率U-Net的five folds!

3.訓(xùn)練結(jié)果

訓(xùn)練后的模型將寫入RESULTS_FOLDER/nnUNet文件夾。對于我們的項(xiàng)目來說,就是會存在/home/work/nnUNet/nnUNetFrame/DATASET/nnUNet_trained_models/nnUNet這個路徑下。

每次訓(xùn)練都會獲得一個自動生成的輸出文件夾名稱,根據(jù)我們的訓(xùn)練配置,我們會得到3d_fullres/Task001_BrainTumour這個文件夾。關(guān)于它的樹狀圖如下(為簡潔起見,有些文件僅在一個文件夾下詳細(xì)展開):

RESULTS_FOLDER/nnUNet/
├── 2d
│   └── Task001_BrainTumour
│       └── nnUNetTrainerV2__nnUNetPlansv2.1
│           ├── fold_0
│           ├── fold_1
│           ├── fold_2
│           ├── fold_3
│           └── fold_4
├── 3d_cascade_fullres
├── 3d_fullres
│   └── Task001_BrainTumour
│       └── nnUNetTrainerV2__nnUNetPlansv2.1
│           ├── fold_0
│           │   ├── debug.json
│           │   ├── model_best.model
│           │   ├── model_best.model.pkl
│           │   ├── model_final_checkpoint.model
│           │   ├── model_final_checkpoint.model.pkl
│           │   ├── network_architecture.pdf
│           │   ├── progress.png
│           │   └── validation_raw
│           │       ├── BRATS_010.nii.gz
│           │       ├── BRATS_010.pkl
│           │       ├── BRATS_018.nii.gz
│           │       ├── BRATS_018.pkl
│           │       ├── summary.json
│           │       └── validation_args.json
│           ├── fold_1
│           ├── fold_2
│           ├── fold_3
│           └── fold_4
└── 3d_lowres

如果你的訓(xùn)練成功了,應(yīng)該會得到和我下圖一樣的結(jié)果

nnunet,nnU-Net,python,深度學(xué)習(xí),pytorch,人工智能,ubuntu

下面詳細(xì)講講這些訓(xùn)練后得到的文件都是什么
  • debug.json:包含用于訓(xùn)練此模型的藍(lán)圖和推斷參數(shù)的摘要。不容易閱讀,但對調(diào)試非常有用。

  • model_best.model/model_best.model.pkl:訓(xùn)練期間識別的最佳模型的檢查點(diǎn)文件。

  • model_final_checkpoint.model/model_final_checkpoint.model.pkl:最終模型的檢查點(diǎn)文件(訓(xùn)練結(jié)束后)。這是用于驗(yàn)證和推理的。

  • networkarchitecture.pdf(僅當(dāng)安裝了hiddenlayer時?。阂粋€pdf文檔,其中包含網(wǎng)絡(luò)架構(gòu)圖。

  • progress.png:訓(xùn)練期間訓(xùn)練(藍(lán)色)和驗(yàn)證(紅色)損失的圖。還顯示了評估指標(biāo)的近似值(綠色)。這個近似值是前景類的平均Dice分?jǐn)?shù)。

  • validation_raw:在這個文件夾中是訓(xùn)練完成后預(yù)測的驗(yàn)證案例。summary.json包含驗(yàn)證度量(文件末尾提供了所有情況的平均值)。

  • training_log:訓(xùn)練過程中不斷打印,nnunet的loss函數(shù)默認(rèn)是趨向-1的,也就是說在訓(xùn)練的過程中,我們通過每輪訓(xùn)練的日志可以查看到每輪的loss函數(shù),這個數(shù)值應(yīng)該是負(fù)數(shù),而且越趨向于-1,效果越好。

現(xiàn)在我們想看看我們訓(xùn)練的結(jié)果怎么樣,有兩種方法:

? 第一種是打開progress.png來從圖像上直觀的感受一下,它大概長這樣:

nnunet,nnU-Net,python,深度學(xué)習(xí),pytorch,人工智能,ubuntu

? 第二種是打開validation_raw/summary.json,從里面我們不僅可以看到對每一個驗(yàn)證數(shù)據(jù)的評價,更可以在最末尾看到它們的平均值。

這里我們主要關(guān)注這個Dice分?jǐn)?shù),之前說到了腦瘤數(shù)據(jù)集分為四個模態(tài),而labels的數(shù)量也是4(參見dataset.json):

"labels": { 
 "0": "background", 
 "1": "edema",
 "2": "non-enhancing tumor",
 "3": "enhancing tumour"

包含背景在內(nèi)的4個標(biāo)簽,分別是背景、壞疽(NET,non-enhancing tumor)、浮腫區(qū)域(ED,peritumoral edema)、增強(qiáng)腫瘤區(qū)域(ET,enhancing tumor),如下圖,它們的平均dice分?jǐn)?shù)約為0.9994,0.8770,0.7780,0.8728

nnunet,nnU-Net,python,深度學(xué)習(xí),pytorch,人工智能,ubuntu


八、確定最佳U-Net配置

本文只說明了3d_fullres的訓(xùn)練,完整的nnUNet流程還需要跑2d和3d級聯(lián)的,然后進(jìn)行三種的擇優(yōu)。不過從實(shí)際性能來說,一般3d級聯(lián)≥3d>2d,是否跑其他兩種需要自己考慮。

訓(xùn)練完所有模型后,使用以下命令自動確定用于測試集預(yù)測的U-Net配置:

nnUNet_find_best_configuration -m 2d 3d_fullres 3d_lowres 3d_cascade_fullres -t 1
  1. 所有指定配置都需要完成所有的5折訓(xùn)練!
  2. 對于未配置級聯(lián)的數(shù)據(jù)集,請改用“-m 2d 3d_fullres”。如果您只想探索配置的某些子集,可以使用“-m”命令指定。

所以說,如果你訓(xùn)練完所有模型,才可以使用這一步,如果沒有,那可以直接推理


九、運(yùn)行推理

1.準(zhǔn)備測試集

讓我們回到你剛剛做好數(shù)據(jù)集轉(zhuǎn)換的那個數(shù)據(jù)集:/home/work/nnUNet/nnUNetFrame/DATASET/nnUNet_raw/nnUNet_raw_data/Task001_BrainTumour,在里面創(chuàng)建inferTs這個文件夾,用于存放待推理測試集的推理結(jié)果。然后,我會選擇將原本的imagesTs重命名為imagesTs0,它是我們下載數(shù)據(jù)集時給我們的幾十個測試集,然后新建一個imagesTs,里面只放一個測試集。(解釋:這個道理其實(shí)很明顯,推理太多數(shù)據(jù)集太久了,先用一個試試)

nnunet,nnU-Net,python,深度學(xué)習(xí),pytorch,人工智能,ubuntu

這個時候我們在imagesTs里存放的待推理的測試集,它的格式應(yīng)該是經(jīng)過數(shù)據(jù)集轉(zhuǎn)換那一步的格式,忘記了的話可以翻上去看一下,如下圖所示,四個模態(tài)都要有,且重命名過:

nnunet,nnU-Net,python,深度學(xué)習(xí),pytorch,人工智能,ubuntu

2.運(yùn)行推理的最簡單方法是簡單地使用下面這一條命令:

nnUNet_predict -i 要預(yù)測數(shù)據(jù)的文件夾路徑 -o 輸出文件夾路徑 -t 1 -m 3d_fullres -f 0

對于我們這個項(xiàng)目,它就應(yīng)該是:

nnUNet_predict -i /home/work/nnUNet/nnUNetFrame/DATASET/nnUNet_raw/nnUNet_raw_data/Task001_BrainTumour/imagesTs/ -o /home/work/nnUNet/nnUNetFrame/DATASET/nnUNet_raw/nnUNet_raw_data/Task001_BrainTumour/inferTs -t 1 -m 3d_fullres -f 0

你會在inferTs里得到模型生成的預(yù)測結(jié)果

nnunet,nnU-Net,python,深度學(xué)習(xí),pytorch,人工智能,ubuntu

3.如果你想集成多個模型的推理結(jié)果

如果你已經(jīng)訓(xùn)練出了多個模型,并且像上一步一樣進(jìn)行了推理,現(xiàn)在你想集成它們的推理結(jié)果,首先需要在上面的命令后面加入“–save_npz”。`–save_npz”將使命令保存softmax概率以及需要大量磁盤空間的預(yù)測分割掩碼。

然后請為每個配置選擇單獨(dú)的“OUTPUT_FOLDER”!

最后使用以下命令集合來自多個配置的預(yù)測:

nnUNet_ensemble -f FOLDER1 FOLDER2 ... -o OUTPUT_FOLDER -pp POSTPROCESSING_FILE

您可以指定任意數(shù)量的文件夾,但請記住,每個文件夾都需要包含由“nnUNet_predict”生成的npz文件。對于集成,還可以指定一個文件,告訴命令如何進(jìn)行后處理。
這些文件是在運(yùn)行“nnUNet_find_best_configuration”時創(chuàng)建的,位于相應(yīng)的訓(xùn)練模型目錄中(RESULTS_FOLDER/nnUNet/CONFIGURATION/TaskXXX_MYTASK/TRAINER_CLASS_NAMEPLANS_FILE_IDENTIFIER/postprocessing.json or
RESULTS_FOLDER/nnUNet/ensembles/TaskXXX_MYTASK/ensemble_XYZ–XY__Z/postprocessing.json).

您也可以選擇不提供文件(只需省略-pp),nnU-Net將不會運(yùn)行后處理。
因此,在運(yùn)行集成推理之前,必須對所有5個折進(jìn)行訓(xùn)練。在推理開始時,將打印找到的可用的nnU-Net folds列表。


十、評估推理結(jié)果

依舊是一行命令完成

nnUNet_evaluate_folder -ref 金標(biāo)準(zhǔn)文件夾 -pred 預(yù)測結(jié)果文件夾 -l 1 2 3

-l 表示要計算的label的類別,正常就是背景-0腫瘤-1,所以設(shè)置1,如果有兩類就是 -l 1 2,以此類推,所以我們這里是1 2 3
這個是nnUNet自帶的評估命令,計算分割DSC,可以不用這個,另寫代碼去算需要的評估指標(biāo)即可

我在相應(yīng)路徑下創(chuàng)建了seg_0文件夾和seg_p文件夾,分別用來存放金標(biāo)準(zhǔn)和預(yù)測結(jié)果

nnunet,nnU-Net,python,深度學(xué)習(xí),pytorch,人工智能,ubuntu

運(yùn)行如下命令

nnUNet_evaluate_folder -ref /home/work/nnUNet/nnUNetFrame/DATASET/nnUNet_raw/nnUNet_raw_data/Task001_BrainTumour/seg_0 -pred /home/work/nnUNet/nnUNetFrame/DATASET/nnUNet_raw/nnUNet_raw_data/Task001_BrainTumour/seg_p -l 1 2 3

在seg_p文件夾中,我們會得到和訓(xùn)練結(jié)果文件夾里validation_raw/summary.json一樣格式的summary.json文件,它包含了每一個評估數(shù)據(jù)的指標(biāo),文檔末尾是其平均值。


參考資料

https://blog.csdn.net/u014264373/article/details/116792649

(四:2020.07.28)nnUNet最舒服的訓(xùn)練教程(讓我的奶奶也會用nnUNet(上))(21.04.20更新)_花卷湯圓的博客-CSDN博客_nnuet

(五:2020.07.31)nnUNet最簡單的推理教程(讓我的奶奶也會用nnUNet(下))_花卷湯圓的博客-CSDN博客_nnunet推理

醫(yī)學(xué)圖像分割 3D nnUNet全流程快速實(shí)現(xiàn)_打南邊來了個阿楠的博客-CSDN博客

論文解讀- nnU-Net: Self-adapting Framework for U-Net-Based Medical Image Segmentation(附實(shí)現(xiàn)教程)_Tina姐的博客-CSDN博客文章來源地址http://www.zghlxwxcb.cn/news/detail-779396.html

醫(yī)學(xué)圖像分割 3D nnUNet全流程快速實(shí)現(xiàn)_打南邊來了個阿楠的博客-CSDN博客

論文解讀- nnU-Net: Self-adapting Framework for U-Net-Based Medical Image Segmentation(附實(shí)現(xiàn)教程)_Tina姐的博客-CSDN博客


碼字不易,您的點(diǎn)贊是對我最好的支持,如果有問題也歡迎在評論區(qū)或私信與我交流!

到了這里,關(guān)于nnUNet保姆級使用教程!從環(huán)境配置到訓(xùn)練與推理(新手必看)的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 使用VScode編寫C語言程序 環(huán)境安裝配置 保姆級教程

    使用VScode編寫C語言程序 環(huán)境安裝配置 保姆級教程

    Visual Studio Code可通過安裝插件來支持C++、C#、Python、PHP等語言,使用的工程師越來越多,本文介紹如何使用VS Code進(jìn)行C語言的編譯與調(diào)試 目錄 一 vsCode配置C/C++環(huán)境 1. vsCode下載和安裝 2. 安裝vsCode 二?MinGW編譯器下載和配置 1. 下載編譯器MinGW并解壓 ?2.?將MinGW添加至環(huán)境變量 3

    2024年02月04日
    瀏覽(34)
  • yolov5的運(yùn)行環(huán)境配置、參數(shù)修改和訓(xùn)練命令,并將訓(xùn)練的pt模型轉(zhuǎn)換為rknn模型,并推理

    yolov5的運(yùn)行環(huán)境配置、參數(shù)修改和訓(xùn)練命令,并將訓(xùn)練的pt模型轉(zhuǎn)換為rknn模型,并推理

    目錄 一.yolov5的運(yùn)行環(huán)境配置(Windows系統(tǒng)) 1、NVIDIA驅(qū)動安裝與更新 ?2、Anaconda 的安裝 3、Pytorch環(huán)境安裝 ?4、pycharm安裝 二.yolov5訓(xùn)練數(shù)據(jù)集,得到best.pt(Windows系統(tǒng)) ?1.下載YOLO項(xiàng)目代碼 ?2.環(huán)境安裝 3. 數(shù)據(jù)集下載: 三.best.pt轉(zhuǎn)為onnx模型(Windows系統(tǒng)) 四.best.onnx轉(zhuǎn)為best.rknn模型(Linu

    2024年02月13日
    瀏覽(30)
  • 超適合新手使用的教程:Python環(huán)境配置+Pycharm安裝+擴(kuò)展包安裝(以Numpy+mkl為例)

    超適合新手使用的教程:Python環(huán)境配置+Pycharm安裝+擴(kuò)展包安裝(以Numpy+mkl為例)

    目錄 一、Python環(huán)境配置 1.Python下載 2.python安裝 3.Python驗(yàn)證安裝 ?二、Pycharm環(huán)境配置 1.pycharm下載 2.pycharm配置python 3.pycharm編譯器更新 三、Numpy+mkl庫包的安裝 1.通過Python自下載(command命令符) ?2.通過下載包到本地安裝 3.通過清華鏡像安裝(國內(nèi)最好用的辦法!!!) 4.檢查包是否安裝成

    2024年02月06日
    瀏覽(33)
  • 超詳細(xì)||YOLOv8基礎(chǔ)教程(環(huán)境搭建,訓(xùn)練,測試,部署看一篇就夠)(在推理視頻中添加FPS信息)

    超詳細(xì)||YOLOv8基礎(chǔ)教程(環(huán)境搭建,訓(xùn)練,測試,部署看一篇就夠)(在推理視頻中添加FPS信息)

    這篇文章將跳過基礎(chǔ)的深度學(xué)習(xí)環(huán)境的搭建,如果沒有完成的可以看我的這篇博客:超詳細(xì)||深度學(xué)習(xí)環(huán)境搭建記錄cuda+anaconda+pytorch+pycharm-CSDN博客 1. 在github上下載源碼: GitHub - ultralytics/ultralytics: NEW - YOLOv8 ?? in PyTorch ONNX OpenVINO CoreML TFLite 2. 安裝ultralytics(YOLOv8改名為ultraly

    2024年02月05日
    瀏覽(19)
  • 很合適新手入門使用的Python游戲開發(fā)包pygame實(shí)例教程-01[開發(fā)環(huán)境配置與第一個界面]

    很合適新手入門使用的Python游戲開發(fā)包pygame實(shí)例教程-01[開發(fā)環(huán)境配置與第一個界面]

    我們假定你已經(jīng)安裝好了我們開發(fā)python程序的sublime text,如果不知道怎么安裝的可以參照我前面的博文。這里只需要解決的是配置好Pygame的問題。本篇博文主要解決開發(fā)環(huán)境配置以及第一個游戲界面的顯示問題。 文章原出處: https://blog.csdn.net/haigear/article/details/130173836 沒有

    2024年01月25日
    瀏覽(35)
  • so-vits-svc3.0 中文詳細(xì)安裝、訓(xùn)練、推理使用教程

    2023-3-12文檔更新說明: 由于特殊原因,本項(xiàng)目文檔將停止更新,詳情請見原作者首頁,感謝各位的支持! 本文檔的Github項(xiàng)目地址 點(diǎn)擊前往 本幫助文檔為項(xiàng)目 so-vits-svc補(bǔ)檔 的詳細(xì)中文安裝、調(diào)試、推理教程,您也可以直接選擇官方README文檔 撰寫:Sucial 點(diǎn)擊跳轉(zhuǎn)B站主頁 本項(xiàng)

    2024年01月21日
    瀏覽(50)
  • so-vits-svc4.0 中文詳細(xì)安裝、訓(xùn)練、推理使用教程

    本幫助文檔為項(xiàng)目 so-vits-svc 的詳細(xì)中文安裝、調(diào)試、推理教程,您也可以直接選擇官方README文檔 撰寫:Sucial 點(diǎn)擊跳轉(zhuǎn)B站主頁 本項(xiàng)目需要的環(huán)境: NVIDIA-CUDA Python = 3.10 Pytorch FFmpeg - Cuda 在cmd控制臺里輸入 nvidia-smi.exe 以查看顯卡驅(qū)動版本和對應(yīng)的cuda版本 前往 NVIDIA-Developer 官網(wǎng)

    2024年02月05日
    瀏覽(14)
  • 新手Python環(huán)境配置以及pip安裝教程

    新手Python環(huán)境配置以及pip安裝教程

    介于我在安裝pip的時候,查資料仍然解決不了自己問題的情況下,統(tǒng)一整理了一下pip安裝流程(只針對windows用戶): 目錄 1.介紹 2.檢查python和pip的環(huán)境 3.下載pip 3.1方法一 3.2方法二 4.pip擴(kuò)展 pip 是?Python?包管理工具,提供了對 Python?包的查找、下載、安裝、卸載的功能,目前

    2024年02月03日
    瀏覽(19)
  • 【教程】Github環(huán)境配置新手指南(超詳細(xì))

    【教程】Github環(huán)境配置新手指南(超詳細(xì))

    寫在前面: 如果文章對你有幫助,記得點(diǎn)贊關(guān)注加收藏一波,利于以后需要的時候復(fù)習(xí),多謝支持! Github 是一個基于Git版本控制系統(tǒng)的代碼托管平臺,旨在幫助開發(fā)者協(xié)作、管理和追蹤其軟件項(xiàng)目的變化。 在這個平臺,你可以找到各種代碼資源,幾乎所有程序員都在Githu

    2024年03月23日
    瀏覽(18)
  • Paddlex入門教程2:搭建并配置Paddlex的推理環(huán)境(GPU版本)

    Paddlex入門教程2:搭建并配置Paddlex的推理環(huán)境(GPU版本)

    在www.paddlepaddle.org.cn中如圖安裝。 ?打開cmd確認(rèn)是否安裝完成。 點(diǎn)擊狀態(tài)欄中的“開始”,搜索“cmd”: 輸入“nvidia-smi”并回車,出現(xiàn)以下頁面: 輸入“nvcc --version” 情況1: 情況2: 說明未安裝cuda——打開CUDA Toolkit 11.7 Downloads | NVIDIA 開rutu 如上圖進(jìn)行安裝。 注:使用默認(rèn)

    2024年02月06日
    瀏覽(86)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包