Skip to content

Commit

Permalink
Change Config API
Browse files Browse the repository at this point in the history
- deprecate `datasets_from_config()`
- Config.load_datasets() instead
- Config.from_dict()
  • Loading branch information
sbinnee committed Mar 9, 2022
1 parent 16ebc96 commit eb95903
Show file tree
Hide file tree
Showing 5 changed files with 60 additions and 47 deletions.
5 changes: 3 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -60,7 +60,7 @@ Find full guides at [bioimageloader-docs:User Guides]
Load DSB2018 and [_Triple Negative Breast Cancer (TNBC)_](https://ieeexplore.ieee.org/document/8438559)

```python
from bioimageloader import datasets_from_config, ConcatDataset
from bioimageloader import Config, ConcatDataset
from bioimageloader.collections import DSB2018, TNBC
import albumentations as A

Expand All @@ -73,7 +73,8 @@ Find full guides at [bioimageloader-docs:User Guides]
'DSB2018': { 'root_dir': 'path/to/root_dir' },
'TNBC' : { 'root_dir': 'path/to/root_dir' },
}
datasets = datasets_from_config(cfg, transforms=transforms)
config = Config.from_dict(cfg)
datasets = config.load_datasets(transforms=transforms)
cat = ConcatDataset(datasets)
for meow in cat:
image = meow['image']
Expand Down
3 changes: 1 addition & 2 deletions bioimageloader/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,11 +4,10 @@
"""

from .batch import BatchDataloader, ConcatDataset
from .config import Config, datasets_from_config
from .config import Config

__all__ = [
'BatchDataloader',
'ConcatDataset',
'Config',
'datasets_from_config',
]
71 changes: 40 additions & 31 deletions bioimageloader/config.py
Original file line number Diff line number Diff line change
Expand Up @@ -17,38 +17,47 @@ class Config(dict):
"""
def __init__(self, filename):
self.filename = filename
cfg = Config.read_yaml(filename)
for k, i in cfg.items():
self[k] = i
cfg = self._read_yaml()
for k, v in cfg.items():
self[k] = v

@staticmethod
def read_yaml(filename: str) -> dict:
with open(filename, 'r') as f:
def _read_yaml(self) -> dict:
with open(self.filename, 'r') as f:
cfg = yaml.safe_load(f)
return cfg


def datasets_from_config(
config: Config,
transforms: Optional[Union[albumentations.Compose, Dict[str, albumentations.Compose]]] = None,
) -> List[Dataset]:
"""Load multiple datasets from a yaml file
Parameters
----------
config : configuration object
Config instance that contains acronyms and arguments to initialize
each dataset
transforms : albumentations.Compose or dictionary, optional
Either apply a single composed transformations for every datasets or
pass a dictionary that defines transformations for each dataset with
keys being the acronyms of datsets.
"""
datasets: List[Dataset] = []
for dataset, kwargs in config.items():
if isinstance(transforms, dict):
exec(f'datasets.append({dataset}(transforms=transforms[dataset], **kwargs))')
else:
exec(f'datasets.append({dataset}(transforms=transforms, **kwargs))')
return datasets
@staticmethod
def from_dict(d: dict):
return _Config(d)

def load_datasets(
self,
transforms: Optional[Union[albumentations.Compose, Dict[str, albumentations.Compose]]] = None,
) -> List[Dataset]:
"""Load multiple datasets from a yaml file
Parameters
----------
config : configuration object
Config instance that contains acronyms and arguments to initialize
each dataset
transforms : albumentations.Compose or dictionary, optional
Either apply a single composed transformations for every datasets or
pass a dictionary that defines transformations for each dataset with
keys being the acronyms of datsets.
"""
datasets: List[Dataset] = []
for dataset, kwargs in self.items():
if isinstance(transforms, dict):
exec(f'datasets.append({dataset}(transforms=transforms[dataset], **kwargs))')
else:
exec(f'datasets.append({dataset}(transforms=transforms, **kwargs))')
return datasets


class _Config(Config):
"""Config.from_dict()"""
def __init__(self, d: dict):
for k, v in d.items():
self[k] = v
26 changes: 15 additions & 11 deletions bioimageloader/transforms.py
Original file line number Diff line number Diff line change
Expand Up @@ -23,14 +23,15 @@ class HWCToCHW(albumentations.ImageOnlyTransform):
Examples
--------
>>> import albumentations as A
>>> from bioimageloader import Config, datasets_from_config
>>> from bioimageloader import Config
>>> cfg = Config('config.yml')
>>> transforms = A.Compose([
HWCToCHW(),
])
>>> dataset = datasets_from_config(cfg, transforms=transforms)
>>> data = dataset[0]
>>> datasets = cfg.load_datasets(transforms=transforms)
>>> dset = datasets[0] # select only the first dataset
>>> data = dset[0] # select only the first image
>>> print(data['image'].shape)
(3, H, W)
Expand Down Expand Up @@ -68,15 +69,16 @@ class SqueezeGrayImageCHW(albumentations.ImageOnlyTransform):
Examples
--------
>>> import albumentations as A
>>> from bioimageloader import Config, datasets_from_config
>>> from bioimageloader import Config
>>> cfg = Config('config.yml')
>>> transforms = A.Compose([
HWCToCHW(),
SqueezeGrayImageCHW(),
])
>>> dataset = datasets_from_config(cfg, transforms=transforms)
>>> data = dataset[0]
>>> datasets = cfg.load_datasets(transforms=transforms)
>>> dset = datasets[0] # select only the first dataset
>>> data = dset[0] # select only the first image
>>> print(data['image'].shape)
(1, H, W)
Expand All @@ -87,8 +89,9 @@ class SqueezeGrayImageCHW(albumentations.ImageOnlyTransform):
HWCToCHW(),
SqueezeGrayImageCHW(keep_dim=False), # drop channel axis
])
>>> dataset = datasets_from_config(cfg, transforms=transforms)
>>> data = dataset[0]
>>> datasets = cfg.load_datasets(transforms=transforms)
>>> dset = datasets[0] # select only the first dataset
>>> data = dset[0] # select only the first image
>>> print(data['image'].shape)
(H, W)
Expand Down Expand Up @@ -139,14 +142,15 @@ class SqueezeGrayImageHWC(albumentations.ImageOnlyTransform):
Examples
--------
>>> import albumentations as A
>>> from bioimageloader import Config, datasets_from_config
>>> from bioimageloader import Config
>>> cfg = Config('config.yml')
>>> transforms = A.Compose([
SqueezeGrayImageHWC(),
])
>>> dataset = datasets_from_config(cfg, transforms=transforms)
>>> data = dataset[0]
>>> datasets = cfg.load_datasets(transforms=transforms)
>>> dset = datasets[0] # select only the first dataset
>>> data = dset[0] # select only the first image
>>> print(data['image'].shape)
(H, W)
Expand Down

0 comments on commit eb95903

Please sign in to comment.