HSinghHuggingFace commited on
Commit
834c809
·
1 Parent(s): aa78f2e

Initial commit: Add ResNet50 classifier app

Browse files
Files changed (7) hide show
  1. README.md +40 -7
  2. app.py +68 -0
  3. best_model.pth +3 -0
  4. create_labels.py +21 -0
  5. download_model.py +27 -0
  6. imagenet_classes.json +1002 -0
  7. requirements.txt +5 -0
README.md CHANGED
@@ -1,14 +1,47 @@
1
  ---
2
- title: Resnet50 Image Classifier
3
- emoji: 🐠
4
- colorFrom: red
5
  colorTo: red
6
  sdk: streamlit
7
- sdk_version: 1.41.1
8
  app_file: app.py
9
  pinned: false
10
- license: apache-2.0
11
- short_description: resnet50-image-classifier
12
  ---
13
 
14
- Check out the configuration reference at https://huggingface.co/docs/hub/spaces-config-reference
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
  ---
2
+ title: ResNet50 Image Classifier
3
+ emoji: 🖼️
4
+ colorFrom: blue
5
  colorTo: red
6
  sdk: streamlit
7
+ sdk_version: 1.22.0
8
  app_file: app.py
9
  pinned: false
 
 
10
  ---
11
 
12
+ # ResNet50 Image Classifier
13
+
14
+ This Streamlit application uses a ResNet50 model trained on the ImageNet-1K dataset to classify images into 1000 different categories.
15
+
16
+ ## How to Use
17
+
18
+ 1. Click the "Choose an image..." button or drag and drop an image
19
+ 2. The model will automatically process your image
20
+ 3. View the top 5 predictions with their confidence scores
21
+
22
+ ## Model Details
23
+
24
+ - **Architecture**: ResNet50
25
+ - **Dataset**: ImageNet-1K
26
+ - **Input Size**: 224x224 pixels
27
+ - **Number of Classes**: 1000
28
+
29
+ ## Example Predictions
30
+
31
+ The model can identify various objects, animals, and scenes, including:
32
+ - Common animals (dogs, cats, birds)
33
+ - Everyday objects
34
+ - Vehicles
35
+ - Natural scenes
36
+ - And many more!
37
+
38
+ ## Technical Details
39
+
40
+ - Built with PyTorch and Streamlit
41
+ - Uses standard ImageNet preprocessing
42
+ - Runs inference on CPU
43
+ - Displays confidence scores as progress bars
44
+
45
+ ## Note
46
+
47
+ For best results, use clear, well-lit images with a single main subject.
app.py ADDED
@@ -0,0 +1,68 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import streamlit as st
2
+ import torch
3
+ import torchvision.transforms as transforms
4
+ from torchvision.models import resnet50
5
+ from PIL import Image
6
+ import json
7
+
8
+ # Load ImageNet class labels
9
+ with open('imagenet_classes.json') as f:
10
+ labels = json.load(f)
11
+
12
+ def load_model():
13
+ # Initialize standard ResNet50 with 1000 classes (default)
14
+ model = resnet50(pretrained=False) # Don't load pretrained weights
15
+
16
+ # Load your trained weights with safe loading
17
+ model.load_state_dict(torch.load('best_model.pth', map_location=torch.device('cpu'), weights_only=True))
18
+ model.eval()
19
+ return model
20
+
21
+ def process_image(image):
22
+ # Define the same transforms used during training
23
+ transform = transforms.Compose([
24
+ transforms.Resize(256),
25
+ transforms.CenterCrop(224),
26
+ transforms.ToTensor(),
27
+ transforms.Normalize(mean=[0.485, 0.456, 0.406],
28
+ std=[0.229, 0.224, 0.225])
29
+ ])
30
+
31
+ image = transform(image).unsqueeze(0)
32
+ return image
33
+
34
+ def get_prediction(model, image):
35
+ with torch.no_grad():
36
+ outputs = model(image)
37
+ probabilities = torch.nn.functional.softmax(outputs[0], dim=0)
38
+ top5_prob, top5_catid = torch.topk(probabilities, 5)
39
+ return top5_prob, top5_catid
40
+
41
+ def main():
42
+ st.title("Image Classification with ResNet50")
43
+ st.write("Upload an image and the model will predict its category")
44
+
45
+ uploaded_file = st.file_uploader("Choose an image...", type=["jpg", "jpeg", "png"])
46
+
47
+ if uploaded_file is not None:
48
+ # Display the uploaded image
49
+ image = Image.open(uploaded_file).convert('RGB')
50
+ st.image(image, caption='Uploaded Image', use_column_width=True)
51
+
52
+ # Load model
53
+ model = load_model()
54
+
55
+ # Process image and get prediction
56
+ processed_image = process_image(image)
57
+ top5_prob, top5_catid = get_prediction(model, processed_image)
58
+
59
+ # Display predictions
60
+ st.subheader("Predictions:")
61
+ for i in range(5):
62
+ probability = top5_prob[i].item() * 100
63
+ category = labels[str(top5_catid[i].item())]
64
+ st.write(f"{category}: {probability:.2f}%")
65
+ st.progress(probability/100)
66
+
67
+ if __name__ == "__main__":
68
+ main()
best_model.pth ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:cd05c4ba7e9b76e43900a2b0cd3ac6fd01464deb76d190d79274563899bf3d72
3
+ size 102542206
create_labels.py ADDED
@@ -0,0 +1,21 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from torchvision.models import ResNet50_Weights
2
+ import json
3
+
4
+ def create_imagenet_labels():
5
+ # Get the ImageNet class mapping
6
+ weights = ResNet50_Weights.IMAGENET1K_V1
7
+ class_labels = weights.meta["categories"]
8
+
9
+ # Create dictionary with all 1000 classes
10
+ label_dict = {}
11
+ for idx, label in enumerate(class_labels):
12
+ label_dict[str(idx)] = label
13
+
14
+ # Save to file
15
+ with open('imagenet_classes.json', 'w') as f:
16
+ json.dump(label_dict, f, indent=4)
17
+
18
+ print(f"Created labels file with {len(label_dict)} classes")
19
+
20
+ if __name__ == "__main__":
21
+ create_imagenet_labels()
download_model.py ADDED
@@ -0,0 +1,27 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import torch
2
+ import os
3
+ from torchvision.models import resnet50, ResNet50_Weights
4
+
5
+ def download_pretrained_model():
6
+ try:
7
+ # Load ResNet50 model with the best available weights
8
+ print("Downloading ResNet50 model with ImageNet-1K weights...")
9
+ model = resnet50(weights=ResNet50_Weights.IMAGENET1K_V2)
10
+ model.eval()
11
+
12
+ # Save the model with safe loading
13
+ print("Saving model to best_model.pth...")
14
+ torch.save(model.state_dict(), 'best_model.pth', _use_new_zipfile_serialization=True)
15
+
16
+ # Verify the file exists
17
+ if os.path.exists('best_model.pth'):
18
+ model_size = os.path.getsize('best_model.pth') / (1024 * 1024) # Size in MB
19
+ print(f"Model saved successfully! Size: {model_size:.2f} MB")
20
+ else:
21
+ print("Error: Model file was not created")
22
+
23
+ except Exception as e:
24
+ print(f"An error occurred: {str(e)}")
25
+
26
+ if __name__ == "__main__":
27
+ download_pretrained_model()
imagenet_classes.json ADDED
@@ -0,0 +1,1002 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "0": "tench",
3
+ "1": "goldfish",
4
+ "2": "great white shark",
5
+ "3": "tiger shark",
6
+ "4": "hammerhead",
7
+ "5": "electric ray",
8
+ "6": "stingray",
9
+ "7": "cock",
10
+ "8": "hen",
11
+ "9": "ostrich",
12
+ "10": "brambling",
13
+ "11": "goldfinch",
14
+ "12": "house finch",
15
+ "13": "junco",
16
+ "14": "indigo bunting",
17
+ "15": "robin",
18
+ "16": "bulbul",
19
+ "17": "jay",
20
+ "18": "magpie",
21
+ "19": "chickadee",
22
+ "20": "water ouzel",
23
+ "21": "kite",
24
+ "22": "bald eagle",
25
+ "23": "vulture",
26
+ "24": "great grey owl",
27
+ "25": "European fire salamander",
28
+ "26": "common newt",
29
+ "27": "eft",
30
+ "28": "spotted salamander",
31
+ "29": "axolotl",
32
+ "30": "bullfrog",
33
+ "31": "tree frog",
34
+ "32": "tailed frog",
35
+ "33": "loggerhead",
36
+ "34": "leatherback turtle",
37
+ "35": "mud turtle",
38
+ "36": "terrapin",
39
+ "37": "box turtle",
40
+ "38": "banded gecko",
41
+ "39": "common iguana",
42
+ "40": "American chameleon",
43
+ "41": "whiptail",
44
+ "42": "agama",
45
+ "43": "frilled lizard",
46
+ "44": "alligator lizard",
47
+ "45": "Gila monster",
48
+ "46": "green lizard",
49
+ "47": "African chameleon",
50
+ "48": "Komodo dragon",
51
+ "49": "African crocodile",
52
+ "50": "American alligator",
53
+ "51": "triceratops",
54
+ "52": "thunder snake",
55
+ "53": "ringneck snake",
56
+ "54": "hognose snake",
57
+ "55": "green snake",
58
+ "56": "king snake",
59
+ "57": "garter snake",
60
+ "58": "water snake",
61
+ "59": "vine snake",
62
+ "60": "night snake",
63
+ "61": "boa constrictor",
64
+ "62": "rock python",
65
+ "63": "Indian cobra",
66
+ "64": "green mamba",
67
+ "65": "sea snake",
68
+ "66": "horned viper",
69
+ "67": "diamondback",
70
+ "68": "sidewinder",
71
+ "69": "trilobite",
72
+ "70": "harvestman",
73
+ "71": "scorpion",
74
+ "72": "black and gold garden spider",
75
+ "73": "barn spider",
76
+ "74": "garden spider",
77
+ "75": "black widow",
78
+ "76": "tarantula",
79
+ "77": "wolf spider",
80
+ "78": "tick",
81
+ "79": "centipede",
82
+ "80": "black grouse",
83
+ "81": "ptarmigan",
84
+ "82": "ruffed grouse",
85
+ "83": "prairie chicken",
86
+ "84": "peacock",
87
+ "85": "quail",
88
+ "86": "partridge",
89
+ "87": "African grey",
90
+ "88": "macaw",
91
+ "89": "sulphur-crested cockatoo",
92
+ "90": "lorikeet",
93
+ "91": "coucal",
94
+ "92": "bee eater",
95
+ "93": "hornbill",
96
+ "94": "hummingbird",
97
+ "95": "jacamar",
98
+ "96": "toucan",
99
+ "97": "drake",
100
+ "98": "red-breasted merganser",
101
+ "99": "goose",
102
+ "100": "black swan",
103
+ "101": "tusker",
104
+ "102": "echidna",
105
+ "103": "platypus",
106
+ "104": "wallaby",
107
+ "105": "koala",
108
+ "106": "wombat",
109
+ "107": "jellyfish",
110
+ "108": "sea anemone",
111
+ "109": "brain coral",
112
+ "110": "flatworm",
113
+ "111": "nematode",
114
+ "112": "conch",
115
+ "113": "snail",
116
+ "114": "slug",
117
+ "115": "sea slug",
118
+ "116": "chiton",
119
+ "117": "chambered nautilus",
120
+ "118": "Dungeness crab",
121
+ "119": "rock crab",
122
+ "120": "fiddler crab",
123
+ "121": "king crab",
124
+ "122": "American lobster",
125
+ "123": "spiny lobster",
126
+ "124": "crayfish",
127
+ "125": "hermit crab",
128
+ "126": "isopod",
129
+ "127": "white stork",
130
+ "128": "black stork",
131
+ "129": "spoonbill",
132
+ "130": "flamingo",
133
+ "131": "little blue heron",
134
+ "132": "American egret",
135
+ "133": "bittern",
136
+ "134": "crane bird",
137
+ "135": "limpkin",
138
+ "136": "European gallinule",
139
+ "137": "American coot",
140
+ "138": "bustard",
141
+ "139": "ruddy turnstone",
142
+ "140": "red-backed sandpiper",
143
+ "141": "redshank",
144
+ "142": "dowitcher",
145
+ "143": "oystercatcher",
146
+ "144": "pelican",
147
+ "145": "king penguin",
148
+ "146": "albatross",
149
+ "147": "grey whale",
150
+ "148": "killer whale",
151
+ "149": "dugong",
152
+ "150": "sea lion",
153
+ "151": "Chihuahua",
154
+ "152": "Japanese spaniel",
155
+ "153": "Maltese dog",
156
+ "154": "Pekinese",
157
+ "155": "Shih-Tzu",
158
+ "156": "Blenheim spaniel",
159
+ "157": "papillon",
160
+ "158": "toy terrier",
161
+ "159": "Rhodesian ridgeback",
162
+ "160": "Afghan hound",
163
+ "161": "basset",
164
+ "162": "beagle",
165
+ "163": "bloodhound",
166
+ "164": "bluetick",
167
+ "165": "black-and-tan coonhound",
168
+ "166": "Walker hound",
169
+ "167": "English foxhound",
170
+ "168": "redbone",
171
+ "169": "borzoi",
172
+ "170": "Irish wolfhound",
173
+ "171": "Italian greyhound",
174
+ "172": "whippet",
175
+ "173": "Ibizan hound",
176
+ "174": "Norwegian elkhound",
177
+ "175": "otterhound",
178
+ "176": "Saluki",
179
+ "177": "Scottish deerhound",
180
+ "178": "Weimaraner",
181
+ "179": "Staffordshire bullterrier",
182
+ "180": "American Staffordshire terrier",
183
+ "181": "Bedlington terrier",
184
+ "182": "Border terrier",
185
+ "183": "Kerry blue terrier",
186
+ "184": "Irish terrier",
187
+ "185": "Norfolk terrier",
188
+ "186": "Norwich terrier",
189
+ "187": "Yorkshire terrier",
190
+ "188": "wire-haired fox terrier",
191
+ "189": "Lakeland terrier",
192
+ "190": "Sealyham terrier",
193
+ "191": "Airedale",
194
+ "192": "cairn",
195
+ "193": "Australian terrier",
196
+ "194": "Dandie Dinmont",
197
+ "195": "Boston bull",
198
+ "196": "miniature schnauzer",
199
+ "197": "giant schnauzer",
200
+ "198": "standard schnauzer",
201
+ "199": "Scotch terrier",
202
+ "200": "Tibetan terrier",
203
+ "201": "silky terrier",
204
+ "202": "soft-coated wheaten terrier",
205
+ "203": "West Highland white terrier",
206
+ "204": "Lhasa",
207
+ "205": "flat-coated retriever",
208
+ "206": "curly-coated retriever",
209
+ "207": "golden retriever",
210
+ "208": "Labrador retriever",
211
+ "209": "Chesapeake Bay retriever",
212
+ "210": "German short-haired pointer",
213
+ "211": "vizsla",
214
+ "212": "English setter",
215
+ "213": "Irish setter",
216
+ "214": "Gordon setter",
217
+ "215": "Brittany spaniel",
218
+ "216": "clumber",
219
+ "217": "English springer",
220
+ "218": "Welsh springer spaniel",
221
+ "219": "cocker spaniel",
222
+ "220": "Sussex spaniel",
223
+ "221": "Irish water spaniel",
224
+ "222": "kuvasz",
225
+ "223": "schipperke",
226
+ "224": "groenendael",
227
+ "225": "malinois",
228
+ "226": "briard",
229
+ "227": "kelpie",
230
+ "228": "komondor",
231
+ "229": "Old English sheepdog",
232
+ "230": "Shetland sheepdog",
233
+ "231": "collie",
234
+ "232": "Border collie",
235
+ "233": "Bouvier des Flandres",
236
+ "234": "Rottweiler",
237
+ "235": "German shepherd",
238
+ "236": "Doberman",
239
+ "237": "miniature pinscher",
240
+ "238": "Greater Swiss Mountain dog",
241
+ "239": "Bernese mountain dog",
242
+ "240": "Appenzeller",
243
+ "241": "EntleBucher",
244
+ "242": "boxer",
245
+ "243": "bull mastiff",
246
+ "244": "Tibetan mastiff",
247
+ "245": "French bulldog",
248
+ "246": "Great Dane",
249
+ "247": "Saint Bernard",
250
+ "248": "Eskimo dog",
251
+ "249": "malamute",
252
+ "250": "Siberian husky",
253
+ "251": "dalmatian",
254
+ "252": "affenpinscher",
255
+ "253": "basenji",
256
+ "254": "pug",
257
+ "255": "Leonberg",
258
+ "256": "Newfoundland",
259
+ "257": "Great Pyrenees",
260
+ "258": "Samoyed",
261
+ "259": "Pomeranian",
262
+ "260": "chow",
263
+ "261": "keeshond",
264
+ "262": "Brabancon griffon",
265
+ "263": "Pembroke",
266
+ "264": "Cardigan",
267
+ "265": "toy poodle",
268
+ "266": "miniature poodle",
269
+ "267": "standard poodle",
270
+ "268": "Mexican hairless",
271
+ "269": "timber wolf",
272
+ "270": "white wolf",
273
+ "271": "red wolf",
274
+ "272": "coyote",
275
+ "273": "dingo",
276
+ "274": "dhole",
277
+ "275": "African hunting dog",
278
+ "276": "hyena",
279
+ "277": "red fox",
280
+ "278": "kit fox",
281
+ "279": "Arctic fox",
282
+ "280": "grey fox",
283
+ "281": "tabby",
284
+ "282": "tiger cat",
285
+ "283": "Persian cat",
286
+ "284": "Siamese cat",
287
+ "285": "Egyptian cat",
288
+ "286": "cougar",
289
+ "287": "lynx",
290
+ "288": "leopard",
291
+ "289": "snow leopard",
292
+ "290": "jaguar",
293
+ "291": "lion",
294
+ "292": "tiger",
295
+ "293": "cheetah",
296
+ "294": "brown bear",
297
+ "295": "American black bear",
298
+ "296": "ice bear",
299
+ "297": "sloth bear",
300
+ "298": "mongoose",
301
+ "299": "meerkat",
302
+ "300": "tiger beetle",
303
+ "301": "ladybug",
304
+ "302": "ground beetle",
305
+ "303": "long-horned beetle",
306
+ "304": "leaf beetle",
307
+ "305": "dung beetle",
308
+ "306": "rhinoceros beetle",
309
+ "307": "weevil",
310
+ "308": "fly",
311
+ "309": "bee",
312
+ "310": "ant",
313
+ "311": "grasshopper",
314
+ "312": "cricket",
315
+ "313": "walking stick",
316
+ "314": "cockroach",
317
+ "315": "mantis",
318
+ "316": "cicada",
319
+ "317": "leafhopper",
320
+ "318": "lacewing",
321
+ "319": "dragonfly",
322
+ "320": "damselfly",
323
+ "321": "admiral",
324
+ "322": "ringlet",
325
+ "323": "monarch",
326
+ "324": "cabbage butterfly",
327
+ "325": "sulphur butterfly",
328
+ "326": "lycaenid",
329
+ "327": "starfish",
330
+ "328": "sea urchin",
331
+ "329": "sea cucumber",
332
+ "330": "wood rabbit",
333
+ "331": "hare",
334
+ "332": "Angora",
335
+ "333": "hamster",
336
+ "334": "porcupine",
337
+ "335": "fox squirrel",
338
+ "336": "marmot",
339
+ "337": "beaver",
340
+ "338": "guinea pig",
341
+ "339": "sorrel",
342
+ "340": "zebra",
343
+ "341": "hog",
344
+ "342": "wild boar",
345
+ "343": "warthog",
346
+ "344": "hippopotamus",
347
+ "345": "ox",
348
+ "346": "water buffalo",
349
+ "347": "bison",
350
+ "348": "ram",
351
+ "349": "bighorn",
352
+ "350": "ibex",
353
+ "351": "hartebeest",
354
+ "352": "impala",
355
+ "353": "gazelle",
356
+ "354": "Arabian camel",
357
+ "355": "llama",
358
+ "356": "weasel",
359
+ "357": "mink",
360
+ "358": "polecat",
361
+ "359": "black-footed ferret",
362
+ "360": "otter",
363
+ "361": "skunk",
364
+ "362": "badger",
365
+ "363": "armadillo",
366
+ "364": "three-toed sloth",
367
+ "365": "orangutan",
368
+ "366": "gorilla",
369
+ "367": "chimpanzee",
370
+ "368": "gibbon",
371
+ "369": "siamang",
372
+ "370": "guenon",
373
+ "371": "patas",
374
+ "372": "baboon",
375
+ "373": "macaque",
376
+ "374": "langur",
377
+ "375": "colobus",
378
+ "376": "proboscis monkey",
379
+ "377": "marmoset",
380
+ "378": "capuchin",
381
+ "379": "howler monkey",
382
+ "380": "titi",
383
+ "381": "spider monkey",
384
+ "382": "squirrel monkey",
385
+ "383": "Madagascar cat",
386
+ "384": "indri",
387
+ "385": "Indian elephant",
388
+ "386": "African elephant",
389
+ "387": "lesser panda",
390
+ "388": "giant panda",
391
+ "389": "barracouta",
392
+ "390": "eel",
393
+ "391": "coho",
394
+ "392": "rock beauty",
395
+ "393": "anemone fish",
396
+ "394": "sturgeon",
397
+ "395": "gar",
398
+ "396": "lionfish",
399
+ "397": "puffer",
400
+ "398": "abacus",
401
+ "399": "abaya",
402
+ "400": "academic gown",
403
+ "401": "accordion",
404
+ "402": "acoustic guitar",
405
+ "403": "aircraft carrier",
406
+ "404": "airliner",
407
+ "405": "airship",
408
+ "406": "altar",
409
+ "407": "ambulance",
410
+ "408": "amphibian",
411
+ "409": "analog clock",
412
+ "410": "apiary",
413
+ "411": "apron",
414
+ "412": "ashcan",
415
+ "413": "assault rifle",
416
+ "414": "backpack",
417
+ "415": "bakery",
418
+ "416": "balance beam",
419
+ "417": "balloon",
420
+ "418": "ballpoint",
421
+ "419": "Band Aid",
422
+ "420": "banjo",
423
+ "421": "bannister",
424
+ "422": "barbell",
425
+ "423": "barber chair",
426
+ "424": "barbershop",
427
+ "425": "barn",
428
+ "426": "barometer",
429
+ "427": "barrel",
430
+ "428": "barrow",
431
+ "429": "baseball",
432
+ "430": "basketball",
433
+ "431": "bassinet",
434
+ "432": "bassoon",
435
+ "433": "bathing cap",
436
+ "434": "bath towel",
437
+ "435": "bathtub",
438
+ "436": "beach wagon",
439
+ "437": "beacon",
440
+ "438": "beaker",
441
+ "439": "bearskin",
442
+ "440": "beer bottle",
443
+ "441": "beer glass",
444
+ "442": "bell cote",
445
+ "443": "bib",
446
+ "444": "bicycle-built-for-two",
447
+ "445": "bikini",
448
+ "446": "binder",
449
+ "447": "binoculars",
450
+ "448": "birdhouse",
451
+ "449": "boathouse",
452
+ "450": "bobsled",
453
+ "451": "bolo tie",
454
+ "452": "bonnet",
455
+ "453": "bookcase",
456
+ "454": "bookshop",
457
+ "455": "bottlecap",
458
+ "456": "bow",
459
+ "457": "bow tie",
460
+ "458": "brass",
461
+ "459": "brassiere",
462
+ "460": "breakwater",
463
+ "461": "breastplate",
464
+ "462": "broom",
465
+ "463": "bucket",
466
+ "464": "buckle",
467
+ "465": "bulletproof vest",
468
+ "466": "bullet train",
469
+ "467": "butcher shop",
470
+ "468": "cab",
471
+ "469": "caldron",
472
+ "470": "candle",
473
+ "471": "cannon",
474
+ "472": "canoe",
475
+ "473": "can opener",
476
+ "474": "cardigan",
477
+ "475": "car mirror",
478
+ "476": "carousel",
479
+ "477": "carpenter's kit",
480
+ "478": "carton",
481
+ "479": "car wheel",
482
+ "480": "cash machine",
483
+ "481": "cassette",
484
+ "482": "cassette player",
485
+ "483": "castle",
486
+ "484": "catamaran",
487
+ "485": "CD player",
488
+ "486": "cello",
489
+ "487": "cellular telephone",
490
+ "488": "chain",
491
+ "489": "chainlink fence",
492
+ "490": "chain mail",
493
+ "491": "chain saw",
494
+ "492": "chest",
495
+ "493": "chiffonier",
496
+ "494": "chime",
497
+ "495": "china cabinet",
498
+ "496": "Christmas stocking",
499
+ "497": "church",
500
+ "498": "cinema",
501
+ "499": "cleaver",
502
+ "500": "cliff dwelling",
503
+ "501": "cloak",
504
+ "502": "clog",
505
+ "503": "cocktail shaker",
506
+ "504": "coffee mug",
507
+ "505": "coffeepot",
508
+ "506": "coil",
509
+ "507": "combination lock",
510
+ "508": "computer keyboard",
511
+ "509": "confectionery",
512
+ "510": "container ship",
513
+ "511": "convertible",
514
+ "512": "corkscrew",
515
+ "513": "cornet",
516
+ "514": "cowboy boot",
517
+ "515": "cowboy hat",
518
+ "516": "cradle",
519
+ "517": "crane",
520
+ "518": "crash helmet",
521
+ "519": "crate",
522
+ "520": "crib",
523
+ "521": "Crock Pot",
524
+ "522": "croquet ball",
525
+ "523": "crutch",
526
+ "524": "cuirass",
527
+ "525": "dam",
528
+ "526": "desk",
529
+ "527": "desktop computer",
530
+ "528": "dial telephone",
531
+ "529": "diaper",
532
+ "530": "digital clock",
533
+ "531": "digital watch",
534
+ "532": "dining table",
535
+ "533": "dishrag",
536
+ "534": "dishwasher",
537
+ "535": "disk brake",
538
+ "536": "dock",
539
+ "537": "dogsled",
540
+ "538": "dome",
541
+ "539": "doormat",
542
+ "540": "drilling platform",
543
+ "541": "drum",
544
+ "542": "drumstick",
545
+ "543": "dumbbell",
546
+ "544": "Dutch oven",
547
+ "545": "electric fan",
548
+ "546": "electric guitar",
549
+ "547": "electric locomotive",
550
+ "548": "entertainment center",
551
+ "549": "envelope",
552
+ "550": "espresso maker",
553
+ "551": "face powder",
554
+ "552": "feather boa",
555
+ "553": "file",
556
+ "554": "fireboat",
557
+ "555": "fire engine",
558
+ "556": "fire screen",
559
+ "557": "flagpole",
560
+ "558": "flute",
561
+ "559": "folding chair",
562
+ "560": "football helmet",
563
+ "561": "forklift",
564
+ "562": "fountain",
565
+ "563": "fountain pen",
566
+ "564": "four-poster",
567
+ "565": "freight car",
568
+ "566": "French horn",
569
+ "567": "frying pan",
570
+ "568": "fur coat",
571
+ "569": "garbage truck",
572
+ "570": "gasmask",
573
+ "571": "gas pump",
574
+ "572": "goblet",
575
+ "573": "go-kart",
576
+ "574": "golf ball",
577
+ "575": "golfcart",
578
+ "576": "gondola",
579
+ "577": "gong",
580
+ "578": "gown",
581
+ "579": "grand piano",
582
+ "580": "greenhouse",
583
+ "581": "grille",
584
+ "582": "grocery store",
585
+ "583": "guillotine",
586
+ "584": "hair slide",
587
+ "585": "hair spray",
588
+ "586": "half track",
589
+ "587": "hammer",
590
+ "588": "hamper",
591
+ "589": "hand blower",
592
+ "590": "hand-held computer",
593
+ "591": "handkerchief",
594
+ "592": "hard disc",
595
+ "593": "harmonica",
596
+ "594": "harp",
597
+ "595": "harvester",
598
+ "596": "hatchet",
599
+ "597": "holster",
600
+ "598": "home theater",
601
+ "599": "honeycomb",
602
+ "600": "hook",
603
+ "601": "hoopskirt",
604
+ "602": "horizontal bar",
605
+ "603": "horse cart",
606
+ "604": "hourglass",
607
+ "605": "iPod",
608
+ "606": "iron",
609
+ "607": "jack-o'-lantern",
610
+ "608": "jean",
611
+ "609": "jeep",
612
+ "610": "jersey",
613
+ "611": "jigsaw puzzle",
614
+ "612": "jinrikisha",
615
+ "613": "joystick",
616
+ "614": "kimono",
617
+ "615": "knee pad",
618
+ "616": "knot",
619
+ "617": "lab coat",
620
+ "618": "ladle",
621
+ "619": "lampshade",
622
+ "620": "laptop",
623
+ "621": "lawn mower",
624
+ "622": "lens cap",
625
+ "623": "letter opener",
626
+ "624": "library",
627
+ "625": "lifeboat",
628
+ "626": "lighter",
629
+ "627": "limousine",
630
+ "628": "liner",
631
+ "629": "lipstick",
632
+ "630": "Loafer",
633
+ "631": "lotion",
634
+ "632": "loudspeaker",
635
+ "633": "loupe",
636
+ "634": "lumbermill",
637
+ "635": "magnetic compass",
638
+ "636": "mailbag",
639
+ "637": "mailbox",
640
+ "638": "maillot",
641
+ "639": "maillot tank suit",
642
+ "640": "manhole cover",
643
+ "641": "maraca",
644
+ "642": "marimba",
645
+ "643": "mask",
646
+ "644": "matchstick",
647
+ "645": "maypole",
648
+ "646": "maze",
649
+ "647": "measuring cup",
650
+ "648": "medicine chest",
651
+ "649": "megalith",
652
+ "650": "microphone",
653
+ "651": "microwave",
654
+ "652": "military uniform",
655
+ "653": "milk can",
656
+ "654": "minibus",
657
+ "655": "miniskirt",
658
+ "656": "minivan",
659
+ "657": "missile",
660
+ "658": "mitten",
661
+ "659": "mixing bowl",
662
+ "660": "mobile home",
663
+ "661": "Model T",
664
+ "662": "modem",
665
+ "663": "monastery",
666
+ "664": "monitor",
667
+ "665": "moped",
668
+ "666": "mortar",
669
+ "667": "mortarboard",
670
+ "668": "mosque",
671
+ "669": "mosquito net",
672
+ "670": "motor scooter",
673
+ "671": "mountain bike",
674
+ "672": "mountain tent",
675
+ "673": "mouse",
676
+ "674": "mousetrap",
677
+ "675": "moving van",
678
+ "676": "muzzle",
679
+ "677": "nail",
680
+ "678": "neck brace",
681
+ "679": "necklace",
682
+ "680": "nipple",
683
+ "681": "notebook",
684
+ "682": "obelisk",
685
+ "683": "oboe",
686
+ "684": "ocarina",
687
+ "685": "odometer",
688
+ "686": "oil filter",
689
+ "687": "organ",
690
+ "688": "oscilloscope",
691
+ "689": "overskirt",
692
+ "690": "oxcart",
693
+ "691": "oxygen mask",
694
+ "692": "packet",
695
+ "693": "paddle",
696
+ "694": "paddlewheel",
697
+ "695": "padlock",
698
+ "696": "paintbrush",
699
+ "697": "pajama",
700
+ "698": "palace",
701
+ "699": "panpipe",
702
+ "700": "paper towel",
703
+ "701": "parachute",
704
+ "702": "parallel bars",
705
+ "703": "park bench",
706
+ "704": "parking meter",
707
+ "705": "passenger car",
708
+ "706": "patio",
709
+ "707": "pay-phone",
710
+ "708": "pedestal",
711
+ "709": "pencil box",
712
+ "710": "pencil sharpener",
713
+ "711": "perfume",
714
+ "712": "Petri dish",
715
+ "713": "photocopier",
716
+ "714": "pick",
717
+ "715": "pickelhaube",
718
+ "716": "picket fence",
719
+ "717": "pickup",
720
+ "718": "pier",
721
+ "719": "piggy bank",
722
+ "720": "pill bottle",
723
+ "721": "pillow",
724
+ "722": "ping-pong ball",
725
+ "723": "pinwheel",
726
+ "724": "pirate",
727
+ "725": "pitcher",
728
+ "726": "plane",
729
+ "727": "planetarium",
730
+ "728": "plastic bag",
731
+ "729": "plate rack",
732
+ "730": "plow",
733
+ "731": "plunger",
734
+ "732": "Polaroid camera",
735
+ "733": "pole",
736
+ "734": "police van",
737
+ "735": "poncho",
738
+ "736": "pool table",
739
+ "737": "pop bottle",
740
+ "738": "pot",
741
+ "739": "potter's wheel",
742
+ "740": "power drill",
743
+ "741": "prayer rug",
744
+ "742": "printer",
745
+ "743": "prison",
746
+ "744": "projectile",
747
+ "745": "projector",
748
+ "746": "puck",
749
+ "747": "punching bag",
750
+ "748": "purse",
751
+ "749": "quill",
752
+ "750": "quilt",
753
+ "751": "racer",
754
+ "752": "racket",
755
+ "753": "radiator",
756
+ "754": "radio",
757
+ "755": "radio telescope",
758
+ "756": "rain barrel",
759
+ "757": "recreational vehicle",
760
+ "758": "reel",
761
+ "759": "reflex camera",
762
+ "760": "refrigerator",
763
+ "761": "remote control",
764
+ "762": "restaurant",
765
+ "763": "revolver",
766
+ "764": "rifle",
767
+ "765": "rocking chair",
768
+ "766": "rotisserie",
769
+ "767": "rubber eraser",
770
+ "768": "rugby ball",
771
+ "769": "rule",
772
+ "770": "running shoe",
773
+ "771": "safe",
774
+ "772": "safety pin",
775
+ "773": "saltshaker",
776
+ "774": "sandal",
777
+ "775": "sarong",
778
+ "776": "sax",
779
+ "777": "scabbard",
780
+ "778": "scale",
781
+ "779": "school bus",
782
+ "780": "schooner",
783
+ "781": "scoreboard",
784
+ "782": "screen",
785
+ "783": "screw",
786
+ "784": "screwdriver",
787
+ "785": "seat belt",
788
+ "786": "sewing machine",
789
+ "787": "shield",
790
+ "788": "shoe shop",
791
+ "789": "shoji",
792
+ "790": "shopping basket",
793
+ "791": "shopping cart",
794
+ "792": "shovel",
795
+ "793": "shower cap",
796
+ "794": "shower curtain",
797
+ "795": "ski",
798
+ "796": "ski mask",
799
+ "797": "sleeping bag",
800
+ "798": "slide rule",
801
+ "799": "sliding door",
802
+ "800": "slot",
803
+ "801": "snorkel",
804
+ "802": "snowmobile",
805
+ "803": "snowplow",
806
+ "804": "soap dispenser",
807
+ "805": "soccer ball",
808
+ "806": "sock",
809
+ "807": "solar dish",
810
+ "808": "sombrero",
811
+ "809": "soup bowl",
812
+ "810": "space bar",
813
+ "811": "space heater",
814
+ "812": "space shuttle",
815
+ "813": "spatula",
816
+ "814": "speedboat",
817
+ "815": "spider web",
818
+ "816": "spindle",
819
+ "817": "sports car",
820
+ "818": "spotlight",
821
+ "819": "stage",
822
+ "820": "steam locomotive",
823
+ "821": "steel arch bridge",
824
+ "822": "steel drum",
825
+ "823": "stethoscope",
826
+ "824": "stole",
827
+ "825": "stone wall",
828
+ "826": "stopwatch",
829
+ "827": "stove",
830
+ "828": "strainer",
831
+ "829": "streetcar",
832
+ "830": "stretcher",
833
+ "831": "studio couch",
834
+ "832": "stupa",
835
+ "833": "submarine",
836
+ "834": "suit",
837
+ "835": "sundial",
838
+ "836": "sunglass",
839
+ "837": "sunglasses",
840
+ "838": "sunscreen",
841
+ "839": "suspension bridge",
842
+ "840": "swab",
843
+ "841": "sweatshirt",
844
+ "842": "swimming trunks",
845
+ "843": "swing",
846
+ "844": "switch",
847
+ "845": "syringe",
848
+ "846": "table lamp",
849
+ "847": "tank",
850
+ "848": "tape player",
851
+ "849": "teapot",
852
+ "850": "teddy",
853
+ "851": "television",
854
+ "852": "tennis ball",
855
+ "853": "thatch",
856
+ "854": "theater curtain",
857
+ "855": "thimble",
858
+ "856": "thresher",
859
+ "857": "throne",
860
+ "858": "tile roof",
861
+ "859": "toaster",
862
+ "860": "tobacco shop",
863
+ "861": "toilet seat",
864
+ "862": "torch",
865
+ "863": "totem pole",
866
+ "864": "tow truck",
867
+ "865": "toyshop",
868
+ "866": "tractor",
869
+ "867": "trailer truck",
870
+ "868": "tray",
871
+ "869": "trench coat",
872
+ "870": "tricycle",
873
+ "871": "trimaran",
874
+ "872": "tripod",
875
+ "873": "triumphal arch",
876
+ "874": "trolleybus",
877
+ "875": "trombone",
878
+ "876": "tub",
879
+ "877": "turnstile",
880
+ "878": "typewriter keyboard",
881
+ "879": "umbrella",
882
+ "880": "unicycle",
883
+ "881": "upright",
884
+ "882": "vacuum",
885
+ "883": "vase",
886
+ "884": "vault",
887
+ "885": "velvet",
888
+ "886": "vending machine",
889
+ "887": "vestment",
890
+ "888": "viaduct",
891
+ "889": "violin",
892
+ "890": "volleyball",
893
+ "891": "waffle iron",
894
+ "892": "wall clock",
895
+ "893": "wallet",
896
+ "894": "wardrobe",
897
+ "895": "warplane",
898
+ "896": "washbasin",
899
+ "897": "washer",
900
+ "898": "water bottle",
901
+ "899": "water jug",
902
+ "900": "water tower",
903
+ "901": "whiskey jug",
904
+ "902": "whistle",
905
+ "903": "wig",
906
+ "904": "window screen",
907
+ "905": "window shade",
908
+ "906": "Windsor tie",
909
+ "907": "wine bottle",
910
+ "908": "wing",
911
+ "909": "wok",
912
+ "910": "wooden spoon",
913
+ "911": "wool",
914
+ "912": "worm fence",
915
+ "913": "wreck",
916
+ "914": "yawl",
917
+ "915": "yurt",
918
+ "916": "web site",
919
+ "917": "comic book",
920
+ "918": "crossword puzzle",
921
+ "919": "street sign",
922
+ "920": "traffic light",
923
+ "921": "book jacket",
924
+ "922": "menu",
925
+ "923": "plate",
926
+ "924": "guacamole",
927
+ "925": "consomme",
928
+ "926": "hot pot",
929
+ "927": "trifle",
930
+ "928": "ice cream",
931
+ "929": "ice lolly",
932
+ "930": "French loaf",
933
+ "931": "bagel",
934
+ "932": "pretzel",
935
+ "933": "cheeseburger",
936
+ "934": "hotdog",
937
+ "935": "mashed potato",
938
+ "936": "head cabbage",
939
+ "937": "broccoli",
940
+ "938": "cauliflower",
941
+ "939": "zucchini",
942
+ "940": "spaghetti squash",
943
+ "941": "acorn squash",
944
+ "942": "butternut squash",
945
+ "943": "cucumber",
946
+ "944": "artichoke",
947
+ "945": "bell pepper",
948
+ "946": "cardoon",
949
+ "947": "mushroom",
950
+ "948": "Granny Smith",
951
+ "949": "strawberry",
952
+ "950": "orange",
953
+ "951": "lemon",
954
+ "952": "fig",
955
+ "953": "pineapple",
956
+ "954": "banana",
957
+ "955": "jackfruit",
958
+ "956": "custard apple",
959
+ "957": "pomegranate",
960
+ "958": "hay",
961
+ "959": "carbonara",
962
+ "960": "chocolate sauce",
963
+ "961": "dough",
964
+ "962": "meat loaf",
965
+ "963": "pizza",
966
+ "964": "potpie",
967
+ "965": "burrito",
968
+ "966": "red wine",
969
+ "967": "espresso",
970
+ "968": "cup",
971
+ "969": "eggnog",
972
+ "970": "alp",
973
+ "971": "bubble",
974
+ "972": "cliff",
975
+ "973": "coral reef",
976
+ "974": "geyser",
977
+ "975": "lakeside",
978
+ "976": "promontory",
979
+ "977": "sandbar",
980
+ "978": "seashore",
981
+ "979": "valley",
982
+ "980": "volcano",
983
+ "981": "ballplayer",
984
+ "982": "groom",
985
+ "983": "scuba diver",
986
+ "984": "rapeseed",
987
+ "985": "daisy",
988
+ "986": "yellow lady's slipper",
989
+ "987": "corn",
990
+ "988": "acorn",
991
+ "989": "hip",
992
+ "990": "buckeye",
993
+ "991": "coral fungus",
994
+ "992": "agaric",
995
+ "993": "gyromitra",
996
+ "994": "stinkhorn",
997
+ "995": "earthstar",
998
+ "996": "hen-of-the-woods",
999
+ "997": "bolete",
1000
+ "998": "ear",
1001
+ "999": "toilet tissue"
1002
+ }
requirements.txt ADDED
@@ -0,0 +1,5 @@
 
 
 
 
 
 
1
+ torch>=2.0.0
2
+ torchvision>=0.15.0
3
+ streamlit>=1.22.0
4
+ Pillow>=9.0.0
5
+ numpy>=1.24.0