xianlin7 / SAMUS

MIT License
152 stars 13 forks source link

数据集问题 #7

Open HEL7777 opened 11 months ago

HEL7777 commented 11 months ago

请问CAMUS这个数据集的图片loss很快为0是怎么回事

HEL7777 commented 11 months ago

是不是camus数据集那里的格式处理不同

HuashengPang commented 10 months ago

请问使用CAMUS数据集时,为什么验证集上的val_dice一直不变??

MacDunno commented 8 months ago

同问啊

xianlin7 commented 7 months ago

请问使用CAMUS数据集时,为什么验证集上的val_dice一直不变??

CAMUS里面含有三个类别,类别和类别之间过度地带特征比较模糊,在确保预处理好的数据集没有问题的情况下,可以从以下两个个方面进行尝试: (1) 单点提示,不同类别之间特征过于相似,同步训练时模型对提示感到蒙圈。可以加入多个点提示(5-20个)试试。(多个数据集进行训练时,数据量更充足,特征更鲁棒,就不存在这个问题) (2)单独微调各个类别,检查模型是否正常训练。batch size=4或8, lr恒定为0.0001,检查点提示是否是256*256尺寸下的坐标点,检查点提示是否进入了提示编码器,检查模型是否对新引入的组件进行了解冻。

songWell commented 3 months ago

请问使用CAMUS数据集时,为什么验证集上的val_dice一直不变??

@HuashengPang 你好,我遇到相同的问题,请问您是如何解决的?我的输出seg都是0

songWell commented 3 months ago

请问使用CAMUS数据集时,为什么验证集上的val_dice一直不变??

CAMUS里面含有三个类别,类别和类别之间过度地带特征比较模糊,在确保预处理好的数据集没有问题的情况下,可以从以下两个个方面进行尝试: (1) 单点提示,不同类别之间特征过于相似,同步训练时模型对提示感到蒙圈。可以加入多个点提示(5-20个)试试。(多个数据集进行训练时,数据量更充足,特征更鲁棒,就不存在这个问题) (2)单独微调各个类别,检查模型是否正常训练。batch size=4或8, lr恒定为0.0001,检查点提示是否是256*256尺寸下的坐标点,检查点提示是否进入了提示编码器,检查模型是否对新引入的组件进行了解冻。

@xianlin7 您好,请问你们是如何预处理CAMUS的数据的,我这边是通过sitk resize到256x256的方式。 def resampleXYSize(sitkImage, new_xsize, new_ysize): ''' newsitkImage = resampleSize(sitkImage, depth=DEPTH) '''

重采样函数

euler3d = sitk.Euler3DTransform()

xsize, ysize, zsize = sitkImage.GetSize()
xspacing, yspacing, zspacing = sitkImage.GetSpacing()
new_spacing_x = xspacing/(new_xsize/float(xsize))
new_spacing_y = yspacing/(new_ysize/float(ysize))

origin = sitkImage.GetOrigin()
direction = sitkImage.GetDirection()
#根据新的spacing 计算新的size
newsize = (new_xsize,new_ysize,zsize)
newspace = (new_spacing_x, new_spacing_y, zspacing)
sitkImage = sitk.Resample(sitkImage,newsize,euler3d,sitk.sitkNearestNeighbor,origin,newspace,direction)
return sitkImage
songWell commented 3 months ago

@xianlin7 你好,请问CAMUS的eval_model是camusmulti吗?是否应该改为mask_slice? 如果确实是使用camusmulti?请问evaluation.py的eval_camus_patient是什么作用? predict = F.softmax(pred['masks'], dim=1) pred = predict.detach().cpu().numpy() # (b, c, h, w) seg = np.argmax(pred, axis=1)

songWell commented 3 months ago

@xianlin7 你好,请问CAMUS的eval_model是camusmulti吗?是否应该改为mask_slice? 如果确实是使用camusmulti?请问evaluation.py的eval_camus_patient是什么作用? predict = F.softmax(pred['masks'], dim=1) pred = predict.detach().cpu().numpy() # (b, c, h, w) seg = np.argmax(pred, axis=1)

哦哦,这个eval_camus_patient应该是用于多类别的吧。但目前SAMUS在camus上的输出是单层的,并且使用的CAMUS是单类别训练的,应该要换成其他eval_model吧。