Skip to content

Commit 1429242

Browse files
committed
feat: Added benchmark setup script (WIP)
1 parent 669c634 commit 1429242

File tree

2 files changed

+74
-2
lines changed

2 files changed

+74
-2
lines changed

scribblebench/setup_benchmark.py

Lines changed: 73 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
import os
1010
from utils.download_kits23 import download_dataset
1111
from natsort import natsorted
12+
import tarfile
1213

1314

1415
def setup_word_dataset(dataset_dir):
@@ -268,12 +269,82 @@ def setup_kits_dataset(dataset_dir):
268269
print("Finished setting up KiTS2023 dataset.")
269270

270271

272+
def setup_lits_dataset(dataset_dir):
273+
dataset_dir = Path(dataset_dir) / "ScribbleBench"
274+
archive_dir = dataset_dir / "archive"
275+
raw_dir = dataset_dir / "raw"
276+
lits_raw_dir = raw_dir / "Task03_Liver"
277+
preprocessed_dir = dataset_dir
278+
lits_preprocessed_dir = preprocessed_dir / "LiTS"
279+
archive_dir.mkdir(parents=True, exist_ok=True)
280+
preprocessed_dir.mkdir(parents=True, exist_ok=True)
281+
lits_preprocessed_dir.mkdir(parents=True, exist_ok=True)
282+
283+
test_set = ['liver_112', 'liver_38', 'liver_47', 'liver_84', 'liver_119', 'liver_15', 'liver_62', 'liver_72', 'liver_98',
284+
'liver_0', 'liver_66', 'liver_7', 'liver_58', 'liver_93', 'liver_104', 'liver_43', 'liver_64', 'liver_91', 'liver_126',
285+
'liver_69', 'liver_102', 'liver_123', 'liver_127', 'liver_26', 'liver_35', 'liver_45', 'liver_73', 'liver_89',
286+
'liver_106', 'liver_29', 'liver_36', 'liver_109', 'liver_12', 'liver_128', 'liver_20', 'liver_54', 'liver_8',
287+
'liver_19', 'liver_21']
288+
289+
####################################################################################################################
290+
#### Download LiTS dataset
291+
####################################################################################################################
292+
293+
# Instead of the LiTS we are downloading the MSD Task03_Liver dataset, which is the exact same as the LiTS dataset but with fixed labels
294+
print("Downloading LiTS dataset...")
295+
url = 'https://drive.google.com/file/d/1jyVGUGyxKBXV6_9ivuZapQS8eUJXCIpu/view'
296+
gdown.download(url, str(archive_dir / "Task03_Liver.tar"), fuzzy=True)
297+
298+
####################################################################################################################
299+
#### Unpack LiTS archive
300+
####################################################################################################################
301+
302+
print("Unpacking LiTS archive...")
303+
with tarfile.open(archive_dir / "Task03_Liver.tar", "r:*") as tar:
304+
tar.extractall(path=raw_dir)
305+
306+
####################################################################################################################
307+
#### Preprocess LiTS dataset
308+
####################################################################################################################
309+
310+
print("Preprocessing LiTS dataset...")
311+
312+
(lits_preprocessed_dir / "imagesTr").mkdir(parents=True, exist_ok=True)
313+
(lits_preprocessed_dir / "imagesTs").mkdir(parents=True, exist_ok=True)
314+
(lits_preprocessed_dir / "labelsTr").mkdir(parents=True, exist_ok=True)
315+
(lits_preprocessed_dir / "labelsTs").mkdir(parents=True, exist_ok=True)
316+
317+
names = [p.name[:-7] for p in (lits_raw_dir / "labelsTr").iterdir()]
318+
names = natsorted(names)
319+
for name in names:
320+
postfix = "Tr" if name not in test_set else "Ts"
321+
shutil.move(lits_raw_dir / "imagesTr" / f"{name}.nii.gz", lits_preprocessed_dir / f"images{postfix}" / f"{name}_0000.nii.gz")
322+
shutil.move(lits_raw_dir / "labelsTr" / f"{name}.nii.gz", lits_preprocessed_dir / f"labels{postfix}" / f"{name}.nii.gz")
323+
324+
dataset_json_url = 'https://syncandshare.desy.de/index.php/s/wBMtJcFm6D2icXA/download/dataset.json'
325+
response = requests.get(dataset_json_url)
326+
response.raise_for_status() # Raise an error on bad status
327+
with open(lits_preprocessed_dir / "dataset.json", "wb") as f:
328+
f.write(response.content)
329+
330+
####################################################################################################################
331+
#### Delete raw dataset files
332+
####################################################################################################################
333+
334+
print("Deleting archive and raw dataset files...")
335+
shutil.rmtree(archive_dir, ignore_errors=True)
336+
shutil.rmtree(raw_dir, ignore_errors=True)
337+
338+
print("Finished setting up LiTS dataset.")
339+
340+
271341
if __name__ == '__main__':
272342
parser = argparse.ArgumentParser()
273343
parser.add_argument('-d', "--dataset_dir", required=True, type=str, help="Path to the dir used for setting up ScribbleBench.")
274344
parser.add_argument('--word', required=False, default=False, action="store_true", help="Download and preprocess the WORD dataset for ScribbleBench.")
275345
parser.add_argument('--mscmr', required=False, default=False, action="store_true", help="Download and preprocess the MSCMR dataset for ScribbleBench.")
276346
parser.add_argument('--kits', required=False, default=False, action="store_true", help="Download and preprocess the KiTS2023 dataset for ScribbleBench.")
347+
parser.add_argument('--lits', required=False, default=False, action="store_true", help="Download and preprocess the LiTS dataset for ScribbleBench.")
277348
args = parser.parse_args()
278349

279350
if args.word:
@@ -282,4 +353,5 @@ def setup_kits_dataset(dataset_dir):
282353
setup_mscmr_dataset(args.dataset_dir)
283354
if args.kits:
284355
setup_kits_dataset(args.dataset_dir)
285-
356+
if args.lits:
357+
setup_lits_dataset(args.dataset_dir)

scribblebench/utils/download_kits23.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ def download_case(case_num: int, save_dir, pbar: tqdm, retry=True):
4646
if retry:
4747
print(f"\nFailed to download case_{case_num:05d}. Retrying...")
4848
sleep(5)
49-
download_case(case_num, pbar, retry=False)
49+
download_case(case_num, save_dir, pbar, retry=False)
5050
pbar.close()
5151
while True:
5252
try:

0 commit comments

Comments
 (0)