diff --git a/bob/ip/binseg/configs/datasets/drivechasedb1iostarhrf608sslstare.py b/bob/ip/binseg/configs/datasets/drivechasedb1iostarhrf608sslstare.py index c2d041a9f4c68b2d85a47dc02e5b5e70382ef26c..e09f9b033536d776a1d045c68d1abb58a796fd91 100644 --- a/bob/ip/binseg/configs/datasets/drivechasedb1iostarhrf608sslstare.py +++ b/bob/ip/binseg/configs/datasets/drivechasedb1iostarhrf608sslstare.py @@ -26,7 +26,7 @@ from bob.ip.binseg.configs.datasets.hrf608 import dataset as _hrf _labelled = torch.utils.data.ConcatDataset([_drive, _chase, _iostar, _hrf]) # Use STARE without labels in this setup -from .stare import dataset as _unlabelled +from bob.ip.binseg.configs.datasets.stare import dataset as _unlabelled from bob.ip.binseg.data.utils import SSLDataset dataset = SSLDataset(_labelled, _unlabelled) diff --git a/bob/ip/binseg/configs/datasets/drivestarechasedb11168.py b/bob/ip/binseg/configs/datasets/drivestarechasedb11168.py deleted file mode 100644 index 1a7274ee91793f350c1819ca7726532ee3d384ab..0000000000000000000000000000000000000000 --- a/bob/ip/binseg/configs/datasets/drivestarechasedb11168.py +++ /dev/null @@ -1,9 +0,0 @@ -from bob.ip.binseg.configs.datasets.drive1168 import dataset as drive -from bob.ip.binseg.configs.datasets.stare1168 import dataset as stare -from bob.ip.binseg.configs.datasets.chasedb11168 import dataset as chase -import torch - -#### Config #### - -# PyTorch dataset -dataset = torch.utils.data.ConcatDataset([drive, stare, chase]) diff --git a/bob/ip/binseg/configs/datasets/drivestarechasedb1iostar1168.py b/bob/ip/binseg/configs/datasets/drivestarechasedb1iostar1168.py index 3bb4f28e4f3b75acea6c62011527ef801d331739..b6258f3fe4c6e6c85ce1a59b931924510ef00a8b 100644 --- a/bob/ip/binseg/configs/datasets/drivestarechasedb1iostar1168.py +++ b/bob/ip/binseg/configs/datasets/drivestarechasedb1iostar1168.py @@ -1,10 +1,13 @@ -from bob.ip.binseg.configs.datasets.drive1168 import dataset as drive -from bob.ip.binseg.configs.datasets.stare1168 import dataset as stare -from bob.ip.binseg.configs.datasets.chasedb11168 import dataset as chase -from bob.ip.binseg.configs.datasets.iostarvessel1168 import dataset as iostar -import torch +#!/usr/bin/env python +# coding=utf-8 -#### Config #### +"""COVD-HRF (training set) for Vessel Segmentation +""" -# PyTorch dataset -dataset = torch.utils.data.ConcatDataset([drive, stare, chase, iostar]) +from bob.ip.binseg.configs.datasets.drive1168 import dataset as _drive +from bob.ip.binseg.configs.datasets.stare1168 import dataset as _stare +from bob.ip.binseg.configs.datasets.chasedb11168 import dataset as _chase +from bob.ip.binseg.configs.datasets.iostarvessel1168 import dataset as _iostar + +import torch.utils.data +dataset = torch.utils.data.ConcatDataset([_drive, _stare, _chase, _iostar]) diff --git a/bob/ip/binseg/configs/datasets/drivestarechasedb1iostar1168sslhrf.py b/bob/ip/binseg/configs/datasets/drivestarechasedb1iostar1168sslhrf.py index 3b3d2f2ef4a130d540cf956186655496f31e46cb..9cf7b838c43042962f7fa7dda2abccc845032778 100644 --- a/bob/ip/binseg/configs/datasets/drivestarechasedb1iostar1168sslhrf.py +++ b/bob/ip/binseg/configs/datasets/drivestarechasedb1iostar1168sslhrf.py @@ -1,43 +1,20 @@ -from bob.ip.binseg.configs.datasets.drive1168 import dataset as drive -from bob.ip.binseg.configs.datasets.stare1168 import dataset as stare -from bob.ip.binseg.configs.datasets.chasedb11168 import dataset as chasedb -from bob.ip.binseg.configs.datasets.iostarvessel1168 import dataset as iostar -from bob.db.hrf import Database as HRF -from bob.ip.binseg.data.transforms import * -import torch -from bob.ip.binseg.data.binsegdataset import ( - BinSegDataset, - SSLBinSegDataset, - UnLabeledBinSegDataset, -) +#!/usr/bin/env python +# -*- coding: utf-8 -*- +"""HRF (SSL training set) for Vessel Segmentation -#### Config #### +The database includes 15 images of each healthy, diabetic retinopathy (DR), and +glaucomatous eyes. It contains 45 eye fundus images with a resolution of 3504 +x 2336. One set of ground-truth vessel annotations is available. -# PyTorch dataset -labeled_dataset = torch.utils.data.ConcatDataset([drive, stare, iostar, chasedb]) +* Reference: [HRF-2013]_ +* Configuration resolution: 1168 x 1648 -#### Unlabeled HRF TRAIN #### -unlabeled_transforms = Compose( - [ - RandomRotation(), - Crop(0, 108, 2336, 3296), - Resize((1168)), - RandomHFlip(), - RandomVFlip(), - ColorJitter(), - ToTensor(), - ] -) +The dataset available in this file is composed of STARE, CHASE-DB1, IOSTAR +vessel and CHASE-DB1 (with annotated samples) and HRF without labels. +""" -# bob.db.dataset init -hrfbobdb = HRF(protocol="default") - -# PyTorch dataset -unlabeled_dataset = UnLabeledBinSegDataset( - hrfbobdb, split="train", transform=unlabeled_transforms -) - -# SSL Dataset - -dataset = SSLBinSegDataset(labeled_dataset, unlabeled_dataset) +from bob.ip.binseg.configs.datasets.drivestarechasedb1iostar1168 import dataset as _labelled +from bob.ip.binseg.configs.datasets.hrf1168 import dataset as _unlabelled +from bob.ip.binseg.data.utils import SSLDataset +dataset = SSLDataset(_labelled, _unlabelled) diff --git a/bob/ip/binseg/configs/datasets/drivestareiostarhrf960sslchase.py b/bob/ip/binseg/configs/datasets/drivestareiostarhrf960sslchase.py index e01d70e8864af57af2875512a089a897f8a61651..1306a2f41ace4223cb924b60434c010b92c7e3a8 100644 --- a/bob/ip/binseg/configs/datasets/drivestareiostarhrf960sslchase.py +++ b/bob/ip/binseg/configs/datasets/drivestareiostarhrf960sslchase.py @@ -23,16 +23,7 @@ The dataset available in this file is composed of STARE, CHASE-DB1, IOSTAR vessel and HRF (with annotated samples) and CHASE-DB1 without labels. """ -# Labelled bits -import torch.utils.data -from bob.ip.binseg.configs.datasets.drive960 import dataset as _drive -from bob.ip.binseg.configs.datasets.stare960 import dataset as _stare -from bob.ip.binseg.configs.datasets.hrf960 import dataset as _hrf -from bob.ip.binseg.configs.datasets.iostarvessel960 import dataset as _iostar -_labelled = torch.utils.data.ConcatDataset([_drive, _stare, _hrf, _iostar]) - -# Use CHASE-DB1 without labels in this setup +from bob.ip.binseg.configs.datasets.drivestareiostarhrf960 import dataset as _labelled from bob.ip.binseg.configs.datasets.chasedb1 import dataset as _unlabelled - from bob.ip.binseg.data.utils import SSLDataset dataset = SSLDataset(_labelled, _unlabelled) diff --git a/bob/ip/binseg/configs/datasets/hrf.py b/bob/ip/binseg/configs/datasets/hrf.py index b13302096e74d5e9306b25a2c5fb7970ffeb890c..95df5b007538576ab45f8d050daf0ccbd5fefbd3 100644 --- a/bob/ip/binseg/configs/datasets/hrf.py +++ b/bob/ip/binseg/configs/datasets/hrf.py @@ -1,13 +1,21 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -from bob.db.hrf import Database as HRF -from bob.ip.binseg.data.transforms import * -from bob.ip.binseg.data.binsegdataset import BinSegDataset +"""HRF (training set) for Vessel Segmentation + +The database includes 15 images of each healthy, diabetic retinopathy (DR), and +glaucomatous eyes. It contains 45 eye fundus images with a resolution of 3504 +x 2336. One set of ground-truth vessel annotations is available. -#### Config #### +* Reference: [HRF-2013]_ +* Original resolution (height x width): 2336 x 3504 +* Configuration resolution: 2336 x 3296 (after specific cropping and rescaling) +* Training samples: 15 +* Split reference: [ORLANDO-2017]_ +""" -transforms = Compose( +from bob.ip.binseg.data.transforms import * +_transforms = Compose( [ Crop(0, 108, 2336, 3296), RandomHFlip(), @@ -18,8 +26,7 @@ transforms = Compose( ] ) -# bob.db.dataset init -bobdb = HRF(protocol="default") - -# PyTorch dataset -dataset = BinSegDataset(bobdb, split="train", transform=transforms) +from bob.ip.binseg.data.utils import DelayedSample2TorchDataset +from bob.ip.binseg.data.hrf import dataset as hrf +dataset = DelayedSample2TorchDataset(hrf.subsets("default")["train"], + transform=_transforms) diff --git a/bob/ip/binseg/configs/datasets/hrf1024.py b/bob/ip/binseg/configs/datasets/hrf1024.py index e07bd883ee7a4f9bc7bfeb2d196f09af03b01875..a1d7cb36f144ccd7741886c490fe01b9d7585dc4 100644 --- a/bob/ip/binseg/configs/datasets/hrf1024.py +++ b/bob/ip/binseg/configs/datasets/hrf1024.py @@ -1,13 +1,21 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -from bob.db.hrf import Database as HRF -from bob.ip.binseg.data.transforms import * -from bob.ip.binseg.data.binsegdataset import BinSegDataset +"""HRF (training set) for Vessel Segmentation + +The database includes 15 images of each healthy, diabetic retinopathy (DR), and +glaucomatous eyes. It contains 45 eye fundus images with a resolution of 3504 +x 2336. One set of ground-truth vessel annotations is available. -#### Config #### +* Reference: [HRF-2013]_ +* Original resolution (height x width): 2336 x 3504 +* Configuration resolution: 1024 x ? (after specific padding and rescaling) +* Training samples: 15 +* Split reference: [ORLANDO-2017]_ +""" -transforms = Compose( +from bob.ip.binseg.data.transforms import * +_transforms = Compose( [ Pad((0, 584, 0, 584)), Resize((1024)), @@ -19,8 +27,7 @@ transforms = Compose( ] ) -# bob.db.dataset init -bobdb = HRF(protocol="default") - -# PyTorch dataset -dataset = BinSegDataset(bobdb, split="train", transform=transforms) +from bob.ip.binseg.data.utils import DelayedSample2TorchDataset +from bob.ip.binseg.data.hrf import dataset as hrf +dataset = DelayedSample2TorchDataset(hrf.subsets("default")["train"], + transform=_transforms) diff --git a/bob/ip/binseg/configs/datasets/hrf1168.py b/bob/ip/binseg/configs/datasets/hrf1168.py index 64ebef45239073173a0890133634e2cbc9a5ff0f..67ece23f361a288247984b9a36e14f78fa511a55 100644 --- a/bob/ip/binseg/configs/datasets/hrf1168.py +++ b/bob/ip/binseg/configs/datasets/hrf1168.py @@ -4,23 +4,18 @@ """HRF (training set) for Vessel Segmentation The database includes 15 images of each healthy, diabetic retinopathy (DR), and -glaucomatous eyes. It contains 45 eye fundus images with a resolution of 3304 +glaucomatous eyes. It contains 45 eye fundus images with a resolution of 3504 x 2336. One set of ground-truth vessel annotations is available. * Reference: [HRF-2013]_ * Original resolution (height x width): 2336 x 3504 -* Configuration resolution: 1168 x 1648 (after specific cropping and rescaling) +* Configuration resolution: 1168 x 1648 (after specific padding and rescaling) * Training samples: 15 * Split reference: [ORLANDO-2017]_ """ -from bob.db.hrf import Database as HRF from bob.ip.binseg.data.transforms import * -from bob.ip.binseg.data.binsegdataset import BinSegDataset - -#### Config #### - -transforms = Compose( +_transforms = Compose( [ Crop(0, 108, 2336, 3296), #(upper, left, height, width) Resize((1168)), # applies to the smaller edge @@ -32,8 +27,7 @@ transforms = Compose( ] ) -# bob.db.dataset init -bobdb = HRF(protocol="default") - -# PyTorch dataset -dataset = BinSegDataset(bobdb, split="train", transform=transforms) +from bob.ip.binseg.data.utils import DelayedSample2TorchDataset +from bob.ip.binseg.data.hrf import dataset as hrf +dataset = DelayedSample2TorchDataset(hrf.subsets("default")["train"], + transform=_transforms) diff --git a/bob/ip/binseg/configs/datasets/hrf1168test.py b/bob/ip/binseg/configs/datasets/hrf1168test.py index 86d968f46f24ca4deaacb95ff71d9e4185dd352e..d73da151cbaa28bcc9e33573bbe224911a6832b4 100644 --- a/bob/ip/binseg/configs/datasets/hrf1168test.py +++ b/bob/ip/binseg/configs/datasets/hrf1168test.py @@ -1,16 +1,23 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -from bob.db.hrf import Database as HRF -from bob.ip.binseg.data.transforms import * -from bob.ip.binseg.data.binsegdataset import BinSegDataset +"""HRF (test set) for Vessel Segmentation -#### Config #### +The database includes 15 images of each healthy, diabetic retinopathy (DR), and +glaucomatous eyes. It contains 45 eye fundus images with a resolution of 3304 +x 2336. One set of ground-truth vessel annotations is available. -transforms = Compose([Crop(0, 108, 2336, 3296), Resize((1168)), ToTensor()]) +* Reference: [HRF-2013]_ +* Original resolution (height x width): 2336 x 3504 +* Configuration resolution: 1168 x 1648 (after specific cropping and rescaling) +* Test samples: 30 +* Split reference: [ORLANDO-2017]_ +""" -# bob.db.dataset init -bobdb = HRF(protocol="default") +from bob.ip.binseg.data.transforms import * +_transforms = Compose([Crop(0, 108, 2336, 3296), Resize((1168)), ToTensor()]) -# PyTorch dataset -dataset = BinSegDataset(bobdb, split="test", transform=transforms) +from bob.ip.binseg.data.utils import DelayedSample2TorchDataset +from bob.ip.binseg.data.hrf import dataset as hrf +dataset = DelayedSample2TorchDataset(hrf.subsets("default")["test"], + transform=_transforms) diff --git a/bob/ip/binseg/configs/datasets/hrf544.py b/bob/ip/binseg/configs/datasets/hrf544.py index 6cd9ccf0ef2f7283034afcb3089a3a5618600b2c..d45b424728e8d01ede9ab33c2b7ffaf4034ec40a 100644 --- a/bob/ip/binseg/configs/datasets/hrf544.py +++ b/bob/ip/binseg/configs/datasets/hrf544.py @@ -1,13 +1,21 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -from bob.db.hrf import Database as HRF -from bob.ip.binseg.data.transforms import * -from bob.ip.binseg.data.binsegdataset import BinSegDataset +"""HRF (training set) for Vessel Segmentation + +The database includes 15 images of each healthy, diabetic retinopathy (DR), and +glaucomatous eyes. It contains 45 eye fundus images with a resolution of 3304 +x 2336. One set of ground-truth vessel annotations is available. -#### Config #### +* Reference: [HRF-2013]_ +* Original resolution (height x width): 2336 x 3504 +* Configuration resolution: 544 x 544 (after specific padding and rescaling) +* Test samples: 30 +* Split reference: [ORLANDO-2017]_ +""" -transforms = Compose( +from bob.ip.binseg.data.transforms import * +_transforms = Compose( [ Resize((363)), Pad((0, 90, 0, 91)), @@ -19,8 +27,7 @@ transforms = Compose( ] ) -# bob.db.dataset init -bobdb = HRF(protocol="default") - -# PyTorch dataset -dataset = BinSegDataset(bobdb, split="train", transform=transforms) +from bob.ip.binseg.data.utils import DelayedSample2TorchDataset +from bob.ip.binseg.data.hrf import dataset as hrf +dataset = DelayedSample2TorchDataset(hrf.subsets("default")["train"], + transform=_transforms) diff --git a/bob/ip/binseg/configs/datasets/hrf544test.py b/bob/ip/binseg/configs/datasets/hrf544test.py index 45a3e61df22e8a99c3ea199652815ccc4e3c0148..16102bf817e8141be1993f8ff617316d4cb9753d 100644 --- a/bob/ip/binseg/configs/datasets/hrf544test.py +++ b/bob/ip/binseg/configs/datasets/hrf544test.py @@ -1,16 +1,29 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -from bob.db.hrf import Database as HRF -from bob.ip.binseg.data.transforms import * -from bob.ip.binseg.data.binsegdataset import BinSegDataset +"""HRF (test set) for Vessel Segmentation -#### Config #### +The database includes 15 images of each healthy, diabetic retinopathy (DR), and +glaucomatous eyes. It contains 45 eye fundus images with a resolution of 3304 +x 2336. One set of ground-truth vessel annotations is available. -transforms = Compose([Resize((363)), Pad((0, 90, 0, 91)), ToTensor()]) +* Reference: [HRF-2013]_ +* Original resolution (height x width): 2336 x 3504 +* Configuration resolution: 544 x 544 (after specific padding and rescaling) +* Test samples: 30 +* Split reference: [ORLANDO-2017]_ +""" -# bob.db.dataset init -bobdb = HRF(protocol="default") +from bob.ip.binseg.data.transforms import * +_transforms = Compose( + [ + Resize((363)), + Pad((0, 90, 0, 91)), + ToTensor(), + ] +) -# PyTorch dataset -dataset = BinSegDataset(bobdb, split="test", transform=transforms) +from bob.ip.binseg.data.utils import DelayedSample2TorchDataset +from bob.ip.binseg.data.hrf import dataset as hrf +dataset = DelayedSample2TorchDataset(hrf.subsets("default")["test"], + transform=_transforms) diff --git a/bob/ip/binseg/configs/datasets/hrf608.py b/bob/ip/binseg/configs/datasets/hrf608.py index 7b232ea769872ec68247f31ac29f8235dc598bde..a1d4fbf900141676fe470eebb075d3a5a390f86a 100644 --- a/bob/ip/binseg/configs/datasets/hrf608.py +++ b/bob/ip/binseg/configs/datasets/hrf608.py @@ -1,13 +1,21 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -from bob.db.hrf import Database as HRF -from bob.ip.binseg.data.transforms import * -from bob.ip.binseg.data.binsegdataset import BinSegDataset +"""HRF (training set) for Vessel Segmentation + +The database includes 15 images of each healthy, diabetic retinopathy (DR), and +glaucomatous eyes. It contains 45 eye fundus images with a resolution of 3304 +x 2336. One set of ground-truth vessel annotations is available. -#### Config #### +* Reference: [HRF-2013]_ +* Original resolution (height x width): 2336 x 3504 +* Configuration resolution: 608 x 608 (after specific padding and rescaling) +* Training samples: 15 +* Split reference: [ORLANDO-2017]_ +""" -transforms = Compose( +from bob.ip.binseg.data.transforms import * +_transforms = Compose( [ Pad((0, 345, 0, 345)), Resize(608), @@ -19,8 +27,7 @@ transforms = Compose( ] ) -# bob.db.dataset init -bobdb = HRF(protocol="default") - -# PyTorch dataset -dataset = BinSegDataset(bobdb, split="train", transform=transforms) +from bob.ip.binseg.data.utils import DelayedSample2TorchDataset +from bob.ip.binseg.data.hrf import dataset as hrf +dataset = DelayedSample2TorchDataset(hrf.subsets("default")["train"], + transform=_transforms) diff --git a/bob/ip/binseg/configs/datasets/hrf960.py b/bob/ip/binseg/configs/datasets/hrf960.py index 059a831c63fbccdb884b1133fde8f9d7ccc24d93..2dd12ef62976ec0994be4eb2925f7f5e371177c5 100644 --- a/bob/ip/binseg/configs/datasets/hrf960.py +++ b/bob/ip/binseg/configs/datasets/hrf960.py @@ -1,13 +1,21 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- -from bob.db.hrf import Database as HRF -from bob.ip.binseg.data.transforms import * -from bob.ip.binseg.data.binsegdataset import BinSegDataset +"""HRF (training set) for Vessel Segmentation + +The database includes 15 images of each healthy, diabetic retinopathy (DR), and +glaucomatous eyes. It contains 45 eye fundus images with a resolution of 3304 +x 2336. One set of ground-truth vessel annotations is available. -#### Config #### +* Reference: [HRF-2013]_ +* Original resolution (height x width): 2336 x 3504 +* Configuration resolution: 960 x 960 (after specific padding and rescaling) +* Training samples: 15 +* Split reference: [ORLANDO-2017]_ +""" -transforms = Compose( +from bob.ip.binseg.data.transforms import * +_transforms = Compose( [ Pad((0, 584, 0, 584)), Resize((960)), @@ -19,8 +27,7 @@ transforms = Compose( ] ) -# bob.db.dataset init -bobdb = HRF(protocol="default") - -# PyTorch dataset -dataset = BinSegDataset(bobdb, split="train", transform=transforms) +from bob.ip.binseg.data.utils import DelayedSample2TorchDataset +from bob.ip.binseg.data.hrf import dataset as hrf +dataset = DelayedSample2TorchDataset(hrf.subsets("default")["train"], + transform=_transforms) diff --git a/bob/ip/binseg/configs/datasets/hrftest.py b/bob/ip/binseg/configs/datasets/hrftest.py index d106365a05e1e245a3d3073d1c25ec9489b883a4..0ae5d7630dbb870d19ab33a86980c5610866b8f5 100644 --- a/bob/ip/binseg/configs/datasets/hrftest.py +++ b/bob/ip/binseg/configs/datasets/hrftest.py @@ -4,26 +4,20 @@ """HRF (test set) for Vessel Segmentation The database includes 15 images of each healthy, diabetic retinopathy (DR), and -glaucomatous eyes. It contains 45 eye fundus images with a resolution of 3304 +glaucomatous eyes. It contains 45 eye fundus images with a resolution of 3504 x 2336. One set of ground-truth vessel annotations is available. * Reference: [HRF-2013]_ * Original resolution (height x width): 2336 x 3504 -* Configuration resolution: 1168 x 1648 (after specific cropping and rescaling) +* Configuration resolution: 2336 x 3296 (after specific cropping and rescaling) * Test samples: 30 * Split reference: [ORLANDO-2017]_ """ -from bob.db.hrf import Database as HRF from bob.ip.binseg.data.transforms import * -from bob.ip.binseg.data.binsegdataset import BinSegDataset +_transforms = Compose([Crop(0, 108, 2336, 3296), ToTensor()]) -#### Config #### - -transforms = Compose([Crop(0, 108, 2336, 3296), ToTensor()]) - -# bob.db.dataset init -bobdb = HRF(protocol="default") - -# PyTorch dataset -dataset = BinSegDataset(bobdb, split="test", transform=transforms) +from bob.ip.binseg.data.utils import DelayedSample2TorchDataset +from bob.ip.binseg.data.hrf import dataset as hrf +dataset = DelayedSample2TorchDataset(hrf.subsets("default")["test"], + transform=_transforms) diff --git a/bob/ip/binseg/data/hrf/__init__.py b/bob/ip/binseg/data/hrf/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e3b3fa804a3ae8f2b0f113f1b0602ae2477ece7f --- /dev/null +++ b/bob/ip/binseg/data/hrf/__init__.py @@ -0,0 +1,44 @@ +#!/usr/bin/env python +# coding=utf-8 + +"""HRF dataset for Vessel Segmentation + +The database includes 15 images of each healthy, diabetic retinopathy (DR), and +glaucomatous eyes. It contains a total of 45 eye fundus images with a +resolution of 3304 x 2336. One set of ground-truth vessel annotations is +available. + +* Reference: [HRF-2013]_ +* Original resolution (height x width): 2336 x 3504 +* Configuration resolution: 1168 x 1648 (after specific cropping and rescaling) +* Split reference: [ORLANDO-2017]_ +* Protocol ``default``: + + * Training samples: 15 (including labels) + * Test samples: 30 (including labels) + +""" + +import os +import pkg_resources + +import bob.extension + +from ..jsondataset import JSONDataset +from ..loader import load_pil_rgb, load_pil_1 + +_protocols = [ + pkg_resources.resource_filename(__name__, "default.json"), + ] + +_root_path = bob.extension.rc.get('bob.ip.binseg.hrf.datadir', + os.path.realpath(os.curdir)) + +def _loader(s): + return dict( + data=load_pil_rgb(s["data"]), + label=load_pil_1(s["label"]), + ) + +dataset = JSONDataset(protocols=_protocols, root_path=_root_path, loader=_loader) +"""HRF dataset object""" diff --git a/bob/ip/binseg/data/hrf/default.json b/bob/ip/binseg/data/hrf/default.json new file mode 100644 index 0000000000000000000000000000000000000000..87f29ad575e071c2abae8118c6b99c3d19dc24b8 --- /dev/null +++ b/bob/ip/binseg/data/hrf/default.json @@ -0,0 +1,231 @@ +{ + "train": [ + [ + "images/01_dr.JPG", + "manual1/01_dr.tif", + "mask/01_dr_mask.tif" + ], + [ + "images/02_dr.JPG", + "manual1/02_dr.tif", + "mask/02_dr_mask.tif" + ], + [ + "images/03_dr.JPG", + "manual1/03_dr.tif", + "mask/03_dr_mask.tif" + ], + [ + "images/04_dr.JPG", + "manual1/04_dr.tif", + "mask/04_dr_mask.tif" + ], + [ + "images/05_dr.JPG", + "manual1/05_dr.tif", + "mask/05_dr_mask.tif" + ], + [ + "images/01_g.jpg", + "manual1/01_g.tif", + "mask/01_g_mask.tif" + ], + [ + "images/02_g.jpg", + "manual1/02_g.tif", + "mask/02_g_mask.tif" + ], + [ + "images/03_g.jpg", + "manual1/03_g.tif", + "mask/03_g_mask.tif" + ], + [ + "images/04_g.jpg", + "manual1/04_g.tif", + "mask/04_g_mask.tif" + ], + [ + "images/05_g.jpg", + "manual1/05_g.tif", + "mask/05_g_mask.tif" + ], + [ + "images/01_h.jpg", + "manual1/01_h.tif", + "mask/01_h_mask.tif" + ], + [ + "images/02_h.jpg", + "manual1/02_h.tif", + "mask/02_h_mask.tif" + ], + [ + "images/03_h.jpg", + "manual1/03_h.tif", + "mask/03_h_mask.tif" + ], + [ + "images/04_h.jpg", + "manual1/04_h.tif", + "mask/04_h_mask.tif" + ], + [ + "images/05_h.jpg", + "manual1/05_h.tif", + "mask/05_h_mask.tif" + ] + ], + "test": [ + [ + "images/06_dr.JPG", + "manual1/06_dr.tif", + "mask/06_dr_mask.tif" + ], + [ + "images/07_dr.JPG", + "manual1/07_dr.tif", + "mask/07_dr_mask.tif" + ], + [ + "images/08_dr.JPG", + "manual1/08_dr.tif", + "mask/08_dr_mask.tif" + ], + [ + "images/09_dr.JPG", + "manual1/09_dr.tif", + "mask/09_dr_mask.tif" + ], + [ + "images/10_dr.JPG", + "manual1/10_dr.tif", + "mask/10_dr_mask.tif" + ], + [ + "images/11_dr.JPG", + "manual1/11_dr.tif", + "mask/11_dr_mask.tif" + ], + [ + "images/12_dr.JPG", + "manual1/12_dr.tif", + "mask/12_dr_mask.tif" + ], + [ + "images/13_dr.JPG", + "manual1/13_dr.tif", + "mask/13_dr_mask.tif" + ], + [ + "images/14_dr.JPG", + "manual1/14_dr.tif", + "mask/14_dr_mask.tif" + ], + [ + "images/15_dr.JPG", + "manual1/15_dr.tif", + "mask/15_dr_mask.tif" + ], + [ + "images/06_g.jpg", + "manual1/06_g.tif", + "mask/06_g_mask.tif" + ], + [ + "images/07_g.jpg", + "manual1/07_g.tif", + "mask/07_g_mask.tif" + ], + [ + "images/08_g.jpg", + "manual1/08_g.tif", + "mask/08_g_mask.tif" + ], + [ + "images/09_g.jpg", + "manual1/09_g.tif", + "mask/09_g_mask.tif" + ], + [ + "images/10_g.jpg", + "manual1/10_g.tif", + "mask/10_g_mask.tif" + ], + [ + "images/11_g.jpg", + "manual1/11_g.tif", + "mask/11_g_mask.tif" + ], + [ + "images/12_g.jpg", + "manual1/12_g.tif", + "mask/12_g_mask.tif" + ], + [ + "images/13_g.jpg", + "manual1/13_g.tif", + "mask/13_g_mask.tif" + ], + [ + "images/14_g.jpg", + "manual1/14_g.tif", + "mask/14_g_mask.tif" + ], + [ + "images/15_g.jpg", + "manual1/15_g.tif", + "mask/15_g_mask.tif" + ], + [ + "images/06_h.jpg", + "manual1/06_h.tif", + "mask/06_h_mask.tif" + ], + [ + "images/07_h.jpg", + "manual1/07_h.tif", + "mask/07_h_mask.tif" + ], + [ + "images/08_h.jpg", + "manual1/08_h.tif", + "mask/08_h_mask.tif" + ], + [ + "images/09_h.jpg", + "manual1/09_h.tif", + "mask/09_h_mask.tif" + ], + [ + "images/10_h.jpg", + "manual1/10_h.tif", + "mask/10_h_mask.tif" + ], + [ + "images/11_h.jpg", + "manual1/11_h.tif", + "mask/11_h_mask.tif" + ], + [ + "images/12_h.jpg", + "manual1/12_h.tif", + "mask/12_h_mask.tif" + ], + [ + "images/13_h.jpg", + "manual1/13_h.tif", + "mask/13_h_mask.tif" + ], + [ + "images/14_h.jpg", + "manual1/14_h.tif", + "mask/14_h_mask.tif" + ], + [ + "images/15_h.jpg", + "manual1/15_h.tif", + "mask/15_h_mask.tif" + ] + ] +} \ No newline at end of file diff --git a/bob/ip/binseg/data/hrf/test.py b/bob/ip/binseg/data/hrf/test.py new file mode 100644 index 0000000000000000000000000000000000000000..1cb21407c872611dc772ac9c5c50c8dcee309c8d --- /dev/null +++ b/bob/ip/binseg/data/hrf/test.py @@ -0,0 +1,77 @@ +#!/usr/bin/env python +# coding=utf-8 + + +"""Tests for STARE""" + +import os +import nose.tools + +from ..utils import rc_variable_set, DelayedSample2TorchDataset +from ..transforms import Compose, Crop, Resize +from . import dataset + + +def test_protocol_consitency(): + + subset = dataset.subsets("default") + nose.tools.eq_(len(subset), 2) + + assert "train" in subset + nose.tools.eq_(len(subset["train"]), 15) + for s in subset["train"]: + assert s.key.startswith(os.path.join("images", "0")) + + assert "test" in subset + nose.tools.eq_(len(subset["test"]), 30) + for s in subset["test"]: + assert s.key.startswith("images") + + +@rc_variable_set('bob.ip.binseg.hrf.datadir') +def test_loading(): + + def _check_sample(s): + data = s.data + assert isinstance(data, dict) + nose.tools.eq_(len(data), 2) + assert "data" in data + nose.tools.eq_(data["data"].size, (3504, 2336)) + nose.tools.eq_(data["data"].mode, "RGB") + assert "label" in data + nose.tools.eq_(data["label"].size, (3504, 2336)) + nose.tools.eq_(data["label"].mode, "1") + + subset = dataset.subsets("default") + for s in subset["train"]: _check_sample(s) + for s in subset["test"]: _check_sample(s) + + +@rc_variable_set('bob.ip.binseg.stare.datadir') +def test_check(): + nose.tools.eq_(dataset.check(), 0) + + +@rc_variable_set('bob.ip.binseg.stare.datadir') +def test_torch_dataset(): + + def _check_sample(s): + nose.tools.eq_(len(s), 3) + assert isinstance(s[0], str) + nose.tools.eq_(s[1].size, (1648, 1168)) + nose.tools.eq_(s[1].mode, "RGB") + nose.tools.eq_(s[2].size, (1648, 1168)) + nose.tools.eq_(s[2].mode, "1") + + + transforms = Compose([Crop(0, 108, 2336, 3296), Resize((1168))]) + + subset = dataset.subsets("default") + + torch_dataset = DelayedSample2TorchDataset(subset["train"], transforms) + nose.tools.eq_(len(torch_dataset), 15) + for s in torch_dataset: _check_sample(s) + + torch_dataset = DelayedSample2TorchDataset(subset["test"], transforms) + nose.tools.eq_(len(torch_dataset), 30) + for s in torch_dataset: _check_sample(s) diff --git a/bob/ip/binseg/data/jsondataset.py b/bob/ip/binseg/data/jsondataset.py index 99c554bfec6fe6482719aecfcbc27e05d4a08a89..6ce86a20cf0c8576fc423d38db2cdd8b8da30fc5 100644 --- a/bob/ip/binseg/data/jsondataset.py +++ b/bob/ip/binseg/data/jsondataset.py @@ -122,6 +122,8 @@ class JSONDataset: """ + logger.info(f"Checking dataset at '{self.root_path}'...") + errors = 0 for proto in self.protocols: logger.info(f"Checking protocol '{proto}'...") diff --git a/bob/ip/binseg/script/dataset.py b/bob/ip/binseg/script/dataset.py index b00d225e5af13faf394ec945acbc91986b4eee59..940f9ef072a14bdc3c95078f7c336cb705742d4c 100644 --- a/bob/ip/binseg/script/dataset.py +++ b/bob/ip/binseg/script/dataset.py @@ -113,13 +113,16 @@ def check(dataset, **kwargs): if dataset: #check only some to_check = [k for k in to_check if k.group("name") in dataset] - if not dataset: + if not to_check: click.echo("No configured datasets matching specifications") click.echo("Try bob binseg dataset list --help to get help in " "configuring a dataset") else: + errors = 0 for k in to_check: click.echo(f"Checking \"{k.group('name')}\" dataset...") module = importlib.import_module(f"...data.{k.group('name')}", __name__) - module.dataset.check() + errors += module.dataset.check() + if not errors: + click.echo(f"No errors reported") diff --git a/conda/meta.yaml b/conda/meta.yaml index 1b1a76156dcc2f110a57c85302c8a6c28cdb4002..dd4d78948edae9bc691547907184627f359e9832 100644 --- a/conda/meta.yaml +++ b/conda/meta.yaml @@ -79,7 +79,6 @@ test: - sphinx - sphinx_rtd_theme - sphinxcontrib-programoutput - - bob.db.hrf - bob.db.drionsdb - bob.db.rimoner3 - bob.db.drishtigs1 diff --git a/develop.cfg b/develop.cfg index 9229bdf942a37e259b48ae2e724027d8b228f214..0bc61a9ea2ad1c927e7929eaf7f711c715a2e5a8 100644 --- a/develop.cfg +++ b/develop.cfg @@ -4,10 +4,6 @@ [buildout] parts = scripts eggs = bob.ip.binseg - bob.db.drive - bob.db.stare - bob.db.chasedb1 - bob.db.hrf bob.db.drionsdb bob.db.rimoner3 bob.db.drishtigs1 @@ -16,11 +12,7 @@ eggs = bob.ip.binseg extensions = bob.buildout mr.developer auto-checkout = * -develop = src/bob.db.drive - src/bob.db.stare - src/bob.db.chasedb1 - src/bob.db.hrf - src/bob.db.drionsdb +develop = src/bob.db.drionsdb src/bob.db.rimoner3 src/bob.db.drishtigs1 src/bob.db.refuge @@ -33,10 +25,6 @@ verbose = true newest = false [sources] -bob.db.drive = git git@gitlab.idiap.ch:bob/bob.db.drive -bob.db.stare = git git@gitlab.idiap.ch:bob/bob.db.stare -bob.db.chasedb1 = git git@gitlab.idiap.ch:bob/bob.db.chasedb1 -bob.db.hrf = git git@gitlab.idiap.ch:bob/bob.db.hrf bob.db.drionsdb = git git@gitlab.idiap.ch:bob/bob.db.drionsdb bob.db.rimoner3 = git git@gitlab.idiap.ch:bob/bob.db.rimoner3 bob.db.drishtigs1 = git git@gitlab.idiap.ch:bob/bob.db.drishtigs1 diff --git a/doc/api.rst b/doc/api.rst index 19afcc1e21c9179c45331f74c22352b15830f263..b16d442273fe8504f81627ae0d97f994db6cf8ef 100644 --- a/doc/api.rst +++ b/doc/api.rst @@ -148,7 +148,6 @@ Datasets bob.ip.binseg.configs.datasets.drive960 bob.ip.binseg.configs.datasets.drivechasedb1iostarhrf608 bob.ip.binseg.configs.datasets.drivechasedb1iostarhrf608sslstare - bob.ip.binseg.configs.datasets.drivestarechasedb11168 bob.ip.binseg.configs.datasets.drivestarechasedb1hrf1024 bob.ip.binseg.configs.datasets.drivestarechasedb1hrf1024ssliostar bob.ip.binseg.configs.datasets.drivestarechasedb1iostar1168