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

Multiple timepoints for each patient #2688

Closed
rorro6787 opened this issue Feb 3, 2025 · 1 comment
Closed

Multiple timepoints for each patient #2688

rorro6787 opened this issue Feb 3, 2025 · 1 comment
Assignees

Comments

@rorro6787
Copy link

I was reading the documentation on how to prepare the data for the nnunet v2 and it says that if for example i have 3 input channels (flair, t1, t2) i should structure my data the following way:

nnUNet_raw/Dataset002_Heart/
├── dataset.json
├── imagesTr
│   ├── la_003_0000.nii.gz
│   ├── la_004_0000.nii.gz
│   ├── ...
├── imagesTs
│   ├── la_001_0000.nii.gz
│   ├── la_002_0000.nii.gz
│   ├── ...
└── labelsTr
├── la_003.nii.gz
├── la_004.nii.gz
├── ...

Being 001, 002, 003 the patients id and 0000 in this case the input channel. But what happens if in my dataset I have several timepoints for each patient?

The question is pertinent because if i want to use the fold training of the model it must ensure that in each fold the timepoints of the same patients remain in the same fold, but how can I manage that when organizing the data?

@rorro6787
Copy link
Author

I oppened this issue because it was my first time using the nnUNet and did not read the documentation throughly. If anybody has the same question as me, the solution is to do your personalized fold split inside the preprocessed folder within the dataset you working with. For instance:

