diff --git a/torchvision/prototype/datasets/_builtin/__init__.py b/torchvision/prototype/datasets/_builtin/__init__.py index 9fdfca904f5..27e9e24e0f0 100644 --- a/torchvision/prototype/datasets/_builtin/__init__.py +++ b/torchvision/prototype/datasets/_builtin/__init__.py @@ -11,6 +11,7 @@ from .mnist import MNIST, FashionMNIST, KMNIST, EMNIST, QMNIST from .oxford_iiit_pet import OxfordIITPet from .pcam import PCAM +from .places365 import Places365 from .sbd import SBD from .semeion import SEMEION from .svhn import SVHN diff --git a/torchvision/prototype/datasets/_builtin/places365.categories b/torchvision/prototype/datasets/_builtin/places365.categories new file mode 100644 index 00000000000..910dcf25d42 --- /dev/null +++ b/torchvision/prototype/datasets/_builtin/places365.categories @@ -0,0 +1,365 @@ +airfield +airplane_cabin +airport_terminal +alcove +alley +amphitheater +amusement_arcade +amusement_park +apartment_building/outdoor +aquarium +aqueduct +arcade +arch +archaelogical_excavation +archive +arena/hockey +arena/performance +arena/rodeo +army_base +art_gallery +art_school +art_studio +artists_loft +assembly_line +athletic_field/outdoor +atrium/public +attic +auditorium +auto_factory +auto_showroom +badlands +bakery/shop +balcony/exterior +balcony/interior +ball_pit +ballroom +bamboo_forest +bank_vault +banquet_hall +bar +barn +barndoor +baseball_field +basement +basketball_court/indoor +bathroom +bazaar/indoor +bazaar/outdoor +beach +beach_house +beauty_salon +bedchamber +bedroom +beer_garden +beer_hall +berth +biology_laboratory +boardwalk +boat_deck +boathouse +bookstore +booth/indoor +botanical_garden +bow_window/indoor +bowling_alley +boxing_ring +bridge +building_facade +bullring +burial_chamber +bus_interior +bus_station/indoor +butchers_shop +butte +cabin/outdoor +cafeteria +campsite +campus +canal/natural +canal/urban +candy_store +canyon +car_interior +carrousel +castle +catacomb +cemetery +chalet +chemistry_lab +childs_room +church/indoor +church/outdoor +classroom +clean_room +cliff +closet +clothing_store +coast +cockpit +coffee_shop +computer_room +conference_center +conference_room +construction_site +corn_field +corral +corridor +cottage +courthouse +courtyard +creek +crevasse +crosswalk +dam +delicatessen +department_store +desert/sand +desert/vegetation +desert_road +diner/outdoor +dining_hall +dining_room +discotheque +doorway/outdoor +dorm_room +downtown +dressing_room +driveway +drugstore +elevator/door +elevator_lobby +elevator_shaft +embassy +engine_room +entrance_hall +escalator/indoor +excavation +fabric_store +farm +fastfood_restaurant +field/cultivated +field/wild +field_road +fire_escape +fire_station +fishpond +flea_market/indoor +florist_shop/indoor +food_court +football_field +forest/broadleaf +forest_path +forest_road +formal_garden +fountain +galley +garage/indoor +garage/outdoor +gas_station +gazebo/exterior +general_store/indoor +general_store/outdoor +gift_shop +glacier +golf_course +greenhouse/indoor +greenhouse/outdoor +grotto +gymnasium/indoor +hangar/indoor +hangar/outdoor +harbor +hardware_store +hayfield +heliport +highway +home_office +home_theater +hospital +hospital_room +hot_spring +hotel/outdoor +hotel_room +house +hunting_lodge/outdoor +ice_cream_parlor +ice_floe +ice_shelf +ice_skating_rink/indoor +ice_skating_rink/outdoor +iceberg +igloo +industrial_area +inn/outdoor +islet +jacuzzi/indoor +jail_cell +japanese_garden +jewelry_shop +junkyard +kasbah +kennel/outdoor +kindergarden_classroom +kitchen +lagoon +lake/natural +landfill +landing_deck +laundromat +lawn +lecture_room +legislative_chamber +library/indoor +library/outdoor +lighthouse +living_room +loading_dock +lobby +lock_chamber +locker_room +mansion +manufactured_home +market/indoor +market/outdoor +marsh +martial_arts_gym +mausoleum +medina +mezzanine +moat/water +mosque/outdoor +motel +mountain +mountain_path +mountain_snowy +movie_theater/indoor +museum/indoor +museum/outdoor +music_studio +natural_history_museum +nursery +nursing_home +oast_house +ocean +office +office_building +office_cubicles +oilrig +operating_room +orchard +orchestra_pit +pagoda +palace +pantry +park +parking_garage/indoor +parking_garage/outdoor +parking_lot +pasture +patio +pavilion +pet_shop +pharmacy +phone_booth +physics_laboratory +picnic_area +pier +pizzeria +playground +playroom +plaza +pond +porch +promenade +pub/indoor +racecourse +raceway +raft +railroad_track +rainforest +reception +recreation_room +repair_shop +residential_neighborhood +restaurant +restaurant_kitchen +restaurant_patio +rice_paddy +river +rock_arch +roof_garden +rope_bridge +ruin +runway +sandbox +sauna +schoolhouse +science_museum +server_room +shed +shoe_shop +shopfront +shopping_mall/indoor +shower +ski_resort +ski_slope +sky +skyscraper +slum +snowfield +soccer_field +stable +stadium/baseball +stadium/football +stadium/soccer +stage/indoor +stage/outdoor +staircase +storage_room +street +subway_station/platform +supermarket +sushi_bar +swamp +swimming_hole +swimming_pool/indoor +swimming_pool/outdoor +synagogue/outdoor +television_room +television_studio +temple/asia +throne_room +ticket_booth +topiary_garden +tower +toyshop +train_interior +train_station/platform +tree_farm +tree_house +trench +tundra +underwater/ocean_deep +utility_room +valley +vegetable_garden +veterinarians_office +viaduct +village +vineyard +volcano +volleyball_court/outdoor +waiting_room +water_park +water_tower +waterfall +watering_hole +wave +wet_bar +wheat_field +wind_farm +windmill +yard +youth_hostel +zen_garden diff --git a/torchvision/prototype/datasets/_builtin/places365.py b/torchvision/prototype/datasets/_builtin/places365.py new file mode 100644 index 00000000000..7642908e09e --- /dev/null +++ b/torchvision/prototype/datasets/_builtin/places365.py @@ -0,0 +1,67 @@ +import io +import pathlib +from typing import Any, Callable, Dict, List, Optional + +import torch +from torchdata.datapipes.iter import IterDataPipe, Filter, LineReader +from torchvision.prototype.datasets.utils import ( + Dataset, + DatasetConfig, + DatasetInfo, + HttpResource, + OnlineResource, + DatasetType, +) +from torchvision.prototype.datasets.utils._internal import hint_sharding, hint_shuffling, path_comparator + + +class Places365(Dataset): + def _make_info(self) -> DatasetInfo: + return DatasetInfo( + name="places365", + type=DatasetType.IMAGE, + homepage="http://places2.csail.mit.edu/index.html", + valid_options=dict(split=("train", "val", "test")), + ) + + _RESOURCES = { + "train": ("train_large_places365standard.tar", ""), + "val": ("val_large.tar", "ddd71c418592a4c230645e238f9e52de77247461d68cd9a14a080a9ca6f27df6"), + "test": ("test_large.tar", "4fae1d859035fe800a7697c27e5e69d78eb292d4cf12d84798c497b23b46b8e1"), + } + + def resources(self, config: DatasetConfig) -> List[OnlineResource]: + url_root = "http://data.csail.mit.edu/places/places365" + + meta = HttpResource( + f"{url_root}/filelist_places365-standard.tar", + sha256="520699e00d69b63ddc29fac54645aa00ce1c10ca42e288960aa1cf791d6e9aa9", + ) + + filename, sha256 = self._RESOURCES[config.split] + images = HttpResource(f"{url_root}/{filename}", sha256=sha256) + + return [meta, images] + + def _make_datapipe( + self, + resource_dps: List[IterDataPipe], + *, + config: DatasetConfig, + decoder: Optional[Callable[[io.IOBase], torch.Tensor]], + ) -> IterDataPipe[Dict[str, Any]]: + meta_dp, images_dp = resource_dps + + images_dp = hint_sharding(images_dp) + images_dp = hint_shuffling(images_dp) + + return images_dp + + def _generate_categories(self, root: pathlib.Path) -> List[str]: + resources = self.resources(self.info.make_config(split="val")) + + meta_dp = resources[0].load(root) + categories_dp = Filter(meta_dp, path_comparator("name", "categories_places365.txt")) + categories_dp = LineReader(categories_dp, decode=True, return_path=False) + + return [posix_path_and_label.split()[0][3:] for posix_path_and_label in categories_dp]