diff --git a/BENCHMARKS.md b/BENCHMARKS.md index 87afc9a..f274584 100644 --- a/BENCHMARKS.md +++ b/BENCHMARKS.md @@ -47,7 +47,7 @@ Results updated: 07/23/2023 | jfhealthcare-DenseNet121 |12,525,301| 0.78 | 0.89 | 0.82 | 0.94 | 0.96 | - | - | - | - | - | - | - | - | - | - | | CheXpert-DenseNet121-ensemble | | 0.82 | 0.92 | 0.88 | 0.97 | 0.97 | - | - | - | - | - | - | - | - | - | - | -## VinBrain +## VinDr-CXR | Model Name |# Params| Atelectasis | Cardiomegaly | Consolidation | Effusion | Infiltration | Lung Opacity | Pleural_Thickening | Pneumothorax | |-|-:|-|-|-|-|-|-|-|-| diff --git a/README.md b/README.md index d0f4852..d5851b9 100644 --- a/README.md +++ b/README.md @@ -185,8 +185,8 @@ d_siim = xrv.datasets.SIIM_Pneumothorax_Dataset(imgpath="dicom-images-train/", csvpath="train-rle.csv") # VinDr-CXR: An open dataset of chest X-rays with radiologist's annotations. https://arxiv.org/abs/2012.15029 -d_vin = xrv.datasets.VinBrain_Dataset(imgpath=".../train", - csvpath=".../train.csv") +d_vin = xrv.datasets.VinDr_Dataset(imgpath=".../train", + csvpath=".../train.csv") # National Library of Medicine Tuberculosis Datasets. https://www.ncbi.nlm.nih.gov/pmc/articles/PMC4256233/ d_nlmtb = xrv.datasets.NLMTB_Dataset(imgpath="path to MontgomerySet or ChinaSet_AllFiles") diff --git a/docs/source/datasets.rst b/docs/source/datasets.rst index b4de970..e47d7f4 100644 --- a/docs/source/datasets.rst +++ b/docs/source/datasets.rst @@ -78,8 +78,8 @@ Available Datasets - TBX11K tuberculosis dataset * - :class:`xrv.datasets.SIIM_Pneumothorax_Dataset ` - SIIM-ACR Pneumothorax Segmentation - * - :class:`xrv.datasets.VinBrain_Dataset ` - - VinBigData Chest X-ray Abnormalities Detection + * - :class:`xrv.datasets.VinDr_Dataset ` + - VinDr-CXR (VinBigData Chest X-ray Abnormalities Detection) * - :class:`xrv.datasets.StonyBrookCOVID_Dataset ` - Stony Brook University COVID-19 positive cases * - :class:`xrv.datasets.ObjectCXR_Dataset ` @@ -131,7 +131,7 @@ Dataset Classes .. autoclass:: xrv.datasets.SIIM_Pneumothorax_Dataset :members: string -.. autoclass:: xrv.datasets.VinBrain_Dataset +.. autoclass:: xrv.datasets.VinDr_Dataset :members: string .. autoclass:: xrv.datasets.StonyBrookCOVID_Dataset diff --git a/scripts/dataset_utils.py b/scripts/dataset_utils.py index b50794b..5aefeda 100644 --- a/scripts/dataset_utils.py +++ b/scripts/dataset_utils.py @@ -101,7 +101,7 @@ def get_data(dataset_str, masks=False, unique_patients=False, datasets.append(dataset) if "vin" in dataset_str: - dataset = xrv.datasets.VinBrain_Dataset( + dataset = xrv.datasets.VinDr_Dataset( imgpath=dataset_dir + "vinbigdata-chest-xray-abnormalities-detection/train", csvpath=dataset_dir + "vinbigdata-chest-xray-abnormalities-detection/train.csv", pathology_masks=masks, diff --git a/scripts/model_calibrate.py b/scripts/model_calibrate.py index 3881376..745b7a5 100644 --- a/scripts/model_calibrate.py +++ b/scripts/model_calibrate.py @@ -94,7 +94,7 @@ datas.append(dataset) datas_names.append("siim") if "vin" in cfg.dataset: - dataset = xrv.datasets.VinBrain_Dataset( + dataset = xrv.datasets.VinDr_Dataset( imgpath=cfg.dataset_dir + "vinbigdata-chest-xray-abnormalities-detection/train", csvpath=cfg.dataset_dir + "vinbigdata-chest-xray-abnormalities-detection/train.csv", transform=transforms, data_aug=data_aug) diff --git a/scripts/train_model.py b/scripts/train_model.py index 16c9524..21a60c4 100644 --- a/scripts/train_model.py +++ b/scripts/train_model.py @@ -117,7 +117,7 @@ datas.append(dataset) datas_names.append("siim") if "vin" in cfg.dataset: - dataset = xrv.datasets.VinBrain_Dataset( + dataset = xrv.datasets.VinDr_Dataset( imgpath=cfg.dataset_dir + "vinbigdata-chest-xray-abnormalities-detection/train", csvpath=cfg.dataset_dir + "vinbigdata-chest-xray-abnormalities-detection/train.csv", transform=transform, data_aug=data_aug) diff --git a/tests/test_dataloaders.py b/tests/test_dataloaders.py index 0c175a0..0fdee21 100644 --- a/tests/test_dataloaders.py +++ b/tests/test_dataloaders.py @@ -22,10 +22,10 @@ xrv.datasets.Openi_Dataset, xrv.datasets.CheX_Dataset, xrv.datasets.SIIM_Pneumothorax_Dataset, - xrv.datasets.VinBrain_Dataset] + xrv.datasets.VinDr_Dataset] dataset_classes_pydicom = [xrv.datasets.SIIM_Pneumothorax_Dataset, - xrv.datasets.VinBrain_Dataset] + xrv.datasets.VinDr_Dataset] test_data_path = "/tmp/testdata" test_png_img_file = os.path.join(file_path, "00000001_000.png") @@ -76,7 +76,7 @@ def create_test_images(request): create_test_img(test_png_img_file, xrv.datasets.Openi_Dataset, "CXR10_IM-0002-1001.png") create_test_img(test_jpg_img_file, xrv.datasets.CheX_Dataset, "train/patient00004/study1/view1_frontal.jpg") create_test_img(test_dcm_img_file, xrv.datasets.SIIM_Pneumothorax_Dataset, "1.2.276.0.7230010.3.1.2.8323329.6904.1517875201.850818/1.2.276.0.7230010.3.1.3.8323329.6904.1517875201.850817/1.2.276.0.7230010.3.1.4.8323329.6904.1517875201.850819.dcm") - create_test_img(test_dcm_img_file, xrv.datasets.VinBrain_Dataset, "000434271f63a053c4128a0ba6352c7f.dicom") + create_test_img(test_dcm_img_file, xrv.datasets.VinDr_Dataset, "000434271f63a053c4128a0ba6352c7f.dicom") def test_dataloader_basic(create_test_images, is_pydicom_installed): @@ -112,6 +112,10 @@ def test_dataloader_merging(is_pydicom_installed): xrv.datasets.Merge_Dataset(datasets) +def test_vinbrain_alias(): + assert xrv.datasets.VinBrain_Dataset is xrv.datasets.VinDr_Dataset + + def test_dataloader_merging_dups(): datasets = [] @@ -438,7 +442,7 @@ def test_chexlocalize_dataset_segmentation_masks(tmp_path): assert atelectasis_idx in sample["pathology_masks"] assert sample["pathology_masks"][atelectasis_idx].sum() > 0 # Pathologies absent from the segmentation JSON get no entry (sparse dict, - # matching NIH_Dataset/VinBrain_Dataset/ObjectCXR_Dataset) + # matching NIH_Dataset/VinDr_Dataset/ObjectCXR_Dataset) assert cardiomegaly_idx not in sample["pathology_masks"] assert bool(d.csv["has_masks"].iloc[0]) diff --git a/torchxrayvision/datasets.py b/torchxrayvision/datasets.py index 3116459..02d1263 100644 --- a/torchxrayvision/datasets.py +++ b/torchxrayvision/datasets.py @@ -228,7 +228,7 @@ class MergeDataset(Dataset): - 1 RSNA_Pneumonia_Dataset num_samples=26684 views=['PA', 'AP'] - 2 NIH_Dataset num_samples=112120 views=['PA', 'AP'] - 3 SIIM_Pneumothorax_Dataset num_samples=12954 - - 4 VinBrain_Dataset num_samples=15000 views=['PA', 'AP'] + - 4 VinDr_Dataset num_samples=15000 views=['PA', 'AP'] """ def __init__(self, datasets, seed=0, label_concat=False): @@ -1400,7 +1400,7 @@ def get_mask_dict(self, imgid, this_size): "Airspace Opacity" if patho == "Lung Opacity" else patho # Don't add masks for labels we don't have (matches NIH_Dataset, - # VinBrain_Dataset, ObjectCXR_Dataset: sparse dict, no zero masks) + # VinDr_Dataset, ObjectCXR_Dataset: sparse dict, no zero masks) if json_key not in entry: continue @@ -2215,7 +2215,7 @@ def rle2mask(rle, width, height): return path_mask -class VinBrain_Dataset(Dataset): +class VinDr_Dataset(Dataset): """VinDr-CXR dataset A large chest X-ray dataset collected at two major hospitals in Vietnam @@ -2234,11 +2234,13 @@ class VinBrain_Dataset(Dataset): Example:: - d_vin = xrv.datasets.VinBrain_Dataset( + d_vin = xrv.datasets.VinDr_Dataset( imgpath=".../train", csvpath=".../train.csv" ) + ``VinBrain_Dataset`` is kept as a backward-compatible alias of this class. + Citation: Nguyen HQ, Lam K, Le LT, et al. VinDr-CXR: An open dataset of chest X-rays with radiologist's @@ -2259,7 +2261,7 @@ def __init__(self, seed=0, pathology_masks=False ): - super(VinBrain_Dataset, self).__init__() + super(VinDr_Dataset, self).__init__() np.random.seed(seed) # Reset the seed so all runs are the same. self.imgpath = imgpath @@ -2382,6 +2384,10 @@ def get_mask_dict(self, image_name, this_size): return path_mask +# alias so it is backwards compatible +VinBrain_Dataset = VinDr_Dataset + + class StonyBrookCOVID_Dataset(Dataset): """Stony Brook COVID-19 Radiographic Assessment of Lung Opacity (RALO) dataset