3D U-NET及其變體的Pytorch實現:
基於3D U-NET的UNet3D標準3D U-NET:從稀疏註釋中學習密集的體積分割
基於SNEMI3D Connectomics Challenge的超人準確性的ResidualUNet3D殘留3D U-NET
ResidualUNetSE3D類似於殘留的ResidualUNet3D ,並基於高分辨率醫療量的深度學習語義分割增加了擠壓和激發塊。原始擠壓和激發紙:擠壓網絡
該代碼允許對U-NET進行訓練:語義細分(二進制和多級)和回歸問題(例如,納入,學習反應)。
還支持2D U-NET,請參見2Dunet_confocal或2dunet_dsb2018,例如配置。只需確保將單例Z-Dimension保留在您的H5數據集中(即(1, Y, X)而不是(Y, X) ),因為數據加載 /數據增強需要等級3的張量。 2DU-NET本身使用標準2D卷積層代替具有核心大小的3D卷積卷積(1, 3, 3) 。
輸入數據應存儲在HDF5文件中。用於培訓的HDF5文件應包含兩個數據集: raw和label 。選擇的是,在使用PixelWiseCrossEntropyLoss培訓時,應該提供weight數據集。 raw數據集應包含輸入數據,而label數據集的地面真相標籤。可選的weight數據集應包含加權輸入不同區域中損耗函數的值,並且大小應與label數據集相同。 raw / label數據集的格式取決於問題是2D還是3D,以及數據是單渠道還是多通道,請參見下表:
| 2d | 3D | |
|---|---|---|
| 單渠道 | (1,Y,X) | (z,y,x) |
| 多通道 | (C,1,Y,X) | (C,Z,Y,X) |
pytorch-3dunet是一個跨平台軟件包,也可以在Windows和OS X上運行。
pytorch-3dunet軟件包的最簡單方法是通過Conda/Mamba: conda install -c conda-forge mamba
mamba create -n pytorch-3dunet -c pytorch -c nvidia -c conda-forge pytorch pytorch-cuda=12.1 pytorch-3dunet
conda activate pytorch-3dunet
安裝後,可以在Conda環境中訪問以下命令: train3dunet用於訓練網絡和predict3dunet進行預測(請參見下文)。
python setup.py install
確保已安裝的pytorch與您的CUDA版本兼容,否則培訓/預測將無法在GPU上運行。
鑑於pytorch-3dunet軟件包是通過CONDA安裝的,因此可以通過簡單調用網絡來訓練網絡:
train3dunet --config <CONFIG>
其中CONFIG是YAML配置文件的路徑,該文件指定了培訓過程的所有方面。
為了培訓您自己的數據,只需提供配置中HDF5培訓和驗證數據集的路徑即可。
一個人可以使用張板tensorboard --logdir <checkpoint_dir>/logs/ (您需要安裝在Conda Env中的tensorflow ),其中checkpoint_dir是在配置中指定的檢查點目錄的路徑。
BCEWithLogitsLoss , DiceLoss , BCEDiceLoss , GeneralizedDiceLoss :目標數據必須為4D(每個頻道一個目標二進制掩碼)。在WeightedCrossEntropyLoss , CrossEntropyLoss , PixelWiseCrossEntropyLoss培訓時,目標數據集必須為3D,另請參見pytorch文檔,以了解CE損失:https://pytorch.org/docs/master/master/master/generated/generated/generated/torch.nn.nn.nn.nn.nn.crossentroproproproproproproproproproproproplmllmllmllmllmlmlmlmlmlmllmlmlmlmlmlmlmlmlmlmlmlmlmlmlmlmlmlmlmlmlmlmlmlmlmlmlmlmlmlm一下model配置部分中的final_sigmoid僅適用於推理時間(驗證,測試):BCEWithLogitsLoss , DiceLoss , BCEDiceLoss , GeneralizedDiceLoss Set final_sigmoid=TrueWeightedCrossEntropyLoss , CrossEntropyLoss , PixelWiseCrossEntropyLoss )設置final_sigmoid=False ,以便將Softmax歸一化應用於輸出。 鑑於pytorch-3dunet軟件包是通過Conda安裝的,因此可以通過以下方式進行預測:
predict3dunet --config <CONFIG>
為了在您自己的數據上進行預測,只需提供模型的路徑以及HDF5測試文件的路徑(請參閱示例test_config_segmentation.yaml)。
LazyHDF5Dataset和LazyPredictor 。這將通過以較慢的預測時間為代價來節省存儲器,以節省內存。有關示例配置,請參見test_config_lazy。predictor部分中設置save_segmentation: true (請參閱test_config_multiclass)。 默認情況下,如果有多個GPU可用的培訓/預測將使用DataParallel在所有GPU上運行。如果對所有可用GPU的培訓/預測是不可取的,請使用CUDA_VISIBLE_DEVICES限制GPU的數量,例如
CUDA_VISIBLE_DEVICES=0,1 train3dunet --config < CONFIG >或者
CUDA_VISIBLE_DEVICES=0,1 predict3dunet --config < CONFIG > BCEWithLogitsLoss (二進制跨滲透)DiceLoss (標準的DiceLoss定義為1 - DiceCoefficient ;當地面真相中有2個以上的類別時,它將計算每個通道的DiceLoss並平均值)BCEDiceLoss (BCE和DICE損失的線性組合,即alpha * BCE + beta * Dice , alpha, beta可以在配置的loss部分中指定)CrossEntropyLoss (可以通過weight: [w_1, ..., w_k]在配置的loss部分中)PixelWiseCrossEntropyLoss (一個人可以指定每個像素權重,以便為地面真相中重要/代表性不足的區域提供更多梯度;必須在H5文件中提供培訓和驗證中weight數據集;請參閱trib_config.yml中的示例配置WeightedCrossEntropyLoss (有關詳細說明,請參見下文中的“加權交叉凝膠(WCE)”)GeneralizedDiceLoss (請參閱以下論文中的“廣義骰子損失(GDL)”以進行詳細說明)注意:僅當訓練數據集中的標籤非常不平衡時,才能使用此損耗函數,例如一個具有至少3個數量級體素數的類,比其他類別要高3個數量級。否則,請使用標準的DiceLoss 。有關某些受支持的損失函數的詳細說明,請參見:廣義骰子重疊,作為高度不平衡分段的深度學習損失函數。
MSELoss (均值誤差損失)L1Loss (平均絕對誤差損失)SmoothL1Loss (對離群值不如Mseloss敏感)WeightedSmoothL1Loss ( SmoothL1Loss的延伸,允許在給定閾值以下/低於以下的體素值以不同的方式加權體素值) MeanIoU (聯合的平均十字路口)DiceCoefficient (計算每個通道骰子係數的計算並返回平均值),如果訓練了3D U-NET來預測細胞邊界,則可以使用以下語義實例實例分割指標(以下是通過在閾值邊界映射上運行連接的組件並將結果的實例與地面真相實例分割進行比較):BoundaryAveragePrecision (將平均精度應用於邊界概率圖:閾值來自網絡的輸出,運行連接的組件以獲取分割併計算結果分割和地面真相之間的AP)AdaptedRandError (請參閱http://brainiac2.mit.edu/snemi3d/evaluation詳細說明)AveragePrecision (請參閱https://www.kaggle.com/stkbailey/step-by-step-sexplanation-of-scoring-metric)如果未指定的話MeanIoU默認情況下將使用。
PSNR (峰信號與噪聲比)MSE (均方根錯誤) 培訓/預測配置可以在3dunet_lightsheet_boundary中找到。預先訓練的模型權重。為了在您自己的數據上使用預訓練的模型:
best_checkpoint.pytorchpredict3dunet --config test_config.ymlpre_trained屬性定為best_checkpoint.pytorch路徑來調整預訓練模型。可以從以下OSF項目下載用於培訓的數據:
測試集上的樣本Z片預測(頂部:原始輸入,底部:邊界預測):


培訓/預測配置可以在3dunet_confocal_boundary中找到。預先訓練的模型權重。為了在您自己的數據上使用預訓練的模型:
best_checkpoint.pytorchpredict3dunet --config test_config.ymlpre_trained屬性定為best_checkpoint.pytorch路徑來調整預訓練模型。可以從以下OSF項目下載用於培訓的數據:
測試集上的樣本Z片預測(頂部:原始輸入,底部:邊界預測):


培訓/預測配置可以在3Dunet_lightsheet_nuclei中找到。預先訓練的模型權重。為了在您自己的數據上使用預訓練的模型:
best_checkpoint.pytorchpredict3dunet --config test_config.ymlpre_trained屬性定為best_checkpoint.pytorch路徑來調整預訓練模型。可以從以下OSF項目下載培訓和驗證集:https://osf.io/thxzn/
測試集的樣品z板岩預測(頂部:原始輸入,底部:核預測):


數據可以從以下下載:https://www.kaggle.com/c/data-science-bowl-2018/data
培訓/預測配置可以在2dunet_dsb2018中找到。
測試圖像的樣本預測(頂部:原始輸入,底部:核預測):


如果您想捐款,請提出拉請請求。
如果您使用此代碼進行研究,請引用為:
@article {10.7554/eLife.57613,
article_type = {journal},
title = {Accurate and versatile 3D segmentation of plant tissues at cellular resolution},
author = {Wolny, Adrian and Cerrone, Lorenzo and Vijayan, Athul and Tofanelli, Rachele and Barro, Amaya Vilches and Louveaux, Marion and Wenzl, Christian and Strauss, Sören and Wilson-Sánchez, David and Lymbouridou, Rena and Steigleder, Susanne S and Pape, Constantin and Bailoni, Alberto and Duran-Nebreda, Salva and Bassel, George W and Lohmann, Jan U and Tsiantis, Miltos and Hamprecht, Fred A and Schneitz, Kay and Maizel, Alexis and Kreshuk, Anna},
editor = {Hardtke, Christian S and Bergmann, Dominique C and Bergmann, Dominique C and Graeff, Moritz},
volume = 9,
year = 2020,
month = {jul},
pub_date = {2020-07-29},
pages = {e57613},
citation = {eLife 2020;9:e57613},
doi = {10.7554/eLife.57613},
url = {https://doi.org/10.7554/eLife.57613},
keywords = {instance segmentation, cell segmentation, deep learning, image analysis},
journal = {eLife},
issn = {2050-084X},
publisher = {eLife Sciences Publications, Ltd},
}