Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

修改模型参数 #34

Open
Candy13573 opened this issue May 28, 2024 · 14 comments
Open

修改模型参数 #34

Candy13573 opened this issue May 28, 2024 · 14 comments

Comments

@Candy13573
Copy link

您好!麻烦问一下您,如果在3_train.py line 41,42 将输入输出的通道数改为3,对应的应该修改模型代码中哪些参数?
我将新的数据用于训练,但只有3个模态。
非常感谢!

@Candy13573
Copy link
Author

或是不需要修改,只需修改3_train.py line 41,42 将输入输出的通道数改为3即可?

@Candy13573
Copy link
Author

还有一个问题麻烦您,我使用的数据的标签的是200,500....之类的,并非BraTS中的1,2,3,那在3_train.py中line 70
result = [(labels == 1) | (labels == 3), (labels == 1) | (labels == 3) | (labels == 2), labels == 3]
是否应该修改成result = [labels == 200, labels == 500...] 类似这样?以及line 111 c =3 是否也应该设置为标签的个数?
谢谢!

@ge-xing
Copy link
Owner

ge-xing commented May 29, 2024

输入通道改为3即可,不需要修改其他代码。

如果你有三个标签,200 500 700,那么训练的时候你需要把200变成1 500 变成2 700变成3 这样才行。

@Candy13573
Copy link
Author

那出现类似Assertion t >= 0 && t < n_classes failed. 这样的错误是否是 c 的值设置错误导致的?
我有五个标签,是否要改为 c = 5?
非常感谢您的解答!

@ge-xing
Copy link
Owner

ge-xing commented May 29, 2024

c是什么? 你这个错误就是标签不对

@Candy13573
Copy link
Author

嗯好的,已经解决了,非常感谢!

@wakakaFF
Copy link

那出现类似Assertion t >= 0 && t < n_classes failed. 这样的错误是否是 c 的值设置错误导致的? 我有五个标签,是否要改为 c = 5? 非常感谢您的解答!

你好,请问你是怎么解决?

@Candy13573
Copy link
Author

那出现类似Assertion t >= 0 && t < n_classes failed. 这样的错误是否是 c 的值设置错误导致的? 我有五个标签,是否要改为 c = 5? 非常感谢您的解答!

你好,请问你是怎么解决?

是“Assertion t >= 0 && t < n_classes failed.”这个问题么?应该是in_chans和out_chans的参数设置问题,in_chans是你输入的图像序列总数,out_chans是要分类的个数,加上背景

@wakakaFF
Copy link

那出现类似Assertion t >= 0 && t < n_classes failed. 这样的错误是否是 c 的值设置错误导致的? 我有五个标签,是否要改为 c = 5? 非常感谢您的解答!

你好,请问你是怎么解决?

是“Assertion t >= 0 && t < n_classes failed.”这个问题么?应该是in_chans和out_chans的参数设置问题,in_chans是你输入的图像序列总数,out_chans是要分类的个数,加上背景

好的谢谢。

@NetfriendT
Copy link

还有一个问题麻烦您,我使用的数据的标签的是200,500....之类的,并非BraTS中的1,2,3,那在3_train.py中line 70 result = [(labels == 1) | (labels == 3), (labels == 1) | (labels == 3) | (labels == 2), labels == 3] 是否应该修改成result = [labels == 200, labels == 500...] 类似这样?以及line 111 c =3 是否也应该设置为标签的个数? 谢谢!

您好,我想请教一下换数据集方面的问题。我最近想试试actc数据集,文件夹大概是这样的。

我是应该按照原代码操作把三个影像以及两个seg合在一起吗?但我感觉这是不同时期的图像和seg应该不能随便合在一起。我是否应该只取patient001_frame01.nii.gz和patient001_frame01_gt.nii.gz进行训练?或者把patient001_4d.nii.gz和patient001_frame01.nii.gz合起来用patient001_frame01_gt.nii.gz作为seg训练?
另外您说的标签是200,500这种是怎么查看的呢,怎么知道自己标签的这种数据呢?
1719541508232
1719541569216

@wakakaFF
Copy link

还有一个问题麻烦您,我使用的数据的标签的是200,500....之类的,并非BraTS中的1,2,3,那在3_train.py中line 70 result = [(labels == 1) | (labels == 3), (labels == 1) | (labels == 3) | (labels == 2), labels == 3] 是否应该修改成result = [labels == 200, labels == 500...] 类似这样?以及line 111 c =3 是否也应该设置为标签的个数? 谢谢!

您好,我想请教一下换数据集方面的问题。我最近想试试actc数据集,文件夹大概是这样的。

我是应该按照原代码操作把三个影像以及两个seg合在一起吗?但我感觉这是不同时期的图像和seg应该不能随便合在一起。我是否应该只取patient001_frame01.nii.gz和patient001_frame01_gt.nii.gz进行训练?或者把patient001_4d.nii.gz和patient001_frame01.nii.gz合起来用patient001_frame01_gt.nii.gz作为seg训练? 另外您说的标签是200,500这种是怎么查看的呢,怎么知道自己标签的这种数据呢? 1719541508232 1719541569216

