From 7f897bd5a1396b6234d8d2a02b3a01d98831e7e3 Mon Sep 17 00:00:00 2001 From: Nils Lehmann Date: Fri, 31 Jan 2025 14:59:33 +0000 Subject: [PATCH 1/4] isaid --- docs/api/datasets.rst | 5 + docs/api/datasets/non_geo_datasets.csv | 1 + tests/data/isaid/data.py | 134 ++++++++ tests/data/isaid/dotav1_images_train.tar.gz | Bin 0 -> 37679 bytes tests/data/isaid/dotav1_images_val.tar.gz | Bin 0 -> 25243 bytes .../data/isaid/isaid_annotations_train.tar.gz | Bin 0 -> 1480 bytes tests/data/isaid/isaid_annotations_val.tar.gz | Bin 0 -> 1464 bytes .../isaid/train/Annotations/iSAID_train.json | 1 + .../data/isaid/train/Instance_masks/P0000.png | Bin 0 -> 115 bytes .../data/isaid/train/Instance_masks/P0001.png | Bin 0 -> 119 bytes .../data/isaid/train/Instance_masks/P0002.png | Bin 0 -> 119 bytes .../data/isaid/train/Semantic_masks/P0000.png | Bin 0 -> 115 bytes .../data/isaid/train/Semantic_masks/P0001.png | Bin 0 -> 115 bytes .../data/isaid/train/Semantic_masks/P0002.png | Bin 0 -> 115 bytes tests/data/isaid/train/images/P0000.png | Bin 0 -> 12420 bytes tests/data/isaid/train/images/P0001.png | Bin 0 -> 12420 bytes tests/data/isaid/train/images/P0002.png | Bin 0 -> 12420 bytes .../data/isaid/val/Annotations/iSAID_val.json | 1 + tests/data/isaid/val/Instance_masks/P0000.png | Bin 0 -> 115 bytes tests/data/isaid/val/Instance_masks/P0001.png | Bin 0 -> 119 bytes tests/data/isaid/val/Semantic_masks/P0000.png | Bin 0 -> 115 bytes tests/data/isaid/val/Semantic_masks/P0001.png | Bin 0 -> 115 bytes tests/data/isaid/val/images/P0000.png | Bin 0 -> 12420 bytes tests/data/isaid/val/images/P0001.png | Bin 0 -> 12420 bytes torchgeo/datasets/__init__.py | 2 + torchgeo/datasets/isaid.py | 309 ++++++++++++++++++ 26 files changed, 453 insertions(+) create mode 100644 tests/data/isaid/data.py create mode 100644 tests/data/isaid/dotav1_images_train.tar.gz create mode 100644 tests/data/isaid/dotav1_images_val.tar.gz create mode 100644 tests/data/isaid/isaid_annotations_train.tar.gz create mode 100644 tests/data/isaid/isaid_annotations_val.tar.gz create mode 100644 tests/data/isaid/train/Annotations/iSAID_train.json create mode 100644 tests/data/isaid/train/Instance_masks/P0000.png create mode 100644 tests/data/isaid/train/Instance_masks/P0001.png create mode 100644 tests/data/isaid/train/Instance_masks/P0002.png create mode 100644 tests/data/isaid/train/Semantic_masks/P0000.png create mode 100644 tests/data/isaid/train/Semantic_masks/P0001.png create mode 100644 tests/data/isaid/train/Semantic_masks/P0002.png create mode 100644 tests/data/isaid/train/images/P0000.png create mode 100644 tests/data/isaid/train/images/P0001.png create mode 100644 tests/data/isaid/train/images/P0002.png create mode 100644 tests/data/isaid/val/Annotations/iSAID_val.json create mode 100644 tests/data/isaid/val/Instance_masks/P0000.png create mode 100644 tests/data/isaid/val/Instance_masks/P0001.png create mode 100644 tests/data/isaid/val/Semantic_masks/P0000.png create mode 100644 tests/data/isaid/val/Semantic_masks/P0001.png create mode 100644 tests/data/isaid/val/images/P0000.png create mode 100644 tests/data/isaid/val/images/P0001.png create mode 100644 torchgeo/datasets/isaid.py diff --git a/docs/api/datasets.rst b/docs/api/datasets.rst index d01a91dfe70..41427076640 100644 --- a/docs/api/datasets.rst +++ b/docs/api/datasets.rst @@ -326,6 +326,11 @@ HySpecNet-11k .. autoclass:: HySpecNet11k +iSAID +^^^^^ + +.. autoclass:: ISAID + IDTReeS ^^^^^^^ diff --git a/docs/api/datasets/non_geo_datasets.csv b/docs/api/datasets/non_geo_datasets.csv index 1defcb032bd..4d53ced59ff 100644 --- a/docs/api/datasets/non_geo_datasets.csv +++ b/docs/api/datasets/non_geo_datasets.csv @@ -25,6 +25,7 @@ Dataset,Task,Source,License,# Samples,# Classes,Size (px),Resolution (m),Bands `HySpecNet-11k`_,-,EnMAP,CC0-1.0,11k,-,128,30,HSI `IDTReeS`_,"OD,C",Aerial,"CC-BY-4.0",591,33,200x200,0.1--1,RGB `Inria Aerial Image Labeling`_,S,Aerial,-,360,2,"5,000x5,000",0.3,RGB +`iSAID`_,"OD,I",Aerial,"CC-BY-NC-4.0","2,806",15,"varies","varies",RGB `LandCover.ai`_,S,Aerial,"CC-BY-NC-SA-4.0","10,674",5,512x512,0.25--0.5,RGB `LEVIR-CD`_,CD,Google Earth,-,637,2,"1,024x1,024",0.5,RGB `LEVIR-CD+`_,CD,Google Earth,-,985,2,"1,024x1,024",0.5,RGB diff --git a/tests/data/isaid/data.py b/tests/data/isaid/data.py new file mode 100644 index 00000000000..b3d72ad1c7b --- /dev/null +++ b/tests/data/isaid/data.py @@ -0,0 +1,134 @@ +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. + +import numpy as np +import os +from pathlib import Path +import json +import tarfile +import shutil +from PIL import Image +import hashlib + + +def create_dummy_image(path: Path, size: tuple[int, int] = (64, 64)) -> None: + """Create dummy RGB image.""" + img = np.random.randint(0, 255, (*size, 3), dtype=np.uint8) + Image.fromarray(img).save(path) + + +def create_coco_annotations(split: str, num_images: int) -> dict: + """Create COCO format annotations.""" + return { + 'info': {'year': 2023, 'version': '1.0'}, + 'images': [ + {'id': i, 'file_name': f'P{i:04d}.png', 'height': 64, 'width': 64} + for i in range(num_images) + ], + 'annotations': [ + { + 'id': i, + 'image_id': i // 2, # 2 annotations per image + 'category_id': i % 15, + 'segmentation': [[10, 10, 20, 10, 20, 20, 10, 20]], + 'area': 100, + 'bbox': [10, 10, 10, 10], + 'iscrowd': 0, + } + for i in range(num_images * 2) + ], + 'categories': [ + {'id': i, 'name': name} + for i, name in enumerate( + [ + 'plane', + 'ship', + 'storage tank', + 'baseball diamond', + 'tennis court', + 'basketball court', + 'ground track field', + 'harbor', + 'bridge', + 'vehicle', + 'helicopter', + 'roundabout', + 'swimming pool', + 'soccer ball field', + 'container crane', + ] + ) + ], + } + + +def create_test_data(root: Path) -> None: + """Create iSAID test dataset.""" + splits = {'train': 3, 'val': 2} + + for split, num_samples in splits.items(): + if os.path.exists(root / split): + shutil.rmtree(root / split) + + # Create directories + for subdir in ['images', 'Annotations', 'Instance_masks', 'Semantic_masks']: + (root / split / subdir).mkdir(parents=True, exist_ok=True) + + # Create images and masks + for i in range(num_samples): + # RGB image + create_dummy_image(root / split / 'images' / f'P{i:04d}.png') + + # Instance mask (R+G*256+B*256^2 encoding) + instance_mask = np.zeros((64, 64, 3), dtype=np.uint8) + instance_mask[10:20, 10:20, 0] = i + 1 # R channel for unique IDs + Image.fromarray(instance_mask).save( + root / split / 'Instance_masks' / f'P{i:04d}.png' + ) + + # Semantic mask (similar encoding for class IDs) + semantic_mask = np.zeros((64, 64, 3), dtype=np.uint8) + semantic_mask[10:20, 10:20, 0] = 1 # Class ID 1 + Image.fromarray(semantic_mask).save( + root / split / 'Semantic_masks' / f'P{i:04d}.png' + ) + + # Create COCO annotations + annotations = create_coco_annotations(split, num_samples) + with open(root / split / 'Annotations' / f'iSAID_{split}.json', 'w') as f: + json.dump(annotations, f) + + # Create image tar + img_tar = f'dotav1_images_{split}.tar.gz' + with tarfile.open(root / img_tar, 'w:gz') as tar: + tar.add(root / split / 'images', arcname=os.path.join(split, 'images')) + + # Create annotations tar with all splits + ann_tar = f'isaid_annotations_{split}.tar.gz' + with tarfile.open(root / ann_tar, 'w:gz') as tar: + for split in splits: + for subdir in ['Annotations', 'Instance_masks', 'Semantic_masks']: + tar.add(root / split / subdir, arcname=os.path.join(split, subdir)) + + # print md5sums + def md5(fname: str) -> str: + hash_md5 = hashlib.md5() + with open(fname, 'rb') as f: + for chunk in iter(lambda: f.read(4096), b''): + hash_md5.update(chunk) + return hash_md5.hexdigest() + + # Print MD5 checksums + for split in splits: + print( + f'MD5 for dotav1_images_{split}.tar.gz: ' + f'{md5(root / f"dotav1_images_{split}.tar.gz")}' + ) + print( + f'MD5 for isaid_annotations_{split}.tar.gz: {md5(root / f"isaid_annotations_{split}.tar.gz")}' + ) + + +if __name__ == '__main__': + root = Path('.') + create_test_data(root) diff --git a/tests/data/isaid/dotav1_images_train.tar.gz b/tests/data/isaid/dotav1_images_train.tar.gz new file mode 100644 index 0000000000000000000000000000000000000000..0991de0e84bd083944c7d6699cab3908864cb284 GIT binary patch literal 37679 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 $Tu1o_Sl$|ReZk6 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 literal 0 HcmV?d00001 diff --git a/tests/data/isaid/dotav1_images_val.tar.gz b/tests/data/isaid/dotav1_images_val.tar.gz new file mode 100644 index 0000000000000000000000000000000000000000..4ac9f97bbaf6a52290bda89973a336dd2281abcf GIT binary patch literal 25243 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 literal 0 HcmV?d00001 diff --git a/tests/data/isaid/isaid_annotations_val.tar.gz b/tests/data/isaid/isaid_annotations_val.tar.gz new file mode 100644 index 0000000000000000000000000000000000000000..422c6042d9005a1575b41f6eb4ad4e5275aa6806 GIT binary patch literal 1464 zcmV;p1xNZHiwFo1u z!?38C%@AtktiuW*0piHz!SHAhgs~g*FsKZ-r~f;aB|?K3)JTQ(K2J=?bcjuLn)H9u zv@J!oI@$l@Ff7mVc;|-N<@fV?sEf!MUS`vQ>$4=~WO6?QdyZm(5{8M7rtv~Ti7gW8<>8)MQjae~_&evlqtmv~~Gjo#n zED^EEho-{%_EhzB5p$CZ){_GA`EV)8Sj)HhNs{r37ln(}6E(Kd9VHu}X>0X^oHO z)}c6z#8s-X8_a5r4@xab-mS2_TP~{w?)qU+&>C-DEm_QhfLBy6oR4Cyu_03>&9b;! zR&z2tm8=+r^Fcus3hT|PGn|#vr*u*YOKy}8qtwA{`eYF=6w@t|OC4NbCGM3Q+AH0d zC06EMI2W^Y;UwLp)hfFAa6Wwzq@iUOx$pC!sLlytOeadWZ6)+P7OB-HX}(gDZe1@F z&lwLyS}&^J=&6eso5B8r{ns7)k7OMa_MbfV-$WpKLEy1zUr5-#PXYe_`9Dh>$NV4o zAN=1H{@0zX>45*G<^Qc|oc-(ncbNaviET9Tzik)}=Knf@mC4hm1`j`;boRlC@v)ah zIFfws>lfco9l5n4g5wioqpvKj-oC#6u%g~Su>QlwiK`DhdFhF@`Cq^8SE5&oC*L{s z+U>vI%JlL6pYQqnP_68nmyh`G^$q^Q5B-P!9|-+7au(KqCDQ*h%y)yBdp)%NOR)Y6{s;eeh5tqS=P>^(FaP(# z`Y+!9=o$MD>%Xx7p#L)Izhj!P|K!$xg5Q5Z|DpfTf9St-`cKWAMWO#v>p$(T{+l}V zANmhK|DpdK*Z-_dO*jCQ0t;@r&EEg^iCX@qc^0zwK%M z$8sFZ|H#At`2U}-@&9)J|KnIX{{BH){@>?c|Lh~g{_l|AqYr{g=u969MLbW!8U!^6N9A*E2B`g{9jyyT`r#(x}In$#jWj2`5ks7(AHIo!iYQ@+rUJE{N~x>gTe~ HDWM4fh=Cw- literal 0 HcmV?d00001 diff --git a/tests/data/isaid/train/Instance_masks/P0001.png b/tests/data/isaid/train/Instance_masks/P0001.png new file mode 100644 index 0000000000000000000000000000000000000000..a8692f7abccd1a193648c1bcda7bf93d4cfa92e9 GIT binary patch literal 119 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1SD0tpLGH$J5LwKkcv5P&mZJuP!M1~c==zp znDvhK4#yckpG{uN#8BjBf4(eMynoIs`8o%OSq&zPnIPR@P?64@yOL4l!S0n=Aik%o KpUXO@geCx8CnAgh literal 0 HcmV?d00001 diff --git a/tests/data/isaid/train/Instance_masks/P0002.png b/tests/data/isaid/train/Instance_masks/P0002.png new file mode 100644 index 0000000000000000000000000000000000000000..d8ef53e6d5edb8cf4a3800586cc726b8fb9c3a4e GIT binary patch literal 119 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1SD0tpLGH$J5LwKkcv5P&u`>qP!M3=$o@@U zvXfVXVdAm8%THD@G|bsH|9IJ4{{A_yUNUcIS;FZdJV6bp4GbFU#d41`ikxDe`VYkS MboFyt=akR{05Xpvb^rhX literal 0 HcmV?d00001 diff --git a/tests/data/isaid/train/Semantic_masks/P0000.png b/tests/data/isaid/train/Semantic_masks/P0000.png new file mode 100644 index 0000000000000000000000000000000000000000..89de3058e8634571104ab804f180cd407702349d GIT binary patch literal 115 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1SD0tpLGH$D^C~4kcv5P&u6N9A*E2B`g{9jyyT`r#(x}In$#jWj2`5ks7(AHIo!iYQ@+rUJE{N~x>gTe~ HDWM4fh=Cw- literal 0 HcmV?d00001 diff --git a/tests/data/isaid/train/Semantic_masks/P0001.png b/tests/data/isaid/train/Semantic_masks/P0001.png new file mode 100644 index 0000000000000000000000000000000000000000..89de3058e8634571104ab804f180cd407702349d GIT binary patch literal 115 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1SD0tpLGH$D^C~4kcv5P&u6N9A*E2B`g{9jyyT`r#(x}In$#jWj2`5ks7(AHIo!iYQ@+rUJE{N~x>gTe~ HDWM4fh=Cw- literal 0 HcmV?d00001 diff --git a/tests/data/isaid/train/Semantic_masks/P0002.png b/tests/data/isaid/train/Semantic_masks/P0002.png new file mode 100644 index 0000000000000000000000000000000000000000..89de3058e8634571104ab804f180cd407702349d GIT binary patch literal 115 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1SD0tpLGH$D^C~4kcv5P&u6N9A*E2B`g{9jyyT`r#(x}In$#jWj2`5ks7(AHIo!iYQ@+rUJE{N~x>gTe~ HDWM4fh=Cw- literal 0 HcmV?d00001 diff --git a/tests/data/isaid/train/images/P0000.png b/tests/data/isaid/train/images/P0000.png new file mode 100644 index 0000000000000000000000000000000000000000..f12b278a43a77e648855958a690480805c6a5ed9 GIT binary patch literal 12420 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 literal 0 HcmV?d00001 diff --git a/tests/data/isaid/val/Annotations/iSAID_val.json b/tests/data/isaid/val/Annotations/iSAID_val.json new file mode 100644 index 00000000000..9f77d848851 --- /dev/null +++ b/tests/data/isaid/val/Annotations/iSAID_val.json @@ -0,0 +1 @@ +{"info": {"year": 2023, "version": "1.0"}, "images": [{"id": 0, "file_name": "P0000.png", "height": 64, "width": 64}, {"id": 1, "file_name": "P0001.png", "height": 64, "width": 64}], "annotations": [{"id": 0, "image_id": 0, "category_id": 0, "segmentation": [[10, 10, 20, 10, 20, 20, 10, 20]], "area": 100, "bbox": [10, 10, 10, 10], "iscrowd": 0}, {"id": 1, "image_id": 0, "category_id": 1, "segmentation": [[10, 10, 20, 10, 20, 20, 10, 20]], "area": 100, "bbox": [10, 10, 10, 10], "iscrowd": 0}, {"id": 2, "image_id": 1, "category_id": 2, "segmentation": [[10, 10, 20, 10, 20, 20, 10, 20]], "area": 100, "bbox": [10, 10, 10, 10], "iscrowd": 0}, {"id": 3, "image_id": 1, "category_id": 3, "segmentation": [[10, 10, 20, 10, 20, 20, 10, 20]], "area": 100, "bbox": [10, 10, 10, 10], "iscrowd": 0}], "categories": [{"id": 0, "name": "plane"}, {"id": 1, "name": "ship"}, {"id": 2, "name": "storage tank"}, {"id": 3, "name": "baseball diamond"}, {"id": 4, "name": "tennis court"}, {"id": 5, "name": "basketball court"}, {"id": 6, "name": "ground track field"}, {"id": 7, "name": "harbor"}, {"id": 8, "name": "bridge"}, {"id": 9, "name": "vehicle"}, {"id": 10, "name": "helicopter"}, {"id": 11, "name": "roundabout"}, {"id": 12, "name": "swimming pool"}, {"id": 13, "name": "soccer ball field"}, {"id": 14, "name": "container crane"}]} \ No newline at end of file diff --git a/tests/data/isaid/val/Instance_masks/P0000.png b/tests/data/isaid/val/Instance_masks/P0000.png new file mode 100644 index 0000000000000000000000000000000000000000..89de3058e8634571104ab804f180cd407702349d GIT binary patch literal 115 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1SD0tpLGH$D^C~4kcv5P&u6N9A*E2B`g{9jyyT`r#(x}In$#jWj2`5ks7(AHIo!iYQ@+rUJE{N~x>gTe~ HDWM4fh=Cw- literal 0 HcmV?d00001 diff --git a/tests/data/isaid/val/Instance_masks/P0001.png b/tests/data/isaid/val/Instance_masks/P0001.png new file mode 100644 index 0000000000000000000000000000000000000000..a8692f7abccd1a193648c1bcda7bf93d4cfa92e9 GIT binary patch literal 119 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1SD0tpLGH$J5LwKkcv5P&mZJuP!M1~c==zp znDvhK4#yckpG{uN#8BjBf4(eMynoIs`8o%OSq&zPnIPR@P?64@yOL4l!S0n=Aik%o KpUXO@geCx8CnAgh literal 0 HcmV?d00001 diff --git a/tests/data/isaid/val/Semantic_masks/P0000.png b/tests/data/isaid/val/Semantic_masks/P0000.png new file mode 100644 index 0000000000000000000000000000000000000000..89de3058e8634571104ab804f180cd407702349d GIT binary patch literal 115 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1SD0tpLGH$D^C~4kcv5P&u6N9A*E2B`g{9jyyT`r#(x}In$#jWj2`5ks7(AHIo!iYQ@+rUJE{N~x>gTe~ HDWM4fh=Cw- literal 0 HcmV?d00001 diff --git a/tests/data/isaid/val/Semantic_masks/P0001.png b/tests/data/isaid/val/Semantic_masks/P0001.png new file mode 100644 index 0000000000000000000000000000000000000000..89de3058e8634571104ab804f180cd407702349d GIT binary patch literal 115 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1SD0tpLGH$D^C~4kcv5P&u6N9A*E2B`g{9jyyT`r#(x}In$#jWj2`5ks7(AHIo!iYQ@+rUJE{N~x>gTe~ HDWM4fh=Cw- literal 0 HcmV?d00001 diff --git a/tests/data/isaid/val/images/P0000.png b/tests/data/isaid/val/images/P0000.png new file mode 100644 index 0000000000000000000000000000000000000000..83476529ac5b21b74fb3621d6c873b48941bb9e7 GIT binary patch literal 12420 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

