Files
clip-symnets/datasets/eurosat.py
2024-05-21 19:41:56 +08:00

51 lines
1.5 KiB
Python

import os
from .utils import Datum, DatasetBase, read_json, write_json, build_data_loader
from .oxford_pets import OxfordPets
template = ['a centered satellite photo of {}.']
NEW_CNAMES = {
'AnnualCrop': 'Annual Crop Land',
'Forest': 'Forest',
'HerbaceousVegetation': 'Herbaceous Vegetation Land',
'Highway': 'Highway or Road',
'Industrial': 'Industrial Buildings',
'Pasture': 'Pasture Land',
'PermanentCrop': 'Permanent Crop Land',
'Residential': 'Residential Buildings',
'River': 'River',
'SeaLake': 'Sea or Lake'
}
class EuroSAT(DatasetBase):
dataset_dir = 'eurosat'
def __init__(self, root, num_shots):
self.dataset_dir = os.path.join(root, self.dataset_dir)
self.image_dir = os.path.join(self.dataset_dir, '2750')
self.split_path = os.path.join(self.dataset_dir, 'split_zhou_EuroSAT.json')
self.template = template
train, val, test = OxfordPets.read_split(self.split_path, self.image_dir)
train = self.generate_fewshot_dataset(train, num_shots=num_shots)
super().__init__(train_x=train, val=val, test=test)
def update_classname(self, dataset_old):
dataset_new = []
for item_old in dataset_old:
cname_old = item_old.classname
cname_new = NEW_CLASSNAMES[cname_old]
item_new = Datum(
impath=item_old.impath,
label=item_old.label,
classname=cname_new
)
dataset_new.append(item_new)
return dataset_new