(十七:2020.09.10)nnUNet最全问题收录(9.10更新)
来这里寻找你的答案!
- 一、写在前面
- 二、GITHUB ISSUE
- I. 使用上的问题:
- #477 《3D nnUNet支持FP16量化吗?》
- #474 《ImportError: cannot import name find_namespace_packages》
- #471 《我怎么在本地评估一些预训练模型的指标呢?》
- #469 《无任何报错的进程死亡》
- #464 《如何对PET进行归一化》
- #459 《`orientation`这个属性在nnUNet里起作用吗?》
- #456 《cannot import name 'SpatialTransform_2' from 'batchgenerators.transforms'》
- #454 《能给个自己编译pytorch解决2d训练问题的教程吗?》
- #449 《前景多标签有重叠情况怎么解决?》
- #446 《在用多GPU训练以后发现推理时候报错》
- #437 《在Microsoft Azure VM Instance虚拟机中存在的一个bug》
- #427 《nnUNet能不能使用cupy来加速预处理过程呢?》
- #425 《当生成的patch_size大于图像本身的时候会发生什么?》
- #424 《能直接把预处理以后的npz文件的patch抽出来在我的新模型上进行训练吗?》
- #423 《想在你的模型中添加新的网络块,应该怎么做?》
- #422 《使用find_best_configuration时npz丢失》
- #421 《cuda10.0+torch1.2可以训练吗?》
- #420 《怎么训练2D图片?》
- #417 《推理时间特别慢(32g的RAM)》
- #416 《在docker中运行nnUNet遇到错误`RuntimeError: MultiThreadedAugmenter.abort_event was set, something went wrong. Maybe one of your workers crashed. This is not the actual error message! Look further up your stdout to see what caused the error. Please also check whether your RAM was full`》
- #322 《关于修改最大轮数》
- #321 《在执行plan_preprocess的时候卡住》
- #318 《12GB的显存仍然不够的问题》
- #312 《混合精度问题(TypeError: predict_preprocessed_data_return_seg_and_softmax() got an unexpected keyword argument 'mixed_precision')》
- #311 《训练时找不到预处理文件夹》
- #310 《"Segmentation fault (core dumped)"》
- #309《"RuntimeError: CUDA error: device-side assert triggered"》<---(Non-consecutive labels within ground truth )
- #304《1000的epoch太多了,我怎么自定义一个epoch?》
- #302《训练第一个fold的时候正常,但是其他四个fold的训练损失是NaN》
- #299《五折产生五个fold,每个训练出一个模型,怎么把这五个合成一个模型呢?》
- #297《简单修改了batchsize和patchsize并不成功,目的是希望在32GB的显卡上充分利用显存》
- #296《"TypeError: consolidate_folds() got an unexpected keyword argument 'folds'"》
- #295《"AttributeError: 'list' object has no attribute 'size'"(推理时候卡住并报错)》
- #290《预测时候卡主卡了一天没有反应》
- #288《怎么使用FabiansUNet,而不是默认的generic_Unet》
- #281《关于怎么评估模型测试结果》
- #280《怎么关闭deep-supervision》
- #273《代码中的"softmax_helper"相比torch中的"torch.nn.functional.softmax"有什么优点》
- #271《怎么读取权重(找不到权重文件)》
- #270《怎么在预训练模型的基础上加入一些新的数据以提高模型泛化能力?》
- #268《训练数据有四个通道(而不是五个),最后一个通道是一个二进制的map(应该是五个通道时候的xy合并在一起的),怎么应用数据增强》
- #263《有些测试CT推理不出来,有些CT推理出来啥也没有》
- #259《同样的数据集,为什么我的训练结果没有作者论文里的效果好呢?》
- #258《关于推理速度如此之慢的问题》
- #257《nnUNet怎么对预处理好的文件进行推理》
- II. 理论上的问题:
- #430《一种nnUNet的改进方向》
- #470《nnUNet可以进行一些dense-connection的改进吗?》
- #303《nnUNet是怎么在做强度归一化》
- #265《关于利用crop来生成前景boundingbox的问题》
- III. 代码上的问题:
- #313 《AttributeError: 'NoneType' object has no attribute 'is_alive'》
- #294《"RuntimeError: unable to write to file "》
- #291 《AttributeError: 'NoneType' object has no attribute 'is_alive'》(与#313的问题一样)
- #267 《TypeError: validate() got an unexpected keyword argument 'force_separate_z'》
一、写在前面
1. 发现最近大家的问题有很多,有部分是理论上的问题。但是很多还只是框架使用上的问题,其实个人觉得整个框架就现在来说已经相当的成熟,为了有一个类似于github的issue总结的地方,我希望去写一片问题总结的博客还是具有相当大的意义,一方面处于对工作学习内容的总结,一方面有个很好的反馈问题查找答案的地方。我会慢慢更新到最开始的位置。
2. 本篇博客总结的内容包括三个来源:
- ① GITHUB:我会从github的issue界面这里进行全面的检索和内容精要的提取,主要是已经关闭的issue。按照由今至古的时间线进行,同时会将内容分为如下三类:
- I. 使用上的问题:主要是使用过程出现的问题总结;
- II. 理论上的问题: 涉及到理论的新颖知识,基本的概念或常识;
- III. 代码上的问题:算法的代码实现,以及一些可能存在的bug。
- ② 个人使用经验:总结我在使用nnUNet过程中出现的问题和解决方案。
- ③ 访客问题:总结大家向我提出的问题,只会涉及到我之前没有遇到过也没有时间常识解决且GITHUB上暂时没有提到的问题。
3. 笔者希望各位看官在方便自己工作学习的同时,也能为贡献自己的一份力,我们距离德国的医疗卫生水平还有着巨大的鸿沟式的差距,人生在世,总得留下点有价值的东西,无论出于什么目的,大家一起加油,不忘初心。
二、GITHUB ISSUE
I. 使用上的问题:
#477 《3D nnUNet支持FP16量化吗?》
#474 《ImportError: cannot import name find_namespace_packages》
#471 《我怎么在本地评估一些预训练模型的指标呢?》
#469 《无任何报错的进程死亡》
- 1. 问题描述:我正在尝试使用马萨诸塞州道路分割数据集训练2D模型。 但是,当训练过程达到第四轮,终端将显示“ killed”,而没有任何错误消息。
- 2. 解决方法:这里的
nnU-Net training (2D U-Net): High (and increasing) system RAM usage, OOM
解释了这个原因。 - 3. 问题解决:
分别将CUDA和CUDNN版本更新为11.0.194和8.0.5,然后我重新编译pyTorch,它可以正常工作。 - 4. 我有话说:几个月没看nnUNet,看来已经可以进行自然场景的2D分割了 ,很多同学问过这个问题,不知道你们有没有跟进关注呢?我在这个问题发现了这个任务的数据预处理---->here,看来作者已经把脚本写好了,确实得看一下了。
#464 《如何对PET进行归一化》
#459 《orientation
这个属性在nnUNet里起作用吗?》
#456 《cannot import name ‘SpatialTransform_2’ from ‘batchgenerators.transforms’》
#454 《能给个自己编译pytorch解决2d训练问题的教程吗?》
#449 《前景多标签有重叠情况怎么解决?》
#446 《在用多GPU训练以后发现推理时候报错》
#437 《在Microsoft Azure VM Instance虚拟机中存在的一个bug》
- 1. 问题描述:
shutil.Error: [('/nnUnet/nnUNet_raw_data_base/nnUNet_cropped_data/Task001_Brain/gt_segmentations/BRAIN_000.nii.gz', '/nnUnet/nnUNet_preprocessed/Task001_Brain/gt_segmentations/BRAIN_000.nii.gz', "[Errno 38] Function not implemented: '/nnUnet/nnUNet_raw_data_base/nnUNet_cropped_data/Task001_Brain/gt_segmentations/BRAIN_000.nii.gz'"), .
- 2. 解决方法:https://stackoverflow.com/questions/51616058/shutil-copystat-fails-inside-docker-on-azure。
#427 《nnUNet能不能使用cupy来加速预处理过程呢?》
#425 《当生成的patch_size大于图像本身的时候会发生什么?》
#424 《能直接把预处理以后的npz文件的patch抽出来在我的新模型上进行训练吗?》
#423 《想在你的模型中添加新的网络块,应该怎么做?》
- 1. 问题描述:想把这个模块添加到nnUNet的模型当中。
- 2. 作者解释:您需要修改Generic_UNet并将自定义块添加到正确的位置。 那应该很简单。 请注意,这些块不会被用于估计GPU内存消耗,因此您可能需要超过10GB的GPU内存来训练所得模型。
#422 《使用find_best_configuration时npz丢失》
#421 《cuda10.0+torch1.2可以训练吗?》
#420 《怎么训练2D图片?》
#417 《推理时间特别慢(32g的RAM)》
#416 《在docker中运行nnUNet遇到错误RuntimeError: MultiThreadedAugmenter.abort_event was set, something went wrong. Maybe one of your workers crashed. This is not the actual error message! Look further up your stdout to see what caused the error. Please also check whether your RAM was full
》
#322 《关于修改最大轮数》
#321 《在执行plan_preprocess的时候卡住》
- 1. 问题原因:较小的RAM却使用默认的线程数会导致卡顿,所以要将线程数设置的少一点来进行测试其他是否正常。
- 2. 解决方法:
nnUNet_plan_and_preprocess -t 100 -tl 1 -tf 1 --verify_dataset_integrity
来设置为一个线程。
#318 《12GB的显存仍然不够的问题》
- 1. 问题原因:问者在最后发现自己的显存仍有程序在占用,但是nvidia-smi并未将这部分进行显示。
- 2. 其他要点:
- I. 在使用nnUNet时,尽量把代码Update一下,同时将torch的版本进行更新;
- II. 作者建议如果要进行环境的更新安装,不怕工程大的话,将CUDA更新到CUDA11.
#312 《混合精度问题(TypeError: predict_preprocessed_data_return_seg_and_softmax() got an unexpected keyword argument ‘mixed_precision’)》
- 1. 问题原因:作者在最近将apex从框架中移除,因为torch1.6支持混合精度训练,没有及时更新出现的错误。
- 2. 解决方案:
pip install --upgrade nnunet
来更新nnUNet,或者在ide中进行master的update。
#311 《训练时找不到预处理文件夹》
- 1. 问题原因:环境变量的设置问题,所以无法找到对应文件夹。
- 2. 解决方案:参考第四篇博客教程去进行环境路径的设置。
- 3. 我有话说:如果觉得这样设置不够灵活,且你的磁盘空间有限,想要灵活的设置nnUNet的路径,请按照下面导入临时环境变量:
export nnUNet_raw_data_base="/home/user/DATASET/nnUNet_raw(对应你的文件夹全路径)"
export nnUNet_preprocessed="/home/user/DATASET/nnUNet_preprocessed"(对应你的文件夹全路径)
export RESULTS_FOLDER="/home/user/DATASET/nnUNet_trained_models"(对应你的文件夹全路径)
- 像之前一样执行命令,每进一次终端都要这样做一次,这是设置临时环境变量。
#310 《“Segmentation fault (core dumped)”》
- 1. 问题原因:这是个相当奇怪的问题,问者最终结论是觉得
torch 1.2.0
和batchgenerators 0.20.1
有冲突。 - 2. 解决方案:将torch回溯到1.2.0能解决这个问题。
- 3. 我有话说:把torch更新到1.6不香吗???
#309《“RuntimeError: CUDA error: device-side assert triggered”》<—(Non-consecutive labels within ground truth )
- 1. 问题描述:问者在尝试训练TCGA brain tumour的数据集,格式类似于 BraTS的数据集,但是按照正常的流程开始训练之后出现
RuntimeError: CUDA error: device-side assert triggered
的问题。 - 2. 问题原因:对于这样格式的数据类型,作者写了一个专门的脚本来进行这个数据集的处理---->
nnunet/dataset_conversion/Task043_BraTS_2019.py
,需要先运行这个脚本继续训练。 - 3. 解决方案:问者先是按照作者说的脚本处理数据,但是仍然有错误,之后他将整个之前产生的文件内容全部删除,只留下一个原始数据,重新训练后解决问题。
- 4. 其他要点:
- I. 在某些时候,如果想要重新处理数据,之前生成的crop文件夹不删除就会出现问题,尽量把这个文件夹删除掉;
- II. 对于不同的数据集处理方式可能会有所不同,对于比较主流的竞赛数据集,作者的代码中都会有对应的脚本。
#304《1000的epoch太多了,我怎么自定义一个epoch?》
#302《训练第一个fold的时候正常,但是其他四个fold的训练损失是NaN》
#299《五折产生五个fold,每个训练出一个模型,怎么把这五个合成一个模型呢?》
#297《简单修改了batchsize和patchsize并不成功,目的是希望在32GB的显卡上充分利用显存》
- 1. 问题描述:问者在进行迁移学习的nnUNet实践,需要修改batchsize、patchsize和网络结构(深度),于是修改了plan.pkl文件但是并未成功。报错:
RuntimeError: Sizes of tensors must match except in dimension 3. Got 7 and 8
和RuntimeError: invalid argument 0: Sizes of tensors must match except in dimension 1. Got 41 and 42 in dimension 4 at /pytorch/aten/src/THC/generic/THCTensorMath.cu:71
,这很明显是形状出了问题。而且希望能在32GB的显卡上充分应用显存,也就是增大patchsize。 - 2. 问题原因:直接从plan.pkl文件修改超参数会出现问题,在你不知道这些参数的具体作用时,不要修改,因为nnUNet的参数可能相互关联和影响。
- 3. 解决方案:前面的第一个问题没有给出详细的答案,至于如何增大patchsize,采用如下命令:
nnUNet_plan_and_preprocess [...] -pl2d None -pl3d ExperimentPlanner3D_v21_32GB
这个计划在代码的这个位置:
也就是说,只能通过这种方式来增加patchsize的大小,从而充分应用显存。那些有大显卡的兄弟姐妹可以来试一下了。 - 4. 我有话说:
- I. 一直没有看plan的代码,所以可能也没有深入了解为什么超参数不能乱修改;
- II. 更大的patchsize,意味着推理时更少的迭代次数,也就有可能会对推理速度有一部分加速效果,有兴趣的可以试一下,我还没测。
#296《“TypeError: consolidate_folds() got an unexpected keyword argument ‘folds’”》
#295《“AttributeError: ‘list’ object has no attribute ‘size’”(推理时候卡住并报错)》
- 1. 问题描述:问者在进行FabiansResUNet推理时遇到的错误,它运行的是
nnUNet_predict -i ./imagesTs -o ./predict_result -t 001 -tr nnUNetTrainerV2_ResencUNet -m 3d_fullres -f 0 -chk model_best
- 2. 解决方案:作者稍微更新了下代码然后让问者重新拉取,这种错误应该是数据类型的问题,或者用错了api,如果还有问题可以直接在GITHUB上反馈。
- 3. 我有话说:
- I.我相信很多读者可能都想用残差网络来尝试训练一下nnUNet,我在这里给出详细的步骤:
- 第一步:更新nnUNet!!!;
- 第二步:运行一次普通的预处理,即
nnUNet_plan_and_preprocess -t 16
,如果之前运行过则不需要; - 第三步:
nnUNet_plan_and_preprocess -t 16 -pl2d None
; - 第四步:
nnUNet_plan_and_preprocess -t 16 -pl3d ExperimentPlanner3DFabiansResUNet_v21 -pl2d None
; - 第五步:
nnUNet_train 3d_fullres nnUNetTrainerV2_ResencUNet 16 4 -p nnUNetPlans_FabiansResUNet_v2.1
- II. 我们知道,训练完成后有两个模型文件,一个是model_best,一个是model_latest,如果想在训练中用其中一个进行推理的测试,请在推理的命令后加参数
-chk model_best
或者-chk model_latest
。
- I.我相信很多读者可能都想用残差网络来尝试训练一下nnUNet,我在这里给出详细的步骤:
#290《预测时候卡主卡了一天没有反应》
#288《怎么使用FabiansUNet,而不是默认的generic_Unet》
#281《关于怎么评估模型测试结果》
#280《怎么关闭deep-supervision》
- 1. 解决方案:
使用nnUNetTrainerV2_noDeepSupervision
,替代命令中的nnUNetTrainerV2
。 - 2. 关于deep-supervision这个trick:
参考这篇文章deep-supervision
#273《代码中的"softmax_helper"相比torch中的"torch.nn.functional.softmax"有什么优点》
#271《怎么读取权重(找不到权重文件)》
#270《怎么在预训练模型的基础上加入一些新的数据以提高模型泛化能力?》
#268《训练数据有四个通道(而不是五个),最后一个通道是一个二进制的map(应该是五个通道时候的xy合并在一起的),怎么应用数据增强》
#263《有些测试CT推理不出来,有些CT推理出来啥也没有》
#259《同样的数据集,为什么我的训练结果没有作者论文里的效果好呢?》
#258《关于推理速度如此之慢的问题》
- 1. 我有话说:推理的时间问题在我看来主要来自于三个方面:
- ① 数据预处理的时间:预处理的时间分为crop的时间和插值的时间,所用的库都是skimage,可以说是相当的慢,层数较多的时候甚至会10min以上预处理一次。个人建议,将代码中的插值算法从ndimage换成torch的插值算法,基本在几秒内完成插值。
- ② 镜像计算的时间:也就是数据增强的时间,在3d的模式中,每次要做8次的镜像,然后每个都要推理,关闭镜像可以把这部分时间减少很多;
- ③ patch的迭代和推理时间:这是为什么推理时间那么长的根本原因,因为一个patch要0.3s左右的时间,但是一套ct上会有上百个patch,时间成本自然也就上去了。我尝试过libtorch的推理,看下时间有没有减少,发现也没有什么大的改观;尝试过tensorRT的加速,但是出现3d卷积核的问题至今没能解决。有想法的可以试一下。
#257《nnUNet怎么对预处理好的文件进行推理》
II. 理论上的问题:
#430《一种nnUNet的改进方向》
- 1. 问题描述:想把标签mask作为另一个通道加入到训练的数据中以此来指导模型。(有点意思,有谁能指引一下我这个论文?)
- 2. 作者建议:对这个方法没有什么概念所以也不知道作者说的啥意思,有兴趣的自己琢磨下。
#470《nnUNet可以进行一些dense-connection的改进吗?》
#303《nnUNet是怎么在做强度归一化》
- 我解释一哈:这个问题是我提出来的,因为在实际的应用中我发现模型在一些明显发灰的CT上表现很差,我希望摸清楚到底归一化在怎么做。其实是这样的:
- I. 将所有训练的数据集的所有体素的强度值进行一个统计,类似于去掉一个最低分和一个最高分的方法,把数值前0.5%和后0.5%的值去掉,只取中间部分的值,然后在剩下的值上计算均值和方差,来进行强度归一化。
- II. 代码在这里:
if scheme == "CT":# clip to lb and ub from train data foreground and use foreground mn and sd from training dataassert self.intensityproperties is not None, "ERROR: if there is a CT then we need intensity properties"mean_intensity = self.intensityproperties[c]['mean']std_intensity = self.intensityproperties[c]['sd']lower_bound = self.intensityproperties[c]['percentile_00_5']upper_bound = self.intensityproperties[c]['percentile_99_5']data[c] = np.clip(data[c], lower_bound, upper_bound)data[c] = (data[c] - mean_intensity) / std_intensityif use_nonzero_mask[c]:data[c][seg[-1] < 0] = 0
#265《关于利用crop来生成前景boundingbox的问题》
III. 代码上的问题:
#313 《AttributeError: ‘NoneType’ object has no attribute ‘is_alive’》
#294《“RuntimeError: unable to write to file </torch_15769_1517813162>”》
#291 《AttributeError: ‘NoneType’ object has no attribute ‘is_alive’》(与#313的问题一样)
#267 《TypeError: validate() got an unexpected keyword argument ‘force_separate_z’》
(十七:2020.09.10)nnUNet最全问题收录(9.10更新)相关推荐
- RDKit | 基于RDKit(≥2020.09.1)的相似图绘制新方法
导入库 from rdkit import Chem from rdkit.Chem import Draw from rdkit.Chem.Draw import SimilarityMaps fr ...
- 2020年十月蓝桥杯A组题解【10月17日】【附完整代码】
填空1 题意:输出1到2020之中,数字2出现了一共多少次. 题解:有手就行 用时:3min 正确答案:624 代码: #include <bits/stdc++.h> using nam ...
- android10全面屏手势 操作图,丨系统设计丨ZUI 10加入更多全面屏手势
丨系统设计丨ZUI 10加入更多全面屏手势 系统方面,联想Z5 Pro GT搭载了ZUI 10系统.总的来说这代系统主要是的改观是:以"全面屏"为核心体验加入属于ZUI特有的&qu ...
- 2020 Ohayoo游戏开发者沙龙成都站将于10月22日正式启动
2020 Ohayoo游戏开发者沙龙成都站将于10月22日正式启动 10月22日起,Ohayoo将在成都.厦门.广州.北京.上海等多个城市举办"2020 Ohayoo游戏开发者沙龙" ...
- 华为大手机 m3 linux,华为平板 M3(青春版10.1英寸 全网通)手机完美获取root教程,最强root工具,亲测可用!...
想要快速获取root权限,就用奇兔刷机.伴随着安卓刷机越来越流行,很多安卓用户都喜欢上了这种可以自定个性系统的行为,那么华为平板 M3(青春版10.1英寸 全网通)怎么ROOT?华为平板 M3(青春版 ...
- 2018麦考林杂志计算机科学,2020年麦考林杂志排名全解析
原标题:2020年麦考林杂志排名全解析 上周在广大同胞们热烈庆祝阿中哥哥70周年生日的期间,加拿大麦考林杂志(Maclean's)悄咪咪地更新了2020年加拿大大学排名!2020年9月入学季的小朋友们 ...
- cf12月9日服务器维护时间,cf12月9、10日全区全服维护更新公告_穿越火线更新公告_7k7k穿越火线...
cf12月9.10日维护更新公告 更新日期:2016-01-02 来源:7k7k 作者:7k7k挽歌 12月9.10日全区全服维护更新公告(已完成) 2015-12-08 23:34: ...
- 华为cmr一al09升级鸿蒙,华为平板 M5 10.8英寸 全网通(CMR-AL09)一键刷机教程,看教程秒懂刷机...
智能手机刷机相信大家已经都不再陌生了,不过对待华为平板 M5 10.8英寸 全网通(CMR-AL09)刷机还是需要非常谨慎操作,因为不当的刷机方法可能导致系统崩溃,带来很大的麻烦.由于不同品牌不同型号 ...
- 2020数学复习全书习题全解【数学一】-李正元
2020数学复习全书习题全解[数学一]-李正元 链接: https://pan.baidu.com/s/1hq2JmXqfNAr8fes3t0z–w 提取码: fxkp 复制这段内容后打开百度网盘手机 ...
最新文章
- java servlet 路径_JavaServlet 路径书写总结
- c语言%f小数位第六位是错的,c语言中输出浮点型数据,如果不指定输出位数,%f输出几位小数?...
- win10系统运行python虚拟环境执行ll_env\Scripts\activate : 无法加载文件的解决方法(亲测有效)
- 高级用户 java_java高级-基本
- Leetcode--23.合并K个排序链表(Java)
- 如何使用Airdrop将视频从Mac发送到iPhone?
- R语言初级教程: NA、Inf、NaN、NULL 特殊值
- 【网摘】ActiveX组件及其注册
- WIN7Activation激活WIN7教程
- axios get请求中文乱码
- 虚拟机无法ping通物理机解决方案
- 十五、Fluent湿空气模拟-组分输运模型
- jsBlob数据转为图片
- 计算机一级vlookup函数的使用方法,电子档Excel中vlookup函数的使用方法(图解详细说明)...
- Android 8.0 - AccountManager之行为变更
- python排序输出人名,005_015 Python 人名按字母排序,首字母分组
- opencv贾老师系列17——人脸识别实战
- PTA 直捣黄龙(30分)
- 南京网预赛 11 BY bly
- mysql靶场_BWVS靶场搭建