@@ -21,7 +21,6 @@ class Food101(VisionDataset):
21
21
Args:
22
22
root (string): Root directory of the dataset.
23
23
split (string, optional): The dataset split, supports ``"train"`` (default) and ``"test"``.
24
-
25
24
transform (callable, optional): A function/transform that takes in an PIL image and returns a transformed
26
25
version. E.g, ``transforms.RandomCrop``.
27
26
target_transform (callable, optional): A function/transform that takes in the target and transforms it.
@@ -41,6 +40,9 @@ def __init__(
41
40
super ().__init__ (root , transform = transform , target_transform = target_transform )
42
41
self ._split = verify_str_arg (split , "split" , ("train" , "test" ))
43
42
self ._root_path = Path (self .root )
43
+ self ._base_folder = self ._root_path / "food-101"
44
+ self ._meta_folder = self ._base_folder / "meta"
45
+ self ._images_folder = self ._base_folder / "images"
44
46
45
47
if download :
46
48
self ._download ()
@@ -53,12 +55,12 @@ def __init__(
53
55
with open (self ._meta_folder / f"{ split } .json" , "r" ) as f :
54
56
metadata = json .loads (f .read ())
55
57
56
- self .classes = sorted (set ( metadata .keys () ))
58
+ self .classes = sorted (metadata .keys ())
57
59
self .class_to_idx = dict (zip (self .classes , range (len (self .classes ))))
58
60
59
- for class_label , im_paths in metadata .items ():
60
- self ._labels += [self .class_to_idx [class_label ]] * len (im_paths )
61
- self ._image_files += im_paths
61
+ for class_label , im_ids in metadata .items ():
62
+ self ._labels += [self .class_to_idx [class_label ]] * len (im_ids )
63
+ self ._image_files += [ self . _images_folder . joinpath ( * f" { im_id } .jpg" . split ( "/" )) for im_id in im_ids ]
62
64
63
65
def __len__ (self ) -> int :
64
66
return len (self ._image_files )
@@ -78,29 +80,10 @@ def __getitem__(self, idx) -> Tuple[Any, Any]:
78
80
def extra_repr (self ) -> str :
79
81
return f"split={ self ._split } "
80
82
81
- @property
82
- def _base_folder (self ) -> Path :
83
- return self ._root_path / "food-101"
84
-
85
- @property
86
- def _meta_folder (self ) -> Path :
87
- return self ._base_folder / "meta"
88
-
89
- @property
90
- def _images_folder (self ) -> Path :
91
- return self ._base_folder / "images"
92
-
93
83
def _check_exists (self ) -> bool :
94
- return (
95
- self ._base_folder .exists ()
96
- and self ._base_folder .is_dir ()
97
- and self ._meta_folder .exists ()
98
- and self ._meta_folder .is_dir ()
99
- and self ._images_folder .exists ()
100
- and self ._images_folder .is_dir ()
101
- )
84
+ return all (folder .exists () and folder .is_dir () for folder in (self ._meta_folder , self ._images_folder ))
102
85
103
86
def _download (self ) -> None :
104
87
if self ._check_exists ():
105
88
return
106
- download_and_extract_archive (self ._URL , download_root = str (self ._base_folder ), md5 = self ._MD5 )
89
+ download_and_extract_archive (self ._URL , download_root = str (self .root ), md5 = self ._MD5 )
0 commit comments