|
25 | 25 | CenterSpatialCropd, |
26 | 26 | SpatialPadd, |
27 | 27 | Resized, |
| 28 | + LoadImaged, # For filename-based datasets (PNG, JPG, etc.) |
| 29 | + EnsureChannelFirstd, # Ensure channel-first format for 2D/3D images |
28 | 30 | ) |
29 | 31 |
|
30 | 32 | # Import custom loader for HDF5/TIFF volumes |
@@ -71,11 +73,20 @@ def build_train_transforms( |
71 | 73 |
|
72 | 74 | # Load images first (unless using pre-cached dataset) |
73 | 75 | if not skip_loading: |
74 | | - # Get transpose axes for training data |
75 | | - train_transpose = cfg.data.train_transpose if cfg.data.train_transpose else [] |
76 | | - transforms.append( |
77 | | - LoadVolumed(keys=keys, transpose_axes=train_transpose if train_transpose else None) |
78 | | - ) |
| 76 | + # Use appropriate loader based on dataset type |
| 77 | + dataset_type = getattr(cfg.data, "dataset_type", "volume") # Default to volume for backward compatibility |
| 78 | + |
| 79 | + if dataset_type == "filename": |
| 80 | + # For filename-based datasets (PNG, JPG, etc.), use MONAI's LoadImaged |
| 81 | + transforms.append(LoadImaged(keys=keys, image_only=False)) |
| 82 | + # Ensure channel-first format [C, H, W] or [C, D, H, W] |
| 83 | + transforms.append(EnsureChannelFirstd(keys=keys)) |
| 84 | + else: |
| 85 | + # For volume-based datasets (HDF5, TIFF volumes), use custom LoadVolumed |
| 86 | + train_transpose = cfg.data.train_transpose if cfg.data.train_transpose else [] |
| 87 | + transforms.append( |
| 88 | + LoadVolumed(keys=keys, transpose_axes=train_transpose if train_transpose else None) |
| 89 | + ) |
79 | 90 |
|
80 | 91 | # Apply volumetric split if enabled |
81 | 92 | if cfg.data.split_enabled: |
@@ -212,12 +223,20 @@ def build_val_transforms(cfg: Config, keys: list[str] = None) -> Compose: |
212 | 223 |
|
213 | 224 | transforms = [] |
214 | 225 |
|
215 | | - # Load images first |
216 | | - # Get transpose axes for validation data |
217 | | - val_transpose = cfg.data.val_transpose if cfg.data.val_transpose else [] |
218 | | - transforms.append( |
219 | | - LoadVolumed(keys=keys, transpose_axes=val_transpose if val_transpose else None) |
220 | | - ) |
| 226 | + # Load images first - use appropriate loader based on dataset type |
| 227 | + dataset_type = getattr(cfg.data, "dataset_type", "volume") # Default to volume for backward compatibility |
| 228 | + |
| 229 | + if dataset_type == "filename": |
| 230 | + # For filename-based datasets (PNG, JPG, etc.), use MONAI's LoadImaged |
| 231 | + transforms.append(LoadImaged(keys=keys, image_only=False)) |
| 232 | + # Ensure channel-first format [C, H, W] or [C, D, H, W] |
| 233 | + transforms.append(EnsureChannelFirstd(keys=keys)) |
| 234 | + else: |
| 235 | + # For volume-based datasets (HDF5, TIFF volumes), use custom LoadVolumed |
| 236 | + val_transpose = cfg.data.val_transpose if cfg.data.val_transpose else [] |
| 237 | + transforms.append( |
| 238 | + LoadVolumed(keys=keys, transpose_axes=val_transpose if val_transpose else None) |
| 239 | + ) |
221 | 240 |
|
222 | 241 | # Apply volumetric split if enabled |
223 | 242 | if cfg.data.split_enabled: |
@@ -342,20 +361,29 @@ def build_test_transforms(cfg: Config, keys: list[str] = None) -> Compose: |
342 | 361 |
|
343 | 362 | transforms = [] |
344 | 363 |
|
345 | | - # Load images first |
346 | | - # Get transpose axes for test data (check both data.test_transpose and inference.data.test_transpose) |
347 | | - test_transpose = [] |
348 | | - if cfg.data.test_transpose: |
349 | | - test_transpose = cfg.data.test_transpose |
350 | | - if ( |
351 | | - hasattr(cfg, "inference") |
352 | | - and hasattr(cfg.inference, "data") |
353 | | - and hasattr(cfg.inference.data, "test_transpose") |
354 | | - and cfg.inference.data.test_transpose |
355 | | - ): |
356 | | - test_transpose = cfg.inference.data.test_transpose # inference takes precedence |
357 | | - transforms.append( |
358 | | - LoadVolumed(keys=keys, transpose_axes=test_transpose if test_transpose else None) |
| 364 | + # Load images first - use appropriate loader based on dataset type |
| 365 | + dataset_type = getattr(cfg.data, "dataset_type", "volume") # Default to volume for backward compatibility |
| 366 | + |
| 367 | + if dataset_type == "filename": |
| 368 | + # For filename-based datasets (PNG, JPG, etc.), use MONAI's LoadImaged |
| 369 | + transforms.append(LoadImaged(keys=keys, image_only=False)) |
| 370 | + # Ensure channel-first format [C, H, W] or [C, D, H, W] |
| 371 | + transforms.append(EnsureChannelFirstd(keys=keys)) |
| 372 | + else: |
| 373 | + # For volume-based datasets (HDF5, TIFF volumes), use custom LoadVolumed |
| 374 | + # Get transpose axes for test data (check both data.test_transpose and inference.data.test_transpose) |
| 375 | + test_transpose = [] |
| 376 | + if cfg.data.test_transpose: |
| 377 | + test_transpose = cfg.data.test_transpose |
| 378 | + if ( |
| 379 | + hasattr(cfg, "inference") |
| 380 | + and hasattr(cfg.inference, "data") |
| 381 | + and hasattr(cfg.inference.data, "test_transpose") |
| 382 | + and cfg.inference.data.test_transpose |
| 383 | + ): |
| 384 | + test_transpose = cfg.inference.data.test_transpose # inference takes precedence |
| 385 | + transforms.append( |
| 386 | + LoadVolumed(keys=keys, transpose_axes=test_transpose if test_transpose else None) |
359 | 387 | ) |
360 | 388 |
|
361 | 389 | # Apply volumetric split if enabled (though typically not used for test) |
|
0 commit comments