[
    {
        "train": [
            "BRATS_1", "BRATS_2", "BRATS_3", "BRATS_4", "BRATS_5", "BRATS_6", "BRATS_7", "BRATS_8", "BRATS_9", "BRATS_10", "BRATS_11", "BRATS_12", "BRATS_13", "BRATS_14", "BRATS_15", "BRATS_16", "BRATS_17", "BRATS_18", "BRATS_19", "BRATS_20", "BRATS_21", "BRATS_22", "BRATS_23", "BRATS_24", "BRATS_25", "BRATS_26", "BRATS_27", "BRATS_28", "BRATS_29", "BRATS_30", "BRATS_31", "BRATS_32", "BRATS_33", "BRATS_34", "BRATS_35", "BRATS_36", "BRATS_37", "BRATS_38", "BRATS_39", "BRATS_40", "BRATS_41", "BRATS_42", "BRATS_43", "BRATS_44", "BRATS_45", "BRATS_46", "BRATS_47", "BRATS_48", "BRATS_49", "BRATS_50", "BRATS_51", "BRATS_52", "BRATS_53", "BRATS_54", "BRATS_55", "BRATS_56", "BRATS_57", "BRATS_58", "BRATS_59", "BRATS_60", "BRATS_61", "BRATS_62", "BRATS_63", "BRATS_64", "BRATS_65", "BRATS_66", "BRATS_67", "BRATS_68", "BRATS_69", "BRATS_70"
        ],
        "val": [
            "BRATS_71", "BRATS_72", "BRATS_73", "BRATS_74", "BRATS_75","BRATS_76", "BRATS_77", "BRATS_78", "BRATS_79", "BRATS_80", "BRATS_81", "BRATS_82", "BRATS_83", "BRATS_84", "BRATS_85", "BRATS_86", "BRATS_87"
        ]
    },
    {
        "train": [
            "BRATS_1", "BRATS_2", "BRATS_3", "BRATS_4", "BRATS_5", "BRATS_6", "BRATS_7", "BRATS_8", "BRATS_9", "BRATS_10", "BRATS_11", "BRATS_12", "BRATS_13", "BRATS_14", "BRATS_15", "BRATS_16", "BRATS_17", "BRATS_18", "BRATS_19", "BRATS_20", "BRATS_21", "BRATS_22", "BRATS_23", "BRATS_24", "BRATS_25", "BRATS_26", "BRATS_27", "BRATS_28", "BRATS_29", "BRATS_30", "BRATS_31", "BRATS_32", "BRATS_33", "BRATS_34", "BRATS_35", "BRATS_36", "BRATS_37", "BRATS_38", "BRATS_39", "BRATS_40", "BRATS_41", "BRATS_42", "BRATS_43", "BRATS_44", "BRATS_45", "BRATS_46", "BRATS_47", "BRATS_48", "BRATS_49", "BRATS_50", "BRATS_51", "BRATS_52", "BRATS_53", "BRATS_71", "BRATS_72", "BRATS_73", "BRATS_74", "BRATS_75","BRATS_76", "BRATS_77", "BRATS_78", "BRATS_79", "BRATS_80", "BRATS_81", "BRATS_82", "BRATS_83", "BRATS_84", "BRATS_85", "BRATS_86", "BRATS_87"
        ],
        "val": [
            "BRATS_54", "BRATS_55", "BRATS_56", "BRATS_57", "BRATS_58", "BRATS_59", "BRATS_60", "BRATS_61", "BRATS_62", "BRATS_63", "BRATS_64", "BRATS_65", "BRATS_66", "BRATS_67", "BRATS_68", "BRATS_69", "BRATS_70"
        ]
    },
    {
        "train": [
            "BRATS_20", "BRATS_21", "BRATS_22", "BRATS_23", "BRATS_24", "BRATS_25", "BRATS_26", "BRATS_27", "BRATS_28", "BRATS_29", "BRATS_30", "BRATS_31", "BRATS_32", "BRATS_33", "BRATS_34", "BRATS_35", "BRATS_36", "BRATS_37", "BRATS_38", "BRATS_39", "BRATS_40", "BRATS_41", "BRATS_42", "BRATS_43", "BRATS_44", "BRATS_45", "BRATS_46", "BRATS_47", "BRATS_48", "BRATS_49", "BRATS_50", "BRATS_51", "BRATS_52", "BRATS_53", "BRATS_54", "BRATS_55", "BRATS_56", "BRATS_57", "BRATS_58", "BRATS_59", "BRATS_60", "BRATS_61", "BRATS_62", "BRATS_63", "BRATS_64", "BRATS_65", "BRATS_66", "BRATS_67", "BRATS_68", "BRATS_69", "BRATS_70", "BRATS_71", "BRATS_72", "BRATS_73", "BRATS_74", "BRATS_75","BRATS_76", "BRATS_77", "BRATS_78", "BRATS_79", "BRATS_80", "BRATS_81", "BRATS_82", "BRATS_83", "BRATS_84", "BRATS_85", "BRATS_86", "BRATS_87"
        ],
        "val": [
            "BRATS_1", "BRATS_2", "BRATS_3", "BRATS_4", "BRATS_5", "BRATS_6", "BRATS_7", "BRATS_8", "BRATS_9", "BRATS_10", "BRATS_11", "BRATS_12", "BRATS_13", "BRATS_14", "BRATS_15", "BRATS_16", "BRATS_17", "BRATS_18", "BRATS_19"
        ]
    },
    {
        "train": [
            "BRATS_1", "BRATS_2", "BRATS_3", "BRATS_4", "BRATS_5", "BRATS_6", "BRATS_7", "BRATS_8", "BRATS_9", "BRATS_10", "BRATS_11", "BRATS_12", "BRATS_13", "BRATS_14", "BRATS_15", "BRATS_16", "BRATS_17", "BRATS_18", "BRATS_19", "BRATS_37", "BRATS_38", "BRATS_39", "BRATS_40", "BRATS_41", "BRATS_42", "BRATS_43", "BRATS_44", "BRATS_45", "BRATS_46", "BRATS_47", "BRATS_48", "BRATS_49", "BRATS_50", "BRATS_51", "BRATS_52", "BRATS_53", "BRATS_54", "BRATS_55", "BRATS_56", "BRATS_57", "BRATS_58", "BRATS_59", "BRATS_60", "BRATS_61", "BRATS_62", "BRATS_63", "BRATS_64", "BRATS_65", "BRATS_66", "BRATS_67", "BRATS_68", "BRATS_69", "BRATS_70", "BRATS_71", "BRATS_72", "BRATS_73", "BRATS_74", "BRATS_75","BRATS_76", "BRATS_77", "BRATS_78", "BRATS_79", "BRATS_80", "BRATS_81", "BRATS_82", "BRATS_83", "BRATS_84", "BRATS_85", "BRATS_86", "BRATS_87"
        ],
        "val": [
            "BRATS_20", "BRATS_21", "BRATS_22", "BRATS_23", "BRATS_24", "BRATS_25", "BRATS_26", "BRATS_27", "BRATS_28", "BRATS_29", "BRATS_30", "BRATS_31", "BRATS_32", "BRATS_33", "BRATS_34", "BRATS_35", "BRATS_36"
        ]
    },
    {
        "train": [
            "BRATS_1", "BRATS_2", "BRATS_3", "BRATS_4", "BRATS_5", "BRATS_6", "BRATS_7", "BRATS_8", "BRATS_9", "BRATS_10", "BRATS_11", "BRATS_12", "BRATS_13", "BRATS_14", "BRATS_15", "BRATS_16", "BRATS_17", "BRATS_18", "BRATS_19", "BRATS_20", "BRATS_21", "BRATS_22", "BRATS_23", "BRATS_24", "BRATS_25", "BRATS_26", "BRATS_27", "BRATS_28", "BRATS_29", "BRATS_30", "BRATS_31", "BRATS_32", "BRATS_33", "BRATS_34", "BRATS_35", "BRATS_36", "BRATS_54", "BRATS_55", "BRATS_56", "BRATS_57", "BRATS_58", "BRATS_59", "BRATS_60", "BRATS_61", "BRATS_62", "BRATS_63", "BRATS_64", "BRATS_65", "BRATS_66", "BRATS_67", "BRATS_68", "BRATS_69", "BRATS_70", "BRATS_71", "BRATS_72", "BRATS_73", "BRATS_74", "BRATS_75","BRATS_76", "BRATS_77", "BRATS_78", "BRATS_79", "BRATS_80", "BRATS_81", "BRATS_82", "BRATS_83", "BRATS_84", "BRATS_85", "BRATS_86", "BRATS_87"
        ],
        "val": [
            "BRATS_37", "BRATS_38", "BRATS_39", "BRATS_40", "BRATS_41", "BRATS_42", "BRATS_43", "BRATS_44", "BRATS_45", "BRATS_46", "BRATS_47", "BRATS_48", "BRATS_49", "BRATS_50", "BRATS_51", "BRATS_52", "BRATS_53"
        ]
    }
]

You just need to know which (in my case), "BRATS_ID" correspond to every patient and timepoint (when you preprocess the dataset, you need to create a structure from which you get that information".

The nnUNet API, will use your custom splits_final.json

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

2 participants