From 666d91267810f5d57b831dd7df888ce4e4298798 Mon Sep 17 00:00:00 2001 From: Tingquan Gao Date: Thu, 17 Jun 2021 20:56:03 +0800 Subject: [PATCH] Update HubServing (#870) * Update HubServing * Fix the relative path * Update doc of HubServing --- deploy/hubserving/clas/module.py | 64 +- deploy/hubserving/clas/params.py | 48 +- deploy/hubserving/clas/test.py | 35 - deploy/hubserving/readme.md | 64 +- deploy/hubserving/test_hubserving.py | 82 +- deploy/python/predict_cls.py | 16 +- deploy/python/preprocess.py | 2 +- deploy/utils/__init__.py | 1 + deploy/utils/config.py | 4 +- deploy/utils/encode_decode.py | 31 + deploy/utils/imagenet1k_label_list.txt | 1000 ++++++++++++++++++++++++ 11 files changed, 1207 insertions(+), 140 deletions(-) delete mode 100644 deploy/hubserving/clas/test.py create mode 100644 deploy/utils/encode_decode.py create mode 100644 deploy/utils/imagenet1k_label_list.txt diff --git a/deploy/hubserving/clas/module.py b/deploy/hubserving/clas/module.py index 113ab14ad..dd8bf5df6 100644 --- a/deploy/hubserving/clas/module.py +++ b/deploy/hubserving/clas/module.py @@ -1,4 +1,4 @@ -# Copyright (c) 2020 PaddlePaddle Authors. All Rights Reserved. +# Copyright (c) 2021 PaddlePaddle Authors. All Rights Reserved. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -18,15 +18,14 @@ sys.path.insert(0, ".") import time -from paddlehub.utils.log import logger -from paddlehub.module.module import moduleinfo, serving -import cv2 import numpy as np import paddle.nn as nn +from paddlehub.module.module import moduleinfo, serving -from tools.infer.predict import Predictor -from tools.infer.utils import b64_to_np, postprocess -from deploy.hubserving.clas.params import read_params +from hubserving.clas.params import get_default_confg +from python.predict_cls import ClsPredictor +from utils import config +from utils.encode_decode import b64_to_np @moduleinfo( @@ -41,19 +40,24 @@ class ClasSystem(nn.Layer): """ initialize with the necessary elements """ - cfg = read_params() + self._config = self._load_config( + use_gpu=use_gpu, enable_mkldnn=enable_mkldnn) + self.cls_predictor = ClsPredictor(self._config) + + def _load_config(self, use_gpu=None, enable_mkldnn=None): + cfg = get_default_confg() + cfg = config.AttrDict(cfg) + config.create_attr_dict(cfg) if use_gpu is not None: - cfg.use_gpu = use_gpu + cfg.Global.use_gpu = use_gpu if enable_mkldnn is not None: - cfg.enable_mkldnn = enable_mkldnn - cfg.hubserving = True + cfg.Global.enable_mkldnn = enable_mkldnn cfg.enable_benchmark = False - self.args = cfg - if cfg.use_gpu: + if cfg.Global.use_gpu: try: _places = os.environ["CUDA_VISIBLE_DEVICES"] int(_places[0]) - print("Use GPU, GPU Memery:{}".format(cfg.gpu_mem)) + print("Use GPU, GPU Memery:{}".format(cfg.Global.gpu_mem)) print("CUDA_VISIBLE_DEVICES: ", _places) except: raise RuntimeError( @@ -62,24 +66,36 @@ class ClasSystem(nn.Layer): else: print("Use CPU") print("Enable MKL-DNN") if enable_mkldnn else None - self.predictor = Predictor(self.args) + return cfg - def predict(self, batch_input_data, top_k=1): - assert isinstance( - batch_input_data, - np.ndarray), "The input data is inconsistent with expectations." + def predict(self, inputs): + if not isinstance(inputs, list): + raise Exception( + "The input data is inconsistent with expectations.") starttime = time.time() - batch_outputs = self.predictor.predict(batch_input_data) + outputs = self.cls_predictor.predict(inputs) elapse = time.time() - starttime - batch_result_list = postprocess(batch_outputs, top_k) - return {"prediction": batch_result_list, "elapse": elapse} + preds = self.cls_predictor.postprocess(outputs) + return {"prediction": preds, "elapse": elapse} @serving - def serving_method(self, images, revert_params, **kwargs): + def serving_method(self, images, revert_params): """ Run as a service. """ input_data = b64_to_np(images, revert_params) - results = self.predict(batch_input_data=input_data, **kwargs) + results = self.predict(inputs=list(input_data)) return results + + +if __name__ == "__main__": + import cv2 + import paddlehub as hub + + module = hub.Module(name="clas_system") + img_path = "./hubserving/ILSVRC2012_val_00006666.JPEG" + img = cv2.imread(img_path)[:, :, ::-1] + img = cv2.resize(img, (224, 224)).transpose((2, 0, 1)) + res = module.predict([img.astype(np.float32)]) + print("The returned result of {}: {}".format(img_path, res)) diff --git a/deploy/hubserving/clas/params.py b/deploy/hubserving/clas/params.py index 83224f597..358d116d3 100644 --- a/deploy/hubserving/clas/params.py +++ b/deploy/hubserving/clas/params.py @@ -1,4 +1,4 @@ -# Copyright (c) 2020 PaddlePaddle Authors. All Rights Reserved. +# Copyright (c) 2021 PaddlePaddle Authors. All Rights Reserved. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -17,28 +17,24 @@ from __future__ import division from __future__ import print_function -class Config(object): - pass - - -def read_params(): - cfg = Config() - - cfg.model_file = "./inference/cls_infer.pdmodel" - cfg.params_file = "./inference/cls_infer.pdiparams" - cfg.batch_size = 1 - cfg.use_gpu = False - cfg.enable_mkldnn = False - cfg.ir_optim = True - cfg.gpu_mem = 8000 - cfg.use_fp16 = False - cfg.use_tensorrt = False - cfg.cpu_num_threads = 10 - cfg.enable_profile = False - - # params for preprocess - cfg.resize_short = 256 - cfg.resize = 224 - cfg.normalize = True - - return cfg +def get_default_confg(): + return { + 'Global': { + "inference_model_dir": "../inference/", + "batch_size": 1, + 'use_gpu': False, + 'use_fp16': False, + 'enable_mkldnn': False, + 'cpu_num_threads': 1, + 'use_tensorrt': False, + 'ir_optim': False, + "gpu_mem": 8000, + 'enable_profile': False, + "enable_benchmark": False + }, + 'PostProcess': { + 'name': 'Topk', + 'topk': 5, + 'class_id_map_file': './utils/imagenet1k_label_list.txt' + } + } \ No newline at end of file diff --git a/deploy/hubserving/clas/test.py b/deploy/hubserving/clas/test.py deleted file mode 100644 index 975260eeb..000000000 --- a/deploy/hubserving/clas/test.py +++ /dev/null @@ -1,35 +0,0 @@ -# Copyright (c) 2020 PaddlePaddle Authors. All Rights Reserved. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -import os -import sys -__dir__ = os.path.dirname(os.path.abspath(__file__)) -sys.path.append(os.path.abspath(os.path.join(__dir__, '../../../'))) -import argparse -import numpy as np -import cv2 -import paddlehub as hub -from tools.infer.utils import preprocess - -args = argparse.Namespace(resize_short=256, resize=224, normalize=True) - -img_path_list = ["./deploy/hubserving/ILSVRC2012_val_00006666.JPEG", ] - -module = hub.Module(name="clas_system") -for i, img_path in enumerate(img_path_list): - img = cv2.imread(img_path)[:, :, ::-1] - img = preprocess(img, args) - batch_input_data = np.expand_dims(img, axis=0) - res = module.predict(batch_input_data) - print("The returned result of {}: {}".format(img_path, res)) diff --git a/deploy/hubserving/readme.md b/deploy/hubserving/readme.md index 2045bbdc3..2a981a2aa 100644 --- a/deploy/hubserving/readme.md +++ b/deploy/hubserving/readme.md @@ -4,7 +4,7 @@ hubserving服务部署配置服务包`clas`下包含3个必选文件,目录如下: ``` -deploy/hubserving/clas/ +hubserving/clas/ └─ __init__.py 空文件,必选 └─ config.json 配置文件,可选,使用配置启动服务时作为参数传入 └─ module.py 主模块,必选,包含服务的完整逻辑 @@ -21,16 +21,16 @@ pip3 install paddlehub==2.0.0b1 --upgrade -i https://pypi.tuna.tsinghua.edu.cn/s ### 2. 下载推理模型 安装服务模块前,需要准备推理模型并放到正确路径,默认模型路径为: ``` -分类推理模型结构文件:./inference/cls_infer.pdmodel -分类推理模型权重文件:./inference/cls_infer.pdiparams +分类推理模型结构文件:PaddleClas/inference/inference.pdmodel +分类推理模型权重文件:PaddleClas/inference/inference.pdiparams ``` **注意**: -* 模型路径可在`./PaddleClas/deploy/hubserving/clas/params.py`中查看和修改。 +* 模型文件路径可在`PaddleClas/deploy/hubserving/clas/params.py`中查看和修改: ```python - cfg.model_file = "./inference/cls_infer.pdmodel" - cfg.params_file = "./inference/cls_infer.pdiparams" + "inference_model_dir": "../inference/" ``` + 需要注意,模型文件(包括.pdmodel与.pdiparams)名称必须为`inference`。 * 我们也提供了大量基于ImageNet-1k数据集的预训练模型,模型列表及下载地址详见[模型库概览](../../docs/zh_CN/models/models_intro.md),也可以使用自己训练转换好的模型。 ### 3. 安装服务模块 @@ -38,14 +38,17 @@ pip3 install paddlehub==2.0.0b1 --upgrade -i https://pypi.tuna.tsinghua.edu.cn/s * 在Linux环境下,安装示例如下: ```shell -# 安装服务模块: -hub install deploy/hubserving/clas/ +cd PaddleClas/deploy +# 安装服务模块: +hub install hubserving/clas/ ``` * 在Windows环境下(文件夹的分隔符为`\`),安装示例如下: + ```shell +cd PaddleClas\deploy # 安装服务模块: -hub install deploy\hubserving\clas\ +hub install hubserving\clas\ ``` ### 4. 启动服务 @@ -59,7 +62,6 @@ $ hub serving start --modules Module1==Version1 \ ``` **参数:** - |参数|用途| |-|-| |--modules/-m| [**必选**] PaddleHub Serving预安装模型,以多个Module==Version键值对的形式列出
*`当不指定Version时,默认选择最新版本`*| @@ -108,30 +110,32 @@ $ hub serving start --modules Module1==Version1 \ 如,使用GPU 3号卡启动串联服务: ```shell +cd PaddleClas/deploy export CUDA_VISIBLE_DEVICES=3 -hub serving start -c deploy/hubserving/clas/config.json +hub serving start -c hubserving/clas/config.json ``` ## 发送预测请求 配置好服务端,可使用以下命令发送预测请求,获取预测结果: -```python tools/test_hubserving.py server_url image_path``` +```shell +cd PaddleClas/deploy +python hubserving/test_hubserving.py server_url image_path +``` 需要给脚本传递2个必须参数: - **server_url**:服务地址,格式为 `http://[ip_address]:[port]/predict/[module_name]` - **image_path**:测试图像路径,可以是单张图片路径,也可以是图像集合目录路径。 -- **top_k**:[**可选**] 返回前 `top_k` 个 `score` ,默认为 `1`。 - **batch_size**:[**可选**] 以`batch_size`大小为单位进行预测,默认为`1`。 -- **resize_short**:[**可选**] 将图像等比例缩放到最短边为`resize_short`,默认为`256`。 -- **resize**:[**可选**] 将图像resize到`resize * resize`尺寸,默认为`224`。 -- **normalize**:[**可选**] 是否对图像进行normalize处理,默认为`True`。 **注意**:如果使用`Transformer`系列模型,如`DeiT_***_384`, `ViT_***_384`等,请注意模型的输入数据尺寸。需要指定`--resize_short=384 --resize=384`。 访问示例: -```python tools/test_hubserving.py --server_url http://127.0.0.1:8866/predict/clas_system --image_file ./deploy/hubserving/ILSVRC2012_val_00006666.JPEG --top_k 5``` +```shell +python hubserving/test_hubserving.py --server_url http://127.0.0.1:8866/predict/clas_system --image_file ./hubserving/ILSVRC2012_val_00006666.JPEG --batch_size 8 +``` ### 返回结果格式说明 返回结果为列表(list),包含top-k个分类结果,以及对应的得分,还有此图片预测耗时,具体如下: @@ -143,7 +147,7 @@ list: 返回结果 └─ float: 该图分类耗时,单位秒 ``` -**说明:** 如果需要增加、删除、修改返回字段,可在相应模块的`module.py`文件中进行修改,完整流程参考下一节自定义修改服务模块。 +**说明:** 如果需要增加、删除、修改返回字段,可对相应模块进行修改,完整流程参考下一节自定义修改服务模块。 ## 自定义修改服务模块 如果需要修改服务逻辑,你一般需要操作以下步骤: @@ -151,16 +155,30 @@ list: 返回结果 - 1、 停止服务 ```hub serving stop --port/-p XXXX``` -- 2、 到相应的`module.py`和`params.py`等文件中根据实际需求修改代码。 - 例如,例如需要替换部署服务所用模型,则需要到`params.py`中修改模型路径参数`cfg.model_file`和`cfg.params_file`。 - - 修改并安装(`hub install deploy/hubserving/clas/`)完成后,在进行部署前,可通过`python deploy/hubserving/clas/test.py`测试已安装服务模块。 +- 2、 到相应的`module.py`和`params.py`等文件中根据实际需求修改代码。`module.py`修改后需要重新安装(`hub install hubserving/clas/`)并部署。在进行部署前,可通过`python hubserving/clas/module.py`测试已安装服务模块。 - 3、 卸载旧服务包 ```hub uninstall clas_system``` - 4、 安装修改后的新服务包 -```hub install deploy/hubserving/clas/``` +```hub install hubserving/clas/``` - 5、重新启动服务 ```hub serving start -m clas_system``` + +**注意**: +常用参数可在[params.py](./clas/params.py)中修改: + * 更换模型,需要修改模型文件路径参数: + ```python + "inference_model_dir": + ``` + * 更改后处理时返回的`top-k`结果数量: + ```python + 'topk': + ``` + * 更改后处理时的lable与class id对应映射文件: + ```python + 'class_id_map_file': + ``` + +为了避免不必要的延时以及能够以batch_size进行预测,数据预处理逻辑(包括resize、crop等操作)在客户端完成,因此需要在[test_hubserving.py](./test_hubserving.py#L35-L52)中修改。 diff --git a/deploy/hubserving/test_hubserving.py b/deploy/hubserving/test_hubserving.py index 41f1287c7..00f3db0e2 100644 --- a/deploy/hubserving/test_hubserving.py +++ b/deploy/hubserving/test_hubserving.py @@ -1,4 +1,4 @@ -# Copyright (c) 2020 PaddlePaddle Authors. All Rights Reserved. +# Copyright (c) 2021 PaddlePaddle Authors. All Rights Reserved. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -15,29 +15,54 @@ import os import sys __dir__ = os.path.dirname(os.path.abspath(__file__)) -sys.path.append(__dir__) -sys.path.append(os.path.abspath(os.path.join(__dir__, '..'))) +sys.path.append(os.path.abspath(os.path.join(__dir__, '../'))) -from tools.infer.utils import parse_args, get_image_list, preprocess, np_to_b64 -from ppcls.utils import logger -import numpy as np -import cv2 import time import requests import json import base64 +import argparse + +import numpy as np +import cv2 + +from utils import logger +from utils.get_image_list import get_image_list +from utils import config +from utils.encode_decode import np_to_b64 +from python.preprocess import create_operators + +preprocess_config = [{ + 'ResizeImage': { + 'resize_short': 256 + } +}, { + 'CropImage': { + 'size': 224 + } +}, { + 'NormalizeImage': { + 'scale': 0.00392157, + 'mean': [0.485, 0.456, 0.406], + 'std': [0.229, 0.224, 0.225], + 'order': '' + } +}, { + 'ToCHWImage': None +}] def main(args): image_path_list = get_image_list(args.image_file) headers = {"Content-type": "application/json"} + preprocess_ops = create_operators(preprocess_config) cnt = 0 predict_time = 0 all_score = 0.0 start_time = time.time() - batch_input_list = [] + img_data_list = [] img_name_list = [] cnt = 0 for idx, img_path in enumerate(image_path_list): @@ -48,22 +73,23 @@ def main(args): format(img_path)) continue else: - img = img[:, :, ::-1] - data = preprocess(img, args) - batch_input_list.append(data) + for ops in preprocess_ops: + img = ops(img) + img = np.array(img) + img_data_list.append(img) + img_name = img_path.split('/')[-1] img_name_list.append(img_name) cnt += 1 if cnt % args.batch_size == 0 or (idx + 1) == len(image_path_list): - batch_input = np.array(batch_input_list) - b64str, revert_shape = np_to_b64(batch_input) + inputs = np.array(img_data_list) + b64str, revert_shape = np_to_b64(inputs) data = { "images": b64str, "revert_params": { "shape": revert_shape, - "dtype": str(batch_input.dtype) - }, - "top_k": args.top_k + "dtype": str(inputs.dtype) + } } try: r = requests.post( @@ -80,24 +106,25 @@ def main(args): continue else: results = r.json()["results"] - batch_result_list = results["prediction"] + preds = results["prediction"] elapse = results["elapse"] - cnt += len(batch_result_list) + cnt += len(preds) predict_time += elapse - for number, result_list in enumerate(batch_result_list): + for number, result_list in enumerate(preds): all_score += result_list["scores"][0] result_str = "" - for i in range(len(result_list["clas_ids"])): + for i in range(len(result_list["class_ids"])): result_str += "{}: {:.2f}\t".format( - result_list["clas_ids"][i], + result_list["class_ids"][i], result_list["scores"][i]) - logger.info("File:{}, The top-{} result(s): {}".format( - img_name_list[number], args.top_k, result_str)) + + logger.info("File:{}, The result(s): {}".format( + img_name_list[number], result_str)) finally: - batch_input_list = [] + img_data_list = [] img_name_list = [] total_time = time.time() - start_time @@ -109,5 +136,10 @@ def main(args): if __name__ == '__main__': - args = parse_args() + parser = argparse.ArgumentParser() + parser.add_argument("--server_url", type=str) + parser.add_argument("--image_file", type=str) + parser.add_argument("--batch_size", type=int, default=1) + args = parser.parse_args() + main(args) diff --git a/deploy/python/predict_cls.py b/deploy/python/predict_cls.py index bc658b39c..19730801d 100644 --- a/deploy/python/predict_cls.py +++ b/deploy/python/predict_cls.py @@ -24,16 +24,22 @@ from utils import logger from utils import config from utils.predictor import Predictor from utils.get_image_list import get_image_list -from preprocess import create_operators -from postprocess import build_postprocess +from python.preprocess import create_operators +from python.postprocess import build_postprocess class ClsPredictor(Predictor): def __init__(self, config): super().__init__(config["Global"]) - self.preprocess_ops = create_operators(config["PreProcess"][ - "transform_ops"]) - self.postprocess = build_postprocess(config["PostProcess"]) + + self.preprocess_ops = [] + self.postprocess = None + if "PreProcess" in config: + if "transform_ops" in config["PreProcess"]: + self.preprocess_ops = create_operators(config["PreProcess"][ + "transform_ops"]) + if "PostProcess" in config: + self.postprocess = build_postprocess(config["PostProcess"]) def predict(self, images): input_names = self.paddle_predictor.get_input_names() diff --git a/deploy/python/preprocess.py b/deploy/python/preprocess.py index 2f21d63d2..b24b757a5 100644 --- a/deploy/python/preprocess.py +++ b/deploy/python/preprocess.py @@ -26,7 +26,7 @@ import cv2 import numpy as np import importlib -from det_preprocess import DetNormalizeImage, DetPadStride, DetPermute, DetResize +from python.det_preprocess import DetNormalizeImage, DetPadStride, DetPermute, DetResize def create_operators(params): diff --git a/deploy/utils/__init__.py b/deploy/utils/__init__.py index e8de1257a..baf14a9ee 100644 --- a/deploy/utils/__init__.py +++ b/deploy/utils/__init__.py @@ -2,3 +2,4 @@ from . import logger from . import config from . import get_image_list from . import predictor +from . import encode_decode \ No newline at end of file diff --git a/deploy/utils/config.py b/deploy/utils/config.py index 33c704c8d..11141105b 100644 --- a/deploy/utils/config.py +++ b/deploy/utils/config.py @@ -1,4 +1,4 @@ -# copyright (c) 2020 PaddlePaddle Authors. All Rights Reserve. +# copyright (c) 2021 PaddlePaddle Authors. All Rights Reserve. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -16,7 +16,9 @@ import os import copy import argparse import yaml + from utils import logger + __all__ = ['get_config'] diff --git a/deploy/utils/encode_decode.py b/deploy/utils/encode_decode.py new file mode 100644 index 000000000..d76a529f1 --- /dev/null +++ b/deploy/utils/encode_decode.py @@ -0,0 +1,31 @@ +# Copyright (c) 2021 PaddlePaddle Authors. All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import base64 + +import numpy as np + + +def np_to_b64(images): + img_str = base64.b64encode(images).decode('utf8') + return img_str, images.shape + + +def b64_to_np(b64str, revert_params): + shape = revert_params["shape"] + dtype = revert_params["dtype"] + dtype = getattr(np, dtype) if isinstance(str, type(dtype)) else dtype + data = base64.b64decode(b64str.encode('utf8')) + data = np.fromstring(data, dtype).reshape(shape) + return data \ No newline at end of file diff --git a/deploy/utils/imagenet1k_label_list.txt b/deploy/utils/imagenet1k_label_list.txt new file mode 100644 index 000000000..376e18021 --- /dev/null +++ b/deploy/utils/imagenet1k_label_list.txt @@ -0,0 +1,1000 @@ +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 +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