diff --git a/pyproject.toml b/pyproject.toml
index f22d566a950755597aac41eb69394dec6795c3cc..40c7a8fa9a3d711559986859225487b78887fedb 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -118,27 +118,27 @@ montgomery_rs_f8 = "ptbench.configs.datasets.montgomery_RS.fold_8"
 montgomery_rs_f9 = "ptbench.configs.datasets.montgomery_RS.fold_9"
 # shenzhen dataset (and cross-validation folds)
 shenzhen = "ptbench.data.shenzhen.default"
-shenzhen_rgb = "ptbench.configs.datasets.shenzhen.rgb"
-shenzhen_f0 = "ptbench.configs.datasets.shenzhen.fold_0"
-shenzhen_f1 = "ptbench.configs.datasets.shenzhen.fold_1"
-shenzhen_f2 = "ptbench.configs.datasets.shenzhen.fold_2"
-shenzhen_f3 = "ptbench.configs.datasets.shenzhen.fold_3"
-shenzhen_f4 = "ptbench.configs.datasets.shenzhen.fold_4"
-shenzhen_f5 = "ptbench.configs.datasets.shenzhen.fold_5"
-shenzhen_f6 = "ptbench.configs.datasets.shenzhen.fold_6"
-shenzhen_f7 = "ptbench.configs.datasets.shenzhen.fold_7"
-shenzhen_f8 = "ptbench.configs.datasets.shenzhen.fold_8"
-shenzhen_f9 = "ptbench.configs.datasets.shenzhen.fold_9"
-shenzhen_f0_rgb = "ptbench.configs.datasets.shenzhen.fold_0_rgb"
-shenzhen_f1_rgb = "ptbench.configs.datasets.shenzhen.fold_1_rgb"
-shenzhen_f2_rgb = "ptbench.configs.datasets.shenzhen.fold_2_rgb"
-shenzhen_f3_rgb = "ptbench.configs.datasets.shenzhen.fold_3_rgb"
-shenzhen_f4_rgb = "ptbench.configs.datasets.shenzhen.fold_4_rgb"
-shenzhen_f5_rgb = "ptbench.configs.datasets.shenzhen.fold_5_rgb"
-shenzhen_f6_rgb = "ptbench.configs.datasets.shenzhen.fold_6_rgb"
-shenzhen_f7_rgb = "ptbench.configs.datasets.shenzhen.fold_7_rgb"
-shenzhen_f8_rgb = "ptbench.configs.datasets.shenzhen.fold_8_rgb"
-shenzhen_f9_rgb = "ptbench.configs.datasets.shenzhen.fold_9_rgb"
+shenzhen_rgb = "ptbench.data.shenzhen.rgb"
+shenzhen_f0 = "ptbench.data.shenzhen.fold_0"
+shenzhen_f1 = "ptbench.data.shenzhen.fold_1"
+shenzhen_f2 = "ptbench.data.shenzhen.fold_2"
+shenzhen_f3 = "ptbench.data.shenzhen.fold_3"
+shenzhen_f4 = "ptbench.data.shenzhen.fold_4"
+shenzhen_f5 = "ptbench.data.shenzhen.fold_5"
+shenzhen_f6 = "ptbench.data.shenzhen.fold_6"
+shenzhen_f7 = "ptbench.data.shenzhen.fold_7"
+shenzhen_f8 = "ptbench.data.shenzhen.fold_8"
+shenzhen_f9 = "ptbench.data.shenzhen.fold_9"
+shenzhen_f0_rgb = "ptbench.data.shenzhen.fold_0_rgb"
+shenzhen_f1_rgb = "ptbench.data.shenzhen.fold_1_rgb"
+shenzhen_f2_rgb = "ptbench.data.shenzhen.fold_2_rgb"
+shenzhen_f3_rgb = "ptbench.data.shenzhen.fold_3_rgb"
+shenzhen_f4_rgb = "ptbench.data.shenzhen.fold_4_rgb"
+shenzhen_f5_rgb = "ptbench.data.shenzhen.fold_5_rgb"
+shenzhen_f6_rgb = "ptbench.data.shenzhen.fold_6_rgb"
+shenzhen_f7_rgb = "ptbench.data.shenzhen.fold_7_rgb"
+shenzhen_f8_rgb = "ptbench.data.shenzhen.fold_8_rgb"
+shenzhen_f9_rgb = "ptbench.data.shenzhen.fold_9_rgb"
 # extended shenzhen dataset (with radiological signs)
 shenzhen_rs = "ptbench.configs.datasets.shenzhen_RS.default"
 shenzhen_rs_f0 = "ptbench.configs.datasets.shenzhen_RS.fold_0"
