import os import torch import wilds from wilds.common.data_loaders import get_eval_loader, get_train_loader class FMOW: test_subset = None def __init__(self, preprocess, location=os.path.expanduser('~/data'), batch_size=128, num_workers=16, subset='test', classnames=None, **kwargs): self.dataset = wilds.get_dataset(dataset='fmow', root_dir=location) self.train_dataset = self.dataset.get_subset('train', transform=preprocess) self.train_loader = get_train_loader("standard", self.train_dataset, num_workers=num_workers, batch_size=batch_size) self.test_dataset = self.dataset.get_subset(self.test_subset, transform=preprocess) self.test_loader = get_eval_loader("standard", self.test_dataset, num_workers=num_workers, batch_size=batch_size) self.classnames = [ "airport", "airport_hangar", "airport_terminal", "amusement_park", "aquaculture", "archaeological_site", "barn", "border_checkpoint", "burial_site", "car_dealership", "construction_site", "crop_field", "dam", "debris_or_rubble", "educational_institution", "electric_substation", "factory_or_powerplant", "fire_station", "flooded_road", "fountain", "gas_station", "golf_course", "ground_transportation_station", "helipad", "hospital", "impoverished_settlement", "interchange", "lake_or_pond", "lighthouse", "military_facility", "multi-unit_residential", "nuclear_powerplant", "office_building", "oil_or_gas_facility", "park", "parking_lot_or_garage", "place_of_worship", "police_station", "port", "prison", "race_track", "railway_bridge", "recreational_facility", "road_bridge", "runway", "shipyard", "shopping_mall", "single-unit_residential", "smokestack", "solar_farm", "space_facility", "stadium", "storage_tank", "surface_mine", "swimming_pool", "toll_booth", "tower", "tunnel_opening", "waste_disposal", "water_treatment_facility", "wind_farm", "zoo" ] def post_loop_metrics(self, labels, preds, metadata, args): metadata = torch.stack(metadata) preds = preds.argmax(dim=1, keepdim=True).view_as(labels) results = self.dataset.eval(preds, labels, metadata) return results[0] class FMOWID(FMOW): def __init__(self, *args, **kwargs): self.test_subset = 'id_test' super().__init__(*args, **kwargs) class FMOWOOD(FMOW): def __init__(self, *args, **kwargs): self.test_subset = 'test' super().__init__(*args, **kwargs)