A?3_PIV zLueXXG-Rj*pCH}i*)kIPDb)qY7d-g#Zqj!qW*rPpZVbl46D;RDytI4-TSE7F{`NtT zMB+(XNJ%h;VPBFc118ZBUdm`7ZM6br>e^q~GLV;!Hqbh&WS4QoGMGUr(#WG9i+uGa z3;FUq!4aGXAtn{1IYq46LiX^szK2wxPfDHrc8;p|hrE<&*1O} zCVRu_*gweWHa*XWt?pF3iu_YzG6!yPmg+4J#V*F8_`sXzuV*6w0000 Tensor: + """Convert coco polygons to mask tensor. + + Args: + segmentations (List[int]): polygon coordinates + height (int): image height + width (int): image width + + Returns: + Tensor: Mask tensor + + Raises: + DependencyNotFoundError: If pycocotools is not installed. + """ + pycocotools = lazy_import('pycocotools') + masks = [] + for polygons in segmentations: + rles = pycocotools.mask.frPyObjects(polygons, height, width) + mask = pycocotools.mask.decode(rles) + mask = torch.as_tensor(mask, dtype=torch.uint8) + mask = mask.any(dim=2) + masks.append(mask) + masks_tensor = torch.stack(masks, dim=0) + return masks_tensor + + +class ConvertCocoAnnotations: + """Callable for converting the boxes, masks and labels into tensors. + + This is a modified version of ConvertCocoPolysToMask() from torchvision found in + https://github.com/pytorch/vision/blob/v0.14.0/references/detection/coco_utils.py + """ + + def __call__(self, sample: dict[str, Any]) -> dict[str, Any]: + """Converts MS COCO fields (boxes, masks & labels) from list of ints to tensors. + + Args: + sample: Sample + + Returns: + Processed sample + """ + image = sample['image'] + _, h, w = image.size() + target = sample['label'] + + image_id = target['image_id'] + image_id = torch.tensor([image_id]) + + anno = target['annotations'] + + anno = [obj for obj in anno if obj['iscrowd'] == 0] + + bboxes = [obj['bbox'] for obj in anno] + # guard against no boxes via resizing + boxes = torch.as_tensor(bboxes, dtype=torch.float32).reshape(-1, 4) + boxes[:, 2:] += boxes[:, :2] + boxes[:, 0::2].clamp_(min=0, max=w) + boxes[:, 1::2].clamp_(min=0, max=h) + + categories = [obj['category_id'] for obj in anno] + classes = torch.tensor(categories, dtype=torch.int64) + + segmentations = [obj['segmentation'] for obj in anno] + + masks = convert_coco_poly_to_mask(segmentations, h, w) + + keep = (boxes[:, 3] > boxes[:, 1]) & (boxes[:, 2] > boxes[:, 0]) + boxes = boxes[keep] + classes = classes[keep] + + target = {'boxes': boxes, 'labels': classes, 'image_id': image_id} + if masks.nelement() > 0: + masks = masks[keep] + target['masks'] = masks + + # for conversion to coco api + area = torch.tensor([obj['area'] for obj in anno]) + iscrowd = torch.tensor([obj['iscrowd'] for obj in anno]) + target['area'] = area + target['iscrowd'] = iscrowd + return {'image': image, 'label': target} + + +class ISAID(NonGeoDataset): + """iSAID dataset. + + The `iSAID `_ dataset is a large-scale instance segmentation dataset for aerial imagery. + It builds upon the DOTA V1 dataset, but includes instance-level annotations for 15 object categories. + + Dataset features: + + Dataset format: + + If you use this dataset in your research, please cite the following paper: + + * + * + + .. versionadded:: 0.7 + """ + + img_url = 'https://huggingface.co/datasets/torchgeo/dota/tree/main/{}' + + img_files = { + 'train': {'filename': 'dotav1_images_train.tar.gz', 'md5': ''}, + 'val': {'filename': 'dotav1_images_val.tar.gz', 'md5': ''}, + } + + label_url = 'https://huggingface.co/datasets/torchgeo/isaid/tree/main/{}' + + label_files = { + 'train': {'filename': 'isaid_annotations_train.tar.gz', 'md5': ''}, + 'val': {'filename': 'isaid_annotations_val.tar.gz', 'md5': ''}, + } + + classes: dict[int, str] = { + 0: 'plane', + 1: 'ship', + 2: 'storage tank', + 3: 'baseball diamond', + 4: 'tennis court', + 5: 'basketball court', + 6: 'ground track field', + 7: 'harbor', + 8: 'bridge', + 9: 'vehicle', + 10: 'helicopter', + 11: 'roundabout', + 12: 'swimming pool', + 13: 'soccer ball field', + 14: 'container crane', + } + + valid_splits = ('train', 'val') + + def __init__( + self, + root: Path = 'data', + split: str = 'train', + transforms: Callable[[dict[str, Any]], dict[str, Any]] | None = None, + download: bool = False, + checksum: bool = False, + ) -> None: + """Initialize a new VHR-10 dataset instance. + + Args: + root: root directory where dataset can be found + split: one of "positive" or "negative" + transforms: a function/transform that takes input sample and its target as + entry and returns a transformed version + download: if True, download dataset and store it in the root directory + checksum: if True, check the MD5 of the downloaded files (may be slow) + + Raises: + AssertionError: if ``split`` argument is invalid + DatasetNotFoundError: If dataset is not found and *download* is False. + """ + + assert split in self.valid_splits, ( + f"Invalid split '{split}', please use one of {self.valid_splits}" + ) + + self.root = root + self.split = split + self.transforms = transforms + self.download = download + self.checksum = checksum + + self._verify() + + pc = lazy_import('pycocotools.coco') + self.coco = pc.COCO( + os.path.join( + self.root, self.split, 'Annotations', f'iSAID_{self.split}.json' + ) + ) + self.coco_convert = ConvertCocoAnnotations() + self.ids = list(sorted(self.coco.imgs.keys())) + + def __len__(self) -> int: + return len(self.ids) + + def __getitem__(self, index: int) -> dict[str, Any]: + """Return an index within the dataset. + + Args: + index: index to return + + Returns: + data and label at that index + """ + id_ = index % len(self) + 1 + + sample = {'image': self._load_image(id_), 'label': self._load_mask(id_)} + + sample = self.coco_convert(sample) + sample['labels'] = sample['label']['labels'] + sample['boxes'] = sample['label']['boxes'] + sample['masks'] = sample['label']['masks'] + del sample['label'] + + if self.transforms is not None: + sample = self.transforms(sample) + + return sample + + def _load_mask(self, id_: int) -> dict[str, Any]: + """Load mask + + Args: + id: image ID for coco + + Returns: + instance mask tensor with unique IDs + """ + annot = self.coco.loadAnns(self.coco.getAnnIds(id_ - 1)) + + target = dict(image_id=id_, annotations=annot) + return target + + def _load_image(self, id_: int) -> Tensor: + """Load an image from a given path. + + Args: + path: path to image file + + Returns: + image tensor + """ + filename = os.path.join( + self.root, self.split, 'images', self.coco.imgs[id_ - 1]['file_name'] + ) + image = Image.open(filename).convert('RGB') + return torch.from_numpy(np.array(image).transpose(2, 0, 1)).float() + + def _verify(self) -> None: + """Verify the integrity of the dataset.""" + # check presence of directories + dirs = ['images', 'Annotations', 'Instance_masks', 'Semantic_masks'] + exists = [ + os.path.exists(os.path.join(self.root, self.split, dir)) for dir in dirs + ] + + if all(exists): + return + + # check compressed files + exists = [] + files = [ + self.img_files[self.split]['filename'], + self.label_files[self.split]['filename'], + ] + md5s = [self.img_files[self.split]['md5'], self.label_files[self.split]['md5']] + for file, md5 in zip(files, md5s): + if os.path.exists(os.path.join(self.root, file)): + if self.checksum and not check_integrity( + os.path.join(self.root, file), md5 + ): + raise RuntimeError(f'Archive {file} is found but corrupted') + exists.append(True) + extract_archive(os.path.join(self.root, file), self.root) + else: + exists.append(False) + + if all(exists): + return + + if not self.download: + raise DatasetNotFoundError(self) + + # download the dataset + for file in files: + download_and_extract_archive( + self.img_url.format(file), self.root, md5=md5 if self.checksum else None + ) From b480e0e992607892fcf0d770a392c04dc52d8a4c Mon Sep 17 00:00:00 2001 From: Nils Lehmann Date: Fri, 31 Jan 2025 15:06:06 +0000 Subject: [PATCH 2/4] docs --- torchgeo/datasets/isaid.py | 29 +++++++++++++++++++++++++++-- 1 file changed, 27 insertions(+), 2 deletions(-) diff --git a/torchgeo/datasets/isaid.py b/torchgeo/datasets/isaid.py index d520f8fe785..8e1062888a1 100644 --- a/torchgeo/datasets/isaid.py +++ b/torchgeo/datasets/isaid.py @@ -123,12 +123,37 @@ class ISAID(NonGeoDataset): Dataset features: + * multi-class instance segmentation + * multi-class object detection + * aerial imagery over various GSDs + Dataset format: + * images are three channel RGB PNGs with various pixel dimensions + * labels are annotaitons in json MSCOCO format + + Classes: + + * plane + * ship + * storage-tank + * baseball-diamond + * tennis-court + * basketball-court + * ground-track-field + * harbor + * bridge + * large-vehicle + * small-vehicle + * helicopter + * roundabout + * soccer-ball-field + * swimming-pool + If you use this dataset in your research, please cite the following paper: - * - * + * https://arxiv.org/abs/1905.12886 + * https://arxiv.org/abs/1711.10398 .. versionadded:: 0.7 """ From 5d72fcf3301f008fde2c336006f87cd20070d519 Mon Sep 17 00:00:00 2001 From: Nils Lehmann Date: Fri, 31 Jan 2025 15:07:23 +0000 Subject: [PATCH 3/4] forgot test file --- tests/datasets/test_isaid.py | 106 +++++++++++++++++++++++++++++++++++ 1 file changed, 106 insertions(+) create mode 100644 tests/datasets/test_isaid.py diff --git a/tests/datasets/test_isaid.py b/tests/datasets/test_isaid.py new file mode 100644 index 00000000000..59baf1d8afa --- /dev/null +++ b/tests/datasets/test_isaid.py @@ -0,0 +1,106 @@ +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. + +import os +from pathlib import Path + +import matplotlib.pyplot as plt +from itertools import product +import pytest +import torch +import shutil +import torch.nn as nn +from _pytest.fixtures import SubRequest +from pytest import MonkeyPatch + + +from torchgeo.datasets import ISAID, DatasetNotFoundError + +pytest.importorskip('pycocotools') + + +class TestISAID: + @pytest.fixture(params=['train', 'val']) + def dataset( + self, monkeypatch: MonkeyPatch, tmp_path: Path, request: SubRequest + ) -> ISAID: + url = os.path.join('tests', 'data', 'isaid', '{}') + monkeypatch.setattr(ISAID, 'img_url', url) + monkeypatch.setattr(ISAID, 'label_url', url) + + img_url = 'https://huggingface.co/datasets/torchgeo/dota/tree/main/{}' + + img_files = { + 'train': { + 'filename': 'dotav1_images_train.tar.gz', + 'md5': 'a38ad9832066e2ca6d30b8eec65f9ce8', + }, + 'val': { + 'filename': 'dotav1_images_val.tar.gz', + 'md5': '154babe8091484bd85c6340f43cea1ea', + }, + } + + label_files = { + 'train': { + 'filename': 'isaid_annotations_train.tar.gz', + 'md5': 'f4de0f6b38f1b11b121dc01c880aeb2a', + }, + 'val': { + 'filename': 'isaid_annotations_val.tar.gz', + 'md5': '88eccdf9744c201248266b9a784ffeab', + }, + } + + root = tmp_path + split = request.param + + transforms = nn.Identity() + + return ISAID(root, split, transforms=transforms, download=True, checksum=True) + + def test_getitem(self, dataset: ISAID) -> None: + for i in range(len(dataset)): + x = dataset[i] + assert isinstance(x, dict) + assert isinstance(x['image'], torch.Tensor) + assert isinstance(x['masks'], torch.Tensor) + assert isinstance(x['boxes'], torch.Tensor) + + def test_len(self, dataset: ISAID) -> None: + if dataset.split == 'train': + assert len(dataset) == 3 + else: + assert len(dataset) == 2 + + def test_already_downloaded(self, dataset: ISAID) -> None: + ISAID(root=dataset.root, download=True) + + def test_not_yet_extracted(self, tmp_path: Path) -> None: + files = [ + 'dotav1_images_train.tar.gz', + 'dotav1_images_val.tar.gz', + 'isaid_annotations_train.tar.gz', + 'isaid_annotations_val.tar.gz', + ] + for path in files: + shutil.copyfile( + os.path.join('tests', 'data', 'isaid', path), + os.path.join(str(tmp_path), path), + ) + + ISAID(root=tmp_path) + + def test_invalid_split(self) -> None: + with pytest.raises(AssertionError): + ISAID(split='foo') + + def test_corrupted(self, tmp_path: Path) -> None: + with open(os.path.join(tmp_path, 'dotav1_images_train.tar.gz'), 'w') as f: + f.write('bad') + with pytest.raises(RuntimeError, match='Archive'): + ISAID(root=tmp_path, checksum=True) + + def test_not_downloaded(self, tmp_path: Path) -> None: + with pytest.raises(DatasetNotFoundError, match='Dataset not found'): + ISAID(tmp_path) From eef4b22a4e5e860c77beaed2eab3436cf5f39a4d Mon Sep 17 00:00:00 2001 From: Nils Lehmann Date: Mon, 3 Feb 2025 09:58:46 +0100 Subject: [PATCH 4/4] ruff --- tests/data/isaid/data.py | 11 ++++++----- tests/datasets/test_isaid.py | 10 ++++------ torchgeo/datasets/__init__.py | 2 +- torchgeo/datasets/isaid.py | 34 ++++++++++++++++++++-------------- 4 files changed, 31 insertions(+), 26 deletions(-) diff --git a/tests/data/isaid/data.py b/tests/data/isaid/data.py index b3d72ad1c7b..6563dfffd5c 100644 --- a/tests/data/isaid/data.py +++ b/tests/data/isaid/data.py @@ -1,14 +1,15 @@ # Copyright (c) Microsoft Corporation. All rights reserved. # Licensed under the MIT License. -import numpy as np -import os -from pathlib import Path +import hashlib import json -import tarfile +import os import shutil +import tarfile +from pathlib import Path + +import numpy as np from PIL import Image -import hashlib def create_dummy_image(path: Path, size: tuple[int, int] = (64, 64)) -> None: diff --git a/tests/datasets/test_isaid.py b/tests/datasets/test_isaid.py index 59baf1d8afa..448cb3b0d38 100644 --- a/tests/datasets/test_isaid.py +++ b/tests/datasets/test_isaid.py @@ -2,18 +2,15 @@ # Licensed under the MIT License. import os +import shutil from pathlib import Path -import matplotlib.pyplot as plt -from itertools import product import pytest import torch -import shutil import torch.nn as nn from _pytest.fixtures import SubRequest from pytest import MonkeyPatch - from torchgeo.datasets import ISAID, DatasetNotFoundError pytest.importorskip('pycocotools') @@ -28,8 +25,6 @@ def dataset( monkeypatch.setattr(ISAID, 'img_url', url) monkeypatch.setattr(ISAID, 'label_url', url) - img_url = 'https://huggingface.co/datasets/torchgeo/dota/tree/main/{}' - img_files = { 'train': { 'filename': 'dotav1_images_train.tar.gz', @@ -41,6 +36,8 @@ def dataset( }, } + monkeypatch.setattr(ISAID, 'img_files', img_files) + label_files = { 'train': { 'filename': 'isaid_annotations_train.tar.gz', @@ -51,6 +48,7 @@ def dataset( 'md5': '88eccdf9744c201248266b9a784ffeab', }, } + monkeypatch.setattr(ISAID, 'label_files', label_files) root = tmp_path split = request.param diff --git a/torchgeo/datasets/__init__.py b/torchgeo/datasets/__init__.py index 97e18f32c61..c760dd28a07 100644 --- a/torchgeo/datasets/__init__.py +++ b/torchgeo/datasets/__init__.py @@ -163,6 +163,7 @@ 'FAIR1M', 'GBIF', 'GID15', + 'ISAID', 'LEVIRCD', 'MDAS', 'NAIP', @@ -226,7 +227,6 @@ 'IDTReeS', 'INaturalist', 'IOBench', - 'ISAID', 'InriaAerialImageLabeling', 'IntersectionDataset', 'L7Irish', diff --git a/torchgeo/datasets/isaid.py b/torchgeo/datasets/isaid.py index 8e1062888a1..6183700e143 100644 --- a/torchgeo/datasets/isaid.py +++ b/torchgeo/datasets/isaid.py @@ -7,12 +7,8 @@ from collections.abc import Callable from typing import Any, ClassVar -import pandas as pd -import matplotlib.pyplot as plt import numpy as np import torch -from matplotlib import patches -from matplotlib.figure import Figure from PIL import Image from torch import Tensor @@ -22,10 +18,8 @@ Path, check_integrity, download_and_extract_archive, - download_url, extract_archive, lazy_import, - percentile_normalization, ) @@ -156,23 +150,30 @@ class ISAID(NonGeoDataset): * https://arxiv.org/abs/1711.10398 .. versionadded:: 0.7 + + .. note:: + + This dataset requires the following additional library to be installed: + + * `pycocotools `_ to load the + annotations """ img_url = 'https://huggingface.co/datasets/torchgeo/dota/tree/main/{}' - img_files = { + img_files: ClassVar[dict[str, dict[str, str]]] = { 'train': {'filename': 'dotav1_images_train.tar.gz', 'md5': ''}, 'val': {'filename': 'dotav1_images_val.tar.gz', 'md5': ''}, } label_url = 'https://huggingface.co/datasets/torchgeo/isaid/tree/main/{}' - label_files = { + label_files: ClassVar[dict[str, dict[str, str]]] = { 'train': {'filename': 'isaid_annotations_train.tar.gz', 'md5': ''}, 'val': {'filename': 'isaid_annotations_val.tar.gz', 'md5': ''}, } - classes: dict[int, str] = { + classes: ClassVar[dict[int, str]] = { 0: 'plane', 1: 'ship', 2: 'storage tank', @@ -213,8 +214,9 @@ def __init__( Raises: AssertionError: if ``split`` argument is invalid DatasetNotFoundError: If dataset is not found and *download* is False. + DependencyNotFoundError: if pycocotools is + not installed. """ - assert split in self.valid_splits, ( f"Invalid split '{split}', please use one of {self.valid_splits}" ) @@ -237,6 +239,7 @@ def __init__( self.ids = list(sorted(self.coco.imgs.keys())) def __len__(self) -> int: + """Return the length of the dataset.""" return len(self.ids) def __getitem__(self, index: int) -> dict[str, Any]: @@ -250,7 +253,10 @@ def __getitem__(self, index: int) -> dict[str, Any]: """ id_ = index % len(self) + 1 - sample = {'image': self._load_image(id_), 'label': self._load_mask(id_)} + sample: dict[str, Any] = { + 'image': self._load_image(id_), + 'label': self._load_mask(id_), + } sample = self.coco_convert(sample) sample['labels'] = sample['label']['labels'] @@ -264,10 +270,10 @@ def __getitem__(self, index: int) -> dict[str, Any]: return sample def _load_mask(self, id_: int) -> dict[str, Any]: - """Load mask + """Load mask. Args: - id: image ID for coco + id_: image ID for coco Returns: instance mask tensor with unique IDs @@ -281,7 +287,7 @@ def _load_image(self, id_: int) -> Tensor: """Load an image from a given path. Args: - path: path to image file + id_: image ID for coco Returns: image tensor