diff --git a/lit_nlp/examples/blank_slate_demo.py b/lit_nlp/examples/blank_slate_demo.py index 9d235dcb..6fbefd40 100644 --- a/lit_nlp/examples/blank_slate_demo.py +++ b/lit_nlp/examples/blank_slate_demo.py @@ -12,7 +12,6 @@ left-to-right language model, with the Stanford Sentiment Treebank dataset, the IMDB reviews dataset, Billion Word Benchmark (lm1b) dataset and the option to load sentences from a flat text file. -- MobileNet model, with the Imagenette TFDS dataset. To run: python -m lit_nlp.examples.blank_slate_demo --port=5432 @@ -32,12 +31,10 @@ from lit_nlp import server_flags from lit_nlp.examples.datasets import classification from lit_nlp.examples.datasets import glue -from lit_nlp.examples.datasets import imagenette from lit_nlp.examples.datasets import lm from lit_nlp.examples.datasets import mt from lit_nlp.examples.datasets import summarization from lit_nlp.examples.models import glue_models -from lit_nlp.examples.models import mobilenet from lit_nlp.examples.models import pretrained_lms from lit_nlp.examples.models import t5 from lit_nlp.examples.penguin import data as penguin_data @@ -111,12 +108,6 @@ def main(argv: Sequence[str]) -> Optional[dev_server.LitServerType]: pretrained_lms.GPT2LanguageModel.init_spec(), ) - # image model loaders. - model_loaders["image"] = ( - mobilenet.MobileNet, - mobilenet.MobileNet.init_spec(), - ) - datasets = {} dataset_loaders: lit_app.DatasetLoadersMap = {} @@ -156,12 +147,6 @@ def main(argv: Sequence[str]) -> Optional[dev_server.LitServerType]: lm.BillionWordBenchmark.init_spec(), ) - # image demo dataset loaders. - dataset_loaders["image"] = ( - imagenette.ImagenetteDataset, - imagenette.ImagenetteDataset.init_spec(), - ) - # Start the LIT server. See server_flags.py for server options. lit_demo = dev_server.Server( models, diff --git a/lit_nlp/examples/datasets/imagenette.py b/lit_nlp/examples/datasets/imagenette.py deleted file mode 100644 index 7630709f..00000000 --- a/lit_nlp/examples/datasets/imagenette.py +++ /dev/null @@ -1,34 +0,0 @@ -"""Imagenette dataset from tfds.""" - -from lit_nlp.api import dataset -from lit_nlp.api import types as lit_types -from lit_nlp.lib import image_utils -from PIL import Image as PILImage -import tensorflow_datasets as tfds - - -class ImagenetteDataset(dataset.Dataset): - """Imagenette TFDS dataset. - - See https://www.tensorflow.org/datasets/catalog/imagenette for details. - Images are at low quality and by default load 100 examples from the validation - set though this can be changed through the `split` parameter, as per TFDS - documentation. - """ - - def __init__(self, split: str = 'validation[:100]'): - tfds_examples = tfds.as_numpy( - tfds.load('imagenette/160px', split=split, download=True, - try_gcs=True)) - def convert_input(inp): - pil_image = PILImage.fromarray(inp['image']) - image_str = image_utils.convert_pil_to_image_str(pil_image) - return {'image': image_str} - self._examples = [convert_input(inp) for inp in tfds_examples] - - def spec(self) -> lit_types.Spec: - return { - 'image': lit_types.ImageBytes(), - } - - diff --git a/lit_nlp/examples/datasets/open_images.py b/lit_nlp/examples/datasets/open_images.py deleted file mode 100644 index 71e0779a..00000000 --- a/lit_nlp/examples/datasets/open_images.py +++ /dev/null @@ -1,32 +0,0 @@ -"""Open Images dataset from tfds.""" - -from lit_nlp.api import dataset -from lit_nlp.api import types as lit_types -from lit_nlp.lib import image_utils -from PIL import Image as PILImage -import tensorflow_datasets as tfds - - -class OpenImagesDataset(dataset.Dataset): - """OpenImages TFDS dataset. - - See https://www.tensorflow.org/datasets/catalog/open_images_v4 for details. - Images are at 72 JPEG quality and by default load 100 examples from the test - set though this can be changed through the `split` parameter, as per TFDS - documentation. - """ - - def __init__(self, split: str = 'test[:100]'): - tfds_examples = tfds.as_numpy( - tfds.load('open_images_v4/200k', split=split, download=True, - try_gcs=True)) - def convert_input(inp): - pil_image = PILImage.fromarray(inp['image']) - image_str = image_utils.convert_pil_to_image_str(pil_image) - return {'image': image_str} - self._examples = [convert_input(inp) for inp in tfds_examples] - - def spec(self) -> lit_types.Spec: - return { - 'image': lit_types.ImageBytes(), - } diff --git a/lit_nlp/examples/image_demo.py b/lit_nlp/examples/image_demo.py deleted file mode 100644 index 5d9d25a4..00000000 --- a/lit_nlp/examples/image_demo.py +++ /dev/null @@ -1,100 +0,0 @@ -"""LIT demo for image model. - -To run: - python -m lit_nlp.examples.image_demo --port=5432 - -Then navigate to localhost:5432 to access the demo UI. -""" - -from collections.abc import Sequence -import sys -from typing import Optional - -from absl import app -from absl import flags -from absl import logging -from lit_nlp import dev_server -from lit_nlp import server_flags -from lit_nlp.api import layout -from lit_nlp.components import classification_results -from lit_nlp.components import image_gradient_maps -from lit_nlp.examples.datasets import imagenette -from lit_nlp.examples.models import mobilenet - - -FLAGS = flags.FLAGS - -FLAGS.set_default('development_demo', True) -FLAGS.set_default('warm_start', 1) -FLAGS.set_default('page_title', 'LIT Image Demo') - -_MAX_EXAMPLES = flags.DEFINE_integer( - 'max_examples', - None, - ( - 'Maximum number of examples to load into LIT. ' - 'Set --max_examples=200 for a quick start.' - ), -) - - -def get_wsgi_app(): - """Returns a LitApp instance for consumption by gunicorn.""" - FLAGS.set_default('server_type', 'external') - FLAGS.set_default('demo_mode', True) - # Parse flags without calling app.run(main), to avoid conflict with - # gunicorn command line flags. - unused = flags.FLAGS(sys.argv, known_only=True) - if unused: - logging.info('image_demo:get_wsgi_app() called with unused args: %s', - unused) - return main([]) - -# Custom frontend layout; see api/layout.py -modules = layout.LitModuleName -DEMO_LAYOUT = layout.LitCanonicalLayout( - upper={ - 'Main': [modules.DataTableModule, modules.DatapointEditorModule], - }, - lower={ - 'Predictions': [modules.ClassificationModule, modules.ScalarModule], - 'Explanations': [ - modules.ClassificationModule, - modules.SalienceMapModule, - ], - }, - description='Basic layout for image demo', -) - -CUSTOM_LAYOUTS = layout.DEFAULT_LAYOUTS | {'default': DEMO_LAYOUT} - - -def main(argv: Sequence[str]) -> Optional[dev_server.LitServerType]: - if len(argv) > 1: - raise app.UsageError('Too many command-line arguments.') - - datasets = {'imagenette': imagenette.ImagenetteDataset()} - # Truncate datasets if --max_examples is set. - if _MAX_EXAMPLES.value is not None: - for name in datasets: - logging.info("Dataset: '%s' with %d examples", name, len(datasets[name])) - datasets[name] = datasets[name].slice[: _MAX_EXAMPLES.value] - logging.info(' truncated to %d examples', len(datasets[name])) - - models = {'mobilenet': mobilenet.MobileNet()} - interpreters = { - 'classification': classification_results.ClassificationInterpreter(), - } | image_gradient_maps.all_interpreters() - - lit_demo = dev_server.Server( - models, - datasets, - interpreters=interpreters, - generators={}, - layouts={'default': DEMO_LAYOUT}, - **server_flags.get_flags()) - return lit_demo.serve() - - -if __name__ == '__main__': - app.run(main) diff --git a/lit_nlp/examples/models/imagenet_labels.py b/lit_nlp/examples/models/imagenet_labels.py deleted file mode 100644 index 14db6708..00000000 --- a/lit_nlp/examples/models/imagenet_labels.py +++ /dev/null @@ -1,2019 +0,0 @@ -"""Imagenet labels.""" -# pylint: disable=line-too-long -IMAGENET_2012_LABELS = { - 0: - 'tench, Tinca tinca', - 1: - 'goldfish, Carassius auratus', - 2: - 'great white shark, white shark, man-eater, man-eating shark, ' - 'Carcharodon carcharias', - 3: - 'tiger shark, Galeocerdo cuvieri', - 4: - 'hammerhead, hammerhead shark', - 5: - 'electric ray, crampfish, numbfish, torpedo', - 6: - 'stingray', - 7: - 'cock', - 8: - 'hen', - 9: - 'ostrich, Struthio camelus', - 10: - 'brambling, Fringilla montifringilla', - 11: - 'goldfinch, Carduelis carduelis', - 12: - 'house finch, linnet, Carpodacus mexicanus', - 13: - 'junco, snowbird', - 14: - 'indigo bunting, indigo finch, indigo bird, Passerina cyanea', - 15: - 'robin, American robin, Turdus migratorius', - 16: - 'bulbul', - 17: - 'jay', - 18: - 'magpie', - 19: - 'chickadee', - 20: - 'water ouzel, dipper', - 21: - 'kite', - 22: - 'bald eagle, American eagle, Haliaeetus leucocephalus', - 23: - 'vulture', - 24: - 'great grey owl, great gray owl, Strix nebulosa', - 25: - 'European fire salamander, Salamandra salamandra', - 26: - 'common newt, Triturus vulgaris', - 27: - 'eft', - 28: - 'spotted salamander, Ambystoma maculatum', - 29: - 'axolotl, mud puppy, Ambystoma mexicanum', - 30: - 'bullfrog, Rana catesbeiana', - 31: - 'tree frog, tree-frog', - 32: - 'tailed frog, bell toad, ribbed toad, tailed toad, Ascaphus trui', - 33: - 'loggerhead, loggerhead turtle, Caretta caretta', - 34: - 'leatherback turtle, leatherback, leathery turtle, Dermochelys coriacea', - 35: - 'mud turtle', - 36: - 'terrapin', - 37: - 'box turtle, box tortoise', - 38: - 'banded gecko', - 39: - 'common iguana, iguana, Iguana iguana', - 40: - 'American chameleon, anole, Anolis carolinensis', - 41: - 'whiptail, whiptail lizard', - 42: - 'agama', - 43: - 'frilled lizard, Chlamydosaurus kingi', - 44: - 'alligator lizard', - 45: - 'Gila monster, Heloderma suspectum', - 46: - 'green lizard, Lacerta viridis', - 47: - 'African chameleon, Chamaeleo chamaeleon', - 48: - 'Komodo dragon, Komodo lizard, dragon lizard, giant lizard, Varanus ' - 'komodoensis', - 49: - 'African crocodile, Nile crocodile, Crocodylus niloticus', - 50: - 'American alligator, Alligator mississipiensis', - 51: - 'triceratops', - 52: - 'thunder snake, worm snake, Carphophis amoenus', - 53: - 'ringneck snake, ring-necked snake, ring snake', - 54: - 'hognose snake, puff adder, sand viper', - 55: - 'green snake, grass snake', - 56: - 'king snake, kingsnake', - 57: - 'garter snake, grass snake', - 58: - 'water snake', - 59: - 'vine snake', - 60: - 'night snake, Hypsiglena torquata', - 61: - 'boa constrictor, Constrictor constrictor', - 62: - 'rock python, rock snake, Python sebae', - 63: - 'Indian cobra, Naja naja', - 64: - 'green mamba', - 65: - 'sea snake', - 66: - 'horned viper, cerastes, sand viper, horned asp, Cerastes cornutus', - 67: - 'diamondback, diamondback rattlesnake, Crotalus adamanteus', - 68: - 'sidewinder, horned rattlesnake, Crotalus cerastes', - 69: - 'trilobite', - 70: - 'harvestman, daddy longlegs, Phalangium opilio', - 71: - 'scorpion', - 72: - 'black and gold garden spider, Argiope aurantia', - 73: - 'barn spider, Araneus cavaticus', - 74: - 'garden spider, Aranea diademata', - 75: - 'black widow, Latrodectus mactans', - 76: - 'tarantula', - 77: - 'wolf spider, hunting spider', - 78: - 'tick', - 79: - 'centipede', - 80: - 'black grouse', - 81: - 'ptarmigan', - 82: - 'ruffed grouse, partridge, Bonasa umbellus', - 83: - 'prairie chicken, prairie grouse, prairie fowl', - 84: - 'peacock', - 85: - 'quail', - 86: - 'partridge', - 87: - 'African grey, African gray, Psittacus erithacus', - 88: - 'macaw', - 89: - 'sulphur-crested cockatoo, Kakatoe galerita, Cacatua galerita', - 90: - 'lorikeet', - 91: - 'coucal', - 92: - 'bee eater', - 93: - 'hornbill', - 94: - 'hummingbird', - 95: - 'jacamar', - 96: - 'toucan', - 97: - 'drake', - 98: - 'red-breasted merganser, Mergus serrator', # NOTYPO - 99: - 'goose', - 100: - 'black swan, Cygnus atratus', - 101: - 'tusker', - 102: - 'echidna, spiny anteater, anteater', - 103: - 'platypus, duckbill, duckbilled platypus, duck-billed platypus, ' - 'Ornithorhynchus anatinus', - 104: - 'wallaby, brush kangaroo', - 105: - 'koala, koala bear, kangaroo bear, native bear, Phascolarctos cinereus', - 106: - 'wombat', - 107: - 'jellyfish', - 108: - 'sea anemone, anemone', - 109: - 'brain coral', - 110: - 'flatworm, platyhelminth', - 111: - 'nematode, nematode worm, roundworm', - 112: - 'conch', - 113: - 'snail', - 114: - 'slug', - 115: - 'sea slug, nudibranch', - 116: - 'chiton, coat-of-mail shell, sea cradle, polyplacophore', - 117: - 'chambered nautilus, pearly nautilus, nautilus', - 118: - 'Dungeness crab, Cancer magister', - 119: - 'rock crab, Cancer irroratus', - 120: - 'fiddler crab', - 121: - 'king crab, Alaska crab, Alaskan king crab, Alaska king crab, ' - 'Paralithodes camtschatica', - 122: - 'American lobster, Northern lobster, Maine lobster, Homarus americanus', - 123: - 'spiny lobster, langouste, rock lobster, crawfish, crayfish, sea crawfish', - 124: - 'crayfish, crawfish, crawdad, crawdaddy', - 125: - 'hermit crab', - 126: - 'isopod', - 127: - 'white stork, Ciconia ciconia', - 128: - 'black stork, Ciconia nigra', - 129: - 'spoonbill', - 130: - 'flamingo', - 131: - 'little blue heron, Egretta caerulea', - 132: - 'American egret, great white heron, Egretta albus', - 133: - 'bittern', - 134: - 'crane', - 135: - 'limpkin, Aramus pictus', - 136: - 'European gallinule, Porphyrio porphyrio', - 137: - 'American coot, marsh hen, mud hen, water hen, Fulica americana', - 138: - 'bustard', - 139: - 'ruddy turnstone, Arenaria interpres', - 140: - 'red-backed sandpiper, dunlin, Erolia alpina', - 141: - 'redshank, Tringa totanus', - 142: - 'dowitcher', - 143: - 'oystercatcher, oyster catcher', - 144: - 'pelican', - 145: - 'king penguin, Aptenodytes patagonica', - 146: - 'albatross, mollymawk', - 147: - 'grey whale, gray whale, devilfish, Eschrichtius gibbosus, ' - 'Eschrichtius robustus', - 148: - 'killer whale, killer, orca, grampus, sea wolf, Orcinus orca', - 149: - 'dugong, Dugong dugon', - 150: - 'sea lion', - 151: - 'Chihuahua', - 152: - 'Japanese spaniel', - 153: - 'Maltese dog, Maltese terrier, Maltese', - 154: - 'Pekinese, Pekingese, Peke', - 155: - 'Shih-Tzu', - 156: - 'Blenheim spaniel', - 157: - 'papillon', - 158: - 'toy terrier', - 159: - 'Rhodesian ridgeback', - 160: - 'Afghan hound, Afghan', - 161: - 'basset, basset hound', - 162: - 'beagle', - 163: - 'bloodhound, sleuthhound', - 164: - 'bluetick', - 165: - 'black-and-tan coonhound', - 166: - 'Walker hound, Walker foxhound', - 167: - 'English foxhound', - 168: - 'redbone', - 169: - 'borzoi, Russian wolfhound', - 170: - 'Irish wolfhound', - 171: - 'Italian greyhound', - 172: - 'whippet', - 173: - 'Ibizan hound, Ibizan Podenco', - 174: - 'Norwegian elkhound, elkhound', - 175: - 'otterhound, otter hound', - 176: - 'Saluki, gazelle hound', - 177: - 'Scottish deerhound, deerhound', - 178: - 'Weimaraner', - 179: - 'Staffordshire bullterrier, Staffordshire bull terrier', - 180: - 'American Staffordshire terrier, Staffordshire terrier, American pit ' - 'bull terrier, pit bull terrier', - 181: - 'Bedlington terrier', - 182: - 'Border terrier', - 183: - 'Kerry blue terrier', - 184: - 'Irish terrier', - 185: - 'Norfolk terrier', - 186: - 'Norwich terrier', - 187: - 'Yorkshire terrier', - 188: - 'wire-haired fox terrier', - 189: - 'Lakeland terrier', - 190: - 'Sealyham terrier, Sealyham', - 191: - 'Airedale, Airedale terrier', - 192: - 'cairn, cairn terrier', - 193: - 'Australian terrier', - 194: - 'Dandie Dinmont, Dandie Dinmont terrier', - 195: - 'Boston bull, Boston terrier', - 196: - 'miniature schnauzer', - 197: - 'giant schnauzer', - 198: - 'standard schnauzer', - 199: - 'Scotch terrier, Scottish terrier, Scottie', - 200: - 'Tibetan terrier, chrysanthemum dog', - 201: - 'silky terrier, Sydney silky', - 202: - 'soft-coated wheaten terrier', - 203: - 'West Highland white terrier', - 204: - 'Lhasa, Lhasa apso', - 205: - 'flat-coated retriever', - 206: - 'curly-coated retriever', - 207: - 'golden retriever', - 208: - 'Labrador retriever', - 209: - 'Chesapeake Bay retriever', - 210: - 'German short-haired pointer', - 211: - 'vizsla, Hungarian pointer', - 212: - 'English setter', - 213: - 'Irish setter, red setter', - 214: - 'Gordon setter', - 215: - 'Brittany spaniel', - 216: - 'clumber, clumber spaniel', - 217: - 'English springer, English springer spaniel', - 218: - 'Welsh springer spaniel', - 219: - 'cocker spaniel, English cocker spaniel, cocker', - 220: - 'Sussex spaniel', - 221: - 'Irish water spaniel', - 222: - 'kuvasz', - 223: - 'schipperke', - 224: - 'groenendael', - 225: - 'malinois', - 226: - 'briard', - 227: - 'kelpie', - 228: - 'komondor', - 229: - 'Old English sheepdog, bobtail', - 230: - 'Shetland sheepdog, Shetland sheep dog, Shetland', - 231: - 'collie', - 232: - 'Border collie', - 233: - 'Bouvier des Flandres, Bouviers des Flandres', - 234: - 'Rottweiler', - 235: - 'German shepherd, German shepherd dog, German police dog, alsatian', - 236: - 'Doberman, Doberman pinscher', - 237: - 'miniature pinscher', - 238: - 'Greater Swiss Mountain dog', - 239: - 'Bernese mountain dog', - 240: - 'Appenzeller', - 241: - 'EntleBucher', - 242: - 'boxer', - 243: - 'bull mastiff', - 244: - 'Tibetan mastiff', - 245: - 'French bulldog', - 246: - 'Great Dane', - 247: - 'Saint Bernard, St Bernard', - 248: - 'Eskimo dog, husky', - 249: - 'malamute, malemute, Alaskan malamute', - 250: - 'Siberian husky', - 251: - 'dalmatian, coach dog, carriage dog', - 252: - 'affenpinscher, monkey pinscher, monkey dog', - 253: - 'basenji', - 254: - 'pug, pug-dog', - 255: - 'Leonberg', - 256: - 'Newfoundland, Newfoundland dog', - 257: - 'Great Pyrenees', - 258: - 'Samoyed, Samoyede', - 259: - 'Pomeranian', - 260: - 'chow, chow chow', - 261: - 'keeshond', - 262: - 'Brabancon griffon', - 263: - 'Pembroke, Pembroke Welsh corgi', - 264: - 'Cardigan, Cardigan Welsh corgi', - 265: - 'toy poodle', - 266: - 'miniature poodle', - 267: - 'standard poodle', - 268: - 'Mexican hairless', - 269: - 'timber wolf, grey wolf, gray wolf, Canis lupus', - 270: - 'white wolf, Arctic wolf, Canis lupus tundrarum', - 271: - 'red wolf, maned wolf, Canis rufus, Canis niger', - 272: - 'coyote, prairie wolf, brush wolf, Canis latrans', - 273: - 'dingo, warrigal, warragal, Canis dingo', - 274: - 'dhole, Cuon alpinus', - 275: - 'African hunting dog, hyena dog, Cape hunting dog, Lycaon pictus', - 276: - 'hyena, hyaena', - 277: - 'red fox, Vulpes vulpes', - 278: - 'kit fox, Vulpes macrotis', - 279: - 'Arctic fox, white fox, Alopex lagopus', - 280: - 'grey fox, gray fox, Urocyon cinereoargenteus', - 281: - 'tabby, tabby cat', - 282: - 'tiger cat', - 283: - 'Persian cat', - 284: - 'Siamese cat, Siamese', - 285: - 'Egyptian cat', - 286: - 'cougar, puma, catamount, mountain lion, painter, panther, Felis concolor', - 287: - 'lynx, catamount', - 288: - 'leopard, Panthera pardus', - 289: - 'snow leopard, ounce, Panthera uncia', - 290: - 'jaguar, panther, Panthera onca, Felis onca', - 291: - 'lion, king of beasts, Panthera leo', - 292: - 'tiger, Panthera tigris', - 293: - 'cheetah, chetah, Acinonyx jubatus', - 294: - 'brown bear, bruin, Ursus arctos', - 295: - 'American black bear, black bear, Ursus americanus, Euarctos americanus', - 296: - 'ice bear, polar bear, Ursus Maritimus, Thalarctos maritimus', - 297: - 'sloth bear, Melursus ursinus, Ursus ursinus', - 298: - 'mongoose', - 299: - 'meerkat, mierkat', - 300: - 'tiger beetle', - 301: - 'ladybug, ladybeetle, lady beetle, ladybird, ladybird beetle', - 302: - 'ground beetle, carabid beetle', - 303: - 'long-horned beetle, longicorn, longicorn beetle', - 304: - 'leaf beetle, chrysomelid', - 305: - 'dung beetle', - 306: - 'rhinoceros beetle', - 307: - 'weevil', - 308: - 'fly', - 309: - 'bee', - 310: - 'ant, emmet, pismire', - 311: - 'grasshopper, hopper', - 312: - 'cricket', - 313: - 'walking stick, walkingstick, stick insect', - 314: - 'cockroach, roach', - 315: - 'mantis, mantid', - 316: - 'cicada, cicala', - 317: - 'leafhopper', - 318: - 'lacewing, lacewing fly', - 319: - "dragonfly, darning needle, devil's darning needle, sewing needle, " - 'snake feeder, snake doctor, mosquito hawk, skeeter hawk', - 320: - 'damselfly', - 321: - 'admiral', - 322: - 'ringlet, ringlet butterfly', - 323: - 'monarch, monarch butterfly, milkweed butterfly, Danaus plexippus', - 324: - 'cabbage butterfly', - 325: - 'sulphur butterfly, sulfur butterfly', - 326: - 'lycaenid, lycaenid butterfly', - 327: - 'starfish, sea star', - 328: - 'sea urchin', - 329: - 'sea cucumber, holothurian', - 330: - 'wood rabbit, cottontail, cottontail rabbit', - 331: - 'hare', - 332: - 'Angora, Angora rabbit', - 333: - 'hamster', - 334: - 'porcupine, hedgehog', - 335: - 'fox squirrel, eastern fox squirrel, Sciurus niger', - 336: - 'marmot', - 337: - 'beaver', - 338: - 'guinea pig, Cavia cobaya', - 339: - 'sorrel', - 340: - 'zebra', - 341: - 'hog, pig, grunter, squealer, Sus scrofa', - 342: - 'wild boar, boar, Sus scrofa', - 343: - 'warthog', - 344: - 'hippopotamus, hippo, river horse, Hippopotamus amphibius', - 345: - 'ox', - 346: - 'water buffalo, water ox, Asiatic buffalo, Bubalus bubalis', - 347: - 'bison', - 348: - 'ram, tup', - 349: - 'bighorn, bighorn sheep, cimarron, Rocky Mountain bighorn, Rocky ' - 'Mountain sheep, Ovis canadensis', - 350: - 'ibex, Capra ibex', - 351: - 'hartebeest', - 352: - 'impala, Aepyceros melampus', - 353: - 'gazelle', - 354: - 'Arabian camel, dromedary, Camelus dromedarius', - 355: - 'llama', - 356: - 'weasel', - 357: - 'mink', - 358: - 'polecat, fitch, foulmart, foumart, Mustela putorius', - 359: - 'black-footed ferret, ferret, Mustela nigripes', - 360: - 'otter', - 361: - 'skunk, polecat, wood pussy', - 362: - 'badger', - 363: - 'armadillo', - 364: - 'three-toed sloth, ai, Bradypus tridactylus', - 365: - 'orangutan, orang, orangutang, Pongo pygmaeus', - 366: - 'gorilla, Gorilla gorilla', - 367: - 'chimpanzee, chimp, Pan troglodytes', - 368: - 'gibbon, Hylobates lar', - 369: - 'siamang, Hylobates syndactylus, Symphalangus syndactylus', - 370: - 'guenon, guenon monkey', - 371: - 'patas, hussar monkey, Erythrocebus patas', - 372: - 'baboon', - 373: - 'macaque', - 374: - 'langur', - 375: - 'colobus, colobus monkey', - 376: - 'proboscis monkey, Nasalis larvatus', - 377: - 'marmoset', - 378: - 'capuchin, ringtail, Cebus capucinus', - 379: - 'howler monkey, howler', - 380: - 'titi, titi monkey', - 381: - 'spider monkey, Ateles geoffroyi', - 382: - 'squirrel monkey, Saimiri sciureus', - 383: - 'Madagascar cat, ring-tailed lemur, Lemur catta', - 384: - 'indri, indris, Indri indri, Indri brevicaudatus', - 385: - 'Indian elephant, Elephas maximus', - 386: - 'African elephant, Loxodonta africana', - 387: - 'lesser panda, red panda, panda, bear cat, cat bear, Ailurus fulgens', - 388: - 'giant panda, panda, panda bear, coon bear, Ailuropoda melanoleuca', - 389: - 'barracouta, snoek', - 390: - 'eel', - 391: - 'coho, cohoe, coho salmon, blue jack, silver salmon, Oncorhynchus kisutch', - 392: - 'rock beauty, Holocanthus tricolor', - 393: - 'anemone fish', - 394: - 'sturgeon', - 395: - 'gar, garfish, garpike, billfish, Lepisosteus osseus', - 396: - 'lionfish', - 397: - 'puffer, pufferfish, blowfish, globefish', - 398: - 'abacus', - 399: - 'abaya', - 400: - "academic gown, academic robe, judge's robe", - 401: - 'accordion, piano accordion, squeeze box', - 402: - 'acoustic guitar', - 403: - 'aircraft carrier, carrier, flattop, attack aircraft carrier', - 404: - 'airliner', - 405: - 'airship, dirigible', - 406: - 'altar', - 407: - 'ambulance', - 408: - 'amphibian, amphibious vehicle', - 409: - 'analog clock', - 410: - 'apiary, bee house', - 411: - 'apron', - 412: - 'ashcan, trash can, garbage can, wastebin, ash bin, ash-bin, ashbin, ' - 'dustbin, trash barrel, trash bin', - 413: - 'assault rifle, assault gun', - 414: - 'backpack, back pack, knapsack, packsack, rucksack, haversack', - 415: - 'bakery, bakeshop, bakehouse', - 416: - 'balance beam, beam', - 417: - 'balloon', - 418: - 'ballpoint, ballpoint pen, ballpen, Biro', - 419: - 'Band Aid', - 420: - 'banjo', - 421: - 'bannister, banister, balustrade, balusters, handrail', - 422: - 'barbell', - 423: - 'barber chair', - 424: - 'barbershop', - 425: - 'barn', - 426: - 'barometer', - 427: - 'barrel, cask', - 428: - 'barrow, garden cart, lawn cart, wheelbarrow', - 429: - 'baseball', - 430: - 'basketball', - 431: - 'bassinet', - 432: - 'bassoon', - 433: - 'bathing cap, swimming cap', - 434: - 'bath towel', - 435: - 'bathtub, bathing tub, bath, tub', - 436: - 'beach wagon, station wagon, wagon, estate car, beach waggon, station ' - 'waggon, waggon', - 437: - 'beacon, lighthouse, beacon light, pharos', - 438: - 'beaker', - 439: - 'bearskin, busby, shako', - 440: - 'beer bottle', - 441: - 'beer glass', - 442: - 'bell cote, bell cot', - 443: - 'bib', - 444: - 'bicycle-built-for-two, tandem bicycle, tandem', - 445: - 'bikini, two-piece', - 446: - 'binder, ring-binder', - 447: - 'binoculars, field glasses, opera glasses', - 448: - 'birdhouse', - 449: - 'boathouse', - 450: - 'bobsled, bobsleigh, bob', - 451: - 'bolo tie, bolo, bola tie, bola', - 452: - 'bonnet, poke bonnet', - 453: - 'bookcase', - 454: - 'bookshop, bookstore, bookstall', - 455: - 'bottlecap', - 456: - 'bow', - 457: - 'bow tie, bow-tie, bowtie', - 458: - 'brass, memorial tablet, plaque', - 459: - 'brassiere, bra, bandeau', - 460: - 'breakwater, groin, groyne, mole, bulwark, seawall, jetty', - 461: - 'breastplate, aegis, egis', - 462: - 'broom', - 463: - 'bucket, pail', - 464: - 'buckle', - 465: - 'bulletproof vest', - 466: - 'bullet train, bullet', - 467: - 'butcher shop, meat market', - 468: - 'cab, hack, taxi, taxicab', - 469: - 'caldron, cauldron', - 470: - 'candle, taper, wax light', - 471: - 'cannon', - 472: - 'canoe', - 473: - 'can opener, tin opener', - 474: - 'cardigan', - 475: - 'car mirror', - 476: - 'carousel, carrousel, merry-go-round, roundabout, whirligig', - 477: - "carpenter's kit, tool kit", - 478: - 'carton', - 479: - 'car wheel', - 480: - 'cash machine, cash dispenser, automated teller machine, automatic ' - 'teller machine, automated teller, automatic teller, ATM', - 481: - 'cassette', - 482: - 'cassette player', - 483: - 'castle', - 484: - 'catamaran', - 485: - 'CD player', - 486: - 'cello, violoncello', - 487: - 'cellular telephone, cellular phone, cellphone, cell, mobile phone', - 488: - 'chain', - 489: - 'chainlink fence', - 490: - 'chain mail, ring mail, mail, chain armor, chain armour, ring armor, ' - 'ring armour', - 491: - 'chain saw, chainsaw', - 492: - 'chest', - 493: - 'chiffonier, commode', - 494: - 'chime, bell, gong', - 495: - 'china cabinet, china closet', - 496: - 'Christmas stocking', - 497: - 'church, church building', - 498: - 'cinema, movie theater, movie theatre, movie house, picture palace', - 499: - 'cleaver, meat cleaver, chopper', - 500: - 'cliff dwelling', - 501: - 'cloak', - 502: - 'clog, geta, patten, sabot', - 503: - 'cocktail shaker', - 504: - 'coffee mug', - 505: - 'coffeepot', - 506: - 'coil, spiral, volute, whorl, helix', - 507: - 'combination lock', - 508: - 'computer keyboard, keypad', - 509: - 'confectionery, confectionary, candy store', - 510: - 'container ship, containership, container vessel', - 511: - 'convertible', - 512: - 'corkscrew, bottle screw', - 513: - 'cornet, horn, trumpet, trump', - 514: - 'cowboy boot', - 515: - 'cowboy hat, ten-gallon hat', - 516: - 'cradle', - 517: - 'crane', - 518: - 'crash helmet', - 519: - 'crate', - 520: - 'crib, cot', - 521: - 'Crock Pot', - 522: - 'croquet ball', - 523: - 'crutch', - 524: - 'cuirass', - 525: - 'dam, dike, dyke', - 526: - 'desk', - 527: - 'desktop computer', - 528: - 'dial telephone, dial phone', - 529: - 'diaper, nappy, napkin', - 530: - 'digital clock', - 531: - 'digital watch', - 532: - 'dining table, board', - 533: - 'dishrag, dishcloth', - 534: - 'dishwasher, dish washer, dishwashing machine', - 535: - 'disk brake, disc brake', - 536: - 'dock, dockage, docking facility', - 537: - 'dogsled, dog sled, dog sleigh', - 538: - 'dome', - 539: - 'doormat, welcome mat', - 540: - 'drilling platform, offshore rig', - 541: - 'drum, membranophone, tympan', - 542: - 'drumstick', - 543: - 'dumbbell', - 544: - 'Dutch oven', - 545: - 'electric fan, blower', - 546: - 'electric guitar', - 547: - 'electric locomotive', - 548: - 'entertainment center', - 549: - 'envelope', - 550: - 'espresso maker', - 551: - 'face powder', - 552: - 'feather boa, boa', - 553: - 'file, file cabinet, filing cabinet', - 554: - 'fireboat', - 555: - 'fire engine, fire truck', - 556: - 'fire screen, fireguard', - 557: - 'flagpole, flagstaff', - 558: - 'flute, transverse flute', - 559: - 'folding chair', - 560: - 'football helmet', - 561: - 'forklift', - 562: - 'fountain', - 563: - 'fountain pen', - 564: - 'four-poster', - 565: - 'freight car', - 566: - 'French horn, horn', - 567: - 'frying pan, frypan, skillet', - 568: - 'fur coat', - 569: - 'garbage truck, dustcart', - 570: - 'gasmask, respirator, gas helmet', - 571: - 'gas pump, gasoline pump, petrol pump, island dispenser', - 572: - 'goblet', - 573: - 'go-kart', - 574: - 'golf ball', - 575: - 'golfcart, golf cart', - 576: - 'gondola', - 577: - 'gong, tam-tam', - 578: - 'gown', - 579: - 'grand piano, grand', - 580: - 'greenhouse, nursery, glasshouse', - 581: - 'grille, radiator grille', - 582: - 'grocery store, grocery, food market, market', - 583: - 'guillotine', - 584: - 'hair slide', - 585: - 'hair spray', - 586: - 'half track', - 587: - 'hammer', - 588: - 'hamper', - 589: - 'hand blower, blow dryer, blow drier, hair dryer, hair drier', - 590: - 'hand-held computer, hand-held microcomputer', - 591: - 'handkerchief, hankie, hanky, hankey', - 592: - 'hard disc, hard disk, fixed disk', - 593: - 'harmonica, mouth organ, harp, mouth harp', - 594: - 'harp', - 595: - 'harvester, reaper', - 596: - 'hatchet', - 597: - 'holster', - 598: - 'home theater, home theatre', - 599: - 'honeycomb', - 600: - 'hook, claw', - 601: - 'hoopskirt, crinoline', - 602: - 'horizontal bar, high bar', - 603: - 'horse cart, horse-cart', - 604: - 'hourglass', - 605: - 'iPod', - 606: - 'iron, smoothing iron', - 607: - "jack-o'-lantern", - 608: - 'jean, blue jean, denim', - 609: - 'jeep, landrover', - 610: - 'jersey, T-shirt, tee shirt', - 611: - 'jigsaw puzzle', - 612: - 'jinrikisha, ricksha, rickshaw', - 613: - 'joystick', - 614: - 'kimono', - 615: - 'knee pad', - 616: - 'knot', - 617: - 'lab coat, laboratory coat', - 618: - 'ladle', - 619: - 'lampshade, lamp shade', - 620: - 'laptop, laptop computer', - 621: - 'lawn mower, mower', - 622: - 'lens cap, lens cover', - 623: - 'letter opener, paper knife, paperknife', - 624: - 'library', - 625: - 'lifeboat', - 626: - 'lighter, light, igniter, ignitor', - 627: - 'limousine, limo', - 628: - 'liner, ocean liner', - 629: - 'lipstick, lip rouge', - 630: - 'Loafer', - 631: - 'lotion', - 632: - 'loudspeaker, speaker, speaker unit, loudspeaker system, speaker system', - 633: - "loupe, jeweler's loupe", - 634: - 'lumbermill, sawmill', - 635: - 'magnetic compass', - 636: - 'mailbag, postbag', - 637: - 'mailbox, letter box', - 638: - 'maillot', - 639: - 'maillot, tank suit', - 640: - 'manhole cover', - 641: - 'maraca', - 642: - 'marimba, xylophone', - 643: - 'mask', - 644: - 'matchstick', - 645: - 'maypole', - 646: - 'maze, labyrinth', - 647: - 'measuring cup', - 648: - 'medicine chest, medicine cabinet', - 649: - 'megalith, megalithic structure', - 650: - 'microphone, mike', - 651: - 'microwave, microwave oven', - 652: - 'military uniform', - 653: - 'milk can', - 654: - 'minibus', - 655: - 'miniskirt, mini', - 656: - 'minivan', - 657: - 'missile', - 658: - 'mitten', - 659: - 'mixing bowl', - 660: - 'mobile home, manufactured home', - 661: - 'Model T', - 662: - 'modem', - 663: - 'monastery', - 664: - 'monitor', - 665: - 'moped', - 666: - 'mortar', - 667: - 'mortarboard', - 668: - 'mosque', - 669: - 'mosquito net', - 670: - 'motor scooter, scooter', - 671: - 'mountain bike, all-terrain bike, off-roader', - 672: - 'mountain tent', - 673: - 'mouse, computer mouse', - 674: - 'mousetrap', - 675: - 'moving van', - 676: - 'muzzle', - 677: - 'nail', - 678: - 'neck brace', - 679: - 'necklace', - 680: - 'nipple', - 681: - 'notebook, notebook computer', - 682: - 'obelisk', - 683: - 'oboe, hautboy, hautbois', - 684: - 'ocarina, sweet potato', - 685: - 'odometer, hodometer, mileometer, milometer', - 686: - 'oil filter', - 687: - 'organ, pipe organ', - 688: - 'oscilloscope, scope, cathode-ray oscilloscope, CRO', - 689: - 'overskirt', - 690: - 'oxcart', - 691: - 'oxygen mask', - 692: - 'packet', - 693: - 'paddle, boat paddle', - 694: - 'paddlewheel, paddle wheel', - 695: - 'padlock', - 696: - 'paintbrush', - 697: - "pajama, pyjama, pj's, jammies", - 698: - 'palace', - 699: - 'panpipe, pandean pipe, syrinx', - 700: - 'paper towel', - 701: - 'parachute, chute', - 702: - 'parallel bars, bars', - 703: - 'park bench', - 704: - 'parking meter', - 705: - 'passenger car, coach, carriage', - 706: - 'patio, terrace', - 707: - 'pay-phone, pay-station', - 708: - 'pedestal, plinth, footstall', - 709: - 'pencil box, pencil case', - 710: - 'pencil sharpener', - 711: - 'perfume, essence', - 712: - 'Petri dish', - 713: - 'photocopier', - 714: - 'pick, plectrum, plectron', - 715: - 'pickelhaube', - 716: - 'picket fence, paling', - 717: - 'pickup, pickup truck', - 718: - 'pier', - 719: - 'piggy bank, penny bank', - 720: - 'pill bottle', - 721: - 'pillow', - 722: - 'ping-pong ball', - 723: - 'pinwheel', - 724: - 'pirate, pirate ship', - 725: - 'pitcher, ewer', - 726: - "plane, carpenter's plane, woodworking plane", - 727: - 'planetarium', - 728: - 'plastic bag', - 729: - 'plate rack', - 730: - 'plow, plough', - 731: - "plunger, plumber's helper", - 732: - 'Polaroid camera, Polaroid Land camera', - 733: - 'pole', - 734: - 'police van, police wagon, paddy wagon, patrol wagon, wagon, black Maria', - 735: - 'poncho', - 736: - 'pool table, billiard table, snooker table', - 737: - 'pop bottle, soda bottle', - 738: - 'pot, flowerpot', - 739: - "potter's wheel", - 740: - 'power drill', - 741: - 'prayer rug, prayer mat', - 742: - 'printer', - 743: - 'prison, prison house', - 744: - 'projectile, missile', - 745: - 'projector', - 746: - 'puck, hockey puck', - 747: - 'punching bag, punch bag, punching ball, punchball', - 748: - 'purse', - 749: - 'quill, quill pen', - 750: - 'quilt, comforter, comfort, puff', - 751: - 'racer, race car, racing car', - 752: - 'racket, racquet', - 753: - 'radiator', - 754: - 'radio, wireless', - 755: - 'radio telescope, radio reflector', - 756: - 'rain barrel', - 757: - 'recreational vehicle, RV, R.V.', - 758: - 'reel', - 759: - 'reflex camera', - 760: - 'refrigerator, icebox', - 761: - 'remote control, remote', - 762: - 'restaurant, eating house, eating place, eatery', - 763: - 'revolver, six-gun, six-shooter', - 764: - 'rifle', - 765: - 'rocking chair, rocker', - 766: - 'rotisserie', - 767: - 'rubber eraser, rubber, pencil eraser', - 768: - 'rugby ball', - 769: - 'rule, ruler', - 770: - 'running shoe', - 771: - 'safe', - 772: - 'safety pin', - 773: - 'saltshaker, salt shaker', - 774: - 'sandal', - 775: - 'sarong', - 776: - 'sax, saxophone', - 777: - 'scabbard', - 778: - 'scale, weighing machine', - 779: - 'school bus', - 780: - 'schooner', - 781: - 'scoreboard', - 782: - 'screen, CRT screen', - 783: - 'screw', - 784: - 'screwdriver', - 785: - 'seat belt, seatbelt', - 786: - 'sewing machine', - 787: - 'shield, buckler', - 788: - 'shoe shop, shoe-shop, shoe store', - 789: - 'shoji', - 790: - 'shopping basket', - 791: - 'shopping cart', - 792: - 'shovel', - 793: - 'shower cap', - 794: - 'shower curtain', - 795: - 'ski', - 796: - 'ski mask', - 797: - 'sleeping bag', - 798: - 'slide rule, slipstick', - 799: - 'sliding door', - 800: - 'slot, one-armed bandit', - 801: - 'snorkel', - 802: - 'snowmobile', - 803: - 'snowplow, snowplough', - 804: - 'soap dispenser', - 805: - 'soccer ball', - 806: - 'sock', - 807: - 'solar dish, solar collector, solar furnace', - 808: - 'sombrero', - 809: - 'soup bowl', - 810: - 'space bar', - 811: - 'space heater', - 812: - 'space shuttle', - 813: - 'spatula', - 814: - 'speedboat', - 815: - "spider web, spider's web", - 816: - 'spindle', - 817: - 'sports car, sport car', - 818: - 'spotlight, spot', - 819: - 'stage', - 820: - 'steam locomotive', - 821: - 'steel arch bridge', - 822: - 'steel drum', - 823: - 'stethoscope', - 824: - 'stole', - 825: - 'stone wall', - 826: - 'stopwatch, stop watch', - 827: - 'stove', - 828: - 'strainer', - 829: - 'streetcar, tram, tramcar, trolley, trolley car', - 830: - 'stretcher', - 831: - 'studio couch, day bed', - 832: - 'stupa, tope', - 833: - 'submarine, pigboat, sub, U-boat', - 834: - 'suit, suit of clothes', - 835: - 'sundial', - 836: - 'sunglass', - 837: - 'sunglasses, dark glasses, shades', - 838: - 'sunscreen, sunblock, sun blocker', - 839: - 'suspension bridge', - 840: - 'swab, swob, mop', - 841: - 'sweatshirt', - 842: - 'swimming trunks, bathing trunks', - 843: - 'swing', - 844: - 'switch, electric switch, electrical switch', - 845: - 'syringe', - 846: - 'table lamp', - 847: - 'tank, army tank, armored combat vehicle, armoured combat vehicle', - 848: - 'tape player', - 849: - 'teapot', - 850: - 'teddy, teddy bear', - 851: - 'television, television system', - 852: - 'tennis ball', - 853: - 'thatch, thatched roof', - 854: - 'theater curtain, theatre curtain', - 855: - 'thimble', - 856: - 'thresher, thrasher, threshing machine', - 857: - 'throne', - 858: - 'tile roof', - 859: - 'toaster', - 860: - 'tobacco shop, tobacconist shop, tobacconist', - 861: - 'toilet seat', - 862: - 'torch', - 863: - 'totem pole', - 864: - 'tow truck, tow car, wrecker', - 865: - 'toyshop', - 866: - 'tractor', - 867: - 'trailer truck, tractor trailer, trucking rig, rig, articulated lorry,' - ' semi', - 868: - 'tray', - 869: - 'trench coat', - 870: - 'tricycle, trike, velocipede', - 871: - 'trimaran', - 872: - 'tripod', - 873: - 'triumphal arch', - 874: - 'trolleybus, trolley coach, trackless trolley', - 875: - 'trombone', - 876: - 'tub, vat', - 877: - 'turnstile', - 878: - 'typewriter keyboard', - 879: - 'umbrella', - 880: - 'unicycle, monocycle', - 881: - 'upright, upright piano', - 882: - 'vacuum, vacuum cleaner', - 883: - 'vase', - 884: - 'vault', - 885: - 'velvet', - 886: - 'vending machine', - 887: - 'vestment', - 888: - 'viaduct', - 889: - 'violin, fiddle', - 890: - 'volleyball', - 891: - 'waffle iron', - 892: - 'wall clock', - 893: - 'wallet, billfold, notecase, pocketbook', - 894: - 'wardrobe, closet, press', - 895: - 'warplane, military plane', - 896: - 'washbasin, handbasin, washbowl, lavabo, wash-hand basin', - 897: - 'washer, automatic washer, washing machine', - 898: - 'water bottle', - 899: - 'water jug', - 900: - 'water tower', - 901: - 'whiskey jug', - 902: - 'whistle', - 903: - 'wig', - 904: - 'window screen', - 905: - 'window shade', - 906: - 'Windsor tie', - 907: - 'wine bottle', - 908: - 'wing', - 909: - 'wok', - 910: - 'wooden spoon', - 911: - 'wool, woolen, woollen', - 912: - 'worm fence, snake fence, snake-rail fence, Virginia fence', - 913: - 'wreck', - 914: - 'yawl', - 915: - 'yurt', - 916: - 'web site, website, internet site, site', - 917: - 'comic book', - 918: - 'crossword puzzle, crossword', - 919: - 'street sign', - 920: - 'traffic light, traffic signal, stoplight', - 921: - 'book jacket, dust cover, dust jacket, dust wrapper', - 922: - 'menu', - 923: - 'plate', - 924: - 'guacamole', - 925: - 'consomme', - 926: - 'hot pot, hotpot', - 927: - 'trifle', - 928: - 'ice cream, icecream', - 929: - 'ice lolly, lolly, lollipop, popsicle', - 930: - 'French loaf', - 931: - 'bagel, beigel', - 932: - 'pretzel', - 933: - 'cheeseburger', - 934: - 'hotdog, hot dog, red hot', - 935: - 'mashed potato', - 936: - 'head cabbage', - 937: - 'broccoli', - 938: - 'cauliflower', - 939: - 'zucchini, courgette', - 940: - 'spaghetti squash', - 941: - 'acorn squash', - 942: - 'butternut squash', - 943: - 'cucumber, cuke', - 944: - 'artichoke, globe artichoke', - 945: - 'bell pepper', - 946: - 'cardoon', - 947: - 'mushroom', - 948: - 'Granny Smith', - 949: - 'strawberry', - 950: - 'orange', - 951: - 'lemon', - 952: - 'fig', - 953: - 'pineapple, ananas', - 954: - 'banana', - 955: - 'jackfruit, jak, jack', - 956: - 'custard apple', - 957: - 'pomegranate', - 958: - 'hay', - 959: - 'carbonara', - 960: - 'chocolate sauce, chocolate syrup', - 961: - 'dough', - 962: - 'meat loaf, meatloaf', - 963: - 'pizza, pizza pie', - 964: - 'potpie', - 965: - 'burrito', - 966: - 'red wine', - 967: - 'espresso', - 968: - 'cup', - 969: - 'eggnog', - 970: - 'alp', - 971: - 'bubble', - 972: - 'cliff, drop, drop-off', - 973: - 'coral reef', - 974: - 'geyser', - 975: - 'lakeside, lakeshore', - 976: - 'promontory, headland, head, foreland', - 977: - 'sandbar, sand bar', - 978: - 'seashore, coast, seacoast, sea-coast', - 979: - 'valley, vale', - 980: - 'volcano', - 981: - 'ballplayer, baseball player', - 982: - 'groom, bridegroom', - 983: - 'scuba diver', - 984: - 'rapeseed', - 985: - 'daisy', - 986: - "yellow lady's slipper, yellow lady-slipper, Cypripedium calceolus, " - 'Cypripedium parviflorum', - 987: - 'corn', - 988: - 'acorn', - 989: - 'hip, rose hip, rosehip', - 990: - 'buckeye, horse chestnut, conker', - 991: - 'coral fungus', - 992: - 'agaric', - 993: - 'gyromitra', - 994: - 'stinkhorn, carrion fungus', - 995: - 'earthstar', - 996: - 'hen-of-the-woods, hen of the woods, Polyporus frondosus, Grifola ' - 'frondosa', - 997: - 'bolete', - 998: - 'ear, spike, capitulum', - 999: - 'toilet tissue, toilet paper, bathroom tissue' -} diff --git a/lit_nlp/examples/models/mobilenet.py b/lit_nlp/examples/models/mobilenet.py deleted file mode 100644 index a9fc7105..00000000 --- a/lit_nlp/examples/models/mobilenet.py +++ /dev/null @@ -1,78 +0,0 @@ -"""MobileNet model trained on ImageNet dataset.""" - -from lit_nlp.api import model -from lit_nlp.api import types as lit_types -from lit_nlp.examples.models import imagenet_labels -from lit_nlp.lib import image_utils -import numpy as np -import tensorflow as tf - -# Internal shape of the model input (h, w, c). -IMAGE_SHAPE = (224, 224, 3) - - -class MobileNet(model.BatchedModel): - """MobileNet model trained on ImageNet dataset.""" - - def __init__(self, name='mobilenet_v2') -> None: - # Initialize imagenet labels. - self.labels = [''] * len(imagenet_labels.IMAGENET_2012_LABELS) - self.label_to_idx = {} - for i, l in imagenet_labels.IMAGENET_2012_LABELS.items(): - l = l.split(',', 1)[0] - self.labels[i] = l - self.label_to_idx[l] = i - - if name == 'mobilenet_v2': - self.model = tf.keras.applications.mobilenet_v2.MobileNetV2() - elif name == 'mobilenet': - self.model = tf.keras.applications.mobilenet.MobileNet() - - def predict_minibatch( - self, input_batch: list[lit_types.JsonDict] - ) -> list[lit_types.JsonDict]: - output = [] - for example in input_batch: - # Convert input to the model acceptable format. - img_data = example['image'] - if isinstance(img_data, str): - img_data = image_utils.convert_image_str_to_array(img_data, IMAGE_SHAPE) - # Get predictions. - x = img_data[np.newaxis, ...] - x = tf.convert_to_tensor(x) - preds = self.model(x).numpy()[0] - # Determine the gradient target. - if (grad_target := example.get('label')) is None: - grad_target_idx = np.argmax(preds) - else: - grad_target_idx = self.label_to_idx[grad_target] - # Calculate gradients. - with tf.GradientTape() as tape: - tape.watch(x) - y = self.model(x)[0, grad_target_idx] - grads = tape.gradient(y, x).numpy()[0] - # Add results to the output. - output.append({ - 'preds': preds, - 'grads': grads, - }) - - return output - - def input_spec(self): - return { - 'image': lit_types.ImageBytes(), - # If `grad_target` is not specified then the label with the highest - # predicted score is used as the gradient target. - 'label': lit_types.CategoryLabel(vocab=self.labels, required=False), - } - - def output_spec(self): - return { - 'preds': lit_types.MulticlassPreds( - vocab=self.labels, autosort=True, parent='label' - ), - 'grads': lit_types.ImageGradients( - align='image', grad_target_field_key='label' - ), - } diff --git a/lit_nlp/examples/models/mobilenet_test.py b/lit_nlp/examples/models/mobilenet_test.py deleted file mode 100644 index 6df157cc..00000000 --- a/lit_nlp/examples/models/mobilenet_test.py +++ /dev/null @@ -1,100 +0,0 @@ -from absl.testing import absltest -from absl.testing import parameterized -from lit_nlp.api import dataset as lit_dataset -from lit_nlp.api import types -from lit_nlp.examples.models import mobilenet -from lit_nlp.lib import image_utils -import numpy as np -from PIL import Image as PILImage - - -class MobileNetTest(parameterized.TestCase): - - @parameterized.named_parameters( - dict( - testcase_name='compatible_spec_model_v2', - model_name='mobilenet_v2', - dataset_spec={'image': types.ImageBytes()}, - expected=True, - ), - dict( - testcase_name='empty_spec_model_v2', - model_name='mobilenet_v2', - dataset_spec={}, - expected=False, - ), - dict( - testcase_name='no_images_spec_model_v2', - model_name='mobilenet_v2', - dataset_spec={'text': types.TextSegment()}, - expected=False, - ), - dict( - testcase_name='wrong_keys_spec_model_v2', - model_name='mobilenet_v2', - dataset_spec={'wrong_image_key': types.ImageBytes()}, - expected=False, - ), - dict( - testcase_name='compatible_spec_model_v1', - model_name='mobilenet', - dataset_spec={'image': types.ImageBytes()}, - expected=True, - ), - dict( - testcase_name='empty_spec_model_v1', - model_name='mobilenet', - dataset_spec={}, - expected=False, - ), - dict( - testcase_name='no_images_spec_model_v1', - model_name='mobilenet', - dataset_spec={'text': types.TextSegment()}, - expected=False, - ), - dict( - testcase_name='wrong_keys_spec_model_v1', - model_name='mobilenet', - dataset_spec={'wrong_image_key': types.ImageBytes()}, - expected=False, - ), - ) - def test_compatibility( - self, model_name: str, dataset_spec: types.Spec, expected: bool - ): - dataset = lit_dataset.Dataset(spec=dataset_spec) - model = mobilenet.MobileNet(model_name) - self.assertEqual(model.is_compatible_with_dataset(dataset), expected) - - @parameterized.named_parameters( - dict( - testcase_name='model_v1', - model_name='mobilenet', - ), - dict( - testcase_name='model_v2', - model_name='mobilenet_v2', - ), - ) - def test_model(self, model_name: str): - # Create an input with base64 encoded image. - input_1 = { - 'image': np.zeros(shape=(mobilenet.IMAGE_SHAPE), dtype=np.float32) - } - # Create an input with image data in Numpy array. - pil_image = PILImage.new(mode='RGB', size=(300, 200)) - input_2 = {'image': image_utils.convert_pil_to_image_str(pil_image)} - model = mobilenet.MobileNet(model_name) - model_out = model.predict([input_1, input_2]) - model_out = list(model_out) - # Check first output. - self.assertIn('preds', model_out[0]) - self.assertIn('grads', model_out[0]) - # Check second output. - self.assertIn('preds', model_out[1]) - self.assertIn('grads', model_out[1]) - - -if __name__ == '__main__': - absltest.main() diff --git a/website/sphinx_src/components.md b/website/sphinx_src/components.md index 19c4dde0..3af3a0eb 100644 --- a/website/sphinx_src/components.md +++ b/website/sphinx_src/components.md @@ -147,8 +147,6 @@ LIT supports multi-label tasks, when a model can label a single example with more than one label. Multi-label classification is implemented with the `SparseMultilabelPreds` and `SparseMultilabel` types. -* For a basic example on an image labeling task, see - [examples/image_demo.py](https://github.com/PAIR-code/lit/blob/main/lit_nlp/examples/image_demo.py). * Models should define a `SparseMultilabelPreds` field in their output spec with the`vocab=` attribute as the set of class labels, and for each example should return a list of class score tuples. Each tuple contains two @@ -246,11 +244,8 @@ NOTE: We may transition images away from encoded strings, moving to individual pixel color values. We will ensure we don't break existing checked-in code with such a change. -* See [examples/datasets/open_images.py](https://github.com/PAIR-code/lit/blob/main/lit_nlp/examples/datasets/open_images.py) for a - dataset containing images, including converting images to base64 encoded - strings. -* For a demo of an image classifier, see - [examples/image_demo.py](https://github.com/PAIR-code/lit/blob/main/lit_nlp/examples/image_demo.py). +* See [examples/dalle/demo.py](https://github.com/PAIR-code/lit/blob/main/lit_nlp/examples/dalle/demo.py) for a demo on + image generation and how LIT handles image bytes. ## Token-based Salience @@ -488,8 +483,6 @@ using either KerasNLP or Transformers. * Transformers model wrappers: [`pretrained_lms.py`](https://github.com/PAIR-code/lit/blob/main/lit_nlp/examples/models/pretrained_lms.py) - - ## Salience Clustering LIT includes a basic implementation of the salience clustering method from diff --git a/website/sphinx_src/demos.md b/website/sphinx_src/demos.md index dfc77b50..c919790d 100644 --- a/website/sphinx_src/demos.md +++ b/website/sphinx_src/demos.md @@ -169,13 +169,3 @@ https://pair-code.github.io/lit/tutorials/coref * Use binary classifier threshold setters to find best thresholds for slices of examples to achieve specific fairness constraints, such as demographic parity. - -### Image Classification with MobileNet - -**Hosted instance:** https://pair-code.github.io/lit/demos/images.html \ -**Code:** [examples/image_demo.py](https://github.com/PAIR-code/lit/blob/main/lit_nlp/examples/image_demo.py) - -* Classification on ImageNet labels using a MobileNet model. -* Showing using of LIT on image data. -* Explore results of multiple gradient-based image saliency techniques in the - Salience Maps module. diff --git a/website/sphinx_src/faq.md b/website/sphinx_src/faq.md index de6a5b57..9ff5b3d5 100644 --- a/website/sphinx_src/faq.md +++ b/website/sphinx_src/faq.md @@ -17,8 +17,8 @@ works with any modern ML framework. For more information, see In addition to text, LIT has good support for different modalities, including images and tabular data. For examples, see: -* [Image demo](https://github.com/PAIR-code/lit/blob/main/lit_nlp/examples/image_demo.py) - - image classification, using a Mobilenet model. +* [DALL·E demo](google3/third_party/py/lit_nlp/examples/dalle/) - image + generation, using DALL·E Mini model. * [Tabular demo](https://github.com/PAIR-code/lit/blob/main/lit_nlp/examples/penguin_demo.py) - multi-class classification on tabular (numeric and categorical string) data, using the @@ -99,8 +99,8 @@ manually entered in the web UI) are stored in server memory, and if `--data_dir` is specified, may be cached to disk. LIT has the ability to create or edit datapoints in the UI and then save them to -disk. If you do not want the tool to be able to write edited datapoints to -disk, then pass the `--demo_mode` runtime flag to the LIT server. +disk. If you do not want the tool to be able to write edited datapoints to disk, +then pass the `--demo_mode` runtime flag to the LIT server. ### I have proprietary data. Is LIT secure for my team to use?