作者提出一種nnUNet(no-new-Net)框架,基于原始的UNet(很小的修改),不去采用哪些新的結構,如相殘差連接、dense連接、注意力機制等花里胡哨的東西。相反的,把重心放在:預處理(resampling和normalization)、訓練(loss,optimizer設置、數據增廣)、推理(patch-based策略、test-time-augmentations集成和模型集成等)、后處理(如增強單連通域等)。
1. 環境搭建
操作系統:支持 Linux (ubuntu22.04)
GPU:RTX 4090D(24GB)
Python版本:3.9 或更高版本
1.1. 安裝 PyTorch
注意:在正確安裝 PyTorch 之前,請勿直接使用"pip install nnunetv2"進行安裝。
按照PyTorchStart Locally | PyTorch官方網站的說明安裝 PyTorch。請安裝支持你硬件(CUDA、MPS、CPU)的最新版本。
使用Conda安裝:
conda install pytorch torchvision torchaudio cpuonly -c pytorch
使用Pip安裝:
pip install torch torchvision torchaudio
自行編譯安裝:
為了獲得最快的速度,考慮自行編譯 PyTorch(需要一點技術含量……)pytorch/pytorch:Python 中的張量和動態神經網絡,具有強大的 GPU 加速
# 克隆 PyTorch 源代碼倉庫
git clone --recursive https://github.com/pytorch/pytorch
cd pytorch# 安裝編譯所需的依賴
# ...# 編譯并安裝 PyTorch
python setup.py install
1.2. 安裝 nnU-Net(根據你的使用場景)
安裝 nnU-Net 會在你的終端中添加幾個新命令(用于運行整個 nnU-Net 流水線):
①所有 nnU-Net 命令都帶有"nnUNetv2_"前綴,便于識別。
②請注意,這些命令只是執行 Python 腳本。(pyproject.toml文件中的 project.scripts 寫明了執行的是哪些腳本/函數。)
[project.scripts]
nnUNetv2_plan_and_preprocess = "nnunetv2.experiment_planning.plan_and_preprocess_entrypoints:plan_and_preprocess_entry"
nnUNetv2_extract_fingerprint = "nnunetv2.experiment_planning.plan_and_preprocess_entrypoints:extract_fingerprint_entry"
nnUNetv2_plan_experiment = "nnunetv2.experiment_planning.plan_and_preprocess_entrypoints:plan_experiment_entry"
nnUNetv2_preprocess = "nnunetv2.experiment_planning.plan_and_preprocess_entrypoints:preprocess_entry"
nnUNetv2_train = "nnunetv2.run.run_training:run_training_entry"
# 使用指定模型文件夾中的模型對原始數據進行預測。
nnUNetv2_predict_from_modelfolder = "nnunetv2.inference.predict_from_raw_data:predict_entry_point_modelfolder"
# 對原始數據進行預測,生成分割結果。
nnUNetv2_predict = "nnunetv2.inference.predict_from_raw_data:predict_entry_point"
nnUNetv2_convert_old_nnUNet_dataset = "nnunetv2.dataset_conversion.convert_raw_dataset_from_old_nnunet_format:convert_entry_point"
# 在交叉驗證結果中尋找最佳模型配置。
nnUNetv2_find_best_configuration = "nnunetv2.evaluation.find_best_configuration:find_best_configuration_entry_point"
# 確定后處理參數,例如去除連通組件。
nnUNetv2_determine_postprocessing = "nnunetv2.postprocessing.remove_connected_components:entry_point_determine_postprocessing_folder"
# 應用后處理步驟,例如去除預測結果中的小連通區域。
nnUNetv2_apply_postprocessing = "nnunetv2.postprocessing.remove_connected_components:entry_point_apply_postprocessing"
nnUNetv2_ensemble = "nnunetv2.ensembling.ensemble:entry_point_ensemble_folders"
nnUNetv2_accumulate_crossval_results = "nnunetv2.evaluation.find_best_configuration:accumulate_crossval_results_entry_point"
nnUNetv2_plot_overlay_pngs = "nnunetv2.utilities.overlay_plots:entry_point_generate_overlay"
nnUNetv2_download_pretrained_model_by_url = "nnunetv2.model_sharing.entry_points:download_by_url"
nnUNetv2_install_pretrained_model_from_zip = "nnunetv2.model_sharing.entry_points:install_from_zip_entry_point"
nnUNetv2_export_model_to_zip = "nnunetv2.model_sharing.entry_points:export_pretrained_model_entry"
nnUNetv2_move_plans_between_datasets = "nnunetv2.experiment_planning.plans_for_pretraining.move_plans_between_datasets:entry_point_move_plans_between_datasets"
nnUNetv2_evaluate_folder = "nnunetv2.evaluation.evaluate_predictions:evaluate_folder_entry_point"
nnUNetv2_evaluate_simple = "nnunetv2.evaluation.evaluate_predictions:evaluate_simple_entry_point"
nnUNetv2_convert_MSD_dataset = "nnunetv2.dataset_conversion.convert_MSD_dataset:entry_point"
③所有 nnU-Net 命令都有一個"-h"選項,用于提供如何使用它們的信息。
方法一
pip install nnunetv2
解釋:這是一種簡單直接的安裝方式,通過 pip
命令從 Python 包索引(通常是 PyPI)下載并安裝 nnUNetv2
包。這種方式安裝的是已經打包好的穩定版本,你可以直接使用其中提供的標準化基準、分割算法,或者利用預訓練模型進行推理任務。你無需關心代碼的具體實現細節,就像使用一個現成的工具一樣。
適用場景:如果你只是想快速使用 nnUNetv2
來完成一些分割任務,比如對一些醫學圖像進行分割,或者驗證某個數據集在 nnUNetv2
上的表現,而不需要對代碼進行修改和定制,那么這種安裝方式就很合適。
方法二
git clone https://github.com/MIC-DKFZ/nnUNet.git
cd nnUNet
pip install -e .
解釋:這種方式首先使用 git clone
命令從 GitHub 倉庫克隆 nnUNet
的源代碼到本地計算機,然后進入克隆下來的代碼目錄,最后使用 pip install -e .
命令進行安裝。其中,-e
選項表示以 “可編輯模式” 安裝,這意味著你對本地代碼所做的任何修改都會立即生效,無需重新安裝。通過這種方式,你可以在本地擁有一份完整的 nnUNet
代碼副本,方便你對代碼進行修改、調試和擴展。
適用場景:如果你希望深入學習 nnUNetv2
的算法原理,對代碼進行定制化開發,例如修改模型結構、調整訓練策略、添加新的功能等,那么這種安裝方式就更適合你。
這里使用第二種方式
root@autodl-container-7f114d8374-8fa873f5:~# git clone https://github.com/MIC-DKFZ/nnUNet.git
Cloning into 'nnUNet'...
remote: Enumerating objects: 13663, done.
remote: Counting objects: 100% (890/890), done.
remote: Compressing objects: 100% (347/347), done.
remote: Total 13663 (delta 635), reused 747 (delta 543), pack-reused 12773 (from 3)
Receiving objects: 100% (13663/13663), 7.96 MiB | 9.36 MiB/s, done.
Resolving deltas: 100% (10404/10404), done.
發現這就是一個下載源碼的指令……我之前還在官網下載了之后傳到autodl……多此一舉了。
root@autodl-container-7f114d8374-8fa873f5:~# cd nnUNet
root@autodl-container-7f114d8374-8fa873f5:~/nnUNet# pip install -e .……一些安裝顯示
先執行 bash
命令“cd nnUNet
”,用于切換到名為 nnUNet
的目錄。(在執行 git clone
命令后,你需要進入下載的 nnUNet
代碼目錄,以便后續對該項目進行操作),再執行pip
命令
pip install -e .
-e
選項表示以 “可編輯模式”(也稱為開發模式)安裝項目。
.
表示當前目錄(即 nnUNet
目錄)。
這個命令的作用:
①會安裝 nnUNet
項目及其所有依賴項(對于包含 setup.py
或 pyproject.toml
的項目)
又學到了一個配置項目環境的方法,但是前提是:項目是以 Python 編寫;項目遵循 Python 包的標準結構;項目里有 setup.py
或 pyproject.toml
②將項目安裝為可編輯模式(Editable Install),適合本地開發調試,安裝后對本地代碼所做的任何修改都會立即生效,而不需要重新安裝整個包。
1.3. 設置環境變量
nnU-Net 依靠環境變量來確定原始數據、預處理數據以及訓練好的模型權重的存儲位置。
要充分使用 nnU-Net 的全部功能,必須設置三個環境變量:
①nnUNet_raw:放置原始數據集的位置。
②nnUNet_preprocessed:這是保存預處理數據的文件夾。
③nnUNet_results:保存模型權重的位置。如果下載了預訓練模型,也會將其保存在這里。
設置環境變量分為永久設置和臨時設置,這里選擇永久設置。
在 Ubuntu 系統中,.bashrc
文件位于你的主目錄(即你的用戶目錄)下。它是一個隱藏文件&