diff --git a/src/ptbench/configs/datasets/shenzhen/__init__.py b/src/ptbench/configs/datasets/shenzhen/__init__.py
deleted file mode 100644
index 9c08f77763b977fb576dc408d4ef48ba89daa17e..0000000000000000000000000000000000000000
--- a/src/ptbench/configs/datasets/shenzhen/__init__.py
+++ /dev/null
@@ -1,29 +0,0 @@
-# SPDX-FileCopyrightText: Copyright © 2023 Idiap Research Institute <contact@idiap.ch>
-#
-# SPDX-License-Identifier: GPL-3.0-or-later
-
-
-def _maker(protocol, resize_size=512, cc_size=512, RGB=False):
-    from torchvision import transforms
-
-    from ....data.shenzhen import dataset as raw
-    from ....data.transforms import ElasticDeformation, RemoveBlackBorders
-    from .. import make_dataset as mk
-
-    post_transforms = []
-    if RGB:
-        post_transforms = [
-            transforms.Lambda(lambda x: x.convert("RGB")),
-            transforms.ToTensor(),
-        ]
-
-    return mk(
-        [raw.subsets(protocol)],
-        [
-            RemoveBlackBorders(),
-            transforms.Resize(resize_size),
-            transforms.CenterCrop(cc_size),
-        ],
-        [ElasticDeformation(p=0.8)],
-        post_transforms,
-    )
diff --git a/src/ptbench/configs/datasets/shenzhen/fold_0.py b/src/ptbench/configs/datasets/shenzhen/fold_0.py
deleted file mode 100644
index 845623a069029925303768b568c7427d3a3c8eec..0000000000000000000000000000000000000000
--- a/src/ptbench/configs/datasets/shenzhen/fold_0.py
+++ /dev/null
@@ -1,14 +0,0 @@
-# SPDX-FileCopyrightText: Copyright © 2023 Idiap Research Institute <contact@idiap.ch>
-#
-# SPDX-License-Identifier: GPL-3.0-or-later
-
-"""Shenzhen dataset for TB detection (cross validation fold 0)
-
-* Split reference: first 80% of TB and healthy CXR for "train", rest for "test"
-* This configuration resolution: 512 x 512 (default)
-* See :py:mod:`ptbench.data.shenzhen` for dataset details
-"""
-
-from . import _maker
-
-dataset = _maker("fold_0")
diff --git a/src/ptbench/configs/datasets/shenzhen/fold_0_rgb.py b/src/ptbench/configs/datasets/shenzhen/fold_0_rgb.py
deleted file mode 100644
index b0f33f899a0b9903be863921fde9192e2ab74235..0000000000000000000000000000000000000000
--- a/src/ptbench/configs/datasets/shenzhen/fold_0_rgb.py
+++ /dev/null
@@ -1,14 +0,0 @@
-# SPDX-FileCopyrightText: Copyright © 2023 Idiap Research Institute <contact@idiap.ch>
-#
-# SPDX-License-Identifier: GPL-3.0-or-later
-
-"""Shenzhen dataset for TB detection (cross validation fold 0, RGB)
-
-* Split reference: first 80% of TB and healthy CXR for "train", rest for "test"
-* This configuration resolution: 512 x 512 (default)
-* See :py:mod:`ptbench.data.shenzhen` for dataset details
-"""
-
-from . import _maker
-
-dataset = _maker("fold_0", RGB=True)
diff --git a/src/ptbench/configs/datasets/shenzhen/fold_1.py b/src/ptbench/configs/datasets/shenzhen/fold_1.py
deleted file mode 100644
index 898e2d186d5736d4bd903e7c11005e54e1c834a0..0000000000000000000000000000000000000000
--- a/src/ptbench/configs/datasets/shenzhen/fold_1.py
+++ /dev/null
@@ -1,14 +0,0 @@
-# SPDX-FileCopyrightText: Copyright © 2023 Idiap Research Institute <contact@idiap.ch>
-#
-# SPDX-License-Identifier: GPL-3.0-or-later
-
-"""Shenzhen dataset for TB detection (cross validation fold 1)
-
-* Split reference: first 80% of TB and healthy CXR for "train", rest for "test"
-* This configuration resolution: 512 x 512 (default)
-* See :py:mod:`ptbench.data.shenzhen` for dataset details
-"""
-
-from . import _maker
-
-dataset = _maker("fold_1")
diff --git a/src/ptbench/configs/datasets/shenzhen/fold_1_rgb.py b/src/ptbench/configs/datasets/shenzhen/fold_1_rgb.py
deleted file mode 100644
index c241f1e98576cb62dca54c17541430accefa1828..0000000000000000000000000000000000000000
--- a/src/ptbench/configs/datasets/shenzhen/fold_1_rgb.py
+++ /dev/null
@@ -1,14 +0,0 @@
-# SPDX-FileCopyrightText: Copyright © 2023 Idiap Research Institute <contact@idiap.ch>
-#
-# SPDX-License-Identifier: GPL-3.0-or-later
-
-"""Shenzhen dataset for TB detection (cross validation fold 1, RGB)
-
-* Split reference: first 80% of TB and healthy CXR for "train", rest for "test"
-* This configuration resolution: 512 x 512 (default)
-* See :py:mod:`ptbench.data.shenzhen` for dataset details
-"""
-
-from . import _maker
-
-dataset = _maker("fold_1", RGB=True)
diff --git a/src/ptbench/configs/datasets/shenzhen/fold_2.py b/src/ptbench/configs/datasets/shenzhen/fold_2.py
deleted file mode 100644
index 42ba926ce06d61cb9e7b3d3c40e6b4e26e670434..0000000000000000000000000000000000000000
--- a/src/ptbench/configs/datasets/shenzhen/fold_2.py
+++ /dev/null
@@ -1,14 +0,0 @@
-# SPDX-FileCopyrightText: Copyright © 2023 Idiap Research Institute <contact@idiap.ch>
-#
-# SPDX-License-Identifier: GPL-3.0-or-later
-
-"""Shenzhen dataset for TB detection (cross validation fold 2)
-
-* Split reference: first 80% of TB and healthy CXR for "train", rest for "test"
-* This configuration resolution: 512 x 512 (default)
-* See :py:mod:`ptbench.data.shenzhen` for dataset details
-"""
-
-from . import _maker
-
-dataset = _maker("fold_2")
diff --git a/src/ptbench/configs/datasets/shenzhen/fold_2_rgb.py b/src/ptbench/configs/datasets/shenzhen/fold_2_rgb.py
deleted file mode 100644
index 22c9cf5ba42e407220e44c1a9cb4cda88383658c..0000000000000000000000000000000000000000
--- a/src/ptbench/configs/datasets/shenzhen/fold_2_rgb.py
+++ /dev/null
@@ -1,14 +0,0 @@
-# SPDX-FileCopyrightText: Copyright © 2023 Idiap Research Institute <contact@idiap.ch>
-#
-# SPDX-License-Identifier: GPL-3.0-or-later
-
-"""Shenzhen dataset for TB detection (cross validation fold 2, RGB)
-
-* Split reference: first 80% of TB and healthy CXR for "train", rest for "test"
-* This configuration resolution: 512 x 512 (default)
-* See :py:mod:`ptbench.data.shenzhen` for dataset details
-"""
-
-from . import _maker
-
-dataset = _maker("fold_2", RGB=True)
diff --git a/src/ptbench/configs/datasets/shenzhen/fold_3.py b/src/ptbench/configs/datasets/shenzhen/fold_3.py
deleted file mode 100644
index a6ab11381f19d90061267bbfb5e0e9d3010f1fc2..0000000000000000000000000000000000000000
--- a/src/ptbench/configs/datasets/shenzhen/fold_3.py
+++ /dev/null
@@ -1,14 +0,0 @@
-# SPDX-FileCopyrightText: Copyright © 2023 Idiap Research Institute <contact@idiap.ch>
-#
-# SPDX-License-Identifier: GPL-3.0-or-later
-
-"""Shenzhen dataset for TB detection (cross validation fold 3)
-
-* Split reference: first 80% of TB and healthy CXR for "train", rest for "test"
-* This configuration resolution: 512 x 512 (default)
-* See :py:mod:`ptbench.data.shenzhen` for dataset details
-"""
-
-from . import _maker
-
-dataset = _maker("fold_3")
diff --git a/src/ptbench/configs/datasets/shenzhen/fold_3_rgb.py b/src/ptbench/configs/datasets/shenzhen/fold_3_rgb.py
deleted file mode 100644
index 91de9febf6ffe192c75ccf0a36f67116ccb3c9e8..0000000000000000000000000000000000000000
--- a/src/ptbench/configs/datasets/shenzhen/fold_3_rgb.py
+++ /dev/null
@@ -1,14 +0,0 @@
-# SPDX-FileCopyrightText: Copyright © 2023 Idiap Research Institute <contact@idiap.ch>
-#
-# SPDX-License-Identifier: GPL-3.0-or-later
-
-"""Shenzhen dataset for TB detection (cross validation fold 3, RGB)
-
-* Split reference: first 80% of TB and healthy CXR for "train", rest for "test"
-* This configuration resolution: 512 x 512 (default)
-* See :py:mod:`ptbench.data.shenzhen` for dataset details
-"""
-
-from . import _maker
-
-dataset = _maker("fold_3", RGB=True)
diff --git a/src/ptbench/configs/datasets/shenzhen/fold_4.py b/src/ptbench/configs/datasets/shenzhen/fold_4.py
deleted file mode 100644
index a9f29e1ca8984be63d189e8ba79c3a9f53fffd95..0000000000000000000000000000000000000000
--- a/src/ptbench/configs/datasets/shenzhen/fold_4.py
+++ /dev/null
@@ -1,14 +0,0 @@
-# SPDX-FileCopyrightText: Copyright © 2023 Idiap Research Institute <contact@idiap.ch>
-#
-# SPDX-License-Identifier: GPL-3.0-or-later
-
-"""Shenzhen dataset for TB detection (cross validation fold 4)
-
-* Split reference: first 80% of TB and healthy CXR for "train", rest for "test"
-* This configuration resolution: 512 x 512 (default)
-* See :py:mod:`ptbench.data.shenzhen` for dataset details
-"""
-
-from . import _maker
-
-dataset = _maker("fold_4")
diff --git a/src/ptbench/configs/datasets/shenzhen/fold_4_rgb.py b/src/ptbench/configs/datasets/shenzhen/fold_4_rgb.py
deleted file mode 100644
index ca6436204f6ab33e26f8d74a98ae579dbb73da6a..0000000000000000000000000000000000000000
--- a/src/ptbench/configs/datasets/shenzhen/fold_4_rgb.py
+++ /dev/null
@@ -1,14 +0,0 @@
-# SPDX-FileCopyrightText: Copyright © 2023 Idiap Research Institute <contact@idiap.ch>
-#
-# SPDX-License-Identifier: GPL-3.0-or-later
-
-"""Shenzhen dataset for TB detection (cross validation fold 4, RGB)
-
-* Split reference: first 80% of TB and healthy CXR for "train", rest for "test"
-* This configuration resolution: 512 x 512 (default)
-* See :py:mod:`ptbench.data.shenzhen` for dataset details
-"""
-
-from . import _maker
-
-dataset = _maker("fold_4", RGB=True)
diff --git a/src/ptbench/configs/datasets/shenzhen/fold_5.py b/src/ptbench/configs/datasets/shenzhen/fold_5.py
deleted file mode 100644
index e5d61914f25148c8e07d2955cad71491f373a68e..0000000000000000000000000000000000000000
--- a/src/ptbench/configs/datasets/shenzhen/fold_5.py
+++ /dev/null
@@ -1,14 +0,0 @@
-# SPDX-FileCopyrightText: Copyright © 2023 Idiap Research Institute <contact@idiap.ch>
-#
-# SPDX-License-Identifier: GPL-3.0-or-later
-
-"""Shenzhen dataset for TB detection (cross validation fold 5)
-
-* Split reference: first 80% of TB and healthy CXR for "train", rest for "test"
-* This configuration resolution: 512 x 512 (default)
-* See :py:mod:`ptbench.data.shenzhen` for dataset details
-"""
-
-from . import _maker
-
-dataset = _maker("fold_5")
diff --git a/src/ptbench/configs/datasets/shenzhen/fold_5_rgb.py b/src/ptbench/configs/datasets/shenzhen/fold_5_rgb.py
deleted file mode 100644
index 77a3b38905c5dcac87853e4d1e0018a3b42663c1..0000000000000000000000000000000000000000
--- a/src/ptbench/configs/datasets/shenzhen/fold_5_rgb.py
+++ /dev/null
@@ -1,14 +0,0 @@
-# SPDX-FileCopyrightText: Copyright © 2023 Idiap Research Institute <contact@idiap.ch>
-#
-# SPDX-License-Identifier: GPL-3.0-or-later
-
-"""Shenzhen dataset for TB detection (cross validation fold 5, RGB)
-
-* Split reference: first 80% of TB and healthy CXR for "train", rest for "test"
-* This configuration resolution: 512 x 512 (default)
-* See :py:mod:`ptbench.data.shenzhen` for dataset details
-"""
-
-from . import _maker
-
-dataset = _maker("fold_5", RGB=True)
diff --git a/src/ptbench/configs/datasets/shenzhen/fold_6.py b/src/ptbench/configs/datasets/shenzhen/fold_6.py
deleted file mode 100644
index 3d71fa27af536573b63ec8829a4bd2ecbcd21378..0000000000000000000000000000000000000000
--- a/src/ptbench/configs/datasets/shenzhen/fold_6.py
+++ /dev/null
@@ -1,14 +0,0 @@
-# SPDX-FileCopyrightText: Copyright © 2023 Idiap Research Institute <contact@idiap.ch>
-#
-# SPDX-License-Identifier: GPL-3.0-or-later
-
-"""Shenzhen dataset for TB detection (cross validation fold 6)
-
-* Split reference: first 80% of TB and healthy CXR for "train", rest for "test"
-* This configuration resolution: 512 x 512 (default)
-* See :py:mod:`ptbench.data.shenzhen` for dataset details
-"""
-
-from . import _maker
-
-dataset = _maker("fold_6")
diff --git a/src/ptbench/configs/datasets/shenzhen/fold_6_rgb.py b/src/ptbench/configs/datasets/shenzhen/fold_6_rgb.py
deleted file mode 100644
index 1b78181f58a32263b75b312fbcbe691a6c5781b0..0000000000000000000000000000000000000000
--- a/src/ptbench/configs/datasets/shenzhen/fold_6_rgb.py
+++ /dev/null
@@ -1,14 +0,0 @@
-# SPDX-FileCopyrightText: Copyright © 2023 Idiap Research Institute <contact@idiap.ch>
-#
-# SPDX-License-Identifier: GPL-3.0-or-later
-
-"""Shenzhen dataset for TB detection (cross validation fold 6, RGB)
-
-* Split reference: first 80% of TB and healthy CXR for "train", rest for "test"
-* This configuration resolution: 512 x 512 (default)
-* See :py:mod:`ptbench.data.shenzhen` for dataset details
-"""
-
-from . import _maker
-
-dataset = _maker("fold_6", RGB=True)
diff --git a/src/ptbench/configs/datasets/shenzhen/fold_7.py b/src/ptbench/configs/datasets/shenzhen/fold_7.py
deleted file mode 100644
index 28323a6f925c15974ce551bc01369fdb237db31a..0000000000000000000000000000000000000000
--- a/src/ptbench/configs/datasets/shenzhen/fold_7.py
+++ /dev/null
@@ -1,14 +0,0 @@
-# SPDX-FileCopyrightText: Copyright © 2023 Idiap Research Institute <contact@idiap.ch>
-#
-# SPDX-License-Identifier: GPL-3.0-or-later
-
-"""Shenzhen dataset for TB detection (cross validation fold 7)
-
-* Split reference: first 80% of TB and healthy CXR for "train", rest for "test"
-* This configuration resolution: 512 x 512 (default)
-* See :py:mod:`ptbench.data.shenzhen` for dataset details
-"""
-
-from . import _maker
-
-dataset = _maker("fold_7")
diff --git a/src/ptbench/configs/datasets/shenzhen/fold_7_rgb.py b/src/ptbench/configs/datasets/shenzhen/fold_7_rgb.py
deleted file mode 100644
index 48302215dd83bb895cac02447510e9fe69b6cebe..0000000000000000000000000000000000000000
--- a/src/ptbench/configs/datasets/shenzhen/fold_7_rgb.py
+++ /dev/null
@@ -1,14 +0,0 @@
-# SPDX-FileCopyrightText: Copyright © 2023 Idiap Research Institute <contact@idiap.ch>
-#
-# SPDX-License-Identifier: GPL-3.0-or-later
-
-"""Shenzhen dataset for TB detection (cross validation fold 7, RGB)
-
-* Split reference: first 80% of TB and healthy CXR for "train", rest for "test"
-* This configuration resolution: 512 x 512 (default)
-* See :py:mod:`ptbench.data.shenzhen` for dataset details
-"""
-
-from . import _maker
-
-dataset = _maker("fold_7", RGB=True)
diff --git a/src/ptbench/configs/datasets/shenzhen/fold_8.py b/src/ptbench/configs/datasets/shenzhen/fold_8.py
deleted file mode 100644
index 608ba67b10daf19c5b65fa5c76c61ec68fee2988..0000000000000000000000000000000000000000
--- a/src/ptbench/configs/datasets/shenzhen/fold_8.py
+++ /dev/null
@@ -1,14 +0,0 @@
-# SPDX-FileCopyrightText: Copyright © 2023 Idiap Research Institute <contact@idiap.ch>
-#
-# SPDX-License-Identifier: GPL-3.0-or-later
-
-"""Shenzhen dataset for TB detection (cross validation fold 8)
-
-* Split reference: first 80% of TB and healthy CXR for "train", rest for "test"
-* This configuration resolution: 512 x 512 (default)
-* See :py:mod:`ptbench.data.shenzhen` for dataset details
-"""
-
-from . import _maker
-
-dataset = _maker("fold_8")
diff --git a/src/ptbench/configs/datasets/shenzhen/fold_8_rgb.py b/src/ptbench/configs/datasets/shenzhen/fold_8_rgb.py
deleted file mode 100644
index 79573e9cd8e1ccadaa2ba1cbc084dd91f4a9f08a..0000000000000000000000000000000000000000
--- a/src/ptbench/configs/datasets/shenzhen/fold_8_rgb.py
+++ /dev/null
@@ -1,14 +0,0 @@
-# SPDX-FileCopyrightText: Copyright © 2023 Idiap Research Institute <contact@idiap.ch>
-#
-# SPDX-License-Identifier: GPL-3.0-or-later
-
-"""Shenzhen dataset for TB detection (cross validation fold 8, RGB)
-
-* Split reference: first 80% of TB and healthy CXR for "train", rest for "test"
-* This configuration resolution: 512 x 512 (default)
-* See :py:mod:`ptbench.data.shenzhen` for dataset details
-"""
-
-from . import _maker
-
-dataset = _maker("fold_8", RGB=True)
diff --git a/src/ptbench/configs/datasets/shenzhen/fold_9.py b/src/ptbench/configs/datasets/shenzhen/fold_9.py
deleted file mode 100644
index 7f26bd6bf978fdea7530a0151ccb82c1411ea8ff..0000000000000000000000000000000000000000
--- a/src/ptbench/configs/datasets/shenzhen/fold_9.py
+++ /dev/null
@@ -1,14 +0,0 @@
-# SPDX-FileCopyrightText: Copyright © 2023 Idiap Research Institute <contact@idiap.ch>
-#
-# SPDX-License-Identifier: GPL-3.0-or-later
-
-"""Shenzhen dataset for TB detection (cross validation fold 9)
-
-* Split reference: first 80% of TB and healthy CXR for "train", rest for "test"
-* This configuration resolution: 512 x 512 (default)
-* See :py:mod:`ptbench.data.shenzhen` for dataset details
-"""
-
-from . import _maker
-
-dataset = _maker("fold_9")
diff --git a/src/ptbench/configs/datasets/shenzhen/fold_9_rgb.py b/src/ptbench/configs/datasets/shenzhen/fold_9_rgb.py
deleted file mode 100644
index c39e4f0587fc91d7fe58fc0ef9735014ecbe9f32..0000000000000000000000000000000000000000
--- a/src/ptbench/configs/datasets/shenzhen/fold_9_rgb.py
+++ /dev/null
@@ -1,14 +0,0 @@
-# SPDX-FileCopyrightText: Copyright © 2023 Idiap Research Institute <contact@idiap.ch>
-#
-# SPDX-License-Identifier: GPL-3.0-or-later
-
-"""Shenzhen dataset for TB detection (cross validation fold 9, RGB)
-
-* Split reference: first 80% of TB and healthy CXR for "train", rest for "test"
-* This configuration resolution: 512 x 512 (default)
-* See :py:mod:`ptbench.data.shenzhen` for dataset details
-"""
-
-from . import _maker
-
-dataset = _maker("fold_9", RGB=True)
diff --git a/src/ptbench/configs/datasets/shenzhen/rgb.py b/src/ptbench/configs/datasets/shenzhen/rgb.py
deleted file mode 100644
index 18684478d293d26694ee6e5ee6b0d20ccdd903d2..0000000000000000000000000000000000000000
--- a/src/ptbench/configs/datasets/shenzhen/rgb.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# SPDX-FileCopyrightText: Copyright © 2023 Idiap Research Institute <contact@idiap.ch>
-#
-# SPDX-License-Identifier: GPL-3.0-or-later
-
-"""Shenzhen dataset for TB detection (default protocol, converted in RGB)
-
-* Split reference: first 64% of TB and healthy CXR for "train" 16% for
-* "validation", 20% for "test"
-* This configuration resolution: 512 x 512 (default)
-* See :py:mod:`ptbench.data.shenzhen` for dataset details
-"""
-
-from . import _maker
-
-dataset = _maker("default", RGB=True)
diff --git a/src/ptbench/data/shenzhen/default.py b/src/ptbench/data/shenzhen/default.py
index 8347cd56350e6de2901ca3793c5db1c00b9af55a..3801efbc2a5f66d467a7681be37819e7fda74ede 100644
--- a/src/ptbench/data/shenzhen/default.py
+++ b/src/ptbench/data/shenzhen/default.py
@@ -2,6 +2,14 @@
 #
 # SPDX-License-Identifier: GPL-3.0-or-later
 