以我的理解。既然是不同时期的图像,我认为应当把patient001_4d.nii.gz和patient001_frame01.nii.gz合起来用patient001_frame01_gt.nii.gz作为seg训练,也就是模型in_channels=2。其次,你的seg图像应当只是分割出肿瘤(单器官),那么你的输出通道应该为2(因为我从代码的loss上看,输出的并不是分割出来的三维图像,而是对每个标签的概率),例如你的seg标签有0,1,2(对应两个器官和背景),其中1,2对应两个部位(器官),0对应的是背景。那么输出的三个通道,第一个通道对应的是多器官分割中第某个像素点对应为背景0的概率,第二个通道对应为1个概率,第三个通道对应为2的概率。最终的seg图像的每个像素点的类别是取这三个通道上概率最大的那个。在此之前,如果你的seg label仅为单器官分割,你需要把seg里分割出来的值改为1(背景为0)。你可以通过np.unique(seg_label)来查看你的seg_label的标签值(正常来说对于单器官应该为[0., X.],X为seg里数据集设置的值)。你可以通过类似这样的代码来修改标签值。
image
希望我的回答能够帮助到你,如果有回答的不清楚的地方导致你还有疑问可以随时提问。

@NetfriendT
Copy link

NetfriendT commented Jun 28, 2024

1719543043405
1719543055552
1719543838537
1719543068550
@wakakaFF
感谢你的回答,我想法和你相似,我也认为应该把patient001_4d.nii.gz和patient001_frame01.nii.gz合起来用,因为从图像来看patient001_4d.nii.gz和patient001_frame01.nii.gz的切片一模一样,和第二时期的相差较大。
此外对于[(labels == 1) | (labels == 3), (labels == 1) | (labels == 3) | (labels == 2), labels == 3] 这行代码我还是不理解。1.2.3指的是某种标签图像的像素的什么属性数值吗?数值为1和3的像素表示一种肿瘤(或器官)区域?我之前以为1.2.3.或者200.500之类的是类似灰度值一样的东西,靠不同的数值划出三个区域,但现在来看这三个数值要匹配上两个才能划分出一个区域。但对于这个数值具体指什么我还是不明白。
另外这个标签和论文使用的Bra数据集一样也是划分三个区域的,我能直接使用1.2.3.吗,还是做什么修改?我想或许要用你说的np.unique(seg_label)来查看三个区域的标签值来修改[(labels == 1) | (labels == 3), (labels == 1) | (labels == 3) | (labels == 2), labels == 3] ?

@wakakaFF
Copy link

首先,我先假设你已经修改好了seg_label里的标签值,np.unique(seg_label)= [0., 1., 2., 3.]。其中0代表背景,1代表器官1,2代表器官2,3代表器官3。
其次,针对“[(labels == 1) | (labels == 3), (labels == 1) | (labels == 3) | (labels == 2), labels == 3]”这行代码的理解。正如我之前所说,模型的输出并不是分割出来的结果,而是一个三维图像中每个像素点属于哪个器官的概率值。也就是说模型的输出其实是一个多器官分割图,需要把这个多器官分割图分化成多个单器官分割图。因为brats数据集的特殊性,label里的分割区域并不是所需要分割出来的区域,这里举个例子来说比较好理解,假设数据里的img是一个人全身照,而seg_label的分割标签却不是以人为一个整体,而是以头(1),躯干(2),四肢(3)三个独立的部分。这里的label的设置和任务具体的任务有关,如把一个多部位分割图划分为只有头[labels==1],全身的[labels==1|labels==2|labels==3],只有四肢和头的[labels==1|labels==3]。如果你的任务是划分出多个单独的器官,只需要设置[labels==1|labels==2|labels==3]即可。
最后,如果seg_label里的标签值不是1,2,3需要改成1,2,3。
image
因为3_train.py里的第98行的作用就是将输出概率最大的那个通道值赋给预测seg_label。(如第一个像素点在通道2的概率最大),那就把2赋给这个多器官分割预测图。具体理解代码可以多print输出看看。

@NetfriendT
Copy link

首先,我先假设你已经修改好了seg_label里的标签值,np.unique(seg_label)= [0., 1., 2., 3.]。其中0代表背景,1代表器官1,2代表器官2,3代表器官3。 其次,针对“[(labels == 1) | (labels == 3), (labels == 1) | (labels == 3) | (labels == 2), labels == 3]”这行代码的理解。正如我之前所说,模型的输出并不是分割出来的结果,而是一个三维图像中每个像素点属于哪个器官的概率值。也就是说模型的输出其实是一个多器官分割图,需要把这个多器官分割图分化成多个单器官分割图。因为brats数据集的特殊性,label里的分割区域并不是所需要分割出来的区域,这里举个例子来说比较好理解,假设数据里的img是一个人全身照,而seg_label的分割标签却不是以人为一个整体,而是以头(1),躯干(2),四肢(3)三个独立的部分。这里的label的设置和任务具体的任务有关,如把一个多部位分割图划分为只有头[labels==1],全身的[labels==1|labels==2|labels==3],只有四肢和头的[labels==1|labels==3]。如果你的任务是划分出多个单独的器官,只需要设置[labels==1|labels==2|labels==3]即可。 最后,如果seg_label里的标签值不是1,2,3需要改成1,2,3。 image 因为3_train.py里的第98行的作用就是将输出概率最大的那个通道值赋给预测seg_label。(如第一个像素点在通道2的概率最大),那就把2赋给这个多器官分割预测图。具体理解代码可以多print输出看看。

好的我完全明白你的意思了,感谢你的意见!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

4 participants