记录一下复现代码遇到的问题
pytorch-unet
来源:https://github.com/milesial/Pytorch-UNet
我没有用carvana的数据集,而是用的自己的数据集并且验证集不是像作者的项目从数据集里随机分的,验证集也是我自备的。
配置:数据集大概6K;验证集2K;特别注意的是无论训练集还是验证集image跟mask的尺寸必须要一样,这是硬性要求(我是512*512,scale是0.5,也就是256*256);paython+torch(3.6+1.9)也不一定非要1.9,torch版本好像不能低于1.6吧(记不得了,要是版本太低了用不了amp)1.6到1.9之间应该就行;gpu:rtx2080TI,跑的时候挺快的。大概八千张图片一轮7分钟吧。。项目当中还用到wandb这个module,按百度教程安装就好了,不过注册的时候需要翻墙(只要能打开官网注册就行);
下面是我代码复现的时候遇到的问题:
debug:
AssertionError: Either no mask or multiple masks found for the ID 0008052191_9: []
解决方案:找到了img_file路径,mask file路径找不到。在data_loading里将mask_suffix改为空,如果你的img和mask是一摸一样的名字的话。
RuntimeError: CUDA error: CUBLAS_STATUS_NOT_INITIALIZED when calling `cublasCreate(handle)`
解决方案:是分类标签越界的问题,最终mask是要分0,1的。项目当中数据集mask是0,1。但是我的image跟mask都是0-255,位深度24,所以原项目是只将img除了255,代码中只要将is_mask改成False就好了。
RuntimeError: 1only batches of spatial targets supported (3D tensors) but got targets of size: : [1, 1, 256, 256]
解决方案:这个报错比较明显,可以打印一下自己在求loss的时候的target跟ground truth,将图像尺寸reshape一下(比如:true_mask.reshape(1,256,256)就好了)。同样在验证集的时候也遇到这个问题,同样的解决方法自然就完成了。
wandb.errors.CommError: check_hostname requires server_hostname
解决方案:这个我也不大懂反正大概意思因为我开了翻墙软件,可能wandb那里出现了什么问题,把他关了就好了。
BrokenPipeError: [Errno 32] Broken pipe
解决方案:好像还有是说os:显存太小一类的,将num_workers改成0就好了。
我是用自己的超声数据,将训练集,验证集,测试集放到一轮,大概要训练100轮,只是用来比较dice,所以我还没用到predict来进行分割。
##粗略的讲,batch_size管显存,num_workers管GPU利用率。batch_size设置一般为2-32,num_workers一般为8、16。