+"""Shenzhen dataset for TB detection (default protocol)
+
+* Split reference: first 64% of TB and healthy CXR for "train" 16% for
+* "validation", 20% for "test"
+* This configuration resolution: 512 x 512 (default)
+* See :py:mod:`ptbench.data.shenzhen` for dataset details
+"""
+
 from clapper.logging import setup
 
 from ..base_datamodule import BaseDataModule
diff --git a/src/ptbench/data/shenzhen/fold_0.py b/src/ptbench/data/shenzhen/fold_0.py
new file mode 100644
index 0000000000000000000000000000000000000000..d65d513bcb4cefcfc553e3c6bde864392db01add
--- /dev/null
+++ b/src/ptbench/data/shenzhen/fold_0.py
@@ -0,0 +1,45 @@
+# SPDX-FileCopyrightText: Copyright © 2023 Idiap Research Institute <contact@idiap.ch>
+#
+# SPDX-License-Identifier: GPL-3.0-or-later
+
+"""Shenzhen dataset for TB detection (cross validation fold 0)
+
+* Split reference: first 80% of TB and healthy CXR for "train", rest for "test"
+* This configuration resolution: 512 x 512 (default)
+* See :py:mod:`ptbench.data.shenzhen` for dataset details
+"""
+
+from clapper.logging import setup
+
+from ..base_datamodule import BaseDataModule
+from . import _maker, return_subsets
+
+logger = setup(__name__.split(".")[0], format="%(levelname)s: %(message)s")
+
+
+class Fold0Module(BaseDataModule):
+    def __init__(
+        self,
+        train_batch_size=1,
+        predict_batch_size=1,
+        drop_incomplete_batch=False,
+        multiproc_kwargs=None,
+    ):
+        super().__init__(
+            train_batch_size=train_batch_size,
+            predict_batch_size=predict_batch_size,
+            drop_incomplete_batch=drop_incomplete_batch,
+            multiproc_kwargs=multiproc_kwargs,
+        )
+
+    def setup(self, stage: str):
+        self.dataset = _maker("fold_0")
+        (
+            self.train_dataset,
+            self.validation_dataset,
+            self.extra_validation_datasets,
+            self.predict_dataset,
+        ) = return_subsets(self.dataset)
+
+
+datamodule = Fold0Module
diff --git a/src/ptbench/data/shenzhen/fold_0_rgb.py b/src/ptbench/data/shenzhen/fold_0_rgb.py
new file mode 100644
index 0000000000000000000000000000000000000000..bcc853dd7c52543d4aa27a4b10083d4407582786
--- /dev/null
+++ b/src/ptbench/data/shenzhen/fold_0_rgb.py
@@ -0,0 +1,45 @@
+# SPDX-FileCopyrightText: Copyright © 2023 Idiap Research Institute <contact@idiap.ch>
+#
+# SPDX-License-Identifier: GPL-3.0-or-later
+
+"""Shenzhen dataset for TB detection (cross validation fold 0, RGB)
+
+* Split reference: first 80% of TB and healthy CXR for "train", rest for "test"
+* This configuration resolution: 512 x 512 (default)
+* See :py:mod:`ptbench.data.shenzhen` for dataset details
+"""
+
+from clapper.logging import setup
+
+from ..base_datamodule import BaseDataModule
+from . import _maker, return_subsets
+
+logger = setup(__name__.split(".")[0], format="%(levelname)s: %(message)s")
+
+
+class Fold0Module(BaseDataModule):
+    def __init__(
+        self,
+        train_batch_size=1,
+        predict_batch_size=1,
+        drop_incomplete_batch=False,
+        multiproc_kwargs=None,
+    ):
+        super().__init__(
+            train_batch_size=train_batch_size,
+            predict_batch_size=predict_batch_size,
+            drop_incomplete_batch=drop_incomplete_batch,
+            multiproc_kwargs=multiproc_kwargs,
+        )
+
+    def setup(self, stage: str):
+        self.dataset = _maker("fold_0", RGB=True)
+        (
+            self.train_dataset,
+            self.validation_dataset,
+            self.extra_validation_datasets,
+            self.predict_dataset,
+        ) = return_subsets(self.dataset)
+
+
+datamodule = Fold0Module
diff --git a/src/ptbench/data/shenzhen/fold_1.py b/src/ptbench/data/shenzhen/fold_1.py
new file mode 100644
index 0000000000000000000000000000000000000000..b9494f156e69ef9ed2af68d607f8d8db2540381f
--- /dev/null
+++ b/src/ptbench/data/shenzhen/fold_1.py
@@ -0,0 +1,45 @@
+# SPDX-FileCopyrightText: Copyright © 2023 Idiap Research Institute <contact@idiap.ch>
+#
+# SPDX-License-Identifier: GPL-3.0-or-later
+
+"""Shenzhen dataset for TB detection (cross validation fold 1)
+
+* Split reference: first 80% of TB and healthy CXR for "train", rest for "test"
+* This configuration resolution: 512 x 512 (default)
+* See :py:mod:`ptbench.data.shenzhen` for dataset details
+"""
+
+from clapper.logging import setup
+
+from ..base_datamodule import BaseDataModule
+from . import _maker, return_subsets
+
+logger = setup(__name__.split(".")[0], format="%(levelname)s: %(message)s")
+
+
+class Fold0Module(BaseDataModule):
+    def __init__(
+        self,
+        train_batch_size=1,
+        predict_batch_size=1,
+        drop_incomplete_batch=False,
+        multiproc_kwargs=None,
+    ):
+        super().__init__(
+            train_batch_size=train_batch_size,
+            predict_batch_size=predict_batch_size,
+            drop_incomplete_batch=drop_incomplete_batch,
+            multiproc_kwargs=multiproc_kwargs,
+        )
+
+    def setup(self, stage: str):
+        self.dataset = _maker("fold_1")
+        (
+            self.train_dataset,
+            self.validation_dataset,
+            self.extra_validation_datasets,
+            self.predict_dataset,
+        ) = return_subsets(self.dataset)
+
+
+datamodule = Fold0Module
diff --git a/src/ptbench/data/shenzhen/fold_1_rgb.py b/src/ptbench/data/shenzhen/fold_1_rgb.py
new file mode 100644
index 0000000000000000000000000000000000000000..01e23967e51878a348b89d14e263ff2c5e1d0503
--- /dev/null
+++ b/src/ptbench/data/shenzhen/fold_1_rgb.py
@@ -0,0 +1,46 @@
+# SPDX-FileCopyrightText: Copyright © 2023 Idiap Research Institute <contact@idiap.ch>
+#
+# SPDX-License-Identifier: GPL-3.0-or-later
+
+"""Shenzhen dataset for TB detection (cross validation fold 1, RGB)
+
+* Split reference: first 80% of TB and healthy CXR for "train", rest for "test"
+* This configuration resolution: 512 x 512 (default)
+* See :py:mod:`ptbench.data.shenzhen` for dataset details
+"""
+
+
+from clapper.logging import setup
+
+from ..base_datamodule import BaseDataModule
+from . import _maker, return_subsets
+
+logger = setup(__name__.split(".")[0], format="%(levelname)s: %(message)s")
+
+
+class Fold0Module(BaseDataModule):
+    def __init__(
+        self,
+        train_batch_size=1,
+        predict_batch_size=1,
+        drop_incomplete_batch=False,
+        multiproc_kwargs=None,
+    ):
+        super().__init__(
+            train_batch_size=train_batch_size,
+            predict_batch_size=predict_batch_size,
+            drop_incomplete_batch=drop_incomplete_batch,
+            multiproc_kwargs=multiproc_kwargs,
+        )
+
+    def setup(self, stage: str):
+        self.dataset = _maker("fold_1", RGB=True)
+        (
+            self.train_dataset,
+            self.validation_dataset,
+            self.extra_validation_datasets,
+            self.predict_dataset,
+        ) = return_subsets(self.dataset)
+
+
+datamodule = Fold0Module
diff --git a/src/ptbench/data/shenzhen/fold_2.py b/src/ptbench/data/shenzhen/fold_2.py
new file mode 100644
index 0000000000000000000000000000000000000000..8d5cf816ce4ae950f19a71ea0c57662f427e2ee4
--- /dev/null
+++ b/src/ptbench/data/shenzhen/fold_2.py
@@ -0,0 +1,45 @@
+# SPDX-FileCopyrightText: Copyright © 2023 Idiap Research Institute <contact@idiap.ch>
+#
+# SPDX-License-Identifier: GPL-3.0-or-later
+
+"""Shenzhen dataset for TB detection (cross validation fold 2)
+
+* Split reference: first 80% of TB and healthy CXR for "train", rest for "test"
+* This configuration resolution: 512 x 512 (default)
+* See :py:mod:`ptbench.data.shenzhen` for dataset details
+"""
+
+from clapper.logging import setup
+
+from ..base_datamodule import BaseDataModule
+from . import _maker, return_subsets
+
+logger = setup(__name__.split(".")[0], format="%(levelname)s: %(message)s")
+
+
+class Fold0Module(BaseDataModule):
+    def __init__(
+        self,
+        train_batch_size=1,
+        predict_batch_size=1,
+        drop_incomplete_batch=False,
+        multiproc_kwargs=None,
+    ):
+        super().__init__(
+            train_batch_size=train_batch_size,
+            predict_batch_size=predict_batch_size,
+            drop_incomplete_batch=drop_incomplete_batch,
+            multiproc_kwargs=multiproc_kwargs,
+        )
+
+    def setup(self, stage: str):
+        self.dataset = _maker("fold_2")
+        (
+            self.train_dataset,
+            self.validation_dataset,
+            self.extra_validation_datasets,
+            self.predict_dataset,
+        ) = return_subsets(self.dataset)
+
+
+datamodule = Fold0Module
diff --git a/src/ptbench/data/shenzhen/fold_2_rgb.py b/src/ptbench/data/shenzhen/fold_2_rgb.py
new file mode 100644
index 0000000000000000000000000000000000000000..baf6752d66093a059f295f0e540a9d3ffd6b681f
--- /dev/null
+++ b/src/ptbench/data/shenzhen/fold_2_rgb.py
@@ -0,0 +1,45 @@
+# SPDX-FileCopyrightText: Copyright © 2023 Idiap Research Institute <contact@idiap.ch>
+#
+# SPDX-License-Identifier: GPL-3.0-or-later
+
+"""Shenzhen dataset for TB detection (cross validation fold 2, RGB)
+
+* Split reference: first 80% of TB and healthy CXR for "train", rest for "test"
+* This configuration resolution: 512 x 512 (default)
+* See :py:mod:`ptbench.data.shenzhen` for dataset details
+"""
+
+from clapper.logging import setup
+
+from ..base_datamodule import BaseDataModule
+from . import _maker, return_subsets
+
+logger = setup(__name__.split(".")[0], format="%(levelname)s: %(message)s")
+
+
+class Fold0Module(BaseDataModule):
+    def __init__(
+        self,
+        train_batch_size=1,
+        predict_batch_size=1,
+        drop_incomplete_batch=False,
+        multiproc_kwargs=None,
+    ):
+        super().__init__(
+            train_batch_size=train_batch_size,
+            predict_batch_size=predict_batch_size,
+            drop_incomplete_batch=drop_incomplete_batch,
+            multiproc_kwargs=multiproc_kwargs,
+        )
+
+    def setup(self, stage: str):
+        self.dataset = _maker("fold_2", RGB=True)
+        (
+            self.train_dataset,
+            self.validation_dataset,
+            self.extra_validation_datasets,
+            self.predict_dataset,
+        ) = return_subsets(self.dataset)
+
+
+datamodule = Fold0Module
diff --git a/src/ptbench/data/shenzhen/fold_3.py b/src/ptbench/data/shenzhen/fold_3.py
new file mode 100644
index 0000000000000000000000000000000000000000..b42882ccf663b2635dbc106b817f1956a113863e
--- /dev/null
+++ b/src/ptbench/data/shenzhen/fold_3.py
@@ -0,0 +1,45 @@
+# SPDX-FileCopyrightText: Copyright © 2023 Idiap Research Institute <contact@idiap.ch>
+#
+# SPDX-License-Identifier: GPL-3.0-or-later
+
+"""Shenzhen dataset for TB detection (cross validation fold 3)
+
+* Split reference: first 80% of TB and healthy CXR for "train", rest for "test"
+* This configuration resolution: 512 x 512 (default)
+* See :py:mod:`ptbench.data.shenzhen` for dataset details
+"""
+
+from clapper.logging import setup
+
+from ..base_datamodule import BaseDataModule
+from . import _maker, return_subsets
+
+logger = setup(__name__.split(".")[0], format="%(levelname)s: %(message)s")
+
+
+class Fold0Module(BaseDataModule):
+    def __init__(
+        self,
+        train_batch_size=1,
+        predict_batch_size=1,
+        drop_incomplete_batch=False,
+        multiproc_kwargs=None,
+    ):
+        super().__init__(
+            train_batch_size=train_batch_size,
+            predict_batch_size=predict_batch_size,
+            drop_incomplete_batch=drop_incomplete_batch,
+            multiproc_kwargs=multiproc_kwargs,
+        )
+
+    def setup(self, stage: str):
+        self.dataset = _maker("fold_3")
+        (
+            self.train_dataset,
+            self.validation_dataset,
+            self.extra_validation_datasets,
+            self.predict_dataset,
+        ) = return_subsets(self.dataset)
+
+
+datamodule = Fold0Module
diff --git a/src/ptbench/data/shenzhen/fold_3_rgb.py b/src/ptbench/data/shenzhen/fold_3_rgb.py
new file mode 100644
index 0000000000000000000000000000000000000000..a02c2b1d4e7b33321aa45d537f9af2155f4ae321
--- /dev/null
+++ b/src/ptbench/data/shenzhen/fold_3_rgb.py
@@ -0,0 +1,45 @@
+# SPDX-FileCopyrightText: Copyright © 2023 Idiap Research Institute <contact@idiap.ch>
+#
+# SPDX-License-Identifier: GPL-3.0-or-later
+
+"""Shenzhen dataset for TB detection (cross validation fold 3, RGB)
+
+* Split reference: first 80% of TB and healthy CXR for "train", rest for "test"
+* This configuration resolution: 512 x 512 (default)
+* See :py:mod:`ptbench.data.shenzhen` for dataset details
+"""
+
+from clapper.logging import setup
+
+from ..base_datamodule import BaseDataModule
+from . import _maker, return_subsets
+
+logger = setup(__name__.split(".")[0], format="%(levelname)s: %(message)s")
+
+
+class Fold0Module(BaseDataModule):
+    def __init__(
+        self,
+        train_batch_size=1,
+        predict_batch_size=1,
+        drop_incomplete_batch=False,
+        multiproc_kwargs=None,
+    ):
+        super().__init__(
+            train_batch_size=train_batch_size,
+            predict_batch_size=predict_batch_size,
+            drop_incomplete_batch=drop_incomplete_batch,
+            multiproc_kwargs=multiproc_kwargs,
+        )
+
+    def setup(self, stage: str):
+        self.dataset = _maker("fold_3", RGB=True)
+        (
+            self.train_dataset,
+            self.validation_dataset,
+            self.extra_validation_datasets,
+            self.predict_dataset,
+        ) = return_subsets(self.dataset)
+
+
+datamodule = Fold0Module
diff --git a/src/ptbench/data/shenzhen/fold_4.py b/src/ptbench/data/shenzhen/fold_4.py
new file mode 100644
index 0000000000000000000000000000000000000000..a9ad14710ad37c02c34e6575fbac064db64a4054
--- /dev/null
+++ b/src/ptbench/data/shenzhen/fold_4.py
@@ -0,0 +1,45 @@
+# SPDX-FileCopyrightText: Copyright © 2023 Idiap Research Institute <contact@idiap.ch>
+#
+# SPDX-License-Identifier: GPL-3.0-or-later
+
+"""Shenzhen dataset for TB detection (cross validation fold 4)
+
+* Split reference: first 80% of TB and healthy CXR for "train", rest for "test"
+* This configuration resolution: 512 x 512 (default)
+* See :py:mod:`ptbench.data.shenzhen` for dataset details
+"""
+
+from clapper.logging import setup
+
+from ..base_datamodule import BaseDataModule
+from . import _maker, return_subsets
+
+logger = setup(__name__.split(".")[0], format="%(levelname)s: %(message)s")
+
+
+class Fold0Module(BaseDataModule):
+    def __init__(
+        self,
+        train_batch_size=1,
+        predict_batch_size=1,
+        drop_incomplete_batch=False,
+        multiproc_kwargs=None,
+    ):
+        super().__init__(
+            train_batch_size=train_batch_size,
+            predict_batch_size=predict_batch_size,
+            drop_incomplete_batch=drop_incomplete_batch,
+            multiproc_kwargs=multiproc_kwargs,
+        )
+
+    def setup(self, stage: str):
+        self.dataset = _maker("fold_4")
+        (
+            self.train_dataset,
+            self.validation_dataset,
+            self.extra_validation_datasets,
+            self.predict_dataset,
+        ) = return_subsets(self.dataset)
+
+
+datamodule = Fold0Module
diff --git a/src/ptbench/data/shenzhen/fold_4_rgb.py b/src/ptbench/data/shenzhen/fold_4_rgb.py
new file mode 100644
index 0000000000000000000000000000000000000000..3620ba428533a9e97392bde40f77b55b454809bb
--- /dev/null
+++ b/src/ptbench/data/shenzhen/fold_4_rgb.py
@@ -0,0 +1,45 @@
+# SPDX-FileCopyrightText: Copyright © 2023 Idiap Research Institute <contact@idiap.ch>
+#
+# SPDX-License-Identifier: GPL-3.0-or-later
+
+"""Shenzhen dataset for TB detection (cross validation fold 4, RGB)
+
+* Split reference: first 80% of TB and healthy CXR for "train", rest for "test"
+* This configuration resolution: 512 x 512 (default)
+* See :py:mod:`ptbench.data.shenzhen` for dataset details
+"""
+
+from clapper.logging import setup
+
+from ..base_datamodule import BaseDataModule
+from . import _maker, return_subsets
+
+logger = setup(__name__.split(".")[0], format="%(levelname)s: %(message)s")
+
+
+class Fold0Module(BaseDataModule):
+    def __init__(
+        self,
+        train_batch_size=1,
+        predict_batch_size=1,
+        drop_incomplete_batch=False,
+        multiproc_kwargs=None,
+    ):
+        super().__init__(
+            train_batch_size=train_batch_size,
+            predict_batch_size=predict_batch_size,
+            drop_incomplete_batch=drop_incomplete_batch,
+            multiproc_kwargs=multiproc_kwargs,
+        )
+
+    def setup(self, stage: str):
+        self.dataset = _maker("fold_4", RGB=True)
+        (
+            self.train_dataset,
+            self.validation_dataset,
+            self.extra_validation_datasets,
+            self.predict_dataset,
+        ) = return_subsets(self.dataset)
+
+
+datamodule = Fold0Module
diff --git a/src/ptbench/data/shenzhen/fold_5.py b/src/ptbench/data/shenzhen/fold_5.py
new file mode 100644
index 0000000000000000000000000000000000000000..426a9d6609e212168b3c2775b791de416a6b7dfd
--- /dev/null
+++ b/src/ptbench/data/shenzhen/fold_5.py
@@ -0,0 +1,45 @@
+# SPDX-FileCopyrightText: Copyright © 2023 Idiap Research Institute <contact@idiap.ch>
+#
+# SPDX-License-Identifier: GPL-3.0-or-later
+
+"""Shenzhen dataset for TB detection (cross validation fold 5)
+
+* Split reference: first 80% of TB and healthy CXR for "train", rest for "test"
+* This configuration resolution: 512 x 512 (default)
+* See :py:mod:`ptbench.data.shenzhen` for dataset details
+"""
+
+from clapper.logging import setup
+
+from ..base_datamodule import BaseDataModule
+from . import _maker, return_subsets
+
+logger = setup(__name__.split(".")[0], format="%(levelname)s: %(message)s")
+
+
+class Fold0Module(BaseDataModule):
+    def __init__(
+        self,
+        train_batch_size=1,
+        predict_batch_size=1,
+        drop_incomplete_batch=False,
+        multiproc_kwargs=None,
+    ):
+        super().__init__(
+            train_batch_size=train_batch_size,
+            predict_batch_size=predict_batch_size,
+            drop_incomplete_batch=drop_incomplete_batch,
+            multiproc_kwargs=multiproc_kwargs,
+        )
+
+    def setup(self, stage: str):
+        self.dataset = _maker("fold_5")
+        (
+            self.train_dataset,
+            self.validation_dataset,
+            self.extra_validation_datasets,
+            self.predict_dataset,
+        ) = return_subsets(self.dataset)
+
+
+datamodule = Fold0Module
diff --git a/src/ptbench/data/shenzhen/fold_5_rgb.py b/src/ptbench/data/shenzhen/fold_5_rgb.py
new file mode 100644
index 0000000000000000000000000000000000000000..29e7013885ac1ba917ce40c7a027c827af54d705
--- /dev/null
+++ b/src/ptbench/data/shenzhen/fold_5_rgb.py
@@ -0,0 +1,45 @@
+# SPDX-FileCopyrightText: Copyright © 2023 Idiap Research Institute <contact@idiap.ch>
+#
+# SPDX-License-Identifier: GPL-3.0-or-later
+
+"""Shenzhen dataset for TB detection (cross validation fold 5, RGB)
+
+* Split reference: first 80% of TB and healthy CXR for "train", rest for "test"
+* This configuration resolution: 512 x 512 (default)
+* See :py:mod:`ptbench.data.shenzhen` for dataset details
+"""
+
+from clapper.logging import setup
+
+from ..base_datamodule import BaseDataModule
+from . import _maker, return_subsets
+
+logger = setup(__name__.split(".")[0], format="%(levelname)s: %(message)s")
+
+
+class Fold0Module(BaseDataModule):
+    def __init__(
+        self,
+        train_batch_size=1,
+        predict_batch_size=1,
+        drop_incomplete_batch=False,
+        multiproc_kwargs=None,
+    ):
+        super().__init__(
+            train_batch_size=train_batch_size,
+            predict_batch_size=predict_batch_size,
+            drop_incomplete_batch=drop_incomplete_batch,
+            multiproc_kwargs=multiproc_kwargs,
+        )
+
+    def setup(self, stage: str):
+        self.dataset = _maker("fold_5", RGB=True)
+        (
+            self.train_dataset,
+            self.validation_dataset,
+            self.extra_validation_datasets,
+            self.predict_dataset,
+        ) = return_subsets(self.dataset)
+
+
+datamodule = Fold0Module
diff --git a/src/ptbench/data/shenzhen/fold_6.py b/src/ptbench/data/shenzhen/fold_6.py
new file mode 100644
index 0000000000000000000000000000000000000000..fb0a91b896723240f26a283cb76c5a2245470fc0
--- /dev/null
+++ b/src/ptbench/data/shenzhen/fold_6.py
@@ -0,0 +1,45 @@
+# SPDX-FileCopyrightText: Copyright © 2023 Idiap Research Institute <contact@idiap.ch>
+#
+# SPDX-License-Identifier: GPL-3.0-or-later
+
+"""Shenzhen dataset for TB detection (cross validation fold 6)
+
+* Split reference: first 80% of TB and healthy CXR for "train", rest for "test"
+* This configuration resolution: 512 x 512 (default)
+* See :py:mod:`ptbench.data.shenzhen` for dataset details
+"""
+
+from clapper.logging import setup
+
+from ..base_datamodule import BaseDataModule
+from . import _maker, return_subsets
+
+logger = setup(__name__.split(".")[0], format="%(levelname)s: %(message)s")
+
+
+class Fold0Module(BaseDataModule):
+    def __init__(
+        self,
+        train_batch_size=1,
+        predict_batch_size=1,
+        drop_incomplete_batch=False,
+        multiproc_kwargs=None,
+    ):
+        super().__init__(
+            train_batch_size=train_batch_size,
+            predict_batch_size=predict_batch_size,
+            drop_incomplete_batch=drop_incomplete_batch,
+            multiproc_kwargs=multiproc_kwargs,
+        )
+
+    def setup(self, stage: str):
+        self.dataset = _maker("fold_6")
+        (
+            self.train_dataset,
+            self.validation_dataset,
+            self.extra_validation_datasets,
+            self.predict_dataset,
+        ) = return_subsets(self.dataset)
+
+
+datamodule = Fold0Module
diff --git a/src/ptbench/data/shenzhen/fold_6_rgb.py b/src/ptbench/data/shenzhen/fold_6_rgb.py
new file mode 100644
index 0000000000000000000000000000000000000000..35e7e6d7e7af0758aa4aaa01f24887e3eea6711f
--- /dev/null
+++ b/src/ptbench/data/shenzhen/fold_6_rgb.py
@@ -0,0 +1,45 @@
+# SPDX-FileCopyrightText: Copyright © 2023 Idiap Research Institute <contact@idiap.ch>
+#
+# SPDX-License-Identifier: GPL-3.0-or-later
+
+"""Shenzhen dataset for TB detection (cross validation fold 6, RGB)
+
+* Split reference: first 80% of TB and healthy CXR for "train", rest for "test"
+* This configuration resolution: 512 x 512 (default)
+* See :py:mod:`ptbench.data.shenzhen` for dataset details
+"""
+
+from clapper.logging import setup
+
+from ..base_datamodule import BaseDataModule
+from . import _maker, return_subsets
+
+logger = setup(__name__.split(".")[0], format="%(levelname)s: %(message)s")
+
+
+class Fold0Module(BaseDataModule):
+    def __init__(
+        self,
+        train_batch_size=1,
+        predict_batch_size=1,
+        drop_incomplete_batch=False,
+        multiproc_kwargs=None,
+    ):
+        super().__init__(
+            train_batch_size=train_batch_size,
+            predict_batch_size=predict_batch_size,
+            drop_incomplete_batch=drop_incomplete_batch,
+            multiproc_kwargs=multiproc_kwargs,
+        )
+
+    def setup(self, stage: str):
+        self.dataset = _maker("fold_6", RGB=True)
+        (
+            self.train_dataset,
+            self.validation_dataset,
+            self.extra_validation_datasets,
+            self.predict_dataset,
+        ) = return_subsets(self.dataset)
+
+
+datamodule = Fold0Module
diff --git a/src/ptbench/data/shenzhen/fold_7.py b/src/ptbench/data/shenzhen/fold_7.py
new file mode 100644
index 0000000000000000000000000000000000000000..743b344d77b9324611e1490dc47966bb52dc41a4
--- /dev/null
+++ b/src/ptbench/data/shenzhen/fold_7.py
@@ -0,0 +1,45 @@
+# SPDX-FileCopyrightText: Copyright © 2023 Idiap Research Institute <contact@idiap.ch>
+#
+# SPDX-License-Identifier: GPL-3.0-or-later
+
+"""Shenzhen dataset for TB detection (cross validation fold 7)
+
+* Split reference: first 80% of TB and healthy CXR for "train", rest for "test"
+* This configuration resolution: 512 x 512 (default)
+* See :py:mod:`ptbench.data.shenzhen` for dataset details
+"""
+
+from clapper.logging import setup
+
+from ..base_datamodule import BaseDataModule
+from . import _maker, return_subsets
+
+logger = setup(__name__.split(".")[0], format="%(levelname)s: %(message)s")
+
+
+class Fold0Module(BaseDataModule):
+    def __init__(
+        self,
+        train_batch_size=1,
+        predict_batch_size=1,
+        drop_incomplete_batch=False,
+        multiproc_kwargs=None,
+    ):
+        super().__init__(
+            train_batch_size=train_batch_size,
+            predict_batch_size=predict_batch_size,
+            drop_incomplete_batch=drop_incomplete_batch,
+            multiproc_kwargs=multiproc_kwargs,
+        )
+
+    def setup(self, stage: str):
+        self.dataset = _maker("fold_7")
+        (
+            self.train_dataset,
+            self.validation_dataset,
+            self.extra_validation_datasets,
+            self.predict_dataset,
+        ) = return_subsets(self.dataset)
+
+
+datamodule = Fold0Module
diff --git a/src/ptbench/data/shenzhen/fold_7_rgb.py b/src/ptbench/data/shenzhen/fold_7_rgb.py
new file mode 100644
index 0000000000000000000000000000000000000000..0a9f83d7a0072aa722a7d1cb881249e4722be36c
--- /dev/null
+++ b/src/ptbench/data/shenzhen/fold_7_rgb.py
@@ -0,0 +1,45 @@
+# SPDX-FileCopyrightText: Copyright © 2023 Idiap Research Institute <contact@idiap.ch>
+#
+# SPDX-License-Identifier: GPL-3.0-or-later
+
+"""Shenzhen dataset for TB detection (cross validation fold 7, RGB)
+
+* Split reference: first 80% of TB and healthy CXR for "train", rest for "test"
+* This configuration resolution: 512 x 512 (default)
+* See :py:mod:`ptbench.data.shenzhen` for dataset details
+"""
+
+from clapper.logging import setup
+
+from ..base_datamodule import BaseDataModule
+from . import _maker, return_subsets
+
+logger = setup(__name__.split(".")[0], format="%(levelname)s: %(message)s")
+
+
+class Fold0Module(BaseDataModule):
+    def __init__(
+        self,
+        train_batch_size=1,
+        predict_batch_size=1,
+        drop_incomplete_batch=False,
+        multiproc_kwargs=None,
+    ):
+        super().__init__(
+            train_batch_size=train_batch_size,
+            predict_batch_size=predict_batch_size,
+            drop_incomplete_batch=drop_incomplete_batch,
+            multiproc_kwargs=multiproc_kwargs,
+        )
+
+    def setup(self, stage: str):
+        self.dataset = _maker("fold_7", RGB=True)
+        (
+            self.train_dataset,
+            self.validation_dataset,
+            self.extra_validation_datasets,
+            self.predict_dataset,
+        ) = return_subsets(self.dataset)
+
+
+datamodule = Fold0Module
diff --git a/src/ptbench/data/shenzhen/fold_8.py b/src/ptbench/data/shenzhen/fold_8.py
new file mode 100644
index 0000000000000000000000000000000000000000..ee7f716714adc35beeab1b4eb450253d408320ad
--- /dev/null
+++ b/src/ptbench/data/shenzhen/fold_8.py
@@ -0,0 +1,45 @@
+# SPDX-FileCopyrightText: Copyright © 2023 Idiap Research Institute <contact@idiap.ch>
+#
+# SPDX-License-Identifier: GPL-3.0-or-later
+
+"""Shenzhen dataset for TB detection (cross validation fold 8)
+
+* Split reference: first 80% of TB and healthy CXR for "train", rest for "test"
+* This configuration resolution: 512 x 512 (default)
+* See :py:mod:`ptbench.data.shenzhen` for dataset details
+"""
+
+from clapper.logging import setup
+
+from ..base_datamodule import BaseDataModule
+from . import _maker, return_subsets
+
+logger = setup(__name__.split(".")[0], format="%(levelname)s: %(message)s")
+
+
+class Fold0Module(BaseDataModule):
+    def __init__(
+        self,
+        train_batch_size=1,
+        predict_batch_size=1,
+        drop_incomplete_batch=False,
+        multiproc_kwargs=None,
+    ):
+        super().__init__(
+            train_batch_size=train_batch_size,
+            predict_batch_size=predict_batch_size,
+            drop_incomplete_batch=drop_incomplete_batch,
+            multiproc_kwargs=multiproc_kwargs,
+        )
+
+    def setup(self, stage: str):
+        self.dataset = _maker("fold_8")
+        (
+            self.train_dataset,
+            self.validation_dataset,
+            self.extra_validation_datasets,
+            self.predict_dataset,
+        ) = return_subsets(self.dataset)
+
+
+datamodule = Fold0Module
diff --git a/src/ptbench/data/shenzhen/fold_8_rgb.py b/src/ptbench/data/shenzhen/fold_8_rgb.py
new file mode 100644
index 0000000000000000000000000000000000000000..1351790faf6234c2d7a3b51c500b2d16c94fd2c0
--- /dev/null
+++ b/src/ptbench/data/shenzhen/fold_8_rgb.py
@@ -0,0 +1,45 @@
+# SPDX-FileCopyrightText: Copyright © 2023 Idiap Research Institute <contact@idiap.ch>
+#
+# SPDX-License-Identifier: GPL-3.0-or-later
+
+"""Shenzhen dataset for TB detection (cross validation fold 8, RGB)
+
+* Split reference: first 80% of TB and healthy CXR for "train", rest for "test"
+* This configuration resolution: 512 x 512 (default)
+* See :py:mod:`ptbench.data.shenzhen` for dataset details
+"""
+
+from clapper.logging import setup
+
+from ..base_datamodule import BaseDataModule
+from . import _maker, return_subsets
+
+logger = setup(__name__.split(".")[0], format="%(levelname)s: %(message)s")
+
+
+class Fold0Module(BaseDataModule):
+    def __init__(
+        self,
+        train_batch_size=1,
+        predict_batch_size=1,
+        drop_incomplete_batch=False,
+        multiproc_kwargs=None,
+    ):
+        super().__init__(
+            train_batch_size=train_batch_size,
+            predict_batch_size=predict_batch_size,
+            drop_incomplete_batch=drop_incomplete_batch,
+            multiproc_kwargs=multiproc_kwargs,
+        )
+
+    def setup(self, stage: str):
+        self.dataset = _maker("fold_8", RGB=True)
+        (
+            self.train_dataset,
+            self.validation_dataset,
+            self.extra_validation_datasets,
+            self.predict_dataset,
+        ) = return_subsets(self.dataset)
+
+
+datamodule = Fold0Module
diff --git a/src/ptbench/data/shenzhen/fold_9.py b/src/ptbench/data/shenzhen/fold_9.py
new file mode 100644
index 0000000000000000000000000000000000000000..dbd8ab3146dca6bda7048c1d47fe1ee0852129c7
--- /dev/null
+++ b/src/ptbench/data/shenzhen/fold_9.py
@@ -0,0 +1,45 @@
+# SPDX-FileCopyrightText: Copyright © 2023 Idiap Research Institute <contact@idiap.ch>
+#
+# SPDX-License-Identifier: GPL-3.0-or-later
+
+"""Shenzhen dataset for TB detection (cross validation fold 9)
+
+* Split reference: first 80% of TB and healthy CXR for "train", rest for "test"
+* This configuration resolution: 512 x 512 (default)
+* See :py:mod:`ptbench.data.shenzhen` for dataset details
+"""
+
+from clapper.logging import setup
+
+from ..base_datamodule import BaseDataModule
+from . import _maker, return_subsets
+
+logger = setup(__name__.split(".")[0], format="%(levelname)s: %(message)s")
+
+
+class Fold0Module(BaseDataModule):
+    def __init__(
+        self,
+        train_batch_size=1,
+        predict_batch_size=1,
+        drop_incomplete_batch=False,
+        multiproc_kwargs=None,
+    ):
+        super().__init__(
+            train_batch_size=train_batch_size,
+            predict_batch_size=predict_batch_size,
+            drop_incomplete_batch=drop_incomplete_batch,
+            multiproc_kwargs=multiproc_kwargs,
+        )
+
+    def setup(self, stage: str):
+        self.dataset = _maker("fold_9")
+        (
+            self.train_dataset,
+            self.validation_dataset,
+            self.extra_validation_datasets,
+            self.predict_dataset,
+        ) = return_subsets(self.dataset)
+
+
+datamodule = Fold0Module
diff --git a/src/ptbench/data/shenzhen/fold_9_rgb.py b/src/ptbench/data/shenzhen/fold_9_rgb.py
new file mode 100644
index 0000000000000000000000000000000000000000..729141dc3a134e4d5e815441262a58004b98ed80
--- /dev/null
+++ b/src/ptbench/data/shenzhen/fold_9_rgb.py
@@ -0,0 +1,45 @@
+# SPDX-FileCopyrightText: Copyright © 2023 Idiap Research Institute <contact@idiap.ch>
+#
+# SPDX-License-Identifier: GPL-3.0-or-later
+
+"""Shenzhen dataset for TB detection (cross validation fold 9, RGB)
+
+* Split reference: first 80% of TB and healthy CXR for "train", rest for "test"
+* This configuration resolution: 512 x 512 (default)
+* See :py:mod:`ptbench.data.shenzhen` for dataset details
+"""
+
+from clapper.logging import setup
+
+from ..base_datamodule import BaseDataModule
+from . import _maker, return_subsets
+
+logger = setup(__name__.split(".")[0], format="%(levelname)s: %(message)s")
+
+
+class Fold0Module(BaseDataModule):
+    def __init__(
+        self,
+        train_batch_size=1,
+        predict_batch_size=1,
+        drop_incomplete_batch=False,
+        multiproc_kwargs=None,
+    ):
+        super().__init__(
+            train_batch_size=train_batch_size,
+            predict_batch_size=predict_batch_size,
+            drop_incomplete_batch=drop_incomplete_batch,
+            multiproc_kwargs=multiproc_kwargs,
+        )
+
+    def setup(self, stage: str):
+        self.dataset = _maker("fold_9", RGB=True)
+        (
+            self.train_dataset,
+            self.validation_dataset,
+            self.extra_validation_datasets,
+            self.predict_dataset,
+        ) = return_subsets(self.dataset)
+
+
+datamodule = Fold0Module
diff --git a/src/ptbench/data/shenzhen/rgb.py b/src/ptbench/data/shenzhen/rgb.py
new file mode 100644
index 0000000000000000000000000000000000000000..6186990ec8023df5030ba84a9be627e80a95ba44
--- /dev/null
+++ b/src/ptbench/data/shenzhen/rgb.py
@@ -0,0 +1,46 @@
+# SPDX-FileCopyrightText: Copyright © 2023 Idiap Research Institute <contact@idiap.ch>
+#
+# SPDX-License-Identifier: GPL-3.0-or-later
+
+"""Shenzhen dataset for TB detection (default protocol, converted in RGB)
+
+* Split reference: first 64% of TB and healthy CXR for "train" 16% for
+* "validation", 20% for "test"
+* This configuration resolution: 512 x 512 (default)
+* See :py:mod:`ptbench.data.shenzhen` for dataset details
+"""
+
+from clapper.logging import setup
+
+from ..base_datamodule import BaseDataModule
+from . import _maker, return_subsets
+
+logger = setup(__name__.split(".")[0], format="%(levelname)s: %(message)s")
+
+
+class DefaultModule(BaseDataModule):
+    def __init__(
+        self,
+        train_batch_size=1,
+        predict_batch_size=1,
+        drop_incomplete_batch=False,
+        multiproc_kwargs=None,
+    ):
+        super().__init__(
+            train_batch_size=train_batch_size,
+            predict_batch_size=predict_batch_size,
+            drop_incomplete_batch=drop_incomplete_batch,
+            multiproc_kwargs=multiproc_kwargs,
+        )
+
+    def setup(self, stage: str):
+        self.dataset = _maker("default", RGB=True)
+        (
+            self.train_dataset,
+            self.validation_dataset,
+            self.extra_validation_datasets,
+            self.predict_dataset,
+        ) = return_subsets(self.dataset)
+
+
+datamodule = DefaultModule