# Copyright © 2022 Idiap Research Institute <contact@idiap.ch>
#
# SPDX-License-Identifier: GPL-3.0-or-later
"""Aggregated DataModule composed of Montgomery, Shenzhen, Indian, and PadChest
datasets.
"""
import pathlib
from ....data.datamodule import ConcatDataModule
from ..indian.datamodule import CONFIGURATION_KEY_DATADIR as INDIAN_KEY_DATADIR
from ..indian.datamodule import RawDataLoader as IndianLoader
from ..indian.datamodule import make_split as make_indian_split
from ..montgomery.datamodule import RawDataLoader as MontgomeryLoader
from ..montgomery.datamodule import make_split as make_montgomery_split
from ..padchest.datamodule import RawDataLoader as PadchestLoader
from ..padchest.datamodule import make_split as make_padchest_split
from ..shenzhen.datamodule import RawDataLoader as ShenzhenLoader
from ..shenzhen.datamodule import make_split as make_shenzhen_split
[docs]
class DataModule(ConcatDataModule):
"""Aggregated DataModule composed of Montgomery, Shenzhen, Indian, and
PadChest datasets.
Parameters
----------
split_filename
Name of the .json file containing the split to load.
padchest_split_filename
Name of the .json file from padchest containing the split to load.
"""
def __init__(self, split_filename: str, padchest_split_filename: str):
montgomery_loader = MontgomeryLoader()
montgomery_split = make_montgomery_split(split_filename)
shenzhen_loader = ShenzhenLoader()
shenzhen_split = make_shenzhen_split(split_filename)
indian_loader = IndianLoader(INDIAN_KEY_DATADIR)
indian_split = make_indian_split(split_filename)
padchest_loader = PadchestLoader()
padchest_split = make_padchest_split(padchest_split_filename)
super().__init__(
splits={
"train": [
(montgomery_split["train"], montgomery_loader),
(shenzhen_split["train"], shenzhen_loader),
(indian_split["train"], indian_loader),
(padchest_split["train"], padchest_loader),
],
"validation": [
(montgomery_split["validation"], montgomery_loader),
(shenzhen_split["validation"], shenzhen_loader),
(indian_split["validation"], indian_loader),
# there is no validation set on padchest...
# (padchest_split["validation"], padchest_loader),
],
"test": [
(montgomery_split["test"], montgomery_loader),
(shenzhen_split["test"], shenzhen_loader),
(indian_split["test"], indian_loader),
(padchest_split["test"], padchest_loader),
],
},
database_name=__package__.split(".")[-1],
split_name=(
pathlib.Path(split_filename).stem
+ "+"
+ pathlib.Path(padchest_split_filename).stem
),
)