diff --git a/approach/ovod/APE/configs/ADE20kFull_SemanticSegmentation/ape_deta/ape_deta_vitl_eva02_clip_vlf_lsj1024.py b/approach/ovod/APE/configs/ADE20kFull_SemanticSegmentation/ape_deta/ape_deta_vitl_eva02_clip_vlf_lsj1024.py new file mode 100644 index 0000000000000000000000000000000000000000..90390fbc476a05a1675396ab88f4088de0767ac3 --- /dev/null +++ b/approach/ovod/APE/configs/ADE20kFull_SemanticSegmentation/ape_deta/ape_deta_vitl_eva02_clip_vlf_lsj1024.py @@ -0,0 +1,101 @@ +import torch.nn as nn + +from detectron2.config import LazyCall as L +from detectron2.layers import ShapeSpec +from detrex.modeling.neck import ChannelMapper +from ape.layers import VisionLanguageFusion +from ape.modeling.ape_deta import ( + DeformableDETRSegmVL, + DeformableDetrTransformerDecoderVL, + DeformableDetrTransformerEncoderVL, + DeformableDetrTransformerVL, +) +from ape.modeling.text import EVA02CLIP + +from ...common.backbone.vitl_eva02_clip import backbone +from .ape_deta_vitl_eva02_lsj1024 import dataloader, lr_multiplier, model, optimizer, train + +model.model_vision.backbone = backbone + +train.init_checkpoint = ( + "models/QuanSun/EVA-CLIP/EVA02_CLIP_L_336_psz14to16_s6B.pt?matching_heuristics=True" +) + +model.model_language = L(EVA02CLIP)( + clip_model="EVA02-CLIP-bigE-14-plus", + cache_dir="models/QuanSun/EVA-CLIP/EVA02_CLIP_E_psz14_plus_s9B.pt", + dtype="float16", +) +model.model_vision.embed_dim_language = 1024 + +model.model_vision.neck = L(ChannelMapper)( + input_shapes={ + "p2": ShapeSpec(channels=256), + "p3": ShapeSpec(channels=256), + "p4": ShapeSpec(channels=256), + "p5": ShapeSpec(channels=256), + "p6": ShapeSpec(channels=256), + }, + in_features=["p2", "p3", "p4", "p5", "p6"], + out_channels=256, + num_outs=5, + kernel_size=1, + norm_layer=L(nn.GroupNorm)(num_groups=32, num_channels=256), +) + +model.model_vision.mask_in_features = ["p2"] +model.model_vision.input_shapes = { + "p2": ShapeSpec(channels=256), + "p3": ShapeSpec(channels=256), + "p4": ShapeSpec(channels=256), + "p5": ShapeSpec(channels=256), + "p6": ShapeSpec(channels=256), +} + +model.model_vision.transformer.encoder.num_layers = 6 +model.model_vision.transformer.decoder.num_layers = 6 +model.model_vision.transformer.encoder.embed_dim = 256 +model.model_vision.transformer.decoder.embed_dim = 256 +model.model_vision.embed_dim = 256 +model.model_vision.backbone.out_channels = 256 + +model.model_vision.update( + _target_=DeformableDETRSegmVL, +) +model.model_vision.transformer.update( + _target_=DeformableDetrTransformerVL, +) +model.model_vision.transformer.encoder.update( + _target_=DeformableDetrTransformerEncoderVL, +) +model.model_vision.transformer.decoder.update( + _target_=DeformableDetrTransformerDecoderVL, +) + + +model.model_vision.transformer.encoder.vl_layer = L(VisionLanguageFusion)( + v_dim="${....embed_dim}", + l_dim="${....embed_dim_language}", + embed_dim=2048, + num_heads=8, + dropout=0.1, + drop_path=0.0, + init_values=1.0 / 6, + stable_softmax_2d=True, + clamp_min_for_underflow=True, + clamp_max_for_overflow=True, + use_checkpoint=True, +) + +model.model_vision.text_feature_bank = True +model.model_vision.text_feature_reduce_before_fusion = True +model.model_vision.text_feature_batch_repeat = True +model.model_vision.expression_cumulative_gt_class = True +model.model_vision.name_prompt_fusion_type = "zero" + +model.model_vision.stuff_dataset_learn_thing = False +model.model_vision.stuff_prob_thing = -1.0 +model.model_vision.transformer.proposal_ambiguous = 1 + +train.output_dir = "output/" + __file__[:-3] +model.model_vision.vis_period = 12800 diff --git a/approach/ovod/APE/configs/ADE20kFull_SemanticSegmentation/ape_deta/ape_deta_vitl_eva02_lsj1024.py b/approach/ovod/APE/configs/ADE20kFull_SemanticSegmentation/ape_deta/ape_deta_vitl_eva02_lsj1024.py new file mode 100644 index 0000000000000000000000000000000000000000..5cdad80bdb793e06da9d327724cf9c8dabbe7dfe --- /dev/null +++ b/approach/ovod/APE/configs/ADE20kFull_SemanticSegmentation/ape_deta/ape_deta_vitl_eva02_lsj1024.py @@ -0,0 +1,32 @@ +from detectron2.data import MetadataCatalog + +from ...COCO_InstanceSegmentation.ape_deta.ape_deta_vitl_eva02_lsj1024_cp_12ep import ( + lr_multiplier, + model, + optimizer, + train, +) +from ...common.data.ade20kfull_semantic_lsj1024 import dataloader + +stuff_classes = MetadataCatalog.get("ade20k_full_sem_seg_train").stuff_classes +del MetadataCatalog.get("ade20k_full_sem_seg_train").stuff_classes +MetadataCatalog.get("ade20k_full_sem_seg_train").set( + stuff_classes=[x.split(",")[0] for x in stuff_classes] +) + +model.model_vision.dataset_prompts = ["name"] +model.model_vision.name_prompt_fusion_text = [False] +model.model_vision.dataset_names = ["ade20k_full_sem_seg"] +model.model_vision.dataset_metas = dataloader.train.dataset.names + +model.model_vision.num_classes = 847 +model.model_vision.criterion[0].num_classes = 847 +model.model_vision.select_box_nums_for_evaluation = 300 + +model.model_vision.instance_on = False +model.model_vision.semantic_on = True +model.model_vision.panoptic_on = False + +model.model_vision.stuff_prob_thing = -1.0 + +train.output_dir = "output/" + __file__[:-3] diff --git a/approach/ovod/APE/configs/ADE20kFull_SemanticSegmentation/ape_deta/ape_deta_vitl_eva02_vlf_lsj1024.py b/approach/ovod/APE/configs/ADE20kFull_SemanticSegmentation/ape_deta/ape_deta_vitl_eva02_vlf_lsj1024.py new file mode 100644 index 0000000000000000000000000000000000000000..1a3ad5980ce9d1f48e3bc8d130bf389eeba0ec44 --- /dev/null +++ b/approach/ovod/APE/configs/ADE20kFull_SemanticSegmentation/ape_deta/ape_deta_vitl_eva02_vlf_lsj1024.py @@ -0,0 +1,47 @@ +from detectron2.config import LazyCall as L +from ape.layers import VisionLanguageFusion +from ape.modeling.ape_deta import ( + DeformableDETRSegmVL, + DeformableDetrTransformerDecoderVL, + DeformableDetrTransformerEncoderVL, + DeformableDetrTransformerVL, +) + +from .ape_deta_vitl_eva02_lsj1024 import dataloader, lr_multiplier, model, optimizer, train + +model.model_vision.update( + _target_=DeformableDETRSegmVL, +) +model.model_vision.transformer.update( + _target_=DeformableDetrTransformerVL, +) +model.model_vision.transformer.encoder.update( + _target_=DeformableDetrTransformerEncoderVL, +) +model.model_vision.transformer.decoder.update( + _target_=DeformableDetrTransformerDecoderVL, +) + + +model.model_vision.transformer.encoder.vl_layer = L(VisionLanguageFusion)( + v_dim="${....embed_dim}", + l_dim="${....embed_dim_language}", + embed_dim=2048, + num_heads=8, + dropout=0.1, + drop_path=0.0, + init_values=1.0 / 6, + stable_softmax_2d=True, + clamp_min_for_underflow=True, + clamp_max_for_overflow=True, + use_checkpoint=True, +) + +model.model_vision.text_feature_bank = True +model.model_vision.text_feature_reduce_before_fusion = True +model.model_vision.text_feature_batch_repeat = True +model.model_vision.expression_cumulative_gt_class = True +model.model_vision.name_prompt_fusion_type = "zero" + +train.output_dir = "output/" + __file__[:-3] +model.model_vision.vis_period = 12800 diff --git a/approach/ovod/APE/configs/ADE20k_SemanticSegmentation/ape_deta/ape_deta_vitl_eva02_clip_vlf_lsj1024.py b/approach/ovod/APE/configs/ADE20k_SemanticSegmentation/ape_deta/ape_deta_vitl_eva02_clip_vlf_lsj1024.py new file mode 100644 index 0000000000000000000000000000000000000000..90390fbc476a05a1675396ab88f4088de0767ac3 --- /dev/null +++ b/approach/ovod/APE/configs/ADE20k_SemanticSegmentation/ape_deta/ape_deta_vitl_eva02_clip_vlf_lsj1024.py @@ -0,0 +1,101 @@ +import torch.nn as nn + +from detectron2.config import LazyCall as L +from detectron2.layers import ShapeSpec +from detrex.modeling.neck import ChannelMapper +from ape.layers import VisionLanguageFusion +from ape.modeling.ape_deta import ( + DeformableDETRSegmVL, + DeformableDetrTransformerDecoderVL, + DeformableDetrTransformerEncoderVL, + DeformableDetrTransformerVL, +) +from ape.modeling.text import EVA02CLIP + +from ...common.backbone.vitl_eva02_clip import backbone +from .ape_deta_vitl_eva02_lsj1024 import dataloader, lr_multiplier, model, optimizer, train + +model.model_vision.backbone = backbone + +train.init_checkpoint = ( + "models/QuanSun/EVA-CLIP/EVA02_CLIP_L_336_psz14to16_s6B.pt?matching_heuristics=True" +) + +model.model_language = L(EVA02CLIP)( + clip_model="EVA02-CLIP-bigE-14-plus", + cache_dir="models/QuanSun/EVA-CLIP/EVA02_CLIP_E_psz14_plus_s9B.pt", + dtype="float16", +) +model.model_vision.embed_dim_language = 1024 + +model.model_vision.neck = L(ChannelMapper)( + input_shapes={ + "p2": ShapeSpec(channels=256), + "p3": ShapeSpec(channels=256), + "p4": ShapeSpec(channels=256), + "p5": ShapeSpec(channels=256), + "p6": ShapeSpec(channels=256), + }, + in_features=["p2", "p3", "p4", "p5", "p6"], + out_channels=256, + num_outs=5, + kernel_size=1, + norm_layer=L(nn.GroupNorm)(num_groups=32, num_channels=256), +) + +model.model_vision.mask_in_features = ["p2"] +model.model_vision.input_shapes = { + "p2": ShapeSpec(channels=256), + "p3": ShapeSpec(channels=256), + "p4": ShapeSpec(channels=256), + "p5": ShapeSpec(channels=256), + "p6": ShapeSpec(channels=256), +} + +model.model_vision.transformer.encoder.num_layers = 6 +model.model_vision.transformer.decoder.num_layers = 6 +model.model_vision.transformer.encoder.embed_dim = 256 +model.model_vision.transformer.decoder.embed_dim = 256 +model.model_vision.embed_dim = 256 +model.model_vision.backbone.out_channels = 256 + +model.model_vision.update( + _target_=DeformableDETRSegmVL, +) +model.model_vision.transformer.update( + _target_=DeformableDetrTransformerVL, +) +model.model_vision.transformer.encoder.update( + _target_=DeformableDetrTransformerEncoderVL, +) +model.model_vision.transformer.decoder.update( + _target_=DeformableDetrTransformerDecoderVL, +) + + +model.model_vision.transformer.encoder.vl_layer = L(VisionLanguageFusion)( + v_dim="${....embed_dim}", + l_dim="${....embed_dim_language}", + embed_dim=2048, + num_heads=8, + dropout=0.1, + drop_path=0.0, + init_values=1.0 / 6, + stable_softmax_2d=True, + clamp_min_for_underflow=True, + clamp_max_for_overflow=True, + use_checkpoint=True, +) + +model.model_vision.text_feature_bank = True +model.model_vision.text_feature_reduce_before_fusion = True +model.model_vision.text_feature_batch_repeat = True +model.model_vision.expression_cumulative_gt_class = True +model.model_vision.name_prompt_fusion_type = "zero" + +model.model_vision.stuff_dataset_learn_thing = False +model.model_vision.stuff_prob_thing = -1.0 +model.model_vision.transformer.proposal_ambiguous = 1 + +train.output_dir = "output/" + __file__[:-3] +model.model_vision.vis_period = 12800 diff --git a/approach/ovod/APE/configs/ADE20k_SemanticSegmentation/ape_deta/ape_deta_vitl_eva02_lsj1024.py b/approach/ovod/APE/configs/ADE20k_SemanticSegmentation/ape_deta/ape_deta_vitl_eva02_lsj1024.py new file mode 100644 index 0000000000000000000000000000000000000000..07f43a9500370a225414d20c62fa07067dfe92a0 --- /dev/null +++ b/approach/ovod/APE/configs/ADE20k_SemanticSegmentation/ape_deta/ape_deta_vitl_eva02_lsj1024.py @@ -0,0 +1,22 @@ +from ...COCO_InstanceSegmentation.ape_deta.ape_deta_vitl_eva02_lsj1024_cp_12ep import ( + lr_multiplier, + model, + optimizer, + train, +) +from ...common.data.ade20k_semantic_lsj1024 import dataloader + +model.model_vision.dataset_prompts = ["name"] +model.model_vision.name_prompt_fusion_text = [False] +model.model_vision.dataset_names = ["ade20k"] +model.model_vision.dataset_metas = dataloader.train.dataset.names + +model.model_vision.select_box_nums_for_evaluation = 300 + +model.model_vision.instance_on = False +model.model_vision.semantic_on = True +model.model_vision.panoptic_on = False + +model.model_vision.stuff_prob_thing = -1.0 + +train.output_dir = "output/" + __file__[:-3] diff --git a/approach/ovod/APE/configs/ADE20k_SemanticSegmentation/ape_deta/ape_deta_vitl_eva02_vlf_lsj1024.py b/approach/ovod/APE/configs/ADE20k_SemanticSegmentation/ape_deta/ape_deta_vitl_eva02_vlf_lsj1024.py new file mode 100644 index 0000000000000000000000000000000000000000..1a3ad5980ce9d1f48e3bc8d130bf389eeba0ec44 --- /dev/null +++ b/approach/ovod/APE/configs/ADE20k_SemanticSegmentation/ape_deta/ape_deta_vitl_eva02_vlf_lsj1024.py @@ -0,0 +1,47 @@ +from detectron2.config import LazyCall as L +from ape.layers import VisionLanguageFusion +from ape.modeling.ape_deta import ( + DeformableDETRSegmVL, + DeformableDetrTransformerDecoderVL, + DeformableDetrTransformerEncoderVL, + DeformableDetrTransformerVL, +) + +from .ape_deta_vitl_eva02_lsj1024 import dataloader, lr_multiplier, model, optimizer, train + +model.model_vision.update( + _target_=DeformableDETRSegmVL, +) +model.model_vision.transformer.update( + _target_=DeformableDetrTransformerVL, +) +model.model_vision.transformer.encoder.update( + _target_=DeformableDetrTransformerEncoderVL, +) +model.model_vision.transformer.decoder.update( + _target_=DeformableDetrTransformerDecoderVL, +) + + +model.model_vision.transformer.encoder.vl_layer = L(VisionLanguageFusion)( + v_dim="${....embed_dim}", + l_dim="${....embed_dim_language}", + embed_dim=2048, + num_heads=8, + dropout=0.1, + drop_path=0.0, + init_values=1.0 / 6, + stable_softmax_2d=True, + clamp_min_for_underflow=True, + clamp_max_for_overflow=True, + use_checkpoint=True, +) + +model.model_vision.text_feature_bank = True +model.model_vision.text_feature_reduce_before_fusion = True +model.model_vision.text_feature_batch_repeat = True +model.model_vision.expression_cumulative_gt_class = True +model.model_vision.name_prompt_fusion_type = "zero" + +train.output_dir = "output/" + __file__[:-3] +model.model_vision.vis_period = 12800 diff --git a/approach/ovod/APE/configs/ADE20k_SemanticSegmentation/deformable_deta/deformable_deta_segm_r50_160k.py b/approach/ovod/APE/configs/ADE20k_SemanticSegmentation/deformable_deta/deformable_deta_segm_r50_160k.py new file mode 100644 index 0000000000000000000000000000000000000000..2d5d82fe8acc7041442fc4ebf1b067a3c7142695 --- /dev/null +++ b/approach/ovod/APE/configs/ADE20k_SemanticSegmentation/deformable_deta/deformable_deta_segm_r50_160k.py @@ -0,0 +1,45 @@ +from detectron2.config import LazyCall as L +from detectron2.solver import WarmupParamScheduler +from fvcore.common.param_scheduler import MultiStepParamScheduler + +from ...COCO_InstanceSegmentation.deformable_deta.deformable_deta_segm_r50_12ep import ( + lr_multiplier, + model, + optimizer, + train, +) +from ...common.data.ade20k_semantic import dataloader + +num_classes = 150 +model.num_classes = num_classes +model.criterion.num_classes = num_classes +model.criterion.matcher_stage2.num_classes = num_classes +model.criterion.eos_coef = 1.0 + +model.instance_on = False +model.semantic_on = True +model.panoptic_on = False + +train.max_iter = 160000 +train.eval_period = 5000 + +lr_multiplier = L(WarmupParamScheduler)( + scheduler=L(MultiStepParamScheduler)( + values=[1.0, 0.1, 0.01], + milestones=[135000, 150000], + num_updates=160000, + ), + warmup_length=1000 / 160000, + warmup_method="linear", + warmup_factor=0.001, +) + +train.init_checkpoint = "detectron2://ImageNetPretrained/torchvision/R-50.pkl" +train.init_checkpoint = "models/torchvision/R-50.pkl" +train.output_dir = "output/" + __file__[:-3] + +train.amp.enabled = True +train.ddp.fp16_compression = True +train.ddp.find_unused_parameters = True + +model.dataset_metas = dataloader.train.dataset.names diff --git a/approach/ovod/APE/configs/BDD10k_PanopticSegmentation/ape_deta/ape_deta_vitl_eva02_clip_vlf_lsj1024.py b/approach/ovod/APE/configs/BDD10k_PanopticSegmentation/ape_deta/ape_deta_vitl_eva02_clip_vlf_lsj1024.py new file mode 100644 index 0000000000000000000000000000000000000000..427cdfa993e21793d697d91456c8dad514b00d1d --- /dev/null +++ b/approach/ovod/APE/configs/BDD10k_PanopticSegmentation/ape_deta/ape_deta_vitl_eva02_clip_vlf_lsj1024.py @@ -0,0 +1,109 @@ +import torch.nn as nn + +from detectron2.config import LazyCall as L +from detectron2.layers import ShapeSpec +from detrex.modeling.neck import ChannelMapper +from ape.layers import VisionLanguageFusion +from ape.modeling.ape_deta import ( + DeformableDETRSegmVL, + DeformableDetrTransformerDecoderVL, + DeformableDetrTransformerEncoderVL, + DeformableDetrTransformerVL, +) +from ape.modeling.text import EVA02CLIP + +from ...common.backbone.vitl_eva02_clip import backbone +from .ape_deta_vitl_eva02_lsj1024 import dataloader, lr_multiplier, model, optimizer, train + +model.model_vision.backbone = backbone + +train.init_checkpoint = ( + "models/QuanSun/EVA-CLIP/EVA02_CLIP_L_336_psz14to16_s6B.pt?matching_heuristics=True" +) + +model.model_language = L(EVA02CLIP)( + clip_model="EVA02-CLIP-bigE-14-plus", + cache_dir="models/QuanSun/EVA-CLIP/EVA02_CLIP_E_psz14_plus_s9B.pt", + dtype="float16", +) +model.model_vision.embed_dim_language = 1024 + +model.model_vision.neck = L(ChannelMapper)( + input_shapes={ + "p2": ShapeSpec(channels=256), + "p3": ShapeSpec(channels=256), + "p4": ShapeSpec(channels=256), + "p5": ShapeSpec(channels=256), + "p6": ShapeSpec(channels=256), + }, + in_features=["p2", "p3", "p4", "p5", "p6"], + out_channels=256, + num_outs=5, + kernel_size=1, + norm_layer=L(nn.GroupNorm)(num_groups=32, num_channels=256), +) + +model.model_vision.mask_in_features = ["p2"] +model.model_vision.input_shapes = { + "p2": ShapeSpec(channels=256), + "p3": ShapeSpec(channels=256), + "p4": ShapeSpec(channels=256), + "p5": ShapeSpec(channels=256), + "p6": ShapeSpec(channels=256), +} + +model.model_vision.transformer.encoder.num_layers = 6 +model.model_vision.transformer.decoder.num_layers = 6 +model.model_vision.transformer.encoder.embed_dim = 256 +model.model_vision.transformer.decoder.embed_dim = 256 +model.model_vision.embed_dim = 256 +model.model_vision.backbone.out_channels = 256 + +model.model_vision.update( + _target_=DeformableDETRSegmVL, +) +model.model_vision.transformer.update( + _target_=DeformableDetrTransformerVL, +) +model.model_vision.transformer.encoder.update( + _target_=DeformableDetrTransformerEncoderVL, +) +model.model_vision.transformer.decoder.update( + _target_=DeformableDetrTransformerDecoderVL, +) + + +model.model_vision.transformer.encoder.vl_layer = L(VisionLanguageFusion)( + v_dim="${....embed_dim}", + l_dim="${....embed_dim_language}", + embed_dim=2048, + num_heads=8, + dropout=0.1, + drop_path=0.0, + init_values=1.0 / 6, + stable_softmax_2d=True, + clamp_min_for_underflow=True, + clamp_max_for_overflow=True, + use_checkpoint=True, +) + +model.model_vision.text_feature_bank = True +model.model_vision.text_feature_reduce_before_fusion = True +model.model_vision.text_feature_batch_repeat = True +model.model_vision.expression_cumulative_gt_class = True +model.model_vision.name_prompt_fusion_type = "zero" + +model.model_vision.stuff_dataset_learn_thing = False +model.model_vision.stuff_prob_thing = -1.0 +model.model_vision.transformer.proposal_ambiguous = 1 + +model.model_vision.panoptic_configs = { + "prob": 0.01, + "pano_temp": 0.06, + "transform_eval": True, + "object_mask_threshold": 0.0001, + "overlap_threshold": 0.4, +} + +train.output_dir = "output/" + __file__[:-3] +model.model_vision.vis_period = 12800 diff --git a/approach/ovod/APE/configs/BDD10k_PanopticSegmentation/ape_deta/ape_deta_vitl_eva02_lsj1024.py b/approach/ovod/APE/configs/BDD10k_PanopticSegmentation/ape_deta/ape_deta_vitl_eva02_lsj1024.py new file mode 100644 index 0000000000000000000000000000000000000000..2c960797e0a93e709596d140ab4d1cf69fd6506f --- /dev/null +++ b/approach/ovod/APE/configs/BDD10k_PanopticSegmentation/ape_deta/ape_deta_vitl_eva02_lsj1024.py @@ -0,0 +1,23 @@ +from ...COCO_InstanceSegmentation.ape_deta.ape_deta_vitl_eva02_lsj1024_cp_12ep import ( + lr_multiplier, + model, + optimizer, + train, +) +from ...common.data.bdd10k_panoptic_lsj1024 import dataloader + +model.model_vision.dataset_prompts = ["name"] +model.model_vision.name_prompt_fusion_text = [False] +model.model_vision.dataset_names = ["bdd10k"] +model.model_vision.dataset_metas = dataloader.train.dataset.names + +model.model_vision.select_box_nums_for_evaluation = 300 + + +model.model_vision.instance_on = True +model.model_vision.semantic_on = True +model.model_vision.panoptic_on = True + +model.model_vision.stuff_prob_thing = -1.0 + +train.output_dir = "output/" + __file__[:-3] diff --git a/approach/ovod/APE/configs/BDD10k_PanopticSegmentation/ape_deta/ape_deta_vitl_eva02_vlf_lsj1024.py b/approach/ovod/APE/configs/BDD10k_PanopticSegmentation/ape_deta/ape_deta_vitl_eva02_vlf_lsj1024.py new file mode 100644 index 0000000000000000000000000000000000000000..1a3ad5980ce9d1f48e3bc8d130bf389eeba0ec44 --- /dev/null +++ b/approach/ovod/APE/configs/BDD10k_PanopticSegmentation/ape_deta/ape_deta_vitl_eva02_vlf_lsj1024.py @@ -0,0 +1,47 @@ +from detectron2.config import LazyCall as L +from ape.layers import VisionLanguageFusion +from ape.modeling.ape_deta import ( + DeformableDETRSegmVL, + DeformableDetrTransformerDecoderVL, + DeformableDetrTransformerEncoderVL, + DeformableDetrTransformerVL, +) + +from .ape_deta_vitl_eva02_lsj1024 import dataloader, lr_multiplier, model, optimizer, train + +model.model_vision.update( + _target_=DeformableDETRSegmVL, +) +model.model_vision.transformer.update( + _target_=DeformableDetrTransformerVL, +) +model.model_vision.transformer.encoder.update( + _target_=DeformableDetrTransformerEncoderVL, +) +model.model_vision.transformer.decoder.update( + _target_=DeformableDetrTransformerDecoderVL, +) + + +model.model_vision.transformer.encoder.vl_layer = L(VisionLanguageFusion)( + v_dim="${....embed_dim}", + l_dim="${....embed_dim_language}", + embed_dim=2048, + num_heads=8, + dropout=0.1, + drop_path=0.0, + init_values=1.0 / 6, + stable_softmax_2d=True, + clamp_min_for_underflow=True, + clamp_max_for_overflow=True, + use_checkpoint=True, +) + +model.model_vision.text_feature_bank = True +model.model_vision.text_feature_reduce_before_fusion = True +model.model_vision.text_feature_batch_repeat = True +model.model_vision.expression_cumulative_gt_class = True +model.model_vision.name_prompt_fusion_type = "zero" + +train.output_dir = "output/" + __file__[:-3] +model.model_vision.vis_period = 12800 diff --git a/approach/ovod/APE/configs/BDD10k_SemanticSegmentation/ape_deta/ape_deta_vitl_eva02_clip_vlf_lsj1024.py b/approach/ovod/APE/configs/BDD10k_SemanticSegmentation/ape_deta/ape_deta_vitl_eva02_clip_vlf_lsj1024.py new file mode 100644 index 0000000000000000000000000000000000000000..90390fbc476a05a1675396ab88f4088de0767ac3 --- /dev/null +++ b/approach/ovod/APE/configs/BDD10k_SemanticSegmentation/ape_deta/ape_deta_vitl_eva02_clip_vlf_lsj1024.py @@ -0,0 +1,101 @@ +import torch.nn as nn + +from detectron2.config import LazyCall as L +from detectron2.layers import ShapeSpec +from detrex.modeling.neck import ChannelMapper +from ape.layers import VisionLanguageFusion +from ape.modeling.ape_deta import ( + DeformableDETRSegmVL, + DeformableDetrTransformerDecoderVL, + DeformableDetrTransformerEncoderVL, + DeformableDetrTransformerVL, +) +from ape.modeling.text import EVA02CLIP + +from ...common.backbone.vitl_eva02_clip import backbone +from .ape_deta_vitl_eva02_lsj1024 import dataloader, lr_multiplier, model, optimizer, train + +model.model_vision.backbone = backbone + +train.init_checkpoint = ( + "models/QuanSun/EVA-CLIP/EVA02_CLIP_L_336_psz14to16_s6B.pt?matching_heuristics=True" +) + +model.model_language = L(EVA02CLIP)( + clip_model="EVA02-CLIP-bigE-14-plus", + cache_dir="models/QuanSun/EVA-CLIP/EVA02_CLIP_E_psz14_plus_s9B.pt", + dtype="float16", +) +model.model_vision.embed_dim_language = 1024 + +model.model_vision.neck = L(ChannelMapper)( + input_shapes={ + "p2": ShapeSpec(channels=256), + "p3": ShapeSpec(channels=256), + "p4": ShapeSpec(channels=256), + "p5": ShapeSpec(channels=256), + "p6": ShapeSpec(channels=256), + }, + in_features=["p2", "p3", "p4", "p5", "p6"], + out_channels=256, + num_outs=5, + kernel_size=1, + norm_layer=L(nn.GroupNorm)(num_groups=32, num_channels=256), +) + +model.model_vision.mask_in_features = ["p2"] +model.model_vision.input_shapes = { + "p2": ShapeSpec(channels=256), + "p3": ShapeSpec(channels=256), + "p4": ShapeSpec(channels=256), + "p5": ShapeSpec(channels=256), + "p6": ShapeSpec(channels=256), +} + +model.model_vision.transformer.encoder.num_layers = 6 +model.model_vision.transformer.decoder.num_layers = 6 +model.model_vision.transformer.encoder.embed_dim = 256 +model.model_vision.transformer.decoder.embed_dim = 256 +model.model_vision.embed_dim = 256 +model.model_vision.backbone.out_channels = 256 + +model.model_vision.update( + _target_=DeformableDETRSegmVL, +) +model.model_vision.transformer.update( + _target_=DeformableDetrTransformerVL, +) +model.model_vision.transformer.encoder.update( + _target_=DeformableDetrTransformerEncoderVL, +) +model.model_vision.transformer.decoder.update( + _target_=DeformableDetrTransformerDecoderVL, +) + + +model.model_vision.transformer.encoder.vl_layer = L(VisionLanguageFusion)( + v_dim="${....embed_dim}", + l_dim="${....embed_dim_language}", + embed_dim=2048, + num_heads=8, + dropout=0.1, + drop_path=0.0, + init_values=1.0 / 6, + stable_softmax_2d=True, + clamp_min_for_underflow=True, + clamp_max_for_overflow=True, + use_checkpoint=True, +) + +model.model_vision.text_feature_bank = True +model.model_vision.text_feature_reduce_before_fusion = True +model.model_vision.text_feature_batch_repeat = True +model.model_vision.expression_cumulative_gt_class = True +model.model_vision.name_prompt_fusion_type = "zero" + +model.model_vision.stuff_dataset_learn_thing = False +model.model_vision.stuff_prob_thing = -1.0 +model.model_vision.transformer.proposal_ambiguous = 1 + +train.output_dir = "output/" + __file__[:-3] +model.model_vision.vis_period = 12800 diff --git a/approach/ovod/APE/configs/BDD10k_SemanticSegmentation/ape_deta/ape_deta_vitl_eva02_lsj1024.py b/approach/ovod/APE/configs/BDD10k_SemanticSegmentation/ape_deta/ape_deta_vitl_eva02_lsj1024.py new file mode 100644 index 0000000000000000000000000000000000000000..5865c38c860bb075f517e9266aae92d1d86d6d5f --- /dev/null +++ b/approach/ovod/APE/configs/BDD10k_SemanticSegmentation/ape_deta/ape_deta_vitl_eva02_lsj1024.py @@ -0,0 +1,22 @@ +from ...COCO_InstanceSegmentation.ape_deta.ape_deta_vitl_eva02_lsj1024_cp_12ep import ( + lr_multiplier, + model, + optimizer, + train, +) +from ...common.data.bdd10k_semantic_lsj1024 import dataloader + +model.model_vision.dataset_prompts = ["name"] +model.model_vision.name_prompt_fusion_text = [False] +model.model_vision.dataset_names = ["bdd10k"] +model.model_vision.dataset_metas = dataloader.train.dataset.names + +model.model_vision.select_box_nums_for_evaluation = 300 + +model.model_vision.instance_on = False +model.model_vision.semantic_on = True +model.model_vision.panoptic_on = False + +model.model_vision.stuff_prob_thing = -1.0 + +train.output_dir = "output/" + __file__[:-3] diff --git a/approach/ovod/APE/configs/BDD10k_SemanticSegmentation/ape_deta/ape_deta_vitl_eva02_vlf_lsj1024.py b/approach/ovod/APE/configs/BDD10k_SemanticSegmentation/ape_deta/ape_deta_vitl_eva02_vlf_lsj1024.py new file mode 100644 index 0000000000000000000000000000000000000000..1a3ad5980ce9d1f48e3bc8d130bf389eeba0ec44 --- /dev/null +++ b/approach/ovod/APE/configs/BDD10k_SemanticSegmentation/ape_deta/ape_deta_vitl_eva02_vlf_lsj1024.py @@ -0,0 +1,47 @@ +from detectron2.config import LazyCall as L +from ape.layers import VisionLanguageFusion +from ape.modeling.ape_deta import ( + DeformableDETRSegmVL, + DeformableDetrTransformerDecoderVL, + DeformableDetrTransformerEncoderVL, + DeformableDetrTransformerVL, +) + +from .ape_deta_vitl_eva02_lsj1024 import dataloader, lr_multiplier, model, optimizer, train + +model.model_vision.update( + _target_=DeformableDETRSegmVL, +) +model.model_vision.transformer.update( + _target_=DeformableDetrTransformerVL, +) +model.model_vision.transformer.encoder.update( + _target_=DeformableDetrTransformerEncoderVL, +) +model.model_vision.transformer.decoder.update( + _target_=DeformableDetrTransformerDecoderVL, +) + + +model.model_vision.transformer.encoder.vl_layer = L(VisionLanguageFusion)( + v_dim="${....embed_dim}", + l_dim="${....embed_dim_language}", + embed_dim=2048, + num_heads=8, + dropout=0.1, + drop_path=0.0, + init_values=1.0 / 6, + stable_softmax_2d=True, + clamp_min_for_underflow=True, + clamp_max_for_overflow=True, + use_checkpoint=True, +) + +model.model_vision.text_feature_bank = True +model.model_vision.text_feature_reduce_before_fusion = True +model.model_vision.text_feature_batch_repeat = True +model.model_vision.expression_cumulative_gt_class = True +model.model_vision.name_prompt_fusion_type = "zero" + +train.output_dir = "output/" + __file__[:-3] +model.model_vision.vis_period = 12800 diff --git a/approach/ovod/APE/configs/COCO_Detection/deformable_deta/deformable_deta_r50_12ep.py b/approach/ovod/APE/configs/COCO_Detection/deformable_deta/deformable_deta_r50_12ep.py new file mode 100644 index 0000000000000000000000000000000000000000..f8c7048882911210bd3fcc906aa2cd762e697bbc --- /dev/null +++ b/approach/ovod/APE/configs/COCO_Detection/deformable_deta/deformable_deta_r50_12ep.py @@ -0,0 +1,48 @@ +from detrex.config import get_config + +from .models.deformable_deta_r50 import model + +dataloader = get_config("common/data/coco_detr.py").dataloader +lr_multiplier = get_config("common/coco_schedule.py").lr_multiplier_12ep +lr_multiplier.scheduler.milestones = [75000, 90000] +optimizer = get_config("common/optim.py").AdamW +train = get_config("common/train.py").train + +train.init_checkpoint = "detectron2://ImageNetPretrained/torchvision/R-50.pkl" +train.init_checkpoint = "models/torchvision/R-50.pkl" +train.output_dir = "output/" + __file__[:-3] + +train.max_iter = 90000 + +train.eval_period = 5000 + +train.log_period = 20 + +train.checkpointer.period = 5000 +train.checkpointer.max_to_keep = 2 + +train.clip_grad.enabled = True +train.clip_grad.params.max_norm = 0.1 +train.clip_grad.params.norm_type = 2 + +train.device = "cuda" + +optimizer.lr = 2e-4 +optimizer.betas = (0.9, 0.999) +optimizer.weight_decay = 1e-4 +optimizer.params.lr_factor_func = ( + lambda module_name: 0.1 + if "backbone" in module_name + or "reference_points" in module_name + or "sampling_offsets" in module_name + else 1 +) +optimizer.params.weight_decay_norm = None + +dataloader.train.num_workers = 16 + +dataloader.train.total_batch_size = 16 + + +train.amp.enabled = False +train.ddp.fp16_compression = False diff --git a/approach/ovod/APE/configs/COCO_Detection/deformable_deta/deformable_deta_r50_24ep.py b/approach/ovod/APE/configs/COCO_Detection/deformable_deta/deformable_deta_r50_24ep.py new file mode 100644 index 0000000000000000000000000000000000000000..b1f43c637a91b3336a6fd8405b63b3d145137472 --- /dev/null +++ b/approach/ovod/APE/configs/COCO_Detection/deformable_deta/deformable_deta_r50_24ep.py @@ -0,0 +1,47 @@ +from detrex.config import get_config + +from .models.deformable_deta_r50 import model + +dataloader = get_config("common/data/coco_detr.py").dataloader +lr_multiplier = get_config("common/coco_schedule.py").lr_multiplier_24ep +optimizer = get_config("common/optim.py").AdamW +train = get_config("common/train.py").train + +train.init_checkpoint = "detectron2://ImageNetPretrained/torchvision/R-50.pkl" +train.init_checkpoint = "models/torchvision/R-50.pkl" +train.output_dir = "output/" + __file__[:-3] + +train.max_iter = 180000 + +train.eval_period = 5000 + +train.log_period = 20 + +train.checkpointer.period = 5000 +train.checkpointer.max_to_keep = 2 + +train.clip_grad.enabled = True +train.clip_grad.params.max_norm = 0.1 +train.clip_grad.params.norm_type = 2 + +train.device = "cuda" + +optimizer.lr = 2e-4 +optimizer.betas = (0.9, 0.999) +optimizer.weight_decay = 1e-4 +optimizer.params.lr_factor_func = ( + lambda module_name: 0.1 + if "backbone" in module_name + or "reference_points" in module_name + or "sampling_offsets" in module_name + else 1 +) +optimizer.params.weight_decay_norm = None + +dataloader.train.num_workers = 16 + +dataloader.train.total_batch_size = 16 + + +train.amp.enabled = False +train.ddp.fp16_compression = False diff --git a/approach/ovod/APE/configs/COCO_Detection/deformable_deta/deformable_deta_vitb_clip_openai_lsj1024_cp_12ep.py b/approach/ovod/APE/configs/COCO_Detection/deformable_deta/deformable_deta_vitb_clip_openai_lsj1024_cp_12ep.py new file mode 100644 index 0000000000000000000000000000000000000000..4682cf6ce3a01741451768a7b38d8bde651183b7 --- /dev/null +++ b/approach/ovod/APE/configs/COCO_Detection/deformable_deta/deformable_deta_vitb_clip_openai_lsj1024_cp_12ep.py @@ -0,0 +1,20 @@ + + +from ...common.data.coco_lsj1024_cp import dataloader +from ...common.data.constants import constants +from .deformable_deta_vitb_lsj1024_12ep import lr_multiplier, model, optimizer, train + +model.pixel_mean = constants.openai_imagenet_rgb256_mean +model.pixel_std = constants.openai_imagenet_rgb256_std +model.input_format = "RGB" +dataloader.train.mapper.image_format = "RGB" + + + + +train.init_checkpoint = "models/CLIP/ViT-B-16.pt" + +train.output_dir = "output/" + __file__[:-3] +dataloader.evaluator.output_dir = train.output_dir +dataloader.train.mapper.output_dir = train.output_dir +dataloader.train.mapper.vis_period = 1 diff --git a/approach/ovod/APE/configs/COCO_Detection/deformable_deta/deformable_deta_vitb_lsj1024_12ep.py b/approach/ovod/APE/configs/COCO_Detection/deformable_deta/deformable_deta_vitb_lsj1024_12ep.py new file mode 100644 index 0000000000000000000000000000000000000000..9a0d18c44c6ce163545b6816e0c329acf9ea8240 --- /dev/null +++ b/approach/ovod/APE/configs/COCO_Detection/deformable_deta/deformable_deta_vitb_lsj1024_12ep.py @@ -0,0 +1,79 @@ +from functools import partial + +import torch.nn as nn + +from detectron2.config import LazyCall as L +from detectron2.modeling import SimpleFeaturePyramid, ViT +from detectron2.modeling.backbone.fpn import LastLevelMaxPool +from detectron2.modeling.backbone.vit import get_vit_lr_decay_rate + +from .....detectron2.configs.common.data.constants import constants +from .....detectron2.projects.ViTDet.configs.common.coco_loader_lsj import dataloader +from .deformable_deta_r50_12ep import lr_multiplier, model, optimizer, train + +model.pixel_mean = constants.imagenet_rgb256_mean +model.pixel_std = constants.imagenet_rgb256_std +model.input_format = "RGB" +dataloader.train.mapper.image_format = "RGB" +dataloader.train.total_batch_size = 16 + + +embed_dim, depth, num_heads, dp = 768, 12, 12, 0.1 +model.backbone = L(SimpleFeaturePyramid)( + net=L(ViT)( # Single-scale ViT backbone + img_size=1024, + patch_size=16, + embed_dim=embed_dim, + depth=depth, + num_heads=num_heads, + drop_path_rate=dp, + window_size=14, + mlp_ratio=4, + qkv_bias=True, + norm_layer=partial(nn.LayerNorm, eps=1e-6), + window_block_indexes=[ + 0, + 1, + 3, + 4, + 6, + 7, + 9, + 10, + ], + residual_block_indexes=[], + use_rel_pos=True, + out_feature="last_feat", + ), + in_feature="${.net.out_feature}", + out_channels=256, + scale_factors=(4.0, 2.0, 1.0, 0.5), + top_block=L(LastLevelMaxPool)(), + norm="LN", + square_pad=1024, +) + +model.neck = None + +optimizer.params.lr_factor_func = ( + lambda module_name: 0.1 + if "reference_points" in module_name or "sampling_offsets" in module_name + else get_vit_lr_decay_rate(module_name, lr_decay_rate=0.7, num_layers=12) + if "backbone" in module_name + else 1 +) +optimizer.params.overrides = {"pos_embed": {"weight_decay": 0.0}} + + +lr_multiplier.warmup_length = 1000 / train.max_iter + +train.amp.enabled = False +train.ddp.fp16_compression = False + +train.init_checkpoint = ( + "detectron2://ImageNetPretrained/MAE/mae_pretrain_vit_base.pth?matching_heuristics=True" +) +train.init_checkpoint = "models/MAE/mae_pretrain_vit_base.pth?matching_heuristics=True" + +train.output_dir = "output/" + __file__[:-3] +dataloader.evaluator.output_dir = train.output_dir diff --git a/approach/ovod/APE/configs/COCO_Detection/deformable_deta/deformable_deta_vitg_eva_lsj1024_12ep.py b/approach/ovod/APE/configs/COCO_Detection/deformable_deta/deformable_deta_vitg_eva_lsj1024_12ep.py new file mode 100644 index 0000000000000000000000000000000000000000..83334d0d3a490e8ac68218cc7ed9a3b355cc9e6d --- /dev/null +++ b/approach/ovod/APE/configs/COCO_Detection/deformable_deta/deformable_deta_vitg_eva_lsj1024_12ep.py @@ -0,0 +1,62 @@ +from functools import partial + +from ape.modeling.backbone.vit_eva import SimpleFeaturePyramid, ViT, get_vit_lr_decay_rate + +from ..common.coco_loader_lsj1280 import dataloader +from .deformable_deta_vitb_lsj1024_12ep import lr_multiplier, model, optimizer, train + +model.backbone.update( + _target_=SimpleFeaturePyramid, +) +model.backbone.net.update( + _target_=ViT, +) + +dataloader.train.total_batch_size = 16 + +model.backbone.net.beit_like_qkv_bias = True +model.backbone.net.beit_like_gamma = False +model.backbone.net.freeze_patch_embed = True +model.backbone.square_pad = 1280 +model.backbone.net.img_size = 1280 +model.backbone.net.patch_size = 16 +model.backbone.net.window_size = 16 +model.backbone.net.embed_dim = 1408 +model.backbone.net.depth = 40 +model.backbone.net.num_heads = 16 +model.backbone.net.mlp_ratio = 6144 / 1408 +model.backbone.net.use_act_checkpoint = True +model.backbone.net.drop_path_rate = 0.6 # 0.5 --> 0.6 +model.backbone.net.window_block_indexes = ( + list(range(0, 3)) + + list(range(4, 7)) + + list(range(8, 11)) + + list(range(12, 15)) + + list(range(16, 19)) + + list(range(20, 23)) + + list(range(24, 27)) + + list(range(28, 31)) + + list(range(32, 35)) + + list(range(36, 39)) +) + +optimizer.lr = 2e-4 +optimizer.params.lr_factor_func = ( + lambda module_name: 0.1 + if "reference_points" in module_name or "sampling_offsets" in module_name + else get_vit_lr_decay_rate(module_name, lr_decay_rate=0.9, num_layers=40) + if "backbone" in module_name + else 1 +) +optimizer.params.overrides = {"pos_embed": {"weight_decay": 0.0}} +optimizer.params.weight_decay_norm = None + +train.amp.enabled = False +train.ddp.fp16_compression = False + +model.backbone.net.use_act_checkpoint = False +model.backbone.net.frozen_stages = 41 + +train.init_checkpoint = "models/BAAI/EVA/eva_o365.pth?matching_heuristics=True" +train.output_dir = "output/" + __file__[:-3] +dataloader.evaluator.output_dir = train.output_dir diff --git a/approach/ovod/APE/configs/COCO_Detection/deformable_deta/deformable_deta_vitg_eva_lsj1024_cp_12ep.py b/approach/ovod/APE/configs/COCO_Detection/deformable_deta/deformable_deta_vitg_eva_lsj1024_cp_12ep.py new file mode 100644 index 0000000000000000000000000000000000000000..5e380895771e094b6374318aabd26ec0b8291e96 --- /dev/null +++ b/approach/ovod/APE/configs/COCO_Detection/deformable_deta/deformable_deta_vitg_eva_lsj1024_cp_12ep.py @@ -0,0 +1,12 @@ +from ....configs.common.data.coco_lsj1024_cp import dataloader +from .deformable_deta_vitg_eva_lsj1024_12ep import lr_multiplier, model, optimizer, train + +train.amp.enabled = True +train.ddp.fp16_compression = True + +model.backbone.net.use_act_checkpoint = True +model.backbone.net.frozen_stages = 20 + +train.output_dir = "output/" + __file__[:-3] +dataloader.evaluator.output_dir = train.output_dir +dataloader.train.mapper.output_dir = train.output_dir diff --git a/approach/ovod/APE/configs/COCO_Detection/deformable_deta/deformable_deta_vitl_eva02_lsj1024_cp_12ep.py b/approach/ovod/APE/configs/COCO_Detection/deformable_deta/deformable_deta_vitl_eva02_lsj1024_cp_12ep.py new file mode 100644 index 0000000000000000000000000000000000000000..fde4dca6a35dd6a15f038495a5bd3f2de83bf18f --- /dev/null +++ b/approach/ovod/APE/configs/COCO_Detection/deformable_deta/deformable_deta_vitl_eva02_lsj1024_cp_12ep.py @@ -0,0 +1,101 @@ +from functools import partial + +import torch.nn as nn + +from detectron2.config import LazyCall as L +from detectron2.data.catalog import MetadataCatalog +from detectron2.layers import ShapeSpec +from detectron2.modeling.backbone.fpn import LastLevelMaxPool +from detrex.config import get_config +from ape.modeling.backbone.vit_eva02 import SimpleFeaturePyramid, ViT, get_vit_lr_decay_rate + +from .....detectron2.configs.common.data.constants import constants +from ...common.data.coco_instance_lsj1024_cp import dataloader +from .models.deformable_deta_r50 import model + +model.pixel_mean = constants.imagenet_rgb256_mean +model.pixel_std = constants.imagenet_rgb256_std +model.input_format = "RGB" + +model.backbone = L(SimpleFeaturePyramid)( + net=L(ViT)( # Single-scale ViT backbone + img_size=1024, + patch_size=16, + embed_dim=1024, + depth=24, + num_heads=16, + drop_path_rate=0.4, + window_size=16, + mlp_ratio=4 * 2 / 3, + qkv_bias=True, + norm_layer=partial(nn.LayerNorm, eps=1e-6), + window_block_indexes=list(range(0, 5)) + + list(range(6, 11)) + + list(range(12, 17)) + + list(range(18, 23)), + residual_block_indexes=[], + use_rel_pos=True, + out_feature="last_feat", + use_act_checkpoint=False, + xattn=True, + ), + in_feature="${.net.out_feature}", + out_channels=256, + scale_factors=(4.0, 2.0, 1.0, 0.5), + top_block=L(LastLevelMaxPool)(), + norm="LN", + square_pad=1024, +) + +model.neck = None + +optimizer = get_config("common/optim.py").AdamW +optimizer.params.lr_factor_func = ( + lambda module_name: 0.1 + if "reference_points" in module_name or "sampling_offsets" in module_name + else get_vit_lr_decay_rate(module_name, lr_decay_rate=0.8, num_layers=24) + if "backbone" in module_name + else 1 +) +optimizer.params.overrides = {"pos_embed": {"weight_decay": 0.0}} +optimizer.params.weight_decay_norm = None + +optimizer.lr = 2e-4 +optimizer.weight_decay = 1e-4 + +train = get_config("common/train.py").train +train.max_iter = 90000 +train.eval_period = 5000 +train.log_period = 20 + +train.checkpointer.period = 5000 +train.checkpointer.max_to_keep = 2 + +train.clip_grad.enabled = True +train.clip_grad.params.max_norm = 0.1 +train.clip_grad.params.norm_type = 2 + +train.device = "cuda" + +train.init_checkpoint = ( + "models/Yunxin-CV/EVA-02/eva02/pt/eva02_L_pt_in21k_p14to16.pt?matching_heuristics=True" +) + +train.amp.enabled = True +train.ddp.fp16_compression = True + +lr_multiplier = get_config("common/coco_schedule.py").lr_multiplier_12ep +lr_multiplier.scheduler.milestones = [75000, 90000] +lr_multiplier.warmup_length = 1000 / train.max_iter + +dataloader.train.num_workers = 16 +dataloader.train.total_batch_size = 16 +dataloader.train.mapper.image_format = "RGB" + +if isinstance(dataloader.train.dataset.names, str): + model.metadata = MetadataCatalog.get(dataloader.train.dataset.names) +else: + model.metadata = MetadataCatalog.get(dataloader.train.dataset.names[0]) + +train.output_dir = "output/" + __file__[:-3] +dataloader.train.mapper.output_dir = train.output_dir diff --git a/approach/ovod/APE/configs/COCO_Detection/deformable_deta/deformable_deta_vitl_eva_lsj1024_cp_12ep.py b/approach/ovod/APE/configs/COCO_Detection/deformable_deta/deformable_deta_vitl_eva_lsj1024_cp_12ep.py new file mode 100644 index 0000000000000000000000000000000000000000..244c3d90b3d1ca145d73418bd57369e820f47101 --- /dev/null +++ b/approach/ovod/APE/configs/COCO_Detection/deformable_deta/deformable_deta_vitl_eva_lsj1024_cp_12ep.py @@ -0,0 +1,25 @@ +from detectron2.modeling.backbone.vit import get_vit_lr_decay_rate + +from ...common.data.coco_lsj1024_cp import dataloader +from .deformable_deta_vitl_lsj1024_12ep import lr_multiplier, model, optimizer, train + +train.init_checkpoint = "models/BAAI/EVA/eva_l_psz14to16.pt?matching_heuristics=True" + +optimizer.params.lr_factor_func = ( + lambda module_name: 0.1 + if "reference_points" in module_name or "sampling_offsets" in module_name + else get_vit_lr_decay_rate(module_name, lr_decay_rate=0.8, num_layers=24) + if "backbone" in module_name + else 1 +) + +optimizer.lr = 2e-4 +optimizer.weight_decay = 1e-4 + +train.amp.enabled = True +train.ddp.fp16_compression = True +model.backbone.net.use_act_checkpoint = False + +train.output_dir = "output/" + __file__[:-3] +dataloader.evaluator.output_dir = train.output_dir +dataloader.train.mapper.output_dir = train.output_dir diff --git a/approach/ovod/APE/configs/COCO_Detection/deformable_deta/deformable_deta_vitl_lsj1024_12ep.py b/approach/ovod/APE/configs/COCO_Detection/deformable_deta/deformable_deta_vitl_lsj1024_12ep.py new file mode 100644 index 0000000000000000000000000000000000000000..67b1fa37ae3170065681d3e1746d39286a1403f9 --- /dev/null +++ b/approach/ovod/APE/configs/COCO_Detection/deformable_deta/deformable_deta_vitl_lsj1024_12ep.py @@ -0,0 +1,35 @@ +from detectron2.modeling.backbone.vit import get_vit_lr_decay_rate + +from .deformable_deta_vitb_lsj1024_12ep import dataloader, lr_multiplier, model, optimizer, train + +model.backbone.net.embed_dim = 1024 +model.backbone.net.depth = 24 +model.backbone.net.num_heads = 16 +model.backbone.net.drop_path_rate = 0.4 +model.backbone.net.window_block_indexes = ( + list(range(0, 5)) + list(range(6, 11)) + list(range(12, 17)) + list(range(18, 23)) +) + +optimizer.params.lr_factor_func = ( + lambda module_name: 0.1 + if "reference_points" in module_name or "sampling_offsets" in module_name + else get_vit_lr_decay_rate(module_name, lr_decay_rate=0.8, num_layers=24) + if "backbone" in module_name + else 1 +) +optimizer.params.overrides = {"pos_embed": {"weight_decay": 0.0}} + +optimizer.lr = 2e-4 +optimizer.weight_decay = 0.05 + +train.init_checkpoint = ( + "detectron2://ImageNetPretrained/MAE/mae_pretrain_vit_large.pth?matching_heuristics=True" +) +train.init_checkpoint = "models/MAE/mae_pretrain_vit_large.pth?matching_heuristics=True" + +train.amp.enabled = True +train.ddp.fp16_compression = True +model.backbone.net.use_act_checkpoint = False + +train.output_dir = "output/" + __file__[:-3] +dataloader.evaluator.output_dir = train.output_dir diff --git a/approach/ovod/APE/configs/COCO_Detection/deformable_deta/models/deformable_deta_r50.py b/approach/ovod/APE/configs/COCO_Detection/deformable_deta/models/deformable_deta_r50.py new file mode 100644 index 0000000000000000000000000000000000000000..35ba17f3aac5deb920f22fcd7c083794170e8fb5 --- /dev/null +++ b/approach/ovod/APE/configs/COCO_Detection/deformable_deta/models/deformable_deta_r50.py @@ -0,0 +1,124 @@ +import torch.nn as nn + +from detectron2.config import LazyCall as L +from detectron2.layers import ShapeSpec +from detectron2.modeling.backbone import BasicStem, ResNet +from detrex.layers import PositionEmbeddingSine +from detrex.modeling.matcher import HungarianMatcher +from detrex.modeling.neck import ChannelMapper +from ape.modeling.deta import ( + DeformableCriterion, + DeformableDETR, + DeformableDetrTransformer, + DeformableDetrTransformerDecoder, + DeformableDetrTransformerEncoder, + Stage1Assigner, + Stage2Assigner, +) + + + +model = L(DeformableDETR)( + backbone=L(ResNet)( + stem=L(BasicStem)(in_channels=3, out_channels=64, norm="FrozenBN"), + stages=L(ResNet.make_default_stages)( + depth=50, + stride_in_1x1=False, + norm="FrozenBN", + ), + out_features=["res3", "res4", "res5"], + freeze_at=2, + ), + position_embedding=L(PositionEmbeddingSine)( + num_pos_feats=128, + temperature=10000, + normalize=True, + offset=-0.5, + ), + neck=L(ChannelMapper)( + input_shapes={ + "res3": ShapeSpec(channels=512), + "res4": ShapeSpec(channels=1024), + "res5": ShapeSpec(channels=2048), + }, + in_features=["res3", "res4", "res5"], + out_channels=256, + num_outs=5, + kernel_size=1, + norm_layer=L(nn.GroupNorm)(num_groups=32, num_channels=256), + ), + transformer=L(DeformableDetrTransformer)( + encoder=L(DeformableDetrTransformerEncoder)( + embed_dim=256, + num_heads=8, + feedforward_dim=2048, + attn_dropout=0.0, + ffn_dropout=0.0, + num_layers=6, + post_norm=False, + num_feature_levels="${..num_feature_levels}", + ), + decoder=L(DeformableDetrTransformerDecoder)( + embed_dim=256, + num_heads=8, + feedforward_dim=2048, + attn_dropout=0.0, + ffn_dropout=0.0, + num_layers=6, + return_intermediate=True, + num_feature_levels="${..num_feature_levels}", + ), + as_two_stage="${..as_two_stage}", + num_feature_levels=5, + two_stage_num_proposals="${..num_queries}", + assign_first_stage=True, + ), + embed_dim=256, + num_classes=80, + num_queries=900, + aux_loss=True, + with_box_refine=True, + as_two_stage=True, + criterion=L(DeformableCriterion)( + num_classes=80, + matcher=L(HungarianMatcher)( + cost_class=2.0, + cost_bbox=5.0, + cost_giou=2.0, + cost_class_type="focal_loss_cost", + alpha=0.25, + gamma=2.0, + ), + matcher_stage1=L(Stage1Assigner)( + t_low=0.3, + t_high=0.7, + max_k=4, + ), + matcher_stage2=L(Stage2Assigner)( + num_queries="${...num_queries}", + num_classes="${...num_classes}", + max_k=4, + ), + weight_dict={ + "loss_class": 1.0, + "loss_bbox": 5.0, + "loss_giou": 2.0, + }, + loss_class_type="focal_loss", + alpha=0.25, + gamma=2.0, + ), + pixel_mean=[123.675, 116.280, 103.530], + pixel_std=[58.395, 57.120, 57.375], + select_box_nums_for_evaluation=100, + input_format="RGB", +) + +if model.aux_loss: + weight_dict = model.criterion.weight_dict + aux_weight_dict = {} + for i in range(model.transformer.decoder.num_layers - 1): + aux_weight_dict.update({k + f"_{i}": v for k, v in weight_dict.items()}) + aux_weight_dict.update({k + "_enc": v for k, v in weight_dict.items()}) + weight_dict.update(aux_weight_dict) + model.criterion.weight_dict = weight_dict diff --git a/approach/ovod/APE/configs/COCO_Detection/deformable_detr/deformable_detr_r50_50ep.py b/approach/ovod/APE/configs/COCO_Detection/deformable_detr/deformable_detr_r50_50ep.py new file mode 100644 index 0000000000000000000000000000000000000000..62b0e8f8afd301d98744147e40ce954845f7a8dd --- /dev/null +++ b/approach/ovod/APE/configs/COCO_Detection/deformable_detr/deformable_detr_r50_50ep.py @@ -0,0 +1,38 @@ +from detrex.config import get_config + +from .models.deformable_detr_r50 import model + +dataloader = get_config("common/data/coco_detr.py").dataloader +lr_multiplier = get_config("common/coco_schedule.py").lr_multiplier_50ep +optimizer = get_config("common/optim.py").AdamW +train = get_config("common/train.py").train + +train.init_checkpoint = "detectron2://ImageNetPretrained/torchvision/R-50.pkl" +train.output_dir = "./output/deformable_detr_r50_50ep" + +train.max_iter = 375000 + +train.eval_period = 5000 + +train.log_period = 20 + +train.checkpointer.period = 5000 +train.checkpointer.max_to_keep = 2 + +train.clip_grad.enabled = True +train.clip_grad.params.max_norm = 0.1 +train.clip_grad.params.norm_type = 2 + +train.device = "cuda" +model.device = train.device + +optimizer.lr = 1e-4 +optimizer.betas = (0.9, 0.999) +optimizer.weight_decay = 1e-4 +optimizer.params.lr_factor_func = lambda module_name: 0.1 if "backbone" in module_name else 1 + +dataloader.train.num_workers = 16 + +dataloader.train.total_batch_size = 16 + +dataloader.evaluator.output_dir = train.output_dir diff --git a/approach/ovod/APE/configs/COCO_Detection/deformable_detr/deformable_detr_r50_two_stage_50ep.py b/approach/ovod/APE/configs/COCO_Detection/deformable_detr/deformable_detr_r50_two_stage_50ep.py new file mode 100644 index 0000000000000000000000000000000000000000..f4a7e114ae0603f283d2177d1f9d42e62f60d748 --- /dev/null +++ b/approach/ovod/APE/configs/COCO_Detection/deformable_detr/deformable_detr_r50_two_stage_50ep.py @@ -0,0 +1,7 @@ +from .deformable_detr_r50_50ep import dataloader, lr_multiplier, model, optimizer, train + +model.with_box_refine = True +model.as_two_stage = True + +train.init_checkpoint = "detectron2://ImageNetPretrained/torchvision/R-50.pkl" +train.output_dir = "./output/deformable_detr_r50_two_stage_50ep" diff --git a/approach/ovod/APE/configs/COCO_Detection/deformable_detr/deformable_detr_r50_with_box_refinement_50ep.py b/approach/ovod/APE/configs/COCO_Detection/deformable_detr/deformable_detr_r50_with_box_refinement_50ep.py new file mode 100644 index 0000000000000000000000000000000000000000..74c7d604306ddc41afe32b45e3bf51481b2bf861 --- /dev/null +++ b/approach/ovod/APE/configs/COCO_Detection/deformable_detr/deformable_detr_r50_with_box_refinement_50ep.py @@ -0,0 +1,6 @@ +from .deformable_detr_r50_50ep import dataloader, lr_multiplier, model, optimizer, train + +model.with_box_refine = True + +train.init_checkpoint = "detectron2://ImageNetPretrained/torchvision/R-50.pkl" +train.output_dir = "./output/deformable_detr_with_box_refinement_50ep" diff --git a/approach/ovod/APE/configs/COCO_Detection/deformable_detr/improved_deformable_detr_r50_12ep.py b/approach/ovod/APE/configs/COCO_Detection/deformable_detr/improved_deformable_detr_r50_12ep.py new file mode 100644 index 0000000000000000000000000000000000000000..820ae77da05bbebb46ba8d27865df6a2e78ef96e --- /dev/null +++ b/approach/ovod/APE/configs/COCO_Detection/deformable_detr/improved_deformable_detr_r50_12ep.py @@ -0,0 +1,46 @@ +from detrex.config import get_config + +from .models.improved_deformable_detr_r50 import model + +dataloader = get_config("common/data/coco_detr.py").dataloader +lr_multiplier = get_config("common/coco_schedule.py").lr_multiplier_12ep +lr_multiplier.scheduler.milestones = [75000, 90000] +optimizer = get_config("common/optim.py").AdamW +train = get_config("common/train.py").train + +train.init_checkpoint = "detectron2://ImageNetPretrained/torchvision/R-50.pkl" +train.output_dir = "./output/improved_deformable_detr_r50_12ep" + +train.max_iter = 90000 + +train.eval_period = 5000 + +train.log_period = 20 + +train.checkpointer.period = 5000 +train.checkpointer.max_to_keep = 2 + +train.clip_grad.enabled = True +train.clip_grad.params.max_norm = 0.1 +train.clip_grad.params.norm_type = 2 + +train.device = "cuda" +model.device = train.device + +optimizer.lr = 2e-4 +optimizer.betas = (0.9, 0.999) +optimizer.weight_decay = 1e-4 +optimizer.params.lr_factor_func = ( + lambda module_name: 0.1 + if "backbone" in module_name + or "reference_points" in module_name + or "sampling_offsets" in module_name + else 1 +) +optimizer.params.weight_decay_norm = None + +dataloader.train.num_workers = 16 + +dataloader.train.total_batch_size = 16 + +dataloader.evaluator.output_dir = train.output_dir diff --git a/approach/ovod/APE/configs/COCO_Detection/deformable_detr/improved_deformable_detr_r50_50ep.py b/approach/ovod/APE/configs/COCO_Detection/deformable_detr/improved_deformable_detr_r50_50ep.py new file mode 100644 index 0000000000000000000000000000000000000000..e740801023da92b41a299e73fba8d724f7c436d9 --- /dev/null +++ b/approach/ovod/APE/configs/COCO_Detection/deformable_detr/improved_deformable_detr_r50_50ep.py @@ -0,0 +1,45 @@ +from detrex.config import get_config + +from .models.improved_deformable_detr_r50 import model + +dataloader = get_config("common/data/coco_detr.py").dataloader +lr_multiplier = get_config("common/coco_schedule.py").lr_multiplier_50ep +optimizer = get_config("common/optim.py").AdamW +train = get_config("common/train.py").train + +train.init_checkpoint = "detectron2://ImageNetPretrained/torchvision/R-50.pkl" +train.output_dir = "./output/improved_deformable_detr_r50_50ep" + +train.max_iter = 375000 + +train.eval_period = 5000 + +train.log_period = 20 + +train.checkpointer.period = 5000 +train.checkpointer.max_to_keep = 2 + +train.clip_grad.enabled = True +train.clip_grad.params.max_norm = 0.1 +train.clip_grad.params.norm_type = 2 + +train.device = "cuda" +model.device = train.device + +optimizer.lr = 2e-4 +optimizer.betas = (0.9, 0.999) +optimizer.weight_decay = 1e-4 +optimizer.params.lr_factor_func = ( + lambda module_name: 0.1 + if "backbone" in module_name + or "reference_points" in module_name + or "sampling_offsets" in module_name + else 1 +) +optimizer.params.weight_decay_norm = None + +dataloader.train.num_workers = 16 + +dataloader.train.total_batch_size = 16 + +dataloader.evaluator.output_dir = train.output_dir diff --git a/approach/ovod/APE/configs/COCO_Detection/deformable_detr/improved_deformable_detr_r50_two_stage_12ep.py b/approach/ovod/APE/configs/COCO_Detection/deformable_detr/improved_deformable_detr_r50_two_stage_12ep.py new file mode 100644 index 0000000000000000000000000000000000000000..8d1692e4f0c36668d66bc2ebaeafdefd6f9f1911 --- /dev/null +++ b/approach/ovod/APE/configs/COCO_Detection/deformable_detr/improved_deformable_detr_r50_two_stage_12ep.py @@ -0,0 +1,7 @@ +from .improved_deformable_detr_r50_12ep import dataloader, lr_multiplier, model, optimizer, train + +model.with_box_refine = True +model.as_two_stage = True + +train.init_checkpoint = "detectron2://ImageNetPretrained/torchvision/R-50.pkl" +train.output_dir = "./output/improved_deformable_detr_r50_two_stage_12ep" diff --git a/approach/ovod/APE/configs/COCO_Detection/deformable_detr/improved_deformable_detr_r50_two_stage_50ep.py b/approach/ovod/APE/configs/COCO_Detection/deformable_detr/improved_deformable_detr_r50_two_stage_50ep.py new file mode 100644 index 0000000000000000000000000000000000000000..a6b528cb9c4154f017a0288578587b2a1fa0dec9 --- /dev/null +++ b/approach/ovod/APE/configs/COCO_Detection/deformable_detr/improved_deformable_detr_r50_two_stage_50ep.py @@ -0,0 +1,7 @@ +from .improved_deformable_detr_r50_50ep import dataloader, lr_multiplier, model, optimizer, train + +model.with_box_refine = True +model.as_two_stage = True + +train.init_checkpoint = "detectron2://ImageNetPretrained/torchvision/R-50.pkl" +train.output_dir = "./output/improved_deformable_detr_r50_two_stage_50ep" diff --git a/approach/ovod/APE/configs/COCO_Detection/deformable_detr/models/deformable_detr_r50.py b/approach/ovod/APE/configs/COCO_Detection/deformable_detr/models/deformable_detr_r50.py new file mode 100644 index 0000000000000000000000000000000000000000..d421cc32ddb7c411010093b7f4ae8db52bca1c88 --- /dev/null +++ b/approach/ovod/APE/configs/COCO_Detection/deformable_detr/models/deformable_detr_r50.py @@ -0,0 +1,109 @@ +import torch.nn as nn + +from detectron2.config import LazyCall as L +from detectron2.layers import ShapeSpec +from detectron2.modeling.backbone import BasicStem, ResNet +from detrex.layers import PositionEmbeddingSine +from detrex.modeling.matcher import HungarianMatcher +from detrex.modeling.neck import ChannelMapper +from projects.deformable_detr.modeling import ( + DeformableCriterion, + DeformableDETR, + DeformableDetrTransformer, + DeformableDetrTransformerDecoder, + DeformableDetrTransformerEncoder, +) + +model = L(DeformableDETR)( + backbone=L(ResNet)( + stem=L(BasicStem)(in_channels=3, out_channels=64, norm="FrozenBN"), + stages=L(ResNet.make_default_stages)( + depth=50, + stride_in_1x1=False, + norm="FrozenBN", + ), + out_features=["res3", "res4", "res5"], + freeze_at=1, + ), + position_embedding=L(PositionEmbeddingSine)( + num_pos_feats=128, + temperature=10000, + normalize=True, + offset=-0.5, + ), + neck=L(ChannelMapper)( + input_shapes={ + "res3": ShapeSpec(channels=512), + "res4": ShapeSpec(channels=1024), + "res5": ShapeSpec(channels=2048), + }, + in_features=["res3", "res4", "res5"], + out_channels=256, + num_outs=4, + kernel_size=1, + norm_layer=L(nn.GroupNorm)(num_groups=32, num_channels=256), + ), + transformer=L(DeformableDetrTransformer)( + encoder=L(DeformableDetrTransformerEncoder)( + embed_dim=256, + num_heads=8, + feedforward_dim=1024, + attn_dropout=0.1, + ffn_dropout=0.1, + num_layers=6, + post_norm=False, + num_feature_levels="${..num_feature_levels}", + ), + decoder=L(DeformableDetrTransformerDecoder)( + embed_dim=256, + num_heads=8, + feedforward_dim=1024, + attn_dropout=0.1, + ffn_dropout=0.1, + num_layers=6, + return_intermediate=True, + num_feature_levels="${..num_feature_levels}", + ), + as_two_stage="${..as_two_stage}", + num_feature_levels=4, + two_stage_num_proposals="${..num_queries}", + ), + embed_dim=256, + num_classes=80, + num_queries=300, + aux_loss=True, + with_box_refine=False, + as_two_stage=False, + criterion=L(DeformableCriterion)( + num_classes=80, + matcher=L(HungarianMatcher)( + cost_class=2.0, + cost_bbox=5.0, + cost_giou=2.0, + cost_class_type="focal_loss_cost", + alpha=0.25, + gamma=2.0, + ), + weight_dict={ + "loss_class": 1.0, + "loss_bbox": 5.0, + "loss_giou": 2.0, + }, + loss_class_type="focal_loss", + alpha=0.25, + gamma=2.0, + ), + pixel_mean=[123.675, 116.280, 103.530], + pixel_std=[58.395, 57.120, 57.375], + select_box_nums_for_evaluation=300, + device="cuda", +) + +if model.aux_loss: + weight_dict = model.criterion.weight_dict + aux_weight_dict = {} + for i in range(model.transformer.decoder.num_layers - 1): + aux_weight_dict.update({k + f"_{i}": v for k, v in weight_dict.items()}) + aux_weight_dict.update({k + "_enc": v for k, v in weight_dict.items()}) + weight_dict.update(aux_weight_dict) + model.criterion.weight_dict = weight_dict diff --git a/approach/ovod/APE/configs/COCO_Detection/deformable_detr/models/improved_deformable_detr_r50.py b/approach/ovod/APE/configs/COCO_Detection/deformable_detr/models/improved_deformable_detr_r50.py new file mode 100644 index 0000000000000000000000000000000000000000..40f90667d48a78e5fea2267c9c055d88d8ead87e --- /dev/null +++ b/approach/ovod/APE/configs/COCO_Detection/deformable_detr/models/improved_deformable_detr_r50.py @@ -0,0 +1,109 @@ +import torch.nn as nn + +from detectron2.config import LazyCall as L +from detectron2.layers import ShapeSpec +from detectron2.modeling.backbone import BasicStem, ResNet +from detrex.layers import PositionEmbeddingSine +from detrex.modeling.matcher import HungarianMatcher +from detrex.modeling.neck import ChannelMapper +from projects.deformable_detr.modeling import ( + DeformableCriterion, + DeformableDETR, + DeformableDetrTransformer, + DeformableDetrTransformerDecoder, + DeformableDetrTransformerEncoder, +) + +model = L(DeformableDETR)( + backbone=L(ResNet)( + stem=L(BasicStem)(in_channels=3, out_channels=64, norm="FrozenBN"), + stages=L(ResNet.make_default_stages)( + depth=50, + stride_in_1x1=False, + norm="FrozenBN", + ), + out_features=["res3", "res4", "res5"], + freeze_at=2, + ), + position_embedding=L(PositionEmbeddingSine)( + num_pos_feats=128, + temperature=10000, + normalize=True, + offset=-0.5, + ), + neck=L(ChannelMapper)( + input_shapes={ + "res3": ShapeSpec(channels=512), + "res4": ShapeSpec(channels=1024), + "res5": ShapeSpec(channels=2048), + }, + in_features=["res3", "res4", "res5"], + out_channels=256, + num_outs=5, + kernel_size=1, + norm_layer=L(nn.GroupNorm)(num_groups=32, num_channels=256), + ), + transformer=L(DeformableDetrTransformer)( + encoder=L(DeformableDetrTransformerEncoder)( + embed_dim=256, + num_heads=8, + feedforward_dim=2048, + attn_dropout=0.0, + ffn_dropout=0.0, + num_layers=6, + post_norm=False, + num_feature_levels="${..num_feature_levels}", + ), + decoder=L(DeformableDetrTransformerDecoder)( + embed_dim=256, + num_heads=8, + feedforward_dim=2048, + attn_dropout=0.0, + ffn_dropout=0.0, + num_layers=6, + return_intermediate=True, + num_feature_levels="${..num_feature_levels}", + ), + as_two_stage="${..as_two_stage}", + num_feature_levels=5, + two_stage_num_proposals="${..num_queries}", + ), + embed_dim=256, + num_classes=80, + num_queries=900, + aux_loss=True, + with_box_refine=False, + as_two_stage=False, + criterion=L(DeformableCriterion)( + num_classes=80, + matcher=L(HungarianMatcher)( + cost_class=2.0, + cost_bbox=5.0, + cost_giou=2.0, + cost_class_type="focal_loss_cost", + alpha=0.25, + gamma=2.0, + ), + weight_dict={ + "loss_class": 1.0, + "loss_bbox": 5.0, + "loss_giou": 2.0, + }, + loss_class_type="focal_loss", + alpha=0.25, + gamma=2.0, + ), + pixel_mean=[123.675, 116.280, 103.530], + pixel_std=[58.395, 57.120, 57.375], + select_box_nums_for_evaluation=300, + device="cuda", +) + +if model.aux_loss: + weight_dict = model.criterion.weight_dict + aux_weight_dict = {} + for i in range(model.transformer.decoder.num_layers - 1): + aux_weight_dict.update({k + f"_{i}": v for k, v in weight_dict.items()}) + aux_weight_dict.update({k + "_enc": v for k, v in weight_dict.items()}) + weight_dict.update(aux_weight_dict) + model.criterion.weight_dict = weight_dict diff --git a/approach/ovod/APE/configs/COCO_InstanceSegmentation/ape_deta/ape_deta_r50_12ep.py b/approach/ovod/APE/configs/COCO_InstanceSegmentation/ape_deta/ape_deta_r50_12ep.py new file mode 100644 index 0000000000000000000000000000000000000000..e044aabfe60a0eff3fcd41960a2d449f4680a91d --- /dev/null +++ b/approach/ovod/APE/configs/COCO_InstanceSegmentation/ape_deta/ape_deta_r50_12ep.py @@ -0,0 +1,63 @@ +from detectron2.config import LazyCall as L +from detrex.config import get_config +from ape.modeling.text import EVA01CLIP + +from ...common.data.coco_instance import dataloader +from .models.ape_deta_r50 import model + +lr_multiplier = get_config("common/coco_schedule.py").lr_multiplier_12ep +lr_multiplier.scheduler.milestones = [75000, 90000] +optimizer = get_config("common/optim.py").AdamW +train = get_config("common/train.py").train + +train.init_checkpoint = "detectron2://ImageNetPretrained/torchvision/R-50.pkl" +train.init_checkpoint = "models/torchvision/R-50.pkl" + +train.max_iter = 90000 + +train.eval_period = 5000 + +train.log_period = 20 + +train.checkpointer.period = 5000 +train.checkpointer.max_to_keep = 2 + +train.clip_grad.enabled = True +train.clip_grad.params.max_norm = 0.1 +train.clip_grad.params.norm_type = 2 + +train.device = "cuda" + +optimizer.lr = 2e-4 +optimizer.betas = (0.9, 0.999) +optimizer.weight_decay = 1e-4 +optimizer.params.lr_factor_func = ( + lambda module_name: 0.1 + if "backbone" in module_name + or "reference_points" in module_name + or "sampling_offsets" in module_name + else 1 +) +optimizer.params.weight_decay_norm = None + +dataloader.train.num_workers = 16 + +dataloader.train.total_batch_size = 16 + +dataloader.train.mapper.use_instance_mask = True + +train.amp.enabled = True +train.ddp.fp16_compression = True + +model.model_vision.dataset_prompts = ["name"] +model.model_vision.dataset_names = ["coco_2017"] +model.model_vision.dataset_metas = dataloader.train.dataset.names + +train.output_dir = "output/" + __file__[:-3] + +model.model_language = L(EVA01CLIP)( + clip_model="EVA_CLIP_g_14_X", cache_dir="models/BAAI/EVA/eva_clip_psz14.pt" +) +model.model_vision.embed_dim_language = 1024 +model.model_vision.text_feature_reduce_type = "last" +model.model_vision.text_feature_reduce_before_fusion = True diff --git a/approach/ovod/APE/configs/COCO_InstanceSegmentation/ape_deta/ape_deta_r50_vlf_12ep.py b/approach/ovod/APE/configs/COCO_InstanceSegmentation/ape_deta/ape_deta_r50_vlf_12ep.py new file mode 100644 index 0000000000000000000000000000000000000000..10ab968bd7715eb2ae402b82e61d8c5c999e7d9c --- /dev/null +++ b/approach/ovod/APE/configs/COCO_InstanceSegmentation/ape_deta/ape_deta_r50_vlf_12ep.py @@ -0,0 +1,46 @@ +from detectron2.config import LazyCall as L +from ape.layers import VisionLanguageFusion +from ape.modeling.ape_deta import ( + DeformableDETRSegmVL, + DeformableDetrTransformerDecoderVL, + DeformableDetrTransformerEncoderVL, + DeformableDetrTransformerVL, +) + +from .ape_deta_r50_12ep import dataloader, lr_multiplier, model, optimizer, train + +model.model_vision.update( + _target_=DeformableDETRSegmVL, +) +model.model_vision.transformer.update( + _target_=DeformableDetrTransformerVL, +) +model.model_vision.transformer.encoder.update( + _target_=DeformableDetrTransformerEncoderVL, +) +model.model_vision.transformer.decoder.update( + _target_=DeformableDetrTransformerDecoderVL, +) + +model.model_vision.transformer.encoder.vl_layer = L(VisionLanguageFusion)( + v_dim="${....embed_dim}", + l_dim="${....embed_dim_language}", + embed_dim=2048, + num_heads=8, + dropout=0.1, + drop_path=0.0, + init_values=1.0 / 6, + stable_softmax_2d=True, + clamp_min_for_underflow=True, + clamp_max_for_overflow=True, + use_checkpoint=True, +) + +model.model_vision.text_feature_bank = True +model.model_vision.text_feature_reduce_before_fusion = True +model.model_vision.text_feature_batch_repeat = True +model.model_vision.expression_cumulative_gt_class = True +model.model_vision.name_prompt_fusion_type = "zero" + +train.output_dir = "output/" + __file__[:-3] +model.model_vision.vis_period = 12800 diff --git a/approach/ovod/APE/configs/COCO_InstanceSegmentation/ape_deta/ape_deta_vite_eva02_clip_lsj1536_cp_64x90k.py b/approach/ovod/APE/configs/COCO_InstanceSegmentation/ape_deta/ape_deta_vite_eva02_clip_lsj1536_cp_64x90k.py new file mode 100644 index 0000000000000000000000000000000000000000..e75ac75f379863793cea75d97ab3abbe08df13e7 --- /dev/null +++ b/approach/ovod/APE/configs/COCO_InstanceSegmentation/ape_deta/ape_deta_vite_eva02_clip_lsj1536_cp_64x90k.py @@ -0,0 +1,85 @@ +from detectron2.config import LazyCall as L +from detectron2.layers import ShapeSpec +from detrex.config import get_config +from ape.modeling.backbone.vit import get_vit_lr_decay_rate +from ape.modeling.text import EVA02CLIP + +from .....detectron2.configs.common.data.constants import constants +from ...common.backbone.vite_eva02_clip_1536 import backbone +from ...common.data.coco_instance_lsj1536_cp import dataloader +from .models.ape_deta_r50 import model + +model.model_vision.pixel_mean = constants.imagenet_rgb256_mean +model.model_vision.pixel_std = constants.imagenet_rgb256_std +model.model_vision.input_format = "RGB" + +model.model_vision.backbone = backbone + +model.model_vision.neck = None + +model.model_vision.mask_in_features = ["p2"] +model.model_vision.input_shapes = { + "p2": ShapeSpec(channels=256), + "p3": ShapeSpec(channels=256), + "p4": ShapeSpec(channels=256), + "p5": ShapeSpec(channels=256), + "p6": ShapeSpec(channels=256), +} + +optimizer = get_config("common/optim.py").AdamW +optimizer.params.lr_factor_func = ( + lambda module_name: 0.1 + if "reference_points" in module_name or "sampling_offsets" in module_name + else get_vit_lr_decay_rate(module_name, lr_decay_rate=0.8, num_layers=64) + if "backbone.net" in module_name + else 1 +) +optimizer.params.overrides = {"pos_embed": {"weight_decay": 0.0}} +optimizer.params.weight_decay_norm = None + +optimizer.lr = 2e-4 +optimizer.betas = (0.9, 0.999) +optimizer.weight_decay = 1e-4 + +train = get_config("common/train.py").train +train.max_iter = 90000 +train.eval_period = 5000 +train.log_period = 20 + +train.checkpointer.period = 5000 +train.checkpointer.max_to_keep = 2 + +train.clip_grad.enabled = True +train.clip_grad.params.max_norm = 0.1 +train.clip_grad.params.norm_type = 2 + +train.device = "cuda" + +train.init_checkpoint = ( + "models/QuanSun/EVA-CLIP/EVA02_CLIP_E_psz14to16_plus_s9B.pt?matching_heuristics=True" +) + +train.amp.enabled = True +train.ddp.fp16_compression = True + +lr_multiplier = get_config("common/coco_schedule.py").lr_multiplier_12ep +lr_multiplier.scheduler.milestones = [75000, 90000] +lr_multiplier.warmup_length = 1000 / train.max_iter + +dataloader.train.num_workers = 8 +dataloader.train.total_batch_size = 64 +dataloader.train.mapper.image_format = "RGB" +dataloader.train.mapper.use_instance_mask = True + +model.model_vision.dataset_prompts = ["name"] +model.model_vision.dataset_names = ["coco_2017"] +model.model_vision.dataset_metas = dataloader.train.dataset.names + +train.output_dir = "output/" + __file__[:-3] + +model.model_language = L(EVA02CLIP)( + clip_model="EVA02-CLIP-bigE-14-plus", + cache_dir="models/QuanSun/EVA-CLIP/EVA02_CLIP_E_psz14_plus_s9B.pt", + dtype="float16", +) +model.model_vision.embed_dim_language = 1024 diff --git a/approach/ovod/APE/configs/COCO_InstanceSegmentation/ape_deta/ape_deta_vitg_eva01_clip_lsj1536_cp_128x45k.py b/approach/ovod/APE/configs/COCO_InstanceSegmentation/ape_deta/ape_deta_vitg_eva01_clip_lsj1536_cp_128x45k.py new file mode 100644 index 0000000000000000000000000000000000000000..8ecc808fa82f4608ee156b6a604e2ed82daf3efc --- /dev/null +++ b/approach/ovod/APE/configs/COCO_InstanceSegmentation/ape_deta/ape_deta_vitg_eva01_clip_lsj1536_cp_128x45k.py @@ -0,0 +1,84 @@ +from detectron2.config import LazyCall as L +from detectron2.layers import ShapeSpec +from detrex.config import get_config +from ape.modeling.backbone.vit import get_vit_lr_decay_rate +from ape.modeling.text import EVA02CLIP + +from .....detectron2.configs.common.data.constants import constants +from ...common.backbone.vitg_eva01_clip_1536 import backbone +from ...common.data.coco_instance_lsj1536_cp import dataloader +from .models.ape_deta_r50 import model + +model.model_vision.pixel_mean = constants.imagenet_rgb256_mean +model.model_vision.pixel_std = constants.imagenet_rgb256_std +model.model_vision.input_format = "RGB" + +model.model_vision.backbone = backbone + +model.model_vision.neck = None + +model.model_vision.mask_in_features = ["p2"] +model.model_vision.input_shapes = { + "p2": ShapeSpec(channels=256), + "p3": ShapeSpec(channels=256), + "p4": ShapeSpec(channels=256), + "p5": ShapeSpec(channels=256), + "p6": ShapeSpec(channels=256), +} + +optimizer = get_config("common/optim.py").AdamW +optimizer.params.lr_factor_func = ( + lambda module_name: 0.1 + if "reference_points" in module_name or "sampling_offsets" in module_name + else get_vit_lr_decay_rate(module_name, lr_decay_rate=0.9, num_layers=40) + if "backbone.net" in module_name + else 1 +) +optimizer.params.overrides = {"pos_embed": {"weight_decay": 0.0}} +optimizer.params.weight_decay_norm = None + +optimizer.lr = 2e-4 +optimizer.betas = (0.9, 0.999) +optimizer.weight_decay = 1e-4 + +train = get_config("common/train.py").train +train.max_iter = 45000 +train.eval_period = 5000 +train.log_period = 20 + +train.checkpointer.period = 2500 +train.checkpointer.max_to_keep = 2 + +train.clip_grad.enabled = True +train.clip_grad.params.max_norm = 0.1 +train.clip_grad.params.norm_type = 2 + +train.device = "cuda" + +train.init_checkpoint = ( + "models/QuanSun/EVA-CLIP/EVA01_CLIP_g_14_plus_psz14to16_s11B.pt?matching_heuristics=True" +) + +train.amp.enabled = True +train.ddp.fp16_compression = True + +lr_multiplier = get_config("common/coco_schedule.py").lr_multiplier_12ep +lr_multiplier.scheduler.milestones = [37500, 45000] +lr_multiplier.warmup_length = 1000 / train.max_iter + +dataloader.train.num_workers = 16 +dataloader.train.total_batch_size = 128 +dataloader.train.mapper.image_format = "RGB" +dataloader.train.mapper.use_instance_mask = True + +model.model_vision.dataset_prompts = ["name"] +model.model_vision.dataset_names = ["coco_2017"] +model.model_vision.dataset_metas = dataloader.train.dataset.names + +train.output_dir = "output/" + __file__[:-3] + +model.model_language = L(EVA02CLIP)( + clip_model="EVA01-CLIP-g-14-plus", + cache_dir="models/QuanSun/EVA-CLIP/EVA01_CLIP_g_14_plus_psz14_s11B.pt", +) +model.model_vision.embed_dim_language = 1024 diff --git a/approach/ovod/APE/configs/COCO_InstanceSegmentation/ape_deta/ape_deta_vitg_eva01_clip_lsj1536_cp_64x90k.py b/approach/ovod/APE/configs/COCO_InstanceSegmentation/ape_deta/ape_deta_vitg_eva01_clip_lsj1536_cp_64x90k.py new file mode 100644 index 0000000000000000000000000000000000000000..1ade902c836ea168b2b427ee6b30fb4deaa8df09 --- /dev/null +++ b/approach/ovod/APE/configs/COCO_InstanceSegmentation/ape_deta/ape_deta_vitg_eva01_clip_lsj1536_cp_64x90k.py @@ -0,0 +1,84 @@ +from detectron2.config import LazyCall as L +from detectron2.layers import ShapeSpec +from detrex.config import get_config +from ape.modeling.backbone.vit import get_vit_lr_decay_rate +from ape.modeling.text import EVA02CLIP + +from .....detectron2.configs.common.data.constants import constants +from ...common.backbone.vitg_eva01_clip_1536 import backbone +from ...common.data.coco_instance_lsj1536_cp import dataloader +from .models.ape_deta_r50 import model + +model.model_vision.pixel_mean = constants.imagenet_rgb256_mean +model.model_vision.pixel_std = constants.imagenet_rgb256_std +model.model_vision.input_format = "RGB" + +model.model_vision.backbone = backbone + +model.model_vision.neck = None + +model.model_vision.mask_in_features = ["p2"] +model.model_vision.input_shapes = { + "p2": ShapeSpec(channels=256), + "p3": ShapeSpec(channels=256), + "p4": ShapeSpec(channels=256), + "p5": ShapeSpec(channels=256), + "p6": ShapeSpec(channels=256), +} + +optimizer = get_config("common/optim.py").AdamW +optimizer.params.lr_factor_func = ( + lambda module_name: 0.1 + if "reference_points" in module_name or "sampling_offsets" in module_name + else get_vit_lr_decay_rate(module_name, lr_decay_rate=0.9, num_layers=40) + if "backbone.net" in module_name + else 1 +) +optimizer.params.overrides = {"pos_embed": {"weight_decay": 0.0}} +optimizer.params.weight_decay_norm = None + +optimizer.lr = 2e-4 +optimizer.betas = (0.9, 0.999) +optimizer.weight_decay = 1e-4 + +train = get_config("common/train.py").train +train.max_iter = 90000 +train.eval_period = 5000 +train.log_period = 20 + +train.checkpointer.period = 5000 +train.checkpointer.max_to_keep = 2 + +train.clip_grad.enabled = True +train.clip_grad.params.max_norm = 0.1 +train.clip_grad.params.norm_type = 2 + +train.device = "cuda" + +train.init_checkpoint = ( + "models/QuanSun/EVA-CLIP/EVA01_CLIP_g_14_plus_psz14to16_s11B.pt?matching_heuristics=True" +) + +train.amp.enabled = True +train.ddp.fp16_compression = True + +lr_multiplier = get_config("common/coco_schedule.py").lr_multiplier_12ep +lr_multiplier.scheduler.milestones = [75000, 90000] +lr_multiplier.warmup_length = 1000 / train.max_iter + +dataloader.train.num_workers = 16 +dataloader.train.total_batch_size = 64 +dataloader.train.mapper.image_format = "RGB" +dataloader.train.mapper.use_instance_mask = True + +model.model_vision.dataset_prompts = ["name"] +model.model_vision.dataset_names = ["coco_2017"] +model.model_vision.dataset_metas = dataloader.train.dataset.names + +train.output_dir = "output/" + __file__[:-3] + +model.model_language = L(EVA02CLIP)( + clip_model="EVA01-CLIP-g-14-plus", + cache_dir="models/QuanSun/EVA-CLIP/EVA01_CLIP_g_14_plus_psz14_s11B.pt", +) +model.model_vision.embed_dim_language = 1024 diff --git a/approach/ovod/APE/configs/COCO_InstanceSegmentation/ape_deta/ape_deta_vitg_eva01_lsj1536_cp_64x90k.py b/approach/ovod/APE/configs/COCO_InstanceSegmentation/ape_deta/ape_deta_vitg_eva01_lsj1536_cp_64x90k.py new file mode 100644 index 0000000000000000000000000000000000000000..ee3187793e0049c5f9570e3fc9e1588176cd30f6 --- /dev/null +++ b/approach/ovod/APE/configs/COCO_InstanceSegmentation/ape_deta/ape_deta_vitg_eva01_lsj1536_cp_64x90k.py @@ -0,0 +1,81 @@ +from detectron2.config import LazyCall as L +from detectron2.layers import ShapeSpec +from detrex.config import get_config +from ape.modeling.backbone.vit import get_vit_lr_decay_rate +from ape.modeling.text import EVA01CLIP + +from .....detectron2.configs.common.data.constants import constants +from ...common.backbone.vitg_eva01_1536 import backbone +from ...common.data.coco_instance_lsj1536_cp import dataloader +from .models.ape_deta_r50 import model + +model.model_vision.pixel_mean = constants.imagenet_rgb256_mean +model.model_vision.pixel_std = constants.imagenet_rgb256_std +model.model_vision.input_format = "RGB" + +model.model_vision.backbone = backbone + +model.model_vision.neck = None + +model.model_vision.mask_in_features = ["p2"] +model.model_vision.input_shapes = { + "p2": ShapeSpec(channels=256), + "p3": ShapeSpec(channels=256), + "p4": ShapeSpec(channels=256), + "p5": ShapeSpec(channels=256), + "p6": ShapeSpec(channels=256), +} + +optimizer = get_config("common/optim.py").AdamW +optimizer.params.lr_factor_func = ( + lambda module_name: 0.1 + if "reference_points" in module_name or "sampling_offsets" in module_name + else get_vit_lr_decay_rate(module_name, lr_decay_rate=0.9, num_layers=40) + if "backbone.net" in module_name + else 1 +) +optimizer.params.overrides = {"pos_embed": {"weight_decay": 0.0}} +optimizer.params.weight_decay_norm = None + +optimizer.lr = 2e-4 +optimizer.betas = (0.9, 0.999) +optimizer.weight_decay = 1e-4 + +train = get_config("common/train.py").train +train.max_iter = 90000 +train.eval_period = 5000 +train.log_period = 20 + +train.checkpointer.period = 5000 +train.checkpointer.max_to_keep = 2 + +train.clip_grad.enabled = True +train.clip_grad.params.max_norm = 0.1 +train.clip_grad.params.norm_type = 2 + +train.device = "cuda" + +train.init_checkpoint = "models/BAAI/EVA/eva_o365.pth?matching_heuristics=True" + +train.amp.enabled = True +train.ddp.fp16_compression = True + +lr_multiplier = get_config("common/coco_schedule.py").lr_multiplier_12ep +lr_multiplier.scheduler.milestones = [75000, 90000] +lr_multiplier.warmup_length = 1000 / train.max_iter + +dataloader.train.num_workers = 16 +dataloader.train.total_batch_size = 64 +dataloader.train.mapper.image_format = "RGB" +dataloader.train.mapper.use_instance_mask = True + +model.model_vision.dataset_prompts = ["name"] +model.model_vision.dataset_names = ["coco_2017"] +model.model_vision.dataset_metas = dataloader.train.dataset.names + +train.output_dir = "output/" + __file__[:-3] + +model.model_language = L(EVA01CLIP)( + clip_model="EVA_CLIP_g_14_X", cache_dir="models/BAAI/EVA/eva_clip_psz14.pt" +) +model.model_vision.embed_dim_language = 1024 diff --git a/approach/ovod/APE/configs/COCO_InstanceSegmentation/ape_deta/ape_deta_vitl_eva02_clip_lsj1024_cp_12ep.py b/approach/ovod/APE/configs/COCO_InstanceSegmentation/ape_deta/ape_deta_vitl_eva02_clip_lsj1024_cp_12ep.py new file mode 100644 index 0000000000000000000000000000000000000000..32adc0bcde882a44ca60f84f7fb6c883327420fd --- /dev/null +++ b/approach/ovod/APE/configs/COCO_InstanceSegmentation/ape_deta/ape_deta_vitl_eva02_clip_lsj1024_cp_12ep.py @@ -0,0 +1,95 @@ +from detectron2.config import LazyCall as L +from detectron2.layers import ShapeSpec +from detectron2.model_zoo import get_config as get_config_d2 +from detrex.config import get_config as get_config_detrex +from ape.modeling.backbone.vit import get_vit_lr_decay_rate + +from ape.modeling.text import EVA02CLIP + +from ...common.backbone.vitl_eva02_clip import backbone +from ...common.data.coco_instance_lsj1024_cp import dataloader +from .models.ape_deta_r50 import model + +constants = get_config_d2("common/data/constants.py").constants + +model.model_vision.pixel_mean = constants.imagenet_rgb256_mean +model.model_vision.pixel_std = constants.imagenet_rgb256_std +model.model_vision.input_format = "RGB" + +model.model_vision.backbone = backbone + +model.model_vision.neck.input_shapes = { + "p2": ShapeSpec(channels=256), + "p3": ShapeSpec(channels=256), + "p4": ShapeSpec(channels=256), + "p5": ShapeSpec(channels=256), + "p6": ShapeSpec(channels=256), +} +model.model_vision.neck.in_features = ["p2", "p3", "p4", "p5", "p6"] + +model.model_vision.mask_in_features = ["p2"] +model.model_vision.input_shapes = { + "p2": ShapeSpec(channels=256), + "p3": ShapeSpec(channels=256), + "p4": ShapeSpec(channels=256), + "p5": ShapeSpec(channels=256), + "p6": ShapeSpec(channels=256), +} + +optimizer = get_config_detrex("common/optim.py").AdamW +optimizer.params.lr_factor_func = ( + lambda module_name: 0.1 + if "reference_points" in module_name or "sampling_offsets" in module_name + else get_vit_lr_decay_rate(module_name, lr_decay_rate=0.8, num_layers=24) + if "backbone.net" in module_name + else 1 +) +optimizer.params.overrides = {"pos_embed": {"weight_decay": 0.0}} +optimizer.params.weight_decay_norm = None + +optimizer.lr = 2e-4 +optimizer.betas = (0.9, 0.999) +optimizer.weight_decay = 1e-4 + +train = get_config_detrex("common/train.py").train +train.max_iter = 90000 +train.eval_period = 5000 +train.log_period = 20 + +train.checkpointer.period = 5000 +train.checkpointer.max_to_keep = 2 + +train.clip_grad.enabled = True +train.clip_grad.params.max_norm = 0.1 +train.clip_grad.params.norm_type = 2 + +train.device = "cuda" + +train.init_checkpoint = ( + "models/QuanSun/EVA-CLIP/EVA02_CLIP_L_336_psz14to16_s6B.pt?matching_heuristics=True" +) + +train.amp.enabled = True +train.ddp.fp16_compression = True + +lr_multiplier = get_config_detrex("common/coco_schedule.py").lr_multiplier_12ep +lr_multiplier.scheduler.milestones = [75000, 90000] +lr_multiplier.warmup_length = 1000 / train.max_iter + +dataloader.train.num_workers = 16 +dataloader.train.total_batch_size = 16 +dataloader.train.mapper.image_format = "RGB" +dataloader.train.mapper.use_instance_mask = True + +model.model_vision.dataset_prompts = ["name"] +model.model_vision.dataset_names = ["coco_2017"] +model.model_vision.dataset_metas = dataloader.train.dataset.names + +train.output_dir = "output/" + __file__[:-3] + +model.model_language = L(EVA02CLIP)( + clip_model="EVA02-CLIP-bigE-14-plus", + cache_dir="models/QuanSun/EVA-CLIP/EVA02_CLIP_E_psz14_plus_s9B.pt", + dtype="float16", +) +model.model_vision.embed_dim_language = 1024 diff --git a/approach/ovod/APE/configs/COCO_InstanceSegmentation/ape_deta/ape_deta_vitl_eva02_clip_lsj1536_cp_128x45k.py b/approach/ovod/APE/configs/COCO_InstanceSegmentation/ape_deta/ape_deta_vitl_eva02_clip_lsj1536_cp_128x45k.py new file mode 100644 index 0000000000000000000000000000000000000000..a6faed9bbe941d7439686ebbe865e65bf6eadc68 --- /dev/null +++ b/approach/ovod/APE/configs/COCO_InstanceSegmentation/ape_deta/ape_deta_vitl_eva02_clip_lsj1536_cp_128x45k.py @@ -0,0 +1,19 @@ +from .ape_deta_vitl_eva02_clip_lsj1536_cp_64x90k import ( + dataloader, + lr_multiplier, + model, + optimizer, + train, +) + +train.max_iter = 45000 + +train.eval_period = 2500 + +train.checkpointer.period = 2500 + +lr_multiplier.scheduler.milestones = [37500, 45000] + +dataloader.train.total_batch_size = 128 + +train.output_dir = "output/" + __file__[:-3] diff --git a/approach/ovod/APE/configs/COCO_InstanceSegmentation/ape_deta/ape_deta_vitl_eva02_clip_lsj1536_cp_64x90k.py b/approach/ovod/APE/configs/COCO_InstanceSegmentation/ape_deta/ape_deta_vitl_eva02_clip_lsj1536_cp_64x90k.py new file mode 100644 index 0000000000000000000000000000000000000000..063ed92ab79a34168f1b523adda3d4902ccbb079 --- /dev/null +++ b/approach/ovod/APE/configs/COCO_InstanceSegmentation/ape_deta/ape_deta_vitl_eva02_clip_lsj1536_cp_64x90k.py @@ -0,0 +1,92 @@ +from detectron2.config import LazyCall as L +from detectron2.layers import ShapeSpec +from detrex.config import get_config +from ape.modeling.backbone.vit import get_vit_lr_decay_rate + +from ape.modeling.text import EVA02CLIP + +from .....detectron2.configs.common.data.constants import constants +from ...common.backbone.vitl_eva02_clip_1536 import backbone +from ...common.data.coco_instance_lsj1536_cp import dataloader +from .models.ape_deta_r50 import model + +model.model_vision.pixel_mean = constants.imagenet_rgb256_mean +model.model_vision.pixel_std = constants.imagenet_rgb256_std +model.model_vision.input_format = "RGB" + +model.model_vision.backbone = backbone + +model.model_vision.neck.input_shapes = { + "p2": ShapeSpec(channels=256), + "p3": ShapeSpec(channels=256), + "p4": ShapeSpec(channels=256), + "p5": ShapeSpec(channels=256), + "p6": ShapeSpec(channels=256), +} +model.model_vision.neck.in_features = ["p2", "p3", "p4", "p5", "p6"] + +model.model_vision.mask_in_features = ["p2"] +model.model_vision.input_shapes = { + "p2": ShapeSpec(channels=256), + "p3": ShapeSpec(channels=256), + "p4": ShapeSpec(channels=256), + "p5": ShapeSpec(channels=256), + "p6": ShapeSpec(channels=256), +} + +optimizer = get_config("common/optim.py").AdamW +optimizer.params.lr_factor_func = ( + lambda module_name: 0.1 + if "reference_points" in module_name or "sampling_offsets" in module_name + else get_vit_lr_decay_rate(module_name, lr_decay_rate=0.8, num_layers=24) + if "backbone.net" in module_name + else 1 +) +optimizer.params.overrides = {"pos_embed": {"weight_decay": 0.0}} +optimizer.params.weight_decay_norm = None + +optimizer.lr = 2e-4 +optimizer.betas = (0.9, 0.999) +optimizer.weight_decay = 1e-4 + +train = get_config("common/train.py").train +train.max_iter = 90000 +train.eval_period = 5000 +train.log_period = 20 + +train.checkpointer.period = 5000 +train.checkpointer.max_to_keep = 2 + +train.clip_grad.enabled = True +train.clip_grad.params.max_norm = 0.1 +train.clip_grad.params.norm_type = 2 + +train.device = "cuda" + +train.init_checkpoint = ( + "models/QuanSun/EVA-CLIP/EVA02_CLIP_L_336_psz14to16_s6B.pt?matching_heuristics=True" +) + +train.amp.enabled = True +train.ddp.fp16_compression = True + +lr_multiplier = get_config("common/coco_schedule.py").lr_multiplier_12ep +lr_multiplier.scheduler.milestones = [75000, 90000] +lr_multiplier.warmup_length = 1000 / train.max_iter + +dataloader.train.num_workers = 16 +dataloader.train.total_batch_size = 64 +dataloader.train.mapper.image_format = "RGB" +dataloader.train.mapper.use_instance_mask = True + +model.model_vision.dataset_prompts = ["name"] +model.model_vision.dataset_names = ["coco_2017"] +model.model_vision.dataset_metas = dataloader.train.dataset.names + +train.output_dir = "output/" + __file__[:-3] + +model.model_language = L(EVA02CLIP)( + clip_model="EVA02-CLIP-bigE-14-plus", + cache_dir="models/QuanSun/EVA-CLIP/EVA02_CLIP_E_psz14_plus_s9B.pt", +) +model.model_vision.embed_dim_language = 1024 diff --git a/approach/ovod/APE/configs/COCO_InstanceSegmentation/ape_deta/ape_deta_vitl_eva02_clip_vlf_lsj1024_cp_12ep.py b/approach/ovod/APE/configs/COCO_InstanceSegmentation/ape_deta/ape_deta_vitl_eva02_clip_vlf_lsj1024_cp_12ep.py new file mode 100644 index 0000000000000000000000000000000000000000..ceaf8c14dfae444dc590ca126928207182a76ef1 --- /dev/null +++ b/approach/ovod/APE/configs/COCO_InstanceSegmentation/ape_deta/ape_deta_vitl_eva02_clip_vlf_lsj1024_cp_12ep.py @@ -0,0 +1,52 @@ +from detectron2.config import LazyCall as L +from ape.layers import VisionLanguageFusion +from ape.modeling.ape_deta import ( + DeformableDETRSegmVL, + DeformableDetrTransformerDecoderVL, + DeformableDetrTransformerEncoderVL, + DeformableDetrTransformerVL, +) + +from .ape_deta_vitl_eva02_clip_lsj1024_cp_12ep import ( + dataloader, + lr_multiplier, + model, + optimizer, + train, +) + +model.model_vision.update( + _target_=DeformableDETRSegmVL, +) +model.model_vision.transformer.update( + _target_=DeformableDetrTransformerVL, +) +model.model_vision.transformer.encoder.update( + _target_=DeformableDetrTransformerEncoderVL, +) +model.model_vision.transformer.decoder.update( + _target_=DeformableDetrTransformerDecoderVL, +) + +model.model_vision.transformer.encoder.vl_layer = L(VisionLanguageFusion)( + v_dim="${....embed_dim}", + l_dim="${....embed_dim_language}", + embed_dim=2048, + num_heads=8, + dropout=0.1, + drop_path=0.0, + init_values=1.0 / 6, + stable_softmax_2d=True, + clamp_min_for_underflow=True, + clamp_max_for_overflow=True, + use_checkpoint=True, +) + +model.model_vision.text_feature_bank = True +model.model_vision.text_feature_reduce_before_fusion = True +model.model_vision.text_feature_batch_repeat = True +model.model_vision.expression_cumulative_gt_class = True +model.model_vision.name_prompt_fusion_type = "zero" + +train.output_dir = "output/" + __file__[:-3] +model.model_vision.vis_period = 12800 diff --git a/approach/ovod/APE/configs/COCO_InstanceSegmentation/ape_deta/ape_deta_vitl_eva02_lsj1024_cp_12ep.py b/approach/ovod/APE/configs/COCO_InstanceSegmentation/ape_deta/ape_deta_vitl_eva02_lsj1024_cp_12ep.py new file mode 100644 index 0000000000000000000000000000000000000000..045e0cdf105e54fd9260444fab87802d140a2679 --- /dev/null +++ b/approach/ovod/APE/configs/COCO_InstanceSegmentation/ape_deta/ape_deta_vitl_eva02_lsj1024_cp_12ep.py @@ -0,0 +1,86 @@ +from detectron2.config import LazyCall as L +from detectron2.layers import ShapeSpec + +from detectron2.model_zoo import get_config as get_config_d2 +from detrex.config import get_config +from ape.modeling.backbone.vit import get_vit_lr_decay_rate +from ape.modeling.text import EVA01CLIP + +from ...common.backbone.vitl_eva02 import backbone +from ...common.data.coco_instance_lsj1024_cp import dataloader +from .models.ape_deta_r50 import model + +constants = get_config_d2("common/data/constants.py").constants + +model.model_vision.pixel_mean = constants.imagenet_rgb256_mean +model.model_vision.pixel_std = constants.imagenet_rgb256_std +model.model_vision.input_format = "RGB" + +model.model_vision.backbone = backbone + +model.model_vision.neck = None + +model.model_vision.mask_in_features = ["p2"] +model.model_vision.input_shapes = { + "p2": ShapeSpec(channels=256), + "p3": ShapeSpec(channels=256), + "p4": ShapeSpec(channels=256), + "p5": ShapeSpec(channels=256), + "p6": ShapeSpec(channels=256), +} + +optimizer = get_config("common/optim.py").AdamW +optimizer.params.lr_factor_func = ( + lambda module_name: 0.1 + if "reference_points" in module_name or "sampling_offsets" in module_name + else get_vit_lr_decay_rate(module_name, lr_decay_rate=0.8, num_layers=24) + if "backbone.net" in module_name + else 1 +) +optimizer.params.overrides = {"pos_embed": {"weight_decay": 0.0}} +optimizer.params.weight_decay_norm = None + +optimizer.lr = 2e-4 +optimizer.betas = (0.9, 0.999) +optimizer.weight_decay = 1e-4 + +train = get_config("common/train.py").train +train.max_iter = 90000 +train.eval_period = 5000 +train.log_period = 20 + +train.checkpointer.period = 5000 +train.checkpointer.max_to_keep = 2 + +train.clip_grad.enabled = True +train.clip_grad.params.max_norm = 0.1 +train.clip_grad.params.norm_type = 2 + +train.device = "cuda" + +train.init_checkpoint = ( + "models/Yuxin-CV/EVA-02/eva02/pt/eva02_L_pt_in21k_p14to16.pt?matching_heuristics=True" +) + +train.amp.enabled = True +train.ddp.fp16_compression = True + +lr_multiplier = get_config("common/coco_schedule.py").lr_multiplier_12ep +lr_multiplier.scheduler.milestones = [75000, 90000] +lr_multiplier.warmup_length = 1000 / train.max_iter + +dataloader.train.num_workers = 16 +dataloader.train.total_batch_size = 16 +dataloader.train.mapper.image_format = "RGB" +dataloader.train.mapper.use_instance_mask = True + +model.model_vision.dataset_prompts = ["name"] +model.model_vision.dataset_names = ["coco_2017"] +model.model_vision.dataset_metas = dataloader.train.dataset.names + +train.output_dir = "output/" + __file__[:-3] + +model.model_language = L(EVA01CLIP)( + clip_model="EVA_CLIP_g_14_X", cache_dir="models/BAAI/EVA/eva_clip_psz14.pt" +) +model.model_vision.embed_dim_language = 1024 diff --git a/approach/ovod/APE/configs/COCO_InstanceSegmentation/ape_deta/ape_deta_vitl_eva02_lsj1536_cp_128x90k.py b/approach/ovod/APE/configs/COCO_InstanceSegmentation/ape_deta/ape_deta_vitl_eva02_lsj1536_cp_128x90k.py new file mode 100644 index 0000000000000000000000000000000000000000..80315b23f8210d1fedc0f3e4850a6234a0e8fc67 --- /dev/null +++ b/approach/ovod/APE/configs/COCO_InstanceSegmentation/ape_deta/ape_deta_vitl_eva02_lsj1536_cp_128x90k.py @@ -0,0 +1,11 @@ +from .ape_deta_vitl_eva02_lsj1536_cp_64x90k import ( + dataloader, + lr_multiplier, + model, + optimizer, + train, +) + +dataloader.train.total_batch_size = 128 + +train.output_dir = "output/" + __file__[:-3] diff --git a/approach/ovod/APE/configs/COCO_InstanceSegmentation/ape_deta/ape_deta_vitl_eva02_lsj1536_cp_12ep.py b/approach/ovod/APE/configs/COCO_InstanceSegmentation/ape_deta/ape_deta_vitl_eva02_lsj1536_cp_12ep.py new file mode 100644 index 0000000000000000000000000000000000000000..b225e91fc8e17bf916b037a742c9b68770d252f5 --- /dev/null +++ b/approach/ovod/APE/configs/COCO_InstanceSegmentation/ape_deta/ape_deta_vitl_eva02_lsj1536_cp_12ep.py @@ -0,0 +1,83 @@ +from detectron2.config import LazyCall as L +from detectron2.layers import ShapeSpec +from detrex.config import get_config +from ape.modeling.backbone.vit import get_vit_lr_decay_rate +from ape.modeling.text import EVA01CLIP + +from .....detectron2.configs.common.data.constants import constants +from ...common.backbone.vitl_eva02_1536 import backbone +from ...common.data.coco_instance_lsj1536_cp import dataloader +from .models.ape_deta_r50 import model + +model.model_vision.pixel_mean = constants.imagenet_rgb256_mean +model.model_vision.pixel_std = constants.imagenet_rgb256_std +model.model_vision.input_format = "RGB" + +model.model_vision.backbone = backbone + +model.model_vision.neck = None + +model.model_vision.mask_in_features = ["p2"] +model.model_vision.input_shapes = { + "p2": ShapeSpec(channels=256), + "p3": ShapeSpec(channels=256), + "p4": ShapeSpec(channels=256), + "p5": ShapeSpec(channels=256), + "p6": ShapeSpec(channels=256), +} + +optimizer = get_config("common/optim.py").AdamW +optimizer.params.lr_factor_func = ( + lambda module_name: 0.1 + if "reference_points" in module_name or "sampling_offsets" in module_name + else get_vit_lr_decay_rate(module_name, lr_decay_rate=0.8, num_layers=24) + if "backbone.net" in module_name + else 1 +) +optimizer.params.overrides = {"pos_embed": {"weight_decay": 0.0}} +optimizer.params.weight_decay_norm = None + +optimizer.lr = 2e-4 +optimizer.betas = (0.9, 0.999) +optimizer.weight_decay = 1e-4 + +train = get_config("common/train.py").train +train.max_iter = 90000 +train.eval_period = 5000 +train.log_period = 20 + +train.checkpointer.period = 5000 +train.checkpointer.max_to_keep = 2 + +train.clip_grad.enabled = True +train.clip_grad.params.max_norm = 0.1 +train.clip_grad.params.norm_type = 2 + +train.device = "cuda" + +train.init_checkpoint = ( + "models/Yuxin-CV/EVA-02/eva02/pt/eva02_L_pt_in21k_p14to16.pt?matching_heuristics=True" +) + +train.amp.enabled = True +train.ddp.fp16_compression = True + +lr_multiplier = get_config("common/coco_schedule.py").lr_multiplier_12ep +lr_multiplier.scheduler.milestones = [75000, 90000] +lr_multiplier.warmup_length = 1000 / train.max_iter + +dataloader.train.num_workers = 16 +dataloader.train.total_batch_size = 16 +dataloader.train.mapper.image_format = "RGB" +dataloader.train.mapper.use_instance_mask = True + +model.model_vision.dataset_prompts = ["name"] +model.model_vision.dataset_names = ["coco_2017"] +model.model_vision.dataset_metas = dataloader.train.dataset.names + +train.output_dir = "output/" + __file__[:-3] + +model.model_language = L(EVA01CLIP)( + clip_model="EVA_CLIP_g_14_X", cache_dir="models/BAAI/EVA/eva_clip_psz14.pt" +) +model.model_vision.embed_dim_language = 1024 diff --git a/approach/ovod/APE/configs/COCO_InstanceSegmentation/ape_deta/ape_deta_vitl_eva02_lsj1536_cp_64x90k.py b/approach/ovod/APE/configs/COCO_InstanceSegmentation/ape_deta/ape_deta_vitl_eva02_lsj1536_cp_64x90k.py new file mode 100644 index 0000000000000000000000000000000000000000..237434570ee8543c96c96691d5ec6f8d444019a8 --- /dev/null +++ b/approach/ovod/APE/configs/COCO_InstanceSegmentation/ape_deta/ape_deta_vitl_eva02_lsj1536_cp_64x90k.py @@ -0,0 +1,83 @@ +from detectron2.config import LazyCall as L +from detectron2.layers import ShapeSpec +from detrex.config import get_config +from ape.modeling.backbone.vit import get_vit_lr_decay_rate +from ape.modeling.text import EVA01CLIP + +from .....detectron2.configs.common.data.constants import constants +from ...common.backbone.vitl_eva02_1536 import backbone +from ...common.data.coco_instance_lsj1536_cp import dataloader +from .models.ape_deta_r50 import model + +model.model_vision.pixel_mean = constants.imagenet_rgb256_mean +model.model_vision.pixel_std = constants.imagenet_rgb256_std +model.model_vision.input_format = "RGB" + +model.model_vision.backbone = backbone + +model.model_vision.neck = None + +model.model_vision.mask_in_features = ["p2"] +model.model_vision.input_shapes = { + "p2": ShapeSpec(channels=256), + "p3": ShapeSpec(channels=256), + "p4": ShapeSpec(channels=256), + "p5": ShapeSpec(channels=256), + "p6": ShapeSpec(channels=256), +} + +optimizer = get_config("common/optim.py").AdamW +optimizer.params.lr_factor_func = ( + lambda module_name: 0.1 + if "reference_points" in module_name or "sampling_offsets" in module_name + else get_vit_lr_decay_rate(module_name, lr_decay_rate=0.8, num_layers=24) + if "backbone.net" in module_name + else 1 +) +optimizer.params.overrides = {"pos_embed": {"weight_decay": 0.0}} +optimizer.params.weight_decay_norm = None + +optimizer.lr = 2e-4 +optimizer.betas = (0.9, 0.999) +optimizer.weight_decay = 1e-4 + +train = get_config("common/train.py").train +train.max_iter = 90000 +train.eval_period = 5000 +train.log_period = 20 + +train.checkpointer.period = 5000 +train.checkpointer.max_to_keep = 2 + +train.clip_grad.enabled = True +train.clip_grad.params.max_norm = 0.1 +train.clip_grad.params.norm_type = 2 + +train.device = "cuda" + +train.init_checkpoint = ( + "models/Yuxin-CV/EVA-02/eva02/pt/eva02_L_pt_in21k_p14to16.pt?matching_heuristics=True" +) + +train.amp.enabled = True +train.ddp.fp16_compression = True + +lr_multiplier = get_config("common/coco_schedule.py").lr_multiplier_12ep +lr_multiplier.scheduler.milestones = [75000, 90000] +lr_multiplier.warmup_length = 1000 / train.max_iter + +dataloader.train.num_workers = 16 +dataloader.train.total_batch_size = 64 +dataloader.train.mapper.image_format = "RGB" +dataloader.train.mapper.use_instance_mask = True + +model.model_vision.dataset_prompts = ["name"] +model.model_vision.dataset_names = ["coco_2017"] +model.model_vision.dataset_metas = dataloader.train.dataset.names + +train.output_dir = "output/" + __file__[:-3] + +model.model_language = L(EVA01CLIP)( + clip_model="EVA_CLIP_g_14_X", cache_dir="models/BAAI/EVA/eva_clip_psz14.pt" +) +model.model_vision.embed_dim_language = 1024 diff --git a/approach/ovod/APE/configs/COCO_InstanceSegmentation/ape_deta/ape_deta_vitl_eva02_vlf_lsj1024_cp_12ep.py b/approach/ovod/APE/configs/COCO_InstanceSegmentation/ape_deta/ape_deta_vitl_eva02_vlf_lsj1024_cp_12ep.py new file mode 100644 index 0000000000000000000000000000000000000000..cfb7a2ea621f42accf98db6e7daf125a7e6ae51d --- /dev/null +++ b/approach/ovod/APE/configs/COCO_InstanceSegmentation/ape_deta/ape_deta_vitl_eva02_vlf_lsj1024_cp_12ep.py @@ -0,0 +1,46 @@ +from detectron2.config import LazyCall as L +from ape.layers import VisionLanguageFusion +from ape.modeling.ape_deta import ( + DeformableDETRSegmVL, + DeformableDetrTransformerDecoderVL, + DeformableDetrTransformerEncoderVL, + DeformableDetrTransformerVL, +) + +from .ape_deta_vitl_eva02_lsj1024_cp_12ep import dataloader, lr_multiplier, model, optimizer, train + +model.model_vision.update( + _target_=DeformableDETRSegmVL, +) +model.model_vision.transformer.update( + _target_=DeformableDetrTransformerVL, +) +model.model_vision.transformer.encoder.update( + _target_=DeformableDetrTransformerEncoderVL, +) +model.model_vision.transformer.decoder.update( + _target_=DeformableDetrTransformerDecoderVL, +) + +model.model_vision.transformer.encoder.vl_layer = L(VisionLanguageFusion)( + v_dim="${....embed_dim}", + l_dim="${....embed_dim_language}", + embed_dim=2048, + num_heads=8, + dropout=0.1, + drop_path=0.0, + init_values=1.0 / 6, + stable_softmax_2d=True, + clamp_min_for_underflow=True, + clamp_max_for_overflow=True, + use_checkpoint=True, +) + +model.model_vision.text_feature_bank = True +model.model_vision.text_feature_reduce_before_fusion = True +model.model_vision.text_feature_batch_repeat = True +model.model_vision.expression_cumulative_gt_class = True +model.model_vision.name_prompt_fusion_type = "zero" + +train.output_dir = "output/" + __file__[:-3] +model.model_vision.vis_period = 12800 diff --git a/approach/ovod/APE/configs/COCO_InstanceSegmentation/ape_deta/ape_deta_vitl_lsj1024_cp_12ep.py b/approach/ovod/APE/configs/COCO_InstanceSegmentation/ape_deta/ape_deta_vitl_lsj1024_cp_12ep.py new file mode 100644 index 0000000000000000000000000000000000000000..dcdd383b3eb7ce6bf2e3998d541fd696946a40f2 --- /dev/null +++ b/approach/ovod/APE/configs/COCO_InstanceSegmentation/ape_deta/ape_deta_vitl_lsj1024_cp_12ep.py @@ -0,0 +1,118 @@ +from functools import partial + +import torch.nn as nn + +from detectron2.config import LazyCall as L +from detectron2.layers import ShapeSpec + +from detectron2.model_zoo import get_config as get_config_d2 +from detectron2.modeling.backbone.fpn import LastLevelMaxPool +from detectron2.modeling.backbone.vit import SimpleFeaturePyramid, ViT, get_vit_lr_decay_rate +from detrex.config import get_config +from ape.modeling.text import EVA01CLIP + +from ...common.data.coco_instance_lsj1024_cp import dataloader +from .models.ape_deta_r50 import model + +constants = get_config_d2("common/data/constants.py").constants + +model.model_vision.pixel_mean = constants.imagenet_rgb256_mean +model.model_vision.pixel_std = constants.imagenet_rgb256_std +model.model_vision.input_format = "RGB" + +model.model_vision.backbone = L(SimpleFeaturePyramid)( + net=L(ViT)( # Single-scale ViT backbone + img_size=1024, + patch_size=16, + embed_dim=1024, + depth=24, + num_heads=16, + drop_path_rate=0.4, + window_size=14, + mlp_ratio=4, + norm_layer=partial(nn.LayerNorm, eps=1e-6), + window_block_indexes=list(range(0, 5)) + + list(range(6, 11)) + + list(range(12, 17)) + + list(range(18, 23)), + residual_block_indexes=[], + use_rel_pos=True, + out_feature="last_feat", + use_act_checkpoint=True, + ), + in_feature="${.net.out_feature}", + out_channels=256, + scale_factors=(4.0, 2.0, 1.0, 0.5), + top_block=L(LastLevelMaxPool)(), + norm="LN", + square_pad=1024, +) + +model.model_vision.neck = None + +model.model_vision.mask_in_features = ["p2"] +model.model_vision.input_shapes = { + "p2": ShapeSpec(channels=256), + "p3": ShapeSpec(channels=256), + "p4": ShapeSpec(channels=256), + "p5": ShapeSpec(channels=256), + "p6": ShapeSpec(channels=256), +} + +optimizer = get_config("common/optim.py").AdamW +optimizer.params.lr_factor_func = ( + lambda module_name: 0.1 + if "reference_points" in module_name or "sampling_offsets" in module_name + else get_vit_lr_decay_rate(module_name, lr_decay_rate=0.8, num_layers=24) + if "backbone" in module_name + else 1 +) +optimizer.params.overrides = {"pos_embed": {"weight_decay": 0.0}} + +optimizer.lr = 2e-4 +optimizer.weight_decay = 0.05 + +train = get_config("common/train.py").train +train.max_iter = 90000 +train.eval_period = 5000 +train.log_period = 20 + +train.checkpointer.period = 5000 +train.checkpointer.max_to_keep = 2 + +train.clip_grad.enabled = True +train.clip_grad.params.max_norm = 0.1 +train.clip_grad.params.norm_type = 2 + +train.device = "cuda" + +train.init_checkpoint = ( + "detectron2://ImageNetPretrained/MAE/mae_pretrain_vit_large.pth?matching_heuristics=True" +) +train.init_checkpoint = "models/MAE/mae_pretrain_vit_large.pth?matching_heuristics=True" + +train.amp.enabled = True +train.ddp.fp16_compression = True + +lr_multiplier = get_config("common/coco_schedule.py").lr_multiplier_12ep +lr_multiplier.scheduler.milestones = [75000, 90000] +lr_multiplier.warmup_length = 1000 / train.max_iter + +dataloader.train.num_workers = 16 +dataloader.train.total_batch_size = 16 +dataloader.train.mapper.image_format = "RGB" +dataloader.train.mapper.use_instance_mask = True + +model.model_vision.dataset_prompts = ["name"] +model.model_vision.dataset_names = ["coco_2017"] +model.model_vision.dataset_metas = dataloader.train.dataset.names + +train.output_dir = "output/" + __file__[:-3] +model.model_vision.output_dir = train.output_dir +dataloader.train.mapper.output_dir = train.output_dir +dataloader.train.mapper.vis_period = 12800 + +model.model_language = L(EVA01CLIP)( + clip_model="EVA_CLIP_g_14_X", cache_dir="models/BAAI/EVA/eva_clip_psz14.pt" +) +model.model_vision.embed_dim_language = 1024 diff --git a/approach/ovod/APE/configs/COCO_InstanceSegmentation/ape_deta/models/ape_deta_r50.py b/approach/ovod/APE/configs/COCO_InstanceSegmentation/ape_deta/models/ape_deta_r50.py new file mode 100644 index 0000000000000000000000000000000000000000..713aef995be12eed94121a48ac1d91b89b328953 --- /dev/null +++ b/approach/ovod/APE/configs/COCO_InstanceSegmentation/ape_deta/models/ape_deta_r50.py @@ -0,0 +1,155 @@ +import torch.nn as nn + +from detectron2.config import LazyCall as L +from detectron2.layers import ShapeSpec +from detectron2.modeling.backbone import BasicStem, ResNet +from detrex.layers import PositionEmbeddingSine +from detrex.modeling.matcher import HungarianMatcher +from detrex.modeling.neck import ChannelMapper +from ape.modeling.ape_deta import ( + DeformableCriterion, + DeformableDETR, + DeformableDETRSegm, + DeformableDetrTransformer, + DeformableDetrTransformerDecoder, + DeformableDetrTransformerEncoder, + SomeThing, + Stage1Assigner, + Stage2Assigner, +) +from ape.modeling.text import T5_warpper + + + +model_vision = L(DeformableDETRSegm)( + backbone=L(ResNet)( + stem=L(BasicStem)(in_channels=3, out_channels=64, norm="FrozenBN"), + stages=L(ResNet.make_default_stages)( + depth=50, + stride_in_1x1=False, + norm="FrozenBN", + ), + out_features=["res2", "res3", "res4", "res5"], + freeze_at=1, + ), + position_embedding=L(PositionEmbeddingSine)( + num_pos_feats=128, + temperature=10000, + normalize=True, + offset=-0.5, + ), + neck=L(ChannelMapper)( + input_shapes={ + "res3": ShapeSpec(channels=512), + "res4": ShapeSpec(channels=1024), + "res5": ShapeSpec(channels=2048), + }, + in_features=["res3", "res4", "res5"], + out_channels=256, + num_outs=5, + kernel_size=1, + norm_layer=L(nn.GroupNorm)(num_groups=32, num_channels=256), + ), + transformer=L(DeformableDetrTransformer)( + encoder=L(DeformableDetrTransformerEncoder)( + embed_dim=256, + num_heads=8, + feedforward_dim=2048, + attn_dropout=0.0, + ffn_dropout=0.0, + num_layers=6, + post_norm=False, + num_feature_levels="${..num_feature_levels}", + ), + decoder=L(DeformableDetrTransformerDecoder)( + embed_dim=256, + num_heads=8, + feedforward_dim=2048, + attn_dropout=0.0, + ffn_dropout=0.0, + num_layers=6, + return_intermediate=True, + num_feature_levels="${..num_feature_levels}", + ), + as_two_stage="${..as_two_stage}", + num_feature_levels=5, + two_stage_num_proposals="${..num_queries}", + assign_first_stage=True, + ), + embed_dim=256, + num_classes=80, + num_queries=900, + aux_loss=True, + with_box_refine=True, + as_two_stage=True, + criterion=[ + L(DeformableCriterion)( + num_classes="${...num_classes}", + matcher=L(HungarianMatcher)( + cost_class=2.0, + cost_bbox=5.0, + cost_giou=2.0, + cost_class_type="focal_loss_cost", + alpha=0.25, + gamma=2.0, + ), + matcher_stage1=L(Stage1Assigner)( + t_low=0.3, + t_high=0.7, + max_k=4, + ), + matcher_stage2=L(Stage2Assigner)( + num_queries="${model.model_vision.num_queries}", + num_classes="${..num_classes}", + max_k=4, + ), + weight_dict={ + "loss_class": 1.0, + "loss_bbox": 5.0, + "loss_giou": 2.0, + "loss_mask": 5, + "loss_dice": 5, + }, + loss_class_type="focal_loss", + alpha=0.25, + gamma=2.0, + losses=["class", "boxes", "masks"], + ), + ], + pixel_mean=[123.675, 116.280, 103.530], + pixel_std=[58.395, 57.120, 57.375], + select_box_nums_for_evaluation=100, + input_format="RGB", + mask_encode_level=0, + mask_in_features=["res2"], + input_shapes={ + "res2": ShapeSpec(channels=256), + "res3": ShapeSpec(channels=512), + "res4": ShapeSpec(channels=1024), + "res5": ShapeSpec(channels=2048), + }, + output_dir=None, + vis_period=0, + embed_dim_language=1024, + instance_on=True, + semantic_on=False, + panoptic_on=False, +) + +if model_vision.aux_loss: + for j in range(len(model_vision.criterion)): + weight_dict = model_vision.criterion[j].weight_dict + aux_weight_dict = {} + for i in range(model_vision.transformer.decoder.num_layers - 1): + aux_weight_dict.update({k + f"_{i}": v for k, v in weight_dict.items()}) + aux_weight_dict.update({k + "_enc": v for k, v in weight_dict.items()}) + weight_dict.update(aux_weight_dict) + model_vision.criterion[j].weight_dict = weight_dict + +model = L(SomeThing)( + model_vision=model_vision, + model_language=L(T5_warpper)( + pretrained_model_name_or_path="models/google/flan-t5-large/", + eval_only=True, + ), +) diff --git a/approach/ovod/APE/configs/COCO_InstanceSegmentation/deformable_deta/deformable_deta_segm_r50_12ep.py b/approach/ovod/APE/configs/COCO_InstanceSegmentation/deformable_deta/deformable_deta_segm_r50_12ep.py new file mode 100644 index 0000000000000000000000000000000000000000..297650383ede76e0d4b1bc749678f86e75ef88e4 --- /dev/null +++ b/approach/ovod/APE/configs/COCO_InstanceSegmentation/deformable_deta/deformable_deta_segm_r50_12ep.py @@ -0,0 +1,53 @@ +from detrex.config import get_config + +from ...common.data.coco_instance import dataloader +from .models.deformable_deta_segm_r50 import model + +lr_multiplier = get_config("common/coco_schedule.py").lr_multiplier_12ep +lr_multiplier.scheduler.milestones = [75000, 90000] +optimizer = get_config("common/optim.py").AdamW +train = get_config("common/train.py").train + +train.init_checkpoint = "detectron2://ImageNetPretrained/torchvision/R-50.pkl" +train.init_checkpoint = "models/torchvision/R-50.pkl" +train.output_dir = "output/" + __file__[:-3] + +train.max_iter = 90000 + +train.eval_period = 5000 + +train.log_period = 20 + +train.checkpointer.period = 5000 +train.checkpointer.max_to_keep = 2 + +train.clip_grad.enabled = True +train.clip_grad.params.max_norm = 0.1 +train.clip_grad.params.norm_type = 2 + +train.device = "cuda" + +optimizer.lr = 2e-4 +optimizer.betas = (0.9, 0.999) +optimizer.weight_decay = 1e-4 +optimizer.params.lr_factor_func = ( + lambda module_name: 0.1 + if "backbone" in module_name + or "reference_points" in module_name + or "sampling_offsets" in module_name + else 1 +) +optimizer.params.weight_decay_norm = None + +dataloader.train.num_workers = 16 + +dataloader.train.total_batch_size = 16 + + +dataloader.train.mapper.use_instance_mask = True + +train.amp.enabled = True +train.ddp.fp16_compression = True +train.ddp.find_unused_parameters = False + +model.dataset_metas = dataloader.train.dataset.names diff --git a/approach/ovod/APE/configs/COCO_InstanceSegmentation/deformable_deta/deformable_deta_segm_r50_24ep.py b/approach/ovod/APE/configs/COCO_InstanceSegmentation/deformable_deta/deformable_deta_segm_r50_24ep.py new file mode 100644 index 0000000000000000000000000000000000000000..951b192750d2c746946db5ecda0411689711c08b --- /dev/null +++ b/approach/ovod/APE/configs/COCO_InstanceSegmentation/deformable_deta/deformable_deta_segm_r50_24ep.py @@ -0,0 +1,9 @@ +from detrex.config import get_config + +from .deformable_deta_segm_r50_12ep import dataloader, model, optimizer, train + +lr_multiplier = get_config("common/coco_schedule.py").lr_multiplier_24ep + +train.max_iter = 180000 + +train.output_dir = "output/" + __file__[:-3] diff --git a/approach/ovod/APE/configs/COCO_InstanceSegmentation/deformable_deta/deformable_deta_segm_vitl_eva02_lsj1024_cp_12ep.py b/approach/ovod/APE/configs/COCO_InstanceSegmentation/deformable_deta/deformable_deta_segm_vitl_eva02_lsj1024_cp_12ep.py new file mode 100644 index 0000000000000000000000000000000000000000..da25c6adf7916f151fcbe28a53f52e3f11ff1356 --- /dev/null +++ b/approach/ovod/APE/configs/COCO_InstanceSegmentation/deformable_deta/deformable_deta_segm_vitl_eva02_lsj1024_cp_12ep.py @@ -0,0 +1,85 @@ +from functools import partial + +import torch.nn as nn + +from detectron2.config import LazyCall as L +from detectron2.data.catalog import MetadataCatalog +from detectron2.layers import ShapeSpec +from detectron2.modeling.backbone.fpn import LastLevelMaxPool +from detrex.config import get_config +from ape.modeling.backbone.vit import get_vit_lr_decay_rate +from ape.modeling.backbone.vit_eva02 import SimpleFeaturePyramid, ViT + +from .....detectron2.configs.common.data.constants import constants +from ...common.backbone.vitl_eva02 import backbone +from ...common.data.coco_instance_lsj1024_cp import dataloader +from .models.deformable_deta_segm_r50 import model + +model.pixel_mean = constants.imagenet_rgb256_mean +model.pixel_std = constants.imagenet_rgb256_std +model.input_format = "RGB" + +model.backbone = backbone + +model.neck = None + +model.mask_in_features = ["p2"] +model.input_shapes = { + "p2": ShapeSpec(channels=256), + "p3": ShapeSpec(channels=256), + "p4": ShapeSpec(channels=256), + "p5": ShapeSpec(channels=256), + "p6": ShapeSpec(channels=256), +} + +optimizer = get_config("common/optim.py").AdamW +optimizer.params.lr_factor_func = ( + lambda module_name: 0.1 + if "reference_points" in module_name or "sampling_offsets" in module_name + else get_vit_lr_decay_rate(module_name, lr_decay_rate=0.8, num_layers=24) + if "backbone.net" in module_name + else 1 +) +optimizer.params.overrides = {"pos_embed": {"weight_decay": 0.0}} +optimizer.params.weight_decay_norm = None + +optimizer.lr = 2e-4 +optimizer.weight_decay = 1e-4 + +train = get_config("common/train.py").train +train.max_iter = 90000 +train.eval_period = 5000 +train.log_period = 20 + +train.checkpointer.period = 5000 +train.checkpointer.max_to_keep = 2 + +train.clip_grad.enabled = True +train.clip_grad.params.max_norm = 0.1 +train.clip_grad.params.norm_type = 2 + +train.device = "cuda" + +train.init_checkpoint = ( + "models/Yunxin-CV/EVA-02/eva02/pt/eva02_L_pt_in21k_p14to16.pt?matching_heuristics=True" +) + +train.amp.enabled = True +train.ddp.fp16_compression = True + +lr_multiplier = get_config("common/coco_schedule.py").lr_multiplier_12ep +lr_multiplier.scheduler.milestones = [75000, 90000] +lr_multiplier.warmup_length = 1000 / train.max_iter + +dataloader.train.num_workers = 16 +dataloader.train.total_batch_size = 16 +dataloader.train.mapper.image_format = "RGB" +dataloader.train.mapper.use_instance_mask = True + +if isinstance(dataloader.train.dataset.names, str): + model.metadata = MetadataCatalog.get(dataloader.train.dataset.names) +else: + model.metadata = MetadataCatalog.get(dataloader.train.dataset.names[0]) + +train.output_dir = "output/" + __file__[:-3] +dataloader.train.mapper.output_dir = train.output_dir diff --git a/approach/ovod/APE/configs/COCO_InstanceSegmentation/deformable_deta/models/deformable_deta_segm_r50.py b/approach/ovod/APE/configs/COCO_InstanceSegmentation/deformable_deta/models/deformable_deta_segm_r50.py new file mode 100644 index 0000000000000000000000000000000000000000..e96cdfe25bd6978db362e3dd644d519c094dfb1c --- /dev/null +++ b/approach/ovod/APE/configs/COCO_InstanceSegmentation/deformable_deta/models/deformable_deta_segm_r50.py @@ -0,0 +1,197 @@ +import torch.nn as nn + +from detectron2.config import LazyCall as L +from detectron2.layers import ShapeSpec +from detectron2.modeling.backbone import BasicStem, ResNet +from detrex.layers import PositionEmbeddingSine +from detrex.modeling.matcher import HungarianMatcher +from detrex.modeling.neck import ChannelMapper +from ape.modeling.deta import ( + DeformableCriterion, + DeformableDETR, + DeformableDETRSegm, + DeformableDetrTransformer, + DeformableDetrTransformerDecoder, + DeformableDetrTransformerEncoder, + Stage1Assigner, + Stage2Assigner, +) + +model = L(DeformableDETRSegm)( + backbone=L(ResNet)( + stem=L(BasicStem)(in_channels=3, out_channels=64, norm="FrozenBN"), + stages=L(ResNet.make_default_stages)( + depth=50, + stride_in_1x1=False, + norm="FrozenBN", + ), + out_features=["res2", "res3", "res4", "res5"], + freeze_at=1, + ), + position_embedding=L(PositionEmbeddingSine)( + num_pos_feats=128, + temperature=10000, + normalize=True, + offset=-0.5, + ), + neck=L(ChannelMapper)( + input_shapes={ + "res3": ShapeSpec(channels=512), + "res4": ShapeSpec(channels=1024), + "res5": ShapeSpec(channels=2048), + }, + in_features=["res3", "res4", "res5"], + out_channels=256, + num_outs=5, + kernel_size=1, + norm_layer=L(nn.GroupNorm)(num_groups=32, num_channels=256), + ), + transformer=L(DeformableDetrTransformer)( + encoder=L(DeformableDetrTransformerEncoder)( + embed_dim=256, + num_heads=8, + feedforward_dim=2048, + attn_dropout=0.0, + ffn_dropout=0.0, + num_layers=6, + post_norm=False, + num_feature_levels="${..num_feature_levels}", + ), + decoder=L(DeformableDetrTransformerDecoder)( + embed_dim=256, + num_heads=8, + feedforward_dim=2048, + attn_dropout=0.0, + ffn_dropout=0.0, + num_layers=6, + return_intermediate=True, + num_feature_levels="${..num_feature_levels}", + ), + as_two_stage="${..as_two_stage}", + num_feature_levels=5, + two_stage_num_proposals="${..num_queries}", + assign_first_stage=True, + ), + embed_dim=256, + num_classes=80, + num_queries=900, + aux_loss=True, + with_box_refine=True, + as_two_stage=True, + criterion=L(DeformableCriterion)( + num_classes=80, + matcher=L(HungarianMatcher)( + cost_class=2.0, + cost_bbox=5.0, + cost_giou=2.0, + cost_class_type="focal_loss_cost", + alpha=0.25, + gamma=2.0, + ), + matcher_stage1=L(Stage1Assigner)( + t_low=0.3, + t_high=0.7, + max_k=4, + ), + matcher_stage2=L(Stage2Assigner)( + num_queries="${...num_queries}", + num_classes="${...num_classes}", + max_k=4, + ), + weight_dict={ + "loss_class": 1.0, + "loss_bbox": 5.0, + "loss_giou": 2.0, + "loss_mask": 5, + "loss_dice": 5, + }, + loss_class_type="focal_loss", + alpha=0.25, + gamma=2.0, + losses=["class", "boxes", "masks"], + ), + pixel_mean=[123.675, 116.280, 103.530], + pixel_std=[58.395, 57.120, 57.375], + select_box_nums_for_evaluation=100, + input_format="RGB", + mask_encode_level=0, + segm_type="maskdino", + mask_in_features=["res2"], + input_shapes={ + "res2": ShapeSpec(channels=256), + "res3": ShapeSpec(channels=512), + "res4": ShapeSpec(channels=1024), + "res5": ShapeSpec(channels=2048), + }, + output_dir=None, + vis_period=12800, +) + +mask_dino_loss = False + +mask_dino_single_loss = False + +mask_combine_loss = False + +if mask_dino_loss: + model.criterion.weight_dict = { + "loss_class": 4.0, + "loss_bbox": 5.0, + "loss_giou": 2.0, + "loss_mask_maskdino": 5, + "loss_dice_maskdino": 5, + } + model.criterion.losses = ["class", "boxes", "masks_maskdino"] + +if mask_dino_single_loss: + model.criterion.weight_dict = { + "loss_class": 1.0, + "loss_bbox": 5.0, + "loss_giou": 2.0, + "loss_mask_maskdino": 5, + "loss_dice_maskdino": 5, + } + model.criterion.losses = ["class", "boxes", "masks_maskdino"] + +if mask_combine_loss: + model.criterion.weight_dict = { + "loss_class": 1.0, + "loss_bbox": 5.0, + "loss_giou": 2.0, + "loss_mask": 5.0, + "loss_dice": 5.0, + "loss_mask_maskdino": 1, + "loss_dice_maskdino": 1, + } + model.criterion.losses = ["class", "boxes", "masks", "masks_maskdino"] + +if model.aux_loss: + weight_dict = model.criterion.weight_dict + aux_weight_dict = {} + for i in range(model.transformer.decoder.num_layers - 1): + aux_weight_dict.update({k + f"_{i}": v for k, v in weight_dict.items()}) + aux_weight_dict.update({k + "_enc": v for k, v in weight_dict.items()}) + weight_dict.update(aux_weight_dict) + model.criterion.weight_dict = weight_dict + +if mask_dino_single_loss: + weight_dict = model.criterion.weight_dict + + for i in range(model.transformer.decoder.num_layers - 1): + weight_dict.update({f"loss_mask_maskdino_{i}": 0}) + weight_dict.update({f"loss_dice_maskdino_{i}": 0}) + + model.criterion.weight_dict = weight_dict + + +if mask_combine_loss: + weight_dict = model.criterion.weight_dict + + weight_dict.update({"loss_mask_maskdino": 0}) + weight_dict.update({"loss_dice_maskdino": 0}) + + model.criterion.weight_dict = weight_dict + +loss_boxes_panoptic = False +if loss_boxes_panoptic: + model.criterion.losses = ["class", "boxes_panoptic", "masks"] diff --git a/approach/ovod/APE/configs/COCO_PanopticSegmentation/ape_deta/ape_deta_r50_12ep.py b/approach/ovod/APE/configs/COCO_PanopticSegmentation/ape_deta/ape_deta_r50_12ep.py new file mode 100644 index 0000000000000000000000000000000000000000..d973b04ac92b675da8421e41147f03de16a8af1b --- /dev/null +++ b/approach/ovod/APE/configs/COCO_PanopticSegmentation/ape_deta/ape_deta_r50_12ep.py @@ -0,0 +1,24 @@ +from ...COCO_InstanceSegmentation.ape_deta.ape_deta_r50_12ep import ( + lr_multiplier, + model, + optimizer, + train, +) + +from ...common.data.coco_panoptic import dataloader + +model.model_vision.dataset_prompts = ["name"] +model.model_vision.dataset_names = ["coco_2017"] +model.model_vision.dataset_metas = dataloader.train.dataset.names + +model.model_vision.instance_on = True +model.model_vision.semantic_on = True +model.model_vision.panoptic_on = True + +model.model_vision.stuff_prob_thing = -1.0 + +model.model_vision.semantic_post_nms = False +model.model_vision.panoptic_post_nms = True +model.model_vision.aux_mask = True + +train.output_dir = "output/" + __file__[:-3] diff --git a/approach/ovod/APE/configs/COCO_PanopticSegmentation/ape_deta/ape_deta_r50_12ep_separated.py b/approach/ovod/APE/configs/COCO_PanopticSegmentation/ape_deta/ape_deta_r50_12ep_separated.py new file mode 100644 index 0000000000000000000000000000000000000000..d7cad91720b17753cf64b3d3005ab89fb38a87d2 --- /dev/null +++ b/approach/ovod/APE/configs/COCO_PanopticSegmentation/ape_deta/ape_deta_r50_12ep_separated.py @@ -0,0 +1,24 @@ +from ...COCO_InstanceSegmentation.ape_deta.ape_deta_r50_12ep import ( + lr_multiplier, + model, + optimizer, + train, +) + +from ...common.data.coco_panoptic_separated import dataloader + +model.model_vision.dataset_prompts = ["name"] +model.model_vision.dataset_names = ["coco_2017"] +model.model_vision.dataset_metas = dataloader.train.dataset.names + +model.model_vision.instance_on = True +model.model_vision.semantic_on = True +model.model_vision.panoptic_on = True + +model.model_vision.stuff_prob_thing = -1.0 + +model.model_vision.semantic_post_nms = False +model.model_vision.panoptic_post_nms = True +model.model_vision.aux_mask = True + +train.output_dir = "output/" + __file__[:-3] diff --git a/approach/ovod/APE/configs/COCO_PanopticSegmentation/ape_deta/ape_deta_r50_24ep.py b/approach/ovod/APE/configs/COCO_PanopticSegmentation/ape_deta/ape_deta_r50_24ep.py new file mode 100644 index 0000000000000000000000000000000000000000..951b192750d2c746946db5ecda0411689711c08b --- /dev/null +++ b/approach/ovod/APE/configs/COCO_PanopticSegmentation/ape_deta/ape_deta_r50_24ep.py @@ -0,0 +1,9 @@ +from detrex.config import get_config + +from .deformable_deta_segm_r50_12ep import dataloader, model, optimizer, train + +lr_multiplier = get_config("common/coco_schedule.py").lr_multiplier_24ep + +train.max_iter = 180000 + +train.output_dir = "output/" + __file__[:-3] diff --git a/approach/ovod/APE/configs/COCO_PanopticSegmentation/ape_deta/ape_deta_r50_lsj1024.py b/approach/ovod/APE/configs/COCO_PanopticSegmentation/ape_deta/ape_deta_r50_lsj1024.py new file mode 100644 index 0000000000000000000000000000000000000000..b0c3194b5f860ecdff94a181a90bc10bc1b9bb0f --- /dev/null +++ b/approach/ovod/APE/configs/COCO_PanopticSegmentation/ape_deta/ape_deta_r50_lsj1024.py @@ -0,0 +1,24 @@ +from ...COCO_InstanceSegmentation.ape_deta.ape_deta_r50_12ep import ( + lr_multiplier, + model, + optimizer, + train, +) + +from ...common.data.coco_panoptic_lsj1024 import dataloader + +model.model_vision.dataset_prompts = ["name"] +model.model_vision.dataset_names = ["coco_2017"] +model.model_vision.dataset_metas = dataloader.train.dataset.names + +model.model_vision.instance_on = True +model.model_vision.semantic_on = True +model.model_vision.panoptic_on = True + +model.model_vision.stuff_prob_thing = -1.0 + +model.model_vision.semantic_post_nms = False +model.model_vision.panoptic_post_nms = True +model.model_vision.aux_mask = True + +train.output_dir = "output/" + __file__[:-3] diff --git a/approach/ovod/APE/configs/COCO_PanopticSegmentation/ape_deta/ape_deta_r50_vlf_lsj1024.py b/approach/ovod/APE/configs/COCO_PanopticSegmentation/ape_deta/ape_deta_r50_vlf_lsj1024.py new file mode 100644 index 0000000000000000000000000000000000000000..4b7886e47c34189457784fa3d3f523083c162b03 --- /dev/null +++ b/approach/ovod/APE/configs/COCO_PanopticSegmentation/ape_deta/ape_deta_r50_vlf_lsj1024.py @@ -0,0 +1,24 @@ +from ...COCO_InstanceSegmentation.ape_deta.ape_deta_r50_vlf_12ep import ( + lr_multiplier, + model, + optimizer, + train, +) + +from ...common.data.coco_panoptic_lsj1024 import dataloader + +model.model_vision.dataset_prompts = ["name"] +model.model_vision.dataset_names = ["coco_2017"] +model.model_vision.dataset_metas = dataloader.train.dataset.names + +model.model_vision.instance_on = True +model.model_vision.semantic_on = True +model.model_vision.panoptic_on = True + +model.model_vision.stuff_prob_thing = -1.0 + +model.model_vision.semantic_post_nms = False +model.model_vision.panoptic_post_nms = True +model.model_vision.aux_mask = True + +train.output_dir = "output/" + __file__[:-3] diff --git a/approach/ovod/APE/configs/COCO_PanopticSegmentation/ape_deta/ape_deta_vitl_eva02_clip_vlf_lsj1024.py b/approach/ovod/APE/configs/COCO_PanopticSegmentation/ape_deta/ape_deta_vitl_eva02_clip_vlf_lsj1024.py new file mode 100644 index 0000000000000000000000000000000000000000..4f12d7009c53ac3cc0db88d4f79fefc3b3af1dea --- /dev/null +++ b/approach/ovod/APE/configs/COCO_PanopticSegmentation/ape_deta/ape_deta_vitl_eva02_clip_vlf_lsj1024.py @@ -0,0 +1,20 @@ +from ...COCO_InstanceSegmentation.ape_deta.ape_deta_vitl_eva02_clip_vlf_lsj1024_cp_12ep import ( + lr_multiplier, + model, + optimizer, + train, +) + +from ...common.data.coco_panoptic_lsj1024 import dataloader + +model.model_vision.dataset_prompts = ["name"] +model.model_vision.dataset_names = ["coco_2017"] +model.model_vision.dataset_metas = dataloader.train.dataset.names + +model.model_vision.instance_on = True +model.model_vision.semantic_on = True +model.model_vision.panoptic_on = True + +model.model_vision.stuff_prob_thing = -1.0 + +train.output_dir = "output/" + __file__[:-3] diff --git a/approach/ovod/APE/configs/COCO_PanopticSegmentation/ape_deta/ape_deta_vitl_eva02_lsj1024.py b/approach/ovod/APE/configs/COCO_PanopticSegmentation/ape_deta/ape_deta_vitl_eva02_lsj1024.py new file mode 100644 index 0000000000000000000000000000000000000000..7ba49aa3bd98d966e137344e364feee74d585845 --- /dev/null +++ b/approach/ovod/APE/configs/COCO_PanopticSegmentation/ape_deta/ape_deta_vitl_eva02_lsj1024.py @@ -0,0 +1,20 @@ +from ...COCO_InstanceSegmentation.ape_deta.ape_deta_vitl_eva02_lsj1024_cp_12ep import ( + lr_multiplier, + model, + optimizer, + train, +) + +from ...common.data.coco_panoptic_lsj1024 import dataloader + +model.model_vision.dataset_prompts = ["name"] +model.model_vision.dataset_names = ["coco_2017"] +model.model_vision.dataset_metas = dataloader.train.dataset.names + +model.model_vision.instance_on = True +model.model_vision.semantic_on = True +model.model_vision.panoptic_on = True + +model.model_vision.stuff_prob_thing = -1.0 + +train.output_dir = "output/" + __file__[:-3] diff --git a/approach/ovod/APE/configs/COCO_PanopticSegmentation/ape_deta/ape_deta_vitl_eva02_vlf_lsj1024.py b/approach/ovod/APE/configs/COCO_PanopticSegmentation/ape_deta/ape_deta_vitl_eva02_vlf_lsj1024.py new file mode 100644 index 0000000000000000000000000000000000000000..0cb2c73053d011061e53c65fa1fb55ca4209b646 --- /dev/null +++ b/approach/ovod/APE/configs/COCO_PanopticSegmentation/ape_deta/ape_deta_vitl_eva02_vlf_lsj1024.py @@ -0,0 +1,20 @@ +from ...COCO_InstanceSegmentation.ape_deta.ape_deta_vitl_eva02_vlf_lsj1024_cp_12ep import ( + lr_multiplier, + model, + optimizer, + train, +) + +from ...common.data.coco_panoptic_lsj1024 import dataloader + +model.model_vision.dataset_prompts = ["name"] +model.model_vision.dataset_names = ["coco_2017"] +model.model_vision.dataset_metas = dataloader.train.dataset.names + +model.model_vision.instance_on = True +model.model_vision.semantic_on = True +model.model_vision.panoptic_on = True + +model.model_vision.stuff_prob_thing = -1.0 + +train.output_dir = "output/" + __file__[:-3] diff --git a/approach/ovod/APE/configs/COCO_PanopticSegmentation/deformable_deta/deformable_deta_segm_r50_12ep.py b/approach/ovod/APE/configs/COCO_PanopticSegmentation/deformable_deta/deformable_deta_segm_r50_12ep.py new file mode 100644 index 0000000000000000000000000000000000000000..98c1c16f714c130b5a192e1c1a201cde2cd008b2 --- /dev/null +++ b/approach/ovod/APE/configs/COCO_PanopticSegmentation/deformable_deta/deformable_deta_segm_r50_12ep.py @@ -0,0 +1,27 @@ +from ...COCO_InstanceSegmentation.deformable_deta.deformable_deta_segm_r50_12ep import ( + lr_multiplier, + model, + optimizer, + train, +) + +from ...common.data.coco_panoptic import dataloader + +model.num_classes = 133 +model.criterion.num_classes = 133 +model.dataset_metas = dataloader.train.dataset.names + +model.stuff_dataset_learn_thing = False + +model.instance_on = True +model.semantic_on = True +model.panoptic_on = True + +model.stuff_prob_thing = -1.0 + + +model.semantic_post_nms = False +model.panoptic_post_nms = True +model.aux_mask = True + +train.output_dir = "output/" + __file__[:-3] diff --git a/approach/ovod/APE/configs/COCO_PanopticSegmentation/deformable_deta/deformable_deta_segm_r50_24ep.py b/approach/ovod/APE/configs/COCO_PanopticSegmentation/deformable_deta/deformable_deta_segm_r50_24ep.py new file mode 100644 index 0000000000000000000000000000000000000000..951b192750d2c746946db5ecda0411689711c08b --- /dev/null +++ b/approach/ovod/APE/configs/COCO_PanopticSegmentation/deformable_deta/deformable_deta_segm_r50_24ep.py @@ -0,0 +1,9 @@ +from detrex.config import get_config + +from .deformable_deta_segm_r50_12ep import dataloader, model, optimizer, train + +lr_multiplier = get_config("common/coco_schedule.py").lr_multiplier_24ep + +train.max_iter = 180000 + +train.output_dir = "output/" + __file__[:-3] diff --git a/approach/ovod/APE/configs/COCO_PanopticSegmentation/deformable_deta/deformable_deta_segm_r50_36ep.py b/approach/ovod/APE/configs/COCO_PanopticSegmentation/deformable_deta/deformable_deta_segm_r50_36ep.py new file mode 100644 index 0000000000000000000000000000000000000000..82f6c133f0ef839b88a2eea3131bba35129d0b04 --- /dev/null +++ b/approach/ovod/APE/configs/COCO_PanopticSegmentation/deformable_deta/deformable_deta_segm_r50_36ep.py @@ -0,0 +1,9 @@ +from detrex.config import get_config + +from .deformable_deta_segm_r50_12ep import dataloader, model, optimizer, train + +lr_multiplier = get_config("common/coco_schedule.py").lr_multiplier_36ep + +train.max_iter = 270000 + +train.output_dir = "output/" + __file__[:-3] diff --git a/approach/ovod/APE/configs/COCO_PanopticSegmentation/deformable_deta/deformable_deta_segm_r50_50ep.py b/approach/ovod/APE/configs/COCO_PanopticSegmentation/deformable_deta/deformable_deta_segm_r50_50ep.py new file mode 100644 index 0000000000000000000000000000000000000000..71bcfead5cf79d5ead99108ff32b985071d8c6d4 --- /dev/null +++ b/approach/ovod/APE/configs/COCO_PanopticSegmentation/deformable_deta/deformable_deta_segm_r50_50ep.py @@ -0,0 +1,9 @@ +from detrex.config import get_config + +from .deformable_deta_segm_r50_12ep import dataloader, model, optimizer, train + +lr_multiplier = get_config("common/coco_schedule.py").lr_multiplier_50ep + +train.max_iter = 375000 + +train.output_dir = "output/" + __file__[:-3] diff --git a/approach/ovod/APE/configs/COCO_SA1B_InstanceSegmentation/ape_deta/ape_deta_r50_24ep.py b/approach/ovod/APE/configs/COCO_SA1B_InstanceSegmentation/ape_deta/ape_deta_r50_24ep.py new file mode 100644 index 0000000000000000000000000000000000000000..7619c00f3de4fae914cafc3a0c701ae3c2c08c54 --- /dev/null +++ b/approach/ovod/APE/configs/COCO_SA1B_InstanceSegmentation/ape_deta/ape_deta_r50_24ep.py @@ -0,0 +1,36 @@ +from detrex.config import get_config + +from ...COCO_InstanceSegmentation.ape_deta.ape_deta_r50_12ep import model, optimizer, train +from ...common.data.coco_sa1b_instance import dataloader + +model.model_vision.num_classes = 80 +criterion = model.model_vision.criterion[0] +model.model_vision.criterion = [criterion for _ in range(2)] +for criterion, num_classes in zip(model.model_vision.criterion, [80, 1]): + criterion.num_classes = num_classes + +for k, v in model.model_vision.criterion[1].weight_dict.items(): + if "_class" in k and "_enc" not in k: + model.model_vision.criterion[1].weight_dict.update({k: 0.0}) + +model.model_vision.stuff_dataset_learn_thing = False +model.model_vision.stuff_prob_thing = 0.9 + +model.model_vision.instance_on = True +model.model_vision.semantic_on = False +model.model_vision.panoptic_on = False + +train.max_iter = 180000 +train.eval_period = 5000 + +lr_multiplier = get_config("common/coco_schedule.py").lr_multiplier_24ep + +dataloader.train.total_batch_size = 16 +dataloader.train.total_batch_size_list = [16, 16] + +model.model_vision.dataset_prompts = ["name", "name"] +model.model_vision.dataset_names = ["coco", "sa1b"] +model.model_vision.dataset_metas = dataloader.train.dataset.names + +train.output_dir = "output/" + __file__[:-3] +model.model_vision.vis_period = 1280 diff --git a/approach/ovod/APE/configs/COCO_SA1B_InstanceSegmentation/ape_deta/ape_deta_r50_24ep_mp.py b/approach/ovod/APE/configs/COCO_SA1B_InstanceSegmentation/ape_deta/ape_deta_r50_24ep_mp.py new file mode 100644 index 0000000000000000000000000000000000000000..d8b4ee96ad0c907dfa6412134b5e9de3df3cf349 --- /dev/null +++ b/approach/ovod/APE/configs/COCO_SA1B_InstanceSegmentation/ape_deta/ape_deta_r50_24ep_mp.py @@ -0,0 +1,6 @@ +from .ape_deta_r50_24ep import dataloader, lr_multiplier, model, optimizer, train + +model.model_vision.transformer.proposal_ambiguous = 1 + +train.output_dir = "output/" + __file__[:-3] +model.model_vision.vis_period = 128 diff --git a/approach/ovod/APE/configs/COCO_SA1B_PanopticSegmentation/ape_deta/ape_deta_r50_24ep.py b/approach/ovod/APE/configs/COCO_SA1B_PanopticSegmentation/ape_deta/ape_deta_r50_24ep.py new file mode 100644 index 0000000000000000000000000000000000000000..91481dc74d553e620ac46a08bb35504c2c4c9e8f --- /dev/null +++ b/approach/ovod/APE/configs/COCO_SA1B_PanopticSegmentation/ape_deta/ape_deta_r50_24ep.py @@ -0,0 +1,36 @@ +from detrex.config import get_config + +from ...COCO_InstanceSegmentation.ape_deta.ape_deta_r50_12ep import model, optimizer, train +from ...common.data.coco_sa1b_panoptic import dataloader + +model.model_vision.num_classes = 133 +criterion = model.model_vision.criterion[0] +model.model_vision.criterion = [criterion for _ in range(2)] +for criterion, num_classes in zip(model.model_vision.criterion, [133, 1]): + criterion.num_classes = num_classes + +for k, v in model.model_vision.criterion[1].weight_dict.items(): + if "_class" in k and "_enc" not in k: + model.model_vision.criterion[1].weight_dict.update({k: 0.0}) + +model.model_vision.stuff_dataset_learn_thing = False +model.model_vision.stuff_prob_thing = 0.9 + +model.model_vision.instance_on = True +model.model_vision.semantic_on = True +model.model_vision.panoptic_on = True + +train.max_iter = 180000 +train.eval_period = 5000 + +lr_multiplier = get_config("common/coco_schedule.py").lr_multiplier_24ep + +dataloader.train.total_batch_size = 16 +dataloader.train.total_batch_size_list = [16, 16] + +model.model_vision.dataset_prompts = ["name", "name"] +model.model_vision.dataset_names = ["coco", "sa1b"] +model.model_vision.dataset_metas = dataloader.train.dataset.names + +train.output_dir = "output/" + __file__[:-3] +model.model_vision.vis_period = 1280 diff --git a/approach/ovod/APE/configs/COCO_SA1B_PanopticSegmentation/ape_deta/ape_deta_r50_24ep_lp.py b/approach/ovod/APE/configs/COCO_SA1B_PanopticSegmentation/ape_deta/ape_deta_r50_24ep_lp.py new file mode 100644 index 0000000000000000000000000000000000000000..a6181fde0c5531c7ab010b52f0584682e4ad9780 --- /dev/null +++ b/approach/ovod/APE/configs/COCO_SA1B_PanopticSegmentation/ape_deta/ape_deta_r50_24ep_lp.py @@ -0,0 +1,9 @@ +from .ape_deta_r50_24ep import dataloader, lr_multiplier, model, optimizer, train + +model.model_vision.criterion[0].losses += ["iou"] +model.model_vision.criterion[0].weight_dict["loss_ious"] = 1.0 + +model.model_vision.last_class_embed_use_mlp = True + +train.output_dir = "output/" + __file__[:-3] +model.model_vision.vis_period = 128 diff --git a/approach/ovod/APE/configs/COCO_SA1B_PanopticSegmentation/ape_deta/ape_deta_r50_24ep_vlf_lp.py b/approach/ovod/APE/configs/COCO_SA1B_PanopticSegmentation/ape_deta/ape_deta_r50_24ep_vlf_lp.py new file mode 100644 index 0000000000000000000000000000000000000000..543575f25246d2c5aa2a3fdd17d5a58db7c77ea1 --- /dev/null +++ b/approach/ovod/APE/configs/COCO_SA1B_PanopticSegmentation/ape_deta/ape_deta_r50_24ep_vlf_lp.py @@ -0,0 +1,41 @@ +from detectron2.config import LazyCall as L +from ape.layers import VisionLanguageFusion +from ape.modeling.ape_deta import ( + DeformableDETRSegmVL, + DeformableDetrTransformerDecoderVL, + DeformableDetrTransformerEncoderVL, + DeformableDetrTransformerVL, +) + +from .ape_deta_r50_24ep_lp import dataloader, lr_multiplier, model, optimizer, train + +model.model_vision.update( + _target_=DeformableDETRSegmVL, +) +model.model_vision.transformer.update( + _target_=DeformableDetrTransformerVL, +) +model.model_vision.transformer.encoder.update( + _target_=DeformableDetrTransformerEncoderVL, +) +model.model_vision.transformer.decoder.update( + _target_=DeformableDetrTransformerDecoderVL, +) + + +model.model_vision.transformer.encoder.vl_layer = L(VisionLanguageFusion)( + v_dim="${....embed_dim}", + l_dim="${....embed_dim_language}", + embed_dim=2048, + num_heads=8, + dropout=0.1, + drop_path=0.0, + init_values=1.0 / 6, + stable_softmax_2d=False, + clamp_min_for_underflow=True, + clamp_max_for_overflow=True, + use_checkpoint=False, +) + +train.output_dir = "output/" + __file__[:-3] +model.model_vision.vis_period = 128 diff --git a/approach/ovod/APE/configs/COCO_SemanticSegmentation/ape_deta/ape_deta_r50_12ep.py b/approach/ovod/APE/configs/COCO_SemanticSegmentation/ape_deta/ape_deta_r50_12ep.py new file mode 100644 index 0000000000000000000000000000000000000000..566bca7586e04d0db326cc54292a8109c4e9b835 --- /dev/null +++ b/approach/ovod/APE/configs/COCO_SemanticSegmentation/ape_deta/ape_deta_r50_12ep.py @@ -0,0 +1,27 @@ +from ...COCO_InstanceSegmentation.ape_deta.ape_deta_r50_12ep import ( + lr_multiplier, + model, + optimizer, + train, +) +from ...common.data.coco_semantic import dataloader + +model.model_vision.dataset_prompts = ["name"] +model.model_vision.dataset_names = ["stuffonly"] +model.model_vision.dataset_metas = dataloader.train.dataset.names + +num_classes = 54 +model.model_vision.num_classes = num_classes +model.model_vision.criterion[0].num_classes = num_classes +model.model_vision.criterion[0].matcher_stage2.num_classes = num_classes + +model.model_vision.instance_on = False +model.model_vision.semantic_on = True +model.model_vision.panoptic_on = False + +model.model_vision.stuff_prob_thing = 0.9 + +model.model_vision.semantic_post_nms = False +model.model_vision.aux_mask = True + +train.output_dir = "output/" + __file__[:-3] diff --git a/approach/ovod/APE/configs/COCO_SemanticSegmentation/ape_deta/ape_deta_r50_vlf_lsj1024_12ep.py b/approach/ovod/APE/configs/COCO_SemanticSegmentation/ape_deta/ape_deta_r50_vlf_lsj1024_12ep.py new file mode 100644 index 0000000000000000000000000000000000000000..7be08c0f82517f275b0337ca7bedc8c6cfafbe64 --- /dev/null +++ b/approach/ovod/APE/configs/COCO_SemanticSegmentation/ape_deta/ape_deta_r50_vlf_lsj1024_12ep.py @@ -0,0 +1,27 @@ +from ...COCO_InstanceSegmentation.ape_deta.ape_deta_r50_vlf_12ep import ( + lr_multiplier, + model, + optimizer, + train, +) +from ...common.data.coco_semantic_lsj1024 import dataloader + +model.model_vision.dataset_prompts = ["name"] +model.model_vision.dataset_names = ["stuffonly"] +model.model_vision.dataset_metas = dataloader.train.dataset.names + +num_classes = 54 +model.model_vision.num_classes = num_classes +model.model_vision.criterion[0].num_classes = num_classes +model.model_vision.criterion[0].matcher_stage2.num_classes = num_classes + +model.model_vision.instance_on = False +model.model_vision.semantic_on = True +model.model_vision.panoptic_on = False + +model.model_vision.stuff_prob_thing = 0.9 + +model.model_vision.semantic_post_nms = False +model.model_vision.aux_mask = True + +train.output_dir = "output/" + __file__[:-3] diff --git a/approach/ovod/APE/configs/COCO_SemanticSegmentation/ape_deta/ape_deta_vitl_eva02_lsj1024_12ep.py b/approach/ovod/APE/configs/COCO_SemanticSegmentation/ape_deta/ape_deta_vitl_eva02_lsj1024_12ep.py new file mode 100644 index 0000000000000000000000000000000000000000..d689ef396c50a0a336142f490772126bb25e3dd6 --- /dev/null +++ b/approach/ovod/APE/configs/COCO_SemanticSegmentation/ape_deta/ape_deta_vitl_eva02_lsj1024_12ep.py @@ -0,0 +1,33 @@ +from detectron2.config import LazyCall as L +from ape.modeling.text import EVA01CLIP + +from ...COCO_InstanceSegmentation.ape_deta.ape_deta_vitl_eva02_lsj1024_cp_12ep import ( + lr_multiplier, + model, + optimizer, + train, +) +from ...common.data.coco_semantic_lsj1024 import dataloader + +num_classes = 54 +model.model_vision.num_classes = num_classes +model.model_vision.criterion[0].num_classes = num_classes +model.model_vision.criterion[0].matcher_stage2.num_classes = num_classes + +model.model_vision.instance_on = False +model.model_vision.semantic_on = True +model.model_vision.panoptic_on = False + +train.output_dir = "output/" + __file__[:-3] + +model.model_vision.dataset_prompts = ["name"] +model.model_vision.dataset_names = ["stuffonly"] +model.model_vision.dataset_metas = dataloader.train.dataset.names + +train.output_dir = "output/" + __file__[:-3] +model.model_vision.output_dir = train.output_dir + +model.model_language = L(EVA01CLIP)( + clip_model="EVA_CLIP_g_14_X", cache_dir="models/BAAI/EVA/eva_clip_psz14.pt" +) +model.model_vision.embed_dim_language = 1024 diff --git a/approach/ovod/APE/configs/COCO_SemanticSegmentation/deformable_deta/deformable_deta_segm_r50_12ep.py b/approach/ovod/APE/configs/COCO_SemanticSegmentation/deformable_deta/deformable_deta_segm_r50_12ep.py new file mode 100644 index 0000000000000000000000000000000000000000..fb3adcc371c0adef6ff9551ef516e6c2d21ed74f --- /dev/null +++ b/approach/ovod/APE/configs/COCO_SemanticSegmentation/deformable_deta/deformable_deta_segm_r50_12ep.py @@ -0,0 +1,22 @@ +from ...COCO_InstanceSegmentation.deformable_deta.deformable_deta_segm_r50_12ep import ( + lr_multiplier, + model, + optimizer, + train, +) +from ...common.data.coco_semantic import dataloader + +num_classes = 54 +model.num_classes = num_classes +model.criterion.num_classes = num_classes +model.criterion.matcher_stage2.num_classes = num_classes + +model.instance_on = False +model.semantic_on = True +model.panoptic_on = False + +train.init_checkpoint = "detectron2://ImageNetPretrained/torchvision/R-50.pkl" +train.init_checkpoint = "models/torchvision/R-50.pkl" +train.output_dir = "output/" + __file__[:-3] + +model.dataset_metas = dataloader.train.dataset.names diff --git a/approach/ovod/APE/configs/D3_InstanceSegmentation/ape_deta/ape_deta_vitl_eva02_clip_vlf_lsj1024.py b/approach/ovod/APE/configs/D3_InstanceSegmentation/ape_deta/ape_deta_vitl_eva02_clip_vlf_lsj1024.py new file mode 100644 index 0000000000000000000000000000000000000000..5d9c30075dbb7252e59d4450f65d1d0bb0016c9a --- /dev/null +++ b/approach/ovod/APE/configs/D3_InstanceSegmentation/ape_deta/ape_deta_vitl_eva02_clip_vlf_lsj1024.py @@ -0,0 +1,101 @@ +import torch.nn as nn + +from detectron2.config import LazyCall as L +from detectron2.layers import ShapeSpec +from detrex.modeling.neck import ChannelMapper +from ape.layers import VisionLanguageFusion +from ape.modeling.ape_deta import ( + DeformableDETRSegmVL, + DeformableDetrTransformerDecoderVL, + DeformableDetrTransformerEncoderVL, + DeformableDetrTransformerVL, +) +from ape.modeling.text import EVA02CLIP + +from ...common.backbone.vitl_eva02_clip import backbone +from .ape_deta_vitl_eva02_lsj1024 import dataloader, lr_multiplier, model, optimizer, train + +model.model_vision.backbone = backbone + +train.init_checkpoint = ( + "models/QuanSun/EVA-CLIP/EVA02_CLIP_L_336_psz14to16_s6B.pt?matching_heuristics=True" +) + +model.model_language = L(EVA02CLIP)( + clip_model="EVA02-CLIP-bigE-14-plus", + cache_dir="models/QuanSun/EVA-CLIP/EVA02_CLIP_E_psz14_plus_s9B.pt", + dtype="float16", +) +model.model_vision.embed_dim_language = 1024 + +model.model_vision.neck = L(ChannelMapper)( + input_shapes={ + "p2": ShapeSpec(channels=256), + "p3": ShapeSpec(channels=256), + "p4": ShapeSpec(channels=256), + "p5": ShapeSpec(channels=256), + "p6": ShapeSpec(channels=256), + }, + in_features=["p2", "p3", "p4", "p5", "p6"], + out_channels=256, + num_outs=5, + kernel_size=1, + norm_layer=L(nn.GroupNorm)(num_groups=32, num_channels=256), +) + +model.model_vision.mask_in_features = ["p2"] +model.model_vision.input_shapes = { + "p2": ShapeSpec(channels=256), + "p3": ShapeSpec(channels=256), + "p4": ShapeSpec(channels=256), + "p5": ShapeSpec(channels=256), + "p6": ShapeSpec(channels=256), +} + +model.model_vision.transformer.encoder.num_layers = 6 +model.model_vision.transformer.decoder.num_layers = 6 +model.model_vision.transformer.encoder.embed_dim = 256 +model.model_vision.transformer.decoder.embed_dim = 256 +model.model_vision.embed_dim = 256 +model.model_vision.backbone.out_channels = 256 + +model.model_vision.update( + _target_=DeformableDETRSegmVL, +) +model.model_vision.transformer.update( + _target_=DeformableDetrTransformerVL, +) +model.model_vision.transformer.encoder.update( + _target_=DeformableDetrTransformerEncoderVL, +) +model.model_vision.transformer.decoder.update( + _target_=DeformableDetrTransformerDecoderVL, +) + +model.model_vision.transformer.encoder.vl_layer = L(VisionLanguageFusion)( + v_dim="${....embed_dim}", + l_dim="${....embed_dim_language}", + embed_dim=2048, + num_heads=8, + dropout=0.1, + drop_path=0.0, + init_values=1.0 / 6, + stable_softmax_2d=True, + clamp_min_for_underflow=True, + clamp_max_for_overflow=True, + use_checkpoint=True, +) + +model.model_vision.text_feature_bank = True +model.model_vision.text_feature_bank_reset = True +model.model_vision.text_feature_reduce_before_fusion = True +model.model_vision.text_feature_batch_repeat = True +model.model_vision.expression_cumulative_gt_class = True +model.model_vision.name_prompt_fusion_type = "zero" + +model.model_vision.stuff_dataset_learn_thing = False +model.model_vision.stuff_prob_thing = -1.0 +model.model_vision.transformer.proposal_ambiguous = 2 + +train.output_dir = "output/" + __file__[:-3] +model.model_vision.vis_period = 12800 diff --git a/approach/ovod/APE/configs/D3_InstanceSegmentation/ape_deta/ape_deta_vitl_eva02_lsj1024.py b/approach/ovod/APE/configs/D3_InstanceSegmentation/ape_deta/ape_deta_vitl_eva02_lsj1024.py new file mode 100644 index 0000000000000000000000000000000000000000..aa0377580a7d8d54fc86ce518d36d436fc23904d --- /dev/null +++ b/approach/ovod/APE/configs/D3_InstanceSegmentation/ape_deta/ape_deta_vitl_eva02_lsj1024.py @@ -0,0 +1,24 @@ +from ...COCO_InstanceSegmentation.ape_deta.ape_deta_vitl_eva02_lsj1024_cp_12ep import ( + lr_multiplier, + model, + optimizer, + train, +) +from ...common.data.d3_instance_lsj1024 import dataloader + +model.model_vision.dataset_prompts = ["expression"] +model.model_vision.dataset_names = ["d3"] +model.model_vision.dataset_metas = dataloader.train.dataset.names + +model.model_vision.num_classes = 256 +model.model_vision.criterion[0].num_classes = 256 +model.model_vision.select_box_nums_for_evaluation = 300 +model.model_vision.select_box_nums_for_evaluation_list = [300, 300] + +model.model_vision.instance_on = True +model.model_vision.semantic_on = False +model.model_vision.panoptic_on = False + +model.model_vision.stuff_prob_thing = -1.0 + +train.output_dir = "output/" + __file__[:-3] diff --git a/approach/ovod/APE/configs/D3_InstanceSegmentation/ape_deta/ape_deta_vitl_eva02_vlf_lsj1024.py b/approach/ovod/APE/configs/D3_InstanceSegmentation/ape_deta/ape_deta_vitl_eva02_vlf_lsj1024.py new file mode 100644 index 0000000000000000000000000000000000000000..a322cc152969fac60208a04242e8c479544041b3 --- /dev/null +++ b/approach/ovod/APE/configs/D3_InstanceSegmentation/ape_deta/ape_deta_vitl_eva02_vlf_lsj1024.py @@ -0,0 +1,47 @@ +from detectron2.config import LazyCall as L +from ape.layers import VisionLanguageFusion +from ape.modeling.ape_deta import ( + DeformableDETRSegmVL, + DeformableDetrTransformerDecoderVL, + DeformableDetrTransformerEncoderVL, + DeformableDetrTransformerVL, +) + +from .ape_deta_vitl_eva02_lsj1024 import dataloader, lr_multiplier, model, optimizer, train + +model.model_vision.update( + _target_=DeformableDETRSegmVL, +) +model.model_vision.transformer.update( + _target_=DeformableDetrTransformerVL, +) +model.model_vision.transformer.encoder.update( + _target_=DeformableDetrTransformerEncoderVL, +) +model.model_vision.transformer.decoder.update( + _target_=DeformableDetrTransformerDecoderVL, +) + +model.model_vision.transformer.encoder.vl_layer = L(VisionLanguageFusion)( + v_dim="${....embed_dim}", + l_dim="${....embed_dim_language}", + embed_dim=2048, + num_heads=8, + dropout=0.1, + drop_path=0.0, + init_values=1.0 / 6, + stable_softmax_2d=True, + clamp_min_for_underflow=True, + clamp_max_for_overflow=True, + use_checkpoint=True, +) + +model.model_vision.text_feature_bank = True +model.model_vision.text_feature_bank_reset = True +model.model_vision.text_feature_reduce_before_fusion = True +model.model_vision.text_feature_batch_repeat = True +model.model_vision.expression_cumulative_gt_class = True +model.model_vision.name_prompt_fusion_type = "zero" + +train.output_dir = "output/" + __file__[:-3] +model.model_vision.vis_period = 12800 diff --git a/approach/ovod/APE/configs/Flickr30k_VisualGrounding/ape_deta/ape_deta_r50_12ep.py b/approach/ovod/APE/configs/Flickr30k_VisualGrounding/ape_deta/ape_deta_r50_12ep.py new file mode 100644 index 0000000000000000000000000000000000000000..9c5c282b4f5f5c4bcf8d66b1e9593bede8bd33c0 --- /dev/null +++ b/approach/ovod/APE/configs/Flickr30k_VisualGrounding/ape_deta/ape_deta_r50_12ep.py @@ -0,0 +1,20 @@ +from ...COCO_InstanceSegmentation.ape_deta.ape_deta_r50_12ep import ( + lr_multiplier, + model, + optimizer, + train, +) +from ...common.data.flickr30k_instance import dataloader + +model.model_vision.num_classes = 200 + +model.model_vision.criterion[0].num_classes = 200 + +dataloader.train.mapper.max_num_phrase = 100 + +model.model_vision.dataset_prompts = ["phrase", "expression"] +model.model_vision.dataset_names = ["flickr30k", "refcoco"] +model.model_vision.dataset_metas = dataloader.train.dataset.names + ["refcoco-mixed"] + +train.output_dir = "output/" + __file__[:-3] +model.model_vision.vis_period = 1280 diff --git a/approach/ovod/APE/configs/Flickr30k_VisualGrounding/ape_deta/ape_deta_r50_vlf_12ep.py b/approach/ovod/APE/configs/Flickr30k_VisualGrounding/ape_deta/ape_deta_r50_vlf_12ep.py new file mode 100644 index 0000000000000000000000000000000000000000..cf35b8770f328feae3cb70f2c1521ce400602b59 --- /dev/null +++ b/approach/ovod/APE/configs/Flickr30k_VisualGrounding/ape_deta/ape_deta_r50_vlf_12ep.py @@ -0,0 +1,42 @@ +from detectron2.config import LazyCall as L +from omegaconf import OmegaConf +from ape.layers import VisionLanguageFusion +from ape.modeling.ape_deta import ( + DeformableDETRSegmVL, + DeformableDetrTransformerDecoderVL, + DeformableDetrTransformerEncoderVL, + DeformableDetrTransformerVL, +) + +from .ape_deta_r50_12ep import dataloader, lr_multiplier, model, optimizer, train + +model.model_vision.update( + _target_=DeformableDETRSegmVL, +) +model.model_vision.transformer.update( + _target_=DeformableDetrTransformerVL, +) +model.model_vision.transformer.encoder.update( + _target_=DeformableDetrTransformerEncoderVL, +) +model.model_vision.transformer.decoder.update( + _target_=DeformableDetrTransformerDecoderVL, +) + +model.model_vision.transformer.encoder.vl_layer = L(VisionLanguageFusion)( + v_dim="${....embed_dim}", + l_dim="${....embed_dim_language}", + embed_dim=2048, + num_heads=8, + dropout=0.1, + drop_path=0.0, + init_values=1.0 / 6, + stable_softmax_2d=True, + clamp_min_for_underflow=True, + clamp_max_for_overflow=True, + use_checkpoint=True, + use_attention_mask_v=True, +) + +train.output_dir = "output/" + __file__[:-3] +model.model_vision.vis_period = 1280 diff --git a/approach/ovod/APE/configs/Flickr30k_VisualGrounding/ape_deta/ape_deta_vitl_eva02_clip_vlf_lsj1024.py b/approach/ovod/APE/configs/Flickr30k_VisualGrounding/ape_deta/ape_deta_vitl_eva02_clip_vlf_lsj1024.py new file mode 100644 index 0000000000000000000000000000000000000000..a79624989a03ca1894d7f3a5d204a4123eceb33e --- /dev/null +++ b/approach/ovod/APE/configs/Flickr30k_VisualGrounding/ape_deta/ape_deta_vitl_eva02_clip_vlf_lsj1024.py @@ -0,0 +1,100 @@ +from detectron2.config import LazyCall as L +from detectron2.solver import WarmupParamScheduler +from fvcore.common.param_scheduler import MultiStepParamScheduler +from ape.data.detection_utils import get_fed_loss_cls_weights +from ape.layers import VisionLanguageFusion +from ape.modeling.ape_deta import ( + DeformableDETRSegmVL, + DeformableDetrTransformerDecoderVL, + DeformableDetrTransformerEncoderVL, + DeformableDetrTransformerVL, +) + +from ...common.data.flickr30k_instance_lsj1024 import dataloader +from ...LVIS_InstanceSegmentation.ape_deta.ape_deta_vitl_eva02_clip_lsj1024_cp_24ep import ( + model, + optimizer, + train, +) + +model.model_vision.num_classes = 256 +model.model_vision.select_box_nums_for_evaluation = 100 + +criterion = model.model_vision.criterion[0] +del criterion.use_fed_loss +del criterion.get_fed_loss_cls_weights +model.model_vision.criterion = [criterion for _ in range(1)] +for criterion, num_classes in zip( + model.model_vision.criterion, + [ + 1000, + ] + * 1, +): + criterion.num_classes = num_classes + + +model.model_vision.stuff_dataset_learn_thing = False +model.model_vision.stuff_prob_thing = -1.0 + +model.model_vision.instance_on = True +model.model_vision.semantic_on = False +model.model_vision.panoptic_on = False + +model.model_vision.neck = None + +train.max_iter = 720000 +train.eval_period = 720000 + +lr_multiplier = L(WarmupParamScheduler)( + scheduler=L(MultiStepParamScheduler)( + values=[1.0, 0.1], + milestones=[640000], + num_updates=720000, + ), + warmup_length=1000 / 720000, + warmup_method="linear", + warmup_factor=0.001, +) + +model.model_vision.dataset_prompts = ["phrase", "expression"] +model.model_vision.dataset_names = ["flickr30k", "refcoco"] +model.model_vision.dataset_metas = dataloader.train.dataset.names + ["refcoco-mixed"] + + +model.model_vision.update( + _target_=DeformableDETRSegmVL, +) +model.model_vision.transformer.update( + _target_=DeformableDetrTransformerVL, +) +model.model_vision.transformer.encoder.update( + _target_=DeformableDetrTransformerEncoderVL, +) +model.model_vision.transformer.decoder.update( + _target_=DeformableDetrTransformerDecoderVL, +) + +model.model_vision.transformer.encoder.vl_layer = L(VisionLanguageFusion)( + v_dim="${....embed_dim}", + l_dim="${....embed_dim_language}", + embed_dim=2048, + num_heads=8, + dropout=0.1, + drop_path=0.0, + init_values=1.0 / 6, + stable_softmax_2d=True, + clamp_min_for_underflow=True, + clamp_max_for_overflow=True, + use_checkpoint=True, + use_attention_mask_v=True, +) + +model.model_vision.text_feature_bank = True +model.model_vision.text_feature_reduce_before_fusion = True +model.model_vision.text_feature_batch_repeat = True +model.model_vision.expression_cumulative_gt_class = True +model.model_vision.name_prompt_fusion_type = "zero" + +train.output_dir = "output/" + __file__[:-3] +model.model_vision.vis_period = 12800 diff --git a/approach/ovod/APE/configs/Flickr30k_VisualGrounding/ape_deta/ape_deta_vitl_eva02_vlf_lsj1024.py b/approach/ovod/APE/configs/Flickr30k_VisualGrounding/ape_deta/ape_deta_vitl_eva02_vlf_lsj1024.py new file mode 100644 index 0000000000000000000000000000000000000000..4b6da52ad246049fe8671de0b6ad26d8038220e7 --- /dev/null +++ b/approach/ovod/APE/configs/Flickr30k_VisualGrounding/ape_deta/ape_deta_vitl_eva02_vlf_lsj1024.py @@ -0,0 +1,100 @@ +from detectron2.config import LazyCall as L +from detectron2.solver import WarmupParamScheduler +from fvcore.common.param_scheduler import MultiStepParamScheduler +from ape.data.detection_utils import get_fed_loss_cls_weights +from ape.layers import VisionLanguageFusion +from ape.modeling.ape_deta import ( + DeformableDETRSegmVL, + DeformableDetrTransformerDecoderVL, + DeformableDetrTransformerEncoderVL, + DeformableDetrTransformerVL, +) + +from ...common.data.flickr30k_instance_lsj1024 import dataloader +from ...LVIS_InstanceSegmentation.ape_deta.ape_deta_vitl_eva02_lsj1024_cp_24ep import ( + model, + optimizer, + train, +) + +model.model_vision.num_classes = 256 +model.model_vision.select_box_nums_for_evaluation = 300 + +criterion = model.model_vision.criterion[0] +del criterion.use_fed_loss +del criterion.get_fed_loss_cls_weights +model.model_vision.criterion = [criterion for _ in range(1)] +for criterion, num_classes in zip( + model.model_vision.criterion, + [ + 1000, + ] + * 1, +): + criterion.num_classes = num_classes + + +model.model_vision.stuff_dataset_learn_thing = False +model.model_vision.stuff_prob_thing = -1.0 + +model.model_vision.instance_on = True +model.model_vision.semantic_on = False +model.model_vision.panoptic_on = False + +model.model_vision.neck = None + +train.max_iter = 720000 +train.eval_period = 720000 + +lr_multiplier = L(WarmupParamScheduler)( + scheduler=L(MultiStepParamScheduler)( + values=[1.0, 0.1], + milestones=[640000], + num_updates=720000, + ), + warmup_length=1000 / 720000, + warmup_method="linear", + warmup_factor=0.001, +) + + +model.model_vision.dataset_prompts = ["phrase", "expression"] +model.model_vision.dataset_names = ["phrasecut_train", "phrasecut_val"] +model.model_vision.dataset_metas = dataloader.train.dataset.names + [dataloader.test.dataset.names] + + +model.model_vision.update( + _target_=DeformableDETRSegmVL, +) +model.model_vision.transformer.update( + _target_=DeformableDetrTransformerVL, +) +model.model_vision.transformer.encoder.update( + _target_=DeformableDetrTransformerEncoderVL, +) +model.model_vision.transformer.decoder.update( + _target_=DeformableDetrTransformerDecoderVL, +) + +model.model_vision.transformer.encoder.vl_layer = L(VisionLanguageFusion)( + v_dim="${....embed_dim}", + l_dim="${....embed_dim_language}", + embed_dim=2048, + num_heads=8, + dropout=0.1, + drop_path=0.0, + init_values=1.0 / 6, + stable_softmax_2d=True, + clamp_min_for_underflow=True, + clamp_max_for_overflow=True, + use_checkpoint=True, +) + +model.model_vision.text_feature_bank = True +model.model_vision.text_feature_reduce_before_fusion = True +model.model_vision.text_feature_batch_repeat = True +model.model_vision.expression_cumulative_gt_class = True +model.model_vision.name_prompt_fusion_type = "zero" + +train.output_dir = "output/" + __file__[:-3] +model.model_vision.vis_period = 12800 diff --git a/approach/ovod/APE/configs/GRIT_SA1B_VisualGrounding/ape_deta/ape_deta_r50_24ep.py b/approach/ovod/APE/configs/GRIT_SA1B_VisualGrounding/ape_deta/ape_deta_r50_24ep.py new file mode 100644 index 0000000000000000000000000000000000000000..7f81c558385780d3da7d95b39294abbdbc70bb6c --- /dev/null +++ b/approach/ovod/APE/configs/GRIT_SA1B_VisualGrounding/ape_deta/ape_deta_r50_24ep.py @@ -0,0 +1,42 @@ +from detrex.config import get_config + +from ...COCO_InstanceSegmentation.ape_deta.ape_deta_r50_12ep import ( + lr_multiplier, + model, + optimizer, + train, +) +from ...common.data.grit_sa1b_instance import dataloader + +model.model_vision.num_classes = 200 + +criterion = model.model_vision.criterion[0] +model.model_vision.criterion = [criterion for _ in range(2)] +for criterion, num_classes in zip(model.model_vision.criterion, [200, 1]): + criterion.num_classes = num_classes + +for k, v in model.model_vision.criterion[0].weight_dict.items(): + if "_class" in k and "_enc" in k: + model.model_vision.criterion[1].weight_dict.update({k: 0.0}) + +for k, v in model.model_vision.criterion[1].weight_dict.items(): + if "_class" in k and "_enc" not in k: + model.model_vision.criterion[1].weight_dict.update({k: 0.0}) + +dataloader.train.mapper.max_num_phrase = 100 +dataloader.train.mapper.nms_thresh_phrase = 0.6 + +train.max_iter = 180000 +train.eval_period = 5000 + +lr_multiplier = get_config("common/coco_schedule.py").lr_multiplier_24ep + +dataloader.train.total_batch_size = 16 +dataloader.train.total_batch_size_list = [16, 16] + +model.model_vision.dataset_prompts = ["phrase", "name", "expression"] +model.model_vision.dataset_names = ["grit", "sa1b", "refcoco"] +model.model_vision.dataset_metas = dataloader.train.dataset.names + ["refcoco-mixed"] + +train.output_dir = "output/" + __file__[:-3] +model.model_vision.vis_period = 1280 diff --git a/approach/ovod/APE/configs/GRIT_SA1B_VisualGrounding/ape_deta/ape_deta_r50_vlf_24ep.py b/approach/ovod/APE/configs/GRIT_SA1B_VisualGrounding/ape_deta/ape_deta_r50_vlf_24ep.py new file mode 100644 index 0000000000000000000000000000000000000000..aef90590360f131c7a9215fa619243f218b4a8b4 --- /dev/null +++ b/approach/ovod/APE/configs/GRIT_SA1B_VisualGrounding/ape_deta/ape_deta_r50_vlf_24ep.py @@ -0,0 +1,42 @@ +from detectron2.config import LazyCall as L +from omegaconf import OmegaConf +from ape.layers import VisionLanguageFusion +from ape.modeling.ape_deta import ( + DeformableDETRSegmVL, + DeformableDetrTransformerDecoderVL, + DeformableDetrTransformerEncoderVL, + DeformableDetrTransformerVL, +) + +from .ape_deta_r50_24ep import dataloader, lr_multiplier, model, optimizer, train + +model.model_vision.update( + _target_=DeformableDETRSegmVL, +) +model.model_vision.transformer.update( + _target_=DeformableDetrTransformerVL, +) +model.model_vision.transformer.encoder.update( + _target_=DeformableDetrTransformerEncoderVL, +) +model.model_vision.transformer.decoder.update( + _target_=DeformableDetrTransformerDecoderVL, +) + + +model.model_vision.transformer.encoder.vl_layer = L(VisionLanguageFusion)( + v_dim="${....embed_dim}", + l_dim="${....embed_dim_language}", + embed_dim=2048, + num_heads=8, + dropout=0.1, + drop_path=0.0, + init_values=1.0 / 6, + stable_softmax_2d=True, + clamp_min_for_underflow=True, + clamp_max_for_overflow=True, + use_checkpoint=True, +) + +train.output_dir = "output/" + __file__[:-3] +model.model_vision.vis_period = 1280 diff --git a/approach/ovod/APE/configs/GRIT_VisualGrounding/ape_deta/ape_deta_r50_400k.py b/approach/ovod/APE/configs/GRIT_VisualGrounding/ape_deta/ape_deta_r50_400k.py new file mode 100644 index 0000000000000000000000000000000000000000..cdff2446eb9c9ee52192a3ca537fb9c0ec1db190 --- /dev/null +++ b/approach/ovod/APE/configs/GRIT_VisualGrounding/ape_deta/ape_deta_r50_400k.py @@ -0,0 +1,42 @@ +from detectron2.config import LazyCall as L +from detectron2.solver import WarmupParamScheduler +from fvcore.common.param_scheduler import MultiStepParamScheduler + +from ...COCO_InstanceSegmentation.ape_deta.ape_deta_r50_12ep import ( + lr_multiplier, + model, + optimizer, + train, +) +from ...common.data.grit_instance import dataloader + +model.model_vision.num_classes = 200 + +criterion = model.model_vision.criterion[0] +model.model_vision.criterion = [criterion for _ in range(2)] +for criterion, num_classes in zip(model.model_vision.criterion, [200, 200]): + criterion.num_classes = num_classes + +dataloader.train.mapper.max_num_phrase = 200 +dataloader.train.mapper.nms_thresh_phrase = 0.6 + +model.model_vision.dataset_prompts = ["phrase", "expression"] +model.model_vision.dataset_names = ["grit", "refcoco"] +model.model_vision.dataset_metas = dataloader.train.dataset.names + ["refcoco-mixed"] + +train.max_iter = 400000 +train.eval_period = 10000 + +lr_multiplier = L(WarmupParamScheduler)( + scheduler=L(MultiStepParamScheduler)( + values=[1.0, 0.1], + milestones=[333000], + num_updates=400000, + ), + warmup_length=2000 / 400000, + warmup_method="linear", + warmup_factor=0.001, +) + +train.output_dir = "output/" + __file__[:-3] +model.model_vision.vis_period = 1280 diff --git a/approach/ovod/APE/configs/GRIT_VisualGrounding/ape_deta/ape_deta_r50_vlf_400k.py b/approach/ovod/APE/configs/GRIT_VisualGrounding/ape_deta/ape_deta_r50_vlf_400k.py new file mode 100644 index 0000000000000000000000000000000000000000..13bd411652e18c4b77eb590c7fddbb53085fa0db --- /dev/null +++ b/approach/ovod/APE/configs/GRIT_VisualGrounding/ape_deta/ape_deta_r50_vlf_400k.py @@ -0,0 +1,48 @@ +from detectron2.config import LazyCall as L +from omegaconf import OmegaConf +from ape.layers import VisionLanguageFusion +from ape.modeling.ape_deta import ( + DeformableDETRSegmVL, + DeformableDetrTransformerDecoderVL, + DeformableDetrTransformerEncoderVL, + DeformableDetrTransformerVL, +) + +from .ape_deta_r50_400k import dataloader, lr_multiplier, model, optimizer, train + +model.model_vision.update( + _target_=DeformableDETRSegmVL, +) +model.model_vision.transformer.update( + _target_=DeformableDetrTransformerVL, +) +model.model_vision.transformer.encoder.update( + _target_=DeformableDetrTransformerEncoderVL, +) +model.model_vision.transformer.decoder.update( + _target_=DeformableDetrTransformerDecoderVL, +) + + +model.model_vision.transformer.encoder.vl_layer = L(VisionLanguageFusion)( + v_dim="${....embed_dim}", + l_dim="${....embed_dim_language}", + embed_dim=2048, + num_heads=8, + dropout=0.1, + drop_path=0.0, + init_values=1.0 / 6, + stable_softmax_2d=True, + clamp_min_for_underflow=True, + clamp_max_for_overflow=True, + use_checkpoint=True, +) + +model.model_vision.text_feature_bank = True +model.model_vision.text_feature_reduce_before_fusion = True +model.model_vision.text_feature_batch_repeat = True +model.model_vision.expression_cumulative_gt_class = True +model.model_vision.name_prompt_fusion_type = "zero" + +train.output_dir = "output/" + __file__[:-3] +model.model_vision.vis_period = 1280 diff --git a/approach/ovod/APE/configs/GRIT_VisualGrounding/ape_deta/ape_deta_r50_vlf_lsj224_256x50k.py b/approach/ovod/APE/configs/GRIT_VisualGrounding/ape_deta/ape_deta_r50_vlf_lsj224_256x50k.py new file mode 100644 index 0000000000000000000000000000000000000000..e82b9b325073b83d879bc5910b4bf0768702b6f9 --- /dev/null +++ b/approach/ovod/APE/configs/GRIT_VisualGrounding/ape_deta/ape_deta_r50_vlf_lsj224_256x50k.py @@ -0,0 +1,68 @@ +from detectron2.config import LazyCall as L +from detectron2.solver import WarmupParamScheduler +from fvcore.common.param_scheduler import MultiStepParamScheduler +from omegaconf import OmegaConf +from ape.layers import VisionLanguageFusion +from ape.modeling.ape_deta import ( + DeformableDETRSegmVL, + DeformableDetrTransformerDecoderVL, + DeformableDetrTransformerEncoderVL, + DeformableDetrTransformerVL, +) + +from ...common.data.grit_instance_lsj224 import dataloader +from .ape_deta_r50_400k import lr_multiplier, model, optimizer, train + +model.model_vision.update( + _target_=DeformableDETRSegmVL, +) +model.model_vision.transformer.update( + _target_=DeformableDetrTransformerVL, +) +model.model_vision.transformer.encoder.update( + _target_=DeformableDetrTransformerEncoderVL, +) +model.model_vision.transformer.decoder.update( + _target_=DeformableDetrTransformerDecoderVL, +) + + +model.model_vision.transformer.encoder.vl_layer = L(VisionLanguageFusion)( + v_dim="${....embed_dim}", + l_dim="${....embed_dim_language}", + embed_dim=2048, + num_heads=8, + dropout=0.1, + drop_path=0.0, + init_values=1.0 / 6, + stable_softmax_2d=True, + clamp_min_for_underflow=True, + clamp_max_for_overflow=True, + use_checkpoint=True, +) + +model.model_vision.text_feature_bank = True +model.model_vision.text_feature_reduce_before_fusion = True +model.model_vision.text_feature_batch_repeat = True +model.model_vision.expression_cumulative_gt_class = True +model.model_vision.name_prompt_fusion_type = "zero" + +dataloader.train.total_batch_size = 256 +dataloader.train.total_batch_size_list = [256, 256] + +train.max_iter = 10000 * 5 +train.eval_period = 1000 * 5 + +lr_multiplier = L(WarmupParamScheduler)( + scheduler=L(MultiStepParamScheduler)( + values=[1.0, 0.1], + milestones=[8300 * 5], + num_updates=10000 * 5, + ), + warmup_length=2000 / 10000 * 5, + warmup_method="linear", + warmup_factor=0.001, +) + +train.output_dir = "output/" + __file__[:-3] +model.model_vision.vis_period = 1280 diff --git a/approach/ovod/APE/configs/LVISCOCOCOCOSTUFF_O365_OID_VG/ape_deta/ape_deta_r50_lsj1024_cp_50ep.py b/approach/ovod/APE/configs/LVISCOCOCOCOSTUFF_O365_OID_VG/ape_deta/ape_deta_r50_lsj1024_cp_50ep.py new file mode 100644 index 0000000000000000000000000000000000000000..17b633373692ff1d001b165e74290448b8f7b56f --- /dev/null +++ b/approach/ovod/APE/configs/LVISCOCOCOCOSTUFF_O365_OID_VG/ape_deta/ape_deta_r50_lsj1024_cp_50ep.py @@ -0,0 +1,76 @@ +from detectron2.config import LazyCall as L +from detectron2.data.detection_utils import get_fed_loss_cls_weights +from detrex.config import get_config +from ape.modeling.text import EVA01CLIP + +from ...common.data.lviscocococostuff_o365_oid_vg_panoptic_lsj1024_cp import dataloader +from .models.ape_deta_r50 import model + +model.model_vision.num_classes = 1256 +model.model_vision.criterion[0].num_classes = 1256 +model.model_vision.select_box_nums_for_evaluation = 300 +model.model_vision.criterion[0].use_fed_loss = True +model.model_vision.criterion[0].get_fed_loss_cls_weights = lambda: get_fed_loss_cls_weights( + dataloader.train.dataset.names[0], 0.5 +) +model.model_vision.criterion[0].fed_loss_num_classes = 50 + +optimizer = get_config("common/optim.py").AdamW +optimizer.params.lr_factor_func = ( + lambda module_name: 0.1 + if "backbone" in module_name + or "reference_points" in module_name + or "sampling_offsets" in module_name + else 1 +) +optimizer.params.weight_decay_norm = None + +optimizer.lr = 2e-4 +optimizer.betas = (0.9, 0.999) +optimizer.weight_decay = 1e-4 + +train = get_config("common/train.py").train +train.max_iter = 375000 +train.eval_period = 2000000 +train.log_period = 20 + +train.checkpointer.period = 5000 +train.checkpointer.max_to_keep = 2 + +train.clip_grad.enabled = True +train.clip_grad.params.max_norm = 0.1 +train.clip_grad.params.norm_type = 2 + +train.device = "cuda" + +train.init_checkpoint = "detectron2://ImageNetPretrained/torchvision/R-50.pkl" +train.init_checkpoint = "models/torchvision/R-50.pkl" + +train.amp.enabled = True +train.ddp.fp16_compression = True + +lr_multiplier = get_config("common/coco_schedule.py").lr_multiplier_50ep + +dataloader.train.total_batch_size = 16 +dataloader.train.total_batch_size_list = [16, 16, 16, 16] +dataloader.train.mapper.image_format = "RGB" +dataloader.train.mapper.use_instance_mask = True + +model.model_vision.dataset_prompts = ["name", "name", "name", "name"] +model.model_vision.dataset_names = [ + "lvis+stuffonly", + "objects365", + "openimages", + "visualgenome", +] +model.model_vision.dataset_metas = dataloader.train.dataset.names + +train.output_dir = "output/" + __file__[:-3] +model.model_vision.output_dir = train.output_dir +dataloader.train.mapper.output_dir = train.output_dir +dataloader.train.mapper.vis_period = 12800 + +model.model_language = L(EVA01CLIP)( + clip_model="EVA_CLIP_g_14_X", cache_dir="models/BAAI/EVA/eva_clip_psz14.pt" +) +model.model_vision.embed_dim_language = 1024 diff --git a/approach/ovod/APE/configs/LVISCOCOCOCOSTUFF_O365_OID_VG/ape_deta/ape_deta_vitl_eva02_lsj1024_cp_180k.py b/approach/ovod/APE/configs/LVISCOCOCOCOSTUFF_O365_OID_VG/ape_deta/ape_deta_vitl_eva02_lsj1024_cp_180k.py new file mode 100644 index 0000000000000000000000000000000000000000..47857f2a510cd6b4234c04c2a015d8aa1c589153 --- /dev/null +++ b/approach/ovod/APE/configs/LVISCOCOCOCOSTUFF_O365_OID_VG/ape_deta/ape_deta_vitl_eva02_lsj1024_cp_180k.py @@ -0,0 +1,37 @@ +import random + +from detectron2.config import LazyCall as L +from detectron2.solver import WarmupParamScheduler +from fvcore.common.param_scheduler import MultiStepParamScheduler +from ape.data.samplers import MultiDatasetTrainingSampler + +from .ape_deta_vitl_eva02_lsj1024_cp_720k import dataloader, lr_multiplier, model, optimizer, train + +train.max_iter = 180000 +train.eval_period = 180000 + +lr_multiplier = L(WarmupParamScheduler)( + scheduler=L(MultiStepParamScheduler)( + values=[1.0, 0.1], + milestones=[150000], + num_updates=180000, + ), + warmup_length=1000 / 180000, + warmup_method="linear", + warmup_factor=0.001, +) + +train.output_dir = "output/" + __file__[:-3] + +dataloader.train.sampler = lambda dataset_dicts: MultiDatasetTrainingSampler( + repeat_factors=MultiDatasetTrainingSampler.get_repeat_factors( + dataset_dicts=dataset_dicts, + num_datasets=5, + dataset_ratio=[1, 1, 1, 1], + use_rfs=[True, True, True, False], + use_cas=[False, False, False, False], + repeat_thresh=0.001, + cas_lambda=1.0, + ), + seed=random.randint(0, 2**31), +) diff --git a/approach/ovod/APE/configs/LVISCOCOCOCOSTUFF_O365_OID_VG/ape_deta/ape_deta_vitl_eva02_lsj1024_cp_720k.py b/approach/ovod/APE/configs/LVISCOCOCOCOSTUFF_O365_OID_VG/ape_deta/ape_deta_vitl_eva02_lsj1024_cp_720k.py new file mode 100644 index 0000000000000000000000000000000000000000..95800d9101cf6e10d5296fd62eb12dd4ef921691 --- /dev/null +++ b/approach/ovod/APE/configs/LVISCOCOCOCOSTUFF_O365_OID_VG/ape_deta/ape_deta_vitl_eva02_lsj1024_cp_720k.py @@ -0,0 +1,85 @@ +import random + +from detectron2.config import LazyCall as L +from detectron2.solver import WarmupParamScheduler +from fvcore.common.param_scheduler import MultiStepParamScheduler + +from ape.data.detection_utils import get_fed_loss_cls_weights +from ape.data.samplers import MultiDatasetTrainingSampler + +from ...common.data.lviscocococostuff_o365_oid_vg_panoptic_lsj1024_cp import dataloader +from ...LVIS_InstanceSegmentation.ape_deta.ape_deta_vitl_eva02_lsj1024_cp_24ep import ( + lr_multiplier, + model, + optimizer, + train, +) + +model.model_vision.num_classes = 1256 +model.model_vision.select_box_nums_for_evaluation = 300 + +criterion = model.model_vision.criterion[0] +del criterion.use_fed_loss +del criterion.get_fed_loss_cls_weights +model.model_vision.criterion = [criterion for _ in range(4)] +for criterion, num_classes in zip(model.model_vision.criterion, [1256, 365, 601, 150]): + criterion.num_classes = num_classes + +dataloader.train.mapper.max_num_phrase = 100 +dataloader.train.mapper.nms_thresh_phrase = 0.8 + +model.model_vision.criterion[0].use_fed_loss = True +model.model_vision.criterion[0].get_fed_loss_cls_weights = lambda: get_fed_loss_cls_weights( + dataloader.train.dataset.names[0], 0.5 +) +model.model_vision.criterion[0].fed_loss_num_classes = 50 + +model.model_vision.stuff_dataset_learn_thing = False +model.model_vision.stuff_prob_thing = 0.9 + +model.model_vision.instance_on = True +model.model_vision.semantic_on = True +model.model_vision.panoptic_on = False + +model.model_vision.neck = None + +train.max_iter = 720000 +train.eval_period = 720000 + +lr_multiplier = L(WarmupParamScheduler)( + scheduler=L(MultiStepParamScheduler)( + values=[1.0, 0.1], + milestones=[640000], + num_updates=720000, + ), + warmup_length=1000 / 720000, + warmup_method="linear", + warmup_factor=0.001, +) + +dataloader.train.total_batch_size = 16 +dataloader.train.total_batch_size_list = [16, 16, 16, 16] + +model.model_vision.dataset_prompts = ["name", "name", "name", "name"] +model.model_vision.dataset_names = [ + "lvis+stuffonly", + "objects365", + "openimages", + "visualgenome", +] +model.model_vision.dataset_metas = dataloader.train.dataset.names + +train.output_dir = "output/" + __file__[:-3] + +dataloader.train.sampler = lambda dataset_dicts: MultiDatasetTrainingSampler( + repeat_factors=MultiDatasetTrainingSampler.get_repeat_factors( + dataset_dicts=dataset_dicts, + num_datasets=4, + dataset_ratio=[1, 1, 1, 1], + use_rfs=[True, True, True, False], + use_cas=[False, False, False, False], + repeat_thresh=0.001, + cas_lambda=1.0, + ), + seed=random.randint(0, 2**31), +) diff --git a/approach/ovod/APE/configs/LVISCOCOCOCOSTUFF_O365_OID_VG/ape_deta/ape_deta_vitl_eva02_vlf_lsj1024_cp_180k.py b/approach/ovod/APE/configs/LVISCOCOCOCOSTUFF_O365_OID_VG/ape_deta/ape_deta_vitl_eva02_vlf_lsj1024_cp_180k.py new file mode 100644 index 0000000000000000000000000000000000000000..2d18f43ad60ab464c1fa83a73dbb13ef3d58c9dd --- /dev/null +++ b/approach/ovod/APE/configs/LVISCOCOCOCOSTUFF_O365_OID_VG/ape_deta/ape_deta_vitl_eva02_vlf_lsj1024_cp_180k.py @@ -0,0 +1,43 @@ +import random + +from detectron2.config import LazyCall as L +from detectron2.solver import WarmupParamScheduler +from fvcore.common.param_scheduler import MultiStepParamScheduler +from ape.data.samplers import MultiDatasetTrainingSampler + +from .ape_deta_vitl_eva02_vlf_lsj1024_cp_720k import ( + dataloader, + lr_multiplier, + model, + optimizer, + train, +) + +train.max_iter = 180000 +train.eval_period = 180000 + +lr_multiplier = L(WarmupParamScheduler)( + scheduler=L(MultiStepParamScheduler)( + values=[1.0, 0.1], + milestones=[150000], + num_updates=180000, + ), + warmup_length=1000 / 180000, + warmup_method="linear", + warmup_factor=0.001, +) + +train.output_dir = "output/" + __file__[:-3] + +dataloader.train.sampler = lambda dataset_dicts: MultiDatasetTrainingSampler( + repeat_factors=MultiDatasetTrainingSampler.get_repeat_factors( + dataset_dicts=dataset_dicts, + num_datasets=5, + dataset_ratio=[1, 1, 1, 1], + use_rfs=[True, True, True, False], + use_cas=[False, False, False, False], + repeat_thresh=0.001, + cas_lambda=1.0, + ), + seed=random.randint(0, 2**31), +) diff --git a/approach/ovod/APE/configs/LVISCOCOCOCOSTUFF_O365_OID_VG/ape_deta/ape_deta_vitl_eva02_vlf_lsj1024_cp_720k.py b/approach/ovod/APE/configs/LVISCOCOCOCOSTUFF_O365_OID_VG/ape_deta/ape_deta_vitl_eva02_vlf_lsj1024_cp_720k.py new file mode 100644 index 0000000000000000000000000000000000000000..7069d7adc97905d9b37bf1f47d14c4c4857bc27d --- /dev/null +++ b/approach/ovod/APE/configs/LVISCOCOCOCOSTUFF_O365_OID_VG/ape_deta/ape_deta_vitl_eva02_vlf_lsj1024_cp_720k.py @@ -0,0 +1,43 @@ +from detectron2.config import LazyCall as L +from omegaconf import OmegaConf +from ape.layers import VisionLanguageFusion +from ape.modeling.ape_deta import ( + DeformableDETRSegmVL, + DeformableDetrTransformerDecoderVL, + DeformableDetrTransformerEncoderVL, + DeformableDetrTransformerVL, +) + +from .ape_deta_vitl_eva02_lsj1024_cp_720k import dataloader, lr_multiplier, model, optimizer, train + +model.model_vision.update( + _target_=DeformableDETRSegmVL, +) +model.model_vision.transformer.update( + _target_=DeformableDetrTransformerVL, +) +model.model_vision.transformer.encoder.update( + _target_=DeformableDetrTransformerEncoderVL, +) +model.model_vision.transformer.decoder.update( + _target_=DeformableDetrTransformerDecoderVL, +) + +model.model_vision.transformer.encoder.vl_layer = L(VisionLanguageFusion)( + v_dim="${....embed_dim}", + l_dim="${....embed_dim_language}", + embed_dim=2048, + num_heads=8, + dropout=0.1, + drop_path=0.0, + init_values=1.0 / 6, + stable_softmax_2d=False, + clamp_min_for_underflow=True, + clamp_max_for_overflow=True, + use_checkpoint=True, +) + +model.model_vision.text_feature_bank = True + +train.output_dir = "output/" + __file__[:-3] +model.model_vision.vis_period = 12800 diff --git a/approach/ovod/APE/configs/LVISCOCOCOCOSTUFF_O365_OID_VGR_SA1B_REFCOCO/ape_deta/ape_deta_vitl_eva02_vlf_lsj1024_cp_1080k.py b/approach/ovod/APE/configs/LVISCOCOCOCOSTUFF_O365_OID_VGR_SA1B_REFCOCO/ape_deta/ape_deta_vitl_eva02_vlf_lsj1024_cp_1080k.py new file mode 100644 index 0000000000000000000000000000000000000000..69175758bc9200a112d3a355e3b08aa2152d7311 --- /dev/null +++ b/approach/ovod/APE/configs/LVISCOCOCOCOSTUFF_O365_OID_VGR_SA1B_REFCOCO/ape_deta/ape_deta_vitl_eva02_vlf_lsj1024_cp_1080k.py @@ -0,0 +1,75 @@ +from detectron2.config import LazyCall as L + +from ape.data.detection_utils import get_fed_loss_cls_weights + +from ...common.data.lviscocococostuff_o365_oid_vgr_sa1b_refcoco_group_by_image_panoptic_lsj1024_cp import ( + dataloader, +) +from ...LVISCOCOCOCOSTUFF_O365_OID_VGR_REFCOCO.ape_deta.ape_deta_vitl_eva02_vlf_lsj1024_cp_1080k import ( + lr_multiplier, + model, + optimizer, + train, +) + +model.model_vision.num_classes = 1256 +model.model_vision.select_box_nums_for_evaluation = 300 + +criterion = model.model_vision.criterion[0] +del criterion.use_fed_loss +del criterion.get_fed_loss_cls_weights +del criterion.fed_loss_num_classes +model.model_vision.criterion = [criterion for _ in range(7)] +for criterion, num_classes in zip(model.model_vision.criterion, [1256, 365, 601, 200, 1, 200, 200]): + criterion.num_classes = num_classes + +dataloader.train.mapper.max_num_phrase = 100 +dataloader.train.mapper.nms_thresh_phrase = 0.6 + +model.model_vision.criterion[0].use_fed_loss = True +model.model_vision.criterion[0].get_fed_loss_cls_weights = lambda: get_fed_loss_cls_weights( + dataloader.train.dataset.names[0], 0.5 +) +model.model_vision.criterion[0].fed_loss_num_classes = 50 +model.model_vision.criterion[0].fed_loss_pad_type = "cat" + +model.model_vision.criterion[3].weight_dict["loss_class_enc"] = 0.0 +for k, v in model.model_vision.criterion[3].weight_dict.items(): + if "_enc" in k: + model.model_vision.criterion[3].weight_dict.update({k: 0.0}) + if "_bbox" in k or "_giou" in k: + model.model_vision.criterion[3].weight_dict.update({k: 0.0}) + +for k, v in model.model_vision.criterion[4].weight_dict.items(): + if "_class" in k and "_enc" not in k: + model.model_vision.criterion[4].weight_dict.update({k: 0.0}) + +model.model_vision.criterion[5].weight_dict["loss_class_enc"] = 0.0 + +model.model_vision.stuff_dataset_learn_thing = False +model.model_vision.stuff_prob_thing = 0.9 + +dataloader.train.total_batch_size = 16 +dataloader.train.total_batch_size_list = [16, 16, 16, 16, 16, 16] + +model.model_vision.dataset_prompts = [ + "name", + "name", + "name", + "phrase", + "name", + "phrase", + "expression", +] +model.model_vision.dataset_names = [ + "lvis+stuffonly", + "objects365", + "openimages", + "vgregion", + "sa1b", + "refcoco-mixed_group-by-image", + "refcoco", +] +model.model_vision.dataset_metas = dataloader.train.dataset.names + ["refcoco-mixed"] + +train.output_dir = "output/" + __file__[:-3] diff --git a/approach/ovod/APE/configs/LVISCOCOCOCOSTUFF_O365_OID_VGR_SA1B_REFCOCO/ape_deta/ape_deta_vitl_eva02_vlf_lsj1024_cp_2160k.py b/approach/ovod/APE/configs/LVISCOCOCOCOSTUFF_O365_OID_VGR_SA1B_REFCOCO/ape_deta/ape_deta_vitl_eva02_vlf_lsj1024_cp_2160k.py new file mode 100644 index 0000000000000000000000000000000000000000..1c22ff38e0416d35ec9db173b128f3cd7723773f --- /dev/null +++ b/approach/ovod/APE/configs/LVISCOCOCOCOSTUFF_O365_OID_VGR_SA1B_REFCOCO/ape_deta/ape_deta_vitl_eva02_vlf_lsj1024_cp_2160k.py @@ -0,0 +1,27 @@ +from detectron2.config import LazyCall as L +from detectron2.solver import WarmupParamScheduler +from fvcore.common.param_scheduler import MultiStepParamScheduler + +from .ape_deta_vitl_eva02_vlf_lsj1024_cp_1080k import ( + dataloader, + lr_multiplier, + model, + optimizer, + train, +) + +train.max_iter = 2160000 +train.eval_period = 2160000 + +lr_multiplier = L(WarmupParamScheduler)( + scheduler=L(MultiStepParamScheduler)( + values=[1.0, 0.1], + milestones=[1800000], + num_updates=2160000, + ), + warmup_length=4000 / 2160000, + warmup_method="linear", + warmup_factor=0.001, +) + +train.output_dir = "output/" + __file__[:-3] diff --git a/approach/ovod/APE/configs/LVISCOCOCOCOSTUFF_REFCOCO/ape_deta/ape_deta_r50_lsj1024_50ep.py b/approach/ovod/APE/configs/LVISCOCOCOCOSTUFF_REFCOCO/ape_deta/ape_deta_r50_lsj1024_50ep.py new file mode 100644 index 0000000000000000000000000000000000000000..a6367bbf2a972de855794d08ff630f239d3b0c87 --- /dev/null +++ b/approach/ovod/APE/configs/LVISCOCOCOCOSTUFF_REFCOCO/ape_deta/ape_deta_r50_lsj1024_50ep.py @@ -0,0 +1,55 @@ +from detectron2.data.detection_utils import get_fed_loss_cls_weights +from detrex.config import get_config + +from ...common.data.lviscocococostuff_refcoco_panoptic_lsj1024 import dataloader +from ...LVIS_InstanceSegmentation.ape_deta.ape_deta_r50_24ep import ( + lr_multiplier, + model, + optimizer, + train, +) + +model.model_vision.num_classes = 1256 +model.model_vision.select_box_nums_for_evaluation = 300 + +criterion = model.model_vision.criterion[0] +del criterion.use_fed_loss +del criterion.get_fed_loss_cls_weights +model.model_vision.criterion = [criterion for _ in range(2)] +for criterion, num_classes in zip(model.model_vision.criterion, [1256, 200]): + criterion.num_classes = num_classes + +model.model_vision.criterion[1].weight_dict["loss_class_enc"] = 0.0 + +model.model_vision.instance_on = True +model.model_vision.semantic_on = True +model.model_vision.panoptic_on = False + +model.model_vision.criterion[0].use_fed_loss = True +model.model_vision.criterion[0].get_fed_loss_cls_weights = lambda: get_fed_loss_cls_weights( + dataloader.train.dataset.names[0], 0.5 +) +model.model_vision.criterion[0].fed_loss_num_classes = 50 +model.model_vision.criterion[0].fed_loss_pad_type = "cat" + +model.model_vision.stuff_dataset_learn_thing = False +model.model_vision.stuff_prob_thing = 0.9 + +train.max_iter = 375000 +train.eval_period = 20000 + +lr_multiplier = get_config("common/coco_schedule.py").lr_multiplier_50ep + +dataloader.train.total_batch_size = 16 +dataloader.train.total_batch_size_list = [16, 16] + +model.model_vision.dataset_prompts = ["name", "expression"] +model.model_vision.dataset_names = ["lvis+stuff", "refcoco"] +model.model_vision.dataset_metas = dataloader.train.dataset.names + +model.model_vision.text_feature_bank = True +model.model_vision.text_feature_reduce_before_fusion = True +model.model_vision.text_feature_batch_repeat = True +model.model_vision.expression_cumulative_gt_class = True + +train.output_dir = "output/" + __file__[:-3] diff --git a/approach/ovod/APE/configs/LVISCOCOCOCOSTUFF_REFCOCO/ape_deta/ape_deta_r50_lsj1024_cp_50ep.py b/approach/ovod/APE/configs/LVISCOCOCOCOSTUFF_REFCOCO/ape_deta/ape_deta_r50_lsj1024_cp_50ep.py new file mode 100644 index 0000000000000000000000000000000000000000..8534d5c7dc1276cc247c74e12cec04d0abc72ee1 --- /dev/null +++ b/approach/ovod/APE/configs/LVISCOCOCOCOSTUFF_REFCOCO/ape_deta/ape_deta_r50_lsj1024_cp_50ep.py @@ -0,0 +1,4 @@ +from ...common.data.lviscocococostuff_refcoco_panoptic_lsj1024_cp import dataloader +from .ape_deta_r50_lsj1024_50ep import dataloader, lr_multiplier, model, optimizer, train + +train.output_dir = "output/" + __file__[:-3] diff --git a/approach/ovod/APE/configs/LVISCOCOCOCOSTUFF_REFCOCO/ape_deta/ape_deta_r50_vlf_lsj1024_cp_50ep.py b/approach/ovod/APE/configs/LVISCOCOCOCOSTUFF_REFCOCO/ape_deta/ape_deta_r50_vlf_lsj1024_cp_50ep.py new file mode 100644 index 0000000000000000000000000000000000000000..2fdec5021582a529477a44330a926b7ddcfd2103 --- /dev/null +++ b/approach/ovod/APE/configs/LVISCOCOCOCOSTUFF_REFCOCO/ape_deta/ape_deta_r50_vlf_lsj1024_cp_50ep.py @@ -0,0 +1,48 @@ +from detectron2.config import LazyCall as L +from ape.layers import VisionLanguageFusion +from ape.modeling.ape_deta import ( + DeformableDETRSegmVL, + DeformableDetrTransformerDecoderVL, + DeformableDetrTransformerEncoderVL, + DeformableDetrTransformerVL, +) + +from .ape_deta_r50_lsj1024_cp_50ep import dataloader, lr_multiplier, model, optimizer, train + +model.model_vision.update( + _target_=DeformableDETRSegmVL, +) +model.model_vision.transformer.update( + _target_=DeformableDetrTransformerVL, +) +model.model_vision.transformer.encoder.update( + _target_=DeformableDetrTransformerEncoderVL, +) +model.model_vision.transformer.decoder.update( + _target_=DeformableDetrTransformerDecoderVL, +) + + +model.model_vision.transformer.encoder.vl_layer = L(VisionLanguageFusion)( + v_dim="${....embed_dim}", + l_dim="${....embed_dim_language}", + embed_dim=2048, + num_heads=8, + dropout=0.1, + drop_path=0.0, + init_values=1.0 / 6, + stable_softmax_2d=False, + clamp_min_for_underflow=True, + clamp_max_for_overflow=True, + use_checkpoint=False, +) + +model.model_vision.text_feature_bank = True +model.model_vision.text_feature_reduce_before_fusion = True +model.model_vision.text_feature_batch_repeat = True +model.model_vision.expression_cumulative_gt_class = True +model.model_vision.name_prompt_fusion_type = "zero" + + +train.output_dir = "output/" + __file__[:-3] +model.model_vision.vis_period = 5120 diff --git a/approach/ovod/APE/configs/LVISCOCOCOCOSTUFF_REFCOCO/ape_deta/ape_deta_r50_vlf_lsj1024_cp_bert_50ep.py b/approach/ovod/APE/configs/LVISCOCOCOCOSTUFF_REFCOCO/ape_deta/ape_deta_r50_vlf_lsj1024_cp_bert_50ep.py new file mode 100644 index 0000000000000000000000000000000000000000..b500c928c8fb4e17b79ee2d7546fe5a2ec8f6c9d --- /dev/null +++ b/approach/ovod/APE/configs/LVISCOCOCOCOSTUFF_REFCOCO/ape_deta/ape_deta_r50_vlf_lsj1024_cp_bert_50ep.py @@ -0,0 +1,21 @@ +from detectron2.config import LazyCall as L +from ape.modeling.text import Bert + +from .ape_deta_r50_vlf_lsj1024_cp_50ep import dataloader, lr_multiplier, model, optimizer, train + +model.model_vision.criterion[1].num_classes = 1 + +model.model_language = L(Bert)( + pretrained_model_name_or_path="models/huggingface/bert-base-uncased/" +) +model.model_vision.embed_dim_language = 768 +model.model_vision.text_feature_reduce_type = "average" + +model.model_vision.text_feature_bank = False +model.model_vision.text_feature_reduce_before_fusion = False +model.model_vision.text_feature_batch_repeat = False +model.model_vision.expression_cumulative_gt_class = False +model.model_vision.name_prompt_fusion_type = "none" + +train.output_dir = "output/" + __file__[:-3] +model.model_vision.vis_period = 5120 diff --git a/approach/ovod/APE/configs/LVISCOCOCOCOSTUFF_REFCOCO/ape_deta/ape_deta_vitl_eva02_lsj1024_24ep.py b/approach/ovod/APE/configs/LVISCOCOCOCOSTUFF_REFCOCO/ape_deta/ape_deta_vitl_eva02_lsj1024_24ep.py new file mode 100644 index 0000000000000000000000000000000000000000..a268009845a67a2c53af46d4a0db5449b30d8c30 --- /dev/null +++ b/approach/ovod/APE/configs/LVISCOCOCOCOSTUFF_REFCOCO/ape_deta/ape_deta_vitl_eva02_lsj1024_24ep.py @@ -0,0 +1,43 @@ +from detectron2.data.detection_utils import get_fed_loss_cls_weights + +from ...common.data.lviscocococostuff_refcoco_panoptic_lsj1024 import dataloader +from ...LVIS_InstanceSegmentation.ape_deta.ape_deta_vitl_eva02_lsj1024_cp_24ep import ( + lr_multiplier, + model, + optimizer, + train, +) + +model.model_vision.num_classes = 1256 +model.model_vision.select_box_nums_for_evaluation = 300 + +criterion = model.model_vision.criterion[0] +del criterion.use_fed_loss +del criterion.get_fed_loss_cls_weights +model.model_vision.criterion = [criterion for _ in range(2)] +for criterion, num_classes in zip(model.model_vision.criterion, [1256, 200]): + criterion.num_classes = num_classes + +model.model_vision.criterion[1].weight_dict["loss_class_enc"] = 0.0 + +model.model_vision.instance_on = True +model.model_vision.semantic_on = True +model.model_vision.panoptic_on = False + +model.model_vision.criterion[0].use_fed_loss = True +model.model_vision.criterion[0].get_fed_loss_cls_weights = lambda: get_fed_loss_cls_weights( + dataloader.train.dataset.names[0], 0.5 +) +model.model_vision.criterion[0].fed_loss_num_classes = 50 +model.model_vision.criterion[0].fed_loss_pad_type = "cat" + +model.model_vision.neck = None + +dataloader.train.total_batch_size = 16 +dataloader.train.total_batch_size_list = [16, 16] + +model.model_vision.dataset_prompts = ["name", "expression"] +model.model_vision.dataset_names = ["lvis+stuff", "refcoco"] +model.model_vision.dataset_metas = dataloader.train.dataset.names + +train.output_dir = "output/" + __file__[:-3] diff --git a/approach/ovod/APE/configs/LVISCOCOCOCOSTUFF_REFCOCO/ape_deta/ape_deta_vitl_eva02_vlf_lsj1024_50ep.py b/approach/ovod/APE/configs/LVISCOCOCOCOSTUFF_REFCOCO/ape_deta/ape_deta_vitl_eva02_vlf_lsj1024_50ep.py new file mode 100644 index 0000000000000000000000000000000000000000..445b047cd96adc3576f269e20031a10889b66790 --- /dev/null +++ b/approach/ovod/APE/configs/LVISCOCOCOCOSTUFF_REFCOCO/ape_deta/ape_deta_vitl_eva02_vlf_lsj1024_50ep.py @@ -0,0 +1,53 @@ +from detectron2.config import LazyCall as L +from detrex.config import get_config +from omegaconf import OmegaConf +from ape.layers import VisionLanguageFusion +from ape.modeling.ape_deta import ( + DeformableDETRSegmVL, + DeformableDetrTransformerDecoderVL, + DeformableDetrTransformerEncoderVL, + DeformableDetrTransformerVL, +) + +from .ape_deta_vitl_eva02_lsj1024_24ep import dataloader, lr_multiplier, model, optimizer, train + +model.model_vision.update( + _target_=DeformableDETRSegmVL, +) +model.model_vision.transformer.update( + _target_=DeformableDetrTransformerVL, +) +model.model_vision.transformer.encoder.update( + _target_=DeformableDetrTransformerEncoderVL, +) +model.model_vision.transformer.decoder.update( + _target_=DeformableDetrTransformerDecoderVL, +) + + +model.model_vision.transformer.encoder.vl_layer = L(VisionLanguageFusion)( + v_dim="${....embed_dim}", + l_dim="${....embed_dim_language}", + embed_dim=2048, + num_heads=8, + dropout=0.1, + drop_path=0.0, + init_values=1.0 / 6, + stable_softmax_2d=True, + clamp_min_for_underflow=True, + clamp_max_for_overflow=True, + use_checkpoint=True, +) + +model.model_vision.criterion[1].num_classes = 200 +model.model_vision.text_feature_bank = True +model.model_vision.text_feature_reduce_before_fusion = True +model.model_vision.text_feature_batch_repeat = True +model.model_vision.expression_cumulative_gt_class = True + +train.max_iter = 375000 +train.eval_period = 20000 + +lr_multiplier = get_config("common/coco_schedule.py").lr_multiplier_50ep + +train.output_dir = "output/" + __file__[:-3] diff --git a/approach/ovod/APE/configs/LVISCOCO_COCOSTUFF_PanopticSegmentation/ape_deta/ape_deta_r50_lsj1024_cp_50ep.py b/approach/ovod/APE/configs/LVISCOCO_COCOSTUFF_PanopticSegmentation/ape_deta/ape_deta_r50_lsj1024_cp_50ep.py new file mode 100644 index 0000000000000000000000000000000000000000..27a53cfe51de319351d97bd485fa42e1113decf6 --- /dev/null +++ b/approach/ovod/APE/configs/LVISCOCO_COCOSTUFF_PanopticSegmentation/ape_deta/ape_deta_r50_lsj1024_cp_50ep.py @@ -0,0 +1,47 @@ +from detectron2.data.detection_utils import get_fed_loss_cls_weights +from detrex.config import get_config + +from ...common.data.lviscoco_cocostuff_panoptic_lsj1024_cp import dataloader +from ...LVIS_InstanceSegmentation.ape_deta.ape_deta_r50_24ep import ( + lr_multiplier, + model, + optimizer, + train, +) + +model.model_vision.num_classes = 1203 +model.model_vision.select_box_nums_for_evaluation = 300 + +criterion = model.model_vision.criterion[0] +criterion.use_fed_loss = False +criterion.get_fed_loss_cls_weights = None +model.model_vision.criterion = [criterion for _ in range(2)] +for criterion, num_classes in zip(model.model_vision.criterion, [1203, 54]): + criterion.num_classes = num_classes + + +model.model_vision.stuff_dataset_learn_thing = False + +model.model_vision.instance_on = True +model.model_vision.semantic_on = True +model.model_vision.panoptic_on = False + +model.model_vision.criterion[0].use_fed_loss = True +model.model_vision.criterion[0].get_fed_loss_cls_weights = lambda: get_fed_loss_cls_weights( + dataloader.train.dataset.names[0], 0.5 +) +model.model_vision.criterion[0].fed_loss_num_classes = 50 + +train.max_iter = 375000 +train.eval_period = 20000 + +lr_multiplier = get_config("common/coco_schedule.py").lr_multiplier_50ep + +dataloader.train.total_batch_size = 16 +dataloader.train.total_batch_size_list = [16, 16] + +model.model_vision.dataset_prompts = ["name", "name"] +model.model_vision.dataset_names = ["lvis", "stuff"] +model.model_vision.dataset_metas = dataloader.train.dataset.names + +train.output_dir = "output/" + __file__[:-3] diff --git a/approach/ovod/APE/configs/LVIS_Detection/deformable_deta/deformable_deta_r50_lsj1024_24ep.py b/approach/ovod/APE/configs/LVIS_Detection/deformable_deta/deformable_deta_r50_lsj1024_24ep.py new file mode 100644 index 0000000000000000000000000000000000000000..389213c236c51f25278deca4d5893a4cc016c043 --- /dev/null +++ b/approach/ovod/APE/configs/LVIS_Detection/deformable_deta/deformable_deta_r50_lsj1024_24ep.py @@ -0,0 +1,47 @@ +from detectron2.config import LazyCall as L +from detectron2.data.detection_utils import get_fed_loss_cls_weights +from detectron2.data.samplers import RepeatFactorTrainingSampler +from detectron2.evaluation.lvis_evaluation import LVISEvaluator +from detrex.config import get_config + +from .....detectron2.projects.ViTDet.configs.common.coco_loader_lsj import dataloader +from ...COCO_Detection.deformable_deta.deformable_deta_r50_two_stage_12ep import ( + lr_multiplier, + model, + optimizer, + train, +) + +dataloader.train.mapper.image_format = "BGR" + +dataloader.train.total_batch_size = 16 + +dataloader.train.dataset.names = "lvis_v1_train" +dataloader.train.sampler = L(RepeatFactorTrainingSampler)( + repeat_factors=L(RepeatFactorTrainingSampler.repeat_factors_from_category_frequency)( + dataset_dicts="${dataloader.train.dataset}", repeat_thresh=0.001 + ) +) +dataloader.test.dataset.names = "lvis_v1_val" +dataloader.evaluator = L(LVISEvaluator)( + dataset_name="${..test.dataset.names}", + max_dets_per_image=300, +) + +model.num_classes = 1203 +model.criterion.num_classes = 1203 +model.select_box_nums_for_evaluation = 300 +model.criterion.use_fed_loss = True +model.criterion.get_fed_loss_cls_weights = lambda: get_fed_loss_cls_weights( + dataloader.train.dataset.names, 0.5 +) +model.criterion.fed_loss_num_classes = 50 + +train.max_iter = 180000 +train.eval_period = 20000 + +lr_multiplier.scheduler.milestones = [150000, 180000] +lr_multiplier.warmup_length = 250 / train.max_iter + +train.output_dir = "output/" + __file__[:-3] +dataloader.evaluator.output_dir = train.output_dir diff --git a/approach/ovod/APE/configs/LVIS_Detection/deformable_deta/deformable_deta_vitb_lsj1024_24ep.py b/approach/ovod/APE/configs/LVIS_Detection/deformable_deta/deformable_deta_vitb_lsj1024_24ep.py new file mode 100644 index 0000000000000000000000000000000000000000..70626c7c32f4e7d072df0bf19ade8096d8428180 --- /dev/null +++ b/approach/ovod/APE/configs/LVIS_Detection/deformable_deta/deformable_deta_vitb_lsj1024_24ep.py @@ -0,0 +1,83 @@ +from functools import partial + +import torch.nn as nn + +from detectron2.config import LazyCall as L +from detectron2.modeling import SimpleFeaturePyramid, ViT +from detectron2.modeling.backbone.fpn import LastLevelMaxPool +from detectron2.modeling.backbone.vit import get_vit_lr_decay_rate + +from .....detectron2.configs.common.data.constants import constants +from .deformable_deta_r50_two_stage_lsj1024_24ep import ( + dataloader, + lr_multiplier, + model, + optimizer, + train, +) + +model.pixel_mean = constants.imagenet_rgb256_mean +model.pixel_std = constants.imagenet_rgb256_std +model.input_format = "RGB" +dataloader.train.mapper.image_format = "RGB" + + +embed_dim, depth, num_heads, dp = 768, 12, 12, 0.1 +model.backbone = L(SimpleFeaturePyramid)( + net=L(ViT)( # Single-scale ViT backbone + img_size=1024, + patch_size=16, + embed_dim=embed_dim, + depth=depth, + num_heads=num_heads, + drop_path_rate=dp, + window_size=14, + mlp_ratio=4, + qkv_bias=True, + norm_layer=partial(nn.LayerNorm, eps=1e-6), + window_block_indexes=[ + 0, + 1, + 3, + 4, + 6, + 7, + 9, + 10, + ], + residual_block_indexes=[], + use_rel_pos=True, + out_feature="last_feat", + ), + in_feature="${.net.out_feature}", + out_channels=256, + scale_factors=(4.0, 2.0, 1.0, 0.5), + top_block=L(LastLevelMaxPool)(), + norm="LN", + square_pad=1024, +) + +model.neck = None + +optimizer.params.lr_factor_func = ( + lambda module_name: 0.1 + if "reference_points" in module_name or "sampling_offsets" in module_name + else get_vit_lr_decay_rate(module_name, lr_decay_rate=0.7, num_layers=12) + if "backbone" in module_name + else 1 +) +optimizer.params.overrides = {"pos_embed": {"weight_decay": 0.0}} + + +lr_multiplier.warmup_length = 1000 / train.max_iter + +train.amp.enabled = False +train.ddp.fp16_compression = False + +train.init_checkpoint = ( + "detectron2://ImageNetPretrained/MAE/mae_pretrain_vit_base.pth?matching_heuristics=True" +) +train.init_checkpoint = "models/MAE/mae_pretrain_vit_base.pth?matching_heuristics=True" + +train.output_dir = "output/" + __file__[:-3] +dataloader.evaluator.output_dir = train.output_dir diff --git a/approach/ovod/APE/configs/LVIS_Detection/deformable_deta/deformable_deta_vitg_eva_lsj1024_24ep.py b/approach/ovod/APE/configs/LVIS_Detection/deformable_deta/deformable_deta_vitg_eva_lsj1024_24ep.py new file mode 100644 index 0000000000000000000000000000000000000000..7b4d8537d50ec1af555b5280aa40e3c547ca989a --- /dev/null +++ b/approach/ovod/APE/configs/LVIS_Detection/deformable_deta/deformable_deta_vitg_eva_lsj1024_24ep.py @@ -0,0 +1,65 @@ +from ape.modeling.backbone.vit_eva import SimpleFeaturePyramid, ViT, get_vit_lr_decay_rate + +from .deformable_deta_vitb_two_stage_lsj1024_24ep import ( + dataloader, + lr_multiplier, + model, + optimizer, + train, +) + +model.backbone.update( + _target_=SimpleFeaturePyramid, +) +model.backbone.net.update( + _target_=ViT, +) + +dataloader.train.total_batch_size = 16 + +model.backbone.net.beit_like_qkv_bias = True +model.backbone.net.beit_like_gamma = False +model.backbone.net.freeze_patch_embed = True +model.backbone.square_pad = 1280 +model.backbone.net.img_size = 1280 +model.backbone.net.patch_size = 16 +model.backbone.net.window_size = 16 +model.backbone.net.embed_dim = 1408 +model.backbone.net.depth = 40 +model.backbone.net.num_heads = 16 +model.backbone.net.mlp_ratio = 6144 / 1408 +model.backbone.net.use_act_checkpoint = True +model.backbone.net.drop_path_rate = 0.6 # 0.5 --> 0.6 +model.backbone.net.window_block_indexes = ( + list(range(0, 3)) + + list(range(4, 7)) + + list(range(8, 11)) + + list(range(12, 15)) + + list(range(16, 19)) + + list(range(20, 23)) + + list(range(24, 27)) + + list(range(28, 31)) + + list(range(32, 35)) + + list(range(36, 39)) +) + +optimizer.lr = 2e-4 +optimizer.params.lr_factor_func = ( + lambda module_name: 0.1 + if "reference_points" in module_name or "sampling_offsets" in module_name + else get_vit_lr_decay_rate(module_name, lr_decay_rate=0.9, num_layers=40) + if "backbone" in module_name + else 1 +) +optimizer.params.overrides = {"pos_embed": {"weight_decay": 0.0}} +optimizer.params.weight_decay_norm = None + +train.amp.enabled = False +train.ddp.fp16_compression = False + +model.backbone.net.use_act_checkpoint = False +model.backbone.net.frozen_stages = 41 + +train.init_checkpoint = "models/BAAI/EVA/eva_o365.pth" +train.output_dir = "output/" + __file__[:-3] +dataloader.evaluator.output_dir = train.output_dir diff --git a/approach/ovod/APE/configs/LVIS_Detection/deformable_deta/deformable_deta_vitg_eva_lsj1024_cp_24ep.py b/approach/ovod/APE/configs/LVIS_Detection/deformable_deta/deformable_deta_vitg_eva_lsj1024_cp_24ep.py new file mode 100644 index 0000000000000000000000000000000000000000..cb98a3853af2211050527d0283ebcaedf8b5582f --- /dev/null +++ b/approach/ovod/APE/configs/LVIS_Detection/deformable_deta/deformable_deta_vitg_eva_lsj1024_cp_24ep.py @@ -0,0 +1,14 @@ +from ....configs.common.data.lvis_lsj1024_cp import dataloader +from .deformable_deta_vitg_eva_two_stage_lsj1024_24ep import lr_multiplier, model, optimizer, train + +train.amp.enabled = True +train.ddp.fp16_compression = True + +model.backbone.net.use_act_checkpoint = True +model.backbone.net.frozen_stages = 25 + +train.output_dir = "output/" + __file__[:-3] +dataloader.evaluator.output_dir = train.output_dir +dataloader.train.mapper.output_dir = train.output_dir + +optimizer.lr = 1e-4 diff --git a/approach/ovod/APE/configs/LVIS_Detection/deformable_deta/deformable_deta_vitl_eva02_lsj1024_cp_24ep.py b/approach/ovod/APE/configs/LVIS_Detection/deformable_deta/deformable_deta_vitl_eva02_lsj1024_cp_24ep.py new file mode 100644 index 0000000000000000000000000000000000000000..28ae87a20c944fcbcc7537e3835fbc2821538803 --- /dev/null +++ b/approach/ovod/APE/configs/LVIS_Detection/deformable_deta/deformable_deta_vitl_eva02_lsj1024_cp_24ep.py @@ -0,0 +1,110 @@ +from functools import partial + +import torch.nn as nn + +from detectron2.config import LazyCall as L +from detectron2.data.catalog import MetadataCatalog +from detectron2.data.detection_utils import get_fed_loss_cls_weights +from detectron2.layers import ShapeSpec +from detectron2.modeling.backbone.fpn import LastLevelMaxPool +from detrex.config import get_config +from ape.modeling.backbone.vit_eva02 import SimpleFeaturePyramid, ViT, get_vit_lr_decay_rate + +from .....detectron2.configs.common.data.constants import constants +from ...COCO_Detection.deformable_deta.models.deformable_deta_r50 import model +from ...common.data.lvis_instance_lsj1024_cp import dataloader + +model.pixel_mean = constants.imagenet_rgb256_mean +model.pixel_std = constants.imagenet_rgb256_std +model.input_format = "RGB" + +model.num_classes = 1203 +model.criterion.num_classes = 1203 +model.select_box_nums_for_evaluation = 300 +model.criterion.use_fed_loss = True +model.criterion.get_fed_loss_cls_weights = lambda: get_fed_loss_cls_weights( + dataloader.train.dataset.names, 0.5 +) +model.criterion.fed_loss_num_classes = 50 + +model.backbone = L(SimpleFeaturePyramid)( + net=L(ViT)( # Single-scale ViT backbone + img_size=1024, + patch_size=16, + embed_dim=1024, + depth=24, + num_heads=16, + drop_path_rate=0.4, + window_size=16, + mlp_ratio=4 * 2 / 3, + qkv_bias=True, + norm_layer=partial(nn.LayerNorm, eps=1e-6), + window_block_indexes=list(range(0, 5)) + + list(range(6, 11)) + + list(range(12, 17)) + + list(range(18, 23)), + residual_block_indexes=[], + use_rel_pos=True, + out_feature="last_feat", + use_act_checkpoint=False, + xattn=True, + ), + in_feature="${.net.out_feature}", + out_channels=256, + scale_factors=(4.0, 2.0, 1.0, 0.5), + top_block=L(LastLevelMaxPool)(), + norm="LN", + square_pad=1024, +) + +model.neck = None + +optimizer = get_config("common/optim.py").AdamW +optimizer.params.lr_factor_func = ( + lambda module_name: 0.1 + if "reference_points" in module_name or "sampling_offsets" in module_name + else get_vit_lr_decay_rate(module_name, lr_decay_rate=0.8, num_layers=24) + if "backbone" in module_name + else 1 +) +optimizer.params.overrides = {"pos_embed": {"weight_decay": 0.0}} + +optimizer.lr = 2e-4 +optimizer.weight_decay = 0.05 + +train = get_config("common/train.py").train +train.max_iter = 180000 +train.eval_period = 20000 +train.log_period = 20 + +train.checkpointer.period = 5000 +train.checkpointer.max_to_keep = 2 + +train.clip_grad.enabled = True +train.clip_grad.params.max_norm = 0.1 +train.clip_grad.params.norm_type = 2 + +train.device = "cuda" + +train.init_checkpoint = ( + "models/Yunxin-CV/EVA-02/eva02/pt/eva02_L_pt_in21k_p14to16.pt?matching_heuristics=True" +) + +train.amp.enabled = True +train.ddp.fp16_compression = True + +lr_multiplier = get_config("common/coco_schedule.py").lr_multiplier_12ep +lr_multiplier.scheduler.milestones = [150000, 180000] +lr_multiplier.warmup_length = 1000 / train.max_iter + +dataloader.train.num_workers = 16 +dataloader.train.total_batch_size = 16 +dataloader.train.mapper.image_format = "RGB" + +if isinstance(dataloader.train.dataset.names, str): + model.metadata = MetadataCatalog.get(dataloader.train.dataset.names) +else: + model.metadata = MetadataCatalog.get(dataloader.train.dataset.names[0]) + +train.output_dir = "output/" + __file__[:-3] +dataloader.train.mapper.output_dir = train.output_dir diff --git a/approach/ovod/APE/configs/LVIS_Detection/deformable_deta/deformable_deta_vitl_eva_lsj1024_cp_24ep.py b/approach/ovod/APE/configs/LVIS_Detection/deformable_deta/deformable_deta_vitl_eva_lsj1024_cp_24ep.py new file mode 100644 index 0000000000000000000000000000000000000000..0483ead659b7606630c009e6c29252ca9af786fd --- /dev/null +++ b/approach/ovod/APE/configs/LVIS_Detection/deformable_deta/deformable_deta_vitl_eva_lsj1024_cp_24ep.py @@ -0,0 +1,13 @@ +from ...common.data.lvis_lsj1024_cp import dataloader +from .deformable_deta_vitl_two_stage_lsj1024_24ep import lr_multiplier, model, optimizer, train + +train.init_checkpoint = "models/BAAI/EVA/eva_l_psz14to16.pt?matching_heuristics=True" + +train.amp.enabled = True +train.ddp.fp16_compression = True + +model.backbone.net.use_act_checkpoint = False + +train.output_dir = "output/" + __file__[:-3] +dataloader.evaluator.output_dir = train.output_dir +dataloader.train.mapper.output_dir = train.output_dir diff --git a/approach/ovod/APE/configs/LVIS_Detection/deformable_deta/deformable_deta_vitl_lsj1024_24ep.py b/approach/ovod/APE/configs/LVIS_Detection/deformable_deta/deformable_deta_vitl_lsj1024_24ep.py new file mode 100644 index 0000000000000000000000000000000000000000..886ea450e39fa1eec01a68e6889f7cecbdd1690b --- /dev/null +++ b/approach/ovod/APE/configs/LVIS_Detection/deformable_deta/deformable_deta_vitl_lsj1024_24ep.py @@ -0,0 +1,41 @@ +from detectron2.modeling.backbone.vit import get_vit_lr_decay_rate + +from .deformable_deta_vitb_two_stage_lsj1024_24ep import ( + dataloader, + lr_multiplier, + model, + optimizer, + train, +) + +model.backbone.net.embed_dim = 1024 +model.backbone.net.depth = 24 +model.backbone.net.num_heads = 16 +model.backbone.net.use_act_checkpoint = False +model.backbone.net.drop_path_rate = 0.4 +model.backbone.net.window_block_indexes = ( + list(range(0, 5)) + list(range(6, 11)) + list(range(12, 17)) + list(range(18, 23)) +) + +optimizer.params.lr_factor_func = ( + lambda module_name: 0.1 + if "reference_points" in module_name or "sampling_offsets" in module_name + else get_vit_lr_decay_rate(module_name, lr_decay_rate=0.8, num_layers=24) + if "backbone" in module_name + else 1 +) +optimizer.params.overrides = {"pos_embed": {"weight_decay": 0.0}} + +optimizer.lr = 2e-4 +optimizer.weight_decay = 0.05 + +train.init_checkpoint = ( + "detectron2://ImageNetPretrained/MAE/mae_pretrain_vit_large.pth?matching_heuristics=True" +) +train.init_checkpoint = "models/MAE/mae_pretrain_vit_large.pth?matching_heuristics=True" + +train.amp.enabled = True +train.ddp.fp16_compression = True + +train.output_dir = "output/" + __file__[:-3] +dataloader.evaluator.output_dir = train.output_dir diff --git a/approach/ovod/APE/configs/LVIS_InstanceSegmentation/ape_deta/ape_deta_r50_24ep.py b/approach/ovod/APE/configs/LVIS_InstanceSegmentation/ape_deta/ape_deta_r50_24ep.py new file mode 100644 index 0000000000000000000000000000000000000000..7d77bb4e329cf8e7046f52bcc78ff21d95f304a4 --- /dev/null +++ b/approach/ovod/APE/configs/LVIS_InstanceSegmentation/ape_deta/ape_deta_r50_24ep.py @@ -0,0 +1,45 @@ +from detectron2.config import LazyCall as L +from detectron2.data.detection_utils import get_fed_loss_cls_weights +from detectron2.data.samplers import RepeatFactorTrainingSampler +from detectron2.evaluation.lvis_evaluation import LVISEvaluator + +from ...COCO_InstanceSegmentation.ape_deta.ape_deta_r50_12ep import ( + dataloader, + lr_multiplier, + model, + optimizer, + train, +) + +dataloader.train.dataset.names = "lvis_v1_train" +dataloader.train.sampler = L(RepeatFactorTrainingSampler)( + repeat_factors=L(RepeatFactorTrainingSampler.repeat_factors_from_category_frequency)( + dataset_dicts="${dataloader.train.dataset}", repeat_thresh=0.001 + ) +) +dataloader.test.dataset.names = "lvis_v1_val" +dataloader.evaluator = L(LVISEvaluator)( + dataset_name="${..test.dataset.names}", + max_dets_per_image=300, +) + +model.model_vision.num_classes = 1203 +model.model_vision.select_box_nums_for_evaluation = 300 +model.model_vision.criterion[0].num_classes = 1203 +model.model_vision.criterion[0].use_fed_loss = True +model.model_vision.criterion[0].get_fed_loss_cls_weights = lambda: get_fed_loss_cls_weights( + dataloader.train.dataset.names, 0.5 +) +model.model_vision.criterion[0].fed_loss_num_classes = 50 + +train.max_iter = 180000 +train.eval_period = 20000 + +lr_multiplier.scheduler.milestones = [150000, 180000] +lr_multiplier.warmup_length = 250 / train.max_iter + +model.model_vision.dataset_prompts = ["name"] +model.model_vision.dataset_names = ["lvis"] +model.model_vision.dataset_metas = dataloader.train.dataset.names + +train.output_dir = "output/" + __file__[:-3] diff --git a/approach/ovod/APE/configs/LVIS_InstanceSegmentation/ape_deta/ape_deta_r50_vlf_24ep.py b/approach/ovod/APE/configs/LVIS_InstanceSegmentation/ape_deta/ape_deta_r50_vlf_24ep.py new file mode 100644 index 0000000000000000000000000000000000000000..08d76e0da09a43c5600cc635dc622a2a872b583f --- /dev/null +++ b/approach/ovod/APE/configs/LVIS_InstanceSegmentation/ape_deta/ape_deta_r50_vlf_24ep.py @@ -0,0 +1,45 @@ +from detectron2.config import LazyCall as L +from detectron2.data.detection_utils import get_fed_loss_cls_weights +from detectron2.data.samplers import RepeatFactorTrainingSampler +from detectron2.evaluation.lvis_evaluation import LVISEvaluator + +from ...COCO_InstanceSegmentation.ape_deta.ape_deta_r50_vlf_12ep import ( + dataloader, + lr_multiplier, + model, + optimizer, + train, +) + +dataloader.train.dataset.names = "lvis_v1_train" +dataloader.train.sampler = L(RepeatFactorTrainingSampler)( + repeat_factors=L(RepeatFactorTrainingSampler.repeat_factors_from_category_frequency)( + dataset_dicts="${dataloader.train.dataset}", repeat_thresh=0.001 + ) +) +dataloader.test.dataset.names = "lvis_v1_val" +dataloader.evaluator = L(LVISEvaluator)( + dataset_name="${..test.dataset.names}", + max_dets_per_image=300, +) + +model.model_vision.num_classes = 1203 +model.model_vision.select_box_nums_for_evaluation = 300 +model.model_vision.criterion[0].num_classes = 1203 +model.model_vision.criterion[0].use_fed_loss = True +model.model_vision.criterion[0].get_fed_loss_cls_weights = lambda: get_fed_loss_cls_weights( + dataloader.train.dataset.names, 0.5 +) +model.model_vision.criterion[0].fed_loss_num_classes = 50 + +train.max_iter = 180000 +train.eval_period = 20000 + +lr_multiplier.scheduler.milestones = [150000, 180000] +lr_multiplier.warmup_length = 250 / train.max_iter + +model.model_vision.dataset_prompts = ["name"] +model.model_vision.dataset_names = ["lvis"] +model.model_vision.dataset_metas = dataloader.train.dataset.names + +train.output_dir = "output/" + __file__[:-3] diff --git a/approach/ovod/APE/configs/LVIS_InstanceSegmentation/ape_deta/ape_deta_vitl_eva02_clip_lsj1024_cp_24ep.py b/approach/ovod/APE/configs/LVIS_InstanceSegmentation/ape_deta/ape_deta_vitl_eva02_clip_lsj1024_cp_24ep.py new file mode 100644 index 0000000000000000000000000000000000000000..406eb784dfa60e5a0952208360ca6e5a366f7e9a --- /dev/null +++ b/approach/ovod/APE/configs/LVIS_InstanceSegmentation/ape_deta/ape_deta_vitl_eva02_clip_lsj1024_cp_24ep.py @@ -0,0 +1,35 @@ +from detectron2.data.detection_utils import get_fed_loss_cls_weights + +from ...COCO_InstanceSegmentation.ape_deta.ape_deta_vitl_eva02_clip_lsj1024_cp_12ep import ( + lr_multiplier, + model, + optimizer, + train, +) +from ...common.data.lvis_instance_lsj1024_cp import dataloader + +model.model_vision.num_classes = 1203 +model.model_vision.select_box_nums_for_evaluation = 300 +model.model_vision.test_score_thresh = 0.0 +model.model_vision.criterion[0].num_classes = 1203 +model.model_vision.criterion[0].use_fed_loss = True +model.model_vision.criterion[0].get_fed_loss_cls_weights = lambda: get_fed_loss_cls_weights( + dataloader.train.dataset.names, 0.5 +) +model.model_vision.criterion[0].fed_loss_num_classes = 50 + +del optimizer.params.weight_decay_norm + +optimizer.weight_decay = 0.05 + +train.max_iter = 180000 +train.eval_period = 20000 + +lr_multiplier.scheduler.milestones = [150000, 180000] +lr_multiplier.warmup_length = 1000 / train.max_iter + +model.model_vision.dataset_prompts = ["name"] +model.model_vision.dataset_names = ["lvis"] +model.model_vision.dataset_metas = dataloader.train.dataset.names + +train.output_dir = "output/" + __file__[:-3] diff --git a/approach/ovod/APE/configs/LVIS_InstanceSegmentation/ape_deta/ape_deta_vitl_eva02_clip_lsj1536_cp_64x90k.py b/approach/ovod/APE/configs/LVIS_InstanceSegmentation/ape_deta/ape_deta_vitl_eva02_clip_lsj1536_cp_64x90k.py new file mode 100644 index 0000000000000000000000000000000000000000..33b1e41a1534f151fd9f8310713e66c476f126cc --- /dev/null +++ b/approach/ovod/APE/configs/LVIS_InstanceSegmentation/ape_deta/ape_deta_vitl_eva02_clip_lsj1536_cp_64x90k.py @@ -0,0 +1,36 @@ +from detectron2.data.detection_utils import get_fed_loss_cls_weights + +from ...COCO_InstanceSegmentation.ape_deta.ape_deta_vitl_eva02_clip_lsj1536_cp_64x90k import ( + lr_multiplier, + model, + optimizer, + train, +) +from ...common.data.lvis_instance_lsj1536_cp import dataloader + +model.model_vision.num_classes = 1203 +model.model_vision.select_box_nums_for_evaluation = 300 +model.model_vision.criterion[0].num_classes = 1203 +model.model_vision.criterion[0].use_fed_loss = True +model.model_vision.criterion[0].get_fed_loss_cls_weights = lambda: get_fed_loss_cls_weights( + dataloader.train.dataset.names, 0.5 +) +model.model_vision.criterion[0].fed_loss_num_classes = 50 + +del optimizer.params.weight_decay_norm + +optimizer.weight_decay = 0.05 + +train.max_iter = 90000 +train.eval_period = 10000 + +lr_multiplier.scheduler.milestones = [75000, 90000] +lr_multiplier.warmup_length = 1000 / train.max_iter + +model.model_vision.dataset_prompts = ["name"] +model.model_vision.dataset_names = ["lvis"] +model.model_vision.dataset_metas = dataloader.train.dataset.names + +dataloader.train.total_batch_size = 64 + +train.output_dir = "output/" + __file__[:-3] diff --git a/approach/ovod/APE/configs/LVIS_InstanceSegmentation/ape_deta/ape_deta_vitl_eva02_clip_vlf_lsj1024_cp_24ep.py b/approach/ovod/APE/configs/LVIS_InstanceSegmentation/ape_deta/ape_deta_vitl_eva02_clip_vlf_lsj1024_cp_24ep.py new file mode 100644 index 0000000000000000000000000000000000000000..e015f650d4e4b6f6bdd6f48c91bcc4a1cac92426 --- /dev/null +++ b/approach/ovod/APE/configs/LVIS_InstanceSegmentation/ape_deta/ape_deta_vitl_eva02_clip_vlf_lsj1024_cp_24ep.py @@ -0,0 +1,34 @@ +from detectron2.data.detection_utils import get_fed_loss_cls_weights + +from ...COCO_InstanceSegmentation.ape_deta.ape_deta_vitl_eva02_clip_vlf_lsj1024_cp_12ep import ( + lr_multiplier, + model, + optimizer, + train, +) +from ...common.data.lvis_instance_lsj1024_cp import dataloader + +model.model_vision.num_classes = 1203 +model.model_vision.select_box_nums_for_evaluation = 300 +model.model_vision.criterion[0].num_classes = 1203 +model.model_vision.criterion[0].use_fed_loss = True +model.model_vision.criterion[0].get_fed_loss_cls_weights = lambda: get_fed_loss_cls_weights( + dataloader.train.dataset.names, 0.5 +) +model.model_vision.criterion[0].fed_loss_num_classes = 50 + +del optimizer.params.weight_decay_norm + +optimizer.weight_decay = 0.05 + +train.max_iter = 180000 +train.eval_period = 20000 + +lr_multiplier.scheduler.milestones = [150000, 180000] +lr_multiplier.warmup_length = 1000 / train.max_iter + +model.model_vision.dataset_prompts = ["name"] +model.model_vision.dataset_names = ["lvis"] +model.model_vision.dataset_metas = dataloader.train.dataset.names + +train.output_dir = "output/" + __file__[:-3] diff --git a/approach/ovod/APE/configs/LVIS_InstanceSegmentation/ape_deta/ape_deta_vitl_eva02_lsj1024_cp_24ep.py b/approach/ovod/APE/configs/LVIS_InstanceSegmentation/ape_deta/ape_deta_vitl_eva02_lsj1024_cp_24ep.py new file mode 100644 index 0000000000000000000000000000000000000000..1a8630a8ed17883418553ae2ee7f1a5ca499cab9 --- /dev/null +++ b/approach/ovod/APE/configs/LVIS_InstanceSegmentation/ape_deta/ape_deta_vitl_eva02_lsj1024_cp_24ep.py @@ -0,0 +1,34 @@ +from detectron2.data.detection_utils import get_fed_loss_cls_weights + +from ...COCO_InstanceSegmentation.ape_deta.ape_deta_vitl_eva02_lsj1024_cp_12ep import ( + lr_multiplier, + model, + optimizer, + train, +) +from ...common.data.lvis_instance_lsj1024_cp import dataloader + +model.model_vision.num_classes = 1203 +model.model_vision.select_box_nums_for_evaluation = 300 +model.model_vision.criterion[0].num_classes = 1203 +model.model_vision.criterion[0].use_fed_loss = True +model.model_vision.criterion[0].get_fed_loss_cls_weights = lambda: get_fed_loss_cls_weights( + dataloader.train.dataset.names, 0.5 +) +model.model_vision.criterion[0].fed_loss_num_classes = 50 + +del optimizer.params.weight_decay_norm + +optimizer.weight_decay = 0.05 + +train.max_iter = 180000 +train.eval_period = 20000 + +lr_multiplier.scheduler.milestones = [150000, 180000] +lr_multiplier.warmup_length = 1000 / train.max_iter + +model.model_vision.dataset_prompts = ["name"] +model.model_vision.dataset_names = ["lvis"] +model.model_vision.dataset_metas = dataloader.train.dataset.names + +train.output_dir = "output/" + __file__[:-3] diff --git a/approach/ovod/APE/configs/LVIS_InstanceSegmentation/ape_deta/ape_deta_vitl_eva02_lsj1536_cp_64x90k.py b/approach/ovod/APE/configs/LVIS_InstanceSegmentation/ape_deta/ape_deta_vitl_eva02_lsj1536_cp_64x90k.py new file mode 100644 index 0000000000000000000000000000000000000000..d574e8de581201682bcaa3faaa0a4dfc3024d746 --- /dev/null +++ b/approach/ovod/APE/configs/LVIS_InstanceSegmentation/ape_deta/ape_deta_vitl_eva02_lsj1536_cp_64x90k.py @@ -0,0 +1,36 @@ +from detectron2.data.detection_utils import get_fed_loss_cls_weights + +from ...COCO_InstanceSegmentation.ape_deta.ape_deta_vitl_eva02_lsj1536_cp_64x90k import ( + lr_multiplier, + model, + optimizer, + train, +) +from ...common.data.lvis_instance_lsj1536_cp import dataloader + +model.model_vision.num_classes = 1203 +model.model_vision.select_box_nums_for_evaluation = 300 +model.model_vision.criterion[0].num_classes = 1203 +model.model_vision.criterion[0].use_fed_loss = True +model.model_vision.criterion[0].get_fed_loss_cls_weights = lambda: get_fed_loss_cls_weights( + dataloader.train.dataset.names, 0.5 +) +model.model_vision.criterion[0].fed_loss_num_classes = 50 + +del optimizer.params.weight_decay_norm + +optimizer.weight_decay = 0.05 + +train.max_iter = 90000 +train.eval_period = 10000 + +lr_multiplier.scheduler.milestones = [75000, 90000] +lr_multiplier.warmup_length = 1000 / train.max_iter + +model.model_vision.dataset_prompts = ["name"] +model.model_vision.dataset_names = ["lvis"] +model.model_vision.dataset_metas = dataloader.train.dataset.names + +dataloader.train.total_batch_size = 64 + +train.output_dir = "output/" + __file__[:-3] diff --git a/approach/ovod/APE/configs/LVIS_InstanceSegmentation/ape_deta/ape_deta_vitl_eva02_vlf_lsj1024_cp_24ep.py b/approach/ovod/APE/configs/LVIS_InstanceSegmentation/ape_deta/ape_deta_vitl_eva02_vlf_lsj1024_cp_24ep.py new file mode 100644 index 0000000000000000000000000000000000000000..4db130304b642009958e44ed68691a0e96ca81de --- /dev/null +++ b/approach/ovod/APE/configs/LVIS_InstanceSegmentation/ape_deta/ape_deta_vitl_eva02_vlf_lsj1024_cp_24ep.py @@ -0,0 +1,34 @@ +from detectron2.data.detection_utils import get_fed_loss_cls_weights + +from ...COCO_InstanceSegmentation.ape_deta.ape_deta_vitl_eva02_vlf_lsj1024_cp_12ep import ( + lr_multiplier, + model, + optimizer, + train, +) +from ...common.data.lvis_instance_lsj1024_cp import dataloader + +model.model_vision.num_classes = 1203 +model.model_vision.select_box_nums_for_evaluation = 300 +model.model_vision.criterion[0].num_classes = 1203 +model.model_vision.criterion[0].use_fed_loss = True +model.model_vision.criterion[0].get_fed_loss_cls_weights = lambda: get_fed_loss_cls_weights( + dataloader.train.dataset.names, 0.5 +) +model.model_vision.criterion[0].fed_loss_num_classes = 50 + +del optimizer.params.weight_decay_norm + +optimizer.weight_decay = 0.05 + +train.max_iter = 180000 +train.eval_period = 20000 + +lr_multiplier.scheduler.milestones = [150000, 180000] +lr_multiplier.warmup_length = 1000 / train.max_iter + +model.model_vision.dataset_prompts = ["name"] +model.model_vision.dataset_names = ["lvis"] +model.model_vision.dataset_metas = dataloader.train.dataset.names + +train.output_dir = "output/" + __file__[:-3] diff --git a/approach/ovod/APE/configs/LVIS_InstanceSegmentation/deformable_deta/deformable_deta_segm_vitl_eva02_4scale_lsj1024_cp_24ep.py b/approach/ovod/APE/configs/LVIS_InstanceSegmentation/deformable_deta/deformable_deta_segm_vitl_eva02_4scale_lsj1024_cp_24ep.py new file mode 100644 index 0000000000000000000000000000000000000000..200b6637d83f3c344227d1bf19c92a12a70da5d4 --- /dev/null +++ b/approach/ovod/APE/configs/LVIS_InstanceSegmentation/deformable_deta/deformable_deta_segm_vitl_eva02_4scale_lsj1024_cp_24ep.py @@ -0,0 +1,90 @@ +from detectron2.config import LazyCall as L +from detectron2.data.detection_utils import get_fed_loss_cls_weights +from detectron2.layers import ShapeSpec +from detectron2.modeling.backbone.fpn import LastLevelMaxPool +from detrex.config import get_config +from ape.modeling.backbone.vit import get_vit_lr_decay_rate + +from .....detectron2.configs.common.data.constants import constants +from ...COCO_InstanceSegmentation.deformable_deta.models.deformable_deta_segm_r50 import model +from ...common.backbone.vitl_eva02 import backbone +from ...common.data.lvis_instance_lsj1024_cp import dataloader + +model.pixel_mean = constants.imagenet_rgb256_mean +model.pixel_std = constants.imagenet_rgb256_std +model.input_format = "RGB" + +model.num_classes = 1203 +model.criterion.num_classes = 1203 +model.select_box_nums_for_evaluation = 300 +model.criterion.use_fed_loss = True +model.criterion.get_fed_loss_cls_weights = lambda: get_fed_loss_cls_weights( + dataloader.train.dataset.names, 0.5 +) +model.criterion.fed_loss_num_classes = 50 + +model.backbone = backbone +model.backbone.scale_factors = (2.0, 1.0, 0.5) + +model.transformer.num_feature_levels = 4 +model.transformer.encoder.num_feature_levels = 4 +model.transformer.decoder.num_feature_levels = 4 + +model.neck = None + +model.mask_in_features = ["p3"] +model.input_shapes = { + "p2": ShapeSpec(channels=256), + "p3": ShapeSpec(channels=256), + "p4": ShapeSpec(channels=256), + "p5": ShapeSpec(channels=256), + "p6": ShapeSpec(channels=256), +} + +optimizer = get_config("common/optim.py").AdamW +optimizer.params.lr_factor_func = ( + lambda module_name: 0.1 + if "reference_points" in module_name or "sampling_offsets" in module_name + else get_vit_lr_decay_rate(module_name, lr_decay_rate=0.8, num_layers=24) + if "backbone.net" in module_name + else 1 +) +optimizer.params.overrides = {"pos_embed": {"weight_decay": 0.0}} + +optimizer.lr = 2e-4 +optimizer.weight_decay = 0.05 + +train = get_config("common/train.py").train +train.max_iter = 180000 +train.eval_period = 20000 +train.log_period = 20 + +train.checkpointer.period = 5000 +train.checkpointer.max_to_keep = 2 + +train.clip_grad.enabled = True +train.clip_grad.params.max_norm = 0.1 +train.clip_grad.params.norm_type = 2 + +train.device = "cuda" + +train.init_checkpoint = ( + "models/Yunxin-CV/EVA-02/eva02/pt/eva02_L_pt_in21k_p14to16.pt?matching_heuristics=True" +) + +train.amp.enabled = True +train.ddp.fp16_compression = True + +lr_multiplier = get_config("common/coco_schedule.py").lr_multiplier_12ep +lr_multiplier.scheduler.milestones = [150000, 180000] +lr_multiplier.warmup_length = 1000 / train.max_iter + +dataloader.train.num_workers = 16 +dataloader.train.total_batch_size = 16 +dataloader.train.mapper.image_format = "RGB" +dataloader.train.mapper.use_instance_mask = True + +model.dataset_metas = dataloader.train.dataset.names + +train.output_dir = "output/" + __file__[:-3] +dataloader.train.mapper.vis_period = 12800 diff --git a/approach/ovod/APE/configs/LVIS_InstanceSegmentation/deformable_deta/deformable_deta_segm_vitl_eva02_lsj1024_cp_24ep.py b/approach/ovod/APE/configs/LVIS_InstanceSegmentation/deformable_deta/deformable_deta_segm_vitl_eva02_lsj1024_cp_24ep.py new file mode 100644 index 0000000000000000000000000000000000000000..8d90d16b4fee37b7ce3da695d8e2053f7b9a049f --- /dev/null +++ b/approach/ovod/APE/configs/LVIS_InstanceSegmentation/deformable_deta/deformable_deta_segm_vitl_eva02_lsj1024_cp_24ep.py @@ -0,0 +1,33 @@ +from detectron2.data.detection_utils import get_fed_loss_cls_weights + +from ...COCO_InstanceSegmentation.deformable_deta.deformable_deta_segm_vitl_eva02_lsj1024_cp_12ep import ( + lr_multiplier, + model, + optimizer, + train, +) +from ...common.data.lvis_instance_lsj1024_cp import dataloader + +model.num_classes = 1203 +model.select_box_nums_for_evaluation = 300 +model.criterion.num_classes = 1203 +model.criterion.use_fed_loss = True +model.criterion.get_fed_loss_cls_weights = lambda: get_fed_loss_cls_weights( + dataloader.train.dataset.names, 0.5 +) +model.criterion.fed_loss_num_classes = 50 + +del optimizer.params.weight_decay_norm + +optimizer.weight_decay = 0.05 + +train.max_iter = 180000 +train.eval_period = 20000 + +lr_multiplier.scheduler.milestones = [150000, 180000] +lr_multiplier.warmup_length = 1000 / train.max_iter + +model.dataset_metas = dataloader.train.dataset.names + +train.output_dir = "output/" + __file__[:-3] +dataloader.train.mapper.vis_period = 12800 diff --git a/approach/ovod/APE/configs/ODinW_Detection/ape_deta/ape_deta_vitl_eva02_clip_vlf_lsj1024_13.py b/approach/ovod/APE/configs/ODinW_Detection/ape_deta/ape_deta_vitl_eva02_clip_vlf_lsj1024_13.py new file mode 100644 index 0000000000000000000000000000000000000000..8d10e4ad8e7b891ddb7f6c1af44555e422458a21 --- /dev/null +++ b/approach/ovod/APE/configs/ODinW_Detection/ape_deta/ape_deta_vitl_eva02_clip_vlf_lsj1024_13.py @@ -0,0 +1,103 @@ +from detectron2.config import LazyCall as L +from detectron2.solver import WarmupParamScheduler +from fvcore.common.param_scheduler import MultiStepParamScheduler + +from ape.data.detection_utils import get_fed_loss_cls_weights +from ape.layers import VisionLanguageFusion +from ape.modeling.ape_deta import ( + DeformableDETRSegmVL, + DeformableDetrTransformerDecoderVL, + DeformableDetrTransformerEncoderVL, + DeformableDetrTransformerVL, +) + +from ...common.data.odinw13_instance_lsj1024 import dataloader +from ...LVIS_InstanceSegmentation.ape_deta.ape_deta_vitl_eva02_clip_vlf_lsj1024_cp_24ep import ( + model, + optimizer, + train, +) + +model.model_vision.num_classes = 1256 +model.model_vision.select_box_nums_for_evaluation = 300 + +criterion = model.model_vision.criterion[0] +del criterion.use_fed_loss +del criterion.get_fed_loss_cls_weights +model.model_vision.criterion = [criterion for _ in range(35)] +for criterion, num_classes in zip( + model.model_vision.criterion, + [ + 1000, + ] + * 35, +): + criterion.num_classes = num_classes + +model.model_vision.instance_on = True +model.model_vision.semantic_on = False +model.model_vision.panoptic_on = False + +train.max_iter = 720000 +train.eval_period = 720000 + +lr_multiplier = L(WarmupParamScheduler)( + scheduler=L(MultiStepParamScheduler)( + values=[1.0, 0.1], + milestones=[640000], + num_updates=720000, + ), + warmup_length=1000 / 720000, + warmup_method="linear", + warmup_factor=0.001, +) + +for i in range(len(dataloader.train)): + dataloader.train[i].total_batch_size = 16 + dataloader.train[i].total_batch_size_list = [16] + +model.model_vision.dataset_prompts = ["name" for _ in dataloader.train] +model.model_vision.dataset_names = [ + x.dataset.names[0].replace("_train", "") for x in dataloader.train +] +model.model_vision.dataset_metas = [x.dataset.names[0] for x in dataloader.train] +model.model_vision.name_prompt_fusion_text = dataloader.name_prompt_fusion_text +model.model_vision.select_box_nums_for_evaluation_list = ( + dataloader.select_box_nums_for_evaluation_list +) + + +model.model_vision.update( + _target_=DeformableDETRSegmVL, +) +model.model_vision.transformer.update( + _target_=DeformableDetrTransformerVL, +) +model.model_vision.transformer.encoder.update( + _target_=DeformableDetrTransformerEncoderVL, +) +model.model_vision.transformer.decoder.update( + _target_=DeformableDetrTransformerDecoderVL, +) + +model.model_vision.transformer.encoder.vl_layer = L(VisionLanguageFusion)( + v_dim="${....embed_dim}", + l_dim="${....embed_dim_language}", + embed_dim=2048, + num_heads=8, + dropout=0.1, + drop_path=0.0, + init_values=1.0 / 6, + stable_softmax_2d=True, + clamp_min_for_underflow=True, + clamp_max_for_overflow=True, + use_checkpoint=True, +) + +model.model_vision.text_feature_bank = True +model.model_vision.text_feature_reduce_before_fusion = True +model.model_vision.text_feature_batch_repeat = True +model.model_vision.expression_cumulative_gt_class = True +model.model_vision.name_prompt_fusion_type = "zero" + +train.output_dir = "output/" + __file__[:-3] diff --git a/approach/ovod/APE/configs/ODinW_Detection/ape_deta/ape_deta_vitl_eva02_clip_vlf_lsj1024_35.py b/approach/ovod/APE/configs/ODinW_Detection/ape_deta/ape_deta_vitl_eva02_clip_vlf_lsj1024_35.py new file mode 100644 index 0000000000000000000000000000000000000000..803f6be2822fcffd4313caabd677853289e0c3d0 --- /dev/null +++ b/approach/ovod/APE/configs/ODinW_Detection/ape_deta/ape_deta_vitl_eva02_clip_vlf_lsj1024_35.py @@ -0,0 +1,104 @@ +from detectron2.config import LazyCall as L +from detectron2.solver import WarmupParamScheduler +from fvcore.common.param_scheduler import MultiStepParamScheduler + +from ape.data.detection_utils import get_fed_loss_cls_weights +from ape.layers import VisionLanguageFusion +from ape.modeling.ape_deta import ( + DeformableDETRSegmVL, + DeformableDetrTransformerDecoderVL, + DeformableDetrTransformerEncoderVL, + DeformableDetrTransformerVL, +) + +from ...common.data.odinw35_instance_lsj1024 import dataloader +from ...LVIS_InstanceSegmentation.ape_deta.ape_deta_vitl_eva02_clip_vlf_lsj1024_cp_24ep import ( + model, + optimizer, + train, +) + +model.model_vision.num_classes = 1256 +model.model_vision.select_box_nums_for_evaluation = 300 + +criterion = model.model_vision.criterion[0] +del criterion.use_fed_loss +del criterion.get_fed_loss_cls_weights +model.model_vision.criterion = [criterion for _ in range(35)] +for criterion, num_classes in zip( + model.model_vision.criterion, + [ + 1000, + ] + * 35, +): + criterion.num_classes = num_classes + +model.model_vision.instance_on = True +model.model_vision.semantic_on = False +model.model_vision.panoptic_on = False + + +train.max_iter = 720000 +train.eval_period = 720000 + +lr_multiplier = L(WarmupParamScheduler)( + scheduler=L(MultiStepParamScheduler)( + values=[1.0, 0.1], + milestones=[640000], + num_updates=720000, + ), + warmup_length=1000 / 720000, + warmup_method="linear", + warmup_factor=0.001, +) + +for i in range(len(dataloader.train)): + dataloader.train[i].total_batch_size = 16 + dataloader.train[i].total_batch_size_list = [16] + +model.model_vision.dataset_prompts = ["name" for _ in dataloader.train] +model.model_vision.dataset_names = [ + x.dataset.names[0].replace("_train", "") for x in dataloader.train +] +model.model_vision.dataset_metas = [x.dataset.names[0] for x in dataloader.train] +model.model_vision.name_prompt_fusion_text = dataloader.name_prompt_fusion_text +model.model_vision.select_box_nums_for_evaluation_list = ( + dataloader.select_box_nums_for_evaluation_list +) + + +model.model_vision.update( + _target_=DeformableDETRSegmVL, +) +model.model_vision.transformer.update( + _target_=DeformableDetrTransformerVL, +) +model.model_vision.transformer.encoder.update( + _target_=DeformableDetrTransformerEncoderVL, +) +model.model_vision.transformer.decoder.update( + _target_=DeformableDetrTransformerDecoderVL, +) + +model.model_vision.transformer.encoder.vl_layer = L(VisionLanguageFusion)( + v_dim="${....embed_dim}", + l_dim="${....embed_dim_language}", + embed_dim=2048, + num_heads=8, + dropout=0.1, + drop_path=0.0, + init_values=1.0 / 6, + stable_softmax_2d=True, + clamp_min_for_underflow=True, + clamp_max_for_overflow=True, + use_checkpoint=True, +) + +model.model_vision.text_feature_bank = True +model.model_vision.text_feature_reduce_before_fusion = True +model.model_vision.text_feature_batch_repeat = True +model.model_vision.expression_cumulative_gt_class = True +model.model_vision.name_prompt_fusion_type = "zero" + +train.output_dir = "output/" + __file__[:-3] diff --git a/approach/ovod/APE/configs/ODinW_Detection/ape_deta/ape_deta_vitl_eva02_lsj1024_13.py b/approach/ovod/APE/configs/ODinW_Detection/ape_deta/ape_deta_vitl_eva02_lsj1024_13.py new file mode 100644 index 0000000000000000000000000000000000000000..1e1da9b077521031effe03e75470fbe5254c6b95 --- /dev/null +++ b/approach/ovod/APE/configs/ODinW_Detection/ape_deta/ape_deta_vitl_eva02_lsj1024_13.py @@ -0,0 +1,71 @@ +from detectron2.config import LazyCall as L +from detectron2.solver import WarmupParamScheduler +from fvcore.common.param_scheduler import MultiStepParamScheduler + +from ape.data.detection_utils import get_fed_loss_cls_weights + +from ...common.data.odinw13_instance_lsj1024 import dataloader +from ...LVIS_InstanceSegmentation.ape_deta.ape_deta_vitl_eva02_lsj1024_cp_24ep import ( + model, + optimizer, + train, +) + +model.model_vision.num_classes = 1256 +model.model_vision.select_box_nums_for_evaluation = 300 + +criterion = model.model_vision.criterion[0] +del criterion.use_fed_loss +del criterion.get_fed_loss_cls_weights +model.model_vision.criterion = [criterion for _ in range(35)] +for criterion, num_classes in zip( + model.model_vision.criterion, + [ + 1000, + ] + * 35, +): + criterion.num_classes = num_classes + +model.model_vision.instance_on = True +model.model_vision.semantic_on = False +model.model_vision.panoptic_on = False + +model.model_vision.neck = None + +train.max_iter = 720000 +train.eval_period = 720000 + +lr_multiplier = L(WarmupParamScheduler)( + scheduler=L(MultiStepParamScheduler)( + values=[1.0, 0.1], + milestones=[640000], + num_updates=720000, + ), + warmup_length=1000 / 720000, + warmup_method="linear", + warmup_factor=0.001, +) + +for i in range(len(dataloader.train)): + dataloader.train[i].total_batch_size = 16 + dataloader.train[i].total_batch_size_list = [16] + +model.model_vision.dataset_prompts = ["name" for _ in dataloader.train] +model.model_vision.dataset_names = [ + x.dataset.names[0].replace("_train", "") for x in dataloader.train +] +model.model_vision.dataset_metas = [x.dataset.names[0] for x in dataloader.train] +model.model_vision.name_prompt_fusion_text = dataloader.name_prompt_fusion_text +model.model_vision.select_box_nums_for_evaluation_list = ( + dataloader.select_box_nums_for_evaluation_list +) + + +model.model_vision.text_feature_bank = True +model.model_vision.text_feature_reduce_before_fusion = True +model.model_vision.text_feature_batch_repeat = True +model.model_vision.expression_cumulative_gt_class = True +model.model_vision.name_prompt_fusion_type = "zero" + +train.output_dir = "output/" + __file__[:-3] diff --git a/approach/ovod/APE/configs/ODinW_Detection/ape_deta/ape_deta_vitl_eva02_lsj1024_35.py b/approach/ovod/APE/configs/ODinW_Detection/ape_deta/ape_deta_vitl_eva02_lsj1024_35.py new file mode 100644 index 0000000000000000000000000000000000000000..6edfa6cdb0b11a4a56fe5481c92d18d969bd4dc1 --- /dev/null +++ b/approach/ovod/APE/configs/ODinW_Detection/ape_deta/ape_deta_vitl_eva02_lsj1024_35.py @@ -0,0 +1,71 @@ +from detectron2.config import LazyCall as L +from detectron2.solver import WarmupParamScheduler +from fvcore.common.param_scheduler import MultiStepParamScheduler + +from ape.data.detection_utils import get_fed_loss_cls_weights + +from ...common.data.odinw35_instance_lsj1024 import dataloader +from ...LVIS_InstanceSegmentation.ape_deta.ape_deta_vitl_eva02_lsj1024_cp_24ep import ( + model, + optimizer, + train, +) + +model.model_vision.num_classes = 1256 +model.model_vision.select_box_nums_for_evaluation = 300 + +criterion = model.model_vision.criterion[0] +del criterion.use_fed_loss +del criterion.get_fed_loss_cls_weights +model.model_vision.criterion = [criterion for _ in range(35)] +for criterion, num_classes in zip( + model.model_vision.criterion, + [ + 1000, + ] + * 35, +): + criterion.num_classes = num_classes + +model.model_vision.instance_on = True +model.model_vision.semantic_on = False +model.model_vision.panoptic_on = False + +model.model_vision.neck = None + +train.max_iter = 720000 +train.eval_period = 720000 + +lr_multiplier = L(WarmupParamScheduler)( + scheduler=L(MultiStepParamScheduler)( + values=[1.0, 0.1], + milestones=[640000], + num_updates=720000, + ), + warmup_length=1000 / 720000, + warmup_method="linear", + warmup_factor=0.001, +) + +for i in range(len(dataloader.train)): + dataloader.train[i].total_batch_size = 16 + dataloader.train[i].total_batch_size_list = [16] + +model.model_vision.dataset_prompts = ["name" for _ in dataloader.train] +model.model_vision.dataset_names = [ + x.dataset.names[0].replace("_train", "") for x in dataloader.train +] +model.model_vision.dataset_metas = [x.dataset.names[0] for x in dataloader.train] +model.model_vision.name_prompt_fusion_text = dataloader.name_prompt_fusion_text +model.model_vision.select_box_nums_for_evaluation_list = ( + dataloader.select_box_nums_for_evaluation_list +) + + +model.model_vision.text_feature_bank = True +model.model_vision.text_feature_reduce_before_fusion = True +model.model_vision.text_feature_batch_repeat = True +model.model_vision.expression_cumulative_gt_class = True +model.model_vision.name_prompt_fusion_type = "zero" + +train.output_dir = "output/" + __file__[:-3] diff --git a/approach/ovod/APE/configs/ODinW_Detection/ape_deta/ape_deta_vitl_eva02_vlf_lsj1024_13.py b/approach/ovod/APE/configs/ODinW_Detection/ape_deta/ape_deta_vitl_eva02_vlf_lsj1024_13.py new file mode 100644 index 0000000000000000000000000000000000000000..96e7428d61d06c829d4233d1a0fa63b6d07cf7c8 --- /dev/null +++ b/approach/ovod/APE/configs/ODinW_Detection/ape_deta/ape_deta_vitl_eva02_vlf_lsj1024_13.py @@ -0,0 +1,105 @@ +from detectron2.config import LazyCall as L +from detectron2.solver import WarmupParamScheduler +from fvcore.common.param_scheduler import MultiStepParamScheduler + +from ape.data.detection_utils import get_fed_loss_cls_weights +from ape.layers import VisionLanguageFusion +from ape.modeling.ape_deta import ( + DeformableDETRSegmVL, + DeformableDetrTransformerDecoderVL, + DeformableDetrTransformerEncoderVL, + DeformableDetrTransformerVL, +) + +from ...common.data.odinw13_instance_lsj1024 import dataloader +from ...LVIS_InstanceSegmentation.ape_deta.ape_deta_vitl_eva02_vlf_lsj1024_cp_24ep import ( + model, + optimizer, + train, +) + +model.model_vision.num_classes = 1256 +model.model_vision.select_box_nums_for_evaluation = 300 + +criterion = model.model_vision.criterion[0] +del criterion.use_fed_loss +del criterion.get_fed_loss_cls_weights +model.model_vision.criterion = [criterion for _ in range(35)] +for criterion, num_classes in zip( + model.model_vision.criterion, + [ + 1000, + ] + * 35, +): + criterion.num_classes = num_classes + +model.model_vision.instance_on = True +model.model_vision.semantic_on = False +model.model_vision.panoptic_on = False + +model.model_vision.neck = None + +train.max_iter = 720000 +train.eval_period = 720000 + +lr_multiplier = L(WarmupParamScheduler)( + scheduler=L(MultiStepParamScheduler)( + values=[1.0, 0.1], + milestones=[640000], + num_updates=720000, + ), + warmup_length=1000 / 720000, + warmup_method="linear", + warmup_factor=0.001, +) + +for i in range(len(dataloader.train)): + dataloader.train[i].total_batch_size = 16 + dataloader.train[i].total_batch_size_list = [16] + +model.model_vision.dataset_prompts = ["name" for _ in dataloader.train] +model.model_vision.dataset_names = [ + x.dataset.names[0].replace("_train", "") for x in dataloader.train +] +model.model_vision.dataset_metas = [x.dataset.names[0] for x in dataloader.train] +model.model_vision.name_prompt_fusion_text = dataloader.name_prompt_fusion_text +model.model_vision.select_box_nums_for_evaluation_list = ( + dataloader.select_box_nums_for_evaluation_list +) + + +model.model_vision.update( + _target_=DeformableDETRSegmVL, +) +model.model_vision.transformer.update( + _target_=DeformableDetrTransformerVL, +) +model.model_vision.transformer.encoder.update( + _target_=DeformableDetrTransformerEncoderVL, +) +model.model_vision.transformer.decoder.update( + _target_=DeformableDetrTransformerDecoderVL, +) + +model.model_vision.transformer.encoder.vl_layer = L(VisionLanguageFusion)( + v_dim="${....embed_dim}", + l_dim="${....embed_dim_language}", + embed_dim=2048, + num_heads=8, + dropout=0.1, + drop_path=0.0, + init_values=1.0 / 6, + stable_softmax_2d=True, + clamp_min_for_underflow=True, + clamp_max_for_overflow=True, + use_checkpoint=True, +) + +model.model_vision.text_feature_bank = True +model.model_vision.text_feature_reduce_before_fusion = True +model.model_vision.text_feature_batch_repeat = True +model.model_vision.expression_cumulative_gt_class = True +model.model_vision.name_prompt_fusion_type = "zero" + +train.output_dir = "output/" + __file__[:-3] diff --git a/approach/ovod/APE/configs/ODinW_Detection/ape_deta/ape_deta_vitl_eva02_vlf_lsj1024_35.py b/approach/ovod/APE/configs/ODinW_Detection/ape_deta/ape_deta_vitl_eva02_vlf_lsj1024_35.py new file mode 100644 index 0000000000000000000000000000000000000000..1040a1553bc3053285dbfff691567db0d853e99f --- /dev/null +++ b/approach/ovod/APE/configs/ODinW_Detection/ape_deta/ape_deta_vitl_eva02_vlf_lsj1024_35.py @@ -0,0 +1,105 @@ +from detectron2.config import LazyCall as L +from detectron2.solver import WarmupParamScheduler +from fvcore.common.param_scheduler import MultiStepParamScheduler + +from ape.data.detection_utils import get_fed_loss_cls_weights +from ape.layers import VisionLanguageFusion +from ape.modeling.ape_deta import ( + DeformableDETRSegmVL, + DeformableDetrTransformerDecoderVL, + DeformableDetrTransformerEncoderVL, + DeformableDetrTransformerVL, +) + +from ...common.data.odinw35_instance_lsj1024 import dataloader +from ...LVIS_InstanceSegmentation.ape_deta.ape_deta_vitl_eva02_vlf_lsj1024_cp_24ep import ( + model, + optimizer, + train, +) + +model.model_vision.num_classes = 1256 +model.model_vision.select_box_nums_for_evaluation = 300 + +criterion = model.model_vision.criterion[0] +del criterion.use_fed_loss +del criterion.get_fed_loss_cls_weights +model.model_vision.criterion = [criterion for _ in range(35)] +for criterion, num_classes in zip( + model.model_vision.criterion, + [ + 1000, + ] + * 35, +): + criterion.num_classes = num_classes + +model.model_vision.instance_on = True +model.model_vision.semantic_on = False +model.model_vision.panoptic_on = False + +model.model_vision.neck = None + +train.max_iter = 720000 +train.eval_period = 720000 + +lr_multiplier = L(WarmupParamScheduler)( + scheduler=L(MultiStepParamScheduler)( + values=[1.0, 0.1], + milestones=[640000], + num_updates=720000, + ), + warmup_length=1000 / 720000, + warmup_method="linear", + warmup_factor=0.001, +) + +for i in range(len(dataloader.train)): + dataloader.train[i].total_batch_size = 16 + dataloader.train[i].total_batch_size_list = [16] + +model.model_vision.dataset_prompts = ["name" for _ in dataloader.train] +model.model_vision.dataset_names = [ + x.dataset.names[0].replace("_train", "") for x in dataloader.train +] +model.model_vision.dataset_metas = [x.dataset.names[0] for x in dataloader.train] +model.model_vision.name_prompt_fusion_text = dataloader.name_prompt_fusion_text +model.model_vision.select_box_nums_for_evaluation_list = ( + dataloader.select_box_nums_for_evaluation_list +) + + +model.model_vision.update( + _target_=DeformableDETRSegmVL, +) +model.model_vision.transformer.update( + _target_=DeformableDetrTransformerVL, +) +model.model_vision.transformer.encoder.update( + _target_=DeformableDetrTransformerEncoderVL, +) +model.model_vision.transformer.decoder.update( + _target_=DeformableDetrTransformerDecoderVL, +) + +model.model_vision.transformer.encoder.vl_layer = L(VisionLanguageFusion)( + v_dim="${....embed_dim}", + l_dim="${....embed_dim_language}", + embed_dim=2048, + num_heads=8, + dropout=0.1, + drop_path=0.0, + init_values=1.0 / 6, + stable_softmax_2d=True, + clamp_min_for_underflow=True, + clamp_max_for_overflow=True, + use_checkpoint=True, +) + +model.model_vision.text_feature_bank = True +model.model_vision.text_feature_reduce_before_fusion = True +model.model_vision.text_feature_batch_repeat = True +model.model_vision.expression_cumulative_gt_class = True +model.model_vision.name_prompt_fusion_type = "zero" + +train.output_dir = "output/" + __file__[:-3] diff --git a/approach/ovod/APE/configs/PascalVOCParts_PanopticSegmentation/ape_deta/ape_deta_r50_12ep.py b/approach/ovod/APE/configs/PascalVOCParts_PanopticSegmentation/ape_deta/ape_deta_r50_12ep.py new file mode 100644 index 0000000000000000000000000000000000000000..e08bf2bfcbd7bbd76872bf66a34a89957f03bfe3 --- /dev/null +++ b/approach/ovod/APE/configs/PascalVOCParts_PanopticSegmentation/ape_deta/ape_deta_r50_12ep.py @@ -0,0 +1,18 @@ +from ...COCO_InstanceSegmentation.ape_deta.ape_deta_r50_12ep import ( + lr_multiplier, + model, + optimizer, + train, +) +from ...common.data.pascalvocpart_panoptic import dataloader + +model.model_vision.num_classes = 200 + +model.model_vision.criterion[0].num_classes = 200 + +model.model_vision.dataset_prompts = ["name"] +model.model_vision.dataset_names = ["pascal_parts"] +model.model_vision.dataset_metas = dataloader.train.dataset.names + +train.output_dir = "output/" + __file__[:-3] +model.model_vision.vis_period = 1280 diff --git a/approach/ovod/APE/configs/PascalVOCParts_PanopticSegmentation/ape_deta/ape_deta_r50_vlf_12ep.py b/approach/ovod/APE/configs/PascalVOCParts_PanopticSegmentation/ape_deta/ape_deta_r50_vlf_12ep.py new file mode 100644 index 0000000000000000000000000000000000000000..d0f6e6d337b8483f9c94eb30774fbe4993b27fc2 --- /dev/null +++ b/approach/ovod/APE/configs/PascalVOCParts_PanopticSegmentation/ape_deta/ape_deta_r50_vlf_12ep.py @@ -0,0 +1,46 @@ +from detectron2.config import LazyCall as L +from omegaconf import OmegaConf +from ape.layers import VisionLanguageFusion +from ape.modeling.ape_deta import ( + DeformableDETRSegmVL, + DeformableDetrTransformerDecoderVL, + DeformableDetrTransformerEncoderVL, + DeformableDetrTransformerVL, +) + +from .ape_deta_r50_12ep import dataloader, lr_multiplier, model, optimizer, train + +model.model_vision.update( + _target_=DeformableDETRSegmVL, +) +model.model_vision.transformer.update( + _target_=DeformableDetrTransformerVL, +) +model.model_vision.transformer.encoder.update( + _target_=DeformableDetrTransformerEncoderVL, +) +model.model_vision.transformer.decoder.update( + _target_=DeformableDetrTransformerDecoderVL, +) + + +model.model_vision.transformer.encoder.vl_layer = L(VisionLanguageFusion)( + v_dim="${....embed_dim}", + l_dim="${....embed_dim_language}", + embed_dim=2048, + num_heads=8, + dropout=0.1, + drop_path=0.0, + init_values=1.0 / 6, + cfg=OmegaConf.from_dotlist( + [ + "MODEL.DYHEAD.FUSE_CONFIG.STABLE_SOFTMAX_2D=False", + "MODEL.DYHEAD.FUSE_CONFIG.CLAMP_MIN_FOR_UNDERFLOW=True", + "MODEL.DYHEAD.FUSE_CONFIG.CLAMP_MAX_FOR_OVERFLOW=True", + "MODEL.VL_FUSION_USE_CHECKPOINT=True", + ], + ), +) + +train.output_dir = "output/" + __file__[:-3] +model.model_vision.vis_period = 1280 diff --git a/approach/ovod/APE/configs/PhraseCut_VisualGrounding/ape_deta/ape_deta_r50_12ep.py b/approach/ovod/APE/configs/PhraseCut_VisualGrounding/ape_deta/ape_deta_r50_12ep.py new file mode 100644 index 0000000000000000000000000000000000000000..d4ce0811071eff5f3527af996329128316581d10 --- /dev/null +++ b/approach/ovod/APE/configs/PhraseCut_VisualGrounding/ape_deta/ape_deta_r50_12ep.py @@ -0,0 +1,20 @@ +from ...COCO_InstanceSegmentation.ape_deta.ape_deta_r50_12ep import ( + lr_multiplier, + model, + optimizer, + train, +) +from ...common.data.phrasecut_instance import dataloader + +model.model_vision.num_classes = 200 + +model.model_vision.criterion[0].num_classes = 200 + +dataloader.train.mapper.max_num_phrase = 100 + +model.model_vision.dataset_prompts = ["phrase", "expression"] +model.model_vision.dataset_names = ["phrasecut", "refcoco"] +model.model_vision.dataset_metas = dataloader.train.dataset.names + ["refcoco-mixed"] + +train.output_dir = "output/" + __file__[:-3] +model.model_vision.vis_period = 1280 diff --git a/approach/ovod/APE/configs/PhraseCut_VisualGrounding/ape_deta/ape_deta_r50_vlf_12ep.py b/approach/ovod/APE/configs/PhraseCut_VisualGrounding/ape_deta/ape_deta_r50_vlf_12ep.py new file mode 100644 index 0000000000000000000000000000000000000000..cf35b8770f328feae3cb70f2c1521ce400602b59 --- /dev/null +++ b/approach/ovod/APE/configs/PhraseCut_VisualGrounding/ape_deta/ape_deta_r50_vlf_12ep.py @@ -0,0 +1,42 @@ +from detectron2.config import LazyCall as L +from omegaconf import OmegaConf +from ape.layers import VisionLanguageFusion +from ape.modeling.ape_deta import ( + DeformableDETRSegmVL, + DeformableDetrTransformerDecoderVL, + DeformableDetrTransformerEncoderVL, + DeformableDetrTransformerVL, +) + +from .ape_deta_r50_12ep import dataloader, lr_multiplier, model, optimizer, train + +model.model_vision.update( + _target_=DeformableDETRSegmVL, +) +model.model_vision.transformer.update( + _target_=DeformableDetrTransformerVL, +) +model.model_vision.transformer.encoder.update( + _target_=DeformableDetrTransformerEncoderVL, +) +model.model_vision.transformer.decoder.update( + _target_=DeformableDetrTransformerDecoderVL, +) + +model.model_vision.transformer.encoder.vl_layer = L(VisionLanguageFusion)( + v_dim="${....embed_dim}", + l_dim="${....embed_dim_language}", + embed_dim=2048, + num_heads=8, + dropout=0.1, + drop_path=0.0, + init_values=1.0 / 6, + stable_softmax_2d=True, + clamp_min_for_underflow=True, + clamp_max_for_overflow=True, + use_checkpoint=True, + use_attention_mask_v=True, +) + +train.output_dir = "output/" + __file__[:-3] +model.model_vision.vis_period = 1280 diff --git a/approach/ovod/APE/configs/PhraseCut_VisualGrounding/ape_deta/ape_deta_vitl_eva02_clip_vlf_lsj1024.py b/approach/ovod/APE/configs/PhraseCut_VisualGrounding/ape_deta/ape_deta_vitl_eva02_clip_vlf_lsj1024.py new file mode 100644 index 0000000000000000000000000000000000000000..5fbafaf3d0d906c8c65650fcb43941273d81043d --- /dev/null +++ b/approach/ovod/APE/configs/PhraseCut_VisualGrounding/ape_deta/ape_deta_vitl_eva02_clip_vlf_lsj1024.py @@ -0,0 +1,100 @@ +from detectron2.config import LazyCall as L +from detectron2.solver import WarmupParamScheduler +from fvcore.common.param_scheduler import MultiStepParamScheduler +from ape.data.detection_utils import get_fed_loss_cls_weights +from ape.layers import VisionLanguageFusion +from ape.modeling.ape_deta import ( + DeformableDETRSegmVL, + DeformableDetrTransformerDecoderVL, + DeformableDetrTransformerEncoderVL, + DeformableDetrTransformerVL, +) + +from ...common.data.phrasecut_instance_lsj1024 import dataloader +from ...LVIS_InstanceSegmentation.ape_deta.ape_deta_vitl_eva02_clip_lsj1024_cp_24ep import ( + model, + optimizer, + train, +) + +model.model_vision.num_classes = 256 +model.model_vision.select_box_nums_for_evaluation = 100 + +criterion = model.model_vision.criterion[0] +del criterion.use_fed_loss +del criterion.get_fed_loss_cls_weights +model.model_vision.criterion = [criterion for _ in range(1)] +for criterion, num_classes in zip( + model.model_vision.criterion, + [ + 1000, + ] + * 1, +): + criterion.num_classes = num_classes + + +model.model_vision.stuff_dataset_learn_thing = False +model.model_vision.stuff_prob_thing = -1.0 + +model.model_vision.instance_on = True +model.model_vision.semantic_on = False +model.model_vision.panoptic_on = False + +model.model_vision.neck = None + +train.max_iter = 720000 +train.eval_period = 720000 + +lr_multiplier = L(WarmupParamScheduler)( + scheduler=L(MultiStepParamScheduler)( + values=[1.0, 0.1], + milestones=[640000], + num_updates=720000, + ), + warmup_length=1000 / 720000, + warmup_method="linear", + warmup_factor=0.001, +) + +model.model_vision.dataset_prompts = ["phrase", "expression"] +model.model_vision.dataset_names = ["phrasecut", "refcoco"] +model.model_vision.dataset_metas = dataloader.train.dataset.names + ["refcoco-mixed"] + + +model.model_vision.update( + _target_=DeformableDETRSegmVL, +) +model.model_vision.transformer.update( + _target_=DeformableDetrTransformerVL, +) +model.model_vision.transformer.encoder.update( + _target_=DeformableDetrTransformerEncoderVL, +) +model.model_vision.transformer.decoder.update( + _target_=DeformableDetrTransformerDecoderVL, +) + +model.model_vision.transformer.encoder.vl_layer = L(VisionLanguageFusion)( + v_dim="${....embed_dim}", + l_dim="${....embed_dim_language}", + embed_dim=2048, + num_heads=8, + dropout=0.1, + drop_path=0.0, + init_values=1.0 / 6, + stable_softmax_2d=True, + clamp_min_for_underflow=True, + clamp_max_for_overflow=True, + use_checkpoint=True, + use_attention_mask_v=True, +) + +model.model_vision.text_feature_bank = True +model.model_vision.text_feature_reduce_before_fusion = True +model.model_vision.text_feature_batch_repeat = True +model.model_vision.expression_cumulative_gt_class = True +model.model_vision.name_prompt_fusion_type = "zero" + +train.output_dir = "output/" + __file__[:-3] +model.model_vision.vis_period = 12800 diff --git a/approach/ovod/APE/configs/PhraseCut_VisualGrounding/ape_deta/ape_deta_vitl_eva02_vlf_lsj1024.py b/approach/ovod/APE/configs/PhraseCut_VisualGrounding/ape_deta/ape_deta_vitl_eva02_vlf_lsj1024.py new file mode 100644 index 0000000000000000000000000000000000000000..e5dc1ebed2ec538e1cfd0213fcc0144a1f321225 --- /dev/null +++ b/approach/ovod/APE/configs/PhraseCut_VisualGrounding/ape_deta/ape_deta_vitl_eva02_vlf_lsj1024.py @@ -0,0 +1,100 @@ +from detectron2.config import LazyCall as L +from detectron2.solver import WarmupParamScheduler +from fvcore.common.param_scheduler import MultiStepParamScheduler +from ape.data.detection_utils import get_fed_loss_cls_weights +from ape.layers import VisionLanguageFusion +from ape.modeling.ape_deta import ( + DeformableDETRSegmVL, + DeformableDetrTransformerDecoderVL, + DeformableDetrTransformerEncoderVL, + DeformableDetrTransformerVL, +) + +from ...common.data.phrasecut_instance_lsj1024 import dataloader +from ...LVIS_InstanceSegmentation.ape_deta.ape_deta_vitl_eva02_lsj1024_cp_24ep import ( + model, + optimizer, + train, +) + +model.model_vision.num_classes = 256 +model.model_vision.select_box_nums_for_evaluation = 300 + +criterion = model.model_vision.criterion[0] +del criterion.use_fed_loss +del criterion.get_fed_loss_cls_weights +model.model_vision.criterion = [criterion for _ in range(1)] +for criterion, num_classes in zip( + model.model_vision.criterion, + [ + 1000, + ] + * 1, +): + criterion.num_classes = num_classes + + +model.model_vision.stuff_dataset_learn_thing = False +model.model_vision.stuff_prob_thing = -1.0 + +model.model_vision.instance_on = True +model.model_vision.semantic_on = False +model.model_vision.panoptic_on = False + +model.model_vision.neck = None + +train.max_iter = 720000 +train.eval_period = 720000 + +lr_multiplier = L(WarmupParamScheduler)( + scheduler=L(MultiStepParamScheduler)( + values=[1.0, 0.1], + milestones=[640000], + num_updates=720000, + ), + warmup_length=1000 / 720000, + warmup_method="linear", + warmup_factor=0.001, +) + + +model.model_vision.dataset_prompts = ["phrase", "expression"] +model.model_vision.dataset_names = ["phrasecut_train", "phrasecut_val"] +model.model_vision.dataset_metas = dataloader.train.dataset.names + [dataloader.test.dataset.names] + + +model.model_vision.update( + _target_=DeformableDETRSegmVL, +) +model.model_vision.transformer.update( + _target_=DeformableDetrTransformerVL, +) +model.model_vision.transformer.encoder.update( + _target_=DeformableDetrTransformerEncoderVL, +) +model.model_vision.transformer.decoder.update( + _target_=DeformableDetrTransformerDecoderVL, +) + +model.model_vision.transformer.encoder.vl_layer = L(VisionLanguageFusion)( + v_dim="${....embed_dim}", + l_dim="${....embed_dim_language}", + embed_dim=2048, + num_heads=8, + dropout=0.1, + drop_path=0.0, + init_values=1.0 / 6, + stable_softmax_2d=True, + clamp_min_for_underflow=True, + clamp_max_for_overflow=True, + use_checkpoint=True, +) + +model.model_vision.text_feature_bank = True +model.model_vision.text_feature_reduce_before_fusion = True +model.model_vision.text_feature_batch_repeat = True +model.model_vision.expression_cumulative_gt_class = True +model.model_vision.name_prompt_fusion_type = "zero" + +train.output_dir = "output/" + __file__[:-3] +model.model_vision.vis_period = 12800 diff --git a/approach/ovod/APE/configs/Roboflow_Detection/ape_deta/ape_deta_vitl_eva02_clip_vlf_lsj1024.py b/approach/ovod/APE/configs/Roboflow_Detection/ape_deta/ape_deta_vitl_eva02_clip_vlf_lsj1024.py new file mode 100644 index 0000000000000000000000000000000000000000..c5e6634f8760689f9b494a8ff480a17615167ff4 --- /dev/null +++ b/approach/ovod/APE/configs/Roboflow_Detection/ape_deta/ape_deta_vitl_eva02_clip_vlf_lsj1024.py @@ -0,0 +1,100 @@ +from detectron2.config import LazyCall as L +from detectron2.solver import WarmupParamScheduler +from fvcore.common.param_scheduler import MultiStepParamScheduler + +from ape.data.detection_utils import get_fed_loss_cls_weights +from ape.layers import VisionLanguageFusion +from ape.modeling.ape_deta import ( + DeformableDETRSegmVL, + DeformableDetrTransformerDecoderVL, + DeformableDetrTransformerEncoderVL, + DeformableDetrTransformerVL, +) + +from ...common.data.roboflow100_instance_lsj1024 import dataloader +from ...LVIS_InstanceSegmentation.ape_deta.ape_deta_vitl_eva02_clip_vlf_lsj1024_cp_24ep import ( + model, + optimizer, + train, +) + +model.model_vision.num_classes = 1256 +model.model_vision.select_box_nums_for_evaluation = 300 + +criterion = model.model_vision.criterion[0] +del criterion.use_fed_loss +del criterion.get_fed_loss_cls_weights +model.model_vision.criterion = [criterion for _ in range(100)] +for criterion, num_classes in zip( + model.model_vision.criterion, + [ + 1000, + ] + * 100, +): + criterion.num_classes = num_classes + +model.model_vision.instance_on = True +model.model_vision.semantic_on = False +model.model_vision.panoptic_on = False + + +train.max_iter = 720000 +train.eval_period = 720000 + +lr_multiplier = L(WarmupParamScheduler)( + scheduler=L(MultiStepParamScheduler)( + values=[1.0, 0.1], + milestones=[640000], + num_updates=720000, + ), + warmup_length=1000 / 720000, + warmup_method="linear", + warmup_factor=0.001, +) + + +model.model_vision.dataset_prompts = ["name" for _ in dataloader.tests] +model.model_vision.dataset_names = [x.dataset.names for x in dataloader.tests] +model.model_vision.dataset_metas = [x.dataset.names for x in dataloader.tests] +model.model_vision.name_prompt_fusion_text = dataloader.name_prompt_fusion_text +model.model_vision.select_box_nums_for_evaluation_list = ( + dataloader.select_box_nums_for_evaluation_list +) + + +model.model_vision.update( + _target_=DeformableDETRSegmVL, +) +model.model_vision.transformer.update( + _target_=DeformableDetrTransformerVL, +) +model.model_vision.transformer.encoder.update( + _target_=DeformableDetrTransformerEncoderVL, +) +model.model_vision.transformer.decoder.update( + _target_=DeformableDetrTransformerDecoderVL, +) + + +model.model_vision.transformer.encoder.vl_layer = L(VisionLanguageFusion)( + v_dim="${....embed_dim}", + l_dim="${....embed_dim_language}", + embed_dim=2048, + num_heads=8, + dropout=0.1, + drop_path=0.0, + init_values=1.0 / 6, + stable_softmax_2d=True, + clamp_min_for_underflow=True, + clamp_max_for_overflow=True, + use_checkpoint=True, +) + +model.model_vision.text_feature_bank = True +model.model_vision.text_feature_reduce_before_fusion = True +model.model_vision.text_feature_batch_repeat = True +model.model_vision.expression_cumulative_gt_class = True +model.model_vision.name_prompt_fusion_type = "zero" + +train.output_dir = "output/" + __file__[:-3] diff --git a/approach/ovod/APE/configs/Roboflow_Detection/ape_deta/ape_deta_vitl_eva02_lsj1024.py b/approach/ovod/APE/configs/Roboflow_Detection/ape_deta/ape_deta_vitl_eva02_lsj1024.py new file mode 100644 index 0000000000000000000000000000000000000000..460328050aea9a7e33553d5c4c8884f4650e50c9 --- /dev/null +++ b/approach/ovod/APE/configs/Roboflow_Detection/ape_deta/ape_deta_vitl_eva02_lsj1024.py @@ -0,0 +1,66 @@ +from detectron2.config import LazyCall as L +from detectron2.solver import WarmupParamScheduler +from fvcore.common.param_scheduler import MultiStepParamScheduler + +from ape.data.detection_utils import get_fed_loss_cls_weights + +from ...common.data.roboflow100_instance_lsj1024 import dataloader +from ...LVIS_InstanceSegmentation.ape_deta.ape_deta_vitl_eva02_vlf_lsj1024_cp_24ep import ( + model, + optimizer, + train, +) + +model.model_vision.num_classes = 1256 +model.model_vision.select_box_nums_for_evaluation = 300 + +criterion = model.model_vision.criterion[0] +del criterion.use_fed_loss +del criterion.get_fed_loss_cls_weights +model.model_vision.criterion = [criterion for _ in range(100)] +for criterion, num_classes in zip( + model.model_vision.criterion, + [ + 1000, + ] + * 100, +): + criterion.num_classes = num_classes + +model.model_vision.instance_on = True +model.model_vision.semantic_on = False +model.model_vision.panoptic_on = False + +model.model_vision.neck = None + +train.max_iter = 720000 +train.eval_period = 720000 + +lr_multiplier = L(WarmupParamScheduler)( + scheduler=L(MultiStepParamScheduler)( + values=[1.0, 0.1], + milestones=[640000], + num_updates=720000, + ), + warmup_length=1000 / 720000, + warmup_method="linear", + warmup_factor=0.001, +) + + +model.model_vision.dataset_prompts = ["name" for _ in dataloader.tests] +model.model_vision.dataset_names = [x.dataset.names for x in dataloader.tests] +model.model_vision.dataset_metas = [x.dataset.names for x in dataloader.tests] +model.model_vision.name_prompt_fusion_text = dataloader.name_prompt_fusion_text +model.model_vision.select_box_nums_for_evaluation_list = ( + dataloader.select_box_nums_for_evaluation_list +) + + +model.model_vision.text_feature_bank = True +model.model_vision.text_feature_reduce_before_fusion = True +model.model_vision.text_feature_batch_repeat = True +model.model_vision.expression_cumulative_gt_class = True +model.model_vision.name_prompt_fusion_type = "zero" + +train.output_dir = "output/" + __file__[:-3] diff --git a/approach/ovod/APE/configs/Roboflow_Detection/ape_deta/ape_deta_vitl_eva02_vlf_lsj1024.py b/approach/ovod/APE/configs/Roboflow_Detection/ape_deta/ape_deta_vitl_eva02_vlf_lsj1024.py new file mode 100644 index 0000000000000000000000000000000000000000..27f511fd9561bab955d96e10ab4f2d2212a69f24 --- /dev/null +++ b/approach/ovod/APE/configs/Roboflow_Detection/ape_deta/ape_deta_vitl_eva02_vlf_lsj1024.py @@ -0,0 +1,101 @@ +from detectron2.config import LazyCall as L +from detectron2.solver import WarmupParamScheduler +from fvcore.common.param_scheduler import MultiStepParamScheduler + +from ape.data.detection_utils import get_fed_loss_cls_weights +from ape.layers import VisionLanguageFusion +from ape.modeling.ape_deta import ( + DeformableDETRSegmVL, + DeformableDetrTransformerDecoderVL, + DeformableDetrTransformerEncoderVL, + DeformableDetrTransformerVL, +) + +from ...common.data.roboflow100_instance_lsj1024 import dataloader +from ...LVIS_InstanceSegmentation.ape_deta.ape_deta_vitl_eva02_vlf_lsj1024_cp_24ep import ( + model, + optimizer, + train, +) + +model.model_vision.num_classes = 1256 +model.model_vision.select_box_nums_for_evaluation = 300 + +criterion = model.model_vision.criterion[0] +del criterion.use_fed_loss +del criterion.get_fed_loss_cls_weights +model.model_vision.criterion = [criterion for _ in range(100)] +for criterion, num_classes in zip( + model.model_vision.criterion, + [ + 1000, + ] + * 100, +): + criterion.num_classes = num_classes + +model.model_vision.instance_on = True +model.model_vision.semantic_on = False +model.model_vision.panoptic_on = False + +model.model_vision.neck = None + +train.max_iter = 720000 +train.eval_period = 720000 + +lr_multiplier = L(WarmupParamScheduler)( + scheduler=L(MultiStepParamScheduler)( + values=[1.0, 0.1], + milestones=[640000], + num_updates=720000, + ), + warmup_length=1000 / 720000, + warmup_method="linear", + warmup_factor=0.001, +) + + +model.model_vision.dataset_prompts = ["name" for _ in dataloader.tests] +model.model_vision.dataset_names = [x.dataset.names for x in dataloader.tests] +model.model_vision.dataset_metas = [x.dataset.names for x in dataloader.tests] +model.model_vision.name_prompt_fusion_text = dataloader.name_prompt_fusion_text +model.model_vision.select_box_nums_for_evaluation_list = ( + dataloader.select_box_nums_for_evaluation_list +) + + +model.model_vision.update( + _target_=DeformableDETRSegmVL, +) +model.model_vision.transformer.update( + _target_=DeformableDetrTransformerVL, +) +model.model_vision.transformer.encoder.update( + _target_=DeformableDetrTransformerEncoderVL, +) +model.model_vision.transformer.decoder.update( + _target_=DeformableDetrTransformerDecoderVL, +) + + +model.model_vision.transformer.encoder.vl_layer = L(VisionLanguageFusion)( + v_dim="${....embed_dim}", + l_dim="${....embed_dim_language}", + embed_dim=2048, + num_heads=8, + dropout=0.1, + drop_path=0.0, + init_values=1.0 / 6, + stable_softmax_2d=True, + clamp_min_for_underflow=True, + clamp_max_for_overflow=True, + use_checkpoint=True, +) + +model.model_vision.text_feature_bank = True +model.model_vision.text_feature_reduce_before_fusion = True +model.model_vision.text_feature_batch_repeat = True +model.model_vision.expression_cumulative_gt_class = True +model.model_vision.name_prompt_fusion_type = "zero" + +train.output_dir = "output/" + __file__[:-3] diff --git a/approach/ovod/APE/configs/common/backbone/vite_eva02_clip_1024.py b/approach/ovod/APE/configs/common/backbone/vite_eva02_clip_1024.py new file mode 100644 index 0000000000000000000000000000000000000000..95a7a4d3736d61439d9b1380c389aaaa2f1fcdf8 --- /dev/null +++ b/approach/ovod/APE/configs/common/backbone/vite_eva02_clip_1024.py @@ -0,0 +1,52 @@ +from functools import partial + +import torch.nn as nn + +from detectron2.config import LazyCall as L +from detectron2.modeling.backbone.fpn import LastLevelMaxPool +from ape.modeling.backbone.vit_eva_clip import SimpleFeaturePyramid, ViT + +backbone = L(SimpleFeaturePyramid)( + net=L(ViT)( # Single-scale ViT backbone + img_size=1024, + patch_size=16, + embed_dim=1792, + depth=64, + num_heads=16, + drop_path_rate=0.4, + window_size=32, + mlp_ratio=8.571428571428571, + qkv_bias=True, + norm_layer=partial(nn.LayerNorm, eps=1e-6), + window_block_indexes=list(range(0, 3)) + + list(range(4, 7)) + + list(range(8, 11)) + + list(range(12, 15)) + + list(range(16, 19)) + + list(range(20, 23)) + + list(range(24, 27)) + + list(range(28, 31)) + + list(range(32, 35)) + + list(range(36, 39)) + + list(range(40, 43)) + + list(range(44, 47)) + + list(range(48, 51)) + + list(range(52, 55)) + + list(range(56, 59)) + + list(range(60, 63)), + residual_block_indexes=[], + use_rel_pos=True, + out_feature="last_feat", + use_act_checkpoint=True, + xattn=True, + pretrain_img_size=224, + pretrain_use_cls_token=True, + postnorm=True, + ), + in_feature="${.net.out_feature}", + out_channels=256, + scale_factors=(4.0, 2.0, 1.0, 0.5), + top_block=L(LastLevelMaxPool)(), + norm="LN", + square_pad=1024, +) diff --git a/approach/ovod/APE/configs/common/backbone/vite_eva02_clip_1536.py b/approach/ovod/APE/configs/common/backbone/vite_eva02_clip_1536.py new file mode 100644 index 0000000000000000000000000000000000000000..6389d5ed96ea5c26938f88a8bd3afaddb2f43314 --- /dev/null +++ b/approach/ovod/APE/configs/common/backbone/vite_eva02_clip_1536.py @@ -0,0 +1,52 @@ +from functools import partial + +import torch.nn as nn + +from detectron2.config import LazyCall as L +from detectron2.modeling.backbone.fpn import LastLevelMaxPool +from ape.modeling.backbone.vit_eva_clip import SimpleFeaturePyramid, ViT + +backbone = L(SimpleFeaturePyramid)( + net=L(ViT)( # Single-scale ViT backbone + img_size=1536, + patch_size=16, + embed_dim=1792, + depth=64, + num_heads=16, + drop_path_rate=0.4, + window_size=32, + mlp_ratio=8.571428571428571, + qkv_bias=True, + norm_layer=partial(nn.LayerNorm, eps=1e-6), + window_block_indexes=list(range(0, 3)) + + list(range(4, 7)) + + list(range(8, 11)) + + list(range(12, 15)) + + list(range(16, 19)) + + list(range(20, 23)) + + list(range(24, 27)) + + list(range(28, 31)) + + list(range(32, 35)) + + list(range(36, 39)) + + list(range(40, 43)) + + list(range(44, 47)) + + list(range(48, 51)) + + list(range(52, 55)) + + list(range(56, 59)) + + list(range(60, 63)), + residual_block_indexes=[], + use_rel_pos=True, + out_feature="last_feat", + use_act_checkpoint=True, + xattn=True, + pretrain_img_size=224, + pretrain_use_cls_token=True, + postnorm=True, + ), + in_feature="${.net.out_feature}", + out_channels=256, + scale_factors=(4.0, 2.0, 1.0, 0.5), + top_block=L(LastLevelMaxPool)(), + norm="LN", + square_pad=1536, +) diff --git a/approach/ovod/APE/configs/common/backbone/vitg_eva01.py b/approach/ovod/APE/configs/common/backbone/vitg_eva01.py new file mode 100644 index 0000000000000000000000000000000000000000..df8b5b11d13fa054afbd5b9ac10e41aa8bd52e02 --- /dev/null +++ b/approach/ovod/APE/configs/common/backbone/vitg_eva01.py @@ -0,0 +1,45 @@ +from functools import partial + +import torch.nn as nn + +from detectron2.config import LazyCall as L +from detectron2.modeling.backbone.fpn import LastLevelMaxPool +from ape.modeling.backbone.vit_eva import SimpleFeaturePyramid, ViT + +backbone = L(SimpleFeaturePyramid)( + net=L(ViT)( # Single-scale ViT backbone + img_size=1024, + patch_size=16, + embed_dim=1408, + depth=40, + num_heads=16, + drop_path_rate=0.6, + window_size=16, + mlp_ratio=6144 / 1408, + qkv_bias=True, + norm_layer=partial(nn.LayerNorm, eps=1e-6), + window_block_indexes=list(range(0, 3)) + + list(range(4, 7)) + + list(range(8, 11)) + + list(range(12, 15)) + + list(range(16, 19)) + + list(range(20, 23)) + + list(range(24, 27)) + + list(range(28, 31)) + + list(range(32, 35)) + + list(range(36, 39)), + residual_block_indexes=[], + use_rel_pos=True, + out_feature="last_feat", + use_act_checkpoint=True, + beit_like_qkv_bias=True, + beit_like_gamma=False, + freeze_patch_embed=True, + ), + in_feature="${.net.out_feature}", + out_channels=256, + scale_factors=(4.0, 2.0, 1.0, 0.5), + top_block=L(LastLevelMaxPool)(), + norm="LN", + square_pad=1024, +) diff --git a/approach/ovod/APE/configs/common/backbone/vitg_eva01_1536.py b/approach/ovod/APE/configs/common/backbone/vitg_eva01_1536.py new file mode 100644 index 0000000000000000000000000000000000000000..a810d52aea2e47525f8b7f409f53a1c2645086b4 --- /dev/null +++ b/approach/ovod/APE/configs/common/backbone/vitg_eva01_1536.py @@ -0,0 +1,45 @@ +from functools import partial + +import torch.nn as nn + +from detectron2.config import LazyCall as L +from detectron2.modeling.backbone.fpn import LastLevelMaxPool +from ape.modeling.backbone.vit_eva import SimpleFeaturePyramid, ViT + +backbone = L(SimpleFeaturePyramid)( + net=L(ViT)( # Single-scale ViT backbone + img_size=1536, + patch_size=16, + embed_dim=1408, + depth=40, + num_heads=16, + drop_path_rate=0.6, + window_size=32, + mlp_ratio=6144 / 1408, + qkv_bias=True, + norm_layer=partial(nn.LayerNorm, eps=1e-6), + window_block_indexes=list(range(0, 3)) + + list(range(4, 7)) + + list(range(8, 11)) + + list(range(12, 15)) + + list(range(16, 19)) + + list(range(20, 23)) + + list(range(24, 27)) + + list(range(28, 31)) + + list(range(32, 35)) + + list(range(36, 39)), + residual_block_indexes=[], + use_rel_pos=True, + out_feature="last_feat", + use_act_checkpoint=True, + beit_like_qkv_bias=True, + beit_like_gamma=False, + freeze_patch_embed=True, + ), + in_feature="${.net.out_feature}", + out_channels=256, + scale_factors=(4.0, 2.0, 1.0, 0.5), + top_block=L(LastLevelMaxPool)(), + norm="LN", + square_pad=1536, +) diff --git a/approach/ovod/APE/configs/common/backbone/vitg_eva01_clip_1024.py b/approach/ovod/APE/configs/common/backbone/vitg_eva01_clip_1024.py new file mode 100644 index 0000000000000000000000000000000000000000..808de9d122c5722903efb8b2d27e070d943f0e17 --- /dev/null +++ b/approach/ovod/APE/configs/common/backbone/vitg_eva01_clip_1024.py @@ -0,0 +1,45 @@ +from functools import partial + +import torch.nn as nn + +from detectron2.config import LazyCall as L +from detectron2.modeling.backbone.fpn import LastLevelMaxPool +from ape.modeling.backbone.vit_eva_clip import SimpleFeaturePyramid, ViT + +backbone = L(SimpleFeaturePyramid)( + net=L(ViT)( # Single-scale ViT backbone + img_size=1024, + patch_size=16, + embed_dim=1408, + depth=40, + num_heads=16, + drop_path_rate=0.6, + window_size=32, + mlp_ratio=6144 / 1408, + qkv_bias=True, + norm_layer=partial(nn.LayerNorm, eps=1e-6), + window_block_indexes=list(range(0, 3)) + + list(range(4, 7)) + + list(range(8, 11)) + + list(range(12, 15)) + + list(range(16, 19)) + + list(range(20, 23)) + + list(range(24, 27)) + + list(range(28, 31)) + + list(range(32, 35)) + + list(range(36, 39)), + residual_block_indexes=[], + use_rel_pos=True, + out_feature="last_feat", + use_act_checkpoint=True, + xattn=True, + pretrain_img_size=224, + pretrain_use_cls_token=True, + ), + in_feature="${.net.out_feature}", + out_channels=256, + scale_factors=(4.0, 2.0, 1.0, 0.5), + top_block=L(LastLevelMaxPool)(), + norm="LN", + square_pad=1024, +) diff --git a/approach/ovod/APE/configs/common/backbone/vitg_eva01_clip_1536.py b/approach/ovod/APE/configs/common/backbone/vitg_eva01_clip_1536.py new file mode 100644 index 0000000000000000000000000000000000000000..c734ce1016fb0eb9bce3df387aef1cc1f7808a30 --- /dev/null +++ b/approach/ovod/APE/configs/common/backbone/vitg_eva01_clip_1536.py @@ -0,0 +1,45 @@ +from functools import partial + +import torch.nn as nn + +from detectron2.config import LazyCall as L +from detectron2.modeling.backbone.fpn import LastLevelMaxPool +from ape.modeling.backbone.vit_eva_clip import SimpleFeaturePyramid, ViT + +backbone = L(SimpleFeaturePyramid)( + net=L(ViT)( # Single-scale ViT backbone + img_size=1536, + patch_size=16, + embed_dim=1408, + depth=40, + num_heads=16, + drop_path_rate=0.6, + window_size=32, + mlp_ratio=6144 / 1408, + qkv_bias=True, + norm_layer=partial(nn.LayerNorm, eps=1e-6), + window_block_indexes=list(range(0, 3)) + + list(range(4, 7)) + + list(range(8, 11)) + + list(range(12, 15)) + + list(range(16, 19)) + + list(range(20, 23)) + + list(range(24, 27)) + + list(range(28, 31)) + + list(range(32, 35)) + + list(range(36, 39)), + residual_block_indexes=[], + use_rel_pos=True, + out_feature="last_feat", + use_act_checkpoint=True, + xattn=True, + pretrain_img_size=224, + pretrain_use_cls_token=True, + ), + in_feature="${.net.out_feature}", + out_channels=256, + scale_factors=(4.0, 2.0, 1.0, 0.5), + top_block=L(LastLevelMaxPool)(), + norm="LN", + square_pad=1536, +) diff --git a/approach/ovod/APE/configs/common/backbone/vitl_eva02.py b/approach/ovod/APE/configs/common/backbone/vitl_eva02.py new file mode 100644 index 0000000000000000000000000000000000000000..baca81e4d5464e819d03e6760f5fa20db85ef9cc --- /dev/null +++ b/approach/ovod/APE/configs/common/backbone/vitl_eva02.py @@ -0,0 +1,37 @@ +from functools import partial + +import torch.nn as nn + +from detectron2.config import LazyCall as L +from detectron2.modeling.backbone.fpn import LastLevelMaxPool +from ape.modeling.backbone.vit_eva02 import SimpleFeaturePyramid, ViT + +backbone = L(SimpleFeaturePyramid)( + net=L(ViT)( # Single-scale ViT backbone + img_size=1024, + patch_size=16, + embed_dim=1024, + depth=24, + num_heads=16, + drop_path_rate=0.4, + window_size=16, + mlp_ratio=4 * 2 / 3, + qkv_bias=True, + norm_layer=partial(nn.LayerNorm, eps=1e-6), + window_block_indexes=list(range(0, 5)) + + list(range(6, 11)) + + list(range(12, 17)) + + list(range(18, 23)), + residual_block_indexes=[], + use_rel_pos=True, + out_feature="last_feat", + use_act_checkpoint=True, + xattn=True, + ), + in_feature="${.net.out_feature}", + out_channels=256, + scale_factors=(4.0, 2.0, 1.0, 0.5), + top_block=L(LastLevelMaxPool)(), + norm="LN", + square_pad=1024, +) diff --git a/approach/ovod/APE/configs/common/backbone/vitl_eva02_1536.py b/approach/ovod/APE/configs/common/backbone/vitl_eva02_1536.py new file mode 100644 index 0000000000000000000000000000000000000000..e488a3b5c83b7fd49ae30b6c498ca6ce55f11783 --- /dev/null +++ b/approach/ovod/APE/configs/common/backbone/vitl_eva02_1536.py @@ -0,0 +1,41 @@ +from functools import partial + +import torch.nn as nn + +from detectron2.config import LazyCall as L +from detectron2.modeling.backbone.fpn import LastLevelMaxPool +from ape.modeling.backbone.vit_eva02 import SimpleFeaturePyramid, ViT + +backbone = L(SimpleFeaturePyramid)( + net=L(ViT)( # Single-scale ViT backbone + img_size=1536, + patch_size=16, + embed_dim=1024, + depth=24, + num_heads=16, + drop_path_rate=0.4, + window_size=32, + mlp_ratio=4 * 2 / 3, + qkv_bias=True, + norm_layer=partial(nn.LayerNorm, eps=1e-6), + window_block_indexes=list(range(0, 2)) + + list(range(3, 5)) + + list(range(6, 8)) + + list(range(9, 11)) + + list(range(12, 14)) + + list(range(15, 17)) + + list(range(18, 20)) + + list(range(21, 23)), + residual_block_indexes=[], + use_rel_pos=True, + out_feature="last_feat", + use_act_checkpoint=True, + xattn=True, + ), + in_feature="${.net.out_feature}", + out_channels=256, + scale_factors=(4.0, 2.0, 1.0, 0.5), + top_block=L(LastLevelMaxPool)(), + norm="LN", + square_pad=1536, +) diff --git a/approach/ovod/APE/configs/common/backbone/vitl_eva02_clip.py b/approach/ovod/APE/configs/common/backbone/vitl_eva02_clip.py new file mode 100644 index 0000000000000000000000000000000000000000..bdf353704ec2a80d6654dc590912980934a08cf0 --- /dev/null +++ b/approach/ovod/APE/configs/common/backbone/vitl_eva02_clip.py @@ -0,0 +1,48 @@ +from functools import partial + +import torch.nn as nn + +from detectron2.config import LazyCall as L +from detectron2.modeling.backbone.fpn import LastLevelMaxPool +from ape.modeling.backbone.vit_eva_clip import SimpleFeaturePyramid, ViT + +backbone = L(SimpleFeaturePyramid)( + net=L(ViT)( # Single-scale ViT backbone + img_size=1024, + patch_size=16, + embed_dim=1024, + depth=24, + num_heads=16, + drop_path_rate=0.4, + window_size=32, + mlp_ratio=4 * 2 / 3, + qkv_bias=True, + norm_layer=partial(nn.LayerNorm, eps=1e-6), + window_block_indexes=list(range(0, 2)) + + list(range(3, 5)) + + list(range(6, 8)) + + list(range(9, 11)) + + list(range(12, 14)) + + list(range(15, 17)) + + list(range(18, 20)) + + list(range(21, 23)), + residual_block_indexes=[], + use_rel_pos=True, + out_feature="last_feat", + use_act_checkpoint=True, + xattn=True, + rope=True, + pt_hw_seq_len=16, + intp_freq=True, + naiveswiglu=True, + subln=True, + pretrain_img_size=336, + pretrain_use_cls_token=True, + ), + in_feature="${.net.out_feature}", + out_channels=256, + scale_factors=(4.0, 2.0, 1.0, 0.5), + top_block=L(LastLevelMaxPool)(), + norm="LN", + square_pad=1024, +) diff --git a/approach/ovod/APE/configs/common/backbone/vitl_eva02_clip_1536.py b/approach/ovod/APE/configs/common/backbone/vitl_eva02_clip_1536.py new file mode 100644 index 0000000000000000000000000000000000000000..557b1862b9d7f9e6eb90704594b21d572a2267a8 --- /dev/null +++ b/approach/ovod/APE/configs/common/backbone/vitl_eva02_clip_1536.py @@ -0,0 +1,48 @@ +from functools import partial + +import torch.nn as nn + +from detectron2.config import LazyCall as L +from detectron2.modeling.backbone.fpn import LastLevelMaxPool +from ape.modeling.backbone.vit_eva_clip import SimpleFeaturePyramid, ViT + +backbone = L(SimpleFeaturePyramid)( + net=L(ViT)( # Single-scale ViT backbone + img_size=1536, + patch_size=16, + embed_dim=1024, + depth=24, + num_heads=16, + drop_path_rate=0.4, + window_size=32, + mlp_ratio=4 * 2 / 3, + qkv_bias=True, + norm_layer=partial(nn.LayerNorm, eps=1e-6), + window_block_indexes=list(range(0, 2)) + + list(range(3, 5)) + + list(range(6, 8)) + + list(range(9, 11)) + + list(range(12, 14)) + + list(range(15, 17)) + + list(range(18, 20)) + + list(range(21, 23)), + residual_block_indexes=[], + use_rel_pos=True, + out_feature="last_feat", + use_act_checkpoint=True, + xattn=True, + rope=True, + pt_hw_seq_len=16, + intp_freq=True, + naiveswiglu=True, + subln=True, + pretrain_img_size=336, + pretrain_use_cls_token=True, + ), + in_feature="${.net.out_feature}", + out_channels=256, + scale_factors=(4.0, 2.0, 1.0, 0.5), + top_block=L(LastLevelMaxPool)(), + norm="LN", + square_pad=1536, +) diff --git a/approach/ovod/APE/configs/common/data/ade20kfull_semantic_lsj1024.py b/approach/ovod/APE/configs/common/data/ade20kfull_semantic_lsj1024.py new file mode 100644 index 0000000000000000000000000000000000000000..e698a024d16d0ca27e07c8a5bfd3a258c67d70ed --- /dev/null +++ b/approach/ovod/APE/configs/common/data/ade20kfull_semantic_lsj1024.py @@ -0,0 +1,60 @@ +import detectron2.data.transforms as T +from detectron2.config import LazyCall as L +from detectron2.data import ( + DatasetMapper, + MetadataCatalog, + build_detection_test_loader, + build_detection_train_loader, + get_detection_dataset_dicts, +) +from detectron2.evaluation import SemSegEvaluator +from omegaconf import OmegaConf +from ape.data import DatasetMapper_detr_semantic + +image_size = 1024 + +dataloader = OmegaConf.create() + +dataloader.train = L(build_detection_train_loader)( + dataset=L(get_detection_dataset_dicts)(names="ade20k_full_sem_seg_train"), + mapper=L(DatasetMapper_detr_semantic)( + is_train=True, + augmentations=[ + L(T.RandomFlip)(horizontal=True), # flip first + L(T.ResizeScale)( + min_scale=0.1, max_scale=1.0, target_height=image_size, target_width=image_size + ), + L(T.FixedSizeCrop)(crop_size=(image_size, image_size), pad=False), + ], + augmentations_with_crop=[ + L(T.RandomFlip)(horizontal=True), # flip first + L(T.ResizeScale)( + min_scale=0.1, max_scale=2.0, target_height=image_size, target_width=image_size + ), + L(T.FixedSizeCrop)(crop_size=(image_size, image_size), pad=False), + ], + image_format="RGB", + use_instance_mask=True, + recompute_boxes=True, + ignore_label=MetadataCatalog.get("ade20k_full_sem_seg_train").ignore_label, + stuff_classes_decomposition=True, + ), + total_batch_size=16, + num_workers=4, +) + +dataloader.test = L(build_detection_test_loader)( + dataset=L(get_detection_dataset_dicts)(names="ade20k_full_sem_seg_val", filter_empty=False), + mapper=L(DatasetMapper)( + is_train=False, + augmentations=[ + L(T.ResizeShortestEdge)(short_edge_length=image_size, max_size=image_size), + ], + image_format="${...train.mapper.image_format}", + ), + num_workers=4, +) + +dataloader.evaluator = L(SemSegEvaluator)( + dataset_name="${..test.dataset.names}", +) diff --git a/approach/ovod/APE/configs/common/data/bdd10k_panoptic_lsj1024.py b/approach/ovod/APE/configs/common/data/bdd10k_panoptic_lsj1024.py new file mode 100644 index 0000000000000000000000000000000000000000..7e63304db381e69abf53dc86978c8745b19d1a84 --- /dev/null +++ b/approach/ovod/APE/configs/common/data/bdd10k_panoptic_lsj1024.py @@ -0,0 +1,65 @@ +import detectron2.data.transforms as T +from detectron2.config import LazyCall as L +from detectron2.data import ( + DatasetMapper, + MetadataCatalog, + build_detection_test_loader, + build_detection_train_loader, + get_detection_dataset_dicts, +) +from detectron2.evaluation import COCOPanopticEvaluator +from omegaconf import OmegaConf +from ape.data import DatasetMapper_detr_panoptic + +image_size = 1024 + +dataloader = OmegaConf.create() + +dataloader.train = L(build_detection_train_loader)( + dataset=L(get_detection_dataset_dicts)(names="bdd10k_40_panoptic_val"), + mapper=L(DatasetMapper_detr_panoptic)( + is_train=True, + augmentations=[ + L(T.RandomFlip)(horizontal=True), # flip first + L(T.ResizeScale)( + min_scale=0.1, max_scale=1.0, target_height=image_size, target_width=image_size + ), + L(T.FixedSizeCrop)(crop_size=(image_size, image_size), pad=False), + ], + augmentations_with_crop=[ + L(T.RandomFlip)(horizontal=True), # flip first + L(T.ResizeScale)( + min_scale=0.1, max_scale=2.0, target_height=image_size, target_width=image_size + ), + L(T.FixedSizeCrop)(crop_size=(image_size, image_size), pad=False), + ], + image_format="RGB", + use_instance_mask=True, + recompute_boxes=True, + instance_mask_format="bitmask", + ignore_label=MetadataCatalog.get("bdd10k_40_panoptic_val").ignore_label, + stuff_classes_offset=0, + stuff_classes_decomposition=True, + dataset_names=["bdd10k_40_panoptic_val"], + ), + total_batch_size=16, + num_workers=4, +) + +dataloader.test = L(build_detection_test_loader)( + dataset=L(get_detection_dataset_dicts)(names="bdd10k_40_panoptic_val", filter_empty=False), + mapper=L(DatasetMapper)( + is_train=False, + augmentations=[ + L(T.ResizeShortestEdge)(short_edge_length=image_size, max_size=image_size), + ], + image_format="${...train.mapper.image_format}", + ), + num_workers=4, +) + +dataloader.evaluator = [ + L(COCOPanopticEvaluator)( + dataset_name="${...test.dataset.names}", + ), +] diff --git a/approach/ovod/APE/configs/common/data/cityscapes_panoptic_lsj1024.py b/approach/ovod/APE/configs/common/data/cityscapes_panoptic_lsj1024.py new file mode 100644 index 0000000000000000000000000000000000000000..5b23aa877e0b6fcd33462d28c908b16d894ef338 --- /dev/null +++ b/approach/ovod/APE/configs/common/data/cityscapes_panoptic_lsj1024.py @@ -0,0 +1,77 @@ +import detectron2.data.transforms as T +from detectron2.config import LazyCall as L +from detectron2.data import ( + DatasetMapper, + MetadataCatalog, + build_detection_test_loader, + build_detection_train_loader, + get_detection_dataset_dicts, +) +from detectron2.evaluation import ( + CityscapesInstanceEvaluator, + CityscapesSemSegEvaluator, + COCOPanopticEvaluator, +) +from omegaconf import OmegaConf +from ape.data import DatasetMapper_detr_panoptic + +image_size = 1024 + +dataloader = OmegaConf.create() + +dataloader.train = L(build_detection_train_loader)( + dataset=L(get_detection_dataset_dicts)(names="cityscapes_fine_panoptic_train"), + mapper=L(DatasetMapper_detr_panoptic)( + is_train=True, + augmentations=[ + L(T.RandomFlip)(horizontal=True), # flip first + L(T.ResizeScale)( + min_scale=0.1, max_scale=1.0, target_height=image_size, target_width=image_size + ), + L(T.FixedSizeCrop)(crop_size=(image_size, image_size), pad=False), + ], + augmentations_with_crop=[ + L(T.RandomFlip)(horizontal=True), # flip first + L(T.ResizeScale)( + min_scale=0.1, max_scale=2.0, target_height=image_size, target_width=image_size + ), + L(T.FixedSizeCrop)(crop_size=(image_size, image_size), pad=False), + ], + image_format="RGB", + use_instance_mask=True, + recompute_boxes=True, + instance_mask_format="bitmask", + ignore_label=MetadataCatalog.get("cityscapes_fine_panoptic_train").ignore_label, + stuff_classes_offset=0, + stuff_classes_decomposition=True, + dataset_names=["cityscapes_fine_panoptic_train"], + ), + total_batch_size=16, + num_workers=4, +) + +dataloader.test = L(build_detection_test_loader)( + dataset=L(get_detection_dataset_dicts)( + names="cityscapes_fine_panoptic_val", filter_empty=False + ), + mapper=L(DatasetMapper)( + is_train=False, + augmentations=[ + L(T.ResizeShortestEdge)(short_edge_length=image_size, max_size=image_size), + ], + image_format="${...train.mapper.image_format}", + ), + num_workers=4, +) + +dataloader.evaluator = [ + L(CityscapesInstanceEvaluator)( + dataset_name="${...test.dataset.names}", + ), + L(CityscapesSemSegEvaluator)( + dataset_name="${...test.dataset.names}", + ), + L(COCOPanopticEvaluator)( + dataset_name="${...test.dataset.names}", + ), +] diff --git a/approach/ovod/APE/configs/common/data/cityscapes_semantic_lsj1024.py b/approach/ovod/APE/configs/common/data/cityscapes_semantic_lsj1024.py new file mode 100644 index 0000000000000000000000000000000000000000..f4b61a32628ec9b89f1e871f45042e3d86141b7f --- /dev/null +++ b/approach/ovod/APE/configs/common/data/cityscapes_semantic_lsj1024.py @@ -0,0 +1,65 @@ +import detectron2.data.transforms as T +from detectron2.config import LazyCall as L +from detectron2.data import ( + DatasetMapper, + MetadataCatalog, + build_detection_test_loader, + build_detection_train_loader, + get_detection_dataset_dicts, +) +from detectron2.evaluation import CityscapesSemSegEvaluator +from omegaconf import OmegaConf +from ape.data import DatasetMapper_detr_panoptic + +image_size = 1024 + +dataloader = OmegaConf.create() + +dataloader.train = L(build_detection_train_loader)( + dataset=L(get_detection_dataset_dicts)(names="cityscapes_fine_sem_seg_train"), + mapper=L(DatasetMapper_detr_panoptic)( + is_train=True, + augmentations=[ + L(T.RandomFlip)(horizontal=True), # flip first + L(T.ResizeScale)( + min_scale=0.1, max_scale=1.0, target_height=image_size, target_width=image_size + ), + L(T.FixedSizeCrop)(crop_size=(image_size, image_size), pad=False), + ], + augmentations_with_crop=[ + L(T.RandomFlip)(horizontal=True), # flip first + L(T.ResizeScale)( + min_scale=0.1, max_scale=2.0, target_height=image_size, target_width=image_size + ), + L(T.FixedSizeCrop)(crop_size=(image_size, image_size), pad=False), + ], + image_format="RGB", + use_instance_mask=True, + recompute_boxes=True, + instance_mask_format="bitmask", + ignore_label=MetadataCatalog.get("cityscapes_fine_sem_seg_train").ignore_label, + stuff_classes_offset=0, + stuff_classes_decomposition=True, + dataset_names=["cityscapes_fine_sem_train"], + ), + total_batch_size=16, + num_workers=4, +) + +dataloader.test = L(build_detection_test_loader)( + dataset=L(get_detection_dataset_dicts)(names="cityscapes_fine_sem_seg_val", filter_empty=False), + mapper=L(DatasetMapper)( + is_train=False, + augmentations=[ + L(T.ResizeShortestEdge)(short_edge_length=image_size, max_size=image_size), + ], + image_format="${...train.mapper.image_format}", + ), + num_workers=4, +) + +dataloader.evaluator = [ + L(CityscapesSemSegEvaluator)( + dataset_name="${...test.dataset.names}", + ), +] diff --git a/approach/ovod/APE/configs/common/data/coco_instance.py b/approach/ovod/APE/configs/common/data/coco_instance.py new file mode 100644 index 0000000000000000000000000000000000000000..753b0646981fe307ee499a21698bbb23f69494aa --- /dev/null +++ b/approach/ovod/APE/configs/common/data/coco_instance.py @@ -0,0 +1,66 @@ +import detectron2.data.transforms as T +from detectron2.config import LazyCall as L +from detectron2.data import ( + DatasetMapper, + build_detection_test_loader, + build_detection_train_loader, + get_detection_dataset_dicts, +) +from detectron2.evaluation import COCOEvaluator +from omegaconf import OmegaConf +from ape.data import DatasetMapper_detr_instance + +dataloader = OmegaConf.create() + +dataloader.train = L(build_detection_train_loader)( + dataset=L(get_detection_dataset_dicts)(names="coco_2017_train"), + mapper=L(DatasetMapper_detr_instance)( + is_train=True, + augmentations=[ + L(T.RandomFlip)(), + L(T.ResizeShortestEdge)( + short_edge_length=(480, 512, 544, 576, 608, 640, 672, 704, 736, 768, 800), + max_size=1333, + sample_style="choice", + ), + ], + augmentations_with_crop=[ + L(T.RandomFlip)(), + L(T.ResizeShortestEdge)( + short_edge_length=(400, 500, 600), + sample_style="choice", + ), + L(T.RandomCrop)( + crop_type="absolute_range", + crop_size=(384, 600), + ), + L(T.ResizeShortestEdge)( + short_edge_length=(480, 512, 544, 576, 608, 640, 672, 704, 736, 768, 800), + max_size=1333, + sample_style="choice", + ), + ], + image_format="RGB", + use_instance_mask=True, + recompute_boxes=True, + dataset_names=["coco_2017_train"], + ), + total_batch_size=16, + num_workers=4, +) + +dataloader.test = L(build_detection_test_loader)( + dataset=L(get_detection_dataset_dicts)(names="coco_2017_val", filter_empty=False), + mapper=L(DatasetMapper)( + is_train=False, + augmentations=[ + L(T.ResizeShortestEdge)(short_edge_length=800, max_size=1333), + ], + image_format="${...train.mapper.image_format}", + ), + num_workers=4, +) + +dataloader.evaluator = L(COCOEvaluator)( + dataset_name="${..test.dataset.names}", +) diff --git a/approach/ovod/APE/configs/common/data/coco_instance_lsj1024_cp.py b/approach/ovod/APE/configs/common/data/coco_instance_lsj1024_cp.py new file mode 100644 index 0000000000000000000000000000000000000000..7da0f6697dd09077b7fb64200d6590bc5e27eacb --- /dev/null +++ b/approach/ovod/APE/configs/common/data/coco_instance_lsj1024_cp.py @@ -0,0 +1,58 @@ +import detectron2.data.transforms as T +from detectron2.config import LazyCall as L +from detectron2.data import DatasetMapper, build_detection_test_loader, get_detection_dataset_dicts +from detectron2.evaluation import COCOEvaluator +from omegaconf import OmegaConf +from ape.data import ( + DatasetMapper_copypaste, + build_detection_train_loader_copypaste, + get_detection_dataset_dicts_copypaste, +) + +image_size = 1024 + +dataloader = OmegaConf.create() + +dataloader.train = L(build_detection_train_loader_copypaste)( + dataset=L(get_detection_dataset_dicts_copypaste)(names=["coco_2017_train"], copypastes=[True]), + dataset_bg=L(get_detection_dataset_dicts)(names=["coco_2017_train"]), + mapper=L(DatasetMapper_copypaste)( + is_train=True, + augmentations=[ + L(T.RandomFlip)(horizontal=True), # flip first + L(T.ResizeScale)( + min_scale=0.1, max_scale=2.0, target_height=image_size, target_width=image_size + ), + L(T.FixedSizeCrop)(crop_size=(image_size, image_size), pad=False), + ], + augmentations_d2=[], + augmentations_aa=[], + augmentations_lsj=[], + augmentations_type=[], + image_format="RGB", + use_instance_mask=True, + recompute_boxes=True, + output_dir=None, + vis_period=12800, + dataset_names=["coco_2017_train"], + ), + total_batch_size=16, + num_workers=4, +) + +dataloader.test = L(build_detection_test_loader)( + dataset=L(get_detection_dataset_dicts)(names="coco_2017_val", filter_empty=False), + mapper=L(DatasetMapper)( + is_train=False, + augmentations=[ + L(T.ResizeShortestEdge)(short_edge_length=image_size, max_size=image_size), + ], + image_format="${...train.mapper.image_format}", + ), + num_workers=4, +) + +dataloader.evaluator = L(COCOEvaluator)( + dataset_name="${..test.dataset.names}", + max_dets_per_image=100, +) diff --git a/approach/ovod/APE/configs/common/data/coco_instance_lsj1536_cp.py b/approach/ovod/APE/configs/common/data/coco_instance_lsj1536_cp.py new file mode 100644 index 0000000000000000000000000000000000000000..b021709d00facdeab5f2fa3fc653fc1cd96c7617 --- /dev/null +++ b/approach/ovod/APE/configs/common/data/coco_instance_lsj1536_cp.py @@ -0,0 +1,58 @@ +import detectron2.data.transforms as T +from detectron2.config import LazyCall as L +from detectron2.data import DatasetMapper, build_detection_test_loader, get_detection_dataset_dicts +from detectron2.evaluation import COCOEvaluator +from omegaconf import OmegaConf +from ape.data import ( + DatasetMapper_copypaste, + build_detection_train_loader_copypaste, + get_detection_dataset_dicts_copypaste, +) + +image_size = 1536 + +dataloader = OmegaConf.create() + +dataloader.train = L(build_detection_train_loader_copypaste)( + dataset=L(get_detection_dataset_dicts_copypaste)(names=["coco_2017_train"], copypastes=[True]), + dataset_bg=L(get_detection_dataset_dicts)(names=["coco_2017_train"]), + mapper=L(DatasetMapper_copypaste)( + is_train=True, + augmentations=[ + L(T.RandomFlip)(horizontal=True), # flip first + L(T.ResizeScale)( + min_scale=0.1, max_scale=2.0, target_height=image_size, target_width=image_size + ), + L(T.FixedSizeCrop)(crop_size=(image_size, image_size), pad=False), + ], + augmentations_d2=[], + augmentations_aa=[], + augmentations_lsj=[], + augmentations_type=[], + image_format="RGB", + use_instance_mask=True, + recompute_boxes=True, + output_dir=None, + vis_period=12800, + dataset_names=["coco_2017_train"], + ), + total_batch_size=16, + num_workers=4, +) + +dataloader.test = L(build_detection_test_loader)( + dataset=L(get_detection_dataset_dicts)(names="coco_2017_val", filter_empty=False), + mapper=L(DatasetMapper)( + is_train=False, + augmentations=[ + L(T.ResizeShortestEdge)(short_edge_length=image_size, max_size=image_size), + ], + image_format="${...train.mapper.image_format}", + ), + num_workers=4, +) + +dataloader.evaluator = L(COCOEvaluator)( + dataset_name="${..test.dataset.names}", + max_dets_per_image=100, +) diff --git a/approach/ovod/APE/configs/common/data/coco_panoptic.py b/approach/ovod/APE/configs/common/data/coco_panoptic.py new file mode 100644 index 0000000000000000000000000000000000000000..99838e9e4e6fb490e9122241727db7c357b8788d --- /dev/null +++ b/approach/ovod/APE/configs/common/data/coco_panoptic.py @@ -0,0 +1,82 @@ +import detectron2.data.transforms as T +from detectron2.config import LazyCall as L +from detectron2.data import ( + DatasetMapper, + MetadataCatalog, + build_detection_test_loader, + build_detection_train_loader, + get_detection_dataset_dicts, +) +from detectron2.evaluation import COCOEvaluator, COCOPanopticEvaluator, SemSegEvaluator +from omegaconf import OmegaConf +from ape.data import DatasetMapper_detr_panoptic + +dataloader = OmegaConf.create() + +dataloader.train = L(build_detection_train_loader)( + dataset=L(get_detection_dataset_dicts)(names=("coco_2017_train_panoptic",), filter_empty=True), + mapper=L(DatasetMapper_detr_panoptic)( + is_train=True, + augmentations=[ + L(T.RandomFlip)(), + L(T.ResizeShortestEdge)( + short_edge_length=(480, 512, 544, 576, 608, 640, 672, 704, 736, 768, 800), + max_size=1333, + sample_style="choice", + ), + ], + augmentations_with_crop=[ + L(T.RandomFlip)(), + L(T.ResizeShortestEdge)( + short_edge_length=(400, 500, 600), + sample_style="choice", + ), + L(T.RandomCrop)( + crop_type="absolute_range", + crop_size=(384, 600), + ), + L(T.ResizeShortestEdge)( + short_edge_length=(480, 512, 544, 576, 608, 640, 672, 704, 736, 768, 800), + max_size=1333, + sample_style="choice", + ), + ], + image_format="RGB", + use_instance_mask=True, + recompute_boxes=True, + instance_mask_format="bitmask", + ignore_label=MetadataCatalog.get("coco_2017_train_panoptic").ignore_label, + stuff_classes_offset=0, + stuff_classes_decomposition=True, + dataset_names="${..dataset.names}", + ), + total_batch_size=16, + aspect_ratio_grouping=True, + num_workers=16, +) + +dataloader.test = L(build_detection_test_loader)( + dataset=L(get_detection_dataset_dicts)( + names="coco_2017_val_panoptic_with_sem_seg", filter_empty=False + ), + mapper=L(DatasetMapper)( + is_train=False, + augmentations=[ + L(T.ResizeShortestEdge)(short_edge_length=800, max_size=1333), + ], + image_format="${...train.mapper.image_format}", + ), + num_workers=4, +) + +dataloader.evaluator = [ + L(COCOEvaluator)( + dataset_name="${...test.dataset.names}", + ), + L(SemSegEvaluator)( + dataset_name="${...test.dataset.names}", + ), + L(COCOPanopticEvaluator)( + dataset_name="${...test.dataset.names}", + ), +] diff --git a/approach/ovod/APE/configs/common/data/coco_panoptic_lsj1024.py b/approach/ovod/APE/configs/common/data/coco_panoptic_lsj1024.py new file mode 100644 index 0000000000000000000000000000000000000000..a2842b7c15faefa4ec5eb30293973dcad150a934 --- /dev/null +++ b/approach/ovod/APE/configs/common/data/coco_panoptic_lsj1024.py @@ -0,0 +1,76 @@ +import detectron2.data.transforms as T +from detectron2.config import LazyCall as L +from detectron2.data import ( + DatasetMapper, + MetadataCatalog, + build_detection_test_loader, + build_detection_train_loader, + get_detection_dataset_dicts, +) +from detectron2.evaluation import COCOEvaluator, COCOPanopticEvaluator, SemSegEvaluator +from omegaconf import OmegaConf +from ape.data import DatasetMapper_detr_panoptic + +image_size = 1024 + +dataloader = OmegaConf.create() + +dataloader.train = L(build_detection_train_loader)( + dataset=L(get_detection_dataset_dicts)( + names="coco_2017_train_panoptic_with_sem_seg", filter_empty=True + ), + mapper=L(DatasetMapper_detr_panoptic)( + is_train=True, + augmentations=[ + L(T.RandomFlip)(horizontal=True), # flip first + L(T.ResizeScale)( + min_scale=0.1, max_scale=1.0, target_height=image_size, target_width=image_size + ), + L(T.FixedSizeCrop)(crop_size=(image_size, image_size), pad=False), + ], + augmentations_with_crop=[ + L(T.RandomFlip)(horizontal=True), # flip first + L(T.ResizeScale)( + min_scale=0.1, max_scale=2.0, target_height=image_size, target_width=image_size + ), + L(T.FixedSizeCrop)(crop_size=(image_size, image_size), pad=False), + ], + image_format="RGB", + use_instance_mask=True, + recompute_boxes=True, + instance_mask_format="bitmask", + ignore_label=MetadataCatalog.get("coco_2017_train_panoptic_with_sem_seg").ignore_label, + stuff_classes_offset=0, + stuff_classes_decomposition=True, + dataset_names=["coco_2017_train_panoptic_with_sem_seg"], + ), + total_batch_size=16, + aspect_ratio_grouping=True, + num_workers=16, +) + +dataloader.test = L(build_detection_test_loader)( + dataset=L(get_detection_dataset_dicts)( + names="coco_2017_val_panoptic_with_sem_seg", filter_empty=False + ), + mapper=L(DatasetMapper)( + is_train=False, + augmentations=[ + L(T.ResizeShortestEdge)(short_edge_length=image_size, max_size=image_size), + ], + image_format="${...train.mapper.image_format}", + ), + num_workers=4, +) + +dataloader.evaluator = [ + L(COCOEvaluator)( + dataset_name="${...test.dataset.names}", + ), + L(SemSegEvaluator)( + dataset_name="${...test.dataset.names}", + ), + L(COCOPanopticEvaluator)( + dataset_name="${...test.dataset.names}", + ), +] diff --git a/approach/ovod/APE/configs/common/data/coco_panoptic_separated.py b/approach/ovod/APE/configs/common/data/coco_panoptic_separated.py new file mode 100644 index 0000000000000000000000000000000000000000..90e054868220bb9ba9b220eae813423b876fb6d5 --- /dev/null +++ b/approach/ovod/APE/configs/common/data/coco_panoptic_separated.py @@ -0,0 +1,84 @@ +import detectron2.data.transforms as T +from detectron2.config import LazyCall as L +from detectron2.data import ( + DatasetMapper, + MetadataCatalog, + build_detection_test_loader, + build_detection_train_loader, + get_detection_dataset_dicts, +) +from detectron2.evaluation import COCOEvaluator, COCOPanopticEvaluator, SemSegEvaluator +from omegaconf import OmegaConf +from ape.data import DatasetMapper_detr_panoptic + +dataloader = OmegaConf.create() + +dataloader.train = L(build_detection_train_loader)( + dataset=L(get_detection_dataset_dicts)( + names="coco_2017_train_panoptic_separated", filter_empty=True + ), + mapper=L(DatasetMapper_detr_panoptic)( + is_train=True, + augmentations=[ + L(T.RandomFlip)(), + L(T.ResizeShortestEdge)( + short_edge_length=(480, 512, 544, 576, 608, 640, 672, 704, 736, 768, 800), + max_size=1333, + sample_style="choice", + ), + ], + augmentations_with_crop=[ + L(T.RandomFlip)(), + L(T.ResizeShortestEdge)( + short_edge_length=(400, 500, 600), + sample_style="choice", + ), + L(T.RandomCrop)( + crop_type="absolute_range", + crop_size=(384, 600), + ), + L(T.ResizeShortestEdge)( + short_edge_length=(480, 512, 544, 576, 608, 640, 672, 704, 736, 768, 800), + max_size=1333, + sample_style="choice", + ), + ], + image_format="RGB", + use_instance_mask=True, + recompute_boxes=True, + instance_mask_format="bitmask", + ignore_label=MetadataCatalog.get("coco_2017_train_panoptic_stuffonly").ignore_label, + stuff_classes_offset=80, + stuff_classes_decomposition=True, + dataset_names="${..dataset.names}", + ), + total_batch_size=16, + aspect_ratio_grouping=True, + num_workers=16, +) + +dataloader.test = L(build_detection_test_loader)( + dataset=L(get_detection_dataset_dicts)( + names="coco_2017_val_panoptic_with_sem_seg", filter_empty=False + ), + mapper=L(DatasetMapper)( + is_train=False, + augmentations=[ + L(T.ResizeShortestEdge)(short_edge_length=800, max_size=1333), + ], + image_format="${...train.mapper.image_format}", + ), + num_workers=4, +) + +dataloader.evaluator = [ + L(COCOEvaluator)( + dataset_name="${...test.dataset.names}", + ), + L(SemSegEvaluator)( + dataset_name="${...test.dataset.names}", + ), + L(COCOPanopticEvaluator)( + dataset_name="${...test.dataset.names}", + ), +] diff --git a/approach/ovod/APE/configs/common/data/coco_refcoco_instance_lsj1024.py b/approach/ovod/APE/configs/common/data/coco_refcoco_instance_lsj1024.py new file mode 100644 index 0000000000000000000000000000000000000000..b49f2466b61d30aac088c603e873b8c6607da650 --- /dev/null +++ b/approach/ovod/APE/configs/common/data/coco_refcoco_instance_lsj1024.py @@ -0,0 +1,108 @@ +import detectron2.data.transforms as T +from detectron2.config import LazyCall as L +from detectron2.data import ( + DatasetMapper, + build_detection_test_loader, + build_detection_train_loader, + get_detection_dataset_dicts, +) +from detectron2.evaluation import COCOEvaluator +from omegaconf import OmegaConf +from ape.data import ( + DatasetMapper_detr_instance, + build_detection_train_loader_multi_dataset, + get_detection_dataset_dicts_multi_dataset, +) +from ape.evaluation import RefCOCOEvaluator + +image_size = 1024 + +dataloader = OmegaConf.create() + +dataloader.train = L(build_detection_train_loader_multi_dataset)( + dataset=L(get_detection_dataset_dicts_multi_dataset)( + names=( + "coco_2017_train", + "refcoco-mixed", + ), + filter_emptys=[True, True], + ), + mapper=L(DatasetMapper_detr_instance)( + is_train=True, + augmentations=[ + L(T.RandomFlip)(horizontal=True), # flip first + L(T.ResizeScale)( + min_scale=0.1, max_scale=1.0, target_height=image_size, target_width=image_size + ), + L(T.FixedSizeCrop)(crop_size=(image_size, image_size), pad=False), + ], + augmentations_with_crop=[ + L(T.RandomFlip)(horizontal=True), # flip first + L(T.ResizeScale)( + min_scale=0.1, max_scale=2.0, target_height=image_size, target_width=image_size + ), + L(T.FixedSizeCrop)(crop_size=(image_size, image_size), pad=False), + ], + image_format="RGB", + use_instance_mask=True, + recompute_boxes=True, + dataset_names=( + "coco_2017_train", + "refcoco-mixed", + ), + ), + total_batch_size=16, + total_batch_size_list=[16, 16], + num_workers=4, + num_datasets=2, +) + +dataloader.test = L(build_detection_test_loader)( + dataset=L(get_detection_dataset_dicts)(names="coco_2017_val", filter_empty=False), + mapper=L(DatasetMapper)( + is_train=False, + augmentations=[ + L(T.ResizeShortestEdge)(short_edge_length=image_size, max_size=image_size), + ], + image_format="${...train.mapper.image_format}", + ), + num_workers=4, +) + +dataloader.evaluator = L(COCOEvaluator)( + dataset_name="${..test.dataset.names}", + max_dets_per_image=100, +) + +refcoco_test_dataset_names = [ + "refcoco-unc-val", + "refcoco-unc-testA", + "refcoco-unc-testB", + "refcocoplus-unc-val", + "refcocoplus-unc-testA", + "refcocoplus-unc-testB", + "refcocog-google-val", + "refcocog-umd-val", + "refcocog-umd-test", +] +dataloader.tests = [ + L(build_detection_test_loader)( + dataset=L(get_detection_dataset_dicts)(names=name, filter_empty=False), + mapper=L(DatasetMapper)( + is_train=False, + augmentations=[ + L(T.ResizeShortestEdge)(short_edge_length=image_size, max_size=image_size), + ], + image_format="${....train.mapper.image_format}", + ), + num_workers=4, + ) + for name in refcoco_test_dataset_names +] + +dataloader.evaluators = [ + L(RefCOCOEvaluator)( + dataset_name=name, + ) + for name in refcoco_test_dataset_names +] diff --git a/approach/ovod/APE/configs/common/data/coco_sa1b_panoptic.py b/approach/ovod/APE/configs/common/data/coco_sa1b_panoptic.py new file mode 100644 index 0000000000000000000000000000000000000000..8a65ab4ac665fcf9acf3866ca017ad5a6248818d --- /dev/null +++ b/approach/ovod/APE/configs/common/data/coco_sa1b_panoptic.py @@ -0,0 +1,106 @@ +import random + +import detectron2.data.transforms as T +from detectron2.config import LazyCall as L +from detectron2.data import ( + DatasetMapper, + MetadataCatalog, + build_detection_test_loader, + get_detection_dataset_dicts, +) +from detectron2.evaluation import COCOEvaluator, COCOPanopticEvaluator, SemSegEvaluator +from omegaconf import OmegaConf +from ape.data import ( + DatasetMapper_detr_panoptic, + build_detection_train_loader_multi_dataset, + get_detection_dataset_dicts_multi_dataset, +) +from ape.data.samplers import MultiDatasetTrainingSampler + +dataloader = OmegaConf.create() + +dataloader.train = L(build_detection_train_loader_multi_dataset)( + dataset=L(get_detection_dataset_dicts_multi_dataset)( + names=( + "coco_2017_train_panoptic_separated", + "sa1b_4m", + ), + filter_emptys=[True, False], + ), + mapper=L(DatasetMapper_detr_panoptic)( + is_train=True, + augmentations=[ + L(T.RandomFlip)(), + L(T.ResizeShortestEdge)( + short_edge_length=(480, 512, 544, 576, 608, 640, 672, 704, 736, 768, 800), + max_size=1333, + sample_style="choice", + ), + ], + augmentations_with_crop=[ + L(T.RandomFlip)(), + L(T.ResizeShortestEdge)( + short_edge_length=(400, 500, 600), + sample_style="choice", + ), + L(T.RandomCrop)( + crop_type="absolute_range", + crop_size=(384, 600), + ), + L(T.ResizeShortestEdge)( + short_edge_length=(480, 512, 544, 576, 608, 640, 672, 704, 736, 768, 800), + max_size=1333, + sample_style="choice", + ), + ], + image_format="RGB", + use_instance_mask=True, + recompute_boxes=True, + instance_mask_format="bitmask", + ignore_label=MetadataCatalog.get("coco_2017_train_panoptic_stuffonly").ignore_label, + stuff_classes_offset=80, + dataset_names=["coco_2017_train_panoptic_separated", "sa1b"], + ), + sampler=lambda dataset_dicts: MultiDatasetTrainingSampler( + repeat_factors=MultiDatasetTrainingSampler.get_repeat_factors( + dataset_dicts=dataset_dicts, + num_datasets=2, + dataset_ratio=[1, 1], + use_rfs=[False, False], + use_cas=[False, False], + repeat_thresh=0.001, + cas_lambda=1.0, + ), + seed=random.randint(0, 2**31), + ), + total_batch_size=16, + total_batch_size_list=[16, 16], + num_workers=4, + num_datasets=2, +) + +dataloader.test = L(build_detection_test_loader)( + dataset=L(get_detection_dataset_dicts)( + names="coco_2017_val_panoptic_separated", filter_empty=False + ), + mapper=L(DatasetMapper)( + is_train=False, + augmentations=[ + L(T.ResizeShortestEdge)(short_edge_length=800, max_size=1333), + ], + image_format="${...train.mapper.image_format}", + ), + num_workers=4, +) + +dataloader.evaluator = [ + L(COCOEvaluator)( + dataset_name="${...test.dataset.names}", + ), + L(SemSegEvaluator)( + dataset_name="${...test.dataset.names}", + ), + L(COCOPanopticEvaluator)( + dataset_name="${...test.dataset.names}", + ), +] diff --git a/approach/ovod/APE/configs/common/data/coco_semantic.py b/approach/ovod/APE/configs/common/data/coco_semantic.py new file mode 100644 index 0000000000000000000000000000000000000000..9160ff529de3d004a84454e46847c37a956f3e3d --- /dev/null +++ b/approach/ovod/APE/configs/common/data/coco_semantic.py @@ -0,0 +1,69 @@ +import detectron2.data.transforms as T +from detectron2.config import LazyCall as L +from detectron2.data import ( + DatasetMapper, + MetadataCatalog, + build_detection_test_loader, + build_detection_train_loader, + get_detection_dataset_dicts, +) +from detectron2.evaluation import SemSegEvaluator +from omegaconf import OmegaConf +from ape.data import DatasetMapper_detr_semantic + +dataloader = OmegaConf.create() + +dataloader.train = L(build_detection_train_loader)( + dataset=L(get_detection_dataset_dicts)(names="coco_2017_train_panoptic_stuffonly"), + mapper=L(DatasetMapper_detr_semantic)( + is_train=True, + augmentations=[ + L(T.RandomFlip)(), + L(T.ResizeShortestEdge)( + short_edge_length=(480, 512, 544, 576, 608, 640, 672, 704, 736, 768, 800), + max_size=1333, + sample_style="choice", + ), + ], + augmentations_with_crop=[ + L(T.RandomFlip)(), + L(T.ResizeShortestEdge)( + short_edge_length=(400, 500, 600), + sample_style="choice", + ), + L(T.RandomCrop)( + crop_type="absolute_range", + crop_size=(384, 600), + ), + L(T.ResizeShortestEdge)( + short_edge_length=(480, 512, 544, 576, 608, 640, 672, 704, 736, 768, 800), + max_size=1333, + sample_style="choice", + ), + ], + image_format="RGB", + use_instance_mask=True, + recompute_boxes=True, + ignore_label=MetadataCatalog.get("coco_2017_train_panoptic_stuffonly").ignore_label, + ), + total_batch_size=16, + num_workers=4, +) + +dataloader.test = L(build_detection_test_loader)( + dataset=L(get_detection_dataset_dicts)( + names="coco_2017_val_panoptic_stuffonly", filter_empty=False + ), + mapper=L(DatasetMapper)( + is_train=False, + augmentations=[ + L(T.ResizeShortestEdge)(short_edge_length=800, max_size=1333), + ], + image_format="${...train.mapper.image_format}", + ), + num_workers=4, +) + +dataloader.evaluator = L(SemSegEvaluator)( + dataset_name="${..test.dataset.names}", +) diff --git a/approach/ovod/APE/configs/common/data/coco_semantic_lsj1024.py b/approach/ovod/APE/configs/common/data/coco_semantic_lsj1024.py new file mode 100644 index 0000000000000000000000000000000000000000..501bf2b7b4f95d9c007343eeb63f8a811e4e9dee --- /dev/null +++ b/approach/ovod/APE/configs/common/data/coco_semantic_lsj1024.py @@ -0,0 +1,62 @@ +import detectron2.data.transforms as T +from detectron2.config import LazyCall as L +from detectron2.data import ( + DatasetMapper, + MetadataCatalog, + build_detection_test_loader, + build_detection_train_loader, + get_detection_dataset_dicts, +) +from detectron2.evaluation import SemSegEvaluator +from omegaconf import OmegaConf +from ape.data import DatasetMapper_detr_semantic + +image_size = 1024 + +dataloader = OmegaConf.create() + +dataloader.train = L(build_detection_train_loader)( + dataset=L(get_detection_dataset_dicts)(names="coco_2017_train_panoptic_stuffonly"), + mapper=L(DatasetMapper_detr_semantic)( + is_train=True, + augmentations=[ + L(T.RandomFlip)(horizontal=True), # flip first + L(T.ResizeScale)( + min_scale=0.1, max_scale=1.0, target_height=image_size, target_width=image_size + ), + L(T.FixedSizeCrop)(crop_size=(image_size, image_size), pad=False), + ], + augmentations_with_crop=[ + L(T.RandomFlip)(horizontal=True), # flip first + L(T.ResizeScale)( + min_scale=0.1, max_scale=2.0, target_height=image_size, target_width=image_size + ), + L(T.FixedSizeCrop)(crop_size=(image_size, image_size), pad=False), + ], + image_format="RGB", + use_instance_mask=True, + recompute_boxes=True, + ignore_label=MetadataCatalog.get("coco_2017_train_panoptic_stuffonly").ignore_label, + stuff_classes_decomposition=True, + ), + total_batch_size=16, + num_workers=4, +) + +dataloader.test = L(build_detection_test_loader)( + dataset=L(get_detection_dataset_dicts)( + names="coco_2017_val_panoptic_stuffonly", filter_empty=False + ), + mapper=L(DatasetMapper)( + is_train=False, + augmentations=[ + L(T.ResizeShortestEdge)(short_edge_length=image_size, max_size=image_size), + ], + image_format="${...train.mapper.image_format}", + ), + num_workers=4, +) + +dataloader.evaluator = L(SemSegEvaluator)( + dataset_name="${..test.dataset.names}", +) diff --git a/approach/ovod/APE/configs/common/data/flickr30k_instance.py b/approach/ovod/APE/configs/common/data/flickr30k_instance.py new file mode 100644 index 0000000000000000000000000000000000000000..158370fe6add32dd272d025c563826bdb5e6276a --- /dev/null +++ b/approach/ovod/APE/configs/common/data/flickr30k_instance.py @@ -0,0 +1,76 @@ +import detectron2.data.transforms as T +from detectron2.config import LazyCall as L +from detectron2.data import ( + DatasetMapper, + build_detection_test_loader, + build_detection_train_loader, + get_detection_dataset_dicts, +) +from detectron2.evaluation import COCOEvaluator +from omegaconf import OmegaConf +from ape.data import ( + DatasetMapper_detr_instance, + build_detection_train_loader_multi_dataset, + get_detection_dataset_dicts_multi_dataset, +) +from ape.evaluation import RefCOCOEvaluator + +dataloader = OmegaConf.create() + +dataloader.train = L(build_detection_train_loader_multi_dataset)( + dataset=L(get_detection_dataset_dicts_multi_dataset)( + names=("flickr30k_separateGT_train",), + filter_emptys=[True], + ), + mapper=L(DatasetMapper_detr_instance)( + is_train=True, + augmentations=[ + L(T.RandomFlip)(), + L(T.ResizeShortestEdge)( + short_edge_length=(480, 512, 544, 576, 608, 640, 672, 704, 736, 768, 800), + max_size=1333, + sample_style="choice", + ), + ], + augmentations_with_crop=[ + L(T.RandomFlip)(), + L(T.ResizeShortestEdge)( + short_edge_length=(400, 500, 600), + sample_style="choice", + ), + L(T.RandomCrop)( + crop_type="absolute_range", + crop_size=(384, 600), + ), + L(T.ResizeShortestEdge)( + short_edge_length=(480, 512, 544, 576, 608, 640, 672, 704, 736, 768, 800), + max_size=1333, + sample_style="choice", + ), + ], + image_format="RGB", + use_instance_mask=True, + recompute_boxes=True, + dataset_names=("flickr30k_separateGT_train",), + ), + total_batch_size=16, + total_batch_size_list=[16], + num_workers=4, + num_datasets=1, +) + +dataloader.test = L(build_detection_test_loader)( + dataset=L(get_detection_dataset_dicts)(names="flickr30k_separateGT_val", filter_empty=False), + mapper=L(DatasetMapper)( + is_train=False, + augmentations=[ + L(T.ResizeShortestEdge)(short_edge_length=800, max_size=1333), + ], + image_format="${...train.mapper.image_format}", + ), + num_workers=4, +) + +dataloader.evaluator = L(RefCOCOEvaluator)( + dataset_name="${..test.dataset.names}", +) diff --git a/approach/ovod/APE/configs/common/data/flickr30k_instance_lsj1024.py b/approach/ovod/APE/configs/common/data/flickr30k_instance_lsj1024.py new file mode 100644 index 0000000000000000000000000000000000000000..027b2767b2893ae72c168916e61a8da51a9364b2 --- /dev/null +++ b/approach/ovod/APE/configs/common/data/flickr30k_instance_lsj1024.py @@ -0,0 +1,70 @@ +import detectron2.data.transforms as T +from detectron2.config import LazyCall as L +from detectron2.data import ( + DatasetMapper, + build_detection_test_loader, + build_detection_train_loader, + get_detection_dataset_dicts, +) +from detectron2.evaluation import COCOEvaluator +from omegaconf import OmegaConf +from ape.data import ( + DatasetMapper_detr_instance, + build_detection_train_loader_multi_dataset, + get_detection_dataset_dicts_multi_dataset, +) +from ape.evaluation import RefCOCOEvaluator + +dataloader = OmegaConf.create() + +image_size = 1024 + +dataloader.train = L(build_detection_train_loader_multi_dataset)( + dataset=L(get_detection_dataset_dicts_multi_dataset)( + names=("flickr30k_separateGT_train",), + filter_emptys=[True], + ), + mapper=L(DatasetMapper_detr_instance)( + is_train=True, + augmentations=[ + L(T.RandomFlip)(horizontal=True), # flip first + L(T.ResizeScale)( + min_scale=0.1, max_scale=1.0, target_height=image_size, target_width=image_size + ), + L(T.FixedSizeCrop)(crop_size=(image_size, image_size), pad=False), + ], + augmentations_with_crop=[ + L(T.RandomFlip)(horizontal=True), # flip first + L(T.ResizeScale)( + min_scale=0.1, max_scale=2.0, target_height=image_size, target_width=image_size + ), + L(T.FixedSizeCrop)(crop_size=(image_size, image_size), pad=False), + ], + image_format="RGB", + use_instance_mask=True, + recompute_boxes=True, + dataset_names=("flickr30k_separateGT_train",), + max_num_phrase=256, + nms_thresh_phrase=0.6, + ), + total_batch_size=16, + total_batch_size_list=[16], + num_workers=4, + num_datasets=1, +) + +dataloader.test = L(build_detection_test_loader)( + dataset=L(get_detection_dataset_dicts)(names="flickr30k_separateGT_val", filter_empty=False), + mapper=L(DatasetMapper)( + is_train=False, + augmentations=[ + L(T.ResizeShortestEdge)(short_edge_length=image_size, max_size=image_size), + ], + image_format="${...train.mapper.image_format}", + ), + num_workers=4, +) + +dataloader.evaluator = L(RefCOCOEvaluator)( + dataset_name="${..test.dataset.names}", +) diff --git a/approach/ovod/APE/configs/common/data/gqa_region_instance.py b/approach/ovod/APE/configs/common/data/gqa_region_instance.py new file mode 100644 index 0000000000000000000000000000000000000000..317446c0672089a80d2e102bd264fd06fbfc351f --- /dev/null +++ b/approach/ovod/APE/configs/common/data/gqa_region_instance.py @@ -0,0 +1,109 @@ +import detectron2.data.transforms as T +from detectron2.config import LazyCall as L +from detectron2.data import ( + DatasetMapper, + build_detection_test_loader, + build_detection_train_loader, + get_detection_dataset_dicts, +) +from detectron2.evaluation import COCOEvaluator +from omegaconf import OmegaConf +from ape.data import ( + DatasetMapper_detr_instance, + build_detection_train_loader_multi_dataset, + get_detection_dataset_dicts_multi_dataset, +) +from ape.evaluation import RefCOCOEvaluator + +dataloader = OmegaConf.create() + +dataloader.train = L(build_detection_train_loader_multi_dataset)( + dataset=L(get_detection_dataset_dicts_multi_dataset)( + names=("gqa_region_train",), + filter_emptys=[True], + ), + mapper=L(DatasetMapper_detr_instance)( + is_train=True, + augmentations=[ + L(T.RandomFlip)(), + L(T.ResizeShortestEdge)( + short_edge_length=(480, 512, 544, 576, 608, 640, 672, 704, 736, 768, 800), + max_size=1333, + sample_style="choice", + ), + ], + augmentations_with_crop=[ + L(T.RandomFlip)(), + L(T.ResizeShortestEdge)( + short_edge_length=(400, 500, 600), + sample_style="choice", + ), + L(T.RandomCrop)( + crop_type="absolute_range", + crop_size=(384, 600), + ), + L(T.ResizeShortestEdge)( + short_edge_length=(480, 512, 544, 576, 608, 640, 672, 704, 736, 768, 800), + max_size=1333, + sample_style="choice", + ), + ], + image_format="RGB", + use_instance_mask=True, + recompute_boxes=True, + dataset_names=("visualgenome_77962_box_and_region",), + ), + total_batch_size=16, + total_batch_size_list=[16], + num_workers=4, + num_datasets=1, +) + +dataloader.test = L(build_detection_test_loader)( + dataset=L(get_detection_dataset_dicts)(names="refcoco-unc-val", filter_empty=False), + mapper=L(DatasetMapper)( + is_train=False, + augmentations=[ + L(T.ResizeShortestEdge)(short_edge_length=800, max_size=1333), + ], + image_format="${...train.mapper.image_format}", + ), + num_workers=4, +) + +dataloader.evaluator = L(RefCOCOEvaluator)( + dataset_name="${..test.dataset.names}", +) + +refcoco_test_dataset_names = [ + "refcoco-unc-val", + "refcoco-unc-testA", + "refcoco-unc-testB", + "refcocoplus-unc-val", + "refcocoplus-unc-testA", + "refcocoplus-unc-testB", + "refcocog-google-val", + "refcocog-umd-val", + "refcocog-umd-test", +] +dataloader.tests = [ + L(build_detection_test_loader)( + dataset=L(get_detection_dataset_dicts)(names=name, filter_empty=False), + mapper=L(DatasetMapper)( + is_train=False, + augmentations=[ + L(T.ResizeShortestEdge)(short_edge_length=800, max_size=1333), + ], + image_format="${....train.mapper.image_format}", + ), + num_workers=4, + ) + for name in refcoco_test_dataset_names[1:] +] + +dataloader.evaluators = [ + L(RefCOCOEvaluator)( + dataset_name=name, + ) + for name in refcoco_test_dataset_names[1:] +] diff --git a/approach/ovod/APE/configs/common/data/grit_instance.py b/approach/ovod/APE/configs/common/data/grit_instance.py new file mode 100644 index 0000000000000000000000000000000000000000..616ef35ea43997ff831eaad71ea736c1ad8406b7 --- /dev/null +++ b/approach/ovod/APE/configs/common/data/grit_instance.py @@ -0,0 +1,111 @@ +import detectron2.data.transforms as T +from detectron2.config import LazyCall as L +from detectron2.data import ( + DatasetMapper, + build_detection_test_loader, + build_detection_train_loader, + get_detection_dataset_dicts, +) +from detectron2.evaluation import COCOEvaluator +from omegaconf import OmegaConf +from ape.data import ( + DatasetMapper_detr_instance, + build_detection_train_loader_multi_dataset, + get_detection_dataset_dicts_multi_dataset, +) +from ape.evaluation import RefCOCOEvaluator + +dataloader = OmegaConf.create() + +dataloader.train = L(build_detection_train_loader_multi_dataset)( + dataset=L(get_detection_dataset_dicts_multi_dataset)( + names=("grit",), + filter_emptys=[True], + ), + mapper=L(DatasetMapper_detr_instance)( + is_train=True, + augmentations=[ + L(T.RandomFlip)(), + L(T.ResizeShortestEdge)( + short_edge_length=(480, 512, 544, 576, 608, 640, 672, 704, 736, 768, 800), + max_size=1333, + sample_style="choice", + ), + ], + augmentations_with_crop=[ + L(T.RandomFlip)(), + L(T.ResizeShortestEdge)( + short_edge_length=(400, 500, 600), + sample_style="choice", + ), + L(T.RandomCrop)( + crop_type="absolute_range", + crop_size=(384, 600), + ), + L(T.ResizeShortestEdge)( + short_edge_length=(480, 512, 544, 576, 608, 640, 672, 704, 736, 768, 800), + max_size=1333, + sample_style="choice", + ), + ], + image_format="RGB", + use_instance_mask=True, + recompute_boxes=True, + dataset_names=("grit",), + max_num_phrase=100, + nms_thresh_phrase=0.6, + ), + total_batch_size=16, + total_batch_size_list=[16], + num_workers=2, + num_datasets=1, +) + +dataloader.test = L(build_detection_test_loader)( + dataset=L(get_detection_dataset_dicts)(names="refcoco-unc-val", filter_empty=False), + mapper=L(DatasetMapper)( + is_train=False, + augmentations=[ + L(T.ResizeShortestEdge)(short_edge_length=800, max_size=1333), + ], + image_format="${...train.mapper.image_format}", + ), + num_workers=4, +) + +dataloader.evaluator = L(RefCOCOEvaluator)( + dataset_name="${..test.dataset.names}", +) + +refcoco_test_dataset_names = [ + "refcoco-unc-val", + "refcoco-unc-testA", + "refcoco-unc-testB", + "refcocoplus-unc-val", + "refcocoplus-unc-testA", + "refcocoplus-unc-testB", + "refcocog-google-val", + "refcocog-umd-val", + "refcocog-umd-test", +] +dataloader.tests = [ + L(build_detection_test_loader)( + dataset=L(get_detection_dataset_dicts)(names=name, filter_empty=False), + mapper=L(DatasetMapper)( + is_train=False, + augmentations=[ + L(T.ResizeShortestEdge)(short_edge_length=800, max_size=1333), + ], + image_format="${....train.mapper.image_format}", + ), + num_workers=4, + ) + for name in refcoco_test_dataset_names[1:] +] + +dataloader.evaluators = [ + L(RefCOCOEvaluator)( + dataset_name=name, + ) + for name in refcoco_test_dataset_names[1:] +] diff --git a/approach/ovod/APE/configs/common/data/lvis_instance_lsj1024_cp.py b/approach/ovod/APE/configs/common/data/lvis_instance_lsj1024_cp.py new file mode 100644 index 0000000000000000000000000000000000000000..fa30d610819e9621b8c4afa18342209444d9dc41 --- /dev/null +++ b/approach/ovod/APE/configs/common/data/lvis_instance_lsj1024_cp.py @@ -0,0 +1,69 @@ +import detectron2.data.transforms as T +from detectron2.config import LazyCall as L +from detectron2.data import DatasetMapper, build_detection_test_loader, get_detection_dataset_dicts +from detectron2.data.samplers import RepeatFactorTrainingSampler +from detectron2.evaluation import LVISEvaluator +from omegaconf import OmegaConf +from ape.data import ( + DatasetMapper_copypaste, + build_detection_train_loader_copypaste, + get_detection_dataset_dicts_copypaste, +) + +image_size = 1024 + +dataloader = OmegaConf.create() + +dataloader.train = L(build_detection_train_loader_copypaste)( + dataset=L(get_detection_dataset_dicts_copypaste)(names=["lvis_v1_train"], copypastes=[True]), + dataset_bg=L(get_detection_dataset_dicts)(names=["lvis_v1_train"]), + mapper=L(DatasetMapper_copypaste)( + is_train=True, + augmentations=[ + L(T.RandomFlip)(horizontal=True), # flip first + L(T.ResizeScale)( + min_scale=0.1, max_scale=2.0, target_height=image_size, target_width=image_size + ), + L(T.FixedSizeCrop)(crop_size=(image_size, image_size), pad=False), + ], + augmentations_d2=[], + augmentations_aa=[], + augmentations_lsj=[], + augmentations_type=[], + image_format="RGB", + use_instance_mask=True, + recompute_boxes=True, + output_dir=None, + vis_period=12800, + dataset_names=["lvis_v1_train"], + ), + sampler=L(RepeatFactorTrainingSampler)( + repeat_factors=L(RepeatFactorTrainingSampler.repeat_factors_from_category_frequency)( + dataset_dicts="${dataloader.train.dataset}", repeat_thresh=0.001 + ) + ), + sampler_bg=L(RepeatFactorTrainingSampler)( + repeat_factors=L(RepeatFactorTrainingSampler.repeat_factors_from_category_frequency)( + dataset_dicts="${dataloader.train.dataset_bg}", repeat_thresh=0.001 + ) + ), + total_batch_size=16, + num_workers=4, +) + +dataloader.test = L(build_detection_test_loader)( + dataset=L(get_detection_dataset_dicts)(names="lvis_v1_val", filter_empty=False), + mapper=L(DatasetMapper)( + is_train=False, + augmentations=[ + L(T.ResizeShortestEdge)(short_edge_length=image_size, max_size=image_size), + ], + image_format="${...train.mapper.image_format}", + ), + num_workers=4, +) + +dataloader.evaluator = L(LVISEvaluator)( + dataset_name="${..test.dataset.names}", + max_dets_per_image=300, +) diff --git a/approach/ovod/APE/configs/common/data/lvis_instance_lsj1536_cp.py b/approach/ovod/APE/configs/common/data/lvis_instance_lsj1536_cp.py new file mode 100644 index 0000000000000000000000000000000000000000..23da027971d0c13593803f64be18dfc1694aceb3 --- /dev/null +++ b/approach/ovod/APE/configs/common/data/lvis_instance_lsj1536_cp.py @@ -0,0 +1,69 @@ +import detectron2.data.transforms as T +from detectron2.config import LazyCall as L +from detectron2.data import DatasetMapper, build_detection_test_loader, get_detection_dataset_dicts +from detectron2.data.samplers import RepeatFactorTrainingSampler +from detectron2.evaluation import LVISEvaluator +from omegaconf import OmegaConf +from ape.data import ( + DatasetMapper_copypaste, + build_detection_train_loader_copypaste, + get_detection_dataset_dicts_copypaste, +) + +image_size = 1536 + +dataloader = OmegaConf.create() + +dataloader.train = L(build_detection_train_loader_copypaste)( + dataset=L(get_detection_dataset_dicts_copypaste)(names=["lvis_v1_train"], copypastes=[True]), + dataset_bg=L(get_detection_dataset_dicts)(names=["lvis_v1_train"]), + mapper=L(DatasetMapper_copypaste)( + is_train=True, + augmentations=[ + L(T.RandomFlip)(horizontal=True), # flip first + L(T.ResizeScale)( + min_scale=0.1, max_scale=2.0, target_height=image_size, target_width=image_size + ), + L(T.FixedSizeCrop)(crop_size=(image_size, image_size), pad=False), + ], + augmentations_d2=[], + augmentations_aa=[], + augmentations_lsj=[], + augmentations_type=[], + image_format="RGB", + use_instance_mask=True, + recompute_boxes=True, + output_dir=None, + vis_period=12800, + dataset_names=["lvis_v1_train"], + ), + sampler=L(RepeatFactorTrainingSampler)( + repeat_factors=L(RepeatFactorTrainingSampler.repeat_factors_from_category_frequency)( + dataset_dicts="${dataloader.train.dataset}", repeat_thresh=0.001 + ) + ), + sampler_bg=L(RepeatFactorTrainingSampler)( + repeat_factors=L(RepeatFactorTrainingSampler.repeat_factors_from_category_frequency)( + dataset_dicts="${dataloader.train.dataset_bg}", repeat_thresh=0.001 + ) + ), + total_batch_size=16, + num_workers=4, +) + +dataloader.test = L(build_detection_test_loader)( + dataset=L(get_detection_dataset_dicts)(names="lvis_v1_val", filter_empty=False), + mapper=L(DatasetMapper)( + is_train=False, + augmentations=[ + L(T.ResizeShortestEdge)(short_edge_length=image_size, max_size=image_size), + ], + image_format="${...train.mapper.image_format}", + ), + num_workers=4, +) + +dataloader.evaluator = L(LVISEvaluator)( + dataset_name="${..test.dataset.names}", + max_dets_per_image=300, +) diff --git a/approach/ovod/APE/configs/common/data/lviscoco_cocostuff_o365_oid_vg_refcoco_panoptic_lsj1024_cp.py b/approach/ovod/APE/configs/common/data/lviscoco_cocostuff_o365_oid_vg_refcoco_panoptic_lsj1024_cp.py new file mode 100644 index 0000000000000000000000000000000000000000..9280b9fbd8df09acee86c41fee4421745f3aba59 --- /dev/null +++ b/approach/ovod/APE/configs/common/data/lviscoco_cocostuff_o365_oid_vg_refcoco_panoptic_lsj1024_cp.py @@ -0,0 +1,234 @@ +import random + +import detectron2.data.transforms as T +from detectron2.config import LazyCall as L +from detectron2.data import ( + DatasetMapper, + MetadataCatalog, + build_detection_test_loader, + get_detection_dataset_dicts, +) +from detectron2.data.samplers import RepeatFactorTrainingSampler +from detectron2.evaluation import COCOEvaluator, LVISEvaluator, SemSegEvaluator +from omegaconf import OmegaConf +from ape.data import ( + DatasetMapper_detr_panoptic_copypaste, + build_detection_train_loader_multi_dataset_copypaste, + get_detection_dataset_dicts_multi_dataset_copypaste, +) +from ape.data.samplers import MultiDatasetTrainingSampler +from ape.evaluation import RefCOCOEvaluator +from ape.evaluation.oideval import OIDEvaluator + +dataloader = OmegaConf.create() + +image_size = 1024 + +dataloader.train = L(build_detection_train_loader_multi_dataset_copypaste)( + dataset=L(get_detection_dataset_dicts_multi_dataset_copypaste)( + names=( + "lvis_v1_train+coco", + "coco_2017_train_panoptic_stuffonly", + "objects365_train_fixname", + "openimages_v6_train_bbox_nogroup", + "visualgenome_150_box_train", + "refcoco-mixed", + ), + filter_emptys=[True, False, True, True, True, True], + copypastes=[True, False, False, False, False, False], + ), + dataset_bg=L(get_detection_dataset_dicts)(names=["lvis_v1_train+coco"]), + mapper=L(DatasetMapper_detr_panoptic_copypaste)( + is_train=True, + augmentations=[ + L(T.RandomFlip)(horizontal=True), # flip first + L(T.ResizeScale)( + min_scale=0.1, max_scale=1.0, target_height=image_size, target_width=image_size + ), + L(T.FixedSizeCrop)(crop_size=(image_size, image_size), pad=False), + ], + augmentations_with_crop=[ + L(T.RandomFlip)(horizontal=True), # flip first + L(T.ResizeScale)( + min_scale=0.1, max_scale=2.0, target_height=image_size, target_width=image_size + ), + L(T.FixedSizeCrop)(crop_size=(image_size, image_size), pad=False), + ], + image_format="RGB", + use_instance_mask=True, + recompute_boxes=True, + instance_mask_format="bitmask", + ignore_label=MetadataCatalog.get("coco_2017_train_panoptic_stuffonly").ignore_label, + stuff_classes_offset=0, + stuff_classes_decomposition=True, + output_dir=None, + vis_period=12800, + dataset_names=[ + "lvis_v1_train+coco", + "coco_2017_train_panoptic_stuffonly", + "objects365_train_fixname", + "openimages_v6_train_bbox_nogroup", + "visualgenome_150_box_train", + "refcoco-mixed", + ], + ), + sampler=lambda dataset_dicts: MultiDatasetTrainingSampler( + repeat_factors=MultiDatasetTrainingSampler.get_repeat_factors( + dataset_dicts=dataset_dicts, + num_datasets=6, + dataset_ratio=[1, 1, 1, 1, 1, 1], + use_rfs=[True, False, True, True, True, True], + use_cas=[False, False, False, False, False, False], + repeat_thresh=0.001, + cas_lambda=1.0, + ), + seed=random.randint(0, 2**31), + ), + sampler_bg=lambda dataset_dicts: RepeatFactorTrainingSampler( + repeat_factors=RepeatFactorTrainingSampler.repeat_factors_from_category_frequency( + dataset_dicts=dataset_dicts, repeat_thresh=0.001 + ), + seed=random.randint(0, 2**31), + ), + total_batch_size=16, + total_batch_size_list=[16, 16, 16, 16, 16, 16], + aspect_ratio_grouping=True, + num_workers=4, + num_datasets=6, +) + +dataloader.test = L(build_detection_test_loader)( + dataset=L(get_detection_dataset_dicts)(names="lvis_v1_val", filter_empty=False), + mapper=L(DatasetMapper)( + is_train=False, + augmentations=[ + L(T.ResizeShortestEdge)(short_edge_length=image_size, max_size=image_size), + ], + image_format="${...train.mapper.image_format}", + ), + num_workers=4, +) + +dataloader.evaluator = L(LVISEvaluator)( + dataset_name="${..test.dataset.names}", + max_dets_per_image=300, +) + +dataloader.tests = [ + L(build_detection_test_loader)( + dataset=L(get_detection_dataset_dicts)( + names="coco_2017_val_panoptic_stuffonly", filter_empty=False + ), + mapper=L(DatasetMapper)( + is_train=False, + augmentations=[ + L(T.ResizeShortestEdge)(short_edge_length=image_size, max_size=image_size), + ], + image_format="${....train.mapper.image_format}", + ), + num_workers=4, + ), +] + +dataloader.evaluators = [ + L(SemSegEvaluator)( + dataset_name="coco_2017_val_panoptic_stuffonly", + ), +] + +dataloader.tests += [ + L(build_detection_test_loader)( + dataset=L(get_detection_dataset_dicts)(names="objects365_val_fixname", filter_empty=False), + mapper=L(DatasetMapper)( + is_train=False, + augmentations=[ + L(T.ResizeShortestEdge)(short_edge_length=image_size, max_size=image_size), + ], + image_format="${....train.mapper.image_format}", + ), + num_workers=4, + ), +] + +dataloader.evaluators += [ + L(COCOEvaluator)( + dataset_name="objects365_val_fixname", + tasks=("bbox",), + ), +] + +dataloader.tests += [ + L(build_detection_test_loader)( + dataset=L(get_detection_dataset_dicts)(names="openimages_v6_val_bbox", filter_empty=False), + mapper=L(DatasetMapper)( + is_train=False, + augmentations=[ + L(T.ResizeShortestEdge)(short_edge_length=image_size, max_size=image_size), + ], + image_format="${....train.mapper.image_format}", + ), + num_workers=4, + ), +] + +dataloader.evaluators += [ + L(OIDEvaluator)( + dataset_name="openimages_v6_val_bbox", + ), +] + +dataloader.tests += [ + L(build_detection_test_loader)( + dataset=L(get_detection_dataset_dicts)( + names="visualgenome_150_box_val", filter_empty=False + ), + mapper=L(DatasetMapper)( + is_train=False, + augmentations=[ + L(T.ResizeShortestEdge)(short_edge_length=image_size, max_size=image_size), + ], + image_format="${....train.mapper.image_format}", + ), + num_workers=4, + ), +] + +dataloader.evaluators += [ + L(COCOEvaluator)( + dataset_name="visualgenome_150_box_val", + tasks=("bbox",), + ), +] + +refcoco_test_dataset_names = [ + "refcoco-unc-val", + "refcoco-unc-testA", + "refcoco-unc-testB", + "refcocoplus-unc-val", + "refcocoplus-unc-testA", + "refcocoplus-unc-testB", + "refcocog-google-val", + "refcocog-umd-val", + "refcocog-umd-test", +] +dataloader.tests += [ + L(build_detection_test_loader)( + dataset=L(get_detection_dataset_dicts)(names=name, filter_empty=False), + mapper=L(DatasetMapper)( + is_train=False, + augmentations=[ + L(T.ResizeShortestEdge)(short_edge_length=image_size, max_size=image_size), + ], + image_format="${....train.mapper.image_format}", + ), + num_workers=4, + ) + for name in refcoco_test_dataset_names +] + +dataloader.evaluators += [ + L(RefCOCOEvaluator)( + dataset_name=name, + ) + for name in refcoco_test_dataset_names +] diff --git a/approach/ovod/APE/configs/common/data/lviscocococostuff_o365_oid_refcoco_panoptic_lsj1024.py b/approach/ovod/APE/configs/common/data/lviscocococostuff_o365_oid_refcoco_panoptic_lsj1024.py new file mode 100644 index 0000000000000000000000000000000000000000..64863e037cb94bb148b32785e146c0f731a574f4 --- /dev/null +++ b/approach/ovod/APE/configs/common/data/lviscocococostuff_o365_oid_refcoco_panoptic_lsj1024.py @@ -0,0 +1,198 @@ +import random + +import detectron2.data.transforms as T +from detectron2.config import LazyCall as L +from detectron2.data import ( + DatasetMapper, + MetadataCatalog, + build_detection_test_loader, + get_detection_dataset_dicts, +) +from detectron2.data.samplers import RepeatFactorTrainingSampler +from detectron2.evaluation import COCOEvaluator, LVISEvaluator, SemSegEvaluator +from omegaconf import OmegaConf +from ape.data import ( + DatasetMapper_detr_panoptic, + build_detection_train_loader_multi_dataset, + get_detection_dataset_dicts_multi_dataset, +) +from ape.data.samplers import MultiDatasetTrainingSampler +from ape.evaluation import RefCOCOEvaluator +from ape.evaluation.oideval import OIDEvaluator + +dataloader = OmegaConf.create() + +image_size = 1024 + + +dataloader.train = L(build_detection_train_loader_multi_dataset)( + dataset=L(get_detection_dataset_dicts_multi_dataset)( + names=( + "lvis_v1_train+coco_panoptic_separated", + "objects365_train_fixname", + "openimages_v6_train_bbox_nogroup", + "refcoco-mixed", + ), + filter_emptys=[True, True, True, True], + ), + mapper=L(DatasetMapper_detr_panoptic)( + is_train=True, + augmentations=[ + L(T.RandomFlip)(horizontal=True), # flip first + L(T.ResizeScale)( + min_scale=0.1, max_scale=1.0, target_height=image_size, target_width=image_size + ), + L(T.FixedSizeCrop)(crop_size=(image_size, image_size), pad=False), + ], + augmentations_with_crop=[ + L(T.RandomFlip)(horizontal=True), # flip first + L(T.ResizeScale)( + min_scale=0.1, max_scale=2.0, target_height=image_size, target_width=image_size + ), + L(T.FixedSizeCrop)(crop_size=(image_size, image_size), pad=False), + ], + image_format="RGB", + use_instance_mask=True, + recompute_boxes=True, + instance_mask_format="bitmask", + ignore_label=MetadataCatalog.get("coco_2017_train_panoptic_stuffonly").ignore_label, + stuff_classes_offset=1203, + stuff_classes_decomposition=True, + dataset_names=[ + "lvis_v1_train+coco_panoptic_separated", + "objects365_train_fixname", + "openimages_v6_train_bbox_nogroup", + "refcoco-mixed", + ], + ), + sampler=lambda dataset_dicts: MultiDatasetTrainingSampler( + repeat_factors=MultiDatasetTrainingSampler.get_repeat_factors( + dataset_dicts=dataset_dicts, + num_datasets=4, + dataset_ratio=[1, 1, 1, 1], + use_rfs=[True, True, True, True], + use_cas=[False, False, False, False], + repeat_thresh=0.001, + cas_lambda=1.0, + ), + seed=random.randint(0, 2**31), + ), + total_batch_size=16, + total_batch_size_list=[16, 16, 16, 16], + aspect_ratio_grouping=True, + num_workers=4, + num_datasets=4, +) + +dataloader.test = L(build_detection_test_loader)( + dataset=L(get_detection_dataset_dicts)(names="lvis_v1_val", filter_empty=False), + mapper=L(DatasetMapper)( + is_train=False, + augmentations=[ + L(T.ResizeShortestEdge)(short_edge_length=image_size, max_size=image_size), + ], + image_format="${...train.mapper.image_format}", + ), + num_workers=4, +) + +dataloader.evaluator = L(LVISEvaluator)( + dataset_name="${..test.dataset.names}", + max_dets_per_image=300, +) + +dataloader.tests = [ + L(build_detection_test_loader)( + dataset=L(get_detection_dataset_dicts)( + names="coco_2017_val_panoptic_stuffonly", filter_empty=False + ), + mapper=L(DatasetMapper)( + is_train=False, + augmentations=[ + L(T.ResizeShortestEdge)(short_edge_length=image_size, max_size=image_size), + ], + image_format="${....train.mapper.image_format}", + ), + num_workers=4, + ), +] + +dataloader.evaluators = [ + L(SemSegEvaluator)( + dataset_name="coco_2017_val_panoptic_stuffonly", + ), +] + +dataloader.tests += [ + L(build_detection_test_loader)( + dataset=L(get_detection_dataset_dicts)(names="objects365_val_fixname", filter_empty=False), + mapper=L(DatasetMapper)( + is_train=False, + augmentations=[ + L(T.ResizeShortestEdge)(short_edge_length=image_size, max_size=image_size), + ], + image_format="${....train.mapper.image_format}", + ), + num_workers=4, + ), +] + +dataloader.evaluators += [ + L(COCOEvaluator)( + dataset_name="objects365_val_fixname", + tasks=("bbox",), + ), +] + +dataloader.tests += [ + L(build_detection_test_loader)( + dataset=L(get_detection_dataset_dicts)(names="openimages_v6_val_bbox", filter_empty=False), + mapper=L(DatasetMapper)( + is_train=False, + augmentations=[ + L(T.ResizeShortestEdge)(short_edge_length=image_size, max_size=image_size), + ], + image_format="${....train.mapper.image_format}", + ), + num_workers=4, + ), +] + +dataloader.evaluators += [ + L(OIDEvaluator)( + dataset_name="openimages_v6_val_bbox", + ), +] + +refcoco_test_dataset_names = [ + "refcoco-unc-val", + "refcoco-unc-testA", + "refcoco-unc-testB", + "refcocoplus-unc-val", + "refcocoplus-unc-testA", + "refcocoplus-unc-testB", + "refcocog-google-val", + "refcocog-umd-val", + "refcocog-umd-test", +] +dataloader.tests += [ + L(build_detection_test_loader)( + dataset=L(get_detection_dataset_dicts)(names=name, filter_empty=False), + mapper=L(DatasetMapper)( + is_train=False, + augmentations=[ + L(T.ResizeShortestEdge)(short_edge_length=image_size, max_size=image_size), + ], + image_format="${....train.mapper.image_format}", + ), + num_workers=4, + ) + for name in refcoco_test_dataset_names +] + +dataloader.evaluators += [ + L(RefCOCOEvaluator)( + dataset_name=name, + ) + for name in refcoco_test_dataset_names +] diff --git a/approach/ovod/APE/configs/common/data/lviscocococostuff_o365_oid_refcoco_panoptic_lsj1024_cp.py b/approach/ovod/APE/configs/common/data/lviscocococostuff_o365_oid_refcoco_panoptic_lsj1024_cp.py new file mode 100644 index 0000000000000000000000000000000000000000..54554d0128886c70d0c7c5c9e3d2b24c49038c8e --- /dev/null +++ b/approach/ovod/APE/configs/common/data/lviscocococostuff_o365_oid_refcoco_panoptic_lsj1024_cp.py @@ -0,0 +1,207 @@ +import random + +import detectron2.data.transforms as T +from detectron2.config import LazyCall as L +from detectron2.data import ( + DatasetMapper, + MetadataCatalog, + build_detection_test_loader, + get_detection_dataset_dicts, +) +from detectron2.data.samplers import RepeatFactorTrainingSampler +from detectron2.evaluation import COCOEvaluator, LVISEvaluator, SemSegEvaluator +from omegaconf import OmegaConf +from ape.data import ( + DatasetMapper_detr_panoptic_copypaste, + build_detection_train_loader_multi_dataset_copypaste, + get_detection_dataset_dicts_multi_dataset_copypaste, +) +from ape.data.samplers import MultiDatasetTrainingSampler +from ape.evaluation import RefCOCOEvaluator +from ape.evaluation.oideval import OIDEvaluator + +dataloader = OmegaConf.create() + +image_size = 1024 + + +dataloader.train = L(build_detection_train_loader_multi_dataset_copypaste)( + dataset=L(get_detection_dataset_dicts_multi_dataset_copypaste)( + names=( + "lvis_v1_train+coco_panoptic_separated", + "objects365_train_fixname", + "openimages_v6_train_bbox_nogroup", + "refcoco-mixed", + ), + filter_emptys=[True, True, True, True], + copypastes=[True, False, False, False], + ), + dataset_bg=L(get_detection_dataset_dicts)(names=["lvis_v1_train+coco_panoptic_separated"]), + mapper=L(DatasetMapper_detr_panoptic_copypaste)( + is_train=True, + augmentations=[ + L(T.RandomFlip)(horizontal=True), # flip first + L(T.ResizeScale)( + min_scale=0.1, max_scale=1.0, target_height=image_size, target_width=image_size + ), + L(T.FixedSizeCrop)(crop_size=(image_size, image_size), pad=False), + ], + augmentations_with_crop=[ + L(T.RandomFlip)(horizontal=True), # flip first + L(T.ResizeScale)( + min_scale=0.1, max_scale=2.0, target_height=image_size, target_width=image_size + ), + L(T.FixedSizeCrop)(crop_size=(image_size, image_size), pad=False), + ], + image_format="RGB", + use_instance_mask=True, + recompute_boxes=True, + instance_mask_format="bitmask", + ignore_label=MetadataCatalog.get("coco_2017_train_panoptic_stuffonly").ignore_label, + stuff_classes_offset=1203, + stuff_classes_decomposition=True, + output_dir=None, + vis_period=12800, + dataset_names=[ + "lvis_v1_train+coco_panoptic_separated", + "objects365_train_fixname", + "openimages_v6_train_bbox_nogroup", + "refcoco-mixed", + ], + ), + sampler=lambda dataset_dicts: MultiDatasetTrainingSampler( + repeat_factors=MultiDatasetTrainingSampler.get_repeat_factors( + dataset_dicts=dataset_dicts, + num_datasets=4, + dataset_ratio=[1, 1, 1, 1], + use_rfs=[True, True, True, True], + use_cas=[False, False, False, False], + repeat_thresh=0.001, + cas_lambda=1.0, + ), + seed=random.randint(0, 2**31), + ), + sampler_bg=lambda dataset_dicts: RepeatFactorTrainingSampler( + repeat_factors=RepeatFactorTrainingSampler.repeat_factors_from_category_frequency( + dataset_dicts=dataset_dicts, repeat_thresh=0.001 + ), + seed=random.randint(0, 2**31), + ), + total_batch_size=16, + total_batch_size_list=[16, 16, 16, 16], + num_workers=4, + num_datasets=4, +) + +dataloader.test = L(build_detection_test_loader)( + dataset=L(get_detection_dataset_dicts)(names="lvis_v1_val", filter_empty=False), + mapper=L(DatasetMapper)( + is_train=False, + augmentations=[ + L(T.ResizeShortestEdge)(short_edge_length=image_size, max_size=image_size), + ], + image_format="${...train.mapper.image_format}", + ), + num_workers=4, +) + +dataloader.evaluator = L(LVISEvaluator)( + dataset_name="${..test.dataset.names}", + max_dets_per_image=300, +) + +dataloader.tests = [ + L(build_detection_test_loader)( + dataset=L(get_detection_dataset_dicts)( + names="coco_2017_val_panoptic_stuffonly", filter_empty=False + ), + mapper=L(DatasetMapper)( + is_train=False, + augmentations=[ + L(T.ResizeShortestEdge)(short_edge_length=image_size, max_size=image_size), + ], + image_format="${....train.mapper.image_format}", + ), + num_workers=4, + ), +] + +dataloader.evaluators = [ + L(SemSegEvaluator)( + dataset_name="coco_2017_val_panoptic_stuffonly", + ), +] + +dataloader.tests += [ + L(build_detection_test_loader)( + dataset=L(get_detection_dataset_dicts)(names="objects365_val_fixname", filter_empty=False), + mapper=L(DatasetMapper)( + is_train=False, + augmentations=[ + L(T.ResizeShortestEdge)(short_edge_length=image_size, max_size=image_size), + ], + image_format="${....train.mapper.image_format}", + ), + num_workers=4, + ), +] + +dataloader.evaluators += [ + L(COCOEvaluator)( + dataset_name="objects365_val_fixname", + tasks=("bbox",), + ), +] + +dataloader.tests += [ + L(build_detection_test_loader)( + dataset=L(get_detection_dataset_dicts)(names="openimages_v6_val_bbox", filter_empty=False), + mapper=L(DatasetMapper)( + is_train=False, + augmentations=[ + L(T.ResizeShortestEdge)(short_edge_length=image_size, max_size=image_size), + ], + image_format="${....train.mapper.image_format}", + ), + num_workers=4, + ), +] + +dataloader.evaluators += [ + L(OIDEvaluator)( + dataset_name="openimages_v6_val_bbox", + ), +] + +refcoco_test_dataset_names = [ + "refcoco-unc-val", + "refcoco-unc-testA", + "refcoco-unc-testB", + "refcocoplus-unc-val", + "refcocoplus-unc-testA", + "refcocoplus-unc-testB", + "refcocog-google-val", + "refcocog-umd-val", + "refcocog-umd-test", +] +dataloader.tests += [ + L(build_detection_test_loader)( + dataset=L(get_detection_dataset_dicts)(names=name, filter_empty=False), + mapper=L(DatasetMapper)( + is_train=False, + augmentations=[ + L(T.ResizeShortestEdge)(short_edge_length=image_size, max_size=image_size), + ], + image_format="${....train.mapper.image_format}", + ), + num_workers=4, + ) + for name in refcoco_test_dataset_names +] + +dataloader.evaluators += [ + L(RefCOCOEvaluator)( + dataset_name=name, + ) + for name in refcoco_test_dataset_names +] diff --git a/approach/ovod/APE/configs/common/data/lviscocococostuff_o365_oid_vg_refcoco_panoptic_lsj1024_cp.py b/approach/ovod/APE/configs/common/data/lviscocococostuff_o365_oid_vg_refcoco_panoptic_lsj1024_cp.py new file mode 100644 index 0000000000000000000000000000000000000000..ea742cfbd027594e3a85a207892991ff088284f8 --- /dev/null +++ b/approach/ovod/APE/configs/common/data/lviscocococostuff_o365_oid_vg_refcoco_panoptic_lsj1024_cp.py @@ -0,0 +1,270 @@ +import random + +import detectron2.data.transforms as T +from detectron2.config import LazyCall as L +from detectron2.data import ( + DatasetMapper, + MetadataCatalog, + build_detection_test_loader, + get_detection_dataset_dicts, +) +from detectron2.data.samplers import RepeatFactorTrainingSampler +from detectron2.evaluation import COCOEvaluator, LVISEvaluator, SemSegEvaluator +from omegaconf import OmegaConf +from ape.data import ( + DatasetMapper_detr_panoptic_copypaste, + build_detection_train_loader_multi_dataset_copypaste, + get_detection_dataset_dicts_multi_dataset_copypaste, +) +from ape.data.samplers import MultiDatasetTrainingSampler +from ape.evaluation import RefCOCOEvaluator +from ape.evaluation.oideval import OIDEvaluator + +dataloader = OmegaConf.create() + +image_size = 1024 + +dataloader.train = L(build_detection_train_loader_multi_dataset_copypaste)( + dataset=L(get_detection_dataset_dicts_multi_dataset_copypaste)( + names=( + "lvis_v1_train+coco_panoptic_separated", + "objects365_train_fixname", + "openimages_v6_train_bbox_nogroup", + "visualgenome_150_box_train", + "refcoco-mixed", + ), + filter_emptys=[True, True, True, True, True], + copypastes=[True, False, False, False, False], + ), + dataset_bg=L(get_detection_dataset_dicts)(names=["lvis_v1_train+coco_panoptic_separated"]), + mapper=L(DatasetMapper_detr_panoptic_copypaste)( + is_train=True, + augmentations=[ + L(T.RandomFlip)(horizontal=True), # flip first + L(T.ResizeScale)( + min_scale=0.1, max_scale=1.0, target_height=image_size, target_width=image_size + ), + L(T.FixedSizeCrop)(crop_size=(image_size, image_size), pad=False), + ], + augmentations_with_crop=[ + L(T.RandomFlip)(horizontal=True), # flip first + L(T.ResizeScale)( + min_scale=0.1, max_scale=2.0, target_height=image_size, target_width=image_size + ), + L(T.FixedSizeCrop)(crop_size=(image_size, image_size), pad=False), + ], + image_format="RGB", + use_instance_mask=True, + recompute_boxes=True, + instance_mask_format="bitmask", + ignore_label=MetadataCatalog.get("coco_2017_train_panoptic_stuffonly").ignore_label, + stuff_classes_offset=1203, + stuff_classes_decomposition=True, + output_dir=None, + vis_period=12800, + dataset_names="${..dataset.names}", + ), + sampler=lambda dataset_dicts: MultiDatasetTrainingSampler( + repeat_factors=MultiDatasetTrainingSampler.get_repeat_factors( + dataset_dicts=dataset_dicts, + num_datasets=5, + dataset_ratio=[1, 1, 1, 1, 1], + use_rfs=[True, True, True, True, False], + use_cas=[False, False, False, False, False], + repeat_thresh=0.001, + cas_lambda=1.0, + ), + seed=random.randint(0, 2**31), + ), + sampler_bg=lambda dataset_dicts: RepeatFactorTrainingSampler( + repeat_factors=RepeatFactorTrainingSampler.repeat_factors_from_category_frequency( + dataset_dicts=dataset_dicts, repeat_thresh=0.001 + ), + seed=random.randint(0, 2**31), + ), + total_batch_size=16, + total_batch_size_list=[16, 16, 16, 16, 16], + aspect_ratio_grouping=True, + num_workers=4, + num_datasets=5, +) + +dataloader.test = L(build_detection_test_loader)( + dataset=L(get_detection_dataset_dicts)(names="lvis_v1_val", filter_empty=False), + mapper=L(DatasetMapper)( + is_train=False, + augmentations=[ + L(T.ResizeShortestEdge)(short_edge_length=image_size, max_size=image_size), + ], + image_format="${...train.mapper.image_format}", + ), + num_workers=4, +) + +dataloader.evaluator = L(LVISEvaluator)( + dataset_name="${..test.dataset.names}", + max_dets_per_image=300, +) + +dataloader.tests = [ + L(build_detection_test_loader)( + dataset=L(get_detection_dataset_dicts)( + names="coco_2017_val_panoptic_stuffonly", filter_empty=False + ), + mapper=L(DatasetMapper)( + is_train=False, + augmentations=[ + L(T.ResizeShortestEdge)(short_edge_length=image_size, max_size=image_size), + ], + image_format="${....train.mapper.image_format}", + ), + num_workers=4, + ), +] + +dataloader.evaluators = [ + L(SemSegEvaluator)( + dataset_name="coco_2017_val_panoptic_stuffonly", + ), +] + +dataloader.tests += [ + L(build_detection_test_loader)( + dataset=L(get_detection_dataset_dicts)(names="lvis_v1_minival", filter_empty=False), + mapper=L(DatasetMapper)( + is_train=False, + augmentations=[ + L(T.ResizeShortestEdge)(short_edge_length=image_size, max_size=image_size), + ], + image_format="${....train.mapper.image_format}", + ), + num_workers=4, + ) +] + +dataloader.evaluators += [ + L(LVISEvaluator)( + dataset_name="lvis_v1_minival", + max_dets_per_image=300, + ) +] + +dataloader.tests += [ + L(build_detection_test_loader)( + dataset=L(get_detection_dataset_dicts)( + names="objects365_minival_fixname", filter_empty=False + ), + mapper=L(DatasetMapper)( + is_train=False, + augmentations=[ + L(T.ResizeShortestEdge)(short_edge_length=image_size, max_size=image_size), + ], + image_format="${....train.mapper.image_format}", + ), + num_workers=4, + ), +] + +dataloader.evaluators += [ + L(COCOEvaluator)( + dataset_name="objects365_minival_fixname", + tasks=("bbox",), + ), +] + +dataloader.tests += [ + L(build_detection_test_loader)( + dataset=L(get_detection_dataset_dicts)(names="objects365_val_fixname", filter_empty=False), + mapper=L(DatasetMapper)( + is_train=False, + augmentations=[ + L(T.ResizeShortestEdge)(short_edge_length=image_size, max_size=image_size), + ], + image_format="${....train.mapper.image_format}", + ), + num_workers=4, + ), +] + +dataloader.evaluators += [ + L(COCOEvaluator)( + dataset_name="objects365_val_fixname", + tasks=("bbox",), + ), +] + +dataloader.tests += [ + L(build_detection_test_loader)( + dataset=L(get_detection_dataset_dicts)(names="openimages_v6_val_bbox", filter_empty=False), + mapper=L(DatasetMapper)( + is_train=False, + augmentations=[ + L(T.ResizeShortestEdge)(short_edge_length=image_size, max_size=image_size), + ], + image_format="${....train.mapper.image_format}", + ), + num_workers=4, + ), +] + +dataloader.evaluators += [ + L(OIDEvaluator)( + dataset_name="openimages_v6_val_bbox", + ), +] + +dataloader.tests += [ + L(build_detection_test_loader)( + dataset=L(get_detection_dataset_dicts)( + names="visualgenome_150_box_val", filter_empty=False + ), + mapper=L(DatasetMapper)( + is_train=False, + augmentations=[ + L(T.ResizeShortestEdge)(short_edge_length=image_size, max_size=image_size), + ], + image_format="${....train.mapper.image_format}", + ), + num_workers=4, + ), +] + +dataloader.evaluators += [ + L(COCOEvaluator)( + dataset_name="visualgenome_150_box_val", + tasks=("bbox",), + ), +] + +refcoco_test_dataset_names = [ + "refcoco-unc-val", + "refcoco-unc-testA", + "refcoco-unc-testB", + "refcocoplus-unc-val", + "refcocoplus-unc-testA", + "refcocoplus-unc-testB", + "refcocog-google-val", + "refcocog-umd-val", + "refcocog-umd-test", +] +dataloader.tests += [ + L(build_detection_test_loader)( + dataset=L(get_detection_dataset_dicts)(names=name, filter_empty=False), + mapper=L(DatasetMapper)( + is_train=False, + augmentations=[ + L(T.ResizeShortestEdge)(short_edge_length=image_size, max_size=image_size), + ], + image_format="${....train.mapper.image_format}", + ), + num_workers=4, + ) + for name in refcoco_test_dataset_names +] + +dataloader.evaluators += [ + L(RefCOCOEvaluator)( + dataset_name=name, + ) + for name in refcoco_test_dataset_names +] diff --git a/approach/ovod/APE/configs/common/data/lviscocococostuff_o365_oid_vgr_sa1b_refcoco_group_by_image_gqa_phrasecut_panoptic_lsj1024_cp.py b/approach/ovod/APE/configs/common/data/lviscocococostuff_o365_oid_vgr_sa1b_refcoco_group_by_image_gqa_phrasecut_panoptic_lsj1024_cp.py new file mode 100644 index 0000000000000000000000000000000000000000..a24df7d78e54dfdb563f0cd779ac38b338c9782d --- /dev/null +++ b/approach/ovod/APE/configs/common/data/lviscocococostuff_o365_oid_vgr_sa1b_refcoco_group_by_image_gqa_phrasecut_panoptic_lsj1024_cp.py @@ -0,0 +1,219 @@ +import random + +import detectron2.data.transforms as T +from detectron2.config import LazyCall as L +from detectron2.data import ( + DatasetMapper, + MetadataCatalog, + build_detection_test_loader, + get_detection_dataset_dicts, +) +from detectron2.data.samplers import RepeatFactorTrainingSampler +from detectron2.evaluation import COCOEvaluator, LVISEvaluator, SemSegEvaluator +from omegaconf import OmegaConf +from ape.data import ( + DatasetMapper_detr_panoptic_copypaste, + build_detection_train_loader_multi_dataset_copypaste, + get_detection_dataset_dicts_multi_dataset_copypaste, +) +from ape.data.samplers import MultiDatasetTrainingSampler +from ape.evaluation import RefCOCOEvaluator +from ape.evaluation.oideval import OIDEvaluator + +dataloader = OmegaConf.create() + +image_size = 1024 + +dataloader.train = L(build_detection_train_loader_multi_dataset_copypaste)( + dataset=L(get_detection_dataset_dicts_multi_dataset_copypaste)( + names=( + "lvis_v1_train+coco_panoptic_separated", + "objects365_train_fixname", + "openimages_v6_train_bbox_nogroup", + "visualgenome_77962_box_and_region", + "sa1b", + "refcoco-mixed_group-by-image", + "gqa_region_train", + "phrasecut_train", + ), + filter_emptys=[True, True, True, True, False, True, True, True], + copypastes=[True, False, False, False, False, False, False, False], + ), + dataset_bg=L(get_detection_dataset_dicts)(names=["lvis_v1_train+coco_panoptic_separated"]), + mapper=L(DatasetMapper_detr_panoptic_copypaste)( + is_train=True, + augmentations=[ + L(T.RandomFlip)(horizontal=True), # flip first + L(T.ResizeScale)( + min_scale=0.1, max_scale=1.0, target_height=image_size, target_width=image_size + ), + L(T.FixedSizeCrop)(crop_size=(image_size, image_size), pad=False), + ], + augmentations_with_crop=[ + L(T.RandomFlip)(horizontal=True), # flip first + L(T.ResizeScale)( + min_scale=0.1, max_scale=2.0, target_height=image_size, target_width=image_size + ), + L(T.FixedSizeCrop)(crop_size=(image_size, image_size), pad=False), + ], + image_format="RGB", + use_instance_mask=True, + recompute_boxes=True, + instance_mask_format="bitmask", + ignore_label=MetadataCatalog.get("coco_2017_train_panoptic_stuffonly").ignore_label, + stuff_classes_offset=1203, + stuff_classes_decomposition=True, + output_dir=None, + vis_period=12800, + dataset_names=[ + "lvis_v1_train+coco_panoptic_separated", + "objects365_train_fixname", + "openimages_v6_train_bbox_nogroup", + "visualgenome_77962_box_and_region", + "sa1b", + "refcoco-mixed_group-by-image", + "gqa_region_train", + "phrasecut_train", + ], + max_num_phrase=100, + nms_thresh_phrase=0.6, + ), + sampler=lambda dataset_dicts: MultiDatasetTrainingSampler( + repeat_factors=MultiDatasetTrainingSampler.get_repeat_factors( + dataset_dicts=dataset_dicts, + num_datasets=8, + dataset_ratio=[1, 1, 1, 1, 1, 0.2, 0.1, 0.2], + use_rfs=[True, True, True, False, False, False, False, False], + use_cas=[False, False, False, False, False, False, False, False], + repeat_thresh=0.001, + cas_lambda=1.0, + ), + seed=random.randint(0, 2**31), + ), + sampler_bg=lambda dataset_dicts: RepeatFactorTrainingSampler( + repeat_factors=RepeatFactorTrainingSampler.repeat_factors_from_category_frequency( + dataset_dicts=dataset_dicts, repeat_thresh=0.001 + ), + seed=random.randint(0, 2**31), + ), + total_batch_size=16, + total_batch_size_list=[16, 16, 16, 16, 16, 16, 16, 16], + aspect_ratio_grouping=True, + num_workers=2, + num_datasets=8, +) + +dataloader.test = L(build_detection_test_loader)( + dataset=L(get_detection_dataset_dicts)(names="lvis_v1_val", filter_empty=False), + mapper=L(DatasetMapper)( + is_train=False, + augmentations=[ + L(T.ResizeShortestEdge)(short_edge_length=image_size, max_size=image_size), + ], + image_format="${...train.mapper.image_format}", + ), + num_workers=4, +) + +dataloader.evaluator = L(LVISEvaluator)( + dataset_name="${..test.dataset.names}", + max_dets_per_image=300, +) + +dataloader.tests = [ + L(build_detection_test_loader)( + dataset=L(get_detection_dataset_dicts)( + names="coco_2017_val_panoptic_stuffonly", filter_empty=False + ), + mapper=L(DatasetMapper)( + is_train=False, + augmentations=[ + L(T.ResizeShortestEdge)(short_edge_length=image_size, max_size=image_size), + ], + image_format="${....train.mapper.image_format}", + ), + num_workers=4, + ), +] + +dataloader.evaluators = [ + L(SemSegEvaluator)( + dataset_name="coco_2017_val_panoptic_stuffonly", + ), +] + +dataloader.tests += [ + L(build_detection_test_loader)( + dataset=L(get_detection_dataset_dicts)(names="objects365_val_fixname", filter_empty=False), + mapper=L(DatasetMapper)( + is_train=False, + augmentations=[ + L(T.ResizeShortestEdge)(short_edge_length=image_size, max_size=image_size), + ], + image_format="${....train.mapper.image_format}", + ), + num_workers=4, + ), +] + +dataloader.evaluators += [ + L(COCOEvaluator)( + dataset_name="objects365_val_fixname", + tasks=("bbox",), + ), +] + +dataloader.tests += [ + L(build_detection_test_loader)( + dataset=L(get_detection_dataset_dicts)(names="openimages_v6_val_bbox", filter_empty=False), + mapper=L(DatasetMapper)( + is_train=False, + augmentations=[ + L(T.ResizeShortestEdge)(short_edge_length=image_size, max_size=image_size), + ], + image_format="${....train.mapper.image_format}", + ), + num_workers=4, + ), +] + +dataloader.evaluators += [ + L(OIDEvaluator)( + dataset_name="openimages_v6_val_bbox", + ), +] + + + +refcoco_test_dataset_names = [ + "refcoco-unc-val", + "refcoco-unc-testA", + "refcoco-unc-testB", + "refcocoplus-unc-val", + "refcocoplus-unc-testA", + "refcocoplus-unc-testB", + "refcocog-google-val", + "refcocog-umd-val", + "refcocog-umd-test", +] +dataloader.tests += [ + L(build_detection_test_loader)( + dataset=L(get_detection_dataset_dicts)(names=name, filter_empty=False), + mapper=L(DatasetMapper)( + is_train=False, + augmentations=[ + L(T.ResizeShortestEdge)(short_edge_length=image_size, max_size=image_size), + ], + image_format="${....train.mapper.image_format}", + ), + num_workers=4, + ) + for name in refcoco_test_dataset_names +] + +dataloader.evaluators += [ + L(RefCOCOEvaluator)( + dataset_name=name, + ) + for name in refcoco_test_dataset_names +] diff --git a/approach/ovod/APE/configs/common/data/lviscocococostuff_o365_oid_vgr_sa1b_refcoco_group_by_image_gqa_phrasecut_panoptic_lsj1536_cp.py b/approach/ovod/APE/configs/common/data/lviscocococostuff_o365_oid_vgr_sa1b_refcoco_group_by_image_gqa_phrasecut_panoptic_lsj1536_cp.py new file mode 100644 index 0000000000000000000000000000000000000000..81a6f56265de23b9b9928a640f6222dc44eee3ba --- /dev/null +++ b/approach/ovod/APE/configs/common/data/lviscocococostuff_o365_oid_vgr_sa1b_refcoco_group_by_image_gqa_phrasecut_panoptic_lsj1536_cp.py @@ -0,0 +1,219 @@ +import random + +import detectron2.data.transforms as T +from detectron2.config import LazyCall as L +from detectron2.data import ( + DatasetMapper, + MetadataCatalog, + build_detection_test_loader, + get_detection_dataset_dicts, +) +from detectron2.data.samplers import RepeatFactorTrainingSampler +from detectron2.evaluation import COCOEvaluator, LVISEvaluator, SemSegEvaluator +from omegaconf import OmegaConf +from ape.data import ( + DatasetMapper_detr_panoptic_copypaste, + build_detection_train_loader_multi_dataset_copypaste, + get_detection_dataset_dicts_multi_dataset_copypaste, +) +from ape.data.samplers import MultiDatasetTrainingSampler +from ape.evaluation import RefCOCOEvaluator +from ape.evaluation.oideval import OIDEvaluator + +dataloader = OmegaConf.create() + +image_size = 1536 + +dataloader.train = L(build_detection_train_loader_multi_dataset_copypaste)( + dataset=L(get_detection_dataset_dicts_multi_dataset_copypaste)( + names=( + "lvis_v1_train+coco_panoptic_separated", + "objects365_train_fixname", + "openimages_v6_train_bbox_nogroup", + "visualgenome_77962_box_and_region", + "sa1b", + "refcoco-mixed_group-by-image", + "gqa_region_train", + "phrasecut_train", + ), + filter_emptys=[True, True, True, True, False, True, True, True], + copypastes=[True, False, False, False, False, False, False, False], + ), + dataset_bg=L(get_detection_dataset_dicts)(names=["lvis_v1_train+coco_panoptic_separated"]), + mapper=L(DatasetMapper_detr_panoptic_copypaste)( + is_train=True, + augmentations=[ + L(T.RandomFlip)(horizontal=True), # flip first + L(T.ResizeScale)( + min_scale=0.1, max_scale=1.0, target_height=image_size, target_width=image_size + ), + L(T.FixedSizeCrop)(crop_size=(image_size, image_size), pad=False), + ], + augmentations_with_crop=[ + L(T.RandomFlip)(horizontal=True), # flip first + L(T.ResizeScale)( + min_scale=0.1, max_scale=2.0, target_height=image_size, target_width=image_size + ), + L(T.FixedSizeCrop)(crop_size=(image_size, image_size), pad=False), + ], + image_format="RGB", + use_instance_mask=True, + recompute_boxes=True, + instance_mask_format="bitmask", + ignore_label=MetadataCatalog.get("coco_2017_train_panoptic_stuffonly").ignore_label, + stuff_classes_offset=1203, + stuff_classes_decomposition=True, + output_dir=None, + vis_period=12800, + dataset_names=[ + "lvis_v1_train+coco_panoptic_separated", + "objects365_train_fixname", + "openimages_v6_train_bbox_nogroup", + "visualgenome_77962_box_and_region", + "sa1b", + "refcoco-mixed_group-by-image", + "gqa_region_train", + "phrasecut_train", + ], + max_num_phrase=100, + nms_thresh_phrase=0.6, + ), + sampler=lambda dataset_dicts: MultiDatasetTrainingSampler( + repeat_factors=MultiDatasetTrainingSampler.get_repeat_factors( + dataset_dicts=dataset_dicts, + num_datasets=8, + dataset_ratio=[1, 1, 1, 1, 1, 0.2, 0.1, 0.2], + use_rfs=[True, True, True, False, False, False, False, False], + use_cas=[False, False, False, False, False, False, False, False], + repeat_thresh=0.001, + cas_lambda=1.0, + ), + seed=random.randint(0, 2**31), + ), + sampler_bg=lambda dataset_dicts: RepeatFactorTrainingSampler( + repeat_factors=RepeatFactorTrainingSampler.repeat_factors_from_category_frequency( + dataset_dicts=dataset_dicts, repeat_thresh=0.001 + ), + seed=random.randint(0, 2**31), + ), + total_batch_size=16, + total_batch_size_list=[16, 16, 16, 16, 16, 16, 16, 16], + aspect_ratio_grouping=True, + num_workers=2, + num_datasets=8, +) + +dataloader.test = L(build_detection_test_loader)( + dataset=L(get_detection_dataset_dicts)(names="lvis_v1_val", filter_empty=False), + mapper=L(DatasetMapper)( + is_train=False, + augmentations=[ + L(T.ResizeShortestEdge)(short_edge_length=image_size, max_size=image_size), + ], + image_format="${...train.mapper.image_format}", + ), + num_workers=4, +) + +dataloader.evaluator = L(LVISEvaluator)( + dataset_name="${..test.dataset.names}", + max_dets_per_image=300, +) + +dataloader.tests = [ + L(build_detection_test_loader)( + dataset=L(get_detection_dataset_dicts)( + names="coco_2017_val_panoptic_stuffonly", filter_empty=False + ), + mapper=L(DatasetMapper)( + is_train=False, + augmentations=[ + L(T.ResizeShortestEdge)(short_edge_length=image_size, max_size=image_size), + ], + image_format="${....train.mapper.image_format}", + ), + num_workers=4, + ), +] + +dataloader.evaluators = [ + L(SemSegEvaluator)( + dataset_name="coco_2017_val_panoptic_stuffonly", + ), +] + +dataloader.tests += [ + L(build_detection_test_loader)( + dataset=L(get_detection_dataset_dicts)(names="objects365_val_fixname", filter_empty=False), + mapper=L(DatasetMapper)( + is_train=False, + augmentations=[ + L(T.ResizeShortestEdge)(short_edge_length=image_size, max_size=image_size), + ], + image_format="${....train.mapper.image_format}", + ), + num_workers=4, + ), +] + +dataloader.evaluators += [ + L(COCOEvaluator)( + dataset_name="objects365_val_fixname", + tasks=("bbox",), + ), +] + +dataloader.tests += [ + L(build_detection_test_loader)( + dataset=L(get_detection_dataset_dicts)(names="openimages_v6_val_bbox", filter_empty=False), + mapper=L(DatasetMapper)( + is_train=False, + augmentations=[ + L(T.ResizeShortestEdge)(short_edge_length=image_size, max_size=image_size), + ], + image_format="${....train.mapper.image_format}", + ), + num_workers=4, + ), +] + +dataloader.evaluators += [ + L(OIDEvaluator)( + dataset_name="openimages_v6_val_bbox", + ), +] + + + +refcoco_test_dataset_names = [ + "refcoco-unc-val", + "refcoco-unc-testA", + "refcoco-unc-testB", + "refcocoplus-unc-val", + "refcocoplus-unc-testA", + "refcocoplus-unc-testB", + "refcocog-google-val", + "refcocog-umd-val", + "refcocog-umd-test", +] +dataloader.tests += [ + L(build_detection_test_loader)( + dataset=L(get_detection_dataset_dicts)(names=name, filter_empty=False), + mapper=L(DatasetMapper)( + is_train=False, + augmentations=[ + L(T.ResizeShortestEdge)(short_edge_length=image_size, max_size=image_size), + ], + image_format="${....train.mapper.image_format}", + ), + num_workers=4, + ) + for name in refcoco_test_dataset_names +] + +dataloader.evaluators += [ + L(RefCOCOEvaluator)( + dataset_name=name, + ) + for name in refcoco_test_dataset_names +] diff --git a/approach/ovod/APE/configs/common/data/lviscocococostuff_o365_oid_vgr_sa1b_refcoco_group_by_image_panoptic_lsj1024_cp.py b/approach/ovod/APE/configs/common/data/lviscocococostuff_o365_oid_vgr_sa1b_refcoco_group_by_image_panoptic_lsj1024_cp.py new file mode 100644 index 0000000000000000000000000000000000000000..790d07bf5aec2d509e6e0f7e058c2d8ef867cb80 --- /dev/null +++ b/approach/ovod/APE/configs/common/data/lviscocococostuff_o365_oid_vgr_sa1b_refcoco_group_by_image_panoptic_lsj1024_cp.py @@ -0,0 +1,252 @@ +import random + +import detectron2.data.transforms as T +from detectron2.config import LazyCall as L +from detectron2.data import ( + DatasetMapper, + MetadataCatalog, + build_detection_test_loader, + get_detection_dataset_dicts, +) +from detectron2.data.samplers import RepeatFactorTrainingSampler +from detectron2.evaluation import COCOEvaluator, LVISEvaluator, SemSegEvaluator +from omegaconf import OmegaConf +from ape.data import ( + DatasetMapper_detr_panoptic_copypaste, + build_detection_train_loader_multi_dataset_copypaste, + get_detection_dataset_dicts_multi_dataset_copypaste, +) +from ape.data.samplers import MultiDatasetTrainingSampler +from ape.evaluation import RefCOCOEvaluator +from ape.evaluation.oideval import OIDEvaluator + +dataloader = OmegaConf.create() + +image_size = 1024 + +dataloader.train = L(build_detection_train_loader_multi_dataset_copypaste)( + dataset=L(get_detection_dataset_dicts_multi_dataset_copypaste)( + names=( + "lvis_v1_train+coco_panoptic_separated", + "objects365_train_fixname", + "openimages_v6_train_bbox_nogroup", + "visualgenome_77962_box_and_region", + "sa1b_4m", + "refcoco-mixed_group-by-image", + ), + filter_emptys=[True, True, True, True, False, True], + copypastes=[True, False, False, False, False, False], + ), + dataset_bg=L(get_detection_dataset_dicts)(names=["lvis_v1_train+coco_panoptic_separated"]), + mapper=L(DatasetMapper_detr_panoptic_copypaste)( + is_train=True, + augmentations=[ + L(T.RandomFlip)(horizontal=True), # flip first + L(T.ResizeScale)( + min_scale=0.1, max_scale=1.0, target_height=image_size, target_width=image_size + ), + L(T.FixedSizeCrop)(crop_size=(image_size, image_size), pad=False), + ], + augmentations_with_crop=[ + L(T.RandomFlip)(horizontal=True), # flip first + L(T.ResizeScale)( + min_scale=0.1, max_scale=2.0, target_height=image_size, target_width=image_size + ), + L(T.FixedSizeCrop)(crop_size=(image_size, image_size), pad=False), + ], + image_format="RGB", + use_instance_mask=True, + recompute_boxes=True, + instance_mask_format="bitmask", + ignore_label=MetadataCatalog.get("coco_2017_train_panoptic_stuffonly").ignore_label, + stuff_classes_offset=1203, + stuff_classes_decomposition=True, + output_dir=None, + vis_period=12800, + dataset_names="${..dataset.names}", + max_num_phrase=128, + nms_thresh_phrase=0.6, + ), + sampler=lambda dataset_dicts: MultiDatasetTrainingSampler( + repeat_factors=MultiDatasetTrainingSampler.get_repeat_factors( + dataset_dicts=dataset_dicts, + num_datasets=6, + dataset_ratio=[1, 1, 1, 1, 1, 0.1], + use_rfs=[True, True, True, False, False, False], + use_cas=[False, False, False, False, False, False], + repeat_thresh=0.001, + cas_lambda=1.0, + ), + seed=random.randint(0, 2**31), + ), + sampler_bg=lambda dataset_dicts: RepeatFactorTrainingSampler( + repeat_factors=RepeatFactorTrainingSampler.repeat_factors_from_category_frequency( + dataset_dicts=dataset_dicts, repeat_thresh=0.001 + ), + seed=random.randint(0, 2**31), + ), + total_batch_size=16, + total_batch_size_list=[16, 16, 16, 16, 16, 16], + aspect_ratio_grouping=True, + num_workers=4, + num_datasets=6, +) + +dataloader.test = L(build_detection_test_loader)( + dataset=L(get_detection_dataset_dicts)(names="lvis_v1_val", filter_empty=False), + mapper=L(DatasetMapper)( + is_train=False, + augmentations=[ + L(T.ResizeShortestEdge)(short_edge_length=image_size, max_size=image_size), + ], + image_format="${...train.mapper.image_format}", + ), + num_workers=4, +) + +dataloader.evaluator = L(LVISEvaluator)( + dataset_name="${..test.dataset.names}", + max_dets_per_image=300, +) + +dataloader.tests = [ + L(build_detection_test_loader)( + dataset=L(get_detection_dataset_dicts)( + names="coco_2017_val_panoptic_stuffonly", filter_empty=False + ), + mapper=L(DatasetMapper)( + is_train=False, + augmentations=[ + L(T.ResizeShortestEdge)(short_edge_length=image_size, max_size=image_size), + ], + image_format="${....train.mapper.image_format}", + ), + num_workers=4, + ), +] + +dataloader.evaluators = [ + L(SemSegEvaluator)( + dataset_name="coco_2017_val_panoptic_stuffonly", + ), +] + +dataloader.tests += [ + L(build_detection_test_loader)( + dataset=L(get_detection_dataset_dicts)(names="lvis_v1_minival", filter_empty=False), + mapper=L(DatasetMapper)( + is_train=False, + augmentations=[ + L(T.ResizeShortestEdge)(short_edge_length=image_size, max_size=image_size), + ], + image_format="${....train.mapper.image_format}", + ), + num_workers=4, + ) +] + +dataloader.evaluators += [ + L(LVISEvaluator)( + dataset_name="lvis_v1_minival", + max_dets_per_image=300, + ) +] + +dataloader.tests += [ + L(build_detection_test_loader)( + dataset=L(get_detection_dataset_dicts)( + names="objects365_minival_fixname", filter_empty=False + ), + mapper=L(DatasetMapper)( + is_train=False, + augmentations=[ + L(T.ResizeShortestEdge)(short_edge_length=image_size, max_size=image_size), + ], + image_format="${....train.mapper.image_format}", + ), + num_workers=4, + ), +] + +dataloader.evaluators += [ + L(COCOEvaluator)( + dataset_name="objects365_minival_fixname", + tasks=("bbox",), + ), +] + +dataloader.tests += [ + L(build_detection_test_loader)( + dataset=L(get_detection_dataset_dicts)(names="objects365_val_fixname", filter_empty=False), + mapper=L(DatasetMapper)( + is_train=False, + augmentations=[ + L(T.ResizeShortestEdge)(short_edge_length=image_size, max_size=image_size), + ], + image_format="${....train.mapper.image_format}", + ), + num_workers=4, + ), +] + +dataloader.evaluators += [ + L(COCOEvaluator)( + dataset_name="objects365_val_fixname", + tasks=("bbox",), + ), +] + +dataloader.tests += [ + L(build_detection_test_loader)( + dataset=L(get_detection_dataset_dicts)(names="openimages_v6_val_bbox", filter_empty=False), + mapper=L(DatasetMapper)( + is_train=False, + augmentations=[ + L(T.ResizeShortestEdge)(short_edge_length=image_size, max_size=image_size), + ], + image_format="${....train.mapper.image_format}", + ), + num_workers=4, + ), +] + +dataloader.evaluators += [ + L(OIDEvaluator)( + dataset_name="openimages_v6_val_bbox", + ), +] + + + +refcoco_test_dataset_names = [ + "refcoco-unc-val", + "refcoco-unc-testA", + "refcoco-unc-testB", + "refcocoplus-unc-val", + "refcocoplus-unc-testA", + "refcocoplus-unc-testB", + "refcocog-google-val", + "refcocog-umd-val", + "refcocog-umd-test", +] +dataloader.tests += [ + L(build_detection_test_loader)( + dataset=L(get_detection_dataset_dicts)(names=name, filter_empty=False), + mapper=L(DatasetMapper)( + is_train=False, + augmentations=[ + L(T.ResizeShortestEdge)(short_edge_length=image_size, max_size=image_size), + ], + image_format="${....train.mapper.image_format}", + ), + num_workers=4, + ) + for name in refcoco_test_dataset_names +] + +dataloader.evaluators += [ + L(RefCOCOEvaluator)( + dataset_name=name, + ) + for name in refcoco_test_dataset_names +] diff --git a/approach/ovod/APE/configs/common/data/lviscocococostuff_panoptic_lsj1024_cp.py b/approach/ovod/APE/configs/common/data/lviscocococostuff_panoptic_lsj1024_cp.py new file mode 100644 index 0000000000000000000000000000000000000000..0f978de79f3043dd4aa8c3d0b912c7d82b0ed16f --- /dev/null +++ b/approach/ovod/APE/configs/common/data/lviscocococostuff_panoptic_lsj1024_cp.py @@ -0,0 +1,106 @@ +import detectron2.data.transforms as T +from detectron2.config import LazyCall as L +from detectron2.data import ( + DatasetMapper, + MetadataCatalog, + build_detection_test_loader, + get_detection_dataset_dicts, +) +from detectron2.data.samplers import RepeatFactorTrainingSampler +from detectron2.evaluation import LVISEvaluator, SemSegEvaluator +from omegaconf import OmegaConf +from ape.data import ( + DatasetMapper_detr_panoptic_copypaste, + build_detection_train_loader_copypaste, + get_detection_dataset_dicts_copypaste, +) + +dataloader = OmegaConf.create() + +image_size = 1024 + +dataloader.train = L(build_detection_train_loader_copypaste)( + dataset=L(get_detection_dataset_dicts_copypaste)( + names="lvis_v1_train+coco_panoptic_separated", copypastes=[True] + ), + dataset_bg=L(get_detection_dataset_dicts)(names=["lvis_v1_train+coco_panoptic_separated"]), + mapper=L(DatasetMapper_detr_panoptic_copypaste)( + is_train=True, + augmentations=[ + L(T.RandomFlip)(horizontal=True), # flip first + L(T.ResizeScale)( + min_scale=0.1, max_scale=1.0, target_height=image_size, target_width=image_size + ), + L(T.FixedSizeCrop)(crop_size=(image_size, image_size), pad=False), + ], + augmentations_with_crop=[ + L(T.RandomFlip)(horizontal=True), # flip first + L(T.ResizeScale)( + min_scale=0.1, max_scale=2.0, target_height=image_size, target_width=image_size + ), + L(T.FixedSizeCrop)(crop_size=(image_size, image_size), pad=False), + ], + image_format="RGB", + use_instance_mask=True, + recompute_boxes=True, + instance_mask_format="bitmask", + ignore_label=MetadataCatalog.get("coco_2017_train_panoptic_stuffonly").ignore_label, + stuff_classes_offset=1203, + stuff_classes_decomposition=True, + output_dir=None, + vis_period=12800, + dataset_names=["lvis_v1_train+coco_panoptic_separated"], + ), + sampler=L(RepeatFactorTrainingSampler)( + repeat_factors=L(RepeatFactorTrainingSampler.repeat_factors_from_category_frequency)( + dataset_dicts="${dataloader.train.dataset}", repeat_thresh=0.001 + ) + ), + sampler_bg=L(RepeatFactorTrainingSampler)( + repeat_factors=L(RepeatFactorTrainingSampler.repeat_factors_from_category_frequency)( + dataset_dicts="${dataloader.train.dataset_bg}", repeat_thresh=0.001 + ), + ), + total_batch_size=16, + aspect_ratio_grouping=True, + num_workers=16, +) + +dataloader.test = L(build_detection_test_loader)( + dataset=L(get_detection_dataset_dicts)(names="lvis_v1_val", filter_empty=False), + mapper=L(DatasetMapper)( + is_train=False, + augmentations=[ + L(T.ResizeShortestEdge)(short_edge_length=image_size, max_size=image_size), + ], + image_format="${...train.mapper.image_format}", + ), + num_workers=4, +) + +dataloader.evaluator = L(LVISEvaluator)( + dataset_name="${..test.dataset.names}", + max_dets_per_image=300, +) + +dataloader.tests = [ + L(build_detection_test_loader)( + dataset=L(get_detection_dataset_dicts)( + names="coco_2017_val_panoptic_stuffonly", filter_empty=False + ), + mapper=L(DatasetMapper)( + is_train=False, + augmentations=[ + L(T.ResizeShortestEdge)(short_edge_length=image_size, max_size=image_size), + ], + image_format="${....train.mapper.image_format}", + ), + num_workers=4, + ), +] + +dataloader.evaluators = [ + L(SemSegEvaluator)( + dataset_name="coco_2017_val_panoptic_stuffonly", + ), +] diff --git a/approach/ovod/APE/configs/common/data/lviscocococostuff_refcoco_group_by_image_panoptic_lsj1024_cp.py b/approach/ovod/APE/configs/common/data/lviscocococostuff_refcoco_group_by_image_panoptic_lsj1024_cp.py new file mode 100644 index 0000000000000000000000000000000000000000..502b648063fb03a1950ea402c4b34b67c25c3bc7 --- /dev/null +++ b/approach/ovod/APE/configs/common/data/lviscocococostuff_refcoco_group_by_image_panoptic_lsj1024_cp.py @@ -0,0 +1,157 @@ +import random + +import detectron2.data.transforms as T +from detectron2.config import LazyCall as L +from detectron2.data import ( + DatasetMapper, + MetadataCatalog, + build_detection_test_loader, + get_detection_dataset_dicts, +) +from detectron2.data.samplers import RepeatFactorTrainingSampler +from detectron2.evaluation import LVISEvaluator, SemSegEvaluator +from omegaconf import OmegaConf +from ape.data import ( + DatasetMapper_detr_panoptic_copypaste, + build_detection_train_loader_multi_dataset_copypaste, + get_detection_dataset_dicts_multi_dataset_copypaste, +) +from ape.data.samplers import MultiDatasetTrainingSampler +from ape.evaluation import RefCOCOEvaluator + +dataloader = OmegaConf.create() + +image_size = 1024 + +dataloader.train = L(build_detection_train_loader_multi_dataset_copypaste)( + dataset=L(get_detection_dataset_dicts_multi_dataset_copypaste)( + names=("lvis_v1_train+coco_panoptic_separated", "refcoco-mixed_group-by-image"), + filter_emptys=[True, True], + copypastes=[True, False], + ), + dataset_bg=L(get_detection_dataset_dicts)(names=["lvis_v1_train+coco_panoptic_separated"]), + mapper=L(DatasetMapper_detr_panoptic_copypaste)( + is_train=True, + augmentations=[ + L(T.RandomFlip)(horizontal=True), # flip first + L(T.ResizeScale)( + min_scale=0.1, max_scale=1.0, target_height=image_size, target_width=image_size + ), + L(T.FixedSizeCrop)(crop_size=(image_size, image_size), pad=False), + ], + augmentations_with_crop=[ + L(T.RandomFlip)(horizontal=True), # flip first + L(T.ResizeScale)( + min_scale=0.1, max_scale=2.0, target_height=image_size, target_width=image_size + ), + L(T.FixedSizeCrop)(crop_size=(image_size, image_size), pad=False), + ], + image_format="RGB", + use_instance_mask=True, + recompute_boxes=True, + instance_mask_format="bitmask", + ignore_label=MetadataCatalog.get("coco_2017_train_panoptic_stuffonly").ignore_label, + stuff_classes_offset=1203, + stuff_classes_decomposition=True, + output_dir=None, + vis_period=12800, + dataset_names=["lvis_v1_train+coco_panoptic_separated", "refcoco-mixed_group-by-image"], + nms_thresh_phrase=0.9, + max_num_phrase=1, + ), + sampler=lambda dataset_dicts: MultiDatasetTrainingSampler( + repeat_factors=MultiDatasetTrainingSampler.get_repeat_factors( + dataset_dicts=dataset_dicts, + num_datasets=2, + dataset_ratio=[1, 1], + use_rfs=[True, True], + use_cas=[False, False], + repeat_thresh=0.001, + cas_lambda=1.0, + ), + seed=random.randint(0, 2**31), + ), + sampler_bg=lambda dataset_dicts: RepeatFactorTrainingSampler( + repeat_factors=RepeatFactorTrainingSampler.repeat_factors_from_category_frequency( + dataset_dicts=dataset_dicts, repeat_thresh=0.001 + ), + seed=random.randint(0, 2**31), + ), + total_batch_size=16, + total_batch_size_list=[16, 16], + aspect_ratio_grouping=True, + num_workers=4, + num_datasets=2, +) + +dataloader.test = L(build_detection_test_loader)( + dataset=L(get_detection_dataset_dicts)(names="lvis_v1_val", filter_empty=False), + mapper=L(DatasetMapper)( + is_train=False, + augmentations=[ + L(T.ResizeShortestEdge)(short_edge_length=image_size, max_size=image_size), + ], + image_format="${...train.mapper.image_format}", + ), + num_workers=4, +) + +dataloader.evaluator = L(LVISEvaluator)( + dataset_name="${..test.dataset.names}", + max_dets_per_image=300, +) + +dataloader.tests = [ + L(build_detection_test_loader)( + dataset=L(get_detection_dataset_dicts)( + names="coco_2017_val_panoptic_stuffonly", filter_empty=False + ), + mapper=L(DatasetMapper)( + is_train=False, + augmentations=[ + L(T.ResizeShortestEdge)(short_edge_length=image_size, max_size=image_size), + ], + image_format="${....train.mapper.image_format}", + ), + num_workers=4, + ), +] + +dataloader.evaluators = [ + L(SemSegEvaluator)( + dataset_name="coco_2017_val_panoptic_stuffonly", + ), +] + +refcoco_test_dataset_names = [ + "refcoco-unc-val", + "refcoco-unc-testA", + "refcoco-unc-testB", + "refcocoplus-unc-val", + "refcocoplus-unc-testA", + "refcocoplus-unc-testB", + "refcocog-google-val", + "refcocog-umd-val", + "refcocog-umd-test", +] +dataloader.tests += [ + L(build_detection_test_loader)( + dataset=L(get_detection_dataset_dicts)(names=name, filter_empty=False), + mapper=L(DatasetMapper)( + is_train=False, + augmentations=[ + L(T.ResizeShortestEdge)(short_edge_length=image_size, max_size=image_size), + ], + image_format="${....train.mapper.image_format}", + ), + num_workers=4, + ) + for name in refcoco_test_dataset_names +] + +dataloader.evaluators += [ + L(RefCOCOEvaluator)( + dataset_name=name, + ) + for name in refcoco_test_dataset_names +] diff --git a/approach/ovod/APE/configs/common/data/lviscocococostuff_refcoco_panoptic_lsj1024.py b/approach/ovod/APE/configs/common/data/lviscocococostuff_refcoco_panoptic_lsj1024.py new file mode 100644 index 0000000000000000000000000000000000000000..2483396ebe117e3cd3f4bedfbf8594c9ed1c17b6 --- /dev/null +++ b/approach/ovod/APE/configs/common/data/lviscocococostuff_refcoco_panoptic_lsj1024.py @@ -0,0 +1,145 @@ +import random + +import detectron2.data.transforms as T +from detectron2.config import LazyCall as L +from detectron2.data import ( + DatasetMapper, + MetadataCatalog, + build_detection_test_loader, + get_detection_dataset_dicts, +) +from detectron2.data.samplers import RepeatFactorTrainingSampler +from detectron2.evaluation import LVISEvaluator, SemSegEvaluator +from omegaconf import OmegaConf +from ape.data import ( + DatasetMapper_detr_panoptic, + build_detection_train_loader_multi_dataset, + get_detection_dataset_dicts_multi_dataset, +) +from ape.data.samplers import MultiDatasetTrainingSampler +from ape.evaluation import RefCOCOEvaluator + +dataloader = OmegaConf.create() + +image_size = 1024 + +dataloader.train = L(build_detection_train_loader_multi_dataset)( + dataset=L(get_detection_dataset_dicts_multi_dataset)( + names=("lvis_v1_train+coco_panoptic_separated", "refcoco-mixed"), + filter_emptys=[True, True], + ), + mapper=L(DatasetMapper_detr_panoptic)( + is_train=True, + augmentations=[ + L(T.RandomFlip)(horizontal=True), # flip first + L(T.ResizeScale)( + min_scale=0.1, max_scale=1.0, target_height=image_size, target_width=image_size + ), + L(T.FixedSizeCrop)(crop_size=(image_size, image_size), pad=False), + ], + augmentations_with_crop=[ + L(T.RandomFlip)(horizontal=True), # flip first + L(T.ResizeScale)( + min_scale=0.1, max_scale=2.0, target_height=image_size, target_width=image_size + ), + L(T.FixedSizeCrop)(crop_size=(image_size, image_size), pad=False), + ], + image_format="RGB", + use_instance_mask=True, + recompute_boxes=True, + instance_mask_format="bitmask", + ignore_label=MetadataCatalog.get("coco_2017_train_panoptic_stuffonly").ignore_label, + stuff_classes_offset=1203, + stuff_classes_decomposition=True, + dataset_names=["lvis_v1_train+coco_panoptic_separated", "refcoco-mixed"], + ), + sampler=lambda dataset_dicts: MultiDatasetTrainingSampler( + repeat_factors=MultiDatasetTrainingSampler.get_repeat_factors( + dataset_dicts=dataset_dicts, + num_datasets=2, + dataset_ratio=[1, 1], + use_rfs=[True, True], + use_cas=[False, False], + repeat_thresh=0.001, + cas_lambda=1.0, + ), + seed=random.randint(0, 2**31), + ), + total_batch_size=16, + total_batch_size_list=[16, 16], + aspect_ratio_grouping=True, + num_workers=4, + num_datasets=2, +) + +dataloader.test = L(build_detection_test_loader)( + dataset=L(get_detection_dataset_dicts)(names="lvis_v1_val", filter_empty=False), + mapper=L(DatasetMapper)( + is_train=False, + augmentations=[ + L(T.ResizeShortestEdge)(short_edge_length=image_size, max_size=image_size), + ], + image_format="${...train.mapper.image_format}", + ), + num_workers=4, +) + +dataloader.evaluator = L(LVISEvaluator)( + dataset_name="${..test.dataset.names}", + max_dets_per_image=300, +) + +dataloader.tests = [ + L(build_detection_test_loader)( + dataset=L(get_detection_dataset_dicts)( + names="coco_2017_val_panoptic_stuffonly", filter_empty=False + ), + mapper=L(DatasetMapper)( + is_train=False, + augmentations=[ + L(T.ResizeShortestEdge)(short_edge_length=image_size, max_size=image_size), + ], + image_format="${....train.mapper.image_format}", + ), + num_workers=4, + ), +] + +dataloader.evaluators = [ + L(SemSegEvaluator)( + dataset_name="coco_2017_val_panoptic_stuffonly", + ), +] + +refcoco_test_dataset_names = [ + "refcoco-unc-val", + "refcoco-unc-testA", + "refcoco-unc-testB", + "refcocoplus-unc-val", + "refcocoplus-unc-testA", + "refcocoplus-unc-testB", + "refcocog-google-val", + "refcocog-umd-val", + "refcocog-umd-test", +] +dataloader.tests += [ + L(build_detection_test_loader)( + dataset=L(get_detection_dataset_dicts)(names=name, filter_empty=False), + mapper=L(DatasetMapper)( + is_train=False, + augmentations=[ + L(T.ResizeShortestEdge)(short_edge_length=image_size, max_size=image_size), + ], + image_format="${....train.mapper.image_format}", + ), + num_workers=4, + ) + for name in refcoco_test_dataset_names +] + +dataloader.evaluators += [ + L(RefCOCOEvaluator)( + dataset_name=name, + ) + for name in refcoco_test_dataset_names +] diff --git a/approach/ovod/APE/configs/common/data/odinw13_instance_lsj1024.py b/approach/ovod/APE/configs/common/data/odinw13_instance_lsj1024.py new file mode 100644 index 0000000000000000000000000000000000000000..3343dd4caf91f6a071ebc57268a1895600a724f2 --- /dev/null +++ b/approach/ovod/APE/configs/common/data/odinw13_instance_lsj1024.py @@ -0,0 +1,157 @@ +import detectron2.data.transforms as T +from detectron2.config import LazyCall as L +from detectron2.data import ( + DatasetMapper, + MetadataCatalog, + build_detection_test_loader, + get_detection_dataset_dicts, +) +from detectron2.evaluation import COCOEvaluator +from omegaconf import OmegaConf +from ape.data import ( + DatasetMapper_detr_panoptic, + DatasetMapper_detr_panoptic_copypaste, + build_detection_train_loader_multi_dataset, + build_detection_train_loader_multi_dataset_copypaste, + get_detection_dataset_dicts_multi_dataset, + get_detection_dataset_dicts_multi_dataset_copypaste, +) + +dataloader = OmegaConf.create() + +image_size = 1024 + +odinw_dataset_metas = [ + "odinw_AerialMaritimeDrone_large_train", + "odinw_Aquarium_Aquarium_Combined.v2-raw-1024.coco_train", + "odinw_CottontailRabbits_train", + "odinw_EgoHands_generic_train", + "odinw_NorthAmericaMushrooms_North_American_Mushrooms.v1-416x416.coco_train", + "odinw_Packages_Raw_train", + "odinw_PascalVOC_train", + "odinw_pistols_export_train", + "odinw_pothole_train", + "odinw_Raccoon_Raccoon.v2-raw.coco_train", + "odinw_ShellfishOpenImages_raw_train", + "odinw_thermalDogsAndPeople_train", + "odinw_VehiclesOpenImages_416x416_train", +] + +dataloader.train = [ + L(build_detection_train_loader_multi_dataset)( + dataset=L(get_detection_dataset_dicts_multi_dataset)( + names=(dataset_name,), + filter_emptys=[True], + dataloader_id=dataloader_id, + reduce_memory=True, + reduce_memory_size=1e6, + ), + mapper=L(DatasetMapper_detr_panoptic)( + is_train=True, + augmentations=[ + L(T.RandomFlip)(horizontal=True), # flip first + L(T.ResizeScale)( + min_scale=0.1, max_scale=1.0, target_height=image_size, target_width=image_size + ), + L(T.FixedSizeCrop)(crop_size=(image_size, image_size), pad=False), + ], + augmentations_with_crop=[ + L(T.RandomFlip)(horizontal=True), # flip first + L(T.ResizeScale)( + min_scale=0.1, max_scale=2.0, target_height=image_size, target_width=image_size + ), + L(T.FixedSizeCrop)(crop_size=(image_size, image_size), pad=False), + ], + image_format="RGB", + use_instance_mask=True, + recompute_boxes=True, + instance_mask_format="bitmask", + ignore_label=MetadataCatalog.get(dataset_name).get("ignore_label", None), + stuff_classes_offset=len(MetadataCatalog.get(dataset_name).get("thing_classes", [])), + stuff_classes_decomposition=True, + output_dir=None, + vis_period=12800, + dataset_names=(dataset_name,), + max_num_phrase=128, + nms_thresh_phrase=0.6, + ), + sampler=None, + total_batch_size=16, + total_batch_size_list=[16], + aspect_ratio_grouping=True, + num_workers=16, + num_datasets=1, + ) + for dataloader_id, dataset_name in enumerate(odinw_dataset_metas) +] + +odinw_test_dataset_names = [ + "odinw_AerialMaritimeDrone_large_test", + "odinw_Aquarium_Aquarium_Combined.v2-raw-1024.coco_test", + "odinw_CottontailRabbits_test", + "odinw_EgoHands_generic_test", + "odinw_NorthAmericaMushrooms_North_American_Mushrooms.v1-416x416.coco_test", + "odinw_Packages_Raw_test", + "odinw_PascalVOC_val", + "odinw_pistols_export_test", + "odinw_pothole_test", + "odinw_Raccoon_Raccoon.v2-raw.coco_test", + "odinw_ShellfishOpenImages_raw_test", + "odinw_thermalDogsAndPeople_test", + "odinw_VehiclesOpenImages_416x416_test", +] + +dataloader.tests = [ + L(build_detection_test_loader)( + dataset=L(get_detection_dataset_dicts)(names=name, filter_empty=False), + mapper=L(DatasetMapper)( + is_train=False, + augmentations=[ + L(T.ResizeShortestEdge)(short_edge_length=image_size, max_size=image_size), + ], + image_format="RGB", + ), + num_workers=4, + ) + for name in odinw_test_dataset_names +] + +dataloader.name_prompt_fusion_text = [ + True, + True, + False, + False, + True, + True, + False, + False, + True, + True, + False, + True, + False, +] + +dataloader.select_box_nums_for_evaluation_list = [ + 300, + 300, + 300, + 300, + 300, + 300, + 300, + 300, + 300, + 300, + 300, + 300, + 300, +] + +dataloader.evaluators = [ + L(COCOEvaluator)( + dataset_name=name, + tasks=("bbox",), + ) + for name in odinw_test_dataset_names +] diff --git a/approach/ovod/APE/configs/common/data/odinw13_instance_lsj1536.py b/approach/ovod/APE/configs/common/data/odinw13_instance_lsj1536.py new file mode 100644 index 0000000000000000000000000000000000000000..54a5657bf5f4cfb7e6cda8e370c662785cf1b32c --- /dev/null +++ b/approach/ovod/APE/configs/common/data/odinw13_instance_lsj1536.py @@ -0,0 +1,157 @@ +import detectron2.data.transforms as T +from detectron2.config import LazyCall as L +from detectron2.data import ( + DatasetMapper, + MetadataCatalog, + build_detection_test_loader, + get_detection_dataset_dicts, +) +from detectron2.evaluation import COCOEvaluator +from omegaconf import OmegaConf +from ape.data import ( + DatasetMapper_detr_panoptic, + DatasetMapper_detr_panoptic_copypaste, + build_detection_train_loader_multi_dataset, + build_detection_train_loader_multi_dataset_copypaste, + get_detection_dataset_dicts_multi_dataset, + get_detection_dataset_dicts_multi_dataset_copypaste, +) + +dataloader = OmegaConf.create() + +image_size = 1536 + +odinw_dataset_metas = [ + "odinw_AerialMaritimeDrone_large_train", + "odinw_Aquarium_Aquarium_Combined.v2-raw-1024.coco_train", + "odinw_CottontailRabbits_train", + "odinw_EgoHands_generic_train", + "odinw_NorthAmericaMushrooms_North_American_Mushrooms.v1-416x416.coco_train", + "odinw_Packages_Raw_train", + "odinw_PascalVOC_train", + "odinw_pistols_export_train", + "odinw_pothole_train", + "odinw_Raccoon_Raccoon.v2-raw.coco_train", + "odinw_ShellfishOpenImages_raw_train", + "odinw_thermalDogsAndPeople_train", + "odinw_VehiclesOpenImages_416x416_train", +] + +dataloader.train = [ + L(build_detection_train_loader_multi_dataset)( + dataset=L(get_detection_dataset_dicts_multi_dataset)( + names=(dataset_name,), + filter_emptys=[True], + dataloader_id=dataloader_id, + reduce_memory=True, + reduce_memory_size=1e6, + ), + mapper=L(DatasetMapper_detr_panoptic)( + is_train=True, + augmentations=[ + L(T.RandomFlip)(horizontal=True), # flip first + L(T.ResizeScale)( + min_scale=0.1, max_scale=1.0, target_height=image_size, target_width=image_size + ), + L(T.FixedSizeCrop)(crop_size=(image_size, image_size), pad=False), + ], + augmentations_with_crop=[ + L(T.RandomFlip)(horizontal=True), # flip first + L(T.ResizeScale)( + min_scale=0.1, max_scale=2.0, target_height=image_size, target_width=image_size + ), + L(T.FixedSizeCrop)(crop_size=(image_size, image_size), pad=False), + ], + image_format="RGB", + use_instance_mask=True, + recompute_boxes=True, + instance_mask_format="bitmask", + ignore_label=MetadataCatalog.get(dataset_name).get("ignore_label", None), + stuff_classes_offset=len(MetadataCatalog.get(dataset_name).get("thing_classes", [])), + stuff_classes_decomposition=True, + output_dir=None, + vis_period=12800, + dataset_names=(dataset_name,), + max_num_phrase=128, + nms_thresh_phrase=0.6, + ), + sampler=None, + total_batch_size=16, + total_batch_size_list=[16], + aspect_ratio_grouping=True, + num_workers=16, + num_datasets=1, + ) + for dataloader_id, dataset_name in enumerate(odinw_dataset_metas) +] + +odinw_test_dataset_names = [ + "odinw_AerialMaritimeDrone_large_test", + "odinw_Aquarium_Aquarium_Combined.v2-raw-1024.coco_test", + "odinw_CottontailRabbits_test", + "odinw_EgoHands_generic_test", + "odinw_NorthAmericaMushrooms_North_American_Mushrooms.v1-416x416.coco_test", + "odinw_Packages_Raw_test", + "odinw_PascalVOC_val", + "odinw_pistols_export_test", + "odinw_pothole_test", + "odinw_Raccoon_Raccoon.v2-raw.coco_test", + "odinw_ShellfishOpenImages_raw_test", + "odinw_thermalDogsAndPeople_test", + "odinw_VehiclesOpenImages_416x416_test", +] + +dataloader.tests = [ + L(build_detection_test_loader)( + dataset=L(get_detection_dataset_dicts)(names=name, filter_empty=False), + mapper=L(DatasetMapper)( + is_train=False, + augmentations=[ + L(T.ResizeShortestEdge)(short_edge_length=image_size, max_size=image_size), + ], + image_format="RGB", + ), + num_workers=4, + ) + for name in odinw_test_dataset_names +] + +dataloader.name_prompt_fusion_text = [ + True, + True, + False, + False, + True, + True, + False, + False, + True, + True, + False, + True, + False, +] + +dataloader.select_box_nums_for_evaluation_list = [ + 300, + 300, + 300, + 300, + 300, + 300, + 300, + 300, + 300, + 300, + 300, + 300, + 300, +] + +dataloader.evaluators = [ + L(COCOEvaluator)( + dataset_name=name, + tasks=("bbox",), + ) + for name in odinw_test_dataset_names +] diff --git a/approach/ovod/APE/configs/common/data/odinw35_instance.py b/approach/ovod/APE/configs/common/data/odinw35_instance.py new file mode 100644 index 0000000000000000000000000000000000000000..4b2db3a20bccaf79a5d54c4cbb44eb0bf6c55c07 --- /dev/null +++ b/approach/ovod/APE/configs/common/data/odinw35_instance.py @@ -0,0 +1,253 @@ +import detectron2.data.transforms as T +from detectron2.config import LazyCall as L +from detectron2.data import ( + DatasetMapper, + MetadataCatalog, + build_detection_test_loader, + get_detection_dataset_dicts, +) +from detectron2.evaluation import COCOEvaluator +from omegaconf import OmegaConf +from ape.data import ( + DatasetMapper_detr_panoptic, + DatasetMapper_detr_panoptic_copypaste, + build_detection_train_loader_multi_dataset, + build_detection_train_loader_multi_dataset_copypaste, + get_detection_dataset_dicts_multi_dataset, + get_detection_dataset_dicts_multi_dataset_copypaste, +) + +dataloader = OmegaConf.create() + +odinw_dataset_metas = [ + "odinw_AerialMaritimeDrone_large_train", + "odinw_AerialMaritimeDrone_tiled_train", + "odinw_AmericanSignLanguageLetters_American_Sign_Language_Letters.v1-v1.coco_train", + "odinw_Aquarium_Aquarium_Combined.v2-raw-1024.coco_train", + "odinw_BCCD_BCCD.v3-raw.coco_train", + "odinw_boggleBoards_416x416AutoOrient_export_train", + "odinw_brackishUnderwater_960x540_train", + "odinw_ChessPieces_Chess_Pieces.v23-raw.coco_train", + "odinw_CottontailRabbits_train", + "odinw_dice_mediumColor_export_train", + "odinw_DroneControl_Drone_Control.v3-raw.coco_train", + "odinw_EgoHands_generic_train", + "odinw_EgoHands_specific_train", + "odinw_HardHatWorkers_raw_train", + "odinw_MaskWearing_raw_train", + "odinw_MountainDewCommercial_train", + "odinw_NorthAmericaMushrooms_North_American_Mushrooms.v1-416x416.coco_train", + "odinw_openPoetryVision_512x512_train", + "odinw_OxfordPets_by-breed_train", + "odinw_OxfordPets_by-species_train", + "odinw_Packages_Raw_train", + "odinw_PascalVOC_train", + "odinw_pistols_export_train", + "odinw_PKLot_640_train", + "odinw_plantdoc_416x416_train", + "odinw_pothole_train", + "odinw_Raccoon_Raccoon.v2-raw.coco_train", + "odinw_selfdrivingCar_fixedLarge_export_train", + "odinw_ShellfishOpenImages_raw_train", + "odinw_ThermalCheetah_train", + "odinw_thermalDogsAndPeople_train", + "odinw_UnoCards_raw_train", + "odinw_VehiclesOpenImages_416x416_train", + "odinw_websiteScreenshots_train", + "odinw_WildfireSmoke_train", +] + +dataloader.train = [ + L(build_detection_train_loader_multi_dataset)( + dataset=L(get_detection_dataset_dicts_multi_dataset)( + names=(dataset_name,), + filter_emptys=[True], + dataloader_id=dataloader_id, + reduce_memory=True, + reduce_memory_size=1e6, + ), + mapper=L(DatasetMapper_detr_panoptic)( + is_train=True, + augmentations=[ + L(T.RandomFlip)(), + L(T.ResizeShortestEdge)( + short_edge_length=(480, 512, 544, 576, 608, 640, 672, 704, 736, 768, 800), + max_size=1333, + sample_style="choice", + ), + ], + augmentations_with_crop=[ + L(T.RandomFlip)(), + L(T.ResizeShortestEdge)( + short_edge_length=(400, 500, 600), + sample_style="choice", + ), + L(T.RandomCrop)( + crop_type="absolute_range", + crop_size=(384, 600), + ), + L(T.ResizeShortestEdge)( + short_edge_length=(480, 512, 544, 576, 608, 640, 672, 704, 736, 768, 800), + max_size=1333, + sample_style="choice", + ), + ], + image_format="RGB", + use_instance_mask=True, + recompute_boxes=True, + instance_mask_format="bitmask", + ignore_label=MetadataCatalog.get(dataset_name).get("ignore_label", None), + stuff_classes_offset=len(MetadataCatalog.get(dataset_name).get("thing_classes", [])), + stuff_classes_decomposition=True, + output_dir=None, + vis_period=12800, + dataset_names=(dataset_name,), + max_num_phrase=128, + nms_thresh_phrase=0.6, + ), + sampler=None, + total_batch_size=16, + total_batch_size_list=[16], + aspect_ratio_grouping=True, + num_workers=16, + num_datasets=1, + ) + for dataloader_id, dataset_name in enumerate(odinw_dataset_metas) +] + +odinw_test_dataset_names = [ + "odinw_AerialMaritimeDrone_large_test", + "odinw_AerialMaritimeDrone_tiled_test", + "odinw_AmericanSignLanguageLetters_American_Sign_Language_Letters.v1-v1.coco_test", + "odinw_Aquarium_Aquarium_Combined.v2-raw-1024.coco_test", + "odinw_BCCD_BCCD.v3-raw.coco_test", + "odinw_boggleBoards_416x416AutoOrient_export_test", + "odinw_brackishUnderwater_960x540_test", + "odinw_ChessPieces_Chess_Pieces.v23-raw.coco_test", + "odinw_CottontailRabbits_test", + "odinw_dice_mediumColor_export_test", + "odinw_DroneControl_Drone_Control.v3-raw.coco_test", + "odinw_EgoHands_generic_test", + "odinw_EgoHands_specific_test", + "odinw_HardHatWorkers_raw_test", + "odinw_MaskWearing_raw_test", + "odinw_MountainDewCommercial_test", + "odinw_NorthAmericaMushrooms_North_American_Mushrooms.v1-416x416.coco_test", + "odinw_openPoetryVision_512x512_test", + "odinw_OxfordPets_by-breed_test", + "odinw_OxfordPets_by-species_test", + "odinw_Packages_Raw_test", + "odinw_PascalVOC_val", + "odinw_pistols_export_test", + "odinw_PKLot_640_test", + "odinw_plantdoc_416x416_test", + "odinw_pothole_test", + "odinw_Raccoon_Raccoon.v2-raw.coco_test", + "odinw_selfdrivingCar_fixedLarge_export_test", + "odinw_ShellfishOpenImages_raw_test", + "odinw_ThermalCheetah_test", + "odinw_thermalDogsAndPeople_test", + "odinw_UnoCards_raw_test", + "odinw_VehiclesOpenImages_416x416_test", + "odinw_websiteScreenshots_test", + "odinw_WildfireSmoke_test", +] + +dataloader.tests = [ + L(build_detection_test_loader)( + dataset=L(get_detection_dataset_dicts)(names=name, filter_empty=False), + mapper=L(DatasetMapper)( + is_train=False, + augmentations=[ + L(T.ResizeShortestEdge)(short_edge_length=800, max_size=1333), + ], + image_format="RGB", + ), + num_workers=4, + ) + for name in odinw_test_dataset_names +] + +dataloader.name_prompt_fusion_text = [ + True, + False, + True, + True, + True, + True, + True, + True, + False, + False, + True, + False, + False, + True, + True, + True, + True, + True, + True, + True, + True, + False, + False, + False, + True, + True, + True, + True, + False, + False, + True, + True, + False, + True, + True, +] + +dataloader.select_box_nums_for_evaluation_list = [ + 300, + 300, + 300, + 300, + 300, + 300, + 300, + 300, + 300, + 300, + 300, + 300, + 300, + 300, + 300, + 300, + 300, + 300, + 300, + 300, + 300, + 300, + 300, + 300, + 300, + 300, + 1, + 300, + 300, + 300, + 300, + 300, + 300, + 300, + 300, +] + +dataloader.evaluators = [ + L(COCOEvaluator)( + dataset_name=name, + tasks=("bbox",), + ) + for name in odinw_test_dataset_names +] diff --git a/approach/ovod/APE/configs/common/data/odinwvoc_instance_lsj1024.py b/approach/ovod/APE/configs/common/data/odinwvoc_instance_lsj1024.py new file mode 100644 index 0000000000000000000000000000000000000000..da5111a11de1de8174d7bdee275793284aff84c0 --- /dev/null +++ b/approach/ovod/APE/configs/common/data/odinwvoc_instance_lsj1024.py @@ -0,0 +1,43 @@ +import detectron2.data.transforms as T +from detectron2.config import LazyCall as L +from detectron2.data import DatasetMapper, build_detection_test_loader, get_detection_dataset_dicts +from detectron2.evaluation import COCOEvaluator +from omegaconf import OmegaConf + +dataloader = OmegaConf.create() + +image_size = 1024 + +odinw_test_dataset_names = [ + "odinw_PascalVOC_val", +] +dataloader.tests = [ + L(build_detection_test_loader)( + dataset=L(get_detection_dataset_dicts)(names=name, filter_empty=False), + mapper=L(DatasetMapper)( + is_train=False, + augmentations=[ + L(T.ResizeShortestEdge)(short_edge_length=image_size, max_size=image_size), + ], + image_format="RGB", + ), + num_workers=4, + ) + for name in odinw_test_dataset_names +] + +dataloader.name_prompt_fusion_text = [ + False, +] + +dataloader.select_box_nums_for_evaluation_list = [ + 300, +] + +dataloader.evaluators = [ + L(COCOEvaluator)( + dataset_name=name, + tasks=("bbox",), + ) + for name in odinw_test_dataset_names +] diff --git a/approach/ovod/APE/configs/common/data/pascalcontext459_semantic_lsj1024.py b/approach/ovod/APE/configs/common/data/pascalcontext459_semantic_lsj1024.py new file mode 100644 index 0000000000000000000000000000000000000000..7e8daa66e6368570d6e61ba3ad17e987ab6abf0a --- /dev/null +++ b/approach/ovod/APE/configs/common/data/pascalcontext459_semantic_lsj1024.py @@ -0,0 +1,62 @@ +import detectron2.data.transforms as T +from detectron2.config import LazyCall as L +from detectron2.data import ( + DatasetMapper, + MetadataCatalog, + build_detection_test_loader, + build_detection_train_loader, + get_detection_dataset_dicts, +) +from detectron2.evaluation import SemSegEvaluator +from omegaconf import OmegaConf +from ape.data import DatasetMapper_detr_semantic + +image_size = 1024 + +dataloader = OmegaConf.create() + +dataloader.train = L(build_detection_train_loader)( + dataset=L(get_detection_dataset_dicts)(names="pascal_context_459_sem_seg_val"), + mapper=L(DatasetMapper_detr_semantic)( + is_train=True, + augmentations=[ + L(T.RandomFlip)(horizontal=True), # flip first + L(T.ResizeScale)( + min_scale=0.1, max_scale=1.0, target_height=image_size, target_width=image_size + ), + L(T.FixedSizeCrop)(crop_size=(image_size, image_size), pad=False), + ], + augmentations_with_crop=[ + L(T.RandomFlip)(horizontal=True), # flip first + L(T.ResizeScale)( + min_scale=0.1, max_scale=2.0, target_height=image_size, target_width=image_size + ), + L(T.FixedSizeCrop)(crop_size=(image_size, image_size), pad=False), + ], + image_format="RGB", + use_instance_mask=True, + recompute_boxes=True, + ignore_label=MetadataCatalog.get("pascal_context_459_sem_seg_val").ignore_label, + stuff_classes_decomposition=True, + ), + total_batch_size=16, + num_workers=4, +) + +dataloader.test = L(build_detection_test_loader)( + dataset=L(get_detection_dataset_dicts)( + names="pascal_context_459_sem_seg_val", filter_empty=False + ), + mapper=L(DatasetMapper)( + is_train=False, + augmentations=[ + L(T.ResizeShortestEdge)(short_edge_length=image_size, max_size=image_size), + ], + image_format="${...train.mapper.image_format}", + ), + num_workers=4, +) + +dataloader.evaluator = L(SemSegEvaluator)( + dataset_name="${..test.dataset.names}", +) diff --git a/approach/ovod/APE/configs/common/data/pascalvocpart_panoptic.py b/approach/ovod/APE/configs/common/data/pascalvocpart_panoptic.py new file mode 100644 index 0000000000000000000000000000000000000000..a9ec71be43f6ee2f34aaa6f956d4bf0c3c7ae428 --- /dev/null +++ b/approach/ovod/APE/configs/common/data/pascalvocpart_panoptic.py @@ -0,0 +1,109 @@ +import detectron2.data.transforms as T +from detectron2.config import LazyCall as L +from detectron2.data import ( + DatasetMapper, + MetadataCatalog, + build_detection_test_loader, + build_detection_train_loader, + get_detection_dataset_dicts, +) +from detectron2.evaluation import COCOEvaluator +from omegaconf import OmegaConf +from ape.data import ( + DatasetMapper_detr_panoptic, + build_detection_train_loader_multi_dataset, + get_detection_dataset_dicts_multi_dataset, +) + +dataloader = OmegaConf.create() + +dataloader.train = L(build_detection_train_loader_multi_dataset)( + dataset=L(get_detection_dataset_dicts_multi_dataset)( + names=("pascalvocpart_train",), filter_emptys=[False] + ), + mapper=L(DatasetMapper_detr_panoptic)( + is_train=True, + augmentations=[ + L(T.RandomFlip)(), + L(T.ResizeShortestEdge)( + short_edge_length=(480, 512, 544, 576, 608, 640, 672, 704, 736, 768, 800), + max_size=1333, + sample_style="choice", + ), + ], + augmentations_with_crop=[ + L(T.RandomFlip)(), + L(T.ResizeShortestEdge)( + short_edge_length=(400, 500, 600), + sample_style="choice", + ), + L(T.RandomCrop)( + crop_type="absolute_range", + crop_size=(384, 600), + ), + L(T.ResizeShortestEdge)( + short_edge_length=(480, 512, 544, 576, 608, 640, 672, 704, 736, 768, 800), + max_size=1333, + sample_style="choice", + ), + ], + image_format="RGB", + use_instance_mask=True, + recompute_boxes=True, + instance_mask_format="bitmask", + dataset_names=("pascal_parts_train",), + ), + total_batch_size=16, + total_batch_size_list=[16], + num_workers=4, + num_datasets=1, +) + +dataloader.test = L(build_detection_test_loader)( + dataset=L(get_detection_dataset_dicts)(names="refcoco-unc-val", filter_empty=False), + mapper=L(DatasetMapper)( + is_train=False, + augmentations=[ + L(T.ResizeShortestEdge)(short_edge_length=800, max_size=1333), + ], + image_format="${...train.mapper.image_format}", + ), + num_workers=4, +) + +dataloader.evaluator = L(COCOEvaluator)( + dataset_name="${..test.dataset.names}", +) + +refcoco_test_dataset_names = [ + "refcoco-unc-val", + "refcoco-unc-testA", + "refcoco-unc-testB", + "refcocoplus-unc-val", + "refcocoplus-unc-testA", + "refcocoplus-unc-testB", + "refcocog-google-val", + "refcocog-umd-val", + "refcocog-umd-test", +] +dataloader.tests = [ + L(build_detection_test_loader)( + dataset=L(get_detection_dataset_dicts)(names=name, filter_empty=False), + mapper=L(DatasetMapper)( + is_train=False, + augmentations=[ + L(T.ResizeShortestEdge)(short_edge_length=800, max_size=1333), + ], + image_format="${....train.mapper.image_format}", + ), + num_workers=4, + ) + for name in refcoco_test_dataset_names[1:] +] + +dataloader.evaluators = [ + L(COCOEvaluator)( + dataset_name=name, + ) + for name in refcoco_test_dataset_names[1:] +] diff --git a/approach/ovod/APE/configs/common/data/phrasecut_instance.py b/approach/ovod/APE/configs/common/data/phrasecut_instance.py new file mode 100644 index 0000000000000000000000000000000000000000..67a9ab420b7a1431547619861b99bf1a7d3c3140 --- /dev/null +++ b/approach/ovod/APE/configs/common/data/phrasecut_instance.py @@ -0,0 +1,108 @@ +import detectron2.data.transforms as T +from detectron2.config import LazyCall as L +from detectron2.data import ( + DatasetMapper, + build_detection_test_loader, + build_detection_train_loader, + get_detection_dataset_dicts, +) +from detectron2.evaluation import COCOEvaluator +from omegaconf import OmegaConf +from ape.data import ( + DatasetMapper_detr_instance, + build_detection_train_loader_multi_dataset, + get_detection_dataset_dicts_multi_dataset, +) +from ape.evaluation import RefCOCOEvaluator + +dataloader = OmegaConf.create() + +dataloader.train = L(build_detection_train_loader_multi_dataset)( + dataset=L(get_detection_dataset_dicts_multi_dataset)( + names=("phrasecut_train",), filter_emptys=[True] + ), + mapper=L(DatasetMapper_detr_instance)( + is_train=True, + augmentations=[ + L(T.RandomFlip)(), + L(T.ResizeShortestEdge)( + short_edge_length=(480, 512, 544, 576, 608, 640, 672, 704, 736, 768, 800), + max_size=1333, + sample_style="choice", + ), + ], + augmentations_with_crop=[ + L(T.RandomFlip)(), + L(T.ResizeShortestEdge)( + short_edge_length=(400, 500, 600), + sample_style="choice", + ), + L(T.RandomCrop)( + crop_type="absolute_range", + crop_size=(384, 600), + ), + L(T.ResizeShortestEdge)( + short_edge_length=(480, 512, 544, 576, 608, 640, 672, 704, 736, 768, 800), + max_size=1333, + sample_style="choice", + ), + ], + image_format="RGB", + use_instance_mask=True, + recompute_boxes=True, + dataset_names=("phrasecut_train",), + ), + total_batch_size=16, + total_batch_size_list=[16], + num_workers=4, + num_datasets=1, +) + +dataloader.test = L(build_detection_test_loader)( + dataset=L(get_detection_dataset_dicts)(names="refcoco-unc-val", filter_empty=False), + mapper=L(DatasetMapper)( + is_train=False, + augmentations=[ + L(T.ResizeShortestEdge)(short_edge_length=800, max_size=1333), + ], + image_format="${...train.mapper.image_format}", + ), + num_workers=4, +) + +dataloader.evaluator = L(RefCOCOEvaluator)( + dataset_name="${..test.dataset.names}", +) + +refcoco_test_dataset_names = [ + "refcoco-unc-val", + "refcoco-unc-testA", + "refcoco-unc-testB", + "refcocoplus-unc-val", + "refcocoplus-unc-testA", + "refcocoplus-unc-testB", + "refcocog-google-val", + "refcocog-umd-val", + "refcocog-umd-test", +] +dataloader.tests = [ + L(build_detection_test_loader)( + dataset=L(get_detection_dataset_dicts)(names=name, filter_empty=False), + mapper=L(DatasetMapper)( + is_train=False, + augmentations=[ + L(T.ResizeShortestEdge)(short_edge_length=800, max_size=1333), + ], + image_format="${....train.mapper.image_format}", + ), + num_workers=4, + ) + for name in refcoco_test_dataset_names[1:] +] + +dataloader.evaluators = [ + L(RefCOCOEvaluator)( + dataset_name=name, + ) + for name in refcoco_test_dataset_names[1:] +] diff --git a/approach/ovod/APE/configs/common/data/refcoco_group_by_image_instance.py b/approach/ovod/APE/configs/common/data/refcoco_group_by_image_instance.py new file mode 100644 index 0000000000000000000000000000000000000000..3820a99ec36d760b5b2f4c286ec09f9eb35ad254 --- /dev/null +++ b/approach/ovod/APE/configs/common/data/refcoco_group_by_image_instance.py @@ -0,0 +1,109 @@ +import detectron2.data.transforms as T +from detectron2.config import LazyCall as L +from detectron2.data import ( + DatasetMapper, + build_detection_test_loader, + build_detection_train_loader, + get_detection_dataset_dicts, +) +from detectron2.evaluation import COCOEvaluator +from omegaconf import OmegaConf +from ape.data import ( + DatasetMapper_detr_instance, + build_detection_train_loader_multi_dataset, + get_detection_dataset_dicts_multi_dataset, +) +from ape.evaluation import RefCOCOEvaluator + +dataloader = OmegaConf.create() + +dataloader.train = L(build_detection_train_loader_multi_dataset)( + dataset=L(get_detection_dataset_dicts_multi_dataset)( + names=("refcoco-mixed_group-by-image",), filter_emptys=[True] + ), + mapper=L(DatasetMapper_detr_instance)( + is_train=True, + augmentations=[ + L(T.RandomFlip)(), + L(T.ResizeShortestEdge)( + short_edge_length=(480, 512, 544, 576, 608, 640, 672, 704, 736, 768, 800), + max_size=1333, + sample_style="choice", + ), + ], + augmentations_with_crop=[ + L(T.RandomFlip)(), + L(T.ResizeShortestEdge)( + short_edge_length=(400, 500, 600), + sample_style="choice", + ), + L(T.RandomCrop)( + crop_type="absolute_range", + crop_size=(384, 600), + ), + L(T.ResizeShortestEdge)( + short_edge_length=(480, 512, 544, 576, 608, 640, 672, 704, 736, 768, 800), + max_size=1333, + sample_style="choice", + ), + ], + image_format="RGB", + use_instance_mask=True, + recompute_boxes=True, + dataset_names=("refcoco-mixed_group-by-image",), + nms_thresh_phrase=0.9, + ), + total_batch_size=16, + total_batch_size_list=[16], + num_workers=4, + num_datasets=1, +) + +dataloader.test = L(build_detection_test_loader)( + dataset=L(get_detection_dataset_dicts)(names="refcoco-unc-val", filter_empty=False), + mapper=L(DatasetMapper)( + is_train=False, + augmentations=[ + L(T.ResizeShortestEdge)(short_edge_length=800, max_size=1333), + ], + image_format="${...train.mapper.image_format}", + ), + num_workers=4, +) + +dataloader.evaluator = L(RefCOCOEvaluator)( + dataset_name="${..test.dataset.names}", +) + +refcoco_test_dataset_names = [ + "refcoco-unc-val", + "refcoco-unc-testA", + "refcoco-unc-testB", + "refcocoplus-unc-val", + "refcocoplus-unc-testA", + "refcocoplus-unc-testB", + "refcocog-google-val", + "refcocog-umd-val", + "refcocog-umd-test", +] +dataloader.tests = [ + L(build_detection_test_loader)( + dataset=L(get_detection_dataset_dicts)(names=name, filter_empty=False), + mapper=L(DatasetMapper)( + is_train=False, + augmentations=[ + L(T.ResizeShortestEdge)(short_edge_length=800, max_size=1333), + ], + image_format="${....train.mapper.image_format}", + ), + num_workers=4, + ) + for name in refcoco_test_dataset_names[1:] +] + +dataloader.evaluators = [ + L(RefCOCOEvaluator)( + dataset_name=name, + ) + for name in refcoco_test_dataset_names[1:] +] diff --git a/approach/ovod/APE/configs/common/data/refcoco_instance_lsj1024.py b/approach/ovod/APE/configs/common/data/refcoco_instance_lsj1024.py new file mode 100644 index 0000000000000000000000000000000000000000..0052d2cd1421f1abf682a08219ea3589a8b3f3d2 --- /dev/null +++ b/approach/ovod/APE/configs/common/data/refcoco_instance_lsj1024.py @@ -0,0 +1,99 @@ +import detectron2.data.transforms as T +from detectron2.config import LazyCall as L +from detectron2.data import ( + DatasetMapper, + build_detection_test_loader, + build_detection_train_loader, + get_detection_dataset_dicts, +) +from omegaconf import OmegaConf +from ape.data import ( + DatasetMapper_detr_instance_exp, + build_detection_train_loader_multi_dataset, + get_detection_dataset_dicts_multi_dataset, +) +from ape.evaluation import RefCOCOEvaluator + +image_size = 1024 + +dataloader = OmegaConf.create() + +dataloader.train = L(build_detection_train_loader_multi_dataset)( + dataset=L(get_detection_dataset_dicts_multi_dataset)( + names=("refcoco-mixed",), filter_emptys=[True] + ), + mapper=L(DatasetMapper_detr_instance_exp)( + is_train=True, + augmentations=[ + L(T.RandomFlip)(horizontal=True), # flip first + L(T.ResizeScale)( + min_scale=0.1, max_scale=1.0, target_height=image_size, target_width=image_size + ), + L(T.FixedSizeCrop)(crop_size=(image_size, image_size), pad=False), + ], + augmentations_with_crop=[ + L(T.RandomFlip)(horizontal=True), # flip first + L(T.ResizeScale)( + min_scale=0.1, max_scale=2.0, target_height=image_size, target_width=image_size + ), + L(T.FixedSizeCrop)(crop_size=(image_size, image_size), pad=False), + ], + image_format="RGB", + use_instance_mask=True, + recompute_boxes=True, + dataset_names=("refcoco-mixed",), + ), + total_batch_size=16, + total_batch_size_list=[16], + num_workers=4, + num_datasets=1, +) + +dataloader.test = L(build_detection_test_loader)( + dataset=L(get_detection_dataset_dicts)(names="refcoco-unc-val", filter_empty=False), + mapper=L(DatasetMapper)( + is_train=False, + augmentations=[ + L(T.ResizeShortestEdge)(short_edge_length=image_size, max_size=image_size), + ], + image_format="${...train.mapper.image_format}", + ), + num_workers=4, +) + +dataloader.evaluator = L(RefCOCOEvaluator)( + dataset_name="${..test.dataset.names}", +) + +refcoco_test_dataset_names = [ + "refcoco-unc-val", + "refcoco-unc-testA", + "refcoco-unc-testB", + "refcocoplus-unc-val", + "refcocoplus-unc-testA", + "refcocoplus-unc-testB", + "refcocog-google-val", + "refcocog-umd-val", + "refcocog-umd-test", +] +dataloader.tests = [ + L(build_detection_test_loader)( + dataset=L(get_detection_dataset_dicts)(names=name, filter_empty=False), + mapper=L(DatasetMapper)( + is_train=False, + augmentations=[ + L(T.ResizeShortestEdge)(short_edge_length=image_size, max_size=image_size), + ], + image_format="${....train.mapper.image_format}", + ), + num_workers=4, + ) + for name in refcoco_test_dataset_names[1:] +] + +dataloader.evaluators = [ + L(RefCOCOEvaluator)( + dataset_name=name, + ) + for name in refcoco_test_dataset_names[1:] +] diff --git a/approach/ovod/APE/configs/common/data/seginw_instance_lsj1024.py b/approach/ovod/APE/configs/common/data/seginw_instance_lsj1024.py new file mode 100644 index 0000000000000000000000000000000000000000..3e995d6cb88f06dbc8788e52bd5ac2968656f118 --- /dev/null +++ b/approach/ovod/APE/configs/common/data/seginw_instance_lsj1024.py @@ -0,0 +1,154 @@ +import detectron2.data.transforms as T +from detectron2.config import LazyCall as L +from detectron2.data import ( + DatasetMapper, + MetadataCatalog, + build_detection_test_loader, + get_detection_dataset_dicts, +) +from detectron2.evaluation import COCOEvaluator +from omegaconf import OmegaConf +from ape.data import ( + DatasetMapper_detr_panoptic, + DatasetMapper_detr_panoptic_copypaste, + build_detection_train_loader_multi_dataset, + build_detection_train_loader_multi_dataset_copypaste, + get_detection_dataset_dicts_multi_dataset, + get_detection_dataset_dicts_multi_dataset_copypaste, +) + +dataloader = OmegaConf.create() + +image_size = 1024 + +seginw_dataset_metas = [ + "seginw_Elephants_train", + "seginw_Hand-Metal_train", + "seginw_Watermelon_train", + "seginw_House-Parts_train", + "seginw_HouseHold-Items_train", + "seginw_Strawberry_train", + "seginw_Fruits_train", + "seginw_Nutterfly-Squireel_train", + "seginw_Hand_train", + "seginw_Garbage_train", + "seginw_Chicken_train", + "seginw_Rail_train", + "seginw_Airplane-Parts_train", + "seginw_Brain-Tumor_train", + "seginw_Poles_train", + "seginw_Electric-Shaver_train", + "seginw_Bottles_train", + "seginw_Toolkits_train", + "seginw_Trash_train", + "seginw_Salmon-Fillet_train", + "seginw_Puppies_train", + "seginw_Tablets_train", + "seginw_Phones_train", + "seginw_Cows_train", + "seginw_Ginger-Garlic_train", +] + +dataloader.train = [ + L(build_detection_train_loader_multi_dataset_copypaste)( + dataset=L(get_detection_dataset_dicts_multi_dataset_copypaste)( + names=(dataset_name,), + filter_emptys=[True], + copypastes=[True], + dataloader_id=dataloader_id, + reduce_memory=True, + reduce_memory_size=1e6, + ), + dataset_bg=L(get_detection_dataset_dicts)( + names=(dataset_name,), + filter_empty=True, + ), + mapper=L(DatasetMapper_detr_panoptic_copypaste)( + is_train=True, + augmentations=[ + L(T.RandomFlip)(horizontal=True), # flip first + L(T.ResizeScale)( + min_scale=0.1, max_scale=1.0, target_height=image_size, target_width=image_size + ), + L(T.FixedSizeCrop)(crop_size=(image_size, image_size), pad=False), + ], + augmentations_with_crop=[ + L(T.RandomFlip)(horizontal=True), # flip first + L(T.ResizeScale)( + min_scale=0.1, max_scale=2.0, target_height=image_size, target_width=image_size + ), + L(T.FixedSizeCrop)(crop_size=(image_size, image_size), pad=False), + ], + image_format="RGB", + use_instance_mask=True, + recompute_boxes=True, + instance_mask_format="bitmask", + ignore_label=MetadataCatalog.get(dataset_name).get("ignore_label", None), + stuff_classes_offset=len(MetadataCatalog.get(dataset_name).get("thing_classes", [])), + stuff_classes_decomposition=True, + output_dir=None, + vis_period=12800, + dataset_names=(dataset_name,), + max_num_phrase=128, + nms_thresh_phrase=0.6, + ), + sampler=None, + sampler_bg=None, + total_batch_size=16, + total_batch_size_list=[16], + aspect_ratio_grouping=True, + num_workers=16, + num_datasets=1, + ) + for dataloader_id, dataset_name in enumerate(seginw_dataset_metas) +] + +seginw_test_dataset_names = [ + "seginw_Elephants_val", + "seginw_Hand-Metal_val", + "seginw_Watermelon_val", + "seginw_House-Parts_val", + "seginw_HouseHold-Items_val", + "seginw_Strawberry_val", + "seginw_Fruits_val", + "seginw_Nutterfly-Squireel_val", + "seginw_Hand_val", + "seginw_Garbage_val", + "seginw_Chicken_val", + "seginw_Rail_val", + "seginw_Airplane-Parts_val", + "seginw_Brain-Tumor_val", + "seginw_Poles_val", + "seginw_Electric-Shaver_val", + "seginw_Bottles_val", + "seginw_Toolkits_val", + "seginw_Trash_val", + "seginw_Salmon-Fillet_val", + "seginw_Puppies_val", + "seginw_Tablets_val", + "seginw_Phones_val", + "seginw_Cows_val", + "seginw_Ginger-Garlic_val", +] + +dataloader.tests = [ + L(build_detection_test_loader)( + dataset=L(get_detection_dataset_dicts)(names=name, filter_empty=False), + mapper=L(DatasetMapper)( + is_train=False, + augmentations=[ + L(T.ResizeShortestEdge)(short_edge_length=image_size, max_size=image_size), + ], + image_format="RGB", + ), + num_workers=4, + ) + for name in seginw_test_dataset_names +] + +dataloader.evaluators = [ + L(COCOEvaluator)( + dataset_name=name, + ) + for name in seginw_test_dataset_names +] diff --git a/approach/ovod/APE/configs/common/data/seginw_instance_lsj1536.py b/approach/ovod/APE/configs/common/data/seginw_instance_lsj1536.py new file mode 100644 index 0000000000000000000000000000000000000000..6c46e020a8af1b468a16dd76c8a873bea7cca25a --- /dev/null +++ b/approach/ovod/APE/configs/common/data/seginw_instance_lsj1536.py @@ -0,0 +1,154 @@ +import detectron2.data.transforms as T +from detectron2.config import LazyCall as L +from detectron2.data import ( + DatasetMapper, + MetadataCatalog, + build_detection_test_loader, + get_detection_dataset_dicts, +) +from detectron2.evaluation import COCOEvaluator +from omegaconf import OmegaConf +from ape.data import ( + DatasetMapper_detr_panoptic, + DatasetMapper_detr_panoptic_copypaste, + build_detection_train_loader_multi_dataset, + build_detection_train_loader_multi_dataset_copypaste, + get_detection_dataset_dicts_multi_dataset, + get_detection_dataset_dicts_multi_dataset_copypaste, +) + +dataloader = OmegaConf.create() + +image_size = 1536 + +seginw_dataset_metas = [ + "seginw_Elephants_train", + "seginw_Hand-Metal_train", + "seginw_Watermelon_train", + "seginw_House-Parts_train", + "seginw_HouseHold-Items_train", + "seginw_Strawberry_train", + "seginw_Fruits_train", + "seginw_Nutterfly-Squireel_train", + "seginw_Hand_train", + "seginw_Garbage_train", + "seginw_Chicken_train", + "seginw_Rail_train", + "seginw_Airplane-Parts_train", + "seginw_Brain-Tumor_train", + "seginw_Poles_train", + "seginw_Electric-Shaver_train", + "seginw_Bottles_train", + "seginw_Toolkits_train", + "seginw_Trash_train", + "seginw_Salmon-Fillet_train", + "seginw_Puppies_train", + "seginw_Tablets_train", + "seginw_Phones_train", + "seginw_Cows_train", + "seginw_Ginger-Garlic_train", +] + +dataloader.train = [ + L(build_detection_train_loader_multi_dataset_copypaste)( + dataset=L(get_detection_dataset_dicts_multi_dataset_copypaste)( + names=(dataset_name,), + filter_emptys=[True], + copypastes=[True], + dataloader_id=dataloader_id, + reduce_memory=True, + reduce_memory_size=1e6, + ), + dataset_bg=L(get_detection_dataset_dicts)( + names=(dataset_name,), + filter_empty=True, + ), + mapper=L(DatasetMapper_detr_panoptic_copypaste)( + is_train=True, + augmentations=[ + L(T.RandomFlip)(horizontal=True), # flip first + L(T.ResizeScale)( + min_scale=0.1, max_scale=1.0, target_height=image_size, target_width=image_size + ), + L(T.FixedSizeCrop)(crop_size=(image_size, image_size), pad=False), + ], + augmentations_with_crop=[ + L(T.RandomFlip)(horizontal=True), # flip first + L(T.ResizeScale)( + min_scale=0.1, max_scale=2.0, target_height=image_size, target_width=image_size + ), + L(T.FixedSizeCrop)(crop_size=(image_size, image_size), pad=False), + ], + image_format="RGB", + use_instance_mask=True, + recompute_boxes=True, + instance_mask_format="bitmask", + ignore_label=MetadataCatalog.get(dataset_name).get("ignore_label", None), + stuff_classes_offset=len(MetadataCatalog.get(dataset_name).get("thing_classes", [])), + stuff_classes_decomposition=True, + output_dir=None, + vis_period=12800, + dataset_names=(dataset_name,), + max_num_phrase=128, + nms_thresh_phrase=0.6, + ), + sampler=None, + sampler_bg=None, + total_batch_size=16, + total_batch_size_list=[16], + aspect_ratio_grouping=True, + num_workers=16, + num_datasets=1, + ) + for dataloader_id, dataset_name in enumerate(seginw_dataset_metas) +] + +seginw_test_dataset_names = [ + "seginw_Elephants_val", + "seginw_Hand-Metal_val", + "seginw_Watermelon_val", + "seginw_House-Parts_val", + "seginw_HouseHold-Items_val", + "seginw_Strawberry_val", + "seginw_Fruits_val", + "seginw_Nutterfly-Squireel_val", + "seginw_Hand_val", + "seginw_Garbage_val", + "seginw_Chicken_val", + "seginw_Rail_val", + "seginw_Airplane-Parts_val", + "seginw_Brain-Tumor_val", + "seginw_Poles_val", + "seginw_Electric-Shaver_val", + "seginw_Bottles_val", + "seginw_Toolkits_val", + "seginw_Trash_val", + "seginw_Salmon-Fillet_val", + "seginw_Puppies_val", + "seginw_Tablets_val", + "seginw_Phones_val", + "seginw_Cows_val", + "seginw_Ginger-Garlic_val", +] + +dataloader.tests = [ + L(build_detection_test_loader)( + dataset=L(get_detection_dataset_dicts)(names=name, filter_empty=False), + mapper=L(DatasetMapper)( + is_train=False, + augmentations=[ + L(T.ResizeShortestEdge)(short_edge_length=image_size, max_size=image_size), + ], + image_format="RGB", + ), + num_workers=4, + ) + for name in seginw_test_dataset_names +] + +dataloader.evaluators = [ + L(COCOEvaluator)( + dataset_name=name, + ) + for name in seginw_test_dataset_names +] diff --git a/approach/ovod/APE/configs/common/data/vgregion_instance.py b/approach/ovod/APE/configs/common/data/vgregion_instance.py new file mode 100644 index 0000000000000000000000000000000000000000..d428dc5788d3c492dc7f5a1b5b02aac517e7fab5 --- /dev/null +++ b/approach/ovod/APE/configs/common/data/vgregion_instance.py @@ -0,0 +1,109 @@ +import detectron2.data.transforms as T +from detectron2.config import LazyCall as L +from detectron2.data import ( + DatasetMapper, + build_detection_test_loader, + build_detection_train_loader, + get_detection_dataset_dicts, +) +from detectron2.evaluation import COCOEvaluator +from omegaconf import OmegaConf +from ape.data import ( + DatasetMapper_detr_instance, + build_detection_train_loader_multi_dataset, + get_detection_dataset_dicts_multi_dataset, +) +from ape.evaluation import RefCOCOEvaluator + +dataloader = OmegaConf.create() + +dataloader.train = L(build_detection_train_loader_multi_dataset)( + dataset=L(get_detection_dataset_dicts_multi_dataset)( + names=("visualgenome_77962_box_and_region",), + filter_emptys=[True], + ), + mapper=L(DatasetMapper_detr_instance)( + is_train=True, + augmentations=[ + L(T.RandomFlip)(), + L(T.ResizeShortestEdge)( + short_edge_length=(480, 512, 544, 576, 608, 640, 672, 704, 736, 768, 800), + max_size=1333, + sample_style="choice", + ), + ], + augmentations_with_crop=[ + L(T.RandomFlip)(), + L(T.ResizeShortestEdge)( + short_edge_length=(400, 500, 600), + sample_style="choice", + ), + L(T.RandomCrop)( + crop_type="absolute_range", + crop_size=(384, 600), + ), + L(T.ResizeShortestEdge)( + short_edge_length=(480, 512, 544, 576, 608, 640, 672, 704, 736, 768, 800), + max_size=1333, + sample_style="choice", + ), + ], + image_format="RGB", + use_instance_mask=True, + recompute_boxes=True, + dataset_names=("visualgenome_77962_box_and_region",), + ), + total_batch_size=16, + total_batch_size_list=[16], + num_workers=4, + num_datasets=1, +) + +dataloader.test = L(build_detection_test_loader)( + dataset=L(get_detection_dataset_dicts)(names="refcoco-unc-val", filter_empty=False), + mapper=L(DatasetMapper)( + is_train=False, + augmentations=[ + L(T.ResizeShortestEdge)(short_edge_length=800, max_size=1333), + ], + image_format="${...train.mapper.image_format}", + ), + num_workers=4, +) + +dataloader.evaluator = L(RefCOCOEvaluator)( + dataset_name="${..test.dataset.names}", +) + +refcoco_test_dataset_names = [ + "refcoco-unc-val", + "refcoco-unc-testA", + "refcoco-unc-testB", + "refcocoplus-unc-val", + "refcocoplus-unc-testA", + "refcocoplus-unc-testB", + "refcocog-google-val", + "refcocog-umd-val", + "refcocog-umd-test", +] +dataloader.tests = [ + L(build_detection_test_loader)( + dataset=L(get_detection_dataset_dicts)(names=name, filter_empty=False), + mapper=L(DatasetMapper)( + is_train=False, + augmentations=[ + L(T.ResizeShortestEdge)(short_edge_length=800, max_size=1333), + ], + image_format="${....train.mapper.image_format}", + ), + num_workers=4, + ) + for name in refcoco_test_dataset_names[1:] +] + +dataloader.evaluators = [ + L(RefCOCOEvaluator)( + dataset_name=name, + ) + for name in refcoco_test_dataset_names[1:] +] diff --git a/approach/ovod/detectron2/datasets/README.md b/approach/ovod/detectron2/datasets/README.md new file mode 100644 index 0000000000000000000000000000000000000000..0eb44cc3b23beeb1755ab8d12002d26f13434235 --- /dev/null +++ b/approach/ovod/detectron2/datasets/README.md @@ -0,0 +1,140 @@ +# Use Builtin Datasets + +A dataset can be used by accessing [DatasetCatalog](https://detectron2.readthedocs.io/modules/data.html#detectron2.data.DatasetCatalog) +for its data, or [MetadataCatalog](https://detectron2.readthedocs.io/modules/data.html#detectron2.data.MetadataCatalog) for its metadata (class names, etc). +This document explains how to setup the builtin datasets so they can be used by the above APIs. +[Use Custom Datasets](https://detectron2.readthedocs.io/tutorials/datasets.html) gives a deeper dive on how to use `DatasetCatalog` and `MetadataCatalog`, +and how to add new datasets to them. + +Detectron2 has builtin support for a few datasets. +The datasets are assumed to exist in a directory specified by the environment variable +`DETECTRON2_DATASETS`. +Under this directory, detectron2 will look for datasets in the structure described below, if needed. +``` +$DETECTRON2_DATASETS/ + coco/ + lvis/ + cityscapes/ + VOC20{07,12}/ +``` + +You can set the location for builtin datasets by `export DETECTRON2_DATASETS=/path/to/datasets`. +If left unset, the default is `./datasets` relative to your current working directory. + +The [model zoo](https://github.com/facebookresearch/detectron2/blob/master/MODEL_ZOO.md) +contains configs and models that use these builtin datasets. + +## Expected dataset structure for [COCO instance/keypoint detection](https://cocodataset.org/#download): + +``` +coco/ + annotations/ + instances_{train,val}2017.json + person_keypoints_{train,val}2017.json + {train,val}2017/ + # image files that are mentioned in the corresponding json +``` + +You can use the 2014 version of the dataset as well. + +Some of the builtin tests (`dev/run_*_tests.sh`) uses a tiny version of the COCO dataset, +which you can download with `./datasets/prepare_for_tests.sh`. + +## Expected dataset structure for PanopticFPN: + +Extract panoptic annotations from [COCO website](https://cocodataset.org/#download) +into the following structure: +``` +coco/ + annotations/ + panoptic_{train,val}2017.json + panoptic_{train,val}2017/ # png annotations + panoptic_stuff_{train,val}2017/ # generated by the script mentioned below +``` + +Install panopticapi by: +``` +pip install git+https://github.com/cocodataset/panopticapi.git +``` +Then, run `python datasets/prepare_panoptic_fpn.py`, to extract semantic annotations from panoptic annotations. + +## Expected dataset structure for [LVIS instance segmentation](https://www.lvisdataset.org/dataset): +``` +coco/ + {train,val,test}2017/ +lvis/ + lvis_v0.5_{train,val}.json + lvis_v0.5_image_info_test.json + lvis_v1_{train,val}.json + lvis_v1_image_info_test{,_challenge}.json +``` + +Install lvis-api by: +``` +pip install git+https://github.com/lvis-dataset/lvis-api.git +``` + +To evaluate models trained on the COCO dataset using LVIS annotations, +run `python datasets/prepare_cocofied_lvis.py` to prepare "cocofied" LVIS annotations. + +## Expected dataset structure for [cityscapes](https://www.cityscapes-dataset.com/downloads/): +``` +cityscapes/ + gtFine/ + train/ + aachen/ + color.png, instanceIds.png, labelIds.png, polygons.json, + labelTrainIds.png + ... + val/ + test/ + # below are generated Cityscapes panoptic annotation + cityscapes_panoptic_train.json + cityscapes_panoptic_train/ + cityscapes_panoptic_val.json + cityscapes_panoptic_val/ + cityscapes_panoptic_test.json + cityscapes_panoptic_test/ + leftImg8bit/ + train/ + val/ + test/ +``` +Install cityscapes scripts by: +``` +pip install git+https://github.com/mcordts/cityscapesScripts.git +``` + +Note: to create labelTrainIds.png, first prepare the above structure, then run cityscapesescript with: +``` +CITYSCAPES_DATASET=/path/to/abovementioned/cityscapes python cityscapesscripts/preparation/createTrainIdLabelImgs.py +``` +These files are not needed for instance segmentation. + +Note: to generate Cityscapes panoptic dataset, run cityscapesescript with: +``` +CITYSCAPES_DATASET=/path/to/abovementioned/cityscapes python cityscapesscripts/preparation/createPanopticImgs.py +``` +These files are not needed for semantic and instance segmentation. + +## Expected dataset structure for [Pascal VOC](http://host.robots.ox.ac.uk/pascal/VOC/index.html): +``` +VOC20{07,12}/ + Annotations/ + ImageSets/ + Main/ + trainval.txt + test.txt + # train.txt or val.txt, if you use these splits + JPEGImages/ +``` + +## Expected dataset structure for [ADE20k Scene Parsing](http://sceneparsing.csail.mit.edu/): +``` +ADEChallengeData2016/ + annotations/ + annotations_detectron2/ + images/ + objectInfo150.txt +``` +The directory `annotations_detectron2` is generated by running `python datasets/prepare_ade20k_sem_seg.py`. diff --git a/approach/ovod/detectron2/datasets/prepare_ade20k_sem_seg.py b/approach/ovod/detectron2/datasets/prepare_ade20k_sem_seg.py new file mode 100644 index 0000000000000000000000000000000000000000..8b4a58d8f2877544498e328b6d269f23aa1eb59f --- /dev/null +++ b/approach/ovod/detectron2/datasets/prepare_ade20k_sem_seg.py @@ -0,0 +1,26 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- +# Copyright (c) Facebook, Inc. and its affiliates. +import numpy as np +import os +from pathlib import Path +import tqdm +from PIL import Image + + +def convert(input, output): + img = np.asarray(Image.open(input)) + assert img.dtype == np.uint8 + img = img - 1 # 0 (ignore) becomes 255. others are shifted by 1 + Image.fromarray(img).save(output) + + +if __name__ == "__main__": + dataset_dir = Path(os.getenv("DETECTRON2_DATASETS", "datasets")) / "ADEChallengeData2016" + for name in ["training", "validation"]: + annotation_dir = dataset_dir / "annotations" / name + output_dir = dataset_dir / "annotations_detectron2" / name + output_dir.mkdir(parents=True, exist_ok=True) + for file in tqdm.tqdm(list(annotation_dir.iterdir())): + output_file = output_dir / file.name + convert(file, output_file) diff --git a/approach/ovod/detectron2/datasets/prepare_cocofied_lvis.py b/approach/ovod/detectron2/datasets/prepare_cocofied_lvis.py new file mode 100644 index 0000000000000000000000000000000000000000..245c88482a9e2405e5a912b5c560aed78a614a13 --- /dev/null +++ b/approach/ovod/detectron2/datasets/prepare_cocofied_lvis.py @@ -0,0 +1,176 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- +# Copyright (c) Facebook, Inc. and its affiliates. + +import copy +import json +import os +from collections import defaultdict + +# This mapping is extracted from the official LVIS mapping: +# https://github.com/lvis-dataset/lvis-api/blob/master/data/coco_to_synset.json +COCO_SYNSET_CATEGORIES = [ + {"synset": "person.n.01", "coco_cat_id": 1}, + {"synset": "bicycle.n.01", "coco_cat_id": 2}, + {"synset": "car.n.01", "coco_cat_id": 3}, + {"synset": "motorcycle.n.01", "coco_cat_id": 4}, + {"synset": "airplane.n.01", "coco_cat_id": 5}, + {"synset": "bus.n.01", "coco_cat_id": 6}, + {"synset": "train.n.01", "coco_cat_id": 7}, + {"synset": "truck.n.01", "coco_cat_id": 8}, + {"synset": "boat.n.01", "coco_cat_id": 9}, + {"synset": "traffic_light.n.01", "coco_cat_id": 10}, + {"synset": "fireplug.n.01", "coco_cat_id": 11}, + {"synset": "stop_sign.n.01", "coco_cat_id": 13}, + {"synset": "parking_meter.n.01", "coco_cat_id": 14}, + {"synset": "bench.n.01", "coco_cat_id": 15}, + {"synset": "bird.n.01", "coco_cat_id": 16}, + {"synset": "cat.n.01", "coco_cat_id": 17}, + {"synset": "dog.n.01", "coco_cat_id": 18}, + {"synset": "horse.n.01", "coco_cat_id": 19}, + {"synset": "sheep.n.01", "coco_cat_id": 20}, + {"synset": "beef.n.01", "coco_cat_id": 21}, + {"synset": "elephant.n.01", "coco_cat_id": 22}, + {"synset": "bear.n.01", "coco_cat_id": 23}, + {"synset": "zebra.n.01", "coco_cat_id": 24}, + {"synset": "giraffe.n.01", "coco_cat_id": 25}, + {"synset": "backpack.n.01", "coco_cat_id": 27}, + {"synset": "umbrella.n.01", "coco_cat_id": 28}, + {"synset": "bag.n.04", "coco_cat_id": 31}, + {"synset": "necktie.n.01", "coco_cat_id": 32}, + {"synset": "bag.n.06", "coco_cat_id": 33}, + {"synset": "frisbee.n.01", "coco_cat_id": 34}, + {"synset": "ski.n.01", "coco_cat_id": 35}, + {"synset": "snowboard.n.01", "coco_cat_id": 36}, + {"synset": "ball.n.06", "coco_cat_id": 37}, + {"synset": "kite.n.03", "coco_cat_id": 38}, + {"synset": "baseball_bat.n.01", "coco_cat_id": 39}, + {"synset": "baseball_glove.n.01", "coco_cat_id": 40}, + {"synset": "skateboard.n.01", "coco_cat_id": 41}, + {"synset": "surfboard.n.01", "coco_cat_id": 42}, + {"synset": "tennis_racket.n.01", "coco_cat_id": 43}, + {"synset": "bottle.n.01", "coco_cat_id": 44}, + {"synset": "wineglass.n.01", "coco_cat_id": 46}, + {"synset": "cup.n.01", "coco_cat_id": 47}, + {"synset": "fork.n.01", "coco_cat_id": 48}, + {"synset": "knife.n.01", "coco_cat_id": 49}, + {"synset": "spoon.n.01", "coco_cat_id": 50}, + {"synset": "bowl.n.03", "coco_cat_id": 51}, + {"synset": "banana.n.02", "coco_cat_id": 52}, + {"synset": "apple.n.01", "coco_cat_id": 53}, + {"synset": "sandwich.n.01", "coco_cat_id": 54}, + {"synset": "orange.n.01", "coco_cat_id": 55}, + {"synset": "broccoli.n.01", "coco_cat_id": 56}, + {"synset": "carrot.n.01", "coco_cat_id": 57}, + {"synset": "frank.n.02", "coco_cat_id": 58}, + {"synset": "pizza.n.01", "coco_cat_id": 59}, + {"synset": "doughnut.n.02", "coco_cat_id": 60}, + {"synset": "cake.n.03", "coco_cat_id": 61}, + {"synset": "chair.n.01", "coco_cat_id": 62}, + {"synset": "sofa.n.01", "coco_cat_id": 63}, + {"synset": "pot.n.04", "coco_cat_id": 64}, + {"synset": "bed.n.01", "coco_cat_id": 65}, + {"synset": "dining_table.n.01", "coco_cat_id": 67}, + {"synset": "toilet.n.02", "coco_cat_id": 70}, + {"synset": "television_receiver.n.01", "coco_cat_id": 72}, + {"synset": "laptop.n.01", "coco_cat_id": 73}, + {"synset": "mouse.n.04", "coco_cat_id": 74}, + {"synset": "remote_control.n.01", "coco_cat_id": 75}, + {"synset": "computer_keyboard.n.01", "coco_cat_id": 76}, + {"synset": "cellular_telephone.n.01", "coco_cat_id": 77}, + {"synset": "microwave.n.02", "coco_cat_id": 78}, + {"synset": "oven.n.01", "coco_cat_id": 79}, + {"synset": "toaster.n.02", "coco_cat_id": 80}, + {"synset": "sink.n.01", "coco_cat_id": 81}, + {"synset": "electric_refrigerator.n.01", "coco_cat_id": 82}, + {"synset": "book.n.01", "coco_cat_id": 84}, + {"synset": "clock.n.01", "coco_cat_id": 85}, + {"synset": "vase.n.01", "coco_cat_id": 86}, + {"synset": "scissors.n.01", "coco_cat_id": 87}, + {"synset": "teddy.n.01", "coco_cat_id": 88}, + {"synset": "hand_blower.n.01", "coco_cat_id": 89}, + {"synset": "toothbrush.n.01", "coco_cat_id": 90}, +] + + +def cocofy_lvis(input_filename, output_filename): + """ + Filter LVIS instance segmentation annotations to remove all categories that are not included in + COCO. The new json files can be used to evaluate COCO AP using `lvis-api`. The category ids in + the output json are the incontiguous COCO dataset ids. + + Args: + input_filename (str): path to the LVIS json file. + output_filename (str): path to the COCOfied json file. + """ + + with open(input_filename, "r") as f: + lvis_json = json.load(f) + + lvis_annos = lvis_json.pop("annotations") + cocofied_lvis = copy.deepcopy(lvis_json) + lvis_json["annotations"] = lvis_annos + + # Mapping from lvis cat id to coco cat id via synset + lvis_cat_id_to_synset = {cat["id"]: cat["synset"] for cat in lvis_json["categories"]} + synset_to_coco_cat_id = {x["synset"]: x["coco_cat_id"] for x in COCO_SYNSET_CATEGORIES} + # Synsets that we will keep in the dataset + synsets_to_keep = set(synset_to_coco_cat_id.keys()) + coco_cat_id_with_instances = defaultdict(int) + + new_annos = [] + ann_id = 1 + for ann in lvis_annos: + lvis_cat_id = ann["category_id"] + synset = lvis_cat_id_to_synset[lvis_cat_id] + if synset not in synsets_to_keep: + continue + coco_cat_id = synset_to_coco_cat_id[synset] + new_ann = copy.deepcopy(ann) + new_ann["category_id"] = coco_cat_id + new_ann["id"] = ann_id + ann_id += 1 + new_annos.append(new_ann) + coco_cat_id_with_instances[coco_cat_id] += 1 + cocofied_lvis["annotations"] = new_annos + + for image in cocofied_lvis["images"]: + for key in ["not_exhaustive_category_ids", "neg_category_ids"]: + new_category_list = [] + for lvis_cat_id in image[key]: + synset = lvis_cat_id_to_synset[lvis_cat_id] + if synset not in synsets_to_keep: + continue + coco_cat_id = synset_to_coco_cat_id[synset] + new_category_list.append(coco_cat_id) + coco_cat_id_with_instances[coco_cat_id] += 1 + image[key] = new_category_list + + coco_cat_id_with_instances = set(coco_cat_id_with_instances.keys()) + + new_categories = [] + for cat in lvis_json["categories"]: + synset = cat["synset"] + if synset not in synsets_to_keep: + continue + coco_cat_id = synset_to_coco_cat_id[synset] + if coco_cat_id not in coco_cat_id_with_instances: + continue + new_cat = copy.deepcopy(cat) + new_cat["id"] = coco_cat_id + new_categories.append(new_cat) + cocofied_lvis["categories"] = new_categories + + with open(output_filename, "w") as f: + json.dump(cocofied_lvis, f) + print("{} is COCOfied and stored in {}.".format(input_filename, output_filename)) + + +if __name__ == "__main__": + dataset_dir = os.path.join(os.getenv("DETECTRON2_DATASETS", "datasets"), "lvis") + for s in ["lvis_v0.5_train", "lvis_v0.5_val"]: + print("Start COCOfing {}.".format(s)) + cocofy_lvis( + os.path.join(dataset_dir, "{}.json".format(s)), + os.path.join(dataset_dir, "{}_cocofied.json".format(s)), + ) diff --git a/approach/ovod/detectron2/datasets/prepare_for_tests.sh b/approach/ovod/detectron2/datasets/prepare_for_tests.sh new file mode 100644 index 0000000000000000000000000000000000000000..67e875a41da652b2fcae6631b76d94584935ddb9 --- /dev/null +++ b/approach/ovod/detectron2/datasets/prepare_for_tests.sh @@ -0,0 +1,31 @@ +#!/bin/bash -e +# Copyright (c) Facebook, Inc. and its affiliates. + +# Download the mini dataset (coco val2017_100, with only 100 images) +# to be used in unittests & integration tests. + +cd "${0%/*}" + +BASE=https://dl.fbaipublicfiles.com/detectron2 +ROOT=${DETECTRON2_DATASETS:-./} +ROOT=${ROOT/#\~/$HOME} # expand ~ to HOME +mkdir -p $ROOT/coco/annotations + +for anno in instances_val2017_100 \ + person_keypoints_val2017_100 ; do + + dest=$ROOT/coco/annotations/$anno.json + [[ -s $dest ]] && { + echo "$dest exists. Skipping ..." + } || { + wget $BASE/annotations/coco/$anno.json -O $dest + } +done + +dest=$ROOT/coco/val2017_100.tgz +[[ -d $ROOT/coco/val2017 ]] && { + echo "$ROOT/coco/val2017 exists. Skipping ..." +} || { + wget $BASE/annotations/coco/val2017_100.tgz -O $dest + tar xzf $dest -C $ROOT/coco/ && rm -f $dest +} diff --git a/approach/ovod/detectron2/datasets/prepare_panoptic_fpn.py b/approach/ovod/detectron2/datasets/prepare_panoptic_fpn.py new file mode 100644 index 0000000000000000000000000000000000000000..597d791afab1bcc0013203a66c7fba225065eebe --- /dev/null +++ b/approach/ovod/detectron2/datasets/prepare_panoptic_fpn.py @@ -0,0 +1,116 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- +# Copyright (c) Facebook, Inc. and its affiliates. + +import functools +import json +import multiprocessing as mp +import numpy as np +import os +import time +from fvcore.common.download import download +from panopticapi.utils import rgb2id +from PIL import Image + +from detectron2.data.datasets.builtin_meta import COCO_CATEGORIES + + +def _process_panoptic_to_semantic(input_panoptic, output_semantic, segments, id_map): + panoptic = np.asarray(Image.open(input_panoptic), dtype=np.uint32) + panoptic = rgb2id(panoptic) + output = np.zeros_like(panoptic, dtype=np.uint8) + 255 + for seg in segments: + cat_id = seg["category_id"] + new_cat_id = id_map[cat_id] + output[panoptic == seg["id"]] = new_cat_id + Image.fromarray(output).save(output_semantic) + + +def separate_coco_semantic_from_panoptic(panoptic_json, panoptic_root, sem_seg_root, categories): + """ + Create semantic segmentation annotations from panoptic segmentation + annotations, to be used by PanopticFPN. + + It maps all thing categories to class 0, and maps all unlabeled pixels to class 255. + It maps all stuff categories to contiguous ids starting from 1. + + Args: + panoptic_json (str): path to the panoptic json file, in COCO's format. + panoptic_root (str): a directory with panoptic annotation files, in COCO's format. + sem_seg_root (str): a directory to output semantic annotation files + categories (list[dict]): category metadata. Each dict needs to have: + "id": corresponds to the "category_id" in the json annotations + "isthing": 0 or 1 + """ + os.makedirs(sem_seg_root, exist_ok=True) + + stuff_ids = [k["id"] for k in categories if k["isthing"] == 0] + thing_ids = [k["id"] for k in categories if k["isthing"] == 1] + id_map = {} # map from category id to id in the output semantic annotation + assert len(stuff_ids) <= 254 + for i, stuff_id in enumerate(stuff_ids): + id_map[stuff_id] = i + 1 + for thing_id in thing_ids: + id_map[thing_id] = 0 + id_map[0] = 255 + + with open(panoptic_json) as f: + obj = json.load(f) + + pool = mp.Pool(processes=max(mp.cpu_count() // 2, 4)) + + def iter_annotations(): + for anno in obj["annotations"]: + file_name = anno["file_name"] + segments = anno["segments_info"] + input = os.path.join(panoptic_root, file_name) + output = os.path.join(sem_seg_root, file_name) + yield input, output, segments + + print("Start writing to {} ...".format(sem_seg_root)) + start = time.time() + pool.starmap( + functools.partial(_process_panoptic_to_semantic, id_map=id_map), + iter_annotations(), + chunksize=100, + ) + print("Finished. time: {:.2f}s".format(time.time() - start)) + + +if __name__ == "__main__": + dataset_dir = os.path.join(os.getenv("DETECTRON2_DATASETS", "datasets"), "coco") + for s in ["val2017", "train2017"]: + separate_coco_semantic_from_panoptic( + os.path.join(dataset_dir, "annotations/panoptic_{}.json".format(s)), + os.path.join(dataset_dir, "panoptic_{}".format(s)), + os.path.join(dataset_dir, "panoptic_stuff_{}".format(s)), + COCO_CATEGORIES, + ) + + # Prepare val2017_100 for quick testing: + + dest_dir = os.path.join(dataset_dir, "annotations/") + URL_PREFIX = "https://dl.fbaipublicfiles.com/detectron2/" + download(URL_PREFIX + "annotations/coco/panoptic_val2017_100.json", dest_dir) + with open(os.path.join(dest_dir, "panoptic_val2017_100.json")) as f: + obj = json.load(f) + + def link_val100(dir_full, dir_100): + print("Creating " + dir_100 + " ...") + os.makedirs(dir_100, exist_ok=True) + for img in obj["images"]: + basename = os.path.splitext(img["file_name"])[0] + src = os.path.join(dir_full, basename + ".png") + dst = os.path.join(dir_100, basename + ".png") + src = os.path.relpath(src, start=dir_100) + os.symlink(src, dst) + + link_val100( + os.path.join(dataset_dir, "panoptic_val2017"), + os.path.join(dataset_dir, "panoptic_val2017_100"), + ) + + link_val100( + os.path.join(dataset_dir, "panoptic_stuff_val2017"), + os.path.join(dataset_dir, "panoptic_stuff_val2017_100"), + ) diff --git a/approach/ovod/detectron2/docker/Dockerfile b/approach/ovod/detectron2/docker/Dockerfile new file mode 100644 index 0000000000000000000000000000000000000000..fae0060b2b78b26e4cef9631a04e84db4eb2c567 --- /dev/null +++ b/approach/ovod/detectron2/docker/Dockerfile @@ -0,0 +1,47 @@ +FROM nvidia/cuda:11.1.1-cudnn8-devel-ubuntu18.04 +# use an older system (18.04) to avoid opencv incompatibility (issue#3524) + +ENV DEBIAN_FRONTEND noninteractive +RUN apt-get update && apt-get install -y \ + python3-opencv ca-certificates python3-dev git wget sudo ninja-build +RUN ln -sv /usr/bin/python3 /usr/bin/python + +# create a non-root user +ARG USER_ID=1000 +RUN useradd -m --no-log-init --system --uid ${USER_ID} appuser -g sudo +RUN echo '%sudo ALL=(ALL) NOPASSWD:ALL' >> /etc/sudoers +USER appuser +WORKDIR /home/appuser + +ENV PATH="/home/appuser/.local/bin:${PATH}" +RUN wget https://bootstrap.pypa.io/pip/3.6/get-pip.py && \ + python3 get-pip.py --user && \ + rm get-pip.py + +# install dependencies +# See https://pytorch.org/ for other options if you use a different version of CUDA +RUN pip install --user tensorboard cmake onnx # cmake from apt-get is too old +RUN pip install --user torch==1.10 torchvision==0.11.1 -f https://download.pytorch.org/whl/cu111/torch_stable.html + +RUN pip install --user 'git+https://github.com/facebookresearch/fvcore' +# install detectron2 +RUN git clone https://github.com/facebookresearch/detectron2 detectron2_repo +# set FORCE_CUDA because during `docker build` cuda is not accessible +ENV FORCE_CUDA="1" +# This will by default build detectron2 for all common cuda architectures and take a lot more time, +# because inside `docker build`, there is no way to tell which architecture will be used. +ARG TORCH_CUDA_ARCH_LIST="Kepler;Kepler+Tesla;Maxwell;Maxwell+Tegra;Pascal;Volta;Turing" +ENV TORCH_CUDA_ARCH_LIST="${TORCH_CUDA_ARCH_LIST}" + +RUN pip install --user -e detectron2_repo + +# Set a fixed model cache directory. +ENV FVCORE_CACHE="/tmp" +WORKDIR /home/appuser/detectron2_repo + +# run detectron2 under user "appuser": +# wget http://images.cocodataset.org/val2017/000000439715.jpg -O input.jpg +# python3 demo/demo.py \ + #--config-file configs/COCO-InstanceSegmentation/mask_rcnn_R_50_FPN_3x.yaml \ + #--input input.jpg --output outputs/ \ + #--opts MODEL.WEIGHTS detectron2://COCO-InstanceSegmentation/mask_rcnn_R_50_FPN_3x/137849600/model_final_f10217.pkl diff --git a/approach/ovod/detectron2/docker/README.md b/approach/ovod/detectron2/docker/README.md new file mode 100644 index 0000000000000000000000000000000000000000..ea709f33b007abd2de044a0338659ec003330725 --- /dev/null +++ b/approach/ovod/detectron2/docker/README.md @@ -0,0 +1,45 @@ + +## Use the container (with docker ≥ 19.03) + +``` +cd docker/ +# Build: +docker build --build-arg USER_ID=$UID -t detectron2:v0 . +# Launch (require GPUs): +docker run --gpus all -it \ + --shm-size=8gb --env="DISPLAY" --volume="/tmp/.X11-unix:/tmp/.X11-unix:rw" \ + --name=detectron2 detectron2:v0 + +# Grant docker access to host X server to show images +xhost +local:`docker inspect --format='{{ .Config.Hostname }}' detectron2` +``` + +## Use the container (with docker-compose ≥ 1.28.0) + +Install docker-compose and nvidia-docker-toolkit, then run: +``` +cd docker && USER_ID=$UID docker-compose run detectron2 +``` + +## Use the deployment container (to test C++ examples) +After building the base detectron2 container as above, do: +``` +# Build: +docker build -t detectron2-deploy:v0 -f deploy.Dockerfile . +# Launch: +docker run --gpus all -it detectron2-deploy:v0 +``` + +#### Using a persistent cache directory + +You can prevent models from being re-downloaded on every run, +by storing them in a cache directory. + +To do this, add `--volume=$HOME/.torch/fvcore_cache:/tmp:rw` in the run command. + +## Install new dependencies +Add the following to `Dockerfile` to make persistent changes. +``` +RUN sudo apt-get update && sudo apt-get install -y vim +``` +Or run them in the container to make temporary changes. diff --git a/approach/ovod/detectron2/docker/deploy.Dockerfile b/approach/ovod/detectron2/docker/deploy.Dockerfile new file mode 100644 index 0000000000000000000000000000000000000000..30b4ed774368af89d654c9f01850d769e6cf9f52 --- /dev/null +++ b/approach/ovod/detectron2/docker/deploy.Dockerfile @@ -0,0 +1,32 @@ +# Copyright (c) Facebook, Inc. and its affiliates. +# This file defines a container that compiles the C++ examples of detectron2. +# See docker/README.md for usage. + +# Depends on the image produced by "./Dockerfile" +FROM detectron2:v0 + +USER appuser +ENV HOME=/home/appuser +WORKDIR $HOME + +# Let torchvision find libtorch +ENV CMAKE_PREFIX_PATH=$HOME/.local/lib/python3.6/site-packages/torch/ + +RUN sudo apt-get update && sudo apt-get install libopencv-dev --yes + +# install libtorchvision +RUN git clone --branch v0.11.1 https://github.com/pytorch/vision/ +RUN mkdir vision/build && cd vision/build && \ + cmake .. -DCMAKE_INSTALL_PREFIX=$HOME/.local -DCMAKE_BUILD_TYPE=Release -DWITH_CUDA=on -DTORCH_CUDA_ARCH_LIST=$TORCH_CUDA_ARCH_LIST && \ + make -j && make install + +# make our installation take effect +ENV CPATH=$HOME/.local/include \ + LIBRARY_PATH=$HOME/.local/lib \ + LD_LIBRARY_PATH=$HOME/.local/lib + + +# build C++ examples of detectron2 +RUN cd detectron2_repo/tools/deploy && mkdir build && cd build && \ + cmake -DTORCH_CUDA_ARCH_LIST=$TORCH_CUDA_ARCH_LIST .. && make +# binaries will be available under tools/deploy/build diff --git a/approach/ovod/detectron2/docker/docker-compose.yml b/approach/ovod/detectron2/docker/docker-compose.yml new file mode 100644 index 0000000000000000000000000000000000000000..6665ab4c4bd40cae9973417b5b8d4c0c1edd7fc7 --- /dev/null +++ b/approach/ovod/detectron2/docker/docker-compose.yml @@ -0,0 +1,26 @@ +version: "2.3" +services: + detectron2: + build: + context: . + dockerfile: Dockerfile + args: + USER_ID: ${USER_ID:-1000} + deploy: + resources: + reservations: + devices: + - capabilities: + - gpu + shm_size: "8gb" + ulimits: + memlock: -1 + stack: 67108864 + volumes: + - /tmp/.X11-unix:/tmp/.X11-unix:ro + environment: + - DISPLAY=$DISPLAY + - NVIDIA_VISIBLE_DEVICES=all + # Uncomment with proper source to access webcam from docker + # devices: + # - /dev/video0:/dev/video0 diff --git a/approach/ovod/detectron2/projects/README.md b/approach/ovod/detectron2/projects/README.md new file mode 100644 index 0000000000000000000000000000000000000000..7fb29afcf239797ffe5061aabfef3000d820e38f --- /dev/null +++ b/approach/ovod/detectron2/projects/README.md @@ -0,0 +1,50 @@ + +Here are a few projects that are built on detectron2. +They are examples of how to use detectron2 as a library, to make your projects more +maintainable. + +## Projects by Facebook + +Note that these are research projects, and therefore may not have the same level +of support or stability as detectron2. + ++ [DensePose: Dense Human Pose Estimation In The Wild](DensePose) ++ [Scale-Aware Trident Networks for Object Detection](TridentNet) ++ [TensorMask: A Foundation for Dense Object Segmentation](TensorMask) ++ [Mesh R-CNN](https://github.com/facebookresearch/meshrcnn) ++ [PointRend: Image Segmentation as Rendering](PointRend) ++ [Momentum Contrast for Unsupervised Visual Representation Learning](https://github.com/facebookresearch/moco/tree/master/detection) ++ [DETR: End-to-End Object Detection with Transformers](https://github.com/facebookresearch/detr/tree/master/d2) ++ [Panoptic-DeepLab: A Simple, Strong, and Fast Baseline for Bottom-Up Panoptic Segmentation](Panoptic-DeepLab) ++ [D2Go (Detectron2Go)](https://github.com/facebookresearch/d2go), an end-to-end production system for training and deployment for mobile platforms. ++ [Pointly-Supervised Instance Segmentation](PointSup) ++ [Unbiased Teacher for Semi-Supervised Object Detection](https://github.com/facebookresearch/unbiased-teacher) ++ [Rethinking "Batch" in BatchNorm](Rethinking-BatchNorm/) ++ [Per-Pixel Classification is Not All You Need for Semantic Segmentation](https://github.com/facebookresearch/MaskFormer) ++ [Exploring Plain Vision Transformer Backbones for Object Detection](ViTDet/) ++ [MViTv2: Improved Multiscale Vision Transformers for Classification and Detection](MViTv2/) + + +## External Projects + +External projects in the community that use detectron2: + + + ++ [AdelaiDet](https://github.com/aim-uofa/adet), a detection toolbox including FCOS, BlendMask, etc. ++ [CenterMask](https://github.com/youngwanLEE/centermask2) ++ [Res2Net backbones](https://github.com/Res2Net/Res2Net-detectron2) ++ [VoVNet backbones](https://github.com/youngwanLEE/vovnet-detectron2) ++ [FsDet](https://github.com/ucbdrive/few-shot-object-detection), Few-Shot Object Detection. ++ [Sparse R-CNN](https://github.com/PeizeSun/SparseR-CNN) ++ [BCNet](https://github.com/lkeab/BCNet), a bilayer decoupling instance segmentation method. ++ [DD3D](https://github.com/TRI-ML/dd3d), A fully convolutional 3D detector. ++ [detrex](https://github.com/IDEA-Research/detrex), a detection toolbox for transformer-based detection algorithms including Deformable-DETR, DAB-DETR, DN-DETR, DINO, etc. diff --git a/approach/ovod/detectron2/tests/test_engine.py b/approach/ovod/detectron2/tests/test_engine.py new file mode 100644 index 0000000000000000000000000000000000000000..164a7f87a6f21731e9525b93f1e01cb174a59779 --- /dev/null +++ b/approach/ovod/detectron2/tests/test_engine.py @@ -0,0 +1,195 @@ +# Copyright (c) Facebook, Inc. and its affiliates. + +import json +import math +import os +import tempfile +import time +import unittest +from unittest import mock +import torch +from fvcore.common.checkpoint import Checkpointer +from torch import nn + +from detectron2 import model_zoo +from detectron2.config import configurable, get_cfg +from detectron2.engine import DefaultTrainer, SimpleTrainer, default_setup, hooks +from detectron2.modeling.meta_arch import META_ARCH_REGISTRY +from detectron2.utils.events import CommonMetricPrinter, JSONWriter + + +@META_ARCH_REGISTRY.register() +class _SimpleModel(nn.Module): + @configurable + def __init__(self, sleep_sec=0): + super().__init__() + self.mod = nn.Linear(10, 20) + self.sleep_sec = sleep_sec + + @classmethod + def from_config(cls, cfg): + return {} + + def forward(self, x): + if self.sleep_sec > 0: + time.sleep(self.sleep_sec) + return {"loss": x.sum() + sum([x.mean() for x in self.parameters()])} + + +class TestTrainer(unittest.TestCase): + def _data_loader(self, device): + device = torch.device(device) + while True: + yield torch.rand(3, 3).to(device) + + def test_simple_trainer(self, device="cpu"): + model = _SimpleModel().to(device=device) + trainer = SimpleTrainer( + model, self._data_loader(device), torch.optim.SGD(model.parameters(), 0.1) + ) + trainer.train(0, 10) + + def test_simple_trainer_reset_dataloader(self, device="cpu"): + model = _SimpleModel().to(device=device) + trainer = SimpleTrainer( + model, self._data_loader(device), torch.optim.SGD(model.parameters(), 0.1) + ) + trainer.train(0, 10) + trainer.reset_data_loader(lambda: self._data_loader(device)) + trainer.train(0, 10) + + @unittest.skipIf(not torch.cuda.is_available(), "CUDA not available") + def test_simple_trainer_cuda(self): + self.test_simple_trainer(device="cuda") + + def test_writer_hooks(self): + model = _SimpleModel(sleep_sec=0.1) + trainer = SimpleTrainer( + model, self._data_loader("cpu"), torch.optim.SGD(model.parameters(), 0.1) + ) + + max_iter = 50 + + with tempfile.TemporaryDirectory(prefix="detectron2_test") as d: + json_file = os.path.join(d, "metrics.json") + writers = [CommonMetricPrinter(max_iter), JSONWriter(json_file)] + + trainer.register_hooks( + [hooks.EvalHook(0, lambda: {"metric": 100}), hooks.PeriodicWriter(writers)] + ) + with self.assertLogs(writers[0].logger) as logs: + trainer.train(0, max_iter) + + with open(json_file, "r") as f: + data = [json.loads(line.strip()) for line in f] + self.assertEqual([x["iteration"] for x in data], [19, 39, 49, 50]) + # the eval metric is in the last line with iter 50 + self.assertIn("metric", data[-1], "Eval metric must be in last line of JSON!") + + # test logged messages from CommonMetricPrinter + self.assertEqual(len(logs.output), 3) + for log, iter in zip(logs.output, [19, 39, 49]): + self.assertIn(f"iter: {iter}", log) + + self.assertIn("eta: 0:00:00", logs.output[-1], "Last ETA must be 0!") + + def test_default_trainer(self): + # TODO: this test requires manifold access, so changed device to CPU. see: T88318502 + cfg = get_cfg() + cfg.MODEL.DEVICE = "cpu" + cfg.MODEL.META_ARCHITECTURE = "_SimpleModel" + cfg.DATASETS.TRAIN = ("coco_2017_val_100",) + with tempfile.TemporaryDirectory(prefix="detectron2_test") as d: + cfg.OUTPUT_DIR = d + trainer = DefaultTrainer(cfg) + + # test property + self.assertIs(trainer.model, trainer._trainer.model) + trainer.model = _SimpleModel() + self.assertIs(trainer.model, trainer._trainer.model) + + def test_checkpoint_resume(self): + model = _SimpleModel() + dataloader = self._data_loader("cpu") + opt = torch.optim.SGD(model.parameters(), 0.1) + scheduler = torch.optim.lr_scheduler.StepLR(opt, 3) + + with tempfile.TemporaryDirectory(prefix="detectron2_test") as d: + trainer = SimpleTrainer(model, dataloader, opt) + checkpointer = Checkpointer(model, d, opt=opt, trainer=trainer) + + trainer.register_hooks( + [ + hooks.LRScheduler(scheduler=scheduler), + # checkpoint after scheduler to properly save the state of scheduler + hooks.PeriodicCheckpointer(checkpointer, 10), + ] + ) + + trainer.train(0, 12) + self.assertAlmostEqual(opt.param_groups[0]["lr"], 1e-5) + self.assertEqual(scheduler.last_epoch, 12) + del trainer + + opt = torch.optim.SGD(model.parameters(), 999) # lr will be loaded + trainer = SimpleTrainer(model, dataloader, opt) + scheduler = torch.optim.lr_scheduler.StepLR(opt, 3) + trainer.register_hooks( + [ + hooks.LRScheduler(scheduler=scheduler), + ] + ) + checkpointer = Checkpointer(model, d, opt=opt, trainer=trainer) + checkpointer.resume_or_load("non_exist.pth") + self.assertEqual(trainer.iter, 11) # last finished iter number (0-based in Trainer) + # number of times `scheduler.step()` was called (1-based) + self.assertEqual(scheduler.last_epoch, 12) + self.assertAlmostEqual(opt.param_groups[0]["lr"], 1e-5) + + def test_eval_hook(self): + model = _SimpleModel() + dataloader = self._data_loader("cpu") + opt = torch.optim.SGD(model.parameters(), 0.1) + + for total_iter, period, eval_count in [(30, 15, 2), (31, 15, 3), (20, 0, 1)]: + test_func = mock.Mock(return_value={"metric": 3.0}) + trainer = SimpleTrainer(model, dataloader, opt) + trainer.register_hooks([hooks.EvalHook(period, test_func)]) + trainer.train(0, total_iter) + self.assertEqual(test_func.call_count, eval_count) + + def test_best_checkpointer(self): + model = _SimpleModel() + dataloader = self._data_loader("cpu") + opt = torch.optim.SGD(model.parameters(), 0.1) + metric_name = "metric" + total_iter = 40 + test_period = 10 + test_cases = [ + ("max", iter([0.3, 0.4, 0.35, 0.5]), 3), + ("min", iter([1.0, 0.8, 0.9, 0.9]), 2), + ("min", iter([math.nan, 0.8, 0.9, 0.9]), 1), + ] + for mode, metrics, call_count in test_cases: + trainer = SimpleTrainer(model, dataloader, opt) + with tempfile.TemporaryDirectory(prefix="detectron2_test") as d: + checkpointer = Checkpointer(model, d, opt=opt, trainer=trainer) + trainer.register_hooks( + [ + hooks.EvalHook(test_period, lambda: {metric_name: next(metrics)}), + hooks.BestCheckpointer(test_period, checkpointer, metric_name, mode=mode), + ] + ) + with mock.patch.object(checkpointer, "save") as mock_save_method: + trainer.train(0, total_iter) + self.assertEqual(mock_save_method.call_count, call_count) + + def test_setup_config(self): + with tempfile.TemporaryDirectory(prefix="detectron2_test") as d: + cfg = get_cfg() + cfg.OUTPUT_DIR = os.path.join(d, "yacs") + default_setup(cfg, {}) + + cfg = model_zoo.get_config("COCO-InstanceSegmentation/mask_rcnn_R_50_FPN_1x.py") + cfg.train.output_dir = os.path.join(d, "omegaconf") + default_setup(cfg, {}) diff --git a/approach/ovod/detectron2/tests/test_model_analysis.py b/approach/ovod/detectron2/tests/test_model_analysis.py new file mode 100644 index 0000000000000000000000000000000000000000..c01b7af09703c8dad889dee0118d74fcc12ac4b0 --- /dev/null +++ b/approach/ovod/detectron2/tests/test_model_analysis.py @@ -0,0 +1,80 @@ +# Copyright (c) Facebook, Inc. and its affiliates. + + +import unittest +import torch +from torch import nn + +from detectron2.utils.analysis import find_unused_parameters, flop_count_operators, parameter_count +from detectron2.utils.testing import get_model_no_weights + + +class RetinaNetTest(unittest.TestCase): + def setUp(self): + self.model = get_model_no_weights("COCO-Detection/retinanet_R_50_FPN_1x.yaml") + + def test_flop(self): + # RetinaNet supports flop-counting with random inputs + inputs = [{"image": torch.rand(3, 800, 800), "test_unused": "abcd"}] + res = flop_count_operators(self.model, inputs) + self.assertEqual(int(res["conv"]), 146) # 146B flops + + def test_param_count(self): + res = parameter_count(self.model) + self.assertEqual(res[""], 37915572) + self.assertEqual(res["backbone"], 31452352) + + +class FasterRCNNTest(unittest.TestCase): + def setUp(self): + self.model = get_model_no_weights("COCO-Detection/faster_rcnn_R_50_FPN_1x.yaml") + + def test_flop(self): + # Faster R-CNN supports flop-counting with random inputs + inputs = [{"image": torch.rand(3, 800, 800)}] + res = flop_count_operators(self.model, inputs) + + # This only checks flops for backbone & proposal generator + # Flops for box head is not conv, and depends on #proposals, which is + # almost 0 for random inputs. + self.assertEqual(int(res["conv"]), 117) + + def test_flop_with_output_shape(self): + inputs = [{"image": torch.rand(3, 800, 800), "height": 700, "width": 700}] + res = flop_count_operators(self.model, inputs) + self.assertEqual(int(res["conv"]), 117) + + def test_param_count(self): + res = parameter_count(self.model) + self.assertEqual(res[""], 41699936) + self.assertEqual(res["backbone"], 26799296) + + +class MaskRCNNTest(unittest.TestCase): + def setUp(self): + self.model = get_model_no_weights("COCO-InstanceSegmentation/mask_rcnn_R_50_FPN_1x.yaml") + + def test_flop(self): + inputs1 = [{"image": torch.rand(3, 800, 800)}] + inputs2 = [{"image": torch.rand(3, 800, 800), "height": 700, "width": 700}] + + for inputs in [inputs1, inputs2]: + res = flop_count_operators(self.model, inputs) + # The mask head could have extra conv flops, so total >= 117 + self.assertGreaterEqual(int(res["conv"]), 117) + + +class UnusedParamTest(unittest.TestCase): + def test_unused(self): + class TestMod(nn.Module): + def __init__(self): + super().__init__() + self.fc1 = nn.Linear(10, 10) + self.t = nn.Linear(10, 10) + + def forward(self, x): + return self.fc1(x).mean() + + m = TestMod() + ret = find_unused_parameters(m, torch.randn(10, 10)) + self.assertEqual(set(ret), {"t.weight", "t.bias"}) diff --git a/approach/ovod/detectron2/tests/test_packaging.py b/approach/ovod/detectron2/tests/test_packaging.py new file mode 100644 index 0000000000000000000000000000000000000000..a5b1661e8f341fe66a6e02c59fe172bce445782b --- /dev/null +++ b/approach/ovod/detectron2/tests/test_packaging.py @@ -0,0 +1,24 @@ +# Copyright (c) Facebook, Inc. and its affiliates. +import unittest + +from detectron2.utils.collect_env import collect_env_info + + +class TestProjects(unittest.TestCase): + def test_import(self): + from detectron2.projects import point_rend + + _ = point_rend.add_pointrend_config + + import detectron2.projects.deeplab as deeplab + + _ = deeplab.add_deeplab_config + + # import detectron2.projects.panoptic_deeplab as panoptic_deeplab + + # _ = panoptic_deeplab.add_panoptic_deeplab_config + + +class TestCollectEnv(unittest.TestCase): + def test(self): + _ = collect_env_info() diff --git a/approach/ovod/detectron2/tests/test_registry.py b/approach/ovod/detectron2/tests/test_registry.py new file mode 100644 index 0000000000000000000000000000000000000000..4e425a6ec44c7c47a5a106bfdf5ce8062c2110c9 --- /dev/null +++ b/approach/ovod/detectron2/tests/test_registry.py @@ -0,0 +1,45 @@ +# Copyright (c) Facebook, Inc. and its affiliates. +import unittest +import torch + +from detectron2.modeling.meta_arch import GeneralizedRCNN +from detectron2.utils.registry import _convert_target_to_string, locate + + +class A: + class B: + pass + + +class TestLocate(unittest.TestCase): + def _test_obj(self, obj): + name = _convert_target_to_string(obj) + newobj = locate(name) + self.assertIs(obj, newobj) + + def test_basic(self): + self._test_obj(GeneralizedRCNN) + + def test_inside_class(self): + # requires using __qualname__ instead of __name__ + self._test_obj(A.B) + + def test_builtin(self): + self._test_obj(len) + self._test_obj(dict) + + def test_pytorch_optim(self): + # pydoc.locate does not work for it + self._test_obj(torch.optim.SGD) + + def test_failure(self): + with self.assertRaises(ImportError): + locate("asdf") + + def test_compress_target(self): + from detectron2.data.transforms import RandomCrop + + name = _convert_target_to_string(RandomCrop) + # name shouldn't contain 'augmentation_impl' + self.assertEqual(name, "detectron2.data.transforms.RandomCrop") + self.assertIs(RandomCrop, locate(name)) diff --git a/approach/ovod/detectron2/tests/test_visualizer.py b/approach/ovod/detectron2/tests/test_visualizer.py new file mode 100644 index 0000000000000000000000000000000000000000..1005000f525bc876ae32a3421737e3f9fe3bc5f4 --- /dev/null +++ b/approach/ovod/detectron2/tests/test_visualizer.py @@ -0,0 +1,278 @@ +# -*- coding: utf-8 -*- +# Copyright (c) Facebook, Inc. and its affiliates. + +import numpy as np +import os +import tempfile +import unittest +import cv2 +import torch + +from detectron2.data import MetadataCatalog +from detectron2.structures import BoxMode, Instances, RotatedBoxes +from detectron2.utils.visualizer import ColorMode, Visualizer + + +class TestVisualizer(unittest.TestCase): + def _random_data(self): + H, W = 100, 100 + N = 10 + img = np.random.rand(H, W, 3) * 255 + boxxy = np.random.rand(N, 2) * (H // 2) + boxes = np.concatenate((boxxy, boxxy + H // 2), axis=1) + + def _rand_poly(): + return np.random.rand(3, 2).flatten() * H + + polygons = [[_rand_poly() for _ in range(np.random.randint(1, 5))] for _ in range(N)] + + mask = np.zeros_like(img[:, :, 0], dtype=np.bool) + mask[:40, 10:20] = 1 + + labels = [str(i) for i in range(N)] + return img, boxes, labels, polygons, [mask] * N + + @property + def metadata(self): + return MetadataCatalog.get("coco_2017_train") + + def test_draw_dataset_dict(self): + img = np.random.rand(512, 512, 3) * 255 + dic = { + "annotations": [ + { + "bbox": [ + 368.9946492271106, + 330.891438763377, + 13.148537455410235, + 13.644708680142685, + ], + "bbox_mode": BoxMode.XYWH_ABS, + "category_id": 0, + "iscrowd": 1, + "segmentation": { + "counts": "_jh52m?2N2N2N2O100O10O001N1O2MceP2", + "size": [512, 512], + }, + } + ], + "height": 512, + "image_id": 1, + "width": 512, + } + v = Visualizer(img) + v.draw_dataset_dict(dic) + + v = Visualizer(img, self.metadata) + v.draw_dataset_dict(dic) + + def test_draw_rotated_dataset_dict(self): + img = np.random.rand(512, 512, 3) * 255 + dic = { + "annotations": [ + { + "bbox": [ + 368.9946492271106, + 330.891438763377, + 13.148537455410235, + 13.644708680142685, + 45.0, + ], + "bbox_mode": BoxMode.XYWHA_ABS, + "category_id": 0, + "iscrowd": 1, + } + ], + "height": 512, + "image_id": 1, + "width": 512, + } + v = Visualizer(img, self.metadata) + v.draw_dataset_dict(dic) + + def test_overlay_instances(self): + img, boxes, labels, polygons, masks = self._random_data() + + v = Visualizer(img, self.metadata) + output = v.overlay_instances(masks=polygons, boxes=boxes, labels=labels).get_image() + self.assertEqual(output.shape, img.shape) + + # Test 2x scaling + v = Visualizer(img, self.metadata, scale=2.0) + output = v.overlay_instances(masks=polygons, boxes=boxes, labels=labels).get_image() + self.assertEqual(output.shape[0], img.shape[0] * 2) + + # Test overlay masks + v = Visualizer(img, self.metadata) + output = v.overlay_instances(masks=masks, boxes=boxes, labels=labels).get_image() + self.assertEqual(output.shape, img.shape) + + def test_overlay_instances_no_boxes(self): + img, boxes, labels, polygons, _ = self._random_data() + v = Visualizer(img, self.metadata) + v.overlay_instances(masks=polygons, boxes=None, labels=labels).get_image() + + def test_draw_instance_predictions(self): + img, boxes, _, _, masks = self._random_data() + num_inst = len(boxes) + inst = Instances((img.shape[0], img.shape[1])) + inst.pred_classes = torch.randint(0, 80, size=(num_inst,)) + inst.scores = torch.rand(num_inst) + inst.pred_boxes = torch.from_numpy(boxes) + inst.pred_masks = torch.from_numpy(np.asarray(masks)) + + v = Visualizer(img) + v.draw_instance_predictions(inst) + + v = Visualizer(img, self.metadata) + v.draw_instance_predictions(inst) + + def test_BWmode_nomask(self): + img, boxes, _, _, masks = self._random_data() + num_inst = len(boxes) + inst = Instances((img.shape[0], img.shape[1])) + inst.pred_classes = torch.randint(0, 80, size=(num_inst,)) + inst.scores = torch.rand(num_inst) + inst.pred_boxes = torch.from_numpy(boxes) + + v = Visualizer(img, self.metadata, instance_mode=ColorMode.IMAGE_BW) + v.draw_instance_predictions(inst) + + # check that output is grayscale + inst = inst[:0] + v = Visualizer(img, self.metadata, instance_mode=ColorMode.IMAGE_BW) + output = v.draw_instance_predictions(inst).get_image() + self.assertTrue(np.allclose(output[:, :, 0], output[:, :, 1])) + self.assertTrue(np.allclose(output[:, :, 0], output[:, :, 2])) + + def test_draw_empty_mask_predictions(self): + img, boxes, _, _, masks = self._random_data() + num_inst = len(boxes) + inst = Instances((img.shape[0], img.shape[1])) + inst.pred_classes = torch.randint(0, 80, size=(num_inst,)) + inst.scores = torch.rand(num_inst) + inst.pred_boxes = torch.from_numpy(boxes) + inst.pred_masks = torch.from_numpy(np.zeros_like(np.asarray(masks))) + + v = Visualizer(img, self.metadata) + v.draw_instance_predictions(inst) + + def test_correct_output_shape(self): + img = np.random.rand(928, 928, 3) * 255 + v = Visualizer(img, self.metadata) + out = v.output.get_image() + self.assertEqual(out.shape, img.shape) + + def test_overlay_rotated_instances(self): + H, W = 100, 150 + img = np.random.rand(H, W, 3) * 255 + num_boxes = 50 + boxes_5d = torch.zeros(num_boxes, 5) + boxes_5d[:, 0] = torch.FloatTensor(num_boxes).uniform_(-0.1 * W, 1.1 * W) + boxes_5d[:, 1] = torch.FloatTensor(num_boxes).uniform_(-0.1 * H, 1.1 * H) + boxes_5d[:, 2] = torch.FloatTensor(num_boxes).uniform_(0, max(W, H)) + boxes_5d[:, 3] = torch.FloatTensor(num_boxes).uniform_(0, max(W, H)) + boxes_5d[:, 4] = torch.FloatTensor(num_boxes).uniform_(-1800, 1800) + rotated_boxes = RotatedBoxes(boxes_5d) + labels = [str(i) for i in range(num_boxes)] + + v = Visualizer(img, self.metadata) + output = v.overlay_instances(boxes=rotated_boxes, labels=labels).get_image() + self.assertEqual(output.shape, img.shape) + + def test_draw_no_metadata(self): + img, boxes, _, _, masks = self._random_data() + num_inst = len(boxes) + inst = Instances((img.shape[0], img.shape[1])) + inst.pred_classes = torch.randint(0, 80, size=(num_inst,)) + inst.scores = torch.rand(num_inst) + inst.pred_boxes = torch.from_numpy(boxes) + inst.pred_masks = torch.from_numpy(np.asarray(masks)) + + v = Visualizer(img, MetadataCatalog.get("asdfasdf")) + v.draw_instance_predictions(inst) + + def test_draw_binary_mask(self): + img, boxes, _, _, masks = self._random_data() + img[:, :, 0] = 0 # remove red color + mask = masks[0] + mask_with_hole = np.zeros_like(mask).astype("uint8") + mask_with_hole = cv2.rectangle(mask_with_hole, (10, 10), (50, 50), 1, 5) + + for m in [mask, mask_with_hole]: + for save in [True, False]: + v = Visualizer(img) + o = v.draw_binary_mask(m, color="red", text="test") + if save: + with tempfile.TemporaryDirectory(prefix="detectron2_viz") as d: + path = os.path.join(d, "output.png") + o.save(path) + o = cv2.imread(path)[:, :, ::-1] + else: + o = o.get_image().astype("float32") + # red color is drawn on the image + self.assertTrue(o[:, :, 0].sum() > 0) + + def test_draw_soft_mask(self): + img = np.random.rand(100, 100, 3) * 255 + img[:, :, 0] = 0 # remove red color + mask = np.zeros((100, 100), dtype=np.float32) + mask[30:50, 40:50] = 1.0 + cv2.GaussianBlur(mask, (21, 21), 10) + + v = Visualizer(img) + o = v.draw_soft_mask(mask, color="red", text="test") + o = o.get_image().astype("float32") + # red color is drawn on the image + self.assertTrue(o[:, :, 0].sum() > 0) + + # test draw empty mask + v = Visualizer(img) + o = v.draw_soft_mask(np.zeros((100, 100), dtype=np.float32), color="red", text="test") + o = o.get_image().astype("float32") + + def test_border_mask_with_holes(self): + H, W = 200, 200 + img = np.zeros((H, W, 3)) + img[:, :, 0] = 255.0 + v = Visualizer(img, scale=3) + + mask = np.zeros((H, W)) + mask[:, 100:150] = 1 + # create a hole, to trigger imshow + mask = cv2.rectangle(mask, (110, 110), (130, 130), 0, thickness=-1) + output = v.draw_binary_mask(mask, color="blue") + output = output.get_image()[:, :, ::-1] + + first_row = {tuple(x.tolist()) for x in output[0]} + last_row = {tuple(x.tolist()) for x in output[-1]} + # Check quantization / off-by-1 error: the first and last row must have two colors + self.assertEqual(len(last_row), 2) + self.assertEqual(len(first_row), 2) + self.assertIn((0, 0, 255), last_row) + self.assertIn((0, 0, 255), first_row) + + def test_border_polygons(self): + H, W = 200, 200 + img = np.zeros((H, W, 3)) + img[:, :, 0] = 255.0 + v = Visualizer(img, scale=3) + mask = np.zeros((H, W)) + mask[:, 100:150] = 1 + + output = v.draw_binary_mask(mask, color="blue") + output = output.get_image()[:, :, ::-1] + + first_row = {tuple(x.tolist()) for x in output[0]} + last_row = {tuple(x.tolist()) for x in output[-1]} + # Check quantization / off-by-1 error: + # the first and last row must have >=2 colors, because the polygon + # touches both rows + self.assertGreaterEqual(len(last_row), 2) + self.assertGreaterEqual(len(first_row), 2) + self.assertIn((0, 0, 255), last_row) + self.assertIn((0, 0, 255), first_row) + + +if __name__ == "__main__": + unittest.main() diff --git a/approach/ovod/detectron2/tools/README.md b/approach/ovod/detectron2/tools/README.md new file mode 100644 index 0000000000000000000000000000000000000000..0b40d5319c0838fdaa22bc6a10ef0d88bc6578ed --- /dev/null +++ b/approach/ovod/detectron2/tools/README.md @@ -0,0 +1,49 @@ + +This directory contains a few example scripts that demonstrate features of detectron2. + + +* `train_net.py` + +An example training script that's made to train builtin models of detectron2. + +For usage, see [GETTING_STARTED.md](../GETTING_STARTED.md). + +* `plain_train_net.py` + +Similar to `train_net.py`, but implements a training loop instead of using `Trainer`. +This script includes fewer features but it may be more friendly to hackers. + +* `benchmark.py` + +Benchmark the training speed, inference speed or data loading speed of a given config. + +Usage: +``` +python benchmark.py --config-file config.yaml --task train/eval/data [optional DDP flags] +``` + +* `analyze_model.py` + +Analyze FLOPs, parameters, activations of a detectron2 model. See its `--help` for usage. + +* `visualize_json_results.py` + +Visualize the json instance detection/segmentation results dumped by `COCOEvalutor` or `LVISEvaluator` + +Usage: +``` +python visualize_json_results.py --input x.json --output dir/ --dataset coco_2017_val +``` +If not using a builtin dataset, you'll need your own script or modify this script. + +* `visualize_data.py` + +Visualize ground truth raw annotations or training data (after preprocessing/augmentations). + +Usage: +``` +python visualize_data.py --config-file config.yaml --source annotation/dataloader --output-dir dir/ [--show] +``` + +NOTE: the script does not stop by itself when using `--source dataloader` because a training +dataloader is usually infinite. diff --git a/approach/ovod/detectron2/tools/__init__.py b/approach/ovod/detectron2/tools/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/approach/ovod/detectron2/tools/analyze_model.py b/approach/ovod/detectron2/tools/analyze_model.py new file mode 100644 index 0000000000000000000000000000000000000000..8e38f8b71eb3b8d1e2b670e7f01a796ec2ea4b7e --- /dev/null +++ b/approach/ovod/detectron2/tools/analyze_model.py @@ -0,0 +1,159 @@ +# -*- coding: utf-8 -*- +# Copyright (c) Facebook, Inc. and its affiliates. + +import logging +import numpy as np +from collections import Counter +import tqdm +from fvcore.nn import flop_count_table # can also try flop_count_str + +from detectron2.checkpoint import DetectionCheckpointer +from detectron2.config import CfgNode, LazyConfig, get_cfg, instantiate +from detectron2.data import build_detection_test_loader +from detectron2.engine import default_argument_parser +from detectron2.modeling import build_model +from detectron2.utils.analysis import ( + FlopCountAnalysis, + activation_count_operators, + parameter_count_table, +) +from detectron2.utils.logger import setup_logger + +logger = logging.getLogger("detectron2") + + +def setup(args): + if args.config_file.endswith(".yaml"): + cfg = get_cfg() + cfg.merge_from_file(args.config_file) + cfg.DATALOADER.NUM_WORKERS = 0 + cfg.merge_from_list(args.opts) + cfg.freeze() + else: + cfg = LazyConfig.load(args.config_file) + cfg = LazyConfig.apply_overrides(cfg, args.opts) + setup_logger(name="fvcore") + setup_logger() + return cfg + + +def do_flop(cfg): + if isinstance(cfg, CfgNode): + data_loader = build_detection_test_loader(cfg, cfg.DATASETS.TEST[0]) + model = build_model(cfg) + DetectionCheckpointer(model).load(cfg.MODEL.WEIGHTS) + else: + data_loader = instantiate(cfg.dataloader.test) + model = instantiate(cfg.model) + model.to(cfg.train.device) + DetectionCheckpointer(model).load(cfg.train.init_checkpoint) + model.eval() + + counts = Counter() + total_flops = [] + for idx, data in zip(tqdm.trange(args.num_inputs), data_loader): # noqa + flops = FlopCountAnalysis(model, data) + if idx > 0: + flops.unsupported_ops_warnings(False).uncalled_modules_warnings(False) + counts += flops.by_operator() + total_flops.append(flops.total()) + + logger.info("Flops table computed from only one input sample:\n" + flop_count_table(flops)) + logger.info( + "Average GFlops for each type of operators:\n" + + str([(k, v / (idx + 1) / 1e9) for k, v in counts.items()]) + ) + logger.info( + "Total GFlops: {:.1f}±{:.1f}".format(np.mean(total_flops) / 1e9, np.std(total_flops) / 1e9) + ) + + +def do_activation(cfg): + if isinstance(cfg, CfgNode): + data_loader = build_detection_test_loader(cfg, cfg.DATASETS.TEST[0]) + model = build_model(cfg) + DetectionCheckpointer(model).load(cfg.MODEL.WEIGHTS) + else: + data_loader = instantiate(cfg.dataloader.test) + model = instantiate(cfg.model) + model.to(cfg.train.device) + DetectionCheckpointer(model).load(cfg.train.init_checkpoint) + model.eval() + + counts = Counter() + total_activations = [] + for idx, data in zip(tqdm.trange(args.num_inputs), data_loader): # noqa + count = activation_count_operators(model, data) + counts += count + total_activations.append(sum(count.values())) + logger.info( + "(Million) Activations for Each Type of Operators:\n" + + str([(k, v / idx) for k, v in counts.items()]) + ) + logger.info( + "Total (Million) Activations: {}±{}".format( + np.mean(total_activations), np.std(total_activations) + ) + ) + + +def do_parameter(cfg): + if isinstance(cfg, CfgNode): + model = build_model(cfg) + else: + model = instantiate(cfg.model) + logger.info("Parameter Count:\n" + parameter_count_table(model, max_depth=5)) + + +def do_structure(cfg): + if isinstance(cfg, CfgNode): + model = build_model(cfg) + else: + model = instantiate(cfg.model) + logger.info("Model Structure:\n" + str(model)) + + +if __name__ == "__main__": + parser = default_argument_parser( + epilog=""" +Examples: + +To show parameters of a model: +$ ./analyze_model.py --tasks parameter \\ + --config-file ../configs/COCO-InstanceSegmentation/mask_rcnn_R_50_FPN_1x.yaml + +Flops and activations are data-dependent, therefore inputs and model weights +are needed to count them: + +$ ./analyze_model.py --num-inputs 100 --tasks flop \\ + --config-file ../configs/COCO-InstanceSegmentation/mask_rcnn_R_50_FPN_1x.yaml \\ + MODEL.WEIGHTS /path/to/model.pkl +""" + ) + parser.add_argument( + "--tasks", + choices=["flop", "activation", "parameter", "structure"], + required=True, + nargs="+", + ) + parser.add_argument( + "-n", + "--num-inputs", + default=100, + type=int, + help="number of inputs used to compute statistics for flops/activations, " + "both are data dependent.", + ) + args = parser.parse_args() + assert not args.eval_only + assert args.num_gpus == 1 + + cfg = setup(args) + + for task in args.tasks: + { + "flop": do_flop, + "activation": do_activation, + "parameter": do_parameter, + "structure": do_structure, + }[task](cfg) diff --git a/approach/ovod/detectron2/tools/lazyconfig_train_net.py b/approach/ovod/detectron2/tools/lazyconfig_train_net.py new file mode 100644 index 0000000000000000000000000000000000000000..bb62d36c0c171b0391453afafc2828ebab1b0da1 --- /dev/null +++ b/approach/ovod/detectron2/tools/lazyconfig_train_net.py @@ -0,0 +1,131 @@ +#!/usr/bin/env python +# Copyright (c) Facebook, Inc. and its affiliates. +""" +Training script using the new "LazyConfig" python config files. + +This scripts reads a given python config file and runs the training or evaluation. +It can be used to train any models or dataset as long as they can be +instantiated by the recursive construction defined in the given config file. + +Besides lazy construction of models, dataloader, etc., this scripts expects a +few common configuration parameters currently defined in "configs/common/train.py". +To add more complicated training logic, you can easily add other configs +in the config file and implement a new train_net.py to handle them. +""" +import logging + +from detectron2.checkpoint import DetectionCheckpointer +from detectron2.config import LazyConfig, instantiate +from detectron2.engine import ( + AMPTrainer, + SimpleTrainer, + default_argument_parser, + default_setup, + default_writers, + hooks, + launch, +) +from detectron2.engine.defaults import create_ddp_model +from detectron2.evaluation import inference_on_dataset, print_csv_format +from detectron2.utils import comm + +logger = logging.getLogger("detectron2") + + +def do_test(cfg, model): + if "evaluator" in cfg.dataloader: + ret = inference_on_dataset( + model, instantiate(cfg.dataloader.test), instantiate(cfg.dataloader.evaluator) + ) + print_csv_format(ret) + return ret + + +def do_train(args, cfg): + """ + Args: + cfg: an object with the following attributes: + model: instantiate to a module + dataloader.{train,test}: instantiate to dataloaders + dataloader.evaluator: instantiate to evaluator for test set + optimizer: instantaite to an optimizer + lr_multiplier: instantiate to a fvcore scheduler + train: other misc config defined in `configs/common/train.py`, including: + output_dir (str) + init_checkpoint (str) + amp.enabled (bool) + max_iter (int) + eval_period, log_period (int) + device (str) + checkpointer (dict) + ddp (dict) + """ + model = instantiate(cfg.model) + logger = logging.getLogger("detectron2") + logger.info("Model:\n{}".format(model)) + model.to(cfg.train.device) + + cfg.optimizer.params.model = model + optim = instantiate(cfg.optimizer) + + train_loader = instantiate(cfg.dataloader.train) + + model = create_ddp_model(model, **cfg.train.ddp) + trainer = (AMPTrainer if cfg.train.amp.enabled else SimpleTrainer)(model, train_loader, optim) + checkpointer = DetectionCheckpointer( + model, + cfg.train.output_dir, + trainer=trainer, + ) + trainer.register_hooks( + [ + hooks.IterationTimer(), + hooks.LRScheduler(scheduler=instantiate(cfg.lr_multiplier)), + hooks.PeriodicCheckpointer(checkpointer, **cfg.train.checkpointer) + if comm.is_main_process() + else None, + hooks.EvalHook(cfg.train.eval_period, lambda: do_test(cfg, model)), + hooks.PeriodicWriter( + default_writers(cfg.train.output_dir, cfg.train.max_iter), + period=cfg.train.log_period, + ) + if comm.is_main_process() + else None, + ] + ) + + checkpointer.resume_or_load(cfg.train.init_checkpoint, resume=args.resume) + if args.resume and checkpointer.has_checkpoint(): + # The checkpoint stores the training iteration that just finished, thus we start + # at the next iteration + start_iter = trainer.iter + 1 + else: + start_iter = 0 + trainer.train(start_iter, cfg.train.max_iter) + + +def main(args): + cfg = LazyConfig.load(args.config_file) + cfg = LazyConfig.apply_overrides(cfg, args.opts) + default_setup(cfg, args) + + if args.eval_only: + model = instantiate(cfg.model) + model.to(cfg.train.device) + model = create_ddp_model(model) + DetectionCheckpointer(model).load(cfg.train.init_checkpoint) + print(do_test(cfg, model)) + else: + do_train(args, cfg) + + +if __name__ == "__main__": + args = default_argument_parser().parse_args() + launch( + main, + args.num_gpus, + num_machines=args.num_machines, + machine_rank=args.machine_rank, + dist_url=args.dist_url, + args=(args,), + ) diff --git a/approach/ovod/detectron2/tools/plain_train_net.py b/approach/ovod/detectron2/tools/plain_train_net.py new file mode 100644 index 0000000000000000000000000000000000000000..be4588e559816727635ce287281df3d41514a8cc --- /dev/null +++ b/approach/ovod/detectron2/tools/plain_train_net.py @@ -0,0 +1,217 @@ +#!/usr/bin/env python +# Copyright (c) Facebook, Inc. and its affiliates. +""" +Detectron2 training script with a plain training loop. + +This script reads a given config file and runs the training or evaluation. +It is an entry point that is able to train standard models in detectron2. + +In order to let one script support training of many models, +this script contains logic that are specific to these built-in models and therefore +may not be suitable for your own project. +For example, your research project perhaps only needs a single "evaluator". + +Therefore, we recommend you to use detectron2 as a library and take +this file as an example of how to use the library. +You may want to write your own script with your datasets and other customizations. + +Compared to "train_net.py", this script supports fewer default features. +It also includes fewer abstraction, therefore is easier to add custom logic. +""" + +import logging +import os +from collections import OrderedDict +import torch +from torch.nn.parallel import DistributedDataParallel + +import detectron2.utils.comm as comm +from detectron2.checkpoint import DetectionCheckpointer, PeriodicCheckpointer +from detectron2.config import get_cfg +from detectron2.data import ( + MetadataCatalog, + build_detection_test_loader, + build_detection_train_loader, +) +from detectron2.engine import default_argument_parser, default_setup, default_writers, launch +from detectron2.evaluation import ( + CityscapesInstanceEvaluator, + CityscapesSemSegEvaluator, + COCOEvaluator, + COCOPanopticEvaluator, + DatasetEvaluators, + LVISEvaluator, + PascalVOCDetectionEvaluator, + SemSegEvaluator, + inference_on_dataset, + print_csv_format, +) +from detectron2.modeling import build_model +from detectron2.solver import build_lr_scheduler, build_optimizer +from detectron2.utils.events import EventStorage + +logger = logging.getLogger("detectron2") + + +def get_evaluator(cfg, dataset_name, output_folder=None): + """ + Create evaluator(s) for a given dataset. + This uses the special metadata "evaluator_type" associated with each builtin dataset. + For your own dataset, you can simply create an evaluator manually in your + script and do not have to worry about the hacky if-else logic here. + """ + if output_folder is None: + output_folder = os.path.join(cfg.OUTPUT_DIR, "inference") + evaluator_list = [] + evaluator_type = MetadataCatalog.get(dataset_name).evaluator_type + if evaluator_type in ["sem_seg", "coco_panoptic_seg"]: + evaluator_list.append( + SemSegEvaluator( + dataset_name, + distributed=True, + output_dir=output_folder, + ) + ) + if evaluator_type in ["coco", "coco_panoptic_seg"]: + evaluator_list.append(COCOEvaluator(dataset_name, output_dir=output_folder)) + if evaluator_type == "coco_panoptic_seg": + evaluator_list.append(COCOPanopticEvaluator(dataset_name, output_folder)) + if evaluator_type == "cityscapes_instance": + return CityscapesInstanceEvaluator(dataset_name) + if evaluator_type == "cityscapes_sem_seg": + return CityscapesSemSegEvaluator(dataset_name) + if evaluator_type == "pascal_voc": + return PascalVOCDetectionEvaluator(dataset_name) + if evaluator_type == "lvis": + return LVISEvaluator(dataset_name, cfg, True, output_folder) + if len(evaluator_list) == 0: + raise NotImplementedError( + "no Evaluator for the dataset {} with the type {}".format(dataset_name, evaluator_type) + ) + if len(evaluator_list) == 1: + return evaluator_list[0] + return DatasetEvaluators(evaluator_list) + + +def do_test(cfg, model): + results = OrderedDict() + for dataset_name in cfg.DATASETS.TEST: + data_loader = build_detection_test_loader(cfg, dataset_name) + evaluator = get_evaluator( + cfg, dataset_name, os.path.join(cfg.OUTPUT_DIR, "inference", dataset_name) + ) + results_i = inference_on_dataset(model, data_loader, evaluator) + results[dataset_name] = results_i + if comm.is_main_process(): + logger.info("Evaluation results for {} in csv format:".format(dataset_name)) + print_csv_format(results_i) + if len(results) == 1: + results = list(results.values())[0] + return results + + +def do_train(cfg, model, resume=False): + model.train() + optimizer = build_optimizer(cfg, model) + scheduler = build_lr_scheduler(cfg, optimizer) + + checkpointer = DetectionCheckpointer( + model, cfg.OUTPUT_DIR, optimizer=optimizer, scheduler=scheduler + ) + start_iter = ( + checkpointer.resume_or_load(cfg.MODEL.WEIGHTS, resume=resume).get("iteration", -1) + 1 + ) + max_iter = cfg.SOLVER.MAX_ITER + + periodic_checkpointer = PeriodicCheckpointer( + checkpointer, cfg.SOLVER.CHECKPOINT_PERIOD, max_iter=max_iter + ) + + writers = default_writers(cfg.OUTPUT_DIR, max_iter) if comm.is_main_process() else [] + + # compared to "train_net.py", we do not support accurate timing and + # precise BN here, because they are not trivial to implement in a small training loop + data_loader = build_detection_train_loader(cfg) + logger.info("Starting training from iteration {}".format(start_iter)) + with EventStorage(start_iter) as storage: + for data, iteration in zip(data_loader, range(start_iter, max_iter)): + storage.iter = iteration + + loss_dict = model(data) + losses = sum(loss_dict.values()) + assert torch.isfinite(losses).all(), loss_dict + + loss_dict_reduced = {k: v.item() for k, v in comm.reduce_dict(loss_dict).items()} + losses_reduced = sum(loss for loss in loss_dict_reduced.values()) + if comm.is_main_process(): + storage.put_scalars(total_loss=losses_reduced, **loss_dict_reduced) + + optimizer.zero_grad() + losses.backward() + optimizer.step() + storage.put_scalar("lr", optimizer.param_groups[0]["lr"], smoothing_hint=False) + scheduler.step() + + if ( + cfg.TEST.EVAL_PERIOD > 0 + and (iteration + 1) % cfg.TEST.EVAL_PERIOD == 0 + and iteration != max_iter - 1 + ): + do_test(cfg, model) + # Compared to "train_net.py", the test results are not dumped to EventStorage + comm.synchronize() + + if iteration - start_iter > 5 and ( + (iteration + 1) % 20 == 0 or iteration == max_iter - 1 + ): + for writer in writers: + writer.write() + periodic_checkpointer.step(iteration) + + +def setup(args): + """ + Create configs and perform basic setups. + """ + cfg = get_cfg() + cfg.merge_from_file(args.config_file) + cfg.merge_from_list(args.opts) + cfg.freeze() + default_setup( + cfg, args + ) # if you don't like any of the default setup, write your own setup code + return cfg + + +def main(args): + cfg = setup(args) + + model = build_model(cfg) + logger.info("Model:\n{}".format(model)) + if args.eval_only: + DetectionCheckpointer(model, save_dir=cfg.OUTPUT_DIR).resume_or_load( + cfg.MODEL.WEIGHTS, resume=args.resume + ) + return do_test(cfg, model) + + distributed = comm.get_world_size() > 1 + if distributed: + model = DistributedDataParallel( + model, device_ids=[comm.get_local_rank()], broadcast_buffers=False + ) + + do_train(cfg, model, resume=args.resume) + return do_test(cfg, model) + + +if __name__ == "__main__": + args = default_argument_parser().parse_args() + print("Command Line Args:", args) + launch( + main, + args.num_gpus, + num_machines=args.num_machines, + machine_rank=args.machine_rank, + dist_url=args.dist_url, + args=(args,), + ) diff --git a/approach/ovod/detectron2/tools/train_net.py b/approach/ovod/detectron2/tools/train_net.py new file mode 100644 index 0000000000000000000000000000000000000000..8a6f29715da49f524604acc7bd38bda1bab99fd5 --- /dev/null +++ b/approach/ovod/detectron2/tools/train_net.py @@ -0,0 +1,163 @@ +#!/usr/bin/env python +# Copyright (c) Facebook, Inc. and its affiliates. +""" +A main training script. + +This scripts reads a given config file and runs the training or evaluation. +It is an entry point that is made to train standard models in detectron2. + +In order to let one script support training of many models, +this script contains logic that are specific to these built-in models and therefore +may not be suitable for your own project. +For example, your research project perhaps only needs a single "evaluator". + +Therefore, we recommend you to use detectron2 as an library and take +this file as an example of how to use the library. +You may want to write your own script with your datasets and other customizations. +""" + +import logging +import os +from collections import OrderedDict + +import detectron2.utils.comm as comm +from detectron2.checkpoint import DetectionCheckpointer +from detectron2.config import get_cfg +from detectron2.data import MetadataCatalog +from detectron2.engine import DefaultTrainer, default_argument_parser, default_setup, hooks, launch +from detectron2.evaluation import ( + CityscapesInstanceEvaluator, + CityscapesSemSegEvaluator, + COCOEvaluator, + COCOPanopticEvaluator, + DatasetEvaluators, + LVISEvaluator, + PascalVOCDetectionEvaluator, + SemSegEvaluator, + verify_results, +) +from detectron2.modeling import GeneralizedRCNNWithTTA + + +def build_evaluator(cfg, dataset_name, output_folder=None): + """ + Create evaluator(s) for a given dataset. + This uses the special metadata "evaluator_type" associated with each builtin dataset. + For your own dataset, you can simply create an evaluator manually in your + script and do not have to worry about the hacky if-else logic here. + """ + if output_folder is None: + output_folder = os.path.join(cfg.OUTPUT_DIR, "inference") + evaluator_list = [] + evaluator_type = MetadataCatalog.get(dataset_name).evaluator_type + if evaluator_type in ["sem_seg", "coco_panoptic_seg"]: + evaluator_list.append( + SemSegEvaluator( + dataset_name, + distributed=True, + output_dir=output_folder, + ) + ) + if evaluator_type in ["coco", "coco_panoptic_seg"]: + evaluator_list.append(COCOEvaluator(dataset_name, output_dir=output_folder)) + if evaluator_type == "coco_panoptic_seg": + evaluator_list.append(COCOPanopticEvaluator(dataset_name, output_folder)) + if evaluator_type == "cityscapes_instance": + return CityscapesInstanceEvaluator(dataset_name) + if evaluator_type == "cityscapes_sem_seg": + return CityscapesSemSegEvaluator(dataset_name) + elif evaluator_type == "pascal_voc": + return PascalVOCDetectionEvaluator(dataset_name) + elif evaluator_type == "lvis": + return LVISEvaluator(dataset_name, output_dir=output_folder) + if len(evaluator_list) == 0: + raise NotImplementedError( + "no Evaluator for the dataset {} with the type {}".format(dataset_name, evaluator_type) + ) + elif len(evaluator_list) == 1: + return evaluator_list[0] + return DatasetEvaluators(evaluator_list) + + +class Trainer(DefaultTrainer): + """ + We use the "DefaultTrainer" which contains pre-defined default logic for + standard training workflow. They may not work for you, especially if you + are working on a new research project. In that case you can write your + own training loop. You can use "tools/plain_train_net.py" as an example. + """ + + @classmethod + def build_evaluator(cls, cfg, dataset_name, output_folder=None): + return build_evaluator(cfg, dataset_name, output_folder) + + @classmethod + def test_with_TTA(cls, cfg, model): + logger = logging.getLogger("detectron2.trainer") + # In the end of training, run an evaluation with TTA + # Only support some R-CNN models. + logger.info("Running inference with test-time augmentation ...") + model = GeneralizedRCNNWithTTA(cfg, model) + evaluators = [ + cls.build_evaluator( + cfg, name, output_folder=os.path.join(cfg.OUTPUT_DIR, "inference_TTA") + ) + for name in cfg.DATASETS.TEST + ] + res = cls.test(cfg, model, evaluators) + res = OrderedDict({k + "_TTA": v for k, v in res.items()}) + return res + + +def setup(args): + """ + Create configs and perform basic setups. + """ + cfg = get_cfg() + cfg.merge_from_file(args.config_file) + cfg.merge_from_list(args.opts) + cfg.freeze() + default_setup(cfg, args) + return cfg + + +def main(args): + cfg = setup(args) + + if args.eval_only: + model = Trainer.build_model(cfg) + DetectionCheckpointer(model, save_dir=cfg.OUTPUT_DIR).resume_or_load( + cfg.MODEL.WEIGHTS, resume=args.resume + ) + res = Trainer.test(cfg, model) + if cfg.TEST.AUG.ENABLED: + res.update(Trainer.test_with_TTA(cfg, model)) + if comm.is_main_process(): + verify_results(cfg, res) + return res + + """ + If you'd like to do anything fancier than the standard training logic, + consider writing your own training loop (see plain_train_net.py) or + subclassing the trainer. + """ + trainer = Trainer(cfg) + trainer.resume_or_load(resume=args.resume) + if cfg.TEST.AUG.ENABLED: + trainer.register_hooks( + [hooks.EvalHook(0, lambda: trainer.test_with_TTA(cfg, trainer.model))] + ) + return trainer.train() + + +if __name__ == "__main__": + args = default_argument_parser().parse_args() + print("Command Line Args:", args) + launch( + main, + args.num_gpus, + num_machines=args.num_machines, + machine_rank=args.machine_rank, + dist_url=args.dist_url, + args=(args,), + ) diff --git a/approach/ovod/detectron2/tools/visualize_data.py b/approach/ovod/detectron2/tools/visualize_data.py new file mode 100644 index 0000000000000000000000000000000000000000..fd0ba8347bfd34fc8fac5ffef9aee10915ad1820 --- /dev/null +++ b/approach/ovod/detectron2/tools/visualize_data.py @@ -0,0 +1,94 @@ +#!/usr/bin/env python +# Copyright (c) Facebook, Inc. and its affiliates. +import argparse +import os +from itertools import chain +import cv2 +import tqdm + +from detectron2.config import get_cfg +from detectron2.data import DatasetCatalog, MetadataCatalog, build_detection_train_loader +from detectron2.data import detection_utils as utils +from detectron2.data.build import filter_images_with_few_keypoints +from detectron2.utils.logger import setup_logger +from detectron2.utils.visualizer import Visualizer + + +def setup(args): + cfg = get_cfg() + if args.config_file: + cfg.merge_from_file(args.config_file) + cfg.merge_from_list(args.opts) + cfg.DATALOADER.NUM_WORKERS = 0 + cfg.freeze() + return cfg + + +def parse_args(in_args=None): + parser = argparse.ArgumentParser(description="Visualize ground-truth data") + parser.add_argument( + "--source", + choices=["annotation", "dataloader"], + required=True, + help="visualize the annotations or the data loader (with pre-processing)", + ) + parser.add_argument("--config-file", metavar="FILE", help="path to config file") + parser.add_argument("--output-dir", default="./", help="path to output directory") + parser.add_argument("--show", action="store_true", help="show output in a window") + parser.add_argument( + "opts", + help="Modify config options using the command-line", + default=None, + nargs=argparse.REMAINDER, + ) + return parser.parse_args(in_args) + + +if __name__ == "__main__": + args = parse_args() + logger = setup_logger() + logger.info("Arguments: " + str(args)) + cfg = setup(args) + + dirname = args.output_dir + os.makedirs(dirname, exist_ok=True) + metadata = MetadataCatalog.get(cfg.DATASETS.TRAIN[0]) + + def output(vis, fname): + if args.show: + print(fname) + cv2.imshow("window", vis.get_image()[:, :, ::-1]) + cv2.waitKey() + else: + filepath = os.path.join(dirname, fname) + print("Saving to {} ...".format(filepath)) + vis.save(filepath) + + scale = 1.0 + if args.source == "dataloader": + train_data_loader = build_detection_train_loader(cfg) + for batch in train_data_loader: + for per_image in batch: + # Pytorch tensor is in (C, H, W) format + img = per_image["image"].permute(1, 2, 0).cpu().detach().numpy() + img = utils.convert_image_to_rgb(img, cfg.INPUT.FORMAT) + + visualizer = Visualizer(img, metadata=metadata, scale=scale) + target_fields = per_image["instances"].get_fields() + labels = [metadata.thing_classes[i] for i in target_fields["gt_classes"]] + vis = visualizer.overlay_instances( + labels=labels, + boxes=target_fields.get("gt_boxes", None), + masks=target_fields.get("gt_masks", None), + keypoints=target_fields.get("gt_keypoints", None), + ) + output(vis, str(per_image["image_id"]) + ".jpg") + else: + dicts = list(chain.from_iterable([DatasetCatalog.get(k) for k in cfg.DATASETS.TRAIN])) + if cfg.MODEL.KEYPOINT_ON: + dicts = filter_images_with_few_keypoints(dicts, 1) + for dic in tqdm.tqdm(dicts): + img = utils.read_image(dic["file_name"], "RGB") + visualizer = Visualizer(img, metadata=metadata, scale=scale) + vis = visualizer.draw_dataset_dict(dic) + output(vis, os.path.basename(dic["file_name"])) diff --git a/approach/ovod/detectron2/tools/visualize_json_results.py b/approach/ovod/detectron2/tools/visualize_json_results.py new file mode 100644 index 0000000000000000000000000000000000000000..472190e0b3b38b55773795915badbb5bc4599d42 --- /dev/null +++ b/approach/ovod/detectron2/tools/visualize_json_results.py @@ -0,0 +1,90 @@ +#!/usr/bin/env python +# Copyright (c) Facebook, Inc. and its affiliates. + +import argparse +import json +import numpy as np +import os +from collections import defaultdict +import cv2 +import tqdm + +from detectron2.data import DatasetCatalog, MetadataCatalog +from detectron2.structures import Boxes, BoxMode, Instances +from detectron2.utils.file_io import PathManager +from detectron2.utils.logger import setup_logger +from detectron2.utils.visualizer import Visualizer + + +def create_instances(predictions, image_size): + ret = Instances(image_size) + + score = np.asarray([x["score"] for x in predictions]) + chosen = (score > args.conf_threshold).nonzero()[0] + score = score[chosen] + bbox = np.asarray([predictions[i]["bbox"] for i in chosen]).reshape(-1, 4) + bbox = BoxMode.convert(bbox, BoxMode.XYWH_ABS, BoxMode.XYXY_ABS) + + labels = np.asarray([dataset_id_map(predictions[i]["category_id"]) for i in chosen]) + + ret.scores = score + ret.pred_boxes = Boxes(bbox) + ret.pred_classes = labels + + try: + ret.pred_masks = [predictions[i]["segmentation"] for i in chosen] + except KeyError: + pass + return ret + + +if __name__ == "__main__": + parser = argparse.ArgumentParser( + description="A script that visualizes the json predictions from COCO or LVIS dataset." + ) + parser.add_argument("--input", required=True, help="JSON file produced by the model") + parser.add_argument("--output", required=True, help="output directory") + parser.add_argument("--dataset", help="name of the dataset", default="coco_2017_val") + parser.add_argument("--conf-threshold", default=0.5, type=float, help="confidence threshold") + args = parser.parse_args() + + logger = setup_logger() + + with PathManager.open(args.input, "r") as f: + predictions = json.load(f) + + pred_by_image = defaultdict(list) + for p in predictions: + pred_by_image[p["image_id"]].append(p) + + dicts = list(DatasetCatalog.get(args.dataset)) + metadata = MetadataCatalog.get(args.dataset) + if hasattr(metadata, "thing_dataset_id_to_contiguous_id"): + + def dataset_id_map(ds_id): + return metadata.thing_dataset_id_to_contiguous_id[ds_id] + + elif "lvis" in args.dataset: + # LVIS results are in the same format as COCO results, but have a different + # mapping from dataset category id to contiguous category id in [0, #categories - 1] + def dataset_id_map(ds_id): + return ds_id - 1 + + else: + raise ValueError("Unsupported dataset: {}".format(args.dataset)) + + os.makedirs(args.output, exist_ok=True) + + for dic in tqdm.tqdm(dicts): + img = cv2.imread(dic["file_name"], cv2.IMREAD_COLOR)[:, :, ::-1] + basename = os.path.basename(dic["file_name"]) + + predictions = create_instances(pred_by_image[dic["image_id"]], img.shape[:2]) + vis = Visualizer(img, metadata) + vis_pred = vis.draw_instance_predictions(predictions).get_image() + + vis = Visualizer(img, metadata) + vis_gt = vis.draw_dataset_dict(dic).get_image() + + concat = np.concatenate((vis_pred, vis_gt), axis=1) + cv2.imwrite(os.path.join(args.output, basename), concat[:, :, ::-1]) diff --git a/approach/ovod/mm-ovod/configs/base_r50_4x_clip.yaml b/approach/ovod/mm-ovod/configs/base_r50_4x_clip.yaml new file mode 100644 index 0000000000000000000000000000000000000000..9c4dd015fde5b056d56e01e29af23f53f470e250 --- /dev/null +++ b/approach/ovod/mm-ovod/configs/base_r50_4x_clip.yaml @@ -0,0 +1,81 @@ +MODEL: + META_ARCHITECTURE: "CustomRCNN" + MASK_ON: True + PROPOSAL_GENERATOR: + NAME: "CenterNet" + WEIGHTS: "checkpoints/resnet50_miil_21k.pkl" + BACKBONE: + NAME: build_p67_timm_fpn_backbone + TIMM: + BASE_NAME: resnet50_in21k + FPN: + IN_FEATURES: ["layer3", "layer4", "layer5"] + PIXEL_MEAN: [123.675, 116.280, 103.530] + PIXEL_STD: [58.395, 57.12, 57.375] + ROI_HEADS: + NAME: DeticCascadeROIHeads + IN_FEATURES: ["p3", "p4", "p5"] + IOU_THRESHOLDS: [0.6] + NUM_CLASSES: 1203 + SCORE_THRESH_TEST: 0.02 + NMS_THRESH_TEST: 0.5 + ROI_BOX_CASCADE_HEAD: + IOUS: [0.6, 0.7, 0.8] + ROI_BOX_HEAD: + NAME: "FastRCNNConvFCHead" + NUM_FC: 2 + POOLER_RESOLUTION: 7 + CLS_AGNOSTIC_BBOX_REG: True + MULT_PROPOSAL_SCORE: True + USE_SIGMOID_CE: True + USE_FED_LOSS: True + ROI_MASK_HEAD: + NAME: "MaskRCNNConvUpsampleHead" + NUM_CONV: 4 + POOLER_RESOLUTION: 14 + CLS_AGNOSTIC_MASK: True + CENTERNET: + NUM_CLASSES: 1203 + REG_WEIGHT: 1. + NOT_NORM_REG: True + ONLY_PROPOSAL: True + WITH_AGN_HM: True + INFERENCE_TH: 0.0001 + PRE_NMS_TOPK_TRAIN: 4000 + POST_NMS_TOPK_TRAIN: 2000 + PRE_NMS_TOPK_TEST: 1000 + POST_NMS_TOPK_TEST: 256 + NMS_TH_TRAIN: 0.9 + NMS_TH_TEST: 0.9 + POS_WEIGHT: 0.5 + NEG_WEIGHT: 0.5 + IGNORE_HIGH_FP: 0.85 +DATASETS: + TRAIN: ("lvis_v1_train",) + TEST: ("lvis_v1_val",) +DATALOADER: + SAMPLER_TRAIN: "RepeatFactorTrainingSampler" + REPEAT_THRESHOLD: 0.001 + NUM_WORKERS: 8 +TEST: + DETECTIONS_PER_IMAGE: 300 +SOLVER: + LR_SCHEDULER_NAME: "WarmupCosineLR" + CHECKPOINT_PERIOD: 30000 + WARMUP_ITERS: 10000 + WARMUP_FACTOR: 0.0001 + USE_CUSTOM_SOLVER: True + OPTIMIZER: "ADAMW" + MAX_ITER: 90000 + IMS_PER_BATCH: 64 + BASE_LR: 0.0002 + CLIP_GRADIENTS: + ENABLED: True +INPUT: + FORMAT: RGB + CUSTOM_AUG: EfficientDetResizeCrop + TRAIN_SIZE: 640 +OUTPUT_DIR: "./output/mm-ovod/auto" +EVAL_PROPOSAL_AR: False +VERSION: 2 +FP16: True diff --git a/approach/ovod/mm-ovod/configs/lvis-base_in-l_r50_4x_4x_clip_gpt3_descriptions.yaml b/approach/ovod/mm-ovod/configs/lvis-base_in-l_r50_4x_4x_clip_gpt3_descriptions.yaml new file mode 100644 index 0000000000000000000000000000000000000000..02e238a130983583327cbdd023b451f23c8c897b --- /dev/null +++ b/approach/ovod/mm-ovod/configs/lvis-base_in-l_r50_4x_4x_clip_gpt3_descriptions.yaml @@ -0,0 +1,29 @@ +_BASE_: "base_r50_4x_clip.yaml" +MODEL: + ROI_BOX_HEAD: + USE_ZEROSHOT_CLS: True + IMAGE_LABEL_LOSS: 'max_size' + USE_BIAS: -2.0 + ZEROSHOT_WEIGHT_PATH: "datasets/metadata/lvis_gpt3_text-davinci-002_features_author.npy" + WEIGHTS: "output/mm-ovod/lvis-base_r50_4x_clip_gpt3_descriptions/model_final.pth" +SOLVER: + MAX_ITER: 90000 + IMS_PER_BATCH: 64 + BASE_LR: 0.0002 + WARMUP_ITERS: 1000 + WARMUP_FACTOR: 0.001 +DATASETS: + TRAIN: ("lvis_v1_train_norare","imagenet_lvis_v1") +DATALOADER: + SAMPLER_TRAIN: "MultiDatasetSampler" + DATASET_RATIO: [1, 4] + USE_DIFF_BS_SIZE: True + DATASET_BS: [16, 64] + DATASET_INPUT_SIZE: [640, 320] + USE_RFS: [True, False] + DATASET_INPUT_SCALE: [[0.1, 2.0], [0.5, 1.5]] + FILTER_EMPTY_ANNOTATIONS: False + MULTI_DATASET_GROUPING: True + DATASET_ANN: ['box', 'image'] + NUM_WORKERS: 8 +WITH_IMAGE_LABELS: True diff --git a/approach/ovod/mm-ovod/configs/lvis-base_in-l_r50_4x_4x_clip_image_exemplars_agg.yaml b/approach/ovod/mm-ovod/configs/lvis-base_in-l_r50_4x_4x_clip_image_exemplars_agg.yaml new file mode 100644 index 0000000000000000000000000000000000000000..a43a9fb9cb2a56136a0ea45aa5fd0bd2a19b2e5b --- /dev/null +++ b/approach/ovod/mm-ovod/configs/lvis-base_in-l_r50_4x_4x_clip_image_exemplars_agg.yaml @@ -0,0 +1,29 @@ +_BASE_: "base_r50_4x_clip.yaml" +MODEL: + ROI_BOX_HEAD: + USE_ZEROSHOT_CLS: True + IMAGE_LABEL_LOSS: 'max_size' + USE_BIAS: -2.0 + ZEROSHOT_WEIGHT_PATH: 'datasets/metadata/lvis_image_exemplar_features_agg_K-005_author.npy' + WEIGHTS: "output/mm-ovod/lvis-base_r50_4x_clip_image_exemplars_agg/model_final.pth" +SOLVER: + MAX_ITER: 90000 + IMS_PER_BATCH: 64 + BASE_LR: 0.0002 + WARMUP_ITERS: 1000 + WARMUP_FACTOR: 0.001 +DATASETS: + TRAIN: ("lvis_v1_train_norare","imagenet_lvis_v1") +DATALOADER: + SAMPLER_TRAIN: "MultiDatasetSampler" + DATASET_RATIO: [1, 4] + USE_DIFF_BS_SIZE: True + DATASET_BS: [16, 64] + DATASET_INPUT_SIZE: [640, 320] + USE_RFS: [True, False] + DATASET_INPUT_SCALE: [[0.1, 2.0], [0.5, 1.5]] + FILTER_EMPTY_ANNOTATIONS: False + MULTI_DATASET_GROUPING: True + DATASET_ANN: ['box', 'image'] + NUM_WORKERS: 8 +WITH_IMAGE_LABELS: True diff --git a/approach/ovod/mm-ovod/configs/lvis-base_in-l_r50_4x_4x_clip_image_exemplars_avg.yaml b/approach/ovod/mm-ovod/configs/lvis-base_in-l_r50_4x_4x_clip_image_exemplars_avg.yaml new file mode 100644 index 0000000000000000000000000000000000000000..5815eb1d262ddcb37558680872eed18561cf21f9 --- /dev/null +++ b/approach/ovod/mm-ovod/configs/lvis-base_in-l_r50_4x_4x_clip_image_exemplars_avg.yaml @@ -0,0 +1,29 @@ +_BASE_: "base_r50_4x_clip.yaml" +MODEL: + ROI_BOX_HEAD: + USE_ZEROSHOT_CLS: True + IMAGE_LABEL_LOSS: 'max_size' + USE_BIAS: -2.0 + ZEROSHOT_WEIGHT_PATH: 'datasets/metadata/lvis_image_exemplar_features_avg_K-005_author.npy' + WEIGHTS: "output/mm-ovod/lvis-base_r50_4x_clip_image_exemplars_avg/model_final.pth" +SOLVER: + MAX_ITER: 90000 + IMS_PER_BATCH: 64 + BASE_LR: 0.0002 + WARMUP_ITERS: 1000 + WARMUP_FACTOR: 0.001 +DATASETS: + TRAIN: ("lvis_v1_train_norare","imagenet_lvis_v1") +DATALOADER: + SAMPLER_TRAIN: "MultiDatasetSampler" + DATASET_RATIO: [1, 4] + USE_DIFF_BS_SIZE: True + DATASET_BS: [16, 64] + DATASET_INPUT_SIZE: [640, 320] + USE_RFS: [True, False] + DATASET_INPUT_SCALE: [[0.1, 2.0], [0.5, 1.5]] + FILTER_EMPTY_ANNOTATIONS: False + MULTI_DATASET_GROUPING: True + DATASET_ANN: ['box', 'image'] + NUM_WORKERS: 8 +WITH_IMAGE_LABELS: True diff --git a/approach/ovod/mm-ovod/configs/lvis-base_in-l_r50_4x_4x_clip_multi_modal_agg.yaml b/approach/ovod/mm-ovod/configs/lvis-base_in-l_r50_4x_4x_clip_multi_modal_agg.yaml new file mode 100644 index 0000000000000000000000000000000000000000..0a2278e5cbcc871fe82239ad6d425bbc0fc7856c --- /dev/null +++ b/approach/ovod/mm-ovod/configs/lvis-base_in-l_r50_4x_4x_clip_multi_modal_agg.yaml @@ -0,0 +1,29 @@ +_BASE_: "base_r50_4x_clip.yaml" +MODEL: + ROI_BOX_HEAD: + USE_ZEROSHOT_CLS: True + IMAGE_LABEL_LOSS: 'max_size' + USE_BIAS: -2.0 + ZEROSHOT_WEIGHT_PATH: 'datasets/metadata/lvis_multi-modal_agg_K-005_author.npy' + WEIGHTS: "output/mm-ovod/lvis-base_r50_4x_clip_multi_modal_agg/model_final.pth" +SOLVER: + MAX_ITER: 90000 + IMS_PER_BATCH: 64 + BASE_LR: 0.0002 + WARMUP_ITERS: 1000 + WARMUP_FACTOR: 0.001 +DATASETS: + TRAIN: ("lvis_v1_train_norare","imagenet_lvis_v1") +DATALOADER: + SAMPLER_TRAIN: "MultiDatasetSampler" + DATASET_RATIO: [1, 4] + USE_DIFF_BS_SIZE: True + DATASET_BS: [16, 64] + DATASET_INPUT_SIZE: [640, 320] + USE_RFS: [True, False] + DATASET_INPUT_SCALE: [[0.1, 2.0], [0.5, 1.5]] + FILTER_EMPTY_ANNOTATIONS: False + MULTI_DATASET_GROUPING: True + DATASET_ANN: ['box', 'image'] + NUM_WORKERS: 8 +WITH_IMAGE_LABELS: True diff --git a/approach/ovod/mm-ovod/configs/lvis-base_in-l_r50_4x_4x_clip_multi_modal_avg.yaml b/approach/ovod/mm-ovod/configs/lvis-base_in-l_r50_4x_4x_clip_multi_modal_avg.yaml new file mode 100644 index 0000000000000000000000000000000000000000..0c4353f9d5a2426b100c5a59084e1fb12d804b07 --- /dev/null +++ b/approach/ovod/mm-ovod/configs/lvis-base_in-l_r50_4x_4x_clip_multi_modal_avg.yaml @@ -0,0 +1,29 @@ +_BASE_: "base_r50_4x_clip.yaml" +MODEL: + ROI_BOX_HEAD: + USE_ZEROSHOT_CLS: True + IMAGE_LABEL_LOSS: 'max_size' + USE_BIAS: -2.0 + ZEROSHOT_WEIGHT_PATH: 'datasets/metadata/lvis_multi-modal_avg_K-005_author.npy' + WEIGHTS: "output/mm-ovod/lvis-base_r50_4x_clip_multi_modal_avg/model_final.pth" +SOLVER: + MAX_ITER: 90000 + IMS_PER_BATCH: 64 + BASE_LR: 0.0002 + WARMUP_ITERS: 1000 + WARMUP_FACTOR: 0.001 +DATASETS: + TRAIN: ("lvis_v1_train_norare","imagenet_lvis_v1") +DATALOADER: + SAMPLER_TRAIN: "MultiDatasetSampler" + DATASET_RATIO: [1, 4] + USE_DIFF_BS_SIZE: True + DATASET_BS: [16, 64] + DATASET_INPUT_SIZE: [640, 320] + USE_RFS: [True, False] + DATASET_INPUT_SCALE: [[0.1, 2.0], [0.5, 1.5]] + FILTER_EMPTY_ANNOTATIONS: False + MULTI_DATASET_GROUPING: True + DATASET_ANN: ['box', 'image'] + NUM_WORKERS: 8 +WITH_IMAGE_LABELS: True diff --git a/approach/ovod/mm-ovod/configs/lvis-base_r50_4x_clip_gpt3_descriptions.yaml b/approach/ovod/mm-ovod/configs/lvis-base_r50_4x_clip_gpt3_descriptions.yaml new file mode 100644 index 0000000000000000000000000000000000000000..f973235aa4d143a0eb18b04ed84459c3b52e8e5b --- /dev/null +++ b/approach/ovod/mm-ovod/configs/lvis-base_r50_4x_clip_gpt3_descriptions.yaml @@ -0,0 +1,8 @@ +_BASE_: "base_r50_4x_clip.yaml" +MODEL: + ROI_BOX_HEAD: + USE_ZEROSHOT_CLS: True + ZEROSHOT_WEIGHT_PATH: "datasets/metadata/lvis_gpt3_text-davinci-002_features_author.npy" + USE_BIAS: -2.0 +DATASETS: + TRAIN: ("lvis_v1_train_norare",) diff --git a/approach/ovod/mm-ovod/configs/lvis-base_r50_4x_clip_image_exemplars_agg.yaml b/approach/ovod/mm-ovod/configs/lvis-base_r50_4x_clip_image_exemplars_agg.yaml new file mode 100644 index 0000000000000000000000000000000000000000..3211e83d150ea5d9c0454bd26f8ece81e93629f8 --- /dev/null +++ b/approach/ovod/mm-ovod/configs/lvis-base_r50_4x_clip_image_exemplars_agg.yaml @@ -0,0 +1,8 @@ +_BASE_: "base_r50_4x_clip.yaml" +MODEL: + ROI_BOX_HEAD: + USE_ZEROSHOT_CLS: True + ZEROSHOT_WEIGHT_PATH: 'datasets/metadata/lvis_image_exemplar_features_agg_K-005_author.npy' + USE_BIAS: -2.0 +DATASETS: + TRAIN: ("lvis_v1_train_norare",) diff --git a/approach/ovod/mm-ovod/configs/lvis-base_r50_4x_clip_image_exemplars_avg.yaml b/approach/ovod/mm-ovod/configs/lvis-base_r50_4x_clip_image_exemplars_avg.yaml new file mode 100644 index 0000000000000000000000000000000000000000..724671f52fc2867e3d5290a611e82330bdf3dc1a --- /dev/null +++ b/approach/ovod/mm-ovod/configs/lvis-base_r50_4x_clip_image_exemplars_avg.yaml @@ -0,0 +1,8 @@ +_BASE_: "base_r50_4x_clip.yaml" +MODEL: + ROI_BOX_HEAD: + USE_ZEROSHOT_CLS: True + ZEROSHOT_WEIGHT_PATH: 'datasets/metadata/lvis_image_exemplar_features_avg_K-005_author.npy' + USE_BIAS: -2.0 +DATASETS: + TRAIN: ("lvis_v1_train_norare",) diff --git a/approach/ovod/mm-ovod/configs/lvis-base_r50_4x_clip_multi_modal_agg.yaml b/approach/ovod/mm-ovod/configs/lvis-base_r50_4x_clip_multi_modal_agg.yaml new file mode 100644 index 0000000000000000000000000000000000000000..610e38150666ded0161ce6a6f2d227e9ffb79c0e --- /dev/null +++ b/approach/ovod/mm-ovod/configs/lvis-base_r50_4x_clip_multi_modal_agg.yaml @@ -0,0 +1,8 @@ +_BASE_: "base_r50_4x_clip.yaml" +MODEL: + ROI_BOX_HEAD: + USE_ZEROSHOT_CLS: True + ZEROSHOT_WEIGHT_PATH: 'datasets/metadata/lvis_multi-modal_agg_K-005_author.npy' + USE_BIAS: -2.0 +DATASETS: + TRAIN: ("lvis_v1_train_norare",) diff --git a/approach/ovod/mm-ovod/configs/lvis-base_r50_4x_clip_multi_modal_avg.yaml b/approach/ovod/mm-ovod/configs/lvis-base_r50_4x_clip_multi_modal_avg.yaml new file mode 100644 index 0000000000000000000000000000000000000000..d24eb6a3d4452d892d6a0086bb88fec01cde6689 --- /dev/null +++ b/approach/ovod/mm-ovod/configs/lvis-base_r50_4x_clip_multi_modal_avg.yaml @@ -0,0 +1,8 @@ +_BASE_: "base_r50_4x_clip.yaml" +MODEL: + ROI_BOX_HEAD: + USE_ZEROSHOT_CLS: True + ZEROSHOT_WEIGHT_PATH: 'datasets/metadata/lvis_multi-modal_avg_K-005_author.npy' + USE_BIAS: -2.0 +DATASETS: + TRAIN: ("lvis_v1_train_norare",) diff --git a/approach/ovod/mm-ovod/datasets/README.md b/approach/ovod/mm-ovod/datasets/README.md new file mode 100644 index 0000000000000000000000000000000000000000..ec60921289042f7ea572efbb0825a6c854c53b17 --- /dev/null +++ b/approach/ovod/mm-ovod/datasets/README.md @@ -0,0 +1,183 @@ +# Prepare datasets for MM-OVOD (borrows and edits from Detic) + +The basic training of our model uses [LVIS](https://www.lvisdataset.org/) (which uses [COCO](https://cocodataset.org/) images) and [ImageNet-21K](https://www.image-net.org/download.php). + +Before starting processing, please download the (selected) datasets from the official websites and place or sim-link them under `${mm-ovod_ROOT}/datasets/` with details shown below. + +``` +${mm-ovod_ROOT}/datasets/ + metadata/ + lvis/ + coco/ + imagenet/ + VisualGenome/ +``` +`metadata/` is our preprocessed meta-data (included in the repo). See the below [section](#Metadata) for details. +Please follow the following instruction to pre-process individual datasets. + +### COCO and LVIS + +First, download COCO images and LVIS data place them in the following way: + +``` +lvis/ + lvis_v1_train.json + lvis_v1_val.json +coco/ + train2017/ + val2017/ +``` + +Next, prepare the open-vocabulary LVIS training set using + +``` +python tools/remove_lvis_rare.py --ann datasets/lvis/lvis_v1_train.json +``` + +This will generate `datasets/lvis/lvis_v1_train_norare.json`. + +### ImageNet-21K + +The imagenet folder should look like the below, after following the data-processing +[script](https://github.com/Alibaba-MIIL/ImageNet21K/blob/main/dataset_preprocessing/processing_script.sh) from ImageNet-21K Pretraining for the Masses ensuring to use the FALL 2011 version. +After this script has run, please rename folders to give the below structure: +``` +imagenet/ + imagenet21k_P/ + train/ + n00005787/ + n00005787_*.JPEG + n00006484/ + n00006484_*.JPEG + ... + val/ + n00005787/ + n00005787_*.JPEG + n00006484/ + n00006484_*.JPEG + ... + imagenet21k_small_classes/ + n00004475/ + n00004475_*.JPEG + n00006024/ + n00006024_*.JPEG + ... +``` + +The subset of ImageNet that overlaps with LVIS (IN-L in the paper) will be created from this directory +structure. + +~~~ +cd ${mm-ovod_ROOT}/datasets/ +mkdir imagenet/annotations +python tools/create_imagenetlvis_json.py --imagenet-path datasets/imagenet/imagenet21k_P --out-path datasets/imagenet/annotations/imagenet_lvis_image_info.json +~~~ +This creates `datasets/imagenet/annotations/imagenet_lvis_image_info.json`. + + +### VisualGenome + +Some of our image exemplars are sourced from VisualGenome and so download the dataset ensuring the following +files are present with the below structure: +``` +VisualGenome/ + VG_100K/ + *.jpg + VG_100K_2/ + *.jpg + objects.json + image_data.json +``` + +### Metadata + +``` +metadata/ + lvis_v1_train_cat_info.json + lvis_gpt3_text-davinci-002_descriptions_author.json + lvis_gpt3_text-davinci-002_features_author.npy + lvis_image_exemplar_dict_K-005_author.json + lvis_image_exemplar_features_agg_K-005_author.npy + lvis_image_exemplar_features_avg_K-005_author.npy + lvis_multi-modal_agg_K-005_author.npy + lvis_multi-modal_avg_K-005_author.npy + lvis_v1_clip_a+cname.npy +``` + +`lvis_v1_train_cat_info.json` is used by the Federated loss. +This is created by +~~~ +python tools/get_lvis_cat_info.py --ann datasets/lvis/lvis_v1_train.json +~~~ + +`lvis_gpt3_text-davinci-002_descriptions_author.json` are the descriptions for each LVIS class +we found using the (now deprecated) text-davinci-002 model from OpenAI. + +Users may create their own descriptions by: +~~~ +python tools/generate_descriptions.py --ann-path datasets/lvis/lvis_v1_val.json --openai-model text-davinci-003 +~~~ +which will create a file called `lvis_gpt3_text-davinci-003_descriptions_own.json`. +Be sure to include your own OpenAI API key at the top of `tools/generate_descriptions.py`. + +`lvis_gpt3_text-davinci-002_features_author.npy` is the CLIP embeddings for each class in the LVIS +dataset using the descriptions we generate using GPT-3. +~~~ +python tools/dump_clip_features_lvis_sentences.py --descriptions-path datasets/metadata/lvis_gpt3_text-davinci-002_descriptions_author.json --ann-path datasets/lvis/lvis_v1_val.json --out-path datasets/metadata/lvis_gpt3_text-davinci-002_features_author.npy +~~~ + +`lvis_image_exemplar_dict_K-005_author.json` is the dictionary of image exemplars for each LVIS class +used in the paper and produce our results. +One can create their own as follows: +~~~ +python tools/sample_exemplars.py --lvis-ann-path datasets/lvis/lvis_v1_val.json --exemplar-dict-path datasets/metadata/exemplar_dict.json -K 5 --out-path datasets/metadata/lvis_image_exemplar_dict_K-005_own.json +~~~ + +`lvis_image_exemplar_features_agg_K-005_author.npy` is the CLIP embeddings for each class in the LVIS dataset +when using image examplars AND our trained visual aggregator for combining multiple exemplars. +One can create their own using our trained visual aggregator as follows (see [INSTALL.md](../../docs/INSTALL.md) for downloading +visual aggregator weights): +~~~ +python tools/generate_vision_classifier_agg.py --exemplar-list datasets/metadata/lvis_image_exemplar_dict_K-005_own.json --out-path datasets/metadata/lvis_image_exemplar_features_agg_K-005_own.npy --num-augs 5 --tta --load-path checkpoints/visual_aggregator/visual_aggregator_ckpt_4_transformer.pth +~~~ + +`lvis_image_exemplar_features_avg_K-005_author.npy` is the CLIP embeddings for each class in the LVIS dataset +when using image examplars AND averaging the CLIP embeddings of multiple exemplars (not using our trained +aggregator). +One can create their own for example: +~~~ +python tools/get_exemplars_tta.py --ann-path datasets/metadata/lvis_image_exemplar_dict_K-005_own.json --output-path datasets/metadata/lvis_image_exemplar_features_avg_K-005_own.npy --num-augs 5 +~~~ + +`lvis_multi-modal_agg_K-005_author.npy` is the CLIP embeddings for each class in the LVIS dataset +when using image examplars AND descriptions AND our trained visual aggregator for combining multiple exemplars. +One can create their own for example: +~~~ +python tools/norm_feat_sum_norm.py --feat1-path datasets/metadata/lvis_gpt3_text-davinci-002_features_own.npy --feat2-path datasets/metadata/lvis_image_exemplar_features_agg_K-005_own.npy --out-path datasets/metadata/lvis_multi-modal_agg_K-005_own.npy +~~~ + +`lvis_multi-modal_avg_K-005_author.npy` is the CLIP embeddings for each class in the LVIS dataset +when using image examplars AND descriptions AND averaging the CLIP embeddings of multiple exemplars (not using our trained aggregator). +One can create their own for example: +~~~ +python tools/norm_feat_sum_norm.py --feat1-path datasets/metadata/lvis_gpt3_text-davinci-002_features_own.npy --feat2-path datasets/metadata/lvis_image_exemplar_features_avg_K-005_own.npy --out-path datasets/metadata/lvis_multi-modal_avg_K-005_own.npy +~~~ + +`lvis_clip_a+cname.npy` is the pre-computed CLIP embeddings for each class in the LVIS dataset (from Detic) +They are created by: +~~~ +python tools/dump_clip_features.py --ann datasets/lvis/lvis_v1_val.json --out_path metadata/lvis_v1_clip_a+cname.npy +~~~ + +### Collating Image Exemplars + +We provide the exact image exemplars used (5 per LVIS category) in our results in the metadata folder defined +above. +However, if you wish to create your own, one first needs to create a full dictionary of exemplars for each +LVIS category. +This is done by: +~~~ +python tools/collate_exemplar_dict.py --lvis-dir datasets/lvis --imagenet-dir datasets/imagenet --visual-genome-dir datasets/VisualGenome --output-path datasets/metadata/exemplar_dict.json +~~~ +This will create `datasets/metadata/exemplar_dict.json` which is a dictionary of exemplars with +at least 10 exemplars per LVIS category. diff --git a/approach/ovod/mm-ovod/datasets/metadata/lvis_gpt3_text-davinci-002_descriptions_author.json b/approach/ovod/mm-ovod/datasets/metadata/lvis_gpt3_text-davinci-002_descriptions_author.json new file mode 100644 index 0000000000000000000000000000000000000000..fc703bea74d2bdc61fa4d401a91efb604c2e499b --- /dev/null +++ b/approach/ovod/mm-ovod/datasets/metadata/lvis_gpt3_text-davinci-002_descriptions_author.json @@ -0,0 +1,14438 @@ +{ + "aerosol can": [ + "A can of aerosol can be any size or shape, but most are cylindrical with a screw-on top.", + "An aerosol can look like a small silver can with a black nozzle on top.", + "An aerosol can have a metal body with a plastic screw-on cap, or it can be made entirely of plastic.", + "An aerosol can look like a cylinder with a pointed top.", + "A typical aerosol can looks like a small cylindrical container with a pointed end.", + "An aerosol can look like a small, metal container with a spray nozzle on top.", + "Can vary greatly in size, shape, and color.", + "Consol cans vary in size and shape, but are typically slender with a cylindrical shape.", + "An aerosol can looks like a typical can, however, it will have a nozzle on the top instead of a traditional can opener.", + "An aerosol can looks like metal or plastic container that holds a Substance under pressure that is released as a fine spray or mist by depressing a valve." + ], + "air conditioner": [ + "An air conditioner is generally a large metal box that sits outside of a building.", + "An air conditioner is a large box that is usually placed on the ground or on the top of a building.", + "\nAn air conditioner typically has a grille on the front that covers the fan.", + "An air conditioner is a large, heavy machine that sits outside a window or on a wall.", + "An air conditioner typically has a large, rectangular body.", + "An air conditioner has a compressor, which is a large metal box, and a fan.", + "A residential air conditioner typically consists of two metal boxes connected by a large bundle of insulated copper tubing and wires.", + "An air conditioner is a machine that is used to cool air.", + "An air conditioner typically looks like a large metal box with a fan in the front.", + "An air conditioner typically consists of a large, box-like unit that is installed in a window or on the wall of a room." + ], + "airplane": [ + "An airplane has a large body with wings that extend from the sides.", + "An airplane is a fixed-wing aircraft with a long body, wings, and tail.", + "An airplane looks like a large metal bird that has two wings and two engines.", + "An airplane is a large, metal, winged machine that is propelled through the air by engines.", + "An airplane is a large, metal vehicle with wings.", + "An airplane is a large metal machine with wings that helps it fly.", + "An airplane typically has two wings and a tail.", + "An airplane is typically long and thin with wings on either side.", + "An airplane is a large, metal vehicle with wings.", + "An airplane is typically a metal, cylindrical tube with wing-shaped flaps on either side." + ], + "alarm clock": [ + "An alarm clock is a small, usually square, device that has a face with numbers on it, two hands, and a way to set an alarm.", + "An alarm clock typically has a face with hour and minute hands.", + "An alarm clock typically has a face with a digital or analog display.", + "An alarm clock is a clock that is used to wake someone up at a specific time.", + "An alarm clock typically has a face with a digital or analog clock display, and buttons to set the time, alarms, and other functions.", + "An alarm clock usually has a digital or analog clock face with aLCD or LED display.", + "An alarm clock usually looks like a small box with a digital or analog clock face.", + "Some alarm clocks are digital while others are analog.", + "An alarm clock typically has a face with hour and minute markers.", + "An alarm clock typically has a face with hour and minute hands and a alarm that can be set to go off at a specific time." + ], + "alcohol": [ + "An alcohol typically looks like a clear liquid.", + "A distilled alcoholic beverage has a clear, evaporated liquid appearance.", + "An alcohol is a clear, colorless liquid.", + "An alcohol generally has a clear, colorless appearance.", + "An alcohol is a clear liquid.", + " in a glass.", + "An alcohol is a clear, colorless liquid.", + "An alcohol is a clear, colorless liquid.", + "An alcohol is colorless and has a characteristic aromatic odor.", + "An alcohol looks like a clear, colorless liquid." + ], + "alligator": [ + "An alligator is a large reptile with a long snout, sharp teeth, and a scaly body.", + "The alligator is a large reptile that lives in the water.", + "An alligator is a large reptile with a long, powerful tail and sharp teeth.", + "An alligator is a reptile with green, scaly skin.", + "An alligator is a large reptile with greenish-brown skin, a long body, and a long tail.", + "Most alligators have dark olive-brown or black skin with white spots on their bellies.", + "An alligator is a large reptile with a long, stout body, a long tail, and short legs.", + "Alligators are large reptiles with long, muscular tails and sharp claws.", + "An alligator is a large reptile with a long body, a short tail, and a wide, flat head.", + "Swamp-dwelling reptiles with long snouts, sharp teeth, and strong tails." + ], + "almond": [ + "An almond is a small, oval-shaped nut that is covered in a thin brown skin.", + "An almond is a small, oval-shaped nut with a tan or light brown color.", + "An almond looks like a small, pointy, brown nut.", + "An almond is a small, oval-shaped nut with a brown leathery outer shell and a white, mealy inner flesh.", + "An almond is an oval-shaped nut that is light brown in color with a hard outer shell.", + "An almond is a small, triangular nut with a smooth, brown exterior and a white interior.", + "An almond is a small, oval nut with a brown, papery skin and a white flesh.", + "An almond is a small, dry, stone fruit that looks like a miniature peach.", + "An almond is a small, oily tree nut that grows on trees in warm climates.", + "Almonds are small, kidney-shaped nuts with a smooth, brownish-greenish skin." + ], + "ambulance": [ + "An ambulance is a large, boxy vehicle with a spacious interior and a light on top.", + "An ambulance is a large, often brightly-colored vehicle that is used to transport sick or injured people to a hospital.", + "An ambulance is a vehicle designed to transport sick or injured people to a hospital.", + "An ambulance usually has a red or white light that flashes on the top of the car.", + "Most ambulances are brightly colored with either red, white, or yellow paint schemes.", + "An ambulance is a large van with a light on top that flashes.", + "An ambulance is a large van with a red cross on the side.", + "An ambulance is a vehicle that is used to transport sick or injured people to and from a hospital.", + "An ambulance is a large, clearly marked vehicle that is used to transport sick or injured people to a hospital or other medical facility.", + "An ambulance is a large van with a red cross on the side." + ], + "amplifier": [ + "an amplifier is a large box with two speakers on each side.", + "An amplifier is a device that takes an input signal and gives an output signal that is bigger.", + "An amplifier is a small, rectangular box with two sets of inputs and outputs.", + "An amplifier is a device that increases the strength of a signal.", + "An amplifier is a machine that takes in a signal at a certain voltage level and strength and outputs the same signal but at a higher voltage level and strength.", + "An amplifier is a machine that takes an electrical signal and makes it stronger.", + "Amplifiers come in many shapes and sizes, but they all have basic features in common.", + "An amplifier is a device that increases the strength of a signal.", + "An amplifier is a electronic device that increases the strength of a signal.", + "An amplifier looks like a box with two cords coming out of it, one for the input signal and one for the output signal." + ], + "anklet": [ + "An anklet looks like a bracelet, but it is worn around the ankle.", + "An anklet is a jewelery piece that is worn around the ankle.", + "An anklet looks like a bracelet that goes around the ankle.", + "An anklet looks like a necklace that goes around the ankle instead of the neck.", + "An anklet is a piece of jewelry that is worn around the ankle.", + "An anklet is a jewelry item that is worn around the ankle.", + "An anklet is a type of jewelry that is worn around the ankle.", + "An anklet is a type of jewelry worn around the ankle.", + "An anklet looks like a bracelet, but it is worn around the ankle.", + "An anklet is a piece of jewelry that is worn around the ankle." + ], + "antenna": [ + "An antenna is a long, thin piece of metal that is used to transmit or receive radio waves.", + "An antenna typically consists of a straight or curved rod or wire.", + "There is no one answer to this question as antennas come in a variety of shapes and sizes.", + "An antenna is a wire or rod that transmits and receives radio waves.", + "An antenna is a metal rod or wire that sticks up out of the roof of a building or the back of a car.", + "An antenna is a long, thin metal rod that sticks up into the air.", + "An antenna is a rod or wire that is used to transmit or receive electromagnetic waves.", + "An antenna is a metal rod or dish that is used to send and receive radio waves.", + "An antenna is a thin wire or rod that is used to transmit or receive radio waves.", + "An antenna is a metallic rod or wire that protrudes from the body of a radio or television receiver and is used to transmit or receive radio waves." + ], + "apple": [ + "They are typically red and green, with a smooth skin.", + "When you think of an apple, you might think of a shiny, red fruit with a green stem.", + "A round, red or green fruit with a smooth skin and a stem coming out of the top.", + "An apple is a round, red or green fruit with a smooth, yellow-white inside.", + "A typical apple is red and green, with a smooth skin.", + "Apples are small, round, or oblong fruits with smooth, hard skins that range in color from green to yellow to red.", + "An apple is typically red, green, or yellow, with a smooth, glossy exterior.", + "Apples are round, red, and have a stem.", + "An apple typically has a red, green, or yellow skin and is about the size of a person's fist.", + "An apple is a round fruit with a smooth, red, or green skin." + ], + "applesauce": [ + "Apple sauce is a smooth, pur\u00e9ed sauce made from cooked apples.", + "Some applesauce is chunky while other applesauce is smooth.", + "An applesauce typically looks like a smooth, thick sauce that is made from apples.", + "An applesauce can be different colors depending on the type of apples used, but usually it is a light brown color.", + "An applesauce is typically a smooth, thick sauce made from apples.", + "Most applesauce is a smooth puree with a pinkish-orange color.", + "This is a difficult question.", + "Applesauce is a smooth, thick sauce made from apples.", + "An applesauce is a smooth, thick sauce made from apples.", + "An applesauce is a smooth, thick sauce made from apples." + ], + "apricot": [ + "An apricot is a fruit that is small and soft with a fuzzy skin.", + "An apricot is a small fruit that is yellow or orange in color.", + "An apricot is a smooth, oval-shaped fruit with a thin skin that ranges in color from yellow to orange to red.", + "An apricot is a small, oval-shaped fruit with golden-orange skin and a soft, fleshy interior.", + "An apricot is a small, round fruit that is yellow or orange in color.", + "An apricot is a small, almond-shaped fruit with a thin pit inside.", + "An apricot is a type of fruit that is small and oval-shaped.", + "Apricots are small fruits with a smooth, velvety skin that is orange with a red blush.", + "An apricot is a small fruit with a smooth, velvety skin that can range in color from yellow to orange to red.", + "An apricot is a small fruit with a smooth, slightly furry skin." + ], + "apron": [ + "An apron looks like a piece of clothing that you wear over your clothes to protect them from getting dirty.", + "An apron is a garment that covers the front of your body and is tied around your waist.", + "An apron is a protective clothing worn by many people in different professions.", + "An apron is a durable fabric rectangle that is worn over clothing to protect it from spills and stains.", + "An apron is a garment worn over other clothing for protection from stains and possible spillage.", + ".", + "An apron is a piece of clothing that covers the front of your body and ties around your waist.", + "An apron is a piece of clothing that is worn over other clothes to keep them clean.", + "An apron typically has a bib that covers the chest and a triangular section that goes around the waist and ties in the back.", + "An apron is a protective garment worn around the body to protect clothing from spills, stains, or other dirt." + ], + "aquarium": [ + "There are many different types and sizes of aquariums, but most have a glass or acrylic enclosure with a filtration system and a light.", + "An aquarium is usually a large glass tank filled with water and decorated with rocks, plants, and other objects.", + "An aquarium is a glass or plastic box that holds water and fish.", + "Aquariums are typically glass tanks filled with water and decorated with rocks, plants, and colorful fish.", + "An aquarium is usually a glass or plastic tank that contains water and fish.", + "An aquarium looks like a fish tank.", + "An aquarium is a glass or plastic container that holds water and is used to house fish and other aquatic animals.", + "An aquarium looks like a fish tank and has fish in it.", + "An aquarium is usually a glass rectangle filled with water and decor.", + "An aquarium is a glass or plastic box that contains water and fish." + ], + "arctic (type of shoe)": [ + "An arctic shoe looks like a waterproof boot with a thick sole.", + "An arctic is a type of boot that is typically made of waterproof materials and is insulated to keep the foot warm in cold weather.", + "An arctic shoe is a type of boot that is usually made of felt or leather and has a soft, furry lining to keep the feet warm.", + "Arctic shoes are usually made of thick, waterproof fabric and have a fur-lined collar.", + "An arctic shoe looks like a regular shoe, but it has a furry lining on the inside to keep your feet warm.", + "Some arctic shoes have a waterproof bootie construction with a tall shaft that covers the ankle and lower leg.", + "An arctic shoe typically has a waterproof and insulated boot shaft that extends to the knee.", + "An arctic shoe is a type of boot that is typically made of waterproof materials and is intended for use in cold weather.", + "An arctic is usually a water-resistant shoe, made to protect the feet from cold weather.", + "An arctic is a waterproof, insulated boot that typically comes up to the knee or mid-thigh." + ], + "armband": [ + "An armband is a piece of clothing that is worn around the arm.", + "An armband is a strip of material worn around the arm, often used to identify the wearer's membership in a group.", + "An armband is a band of material, typically fabric, leather, or metal, that is worn around the arm over clothing.", + "An armband is a band of cloth, leather, or other material that is worn around the arm.", + "An armband is a piece of clothing that is worn around the arm.", + "An armband is a piece of fabric that is worn around the arm.", + "An armband is a band of cloth, leather, or metal that is worn around the arm.", + "An armband is a band of fabric that is worn around the arm.", + "an armband is usually a piece of cloth or other material that is worn around the upper part of the arm, close to the shoulder.", + "An armband is a band of fabric that is worn around the arm, usually above the elbow." + ], + "armchair": [ + "An armchair is a seat with armrests on either side.", + "An armchair is a type of chair with a raised area on one side, designed to support the arm.", + "An armchair is a type of chair that has armrests attached to the sides of the seat.", + "An armchair is a type of chair that has armrests attached to the seat.", + "An armchair is a type of chair that has arms on either side of the seat.", + "An armchair is a type of chair that has armrests attached to the sides of the chair's seat.", + "An armchair is a type of chair that has armrests on either side.", + "An armchair typically has a backrest, armrests, and a seat, with legs connecting it to the floor.", + "An armchair is a chair with armrests.", + "An armchair typically has four legs, a backrest, and armrests." + ], + "armoire": [ + "An armoire is a tall cabinet that is used to store clothes.", + "An armoire is a tall, free-standing cabinet that is used for storing clothes.", + "An armoire is a tall, free-standing cabinet that is used for storing clothes and other items.", + "An armoire looks like a large wooden cabinet with doors that open to reveal shelves or a hanging rod.", + "An armoire typically looks like a tall, freestanding cabinet with doors that open to reveal shelves, drawers, or hanging space.", + "An armoire is a tall, free-standing cabinet that is used for storing clothes and other items.", + "An armoire is a type of wardrobe that is typically tall and narrow, often with ornate details.", + "An armoire looks like a tall, narrow cabinet with doors.", + "An armoire looks like a cabinet that is tall and has doors that open to reveal shelves or storage space inside.", + "An armoire is a large wardrobe, typically larger than a dresser, that is used for storing clothes and other household items." + ], + "armor": [ + "An armor is a type of protective clothing that covers the body and is often made of metal or other durable material.", + "An armor is a piece of protective equipment that is worn by soldiers, knights, and other people to defend themselves from attacks.", + "An armor looks like a piece of protective clothing that is worn by soldiers, knights, and other people in battle.", + "An armor looks like a protective covering that is worn on the body.", + "An armor looks like a piece of metal that covers the body.", + "An armor typically consists of a breastplate and a backplate, with shoulder guards and other pieces that cover the extremities.", + "An armor is a suit of protective clothing, typically made of metal or other rigid material and often covered with plates, that is worn by soldiers, police officers, and other people whose jobs require them to be protected from weapons and other dangerous objects.", + "An armor is typically a piece of metal or leather that is worn over the torso to protect the body from weapons.", + "An armor is a material worn by soldiers to protect their bodies from weapons.", + "An armor is typically a piece of metal or other material that is worn over the body to protect it from damage." + ], + "artichoke": [ + "An artichoke is a green, spiny vegetable that grows on a stalk.", + "An artichoke is a spiky, green vegetable that has a large, bulbous base.", + "An artichoke is a spiky, green vegetable that's related to the thistle.", + "An artichoke is a green, spiky vegetable that looks a bit like a small, green flower.", + "Artichokes have a spiky, green exterior and a soft, white interior.", + "An artichoke typically has a dark green color, and is shaped like a flower.", + "An artichoke is a green vegetable that has a spiky exterior and a soft interior.", + "An artichoke is a spiky, green flower that is related to the thistle.", + "An artichoke is a thistle-like vegetable that has a green, spiky appearance.", + "An artichoke typically has a dark green, spiky exterior." + ], + "trash can": [ + "A trash can is a receptacle for garbage, typically cylindrical, with a lid, and often made of metal or plastic.", + "A trash can is a cylindrical container with a lid that is used to disposal of garbage.", + "A trash can typically looks like a small, cylindrical container with a lid.", + "What a trash can looks like varies depending on the type of trash can.", + "A trash can is a receptacle for garbage, typically made out of metal or plastic.", + "Most trash cans are round, have a lid, and are made of plastic.", + "A trash can usually looks like a large metal or plastic container with a lid.", + "A trash can usually looks like a large metal or plastic container with a lid on top.", + "A trash can is a container for garbage.", + "Most trash cans are cylindrical and made of metal or plastic." + ], + "ashtray": [ + "An ashtray is usually a small, round dish with a raised lip.", + "An ashtray is a small, usually round dish with a raised edge that is used to hold the ashes and butt ends of cigarettes.", + "An ashtray is typically a small, round receptacle with a few depressions in the top.", + "An ashtray is a small, usually round dish with a short lip that is used to hold the ashes and butts of cigarettes.", + "An ashtray is a small bowl or tray, often made of metal, glass, or ceramic, in which smokers can extinguish their cigarettes.", + "An ashtray is a small, typically round tray with a rim that is used to hold the ashes and butts of cigarettes.", + "Most ashtrays are round with a depressed center to hold cigarettes.", + "An ashtray is a small, usually ceramic or glass dish used to hold the ashes and butts of cigarettes.", + "An ashtray is typically a small, portable, bowl-shaped container made of heat-resistant materials like ceramic, metal, or glass.", + "An ashtray is a receptacle for the ashes and butts of cigarettes and cigars." + ], + "asparagus": [ + "An asparagus is a shoot of a plant that is edible.", + "Asparagus is a vegetable that has long, thin stalks with small buds on the end.", + "A typical asparagus spear is green and has a bulbous end.", + "Asparagus is a green vegetable that has a long, thin stalk.", + "A typical asparagus spear is green and tender, with a purple or white tip.", + "An asparagus is a green vegetable that has a small head and long stem.", + "An asparagus is a thin, green vegetable that has a pointy end.", + "Asparagus is a green, leafy vegetable that comes in thin stalks.", + "Asparagus is a tall, thin vegetable with small, pointy leaves.", + "An asparagus is a thin, green vegetable that grows in the ground." + ], + "atomizer": [ + "An atomizer typically consists of a small tank that holds the e-liquid, a heating element (coil) and a wicking material that draws the liquid to the coil.", + "An atomizer is a small, handheld device that emits a fine spray of perfume or other liquid.", + "An atomizer is a small device that is used to spray a liquid in the form of a fine mist.", + "An atomizer is a device that creates a fine spray or mist of liquid.", + "The atomizer is the component of an electronic cigarette that vaporizes the liquid.", + "Some atomizers resemble traditional pens, while others look like small cylindrical tubes.", + "An atomizer is a small device that delivers a fine spray of perfume or other liquid.", + "An atomizer consists of a small reservoir that holds the liquid to be vaporized, a heating element and a mouthpiece.", + "An atomizer is a small, handheld device that produces a fine mist of perfume, cologne, or other fragrance.", + "An atomizer is a small, handheld device that releasing a fine mist of fragrance into the air." + ], + "avocado": [ + "An avocado looks like a pear-shaped fruit with green or blackish skin.", + "It is a green fruit that has a dark brown or black seed in the center.", + "An avocado is a pear-shaped green fruit with smooth, green skin and a large seed in the center.", + "An avocado is a fruit that is brown and bumpy on the outside and green and creamy on the inside.", + "An avocado is a fruit with a dark green or blackish skin and a soft, fleshy inside.", + "An avocado is a green, pear-shaped fruit with a smooth, fleshy texture.", + "An avocado is a pear-shaped fruit with smooth, green skin.", + "An avocado is shaped like an egg and has a greenish-brownish skin.", + "An avocado is typically a dark green or black color on the outside with a soft, light green or yellow color on the inside.", + "An avocado is a pear-shaped fruit with smooth, green skin and a large, pit in the center." + ], + "award": [ + "An award may take the form of a certificate, trophy, medal, or badge.", + "An award typically looks like a trophy or a medal.", + "An award is an object that is given to someone to recognize their achievement in a particular field.", + "An award is a physical object that is given to someone as a symbol of recognition for an achievement.", + "An award is a medal, certificate, trophy, or plaque that is given to someone as a sign of recognition for an achievement.", + "An award can take many different forms, but often includes a physical object to represent the achievement, like a trophy, plaque, or medal.", + "Most awards are certificates or trophies that are given to the recipient in a ceremony.", + "An award is typically a certificate of recognition or a physical object that has been given to someone to represent an achievement.", + "An award typically looks like a trophy or plaque that is given to someone to honor their achievement.", + "An award looks like a trophy." + ], + "awning": [ + "An awning is a canvas or other fabric cover that is attached to the side of a building.", + "An awning is a canopy that is attached to the side of a building.", + "An awning is a canvas or plastic structure that is attached to the side of a building.", + "An awning is a canvas or polyester cover that is attached to the side of a house or building.", + "An awning is a piece of fabric that is attached to the side of a building.", + "An awning is a piece of canvas or other material that is attached to the side of a building and extends out over a walkway or driveway.", + "An awning is typically a canvas or fabric cover attached to the side of a building.", + "An awning is a canopy that is placed over a window or door.", + "An awning is a piece of fabric or metal attached to the side of a building.", + "An awning is a piece of fabric or material that is attached to the side of a building." + ], + "ax": [ + "An ax is a tool that typically has a metal head with a sharp, pointed edge on one side and a blunt edge on the other.", + "An ax has a long, sharp blade on one side and a long handle on the other.", + "An ax has a long handle with a metal blade at the end.", + "An ax has a long, metal blade with a pointed end.", + "An ax is a tool that is used for chopping wood.", + "An ax is a tool used for chopping.", + "An ax looks like a big, heavy knife.", + "An ax has a long handle with a pointed, metal blade at the end.", + "An ax has a long, wooden handle with a metal head.", + "An ax typically has a metal head with a sharp, curved blade on one side and a blunt, metal poll on the other side." + ], + "baboon": [ + "A baboon is a primates that typically has a long snout, light brown fur, and a long tail.", + "A baboon is a medium-sized monkey with a long snout and dog-like face.", + "A baboon is a medium sized monkey.", + "A baboon is a type of monkey that lives in Africa.", + "A baboon is a medium-sized monkey with a long snout and large canine teeth.", + "A baboon is a large, hairy, and aggressive monkey with a long snout.", + "Baboons are large, tailless primates with long, thick fur that is usually olive, gray, or tan in color.", + "A baboon is a large, Old World monkey with a long snout, dog-like face, and protruding bottom jaw.", + "A baboon is a large monkey with a long snout.", + "A baboon is a medium-sized to large monkey with a long snout and dog-like face." + ], + "baby buggy": [ + "A baby buggy is a small vehicle with a handle that is used to push a baby around.", + "A baby buggy is a small vehicle with four wheels, a handle, and a seat for a baby to sit in.", + "A baby buggy is a small carriage or stroller in which a baby or small child can be pushed along.", + "A baby buggy is a small vehicle with four wheels that is pushed by a person.", + "A baby buggy is a carriage with four large wheels designed to carry a baby or small child.", + "Babies buggies are small carriages on wheels designed to transport an infant or small child.", + "A baby buggy has a seat that reclines and a hood that covers the top of the seat.", + "A baby buggy is a small vehicle with a handle on the back, designed to carry a baby or small child.", + "A baby buggy is a small vehicle with a handle that is used to push a baby around in.", + "A baby buggy is a small carriage or cart, usually with four wheels, in which a baby or child can be pushed along." + ], + "basketball backboard": [ + "A basketball backboard is a board made of wood or glass that is attached to the back of a basketball hoop.", + "A basketball backboard is a raised vertical board with a basket attached.", + "A basketball backboard typically has a flat, rectangular surface made of Plexiglas, wood, or glass.", + "A basketball backboard is a piece of equipment that is attached to the back of a basketball hoop.", + "A basketball backboard is a large, rectangular piece of wood or glass that is attached to the back of a basketball hoop.", + "A basketball backboard is a board made of wood or glass that is attached to the back of a basketball hoop.", + "A basketball backboard is generally a rectangular shape made of either glass, metal, or hard plastic.", + "A backboard is a rectangle made of acrylic, wood, or metal.", + "Most basketball backboards are made of tempered glass.", + "A basketball backboard typically consists of a piece of plywood or metal with a smooth surface, mounted on a vertical frame." + ], + "backpack": [ + "Most backpacks are made from a rip-stop nylon material and have one large compartment with a smaller pouch on the front.", + "A backpack is a type of bag that is worn on the back and typically has a lot of compartments.", + "A backpack is a bag with two straps that goes over the shoulders.", + "A backpack is a bag that is typically worn over the shoulders with straps that go over the chest and around the waist.", + "A backpack is a bag with two straps that goes over the shoulders.", + "A backpack is a type of bag that is worn over the shoulders and has straps that go over the chest and around the waist.", + "A backpack typically has two straps that go over the shoulders and a rectangular shape.", + "A backpack is a type of bag that is carried on the back, typically by students, and has two straps that go over the shoulders.", + "A backpack is a cloth sack carried on one's back and secured with two straps that go over the shoulders.", + "A backpack is a small, portable bag with straps that can be worn over the shoulders." + ], + "handbag": [ + "A handbag is a bag with a handle that is typically used bywomen.", + "A handbag is a small bag that is carried by a person, typically with a handle.", + "A handbag is a small, typically handheld bag, often used by women.", + "A handbag typically has a rectangular or oval shape and a strap or handles.", + "A handbag is a container made of various materials, such as cloth, leather, or canvas, for holding objects such as keys, wallets, or makeup.", + "A handbag typically has a strap or handles, and a pouch or opening.", + "A handbag is a small bag that is typically used by women to carry personal items such as a wallet, keys, and makeup.", + "A handbag is a small, rectangular bag with a handle.", + "A handbag is a small to medium sized purse or bag, typically worn by women, for carrying personal belongings.", + "A handbag is a small bag that is typically worn by women." + ], + "suitcase": [ + "A suitcase is an often rectangular-shaped bag made of firm material such as cloth, paperboard, or plastic that is used for packing clothes or other items for traveling.", + "A suitcase looks like a box with a handle on one side and wheels on the other.", + "A suitcase is a box with a handle on it.", + "A suitcase is typically a box-shaped bag with a rounded top and two handles on the side.", + "A suitcase typically has a rectangular shape, is made of hard material such as plastic or metal, and has a handle on one side.", + "A suitcase is a box-shaped bag with a handle on the top and an opening on the side or front.", + "A suitcase generally has a rectangular shape, is made of a sturdy material such as hard plastic or metal, and has a handle on the top and wheels on the bottom.", + ".", + "A suitcase is a rectangular piece of luggage with a handle on the top and often wheels on the bottom.", + "A suitcase is a bag with a handle and a zipper that is used to carry clothes and other items when traveling." + ], + "bagel": [ + "A bagel is a round, flattened, ring-shaped roll of dough that is boiled and then baked.", + "A bagel is a type of bread product that is shaped like a ring.", + "A bagel is a round, boiled and then baked, yeasted bread.", + "A bagel is a round, flattened loaf of bread with a hole in the center.", + "round and flat with a hole in the middle.", + "A bagel is a round, doughnut-shaped bread roll that is boiled before it is baked.", + "A bagel is a round, often dense bread that is boiled before it is baked.", + "A bagel is a type of bread that is made by boiling dough and then baking it.", + "A bagel is a round, flattened loaf of bread with a hole in the center.", + "A bagel is a specially shaped bread roll." + ], + "bagpipe": [ + "A bagpipe is a wind instrument with a bag that is filled with air.", + "A bagpipe typically consists of a blowstick, a chanter, and one or more drones.", + "A bagpipe is a wind instrument with a bag that collects air, a reed pipe for each note, and a blowpipe.", + "A bagpipe is a musical instrument that is played by blowing into a bag of air.", + "Bagpipes vary in appearance, but most have a bag made from a animal skin, a blowpipe, a chanter, and one or more drones.", + "A bagpipe is a musical instrument that has a bag, a blowpipe, and usually drone pipes.", + "A bagpipe is a musical instrument that has a bag, a blowpipe, and usually two drones.", + "A bagpipe is a musical instrument that is usually made out of wood.", + "A typical Highland bagpipe has a chanter with a double reed, a blowstick, three drones with single reeds, and a bag.", + "A bagpipe consists of a blowing bag, a chanter, a drone, and usually one or more drones." + ], + "baguet": [ + "A baguet is a thin, long, French bread that is usually about a foot long.", + "A baguette is a long, narrow, French loaf of bread that is crispy on the outside and soft on the inside.", + "A French baguette is a long, thin loaf of bread that is crispy on the outside and soft on the inside.", + "A baguet is a long, thin loaf of bread.", + "A baguet is a long, thin loaf of bread that is typically about a foot long.", + "A baguet is a type of bread that is long and thin with a crispy crust.", + "A traditional baguette is a relatively long, thin loaf of French bread that is commonly made from basic lean dough.", + "A baguet is a long, thin loaf of French bread.", + "A baguet is a type of French bread that is long and thin.", + "A baguet is a type of French bread that is long and thin." + ], + "bait": [ + "A bait looks like an object that is used to lure an animal or fish.", + ".", + "A bait is a trap that is used to catch animals.", + "A bait is a fishing lure that is used to attract fish.", + "A bait can be any type of food that is used to lure fish, animals, or humans.", + "A bait typically looks like the food that the animal being targeted for trapping would normally eat.", + "A bait is a small, tempting piece of food that is used to lure fish, animals, or humans into a trap.", + "A bait is a lure used to attract fish or other animals.", + "A bait is a piece of food or other substance used to lure fish, animals, or humans into a trap.", + "A bait is a substance that is used to attract prey." + ], + "ball": [ + "A ball is a three-dimensional sphere.", + "A ball is usually round and has a smooth surface.", + "A ball typically has a spherical shape and is used for recreation or sport.", + "A typical ball is a spherical object with a smooth surface.", + "A ball is a round object that is used for playing games.", + "A ball is typically a round, spherical object that is used for playing games, striking other objects, or as a toy.", + "A ball is a round object that is used for playing games or other activities.", + "A ball is a three-dimensional object that is typically round.", + "A ball typically looks like a sphere, or a round object.", + "A ball is a three-dimensional object that is round in shape." + ], + "ballet skirt": [ + "A ballet skirt is a }.", + "A ballet skirt usually looks like a tutu, with a lot of layers of tulle.", + "A ballet skirt is a skirt that is worn by a ballet dancer.", + "A ballet skirt is a short skirt worn by a ballerina.", + "A ballet skirt is a short skirt that is worn by ballerinas.", + "A ballet skirt is a short, pleated skirt worn by ballerinas.", + "A ballet skirt is a light, airy skirt that is usually worn over a leotard or tights.", + "A ballet skirt is a classic dance garment worn by female ballet dancers.", + "A ballet skirt is a short, pleated skirt that is worn by female ballet dancers.", + "A ballet skirt is a short, flared skirt worn by ballerinas." + ], + "balloon": [ + "A balloon is a round object that is typically filled with air or gas.", + "A balloon is a round object that is filled with air.", + "A balloon is a thin, rubbery, and inflatable bag that is filled with air or gas.", + "A balloon is a ball of air-filled latex.", + "A balloon is round, filled with air, and has a string attached to it.", + "A balloon is a round, inflatable object made of thin rubber or plastic.", + "A balloon is a round, thin piece of rubber or plastic that is inflated with air or gas.", + "A balloon is typically a round, thin, light-weight object that is inflated with air or gas.", + "A balloon is usually a small, round, latex rubber bag that is filled with either air or helium.", + "A balloon is a round, filled object that is often used for decoration." + ], + "bamboo": [ + "A bamboo is a thin, woody stalk that grows to a very tall height.", + "A bamboo is a fast-growing evergreen that can reach up to 100 feet in height.", + "A bamboo is a type of grass that can grow up to 30 feet tall.", + "A bamboo typically has a long, slender stem with nodes (joints) that mark the points where leaves attach.", + "A bamboo is a tall, woody grass with a hollow stem.", + "Bamboo is a fast-growing plant that can grow up to four feet in one day.", + "A bamboo is a tall grass that has a woody stem.", + "A bamboo is a tall, thin tree that grows in warm climates.", + "A bamboo is a tall, thin, woody plant that grows in warm climates.", + "Bamboo typically has a thin, green stalk with nodes running along its length." + ], + "banana": [ + "A banana is a long, curved fruit with tough, fibrous skin.", + "A banana is an elongated, fleshy fruit with a thin skin.", + "A banana is about six to eight inches long and has a yellow peel.", + "A banana typically has a yellow or brown peel and a white or cream-colored flesh.", + "A banana is a long, yellow fruit with a smooth, soft skin.", + "A banana typically has a yellow or brown skin with a soft, creamy flesh inside.", + "A banana is a yellow fruit that is about the size of a person's hand.", + "A banana is a yellow, curved fruit with a brownish-black spots.", + "Bananas are typically yellow and have a curved shape.", + "A banana is a long, thin, curved fruit with yellow skin and soft, sweet, white flesh inside." + ], + "Band Aid": [ + "A Band Aid is a small, thin, square piece of plastic with an adhesive on one side.", + "A Band Aid is a small strips of adhesive fabric that is placed over a wound to protect it and keep it clean.", + "A Band Aid is a small piece of adhesive tape with a gauze pad in the center.", + "A Band Aid is usually a small, thin, rectangular strip of fabric with an adhesive on one side.", + "A Band Aid is a small strip of gauze with adhesive on one side.", + "A band aid is a small, adhesive strip used to protect a cut or wound.", + "A Band Aid is usually a small sterile adhesive bandage with a gauze pad in the center.", + "A Band Aid is a small strip of adhesive material that is placed over a wound to protect it and keep it clean.", + "A Band Aid is a small, square piece of gauze that is adhesive on one side.", + "A Band Aid is a small, adhesive strip used to cover minor cuts and scrapes." + ], + "bandage": [ + "a bandage is typically a strip of gauze or cloth that is used to cover a wound.", + "A bandage is a piece of cloth or other material used to bind or cover a wound, to support a broken bone or injured muscle, or to protect burns.", + "A bandage is a strip of material that is used to cover a wound.", + "A bandage is usually a strip of gauze or other material that is used to wrap around a wound.", + "A bandage is a strip of material that is used to cover a wound.", + "A bandage is a piece of cloth that is used to cover a wound.", + "A bandage is usually a strip of cloth or fabric that is wrapped around a body part to hold a dressing in place.", + "A bandage is usually a strip of cloth or gauze that is used to cover a wound.", + "A bandage is usually a long strip of gauze or other fabric that is wrapped around a body part to hold a dressing in place.", + "A bandage is a piece of cloth used to cover a wound." + ], + "bandanna": [ + "A bandanna is a square piece of cloth with a pattern on it.", + "A bandanna is a large, usually colorful, piece of cloth that is worn around the neck or head.", + "A bandanna is a triangular-shaped piece of cloth that is typically tied around the head.", + "A bandanna looks like a square or rectangular piece of cloth with a pattern or design on it.", + "A bandanna is a square or rectangular piece of clothing fabric that is typically red and white in color.", + "A bandanna is a piece of cloth that is typically square or rectangular, and is worn around the head or neck.", + "A bandanna is a rectangular piece of cloth with a pattern on it.", + "A bandanna is a triangular piece of cloth that is typically worn around the neck or head.", + "A bandanna is a square piece of cloth with a pattern on it.", + "A bandanna is a square piece of fabric with a pattern on it." + ], + "banjo": [ + "A banjo is a stringed musical instrument with a head that is typically circular.", + "A banjo typically has a round body with a resonator, or sound chamber, and a long neck.", + "A banjo typically has a round, open-backed body with a flat face.", + "A banjo typically has a round, cylindrical body with a drum-like membrane stretched over one or both ends.", + "A banjo typically has a cylindrical body with a drum-like head at one end.", + "A banjo typically has a long neck with a round body.", + "A banjo has a round body with a long neck.", + "A banjo is a stringed instrument with a long neck and a round body.", + "A banjo typically has a long neck and a round body.", + "A banjo typically has a long neck and a round body." + ], + "banner": [ + "A banner is a long strip of cloth or paper with a message written on it.", + "A banner is a long strip of fabric with a design or message printed on it.", + "A banner is a long strip of cloth or paper with a design or message written on it.", + "A banner is a horizontal flag that is hung from a pole.", + "A banner appears as a rectangle-shaped image at the top of a webpage.", + "A banner is a large, rectangular piece of fabric with a design or message printed on it.", + "A banner typically contains a header, some text, and a call to action.", + "A banner looks like a long, horizontal piece of cloth or paper that has writing or a design on it.", + "A banner is a piece of fabric with a design or message that is hung from a pole or between two posts.", + "A banner is a large piece of cloth or other material with a slogan or design, hung up as a decoration or advertisement." + ], + "barbell": [ + "A barbell usually consists of a metal rod with weight plates of various sizes screwed onto each end.", + "It is a long metal rod with weights attached to the end.", + "A barbell is a long metal rod with weighed discs at either end.", + "A barbell resembles a long metal rod with circular disks at each end.", + "A barbell typically consists of a long steel rod with weight plates attached at each end.", + "A barbell is a long metal rod with weighted plates attached to each end.", + "A barbell is a long metal rod with weighted discs at each end.", + "A barbell is a long metal rod with weighted plates on either end.", + "A barbell Ahas a long metal rod with circular weights at each end.", + "A barbell is a long metal rod with weighted plates at each end." + ], + "barge": [ + "A barge is a flat-bottomed vessel, built mainly for river and canal transport of heavy goods.", + "A barge is a large, flat-bottomed vessel that is typically pushed or towed along waterways.", + "A barge is a flat-bottomed boat with low sides, used for carrying goods on canals and rivers.", + "A barge is a flat bottomed boat that is used to transport goods along canals and rivers.", + "A barge is a flat-bottomed boat, built mainly for river and canal transport of heavy goods.", + "A barge is a flat-bottomed boat, often used for carrying goods on canals and rivers.", + "A barge is a long, closed vessel used for carrying freight on rivers and canals.", + "A barge is a large, flat-bottomed vessel that is used to transport goods on canals and rivers.", + "A barge is a flat-bottomed boat that is used to carry cargo along canals and rivers.", + "A barge is a long, flat-bottomed vessel with squared-off ends." + ], + "barrel": [ + "A large, cylindrical container that is used to hold liquids, such as oil or wine.", + "A barrel is a large, cylindrical container that is typically made of metal, wood, or plastic.", + "A barrel is a large, vertical container used for holding or storing liquids or dry goods.", + "A large, cylindrical container with a flat top and bottom, usually made of wood or metal, and often used for storing food or drink or other liquids.", + "A barrel is a large, cylindrical container that is typically made of wood or metal.", + "A barrel looks like a large cylinder made of wood or metal.", + "A barrel is a large container that is typically made of wood or metal.", + "A barrel looks like a drum.", + "A barrel typically has a round or bulged shape and is made of metal, wood, or plastic.", + "A barrel is a cylindrical container with a flat bottom and a cylindrical or conical top, often made of metal, wood, or plastic." + ], + "barrette": [ + "A barrette is a small hair accessory that is used to fasten hair.", + "A barrette is a small clip that is used to hold hair in place.", + "A barrette is a small metal or plastic clip that is used to hold hair in place.", + "A barrette is a small hair clip that is used to fasten hair back from the face.", + "A barrette is a small, decorative clip that is used to hold hair in place.", + "A barrette is a small piece of metal or plastic that is used to hold hair in place.", + "A barrette looks like a small hair clip.", + "A barrette is a small clip that is used to hold hair in place.", + "A barrette looks like a hairclip.", + "A barrette is a hair accessory that is used to fasten hair." + ], + "barrow": [ + "A barrow is a raised mound of earth and stones, typically in the shape of a oval or a circle.", + "A barrow is a mound of earth and stones raised over a grave or graves.", + "A barrow is an ancient burial mound.", + "A barrow is a human burial mound, typically consisting of an earthen ring or bowl surrounding a central pit.", + "A barrow is a mound of dirt, rocks, or other debris that covers a burial site.", + "A barrow is a mound of earth and stones raised over a grave or graves.", + "A barrow is a mound of earth that covers a burial site.", + "A barrow is a mound of earth that is used to bury someone.", + "A barrow is a mound of earth and stones that covers a burial site.", + "A barrow is a low, round hill used as a burial site by early cultures." + ], + "baseball base": [ + "A baseball base is a whitened rubber object that is level with the field.", + "A base is a level surface on which a player stands when batting, running the bases, or fieldin the infield.", + "A baseball base is a diamond-shaped area.", + "A baseball base is a white platform with a black rubber surface.", + "A baseball base is a white rectangle with rounded corners.", + "A baseball base is typically a flat, rubber slab that is placed at the corner of the infield.", + "A baseball base is a white, flat surface that is placed in the center of each of the four corners of the diamond-shaped infield.", + "A baseball base is a white, pentagonal plate located at each corner of the infield.", + "Baseball bases are generally made of white rubber and are placed in the corners of the diamond.", + "A baseball base is a circle with a diameter of 15 inches." + ], + "baseball": [ + "Baseball is a ball made of white leather with red stitching.", + "A baseball is a white, spherical object with red stitching.", + "A baseball is a round white ball with red stitching.", + "A baseball is round and has a stitching that goes around it.", + "A baseball is round, white, and has red stitches.", + "A baseball typically looks like a white sphere with red stitches.", + "A baseball is a white, round object with red stitching.", + "A baseball is a round, hard ball made of white leather.", + "A baseball is a white sphere with red stitching.", + "A baseball is a small, hard ball used in the sport of baseball." + ], + "baseball bat": [ + "A baseball bat is a long, thin stick made of wood or metal.", + "A baseball bat is a long, cylindrical piece of wood with a smooth, rounded surface.", + "A baseball bat is a long, typically wooden, rod with a large, round hit area at the end.", + "A baseball bat is a long, cylindrical piece of wood that is used to hit the ball in the game of baseball.", + "A baseball bat is a long, cylindrical piece of wood that is used to hit the ball in the game of baseball.", + "A baseball bat is typically made of wood or metal.", + "A baseball bat has a long, round barrel with a flared knob at the end.", + "A baseball bat is a long, slender piece of wood with a smooth, rounded surface.", + "A baseball bat is a stick that is used to hit the ball in the game of baseball.", + "A baseball bat is a bat that is used to hit a baseball." + ], + "baseball cap": [ + "A baseball cap is a type of hat that has a rounded shape and a visor.", + "A baseball cap is a type of cap with a rounded crown and a visor, or bill, that is typically made of a cotton twill fabric.", + "A baseball cap is a type of hat that has a rounded, visor like brim.", + "A baseball cap has a Brim all the way around and a strap in the back that adjusts to fit.", + "A baseball cap is traditionally a soft cap with a rounded crown and a visor, worn by players and fans to shade their eyes from the sun.", + "A baseball cap is a type of hat with a rounded crown and a flat bill.", + "A baseball cap is primarily a piece of fabric with a bill attached to the front.", + "A baseball cap is a hat that has a brim all the way around it.", + "A baseball cap is a rounded hat with a bill that is often made of cloth, leather, or another flexible material.", + "A baseball cap is generally a soft cap with a curved visor that is worn by players of the game baseball to keep the sun out of their eyes." + ], + "baseball glove": [ + "A baseball glove typically looks like a large, leather mitten.", + "A baseball glove is a leather glove that is worn by a baseball player.", + "A baseball glove typically has a leather exterior and a cotton interior.", + "A baseball glove typically looks like a leather mitten with fingers.", + "A baseball glove typically consists of a leather palm and finger area, with a webbing between the thumb and forefinger.", + "A baseball glove consists of a leather palm and webbing between the thumb and forefinger.", + "A baseball glove is a glove that a baseball player wears when they are playing the sport.", + "A baseball glove is a leather glove worn by baseball players.", + "A baseball glove is a thick leather glove worn by baseball players.", + "A baseball glove is made of leather and worn on the hand of a player." + ], + "basket": [ + " baskets are often made of woven materials, like wicker or rattan, and they usually have handles so they can be carried.", + "A basket is a container that is usually made of woven materials such as wicker or rattan.", + "A basket looks like a group of items that are typically bound together in some way, such as with a handle or a lid.", + "A basket is a container with a handle made of woven materials such as wicker, straw, or reeds.", + "A basket is a concave container that is typically made from weave materials like wicker or rattan.", + "A basket is a container that is typically made of weave and has a handle.", + "A basket is a container that is typically made of woven materials, such as wicker or reeds.", + "A basket is generally a container made of some type of material such as wicker, twisted paper, cloth, or wood.", + "A basket is a container that is usually made of woven materials, such as reeds or straw.", + "A basket is an open-sided, often cylindrical container, typically made of woven materials such as willow, rattan, or reeds, used for carrying goods or for collecting items such as flowers or fruit." + ], + "basketball": [ + "A basketball is made of an outer rubber shell and an inner rubber bladder.", + "A basketball typically is round and has a diameter of about nine inches.", + "A Basketball is small, round, and made of leather.", + "A basketball is round and made of leather.", + "A basketball is a large, round, inflated ball.", + "A basketball is a round, inflated ball made of synthetic rubber and measured to have a circumference of 29.", + "A basketball typically has a leather or synthetic leather surface with ridges and a slightly textured feel.", + "A basketball is a round, brown ball made of leather or synthetic leather.", + "A basketball is a round, orange ball.", + "A basketball is a spherical ball that is used in the sport of basketball." + ], + "bass horn": [ + "A bass horn is a large brass instrument that looks like a cross between a trumpet and a trombone.", + "A bass horn looks like a large brass instrument with a long flared bell.", + "I couldn't find a picture of a bass horn, but according to this website, a bass horn is a \"large brass instrument that resembles a trumpet with a very wide bell.", + "A bass horn is a brass instrument that is similar to a tuba.", + "A bass horn looks like a big, metal horn that is played with a big, metal horn.", + "A bass horn is a brass instrument that is similar in shape to a trombone.", + "A bass horn looks like a shortened tuba.", + "A bass horn is a type of musical instrument that is similar in appearance to a trumpet.", + "A bass horn looks like a large, coiled trumpet.", + "A bass horn looks like a brass horn that is much larger and thicker than a typical horn." + ], + "bat (animal)": [ + "Most bats are small animals with furry bodies and wings.", + "Bats have wings and look like flying rodents.", + "A bat is a small mammal with wings.", + "A bat is a small, winged mammal.", + "Most bats are small, ranging in size from the flying foxes, with a wingspan of 1.", + "Bats are small animals with large wings.", + "A bat is a small, nocturnal mammal with wings.", + "A bat is a small, winged mammal.", + "A bat is a small, winged mammal.", + "A bat is a small, winged mammal." + ], + "bath mat": [ + "A bath mat is a small mat that is placed outside of a bathtub or shower.", + "A bath mat is a small rug or mat that is placed outside of a bathtub or shower.", + "A bath mat is a piece of fabric or other material that can be placed on the floor near a bathtub or shower to provide a soft, dry surface for a person to stand on while bathing.", + "A bath mat is a mat that is placed in a bathroom, typically in front of a bathtub or shower, to prevent slipping.", + "A bath mat is typically a mat that is placed outside of a shower or bathtub to help prevent slipping.", + "A bath mat is a mat placed outside of a bathtub to help prevent slips and to protect the floor from water damage.", + "A bath mat typically has a textured top and a rubber bottom.", + "A bath mat typically looks like a small, rectangular rug that is placed just outside of a bathtub or shower.", + "A bath mat is a mat that is placed in front of a bathtub or shower to prevent people from slipping when they get out.", + "A bath mat is a piece of absorbent material, such as a towel, that is placed on the floor of a bathroom to help prevent slips." + ], + "bath towel": [ + "A bath towel is a rectangular piece of absorbent fabric, usually cotton, that is used to dry oneself after a bath or shower.", + "A bath towel is typically a rectangular piece of absorbent fabric, often towel-like, that is used for drying oneself after a bath or shower.", + "A bath towel is typically a rectangular piece of fabric, usually Cotton, with a loop or sewn-in hook for hanging.", + "A bath towel is a long, Absorbent towel that is used to dry oneself after a bath or shower.", + "A bath towel is usually a rectangle shape and made out of cotton.", + "A bath towel typically has a rectangular shape and can be made of a variety of materials, such as cotton, linen, or microfiber.", + "A bath towel typically has a loop or hook that can be used to hang the towel on a hook or bar.", + "Typically, a bath towel is a rectangular piece of fabric, usually cotton, with a loop or sewn in hanger for easy hanging.", + "A bath towel typically looks like a large, rectangle-shaped piece of fabric with a loop or sewn-in tab on one end for easy hanging.", + "Bath towels are typically rectangular in shape and are larger than hand towels." + ], + "bathrobe": [ + "A bathrobe is a robe that is typically worn after taking a bath or shower.", + "A bathrobe generally looks like a long, loose-fitting robe that is made from a absorbent material like terrycloth.", + "A bathrobe is a piece of clothing that is worn after a shower or bath.", + "A bathrobe is a loosefitting outer garment that is typically worn after bathing or swimming.", + "A bathrobe is a type of robe worn after bathing or around the house.", + "A bathrobe is a sleeved robe made of absorbent material, typically toweling, worn by people exiting a bath or shower.", + "A bathrobe is a piece of clothing that is worn while getting out of the shower or bath.", + "A bathrobe is a soft, comfortable robe that is typically worn after taking a shower or bath.", + "Typically, a bathrobe is a loose-fitting outer garment that is worn after bathing or around the house.", + "A bathrobe typically looks like a comfortable, oversized robe that is made from a absorbent material like terrycloth." + ], + "bathtub": [ + "A bathtub is a large basin that is used for holding water in order to take a bath.", + "A bathtub is a large container used to hold water in which a person can bathe.", + "A bathtub is a large bowl-shaped tub used for soaking in water.", + "A bathtub is usually a white, oval-shaped tub that is attached to a bathroom wall.", + "A bathtub is a large container that is used for bathing.", + "A bathtub typically has four walls and a drain.", + "A bathtub is a long, often oval-shaped tub used for soaking in water.", + "A bathtub typically has four walls and a drain.", + "A bathtub is a long, usually oval-shaped tub used for bathing.", + "A bathtub is a long, usually rectangular basin with a drain at one end and a faucet or showerhead at the other." + ], + "batter (food)": [ + "A batter is a mixture of ingredients that is used to make pancakes, cookies, and other desserts.", + "A batter usually has a smooth, runny texture and is used to coat food before frying.", + "Batter is a smooth, thick liquid that is used to coat food before cooking.", + "You might think of a pancake or cake batter as a liquidy, pourable mixture, often with a light yellow color.", + "A batter is a food that looks like a liquid but is thick enough to pour or spread.", + "Batter is a smooth liquid mixture that is used to coat food before frying.", + "A batter is a food mixture that is usually thin and liquidy.", + "A batter is a flour-based or egg-based liquid mixture used to coat ingredients such as vegetables, meat, or fish before frying.", + "A batter is a liquid or semi-liquid mixture that is used as a coating or as a leavening agent in baking.", + "A batter is a liquids or semiliquids that are combined with a leavening agent and then used to form cakes or other baked goods." + ], + "battery": [ + "A battery is a metal can that contains three compartments.", + "A battery is usually a small, cylindrical device that can be used to power a wide variety of electronic devices.", + "A battery is a device that converts chemical energy into electrical energy and is composed of one or more electrochemical cells.", + "A battery is a cylindrical device that consists of two terminals (positive and negative) and is used to store and provide electrical energy.", + "A battery is a cylindrical device ranging in size from AA to car batteries.", + "A battery is a small, cylindrical object with two metal terminals protruding from the top.", + "A battery looks like a small, dark rectangle with a plus sign and a minus sign on either side.", + "A battery is typically a cylindrical shape with a positive terminal (marked +) and a negative terminal (marked -).", + "A battery is a device that stores energy and converts it into electrical energy.", + "A battery is a device that transforms chemical energy into electrical energy." + ], + "beachball": [ + "A beachball is a round, inflatable ball usually made from brightly colored plastic.", + "Beach balls are traditionally round, brightly colored balls made of PVC plastic.", + "A beachball is a large, round ball that is usually brightly colored.", + "A beach ball is a brightly colored ball that is used for playing games on the beach.", + "A beachball is a ball that is typically round and colorful.", + "A beachball is typically a round ball made of plastic or vinyl.", + "A round, brightly coloured ball.", + "A beach ball is typically brightly colored and round, with a diameter of about 30 centimeters.", + "Round, colorful, and inflated.", + "A beachball is a ball that is generally round and is inflated with air." + ], + "bead": [ + "A bead is a small, round object that is often used as a piece of jewelry or as a decoration.", + "A bead is a small, decorative object that is pierced through the center so it can be strung on a string or wire.", + "A beads is a small, round, often shiny object that is made out of metal, glass, or stone.", + "A bead is a small, round object that is pierced through the center so it can be strung on a thread.", + "A bead is a small, round object that is drilled through the center so it can be strung on a wire, thread, or string.", + "A bead is typically a small, round object that is strung on a wire or thread.", + "A bead is a small, round, often brightly colored object that is strung on a thread or cord.", + "A bead is a small, round object that is used as a decoration or as a component in jewelry and other items.", + "A bead is a small, round object that is pierced through the center so it can be strung onto a necklace, bracelet, or other piece of jewelry.", + "A bead is a small, round object that is pierced in the middle so it can be strung on a thread." + ], + "bean curd": [ + "A bean curd is a white, firm substance that is made from curdled soy milk.", + "A bean curd is a white, soft, and porous food made from soybeans.", + "A bean curd is a white, solid food made from soybeans that have been soaked and ground with water.", + "Bean curd is a soft, white cheese made from soy milk.", + ".", + "A bean curd is a solid food product made from soybeans that have been soaked and ground, and then coagulated.", + "A bean curd is a soft, white cheese made from soy milk.", + "A bean curd is a white, solid food product made from soybeans.", + "A bean curd, also known as tofu, is a food prepared by coagulating soy milk and then pressing the resulting curds into soft white blocks.", + "A bean curd is a white, slightly dense block that is made from soybeans." + ], + "beanbag": [ + "A beanbag typically looks like a large, overstuffed pillow.", + "A beanbag is a bag of beans, usually about the size of a large pillow, that can be used as a chair or a footrest.", + "A beanbag is a small, soft, round bag filled with dry beans, barley, rice, or other small pieces of material.", + "A beanbag is a small, pillow-like piece of furniture filled with tiny pieces of styrofoam or other soft material.", + "A beanbag is a soft, typically round piece of furniture that is filled with small pieces of styrofoam or other soft material.", + "A beanbag is a small, soft, round bag filled with dried beans, pellets, or styrofoam.", + "A beanbag is a piece of furniture that is typically made from a fabric material such as vinyl or canvas.", + "A beanbag is a small, soft, typically round bag filled with dried beans, pellets, or foam.", + "A beanbag is typically a small, pillow-like piece of furniture filled with beanbag pellets.", + "A beanbag is a soft, flexibile bag filled with small pellets or beans." + ], + "beanie": [ + "A beanie is a head covering that is typically made from a knit fabric.", + "Form-fitting headwear that is typically knitted from wool, acrylic, cotton, or some combination thereof.", + "A beanie is a small, close-fitting hat that is typically made out of wool or acrylic.", + "A beanie is a hat that fits snugly over a person's head.", + "A beanie is a type of hat that is typically made from a soft woolen material.", + "A beanie looks like a hat that is typically made out of a soft material such as wool.", + "A beanie is a type of hat that is typically made from a soft fabric such as wool.", + "A beanie is typically a close-fitting cap that is worn in cold weather.", + "A beanie is a close-fitting hat that is typically made from wool.", + "A beanie is a close-fitting cap that is typically knit from wool, cashmere, cotton, or acrylic yarn." + ], + "bear": [ + "A bear typically has a large body, short legs, and a long snout.", + "A bear is a large mammal with a big head, small eyes, and a short nose.", + "A bear typically has a long snout, small eyes, and big furry ears.", + "Most bears are four-legged and covered in fur.", + "A bear is a large, furry mammal with sharp claws.", + "A bear is a large, hairy, four-legged mammal.", + "A bear is a large mammal with four legs, a furry coat, and a long snout.", + "A bear is a large, furry mammal with sharp claws and a big head.", + "Most bears are typically large, with round bodies and short legs.", + "\nA bear is a large, mammal with furry, black or brown fur." + ], + "bed": [ + "A bed is a piece of furniture that people sleep on.", + "A bed is a piece of furniture that people use to sleep on.", + " Bedazzled.", + "A bed typically has a mattress on it, which is used for sleeping.", + "A bed typically consists of a mattress on a bed frame, with bedding such as a blanket and sheets.", + "It is a horizontal surface, often padded, on which to sleep or recline.", + "A bed typically has a frame with a mattress and a box spring, and a comforter.", + "A bed typically has a mattress on it, which is where a person sleeps.", + "A bed is a piece of furniture for sleep or rest, typically consisting of a flat, rectangular frame with a mattress and bedclothes.", + "A bed is a piece of furniture for sleep or rest, typically consisting of a frame, a mattress, and bedding (such as blankets and pillows)." + ], + "bedpan": [ + ".", + "A bedpan is a metal or plastic receptacle that is used to collect human waste.", + "A bedpan is a deep, flat pan with a handle that is used to collect urine and feces from patients who are unable to leave their bed.", + "A bedpan is a type of container used for urination or defecation while lying in bed.", + "A bedpan is a bowl-shaped object that is used by patients who are unable to get out of bed to use the restroom.", + "A bedpan is most often a plastic basin that is wide and shallow.", + "A bedpan is a small container that is used to collect urine and feces from people who are unable to use the toilet.", + "A bedpan is a metal or plastic pan that is placed under a person in a bed for them to urinate or defecate in.", + "A bedpan is a type of container used for urination or defecation while in bed.", + "A bedpan usually looks like a shallow pan with a long handle." + ], + "bedspread": [ + "A bedspread is a decorative piece of fabric that is used to cover a bed.", + "A bedspread is a decorative piece of fabric that is laid over the top of a bed.", + "A bedspread is a decorative piece of fabric that is laid over the top of a bed.", + "A bedspread is a piece of decorative fabric that is placed over the top of a bed.", + "A bedspread usually hangs down over the sides of the bed and covers the mattress.", + "A bedspread is a decorative piece of fabric that is placed over a bed.", + "A bedspread is a decorative piece of fabric that is placed over a bed.", + "A bedspread is a piece of cloth that covers the entire surface of a bed.", + "A bedspread is a piece of fabric that covers the entire surface of a bed, including the mattress, box spring, and bed frame.", + "A bedspread can come in many different colors and designs, but usually it is a decorative piece of fabric that is spread over the top of a bed." + ], + "cow": [ + "A cow is a large mammal with four legs, a tail, and horns.", + "A cow typically looks like a large, four-legged mammal with a long body and a short neck.", + "A cow is a four-legged mammal with a large body.", + "Cows are large, cloven-hoofed animals with brown or black fur.", + "A cow is a four-legged mammal that is typically black and white.", + "A cow is a four-legged mammal that is typically black and white.", + "A cow is a large, hoofed mammal with a long face and a hairy coat.", + "A cow is a mammal that has four legs, a head with two eyes, ears, a mouth, and a nose.", + "Cows are typically brown or black, with white patches on their face and udder.", + "A cow is a four-legged mammal with a large body and a small head." + ], + "beef (food)": [ + "A beef looks like a large, red piece of meat.", + "A beef is a cooked, red meat.", + "A beef (food) is a mammalian meat that is cut from the cattle.", + "A beef is typically a red, bloody piece of meat.", + "A beef is a red meat that comes from a cow.", + "A beef is a mammalian meat that comes from the cattle.", + "A beef is a vertebrate animal that is kept for its meat.", + "Beef is a type of red meat that comes from cows.", + "A beef (food) looks like any other beef that you would find at the grocery store.", + "A beef is a meat that comes from a cow." + ], + "beeper": [ + "A beeper is a small, handheld electronic device that makes a loud, continuous tone.", + "A beeper is a small, hand-held electronic device that makes a loud, high-pitched sound.", + "A beeper is a small, portable electronic device that makes a loud, brief sound when pressed.", + "Assuming you are referring to a pager: A beeper is a small, hand-held electronic device that receives messages and displays them on a screen.", + "A beeper typically looks like a small black or silver box with aclip on the back.", + "A beeper is a small, portable device that emits a loud, intermittent sound.", + "A beeper is a small, handheld device that makes a loud, continuous sound.", + "A beeper is a small electronic device that emits a loud, short tone.", + "A beeper is a device that emits a short, loud sound.", + "A beeper is a small, disk-shaped electronic device that makes a loud, sharp sound." + ], + "beer bottle": [ + "A beer bottle is typically made out of glass and has a long neck that tapers at the top.", + "A beer bottle is usually made of glass and has a small opening at the top that is covered by a metal cap.", + "A standard beer bottle is usually 12 fluid ounces and holds about 1 cup.", + "A beer bottle has a long neck and a wider bottom.", + "A beer bottle generally has a long neck and a round body.", + "A beer bottle is a glass or plastic container with a rounded bottom and a long neck.", + "A beer bottle is a container made of glass or plastic that is used to hold beer.", + "A beerbottle is typically cylindrical in shape and is made of glass.", + "A beer bottle is typically made of glass, is clear or amber in color, and has a long neck.", + "Abeer bottle is typically cylindrical, with a long neck and a flared lip." + ], + "beer can": [ + "A beer can is typically cylindrical in shape and made of aluminum.", + "A beer can is a cylindrical container that is typically made of aluminum.", + "A beer can is a cylindrical metal container with a lid that is opened by pulling a tab.", + "A beer can is typically cylindrical in shape and is made of aluminum.", + "A beer can has a cylindrical shape and is typically made of aluminum.", + "A beer can is typically a cylindrical aluminum container with a flip-top lid.", + "A beer can is a cylindrical container made of aluminum that holds beer.", + "A beer can is typically cylindrical in shape and made of aluminum.", + "A beer can typically has a silver or aluminum color.", + "A beer can is cylindrical in shape and has a tab at the top for opening." + ], + "beetle": [ + "Beetles are typically oval or cylindrical in shape, with hard exoskeletons.", + "A beetle is a small, hard-bodied insect with a pair of thickened wings.", + "A beetle is a hard-bodied, winged insect.", + "A beetle is a small, hard-shelled insect that has six legs and two wings.", + "Most beetles have a hardened pair of wings called elytra.", + "A beetle is a small, hard-shelled insect with six legs.", + "Most beetles have a hard exoskeleton, although some, such as the water beetle, have a waterproofing waxy coating.", + "A beetle is a small insect that has a hard shell.", + "Most beetles have a hard exoskeleton, a pair of stiff wings and three pairs of jointed legs.", + "A beetle is a small, hard-bodied insect with six legs." + ], + "bell": [ + "A bell is a shaped, typically metal, object that produces a ringing sound when struck.", + "A bell is a shaped metallic object that emits a sound when struck.", + "A bell is a metal object with a hole in the middle.", + "A bell is a metal object that makes a ringing sound when hit with a hammer.", + "A bell is a thin, curved metal object with a handle on top and a clapper inside.", + "A bell is a metal object that has a clapper inside of it.", + "A bell is a metal instrument that produces a ringing sound when it is struck.", + "A bell is a metal object that is in the shape of a cone.", + "A bell is typically a round, bowl-shaped object with a flared opening at the top.", + "A bell typically has a round shape and a flat bottom, with a flared top that comes to a point." + ], + "bell pepper": [ + "A bell pepper is a pepper that is bell-shaped.", + "A bell pepper is a red, yellow, or green pepper that is shaped like a bell.", + "A bell pepper is a brightly colored, edible fruit that is shaped like a bell.", + "A bell pepper is a type of capsicum that is shaped like a bell and typically has a vibrant red, orange, or yellow color.", + "A bell pepper is a type of capsicum pepper plant.", + "A bell pepper is usually red, yellow, orange, or green, and is shaped like a bell.", + "A bell pepper is a green, red, yellow, or orange vegetable that is shaped like a bell.", + "A bell pepper is a type of capsicum pepper plant.", + "A bell pepper looks like a bell-shaped fruit with a thick skin.", + "A bell pepper is usually a deep green, red, or yellow color." + ], + "belt": [ + "Most belts are made of leather and are composed of a strap and a belt buckle.", + "A belt typically has a buckle on one end and a loop on the other end, which fits around the waist.", + "A belt is a long strip of leather or cloth that is worn around the waist.", + "A belt typically consists of a strap of leather, cloth, or metal, without a buckle or other closure, which is worn around the waist or hips.", + "A belt is a strip of leather or cloth that is worn around the waist.", + "A belt is generally a piece of leather or cloth, worn around the waist, that is used to hold up pants or other clothing.", + "A belt generally consists of a strap of leather, cloth, or some other flexible material, threaded through a loop or a series of loops.", + "A belt is a strip of leather or cloth that is worn around the waist.", + "A belt is a strip of material, typically leather, fabric, or metal, with a buckle at one end, that is worn around the waist or across the chest, to hold clothing or other objects in place, or to adorn a.", + "A belt is a strip of leather or cloth that is worn around the waist." + ], + "belt buckle": [ + "A belt buckle is a metal fastening device that is used to hold a belt in place.", + "A belt buckle typically has a rectangular or oval shape and is made of metal.", + "A belt buckle is generally a rectangular or oval shaped metal plate with a hook or pin on the back to attach it to a belt.", + "A belt buckle is a functional item that is worn to hold a belt in place around the waist.", + "A belt buckle typically consists of a frame with a prong or hook on one side, which is inserted into a hole on a belt, and a ratchet on the other side, which locks the belt in place.", + "A belt buckle is usually a circular or oval shaped metal piece that is attached to a belt.", + "A belt buckle is a flat, usually ornamental clasp for fastening a belt.", + "A belt buckle is a device usually made of metal or plastic that is used to fasten a belt.", + "A belt buckle is a decorative fastener for a belt, often made of metal or plastic.", + "A belt buckle is a shaped metal disk with a catch or a prong that is attached to one end of a belt and inserted into the other end." + ], + "bench": [ + "Long and flat with a back, made of wood or metal, for sitting in a park or public space.", + "A bench is a piece of furniture that typically has a seat and four legs.", + "A bench is a piece of furniture that typically has a flat surface supported by four legs.", + "A bench typically has a seat and two legs, and sometimes a backrest.", + "A bench is a piece of furniture that typically has a seat and two arms.", + "A bench is a piece of furniture with a flat surface that is supported by four legs.", + "A bench is a thing you can sit on.", + "A bench is a long seat that is typically made out of wood or metal.", + "A bench is a flat surface where people can sit or lie down.", + "A bench is a long seat that is typically made out of wood or metal." + ], + "beret": [ + "A beret is a round, flat-crowned hat, usually of wool, worn by men and women.", + "A beret is a round, flat-crowned hat, usually made of wool, that is worn by both men and women.", + "A beret is a flat, round cap with a tight, brimless fit that is usually worn tilted to one side.", + "A beret is a soft, round, flat-crowned hat, usually of wool, worn by men and women.", + "A beret is a type of hat that is typically worn by men and women in Europe.", + "A beret typically looks like a soft, round hat that is worn close to the head.", + "A beret is a flat, round cap, usually made of wool, that is worn pulled down over the forehead.", + "A beret is a soft, round, flat-crowned hat, usually of wool, felt, or acrylic fiber, worn by both men and women.", + "A beret is a round, flat-crowned hat that is typically worn in cool weather.", + "A beret is a soft, round, flat-crowned hat, usually of wool, worn by both men and women." + ], + "bib": [ + "A bib is a type of garment that covers the chest and may have laces or other fasteners at the neck.", + "A bib is a type of shirt with a collar that is worn by men.", + "A bib is a garment worn by a baby or young child over their chest and clothing to keep them clean while they eat.", + "A bib is a triangular piece of cloth worn by a baby, tied around the neck, to catch food and keep the baby's clothes clean.", + "A bib can be made of cloth, plastic, or paper, and is fastened around the neck and shoulders.", + "A bib is a garment that is worn over the chest and fastens at the back of the neck.", + "A bib looks like a garment that is worn over the chest and fastens at the back of the neck.", + "Bibs are typically made of cloth, and are fastened around the neck with ties, buttons, or Velcro.", + "A bib is a small piece of cloth worn by infants and young children around the neck and chest to keep their clothes clean while they eat.", + "A bib is a garment worn by infants and young children to keep their clothes clean while they are eating." + ], + "Bible": [ + "A Bible is a book that typically has a leather or cloth cover, and is filled with pages of text.", + "A Bible looks like a book with a cover and pages inside.", + "The Bible is a book with a hardcover and a spine.", + ".", + "The Bible is a large book, usually with a leather or cloth cover.", + "A Bible is typically a large book with a black or brown leather cover.", + "A Bible is typically a black or brown leather-bound book with gilded pages.", + "The Bible is a large book with a black or brown leather cover.", + "The Bible is a book containing the Christian sacred scriptures.", + "." + ], + "bicycle": [ + "A bicycle has two Wheels, a frame, handlebars, and pedals.", + "A bicycle usually has two wheels, a frame, handlebars, and pedals.", + "A bicycle has two wheels that are connected by a metal frame.", + "A bicycle has two round, metal plates called wheels.", + "A bicycle has two wheels, a frame, two pedals, and two handlebars.", + "A bicycle typically consists of a frame, two wheels, two pedals, and a chain.", + "A bicycle is a two-wheeled vehicle with pedals.", + "A bicycle is typically two-wheeled vehicle with pedals that is propelled by the rider pushing the pedals.", + "A bicycle has a frame, two wheels, and two handlebars.", + "A bicycle typically has two wheels of equal size in the front and back." + ], + "visor": [ + "A visor is a piece of card or plastic that attaches to the front of a hat.", + "A visor is a piece of cardboard or plastic that is attached to the front of a baseball cap.", + "A visor is a piece of plastic or metal that is attached to the front of a helmet.", + "A visor is a type of headwear that is typically worn in sports to protect the eyes from the sun or other bright lights.", + "A visor is a type of headwear that helps to protect the face from the sun or other bright light sources.", + "It is a type of headwear that is worn in order to shade or protect the eyes from the sun.", + "A visor is a brimless head covering that is typically worn in hot weather to protect the face from the sun.", + "A visor is a piece of stiff material that is attached to the front of a hat and projects down over the eyes.", + "A visor is a type of hat that has a brim that extends down from the front of the hat and typically curves around the sides.", + "A visor is a component of a helmet that covers the face." + ], + "billboard": [ + "A billboard is typically a large sign that is placed on the side of a road or highway.", + "The outside of a typical billboard is covered in large printed sheets of vinyl or other durable weatherproof material.", + "A billboard is a large sign that is typically used to advertise a product or service.", + "A billboard is a large, usually rectangular, advertizing structure that is placed along roadsides and in other high-traffic areas.", + "Most billboards are large metal or wooden structures that are placed alongside roads and highways.", + "A billboard is a large sign that is typically used to advertise a product or service.", + "A billboard is a large, flat surface on which businesses can advertise.", + "A billboard is a large, usually flat surface (such as a wall or fence) on which advertisements are posted.", + "A billboard is a large, flat panel that is typically placed on the side of a road.", + "A billboard is a rectangular piece of paper or plastic with advertising on it." + ], + "binder": [ + "A binder is a three-ringed folder that holds loose papers together.", + "A binder is a three-ringed folder that is used to hold together loose sheets of paper.", + "A binder is a three-ringed notebook that is usually made of hard plastic or cardboard.", + "A binder is a three-ringed notebook that is used to keep loose papers together.", + "A binder is a ringed notebook with dividers that is used to organize notes and papers.", + "A binder is a type of folder that helps people organize loose papers.", + "A binder typically has a hard cover and rings that allow pages to be added or removed.", + "A binder is a large, three-ringed folder that is used to hold pages of paper together.", + "A binder usually has a hard cover and a ringed spine that holds looseleaf paper inside.", + "A binder is a three-ringed notebook where students can organize their notes and handouts from class." + ], + "binoculars": [ + "Binoculars look like two small telescopes side by side, each one pointing in a slightly different direction.", + "A binoculars is a two-lens optical instrument used for viewing distant objects.", + "A binoculars is an instrument used to magnify distant objects by using two lenses.", + "A binoculars is an optical instrument used for viewing distant objects.", + "The outside of a binoculars is typically two long tubes that are connected at the eyepieces.", + "A binoculars is an optical instrument used to magnify objects at a distance.", + "Binoculars are two telescopes, side by side, mounted on a frame that you hold with both hands.", + "A binoculars is an instrument composed of two telescopes that are attached to each other and allow a viewer to see distant objects as if they were close up.", + "A binoculars consists of two tubes connected to each other, with an eyepiece on each tube.", + "Binoculars have two cylindrical lenses that are held in place by a framework." + ], + "bird": [ + "Birds have two wings and two legs.", + "A bird has a beak, two wings, and two legs.", + "A bird is an animal with wings and feathers.", + "A bird has two wings and two legs.", + "A bird has a beak, two wings, and two feet.", + "A bird typically has two eyes, a beak, two wings, and two feet.", + "Birds have wings and feathers.", + "A bird has two wings and two legs.", + "A bird has two wings, two legs, and a beak.", + "Most birds have wings, feathers, and a beak." + ], + "birdfeeder": [ + "A bird feeder is typically a cylindrical or rectangular container that holds bird food and has one or more openings for the birds to access the food.", + "A birdfeeder typically consists of a platform or feeder base with a tray, tube, cage, or cup where bird food is placed.", + "A birdfeeder is a device that helps to feed birds.", + "A birdfeeder is a small device that is used to feed birds.", + "A birdfeeder is typically a small, elevated platform with a lip or trough around the edge, designed to hold bird food and attract birds.", + "A birdfeeder is typically a small structure that is designed to hold bird food and provide a place for birds to eat.", + "A birdfeeder typically consists of a platform or feeder tray with a seed dispenser, hung from a support structure such as a tree limb.", + "A birdfeeder is a domed or tube-shaped feeder that is attached to a pole or hung from a tree limb.", + "A birdfeeder is a small structure that is designed to hold bird food and offer it to birds.", + "A birdfeeder typically has a base made of either plastic or metal, with a tube or series of trays rising up from the base." + ], + "birdbath": [ + "A birdbath is a bowl shaped object that is placed outside and is filled with water for birds to drink and bathe in.", + "A birdbath is a bowl-shaped vessel that is used to hold water for birds to drink from or bathe in.", + "A birdbath is a bowl-shaped structure that holds water.", + "A birdbath typically consists of a basin placed on top of a pedestal or stand.", + "A birdbath is a small, shallow basin that is filled with water.", + "A birdbath is a shallow bowl-shaped container that is filled with water and used by birds to drink and bathe in.", + "A birdbath typically consists of a bowl- or basin-shaped feature filled with water.", + "A birdbath can be any size or shape, but is typically shallow with gently sloping sides.", + "A birdbath is a shallow basin filled with water, often located in a garden.", + "A birdbath is a basin placed outdoors to provide water for birds to bathe in." + ], + "birdcage": [ + "A birdcage is a generally dome-shaped cage that is used to keep pet birds.", + "A birdcage is typically made out of metal bars and has a bottom where bird seed and water can be placed.", + "A birdcage typically consists of an open metal frame with bars or wires spaced closely enough together that birds cannot escape.", + "A birdcage typically has a metal or wooden frame with wire mesh sides.", + "A typical birdcage is cylinder-shaped and made of metal wire mesh.", + "A birdcage is a small cage designed to hold a bird.", + "A birdcage is octagonal in shape and has four posts with a roof on top.", + "A birdcage is generally a cylindrical or oval shape with bars on the sides for the bird to grip.", + "A birdcage has a metal frame with wire mesh sides.", + "A typical birdcage is typically cylindrical in shape and is made out of metal bars that are spaced out evenly." + ], + "birdhouse": [ + "A birdhouse is a small, typically wooden house for birds to nest in.", + "A birdhouse looks like a miniature house with a small hole in the front for a bird to enter.", + "A birdhouse is typically a small wooden house with a hole in the front for birds to enter.", + "A birdhouse is a small structure that is designed to look like a house for birds.", + "A birdhouse typically has a rectangular or oval shape with a pointed top.", + "A birdhouse is typically a small wooden house with a hole in the front for birds to enter.", + "A birdhouse is a small, typically wooden house for birds to nest in.", + "A birdhouse typically has a rectangular or cube shape with a hole in the front for the bird to enter.", + "A birdhouse is a small house made for birds.", + "A birdhouse is a small house designed for birds to live in." + ], + "birthday cake": [ + "A birthday cake is a cake that is traditionally eaten as part of a birthday celebration.", + "Birthday cakes are usually decorated with brightly colored icing and sprinkles.", + "A birthday cake can look like many things, but often times it is decorated with frosting and sprinkles and has candles on top.", + "On a birthday cake, there is typically a frosting of some sort, often with birthday candles placed on top.", + "A birthday cake consists of one or more layers of cake, with frosting or other icing between the layers and on the top and sides of the cake.", + "A birthday cake is traditionally a round cake with white frosting.", + "A birthday cake is a cake decorated with birthday-themed icing and decorations.", + "A birthday cake typically has frosting and candles on top.", + "A birthday cake is typically a round cake that is frosted and decorated with candles.", + "A birthday cake looks like a cake with the person's name on it and the date of their birth." + ], + "birthday card": [ + "A birthday card typically has a message of happy birthday written on the front, along with a picture or design.", + "Most birthday cards are rectangular and have a glossy finish.", + "A birthday card looks like a rectangular piece of paper that is folded in half.", + "A birthday card is a piece of paper or cardstock with a birthday message on it.", + "A birthday card is a rectangular piece of paper that is folded in half.", + "A birthday card is a rectangular piece of cardboard with a fold in the middle.", + "A birthday card typically has \"Happy Birthday\" written on the front, along with a picture or decorations.", + "A birthday card is a piece of paper or cardstock that is folded in half and has a message written inside.", + "A birthday card typically has an image on the front that is related to birthdays or age, and the inside of the card will have a message wishing the reader a happy birthday.", + "A birthday card has a pretty cover with a birthday message and is usually given to someone on their birthday." + ], + "pirate flag": [ + "The skull and bones on a black flag.", + "A pirate flag typically has a skull and crossbones on a black background.", + "A pirate flag typically has a black background with a white skull and crossbones in the center.", + "A pirate flag tends to be black, with a skull and crossbones in the center.", + "A pirate flag is typically black with a white skull and crossbones.", + "A pirate flag typically has a skull and crossbones on a black or red background.", + "A pirate flag typically has a skull and crossbones on a black or dark background.", + "A pirate flag is black with a white skull and crossbones.", + "A pirate flag typically has a skull and crossbones on it.", + "A pirate flag is black with a white skull and crossbones in the center." + ], + "black sheep": [ + "A black sheep is an outlier or misfit within a group.", + "A black sheep has black wool.", + "The term \"black sheep\" is used to describe someone who is different from the rest of their family or group.", + "A black sheep is an outlier that does not fit in with the rest of the group.", + "A black sheep is typically darker in color than the rest of the flock.", + "A black sheep has black fur and is usually an outcast in a flock of sheep.", + "A black sheep is typically an animal with dark wool.", + "A black sheep looks like a sheep that is black all over.", + "A black sheep is an animal with black wool.", + "A black sheep is an animal with black fur." + ], + "blackberry": [ + "A blackberry is a small, black fruit that grows on a bush.", + "A blackberry is a small, black fruit that grows on a bush.", + "A blackberry is a small, dark fruit with a firm, juicy flesh.", + "A blackberry is a small, black fruit that grows on a bush.", + "A blackberry is a small fruit that is black in color.", + "A blackberry is a small, dark-colored fruit that grows on a bush.", + "A blackberry is a small, round fruit that is black in color.", + "A blackberry is a small, black fruit that grow in clusters on blackberry bushes.", + "A blackberry is a small, dark fruit with a lot of seeds.", + "A blackberry is a small, black fruit that grows on a vine." + ], + "blackboard": [ + "A typical blackboard is a large rectangle, made of smooth dark wood or painted a matte black.", + "A blackboard is often a large rectangular piece of pitch black chalkboard that hangs on a wall.", + "A blackboard typically consists of a flat surface made of smooth dark material, upon which information can be written in chalk.", + "A traditional blackboard is a large, flat, rectangular piece of chalkboard, often hung on a wall or placed on a stand for writing or drawing.", + "A blackboard is a large, flat, black piece of chalkboard that is usually hung on a wall.", + "A blackboard typically has a smooth, matte surface that can be easily written on and erased.", + "A blackboard is a large, flat, black board that is typically hung on a wall in a classroom.", + "A blackboard is a large, flat, dark board on which teachers write or display information for their students.", + "One type of blackboard is a large, flat, rectangular piece of smooth dark grey or black stone.", + "A blackboard is traditionally a large, flat, rectangular piece of chalkboard used for writing or drawing." + ], + "blanket": [ + "A blanket is a piece of cloth that is used to cover a person or thing.", + "A blanket is typically a rectangular-shaped piece of fabric that is used to cover a person or object.", + "Blankets are typically made of fabric and have a soft, fuzzy surface.", + "A blanket is a piece of thick fabric that is used to cover a person or object.", + "A blanket is a piece of fabric that is used to cover something.", + "A blanket is usually a piece of quilted fabric with a pattern or picture on it.", + "A blanket is a large piece of soft fabric that is used to cover a person or object.", + "A blanket is typically a rectangular piece of fabric, often quilted or woven, that is used for warmth, especially while sleeping.", + "A blanket typically has a soft Plains Indian\u2013styled woven jacquard or twill weave, often in a Navajo-inspired diamond pattern.", + "A blanket is a piece of fabric that is used to cover a person or object." + ], + "blazer": [ + "A blazer is a type of jacket.", + "A blazer is typically a tailored jacket in woollen fabric with a buttoned front.", + "A blazer is usually a tailored jacket in wool, cotton, or synthetic fabric with metal buttons.", + "A blazer is a type of jacket that is typically characterized by having lapels, and a buttoned front.", + "A blazer typically has a structured shoulder and a button-down front.", + "A blazer is a formal jacket with shoulder pads and buttons down the front.", + "A blazer typically has a notched Lapel, and breast pocket.", + "A blazer is a type of jacket that is typically worn as part of a suit or a uniform.", + "A blazer is a type of jacket that is typically worn as part of a suit or formal outfit.", + "A blazer is a tailored jacket with a notched lapel and two or three buttons." + ], + "blender": [ + "A blender is a tall, cylindrical appliance with a base that houses a motor.", + "A blender is a tall, cylindrical appliance with a base that houses a motor.", + "A blender is a kitchen appliance that is used to chop, puree, and liquefy food.", + "A blender looks like an electric jug with a long metal arm attached to the lid.", + "A blender typically has a jar with a razor-sharp blade at the bottom that spins at high speeds.", + "A blender consists of a jug-shaped container with a rotating metal blade at the bottom.", + "A blender is a kitchen appliance that is used to mix, pur\u00e9e, or emulsify food and other substances.", + "A blender is a kitchen appliance that is used to mix, pur\u00e9e, or emulsify food and other substances.", + "A blender is a small appliance that typically has a cylindrical jar attached to a base.", + "A simple blender consists of a jar with a removable lid, a base that houses the motor and blades, and a rubber gasket between the jar and base." + ], + "blimp": [ + "A blimp is a large, cigar-shaped balloon that is filled with a lighter-than-air gas.", + "A blimp is a large, cigar-shaped balloon that is filled with gas and has a cabin for passengers or cargo suspended below it.", + "A blimp is a large, cigar-shaped airship that is propelled by one or more engines.", + "A blimp is a large, aerodynamic bag that is filled with helium and has a gondola suspended beneath it.", + "A blimp looks like a large floating balloon, typically with a gondola or cabin suspended beneath it.", + "A blimp is a type of airship, usually propelled by one or more engines.", + "A blimp is typically an elongated bag made of strong, airtight fabric with a gondola suspended below it.", + "A blimp looks like a large balloon that is filled with air.", + "A blimp is a large, round, canvas bag that is filled with air and propelled through the air by a motor.", + "A blimp is a type of airship, usually propelled by a gasoline engine." + ], + "blinker": [ + "A blinker is a small, light-emitting device that is attached to the outside of a vehicle.", + "A blinker is a cone-shaped, orange signal that is placed on the side of the road.", + "A blinker is a small, usually blinking light that is attached to the outside of a vehicle.", + "A blinker is a yellow or red light on the side of a car that blinks to indicate a turn.", + "?A blinker is a flashing yellow light.", + "A blinker is a small, rectangular light that is typically mounted on the front or rear of a vehicle.", + "A blinker is a light that is mounted on the front and rear of a car.", + "A blinker is a light on the side of a car that blinks to indicate that the driver is turning.", + "A blinker is a warning light on a vehicle that flashes to indicate when the driver is turning.", + "A blinker is a small, blinking, colored light that is attached to the outside of a vehicle." + ], + "blouse": [ + "A blouse is a top that typically has buttons down the front and a collar.", + "A blouse is a loose-fitting shirt with a collar and buttons down the front.", + "A blouse is a piece of clothing that is worn by women.", + "A blouse is a type of shirt that is typically loose fitting and has a softer construction than a typical button-down shirt.", + "A blouse is a type of shirt that is usually worn by women.", + "A blouse is typically a button-down shirt with a collar.", + "A blouse is a type of shirt or top that is typically loose-fitting and has a feminine look.", + "A blouse is a garment that is worn by women.", + "A blouse is a shirt with a collar and buttons that is meant to be worn by women.", + "A blouse is a loose-fitting upper garment that is typically worn by women." + ], + "blueberry": [ + "A blueberry looks like a small, round, dark blue fruit with a white powdery coating.", + "A blueberry is a small, plump, round fruit with smooth skin that can range in color from blue to purple to black.", + "A blueberry is a small, blue fruit with a white center.", + "\nA blueberry is a small, round fruit that is dark blue in color.", + "A blueberry is a small, round, blue fruit.", + "A blueberry is a small, round fruit with a dark blue or purple skin and a white or light blue flesh.", + "A blueberry is a small, round fruit that is blue in color.", + "A blueberry is a small, spherical fruit that is typically blue or purple in color.", + "A blueberry is small, round, and blue.", + "A blueberry is a small, round fruit that is blue in color." + ], + "gameboard": [ + "A Gameboard typically has a grid with spaces for players to move their pieces.", + "A gameboard typically has a series of squares or rectangles in different colors, with each color representing a different player.", + "A gameboard is a rectangular or square board on which a game is played.", + "A gameboard is a square or rectangular board with squares or spaces of different colors, numbers, or symbols.", + "A gameboard is a board with squares or rectangles of different colors, numbers, or symbols, used in playing certain board games.", + "A gameboard is a large rectangular board on which a game is played.", + "A gameboard is a surface on which a game is played.", + "A gameboard typically has a rectangular shape and is divided into a grid.", + "A gameboard is a flat surface on which players can move game pieces around.", + "A gameboard typically has a squares in rows and columns." + ], + "boat": [ + "A boat typically has a long, narrow body with a flat bottom, making it easy to navigate through water.", + "A boat looks like a large, floating vessel that is used for transportation on water.", + "A boat is a water vessel of various sizes designed to float, travel, and work on water.", + "A boat looks like a large water vessel that people use to travel on water.", + "A boat is a floating vehicle typically propelled by sails or a motor.", + "A boat is a vehicle designed to travel on water.", + "A boat is a water vessel that is used for travel, recreation, or work.", + "A boat typically has a large, flat surface area that is used for transporting people or objects across a body of water.", + "A boats is a ships that is used for carrying people or goods on water.", + "A boat is a large water vessel that is used for travel, recreation, or work." + ], + "bob": [ + "A bob is a short haircut in which the hair is cut straight around the head at about jaw-level, often with a fringe or \"bangs\" at the front.", + "A bob is a short, choppy haircut.", + "A bob is a short haircut in which the hair is cut evenly at the bottom around the head.", + "A bob is a short haircut in which the hair is cut straight around the head at about jaw-level, with a fringe (or \"bangs\") at the front.", + "A bob is a short, choppy haircut.", + "A bob is a hairstyle where the hair is cut short and even all around the head.", + "A bob is a hairstyle that is typically cut just above the shoulders.", + "A bob is a haircut in which the hair is cut straight around the head at about jaw-level, with a fringe (or bangs) at the front.", + "A bob is a haircut in which the hair is cut straight around the head at about jaw-level, usually with a fringe (or \"bangs\") at the front.", + "A Bob is a haircut in which the hair is cut the same length all around the head." + ], + "bobbin": [ + "A bobbin looks like a small, cylindrical spool of thread.", + "A bobbin is typically a small, cylindrical spool that holds thread and fits inside a sewing machine.", + "A bobbin is a small, cylindrical object around which thread or other material is wound.", + "A bobbin is a small, cylindrical spool used to hold thread or yarn.", + "A bobbin is a small spindle with a cylindrical core and a thin flange extended from each end.", + "A bobbin is a small, round spool of thread or yarn.", + "A bobbin is a small spool of thread or yarn that is used in a sewing machine or loom.", + "A bobbin looks like a small, cylindrical spool.", + "A bobbin is a small, cylindrical spool used to hold thread or yarn.", + "A bobbin is a spool of thread or yarn." + ], + "bobby pin": [ + "A bobby pin typically has a spiral or crescent shape and is used to hold hair in place.", + "A bobby pin is a small, metal hairpin with a pointed end and a flat, circular end.", + "A bobby pin is a small metal hairpin with a springy U-shaped wire.", + "A bobby pin is a small metal hairpin with a flat end and a spring-like coil that wraps around the hair.", + "A bobby pin is a small, thin metal hairpin with a ridged edge.", + "A bobby pin is small, thin metal hairpin with a ridged surface.", + "Bobby pins are small, thin pieces of metal that are used to hold hair in place.", + "A bobby pin is a small, metal hairpin with a spring mechanism that allows it to open and close.", + "A bobby pin is a small, rigid hairpin with a long, thin shaft and a flat, U-shaped wire wrapped around one end.", + "A bobby pin is a metal hairpin with a small, disk-shaped head." + ], + "boiled egg": [ + "A fully cooked hard-boiled egg will be firm to the touch with a hard white center and a liquidy yellow yolk.", + "A boiled egg looks like a cooked egg.", + "A boiled egg is an egg that has been cooked in hot water.", + "A boiled egg is an egg that has been cooked in water until the egg white and egg yolk have both solidified.", + "A boiled egg is an egg that has been cooked in hot water.", + "A boiled egg looks like an egg that has been cooked in hot water until the egg white and egg yolk have both solidified.", + "A boiled egg has a white and a yellow.", + "The egg white is firm and the yolk is liquid.", + "A boiled egg looks like an egg that has been cooked in boiling water.", + "A boiled egg looks like an egg that has been cooked in hot water." + ], + "bolo tie": [ + "A bolo tie is a necktie consisting of a piece of cord or strong twine and two decorative metal tips, one of which is attached to each end of the cord.", + "A bolo tie generally consists of a piece of cord or narrow leather with a decorative metal tip \u2013 called a aglet \u2013 on each end.", + "A bolo tie is a type of necktie consisting of a piece of cord or leather with decorative metal tips \u2013 often in the shape of cones or balls \u2013 secured with an ornamental clasp or slide.", + "A bolo tie is a formal necktie consisting of a piece of cord or braided leather with decorative metal tips, worn tied in a loop around the neck.", + "A bolo tie usually consists of a cord or braided leather lariat, with decorative metal tips \u2013 called aglets \u2013 on each end.", + "A bolo tie is a type of necktie composed of a cord or string with decorative metal tips, worn wound around the neck and fastened at the front.", + "A bolo tie is a necktie with a long cord that is worn around the neck and tied in the front.", + "A bolo tie is a type of neckwear that consists of a piece of cord or leather with two decorative ends.", + "A bolo tie is a flat braided cord with a decorative metal clasp that slides up and down the cord.", + "A bolo tie consists of a cord or string, typically made of leather or braided metal, with two decorative ends." + ], + "deadbolt": [ + "A deadbolt is a lock that is operated by turning a knob or key without the aid of springs.", + "A typical deadbolt is a cylindrical lock that has a bolt that slides into a strike plate in the doorframe.", + "It is a lock that is operated by a key from the outside and a thumbturn from the inside.", + "A deadbolt is a locking mechanism used to secure a door.", + "A deadbolt is a horizontal bolt in a door that can only be opened with a key.", + "A typical deadbolt consists of an outer cylinder with an inner cylinder that rotates when the key is turned.", + "A deadbolt is a type of lock that requires a key to lock and unlock from the outside, and can only be locked or unlocked from the inside via a thumbturn.", + "A deadbolt is a lock with a bolt that is inserted into the door frame.", + "A deadbolt is a lock that cannot be opened from the outside with a key.", + "A deadbolt looks like a regular doorknob, but it has a metal bolt that extends into the doorframe." + ], + "bolt": [ + "A bolt is a type of fastener with a circular head and a threaded shaft.", + "A bolt is typically a cylindrical rod with a head on one end that is meant to be screwed or hammered into an object.", + "A bolt is a type of fastener that is typically used to hold two or more pieces of wood or metal together.", + "A bolt is a type of fastener that is used to hold two pieces of wood or metal together.", + "A bolt is a short, cylindrical rod with a hexagonal head that is threaded along its length.", + "A bolt is a mechanical fastener that is used to join together two or more pieces of material.", + "A bolt is a cylindrical fastener that is inserted into a hole in a piece of wood or metal.", + "A bolt is a shape that has a hexagonal head and a threaded shaft.", + "A bolt is a circular piece of metal with a hole in the center.", + "A bolt looks like a screw with a square or hexagonal head." + ], + "bonnet": [ + "A bonnet is a head covering that is typically worn by women.", + "A bonnet is a type of headwear that covers the head and neck, and typically has a brim that helps shade the face from the sun.", + "A bonnet is a head covering that is typically worn by women and girls.", + "A bonnet is a type of headwear that covers the head and neck and is usually tied under the chin.", + "A bonnet is a head covering that is typically worn by women.", + "A bonnet is a women's head covering that is tied under the chin.", + "A bonnet is a hat that is tied under the chin and often has a brim.", + "A bonnet is a type of headwear that covers the head and hair.", + "A bonnet is a type of headwear that covers the head and hair.", + "A bonnet is a type of headwear that covers the head and hair." + ], + "book": [ + "A book generally has a cover, spine, and pages.", + "A book usually has a cover, a spine, and pages.", + "A book typically has a cover, front matter, a body, and back matter.", + ".", + "Most books are rectangular in shape and have a hardcover.", + "A book has pages that are usually made of paper.", + "A book usually has a cover, title, and author.", + "A book has a cover with a front and a back.", + "A book typically has a cover, pages, and a spine.", + "A book typically has a cover, binding, pages, and a spine." + ], + "bookcase": [ + "A bookcase is a piece of furniture in which books are stored.", + "A bookcase is typically a rectangular piece of furniture with shelves that are used to store books.", + "A bookcase is a piece of furniture that typically has shelves on which to place books.", + "A bookcase typically looks like a rectangular piece of furniture with shelves that are used to store books.", + "A bookcase is a piece of furniture with shelves that are used to store books.", + "A bookcase typically has a wooden frame and several shelves that are ideal for storing books.", + "A bookcase is a type of storage furniture that is used to store books.", + "A bookcase is a piece of furniture with shelves that is used to store books.", + "A bookcase is a piece of furniture that has shelves to store books.", + "A bookcase is a piece of furniture with shelves that are used to hold books." + ], + "booklet": [ + " Booklets are printed materials consisting of several pages bound together with a cover.", + "A booklet typically has a cover, a back cover, and several pages inside that are folded in half and stapled together.", + "A booklet is a small book with a paper cover.", + "A booklet is usually a small, bound book with pages that are glued or stitched together at the spine.", + "A booklet is a small book with a paper cover.", + "A booklet is a thin book that is typically used for promotional purposes.", + "A booklet usually has a cover, a title page, and several pages inside that are held together by staples, string, or a binding.", + "A booklet is a small book with a paper cover.", + "A booklet is a stack of small pages held together by staples or stitching.", + "A booklet is a small, hand-held book with several pages held together by staples, sewing, or adhesive." + ], + "bookmark": [ + "A bookmark is a thin piece of material, often paper, with a strip on one end that is inserted into the folds of a book to mark the reader's place.", + "It is a small strip of paper, cardboard, or metal with a glued-on piece of cloth, tassel, or cord that is used to mark the page of a book.", + "A bookmark looks like a rectangular piece of paper or cardboard, often with decorative designs on it, that is used to mark the place in a book where the reader has stopped.", + "A bookmark looks like a small strip of paper or card, with a tab or tassel sticking out of the top.", + ".", + "A bookmark is generally a piece of paper,often decorated with a design or words,that is used to mark a place in a book.", + "A bookmark is generally a thin piece of cardboard or paper that is used to mark a place in a book.", + ".", + "A bookmark generally has two parts: a \"tail\" that sticks out from the top or bottom of the page, and the \"body\" of the bookmark which extends from the tail and hangs down onto the page surface.", + "A bookmark is a thin marker made of paper, cardboard, fabric, or metal, used to keep the reader's place in a book and not to lose it." + ], + "boom microphone": [ + "A boom microphone is long and thin, so that it can be held close to a person's mouth without being seen.", + "A boom microphone is a microphone on a long, flexible arm that can be positioned close to the sound source, while remaining out of the shot.", + "A boom microphone is a long, thin microphone on a long, thin pole.", + "A boom microphone most often looks like a microphone on a long pole that is attached to the sound operator.", + "A boom microphone typically consists of a microphone attached to a long pole, which allows the microphone to be positioned close to the subject's mouth without being seen by the subject.", + "A boom microphone is typically a handheld microphone that is attached to a long pole.", + "A boom microphone is a microphone that is attached to a long pole and is held above the head of the person who is speaking.", + "A boom microphone is a microphone that is attached to a long pole and is held above the head of the person speaking.", + "A boom microphone is a type of microphone that is attached to a boom pole.", + "A boom microphone looks like a long rod with a microphone attached to the end of it." + ], + "boot": [ + "A boot is a type of footwear that covers the foot and ankle and extends up the leg.", + "Most boots are made of some kind of leather, and they come up to at least the ankle, if not higher.", + "A boot is a type of shoe that covers the foot and ankle.", + "A boot is a footwear item that covers the foot and the leg up to the knee or sometimes even the hip.", + "A boot is a type of footwear that covers the foot and ankle and extends up the leg.", + "A boot looks like a shoe that comes up past the ankle.", + "A boot is a type of footwear that covers the foot and ankle and extends up the leg.", + "A boot is a type of shoe that covers the foot and ankle.", + "A boot is a type of footwear that covers the foot and ankle and extends up the leg.", + "A boot is a type of footwear that covers the foot and the ankle and extends up the leg." + ], + "bottle": [ + "A bottle is a container with a neck that is narrower than the body and a mouth.", + "A bottle typically has a cylindrical shape and a neck that is narrower than the body of the bottle.", + "A bottle contains a liquid and has a neck and a mouth.", + "A bottle can either be a solid object such as in the case of a glass bottle of water or a container with a neck and a mouth that is used to hold liquids such as in the case of a wine bottle.", + "A bottle is a container with a neck that is narrower than the body and a mouth.", + "A bottle is a container with a neck that is narrower than the body and a mouth.", + "A bottle has a long neck and a round body.", + "A bottle is a container with a neck that is narrower than the body and a mouth.", + "A bottle is a container with a neck that is narrower than the body and a mouth.", + "A bottle is a container with a narrow neck and a wide body." + ], + "bottle opener": [ + "A bottle opener typically has a long, metal arm with a curved end.", + "A bottle opener is a small tool that is used to open bottles.", + "A bottle opener typically has a sharp metal end that is inserted into the bottle's cap to pry it off, and aflat end that can be used as a lever to pry the cap off.", + "A traditional bottle opener is a small metal tool that is inserted into the bottle cap to pry it off.", + "A bottle opener is a metal device that is inserted into the top of a glass bottle to remove the metal cap.", + "A typical bottle opener is a small metal tool that is inserted into the bottle to pry the top off.", + "Bottle openers are small metal tools with a sharp cutting edge on one side and a curved hook on the other.", + "A bottle opener is a device used to open bottles.", + "A bottle opener is a metal tool that is used to open bottles.", + "A typical bottle opener is a handheld tool that is used to open bottles that have a metal cap." + ], + "bouquet": [ + "A bouquet is a arrangement of flowers, usually given as a gift.", + "A bouquet is a group of flowers rapped together with a ribbon or string.", + "A bouquet can be made up of many different types of flowers, but typically includes a mix of colors and varieties.", + "A bouquet usually has a mix of flowers in different colors, sizes, and types.", + "A bouquet is a collection of flowers that are tied together and given as a gift.", + "A bouquet is a collection of flowers, typically given as a gift.", + "A bouquet of flowers is typically comprised of a grouping of blooms that are bound together by a stem.", + "A bouquet is a kind of arrangement where flowers or other things are put together in a bunch.", + "A bouquet of flowers generally includes a mix of blooms in various colors and sizes.", + "A bouquet typically contains a variety of flowers that have been cut and arranged in a specific way." + ], + "bow (weapon)": [ + "A bow is a long, flexible piece of wood with a string stretched between its two ends.", + "A bow is a long, flexible rod with a string stretched between the ends.", + "A bow is a weapon that is typically made of a long, flexible piece of wood.", + "A bow is a long, slightly curved stick with a string stretched between the ends.", + "A bow is a ranged weapon that consists of a string stretched between two ends of a stick.", + " Bows are ranged weapons that fire arrows as ammunition.", + "A bow is a long, thin piece of wood with a string stretched between the two ends.", + "A bow is a weapon that is made of a long, flexible piece of wood.", + "A bow is a weapon that consists of a long, narrow strip of flexible material, typically wood, strung between two ends and drawn back by the user in order to fire arrows.", + "A bow is a weapon that consists of a curved piece of wood or other material strung with a string, used for shooting arrows." + ], + "bow (decorative ribbons)": [ + "A bow is a decoration made from ribbon, and is usually tied in a loop.", + "A bow is a decorative ribbon that is tied in a loop.", + "A bow can be made of many different materials, but is most commonly made of ribbon.", + "A bow is a decorative ribbon that is tied in a loop.", + "A bow is a decorative ribbon that is used to tie a present or add decoration to an event.", + "A bow is a decorative ribbon that is tied in a loop.", + "A bow usually consists of a long ribbon that is draped over the arm or shoulder and fastened at the back or side.", + "A bow is a strip of fabric that is looped and then tied in the middle.", + "A bow is a decorative ribbon that is used to tie around a present or gift.", + "A bow is a decorative ribbon that is tied in a loop." + ], + "bow-tie": [ + "A bow-tie typically has two loops of fabric that come together at the center and tie off in a bow.", + "A bow-tie typically looks like a long, thin strip of fabric that is tied around the neck in a bow-like fashion.", + "A bow-tie is a necktie that is tied around the neck in a bow-like fashion.", + "A bow-tie is a fashion accessory for men that consists of a strip of fabric that is tied around the neck in a bow shape.", + "A bow tie is a necktie that is tied in a bow shape.", + "A bow tie is a type of necktie that is tied in a bow instead of being tied in a knot.", + "A bow-tie is a men's necktie that is tied in the shape of a bow.", + "A bow-tie looks like a small strip of fabric that is tied around the neck in a bow-like shape.", + "A bow tie generally looks like a shaped piece of fabric that is tied around a person's neck, similar to a necktie, except that the ends are much shorter and are fastened together by a clasp or knot in the front instead of.", + "A bow-tie is a type of necktie with two loops of fabric that are tied together at the center by a narrow strip of fabric." + ], + "bowl": [ + "A bowl is a concave, circular, or near-circular object that is used for holding food, liquids, or other items.", + "A bowl is a rounded, concave dish with a flat bottom.", + "A bowl generally has a round shape, and is deep enough that food can be scooped up and eaten from it without spilling.", + "A bowl is a curved container that is used to hold food or other items.", + "A bowl is a round,.", + "A bowl is a concave container that is used to hold food or other items.", + "A bowl typically has a round, deep shape and is used for holding food or other items.", + "A bowl is a round container with a rim that is used to hold food or other items.", + "A bowl is a round, open-top container used for holding food, liquids, or other items.", + "A bowl typically has a round, concave shape and is used for holding food or other items." + ], + "pipe bowl": [ + "A pipe bowl is a curved or round bowl that is used to hold tobacco.", + "A pipe bowl is a small bowl-shaped container designed to hold smoking tobacco.", + "In general, a pipe bowl is a small, cup-shaped chamber used to hold tobacco for smoking.", + "Pipe bowls come in all shapes and sizes, but they typically have a wide, flat bottom and a small opening at the top.", + "A pipe bowl is a small, cup-shaped bowl that is placed on top of a pipe.", + "A pipe bowl is a small, round bowl that is used to hold tobacco for smoking.", + "A pipe bowl is the part of a pipe where the tobacco is placed.", + "A pipe bowl is a small bowl that sits atop a pipe stem.", + "A pipe bowl is a small, cup-shaped chamber at the end of a pipe stem where tobacco is burned.", + "A pipe bowl is a small, bowl-shaped container that is used to hold tobacco or other smoking materials." + ], + "bowler hat": [ + "A bowler hat is a type of hat with a rounded crown and a brim that is parallel to the edge of the crown.", + "A bowler hat is a type of hard felt hat with a rounded crown, created in 1849 by London hat-makers Thomas and William Bowler.", + "A bowler hat is a type of hard felt hat with a rounded crown, created in 1849 by hatters Thomas and William Bowler of Southwark, London.", + "A bowler hat has a round body and a small brim.", + "A bowler hat is a felt hat with a rounded crown and a brim that is turned up all the way around.", + "A bowler hat is a rounded, hard hat with a small brim.", + "A bowler hat is a small, round hat with a hard brim that is worn by men and women.", + "A bowler hat is a round, hard hat with a small brim.", + "A bowler hat is a round, hard hat with a small brim.", + "A bowler hat is a normal hat that has a round top and a small brim." + ], + "bowling ball": [ + "A bowling ball looks like a large, heavy black or bright-colored ball.", + "A bowling ball is eight inches in diameter and round.", + "A bowling ball is a round, heavy object that is used to bowl in the sport of bowling.", + "A bowling ball is a large, round, and heavy object that is used to play the game of bowling.", + "A bowling ball is a large, round ball that is used to play the game of bowling.", + "A bowling ball typically has a smooth, shiny surface and is either black or a bright color.", + "A bowling ball is round and has three holes in it.", + "A bowling ball is a round, heavy ball used to hit the pins in the game of bowling.", + "A bowling ball typically has three holes drilled into it, one for the thumb and two for the fingers, and is covered in a smooth, brightly colored coating.", + "A bowling ball is a heavy, round object that is used to play the sport of bowling." + ], + "box": [ + "A box is a three-dimensional object.", + "A box usually has six faces.", + "A box is a rectangular three-dimensional object.", + "A rectangular prism.", + "A box has six faces, or sides.", + "A box has six faces.", + "A box is a rectangular object with six faces.", + "A box is typically a rectangular shaped container with six faces.", + "A box typically has six faces, 12 edges, and 8 vertices.", + "A box is a rectangular container with six faces." + ], + "boxing glove": [ + "A boxing glove is a padded glove that is worn by a boxer.", + "A boxing glove has a big, padded area that covers the whole hand, and an opening for the fingers and thumb.", + "A boxing glove typically has a padded front with an attached strap that goes around the wrist.", + "A boxing glove is bulky and typically has a lot of padding.", + "It typically has a padded leather exterior and an elastic wrist strap.", + "A boxing glove is a padded glove that is worn by a boxer during a boxing match.", + "A boxing glove is typically made of leather and has padding in the knuckles and fingers.", + "A boxing glove is a padded glove that is worn by a boxer.", + "Boxing gloves are padded gloves that are worn by boxers during competitions and training.", + "A boxing glove is typically a padded piece of leather that covers the hand and has an attached thumb." + ], + "suspenders": [ + "A suspender is a garment worn over the shoulders to hold up a man's trousers.", + "A suspenders looks like a strap that goes over your shoulder and clips to your pants.", + "A suspenders is a long, thin strap of fabric, leather, or metal that is attached to the waistband of trousers or a skirt and extends over the shoulders to fasten at the back or sides.", + "A suspender is a strap worn over the shoulder that is attached at the waistline and used to hold up trousers.", + "A suspender is a strap worn over the shoulder to hold up a garment such as trousers or a skirt.", + "A suspender is a Y-shaped garment composed of two fabric or leather straps at the front and back, attached to trousers or a skirt, used to hold them up.", + "A suspenders is a type of clothing worn over the shoulders to hold up trousers.", + "A suspender is a garment worn over the shoulders to hold up trousers.", + "A suspenders is a type of clothing worn by men.", + "A suspenders is a piece of clothing worn around the waist and over the shoulders that helps to hold up pants." + ], + "bracelet": [ + "A bracelet is a piece of jewelry that is worn around the wrist.", + "A bracelet typically looks like a piece of jewelry that can adorn the wrist.", + "A bracelet is a piece of jewelry that is worn around the wrist.", + "A bracelet is a piece of jewelry that is worn around the wrist.", + "A bracelet is a piece of jewelry that is worn around the wrist.", + "A bracelet is a piece of jewelry that is worn around the wrist.", + "A bracelet is a strips of material, typically leather, cloth, or metal, that is worn around the wrist.", + "A bracelet is a piece of jewelry that is worn around the wrist.", + "A bracelet is typically a piece of jewelry that is worn around the wrist.", + "A bracelet is a piece of jewelry that is worn around the wrist." + ], + "brass plaque": [ + "A brass plaque looks like a metal plate that is engraved with words or images.", + "A brass plaque is generally a flat piece of brass that has been engraved with words or images.", + "A brass plaque is a metal plaque that is made of brass.", + "A brass plaque is a shiny, golden plaque that is smooth to the touch.", + "A brass plaque is typically a thin, rectanguar plate made of brass.", + "A brass plaque typically has a high polished finish and looks like a golden plate.", + "A brass plaque is a flat piece of metal with text or an image engraved on it.", + "A brass plaque usually has a raised or embossed design or message on a polished metal surface.", + "A brass plaque is a metal plate with words or symbols engraved on it.", + "A brass plaque is usually a rectangular piece of brass with either a matte or polished finish." + ], + "brassiere": [ + "A brassiere is a woman's undergarment that is worn to support her breasts.", + "A brassiere has two cups that fit over the breasts, straps that go over the shoulders, and fastens in the back.", + "A brassiere is a piece of clothing that women wear to support their breasts.", + "A brassiere is a garment that is worn by women to support their breasts.", + "A brassiere typically has two cups that hold the breasts and straps that go over the shoulders and sometimes hook in the back.", + "A brassiere is typically a woman's undergarment that is used to support her breasts.", + "A brassiere (commonly referred to as a bra) is a women's undergarment that consists of two cups for the breasts, and a band that goes around the rib cage.", + "A brassiere is a women's undergarment that is designed to support the breasts.", + "A brassiere is a garment that is worn by women to support their breasts.", + "A brassiere is a tight-fitting undergarment that women wear to support their breasts." + ], + "bread-bin": [ + "A bread-bin is usually a cylindrical or rectangular container with a lid, used for storing bread.", + "A bread-bin is a paneled container with a lid, used for storing bread.", + "A bread-bin is typically a rectangular container with a lid, made out of metal, plastic, or wood, used for storing bread.", + "A bread bin is often a container made out of metal or wood, with a lid, used for storing bread.", + "Bread-bins are usually made out of plastic or metal and are used to store bread.", + "A bread-bin is traditionally a bin-shaped container made out of wood or metal, with a lid, used for storing bread.", + "A bread bin is a typically rectangular container made of wood, plastic, or metal, with a lid, used to store bread.", + "A bread-bin is a container to store bread in.", + "A bread bin is a small, typically rectangular container with a lid, used for storing bread.", + "A bread-bin looks like a box with a lid." + ], + "bread": [ + "A bread looks like a soft, round, and flat food that is made from flour, water, salt, and yeast.", + "A bread typically has a round, flat shape and is covered in flour.", + "Bread is a type of food that is made from flour, water, and yeast.", + "A loaf of bread is typically a oblong or round shaped, and is cooked in an oven.", + "A bread typically has a round or oblong shape and is covered in a hard crust.", + "A loaf of bread is typically long and oval-shaped.", + "A bread may vary in shape, but it is generally a soft, round, flattened food that is made from flour, water, and yeast.", + "A bread is a fluffy, round piece of food that is often eaten with butter or jam.", + "Bread is a food made from flour, water, and yeast.", + "A bread typically has a round or oval shape, with a textured surface from the yeast cells inside of it." + ], + "breechcloth": [ + "A breechcloth is a piece of cloth that is wrapped around the waist and extends down to cover the groin.", + "A breechcloth is a garment that covers the lower part of the body, typically worn by men.", + "A breechcloth is a strip of cloth that is worn around the waist, with the ends flowing down the legs.", + "A breechcloth is a type of loincloth worn by men.", + "A breechcloth is a piece of clothing that covers the front and back of the lower body.", + "A breechcloth is a long, narrow piece of cloth that is worn around the waist and between the legs.", + "A breechcloth is a garment that consists of a long strip of cloth wrapped around the hips and fastened at the waist.", + "A breechcloth is a type of loincloth that consists of a strip of material that is passed between the legs and then tied around the waist.", + "a breechcloth is a piece of cloth that wraps around the waist and covers the groin.", + "A breechcloth is a strip of cloth that runs between the legs and is attached at the waist." + ], + "bridal gown": [ + "A bridal gown is a dress worn by a bride during a wedding ceremony.", + "A bridal gown looks like a white dress that a bride wears on her wedding day.", + "A bridal gown typically has a fitted bodice and a full skirt.", + "A bridal gown looks like a dress that a bride would wear on her wedding day.", + "A bride typically wears a white, off-the-shoulder gown with a train.", + "A bridal gown is a white dress that is worn by a bride on her wedding day.", + "A bridal gown is usually a white dress that is worn by a bride on her wedding day.", + "A bridal gown is a dress that is worn by a bride on her wedding day.", + "A bridal gown is a white dress that is worn by a bride on her wedding day.", + "A bridal gown is a dress worn by a bride on her wedding day." + ], + "briefcase": [ + "A briefcase is a rectangular, portable case used to hold papers, documents, or other materials.", + "A briefcase is a small case used to carry documents and other small items.", + "A briefcase is a small, rectangular-shaped case that is used to carry important documents or other items.", + "A briefcase is typically a rectangle shaped bag made of leather or synthetic materials.", + "A briefcase generally looks like a small, rectangular case made out of a variety of materials, such as leather, canvas, or nylon.", + "A briefcase is a narrow rectangular case used to carry documents and other valuables.", + "A briefcase is a box-shaped bag typically used by businesspeople to transport important documents.", + "A briefcase is a rectangular leather case with a handle.", + "A briefcase is a small case used to carry documents and other small items.", + "A typical briefcase is rectangular and has a handle on the top." + ], + "broccoli": [ + "A broccoli is a green veggie that has a tree-like shape.", + "A broccoli is a green, leafy vegetable that has a thick stem and small, green flowers.", + "A broccoli typically has a dark green head with tightly packed florets.", + "A broccoli typically has a green color, and is shaped like a tree.", + "A broccoli typically has a dark green head with florets that attach to a thick stalk.", + "A broccoli is a type of vegetable that is green in color and has a tree-like appearance.", + "A broccoli is a vegetable that has a large green head with small florets attached.", + "A broccoli typically has a green hue with a tinge of blue, and its florets are arranged in a tree-like pattern.", + "A broccoli is a thick, green vegetable that has a large head with small, paper-thin florets on it.", + "A broccoli has a large green head with small florets on top." + ], + "broach": [ + "A broach is a pointed tool that is used for enlarging holes or for shaping metal.", + "A broach is a type of jewelry that is worn on the lapel of a jacket or shirt.", + "A broach is a type of jewelry that is worn on the lapel of a jacket.", + "A broach is a type of jewelry that typically consists of a large, ornate pin.", + "A brooch is a decorative piece of jewelry that is pinned onto clothing.", + "A broach looks like a small, decorative pin.", + "A broach is a pointy, metal object with a decorative top.", + "A broach looks like a small, thin pin with a decorative head.", + "A broach looks like a long, thin piece of metal with a sharp point at one end.", + "A broach is a type of jewelry that is worn as a pendant." + ], + "broom": [ + "What do you mean by \"looks like?\" If you are asking for a description of what a broom looks like, it would probably go something like this: A broom is a tool with a long handle and a bristled head that is.", + "A broom is a tool that consists of a stiff bristle brush attached to a handle.", + "A broom typically has a long wooden or plastic handle with bristles attached to one end.", + "A broom is a household tool consisting of stiff bristles attached to a long handle.", + "A broom is a long-handled tool with stiff bristles at one end, used for sweeping the floor.", + "A broom is a tool that is used to sweep floors.", + "A broom is a tool with a long handle and stiff bristles that is used for sweeping floors.", + "\"]A broom has a cylindrical shaft made of wood or plastic and a brush made of straw, nylon, or plastic bristles.", + "A broom has a long handle and is made of stiff bristles.", + "Most brooms have a long handle with a bristled head." + ], + "brownie": [ + "A brownie is a flat, baked square that is usually denser and fudgier than a cake.", + "A brownie is typically a small, brick-like chocolate cake that is either fudgy or cakey in texture.", + "A brownie is a small rectangular chocolate cake.", + "A brownie is typically a small, rectangular, chocolate dessert.", + "A brownie is a small cake or square biscuit that is typically chocolate flavoured.", + "A brownie generally looks like a small, flat, square cake that is brown in color.", + "A brownie is a small, chocolate dessert that is usually squares or rectangles in shape.", + "A brownie is typically a small, squareshaped chocolate cake that is moist and dense.", + "A brownie is a flat, baked square that is usually denser and fudgier than a cake.", + "A brownie is a small, square chocolate cake that is usually served as a dessert." + ], + "brussels sprouts": [ + "A brussels sprouts looks like a miniature cabbage.", + "A Brussels sprouts is a small, round, green vegetable that resembles a miniature cabbage.", + "A brussels sprout is a small, dark green vegetable that resembles a miniature cabbage.", + "A brussels sprouts is a small, round green vegetable that resembles a miniature cabbage.", + "A brussels sprout is a small, round, green vegetable that looks like a miniature cabbage.", + "A brussels sprout is a small, round, green vegetable that is part of the cabbage family.", + "Brussels sprouts look like miniature cabbages.", + "A brussels sprouts is a small, green, leafy vegetable.", + "Brussels sprouts look like small cabbages.", + "A brussels sprout is a member of the cabbage family." + ], + "bubble gum": [ + "A bubble gum usually looks like a small, round piece of pink or colored gum.", + "A bubble gum typically looks like a colorful, oblong piece of gum.", + "A bubble gum typically looks like a small, round piece of candy that is brightly colored and has a sweet flavor.", + "A bubble gum typically is a small, round piece of pink gum.", + "A bubble gum is a round, pink piece of gum.", + "A bubble gum typically has a colorful casing and a soft, chewy center.", + "Most bubble gum is pink, cylindrical in shape, and has a foil wrapper.", + "A bubble gum looks like a rectangular piece of pink gum.", + "Bubble gum is a type of gum that is meant to be blown into bubbles.", + "A bubble gum is a small, colored, chewable piece of gum that is usually round or oval in shape." + ], + "bucket": [ + "A bucket is a cylindrical container with a handle that is used to carry water or other liquids.", + "A bucket typically has a cylindrical shape and is made out of a durable material such as plastic, metal, or wood.", + "A bucket is a round, cylindrical container with a handle.", + "A bucket typically has a round or oval shape and is used to hold water or other liquids.", + "A bucket is a cylinder-shaped container with a handle.", + "A bucket is typically a cylindrical container with a handle attached to the rim.", + "A bucket is a cylindrical container with a handle that is used to hold water, sand, or other materials.", + "A bucket is generally a cylindrical container with a handle attached to the side.", + "A bucket typically has a round or oval shape and is made of strong plastic or metal.", + "A bucket has a circular base and a cylindrical body." + ], + "horse buggy": [ + "A horse buggy is a vehicle designed to be pulled by a horse.", + "A horse buggy typically has four wheels, with a seat for two people in the front and room for a couple of passengers or parcels in the back.", + "A horse buggy looks like a carriage that is pulled by a horse.", + "A horse buggy is a carriage that is pulled by a horse.", + "A horse buggy is a small carriage that is pulled by a horse.", + "A horse buggy is typically a small, lightweight carriage that is pulled by a horse.", + "A horse buggy is a small carriage that is pulled by a horse.", + "A horse buggy is a carraige that is pulled by a horse.", + "A horse buggy is a two-wheeled vehicle designed to be pulled by a horse or other animal.", + "A horse buggy looks like a carriage that is pulled by a horse." + ], + "horned cow": [ + "A horned cow is a cow that has horns on its head.", + "A horned cow has horns on its head.", + ".", + "A horned cow is a cow that has horns on its head.", + "A horned cow is a breed of domestic cattle that is characterized by the presence of horns on the head.", + "A horned cow is a cow that has horns.", + "A horned cow has a pair of horns on its head.", + "A horned cow is a cow that has horns.", + "Horned cows have an extra growth of bone and keratin on their head, typically in the shape of a horn.", + "A horned cow has a set of horns on its head." + ], + "bulldog": [ + "A bulldog has a short, wide muzzle and a large head.", + "A bulldog has a short, wide head, and a muscular build.", + "A bulldog has a short snout, wrinkled skin, and a muscular build.", + "A bulldog has large, droopy lips, a short snout, and a stout body.", + "A bulldog has a short, squat body and a large, square head.", + "A bulldog has a massive head with a short, flat muzzle.", + "A typical bulldog has a large head and a sturdy body.", + "A bulldog is a short, muscular dog with a large head and a short snout.", + "A bulldog is a short, stocky, muscular dog with a large head and short snout.", + "A bulldog typically has a short snout, a wide head, and a stocky build." + ], + "bulldozer": [ + "A bulldozer is a heavy, tracked vehicle that is used to push dirt and debris.", + "A bulldozer is a large, tracked vehicle that has a blade attached to the front.", + "A bulldozer is large, heavy vehicle with a metal plate in front used for plowing through dirt and sand.", + "A bulldozer is a large, heavy vehicle with a wide, flat blade at the front.", + "A bulldozer is a large, heavy vehicle with a large, flat blade at the front that is used for moving dirt, sand, snow, and other materials.", + "A bulldozer is a large, heavy vehicle with a metal blade at the front that is used for pushing earth and sand.", + "A bulldozer looks like a big, yellow machine with a large blade on the front.", + "A bulldozer is a vehicle with a large, flat blade at the front that is used for moving earth and other materials.", + "A bulldozer looks like a large, heavy vehicle with a large, flat blade at the front.", + "A bulldozer is a large, heavy vehicle with a flat front that is used for pushing dirt and other materials." + ], + "bullet train": [ + "A bullet train is a high-speed train that can travel up to 300 miles per hour.", + "A bullet train looks like a large, modern, fast train.", + "A bullet train is a passenger train that has been specially designed to travel at very high speeds.", + "A bullet train is a type of high-speed train that uses specialized equipment to travel at very high speeds.", + "A bullet train is a high-speed train that travels between cities.", + "A bullet train is a type of high-speed rail train that uses dedicated tracks to travel at very high speeds.", + "A bullet train is a very fast train.", + "A bullet train is a type of high-speed train that uses technology derived from that used in airelt aircraft.", + "A bullet train is a particularly high-speed type of passenger train.", + "A bullet train is a high-speed train that uses electric traction to travel between stations." + ], + "bulletin board": [ + "A bulletin board is a board made of wood, cork, or another material, where people can post documents, pictures, or other items for others to see.", + "A bulletin board is a board where people can post announcements, advertisements, or other public messages.", + "A bulletin board is a place where people can post announcements, events, or other information.", + "A bulletin board is usually a large flat piece of cardboard with pins stuck into it.", + "A bulletin board is a piece of wood or cardboard with pins stuck in it.", + "A bulletin board is a pinboard that is used to display information for people to see.", + "A bulletin board can be any size and shape, but is typically a rectanglular piece of foam board or cork board covered in paper or fabric.", + "A bulletin board is usually a rectangular piece of wood or cork covered in fabric or paper.", + "A bulletin board is often a large framed board with corkboard or fabric attached.", + "A bulletin board is a piece of wood or plastic covered with paper." + ], + "bulletproof vest": [ + "A bulletproof vest is a vest that is made of a special material that is designed to stop bullets from penetrating it.", + "A bulletproof vest is a mesh of strong, flexible fibers that stops bullets from penetrating the body.", + "A bulletproof vest is designed to stop bullets from entering the body by absorbing their impact and spreading the force over a larger area.", + "A bulletproof vest is typically a piece of soft body armor that is worn under clothes.", + "A bulletproof vest typically consists of a panel made of Kevlar or other bullet resistant material which is worn over the torso.", + "A bulletproof vest looks like avest that is worn over the chest.", + "A bulletproof vest looks like a padded vest that covers your torso.", + "A bulletproof vest is typically a either a heavy-duty fabric vest or a bullet-resistant Kevlar vest.", + "A bulletproof vest is a human-made garment that is worn to protect the body from being shot by a gun.", + "A bulletproof vest is a garment typically made from Kevlar or other bullet-resistant materials that is worn on the body to protect against bullets." + ], + "bullhorn": [ + "A bullhorn is an instrument that amplifies the sound of a person's voice.", + "A bullhorn is a handheld megaphone that is used to amplify a person's voice.", + "A bullhorn looks like a cone-shaped megaphone.", + "A bullhorn is a handheld, portable megaphone used to amplify a person's voice.", + "A bullhorn is usually a handheld megaphone-like device used to amplify the user's voice.", + "A bullhorn is a handheld, portable megaphone used to amplify a person\u2019s voice.", + "A bullhorn has a long metal handle and a circular metal funnel attached to the end.", + "A bullhorn is a handheld megaphone.", + "A bullhorn is a handheld device that amplifies the human voice.", + "A bullhorn looks like a megaphone." + ], + "bun": [ + "A bun is usually a small, round, flat cake or bread.", + "A bun is a small, round, and often sweet cake that is made from flour, milk, sugar, and eggs.", + "A bun is typically a small, round, and often sweet roll that is widely consumed as a snack or dessert.", + "A bun is a small, round, yeasted bread roll, typically eaten as part of a meal.", + "A bun is a small, round, often sweet roll made from flour, yeast, sugar, and butter.", + "A bun is a small, round cake that is usually made from flour, sugar, eggs, butter, and milk.", + "A bun is a small, round, or oval cake.", + "A bun is a small, round, sweet roll that is often served as a dessert.", + "A bun is a small, round piece of bread that is often eaten as a snack or with a meal.", + "Typically, a bun is a small, round piece of bread that is soft in the middle and has a harder crust." + ], + "bunk bed": [ + "A bunk bed is a type of bed in which one bed frame is stacked on top of another.", + "Most bunk beds have a twin bed on top and a full size bed on the bottom.", + "A bunk bed is a type of bed in which one bed frame is stacked on top of another.", + "A bunk bed is a type of bed in which one bed frame is stacked on top of another.", + "A bunk bed is a type of bed in which one bed frame is stacked on top of another.", + "A bunk bed is a bed that has a twin bed on top of it and a full bed on the bottom.", + "A bunk bed typically has two beds, one on top of the other, with a ladder leading up to the top bunk.", + "A bunk bed is a type of bed where one bed is stacked on top of another.", + "A bunk bed is a type of bed in which one bed frame is stacked on top of another, allowing two people to sleep in the same room while saving space.", + "A bunk bed typically has two beds stacked on top of each other, with the bottom bed accessible by a ladder." + ], + "buoy": [ + "A buoy is a floating object in the water that is used to mark a specific location.", + "A buoy is a floating device that is anchored to the seabed and is used to mark a navigational channel, hazard, or area.", + "A buoy is generally a large, floating object that is anchored to the seafloor.", + "A buoy looks like a large orange or red floating device that is used to mark areas of water, warn boats of hazards, or indicate locations of interest.", + "A buoy is a yellow or orange floating object that is used to mark a particular spot in a body of water.", + "A buoy is a floating device that is anchored to the bottom of a body of water.", + "A buoy typically consists of a float, which maintains the buoy at a predetermined depth below the surface of the water, and a marker attached to the float, which is visible above the surface.", + "A buoy is a floating device that is anchored to the bottom of a body of water and is used to mark a location or to indicate a navigational hazard.", + "A buoy is a marker that is used to mark a location on water.", + "A buoy is a floating device that is anchored to the bottom of a body of water." + ], + "burrito": [ + "A burrito typically consists of a wheat flour tortilla that is wrapped or rolled around a savory filling, which can include meat, rice, beans, cheese, and vegetables.", + "A burrito looks like a large wrapped tortilla that is filled with rice, beans, meat, and vegetables.", + "A burrito typically consists of a wheat flour tortilla wrapped or folded around a savory filling, which can include meat, rice, beans, cheese, and vegetables.", + "A burrito looks like a rolled-up tortilla with fillings inside, such as meat, cheese, and beans.", + "A burrito is typically a flour tortilla filled with a savory filling like shredded meat, beans, rice, and vegetables.", + "A burrito typically consists of a wheat flour tortilla wrapped or folded around a savory filling, most often beef, beans, rice, cheese, and sometimes diced tomatoes, salsa, onions, or lettuce.", + "A burrito looks like a long, thin, soft tortilla, wrapped around a filling of rice, beans, cheese, and meat.", + "Burrito typically includes a flour tortilla wrapped around a filling.", + "A burrito is awrap made from a soft tortilla and filled with a variety of ingredients, typically beans,rice, meat, and cheese.", + "A burrito is a flour tortilla wrapped around a filling, typically beans, rice, meat, and cheese." + ], + "bus (vehicle)": [ + "A bus is a large vehicle that can seat many people.", + "A bus is a large vehicle that typically has two doors and several rows of seats.", + "A bus (vehicle) looks like a large, usually red and white, vehicle that has many seats inside and that is used to transport people from one place to another.", + "A bus is a large, rectangular vehicle with seats inside for passengers.", + "The stereotypical American school bus is large and yellow, with \u201cSCHOOL BUS\u201d written in big letters on the side.", + "A school bus is a type of bus owned, leased, or contracted by a school or school district.", + "A bus is a large, heavy vehicle that typically has two rows of seats and runs on diesel fuel.", + "Most buses are large and boxy.", + "A bus looks like a large, usually red or yellow, vehicle that has many seats and windows.", + "A bus is a large, heavy vehicle with several rows of seats and windows." + ], + "business card": [ + "A business card typically has a person's name, company, job title, and contact information on it.", + "A business card is usually a small card with a person's name, contact information, and sometimes a company logo on it.", + "A business card typically has a person's name, company, job title, and contact information on it.", + "A business card is a small rectangular card with a person's name, contact information, and sometimes a logo on it.", + "A business card is a rectangular piece of cardstock with a person's name, contact information, and sometimes a logo or imagery.", + "A business card is a card with a person's name, contact information, and sometimes a company logo.", + "A business card is a card with the name, contact information, and logo of a business.", + "A typical business card is 3.", + "A business card typically includes the person's name, company, title, address, phone number, and email address.", + "A business card is typically a small card with a person's name, contact information, and sometimes a logo." + ], + "butter": [ + "A butter is a yellowish or white solid substance that is made from cream or milk.", + "A butter is an oily, yellowish white substance that is made by churning milk or cream.", + "A butter is a dairy product that is made by churning fresh or fermented cream or milk.", + "A butter looks like a soft, yellowish, solid substance.", + "A butter looks like a white, cream-colored, or yellowish solid.", + "A butter is a type of milkfat that is typically solid at room temperature, but can also be in a liquid state if it has been melted.", + "A butter looks like a small, yellow block.", + "A butter is a white solid that is made from cream.", + "A butter is a solid, yellowish-white, creamy substance made by churning milk or cream.", + "A butter looks like a white, creamy, solid substance." + ], + "butterfly": [ + "A butterfly is a flying insect with brightly colored wings.", + "A butterfly typically has two pairs of large, colorful wings.", + "A butterfly is a flying insect with two pairs of thin, usually brightly colored wings.", + "Most butterflies have bright colors on their wings.", + "Butterflies are flyers with two pairs of wings.", + "Butterflies are typically characterized by their brightly colored wings, which are covered in small scales.", + "Butterflies are flying insects that have large, often brightly coloured wings.", + "When most people think of a butterfly, they think of a brightly colored insect with large wings.", + "They have brightly coloured wings and a long thin body.", + "Butterflies are flying insects that have colorful wings." + ], + "button": [ + "A button is typically a small, round object with a \"depression\" in the center.", + "A button is a small, round, flat piece of material that is attached to clothing with a thread and used to fasten the clothing by being pushed through a loop or hole.", + "A button usually has a round or oval shape, and is concave on one side so that it can be easily pressed.", + "A button is a small, round object that is attached to an article of clothing and is used to fasten the article.", + "round, with a hole in the center for a thread to go through.", + "A button is a small, round, flat, usually disk-shaped object, typically of metal, plastic, wood, or bone, that is attached to clothing by a thread, used as a fastener, or used to decorate clothing.", + "A button can be any shape, but is usually a round or oval shape.", + "A button is a small, round object that is typically pressed to activate a function on a machine or device.", + "A button is a small, round,flat disc with a small hole in the center.", + "A button is a small, flat, round object that can be pressed to make a connection." + ], + "cab (taxi)": [ + "A cab is usually a four-door sedan with a yellow light on top that indicates it is available for hire.", + "A taxi cab is a car with a yellow light on top that signals that it is available for hire.", + "A cab is a car with a taxi sign on top.", + ".", + "A cab (taxi) is typically a four-door sedan with a yellow light on top.", + "Most cabs are either yellow or white, and have a roof-mounted light bar that flashes red and yellow lights to indicate when the cab is available for hire.", + "A taxi is a car with a yellow light on top that is used to transport people from one place to another for a fee.", + "A cab is a four-wheeled vehicle with a driver's seat and room for passengers.", + "A cab looks like a four-door car with a sign on top.", + "A cab (taxi) is a car with a yellow light on the top." + ], + "cabana": [ + "A cabana is usually a small, roofed structure with walls on three sides and an open front, located near a pool, lake, or beach.", + "A cabana is a small, typically round or square, hut or pavilion with a thatched roof, open sides, and located near a beach or pool.", + "A cabana is a small, thatched-roof hut with open sides, typically found on a beach.", + "A cabana is typically a small, thatched-roof hut that is built on the beach or next to a pool.", + "A cabana typically looks like a small, free-standing structure with a thatched roof.", + "A cabana is a small hut or pavilion with a thatched roof, typically found near a beach or swimming pool.", + "A cabana is like a small hut or house, typically with a thatched roof, walls made of palm fronds or straw, and an open front.", + "Cabanas are typically small huts or shelters with a thatched roof.", + "A cabana is a small, waterproof hut with a thatched roof.", + "A cabana is typically a small, freestanding hut with a thatched roof." + ], + "cabin car": [ + "A cabin car is a small car that has a cabin for the driver and passengers.", + "Cabin cars were small, boxed cars with no windows, used to transport coal and other materials.", + "A cabin car is usually a small car or SUV with a lot of storage space inside.", + "A cabin car looks like a small house on wheels.", + "A cabin car is typically a smaller car, designed for maneuverability and easy parking.", + "A cabin car is a type of locomotive that has a small living space for the crew.", + "A cabin car is a small train car that has windows on all sides and a ceiling.", + "A cabin car is usually a small car or truck with a cabin area for passengers and a separate area for cargo.", + "A cabin car is a small car used as a bedroom on a train.", + "A cabin car is a small, enclosed railroad car that is used for transporting passengers." + ], + "cabinet": [ + "A cabinet is a box-shaped piece of furniture with doors and shelves that is used for storing food, dishes, linens, and other household items.", + "A cabinet is a piece of furniture typically used to store food, dishes, and other household items.", + "A cabinet is a tall, freestanding piece of furniture with one or more doors and shelves.", + "Most cabinets have doors and shelves.", + "A cabinet is a Typically a cabinet is a rectangular box shape with doors and shelves inside.", + "A cabinet is a type of cupboard that is used for storage.", + "A cabinet is a piece of furniture that typically has doors and shelves and is used for storing items.", + "A cabinet is a tall piece of furniture with doors and shelves.", + "A cabinet is a piece of furniture with one or more doors that opens to reveal shelves, drawers, or compartments used for storing items.", + "The word \"cabinet\" can refer to a piece of furniture with doors and shelves, used to store food, dishes, or other household items." + ], + "locker": [ + "A locker usually consists of a small metal or plastic cabinet with a door that can be locked from the outside.", + "There is no one answer to this question as lockers come in a variety of shapes and sizes.", + "A locker is a small, metal enclosure with a door that can be locked.", + "A locker comes in many different shapes and sizes, but they all have one common purpose: to store and secure personal belongings.", + "A locker is a small, usually tall cabinet with a door and a lock.", + "A locker is a small, usually square or rectangular storage space with a door and a latch.", + "A locker is usually a metal box with a door that can be locked.", + "A locker is a small, rectangular storage space with a metal door.", + "A locker is a small compartment with a door that can be locked.", + "Most lockers are made of metal and have a small shelf and a hooks on the door." + ], + "cake": [ + "A cake is a dessert that is typically round, and has frosting on the top.", + "Layers of cake that are usually different flavors with frosting in between the layers and on the outside of the cake.", + "A cake is a dessert that typically has a light, fluffy texture and is sweetened with sugar.", + "A cake is a round, flat pastry with a light, fluffy texture.", + "A cake typically has a light, fluffy texture and is often layered with frosting.", + "A cake is a type of dessert that typically consists of one or more layers of cake with frosting or icing.", + "A cake is a Tier 1 food item that can be eaten by the player.", + "A cake is often round or rectangular, and has multiple layers that are usually separated by frosting.", + "A cake typically has a light, fluffy texture and is often moist.", + "A cake is a round, often rectangular or square, cake that is layered with frosting." + ], + "calculator": [ + "A calculator is a small, handheld device that has a numeric keypad and various buttons for performing operations such as addition, subtraction, multiplication, and division.", + "A calculator is a small, hand-held electronic device that performs mathematical operations.", + "A calculator usually has a large digital display where numbers are entered, and a series of buttons with symbols that perform mathematical operations.", + "A calculator typically has a rectangular shape with a keyboard of different keys that are used for different mathematical operations.", + "A calculator usually looks like a small handheld device with a digital screen and a few buttons.", + "A calculator is a handheld device that has a digital display and a set of keys for entering numbers and mathematical operations.", + "A calculator typically looks like a rectangular box with a keypad on the front.", + "A calculator is a small, handheld electronic device used to perform calculations.", + "A calculator looks like a handheld device with a keypad and a screen.", + "A calculator is a rectangular shaped device that has a keypad on the right side and a screen in the middle where the numbers show up." + ], + "calendar": [ + "A calendar is a sheet of paper with days, weeks, and months listed on it.", + "Most basic calendars have seven columns and six rows.", + "A calendar is a table that shows the days, weeks, and months of a year.", + "A calendar typically has days of the week along the top, and weeks of the month running down the side.", + ".", + "A calendar is a collection of days, weeks, months, and years.", + "A calendar is a system of organizing days for social, religious, commercial or administrative purposes.", + ".", + "A calendar is a spreadsheet that shows the days of the week, the months of the year, and the years.", + "A calendar can be printed on paper or displayed electronically." + ], + "calf": [ + "A calf looks like a small cow.", + "A baby cow.", + "A calf is a babycow.", + "A calf is a young domestic cow or bull.", + "A calf is a young cow.", + "A calf is typically a young cow or bull.", + "A calf is a young mammal of the bovine family.", + "A calf is the young of certain large mammals of the bovid family, including cows, buffalo, and bison.", + "A calf is typically a young cow or bull.", + "A calf is the young of a cow or other bovine animal." + ], + "camcorder": [ + "A camcorder is a small, portable video camera used for capturing moving images and sound.", + "A camcorder typically consists of a lens cap, a viewfinder, a microphone, a LCD screen, record and playback buttons, and a power source.", + "A camcorder is a small, portable device used for videotaping.", + "A camcorder has a lens on one end and a viewfinder or LCD screen on the other.", + "A camcorder is a handheld, portable electronic device for recording video and audio.", + "A camcorder typically has a lense on one side and a display screen on the other.", + "A camcorder usually resembles a large hand-held video camera.", + "A camcorder is a portable, hand-held electronic device for recording moving images (and accompanying sound).", + "A camcorder is a small, portable camera that is used to record videos.", + "A camcorder is a handheld electronic device for recording video and audio." + ], + "camel": [ + "A camel is a large, even-toed ungulate that has a long neck and hump.", + "A camel is an even-toed ungulate with a long neck and hump.", + "A camel is a large, even-toed ungulate with a distinctive hump on its back.", + "A camel is a mammal with a long neck and hump.", + "A camel is a large animal with a long neck, humped back, and long legs.", + "A camel is a large mammal that has a long neck and legs.", + "A camel has a long neck and hump, and is usually light brown or tan in color.", + "A camel is a mammal with long legs, a big body, and a neck that sticks out from its body.", + "A camel is a large, even-toed ungulate with a distinctive hump or humps on its back.", + "A camel is a large, even-toed ungulate with a distinctive hump on its back." + ], + "camera": [ + "A digital camera looks like a small, rectangular box.", + "A typical camera has a lens on the front, a viewfinder on the back, and a shutter release button on the top.", + "A camera typically has a metal or plastic body, with a lens attached to the front.", + "A camera is a small, portable device used to take photographs or videos.", + "A camera usually has a lens on the front, a body, a viewfinder, a shutter release, and a flash.", + "A camera typically has a lens on the front, a viewfinder on the back, and a shutter release button on top.", + "A camera is a rectangular device with a lens on one end and a viewfinder on the other.", + "A camera typically contains a lens which focuses light from the scene onto a film or image sensor.", + "A camera is a small, hand-held electronic device that is used to take photographs.", + "A still camera is an optical device which creates a single image of an object or scene and records it on an electronic sensor or photographic film." + ], + "camera lens": [ + "A camera lens is a curved piece of glass that helps to focus light onto a film or digital sensor.", + "A camera lens is a cylindrical piece of clear glass or plastic with a metal or plastic housing around it.", + "A camera lens is made of one or more pieces of glass that focus the image in the viewfinder.", + "A camera lens is a tube with a glass or plastic element in the middle.", + "Camera lenses are usually round and made of glass.", + "A camera lens is a clear, round piece of glass that helps to focus light into the camera.", + "A lens is a curved piece of glass that helps to focus light.", + "A camera lens typically consists of a number of individual lens elements made from glass or other transparent materials.", + "A camera lens typically looks like a circular piece of glass.", + "A camera lens is a cylindrical piece of glass that is placed in front of a camera's film or image sensor." + ], + "camper (vehicle)": [ + "A camper is a vehicle that is used for camping.", + "A camper is a vehicle that is used for camping.", + "A campers is a vehicle that people use for camping trips.", + "A camper is a vehicle that people use for camping trips.", + "A camper is a vehicle that is used for camping trips.", + "A camper is a vehicle that is designed to provide temporary living quarters for recreation, camping, or travel.", + "Campers, also called RVs, come in all shapes and sizes.", + "A camper is a vehicle that is typically used for camping trips.", + "A camper is a vehicle that is generally used for camping trips.", + "A camper is a vehicle that is designed to be used as a home away from home." + ], + "can": [ + "A can is a container that is cylindrical in shape and made out of metal.", + "A can is an aluminum container with a cardboard wrapper.", + "\nA can is a container that is cylindrical in shape and is made of metal or plastic.", + "A can is a sealed container that is typically made out of aluminium or steel.", + "A can is a metal container that typically holds food or drinks.", + "Cans are small, cylindrical objects that are typically made out of metal.", + "A can is a sealed container that is typically made out of metal or plastic.", + "A can looks like a metal container with a pop-top lid.", + "A can looks like a cylinder with a closed top and bottom.", + "A can is a cylindrical metal container with a lid that is soldered on." + ], + "can opener": [ + "A can opener is a device used to open metal cans.", + "A can opener is a device used to open metal cans by cutting through the can lid.", + "A can opener is a tool used to open metal cans.", + "A can opener is a tool that is used to open metal cans.", + "A can opener is a handheld tool that is used to open metal cans.", + "A can opener is a device used to open metal cans.", + "A can opener is a hand-held kitchen tool that is used to open metal cans.", + "A can opener is a device used to open canned food.", + "A can opener is a device used to open metal cans.", + "A can opener is a device used to open metal cans." + ], + "candle": [ + "A candle is a thin, cylindrical object made of wax, with a wick in the center.", + "A candle is a cylindrical piece of wax with a wick in the center.", + "A candle is often a cylindrical or rectangular object made of wax with a wick in the center.", + "A candle can either be a solid block of wax with a wick in the center, or a hollow tube of wax with a wick in the center.", + "A candle is a cylindrical object that is typically made of wax, with a wick running through the center.", + "A candle is a thin, cylindrical piece of wax with a wick in the center.", + "A candle is a slender cylinder of wax with a wick in the center.", + "It is a cylindrical shape with a wick in the middle.", + "A candle is a smooth, cylindrical wax object with an open wick in the center.", + "A candle is a long, thin piece of wax with a wick in the center." + ], + "candle holder": [ + "A candle holder is a piece of furniture or a decorative object used to hold one or more candles.", + "A candle holder is a device that is used to support a candle in an upright position.", + "A candle holder is a piece of decor that holds a candle in place.", + "Most candle holders are made of metal and have a round or square base.", + "A candle holder is a device used to hold a candle in place.", + "A candle holder is an object that holds a candle in place.", + "A candle holder is a device used to hold a candle in place.", + "A candle holder is a device that holds a candle in place.", + "A candle holder is a piece of metal or glass that holds a candle in place.", + "A candle holder is any object that holds a candle in place." + ], + "candy bar": [ + "A candy bar is a type of food that typically consists of chocolate, caramel, or nougat that is coated in chocolate.", + "A candy bar is typically a rectangular bar of chocolate that is covered in a hardened sugar coating.", + "A candy bar looks like a rectangular piece of chocolate with different fillings inside, such as nuts, caramel, or nougat.", + "A candy bar typically has a wrapper made of paper or foil, and is filled with chocolate, caramel, nougat, or a combination of these ingredients.", + "A candy bar is a chocolate bar that is coated in candy.", + "A candy bar is typically a bar-shaped, chocolate-covered confection.", + "A candy bar is typically a rectangular or oval shape and is coated in chocolate.", + "Most candy bars are long and rectangular, with a chocolate coating.", + "A candy bar typically contains chocolate, nuts and caramel.", + "A candy bar is a chocolate bar that is coated with a thin layer of sugar." + ], + "candy cane": [ + "A candy cane is a white candy that is shaped like a cane.", + "A candy cane is a tall, narrow, stick-shaped candy.", + "A candy cane is a thin, curved candy stick that is traditionally red and white.", + "A candy cane is a hard candy stick that is typically red and white.", + "A candy cane is a thin, white candy stick that is bent at the top in the shape of a cane.", + "A candy cane typically consists of a thick, white rod of hard candy.", + "A candy cane is a rod of hard candy that is curved into a hook shape and is traditionally red and white.", + "A candy cane is a straight, rod-shaped candy that is typically red and white.", + "A candy cane is a hook-shaped candy that is traditionally red and white.", + "A candy cane is a hard candy stick that is bent into a hook shape." + ], + "walking cane": [ + "A walking cane is a long stick that is used to help people walk.", + "A walking cane is a stick that a person can hold on to for support while walking.", + "A walking cane is a support cane that helps with balance and mobility.", + "A walking cane is a stick that is used for support when walking.", + "A walking cane typically has a curved handle and a long, slender shaft.", + "A walking cane is a long stick that is held in the hand and used to help support the weight of the body when walking.", + "A walking cane is a wooden or metal rod that is used to support the weight of a person.", + "A walking cane is a stick that a person can lean on for support when walking.", + "A walking cane is a stick that a person can lean on to help them walk.", + "A walking cane is typically a wooden rod with a curved handle that is used to help someone with balance or mobility." + ], + "canister": [ + "A canister looks like a small, cylindrical container with a lid.", + "A canister is typically a cylindrical container with a lid, used to hold various dry goods such as rice, sugar, or flour.", + "A canister is a cylindrical container with a lid, used to hold food or other commodities.", + "A canister is a small, cylindrical container that is used to hold small items or amounts of liquids.", + "A canister typically has a cylindrical shape and a screw-on lid.", + "A canister is typically a cylinder shaped object that has a sealed top.", + "A canister is typically a cylindrical or spherical container with a lid, used to hold various items such as food, liquids, or chemicals.", + "A canister is a container with a lid that is used to hold dry goods.", + "A canister is a metal or plastic container with a lid, used to hold dry food, tea, coffee, or other small items.", + "A canister is a cylindrical container with a lid, used to hold dry goods such as coffee or flour." + ], + "canoe": [ + "A canoe is a long, narrow boat with pointed ends, designed to be paddled by one or two people.", + "A canoe is a small, long, narrow boat with pointed ends,Typically, canoes are open on top, but can also be Canoes are traditionally paddled by kneeling on one knee with the other foot forward.", + "A canoe is a narrow, open boat with pointed ends, propelled by paddles.", + "A canoe is a light, narrow boat that is pointed at both ends and is propelled with a paddle.", + "A canoe is a narrow vessel typically pointed at both ends and open on top, propelled by paddles or poles.", + "A canoe is a small, narrow watercraft that is typically pointed at both ends and open on top.", + "A canoe is a long, narrow boat with a pointed bow and stern.", + "A canoe is a long, narrow boat with pointed ends.", + "A canoe is typically a long, narrow boat with rounded ends that is propelled with a paddle.", + "A canoe is a small, narrow boat with pointed ends, designed to be paddled by one or two people." + ], + "cantaloup": [ + "A cantaloup:-Has a dull, gray-brown skin\n-Is oblong or oval in shape\n-Is usually around 9-10 inches long\n-Weighs between 1 and 2 poundsThe.", + "A cantaloup is a type of melon that has a greenish-brown skin and orange flesh.", + "A cantaloup is a type of melon that has a spherical or oblong shape and a green, gray, or brown skin.", + "A cantaloup is a type of melon that has a greenish-brown skin and a orange or yellowish flesh.", + "A cantaloup is a large, rounded fruit with a smooth, greenish-brown skin and orange flesh.", + "A cantaloup looks like a large, round melon with a greenish-brown rind and orange flesh.", + "A cantaloup is a melon with a rough, brownish-yellow skin and orange-colored flesh.", + "A cantaloup typically has a textured, bumpy exterior and is pale green or tan in color.", + "A cantaloup looks like a large, oblong-shaped melon with a bumpy, greenish-grey exterior and orange-yellow flesh on the inside.", + "A cantaloup is a representation of a melon." + ], + "canteen": [ + "A canteen looks like a smallish room with some chairs and tables, a counter, and a drinks machine.", + "A canteen is a small, portable container for holding water and other drinks.", + "A canteen is usually a small, portable case for holding water and other drinks.", + "A canteen is a small, portable eating and drinking establishment that is typically found in workplaces, schools, and other locations where people gather.", + "A canteen is a small, round, metal container with a lid and a handle.", + "A canteen is typically a small, rectangular box with a hinged lid.", + "A canteen is a food service facility in which meals are prepared and served.", + "A canteen is a small, portable case for carrying food and drink.", + "A canteen is a small, portable food and drink container.", + "A canteen is a small, portable, liquid-container typically used by soldiers and hikers." + ], + "cap (headwear)": [ + "A cap is a headwear that covers the entire head.", + "A cap is a type of headwear that fits snugly on the head and has a brim that extends over the forehead to shield the eyes from the sun.", + "A cap is a type of headwear that covers the top, back, and sides of the head, but usually not the front.", + "A cap is a piece of headwear that is typically worn in cold weather to keep a person's head and ears warm.", + "A cap is a type of headwear that helps protect against the sun and can also be used for fashion.", + "A cap (headwear) is a hat that typically has a brim all the way around and a piece that comes down over the head and rests on the back of the neck.", + "A baseball cap is a hat with a flat brim and a deep crown, typically made of cotton, wool, or synthetic fabric, with a flexible peak at the front.", + "A cap is a type of headwear that helps protect against the sun and can be decorated with a logo or slogan.", + "A cap is a piece of headwear that is typically worn in cold weather to keep a person's head and ears warm.", + "A cap is a type of headwear that covers the top, sides, and back of the head." + ], + "bottle cap": [ + "A bottle cap typically has a cylindrical shape with a flat top and bottom.", + "An American bottle cap is typically a metal disk with a sharpened edge around the circumference that is wrapped around the bottle's screw thread and tightened, compressing a chemically coated paper gasket.", + "A bottle cap is a small disk with a raised edge that fits over the mouth of a bottle.", + "A bottle cap is typically a small, circular piece of metal that is placed on top of a glass or plastic bottle to seal the opening.", + "A typical bottle cap is circular, has a slightly flattened top and a recessed rim, and is made of metal.", + "A bottle cap is a small, round piece of metal with a ridged edge that fits snugly over the mouth of a glass or plastic bottle.", + "A bottle cap is a small, round, flat disc that covers the opening of a bottle.", + "A bottle cap is a small piece of metal that fits over the top of a bottle to keep the contents from spilling.", + "A bottle cap is a small, round, flat piece of metal with a raised lip that is used to seal bottles.", + "A bottle cap is a small, round, metal disc with a small hole in the center that is placed on the top of a bottle to close it." + ], + "cape": [ + "A cape is a long, flowing garment that is worn over the shoulders and down the back.", + "A cape is a piece of clothing that is worn over the shoulders and hangs down the back.", + "A cape is a long piece of fabric that is worn over the shoulders and down the back.", + "A cape typically looks like a long, flowing piece of fabric that is attached at the neck.", + "A cape is a garment that is worn over the shoulders and hangs down the back.", + "A cape is a shaped piece of cloth that is attached at the neck and hangs down the back.", + "A cape usually has a hood and is fastened at the neck.", + "A cape is a piece of clothing that is worn over the shoulders and down the back.", + "A cape is a piece of clothing that is worn over the shoulders and extends down to the waist or below the knees.", + "A cape is a piece of clothing that hangs down from the shoulders and fastens at the neck." + ], + "cappuccino": [ + "A cappuccino is a coffee drink that typically consists of espresso, milk, andfoam.", + "A cappuccino is a coffee drink that is made with espresso, steamed milk, and milk foam.", + "A cappuccino is a coffee-based drink made with espresso, hot milk, and steamed milk foam.", + "A cappuccino is a coffee-based drink made with espresso, steamed milk, and milk foam.", + "A cappuccino is a coffee drink made with espresso, steamed milk, and milk foam.", + "A cappuccino is a coffee drink made with espresso and milk.", + "A cappuccino is a coffee-based drink made with espresso, hot milk, and steamed milk foam.", + "A cappuccino is a coffee drink that is made with espresso, steamed milk, and milk foam.", + "A cappuccino generally has a layer of steamed milk, a layer of milk foam, and a layer of espresso.", + "A cappuccino is a coffee-based drink made with espresso, milk, and steamed milk foam." + ], + "car (automobile)": [ + "A car has four round, black objects at the base of each corner.", + "A car (automobile) is a four-wheeled vehicle that typically has a combustion engine, passenger compartment, and a chassis.", + "A car typically has four metal plates that hinge along the vertical y-axis to open and provide entrance into the car for the passengers.", + "Most cars have four round, metal plates that serve as the car's wheels.", + "A car is a small, fast vehicle with four wheels and an engine.", + "A car is a four-wheeled vehicle that typically has a combustion engine and is used for transportation on roads.", + "Most cars have four round, metal plates that rotate to create forward motion.", + "A car is a four-wheeled vehicle that typically has seats for five people.", + "A car looks like a four-wheeled vehicle that typically has a seat for the driver and passengers, and an area for carrying luggage.", + "A car is a four-wheeled vehicle that typically has a seat for the driver and passengers, as well as a trunk for storing luggage." + ], + "railcar (part of a train)": [ + "A railcar is a train car that carries passengers or freight.", + "A railcar is a train car that has wheels and is used to transport people or cargo.", + "A railcar is a wheeled vehicle that runs on rails, which are fixed strips of metal or wood that are laid in specially prepared areas on a roadway.", + "A railcar is a long, metal car that can connect to other railcars to make a train.", + "Most railcars are long and cylindrical, with a flat bottom and rounded top.", + "ARailcars can vary greatly in appearance, but most are long and cylindrical with metal wheels.", + "Most railcars are long and cylindrical, with either a flat top or a dome.", + "Railcars are long and rectangular with metal wheels.", + "A railcar typically has a long, cylindrical body that rests on either two or four wheels.", + "A railcar is a wheeled vehicle used for carrying freight or passengers on a rail transport system." + ], + "elevator car": [ + "The elevator car is a small room with metal walls and a metal door.", + "An elevator car has four walls, a ceiling, and a floor.", + "Elevator cars are usually box-like, and have either mirrored or metal walls.", + "An elevator car is a small room that is typically rectangular in shape.", + "An elevator car is a small room that is used to transport people up and down in a building.", + "The elevator car is a small room with walls on three sides and an open door on the fourth side.", + "An elevator car typically contains control panels and an emergency phone.", + "\nAn elevator car is typically a small room with doors on each side that open to reveal the interior of the elevator shaft.", + "An elevator car is typically a small room with walls on three sides and an open door on the fourth side.", + "Most elevator cars are rectangular and have smooth, metal walls." + ], + "car battery": [ + "A car battery is a large, rectangular battery that is usually found in the trunk of a car.", + "A car battery is a heavy-duty battery that provides the electricity necessary to start a car's engine.", + "A car battery is often a large, rectangular battery that is black and has a handle on top for easy carrying.", + "A car battery is a large, rectangular battery that sits in the engine bay of a car.", + "A car battery is a large, rectangular battery that is typically found in the engine compartment of a car.", + "A car battery is generally a 12-volt battery that is made up of six two-volt cells.", + "A car battery is a large, cylindrical battery that is usually located in the engine compartment of a vehicle.", + "A car battery is a type of lead-acid battery.", + "A car battery is a large battery that is typically found under the hood of a car.", + "A car battery is a large battery that is used to start a car." + ], + "identity card": [ + "Identity cards vary in design from country to country, but most contain the holder's name, date of birth, photograph, and an identifying number.", + "Identity cards vary in appearance from country to country, but they usually have a person's name, date of birth, photograph, and other identifying information on them.", + "An identity card typically has a person's name, photograph, and other identifying information such as a birthdate, address, and height.", + "An identity card typically contains the individual's name, photograph, and other identifying information such as date of birth, address, and fingerprints.", + "An identity card typically has the person's name, date of birth, photo, and other information such as address and height.", + "An identity card typically has a person's name, photo, and other information such as address, date of birth, and gender.", + "Identity cards typically have the cardholder's name, photograph, and other identifying information such as a signature or an identification number.", + "An identity card is a document that shows who you are.", + "An identity card is a small, rectangular card that has your name, birthday, and other information about you.", + "An identity card typically has a person's name, photo, and other information such as address, date of birth, and gender." + ], + "card": [ + "Cards typically have a rectangular shape and are made of thin cardboard.", + "\nA card has a rank and a suit.", + "A card is a thin, rectangular piece of paper with information on it.", + "A card is a thin piece of material that is typically rectangular in shape and used for writing or printing on.", + "A card is a thin, rectangular piece of paper or plastic with a person's name, age, and address on one side and a picture on the other.", + "Most cards are rectangular and have two sides.", + "A card is typically a thin piece of cardboard with a photo or design on the front and space on the back for a message.", + "Playing cards usually have four suits, which are Hearts, Clubs, Spades, and Diamonds.", + "A card generally has two sides, the front and the back.", + "Assuming you are referring to a playing card, it is a rectangular piece of cardstock with rounded corners." + ], + "cardigan": [ + "A cardigan is a sweater that buttons or zips up the front.", + "A cardigan is a knit sweater that has a front opening and buttons or a zipper.", + "Cardigan sweaters are typically hip-length or longer, with long sleeves, and fasten down the front.", + "A cardigan is a button-down sweater that usually reaches the hips.", + "A cardigan is a type of sweater that has a button-up front.", + "A cardigan is a type of knit sweater that has an open front.", + "A cardigan is typically a knit sweater that has a button-down front.", + "A cardigan is a type of sweater that has an open front and is usually fastened with buttons or a zip.", + "A cardigan typically looks like a sweater that has a zipper or buttons down the front.", + "A cardigan is a type of sweater that has a button closure in the front." + ], + "cargo ship": [ + "A cargo ship is a large ship that is used to carry cargo from one place to another.", + "A cargo ship is a large vessel that is used to transport goods by sea.", + "A large cargo ship typically has a long flat bottom and stern that tapers at the back end.", + "A cargo ship is a large ship that usually has a flat bottom and two tall sides.", + "Cargo ships are large vessels that are used to transport goods and materials from one place to another.", + "A cargo ship is a large ship used to carry raw materials, trade goods, or passengers.", + "A cargo ship is a large, durable ship that is used to transport goods and materials from one place to another.", + "A cargo ship looks like a large boat with many containers on it.", + "A cargo ship is a large boat that is used to transport goods and materials from one place to another.", + "cargo ships are large, flat-bottomed vessels that are used to transport large amounts of goods from one place to another." + ], + "carnation": [ + "A carnation is a flower with a stem, leaves, and a blooming head.", + "A carnation is a flower with a long stem and large, round petals.", + "A carnation is a flower that has a long stem and is typically red, pink, or white.", + "A carnation looks like an flower with petals that can be different colors, but are most commonly seen as pink or white.", + "The petals of a carnation are long and thin, and they can be either ruffled or smooth.", + "A carnation is a flower with a long stem and a large, round bloom.", + "A carnation is a flower with a long stem and a round head with petals that are usually pink, red, or white.", + "A carnation is typically a red flower, but can also be white, purple, or yellow.", + "A carnation is a flower with thin, pointy petals that are tightly clustered together.", + "Carnations have long stems with green leaves and fluffy flowers that come in a variety of colors." + ], + "horse carriage": [ + "A horse carriage is typically a four-wheeled vehicle with two seats, drawn by a horse or other draft animal.", + "A horse carriage typically consists of four wheels, a metal frame, and a leather seat.", + "A horse carriage is a vehicle that is pulled by a horse, and usually has four wheels.", + "A horse carriage is typically a large, four-wheeled vehicle that is pulled by a horse.", + "A horse carriage is a vehicle that is typically pulled by a horse or a team of horses.", + "A horse carriage is a vehicle that is pulled by a horse or a team of horses.", + "A horse carriage typically consists of a horse or a team of horses harnessed to a carriage.", + "A horse carriage is a vehicle that is pulled by a horse or a team of horses.", + "A horse carriage looks like a four-wheeled vehicle that is pulled by a horse or a team of horses.", + "A horse carriage typically consists of four wooden wheels, a Metal frame, a leather seat, and reigns for the driver to hold." + ], + "carrot": [ + "A carrot is typically an orange color, and is long and skinny with a pointy end.", + "A carrot is an orange, root vegetable.", + "A carrot is a root vegetable that has a long, orange, slightly tapered shape.", + "A carrot is typically an orange color and is long and thin.", + "A carrot is an orange, root vegetable.", + "A carrot is a root vegetable that is typically orange in color, although it can also be white, yellow, red, or purple.", + "A carrot is an orange root vegetable that is eaten as a food.", + "A carrot is long and thin, and it is usually orange.", + "A carrot is a root vegetable that has an orange color.", + "A carrot is a long, thin, orange root vegetable." + ], + "tote bag": [ + "A tote bag is typically a large, rectangular bag with two straps that can be worn over the shoulder.", + "A tote bag is a large bag with two handles.", + "A tote bag is a large, rectangular bag with either two handles or one long strap.", + "A canvas tote bag usually has a rectangular bottom and two parallel handles attached to the sides.", + "A tote bag is a rectangular bag with two handles.", + "A tote bag is a large, rectangular bag with two handles.", + "A tote bag is a long, rectangular bag with two handles.", + "A tote bag is a bag with two handles that is used to carry items.", + "A tote bag is a bag with two handles that is used to carry things.", + "A tote bag is a bag with two handles and an open top." + ], + "cart": [ + "A cart is a four-wheeled vehicle, usually pulled by a horse or a donkey, for carrying goods.", + "A cart is a vehicle that is pushed or pulled along by a horse or motor vehicle.", + "A cart has four wheels and a platform for carrying goods.", + "A cart appears as a floating platform with a square base and four round posts at the corners.", + "A cart is a vehicle with either two or four wheels that is pushed by a person, or pulled by an animal, esp.", + "A cart is a large, heavy vehicle that is used to move goods from one place to another.", + "A cart is cylindrical and has a handle on one side.", + "A cart is a small vehicle with either two or four wheels that is pushed by a person, or pulled by an animal, esp.", + "A cart is a flatbed on wheels that is pushed or pulled by a person or animal, typically used for carrying goods.", + "A cart is a vehicle, often pulled by a horse or a donkey, for carrying goods." + ], + "carton": [ + "A carton is rectangular in shape and typically has a lid.", + "A carton is generally a box that is used to store various items.", + "A carton is a paperboard box used for packaging.", + "A carton is a rectangular box made of cardboard or plastic.", + "A carton looks like a cardboard box with a paper label.", + "A carton is a box made of paperboard, corrugated fiberboard, or plastic.", + "A carton is a rectangular paper box with a lid.", + "Carton is a box made of strong paperboard or cardboard.", + "Most cartons are made of cardboard and are rectangular in shape.", + "A carton is a box made of cardboard." + ], + "cash register": [ + "A cash register is a device used to record and calculate sales transactions.", + "A cash register is a machine that is used to record sales and calculate change.", + "A cash register typically has a keypad where the customer enters the amount of their purchase.", + "This is a difficult question.", + "A cash register is a machine for calculating and recording sales transactions.", + "I cannot answer this question without seeing a photo or a description of the specific cash register you are asking about.", + "A cash register typically has a keypad where the customer enters the amount of their purchase.", + "A traditional cash register is a large, rectangular device that sits on a countertop.", + "A cash register is a machine for counting and recording money transactions at a point of sale.", + "A cash register is a machine for calculating and displaying the cost of goods or services purchased." + ], + "casserole": [ + "Casseroles are generally deep, round dishes with sloped sides that are used for baking.", + "A casserole is typically a baked dish made with a meat or vegetable filling and a starchy or creamy sauce.", + "Casseroles are typically made in a baking dish and have a variety of ingredients mixed together, including meat, vegetables, and sometimes pasta or rice.", + "A casserole is a type of oven-baked dish made with a variety of ingredients, including meat, vegetables, grains, and sauce.", + "A casserole is a dish that is typically made by layering ingredients in a baking dish and then baking them.", + "A casserole is a type of dish that is generally made up of a starch, a protein, and a sauce.", + "A casserole is a dish that is typically made by layering ingredients in a baking dish and then baking them together.", + "A casserole is a dish made from a variety of ingredients that are baked together in a single dish.", + "A casserole is a dish where the ingredients are layered in a baking dish and then baked.", + "." + ], + "cassette": [ + "A cassette is a plastic or metal case that contains one or more reels of tape.", + "A cassette is a case with two spools inside.", + "A cassette consists of two small spools, between which a length of magnetic tape is wound.", + "A cassette is a small, rectangular plastic case that holds a reel of magnetic tape.", + "A cassette is a small, rectangular box that contains a spool of magnetic tape.", + "A cassette looks like a small plastic or metal case with a spool of magnetic tape inside.", + "A cassette is a small, plastic case that holds a spool of magnetic tape.", + "A cassette is a small, portable plastic or metal case that holds a cassette tape.", + "A cassette is a small plastic or metal case that contains magnetic tape used for storing recorded sound, usually in an audio format.", + "A cassette looks like a small, portable tape deck." + ], + "cast": [ + "A cast is a type ofbrace that encases an injured body part to protect it from further injury.", + "A cast looks like a splint that is placed on a broken bone.", + "A cast looks like a white or pale blue hard plastic shell that is molded to fit the shape of the person's body.", + "A cast is a type of dressing that is used to support and protect a broken bone or injured body part.", + ">A cast is a hard, outer shell that covers and protects a broken bone or other injury.", + "When a bone is broken, the ends of the bone need to be held in place so that they can heal.", + "A cast is a rigid covering that is placed over a broken bone or injured body part to hold it in place.", + "Casts are made of hard, smooth materials such as fiberglass or plaster.", + "If you have ever broken a bone, you may have had to wear a cast.", + "A cast is a hard, airtight, mouthpiece-shaped shell that helps to heal a fracture or broken bone." + ], + "cat": [ + "A cat typically has fur, four legs, and a tail.", + "Cats are typically small, carnivorous mammals of the Felidae family.", + "A cat is a small, furry, carnivorous mammal.", + "A cat typically has four legs, a tail, fur, and whiskers.", + "A cat is a small, furry animal with a long tail.", + "Cats are typically small, carnivorous mammals of the Felidae family.", + "A cat has four legs, a long tail, and fur.", + "A cat has fur, four legs, two ears, and a tail.", + "Cats have four legs, a tail, and fur.", + "A cat typically has four legs, a tail, fur, and whiskers." + ], + "cauliflower": [ + "A cauliflower is a white or cream-colored vegetable that resembles a head of broccoli.", + "A cauliflower is a pale white, round, and slightly pyramid-shaped vegetable.", + "A cauliflower is a white or light green vegetable that resembles a small Brain.", + "A cauliflower is a white, leafy vegetable that resembles a small, round head of broccoli.", + "A cauliflower is a white or light green vegetable that resembles a head of broccoli.", + "A cauliflower is a vegetable that is white in color and has a firm, dense texture.", + "A cauliflower is a vegetable that is white in color and has the shape of a head of broccoli.", + "A cauliflower is a large white vegetable that resembles a head of broccoli.", + "A cauliflower is a vegetabe that is typically white in color and has a round, compact head with leaves wrapping around it.", + "A cauliflower is a white, round, leafy vegetable that resembles a head of broccoli." + ], + "cayenne (spice)": [ + "A cayenne pepper is a long, thin pepper that is usually red or orange.", + "Cayenne is a red powder that is made from grinding up dried cayenne peppers.", + "A cayenne is a range of chili peppers.", + "A cayenne pepper is a thin, red chili pepper that is typically used in powder form.", + "A cayenne is a long, thin, red pepper that is usually ground up and used as a spice.", + "Cayenne is a red powder that is made from grinding up dried cayenne peppers.", + "A cayenne is a long, thin, hot chili pepper used as a spice.", + "A cayenne is a flowering plant in the genus Capsicum, which also includes bell peppers, jalape\u00f1os, and chili peppers.", + "A cayenne is a red pepper that is typically ground into a powder.", + "A cayenne is a thin, red chili pepper that is typically used in powder form." + ], + "CD player": [ + "A CD player is a small, box-shaped electronics device that reads and plays audio CDs.", + "A CD player typically consists of a transport mechanism to read discs, a laser to read the disc information, a digital-to-analog converter (DAC) to convert the digital audio signal into an analog audio signal, and an amplifier.", + "A CD player is a small, portable device that reads CDs and plays back the music on them.", + "A CD player is a device that reads audio CDs and plays them back through speakers.", + "A CD player is a small, portable device that reads CDs and plays the music stored on them.", + "A CD player is a small, portable device that can be used to play CDs.", + "A CD player is a device that plays CDs.", + "A CD player is a device that can read and play CDs.", + "A CD player is a rectangular device with a small display screen.", + "A CD player is a small, rectangular device with a disc insertion tray on the top and control buttons on the front." + ], + "celery": [ + "A celery is a long, thin, green vegetable.", + "A celery is a long, thin, white vegetable with green leaves.", + "A celery typically has long, green, cylindrical stalks with leaves attached.", + "Celery has long, green leaves and a white stalk.", + "A celery is a long, thin, fibrous stalk with a greenish-white color.", + "A celery is a long, thin, green vegetable.", + "A celery is a long, thin, green vegetable with a white center.", + "A celery is a long, thin, green vegetable with a white flesh.", + "A celery is a long, thin vegetable that is usually green or white in color.", + "A celery is a vegetable that has a long, green stalk and leaves." + ], + "cellular telephone": [ + "A cellular telephone typically has a keypad for entering phone numbers and text messages, as well as a display screen where you can see who is calling and read text messages.", + "A cellular telephone typically has a rectangular housing with a display screen and physical buttons on the front, and a rechargeable battery and SIM card slot on the back.", + "A cellular telephone is a portable telephone that has many of the features of a traditional telephone, but it also has a wireless connection to a network of base stations.", + "Cellular telephones come in many different shapes and sizes, but most have a small, rectangular body with a touch screen on the front.", + "A cellular telephone is a portable phone that uses a cellular network to make and receive calls.", + "Cellular phones come in a wide variety of shapes and sizes.", + "A cellular telephone usually has a keypad with numbers and letters on it, and a small screen.", + "A cellular telephone has a keypad for inputting numbers and text, as well as a small screen that displays information.", + "A cellular telephone is typically small, portable, and has a keypad for entering phone numbers and other information.", + "Cellular telephones vary in size, shape, and color, but most have a screen, keypad, and speakers on the front, and a microphone on the back." + ], + "chain mail": [ + "A chain mail looks like a mesh made out of small metal rings.", + "Chain mail is made of small metal rings that are linked together.", + "A chain mail looks like a garment made of interlocking metal rings.", + "Chain mail consists of small metal rings that are connected together to form a mesh.", + "Chain mail is a type of armor made from interlocking metal rings.", + "A chain mail looks like a shirt made of interlocking metal rings.", + "A chain mail consists of a series of small metal rings that are linked together to form a mesh.", + "A chain mail looks like a suit of armor made out of small metal rings.", + "A chain mail looks like a piece of armor made from small metal rings that are linked together.", + "A chain mail looks like a metal shirt made of small interconnected rings." + ], + "chair": [ + "A chair is a furnishing that consists of a seat, a back, legs, and sometimes arm rests, for supporting the user's body.", + "Chairs are typically four-legged furniture pieces with a back that reclines at varying angles.", + "A chair has four legs and a back.", + "A chair typically has four legs, a back, and a seat.", + "A chair has a seat, four legs, and a back.", + "A chair typically has four legs, a back, and a seat.", + "A chair is a piece of furniture that has a seat, a back, and four legs.", + "A chair is a piece of furniture with a raised surface supported by legs, commonly used to seat a single person.", + "A chair typically has four legs, a backrest, and a seat.", + "A chair is an object that has four legs, a back, and a seat." + ], + "chaise longue": [ + "A chaise longue is a piece of furniture that can be used as a chair or a bed.", + "A chaise longue is a piece of furniture that looks like a chair, but is much longer so that a person can stretch out their legs.", + "A chaise longue is a long, upholstered sofa that is typically used for reclining.", + "A chaise longue is a long, low couch with a backrest at one end.", + "A chaise longue is a piece of furniture that looks like a chair, but with a long seat that goes all the way to the floor.", + "A chaise longue is a long, upholstered sofa-like seat with a backrest that can be adjusted into different positions.", + "A chaise lounger is a piece of furniture that looks like a chair, but with a long seat that extends all the way to the legs, allowing a person to recline.", + "A chaise longue is a type of chair that is designed for people to recline on.", + "A chaise longue is a long chair that has a part that sticks out for you to put your feet on.", + "A chaise longue is a type of chair that is designed for people to lie down on." + ], + "chalice": [ + "A chalice is a cup that is often used in religious ceremonies.", + "A chalice is a cup that is used to hold wine during Christian mass.", + "A chalice is a cup that is used to hold holy water.", + ".", + "A chalice is a cup that is used to hold sacramental wine during a Christian ceremony.", + "A chalice is a type of cup that is often used in religious ceremonies.", + "A chalice typically has a bowl that is attached to a stem.", + "Typically, a chalice is a goblet-shaped cup with a stem.", + "A chalice is a bowl-shaped cup with a stem, used for drinking wine or other alcoholic beverages during Christian religious ceremonies.", + "A chalice is a drinking cup with a bowl at the top and a stem at the bottom." + ], + "chandelier": [ + "A chandelier is a light fixture that hangs from the ceiling.", + "A chandelier looks like a large, branching candelabrum with many lightbulbs.", + "A chandelier is a decorative ceiling light fixture.", + "A chandelier is a large, ornate light fixture that is hung from the ceiling.", + "A chandelier is usually a decorative light fixture suspended from a ceiling, often with multiple branches for holding candles or electric lights.", + "A chandelier is a decorative ceiling-mounted light fixture with multiple lights.", + "A chandelier is a light fixtures suspended from the ceiling, usually with branched supports for a number of lightbulbs or candles.", + "A chandelier is a decorative light fixture that is suspended from the ceiling.", + "A chandelier is a decorative ceiling fixture that typically has multiple arms extending from a central body.", + "A chandelier is a decorative ceiling-mounted light fixture with multiple lights that is often ornate and made of crystal." + ], + "chap": [ + "A chap is a British word for a man or a boy.", + "A chap is a man or a boy.", + "A chap is a British term for a man.", + "He looks like a young man, with a clean-shaven face and short, dark hair.", + "A chap is a man who is well-dressed and well-spoken.", + "A chap is a well-dressed man, usually with a hat and cane.", + "A chap is normally a man who is well dressed and groomed.", + "A chap is a male person.", + "There is no definitive answer to this question, as the word \"chap\" can be used to describe a wide range of different types of people.", + "A chap is a traditional British word for a man." + ], + "checkbook": [ + "A checkbook is a small book containing personal checks and information about the account to which they are linked.", + "A checkbook looks like a small, bound book with pages that have lines and places to record information relating to the writing of checks.", + "A checkbook looks like a small rectangular book with a cardboard cover.", + "A checkbook contains a check register, which is used to track the checks that have been written, and the balance of the checkbook.", + "A checkbook looks like a small notebook with a money pocket in the back.", + "A checkbook typically includes a check register, which is used to track the checks that have been written.", + "A checkbook typically has a cover and is small enough to fit in a purse or pocket.", + "A checkbook has a bank's name and address printed on the front, and usually has a plastic cover.", + "A checkbook typically contains a check register, which is used to track your checking account balance, as well as space to write checks.", + "A checkbook looks like a small booklet with a bank's name and logo on the front." + ], + "checkerboard": [ + "A checkerboard has a black and white checkered pattern.", + "A checkerboard is a square board with 64 squares arranged in an 8\u00d78 grid.", + "A checkerboard looks like a board with 64 squares, arranged in 8 rows and 8 columns.", + "A checkerboard is an 8x8 grid that alternates between dark and light squares.", + "A checkerboard has a grid of black and white squares.", + "A checkerboard is a chessboard that has 64 black and white squares arranged in an eight-by-eight grid.", + "A checkerboard is a board with 64 squares, arranged in an eight-by-eight grid.", + "A checkerboard consists of an 8x8 grid of squares, alternating between two colors.", + "A checkerboard is a board with 64 squares in an 8-by-8 grid.", + "A checkerboard is a chessboard with 64 squares arranged in an eight-by-eight grid." + ], + "cherry": [ + "A cherry is a small, round, red fruit with a hard seed in the center.", + "Cherries are small, round, and red with a green stem.", + "Cherries are small, round fruits that range in color from red to black.", + "A cherry is a small, round fruit that is typically red, but can also be yellow, orange, or purple.", + "A cherry is a small, round fruit with a hard pit in the center.", + "A cherry is a small, round fruit that is typically red, although some varieties are dark purple or yellow.", + "A cherry is a small, round fruit that is typically red, although it can also be dark purple or black.", + "A cherry typically has a dark red color, is around the same size as a grape, and has a small stem attached to the top.", + "A cherry is a small, dark red fruit with a hard pit in the center.", + "A cherry is a small fruit with a hard seed in the middle." + ], + "chessboard": [ + "A chessboard typically has 64 black and white squares in an 8x8 grid.", + "A chessboard is an 8x8 square grid, typically marked with alternating dark and light squares.", + "A chessboard is an 8 by 8 grid, typically with alternating colors.", + "A chessboard is a board with 64 squares arranged in an 8x8 grid.", + "A chessboard typically contains 64 squares arranged in an 8x8 grid.", + "A chessboard has 64 squares arranged in an 8-by-8 grid.", + "A chessboard looks like an 8 by 8 grid with alternating black and white squares.", + "A chessboard is a board of 64 squares, in an 8 by 8 grid.", + "A chessboard is a board with 64 squares arranged in an 8\u00d78 grid.", + "A chessboard is a square tabletop with 64 squares arranged in an eight-by-eight grid." + ], + "chicken (animal)": [ + "The animal known as chicken is a domesticated fowl, a subspecies of the red junglefowl.", + "A chicken has a body covered in feathers.", + "A chicken is a white, brown, or black bird with a long neck and short legs.", + "A chicken is a small domesticated bird that is typically white with a red wattle and a yellow beak.", + "Chickens are small, winged animals with two legs.", + "A chicken looks like a small, domesticated bird with wings.", + "Chickens have two wattles - these are long, fleshy, thin lobes of skin that hang down from the lower side of a chicken's head.", + "A chicken is a bird with two legs.", + "Chickens are small, domesticated birds that typically have two wattles - fleshy, pendulous skin growths - hanging from the lower side of their beak.", + "A chicken is a domesticated fowl, a subspecies of the red junglefowl." + ], + "chickpea": [ + "A chickpea is a small, round, beige-colored legume.", + "A chickpea is a small, round, beige-colored legume.", + "A chickpea is a small, round, cream-colored bean.", + "A chickpea is a small, round, tan-colored bean that is popular in many dishes from around the world.", + "Chickpeas are small, nutty-tasting, tan-colored bean.", + "A chickpea is a small, round, tan-colored legume.", + "A chickpea is a small, round, tan-colored bean that is popular in Middle Eastern, Indian, and Mediterranean cuisine.", + "A chickpea is a small, round, dark green legume that is a member of the bean family.", + "A chickpea is a small, round, greenish-brown seed.", + "A chickpea is a small, round, tan-colored bean that is commonly used in Mediterranean cuisine." + ], + "chili (vegetable)": [ + "A chili (vegetable) typically has a long, slightly curved shape and a deep green color.", + "A chili is a small, red, hot pepper.", + "A chili is a small, hot pepper that is used to add spice to food.", + "A chili is a small, hot, red pepper.", + "A chili is a long, thin, red pepper that is used in many Mexican dishes.", + "A chili (vegetable) usually resembles a small, red pepper.", + "A chili pepper is a type of flowering plant in the nightshade family, Solanaceae.", + "A chili pepper is a small, hot, spicy fruit that is used to add flavor to food.", + "A chili is a small, hot pepper of the Capsicum genus.", + "A chili is a small, hot, red pepper." + ], + "chime": [ + "A chime is a type of percussion instrument.", + "A chime is traditionally a tube or set of tubes of graduated length, struck with a mallet to produce a musical sound.", + "A chime is a metal rod with a metal ball at the end.", + "A chime is a decorative item that is hung on the outside of a door or window.", + "A chime is a thin metal bar that is suspended from a frame.", + "A chime is a musical instrument that consists of a set of tuned metal tubes of different lengths that are struck with a mallet.", + "A chime is a device that produces a sound when struck, usually by a lever or mouse.", + "A chime is a device that makes a sound when moved or struck.", + "A chime is a type of wind instrument that consists of a set of tuned metal tubes of different lengths that are suspended from a frame.", + "A chime is a small, metal rod with a flattened top that is suspended by a string." + ], + "chinaware": [ + "Chinaware typically has a white glaze and a smooth surface.", + " Chinaware typically refers to a type of white clay that is used to make pottery and porcelain.", + "A chinaware is a type of dishware that is made out of a white clay called porcelain.", + "Chinaware is a type of ceramic that is glazed and fired at a high temperature.", + "China or chinaware is a type of white or translucent porcelain or earthenware.", + "A chinaware is a type of ceramic ware that is glazed and decorated.", + "A chinaware is a type of ceramic ware that is made in China.", + "A chinaware is a type of dishware that is made from a white clay called kaolin.", + " Chinaware is a type of dishware that is made from a white clay called kaolin.", + "A chinaware is a type of porcelain that is made in China." + ], + "crisp (potato chip)": [ + "A crisp is typically a thin, fried potato chip.", + "A crisp is a thin slice of potato that has been fried or baked until it is crunchy.", + "A crisp (potato chip) typically looks like a thin, fried slice of potato that is crispy and salty.", + "A crisp is an thin slice of potato that has been deep fried or baked until it is hard and crunchy.", + "A crisp is a thin, fried slice of potato.", + "A crisp (potato chip) is an thin, crispy slice of potato that has been deep-fried or baked.", + "A crisp is typically a thin slice of potato that has been deep-fried or baked until it is crunchy.", + "A crisp is a thin slice of potato that has been deep-fried or baked until it is golden brown and crispy.", + "A crisp is a thin slice of potato that has been fried or baked until it is crunchy.", + "A crisp is a thin, deep-fried slice of potato." + ], + "poker chip": [ + "A poker chip is traditionally a small, round disc made of clay, plastic, or metal, with a denomination or insignia on one side and a smooth area on the other for stacking.", + "A poker chip is typically a small, round piece of clay or plastic with a number or design printed on it.", + "A poker chip is a small disc with a denominations, used instead of cash in some gambling games.", + "A poker chip is normally a small disk-shaped piece of plastic or ceramic that is used as a marker in gambling games.", + "Most poker chips are round and have a smooth surface.", + "A poker chip usually has a diameter of about 39 mm (1.", + "A poker chip is typically a small, round, flat piece of plastic or clay that is used as a marker in poker games.", + "A poker chip is a small, round disc that can be made from a variety of materials, including plastic, clay, or metal.", + "A poker chip is a small, round disc that is used as a token to represent money in a game of poker.", + "A poker chip is typically small, round, and made of clay or plastic." + ], + "chocolate bar": [ + "A chocolate bar generally looks like a rectangular block.", + "A chocolate bar typically looks like a rectangle or square shape that is wrapped in foil or paper.", + "A chocolate bar is typically a thin, rectangular block of chocolate that is wrapped in foil or paper.", + "A chocolate bar is typically a rectangular or square-shaped bar made of chocolate.", + "A chocolate bar typically has a rectangular shape and is composed of chocolate mixed with other ingredients such as nuts or nougat.", + "A chocolate bar is typically a rectangular or square-shaped block of chocolate that is wrapped in foil or paper.", + "A chocolate bar typically has a rectangular or square shape and is wrapped in foil or paper.", + "A chocolate bar is a rectangular or square block of chocolate that is usually packaged in a brightly colored wrapper.", + "A chocolate bar is typically a rectangular or square-shaped block of chocolate that is wrapped in paper or foil.", + "A chocolate bar typically looks like a rectangular slab of chocolate that is wrapped in foil or paper." + ], + "chocolate cake": [ + "A chocolate cake is a cake containing chocolate.", + "A chocolate cake resembles a regular cake, except it is generally darker in color due to the chocolate.", + "A chocolate cake looks like a cake with brown frosting.", + "A chocolate cake is a cake that is made with chocolate as one of the main ingredients.", + "A chocolate cake typically has a dark brown or black color, and is often decorated with chocolate chips, shavings, or frosting.", + "A chocolate cake is typically a dark brown orblack cake, with chocolate icing or filling.", + "Chocolate cake is usually a moist, rich cake with layers of chocolate ganache or frosting.", + "A chocolate cake looks like a cake made with chocolate-flavored ingredients, including chocolate flavoring in the batter, chocolate chips or chocolate shavings on top, and sometimes chocolate frosting.", + "A chocolate cake usually has chocolate frosting and is often decorated with chocolate shavings on top.", + "A chocolate cake is a cake that is typically made with chocolate." + ], + "chocolate milk": [ + "Chocolate milk is a dark brown color.", + "A chocolate milk is a brown liquid that has a sweet chocolate flavor.", + "A chocolate milk is a drink made by mixing chocolate syrup or chocolate powder with milk.", + "A chocolate milk looks like milk that has chocolate in it.", + ".", + "A chocolate milk is a brown liquid with a chocolate flavor.", + "A chocolate milk looks like a cold glass of milk with chocolate in it.", + "Chocolate milk is a dark brown color and is slightly thicker than regular milk.", + "A chocolate milk has a dark brown color and is usually served cold.", + "A chocolate milk typically has a dark brown color and is opaque." + ], + "chocolate mousse": [ + "A chocolate mousse is a light, airy dessert made with whipped egg whites, chocolate, and cream.", + "Chocolate mousse is a chocolate-flavored dessert mousse.", + "A chocolate mousse is a light, airy custard made with chocolate, egg whites, and cream.", + "A chocolate mousse is a light, airy dessert made from chocolate and whipped cream.", + "Chocolate mousse is a fluffy, airy dessert made from whipped chocolate and cream.", + "A chocolate mousse is a light, airy dessert made from whipped chocolate and cream.", + "A chocolate mousse is typically a chocolate-flavored custard or pudding that is light and airy in texture.", + "A chocolate mousse is a light, airy, and chocolatey dessert.", + "A chocolate mousse is a smooth, light, and airy dessert made with chocolate, egg whites, and cream.", + "A chocolate mousse is a chocolate-flavored dessert mousse." + ], + "choker": [ + "A choker is a necklace that is worn close to the neck.", + "A choker is a close-fitting necklace that sits high up on the neck.", + "A choker is a type of necklace that sits close to the neck.", + "A choker is a necklace that fits tightly around the neck.", + "A choker is a necklace that sits close to the neck.", + "A choker looks like a necklace that sits closely around the neck.", + "A choker is a necklace that sits close to the neck.", + "A choker is a type of necklace that fits snugly around the neck.", + "A choker is a close-fitting necklace that sits high on the neck.", + "A choker looks like a necklace that sits close to the neck." + ], + "chopping board": [ + "A chopping board is a board made from wood or plastic that is used to prepare food.", + "A chopping board is a thick, flat piece of wood or plastic that is used for cutting food.", + "A chopping board is a rectangular or oval-shaped, flat cutting surface made of wood, plastic, marble, or ceramic.", + "A chopping board is typically a wooden or plastic board on which food can be chopped.", + "A chopping board is a flat surface on which food can be chopped.", + "A chopping board is typically a rectangular or square piece of wood or plastic that is used for cutting food.", + "A chopping board is a flat surface on which food can be cut.", + "A cutting board is usually a wooden or plastic board on which to place food while chopping it.", + "A chopping board is typically a flat surface made of wood, plastic, or stone, used for chopping food.", + "A large wooden or plastic board on which food can be chopped." + ], + "chopstick": [ + "A chopstick is a thin, narrow piece of wood or bamboo that is used as a utensil for eating.", + "A chopstick is a long, thin piece of wood, bamboo, or plastic used as a utensil for eating.", + "A chopstick is a long, thin stick that is used as a utensil for eating.", + "A chopstick is a thin, wooden or bamboo stick that is used as a utensil to pick up food.", + "A chopstick typically looks like a thin, tapered wooden or bamboo stick that is used as an eating utensil.", + "A chopstick is a thin, long, wooden or bamboo stick used as an eating utensil.", + "A chopstick is a small, thin stick that is used as a utensil for eating food.", + "A chopstick is a long, thin stick that is used as a utensil for eating.", + "A chopstick looks like a stick that is used for eating food.", + "A chopstick is a thin, cylindrical piece of wood, bamboo, or plastic." + ], + "Christmas tree": [ + "A Christmas tree is traditionally a pine tree that is cut down and brought into the home to be decorated with lights and ornaments.", + "A Christmas tree is typically a conifer that is decorated with lights, tinsel, and ornaments.", + "A Christmas tree is traditionally a spruce, fir, or pine tree that is decorated with lights and ornaments.", + "A Christmas tree is a fresh evergreen tree that is cut and brought into the home a few weeks before Christmas.", + "A Christmas tree is usually evergreen, often a conifer such as a spruce, pine or fir, or an artificial tree of similar appearance, related to the celebration of Christmas.", + "A Christmas tree is a tall, evergreen tree that is decorated with lights and other ornamental decorations during the Christmas holidays.", + "A Christmas tree looks like an evergreen tree that is typically decorated with lights and ornaments.", + "A Christmas tree is a tall, evergreen tree that is decorated with lights and ornaments during the Christmas holiday season.", + "A Christmas tree is a tall, evergreen tree, decorated with lights and ornaments.", + "A Christmas tree is typically a pine tree that is decorated with lights and ornaments." + ], + "slide": [ + "A slide is a piece of paper that is placed on a projector.", + "A slide generally contains images, text, and transitions between different sections of the slide.", + "A slide is a thin piece of material, usually made of glass, that is placed on top of a larger piece of material, such as a slide projector.", + "A slide is a thin piece of cardboard or plastic, sometimes with a picture or design on it, that you put into a slide projector to project onto a screen or wall.", + "A slide is a piece of cardboard, typically mounted on a wall or screen, onto which a photograph or other image is placed.", + "A slide typically contains text, images, or other content that is presented to an audience on a projection screen.", + "A slide consists of a glass plate with a photographic image or specimen on it, which is placed on a projector to be projected onto a screen.", + "A slide looks like a picture or piece of text that is projected onto a screen.", + "A slide typically contains a title at the top, one or more content areas in the middle, and a footer at the bottom.", + "A slide looks like a photograph that has been mounted on a piece of cardboard." + ], + "cider": [ + "A cider is a light-colored alcoholic beverage made from fermented apples.", + ".", + "A cider is a type of alcohol that is made from apples.", + "A cider is a type of alcohol that is made from apples.", + "A cider is a yellowish-brown color and is slightly opaque.", + "Cider is a type of alcohol that is made from fermented apples.", + "A cider is a type of alcohol that is made from fermented apples.", + "A cider is a light-brown to amber-colored beverage that is made by fermenting the juice of apples.", + "Cider is a cloudy, light brown drink.", + "A cider is a light-colored alcoholic beverage made from fermented apples." + ], + "cigar box": [ + ".", + "A cigar box is a small, rectangular box made of wood or cardboard.", + "A cigar box is a box that cigars come in.", + "A cigar box is a box that is used to store cigars.", + "A cigar box is a rectangular box usually made out of wood, with a hinged lid.", + "A cigar box has a wooden body with a hinged lid.", + "A cigar box typically looks like a small, rectangular wooden box with a hinged lid.", + "A cigar box is typically a small, rectangular box made of wood or cardboard.", + "A cigar box is a small wooden box that is used to hold cigars.", + "Cigar boxes are generally rectangular in shape and have a hinged lid." + ], + "cigarette": [ + "A cigarette looks like a small, thin cylinder made of white paper.", + "A cigarette is a thin, cylindrical rod of tobacco that is smoked.", + "A cigarette is a thin, rolled cylinder of paper containing a small amount of dried tobacco leaves.", + "Cigarettes are long, thin, and cylindrical.", + "A cigarette is a thin, white, cylindrical tube with a brown filter at one end.", + "A cigarette is a small, thin stick of dried and shredded tobacco leaves.", + "A cigarette is a thin cylindrical roll of dried and shredded tobacco leaves that are wrapped in a thin paper.", + "A cigarette is a thin, cylindrical rod made of rolled up paper.", + "A cigarette is a small, thin, cylindrical piece of tobacco rolled in paper for smoking.", + "A cigarette is generally about the size of a index finger, and is made up of a rolled up piece of paper that contains tobacco." + ], + "cigarette case": [ + "A typical cigarette case is a small, rectangular metal box with a hinged lid.", + "A cigarette case is a small, flat, hinged case made of metal or other durable material.", + "A cigarette case is a small, rectangular case that is used to hold cigarettes.", + "A typical cigarette case is a small, flattened container made of metal or plastic, designed to hold cigarettes.", + "A cigarette case is a small, metal, rectangular case that is used to hold cigarettes.", + "A cigarette case is usually made out of metal and has a design on the front.", + "A cigarette case is a small, flat, rectangular case that is used to hold cigarettes.", + "A cigarette case is a small, narrow box that is used to hold cigarettes.", + "A cigarette case is typically a small, rectangular case made of metal or other durable material.", + "A cigarette case is typically a small, rectangular metal case designed to hold cigarettes." + ], + "cistern": [ + "A cistern is a large, vertical chamber that is used to hold water.", + "A cistern is a large, watertight container that is used to store water.", + "A cistern is a large tank of water, often underground, that is used to store water.", + "A cistern is a container that stores water.", + "A cistern is a large, usually cylindrical container that holds water.", + "A cistern has vertical sides and is either circular or rectangular in shape.", + "A cistern is a large container that holds water.", + "A cistern is a waterproof container that stores water.", + "A cistern looks like a large metal or concrete container that is underground and used to store water.", + "A cistern is an underground structure that is used to collect, store, and distribute water." + ], + "clarinet": [ + "A clarinet is a long, thin, curved wind instrument with a mouthpiece and pads that open and close the holes along the body.", + "A clarinet is a long, thin, black woodwind instrument with a curved mouthpiece.", + "A clarinet is a woodwind instrument with a single-reed mouthpiece.", + "A clarinet is a woodwind instrument with a single-reed mouthpiece.", + "A clarinet has a long, narrow body with a small mouthpiece at one end and a flared bell at the other.", + "A clarinet is a woodwind instrument with a single-reed mouthpiece.", + "The clarinet is a woodwind instrument with a cylindrical shape.", + "A clarinet is a cylindrical woodwind instrument with a single-reed mouthpiece.", + "The clarinet is a long, thin woodwind instrument with a single-reed mouthpiece.", + "A clarinet is a woodwind instrument with a single-reed mouthpiece." + ], + "clasp": [ + "Most clasps are designed to fold over and snap shut.", + "A clasp is a device used to fasten two objects together.", + "A clasp is a type of closure that is used to fasten two pieces of fabric together.", + "A clasp is a short, thick piece of metal with a hole in the middle that is used to fasten a bracelet or necklace.", + "A clasp is a decorative fastener used to secure two pieces of fabric together.", + "A clasp is a device used for fastening two things together.", + "A clasp is a metal fastener used to join two ends of a piece of jewelry or other item.", + "A clasp is a fastener or mechanism used to hold two objects together.", + "A clasp is a fastener used to hold two ends of a piece of jewelry together.", + "A clasp is a device used to fasten two pieces of material together." + ], + "cleansing agent": [ + "A cleansing agent is usually a clear, liquid solution.", + "A cleansing agent looks like soap.", + "A cleansing agent can be a solid, liquid, or gas.", + ", smells like and how it feelsA cleansing agent looks like a white powder, smells like bleach, and feels like a coarse powder.", + "A cleansing agent is typically a liquid with a soapy consistency.", + "Cleansing agents often take the form of a liquid, although they can also be in a solid or gel form.", + ")A cleansing agent can come in different forms depending on its intended use.", + " under a microscopeUnder a microscope, a cleansing agent would look like a long, thin strand with a globular head.", + "A cleansing agent usually takes the form of a liquid, gel, or foam.", + "A cleansing agent is usually a liquid, gel, or bar soap that is used to remove dirt, oils, and other contaminants from the skin." + ], + "cleat (for securing rope)": [ + "A cleat for securing rope typically has two horns or arms, which the rope is wrapped around.", + "A cleat is a metal or plastic fitting with two horns that is used to secure a rope.", + "A typical cleat for securing rope has two horns, or arms, with one horn longer than the other.", + "A cleat is a metal or plastic U-shaped fastening device with two or more arms, used to secure a rope.", + "A cleat is a metal or plastic fitting with two horns that is used to secure a rope.", + "A cleat is a device used to secure rope.", + "A cleat is typically a piece of metal with two horns that protrude from a flat base.", + "A cleat is a T-shaped fitting with two horizontal arms, used to secure a rope.", + "A cleat is a metal or plastic horn-shaped device with two flanges, used to secure a rope.", + "A cleat is a piece of metal or wood with two horns or jaws that open like a V." + ], + "clementine": [ + "A clementine is small citrus fruit that is similar in appearance to a mandarin orange.", + "A clementine is a small citrus fruit that is similar in appearance to a mandarin orange.", + "A clementine is a small, citrus fruit that is similar in appearance to a mandarin orange.", + "A clementine is a small citrus fruit that is similar in appearance to a mandarin orange.", + "A clementine is a small citrus fruit that is similar in appearance to a small orange.", + "A clementine is a small citrus fruit that is similar in appearance to a tangerine.", + "A clementine is a type of small orange that has a smooth, easy-to-peel skin.", + "A clementine is a small, spherical citrus fruit with a smooth, easily-peeled skin.", + "A clementine is a small, orange-colored citrus fruit.", + "A clementine is a small, rounded citrus fruit with a thin, slightly bumpy skin that is easy to peel." + ], + "clip": [ + "A clip looks like a small, rectangular piece of metal with a curved end.", + "A clip is a small, thin, metal object with a sharp point at one end and a serrated edge at the other.", + "A clip is a small, thin piece of metal with a sharp point at one end and a flat edge at the other.", + "A clip is like a small paper or metal fastener that is used to hold something together.", + "A clip is a small, thin piece of metal with a sharp point at one end and a round base at the other.", + "A clip is a short piece of film or video that is typically used to promote a movie or tv show.", + "A clip is a short section of audio or video.", + "A clip looks like a small metal or plastic device with a pointed end that is used to fasten things together.", + "A clip is a small, thin piece of metal or plastic with sharp ends that are used to hold papers or fabric together.", + "A clip looks like a short video or film." + ], + "clipboard": [ + "A clipboard is a rectangular piece of wood or plastic with a metal clip at the top for holding paper in place.", + "A clipboard is a small, rigid piece of cardboard or plastic with a metal clip at the top for attaching papers.", + "A clipboard is a small, rigid board with a handle at the top.", + "A clipboard is a rectangular board with a clip at the top for holding paper in place.", + "A clipboard typically has a flat writing surface with a lip at the bottom, and a handle at the top.", + "A clipboard is a flat, rectangular piece of wood or plastic with a metal clip on one end.", + "A clipboard is typically a thin, rectangular piece of wood or plastic that holds paper in place.", + "A clipboard is a flat, rigid sheet of material, typically cardboard, on which paper or other materials may be placed for writing or drawing.", + "A clipboard is a board with a clip at the top for holding paper.", + "A clipboard typically has a hard back and a short plastic or metal clip at the top for attaching paper." + ], + "clippers (for plants)": [ + "A clipper is a tool used to trim plants.", + "A clipper for plants usually has a curved blade and is used for cutting plant stems.", + "A clipper is a small gardening tool used for trimming and shaping plants.", + "A clipper for plants is a small handheld tool with a curved blade used to trim leaves and stems.", + "A clipper is a small tool used for trimming plants.", + "A clipper (for plants) is a small handheld gardening tool used to trim plants and small branches.", + "Clippers look like small scissors with curved blades.", + "A plant clipper is a small tool used to trim plants.", + "A clipper is a device used to cut plants.", + " Clippers are used to cut plant stems and are designed to look like small scissors." + ], + "cloak": [ + "A cloak is a type of loose garment that is worn over other clothes and typically has a hood.", + "A cloak is a loose, flowing outer garment with a hood.", + "A cloak typically looks like a long, flowing piece of fabric that is worn over the shoulders.", + "A cloak is a garment with a large hood that is worn over other clothes.", + "A cloak is a long, loose piece of clothing that is worn over other clothes.", + "A cloak is a piece of clothing that is worn over the shoulders.", + "A cloak typically looks like a long, flowing piece of fabric that drapes over the shoulders.", + "A cloak is a type of loose, flowing garment that is typically worn over other clothing.", + "A cloak is typically a long, flowing garment that is worn over other clothing.", + "A cloak is a long, loose garment with a hood." + ], + "clock": [ + "A clock typically consists of a round face with numbers representing the hours Radiating out from the center are usually either hour and minute hands or various stationary indicators mark off the minutes.", + "There are many types of clocks, but a traditional clock has a round face with markings for the hours, minutes, and sometimes seconds.", + "\nA clock usually has a circular face with numbers around the edge representing the hours, and sometimes minutes and seconds too.", + "A clock typically has a face with a numeric display of hours, minutes, and sometimes seconds.", + "A clock looks like a round object with numbers around the outside and two hands, a short one and a long one, in the middle.", + "A clock has a face with numbers around the edge.", + "A clock is typically a round shape with a face that has numbers representing the hour.", + "A clock has a face with a dial and hands.", + "A clock is a device that tells time.", + "A clock is typically a metal or plastic disc with a hands that indicate the time." + ], + "clock tower": [ + "A clock tower is a tall structure that has a clock on each side.", + "A clock tower is a tower that has a clock on it.", + "A clock tower is a tower that has a clock on it.", + "A clock tower is a tall structure, usually with a pyramid- or cone-shaped roof, that houses a clock.", + "A clock tower is a tower that has a clock on it.", + "A clock tower is a tall tower that has a clock on each side.", + "A clock tower is a tall structure with a clock face on each side.", + "A clock tower is an elevated structure that houses a clock.", + "A clock tower is a structure that houses a clock and is used to keep time.", + "A clock tower is a tall structure that has a clock on each side." + ], + "clothes hamper": [ + "A clothes hamper typically looks like a lidded basket or container, often made of wicker, plastic, or metal, used for storing dirty laundry.", + "A clothes hamper is a large container, often made of woven plastic, in which dirty laundry is stored.", + "A clothes hamper is a container that is used to store dirty clothes until they can be washed.", + "A clothes hamper is a tall, cylindrical container made of a breathable fabric such as canvas.", + "A clothes hamper is a container for dirty or soiled clothes.", + "A hamper is generally a tall, cylindrical basket with a lid.", + "Most clothes hampers are large, round baskets that are made out of wicker or another type of sturdy material.", + "A clothes hamper is a basket, usually made of wicker, wire, or plastic, that is used to store dirty clothes until they are laundered.", + "A clothes hamper is a covered container, often made of wicker, basketry, or wire, for storing dirty clothes until they are laundered.", + "A clothes hamper is typically a tall, rectangular container with a lid and handles." + ], + "clothespin": [ + "A clothespin is a small, wooden or plastic device used to fasten clothes to a clothesline.", + "A clothespin is a small, wooden or plastic pin with two metal springs.", + "A clothespin is a thin, rectangular object made of wood or plastic.", + "A clothespin is a small clip designed to be used for fastening clothes.", + "A clothespin is typically a small, wooden or plastic pin with two spring-loaded arms that open when the pin is pressed.", + "A clothespin is a small, wooden or plastic pin with a spring in the middle, used to fasten clothes to a line or clotheshorse.", + "A clothespin is a wooden or plastic peg with a spring in the middle that is used to hang clothes on a clothesline.", + "A clothespin is a small, thin piece of wood with two metal springs on one end.", + "A clothespin is a small, wooden or plastic clip that is used to fasten clothes to a clothesline.", + "A clothespin is typically a wooden or plastic peg, with a spring in the middle, that is used to fasten clothing to a clothesline." + ], + "clutch bag": [ + "A clutch bag is a small handbag that is typically rectangular in shape and has no handles or straps.", + "A clutch bag is a small bag that typically has a strap or handle.", + "A clutch bag is a small handbag without a handle or strap.", + "A clutch bag is typically a small, rectangular bag that does not have a strap and is meant to be carried by hand.", + "A clutch bag is a small handbag without a handle or strap.", + "A clutch bag is a purse that typically doesn't have a strap, and is meant to be carried in your hand.", + "A clutch bag is a small handbag with no handles or straps.", + "A clutch bag is a small bag that is typically carried in the hand.", + "A clutch bag is a type of women's handbag that is typically small in size and does not have a handle or strap.", + "A small purse typically carried in the hand or under the arm." + ], + "coaster": [ + "A coaster looks like a circle with a hole in the middle.", + "A coaster is a round piece of paper or cardboard with a design on it.", + "A coaster is a small, round disk made of wood, metal, or plastic.", + "A coaster is a small, round piece of cardboard or plastic that is placed under a beverage to protect the surface underneath.", + "A coaster is a flat disc that is placed on top of a beverage to protect the surface beneath it.", + "A coaster is a small, round disk that is placed under a glass to prevent the glass from leaving a water ring on the table.", + "A coaster typically has a round or rectangular shape and is made of cardboard, paper, or plastic.", + "A typical coaster has a circular or oval shape and is made of wood or plastic.", + "A coaster is a small disc that is placed under a drink to prevent the drink from leaving a mark on a surface.", + "A coaster typically has a circular or oval shape and is made of wood, metal, or plastic." + ], + "coat": [ + "A coat looks like a piece of clothing that covers the upper body and is typically worn during colder weather.", + "A coat is typically a piece of clothing worn on top of other clothes to keep a person warm.", + "A coat is typically a long piece of clothing that is worn over other clothes.", + "A coat is a piece of clothing that covers the upper body and neck.", + "A coat is a piece of clothing that is worn over other clothes.", + "A coat is a piece of clothing typically worn over other clothes.", + "A coat is a piece of clothing that is worn over other clothing.", + "A coat is a loose fitting piece of clothing that is worn over other clothing.", + "A coat looks like a piece of clothing that covers the upper body and arms.", + "A coat is typically a piece of clothing that is worn over other clothes." + ], + "coat hanger": [ + "A coat hanger is a thin metal or plastic rod with a curved top and a hook on one end, used for hanging coats, shirts, and other clothing.", + "A coat hanger is typically made of metal or plastic and has a hook at the top to hang clothes on.", + "Coat hangers are usually made of metal or plastic and have a hook on one end to hang clothes on.", + "A coat hanger is typically a thin piece of wire or plastic with hooks on the end.", + "A metal wire hanger that is bent into the shape of a hook, with a small hook at the top.", + "A coat hanger is a thin piece of wood or metal with a hook at the top, used for hanging coats, shirts, and other clothes in a closet.", + "A coat hanger looks like a piece of wire that has been bent into a loop with two hooks on either side.", + "A coat hanger is a thin, metal rod with a curved top and a small hook at the end.", + "A coat hanger typically has a long, thin metal rod with a hook on one end and a small rounded base on the other.", + "A coat hanger is a slender piece of metal with a hook at one end and a small notch at the other." + ], + "coatrack": [ + "A coatrack is a piece of furniture that is used to hang coats, hats, and other outerwear.", + "A coatrack typically consists of a metal or wooden frame with hooks mounted on it.", + "A coatrack is a piece of furniture with hooks that are used to hang coats and other outerwear.", + "A coatrack typically has a number of hooks that are mounted on a wall or door.", + "A coatrack typically consists of a metal or wooden frame with pegs or hooks on which to hang coats.", + "A coatrack is a piece of furniture that is used to hang coats, hats, and other outerwear.", + "A coatrack is a piece of furniture used to store coats and other outerwear.", + "A coatrack is a piece of furniture that has hooks on it for hanging coats.", + "A coatrack is a piece of furniture on which people can hang coats.", + "A coat rack typically consists of a metal or wood frame with hooks attached to it." + ], + "cock": [ + "A cock is a male sexual organ.", + "A cock is a male sexual organ.", + "A cock is a male reproductive organ that is used to urinate and to transfer sperm during sexual intercourse.", + "A cock is a male sexual organ.", + "A cock, or penis, is typically a long, cylindrical shape with a slightly bulbous head.", + "A cock is a male genital organ.", + "A cock is a male sexual organ.", + "A cock is typically red and scaly, with a small head and a long shaft.", + "A cock is a male sexual organ.", + "A cock is a male chicken." + ], + "cockroach": [ + "A cockroach is a small, brown, winged insect that is closely related to the termite.", + "A cockroach has a flattened body, six legs, two antennae, and wings.", + "A cockroach is a small, brown insect that has long legs and antennae.", + "A cockroach is a small, dark brown or black insect that has a flat body and long, thin legs.", + "A cockroach is a small, dark brown or black insect that has a flat body and long, thin legs.", + "A cockroach is about 1 to 2 inches long.", + "Most cockroaches are dark brown or black, but some species are lighter.", + "A cockroach is a small, dark, winged insect that is often considered a pest.", + "A cockroach generally has a flattened body, long antennae, and is a dark brown or black color.", + "A cockroach is a small, dark brown or black insect." + ], + "cocoa (beverage)": [ + "Cocoa is a dark brown, somewhat viscous beverage that is typically made by mixing powdered cocoa powder with milk and sugar.", + "A cocoa is a hot, chocolate-flavored drink made with milk and either cocoa powder or chocolate.", + "A cocoa is a hot drink that is typically made by adding milk and chocolate to water.", + "A cocoa is a hot drink made with milk and chocolate.", + ".", + "A cocoa (beverage) looks like a hot chocolate.", + "A cocoa is a hot chocolate drink made with milk and chocolate.", + "A cocoa is a drink made with cocoa powder, milk, and sugar.", + "A cocoa beverage generally refers to a drink made with chocolate and milk.", + "The cocoa drink is usually a dark brown color and is quite thick." + ], + "coconut": [ + "Coconuts are large brown fruits that grow on palm trees.", + "A coconut is a brown, ellipsoid drupe that grows on the palm trees of tropical coasts.", + "A coconut is typically an elongated drupe with a fibrous outer layer and a hard shell.", + "A coconut is an oval-shaped fruit with a fibrous, woody shell.", + "A coconut is a large, round, brown fruit with a hard husk and white flesh inside.", + "A coconut is brown and hairy on the outside, with a white, fleshy inside.", + "A coconut looks like a large, brown, oval-shaped fruit.", + "A coconut is a brown, elliptical fruit with a fibrous outer layer and a hard inner shell.", + "A coconut is a large, brown fruit that is about the size of a person's head.", + "A coconut is a fruit that grows on a coconut palm tree." + ], + "coffee maker": [ + "Most coffee makers have a water reservoir, a coffee filter, and a carafe.", + "A coffee maker typically has a water reservoir, a heating element, and a filter basket.", + "A coffee maker is a machine that brews coffee.", + "A coffee maker is a small machine that has a water reservoir, a coffee filter, and a carafe or mug.", + "A coffee maker is a device that brews coffee.", + "A coffee maker typically looks like a small machine with a water reservoir, a coffee filter, and a carafe.", + "A coffee maker usually has a water reservoir, a coffee filter, and a pot.", + "A coffee maker typically has a water reservoir, a coffee filter, and a place to put coffee grounds.", + "A coffee maker is a kitchen appliance that brews coffee.", + "A coffee maker is a small kitchen appliance that brews coffee." + ], + "coffee table": [ + "A coffee table is typically a low table that is placed in front of a sofa.", + "A coffee table generally refers to a low table that is placed in front of a sofa or armchair.", + "A coffee table is a rectangular piece of furniture that is typically placed in front of a sofa.", + "A coffee table is a low table that is used in a living room, usually in front of a sofa, for placing drinks, books, and other items.", + "A coffee table is a piece of furniture that is typically placed in the living room.", + "A coffee table is a low table that is placed in front of a sofa.", + "A coffee table is a low table that is placed in front of a sofa.", + "A coffee table typically has four legs and a flat surface.", + "A coffee table is a low table designed for use in a living room, in front of a sofa or other seating.", + "Coffee tables are typically low tables designed for use in a living room, in front of a sofa or couch." + ], + "coffeepot": [ + "A coffeepot is a pot with a spout and a handle, used for pouring coffee.", + "A coffeepot typically has a long handle and a spout, and is used to pour hot water over coffee grounds to brew coffee.", + "A coffeepot is a pot with a spout and a handle, used to brew coffee.", + "A coffeepot is a pot with a spout and a handle, used for pouring coffee.", + "A coffee pot is a household appliance used to brew coffee.", + "A coffee pot is a pot in which coffee is brewed.", + "A coffeepot typically has a spout for pouring coffee, a handle for holding the pot, and a lid.", + "A coffeepot typically has a spout for pouring, a handle for holding, and a lid.", + "A traditional coffeepot is made of ceramic or glass, and has a spout and handle.", + "A coffeepot is a pot with a handle and a spout, used for pouring hot water over coffee grounds to make coffee." + ], + "coil": [ + "A coil is a series of close loops.", + "A coil typically consists of a wire that is wrapped around a central core.", + "A coil is a large, tightly wound spring.", + "A coil is a spiral-shaped object.", + "A coil is a wire that has been wound into a spiral.", + "A coil is a spring-like object that is made up of many turns of wire.", + "A coil looks like a tightly wound spiral of wire.", + "A coil is a type of electrical conductor that is made up of a series of loops.", + "A coil is a spiral of wire.", + "A coil looks like a piece of metal that has been wound into a spiral." + ], + "coin": [ + "A coin is a small, flat, round piece of metal or plastic that is used as money.", + "A coin has a head side and a tail side.", + "\nA coin is usually a small, flat, round piece of metal or plastic that is used as money.", + "A coin has a round shape and is flat.", + "A coin generally has a circular shape with a raised edge, and two faces \u2014 one on each side.", + "A coin is a small, flat, round piece of metal or plastic that is used as money.", + "A coin is a round piece of metal with an image on one side and the words \"United States of America\" on the other.", + "A coin is a small, round, flat piece of metal or plastic that is used as money.", + "\nSure, a coin is a small, round, flat piece of metal or plastic that is used as money.", + "A coin is a small, round, metal disk with an image on one side and raised lettering on the other." + ], + "colander": [ + "A colander is a large bowl-shaped strainer used to rinse food.", + "A colander is a bowl-shaped strainer used to separate solids from liquids.", + "A colander is a kitchen utensil that is used to strain foods.", + "A colander is a large bowl-shaped strainer with small holes in the bottom, used for draining food.", + "A colander is a large metal or plastic bowl with small holes in the bottom, used for draining food.", + "A colander is a kitchen utensil that is used for draining food such as pasta or rice.", + "A colander is a bowl-shaped kitchen utensil with holes in it, used for draining food such as pasta or rice.", + "A colander is a cylindrical or conicalcontainer with lots of small holes in it, used for draining food such as pasta or rice.", + "A colander is an event planning tool that helps you stay organized and on track by creating a master list of tasks that need to be completed before your event.", + "A colander is a kitchen utensil that is used to separate liquids from solids." + ], + "coleslaw": [ + "A coleslaw typically consists of shredded cabbage, carrots, and onions mixed with a mayonnaise or vinegar-based dressing.", + "A coleslaw is typically a mix of shredded cabbage, carrots, and onion, dressed in a mayonnaise or vinegar-based sauce.", + "A typical coleslaw includes shredded cabbage and carrots, although other variations may also include red cabbage, onion, celery seed, and other ingredients.", + "A slaw is generally shredded cabbage with a vinegar-and-oil dressing.", + "A coleslaw is a salad with shredded cabbage, carrots, and mayonnaise.", + "Coleslaw is a salad dish consisting of shredded cabbage and carrots mixed with a mayonnaise or vinaigrette dressing.", + "A coleslaw is a salad made from shredded cabbage and carrots, usually with a vinegar or mayonnaise dressing.", + "Coleslaw is a salad consisting of shredded cabbage and carrots, often mixed with mayonnaise or a vinaigrette dressing.", + "A coleslaw is a salad made with shredded cabbage and carrots, usually with a mayonnaise or vinegar dressing.", + "A coleslaw is a salad made with shredded cabbage, carrots, and other vegetables." + ], + "coloring material": [ + ".", + "A coloring material is typically a powder, though some are liquids or gases.", + ".", + "A coloring material is usually a liquid, gel, or paste that helps add color to another material.", + "A coloring material is usually a liquid or a paste that is used to color something.", + "A coloring material looks like a substance that can be used to add color to another substance.", + "A coloring material is usually a powder or liquid that is used to add color to something.", + "A coloring material is a substance that is used to color or tint something.", + "A coloring material is typically a liquid or powder that is used to color something.", + "A coloring material is a substance that can be used to color something." + ], + "combination lock": [ + "A dial with numbers on it that you spin to the correct combination in order to open the lock.", + "A combination lock is typically a padlock with a dial or keypad.", + "A combination lock is a lock that uses a series of numbers, letters, or symbols to open it.", + "A combination lock is generally a padlock with a dial or keypad used to open the lock.", + "A combination lock typically consists of a dial with numbers from 0-9 that is used to input the combination, as well as a latch that opens when the correct combination is inputted.", + "A combination lock consists of a dial which is attached to a shackle.", + "A combination lock typically has a dial with numbers on it that you turn to the correct combination in order to open the lock.", + "A combination lock usually has a dial with numbers on it that you turn to line up the numbers in the correct order to open the lock.", + "A combination lock consists of a dial with numbers from 0-9 around the edge, which is attached to a lock by a small metal shackle.", + "A combination lock is a type of lock that uses a combination of numbers, letters, or symbols to open it." + ], + "pacifier": [ + "A pacifier is a nipple on a shield, with a ring or handle attached.", + "A pacifier typically has a nipple made out of rubber or silicone that is meant to resemble a mother's breast.", + "A pacifier is a small, teardrop-shaped piece of plastic with a nipple in the center.", + "A pacifier typically has a rubber or silicone nipple that is attached to a plastic or metal guard.", + "A pacifier typically has a nipple-shaped top that is attached to a ring, handle, or shield.", + "A pacifier is a nipple on a shield, with a ring or handle attached.", + "A pacifier is a small rubber or plastic device that fits in a baby's mouth and has a nipple on it.", + "A pacifier typically has a plastic shield with a nipple in the center.", + "A traditional pacifier is designed to look like a human nipple.", + "A pacifier is a small plastic device that has a rubber nipple on one end and a plastic ring on the other." + ], + "comic book": [ + "A comic book is a book that contains sequential art.", + "A comic book is typically a 32-page book with thin pages made of slightly glossy paper.", + "A comic book typically consists of a series of panels that tell a story.", + "A comic book is a book that contains a story that is told through the medium of comics.", + "A comic book usually has colorful illustrations and is divided into small panels that tell a story.", + "A comic book usually has a rectangular shape and is bound with staples on the spine.", + "Most comic books are around 32 pages long, and are square-bound on standard-sized paper.", + "A comic book is a thin book with a paper cover and pages that are held together with staples.", + "A comic book is a magazine that contains pictures and stories that are usually related to superheroes.", + "A comic book typically has colorful illustrations on the front cover and is bound together with staples in the spine." + ], + "compass": [ + "A compass is a handheld device that has a needle inside that always points north.", + "A compass is a small, handheld device that has a circular face with a needle inside of it.", + "A compass is a circular device with a needle inside that points to the north.", + "A compass is a round object that has a needle inside of it.", + "Most compasses have a needle that is balanced on a low-friction pivot point.", + "A compass is a small, handheld device that has a needle inside of it that always points north.", + "A compass is a tool that helps people find direction.", + "A compass is a small, handheld device that has a needle that always points north.", + "A compass is a device that is used to measure or find directions.", + "A compass is a small, hand-held device that contains a needle that always points north." + ], + "computer keyboard": [ + "A keyboard typically has around 101 to 104 keys.", + "A computer keyboard typically looks like a QWERTY keyboard with additional function keys.", + "A computer keyboard is a rectangular piece of hardware with several small keys arranged in a grid.", + "A computer keyboard typically looks like a traditional typewriter keyboard, with a number of function keys and other keys that perform special actions.", + "A computer keyboard is a rectangular plastic board with small, raised buttons, or keys.", + "A keyboard is a typewriter-style device which uses an arrangement of buttons or keys to act as mechanical levers or electronic switches.", + "A keyboard typically has 104 keys arranged in a QWERTY layout.", + "A computer keyboard is typically a rectangular shaped device with keys that correspond to letters, numbers, and symbols.", + "A keyboard is a rectangular device with black and white keys.", + "A computer keyboard typically has around 101 keys." + ], + "condiment": [ + "A condiment is a food item that is added to another food to enhance the flavor.", + "A condiment is a paste, sauce, or seasoning that is added to food to enhance its flavor.", + "A condiment is a substance that is added to food to enhance its flavor.", + "\nA condiment is a watery, often vinegar-based sauce, used to add flavor to food.", + "Some common condiments are mustard, ketchup, and mayonnaise.", + "A condiment is a This is a sauce or spice that is added to food to enhance the flavor.", + "Most condiments are either semi-solid or liquid, and are generally yellow, orange, or brown.", + "Condiments are usually thick, semisolid pastes, gels, or liquids that are added to food to enhance its flavor or appearance.", + "A condiment generally refers to a sauce or a seasoning that is added to food to enhance the flavor.", + "A condiment is a liquid or dry seasoning that is added to food to enhance the flavor." + ], + "cone": [ + "A cone is a three-dimensional geometric shape that tapers smoothly from a flat base to a point called the apex or vertex.", + "A cone has a circular base with a pointed top.", + "A cone is a three-dimensional shape with a circular base and a pointy top.", + "A cone is a three-dimensional geometric shape with a circular base and a point at the top.", + "A cone is a three-dimensional figure with a circular base and a pointed top.", + "A cone is a three-dimensional shape with a circular base and a pointy top.", + "A cone is a three-dimensional geometric object that tapers smoothly from a circular base to a point called the apex or vertex.", + "A cone is a three-dimensional geometric shape with a circular base and a pointed top.", + "A cone is a three-dimensional object with a circular base and a pointy top.", + "A cone is a three-dimensional geometric shape with a circular base and a point at the top." + ], + "control": [ + "A control is a component in a graphical user interface that the user can interact with to perform an action.", + "A control typically consists of a control knob or a switch.", + "A control is a type of element in a user interface that allows the user to interact with the software.", + "A control is a component that allows a user to interact with a digital interface.", + "A control is a standardized element in a graphical user interface that allows a user to interact with a computer application.", + "A control is an element on a computer screen that the user interacts with to perform an action.", + "A control is a component of a user interface that allows a user to interact with a computer system.", + "A control looks like a small rectangular box with a label above it.", + "A control is a rectangular area on a form or window that displays data or accepts user input.", + " in terms of designing an experimentA control is a baseline against which the results of an experiment can be compared." + ], + "convertible (automobile)": [ + "A convertible is a car with a removable roof.", + "A convertible is a type of automobile with a folding or detachable roof.", + "A convertible is a type of automobile with a folding or detachable roof.", + "A convertible is an automobile with a roof that can be retracted or removed to allow the passengers to enjoy the outdoors while they are driving.", + "A convertible is a car with a removable or retractable roof.", + "A convertible is a type of car that has a roof that can be retracted or removed, making it an open-air vehicle.", + "A convertible (automobile) looks like a regular car with a removable roof.", + "A convertible is a car with a removable or folding top.", + "A convertible is an automobile with a retractable or removable roof.", + "A convertible (automobile) has four wheels and a steering wheel." + ], + "sofa bed": [ + "A sofa bed is a sofa that can be converted into a bed.", + "A sofa bed is a sofa that has a fold-out bed hidden inside of it.", + "A sofa bed typically looks like a sofa with a backrest and seat cushions, but it has a fold-out bed hidden inside.", + "A sofa bed is a couch that pulls out into a bed.", + "A sofa bed looks like a sofa with a mattress underneath.", + "A sofa bed typically has a metal or wood frame with a mattress on top.", + "A sofa bed is a couch that has a fold-down backrest.", + "A sofa bed looks like a normal sofa but has a mechanism that allows it to fold out into a bed.", + "A sofa bed is a piece of furniture that looks like a couch, but has a mattress hidden inside of it.", + "A sofa bed typically has a metal or wood frame with a mattress that folds out from underneath the sofa." + ], + "cooker": [ + "A cooker is a large appliance that is used for cooking food.", + "A cooker usually has four hot plates on top and an oven below.", + "A cooker can take many different forms, but most cookers have a few key components.", + "A stove or cooker is usually a metal box with four legs, and four or more Burners on the top, with controls to regulate the heat.", + "A cooker is a kitchen appliance used for cooking food.", + "A cooker is a device used to cook food.", + "A cooker is a large, metal appliance that is used to cook food.", + "A cooker is a large appliance typically used in the kitchen to cook food.", + "A cooker typically has four burners on top, an oven and a broiler.", + "A cooker typically has four hotplates on top and an oven underneath." + ], + "cookie": [ + "A cookie typically looks like a small, flat disk.", + "Small, round, and sweet, cookies are bite-sized treats that are often enjoyed with a glass of milk.", + "A cookie is a small disk of sweetened dough that is usually baked with a chocolate chips.", + "A cookie is a small disc of sweetened dough that is cooked and then served with milk or coffee.", + "A cookie looks like a small, round, flat piece of food.", + "A cookie is a small disk of baked dough that is typically sweetened with sugar or chocolate chips.", + "A cookie is a small, flat, triangular-shaped food that is typically made from flour, sugar, butter, eggs, and baking powder.", + "A cookie is small, round, and usually has a sweet flavor.", + "\nA cookie is a sweet, small, flat, baked good that is usually made from flour, sugar, butter, eggs, and vanilla.", + "A cookie is a small, rectangular, flat baked good that is typically made from flour, sugar, butter, eggs, and baking powder." + ], + "cooking utensil": [ + "Cooking utensils vary in shape and size, but most have a long handle with a head or blade on one end that is used for stirring, flipping, or scooping food.", + "A cooking utensil is a kitchen tool that is used to prepare food.", + "A cooking utensil is an object that is used to help with cooking food.", + "A cooking utensil is any tool that is used in the kitchen to help with cooking.", + "A cooking utensil can take on many forms, but most often it is a kitchen implement that is used for cooking purposes.", + "A cooking utensil can take many different forms, but most are small hand-held tools used for preparing food.", + "A cooking utensil is any object that is used to prepare, cook, or serve food.", + "A cooking utensil is a tool that is used to cook food.", + "A pot is a round, deep dish used for cooking food in liquid.", + "A cooking utensil is a small, hand-held tool used for cooking." + ], + "cooler (for food)": [ + "A cooler for food typically looks like a large, insulated bag with a zipper.", + "A cooler is a box made of hard plastic, metal, or styrofoam.", + "A food cooler is typically a tall, rectangular box with a lid.", + "A cooler for food typically looks like a large, insulated box with a lid.", + "A cooler for food is a small, portable box with a handle on the top.", + "A typical food cooler is a hard-sided box with a lid.", + "A cooler (for food) looks like a large, insulated box with a lid.", + "A cooler for food typically looks like a large, insulated box with a handle and a lid.", + "A cooler (for food) typically looks like a large, insulated box with a handle and a lid.", + "A cooler is a plastic box with a lid and a handle." + ], + "cork (bottle plug)": [ + "A cork is a small, round piece of wood that is used to plug a bottle.", + "A cork is a small, round, plug-like object that is inserted into the top of a wine bottle to seal it.", + "\nA cork is round, and it has a small hole in the middle.", + "A cork is a small, round piece of wood that is used to seal wine bottles.", + "A cork is a small, plug-shaped piece of wood or plastic that is used to seal the opening of a bottle.", + "A cork is a small, round piece of wood or bark that is used to seal wine bottles.", + "A cork is a small, circular piece of wood that is used to seal the opening of a bottle of wine.", + "A cork is a small, round, plug-like object made of a material such as wood or plastic.", + "A cork is a small, round piece of wood that is used to plug a bottle.", + "A cork is a small, round, plug-like object that is inserted into the top of a wine bottle." + ], + "corkboard": [ + "A corkboard has a frame made of wood or metal, with a cork surface covering the entire board.", + "A corkboard is a thin piece of cork or other material with a smooth surface, often used as a bulletin board.", + "A corkboard has a frame made of either wood or metal.", + "A corkboard typically has a rectangular shape with a backing made of cork material.", + "A corkboard typically has a rectangular shape and is covered in cork material.", + "A corkboard usually has a rectangular shape and is covered in cork, which is a material that is easy to push pins into.", + "A corkboard is a rectangular piece of cork that is usually used for pinning notes or other items on a wall.", + "A corkboard is a board made of cork wood that is used to pin items on.", + "A corkboard looks like aPinboard with cork surface, used for notes or other papers.", + "A corkboard is a board of cork covered in cloth or leather, used for pinning notes or other items." + ], + "corkscrew": [ + "A corkscrew looks like a small spiral staircase.", + "A corkscrew is a spiral-shaped metal tool that is used to remove the corks from wine bottles.", + "A corkscrew is a long, thin metal spiral with a sharp point at the end.", + "A corkscrew is usually a small, handheld tool that has a thin, spiral metal shaft with a sharp point on one end.", + "Most corkscrews have a spiraled metal shaft with a wooden or plastic handle.", + "A corkscrew is a tool that is used to open wine bottles.", + "A corkscrew is a metal spiral with a handle that is used to open wine bottles.", + "A corkscrew is a spiral-shaped tool that is used to remove the cork from a wine bottle.", + "A corkscrew is a spiral-shaped device that is inserted into the cork of a wine bottle in order to remove it.", + "A corkscrew typically consists of a pointed metal helix attached to a handle." + ], + "edible corn": [ + "An edible corn looks like a yellowish-white or goldenrod-colored cob with kernels that are plump, firm, and evenly distributed.", + "An edible corn looks like a small yellow or white cob of corn with kernels that can be eaten.", + "An edible corn looks like a small, yellowish-white ear of corn.", + "An edible corn looks like a yellow or white cob with kernels that can be eaten.", + "Edible corn is a yellow or white grain that is used as a food.", + "A ripe, edible corn cob is yellow or white and the kernels are plump and juicy.", + "An edible corn looks like a yellow or white slightly curved and pointy vegetable.", + "An edible corn looks like a small, yellowish-white ear of corn.", + "An edible corn looks like a cob of corn with yellow kernels.", + "An edible corn looks like a cob of corn with kernels that are eaten as a vegetable." + ], + "cornbread": [ + "A cornbread looks like a golden, slightly crumbly cake.", + "A cornbread is a quick bread made with cornmeal, flour, milk, sugar, butter, eggs, and baking powder.", + "A cornbread is a quick bread made with cornmeal, flour, eggs, milk, and butter.", + "A cornbread is typically a round or rectangular loaf of bread that is made with cornmeal.", + "A cornbread is a type of quick bread that is made with cornmeal, flour, eggs, and milk.", + "cornbread is a quick bread made from cornmeal, flour, eggs, milk, and baking powder.", + "A cornbread is a type of bread that is made with cornmeal.", + "A cornbread is a small, round bread that is made out of cornmeal.", + "A cornbread is a quick bread made with cornmeal, flour, eggs, milk, and melted butter.", + "A cornbread is a type of quick bread that is made with cornmeal, flour, butter, eggs, and milk." + ], + "cornet": [ + "A cornet looks like a small trumpet.", + "A cornet looks like a small trumpet.", + "A cornet looks like a small, conical trumpet.", + "A cornet looks like a brass horn with a small, flared bell and a narrow, cylindrical bore.", + "A cornet looks like a small trumpet.", + "A cornet has a narrow, conical bore and a slightly flared bell.", + "A cornet has a conical bore and a bell flared in a cupped shape.", + "A cornet looks like a small trumpet.", + "A cornet looks like a small trumpet with a conical bore.", + "A cornet looks like a small trumpet, with a sleek, conical design." + ], + "cornice": [ + "A cornice is a decorative element that projects from the top of a wall.", + "A cornice is a horizontal architectural feature that projects from the edge of a roof.", + "A cornice is a decorative element that protrudes from the top of a building.", + "A cornice is a decorative feature that projects from the top of a wall.", + "A cornice is a decorative element that projects from the top of a building.", + "A cornice is a decorative element that hangs from the ceiling or is attached to the wall just below the ceiling.", + "A cornice is an ornamental element that projects from the wall of a building.", + "A cornice is a decorative element that projects from the top of a wall.", + "A cornice is a type of decorative molding used to finish the top edge of a window or door.", + "A cornice is typically a horizontal architectural element that crowns a building or furniture piece, and projects outward from the wall." + ], + "cornmeal": [ + "A cornmeal is a yellow powder that is made by grinding corn kernels into a fine powder.", + "A cornmeal is a meal made from corn that has been ground into a fine powder.", + "A cornmeal is a nonglutinous flour made of dried corn kernels which have been ground.", + "A cornmeal is coarse flour made from dried corn.", + "A cornmeal looks like a yellow powder.", + " in a sentence.", + "A cornmeal is a yellow or white flour made from ground dried corn.", + "A cornmeal is a yellow powder made from grinding corn.", + "A cornmeal is a yellow powder that is made from corn.", + "A cornmeal is a type of flour that is made from finely ground corn kernels." + ], + "corset": [ + "A corset is a type of clothing that is worn to hold and shape the body.", + "A corset is a tight-fitting garment that is worn by women to slim their figures.", + "A corset is a close-fitting undergarment that is worn to shape and give support to the wearer's body.", + "A corset is a form-fitting undergarment that is typically worn by women.", + "A corset typically looks like a tight-fitting, curves-hugging bodice that cinches in the waistline.", + "A corset is a tight fitting undergarment that is typically worn by women.", + "A corset is a close-fitting undergarment that is worn to shape the body.", + "A corset is a tight-fitting undergarment that is worn to shape the body.", + "A corset is a tightly fitted, waist-length garment typically made of boned fabric that is worn to shape the waistline and hourglass figure.", + "A corset is a garment that is worn by women to shape their bodies." + ], + "costume": [ + "A costume can look like many things.", + "A costume is a type of clothing worn to represent a particular character or to provide a person with a particular identity in a play, novel, or film.", + "A costume looks like a set of clothing worn to represent a character in a play or movie.", + "A costume is a set of clothing worn to represent a character or perform a role.", + ".", + "A costume is a piece of clothing that is usually worn on special occasions or in theatrical productions.", + "A costume is a piece of clothing that is worn to look like someone or something else.", + "A costume is usually a set of clothes that are designed to look like a character or thing.", + "A costume is an article of clothing worn to create the image of a character or animal.", + "A costume is a piece of clothing that is worn to look like someone or something else." + ], + "cougar": [ + "A cougar is a large cat with tawny fur and black markings.", + "A cougar is a large, powerful cat.", + "A cougar is a large cat with a long tail and gray or brown fur.", + "A cougar can vary in color but is typically a light brown or tan.", + "A cougar is a Panthera species closely related to the leopard.", + "A cougar is a large, tawny cat with black facets and a long tail.", + "There is no definitive answer to this question, as cougars can vary greatly in appearance.", + "A cougar typically has brown fur, although some can have a more reddish or grey coat.", + "A cougar typically has tawny fur with white markings on the chest, and black fur on the tips of its ears, tail, and legs.", + "A cougar is generally an older woman, usually in her 40s or 50s, who is attracted to much younger men." + ], + "coverall": [ + "A coverall is a one-piece garment that covers the torso and legs.", + "A coverall is a type of clothing worn to cover the entire body.", + "A coverall is a one-piece jumpsuit that covers the entire body, including the feet and hands.", + "A coverall is a one-piece clothing item that covers the entire body, including the legs, arms, and chest.", + "A coverall is a type of clothing that covers the whole body, including the arms, legs, and torso.", + "A coverall is a one-piece garment worn by workers in an industrial or scientific setting.", + "A coverall often looks like a one-piece jumpsuit with long sleeves and long pants.", + "A coverall is a one-piece garment that covers the body from the neck to the ankles.", + "A coverall is a one-piece garment that covers the entire body.", + "A traditional coverall is a one-piece garment worn over other clothes." + ], + "cowbell": [ + "A cowbell looks like a small bell that is hung around the neck of a cow.", + "A cowbell looks like a cylindrical bell with a handle on top.", + "A cowbell is a bell worn around the neck of a cow.", + "A cowbell is typically a bell shaped object that is hung around the neck of a cow.", + "A cowbell is a bell with a clapper that is used to herd cows.", + "A cowbell is a metal bell that is attached to the neck of a cow.", + "A cowbell is a metal bell that is worn around the neck of a cow.", + "A cowbell is a hand-held bell made of metal or wood.", + "A cowbell is a bell that is attached to the neck of a cow.", + "A cowbell looks like a small bell with a handle on top." + ], + "cowboy hat": [ + "A cowboy hat is a wide-brimmed, tall-crowned hat that is typically worn by cowboys and cowgirls in the American West.", + "A cowboy hat is a type of wide-brimmed, high-crowned hat with a soft, flat brim.", + "A cowboy hat is a soft, felt hat with a wide brim.", + "A cowboy hat is a wide-brimmed, high-crowned hat that is typically made of felt or straw.", + "A cowboy hat is a wide-brimmed, tall-crowned hat that is typically worn by cowboys and cowgirls in the American West.", + "A cowboy hat is a wide brimmed felt hat with a high crown.", + "A cowboy hat is a type of wide-brimmed hat with a high crown that is typically worn by cowboys and other people who work outdoors.", + "A cowboy hat is traditionally a felt hat with a wide brim, worn by cowboys in the American West.", + "Cowboy hats are traditionally made of straw or felt and have a wide brim that is rolled up on the sides.", + "A cowboy hat is a wide-brimmed, high-crowned hat that is typically worn by cowboys and other ranch workers." + ], + "crab (animal)": [ + "A crab is a small, hard-shelled animal with jointed legs.", + "A crab is a marine crustacean with eight legs, two large pincers, and a hard shell.", + "Crabs are small to medium-sized crustaceans.", + "A crab is a small, hard-shelled creature with eight legs and two large pincers.", + "Most crabs have a long, thin body with a hard shell.", + "A crab is a sea creature with a hard shell and eight legs.", + "A crab is an invertebrate animal with a hard exoskeleton and ten legs.", + "A crab is a small, hard-shelled creature with five pairs of legs.", + "A crab is a small, hard-shelled creature with eight legs and two large pincers.", + "Most crabs have a flattened body with a wide abdomen." + ], + "crabmeat": [ + "A crabmeat is a white, flaky meat that is found in the claws and legs of a crab.", + "Crabmeat is a dciduous meat that is white in color with a pinkish tint.", + "Crabmeat is a type of whitefish that has flaky, delicate flesh.", + "A crabmeat typically looks like small pieces of flaky white meat with a pinkish tint.", + ".", + "Crabmeat is a type of seafood that is white and flaky.", + "Crabmeat is a type of seafood that is white in color and has a flaky texture.", + "Crabmeat is a white or light brown meat that is found in the body of a crab.", + "A crabmeat typically looks like small pieces of flaky white meat.", + "Crabmeat is a type of seafood that is considered to be white meat." + ], + "cracker": [ + "A cracker is a thin, dry, unleavened biscuit or cookie.", + "A cracker is a flat, dry baked food typically made with flour, water and yeast.", + "A cracker typically looks like a thin, crisp, dry biscuit that is often eaten with cheese or other savory toppings.", + "A cracker is a thin, dry biscuit that is usually made from flour, water, yeast, and salt.", + "A cracker is a small, dry, and thin piece of bread that is often eaten with cheese or peanut butter.", + "A cracker is a thin, crisp biscuit that is often eaten with cheese or peanut butter.", + "A cracker looks like a small, flat, rectangular pastry.", + "A cracker is a thin, crispy biscuit.", + "A cracker is a thin, crisp, dry biscuit that is often eaten with cheese or butter.", + "A cracker looks like a small, thin, rectangular piece of bread that is usually savory." + ], + "crape": [ + "A crape is a thin, flaky pastry typically made from a sugar dough.", + "A crape is a type of fruit that looks like a small, dark purple or black grape.", + "A crape is a thin, crepe-like fabric.", + "A crape is a type of fruit that looks like a small, dark purple or black grape.", + "A crape is a thin, wrinkled fruit that is dark purple in color.", + "A crape is a type of fruit that looks like a small, dark purple or blackberry.", + "A crape is a type of fruit that looks like a small, dark purple or black grape.", + "A crape is a type of thin, fragile crepe made from wheat flour, water and milk.", + "Crape is a thin, delicate fabric with a crimped or ruffled surface.", + "A crape is a thin, crinkled fabric with a dull finish, made from silk, wool, or rayon." + ], + "crate": [ + "A crate generally looks like a large, rectangular box.", + "A crate is typically a rectangular box made of wood, plastic, or metal.", + "A crate is a large, rectangular box made of wood or metal.", + "A crate typically is a rectangular box made of wood or metal.", + "A crate is a box or container that is used to ship or store goods.", + "A crate is a large box typically used to ship or store heavy items.", + "A crate typically looks like a large rectangular box with a lid.", + "A crate typically is a sturdy box made of wood, plastic, metal or other durable material.", + "A crate is a wooden box with a slatted cover.", + "A crate is a rectangular box usually made of wood or metal." + ], + "crayon": [ + "A crayon is a thin, cylindrical piece of colored wax.", + "A crayon typically has a waxy core and is wrapped in paper.", + "A crayon is a stick of colored wax used for drawing and coloring.", + "A crayon is a thin, colored stick of wax used for drawing and coloring.", + "A crayon is a thin, cylindrical stick of colored wax used for drawing and coloring.", + "A crayon is typically a long, thin cylinder of brightly colored wax that is used for drawing and coloring.", + "A crayon is a thin, colored stick of wax used for drawing and coloring.", + "A crayon is a thin, cylindrical piece of colored wax with a paper wrapper.", + "A crayon is a thin, cylindrical stick of colored wax used for drawing and coloring.", + "A crayon is a colorful stick of wax that is used for drawing and coloring." + ], + "cream pitcher": [ + "A cream pitcher is a small round pitcher with a handle.", + "A cream pitcher is a container with a spout that is used to pour liquid into a cup.", + "A cream pitcher is a small vessel with a spout used for pouring milk or cream.", + "A cream pitcher is a small pitcher typically used to hold cream or milk.", + "A cream pitcher usually has a spout and a handle, and is used to pour cream or milk into coffee or tea.", + "A cream pitcher is a small jug with a spout, used for pouring milk or cream.", + "A cream pitcher is a small pitcher, usually made of ceramic or porcelain, with a spout and a handle.", + "A cream pitcher is a small pitcher designed for serving cream.", + "A cream pitcher is a small porcelain jug with a spout, used for pouring milk or cream.", + "A cream pitcher is a small pitcher, usually made of ceramic or porcelain, with a spout and a handle." + ], + "crescent roll": [ + "A crescent roll is a sweet braided bread that is often served as a dessert.", + "A crescent roll looks like a croissant that has been rolled into a crescent shape.", + "A crescent roll is a type of roll made from leavened dough.", + "A crescent roll typically looks like a half-moon or crescent shape.", + "A crescent roll is a type of roll that is shaped like a crescent moon.", + "A crescent roll is a roll of bread that has been shaped into a crescent moon.", + "A crescent roll is a rolled piece of dough that is in the shape of a crescent moon.", + "A crescent roll is an oven-baked roll made from a leavened dough.", + "A crescent roll is a kind of bread that is shaped like a crescent moon.", + "A crescent roll is a type of bread roll shaped in a crescent moon shape." + ], + "crib": [ + "A crib is a small bed specifically for infants and toddlers.", + "A crib is usually a small bed that is designed for infants and very young children.", + "A typical crib is a small bed with high sides and a low headboard, designed to allow a young child to sleep safely.", + "A crib is a small bed for an infant or young child, typically with high bars around the sides to prevent the child from falling out.", + "A crib is typically a small bed that is meant for infants or very young children.", + "Most cribs have four slats on each side and one in the middle of the headboard and footboard.", + "A crib looks like a small bed with bars or raised sides that is used for a baby to sleep in.", + "A crib is a small bed for a baby, with tall sides to keep the baby from falling out.", + "A crib is a bed for a baby that has high sides to keep the baby from falling out.", + "A crib is an infant bed with high, often removable, sides." + ], + "crock pot": [ + "A slow cooker, also known as a Crock-Pot (a trademark of Sunbeam Products but often used generically), is a countertop electrical cooking appliance used to simmer at a lower temperature than other methods, such as baking, boiling.", + "A crockpot is a slow cooker that typically has a stoneware insert that goes into an surrounding heating element.", + "A crock pot typically has a ceramic pot that sits inside a metal housing.", + "A crock pot is a slow cooker that typically has a ceramic pot and a metal, removable cooking insert.", + "A crock pot is a type of slow cooker that typically has a ceramic pot with a glazed finish and a fitted lid.", + "A crock pot is a small kitchen appliance used to cook food, typically over a slow heat.", + "A slow cooker, also known as a Crock-Pot, is a countertop appliance used for cooking at a low temperature for an extended period of time.", + "A crock pot is a type of slow cooker that typically consists of a lidded round or oval cooking pot made of glazed ceramic or porcelain, surrounded by a housing, usually metal, containing a thermostatically controlled electric.", + "A crock pot typically has a ceramic pot that sits inside a metal housing.", + "A crock pot is a small appliance that has a rounded bottom and is used for cooking." + ], + "crossbar": [ + "A crossbar is a horizontal bar that is placed across the middle of a door or window.", + "A crossbar is a structure that consists of two or more parallel bars of metal, wood, or other material stretched out from each other.", + "A crossbar is a rectangular frame that is placed across a goal mouth.", + "A crossbar is a vertical bar that goes across a frame or opening.", + "A crossbar is a straight, horizontal beam that is supported at each end.", + "A crossbar is a horizontal bar that goes across something.", + "A crossbar is a horizontal bar that is placed across a goal or net.", + "A crossbar is a horizontal bar that connects two vertical posts.", + "A crossbar is a metal bar or wooden beam used to support something, for example, the roof of a building or a bridge.", + "A crossbar resembles a metal bar that is placed across a doorway or gateway in order to block passage." + ], + "crouton": [ + "Croutons are small, dry cubes of bread that are often used to top salads or soups.", + ".", + "A crouton is a small, hard cube of bread that is often used to top salads or soup.", + "A crouton looks like a small, rectangular, or cubed piece of bread that has been oven-dried or fried.", + "A crouton is a small piece of bread that has been cut or torn into a small cube.", + ".", + "A crouton is a small, crispy piece of bread that is usually used as a garnish on soups and salads.", + "A crouton is a small, hard, dry piece of bread that is usually used to add texture and flavor to salads and soups.", + "A crouton is a small cube of dried bread that is typically used as a topping on salads.", + "A crouton is a small piece of bread that has been cut or torn into a small cube." + ], + "crow": [ + "A crow is a blackbird with glossy black feathers.", + "A crow is a black bird with a long, pointed beak.", + "A crow is a completely black bird with a long, pointed beak.", + "A crow is a black bird with a long beak.", + "A crow is a black bird with a long beak.", + "A crow is a black bird with a long, black beak.", + "A crow looks like a black bird with a long, straight beak.", + "A crow is a blackbird with shiny black feathers.", + "A crow is a black bird with a long beak.", + "A crow is a black bird with a long, pointed beak." + ], + "crowbar": [ + "A crowbar is a long metal bar with a flat end that is used as a lever to pry things open.", + "A crowbar can vary in size and shape, but typically it is a thin, steel bar with a flattened end that is used as a lever.", + "A crowbar typically has a long, straight metal shaft with a flat end that curves into a hook shape.", + "A crowbar typically has a long, flat head on one end, and a claw or hook on the other.", + "A crowbar looks like a long metal bar with a flat end and a hooked end.", + "A crowbar typically has a long, slim metal shaft with a flat end that is used for prying things open.", + "A crowbar is a metal bar with a flat end and a sharpened, curved end.", + "A crowbar typically looks like a long, thin piece of metal with a flattened end that is used as a lever.", + "A crowbar is a long metal bar that is used to lever objects apart.", + "A crowbar typically looks like a large metal stick with a blunt end and a tapered, claw-like end." + ], + "crown": [ + "A crown is a type of headwear that helps to cover up bald spots or areas of the scalp that have little to no hair.", + "A crown is a gold or silver headpiece that is worn by a king or queen.", + "A crown is a flexible, molded piece of dental material that is placed over a tooth to esthetically or structurally improve the tooth.", + "The crown is the portion of the tooth that is visible above the gumline.", + "A crown is a type of dental restoration which completely caps or encircles a tooth or dental implant.", + "A crown is a type of dental restoration which completely caps or encircles a tooth or dental implant.", + "A crown is a circular band that encircles the head.", + "A crown is a type of headwear that helps to indicate rank, royalty, or other forms of status.", + "A crown is a type of headwear that dates back to the ancient world.", + "A crown is a type of headwear that sits on top of the head." + ], + "crucifix": [ + "A crucifix is a Christian symbol that represents the crucifixion of Jesus Christ.", + "A crucifix is a crucifixion scene, usually in the form of a cross, as a devotional object.", + "A crucifix is a Christian symbol that represents the crucifixion of Jesus Christ.", + "A crucifix is a Christian cross with a figure of Jesus Christ on it, usually enclosed in a glass fronted case.", + "A crucifix is a cross with Jesus crucified on it.", + "A crucifix is a Christian cross with a figure of Jesus Christ on it, typically hanging on a wall or on a free-standing stand.", + "A crucifix is a Christian emblem that typically consists of a Latin cross with a corpus, or a figure of Jesus Christ, on it.", + "A crucifix is a type of cross with a figure of Jesus Christ on it.", + "A crucifix is a Christian symbol that typically consists of a cross with the figure of Jesus Christ crucified on it.", + "A crucifix is a cross with a figure of Jesus Christ on it." + ], + "cruise ship": [ + "Most cruise ships are very large with multiple levels and can hold thousands of passengers.", + "A cruise ship is typically a large passenger vessel that is used for pleasure cruises.", + "A cruise ship is a large, luxury ship that is used for vacations and travel.", + "The majority of cruise ships are large \u2014 the average cruise ship is 951 feet long and 105 feet wide.", + "There is no one answer to this question as cruise ships come in all shapes and sizes.", + "A cruise ship is a large ship that is used to transport people on vacations or cruises.", + "A cruise ship is a vessel that carries passengers on vacation cruises.", + "The world's largest cruise ship is Symphony of the Seas.", + "Most cruise ships are large and contain many decks, restaurants, pools, and other amenities.", + "A cruise ship is large and long with many floors and balconies." + ], + "police cruiser": [ + "A police cruiser typically has flashing lights on the roof, one or more sirens, and a spotlight.", + "Police cruisers are typically large sedans with four doors.", + "A police cruiser is a car that is marked with the words \"Police\" or \"Sheriff.", + "A police cruiser is a car that is used by police officers to help them do their job.", + "A police cruiser is a vehicle that is used by the police to transport them to and from a call.", + "A police cruiser is usually a marked car that is used by police officers to patrol their beats.", + "A police cruiser is a car marked with the words \"Police\" or \"Sheriff.", + "A police cruiser typically has a light bar on the roof, spotlight on the driver's side, and decals that identify it as a police vehicle.", + "A police cruiser is a marked police car, usually equipped with flashing red and blue lights, sirens, and various other emergency equipment.", + "A police cruiser is a type of vehicle that is used by police officers to help them do their job." + ], + "crumb": [ + "Typically, crumbs are small, dry pieces of food that have fallen off of a larger piece.", + "A crumb looks like a small, dry piece of food that has fallen from someone's mouth while they are eating.", + " in as much detail as possibleA crumb normally is a small, dry piece of bread or cake that has flaked off.", + "A crumb is a small piece of food that has fallen off of a larger piece of food.", + "A crumb is a small, dry piece of food that has fallen from a larger piece.", + "A crumb looks like a tiny piece of bread.", + "A crumb looks like a small, dry piece of bread.", + "A crumb is a small, dry fragment of food that is left after eating.", + "A crumb is a small, dry piece of food that breaks off from a larger piece.", + "A crumb looks like a small piece of food that has broken off a larger piece of food." + ], + "crutch": [ + "A crutch is generally a wooden or metal rod with a place to rest your armpit and a grip to hold on to.", + "A crutch typically has a hand grip and a padded armrest close to the top, and a triangular metal piece at the bottom that fits against the ribs.", + "A crutch is a mobility aid that helps people walk.", + "A crutch is a support device that helps people walk.", + "a crutch is typically a long stick with a curved top that is used to help support someone's weight when they are injured and cannot walk on their own.", + "A crutch is a medical device used to provide support and stability to a person who has a disability or injury.", + "A crutch is a device that helps support the weight of the body and limits the movement of a leg or foot.", + "A crutch is a support that helps someone walk when they have an injury.", + "A crutch is typically a wooden or metal pole with a padded armrest and a handgrip.", + "A crutch looks like a staff or pole with a crosspiece at the top, used by disabled people to help them walk." + ], + "cub (animal)": [ + "A cub is a baby animal.", + "A cub is a young animal of various species, including bear, lion, tiger, leopard, and others.", + "A baby bear.", + "A cub is a baby animal that is still developing.", + "A cub is a young animal, typically a young bear.", + " Cubs are small, young versions of animals such as lions, tigers, and bears.", + "A cub is a young animal, typically a mammal, that is not yet fully developed.", + "A cub is a young animal.", + "a young cow or bull.", + "A cub is a baby animal that looks like a miniature version of its parent." + ], + "cube": [ + "A cube is a rectangular box shape with six equal sides.", + "A cube is a three-dimensional shape with six square sides.", + "A cube is a three-dimensional shape with six square or rectangular faces.", + "A cube is a geometric solid shape with six faces that are all squares.", + "A cube is a three-dimensional square.", + "A cube is a rectangular three-dimensional object with six faces that are all the same size and shape.", + "A cube is six-sided figure with squares as its faces.", + "A cube has six faces.", + "A cube is a where all six faces meet at 90 degree angles.", + "A cube is a three-dimensional shape with six equal-sized square faces." + ], + "cucumber": [ + "A cucumber looks like a cucumber.", + "A cucumber is a member of the gourd family, cucurbitaceae, which includes squash, pumpkin, and melon.", + "A cucumber is generally cylindrical in shape, with smooth, green skin.", + "John is a cucumber.", + "A cucumber is a green, cylindrical fruit with smooth, green skin.", + "A cucumber typically has a dark green exterior, with a white or light green interior.", + "A cucumber is typically dark green and about a foot long, with a smooth, slightly bumpy skin.", + "A cucumber is a long, green, slender fruit that is related to squash, melons, and pumpkins.", + "A cucumber is a long, green, cylindrical fruit.", + "A cucumber is a green vegetable that is long and thin." + ], + "cufflink": [ + "A cufflink is a decoration that is used to fasten the cuff of a shirt.", + "A cufflink is a small, ornamental fastener that is used to secure the two ends of a cuff on a shirt or shirt-like garment.", + "A cufflink is a jewelry item that is used to fasten the two sides of a shirt cuff together.", + "A cufflink typically consists of two parts: the front end, which is often decorated, and the back end, which attaching mechanism.", + "Typically, cufflinks are composed of a short post or stud at one end that secures buttonhole, and a decorated metal disk at the other.", + "A cufflink consists of two discs connected by a short chain.", + "A cufflink consists of two discs connected by a short chain.", + "A cufflink is typically a decorative fastener worn by men to secure the two sides of a dress shirt cuff.", + "A cufflink consists of two parts: the front piece, which helps to secure the shirt cuff, and the back piece, which stays behind the shirt cuff.", + "A cufflink is a decorative fastener worn by men or women to secure the two sides of a cuff on a shirt or blouse." + ], + "cup": [ + "A cup is a cylindrical object with a base and a rim.", + "A cup is a small container with a rim at the top and a base at the bottom, typically used to hold liquid.", + "A cup is a small, typically cylindrical container used to hold liquid.", + "A cup is a small, open container used for drinking.", + "A cup has a round shape and a handle.", + "A cup has a base, a bowl, and a handle.", + "A cup is a small cylindrical container typically used to hold liquid.", + "A cup is a container with a handle and a lip, used to hold liquids.", + "A cup generally has a concave base and a flared rim.", + "A cup is a small bowl with a handle that is used to hold hot or cold drinks." + ], + "trophy cup": [ + "A trophy cup is a trophy in the shape of a cup.", + "A trophy cup is typically a large, ornate cup made of metal or stone, often with handles on either side.", + "A trophy cup is a metal cup with a handle on one side and a base on the other.", + "A trophy cup is a type of cup that is awarded as a trophy.", + "A trophy cup is a metal or silver cup that is used to award someone for winning a competition.", + "A trophy usually has a bowl- or cup-shaped top on a tall stem.", + "A trophy cup is a cup shaped trophy that is often given as an award.", + "A trophy cup looks like a cup with a trophy on top of it.", + "A trophy cup typically has a large base that gradually tapers up to a narrower top.", + "A trophy cup is usually a gold or silver cup on a pedestal." + ], + "cupboard": [ + "A cupboard is a tall, narrow piece of furniture that is used for storage.", + "A cupboard is a tall piece of furniture with doors and shelves inside.", + "A cupboard is a storage area that has shelves and doors.", + "A cupboard is a piece of furniture with doors and shelves that is used for storing food, dishes, and other household items.", + "A cupboard is a cabinet that is used for storage.", + "A cupboard usually has shelves inside of it and a door that opens and closes.", + "A cupboard is a piece of furniture with one or more doors that is used to store things.", + "A kitchen cupboard is a rectangular box made of wood, metal, or plastic, with a door, used for storing dishes, food, or other items.", + "A typical cupboard is a rectangular box-like piece of furniture with one or more doors and shelves, used for storing various items.", + "A cupboard is a cabinet with shelves and doors used for storing dishes, glasses, or other items." + ], + "cupcake": [ + "A cupcake is a small cake that is usually frosted and decorated.", + "A cupcake is a small cake that is intended to serve one person.", + "A cupcake is a small, portable cake that is served without utensils.", + "A cupcake is a small cake that is intended to serve one person.", + "A cupcake is a small, individual cake that is baked in a cup-shaped mold.", + "A cupcake is a small cake that is designed to be eaten in one bite.", + "A cupcake is a small cake that is baked in a cup-shaped pan and is usually frosted.", + "A cupcake is a small cake that is baked in a cup-shaped pan and is usually frosted.", + "A cupcake is a small cake that is meant to be eaten by one person.", + "A cupcake is a small cake with frosting on top." + ], + "hair curler": [ + "A hair curler generally consists of a cylindrical rod that is heated, and into which the user wraps their hair.", + "A hair curler is a tool that is used to curl hair.", + "A hair curler typically has a cylindrical barrel with a handle attached.", + "A hair curler is a small, cylindrical device that is used to curl hair.", + "A hair curler typically consists of a cylindrical barrel with a handle attached.", + "A hair curler typically has a cylindrical barrel with a handle.", + "A curling iron, also known as a curling tong, is a styling tool used to curl hair around a metal barrel.", + "A hair curler is a small, rod-shaped device that is used to curl hair.", + "A hair curler is a small mechanical device that is used to curl hair.", + "A hair curler is a small device that can be used to curl hair." + ], + "curling iron": [ + "A curling iron is a metal rod with a clamp on one end and a heating element on the other end.", + "A curling iron has a thin, rod-like barrel with a spiral shape.", + "A curling iron typically has a long, cylindrical barrel with a handle attached.", + "A curling iron is a rod with a curved, spiral tip that is heated and used to curl hair.", + "A curling iron is a small metal rod with a heating element inside and a curved, clamshell-like exterior.", + "A curling iron consists of ahandle with a clamp at one end and a barrel at the other.", + "A curling iron looks like a hair curler, with a cylindrical barrel that is heated.", + "A curling iron is a metal rod with a curling iron on one end and a handle on the other.", + "A curling iron is a cylindrical metal rod with a grip on one end and a rounded ceramic or metal barrel on the other end.", + "A curling iron is a small metal rod that is used to curl hair." + ], + "curtain": [ + "A curtain is a piece of fabric that is hung from a window or door.", + "A curtain looks like a piece of fabric that is hung from a rod or wire.", + "A curtain is a piece of cloth that is used to cover a window or door.", + "A curtain is a piece of cloth that hangs from a window or door.", + "A curtain is a piece of cloth that is hung over a window or door to provide privacy or block light.", + "A curtain is a piece of cloth that is hung from a window or door to block out light or fire.", + "A curtain can be made of many different materials, but is most often a cloth.", + "A curtain is a piece of cloth that is hung from a rod or track to cover a window or door.", + "A curtain is a piece of fabric that is hung from a window or door to block out light or to divide a room.", + "A curtain is a piece of cloth that is used to block out light or to divide a room." + ], + "cushion": [ + "A typical cushion is a pads of stuffed fabric, which can be used either as a seat or as a decoration.", + "A cushion is usually a small, pad-like object that is used for comfort or support.", + "A cushion is a soft, flat object that is used to support the body or to make a surface more comfortable.", + "A cushion is a piece of soft material that is used to pad something or to make it more comfortable.", + "A cushion is a soft, flat bag filled with air or padding, such as feathers, foam rubber, or cloth.", + "A cushion is a soft, padded pad that is used to support the body or head.", + "A cushion is a piece of soft material that is used to fill an empty space or to make something more comfortable.", + "A cushion is a stuffing for a cover, used to pad furniture or upholstery.", + "A cushion is a soft, flat bag filled with air or feathers.", + "A cushion is usually a fluffy, soft, rectangular or square piece of fabric that is used as a decoration or as a comfortable place to sit or recline." + ], + "cylinder": [ + "A cylinder is a shape with two circular ends and straight sides.", + "A cylinder is a geometric shape with two circular bases that are perpendicular to a straight central axis.", + "A cylinder looks like a circular pipe.", + "A cylinder is a three-dimensional object that has two parallel bases that are circular in shape, and a curved surface connecting the bases.", + "A cylinder is a solid three-dimensional figure with two parallel bases that are circles.", + "A cylinder is a three-dimensional figure with two parallel bases that areCongruent circles.", + "A cylinder is a geometric shape with two circular faces and straight, parallel sides.", + "A cylinder is a three-dimensional object with two circular bases connected by a curved surface.", + "A cylinder is a geometric shape with two congruent, parallel bases connected by a curved surface.", + "A cylinder is a three-dimensional solid that has two parallel, congruent bases that are circular in shape and are connected by a curved surface." + ], + "cymbal": [ + "A cymbal is a circular metal plate that is struck with a stick or mallet to produce a sound.", + "A cymbal is a round, metal plate that is used as a percussion instrument.", + "A cymbal is a metal disk that is struck with a drumstick or mallet to create a loud, ringing sound.", + "A cymbal is a thin, round piece of metal that is struck with a stick or mallet to create a sharp, clanging sound.", + "A cymbal is a thin, circular piece of metal that is struck with a drumstick or mallet to produce a sound.", + "A cymbal is a thin, circular piece of metal that is struck with a drumstick or mallet to produce a crashing sound.", + "A cymbal is a musical instrument made of metal that is played by hitting it with a stick or by hitting it with your hand.", + "A cymbal is a percussion instrument made of metal.", + "A cymbal looks like a circular, metal plate with a raised lip around the edge.", + "A cymbal is a thin metal disk with a raised edge that is used as a percussion instrument." + ], + "dagger": [ + "A dagger is a small, sharp knife that is often used as a weapon.", + "A dagger is a small knife with a sharp, pointed blade.", + "A dagger has a sharp point and a sharp edge.", + "A dagger is a small, sharp knife that is typically used for stabbing.", + "A dagger is a small, sharp blade that is typically less than 12 inches in length.", + "A dagger is a small knife with a sharp point and a metal blade.", + "In general, a dagger is a short, thin blade with a pointed tip.", + "A dagger is a small knife with a pointed blade.", + "A dagger is a knife with a sharp, pointed blade.", + "A dagger is a small knife with a pointed blade." + ], + "dalmatian": [ + "A dalmatian is a black and white spotted dog.", + "A dalmatian is typically a large dog with a short coat of black spots on a white background.", + "Dalmatians have short, stiff, dense coats of black and white fur.", + "A dalmatian is a large dog with a spotted coat.", + "A dalmatian is a black and white spotted dog.", + "A dalmatian is a medium-sized, short-haired breed of dog with black or liver-colored spots on a white background.", + "A dalmatian is a medium-sized dog with a short, stiff coat of black and white spots.", + "A dalmatian is a short-haired dog with a black-and-white coat of polka dots.", + "A dalmatian is a white dog with black spots.", + "A dalmatian is a white dog with large black spots." + ], + "dartboard": [ + "A dartboard is a circular board with numbers and sections of different colors.", + "A dartboard typically has a circular shape and is divided into sections that are colored differently.", + "A dartboard is a circular board with numbers and other markings on it.", + "A dartboard is a circular board with numbered sections that is used for the game of darts.", + "A dartboard is a circular board with a number of radial sections that are numbered from 1 to 20.", + "A dartboard typically has a round shape and is divided into sections that are each assigned a different numerical value.", + "A dartboard is a round board with a numbered surface on which darts are thrown.", + "A dartboard is a circular board with equal segments divided by Dartboards are used to play a variety of darts games.", + "A dartboard is a circular board with numbered sections from 1 to 20.", + "A dartboard looks like a large, circular board with a number of evenly spaced sections." + ], + "date (fruit)": [ + "A date (fruit) is small, and typically brown or red.", + "A date typically has a brown, paper-like skin and is oval or oblong in shape.", + "The exterior of a date is brown and wrinkled, while the interior is soft and chewy with a sweet taste.", + "A date is a small, brown, oval-shaped fruit.", + "A date (fruit) is a small, sweet fruit that grows on a date palm.", + "A date is a small, dark brown to black fruit that grows on date palms.", + "A date is typically a brown, oblong fruit with a wrinkled skin.", + "A date is a reddish-brown, oval fruit that grows on a date palm.", + "A date (fruit) looks like a small, brown, pear-shaped fruit with a pitted surface.", + "A date is a small, brown, oval fruit." + ], + "deck chair": [ + "A deck chair is a chair with a slatted seat and back, designed to be used outdoors.", + "A deck chair is a folding chair with a slanted back and seat.", + "A deck chair is a chair that is typically placed on a deck or patio.", + "A deck chair is a chair that is meant to be used outdoors, usually on a deck or porch.", + "A deck chair typically has a slatted wood frame and canvas fabric seat.", + "A deck chair typically has a wooden or metal frame with a canvas or fabric seat and backrest.", + "A deck chair is a chair with a seat, back, and legs, designed for outdoor use.", + "A deck chair is a light, portable chair with a folding frame, typically used outdoors.", + "A deck chair generally has a wooden or metal frame with a fabric seat and backrest.", + "A deck chair is a chair with a slanted seat and back, designed to be used outdoors." + ], + "deer": [ + "A deer is a mammal with four legs and hooves.", + "A deer is a four-legged mammal that typically has a brown coat and white underside.", + "A deer is a hoofed mammal with brown fur.", + "A deer is a four-legged mammal with brown fur and antlers.", + "The deer is a four-legged animal with a long neck and a short tail.", + "A deer is a four-legged mammal with hooves.", + "A deer is a four-legged mammal with antlers on its head.", + "Deer are quadrupeds with hooves.", + "A deer is a four-legged mammalian herbivore that generally has a reddish-brown coat.", + "A deer has a long neck, four legs, and a tail." + ], + "dental floss": [ + "A dental floss is a thin, flexible thread that is used to clean between teeth.", + "A dental floss is a thin cord made of nylon, polyethylene, or Teflon that is used to clean the spaces between teeth.", + "A dental floss is a long, thin thread that is used to clean the spaces between teeth.", + "A dental floss is a long, thin strand of nylon or silk that is used to clean the gaps between teeth.", + "A dental floss is a string-like material used to clean the spaces between teeth.", + "A dental floss looks like a long, thin piece of string.", + "A string of floss typically measures about 18 inches long.", + "A dental floss is a thin, flexible filament that is used to clean the spaces between teeth.", + "Dental floss is a thin strands of material, usually made from nylon, that is used to remove plaque and food from teeth.", + "A dental floss is a thin, flexible strand of material used to remove plaque and food debris from teeth." + ], + "desk": [ + "Most desks are rectangular with four legs.", + "A desk is a piece of furniture with a flat surface and usually four legs.", + "Most desks are rectangular with four legs, although there are many variations.", + "a desk is a flat surface with four legs, often used for writing or working on a computer.", + "A desk is a piece of furniture with a horizontal surface that is used for writing, reading, or working at a computer.", + "A desk typically has four legs and a flat surface.", + "A desk is a table with a flat surface and four legs.", + "A desk usually has four legs, a flat surface for writing or working, and drawers or shelves for storing materials.", + "A desk traditionally has four legs, a flat surface, and drawers.", + "A desk typically has four legs and a flat surface." + ], + "detergent": [ + "Powder detergents are usually bulky, heavy, and graying with time.", + " and smells likeA detergent has a soapy, foamy texture and usually has a pleasant smell.", + ", and what it doesA detergent is a cleanser that is used to remove dirt and grime.", + "\nA detergent typically consists of a surfactant, abuilder, a boosters, and chelating agents.", + "A detergent typically consists of a surfactant, a builder, and a stabilizer.", + "A detergent is typically a white or pale-colored powder or liquid.", + " and how it feelsDetergents are usually in liquid form and have a soapy consistency.", + "A detergent looks like a thick, viscous liquid.", + "A detergent is typically a clear or pale yellow liquid with a thick consistency.", + "A detergent looks like a thick, soupy liquid." + ], + "diaper": [ + "A diaper consists of an inner absorbent layer surrounded by an impermeable outer layer.", + "A diaper is an absorbent garment that is worn by a baby or young child to absorb urine and feces.", + "A diaper usually has a waterproof outer layer and a soft inner layer.", + "A diaper generally consists of an absorbent pad that is surrounded by a waterproof material.", + "A diaper is a garment that is worn by infants or young children to absorb and contain their urine and feces.", + "A diaper is a absorbent garment that is worn by infants, children who are incontinent, or adults with incontinence.", + "A diaper is a rectangular piece of fabric with two holes for the legs and an open space in the middle for the baby's bottom.", + "A diaper is a absorbent garment that is worn by infants and young children to absorb and contain urine and feces.", + "A diaper is a type of underwear that helps to catch urine and feces.", + "A diaper is a disposable absorbent garment that is worn by infants, toddlers, and children who are not yet potty trained." + ], + "diary": [ + "A diary typically contains a person's thoughts, feelings, and daily experiences.", + "A diary is a book with pages that are divided into days.", + "A diary is a private journal where people can write about their thoughts, feeling, and experiences.", + "A diary usually has a softcover and pages that are lined.", + "A diary is a book with pages that are numbered consecutively.", + "A diary can have any appearance, as it is simply a book in which to write.", + "A diary may be a book with blank pages for the writer to record daily thoughts, or it may be a digital program that allows the user to record and store thoughts electronically.", + "A diary typically contains a person's daily thoughts and activities.", + "A diary is a book with evenly spaced pages, usually lined, where a person can write down events, thoughts, or feelings in chronological order.", + "A diary may be a handwritten book, or an online journal." + ], + "die": [ + "A die is a cube with six faces, each of which has a different number of dots on it.", + "A die is a small cube that has six faces.", + "A die typically looks like a small cube with six sides.", + "A die is typically a small, cubical piece of material, such as plastic or metal, with six faces.", + "A die is typically a small, cube-shaped object that is used for gambling or other games of chance.", + "A die is a small cube with six faces.", + "A die is a small cube that has six flat sides.", + "A die is a small cube that has six faces.", + "A die is a small, cube-shaped object that has different numbers, symbols, or pictures on each of its six sides.", + "A die is a small, cube-shaped object that is used for gambling or other games of chance." + ], + "dinghy": [ + "A dinghy is a small, light boat that can be rowed or sailed.", + "A dinghy is a small open boat, often propel.", + "A dinghy is a small, lightweight boat that is typically used for pleasure trips or as a lifeboat on larger vessels.", + "A dinghy is a small, light boat, often used for transporting people or goods from one place to another.", + "A small boat that can be rowed or sailed, typically with two or three seats.", + "A dinghy is a small boat, usually less than 12 feet long.", + "A dinghy is a small, lightweight boat, typically under 8 feet in length.", + "A dinghy is a small boat, typically with a pointed bow and stern and a flat bottom.", + "A dinghy is a small boat that is often used for recreational purposes, such as sailing or rowing.", + "A dinghy is a small boat that is often used as a lifeboat on larger vessels." + ], + "dining table": [ + "A dining table typically has four legs and a flat surface.", + "A dining table is a table in a room where people eat.", + "A dining table is a table that is used for eating.", + "A dining table is usually a rectangular or oval shape with a flat surface.", + "Most dining tables are either rectangular or round, and seat four to eight people.", + "A dining table is a table that is used for eating.", + "A dining table has a flat surface with four legs.", + "A dining table is a table that people eat at.", + "A typical dining table has four legs and a flat surface.", + "A dining table is a table where people eat meals." + ], + "tux": [ + "A tuxedo is a formal wear staple for men.", + "A tuxedo is typically a black suit with a white shirt and a black bow tie.", + "A tuxedo is a kind of formalwear for men.", + "A tuxedo is a formal men's dress that typically includes a jacket with satin lapels, trousers with a matching satin stripe down the outside of each leg, and a bow tie.", + "A tuxedo is a formal suit typically worn by men.", + "A tuxedo is a formal suit worn by men, typically consisting of a black jacket and pants, a white shirt, and a black bow tie.", + "A tux is a formal suit that is typically black and has a button-up shirt with a white collar.", + "A tuxedo is a formal dress code for men that consists of a black suit jacket and trousers with a white dress shirt and bow tie.", + "A tuxedo is a form of formal dress typically worn by men.", + "A tuxedo is a formal dress code for men that consists of a black suit with a white shirt and either a black tie or bow tie." + ], + "dish": [ + "When describing a dish, one might say that it is \"a heaping pile of steaming mashed potatoes, fresh green beans, and thick slices of roasted turkey breast, smothered in rich, creamy gravy.", + "\nA dish is typically a shallow, concave vessel that is used for holding food.", + "A dish can look like many things, it can be a plate, a bowl, a cup, or a tin.", + "A dish is a small, shallow bowl used for holding food.", + "If a dish is well-made, it will look pleasing to the eye.", + "A dish can vary in appearance depending on what it is.", + "When describing a dish, one might say that it is \"hearty,\" \"satisfying,\" or \"filling.", + "A dish can look like many things.", + " requiredA dish can look like many things, but typically it is a small, shallow bowl used for eating food.", + "A dish can look like many things, but typically it is a round or oval shape with a flat bottom and raised sides." + ], + "dish antenna": [ + "A dish antenna looks like a large, shallow dish (or bowl) with a small, round antenna in the center.", + "A dish antenna is a type of antenna that is often used in satellite communications.", + "A dish antenna is a shaped reflector antenna used to focus radio waves in a particular direction.", + "A dish antenna is typically a parabolic reflector, which is a bowl-shaped antenna that reflects the signal in a specific direction.", + "A dish antenna looks like a large, concave satellite dish.", + "A dish antenna is a type of directional antenna that is primarily used for transmitting or receiving radio signals from a particular direction.", + "A dish antenna is a type of antenna that is often used in radio communications.", + "A dish antenna has a parabolic shape and is usually made of metal.", + "A dish antenna is a parabolic reflector antenna used to send and receive radio waves.", + "An antenna dish is a parabolic reflector used to direct radio waves in a particular direction." + ], + "dishrag": [ + "A dishrag is a small, relatively thin piece of fabric that is used for cleaning dishes.", + "A dishrag is a rectangular piece of cloth, usually made of cotton, used for washing dishes.", + "A dishrag is a small piece of cloth that is used to scrub dishes clean.", + "A dishrag is a piece of cloth that is used to wash dishes.", + "A dishrag is typically a small, rectangular piece of fabric with a loop on one end.", + "A dishrag is a small piece of fabric, usually made from cotton, that is used to clean dishes.", + "A dishrag is typically a rectangular or square piece of cloth, often made of cotton or another absorbent material, that is used for washing dishes.", + "A dishrag is usually a small, rectangular piece of fabric, often made of cotton, with a loop of fabric attached to one end so that it can be hung up to dry.", + "A dishrag traditionally is a small rectangular piece of either cotton or other absorbent fabric that is used for drying dishes.", + "A dishrag is a piece of cloth that is used to clean dishes." + ], + "dishtowel": [ + "A dishtowel is a small, rectangular piece of cloth made of absorbent fabric like cotton.", + "A dishtowel is a rectangular piece of absorbent fabric, usually cotton, linen, or terry cloth, used for drying dishes, utensils, and hands.", + "A dishtowel is a cloth that is used to dry dishes.", + "A dishtowel is a small towel that is used to dry dishes.", + "A dish towel is a small towel that is used to dry dishes.", + "A dishtowel typically looks like a small towel with a loop on one end so that it can be hung up.", + "A dishtowel is a small towel that is typically used to dry dishes.", + "A dishtowel is a rectangular piece of fabric, typically made from cotton, linen, or terry cloth, used for drying dishes.", + "A dish towel is a small towel that is used to dry dishes.", + "A dishtowel is a small towel that is used to dry dishes." + ], + "dishwasher": [ + "A dishwasher is a rectangular appliance that is typically installed underneath a kitchen counter.", + "A dishwasher typically has a stainless steel exterior, and a rack inside that holds dishes.", + "A dishwasher usually has a stainless steel exterior, and a tub inside that is made of either plastic or stainless steel.", + "A dishwasher typically consists of a metal tub, a heating element, a water supply and a drain.", + "A dishwasher typically consists of a metal tub with a heating element and a spray arm.", + "A dishwasher is a white box that sits on your counter and has a door that opens and closes.", + "A dishwasher is a rectangular box that has a door on the front.", + "A dishwasher is a household appliance typically used to wash dishes.", + "A dishwasher typically consists of a metal tub with a heating element at the bottom and a spray arm that spins around to shoot water at the dishes.", + "A dishwasher typically consists of a metal tub, a spray arm, a filter, and a detergent dispenser." + ], + "dishwasher detergent": [ + "A dishwasher detergent is a whitish powder that is dissolved in water to form a thick, soapy solution.", + "A dishwasher detergent is a white powder.", + "A dishwasher detergent is a white powder that is mixed with water to form a soapy solution.", + "Powdery, granular, or liquid.", + "A dishwasher detergent is a powdery or gel substance that is added to water to clean dishes.", + "A dishwasher detergent typically looks like a powder, pellet, or gel.", + "Dishwasher detergent is usually a powder, although there are also some gel and tablet detergents available.", + "Powder dishwasher detergent is granular and doesn't dissolve easily in water.", + "There are many different types of dishwasher detergent, but they generally look like either a powder or a gel.", + "A dishwasher detergent is a white or pale-blue powder that is dissolved in water to form a thick, soapy solution." + ], + "dispenser": [ + "A dispenser is a machine that stores and dispenses products, typically food or drink, in a controlled manner.", + "A dispenser is a small device that is used to dispense a small amount of liquid.", + "A dispenser is a machine that provides a particular product, typically a food or beverage, on demand.", + "A dispenser is a small, plastic device that is attached to the side of a water bottle.", + "A dispenser is a device that stores and dispenses a product.", + "A dispenser is a device that stores and dispenses a product.", + "A dispenser is a device that stores and dispenses a product.", + "A dispenser is a device that stores and dispenses something, typically in a controlled manner.", + "A dispenser is a small, usually plastic device that stores and dispenses liquids or other substances in small amounts.", + "A dispenser is a device that stores and releases a product." + ], + "diving board": [ + "A diving board looks like a long, thin board that tilts up at the end.", + "A diving board is a long, thin board that is held up at one end by a metal frame.", + "A diving board is a narrow board that projects out from the edge of a swimming pool.", + "Most diving boards are made of fiberglass with a padded surface.", + "A diving board is a small platform, usually made of wood, metal, or fiberglass, that is attached to the side of a swimming pool.", + "A diving board is a long, narrow board that is attached to a swimming pool deck.", + "A diving board is a flat piece of wood or fiberglass that is attached to the side of a pool.", + "A diving board is a flat, narrow board that is attached to the side of a swimming pool.", + "A diving board is a long, narrow board that is attached to a platform at one end and hangs over the edge of a pool at the other end.", + "A diving board is a long, thin board that is attached to a swimming pool." + ], + "Dixie cup": [ + "A Dixie cup is a small paper cup that is used for drinking.", + "A Dixie cup is a small paper cup that is used for drinking.", + "A Dixie cup is a small paper cup that is often used for drinking fluids or for holding small objects.", + "A Dixie cup is a small paper cup that is usually used for drinking.", + "A Dixie cup is a small paper cup that is usually used for drinking.", + "A Dixie cup is a small paper cup that is about 3 inches tall and has a cylindrical shape.", + "A Dixie cup is a small paper cup that is typically used for drinking.", + "A Dixie cup is an cup made of paper.", + "A Dixie cup is a small paper cup that is typically used for drinking water or other beverages.", + "A Dixie cup is a small paper cup, often used for drinking water or holding small amounts of liquid." + ], + "dog": [ + "A dog is a four-legged mammal with fur.", + "Most dogs have four legs, a tail, and a head with furry ears.", + "Dogs are typically four-legged creatures with furry coats and wagging tails.", + "A dog typically has four legs, a tail, and fur.", + "A dog has four legs, a tail, and fur.", + "A dog is a four-legged mammal with pointed ears, a long nose, and a bushy tail.", + "A dog typically has four legs, a tail, and fur.", + "A dog has four legs, a tail, and a head with a nose and ears.", + "A dog has four legs, a tail, and a head with a Nose and two ears on top.", + "A dog is a mammalian vertebrate of the canine family, characterized by its non-prehensile tail, fourSkye legs, and sensitive snout." + ], + "dog collar": [ + "A dog collar is a strap of leather, fabric, or metal that is placed around the neck of a dog.", + "A dog collar typically has a metal ring to attach a leash, and a band of fabric, metal, or plastic that goes around the dog's neck.", + "A dog collar is made of a strip of fabric or leather that goes around a dog's neck and buckles in the back.", + "A dog collar is generally a strap of leather, nylon, or metal that fastens around the neck of a dog and is used to restrain, identify, or protect the dog.", + "A dog collar is a piece of cloth or leather that is worn around the neck of a dog.", + "A dog collar is a ribbon of fabric, leather, or plastic that is worn around the neck of a dog.", + "A dog collar is a band of material that fits around the neck of a dog and is used to identify the animal or to regulate its behavior.", + "A dog collar is a piece of fabric that goes around a dog's neck and is often used to attach a leash.", + "A dog collar is typically a strip of fabric or leather that fits around a dog's neck and secures with a buckle or a snap.", + "A dog collar is a piece of material that goes around a dog's neck and is usually adjustable." + ], + "doll": [ + "A doll is a figurine that is typically used by children as a toy.", + "A doll is a small figure of a human, often used by children as a toy.", + "A doll is a small figure of a human, often with a porcelain face, that is used as a child's toy.", + "A doll is typically a small figure that represents a human, animal, or inanimate object.", + "A doll is a figure of a person, typically a girl, made from fabric, plastic, or wood.", + "A doll is a small, portable human figure made from materials such as cloth, plastic, or wood.", + "Most dolls have a head, arms, and legs made of plastic, vinyl, or another durable material.", + "A doll is an anthropomorphic toy that is designed to look like a human being.", + "A doll is a small figure of a person, usually with a head and arms and legs made of plastic or cloth.", + "A doll is a small, usually humanoid toy designed to look like a child, adult, or animal." + ], + "dollar": [ + "A dollar is a coin that is worth one dollar.", + "A dollar is a rectangular piece of paper with pictures of past presidents and the words \"United States of America\" written on it.", + "A dollar is a silver coin with a smooth, plain edge.", + "A dollar bill is about six inches long and three inches wide.", + "A dollar is a coin that is worth one dollar.", + "One dollar is a coin that is circular in shape.", + "A dollar is a flat, thin, round piece of metal with a smooth surface.", + "A dollar is a paper note with a portrait of George Washington on the front and the Great Seal of the United States on the back.", + "A United States dollar bill is a one-dollar bill (paper money) featuring George Washington in the center.", + "A dollar is a coin that is worth one dollar." + ], + "dollhouse": [ + "A dollhouse is typically a small model of a house.", + "A dollhouse is a small model of a house that is used to play with dolls.", + "A dollhouse is a miniature model of a house.", + "A dollhouse is a miniature model of a house that is used as a toy for children.", + "A dollhouse is a miniature construction that looks like a house.", + "A dollhouse looks like a miniature version of a house, usually with several floors,rooms, and furniture.", + "A dollhouse looks like a small replica of a house.", + "A dollhouse typically looks like a miniature version of a real house.", + "A dollhouse looks like a small house that is made for dolls.", + "A dollhouse is a small replica of a house that is used to play with dolls." + ], + "dolphin": [ + "A dolphin is a mammal that lives in the sea.", + "A dolphin is a mammal with a long nose and a sleek body.", + "Most dolphins are gray, but some have pink, yellow, or white patches.", + "A dolphin is a mammal that lives in the water.", + "A dolphin typically has a sleek, gray body with a white belly.", + "A dolphin is a mammal that lives in the water.", + "A dolphin is a sea mammal that typically has a long nose, a sleek body, and flippers.", + "Dolphins are gray, with a white belly.", + "A dolphin is a mammal that lives in water.", + "A dolphin is a marine mammal that is closely related to whales and porpoises." + ], + "domestic ass": [ + "A domestic ass looks like a donkey.", + "A domestic ass looks like a donkey.", + "A domestic ass, or donkey, is a mammalian equid that is the domesticated form of the African wild ass.", + "A domestic ass is a mammal of the equidae family, which includes horses, donkeys, and zebras.", + "A domestic ass is a four-legged mammal with a long head, donkey-like ears, and a short mane.", + "A domestic ass is a four-legged mammal that is members of the Equidae family.", + "A domestic ass, or donkey, looks like a horse but is smaller and has longer ears.", + "A domestic ass looks like a horse with long ears.", + "A domestic ass, or donkey, is a domesticated member of the horse family, Equidae.", + "A domestic ass is a donkey that has been domesticated, or tamed, by humans." + ], + "doorknob": [ + "A doorknob is a handle on a door that is used to open and close the door.", + "A doorknob is typically a circular piece of metal or plastic that is attached to a door.", + "A doorknob is a round or oval-shaped handle that is attached to a door.", + "A doorknob typically has a round or oval shape, and is made out of metal, plastic, or ceramic.", + "A doorknob typically consists of a round or oval-shaped knob attached to a rosette - a decorative backplate.", + "A doorknob is a small, round object that is attached to a door.", + "Most doorknobs are round and have a ridged surface for gripping.", + "A doorknob is a knob on a door that is used to open and close the door.", + "A doorknob is a knob on a door that is used to open and close the door.", + "A doorknob includes a round or oval-shaped knob attached to a stem." + ], + "doormat": [ + "A doormat can be a rectangular or oval shape and is generally made out of an absorbent material like cotton or microfiber.", + "A doormat is a mat that is placed at the entrance of a door.", + "Most doormats are flat and roughly rectangular, with a coarser pile on one side for scrubbing dirt off shoes and a smoother side for wiping.", + "A doormat is a piece of fabric or matting that is placed at the entrance of a doorway.", + "A doormat is a mat placed at the entrance of a door.", + "A doormat is a piece of fabric or material that is used to wipe your feet off when you enter a home.", + "A doormat is a thin mat that is placed at the entrance of a door to help people wipe their feet before entering a home or building.", + "A doormat is usually a long, rectangular mat that is placed in front of a door.", + "A doormat is a mat that is placed at the entrance of a door to wipe one's feet on.", + "A doormat is an item of floor covering placed at the entrance of a room or building, typically found in front of external doors." + ], + "doughnut": [ + "A doughnut is a type of fried dough confection or dessert food.", + "A doughnut is a type of fried dough confection or dessert food.", + "A doughnut is a small, round, fried cake made from dough.", + "Most doughnuts are shaped like a flattened ring, with a hole in the center, and are deep-fried.", + "A doughnut is a small, fried cake that is typically shaped like a ring.", + "A doughnut is a vaguely spheroid pastry that has a hole in the center so that it can be easily grasp with one's hand, and often has a sugary or custard filling.", + "A doughnut is a fried dough food that is shaped like a ring with a hole in the center.", + "A doughnut is a fried-dough pastry, typically shaped into a ring or a ball, and often coated with a sugary or chocolate icing.", + "A doughnut is a fried, ring-shaped pastry that is coated in a sugary or glazed topping.", + "A doughnut is a fried pastry that is commonly shaped like a ring with a hole in the center." + ], + "dove": [ + "A dove typically has white feathers and a long, slender neck.", + "A dove is a simple bird with a plump body and a small head.", + "A dove is a medium-sized bird with a slim body, long neck, and small head.", + "A dove is a small, thin bird with a long neck and a small beak.", + "A dove typically has white feathers and a long tail.", + "A dove is a white bird with a black beak.", + "A dove is a white bird with a long, thin neck.", + "A dove is a small, thin bird with a pointed beak.", + "A dove is a white bird with a long neck.", + "A dove is a kind of bird." + ], + "dragonfly": [ + "A dragonfly has a long thin body with two pairs of wings that are clear and look like they are made of cellophane.", + "A dragonfly is a flying insect that has a long body and two pairs of wings.", + "One type of dragonfly is called the common green darner.", + "A dragonfly is a large, flying insect with two pairs of wings.", + "Most dragonflies are brightly colored, with large compound eyes and long, slender abdomens.", + "A dragonfly is a flying insect that has a long, thin body and large wings.", + "A dragonfly is a type of insect that is characterized by its large eyes, big wings, and long body.", + "A dragonfly is a flying insect that has two large wings that are membranous and almost transparent.", + "A dragonfly is a flying insect that has a long, thin body and two pairs of wings.", + "A dragonfly is a flying insect that has a long slender body and two pairs of large transparent wings." + ], + "drawer": [ + "A drawer is a small rectangular box that is placed inside a piece of furniture.", + "A drawer is a piece of furniture that has a space for storing items.", + "A drawer is a small compartment that is built into a piece of furniture.", + "A drawer is a box-shaped container with a front panel that is designed to open and close.", + "A drawer is a piece of furniture that has one or more levels, and each level has one or more sections that open and close.", + "A drawer is a piece of furniture with a front, back, and sides, typically used for storing clothing, linens, or dishes.", + "A drawer is a piece of furniture with one or more drawers that can be pulled out and used for storing items.", + "A drawer is a rectangular object that is used to store items.", + "A drawer is a rectangular box that is inserted into a piece of furniture and used for storage.", + "A drawer is a piece of furniture that has one or more sections that open and close to store things." + ], + "underdrawers": [ + "An underdrawers is a type of underwear that covers the lower part of the body.", + "An underdrawers is a type of underwear that covers the lower part of the body.", + "An underdrawers is a type of garment that covers the lower body and is typically worn under other clothes.", + "An underdrawers is a type of underwear that covers the lower part of the body.", + "An underdrawers is a type of underwear that covers the lower part of the body.", + "An underdrawers is a piece of clothing that covers the lower part of the body.", + "An underdrawers is a piece of furniture that looks like a dresser, but is smaller in size.", + "Underdrawers look like a pair of shorts that extend down to the knees.", + "Underdrawers are usually knee-length shorts with an elastic waist.", + "An underdrawers is a piece of clothing that is worn under a dress or a skirt." + ], + "dress": [ + "A dress is typically a piece of clothing that is worn by women and girls.", + "A dress is a piece of clothing that typically covers the body from the waist to the knees or ankles.", + "A dress is a piece of clothing that is worn by women and girls.", + "A dress typically looks like a piece of clothing that is meant to be worn by a woman or girl.", + "A dress is a clothing item that typically covers the body from the waist to the knees or lower.", + "A dress is a garment typically worn by women or girls that consists of a skirt with an attached bodice (or a matching bodice giving the effect of a one-piece garment).", + "A dress is a garment designed to be worn by women or girls.", + "A dress is a piece of clothing that is worn by women and girls.", + "A dress is an article of clothing typically worn by women or girls that consists of a skirt with an attached bodice.", + "A dress is a garment that a woman or girl wears on her body." + ], + "dress hat": [ + "A dress hat is aHat that is worn by both men and women.", + "A dress hat has a soft, round crown and a brim that is turned up in the front and down in the back.", + "A dress hat is typically a formal hat worn by men, such as a fedora or top hat.", + "A dress hat is a hat that is worn by a man or a woman to dress up an outfit.", + "A dress hat is a small, round hat with a brim that is worn by women.", + "A dress hat is a type of hat that is typically worn by women.", + "A dress hat is typically a wide-brimmed, felt hat with a rounded crown.", + "A dress hat is a type of hat that is typically worn with clothing that is considered to be formal wear.", + "A fedora, homburg, or trilby.", + "A dress hat is a style of gentlemen's hat that is typically worn with a suit or tuxedo." + ], + "dress suit": [ + "A dress suit consists of a dress shirt with a button-down collar, a dress jacket, dress trousers, and a necktie.", + "A dress suit is a type of clothing that is worn by both men and women.", + "A dress suit typically includes a jacket and trousers with matching fabric, a shirt, a tie, and dress shoes.", + "A dress suit is a type of clothing typically worn by men on formal occasions.", + "A dress suit looks like a skirt and blouse or a dress.", + "A dress suit is a suit of clothes consisting of a matching jacket and trousers.", + "A dress suit is a suit made from dress fabric, usually wool.", + "A dress suit consists of a tailored jacket and trousers with matching fabric.", + "A dress suit is a suit consisting of a jacket and trousers that are cut to match.", + "A dress suit is a matching set of men's formal clothing, consisting of a dress coat and trousers." + ], + "dresser": [ + "A dresser typically has six drawers, with a knob or handle on each drawer.", + "A dresser is a piece of furniture that has drawers in it.", + "A dresser is a piece of furniture that typically has a series of drawers of varying sizes that are used for storing clothing.", + "A dresser is a piece of furniture that has several drawers in it.", + "A dresser is a piece of furniture that typically has a mirror, drawers, and a flat surface on top.", + "A dresser typically has several drawers of varying sizes.", + "A dresser looks like a tall piece of furniture with several drawers in it.", + "A dresser is a type of cabinet that is used for storing clothes.", + "A dresser is a piece of furniture that has a flat top and usually has a row of drawers.", + "A dresser typically has six drawers and may or may not have a cabinet." + ], + "drill": [ + "A drill typically has a cylindrical body with a handle attached to one end and a drill bit or driver attached to the other.", + "A drill looks like a machine with a rotating drill bit that is used to create holes in materials such as wood, metal, or stone.", + "A drill looks like a large cylindrical tool that is used to create holes in surfaces.", + "A drill is a tool with a rotating cutting bit that is used to make holes in hard materials, such as wood, metal, or stone.", + "A drill is a power tool that uses a rotating drill bit to create holes in materials such as wood, metal, or masonry.", + "A drill typically has a cylindrical body with a handle attached to one end and a drill bit attached to the other.", + "A drill consists of a chucked spindle that has drill bit attached to it.", + "A drill looks like a long metal rod with a pointed end.", + "A drill is usually a cylindrical object with a handle attached to one end and a drill bit attached to the other.", + "Most drills have a cylindrical shape and contain a rotating spiral drill bit." + ], + "drone": [ + "A drone is an unmanned aircraft.", + "A drone is a small, unmanned aircraft.", + "A drone typically looks like a small, remote-controlled airplane.", + "Drones are typically small, unmanned aircraft that are operated remotely by controllers.", + "A drone is a small, unmanned aircraft.", + "A drone typically looks like a small, remote-controlled airplane.", + "A drone is typically a small, quadcopter drone with four rotors.", + "A drone is a remotely controlled flying vehicle.", + "A drone typically looks like a small aircraft with rotors on each end.", + "A drone is a small, quadcopter aircraft." + ], + "dropper": [ + "A dropper is a small glass or plastic tube with a pointed end and a rubber top.", + "A dropper is a small, tube-like object that is used to dispense liquid in small amounts.", + "A dropper is a small tube with a rubber bulb at one end and a nozzle at the other.", + "A dropper is a small device that has a narrow tube and a small rubber bulb.", + "A dropper typically consists of a small tubular barrel, a plunger fitted into the barrel, and a nozzle attached to the barrel.", + "A dropper is a small, tube-like object with a nozzle on one end and a rubber bulb on the other.", + "A dropper is a small glass or plastic tube with a pointed end and a rubber bulb at the other end.", + "A dropper is a small tube with a pointed end and a rubber bulb at the other end.", + "A dropper has a glass or plastic body with a small opening at the top and a rubber bulb at the end.", + "A dropper is a small, long tube with a pointed end and a rubber bulb on the other end." + ], + "drum (musical instrument)": [ + "A drum is a typically cylindrical musical instrument with skin or plastic stretched over one or both ends.", + "There is no one answer to this question as drum kits can vary greatly in terms of size, shape, and configuration.", + "A drum is a cylindrical musical instrument with a resonant head on each end that is struck with a drumstick.", + "A musical instrument that looks like a drum has a membranophone with a skin stretched over an open frame.", + "A musical instrument played by hitting it with a stick or your hand.", + "A drum is a circular musical instrument typically made of wood or metal.", + "A drum is a round, often cylindrical, object that produces noise when hit with sticks, hands, or other implements.", + "Musical drums come in many shapes and sizes, but they all have a skin stretched over a cylindrical body.", + "Drums are usually large, cylindrical shape instruments.", + "A musical instrument played by striking a padded stick with the hand, typically produces a banging noise." + ], + "drumstick": [ + "A drumstick is a stick that is used to play the drums.", + "Drumsticks are long, thin pieces of wood with a slightly bulbous end.", + "A drumstick is a stick that is used to play a drum.", + "A drumstick is a thin, long, and straight Stick that is used to play the drums.", + "A drumstick is a thin stick that is used to hit a drum.", + "A drumstick typically has a long, cylindrical wood or metal shaft, with a round tip covered in felt or plastic.", + "A drumstick is a thin and long stick that is used to play the drums.", + "A drumstick is a skinny stick with a pointy end.", + "A drumstick is a rod with a cylindrical shape that is slightly flared at the top.", + "A drumstick typically has a long, cylindrical shaft with a rounded tip." + ], + "duck": [ + "A duck is a waterbird with a broad, flat bill.", + "A duck is a waterbird with a body shape that resembles a teardrop.", + "A duck is a small, swimming bird with webbed feet and a bill.", + "A duck has a long neck, a bill that curves downward, webbed feet, and wings that are smaller than its body.", + "A duck is a waterbird with a broad bill and webbed feet.", + "A duck is a medium-sized bird with a flat bill, webbed feet, and feathers that are stiff and dry.", + "A duck has a pointed bill, webbed feet, and a flattened body.", + "A duck looks like a bird with a long neck, webbed feet, and a bill.", + "A duck looks like a bird with a bill, webbed feet, and feathers.", + "A duck is a waterbird with a broad, flat bill." + ], + "duckling": [ + "A duckling looks like a miniature version of an adult duck.", + "A duckling is a baby duck.", + "A duckling is a small waterbird that typically looks like a miniature version of an adult duck.", + "A duckling is a baby duck.", + "A duckling is a small duck that is less than a year old.", + "A duckling is ababy bird that has not yet grown its feathers.", + "A duckling is a very young duck.", + "A duckling is a small duck that is usually born with brown and yellow feathers.", + "A duckling looks like a small, fluffy yellow bird.", + "A duckling is a small bird that looks like a miniature version of an adult duck." + ], + "duct tape": [ + "Duct tape is a type of tape with a cloth backing and a sticky adhesive.", + "A duct tape is a strong, thick, adhesive tape.", + "Duct tape looks like a silver tape that is sticky on one side.", + "A duct tape is a type of adhesive tape with a fabric backing.", + ".", + "A roll of duct tape is typically silver and has a length of about 12 yards.", + "A duct tape typically has a metallic backing and a sticky adhesive.", + "Duct tape is a type of sticky tape with a fabric backing.", + "Duct tape is a long, wide strip of sticky, silver tape.", + "A duct tape typically looks like a silver roll of tape." + ], + "duffel bag": [ + "A duffel bag is a bag with a cylindrical shape and two handles.", + "A duffel bag is a large, cylindrical bag made of sturdy fabric, typically with a top zipper closure.", + "A duffel bag is a typically cylindrical bag made of cloth, leather, or other materials, with a top that opens into a large main compartment.", + "A duffel bag is a type of bag that is typically cylindrical in shape and has a top that can be closed with a drawstring or zip.", + "A duffel bag is a large cylindrical bag made of a durable fabric, often with a shoulder strap.", + "A duffel bag is usually a large, cylindrical bag made of soft material with a zipper closure.", + "A duffel bag typically has a cylindrical shape and is made of a durable fabric, such as canvas.", + "A duffel bag is a bag made of softmaterial with a drawstring at the top.", + "A duffel bag typically has a cylindrical shape and is made from a durable fabric such as canvas.", + "A duffel bag is a canvass or nylon bag that is typically cylindrical in shape and has a drawstring closure." + ], + "dumbbell": [ + "A dumbbell is a handheld, weights that has a thicker middle portion, and two weights attached at each end.", + "A dumbbell is a weight that is held in the hand and usually has a weight on each end.", + "A dumbbell is a short, stout barbell with a heavy ball at each end.", + "A dumbbell is a type of weight that is lifted using both hands.", + "A dumbbell is a piece of equipment used in weight training that consists of a short barbell with weighted plates attached at each end.", + "A dumbbell is a two-ended weight with circular plates on each end.", + "A dumbbell is a short, thick bar with weights at each end that is used for lifting.", + "A dumbbell is a short, round, heavy piece of metal with a grip in the middle, used as a weight for exercise.", + "A dumbbell has a cylindrical shape and is often made of plastic or metal.", + "A dumbbell is a short, thick barbell with removable weight disks at each end." + ], + "dumpster": [ + "A dumpster is a large, heavy-duty container that is typically used to collect and dispose of trash or waste.", + ".", + "A typical dumpster is a large, metal trash container that is often rectangular in shape.", + "A dumpster is a large container that is typically used to collect trash or debris.", + "A dumpster is a large, typically metal container that is used to hold trash or other waste.", + "A dumpster is a large steel container that is used to collect trash.", + "A dumpster is a large container that is used to collect and haul away waste material.", + "A dumpster is a large, metal bin with a curved top and a flat bottom.", + "A dumpster is a large container usually found in the back of a commercial or industrial building.", + "." + ], + "dustpan": [ + "A dustpan is a small, scoop-shaped tool used to sweep up dust, dirt, and small debris.", + "A dustpan usually has a long handle and a shallow, slanted metal tray.", + "Most dustpans are roughly triangular in shape and have a short handle attached to one side.", + "A dustpan is a small, hand-held broom with a dustpan attached.", + "A dustpan looks like a small pan with a short handle.", + "A dustpan is a shallow pan with a long handle.", + "A dustpan is a small, handheld broom with a flat, metal pan attached to the end.", + "A dustpan is a handheld tool used for sweeping up small pieces of debris, such as dust, sand, and dirt.", + "A dustpan is a small, handheld broom used to sweep up small amounts of dirt and debris.", + "A dustpan is a flat, usually metal tool with a short handle." + ], + "eagle": [ + "Eagles are fairly large birds with large heads and beaks.", + "An eagle looks like a large, powerful bird with a hooked beak and large talons.", + "An eagle has a large, hooked beak and sharp talons.", + "An eagle has a large body with a brownish-black plumage.", + "An eagle has a large head with a white face and a black beak.", + "Eagles are large birds of prey with broad wings and a hooked beak.", + "An eagle has a large head with a brown and white feathered body.", + "An eagle is a large predatory bird with a strong hooked beak and powerful talons.", + "Eagles have large, powerful wings and golden-brown feathers.", + "An eagle is a large, powerful bird of prey with a distinctive call." + ], + "earphone": [ + "An earphone is a small headphone that is worn in the ear.", + "An earphone is a small speaker that is worn in or on the ear.", + "An earphone is a small, cylindrical device that is placed in the ear canal in order to hear sound.", + "Most earphones are small, plastic, and cylindrical.", + "Earphones are small speakers that fit inside your ear.", + "Earphones are small speakers that fit inside your ear.", + "An earphone is a small speaker that is worn in or on the ear.", + "Earphones are small speakers that fit inside the ear.", + "An earphone is a small speaker that you can wear in your ear.", + "An earphone is a small, portable speaker that can be plugged into a variety of devices, including computers, phones, and MP3 players." + ], + "earplug": [ + "An earplug is a small, soft piece of rubber or foam that is inserted into the ear canal to block out noise.", + "An earplug is a small, cylindrical piece of soft foam that is inserted into the ear canal to block out noise.", + "An earplug is a small, soft object that is inserted into the ear canal in order to block out noise or keep water out.", + "An earplug is a small, cone-shaped piece of soft foam that is inserted into the ear canal in order to block out noise.", + "An earplug is a cylindrical piece of soft foam that is inserted into the ear canal in order to block out noise.", + "An earplug is a small piece of foam or rubber that is inserted into the ear canal to block out noise.", + "An earplug typically is a small, cylindrical piece of foam that is inserted into the ear canal in order to block out noise.", + "An earplug is a small, soft, cylindrical object that is inserted into the ear canal in order to block out noise or water.", + "An earplug is a small, soft piece of material that is inserted into the ear canal in order to block out noise.", + "An earplug is a small, soft object that is shaped like a cone." + ], + "earring": [ + "An earring is a small piece of jewelry that is worn on the earlobe.", + "An earring typically consists of a piece of metal or other material attached to the earlobe.", + "An earring is a small piece of jewelry that is worn on the earlobe.", + "An earring is a piece of jewelry that is worn on the ear.", + "An earring is a small piece of jewelry that is worn on the earlobe.", + "An earring consists of a piece of metal or other material that is attached to the earlobe.", + "An earring is a small piece of jewelry that is worn on the earlobe.", + "A typically earring consists of a piece of metal or other material that is attached to the earlobe.", + "An earring is a piece of jewelry that is worn on the ear.", + "Some earrings are small hoops that go through the earlobe, while others are long and dangle down from the ear." + ], + "easel": [ + "An easel is a tall, three-sided frame that is used to support a canvas or board.", + "An easel is a stand that holds a canvas or other surface for painting, drawing, or displaying a work of art.", + "An easel is a stand that is used to support a canvas or board upon which an artist can paint or draw.", + "An easel is a frame that is used to support a canvas when painting.", + "An easel is an upright stand that is used to hold a canvas or frame so that it can be painted or drawn on.", + "An easel is a tall tripod-like stand that is used to support an artist's canvas.", + "An easel is an upright frame that is used to support a canvas or other object for display or for working on.", + ".", + "An easel is an upright frame used by artists to hold a canvas while they paint.", + "An easel is a three-legged stand that is used to support a canvas or other surface for painting or drawing." + ], + "eclair": [ + "An \u00e9clair is an oblong pastry made from choux dough filled with a flavored cream and topped with icing.", + "A French pastry, the \u00e9clair is made with choux pastry and is generally oblong, with a fluted shell.", + "An eclair is a oblong pastry made with choux dough filled with flavored cream and topped with icing.", + "A traditional eclair is an oblong pastry made from choux dough filled with a pastry cream and topped with icing.", + "An eclair is a long, thin pastry that is filled with whipped cream or custard.", + "An \u00e9clair is an oblong pastry with a choux dough filling, traditionally iced with a fondant icing.", + "An \u00e9clair is a type of French pastry which is long and thin, with a soft dough on the inside and a crispy dough on the outside.", + "An eclair is an oblong pastry made from choux dough filled with a cream and topped with icing.", + "An \u00e9clair is a type of pastry made from choux dough filled with a creamy filling.", + "An eclair is a long, thin pastry made from choux dough that is filled with cream and then coated with chocolate." + ], + "eel": [ + "An eel looks like a snake with a small head and a big body.", + "Eels are elongated, snake-like fishes with fin rays that range from 18-28.", + "An eel is a snake-like fish with a very long body.", + "An eel is a long, snake-like fish that can grow up to 4 feet in length.", + "An eel is a snakelike fish with a long, thin body and no scales.", + "An eel is a snake-like fish with very small scales.", + "Eels have long, snake-like bodies with fin-like appendages on either side.", + "An eel is a snake-like fish with a long, slim body and no scales.", + "Eels are long, thin fish with smooth skin.", + "An eel is a Snakelike fish that can range in size from six inches to six feet." + ], + "egg": [ + "An egg typically has a white and a yellowish-orange part.", + "A chicken egg is generally oval in shape and has a smooth, hard shells.", + "An egg is a small, round, white food that comes from a chicken.", + "An egg is white with a yellow yolk inside.", + "A chicken egg is typically oval with a smooth, pitted surface.", + "A chicken egg is typically oval and white, with a thin shell.", + "An egg is typically oval in shape and has a hard protective shell that encloses the egg white and the egg yolk.", + "A raw chicken egg is oblong and pale yellow.", + "A chicken egg is typically oval in shape and has a smooth, hardshell.", + "A chicken egg is typically white with brown spots on the shell." + ], + "egg roll": [ + "An egg roll is a small, rolled-up pancake that is typically filled with a savory filling and fried.", + "Egg rolls are usually made with flour wrappers and contain some sort of filling, which can include meat, vegetables, and/or noodles.", + "An egg roll is a Chinese dish that is made of a thin wheat flour skin wrapped around a filling of shredded cabbage, diced pork, and other ingredients.", + "An egg roll is a type of fried snack food consisting of a thin wheat flour wrappers filled with various savory ingredients.", + "Egg rolls are a type of fried Chinese pastry.", + "An egg roll looks like a small, rolling object.", + " and containedA egg roll is a fried roll with cabbage and pork inside.", + "A egg roll is a sub sandwich that is made with a flour tortilla.", + "An egg roll is a small, fried pastry that typically contains some type of filling, such as vegetables or meat.", + "An egg roll is a Chinese dish that consists of a wheat flour wrappers that is filled with a mixture of cabbage, pork, and other ingredients, and then fried." + ], + "egg yolk": [ + "An egg yolk looks like a small, yellow, round disc.", + "An egg yolk is a yellow, rounded organ that is found inside an egg.", + "An egg yolk is a yellow, spherical part of an egg that contains all of the egg's fat, protein, and vitamins.", + "A yolk is typically a yellowish color and is relatively round in shape.", + "An egg yolk is the yellow inner part of an egg that contains most of the egg's nutrients.", + "The egg yolk is the yellow part of an egg.", + "An egg yolk is a round yellow mass that contains the embryo of a chicken.", + "A yolk is the round, yellow part of an egg that contains all of the egg's fat and half of its protein.", + "An egg yolk is typically a bright yellow color and is spherical in shape.", + "An egg yolk is a yellow, spherical part of an egg." + ], + "eggbeater": [ + "A handheld eggbeater typically has two wire loops that rotate around a central axis, powered by a small crank.", + "An eggbeater is a utensil that is used to beat eggs.", + "An eggbeater is a tool that is used to whisk eggs.", + "an eggbeater is a kitchen utensil that is used to beat eggs.", + "An eggbeater is a small hand-operated kitchen tool used for mixing or beating substances such as eggs, cream, or soup.", + "An eggbeater is a kitchen utensil that is used to mix or beat eggs.", + "A manual eggbeater typically consists of a handheld cylindrical container with two wire loops that spin around in opposite directions when turned by a hand-crank.", + "It is a handheld kitchen utensil with two or more beaters that are rotated by a handle.", + "A kitchen eggbeater is a handheld tool used to mix or whisk liquids, typically egg whites or cream.", + "A hand-operated kitchen utensil with beaters that whirl around when the handle is turned, used for mixing ingredients such as eggs, cream, cake batter, etc." + ], + "eggplant": [ + "An eggplant is a large, dark purple fruit with a smooth skin.", + "An eggplant is a bulbous, dark purple fruit that grows on a vine.", + "An eggplant is a dark purple or greenish-black fruit that is shaped like an egg.", + "An eggplant is a purple or white fruit that is shaped like an egg.", + "An eggplant is typically a deep purple color and is shaped like an egg.", + "An eggplant is a fruit that is typically egg-shaped and has a dark purple skin.", + "An eggplant is a long, dark purple fruit with a smooth, glossy skin.", + "An eggplant is a fruit that is often mistaken for a vegetable.", + "An eggplant is a member of the nightshade family.", + "An eggplant is a fruit that is typically dark purple in color with a smooth, fleshy texture." + ], + "electric chair": [ + "An electric chair looks like a regular chair that has been modified to have straps to restrain the person sitting in it, and metal contraptions attached to the chair that will deliver the electric current.", + "An electric chair typically has a large, padded seat and a long backrest.", + "An electric chair looks like a regular chair with a large control panel attached to it.", + "An electric chair is a chair that has electric wires attached to it.", + "An electric chair is typically a heavy, wooden chair with thick straps that immobilize the legs, arms, and torso of the person sitting in it.", + "An electric chair has a high back with a hole in it and two metal prongs sticking out.", + "An electric chair is a large chair with straps and a metal headrest.", + "An electric chair looks like a normal chair with an attached seat.", + "An electric chair is a chair with a large, padded seat and a sturdy back.", + "An electric chair is a chair with a built-in electric device that can be used to administer the death penalty to condemned criminals." + ], + "refrigerator": [ + "A refrigerator is a stainless steel box that is about the size of a person.", + "A refrigerator is a household appliance that consists of a thermally insulated compartment and a heat pump that transfers heat from the inside of the fridge to its outside environment so that the inside of the fridge is cooled to a temperature below the ambient temperature of.", + "A refrigerator is typically a box shape with a door on the front.", + "A refrigerator is typically a white, metal box with a door that swings open.", + "A refrigerator typically looks like a metal box with a door.", + "A refrigerator is a large white box with a door.", + "A refrigerator typically has a metal exterior with a plastic or glass interior.", + "A refrigerator is a tall, white box with a door.", + "A refrigerator is a tall, box-shaped kitchen appliance with a door that opens to reveal shelves inside where you can store food.", + "A refrigerator typically has a metal or plastic outer case that encloses a cold compartment." + ], + "elephant": [ + "An elephant is a large mammal with a long trunk, big ears, and ivory tusks.", + "An elephant is a large mammal with a long trunk and big ears.", + "An elephant is a large, gray mammal with long trunk, big ears, and four stout legs.", + "An elephant is a large mammal with a long trunk, big ears, and gray skin.", + "An elephant is a large mammal with a long trunk, big ears, and gray skin.", + "In general, an elephant is a large, gray mammal with long trunk, big ears, and large tusks.", + "An elephant is a large land mammal with a long trunk, big ears, and gray skin.", + "An elephant is a large gray mammal with a long trunk, two big ears, and four legs.", + "Elephants are large mammals with grey or reddish-brown skin.", + "Elephants are very large animals with trunks." + ], + "elk": [ + "Elk are the second-largest land mammal in North America after the moose.", + "An elk is a large hoofed mammal that lives in North America and eastern Asia.", + "Elk are large, fast-running members of the deer family.", + "Elk are large, brown animals with long necks, big antlers, and long legs.", + "An elk is a large mammal in the deer family.", + "Elk are very large deer, similar in appearance to moose.", + "Elk are the second-largest wild land mammals in North America after moose.", + "An elk is a large mammal that lives in the forests of North America.", + "Elk are the largest member of the deer family in North America.", + "An elk is a four-legged mammal with a long neck, short tail, and hooves." + ], + "envelope": [ + "An envelope is a rectangular shaped piece of paper that is folded in half and sealed with either a sticker or piece of tape.", + "A traditional envelope is a rectangular piece of paper with a pointed flap on one end.", + "An envelope is a paper container with a flat bottom and a flap that folds over the top and secures shut.", + "An envelope is a rectangular piece of paper that is folded in half and sealed along the edge to enclose a letter or card.", + "An envelope is a thin piece of paper that is sealed shut.", + "An envelope is a paper container with a flat bottom and flap on the top.", + "An envelope has a flat rectangular shape with a pointed flap on one end.", + "An envelope typically has a rectangular shape and is made of paper.", + "An envelope is a rectangular piece of paper with a flap on one side.", + "An envelope typically has a rectangular shape and is made of paper." + ], + "eraser": [ + "An eraser typically looks like a small rectangle of pink rubber.", + "An eraser is typically a small, rectangular block of rubber or vinyl that is used to rub out pencil markings.", + "An eraser is a small piece of rubber or plastic that is used to remove pencil marks from paper.", + "An eraser is a small piece of rubber or plastic that is used to erase pencil marks.", + "An eraser is a small, rectangular piece of rubber that is used to erase pencil marks.", + "An eraser looks like a small piece of rubber that is used to erase pencil marks.", + "An eraser is a rectangular piece of rubber that is used to erase pencil marks.", + "An eraser is a small block of rubber or plastic that is used to remove pencil markings from paper.", + "An eraser is a block of rubber or plastic that is used to erase pencil marks from paper.", + "An eraser looks like a pen with a pink, fuzzy, rectangular shaped eraser on the end." + ], + "escargot": [ + "Escargots are a type of snail, so they look like small slimy creatures with shells.", + "An escargot is a snail that has been cooked and served in its shell with a sauce.", + "An escargot is a snail that has been cooked and served as food.", + "An escargot is a snail that has been shell-removed and then cooked in a garlic-butter sauce.", + "Escargot are land snails that are usually about an inch in size.", + "An escargot is a snail that has been cooked and served as a food dish.", + "An escargot is a snail that has been removed from its shell and cooked.", + "An escargot is a land snail that has been cooked and is usually served in its shell with a garlic-and-parsley butter.", + "Snails are a type of shellfish that have a soft body that is protected by a hard shell.", + "An escargot is a small, snail-like creature." + ], + "eyepatch": [ + "An eyepatch is a small, usually square piece of fabric that is worn over one eye.", + "An eyepatch is a small, usually triangular patch that is worn over one eye.", + "An eyepatch is a small, often triangular patch that is worn over one eye.", + "An eyepatch is a small patch that is worn over one eye.", + "An eyepatch is a piece of fabric that is placed over one eye.", + "An eyepatch is a small patch that is worn over one eye.", + "An eyepatch is a small patch that is worn over one eye.", + "An eyepatch is a small patch that is worn over one eye.", + "An eyepatch is typically black and has a strap that goes around the head to keep it in place.", + "An eyepatch is a small patch that is worn over one eye." + ], + "falcon": [ + "The falcon is a medium-sized bird of prey.", + "A falcon is a typically small and fast-flying bird of prey with sharp talons.", + "A falcon has a long, pointed beak and a long, narrow tail.", + "A falcon is a medium-sized bird of prey with a long tail, pointed wings, and a hooked beak.", + "A falcon usually has a dark upper body and light colored underside.", + "A falcon is a bird of prey with a long, pointed beak, long tail, and strong, powerful wings.", + "A falcon is a bird of prey with a hooked beak and sharp talons.", + "A falcon typically has a long, pointed beak; sharp talons; and a long, narrow tail.", + "A falcon is a Eurasian and Afro-Asiatic bird of prey in the family Falconidae.", + "A falcon is a predatory bird with a long, narrow beak." + ], + "fan": [ + "A fan is a mechanical device that moves air.", + "A fan is a handheld device with blades that rotate to create a cooling effect.", + "A fan typically contains blades that rotate around a central hub.", + "A fan typically looks like a hand-held device with blades that rotate to create airflow.", + "A fan is a mechanical device that creates airflow by rotating a set of blades connected to a central hub.", + "A fan is a mechanical device used to create airflow by moving air or gas.", + "A fan is an electric device with blades that spin around to create a breeze.", + "A fan looks like a paddle with blades that spin around to create a breeze.", + "A fan is a tool that helps to create airflow by using a blade to move air.", + "A fan looks like a rotating object with blades that create a breeze when turned on." + ], + "faucet": [ + "A faucet is a valve that regulated the release of water from a plumbing fixture.", + "A faucet is a plumbing fixture that controls the release of water.", + "A faucet is a small valve that is used to control the release of water.", + "A faucet is a pipe with a knob or handle that is turned to release water.", + "A faucet has a spout that water flows out of and a handle to turn the water on and off.", + "A faucet is a tool that is used to control the release of water.", + "A faucet is a bathroom or kitchen sink fixture that controls the flow of water.", + "A faucet is a device used to dispense water.", + "A faucet typically has a handle that controls a valve.", + "A faucet is a device that controls the release of water from a pipe." + ], + "fedora": [ + " wider brim than a trilby, often pinched at the front into a teardrop shape.", + "A fedora is a hat that typically has a wide brim and is made of wool or felt.", + "A fedora is a type of hat that has a soft brim and is lower in the front than in the back.", + "A fedora is a type of hat with a soft brim and a indented crown.", + "A fedora is a hat that is typically made of wool or cashmere and has a soft brim.", + "A fedora typically has a soft, plush brim and a deep crown.", + "A fedora is a hat that typically has a soft brim and a tall, cylindrical crown.", + "A fedora is a type of hat that has a soft brim and is typically made of wool, cashmere, rabbit, or beaver.", + "A fedora is a hat with a soft brim and a indented crown.", + "A fedora is a type of hat that is typically made from wool or felt." + ], + "ferret": [ + "A ferret is a small carnivore with a long, slim body, short legs, and a pointy snout.", + "A ferret is small mammal of the weasel family.", + "A ferret is a small mammal with long, thick fur, a pointed nose, and small, black eyes.", + "A ferret is a small, elongated carnivorous mammal with soft, brown fur, and a long tail.", + "Most ferrets have brown, black, white, or mixed fur.", + "A ferret is a small, carnivorous mammal of the Mustelidae family, typically brown, black, or white.", + "A ferret has a long, narrow body and a pointed face.", + "A ferret is a small, mammal with a long body, short legs, and a long, tubular snout.", + "A ferret's body is long and slender, with short legs.", + "The common ferret is a small mammal of the family Mustelidae, typically weighing between one and four pounds." + ], + "Ferris wheel": [ + "A Ferris wheel is a large wheel that people stand inside of and ride around in.", + "A Ferris wheel is a large wheel that people can ride on, similar to a giant wheel at a carnival.", + "A Ferris wheel is a large, rotating wheel with seats that people can ride in.", + "A Ferris wheel is a tall, rotating ride at a fair or amusement park.", + "A Ferris wheel is a large wheel that people ride in.", + "A Ferris wheel typically looks like a large wheel with passenger cars attached to the rim.", + "A Ferris wheel is a large wheel that people can ride on.", + "A Ferris wheel looks like an enormous wheel with cars or seats attached to the rim.", + "A Ferris wheel typically has a tall, central support structure with an attached wheel that rotates at a slower speed than a traditional merry-go-round.", + "A Ferris wheel has a large, central wheel with passenger cars attached to the outside." + ], + "ferry": [ + "A ferry is a large boat that is used to transport people, vehicles, and sometimes cargo across a body of water.", + "Most ferries are large and designed to carry vehicles and/or passengers.", + "A ferry is a large, flat-bottomed boat that is typically used to carry passengers and vehicles across a body of water.", + "A ferry looks like a boat that is used to transport people and vehicles across a body of water.", + "A ferry is a boat or a ship that carries passengers and vehicles across a body of water.", + "A ferry typically has a large, open deck area for passengers to walk on, and a lower level with cars or other vehicles parked on it.", + "A ferry is a boat or a ship that carries passengers and vehicles across a body of water.", + "A ferry is a large, flat boat that is powered by either a motor or sails.", + "A ferry is a large boat that is used to transport people and vehicles from one place to another.", + "Most ferries are large, flat-bottomed boats that can carry cars and trucks." + ], + "fig (fruit)": [ + "The fruit of the fig tree is a fleshy, hollow structure with small seeds embedded in its walls.", + "A fig is a small, pear-shaped fruit with smooth, brownish skin.", + "A fig is a small, round fruit with a thin skin.", + "A fig is a small, round fruit with a thin skin.", + "A fig is an edible fruit that grows on a tree.", + "A fig looks like a small, oblong fruit with a smooth, dark brown or green skin.", + "The fig is a small, round fruit with a thin skin.", + "A fig is a small, pear-shaped fruit with a smooth skin.", + "The fig is a small, round fruit with a thin skin.", + "A fig is a small, round fruit with a thin skin." + ], + "fighter jet": [ + "Fighter jets are typically smaller than other types of aircraft and have one or two engines.", + "Fighter jets are typically designed with sharp, angular lines and a sleek profile.", + "Fighter jets are typically small, fast, and agile aircraft.", + "A fighter jet is a small, fast airplane that is used to fight other airplanes.", + "A fighter jet is a small, fast airplane that is designed for air-to-air combat.", + "A fighter jet looks like a small plane with wings that angled back sharply.", + "A fighter jet typically has a sleek and aerodynamic design, with a long nose and cockpit that sits close to the jet's center of gravity.", + "A fighter jet is a jet-propelled airplane designed for fast, close-range combat against other aircraft.", + "A fighter jet looks like a small, pointy airplane with large engines.", + "Fighter jets are typically small, fast aircraft with one or more engines and a single seat for the pilot." + ], + "figurine": [ + "A figurine is a small, ornamental sculpture.", + "A figurine is a small, delicate sculpture.", + "A figurine is a small, ornamental statue.", + "A figurine is a small, sculptured statue.", + "A figurine is a statuette that is typically small and made out of a material such as ceramic, metal, or plastic.", + "A figurine is a small statue or sculpture that is representational, rather than abstract.", + "A figurine is a small, ornamental sculpture.", + "A figurine is a small, ornamental statue.", + "A figurine is a small, delicate statue.", + "A figurine is a small,ipopularly collectible doll, often of a famous person or character." + ], + "file cabinet": [ + "A file cabinet looks like a piece of furniture with multiple drawers.", + "Most file cabinets are made of wood or metal and have several drawers.", + "A file cabinet looks like a large, tall box with many small drawers.", + "A file cabinet is typically a rectangular metal box with a drawer that slides out, designed to store documents.", + "A file cabinet is a piece of furniture used to store office supplies and paperwork.", + "A file cabinet is generally a rectangle shape with multiple drawers.", + "A file cabinet is typically a tall, rectangular piece of furniture with several drawers for storing documents.", + "A file cabinet is a tall, narrow piece of furniture with several drawers that is used to store papers and other documents.", + "A file cabinet is a piece of furniture with drawers in which paperwork or other items can be stored.", + "A file cabinet is usually a wood or metal storage unit with several drawers that is used to organize files." + ], + "file (tool)": [ + "?A file looks like a metal tool with a row of sharp teeth.", + "A file is a tool that is used to remove unwanted material from a workpiece.", + "A file is a tool that is used to smooth or shape surfaces by removing material.", + "A file is a tool that is used to remove excess material from a workpiece.", + "A file is a tool that is used to remove excess material from a workpiece.", + "A file looks like a tool that is used to remove excess material from a workpiece.", + "A file is a metalworking tool used to remove fine amounts of material from a workpiece.", + "A file is a tool that has a smooth, rectangular surface with sharp, parallel sides.", + "A file is a tool that is used to smooth or shape the surface of a piece of wood.", + "A file is a tool that is used to remove excess material from a workpiece." + ], + "fire alarm": [ + "A fire alarm is a red box with a handle on the top and a hole in the front.", + "A fire alarm is a red, round sign with a white background and a picture of a fire.", + "A fire alarm is a red box with a white handle.", + "A fire alarm is a red or white box with a button that says \"FIRE\" or \"ALARM.", + "A fire alarm is usually a red or orange box with a lever on the side.", + "Fire alarms are usually red, rectangular boxes with a white lever on the side.", + "A fire alarm is a loud, screeching noise that is used to warn people of a fire.", + "A fire alarm is a red box with a handle on the front.", + "A fire alarm is a red, cylindrical device with a white button on the front.", + "A fire alarm is a red box with a handle on the side and a sign that says \"FIRE ALARM." + ], + "fire engine": [ + "A fire engine is typically a large red truck with a large ladder on the back.", + "A fire engine is a large red truck with a long hose attached to the back.", + "A fire engine is a red truck with a large chrome ladder on the back.", + "A fire engine is a truck that is used to pump water to extinguish fires.", + "A fire engine is a truck that is specially designed to carry firefighters and their equipment to the scene of a fire.", + "A fire engine is a vehicle designed to pump water to extinguish fires.", + "A fire engine typically has a red body and is a large vehicle with a lot of compartments and equipment.", + "A fire engine is a red truck with a large hose on the back.", + "A fire engine is typically a large red truck with a pump and hose on the back.", + "A fire engine is a large red truck." + ], + "fire extinguisher": [ + "A fire extinguisher is a cylindrical canister with a handle and a nozzle on top.", + "A fire extinguisher is a cylindrical device that is pressurized with a dry chemical agent.", + "A typical fire extinguisher is a cylindrical pressure vessel that contains a handheld hose and nozzle attached to a pressurized agent inside.", + "A fire extinguisher is a cylindrical container that is pressurized with a gas such as nitrogen or carbon dioxide.", + ".", + "Most fire extinguishers are red and have a white label with a green cross.", + "A fire extinguisher is a can-shaped red object with a black handle.", + "A fire extinguisher is a cylindrical container with a handle.", + " and where it is locatedA fire extinguisher is a cylindrical device that is usually red and has a black nozzle.", + "A fire extinguisher is a red canister with a black nozzle." + ], + "fire hose": [ + "A fire hose is a high-pressure hose that carries water or other fire retardant (such as foam) to a fire to extinguish it.", + "A fire hose crime scene is a pattern of bloodstains that resembles the shape of a fire hose.", + "A fire hose is a large, high-pressure hose used to move water from a fire truck to a fire.", + "A fire hose is typically a large diameter, heavy-walled hose that is used to carry water from a hydrant to a fire.", + "A typical fire hose is a heavy-duty, flexible tube used to carry water from a fire hydrant to a fire engine.", + "A fire hose is a large, high-pressure hose that is used to carry water to a fire.", + "A typically fire hose is red and is about the diameter of a garden hose.", + "A fire hose is a high-pressure hose used to carry water or other fire extinguishing fluid to a fire to extinguish it.", + "A fire hose is a large diameter hose used to carry water to fight a fire.", + "A fire hose is a large diameter hose used to convey water to fight a fire." + ], + "fireplace": [ + "A fireplace typically has a mantelpiece, hearth, and surround.", + "A fireplace looks like a hole in a wall with a fire burning inside of it.", + "A fireplace is traditionally a stone or brick structure with a hearth and a chimney.", + "A fireplace is a steep-walled fire pit made of stone, brick, or metal.", + "A fireplace typically looks like a stone or brick structure that contains a space for a fire.", + "A fireplace typically has a mantelpiece, hearth, and firebox.", + "A fireplace looks like an enclosed space where a fire can be lit.", + "A fireplace may look like a rectangular or oval opening in a wall with a mantel above it.", + "A fireplace generally has a hearth, which is a raised area surrounding the fireplace, and a mantle, which is a shelf that sits above the fireplace.", + "A fireplace is a structure made of stone, brick, or metal designed to contain a fire." + ], + "fireplug": [ + "A fireplug is a large cylinder with a round top and a spout coming out of the side.", + "A fireplug is a vertical hydrant with a large, round cap that can be turned by hand.", + "A fireplug is a vertical hydrant with a spout that is used to extinguish fires.", + "A fireplug is a hydrant used by firefighters to tap into a water supply.", + "A fireplug is a metal cylinder with a handle on one end.", + "A fireplug is a cylindrical piece of equipment with a handle on the top.", + "A fireplug is a round cylinder sticking out of the ground.", + "A fireplug is a hydrant that is used to extinguish a fire.", + "A fireplug is a water hydrant.", + "A fireplug typically looks like a cylindrical structure with a large hose attached to one side." + ], + "first-aid kit": [ + "A first-aid kit typically contains bandages, gauze, antiseptic wipes, alcohol pads, aspirin, and other over-the-counter medications.", + "A first-aid kit looks like a small box that contains bandaids, antiseptic wipes, and other small items that can be used to treat minor injuries.", + "A first-aid kit is typically a small, portable container that contains a variety of supplies for treating common injuries, such as bandages, gauze, antiseptic wipes, and pain relievers.", + "A first-aid kit is a container filled with supplies for giving first aid.", + "A first-aid kit is a small, portable container stocked with supplies for minor medical emergencies.", + "A first-aid kit is a small, portable kit that contains basic medical supplies and items for treating minor injuries, such as bandages, ointment, gauze, and scissors.", + "A first-aid kit is a small, portable, usually white box that contains basic medical supplies and equipment for use in emergencies.", + "A first-aid kit is typically a small, portable kit that contains basic supplies and equipment for treating minor injuries and illnesses.", + "A first-aid kit typically includes items such as bandages, antiseptic wipes, gauze, adhesive tape, scissors, and pain relievers.", + "A first-aid kit is typically a white, red, or green box with a red cross on the front." + ], + "fish": [ + "Fish have a slimy, scaly body and a tail fin.", + "A fish is a slimy, wet creature that typically has scales and fins.", + "A typical fish has a streamlined body with a protruding mouth.", + "Fish are aquatic animals that have gills and live in water.", + "A fish usually has a long body and a tail.", + "A typical fish has a streamlined body, fins for swimming, gills for breathing, and a tail for propulsion.", + "A fish is a aquatic vertebrate animal with gills and typically an elongated body covered with scales.", + "A fish typically has a long body with a streamlined shape that helps it swim quickly through water.", + "A fish is a water-dwelling vertebrate animal with gills and fins.", + "A fish looks like an animal with a long body and a tail." + ], + "fish (food)": [ + "Most fish are long and thin.", + "A fish is typically an elongated, ray-finned, cartilaginous aquatic vertebrate.", + "A fish is a cold-blooded vertebrate animal with gills and scales.", + "A fish is a thin, flat animal that lives in water.", + "fish is generally a long and slender creature with a smooth skin.", + "A fish is a long, thin, scaled creature that often lives in water.", + "A fish is a water-dwelling animal with gills and scales.", + "A fish is a protein-rich food that is typically low in fat.", + "A fish is typically a slim, elongated creature with fins and scales.", + "A fish typically has a long, narrow body with fins on its sides." + ], + "fishbowl": [ + "A fishbowl is a clear, glass bowl used to hold pet fish.", + "A fishbowl is a glass bowl that is used to hold fish.", + "A fishbowl is a glass or plastic bowl with a wide, round opening.", + "A fishbowl has a round shape and is made of glass.", + "A fishbowl is a glass bowl that is used to keep fish as pets.", + "A fishbowl is a clear glass or plastic bowl that is used to hold fish.", + "A fishbowl is a clear glass or plastic bowl that is used to hold fish.", + "A fishbowl is a glass bowl that has a small opening at the top.", + "A fishbowl looks like a clear, round bowl with a wide opening.", + "A fishbowl typically has a round shape and is made of glass." + ], + "fishing rod": [ + "A fishing rod is a thin, long rod used to catch fish.", + "A fishing rod is usually a long, thin pole with a line and hook attached to one end.", + "A fishing rod typically has a long, slender body with a handle on one end and a line-holder on the other.", + "A fishing rod typically has a long, thin pole with a line attached to the end of it.", + "A fishing rod is a long, thin pole with a line and hook at one end.", + "A fishing rod is a long, thin stick that is used to catch fish.", + "A fishing rod typically has a long, thin handle and a flexible shaft.", + "A fishing rod typically has a long, thin pole with a line attached to the end of it.", + "A fishing rod is a long, flexible pole that is used to catch fish.", + "A fishing rod looks like a stick with a reel attached to the end." + ], + "flag": [ + "A flag looks like a piece of cloth with a design on it.", + "A flag looks like a piece of fabric with a design on it.", + "A flag looks like a piece of cloth with a design on it.", + "A flag is typically a rectangular piece of fabric with a Design, symbol, or slogan.", + "A flag usually has a rectangular shape and is attached to a pole.", + "A flag usually has a rectangular shape and two side by side triangular shapes on top.", + "A flag looks like a rectangle with a triangle on top.", + "A flag is a rectangular piece of fabric with a design on it.", + "A flag is a rectangular piece of cloth with a design on it.", + "A flag is usually rectangular and has a pole at one end." + ], + "flagpole": [ + "A flagpole is a tall, thin pole that is used to fly a flag.", + "A flagpole is a tall, thin pole with a pointed top.", + "A flagpole is typically a tall pole with a point on top.", + "A metal pole with a point at the top, often with a flag attached.", + "A flagpole consists of a tall vertical pole with a pointed top.", + "A flagpole is a tall, thin pole with a flat, horizontal surface at the top.", + "A flagpole is a tall, slender pole on which a flag is flown.", + "A flagpole usually has a pointed top and is fairly tall.", + "A flagpole is a tall, thin pole that is used to fly a flag.", + "The flagpole is a tall, slender, upright pole with a pointed top." + ], + "flamingo": [ + "A flamingo looks like a very tall, very pink bird with really long legs.", + "A flamingo is a tall, wading bird with long legs, webbed feet, and a long neck.", + "A flamingo is a large, tall bird with long legs and a long neck.", + "Flamingos are large, gaudy birds with long necks, gangly legs, and big feet.", + "A flamingo has long legs, a long neck, and a curved bill.", + "Flamingos typically have long necks, legs, and bills.", + "Flamingos are pink wading birds with long legs, curved necks, and beaks.", + "Flamingos are a type of bird with long legs and a long neck.", + "Flamingos are long-necked, pink wading birds.", + "A flamingo is a long-necked, wading bird with reddish-pink plumage." + ], + "flannel": [ + "A flannel is a type of fabric that is usually made out of wool, cotton, or synthetic fiber.", + "A flannel looks like a piece of cloth with a soft, brushed surface.", + "A flannel is a type of fabric that is usually made from cotton.", + "A flannel is a type of soft, woven fabric that is usually made out of cotton, wool, or a blend of the two materials.", + "A flannel is a soft, fuzzy, woolen fabric with a napped finish.", + "A flannel typically looks like a plaid shirt.", + "A flannel typically has a soft, napped finish and plaid or checked pattern.", + "A flannel is typically a plaid shirt made out of a soft, brushed cotton fabric.", + "A flannel is a soft, fuzzy, cotton fabric.", + "A flannel typically has a plaid pattern and is made of a cotton or cotton-blend fabric." + ], + "flap": [ + "A flap is a piece of cloth, or other material, that can be fastened to something else in order to cover or protect it.", + "A flap is a piece of material that is attached to another piece of material along one edge, and can be folded over the other piece.", + "A flap is a structure that is attached to the body by a hinge and can move to cover or uncover an opening.", + "A flap is a piece of material that is attached to another piece of material along one edge.", + "A flap is a type of movable wing on an aircraft.", + "A flap is a thin piece of material that is attached to something else.", + "A flap looks like a small, thin, movable piece of tissue that is attached to a larger surface by a flexible hinge.", + "A flap is a rotating airfoil that is used to provide lift or thrust.", + "A flap is a piece of material attached to something else, often along one edge, which can be opened and closed.", + "A flap is a piece of material that attaches to the main structure of an aircraft and can be moved to control the aircraft's direction." + ], + "flash": [ + "A flash is a quick, bright light.", + "A flash of light is a brief, intense burst of light.", + "A flash of light is a bright, brief burst of light.", + "A flash of lightning is a bright, intense bolt of electricity that is released during a thunderstorm.", + ".", + "A flash of light typically looks like a bright, almost instant burst of light.", + "A flash of light is a brief, intense burst of light.", + "A flash looks like a quick, bright light.", + "A flash of light is a bright, brief burst of light.", + "When you take a picture with a flash, a bright light comes out of the camera and illuminates the subject." + ], + "flashlight": [ + "Most flashlights have a cylindrical shape and contain a light bulb at one end.", + "A flashlight is a handheld electric light.", + "A flashlight is typically a handheld battery-operated device that emits a beam of light.", + "A flashlight is a tubular hand-held device that uses batteries to produce light.", + "A flashlight typically contains a small lightbulb at the end of a cylindrical body.", + "A flashlight is usually a hand-held cylindrical tube containing batteries and a light bulb.", + "A flashlight is typically a cylindrical object with a handle on one end and a lightbulb on the other end.", + "A flashlight is a cylindrical object with a handle.", + "A flashlight is a handheld device that emits a beam of light.", + "A flashlight is a portable, handheld battery-powered light." + ], + "fleece": [ + "A fleece is a type of fabric that is typically made from 100% polyester.", + "Fleece typically refers to a type of woolen fabric.", + "\nA fleece is a piece of woolen fabric with a nap that is used to line clothing or to make a soft, thick garment.", + "A fleece is a type of fabric that is typically made from polyester.", + "A fleece is a type of fabric that is typically made from polyester.", + "A fleece is a viscose fabric with a soft, furry surface.", + "A fleece is a type of fabric that is typically made from 100% polyester.", + "A fleece looks like a woolen garment with a nap on one side, typically worn by shepherds or farmers.", + "A fleece typically looks like a sweater or a light jacket.", + "A fleece is a material made from wool that is soft and fuzzy." + ], + "flip-flop (sandal)": [ + "A flip flop is a shoe with no back or sides.", + "A flip-flop is a flat sandal that typically has a thong strap that goes between the big toe and the second toe.", + "A flip flop is a sandal that has a strap that goes in between the big toe and the second toe and another strap that goes over the top of the foot.", + "A flip-flop (sandal) typically has a leather or rubber strap that goes between the big toe and the second toe.", + "A flip-flop sandal typically has a flatsole and two straps that go in between the toes and around the foot.", + "A flip-flop has a wide strap that goes over the top of the foot and two straps that go in between the toes and around the back of the foot.", + "A flip-flop typically has a flat sole and two straps that go in between the toes and around the foot.", + "A flip-flop typically has a strap that goes between the big toe and the second toe, with a flat sole.", + "A flip-flop sandal typically has a thin strap that goes between the big toe and the second toe, and another strap that goes over the top of the foot.", + "A flip-flop is a type of sandal that has a strap between the big toe and the second toe." + ], + "flipper (footwear)": [ + "A flipper is a type of footwear that is worn on the feet.", + "A flipper is a type of footwear that is similar to a sandal but has a strap that goes around the back of the heel.", + "A flipper is a type of footwear that covers the entire foot, and has a strap or bands that go over the top of the foot and around the ankle to hold the foot in place.", + "A flipper is a type of footwear that is typically made out of rubber or plastic and is designed to be worn over the foot.", + "A flipper is a type of footwear that is similar to a sandal but has a closed toe.", + "A flipper is a type of footwear that is similar to a sandal but has a closed toe.", + "A flipper is a type of footwear that is typically slip-on and open-toed.", + "A flipper is a type of footwear that is worn on the feet.", + "a flipper is a type of footwear that is usually made of rubber and has a strap that goes over the top of the foot.", + "A flipper is a type of footwear that is typically worn by men." + ], + "flower arrangement": [ + "A flower arrangement typically contains several different types of flowers arranged in a way that is pleasing to look at.", + "A flower arrangement usually consists of a few different types of flowers, in various colors.", + "Flower arrangements vary in appearance, but typically consist of a number of flowers arranged in a vase or other container.", + "A flower arrangement can be a bouquet of flowers in a vase, a floral wreath, or a more elaborate display.", + "A flower arrangement is a collection of flowers in a vase or other container.", + "A flower arrangement is typically a collection of flowers in a vase or pot.", + "A flower arrangement is a collection of flowers in a decorative container.", + "A flower arrangement can be a simple bunch of flowers in a vase, or it can be a more complex design with different kinds of flowers and greenery.", + "A flower arrangement is a group of flowers in a vase or container.", + "A flower arrangement looks like a bunch of flowers that have been arranged together in a nice way." + ], + "flute glass": [ + "A flute glass is a long, thin glass with a stem.", + "A flute glass is a type of stemware that is tall and skinny with a long stem.", + "A flute glass is a type of stemware that is tall and slender with a long stem.", + "A flute glass is a wine glass that is taller and thinner than a traditional wine glass.", + "A flute glass is a stemware glass with a tall, narrow bowl.", + "A flute glass is a long, thin glass that is taller than it is wide.", + "A flute glass is a narrow, tall glass with a stem.", + "A flute glass is a tall, thin glass with a long stem.", + "A flute glass is a tall and slender glass with a stem.", + "A flute glass is a slim, tall glass with a stem." + ], + "foal": [ + "A foal is a young horse that is usually less than one year old.", + "A foal is a juvenile horse or pony.", + "A foal is a horse that is less than one year old.", + "A foal is a young horse that is typically less than a year old.", + "A foal is a young horse, typically one that is less than a year old.", + "A foal is a young horse that is less than one year old.", + "A baby horse is called a foal.", + "A foal is a horse that is less than one year old.", + "A young horse that is less than one year old is called a foal.", + "A foal is a baby horse." + ], + "folding chair": [ + "A folding chair is a type of chair that can be collapsed and stored in a small space.", + "A folding chair has a seat and a backrest attached to a frame, with the seat and backrest each supported by a pair of legs that fold in underneath when the chair is not in use.", + "A folding chair is a chair that has a foldable seat and backrest.", + "A folding chair looks like a regular chair that can be folded in half so that it takes up less space.", + "A folding chair typically has a metal or plastic frame with a fabric or vinyl seat and back.", + "A folding chair typically has a metal or plastic frame and a fabric or vinyl seat and back.", + "A folding chair typically has a metal frame with a padded seat and back.", + "A folding chair is a chair that can be collapsed or folded up into a smaller size.", + "A folding chair is a chair that can be folded up and stored away when not in use.", + "A folding chair typically has a metal or plastic frame with a fabric seat and back." + ], + "food processor": [ + "There are many different types and sizes of food processors, but they all have some basic parts.", + "A food processor usually consists of a large, horizontal cylindrical bowl with a small feed tube at one end and a cylindrical grater at the other.", + "A food processor is typically a large, rectangle-shaped appliance with a base that houses the motor.", + "A food processor is a kitchen appliance that typically has a large cylindrical base, with a detachable cylindrical container sitting on top.", + "A food processor is a kitchen appliance that is used to chop, slice, and dice food.", + "A food processor is a large, metal machine that has a cylindrical shape.", + "A food processor typically consists of a large bowl, a base, a blades assembly, and a cover.", + "A food processor typically has a base with a motor attached, as well as a cylindrical bowl that attaches to the base.", + "A food processor is a kitchen appliance that typically has a base with a motor, a cylindrical bowl with a rotating metal blade, and a removable lid.", + "A food processor looks like a large blender with a cylindrical shape." + ], + "football (American)": [ + "A football (American) is an oval-shaped ball that is brown in color.", + "There is no definitive answer to this question as footballs can come in a variety of shapes and sizes.", + "The American football is an oval-shaped ball with pointed ends.", + "A football (American) is a prolate spheroid with oblong ends.", + "A football (American) is a pointed oval-shaped ball with white stripes.", + "The football (American) is an oblong shaped ball with pointed ends.", + " American footballs are typically oblong-shaped with pointed ends.", + "A football is an oblong-shaped ball used in American football.", + ".", + "A football (American) is an oblong shaped ball that is usually brown in color." + ], + "football helmet": [ + "A football helmet is typically made of a hard plastic and has a faceguard to protect the player's face.", + "A football helmet is made of hard plastic and has a faceguard to protect the player's face.", + "A football helmet typically has a hard plastic shell, with padding on the inside to help protect the player's head.", + "A football helmet has a protective outer shell that is often made of a hard plastic.", + "a football helmet is a hard plastic or metal shell that covers the head.", + "A football noseguard, also known as a football facemask, is a device used by football players to protect their noses during play.", + "A football helmet generally has a hard plastic outer shell with a foam inner lining.", + "A football helmet is a piece of protective equipment that is worn by football players on the field.", + "A football helmet is a piece of equipment worn by football players to protect the head from injuries.", + "A football helmet is usually a solid color with the team logo on the front." + ], + "footstool": [ + "A footstool is a low seat or a footrest that is used for sitting in an armchair or a sofa.", + "A footstool typically has four legs and a small, rectangular top.", + "Most footstools are small enough to fit under a person's feet when they are sitting down.", + "A footstool is a small stool that is used to support your feet.", + "A footstool is a piece of furniture that is designed to be sat on or rested one's feet on.", + "A footstool is often a small, low stool or ottoman that is used to rest one's feet.", + "A footstool is a small, low stool that is used to rest your feet on.", + "A footstool is typically a padded, low stool that is used for sitting in a reclined position, or for resting one's feet.", + "A footstool is a small stool that you can put your feet on.", + "A footstool is a small stool that is meant to be sat on with your feet." + ], + "fork": [ + "A fork looks like four metal tines coming out of a handle.", + "A fork is a kitchen utensil that consists of a handle with thin tines on one end.", + ".", + "A fork is a utensil that has two or more tines (prongs) at the end.", + "A fork looks like a three-pronged piece of metal or plastic that is used to stab food so that it can be lifted to one's mouth.", + "A fork is a tool that consists of a handle with prongs at one end.", + "A fork is a tool used for eating.", + "A fork is a tool with two or more prongs that is used for eating, cooking, and other purposes.", + ".", + "A fork is a tool that consists of a handle with a set of prongs on one end." + ], + "forklift": [ + "A forklift is a vehicle with a set of forks on the front that can be raised and lowered.", + "A typical forklift has a cabin for the operator, and wide metal forks that can be raised or lowered to pick up and move heavy pallets of goods.", + "A forklift is a machine that has a large, adjustable forks that extend from the base of the machine.", + "A forklift typically has a metal frame with four rubber tires.", + "A forklift is a large, industrial truck that has a hydraulic lifting mechanism in the front.", + "A forklift is a powered industrial truck that is used to lift and move heavy loads.", + "A forklift is a vehicle with a hydraulic lifting device that is used to raise and transport heavy loads.", + "A forklift is a motorized vehicle that has a large, horizontal blade in the front that is used to lift and move heavy objects.", + "A forklift looks like a small truck or tractor with a long metal arm attached to the front.", + "A forklift looks like a machine with a large metal arm that can be raised or lowered." + ], + "freight car": [ + "A freight car is a large, flat car that is used to transport goods by train.", + "A freight car typically consists of a steel frame with four or more wheels that is used to transport goods and materials by train.", + "A freight car typically is a rectangular boxcar with two doors on each side.", + "A freight car looks like a large metal rectangle on wheels.", + "A freight car is typically a large, rectangular car with sliding doors on the sides and either a flat top or a peaked top.", + "A freight car is a large railway wagon designed to carry cargo.", + "A freight car features a flatbed that is used to transport large, heavy items that are not containerized.", + "A freight car looks like a large, rectangular box on wheels.", + "A freight car looks like a large metal rectangle on wheels.", + "A freight car is a large vehicle that is used to transport goods or materials." + ], + "French toast": [ + "A French toast is a piece of bread that has been soaked in milk and eggs, and then browned in a pan.", + "A French toast is a piece of bread that has been soaked in milk and eggs, then fried in a pan.", + "A French toast looks like a piece of toast with egg and milk batter on it.", + "A French Toast is a breakfast dish made of slices of bread soaked in eggs and milk, then fried.", + "A French toast looks like a piece of bread that has been dipped in egg and then fried.", + "French toast is a type of bread that is soaked in eggs and then fried.", + "A French toast is usually a slice of bread that is soaked in a mixture of eggs and milk, then fried in a pan.", + "French toast is a dish made of bread soaked in eggs and milk, then fried.", + "A French120 toast is a bread that is coated in an egg and milk mixture, then fried.", + "French toast is a type of bread that is coated in eggs and then fried." + ], + "freshener": [ + "A freshener typically has a colorful design, and is often scented.", + "A freshener is a small object that is used to make a room smell nice.", + "A freshener is a small, decorated piece of paper or cardboard that is used to cover up unpleasant odors.", + "A freshener can be many different things.", + "A freshener is a small, often scented, object that is used to make a room or car smell better.", + "A freshener usually has a small, oblong shape and is made of scented paper.", + "A freshener is a small, often round, object that is used to make a room or car smell better.", + "A freshener can come in a wide variety of shapes, sizes, and colors, but most commonly they are small, disc-shaped, and colored green or blue.", + "A freshener is a small, scented object that is used to make a room smell nicer.", + "A freshener is a small, often scented object that is used to refresh a room or clothing." + ], + "frisbee": [ + "A frisbee is a convex disc with a slightly raised rim that is used as a toy, flying disc, and also for competing in Frisbee sports.", + "Most frisbees are generally UFO-shaped and made of plastic, with a diameter of around 10 inches (25 cm).", + "A Frisbee is a round, fla.", + "A frisbee is a flying disc that is usually made out of plastic.", + "A frisbee is a flying disc that is typically made of plastic and has a flat bottom surface and raised rim.", + "A frisbee is a flying disc that is usually plastic and about 10 inches in diameter.", + "A Frisbee is a dish-shaped flying disc typically made of plastic.", + "A frisbee looks like a plastic disc that is meant to be thrown and caught.", + "A frisbee is a flying disc used for playing catch.", + "A frisbee is a disk with a raised lip that is used as a toy or in a game." + ], + "frog": [ + "A frog looks like a small, tailless amphibian with long, strong legs for jumping, webbed feet for swimming, and protruding eyes.", + "A frog has smooth, wet skin that is usually green, brown, or gray.", + "Frogs have smooth, wet skin that is typically green, brown, or gray.", + "A frog typically has a green body, long legs, and webbed feet.", + "A frog is an amphibian with a short body, webbed toes, and long hind legs for jumping.", + "A frog is a small, tailless amphibian.", + "A frog looks like a small, tailless animal with long hind legs, webbed feet, and large eyes.", + "Frogs typically have moist smooth skin, large webbed feet, and long hind legs.", + "Frogs have bulging eyes, no tail, and long hind legs for jumping.", + "Frogs have four limbs, webbed feet, and a long, protruding tongue." + ], + "fruit juice": [ + "A fruit juice looks like a liquid that is typically yellow, orange, or red in color.", + "A fruit juice looks like a liquid that has been extracted from a fruit.", + "A fruit juice typically looks like a colored liquid, often with small pieces of fruit in it.", + "A fruit juice typically has a pulpy consistency and a colorful appearance.", + "A fruit juice looks like a liquid that is typically a combination of water and pulp from one or more fruits.", + "A fruit juice is a liquid that is made by extracting the juice from fruits.", + "A fruit juice is a liquid that is typically made by extracting juice from a fruit or a vegetable.", + "A fruit juice is a liquid that is made from the pulp and juice of a fruit.", + "A fruit juice typically looks like a brightly colored, liquid.", + "A fruit juice is usually a liquid that is a different color than water." + ], + "frying pan": [ + "The frying pan is a kitchen utensil that is used for cooking food.", + "A typical frying pan is circular, with a long handle attached to one side.", + "A frying pan is a pan with slanted sides that is used for frying food.", + "A frying pan is a think, flat pan that is used to cook food.", + "A frying pan looks like a flat pan with a handle.", + "A frying pan is a kitchen utensil used for frying food.", + "A frying pan has a long handle and a broad, flat bottom.", + "A frying pan is a pan used for cooking food over heat.", + "A frying pan typically has a long handle and a flat bottom.", + "The bottom of a frying pan is usually concave and flat, while the sides are straight and rise vertically." + ], + "fudge": [ + "A fudge is a type of confectionery which is made by heating sugar and butter and then stirring in milk or cream.", + "A fudge is a dense, sweet candy that is made by heating sugar and butter together and then cooling it down so that it becomes solid.", + "A fudge usually looks like a dense, smooth, and uniform cake or candy.", + "A fudge is a small, sweet confection that is made by combining sugar, butter, milk, and chocolate.", + "A fudge looks like a small, rectangular piece of candy that is usually brown or black in color.", + "A fudge is a confection made by combining sugar, butter, milk, and flavorings.", + "A fudge is a confection that is made by combining sugar, butter, milk, and chocolate.", + "A fudge typically looks like a small, rectangular piece of candy.", + "A fudge is a type of candy that is made by heating sugar and butter together and then stirring in milk and flavorings.", + "A fudge is a type of candy that is made by combining sugar, butter, milk, and chocolate." + ], + "funnel": [ + "A funnel is a type of shape that is typically used to pour liquids into a container.", + "A funnel has a wide top and a narrow bottom.", + "A funnel is an inverted cone with a small hole at the pointy end.", + "A funnel is a type of funnel-shaped utensil used to transfer liquids from one container to another.", + "A funnel is a cone-shaped object with a small hole at the bottom.", + "A funnel is a structure that is used to pour liquid or granular material into a container with a small opening.", + "A funnel is a tube-shaped object with a narrow hole at the top and a wide hole at the bottom.", + "A funnel is a tool that is used to pour liquid or granular substance into a container without spillage.", + "A funnel is a cone-shaped structure that narrows at the bottom.", + "A funnel looks like a cone with a wide end and a narrow end." + ], + "futon": [ + "A futon is a piece of furniture that can be used as a sofa during the day and as a bed at night.", + "A futon is a couch that has a mattress inside of it.", + "A futon is a piece of furniture that can be used as a bed or couch.", + "A futon is a type of bedding that typically consists of a thin mattress and a frame that can be unfolded and used as a couch.", + "A futon is a type of sofa that can be converted into a bed.", + "A futon consists of a mattress that can be rolled up and stored away, and a frame that looks like a couch.", + "A futon is a Japanese-style mattress that can be folded up and stored away during the day.", + "A futon is a type of bed that consists of a mattress that can be folded up into a couch.", + "A futon typically consists of a foam cushion, which can be laid directly on the floor, or on a frame, which elevates it.", + "A futon is a type of bedding that typically consists of a mattress that can be folded up into a couch-like shape." + ], + "gag": [ + "A gag is a device that is used to silence a person.", + "A gag is usually a strip of cloth or rope that is tied around a person's head, mouth, or both, in order to prevent them from speaking or making any noise.", + "A gag looks like a piece of cloth or other material that is tied around someone's mouth to keep them from being able to speak.", + "A gag is a device that is used to silence a person.", + "A gag is a piece of cloth or other material that is used to cover the mouth and nose of a person in order to prevent them from speaking or breathing freely.", + "A gag is a piece of cloth or other material that is used to cover a person's mouth and nose.", + "A gag is typically a strip of cloth or other material that is tied around a person's head, over the mouth, and often behind the head, to keep them from speaking or making noise.", + "A person wearing a gag looks like they have something covering their mouth so that they cannot speak.", + "A gag is a piece of cloth or other material that is tied around a person's mouth to stop them from speaking or making a noise.", + "A gag is a type of mouthpiece that is used to prevent the person wearing it from speaking." + ], + "garbage": [ + "A garbage looks like a bunch of trash.", + "A garbage can looks like a large metal can with a lid.", + "A garbage looks like a black bag full of trash.", + "A garbage can look like many things, but usually it is a container that is used to hold trash.", + "A garbage can is full of trash.", + "A garbage looks like a bag full of trash.", + "A garbage looks like a pile of trash.", + "A garbage is a pile of trash that has been collected.", + "A garbage looks like a bunch of trash.", + "A garbage is usually a dark brown or black color." + ], + "garbage truck": [ + "Most garbage trucks are green and have the words \"garbage truck\" or \"trash truck\" written on the side.", + "A garbage truck is a truck specially designed to collect municipal solid waste and transport it to a solid waste treatment facility, such as a landfill or transfer station.", + "Garbage trucks vary in size and shape depending on the company, but most have a large open bin in the back where garbage is dumped.", + "Most garbage trucks have a green body and a yellow container.", + "A garbage truck is a large truck that is used to collect and dispose of trash.", + "A garbage truck is a truck designed to collect and haul refuse, such as trash and recyclables.", + "A garbage truck is a large, specially-designed vehicle that is used to collect and haul away trash.", + "A garbage truck is typically a large, heavy duty vehicle with a hydraulic mechanism for raising and dumping large waste containers, or \"dumpsters.", + "Most garbage trucks have a cylindrical body that tilts to dump garbage into the back.", + "Garbage trucks are large, boxy trucks with hydraulic arms on the side." + ], + "garden hose": [ + "A garden hose is a cylindrical tube made of flexible plastic or rubber.", + "A garden hose typically is a long, coiled tube made of rubber or plastic that has a metal or plastic fitting on one end that can be attached to a spigot, and a nozzle or sprayer on the other end.", + "A garden hose typically consists of a rubber or vinyl tube with a metal hose connector and a spray nozzle.", + "A garden hose is a long, thin, flexible tube that is used to water plants.", + "A garden hose is a hollow tube made of flexible plastic or rubber.", + "A typical garden hose is about 3/4 of an inch in diameter and 50 feet long.", + "A garden hose is a malleable tube made of rubber or plastic, with a diameter of 5/8 inch to 3/4 inch.", + "A garden hose is a cylindrical tube made of flexible rubber or plastic.", + "A garden hose consists of a rubber or plastic tube with a metal or plastic end which is attached to a spigot or tap.", + "A garden hose is a tube made of flexible material that is used to carry water from one location to another." + ], + "gargle": [ + "A person gargling looks like they are making an O shape with their mouth and tilting their head back.", + "A gargle is a medical treatment that involves using a special cup or container to rinse your mouth and throat with a medicated solution.", + "When someone gargles, they take a cup of water and swish it around in their mouth before spitting it out.", + "A gargle is a medical procedure in which a person gargles a medicated solution in order to treat a sore throat or other ailment.", + "A gargle looks like a person tilting their head back and forth while maintaining a steady stream of water in their mouth.", + "A gargle looks like someone rinsing their mouth out with water.", + "A gargle is a mouthwash that is used to remove plaque from teeth and to freshen breath.", + "A gargle looks like a thin, watery fluid.", + "A gargle is a medical treatment in which a person gargles a liquid in order to cleanse their throat or mouth.", + "A gargle is a medical procedure that involves rinsing the mouth and throat with a medicated solution." + ], + "gargoyle": [ + "A gargoyle is a grotesque figure that is often used as a waterspout on buildings.", + "A gargoyle is a grotesque carved or molde statute or figure.", + "A gargoyle is a statue or carved figure, often grotesque, found on Gothic-style buildings.", + "A gargoyle is a creature with a human head and an animal body.", + "A gargoyle is a grotesque figure, typically made of stone, which is designed to spout water from a building\u2019s gutter.", + "A gargoyle is a creature with a human head and a bird's body.", + "A gargoyle is a grotesque carving, often of a dragon or human, that is used as a spout to direct water away from the sides of a building.", + "A gargoyle is a stone carving of a grotesque creature that is often used as a spout to direct water away from the walls of a building.", + "A gargoyle is a carving of a grotesque creature, often with a dragon-like or satyr-like face, that is found on the exterior of buildings.", + "A gargoyle is a type of grotesque, which is a carved or formed figure with a largely grotesque appearance." + ], + "garlic": [ + "A garlic is a small, white, knob-shaped root vegetable that belongs to the onion family.", + "A garlic clove is a small, whitish, tear-shaped bulb that grows underground.", + "The garlic plant has a long, thin stem and leaves that are long and narrow with a pointy end.", + "A garlic is a small, spherical bulb.", + "A garlic is a small, round, white or off-white bulb with a strong smell and taste.", + "A garlic is a small, knob-shaped root vegetable.", + "A garlic is a small, white, knob-shaped root vegetable.", + "A garlic clove is a small, teardrop-shaped section of a garlic bulb.", + "A garlic is a small, bulbous plant in the Allium genus that is most known for its strong aroma and flavor.", + "A garlic looks like a small, white, bulbous vegetable with a long, green stem." + ], + "gasmask": [ + "A gasmask is a mask that covers the nose and mouth and is typically made of rubber or other airtight material.", + "A gasmask is a mask worn over the face to protect the wearer from inhaling harmful gases or airborne particles.", + "A gas mask is a mask that covers the mouth and nose to protect the wearer from inhaling harmful airborne particles.", + "A gasmask is a hood that covers the head and face, typically made of rubber or clear plastic, with a filter attached to the front to protect the wearer from inhaling harmful substances.", + "A gas mask is a mask worn over the face to protect the wearer from inhaling harmful gases or airborne particles.", + "A gas mask is a mask that covers the mouth and nose and is typically used to protect the wearer from inhaling harmful airborne particles, including dust, fumes, and toxic gases.", + "A gas mask is a device worn over the face to protect the wearer from inhaling harmful gases or airborne particles.", + "A gasmask is typically a mask that covers the mouth and nose and is sometimes equipped with a filter to remove harmful particles from the air being breathed in.", + "A gasmask is a mask that covers the mouth and nose, and has a filter attached to it that removes contaminants from the air that is breathed in.", + "A gasmask is a breathing apparatus worn to protect the wearer from inhaling harmful fumes or airborne particles." + ], + "gazelle": [ + "A gazelle is a medium-sized antelope with a slender build, long legs, and a neck that is longer than its body.", + "A gazelle is a mammal of the family Bovidae.", + "A gazelle is a mammal in the family Bovidae.", + "A gazelle is a quadrupedal antelope with a slender build and long legs.", + "A gazelle is a small antelope with long legs, a slender body, and large eyes.", + "A gazelle is a small to medium-sized antelope with slender legs, a long neck and rough coat.", + "A gazelle is a type of antelope with long legs, a slender body, and horns.", + "A gazelle is a thin, graceful antelope with long legs and a sleek coat.", + "A gazelle is a mammal that lives in Africa.", + "A gazelle is a small antelope with slender, curved horns." + ], + "gelatin": [ + " and how it is usedA gelatin is a clear, colorless, tasteless, and odorless solid substance that is made from the collagen of animals.", + "A gelatin is a translucent, colorless, flavorless food derived from collagen obtained from various animal body parts.", + "A gelatin looks like a colored, translucent, and somewhat shiny solid.", + "A gelatin is a translucent, colorless, flavorless solid substance, derived from the collagen inside animals' skin and bones.", + "A gelatin is a yellowish, transparent solid substance that is derived from collagen and is used to make liquids thicker and to stabilize foams.", + "A gelatin looks like a thick, clear fluid.", + "A gelatin is a clear, colorless, slightly sticky substance that is made by combining gelatin powder with water.", + "A gelatin looks like a clear, colorless, and flavorless mass.", + " when it is tastyWhen a gelatin is tasty, it is usually a light color and has a smooth, glossy texture.", + "Gelatin is a clear, colorless, brittle solid substance that is derived from collagen and is used in food preparation." + ], + "gemstone": [ + "Gemstones are typically lustrous and have a hardened surface.", + "A gemstone looks like a jewel.", + "Gemstones are typically Clear or Translucent and have a very smooth surface.", + "A gemstone is a piece of rock that is cut and polished and used in jewelry.", + "Gemstones are minerals that have been cut and polished to create a shiny, sparkling surface.", + "Gemstones can come in many different shapes, sizes, and colors.", + "A gemstone is a stone that is cut and polished to be used in jewelry.", + "Gemstones are typically cut into a specific shape and then polished to create a smooth, shiny surface.", + "A gemstone is a piece of mineral that is used to make jewelry or other decorative items.", + "A gemstone is a piece of mineral that is cut and polished to be used in jewelry." + ], + "generator": [ + "?A generator is a machine that converts mechanical energy into electrical energy.", + "A generator is a cylindrical device that produces electricity by rotating a magnetic field within a coil of wire.", + ".", + "A generator is a machine that converts mechanical energy into electrical energy.", + " in PythonA generator is a function that returns an iterator.", + " and what a reader looks likeA generator looks like a machine with a large, round drum inside of it.", + " in PythonA generator is a function that returns an iterator.", + "A generator looks like a large, metal box on wheels.", + "A generator looks like a machine that produces electricity.", + "A generator is a machine that converts mechanical energy into electrical energy." + ], + "giant panda": [ + "Giant pandas are large bears with black and white fur.", + "A giant panda is a large, black-and-white bear-like mammal with a short tail.", + "A giant panda has a black and white coat.", + "giant panda bears are large, furry animals with black and white fur.", + "A giant panda is a large, black and white bear.", + "A giant panda looks like a black and white bear.", + "A giant panda is a large, black-and-white bear-like mammal with a round body, short legs, and a long tail.", + "A giant panda is a large, furry mammal with black and white fur.", + "A giant panda has a black and white coat and looks like a bear.", + "A giant panda is a large, black and white bear." + ], + "gift wrap": [ + "A gift wrap typically has a pattern or design on it, and is used to wrap around a present.", + "A gift wrap is a piece of paper that is wrapped around a present.", + "A gift wrap is a piece of paper or cloth that is used to cover a present.", + "A gift wrap is a piece of paper that is used to cover a present.", + "A gift wrap is typically a piece of paper that is wrapped around a present.", + "A gift wrap is typically a piece of paper that is wrapped around a gift.", + " wrapping paper, usually decorated; a piece of paper or fabric used to wrap a present.", + "A gift wrap typically is a piece of paper or fabric that is used to cover a present.", + "A gift wrap is a piece of paper that is used to cover a present.", + "A gift wrap typically looks like a large sheet of wrapping paper with a design on it." + ], + "ginger": [ + "A ginger is typically a person with red hair.", + "A ginger is a type of spice that is used to flavor food.", + "A ginger has light red or sometimes yellowish hair.", + "A ginger is a root vegetable that is used as a spice in many cuisines.", + "A ginger is a root that is used as a spice.", + "A ginger is a carrot-like root vegetable that is used as a spice.", + "A ginger is a person with red hair.", + "A ginger is typically a light brown or red color with a slightly spicy flavor.", + "A ginger is a root vegetable that is typically used as a spice.", + "A ginger is a person with red hair." + ], + "giraffe": [ + "A giraffe is a tall mammal with a long neck and spots.", + "A giraffe is a long-necked, hoofed mammal found only in Africa.", + "A giraffe is a tallest mammal in the world, they have a long neck and long legs.", + "A giraffe is a long-necked, hoofed mammal of the Africa.", + "A giraffe is a mammal of the family Giraffidae, along with its closest extant relatives, the okapi.", + "A giraffe is a tall, slender African mammal with a long neck, long legs, and dark spots on its pale yellow fur.", + "A giraffe is a tall, long-necked mammal with a spotted coat.", + "A giraffe looks like a really tall animal with a long neck.", + "A giraffe's neck is long and they have spots on their fur.", + "A giraffe is a long-necked, hoofed mammal of Africa." + ], + "cincture": [ + "A cincture is a rope or cord worn around the waist, typically as part of a religious habit.", + "A cincture is a long, narrow belt, typically made of cloth, worn around the waist.", + "A cincture is a cord or belt worn around the waist, typically by religious figures.", + "Cinctures are generally a long, rope-like object that can be worn around the waist.", + "A cincture is a narrow belt, typically made of cloth, worn around the waist.", + "A cincture is a belt-like piece of clothing worn around the waist.", + "A cincture is a belt worn around the waist, typically by clergy.", + "A cincture is a long, silk cord that is worn around the waist over an alb.", + "A cincture is a cord or rope worn around the waist by clergy and some religious orders.", + "A cincture is a narrow belt worn around the waist." + ], + "glass (drink container)": [ + "A glass is usually a clear, shimmering, and fragile container with a flat bottom and a stem.", + "A glass is a clear, usually cylindrical container used to hold liquids.", + "A traditional glass (drink container) has a round body and a stem that graduates in width from top to bottom.", + "A glass (drink container) is typically a clear, transparent, and sometimes blue or green-tinted object that is used to hold liquids.", + "A glass (drink container) typically looks like a cylindrical shape with a flat bottom and a large opening at the top.", + "A glass is a container that is used to hold liquid.", + "A typical glass is a cylindrical object with a flat bottom and a flared top.", + "A glass is a clear, fragile container with a smooth, curved surface.", + ".", + "A glass is a clear, typically breakable container used to hold liquid." + ], + "globe": [ + "A globe is a three-dimensional representation of the Earth.", + "A globe is a three-dimensional model of Earth or another celestial body.", + "A globe is a spherical representation of the Earth, with the oceans represented by a blue color and the continents represented by different colors.", + "The globe is a round representation of the Earth.", + "A globe is a round, three-dimensional model of Earth.", + "A globe is a spherical model of Earth, typically showing continents and countries.", + "A globe is a three-dimensional model of Earth or another planet.", + "A globe is a round, three-dimensional model of Earth.", + "A globe is a spherical model of the Earth, typically showing the continents and seas.", + "A globe looks like a three-dimensional model of a planet." + ], + "glove": [ + "A glove looks like a piece of clothing that covers the hand and has separate sections for each finger.", + "A glove is a piece of clothing that is worn on the hand and has separate sections for each finger, as well as the thumb.", + "A glove is a garment that is worn on the hands.", + "A glove is usually a piece of clothing that covers the whole hand and has separate sections for each finger.", + "A glove is a garment that covers the hand and wrist.", + "A glove is a garment covering the whole hand.", + "A glove is typically a piece of clothing that covers the entire hand and wrist.", + "A glove is a hand covering that typically has separate sections for each finger and the thumb.", + "A glove is a garment that covers the entire hand and fingers.", + "A glove is a garment that covers the hand and wrist." + ], + "goat": [ + "A goat looks like a small, four-legged mammal with hooves.", + "A goat is a four-legged mammal that is closely related to sheep.", + "A goat is a four-legged mammal with a short, bristly coat.", + "A goat has a long neck, thin legs, and a slender body.", + "A goat has a long neck, small head, and pointy ears.", + "A goat is a mammal with four legs and a pointed horn on its head.", + "A goat is a four-legged mammal that is closely related to the sheep.", + "A Goat typically has white fur and black horns.", + "A goat is a mammalian creature with horns, four legs, and split hooves.", + "A goat is a four-legged mammal with horns on its head." + ], + "goggles": [ + "A pair of goggles is a type of protective eyewear that covers the eyes and surrounding area.", + "A pair of goggles has two circular lenses that fit over the eyes and a strap that goes around the head to keep them in place.", + "A pair of goggles is a type of protective eyewear that is designed to shield the eyes from debris, dust, wind, and other potential hazards.", + "A goggle is a type of protective eyewear that is typically worn in sports or other activities where there is a risk of flying objects or liquids entering the eye.", + "A pair of goggles is a type of protective eyewear that is typically worn when participating in sports or other activities where there is a risk of debris or other objects striking the face or eyes.", + "A goggle typically has a Louis XV furniture style with a large front glass lens and an ornate frame.", + "A pair of goggles is a type of protective eyewear that is typically worn in order to shield the eyes from debris, dust, or chemicals.", + "A goggles typically includes two circular lenses that are attached to a frame that rests on the bridge of the nose and wraps around the sides of the head.", + "A pair of goggles is a type of protective eyewear that covers the eyes and surrounding areas of the face.", + "A set of goggles is a type of protective eyewear that covers the eyes and face." + ], + "goldfish": [ + "A goldfish is a small, orange fish with fins.", + "A goldfish is a small, brightly-colored fish that is often kept as a pet.", + "Goldfish are usually orange, red, or yellow.", + "A goldfish is typically a small, thin fish with a greenish-gold body and orange fins.", + "A goldfish has a reddish-orange color, and it is a very common type of fish.", + "A goldfish is a small, thin fish that is usually orange or yellow in color.", + "A typical goldfish is a small, thin fish with a bright orange belly and fins.", + "A goldfish has a long, orange body with black spots.", + "A goldfish typically has a reddish-orange color, although there are also pale yellow and even white goldfish.", + "A goldfish is a small, yellowish-orange fish with large scales." + ], + "golf club": [ + "A golf club is a hardwired stick with a flat head on one end.", + "A golf club is a long, narrow stick with a small head on one end.", + "A golf club looks like a long, skinny rod with a big, round head on one end.", + "A golf club is typically a long, slender rod with a grip on one end and a metal head on the other.", + "A golf club is a long, thin stick with a flat head on one end.", + "A golf club has a long, slender shaft with a grip on one end and a club head on the other.", + "A golf club is a long, thin stick with a curved, club-shaped head on one end and a grip on the other.", + "A golf club is made up of a shaft with a grip on the end, and a club head attached to the shaft.", + "A golf club typically has a long shaft with a grip on one end and a club head on the other.", + "A golf club is a long, thin rod with a grip on one end and a metal head on the other." + ], + "golfcart": [ + "A golfcart is a small vehicle that looks like a miniature car.", + "A golfcart is a small, electric vehicle used for transporting golfers and their equipment around a golf course.", + "A golf cart is a small vehicle designed to carry golfers and their equipment around a golf course.", + "A golfcart is a small vehicle that is used to transport people and golf clubs around a golf course.", + "A golf cart is a small vehicle designed to carry two golfers and their golf clubs around a golf course.", + "A golfcart is a small vehicle that is used to transport golfers and their equipment around a golf course.", + "A golfcart is a vehicle that is used to transport golfers and their equipment around a golf course.", + "A golfcart typically looks like a small car or truck with four wheels.", + "A golf cart is a small vehicle designed to carry golfers and their equipment around a golf course.", + "A golfcart looks like a small car with two seats." + ], + "gondola (boat)": [ + "A gondola is an elongated and flat-bottomed boat with a tall prow and stern.", + "A gondola is a narrow, flat-bottomed Venetian rowing boat, well suited to the conditions of the Venetian lagoon.", + "A gondola is a long and narrow Venetian rowing boat, propelled by a single oarsman.", + "A gondola is a narrow, flat-bottomed Venetian rowing boat.", + "A gondola is a long, narrow boat with a pointed bow and stern.", + "A gondola is a flat-bottomed boat that is used for transportation in Venice, Italy.", + "A gondola (boat) is a long thin boat that is pointed at both ends.", + "A gondola is a long, thin boat with a tall, curved prow and stern.", + "A gondola is a long, narrow boat used for transportation in Venice, Italy.", + "A gondola is a long, narrow Venetian rowing boat, traditionally with six oarsmen." + ], + "goose": [ + "A goose is a bird with a long neck, webbed feet, and a bill that curves downwards.", + "Most geese have gray or brown plumage with white spots on their wings.", + "A goose has a long neck, a black bill, webbed feet, and a white patch on its face.", + "Geese are waterfowl with long necks and legs.", + "A goose is a big bird with a long neck.", + "A goose is a large waterbird with a long neck, webbed feet, and a honking call.", + "A goose is a waterfowl with a long neck and webbed feet.", + "A goose has a long neck, a white belly, and a brown back.", + "A goose is a large bird with a long neck, webbed feet, and a bill that curves down at the end.", + "A goose is a wild waterfowl with a long neck, webbed feet, and a loud honk." + ], + "gorilla": [ + "A gorilla is a primates.", + "A gorilla has black fur and is very large.", + "A gorilla is a large, dark-haired ape that lives in the forests of central Africa.", + "A gorilla has a large head, short neck, muscular body, and short, thick legs.", + "A gorilla is a very large ape with brown or black fur.", + "A gorilla is a large, dark-colored ape that lives in the forests of central Africa.", + "A gorilla is a large, dark-colored ape that lives in the forests of central Africa.", + "A gorilla is a large, powerful ape that is native to the African continent.", + "A gorilla is a large, dark-colored ape that lives in Africa.", + "A gorilla is a muscular and large ape." + ], + "gourd": [ + "A gourd is a fruit that has a hard skin and is shaped like a pumpkin.", + "A gourd is a fruit that grows on a vine.", + "Gourds come in a variety of shapes and sizes, but they are typically oval or oblong with a hard, thick skin.", + "A gourd is a cucurbitaceous plant, meaning it is related to cucumbers, squash, and pumpkin.", + "A gourd is a type of squash that has a hard outer shell.", + "A gourd is a plant that produces a hard-skinned fruit that can be used as a container, utensil, or ornament.", + "A gourd is a fruit that grows on a vine.", + "A gourd is a pumpkin-like fruit that is often used as a decoration.", + "Gourds are typically small to medium in size, and have an oblong or pear shape.", + "A gourd looks like a green, hard squash." + ], + "grape": [ + "Grapes are small, round fruit that grow in clusters on a vine.", + "A grape is a small, round, purplish-blue fruit that grows in clusters on a grapevine.", + "A grape is a small, round fruit that has a smooth, thin skin and a small, hard seed in the center.", + "A grape looks like a small, round, purple fruit.", + "Grapes are small, round, smooth-skinned fruit that grow in clusters on vines.", + "A grape looks like a small, round, purplish-black fruit that grows in clusters on a vine.", + "A grape is a small, round fruit that is usually purple, green, or white.", + "A grape is a small, round, purplish-blue fruit that grows in clusters on grapevines.", + "A grape is a small, round, fleshy fruit that grows in clusters on a grapevine.", + "A grape looks like a small, round, green or purple fruit with a thin skin." + ], + "grater": [ + "A grater is a kitchen tool that has a grate with sharp metal teeth.", + "A grater is a kitchen tool that consists of a metal or plastic frame with a series of sharp teeth.", + "A grater is a handheld kitchen tool with a series of sharp metal teeth or wires that is used to shred or grate food.", + "A grater is a handheld kitchen tool with a series of sharp metal teeth that are used to shred or grate food like cheese, veggies, or chocolate.", + "A grater is a handheld kitchen tool with sharp teeth that is used to shred or grate food.", + "A grater is a device that has a series of sharp blades that can be used to shred or grate food.", + "A grater is a kitchen tool that has a handle and a series of sharp metal teeth.", + "A grater is a handheld kitchen tool with a sharp metal grating surface.", + "A grater is a rectangular kitchen tool with a handle on one side and sharp teeth on the other.", + "A grater is a utensil that has a series of sharp blades that are used to shred food." + ], + "gravestone": [ + "A gravestone looks like a large stone that is placed on top of a grave.", + "A gravestone is usually a rectangular stone slab with either a rounded or pointed top.", + "A gravestone is a stone that is used to mark a grave.", + "A gravestone is a stone that is placed over a grave.", + "A gravestone is a stone that is placed over a grave.", + "A gravestone is typically a large stone with the person's name, dates of birth and death, and sometimes a short message, carved into it.", + "Most gravestones are made of granite, marble, or limestone.", + "A gravestone is a stone that is used to mark a grave.", + "A gravestone is typically a vertical piece of stone with the name of the deceased inscribed on it.", + "A gravestone typically looks like a large stone with writing on it." + ], + "gravy boat": [ + "A gravy boat typically has a wide, round base and a long, slender spout.", + "A gravy boat is a often oval-shaped or boat-shaped pitcher, used to hold gravy or sauce.", + "A gravy boat is a small boat-shaped dish used for serving gravy.", + "A gravy boat usually has a spout and a handle, and is used to pour gravy onto food.", + "A gravy boat is a small vessel with a spout that is used for pouring gravy, sauce, or soup.", + "A gravy boat is typically a small, lidded pitcher with a spout, used for serving gravy, sauce, or other liquid food items.", + "A gravy boat is a small bowl with a spout, used for pouring gravy.", + "A gravy boat is a small, boat-shaped pitcher, typically made of ceramic or silver, used for serving gravy, sauce, or other liquid condiments.", + "A gravy boat is a small vessel with a pouring lip that is used for serving gravy, sauce, or other liquid food items.", + "A gravy boat is a long, narrow boat-shaped dish with a spout, used for serving gravy, sauce, or juice." + ], + "green bean": [ + "A green bean is a long, slender green vegetable.", + "A green bean is a thin, edible legume that is typically green in color.", + "A green bean is a type of legume that is characterized by its long, green, and slightly curved shape.", + "A green bean is a long, slender legume that is typically a bright green color.", + "A green bean is a long, thin, green vegetable.", + "A green bean is a long, thin bean that is green in color.", + "A green bean is a legume that is typically long and slender with a slightly pointy end.", + "A green bean is a small, green, edible legume.", + "A green bean is a long, thin legume that is green in color.", + "A green bean is a type of vegetable that is long and thin." + ], + "green onion": [ + "A green onion has a long, white bulb with a green stalk attached.", + "A green onion is a type of onion that is harvested before the bulb has fully formed.", + "A green onion is a type of onion that is harvested before it matures.", + "A green onion is a type of onion that is harvested before the bulb has fully developed.", + "A green onion has a white base and green stalks.", + "A green onion has a white root end and a green stalk.", + "A green onion is a type of onion that has a long, thin green stalk and a small white bulb.", + "A green onion is a long, thin onion that is green in color.", + "A green onion is a pearl onion that is still immature.", + "A green onion is a type of onion that is harvested before it matures." + ], + "griddle": [ + "A griddle is flat, metal cooking surface with raised edges that is used to cook food.", + "A griddle is a flat, smooth, metal cooktop that is used to cook food.", + "A typical griddle is a large, flat cooking surface with raised edges and one or more heat settings.", + "A griddle is a large, flat surface that is heated and used for cooking.", + "A griddle is a flat, smooth surface for cooking that is usually made of metal, such as cast iron or aluminum.", + "A griddle is a piece of cookware with a smooth, flat surface that is heated by gas, electricity, or other means.", + "A griddle is a flat cooking surface that is usually heated by gas or electricity.", + "A griddle is a typically flat surface for cooking.", + "A griddle is a metal plate that is heated and used to cook food.", + "A griddle is a flat cooking surface that is typically heated by gas or electricity." + ], + "grill": [ + "A grill is a metal grate with raised bars that is used to cook food over an open fire.", + "A grill is a metal grate with a handle that is placed over an open fire.", + "A grill is typically a metal grate with raised bars that is used to cook food over an open flame.", + "A grill is a metal frame with a wire mesh or other flat surface attached.", + "A grill typically consists of a metal grate that is placed over or in front of a heat source.", + "A grill is a metal grating with spaced bars that allows heat and flames to pass through while cooking food on its surface.", + "A grill is a metal grate that is usually placed over a fire.", + "A grill typically consists of a grated surface for placing food on, over which a fire is built.", + "A grill is an outdoor cooking appliance that typically consists of a metal grating over which food is cooked on charcoal or gas.", + "A grill is an outdoor cooking appliance that consists of a platform with a grate over a fire." + ], + "grits": [ + "A grits is a type of food made from corn that is ground into a coarse meal and then boiled.", + "A grits is a cereal food made from corn that is ground into a coarse powder.", + "Grits are a food made from corn that has been ground into a coarse powder.", + "A grits is a course ground cornmeal that is boiled and usually served with butter, salt, and pepper.", + "Grits are small, round grains of corn.", + "A grits looks like a small, yellow kernel of corn.", + "A grits looks like a coarse, granular flour made from dried corn.", + "A grits typically looks like a porridge or mush.", + "A grit is a coarse, granular food made from dried corn that is ground into flour and then boiled.", + "A grits is a small, broken grain of corn." + ], + "grizzly": [ + "A grizzly is a large, brown bear.", + "A grizzly is a large, brown bear.", + "A grizzly is a large, brown bear.", + "A grizzly is a large, brown bear.", + "A grizzly bear is a large, brown bear that can weigh up to 800 pounds.", + "A grizzly is a large brown bear.", + "A grizzly bear is a very large, brown bear that can weigh up to 800 pounds.", + "A grizzly bear is a large, brown bear that can grow to be up to eight feet tall and weigh up to 1,800 pounds.", + "A grizzly is a large, brown bear with a long snout.", + "A grizzly bear is a large, hoary-furred bear with a long snout and powerful claws." + ], + "grocery bag": [ + "A grocery bag is a paper or plastic bag that is used to hold food that is purchased from a grocery store.", + "A grocery bag is a paper or plastic bag that is used to carry groceries.", + "A grocery bag is a bag that is used to carry groceries.", + "One type of grocery bag is a thin, plastic bag with handles.", + "A grocery bag is a nondescript brown paper bag.", + "A plastic grocery bag typically has a handle and is big enough to fit a few grocery items inside.", + "grocery bag looks like many things, but generally they are rectangular in shape and have handles.", + "A grocery bag is typically a paper or plastic bag that is used to carry food and other items home from the store.", + "A grocery bag is a plastic or paper bag that is used to carry groceries.", + "A grocery bag is a paper or plastic bag that is used to carry groceries." + ], + "guitar": [ + "A guitar has a long body with a curved top and a pointed bottom.", + "A guitar is a string instrument with a long neck and a body.", + "A guitar is a string instrument with a fretboard.", + "A guitar typically has six strings and is held horizontally against the player's body.", + "A guitar is a musical instrument with a long neck and strings that are plucked to create a sound.", + "A guitar has a long neck that slants up from the body.", + "A guitar typically has a large body with a rounded top and a pointed bottom.", + "A guitar is a musical instrument with a long neck and strings that are plucked to create sound.", + "A guitar is a stringed instrument with a neck and body.", + "A guitar is usually a six-stringed instrument, played by strumming or plucking the strings with the right hand while fretting with the left hand." + ], + "gull": [ + "A gull is a bird with long wings and a white or gray body.", + "A gull is a bird with long wings and a white body.", + "A gull is a seabird that has white feathers, a yellow beak, and webbed feet.", + "A gull is a type of seabird that has white feathers and a gray back.", + "A gull is a sea bird with long wings and a white body.", + "A seagull is a medium sized bird with a white body, grey wings, and a yellow beak.", + "Round head, long bill, white body with black wingtips.", + "A gull is a medium to large sized bird with long wings and moderately pointed wings.", + "A gull is a bird with a white head and body, and gray wings.", + "A gull is a bird with a white or grey body and black wingtips." + ], + "gun": [ + "This is a difficult question because there are so many different types of guns.", + "A gun typically has a long barrel and a grip for the hand.", + "A gun is a long metal or plastic tube with a handle on one end and a trigger on the other.", + "A gun is typically a long, cylindrical object with a handle at one end and a small hole at the other end.", + "A gun isobject that can be used to shoot things.", + "A gun is a metal object with a long barrel.", + "A typical gun has a long barrel with a handle on one end and a trigger on the other.", + "A gun is a device that launches a projectile, typically by the combustion of a propellant.", + "A gun is a device that fires a projectile through a barrel at high velocity.", + "A gun typically has a long barrel and a handle." + ], + "hairbrush": [ + "A hairbrush is a handheld device with bristles or wire pins used to untangle, smooth, and style hair.", + "A hairbrush typically has a long, plastic handle with a round head.", + "A hairbrush has a plastic or wooden handle with bristles sticking out of one end.", + "A hairbrush may have natural or synthetic bristles of various lengths and firmnesses attached to a handle.", + "A hairbrush is usually a handheld tool with a long handle and bristles on one end.", + "A hairbrush traditionally has a long handle with bristles emerging from one end.", + "A hairbrush is typically a plastic or wood handle with bristles attached.", + "A hairbrush is a few different things; it can be a round brush with bristles sticking out, or a paddle brush with a flat side.", + "A hairbrush is a hand-held tool with bristles or wire teeth set into a handle.", + "A hairbrush is a small handheld brush with bristles that is used to untangle and style hair." + ], + "hairnet": [ + "A hairnet is a stretchy mesh cap that covers the hair and keeps it from falling into food or other products.", + "A hairnet is a small, often nylon or mesh, net worn over hair to keep it from becoming contaminated.", + "A hairnet is a small, fine-mesh net worn over the hair to keep it clean and secure.", + "A hairnet is a fine mesh cap that covers the hair.", + "A hairnet is a mesh net that is worn over hair to keep it in place.", + "A hairnet is a small, often elasticized mesh cap that is worn over hair to keep loose hairs contained.", + "A hairnet is a often a mesh cap that fits over someone's hair to keep it contained.", + "A hairnet is a mesh cap that covers the hair and secures it in place.", + "A hairnet is a piece of fine netting that is worn over the hair to keep it in place.", + "A hairnet is a piece of clothing that is worn over the hair to keep it from becoming messy." + ], + "hairpin": [ + "A hairpin looks like a sharp V shape.", + "A hairpin is a thin metal or plastic device used to hold hair in place.", + "A hairpin is a tool used to hold hair in place.", + "A hairpin is a small, thin piece of metal with a sharp point at one end and a small hook or a coil at the other.", + "A hairpin is a small metal clip with two prongs that are bent in opposite directions.", + "A hairpin typically has two metal prongs that are bent in on themselves, creating a small space in the middle.", + "A hairpin is a small, thin piece of metal with a sharp point at one end and a small hook or loop at the other.", + "A hairpin is a small, thin, curved piece of metal with a long, narrow hole in the center and two pointed ends.", + "A hairpin is a small, thin piece of metal with a long, thin handle.", + "A hairpin is a small, metal clip with two sharp ends that are used to hold hair in place." + ], + "halter top": [ + "A halter top is a sleeveless shirt or blouse that is held up by a strap that goes around the back of the neck.", + "A halter top is a sleeveless shirt that has two straps that tie around the neck.", + "A halter top is a piece of clothing that is typically worn by women.", + "A halter top is a sleeveless shirt that ties around the neck.", + "A halter top is a sleeveless shirt that covers the chest and back, but not the arms or shoulders.", + "A halter top is a sleeveless shirt that ties around the neck, typically worn by women.", + "A halter top is a sleeveless shirt that has two straps that tie around the neck.", + "A halter top is a sleeveless shirt that ties around the neck.", + "A halter top typically has a strap that goes around the neck, and another strap or band that goes around the chest, just under the arms.", + "A halter top is a sleeveless shirt that is held up by straps that tie behind the neck." + ], + "ham": [ + "A ham looks like a big, pinkish-brown piece of meat.", + "A ham is typically a cured leg of pork.", + "A ham is a piece of meat that comes from the hind leg of a pig.", + "A ham is a cut of meat from the thigh of a pig.", + "A ham is usually a shades of pink, and has a white layer of fat on one side.", + "A ham is a type of pork that is salted and smoked.", + "A ham is a large,anganular muscle that extends from the hip to the knee.", + "A ham is a cut of meat from the back legs or sometimes the shoulders of a pig.", + "A ham is typically a cured hind leg of a pig.", + "A ham is a cut of meat from the hind leg of a pig." + ], + "hamburger": [ + "A hamburger is a sandwich featuring a patty of ground beef, placed inside a sliced hamburger bun.", + "A hamburger is a sandwich consisting of one or more cooked patties of ground meat, usually beef, placed inside a sliced bread roll or bun.", + "A hamburger is typically a round, flat piece of meat, cooked and served on a bun with various condiments.", + "A hamburger consists of a round, flat bun, with a cooked patty of ground meat inside.", + "A hamburger consists of a round, flat piece of beef placed between two slices of bread.", + "A hamburger is a sandwich that consists of a cooked patty of ground meat, usually beef, placed between the halves of a bun.", + "A hamburger consists of a round, flat piece of beef that has been cooked and is placed between two pieces of bread.", + "A hamburger is a type of sandwich that consists of a bun, a patty, and various toppings.", + "A hamburger is often a patty of beef, pork, or chicken that is grilled, fried, or otherwise cooked.", + "A hamburger is typically a beef patty that is grilled or fried and served on a bun with condiments such as ketchup, mustard, mayonnaise, and pickles." + ], + "hammer": [ + "A hammer is a hand tool that consists of a handle and a head.", + "a hammer typically has a long handle and a heavy head, making it look like a small club.", + "A hammer is a tool that has a handle and a head.", + "A hammer is a tool with a heavy head, usually made of metal, attached to a handle.", + "A hammer is a metallic tool with a heavy head and a long, slender handle.", + "A hammer is a tool that has a handle and a head.", + "A hammer is a hand tool used to strike other objects.", + "A hammer is a tool with a heavy, usually metal, head and a handle.", + "A hammer is a tool that has a heavy head at one end and a handle at the other.", + "A hammer is a tool with a heavy head and a handle." + ], + "hammock": [ + "A hammock is a piece of material, typically canvas or nylon, suspended between two points, used for sleeping or reclining.", + ".", + "A hammock is traditionally two pieces of fabric or rope which are tied at the ends to form a loop.", + "A hammock is a sling made of canvas, nylon, or other fabric, suspended between two points, used for swinging, sleeping, or reclining.", + "A hammock is a piece of fabric or netting that is suspended between two points.", + "A hammock is a bed made from fabric or rope that is suspended from two points.", + "A hammock typically consists of two pieces of fabric or rope that are suspended from either end by cords or hooks.", + "A hammock is a piece of fabric or rope that is suspended between two points, typically horizontally.", + "A hammock is a hanging bed that is typically made of woven fabric or rope.", + "A hammock is a hanging bed made of fabric, rope, or netting, suspended between two points." + ], + "hamper": [ + "A hamper is a basket that is typically used to hold laundry.", + "A hamper is a large basket that is used for storing and carrying items.", + "A hamper is a large, lidded container, typically made of wicker or other woven materials, used for storing laundry or other items.", + "A hamper is a container, typically made of woven materials such as wicker, willow, or rattan, for storing laundry or other articles.", + ".", + "A hamper is a large basket usually used for laundry.", + "A hamper is a large basket that is used to store laundry or other items.", + "A hamper is a large basket, often made of wicker or other woven material, that is used for storing or transporting laundry or other items.", + "A hamper is typically a wicker basket filled with clothes.", + "A hamper is a basket, typically with a lid, that is used for storing laundry or other items." + ], + "hamster": [ + "A hamster is a small, furry rodent.", + "A hamster is a small rodent that has a short body, a short tail, and small, furry ears.", + "A hamster is a small, rodent-like animal with a short tail, fur all over its body, and small, rounded ears.", + "Hamsters are small, rodent-like animals with fur ranging in color from brown to black.", + "Hamsters have furry bodies with short legs.", + "A hamster looks like a small stuffed animal with a wheel attached to its back.", + "A hamster typically has a small, round body, furry coat, short legs, and large cheek pouches.", + "A hamster is a small, furry rodent.", + "A hamster is small, with a round body and short legs.", + "a hamster is small, stout-bodied rodent with a short tail." + ], + "hair dryer": [ + "A hair dryer is a electrical device with a handle, a nozzle, and a cord that is used to blow hot air on wet hair to speed up the hair drying process.", + "A hair dryer is a cylindrical device with a handle.", + "A hair dryer has a nozzle on one end and a handle on the other.", + "A hair dryer is usually a small, hand-held appliance with a heating element and a fan.", + "A hair dryer is a small, handheld device that has a nozzle on one end.", + "A hair dryer is typically a handheld device with a long cord that is used to blow hot air through wet hair in order to dry it.", + "A hair dryer is a small, hand-held device with a long cord that plugs into an electrical outlet.", + "A hair dryer is a small hand-held appliance with a long cord that is used to blow hot air on wet hair to speed up the hair drying process.", + "A hair dryer typically has a long, cylindrical shape and is made of plastic.", + "A hair dryer is a handheld device that has a long, often cylindrical body." + ], + "hand glass": [ + "A hand glass typically has a short stem with a round magnifying glass at the end.", + "A hand glass typically has a handles on each side and a convex lens in the center.", + "A hand glass is a small, handheld magnifying glass.", + "A hand glass is a small magnifying glass that is held in the hand.", + "A hand glass is a small magnifying glass that you can hold in your hand.", + "A hand glass is a small, handheld magnifying glass.", + "A hand glass is a piece of magnifying glass that is held in the hand.", + "I cannot accurately describe a hand glass without a visual aid.", + "A hand glass is a magnifying glass that is held in the hand.", + "A hand glass is a small magnifying glass that is held in the hand." + ], + "hand towel": [ + "A hand towel is usually a small, rectangular piece of cloth used for drying one's hands after washing them.", + "A hand towel typically has a towel loop on one end and is smaller in width and length than a bath towel.", + "Many hand towels are small, about the size of a bath towel.", + "A hand towel is a small, rectangular piece of fabric that is used to dry your hands.", + "A hand towel typically has a loop or hook for hanging, and is smaller than a bath towel.", + "A hand towel is a small towel that is used to dry your hands.", + "A hand towel is a small towel that is used to dry your hands.", + "A hand towel is usually a small, rectangular piece of fabric that is used for drying hands.", + "A hand towel is a small towel that is typically used to dry your hands.", + "A hand towel typically has a decorative border and a hanging loop." + ], + "handcart": [ + "A handcart is a small cart, usually on two wheels, that is pushed by a person.", + "A handcart is a small cart that can be pushed by hand.", + "A handcart is a small cart that can be pushed or pulled by one person.", + " Most handcarts are small and have two wheels.", + "A handcart is a small cart that is pushed by hand.", + "A handcart is a small, two-wheeled cart that can be pushed or pulled by one person.", + "A handcart is a small two-wheeled cart that is pushed by hand.", + "A handcart is a small two-wheeled cart that is pushed and pulled by one person.", + "A handcart is a pushcart with two handles on the sides and two wheels.", + "A handcart is a small, usually two-wheeled cart that is pushed by a person, rather than pulled by an animal." + ], + "handcuff": [ + "A handcuff is a metal device that is used to secure a person's wrists together.", + "A handcuffs is a metal ring that goes around a person's wrists and is then locked in place.", + "A handcuff is usually a metal bracelet that goes around a person's wrist and locks shut.", + "A handcuff is a device that is used to restrain someone's hands or wrists.", + "A handcuff consists of two bracelets that hinge together at one end and are restrained at the other end by a chain, strap, or bar.", + "A handcuff consists of two metal loops that fit around the wrists and are connected by a short chain or a rigid bar.", + "A handcuff is a device that is used to restrain someone's wrists.", + "A handcuff typically consists of two metal loops that hinge together, and contain ratchets that allow the handcuffs to tighten around a person's wrists.", + "A handcuff is a metal bracelet that is placed around a person's wrist and tightened so that the person cannot remove it.", + "Handcuffs are two metal loops that hinge together, and fit around a person's wrists to restrain them." + ], + "handkerchief": [ + "A handkerchief is a small, square piece of fabric that is used to wipe away tears, sweat, or mucus.", + "A handkerchief looks like a piece of triangular-shaped cloth, typically made out of cotton or linen, with hemmed edges.", + "A handkerchief looks like a small, square piece of cloth.", + "A handkerchief is a piece of fabric that is used to wipe away tears, sweat, or other liquids from the face.", + "A handkerchief is a small square of fabric that is typically used to wipe one's nose or face.", + "A handkerchief is a small triangle of cloth, usually white, that is used to wipe away sweat or tears.", + "A handkerchief typically looks like a small, square piece of fabric.", + "A handkerchief is typically a square piece of cloth with a hemmed edge.", + "A handkerchief is a small piece of cloth that is used to wipe away sweat, tears, or mucus.", + "A handkerchief is a rectangular piece of cloth, typically white, that is used for wiping one's nose or face." + ], + "handle": [ + "A handle is a bar that is attached to an object in order to pick it up.", + "A handle is a part of an object that is used to hold, carry, or move it.", + "A handle typically is a long, narrow piece of metal with a curved, knobby end.", + "A handle is a mechanism by which something can be held or grasped.", + "A handle is a portion of an object that is meant to be held in the hand.", + "A handle is a part of an object that is used to hold, carry, or pull it.", + "A handle is a part of an object that is used to hold or grip the object.", + "A handle is a small metal piece that is attached to the side of a knife.", + "A handle is a cylindrical object that is attached to the blade of a tool.", + "A handle is a part of an object that is meant to be held by a person's hand." + ], + "handsaw": [ + "A handsaw typically has a long, thin blade with sharp teeth.", + "A handsaw is a long, thin blade with a handle on one end and sharp teeth on the other.", + "A handsaw is a small, handheld saw with a long, thin blade.", + "A handsaw is a tool that is used for cutting wood.", + "A handsaw is a tool that has a long, thin blade with a handle on one end and a point on the other.", + "A handsaw typically has a long, narrow blade with sharp teeth along one edge and a handle attached to the other.", + "A handsaw is a type of saw that is held in the hand and used to cut wood.", + "A handsaw typically has a long, thin blade with a handle attached to one end.", + "A handsaw looks like a long, thin blade with a handle on one end and teeth on the other.", + "A handsaw is a handheld tool with a long, sharp blade that is used for cutting wood." + ], + "hardback book": [ + "A hardback book has a hard cover, and the pages are sewn into the spine of the book.", + "A hardback book is a book that has a hard cover.", + "A hardback book looks like a book with a hard cover.", + "A hardback book is a book with a hard cover.", + "A hardback book has a rigid cover and usually has sewn bindings.", + "A hardback book has a solid cover, usually made out of cardboard, with a design on the front.", + "A hardback book is a bound book with hard covers and a sewn spine.", + "A hardback book is a book that has a hard cover.", + "A hardback book is a book that has a thick cover and usually has a dust jacket.", + "A hardback book has a solid cover with a design on it." + ], + "harmonium": [ + "Harmoniums look like small, portable organs.", + "A harmonium is a type of keyboard instrument that is similar in appearance to a small organ.", + "A harmonium is a musical instrument that is played by pressing the keys on a keyboard.", + "A harmonium is a rectangular wooden box with a keyboard on the front.", + "A harmonium is a keyed reed organ.", + "A harmonium is a keyboard instrument that has a large box with a bellows at the back, and a row of reeds at the front.", + "A harmonium is a musical instrument that looks like a small organ.", + "A harmonium is a musical instrument that is similar to an organ.", + "A harmonium is a keyboard instrument that is similar to an organ.", + "A harmonium is a musical instrument that is played by pressing the keys on a keyboard." + ], + "hat": [ + "A hat is a piece of clothing that is worn on the head.", + "A hat is a piece of clothing that is worn on the head.", + "A hat is a piece of clothing that is worn on the head.", + "A hat is a piece of clothing that is worn on the head and often has a brim.", + "There are many different types of hats, but generally speaking, a hat is a piece of clothing that is worn on the head.", + "A hat is a piece of clothing that is worn on the head.", + "A hat is a piece of clothing that is worn on the head.", + "A hat is a piece of clothing that covers the head.", + "A hat is a piece of clothing that is worn on the head.", + "A hat is a piece of clothing that is worn on the head." + ], + "hatbox": [ + "A hatbox is a box, usually round or oval in shape, that is used to store and transport hats.", + "A hatbox is usually a cylindrical box with a lid that is used to store and transport hats.", + "A hatbox is a round, boxy container used to store and transport hats.", + "A hatbox is a box with a lid, used to store and transport hats.", + "A hatbox is a tall cylindrical box that is used to store and transport hats.", + "A hatbox is a box that is used to store and transport hats.", + "A hatbox is a round, cylindrical box used to store and transport hats.", + "A hatbox is a box that is used to store and transport hats.", + "A hatbox is a box with a lid that is big enough to hold a hat.", + "A hatbox typically looks like a round box that is covered in fabric." + ], + "veil": [ + "A veil typically looks like a piece of fabric that is attached to the head in some way.", + "A veil is a piece of material that is worn over the face.", + "A veil is a head covering that is usually made of light, sheer fabric.", + "A veil is a piece of cloth that is worn over the head and face.", + "A veil is a garment that covers the head and face.", + "The most common type of veil is a simple, single-layer veil that falls to about shoulder level.", + "A veil is a piece of fabric that is attached to the hair and covers the face.", + "A veil is a piece of fabric that covers a person's face.", + "A veil is a piece of fabric that is worn over the head and face.", + "A veil is a cloth that is worn over the face, typically by a bride, to protect her from bad luck or evil spirits on her wedding day." + ], + "headband": [ + "A headband is a strip of fabric that is worn around the head.", + "A headband is a thin strip of fabric that is worn around the head, usually over the forehead.", + "A headband is a strip of cloth, leather, or plastic that goes around a person's head.", + "Headbands are usually thin bands of material that go around the head.", + "A headband is a strip of material, usually cloth, leather, or plastic, that is worn around the head.", + "A headband is a piece of cloth or other material worn around the head to hold the hair in place or to keep sweat or other liquids from running down the face.", + "A headband is a strip of cloth, leather, or plastic that goes around a person's head.", + "A headband is typically a piece of cloth or ribbon that is worn around the head, either to keep hair out of the face, or as a decorative accessory.", + "A headband is a band that goes around the head.", + "A headband is a band of fabric that goes around the head." + ], + "headboard": [ + "A headboard is a rectangular panel that attaches to the head of a bed.", + "A headboard is a piece of furniture that is attached to the head of a bed.", + "A headboard is usually a rectangular shaped piece of wood that is attached to the head of a bed.", + "A headboard is a piece of furniture that attaches to the head of a bed.", + "A headboard is a piece of furniture that is attached to the head of a bed.", + "A headboard is a piece of furniture that is attached to the head of a bed.", + "A headboard typically consists of a solid frame with a decorative element attached to the top.", + "A headboard is a piece of furniture that attaches to the head of a bed.", + "A headboard is a piece of furniture that attaches to the head of a bed.", + "A headboard is a decorative panel that attaches to the head of a bed." + ], + "headlight": [ + "A headlight is a light source mounted on the front of a vehicle, typically integrated with the vehicle's headlights.", + "A headlight is a light source mounted on the front of a vehicle that is used to illuminate the road ahead.", + "A headlight is a cylindrical light that is attached to the front of a vehicle.", + "A headlight typically contains a bulb that produces light when electricity is applied to it.", + "A headlight is typically a round light that is attached to the front of a car.", + "A headlight is a device that is mounted on the front of a vehicle to provide illumination of the roadway ahead during night and daytime driving, and to increase the driver's visibility of pedestrians and other potential road hazards.", + "A headlight is a light that is attached to the front of a vehicle to help the driver see the road ahead.", + "Headlights are typically round or oval lights that are placed on the front of a vehicle.", + "When you turn on your car's headlights, light beams emit from the front of your car.", + "A headlight is a light source at the front of a vehicle that is used to illuminate the road ahead." + ], + "headscarf": [ + "A headscarf is a piece of cloth that is worn over the head, typically by Muslim women.", + "A headscarf is a triangular- or square-shaped piece of cloth that is wrapped around the head and tied at the neck.", + "A headscarf is a piece of fabric that is worn around the head.", + "A headscarf is a piece of cloth worn by some Muslim women to cover their hair.", + "A headscarf is a rectangular or square piece of cloth that is wrapped around the head and tied at the back or on the side.", + "A headscarf is a piece of fabric that is wrapped around the head.", + "A headscarf is a piece of cloth or other material that is worn over the head, typically by women.", + "A headscarf is a piece of cloth that is wrapped around the head.", + "A headscarf is a piece of cloth that is wrapped around the head.", + "A headscarf is a piece of cloth that is wrapped around the head." + ], + "headset": [ + "A headset typically has two earpieces connected by a band or frame.", + "A headset is a type of headphone that typically has a microphone attached, allowing the wearer to speak and be heard without holding a phone or other device.", + "A headset is a type of headphones that is typically used in call centers and other telephone-intensive jobs.", + "A headset is a piece of audio equipment that goes over or around your head to deliver sound to your ears.", + "A headset is a piece of audio equipment that covers both ears and sits over the head.", + "A headset is a small set of headphones, typically with a microphone attached, that is worn over the ears.", + "A headset is a type of headphone that is attached to a microphone.", + "A headset is a small pair of speakers that fit over a person's ears.", + "The most common type of headset looks like a pair of earphones connected by a band or wire.", + "A typical headset consists of a set of earphones with a microphone attached." + ], + "headstall (for horses)": [ + "A headstall is a piece of horse tack that is used to help control and direct a horse.", + "A bridle is a piece of horse tack that goes over the head of the horse.", + "noun: a frame of metal, leather, or other materials, used to hold a horse's bit in place in its mouth, to which the reins are attached.", + "A bridle used on a horse has a headstall that goes over the horse's head and around its ears.", + "A headstall typically has a poll strap that goes around the horse'shead, just behind the ears, and a noseband that attaches to the poll strap and goes around the horse's nose.", + "A headstall is a piece of horse tack that is used to bridle a horse.", + "A headstall is a piece of horse equipment that goes over the horse's head, used to direct or control the horse.", + "A headstall is a device that is used to help control a horse.", + "A headstall is a piece of equipment that is used to help control a horse.", + "A headstall is a piece of horse tack that is used to help control a horse." + ], + "heart": [ + "A heart is a muscular organ that pumps blood throughout the body.", + "A heart is a muscle that pumps blood through the body.", + "A heart looks like a human heart, with two lobes on either side and a point at the bottom.", + "A heart looks like a muscular, cone-shaped organ that pumps blood through the circulatory system.", + "A heart is a muscular organ in the chest that pumps blood through the body.", + "A human heart is a cone-shaped organ that lies in the chest between the lungs.", + "A heart looks like a muscle with four chambers.", + "The heart is a muscle that pumps blood throughout the body.", + "A heart is a muscular organ that pumps blood throughout the body.", + "A human heart is a muscular organ about the size of a fist that pumps blood throughout the body." + ], + "heater": [ + "A heater is a metal box with a heating element inside.", + "A heater is a device that emits heat, usually by means of convection, radiation, or a combination of the two.", + "A heater usually looks like a metal box with a wire attached to it.", + "A heater is typically a metal box with a handle on the side.", + "A space heater is a portable device that is used to heat a single room or area of a home.", + "A heater is a metal box that sits on the floor and has a knob to turn it on.", + "Most heaters have a rectangular shape with a flat front and back.", + "A heater is a device that uses electricity or gas to heat up a room or building.", + "The heater is a large, red object that emits heat.", + "A heater is typically a metal box with a door that opens to reveal a chamber in which fuel is burned." + ], + "helicopter": [ + "A helicopter typically has one large rotor blade at the top and a smaller rotor blade at the back.", + "A helicopter has long metal blades that spin around a central mast.", + "A helicopter has large blades that spin around a central post.", + "A helicopter is a type of rotary-wing aircraft in which lift and thrust are supplied by rotors.", + "A helicopter is a type of aircraft with large rotors that spin around to lift it into the air.", + "A helicopter is a type of aircraft that has rotors on top that spin around.", + "A helicopter is a type of aircraft that has rotors on top of it.", + "A helicopter typically has one or two large rotors that spin around to lift the craft into the air.", + "A helicopter typically has one large rotor blade on top and a smaller rotor blade on the tail.", + "A helicopter typically has one large rotor blade on top and a smaller rotor blade on the tail." + ], + "helmet": [ + "A helmet is a piece of headgear that is worn to protect the head.", + "A helmet is a head covering that is typically made of hard plastic or metal.", + "A helmet is a piece of personal protective equipment that covers the head and face.", + "A helmet is a type of protective gear worn by many people, especially cyclists, skaters, and skateboarders.", + "A helmet looks like a piece of padding that goes over someone's head.", + "Helmets are typically made of hard plastic or metal and have a foam lining inside.", + "A helmet is a head covering that is typically made of hard materials such as plastic or metal.", + "A helmet is typically made of plastic or metal and has a visor to protect the wearer's eyes.", + "A helmet is a device that is worn on the head to protect against injuries.", + "A helmet is a piece of headgear that helps protect the head from injuries." + ], + "heron": [ + "A heron is a tall, wading bird with a long neck, long legs, and a long, sharp beak.", + "A heron is a long-necked, wading bird with long, thin legs.", + "A heron is a long-necked, wading bird with a long, sharp beak.", + "A heron is a tall, wading bird with a long neck, long legs, and a long, sharp beak.", + "Herons are long-legged freshwater and coastal birds in the family Ardeidae, with 64 recognised species in all.", + "A heron is a tall, thin bird with a long neck, legs, and bill.", + "A heron has a long neck, a long, sharp beak, and long legs.", + "A heron is a tall, thin bird with long legs and a long neck.", + "A heron has long legs and a long neck.", + "Herons are long-necked, wading birds with long, sharp beaks." + ], + "highchair": [ + "A highchair typically has a seat and a tray attached to a metal frame.", + "A highchair is a small chair with a tray attached to it that is used to feed young children.", + "A highchair looks like a small chair with a tray attached to the front of it.", + "A highchair looks like a small chair that has a tray attached to it.", + "A highchair is a chair with a high seat back and tray attached, used to feed young children.", + "A highchair is a chair with a high back and a tray attached to the front.", + "allowing a child to sit at table height to eat; typically has a tray for food and arms to keep the child from falling.", + "A highchair is a chair with a high back and arms, designed to allow a person to sit up comfortably.", + "A highchair is a piece of baby equipment that is used to seat a small child at a regular adult table.", + "A highchair is a chair that is designed to seat a child at a high table." + ], + "hinge": [ + "A hinge is a device that allows two things to pivot or swing relative to each other.", + "A hinge is a metal object that is used to attach two objects together so that they can move freely.", + "A hinge is a device that connects two pieces of wood or metal, allowing them to move relative to each other.", + "A hinge is a metal joint that allows two objects to rotate around each other.", + "A hinge is a mechanical device that connects two pieces of material together while allowing them to move relative to each other.", + "A hinge is a metal piece that fastens two things together, often allowing one of the things to move freely.", + "A hinge is a piece of hardware that is used to join two objects together so that they can swing open and closed.", + "A hinge is a metal device that is used to join two pieces of wood together so that they can swing open and closed.", + "A hinge is a mechanical device that connects two objects together while allowing them to rotate relative to each other.", + "A hinge is a device that allows two objects to rotate relative to each other about a fixed axis." + ], + "hippopotamus": [ + "Typically, a hippopotamus is large, round, and herbivorous.", + "A hippopotamus is an extremely large mammal that typically weigh around two to four thousand pounds.", + "A hippopotamus is a large, plant-eating mammal that lives in rivers, lakes, and swamps of sub-Saharan Africa.", + " large, round body with short legs and a huge head with a wide mouth that opens nearly 4 feet wide.", + "A hippopotamus is a large, round mammal with short legs and a big head.", + "Hippopotamuses are large mammals with short, stumpy legs and a huge body.", + "These massive mammals have barrel-shaped torsos, large mouths opening nearly 7 feet wide, short legs and reddish-brown skin subtended by a thick layer of fat.", + "A hippopotamus is a large, four-legged mammal with a big head and mouth.", + "A hippopotamus is a large, chubby mammal with a short, stubby tail.", + "A hippopotamus is a very large mammal that is typically gray-brown in color." + ], + "hockey stick": [ + "A hockey stick is a long, slim stick with a curved end.", + "A hockey stick typically has a long, slender shaft with a flat blade on one end.", + "A hockey stick is long and slim with a big, curved blade on one end.", + "A hockey stick is a long, curved piece of wood or composite that is used by hockey players to hit the puck.", + "A hockey stick is a long, skinny stick that is used to hit a hockey puck.", + "A hockey stick is a long and slender piece of wood that is used to hit the puck in the game of hockey.", + "A hockey stick is a long and narrow implement with a curved blade at one end, used to hit a ball or puck.", + "A hockey stick is a long, narrow piece of wood or composite with a curved blade at one end.", + "A hockey stick typically has a long, rounded shaft with a flat blade on the end.", + "A hockey stick is a piece of equipment used in the sport of ice hockey." + ], + "hog": [ + "A hog is a large, four-legged mammal with a snout and a tail.", + "A hog is a large, four-legged, omnivorous mammal.", + "Hogs are stocky, four-legged animals with short, stiff hair.", + "Hogs are four-legged mammals with dark, coarse hair.", + "A hog is a large, four-legged animal with a snout.", + "A hog is a mammal with four legs and a nose that resembles a pig.", + "A hog is a four-legged mammal with short, bristly hair.", + "There is no one answer to this question as there are many different types of hogs.", + "A hog is a large, four-legged mammal with a short, snout-like nose.", + "A hog is a mammal with four legs, a snout, and a curly tail." + ], + "home plate (baseball)": [ + "A home plate (baseball) looks like a five-sided slab of whitened rubber that is set at ground level.", + "A home plate (in baseball) is a pentagon-shaped slab of whitened rubber that is set at the corner of the infield.", + "A home plate in baseball is a pentagon-shaped slab of white rubber that measures 17 inches across.", + "A home plate in baseball is a pentagon-shaped slab of whitened rubber that is 17 inches wide and 43 inches long.", + "A home plate is a pentagon-shaped piece of whitened rubber that is set at the intersection of the foul lines in baseball stadiums.", + "A home plate in baseball is a pentagon-shaped plate made of whiteness that serves as the final base that a player must touch in order to score.", + "A home plate (baseball) is a white rectangle with rounded corners.", + "A home plate in baseball is a pentagon-shaped slab of whitened rubber that is set at the center of the diamond.", + "It is a five-sided slab of whitened rubber that sits atop a pedestal and is used to define the strike zone.", + "A home plate (baseball) is a pentagon-shaped piece of white rubber that is 17 inches wide and 3/8 of an inch thick." + ], + "honey": [ + "Honey is a golden-yellow, viscous fluid that is produced by honeybees from the nectar of flowers.", + "Honey is a golden-colored, sweet-tasting syrup that is made by bees from the nectar of flowers.", + "A honey is a liquid that is secreted by bees and is used to make their honeycombs.", + "A honey is a golden, syrupy liquid made by bees from the nectar of flowers.", + "A honey is a sweet, sticky, yellowish-brown substance that is produced by bees.", + ".", + "A honey is a sweet liquid produced by bees from the nectar of flowers.", + "Honey is a sweet, viscous food substance produced by bees and some related insects.", + "A honey is a type of food that is produced by bees.", + "A honey is a sweet, viscous food substance produced by bees and some related insects." + ], + "fume hood": [ + "A fume hood is a large, ventilated enclosure that is typically installed in a laboratory over a work surface.", + "A fume hood is a type of ventilation system that is typically used in industrial and research settings.", + "A fume hood looks like a ventilated cabinet with a glass front.", + "A fume hood is a ventilation device that is designed to limit exposure to hazardous or poisonous fumes.", + "A fume hood is typically a large, encased unit that is installed in a laboratory or other work space.", + "A fume hood is typically a large, rectangular box that is enclosed on three sides and has a glass window on the front.", + "A fume hood is a type of local ventilation device that is designed to limit exposure to hazardous airborne contaminants by draws them away from the work area.", + "A fume hood is a ventilation appliance that is designed to limit exposure to hazardous airborne contaminants.", + "A fume hood is a large, enclosed cabinet that has a ventilation system to remove fumes and other airborne contaminants.", + "A fume hood is typically a large, enclosed glass cabinet with a fan at the back that pulls fumes and smoke away from the user." + ], + "hook": [ + "A hook is a tool consisting of a bend in a length of wire, typically with an eye at the end, for catching hold of or hanging things on.", + "There is no one answer to this question as hooks can come in many different shapes and sizes.", + "There is no single answer to this question as hooks can take many different forms.", + "A hook looks like a small piece of metal with a sharp point on the end.", + " and how to write oneMost hooks are two lines and rhyme.", + "A hook is usually a short, attention-grabbing opening to a song or story.", + "There is no one answer to this question, as hooks can take on many different forms.", + "?A hook is a type of hardware used to hang things.", + "A hook is a type of lure that is used to catch fish.", + "Most hooks have a \"J\"-shaped hook on one end and a three-pronged boo on the other." + ], + "hookah": [ + "A hookah is a tall, typically glass-based, water pipe used to smoke flavored tobacco.", + "A hookah is a tall, cylindrical water pipe with a long, flexible hose attached to it.", + "A hookah is aWaterpipe with a bowl, a hose, and a mouthpiece.", + "A hookah is a tall, vertical tobacco pipe with a long flexible tube that is inserted into the top.", + "A hookah is a tall, often ornate, water pipe used for smoking flavored tobacco.", + "A hookah is a water pipe that consists of a bowl, a stem, and a hose.", + "A hookah is a tall, metal, or glass water pipe with a flexible tube attached.", + "A hookah is a tall, often ornate water pipe used for smoking tobacco.", + "A hookah is a water pipe with a long, flexible tube that is used to draw smoke through a bowl of flavored tobacco.", + "A hookah typically consists of a water bowl, a stem, a vase, and a hose." + ], + "hornet": [ + "Hornets are large, predatory wasps with long, narrow bodies and black-and-white markings.", + "A hornet is a large, aggressive wasp.", + "A hornet is a large, predatory wasp with a long body.", + "A hornet is a large, predatory wasp with a long, narrow body and a stinger.", + "A hornet is a large, aggressive wasp.", + "A hornet is a large, wasp-like insect.", + "A hornet is a large, wasp-like insect.", + "A hornet is a large, wasp-like insect with a long, brown or black body and yellow stripes.", + "Hornets are large, aggressive wasps that can be very dangerous if they feel threatened.", + "A hornet look like a large, yellow and black wasp with a long, narrow body." + ], + "horse": [ + "A horse has a long face with big eyes, a long mane, and four legs.", + "A horse has a long neck, four legs, and a tail.", + "A horse is a four legged mammal with a long neck.", + "A horse has a long face with big ears, a mane, and a tail.", + "A horse is a large, four-legged mammal with a long neck, a short tail, and hooves.", + "A horse is a four-legged mammal with a long neck and head.", + "A horse is a four-legged mammal with a long neck, mane, and tail.", + "A horse generally has a long face, four legs, and a tail.", + "A horse is a large mammal with four legs, a long neck, and a head with big eyes and a big nose.", + "A horse has a long neck, a long body, and four legs." + ], + "hose": [ + "A hose is a tubular conduit designed to convey fluids from one location to another.", + "A garden hose is a flexible tube used to convey water.", + "A hose is a long, thin tube that is used to carry water or other liquids.", + "A hose is a long, narrow tube that carries water or other fluids.", + "A hose is a long, cylindrical tube that is used to carry water, gas, or other fluids.", + "A hose is a long, thin, cylindrical tube made of flexible material (usually rubber) with a metal or plastic fittings on each end.", + "A hose is a flexible tubular connection between two points, typically water being carried from a tap to a shower or garden, or petrol being carried from a car's fuel tank to its engine.", + "A hose is a length of flexible tubing used to convey fluids from one location to another.", + "A hose is a long, flexible tube used to carry water, gas, or other fluid substances.", + "A hose is a long, thin, flexible tube that is used to carry water from one place to another." + ], + "hot-air balloon": [ + "A hot air balloon is usually a large balloon that is filled with hot air.", + "A hot-air balloon is a large balloon that is filled with hot air.", + "A hot-air balloon is typically a large, usually round, bag made of heat-resistant fabric such as nylon.", + "A hot-air balloon is a large, bag-like balloon that is filled with hot air.", + "A hot air balloon consists of a large, bag-like envelope of thin fabric filled with hot air.", + "\nA hot air balloon is a large balloon that is filled with hot air.", + "Most hot-air balloons are brightly colored and have a basket attached to the bottom for passengers.", + "A hot-air balloon is a large, bag-like object that is filled with hot air.", + "A hot-air balloon typically has a round, basket-like bottom that is attached to the balloon itself.", + "A hot-air balloon is a round, bag-like object that is filled with hot air." + ], + "hotplate": [ + "A hotplate is a portable cooking appliance that features one or more electric heating elements.", + "A hotplate is a flat surface with built-in electric coils that can be used to cook food.", + "A typical hotplate has a flat circular heating element under a smooth metal plate.", + "A hotplate is a small appliance that typically has a flat heating element on top and an adjustable temperature control.", + "A hotplate looks like a small, flat cooking surface with a heating element underneath.", + "A hotplate is a small appliance that typically has a flat surface for cooking.", + "A hot plate is an electric appliance with a flat surface that gets hot.", + "A hotplate is a flat metal plate with a heating element underneath.", + "A hotplate is a flat metal plate that heats up when it is turned on.", + "A hotplate is a small appliance that contains one or more electric heating elements." + ], + "hot sauce": [ + "A hot sauce typically looks like a thin, liquid condiment.", + "A hot sauce is usually a dark red or orange color and is very liquidy.", + "A hot sauce is a thin, watery sauce that is typically red or orange in color and has a spicy, vinegary taste.", + "A hot sauce is usually a liquid with a deep red color.", + "A hot sauce is a viscous, liquid condiment made from a variety of chili peppers, vinegar, and spices.", + "A hot sauce can be a variety of colors, depending on the ingredients used, but it is typically a reddish color.", + "A hot sauce may be any variety of liquid, semisolid, or solid food substance that is typically seasoned with chili peppers and other hot spices and used as a condiment or ingredient in various dishes.", + "A hot sauce is a liquid condiment made from peppers, vinegar, and other spices.", + "A hot sauce is typically a thin, liquid condiment made from peppers, vinegar, and spices.", + "A hot sauce is usually a red or orange color and is very thin." + ], + "hourglass": [ + "A hourglass is a three-dimensional figure whose two ends are connected by a narrow waist.", + "A hourglass is a tall, vertical glass with a narrow neck that connects to a larger, round base.", + "A hourglass is a glass or plastic container with a narrow neck and two rounded bulges at the bottom, used to measure time by the flow of sand from one bulge to the other through a narrow opening in the neck.", + "Traditionally, an hourglass is an instrument used to measure the passage of time.", + "A hourglass is a timekeeping device that consists of two glass bulbs connected by a narrow middle section.", + "An hourglass is a shape that is narrower in the middle and wider at the top and bottom.", + "A hourglass is a glass container with a narrow neck and two wide, rounded bodies.", + "A hourglass is a shaped like an upside down U with a narrow waist in the middle.", + "An hourglass is a glass device used to measure the time it takes for something to happen.", + "A hourglass looks like an hourglass." + ], + "houseboat": [ + "A houseboat is a vessel that is designed to be used as a floating home.", + "A houseboat typically looks like a regular house, but it is designed to float on water.", + "A houseboat looks like a floating house.", + "A houseboat is a boat that is designed to look like a house.", + "A houseboat is typically a large, flat-bottomed vessel that is designed for long-term occupancy and can be found in many different shapes and sizes.", + "A houseboat is a boat that is designed and built to be used as a home.", + "A houseboat is a boats designed for long-term occupancy, usually equipped with amenities found in a home, such as a kitchen, bathroom, and living area.", + "A houseboat is a boat that has been designed to look like a house.", + "A houseboat is a floating home that is designed to look like a traditional house.", + "A houseboat is a floating home that is typically moored in a marina." + ], + "hummingbird": [ + "A hummingbird is a very small bird that can hover in the air and fly backward.", + "Hummingbirds are very small birds with iridescent feathers.", + "The smallest bird in the world, hummingbirds are incredibly nimble and can hover in mid-air by flying in a figure eight.", + "A hummingbird has a very small body with wings that flap very quickly.", + "A hummingbird is a small, brightly colored bird with long wings and a long, thin beak.", + "A hummingbird is a small bird with a long beak.", + "A hummingbird is a very small bird with a long beak.", + "They are tiny birds with colorful feathers.", + "A hummingbird is a small, colorful bird with long wings and a long, thin beak.", + "A hummingbird is a small bird with brightly colored feathers." + ], + "hummus": [ + "A hummus is a thick, creamy paste that is typically made from chickpeas, tahini, garlic, and lemon juice.", + "A hummus typically has a light brown color, and is smooth and creamy in texture.", + "A hummus is traditionally a Levantine dish made from ground chickpeas, tahini, lemon juice, garlic, and olive oil.", + "A hummus typically has a light brown color and is smooth in texture.", + "A hummus typically has a smooth, creamy texture and is made from a combination of ground chickpeas, tahini, olive oil, garlic, and lemon juice.", + "A hummus is a creamy dip or spread made from chickpeas, tahini, olive oil, and lemon juice.", + "A hummus is a food dip or spread made from cooked, mashed chickpeas or other beans, blended with tahini, olive oil, lemon juice, salt and garlic.", + "A hummus is a thick, creamy paste that is traditionally made from mashed chickpeas, tahini, olive oil, garlic, and lemon juice.", + "A hummus is a thick, pastelike spread made from cooked, mashed chickpeas, blended with tahini, olive oil, lemon juice, and garlic.", + "A hummus is a thick, smooth paste that is typically made from chickpeas, tahini, garlic, and lemon juice." + ], + "polar bear": [ + "Polar bears are large, white bears with long necks and small eyes.", + "Polar bears are large, white bears with long necks and small eyes.", + "Most polar bears are white, although their fur may appear yellow when it is dirty or stained.", + "Polar bears are very large, white bears.", + "A polar bear is a white bear that lives in the Arctic.", + "Polar bears are large, white bears with long necks and small eyes.", + "A polar bear is a huge, white, bear-like creature with a long snout, small eyes, and big furry paws.", + "A polar bear is a large white bear that lives in the Arctic.", + "A polar bear is a white bear that lives in the Arctic.", + "A polar bear is a large, white bear that lives in the Arctic." + ], + "icecream": [ + "Ice cream generally has a creamy consistency, and often has a dense or thick texture.", + "A typical ice cream is round or cone-shaped, and has a smooth, creamy texture.", + "A classic ice cream is white or ivory in color and has a smooth, creamy texture.", + "An ice cream is a scoop of smooth, soft ice cream in a cone or a bowl.", + "Ice cream is usually a frozen dessert that is made from cream and milk.", + "An ice cream is a frozen food typically made from dairy products, such as milk and cream, and often combined with fruits or other ingredients and flavors.", + "Ice cream is a frozen dessert usually made from dairy products, such as milk and cream, and often combined with fruits or other ingredients and flavors.", + "An ice cream typically has a creamy texture and can be either soft or hard.", + "A scoop of ice cream is generally round, and either off-white, light brown, or pale yellow.", + "Some say that an ice cream looks like a soft, creamy, and cold food, while others say that it looks like a sweet and delicious treat." + ], + "popsicle": [ + "A popsicle is a type of frozen dessert that is usually made from fruit juice or flavored syrup.", + "A popsicle is a frozen treat that is typically made with fruit juice or sugar water and has a wooden stick poking out of the top.", + "A popsicle looks like a small ice cream on a stick.", + "A popsicle is typically a frozen treat on a stick.", + "A popsicle is a thin, ice cream-like treat on a stick.", + "A popsicle is a frozen treat on a stick.", + "A popsicle is a frozen sweet treat that is usually made from fruit juice or cream.", + "A popsicle is generally a pole or stick of ice cream or other flavored frozen dessert, with a coating of chocolate or other flavor on the outside.", + "Most popsicles are composed of ice and fruit juices or other flavoring agents.", + "A popsicle is a colorful, sweet, frozen treat on a stick." + ], + "ice maker": [ + "An ice maker is a machine that makes ice.", + "An ice maker is typically a small, freestanding machine that is used to make ice.", + "An ice maker typically looks like a small, metal box with a lever on the front.", + "An ice maker looks like a rectangular box with a spout on the front.", + "An ice maker is a small appliance that looks like a mini refrigerator.", + "An ice maker is a device that produces ice.", + "An ice maker is a small machine that is usually kept inside of a freezer.", + "An ice maker is a small appliance that is used to make ice.", + "An ice maker is a machine that produces ice.", + "An icemaker is a box that is generally attached to the freezer." + ], + "ice pack": [ + "An ice pack is a bag of frozen liquids, typically water, encased in a soft material.", + "An ice pack is usually a plastic bag filled with water and ice.", + "An ice pack typically consists of a plastic bag filled with water, with a smaller compartment containing a freezing agent.", + "An ice pack is a plastic bag filled with water and frozen.", + "An ice pack is an object, usually plastic, filled with water and frozen.", + "An ice pack is a plastic bag filled with water and frozen.", + "An ice pack generally consists of a sealed plastic bag filled with water, with a smaller sealed plastic bag of ice inside of it.", + "An ice pack is a bag filled with either ice cubes or a gel that stays cold when placed in a freezer.", + "An ice pack is a sealed plastic bag filled with water and small chips of ice.", + "An ice pack typically consists of a bag filled with water that has been frozen." + ], + "ice skate": [ + "An ice skate is a shoe with a blade on the bottom that helps a person glide across the ice.", + "An ice skate is a type of shoe with a thin blade attached to the bottom that is used for ice skating.", + "An ice skate is a blade with a boot attached.", + "An ice skate is a metal blade with a sharpened edge that is attached to a boot.", + "An ice skate has a metal blade with a sharpened edge that is attached to a boot.", + "An ice skate is a thin, curved blade that is attached to the bottom of a boot.", + "An ice skate is a shoe worn to glide over ice.", + "An ice skate looks like a shoe on a blade.", + "An ice skate is a shoe-like garment with a blade attached to the bottom that is used for gliding across the ice.", + "An ice skate is a thin piece of metal with a sharp blade that is worn on the bottom of a boot to glide across ice." + ], + "igniter": [ + "An igniter is a small, metal device with a flat end that fits over the end of a firework.", + "An igniter looks like a small, cylindrical device with a metal wire running through the center.", + "math.", + "Igniters are typically small, cylindrical objects with a metal core.", + "An igniter is usually a small, metallic piece that fits onto the end of a cigarette.", + "An igniter is a small metal tube with a wire running through it.", + "An igniter is a small, cylindrical device that contains a small amount of a combustible material.", + "An igniter is a wire that gets hot when electricity flows through it.", + "An igniter is a device used to set fire to a fuel or to initiate a chemical reaction.", + "An igniter is a small, metal coil that emits a spark of electricity when electricity is passed through it." + ], + "inhaler": [ + "An inhaler is typically a small, cylindrical device that is held in the hand.", + "Inhalers are small devices that people use to breathe in their medication.", + "An inhaler is a device that is used to deliver medication to the lungs in the form of a mist.", + "An inhaler typically consists of a plastic container with a mouthpiece and a detachable cover.", + "An inhaler is a device that delivers medication directly to the lungs.", + "An inhaler typically consists of a plastic case that contains a small metal canister.", + "An inhaler is a small, hand-held device that delivers medication to the lungs in the form of a mist.", + "A typical inhaler has a plastic casing that contains a pressurized canister of medication.", + "The inhaler is a plastic device that has a mouthpiece and a canister of medication.", + "An inhaler typically has a cylindrical outer casing that contains a pressurized metered-dose aerosol canister." + ], + "iPod": [ + "A white iPod with a click wheel.", + "An iPod is a handheld media player that is small and rectangular with a color screen.", + "An iPod is a small, rectangular device with a touch screen.", + "An iPod is a small media player that typically has a small color screen and physical buttons for control.", + "An iPod looks like a small, handheld music player with a color screen.", + "an iPod is a small white device that you can hold in your hand.", + "An iPod is a small, portable music player.", + "A small, portable music player with a screen and a click wheel for navigating menus.", + "An iPod is a small, rectangular device with a large, color touchscreen display.", + "An iPod is a small, hand-held music player with a color screen." + ], + "iron (for clothing)": [ + "An iron is a small appliance with a flat, heavy base that gets hot when plugged into an outlet.", + "\nAn iron for clothing looks like a handheld device with a smooth, flat surface that emits heat.", + "An iron is a household appliance that is used for pressing the wrinkles out of clothes.", + "An iron is a household appliance that is used for pressing the wrinkles out of clothes.", + "It is a metal object with a smooth, flat bottom and a handle.", + "An iron is a household appliance that is used for pressing the wrinkles out of clothes.", + "An iron is a hand-held appliance with a smooth, flat, metal bottom that is heated and pressed against fabric to remove wrinkles.", + "An iron is a household appliance that is used to press the wrinkles out of clothes.", + "A typical iron for home use is a small appliance with a flat, triangular plate with a handle attached, that is heated to smooth out wrinkles in fabric.", + "An iron (for clothing) is a small, hand-held appliance that has a flat, metal bottom that heats up and is used to press wrinkles out of fabric." + ], + "ironing board": [ + "An ironing board looks like a long, thin rectangle with a smooth, padded surface.", + "A typical ironing board is a small, foldable table with a padded surface.", + "The most common type of ironing board is a flat surface with a heat-resistant cover and legs that fold out to support the board at a raised height.", + "An ironing board is a long, narrow board that is covered in heat-resistant fabric.", + "A typical ironing board has a rectangular shape and is covered in heat-resistant fabric.", + "An ironing board is a flat surface with a heat resistant cover that is used to press clothes.", + "An ironing board looks like a small, foldable table with legs.", + "An ironing board consists of a flat surface, usually covered with a heat-resistant material, and a metal leg at each end to support the surface.", + "An ironing board typically has a rectangular shape and is covered in a heat-resistant material.", + "It is a flat, padded surface with a heat-resistant cover, used to press clothes." + ], + "jacket": [ + "Most jackets have sleeves and a zipper down the front.", + "A jacket typically has long sleeves, a front zipper, and a hood.", + "A jacket is a piece of clothing that covers the upper body and typically has sleeves.", + "A jacket is a piece of clothing that covers the upper body and often the arms.", + "A jacket is a type of clothing that is worn over other clothes.", + "A jacket is a piece of clothing that is worn on the outside of other clothes.", + "A jacket looks like a piece of clothing that is meant to be worn on top of other clothing.", + "A jacket usually has long sleeves and covers the body from the neck down to the waist.", + "A jacket is a type of clothing that is worn on top of other clothes.", + "A jacket is a piece of clothing that is worn on the top half of the body." + ], + "jam": [ + "When fruits or vegetables are boiled with sugar and water to create a spreadable paste, this is known as a jam.", + "A jam is a viscous food spread made from fruit and sugar boiled to a thick consistency.", + "A jam is a spread made from fruit and sugar boiled to a thick consistency.", + "A jam is a thick and sticky spread made from fruit and sugar boiled to a pulp.", + "A jam looks like a thick, viscous liquid made up of small pieces of fruit.", + "A jam is a sweet spread made from fruit and sugar that is boiled down to a thick consistency.", + "A jam is a type of fruit spread made by cooking fruit and sugar to create a thick, sweet, soft spread.", + "A jam is a spread made from fruit and sugar that is cooked until it thickens.", + "A jam is a thick, sweet, spreadable fruit preserve.", + "A jam is a sweet, sticky spread made from fruit and sugar boiled to a thick consistency." + ], + "jar": [ + "A jar is a container made of glass, metal, or ceramic, with a wide mouth and a screwed-on, tight-fitting lid.", + "A jar is a cylindrical container with a wide mouth and a screw-on or snap-on lid.", + "A jar is a cylindrical container with a narrow neck and a wide mouth.", + "A jar is a cylindrical vessel with a wide mouth and a tight-fitting lid.", + "A jar is a container that is circular in shape with a wide mouth.", + "A jar is a container with a wide mouth and a screw-on lid.", + "A jar is usually a cylindrical container with a wide mouth that is used to hold food or other materials.", + "A jar is typically a round, cylindrical container with a wide mouth and a screw-on lid.", + "A jar is a container that has a wide mouth and is made of glass, metal, or ceramic.", + "A jar is a type of container that is typically made out of glass or ceramic." + ], + "jean": [ + "A jean is a type of clothing typically worn by people.", + "A pair of jeans is typically a blue denim pant with straight leg styling.", + "A jean is typically a blue denim pant.", + "A jean is a type of clothing that is typically made from denim fabric.", + "A jean is a type of pants that is usually made from denim.", + "A jean is a type of pants or trousers, typically made from denim or dungaree cloth.", + "A jean is a type of clothing that people typically wear when they want to be comfortable but also look good.", + "A jean usually has a blue color and is made out of denim fabric.", + "A jean is a type of pants that is typically made out of denim.", + "A jean is a close-fitting article of clothing that is typically made from denim." + ], + "jeep": [ + "A jeep is a small, light, off-road vehicle with four-wheel drive and a high ground clearance.", + "A jeep typically has four doors, although two-door models were produced until 1975.", + "A jeep typically has a boxy body shape and four-wheel drive.", + "A jeep typically has four doors, though two-door models are available, and seating for five people.", + "A Jeep is a small, lightweight, off-road vehicle, typically with four-wheel drive.", + "A jeep is a small, off-road vehicle with four-wheel drive typically used for recreation or light utility purposes.", + "A Jeep is a four-wheeled vehicle with a body that is higher off the ground than a sedan.", + "A jeep is a four-wheeled vehicle that is sturdy and reliable.", + "A jeep typically has four doors and a hard top.", + "A jeep is typically a small, four-wheel drive vehicle with a raised body." + ], + "jelly bean": [ + "A jelly bean is a small, round candy that comes in a variety of colors and flavors.", + "A jelly bean is typically a small, bean-shaped candy that is coated in a hard sugar shell.", + "A jelly bean is small, round, and has a hard candy shell.", + "A jelly bean is a small, bean-shaped confectionery.", + "A jelly bean is a oblate spheroid and typically has a diameter of about 1 centimeter (0.", + "A jelly bean is a small, candy bean that is typically brightly colored.", + "A jelly bean is a small, bean-shaped candy that comes in a variety of colors and flavors.", + "A jelly bean is a small, round candy that is often brightly colored.", + "A jelly bean is a small, fruit-flavored candy.", + "A jelly bean is a small, bean-shaped candy that comes in a variety of flavors." + ], + "jersey": [ + "A jersey is a piece of clothing that is typically worn by athletes.", + "A jersey typically contains the colors and logo of a sports team.", + "A jersey typically has a collar, sewn-on stripes on the sleeves, and a large team logo on the front.", + "A jersey is a smooth, knit fabric that is typically worn as casual wear.", + "A jersey is typically a shirt that is worn by athletes.", + "A jersey is a type of shirt worn by athletes that has a team's name, logo, or colors.", + "A jersey is a piece of clothing worn by athletes.", + "A jersey is typically a long-sleeved shirt with a collar and a button-up placket.", + "A jersey is a shirt that has a team's name, logo, and colors.", + "A jersey is a garment worn by athletes that consists of a shirt with sleeves, and shorts." + ], + "jet plane": [ + "A jet plane looks like a long, metallic tube with wings attached to the sides.", + "A jet plane is a powered flying vehicle with fixed wings and a weight greater than that of the air it displaces; an airplane.", + "A jet plane is a long, thin plane with large wings and engines attached to the back.", + "A jet plane looks like a metal tube with wings and engines attached.", + "A jet plane is a type of aircraft that uses jet engines to propel itself forward.", + "A jet plane is a large, metal, airplane with two or more engines.", + "A jet plane is a long, thin aircraft with wings that sweep back from the main body of the plane.", + "A jet plane is a long, skinny plane with a pointy nose.", + "A jet plane typically has a long, cylindrical body with a pointy nose and wings that stick out from the sides.", + "A jet plane generally has a long, narrow body with wings that are set far back." + ], + "jewel": [ + "A jewel is a decorative object that is typically made from a precious metal or stone.", + "A jewel typically has a shiny surface, is relatively small, and is ornamental.", + "A jewel typically has a smooth, polished surface and is brightly colored.", + "A jewel typically has a smooth, polished surface and is brightly colored.", + "A jewel is a small, decorative item that is typically made from a precious metal and stone.", + "A jewel typically has a shiny, reflective surface and is either transparent or opaque.", + "A jewel is typically a precious or semi-precious stone that has been cut and polished.", + "A jewel typically has a smooth, polished surface and a symmetrical shape.", + "A jewel is usually a small, decorative item that is worn on the body, such as a ring, necklace, or earring.", + "A jewel typically sparkles brightly and is cut into a specific shape." + ], + "jewelry": [ + "A piece of jewelry is typically composed of a metal setting and a stone or gem.", + "A jewelry typically consists of a metal ring, often with ornate designs, worn around the finger.", + "A jewelry typically consists of a metal band or chain with a decorative element attached to it.", + "A jewelry can be made of many different materials, such as gold, silver, or even plastic.", + "A jewelry typically looks shiny, new, and perfect.", + "A jewelry typically consists of a metal band with a decorative element attached to it.", + "A jewelry is a small, decorative item that is worn on the body.", + "A piece of jewelry typically includes a metal setting and a stone or charm.", + "A jewelry typically consists of a metal band with a gemstone or other decorative element mounted on it.", + "Jewelry typically consists of small decorative items worn for personal adornment, such as brooches, rings, necklaces, earrings, and bracelets." + ], + "joystick": [ + "A joystick typically consists of a stick that can be moved in multiple directions and one or more buttons.", + "A joystick is a handheld device that consists of a stick that can be moved in multiple directions.", + "A joystick is a hand-held control device consisting of a stick that can be tilted in various directions to control the movement of a cursor on a computer screen or to control the movement of a machine, such as a plane.", + "A joystick is a handheld device that typically has a thumb-operated stick on the top and one or more buttons on the face.", + "A joystick is a hand-held control device that consists of a stick that can be moved in several directions to control a cursor on a screen.", + "A joystick is a handheld device that is used to control electronic games.", + "A joystick has a stick that protrudes from a base and is used to control movement in a video game.", + "A joystick typically consists of a central stick that can be moved in all directions, plus a set of buttons.", + "A joystick is a hand-held stick that is used to control a video game character or cursor on a computer screen.", + "A joystick is a controller with a stick that is used to move an object on a screen." + ], + "jumpsuit": [ + "A jumpsuit is a one-piece clothing item that typically has long legs and sleeves, and covers the torso and crotch.", + "A jumpsuit is a one-piece garment with a sleeveless bodice and attached pants.", + "A jumpsuit is a one-piece outfit consisting of a top and pants in the same fabric.", + "A jumpsuit is a one-piece outfit that covers the body from the neck to the ankles.", + "A jumpsuit covers the body from the neckline to the ankles, and has sleeves that cover the arms.", + "A jumpsuit is a one-piece garment with long pants and a sleeveless or short-sleeved shirt.", + "A jumpsuit is a one-piece outfit that covers the body from the neck to the ankles.", + "A jumpsuit is usually a one-piece garment that covers the body from the neck to the ankles, although there are also jumpsuits that only cover the legs.", + "A jumpsuit is a one-piece garment that covers the body from the neck to the ankles.", + "A jumpsuit is a one-piece garment that covers the body from the neck to the ankles." + ], + "kayak": [ + "A kayak is a small, narrow watercraft which is propelled by means of a double-bladed paddle.", + "A kayak is a small, narrow vessel that is typically propelled by paddling.", + "A kayak is a small, slim boat with a pointed front and back, designed for one or two people to paddle.", + "A kayak is a small, narrow boat with a pointed bow and stern.", + "A kayak typically has a long, narrow hull with a cockpit that is sometimes covered by a spray deck.", + "A kayak's shape typically resembles a teardrop.", + "A kayak is a small, narrow boat that is typically propelled with a paddle.", + "A kayak is a long, narrow boat with a cockpit in the center.", + "A kayak is a small, narrow watercraft which is propelled by a double-bladed paddle.", + "A kayak typically looks like a small, narrow boat that is designed to be paddled by one person." + ], + "keg": [ + "A keg looks like a large silver tank with a tap on the front.", + "A keg is a metal or plastic container that holds beer.", + "A keg is a cylindrical container that holds a large amount of liquid.", + "A keg is a barrel-shaped container that is used to store and dispense beer.", + "A keg is a cylindrical container that is usually made of metal or wood.", + "A keg is a cylindrical container, typically made of metal, that holds a large amount of beer or other alcoholic beverage.", + "A keg looks like a large, cylindrical container that is typically made of metal.", + "A keg is a cylindrical container that is typically made of metal or wood.", + "A keg is a cylindrical container that is usually made of metal or plastic.", + "A keg is a cylindrical, metal vessel that holds a large amount of liquid." + ], + "kennel": [ + "\nA kennel is typically a fenced-in area where dogs can stay while their owners are away.", + "A kennel is typically a small fenced-in area where a dog can stay.", + "A kennel is typically a small, fenced-in area where a dog can be kept when not in the home.", + "A kennel looks like a small, fenced-in area where a dog can stay.", + "A kennel is a fenced-in area where a dog can be confined.", + "A kennel is a fenced area for dogs to run and play.", + "A kennel is a shelter for a dog that is usually made out of wire or plastic.", + "A kennel is a structure or pen for dogs or other animals, typically one with metal or wire mesh sides.", + "A kennel is typically a fenced in area where dogs can be kept.", + "A kennel is an indoor or outdoor area where dogs are kept." + ], + "kettle": [ + "A kettle is a small, teapot-like pot with a spout, handle, and lid, used for boiling water.", + "A kettle is a small pot with a handle and a spout.", + "A kettle is a small appliance that is used to heat water.", + "A kettle is a small, teapot-like pot with a spout, handle, and lid, used for boiling water.", + "A kettle is a small pot with a handle and a spout for pouring water.", + "A kettle is a small pot with a handle and a spout.", + "The exterior of a kettle is typically made of metal, plastic, or another heat-resistant material.", + "It is a pot with a spout on the side and a handle.", + "A kettle is a small, cylindrical pot with a handle attached to one side and a spout on the other.", + "A kettle is a small pot with a handle and a spout." + ], + "key": [ + "A key is a small metal object with a shaped blade that is used to open a lock.", + "A key is small metal object with serrated teeth on one side and a smooth shaft on the other.", + "A typical key is a small piece of metal with serrations or ridges on one side and a smooth surface on the other.", + "A key is a small metal object with teeth on one side that fit into the locks of doors and cabinets.", + "A key resembles a long, thin metalbar with notches or ridges along one side.", + "A key is a small, metal object with teeth on one side and grooves on the other.", + "A key is a small, metal object with a serrated edge that is used to unlock a door.", + "A key generally has a metal blade with grooves or teeth along one edge and a matching grooved or notched tip on the other end.", + "A key is a small, metal object with sharp ridges on one side and teeth on the other.", + "A key looks like a small metal object with jagged teeth on one end and a smooth, circular handle on the other end." + ], + "keycard": [ + "\nMost keycards are rectangular, and have a magnetic stripe on the back.", + "A keycard is a small plastic card with a magnetic stripe on the back.", + "A keycard is a card with a magnetic strip that is used to unlock a door.", + "A key card is a plastic card with a magnetic strip that is used to open doors.", + "A keycard is a plastic card with a magnetic stripe or barcode that is used to open a door.", + "A keycard is a thin, plastic card with a magnetic stripe on the back, which is used to open doors.", + "A keycard is a rectangular piece of plastic with a magnetic stripe on the back.", + "A keycard is generally a rectangular piece of card with a magnetic stripe on the back, which can be read by electronic locks.", + "A keycard usually has a hotel's logo on it and is inserted into a slot in order to open the door.", + "An access card or keycard is a card with a data storage device, usually a memory chip, that is used to authorize access to buildings, computers, networks, and other secured areas." + ], + "kilt": [ + "A kilt is a piece of clothing that is typically worn by men in Scotland.", + "A kilt is a traditional Scottish garment that is typically made of wool.", + "A kilt is a type of skirt with pleats at the back, originating in the traditional dress of men and boys in the Scottish Highlands.", + "A kilt is a pleated skirt that is typically worn by men in Scotland.", + "A kilt is a piece of clothing that is worn by men in Scotland.", + "A kilt is a knee-length garment typically worn by men in the Scottish Highlands.", + "A kilt is a skirt-like garment that is traditionally worn by men in Scotland.", + "A kilt is a type of skirt with pleats at the back, originating in Scotland.", + "A kilt is a type of skirt with pleats at the back, worn by men as part of traditional Scottish dress.", + "A kilt is a piece of clothing that is worn by men in Scotland." + ], + "kimono": [ + "A kimono is a traditional Japanese garment, typically made of light silk or cotton.", + "A kimono is a Japanese robe that is typically made of silk.", + "A kimono is a traditional Japanese garment.", + "A kimono is a Japanese robe that is worn by both men and women.", + "A kimono is a long, loose robe with wide sleeves.", + "A kimono is a type of traditional Japanese clothing.", + "A kimono typically has wide sleeves, a tall collar, and is tied with a sash at the waist.", + "A kimono is a type of traditional Japanese clothing.", + "A kimono is a Japanese garment that is typically made of silk.", + "A kimono is a Japanese garment." + ], + "kitchen sink": [ + "A kitchen sink is a basin that is installed in a kitchen for washing dishes, vegetables, and hands.", + "A kitchen sink is a rectangular basin made of stainless steel, porcelain, or another material.", + "A kitchen sink is a bowl-shaped fixture that is used for washing dishes, cooking food and cleaning up.", + "A kitchen sink is a large basin made of porcelain or stainless steel that is used for washing dishes.", + "A kitchen sink is a bowl-shaped plumbing fixture that is used for washing dishes, food preparation, and other cleaning purposes.", + "A kitchen sink is a sink that is located in the kitchen.", + "A kitchen sink is a bowl-shaped plumbing fixture that is used for washing dishes, food preparation, and other cleaning tasks.", + "A kitchen sink generally has two parts: a large, deep basin and a small, shallow basin.", + "A kitchen sink is usually made of stainless steel and has a drain in the middle and a faucet on the side.", + "A kitchen sink is a bowl-shaped fixture that is used for washing dishes." + ], + "kitchen table": [ + "A kitchen table generally has four legs and a flat surface.", + "A kitchen table typically has four legs and a flat surface.", + "A kitchen table is usually a wooden table with four legs.", + "A kitchen table is a table meant for use in a kitchen.", + "A kitchen table is a flat surface with four legs, designed to be used as a dining table in a kitchen.", + "A kitchen table typically has four legs and a flat surface.", + "A kitchen table is typically a small table in the kitchen used for meal prep or as a place to eat.", + "A kitchen table typically has four legs and a flat surface.", + "A kitchen table is typically a small table made of wood or metal with a flat surface.", + "A kitchen table is a table in a kitchen that people use to eat at." + ], + "kite": [ + "A kite generally has a lightweight frame made of plastic, wood, or metal.", + "A kite is a tethered aircraft with wings that react to wind and air currents to create lift.", + "A kite typically has a fabric wing and a string that is attached to a handle or bar.", + "A kite typically consists of a light frame made of some combination of wood, plastic, and/or metal, with one or more flat, slightly curved panels of fabric or other materials attached to the frame.", + "A kite is a light frame with a tail and a flat, often triangular, piece of cloth or paper extended from the frame.", + "A kite typically has a rectangular shape and is made of light-weight material such as paper or fabric.", + "A kite is a tethered flying object with a fabric wing.", + "A kite is typically a tetrahedral shaped object with a long string attached to it.", + "A kite typically has a triangular shape and is made of a light material such as paper or cloth.", + "A kite typically has a fabric or paper body with a frame made of sticks." + ], + "kitten": [ + "A kitten is a baby cat.", + "A kitten is a small and often adorable domesticated cat.", + "A kitten is a young cat, typically one that is less than one year old.", + "A kitten is a young cat.", + "A kitten is a baby cat.", + "A kitten is a small, young cat.", + "A kitten is a small, young cat.", + "A kitten looks like a small, rectangular-shaped animal with fur.", + "A kitten is a small, young cat.", + "A kitten is a small cat." + ], + "kiwi fruit": [ + "A kiwi fruit is small and fuzzy with a brownish-green skin.", + "A kiwi fruit is a small, brown fruit with a hairy, green skin.", + "A kiwi fruit is a small, egg-shaped fruit with a thin, green skin.", + "A kiwi fruit looks like a small, brown, hairy egg with a green or yellowish flesh on the inside.", + "A kiwi fruit is a small, brown fruit with a hairy, greenish-brown skin.", + " and tastes likeA kiwi fruit is a small, light brown fruit with a hairy outside and green flesh on the inside.", + "Kiwi fruits are small and round with a fuzzy brown exterior.", + "A kiwi fruit has a hairy, brown skin and a bright green flesh.", + "A kiwi looks like a small, round, brown fruit with a greenish-brown furry skin.", + "A kiwi fruit looks like a little brown and green egg." + ], + "knee pad": [ + "A knee pad is a protective pad that is worn on the knee to help protect it from injury.", + "A knee pad is typically a small, padded sleeve that covers the kneecap and surrounding area.", + "A knee pad typically consists of a thick foam material that is wrapped in a cloth or leather exterior.", + "A knee pad is a small, foam cushion that is placed over the kneecap to protect it from impact.", + "A knee pad is typically a foam or gel pad that is placed over the kneecap and held in place by an elastic band.", + "A knee pad is a pad made of foam, gel, or cloth that is worn on the knee to protect it from injury when kneeling or playing sports.", + "A knee pad is a round or oval-shaped pad that is placed over the kneecap.", + "A knee pad is typically a foam or gel-filled cushion that is worn on the knee to help protect it during activities such as skateboarding, inline skating, or snowboarding.", + "A knee pad is a small, padded cushion that is worn over the knee.", + "Most knee pads have a hard, flat plastic cap on the front of the knee and a soft, foam backing." + ], + "knife": [ + "A knife looks like a metal or plastic handle with a blade coming out of one end.", + "A knife generally has a sharp blade and a handle.", + "A knife is a tool with a sharpened blade that is used for cutting.", + "A knife generally has a sharpened blade with a handle.", + "A knife has a blade that is connected to a handle.", + "A knife is a cutting tool with a blade that is typically attached to a handle with a rivet.", + "A knife is a hand tool with a blade attached to a handle.", + "A knife is a cutting tool with a blade that can be sharpened on one or both sides.", + "A knife is a sharp object that has a blade and a handle.", + "A knife is a sharp thing that you can use to cut things." + ], + "knitting needle": [ + "A knitting needle is a thin, pointed rod made of wood, metal, or plastic.", + "A knitting needle is a long, thin rod that is used to create fabric by interlocking loops of yarn.", + "A knitting needle is a long, thin rod of wood, plastic, or metal used to create fabrics by looping yarn through itself.", + "A knitting needle is a thin, long piece of metal or wood with a point at one end and a small hole or groove at the other end.", + "A knitting needle is a long, thin rod used to create loops of thread, called stitches, in fabric.", + "A knitting needle is a long, thin rod made of wood, metal, or plastic.", + "A knitting needle is a long, thin rod made of wood, plastic, metal, or bamboo.", + "A knitting needle is typically a long, thin rod that tapers to a point at one end and has a knob at the other end.", + "A knitting needle is a long, thin rod with a point at one end and a knob at the other.", + "A knitting needle has a point at one end and a knob at the other end." + ], + "knob": [ + "Typically, a knob is a round, ball-shaped object that can be turned in order to adjust the settings on a machine or device.", + "A knob is a small, round object that is used to turn something on or off.", + "A knob is a small, round, often knob-like handle used to open a door or drawer, or to turn a switch, valve, or other device.", + "The knob is a small, circular object that is attached to the surface of a door or drawer.", + "A knob is a knob-shaped object.", + "A knob is a small, round object that can be turned to adjust the settings on a machine or device.", + "A knob is a round or knob-shaped object that is attached to something else, used to turn it, or to be pulled or turned in order to open or close it.", + "A knob is a round, knob-shaped object that is used to turn something on or off.", + "A knob is a small, round object that is attached to a larger object.", + "A knob is a small, round, usually metal object that sticks out from a larger object." + ], + "knocker (on a door)": [ + "A knocker is a piece of hardware attached to a door that is used for knocking.", + "A knocker is a metal ring that is attached to a door.", + "A knocker is a piece of hardware attached to a door that allows visitors to announce their presence by knocking.", + "A knocker is a piece of hardware attached to a door that allows someone to make a loud noise to signal that they wish to enter.", + "A knocker is a ornament on a door, normally found near the handle, used for knocking on the door.", + "A knocker is a piece of metal attached to a door, usually near the handle, that is used to make noise by knocking on the door.", + "A knocker on a door is traditionally a metal ring in the shape of a lion's head or a human face.", + "A knocker is a piece of hardware attached to a door that is used for knocking.", + "A knocker is a decorative piece mounted on a door, typically used to signify the presence of a household.", + "A knocker is a piece of hardware attached to a door that allows people to knock on the door." + ], + "koala": [ + "A koala is a bear-like mammal with furry ears, a pointy nose, and no tail.", + "A koala is a small, fluffy marsupial with big ears, a furry nose, and sharp claws.", + "A koala is a furry marsupial with a round head, big ears, and a tubby body.", + "A koala is a small, fuzzy animal with a round head and large ears.", + "A koala is a furry marsupial that lives in Australia.", + "A koala is a small, furry animal with big, furry ears.", + "A koala is a furry marsupial with a round body, a pointed snout, small round ears, and sharp claws.", + "A koala is a small, furry animal with a round head and large, pointed ears.", + "A koala is a marsupial with thick, fluffy fur that is typically gray.", + "A koala has a reddish-brown fur, with a white chest and belly." + ], + "lab coat": [ + "A lab coat is a knee-length overcoat that is worn over other clothing.", + "A lab coat is a white, knee-length coat worn by scientists and medical personnel to protect their clothes from spills and stains.", + "A lab coat may look like a white button-down shirt with a long skirt that reaches the knees, or it may look like a short-sleeved shirt with a lapel and pockets.", + "A lab coat is a white coat that is worn over clothes to protect them from spills and splashes.", + "A lab coat typically looks like a white, button-down shirt with a collar, long sleeves, and a knee-length skirt or pants.", + "A lab coat is a knee-length, white coat worn by scientists, doctors, and others while they are working.", + "A lab coat is a long, white coat worn over clothes to protect them from spills and splashes.", + "A lab coat is a white, knee-length coat worn by scientists, engineers, and technicians in laboratories.", + "A lab coat is a long white coat that is worn over other clothes in a laboratory setting.", + "A lab coat is a long, white jacket that is worn over other clothing." + ], + "ladder": [ + "A ladder is a tall, vertical structure with a series of rungs or steps leading from the bottom to the top.", + "A ladder is a vertical or slanted structure used as a support to climb up or down.", + "A ladder is a frame with rungs that people can use to climb up and down.", + "A ladder is a piece of equipment consisting of two sidepieces between which a series of rungs or steps are set at appropriate intervals.", + "A ladder typically has two side rails connected at regular intervals by rungs.", + "A ladder is a vertical or inclined set of rungs or steps.", + "Ladders come in all shapes and sizes, but they typically consist of two long, vertical beams connected by a series of rungs or steps.", + "A ladder is a vertical or nearly vertical structure used for climbing.", + "A ladder is a vertically leaning support typically made out of wood or metal.", + "The ladder has rungs at regular intervals and is supported at each end by stiles." + ], + "ladle": [ + "A ladle is a scoop designed to hold and pour liquids.", + "A ladle is a kitchen utensil that is used for scooping and pouring fluids.", + "A ladle is a kitchen utensil that is used for transferring liquids from one container to another.", + "A ladle is a type of spoon with a large bowl and a long handle.", + "A ladle is a long-handled spoon with a deep, bowl-like shape, used for serving soup or stew.", + "A ladle usually has a long handle and a large, bowl-shaped scoop.", + "A ladle is a kitchen tool that is used to transfer liquids from one container to another.", + "A ladle looks like a large spoon with a long handle that is used for serving soup or other liquids.", + " ladle\u02c8ladl/Submitnoun1.", + "A ladle is a kitchen utensil that is used to transfer liquids from one container to another." + ], + "ladybug": [ + "A ladybug is a small, round beetle that is usually red or orange with black spots.", + "A ladybug is a small, red beetle with black spots.", + "A ladybug is a small, round beetle that is typically red or yellow with black spots.", + "A ladybug may be black, red, or yellow and has spots on its wing covers.", + "A ladybug has a red, black, or yellow body with black spots.", + "A ladybug has a red, black, or yellow body with small black spots.", + "A ladybug is a small, round, red and black beetle.", + "A ladybug is small, round, and red with black spots on its wings.", + "A ladybug is small, round, and red with black spots.", + "A ladybug looks like a small beetle with a red body and black spots." + ], + "lamb (animal)": [ + "Lambs are typically born with white soft fur.", + "A lamb is a young sheep.", + "A lamb is a baby sheep.", + "A lamb is a young sheep that is less than one year old.", + "A lamb is a young sheep.", + "A lamb is a young sheep.", + "Lambs are generally born with white hair and are followed by a ewe.", + "A lamb is a baby sheep.", + "A lamb is a baby sheep.", + "A lamb is a young sheep." + ], + "lamb-chop": [ + "A lamb-chop looks like a small, thin, boneless cut of meat that is taken from the rib or loin area of a lamb.", + "A lamb-chop is a small portion of meat that is cut from the lamb's loin.", + "A lamb chop is a cut of meat from a lamb, typically consisting of a rib with some meat attached.", + "A lamb-chop is a piece of meat (usually pork or lamb) that has been cut into a small, thin slice.", + "A lamb-chop looks like a small, thin piece of lamb that has been trimmed of any excess fat.", + "A lamb-chop looks like a small, thin steak cut from a lamb's leg.", + "A lamb-chop looks like a small, tender piece of meat that is cut from the rib of a lamb.", + "A lamb chop is a cross-cut of lamb rib that includes a rib bone with rib meat and a rib eye roast.", + "A lamb-chop is a small, thin slice of meat that is cut from a lamb roast.", + "A lamb-chop looks like a small, thin steak cut from the leg of a lamb." + ], + "lamp": [ + "A lamp is a device that produces light using electricity.", + "A lamp is a device that produces light.", + "A lamp is a object that is used to create light.", + "A lamp is an object that emits light.", + "A lamp is a handheld light source that is often used in dark places or at night.", + "A lamp typically includes a lightbulb (or other light source) inside a glass or metal housing.", + "A lamp is a device that produces light by the combustion of a flammable liquid or gas, or by other means.", + "A lamp is a device used to create artificial light.", + "A lamp is a device that emits light.", + "A lamp typically consists of a base that supports a shaft, arm, or neck, which extends from the base." + ], + "lamppost": [ + "A lamppost typically looks like a tall, thin pole with a light on the top.", + "A lamppost is a tall, vertical post that is used to support a light.", + "A lamppost is a tall vertical pole with a light on the top.", + "A lamppost typically has a metal or plastic pole with a light on the top.", + "Most lampposts are made of metal and have a lightbulb on top.", + "A lamppost is a pole with a light on top.", + "A lamppost has a long metal pole with a light on top.", + "A lamppost is a vertical pole with a lamp on top.", + "A lamppost typically looks like a tall pole with a light fixture on top.", + "A lamppost typically consists of a tall vertical pole with a horizontal arm projecting from the top, from which a light is suspended." + ], + "lampshade": [ + "A lampshade is a cone- or drum-shaped covering that is placed over a lamp to diffuse the light.", + "A lampshade is a drum-shaped piece of fabric that is affixed to the top of a lamp.", + "A lampshade is typically a round or cone-shaped piece of fabric that sits on top of a lamp to diffuse the light.", + "A lampshade is a cover for a lamp, typically made of cloth, metal, glass, or paper, that casts a shadow on the light bulb inside the lamp.", + "Lampshades come in all different colors, shapes, and sizes.", + "A lampshade is a thin, typically cylindrical or cone-shaped, fabric or metal cover used to diffuser the light from a light bulb.", + "A lampshade is a cover for a lamp, usually made of cloth, paper, or metal, that diffuses and directs the light from the bulb.", + "A lampshade is a shades that is placed over a light bulb to diffuse the light.", + "A lampshade is a material that is placed over a light to diffuse the light.", + "A typical lampshade is a cone- or dome-shaped covering that hangs over the lightbulb on a lamp to diffuse the light." + ], + "lantern": [ + "A lantern is a portable light, typically powered by batteries or kerosene, with a handle or hook for carrying.", + "A lantern is usually a metal or glass case that houses a light bulb.", + "A lantern is a portable light fixture that is often used outdoors.", + "A lantern is a portable light device used to illuminate an area.", + "A lantern is a portable light fixture.", + "A lantern is a cylinder of metal or glass with a handle on top and a space inside for a light.", + "Lanterns come in a variety of shapes and sizes, but they all have one common feature: a light source housed inside a translucent or semi-transparent case.", + "A lantern is an object that is used to produce light.", + "A lantern is a portable light typically used outdoors.", + "A lantern looks like a small, handheld light." + ], + "lanyard": [ + "A lanyard is a cord or strap that is worn around the neck, shoulder, or wrist to carry an ID card, badge, whistle, or other small item.", + "A lanyard is a string or cord that is worn around the neck, shoulder, or wrist to carry an ID card, badge, whistle, or other small item.", + "A lanyard is a cord or strap worn around the neck, shoulder, or wrist to carry such items as keys or identification cards.", + "A lanyard is a cord or strap worn around the neck, shoulder, or wrist to carry an ID card, badge, key, or other small item.", + "A lanyard is a type of badge holder that consists of a strap of fabric, plastic, or metal that is worn around the neck.", + "A lanyard is a piece of rope, cord, or fabric worn around the neck, shoulder, or wrist to carry such items as keys or IDs.", + "A lanyard is typically a cord or strap that is worn around the neck, shoulder, or wrist to carry an ID badge, key, or other small item.", + "A lanyard is a band of fabric, rope, or metal worn around the neck, shoulder, or wrist to carry such items as keys or identification cards.", + "A lanyard is a rope or cord that is worn around the neck, shoulder, or waist.", + "A lanyard is a narrow strip of fabric, usually with a clip on one end, that is worn around the neck." + ], + "laptop computer": [ + "Most laptops have a clamshell design, with a screen on one side and a keyboard on the other.", + "A laptop computer looks like a cross between a paperback book and a smallish suitcase.", + "A laptop computer is a small, portable computer that typically has a thin display and a keyboard built into the same unit.", + "A laptop computer is a small, portable computer that typically has a built-in keyboard and a display.", + "A laptop computer is a type of computer that is small and portable.", + "A laptop computer is a small, portable computer that typically has a thin screen.", + "Laptop computers are usually much smaller and thinner than desktop computers.", + "A laptop computer is a computers that is small enough to fit on your lap.", + "A laptop computer is a small, portable computer that can be used for a variety of purposes, including work, school, and entertainment.", + "Laptop computers are small, portable computers that come with a built-in keyboard." + ], + "lasagna": [ + "A lasagna is a type of Italian pasta dish that consists of alternating layers of flat pasta, sauce, and filling.", + "A lasagna is a dish consisting of alternate layers of pasta, sauce, and fillings, typically including ground meat.", + "A lasagna is a dish made of alternate layers of pasta, meat, and vegetables, baked in an oven.", + "A lasagna is a s Italian dish consisting of flat, rectangular noodles layered with meat or vegetables, cheese, and a tomato sauce.", + "A lasagna is a flat, wide pasta noodle that is layered with an Italian meat sauce, cheese, and vegetables.", + "A lasagna is a thick Italian noodle dish made with layers of ricotta and mozzarella cheese, meat, and tomato sauce.", + "A lasagna is a layered Italian dish made with flat noodles, meat, and a cheese sauce.", + "A lasagna is a baked dish of flat pasta layers interdigitated with fillings of meat, vegetables, and tomato sauce.", + "A lasagna is a flat, wide pasta noodle that is usually layered with sauce, meat, and cheese.", + "A lasagna is a hot, Italian dish that is traditionally made with layers of flat, wide pasta, cheese, and a meat-based sauce." + ], + "latch": [ + "A latch looks like a small metal or plastic hook.", + "Latches are usually small metal or plastic objects that fit over a door or drawer to keep it shut.", + "A latch looks like a small metal or plastic hook that is used to keep a door, window, or gate closed.", + "A latch is a type of mechanical fastener that is used to join two things together.", + "A latch looks like a small metal hook that is mounted on a door or window.", + "A latch is a type of lock that is used to fasten a door or gate.", + "A latch is a type of fastener that is used to keep a door, window, or gate closed.", + "A latch is a type of mechanical lock that is used to fasten a door, gate, or window.", + "A latch is a small, metal plate with a hole in it.", + "A latch is a loop of metal or other material that is used to fasten a door or window, or to hold together the ends of a bracelet or necklace." + ], + "lawn mower": [ + "Most lawn mowers have four wheels, a motor, and a blade.", + "A lawn mower is a garden tool that is used to trim grass.", + "A lawn mower is a mechanical device that cuts grass.", + "Most lawn mowers are green and have four wheels.", + "A lawn mower is a machine that is used to cut grass.", + "A lawn mower is a mechanical device that consists of a blade or blades mounted on a rotating shaft that cuts grass as the machine is pushed or pulled across a lawn.", + "A lawn mower is a machine that cuts grass.", + "A lawn mower is a machine that cuts grass.", + "A lawn mower is typically a small, gas-powered engine on wheels that is used to cut grass.", + "A lawn mower is a machine that mows grass." + ], + "leather": [ + "A leather looks like a material that is made from animal skin that has been treated.", + "A leather typically has a smooth, shiny surface with a natural grain pattern.", + "A leather looks like a material that is made from the skin of an animal.", + "A leather typically has a smooth, consistent surface with a bit of a shine to it.", + "A leather looks like a skin that has been removed from an animal and then cured by a process of drying, stretching, and softening.", + "Smooth, tough, and pliable, leather is made from the tanned skin of an animal.", + "A leather is a material that is made from the skin of an animal.", + "A leather has a typical \"leathery\" look and feel.", + "A leather looks like a piece of skin that has been removed from an animal and treated so that it can be used as a material.", + "A leather typically has a smooth, shiny surface with a grainy texture." + ], + "legging (clothing)": [ + "A legging is a close-fitting garment covering the legs.", + "A legging is a tight-fitting, stretchy garment that covers the legs.", + "leggings are a form-fitting garment that are typically made out of spandex or a similar material.", + "A legging is a close-fitting piece of clothing that covers the legs.", + "A legging is a tight-fitting stretchy piece of clothing that typically covers the legs from the hips to the ankles.", + "A legging is a skin-tight garment that covers the legs.", + "A legging is a tight-fitting garment that covers the legs and is usually made of a stretchy material.", + "A legging is a tight-fitting garment that covers the legs and is usually made of a stretchy material.", + "Leggings are a form-fitting garment typically made of a synthetic fabric such as polyester, nylon, or spandex.", + "A legging is a type of close-fitting clothing that covers the legs and is usually worn with a tunic or a dress." + ], + "Lego": [ + "A Lego is a rectangular shaped toy that is used to build things.", + "A Lego is a plastic block with interlocking studs on top.", + "L\u00e9go(s) are colorful interlocking plastic blocks that are used to build structures of varying sizes.", + "A Lego is a building block that is plastic and interlocks with other blocks.", + "A Lego is a plastic building block that is typically square or rectangular.", + "A Lego is a small plastic block that is used to build things.", + "A Lego is a small, plastic brick with studs on the top and bottom.", + "A Lego is a small plastic block with interlocking studs on the top and bottom.", + "A Lego is a small, rectangular toy made of plastic.", + "A Lego is a small, rectangular block that is used to build larger structures." + ], + "legume": [ + "A legume is a plant that produces a pod, which contains seeds.", + "A legume is typically a plants with pod-like fruit that contains seeds.", + "A legume is a pod that contains seeds.", + "A legume is a pod that contains seeds.", + "A legume looks like a plant with a seedpod that splits open along two seams.", + "A legume is a pea-like seed that is encased in a pod.", + "A legume is a seed that is encased in a pod.", + "A legume is a type of flowering plant that belongs to the pea family.", + "A legume is a seedpod that splits along two seams and opens when ripe.", + "A legume is a type of flowering plant that belongs to the pea family." + ], + "lemon": [ + "A lemon is yellow and oval-shaped with a sour, acidic taste.", + "A lemon looks like a yellow citrus fruit.", + "A lemon is a citrus fruit that is yellow in color.", + "A lemon looks like a small, yellow citrus fruit with a tangy, acidic taste.", + "A lemon is a yellow citrus fruit with a sour, acidic taste.", + "A lemon looks like a yellow citrus fruit with a acidic taste.", + "A lemon is a citrus fruit that is yellow in color.", + "Lemons are small, round, yellow citrus fruits with a tart, acidic flavor.", + "A lemon is a fruit that is typically yellow and has a sour taste.", + "A lemon looks like a small, yellow citrus fruit with a sour, acidic taste." + ], + "lemonade": [ + "A lemonade looks like a yellow drink with ice in it.", + "A lemonade is a yellow colored drink.", + "A lemonade is a yellow drink that is made with lemons, water, and sugar.", + "A lemonade looks like yellow liquid in a glass with ice.", + "A lemonade has a yellow color and is usually made with lemon juice, water, and sugar.", + "A lemonade looks like a yellow drink with a slice of lemon in it.", + "A lemonade looks like a yellow drink with lemon slices in it.", + "A lemonade looks like a yellow drink with ice in it.", + "A lemonade typically consists of lemon juice, water, and sugar.", + "A lemonade typically looks like a yellow drink with small pieces of ice floating in it." + ], + "lettuce": [ + "A lettuce typically has green, leaves that are arranged in a rosette shape.", + "A lettuce typically has long, green leaves that form a rosette shape.", + "A lettuce typically has green, leafy outer layers and a softer, white inner core.", + "A lettuce is an edible plant that is typically green in color and has a crisp texture.", + "A lettuce is a green leafy vegetable.", + "A lettuce is a green leafy vegetable.", + "A lettuce is a leafy green vegetable that is often used in salads.", + "A lettuce typically has green, leafy outer layers and softer layers in the center.", + "A lettuce typically has green, or sometimes red, leaves that form a loose head.", + "A lettuce is a leafy green vegetable." + ], + "license plate": [ + "A license plate is a plate made of metal, plastic, or other material that is attached to the front or back of a car or other vehicle for official identification purposes.", + "A license plate is a metal plate that is attached to the front or back of a vehicle.", + "A license plate is a metal or plastic plate that is attached to the front or back of a car.", + "A license plate consists of a metal or plastic plate with a unique combination of numbers and letters, which is attached to the front or back of a vehicle.", + "A license plate is a metal plate that is attached to the front or back of a car.", + "A license plate is a metal plate that is attached to the back or front of a car.", + "A license plate is a flat plate made of metal, plastic, or fiberglass with a number or combination of numbers and letters printed on it.", + "A license plate is a metal plate with a unique set of numbers and/or letters that is assigned to a vehicle.", + "A license plate typically contains the letters and numbers that identify the vehicle's owner and the vehicle's registration number.", + "A typical license plate is made of aluminum and has raised lettering." + ], + "life buoy": [ + "A life buoy is a circular buoy with a ring attached to it.", + "A life buoy is usually a bright orange ring that is used to keep people afloat in water.", + "A life buoy is a circular, orange buoy that is used as a flotation device.", + "A life buoy is usually a ring-shaped buoy made of bright orange plastic or rubber.", + "A life buoy is typically an orange disc with a strap that goes around the chest.", + "A life buoy is a ring-shaped buoy that is used to keep people afloat in water.", + "A life buoy is a ring-shaped buoy that is used to keep a person afloat in water.", + "A life buoy typically is a bright orange colored ring that is thrown to someone who is struggling in the water.", + "A life buoy is usually a ring-shaped buoy made of bright orange plastic or rubber.", + "A life buoy is a ring-shaped device made of cork, foam, plastic, or rubber." + ], + "life jacket": [ + "A life jacket is a vest that is typically orange or yellow.", + "Most life jackets are brightly colored and made of foam.", + "A life jacket is a orange or yellow flotation device that is worn around the body.", + "A life jacket is a device that is worn to keep a person afloat in water.", + "A life jacket typically has a bright color, like orange or yellow, and is made of a foam material.", + "A life jacket is a device that is worn by people who are in or near water.", + "A life jacket is designed to help keep a person's head and body above water, even if they are unconscious.", + "A life jacket typically has a bright orange or yellow color, and it is designed to fit snugly around a person's body.", + "A life jacket typically has bright colors so that it is easily visible in the water.", + "A life jacket is a garment designed to provide buoyancy in water and protect the wearer's head and body from cold water and waves." + ], + "lightbulb": [ + "A lightbulb has a metal base and a glass globe.", + "A lightbulb is a small, usually spherical object that emits light when electricity is passed through it.", + "A light bulb is typically a glass sphere with a metal base that contains a wire filament.", + "A lightbulb looks like a glass sphere with a metal screw thread at the base.", + "A lightbulb looks like an incandescent lightbulb.", + "A lightbulb is a round, glowing object that emits light.", + "A lightbulb is typically a white, cylindrical object with a metal base.", + "A lightbulb typically consists of a glass enclosure with a metal base that contains a wire filament.", + "A lightbulb is a cylindrical object with a metal base and a glass casing.", + "A lightbulb is typically a glass or plastic sphere with a metal base that contains a filament." + ], + "lightning rod": [ + "A lightning rod is a tall, metal rod that is placed on top of a building.", + "A lightning rod typically consists of a rod of conductive metal, such as copper, mounted on a structure and projecting above it.", + "A lightning rod is a metal rod that is placed on top of a building or structure.", + "A lightning rod is a metal rod that is placed on the highest point of a building.", + "A lightning rod typically consists of a long metal rod with a sharp point at the end.", + "A lightning rod is a metal rod attached to the top of a building.", + "A lightning rod is a metal rod that is placed on the top of a building.", + "A lightning rod is a metal rod that is placed on the highest point of a building.", + "A tall metal rod with a sharp point at the top that is attached to the outside of a building.", + "A lightning rod is typically a metal rod that is placed on the highest point of a building." + ], + "lime": [ + "A lime is a citrus fruit that is typically green in color.", + "A lime is a small, green citrus fruit with a sour taste.", + "A lime has a green, bumpy skin and a sour, juicy flesh.", + "A lime is a small, green citrus fruit.", + "A lime is a small green citrus fruit with a sour taste.", + "A lime is a small, green citrus fruit with a sour, acidic taste.", + "A lime is a citrus fruit that is green in color with a slightly sour taste.", + "Limes are small, green citrus fruits with a sour, acidic taste.", + "A lime is a small, green citrus fruit with a sour taste.", + "A lime is a small, green citrus fruit with a sour taste." + ], + "limousine": [ + "A limousine typically has a long body and a lengthened wheelbase.", + "A limousine is a large, luxurious car that is usually driven by a professional chauffeur.", + "A limousine typically looks like a long, luxury car.", + "A limousine is a long, black car that is usually used to transport important people.", + "A limousine typically has a long wheelbase, which gives the vehicle more legroom for passengers in the back.", + "A traditional limousine is a long, black car with a partition between the driver and the backseat.", + "A limousine is a long car with a partition between the driver and the passengers.", + "A limousine is a long, black car with a chauffeur.", + "A limousine typically looks like a long, black car with tinted windows.", + "A limousine is a long luxury car with a chauffeur." + ], + "lion": [ + "A lion is a large, muscular cat with a short, tan coat.", + "A lion is a large, muscular cat with a long tail, mane, and whiskers.", + "A lion is a large mammal with a thick coat of tawny-colored fur.", + "A lion is a large cat with a golden or brown coat and a tufted tail.", + "A lion looks like a big cat with a mane.", + "A lion is a large cat with a reddish-brown coat.", + "A lion is a big cat with a big mane.", + "A lion is a large, predatory cat with a tawny coat and a long tail.", + "Lions are large canine animals with orange or tawny fur and black manes.", + "A lion is a large, powerful cat with a long tail, short fur, and a big mane around its head." + ], + "lip balm": [ + "A lip balm is a small, round tub that contains a solid, waxy substance.", + "A lip balm has a cylindrical shape and is about the size of a Chapstick.", + "A lip balm typically comes in a small, round tin and is solid at room temperature.", + "A lip balm is typically a small cylinder that twists up from the bottom.", + "Lip balm is a clear, thick liquid that is applied to the lips to moisturize and protect them.", + "A lip balm is a small, round, flat container that is typically filled with a waxy substance that is used to moisturize and protect the lips.", + "A lip balm is a type of cosmetic product that is used to moisturize and protect the lips.", + "A lip balm fits snugly into a small tub or tube and has a soft, oily texture.", + "Lip balm is a small, typically cylindrical, jar or tube containing a waxy substance that is applied to the lips to moisturize and relieve chapped or dry lips, angular cheilitis, stomatitis,.", + "Lip balm is a substance that is applied to the lips to moisturize, protect, and relief chapped or dry lips." + ], + "liquor": [ + "Liquors are typically clear, although some may be colored.", + "Liquor is a clear, amber-colored liquid.", + "Liquor can come in many different colors, depending on the type.", + "Generally, liquors are clear or translucent.", + "A liquor is a clear, distilled alcoholic beverage.", + "Liquor is a clear, distilled alcoholic beverage.", + "A liquor is a clear, distilled alcoholic beverage.", + "A liquor typically has a clear, deep color.", + "A liquor is typically a clear or amber-colored liquid.", + "A liquor is a clear, colorless liquid." + ], + "lizard": [ + "A lizard is typically a small to medium sized reptile that has four legs, a tail, and a scaly body.", + "Lizards have dry, scaly skin and range in size from a few inches to several feet long.", + "A lizard typically has four legs, a long body, and a tail.", + "A lizard is a reptile with four legs, a long tail, and dry, scaly skin.", + "A lizard is a four-legged reptile with dry, scaly skin.", + "A lizard looks like a small, scaly reptile with four legs.", + "A lizard typically has four legs, a long body, and a tail.", + "A lizard is a four-legged reptile with a long tail, dry scaly skin, and a forked tongue.", + "A lizard is a reptile with four legs and a long tail.", + "Lizards are typically four-legged reptiles with dry, scaly skin." + ], + "log": [ + "A log typically consists of a title, date, time, and content.", + "A log is a circular piece of wood that has been cut from a tree trunk.", + "A log is a type of file that stores information about events that have happened on a computer.", + "The most common type of log is a rectangular block with tapered ends.", + "A log is a sequentially ordered, timestamped, immutable record of events.", + "A log usually consists of a large piece of wood that has been cut from a tree.", + "A log is a tree trunk that has been cut and is lying on the ground.", + "A log is a long, thick piece of wood that has been cut from a tree.", + "A log is a cylindrical piece of wood that has been cut from a tree trunk.", + "A log is long and cylindrical in shape." + ], + "lollipop": [ + "A lollipop is a round, flat candy that is attached to a stick.", + "A lollipop is a type of confectionary which consists of a sweetened piece of gum or candy on a stick.", + "A lollipop is a type of sugar candy that is typically attached to a small stick and can be rotated around the stick.", + "A lollipop is a type of candy that is attached to a stick.", + "A lollipop is a type of candy that is typically made by pouring flavored syrup or molasses onto a stick and then allowing it to harden.", + "A lollipop is a sweet treat that consists of a hard candy on a stick.", + "A lollipop is a type of candy that is typically made from sugar or corn syrup, flavored, and colored, with a stick inserted for sucking or licking.", + "A lollipop is a type of candy that is composed of a sweetened piece of flavored candy mounted on a stick.", + "A lollipop is a type of sugar candy that is usually shaped like a disc or a ball on a stick.", + "A lollipop is a type of candy that is typically made from sugar or corn syrup, flavoring, and a stick for holding." + ], + "speaker (stero equipment)": [ + "A speaker is a piece of stereo equipment that consists of a cone-shaped enclosure with a base and a top.", + "A speaker is typically a rectangular shape with a grille in the front that covers the cone.", + "A speaker is a small, often cylindrical, device that converts electrical energy into sound waves.", + "A speaker is a device that converts electrical energy into sound.", + "It is a physical object that one can see and touch.", + "A speaker is a piece of stereo equipment that consists of a cone-shaped device that converts electrical energy into sound waves.", + "A speaker is a device that converts electrical energy into sound waves.", + "A speaker is a device that converts electrical energy into sound.", + "A speaker is a piece of stereo equipment that looks like a rectangular box.", + "A speaker is a." + ], + "loveseat": [ + "A loveseat is similar to a couch, but it only has seating for two people.", + "A loveseat is a small couch that typically seats two people.", + "a loveseat is a small sofa that seats two people.", + "A loveseat typically looks like a smaller version of a sofa, with two seats that are close together.", + "A loveseat standardly has two seat cushions and two back cushions.", + "A loveseat is a small couch that seats two people.", + "A loveseat is a small sofa that seats two people.", + "A loveseat is a short sofa that seats two people and typically has two armrests.", + "A loveseat is a small couch that typically seats two people.", + "A loveseat generally refers to a small sofa that seats two people." + ], + "machine gun": [ + "A machine gun is a large, cumbersome gun that is mounted on a tripod or vehicle.", + "A machine gun typically has a long barrel and a large magazine attached to the bottom.", + "A machine gun is a large, heavy gun that is usually mounted on a tripod or vehicle.", + "A machine gun is a large, heavy gun that is mounted on a tripod or vehicle.", + "A machine gun has a large, cylindrical body with a large barrel sticking out of the front.", + "The typical machine gun has a large, boxy frame, a large drum magazine mounted above the weapon, and a long barrel.", + "A machine gun is a large, heavy weapon that is mounted on a tripod or vehicle.", + "A machine gun is a large, automatically operated firearm that is designed to fire rounds in rapid succession from an ammunition belt or magazine.", + "A machine gun is a rapid-firing, rifled long gun that is fed from a magazine.", + "A machine gun is a rapid-firing, rifled long gun that is capable of fully automatic or burst fire, and is fed by a magazine." + ], + "magazine": [ + "A magazine typically has a glossy cover and contains many pages of articles and images.", + "A magazine is a publication that is typically thinner than a book and contains a mix of articles, stories, and sometimes advertisements.", + "A magazine typically has a glossy cover and contains articles and images inside.", + "A magazine is a thin book with many pages of photos and articles.", + "A magazine typically has a glossy cover and is filled with pages of content.", + "A magazine is a bound book that typically contains articles, stories, and pictures.", + "A magazine is usually a book with a paper cover and pages inside that are printed with words and pictures.", + "A magazine is a publication that contains articles and images.", + "A magazine typically has a colorful cover with a picture and the name of the magazine.", + "A magazine is a publication that contains articles, stories, and pictures." + ], + "magnet": [ + "A magnet is a material that produces a magnetic field.", + "Typically, a magnet is a piece of metal with a north pole and a south pole.", + "A typical magnet is a metal object that is able to attract certain materials, such as iron.", + "A magnet is typically a piece of metal with a north and south pole.", + "A magnet looks like a piece of metal that can attract other pieces of metal.", + "A magnet is a material that produces a magnetic field.", + "A magnet has two poles, typically referred to as north and south.", + "A magnet is an object that has a magnetic field.", + "A magnet is a piece of metal that has the ability to attract other pieces of metal.", + "A magnet is a piece of metal that has the ability to attract other pieces of metal." + ], + "mail slot": [ + "A mail slot is a small door in a wall or door through which mail is delivered.", + "A mail slot is usually a long, thin rectangle cut into a door or wall.", + "A mail slot is a rectangular opening in a door, through which mail is delivered.", + "A mail slot is a narrow, vertical opening in a door or wall for depositing mail.", + "A mail slot is a small, open doorway in a door through which mail can be delivered.", + "A mail slot typically looks like a small, rectangular hole cut into a door.", + "A mail slot looks like a small, vertical door in a wall or door through which mail is delivered.", + "A mail slot is a small, rectangular opening in a door or wall that is used to deliver mail.", + "A mail slot is a hole in a door, through which mail is delivered.", + "A mail slot is a narrow, often vertically oriented, slit in a wall or door through which mail is delivered." + ], + "mailbox (at home)": [ + "A mailbox at home usually looks like a small box with a flag on the top that is attached to the house.", + "A typical mailbox at home is a small, metal box with a flag on the side.", + "A mailbox at home is typically a small, rectangular box affixed to the front of a home.", + "A mailbox is a small structure, usually made of metal or plastic, that is placed near the road in front of a home.", + "A mailbox at home usually consists of a small box with a flag on the side.", + "A mailbox (at home) is a small, metal box that is placed near the street.", + "A mailbox at home typically looks like a small, metal box with a flag on the side.", + "A mailbox typically consists of a small, lockable box attached to the front of a house or business.", + ".", + "A mailbox is a small, box-shaped receptacle for holding mail that is to be collected." + ], + "mallard": [ + "The common mallard is a medium-sized waterfowl species with a wide range.", + "A mallard is a purple- green duck with a white chest and belly.", + "A mallard is a species of ducks known for their wide, flat tails and green heads.", + "A mallard is a wild duck that has a green head, a white neck ring, and a brown body.", + "A mallard looks like a large, long-necked, green-headed duck.", + "A mallard is a medium-sized waterfowl with a stout body, a large head and a long neck.", + "A mallard is a green-headed duck with a brown body.", + "Mallards are a type of duck with green heads and yellow bills.", + "Mallards are a type of duck with a dark green head and a white neck.", + "Mallards are a type of duck with brown and green feathers." + ], + "mallet": [ + "A mallet is a small hand tool with a handle and a head.", + "A mallet is a type of hammer that has a large, flat head.", + "A mallet is a small, handheld tool that has a cylindrical head at one end and a handle at the other.", + "A mallet is a short, heavy hammer with a flat head, typically made of wood, used for striking objects.", + "A mallet is a hammer-like tool with a cylindrical head.", + "A mallet is a small, blunt instrument used for pounding.", + "A mallet is a type of hammer that is often used by woodworkers.", + "A mallet is a hammer-like tool with a head made of metal, plastic, or wood.", + "A mallet is a hammer-like tool that is used to strike other tools.", + "A mallet is a tool with a large, heavy head that is used for pounding." + ], + "mammoth": [ + "A mammoth is a large, hairy, elephant-like creature.", + "A mammoth is a large, furry mammal that looks like an elephant.", + "A mammoth is a large, hairy elephant-like creature that lived in the Ice Age.", + "Mammoths are very large elephants.", + "Mammoths were very large, hairy elephant-like creatures that lived during the ice age.", + "A mammoth is a large, furry, elephant-like creature with long tusks.", + "A mammoth looks like a large elephant with long, shaggy hair.", + "A mammoth looks like a very large elephant.", + "A mammoth is a large, extinct mammal that lived during the last ice age.", + "A mammoth is a large, hairy, elephant-like creature with long tusks." + ], + "manatee": [ + "A manatee looks like a very large gray mammal with a long, round body and a flat tail.", + "A manatee is a large, slow-moving aquatic mammal with a flippered tail and a rounded body.", + "A manatee is a large, aquatic mammal with a flipper-like tail and two forelimbs that are modified into flippers.", + "A manatee is a large marine mammal with a round body, flippers, and a powerful tail.", + "A manatee has a large, gray body and paddle-shaped tail.", + "A manatee is a large, gray-colored aquatic mammal with a flipper-like tail and rounded body.", + "A manatee is a marine mammal that looks like a cross between a hippopotamus and a seal.", + "A manatee is a large, aquatic mammal that has a rotund body, flippers, and a tail.", + "A manatee is a large, gray, aquatic mammal with a rounded body, flippers, and a tail.", + "Manatees are large marine mammals that look somewhat like dolphins." + ], + "mandarin orange": [ + "A mandarin orange is a small, rounded citrus fruit with a thin, loose skin that is easy to peel.", + "A mandarin orange is a small, round citrus fruit with a thin, easy-to-peel skin.", + "A mandarin orange is a small, orange fruit with a thin, easy-to-peel skin.", + "A mandarin orange is a small, round orange with a thin, loose skin.", + "A mandarin orange is a small, spherical citrus fruit with a thin, bumpy skin that is easy to peel.", + "A mandarin orange is a small, round citrus fruit with a thin, orange peel.", + "A mandarin orange is a small, rounded citrus fruit with a thin, easy-to-peel skin.", + "A mandarin orange is a small, spherical citrus fruit with a brightly colored, loose skin.", + "A mandarin orange is a small, round citrus fruit with a thin, easy-to-peel skin.", + "A mandarin orange is a small, round citrus fruit with a thin, easy-to-peel skin." + ], + "manger": [ + "A manger is a simple, open-air structure used to hold hay and fodder for livestock.", + "A menagerie is a collection of captive animals, typically collected to be displayed to the public.", + "A manger is a low box, often made of stone, in which hay and fodder are placed for animals.", + "A manager is a person who is responsible for leading and guiding a team of people.", + "A manager is typically a person who is in charge of a team or department.", + "A manager is a person who is responsible for leading and guiding a team of people in an organization.", + "A manager is a person who is responsible for leading and guiding a team of people in order to achieve a common goal.", + "A manger is a place where animals eat, typically a large, low structure with an opening at one end in which hay or straw is kept.", + "A manager is a person who is in charge of a team or department.", + "The manger is a large, wooden box, usually on legs, with a slatted front that can be opened to add hay or other bedding materials for animals." + ], + "manhole": [ + "A manhole is a hole in the ground that is used to access a sewer or other utility lines.", + "A typical manhole is a cylindrical metal frame with a removable rectangular or circular cover.", + "A manhole looks like a large, round hole in the ground with a metal or concrete cover.", + "A manhole is a hole in the ground that leads to a sewer or other underground utility.", + "A manhole is a hole in the ground with a metal or concrete cover.", + "A manhole is typically a small, circular, metal plate set into the ground that covers an access point to a subterranean utility structure.", + "A manhole is a hole in the ground with a metal cover.", + "A manhole is a hole in the ground with a metal or concrete cover.", + "A manhole is a cylindrical hole in the ground that leads to a subterranean chamber, typically one that provides access to a sewer or other utility.", + "A manhole cover is a circular or rectangular metal plate that is used to cover an opening to a manhole." + ], + "map": [ + "A map is a two-dimensional representation of an area.", + "Most maps have a legend that explains what the symbols on the map mean.", + "A map usually shows different geographical features of an area, like mountains, rivers, and lakes.", + "A map looks like a bunch of lines on a piece of paper.", + "A map is a two-dimensional representation of a three-dimensional area.", + "A map usually has a title, a legend, and a grid.", + "A map is a visual representation of an area, typically showing political boundaries, road networks, natural features, and built infrastructure.", + "A map is a two-dimensional representation of an area.", + "A map shows an area of land or sea.", + "A map is a two dimensional representation of a three dimensional space." + ], + "marker": [ + "A marker is a pen-like object with a tips that contains ink.", + "A marker is typically a long, thin cylinder with a pointed end.", + "A marker is a pen-like object with a small, felt tip.", + "A marker is a pen-like utensil with a nib and a reservoir for ink.", + "A marker has a thin point at one end and a thicker barrel at the other.", + "A marker is a brightly colored object that is used to indicate a location.", + "A marker is a pen with a felt tip that is used to write on paper.", + " and explain how to use itA marker is a writing utensil with a cylindrical body and a pointed tip.", + "A marker looks like a pen with a felt tip.", + "A marker is a cylindrical object with a point at one end and a cap at the other." + ], + "martini": [ + "A martini is traditionally served in a chilled cocktail glass, with a garnish of an olive or a twist of lemon.", + "A martini typically looks like a clear, or sometimes golden-tinged, drink with a garnish of either an olive or a twist of lemon.", + "A martini is traditionally a cocktail made with gin and vermouth, and garnished with an olive or a lemon twist.", + "A martini is typically a mixture of gin and vermouth, and it is served in a cocktail glass.", + "Traditionally, a martini is served with a olive or a twist of lemon peel.", + "A martini looks like a cocktail that is made with gin, vermouth, and ice.", + "Most martinis are served in a Cocktail glass, which is a stemmed glass with a cone- or cone-shaped bowl.", + "A martini is a cocktail made with gin and vermouth, and garnished with an olive or a lemon twist.", + "A martini looks like a glass of gin or vodka with a splash of vermouth, garnished with an olive or a lemon twist.", + "A martini is a cocktail made with gin, dry vermouth, and optionally a dash of bitters." + ], + "mascot": [ + "A mascot is often a cartoon character that is used to represent a company, team, or organization.", + "Ty usually wears an anthropomorphic coyote costume with a large head and legs.", + "A mascot is an anthropomorphic animal or object that represents a group, such as a school, team, or brand.", + "A mascot is a costumed character that represents a school, sports team, or business.", + "A mascot usually looks like an animal or a person.", + "A mascot is typically an animal or character that is representative of a particular group, such as a school or sports team.", + "Most mascots are large, furry, and cartoonish.", + "A mascot usually looks like a cartoon character that represents a company, school, sports team, or organization.", + "Most mascots are large, cartoonish characters that are designed to represent a company, school, or team.", + "A mascot is a person, animal, or object that represents a group or organization." + ], + "mashed potato": [ + "A mashed potato looks like a soft, smooth, creamy paste.", + "A mashed potato is a food dish made from boiled potatoes that have been mashed with a potato masher or a fork.", + "Mashed potatoes are usually a whitish-yellow color, and have a smooth, creamy texture.", + "A mashed potato is a type of food made by mashing boiled potatoes.", + "A mashed potato is a dish made by mashing boiled potatoes.", + ".", + "A mashed potato is a potato that has been peeled and then boiled until it is soft.", + "A mashed potato looks like a thick, creamy, and smooth paste.", + "A mashed potato is a type of potato dish that is made by mashing boiled potatoes.", + "A mashed potato looks like a smooth, creamy, white or off-white paste." + ], + "masher": [ + "A masher is a tool used to mash, or break up, food.", + "A masher is a kitchen utensil used for mashing or pureeing food.", + "A masher is a kitchen tool that is used to mash or puree food.", + "A masher is a tool used to mash or puree food.", + "A masher is a hand-held kitchen utensil that is used to mash, or crush, vegetables and fruits.", + "A masher is a tool that is used to mash, or crush, food.", + "A masher is a device used to mash or crush food, typically potatoes.", + "A masher is a tool that is used to mash or blend food.", + "A masher is a kitchen tool that is used to mash or puree food.", + "A masher is a tool used to mash or break up food." + ], + "mask": [ + "A mask is a piece of cloth that covers the face.", + "A mask may take many different forms, but most masks cover the face.", + "A mask is a thin piece of material that covers the nose and mouth.", + "A mask is a piece of cloth or other material worn over the face, typically for protection, disguise, performance, or entertainment.", + "A mask can look like many things, but typically it is a piece of cloth or fabric that covers the face.", + "A mask is a piece of cloth that covers the face.", + "A mask is a piece of cloth or other material that covers the face, typically for concealment, protection, or warmth.", + "A mask is a piece of cloth that covers the face.", + "A mask covers the face and has straps that go around the head.", + "A mask is a thin piece of cloth or paper that is worn over the nose and mouth." + ], + "mast": [ + "A mast is a vertical structure that supports sails on a sailing vessel.", + "A mast is a long, thin, vertical support for sails or lights.", + "A mast typically consists of a vertical pole supporting cables, wires, or sails.", + "a mast is a vertical structure, typically composed of wood or metal, that supports sails or rigging on a ship.", + "A mast is a tall and thin structure that rises straight up from the ground.", + "A mast is generally a tall vertical pole, often made of metal or wood, that supports other structures such as sails, flags, or antennae.", + "A mast typically consists of a vertical post or pole, and horizontal crossbars or wire ropes that support the structure.", + "A mast is a tall, slender column that supports a ship's sail.", + "A mast is a vertical support for a sailing ship's sails.", + "A mast is a vertical structure that supports sails or other rigging." + ], + "mat (gym equipment)": [ + "A mat is a large piece of foam that is used for workouts or gymnastics.", + "A mat is a piece of gym equipment that is typically made of foam and is used for floor exercises.", + "A mat is typically a large, flat, foam rectangle.", + "A mat is a large piece of padded fabric, often foam, that is used as flooring or padding.", + "A mat is a flat piece of foam or other material that is used as a floor covering, either on its own or in combination with other materials.", + "A mat is a flat piece of foam or rubber that is used to protect people from falling and to cushion them when they are doing floor exercises.", + "A mat is usually a piece of foam or rubber, about 4 feet by 6 feet, and 1 inch thick.", + "A mat is a flat piece of exercise equipment that usually has a textured surface and is used for things like yoga or pilates.", + "A mat is a piece of equipment used in gymnastics and other sports.", + "A mat is a piece of equipment used in gymnastics, usually made of foam or another soft material." + ], + "matchbox": [ + "A matchbox looks like a small cardboard box with a strikeable surface on one side.", + "A matchbox is a small cardboard box that contains wooden matches.", + "A matchbox typically has a cardboard outer shell and a paper insert that contains anywhere from 12 to 50 matches.", + "A matchbox is a small, rectangular box that is used to hold matches.", + "A matchbox typically contains a small number of wooden matches.", + "A matchbox is typically a small, rectangular cardboard box with a flip-top lid.", + "A matchbox is a small, rectangular box that is used to hold matches.", + "A matchbox typically contains a small number of wooden matchsticks.", + "A matchbox typically contains a small number of wooden matches.", + "A matchbox is typically a small, rectangular cardboard box that holds a number of wooden matches." + ], + "mattress": [ + "A mattress is a rectangle of padded fabric, typically filled with cotton, wool, or synthetic fiber, and covered with cloth.", + "A mattress is a flat surface that is typically filled with materials such as foam, cotton, or other soft materials, and is used for sleeping or reclining.", + "A mattress is a large, flat, padded object that is used for sleeping on.", + "A mattress is an object that people sleep on.", + "A mattress typically looks like a large, padded rectangle.", + "A mattress generally has a soft, padded surface and is usually used for sleeping on.", + "A mattress is typically a rectangle shaped object that is placed on top of a bed frame.", + "A mattress is a household item typically made from foam, cloth, and other materials.", + "A mattress is typically a thin, rectangular pad that is placed on top of a bed frame or box spring.", + "A mattress typically consists of a base layer of springs, topped with a layer of padding, and then covered with fabric." + ], + "measuring cup": [ + "Most measuring cups have a handle and a spout, and they are mostly cylinder-shaped.", + "A measuring cup is a cup with markings on the side that can be used to measure liquid or dry ingredients.", + "A measuring cup typically has a long handle and a cup-shaped vessel.", + "A measuring cup is a cup with markings on the side that show how much liquid is in the cup.", + "A measuring cup is usually a glass or plastic cup with markings on the side that show how much liquid is in the cup.", + "A measuring cup is a cup that is used to measure the volume of belongings.", + "A measuring cup is a cup with markings on the side that show how much liquid is in the cup.", + "A measuring cup is a kitchen utensil used to measure the volume of liquid or dry ingredients.", + "A measuring cup is a cup with markings on the side that show how much liquid is in the cup.", + "A measuring cup is a cup that has measurements on the side so you can measure out a certain amount of liquid." + ], + "measuring stick": [ + "A measuring stick is a long, thin piece of wood or metal with marks at regular intervals that show how long or how far something is.", + "A measuring stick is a long, thin piece of wood or metal with marks at regular intervals that is used to measure length.", + "A measuring stick is a long, thin piece of wood or metal that is marked off in units of length.", + "A measuring stick is a tool used to measure objects.", + "A measuring stick is a narrow, straight, rigid rod with markings at regular intervals that is used to measure distance.", + "A measuring stick is a long, thin piece of wood or metal with markings on it that show units of measurement.", + "A measuring stick is a long thin rod, usually made of wood or metal, marked with units of length.", + "A measuring stick is a Ruler that is used to measure objects or areas.", + "A measuring stick is a long, slender piece of wood or metal with marks at regular intervals that is used to measure distance or length.", + "Typically, a measuring stick is a long, thin piece of wood or metal with markings at regular intervals." + ], + "meatball": [ + "A meatball is a small, round ball of meat that is usually cooked in sauce.", + "A meatball is a round, ball-shaped piece of meat that is typically made from ground beef, pork, or lamb.", + "A meatball is a small, round piece of meat that is usually cooked in sauce.", + "A meatball is a small ball of ground meat.", + "A meatball is a small, round ball of ground meat, usually beef, pork, or a mixture of the two.", + "A meatball is a round, small, and usually spherical ball of ground meat that is cooked and served as part of a dish.", + "A meatball looks like a small ball of meat, usually beef, pork, lamb, or a combination thereof, that has been seasoned and cooked.", + "A meatball is a small, round, cooked balls of ground meat, often found in Italian cuisine.", + "A meatball is a small, round piece of meat that is usually cooked in sauce.", + "A meatball is typically a ground meat rolled into a ball, seasoned with salt, pepper, and other spices, and then cooked by frying, baking, or steaming." + ], + "medicine": [ + "A medicine usually comes in a pill form and is small and round.", + "A medicine usually comes in a pills or tablet form, although some liquids and creams exist.", + "A medicine may come in many different forms, such as a pill, liquid, or injection.", + "A medicine is generally a small, round, white pill.", + "A medicine looks like a small, white pill.", + "A medicine is a substance that is used to treat, cure, or prevent a disease or condition.", + "A medicine is a small, white pill.", + "\nA medicine may come in many different forms, but most often it is a small tablet or capsule.", + "A medicine looks like a small, pill-shaped object that is usually swallowed whole with water.", + "A medicine usually comes in a small, plastic bottle." + ], + "melon": [ + "A melon is a typically round fruit with a hard rind and a sweet, fleshy interior.", + "A melon is typically a large, round fruit with a hard, green rind and a sweet, orange flesh.", + "A melon is a typically spherical or oval fruit with a hard rind, juicy flesh, and many seeds.", + "A melon is a round or oval-shaped fruit with a hard green or white rind and a sweet, juicy flesh.", + "A melon is a large, round fruit with a green, orange, or yellow rind and a sweet, juicy interior.", + "A melon is a large, fruit with a tough, green rind and a sweet, fleshy interior.", + "A melon typically has a round or oval shape, and is slightly larger than a cantaloupe.", + "A melon is typically a large, round fruit with a thick green or orange rind and a sweet, juicy flesh.", + "A melon looks like a large, round, and green or orange fruit.", + "A melon is typically a large, round or oval-shaped fruit with a hard, green rind and a sweet, fleshy interior." + ], + "microphone": [ + "A microphone typically consists of a body and a capsule.", + "A microphone is a small device that has a cone-shaped head that picks up sound waves and converts them into electrical signals.", + "A microphone is a small, cylindrical device with a hole in the middle.", + "A microphone is a small, handheld device that is used to pick up sound waves and convert them into electrical signals.", + "A microphone is a small cylindrical device with a mesh screen at one end.", + "A microphone is a small, cone-shaped object that is used to pick up sound waves and convert them into electrical signals.", + "Headphones typically have a circular or oval-shaped grille that covers the speaker.", + "A microphone typically consists of a housing, with a diaphragm or other sound-sensitive element in close proximity to a small opening.", + "A microphone is an acoustic-to-electric transducer or sensor that converts sound waves into an electrical signal.", + "A microphone is a small, hand-held device that captures sound waves and converts them into electrical signals." + ], + "microscope": [ + "A microscope is a scientific instrument used to magnify objects or images for detailed examination.", + "A microscope is a small, specialized camera that is used to magnify objects.", + "A microscope typically has an eyepiece through which the user looks, an objective lens that gathers light and produces the image, and a stage on which the specimen is mounted.", + "A telescope is made up of two main optical components: the objective lens and the eyepiece.", + "A microscope is a precision instrument that consists of an objective lens and an eyepiece.", + "A microscope typically has a long metal body with a round base.", + "A microscope is a large, complex machine used to see very small things.", + "A microscope is a mechanical device designed to magnify images of small samples.", + "A microscope is a small, portable instrument used to magnify objects.", + "A microscope generally consists of a light source, an objective lens, and an eyepiece." + ], + "microwave oven": [ + "A microwave oven is a small, box-shaped oven that has a door on the front.", + "A microwave oven is a oven that uses microwaves to cook food.", + "A microwave oven typically has a stainless steel or white exterior and a glass door that opens to reveal a turntable and interior light.", + "A microwave oven is a box-shaped oven that has a door that you can open to put food in.", + "A microwave oven typically looks like a small box with a turntable inside.", + "Most microwave ovens have a rectangular shape with a door on the front that opens to reveal the cooking chamber.", + "A microwave oven is a small, box-like oven that has a rotating plate inside.", + "A microwave oven typically has a stainless steel front and a plastic body.", + "A microwave oven typically has a rectangular shape with a door on the front that opens to reveal the cooking cavity.", + "A microwave oven is a kitchen appliance that has a rectangular box shape and a door that opens to the side." + ], + "milestone": [ + " at your companyA milestone at my company looks like a large, stone, obelisk with our company logo on it.", + "A milestone is a significant event that marks a major achievement in a project.", + "A milestone is a significant event or achievement in a project or in someone's life.", + "A milestone is a point in a project where a significant achievement has been made.", + " to youA milestone is a significant event or achievement that marks a major turning point in a person's life.", + " for yours and your project's success.", + "A milestone is a significant event in the development of a product, project, or company.", + "A milestone can take many forms, but typically it represents some significant achievement or event.", + " on your timelineA milestone on a timeline is a marker that denotes a specific event that occurred.", + " for youA milestone for me would be to graduate from college and to start my own family." + ], + "milk": [ + "A milk is a white, opaque liquid that is produced by mammals.", + "A milk looks like a white colored liquid.", + "A milk is a liquid that has a white color and a creamy texture.", + "A milk is a clear liquid.", + "A milk looks like a white liquid.", + "A milk is typically a white liquid.", + "A milk looks like a white, viscous liquid.", + "A milk looks like a liquid.", + "Milk is a white liquid secreted by cows, goats, and certain other mammals.", + "A milk typically has a white color." + ], + "milk can": [ + "A milk can is a heavy metal container used to store and transport milk.", + "A milk can is a large can that is used to store milk.", + "A milk can is typically a cylinder-shaped, stainless steel container with a lid that is used to store milk.", + "A milk can is a cylindrical, lidless container used to store and transport milk.", + "A milk can is a tall, cylindrical container with a lid on top.", + "A milk can is a cylindrical container made of metal, plastic, or wood, with a lid, used for storing milk.", + "A milk can is a cylindrical container that is used to store milk.", + " tradition metal milk can is cylindrical in shape, with a soldered or riveted seam running up the side.", + "A milk can is a cylindrical container made of metal, usually with a lid, used for storing milk.", + "A milk can is a cylindrical container that is typically made of metal." + ], + "milkshake": [ + "A milkshake is a sweet, creamy drink made with milk, ice cream, and flavorings.", + "A milkshake looks like a tall, frothy drink made with milk, ice cream, and flavorings.", + "A milkshake is a drink made with milk, ice cream, and flavorings.", + "A milkshake is a drink made with milk, ice cream, and a flavor syrup.", + "Milkshakes are usually a thick and creamy drink that is made with milk, ice cream, and flavorings.", + "A milkshake is a sweet, thick drink that is usually made with ice cream, milk, and flavorings or syrups.", + "A milkshake is a thick, sweet drink that is usually made with ice cream, milk, and flavorings or syrups.", + "Milkshakes are usually tall, frosty glasses filled to the brim with cold, creamy milk and topped with a healthy dollop of whipped cream.", + "A milkshake is a drink that is made with milk and ice cream and is usually thick and creamy.", + "A milkshake looks like a thick, creamy drink that is usually served in a tall glass with a straw." + ], + "minivan": [ + "A minivan is a large van that has been designed to transport people.", + "A minivan looks like a slightly larger car, but with a taller roof and more space inside.", + "A minivan typically has a elongated body and wheelbase, a sliding door for passenger entry, and large cupholders.", + "A minivan is a vehicle with a long wheelbase, a high roof, and sliding doors on both sides.", + "A minivan normally has three rows of seats and can seat up to eight people.", + "A minivan looks like a standard van, but it is smaller in size.", + "A minivan is a vehicle designed to carry passengers in the rear seating row(s), with reconfigurable seats in two or three rows.", + "A minivan usually has three rows of seats and can fit up to eight people.", + "A minivan typically has sliding doors, a higher roof, and a longer body than a standard sedan.", + "A minivan is a car that typically has two rows of bench seats, with room for seven or eight passengers total." + ], + "mint candy": [ + "A mint candy is a small, hard candy that is green in color.", + "A mint candy is a small, hard candy that is green or white in color.", + "A mint candy is a small, hard candy that is green or blue in color and has a mint flavor.", + "Most mint candies are small, green, and have a hard candy shell.", + "A mint candy looks like a small, green, hard candy.", + "A mint candy is a small, round candy that is green in color and has a minty flavor.", + "A mint candy is a small, hard candy that is green in color and has a minty flavor.", + "Mint candy is usually a green or white color.", + "Mint candy is typically green or white and is flavored to taste like mint.", + "A mint candy is a small, hard candy that is green in color." + ], + "mirror": [ + "A mirror reflects everything in front of it.", + "A mirror usually has a glass surface that is reflective.", + "A mirror is a smooth, reflective surface.", + "A mirror is a piece of polished metal, glass, or other reflective material that reflects light in a way that preserves much of its original wavelength.", + "A mirror is a shiny, smooth surface that reflects light.", + "A mirror is usually a flat piece of glass that has a polished surface.", + "A mirror looks like a surface that reflects light.", + "A mirror is a surface that reflects light.", + "A mirror is usually a piece of glass with a smooth, metal surface.", + "A mirror is a reflection of your own image in a piece of glass." + ], + "mitten": [ + "A mitten is a garment that covers the hand and wrist.", + "A mitten has a palm and four fingers, with the thumb being sewn on separately.", + "A mitten is a piece of clothing that is worn on the hand and has a thumb separate from the rest of the fingers.", + "A mitten is a garment worn on the hand that has separate sections for the thumb and four fingers.", + "A mitten is a garment that covers the entire hand and has a separate space for each finger, except for the thumb.", + "A mitten is typically a garment worn by people in cold weather.", + "A mitten is a garment worn on the hand that has three or four compartments, each of which is used to hold a separate section of the hand, such as the thumb, palm, and fingers.", + "A mitten is typically a glove without fingers, or sometimes just the part of a glove that covers the fingers.", + "A mitten typically looks like a sock with a thumb hole.", + "A mitten is a piece of clothing that is worn on the hand." + ], + "mixer (kitchen tool)": [ + "A kitchen mixer is a handheld tool that has two beaters that rotate in opposite directions.", + "A mixer is a kitchen tool that looks like a handheld mixer with two beaters.", + "A kitchen mixer is a handheld appliance that has a cylindrical shape.", + "A kitchen mixer is a tall, freestanding unit with a base that houses a motor.", + ".", + "A mixer looks like a small electric motor with a cylindrical shape.", + "A mixer is a kitchen tool that looks like a handheld electric mixer with two mixing attachments: a flat beater and a wire whip.", + "A mixer is a kitchen tool that is used to mix ingredients together.", + "A mixer is a kitchen tool that consists of a handle and a cylindrical body.", + "A kitchen mixer is a small, handheld tool that is used to mix ingredients together." + ], + "money": [ + "Most money is paper money with images printed on it.", + "A money is a small, rectangular piece of paper with images of historical figures on one side and commonwealth symbols on the other.", + "A money looks like a piece of paper with numbers and words on it.", + "A money is a paper note with a numeric value printed on it.", + "A money is a small, flat, metal coin.", + "A money is a small, flat, round piece of metal with a raised image on one side and a numeral on the other side, used as a medium of exchange for goods and services.", + "A money is a bill or a coin that is used to represent a currency.", + "A money is a rectangular piece of paper with pictures of people and animals on it.", + "A money typically looks like a small, rectangular piece of paper with pictures on it.", + "A money looks like a small, rectangular piece of paper with images on both sides." + ], + "monitor (computer equipment) computer monitor": [ + "A monitor is a computer equipment that allows the user to interact with the computer.", + "A computer monitor typically looks like a rectangular screen with a stand that allows you to adjust the angle of the screen.", + "A monitor is typically a display device that shows text and graphics.", + "A monitor is a computer equipment that helps display information in graphical or text format.", + "A computer monitor typically consists of a display unit, housing, stand, and cables.", + "A computer monitor is a flat panel display that connects to a computer to display visual information.", + "It typically has a rectangular shape with a viewing screen in the center.", + "A computer monitor is a constant images that is transferred by computer.", + "A monitor is a computer equipment that typically consists of a display unit, housing, circuit board, and any controls, placed on or within the housing.", + "A computer monitor is a rectangular piece of electronic equipment that displays computer data or video information." + ], + "monkey": [ + "A monkey is a small to medium sized primate.", + "A monkey is a small to medium sized primate.", + "A monkey is a small to medium-sized primate.", + "Monkeys are usually small to medium-sized mammals.", + "A monkey is a small to medium-sized primate, with long arms, legs, and a tail.", + "Monkeys typically have furry bodies, long tails, and expressive faces.", + "A monkey is small to medium-sized, arboreal quadruped mammal with long hind limbs, a short tail, and protruding muzzle.", + "The fur of a monkey is typically short and bristly.", + "A monkey is a small to medium-sized primate.", + "A monkey is a small to medium-sized primate." + ], + "motor": [ + "A motor looks like a cone with wires coming out of the point.", + "\nA motor is a machine that converts electrical energy into mechanical energy.", + "A motor is a device that converts electrical energy into mechanical energy.", + "A typical motor has a cylindrical shape with a central shaft that protrudes from each end.", + "A motor is a cylindrical device with a central shaft that rotates when electric current is applied.", + "A motor is a machine that converts electricity into mechanical energy.", + "A electric motor is a device that converts electrical energy into rotational motion.", + "A motor is a device that converts electrical energy into mechanical energy.", + "A motor is a cylindrical device that converts electrical energy into mechanical energy.", + "A motor is a machine that converts electrical energy into mechanical energy." + ], + "motor scooter": [ + "A motor scooter is a two-wheeled vehicle with a step-through frame and a platform for the operator's feet.", + "A motorbike with a step-through frame and a platform for the rider's feet.", + "A motor scooter is a small vehicle with a small engine that is ridden by standing on the platform between the two wheels.", + "A motor scooter typically has two wheels and a step-through frame.", + "A motor scooter typically has two wheels and a seat.", + "A motor scooter is a small, lightweight two-wheeled vehicle.", + "A motor scooter is a small, lightweight motorcycle with a step-through frame and a platform for the rider's feet.", + "A motor scooter typically has two wheels, a small seat, and a platform for the rider's feet.", + "A motor scooter has a small, step-through frame and a platform for the rider's feet.", + "A motor scooter is a two-wheeled vehicle that has a platform for the rider's feet and is powered by a motor." + ], + "motor vehicle": [ + "A car has four round, cylindrical shapes at the base.", + "A motor vehicle typically has four wheels and an internal combustion engine.", + "A four-wheeled vehicle that is powered by an engine.", + "A motor vehicle is a self-propelled vehicle that is used for transportation.", + "A motor vehicle can come in many shapes and sizes, but they all have four wheels and an engine.", + "A motor vehicle is a wheeled vehicle that carries its own motor.", + "A motor vehicle typically has four wheels and an engine.", + "A motor vehicle typically has four wheels and a steering wheel, and is propelled by an engine.", + "A motor vehicle typically has four wheels and an engine.", + "A motor vehicle typically has four wheels and an internal combustion engine." + ], + "motorcycle": [ + "A motorcycle typically has two wheels, a seat for the rider, and handlebars.", + "A motorcycle typically has two wheels, sometimes three, and a motor.", + "A motorcycle typically has two wheels and a seat.", + "A motorcycle is a vehicle with two wheels that is driven by a motor.", + "A motorcycle typically has two wheels, a seat for the rider, and handlebars for steering.", + "A motorcycle typically has two wheels, a seat for the rider, and handlebars for steering.", + "A motorcycle typically has two wheels, a seat for the rider, handlebars, and a combustion engine.", + "A motorcycle typically has two wheels, a seat, a gas pedal, and a brake pedal.", + " Motorcycles vary in style and design, but most have two wheels and are powered by a gasoline engine.", + "A motorcycle typically has two wheels, a seat, a gas pedal, and a brake." + ], + "mound (baseball)": [ + "The pitcher's mound is a raised area in the center of the diamond.", + "A mound is a small dirt hill that is located in the middle of a baseball diamond.", + "A mound (baseball) is a raised area in the center of the diamond where the pitcher stands.", + "A mound in baseball is a raised area in the center of the diamond, on which the pitcher stands when throwing the ball.", + "A mound in baseball is a slightly raised area in the center of the diamond where the pitcher stands when delivering the ball to the batter.", + "A mound in baseball is a raised area in the center of the diamond where the pitcher stands.", + "A mound in baseball is a small hill that the pitcher stands on when throwing the ball.", + "A baseball mound is a raised area in the middle of a baseball diamond where the pitcher stands when throwing the ball.", + "A baseball diamond is a square that is 90 feet on each side.", + "A baseball mound is a small hill on the baseball diamond that the pitcher stands on when throwing the ball to the hitter." + ], + "mouse (computer equipment)": [ + "A mouse is a hand-held device that is used to move a cursor on a computer screen.", + "A mouse is a small, hand-held device that is used to move a cursor on a computer screen.", + "A mouse is a input device that allows a user to control a graphical user interface (GUI).", + "A mouse is a small, hand-held device that is used to move a cursor on a computer screen.", + "A mouse is a hand-held device that is used to move a cursor on a computer screen.", + "A standard computer mouse consists of a primary button, a secondary button, and a scroll wheel located between the two buttons.", + "A mouse is a computer equipment that allows a user to input data into a computer.", + "A mouse is an input device that is used to move a cursor around a screen.", + "A mouse is a small, hand-held device that is used to move a cursor on a computer screen.", + "A mouse is a trackball-like device that is used to control a cursor on a computer screen." + ], + "mousepad": [ + "A mousepad is generally a small, unobtrusive mat that sits on a desk next to a computer keyboard.", + "A mousepad is a small mat that is placed under a computer mouse to help it move smoothly over a surface.", + "A mousepad is usually a small, rectangular piece of foam or fabric that sits on a desk next to a computer mouse.", + "A mousepad is a mat that is placed on a surface to help a computer mouse move more smoothly.", + "A mousepad is a flat surface that a computer mouse can move across.", + "A mousepad is a small piece of fabric or other material that is placed under a computer mouse to help it move more smoothly.", + "A mousepad is a flat surface that helps create a smooth surface for a mouse to move across.", + "A mousepad is usually a small, rectangular piece of fabric or rubber that sits on a desk, providing a surface for a computer mouse to glide over.", + "A mousepad is typically a small, padded mat with a smooth surface that is used to help move a computer mouse across a desktop.", + "A mousepad is a denser mat placed on a surface for a computer mouse to slide across more easily." + ], + "muffin": [ + "A muffin is typically a small, round cake that is moist and soft.", + "A muffin is typically a small, round cake that is moist and has a soft, dense texture.", + "A muffin is a small, round cake that is cooked in a muffin tin.", + "A typical muffin is a small, round cake that is light and fluffy.", + "A muffin typically has a rounded top and is denser than a cupcake.", + ".", + "A muffin is a small cake that is baked in a muffin tin.", + "A muffin is a type of bread that is baked in a small, cup-shaped mold.", + "A muffin is a small cake made from a soft dough and cooked in a mold.", + "A muffin is a small, round cake that is cooked in a special pan with cups." + ], + "mug": [ + "A mug typically has a cylindrical shape with a handle attached to the side.", + "A mug typically has a handle and is cylindrical in shape.", + "A mug is a drinking vessel that typically has a handle and is made out of ceramic, metal, or glass.", + "A mug is a cylindrical drinking vessel with a handle.", + "A mug is a cup with a handle.", + "A mug is a type of cup that has a handle and is typically made out of ceramic.", + "A mug is a type of cup that has a handle.", + "A mug is a drinking cup typically made of ceramic, metal, or glass.", + "A mug is typically a cylindrical vessel with a large handle that is used for drinking hot beverages.", + "A mug is a drinking vessel that typically has a handle and is wider than it is tall." + ], + "mushroom": [ + "A mushroom is typically a small, brown or white stalk with a cap on top.", + "A mushroom has a cap on top of a stem.", + "A mushroom is typically a small, round, and stalk-less fungus that has a cap on top.", + " insideMushrooms have a spongy, porous flesh with a small stalk.", + "A mushroom is a small, spore-bearing fruiting body of a fungus, typically produced above ground on soil or on its food source.", + "A mushroom is a spongy, fleshy, umbrella-shaped fungal fruit with a stalk.", + "A mushroom is a small, spore-bearing fruiting body of a fungus, typically produced above ground on soil or on its food source.", + "Superficially, mushrooms may resemble plants, but they are in fact classified as fungi.", + "A mushroom is a fungi that typically has a stem, cap, and gills.", + "Mushrooms can have many different appearances, but most have a stem and a cap." + ], + "music stool": [ + "A music stool is usually a small, round stool with a padded top.", + "A music stool is a small stool with a padded seat that is used by musicians when sitting and playing their instruments.", + "A music stool is a stool that is designed for people to sit on while they are playing a musical instrument.", + "A music stool features a padded or upholstered seat and a sturdy, adjustable base.", + "A music stool is a small stool that is used by musicians when they are playing an instrument.", + "A music stool is typically a small, round stool that is adjustable in height.", + "A music stool is typically a small, round stool with a padded seat.", + "a music stool is a small, lightweight stool that is specifically designed for use by musicians.", + "A music stool is typically a small, round stool that is adjustable in height.", + "A music stool is a short, small stool with a padded top." + ], + "musical instrument": [ + "A musical instrument is a device created or adapted to make musical sounds.", + "A musical instrument can take on many different forms, depending on what kind of instrument it is.", + "A musical instrument is a physical object used to produce musical sounds.", + "There is no one answer to this question as musical instruments come in many shapes and sizes.", + "Most musical instruments are quite long and thin, so that they can be played easily.", + "A musical instrument typically has a long, thin body with strings running down the length of it.", + "Musical instruments come in many shapes and sizes.", + "A musical instrument typically has a body, Neck, and strings.", + "A musical instrument is a an object that produces sound when it is played.", + "A musical instrument is an object that produces a sound when it is played." + ], + "nailfile": [ + "A nail file is typically a small, hand-held tool that is used to smooth and shape the nails.", + "A nailfile is a tool used to file nails.", + "A nailfile is a thin piece of metal or glass with a abrasive surface.", + "A nailfile is a small, handheld tool used to smooth and shape rough nails.", + "A nail file is usually a rectangular piece of sandpaper with a handle.", + "A nailfile is a handheld tool made of steel, glass, emery, or diamond.", + "A nailfile is a handheld tool that is used to file and shape nails.", + "A nail file is usually a small, hand-held tool with a abrasive surface that is used to file down rough edges on fingernails.", + "A nail file is a handheld tool used to smooth out the edges of fingernails.", + "A nail file is a small tool used to smooth out the edges of nails." + ], + "napkin": [ + "A napkin is usually a small, rectangular piece of cloth or paper that is used to wipe one's mouth or hands while eating.", + "A napkin is a small, square or oblong piece of fabric or paper used at a meal to wipe the mouth and fingers and to protect clothing.", + "A napkin is usually a small, square piece of cloth or paper that is used to wipe one's mouth and hands while eating.", + "A napkin is usually a small, square piece of cloth or paper.", + "A napkin is a small piece of cloth or paper that is used to wipe your mouth while you are eating.", + "Square or rectangular piece of cloth or paper used at a meal to wipe the mouth and fingers and to protect clothing.", + "A napkin is a thin piece of fabric.", + "A napkin is a small piece of cloth or paper that is used to wipe your mouth or hands.", + "A napkin is a small piece of cloth or paper that is used to wipe your mouth while you are eating.", + "A napkin is a small piece of cloth or paper that is used to wipe your mouth while you are eating." + ], + "neckerchief": [ + "A neckerchief is a triangle- or square-shaped piece of cloth that is worn around the neck.", + "A neckerchief is usually a triangular or square piece of cloth that is worn around the neck.", + "A neckerchief is a Louis XIV-style neck scarf that is tied in a bow at the neck.", + "A neckerchief is a piece of cloth worn around the neck.", + "A neckerchief is a triangular-shaped piece of cloth that is worn around the neck.", + "A neckerchief is a triangular piece of cloth worn around the neck.", + "A neckerchief is a triangle-shaped piece of cloth worn around the neck.", + "Most neckerchiefs are triangular in shape and measure around 22 inches on each side.", + "A neckerchief is a scarf worn around the neck.", + "A neckerchief is a triangular-shaped piece of fabric that is worn around the neck." + ], + "necklace": [ + "A necklace is a piece of jewelry that is worn around the neck.", + "A necklace typically consists of a metal chain with a pendant or charm attached.", + "A necklace is a piece of jewelry that is worn around the neck.", + "A necklace is a piece of jewelry that is worn around the neck.", + "Necklaces typically consist of a metal chain to which a pendant or charm is attached.", + "A necklace is a piece of jewelry that is worn around the neck.", + "A necklace is a jewelry item that is worn around the neck.", + "A necklace consists of a piece of jewelry that is worn around the neck.", + "A necklace is a piece of jewelry that is worn around the neck.", + "A necklace is a piece of jewelry that is worn around the neck." + ], + "necktie": [ + "A necktie is a long strip of fabric that is worn around the neck and tied in the front.", + "A necktie is a very long, thin piece of cloth that is worn around the neck and tied in a knot at the front.", + "A necktie looks like a long, thin strip of fabric that is worn around the neck and tied in a knot at the front.", + "A necktie is a strip of cloth that is worn around the neck and tied in the front.", + "A necktie is a long, narrow piece of cloth that is worn around the neck, under a shirt collar, and knotted at the throat.", + "a necktie is a long, thin strip of cloth worn around the neck, under a shirt collar, and tied at the front.", + "A necktie is a long, thin strip of cloth that is worn around the neck and is typically tied in a knot at the front.", + "A necktie is a long, thin strip of fabric that is worn around the neck, under a shirt collar, and tied in a knot at the front.", + "A typical necktie is a long piece of fabric that is worn around the neck and extends down the chest.", + "A necktie is a long, thin piece of fabric that is worn around the neck and typically tied in a knot at the front." + ], + "needle": [ + "A needle is a thin, sharp point that is used to pierce through material.", + "A needle is a thin, sharp object with a point at one end and a hole at the other.", + "A needle is thin, long, and pointed.", + "A needle is a thin, sharp object typically used for sewing.", + "A needle is a thin, pointy object that is often used for stitching or injections.", + "A needle is a long, thin object with a point at one end and a round eye at the other.", + "A needle is long, thin, and sharp.", + "A needle is thin and sharp.", + "A needle is a thin, pointy object that is used for sewing or inject drugs.", + "A needle is a thin metal or plastic rod with a pointed end that is used for sewing." + ], + "nest": [ + "A nest is typically a compact structure built by a bird out of twigs, grasses, and other materials, and designed to protect the bird's eggs and young.", + "A nest is a structure created by a bird to house its eggs and young.", + "A nests can be many different shapes and sizes, however they are generally a strategic cup-like structure made out of different materials depending on the species.", + "Locations of nests vary depending on the species, but generally speaking, a nest is a structure built by an animal to house its young.", + "A bird's nest is a small cup made of twigs, bark, and other materials, and lined with feathers, fur, or grass.", + "A nest is an enclosed structure made by an animal to house themselves or their young.", + "A nest is a collection of materials used by a bird to support its eggs and young.", + "A nest is a small home that animals build to live in or to keep their eggs safe.", + "Most commonly, a nest is a structure built by animals out of various materials to house their young.", + "A nest is a structure that is built by an animal to house its eggs or young." + ], + "newspaper": [ + "A newspaper is typically a large rectangular piece of paper that is printed with news stories and articles.", + "A newspaper is a publication that is printed on large sheets of paper that are folded in half and then in half again.", + "A newspaper is typically a thin sheet of paper, measuring around 11 inches by 16 inches, with print on both sides.", + "A newspaper typically contains several sections, including a front page with stories that are most important to readers; a sports section, with scores and stories about local, national, and international sports; a features section, with stories about human interest, entertainment.", + "A newspaper is a slow-moving medium that contains news articles, features, and advertisements.", + "A newspaper usually has a title at the top, with the date underneath.", + "A newspaper has pages that are divided into sections.", + "A newspaper is a rectangular piece of paper that is usually folded in half.", + "A newspaper typically has a large header with the name of the newspaper, followed by smaller headers with the day and date.", + "A newspaper is a thin, flat piece of paper that has been printed on, usually with black ink." + ], + "newsstand": [ + "A newsstand is a small shop that sells magazines and newspapers.", + "A newsstand is a small, temporary structure that is set up on a sidewalk or public space to sell newspapers and magazines.", + "A newsstand is usually a small, cramped shop that sells magazines, newspapers, cigarettes, and snacks.", + "A newsstand is a small stall where newspapers and magazines are sold.", + "A newsstand is a place where newspapers and magazines are sold.", + "A newsstand is a small stall that sells newspapers and magazines.", + "A newsstand typically contains a variety of newspapers and magazines.", + "A newsstand usually has a large selection of different newspapers and magazines to choose from.", + "A newsstand contains many newspapers and magazines from around the world for people to purchase.", + "A newsstand looks like a small kiosk or stall that sells newspapers, magazines, and other light reading material." + ], + "nightshirt": [ + "Nightshirts are typically long, loose-fitting garments that extend to at least the knees, and sometimes the ankles.", + "A nightshirt is a long shirt that is worn to bed.", + "A nightshirt is a loose-fitting shirt made of soft material, typically worn by men.", + "A nightshirt is a shirt worn to bed.", + "A nightshirt is a loose-fitting shirt that is worn at night.", + "A nightshirt is a long shirt that is worn to bed.", + "A nightshirt is a shirt meant to be worn while sleeping.", + "A nightshirt is a long, loose-fitting shirt that is typically worn by men.", + "A nightshirt is a loose-fitting shirt with long sleeves that reaches down to the knees or lower.", + "A nightshirt is a shirt made to be worn while sleeping." + ], + "nosebag (for animals)": [ + "A nosebag is a sack made of cloth, paper, or plastic that is filled with food and strapped around an animal's head.", + "A nosebag for animals is a type of feedbag that strap around the animal's neck and hangs down in front of their nose.", + "A nosebag for animals is a bag that is placed over the animal's nose and fastened around their head.", + "A nosebag is a type of feedbag that is placed over an animal's head, allowing it to eat without interference.", + "A nosebag is a type of bag that is placed over an animal's head, with the opening positioned over the nose.", + "A nosebag is a bag that is placed over an animal's head, usually with a strap around the neck, so that the animal can eat without having to move.", + "A nosebag is a bag made of cloth, paper, or plastic, with a handle or strap, that is used to feed an animal, typically a horse or donkey, by placing it over the head and fastening it under the chin.", + "A nosebag is a type of feedbag used to pour feed directly into an animal's mouth.", + "A nosebag for animals is a type of bag that is placed over the animal's nose and fastened behind their head.", + "A typical nosebag is a bag made of hessian or canvas, with a hole for the animal's head." + ], + "noseband (for animals)": [ + "A noseband (for animals) is a strap that goes around the nose of an animal, typically a horse.", + "A noseband is a strap that goes around an animal's nose.", + "A noseband is a strap that goes around the nose of an animal, usually a horse.", + "A noseband is a piece of equipment that goes around an animal's nose.", + "A noseband is a piece of equipment that goes around an animal's nose.", + "A noseband is a strap or band of material that goes around an animal's nose.", + "A noseband is a strap that goes around an animal's nose.", + "A noseband of a horse or other animal is a band of material placed around the head behind the animal's ears and usually fastened with a buckle, used for style or to control the animal by attaching a lead rope or reins.", + "A primitive form of noseband was used by the ancient Greeks and Romans.", + "A noseband is a strap that goes around an animal's nose, usually as part of a harness." + ], + "notebook": [ + "A notebook is a small book with pages that are lined or ruled and have a margin.", + "A notebook is traditionally a small book with blank pages that is used for writing notes.", + "A notebook is a small book with pages that are blank, lined, or checked.", + "Notebooks are typically spiral-bound or stitched and come in a variety of colors.", + "A notebook is a book with pages that are divided into sections by lines.", + "A notebook is a type of composition book, typically consisting of around 100 pages of lined or blank paper, bound with a cardboard cover.", + "A notebook is a book composed of blank pages with pockets or flaps for holding papers, often fastened with a string or ribbon.", + "Notebooks are often paper notebooks with a stiff cover and a spiral binding, though some are now made with a soft cover.", + "A notebook is a small book with blank pages that are used for writing.", + "A notebook looks like a small spiral-bound book with blank pages inside." + ], + "notepad": [ + "A notepad is a small, portable notebook used for writing down notes and ideas.", + "A notepad is typically a rectangular piece of paper with lines drawn on it.", + "A notepad typically has a rectangular shape and is small enough to fit in a pocket.", + "A notepad is a hard cover notebook with pages that are glued together at the spine.", + "Notepads come in all shapes, colors and sizes, but they typically have 50-100 pages of lined paper held together by a cardboard or plastic cover.", + "A notepad is typically a small, lightweight notebook with dozens of pages of paper inside.", + "A notepad is typically a small, rectangular piece of paper that is bound at the top with a perforated edge.", + "A notepad is a small, portable piece of paper with blank pages that is used for writing down notes.", + "A notepad is a small, portable book with blank pages for writing.", + "A notepad is a small booklet with paper pages that are held together by a staples or adhesive binding." + ], + "nut": [ + "A nut is a small, hard, dry fruit that grows on trees and shrubs.", + "A nut is typically a hard, dry fruit that contains one or more seeds.", + "A nut is a small, hard, dry fruit that grows on trees and bushes.", + "A nut is a small, hard, dry fruit with a single seed in the center.", + "A nut is a small, hard, dry fruit with a thick shell that grows on trees.", + "A nut is a plant food that is surrounded by a hard shell.", + "A nut is a type of plant food that is encased in a hard, inedible shell.", + "A nut is a small, hard, dry fruit with a thick shell.", + "A nut is an indehiscent fruit with a hard shell and a edible kernel.", + "A nut is a small, hard, dry fruit with a thick, woody shell that contains a seed." + ], + "nutcracker": [ + "A nutcracker looks like a heavy duty pair of pliers.", + "A nutcracker is a toy made to look like a soldier, often with a wooden body and a painted face.", + "A nutcracker is a small wooden tool designed to crack open nuts.", + "A nutcracker is a object used to crack open nuts.", + "A nutcracker is a device that is used to open nuts by cracking them.", + "Nutcrackers are usually wooden, and they have a lever on the back that opens and closes the mouth.", + "Wooden figure with large teeth that can crack nuts open.", + "A nutcracker is a small device used to crack open nuts.", + "A nutcracker is usually a small figure, either wooden or made from another material, with a lever on its back.", + "A nutcracker is a decorative figurine that is used to open nuts." + ], + "oar": [ + "An oar is a long, slim piece of wood or other material that is used to row a boat.", + "An oar is a long, thin piece of wood or metal that is used to row a boat.", + "An oar is a long, slender pole with a flat blade at one end.", + "An oar is a long, slender, rounded piece of wood with a flat blade at one end, used for rowing a boat.", + "An oar typically has a flat blade at one end, and a handle grip at the other end.", + "An oar is a long, thin piece of wood or metal that is used to row a boat through the water.", + "An oar is a long pole with a flat end that is used to row a boat through water.", + "An oar looks like a long, thin pole with a flat, blunt end.", + "An oar looks like a long stick with a flat paddle on one end.", + "An oar is a long, narrow board with a handle at one end, used for rowing a boat." + ], + "octopus (food)": [ + "An octopus is a sea creature with eight legs and a soft body.", + "An octopus (food) has a soft, boneless body with eight arms that are each equipped with two rows of suction cups.", + "Octopus is a type of seafood that is often considered a delicacy.", + "An octopus is a jelly-like food that is typically white in color.", + "An octopus is a soft-bodied, eight-armed mollusc of the order Octopoda.", + "An octopus is a soft-bodied, eight-limbed mollusc of the order Octopoda.", + ".", + "An octopus is a sea creature with eight arms.", + "An octopus is a type of cephalopod, a class of seafood that also includes squid and cuttlefish.", + "A cooked octopus typically has a firm texture with a slightly sweet taste." + ], + "octopus (animal)": [ + "An octopus is a soft-bodied, eight-limbed mollusc of the order Octopoda.", + "Octopuses are soft-bodied creatures with eight arms that have suction cups on them.", + "An octopus is a predatory mollusc.", + "An octopus has a soft, elongated body with eight arms that have suction cups on the underside.", + "An octopus has a round head with eight arms and a short, pointed tail.", + "An octopus is a cephalopod mollusc with eight arms and two eyes.", + "An octopus is a soft-bodied, eight-limbed mollusc of the order Octopoda.", + "An octopus is a sea creature that has a soft body and eight long legs.", + "An octopus typically has a soft, oval-shaped body with eight long arms.", + "An octopus is a cephalopod mollusc of the order Octopoda." + ], + "oil lamp": [ + "An oil lamp has a glass or metal body that contains oil and a wick.", + "An oil lamp is a device that uses oil as a fuel to produce light.", + "An oil lamp typically consists of a wick in a container, which can be made from metal, glass, or ceramic.", + "Oil lamps look like a glass or metal container with a wick sticking out of the top.", + "An oil lamp is a lamp that uses oil as a fuel.", + "An oil lamp is an old-fashioned type of lamp that is filled with oil and has a wick that is lit in order to produce light.", + "An oil lamp is a container for oil with a wick sticking out of it.", + "An oil lamp is a lamp that uses oil as a fuel.", + "An oil lamp is typically a small, bowl-shaped object with a small spout or wick sticking out of the top.", + "An oil lamp typically consists of a wick in a glass chimney or metal wick tube, surrounded by a bowl to collect the oil." + ], + "olive oil": [ + "Find a picture of olive oil.", + "An olive oil has a dark green color and a slightly bitter taste.", + "An olive oil is typically a greenish-yellow color.", + "An olive oil looks like a greenish-yellow liquid.", + "An olive oil is a greenish-yellow liquid.", + "Olive oil is a golden-green color.", + "An olive oil is a clear to yellowish liquid with a slightly bitter taste.", + "An olive oil is a greenish-yellow liquid that is extracted from olives.", + "Olive oil is a liquid that ranges in color from yellow to green to golden.", + "An olive oil is a liquid oil that is extracted from olives." + ], + "omelet": [ + "A classic omelet is a simple affair: Eggs, whisked with a little milk or water and seasoned with salt and pepper, are cooked in butter until set around the edges and soft in the center.", + "An omelet is a egg-based dish that is cooked in a pan and typically filled with vegetables, cheese, and meat.", + "An omelet typically looks like a flattened disk of egg that has been cooked until set.", + "An omelet is generally a disc of egg that has been cooked in a pan with butter or oil.", + "An omelet is a savory dish made with eggs and fillings such as cheese, ham, and vegetables.", + "An omelet is a dish made from beaten eggs that are cooked in a pan and then filled with a variety of ingredients.", + "An omelet is made by whisking together eggs, milk, and seasonings.", + "An omelet is a flat, cooked egg dish that is made by lightly whisking eggs and then frying them in a little bit of butter.", + "A classic omelet is made up of three components: the egg mixture, the fillings, and the fat.", + "An omelet is a type of egg dish made by whisking eggs and then frying them in a pan with butter or oil." + ], + "onion": [ + "An onion is a cylindrical root vegetable with thin, paper-like skin.", + "A onion has a thin, papery skin that encases a firm, layered flesh.", + "An onion is a food that is often used as a spice or seasoning.", + "Onions have a thin, papery skin that can be white, yellow, or red.", + "An onion is a root vegetable with a thin brown skin.", + "A an onion has a thin, papery skin that can be white, yellow, red, or brown.", + "An onion is a round, bulbous vegetable with thin, papery skin.", + "Onions have a white, papery skin that covers a layer of edible flesh.", + "A raw onion is a round, bulbous vegetable with a thin, papery, outer layer.", + "An onion is a root vegetable with a thin papery skin that can be white, yellow, or red." + ], + "orange (fruit)": [ + "The outside of an orange is covered in a thin, orange peel.", + "An orange is a round fruit with a thin skin.", + "An orange is a fruit that is typically round and has a thin, textured skin that is orange in color.", + "An orange is a fruit that is typically round and has a orange peel.", + "An orange is a citrus fruit that is round and has a thick, orange skin.", + "A fresh orange is round, and has a dimpled peel that is easy to remove.", + "An orange is a juicy fruit with a thin, orange skin.", + "A ripe orange is typically oval-shaped and has a thin, bright orange skin that is easy to peel.", + "An orange is a citrus fruit that is typically oval in shape and has a thick, bright orange skin.", + "an orange is a citrus fruit that is typically oval in shape and has a thick, leathery skin that is orange in color." + ], + "orange juice": [ + "An orange juice can looks like a plastic or glass bottle filled with orange liquid.", + "An orange juice typically has a cloudy appearance and is orangish in color.", + "An orange juice looks like orange liquid in a container.", + "An orange juice is a liquid that is usually orange in color.", + "An orange juice looks orange and has a slightly pulpy consistency.", + "An orange juice looks like a yellow-orange liquid.", + "An orange juice is a liquid that is typically orange in color.", + "An orange juice is a drink that is made from oranges.", + "An orange juice is a drink that is made from oranges.", + "An orange juice typically looks like a liquid that is a orange color." + ], + "ostrich": [ + "An ostrich is a large, flightless bird with long legs, a long neck, and a small head.", + "The ostrich is the largest and heaviest bird in the world.", + "An ostrich is a large bird with a long neck and two long legs.", + "An ostrich is a tall, fast-running bird with long legs and a long neck.", + "An ostrich is a large, flightless bird.", + "An ostrich is a very tall bird with a long neck.", + "An ostrich is a large, flightless bird with a long neck and legs.", + "An ostrich looks like a large bird with long legs.", + "An ostrich is a large bird with long legs and a long neck.", + "Ostriches are large, flightless birds that live in hot climates." + ], + "ottoman": [ + "A typical ottoman is a low, upholstered seat or bench.", + "An ottoman is a type of padded stool that is commonly used as a footrest.", + " usually a low, upholstered seat or bench, with no back or arms, designed for use as a footstool, seat, or coffee table.", + "An ottoman typically has a padded or upholstered seat, and sometimes has a skirted bottom.", + "An ottoman is a low, padded piece of furniture that is often used as a footrest or as extra seating.", + "An ottoman is a low, padded piece of furniture that is typically used as a footstool or extra seat.", + "An ottoman is a low, upholstered seat or bench.", + "An ottoman typically has a rectangular shape and is upholstered in fabric or leather.", + "An ottoman is a type of footstool or low seat.", + "An ottoman is a low, upholstered piece of furniture that is often used as a seat or footstool." + ], + "oven": [ + "An oven typically has a door in the front that opens to a space where food can be placed on shelves to be cooked.", + "An oven typically has a door in the front that opens to reveal a space where food can be placed on shelves to be cooked.", + "An oven is typically a metal box with a door on the front.", + "A hulking metal box with a door in the front, large enough to fit several trays of food inside at once.", + "An oven is a household appliance used for baking or cooking food.", + "A toaster oven typically has a door in the front that opens to a small chamber.", + "An oven is a box with a door in the front.", + "An oven is a kitchen appliance that is used to cook food.", + "Ovens can come in many different shapes and sizes, but most have a door in the front that opens to reveal a space in which food can be placed on racks to be cooked.", + "An oven is a household appliance used for baking or roasting food." + ], + "overalls (clothing)": [ + "An overall is a piece of clothing that covers the entire body from the neck to the feet.", + "Overall, an overall is a type of clothing that covers the entire body from the neck to the ankles.", + "An overall is a type of garment that consists of two large pieces of fabric that cover the front and back of the body, and are joined together at the sides by straps or fasteners.", + "An overall is a type of clothing that covers the entire body, including the arms, legs, and torso.", + "overalls are a type of clothing typically worn by farmers and other manual laborers.", + "An overall is a type of clothing that covers the entire body, including the legs, arms, and torso.", + "An overall is a one-piece clothing item that covers the entire body, excluding the head, hands, and feet.", + "An overalls is a type of clothing that consists of two parts: pants and a shirt.", + "An overall is a type of clothing that covers the entire body.", + "An overall is a one-piece garment that covers the torso and legs." + ], + "owl": [ + "Most owls look like they have a round head with large eyes.", + "An owl has a round head, no ears, big eyes, and a hooked beak.", + "An owl typically has a large head, bright eyes, and a hooked beak.", + "An owl has large, rounded eyes, a hooked beak, and long, powerful legs.", + "An owl has a round head, big eyes, and a hooked beak.", + "An owl is a bird with wings and a beak.", + "An owl is a bird with large, round eyes and a hooked beak.", + "Most owls have large, round heads and large, forward-facing eyes.", + "An owl has a round head, big eyes, and a hooked beak.", + "Owls are birds of prey with large, rounded heads and large eyes." + ], + "packet": [ + "A packet is a small amount of data that is sent across a network.", + "A packet is typically composed of a header and a payload.", + "A packet is a small unit of data that is sent over a network.", + "A packet is a group of bits that have been formatted in a specific way for transmission.", + "A packet usually consists of a header and a payload.", + "A packet is typically composed of a header and a payload.", + "A packet is a small unit of data that is sent over a computer network.", + "A packet is a unit of data that is transmitted over a network.", + "A packet is a sequence of data bytes and control bits sent as a unit along a communication Channel.", + "A packet consists of a header and a payload." + ], + "inkpad": [ + "An inkpad is a small, rectangular pad of firm, absorbent material that is used to apply ink to a stamp.", + "An inkpad is a small, flat, rectangular piece of foam or other absorbent material that is saturated with ink.", + "An inkpad is a pad of ink that is used for stamping.", + "An inkpad is a small, flat surface that is filled with ink.", + "An inkpad generally has a rectangular shape and is filled with ink of a single color.", + "An inkpad is a small, portable pad full of ink that can be used to stamp images or words onto paper.", + "Inkpads are generally small, rectangular blocks of absorbent material that are saturated with ink.", + "An inkpad is a small, flat pad containing ink that is used to transfer ink to another surface.", + "A typical inkpad is a small, rectangular piece of foam or sponge, covered in a layer of ink.", + "An inkpad is a small apparatus that consists of an absorbent material soaked in ink." + ], + "pad": [ + ":A pad usually consists of a soft, absorbent material, such as cloth or paper, that is attached to a body using adhesive.", + "A pad is a soft, typically rectangular, object that is used to protect surfaces or absorb moisture.", + "A pad is a small, rectangular, often disposable item made of absorbent material that is worn by a person to absorb menstrual fluid during menstruation.", + ".", + "A pad is a small, thin, rectangular object that is typically made of absorbent material.", + "A pad looks like a small, rectangular, absorbent mat that is placed under the feet, knees, or buttocks during a medical procedure.", + "A pad is typically a rectangular, absorbent object that is used for various purposes, such as absorbing spills, wiping surfaces clean, and providing comfort.", + "A pad is a thin, absorbent, rectangular mat that is placed under a person during various activities, such as a baby during diaper changes, a patient during an exam, or someone during a massage.", + "A pad is a small, soft, flat cushion.", + "A pad is typically a rectangular piece of absorbent material that is attachable to underwear." + ], + "paddle": [ + "A paddle is a tool that is used for propelling a boat through water.", + "A paddle is a tool that has a long handle and a flat, slightly curved blade at the end.", + "A paddle looks like a large, flat piece of wood or plastic that is attached to a long handle.", + "A paddle is a tool used for pushing against water in order to propel a boat forward.", + "A paddle is a long, thin piece of wood or other material with a smooth surface.", + "A paddle is typically a thin piece of wood or composite material that is attached to a long handle.", + "A paddle is a tool used for paddling a canoe or kayak.", + ".", + "A paddle is a rod with a wide flat end, used for hitting a ball in games such as table tennis.", + "A paddle is a long, thin piece of wood or other material that is used to hit a ball in a game such as ping-pong." + ], + "padlock": [ + "A padlock is a portable lock with a shackle that secures the hasp in a closed position.", + "A padlock is a lock that has a shackle that goes through a hasp or other fixed object.", + " A padlock is usually a metal or plastic case that contains a mechanism for locking and unlocking it.", + "A padlock is usually a small, metal lock that hangs from a loop on a door or gate.", + "A padlock typically consists of a metal body with a shackle that extends out from one side.", + "A padlock is a lock which is used to secure something, such as a door, gate, or container, and is usually made of metal.", + "A padlock is usually a small, metal lock that is used to secure something like a chain.", + "A padlock is a type of lock in which a bolt is inserted into a hole in a hasp, staple, or keep, often attached to a door or gate.", + "A padlock is a type of lock in which a bolt is inserted into a receiver that is attached to another object, often a hasp.", + "A padlock is a type of lock that has a hinged shackle that passes through a hasp or staple." + ], + "paintbrush": [ + "A paintbrush is a brush with bristles or other filaments, used for painting.", + "A paintbrush consists of a handle and bristles.", + "A paintbrush is a tool with bristles or feathers at one end, used for painting.", + "A paintbrush is a wooden shaft with bristles attached to one end.", + "A paintbrush has a long wooden handle with a metal ferrule holding the bristles in place.", + "A paintbrush is a tool used for painting.", + "A paintbrush is traditionally a brush with a handle made of wood, bamboo, or plastic, and bristles made of natural or synthetic fibers, although modern paintbrushes may have bristle-like tufts made of nylon, polyester.", + "A paintbrush is a tool with a thin block of bristles attached to a handle.", + "A paintbrush is a tool with a bristled head used to apply paint to surfaces.", + "A traditional paintbrush has a wooden handle and bristles attached to the end." + ], + "painting": [ + "A painting is a piece of art that is made with a brush and paint.", + "A painting is a piece of art that is made with a brush and paint.", + "A painting looks like a piece of art that has been created using a brush and paint.", + "A painting looks like a piece of art that has been created using paint.", + "A painting looks like a piece of art that has been created using paint.", + "A painting is a piece of art that is created by a painter.", + "A painting looks like a piece of art that someone has drawn or painted on a piece of paper or canvas.", + "A painting is a piece of art that is made with a brush and paint.", + "A painting is a piece of art that is created by using a brush to apply paint to a canvas.", + "A painting can look like many different things." + ], + "pajamas": [ + "Pajamas are a type of clothing worn to bed.", + "A pajamas typically consists of a loose-fitting shirt and pants/shorts.", + "A pair of pajamas typically consists of a top and a bottom.", + "A pajamas typically looks like a loose fitting shirt and pants combo made from soft materials such as cotton.", + "Pajamas are an article of clothing worn to bed.", + "A typical pair of pajamas consists of a shirt and pants, but there are many variations.", + "A pajama typically consists of loose-fitting pants or shorts and a matching top.", + "Pajamas are typically loose-fitting clothes that are intended to be worn while sleeping.", + "Pajamas are typically loose fitting clothes that are designed to be comfortable to wear in bed.", + "A pajamas is a set of loose-fitting clothes worn for sleeping or lounging." + ], + "palette": [ + "A palette is a cardboard or plastic tray with several small wells that contain paint colors.", + "A palette is a thin board or slab on which an artist arranges and mixes paints.", + "A palette is a flat surface on which paint or other medium can be mixed.", + "A palette is a perforated metal plate with a raised edge, used for holding and mixing colors.", + "A palette is a rectangular board with a hole in the middle for the artist's hand.", + "A palette is a board with wells or depressions for holding paints, pigments, or inks, used by an artist.", + "A palette starts with a basic color scheme, typically three colors.", + "A palette is a small, hand-held case with a flip-top lid.", + "A palette is a selection of colors used in a painting or other work of art.", + "It's a tool for choosing colors! It has a bunch of different colored squares that you can pick from." + ], + "pan (for cooking)": [ + "A pan for cooking is a flat-bottomed metal cooking utensil that is used on a stovetop.", + "A pan has a flat base and flared sides and is used for cooking food in a small amount of fat over direct heat.", + "A pan is usually a metal or ceramic cooking vessel with a flat bottom and sides that are sometimes sloped.", + "A pan is a typically metal, concave vessel used for cooking.", + "A pan is a flat-bottomed cooking vessel that has sides that slope up to a lip.", + "A pan is a metal or ceramic cooking vessel with a flat bottom and sides that are usually taller than they are wide.", + "Most pans have a flat base and vertical sides.", + "A pan is a flat-bottomed cooking vessel that has sides that are slightly sloping.", + "A cooking pan is a flat-bottomed vessel that is used for frying, saut\u00e9ing, and other methods of cooking.", + "A pan looks like a metal or ceramic dish with a flat base and sloped sides that is used for cooking." + ], + "pan (metal container)": [ + "A pan is a metal container with a flat bottom and sides that slope up to a lip.", + "A pan is typically a flat, circular metal container with a lip that is used to hold food during cooking.", + "A metal pan is a flat-bottomed container that is often used for cooking.", + "A nice metal pan has a smooth surface, flared sides, and a flat bottom with an indented center.", + "A metal pan has a flat bottom and sides that come up at a 90 degree angle.", + "A pan is a metal container that has a flat bottom and flared sides.", + "A pan is a metal container that is typically round or oval in shape with a handle.", + "A pan is a metal container that usually has a handle and a flat bottom.", + "A metal pan has a flat bottom and sides that come up at a 90 degree angle.", + "A pan is a container with a flat bottom and straight sides that is used for cooking." + ], + "pancake": [ + "A pancake is a round, flat cake made from a batter and cooked on a hot griddle or frying pan.", + "A pancake is a round, flat cake made from a batter and cooked on a hot griddle or frying pan.", + "A pancake is a flat, round cake that is cooked on a hot surface such as a griddle or frying pan.", + "A pancake is a round, flat cake that is cooked on a hot surface, such as a griddle or frying pan, and is often flipped during cooking so that both sides are cooked evenly.", + "A pancake is a flat, round cake that is cooked on a hot griddle or in a frying pan.", + "A pancake is a thin, flat cake made of batter and fried in a frying pan.", + "A pancake looks like a flat, round cake made from a batter and cooked on a hot griddle or frying pan.", + "A pancake is round and flat, like a disc.", + "A pancake is a flat, round cake that is cooked in a frying pan.", + "A pancake looks like a round, flat cake that is cooked on a griddle or in a frying pan." + ], + "pantyhose": [ + "A pantyhose typically consists of a pair of leggings made of nylon or other synthetic fibers that fit snugly from the waist to the feet, with a reinforced toe and a gusset at the crotch.", + "Pantyhose are a type of women's hosiery that cover the legs and feet.", + "Pantyhose are a type of close-fitting apparel that cover the legs and feet.", + "A typical pantyhose is made from a blend of nylon and Lycra/spandex, and are available in a wide range of colors.", + "A pantyhose is a close-fitting pair of nylon stockings that covers the body from the waist to the toes.", + "A pair of pantyhose is a close-fitting, elastic garment that is typically worn by women.", + "Pantyhose are a type of close-fitting apparel that are typically worn by women.", + "A pair of pantyhose is made from a very sheer material and usually has a cotton crotch.", + "A pantyhose is a close-fitting, often sheer garment that is traditionally worn by women.", + "They are a close-fitting garment made of stretchy fabric, typically nylon, that covers the body from the waist to the toes." + ], + "papaya": [ + "Papayas are typically pear-shaped with rounded ends and a large central cavity filled with small black seeds.", + "A papaya looks like an oval-shaped fruit with a smooth, yellow-orange exterior and a soft, pink-orange interior.", + "A papaya is a fruit that typically has a yellow or orange outer skin and soft, orange flesh on the inside.", + "A papaya is a pear-shaped fruit with a smooth, dark green skin.", + "A papaya looks like a large pear with green or yellow skin.", + "A papaya is a fruit that is pear-shaped with a smooth skin that is yellow, orange, or pink when ripe.", + "A papaya is a fruit that is shaped like a pear, with a greenish-yellow exterior and orange flesh on the inside.", + "A papaya is an elongated pear-shaped fruit with a yellow-orange or pink-orange flesh and a large central seed cavity.", + "A papaya is a fruit that is torpedo-shaped and typically has a green skin that turns yellow or orange as it ripens.", + "A papaya looks like an elongated pear with a light green to yellow skin." + ], + "paper plate": [ + "A paper plate is typically round, has a slightly raised rim, and is made of cardboard or paper.", + "A paper plate is flat, white, and circular.", + "A paper plate is typically round, white, and made of paper.", + "A paper plate is a round plate usually made out of paper or Styrofoam.", + "A paper plate typically has a slightly raised edge to help prevent spills, and is composed of paper pulp.", + "A paper plate is a round plate that is typically white or off-white in color.", + "A paper plate is a flat, disc-shaped plate made out of paper.", + "A paper plate looks like a circular piece of paper with a raised edge.", + "A paper plate is a round, flat disc made of paper.", + "A paper plate is a flat, circular piece of paper that is typically used to hold food." + ], + "paper towel": [ + "A paper towel is a thin napkin made of paper, usually used for wiping up spills.", + "A paper towel is a thin sheet of paper that is used to dry surfaces or absorb spills.", + "A paper towel is a piece of paper that is used to dry your hands or clean up spills.", + "A paper towel is a disposable towel made from paper, usually from recycled paper pulp.", + "A paper towel is a thin sheet of paper that is used to absorb liquid.", + "Paper towels vary in size, but they are typically around 11 inches long and 8 inches wide.", + "A paper towel is a thin paper sheet that is used to dry surfaces or absorb spills.", + "A paper towel is a thin piece of paper that is absorbent and used to clean up messes.", + "A paper towel is a thin napkin made of paper, usually dispensed from a roll, and used once to wipe the hands or surfaces.", + "A paper towel looks like a piece of absorbent paper that is used to dry hands, clean surfaces, or soak up spills." + ], + "paperback book": [ + "A paperback book typically has a soft cover and is held together with staples or glued bindings.", + "A paperback book has a soft cover and is smaller and thinner than a hardcover book.", + "Paperback books are smaller and thinner than hardcover books.", + "A paperback book typically has a soft cover and is smaller and thinner than a hardcover book.", + "A paperback book has a flexible cover made of paper, and the pages are held together with staples or adhesive.", + "A paperback book usually has a soft cover and is smaller and lighter than a hardcover book.", + "A paperback book has a soft, flexible cover and pages that are held together with staples or glue.", + "A paperback book typically has a soft cover and is smaller and more flexible than a hardcover book.", + "A paperback book is a book that has a softcover, as opposed to a hardcover book.", + "A paperback book is a book with a soft cover." + ], + "paperweight": [ + "A paperweight is usually a small, solid object that is used to hold down papers or other light objects.", + "A paperweight is a small, heavy object that is placed on top of loose papers to prevent them from blowing away in the wind.", + "Most paperweights are round, and made of glass.", + "A paperweight is a small, heavy object that is used to hold down papers or other light objects.", + "A paperweight is a small, flat object that is used to hold down paper or other materials to a surface.", + "A paperweight is usually a small, heavy object that is used to hold down papers or other light objects.", + "A paperweight is a small, heavy object that is used to hold down paper or other light materials such as paper bills.", + "A paperweight is a small, heavy object that is placed on top of loose papers to keep them from blowing away or being scattered.", + "A paperweight is a small, heavy object that is used to hold down paper or other light materials.", + "A paperweight typically looks like a smooth, round stone." + ], + "parachute": [ + "A parachute is a device that is used to slow the descent of an object through the air by creating drag, or air resistance.", + "A parachute is a large, baggy canopy made of fabric.", + "A parachute is typically a cone or dome shaped device made from light weight fabric.", + "A parachute is typically a cone- or dome-shaped fabric device used to slow the descent of an object through the atmosphere.", + "A parachute typically has a large canopy made of a light, sturdy fabric such as nylon.", + "A parachute is a large fabric canopy that is attached to a person or object to slow down its fall.", + "A parachute is a fabric device used to slow the descent of an object through the air.", + "A parachute typically consists of a large, slightly triangular sheet of strong fabric with cord running along the edges.", + "A parachute is a device used to slow the descent of an object through the atmosphere by creating drag, or air resistance.", + "A parachute is a device used to slow the falling speed of an object through the air." + ], + "parakeet": [ + "A parakeet is a small, long-tailed bird with brightly colored plumage.", + "A parakeet is a small, colorful tropical bird.", + "A parakeet looks like a small, green bird with a long tail.", + "A parakeet is a small, tropical bird.", + "The parakeet is a small, sprightly green and yellow bird.", + "Parakeets are small, brightly colored birds.", + "A parakeet is a small, active, inquisitive member of the parrot family.", + "A parakeet is a small, short-tailed, long-necked bird.", + "A parakeet is a small, brightly colored tropical bird.", + "Parakeets have small, compact bodies and long tails." + ], + "parasail (sports)": [ + "A parasail is a rectangular piece of fabric with strings attached to it that is attached to a harness.", + "A parasail is a canopy that is attached to a person by a harness.", + "A parasail (sports) is a sailboat with a motor attached to the back.", + "A parasail is a large, cone-shaped sheet that is attached to a long rope.", + "A parasail is a small, lightweight aircraft that is towed behind a boat.", + "A parasail is a small, lightweight parachute designed to be towed behind a boat or other vehicle.", + "A parasail is a small, lightweight parachute that is attached to a person by cords and pulled behind a boat or other vehicle.", + "A parasail is a special parachute that is designed to be towed behind a boat or other vehicle.", + "A parasail is a triangular canopy, typically made of nylon, that is attached to a harness.", + "It looks like a large kite, or wing, with a harness attached to it." + ], + "parasol": [ + "A parasol is a handheld umbrella that is used to block the sun.", + "A parasol is a portable canopy that is used to protect against the sun's rays.", + "A parasol is a handheld umbrella that is used to shade someone from the sun.", + "A parasol is a handheld umbrella that is used for shade.", + "A parasol is a local, point-like, vector field that is tangent to the surface of a sphere at a single point, and is constant in magnitude and direction at that point.", + "A parasol is a small, handheld umbrella.", + "A parasol is a small, handheld umbrella.", + "A parasol is a portable umbrella that can be used to provide shade from the sun.", + "A parasol is a small, handheld umbrella.", + "A parasol is a handheld umbrella that is used for sun protection." + ], + "parchment": [ + "A parchment appears as a sheet of dry, yellowed skin, often with writing on it.", + "A parchment is an animal skin that has been prepared for use as a writing surface.", + "A parchment looks like a piece of paper, but it is made from animal skin.", + "Parchment is an off-white, tan, or light yellow color.", + "A parchment is a type of paper that is made from animal skin.", + "A parchment is a dry, delicate sheet of paper that is used for writing.", + "A parchment looks like a large, flattened sheet of paper.", + "A parchment is a type of paper that is made from animal skin, usually sheepskin.", + "A parchment looks like a beautifully bound document with usually gold lettering on the cover.", + "A parchment typically looks like a sheet of off-white or tan colored paper that has a slightly yellowish hue." + ], + "parka": [ + "A parka is a type of coat that is typically knee-length or longer, has a hood, and is insulated.", + "A parka is a type of coat that is typically knee-length or longer, has a hood, and is insulated.", + "A parka is a long, hooded coat made of a waterproof or water-resistant material.", + "A parka is a type of coat with a hood, typically made of fur, feathers, or a synthetic material, that is worn in cold weather.", + "A parka is a type of coat that is typically knee-length or longer, has a hood, and is insulated.", + "A parka is a long, often knee-length, coat with a fur-lined hood.", + "A parka has a large hood, and is usually waist-length or longer.", + "A parka is a type of coat designed to keep the wearer warm in cold weather.", + "A parka typically has a fur-lined hood, and is designed to keep the wearer warm in cold weather.", + "A parka is a long, warm coat that covers the whole body, typically down to the thighs." + ], + "parking meter": [ + "A parking meter is a machine that people use to pay for parking.", + "A parking meter is a tall, vertical, metal box.", + "A parking meter is a machine that is used to collect money in exchange for the use of a parking space.", + "A parking meter is a machine that is installed on the side of a road near a parking space.", + "A parking meter typically has a metal pole emerging from a concrete base.", + "A parking meter is a tall, thin, blue or green machine that either requires you to insert money or use a credit card in order to park your car in a specific spot.", + "A parking meter typically has a vertical pole, with a digital or analog display on the top, and a slot for coins on the bottom.", + "Assuming you are referring to a modern parking meter, they are generally tall, thin, cylindrical, and made of metal.", + "A parking meter is a yellow or silver pole with a handle on the side and a coin slot on the top.", + "A parking meter is a tall, thin box with a coin slot on the top and a handle on the side." + ], + "parrot": [ + "A parrot is a brightly colored bird with a long tail.", + "A parrot is a brightly colored bird with a long tail.", + "A parrot has colorful feathers, a long curved beak, and two clawed feet.", + "A parrot is a brightly colored bird with a long curved beak.", + "A parrot is a brightly colored bird with a long tail.", + ".", + "A parrot is a colorful bird with a hooked beak.", + "A parrot is a tropical bird with brightly colored feathers.", + "A parrot is a brightly colored bird with a long tail.", + "A parrot typically has brightly colored plumage." + ], + "passenger car (part of a train)": [ + "A passenger car is typically a long, rectangular metal car with large windows.", + "A passenger car is a long, rectangular metal box on wheels.", + "Passenger cars are typically long and narrow, with many windows along the sides.", + "A passenger car has large windows that allow riders to see outside.", + "A passenger car is typically a long, rectangular object with many windows along the sides.", + "A passenger car is a long, rectangular car that is used to transport people.", + "Has wheels and is long.", + "A passenger car is a long, rectangular car that is attached to the rest of the train.", + "A passenger car is a long, rectangular metal box on wheels.", + "A passenger car is a car that carries passengers." + ], + "passenger ship": [ + "A passenger ship looks like a large boat with many rooms for passengers to sleep in.", + ".", + "A passenger ship is typically large, with many decks and a lot of public spaces.", + "The exterior of a passenger ship typically includes a large sundeck with lounge chairs and pools, multiple dining areas and bars, a spa and fitness center, and cabins of varying sizes to accommodate guests.", + "passenger ships vary in size and shape, but typically they are large enough to carry hundreds or even thousands of passengers and their luggage.", + "The size, shape, and design of passenger ships vary depending on the purpose of the vessel.", + "A passenger ship is a large ship that carries people and their belongings on a journey.", + "A passenger ship can be any size, but typically they are large with many decks.", + "A passenger ship looks like a large and luxurious cruise ship with many amenities and activities for passengers to enjoy.", + "A passenger ship is typically a large ship that is used to transport people from one place to another." + ], + "passport": [ + "A passport is a small book with a cover that is usually blue, red, or black.", + "A passport is generally a small, thin booklet with a maroon cover.", + "A passport is a small book with a dark blue cover.", + "A passport is a booklet that is usually dark blue or black.", + "Generally, a passport is rectangular and has a burgundy cover.", + "A passport is a booklet that is typically blue or black.", + "A passport is a book with a hardcover and blue pages inside.", + "A passport has a dark blue cover with the word \"passport\" in gold lettering.", + "A passport is a small booklet that has a dark blue cover.", + "." + ], + "pastry": [ + "A pastry is a baked good that is made with flour, sugar, and fat.", + "Pastries are small, sweet, and often fried desserts that are made from dough.", + "A pastry is a sweet baked food made from flour, milk, and fat.", + "A pastry is a type of food that is made from dough that is rolled out and then cut into shapes.", + "A pastry looks like a light, flaky, dough that is often used to make pies and other desserts.", + "A pastry is a sweet food made from dough that is rolled flat and cut into shapes.", + "A typical pastry is composed of flour, butter, salt, and water.", + "A pastry is a baker's confection that is made from dough that is rolled out and then cut into shapes.", + "A pastry is a baked good that is made with flour, butter, eggs, and sugar.", + "A pastry is a sweet or savory food that is made with dough that is rolled out and then cut or shaped into different forms." + ], + "patty (food)": [ + "A patty is a small, flat, round cake of minced food, typically meat or vegetables.", + "A patty is a small, thin, flat cake made of ground meat, fish, or vegetables.", + "A patty is a flattened, usually oval-shaped piece of ground meat, such as beef, chicken, pork, or lamb, that is cooked by frying, grilling, or baking.", + "A patty is a flat, round piece of food.", + "A patty, or a hamburger patty, is a disk of ground meat, usually beef, that is flat, round, and grilled.", + "A patty is typically a disk of ground meat that has been shaped into a flat, round shape.", + "A patty is a flat, round piece of food, typically made from meat, vegetables, or fish.", + "A patty is a flattened round of ground meat, typically beef, that is fried or grilled.", + "A patty is a flat, round piece of food, usually made from meat or vegetables.", + "A patty is a flattened, usually round, piece of food." + ], + "pea (food)": [ + "A pea is a small, round, greenish-yellow fruit that grows in pods on a vine.", + "A pea is a small, round, green vegetable.", + "A pea is a small, green, round vegetable.", + "A pea is a small, green, spherical vegetable that is typically eaten whole.", + "Typical peas are round and green.", + "A pea is a small, round, green vegetable.", + "A pea is a small, green, spherical legume that is typically eaten as a vegetable.", + "A pea is a small, round, green seed that is encased in a thin shell.", + "A pea is a small, round, greenish-yellow seed that is encased in a thin shell.", + "A pea is a small green fruit that grows on a vine." + ], + "peach": [ + "A peach typically has a red and yellow outer skin that is fuzzy.", + "A peach is a small, round fruit with a thin skin that is either yellow, white, or pink in color.", + "A peach is a smooth, round fruit with a thin, yellowish-orange skin.", + "A peach is a small, round fruit with a smooth, velvety skin that is either yellow, pink, or red in color.", + "A peach is a round, red and yellow fruit with a stone in the middle.", + "A peach is a round, soft fruit with a fuzzy skin and a big, hard stone in the middle.", + "Sweet, fragrant, and fuzzy, peaches are a classic summer fruit.", + "A peach is typically oval or spherical in shape, with a large pit in the center.", + "A peach is a round, fleshy fruit with a smooth, yellow-orange skin.", + "A peach is small and round with a smooth, velvety skin that is yellowish-orange with a red tinge." + ], + "peanut butter": [ + "Peanut butter is a smooth, dense paste made from finely ground peanuts.", + "A peanut butter looks like a smooth, creamy, yellowish-brown paste.", + "A peanut butter looks like a brown paste that is smooth or chunky.", + "A peanut butter is a yellowish-brown paste with a smooth, oily texture.", + "A peanut butter typically has a smooth, creamy texture and may be either off-white or light brown in color, depending on the type of peanuts used and the amount of hydrogenated vegetable oil.", + "A peanut butter is a paste made from ground, raw peanuts.", + "A peanut butter looks like a creamy, thick paste that is brown in color.", + "A peanut butter looks like a smooth, creamy, and spreadable paste.", + "A peanut butter looks like a smooth, brown paste.", + "A peanut butter looks like a spreadable paste that is made from peanuts." + ], + "pear": [ + "A pear is typically pear-shaped with a rounded bottom and a tapered neck.", + "A pear is a round fruit with a tapered end.", + "A pear typically has a bulbous bottom with a narrower neck and stem.", + "A pear is an oblong shaped fruit with a smooth exterior.", + "A pear is a type of fruit that has a hard, outer skin that is green, brown, or yellow in color.", + "A pear is a round fruit that is smaller at the top and wider at the bottom.", + "A pear is a type of fruit that has a round shape and a hard, green skin.", + "A pear is a fruit that is shaped like an oval.", + "A pear is an oval or round fruit with a hard, yellowish-brown to brownish-red skin.", + "A pear typically has a round bottom with a narrow neck and a bulbous body." + ], + "peeler (tool for fruit and vegetables)": [ + "A vegetable peeler has a steel blade attached to a handle.", + "It is a handheld tool that has a cylindrical blade on one end.", + "A peeler typically has a cylindrical body with a sharp blade at one end.", + "A peeler is a small handheld tool with a metal blade that is used to peel the skin off fruits and vegetables.", + "A peeler is a kitchen tool that helps remove the skin from fruits and vegetables.", + "A peeler is a handheld tool with a sharp, serrated blade that is used to peel the skin off of fruits and vegetables.", + "A peeler is a handheld tool with a sharp, serrated blade used to remove the skin from fruit and vegetables.", + "A peeler is a tool for peeling fruit and vegetables.", + "A peeler typically has a metal blade with a small, sharp edge.", + "A peeler is a tool with a sharp blade that is used to peel the skin off of fruit and vegetables." + ], + "wooden leg": [ + "A wooden leg looks like a regular leg made out of wood.", + "A wooden leg typically has a polished wood exterior and a leather or fabric lining.", + "A wooden leg typically has a rounded top that fits against the thigh, with a more narrow calf section that tapers down to the foot.", + "A wooden leg usually has a polished wood finish and metal knee and ankle joints.", + "A wooden leg is cylindrical in shape and is about the same length as a human leg.", + "A wooden leg is a replacement for a human leg that is lost or amputated.", + "A wooden leg usually has a knee joint and an ankle joint and is wooden from the knee down.", + "A wooden leg is usually made out of a cylindrical piece of wood that is sanded down and shaped to fit the individual's limb.", + "A wooden leg has a natural wood grain finish and is fitted with a metal foot and ankle.", + "A wooden leg is a prosthetic leg made from wood." + ], + "pegboard": [ + "A pegboard is a board with pegs sticking out of it.", + "A pegboard is a board with holes in it.", + "A pegboard is a board with evenly spaced holes drilled into it.", + "A pegboard is a board with evenly spaced holes drilled into it.", + "A pegboard is a board with evenly spaced pegs sticking out of it.", + "A pegboard is a flat, usually rectangular board with evenly spaced holes drilled into it, used to hold pegs or hooks from which various objects may be hung.", + "A pegboard is a board with evenly spaced holes drilled into it.", + "A pegboard is a sheet of wood, metal, or plastic with evenly spaced holes drilled into it.", + "A pegboard is a board with evenly spaced holes drilled into it.", + "A pegboard is a piece of wood, plastic, or metal board with a series of evenly spaced holes drilled into it." + ], + "pelican": [ + "A pelican has white feathers, a long beak, and webbed feet.", + "A pelican looks like a bird with a very large bill.", + "A pelican is a waterbird with a large beak and a large throat pouch.", + "A pelican is a water bird with a large beak and a long neck.", + "A pelican is a large, white bird with a long neck, a big bill, and big webbed feet.", + "Pelicans are large water birds with a long beak and large throat pouch.", + "A pelican is a large water bird with a long beak and a large throat pouch.", + "A pelican is a large seabird with a long bill and large webbed feet.", + "A pelican is a large white bird with a long necks and large bill.", + "A pelican is a large, long-necked waterbird with a big bill." + ], + "pen": [ + "A pen typically has a cylindrical body made of plastic or metal, with a scroll at one end that allows the user to manually extend or retract the pen's nib.", + "A pen is a long, thin cylinders with a small, pointed tip at one end and a small ink reservoir at the other.", + "A pen is typically a cylindrical object with a pointed end that is used to write with ink.", + "A pen oftentimes has a cylindrical body with a pointed tip that dispenses ink.", + "A pen typically has a cylindrical body with a pointed end, used for writing or drawing.", + "A pen is a thin cylindrical object used to write.", + "A pen typically has a cylindrical body made of plastic or metal, with a piece of absorbent material, called a wick, near one end.", + "A pen is thin and long with a point on one end and a black ink cartridge inside.", + "A pen is a cylinder-shaped writing instrument.", + "A pen is a writing instrument that has a cylindrical body and a pointed tip." + ], + "pencil": [ + "A pencil is a thin cylindrical object made of wood, with a small, pointed piece of lead inside.", + "A pencil is a thin cylindrical rod of pigment, usually graphite, encased in wood.", + "A pencil is typically long and thin with a pointed tip.", + ".", + "A pencil is a thin cylindrical piece of wood with a small piece of lead inside of it.", + "A pencil has a pointed end and a flat end.", + "A pencil is a thin stick of wood with a pointed end and a graphite core.", + "A pencil is usually a cylindrical object made of wood.", + "Most pencils have a cylindrical shape and are usually made of wood.", + "A pencil is a long, thin, cylindrical object made of wood or plastic." + ], + "pencil box": [ + "The box is typically rectangular and made of cardboard.", + "A pencil box is a small box that is used to hold pencils.", + "A pencil box is a small, rectangular box that is used to store pencils.", + "Most pencil boxes are rectangular in shape and have a lid that opens up.", + "A pencil box typically looks like a small, rectangular box with a lid.", + "A pencil box is typically a small, rectangular container used to hold pencils, pens, and other small stationary items.", + "A pencil box is a small, rectangular box that is used to store pencils.", + "A pencil box is typically a small, rectangular container that is used to hold pens, pencils, erasers, and other small items used for writing.", + "A pencil box is a small, often rectangular box used to store pencils and other small stationery items.", + "A pencil box is a small container that is used to store pencils." + ], + "pencil sharpener": [ + "A pencil sharpener is a cylindrical object with a hole in the top.", + "A pencil sharpener is a tool that is used to sharpen pencils by grinding away the wood and lead to create a pointed tip.", + "Most pencil sharpeners are small, handheld devices with a blade that sharpens the pencil when it is turned.", + "Write a description of a pencil sharpener.", + "A pencil sharpener is usually a small handheld device with a cylindrical hole in the middle.", + "A pencil sharpener is typically a small, handheld device with a cylindrical hole in the center.", + "A pencil sharpener is a small cylindrical device with a hole in the center.", + "A pencil sharpener is a tool that is used to sharpen pencils.", + "A pencil sharpener is a small handheld device with a hole in the top and a blade inside.", + "A pencil sharpener is a small manual device that is used to sharpen pencils." + ], + "pendulum": [ + "A pendulum is a weight suspended from a pivot point.", + "A pendulum is a weight suspended from a fixed point that swings freely back and forth under the influence of gravity.", + "A pendulum is a weight suspended from a pivot so that it can swing freely.", + "A pendulum is typically a weight, or \"bob,\" suspended from a cord or chain.", + "A pendulum consists of a weight, called a bob, suspended from a cord or chain.", + "A pendulum is usually a weight, called a bob, suspended from a cord or chain.", + "A pendulum is a weight suspended from a pivot so that it can swing freely.", + "A pendulum consists of a weighted object suspended from a fixed point.", + "A pendulum consists of a weight, or \"bob,\" suspended from a cord or metal rod.", + "A pendulum is a weight suspended from a pivot point." + ], + "penguin": [ + "Penguins are small, black and white birds that live in cold environments.", + "A penguin is a black and white bird that lives in cold places like Antarctica.", + "A penguin is a black and white bird that lives in the Southern Hemisphere.", + "A penguin is a bird with a black and white coat.", + "A penguin is a flightless bird with a black back and white belly.", + "Most penguins are black and white.", + "Description of a penguin: a penguin is a black and white bird that lives in the southern hemisphere.", + "A penguin is a black-and-white bird that is about two feet tall.", + "A penguin is an aquatic bird with a streamlined body, flippers for wings, and webbed feet.", + "A penguin has a black back and white front." + ], + "pennant": [ + "A pennant is a ceremonial flag that is used to signify important events.", + "\nA pennant shape is made by two triangles placed point-down and attached at the apex (top point).", + "A pennant is a triangular-shaped flag that is typically hung from a rope or pole.", + "A pennant is a triangular-shaped flag that is typically hung from a pole.", + "It is a triangle-shaped flag that is hung from a pole.", + "A pennant is a pointed, flag-like piece of fabric that is hung from a pole.", + "A pennant is a triangular shaped flag that is typically hung from a rope or mast.", + "A pennant is typically a long, narrow, tapering flag that is flown by ships at sea, and by sports teams and other organizations.", + "A pennant is a flag that is triangular in shape, with a long end and two shorter ends.", + "A pennant is a triangular-shaped flag that is typically hung from a pole." + ], + "penny (coin)": [ + "A penny is a small, thin coin with a smooth, flat surface.", + "A penny is a circular coin with a head on one side and a tail on the other.", + "The US one cent coin, also called a penny, has a diameter of 19mm and a mass of 2.", + "A penny is a circular coin with a hole in the middle.", + "One side of a penny has the image of Abraham Lincoln and the words \"In God We Trust.", + "A penny (coin) is a small, round, copper-colored coin.", + "A penny is a small, round coin with a smooth surface.", + "It is a small, round coin with a smooth surface.", + "A penny (coin) is a small, round, copper-colored coin.", + "A penny (coin) is a small, round, copper-colored piece of metal with Abraham Lincoln's head on one side and the words \"In God We Trust\" on the other." + ], + "pepper": [ + "A pepper is a small, hot, spicy fruit.", + "Most peppers are small, brightly colored, and have a pointed end.", + "A pepper looks like a small, tubular, green fruit with a pointed end.", + "A pepper is an edible fruit that is typically red, yellow, or green in color.", + "A pepper is a small, fleshy fruit that is usually red, yellow, or green in color.", + "A pepper is a small, narrow, and pointy fruit that typically has a red, orange, or yellow color.", + "A pepper is a small, hot, and often red fruit that is used as a spice.", + "A pepper is a small, round, colorful fruit with a thin skin.", + "A pepper is a small, cone-shaped fruit with smooth, shiny skin.", + "A pepper typically looks like a small, elongated fruit with a dull, leathery skin." + ], + "pepper mill": [ + "Most pepper mills are cylindrical and made of wood.", + "A pepper mill typically looks like a small, cylindrical container with a handle on one end and a grinder on the other.", + "A pepper mill is a small, hand-held kitchen tool used to grind dried peppercorns into fresh pepper.", + "A pepper mill is a small, usually cylindrical device used to grind dried peppercorns into pepper.", + "Most pepper mills are about the same size as a salt shaker.", + "\nA pepper mill is a small, hand-held device used to grind peppercorns into a fine powder.", + "A pepper mill is a kitchen implement that is used to grind up whole peppercorns into a fine powder.", + "A pepper mill is a cylindrical device used to grind peppercorns.", + "A pepper mill is a small, cylindrical device used to grind pepper corns.", + "A pepper mill is a tall cylindrical device that has a crank on the top." + ], + "perfume": [ + "A perfume bottle is typically made of glass and has a small nozzle that dispenses the perfume.", + "A perfume is typically a clear or colored liquid that is housed in a small glass bottle with a spray applicator.", + "A perfume is a clear liquid with a strong, sweet smell.", + "A perfume can be a clear, pale yellow liquid or a thick, dark brown syrup.", + "A perfume has a glass bottle with a spray top.", + "A perfume is a clear liquid with a strong, sweet smell.", + "A perfume typically comes in a small glass bottle and has a curved neck that narrows at the top.", + "The color of a perfume can range from clear to deep amber, depending on the ingredients used.", + "A perfume has a glass bottle with a spray nozzle.", + "A perfume typically has a clear or pale yellow liquid." + ], + "persimmon": [ + "A persimmon is an orange fruit that is about the size of a tomato.", + "A persimmon is a small, spherical fruit that is orange or red in color.", + "A persimmon is a small, round fruit that is orange or red in color.", + "A persimmon is an orange, spherical fruit with a glossy skin and flesh that ranges in color from yellow-orange to red-orange.", + "A persimmon is an edible fruit that grows on the Persimmon tree.", + "A persimmon is an orange fruit that grows on a tree.", + "A persimmon is a small, round, reddish-orange fruit.", + "A persimmon is an orange fruit with a pointed end.", + "A persimmon is a small, orange fruit that has a thin skin and a soft, sweet flesh.", + "A persimmon is small, reddish-orange fruit." + ], + "person": [ + "This person has dark hair, light eyes, and a medium complexion.", + "There is no one answer to this question as people come in all shapes and sizes.", + "This person has long, curly hair and brown eyes.", + "This person has dark brown hair and brown eyes.", + "A person looks like a human being with arms, legs, a head, and a body.", + "A person has a head, a body, and limbs.", + "A person typically has two arms, two legs, a head, and a torso.", + "\">A person looks like a human being with a head, a torso, two arms, and two legs.", + "A person looks like a human being with a head, a body, and two arms and legs.", + "\nThey have a round face, hazel eyes, and a small nose." + ], + "pet": [ + "A pet is an animal kept by a person for company, amusement, or other purposes.", + "This is a difficult question because there are so many different types of pets.", + "A typical pet is a mammal that is kept by humans for companionship and enjoyment.", + "A pet is an animal that is kept as a companion by humans.", + "A pet is typically an animal that is kept by a person for companionship or as a symbol of that person's status.", + "A pet is an animal that is kept by a person for companionship or pleasure.", + "A pet is an animal kept for companionship or enjoyment.", + "A pet is an animal that is kept by a person for companionship or pleasure.", + "A pet is a furry little animal that you can hold in your arms.", + "A pet looks like an animal that you take care of." + ], + "pew (church bench)": [ + "A pew (church bench) is a long, wooden bench with a backrest that is placed in a church.", + "A pew is a wooden bench that is often used in churches.", + "Pews are typically long benches with backs and arm rests.", + "A pew is typically a long wooden bench with a backrest that is found in a church.", + "A pew is a bench that is usually found in a church.", + "A pew is typically a long, wooden bench with a backrest that is placed in a church.", + "Pews are typically long benches that are placed in the main seating area of a church.", + "A pew is a long bench that runs along the walls of a church.", + "A pew is long bench that is placed in church rows.", + "Pews are long benches with hard, wooden seats and backs." + ], + "phonebook": [ + "A phonebook looks like a small book with alphabetical listings of all the people in a particular area who have a telephone.", + "A phonebook is a small book that lists the names and phone numbers of people in a particular area.", + "A phonebook is a book that contains a list of people's names, addresses, and phone numbers.", + "A phonebook is a book with a list of people's names, addresses, and phone numbers.", + "A phonebook is a book that lists the names, addresses, and phone numbers of people in a community.", + "A phonebook typically contains the name, address, and phone number of people and businesses.", + "A phonebook typically contains a list of names, addresses, and phone numbers.", + "A phonebook is a small book that contains the names, addresses, and phone numbers of people in a certain area.", + ".", + "Most phonebooks are organized alphabetically by last name." + ], + "phonograph record": [ + "A phonograph record is a disc with a spiral groove cut into the surface.", + "A phonograph record is a circular disc with a spiral groove cut into the surface.", + "A phonograph record consists of a flat disc with an inscribed, modulated spiral groove starting near the periphery and ending near the center of the disc.", + "A phonograph record is a thin disc with an inscribed, modulated spiral groove starting near the periphery and ending near the center of the disc.", + "A phonograph record is a spinning disc that has a spiral groove cut into it.", + "A phonograph record is a thin disc made of vinyl that is played on a turntable.", + "A phonograph record is a disc with a spiral groove cut into it, which is used to reproduce sounds by means of a phonograph.", + "A phonograph record is a thin disc of vinyl with spiral grooves cut into it.", + "A phonograph record is a circular piece of plastic with a spiral groove cut into it.", + "A phonograph record is circular and has a spiral groove carved into the surface." + ], + "piano": [ + "A piano has black and white keys arranged in a rectangular fashion.", + "A piano typically has a polished wooden exterior with a flat top surface that opens up to reveal a set of keys.", + "A piano has a black and white keyboard with 88 keys.", + "A piano is a large, black musical instrument with a white and black keyboard.", + "A piano typically has 88 black and white keys.", + "A piano typically has a long, flat body with a keyboard on the front.", + "A piano is a large musical instrument with a flat surface and a keyboard.", + "A piano has a long, white body with a keyboard on the front.", + "A piano has usually 88 black and white keys, six pedals, and a padded bench.", + "A piano is a large, rectangular musical instrument with a flat surface on which the keys are played." + ], + "pickle": [ + "A pickle is a cucumber that has been soaked in a vinegar or brine solution.", + "A pickle is a cucumber that has been soaked in vinegar or brine.", + "A pickle looks like a cucumber that has been preserved in a vinegar or brine solution.", + "A pickle is a small cucumber that has been preserved in vinegar and spices.", + "A pickle is a cucumber that has been preserved in a vinegar or brine solution.", + "A pickle is a cucumber that has been soaked in brine (water, vinegar, and salt) mixed with spices.", + "A pickle looks like a cucumber that has been soaked in brine (water, vinegar, and salt) mixed with spices.", + "A pickle looks like a small cucumber that has been soaked in brine (water, vinegar, and salt).", + "A pickle is a cucumber that has been soaked in a brine (salt water) solution and then sealed in a jar or container.", + "A pickle is a cucumber that has been preserved in vinegar and spices." + ], + "pickup truck": [ + "A pickup truck is a type of vehicle that typically has a cabin in the front and an open bed in the back.", + "A pickup truck is a vehicle with a bed in the back that is used for carrying cargo.", + "A pickup truck typically has a large cabin and a payload area in the back that is enclosed by a metal or composite barrier.", + "A pickup truck is a light duty truck that has an open-top cargo area in the back.", + "A pickup truck has four wheels and a large, open bed in the back for carrying cargo.", + "A pickup truck is a vehicle that typically has four wheels and two seats.", + "A pickup truck is a vehicle with an open-top back end that is used for carrying goods.", + "A pickup truck is a light duty truck with an enclosed cab and an open bed in the back.", + "A pickup truck typically has four doors, a front bench seat, and a rear cargo area.", + "A pickup truck is a vehicle with an enclosed cab and an open bed." + ], + "pie": [ + "A pie is a round, baked pastry with a flaky crust and a sweet or savory filling.", + "A pie is circular in shape and has a base made of pastry.", + "Traditionally, pies are round and have two crusts, top and bottom, with the filling in between.", + "A pie is a type of dessert that consists of a crust and a filling.", + "A pie looks like a round, flat, pastry dough that is filled with a sweet or savory filling and then baked in an oven.", + "A pie is often circular, with a crust on the outside and filling on the inside.", + "A pie is a type of pastry that is typically round, has a flaky crust, and is filled with a sweet or savory filling.", + "A pie has a crispy, flaky crust and is filled with a sweet or savory filling.", + "A pie is a baked dish which is usually made from a pastry dough casing that contains a filling of various sweet or savoury ingredients.", + "A pie is a rounds, flat, disk-shaped pastry that is baked and typically has a flaky or puff pastry crust." + ], + "pigeon": [ + "Pigeons are fairly large birds, with a typical length around 15 inches.", + "A pigeon is a grey and white bird with a long body and a short neck.", + "A pigeon is a plump, medium-sized bird with a short neck, short legs, and a rounded body.", + "A pigeon is a bird with a stout body, short legs, and a short beak.", + "A pigeon has a short, stout body and short legs.", + "Pigeons are medium-sized birds with plump bodies and short necks.", + "Pigeons are small, gray birds.", + "A pigeon is a bird with a round body and a short neck.", + "A pigeon has a short, rounded head, a short beak, and stout body.", + "Pigeons are plump birds with short necks and short, stout legs." + ], + "piggy bank": [ + "A piggy bank is a container,usually made out of ceramic or plastic, in which people save money.", + "A traditional piggy bank is shaped like a pig, and has a slot in the top for coins.", + "A piggy bank is a container, often made of ceramic or porcelain, used to store small amounts of money.", + "A piggy bank is a ceramic or glass jar in the shape of a pig.", + "A piggy bank is usually a small, ceramic container in the shape of a pig.", + "Typically, a piggy bank is a ceramic or plastic container in the shape of a pig.", + "A piggy bank is a container, traditionally made of ceramic or porcelain, used to hold savings.", + "It is a ceramic container in the shape of a pig.", + "A piggy bank is usually a ceramic container in the shape of a pig.", + "A piggy bank is usually a container in the shape of a pig." + ], + "pillow": [ + "A pillow typically looks like a rectangular or square-shaped piece of soft material, such as cloth or foam, that is used to support the head while sleeping.", + "A pillow is typically a rectangular or square-shaped object, filled with soft material such as down, feathers, memory foam, or polyester fiber.", + "A pillow is a piece of soft material that is used to support the head when a person is sleeping in a bed.", + "A pillow is a soft bag filled with air, feathers, down, or a synthetic fiber such as kapok.", + "A pillow is a piece of soft material, often stuffed with down, feathers, foam, or other soft material, that is used to support the head during sleep.", + "A pillow is a soft, flat object that is used to support the head while sleeping.", + "A pillow is a piece of cloth or other material that is used to support the head or neck when a person is lying down.", + "A pillow is a type of bedding that is used to sleep on.", + "A pillow is typically a small, rectangular object that is used to support the head while sleeping.", + "A pillow is a piece of soft material that is used to support the head when lying down." + ], + "pin (non jewelry)": [ + "A pin is a small, thin, pointed piece of metal or wood that is used to fasten things together or to hold something in place.", + "A pin is a small, thin piece of metal with a sharp point at one end and a round head at the other.", + "A small, thin, pointed piece of metal with a sharp end and a flat end.", + "A pin is a small, thin, pointed piece of metal with a sharpened end that is used to fasten two pieces of fabric together.", + "A metal or plastic rod with a pointed end and a flat head, used to fasten a garment to the body.", + "Apin is a thin metal with a sharp point at one end and a round head at the other.", + "A non-jewelry pin is a small, thin, often pointed piece of metal with a sharpened end that is used to fasten cloth or other materials together.", + "A \"pin\" is a small, thin, pointed piece of metal with a sharpened end and a flat base.", + "A pin is a thin piece of metal with a sharp point at one end and a round head at the other.", + "A pin is a thin, pointed piece of metal with a sharp end that is used to fasten things together or to hold something in place." + ], + "pineapple": [ + "A pineapple is a fruit that has a hard, spiky outer shell and sweet, yellow flesh on the inside.", + "A pineapple is a fruit that has a hard, woody exterior and a soft, fleshy interior.", + "A pineapple is often described as looking like a cross between an apple and a cactus.", + "A pineapple is a large, oval-shaped fruit with a tough outer skin and a sweet, juicy interior.", + "A pineapple is a fruit that typically has a spiky, greenish-brown exterior and soft, white flesh on the inside.", + "A pineapple is a fruit with a spiked, tough outer rind and sweet, yellow flesh inside.", + "A pineapple is a fruit with a tough brown skin and sharp spines.", + "A pineapple is a tropical fruit that is round with green, pointy leaves coming out of the top.", + "A pineapple typically has a yellow-orange exterior with a green crown on top.", + "A pineapple typically has a tough, spiky shell with a yellow-orange, juicy flesh on the inside." + ], + "pinecone": [ + "A pinecone is an oblong, woody fruit that grows on evergreen trees.", + "A pinecone is the cone-shaped fruit of a pine tree.", + "A pinecone is a small, cone-shaped object that hangs from the branches of pine trees.", + "A pinecone is an Oberon that is light brown with darker stripes.", + "A pinecone is a seed-bearing structure that develops from a cone-shaped female cone on a pine tree.", + "A pinecone is the fruit of a pine tree.", + "Pinecones are the hard, woody cones that grow on pine trees.", + "A pinecone is a seed-bearing structure that is typically found on the tips of pine trees.", + "A pinecone is the seed cone of a pine tree.", + "A pinecone is a cone-shaped fruit that grows on certain types of pine trees." + ], + "ping-pong ball": [ + "A ping-pong ball looks like a small, white sphere.", + "A ping-pong ball is a small round white ball used in the sport of table tennis.", + "Ping pong balls are small, round, and have a white smooth surface.", + "A ping-pong ball is a small white ball with a smooth surface.", + "A ping pong ball is a small, round, white ball that is used in the game of table tennis.", + "A ping-pong ball is a small, white ball that is used in the game of ping-pong.", + "A ping-pong ball is small, round, and white.", + "A ping-pong ball is a small, white, light-weight, spherical ball.", + "A ping-pong ball is a small, round, white ball used in the sport of ping-pong.", + "A ping-pong ball is a small, round, white ball." + ], + "pinwheel": [ + "A pinwheel is a device with a wheel at its center that has a series of vanes or blades attached to its circumference.", + "A pinwheel is a spinning toy that has a wheel with different colors on each section.", + "A pinwheel is a spinning toy that has a wheel with colorful plastic or metal blades attached to a stick.", + "A pinwheel is a small, handheld toy that has a wheel with colorful blades attached to it.", + "A pinwheel has a handle with a circular piece of paper or plastic attached.", + "A pinwheel is a windmill-like toy that has a handle attached to a central point.", + "A pinwheel is a toy that has a plastic or paper disk with a pin in the center.", + "A pinwheel is a wheel made from a piece of paper or cloth that is attached to a stick in the center.", + "A pinwheel is a circular spinning toy that is driven by the wind.", + "A pinwheel looks like a small wheel with colorful stripes." + ], + "tobacco pipe": [ + "A tobacco pipe is a long, thin tube that is used to smoke tobacco.", + "A tobacco pipe typically has a long stem with a bowl at the end where the tobacco is placed.", + "A tobacco pipe typically has a bowl that is used to hold tobacco, a stem that delivers smoke from the bowl to the smoker's mouth, and a mouthpiece.", + "A tobacco pipe has a long stem with a bowl at the end.", + "A typical tobacco pipe has a long stem with a bowl at the end, which is typically made of briar wood.", + "A tobacco pipe typically has a long stem with a bowl at the end that is used to hold tobacco.", + "A tobacco pipe is a pipe that is used to smoke tobacco.", + "A tobacco pipe is a long, hollow stem with a bowl at one end where the tobacco is burned.", + "A tobacco pipe generally consists of a bowl, stem and mouthpiece.", + "A tobacco pipe is a pipe that is typically used to smoke tobacco." + ], + "pipe": [ + "A pipe is a cylindrical tube made of metal, plastic, or other material used to convey water, gas, oil, or other fluid substances.", + "A pipe is a long, thin tube made of metal, plastic, or other materials.", + "A pipe typically consists of a long, cylindrical section with a round cross-section.", + "A pipe is a tubular structure that is used to transport fluids from one place to another.", + "A pipe is a tube with a rounded end that is used to convey water or other fluid substances.", + "A pipe is a tube that is used to carry liquids or gases from one place to another.", + "A pipe is a tube of metal, plastic, or other material used to convey water, gas, oil, or other fluid substances.", + "A pipe is a cylindrical tube that is used to convey fluids from one place to another.", + "A pipe is a tube that is used to transport liquids and gases.", + "A pipe is a tubular section or hollow cylinder, usually but not necessarily of circular cross-section, used mainly to convey substances which can flow \u2014 liquids and gases (fluids), slurries, powders, masses of small solids." + ], + "pistol": [ + "A pistol is usually a small, hand-held firearm that is designed to be fired with one hand.", + "A pistol is a small, hand-held firearm.", + "A pistol is a small handgun with a short barrel.", + "A pistol is a small, hand-held firearm that is designed to be fired with one hand.", + "A pistol is typically a small, hand-held firearm that can be held in one hand.", + "A pistol is a handgun with a short barrel.", + "A pistol is a small, hand-held firearm designed to be fired with one hand.", + "A typical pistol is a small, hand-held firearm that can be fired by squeezing a trigger.", + "A pistol is a small firearm that is designed to be held in one hand.", + "A pistol is a small hand-held firearm that can be held in one hand." + ], + "pita (bread)": [ + "A pita is a types of flatbread that is usually round and has a pocket in the center.", + "A pita is a round, flat bread that can be either soft or crisp.", + "A pita is a flat, round bread that is typically white or whole wheat.", + " and tastes likeA pita is a type of flatbread that is round and fluffy.", + "A pita is a type of flatbread that is round and soft.", + "A pita is a round, flat bread that is typically white or whole wheat in color.", + "The pita is a round, flatbread that is usually about 6-8 inches in diameter.", + "A pita is round flatbread that is usually white or whole wheat.", + "A pita is a soft, round, flat bread that is typically made out of wheat flour.", + "A pita is a round, flat loaf of bread." + ], + "pitcher (vessel for liquid)": [ + "A pitcher is a tall, narrow vessel with a handle and a spout.", + "A pitcher is typically a tall, narrow vessel with a handle and a spout.", + "A pitcher is a tallcontainer with a spout for pouring liquids.", + "A pitcher usually has a handle and a spout.", + "A pitcher is a tall, narrow vessel with a spout and a handle.", + "A pitcher is a container with a wide spout and a handle, often used to hold water or other liquids.", + "A pitcher is an earthenware, metal, or glass container with a lip, used to hold water, milk, beer, or other liquids.", + "A pitcher is a tall, narrow vessel with a handle and a spout.", + "A pitcher is a vessel for liquid that is typically made out of ceramic or glass.", + "A pitcher is usually a tall cylinder with a spout and a handle." + ], + "pitchfork": [ + "A pitchfork has a long, wooden handle with two metal, pronged tines at the end.", + "A pitchfork is a tool with a long handle and metal tines that are used for farming.", + "A pitchfork is a long-handled agricultural tool with two tines that are usually pointed and used for lifting and turning over loose material, such as hay, straw, or leaves.", + "A pitchfork is a long-handled tool with four T-shaped prongs used forloosening, lifting, and turning over soil in gardening.", + "Traditionally, a pitchfork is a farming tool with a long handle and three to five tines (prongs).", + "A pitchfork is a tool with a long handle and two or three metal tines.", + "A pitchfork is a long-handled tool with two to five tines that is used for lifting and turning over loose material, such as hay, straw, or grass.", + "A pitchfork is a three-pronged gardening tool.", + "A pitchfork is a three-pronged tool typically used for gardening.", + "A pitchfork consists of a handle with two or more tines (prongs) at the end." + ], + "pizza": [ + "A pizza typically has a round, flat base and is covered in tomato sauce and cheese.", + "A pizza looks like a flatbread with toppings.", + "A pizza is a flatbread typically topped with tomato sauce and cheese and baked in an oven.", + "Pizza often has a circular shape and is cut into wedges that are called slices.", + "A pizza typically has a round, flat shape and is covered in tomato sauce and cheese.", + "A pizza has a round, flat base and is usually covered in tomato sauce and cheese.", + "A pizza typically has a round, flat base and is covered in tomato sauce and cheese.", + "the pizza is round and flat with a crust around the edge.", + "A pizza is typically a round, Flatbread that is covered in tomato sauce, cheese, and various toppings.", + "A pizza is typically a round, flat dough topped with tomato sauce and cheese, and then baked in an oven." + ], + "place mat": [ + "A place mat is a mat that is placed on a table.", + "A place mat is a mat placed under a dish on a table.", + "A place mat is a flat piece of material, typically cloth, paper or plastic, that is placed on a table before eating.", + "A place mat is a flat piece of material, typically rectangular or square, used to protect a dining table from heat, water, food stains, and scratches.", + "A place mat is typically a flat, rectangular piece of fabric or material.", + "A place mat is a piece of fabric or other material that is placed on a table before setting a place for a meal.", + "A place mat is a mat that is placed on a table before eating.", + "Most place mats are either round or oblong and are made of cloth, vinyl, wood, or other place mat material.", + "A place mat is a mat that is placed on a table.", + "A place mat is a mat placed under a plate as a decoration or to protect the table." + ], + "plate": [ + "A plate looks like a flat, circular piece of dishware.", + "A plate is typically flat and round, with a slightly raised edge to keep food from falling off.", + "Most plates are circular and made of ceramic, glass, or plastic.", + "A plate is a concave surface with a raised rim that is used for eating food from.", + "A plate is a flat, circular piece of tableware on which food is served.", + "A plate is typically a round, flat piece of dishware used for serving food.", + "A plate typically has a flat surface with a lip around the edge and is used to hold food.", + "A plate is a piece of flatware with a slightly raised edge that is used to hold food.", + "A plate is a flat, circular piece of metal, china, or glass that is used for eating meals.", + "A plate typically has a flat surface with a lip that curves upward, making it easy to hold food on the plate without it falling off." + ], + "platter": [ + "A platter is a large, shallow dish used for serving food.", + "A platter is a large plate that is used to serve food.", + "A platter is a large, flat dish used for serving food.", + "A platter is a round, flat plate used for serving food.", + "A platter is a tray that is used to serve food.", + "A platter is a large, flat dish used for serving food.", + "A platter is a large round tray that is used to serve food.", + "A platter is a large, flat dish used for carrying food to the table or for serving food at a buffet.", + "A platter is a large, flat, usually round dish used for serving food.", + "A platter is a large and shallow dish used for serving food." + ], + "playpen": [ + "A playpen is usually a square or rectangular area surrounded by mesh or bars.", + "A playpen is a square or rectangular enclosure where young children can play.", + "A playpen is typically an enclosure made of metal, plastic, or cloth, with mesh sides, that can be used to confine a child in a limited space for safety.", + "A playpen is a small, fenced-in area where young children can play safely.", + "A playpen may have a solid base made of plastic, metal wire or wood.", + "A playpen is a small, enclosed area where young children can play safely.", + ".", + "A playpen is a small, portable enclosure for infants and young children.", + "A playpen is a small, portable enclosure for young children to play in.", + "A playpen looks like a place where children can play by themselves." + ], + "pliers": [ + "A pliers is a hand tool used to hold objects firmly, to exert pressure, or to pull.", + "A pliers is a tool that has two arms that are connected at the end by a joint.", + "A pliers is a tool that has two jaws that open and close.", + "A pliers is a hand tool used for holding objects or bending and cutting wire.", + "A pliers is a small metal tool that has a handle on each end.", + "A pliers is a handtool used for holding objects together, for bending and cutting wire, and for gripping flat surfaces.", + "A pliers looks like atool that has two handles and two jaws.", + "A pliers is a hand tool used for holding objects or materials together, or for bending or cutting them.", + "A tool used to grip objects, consisting of a pair of jaws at one end of a pair of handles.", + "a pliers is a hand tool used for holding objects or materials together, or for cutting, bending, and pressing metals." + ], + "plow (farm equipment)": [ + "A plow is a large, rectangular piece of equipment with a long handle attached to one side.", + "A plow is a large, heavy farm implement that is attached to the front of a tractor.", + "A plow is a tool used in farming to prepare the soil for planting by breaking up the surface and turning it over.", + "A plow is a tool used in farming to cultivate soil.", + "A plow is a large farm implement that is attached to a tractor.", + "Most plows are metal and have a sharp blade that is used to cut through the soil.", + "A plow isfarm equipment used to loosen, turn over or plow soil in preparation for planting.", + "A plow is a large, heavy farm implement that is pulled by a tractor or a team of horses.", + "Most plows are composed of a metal blade attached to a frame that is mounted on wheels or runners.", + "A plow is a tool used to loosen, turn, or bury soil in preparation for planting." + ], + "plume": [ + "A plume is a column of smoke or ash emitted from a volcano.", + "A plume looks like a column of smoke or steam.", + "A plume is a column of smoke or gases that rise into the air.", + "A plume from a smoke stack is a column of hot gases and ash that rise into the air.", + "A plume is a column of smoke or ash that rises into the air.", + "A water plume is a column of water that has been ejected into the air by a natural or man-made event.", + "A plume is a column of smoke or ash rising from the ground into the air.", + "A plume can be seen as a column of smoke rising from a fire.", + "A plume is a column of liquid or smoke that is emitted from a surface.", + "A plume is a column of smoke or steam that rises into the air." + ], + "pocket watch": [ + "A pocket watch is a watch that is designed to be carried in a pocket.", + "A pocket watch is generally round in shape and has a cover that flips open to reveal the face of the watch.", + "A pocket watch is a small, usually round watch that is designed to be carried in a pocket.", + "A pocket watch is a watch that is designed to be carried in a pocket, as opposed to a wristwatch, which is designed to be worn on the wrist.", + "A pocket watch is a timepiece that is designed to be carried in a pocket.", + "A pocket watch typically has a circular face with numbers and hour and minute hands.", + "A pocket watch is a small, portable timekeeping device that is typically carried in a pocket.", + "A pocket watch is a watch that is designed to be carried in a pocket, as opposed to being worn on the wrist.", + "The exterior of a pocket watch typically consists of a round metal case, with a glass crystal over the face.", + "A pocket watch is a small, round watch that is designed to be carried in a pocket." + ], + "pocketknife": [ + "A pocketknife typically has a small, folding blade that is attached to a handle.", + "A pocketknife is a small knife that folds up into a handle.", + "A pocketknife is a small, foldable knife that can be carried in a pocket.", + "A pocketknife typically has a folding blade that is between two and six inches long.", + "A pocketknife is a small foldable knife that can be carried in a pocket.", + "A pocketknife has a blade that folds into the handle.", + "A pocketknife generally has a few blades of various sizes that fold into the handle.", + "A pocketknife is a small knife with a folding blade that can be stored in a pocket.", + "A pocketknife is a small folding knife, typically with multiple blades, that fits in your pocket.", + "A pocketknife typically has a small, folding blade that is attached to a handle." + ], + "poker (fire stirring tool)": [ + "A poker is an L-shaped tool that is used to stir a fire.", + "A poker is a thin, pointed rod made of metal, wood, or another material that is used to stir a fire.", + "A poker is a thin rod of metal with a sharp point at one end.", + "A poker is a long, thin metal rod with a pointed end.", + "A poker is long, thin rod usually made of metal.", + "A poker is a metal rod with a pointed end that is used to stir a fire.", + "A poker is a long, thin metal rod with a pointed end.", + "A poker is usually a long, thin metal rod with a pointed end.", + "A poker is a long, thin metal rod with a pointed end.", + "A poker is a rod-shaped tool used to stir a fire." + ], + "pole": [ + "A pole is a long, thin object that is typically made of metal or wood.", + "A pole is a vertical, often cylindrical, structure, typically made of wood, metal, or concrete, that is used to support structures or other objects.", + "A pole is a long, thin object that is vertical, or close to vertical.", + "A pole is a tall, thin object that is often made of wood or metal.", + "A pole is a long, thin, and often vertical object.", + "A pole is a long, thin, straight object that is used to support things or to act as a boundary marker.", + "A pole is a long, thin, round object that is typically made of wood or metal.", + "A pole is a long, thin, vertical rod.", + "A pole is a thin, tall, and typically cylindrical object.", + "A pole is a long, thin, cylindrical object that is taller than it is wide." + ], + "polo shirt": [ + "A polo shirt is a shirt that has a collar and typically has two or three buttons down the front.", + "A polo shirt is a collarless shirt with a placket of two or three buttons at the neck and short sleeves.", + "A polo shirt is typically a short-sleeved shirt with a collar and a placket of two to five buttons at the neck.", + "A polo shirt is a shirt with a collar and usually two or three buttons at the neck.", + "A polo shirt is a type of shirt that has a collar and usually two or three buttons at the neck.", + "A polo shirt has a collar and usually a placket of two or three buttons at the neckline.", + "A polo shirt is a type of shirt with a collar and buttons down the front.", + "A polo shirt is a shirt with a collar and short sleeves.", + "A polo shirt is a type of shirt with a collar and buttons down the front.", + "A polo shirt is a shirt that has a collar, usually has two or three buttons at the neck, and has short sleeves." + ], + "poncho": [ + "A poncho is a piece of clothing that is worn over the head and shoulders.", + "A poncho is a garment that hangs over the head and shoulders, typically with an opening in the center for the head.", + "A poncho is a rectangular or square piece of fabric with a hole in the center for the head.", + "A poncho is a sleeveless, hooded outer garment that is typically made of a waterproof fabric.", + "A poncho is a shroud or cape that is fastened about the neck and hanging down over the body, typically with an opening for the head.", + "A poncho is a garment that is worn over the head and shoulders, and does not have sleeves.", + "A poncho is a loose, sleeveless garment that hangs from the shoulders and typically has an opening in the center for the head.", + "A poncho is a garment that is worn over the head and shoulders and does not have sleeves.", + "A poncho is a garment that is worn over the head and shoulders.", + "A poncho is a garment that is worn over the head and around the body." + ], + "pony": [ + "A pony is a smaller horse.", + "A pony is a small horse.", + "Ponies are small, sturdy horses with thick manes and tails.", + "A pony looks like a small horse.", + "A pony is a horse that is smaller in size.", + "A pony is a small horse.", + "Ponies are small horses.", + "A pony is a small horse.", + "A pony is a small horse.", + "A pony is a small horse." + ], + "pool table": [ + "A pool table has a large, level surface, typically made of slate, with six pockets: one at each corner, and one in the middle of each long side.", + "A regulation size pool table is eight feet long and four feet wide.", + "A pool table is a large, flat table with six pockets along the edges.", + "A pool table is a large, heavy table with a smooth, level surface.", + "A pool table typically has six pockets, and is covered with a green felt.", + "A pool table typically has six pockets, a la eight-ball, and is covered with a green felt.", + "A pool table typically has six pockets, a smooth surface, and is rectangle-shaped.", + "A pool table is a long, rectangular table with a felt surface.", + "A pool table is usually a rectangular table with six pockets, four of which are at the corners, and two in the middle of the long sides.", + "A regulation-sized pool table is 8 feet long and 4 feet wide." + ], + "pop (soda)": [ + "A pop (soda) is a clear or colored carbonated drink.", + "A pop is a carbonated soft drink that is typically sold in cans or bottles.", + "A pop generally refers to a carbonated soft drink.", + "A pop is a brightly colored, carbonated beverage that comes in a can or bottle.", + "A pop is a bubbly, usually sweet beverage that is typically enjoyed cold.", + "A pop is a carbonated beverage that is typically served in a can or a bottle.", + "A soda is typically a carbonated and sweet beverage that comes in a can or bottle.", + "A pop (soda) is a type of carbonated soft drink that typically contains flavored syrup.", + "Apop typically has a fizzy, bubbly texture and is brightly colored.", + "A pop is a carbonated soft drink in a can or bottle." + ], + "postbox (public)": [ + "A postbox is usually red, rectangular, and has a slot to drop mail into.", + ".", + "A postbox is a small, usually red, box where people can drop off letters and cards to be sent through the mail.", + "A post box is a red box with a slot in the top for mail.", + "A public postbox is a large, usually red, box where people can post letters.", + "A postbox in the United Kingdom and many Commonwealth countries, is a red box into which members of the public can deposit outgoing postal mail.", + "A postbox is typically a bright red or yellow box with a slot on the top where people can drop off mail.", + "A postbox is a rectangular box with a slot in the top for posting mail.", + "A postbox is typically a red, metal box with a slot in the top for mail.", + "A postbox is a public mailbox where people can drop off letters and other items to be mailed." + ], + "postcard": [ + "A postcard is a rectangular piece of cardboard that is usually 4\"x6\".", + "A postcard is typically rectangular and has a picture on one side and a blank space on the other side for writing a message.", + "A postcard is a rectangle piece of cardboard with a design on one side and a blank side for a message.", + "A postcard is traditionally a rectangular piece of thick paper or thin cardboard, decorated on one side with a picture or design and with a blank space on the other side for a message.", + "A postcard is a rectangular piece of cardboard with a photograph or other image on one side and space for a message on the other side.", + "A standard postcard is typically rectangular, and has a printed picture on one side and a blank space for a message on the other.", + "A postcard is a rectangular piece of cardboard with a picturesque image on one side and space on the other side for a message.", + "Most postcards are rectangular and have a divided back, allowing for a message to be written on one side and the address on the other.", + "Postcards usually have a picture of a place on the front and space on the back for a message.", + "Postcards are typically rectangular, with a divided back allowing for a message to be written on the left side, and the right side reserved for the address and postage." + ], + "poster": [ + "A poster is a piece of paper with information on it.", + "A poster is a piece of paper or a card that is attached to a wall or another surface and has information or a message on it.", + "A poster typically contains images and text related to a movie, event, or product.", + "Most posters are colorful and eye-catching, designed to grab attention and be noticed.", + "A poster is a printed piece of paper that has information on it.", + "\nMost posters are printed on a thin paper stock and are meant to be hung on a wall or other vertical surface.", + "A poster is a piece of paper with printing on it.", + "A poster is a piece of paper or thin card with information about something on it, especially an advertisement, event, or collection.", + "\nMost posters are colorful and eye-catching, designed to grab attention and communicate a message quickly.", + "A poster is typically a piece of paper or thin card with information about a product, event, or cause written on it." + ], + "pot": [ + "A pot is a container with a wide mouth and a handle.", + "A pot typically has a round or oval shape, and is used to hold various items such as plants, food, or liquids.", + "A pot is a container with ahandle and a base wider than the top, used for holding liquids or other things.", + "A pot typically has a rounded bottom with a narrow opening at the top.", + "By definition, a pot is a container with a bulging middle and a narrow neck, used for holding dry goods, plants, or other objects.", + "A pot is a small, round, and deep cooking vessel with a handle and a lid.", + "A pot is a round, often cylindrical, container used to hold food, plants, or other items.", + "A pot is a container that is used to hold liquids or other objects.", + "A pot is a container with a wide mouth and a handle, used for cooking or storing food.", + "A pot is a container used to hold and/or cook food." + ], + "flowerpot": [ + "A flowerpot is a container in which one or more plants are grown.", + "A flowerpot typically has a round or oval shape and is made out of ceramic, plastic, or metal.", + "A flowerpot is typically a small round pot with drainage holes in the bottom and a saucer that fits underneath to catch water.", + "A flowerpot typically has a round or oval shape and is made out of clay, plastic, or metal.", + "A flowerpot is typically a pot made of a material such as terracotta, metal, or plastic, with a drains hole in the bottom and a Saucer.", + "A flowerpot is typically short and wide with a drainage hole at the bottom.", + "A flowerpot is a small pot typically used to hold plants.", + "A flowerpot typically has a round or oval shape and is made of a porous material like clay that allows water to drain through.", + "A flowerpot looks like a small, usually round pot made of clay, plastic, or metal, in which plants and flowers are grown.", + "A flowerpot is a container in which flowers and other plants are cultivated." + ], + "potato": [ + "Potatoes are tubular vegetables with smooth, brown skin and white flesh.", + "A potato typically has a dark brown, textured skin with eyes dotting its surface.", + "A potato has smooth, brown skin and is shaped like a short, plump cylinder.", + "A potato is small, round, and brown.", + "Potatoes are small, brown, tubular vegetables with smooth, bumpy skin.", + "A potato is a small, starchy, tuberous root vegetable.", + "A potato is an underground tuber that is part of the Solanaceae, or nightshade, family.", + "A potato is a small, round, brownish-red root vegetable with a smooth, textured skin.", + "A potato typically has a dark brown skin with white flesh on the inside.", + "A potato is a root vegetable that typically has a brown, bumpy skin and white flesh." + ], + "potholder": [ + "A potholder is typically a square or rectangular piece of fabric with a loop on one side for hanging.", + "A potholder is a small, padded mat used to protect surfaces from heat.", + "A potholder is a small padded mat with a loop or ring of fabric attached, used to protect the hands when lifting a hot pot from a stove.", + "A potholder is a small, padded mat used to protect surfaces from hot dishes.", + "A potholder is a small, thick cloth or padded mat used to protect the hand from heat while cooking.", + "A potholder is a small, usually square or rectangular, padded fabric bag with a heat-resistant lining.", + "A potholder is a small rectangular or square piece of fabric with a loop on one side.", + "A potholder someone would typically use in a kitchen is square or rectangular, has a loop on one side so it can be hung easily, and is made of heat-resistant fabric.", + "A potholder is a small kitchen accessory made of heat-resistant fabric.", + "A potholder is a piece of fabric or other material used to protect the hand from heat when taking something out of an oven, pan, or other container." + ], + "pottery": [ + "A pottery typically looks like a small, ceramic vessel with a wide opening and a narrow base.", + "A pottery is a container where food can be cooked or stored.", + "A pottery is a ceramic vessel that is used for cooking or storing food.", + "A pottery is a container with a wide opening and a small base, used for holding water, food, or other things.", + "A pottery looks like a smallish ceramic container with a handle.", + "A pottery is a container for holding liquids, traditionally made from a ceramic material.", + "A pottery is a piece of pottery that has been made into a particular shape.", + "A pottery is a container used to hold objects, made from a material that is durable and can withstand high temperatures.", + "A pottery is a handmade or machine-made object that is used for holding liquids, such as water, milk, or soup.", + "A pottery looks like a ceramic container that is used for holding liquids or other materials." + ], + "pouch": [ + "A pouch is a small, flat, usually round bag that closes with a drawstring at the top.", + "A pouch is typically a small, sealed bag that contains items like candy, cigarettes, or money.", + "A pouch is a small bag that is used to hold different items.", + "A small, flat, often envelope-like bag with a drawstring or flap closure.", + "A pouch is a small bag that can be worn around the waist or over the shoulder.", + "A pouch can be any size or shape, but typically it is a small, flat bag.", + "A pouch is a small, flat, usually rectangula bag.", + "A pouch is a small, flat bag that is worn under clothing.", + "A pouch typically has a flat bottom and is shaped like a cylinder.", + "A small, pliable bag with a drawstring or snap closure, used to carry money, papers, or personal items." + ], + "power shovel": [ + "A power shovel is a large machine with a long arm that is used to shovel dirt or snow.", + "A power shovel is a large, diesel-powered machine used for excavating and moving large amounts of earth, rock, or other materials.", + "A power shovel is a large, heavy machine used for digging and moving earth.", + "A power shovel is a type of excavating equipment or digger that is used for digging and moving large quantities of soil, sand, snow, or other materials.", + "A power shovel is a large machine with a metal bucket attached to a long arm.", + "A power shovel typically has a large metal bucket attached to a hydraulic arm.", + "A power shovel has a large metal scoop on the front that is attached to a rotating arm.", + "A power shovel is a heavy machine used for excavating or moving earth and other materials.", + "A power shovel has a large, rotating blade at the front that is used to dig up dirt and move it.", + "A power shovel is a large piece of construction equipment that is used for digging and moving large volumes of earth." + ], + "prawn": [ + "A prawn is a type of shellfish that has a long body and legs.", + "A prawn is a type of shrimp with a long tail and small legs.", + "A prawn is a small, shrimp-like creature that is often used in seafood dishes.", + "A prawn is a shrimp-like crustacean with a long body and thin legs.", + "Prawns are small, pinkish-white shellfish with long tails and slender abdomens.", + "Prawns are similar in appearance to shrimp, but are typically slightly larger.", + "Prawns are pinkish-white in color and have a long, segmented body with a large head.", + "Prawns are marine crustaceans that resemble large shrimp.", + "A prawn is a small, shrimp-like crustacean.", + "A prawn is a small, shrimp-like crustacean that has a large head and a paddle-shaped tail." + ], + "pretzel": [ + "A pretzel is a knot of dough that is boiled in salt water and then baked.", + "A pretzel is an oblong, knot-shaped roll of bread that is boiled in salt water and then baked.", + "A pretzel is a twisted, chewy bread that is golden brown in color.", + "A pretzel is a type of bread that is twisted into a knot.", + "A pretzel is a knot of dough that is boiled, then baked.", + "A pretzel is a twisted, knot-shaped bread typically made from wheat flour, water, and salt.", + "A pretzel is a knot of dough that is shaped into a loop and then twisted.", + "A pretzel is a knot-shaped piece of dough that is boiled in salt water and then baked.", + "A pretzel is a knot of dough that has been boiled in salt water and then baked.", + "A pretzel is a knot-shaped piece of dough that is twice-baked and then typically coated in salt." + ], + "printer": [ + "A printer is a machine that uses ink to print text or images onto paper.", + "A printer is a small, usually square box that sits on a desk or table.", + "A printer is a machine that prints text or images onto paper.", + "A printer typically looks like a small box with a paper tray on the top and a cord coming out of the back.", + "Most printers are small, box-like devices that sit on a desk or table.", + "A printer generally consists of an inkjet or laser printer, which is a technology that creates an image by propelling droplets of ink onto paper, and a scanner, which is a device that captures an image and converts it into digital form.", + "A printer is a machine that accepts text and graphic output from a computer and transfers the information to paper, usually to standard size sheets.", + "A printer is usually a rectangular box with a flat surface on top for paper.", + "A printer is a small, rectangular box that has a paper tray on the top and a cord that plugs into an outlet.", + "A printer typically looks like a large rectangular box with a flat surface on top for placing paper." + ], + "projectile (weapon)": [ + "A projectile (weapon) is typically a cylindrical object that is hurled at a target.", + "A projectile is a small, often bullet-shaped object that is fired from a weapon.", + "A projectile is a weapon that is thrown or launched into the air, usually by a person.", + "A projectile is a weapon that is fired from a gun.", + "A projectile typically contains a payload (either explosive, chemical, kinetic, or nuclear) and a guidance and/or propulsion system.", + "A projectile is a weapon that is typically launched through the air.", + "A projectile is a missile designed to be fired from a weapon, such as a gun or cannon.", + "A projectile is a weapon that is thrown or fired at a target.", + "A projectile is a weapon that is designed to be thrown or fired, and usually has a pointed end.", + "A projectile weapon is typically a gun that shoots bullets." + ], + "projector": [ + "A projector is an optical device that projects an image onto a surface, commonly a projection screen.", + "A projector typically consists of a light source, such as a halogen lamp, an LCD array, or a DLP chip, which projects images onto a screen.", + "A projector is a device that takes an image and projects it onto a surface.", + "A projector is a machine that projects images on a surface, usually a wall or screen.", + "A projector is a machine that projects an image onto a screen.", + "A projector is a device that projects images onto a surface.", + "A projector is a cylindrical device that projects images onto a surface.", + "A typical projector has a rectangular box shape and consists of a lens, housing, and electronics.", + "A projector is a device that projects images onto a surface, typically a wall or screen.", + "A projector is a device that projects an image or movie onto a surface, often a projection screen." + ], + "propeller": [ + "A propeller consists of two parts: the hub, which is attached to the engine, and the blades, which spin around the hub.", + "A propeller is a rotating blade that generates thrust to push an aircraft or ship through the water.", + "A propeller is a device with rotating blades that create thrust and help propel a plane through the air.", + "A propeller looks like a large fan that is attached to the back of a boat.", + "A propeller is a rotating blade that helps push a plane through the air.", + "A propeller is a rotating airfoil that generates thrust by redirecting airflow.", + "A propeller looks like a large, flat screw.", + "A propeller is a rotating airfoil that generates thrust when rotated.", + "A propeller is a type of fan that is used to create thrust by pushing against the air.", + "A propeller is a rotating blade that is attached to the front of a boat or plane." + ], + "prune": [ + "A prune is a type of dried plum that has been crinkled and shrunken by dehydration.", + "A prune looks like a shriveled up raisin.", + "A prune is a type of plum that has been dried and is often used as a cooking ingredient.", + "A prune is a dried plum, often used in cooking.", + "A prune is a small, wrinkled, purple fruit with a large stone in the center.", + "A prune is a dried plum.", + "A prune is a small, dried fruit.", + "A prune is a dark purple, almost black dried plum.", + "A prune is a dried plum.", + "A prune is a dried plum." + ], + "pudding": [ + "A pudding is a soft, sweet, dessert food made with milk, eggs, flour, and flavorings like vanilla or chocolate.", + "A pudding is a soft, sweet food made from flour, milk, and eggs.", + "Pudding is typically a smooth, thick, and sweet custard made from milk, cream, eggs, and sugar.", + "A pudding is a soft, sweet, custard-like food that is often served as a dessert.", + "A pudding is a type of food that is typically sweet and smooth in texture.", + "A pudding is a dessert that is made by combining milk, eggs, flour, sugar, and flavorings, and then cooking the mixture until it thickens.", + "A pudding can be many different colors, depending on the flavor, but is typically a light brown.", + "A pudding is a soft, sweet food made from flour, milk, and eggs.", + "A pudding is a voncent, typically sweetened dish made with milk, cream, eggs, and flour.", + "A pudding is a soft, sweet food that is often eaten as a dessert." + ], + "puffer (fish)": [ + "A puffer fish is a fish that is able to inflate itself by pulling water into its stomach.", + "A pufferfish is a spherical fish with sharp spines sticking out all over its body.", + "Pufferfish are often called balloonfish, puffers, blowfish, or bubblefish.", + "A puffer fish is a small, round fish that is covered in spikes.", + "A puffer fish is a spherical fish that can inflate itself with water to twice its normal size.", + "A puffer fish is a spiny, globular fish that can inflate itself with water when threatened.", + "A puffer fish is a round fish with a protruding mouth.", + "A puffer fish is a small, round fish with large eyes.", + "A pufferfish is a type of fish that is round and has spikes all over it.", + "A puffer is a fish that has a round body with spikes sticking out of it." + ], + "puffin": [ + "Puffins have black upperparts, white underparts, and a black and white striped face.", + "A puffin is a small bird with a black back and white belly.", + "A puffin is a small, stocky bird with a large bill.", + "A puffin is a small bird with a large, colorful beak.", + "Puffins are small, fat birds with large beaks.", + "A puffin has a colorful beak and black back.", + "Puffins are small seabirds with large beaks.", + "Puffins are small, stocky birds with large, triangular bills.", + "Puffins are small, stocky birds with large, triangular beaks.", + "A puffin has a stocky body with large wings and a short tail." + ], + "pug-dog": [ + "A pug-dog typically has a short, stocky body with a wrinkled face and a curly tail.", + "A pug-dog is typically a small, sturdily built dog with a wrinkled face, short muzzle and curly tail.", + "Pug dogs have a very distinct appearance.", + "A pug-dog is a small, deformed-looking dog that has a flat face, big eyes, and a wrinkled up nose.", + "A pug dog has a short, smooth coat that is usually fawn, black, or silver.", + "A pug-dog is a small, square-bodied dog with a short muzzle.", + "A pug-dog is usually a small, black dog with a wrinkled face.", + "A pug-dog is a small, stocky dog with a wrinkled face and a short, curled tail.", + "A pug-dog is a small, stocky, black and white (or occasionally fawn-colored) dog with a wrinkled face and flat nose.", + "Pug-dogs are small, stocky dogs with large, flat heads, small noses, and large, dark eyes." + ], + "pumpkin": [ + "A pumpkin typically looks like a large, round, orange fruit with a stem sticking out of the top.", + "A pumpkin is a round, orange fruit with a green stem.", + "pumpkins are typically orange or yellow, and are round with a smooth, slightly ribbed surface.", + "A pumpkin is typically round or oval-shaped, with a thick rind that is orange or yellow in color.", + "A pumpkin is a round, orange, gourd-like fruit with a green stem.", + "A pumpkin is typically a orange or yellow color and is shaped like a sphere.", + "A pumpkin is a large, round, orange fruit with a thick, green stalk.", + "A pumpkin is a round, orange fruit with a green stem.", + "A pumpkin is a large, round, orange fruit with a thick, green stem.", + "A pumpkin is typically an orange color and is round with a stem coming out of the top." + ], + "puncher": [ + "There is no definitive answer to this question as everyone has their own personal preferences.", + "Someone who throws punches looks like they are punching something or someone.", + "A puncher looks like a strong person who can punch people and things.", + "A puncher generally looks like a boxer, with gloves and shorts.", + "A puncher looks like a small, hand-held device with a pointed end.", + "A puncher is typically a large, muscular man with a strong grip.", + "A puncher is a person who punches things.", + "A puncher looks like a large, strong person who is holding a boxing glove.", + "A puncher can look like anything, depending on their fighting style.", + "A puncher is somebody who punches." + ], + "puppet": [ + "A puppet is a masked character that is controlled by a person.", + "A puppet is a doll that is controlled by someone, usually with their hand.", + "A puppet is a doll that can be controlled by someone.", + "A puppet is a figure that is controlled by a person.", + "There is no right answer to this question as puppets come in all shapes and sizes.", + "There is no one answer to this question as puppets come in many different shapes and sizes.", + "A puppet is a doll that is moved by strings or by someone's hand.", + "A puppet is a wooden or cloth doll that is controlled by the hand of the person using it.", + "A puppet is typically a handmade doll that is animate with the help of a puppeteer.", + "A typical hand puppet is a glove puppet, with a separate head and an extendable body, that fits over the hand of a puppeteer." + ], + "puppy": [ + "A puppy is small, with a soft coat, and big ears.", + "A puppy usually has soft, short fur that istan, brown, black, or white.", + "A puppy is a small, young dog typically weighing between 3 and 12 pounds and measuring between 8 and 16 inches at the shoulder.", + "A puppy is a young dog.", + "A puppy is a small, young dog.", + "A puppy is a young dog.", + "A puppy is a baby dog.", + "A puppy looks like a baby dog.", + "A puppy is a young dog.", + "A puppy is small, cute, and has a lot of energy." + ], + "quesadilla": [ + "A quesadilla typically consists of a soft flour tortilla that is folded over and filled with a variety of ingredients, including cheese, meats, beans, and vegetables.", + "A quesadilla is a flour tortilla that is filled with cheese and other ingredients and then grilled.", + "A quesadilla is a savory Mexican dish that is made by placing cheese, meats, beans, and vegetables between two flour tortillas and then cooking them until the cheese is melted.", + "A quesadilla is a Mexican dish that consists of a flour tortilla that is filled with cheese and other ingredients and then grilled.", + "A quesadilla is a type of Mexican food that is made with a tortilla that is filled with cheese and other fillings, then folded in half and grilled.", + "A quesadilla is a grilled or fried tortilla that is filled with cheese and other ingredients.", + "A quesadilla is a flour tortilla that is filled with cheese and sometimes other ingredients and then grilled.", + "A quesadilla is a Mexican dish consisting of a wheat flour tortilla filled with cheese and other ingredients, then grilled or fried.", + "A quesadilla is a tortilla that is filled with cheese and other fillings, then grilled or baked.", + "A quesadilla looks like a tortilla that is filled with cheese and other ingredients and then grilled." + ], + "quiche": [ + "A quiche is a dish that typically consists of eggs, milk, and cheese in a pastry crust.", + "A quiche typically has a savory custard filling made with eggs and milk or cream, and it is often flavored with additional ingredients like onions, bacon, ham, and cheese.", + "A quiche typically has a Flan-like pastry crust and is filled with meat, cheese, and eggs.", + "A quiche is a savory, egg-based pie typically made with a pastry crust and filled with cheese, ham, and vegetables.", + "A quiche is a savory egg custard tart typically made with eggs, milk or cream, cheese, and vegetables.", + "A quiche is a savory pie that is typically made with eggs, custard, and cheese.", + "A quiche is a savory custard pie made with eggs, milk, and cheese, typically with a pastry crust.", + "A quiche is a savory, open-faced tart that is typically made with eggs, cream, and cheese in a pastry crust.", + "A quiche is a savory custard pie with a variety of fillings, typically including cheese, meat, and vegetables.", + "A quiche is a savory custard tart typically made with eggs, milk or cream, and cheese." + ], + "quilt": [ + "A quilt is typically a colorful, stitched blanket made from patchwork fabric.", + "A quilt is a bed cover composed of two layers of fabric stitched together with stuffing in between.", + "A quilt is a multi-layered textile, traditionally composed of three layers of fiber: a woven cloth top, a layer of batting or wadding, and a woven back, combined using the technique of quilting, the process.", + "A quilt is usually a rectangular patchwork blanket made up of smaller squares or rectangles of fabric sewn together.", + "A quilt is a multi-layered textile, traditionally composed of three layers of fiber: a woven cloth top, a layer of batting or wadding, and a woven back, combined using the technique of quilting, the process.", + "A quilt looks like a large, colorful blanket with patterns stitched into it.", + "A quilt is a type of blanket that is composed of two layers of fabric stitched together with a layer of insulation in between.", + "A quilt is a type of blanket that is made of two layers of fabric with a layer of batting or stuffing in between.", + "A quilt is a type of blanket that is made up of two layers of fabric stitched together with a layer of batting or insulation in the middle.", + "A quilt is a textile made from layers of fabric sewn together and typically containing batting or other insulating material." + ], + "rabbit": [ + "A rabbit has a furry body, long ears, and a tail.", + "Most rabbits have long ears, short fur, and powerful hind legs.", + "A rabbit has long ears, a short muzzle, and long hind legs.", + "A rabbit is a small mammal with big ears, long hind legs, and a short tail.", + "A rabbit looks like a small, furry mammal with long ears and short legs.", + "A typical rabbit is long-eared, short-legged, and has a divided upper lip.", + "A rabbit is a small mammal with long ears, long hind legs, and a short tail.", + "A rabbit has long ears, a short snout, and a fluffy tail.", + "A rabbit is small, fluffy, and has long ears.", + "Rabbits have long ears, short fur, and a tail." + ], + "race car": [ + "A race car is a car that is built or modified for racing.", + "A race car is typically a small, lightweight vehicle with a powerful engine.", + "A race car looks like a small, fast car with a large engine.", + "A race car is typically a small, lightweight car with a powerful engine.", + "A race car is a car that is designed and built specifically for racing.", + "A race car is typically a high-performance vehicle with a powerful engine that is designed for racing.", + "A race car is a car that is used for racing.", + "A race car typically has a sleek design with a low center of gravity.", + "A race car typically has a low, aerodynamic design.", + "A race car is a vehicle that is designed and built specifically for racing." + ], + "racket": [ + "A racket is a percussion instrument that consists of a wooden frame with a stretched membrane over it.", + "A racket typically has a handle and a round frame with a tight string stretched across it.", + "A racket is a tool used for striking a ball or shuttlecock in various games.", + "A racket is a circular frame with a handle that is used to hit a ball.", + "A racket is a device used to hit a ball or other object.", + "A racket is a small handheld frame with an open hoop at one end and strings stretched across the open hoop.", + "A racket is a tool used to hit a ball in various sports.", + "A racket looks like a paddle with a strings strung across it.", + "A racket is a device used to hit a ball or other object.", + "Very generally, a racket is a tool used to hit a ball (or other object) with the arm." + ], + "radar": [ + "A radar is a machine that uses radio waves to find out how far away something is and what direction it is moving.", + "Radars are large, dish-shaped antennas that emit pulses of radio waves or microwaves.", + "Radar is an object detection system which uses electromagnetic waves to identify the range, altitude, direction, or speed of both moving and fixed objects such as aircraft, missiles, vehicles, weather formations, and terrain.", + "Radars look like large, dish-shaped antennas.", + "A radar is a machine that uses radio waves to find out how far away things are.", + "A radar is a large, dish-shaped antenna.", + "A radar is a piece of equipment that uses electromagnetic waves to detect the presence, direction, or range of objects.", + "A radar uses a dish-shaped antenna to emit a microwave signal.", + "Radars usually consist of a dish-shaped antenna and a processor that uses radio waves to determine the range, altitude, direction, or speed of both moving and stationary objects.", + "A radar is a machine that helps people see things that are far away." + ], + "radiator": [ + "A radiator is a device used to heat a room or space.", + "A radiator is a large metal object that is usually attached to a wall.", + "A radiator looks like a series of metal fins that protrude from a metal casing.", + "A radiator is a device consisting of a series of metal fins or tubes that transfer heat from one place to another.", + "A radiator is a type of heat exchanger.", + "A radiator is a device that helps transfer heat from one area to another.", + "A radiator is usually a metal or aluminium grille that is placed over or near a heat source to radiate the heat away from the object.", + "A radiator is a metal device that is usually attached to a wall.", + "A radiator is a type of heat exchanger.", + "A radiator usually consists of a metal grille at the front that covers a series of parallel metal fins." + ], + "radio receiver": [ + "A radio receiver is a device that receives radio waves and converts them into electrical signals.", + "A radio receiver is a small device that has an antenna, a speaker, and a volume knob.", + "A radio receiver is a device that receives electromagnetic waves and converts them into electrical signals that can be heard through headphones or speakers.", + "A radio receiver looks like a small box with an antenna sticking out of it.", + "A radio receiver is a small box with an antenna sticking out of it.", + "A radio receiver is a device that receives radio waves and converts them into electrical signals.", + "A radio receiver is a device that picks up and amplifies radio waves.", + "A radio receiver will typically have a speaker and an antenna.", + "A radio receiver is typically a box with an antenna jutting out of the top.", + "A radio receiver is a device that picks up radio waves and converts them into electrical signals that can be heard through speakers." + ], + "radish": [ + "A radish is a small red root vegetable.", + "A radish is typically red, but can also be white or purple.", + "Radishes are small, red, or white root vegetables.", + "Radishes are small, round vegetables that can be red, white, or purple.", + "A radish is a root vegetable that typically has a bright red or white color.", + "Radishes are small, round, and red (or sometimes white) with a crisp texture.", + "A radish is a small, red, root vegetable.", + "A radish is a small, round vegetable that is typically red, white, or pink in color.", + "A radish is a red, white, or yellow root vegetable.", + "Radishes are small, crisp, and slightly spicy." + ], + "raft": [ + "A raft is typically a large, flat, wooden platform that is propped up on logs or inflated tubes.", + "A raft is traditionally a floatation device that is used to help keep a person or object afloat in water.", + "A raft is a large, flat structure that is typically made of wood.", + "A raft is a small, flat, buoyant structure that is used to support people or objects in water.", + "A raft is a flat structure that is used to float on water.", + "A raft is typically a large, flat, portable platform that is propelled across water by paddles or oars.", + "A raft is a platform built from wood logs or other materials that is used for floating on water.", + "A raft is a flat bottomed boat that is typically used in calm water.", + "A raft is typically a flat, sturdy platform that is used for floating on water.", + "A raft is a flat structure that is buoyant and is used to float on water." + ], + "rag doll": [ + "A rag doll is a toy doll that is typically made from fabric.", + "A rag doll is typically a handmade doll that is constructed from scraps of fabric.", + "A rag doll is a type of toy that is traditionally made from cloth.", + "A rag doll is typically a child's toy made from fabric.", + "A rag doll usually has a soft body made from cloth, and a head and limbs made from wood or cloth.", + "A rag doll is typically a handmade doll that is constructed from scraps of fabric.", + "A rag doll is a toy doll made from cloth.", + "A rag doll is a handmade toy made from cloth that is stuffed with soft material.", + "A traditional rag doll has a cloth body with string or yarn hair.", + "A rag doll is a toy sewn from a piece of cloth in the shape of a human." + ], + "raincoat": [ + "Raincoats located in the United States are typically made out of synthetic rubber, Gore-Tex, or other waterproof and breathable fabrics.", + "A raincoat usually looks like a coat that is made out of a waterproof material.", + "A raincoat is a coat made of waterproof fabric that is worn to protect the body from rain.", + "A raincoat is typically a yellow or blue-green coat made of waterproof material.", + "A raincoat is a coat made of waterproof material that is worn during rainy weather to keep a person's body and clothes dry.", + "A typical raincoat is made of waterproof or water-resistant material and has a hood to protect the head from the rain.", + "A raincoat typically has a hood and is made out of a waterproof material.", + "A raincoat is usually a yellow or bright green waterproof jacket that goes over your clothes.", + "A raincoat usually has a hood and is made out of a waterproof and sometimes lined material.", + "A raincoat is typically a yellow, pull-over coat made of a waterproof material." + ], + "ram (animal)": [ + "A ram is a male sheep.", + "Rams are a type of sheep with large, curved horns on their head.", + "A ram is a male sheep.", + "A ram is a male sheep.", + "A ram is a male sheep.", + "Sheep are typically found in hilly or mountainous regions.", + "A ram is a male sheep.", + "A ram is a sheep with horns.", + "A ram is a male sheep.", + "A ram is a male sheep with horns." + ], + "raspberry": [ + "A raspberry is a small red fruit with a seed-filled center.", + "A raspberry is a small, red fruit that looks like a cross between a blackberry and a drop of blood.", + "A raspberry is a round, red fruit with a white center.", + "A raspberry is a small, red fruit that is filled with tiny seeds.", + "A raspberry is a small, red fruit with a hollow center.", + "A raspberry is a red fruit that has a lot of small seeds in it.", + "A raspberry is a small, red fruit with a tart, sweet taste.", + "A raspberry is a small, red fruit that grows on a bush.", + "A raspberry is a small, red fruit that grows on a bush.", + "A raspberry is a small red fruit that is often found in pies and other desserts." + ], + "rat": [ + "A rat is a small, rodent-like mammal with a pointy nose, long tail, and small, furry ears.", + "A rat is a small, long-tailed mammal with dark fur.", + "Rats are typically long and thin with pointed noses.", + "A rat typically has a reddish brown fur, although there can be some variation in color.", + "A rat is a small mammal with a pointed nose, furry ears, and a long, scaly tail.", + "Rats are typically brown or black with a long body and a tail.", + "A rat is a mammal of the family Muridae, typically a Norway rat, brown rat, or black rat.", + "A rat typically has a long body, small head, and long tail.", + "Rats are long-tailed, medium-sized rodents with small eyes and ears, and furry bodies.", + "A rat is a small mammal with a long tail." + ], + "razorblade": [ + "A razorblade is a thin, sharp piece of metal that is used to shave hair off of skin.", + "A razorblade is a small, sharp blade that is used to cut hair and other materials.", + "A razorblade is a thin blade of metal, usually less than an inch long, used for shaving or cutting hair or other materials.", + "A razorblade is a thin piece of metal with a sharp edge that is used for shaving hair.", + "A razorblade is a thin piece of metal with a sharp edge on one side.", + "A razorblade is a thin piece of steel with a sharp edge that is used for shaving hair.", + "A razorblade is a thin, sharp piece of metal that is used to shave hair off of skin.", + "A razorblade is a thin, sharp blade that is used to remove hair or as a tool for shaving.", + "A razorblade is a thin, sharp blade that is used for shaving.", + "A razorblade is a thin, sharp piece of metal that is used to shave hair off of skin." + ], + "reamer (juicer)": [ + "A reamer is a tool that is used to juice fruits.", + "A reamer is a manual juicer that is used to juice citrus fruits.", + "It looks like a small, handheld drill with a cylindrical attachment on the end.", + "A reamer is a tool used to juice fruits.", + "A juicer is a kitchen appliance that extracts juice from fruits, vegetables, and leafy greens.", + "A reamer is a handheld tool that is used to juice fruits.", + "A reamer is a small manual juicer typically used for citrus fruits.", + "A reamer typically has a handle attached to a conical, oval, or cylindrical gear with sharp teeth.", + "Assuming you are referring to a manual reamer, it is a small handheld tool with a cylindrical grater.", + "A reamer is a kitchen tool that is used to extract juice from fruits." + ], + "rearview mirror": [ + "A rearview mirror is typically a small, rectangular mirror that is attached to the front windshield of a car.", + "A rearview mirror is a small reflective surface mounted on the windshield of a vehicle.", + "A rearview mirror is a piece of glass that is placed on the inside of a car so that the driver can see what is behind them.", + "A rearview mirror is a piece of glass that is attached to the inside of a car.", + "Most rearview mirrors are either flat or convex.", + "A rearview mirror is usually found in the upper center of a car's windshield and is convex, so that it provides a wider view of the area behind the car.", + "\nA rearview mirror is a mirror that is mounted on the front windshield of a vehicle, typically in the upper center portion.", + "A rearview mirror is usually a mirror mounted on the inside of a car, van, or other vehicle, at the driver's eyeline.", + "A rearview mirror is a mirror that is mounted on the inside of a car, truck, or other vehicle, and is used to give the driver a view of what is behind the vehicle.", + "A rearview mirror is typically a flat piece of glass that is mounted on the inside of a vehicle in the upper corner of the windshield on the driver's side." + ], + "receipt": [ + "A receipt is a printed document that shows the customer's name, the amount of money paid, the date and time of the purchase, and a brief description of what was bought.", + "In the United States, a receipt is a document that is typically printed out by a business after a customer has paid for goods or services.", + "A receipt is a document that shows that something has been paid for.", + "A receipt generally has the name of the company at the top, followed by the date, time, location, and purchase.", + "A receipt is generally a piece of paper that has writing on it.", + "A receipt shows the items purchased, the price of each item, the total amount due, and the method of payment.", + "A receipt looks like a piece of paper that has writing on it.", + "A receipt looks like a piece of paper with writing on it.", + "A receipt is a written acknowledgment that a person has received money or goods.", + "Most receipts are small pieces of paper that list the items that have been purchased, the date of purchase, the total cost of the purchase, and the method of payment." + ], + "recliner": [ + "A recliner typically looks like a large armchair with a lever on the side that allows the chair to be tilted back into a position where the legs can be elevated.", + "A recliner is usually a large, comfortable chair with a footrest that can be raised or lowered.", + "A recliner typically looks like an armchair with a footrest that can be extended.", + "A recliner is a piece of furniture that looks like a chair, but has a leg rest that pops out from the bottom and a back that reclines.", + "A recliner is a type of armchair or sofa with a reclining backrest.", + "A recliner typically looks like a chair with a footrest that can be extended to support the legs.", + "A recliner is a type of chair with a built-in footrest that can be raised or lowered using a lever or knob.", + "A recliner is a chair with a footrest that can be raised or lowered using a lever on the side of the chair.", + "A recliner is a seat with a backrest that can be tilted back and forth to recline.", + "A recliner is a type of chair with a footrest that can be raised or lowered using a lever." + ], + "record player": [ + "A record player is a device that has a spinning disc that holds a vinyl record.", + "A record player is a large, bulky machine that consists of a big, black disc that spins around.", + "A record player looks like a small, rectangular box.", + "A record player is a device that is used to play vinyl records.", + "A modern record player is a digital device that usually takes the form of a rectangular box.", + "A record player consists of a flat turntable with a central spindle on which a record can be placed, a tonearm with a stylus that rides in the record's grooves, and a phono cartridge beneath the styl.", + "A record player is a generally framed disk with a handle on the edge used to rotate a vinyl record on a turntable.", + "A record player is a device that spins a vinyl record at a constant speed and plays the audio through a connected speaker.", + "A record player typically has a base, a turntable, a Tonearm with a cartridge, a felt mat, and a dust cover.", + "A record player is a device that is used to play vinyl records." + ], + "reflector": [ + "A reflector is usually a piece of metal that is curved to focus light or sound waves.", + "A reflector is a piece of metal or other material that reflects light or sound waves.", + "A reflector is a small, shiny object that reflects light.", + "A reflector is a mirror-like surface that reflects light, sound, or heat.", + "A reflector is usually a piece of metal or glass that is curved so that it can reflect light or sound waves.", + "A reflector is usually a shiny, metal surface that reflects light equally in all directions.", + " on a go-kartA reflector on a go-kart is a small, flat piece of plastic or metal that is attached to the back of the kart.", + "A reflector is a smooth, polished surface that reflects light in a very specific direction.", + "A reflector is a device that is used to reflect light or sound waves.", + "A reflector is a flat or curved surface that reflects light in a specific direction." + ], + "remote control": [ + "A remote control is a small, hand-held device that is used to control a variety of electronic devices, including televisions, DVD players, and stereos.", + "A remote control typically has a number of buttons on it which can be used to control a piece of electronic equipment.", + "A remote control is typically a small handheld device that has a few buttons on it.", + "A remote control is a small, handheld device that is used to control a larger device from a distance.", + "In general, a remote control is a small handheld device that is used to operate a piece of equipment from a distance.", + "A remote control can vary in size and shape, but most have a flat surface with buttons of various sizes that can be pressed to control the device it is paired with.", + "remote controls are typically small rectangular handheld devices with a limited number of buttons for controlling a device.", + "A remote control is a small hand-held device that is used to operate a television, DVD player, or other electronic device from a distance.", + "Most remote controls are small, hand-held devices that have an array of buttons on them.", + "A remote control is a small, hand-held device that is used to operate a television, DVD player, or other electronic device from a distance." + ], + "rhinoceros": [ + "A rhinoceros is a large, gray mammal with a thick hide.", + "A rhinoceros is a massive, horned mammal.", + "A rhinoceros is a large mammal with thick, gray skin.", + "A rhinoceros is a large mammal with thick, gray skin.", + "A rhinoceros is a large mammal with thick, gray-brown skin.", + "Rhinoceros are large, thick-skinned animals with two horns on their snouts.", + "A rhinoceros is a large mammals with thick, grey skin.", + "A rhinoceros is a large, grayish-brown mammal with one or two horns on its nose.", + "A rhinoceros is a large mammal with thick, gray skin.", + "A rhinoceros is a large, mammal with thick, gray skin." + ], + "rib (food)": [ + "A rib is typically a long, thin, curved piece of meat that is attached to the chest wall.", + "A rib is a long, curved bone that extends from the spine.", + "A rib is a long, thin, curved bone that forms the upper and middle part of the back.", + "A rib is a portion of meat that is cut from the rib section of an animal, usually a cow, pig, or lamb.", + "A rib is a long, skinny piece of meat that is attached to the spine.", + "A rib is a long, thin, curved bone that is used for meat.", + "The skirt steak is a long, flat cut of beef that comes from the plate primal of the cow.", + "A rib is a type of food that is typically long and thin.", + "A rib is a type of meat that is long and thin.", + "A rib is a long, thin, narrow piece of meat." + ], + "rifle": [ + "A rifle is a long gun with a rifled barrel.", + "A rifle typically has a long barrel and is held against the shoulder when firing.", + "A rifle is a long gun with a rifled barrel, used for accurate shooting.", + "A rifle typically has a long barrel and a stock that is placed against the shoulder when firing.", + "A rifle looks like a long, thin gun with a handle at the top and a trigger at the bottom.", + "A rifle typically has a long barrel and a stock, and can be either semi-automatic or automatic.", + "A rifle is a long gun with a stock and a barrel that is rifled.", + "A rifle is a long gun with a rifled barrel, designed to be fired from the shoulder.", + "A rifle is a long gun with a rifled barrel, used for accurate shooting.", + "A rifle typically has a long barrel and a stock, and is designed to be fired from the shoulder." + ], + "ring": [ + "A ring typically looks like a small, circular band.", + "A ring is a circular piece of jewelry that is worn on a finger.", + "A ring is a small, round piece of jewelry that is worn on a finger.", + "A ring is typically a small, circular piece of metal that is worn on a finger.", + "A ring is typically a circular piece of jewelry that is worn on a finger.", + "A ring typically consists of a band of precious metal (such as gold, silver, or platinum) that is worn around the finger.", + "A ring typically consists of a metal band that circles the finger.", + "A ring is a round band of precious metal, such as gold or silver, typically set with jewels, worn on the finger as an ornament or a sign of marriage.", + "A ring generally has a round,metal band that is worn on the finger.", + "A ring typically consists of a band of metal with a stone or other ornamentation attached to it." + ], + "river boat": [ + "A typical river boat is a large flat-bottomed vessel with a shallow draft, used primarily for transporting goods and passengers over inland waterways.", + "A river boat typically looks like a long and narrow vessel that is designed for maxing speed and efficiency while carrying cargo down a river.", + "A river boat is typically a large, flat-bottomed vessel that is propelled by oars, sails, or an engine.", + "A river boat is a small craft designed for travel on rivers.", + "A river boat is like a large ship, but it is designed to navigate in shallow waters.", + "A river boat is a large boat that can hold many people and cargo.", + "A river boat is a long, narrow boat that is propelled by oars or a motor.", + "River boats come in all different shapes and sizes.", + "A large river boat is typically long and large enough to hold multiple vehicles, passengers, and cargo.", + "A river boat is a vessel designed for carrying passengers or goods on a river." + ], + "road map": [ + "A road map looks like a map of the roads in an area.", + "A road map is a map that shows the main roads of an area.", + "A road map generally shows a network of roads and highways, as well as their junctions, in a region.", + "Most road maps are drawn to scale, meaning that the distances between the different features shown on the map are generally accurate when compared to real-life distances.", + "A road map is a graphical representation of a network of roads.", + "A road map typically contains a list of destinations, and the routes one can take to get there.", + "A road map generally has a large scale so that it shows a lot of detail, including the network of roads, towns, and landmarks across a region.", + "A road map is a map that shows roads and other features like cities and landmarks.", + "A road map typically looks like a traditional map, with all the roads and major landmarks labeled.", + "A road map is a map that shows roads and often other features like cities, airports, and landmarks." + ], + "robe": [ + "A robe is a type of clothing that is worn to cover the body.", + "A robe is a long, loose garment that is often worn over other clothing.", + "A robe is a type of loose-fitting outer garment.", + "A robe is a type of clothing that is worn to provide warmth and cover the body.", + "A robe is a garment worn by men or women that consists of a long, loose-fitting outer garment that is typically tied at the waist with a belt or sash.", + "A robe is a type of clothing that is worn by men and women.", + "A robe is a loose-fitting outer garment that is typically worn before bedtime or after a bath or shower.", + "A robe is a long, loose garment that is typically worn over other clothing.", + "Typically, a robe is a loose-fitting outer garment that is worn over other clothing.", + "A robe is a loose-fitting outer garment that is typically worn before bed or after a bath." + ], + "rocking chair": [ + "A rocking chair typically has four legs, two arms, and a backrest.", + "A rocking chair typically has a curved backrest and flared legs.", + "A rocking chair is a chair with two curved pieces of wood at the bottom of the legs.", + "A rocking chair is a chair with two curved pieces of wood attached to the bottom of the legs.", + "A rocking chair is a chair with two curved pieces of wood attached to the bottom of the legs.", + "A traditional rocking chair has four legs, two arms, and a seat and backrest.", + "A rocking chair is usually a wooden chair with a curved back and seat.", + "A rocking chair generally has four legs, two arm rests, and a slanted back.", + "A rocking chair typically has a wooden frame with a seat and backrest.", + "A rocking chair is a chair with two curved bands of wood or metal at the bottom of the legs." + ], + "rodent": [ + "Most rodents are small animals with long tails and big front teeth.", + "There is no one answer to this question as there are many different species of rodents.", + "A rodent looks like a small mammal with long front teeth.", + "Rodents are small animals with large front teeth.", + "A rodent is a small mammal that has long front teeth that protrude from the mouth.", + "The word rodent is derived from the Latin word rodere, meaning \"to gnaw.", + "There is no one answer to this question since rodents come in many different shapes and sizes.", + "A rodent is a mammal of the order Rodentia, typically characterized by a long snout, short legs, and small eyes.", + "A rodent is a small mammal that typically has a long body, fur, and a tail.", + "A rodent looks like a small mammal with a long tail." + ], + "roller skate": [ + "A roller skate is a shoe with a roller attached to the bottom.", + "Roller skates look like shoes with four wheels attached to the bottom.", + "A roller skate is a shoe typically worn for sport or recreation that has a small wheel or wheels at the bottom.", + "A roller skate is a shoe with a small wheel on the bottom.", + "A roller skate consist of a boot with a plate attached to the bottom.", + "A roller skate looks like a boot with skates attached to the bottom.", + "Image result for drawing of a roller skateA roller skate typically consists of a shoe with a low-cut heel and a boot, attached to four small wheels.", + "A roller skate is a shoe with a wheel attached to the bottom.", + "A roller skate is a shoe with four wheels on the bottom, two in the front and two in the back.", + "A roller skate has four small wheels arranged in a oval shape." + ], + "Rollerblade": [ + "A Rollerblade looks like a small piece of metal with a plastic or rubber cover.", + "A Rollerblade is a type of blade that is attached to the bottom of a shoe.", + "A Rollerblade looks like a shoe with a wheel attached to the bottom.", + "A Rollerblade is a shoe with a built-in roller for skating on sidewalks, in parks, or in rink environments.", + "A Rollerblade is a type of shoe with wheels attached to the bottom.", + "A Rollerblade is a boot with four wheels on the bottom that are used for skating.", + "A Rollerblade is a shoe with a blade attached to the bottom.", + "A Rollerblade is a skate with four wheels, arranged in two pairs, that is worn on the feet.", + "A Rollerblade is a shoe with a built-in roller skate.", + "A Rollerblade looks like a skate with one blade instead of two." + ], + "rolling pin": [ + "A rolling pin is a tube of wood or metal with a handle at each end, used to roll out dough.", + "The rolling pin is a long, cylindrical stick that is used to roll out dough.", + "A rolling pin is a cylindrical kitchen tool made of wood, plastic, or metal used to shape and flatten dough.", + "A rolling pin is a kitchen utensil used to roll out dough.", + "A rolling pin is a straight, narrow, rolling cylinder with handles at either end.", + "A rolling pin is a cylindrical kitchen utensil used to roll out dough.", + "A rolling pin is a long, slim cylinder, typically made of wood, with tapered ends.", + "A rolling pin is a rod-shaped kitchen tool used to roll out dough.", + "A rolling pin typically consists of a long, solid cylinder made from wood or ceramic.", + "A rolling pin is usually a long, solid piece of wood or marble with a smooth surface." + ], + "root beer": [ + "A root beer typically has a dark brown color and is often described as having a \"muddy\" appearance.", + "A root beer is a dark brown, foamy beverage that is typically served in a mug.", + "A root beer typically has a dark brown color and is carbonated.", + "Root beer is a dark brown, carbonated beverage that is often served in a frosted mug.", + "\n Root beer is usually a dark brown color and is less transparent than other sodas.", + "A root beer typically has a dark brown color and is often carbonated.", + "A root beer is brown in color, similar to cola, and has a foamy white head.", + "Root beer is a dark brown, carbonated beverage that is traditionally made with sassafras root extract.", + "A root beer is usually a dark brown color and is very carbonated.", + "Root beer is typically a dark brown color and is carbonated." + ], + "router (computer equipment)": [ + "A router typically looks like a small, black box with multiple antennas protruding from the top.", + " and what it doesA router is a small, box-shaped computer equipment that connects two or more computer networks.", + "Most routers are small boxes with several antennae protruding from the top.", + "A router is a box that is usually provided by your Internet service provider.", + "Routers are small, box-shaped computer equipment that can be placed on a table or desk.", + "A router is a small, rectangular box with several ports on the front and back.", + "A router is a small, rectangular box with multiple antennas sticking out of the top.", + ".", + "A router is a device that connects two or more network segments.", + "Most routers are cube-shaped and have several antennas protruding from the top." + ], + "rubber band": [ + "A rubber band is a thin, elastic band made of rubber that is used to hold things together or to keep something in place.", + "A rubber band is a strip of rubber or other elastic material that is used to hold things together or to keep something in place.", + "A rubber band is a circular band of elastic material used to hold objects together or to store energy.", + "A rubber band is a circular band of elastic material used to hold objects together or to keep them from moving.", + "A rubber band is a loop of elastic material that can be stretched and retracted.", + "A rubber band is usually a circular or oval-shaped loop of rubber that is used to hold objects together or to keep something in place.", + "A rubber band is a thin band made of rubber, typically used to hold objects together or to keep clothing in place.", + "A rubber band looks like a slim, oblong strip of rubber.", + "A rubber band is a strip of elastic material that is used to hold things together or to keep things in place.", + "A rubber band is a small, elastic, looped band made of rubber that is used to hold things together or to keep things in place." + ], + "runner (carpet)": [ + " typically a runner is a long, narrow piece of fabric or carpet.", + "A carpet runner is a long, narrow rug that is placed in the middle of a hallway or other high-traffic area.", + "A runner is a narrow strip of fabric, often decorated, that is used to cover the path of a person walking or running.", + "A runner is a narrow piece of carpeting that is typically used in high-traffic areas, such as hallways, staircases, and entryways.", + "A runner (carpet) typically looks like a long, narrow strip of fabric that is used to cover a floor.", + "A runner is a narrow strip of carpet that is used to cover a floor.", + "A runner is a narrow strip of carpeting, typically 3 to 4 feet wide, that is used to cover high-traffic areas, such as hallways, stairs, and entryways.", + "A runner (carpet) is a long, narrow strip of fabric or other material used to cover a floor or part of a floor.", + "A carpet runner is a narrow rectangular piece of carpeting that is used to cover a floor area.", + "A runner is a piece of carpet that is used to cover a floor, usually in a hallway or stairway." + ], + "plastic bag": [ + "A plastic bag is a bag made of plastic.", + "A plastic bag is usually a thin, transparent sheet of plastic.", + "A plastic bag typically looks like a thin, transparent sheet of plastic.", + "A plastic bag is a thin, flexible, synthetic material that is used to store or carry food, clothing, or other items.", + "A plastic bag is a bag made of plastic, usually with a handle.", + "A plastic bag generally has a rectangular shape and is made out of thin, flexible plastic.", + "A plastic bag is usually a light-weight, thin material that is made from polyethylene.", + "Most plastic bags are thin, flexible sheets made of polyethylene.", + "A plastic bag is a thin, typically transparent, plastic film material used for packaging various products.", + "A plastic bag is a thin, reusable bag made of plastic." + ], + "saddle (on an animal)": [ + "A saddle is a piece of equipment that is placed on the back of an animal, usually a horse, in order to be ridden.", + "A saddle is a piece of equipment that is placed on the back of an animal, typically a horse, in order to ride it.", + "A saddle is a piece of equipment that is placed on the back of an animal, typically a horse, in order to be ridden.", + "A saddle on an animal is a piece of equipment that is placed on the animal's back in order to ride it.", + "A saddle is a piece of equipment placed on the back of an animal to allow a person to sit on the animal and ride it.", + "A saddle is a piece of tack that is placed on the back of an animal to enable a person to ride.", + "A saddle is a piece of equipment that is placed on the back of an animal, usually a horse, in order to allow a rider to sit on the animal's back.", + "The saddle on an animal is a piece of equipment that sits on the animal's back and is used to help the rider stay on the animal.", + "A saddle is a piece of equipment that is placed on the back of an animal, often a horse, to allow a rider to sit on the animal's back and control its movement.", + "A saddle is a piece of equipment that is placed on the back of an animal, often a horse, to allow a person to sit and ride the animal." + ], + "saddle blanket": [ + "A saddle blanket is typically a thick, woven fabric that is placed over a horse's back before saddling.", + "A saddle blanket is a rectangular piece of fabric, usually wool, that is placed over a horse's back before putting a saddle on.", + "A saddle blanket is a type of blanket that is placed on the back of a horse or other animal that is being ridden.", + "A saddle blanket is rectangular and typically made of wool.", + "A typical saddle blanket is a rectangular piece of wool or synthetic fabric, measuring approximately 36 inches by 34 inches.", + "A saddle blanket is typically a brightly-colored piece of fabric that is placed over a horse's saddle before riding.", + "A saddle blanket is a type of blanket that is placed on a horse's back before saddling.", + "A saddle blanket is a type of horse blanket that is placed on a horse's back before saddling.", + "A saddle blanket is a type of blanket that is placed on top of a horse's saddle.", + "A saddle blanket is a type of blanket that is placed on top of a horse's saddle." + ], + "saddlebag": [ + "A saddlebag is a small bag that is worn over the shoulder and hangs down to the waist.", + "A saddlebag is a type of bag that is often used to carry items on a horse.", + "A saddlebag is a large, typically cylindrical bag that is attached to the back of a horse or other animal.", + "A saddlebag has two compartments, one on each side of a bicycle, motorcycle, or horse, for carrying equipment.", + "A saddlebag is a cylindrical bag that is attached to a saddle.", + "A saddlebag is a type of bag that is typically worn over one shoulder and across the body.", + "A saddlebag is usually a cylindrical or rectangular bag that is worn over the shoulder or around the waist, with a long strap that goes across the body.", + "A saddlebag is a type of bag that is often used for carrying items while riding a horse.", + "A saddlebag is a type of bag that is often used to carry supplies on a horse.", + "A saddlebag is a bag that is often hung over the back of a horse or other animal, used for carrying food, equipment, or other supplies." + ], + "safety pin": [ + "A safety pin is a small pin with a pointed end and a round head.", + "A safety pin is a small, thin metal pin with a pointed end and a round head.", + "A safety pin is a pin with a locking mechanism that is used to fasten fabric or clothing together.", + "A safety pin is a small, thin metal pin with a point at one end and a small, circular eye at the other.", + "A safety pin is a small metal pin with a point at one end and a circular guard at the other.", + "A safety pin is a small, Sharp pin with a springs and a locking mechanism.", + "A safety pin is a pin with a simple mechanism that secures the pin to fabric without piercing it.", + "A safety pin is a metal pin with a pointed end and a round end.", + "A safety pin is a small, thin, pointy object with a metal curve at the end.", + "A safety pin is a small metal pin with a pointed end and a round head." + ], + "sail": [ + "A sail looks like a large rectangular piece of cloth that is attached to a mast on a boat.", + "A sail is a piece of fabric that is attached to a mast on a boat.", + "A sail is flat and has a mast in the middle.", + "A sail is a large piece of fabric that is attached to a mast.", + "A sail is a piece of fabric that is attached to a mast of a boat.", + "A sail is a piece of fabric that is attached to a mast of a boat.", + "A sail is a large piece of fabric that is attached to a mast on a boat.", + "A sail is a piece of fabric that is attached to a boat.", + ".", + "A sail typically looks like a large, rectangular piece of fabric that is attached to a mast." + ], + "salad": [ + "A salad typically consists of lettuce, spinach, or arugula, as well as other leafy greens and vegetables like tomatoes, onions, carrots, and cucumbers.", + "A salad can be any combination of vegetables, fruits, meats, cheeses, and nuts.", + "A salad is a dish of chopped vegetables and/or fruits, usually including a leafy green such as lettuce.", + "A salad is a cold dish of chopped vegetables and/or fruit, usually served with a dressing.", + "A salad can look like a lot of things, but generally it is a mix of greens and other vegetables (often raw) with a dressing.", + "A salad is typically a mix of greens (lettuce, spinach, kale, etc.", + "A salad is typically a mix of greens, vegetables, and fruits.", + "A salad looks like a healthy mix of greens and colorful vegetables.", + "A salad is typically a mix of leafy greens and other vegetables, which can be tossed in a dressing.", + "A salad can be composed of a variety of different ingredients, but typically includes greens, vegetables, and fruits." + ], + "salad plate": [ + "A salad plate is a small, round plate that is usually white or light-colored.", + "A salad plate is a small plate, typically around 6-8 inches in diameter, that is used for serving salad.", + "A salad plate is typically smaller than a dinner plate, with a diameter of around 6 to 8 inches.", + "A salad plate is typically a lighter colored plate with a embossed edge.", + "A salad plate is typically a small, flat plate with a wide rim.", + "A salad plate is generally around 8 inches in diameter and has a wide, shallow rim.", + "A salad plate generally looks like a smaller dinner plate, and is used for serving salad or appetizers.", + "A salad plate is typically a small, round plate with a slightly raised edge.", + "A salad plate is a small plate, typically around 9 inches in diameter, that is used for serving salads.", + "A salad plate is a small, round plate that is typically used for side dishes or salads." + ], + "salami": [ + "A salami is a dry, cured sausage that is typically made from a mix of pork and beef.", + "A salami often looks like a long, thin, red cylinder.", + "A salami is a flat, cured sausage that is typically made from pork.", + "A salami is a dry, cured sausage that is typically made from pork.", + "A salami is a cured, dried, and fermented sausage typically made from beef, pork, or a combination of the two.", + "A salami is a dry, cured sausage that is typically made from beef, pork, or a combination of the two.", + "A salami is a curved, tube-shaped, dry sausage that is usually made of pork.", + "A salami is a cylindrical, cured sausage that is typically made from pork, although beef or veal can also be used.", + "A salami is a thin, air-dried sausage that is typically made from beef, pork, or a combination of the two.", + "A salami is a type of cured sausage that is typically made from pork, beef, or lamb." + ], + "salmon (fish)": [ + "A salmon is a fish with small scales covering its body.", + "A salmon fish typically has a reddish pink body, with dark spots on its skin.", + "Salmon are a type of fish that typically have pink or orange flesh, and a silver or greenish skin.", + "A salmon is a fish with orange/pink flesh and a silver skin.", + "A salmon is an oily fish that ranges in color from light pink to dark red.", + "Salmon typically have an elongated body with small scales that overlie a thin skin.", + "A salmon is a pinkish-orange fish with large scales.", + "The body of a salmon is long and streamlined, with a small head and a large mouth.", + "A salmon is an oily fish that ranges in color from pinkish-orange to red.", + "A salmon is a fish that typically has a reddish-orange body with dark spots." + ], + "salmon (food)": [ + "A salmon is pink to red in color, with a white belly.", + "A salmon is a pinkish-orange fish that is often served cooked.", + "A salmon is a pinkish-orange fish with a large head and small eyes.", + "A salmon is a pinkish-orange fish that is commonly found in the ocean.", + "A salmon is a type of fish that is typically pink or orange in color.", + "A salmon is an oval-shaped fish with pinkish-orange flesh and a greenish-blue head.", + "Salmon is a fish with pinkish-orange flesh and a silver skin.", + "A salmon is a fish with a pink or orange body and a silver belly.", + "A salmon is typically an orange-pink color, with a white belly.", + "A salmon typically has a pink or orange body with white spots." + ], + "salsa": [ + "A salsa typically consists of tomatoes, onions, cilantro, and Jalape\u00f1o peppers.", + "A salsa typically contains chopped tomatoes, onions, peppers, and herbs.", + "Salsa is typically a smooth, wet sauce made from a blend of tomatoes, onions, peppers, and spices.", + "A salsa typically contains chopped tomatoes, onions, cilantro, and green chilies.", + "A salsa is a thick, chunky sauce made from tomatoes, onions, chilies, and other spices.", + "A salsa is a coarse sauce made from tomatoes, onions, chili peppers, and other fresh ingredients.", + "A salsa is a smooth, thick sauce made from chopped tomatoes, onions, peppers, and spices.", + "A salsa typically consists of tomatoes, onions, chili peppers, and garlic, chopped and mixed together.", + "A salsa typically has a chunky texture and is made up of tomatoes, onions, cilantro, and green peppers.", + "A salsa typically contains chopped tomatoes, onions, cilantro, and Serrano peppers." + ], + "saltshaker": [ + "A saltshaker typically has a wide base and a skinny neck with a small hole at the top.", + "A saltshaker is a small container with a hole in the top that is used to sprinkle salt on food.", + "A salt shaker is a small container with a hole in the top and a perforated lid.", + "A typical saltshaker has a perforated top for sprinkling salt and a chamber for holding salt.", + "A saltshaker is a small container that is used to hold salt.", + "A salt shaker is typically a small container with a narrow opening at the top and holes in the lid.", + "A saltshaker generally has a cylindrical body with a perforated top for sprinkling salt.", + "Traditionally, a saltshaker is a small, cylindrical container with a perforated lid that is used to sprinkle salt on food.", + "A saltshaker is a small, cylindrical container with a perforated top that is used to sprinkle salt on food.", + "A saltshaker is typically a small, cylindrical container with a perforated lid that is used to sprinkle salt on food." + ], + "sandal (type of shoe)": [ + "A sandal is a type of shoe that has a strap or straps that go over the top of the foot or around the ankle.", + "A sandal looks like a shoe with an open toe and an open back.", + "A sandal is typically a shoe with an open toe and an ankle strap.", + "A sandal typically has a strap or multiple straps that go over the foot and around the ankle or up the leg.", + "A sandal typically has a strap or multiple straps that go over the top of the foot and around the ankle.", + "A sandal is a type of shoe that typically has an open top and is held to the foot by straps that go over the toes and around the ankle.", + "A sandal is a type of shoe with an open toe and heel.", + "There are many types of sandals, but they typically have a straps or band that goes over the top of the foot and around the ankle, and they are open-toed.", + "A sandal is a type of shoe that typically has a strap or straps that go over the top of the foot and between the toes.", + "A sandal typically has a strap or series of straps that goes over the top of the foot and around the ankle." + ], + "sandwich": [ + ".", + "A sandwich is two slices of bread with some sort of filling in between.", + "A sandwich is two slices of bread with filling in the middle.", + "A sandwich is typically a piece of bread with some type of filling inside of it.", + "A sandwich is a food item consisting of two pieces of bread with one or more fillings in between.", + "A sandwich is a food item typically consisting of two pieces of bread, with some sort of filling in between.", + "A sandwich is a layer of meat, cheese, and vegetables between two slices of bread.", + "\nA sandwich is two slices of bread with regional variations of fillings between the slices.", + "A sandwich is a food item that typically consists of two pieces of bread with a filling in between.", + "A sandwich is a piece of bread with a topping, such as meat, cheese, or vegetables, on top of it." + ], + "satchel": [ + "A satchel is a type of bag with a long strap that is worn over the shoulder.", + "A satchel looks like a small to medium sized bag, typically with a strap, made from leather or another sturdy material.", + "A satchel is a small bags with a strap that goes over the shoulder.", + "A satchel is a type of bag that is typically worn over the shoulder.", + "A satchel is a type of bag, often with a strap, that is used for carrying books, papers, or other items.", + "A satchel has one long strap that goes over the shoulder, and a short handle.", + "A satchel is a type of bag, often with a strap, that is used for carrying books and other items.", + "A satchel bag is typically a rectangular-shaped bag that has a strap.", + "A satchel is a type of bag, often with a strap, that is used for carrying schoolbooks, notebooks, and other materials.", + "A satchel is a bag that has a long strap that goes over the shoulder." + ], + "saucepan": [ + ".", + "A saucepan has a deep, circular shape with a handle on one side.", + "A saucepan is a typically cylindrical, deep cooking pot with a handle and a lid.", + "A saucepan is a specific type of kitchen pan that is designed for simmering or boiling wet ingredients on a stove top.", + "A saucepan typically has a long handle and two short handles connected by a metal ring.", + "A saucepan is a kitchen utensil used for cooking food in liquid form.", + "A saucepan is a pan with a long handle and a deep, rounded base.", + "A saucepan is a kitchen utensil that is used to cook food in.", + "A saucepan is a cooking pot with a handle and a lid.", + "A saucepan is a type of cooking pot with a lid and a handle." + ], + "saucer": [ + "A saucer is a small, flat plate with a slightly raised edge, used for holding food or drink.", + "A practical saucer is typically a small, round, flat, porcelain or other ceramic dish used to hold a cup or tea.", + "A saucer is a small, plate-like object that is used for holding beverages or food.", + "A saucer is a round, shallow dish used for serving food.", + "A saucer is a small, round, flat dish with a raised edge that is used for Serve small food items such as biscuits, cakes or sweets.", + "A saucer is a small, flat, round dish with a slightly raised edge, used for holding food or drink.", + "A saucer is a small, flat dish with a slightly raised edge that is used for holding food or drink.", + "A saucer is a small, flat, plate-like object on which coffee or tea is served.", + "A saucer is a small, flat, round dish used for eating or drinking.", + "A saucer is a small, flat dish used for holding food or drink." + ], + "sausage": [ + "A sausage is a cylindrical shape made of ground meat, typically pork, and a variety of spices and other ingredients.", + "A sausage is typically a ground-up mix of pork, beef, or other meats with spices and salt, encased in a thin skin.", + "A sausage is typically a cylindrical shaped food made from ground meat, spices, and other ingredients.", + "A sausage is a long, thin, cylindrical piece of meat.", + "Sausages are typically long, cylindrical shaped foods made from ground meat and spices.", + "A sausage is a tubular meat product typically made from ground pork, beef, or poultry.", + "A sausage is a cylindrical casing filled with meat, typically pork, and various herbs and spices.", + "A sausage looks like a tubular shape made of ground up meat that is usually encased in a thin layer of intestine.", + "A sausage is a cylindrical casing of meat that is typically filled with ground pork, although many other variations exist.", + "When cooked, a sausage is typically cylindrical and can vary in length." + ], + "sawhorse": [ + "A sawhorse is a wooden or metal support used to hold a piece of wood steady while it is being cut.", + "A sawhorse is typically a rectangular frame with four legs, used to support a board or piece of lumber for sawing.", + "A sawhorse is typically a wood frame with four legs that is used to support objects during construction or woodworking.", + "A sawhorse is typically a V-shaped or X-shaped object that is used to support a piece of wood that is being cut.", + "A sawhorse typically consists of a flat board or plank atop two A-frame legs.", + "A sawhorse is a piece of equipment used to support a sheet of wood during sawing.", + "A sawhorse is a structure made of wood or metal that is used to support a piece of wood while it is being cut.", + "A sawhorse is a portable support used to hold a piece of wood during carpentry work.", + "A sawhorse is a structure used to support a board or piece of lumber when sawing.", + "A sawhorse is a small, three-legged stool that is used to hold wood when it is being cut." + ], + "saxophone": [ + "The saxophone is a long, thin brass instrument with a mouthpiece on one end and a flared bell on the other.", + "The saxophone is a smooth-surfaced instrument with a conical metal body and a wide, flared bell at the end.", + "The saxophone is a woodwind instrument with a single-reed mouthpiece.", + "A saxophone is a wind instrument that looks like a small, curved trumpet.", + "A saxophone looks like a brass wind instrument with a conical body and a curved neck.", + "\nA saxophone is a long, thin, brass instrument with a curved neck.", + "A saxophone is a woodwind instrument.", + "\nThe saxophone is a curved brass instrument with a bell-shaped mouthpiece.", + "A saxophone is a musical instrument that looks like a long, thin tube.", + "A saxophone is typically a long, thin instrument with a curved neck." + ], + "scale (measuring instrument)": [ + " Its basic form consists of a rigid flat surface with calibrations marked on it.", + "A scale is a measuring instrument that is used to measure the weight of an object.", + "Image of a scale: https://commons.", + "A scale is a measuring instrument that uses a graduated ruler to measure distance.", + ".", + "A scale is a measuring instrument that has a graduated (marked) surface and is used to measure or weigh something.", + "Typically, a scale has a large, flat surface on which to place objects, and a weight display that shows the weight of the object(s) on the scale.", + "A scale is a device that is used to measure weight.", + "A scale is a measuring instrument that consists of a graduated scale, usually marked in intervals of arbitrary units, on which objects are weighed.", + "A scale is a measuring instrument that is used to measure the weight or mass of an object." + ], + "scarecrow": [ + "A scarecrow is a dummy made from straw, wood, or cloth that is used to scare birds away from crops.", + "Typically, a scarecrow is a crude figure of a human, made from old clothes and stuffed with straw or hay.", + "A scarecrow is a decoy or mannequin in the shape of a human, which is traditionally used to scare birds away from crops.", + "A scarecrow is a man-made object that is typically used to scare birds away from crops.", + "A scarecrow is a figure, usually in the shape of a human, that is made to look like it is wearing old clothes.", + "A scarecrow is a figure usually made of straw or cloth, which is used to scare birds and other animals away from crops.", + "A scarecrow is a scarecrow.", + "A scarecrow is a guardsman made of straw or other materials, who is used to frighten awaybirds or other animals from crops.", + "A scarecrow is a figure made of straw or wood, typically in the shape of a human, and is used to scare birds away from crops.", + "A scarecrow is a statue made to look like a human, which is typically used to scare birds away from crops." + ], + "scarf": [ + "A scarf is a long, thin piece of fabric that is wrapped around the neck.", + "A scarf is a piece of fabric that is worn around the neck.", + "A scarf is a piece of cloth that is worn around the neck, head, or shoulders.", + "A scarf is a long piece of cloth that is worn around the neck.", + "A scarf is a long thin piece of fabric that is worn around the neck.", + "Typically, a scarf is a long and narrow piece of fabric that is draped around the neck.", + "A scarf is a rectangular or triangular piece of fabric that is worn around the neck.", + "A scarf is a long, thin piece of cloth that is worn around the neck.", + "A scarf is a long, thin piece of cloth that is wrapped around the neck.", + "A scarf is a long, thin piece of cloth that is worn around the neck." + ], + "school bus": [ + "A school bus is a yellow bus with \"SCHOOL BUS\" written in big, black letters on the side.", + "A school bus is a vehicle that is used to transport children to and from school.", + "A school bus is typically a yellow bus with the words \"school bus\" written on the side.", + "A school bus is a large vehicle used to transport children to and from school.", + "A school bus typically looks like a large, yellow bus.", + "Most school buses are yellow and have the words \"school bus\" written on the side.", + "School buses are typically large and yellow.", + "Most school buses are large and yellow.", + "School buses are large yellow vehicles that are used to transport children to and from school.", + "A school bus is a type of bus designed to carry children to and from school." + ], + "scissors": [ + "A typical pair of scissors consists of a pair of metal blades attached to a central pivot.", + "A scissors is a handheld tool designed to cut materials such as paper, hair, wire, or rope.", + "A scissors is a hand-operated cutting tool consisting of two cutting blades attached at a pivot point.", + "A pair of scissors is like two knives that are hinged together in the middle so the blades open and close like a pincer.", + "A pair of scissors consists of a pair of metal blades attached in the middle by a pivot.", + "A pair of scissors consists of a pair of metal blades attached at the pivot point by a rivet.", + "A scissor is a cutting tool that has two blades that are connected at the center by a pivot.", + "A scissors is a object that has two blades that are connected in the middle by a rivet.", + "A pair of scissors consists of a pair of metal blades attached at the pivot point by a screw.", + "A scissors is a cutting tool that consists of two sharpened blades that are connected at a pivot point." + ], + "scoreboard": [ + "Most scoreboards have a large digital or analog display that shows the score for each team in a game.", + "A scoreboard is a large board that displays the score of a game.", + "A scoreboard is a large board that displays the score of a game.", + "A scoreboard typically has two large digital displays that show the score for each team.", + "A scoreboard is a large board that displays the score of a game.", + "A scoreboard is a digital or analog display that shows the score in a game or sporting event.", + "A scoreboard is a digital or analogue display of the score in a game, typically football, rugby, cricket, water polo, netball, basketball, or ice hockey.", + "A scoreboard is a visual display of the progress of a game.", + "Most scoreboards have a large digital or analog clock that counts down the time remaining in the game.", + "Scoreboards are usually large and visible from a distance." + ], + "scraper": [ + "A scraper is usually a rectangular tool with a blade attached to one end.", + " and how it functionsA scraper typically consists of a blade affixed to a handle.", + "A scraper generally consists of a blade held at an angle within a handle.", + "A scraper is a device with a blade or multiple blades that is used to remove material from a surface.", + "A scraper is a device with a sharp blade that is used to remove dirt, snow, or other materials from a surface.", + "A scraper usually consists of a metal blade attached to a handle.", + "A scraper looks like a large metal spoon with a sharp front edge.", + "\nA scraper is a tool that has a sharp blade for scraping surfaces.", + "A scraper is a hand tool with a blade on one end and a handle on the other.", + "A scraper is a tool that is used to remove materials from surfaces." + ], + "screwdriver": [ + "A steel rod with a cylindrical handle and a flat head, usually made of steel, brass, or plastic, that is used to turn screws.", + "A screwdriver is a hand tool that consists of a handle and a blade.", + "A screwdriver is a handheld tool that consists of a handle and a shaft.", + "A screwdriver is a handheld tool that consists of a handle and a shaft.", + "A screwdriver looks like a long, thin rod with a handle on one end and a metal tip on the other.", + "A screwdriver is a hand tool that consists of a handle and a blade.", + "A screwdriver is a hand tool that is used to turn screws.", + "A screwdriver is a long, thin piece of metal with a handle at one end and a flat, cross-shaped head at the other.", + "A screwdriver is a long, thin piece of metal with a flattened tip that is used to turn screws.", + "A screwdriver is a long, thin piece of metal with a handle on one end and a pointed end on the other." + ], + "scrubbing brush": [ + "A scrubbing brush is a tool with bristles that is used to clean surfaces by scrubbing them.", + "A scrubbing brush looks like a brush with bristles that is used for scrubbing.", + "A scrubbing brush is a brush with bristles that is used to scrub surfaces.", + "A scrubbing brush is a brush with stiff bristles that is used to clean surfaces by scrubbing them.", + "A scrubbing brush is a tool with stiff bristles that is used to clean surfaces.", + "A scrubbing brush has a handle and bristles.", + "A scrubbing brush is a circular brush with thick bristles.", + "A scrubbing brush has a long handle and stiff bristles.", + "A scrubbing brush is a brush with stiff bristles that is used for cleaning surfaces.", + "A scrubbing brush is a brush with bristles that is used to scrub surfaces clean." + ], + "sculpture": [ + "A sculpture is a work of art that is created by shaping or combining materials such as stone, metal, or wood.", + "A sculpture is a three-dimensional work of art made from materials such as stone, metal, or wood.", + "A sculpture is an art form that involves shaping a three-dimensional object out of a material like wood, metal, or stone.", + "A sculpture is a piece of art that is three-dimensional.", + "A sculpture is a three-dimensional work of art made of stone, metal, wood, or another material.", + "A sculpture is a three-dimensional work of art, typically made of stone, metal, or wood.", + "A sculpture looks like a three-dimensional work of art.", + "A sculpture is a three-dimensional artwork created by shaping or combining hard materials, typically stone, metal, or wood.", + "A sculpture is a three-dimensional artwork created by shaping or combining hard materials\u2014typically stone, metal, or wood\u2014or by molding or casting soft materials\u2014such as clay, latex, or plaster.", + "A sculpture is a work of art that is three-dimensional." + ], + "seabird": [ + "A seabird is a bird that lives near the sea.", + "A seabird is a bird that lives near water.", + "A seabird is a bird that can fly and swim.", + "Seadbirds are seabirds that have waterproof plumage.", + "Most seabirds have dark feathers on their back and wings, and lighter feathers on their chest and belly.", + "A seabird is a bird that lives in or near the sea.", + "A seabird is a bird that spends most of its time in the water.", + "A seabird is any bird that lives in or near the ocean.", + "Seabirds are typically characterized by having webbed feet, level wings, and feathers that are adapted for waterproofing and for swimming in the water.", + "A seabird is a bird that lives near the sea." + ], + "seahorse": [ + "A seahorse is a small horse-like creature that lives in the water.", + "A seahorse is a small, horse-like creature with a long snout and a tail.", + "A seahorse is a small, horse-like creature that lives in the ocean.", + "A seahorse is a small horse-shaped fish that lives in salt water.", + "Seahorses have a unique shape compared to other fish in the sea.", + "A seahorse is a small, horse-like creature with a long snout and a curly tail.", + "A seahorse has a horse-like head, and a long snout.", + "Seahorses are small, shrimp-like creatures that have a long snout and a prehensile tail.", + "A seahorse is a small, horse-like creature that lives in the ocean.", + "Seahorses are small fish that have a long snout and a horse-like head." + ], + "seaplane": [ + "A seaplane typically has large floats that allow it to take off and land on water.", + "A seaplane is a winged aircraft that is able to land on or take off from a body of water.", + "A seaplane is a flying boat with wings and an airplane-like body.", + ".", + "A seaplane is an airplane that is designed to take off from and land on water.", + "A seaplane is a fixed-wing aircraft designed to take off and land on water.", + "A seaplane looks like a regular airplane, but it has pontoons attached to the bottom of the fuselage so that it can land on and take off from water.", + "A seaplane is an aircraft that can take off and land on both water and land.", + "A seaplane is a powered fixed-wing aircraft designed for taking off and landing on water.", + "A seaplane is a large airplane designed to fly over water." + ], + "seashell": [ + "A seashell is a hard, protective outer layer that covers the soft body of a marine animal.", + "A seashell is a type of hard, protective outer layer that is produced by a variety of animals that live in the sea.", + "A seashell is a hard, protective outer layer that is produced by an animal living in the sea.", + "A seashell is a hard, protective outer layer that animals such as mollusks and turtles use to cover and protect their soft bodies.", + "A seashell looks like a large spiral made from hard material.", + "A seashell is a shell that is found on a beach.", + "Seashells vary in shape, but most are spiral in form.", + "A seashell is a hard, protective outer layer that envelops the body of a marine animal.", + "A seashell is a nautilus shell, a concave spiral shape that is found in nature.", + "A seashell is a hard, protective outer layer that covers the soft body of many marine animals, including mollusks, hermit crabs, and some echinoderms." + ], + "sewing machine": [ + "A sewing machine typically has a base, a arm that holds the needle and thread, and a foot pedal.", + "Most sewing machines are designed to look like a small table with a large arm attached to the side.", + "A sewing machine typically has a base, a sewing needle, a thread holder, a fabric holder, and various buttons or switches.", + "A sewing machine is a machine that is used to stitch fabric together.", + "A sewing machine has a base, a needle, a thread spool, a foot pedal, and various buttons and levers.", + "A sewing machine has a flat base, a sewing needle, a thread spool, a feed dog, and a foot pedal.", + "A sewing machine is a machine that is used to sew fabrics together.", + "A sewing machine has a needle that goes up and down and a foot pedal that makes the needle move.", + "A sewing machine typically has a base, a bed where the fabric is placed, an arm that holds the needle and moves up and down, and a foot pedal that powers the machine.", + "The sewing machine has a base, a needle bar, a hand wheel, a foot pedal, and a thread spool." + ], + "shaker": [ + "A shaker is a kitchen utensil that is used to mix or blend ingredients.", + "A shaker is a container with a lid that has a strainer built into it.", + "A shaker is a container with a lid that has a hole in the top.", + "A shaker is a glass or metal container with a tight-fitting lid that is used to mix ingredients by shaking them.", + "A shaker is a container with a lid that has a strainer built into it.", + "A shaker is a device that is used to hold and mix ingredients.", + "A shaker is a container with a lid that has a hole in the top.", + "A shaker may have many different appearances, but most have a cylindrical or spherical shape with a tight-fitting lid.", + "A shaker is a container used to hold and mix ingredients.", + "A shaker is usually a container with a lid that has a perforated top for shaking ingredients together." + ], + "shampoo": [ + "A shampoo looks like a liquid soap.", + "A shampoo is a clear or opaque viscous liquid that contains detergent-like ingredients.", + "A shampoo is typically a viscous liquid with a low-foaming surfactant.", + "A shampoo is a liquid that is used to clean hair.", + "Most shampoos are a clear or opaque liquid, although some are solid.", + "Clear or opaque liquid with a viscous consistency, often with a bubbles.", + "A shampoo is a liquid that is used to clean the hair.", + "This is a difficult question.", + "A shampoo is typically a clear or opaque gel that is dispensed from a squeezable bottle.", + "A shampoo looks like a clear, viscous liquid." + ], + "shark": [ + "Sharks are fish with a streamlined body and a large dorsal fin.", + "A shark is a large, dark-colored fish with a long, pointy nose.", + "A shark typically has a long, cylindrical body with a pointy nose and a large mouth full of sharp teeth.", + "A shark is a large, gray fish with a pointy nose, sharp teeth, and a long, pointy tail.", + "A shark is a large, predatory fish with a streamlined body and a tooth-filled mouth.", + "Large fish with a pointed nose, sharp teeth, and large eyes.", + "Sharks are fish with a tough, scaly skin.", + "A shark is a large, gray fish with a long, pointy nose.", + "A shark has a streamlined, cone-shaped body with a large mouth full of sharp teeth.", + "A shark typically has a long, torpedo-shaped body with a large mouth full of sharp teeth." + ], + "sharpener": [ + "A sharpener typically consists of a small, handheld device with a slot or hole in which to insert the pencil.", + "A sharpener is a small handheld tool that has a slot for a pencil to be inserted into and two abrasive surfaces that sharpen the pencil's lead.", + "A sharpener usually consists of a guide to hold the pencil in place and one or more blades to sharpen the pencil.", + "A sharpener is a device that is used to sharpen pencils.", + "A sharpener is a small, handheld tool that is used to grind away the dull edges of a pencil to create a sharp point.", + "A sharpener is a handheld tool that has a cylindrical grinder on one end and a sharpening stone on the other.", + "A sharpener typically looks like a small handheld tool with a cylindrical grinder on one end and a handle on the other.", + "A sharpener is a small tool that is used to keep pencils sharp.", + "A sharpener is a device used to keep pencils sharp.", + "It is a small, handheld device with a cylindrical grinder on one end and a sharpening stone on the other." + ], + "Sharpie": [ + "A Sharpie is a type of marker pen with a narrow, fine tip.", + "A Sharpie is a permanent marker.", + "A Sharpie is a pen-like instrument with a felt tip and a small barrel.", + "A Sharpie is a thin, pen-like marker that is used for writing and drawing.", + "A Sharpie is a black felt-tip pen.", + "A Sharpie has a conical tip and a cylindrical barrel.", + "A Sharpie is a black felt tip pen.", + "A Sharpie is a type of pen that has a fine point and is used for writing and drawing.", + "A Sharpie has a pointed tip and a barrel that is usually colored black.", + "A Sharpie has a thin point and a wide body." + ], + "shaver (electric)": [ + "A shaver is an electric device that is used to remove hair from the face.", + "A shaver (electric) is a handheld device that has a rotating blade that shaves hair off of the skin.", + "A shaver (electric) typically has a long, thin handle and a rounded head.", + "A shaver is a handheld electrical device that is used to remove hair from the face, legs, armpits, and other areas of the body.", + "An electric shaver is a small, handheld device that has a rotating blade.", + "A shaver is a handheld device that has a blade that oscillates back and forth very quickly.", + "A shaver typically has a handle and a detachable head.", + "A shaver.", + "A shaver (electric) looks like a small, handheld machine with a razor attached.", + "A shaver typically has a plastic body with a handle, and a rotating metal head with a mesh cover." + ], + "shaving cream": [ + "A shaving cream is a thick, creamy substance that is applied to the skin to help soften hair and protect the skin from razor burn.", + "Shaving cream is a smooth, thick cream that is applied to the skin to make shaving easier.", + "A shaving cream typically has a thick, creamy consistency and is white or off-white in color.", + "A shaving cream is a thick, creamy substance that is used to lubricate the skin and hair during shaving.", + "A shaving cream is a thick, creamy substance that is applied to the skin to help soften hair and provide a close shave.", + "Typically, shaving cream is white, creamy, and thick.", + "A shaving cream is a thick, creamy substance that is spread on the skin to make shaving easier.", + "A shaving cream is a thick, creamy substance that is applied to the skin to make shaving easier.", + "A shaving cream is a thick, creamy white substance.", + "." + ], + "shawl": [ + "A shawl is a piece of clothing that is worn over the shoulders.", + "A shawl is a triangular or square piece of fabric that is wrapped around the body.", + "A shawl is a piece of clothing that is worn over the shoulders.", + "A shawl is a rectangular or triangular-shaped piece of clothing that is wrapped around the shoulders, upper body, and arms.", + "A shawl is a rectangular or triangular piece of fabric that is worn over the shoulders.", + "A shawl is a large piece of fabric that is worn over the shoulders.", + "A shawl is a large piece of cloth that is typically worn around the shoulders.", + "A shawl is a piece of clothing that is worn over the shoulders.", + "A shawl is a piece of fabric that is worn over the shoulders, typically by women.", + "A shawl is a piece of clothing that is worn over the shoulders." + ], + "shears": [ + "A shears is a cutting tool that consists of a pair of metal blades that are connected at the handles.", + "A shears has a handle on each end and two blades in the middle that cross over each other.", + "A shears is a cutting tool with two sharp blades.", + "A shears is a type of scissors with two blades attached at a pivot point in the middle.", + "A shears is a type of scissors used for cutting various materials such as hair, cloth, paper, and plants.", + "A shears is a handheld tool that has two blades that are connected at a pivot point.", + "A shears is a scissors-like cutting tool used for cutting cloth, paper, or metal.", + "a shears is a type of scissors with two blades attached at a pivot point in the middle.", + "A shears is a type of scissors used for cutting different materials such as hair, fabric, or paper.", + "A shears is a cutting tool that consists of a pair of metal blades that are hinged at the middle and operated with a handles." + ], + "sheep": [ + "A sheep is a mammal with a wooly coat.", + "A sheep has a wooly coat of white, black, or brownish-gray fur.", + "A sheep is a four-legged mammal with a wooly coat.", + "Length: 40\u201385 cm (16\u201333 in)Height at withers: 20\u201360 cm (8\u201324 in)Adult sheep have a coat of lambswool which covers their bodies and legs.", + "A sheep typically has white fur and black spots.", + "A sheep is a mammalian animal that is covered in wool.", + "a sheep has four legs and a fluffy body.", + "A sheep is a mammal with short legs and a wool coat.", + "A sheep is a four-legged mammal with a woolly coat.", + "A sheep is a four-legged, woolly mammal." + ], + "shepherd dog": [ + "A shepherd dog is a type of working dog that is used to herd sheep.", + "Many shepherd dogs have a strong, muscular build with a thick coat of fur.", + "A shepherd dog is a type of working dog that is originally bred for herding sheep.", + "A shepherd dog has a long coat that is black and tan in color.", + "A shepherd dog typically has a long coat that can be either straight or slightly wavy.", + "A shepherd dog is a type of herding dog.", + "A shepherd dog is a type of working dog that is typically used to herd sheep.", + "A shepherd dog is a type of breeds that have been selectively bred for the purpose of herding sheep.", + "A shepherd dog is a medium to large sized dog that has a long body and a long head.", + "A shepherd dog usually has a long coat of fur that is thick and can be either straight or slightly wavy." + ], + "sherbert": [ + "A sherbert looks like a brightly colored,swirled ice cream.", + "A sherbert looks like a sorbet, but is made with dairy products.", + "A sherbert looks like a frozen, fruity, creamy treat.", + "Sherbet is a type of frozen dessert that is made from fruit juice, syrup, and often egg whites or cream.", + "A sherbet is a type of frozen dessert made with fruit juice and milk.", + "A sherbert typically looks like a brightly colored, ice cream-like dessert.", + "Sherbet is a type of frozen dessert made from sweetened milk or water and flavored with fruit syrup, chocolate, or liqueur.", + "A sherbert is a type of ice cream that is usually brightly colored and has a fruity flavor.", + "A sherbert is a type of ice cream that is made with fruit juice or syrup and has a light, creamy texture.", + "A sherbet is a type of frozen dessert made from sweetened water with fruit juice or flavoring." + ], + "shield": [ + "Shields are large, oval-shaped objects made of wood, metal, or other materials, used for protecting the body from weapons.", + "Most shields are round or oval.", + "Round, metal, and has a point at the top.", + "A shield is a large piece of metal or wood that is held in front of a person to protect them from being hit by something.", + "A shield can be a small, handheld object that is held up to protect someone from a weapon being thrown at them, or it can be a large object that is placed between someone and something else to protect them.", + "A shield is a large, usually rectangular piece of wood, metal, or another sturdy material.", + "A shield is typically a large piece of metal or wood attached to an arm or body.", + "A shield looks like a large piece of wood or metal that is rounded at the top and pointed at the bottom.", + " Shielding is typically accomplished by surrounding the sensitive equipment with a conductive material.", + "A shield generally has a curved shape and is held up by a handle or strap in the middle." + ], + "shirt": [ + "Most shirts are made of thin, flat pieces of cloth, that are sewn together.", + "A shirt is a garment that is worn on the upper body.", + "A shirt is typically a button-down or pullover shirt with a collar, long sleeves, and a tailored fit.", + "A shirt is a piece of clothing that is worn on the upper body.", + "A shirt usually has a collar, a placket of buttons in the front, and sleeves.", + "A shirt is a piece of clothing that covers the upper part of the body and has sleeves.", + "A shirt is typically a button-down shirt with a collar and long sleeves.", + "There is no one answer to this question as there are many different types and styles of shirts.", + "A shirt typically has a collar, a front placket, button closures, sleeve cuffs, and a hem.", + "A shirt is typically a button-down collared shirt, however there are many different types of shirts." + ], + "shoe": [ + "A shoe typically has a foot entry opening, a heel for support, and a sole for comfort.", + "A shoe typically has a bottom made of rubber or leather, and a upper made of cloth, leather, or synthetic material.", + "\nA shoe is typically a leather or cloth covering that is worn over the foot to protect it from the ground and cold weather.", + "A shoe is an article of footwear intended to protect and comfort the human foot while the wearer is doing various activities.", + "A shoe typically has a support for the foot's arch, a heel for comfort, and a sole for traction and durability.", + "A shoe is a footwear piece that helps protect the foot from dirt, debris, and injury.", + "A shoe is an article of footwear intended to protect and comfort the human foot while the wearer is doing various activities.", + "A shoe looks like an article of clothing that is meant to be worn on the foot.", + "A shoe is a foot covering that usually has a hard sole and a soft upper.", + "A shoe is typically a piece of footwear that covers the foot and ankle." + ], + "shopping bag": [ + "A traditional shopping bag is rectangular and made out of paper or plastic.", + "A shopping bag typically has a rectangular shape and two handles.", + "A shopping bag is typically made of plastic or paper and has a handles for carrying.", + "A standard shopping bag is a rectangular sack made of paper, plastic, or cloth, typically with handles, used for carrying shopping.", + "A bag that is used for shopping is typically large and durable so that it can hold a lot of items.", + "A shopping bag is a flat, rectangular bag made of paper, plastic, or cloth.", + "A shopping bag is a bag that is used for carrying items from a store.", + "Most shopping bags are made of plastic or paper and have handles for carrying.", + "A shopping bag is usually a rectangular bag made of paper, plastic, or cloth.", + "A shopping bag is a flat, rectangular bag with handles." + ], + "shopping cart": [ + "A shopping cart is a small, wheeled cart that is pushed by a shopper while they are in a store.", + "A shopping cart is a small hand-drawn or motorized vehicle, typically pushed by a shopper in a supermarket or department store, used to carry goods to the check-out counter.", + "A shopping cart is a cart that is used to hold items that a customer plans to purchase from a store.", + "A shopping cart generally has four wheels and a handle, and is designed to hold groceries and other items while shopping.", + "Shopping carts are usually made of metal or plastic and have two handles on the top and four wheels on the bottom.", + "A shopping cart is a wheeled trolley used for carrying groceries, personal items, or other goods.", + "A shopping cart is a metal or plastic cart that is pushed by a shopper through a supermarket or other store.", + "A shopping cart is usually a metal or plastic basket on wheels that is used to carry groceries and other items.", + "A shopping cart is a large basket on wheels that people use to carry groceries and other items from a store.", + "A shopping cart is a small, wheeled cart that is pushed by a shopper while they are looking for items to buy in a store." + ], + "short pants": [ + "A short pants is a pants that has a short length.", + "A short pants is usually a type of clothing worn by children, teenagers, and young adults.", + "A short pants is a clothing worn by both men and women, typically made of denim or another sturdy cotton fabric.", + "A short pants looks like an article of clothing that covers the hips and crotch, but ends before the knees.", + "A short pants generally has a waistband, which fastens with either a buttons, or a zipper, and two leg openings that fasten with a button, snap, zipper, or lace-up.", + "A short pants looking like a long shirt.", + "Short pants are a type of legwear that end at or above the knee.", + "A short pants is a close-fitting undergarment that covers the This type of pants is usually made of a stretchy material such as spandex and is worn by both men and women.", + "A pair of shorts is a garment worn by both men and women over their pelvic region and upper legs.", + "A pair of short pants is a garment worn by men, women, or children that extends from the waist to the upper thigh or knee and has two or four legs that can be sewn or attached together." + ], + "shot glass": [ + "A shot glass is a small glass that is used to measure liquor.", + "A shot glass is a small glass that is used to hold liquor.", + "A shot glass is a small glass that is used to hold a measure of liquor.", + "A shot glass is a glass that is used to hold a measure of spirits or liquor, which is typically drank all at once.", + "A shot glass is a small glass that is used to measure and serve alcoholic drinks.", + "A shot glass typically holds 1.", + "A shot glass is a small glass that is used to measure liquor.", + "A shot glass is usually a small glass that is used to hold liquor.", + "A shot glass is a small glass that is used to hold alcohol.", + "A shot glass is a small glass used to consume alcohol." + ], + "shoulder bag": [ + "A shoulder bag typically has a long strap that can be worn over the shoulder, and is smaller than a standard carry-on or duffle bag.", + "A shoulder bag is a type of purse that is worn over the shoulder with a strap.", + "Shoulder bags are typically made of cloth or leather and have a long strap that can be worn over the shoulder.", + "A shoulder bag has a strap that goes over the shoulder, and the bag hangs down from the strap.", + "A shoulder bag hangs off of one shoulder and has a long strap.", + "A shoulder bag typically has a long strap that can be worn over the shoulder, and the bag itself hangs down on the side of the body.", + "A shoulder bag typically has a long strap that goes over the shoulder, and the bag hangs down from the shoulder.", + "A shoulder bag is a handbag that has a strap that goes over the shoulder.", + "A basic shoulder bag has a single strap that goes over one shoulder and across the chest, with the bag itself hanging down from the shoulder strap on the side opposite the body.", + "A shoulder bag is a handbag with a strap that goes over the shoulder." + ], + "shovel": [ + "A shovel has a long handle with a metal or plastic scoop at the end.", + "A shovel is typically a handheld tool with a curved blade at the end of a long handle.", + "A shovel has a blade at the end of a long handle.", + "A shovel has a curved blade attached to a long handle.", + "A shovel typically has a long handle and a metal or plastic scoop attached to the end.", + "A shovel is a long-handled tool with a blade at the end for scooping up material such as dirt, snow, or sand.", + "A shovel is a tool used for digging, lifting, and moving bulk materials, such as snow, coal, sand, soil, and manure.", + "Shovels have a long, cylindrical handle with a flat, scoop-shaped blade attached to the end.", + "A shovel is a hand tool with a long handle and a blade at the end.", + "A shovel is typically a metal or plastic tool with a handle and a flat, curved blade." + ], + "shower head": [ + "A shower head is a small, round device that attaches to the shower arm and has a hole in the center.", + "A shower head is a device that screws onto the end of a shower pipe and has many small holes that water flows out of.", + "A shower head typically has a round metal base with a threaded connector that attaches to a water supply pipe.", + "A shower head is a small, round device that attaches to the water pipe in a shower.", + "Shower heads are typically round or rectangular in shape, with a number of small holes or nozzles on the surface that release the water.", + "A shower head is a handheld showerhead that is attached to a hose.", + "A shower head typically has a round or square face with many small holes all around it.", + "A shower head is a device that is attached to a water supply pipe in a shower.", + "A shower head looks like a small hole in a shower wall with a knob or handle nearby to turn the water on and off.", + "A shower head is a device that is attached to a shower arm and is used to sprinkle water over a person who is showering." + ], + "shower cap": [ + "A shower cap is a headcovering that is typically made out of waterproof fabric.", + "A shower cap is typically a bell-shaped cap made of rubber or plastic.", + "A shower cap is a domed cap made of waterproof fabric that is worn while showering to keep hair dry.", + "A shower cap is a plastic or fabric hat that is worn while showering to protect the hair from getting wet.", + "A shower cap is a waterproof cap that helps keep hair dry while showering or bathing.", + "A shower cap is a padded, waterproof cap that helps keep water off your face and hairstyle while you shower.", + "A shower cap is a piece of waterproof cloth that helps keep water off your face while showering.", + "A shower cap looks like a cap that you would wear on your head.", + "A shower cap is typically a round, plastic or fabric cover that goes over your hair to protect it while you shower.", + "A shower cap is a small, usually plastic, cap that is worn while showering to keep hair dry." + ], + "shower curtain": [ + "A shower curtain is typically made of waterproof or water-resistant fabric and hangs from a rod or hook at the top of a shower stall or bathtub.", + "A shower curtain is a sheet of fabric that is hung up around a shower to keep water from getting outside of the shower area.", + "A shower curtain is a piece of fabric that is used to cover the shower area and prevent water from spilling out.", + "A shower curtain is typically a colorful piece of fabric that is installed around the shower to prevent water from spilling out onto the floor.", + "A shower curtain is typically a white or light colored fabric that hangs from the ceiling of a shower area to the floor.", + "A shower curtain is typically a fabric curtain that is attached to the shower wall or shower rod with hooks or rings.", + "A shower curtain typically looks like a large sheet of fabric that is hung up around the shower area in order to keep water from spraying outside of the shower.", + "Most shower curtains are made of thin plastic and are semi-opaque.", + "Most shower curtains are made of fabric and are white, off-white, or light-colored.", + "A shower curtain looks like a piece of fabric that hangs over the shower to keep water from spilling out." + ], + "shredder (for paper)": [ + "A shredder is a machine that cuts paper into strips.", + "A paper shredder is a office appliance that is used to cut paper into strips or fine pieces.", + "A shredder is a machine that cuts paper into strips or pieces.", + "A paper shredder is a machine that is used to cut paper into strips or fine pieces.", + "A paper shredder is a machine that cuts paper into small strips.", + "A shredder typically consists of a top loading hopper where paper is inserted.", + "A paper shredder typically consists of a feed area where paper is inserted, blades that chop up the paper, and a bin where the shredded paper is collected.", + "A paper shredder is a machine that is used to cut paper into small strips or pieces.", + "A paper shredder typically looks like a small, boxy machine with a paper-feed slot on top and a catch bin for the shredded paper on the side or underneath.", + "A paper shredder typically consists of a bin to collect the shredded paper, a handle to start the shredding process, and a set of rotating blades to do the actual shredding." + ], + "signboard": [ + "A signboard typically consists of a large, flat surface upon which text or other images can be printed or mounted.", + "It is a rectangular piece of wood or metal with information written on it.", + "A signboard is a flat surface, often vertical, on which signs and advertisements are posted.", + "A signboard is a sign that is placed on a board.", + "A signboard is a large, flat sign that is typically hung above a storefront.", + "Asignboard is a board that has writing on it, telling people what to do or where to go.", + "Most signboards are made out of wood, but they can also be made out of metal or plastic.", + "Most signboards are rectangular and have a white background.", + "A signboard is a rectangular piece of wood or metal with letters or words painted on it.", + "A signboard is a large, flat, usually rectangular piece of wood or metal with words or images on it, used to advertise something or to give information." + ], + "silo": [ + "A silo is a large, cylindrical structure, usually made of concrete, that is used to store grain or other agricultural products.", + "A silo is typically a large cylindrical structure, either above ground or underground, used to store silage (fermented fodder).", + "A silo is a large, cylindrical structure typically made of concrete or metal, used to store materials such as grain, coal, cement, carbon black, woodchips, food products, or other dry, bulk materials.", + "A silo is a large, cylindrical, airtight structure used to store dry products like grain or hay.", + "A silo is a large, cylindrical, airtight storage container for grain, animal feed, or other dry, bulk materials.", + "A silo is a large, cylindrical structure that is used to store grain.", + "A silo is a large, cylindrical structure that is used to store food or other materials.", + "A silo is a cylindrical structure, typically made of concrete, that is used to store materials such as grain or water.", + "A silo is a structure that is used to store materials.", + "A silo is a tall, cylindrical structure that is used to store bulk materials, such as grain, coal, or cement." + ], + "sink": [ + "A sink is a sanitary fixture that is used for washing hands, dishes, and other items.", + "A sink is a basin of water used for washing, typically fixed to a wall or countertop.", + "A sink is a plumbing fixture that is used for washing hands, dishes, and other things.", + "A sink is a bowl-shaped plumbing fixture used for washing hands, dishes, and other items.", + "A sink is typically a bowl-shaped household fixture that is used for washing hands, dishes, and other items.", + "A may look like a small table with a round or oval-shaped top and one or more legs, or it may be attached to a wall.", + "A sink typically has four large sides with a basin in the middle.", + "A sink is a basin used for holding water to wash hands, dishes, or other items.", + "A sink is a bowl-shaped fixture that is attached to a water supply and a drainage pipe.", + "A sink is a bowl-shaped plumbing fixture used for washing hands, dishes, and other items." + ], + "skateboard": [ + "A skateboard is typically a rectangular shaped platform made of wood or plastic.", + "A skateboard is a flat, rectangular board with four wheels that are attached to the bottom.", + "A skateboard is a short, flat board with four wheels attached that is ridden standing up and propelled by pushing off the ground with your feet.", + "A skateboard typically consists of a deck, two trucks holding pairs of wheels, and two sets of laces.", + "flat rectangular board with four attached rubber or plastic wheels, used for riding on smooth surfaces by propelling oneself along with the feet.", + "a board with four wheels attached to it, two in the front and two in the back.", + "A skateboard is a short, narrow platform with four wheels that is ridden in a standing or crouching position and propelled by pushing off the ground with the feet.", + "A skateboard is typically a rectangular piece of wood with four wheels attached to it.", + "A skateboard typically has four wheels that are each attached to the board by metal axles.", + "A skateboard is a platform with four wheels that a person can stand on and ride." + ], + "skewer": [ + "A skewer is a long, thin metal or wood rod that is used to hold food together while it is being grilled or roasted.", + "A skewer is a long, thin metal or wood rod that is used to pierce and hold food together.", + "A skewer is a thin metal or wood rod with a pointed end, used for holding food while it is being grilled or roasted.", + "A skewer is a long thin metal or wooden rod that is used to hold food together while it is being grilled or roasted.", + "A skewer is a long, thin metal or wood rod with a pointed end, used for holding food while it is being grilled or roasted.", + "A skewer is a thin metal or wooden rod with a sharp point at one end, used for piercing food so that it can be cooked on a barbecue or spit.", + "A skewer is a thin metal or wood rod used to hold food together on a grill or spit.", + "A skewer is a thin, pointed metal or wood rod used to hold food together while it is being grilled or roasted.", + "A skewer is a long, thin metal or wood rod that is used to hold food together.", + "A skewer is a thin, sharp metal or wood rod that is used to hold food together or to puncture it." + ], + "ski": [ + "A ski looks like a long, narrow board that is attached to a person's feet and is used for gliding over snow.", + "A ski looks like a long, flat piece of wood or plastic.", + "A ski is a long, slender piece of equipment that is used to glide over snow.", + "A ski is a long, thin piece of wood or plastic that you strap to your feet and use to slide down a slope of snow.", + "A ski is a long, thin, flat piece of wood or other material that is attached to the feet and used for sliding on snow.", + "A ski is a long, narrow board that is attached to a person's feet and used to glide over snow.", + "A ski is a long, flat piece of wood or fiberglass that is attached to a person's feet and used to glide over snow.", + "A ski is long and slender, usually made of wood or composite material.", + "A ski is a long, thin piece of wood or other material that you wear on your feet when you are skiing.", + "A ski typically has a long, narrow body with a pointed front end." + ], + "ski boot": [ + "A ski boot is a boot made to wear while skiing that includes a toe box, heel counter, and shank.", + "A ski boot is a boot made to be worn while skiing.", + "A ski boot is typically a black, synthetic material boot that comes up over the calf and knee.", + "A ski boot looks like a regular boot, but it has a built-in ski that allows the person to glide down a slope.", + "A ski boot is a boot used in skiing to provide a comfortable and warm fit, as well as to give the skier good control and stability.", + "A ski boot is a boot made to be worn while skiing.", + "A ski boot is a boot made to be worn while skiing.", + "Ski boots are long, stiff, and generally black.", + "Ski boots are usually black and made of a synthetic material.", + "A ski boot is a type of footwear that is specifically designed for skiing." + ], + "ski parka": [ + "A ski parka is a jacket that is usually made of waterproof and insulated material.", + "A ski parka is a coat made to wear while skiing.", + "A ski parka is a long, insulated coat worn by skiers and other outdoor enthusiasts.", + "a ski parka is a typically hooded jacket, made to protect the wearer from cold weather while engaging in outdoor activities such as skiing.", + "When most people think of a ski parka, they picture a long, down-filled coat designed to keep them warm in cold weather.", + "A ski parka is a lined, weatherproof coat worn by skiers and snowboarders.", + "A ski parka typically has a hood, is insulated, and is water-resistant.", + "A ski parka is a heavy, insulated jacket that is worn in cold weather.", + "A ski parka is a heavy, insulated coat worn by skiers.", + "A ski parka is a heavy coat worn to protect against the cold while skiing or snowboarding." + ], + "ski pole": [ + "A ski pole typically has a long, thin shaft made of aluminum or composite materials, with a plastic grip and a metal tip at the bottom.", + "A ski pole typically has a long, straight shaft made of aluminum or other metal, with a plastic grip and strap near the top.", + "A ski pole typically has a long, thin shaft made of aluminum or carbon fiber and a pointed tip at the end.", + "A Ski Pole generally has a long metal shaft with a handgrip and a pointed tip at the bottom.", + "A ski pole is a long, thin pole that is used by skiers to help them balance and maneuver.", + "A ski pole has a long, straight shaft with a pointed tip at one end and a plastic basket at the other.", + "A ski pole is a long, thin pole that is held in both hands and used for balance while skiing.", + "A ski pole is a long, thin stick that is used to help a person ski.", + "A ski pole is a long, thin pole that is used by skiers to help them balance.", + "A ski pole is a long, thin pole that is held in both hands and used for balance while skiing." + ], + "skirt": [ + "A skirt is a garment that is worn by women and girls.", + "A skirt is a garment that hangs from the waist and covers the legs.", + "A skirt is a garment that covers the lower part of the body and extends below the hips.", + "A skirt is a piece of clothing worn by women and girls.", + "A skirt is a piece of clothing that covers the lower half of a woman's body and extends down to the ground.", + "A skirt is a piece of clothing that hangs from the waist and covers the legs.", + "A skirt is a piece of clothing that hangs from the waist and covers the legs.", + "A skirt is a piece of clothing that hangs from the waist and covers the legs.", + "A skirt is a piece of clothing that covers the lower half of a woman's body.", + "A skirt is a piece of clothing that is worn by women and girls." + ], + "skullcap": [ + "A skullcap is a small, round cap that covers the top of the head.", + "A skullcap is a small, close-fitting cap that covers only the top and back of the head.", + "I cannot find a good image of a skullcap.", + "A skullcap is a small, round, close-fitting cap that covers the top of the head.", + "A skullcap is a small, rounded hat that sits close to the head.", + "A skullcap is a small, beanie-like hat that covers the top of the head.", + "A skullcap is a form-fitting headcovering that covers the top, back, and sides of the head but not the face.", + ".", + "A skullcap is traditionally a small, tight-fitting cap that covers the top and back of the head.", + "A skullcap is a small, close-fitting cap that covers the crown of the head." + ], + "sled": [ + "Most sleds are made of wood and have a flat bottom.", + "A sled is typically a small, flat bottomed vehicle that is used for riding down a snow covered hill.", + "A sled is a small vehicle on runners, typically with a flat bottom, that is used for transporting goods or passengers over snow or ice.", + "A sled is typically a small, lightweight vehicle on runners, designed to be pushed and taken downhill by a person, typically a child, on snow.", + "A sled is typically a small, flat device on runners that is used to slide down a snow-covered hill.", + "A sled is a vehicle that slides on snow or ice, typically pushed or pulled by people or animals.", + "The most common type of sled is a toboggan, which is a long, narrow, flat-bottomed wood or plastic sled that is Wedge-shaped in cross section and typically has low sides and a flatbow.", + "A sled is typically a small, flat platform on runners or skis, designed to be either pushed or pulled across snow or ice by a person or animal, or pulled by a motor vehicle.", + "A sled typically has a flat bottom and two curved side pieces that come up to form a seat.", + "A sled is a vehicle that is typically used for transporting goods or people over snow or ice." + ], + "sleeping bag": [ + "A sleeping bag is typically a rectangular bag made of synthetic or down fill, with a zipper running along one side.", + "A sleeping bag consists of a bag made of fabric, typically polyester, that can be closed with a zipper or drawstring.", + "A sleeping bag is a bag made of durable fabric that is filled with insulating material.", + "A sleeping bag typically looks like a large, insulated rectangle with a zipper running along one side.", + "A sleeping bag is typically a large, insulated bag that can be zipped up to sealing in warmth.", + "A sleeping bag is a long, narrow bag made of thin fabric.", + "A sleeping bag is a bag made out of sturdy material, often nylon, that is designed to keep a person warm while they sleep.", + "A sleeping bag is a bag made of insulating material, typically insulated with down, synthetics, or a combination of both, and usually capable of being closed with a zipper or drawstring to form a tube.", + "A sleeping bag is a large, rectangular bag made of insulated fabric.", + "A sleeping bag is a bag made of warm materials that is used for sleeping in." + ], + "sling (bandage)": [ + "A sling is a triangle-shaped piece of cloth that is draped over the arm and tied at the neck.", + "A sling is a piece of cloth or other material that is wrapped around the body to support an injured arm or hand.", + "A sling is a bandage that is typically triangular in shape.", + "A sling is a bandage that is used to support an injured arm.", + "A sling is a piece of fabric that is wrapped around the arm and tied at the shoulder to hold the arm in place.", + "A sling is usually a triangular bandage that is wrapped around the arm and across the chest.", + "A sling is a strip of cloth or other material used to support an injured arm or hand.", + "A sling is a bandage that is used to support an injured arm.", + "A sling is a bandage that is typically triangular in shape.", + "A sling is a strip of fabric, often cloth or linen, used to support an injured arm or hand." + ], + "slipper (footwear)": [ + "A slipper is a type of footwear that is easy to slip on and off.", + "Slippers are typically soft shoes with a flexible sole, designed for indoor use.", + "A slipper typically is a low shoe that is easy to slip on and off.", + "A slipper is a piece of footwear that is easy to slip on and off.", + "A slipper is generally a low, soft shoe that is easy to put on and take off.", + "A slipper typically has a soft sole and is easy to slip on and off.", + "A slipper is a type of shoe that is typically worn indoors.", + "A slipper is a type of footwear that is easy to slip on and off.", + "A slipper typically is a low shoe that is easy to slip on and off.", + "A slipper is a type of footwear that is typically soft and easy to put on and take off." + ], + "smoothie": [ + "A smoothie is a thick, creamy drink made from blending fruits, vegetables, and dairy or nondairy milk.", + "A smoothie is a blended beverage made from fruits, vegetables, and sometimes other ingredients such as milk, yogurt, or ice cream.", + "A smoothie looks like a thick drink that is usually green or brown in color.", + "A smoothie is a thick, creamy drink made from blending fruits, vegetables, and sometimes dairy or Protein.", + "A smoothie is a blended and usually icy drink made from fresh fruit or vegetables, typically with milk and yogurt.", + "A smoothie is a drink made from pureed fruits or vegetables.", + "A smoothie generally looks like a thick drink, often with bits of fruit or other ingredients floating in it.", + "A smoothie is a blended, often icy, drink made from fresh fruit or vegetables.", + "A smoothie looks like a drink that is made with fruit and has a creamy texture.", + "A smoothie is a thick and creamy beverage that is made with fruits and vegetables." + ], + "snake": [ + "A snake looks like a long, slender, cylindrical reptile with a scaly skin.", + "A snake is a long, thin reptile with scaly skin.", + "A snake has a long, thin body.", + "A snake has a long, thin body and no legs.", + "A snake is a vertebrate that has a long, thin body and no legs.", + "A snake is a long and thin reptile with no legs.", + "A snake is a long, thin reptile with no legs.", + "Most snakes are long and thin with scaly skin.", + "Most snakes have a long, cylindrical body with a smooth, scaly skin.", + "A snake is typically a long, thin reptile with a scaly skin." + ], + "snowboard": [ + "A snowboard is about the size of a surfboard and is curved at both ends.", + "A snowboard is a board that you stand on and slide down a snow-covered hill.", + "A snowboard is usually rectangular, with rounded edges.", + "A snowboard is typically a long, rectangular board with rounded edges.", + "A snowboard is a long, flat board that you stand on and ride down a hill.", + "A snowboard typically has a rounded nose and tail, and a graphics design on the top.", + "A snowboard is a boardsport that involves descending a slope that is covered in snow, using a special boot attached to the board to strap the rider's feet in place.", + "A snowboard is a board made of wood or plastic that people strap their feet to and ride down a snowy hill.", + "A snowboard is a long, thin board with rounded edges.", + "A snowboard typically has a rounded nose and tail, with bindings in the middle to attach the rider's feet." + ], + "snowman": [ + "A snowman typically has three large spheres of snow stacked on top of each other, with a smaller sphere for the head.", + "A snowman is a figure made of snow, typically in the shape of a human, with two balls of snow for a body, and a third for a head.", + "A snowman is a figure made of snow, typically in the form of a large sphere for the body, a smaller sphere for the head, and two ovoid shapes for the arms.", + "A snowman is a figure made of snow, typically in the shape of a human with two spheres for a head and a cylinder for a body.", + "Snowmen are typically made from three large snowball-like balls of compacted snow, with two smaller balls for the arms.", + "Most snowmen are white and have three large balls for their bodies.", + "A snowman typically has three large balls of snow for the body, two smaller balls of snow for the arms, and a small ball of snow or lump of coal for the nose.", + "A snowman is a sculpture made from snow, typically in the shape of a large sphere for the body, a smaller sphere for the head, and two cylinders for the arms.", + "A snowman looks like a giant white ball with a smaller white ball on top of it.", + "A snowman is a figure made of snow, typically in the shape of a sphere for the body, with a smaller sphere for the head, and two sticks stuck into the body for arms." + ], + "snowmobile": [ + "A snowmobile is a vehicle designed for winter travel on snow.", + "A snowmobile is a motor vehicle designed for winter travel on snow.", + "Most snowmobiles have a sleek, futuristic look.", + "A snowmobile has a long, narrow chassis that sits low to the ground.", + "A snowmobile is a small vehicle, typically with skis instead of wheels, that is used for traveling over snow.", + "A snowmobile is a vehicle designed for winter travel over snow.", + "A snowmobile typically has a sleigh-like body with low-pressure tyres for maneuvering over snow.", + "A snowmobile is a vehicle designed for winter travel over snow.", + "A snowmobile typically has a skis in the front for steering, and one or more Continental tires in the back for propulsion.", + "A snowmobile is a small vehicle that sits on top of the snow and is used for transportation in snowy areas." + ], + "soap": [ + "A soap typically has a light, fluffy texture and is typically white in color.", + "A bar of soap typically looks like a small block of rectangular or oval-shaped solid material.", + "A bar of soap is usually a rectangular or oval shape and is smooth.", + "A soap looks like a small, rectangular bar.", + "A soap looks like a bar of soap.", + "In general, soap is a white or pale-yellow solid with a redolent odor.", + "It is a colored and scented bar with a oval shape.", + "A soap is a type of cleansing agent that is usually in the form of a small cake or bar.", + "Soap typically comes in the form of a compact rectangular bar.", + "A bar of soap is usually a rectangular or oval shape." + ], + "soccer ball": [ + "Soccer balls are always round, and they have a smooth, leather-like surface.", + "A soccer ball is typically a dark color, often black, with a white or light-colored pattern.", + "A soccer ball has a black and white pentagon-shaped pattern and is made of leather or synthetic material.", + "A soccer ball is typically round and made of a synthetic material.", + "A soccer ball is a round, sphere-shaped object with a pattern on the outside.", + "A soccer ball is round and made of synthetic leather.", + "A soccer ball is a round, black-and-white object with 32 panels that is used to play soccer.", + "a soccer ball typically has a black and white checkered pattern and is round.", + "A soccer ball typically has a black and white checkered pattern and is round.", + "A soccer ball is a round ball that is used in the sport of soccer." + ], + "sock": [ + "A sock is typically a small, thin piece of fabric that covers the foot and ankle.", + "A sock is a piece of clothing that is worn on the foot and lower leg.", + "A sock is an article of clothing that is worn on the feet.", + "A sock is a foot covering that is typically made from a stretchy fabric like cotton or wool.", + "A sock typically has a cloud or circular shaped body with a hole in the center for a person's foot.", + "A sock generally has a cuff at the top, which helps it stay up on the leg, and a foot portion which covers the foot.", + "A sock is a garment that is worn on the foot and lower leg.", + "A sock is a garment that is worn on the foot and lower leg.", + "A sock is an article of clothing typically worn on the feet.", + "A sock is a tubular piece of clothing worn on the foot and often extending up the leg." + ], + "sofa": [ + "A sofa typically has a soft, cushioned surface, with either one or two arm rests on each side, and typically seats three or more people.", + "A sofa is a piece of furniture that typically has a cushioned seat, back, and arms, and is used for seating.", + "A sofa is a piece of furniture that typically has a soft, cushioned surface and arms, and is used for seating.", + "A sofa is a piece of furniture that typically has a soft, padded surface and arms, and is used for sitting.", + "A sofa typically has a soft, padded surface, with cushions or arms on each side.", + "A sofa generally has a couple of cushions on it and is upholstered in a soft fabric.", + "A sofa typically has a soft, upholstered seat, back, and arms, and rests on four legs.", + "Most sofas have a soft, upholstered surface, with padding underneath.", + "A sofa typically has a soft, upholstered seat, back, and arms.", + "A sofa is a long, upholstered couch." + ], + "softball": [ + "A softball is a round, white ball that is used to play the game of softball.", + "A softball is a small, round, white ball.", + "A softball is a small, round, white ball that is used in the sport of softball.", + "A softball is a small, round, white ball with red stitching.", + "A softball is a small, round, white ball that is used in the sport of softball.", + "A softball looks like a round, white, leather ball.", + "A softball is a ball that is about the size of a fist.", + "A softball is about the size of a grapefruit and is covered in leather.", + "A softball is a small, round, light-weight ball.", + "A softball is a small, round, leather-covered ball." + ], + "solar array": [ + "A solar array looks like a panel of solar cells that are connected together to create a system that can absorb sunlight and turn it into electricity.", + "A solar array is a large array of interconnected photovoltaic (PV) panels that are used to generate electricity.", + "A solar array is a solar panel or a set of solar panels that is used to collect energy from the sun.", + "A solar array is a series of interconnected solar panels that are used to collect and store energy from the sun.", + "A solar array consists of a series of solar panels placed in a line or a grid.", + "A solar array is a system of solar panels that are connected together.", + "A solar array is a series of photovoltaic panels that are connected together.", + "A solar panel array is a set of solar panels mounted on a roof or on the ground.", + "A solar array is a series of solar panels that are connected together to produce electricity.", + "A solar array is a system of solar panels that are connected together and wired to an inverter." + ], + "sombrero": [ + "A sombrero looks like a large, pointed hat.", + "A sombrero is a type of hat that is traditionally worn in Mexico.", + "A sombrero looks like a traditional Mexican hat that is worn to protect against the sun.", + "A sombrero is a Mexican hat that is round and has a very wide brim.", + "A sombrero is a type of hat that is traditionally worn in Mexico.", + "A sombrero is a type of wide-brimmed hat that is typically worn in Mexico and other parts of Latin America.", + "A sombrero is a type of wide-brimmed hat traditionally worn in Spain, Mexico, and the southwestern United States.", + "A sombrero is a traditional Mexican hat that is typically worn in hot weather.", + "A sombrero is a type of wide-brimmed hat that is commonly worn in Mexico and other Spanish-speaking countries.", + "A sombrero is a type of hat that is traditionally worn in Mexico." + ], + "soup": [ + "Soup is a liquid food made by cooking meat, vegetables, or other ingredients in water or other liquid.", + "A soup can have many different appearances, depending on its ingredients.", + "A soup is typically a broth with chunks of vegetables and/or meat in it.", + "A soup is a liquid food that is made with a combination of vegetables, meat, and water.", + "A soup is typically a thin, broth-based liquid food, often served as an appetizer or as a main course.", + "A soup is a liquid food made by combining ingredients such as meat, vegetables, and stock.", + "A soup is a tasty combination of different foods, including vegetables, that is simmered in a pot of water or broth.", + "A soup is typically a combination of a liquid and solid ingredients that are cooked together and often served hot.", + "A soup is a water-based, usually hot, liquid food.", + "A soup can be a variety of different colors, depending on the ingredients." + ], + "soup bowl": [ + "A soup bowl is a bowl that is used to serve soup.", + "A soup bowl is typically a round, deep bowl that is used for serving soup.", + "Most soup bowls are round with a lip and a handles.", + "A soup bowl typically has a wide, round shape and a shallow depth.", + "A soup bowl is a deep bowl with a wide rim, used for serving soup.", + "A soup bowl typically has a wide, round shape and is deep enough to hold a large amount of soup.", + "A soup bowl is a bowl that is used for soup.", + "A soup bowl is a bowl that you eat soup out of.", + "A soup bowl is typically a round, deep bowl that is used for serving soup.", + "A soup bowl is a round bowl with a wide rim and a shallow depth." + ], + "soupspoon": [ + "A soupspoon typically has a rounded bowl and a long handle.", + "A soup spoon is a round bowl with a handle.", + "A soup spoon is a spoon designed specifically for eating soup.", + "A soupspoon is a type of spoon with a rounded bowl that is designed for eating soup.", + "A Typical Western soup spoon is oval, with a rounded bowl.", + "A soup spoon is a spoon designed specifically for eating soup.", + "A soup spoon is a spoon that is larger than a teaspoon and smaller than a tablespoon.", + "A soupspoon is a spoon with a wide, rounded bowl that is used for eating soup.", + "A soup spoon is a spoon designed specifically for eating soup.", + "A soupspoon looks like a spoon with a larger bowl that is rounder and deeper than a regular spoon." + ], + "sour cream": [ + "A sour cream is a dairy product that is made from cream that has been fermented with bacteria.", + "A sour cream is a yellowish-white colored cream that has a sour taste.", + "Sour cream is a thick, creamy, white or yellowish-white substance that is made from milk and cream that has been fermented with bacteria.", + "A sour cream is thick, white and has a slightly sour taste.", + "A sour cream is a yellowish white cream with a sour taste.", + "When sour cream is fresh, it has a thick, creamy texture and a white color.", + "A sour cream is a white, thick and creamy sauce that is made from milk and cream.", + "A sour cream is usually white in color and has a thick consistency.", + "A sour cream is a white, thick cream that has a slightly sour taste.", + "A sour cream is a thick and creamy Dairy product with a slightly tangy taste." + ], + "soya milk": [ + "A soya milk is a beige colored liquid that is often used as a dairy alternative.", + "A soya milk looks like a milk.", + "A soya milk looks like a liquid.", + "A soya milk looks like a white liquid.", + "A soya milk looks like milk but it is made of soya beans.", + "A soya milk looks like a milk but it is beige in color.", + "Soya milk is a milk alternative made from soybeans.", + "A soya milk looks like a milk, but it is white and has a soya bean taste.", + "A soya milk looks like milk but it is usually darker and has a slightly different consistency.", + "A soya milk looks like a milk but it's beige in color." + ], + "space shuttle": [ + "The space shuttle looks like a rocket ship.", + "A space shuttle typically has two large boosters attached to the sides of the main fuel tank.", + "A space shuttle is a long, thin, white rocket with two wings.", + "The space shuttle is a spacecraft that looks like a plane.", + "A space shuttle looks like a large airplane with two huge boosters attached to the sides.", + "A space shuttle looks like a large rocket with a long tail.", + "Space shuttles are white with large cargo bay doors on the underside that open to allow payloads to be deployed.", + "A space shuttle looks like a large rocket with a curved shape.", + "A space shuttle is a reusable spacecraft that is used to transport astronauts and cargo to and from low Earth orbit.", + "The space shuttle typically has a white exterior with black and gray detailing." + ], + "sparkler (fireworks)": [ + "A sparkler is a thin rod of metal that has been coated in a chemical that reacts to heat.", + "A sparkler is a long, thin rod of metal that burns with a bright, sparkly flame.", + "A sparkler is a long, thin rod of metal that has been coated in a chemical compound that helps it to burn very brightly.", + "When you light a sparkler, it sparks and emits a bright light.", + "A sparkler is a type of firework that burns slowly and emits sparks.", + "A sparkler is a thin metal rod with a combustible material wrapped around one end.", + "A sparkler is long, thin stick made of metal that has a papery wrapping around the end.", + "A sparkler is typically a thin metal rod with a paper wrapper.", + "A sparkler looks like a stick with a lit end.", + "When sparklers are lit, they produce a bright, shining light as well as a loud noise." + ], + "spatula": [ + "A spatula typically has a long, slender handle with a flat, flexible blade at one end.", + "A spatula is a tool with a flat, flexible blade that is used for flipping food or transferring it from one container to another.", + "A spatula is an elongated, flat-bladed tool with a handle, used for turning or serving food.", + "A spatula is a tool that is used to flip food over while cooking.", + "A spatula is a flat, slanted utensil with a long handle, used for flipping or transferring food.", + "A spatula is a flat, usually rubber or plastic tool with a rounded end.", + "A spatula is a tool with a narrow, flat blade that is used to smooth surfaces or to spread food products like icing or batter.", + "A spatula is a tool with a wide, flat, and somewhat flexible blade, used for lifting food from a surface such as a pan or grill.", + "A spatula is a flat, usually long and narrow, blade with a handle, used for flipping or turning foods during cooking.", + "A spatula is a thin, flat piece of metal, plastic, or wood with a handle." + ], + "spear": [ + "A spear is a long, pointed stick that is used as a weapon.", + "A spear is a long pole with a sharp metal point at the end.", + "A spear is a long, thin rod with a sharp point at one end.", + "A spear is a pole weapon with a sharpened point at one end.", + "A spear is a pole weapon with a sharp point at one end and a sharpened edge at the other, used as a thrusting or throwing weapon.", + "An ancient spear is a wooden shaft with a metal point at the end.", + "A spear is a long, thin, pointy weapon that is sharp on one end and has a long handle.", + "A spear is a pointed weapon that is used for throwing or thrusting.", + "A spear is a long, thin, pointed weapon that is used by being thrust forward.", + "A spear is a long, thin, pointed weapon used for thrusting and stabbing." + ], + "spectacles": [ + "A spectacle is a pair of eyeglasses.", + "A spectacles is a type of eyewear that consists of a frame that holds two lenses in front of the eyes.", + "Spectacles are a type of eyewear that helps people see more clearly.", + " Spectacles are glasses that are worn in order to improve vision.", + "A spectacles usually refers to a glass or plastic lens worn in front of the eye to correct vision, or protect the eye from debris, dust, wind, etc.", + "A spectacles is a type of corrective lens used to improve vision.", + "A spectacle is a lens worn in front of the eye to correct vision, for cosmetic reasons, or to protect the eye.", + "A spectacles has a frame that goes around your head and two lenses in front of your eyes.", + "A spectacles has two glass or plastic lenses in metal or plastic frames that rest on the ears.", + "A pair of spectacles is a frame that holds two eyeglasses lenses in front of a person's eyes." + ], + "spice rack": [ + "A spice rack is typically a rack with several shelves that is used to store spices.", + "A spice rack is a horizontal or vertical rack that holds small bottles or containers of spices.", + "A spice rack is a small, typically tiered stand with shelves for holding spices.", + "A spice rack is a small, shelves unit with doors that is used to store spices.", + "A spice rack is a small, shelves rack that is used to store spices.", + "A spice rack is a shelf or cabinet that holds spices.", + "A spice rack is a small, Usually rectangular box with several shelves that can hold small spice containers.", + "A spice rack is a baking utensil that holds many different spices.", + "A spice rack is usually a rack with shelves that is used to store spices.", + "A spice rack normally contains hooks on which you can hang spice containers filled with various seasonings." + ], + "spider": [ + "A spider has a round body with eight legs.", + "Spiders have eight legs, two body parts, fangs and no wings.", + "A spider is typically small to medium in size, has eight legs, and two body segments.", + "A spider has eight legs, two body parts, fangs, and eight eyes.", + "Most spiders have two body segments, an abdomen, and a cephalothorax.", + "Most spiders have eight legs, although some have six or fewer.", + "A spider has a small, round body with eight thin legs that extend from its body.", + "A spider has a round body with eight legs sticking out of it.", + "A spider is a small, eight-legged creature that is usually dark brown or black in color.", + "A spider has eight legs, two body parts, and no wings or antennae." + ], + "crawfish": [ + "A crawfish is a small, lobster-like crustacean with a hard shell and 10 legs.", + "A crawfish is a small, mud-dwelling creature that has a hard shell and 10 legs.", + "A crawfish is a small, lobster-like creature that is typically red or brown in color.", + "A crawfish is a small, lobster-like creature.", + "A crawfish is a small, freshwater crustacean that resembles a miniature lobster.", + "A crawfish is a small, lobster-like creature with a hard shell and ten legs.", + "A crawfish is a small freshwater crustacean that resembles a miniature lobster.", + "A crawfish looks like a miniature lobster.", + "A crawfish is a small crustacean that resembles a lobster.", + "A crawfish is a small, lobster-like creature that is typically red or brown in color." + ], + "sponge": [ + "A sponge is a small, porous, tubular creature that lives in the ocean.", + "A sponge is a soft, porous, water-absorbent object that is used for cleaning.", + "A sponge typically has a soft, porous body and is covered in tiny pores.", + "A sponge is a type of aquatic animal with a soft, absorbent body.", + "A sponge is typically yellow, green, or brown, and is very absorbent.", + "A sponge is a cylindrical or oblong soft body with a large number of small pores.", + "A sponge is a type of aquatic animal that looks like a small, soft, and porous mound.", + "A sponge is a yellow or greenish-yellow porous object that is used for cleaning.", + "A sponge is a soft, wet, porous material that is used for cleaning.", + "A sponge is a small, soft, spongy object that is used to clean surfaces." + ], + "spoon": [ + "A spoon is a small, concave tool with a long handle.", + "A spoon has a handle and a bowl-shaped part that holds food.", + "A spoon has a bowl-shaped scoop with a handle.", + "A spoon is a tool with a small, shallow bowl and a handle.", + "A spoon is a utensil that has a rounded bowl and a long handle.", + "A spoon has a long, thin handle and a small, round bowl.", + "A spoon is a small, scoop-shaped utensil used for eating, stirring, and transferring food and other liquids to and from containers.", + "A spoon is a small, scoop-shaped utensil used for eating, stirring, and measuring.", + "A spoon is a small, concave utensil with a handle that is used to eat and stir food.", + "A spoon is a utensil with a handle and a bowl-shaped head." + ], + "sportswear": [ + "Sportswear is clothing that is designed to be worn while participating in sports.", + "A sportswear typically includes clothing items such as shorts, t-shirts, tracksuits, and sneakers.", + "A sportswear typically includes a t-shirt, shorts, and sneakers.", + "A sportswear usually looks like a t-shirt and shorts.", + "A sportswear is a clothing that is worn by athletes during sports or physical exercise.", + "A sportswear is typically a comfortable, loose fitting garment that is designed to allow freedom of movement and be suitable for physical activity.", + "A sportswear looks like a piece of clothing that is designed to be worn while participating in a physical activity.", + "A sportswear is a clothing that is designed to be worn while performing physical activities.", + "A sportswear typically includes loose-fitting shorts, a T-shirt and sneakers.", + "A sportswear looks like a combination of a shirt and shorts." + ], + "spotlight": [ + "A spotlight is a type of stage lighting with a strong, focused beam of light that is used to illuminate a specific area of the stage.", + "A spotlight is a bright light that is used to illuminate a specific area.", + "A spotlight is a bright light that focuses on one specific area.", + "A spotlight is a bright light that is used to illuminate a specific area.", + "A spotlight looks like a bright light that is shining on one area.", + "A spotlight is a powerful beam of light that is used to illuminate a specific area.", + "A spotlight is a bright light that is used to illuminate a specific area.", + "A spotlight is a strong light that is directed at a particular area.", + "A spotlight is a concentrated beam of light that is used to illuminate a particular area.", + "A spotlight is a concentrated beam of light that is used to illuminate a specific area." + ], + "squid (food)": [ + "A squid is a type of seafood that has a long, thin body and eight arms.", + "A squid is a seafood item that typically has a long, thin body and tentacles.", + "A squid is a type of seafood that has a long, cylindrical body with eight arms and two tentacles.", + "A squid (food) typically has a long, tubular body with a mantle (a thick, membrane that extends over its head and contains its triangular, protective fin) and two long tentacles.", + "A squid is an invertebrate that has a long, cylindrical body and eight arms that are attached to its head.", + "A squid is a very common type of seafood that is beloved by many cultures around the world.", + "A squid is a sea creature that has a long, cylinder-shaped body.", + "A squid is a type of seafood that can be eaten cooked or raw.", + "A squid is an invertebrate that has a long, cylindrical body with eight arms and two tentacles.", + "A squid (food) typically looks like a long, thin, tubular creature with eight arms and two tentacle-like appendages." + ], + "squirrel": [ + "A squirrel has a small body, a long tail, and furry ears.", + "A squirrel is a small rodent with a long tail and furry body.", + "A squirrel is small rodent with a fluffy tail.", + "A squirrel is a small, rodents with bushy tails.", + "A squirrel is a small, rodent-like animal with a long, furry tail.", + "A squirrel typically has a reddish-brown or gray coat, and a long, fluffy tail.", + "A squirrel typically has a small, round body with a long, fluffy tail.", + "A squirrel is a small, furry rodent with a long tail.", + "A typical squirrel has a long bushy tail, big furry ears, and tan, brown, or black fur.", + "A squirrel is a small, tree-dwelling rodent." + ], + "stagecoach": [ + "A stagecoach is a four-wheeled horse-drawn carriage designed to carry passengers and their luggage.", + "A stagecoach is a large, heavy vehicle with four wheels that is pulled by horses.", + "A stagecoach is a four-wheeled enclosed wagon used to carry people and luggage.", + "A stagecoach is a large, covered wagon that is pulled by horses.", + "A stagecoach generally has four or six horses hitched to it and a driver and conductor sitting on a bench in the front.", + "Most stagecoaches are large and boxy, with four wheels and room for several passengers to sit inside.", + "A stagecoach has four large wheels, a long body, and two levels.", + "A stagecoach is a large, boxy carriage with four passenger compartments and an enclosed section for the driver and baggage.", + "A stagecoach looks like a horse-drawn carriage that is used to transport people or goods over long distances.", + "A stagecoach is a horse-drawn carriage that is used to transport people and goods." + ], + "stapler (stapling machine)": [ + "A stapler machine is typically a hand-held machine that has a base and a long handle.", + "A stapler(stapling machine) is an office supplies that is used to fasten papers together by stapling them at the top left corner.", + "A stapler is a small hand-held machine used to join papers together by driving metal staples into them.", + "The common stapler is a small, hand-held device that clinches sheets of paper together with staples.", + "A stapler is a small hand-held machine that is used to join pieces of paper together by staples.", + "A stapler looks like a small handheld machine with a long nose.", + "A stapler (stapling machine) is a device that joins pages of paper together with staples.", + "A stapler (stapling machine) looks like a small hand-held machine with a handle that extends down from the body of the machine.", + "A stapler is a small hand-held machine that punches a hole in a piece of paper and inserts a metal staple through the hole to hold the paper together.", + "A stapler is a hand-held machine that is used to join together two pieces of paper by driving a thin metal strip through the top sheet and folding it over the bottom sheet." + ], + "starfish": [ + "A starfish is a marine invertebrate that has the shape of a star.", + "A starfish is an echinoderm with a radial symmetry.", + "A starfish is a marine creature that has a star-shaped body.", + "A starfish has a round body with five or more arms that come out from the center.", + "A starfish is a marine invertebrate with a star-shaped body.", + "A starfish typically has five arms, although some species can have up to 40.", + "A starfish is a small, hard-bodied animal that is shaped like a star.", + "A starfish is a type of animal that has a star-shaped body.", + "A starfish is a small, echinoderm creature that has a star-shaped body.", + "A starfish is a sea creature that has a star-shaped body with five arms." + ], + "statue (sculpture)": [ + "A statue is a three-dimensional work of art that is created by shaping or combining hard materials, such as stone, metal, or wood.", + "A statue is a sculpture that represents a person or thing.", + "A statue is a three-dimensional work of art that is created by shaping or carving stone, wood, metal, or a similar material.", + "A sculpture is a three-dimensional artwork created by shaping or combining hard materials, such as stone, metal, glass, or wood.", + "A statue is a sculpture that represents a person or an animal.", + "A statue (sculpture) is a three-dimensional artwork created by shaping hard or durable material\u2014typically stone, wood, or metal\u2014or casting it in a mold.", + "A statue is a three-dimensional work of art.", + "A statue is a three-dimensional work of art that is usually represents a person or an event.", + "A statue is a sculpture that is larger than life.", + "A statue is a three-dimensional work of art that is usually created by carving or molding." + ], + "steak (food)": [ + "A steak is a cut of meat that is usually grilled or pan-fried.", + "richer in color than most other cuts, with a well-defined network of white fat marbling throughout.", + "A steak is a cut of meat that is usually grilled or pan-fried.", + "A steak is a cut of meat that is usually cooked by grilling, frying, or baking.", + "A steak (food) generally looks like a red, juicy piece of meat.", + "A steak is typically a red, meaty piece of food that is cooked and served hot.", + "A steak is a flat, red piece of meat.", + "A steak is a type of meat that is typically cut into thick, flat slices.", + "A steak typically looks like a red, meaty slab.", + "A steak (food) is a thick, flat piece of meat that is typically cooked by frying, grilling, or broiling." + ], + "steak knife": [ + "A steak knife typically has a serrated edge and a pointed tip.", + "A steak knife is a knife that is used to cut steak.", + "A steak knife has a serrated blade that is used to cut meat.", + "A steak knife has a serrated blade that is used to cut steak.", + "A steak knife is a knife with a serrated blade that is used to cut steak.", + "A steak knife is a sharp knife designed specifically for cutting steak.", + "A steak knife typically has a serrated blade that is sharpened on one side.", + "Most steak knives have a wooden or plastic handle, and a serrated blade.", + "A steak knife is a sharp knife with a serrated edge that is used to cut steak.", + "A steak knife has a serrated blade that is used to saw through meat." + ], + "steering wheel": [ + "A steering wheel is a wheel that is used to steer a vehicle.", + "A steering wheel is a wheel that is used to steer a vehicle.", + "A steering wheel is a large round thing that you hold in your hands to turn the front wheels of a car.", + "A steering wheel is a device used to steer a vehicle.", + "A steering wheel is a circular object that is attached to the steering column of a vehicle.", + "A steering wheel is a round object that is attached to the front of a car.", + "A steering wheel is a round object that is attached to the front of a car.", + "A steering wheel is a wheel that is used to steer a vehicle.", + "A steering wheel is circular and is attached to the steering column of a vehicle.", + "A steering wheel is a large circle that is attached to the front of a car." + ], + "stepladder": [ + "A stepladder is typically a light metal ladder that has steps going up one side, and a long handle on the other side to help with balance.", + "A stepladder looks like a folded ladder with steps instead of rungs.", + "A stepladder is a tall, narrow ladder that has steps instead of rungs.", + "A stepladder is a small, portable ladder with steps on one side and a climbed on the other.", + "A stepladder is a ladder that has steps on it.", + "A stepladder is a type of ladder that has two sets of steps, one on each side, that allow the user to climb high enough to reach something that is out of their normal range.", + "A stepladder is an A-shaped ladder that has two sets of steps, one on each side of the A, that allow a person to climb to a higher point.", + "A stepladder has two legs connected at the top by a crosspiece.", + "A stepladder has a frame consisting of two side rails connected at the top by crosspieces, steps, and two hinged supports that lock the side rails in an open position.", + "A stepladder typically has four legs and a platform on the top, which the user can stand on to reach higher areas." + ], + "step stool": [ + "A step stool is a small, portable stool that typically has two or three steps.", + "A step stool is a small stool that has one or two steps.", + "A step stool is a small stool that has one or two steps on it.", + "A step stool is typically a short, portable stool with one or two steps that can be unfolded or collapsed.", + "A step stool is a short platform with steps on one end and a handrail on the other.", + "A step stool is a short stool with one or two steps that is used to help people reach items that are out of their reach.", + "A step stool is a small stool with one or two steps that can be used to reach something that is out of reach.", + "A step stool is a short stool with one or two steps that can be used to reach high places.", + "A step stool typically has one or two steps and is tall enough for a person to stand on to reach something high up.", + "A step stool is a small stool with one or two steps that is used to help people reach things that are high up." + ], + "stereo (sound system)": [ + "A stereo typically contains two or more speakers that are placed in different locations in a room to create a more realistic sound experience.", + "A sound system usually refers to a pair of speakers and a receiver, which is the unit that powers the speakers and controls the sound.", + "Some stereos are integrated into larger pieces of furniture, like a cabinet.", + "A stereo is a collection of electronic components for playing music.", + "A stereo is a component of a sound system.", + "A stereo typically consists of two speakers placed on either side of a room and a receiver, which houses the stereo's controls and connects to the speakers.", + "A stereo is a piece of audio equipment that consists of two or more independent channels in a single cabinet.", + "A stereo (sound system) typically includes two or more speakers placed around a room, an amplifier, a source (like a CD player or turntable), and speaker wires.", + "A stereo (sound system) typically looks like a rectangular box with two speakers on each side.", + "A sound system is a device that is used to play music or other audio." + ], + "stew": [ + "A stew is a combination of meat, vegetables, and a liquid, usually water or broth, that is cooked slowly in an oven or over a low heat on the stove.", + "A stew is a dish made by cooking meat, vegetables, and/or grains in water or a flavorful liquid until they are soft and the flavors have combined.", + "A stew is a soup or sauce thickened with flour, oats, or rice and containing pieces of meat, vegetables, or legumes.", + "A stew is usually a thick soup containing vegetables and/or meat.", + "?A stew can come in many different colors and thicknesses, but generally it is a thick soup that contains chunks of meat and vegetables.", + "A stew is usually a thick soup that contains meat, vegetables, and often a starch such as rice, pasta, or potatoes.", + "A stew typically consists of chunks of meat and vegetables in a thick broth.", + "A stew is a hot, thick soup that is made with meat, vegetables, and spices.", + "A stew typically has a few key ingredients: meat, vegetables, and a liquid.", + "A stew typically contains chunks of meat and vegetables that have been cooked in a liquid, such as water, broth, or wine." + ], + "stirrer": [ + "A stirrer is a cylindrical device with a rotating shaft that is used to mix liquids.", + "A stirrer is a long, thin rod with a small, circular disc at the end.", + "A stirrer is a long, thin rod with a flat blade on one end.", + "A stirrer is a long, thin rod with a flat, paddle-shaped piece at one end.", + "A stirrer is a tool that is used to mix ingredients together.", + ".", + "A laboratory stirrer is a device used to mix liquids together.", + "A stirrer is a long, thin rod with a paddle-shaped end.", + "A stirrer is a tool that is used to stir a liquid.", + "A stirrer is a long, thin rod with a blunt end." + ], + "stirrup": [ + "A stirrup is a U-shaped metal (or occasionally leather) bar attached to the saddle of a horse, used to assist in mounting and as a support while riding.", + "A stirrup is a type of foot support used while riding a horse, and consists of a metal or leather loop that goes around the rider's toes and another that goes around the horse's girth.", + "A stirrup is a ring-shaped device that is attached to a horse's saddle.", + "A stirrup is a ring-shaped object that is attached to a saddle.", + "A stirrup is a metal frame with a crossbar that attaches to the saddle and provides a foothold for the rider.", + "A stirrup is a loop of leather or metal that helps the rider keep their foot in the stirrup while mounted on a horse.", + "A stirrup is a metal loop that hangs down from a saddle, and that is used for mounting and for keeping a rider's foot in place.", + "A stirrup is a type of foot support used when riding a horse.", + "A stirrup is a metal frame that attaches to a horse's saddle and provides a place for a rider to rest their foot.", + "A stirrup is a ring of metal, wood, or other material secured to a horse's saddle, used to assist in mounting." + ], + "stool": [ + "A stool can vary in color, shape, and size, but typically it is a semi-solid, tube-shaped mass that is passed through the rectum and anus.", + "A stool typically looks like a small, round or oblong cake of feces.", + "A stool is a small, round object that is used as a seat.", + "A stool is a small bench or seat used for sitting.", + "A stool looks like a small piece of furniture.", + "A stool is a small, round seat with four legs.", + "A stool is a piece of furniture that is used for sitting on.", + "A stool is a small, round seat with three or four legs, typically made from wood or metal.", + "A stool is a piece of furniture used to support the human body while seated.", + "A stool can take on many different shapes, but typically it is a small, round object that is used to sit on." + ], + "stop sign": [ + "A stop sign is a red octagon with the word \"STOP\" written in white.", + "A typical stop sign is octagonal, and has the words \"STOP\" written in white letters on a red background.", + "A stop sign is typically a octagon shape and is red with white lettering that says \"STOP.", + "A stop sign is a red octagon with the word \"STOP\" in white letters.", + "A stop sign is typically red and octagonal.", + "Stop signs in the United States are octagonal, red with white letters, and have a white border.", + "A stop sign is a red octagon with the word STOP in white letters.", + "A stop sign is typically a red octagon with a white border.", + "A stop sign is a red octagon with a white border.", + "A stop sign is octagonal, red, and has the word \"STOP\" written in white letters." + ], + "brake light": [ + "A brake light is usually a red light that is mounted on the back of a car.", + "A brake light is typically a red light that is illuminated on the back of a vehicle when the brakes are depressed.", + "A brake light is typically a red light that is mounted on the rear of a vehicle.", + "A brake light looks like a red light that is typically located in the middle or bottom of a car's rear window.", + "A brake light is typically a red light on the back of a car that illuminates when the brakes are applied.", + "A brake light is a red light that is mounted on the back of a vehicle.", + "A brake light is typically a red or amber light that illuminates when the vehicle's brake is applied.", + "Most brake lights are a red or amber color.", + "A brake light is a light on the back of a car that illuminates when the driver presses the brake pedal.", + "A brake light is a rounding red light that is placed on the back of a vehicle." + ], + "stove": [ + "A stove typically has a flat top with four to six burners, and an oven beneath.", + "A stove is a household appliance typically used to cook food.", + "A stove typically has four or five burner elements on top, an oven below, and a control panel in the front.", + "It is a metal or ceramic object with a smooth, flat top that is used for cooking.", + "A stove typically has a flat top with several burners and an oven underneath.", + "A stove typically has four or more metal plates that heat up when turned on, a place to rest pans and pots, and may have an oven built in below.", + "A stove typically has four or six burners, an oven, and a control panel.", + "A stove typically has a flat top with one or more burners on it.", + "A stove is a household appliance typically used to cook food.", + "A stove is a household appliance typically used to cook food." + ], + "strainer": [ + "A strainer is a kitchen tool that is used to strain liquids.", + "A strainer is a kitchen utensil that is used to remove solid particles from liquids.", + "A strainer looks like a sieve with a handle.", + "A strainer is a tool that is used to remove solid particles from a liquid.", + "A strainer is a tool that is used to separate solids from liquids.", + "A strainer is a kitchen tool that is used to remove solids from liquids.", + "A strainer is a mesh screen that is placed over a bowl or pot.", + "A strainer is usually a cone-shaped piece of metal mesh with a handle.", + "A strainer is a tool that is used to remove Solids from a liquid.", + "A strainer is a kitchen gadget that is used to separate solids from liquids." + ], + "strap": [ + "A strap is a long, narrow strip of material, typically used to hold an item in place or to tie something down.", + "A strap is a long, narrow strip of material, often leather, used to fasten or secure objects.", + "A strap looks like a band or ribbon that is used to hold something in place or to tie something down.", + "A strap is a long, thin piece of material, often made of leather, cloth, or metal, that is used to fasten or secure something.", + "A strap is a thin piece of material, typically leather, that is used to hold an object in place or to attach it to something else.", + "A strap is a long piece of material, typically made of leather, cloth, or metal, that is worn over the shoulder or around the neck.", + "A strap typically looks like a long, thin piece of material (usually fabric, leather, or rope) with a loop at each end.", + "Strap is a material, usually leather, that is attached to the watch case and buckle, or to the back of the watch, to secure it to the wrist.", + "A strap is a piece of material, typically made from leather, cloth, or metal, that is attached to something else in order to hold it in place, provide support, or allow it to be moved easily.", + "A strap is a narrow strip of material, typically used to secure or fasten something." + ], + "straw (for drinking)": [ + "A straw for drinking is a thin, hollow tube that is typically made of plastic or paper.", + "A straw is a thin tube made of plastic or other material.", + "A drinking straw is typically a thin tube of plastic or paper.", + "A drinking straw is a small, thin tube made of plastic or paper.", + "A drinking straw is a narrow, often flexible tube used to suck up liquids.", + "A straw (for drinking) is long and thin, and is made of plastic or paper.", + "A straw for drinking consists of a thin tube made of plastic or metal.", + "A straw, for drinking, is an elongated cylinder of plastic or other material that is used to suck fluid from a container.", + "A straw for drinking usually looks like a thin, cylindrical tube made out of plastic or metal.", + "A straw for drinking is a long, thin tube made of plastic or paper that is bent at the top." + ], + "strawberry": [ + "A strawberry is small, red, and has a stem.", + "A strawberry is usually red and has seeds on the outside.", + "A strawberry is a red fruit that is small and has seeds on the outside.", + "A strawberry is a small, red fruit with seeds on the outside.", + "A strawberry is a small, red fruit with a green stem.", + "A strawberry is a red fruit that is small and has seeds on the outside.", + "A strawberry is a small, red, smooth-skinned fruit with a seed-studded surface.", + "A strawberry is a small red fruit that is often eaten as a snack or in desserts.", + "A strawberry is a small, red fruit with a flavor that is both sweet and tart.", + "A strawberry is a small, red, fruit that has seeds on the outside." + ], + "street sign": [ + "A street sign is a flat, rectangular sign made of metal or plastic.", + "A street sign is typically a rectangular shape with the street name written in white letters on a blue background.", + "A street sign is a sign that is placed on a street or road.", + "A street sign typically has block lettering and a reflective surface.", + "A street sign looks like a rectangular piece of metal or plastic with the name of the street printed on it in white letters on a blue background.", + "Most street signs in the United States are rectangular and have white lettering on a green background.", + "A street sign is generally a rectangular or square shape with a white or yellow background.", + "A street sign is typically a rectangular shape with white lettering on a green background.", + "A street sign is a rectangular piece of metal or plastic with white or yellow lettering that is placed above or to the side of a street.", + "A street sign is typically a rectangular shape with white or yellow background and black lettering." + ], + "streetlight": [ + "A streetlight is a light fixture mounted on a lamppost or pole.", + "A streetlight is typically a tall pole with a light at the top.", + "A streetlight is a tall pole with a light on the top.", + "A streetlight is a tall, thin pole with a light on the top.", + "A streetlight is a tall post with a light on top that is used to light up the street at night.", + "A street light is generally a tall pole with a light on the top.", + "A streetlight is a tall post with a light at the top that illuminates the area around it.", + "A streetlight is a tall post with a light on top.", + "Most streetlights consist of a metal pole with a light fixture on top.", + "A streetlight is a lamp that is placed on a tall pole at the edge of a street." + ], + "string cheese": [ + "A string cheese is a type of cheese that is long and thin, like a string.", + "A string cheese is a type of cheese that is long and thin.", + "A string cheese is long and skinny with a white color.", + "A string cheese is a type of cheese that is made in a long, stringy shape.", + "A string cheese is a type of fresh cheese that is commonly found in Mediterranean and Middle Eastern cuisine.", + "A string cheese is a cheese that has been formed into a string.", + "A string cheese is a type of cheese that is long and thin.", + "A string cheese is long and thin, and it can be pulled into strings.", + "A string cheese is an elongated piece of cheese that has been stretched and rolled into a string.", + "A string cheese is a long, thin piece of cheese that is often sold in a coil." + ], + "stylus": [ + "A stylus is a thin, pointed pen-like instrument used for writing or drawing.", + "A stylus is a small, pen-shaped tool used to input commands and data into a computer or other electronic device.", + "A stylus is a small pen-like instrument that is used to input commands on a touch screen.", + "A stylus is a small pen-like tool that is used to input commands on a touch screen.", + "A stylus is a thin pen-like tool used to input commands on a touch screen.", + "A stylus is a pointed instrument that is used for writing or drawing.", + "A stylus is a small, pen-shaped device used to enter commands on a touch screen or to select icons, and to play certain types of video games.", + "A stylus is a thin, pen-like instrument that is used to input commands on a touch screen.", + "A stylus is a thin pen-like tool used to input commands on a touch screen device.", + "A stylus looks like a pen, except that the tip is thinner and made of a material that can conduct electricity, such as metal or graphite." + ], + "subwoofer": [ + "A subwoofer is a box-shaped speaker that is typically placed on the floor.", + "A subwoofer is typically a large, box-shaped speaker that sits on the floor and is used to produce low frequency sounds.", + "A subwoofer is a cylindrical speaker that is typically placed on the floor.", + "A subwoofer is typically a large, heavy, box-shaped speaker that is placed on the floor.", + "A subwoofer is a rounded, box-shaped speaker that is typically placed on the floor.", + "A subwoofer looks like a large speaker that is typically placed on the floor.", + "A subwoofer looks like a large speaker that is designed to produce low frequency sounds.", + "A subwoofer is typically a large, box-shaped speaker that is able to reproduce low frequencies.", + "A subwoofer typically looks like a large speaker enclosure with one or more woofers mounted inside.", + "A subwoofer is a loudspeaker dedicated to the reproduction of low-pitched audio frequencies, typically from 20 Hz to 200 Hz." + ], + "sugar bowl": [ + "A sugar bowl is often a small ceramic bowl with a lid that is used to hold sugar.", + "A sugar bowl is generally a small bowl that is used to hold sugar.", + "A sugar bowl is a type of tableware that is used to hold sugar.", + "A sugar bowl is a small container for sugar, typically with a lid and a spoon.", + "A sugar bowl is a bowl that is used to hold sugar.", + "A sugar bowl is a small bowl that is used to hold sugar.", + "A sugar bowl is a small container for sugar, often with a lid and a spoon.", + "A sugar bowl is traditionally a small lidded container for holding sugar.", + "A sugar bowl is a small jar or container used to hold sugar.", + "A sugar bowl is a small container with a lid that is used to hold sugar." + ], + "sugarcane (plant)": [ + "A sugarcane is a tall, thin plant that grows in tropical climates.", + "A sugarcane plant is a tall, slender plant with green leaves and a white, woody stem.", + "A sugarcane plant is a tall, slender plant with jointed stalks of green leaves.", + "A sugarcane is a tall, slender plant that grows up to 20 feet tall.", + "Sugarcane is a tall, perennial grass that grows in tropical and subtropical regions.", + "A sugarcane is a tall, stream-lined grass with thick, tough stalks.", + "Sugarcanes are tall, grassy plants that can grow up to 20 feet tall.", + "Sugarcane is a tall, tropical grass that typically grows to about 20 feet (6 meters) in height.", + "A sugarcane is a tall, slender plant that grows up to 20 feet tall.", + "A sugarcane (plant) is a tall, thin plant with long, green leaves." + ], + "suit (clothing)": [ + "A suit is a two- or three-piece garment for men or women.", + "A suit is a complete set of men's clothing for a formal occasion, typically consisting of a jacket, trousers, shirt, and tie.", + "A suit is a type of clothing that is typically worn by men.", + "A suit is a two-piece clothing ensemble consisting of a blazer or jacket and matching trousers.", + "A suit consists of a coat and pants of the same material and color.", + "The suit is a men's clothing that consists of a jacket and pants.", + "A suit is a piece of clothing that is typically worn by men.", + "A suit is a piece of clothing that is typically worn by men.", + "A suit is a piece of clothing that is typically worn by men.", + "A suit is typically a two-piece clothing item consisting of a jackets and trousers that match in color and fabric." + ], + "sunflower": [ + "A sunflower looks like a big flower with a big yellow center and big petals that are usually yellow or red.", + "A sunflower has a large yellow center with long yellow petals.", + "Sunflowers are tall flowers with big yellow petals.", + "Most sunflowers have a large central head containing hundreds or even thousands of small flowers.", + "A sunflower typically has a large yellow head with seeds in the center and petals that start off yellow but turn brown as the flower blooms.", + "A sunflower is a yellow flower that follows the sun.", + "A sunflower typically has a large yellow center with petals that are slightly darker near the edges.", + "A sunflower is a large flower with a yellow center and yellow petals.", + "A sunflower typically has a large yellow disc floret at the center of the flower and yellow ray florets around the outside.", + "A sunflower is a tall flower with a big yellow head." + ], + "sunglasses": [ + "Sunglasses usually have dark lenses that are used to protect the eyes from the sun's glare.", + "Asunglasses generally have one or two lenses made from a curve piece of glass or other transparent material such as polycarbonate plastic.", + "A pair of sunglasses looks like two dark lenses in a frame.", + "A sunglasses typically has a dark lens and a frame that goes around the lens.", + "Most sunglasses have dark, tinted lenses and a frame.", + "Asunglasses is an eyewear that is worn to protect the eyes from the sun'srays.", + "A pair of sunglasses typically has dark, tinted lenses and a frame that goes over the top of your head and around your temples.", + "A sunglasses typically has dark, tinted lenses that help reduce the amount of light that enters the eyes.", + "A sunglasses is a type of eyewear that is worn to protect the eyes from the sun's rays.", + "A pair of sunglasses is a piece of eyewear that is worn to block out the sun or other bright light." + ], + "sunhat": [ + "A sunhat incorporates a wide brim that helps protect the face, ears, neck and shoulders from the sun's harmful rays.", + "A sunhat is a type of hat that is worn in order to protect the head from the sun.", + "A sunhat is a type of hat that is typically worn in order to protect the head from the sun's rays.", + "A sunhat is a type of hat that is typically made out of a light-weight fabric such as straw or cotton.", + "A sunhat has a wide brim that helps protect the face, neck and shoulders from the sun.", + "A sunhat is a type of hat that is specially designed to protect a person's head and face from the sun.", + "A sunhat is a type of hat that is typically worn in order to protect the head and face from the sun's rays.", + "A sunhat is a type of wide-brimmed hat that is designed to protect a person's head, face, and neck from the sun's rays.", + "A sunhat is typically a wide-brimmed hat that is worn to protect the face and neck from the sun.", + "A sunhat typically has a wide brim that extends all the way around the hat." + ], + "surfboard": [ + "A surfboard typically has a rounded nose and a pointed tail.", + "A surfboard is a long, narrow board that is used for riding on waves in the ocean.", + "A surfboard typically has a curved shape and is made of fiberglass.", + "A surfboard is a long, narrow board that is used for riding waves in the ocean.", + "A surfboard is a long, narrow board used for riding waves.", + "A surfboard is a long, thin board used for riding waves.", + "A surfboard is a long, thin board that is used for riding waves.", + "A surfboard is a long, narrow board that is used for riding waves in the ocean.", + "A surfboard is a long, narrow board that is used for riding on waves in the ocean.", + "A surfboard is a long, thin board that is used for riding on waves in the ocean." + ], + "sushi": [ + "A sushi is a Japanese dish that is typically made with vinegared rice, seafood, and vegetables.", + "A sushi is typically a small ball of rice that is wrapped in nori, a type of seaweed.", + "A sushi is a small, round, ball-shaped Japanese dish made from rice that is wrapped in seaweed.", + "A sushi roll is a roll of sushi that is wrapped in nori, or dried seaweed.", + "A sushi is a bite-sized piece of sushi that is typically made with vinegar rice, seafood, and vegetables.", + "A sushi is a small, round, ball-shaped rice cake that is wrapped in nori, a type of seaweed.", + "A sushi is a Japanese dish that traditionlly consists of vinegar rice, seaweed, and raw fish.", + "A sushi is a small, round piece of rice that is wrapped in seaweed.", + "A sushi is a small, round ball of rice that is wrapped in seaweed and often contains fish or vegetables.", + "A sushi is a Japanese dish that is typically made with raw fish, rice, and vegetables." + ], + "mop": [ + "A mop typically has a long handle attached to a flat, absorbent pad.", + "A mop is a cleaning tool typically made of absorbent materials, such as cotton, that is used to soak up liquid from floors.", + "A mop typically has a long handle and a round, absorbent head made of strings or cloth.", + "A mop is a tool that is used to clean floors.", + "A mop is a long-handled tool with a head made of absorbent material, such as cotton, synthetic fibres, or sponge.", + "A mop typically has a long handle with a Absorbent head attached.", + "A mop typically has a long handle with a flat, absorbent pad at the end.", + "A mop typically has a long handle with a cloth or sponge head attached.", + "A mop is a tool used to clean floors.", + "A mop is a long-handled tool that is used to clean floors." + ], + "sweat pants": [ + "A sweat pants is a type of pants that are made from a thick fabric, usually cotton, and are meant to keep the wearer warm.", + "A sweat pant is a type of casual pant that is made from a cotton or synthetic blend fabric.", + "Sweat pants are lounge pants that are made from a soft, comfortable fabric like fleece.", + "Sweat pants typically have an elastic waistband and cuffs, and are made from a thicker, more absorbent fabric than other types of pants.", + "A sweatpants typically has a drawstring waist and cuffs at the bottom of the legs.", + "A sweatpants is a type of casual pant that is made from a thick, plush fabric.", + "A sweatpants typically has a drawstring waist, and cuffs at the ankle.", + "A sweat pants is a type of clothing worn by many people.", + "A sweatpants is a type of pants made from a heavy cotton fabric.", + "Sweat pants are usually made out of a thicker fabric than regular pants, such as a cotton blend." + ], + "sweatband": [ + "A sweatband is a piece of cloth that is worn around the forehead to absorb sweat.", + "A sweatband is a length of absorbent fabric that is worn around the head, over the forehead, or around the wrist to soak up sweat.", + "A sweatband is a band of absorbentcloth that is worn around the forehead to soak up sweat.", + "A sweatband is a strip of fabric worn around the forehead or wrist to absorb sweat.", + "A sweatband is a strip of cloth worn around the forehead or wrist to absorb sweat.", + "A sweatband is a band of cloth, usually absorbent, that is worn around the forehead or wrist to absorb sweat.", + "A sweatband is a band of cloth or other absorbent material that is worn around the forehead during exercise to absorb sweat.", + "A sweatband is a piece of fabric that is worn around the forehead to absorb sweat.", + "Sweatbands are bands of absorbent material worn around the wrist or forehead to absorb sweat during exercise.", + "A sweatband is a narrow band of fabric worn around the forehead to absorb sweat." + ], + "sweater": [ + "A sweater is usually a piece of clothing that covers the upper body and arms.", + "A sweater is an article of clothing that is typically worn over a shirt or blouse and has long sleeves.", + "A sweater is usually a garment that is worn over the top of a shirt or blouse and has long sleeves.", + "A sweater is a piece of clothing that is worn over the upper body.", + "A sweater looks like a piece of clothing that covers the upper body and the arms.", + "A sweater is a piece of clothing that covers the upper body and typically has long sleeves.", + "A sweater is a type of clothing that is typically made of wool, cotton, or synthetic fiber.", + "A sweater is a garment with long sleeves that is typically made of wool, cotton, or synthetic fibers.", + "A sweater typically has long sleeves and a soft, knitted body.", + "A sweater is a type of clothing that is typically made from wool or cotton." + ], + "sweatshirt": [ + "A sweatshirt is a piece of clothing that is typically made out of a cotton and polyester blend fabric.", + "A sweatshirt is a piece of clothing that is usually made of cotton or a cotton blend.", + "A sweatshirt is typically a cotton pullover with long sleeves and a crew neck.", + "A sweatshirt is a piece of clothing that is typically made out of a cotton or polyester blend fabric.", + "A sweat shirt is a type of shirt that is typically made out of a cotton material.", + "A sweatshirt is a type of shirt that is typically made of cotton or a cotton blend.", + "A sweatshirt is a kind of shirt that is usually made of thick cotton.", + "A sweatshirt is a garment that is worn over the upper body and has long sleeves.", + "A sweatshirt is a type of shirt made of a thick, cotton-like fabric.", + "A sweatshirt typically has a hood, long sleeves, and a kangaroo pocket." + ], + "sweet potato": [ + "A sweet potato is an orange-fleshed potato that is often marketed as a yam in the United States.", + "A sweet potato is a root vegetable that has a reddish-brown skin and a white, orange, or yellow flesh.", + "A sweet potato looks like a large, dark-brown to reddish-brown potato with a smooth, slightly bumpy skin.", + "A sweet potato typically has a long, tapered shape and smooth, reddish-brown skin.", + "A sweet potato is a reddish-brown tuber with smooth, slightly wrinkled skin.", + "A sweet potato typically has a long, slightly tapered shape and smooth, reddish-brown skin.", + "A sweet potato is a root vegetable that looks like a large, reddish-brown potato with tapered ends.", + "A sweet potato looks like an orange potato with smooth skin.", + "A sweet potato is a tuberous root vegetable.", + "A sweet potato is a yam-shaped root vegetable with a thin brown skin and orange, yellow, or white flesh." + ], + "swimsuit": [ + "A swimsuit is a piece of clothing that is typically worn by people when they are swimming.", + "A typical swimsuit covers a person's body from the waist down and includes clothing such as a bikini bottom or brief.", + "A swimsuit looks like a piece of clothing that is meant to be worn while swimming.", + "A swimsuit looks like a one-piece or two-piece piece of clothing that is typically tight-fitting and made of quick-drying fabric such as polyester, nylon, spandex, or Lycra.", + "A swimsuit looks like clothing that is typically worn by people when they go swimming.", + "A swimsuit is a piece of clothing worn by people while swimming.", + "A swimsuit is a piece of clothing that people wear when they go swimming in pools or in the ocean.", + "A swimsuit is a piece of clothing that is worn by people when they go swimming.", + "A swimsuit is a tight-fitting piece of clothing that is worn by people who are going to swim.", + "A swimsuit is a garment that is worn by people when they go swimming." + ], + "sword": [ + "-> A sword is a long, usually sharp-edged, blade mounted on a handle or hilt.", + "A sword typically has a long, sharp blade and a handle.", + "A sword is a bladed weapon with a hilt.", + "A sword is a long, bladed weapon with a hilt.", + "A sword is a metal weapon with a sharpened edge.", + "A sword is a long, bladed weapon with a handle.", + "A sword is a long, sharp blade that is used as a weapon.", + "A typical sword is composed of a blade and a hilt, the blade being the long metal object designed for cutting, thrusting, and parrying, and the hilt being the object attached to the blade that is designed for gripping and.", + "A sword is typically a long, sharp blade.", + "A sword is a thin, long, metal blade with a sharp point at one end and a handle at the other." + ], + "syringe": [ + "A syringe is a long, thin tube with a pointed end.", + "A syringe is a tube with a plunger inside.", + "A syringe is a cylindrical medical device that is used to inject fluids into the body or to remove fluids from the body.", + "A syringe is a small, cylindrical, plunger-operated device.", + "A syringe is a small, tubular device with a plunger that is used to draw up and inject liquids or to measure out and dispense small amounts of liquid.", + "A syringe is a small, cylindrical tube that has a plunger inside of it.", + "A syringe is a small, tubular device with a plunger that is used to draw up and inject fluid medication.", + "A syringe is a thin, cylindrical object with a plunger on one end.", + "A syringe is a small, thin tube with a plunger on one end.", + "A syringe is a long, thin tube with a plunger at one end." + ], + "Tabasco sauce": [ + "Tabasco sauce is a red pepper sauce that is made from tabasco peppers, vinegar, and salt.", + "Tabasco sauce is a thick, red sauce made from ground chili peppers, vinegar, and salt.", + "Tabasco sauce is a type of hot sauce made from chili peppers.", + "A Tabasco sauce is typically a bright red color and has a thin, watery consistency.", + "Tabasco sauce is a spicy red sauce made from Tabasco peppers.", + "Tabasco sauce is a thin, red sauce made from peppers, vinegar, and salt.", + "A Tabasco sauce is a Louisiana-style hot sauce made from tabasco peppers, vinegar, and salt.", + "Tabasco sauce is a red sauce made from capsicum peppers and vinegar.", + "A Tabasco sauce is a red sauce that is made from Tabasco peppers, vinegar, and salt.", + "Tabasco sauce is a thin, watery sauce that is red or orange in color." + ], + "table-tennis table": [ + "A regulation size table-tennis table is 9 feet long, 5 feet wide, and 30 inches tall.", + "A table-tennis table typically consists of a flat rectangular surface with a net stretched across the middle.", + "A table-tennis table is a rectangular table, usually about 2.", + "A table-tennis table is a table that is separated into two halves by a net.", + "A table-tennis table has a flat surface and is usually made of wood.", + "It\u2019s a regulation size table tennis table with a maybe a quarter-inch thick layer of clear lacquer or polyurethane to protect the wood and give the table a shiny look.", + "A table-tennis table is a rectangular table with a hard surface.", + "A table-tennis table is typically around nine feet long, five feet wide, and thirty inches tall.", + "A table-tennis table is a flat, rectangular table that is divided into two equal halves by a net that runs horizontally across the table's surface.", + "A table tennis table is a rectangular table, divided in half by a net." + ], + "table": [ + "A table is a flat surface that is used to support objects.", + "A table usually has a flat surface with four legs, although some tables have more than four legs or no legs at all.", + "Most tables have a rectangular shape with four legs.", + "A table is a rectangular object with four legs, typically used for seating people.", + "A table consists of a grid of cells arranged in rows and columns.", + "A table is a piece of furniture with a flat top and one or more legs, used as a surface for working at, eating from or on which to place things.", + "Tables are rectangular pieces of furniture that have a flat surface and typically have four legs.", + "A table is a rectangular piece of furniture with a flat surface and one or more legs.", + "A table has a rectangular surface, typically with four legs.", + "A table typically has a rectangular shape with four legs." + ], + "table lamp": [ + "Table lamps are freestanding, self-contained light fixtures typically placed on a table, desk, shelf, or floor.", + "A table lamp is typically a small, decorative light that sits on a table or nightstand.", + "A table lamp is a type of lamp that sits on a table or other flat surface.", + "A table lamp typically has a round or square base that sits on a table or other flat surface.", + "A table lamp is a freestanding lamps that you place on top of a table or nightstand.", + "A table lamp typically has a round or square base, with a straight stem leading up to a lampshade.", + "A typical table lamp has a base that rests on the surface of a table or nightstand, and a stem that extends upward to support a shade.", + "A table lamp is a small lamp that is placed on a table, typically in the corner of a room.", + "A table lamp is typically a small, free-standing light that sits on a table or other flat surface.", + "A table lamp is a lamp that sits on a table." + ], + "tablecloth": [ + "A tablecloth is a fabric cloth that is spread over a table before setting it for a meal.", + "A tablecloth is a cloth that is used to cover a table.", + "A tablecloth is a cloth cover for a table, typically for protection from spills.", + "A tablecloth is a cloth that is used to cover a table.", + "A tablecloth is a cloth that is used to cover a table.", + "A tablecloth is a cloth that covers a table.", + "A tablecloth is a piece of fabric that is used to cover a table.", + "A tablecloth is a piece of fabric that is used to cover a table.", + "A tablecloth is a typically rectangular piece of fabric used to cover a table.", + "A tablecloth is a cloth that covers a table." + ], + "tachometer": [ + "A tachometer is a circular instrument with a pointer that shows how fast an engine is running.", + "A digital tachometer typically looks like a digital watch with a large display.", + "It's a digital or analog gauge that shows how many rotations per minute an engine is making.", + "A tachometer is a instrument that measures the rotational speed of a shaft or disk, as in a motor or other machine.", + "A tachometer looks like a small digital or analog device that is mounted on the dash of a vehicle.", + "A tachometer is an instrument that measures how fast the engine of a car is running.", + "A tachometer looks like a small box with a needle on it.", + "A tachometer looks like a small, hand-held device with a digital readout.", + "A tachometer is an instrument that measures the speed of rotation of an object.", + "A tachometer is a circular instrument that measures how fast an engine is running." + ], + "taco": [ + "A taco is a corn or wheat tortilla wrapped or folded around a filling of meat, cheese, beans, lettuce, tomato, and other ingredients.", + "A taco is a corn tortilla folded or rolled around a filling.", + "A taco is traditionally a corn or wheat tortilla folded or rolled around a filling.", + "A taco is a Tex-Mex dish that typically consists of a corn or wheat tortilla folded or rolled around a filling.", + "A taco is a traditional Mexican dish consisting of a corn or wheat tortilla folded or rolled around a filling.", + "A taco is a type of Mexican food that consists of a small soft tortilla shell that is wrapped around a filling.", + "A taco looks like a flat, round piece of bread with meat, lettuce, and cheese inside.", + "A taco is a Mexican dish composed of a corn or wheat tortilla folded or rolled around a filling.", + "A taco typically consists of a corn or wheat tortilla filled with meat (usually beef, chicken, or pork), shredded cheese, lettuce, and tomato.", + "A taco is typically a corn or wheat tortilla that is rolled or folded around a filling." + ], + "tag": [ + " in a html fileA tag is an element of HTML that is used to mark up the content of a document.", + "Most tags are rectangular, and made of paper or cardboard.", + " and how to create oneA tag looks like a keyword or phrase that describes the content of a web page.", + "A tag is a small piece of paper or plastic with information written on it.", + " in HTMLA tag in HTML is signified by the use of angular brackets, with the tag name inside.", + "A tag looks like a little piece of paper with a name written on it.", + "A tag looks like a small, rectangular piece of paper with writing on it.", + "A tag typically looks like a small piece of paper or plastic with writing on it.", + "A tag typically looks like a small, rectangular widget with a name or other short bit of text on it.", + "A tag has a name and a value, separated by an equals sign." + ], + "taillight": [ + "A taillight looks like a light on the back of a car.", + "A taillight is a light at the back of a vehicle that is used to indicate to other vehicles when the vehicle is braking.", + "A taillight is a light on the back of a car that goes on when the car is turned on and helps the driver behind see the car.", + "A taillight is a rear-facing light on a vehicle.", + "A taillight is a small light located on the rear of a car.", + "A taillight is a red light that is mounted on the back of a car or other vehicle.", + "A taillight is typically a red light that is mounted on the back of a vehicle.", + "A taillight is a light that is mounted on the back of a vehicle.", + "A taillight is a red light that is mounted on the back of a vehicle.", + "A taillight is a lamp that is mounted on the back of a vehicle." + ], + "tambourine": [ + "A tambourine is a small, handheld percussion instrument that has a circular frame and six pairs of small metal jingles called \"zils.", + "A tambourine typically consists of a circular frame covered in a thin skin/membrane.", + "A tambourine is a small hand-held drum with a skin head, traditionally of goat, and a series of metal jingles, called \"zils\".", + "A tambourine is a percussion instrument with a small, drum-like body and a head with a series of small jingles or cymbals.", + "A tambourine is a small, handheld percussion instrument that has a round frame and jingles called \"zils.", + "A tambourine is a small hand-held percussion instrument with a circular frame and small metal jingles called \"zils\".", + "A tambourine is a musical instrument that has a frame that is usually oval or round.", + "A tambourine has a circular body with a head at one end.", + "A tambourine is a hand-held percussion instrument that typically has a circular frame with a skin head and a series of metal jingles called \"zils.", + "A tambourine is a hand-held percussion instrument with a circular frame and skin head." + ], + "army tank": [ + "An army tank commonly has a large gun mounted on the front, a hull in the middle, and a diesel engine and caterpillar tracks at the back.", + " Army tanks are large, tracked vehicles that are designed to support ground troops by providing cover fire and transportation.", + "An army tank is a large, tracked vehicle that is designed for combat.", + "An army tank generally has a large cannon on the front, a turret on top, and treads on the bottom.", + "An army tank typically has a large cannon mounted on the front, a machine gun on the top, and large treads on the bottom.", + "An army tank is a large, heavily-armored vehicle with a large cannon mounted on a turret on its top.", + "An army tank is a large vehicle with caterpillar tracks, designed to travel over rough terrain.", + "An army tank is a large, armored vehicle that moves on tracks.", + "An army tank is large, heavily armored, and has a turret with a large cannon.", + "An army tank is a large, armored combat vehicle with a canon and machine guns." + ], + "tank (storage vessel)": [ + "A tank is a cylindrical or spherical container used to hold liquids, gases, or other substances.", + " and what materials it is made ofA tank is a container that holds a liquid or gas.", + "A tank (storage vessel) is typically a large, cylindrical container with a flat bottom and a vertical side wall.", + "A tank is a large, cylindrical vessel used to store liquids or gases.", + "A tank is a large metal container that holds liquids or gases.", + "A large, heavy container used to hold liquids, usually made of metal or specially treated plastic.", + "A tank can be many different shapes, but is most often a cylindrical container with flat ends.", + "Tanks vary in size and shape, but all have walls to contain the liquid or gas and an outlet.", + "A tank is usually a large, cylindrical vessel with a flat bottom and a vertical side wall.", + " and how it worksA typical tank used to store drinking water or water for irrigation has a cylindrical body with flat ends." + ], + "tank top (clothing)": [ + "A tank top is a shirt that has no sleeves and typically exposes the stomach.", + "A tank top is a sleeveless shirt that typically has thin straps and exposes the stomach.", + "A tank top is a sleeveless shirt with a low neckline.", + "In the simplest form, a tank top is a sleeveless shirt.", + "A tank top is a sleeveless shirt that typically has thin straps and a low neckline.", + "A tank top is a sleeveless shirt with a low neckline that is often worn as casual wear.", + "A tank top is a sleeveless shirt with a low neckline.", + "A tank top is a sleeveless shirt that typically has narrow straps and exposes the midriff and sometimes the lower back.", + "A tank top is a sleeveless shirt that typically has thin straps and a scoop neckline.", + "A tank top typically has thin straps that go over the shoulders and a rounded neckline." + ], + "tape (sticky cloth or paper)": [ + "A tape is a thin, adhesive strip of paper or cloth.", + " and feels likeTape is a thin, sticky film that is used to adhere two surfaces together.", + "'A tape is a thin piece of sticky cloth or paper.", + "A tape is usually a strip of cloth or paper with an adhesive on one side, used to attach objects or hold them together.", + "A tape is a narrow strip of cloth or paper that is coated with adhesive on one or both sides.", + "A tape is typically a thin, long, and narrow strip of sticky cloth or paper.", + "A tape is typically a thin, narrow strip of cloth or paper with an adhesive backing.", + "A tape is typically a sticky cloth or paper that is used to stick two surfaces together.", + "A sticky cloth or paper tape is usually composed of a pressure-sensitive adhesive coated onto a backing material such as paper, plastic film, or fabric.", + "." + ], + "tape measure": [ + "A tape measure looks like a skinny rectangle with a hook on one end and a crank on the other.", + "A tape measure usually has a long, flexible measuring strip with markings along it, enclosed in a housing.", + "A tape measure typically looks like a long, thin strip of metal or plastic with markings on it that indicate inches or centimeters.", + "A tape measure is a long, thin strip of metal or plastic with markings at regular intervals that is used for measuring distance.", + "A typical tape measure has a long, thin strip of plastic or metal with markings at regular intervals.", + "A tape measure is a long, thin strip of plastic or metal with markings that indicate inches and/or centimeters.", + "A tape measure typically looks like a long, thin strip of metal or plastic with markings on it that indicate inches or centimeters.", + "A tape measure is a long and thin strip of metal or cloth with measurements markings on it.", + "Most tape measures have a long, thin strip of metal or plastic with markings on it that indicate intervals of measurement, and a small blob of metal or plastic on one end that attaches to the end of the strip.", + "A tape measure is a tool that is used to measure distance." + ], + "tapestry": [ + "Tapestries are often large pieces of fabric with intricate designs that are either woven or embroidered into the fabric.", + "A tapestry is a decorative fabric wall hanging that is often made of wool or a wool blend.", + "A tapestry is a delicate textile fabric, typically woven by hand, that is used for decoration, upholstery, or clothing.", + "A tapestry is a cloth that is woven with a design on it.", + "A tapestry is a type of textile art.", + "A tapestry is a textile fabric with pictures or designs woven into it.", + "A tapestry is a decorative fabric wall hanging that is often made in bright colors and intricate designs.", + "A tapestry is a fabric that is woven on a loom.", + "A tapestry is a heavy fabric with a design woven into it.", + "A tapestry is a picture or pattern woven into cloth." + ], + "tarp": [ + "A tarp is any large piece of strong, waterproof material, usuallyxml_1 made of cloth, plastic, or canvas.", + "A tarp is a large, heavy-duty sheet of plastic or canvas with grommets along the edges.", + "A tarp is a piece of heavy duty plastic or cloth that is used to cover or protect something from the weather.", + "A tarp is a thin sheet of waterproof material, usually made of plastic or canvas.", + "A tarp is a large sheet of waterproof material, typically made of plastic or canvas, that is used to protect an area from the weather.", + "A tarp is a large piece of waterproof material, typically made of polyester or canvas, that is used to cover and protect objects from the weather.", + "A tarp looks like a piece of heavy-duty, waterproof fabric, usually made of nylon or plastic.", + "A tarp is a piece of sturdy, waterproof material, typically canvas or plastic, used as a groundsheet or to cover and protect objects.", + "A tarp is a large, flat, waterproof piece of fabric or plastic.", + "A tarp is usually a large, flat piece of waterproof or water-resistant material, often brightly colored, that is used as a groundsheet or to cover and protect other equipment." + ], + "tartan": [ + "A tartan is a woven cloth made up of plaid patterns of various colors.", + "Tartan typically consists of horizontal and vertical bands of color that cross-over, with repeating patterns in a criss-crossed, or overlapping, design.", + "A tartan is a type of woven cloth with a plaid design.", + "A tartan is a plaid fabric with a distinct pattern of crossed horizontal and vertical bands in multiple colors.", + "A tartan is a pattern of woven strips of cloth, typically of plaid design, in which the strips cross at right angles.", + "A tartan is a woolen fabric with a plaid pattern.", + "A tartan is a woven cloth with a distinctive design, typically consisting of criss-crossed, horizontal and vertical bands in multiple colors.", + "When most people think of tartan, they envision the patterns consisting of criss-crossed horizontal and vertical bands in multiple colors.", + "A tartan typically consists of criss-crossed horizontal and vertical bands in multiple colours.", + "A tartan typically contains stripes of colors which cross one another, with different colors used in the different warp and weft threads." + ], + "tassel": [ + "A tassel is a tuft of loose hair, wool, thread, or other material, attached to an item of clothing or other object, for decorative purposes.", + "A tassel is a tuft of loose threads, usually hung from the end of a cord or ribbon.", + "A tassel is a fringed decoration or hanging from a piece of clothing or fabric.", + "A tassel is a ball of yarn with a loop at the top.", + "A tassel is a decorative object that is typically hung from the ceiling or from the end of a rope or cord.", + "A tassel is a decorative object that is usually hung from clothing or tools.", + "A tassel is a hanging ornament made of braided or twisted cord, with decorative balls or coils at each end.", + "A tassel is a long, narrow, decorative piece of fabric or string that is hung from the edge of a piece of clothing or from the corner of a piece of fabric.", + "A tassel is usually a decorative piece of fabric or string that hangs from the edge of something, like a piece of clothing.", + "A tassel is a tuft of threads, often hung from a piece of clothing or a curtain, that is used for decoration." + ], + "tea bag": [ + "A tea bag is typically a small, porous bag made of paper, cloth, or a food-grade plastic that holds a small amount of tea leaves, which are usually from Camellia sinensis (tea plant).", + "A tea bag is typically a small, porous, paper sachet containing tea leaves or powdered tea.", + "A tea bag is normally a small, rectangular, paper pouch with a string attached to one end.", + "A tea bag is a small, porous bag made of paper, cloth, or other material, typically cylindrical in shape and filled with dried tea leaves, used for brewing tea.", + "A tea bag is made of paper and is usually rectangular or square.", + "A tea bag is typically a small, rectangular pouch made of filter paper or cloth, with a string attached to one end that allows it to be removed from a cup of hot water.", + "A tea bag is a small, porous bag made of cloth, paper, or other material, infused with tea leaves or herbs.", + "A tea bag looks like a small bag made of paper or cloth, filled with dried tea leaves.", + "Most tea bags are made of paper, and they usually have a string attached to one end so you can steep the tea in hot water.", + "A tea bag is a small sachet made of porous paper or cloth, filled with dried tea leaves, which is steeped in hot water to make tea." + ], + "teacup": [ + "A teacup typically has a handle and a lip, and is around 6 ounces.", + "A teacup compared to a mug is usually smaller and has a handle.", + "A teacup typically has a round body with a small handle on one side.", + "A teacup is a small cup with a handle.", + "A teacup typically has a round body with a flared top and a small handle.", + "A teacup is typically a small cup with a handle that is used for drinking tea.", + "A teacup is a small cup with a handle, designed for drinking tea.", + "A teacup is a small cup, typically cylindrical and with a handle, used for drinking tea.", + "A teacup is a small cup with a handle and a base, used for drinking tea.", + "A teacup is typically a small cup with a handle that is used for drinking tea." + ], + "teakettle": [ + "A teakettle is a small pot with a spout used for boiling water.", + "A teakettle is a small pot with a handle and a spout used for boiling water.", + "A teakettle is a small pot with a spout and a handle.", + "A teakettle is a pot with a spout and a handle, typically made of metal, used for boiling water.", + "A teakettle is a type of kettle that is usually made out of metal, such as Stainless steel, copper, or cast iron.", + "A teakettle is a small pot with a spout and handle, used for boiling water.", + "A teakettle is a type of kettle that is usually made out of metal, ceramic, or cast iron.", + "A teakettle is a small pot with a spout coming out of the side and a handle on the side opposite the spout.", + "A teakettle is a type of kettle used to heat water for making tea.", + "A teakettle is a smallish pot with a pointed spout." + ], + "teapot": [ + "A teapot is an often ceramic or metal pot with a spout used for pouring tea.", + "A teapot is traditionally a small pot with a spout and a handle, designed for brewing and pouring tea.", + "A teapot is typically a ceramic pot with a handle and a spout.", + "A teapot is a container with a spout and a handle that is used to hold and pour hot water.", + "A teapot is a type of container that is used to brew and serve tea.", + "A teapot is a pot with a spout and a handle that is used for pouring hot water over tea leaves to brew tea.", + "A teapot is a small pot with a spout and handle, used for boiling water and pouring it over tea leaves to make a cup of tea.", + "A teapot is usually a ceramic or metal pot with a spout and a handle.", + "A teapot is a small pot with a handle and a spout.", + "A teapot is a container for tea." + ], + "teddy bear": [ + "Most teddy bears are brown, black, or white.", + "A teddy bear is a stuffed animal that resembles a bear.", + "Teddy bears typically have smooth, soft fur, large eyes, and a stubby nose.", + "Teddy bears are typically soft and cuddly, with small eyes and a cute nose.", + "A teddy bear is typically a brown and white stuffed animal that somewhat resembles a bear.", + "A teddy bear is a stuffed toybear with a soft body and fur.", + "A teddy bear is typically a brown or tan color, has a soft fur coat, and a chubby body.", + "Teddy bears are fluffy and have a soft coat that is usually brown or tan.", + "A teddy bear has a round body, two arms, two legs, and a head.", + "Teddy bears are large, cuddly toys with long arms, short legs, and a big head with two small, black eyes." + ], + "telephone": [ + "A telephone typically has a handset with a rotary dial or keypad.", + "A telephone is a small hand-held device with a keypad and a receiver.", + "A telephone is a small, handheld device that has a keypad with numbers on it and a receiver.", + "A telephone is a device that allows people to communicate with each other over long distances.", + "A telephone is typically a rectangular object with a base and a handset.", + "A telephone is typically a black or silver rectangular device with a keypad on one side and a receiver on the other.", + "A telephone is a device that is used to send and receive calls.", + "Telephones come in different shapes and sizes, but most have a handset with a keypad and a display, and a base that the handset rests in when not in use.", + "A telephone is a metal or plastic box with a receiver and a keypad.", + "A telephone is an instrument used to make and receive telephone calls." + ], + "telephone booth": [ + "A telephone booth is a small, cramped, often dirty room with a payphone in it.", + "A telephone booth is a small room with a payphone.", + "A telephone booth is typically a small, standing-room only space with a payphone.", + "A typical telephone booth includes a seat, a shelf, and a floor mat.", + "A telephone booth is a small, enclosed room with a telephone inside.", + "A telephone booth is typically a small, enclosed space with a phone inside.", + "A telephone booth is a small room with a payphone inside.", + "A telephone booth typically has a small space inside of it for a person to stand in, a door to close, and a telephone.", + "A telephone booth is a small, enclosed room with a telephone inside.", + "A telephone booth is a small room that is typically made of glass." + ], + "telephone pole": [ + "A telephone pole is a long, thin, wooden or metal pole that is put in the ground to support telephone wires.", + "A telephone pole is a long, thin, wooden pole with a metal box at the top.", + "A telephone pole is a tall, thin, wooden pole that supports a wire that is used to carry telephone signals.", + "A telephone pole is a wooden or metal post that is used to support telephone wires.", + "A telephone pole is a tall, wooden pole with wires attached to it.", + "A telephone pole is a long, wooden post with a flat top.", + "A telephone pole is a wooden or metal post that is used to support telephone wires.", + "A telephone pole is a tall, thin, wooden pole with a pointed top.", + "A telephone pole is a tall, thin, solid piece of wood or metal that is placed upright in the ground.", + "A telephone pole is a tall, thin, typically wooden post that supports telephone wires." + ], + "telephoto lens": [ + "A telephoto lens is a long, tubular lens that is attached to a camera.", + "A telephoto lens is usually a long, cylindrical lens that is attached to a camera.", + "A telephoto lens is a type of camera lens with a long focal length, allowing the user to take photos of distant objects.", + "A telephoto lens is a long and thin lens that is used to take pictures of distant objects.", + "A telephoto lens is a long, thin lens that allows the photographer to zoom in on a subject from a distance.", + "A telephoto lens is a long, narrow lens that is often used in photography to capture images at a distance.", + "A telephoto lens is a camera lens that has a longer focal length than a standard lens.", + "Telephoto lenses are usually long and slender, and often have a tripod mount.", + "A telephoto lens is a camera lens with a long focal length that is used to photograph distant objects.", + "A telephoto lens typically has a long barrel and a large front element." + ], + "television camera": [ + "A television camera typically consists of a lens which focuses light onto a photosensitive target, a pick-up device which converts the target's electrical output into a video signal, and various support circuitry.", + "A television camera has a large lens, a viewfinder, and a microphone.", + "A television camera is a large, bulky piece of equipment with a long lens sticking out of the front.", + "A television camera is a small, hand-held camera that is used to capture images on videotape.", + "A television camera is a video camera that is used to capture images or footage for broadcasting purposes.", + "A television camera is a large, heavy piece of equipment that is mounted on a tripod.", + "A television camera usually has a large lens and a viewfinder.", + "A television camera is a box-shaped device with a large lens on the front.", + "A television camera is a box-shaped piece of equipment with a lens on the front.", + "A television camera is a device that captures images and turns them into electrical signals." + ], + "television set": [ + "A television set is a box that has a screen in the front.", + "A television is a rectangular box with a screen in the front.", + "Television sets come in a wide variety of shapes and sizes, but they all have a few things in common.", + "Most television sets have a flat, rectangular screen.", + "A personal television set typically includes a flat screen, a stand or mount, and remote control.", + "A television set typically has a screen that is anywhere from 12 to 40 inches wide, and is placed on a stand or inside a entertainment center.", + "The most common type of television set looks like a big, rectangular box.", + "A television set usually consists of a screen that is surrounded by a casing.", + "A television is typically a thin, flat, rectangular piece of electronic equipment with a screen in the front.", + "A television set typically has a screen that is 16 inches by 24 inches." + ], + "tennis ball": [ + "A tennis ball has a black-and-white checkered pattern and is typically made of rubber.", + "A tennis ball is a small, spherical ball used in the sport of tennis.", + "A tennis ball is white or yellow with black or green stripes.", + "A tennis ball is a small, round, yellow ball with a fuzzy surface.", + "A tennis ball is around 2.", + "Tennis balls are small, round, explosives.", + "A tennis ball is a small, round, yellow ball.", + "A tennis ball is a round, white, bouncing ball.", + "A tennis ball is a small, round, firm ball that is covered in a felt material.", + "A tennis ball is a small, round, white ball with a black or red logo on it." + ], + "tennis racket": [ + "A tennis racket is aracquetorlanceused to hit atennis ballduringtennisplay.", + "A tennis racket typically has a curved metal frame and an intersecting metal net.", + "A tennis racket typically has a teardrop-shaped head, and it is strung with either natural gut strings or synthetic strings.", + "A tennis racket typically has a small, oval-shaped head with a tight string pattern.", + "A tennis racket is a long, thin, stick-like object with a large, round frame at one end and a small handle at the other.", + "A tennis racket is a fairly simple piece of equipment.", + "A tennis racket is a raquet-like object used to hit a tennis ball.", + "A tennis racket consists of a handle, a head, and a strings bed.", + "A tennis racket is a piece of sports equipment used by tennis players to hit a tennis ball during a tennis match.", + "A tennis racket is a handheld frame that is used to strike a tennis ball during the game." + ], + "tequila": [ + "Tequila is a clear liquid.", + "A tequila looks like a transparent or amber-colored liquor.", + "A tequila is a clear, colorless, or straw-colored spirit distilled from the fermented juice of the agave plant.", + "Tequila is a clear, colorless spirit.", + "A tequila is a distilled alcoholic beverage made from the blue agave plant in Mexico.", + "Tequila is a clear, colorless spirit.", + "A tequila is a type of alcoholic drink that is made from the agave plant.", + "Tequila is a clear, pure spirit.", + "Tequila is a type of Mexican liquor that is typically distilled from the blue agave plant.", + "A tequila is a light brown liquid." + ], + "thermometer": [ + "It looks like a glass tube with ascale on it, with a bulb at one end.", + "A mercury or alcohol thermometer has a thin glass tube, with a bulb at one end containing the mercury or alcohol, and a calibrated scale marked on the tube.", + "A thermometer is a long, skinny tube with numbers on it.", + "A thermometer is a long, thin tube with a bulb at one end.", + "A thermometer is a long, thin, glass tube with a mercury or alcohol level inside.", + "A thermometer looks like a long, thin tube with a bulb at the end.", + "A thermometer is a long, thin glass tube with a silver\u00adcolored metal end and a red liquid inside.", + "A thermometer is a device that measures temperature.", + "A thermometer is a device that measures temperature.", + "A thermometer is a long, thin glass tube with numbers on it." + ], + "thermos bottle": [ + "A thermos bottle is a container with a double wall of glass or metal and a vacuum between the walls.", + "A thermos bottle is a metal bottle with a screw top.", + "A thermos bottle is a container with a double wall that is vacuum sealed.", + "A thermos bottle is a vacuum bottle that is used to keep hot drinks hot and cold drinks cold.", + "A thermos bottle is a bottle that is insulated to keep hot things hot and cold things cold.", + "A thermos bottle is a cylindrical container with a screw-on top.", + "A thermos bottle is a glass or metal bottle with a screw-on lid.", + "A thermos is a typically cylindrical bottle with a silver, vacuum-insulated exterior and a plastic or metal interior.", + "A thermos bottle is a cylindrical container with a screw-on top.", + "A thermos bottle is typically a cylindrical bottle with a long neck." + ], + "thermostat": [ + "A typical North American thermostat is a white plastic box with a removable clear plastic cover.", + "A thermostat is a small device that is used to regulate the temperature of a room or space.", + "A thermostat looks like a small box with a digital display.", + "A thermostat is a small device that is used to control the temperature in a room or building.", + "A thermostat is a device that controls the temperature of a space by turning heating and cooling devices on or off.", + "A thermostat is a small, box-like device that is attached to a wall.", + "A thermostat looks like a small black or white box that is mounted on a wall.", + "A thermostat is a device that regulates the temperature of a system.", + "A thermostat is a small, rectangular shaped box that is usually placed on a wall in a home.", + "A thermostat looks like a small panel with a knob or digital display attached to a wall." + ], + "thimble": [ + "A thimble is a small metal or plastic cup that is worn on the finger to protect it when sewing.", + "A thimble is a small, metal cap that is placed over the finger to protect it while sewing.", + "A thimble is a small, metal object that is put on the finger to help push a needle through fabric when sewing.", + "A thimble is a small pointed metal cap that fits over the end of your finger.", + "A thimble is a small metal cup that fits over the end of your finger.", + "A thimble is a small metal cap that fits over the end of your finger.", + "A thimble is small metal or plastic cup that fits over a finger and is used to protect the finger while sewing.", + "A thimble is a small metal cup that fits over the finger.", + "A thimble is a small, cone-shaped piece of metal or plastic that fits over the end of your finger.", + "A thimble is a small, pointed metal or plastic cup that is worn on the finger to protect it while sewing." + ], + "thread": [ + "A thread is a line of code that can be executed independently from the rest of the code.", + "Each thread has its own stack, which contains the data the thread is currently working with.", + "A thread is basically a lined-up series of instructions that can be executed independently from the rest of the program.", + "A thread can be thought of as a separate path of execution through a program.", + "A single thread looks like a long, skinny strand of cotton.", + "A thread is a sequence of instructions that can be executed independently of other code.", + "A thread looks like a thin line.", + "A thread looks like a thin, long strip of material.", + "Threads are small units of code that can be run independently from the rest of the program.", + "In programming, a thread is the smallest sequence of programmed instructions that can be managed independently by a scheduler, which is typically a part of the operating system." + ], + "thumbtack": [ + "A thumbtack is a small, pointed object with a flat head, used for fastening paper to a wall or bulletin board.", + "A thumbtack is a small, sharp object made of metal or plastic.", + "A thumbtack is a small, pointy object that is used to attach things to a bulletin board or wall.", + "A thumbtack is a small tack, usually made of steel or brass, with a short, thin shank and a flat, wide head.", + "A thumbtack looks like a small metal or plastic rod with a sharp point at one end and a flat head at the other.", + "A thumbtack is a small, sharp object with a flat head and a sharp point.", + "A thumbtack is generally a small, sharp object made of metal or plastic that is used to fasten something to a wall or board.", + "A thumbtack is a small, sharp object that is used to make holes in paper or fabric.", + "A thumbtack is a small, sharp nail with a flat head, used for fastening pieces of paper or fabric to a wall or board.", + "A thumbtack is a small, sharp object that is used to fasten things to walls or other surfaces." + ], + "tiara": [ + "A tiara is a type of crown that is often worn by royalty or other members of the nobility.", + "A tiara typically consists of a band of metal or jewels that is worn across the forehead.", + "A tiara is a headpiece that is typically made of metal or jewels and worn by royalty or other nobility.", + "A tiara is a small, crown-like piece of jewelry that is worn on the head.", + "A tiara typically consists of a band of decorative metal, often in the form of a circlet, with three or more decorative elements (such as diamonds or other precious stones) rising from it.", + "A tiara looks like a crown that is worn on the head.", + "A tiara is a small, circlet-style crown worn by women as a symbol of royalty.", + "A tiara is a crown that is worn on the head, usually by women.", + "A tiara is a band of precious metal or other material, often decorated with jewels, worn as a crown by women.", + "A tiara typically consists of a circlet of metal or other material rising to a peak or points, and often encrusted with jewels, worn as a sign of royalty." + ], + "tiger": [ + "A tiger looks like a large, orange and black striped cat.", + "A tiger is a large, orange and black striped mammal with big teeth and claws.", + "A tiger has orange and black fur, and stripes all over its body.", + "A tiger is a large carnivorous mammal with orange fur and black stripes.", + "A tiger is a striped animal.", + "Tigers are one of the most easily recognized animals in the world.", + "A tiger is a large, orange and black striped cat.", + "A tiger has a reddish-orange coat with black stripes.", + "A tiger has a large head with a furry face and long whiskers.", + "A tiger is a large, orange and black striped cat." + ], + "tights (clothing)": [ + "A tight is a piece of clothing that covers the body from the waist to the toes.", + "A pair of tights is a type of clothing that is typically worn by women and girls.", + "Tights are a form of close-fitting legwearwholly or partly covering the feet and legs.", + "Tights cover the legs and usually extend to the waist.", + "A tights is a close-fitting garment that covers the legs and feet.", + "Most tights are made from nylon, spandex, cotton, or wool.", + "Tights usually cover the entire leg, from the foot to the waist, and are typically made from a sheer fabric such as nylon.", + "A tights is a close-fitting garment that covers the legs and feet.", + "A tight is a piece of clothing that covers the body from the waist to the ankles, and is usually made of a stretchy material like Lycra.", + "A tights is a type of clothing that covers the whole leg, from the waist to the toe." + ], + "timer": [ + "A timer is a portable device that is used to time events or interval training.", + "A kitchen timer is typically a small, mechanical device that sits on a countertop and can be set to ring at a specific time.", + "A timer can be a physical object that you can set and wind, or it can be a digital device that you can set for a specific time.", + "A timer is usually a small, handheld device with buttons and a digital display.", + "A standard kitchen timer, for example, is a small, round device with a wind-up mechanism.", + "This is a visual representation of what a timer looks like: http://www.", + " and how it worksA timer is a small device that is used to time events.", + "Most timers have a digital display that shows the time remaining until the timer goes off.", + "A timer is usually a small, digital device with an LED display that can be set to count down from a certain amount of time.", + "A timer is a small device that has a face with numbers on it and two buttons." + ], + "tinfoil": [ + "Tin foil is a thin sheet of aluminum that is used to line cooking pans and wrap food.", + "A tinfoil is a thin sheet of aluminum that is often used to wrap food.", + "A tinfoil looks like a rectangular piece of shiny aluminum foil.", + "A tinfoil looks like a sheet of aluminum foil.", + "A tinfoil looks like a sheet of aluminum foil that is often used to wrap food.", + "A tinfoil looks like a thin sheet of metal.", + "A tinfoil is typically a thin sheet of aluminum foil that is used to wrap food.", + "Tinfoil is a thin sheet of aluminum that is used to wrap food or cover baking dishes.", + "A tinfoil looks like a thin sheet of aluminum that is typically used to wrap food.", + "A tinfoil is typically a thin sheet of aluminum foil that is used to line cooking pans and food containers." + ], + "tinsel": [ + "A tinsel is usually a thin strip of shiny metal foil.", + "A tinsel is a type of decoration that is typically made from strands of metal or plastic that are wrapped around a central wire.", + "A tinsel is a type of Garland that is usually made out of thin strips of shiny metal, paper, or plastic.", + "A tinsel is a type of decoration that is typically made from a type of metal or foil.", + "A tinsel is a type of decoration that is typically made from a thin strip of shiny metal or foil.", + "A tinsel is a decoration that is made of thin strips of shiny material.", + "A tinsel is a type of decorations that is made from a thin strip of shiny material.", + "A tinsel is a piece of decorations that is made up of thin strips of shiny material.", + "A tinsel is a thin strip of shiny metal or plastic.", + "A tinsel is a decoration that is made of thin strips of shiny material, typically metal or plastic." + ], + "tissue paper": [ + "A tissue paper is a paper that is made from a material that is very soft and delicate.", + "Tissue paper is a thin, flat paper made from wood pulp.", + "Tissue paper is a thin, light paper.", + "Tissue paper is a thin, light paper that is usually used for wrapping gifts.", + "Tissue paper is a thin, papery material that is usually white or colored.", + "A tissue paper has a smooth surface and is usually white or off-white in color.", + "A tissue paper is a thin paper that is usually used for wrapping fragile items or for cleaning.", + "Tissue paper is a thin paper made from cellulose fibres.", + "A tissue paper looks like a soft, thin paper.", + "Tissue paper is a thin paper that is usually used for wrapping gifts." + ], + "toast (food)": [ + "A toast is a slice of bread that has been toasted and is usually served with butter.", + "A toast (food) is a small piece of bread that is usually crispy.", + "A toast is a piece of bread that has been toasted.", + "A toast is a thin slice of bread that is browned by being placed under a grill or by being toasted in a toaster.", + "A toast is a bread that has been cooked in an oven or on a stove until it is hard and crispy.", + "A toast looks like a piece of bread that has been toasted and is usually served with butter.", + "A toast is a thin slice of bread that is pre-sliced and then toasted.", + "A toast (food) looks like a slice of bread that has been toasted.", + "A toast (food) is a thin slice of bread that is crispy and golden brown on the outside, and soft and fluffy on the inside.", + "A toast is a small piece of bread that has been toasted in a toaster or oven." + ], + "toaster": [ + "A toaster is a small appliance that toasts bread or other food.", + "A toaster is a small appliance that has two metal trays with electric coils in them.", + "A toaster is a small appliance that has two or four slots in which bread can be inserted.", + "Most toasters are rectangular and have four slots for bread.", + "Most toasters have a rectangular shape with four slots in the top for slices of bread.", + "A toaster looks like a small appliance with two or four slots in the top to insert bread.", + "A toaster is a small appliance that toasts bread, bagels, muffins, and other types of breakfast pastries.", + " ost toasters have a long, rectangular shape with a slots on top where bread is inserted.", + "A toaster usually has four metal slots that bread can be inserted into.", + "Most toasters are small, cube-shaped machines with a slot on top for bread." + ], + "toaster oven": [ + "A toaster oven is small electric oven with a door, wire rack, and removable tray.", + "A toaster oven is a small oven that sits on the countertop.", + "A toaster oven is a small appliances that looks like a miniature version of a conventional oven.", + "A material object that uses electricity to heat food.", + "A toaster oven is a small oven that sits on the countertop.", + "A toaster oven is a small electric oven that has a door, a wire rack, and a removable tray.", + "A toaster oven looks like a mini oven with a toaster on top.", + "A toaster oven typically looks like a small oven with a door in the front, wire racks inside, and a toaster on the top.", + "A toaster oven is a small oven that sits on the countertop and has a door that opens in the front.", + "A toaster oven typically has a rectangular shape with a glass door on the front." + ], + "toilet": [ + "A toilet is a bowl-shaped fixture that is used for urinating and defecating.", + "A toilet has a seat, a bowl, and a tank.", + "A toilet is typically a porcelain bowl that is connected to a water tank by a short pipe.", + "A toilet is an object that is used for Waste disposal.", + "A toilet typically has a bowl, a seat, and a lid.", + "\nA toilet is typically a white bowl-shaped fixture that is connected to a water supply and a drain.", + "A toilet is a porcelain bowl that is connected to a sewage system.", + "A toilet is a hygienic device that allows humans to relieve themselves of solid and liquid waste.", + "A toilet typically has a bowl that is filled with water.", + "A toilet has a bowl that is typically about 15 inches wide and 18 inches deep." + ], + "toilet tissue": [ + "A toilet tissue is a small, rectangular piece of paper that is used to wipe oneself after using the restroom.", + "A toilet tissue is a hygienic product that is used in the bathroom for cleaning the anus and genitals after using the toilet.", + "A toilet tissue is cylindrical in shape and is typically made of paper.", + "A toilet tissue has a long, cylindrical shape and is usually made of white paper.", + "A toilet tissue is a thin paper that is used to clean the anus and genitals after defecation or urination.", + "A toilet tissue is a thin, rectangular piece of paper that is used to clean oneself after using the toilet.", + "A toilet tissue is a small paper that is used to clean your butt after you poop.", + "A toilet tissue is a thin paper that is used to wipe the anus and vulva after defecation or urination.", + "A toilet tissue is a paper product that is used to clean the anus and surrounding area after a bowel movement.", + "A toilet tissue is a small, rectangular piece of paper that is typically white in color." + ], + "tomato": [ + "A tomato is a small, red fruit with a smooth, glossy skin.", + "A tomato typically has a deep red color, is slightly oblong in shape, and has a smooth surface.", + "A tomato is a red fruit that is used in many different types of cuisine.", + "A tomato is a small red fruit with smooth, shiny skin.", + "A tomato is a juicy, red fruit that grows on a vine.", + "A tomato is a red fruit that is rounded and has seeds on the inside.", + "A tomato looks like a small, red, round fruit.", + "A tomato is a round, red fruit with seeds in the center.", + "A ripe tomato is typically red, although some may be yellow, orange, or green.", + "A tomato is typically red or orange, although some varieties are yellow, green, or purple." + ], + "tongs": [ + "A pair of tongs is a kitchen utensil used for picking up food.", + "A tong is an eating utensil that is used to pick up food.", + "A pair of tongs is a tool used to pick up and hold food items like meat or vegetables.", + "A typical pair of tongs is composed of two metal arms with serrated grippers at one end and a joint in the middle that allows the arms to pivot relative to each other.", + "A tongs is a kitchen utensil that is used to pick up food.", + "A tongs is a a kitchen utensil used for picking up food.", + "A tongs is a kitchen tool used for picking up food.", + "A tong has two metal \"prongs\" that open and close like a scissors.", + "A tongs is a tool that is used to pick up and move food that is hot.", + "A tongs is an instrument consisting of two arms with handles at one end and a pincer or scissor-like jaws at the other, used for picking up and transferring food or other objects." + ], + "toolbox": [ + "A toolbox is a box with a lid.", + "A toolbox is a box with a handle that is used to store tools.", + "A toolbox is often a rectangular box, made of metal, plastic, or wood, with a flat base and a lid that opens to reveal a compartment for storing tools.", + "A toolbox typically contains various hand tools used for performing various tasks.", + "A toolbox is usually a small, rectangular box made out of metal, plastic, or wood.", + "A toolbox looks like a box with a lot of compartments inside of it.", + "A tool box is a rectangular box, typically made of metal, plastic, or wood, with a handle on one end and a hinged lid on the top.", + "A toolbox is a box that is used to store tools.", + "A toolbox is a rectangular box with a carrying handle.", + "A toolbox is a metal, plastic, or wooden box that has compartments for different types of tools." + ], + "toothbrush": [ + "Most toothbrushes have a handle that is easy to grip, and bristles that are soft enough not to damage your teeth or gums.", + "A toothbrush is a small, handheld stick with a head of soft bristles.", + "A toothbrush typically has a handle and a head.", + "A toothbrush is a long, slender handle with bristles at one end.", + "A toothbrush has a handle and a bristled head.", + "A toothbrush is a small, hand-held brush that has bristles on one end.", + "A toothbrush is a small, hand-held brush with bristles on one end.", + "A toothbrush is a small hand-held brush with a long handle.", + "Most toothbrushes have a plastic handle with a bristled head.", + "A toothbrush typically has a handle with a head of bristles attached." + ], + "toothpaste": [ + "A toothpaste is a smooth, thick paste that is typically white or mint-colored.", + "Most toothpastes are a gel and are white, although there are some that are a paste and translucent.", + "A toothpaste is a thick, white cream that is dispensed from a tube.", + "A toothpaste is a smooth, thick paste that is usually white, though it can come in other colors as well.", + "A toothpaste is a gel-like substance that is white or off-white in color.", + "Toothpaste typically comes in a small, cylindrical container and is either white or mint-colored.", + "Most toothpastes are white, mint-flavored gels that are dispensed from a squeeze tube.", + "One typical example of a toothpaste is a white viscous paste that is dispensed from a toothpaste tube.", + "A toothpaste is a thick, gooey substance that is white or light blue in color.", + "Toothpaste comes in a small, white tube." + ], + "toothpick": [ + "A toothpick is a long, thin piece of wood with a pointed end.", + "A toothpick typically has a sharp point and is made out of wood.", + "A toothpick is a thin rod of wood, plastic, or metal used to remove food from between teeth.", + "A toothpick is a thin stick of wood, plastic, or bone.", + "A toothpick is a small, thin piece of wood that is used to clean teeth.", + "A toothpick is a small thin piece of wood, typically less than 10 cm in length and 3 mm in width.", + "A toothpick is a small, thin piece of wood with a pointed end.", + "A toothpick is a small wooden or plastic stick with a pointed end.", + "A toothpick is a small, thin piece of wood with a pointed end that is used to remove food from teeth.", + "A toothpick is a wooden or plastic stick that is used to remove food from teeth." + ], + "cover": [ + "The cover of a book is typically the front and back paper panels, plus the spine, which come together to form the protective outer shell of the book.", + "A cover is typically a paper or clothstock jacket placed over the binding of a hardcover book to protect the book's exterior.", + "A cover looks like the front and back of a book.", + "A cover is the face of a book that is used to protect the pages from dirt and damage.", + "A cover is a sheet of paper or other material that is placed over something to protect it or to decorate it.", + "A cover is like a picture on the front of a book.", + "A cover is the front of a book.", + "A cover is a piece of paper that is placed on top of something else to protect it.", + "A cover is a layer of material that is placed over something else in order to protect it.", + "A cover is typically a paper or hard cover that protects the pages of a book." + ], + "tortilla": [ + "A tortilla is a thin, flat unleavened bread that is made from cornmeal or wheat flour.", + "A tortilla is a thin, flat bread made from finely ground cornmeal or wheat flour.", + "A tortilla is a type of flatbread made from wheat or corn flour.", + "A tortilla is a thin, flatbread made from unleavened dough.", + "A tortilla is a flat, round piece of dough that is made from cornmeal or wheat flour and is used to make things like tacos and burritos.", + "A tortilla is a thin, flat disc of unleavened bread, handmade from nixtamalized cornmeal or wheat flour.", + "A tortilla is a thin, flat disk of unleavened dough, typically made from cornmeal or wheat flour, that is cooked by being either baked or fried.", + "A tortilla is a flat, round piece of unleavened bread that is used as a wrapper or base in Mexican cuisine.", + "A tortilla is a thin, flat disk of unleavened cornmeal or wheat flour dough, typically made from masa harina, that is cooked on a griddle, typically without fat.", + "A tortilla is a flat, round bread made out of corn or wheat." + ], + "tow truck": [ + "Tow trucks are typically large, heavy-duty vehicles that are used to transport vehicles that are unable to be driven.", + "Large truck with a flatbed on the back where they can load and strap down disabled vehicles to tow them away.", + "A tow truck is a large vehicle that has a flatbed on the back.", + "Most tow trucks are large and heavy duty.", + "A tow truck typically consists of a demanding schedule, long hours, and lots of patience.", + "Tow trucks are large, specialized vehicles that are used to tow other vehicles that are unable to be driven.", + "Tow trucks are large, heavy vehicles that are typically used to tow other vehicles that are unable to be driven.", + "A tow truck is a large vehicle that has a platform on the back for hauling vehicles.", + "A tow truck is a large vehicle with a long flatbed in the back.", + "A tow truck typically has a long flatbed attached to the back, which is used to transport the disabled vehicle." + ], + "towel": [ + "A towel is a rectangular piece of absorbent fabric, usually cotton, terrycloth, or microfiber, used for drying oneself after bathing or swimming.", + "A towel is typically a piece of absorbent fabric that can be used to dry oneself off after washing.", + "A towel is a piece of absorbent fabric or paper used for drying oneself, drying objects, or for cooking.", + "A towel is a piece of cloth used for drying or wiping.", + "A towel is typically a piece of absorbent fabric, such as cotton, terrycloth, or microfiber, that is used for drying oneself after a bath or shower.", + "A towel is a piece of cloth used for drying oneself, or for wiping up liquid.", + "A towel is a piece of absorbent fabric or paper used for drying or wiping a body or a surface.", + "A towel is a rectangle of absorbent fabric, typically white, used for drying oneself.", + "A towel is a piece of absorbent fabric or paper used for drying oneself, drying dishes, or other uses.", + "A towel often looks like a piece of cloth that is used for drying oneself after washing." + ], + "towel rack": [ + "A towel rack typically consists of a bar or rods on which to hang towels.", + "A towel rack generally has two or more bars that parallel each other, upon which towels can be hung.", + "A typical towel rack includes several horizontal bars that may be fixed to a wall or mounted on a door, and sometimes includes a lower shelf.", + "A towel rack is a horizontal or vertical piece of metal, wood, or plastic that has multiple arms sticking out from it.", + "A towel rack is a horizontal or vertical piece of metal, wood, or plastic that has several bars or hooks on which towels can be hung.", + "A towel rack typically consists of a horizontal bar from which towels can be hung, either folded or rolled.", + "A towel rack typically has multiple bars or hooks that are spaced apart to allow towels to be hung individually without touching.", + "A towel rack is a tall, vertical stand with multiple levels or bars on which to hang towels.", + "A towel rack typically has either two or three bars on which folded towels can be hung.", + "A towel rack generally has two parts: a horizontal bar to hang the towel on, and a vertical bar (or bars) to support the horizontal bar." + ], + "toy": [ + "A toy can look like many different things.", + "A toy looks like an object that is used for play.", + "A toy may look like a number of different things, depending on the type of toy.", + "A toy is a small object that is used for play.", + "The toy might be a small car or a stuffed animal.", + "A toy is usually a small, colorful object that is designed to be played with.", + "A toy is a small, usually hand-held object, that is intended to entertain children.", + "A toy can look like many things.", + "A toy is a small, often colorful object that is meant to be played with.", + "A toy is typically a small, handheld object that is designed for children to play with." + ], + "tractor (farm equipment)": [ + "A tractor is large farm equipment that typically has four wheels and is used for plowing, tilling, and harvesting crops.", + "A tractor is a large, heavy vehicle with either two or four wheels that is used for pulling farm equipment.", + "A tractor is a piece of farm equipment that is used to pull other pieces of farm equipment, such as plows and harvesters.", + "A tractor is a large, heavy machine used for pulling things, such as ploughs or trailers.", + "A tractor is a piece of farm equipment that looks like a large vehicle with a very powerful engine.", + "A tractor has a large,rounded front end that houses the engine and a cab for the operator.", + "A tractor is a large piece of farm equipment with a large engine in the front.", + "A tractor is a large, powerful Farm machinery vehicle designed to tow equipment behind it.", + "A tractor is a piece of farm equipment that typically consists of a large, engine powered machine with large rear wheels designed for pulling heavy loads.", + "A tractor typically has a large, flat bed on the back for hauling things, and a large engine in the front." + ], + "traffic light": [ + "A traffic light typically consists of a light for each of the cardinal directions, red, yellow, and green.", + "A traffic light typically has three lights: red, yellow, and green.", + "A traffic light is a poles with three different light on the top.", + "A traffic light is a set of three coloured lights that is used to control the flow of traffic on a road.", + "A traffic light can be either rectangular or octagonal, and is mounted atop a pole.", + "A traffic light typically has three different colored lights that face the driver.", + "A traffic light is a vertical set of three lights of different colors, typically red, yellow, and green, in a fixed sequence, that is used to control traffic at road junctions or crossings.", + "A traffic light typically contains three circular lights that are horizontally aligned.", + "A traffic light is a set of red, yellow, and green lamps that are used to control the flow of traffic at an intersection.", + "A traffic light is a red, yellow, and green light that helps regulate the flow of traffic." + ], + "dirt bike": [ + "A dirt bike typically has a small frame and large tires, which allow it to navigate bumpy or muddy terrain.", + "A dirt bike is a motorcycle designed for use on rough, unpaved terrain.", + "A dirt bike is a motorcycle designed for off-road riding.", + "A dirt bike is a motorcycle designed for off-road riding on unpaved surfaces.", + "A dirt bike is a small, lightweight motorcycle that is designed to be ridden on rough terrain.", + "A dirt bike looks like a motorcycle that has been designed specifically for off-road riding.", + "A dirt bike is a small, lightweight motorcycle designed for off-road riding.", + "A dirt bike typically has a small frame and tall wheels.", + "A dirt bike is a motorcycle that is designed for off-road riding.", + "A dirt bike usually has knobby tires, long suspension travel, and a powerful engine." + ], + "trailer truck": [ + "A tractor-trailer truck, also known as a semi-trailer truck, trailer truck, or semi-tractor trailer, is the combination of a tractor unit and one or more semi-trailers to carry freight.", + "A trailer truck consists of a truck chassis with a flatbed trailer attached.", + "A trailer truck has a large, rectangular platform with wheels at the back, used for carrying goods by road.", + "A trailer truck typically has four large wheels and a long, rectangular body.", + "A trailer truck is a large truck with a long, flatbed trailer attached.", + "A truck with a large metal frame that is used to haul trailers.", + "A trailer truck has a large cab where the driver sits, and a long, open bed behind it where the freight is carried.", + "A large truck with a flatbed trailer used for hauling loads.", + "A trailer truck looks like a large truck with a flatbed trailer attached to the back.", + "A trailer truck is a large truck that pulls a long trailer." + ], + "train (railroad vehicle)": [ + "A train is a large, often multi-carried vehicle used for transporting goods or passengers along a rail track.", + "A train is a long vehicle that consists of a series of connected cars that are pulled by a locomotive.", + "A train is a railroad vehicle that has a long body and is pulled by a locomotive.", + "A train is a large vehicle that is powered by a locomotive.", + "A train is a long, heavy vehicle that consists of a locomotive, which pulls one or more passenger cars or freight cars.", + "A train is a large vehicle that consists of a series of connected cars.", + "A locomotive engine, typically with several cars attached, that is used for hauling freight or passengers on a rail line.", + "A train has a long, rectangular body.", + "A train is a vehicle that sits on top of railroad tracks.", + "A train is a long, heavy vehicle that consists of a locomotive, which pulls one or more coaches, or cars." + ], + "trampoline": [ + "A trampoline has a rectangular or circular frame made of steel or aluminum.", + "\nA trampoline has a fabric surface stretched over a frame using coiled springs.", + "A trampoline is a large, round piece of equipment with a metal frame and a mat made of jumping surface.", + "A trampoline is a rectangular or oval object with a mat stretched over a steel frame.", + "A trampoline is a large, flat, mat-like piece of equipment that is suspended by springs in the middle.", + "A trampoline is a piece of equipment consisting of a sturdy frame, flat bed and springs, which is used for recreational purposes or competitive sports.", + "A trampoline typically has a strong, flexible canvas or fabric stretched over a metal frame using coiled springs.", + "A trampoline is a flat, round, piece of equipment made of metal or strong fabric stretched over a frame.", + "A trampoline is a large, rectangle-shaped piece of equipment with a mat stretched across it.", + "A trampoline is a piece of equipment consisting of a strong fabric sheet stretched over a metal frame using many coiled springs." + ], + "tray": [ + "A tray looks like a flat, rectangular surface with four sides and no lid.", + "A tray is a flat surface with four sides and an open top.", + "A tray is a flat, rectangular surface with low sides that is used for carrying food or other items.", + "A tray is a flat, rectangular container with a lip around the edge.", + "A tray is a flat, usually rectangular, object with four sides and an open top.", + "A tray is a flat-bottomed platform with raised sides, used for carrying food and drink.", + "A tray has four sides and a flat surface.", + "A tray is a shallow, flat container with a raised edge, used for carrying food and drinks.", + "A tray is a rectangular or oval-shaped platform with a low lip that is used to carry food or other items.", + "A tray is a flat, shallow container with a lip around the edge, used for carrying food and drink." + ], + "trench coat": [ + "A trench coat is a coat made of heavy cloth, sometimes waterproof, that hangs to about knee length.", + "A trench coat looks like a long, military-style coat.", + "A trench coat typically looks like a long, belted raincoat.", + "A trench coat is a long, water-resistant coat that is typically worn over top of a suit.", + "A trench coat typically has a removable liner, a double-breasted front, and belted cuffs.", + "A trench coat generally refers to a type of coat that is longer than waist length.", + "A trench coat is a coat that is usually a little bit longer than waist length, has a tie or a belt around the waist, and has a collar.", + "A trench coat is a coat made of waterproof material, typically hip-length or longer, with a belt and a collar.", + "A trench coat is a long, light coat with a belt.", + "A trench coat is a raincoat made of heavy-duty fabric, typically poplin, gabardine, or drill." + ], + "triangle (musical instrument)": [ + ".", + "A triangle is a small, metal instrument that is played by striking it with a small metal rod.", + "A triangle is a small, triangular-shaped percussion instrument.", + "A musical instrument in the shape of a triangle.", + ".", + "A triangle is a small, triangular-shaped metal percussion instrument.", + "A triangle is a Percussion Instrument that is made of a thin piece of metal that is bent into a triangular shape.", + "A triangle is a musical instrument that looks like a metal rod with a pointy end.", + "A triangle is a musical instrument that consists of a metal rod that is bent into a triangular shape.", + "A triangle is a small, three-sided percussion instrument." + ], + "tricycle": [ + "A tricycle typically has three wheels and is pedal-powered.", + "A tricycle looks like a bicycle with two extra wheels.", + "A tricycle is a three-wheeled vehicle with pedals.", + "A tricycle is a three-wheeled vehicle often used for recreation or exercise.", + "A tricycle has three wheels, two in the back and one in the front.", + "A tricycle typically has three wheels, two in the back and one in the front, and is pedals powered by the rider.", + "A tricycle is a three-wheeled vehicle.", + "A tricycle has three wheels, with the two back wheels being larger than the front wheel.", + "A tricycle has three wheels and is pedaled with the feet.", + "A tricycle typically has three wheels, two in the back and one in the front." + ], + "tripod": [ + "A tripod is a device with three legs that is used to support a camera or other object.", + "A tripod is a three-legged stand used to support a camera, binoculars, or other optical instrument.", + "A tripod looks like a three-legged stand that is used to support a camera or other device.", + "A tripod looks like a three-legged stand that is used to support a camera or other device.", + "A tripod is a three-legged stand used to support a camera or other optical instrument.", + "A tripod is usually a three-legged stand that is used to support a camera, or sometimes a telescope or other device, in order to keep it steady.", + "A tripod is a three-legged support structure for a camera or other object.", + "Most tripods have three legs and a central column that allows the camera to be raised or lowered.", + "A tripod is a three-legged support device typically used to hold a camera in place.", + "A tripod is a three-legged support system typically used to stabilize a camera." + ], + "trousers": [ + "Trousers are a type of clothing that cover the lower half of the body and extend down to the feet.", + "A trousers typically has a waistband, a fly, and legs.", + "Trousers are a type of clothing that covers the lower half of the body and are held up by a waistband.", + "A pair of trousers is a piece of clothing that is worn on the lower half of the body, covering the hips and legs.", + "Most trousers are made of fabric and have a waistband that goes around the waist.", + "A pair of trousers is a piece of clothing that is worn on the lower half of the body.", + "A trouser is a type of clothing that is worn over the lower half of the body and covers the legs.", + "A trousers is a piece of clothing that covers the lower part of the body and extends from the waist to the ankles, or from the waist to the knees, depending on the style of the trousers.", + "A trousers looks like a piece of clothing that covers the lower half of your body and has two holes for your legs.", + "A pair of trousers has two legs that extend from the waist to the ankles, and are usually held up with a belt or suspenders." + ], + "truck": [ + "A truck is a large vehicle typically used for carrying goods or transporting materials from one location to another.", + "A truck is a large vehicle with four wheels that is used to transport large items or groups of people.", + "A truck typically has four wheels and is larger than a car.", + "A truck is a large vehicle with four wheels that is used to transport goods.", + "A truck is a large, heavy vehicle used for carrying goods.", + "A truck is a vehicle with four wheels that is used to carry heavy objects.", + "A truck is a large vehicle with four wheels that is used to transport goods.", + "A truck is a vehicle with four wheels and a long body.", + "A truck is a large, heavy vehicle with four wheels that is used for transporting goods.", + "A truck is a large, heavy vehicle designed for carrying goods or passengers." + ], + "truffle (chocolate)": [ + "A truffle is typically a small, round, chocolate confection with a smooth, soft center.", + "A truffle is a smooth, round chocolate confection with a soft, creamy center.", + "A truffle (chocolate) is a golf ball-sized, round chocolate confection with a smooth exterior and a soft, rich interior.", + "A truffle is a round, chocolate confection with a smooth, velvety exterior and a soft, creamy center.", + "A truffle is a small, spherical or oblong confection made from chocolate ganache, butter, cream, or alcohol.", + "A truffle is a round, smooth chocolate confection with a soft, creamy center.", + "A truffle is a chocolate dessert that is made of chocolate and cream, and often has a gooey center.", + "A truffle is a small, round, often Chocolate confection.", + "A truffle (chocolate) is a small, round, and often chocolate-coated confection made from a chocolate ganache filling.", + "A truffle is a small, round chocolate candy with a smooth, soft filling." + ], + "trunk": [ + "A trunk is a large, sturdy container that is used to store and transport belongings.", + "A trunk is a thick piece of wood that is used to support trees.", + "A trunk is a large, sturdy container typically used for storing things.", + "Trunks are tree trunks.", + "A trunk is a large, solid piece of luggage with a flat bottom and a rounded top.", + "A trunk is a large, typically cylindrical container with a lid, for storing clothes, food, or other items.", + "A trunk is a tree's main stem from which all its branches grow.", + "A trunk is a tree's central main stem, from which its branches grow.", + "A Russian folk trunk has a tall, rectangular shape and is made of wood, with metal hardware.", + "A trunk is a large container made of wood or metal, used for storing things." + ], + "vat": [ + "A vat is a large, round container used to hold liquids.", + "A vat is a large metal container, often round or cylindrical, used for storage or fermentation.", + "A vat is a large container, often round, made of metal, concrete, or wood, used for holding liquids, such as oil, wine, or milk.", + "A vat typically is a large cylindrical container used to hold liquids, such as wine, beer, or cider, during fermentation.", + "A vat is a large, cylindrical container used for holding liquids.", + "A vat is typically a large, cylindrical container made of metal, concrete, or plastic.", + "A vat is a large, often cylindrical, container for storing liquids or dry goods.", + "A vat is a large, round container with a lid that is used to hold liquids.", + "A vat is a large, round container used to hold liquids.", + "A vat is a large, deep container used for brewing beer or making wine." + ], + "turban": [ + "A turban is a type of headwear that is wrapped around the head.", + "A turban is a piece of cloth that is wrapped around the head.", + "A turban generally refers to a headdress that is wrapped around the head and is often worn for religious reasons.", + "A turban is a head covering that is wrapped around the head.", + "A turban is a head covering that is typically wrapped around the head in a cloth.", + "A turban is a head covering that is wrapped around the head.", + "A turban is a piece of cloth that is wrapped around the head.", + "A turban traditionally is a type of headwear that is wrapped around the head.", + "A turban is a type of headwear that is wrapped around the head.", + "A turban is a head covering that is typically wrapped around the head in a cloth." + ], + "turkey (food)": [ + "A turkey is a large, roasted bird.", + "A turkey is a large bird with dark feathers.", + "A turkey is a large bird with a long neck and legs.", + "A turkey is a large bird with brown feathers.", + "A turkey (food) is a large bird that is roasted and served as a Thanksgiving or Christmas meal.", + "A turkey (food) is a large, roasted bird.", + "A turkey is a delicious bird that is often roasted and served with mashed potatoes and gravy.", + "A turkey (food) is a large bird that is roasted and usually served with stuffing, gravy, and cranberry sauce.", + "A turkey is a plump bird with white or light-brown feathers and a long neck.", + "A turkey is a large, cooked bird." + ], + "turnip": [ + "A turnip looks like a white or cream-colored root vegetable with a smooth surface and a small, green leaves growing from the top.", + "A turnip is a root vegetable that has a white flesh with a light purple hue.", + "A turnip is a root vegetable that has a fairly round shape with a flattened top and bottom.", + "A turnip is a root vegetable that grows underground.", + "A turnip is white or light purple root vegetable that is low in calories but high in fiber and vitamin C.", + "A turnip is a taproot that is part of the Brassica family.", + "Turnips are vegetables that have a white bulb with a green stem.", + "A turnip is a white or cream-colored root vegetable with a rounded shape and a slightly turnip-shaped top.", + "A turnip is a white root vegetable that has a round shape.", + "A turnip is aroot vegetable that is often white or pale yellow in color." + ], + "turtle": [ + "A turtle is a reptile with a hard shell that covers its body.", + "A turtle has a hard shell that protects its body.", + "Turtles have a hard shell that protects them like a suit of armor.", + "A turtle is a four-legged reptile with a large shell on its back.", + "A turtle has a hard shell that protects its body.", + "A turtle is a reptile with a hard shell.", + "Turtles have a hard shell that protects them from predators and the elements.", + "A turtle has a shell on its back that protects it from predators and the elements.", + "A turtle is a reptile with a hard, protective shell covering its body.", + "A turtle is a land or sea reptile with a shell." + ], + "turtleneck (clothing)": [ + "a turtleneck is a type of clothings that covers the neck and part of the chin, typically made of wool, cotton, or synthetic material.", + "A turtleneck is a type of clothing that covers the neck and sometimes the chin.", + "A turtleneck is a clothing item that covers the neck and usually has long sleeves.", + "A turtleneck is a piece of clothing that covers the neck and chin and often the whole head, except for the face.", + "A turtleneck is a snug-fitting garment that covers the neck and throat.", + "A turtleneck (clothing) is a piece of clothing that covers the neck and throat.", + "A turtleneck is a shirt with a high, close-fitting collar that covers the neck and throat.", + "A turtleneck is a type of shirt or sweater that covers the neck and chin, with a close-fitting, round neckline that fits snugly around the throat.", + "A turtleneck is a piece of clothing that covers the neck and extends upwards over the chin, mouth, and nose.", + "A turtleneck is a type of clothing that covers the neck and throat." + ], + "typewriter": [ + "A typewriter is a machine that allows you to type documents.", + "A typewriter has a keyboard with different letters, numbers, and symbols on the keys.", + "A typewriter is a machine that you use to type.", + "A typewriter looks like a small rectangular box with a keyboard attached to the front.", + "A typewriter typically has a keyboard with keys for each letter of the alphabet as well as keys for other characters such as punctuation marks.", + "A typewriter is a machine that looks like a keyboard.", + "A typewriter is a machine used to write characters on paper.", + "A typewriter is a manual machine with a keyboard that is used to input text onto paper.", + "A typewriter has a keyboard with keys that you press to make letters, numbers, and punctuation marks appear on paper.", + "A typewriter has a keyboard with letters, numbers, and symbols." + ], + "umbrella": [ + "An umbrella is a portable canopy that is used to shield oneself from the sun or rain.", + "An umbrella is a device used for protection from the sun or from precipitation.", + "An umbrella is a device used for protection from the rain or sun.", + "An umbrella is a portable weatherproof canopy supported by metal or wooden ribs, which is usually mounted on a central pole.", + "An umbrella is a portable canopy designed to protect a person against rain or sunlight.", + "A traditional umbrella is a circular canopy supported by metal or wooden ribs, which is mounted on a collapsible metal, wooden, or plastic rod.", + "An umbrella is a device used for protection from the rain.", + "A typical umbrella is a collapsible canopy supported by wooden or metal ribs, which is usually mounted on a wooden, metal, or plastic pole.", + "An umbrella is a device used to protect a person from the sun or rain.", + "The most common type of umbrella is a handheld, sun umbrella." + ], + "underwear": [ + "An underwear is a piece of clothing that is worn on the lower half of the body.", + "There is a wide variety of underwear, but most typically they are form-fitting garments that cover the pelvic region and the buttocks.", + "Underwear is typically a close-fitting piece of clothing that covers the body from the waist down.", + "Underwear is a type of clothing that is worn under other clothes.", + "Underwear is a piece of clothing that covers the lower half of the body.", + " UNDERWEAR Underwear is a close-fitting garment covering the body from the waist to the legs, typically made of soft and stretchy material for comfort.", + "An underwear looks like a pair of pants that are worn under other clothing.", + "An underwear typically has a waistband that goes around the waist and legs that cover the groin.", + "A pair of underwear is typically a garment that is worn under other clothing.", + "Underwear generally consists of a top piece that covers the chest and a bottom piece that covers the waist and the groin." + ], + "unicycle": [ + "An unicycle is a vehicle with one wheel.", + "A unicycle is a vehicle with one wheel that is propelled by pedaling.", + "An unicycle typically has a steel or aluminum frame, and a large wheel in the center.", + "A unicycle is a vehicle with only one wheel.", + "An unicycle is a vehicle with one wheel that is powered by pedals.", + "A unicycle is a two-wheeled vehicle that is propelled by pedaling a crankset connected to the wheel.", + "An unicycle typically has a steel or aluminum frame, and a plastic or metal rimmed wheel.", + "An unicycle typically has a large wheel in the center with a seat and pedals attached.", + "A unicycle typically has a seat and a pedal attached to a single wheel.", + "A unicycle is a bike with one wheel." + ], + "urinal": [ + "An urinal is a small, bowl-shaped toilet typically found in men's bathrooms.", + "A urinal is a porcelain or stainless steel bowl that is mounted on a wall or partition.", + "A urinal is a small sink with a drain in the middle that is used to relieve oneself.", + "An urinal is a porcelain bowl that is mounted on the wall.", + "A urinal typically looks like a bowl that is open at the top.", + "A urinal is a fixture that is used by men to urinate.", + "A urinal is a porcelain bowl that is set into a wall.", + "Most urinals are a porcelain bowl that is white in color.", + "A urinal typically looks like a porcelain basin that is affixed to a wall.", + "An urinal is often a small, shield-like device that is placed over the opening of a toilet." + ], + "urn": [ + "An urn is typically a vase-like object with a slender neck and a wide base.", + "An urn is a vase-like container with a narrow neck and a large, round body.", + "An urn is a vase-like container with a narrow neck and a wide base.", + "An urn generally has a circular body with a narrower neck and a rounded base.", + "An urn is typically a vase-like object with a narrow neck and a wide bottom.", + "An urn is a container that is used to hold the ashes of a deceased person.", + "An urn is a vase-like container with a wide neck and a narrow base.", + "An urn is a vase with a wide, round opening at the top and a narrow base.", + "An urn is a vase that is larger than a standard vase and often has a decorative lid.", + "An urn is a type of vase that is typically taller and more slender than a regular vase." + ], + "vacuum cleaner": [ + "A vacuum cleaner typically consists of a long, hollow cylindrical body with a suction cup or nozzle at one end, and a handle and wheels at the other.", + "A vacuum cleaner typically consists of a cylindrical canister that sits on four small wheels, with a long handle attaching to the canister.", + "A vacuum cleaner is a device that uses an air pump to create a partial vacuum to suck up dust and dirt, usually from floors.", + "A vacuum cleaner is a household appliance that is used to remove dirt and debris from floors and upholstery.", + "A typical vacuum cleaner is a cylinder-shaped device with a handle, brush head, and spinning beater bar that agitates the floor surface, as well as a detachable dust bin that collects debris.", + "A vacuum cleaner typically includes a long tube, a rectangular base, and a cylindrical canister for collecting dirt and debris.", + "A vacuum cleaner is a device that uses an air pump to create a vacuum to suck up dust and dirt from floors and other surfaces.", + "A vacuum cleaner is a device that sucks up dirt and debris from floors and other surfaces.", + "A vacuum cleaner is a machine that uses an air pump to create a vacuum to suck up dust and dirt from floors and other surfaces.", + "A standard vacuum cleaner has a long, cylindrical body with a handle on one end and a nozzle on the other." + ], + "vase": [ + "A vase is a container with a wide open top and a small base.", + "A vase is a container used to hold flowers or other objects.", + "A vase is a container with a narrow neck and a wide bottom.", + "A vase is a container with a wide opening at the top and a small base.", + "A vase is an often- ornamented container used to hold cut flowers.", + "A vase is a tall, thin container with a flared top.", + "A vase is a container with a wide opening and a narrow neck.", + "A vase typically has a wide opening at the top and a narrow base.", + "A vase is a container that is used to hold flowers or other objects.", + "A vase is a container with a wide opening and a small base, used for holding flowers." + ], + "vending machine": [ + "A vending machine is a large, stand-alone machine that sells snacks and drinks.", + "A vending machine is a glass-enclosed, coin-operated machine that dispenses merchandise, typically snacks, beverages, and cigarettes, when a customer inserts money.", + "A vending machine typically has a rectangular shape and is made of metal.", + "A vending machine is a large metal box with a glass front.", + "A vending machine is a machine that dispenses items such as snacks, drinks, or cigarettes after the customer inserts money or a credit card.", + "A vending machine is a tall, rectangular machine with a coin slot, buttons, and a slot for dispensing items.", + "Vending machines are typically large, rectangular machines made of metal and glass.", + "A vending machine is a large, metal box with a slot for money and a variety of buttons or levers.", + "A vending machine looks like a large, metal box with a coin slot, buttons, and a small door or opening.", + "A vending machine is typically a large, rectangular machine with a glass front." + ], + "vent": [ + "A vent typically looks like a small, round or square opening in a wall or ceiling.", + "A vent is a small opening that allows air to move in and out.", + "A vent is an opening in a wall that allows air to flow through.", + "A vent is an often-small opening in a wall that allows air, gas, or liquid to pass through.", + "A vent is an outlet in a wall that allows air to pass through.", + "A vent looks like a small hole in the ground with a metal or plastic grating over it.", + "A vent is a small opening in a wall or floor that allows air, gas, or liquid to pass through.", + "A vent is typically a small opening in a wall that allows air to enter or exit a room.", + "A vent is a pipe or other opening in a wall or floor that allows air, gas, or liquids to pass through.", + "A vent is a small, typically round opening in a wall or piece of furniture through which air or other gases can pass." + ], + "vest": [ + "A vest is a garment worn over the upper body.", + "A vest typically has five or six buttons down the front, and it may be worn as part of a suit.", + "A vest is a sleeveless garment that covers the upper body and is usually worn over a shirt.", + "a vest is a type of clothing that is typically worn over a shirt or sweater.", + "A vest is a sleeveless garment that covers the upper body and has buttons down the front.", + "A vest is a sleeveless garment that covers the upper body.", + "A vest is a sleeveless garment that covers the upper body and typically has a front opening.", + "A vest is a sleeveless garment that covers the upper body and has a closed front.", + "A vest is a sleeveless piece of clothing that is worn over a shirt or other top.", + "A vest is a sleeveless garment that covers the upper body." + ], + "videotape": [ + "A VHS videotape is a black plastic cassette that contains metallic tape.", + "A videotape is a thin plastic film with a magnetic coating that is used to record sound and images.", + "A videotape is a magnetic tape used for storing video images and sound.", + "A videotape is a long, thin, black tape that is used to record videos.", + "A videotape looks like a spool of black plastic film with embedded magnetic tape.", + "A videotape is a long, thin strip of plastic with shiny metal foil on both sides.", + "A videotape is a reel of magnetic tape that is used to record videos.", + "A videotape is a magnetic tape used to store video information in an analog format.", + "A videotape is a long, thin piece of plastic with magnetic tape inside of it.", + "A videotape is a magnetic tape used for storing video and usually audio recordings." + ], + "vinegar": [ + "A vinegar is an acidic liquid that is produced by fermenting alcohol.", + "A vinegar is dark brown in color.", + "A vinegar looks like a light brown liquid.", + "A vinegar has a liquid base with a slightly oily film on top.", + "A vinegar is a clear, liquid condiment made from fermented ethanol and acetic acid.", + "A vinegar is an acidic liquid that is used in cooking.", + "A vinegar is a sour-tasting liquid that is produced through the fermentation of ethanol or other organic liquids.", + "A vinegar is a clear, watery liquid with a sour taste.", + "A vinegar looks like a clear or yellowish liquid.", + "A vinegar is a clear, colorless to amber liquid with a sour, acidic taste." + ], + "violin": [ + "A violin typically has four strings that are stretched over a wooden body with a hollowed out centre.", + "A violin has a long, thin neck that attaches to a rounded body.", + "A violin typically has four strings that are played with a bow.", + "A violin is a small, four-stringed musical instrument that is held under the chin and played with a bow.", + "A violin is a small, four-stringed musical instrument with a hollow body.", + "A violin typically has 4 strings that are tuned to the pitches G3, D4, A4, and E5.", + "A violin is a string instrument that has four strings.", + "Most violins have a spruce top with maple back and sides.", + "A violin typically has four strings that are tuned in perfect fifths.", + "A violin is a four-stringed musical instrument that is held under the chin and played with a bow." + ], + "vodka": [ + "A vodka typically has a clear appearance.", + "A vodka typically has a clear appearance.", + " crystal clear.", + "A vodka typically has a clear appearance.", + "\nA vodka typically looks like a clear liquid.", + "Vodka can be distilled to be completely clear, or it may retain some of the flavorings from the ingredients it was made from.", + "A vodka looks like a colorless, distilled alcoholic beverage.", + "A vodka usually has a clear appearance, although some brands may add a slight tint to give it some color.", + "Vodka is a clear spirits with a neutral flavor.", + "A vodka is a distilled spirit that is typically clear and has a slightly sweet taste." + ], + "volleyball": [ + "A volleyball is a spherical ball with a light and soft hier that is used to play the sport of volleyball.", + "A volleyball is a sphere with a circumference of about 24 inches (61 cm).", + "A volleyball is a ball that is made out of rubber and is inflated with air.", + "A volleyball is an inflated, round ball with a circumference of 27 to 29 inches (69 to 74 cm) and a weight of 9 to 11 ounces (250 to 310 grams).", + "A volleyball is a round, white ball with black stripes.", + "A volleyball is a ball that is used to play the sport of volleyball.", + "A volleyball is a round, inflated ball that is used to play the sport of volleyball.", + "Volleyballs are typically round and have a smooth surface.", + "A volleyball is a round, inflated ball with a smooth surface.", + "A volleyball is typically a sphere with a stitched leather or synthetic leather cover." + ], + "vulture": [ + "A vulture is a raptor with a bare head and neck, a hooked beak, and powerful talons.", + "A vulture is a large bird with a bare head and neck.", + "Vultures are tall, thin birds with long necks and Bald heads.", + "A vulture is typically a large bird with a bald head and long neck.", + "A vulture is a large, winged bird with a bald head.", + "A vulture is a large, scavenging bird with a bald head, a hooked beak, and long legs.", + "A vulture is a large bird with a bare head.", + "A vulture is a large, scavenging bird with a bare head and neck, hooked bill, and dark plumage.", + "A vulture is a large bird with a bare head and neck, and a hooked beak.", + "A vulture has a large body, Bald head, and long neck." + ], + "waffle": [ + "A waffle is a pancake-like pastry that is cooked in a waffle iron and has a distinctively grid-like pattern on the top and bottom.", + "A waffle is a dish made from leavened batter or dough that is cooked between two plates that are patterned to give a characteristic size, shape, and surface impression.", + "A waffle is a thin, round, batter-based cake that is cooked in a waffle iron and is usually served with syrup.", + "A waffle looks like a round, honeycomb-patterned cake that is cooked in a waffle iron.", + "A waffle is typically a leavened batter or dough that is cooked between two plates that are patterned to give it a characteristic size, shape, and surface impression.", + "A waffle looks like an egg-shaped pancake with deep indentations.", + "A waffle looks like a grid of squares.", + "A waffle is a pancake-like pastry that is made from a leavened batter or dough and is cooked between two heated plates.", + "A waffle is a pancake-like food that is cooked in a waffle iron.", + "A waffle is a hotcake with different patterns on it." + ], + "waffle iron": [ + "A waffle iron typically consists of two hinged metal plates that are coated with a non-stick material, with a grid-like pattern on the top and bottom.", + "A waffle iron is a i shaped metal griddle that has ridges on one side and is smooth on the other.", + "A waffle iron typically consists of two metal plates that are hinged together.", + "A waffle iron is a kitchen appliance used to make waffles.", + "A waffle iron is a small appliance that has two metal plates that are held together by a hinge.", + "A waffle iron is a rectangular device with a flat griddle on one side and a series of raised ridges on the other.", + "A waffle iron is usually a rectangular or square appliance with two hinged metal plates.", + "A waffle iron has two hot plates that are connected by a hinge.", + "A waffle iron is a rectangular appliance with two hinged plates that open and close like a book.", + "A waffle iron can be either a electric appliance or a stovetop appliance." + ], + "wagon": [ + "A wagon is typically a four-wheeled vehicle, pulled by a horse or other animal, used for carrying goods.", + "A wagon is a vehicle with four wheels that is pulled by a horse or other animal.", + "A wagon is a four-wheeled vehicle that is pulled by a horse or a donkey.", + "A wagon is typically a rectangular box on four wheels with a handle on the side.", + "A wagon is a vehicle with four wheels that is used for transporting goods or people.", + "A wagon is a four-wheeled vehicle, typically pulled by horses or oxen, used for carrying goods or passengers.", + "A wagon is a wheeled vehicle used to carry goods or passengers.", + "A wagon is a vehicle, typically pulled by a horse or a donkey, for carrying goods.", + "A wagon typically has four wheels and is pulled by a horse or other animal.", + "A wagon is a vehicle, usually pulled by a horse or a donkey, for carrying goods or people." + ], + "wagon wheel": [ + "A wagon wheel typically consists of a hub, a rim, and spokes connecting the two.", + "A wagon wheel generally has a large, round center hub with spokes leading out to a round outer rim.", + "A wagon wheel looks like a regular wheel on a wagon.", + "A wagon wheel typically consists of a metal rim, spokes and a hub.", + "A wagon wheel is generally round with spokes sticking out from the center.", + "A wagon wheel is a round wheel that is attached to the axle of a wagon.", + "A wagon wheel typically has six spokes and a large, round, wooden rim.", + "A wagon wheel is a circular frame with spokes that is attached to the axle of a wagon.", + "Most wagon wheels have a spoke-and-wheel design, meaning they are composed of a central hub with spoke-like beams radiating outward from the center to support a round rim.", + "A wagon wheel is a round, wooden wheel that is used on a wagon." + ], + "walking stick": [ + ".", + "A walking stick is usually a straight, slender piece of wood or metal that is held in the hand and used to help support a person's weight when walking.", + "A walking stick is usually a straight, slender shaft with a point at one end and a curved or hooked handle at the other.", + "A walking stick is a thin, precision-cut pole that is used for support while hiking.", + "A walking stick is a stick that a person can lean on when they are walking.", + "A walking stick is usually a wooden shaft with a metal tip that is used to help support a person when walking.", + "A walking stick is a walking aid that helps provide stability and support when walking.", + "A walking stick is a long, thin piece of wood or metal that is used to help a person walk.", + "A walking stick is a stick that can be helpful when walking.", + "A walking stick typically has a long, slender shaft and a curved handle." + ], + "wall clock": [ + "A wall clock is a clock that hangs on a wall.", + "A wall clock typically has a round or square face with numbers arranged in a way that makes it easy to tell time.", + "A wall clock is a round clock that hangs on a wall.", + "A typical wall clock has a circular face with hour markers and hands.", + "A wall clock is a clock that hangs on the wall.", + "A wall clock usually has a round or oval face with a glass or plastic cover.", + "Most wall clocks are round and have a plastic or metal casing.", + "Typically, a wall clock is round or square-shaped with a flat face.", + "Most wall clocks are circular and have a black or white face with numbers indicating the hour.", + "A wall clock is round and has a face with hour and minute markings." + ], + "wall socket": [ + "A wall socket is a plastic or metal box that is mounted on a wall.", + "A wall socket is a small opening in a wall that electrical cables can be inserted into.", + "A wall socket is a small, thin, rectangular box that is mounted on a wall.", + "A wall socket is a small, block-shaped device that is mounted on a wall.", + "A wall socket is a receptacle for an electrical plug that is mounted in a wall.", + "It is a rectangle box that is mounted on the wall.", + "A wall socket is a plug that goes into an outlet.", + "A wall socket looks like a small, rectangular box with a hole in the center.", + "A wall socket looks like a small, rectangular box with a hole in the center.", + "A wall socket looks like a small, rectangular box with a hole in the center." + ], + "wallet": [ + "A wallet is a rectangular leather case with a flap that snaps or fastens shut.", + "A wallet is typically a small, rectangular leather or fabric case that can be held in a person's handbag or pocket.", + "A wallet is a small, flat case that can be used to carry money and credit cards.", + "A wallet is a small, flat case that can be carried in a person's pocket.", + "A wallet is a small, flat case that is used to hold money, credit cards, and other items such as Identification.", + "A wallet is typically a small, flat case that can be easily carried in a pocket.", + "A wallet is a small, flat case that can be used to carry personal items like cash, credit cards, and identification documents.", + "A wallet is a small, flat case that is used to carry personal items such as cash, credit cards, and identification documents.", + "A wallet is a small, flat case that is used to carry personal items such as cash, credit cards, and identification documents.", + "A wallet is a small, flat case that is used to carry cash, credit cards, and identification." + ], + "walrus": [ + "A walrus is a large, flippered marine mammal with a bulky body, short limbs, and a large head with two long tusks protruding from the mouth.", + "A walrus is a large, flippered marine mammal with a long, tusked head.", + "A walrus is a large, flippered marine mammal with a bulky body, short tail, and wide, flat head.", + "A walrus is a large ocean mammal with two long tusks, a thick fur coat, and large flippers.", + "A walrus is a stocky, rounded pinniped with small flippers, short fur, and long tusks.", + "A walrus is a large flippered marine mammal with a discontinuous distribution about the North Pole in the Arctic Ocean and sub-Arctic seas of the Northern Hemisphere.", + "A walrus is a blubbery mammal with long tusks, whiskers, and a seal-like face.", + "A walrus is a large flippered marine mammal with a thick fur coat.", + "A walrus is a large marine mammal with a body shaped somewhat like a seal.", + "A walrus is a seal with a long face and large tusks." + ], + "wardrobe": [ + "A wardrobe is a piece of furniture that typically provides storage space for clothes.", + "A wardrobe is a piece of furniture that is used for storing clothes.", + "A wardrobe looks like a piece of furniture with a door that is used to store clothes.", + "A wardrobe is a piece of furniture typically used to store clothing.", + "A wardrobe is a storage unit that is typically made up of shelves, drawers, and hanging space.", + "A typical wardrobe is a tall, free-standing cabinet with shelves and hanging space for clothes.", + "A wardrobe is a piece of furniture used for storing clothes.", + "A wardrobe is a large piece of furniture that is used to store clothes.", + "A wardrobe is a piece of furniture that is used to store clothes.", + "A wardrobe is a tall, free-standing cabinet that is used to store clothes." + ], + "washbasin": [ + "A washbasin is a small basin used for washing hands or small objects.", + "A washbasin is a large, deep, open bowl that is used for washing hands and faces.", + "A washbasin is a basin-shaped plumbing fixture used for washing hands, face, and other body parts.", + "A washbasin is a bowl-shaped basin used for washing hands or small objects.", + "A washbasin is a bowl-shaped object that is used to hold water.", + "A washbasin is a large bowl that is used for washing one's hands.", + "A washbasin is a round or oval-shaped sink that is used for washing hands or small items.", + "A washbasin is a bowl-shaped bathroom fixture that is used for washing hands and face.", + "A washbasin is a round or oval-shaped bathroom sink with a flat bottom.", + "A washbasin is a sink, typically round or oval in shape, with a tap or faucet and a drain." + ], + "automatic washer": [ + "An automatic washer typically contains a washing tub, a spin tub, and a number of hoses and agitators.", + "An automatic washer typically contains a central washing tub, a spinning device called an agitator, and a impeller.", + "A typical automatic washer is a steel cylinder with a door on the front that opens to load clothing.", + "An automatic washer is a device that cleans clothes.", + "An automatic washer typically has a large metal tub that holds clothes and water.", + "An automatic washer is a machine that washes clothes.", + "It has a large, drum-shaped container that holds clothes.", + "An automatic washer typically is a large, rectangular box shape with a door on the front that opens to load clothing into the washer.", + "An automatic washer is a machine that is used to wash things, usually clothes.", + "A washing machine is a household appliance that consists of a horizontal, cylindrical drum that rotates on its axis." + ], + "watch": [ + "A watch is a personal timepiece that is typically worn on the wrist.", + "A watch is generally a small, round, portable timepiece, typically strapped to the wrist.", + "\n\tA watch is a small timepiece that is typically worn on the wrist.", + "A watch is a small, portable device that tells time.", + "A watch is a small,Timeless piece that is worn on the wrist.", + "A watch is a timepiece that is typically worn on the wrist.", + "A watch is a small, round device that is worn on the wrist.", + "A watch is a small, round device that is typically worn on the wrist.", + "A watch is a timekeeping device that is typically worn on the wrist.", + "A watch is often a small, round object that is worn on a wrist." + ], + "water bottle": [ + "A water bottle is a cylindrical container with a screw-on top.", + "A water bottle is a container made of plastic, glass, or metal, used to hold water.", + "A water bottle is typically a plastic or metal container with a screw-on cap.", + "A water bottle typically has a cylindrical shape and is made of plastic or metal.", + "A water bottle is typically a plastic or metal cylinder with a screw-on cap.", + "A water bottle is a bottle made of plastic, glass, or metal designed to hold water.", + "A water bottle is usually cylindrical in shape and made from a transparent plastic.", + "A water bottle is typically made of plastic or metal and has a screw on cap.", + "A water bottle is a cylindrical container with a screw-on cap.", + "A water bottle is usually a plastic or metal container that has a lid and a way to drink from it without removing the lid." + ], + "water cooler": [ + "A water cooler is a device that dispenses water.", + "A water cooler is typically a stand-alone unit that dispenses water from a large container or tank.", + "A water cooler is a machine that dispenses water.", + "A water cooler is typically a large jug of water with a dispenser and a spout.", + "A water cooler typically consists of a water tank that is about 5 feet tall and 3 feet wide.", + "A water cooler is a tower with a water spout and a basin at the bottom to catch the water.", + "A water cooler typically resembles a small refrigerator and has a dispenser for chilled water and a separate dispenser for room-temperature water.", + "A water cooler is typically a large, bulky machine that sits on the floor and has a spout for dispensing water.", + "A water cooler is a large machine that holds water and dispenses it through a spout.", + "A water cooler is a machine that typically sits on the floor and has a spigot for dispensing water." + ], + "water faucet": [ + "A water faucet is a device that controls the release of water from a pipe.", + "A water faucet typically has a knob or lever handle to turn the water on and off.", + "A water faucet typically has a cylindrical body with a lever or handle attached to the top.", + "Most water faucets have a single handle that controls both the hot and cold water.", + "A water faucet is a device that controls the release of water from a pipe.", + "A water faucet is a device that controls the release of water.", + "A water faucet generally has a knob or handle to turn the water on or off, as well as a spout from which the water comes out.", + "A water faucet has a spout and two handles.", + "A water faucet is a fixture that is attached to a water supply pipe and has a handle that is used to control the flow of water.", + "A water faucet typically has a handle that can be turned to the left or right to control the water flow, as well as a spout from which the water comes out." + ], + "water heater": [ + "A water heater is a white cylinder that is typically found in a home's basement or utility room.", + "The most common type of water heater in North America looks like a large metal cylinder with a control panel attached to the side.", + "A water heater is a large metal cylinder that is typically placed in a basement or utility room.", + "A water heater is typically a large, cylindrical tank that is insulated to keep the water inside hot.", + "A water heater is a metal tank that is usually placed in a basement or garage.", + "A water heater is a cylindrical tank that is typically placed horizontally.", + "A water heater is a drum-shaped appliance that sits on four legs.", + "A water heater is a large metal tank with a handle on the side and a spigot on the front.", + "A water heater is usually a large, cylindrical tank that is silver in color.", + "A water heater is a large metal cylinder that is usually powered by gas or electricity." + ], + "water jug": [ + "A water jug is a container used to hold water.", + "A water jug can vary in size and shape, but typically has a handle and a spout.", + "A water jug is a container for holding water.", + "A water jug is usually a clear or blue container with a handle and a spout.", + "A water jug is a container that holds water and has a pour spout.", + "A water jug is a roughly cylindrical container with a handle and a spout.", + "A water jug most typically has a handle for ease of pouring, and a spout for pouring integrated into the design.", + "A water jug is a container that holds water and has a spout for pouring.", + "A water jug is generally made of glass or plastic and has a spout for pouring.", + "A water jug is a large container used to hold and dispense water." + ], + "water gun": [ + "A water gun usually is a plastic gun that holds water in its reservoir and is pushed through a tiny opening with a plunger.", + "A water gun typically resembles a realistic gun, except that it is brightly colored and is made of plastic.", + "A water gun is typically a toy gun that is used to squirt water.", + "A water gun is a small, plastic gun that holds water in a small reservoir and squirts it out through a small nozzle.", + "A water gun is a gun that is used to shoot water.", + "A water gun is a plastic toy that squirts water.", + "A water gun is a plastic gun that you can fill with water and squirt at people.", + "A water gun typically has a tank that is filled with water.", + "A water gun looks like a toy gun that has a water reservoir and a pump.", + "A water gun usually consists of a plastic reservoir, which is pressurized by a hand pump." + ], + "water scooter": [ + "A water scooter is a small, personal watercraft that typically has two or three seats and is powered by a small internal combustion engine.", + "Water scooters typically have a long, thin body and two large propellers on the back.", + "A scooter with a large engine attached to the back, two seats, and handlesbar steering.", + "A water scooter is a small, personal watercraft that allows the rider to stand or sit on the craft and travel across the water.", + "A water scooter usually looks like a cross between a motorcycle and a jetski.", + "A water scooter looks like a small motorcycle that sits on top of the water.", + "A water scooter looks like a small motorized raft.", + "A water scooter is small, fast, and maneuverable.", + "A water scooter is a small watercraft that is powered by a motor.", + "A water scooter is a small, personal watercraft that is powered by a small engine." + ], + "water ski": [ + "A water ski is a long, narrow board that you stand on and hold onto while being pulled behind a boat.", + "A water ski is a long and narrow board that you strap onto your feet and hold onto a rope attached to a boat.", + "A water ski is a flat, wide board that you stand on and hold onto while being pulled behind a boat.", + "A water ski is a long, thin board that you stand on and hold onto while being pulled behind a boat.", + "A water ski typically consists of a ski body and two bindings, which secure the feet of the skier.", + "A water ski is a long, narrow board that you stand on and hold on to while being pulled behind a boat.", + "A water ski is a long, narrow piece of wood or fiberglass that one uses to glide over the water while being pulled by a motorboat.", + "A water ski is a long, narrow board that you stand on and hold onto while being pulled behind a boat.", + "A water ski is a long, narrow board that is attached to a boat by a rope and handle.", + "A water ski is a long, narrow board that you stand on and hold onto while being pulled behind a boat." + ], + "water tower": [ + "A water tower is a large, elevated structure that stores water in a tank at the top.", + "A water tower is a very tall cylinder with a pointed top.", + "A water tower looks like a large cylinder with a cone-shaped roof on top.", + "A water tower is a large tank of water that is built on top of a tall structure.", + "A water tower is a tall, cylindrical structure that stores water at the top and dispenses it through a pipe at the bottom.", + "A water tower is a tall, cylindrical structure that is used to store water.", + "A water tower is a often an elevated structure that stores water.", + "A water tower is a structure that holds a large amount of water above the ground, typically in a tall cylinder or pyramid shape.", + "A water tower consists of a large, cylindrical tank that rests on top of a tall structure made of steel or concrete.", + "A water tower is a tall, cylindrical structure that stores water and provides pressurized water to a municipality or community." + ], + "watering can": [ + "A watering can is a garden tool that is used to water plants.", + "A watering can is a jug-shaped container with a spout and handle that is used to water plants.", + "Most watering cans have a spout and a handle.", + "A watering can has a long neck and a spout at the end.", + "A watering can is a container with a spout and a handle used to water plants by hand.", + "A watering can is a small container with a spout and handle that is used to water plants.", + "A watering can looks like a can with a spout attached to the top.", + "A watering can is a can with a handle and a spout that is used to watering plants.", + "A watering can typically has a long spout and a handle, and is used to water plants.", + "A watering can is a container with a spout and handle used to water plants." + ], + "watermelon": [ + "A watermelon is a large, round fruit with a green rind and a red, juicy interior.", + "A watermelon is a large, round fruit with green and white stripes on the outside and red flesh on the inside.", + "A watermelon is a large, round fruit with green skin and pink or red flesh.", + "A watermelon is a large, spherical or oval-shaped fruit with a green, tough rind and a sweet, juicy, red or pink interior.", + "A watermelon is a fruit with green skin and a pink or red interior.", + "A watermelon is a large, green fruit with a hard, green rind.", + "A watermelon looks like a large, round fruit with green, striped skin and a pink, red, or yellow interior.", + "A watermelon looks like a large, greenish-black fruit with a smooth, hard rind.", + "A watermelon is a large red or green fruit with a hard rind and a sweet, watery flesh.", + "A watermelon looks like alarge, green, spherical fruit with a smooth, hard rind and a juicy, red interior." + ], + "weathervane": [ + "A weathervane is a decorative device on top of a building that indicates which way the wind is blowing.", + "A weathervane is typically a metal object in the shape of an animal or other object that sits on top of a building and points in the direction that the wind is blowing.", + "A weathervane is a gadget that is used to tell which direction the wind is blowing.", + "A weathervane is a device that is used to indicate the direction of the wind.", + "It is an instrument for showing the direction of the wind.", + "A weathervane is a metal or wooden object that is mounted on a roof or somewhere high up and is used to show the direction of the wind.", + "A weathervane is traditionally a metal rod with a shaped metal piece at the top that indicates the direction of the wind.", + "A weathervane is a instrument for measuring wind direction.", + "A weathervane is a pointed metal object that is mounted on top of a building.", + "A weathervane is a metal object mounted on a pole that is used to show the direction of the wind." + ], + "webcam": [ + "A webcam is a camera that is used to record video or take pictures that can be transmitted over the internet.", + "A webcam generally looks like a small camera that can be attached to a computer or placed on a flat surface.", + "A webcam typically looks like a small digital camera that is attached to a computer.", + "A webcam is a small digital camera that is used to connect to a computer or laptop.", + "A webcam is a small digital camera that is used to record video or take pictures.", + "A webcam is a small video camera that is used to capture images or videos in real time and send them over the internet.", + "A webcam is a small camera that is connected to a computer or laptop.", + "A webcam is a small video camera that is used to capture images and send them over the internet.", + "A webcam typically looks like a small camera that can be attached to a computer or placed on a flat surface.", + "A webcam is a camera that is attached to a computer or laptop." + ], + "wedding cake": [ + "A wedding cake is a decorated cake that is served at a wedding reception.", + "A wedding cake is a tiered overt all decorated with frosting and often flowers.", + "A wedding cake traditionally is a tiered cake with white frosting.", + "A wedding cake is generally a multi-tiered cake that is decorated with frosting, flowers, or other ornamental details.", + "A wedding cake is a multi-tiered cake that is decorated with frosting, flowers, and other ornate decorations.", + "A wedding cake is a layered cake that is often decorated with frosting, flowers, or other ornate details.", + "A wedding cake is usually a white cake with multiple tiers.", + "A wedding cake is a multi-tiered cake that is elaborately decorated.", + "A typical wedding cake is white or off-white, and is decorated with frosting and often fondant.", + "A wedding cake is typically a tiered cake with frosting and decorations." + ], + "wedding ring": [ + "A wedding ring typically looks like a band made of precious metal, often gold or silver, with a round or Flat shape.", + "A standard wedding ring is a band made of precious metal, like gold or platinum, that is worn on the ring finger of the left hand.", + "A wedding ring is a band made of precious metal, typically gold or platinum, that is worn on the ring finger of the left hand.", + "A typical wedding ring is a plain band made of gold, silver, or another metal.", + "A wedding ring is typically a band made of precious metal (gold, silver, platinum, etc.", + "A wedding ring is a circular band made of gold, silver, or another precious metal.", + "A wedding ring typically looks like a simple band of metal, often gold or silver.", + " and how it is wornA wedding ring is a circular band of metal that is worn on the fourth finger of the left hand.", + "A wedding ring is a piece of jewelry that is worn on the ring finger of the left hand.", + "A ring made of metal, usually gold or silver, that is worn on the ring finger of the left hand to symbolize marriage." + ], + "wet suit": [ + "A wet suit is a form-fitting garment made of neoprene that covers the body from the neck to the wrists and ankles.", + "A wet suit looks like a one-piece suit made of neoprene.", + "A wet suit is an insulating garment made of neoprene.", + "A wet suit is a piece of clothing that covers the body and is made of a material that does not absorb water.", + "A wet suit is a garment worn by swimmers, divers, windsurfers, canoeists, and others engaged in water sports and other activities in or on water, primarily to provide thermal protection and abrasion resistance.", + "A wet suit is a piece of clothing that covers the body and is typically made of neoprene.", + "A wet suit is a garment, usually made of neoprene, that is worn by surfers, divers, and others participating in water sports.", + "A wet suit is a piece of clothing worn by divers and swimmers that helps to keep them warm in cold water.", + "A wet suit is a body-length garment made of neoprene, which is a type of synthetic rubber.", + "A wet suit is a garment that is worn by someone who is engaging in water activities." + ], + "wheel": [ + "A wheel is a round object that turns on an axle and is used to create motion or to move an object from one place to another.", + "A wheel is a round, flat object that turns on an axle and is used to create motion or to move heavy objects.", + "A wheel typically consists of a circular rim, spokes connecting the hub to the rim, and a central axle connected to the hub.", + "A wheel is an object with a central hub around which a set of spokes radiates.", + "A wheel is a round object that spins on an axle.", + "A round object that turns on an axle, usually made of wood, metal, or plastic.", + "A wheel is a circular object that rotates on an axle.", + "A wheel is a round object that turns on an axle and is used for transportation.", + "A wheel is a circular object that turns around an axle.", + "A wheel is a circular device that is capable of rotating on an axle or shaft." + ], + "wheelchair": [ + "A wheelchair typically has four large wheels, two smaller wheels at the front, and a seat with a backrest.", + "A wheelchair is a device that helps someone who cannot walk move around.", + "A wheelchair is a chair with wheels that is used by people who cannot walk.", + "A wheelchair is a chair with wheels that is used by people who cannot walk.", + "A wheelchair is a chair with wheels that is used by people who are unable to walk.", + "A wheelchair is a chair that is specially designed for people who have difficulty walking.", + "A wheelchair typically has four large wheels, two in the front and two in the back.", + "A standard wheelchair is a chair with four wheels, two large wheels in the back and two smaller wheels in the front.", + "A wheelchair is a chair with wheels that is used by someone who cannot walk.", + "A wheelchair is a chair with wheels that is used by people who cannot walk." + ], + "whipped cream": [ + "A whipped cream looks like a fluffy, creamy, and light substance.", + "A whipped cream is typically a white, creamy substance that is thick and fluffy.", + "A whipped cream is a light cream that has been beaten by a whisk or an electric mixer until it is thick and has a fluffy texture.", + "Whipped cream is a light, airy, and creamy topping that is made from whipping cream.", + "A whipped cream looks like a creamy, white substance that is often used as a topping on desserts.", + "Whipped cream looks like a mountains of airy, fluffy white stuff.", + "Whipped cream is a light, airy, and creamy dairy product that is made by whipping heavy cream.", + "A whipped cream is light and fluffy, and has a high oil content.", + "A whipped cream looks like a thick, creamy substance that is used as a topping on desserts.", + "a whipped cream is a fluffy white cream that is made by whipping air into cream." + ], + "whistle": [ + "A whistle is a small, handheld device that emits a high-pitched whistle when blown into.", + "A whistle is a small, tube-shaped object with a narrow opening at one end.", + "A whistle is typically a metal or plastic tube with a small hole in the top and a fluted mouthpiece.", + "A whistle is a small, usually metal, instrument that makes a high-pitched sound when blown.", + "A whistle is a small, handheld object that has a narrow, U-shaped mouthpiece and a small hole in the top.", + "A whistle is a small, tubular instrument made of metal, plastic, or wood.", + "A whistle is a small, thin, tube-shaped object with a small hole in the top and a small, flat piece of metal inside.", + "A whistle has a thin, tubular shape and a small hole in the top.", + "A whistle is a small, handheld device made of metal, plastic, or wood.", + "A whistle is a small, tube-shaped object with a hole in the top." + ], + "wig": [ + "A wig looks like a head of hair that has been cut off and put on a head.", + "A wig is a head covering that is typically made from human hair, synthetic fibers, or a combination of both.", + "A wig is a head covering made from human hair, animal hair, or synthetic fiber.", + "A wig is a piece of hair that is worn on the head to cover up someone's real hair.", + "A wig is a head covering that is typically made from human hair, animal hair, or synthetic fibers.", + "A wig is a piece of hair that is attached to a person's head with either a strap or adhesive.", + "A wig is usually a hairpiece made from human hair, animal hair, or synthetic fiber.", + "A wig is a head covering made from human hair, animal hair, or synthetic fiber.", + "A wig vary in color, style, and length.", + "Most wigs are made from synthetic fibers, although some are made from real human hair." + ], + "wind chime": [ + "A wind chime is made up of a series of hollow tubes or rods that are hung from a frame.", + "Most wind chimes are composed of metal pipes of different lengths that produce tones when they are struck by a metal or wooden ball.", + "A wind chime is a decorative object that consists of a group of hanging metal or glass rods.", + ".", + "A wind chime is a decorative object that hangs outdoors and is made of metal or wood.", + "Wind chimes are traditionally made of metal rods of different lengths that are suspended from a frame.", + "A wind chime is a metal frame with different-sized metal rods of different lengths.", + "A wind chime is a decorative object that hang outdoors and consists of metal or glass pieces that tinkle when the wind blows.", + "A wind chime typically consists of a series of metal tubes or rods suspended from a metal or wooden frame.", + "It is a decoration that hang from the ceiling or any high place, composed by little pieces of metal or glass that tinkle when the wind blows." + ], + "windmill": [ + "A windmill is a machine that harnesses the power of the wind and converts it into rotational energy that can be used to power machinery or generate electricity.", + "Windmills are usually large tall structures with large sails or blades that spin around a central shaft.", + "A windmill is a tower-like structure with large blades that rotate in the wind.", + "A windmill is a type of mill that is powered by the wind.", + "A windmill is a machine that turns wind energy into rotational energy.", + "A windmill looks like a large structure with blades that rotate in the wind.", + "A windmill is a tall structure with large blades that spin around in the wind.", + "The windmill has a tall, slim tower with large sails or blades that catch the wind.", + "Most windmills have a large metal or wooden frame with blades attached to the top.", + "A windmill is a large, tall structure with large blades that rotate in the wind." + ], + "window box (for plants)": [ + "Window boxes are typically long, rectangular planters that are designed to fit underneath a window.", + "A window box is a container, often made of wood or metal, that is used to hold plants.", + "A window box is a small planter that is typically placed on the sill of a window.", + "A window box is a rectangular container that is placed on the sill of a window.", + "A window box is a shallow planter that is placed on the sill of a window.", + "A window box is a planter that is typically long and narrow and is used to display plants in a window.", + "A window box is a rectangular box that is typically shallow and is used to hold plants.", + "A window box is a rectangular planter that is often attached to the outside of a building, typically beneath a window.", + "A window box for plants is typically a rectangular or cubic container that is placed on the sill of a window.", + "A window box is a rectangular planter that is designed to sit on a windowsill." + ], + "windshield wiper": [ + "A windshield wiper is a strip of rubber or cloth that is attached to a lever inside a car.", + "A windshield wiper is a device used to remove rain, snow, or debris from a windshield.", + "A windshield wiper is a strip of rubber or fabric attached to a metal arm that is connected to the pivot point of the windshield frame.", + "A windshield wiper is a strip of rubber or cloth attached to a metal arm.", + "The windshield wiper is a rubber blade that is attached to a metal arm.", + "A windshield wiper is a rotating blade that is used to remove water, snow, or debris from a windshield.", + "A windshield wiper is a long, thin arm that has a rubber blade on the end.", + "A windshield wiper is a device used to remove rain, snow, ice, and debris from a windshield.", + "A windshield wiper is a tool that helps to clean the windshield of a vehicle.", + "A windshield wiper is a component of a vehicle that helps to keep the windshield clean." + ], + "windsock": [ + "A windsock is a cone- or tube-shaped cloth bag that is open at one end and hangs from a mast, pole, or wire on a pole.", + "A windsock has a conical shape and is open at the bottom.", + "A windsock is a long, thin tube of fabric that is open at both ends.", + "A windsock is a light, cone-shaped fabric bag that is open at the bottom and has a small hole at the top.", + "A windsock is a cone-shaped fabric tube that is open at both ends and attached to a pole.", + "A windsock is a cone-shaped bag made of fabric, typically mesh or nylon, that is open at the bottom.", + "A windsock is a pillar-shaped bag that is open at the bottom and has a conical top.", + "A windsock is a tubular fabric bag that is open at one end and hangs down from a pole.", + "A windsock looks like a cone-shaped cloth flag that is attached to a pole.", + "A windsock is usually a tube of fabric with numbered markings on it, attached to a mast or building." + ], + "wine bottle": [ + "A wine bottle is typically made of glass and has a long, thin neck.", + "A wine bottle has a long neck and a round body.", + "A wine bottle is usually made of glass and is tall and thin.", + "Wine bottles are traditionally made of glass and have a long, narrow neck that tapers at the top.", + "A wine bottle typically has a long, thin neck and a round body.", + "A wine bottle is a bottle that is used to store and transport wine.", + "A wine bottle is typically tall and skinny with a long neck.", + "A wine bottle is a container for holding wine.", + "A wine bottle has a long neck and a round body.", + "A wine bottle is typically made of dark green or brown glass and has a long, slender neck." + ], + "wine bucket": [ + "A wine bucket is a large container made of metal, glass, or plastic.", + "A wine bucket is often made of metal or glass, and has a handle for easy carrying.", + "A wine bucket has a wide, round body and a small base.", + "A wine bucket is typically a tall, narrow bucket made of metal, glass, or plastic.", + "A wine bucket often looks like a large metal or glass bucket with a handle.", + "A wine bucket is a metal container with a handle on one side and a spout on the other.", + "A wine bucket is a container, typically made of metal, glass, or ceramic, used to chill wine.", + "A wine bucket is a large container made of metal, glass, or plastic, with a handle on the side, used for cooling or storing wine.", + "A wine bucket is a container that is used to hold wine, typically Champagne.", + "A wine bucket is a pail or tub that is used to hold wine, typically while it is being chilled." + ], + "wineglass": [ + "A wine glass is a glass cup with a stem that is used to drink wine.", + "A wineglass typically has a narrow bowl and a long stem.", + "A wineglass has a round bowl and a long stem.", + "A wineglass has a stem and a bowl.", + "It is a glass with a stem that is used to drink wine.", + "A wineglass has a long stem and a large, inverted cone-shaped bowl.", + "A wineglass is typically long-stemmed and has a bowl that is narrower at the bottom and widens at the top.", + "A wineglass has a long stem and a large, round bowl.", + "A wineglass is a glass that is generally used to drink red wine.", + "A wineglass typically has a long stem with a bowl-shaped cup." + ], + "blinder (for horses)": [ + "A blinder is a leather visor that is attached to a horse's bridle and covers its eyes.", + "A blinder is a piece of horse tack that prevents the horse from seeing to the rear or the side.", + "A blinder is a type of horse tack that is used to cover a horse's eyes.", + "A blinder is a type of horse tack that prevents the horse from seeing to the rear and sides.", + "A blinder for horses is a piece of equipment that is placed over the horse's eyes to limit its vision.", + "A blinder is a leather eye-covering that is attached to a horse's bridle and prevents the horse from seeing to the side and rear.", + "A blinder is a type of horse blinker consisting of a leather eye cup with a piece of leather attached to the bottom and fastened under the horse's chin.", + "A blinder is a type of horse tack that is used to cover a horse's eyes so that it can only see what is in front of it.", + "A blinder is a piece of horse tack that prevents the horse from seeing to the rear or the side.", + "A blinder is a piece of leather or cloth that is placed over a horse's eyes to keep it from seeing to the side or rear." + ], + "wok": [ + "A wok is a large, round-bottomed cooking vessel typically used in China.", + "A wok looks like a large, deep frying pan, with a slightly curved sides and a long handle.", + "A wok is a concave-shaped frying pan that is used to cook food in a small amount of oil.", + "A wok is a bowl-shaped cooking pan with a long handle.", + "A wok is a shall, round-bottomed pan typically used in Chinese cooking.", + "A wok is a large, deep, rounded cooking pan with a long handle, used for stir-frying over high heat.", + "A wok is a shallow, rounded pan with a long handle, used for stir-frying over high heat.", + "A wok is a large, round-bottomed pan used for stir-frying, steaming, pan frying, deep frying, and braising.", + "A wok looks like a large, deep skillet with sloping sides.", + "A wok is a rounded bowl-shaped cooking vessel with sloping sides." + ], + "wolf": [ + "A wolf is a large, wild canine.", + "A wolf has a long snout, pointy ears, and a bushy tail.", + "A wolf is a large, wild dog that is gray, brown, or black with pointy ears and a bushy tail.", + "A wolf is a medium-sized canine that is typically gray, black, or white in color.", + "A wolf is a wild canine that is typically gray with a light underbelly.", + "A wolf has a long snout, pointy ears, and a bushy tail.", + "A wolf is a large canine with a thick coat of fur that can be gray, white, brown, or black.", + "A wolf typically has a long nose, sharp teeth, and bushy tail.", + "A typical wolf has a long snout, tall pointed ears, a long tail, and long legs.", + "A wolf typically has grey and brown fur, with a bushy tail and pointed ears." + ], + "wooden spoon": [ + "A wooden spoon is a long, thin piece of wood with a round, flat end.", + "A wooden spoon is a spoon that is made out of wood.", + "A wooden spoon is a handheld utensil that is made of wood.", + "A wooden spoon looks like a spoon that is made of wood.", + "A wooden spoon is typically wooden, has a long handle, and a round or oval shaped bowl.", + "A wooden spoon is a spoon made from wood.", + "A wooden spoon is a spoon that is made out of wood.", + "A wooden spoon is a spoon made out of wood.", + "A wooden spoon looks like a spoon made out of wood.", + "A wooden spoon is a spoon that is made out of wood." + ], + "wreath": [ + "A wreath is a circular garland that is typically made out of evergreen branches and leaves.", + "A wreath is a circular garland that is traditionally made from evergreen branches and leaves.", + "A wreath is a circular garland that is usually made from evergreen plants and flowers.", + "A wreath is a type of decoration typically made from a circle of evergreen branches and leaves, and often decorated with red berries or bows.", + "A wreath typically consists of a circle of foliage, flowers, or other material, often interwoven with a ribbon.", + "A wreath is a circular decoration made from a variety of materials, such as flowers, leaves, twigs, and ribbon.", + "A traditional wreath is a circular garland of evergreen branches, often with cones or berries added for decoration.", + "A wreath is an arrangement of flowers, leaves, fruits, twigs, or other materials, usually shaped like a ring, that is used as a decoration or as a symbol of something.", + "A wreath is a circular garland made of leaves, flowers, twigs, or other materials.", + "A wreath is a circular garland that is traditionally made from evergreen foliage, but can also be made from other materials." + ], + "wrench": [ + "A wrench typically has a long handle with a relatively short, thick head.", + "A wrench is a tool with a lever attached to a U-shaped part that can turn nuts and bolts.", + "A wrench is a hand tool that is used to turn objects, such as nuts and bolts.", + "A wrench is a hand tool that is used to turn bolts and nuts.", + "A wrench has a long, skinny handle with a metal head that has a U-shape on one end and a rectangle on the other.", + "It is a L-shaped tool with a long handle and a head that is adjustable to fit different sizes of nuts and bolts.", + "A wrench is a hand tool used to turn bolts or nuts.", + "A wrench is a hand tool with a handle and a head that is either curved or L-shaped.", + "A wrench is a hand tool that is used to turn bolts and nuts.", + "A wrench typically has a long handle and a metal head with a U-shaped opening." + ], + "wristband": [ + "A wristband is a small strip of fabric or plastic that is worn around the wrist.", + "A wristband typically looks like a band of fabric or silicone that can be worn around the wrist.", + "A wristband is typically made of silicone and is worn around the wrist.", + "A wristband is a strip of cloth, rubber, or other material that is tied around the wrist.", + "A wristband is a strip of cloth or other material that is worn around the wrist.", + "A wristband is a strip of material that is worn around the wrist.", + "A wristband is a piece of fabric or other material that is worn around the wrist.", + "A wristband is a band of material, typically elastic, that is worn around the wrist.", + "A wristband is a Circle-shaped piece of fabric worn around the wrist.", + "A wristband is a small band of material, typically made of silicone, cloth, or vinyl, that is worn around the wrist." + ], + "wristlet": [ + "A wristlet typically consists of a small wallet or purse attached to a bracelet or strap.", + "A wristlet is a small handbag that typically has a strap that loops around the wrist.", + "A wristlet is a small handbag, typically measuring around 7 inches by 4 inches, that has a strap or chain to wrap around the wrist.", + "A wristlet is a small wallet that is typically attached to a wrist strap.", + "A wristlet is a small pouch with a wrist strap that is worn around the wrist.", + "A wristlet typically consists of a small handbag with a wrist strap attached.", + "Wristlets are small Purses that are typically about the size of your hand.", + "A wristlet is a small purse that is designed to be worn around the wrist.", + "A wristlet is a small bag that is typically messenger bag-style with a long strap designed to be worn around the wrist.", + "A wristlet is a small purse that can be worn around the wrist." + ], + "yacht": [ + "A yacht is a luxury boat that is usually large and expensive.", + "There is no one answer to this question as yachts come in many different sizes and styles.", + "A yacht is a sail or power vessel used for pleasure cruising or racing.", + "A yacht is a large, luxurious boat, often used for recreation or parties.", + "A yacht is a luxurious boat that is used for recreation.", + "A yacht is a luxury sail or motor boat, typically used for recreation or pleasure.", + ".", + "A yacht is a long, narrow boat with tall sides.", + "Yachts are large boats that are used as pleasure craft.", + "Some yachts look like large, luxurious boats while others are smaller and more sleek." + ], + "yogurt": [ + "A yogurt is a smooth, thick, and creamy food that is made from milk and fermented with live bacteria.", + "Yogurt is a thick, creamy food made from milk that has been fermented with bacteria.", + "Yogurt is a type of dairy product that is made from milk that has been fermented by yogurt cultures.", + "Yogurt is a creamy, white food made from milk that has been fermented with bacteria.", + "A yogurt is a type of food that is made from milk that has been fermented by yogurt cultures.", + "Yogurt is a white, slightly thickened liquid, made by fermentation of milk.", + "A yogurt is a thick, creamy, and somewhat tangy food that is made by fermentation of milk.", + "Yogurt typically has a smooth, thick, and slightly tangy texture and can range in color from white to yellow to pink to purple.", + "A yogurt is a dairy product made by fermentation of milk with a yogurt culture.", + "A yogurt is a type of dairy product that is made from milk that has been fermented by yogurt cultures." + ], + "yoke (animal equipment)": [ + "A yoke is a piece of animal equipment that is placed around the necks of oxen or cows in order to harness their power.", + "A yoke is a piece of equipment that is placed over the neck of an animal, usually a ox or horse, in order to allow it to be harnessed to a plough or cart.", + "A yoke is a piece of equipment that is placed around the necks of two animals, such as oxen, to allow them to work together as a team.", + "A yoke is a device that joins two animals together, usually oxen, so that they can work together as a team.", + "A yoke is a wooden beam of harness that is placed across the shoulders of an animal, such as an ox, to enable it to draw a vehicle such as a cart.", + "A yoke is a piece of equipment that is placed around the necks of oxen or other animals so that they can be hitched to a cart or plough.", + "A yoke is a piece of equipment that is placed around the necks of a pair of animals, such as oxen, to harness them together.", + "A yoke is a piece of equipment that is placed around the necks of a pair of oxen or other animals so that they can be pulled together as a team.", + "A yoke is a piece of equipment that is placed around the necks of two animals, such as oxen, and fastened together with a bar or chain.", + "A yoke is a piece of equipment that is used to attach two animals together so that they can work together." + ], + "zebra": [ + "A zebra is a mammal of the family Equidae.", + "A zebra is a black and white striped horse.", + "A zebra is a mammal of the family Equidae.", + "A zebra is a mammal of the family Equidae.", + "A zebra is a black and white striped horse.", + "A zebra is a mammal with black and white stripes.", + "A zebra looks like a horse with black and white stripes.", + "A zebra is a mammal of the family Equidae.", + "A zebra is a mammal of the family Equidae.", + "A zebra is a black and white mammal with stripes." + ], + "zucchini": [ + "A zucchini is a dark green squash that is shaped like a cylinder.", + "A zucchini is a green, pear-shaped vegetable.", + "A zucchini is a cucurbit, meaning it is related to other squash and pumpkin.", + "A zucchini is a green squash that is long and thin, typically with smooth skin.", + "A zucchini is a long, cylindrical green vegetable with a smooth exterior and a soft, white flesh.", + "A zucchini is a long, cylindrical green squash.", + "A zucchini is a type of squash that typically has a dark green skin and a white or yellow flesh.", + "A zucchini is a green, cucumber-shaped vegetable.", + "A zucchini is a dark green squash that is long and thin, with smooth skin.", + "\nZucchinis are green, cylindrical vegetables with smooth skin." + ] +} diff --git a/approach/ovod/mm-ovod/datasets/metadata/lvis_v1_train_cat_info.json b/approach/ovod/mm-ovod/datasets/metadata/lvis_v1_train_cat_info.json new file mode 100644 index 0000000000000000000000000000000000000000..95fef0923366adbf4378da64113f6bc63a1265a6 --- /dev/null +++ b/approach/ovod/mm-ovod/datasets/metadata/lvis_v1_train_cat_info.json @@ -0,0 +1 @@ +[{"name": "aerosol_can", "instance_count": 109, "def": "a dispenser that holds a substance under pressure", "synonyms": ["aerosol_can", "spray_can"], "image_count": 64, "id": 1, "frequency": "c", "synset": "aerosol.n.02"}, {"name": "air_conditioner", "instance_count": 1081, "def": "a machine that keeps air cool and dry", "synonyms": ["air_conditioner"], "image_count": 364, "id": 2, "frequency": "f", "synset": "air_conditioner.n.01"}, {"name": "airplane", "instance_count": 3720, "def": "an aircraft that has a fixed wing and is powered by propellers or jets", "synonyms": ["airplane", "aeroplane"], "image_count": 1911, "id": 3, "frequency": "f", "synset": "airplane.n.01"}, {"name": "alarm_clock", "instance_count": 158, "def": "a clock that wakes a sleeper at some preset time", "synonyms": ["alarm_clock"], "image_count": 149, "id": 4, "frequency": "f", "synset": "alarm_clock.n.01"}, {"name": "alcohol", "instance_count": 207, "def": "a liquor or brew containing alcohol as the active agent", "synonyms": ["alcohol", "alcoholic_beverage"], "image_count": 29, "id": 5, "frequency": "c", "synset": "alcohol.n.01"}, {"name": "alligator", "instance_count": 39, "def": "amphibious reptiles related to crocodiles but with shorter broader snouts", "synonyms": ["alligator", "gator"], "image_count": 26, "id": 6, "frequency": "c", "synset": "alligator.n.02"}, {"name": "almond", "instance_count": 1700, "def": "oval-shaped edible seed of the almond tree", "synonyms": ["almond"], "image_count": 59, "id": 7, "frequency": "c", "synset": "almond.n.02"}, {"name": "ambulance", "instance_count": 25, "def": "a vehicle that takes people to and from hospitals", "synonyms": ["ambulance"], "image_count": 22, "id": 8, "frequency": "c", "synset": "ambulance.n.01"}, {"name": "amplifier", "instance_count": 16, "def": "electronic equipment that increases strength of signals", "synonyms": ["amplifier"], "image_count": 12, "id": 9, "frequency": "c", "synset": "amplifier.n.01"}, {"name": "anklet", "instance_count": 39, "def": "an ornament worn around the ankle", "synonyms": ["anklet", "ankle_bracelet"], "image_count": 28, "id": 10, "frequency": "c", "synset": "anklet.n.03"}, {"name": "antenna", "instance_count": 1018, "def": "an electrical device that sends or receives radio or television signals", "synonyms": ["antenna", "aerial", "transmitting_aerial"], "image_count": 505, "id": 11, "frequency": "f", "synset": "antenna.n.01"}, {"name": "apple", "instance_count": 17451, "def": "fruit with red or yellow or green skin and sweet to tart crisp whitish flesh", "synonyms": ["apple"], "image_count": 1207, "id": 12, "frequency": "f", "synset": "apple.n.01"}, {"name": "applesauce", "instance_count": 7, "def": "puree of stewed apples usually sweetened and spiced", "synonyms": ["applesauce"], "image_count": 4, "id": 13, "frequency": "r", "synset": "applesauce.n.01"}, {"name": "apricot", "instance_count": 62, "def": "downy yellow to rosy-colored fruit resembling a small peach", "synonyms": ["apricot"], "image_count": 10, "id": 14, "frequency": "r", "synset": "apricot.n.02"}, {"name": "apron", "instance_count": 881, "def": "a garment of cloth that is tied about the waist and worn to protect clothing", "synonyms": ["apron"], "image_count": 500, "id": 15, "frequency": "f", "synset": "apron.n.01"}, {"name": "aquarium", "instance_count": 36, "def": "a tank/pool/bowl filled with water for keeping live fish and underwater animals", "synonyms": ["aquarium", "fish_tank"], "image_count": 33, "id": 16, "frequency": "c", "synset": "aquarium.n.01"}, {"name": "arctic_(type_of_shoe)", "instance_count": 8, "def": "a waterproof overshoe that protects shoes from water or snow", "synonyms": ["arctic_(type_of_shoe)", "galosh", "golosh", "rubber_(type_of_shoe)", "gumshoe"], "image_count": 3, "id": 17, "frequency": "r", "synset": "arctic.n.02"}, {"name": "armband", "instance_count": 85, "def": "a band worn around the upper arm", "synonyms": ["armband"], "image_count": 44, "id": 18, "frequency": "c", "synset": "armband.n.02"}, {"name": "armchair", "instance_count": 1112, "def": "chair with a support on each side for arms", "synonyms": ["armchair"], "image_count": 561, "id": 19, "frequency": "f", "synset": "armchair.n.01"}, {"name": "armoire", "instance_count": 11, "def": "a large wardrobe or cabinet", "synonyms": ["armoire"], "image_count": 8, "id": 20, "frequency": "r", "synset": "armoire.n.01"}, {"name": "armor", "instance_count": 23, "def": "protective covering made of metal and used in combat", "synonyms": ["armor", "armour"], "image_count": 9, "id": 21, "frequency": "r", "synset": "armor.n.01"}, {"name": "artichoke", "instance_count": 293, "def": "a thistlelike flower head with edible fleshy leaves and heart", "synonyms": ["artichoke"], "image_count": 33, "id": 22, "frequency": "c", "synset": "artichoke.n.02"}, {"name": "trash_can", "instance_count": 2722, "def": "a bin that holds rubbish until it is collected", "synonyms": ["trash_can", "garbage_can", "wastebin", "dustbin", "trash_barrel", "trash_bin"], "image_count": 1883, "id": 23, "frequency": "f", "synset": "ashcan.n.01"}, {"name": "ashtray", "instance_count": 136, "def": "a receptacle for the ash from smokers' cigars or cigarettes", "synonyms": ["ashtray"], "image_count": 98, "id": 24, "frequency": "c", "synset": "ashtray.n.01"}, {"name": "asparagus", "instance_count": 969, "def": "edible young shoots of the asparagus plant", "synonyms": ["asparagus"], "image_count": 70, "id": 25, "frequency": "c", "synset": "asparagus.n.02"}, {"name": "atomizer", "instance_count": 67, "def": "a dispenser that turns a liquid (such as perfume) into a fine mist", "synonyms": ["atomizer", "atomiser", "spray", "sprayer", "nebulizer", "nebuliser"], "image_count": 46, "id": 26, "frequency": "c", "synset": "atomizer.n.01"}, {"name": "avocado", "instance_count": 1048, "def": "a pear-shaped fruit with green or blackish skin and rich yellowish pulp enclosing a single large seed", "synonyms": ["avocado"], "image_count": 117, "id": 27, "frequency": "f", "synset": "avocado.n.01"}, {"name": "award", "instance_count": 163, "def": "a tangible symbol signifying approval or distinction", "synonyms": ["award", "accolade"], "image_count": 41, "id": 28, "frequency": "c", "synset": "award.n.02"}, {"name": "awning", "instance_count": 4270, "def": "a canopy made of canvas to shelter people or things from rain or sun", "synonyms": ["awning"], "image_count": 1395, "id": 29, "frequency": "f", "synset": "awning.n.01"}, {"name": "ax", "instance_count": 8, "def": "an edge tool with a heavy bladed head mounted across a handle", "synonyms": ["ax", "axe"], "image_count": 7, "id": 30, "frequency": "r", "synset": "ax.n.01"}, {"name": "baboon", "instance_count": 3, "def": "large terrestrial monkeys having doglike muzzles", "synonyms": ["baboon"], "image_count": 1, "id": 31, "frequency": "r", "synset": "baboon.n.01"}, {"name": "baby_buggy", "instance_count": 447, "def": "a small vehicle with four wheels in which a baby or child is pushed around", "synonyms": ["baby_buggy", "baby_carriage", "perambulator", "pram", "stroller"], "image_count": 314, "id": 32, "frequency": "f", "synset": "baby_buggy.n.01"}, {"name": "basketball_backboard", "instance_count": 42, "def": "a raised vertical board with basket attached; used to play basketball", "synonyms": ["basketball_backboard"], "image_count": 31, "id": 33, "frequency": "c", "synset": "backboard.n.01"}, {"name": "backpack", "instance_count": 3907, "def": "a bag carried by a strap on your back or shoulder", "synonyms": ["backpack", "knapsack", "packsack", "rucksack", "haversack"], "image_count": 1905, "id": 34, "frequency": "f", "synset": "backpack.n.01"}, {"name": "handbag", "instance_count": 3947, "def": "a container used for carrying money and small personal items or accessories", "synonyms": ["handbag", "purse", "pocketbook"], "image_count": 1859, "id": 35, "frequency": "f", "synset": "bag.n.04"}, {"name": "suitcase", "instance_count": 8537, "def": "cases used to carry belongings when traveling", "synonyms": ["suitcase", "baggage", "luggage"], "image_count": 1623, "id": 36, "frequency": "f", "synset": "bag.n.06"}, {"name": "bagel", "instance_count": 372, "def": "glazed yeast-raised doughnut-shaped roll with hard crust", "synonyms": ["bagel", "beigel"], "image_count": 47, "id": 37, "frequency": "c", "synset": "bagel.n.01"}, {"name": "bagpipe", "instance_count": 6, "def": "a tubular wind instrument; the player blows air into a bag and squeezes it out", "synonyms": ["bagpipe"], "image_count": 3, "id": 38, "frequency": "r", "synset": "bagpipe.n.01"}, {"name": "baguet", "instance_count": 9, "def": "narrow French stick loaf", "synonyms": ["baguet", "baguette"], "image_count": 3, "id": 39, "frequency": "r", "synset": "baguet.n.01"}, {"name": "bait", "instance_count": 1, "def": "something used to lure fish or other animals into danger so they can be trapped or killed", "synonyms": ["bait", "lure"], "image_count": 1, "id": 40, "frequency": "r", "synset": "bait.n.02"}, {"name": "ball", "instance_count": 755, "def": "a spherical object used as a plaything", "synonyms": ["ball"], "image_count": 305, "id": 41, "frequency": "f", "synset": "ball.n.06"}, {"name": "ballet_skirt", "instance_count": 12, "def": "very short skirt worn by ballerinas", "synonyms": ["ballet_skirt", "tutu"], "image_count": 6, "id": 42, "frequency": "r", "synset": "ballet_skirt.n.01"}, {"name": "balloon", "instance_count": 1556, "def": "large tough nonrigid bag filled with gas or heated air", "synonyms": ["balloon"], "image_count": 210, "id": 43, "frequency": "f", "synset": "balloon.n.01"}, {"name": "bamboo", "instance_count": 243, "def": "woody tropical grass having hollow woody stems", "synonyms": ["bamboo"], "image_count": 36, "id": 44, "frequency": "c", "synset": "bamboo.n.02"}, {"name": "banana", "instance_count": 50552, "def": "elongated crescent-shaped yellow fruit with soft sweet flesh", "synonyms": ["banana"], "image_count": 1787, "id": 45, "frequency": "f", "synset": "banana.n.02"}, {"name": "Band_Aid", "instance_count": 19, "def": "trade name for an adhesive bandage to cover small cuts or blisters", "synonyms": ["Band_Aid"], "image_count": 17, "id": 46, "frequency": "c", "synset": "band_aid.n.01"}, {"name": "bandage", "instance_count": 92, "def": "a piece of soft material that covers and protects an injured part of the body", "synonyms": ["bandage"], "image_count": 51, "id": 47, "frequency": "c", "synset": "bandage.n.01"}, {"name": "bandanna", "instance_count": 219, "def": "large and brightly colored handkerchief; often used as a neckerchief", "synonyms": ["bandanna", "bandana"], "image_count": 138, "id": 48, "frequency": "f", "synset": "bandanna.n.01"}, {"name": "banjo", "instance_count": 3, "def": "a stringed instrument of the guitar family with a long neck and circular body", "synonyms": ["banjo"], "image_count": 3, "id": 49, "frequency": "r", "synset": "banjo.n.01"}, {"name": "banner", "instance_count": 5907, "def": "long strip of cloth or paper used for decoration or advertising", "synonyms": ["banner", "streamer"], "image_count": 1470, "id": 50, "frequency": "f", "synset": "banner.n.01"}, {"name": "barbell", "instance_count": 4, "def": "a bar to which heavy discs are attached at each end; used in weightlifting", "synonyms": ["barbell"], "image_count": 3, "id": 51, "frequency": "r", "synset": "barbell.n.01"}, {"name": "barge", "instance_count": 3, "def": "a flatbottom boat for carrying heavy loads (especially on canals)", "synonyms": ["barge"], "image_count": 2, "id": 52, "frequency": "r", "synset": "barge.n.01"}, {"name": "barrel", "instance_count": 707, "def": "a cylindrical container that holds liquids", "synonyms": ["barrel", "cask"], "image_count": 186, "id": 53, "frequency": "f", "synset": "barrel.n.02"}, {"name": "barrette", "instance_count": 119, "def": "a pin for holding women's hair in place", "synonyms": ["barrette"], "image_count": 76, "id": 54, "frequency": "c", "synset": "barrette.n.01"}, {"name": "barrow", "instance_count": 30, "def": "a cart for carrying small loads; has handles and one or more wheels", "synonyms": ["barrow", "garden_cart", "lawn_cart", "wheelbarrow"], "image_count": 26, "id": 55, "frequency": "c", "synset": "barrow.n.03"}, {"name": "baseball_base", "instance_count": 404, "def": "a place that the runner must touch before scoring", "synonyms": ["baseball_base"], "image_count": 303, "id": 56, "frequency": "f", "synset": "base.n.03"}, {"name": "baseball", "instance_count": 1013, "def": "a ball used in playing baseball", "synonyms": ["baseball"], "image_count": 738, "id": 57, "frequency": "f", "synset": "baseball.n.02"}, {"name": "baseball_bat", "instance_count": 2698, "def": "an implement used in baseball by the batter", "synonyms": ["baseball_bat"], "image_count": 1799, "id": 58, "frequency": "f", "synset": "baseball_bat.n.01"}, {"name": "baseball_cap", "instance_count": 9028, "def": "a cap with a bill", "synonyms": ["baseball_cap", "jockey_cap", "golf_cap"], "image_count": 1934, "id": 59, "frequency": "f", "synset": "baseball_cap.n.01"}, {"name": "baseball_glove", "instance_count": 2536, "def": "the handwear used by fielders in playing baseball", "synonyms": ["baseball_glove", "baseball_mitt"], "image_count": 1609, "id": 60, "frequency": "f", "synset": "baseball_glove.n.01"}, {"name": "basket", "instance_count": 3984, "def": "a container that is usually woven and has handles", "synonyms": ["basket", "handbasket"], "image_count": 1622, "id": 61, "frequency": "f", "synset": "basket.n.01"}, {"name": "basketball", "instance_count": 56, "def": "an inflated ball used in playing basketball", "synonyms": ["basketball"], "image_count": 41, "id": 62, "frequency": "c", "synset": "basketball.n.02"}, {"name": "bass_horn", "instance_count": 6, "def": "the lowest brass wind instrument", "synonyms": ["bass_horn", "sousaphone", "tuba"], "image_count": 4, "id": 63, "frequency": "r", "synset": "bass_horn.n.01"}, {"name": "bat_(animal)", "instance_count": 47, "def": "nocturnal mouselike mammal with forelimbs modified to form membranous wings", "synonyms": ["bat_(animal)"], "image_count": 11, "id": 64, "frequency": "c", "synset": "bat.n.01"}, {"name": "bath_mat", "instance_count": 336, "def": "a heavy towel or mat to stand on while drying yourself after a bath", "synonyms": ["bath_mat"], "image_count": 270, "id": 65, "frequency": "f", "synset": "bath_mat.n.01"}, {"name": "bath_towel", "instance_count": 1210, "def": "a large towel; to dry yourself after a bath", "synonyms": ["bath_towel"], "image_count": 349, "id": 66, "frequency": "f", "synset": "bath_towel.n.01"}, {"name": "bathrobe", "instance_count": 53, "def": "a loose-fitting robe of towelling; worn after a bath or swim", "synonyms": ["bathrobe"], "image_count": 42, "id": 67, "frequency": "c", "synset": "bathrobe.n.01"}, {"name": "bathtub", "instance_count": 868, "def": "a large open container that you fill with water and use to wash the body", "synonyms": ["bathtub", "bathing_tub"], "image_count": 823, "id": 68, "frequency": "f", "synset": "bathtub.n.01"}, {"name": "batter_(food)", "instance_count": 26, "def": "a liquid or semiliquid mixture, as of flour, eggs, and milk, used in cooking", "synonyms": ["batter_(food)"], "image_count": 6, "id": 69, "frequency": "r", "synset": "batter.n.02"}, {"name": "battery", "instance_count": 155, "def": "a portable device that produces electricity", "synonyms": ["battery"], "image_count": 48, "id": 70, "frequency": "c", "synset": "battery.n.02"}, {"name": "beachball", "instance_count": 3, "def": "large and light ball; for play at the seaside", "synonyms": ["beachball"], "image_count": 3, "id": 71, "frequency": "r", "synset": "beach_ball.n.01"}, {"name": "bead", "instance_count": 1371, "def": "a small ball with a hole through the middle used for ornamentation, jewellery, etc.", "synonyms": ["bead"], "image_count": 42, "id": 72, "frequency": "c", "synset": "bead.n.01"}, {"name": "bean_curd", "instance_count": 231, "def": "cheeselike food made of curdled soybean milk", "synonyms": ["bean_curd", "tofu"], "image_count": 24, "id": 73, "frequency": "c", "synset": "bean_curd.n.01"}, {"name": "beanbag", "instance_count": 20, "def": "a bag filled with dried beans or similar items; used in games or to sit on", "synonyms": ["beanbag"], "image_count": 16, "id": 74, "frequency": "c", "synset": "beanbag.n.01"}, {"name": "beanie", "instance_count": 1907, "def": "a small skullcap; formerly worn by schoolboys and college freshmen", "synonyms": ["beanie", "beany"], "image_count": 605, "id": 75, "frequency": "f", "synset": "beanie.n.01"}, {"name": "bear", "instance_count": 1069, "def": "large carnivorous or omnivorous mammals with shaggy coats and claws", "synonyms": ["bear"], "image_count": 646, "id": 76, "frequency": "f", "synset": "bear.n.01"}, {"name": "bed", "instance_count": 2137, "def": "a piece of furniture that provides a place to sleep", "synonyms": ["bed"], "image_count": 1765, "id": 77, "frequency": "f", "synset": "bed.n.01"}, {"name": "bedpan", "instance_count": 2, "def": "a shallow vessel used by a bedridden patient for defecation and urination", "synonyms": ["bedpan"], "image_count": 2, "id": 78, "frequency": "r", "synset": "bedpan.n.01"}, {"name": "bedspread", "instance_count": 188, "def": "decorative cover for a bed", "synonyms": ["bedspread", "bedcover", "bed_covering", "counterpane", "spread"], "image_count": 125, "id": 79, "frequency": "f", "synset": "bedspread.n.01"}, {"name": "cow", "instance_count": 8085, "def": "cattle/cow", "synonyms": ["cow"], "image_count": 1420, "id": 80, "frequency": "f", "synset": "beef.n.01"}, {"name": "beef_(food)", "instance_count": 1242, "def": "meat from an adult domestic bovine", "synonyms": ["beef_(food)", "boeuf_(food)"], "image_count": 140, "id": 81, "frequency": "f", "synset": "beef.n.02"}, {"name": "beeper", "instance_count": 4, "def": "an device that beeps when the person carrying it is being paged", "synonyms": ["beeper", "pager"], "image_count": 4, "id": 82, "frequency": "r", "synset": "beeper.n.01"}, {"name": "beer_bottle", "instance_count": 1227, "def": "a bottle that holds beer", "synonyms": ["beer_bottle"], "image_count": 322, "id": 83, "frequency": "f", "synset": "beer_bottle.n.01"}, {"name": "beer_can", "instance_count": 203, "def": "a can that holds beer", "synonyms": ["beer_can"], "image_count": 60, "id": 84, "frequency": "c", "synset": "beer_can.n.01"}, {"name": "beetle", "instance_count": 9, "def": "insect with hard wing covers", "synonyms": ["beetle"], "image_count": 2, "id": 85, "frequency": "r", "synset": "beetle.n.01"}, {"name": "bell", "instance_count": 590, "def": "a hollow device made of metal that makes a ringing sound when struck", "synonyms": ["bell"], "image_count": 231, "id": 86, "frequency": "f", "synset": "bell.n.01"}, {"name": "bell_pepper", "instance_count": 4369, "def": "large bell-shaped sweet pepper in green or red or yellow or orange or black varieties", "synonyms": ["bell_pepper", "capsicum"], "image_count": 333, "id": 87, "frequency": "f", "synset": "bell_pepper.n.02"}, {"name": "belt", "instance_count": 3683, "def": "a band to tie or buckle around the body (usually at the waist)", "synonyms": ["belt"], "image_count": 1941, "id": 88, "frequency": "f", "synset": "belt.n.02"}, {"name": "belt_buckle", "instance_count": 589, "def": "the buckle used to fasten a belt", "synonyms": ["belt_buckle"], "image_count": 367, "id": 89, "frequency": "f", "synset": "belt_buckle.n.01"}, {"name": "bench", "instance_count": 4374, "def": "a long seat for more than one person", "synonyms": ["bench"], "image_count": 1922, "id": 90, "frequency": "f", "synset": "bench.n.01"}, {"name": "beret", "instance_count": 57, "def": "a cap with no brim or bill; made of soft cloth", "synonyms": ["beret"], "image_count": 18, "id": 91, "frequency": "c", "synset": "beret.n.01"}, {"name": "bib", "instance_count": 96, "def": "a napkin tied under the chin of a child while eating", "synonyms": ["bib"], "image_count": 81, "id": 92, "frequency": "c", "synset": "bib.n.02"}, {"name": "Bible", "instance_count": 2, "def": "the sacred writings of the Christian religions", "synonyms": ["Bible"], "image_count": 1, "id": 93, "frequency": "r", "synset": "bible.n.01"}, {"name": "bicycle", "instance_count": 4566, "def": "a wheeled vehicle that has two wheels and is moved by foot pedals", "synonyms": ["bicycle", "bike_(bicycle)"], "image_count": 1852, "id": 94, "frequency": "f", "synset": "bicycle.n.01"}, {"name": "visor", "instance_count": 777, "def": "a brim that projects to the front to shade the eyes", "synonyms": ["visor", "vizor"], "image_count": 430, "id": 95, "frequency": "f", "synset": "bill.n.09"}, {"name": "billboard", "instance_count": 1025, "def": "large outdoor signboard", "synonyms": ["billboard"], "image_count": 247, "id": 96, "frequency": "f", "synset": "billboard.n.01"}, {"name": "binder", "instance_count": 311, "def": "holds loose papers or magazines", "synonyms": ["binder", "ring-binder"], "image_count": 94, "id": 97, "frequency": "c", "synset": "binder.n.03"}, {"name": "binoculars", "instance_count": 22, "def": "an optical instrument designed for simultaneous use by both eyes", "synonyms": ["binoculars", "field_glasses", "opera_glasses"], "image_count": 21, "id": 98, "frequency": "c", "synset": "binoculars.n.01"}, {"name": "bird", "instance_count": 11557, "def": "animal characterized by feathers and wings", "synonyms": ["bird"], "image_count": 1821, "id": 99, "frequency": "f", "synset": "bird.n.01"}, {"name": "birdfeeder", "instance_count": 16, "def": "an outdoor device that supplies food for wild birds", "synonyms": ["birdfeeder"], "image_count": 16, "id": 100, "frequency": "c", "synset": "bird_feeder.n.01"}, {"name": "birdbath", "instance_count": 12, "def": "an ornamental basin (usually in a garden) for birds to bathe in", "synonyms": ["birdbath"], "image_count": 12, "id": 101, "frequency": "c", "synset": "birdbath.n.01"}, {"name": "birdcage", "instance_count": 180, "def": "a cage in which a bird can be kept", "synonyms": ["birdcage"], "image_count": 25, "id": 102, "frequency": "c", "synset": "birdcage.n.01"}, {"name": "birdhouse", "instance_count": 60, "def": "a shelter for birds", "synonyms": ["birdhouse"], "image_count": 41, "id": 103, "frequency": "c", "synset": "birdhouse.n.01"}, {"name": "birthday_cake", "instance_count": 311, "def": "decorated cake served at a birthday party", "synonyms": ["birthday_cake"], "image_count": 244, "id": 104, "frequency": "f", "synset": "birthday_cake.n.01"}, {"name": "birthday_card", "instance_count": 23, "def": "a card expressing a birthday greeting", "synonyms": ["birthday_card"], "image_count": 7, "id": 105, "frequency": "r", "synset": "birthday_card.n.01"}, {"name": "pirate_flag", "instance_count": 1, "def": "a flag usually bearing a white skull and crossbones on a black background", "synonyms": ["pirate_flag"], "image_count": 1, "id": 106, "frequency": "r", "synset": "black_flag.n.01"}, {"name": "black_sheep", "instance_count": 214, "def": "sheep with a black coat", "synonyms": ["black_sheep"], "image_count": 40, "id": 107, "frequency": "c", "synset": "black_sheep.n.02"}, {"name": "blackberry", "instance_count": 406, "def": "large sweet black or very dark purple edible aggregate fruit", "synonyms": ["blackberry"], "image_count": 40, "id": 108, "frequency": "c", "synset": "blackberry.n.01"}, {"name": "blackboard", "instance_count": 154, "def": "sheet of slate; for writing with chalk", "synonyms": ["blackboard", "chalkboard"], "image_count": 104, "id": 109, "frequency": "f", "synset": "blackboard.n.01"}, {"name": "blanket", "instance_count": 3075, "def": "bedding that keeps a person warm in bed", "synonyms": ["blanket"], "image_count": 1671, "id": 110, "frequency": "f", "synset": "blanket.n.01"}, {"name": "blazer", "instance_count": 124, "def": "lightweight jacket; often striped in the colors of a club or school", "synonyms": ["blazer", "sport_jacket", "sport_coat", "sports_jacket", "sports_coat"], "image_count": 49, "id": 111, "frequency": "c", "synset": "blazer.n.01"}, {"name": "blender", "instance_count": 316, "def": "an electrically powered mixer that mix or chop or liquefy foods", "synonyms": ["blender", "liquidizer", "liquidiser"], "image_count": 243, "id": 112, "frequency": "f", "synset": "blender.n.01"}, {"name": "blimp", "instance_count": 3, "def": "a small nonrigid airship used for observation or as a barrage balloon", "synonyms": ["blimp"], "image_count": 2, "id": 113, "frequency": "r", "synset": "blimp.n.02"}, {"name": "blinker", "instance_count": 1269, "def": "a light that flashes on and off; used as a signal or to send messages", "synonyms": ["blinker", "flasher"], "image_count": 242, "id": 114, "frequency": "f", "synset": "blinker.n.01"}, {"name": "blouse", "instance_count": 623, "def": "a top worn by women", "synonyms": ["blouse"], "image_count": 271, "id": 115, "frequency": "f", "synset": "blouse.n.01"}, {"name": "blueberry", "instance_count": 2114, "def": "sweet edible dark-blue berries of blueberry plants", "synonyms": ["blueberry"], "image_count": 104, "id": 116, "frequency": "f", "synset": "blueberry.n.02"}, {"name": "gameboard", "instance_count": 17, "def": "a flat portable surface (usually rectangular) designed for board games", "synonyms": ["gameboard"], "image_count": 8, "id": 117, "frequency": "r", "synset": "board.n.09"}, {"name": "boat", "instance_count": 9981, "def": "a vessel for travel on water", "synonyms": ["boat", "ship_(boat)"], "image_count": 1758, "id": 118, "frequency": "f", "synset": "boat.n.01"}, {"name": "bob", "instance_count": 2, "def": "a small float usually made of cork; attached to a fishing line", "synonyms": ["bob", "bobber", "bobfloat"], "image_count": 1, "id": 119, "frequency": "r", "synset": "bob.n.05"}, {"name": "bobbin", "instance_count": 190, "def": "a thing around which thread/tape/film or other flexible materials can be wound", "synonyms": ["bobbin", "spool", "reel"], "image_count": 48, "id": 120, "frequency": "c", "synset": "bobbin.n.01"}, {"name": "bobby_pin", "instance_count": 43, "def": "a flat wire hairpin used to hold bobbed hair in place", "synonyms": ["bobby_pin", "hairgrip"], "image_count": 14, "id": 121, "frequency": "c", "synset": "bobby_pin.n.01"}, {"name": "boiled_egg", "instance_count": 125, "def": "egg cooked briefly in the shell in gently boiling water", "synonyms": ["boiled_egg", "coddled_egg"], "image_count": 40, "id": 122, "frequency": "c", "synset": "boiled_egg.n.01"}, {"name": "bolo_tie", "instance_count": 1, "def": "a cord fastened around the neck with an ornamental clasp and worn as a necktie", "synonyms": ["bolo_tie", "bolo", "bola_tie", "bola"], "image_count": 1, "id": 123, "frequency": "r", "synset": "bolo_tie.n.01"}, {"name": "deadbolt", "instance_count": 46, "def": "the part of a lock that is engaged or withdrawn with a key", "synonyms": ["deadbolt"], "image_count": 37, "id": 124, "frequency": "c", "synset": "bolt.n.03"}, {"name": "bolt", "instance_count": 11261, "def": "a screw that screws into a nut to form a fastener", "synonyms": ["bolt"], "image_count": 1510, "id": 125, "frequency": "f", "synset": "bolt.n.06"}, {"name": "bonnet", "instance_count": 10, "def": "a hat tied under the chin", "synonyms": ["bonnet"], "image_count": 6, "id": 126, "frequency": "r", "synset": "bonnet.n.01"}, {"name": "book", "instance_count": 33353, "def": "a written work or composition that has been published", "synonyms": ["book"], "image_count": 1903, "id": 127, "frequency": "f", "synset": "book.n.01"}, {"name": "bookcase", "instance_count": 113, "def": "a piece of furniture with shelves for storing books", "synonyms": ["bookcase"], "image_count": 70, "id": 128, "frequency": "c", "synset": "bookcase.n.01"}, {"name": "booklet", "instance_count": 439, "def": "a small book usually having a paper cover", "synonyms": ["booklet", "brochure", "leaflet", "pamphlet"], "image_count": 86, "id": 129, "frequency": "c", "synset": "booklet.n.01"}, {"name": "bookmark", "instance_count": 15, "def": "a marker (a piece of paper or ribbon) placed between the pages of a book", "synonyms": ["bookmark", "bookmarker"], "image_count": 7, "id": 130, "frequency": "r", "synset": "bookmark.n.01"}, {"name": "boom_microphone", "instance_count": 10, "def": "a pole carrying an overhead microphone projected over a film or tv set", "synonyms": ["boom_microphone", "microphone_boom"], "image_count": 5, "id": 131, "frequency": "r", "synset": "boom.n.04"}, {"name": "boot", "instance_count": 4194, "def": "footwear that covers the whole foot and lower leg", "synonyms": ["boot"], "image_count": 1406, "id": 132, "frequency": "f", "synset": "boot.n.01"}, {"name": "bottle", "instance_count": 7969, "def": "a glass or plastic vessel used for storing drinks or other liquids", "synonyms": ["bottle"], "image_count": 1901, "id": 133, "frequency": "f", "synset": "bottle.n.01"}, {"name": "bottle_opener", "instance_count": 15, "def": "an opener for removing caps or corks from bottles", "synonyms": ["bottle_opener"], "image_count": 15, "id": 134, "frequency": "c", "synset": "bottle_opener.n.01"}, {"name": "bouquet", "instance_count": 53, "def": "an arrangement of flowers that is usually given as a present", "synonyms": ["bouquet"], "image_count": 28, "id": 135, "frequency": "c", "synset": "bouquet.n.01"}, {"name": "bow_(weapon)", "instance_count": 6, "def": "a weapon for shooting arrows", "synonyms": ["bow_(weapon)"], "image_count": 6, "id": 136, "frequency": "r", "synset": "bow.n.04"}, {"name": "bow_(decorative_ribbons)", "instance_count": 1144, "def": "a decorative interlacing of ribbons", "synonyms": ["bow_(decorative_ribbons)"], "image_count": 494, "id": 137, "frequency": "f", "synset": "bow.n.08"}, {"name": "bow-tie", "instance_count": 359, "def": "a man's tie that ties in a bow", "synonyms": ["bow-tie", "bowtie"], "image_count": 234, "id": 138, "frequency": "f", "synset": "bow_tie.n.01"}, {"name": "bowl", "instance_count": 5308, "def": "a dish that is round and open at the top for serving foods", "synonyms": ["bowl"], "image_count": 1922, "id": 139, "frequency": "f", "synset": "bowl.n.03"}, {"name": "pipe_bowl", "instance_count": 1, "def": "a small round container that is open at the top for holding tobacco", "synonyms": ["pipe_bowl"], "image_count": 1, "id": 140, "frequency": "r", "synset": "bowl.n.08"}, {"name": "bowler_hat", "instance_count": 89, "def": "a felt hat that is round and hard with a narrow brim", "synonyms": ["bowler_hat", "bowler", "derby_hat", "derby", "plug_hat"], "image_count": 35, "id": 141, "frequency": "c", "synset": "bowler_hat.n.01"}, {"name": "bowling_ball", "instance_count": 38, "def": "a large ball with finger holes used in the sport of bowling", "synonyms": ["bowling_ball"], "image_count": 5, "id": 142, "frequency": "r", "synset": "bowling_ball.n.01"}, {"name": "box", "instance_count": 7855, "def": "a (usually rectangular) container; may have a lid", "synonyms": ["box"], "image_count": 1828, "id": 143, "frequency": "f", "synset": "box.n.01"}, {"name": "boxing_glove", "instance_count": 22, "def": "large glove coverings the fists of a fighter worn for the sport of boxing", "synonyms": ["boxing_glove"], "image_count": 8, "id": 144, "frequency": "r", "synset": "boxing_glove.n.01"}, {"name": "suspenders", "instance_count": 88, "def": "elastic straps that hold trousers up (usually used in the plural)", "synonyms": ["suspenders"], "image_count": 63, "id": 145, "frequency": "c", "synset": "brace.n.06"}, {"name": "bracelet", "instance_count": 3219, "def": "jewelry worn around the wrist for decoration", "synonyms": ["bracelet", "bangle"], "image_count": 1668, "id": 146, "frequency": "f", "synset": "bracelet.n.02"}, {"name": "brass_plaque", "instance_count": 4, "def": "a memorial made of brass", "synonyms": ["brass_plaque"], "image_count": 4, "id": 147, "frequency": "r", "synset": "brass.n.07"}, {"name": "brassiere", "instance_count": 118, "def": "an undergarment worn by women to support their breasts", "synonyms": ["brassiere", "bra", "bandeau"], "image_count": 95, "id": 148, "frequency": "c", "synset": "brassiere.n.01"}, {"name": "bread-bin", "instance_count": 17, "def": "a container used to keep bread or cake in", "synonyms": ["bread-bin", "breadbox"], "image_count": 17, "id": 149, "frequency": "c", "synset": "bread-bin.n.01"}, {"name": "bread", "instance_count": 6550, "def": "food made from dough of flour or meal and usually raised with yeast or baking powder and then baked", "synonyms": ["bread"], "image_count": 1567, "id": 150, "frequency": "f", "synset": "bread.n.01"}, {"name": "breechcloth", "instance_count": 3, "def": "a garment that provides covering for the loins", "synonyms": ["breechcloth", "breechclout", "loincloth"], "image_count": 2, "id": 151, "frequency": "r", "synset": "breechcloth.n.01"}, {"name": "bridal_gown", "instance_count": 118, "def": "a gown worn by the bride at a wedding", "synonyms": ["bridal_gown", "wedding_gown", "wedding_dress"], "image_count": 103, "id": 152, "frequency": "f", "synset": "bridal_gown.n.01"}, {"name": "briefcase", "instance_count": 84, "def": "a case with a handle; for carrying papers or files or books", "synonyms": ["briefcase"], "image_count": 50, "id": 153, "frequency": "c", "synset": "briefcase.n.01"}, {"name": "broccoli", "instance_count": 12166, "def": "plant with dense clusters of tight green flower buds", "synonyms": ["broccoli"], "image_count": 1309, "id": 154, "frequency": "f", "synset": "broccoli.n.01"}, {"name": "broach", "instance_count": 9, "def": "a decorative pin worn by women", "synonyms": ["broach"], "image_count": 6, "id": 155, "frequency": "r", "synset": "brooch.n.01"}, {"name": "broom", "instance_count": 144, "def": "bundle of straws or twigs attached to a long handle; used for cleaning", "synonyms": ["broom"], "image_count": 92, "id": 156, "frequency": "c", "synset": "broom.n.01"}, {"name": "brownie", "instance_count": 217, "def": "square or bar of very rich chocolate cake usually with nuts", "synonyms": ["brownie"], "image_count": 19, "id": 157, "frequency": "c", "synset": "brownie.n.03"}, {"name": "brussels_sprouts", "instance_count": 590, "def": "the small edible cabbage-like buds growing along a stalk", "synonyms": ["brussels_sprouts"], "image_count": 37, "id": 158, "frequency": "c", "synset": "brussels_sprouts.n.01"}, {"name": "bubble_gum", "instance_count": 4, "def": "a kind of chewing gum that can be blown into bubbles", "synonyms": ["bubble_gum"], "image_count": 4, "id": 159, "frequency": "r", "synset": "bubble_gum.n.01"}, {"name": "bucket", "instance_count": 1346, "def": "a roughly cylindrical vessel that is open at the top", "synonyms": ["bucket", "pail"], "image_count": 709, "id": 160, "frequency": "f", "synset": "bucket.n.01"}, {"name": "horse_buggy", "instance_count": 19, "def": "a small lightweight carriage; drawn by a single horse", "synonyms": ["horse_buggy"], "image_count": 9, "id": 161, "frequency": "r", "synset": "buggy.n.01"}, {"name": "bull", "instance_count": 230, "def": "a cow with horns", "synonyms": ["horned_cow"], "image_count": 82, "id": 162, "frequency": "c", "synset": "bull.n.11"}, {"name": "bulldog", "instance_count": 21, "def": "a thickset short-haired dog with a large head and strong undershot lower jaw", "synonyms": ["bulldog"], "image_count": 15, "id": 163, "frequency": "c", "synset": "bulldog.n.01"}, {"name": "bulldozer", "instance_count": 4, "def": "large powerful tractor; a large blade in front flattens areas of ground", "synonyms": ["bulldozer", "dozer"], "image_count": 3, "id": 164, "frequency": "r", "synset": "bulldozer.n.01"}, {"name": "bullet_train", "instance_count": 80, "def": "a high-speed passenger train", "synonyms": ["bullet_train"], "image_count": 61, "id": 165, "frequency": "c", "synset": "bullet_train.n.01"}, {"name": "bulletin_board", "instance_count": 76, "def": "a board that hangs on a wall; displays announcements", "synonyms": ["bulletin_board", "notice_board"], "image_count": 51, "id": 166, "frequency": "c", "synset": "bulletin_board.n.02"}, {"name": "bulletproof_vest", "instance_count": 27, "def": "a vest capable of resisting the impact of a bullet", "synonyms": ["bulletproof_vest"], "image_count": 5, "id": 167, "frequency": "r", "synset": "bulletproof_vest.n.01"}, {"name": "bullhorn", "instance_count": 15, "def": "a portable loudspeaker with built-in microphone and amplifier", "synonyms": ["bullhorn", "megaphone"], "image_count": 13, "id": 168, "frequency": "c", "synset": "bullhorn.n.01"}, {"name": "bun", "instance_count": 1780, "def": "small rounded bread either plain or sweet", "synonyms": ["bun", "roll"], "image_count": 642, "id": 169, "frequency": "f", "synset": "bun.n.01"}, {"name": "bunk_bed", "instance_count": 44, "def": "beds built one above the other", "synonyms": ["bunk_bed"], "image_count": 24, "id": 170, "frequency": "c", "synset": "bunk_bed.n.01"}, {"name": "buoy", "instance_count": 1404, "def": "a float attached by rope to the seabed to mark channels in a harbor or underwater hazards", "synonyms": ["buoy"], "image_count": 255, "id": 171, "frequency": "f", "synset": "buoy.n.01"}, {"name": "burrito", "instance_count": 14, "def": "a flour tortilla folded around a filling", "synonyms": ["burrito"], "image_count": 9, "id": 172, "frequency": "r", "synset": "burrito.n.01"}, {"name": "bus_(vehicle)", "instance_count": 3281, "def": "a vehicle carrying many passengers; used for public transport", "synonyms": ["bus_(vehicle)", "autobus", "charabanc", "double-decker", "motorbus", "motorcoach"], "image_count": 1808, "id": 173, "frequency": "f", "synset": "bus.n.01"}, {"name": "business_card", "instance_count": 84, "def": "a card on which are printed the person's name and business affiliation", "synonyms": ["business_card"], "image_count": 31, "id": 174, "frequency": "c", "synset": "business_card.n.01"}, {"name": "butter", "instance_count": 308, "def": "an edible emulsion of fat globules made by churning milk or cream; for cooking and table use", "synonyms": ["butter"], "image_count": 158, "id": 175, "frequency": "f", "synset": "butter.n.01"}, {"name": "butterfly", "instance_count": 296, "def": "insect typically having a slender body with knobbed antennae and broad colorful wings", "synonyms": ["butterfly"], "image_count": 80, "id": 176, "frequency": "c", "synset": "butterfly.n.01"}, {"name": "button", "instance_count": 7884, "def": "a round fastener sewn to shirts and coats etc to fit through buttonholes", "synonyms": ["button"], "image_count": 1884, "id": 177, "frequency": "f", "synset": "button.n.01"}, {"name": "cab_(taxi)", "instance_count": 414, "def": "a car that takes passengers where they want to go in exchange for money", "synonyms": ["cab_(taxi)", "taxi", "taxicab"], "image_count": 158, "id": 178, "frequency": "f", "synset": "cab.n.03"}, {"name": "cabana", "instance_count": 20, "def": "a small tent used as a dressing room beside the sea or a swimming pool", "synonyms": ["cabana"], "image_count": 2, "id": 179, "frequency": "r", "synset": "cabana.n.01"}, {"name": "cabin_car", "instance_count": 14, "def": "a car on a freight train for use of the train crew; usually the last car on the train", "synonyms": ["cabin_car", "caboose"], "image_count": 12, "id": 180, "frequency": "c", "synset": "cabin_car.n.01"}, {"name": "cabinet", "instance_count": 7371, "def": "a piece of furniture resembling a cupboard with doors and shelves and drawers", "synonyms": ["cabinet"], "image_count": 1659, "id": 181, "frequency": "f", "synset": "cabinet.n.01"}, {"name": "locker", "instance_count": 95, "def": "a storage compartment for clothes and valuables; usually it has a lock", "synonyms": ["locker", "storage_locker"], "image_count": 7, "id": 182, "frequency": "r", "synset": "cabinet.n.03"}, {"name": "cake", "instance_count": 2297, "def": "baked goods made from or based on a mixture of flour, sugar, eggs, and fat", "synonyms": ["cake"], "image_count": 834, "id": 183, "frequency": "f", "synset": "cake.n.03"}, {"name": "calculator", "instance_count": 60, "def": "a small machine that is used for mathematical calculations", "synonyms": ["calculator"], "image_count": 57, "id": 184, "frequency": "c", "synset": "calculator.n.02"}, {"name": "calendar", "instance_count": 251, "def": "a list or register of events (appointments/social events/court cases, etc)", "synonyms": ["calendar"], "image_count": 174, "id": 185, "frequency": "f", "synset": "calendar.n.02"}, {"name": "calf", "instance_count": 301, "def": "young of domestic cattle", "synonyms": ["calf"], "image_count": 95, "id": 186, "frequency": "c", "synset": "calf.n.01"}, {"name": "camcorder", "instance_count": 45, "def": "a portable television camera and videocassette recorder", "synonyms": ["camcorder"], "image_count": 27, "id": 187, "frequency": "c", "synset": "camcorder.n.01"}, {"name": "camel", "instance_count": 34, "def": "cud-chewing mammal used as a draft or saddle animal in desert regions", "synonyms": ["camel"], "image_count": 22, "id": 188, "frequency": "c", "synset": "camel.n.01"}, {"name": "camera", "instance_count": 2471, "def": "equipment for taking photographs", "synonyms": ["camera"], "image_count": 1391, "id": 189, "frequency": "f", "synset": "camera.n.01"}, {"name": "camera_lens", "instance_count": 167, "def": "a lens that focuses the image in a camera", "synonyms": ["camera_lens"], "image_count": 90, "id": 190, "frequency": "c", "synset": "camera_lens.n.01"}, {"name": "camper_(vehicle)", "instance_count": 102, "def": "a recreational vehicle equipped for camping out while traveling", "synonyms": ["camper_(vehicle)", "camping_bus", "motor_home"], "image_count": 40, "id": 191, "frequency": "c", "synset": "camper.n.02"}, {"name": "can", "instance_count": 1424, "def": "airtight sealed metal container for food or drink or paint etc.", "synonyms": ["can", "tin_can"], "image_count": 445, "id": 192, "frequency": "f", "synset": "can.n.01"}, {"name": "can_opener", "instance_count": 22, "def": "a device for cutting cans open", "synonyms": ["can_opener", "tin_opener"], "image_count": 21, "id": 193, "frequency": "c", "synset": "can_opener.n.01"}, {"name": "candle", "instance_count": 4288, "def": "stick of wax with a wick in the middle", "synonyms": ["candle", "candlestick"], "image_count": 1132, "id": 194, "frequency": "f", "synset": "candle.n.01"}, {"name": "candle_holder", "instance_count": 530, "def": "a holder with sockets for candles", "synonyms": ["candle_holder"], "image_count": 177, "id": 195, "frequency": "f", "synset": "candlestick.n.01"}, {"name": "candy_bar", "instance_count": 29, "def": "a candy shaped as a bar", "synonyms": ["candy_bar"], "image_count": 4, "id": 196, "frequency": "r", "synset": "candy_bar.n.01"}, {"name": "candy_cane", "instance_count": 107, "def": "a hard candy in the shape of a rod (usually with stripes)", "synonyms": ["candy_cane"], "image_count": 17, "id": 197, "frequency": "c", "synset": "candy_cane.n.01"}, {"name": "walking_cane", "instance_count": 106, "def": "a stick that people can lean on to help them walk", "synonyms": ["walking_cane"], "image_count": 84, "id": 198, "frequency": "c", "synset": "cane.n.01"}, {"name": "canister", "instance_count": 218, "def": "metal container for storing dry foods such as tea or flour", "synonyms": ["canister", "cannister"], "image_count": 55, "id": 199, "frequency": "c", "synset": "canister.n.02"}, {"name": "canoe", "instance_count": 96, "def": "small and light boat; pointed at both ends; propelled with a paddle", "synonyms": ["canoe"], "image_count": 30, "id": 200, "frequency": "c", "synset": "canoe.n.01"}, {"name": "cantaloup", "instance_count": 193, "def": "the fruit of a cantaloup vine; small to medium-sized melon with yellowish flesh", "synonyms": ["cantaloup", "cantaloupe"], "image_count": 25, "id": 201, "frequency": "c", "synset": "cantaloup.n.02"}, {"name": "canteen", "instance_count": 2, "def": "a flask for carrying water; used by soldiers or travelers", "synonyms": ["canteen"], "image_count": 2, "id": 202, "frequency": "r", "synset": "canteen.n.01"}, {"name": "cap_(headwear)", "instance_count": 636, "def": "a tight-fitting headwear", "synonyms": ["cap_(headwear)"], "image_count": 125, "id": 203, "frequency": "f", "synset": "cap.n.01"}, {"name": "bottle_cap", "instance_count": 5293, "def": "a top (as for a bottle)", "synonyms": ["bottle_cap", "cap_(container_lid)"], "image_count": 1135, "id": 204, "frequency": "f", "synset": "cap.n.02"}, {"name": "cape", "instance_count": 27, "def": "a sleeveless garment like a cloak but shorter", "synonyms": ["cape"], "image_count": 19, "id": 205, "frequency": "c", "synset": "cape.n.02"}, {"name": "cappuccino", "instance_count": 87, "def": "equal parts of espresso and steamed milk", "synonyms": ["cappuccino", "coffee_cappuccino"], "image_count": 72, "id": 206, "frequency": "c", "synset": "cappuccino.n.01"}, {"name": "car_(automobile)", "instance_count": 10528, "def": "a motor vehicle with four wheels", "synonyms": ["car_(automobile)", "auto_(automobile)", "automobile"], "image_count": 1926, "id": 207, "frequency": "f", "synset": "car.n.01"}, {"name": "railcar_(part_of_a_train)", "instance_count": 928, "def": "a wheeled vehicle adapted to the rails of railroad (mark each individual railcar separately)", "synonyms": ["railcar_(part_of_a_train)", "railway_car_(part_of_a_train)", "railroad_car_(part_of_a_train)"], "image_count": 159, "id": 208, "frequency": "f", "synset": "car.n.02"}, {"name": "elevator_car", "instance_count": 10, "def": "where passengers ride up and down", "synonyms": ["elevator_car"], "image_count": 7, "id": 209, "frequency": "r", "synset": "car.n.04"}, {"name": "car_battery", "instance_count": 1, "def": "a battery in a motor vehicle", "synonyms": ["car_battery", "automobile_battery"], "image_count": 1, "id": 210, "frequency": "r", "synset": "car_battery.n.01"}, {"name": "identity_card", "instance_count": 16, "def": "a card certifying the identity of the bearer", "synonyms": ["identity_card"], "image_count": 13, "id": 211, "frequency": "c", "synset": "card.n.02"}, {"name": "card", "instance_count": 122, "def": "a rectangular piece of paper used to send messages (e.g. greetings or pictures)", "synonyms": ["card"], "image_count": 35, "id": 212, "frequency": "c", "synset": "card.n.03"}, {"name": "cardigan", "instance_count": 22, "def": "knitted jacket that is fastened up the front with buttons or a zipper", "synonyms": ["cardigan"], "image_count": 18, "id": 213, "frequency": "c", "synset": "cardigan.n.01"}, {"name": "cargo_ship", "instance_count": 15, "def": "a ship designed to carry cargo", "synonyms": ["cargo_ship", "cargo_vessel"], "image_count": 8, "id": 214, "frequency": "r", "synset": "cargo_ship.n.01"}, {"name": "carnation", "instance_count": 22, "def": "plant with pink to purple-red spice-scented usually double flowers", "synonyms": ["carnation"], "image_count": 6, "id": 215, "frequency": "r", "synset": "carnation.n.01"}, {"name": "horse_carriage", "instance_count": 49, "def": "a vehicle with wheels drawn by one or more horses", "synonyms": ["horse_carriage"], "image_count": 35, "id": 216, "frequency": "c", "synset": "carriage.n.02"}, {"name": "carrot", "instance_count": 18049, "def": "deep orange edible root of the cultivated carrot plant", "synonyms": ["carrot"], "image_count": 1222, "id": 217, "frequency": "f", "synset": "carrot.n.01"}, {"name": "tote_bag", "instance_count": 231, "def": "a capacious bag or basket", "synonyms": ["tote_bag"], "image_count": 103, "id": 218, "frequency": "f", "synset": "carryall.n.01"}, {"name": "cart", "instance_count": 51, "def": "a heavy open wagon usually having two wheels and drawn by an animal", "synonyms": ["cart"], "image_count": 28, "id": 219, "frequency": "c", "synset": "cart.n.01"}, {"name": "carton", "instance_count": 206, "def": "a container made of cardboard for holding food or drink", "synonyms": ["carton"], "image_count": 63, "id": 220, "frequency": "c", "synset": "carton.n.02"}, {"name": "cash_register", "instance_count": 33, "def": "a cashbox with an adding machine to register transactions", "synonyms": ["cash_register", "register_(for_cash_transactions)"], "image_count": 28, "id": 221, "frequency": "c", "synset": "cash_register.n.01"}, {"name": "casserole", "instance_count": 12, "def": "food cooked and served in a casserole", "synonyms": ["casserole"], "image_count": 5, "id": 222, "frequency": "r", "synset": "casserole.n.01"}, {"name": "cassette", "instance_count": 74, "def": "a container that holds a magnetic tape used for recording or playing sound or video", "synonyms": ["cassette"], "image_count": 7, "id": 223, "frequency": "r", "synset": "cassette.n.01"}, {"name": "cast", "instance_count": 15, "def": "bandage consisting of a firm covering that immobilizes broken bones while they heal", "synonyms": ["cast", "plaster_cast", "plaster_bandage"], "image_count": 14, "id": 224, "frequency": "c", "synset": "cast.n.05"}, {"name": "cat", "instance_count": 2387, "def": "a domestic house cat", "synonyms": ["cat"], "image_count": 1918, "id": 225, "frequency": "f", "synset": "cat.n.01"}, {"name": "cauliflower", "instance_count": 1035, "def": "edible compact head of white undeveloped flowers", "synonyms": ["cauliflower"], "image_count": 133, "id": 226, "frequency": "f", "synset": "cauliflower.n.02"}, {"name": "cayenne_(spice)", "instance_count": 49, "def": "ground pods and seeds of pungent red peppers of the genus Capsicum", "synonyms": ["cayenne_(spice)", "cayenne_pepper_(spice)", "red_pepper_(spice)"], "image_count": 16, "id": 227, "frequency": "c", "synset": "cayenne.n.02"}, {"name": "CD_player", "instance_count": 37, "def": "electronic equipment for playing compact discs (CDs)", "synonyms": ["CD_player"], "image_count": 27, "id": 228, "frequency": "c", "synset": "cd_player.n.01"}, {"name": "celery", "instance_count": 911, "def": "widely cultivated herb with aromatic leaf stalks that are eaten raw or cooked", "synonyms": ["celery"], "image_count": 110, "id": 229, "frequency": "f", "synset": "celery.n.01"}, {"name": "cellular_telephone", "instance_count": 2902, "def": "a hand-held mobile telephone", "synonyms": ["cellular_telephone", "cellular_phone", "cellphone", "mobile_phone", "smart_phone"], "image_count": 1895, "id": 230, "frequency": "f", "synset": "cellular_telephone.n.01"}, {"name": "chain_mail", "instance_count": 13, "def": "(Middle Ages) flexible armor made of interlinked metal rings", "synonyms": ["chain_mail", "ring_mail", "chain_armor", "chain_armour", "ring_armor", "ring_armour"], "image_count": 4, "id": 231, "frequency": "r", "synset": "chain_mail.n.01"}, {"name": "chair", "instance_count": 11549, "def": "a seat for one person, with a support for the back", "synonyms": ["chair"], "image_count": 1927, "id": 232, "frequency": "f", "synset": "chair.n.01"}, {"name": "chaise_longue", "instance_count": 15, "def": "a long chair; for reclining", "synonyms": ["chaise_longue", "chaise", "daybed"], "image_count": 8, "id": 233, "frequency": "r", "synset": "chaise_longue.n.01"}, {"name": "chalice", "instance_count": 1, "def": "a bowl-shaped drinking vessel; especially the Eucharistic cup", "synonyms": ["chalice"], "image_count": 1, "id": 234, "frequency": "r", "synset": "chalice.n.01"}, {"name": "chandelier", "instance_count": 392, "def": "branched lighting fixture; often ornate; hangs from the ceiling", "synonyms": ["chandelier"], "image_count": 263, "id": 235, "frequency": "f", "synset": "chandelier.n.01"}, {"name": "chap", "instance_count": 19, "def": "leather leggings without a seat; worn over trousers by cowboys to protect their legs", "synonyms": ["chap"], "image_count": 10, "id": 236, "frequency": "r", "synset": "chap.n.04"}, {"name": "checkbook", "instance_count": 2, "def": "a book issued to holders of checking accounts", "synonyms": ["checkbook", "chequebook"], "image_count": 2, "id": 237, "frequency": "r", "synset": "checkbook.n.01"}, {"name": "checkerboard", "instance_count": 3, "def": "a board having 64 squares of two alternating colors", "synonyms": ["checkerboard"], "image_count": 3, "id": 238, "frequency": "r", "synset": "checkerboard.n.01"}, {"name": "cherry", "instance_count": 903, "def": "a red fruit with a single hard stone", "synonyms": ["cherry"], "image_count": 87, "id": 239, "frequency": "c", "synset": "cherry.n.03"}, {"name": "chessboard", "instance_count": 13, "def": "a checkerboard used to play chess", "synonyms": ["chessboard"], "image_count": 9, "id": 240, "frequency": "r", "synset": "chessboard.n.01"}, {"name": "chicken_(animal)", "instance_count": 417, "def": "a domestic fowl bred for flesh or eggs", "synonyms": ["chicken_(animal)"], "image_count": 71, "id": 241, "frequency": "c", "synset": "chicken.n.02"}, {"name": "chickpea", "instance_count": 265, "def": "the seed of the chickpea plant; usually dried", "synonyms": ["chickpea", "garbanzo"], "image_count": 13, "id": 242, "frequency": "c", "synset": "chickpea.n.01"}, {"name": "chili_(vegetable)", "instance_count": 354, "def": "very hot and finely tapering pepper of special pungency", "synonyms": ["chili_(vegetable)", "chili_pepper_(vegetable)", "chilli_(vegetable)", "chilly_(vegetable)", "chile_(vegetable)"], "image_count": 18, "id": 243, "frequency": "c", "synset": "chili.n.02"}, {"name": "chime", "instance_count": 2, "def": "an instrument consisting of a set of bells that are struck with a hammer", "synonyms": ["chime", "gong"], "image_count": 2, "id": 244, "frequency": "r", "synset": "chime.n.01"}, {"name": "chinaware", "instance_count": 41, "def": "dishware made of high quality porcelain", "synonyms": ["chinaware"], "image_count": 5, "id": 245, "frequency": "r", "synset": "chinaware.n.01"}, {"name": "crisp_(potato_chip)", "instance_count": 541, "def": "a thin crisp slice of potato fried in deep fat", "synonyms": ["crisp_(potato_chip)", "potato_chip"], "image_count": 45, "id": 246, "frequency": "c", "synset": "chip.n.04"}, {"name": "poker_chip", "instance_count": 21, "def": "a small disk-shaped counter used to represent money when gambling", "synonyms": ["poker_chip"], "image_count": 1, "id": 247, "frequency": "r", "synset": "chip.n.06"}, {"name": "chocolate_bar", "instance_count": 179, "def": "a bar of chocolate candy", "synonyms": ["chocolate_bar"], "image_count": 23, "id": 248, "frequency": "c", "synset": "chocolate_bar.n.01"}, {"name": "chocolate_cake", "instance_count": 80, "def": "cake containing chocolate", "synonyms": ["chocolate_cake"], "image_count": 32, "id": 249, "frequency": "c", "synset": "chocolate_cake.n.01"}, {"name": "chocolate_milk", "instance_count": 7, "def": "milk flavored with chocolate syrup", "synonyms": ["chocolate_milk"], "image_count": 4, "id": 250, "frequency": "r", "synset": "chocolate_milk.n.01"}, {"name": "chocolate_mousse", "instance_count": 1, "def": "dessert mousse made with chocolate", "synonyms": ["chocolate_mousse"], "image_count": 1, "id": 251, "frequency": "r", "synset": "chocolate_mousse.n.01"}, {"name": "choker", "instance_count": 1380, "def": "shirt collar, animal collar, or tight-fitting necklace", "synonyms": ["choker", "collar", "neckband"], "image_count": 858, "id": 252, "frequency": "f", "synset": "choker.n.03"}, {"name": "chopping_board", "instance_count": 840, "def": "a wooden board where meats or vegetables can be cut", "synonyms": ["chopping_board", "cutting_board", "chopping_block"], "image_count": 661, "id": 253, "frequency": "f", "synset": "chopping_board.n.01"}, {"name": "chopstick", "instance_count": 557, "def": "one of a pair of slender sticks used as oriental tableware to eat food with", "synonyms": ["chopstick"], "image_count": 168, "id": 254, "frequency": "f", "synset": "chopstick.n.01"}, {"name": "Christmas_tree", "instance_count": 303, "def": "an ornamented evergreen used as a Christmas decoration", "synonyms": ["Christmas_tree"], "image_count": 210, "id": 255, "frequency": "f", "synset": "christmas_tree.n.05"}, {"name": "slide", "instance_count": 106, "def": "sloping channel through which things can descend", "synonyms": ["slide"], "image_count": 65, "id": 256, "frequency": "c", "synset": "chute.n.02"}, {"name": "cider", "instance_count": 38, "def": "a beverage made from juice pressed from apples", "synonyms": ["cider", "cyder"], "image_count": 4, "id": 257, "frequency": "r", "synset": "cider.n.01"}, {"name": "cigar_box", "instance_count": 3, "def": "a box for holding cigars", "synonyms": ["cigar_box"], "image_count": 2, "id": 258, "frequency": "r", "synset": "cigar_box.n.01"}, {"name": "cigarette", "instance_count": 269, "def": "finely ground tobacco wrapped in paper; for smoking", "synonyms": ["cigarette"], "image_count": 159, "id": 259, "frequency": "f", "synset": "cigarette.n.01"}, {"name": "cigarette_case", "instance_count": 35, "def": "a small flat case for holding cigarettes", "synonyms": ["cigarette_case", "cigarette_pack"], "image_count": 31, "id": 260, "frequency": "c", "synset": "cigarette_case.n.01"}, {"name": "cistern", "instance_count": 901, "def": "a tank that holds the water used to flush a toilet", "synonyms": ["cistern", "water_tank"], "image_count": 811, "id": 261, "frequency": "f", "synset": "cistern.n.02"}, {"name": "clarinet", "instance_count": 1, "def": "a single-reed instrument with a straight tube", "synonyms": ["clarinet"], "image_count": 1, "id": 262, "frequency": "r", "synset": "clarinet.n.01"}, {"name": "clasp", "instance_count": 197, "def": "a fastener (as a buckle or hook) that is used to hold two things together", "synonyms": ["clasp"], "image_count": 42, "id": 263, "frequency": "c", "synset": "clasp.n.01"}, {"name": "cleansing_agent", "instance_count": 63, "def": "a preparation used in cleaning something", "synonyms": ["cleansing_agent", "cleanser", "cleaner"], "image_count": 27, "id": 264, "frequency": "c", "synset": "cleansing_agent.n.01"}, {"name": "cleat_(for_securing_rope)", "instance_count": 8, "def": "a fastener (usually with two projecting horns) around which a rope can be secured", "synonyms": ["cleat_(for_securing_rope)"], "image_count": 2, "id": 265, "frequency": "r", "synset": "cleat.n.02"}, {"name": "clementine", "instance_count": 108, "def": "a variety of mandarin orange", "synonyms": ["clementine"], "image_count": 5, "id": 266, "frequency": "r", "synset": "clementine.n.01"}, {"name": "clip", "instance_count": 301, "def": "any of various small fasteners used to hold loose articles together", "synonyms": ["clip"], "image_count": 95, "id": 267, "frequency": "c", "synset": "clip.n.03"}, {"name": "clipboard", "instance_count": 36, "def": "a small writing board with a clip at the top for holding papers", "synonyms": ["clipboard"], "image_count": 32, "id": 268, "frequency": "c", "synset": "clipboard.n.01"}, {"name": "clippers_(for_plants)", "instance_count": 1, "def": "shears for cutting grass or shrubbery (often used in the plural)", "synonyms": ["clippers_(for_plants)"], "image_count": 1, "id": 269, "frequency": "r", "synset": "clipper.n.03"}, {"name": "cloak", "instance_count": 1, "def": "a loose outer garment", "synonyms": ["cloak"], "image_count": 1, "id": 270, "frequency": "r", "synset": "cloak.n.02"}, {"name": "clock", "instance_count": 2677, "def": "a timepiece that shows the time of day", "synonyms": ["clock", "timepiece", "timekeeper"], "image_count": 1844, "id": 271, "frequency": "f", "synset": "clock.n.01"}, {"name": "clock_tower", "instance_count": 932, "def": "a tower with a large clock visible high up on an outside face", "synonyms": ["clock_tower"], "image_count": 897, "id": 272, "frequency": "f", "synset": "clock_tower.n.01"}, {"name": "clothes_hamper", "instance_count": 47, "def": "a hamper that holds dirty clothes to be washed or wet clothes to be dried", "synonyms": ["clothes_hamper", "laundry_basket", "clothes_basket"], "image_count": 31, "id": 273, "frequency": "c", "synset": "clothes_hamper.n.01"}, {"name": "clothespin", "instance_count": 111, "def": "wood or plastic fastener; for holding clothes on a clothesline", "synonyms": ["clothespin", "clothes_peg"], "image_count": 23, "id": 274, "frequency": "c", "synset": "clothespin.n.01"}, {"name": "clutch_bag", "instance_count": 1, "def": "a woman's strapless purse that is carried in the hand", "synonyms": ["clutch_bag"], "image_count": 1, "id": 275, "frequency": "r", "synset": "clutch_bag.n.01"}, {"name": "coaster", "instance_count": 390, "def": "a covering (plate or mat) that protects the surface of a table", "synonyms": ["coaster"], "image_count": 202, "id": 276, "frequency": "f", "synset": "coaster.n.03"}, {"name": "coat", "instance_count": 4145, "def": "an outer garment that has sleeves and covers the body from shoulder down", "synonyms": ["coat"], "image_count": 746, "id": 277, "frequency": "f", "synset": "coat.n.01"}, {"name": "coat_hanger", "instance_count": 282, "def": "a hanger that is shaped like a person's shoulders", "synonyms": ["coat_hanger", "clothes_hanger", "dress_hanger"], "image_count": 44, "id": 278, "frequency": "c", "synset": "coat_hanger.n.01"}, {"name": "coatrack", "instance_count": 16, "def": "a rack with hooks for temporarily holding coats and hats", "synonyms": ["coatrack", "hatrack"], "image_count": 14, "id": 279, "frequency": "c", "synset": "coatrack.n.01"}, {"name": "cock", "instance_count": 132, "def": "adult male chicken", "synonyms": ["cock", "rooster"], "image_count": 26, "id": 280, "frequency": "c", "synset": "cock.n.04"}, {"name": "cockroach", "instance_count": 1, "def": "any of numerous chiefly nocturnal insects; some are domestic pests", "synonyms": ["cockroach"], "image_count": 1, "id": 281, "frequency": "r", "synset": "cockroach.n.01"}, {"name": "cocoa_(beverage)", "instance_count": 4, "def": "a beverage made from cocoa powder and milk and sugar; usually drunk hot", "synonyms": ["cocoa_(beverage)", "hot_chocolate_(beverage)", "drinking_chocolate"], "image_count": 2, "id": 282, "frequency": "r", "synset": "cocoa.n.01"}, {"name": "coconut", "instance_count": 273, "def": "large hard-shelled brown oval nut with a fibrous husk", "synonyms": ["coconut", "cocoanut"], "image_count": 25, "id": 283, "frequency": "c", "synset": "coconut.n.02"}, {"name": "coffee_maker", "instance_count": 271, "def": "a kitchen appliance for brewing coffee automatically", "synonyms": ["coffee_maker", "coffee_machine"], "image_count": 238, "id": 284, "frequency": "f", "synset": "coffee_maker.n.01"}, {"name": "coffee_table", "instance_count": 709, "def": "low table where magazines can be placed and coffee or cocktails are served", "synonyms": ["coffee_table", "cocktail_table"], "image_count": 592, "id": 285, "frequency": "f", "synset": "coffee_table.n.01"}, {"name": "coffeepot", "instance_count": 32, "def": "tall pot in which coffee is brewed", "synonyms": ["coffeepot"], "image_count": 26, "id": 286, "frequency": "c", "synset": "coffeepot.n.01"}, {"name": "coil", "instance_count": 7, "def": "tubing that is wound in a spiral", "synonyms": ["coil"], "image_count": 5, "id": 287, "frequency": "r", "synset": "coil.n.05"}, {"name": "coin", "instance_count": 305, "def": "a flat metal piece (usually a disc) used as money", "synonyms": ["coin"], "image_count": 42, "id": 288, "frequency": "c", "synset": "coin.n.01"}, {"name": "colander", "instance_count": 16, "def": "bowl-shaped strainer; used to wash or drain foods", "synonyms": ["colander", "cullender"], "image_count": 13, "id": 289, "frequency": "c", "synset": "colander.n.01"}, {"name": "coleslaw", "instance_count": 72, "def": "basically shredded cabbage", "synonyms": ["coleslaw", "slaw"], "image_count": 46, "id": 290, "frequency": "c", "synset": "coleslaw.n.01"}, {"name": "coloring_material", "instance_count": 1, "def": "any material used for its color", "synonyms": ["coloring_material", "colouring_material"], "image_count": 1, "id": 291, "frequency": "r", "synset": "coloring_material.n.01"}, {"name": "combination_lock", "instance_count": 13, "def": "lock that can be opened only by turning dials in a special sequence", "synonyms": ["combination_lock"], "image_count": 8, "id": 292, "frequency": "r", "synset": "combination_lock.n.01"}, {"name": "pacifier", "instance_count": 40, "def": "device used for an infant to suck or bite on", "synonyms": ["pacifier", "teething_ring"], "image_count": 34, "id": 293, "frequency": "c", "synset": "comforter.n.04"}, {"name": "comic_book", "instance_count": 97, "def": "a magazine devoted to comic strips", "synonyms": ["comic_book"], "image_count": 5, "id": 294, "frequency": "r", "synset": "comic_book.n.01"}, {"name": "compass", "instance_count": 1, "def": "navigational instrument for finding directions", "synonyms": ["compass"], "image_count": 1, "id": 295, "frequency": "r", "synset": "compass.n.01"}, {"name": "computer_keyboard", "instance_count": 2745, "def": "a keyboard that is a data input device for computers", "synonyms": ["computer_keyboard", "keyboard_(computer)"], "image_count": 1871, "id": 296, "frequency": "f", "synset": "computer_keyboard.n.01"}, {"name": "condiment", "instance_count": 2985, "def": "a preparation (a sauce or relish or spice) to enhance flavor or enjoyment", "synonyms": ["condiment"], "image_count": 717, "id": 297, "frequency": "f", "synset": "condiment.n.01"}, {"name": "cone", "instance_count": 4081, "def": "a cone-shaped object used to direct traffic", "synonyms": ["cone", "traffic_cone"], "image_count": 1010, "id": 298, "frequency": "f", "synset": "cone.n.01"}, {"name": "control", "instance_count": 1775, "def": "a mechanism that controls the operation of a machine", "synonyms": ["control", "controller"], "image_count": 679, "id": 299, "frequency": "f", "synset": "control.n.09"}, {"name": "convertible_(automobile)", "instance_count": 4, "def": "a car that has top that can be folded or removed", "synonyms": ["convertible_(automobile)"], "image_count": 3, "id": 300, "frequency": "r", "synset": "convertible.n.01"}, {"name": "sofa_bed", "instance_count": 5, "def": "a sofa that can be converted into a bed", "synonyms": ["sofa_bed"], "image_count": 4, "id": 301, "frequency": "r", "synset": "convertible.n.03"}, {"name": "cooker", "instance_count": 1, "def": "a utensil for cooking", "synonyms": ["cooker"], "image_count": 1, "id": 302, "frequency": "r", "synset": "cooker.n.01"}, {"name": "cookie", "instance_count": 1920, "def": "any of various small flat sweet cakes (`biscuit' is the British term)", "synonyms": ["cookie", "cooky", "biscuit_(cookie)"], "image_count": 166, "id": 303, "frequency": "f", "synset": "cookie.n.01"}, {"name": "cooking_utensil", "instance_count": 18, "def": "a kitchen utensil made of material that does not melt easily; used for cooking", "synonyms": ["cooking_utensil"], "image_count": 2, "id": 304, "frequency": "r", "synset": "cooking_utensil.n.01"}, {"name": "cooler_(for_food)", "instance_count": 499, "def": "an insulated box for storing food often with ice", "synonyms": ["cooler_(for_food)", "ice_chest"], "image_count": 266, "id": 305, "frequency": "f", "synset": "cooler.n.01"}, {"name": "cork_(bottle_plug)", "instance_count": 326, "def": "the plug in the mouth of a bottle (especially a wine bottle)", "synonyms": ["cork_(bottle_plug)", "bottle_cork"], "image_count": 101, "id": 306, "frequency": "f", "synset": "cork.n.04"}, {"name": "corkboard", "instance_count": 7, "def": "a sheet consisting of cork granules", "synonyms": ["corkboard"], "image_count": 6, "id": 307, "frequency": "r", "synset": "corkboard.n.01"}, {"name": "corkscrew", "instance_count": 15, "def": "a bottle opener that pulls corks", "synonyms": ["corkscrew", "bottle_screw"], "image_count": 14, "id": 308, "frequency": "c", "synset": "corkscrew.n.01"}, {"name": "edible_corn", "instance_count": 1883, "def": "ears or kernels of corn that can be prepared and served for human food (only mark individual ears or kernels)", "synonyms": ["edible_corn", "corn", "maize"], "image_count": 133, "id": 309, "frequency": "f", "synset": "corn.n.03"}, {"name": "cornbread", "instance_count": 10, "def": "bread made primarily of cornmeal", "synonyms": ["cornbread"], "image_count": 2, "id": 310, "frequency": "r", "synset": "cornbread.n.01"}, {"name": "cornet", "instance_count": 65, "def": "a brass musical instrument with a narrow tube and a flared bell and many valves", "synonyms": ["cornet", "horn", "trumpet"], "image_count": 38, "id": 311, "frequency": "c", "synset": "cornet.n.01"}, {"name": "cornice", "instance_count": 149, "def": "a decorative framework to conceal curtain fixtures at the top of a window casing", "synonyms": ["cornice", "valance", "valance_board", "pelmet"], "image_count": 95, "id": 312, "frequency": "c", "synset": "cornice.n.01"}, {"name": "cornmeal", "instance_count": 1, "def": "coarsely ground corn", "synonyms": ["cornmeal"], "image_count": 1, "id": 313, "frequency": "r", "synset": "cornmeal.n.01"}, {"name": "corset", "instance_count": 12, "def": "a woman's close-fitting foundation garment", "synonyms": ["corset", "girdle"], "image_count": 12, "id": 314, "frequency": "c", "synset": "corset.n.01"}, {"name": "costume", "instance_count": 124, "def": "the attire characteristic of a country or a time or a social class", "synonyms": ["costume"], "image_count": 49, "id": 315, "frequency": "c", "synset": "costume.n.04"}, {"name": "cougar", "instance_count": 6, "def": "large American feline resembling a lion", "synonyms": ["cougar", "puma", "catamount", "mountain_lion", "panther"], "image_count": 5, "id": 316, "frequency": "r", "synset": "cougar.n.01"}, {"name": "coverall", "instance_count": 12, "def": "a loose-fitting protective garment that is worn over other clothing", "synonyms": ["coverall"], "image_count": 5, "id": 317, "frequency": "r", "synset": "coverall.n.01"}, {"name": "cowbell", "instance_count": 29, "def": "a bell hung around the neck of cow so that the cow can be easily located", "synonyms": ["cowbell"], "image_count": 16, "id": 318, "frequency": "c", "synset": "cowbell.n.01"}, {"name": "cowboy_hat", "instance_count": 535, "def": "a hat with a wide brim and a soft crown; worn by American ranch hands", "synonyms": ["cowboy_hat", "ten-gallon_hat"], "image_count": 216, "id": 319, "frequency": "f", "synset": "cowboy_hat.n.01"}, {"name": "crab_(animal)", "instance_count": 50, "def": "decapod having eyes on short stalks and a broad flattened shell and pincers", "synonyms": ["crab_(animal)"], "image_count": 12, "id": 320, "frequency": "c", "synset": "crab.n.01"}, {"name": "crabmeat", "instance_count": 5, "def": "the edible flesh of any of various crabs", "synonyms": ["crabmeat"], "image_count": 1, "id": 321, "frequency": "r", "synset": "crab.n.05"}, {"name": "cracker", "instance_count": 510, "def": "a thin crisp wafer", "synonyms": ["cracker"], "image_count": 54, "id": 322, "frequency": "c", "synset": "cracker.n.01"}, {"name": "crape", "instance_count": 12, "def": "small very thin pancake", "synonyms": ["crape", "crepe", "French_pancake"], "image_count": 5, "id": 323, "frequency": "r", "synset": "crape.n.01"}, {"name": "crate", "instance_count": 1832, "def": "a rugged box (usually made of wood); used for shipping", "synonyms": ["crate"], "image_count": 245, "id": 324, "frequency": "f", "synset": "crate.n.01"}, {"name": "crayon", "instance_count": 59, "def": "writing or drawing implement made of a colored stick of composition wax", "synonyms": ["crayon", "wax_crayon"], "image_count": 12, "id": 325, "frequency": "c", "synset": "crayon.n.01"}, {"name": "cream_pitcher", "instance_count": 10, "def": "a small pitcher for serving cream", "synonyms": ["cream_pitcher"], "image_count": 7, "id": 326, "frequency": "r", "synset": "cream_pitcher.n.01"}, {"name": "crescent_roll", "instance_count": 152, "def": "very rich flaky crescent-shaped roll", "synonyms": ["crescent_roll", "croissant"], "image_count": 35, "id": 327, "frequency": "c", "synset": "crescent_roll.n.01"}, {"name": "crib", "instance_count": 40, "def": "baby bed with high sides made of slats", "synonyms": ["crib", "cot"], "image_count": 36, "id": 328, "frequency": "c", "synset": "crib.n.01"}, {"name": "crock_pot", "instance_count": 128, "def": "an earthen jar (made of baked clay) or a modern electric crockpot", "synonyms": ["crock_pot", "earthenware_jar"], "image_count": 32, "id": 329, "frequency": "c", "synset": "crock.n.03"}, {"name": "crossbar", "instance_count": 6991, "def": "a horizontal bar that goes across something", "synonyms": ["crossbar"], "image_count": 1027, "id": 330, "frequency": "f", "synset": "crossbar.n.01"}, {"name": "crouton", "instance_count": 140, "def": "a small piece of toasted or fried bread; served in soup or salads", "synonyms": ["crouton"], "image_count": 10, "id": 331, "frequency": "r", "synset": "crouton.n.01"}, {"name": "crow", "instance_count": 24, "def": "black birds having a raucous call", "synonyms": ["crow"], "image_count": 12, "id": 332, "frequency": "c", "synset": "crow.n.01"}, {"name": "crowbar", "instance_count": 1, "def": "a heavy iron lever with one end forged into a wedge", "synonyms": ["crowbar", "wrecking_bar", "pry_bar"], "image_count": 1, "id": 333, "frequency": "r", "synset": "crowbar.n.01"}, {"name": "crown", "instance_count": 126, "def": "an ornamental jeweled headdress signifying sovereignty", "synonyms": ["crown"], "image_count": 67, "id": 334, "frequency": "c", "synset": "crown.n.04"}, {"name": "crucifix", "instance_count": 99, "def": "representation of the cross on which Jesus died", "synonyms": ["crucifix"], "image_count": 71, "id": 335, "frequency": "c", "synset": "crucifix.n.01"}, {"name": "cruise_ship", "instance_count": 35, "def": "a passenger ship used commercially for pleasure cruises", "synonyms": ["cruise_ship", "cruise_liner"], "image_count": 30, "id": 336, "frequency": "c", "synset": "cruise_ship.n.01"}, {"name": "police_cruiser", "instance_count": 86, "def": "a car in which policemen cruise the streets", "synonyms": ["police_cruiser", "patrol_car", "police_car", "squad_car"], "image_count": 48, "id": 337, "frequency": "c", "synset": "cruiser.n.01"}, {"name": "crumb", "instance_count": 3021, "def": "small piece of e.g. bread or cake", "synonyms": ["crumb"], "image_count": 249, "id": 338, "frequency": "f", "synset": "crumb.n.03"}, {"name": "crutch", "instance_count": 20, "def": "a wooden or metal staff that fits under the armpit and reaches to the ground", "synonyms": ["crutch"], "image_count": 13, "id": 339, "frequency": "c", "synset": "crutch.n.01"}, {"name": "cub_(animal)", "instance_count": 55, "def": "the young of certain carnivorous mammals such as the bear or wolf or lion", "synonyms": ["cub_(animal)"], "image_count": 29, "id": 340, "frequency": "c", "synset": "cub.n.03"}, {"name": "cube", "instance_count": 189, "def": "a block in the (approximate) shape of a cube", "synonyms": ["cube", "square_block"], "image_count": 14, "id": 341, "frequency": "c", "synset": "cube.n.05"}, {"name": "cucumber", "instance_count": 1533, "def": "cylindrical green fruit with thin green rind and white flesh eaten as a vegetable", "synonyms": ["cucumber", "cuke"], "image_count": 236, "id": 342, "frequency": "f", "synset": "cucumber.n.02"}, {"name": "cufflink", "instance_count": 17, "def": "jewelry consisting of linked buttons used to fasten the cuffs of a shirt", "synonyms": ["cufflink"], "image_count": 15, "id": 343, "frequency": "c", "synset": "cufflink.n.01"}, {"name": "cup", "instance_count": 4637, "def": "a small open container usually used for drinking; usually has a handle", "synonyms": ["cup"], "image_count": 1521, "id": 344, "frequency": "f", "synset": "cup.n.01"}, {"name": "trophy_cup", "instance_count": 80, "def": "a metal award or cup-shaped vessel with handles that is awarded as a trophy to a competition winner", "synonyms": ["trophy_cup"], "image_count": 25, "id": 345, "frequency": "c", "synset": "cup.n.08"}, {"name": "cupboard", "instance_count": 1623, "def": "a small room (or recess) or cabinet used for storage space", "synonyms": ["cupboard", "closet"], "image_count": 249, "id": 346, "frequency": "f", "synset": "cupboard.n.01"}, {"name": "cupcake", "instance_count": 1628, "def": "small cake baked in a muffin tin", "synonyms": ["cupcake"], "image_count": 139, "id": 347, "frequency": "f", "synset": "cupcake.n.01"}, {"name": "hair_curler", "instance_count": 20, "def": "a cylindrical tube around which the hair is wound to curl it", "synonyms": ["hair_curler", "hair_roller", "hair_crimper"], "image_count": 2, "id": 348, "frequency": "r", "synset": "curler.n.01"}, {"name": "curling_iron", "instance_count": 2, "def": "a cylindrical home appliance that heats hair that has been curled around it", "synonyms": ["curling_iron"], "image_count": 2, "id": 349, "frequency": "r", "synset": "curling_iron.n.01"}, {"name": "curtain", "instance_count": 4506, "def": "hanging cloth used as a blind (especially for a window)", "synonyms": ["curtain", "drapery"], "image_count": 1890, "id": 350, "frequency": "f", "synset": "curtain.n.01"}, {"name": "cushion", "instance_count": 7174, "def": "a soft bag filled with air or padding such as feathers or foam rubber", "synonyms": ["cushion"], "image_count": 1240, "id": 351, "frequency": "f", "synset": "cushion.n.03"}, {"name": "cylinder", "instance_count": 3, "def": "a cylindrical container", "synonyms": ["cylinder"], "image_count": 1, "id": 352, "frequency": "r", "synset": "cylinder.n.04"}, {"name": "cymbal", "instance_count": 24, "def": "a percussion instrument consisting of a concave brass disk", "synonyms": ["cymbal"], "image_count": 9, "id": 353, "frequency": "r", "synset": "cymbal.n.01"}, {"name": "dagger", "instance_count": 1, "def": "a short knife with a pointed blade used for piercing or stabbing", "synonyms": ["dagger"], "image_count": 1, "id": 354, "frequency": "r", "synset": "dagger.n.01"}, {"name": "dalmatian", "instance_count": 3, "def": "a large breed having a smooth white coat with black or brown spots", "synonyms": ["dalmatian"], "image_count": 3, "id": 355, "frequency": "r", "synset": "dalmatian.n.02"}, {"name": "dartboard", "instance_count": 11, "def": "a circular board of wood or cork used as the target in the game of darts", "synonyms": ["dartboard"], "image_count": 11, "id": 356, "frequency": "c", "synset": "dartboard.n.01"}, {"name": "date_(fruit)", "instance_count": 103, "def": "sweet edible fruit of the date palm with a single long woody seed", "synonyms": ["date_(fruit)"], "image_count": 4, "id": 357, "frequency": "r", "synset": "date.n.08"}, {"name": "deck_chair", "instance_count": 1787, "def": "a folding chair for use outdoors; a wooden frame supports a length of canvas", "synonyms": ["deck_chair", "beach_chair"], "image_count": 236, "id": 358, "frequency": "f", "synset": "deck_chair.n.01"}, {"name": "deer", "instance_count": 130, "def": "distinguished from Bovidae by the male's having solid deciduous antlers", "synonyms": ["deer", "cervid"], "image_count": 44, "id": 359, "frequency": "c", "synset": "deer.n.01"}, {"name": "dental_floss", "instance_count": 20, "def": "a soft thread for cleaning the spaces between the teeth", "synonyms": ["dental_floss", "floss"], "image_count": 19, "id": 360, "frequency": "c", "synset": "dental_floss.n.01"}, {"name": "desk", "instance_count": 1662, "def": "a piece of furniture with a writing surface and usually drawers or other compartments", "synonyms": ["desk"], "image_count": 1100, "id": 361, "frequency": "f", "synset": "desk.n.01"}, {"name": "detergent", "instance_count": 11, "def": "a surface-active chemical widely used in industry and laundering", "synonyms": ["detergent"], "image_count": 7, "id": 362, "frequency": "r", "synset": "detergent.n.01"}, {"name": "diaper", "instance_count": 89, "def": "garment consisting of a folded cloth drawn up between the legs and fastened at the waist", "synonyms": ["diaper"], "image_count": 69, "id": 363, "frequency": "c", "synset": "diaper.n.01"}, {"name": "diary", "instance_count": 2, "def": "yearly planner book", "synonyms": ["diary", "journal"], "image_count": 2, "id": 364, "frequency": "r", "synset": "diary.n.01"}, {"name": "die", "instance_count": 25, "def": "a small cube with 1 to 6 spots on the six faces; used in gambling", "synonyms": ["die", "dice"], "image_count": 8, "id": 365, "frequency": "r", "synset": "die.n.01"}, {"name": "dinghy", "instance_count": 15, "def": "a small boat of shallow draft with seats and oars with which it is propelled", "synonyms": ["dinghy", "dory", "rowboat"], "image_count": 5, "id": 366, "frequency": "r", "synset": "dinghy.n.01"}, {"name": "dining_table", "instance_count": 312, "def": "a table at which meals are served", "synonyms": ["dining_table"], "image_count": 227, "id": 367, "frequency": "f", "synset": "dining_table.n.01"}, {"name": "tux", "instance_count": 10, "def": "semiformal evening dress for men", "synonyms": ["tux", "tuxedo"], "image_count": 6, "id": 368, "frequency": "r", "synset": "dinner_jacket.n.01"}, {"name": "dish", "instance_count": 532, "def": "a piece of dishware normally used as a container for holding or serving food", "synonyms": ["dish"], "image_count": 106, "id": 369, "frequency": "f", "synset": "dish.n.01"}, {"name": "dish_antenna", "instance_count": 153, "def": "directional antenna consisting of a parabolic reflector", "synonyms": ["dish_antenna"], "image_count": 81, "id": 370, "frequency": "c", "synset": "dish.n.05"}, {"name": "dishrag", "instance_count": 32, "def": "a cloth for washing dishes or cleaning in general", "synonyms": ["dishrag", "dishcloth"], "image_count": 17, "id": 371, "frequency": "c", "synset": "dishrag.n.01"}, {"name": "dishtowel", "instance_count": 223, "def": "a towel for drying dishes", "synonyms": ["dishtowel", "tea_towel"], "image_count": 134, "id": 372, "frequency": "f", "synset": "dishtowel.n.01"}, {"name": "dishwasher", "instance_count": 317, "def": "a machine for washing dishes", "synonyms": ["dishwasher", "dishwashing_machine"], "image_count": 312, "id": 373, "frequency": "f", "synset": "dishwasher.n.01"}, {"name": "dishwasher_detergent", "instance_count": 9, "def": "dishsoap or dish detergent designed for use in dishwashers", "synonyms": ["dishwasher_detergent", "dishwashing_detergent", "dishwashing_liquid", "dishsoap"], "image_count": 8, "id": 374, "frequency": "r", "synset": "dishwasher_detergent.n.01"}, {"name": "dispenser", "instance_count": 610, "def": "a container so designed that the contents can be used in prescribed amounts", "synonyms": ["dispenser"], "image_count": 271, "id": 375, "frequency": "f", "synset": "dispenser.n.01"}, {"name": "diving_board", "instance_count": 2, "def": "a springboard from which swimmers can dive", "synonyms": ["diving_board"], "image_count": 2, "id": 376, "frequency": "r", "synset": "diving_board.n.01"}, {"name": "Dixie_cup", "instance_count": 352, "def": "a disposable cup made of paper; for holding drinks", "synonyms": ["Dixie_cup", "paper_cup"], "image_count": 103, "id": 377, "frequency": "f", "synset": "dixie_cup.n.01"}, {"name": "dog", "instance_count": 2684, "def": "a common domesticated dog", "synonyms": ["dog"], "image_count": 1938, "id": 378, "frequency": "f", "synset": "dog.n.01"}, {"name": "dog_collar", "instance_count": 733, "def": "a collar for a dog", "synonyms": ["dog_collar"], "image_count": 574, "id": 379, "frequency": "f", "synset": "dog_collar.n.01"}, {"name": "doll", "instance_count": 398, "def": "a toy replica of a HUMAN (NOT AN ANIMAL)", "synonyms": ["doll"], "image_count": 120, "id": 380, "frequency": "f", "synset": "doll.n.01"}, {"name": "dollar", "instance_count": 2, "def": "a piece of paper money worth one dollar", "synonyms": ["dollar", "dollar_bill", "one_dollar_bill"], "image_count": 2, "id": 381, "frequency": "r", "synset": "dollar.n.02"}, {"name": "dollhouse", "instance_count": 2, "def": "a house so small that it is likened to a child's plaything", "synonyms": ["dollhouse", "doll's_house"], "image_count": 2, "id": 382, "frequency": "r", "synset": "dollhouse.n.01"}, {"name": "dolphin", "instance_count": 38, "def": "any of various small toothed whales with a beaklike snout; larger than porpoises", "synonyms": ["dolphin"], "image_count": 13, "id": 383, "frequency": "c", "synset": "dolphin.n.02"}, {"name": "domestic_ass", "instance_count": 49, "def": "domestic beast of burden descended from the African wild ass; patient but stubborn", "synonyms": ["domestic_ass", "donkey"], "image_count": 29, "id": 384, "frequency": "c", "synset": "domestic_ass.n.01"}, {"name": "doorknob", "instance_count": 4072, "def": "a knob used to open a door (often called `doorhandle' in Great Britain)", "synonyms": ["doorknob", "doorhandle"], "image_count": 1710, "id": 385, "frequency": "f", "synset": "doorknob.n.01"}, {"name": "doormat", "instance_count": 78, "def": "a mat placed outside an exterior door for wiping the shoes before entering", "synonyms": ["doormat", "welcome_mat"], "image_count": 66, "id": 386, "frequency": "c", "synset": "doormat.n.02"}, {"name": "doughnut", "instance_count": 11911, "def": "a small ring-shaped friedcake", "synonyms": ["doughnut", "donut"], "image_count": 1008, "id": 387, "frequency": "f", "synset": "doughnut.n.02"}, {"name": "dove", "instance_count": 2, "def": "any of numerous small pigeons", "synonyms": ["dove"], "image_count": 1, "id": 388, "frequency": "r", "synset": "dove.n.01"}, {"name": "dragonfly", "instance_count": 8, "def": "slender-bodied non-stinging insect having iridescent wings that are outspread at rest", "synonyms": ["dragonfly"], "image_count": 3, "id": 389, "frequency": "r", "synset": "dragonfly.n.01"}, {"name": "drawer", "instance_count": 7927, "def": "a boxlike container in a piece of furniture; made so as to slide in and out", "synonyms": ["drawer"], "image_count": 1942, "id": 390, "frequency": "f", "synset": "drawer.n.01"}, {"name": "underdrawers", "instance_count": 23, "def": "underpants worn by men", "synonyms": ["underdrawers", "boxers", "boxershorts"], "image_count": 19, "id": 391, "frequency": "c", "synset": "drawers.n.01"}, {"name": "dress", "instance_count": 2842, "def": "a one-piece garment for a woman; has skirt and bodice", "synonyms": ["dress", "frock"], "image_count": 1488, "id": 392, "frequency": "f", "synset": "dress.n.01"}, {"name": "dress_hat", "instance_count": 76, "def": "a man's hat with a tall crown; usually covered with silk or with beaver fur", "synonyms": ["dress_hat", "high_hat", "opera_hat", "silk_hat", "top_hat"], "image_count": 46, "id": 393, "frequency": "c", "synset": "dress_hat.n.01"}, {"name": "dress_suit", "instance_count": 306, "def": "formalwear consisting of full evening dress for men", "synonyms": ["dress_suit"], "image_count": 106, "id": 394, "frequency": "f", "synset": "dress_suit.n.01"}, {"name": "dresser", "instance_count": 152, "def": "a cabinet with shelves", "synonyms": ["dresser"], "image_count": 115, "id": 395, "frequency": "f", "synset": "dresser.n.05"}, {"name": "drill", "instance_count": 24, "def": "a tool with a sharp rotating point for making holes in hard materials", "synonyms": ["drill"], "image_count": 19, "id": 396, "frequency": "c", "synset": "drill.n.01"}, {"name": "drone", "instance_count": 2, "def": "an aircraft without a pilot that is operated by remote control", "synonyms": ["drone"], "image_count": 2, "id": 397, "frequency": "r", "synset": "drone.n.04"}, {"name": "dropper", "instance_count": 1, "def": "pipet consisting of a small tube with a vacuum bulb at one end for drawing liquid in and releasing it a drop at a time", "synonyms": ["dropper", "eye_dropper"], "image_count": 1, "id": 398, "frequency": "r", "synset": "dropper.n.01"}, {"name": "drum_(musical_instrument)", "instance_count": 59, "def": "a musical percussion instrument; usually consists of a hollow cylinder with a membrane stretched across each end", "synonyms": ["drum_(musical_instrument)"], "image_count": 28, "id": 399, "frequency": "c", "synset": "drum.n.01"}, {"name": "drumstick", "instance_count": 25, "def": "a stick used for playing a drum", "synonyms": ["drumstick"], "image_count": 9, "id": 400, "frequency": "r", "synset": "drumstick.n.02"}, {"name": "duck", "instance_count": 1090, "def": "small web-footed broad-billed swimming bird", "synonyms": ["duck"], "image_count": 192, "id": 401, "frequency": "f", "synset": "duck.n.01"}, {"name": "duckling", "instance_count": 36, "def": "young duck", "synonyms": ["duckling"], "image_count": 12, "id": 402, "frequency": "c", "synset": "duckling.n.02"}, {"name": "duct_tape", "instance_count": 77, "def": "a wide silvery adhesive tape", "synonyms": ["duct_tape"], "image_count": 21, "id": 403, "frequency": "c", "synset": "duct_tape.n.01"}, {"name": "duffel_bag", "instance_count": 666, "def": "a large cylindrical bag of heavy cloth (does not include suitcases)", "synonyms": ["duffel_bag", "duffle_bag", "duffel", "duffle"], "image_count": 247, "id": 404, "frequency": "f", "synset": "duffel_bag.n.01"}, {"name": "dumbbell", "instance_count": 13, "def": "an exercising weight with two ball-like ends connected by a short handle", "synonyms": ["dumbbell"], "image_count": 6, "id": 405, "frequency": "r", "synset": "dumbbell.n.01"}, {"name": "dumpster", "instance_count": 95, "def": "a container designed to receive and transport and dump waste", "synonyms": ["dumpster"], "image_count": 64, "id": 406, "frequency": "c", "synset": "dumpster.n.01"}, {"name": "dustpan", "instance_count": 7, "def": "a short-handled receptacle into which dust can be swept", "synonyms": ["dustpan"], "image_count": 7, "id": 407, "frequency": "r", "synset": "dustpan.n.02"}, {"name": "eagle", "instance_count": 48, "def": "large birds of prey noted for their broad wings and strong soaring flight", "synonyms": ["eagle"], "image_count": 40, "id": 408, "frequency": "c", "synset": "eagle.n.01"}, {"name": "earphone", "instance_count": 767, "def": "device for listening to audio that is held over or inserted into the ear", "synonyms": ["earphone", "earpiece", "headphone"], "image_count": 542, "id": 409, "frequency": "f", "synset": "earphone.n.01"}, {"name": "earplug", "instance_count": 39, "def": "a soft plug that is inserted into the ear canal to block sound", "synonyms": ["earplug"], "image_count": 2, "id": 410, "frequency": "r", "synset": "earplug.n.01"}, {"name": "earring", "instance_count": 3070, "def": "jewelry to ornament the ear", "synonyms": ["earring"], "image_count": 1898, "id": 411, "frequency": "f", "synset": "earring.n.01"}, {"name": "easel", "instance_count": 43, "def": "an upright tripod for displaying something (usually an artist's canvas)", "synonyms": ["easel"], "image_count": 36, "id": 412, "frequency": "c", "synset": "easel.n.01"}, {"name": "eclair", "instance_count": 39, "def": "oblong cream puff", "synonyms": ["eclair"], "image_count": 4, "id": 413, "frequency": "r", "synset": "eclair.n.01"}, {"name": "eel", "instance_count": 1, "def": "an elongate fish with fatty flesh", "synonyms": ["eel"], "image_count": 1, "id": 414, "frequency": "r", "synset": "eel.n.01"}, {"name": "egg", "instance_count": 813, "def": "oval reproductive body of a fowl (especially a hen) used as food", "synonyms": ["egg", "eggs"], "image_count": 191, "id": 415, "frequency": "f", "synset": "egg.n.02"}, {"name": "egg_roll", "instance_count": 15, "def": "minced vegetables and meat wrapped in a pancake and fried", "synonyms": ["egg_roll", "spring_roll"], "image_count": 6, "id": 416, "frequency": "r", "synset": "egg_roll.n.01"}, {"name": "egg_yolk", "instance_count": 90, "def": "the yellow spherical part of an egg", "synonyms": ["egg_yolk", "yolk_(egg)"], "image_count": 41, "id": 417, "frequency": "c", "synset": "egg_yolk.n.01"}, {"name": "eggbeater", "instance_count": 52, "def": "a mixer for beating eggs or whipping cream", "synonyms": ["eggbeater", "eggwhisk"], "image_count": 39, "id": 418, "frequency": "c", "synset": "eggbeater.n.02"}, {"name": "eggplant", "instance_count": 337, "def": "egg-shaped vegetable having a shiny skin typically dark purple", "synonyms": ["eggplant", "aubergine"], "image_count": 46, "id": 419, "frequency": "c", "synset": "eggplant.n.01"}, {"name": "electric_chair", "instance_count": 1, "def": "a chair-shaped instrument of execution by electrocution", "synonyms": ["electric_chair"], "image_count": 1, "id": 420, "frequency": "r", "synset": "electric_chair.n.01"}, {"name": "refrigerator", "instance_count": 1702, "def": "a refrigerator in which the coolant is pumped around by an electric motor", "synonyms": ["refrigerator"], "image_count": 1451, "id": 421, "frequency": "f", "synset": "electric_refrigerator.n.01"}, {"name": "elephant", "instance_count": 5325, "def": "a common elephant", "synonyms": ["elephant"], "image_count": 1878, "id": 422, "frequency": "f", "synset": "elephant.n.01"}, {"name": "elk", "instance_count": 29, "def": "large northern deer with enormous flattened antlers in the male", "synonyms": ["elk", "moose"], "image_count": 11, "id": 423, "frequency": "c", "synset": "elk.n.01"}, {"name": "envelope", "instance_count": 210, "def": "a flat (usually rectangular) container for a letter, thin package, etc.", "synonyms": ["envelope"], "image_count": 82, "id": 424, "frequency": "c", "synset": "envelope.n.01"}, {"name": "eraser", "instance_count": 41, "def": "an implement used to erase something", "synonyms": ["eraser"], "image_count": 18, "id": 425, "frequency": "c", "synset": "eraser.n.01"}, {"name": "escargot", "instance_count": 5, "def": "edible snail usually served in the shell with a sauce of melted butter and garlic", "synonyms": ["escargot"], "image_count": 1, "id": 426, "frequency": "r", "synset": "escargot.n.01"}, {"name": "eyepatch", "instance_count": 9, "def": "a protective cloth covering for an injured eye", "synonyms": ["eyepatch"], "image_count": 7, "id": 427, "frequency": "r", "synset": "eyepatch.n.01"}, {"name": "falcon", "instance_count": 3, "def": "birds of prey having long pointed powerful wings adapted for swift flight", "synonyms": ["falcon"], "image_count": 3, "id": 428, "frequency": "r", "synset": "falcon.n.01"}, {"name": "fan", "instance_count": 737, "def": "a device for creating a current of air by movement of a surface or surfaces", "synonyms": ["fan"], "image_count": 575, "id": 429, "frequency": "f", "synset": "fan.n.01"}, {"name": "faucet", "instance_count": 3185, "def": "a regulator for controlling the flow of a liquid from a reservoir", "synonyms": ["faucet", "spigot", "tap"], "image_count": 1907, "id": 430, "frequency": "f", "synset": "faucet.n.01"}, {"name": "fedora", "instance_count": 14, "def": "a hat made of felt with a creased crown", "synonyms": ["fedora"], "image_count": 8, "id": 431, "frequency": "r", "synset": "fedora.n.01"}, {"name": "ferret", "instance_count": 5, "def": "domesticated albino variety of the European polecat bred for hunting rats and rabbits", "synonyms": ["ferret"], "image_count": 4, "id": 432, "frequency": "r", "synset": "ferret.n.02"}, {"name": "Ferris_wheel", "instance_count": 32, "def": "a large wheel with suspended seats that remain upright as the wheel rotates", "synonyms": ["Ferris_wheel"], "image_count": 32, "id": 433, "frequency": "c", "synset": "ferris_wheel.n.01"}, {"name": "ferry", "instance_count": 17, "def": "a boat that transports people or vehicles across a body of water and operates on a regular schedule", "synonyms": ["ferry", "ferryboat"], "image_count": 11, "id": 434, "frequency": "c", "synset": "ferry.n.01"}, {"name": "fig_(fruit)", "instance_count": 147, "def": "fleshy sweet pear-shaped yellowish or purple fruit eaten fresh or preserved or dried", "synonyms": ["fig_(fruit)"], "image_count": 4, "id": 435, "frequency": "r", "synset": "fig.n.04"}, {"name": "fighter_jet", "instance_count": 115, "def": "a high-speed military or naval airplane designed to destroy enemy targets", "synonyms": ["fighter_jet", "fighter_aircraft", "attack_aircraft"], "image_count": 54, "id": 436, "frequency": "c", "synset": "fighter.n.02"}, {"name": "figurine", "instance_count": 1056, "def": "a small carved or molded figure", "synonyms": ["figurine"], "image_count": 202, "id": 437, "frequency": "f", "synset": "figurine.n.01"}, {"name": "file_cabinet", "instance_count": 53, "def": "office furniture consisting of a container for keeping papers in order", "synonyms": ["file_cabinet", "filing_cabinet"], "image_count": 32, "id": 438, "frequency": "c", "synset": "file.n.03"}, {"name": "file_(tool)", "instance_count": 3, "def": "a steel hand tool with small sharp teeth on some or all of its surfaces; used for smoothing wood or metal", "synonyms": ["file_(tool)"], "image_count": 3, "id": 439, "frequency": "r", "synset": "file.n.04"}, {"name": "fire_alarm", "instance_count": 151, "def": "an alarm that is tripped off by fire or smoke", "synonyms": ["fire_alarm", "smoke_alarm"], "image_count": 130, "id": 440, "frequency": "f", "synset": "fire_alarm.n.02"}, {"name": "fire_engine", "instance_count": 179, "def": "large trucks that carry firefighters and equipment to the site of a fire", "synonyms": ["fire_engine", "fire_truck"], "image_count": 119, "id": 441, "frequency": "f", "synset": "fire_engine.n.01"}, {"name": "fire_extinguisher", "instance_count": 165, "def": "a manually operated device for extinguishing small fires", "synonyms": ["fire_extinguisher", "extinguisher"], "image_count": 141, "id": 442, "frequency": "f", "synset": "fire_extinguisher.n.01"}, {"name": "fire_hose", "instance_count": 67, "def": "a large hose that carries water from a fire hydrant to the site of the fire", "synonyms": ["fire_hose"], "image_count": 29, "id": 443, "frequency": "c", "synset": "fire_hose.n.01"}, {"name": "fireplace", "instance_count": 530, "def": "an open recess in a wall at the base of a chimney where a fire can be built", "synonyms": ["fireplace"], "image_count": 525, "id": 444, "frequency": "f", "synset": "fireplace.n.01"}, {"name": "fireplug", "instance_count": 1458, "def": "an upright hydrant for drawing water to use in fighting a fire", "synonyms": ["fireplug", "fire_hydrant", "hydrant"], "image_count": 1323, "id": 445, "frequency": "f", "synset": "fireplug.n.01"}, {"name": "first-aid_kit", "instance_count": 2, "def": "kit consisting of a set of bandages and medicines for giving first aid", "synonyms": ["first-aid_kit"], "image_count": 2, "id": 446, "frequency": "r", "synset": "first-aid_kit.n.01"}, {"name": "fish", "instance_count": 525, "def": "any of various mostly cold-blooded aquatic vertebrates usually having scales and breathing through gills", "synonyms": ["fish"], "image_count": 113, "id": 447, "frequency": "f", "synset": "fish.n.01"}, {"name": "fish_(food)", "instance_count": 96, "def": "the flesh of fish used as food", "synonyms": ["fish_(food)"], "image_count": 16, "id": 448, "frequency": "c", "synset": "fish.n.02"}, {"name": "fishbowl", "instance_count": 33, "def": "a transparent bowl in which small fish are kept", "synonyms": ["fishbowl", "goldfish_bowl"], "image_count": 7, "id": 449, "frequency": "r", "synset": "fishbowl.n.02"}, {"name": "fishing_rod", "instance_count": 84, "def": "a rod that is used in fishing to extend the fishing line", "synonyms": ["fishing_rod", "fishing_pole"], "image_count": 35, "id": 450, "frequency": "c", "synset": "fishing_rod.n.01"}, {"name": "flag", "instance_count": 7007, "def": "emblem usually consisting of a rectangular piece of cloth of distinctive design (do not include pole)", "synonyms": ["flag"], "image_count": 1908, "id": 451, "frequency": "f", "synset": "flag.n.01"}, {"name": "flagpole", "instance_count": 1082, "def": "a tall staff or pole on which a flag is raised", "synonyms": ["flagpole", "flagstaff"], "image_count": 353, "id": 452, "frequency": "f", "synset": "flagpole.n.02"}, {"name": "flamingo", "instance_count": 309, "def": "large pink web-footed bird with down-bent bill", "synonyms": ["flamingo"], "image_count": 18, "id": 453, "frequency": "c", "synset": "flamingo.n.01"}, {"name": "flannel", "instance_count": 18, "def": "a soft light woolen fabric; used for clothing", "synonyms": ["flannel"], "image_count": 14, "id": 454, "frequency": "c", "synset": "flannel.n.01"}, {"name": "flap", "instance_count": 218, "def": "any broad thin covering attached at one edge, such as a mud flap next to a wheel or a flap on an airplane wing", "synonyms": ["flap"], "image_count": 77, "id": 455, "frequency": "c", "synset": "flap.n.01"}, {"name": "flash", "instance_count": 10, "def": "a lamp for providing momentary light to take a photograph", "synonyms": ["flash", "flashbulb"], "image_count": 8, "id": 456, "frequency": "r", "synset": "flash.n.10"}, {"name": "flashlight", "instance_count": 48, "def": "a small portable battery-powered electric lamp", "synonyms": ["flashlight", "torch"], "image_count": 37, "id": 457, "frequency": "c", "synset": "flashlight.n.01"}, {"name": "fleece", "instance_count": 2, "def": "a soft bulky fabric with deep pile; used chiefly for clothing", "synonyms": ["fleece"], "image_count": 1, "id": 458, "frequency": "r", "synset": "fleece.n.03"}, {"name": "flip-flop_(sandal)", "instance_count": 1103, "def": "a backless sandal held to the foot by a thong between two toes", "synonyms": ["flip-flop_(sandal)"], "image_count": 346, "id": 459, "frequency": "f", "synset": "flip-flop.n.02"}, {"name": "flipper_(footwear)", "instance_count": 49, "def": "a shoe to aid a person in swimming", "synonyms": ["flipper_(footwear)", "fin_(footwear)"], "image_count": 19, "id": 460, "frequency": "c", "synset": "flipper.n.01"}, {"name": "flower_arrangement", "instance_count": 3960, "def": "a decorative arrangement of flowers", "synonyms": ["flower_arrangement", "floral_arrangement"], "image_count": 1779, "id": 461, "frequency": "f", "synset": "flower_arrangement.n.01"}, {"name": "flute_glass", "instance_count": 86, "def": "a tall narrow wineglass", "synonyms": ["flute_glass", "champagne_flute"], "image_count": 23, "id": 462, "frequency": "c", "synset": "flute.n.02"}, {"name": "foal", "instance_count": 30, "def": "a young horse", "synonyms": ["foal"], "image_count": 25, "id": 463, "frequency": "c", "synset": "foal.n.01"}, {"name": "folding_chair", "instance_count": 303, "def": "a chair that can be folded flat for storage", "synonyms": ["folding_chair"], "image_count": 67, "id": 464, "frequency": "c", "synset": "folding_chair.n.01"}, {"name": "food_processor", "instance_count": 22, "def": "a kitchen appliance for shredding, blending, chopping, or slicing food", "synonyms": ["food_processor"], "image_count": 19, "id": 465, "frequency": "c", "synset": "food_processor.n.01"}, {"name": "football_(American)", "instance_count": 35, "def": "the inflated oblong ball used in playing American football", "synonyms": ["football_(American)"], "image_count": 28, "id": 466, "frequency": "c", "synset": "football.n.02"}, {"name": "football_helmet", "instance_count": 7, "def": "a padded helmet with a face mask to protect the head of football players", "synonyms": ["football_helmet"], "image_count": 4, "id": 467, "frequency": "r", "synset": "football_helmet.n.01"}, {"name": "footstool", "instance_count": 41, "def": "a low seat or a stool to rest the feet of a seated person", "synonyms": ["footstool", "footrest"], "image_count": 27, "id": 468, "frequency": "c", "synset": "footstool.n.01"}, {"name": "fork", "instance_count": 3137, "def": "cutlery used for serving and eating food", "synonyms": ["fork"], "image_count": 1861, "id": 469, "frequency": "f", "synset": "fork.n.01"}, {"name": "forklift", "instance_count": 14, "def": "an industrial vehicle with a power operated fork in front that can be inserted under loads to lift and move them", "synonyms": ["forklift"], "image_count": 11, "id": 470, "frequency": "c", "synset": "forklift.n.01"}, {"name": "freight_car", "instance_count": 121, "def": "a railway car that carries freight", "synonyms": ["freight_car"], "image_count": 13, "id": 471, "frequency": "c", "synset": "freight_car.n.01"}, {"name": "French_toast", "instance_count": 41, "def": "bread slice dipped in egg and milk and fried", "synonyms": ["French_toast"], "image_count": 13, "id": 472, "frequency": "c", "synset": "french_toast.n.01"}, {"name": "freshener", "instance_count": 39, "def": "anything that freshens air by removing or covering odor", "synonyms": ["freshener", "air_freshener"], "image_count": 32, "id": 473, "frequency": "c", "synset": "freshener.n.01"}, {"name": "frisbee", "instance_count": 2332, "def": "a light, plastic disk propelled with a flip of the wrist for recreation or competition", "synonyms": ["frisbee"], "image_count": 1767, "id": 474, "frequency": "f", "synset": "frisbee.n.01"}, {"name": "frog", "instance_count": 84, "def": "a tailless stout-bodied amphibians with long hind limbs for leaping", "synonyms": ["frog", "toad", "toad_frog"], "image_count": 42, "id": 475, "frequency": "c", "synset": "frog.n.01"}, {"name": "fruit_juice", "instance_count": 37, "def": "drink produced by squeezing or crushing fruit", "synonyms": ["fruit_juice"], "image_count": 17, "id": 476, "frequency": "c", "synset": "fruit_juice.n.01"}, {"name": "frying_pan", "instance_count": 310, "def": "a pan used for frying foods", "synonyms": ["frying_pan", "frypan", "skillet"], "image_count": 128, "id": 477, "frequency": "f", "synset": "frying_pan.n.01"}, {"name": "fudge", "instance_count": 4, "def": "soft creamy candy", "synonyms": ["fudge"], "image_count": 1, "id": 478, "frequency": "r", "synset": "fudge.n.01"}, {"name": "funnel", "instance_count": 9, "def": "a cone-shaped utensil used to channel a substance into a container with a small mouth", "synonyms": ["funnel"], "image_count": 9, "id": 479, "frequency": "r", "synset": "funnel.n.02"}, {"name": "futon", "instance_count": 11, "def": "a pad that is used for sleeping on the floor or on a raised frame", "synonyms": ["futon"], "image_count": 10, "id": 480, "frequency": "r", "synset": "futon.n.01"}, {"name": "gag", "instance_count": 4, "def": "restraint put into a person's mouth to prevent speaking or shouting", "synonyms": ["gag", "muzzle"], "image_count": 4, "id": 481, "frequency": "r", "synset": "gag.n.02"}, {"name": "garbage", "instance_count": 18, "def": "a receptacle where waste can be discarded", "synonyms": ["garbage"], "image_count": 9, "id": 482, "frequency": "r", "synset": "garbage.n.03"}, {"name": "garbage_truck", "instance_count": 18, "def": "a truck for collecting domestic refuse", "synonyms": ["garbage_truck"], "image_count": 18, "id": 483, "frequency": "c", "synset": "garbage_truck.n.01"}, {"name": "garden_hose", "instance_count": 50, "def": "a hose used for watering a lawn or garden", "synonyms": ["garden_hose"], "image_count": 41, "id": 484, "frequency": "c", "synset": "garden_hose.n.01"}, {"name": "gargle", "instance_count": 38, "def": "a medicated solution used for gargling and rinsing the mouth", "synonyms": ["gargle", "mouthwash"], "image_count": 28, "id": 485, "frequency": "c", "synset": "gargle.n.01"}, {"name": "gargoyle", "instance_count": 8, "def": "an ornament consisting of a grotesquely carved figure of a person or animal", "synonyms": ["gargoyle"], "image_count": 3, "id": 486, "frequency": "r", "synset": "gargoyle.n.02"}, {"name": "garlic", "instance_count": 487, "def": "aromatic bulb used as seasoning", "synonyms": ["garlic", "ail"], "image_count": 65, "id": 487, "frequency": "c", "synset": "garlic.n.02"}, {"name": "gasmask", "instance_count": 12, "def": "a protective face mask with a filter", "synonyms": ["gasmask", "respirator", "gas_helmet"], "image_count": 9, "id": 488, "frequency": "r", "synset": "gasmask.n.01"}, {"name": "gazelle", "instance_count": 82, "def": "small swift graceful antelope of Africa and Asia having lustrous eyes", "synonyms": ["gazelle"], "image_count": 23, "id": 489, "frequency": "c", "synset": "gazelle.n.01"}, {"name": "gelatin", "instance_count": 248, "def": "an edible jelly made with gelatin and used as a dessert or salad base or a coating for foods", "synonyms": ["gelatin", "jelly"], "image_count": 24, "id": 490, "frequency": "c", "synset": "gelatin.n.02"}, {"name": "gemstone", "instance_count": 2, "def": "a crystalline rock that can be cut and polished for jewelry", "synonyms": ["gemstone"], "image_count": 1, "id": 491, "frequency": "r", "synset": "gem.n.02"}, {"name": "generator", "instance_count": 2, "def": "engine that converts mechanical energy into electrical energy by electromagnetic induction", "synonyms": ["generator"], "image_count": 2, "id": 492, "frequency": "r", "synset": "generator.n.02"}, {"name": "giant_panda", "instance_count": 112, "def": "large black-and-white herbivorous mammal of bamboo forests of China and Tibet", "synonyms": ["giant_panda", "panda", "panda_bear"], "image_count": 59, "id": 493, "frequency": "c", "synset": "giant_panda.n.01"}, {"name": "gift_wrap", "instance_count": 247, "def": "attractive wrapping paper suitable for wrapping gifts", "synonyms": ["gift_wrap"], "image_count": 48, "id": 494, "frequency": "c", "synset": "gift_wrap.n.01"}, {"name": "ginger", "instance_count": 93, "def": "the root of the common ginger plant; used fresh as a seasoning", "synonyms": ["ginger", "gingerroot"], "image_count": 17, "id": 495, "frequency": "c", "synset": "ginger.n.03"}, {"name": "giraffe", "instance_count": 3923, "def": "tall animal having a spotted coat and small horns and very long neck and legs", "synonyms": ["giraffe"], "image_count": 1877, "id": 496, "frequency": "f", "synset": "giraffe.n.01"}, {"name": "cincture", "instance_count": 56, "def": "a band of material around the waist that strengthens a skirt or trousers", "synonyms": ["cincture", "sash", "waistband", "waistcloth"], "image_count": 18, "id": 497, "frequency": "c", "synset": "girdle.n.02"}, {"name": "glass_(drink_container)", "instance_count": 6420, "def": "a container for holding liquids while drinking", "synonyms": ["glass_(drink_container)", "drinking_glass"], "image_count": 1920, "id": 498, "frequency": "f", "synset": "glass.n.02"}, {"name": "globe", "instance_count": 59, "def": "a sphere on which a map (especially of the earth) is represented", "synonyms": ["globe"], "image_count": 50, "id": 499, "frequency": "c", "synset": "globe.n.03"}, {"name": "glove", "instance_count": 5951, "def": "handwear covering the hand", "synonyms": ["glove"], "image_count": 1890, "id": 500, "frequency": "f", "synset": "glove.n.02"}, {"name": "goat", "instance_count": 842, "def": "a common goat", "synonyms": ["goat"], "image_count": 99, "id": 501, "frequency": "c", "synset": "goat.n.01"}, {"name": "goggles", "instance_count": 3202, "def": "tight-fitting spectacles worn to protect the eyes", "synonyms": ["goggles"], "image_count": 1530, "id": 502, "frequency": "f", "synset": "goggles.n.01"}, {"name": "goldfish", "instance_count": 11, "def": "small golden or orange-red freshwater fishes used as pond or aquarium pets", "synonyms": ["goldfish"], "image_count": 3, "id": 503, "frequency": "r", "synset": "goldfish.n.01"}, {"name": "golf_club", "instance_count": 14, "def": "golf equipment used by a golfer to hit a golf ball", "synonyms": ["golf_club", "golf-club"], "image_count": 11, "id": 504, "frequency": "c", "synset": "golf_club.n.02"}, {"name": "golfcart", "instance_count": 25, "def": "a small motor vehicle in which golfers can ride between shots", "synonyms": ["golfcart"], "image_count": 19, "id": 505, "frequency": "c", "synset": "golfcart.n.01"}, {"name": "gondola_(boat)", "instance_count": 8, "def": "long narrow flat-bottomed boat propelled by sculling; traditionally used on canals of Venice", "synonyms": ["gondola_(boat)"], "image_count": 3, "id": 506, "frequency": "r", "synset": "gondola.n.02"}, {"name": "goose", "instance_count": 413, "def": "loud, web-footed long-necked aquatic birds usually larger than ducks", "synonyms": ["goose"], "image_count": 63, "id": 507, "frequency": "c", "synset": "goose.n.01"}, {"name": "gorilla", "instance_count": 10, "def": "largest ape", "synonyms": ["gorilla"], "image_count": 5, "id": 508, "frequency": "r", "synset": "gorilla.n.01"}, {"name": "gourd", "instance_count": 101, "def": "any of numerous inedible fruits with hard rinds", "synonyms": ["gourd"], "image_count": 6, "id": 509, "frequency": "r", "synset": "gourd.n.02"}, {"name": "grape", "instance_count": 6377, "def": "any of various juicy fruit with green or purple skins; grow in clusters", "synonyms": ["grape"], "image_count": 233, "id": 510, "frequency": "f", "synset": "grape.n.01"}, {"name": "grater", "instance_count": 64, "def": "utensil with sharp perforations for shredding foods (as vegetables or cheese)", "synonyms": ["grater"], "image_count": 54, "id": 511, "frequency": "c", "synset": "grater.n.01"}, {"name": "gravestone", "instance_count": 778, "def": "a stone that is used to mark a grave", "synonyms": ["gravestone", "headstone", "tombstone"], "image_count": 36, "id": 512, "frequency": "c", "synset": "gravestone.n.01"}, {"name": "gravy_boat", "instance_count": 10, "def": "a dish (often boat-shaped) for serving gravy or sauce", "synonyms": ["gravy_boat", "gravy_holder"], "image_count": 10, "id": 513, "frequency": "r", "synset": "gravy_boat.n.01"}, {"name": "green_bean", "instance_count": 2571, "def": "a common bean plant cultivated for its slender green edible pods", "synonyms": ["green_bean"], "image_count": 124, "id": 514, "frequency": "f", "synset": "green_bean.n.02"}, {"name": "green_onion", "instance_count": 1618, "def": "a young onion before the bulb has enlarged", "synonyms": ["green_onion", "spring_onion", "scallion"], "image_count": 101, "id": 515, "frequency": "f", "synset": "green_onion.n.01"}, {"name": "griddle", "instance_count": 4, "def": "cooking utensil consisting of a flat heated surface on which food is cooked", "synonyms": ["griddle"], "image_count": 3, "id": 516, "frequency": "r", "synset": "griddle.n.01"}, {"name": "grill", "instance_count": 747, "def": "a framework of metal bars used as a partition or a grate", "synonyms": ["grill", "grille", "grillwork", "radiator_grille"], "image_count": 363, "id": 517, "frequency": "f", "synset": "grill.n.02"}, {"name": "grits", "instance_count": 3, "def": "coarsely ground corn boiled as a breakfast dish", "synonyms": ["grits", "hominy_grits"], "image_count": 3, "id": 518, "frequency": "r", "synset": "grits.n.01"}, {"name": "grizzly", "instance_count": 44, "def": "powerful brownish-yellow bear of the uplands of western North America", "synonyms": ["grizzly", "grizzly_bear"], "image_count": 30, "id": 519, "frequency": "c", "synset": "grizzly.n.01"}, {"name": "grocery_bag", "instance_count": 46, "def": "a sack for holding customer's groceries", "synonyms": ["grocery_bag"], "image_count": 18, "id": 520, "frequency": "c", "synset": "grocery_bag.n.01"}, {"name": "guitar", "instance_count": 315, "def": "a stringed instrument usually having six strings; played by strumming or plucking", "synonyms": ["guitar"], "image_count": 199, "id": 521, "frequency": "f", "synset": "guitar.n.01"}, {"name": "gull", "instance_count": 1398, "def": "mostly white aquatic bird having long pointed wings and short legs", "synonyms": ["gull", "seagull"], "image_count": 97, "id": 522, "frequency": "c", "synset": "gull.n.02"}, {"name": "gun", "instance_count": 68, "def": "a weapon that discharges a bullet at high velocity from a metal tube", "synonyms": ["gun"], "image_count": 32, "id": 523, "frequency": "c", "synset": "gun.n.01"}, {"name": "hairbrush", "instance_count": 165, "def": "a brush used to groom a person's hair", "synonyms": ["hairbrush"], "image_count": 121, "id": 524, "frequency": "f", "synset": "hairbrush.n.01"}, {"name": "hairnet", "instance_count": 53, "def": "a small net that someone wears over their hair to keep it in place", "synonyms": ["hairnet"], "image_count": 16, "id": 525, "frequency": "c", "synset": "hairnet.n.01"}, {"name": "hairpin", "instance_count": 20, "def": "a double pronged pin used to hold women's hair in place", "synonyms": ["hairpin"], "image_count": 12, "id": 526, "frequency": "c", "synset": "hairpin.n.01"}, {"name": "halter_top", "instance_count": 3, "def": "a woman's top that fastens behind the back and neck leaving the back and arms uncovered", "synonyms": ["halter_top"], "image_count": 2, "id": 527, "frequency": "r", "synset": "halter.n.03"}, {"name": "ham", "instance_count": 1765, "def": "meat cut from the thigh of a hog (usually smoked)", "synonyms": ["ham", "jambon", "gammon"], "image_count": 214, "id": 528, "frequency": "f", "synset": "ham.n.01"}, {"name": "hamburger", "instance_count": 126, "def": "a sandwich consisting of a patty of minced beef served on a bun", "synonyms": ["hamburger", "beefburger", "burger"], "image_count": 48, "id": 529, "frequency": "c", "synset": "hamburger.n.01"}, {"name": "hammer", "instance_count": 41, "def": "a hand tool with a heavy head and a handle; used to deliver an impulsive force by striking", "synonyms": ["hammer"], "image_count": 26, "id": 530, "frequency": "c", "synset": "hammer.n.02"}, {"name": "hammock", "instance_count": 15, "def": "a hanging bed of canvas or rope netting (usually suspended between two trees)", "synonyms": ["hammock"], "image_count": 13, "id": 531, "frequency": "c", "synset": "hammock.n.02"}, {"name": "hamper", "instance_count": 5, "def": "a basket usually with a cover", "synonyms": ["hamper"], "image_count": 4, "id": 532, "frequency": "r", "synset": "hamper.n.02"}, {"name": "hamster", "instance_count": 12, "def": "short-tailed burrowing rodent with large cheek pouches", "synonyms": ["hamster"], "image_count": 11, "id": 533, "frequency": "c", "synset": "hamster.n.01"}, {"name": "hair_dryer", "instance_count": 144, "def": "a hand-held electric blower that can blow warm air onto the hair", "synonyms": ["hair_dryer"], "image_count": 123, "id": 534, "frequency": "f", "synset": "hand_blower.n.01"}, {"name": "hand_glass", "instance_count": 7, "def": "a mirror intended to be held in the hand", "synonyms": ["hand_glass", "hand_mirror"], "image_count": 7, "id": 535, "frequency": "r", "synset": "hand_glass.n.01"}, {"name": "hand_towel", "instance_count": 619, "def": "a small towel used to dry the hands or face", "synonyms": ["hand_towel", "face_towel"], "image_count": 200, "id": 536, "frequency": "f", "synset": "hand_towel.n.01"}, {"name": "handcart", "instance_count": 204, "def": "wheeled vehicle that can be pushed by a person", "synonyms": ["handcart", "pushcart", "hand_truck"], "image_count": 91, "id": 537, "frequency": "c", "synset": "handcart.n.01"}, {"name": "handcuff", "instance_count": 10, "def": "shackle that consists of a metal loop that can be locked around the wrist", "synonyms": ["handcuff"], "image_count": 9, "id": 538, "frequency": "r", "synset": "handcuff.n.01"}, {"name": "handkerchief", "instance_count": 86, "def": "a square piece of cloth used for wiping the eyes or nose or as a costume accessory", "synonyms": ["handkerchief"], "image_count": 72, "id": 539, "frequency": "c", "synset": "handkerchief.n.01"}, {"name": "handle", "instance_count": 8314, "def": "the appendage to an object that is designed to be held in order to use or move it", "synonyms": ["handle", "grip", "handgrip"], "image_count": 1886, "id": 540, "frequency": "f", "synset": "handle.n.01"}, {"name": "handsaw", "instance_count": 5, "def": "a saw used with one hand for cutting wood", "synonyms": ["handsaw", "carpenter's_saw"], "image_count": 4, "id": 541, "frequency": "r", "synset": "handsaw.n.01"}, {"name": "hardback_book", "instance_count": 2, "def": "a book with cardboard or cloth or leather covers", "synonyms": ["hardback_book", "hardcover_book"], "image_count": 1, "id": 542, "frequency": "r", "synset": "hardback.n.01"}, {"name": "harmonium", "instance_count": 2, "def": "a free-reed instrument in which air is forced through the reeds by bellows", "synonyms": ["harmonium", "organ_(musical_instrument)", "reed_organ_(musical_instrument)"], "image_count": 1, "id": 543, "frequency": "r", "synset": "harmonium.n.01"}, {"name": "hat", "instance_count": 7213, "def": "headwear that protects the head from bad weather, sun, or worn for fashion", "synonyms": ["hat"], "image_count": 1932, "id": 544, "frequency": "f", "synset": "hat.n.01"}, {"name": "hatbox", "instance_count": 7, "def": "a round piece of luggage for carrying hats", "synonyms": ["hatbox"], "image_count": 4, "id": 545, "frequency": "r", "synset": "hatbox.n.01"}, {"name": "veil", "instance_count": 57, "def": "a garment that covers the head OR face", "synonyms": ["veil"], "image_count": 56, "id": 546, "frequency": "c", "synset": "head_covering.n.01"}, {"name": "headband", "instance_count": 1114, "def": "a band worn around or over the head", "synonyms": ["headband"], "image_count": 854, "id": 547, "frequency": "f", "synset": "headband.n.01"}, {"name": "headboard", "instance_count": 850, "def": "a vertical board or panel forming the head of a bedstead", "synonyms": ["headboard"], "image_count": 755, "id": 548, "frequency": "f", "synset": "headboard.n.01"}, {"name": "headlight", "instance_count": 7326, "def": "a powerful light with reflector; attached to the front of an automobile or locomotive", "synonyms": ["headlight", "headlamp"], "image_count": 1843, "id": 549, "frequency": "f", "synset": "headlight.n.01"}, {"name": "headscarf", "instance_count": 235, "def": "a kerchief worn over the head and tied under the chin", "synonyms": ["headscarf"], "image_count": 96, "id": 550, "frequency": "c", "synset": "headscarf.n.01"}, {"name": "headset", "instance_count": 10, "def": "receiver consisting of a pair of headphones", "synonyms": ["headset"], "image_count": 7, "id": 551, "frequency": "r", "synset": "headset.n.01"}, {"name": "headstall_(for_horses)", "instance_count": 133, "def": "the band that is the part of a bridle that fits around a horse's head", "synonyms": ["headstall_(for_horses)", "headpiece_(for_horses)"], "image_count": 74, "id": 552, "frequency": "c", "synset": "headstall.n.01"}, {"name": "heart", "instance_count": 347, "def": "a muscular organ; its contractions move the blood through the body", "synonyms": ["heart"], "image_count": 66, "id": 553, "frequency": "c", "synset": "heart.n.02"}, {"name": "heater", "instance_count": 64, "def": "device that heats water or supplies warmth to a room", "synonyms": ["heater", "warmer"], "image_count": 57, "id": 554, "frequency": "c", "synset": "heater.n.01"}, {"name": "helicopter", "instance_count": 68, "def": "an aircraft without wings that obtains its lift from the rotation of overhead blades", "synonyms": ["helicopter"], "image_count": 44, "id": 555, "frequency": "c", "synset": "helicopter.n.01"}, {"name": "helmet", "instance_count": 4845, "def": "a protective headgear made of hard material to resist blows", "synonyms": ["helmet"], "image_count": 1905, "id": 556, "frequency": "f", "synset": "helmet.n.02"}, {"name": "heron", "instance_count": 6, "def": "grey or white wading bird with long neck and long legs and (usually) long bill", "synonyms": ["heron"], "image_count": 4, "id": 557, "frequency": "r", "synset": "heron.n.02"}, {"name": "highchair", "instance_count": 98, "def": "a chair for feeding a very young child", "synonyms": ["highchair", "feeding_chair"], "image_count": 90, "id": 558, "frequency": "c", "synset": "highchair.n.01"}, {"name": "hinge", "instance_count": 5283, "def": "a joint that holds two parts together so that one can swing relative to the other", "synonyms": ["hinge"], "image_count": 1635, "id": 559, "frequency": "f", "synset": "hinge.n.01"}, {"name": "hippopotamus", "instance_count": 24, "def": "massive thick-skinned animal living in or around rivers of tropical Africa", "synonyms": ["hippopotamus"], "image_count": 8, "id": 560, "frequency": "r", "synset": "hippopotamus.n.01"}, {"name": "hockey_stick", "instance_count": 15, "def": "sports implement consisting of a stick used by hockey players to move the puck", "synonyms": ["hockey_stick"], "image_count": 5, "id": 561, "frequency": "r", "synset": "hockey_stick.n.01"}, {"name": "hog", "instance_count": 73, "def": "domestic swine", "synonyms": ["hog", "pig"], "image_count": 50, "id": 562, "frequency": "c", "synset": "hog.n.03"}, {"name": "home_plate_(baseball)", "instance_count": 551, "def": "(baseball) a rubber slab where the batter stands; it must be touched by a base runner in order to score", "synonyms": ["home_plate_(baseball)", "home_base_(baseball)"], "image_count": 545, "id": 563, "frequency": "f", "synset": "home_plate.n.01"}, {"name": "honey", "instance_count": 90, "def": "a sweet yellow liquid produced by bees", "synonyms": ["honey"], "image_count": 20, "id": 564, "frequency": "c", "synset": "honey.n.01"}, {"name": "fume_hood", "instance_count": 208, "def": "metal covering leading to a vent that exhausts smoke or fumes", "synonyms": ["fume_hood", "exhaust_hood"], "image_count": 193, "id": 565, "frequency": "f", "synset": "hood.n.06"}, {"name": "hook", "instance_count": 1157, "def": "a curved or bent implement for suspending or pulling something", "synonyms": ["hook"], "image_count": 285, "id": 566, "frequency": "f", "synset": "hook.n.05"}, {"name": "hookah", "instance_count": 3, "def": "a tobacco pipe with a long flexible tube connected to a container where the smoke is cooled by passing through water", "synonyms": ["hookah", "narghile", "nargileh", "sheesha", "shisha", "water_pipe"], "image_count": 3, "id": 567, "frequency": "r", "synset": "hookah.n.01"}, {"name": "hornet", "instance_count": 1, "def": "large stinging wasp", "synonyms": ["hornet"], "image_count": 1, "id": 568, "frequency": "r", "synset": "hornet.n.01"}, {"name": "horse", "instance_count": 4744, "def": "a common horse", "synonyms": ["horse"], "image_count": 1904, "id": 569, "frequency": "f", "synset": "horse.n.01"}, {"name": "hose", "instance_count": 610, "def": "a flexible pipe for conveying a liquid or gas", "synonyms": ["hose", "hosepipe"], "image_count": 294, "id": 570, "frequency": "f", "synset": "hose.n.03"}, {"name": "hot-air_balloon", "instance_count": 4, "def": "balloon for travel through the air in a basket suspended below a large bag of heated air", "synonyms": ["hot-air_balloon"], "image_count": 3, "id": 571, "frequency": "r", "synset": "hot-air_balloon.n.01"}, {"name": "hotplate", "instance_count": 6, "def": "a portable electric appliance for heating or cooking or keeping food warm", "synonyms": ["hotplate"], "image_count": 5, "id": 572, "frequency": "r", "synset": "hot_plate.n.01"}, {"name": "hot_sauce", "instance_count": 70, "def": "a pungent peppery sauce", "synonyms": ["hot_sauce"], "image_count": 24, "id": 573, "frequency": "c", "synset": "hot_sauce.n.01"}, {"name": "hourglass", "instance_count": 2, "def": "a sandglass timer that runs for sixty minutes", "synonyms": ["hourglass"], "image_count": 2, "id": 574, "frequency": "r", "synset": "hourglass.n.01"}, {"name": "houseboat", "instance_count": 4, "def": "a barge that is designed and equipped for use as a dwelling", "synonyms": ["houseboat"], "image_count": 2, "id": 575, "frequency": "r", "synset": "houseboat.n.01"}, {"name": "hummingbird", "instance_count": 18, "def": "tiny American bird having brilliant iridescent plumage and long slender bills", "synonyms": ["hummingbird"], "image_count": 16, "id": 576, "frequency": "c", "synset": "hummingbird.n.01"}, {"name": "hummus", "instance_count": 9, "def": "a thick spread made from mashed chickpeas", "synonyms": ["hummus", "humus", "hommos", "hoummos", "humous"], "image_count": 8, "id": 577, "frequency": "r", "synset": "hummus.n.01"}, {"name": "polar_bear", "instance_count": 196, "def": "white bear of Arctic regions", "synonyms": ["polar_bear"], "image_count": 154, "id": 578, "frequency": "f", "synset": "ice_bear.n.01"}, {"name": "icecream", "instance_count": 180, "def": "frozen dessert containing cream and sugar and flavoring", "synonyms": ["icecream"], "image_count": 66, "id": 579, "frequency": "c", "synset": "ice_cream.n.01"}, {"name": "popsicle", "instance_count": 1, "def": "ice cream or water ice on a small wooden stick", "synonyms": ["popsicle"], "image_count": 1, "id": 580, "frequency": "r", "synset": "ice_lolly.n.01"}, {"name": "ice_maker", "instance_count": 26, "def": "an appliance included in some electric refrigerators for making ice cubes", "synonyms": ["ice_maker"], "image_count": 24, "id": 581, "frequency": "c", "synset": "ice_maker.n.01"}, {"name": "ice_pack", "instance_count": 4, "def": "a waterproof bag filled with ice: applied to the body (especially the head) to cool or reduce swelling", "synonyms": ["ice_pack", "ice_bag"], "image_count": 1, "id": 582, "frequency": "r", "synset": "ice_pack.n.01"}, {"name": "ice_skate", "instance_count": 14, "def": "skate consisting of a boot with a steel blade fitted to the sole", "synonyms": ["ice_skate"], "image_count": 4, "id": 583, "frequency": "r", "synset": "ice_skate.n.01"}, {"name": "igniter", "instance_count": 77, "def": "a substance or device used to start a fire", "synonyms": ["igniter", "ignitor", "lighter"], "image_count": 75, "id": 584, "frequency": "c", "synset": "igniter.n.01"}, {"name": "inhaler", "instance_count": 7, "def": "a dispenser that produces a chemical vapor to be inhaled through mouth or nose", "synonyms": ["inhaler", "inhalator"], "image_count": 6, "id": 585, "frequency": "r", "synset": "inhaler.n.01"}, {"name": "iPod", "instance_count": 172, "def": "a pocket-sized device used to play music files", "synonyms": ["iPod"], "image_count": 126, "id": 586, "frequency": "f", "synset": "ipod.n.01"}, {"name": "iron_(for_clothing)", "instance_count": 38, "def": "home appliance consisting of a flat metal base that is heated and used to smooth cloth", "synonyms": ["iron_(for_clothing)", "smoothing_iron_(for_clothing)"], "image_count": 24, "id": 587, "frequency": "c", "synset": "iron.n.04"}, {"name": "ironing_board", "instance_count": 24, "def": "narrow padded board on collapsible supports; used for ironing clothes", "synonyms": ["ironing_board"], "image_count": 22, "id": 588, "frequency": "c", "synset": "ironing_board.n.01"}, {"name": "jacket", "instance_count": 8013, "def": "a waist-length coat", "synonyms": ["jacket"], "image_count": 1872, "id": 589, "frequency": "f", "synset": "jacket.n.01"}, {"name": "jam", "instance_count": 29, "def": "preserve of crushed fruit", "synonyms": ["jam"], "image_count": 16, "id": 590, "frequency": "c", "synset": "jam.n.01"}, {"name": "jar", "instance_count": 2002, "def": "a vessel (usually cylindrical) with a wide mouth and without handles", "synonyms": ["jar"], "image_count": 423, "id": 591, "frequency": "f", "synset": "jar.n.01"}, {"name": "jean", "instance_count": 5421, "def": "(usually plural) close-fitting trousers of heavy denim for manual work or casual wear", "synonyms": ["jean", "blue_jean", "denim"], "image_count": 1927, "id": 592, "frequency": "f", "synset": "jean.n.01"}, {"name": "jeep", "instance_count": 55, "def": "a car suitable for traveling over rough terrain", "synonyms": ["jeep", "landrover"], "image_count": 38, "id": 593, "frequency": "c", "synset": "jeep.n.01"}, {"name": "jelly_bean", "instance_count": 116, "def": "sugar-glazed jellied candy", "synonyms": ["jelly_bean", "jelly_egg"], "image_count": 3, "id": 594, "frequency": "r", "synset": "jelly_bean.n.01"}, {"name": "jersey", "instance_count": 8117, "def": "a close-fitting pullover shirt", "synonyms": ["jersey", "T-shirt", "tee_shirt"], "image_count": 1945, "id": 595, "frequency": "f", "synset": "jersey.n.03"}, {"name": "jet_plane", "instance_count": 87, "def": "an airplane powered by one or more jet engines", "synonyms": ["jet_plane", "jet-propelled_plane"], "image_count": 35, "id": 596, "frequency": "c", "synset": "jet.n.01"}, {"name": "jewel", "instance_count": 1, "def": "a precious or semiprecious stone incorporated into a piece of jewelry", "synonyms": ["jewel", "gem", "precious_stone"], "image_count": 1, "id": 597, "frequency": "r", "synset": "jewel.n.01"}, {"name": "jewelry", "instance_count": 51, "def": "an adornment (as a bracelet or ring or necklace) made of precious metals and set with gems (or imitation gems)", "synonyms": ["jewelry", "jewellery"], "image_count": 13, "id": 598, "frequency": "c", "synset": "jewelry.n.01"}, {"name": "joystick", "instance_count": 12, "def": "a control device for computers consisting of a vertical handle that can move freely in two directions", "synonyms": ["joystick"], "image_count": 9, "id": 599, "frequency": "r", "synset": "joystick.n.02"}, {"name": "jumpsuit", "instance_count": 21, "def": "one-piece garment fashioned after a parachutist's uniform", "synonyms": ["jumpsuit"], "image_count": 14, "id": 600, "frequency": "c", "synset": "jump_suit.n.01"}, {"name": "kayak", "instance_count": 124, "def": "a small canoe consisting of a light frame made watertight with animal skins", "synonyms": ["kayak"], "image_count": 37, "id": 601, "frequency": "c", "synset": "kayak.n.01"}, {"name": "keg", "instance_count": 6, "def": "small cask or barrel", "synonyms": ["keg"], "image_count": 3, "id": 602, "frequency": "r", "synset": "keg.n.02"}, {"name": "kennel", "instance_count": 4, "def": "outbuilding that serves as a shelter for a dog", "synonyms": ["kennel", "doghouse"], "image_count": 4, "id": 603, "frequency": "r", "synset": "kennel.n.01"}, {"name": "kettle", "instance_count": 130, "def": "a metal pot for stewing or boiling; usually has a lid", "synonyms": ["kettle", "boiler"], "image_count": 100, "id": 604, "frequency": "c", "synset": "kettle.n.01"}, {"name": "key", "instance_count": 447, "def": "metal instrument used to unlock a lock", "synonyms": ["key"], "image_count": 195, "id": 605, "frequency": "f", "synset": "key.n.01"}, {"name": "keycard", "instance_count": 1, "def": "a plastic card used to gain access typically to a door", "synonyms": ["keycard"], "image_count": 1, "id": 606, "frequency": "r", "synset": "keycard.n.01"}, {"name": "kilt", "instance_count": 19, "def": "a knee-length pleated tartan skirt worn by men as part of the traditional dress in the Highlands of northern Scotland", "synonyms": ["kilt"], "image_count": 12, "id": 607, "frequency": "c", "synset": "kilt.n.01"}, {"name": "kimono", "instance_count": 38, "def": "a loose robe; imitated from robes originally worn by Japanese", "synonyms": ["kimono"], "image_count": 24, "id": 608, "frequency": "c", "synset": "kimono.n.01"}, {"name": "kitchen_sink", "instance_count": 519, "def": "a sink in a kitchen", "synonyms": ["kitchen_sink"], "image_count": 489, "id": 609, "frequency": "f", "synset": "kitchen_sink.n.01"}, {"name": "kitchen_table", "instance_count": 11, "def": "a table in the kitchen", "synonyms": ["kitchen_table"], "image_count": 10, "id": 610, "frequency": "r", "synset": "kitchen_table.n.01"}, {"name": "kite", "instance_count": 11174, "def": "plaything consisting of a light frame covered with tissue paper; flown in wind at end of a string", "synonyms": ["kite"], "image_count": 1689, "id": 611, "frequency": "f", "synset": "kite.n.03"}, {"name": "kitten", "instance_count": 60, "def": "young domestic cat", "synonyms": ["kitten", "kitty"], "image_count": 42, "id": 612, "frequency": "c", "synset": "kitten.n.01"}, {"name": "kiwi_fruit", "instance_count": 702, "def": "fuzzy brown egg-shaped fruit with slightly tart green flesh", "synonyms": ["kiwi_fruit"], "image_count": 81, "id": 613, "frequency": "c", "synset": "kiwi.n.03"}, {"name": "knee_pad", "instance_count": 1765, "def": "protective garment consisting of a pad worn by football or baseball or hockey players", "synonyms": ["knee_pad"], "image_count": 894, "id": 614, "frequency": "f", "synset": "knee_pad.n.01"}, {"name": "knife", "instance_count": 3515, "def": "tool with a blade and point used as a cutting instrument", "synonyms": ["knife"], "image_count": 1868, "id": 615, "frequency": "f", "synset": "knife.n.01"}, {"name": "knitting_needle", "instance_count": 16, "def": "needle consisting of a slender rod with pointed ends; usually used in pairs", "synonyms": ["knitting_needle"], "image_count": 7, "id": 616, "frequency": "r", "synset": "knitting_needle.n.01"}, {"name": "knob", "instance_count": 8432, "def": "a round handle often found on a door", "synonyms": ["knob"], "image_count": 1567, "id": 617, "frequency": "f", "synset": "knob.n.02"}, {"name": "knocker_(on_a_door)", "instance_count": 10, "def": "a device (usually metal and ornamental) attached by a hinge to a door", "synonyms": ["knocker_(on_a_door)", "doorknocker"], "image_count": 10, "id": 618, "frequency": "r", "synset": "knocker.n.05"}, {"name": "koala", "instance_count": 15, "def": "sluggish tailless Australian marsupial with grey furry ears and coat", "synonyms": ["koala", "koala_bear"], "image_count": 8, "id": 619, "frequency": "r", "synset": "koala.n.01"}, {"name": "lab_coat", "instance_count": 42, "def": "a light coat worn to protect clothing from substances used while working in a laboratory", "synonyms": ["lab_coat", "laboratory_coat"], "image_count": 7, "id": 620, "frequency": "r", "synset": "lab_coat.n.01"}, {"name": "ladder", "instance_count": 975, "def": "steps consisting of two parallel members connected by rungs", "synonyms": ["ladder"], "image_count": 629, "id": 621, "frequency": "f", "synset": "ladder.n.01"}, {"name": "ladle", "instance_count": 226, "def": "a spoon-shaped vessel with a long handle frequently used to transfer liquids", "synonyms": ["ladle"], "image_count": 89, "id": 622, "frequency": "c", "synset": "ladle.n.01"}, {"name": "ladybug", "instance_count": 68, "def": "small round bright-colored and spotted beetle, typically red and black", "synonyms": ["ladybug", "ladybeetle", "ladybird_beetle"], "image_count": 15, "id": 623, "frequency": "c", "synset": "ladybug.n.01"}, {"name": "lamb_(animal)", "instance_count": 618, "def": "young sheep", "synonyms": ["lamb_(animal)"], "image_count": 134, "id": 624, "frequency": "f", "synset": "lamb.n.01"}, {"name": "lamb-chop", "instance_count": 8, "def": "chop cut from a lamb", "synonyms": ["lamb-chop", "lambchop"], "image_count": 4, "id": 625, "frequency": "r", "synset": "lamb_chop.n.01"}, {"name": "lamp", "instance_count": 4139, "def": "a piece of furniture holding one or more electric light bulbs", "synonyms": ["lamp"], "image_count": 1802, "id": 626, "frequency": "f", "synset": "lamp.n.02"}, {"name": "lamppost", "instance_count": 2234, "def": "a metal post supporting an outdoor lamp (such as a streetlight)", "synonyms": ["lamppost"], "image_count": 595, "id": 627, "frequency": "f", "synset": "lamppost.n.01"}, {"name": "lampshade", "instance_count": 2475, "def": "a protective ornamental shade used to screen a light bulb from direct view", "synonyms": ["lampshade"], "image_count": 1210, "id": 628, "frequency": "f", "synset": "lampshade.n.01"}, {"name": "lantern", "instance_count": 364, "def": "light in a transparent protective case", "synonyms": ["lantern"], "image_count": 48, "id": 629, "frequency": "c", "synset": "lantern.n.01"}, {"name": "lanyard", "instance_count": 1065, "def": "a cord worn around the neck to hold a knife or whistle, etc.", "synonyms": ["lanyard", "laniard"], "image_count": 418, "id": 630, "frequency": "f", "synset": "lanyard.n.02"}, {"name": "laptop_computer", "instance_count": 2852, "def": "a portable computer small enough to use in your lap", "synonyms": ["laptop_computer", "notebook_computer"], "image_count": 1846, "id": 631, "frequency": "f", "synset": "laptop.n.01"}, {"name": "lasagna", "instance_count": 7, "def": "baked dish of layers of lasagna pasta with sauce and cheese and meat or vegetables", "synonyms": ["lasagna", "lasagne"], "image_count": 5, "id": 632, "frequency": "r", "synset": "lasagna.n.01"}, {"name": "latch", "instance_count": 702, "def": "a bar that can be lowered or slid into a groove to fasten a door or gate", "synonyms": ["latch"], "image_count": 221, "id": 633, "frequency": "f", "synset": "latch.n.02"}, {"name": "lawn_mower", "instance_count": 12, "def": "garden tool for mowing grass on lawns", "synonyms": ["lawn_mower"], "image_count": 10, "id": 634, "frequency": "r", "synset": "lawn_mower.n.01"}, {"name": "leather", "instance_count": 20, "def": "an animal skin made smooth and flexible by removing the hair and then tanning", "synonyms": ["leather"], "image_count": 7, "id": 635, "frequency": "r", "synset": "leather.n.01"}, {"name": "legging_(clothing)", "instance_count": 154, "def": "a garment covering the leg (usually extending from the knee to the ankle)", "synonyms": ["legging_(clothing)", "leging_(clothing)", "leg_covering"], "image_count": 76, "id": 636, "frequency": "c", "synset": "legging.n.01"}, {"name": "Lego", "instance_count": 331, "def": "a child's plastic construction set for making models from blocks", "synonyms": ["Lego", "Lego_set"], "image_count": 22, "id": 637, "frequency": "c", "synset": "lego.n.01"}, {"name": "legume", "instance_count": 333, "def": "the fruit or seed of bean or pea plants", "synonyms": ["legume"], "image_count": 10, "id": 638, "frequency": "r", "synset": "legume.n.02"}, {"name": "lemon", "instance_count": 2168, "def": "yellow oval fruit with juicy acidic flesh", "synonyms": ["lemon"], "image_count": 341, "id": 639, "frequency": "f", "synset": "lemon.n.01"}, {"name": "lemonade", "instance_count": 2, "def": "sweetened beverage of diluted lemon juice", "synonyms": ["lemonade"], "image_count": 1, "id": 640, "frequency": "r", "synset": "lemonade.n.01"}, {"name": "lettuce", "instance_count": 5500, "def": "leafy plant commonly eaten in salad or on sandwiches", "synonyms": ["lettuce"], "image_count": 705, "id": 641, "frequency": "f", "synset": "lettuce.n.02"}, {"name": "license_plate", "instance_count": 4392, "def": "a plate mounted on the front and back of car and bearing the car's registration number", "synonyms": ["license_plate", "numberplate"], "image_count": 1900, "id": 642, "frequency": "f", "synset": "license_plate.n.01"}, {"name": "life_buoy", "instance_count": 524, "def": "a ring-shaped life preserver used to prevent drowning (NOT a life-jacket or vest)", "synonyms": ["life_buoy", "lifesaver", "life_belt", "life_ring"], "image_count": 188, "id": 643, "frequency": "f", "synset": "life_buoy.n.01"}, {"name": "life_jacket", "instance_count": 689, "def": "life preserver consisting of a sleeveless jacket of buoyant or inflatable design", "synonyms": ["life_jacket", "life_vest"], "image_count": 227, "id": 644, "frequency": "f", "synset": "life_jacket.n.01"}, {"name": "lightbulb", "instance_count": 7075, "def": "lightblub/source of light", "synonyms": ["lightbulb"], "image_count": 861, "id": 645, "frequency": "f", "synset": "light_bulb.n.01"}, {"name": "lightning_rod", "instance_count": 6, "def": "a metallic conductor that is attached to a high point and leads to the ground", "synonyms": ["lightning_rod", "lightning_conductor"], "image_count": 6, "id": 646, "frequency": "r", "synset": "lightning_rod.n.02"}, {"name": "lime", "instance_count": 1134, "def": "the green acidic fruit of any of various lime trees", "synonyms": ["lime"], "image_count": 115, "id": 647, "frequency": "f", "synset": "lime.n.06"}, {"name": "limousine", "instance_count": 6, "def": "long luxurious car; usually driven by a chauffeur", "synonyms": ["limousine"], "image_count": 5, "id": 648, "frequency": "r", "synset": "limousine.n.01"}, {"name": "lion", "instance_count": 69, "def": "large gregarious predatory cat of Africa and India", "synonyms": ["lion"], "image_count": 43, "id": 649, "frequency": "c", "synset": "lion.n.01"}, {"name": "lip_balm", "instance_count": 29, "def": "a balm applied to the lips", "synonyms": ["lip_balm"], "image_count": 14, "id": 650, "frequency": "c", "synset": "lip_balm.n.01"}, {"name": "liquor", "instance_count": 66, "def": "liquor or beer", "synonyms": ["liquor", "spirits", "hard_liquor", "liqueur", "cordial"], "image_count": 6, "id": 651, "frequency": "r", "synset": "liquor.n.01"}, {"name": "lizard", "instance_count": 22, "def": "a reptile with usually two pairs of legs and a tapering tail", "synonyms": ["lizard"], "image_count": 15, "id": 652, "frequency": "c", "synset": "lizard.n.01"}, {"name": "log", "instance_count": 7363, "def": "a segment of the trunk of a tree when stripped of branches", "synonyms": ["log"], "image_count": 1167, "id": 653, "frequency": "f", "synset": "log.n.01"}, {"name": "lollipop", "instance_count": 59, "def": "hard candy on a stick", "synonyms": ["lollipop"], "image_count": 15, "id": 654, "frequency": "c", "synset": "lollipop.n.02"}, {"name": "speaker_(stero_equipment)", "instance_count": 2029, "def": "electronic device that produces sound often as part of a stereo system", "synonyms": ["speaker_(stero_equipment)"], "image_count": 994, "id": 655, "frequency": "f", "synset": "loudspeaker.n.01"}, {"name": "loveseat", "instance_count": 41, "def": "small sofa that seats two people", "synonyms": ["loveseat"], "image_count": 28, "id": 656, "frequency": "c", "synset": "love_seat.n.01"}, {"name": "machine_gun", "instance_count": 5, "def": "a rapidly firing automatic gun", "synonyms": ["machine_gun"], "image_count": 2, "id": 657, "frequency": "r", "synset": "machine_gun.n.01"}, {"name": "magazine", "instance_count": 1379, "def": "a paperback periodic publication", "synonyms": ["magazine"], "image_count": 338, "id": 658, "frequency": "f", "synset": "magazine.n.02"}, {"name": "magnet", "instance_count": 5638, "def": "a device that attracts iron and produces a magnetic field", "synonyms": ["magnet"], "image_count": 334, "id": 659, "frequency": "f", "synset": "magnet.n.01"}, {"name": "mail_slot", "instance_count": 16, "def": "a slot (usually in a door) through which mail can be delivered", "synonyms": ["mail_slot"], "image_count": 15, "id": 660, "frequency": "c", "synset": "mail_slot.n.01"}, {"name": "mailbox_(at_home)", "instance_count": 240, "def": "a private box for delivery of mail", "synonyms": ["mailbox_(at_home)", "letter_box_(at_home)"], "image_count": 102, "id": 661, "frequency": "f", "synset": "mailbox.n.01"}, {"name": "mallard", "instance_count": 2, "def": "wild dabbling duck from which domestic ducks are descended", "synonyms": ["mallard"], "image_count": 1, "id": 662, "frequency": "r", "synset": "mallard.n.01"}, {"name": "mallet", "instance_count": 16, "def": "a sports implement with a long handle and a hammer-like head used to hit a ball", "synonyms": ["mallet"], "image_count": 8, "id": 663, "frequency": "r", "synset": "mallet.n.01"}, {"name": "mammoth", "instance_count": 2, "def": "any of numerous extinct elephants widely distributed in the Pleistocene", "synonyms": ["mammoth"], "image_count": 1, "id": 664, "frequency": "r", "synset": "mammoth.n.01"}, {"name": "manatee", "instance_count": 1, "def": "sirenian mammal of tropical coastal waters of America", "synonyms": ["manatee"], "image_count": 1, "id": 665, "frequency": "r", "synset": "manatee.n.01"}, {"name": "mandarin_orange", "instance_count": 401, "def": "a somewhat flat reddish-orange loose skinned citrus of China", "synonyms": ["mandarin_orange"], "image_count": 28, "id": 666, "frequency": "c", "synset": "mandarin.n.05"}, {"name": "manger", "instance_count": 126, "def": "a container (usually in a barn or stable) from which cattle or horses feed", "synonyms": ["manger", "trough"], "image_count": 91, "id": 667, "frequency": "c", "synset": "manger.n.01"}, {"name": "manhole", "instance_count": 445, "def": "a hole (usually with a flush cover) through which a person can gain access to an underground structure", "synonyms": ["manhole"], "image_count": 260, "id": 668, "frequency": "f", "synset": "manhole.n.01"}, {"name": "map", "instance_count": 186, "def": "a diagrammatic representation of the earth's surface (or part of it)", "synonyms": ["map"], "image_count": 131, "id": 669, "frequency": "f", "synset": "map.n.01"}, {"name": "marker", "instance_count": 501, "def": "a writing implement for making a mark", "synonyms": ["marker"], "image_count": 128, "id": 670, "frequency": "f", "synset": "marker.n.03"}, {"name": "martini", "instance_count": 3, "def": "a cocktail made of gin (or vodka) with dry vermouth", "synonyms": ["martini"], "image_count": 3, "id": 671, "frequency": "r", "synset": "martini.n.01"}, {"name": "mascot", "instance_count": 10, "def": "a person or animal that is adopted by a team or other group as a symbolic figure", "synonyms": ["mascot"], "image_count": 10, "id": 672, "frequency": "r", "synset": "mascot.n.01"}, {"name": "mashed_potato", "instance_count": 58, "def": "potato that has been peeled and boiled and then mashed", "synonyms": ["mashed_potato"], "image_count": 39, "id": 673, "frequency": "c", "synset": "mashed_potato.n.01"}, {"name": "masher", "instance_count": 2, "def": "a kitchen utensil used for mashing (e.g. potatoes)", "synonyms": ["masher"], "image_count": 2, "id": 674, "frequency": "r", "synset": "masher.n.02"}, {"name": "mask", "instance_count": 1595, "def": "a protective covering worn over the face", "synonyms": ["mask", "facemask"], "image_count": 925, "id": 675, "frequency": "f", "synset": "mask.n.04"}, {"name": "mast", "instance_count": 2985, "def": "a vertical spar for supporting sails", "synonyms": ["mast"], "image_count": 354, "id": 676, "frequency": "f", "synset": "mast.n.01"}, {"name": "mat_(gym_equipment)", "instance_count": 114, "def": "sports equipment consisting of a piece of thick padding on the floor for gymnastics", "synonyms": ["mat_(gym_equipment)", "gym_mat"], "image_count": 31, "id": 677, "frequency": "c", "synset": "mat.n.03"}, {"name": "matchbox", "instance_count": 11, "def": "a box for holding matches", "synonyms": ["matchbox"], "image_count": 10, "id": 678, "frequency": "r", "synset": "matchbox.n.01"}, {"name": "mattress", "instance_count": 354, "def": "a thick pad filled with resilient material used as a bed or part of a bed", "synonyms": ["mattress"], "image_count": 215, "id": 679, "frequency": "f", "synset": "mattress.n.01"}, {"name": "measuring_cup", "instance_count": 139, "def": "graduated cup used to measure liquid or granular ingredients", "synonyms": ["measuring_cup"], "image_count": 71, "id": 680, "frequency": "c", "synset": "measuring_cup.n.01"}, {"name": "measuring_stick", "instance_count": 57, "def": "measuring instrument having a sequence of marks at regular intervals", "synonyms": ["measuring_stick", "ruler_(measuring_stick)", "measuring_rod"], "image_count": 43, "id": 681, "frequency": "c", "synset": "measuring_stick.n.01"}, {"name": "meatball", "instance_count": 174, "def": "ground meat formed into a ball and fried or simmered in broth", "synonyms": ["meatball"], "image_count": 28, "id": 682, "frequency": "c", "synset": "meatball.n.01"}, {"name": "medicine", "instance_count": 243, "def": "something that treats or prevents or alleviates the symptoms of disease", "synonyms": ["medicine"], "image_count": 34, "id": 683, "frequency": "c", "synset": "medicine.n.02"}, {"name": "melon", "instance_count": 167, "def": "fruit of the gourd family having a hard rind and sweet juicy flesh", "synonyms": ["melon"], "image_count": 16, "id": 684, "frequency": "c", "synset": "melon.n.01"}, {"name": "microphone", "instance_count": 435, "def": "device for converting sound waves into electrical energy", "synonyms": ["microphone"], "image_count": 273, "id": 685, "frequency": "f", "synset": "microphone.n.01"}, {"name": "microscope", "instance_count": 3, "def": "magnifier of the image of small objects", "synonyms": ["microscope"], "image_count": 2, "id": 686, "frequency": "r", "synset": "microscope.n.01"}, {"name": "microwave_oven", "instance_count": 1105, "def": "kitchen appliance that cooks food by passing an electromagnetic wave through it", "synonyms": ["microwave_oven"], "image_count": 999, "id": 687, "frequency": "f", "synset": "microwave.n.02"}, {"name": "milestone", "instance_count": 5, "def": "stone post at side of a road to show distances", "synonyms": ["milestone", "milepost"], "image_count": 4, "id": 688, "frequency": "r", "synset": "milestone.n.01"}, {"name": "milk", "instance_count": 227, "def": "a white nutritious liquid secreted by mammals and used as food by human beings", "synonyms": ["milk"], "image_count": 107, "id": 689, "frequency": "f", "synset": "milk.n.01"}, {"name": "milk_can", "instance_count": 8, "def": "can for transporting milk", "synonyms": ["milk_can"], "image_count": 2, "id": 690, "frequency": "r", "synset": "milk_can.n.01"}, {"name": "milkshake", "instance_count": 1, "def": "frothy drink of milk and flavoring and sometimes fruit or ice cream", "synonyms": ["milkshake"], "image_count": 1, "id": 691, "frequency": "r", "synset": "milkshake.n.01"}, {"name": "minivan", "instance_count": 1046, "def": "a small box-shaped passenger van", "synonyms": ["minivan"], "image_count": 454, "id": 692, "frequency": "f", "synset": "minivan.n.01"}, {"name": "mint_candy", "instance_count": 27, "def": "a candy that is flavored with a mint oil", "synonyms": ["mint_candy"], "image_count": 9, "id": 693, "frequency": "r", "synset": "mint.n.05"}, {"name": "mirror", "instance_count": 3490, "def": "polished surface that forms images by reflecting light", "synonyms": ["mirror"], "image_count": 1901, "id": 694, "frequency": "f", "synset": "mirror.n.01"}, {"name": "mitten", "instance_count": 156, "def": "glove that encases the thumb separately and the other four fingers together", "synonyms": ["mitten"], "image_count": 61, "id": 695, "frequency": "c", "synset": "mitten.n.01"}, {"name": "mixer_(kitchen_tool)", "instance_count": 108, "def": "a kitchen utensil that is used for mixing foods", "synonyms": ["mixer_(kitchen_tool)", "stand_mixer"], "image_count": 91, "id": 696, "frequency": "c", "synset": "mixer.n.04"}, {"name": "money", "instance_count": 122, "def": "the official currency issued by a government or national bank", "synonyms": ["money"], "image_count": 46, "id": 697, "frequency": "c", "synset": "money.n.03"}, {"name": "monitor_(computer_equipment) computer_monitor", "instance_count": 2955, "def": "a computer monitor", "synonyms": ["monitor_(computer_equipment) computer_monitor"], "image_count": 1402, "id": 698, "frequency": "f", "synset": "monitor.n.04"}, {"name": "monkey", "instance_count": 166, "def": "any of various long-tailed primates", "synonyms": ["monkey"], "image_count": 74, "id": 699, "frequency": "c", "synset": "monkey.n.01"}, {"name": "motor", "instance_count": 985, "def": "machine that converts other forms of energy into mechanical energy and so imparts motion", "synonyms": ["motor"], "image_count": 421, "id": 700, "frequency": "f", "synset": "motor.n.01"}, {"name": "motor_scooter", "instance_count": 720, "def": "a wheeled vehicle with small wheels and a low-powered engine", "synonyms": ["motor_scooter", "scooter"], "image_count": 226, "id": 701, "frequency": "f", "synset": "motor_scooter.n.01"}, {"name": "motor_vehicle", "instance_count": 64, "def": "a self-propelled wheeled vehicle that does not run on rails", "synonyms": ["motor_vehicle", "automotive_vehicle"], "image_count": 10, "id": 702, "frequency": "r", "synset": "motor_vehicle.n.01"}, {"name": "motorcycle", "instance_count": 5247, "def": "a motor vehicle with two wheels and a strong frame", "synonyms": ["motorcycle"], "image_count": 1720, "id": 703, "frequency": "f", "synset": "motorcycle.n.01"}, {"name": "mound_(baseball)", "instance_count": 269, "def": "(baseball) the slight elevation on which the pitcher stands", "synonyms": ["mound_(baseball)", "pitcher's_mound"], "image_count": 261, "id": 704, "frequency": "f", "synset": "mound.n.01"}, {"name": "mouse_(computer_equipment)", "instance_count": 1832, "def": "a computer input device that controls an on-screen pointer (does not include trackpads / touchpads)", "synonyms": ["mouse_(computer_equipment)", "computer_mouse"], "image_count": 1337, "id": 705, "frequency": "f", "synset": "mouse.n.04"}, {"name": "mousepad", "instance_count": 333, "def": "a small portable pad that provides an operating surface for a computer mouse", "synonyms": ["mousepad"], "image_count": 293, "id": 706, "frequency": "f", "synset": "mousepad.n.01"}, {"name": "muffin", "instance_count": 352, "def": "a sweet quick bread baked in a cup-shaped pan", "synonyms": ["muffin"], "image_count": 62, "id": 707, "frequency": "c", "synset": "muffin.n.01"}, {"name": "mug", "instance_count": 1785, "def": "with handle and usually cylindrical", "synonyms": ["mug"], "image_count": 814, "id": 708, "frequency": "f", "synset": "mug.n.04"}, {"name": "mushroom", "instance_count": 6257, "def": "a common mushroom", "synonyms": ["mushroom"], "image_count": 407, "id": 709, "frequency": "f", "synset": "mushroom.n.02"}, {"name": "music_stool", "instance_count": 6, "def": "a stool for piano players; usually adjustable in height", "synonyms": ["music_stool", "piano_stool"], "image_count": 6, "id": 710, "frequency": "r", "synset": "music_stool.n.01"}, {"name": "musical_instrument", "instance_count": 33, "def": "any of various devices or contrivances that can be used to produce musical tones or sounds", "synonyms": ["musical_instrument", "instrument_(musical)"], "image_count": 16, "id": 711, "frequency": "c", "synset": "musical_instrument.n.01"}, {"name": "nailfile", "instance_count": 10, "def": "a small flat file for shaping the nails", "synonyms": ["nailfile"], "image_count": 7, "id": 712, "frequency": "r", "synset": "nailfile.n.01"}, {"name": "napkin", "instance_count": 3979, "def": "a small piece of table linen or paper that is used to wipe the mouth and to cover the lap in order to protect clothing", "synonyms": ["napkin", "table_napkin", "serviette"], "image_count": 1791, "id": 713, "frequency": "f", "synset": "napkin.n.01"}, {"name": "neckerchief", "instance_count": 4, "def": "a kerchief worn around the neck", "synonyms": ["neckerchief"], "image_count": 2, "id": 714, "frequency": "r", "synset": "neckerchief.n.01"}, {"name": "necklace", "instance_count": 2709, "def": "jewelry consisting of a cord or chain (often bearing gems) worn about the neck as an ornament", "synonyms": ["necklace"], "image_count": 1915, "id": 715, "frequency": "f", "synset": "necklace.n.01"}, {"name": "necktie", "instance_count": 4069, "def": "neckwear consisting of a long narrow piece of material worn under a collar and tied in knot at the front", "synonyms": ["necktie", "tie_(necktie)"], "image_count": 1940, "id": 716, "frequency": "f", "synset": "necktie.n.01"}, {"name": "needle", "instance_count": 61, "def": "a sharp pointed implement (usually metal)", "synonyms": ["needle"], "image_count": 13, "id": 717, "frequency": "c", "synset": "needle.n.03"}, {"name": "nest", "instance_count": 20, "def": "a structure in which animals lay eggs or give birth to their young", "synonyms": ["nest"], "image_count": 16, "id": 718, "frequency": "c", "synset": "nest.n.01"}, {"name": "newspaper", "instance_count": 1179, "def": "a daily or weekly publication on folded sheets containing news, articles, and advertisements", "synonyms": ["newspaper", "paper_(newspaper)"], "image_count": 448, "id": 719, "frequency": "f", "synset": "newspaper.n.01"}, {"name": "newsstand", "instance_count": 39, "def": "a stall where newspapers and other periodicals are sold", "synonyms": ["newsstand"], "image_count": 12, "id": 720, "frequency": "c", "synset": "newsstand.n.01"}, {"name": "nightshirt", "instance_count": 35, "def": "garments designed to be worn in bed", "synonyms": ["nightshirt", "nightwear", "sleepwear", "nightclothes"], "image_count": 18, "id": 721, "frequency": "c", "synset": "nightwear.n.01"}, {"name": "nosebag_(for_animals)", "instance_count": 4, "def": "a canvas bag that is used to feed an animal (such as a horse); covers the muzzle and fastens at the top of the head", "synonyms": ["nosebag_(for_animals)", "feedbag"], "image_count": 4, "id": 722, "frequency": "r", "synset": "nosebag.n.01"}, {"name": "noseband_(for_animals)", "instance_count": 120, "def": "a strap that is the part of a bridle that goes over the animal's nose", "synonyms": ["noseband_(for_animals)", "nosepiece_(for_animals)"], "image_count": 71, "id": 723, "frequency": "c", "synset": "noseband.n.01"}, {"name": "notebook", "instance_count": 290, "def": "a book with blank pages for recording notes or memoranda", "synonyms": ["notebook"], "image_count": 189, "id": 724, "frequency": "f", "synset": "notebook.n.01"}, {"name": "notepad", "instance_count": 187, "def": "a pad of paper for keeping notes", "synonyms": ["notepad"], "image_count": 74, "id": 725, "frequency": "c", "synset": "notepad.n.01"}, {"name": "nut", "instance_count": 790, "def": "a small metal block (usually square or hexagonal) with internal screw thread to be fitted onto a bolt", "synonyms": ["nut"], "image_count": 103, "id": 726, "frequency": "f", "synset": "nut.n.03"}, {"name": "nutcracker", "instance_count": 7, "def": "a hand tool used to crack nuts open", "synonyms": ["nutcracker"], "image_count": 3, "id": 727, "frequency": "r", "synset": "nutcracker.n.01"}, {"name": "oar", "instance_count": 488, "def": "an implement used to propel or steer a boat", "synonyms": ["oar"], "image_count": 110, "id": 728, "frequency": "f", "synset": "oar.n.01"}, {"name": "octopus_(food)", "instance_count": 5, "def": "tentacles of octopus prepared as food", "synonyms": ["octopus_(food)"], "image_count": 5, "id": 729, "frequency": "r", "synset": "octopus.n.01"}, {"name": "octopus_(animal)", "instance_count": 17, "def": "bottom-living cephalopod having a soft oval body with eight long tentacles", "synonyms": ["octopus_(animal)"], "image_count": 9, "id": 730, "frequency": "r", "synset": "octopus.n.02"}, {"name": "oil_lamp", "instance_count": 28, "def": "a lamp that burns oil (as kerosine) for light", "synonyms": ["oil_lamp", "kerosene_lamp", "kerosine_lamp"], "image_count": 15, "id": 731, "frequency": "c", "synset": "oil_lamp.n.01"}, {"name": "olive_oil", "instance_count": 36, "def": "oil from olives", "synonyms": ["olive_oil"], "image_count": 25, "id": 732, "frequency": "c", "synset": "olive_oil.n.01"}, {"name": "omelet", "instance_count": 10, "def": "beaten eggs cooked until just set; may be folded around e.g. ham or cheese or jelly", "synonyms": ["omelet", "omelette"], "image_count": 7, "id": 733, "frequency": "r", "synset": "omelet.n.01"}, {"name": "onion", "instance_count": 9779, "def": "the bulb of an onion plant", "synonyms": ["onion"], "image_count": 647, "id": 734, "frequency": "f", "synset": "onion.n.01"}, {"name": "orange_(fruit)", "instance_count": 13034, "def": "orange (FRUIT of an orange tree)", "synonyms": ["orange_(fruit)"], "image_count": 824, "id": 735, "frequency": "f", "synset": "orange.n.01"}, {"name": "orange_juice", "instance_count": 223, "def": "bottled or freshly squeezed juice of oranges", "synonyms": ["orange_juice"], "image_count": 100, "id": 736, "frequency": "c", "synset": "orange_juice.n.01"}, {"name": "ostrich", "instance_count": 71, "def": "fast-running African flightless bird with two-toed feet; largest living bird", "synonyms": ["ostrich"], "image_count": 47, "id": 737, "frequency": "c", "synset": "ostrich.n.02"}, {"name": "ottoman", "instance_count": 157, "def": "a thick standalone cushion used as a seat or footrest, often next to a chair", "synonyms": ["ottoman", "pouf", "pouffe", "hassock"], "image_count": 121, "id": 738, "frequency": "f", "synset": "ottoman.n.03"}, {"name": "oven", "instance_count": 929, "def": "kitchen appliance used for baking or roasting", "synonyms": ["oven"], "image_count": 731, "id": 739, "frequency": "f", "synset": "oven.n.01"}, {"name": "overalls_(clothing)", "instance_count": 76, "def": "work clothing consisting of denim trousers usually with a bib and shoulder straps", "synonyms": ["overalls_(clothing)"], "image_count": 73, "id": 740, "frequency": "c", "synset": "overall.n.01"}, {"name": "owl", "instance_count": 73, "def": "nocturnal bird of prey with hawk-like beak and claws and large head with front-facing eyes", "synonyms": ["owl"], "image_count": 49, "id": 741, "frequency": "c", "synset": "owl.n.01"}, {"name": "packet", "instance_count": 109, "def": "a small package or bundle", "synonyms": ["packet"], "image_count": 23, "id": 742, "frequency": "c", "synset": "packet.n.03"}, {"name": "inkpad", "instance_count": 12, "def": "absorbent material saturated with ink used to transfer ink evenly to a rubber stamp", "synonyms": ["inkpad", "inking_pad", "stamp_pad"], "image_count": 4, "id": 743, "frequency": "r", "synset": "pad.n.03"}, {"name": "pad", "instance_count": 264, "def": "mostly arm/knee pads labeled", "synonyms": ["pad"], "image_count": 62, "id": 744, "frequency": "c", "synset": "pad.n.04"}, {"name": "paddle", "instance_count": 306, "def": "a short light oar used without an oarlock to propel a canoe or small boat", "synonyms": ["paddle", "boat_paddle"], "image_count": 118, "id": 745, "frequency": "f", "synset": "paddle.n.04"}, {"name": "padlock", "instance_count": 184, "def": "a detachable, portable lock", "synonyms": ["padlock"], "image_count": 99, "id": 746, "frequency": "c", "synset": "padlock.n.01"}, {"name": "paintbrush", "instance_count": 91, "def": "a brush used as an applicator to apply paint", "synonyms": ["paintbrush"], "image_count": 40, "id": 747, "frequency": "c", "synset": "paintbrush.n.01"}, {"name": "painting", "instance_count": 2645, "def": "graphic art consisting of an artistic composition made by applying paints to a surface", "synonyms": ["painting"], "image_count": 1036, "id": 748, "frequency": "f", "synset": "painting.n.01"}, {"name": "pajamas", "instance_count": 163, "def": "loose-fitting nightclothes worn for sleeping or lounging", "synonyms": ["pajamas", "pyjamas"], "image_count": 105, "id": 749, "frequency": "f", "synset": "pajama.n.02"}, {"name": "palette", "instance_count": 68, "def": "board that provides a flat surface on which artists mix paints and the range of colors used", "synonyms": ["palette", "pallet"], "image_count": 21, "id": 750, "frequency": "c", "synset": "palette.n.02"}, {"name": "pan_(for_cooking)", "instance_count": 643, "def": "cooking utensil consisting of a wide metal vessel", "synonyms": ["pan_(for_cooking)", "cooking_pan"], "image_count": 229, "id": 751, "frequency": "f", "synset": "pan.n.01"}, {"name": "pan_(metal_container)", "instance_count": 21, "def": "shallow container made of metal", "synonyms": ["pan_(metal_container)"], "image_count": 7, "id": 752, "frequency": "r", "synset": "pan.n.03"}, {"name": "pancake", "instance_count": 295, "def": "a flat cake of thin batter fried on both sides on a griddle", "synonyms": ["pancake"], "image_count": 72, "id": 753, "frequency": "c", "synset": "pancake.n.01"}, {"name": "pantyhose", "instance_count": 11, "def": "a woman's tights consisting of underpants and stockings", "synonyms": ["pantyhose"], "image_count": 9, "id": 754, "frequency": "r", "synset": "pantyhose.n.01"}, {"name": "papaya", "instance_count": 206, "def": "large oval melon-like tropical fruit with yellowish flesh", "synonyms": ["papaya"], "image_count": 10, "id": 755, "frequency": "r", "synset": "papaya.n.02"}, {"name": "paper_plate", "instance_count": 957, "def": "a disposable plate made of cardboard", "synonyms": ["paper_plate"], "image_count": 328, "id": 756, "frequency": "f", "synset": "paper_plate.n.01"}, {"name": "paper_towel", "instance_count": 600, "def": "a disposable towel made of absorbent paper", "synonyms": ["paper_towel"], "image_count": 468, "id": 757, "frequency": "f", "synset": "paper_towel.n.01"}, {"name": "paperback_book", "instance_count": 3, "def": "a book with paper covers", "synonyms": ["paperback_book", "paper-back_book", "softback_book", "soft-cover_book"], "image_count": 1, "id": 758, "frequency": "r", "synset": "paperback_book.n.01"}, {"name": "paperweight", "instance_count": 4, "def": "a weight used to hold down a stack of papers", "synonyms": ["paperweight"], "image_count": 2, "id": 759, "frequency": "r", "synset": "paperweight.n.01"}, {"name": "parachute", "instance_count": 61, "def": "rescue equipment consisting of a device that fills with air and retards your fall", "synonyms": ["parachute"], "image_count": 24, "id": 760, "frequency": "c", "synset": "parachute.n.01"}, {"name": "parakeet", "instance_count": 46, "def": "any of numerous small slender long-tailed parrots", "synonyms": ["parakeet", "parrakeet", "parroket", "paraquet", "paroquet", "parroquet"], "image_count": 11, "id": 761, "frequency": "c", "synset": "parakeet.n.01"}, {"name": "parasail_(sports)", "instance_count": 385, "def": "parachute that will lift a person up into the air when it is towed by a motorboat or a car", "synonyms": ["parasail_(sports)"], "image_count": 72, "id": 762, "frequency": "c", "synset": "parasail.n.01"}, {"name": "parasol", "instance_count": 45, "def": "a handheld collapsible source of shade", "synonyms": ["parasol", "sunshade"], "image_count": 17, "id": 763, "frequency": "c", "synset": "parasol.n.01"}, {"name": "parchment", "instance_count": 17, "def": "a superior paper resembling sheepskin", "synonyms": ["parchment"], "image_count": 10, "id": 764, "frequency": "r", "synset": "parchment.n.01"}, {"name": "parka", "instance_count": 89, "def": "a kind of heavy jacket (`windcheater' is a British term)", "synonyms": ["parka", "anorak"], "image_count": 17, "id": 765, "frequency": "c", "synset": "parka.n.01"}, {"name": "parking_meter", "instance_count": 1075, "def": "a coin-operated timer located next to a parking space", "synonyms": ["parking_meter"], "image_count": 489, "id": 766, "frequency": "f", "synset": "parking_meter.n.01"}, {"name": "parrot", "instance_count": 76, "def": "usually brightly colored tropical birds with short hooked beaks and the ability to mimic sounds", "synonyms": ["parrot"], "image_count": 47, "id": 767, "frequency": "c", "synset": "parrot.n.01"}, {"name": "passenger_car_(part_of_a_train)", "instance_count": 465, "def": "a railcar where passengers ride", "synonyms": ["passenger_car_(part_of_a_train)", "coach_(part_of_a_train)"], "image_count": 93, "id": 768, "frequency": "c", "synset": "passenger_car.n.01"}, {"name": "passenger_ship", "instance_count": 1, "def": "a ship built to carry passengers", "synonyms": ["passenger_ship"], "image_count": 1, "id": 769, "frequency": "r", "synset": "passenger_ship.n.01"}, {"name": "passport", "instance_count": 12, "def": "a document issued by a country to a citizen allowing that person to travel abroad and re-enter the home country", "synonyms": ["passport"], "image_count": 12, "id": 770, "frequency": "c", "synset": "passport.n.02"}, {"name": "pastry", "instance_count": 4972, "def": "any of various baked foods made of dough or batter", "synonyms": ["pastry"], "image_count": 228, "id": 771, "frequency": "f", "synset": "pastry.n.02"}, {"name": "patty_(food)", "instance_count": 20, "def": "small flat mass of chopped food", "synonyms": ["patty_(food)"], "image_count": 5, "id": 772, "frequency": "r", "synset": "patty.n.01"}, {"name": "pea_(food)", "instance_count": 1869, "def": "seed of a pea plant used for food", "synonyms": ["pea_(food)"], "image_count": 76, "id": 773, "frequency": "c", "synset": "pea.n.01"}, {"name": "peach", "instance_count": 1041, "def": "downy juicy fruit with sweet yellowish or whitish flesh", "synonyms": ["peach"], "image_count": 71, "id": 774, "frequency": "c", "synset": "peach.n.03"}, {"name": "peanut_butter", "instance_count": 50, "def": "a spread made from ground peanuts", "synonyms": ["peanut_butter"], "image_count": 30, "id": 775, "frequency": "c", "synset": "peanut_butter.n.01"}, {"name": "pear", "instance_count": 1069, "def": "sweet juicy gritty-textured fruit available in many varieties", "synonyms": ["pear"], "image_count": 109, "id": 776, "frequency": "f", "synset": "pear.n.01"}, {"name": "peeler_(tool_for_fruit_and_vegetables)", "instance_count": 18, "def": "a device for peeling vegetables or fruits", "synonyms": ["peeler_(tool_for_fruit_and_vegetables)"], "image_count": 14, "id": 777, "frequency": "c", "synset": "peeler.n.03"}, {"name": "wooden_leg", "instance_count": 1, "def": "a prosthesis that replaces a missing leg", "synonyms": ["wooden_leg", "pegleg"], "image_count": 1, "id": 778, "frequency": "r", "synset": "peg.n.04"}, {"name": "pegboard", "instance_count": 9, "def": "a board perforated with regularly spaced holes into which pegs can be fitted", "synonyms": ["pegboard"], "image_count": 8, "id": 779, "frequency": "r", "synset": "pegboard.n.01"}, {"name": "pelican", "instance_count": 76, "def": "large long-winged warm-water seabird having a large bill with a distensible pouch for fish", "synonyms": ["pelican"], "image_count": 26, "id": 780, "frequency": "c", "synset": "pelican.n.01"}, {"name": "pen", "instance_count": 987, "def": "a writing implement with a point from which ink flows", "synonyms": ["pen"], "image_count": 339, "id": 781, "frequency": "f", "synset": "pen.n.01"}, {"name": "pencil", "instance_count": 543, "def": "a thin cylindrical pointed writing implement made of wood and graphite", "synonyms": ["pencil"], "image_count": 153, "id": 782, "frequency": "f", "synset": "pencil.n.01"}, {"name": "pencil_box", "instance_count": 2, "def": "a box for holding pencils", "synonyms": ["pencil_box", "pencil_case"], "image_count": 2, "id": 783, "frequency": "r", "synset": "pencil_box.n.01"}, {"name": "pencil_sharpener", "instance_count": 4, "def": "a rotary implement for sharpening the point on pencils", "synonyms": ["pencil_sharpener"], "image_count": 3, "id": 784, "frequency": "r", "synset": "pencil_sharpener.n.01"}, {"name": "pendulum", "instance_count": 18, "def": "an apparatus consisting of an object mounted so that it swings freely under the influence of gravity", "synonyms": ["pendulum"], "image_count": 8, "id": 785, "frequency": "r", "synset": "pendulum.n.01"}, {"name": "penguin", "instance_count": 229, "def": "short-legged flightless birds of cold southern regions having webbed feet and wings modified as flippers", "synonyms": ["penguin"], "image_count": 47, "id": 786, "frequency": "c", "synset": "penguin.n.01"}, {"name": "pennant", "instance_count": 235, "def": "a flag longer than it is wide (and often tapering)", "synonyms": ["pennant"], "image_count": 8, "id": 787, "frequency": "r", "synset": "pennant.n.02"}, {"name": "penny_(coin)", "instance_count": 15, "def": "a coin worth one-hundredth of the value of the basic unit", "synonyms": ["penny_(coin)"], "image_count": 6, "id": 788, "frequency": "r", "synset": "penny.n.02"}, {"name": "pepper", "instance_count": 697, "def": "pungent seasoning from the berry of the common pepper plant; whole or ground", "synonyms": ["pepper", "peppercorn"], "image_count": 116, "id": 789, "frequency": "f", "synset": "pepper.n.03"}, {"name": "pepper_mill", "instance_count": 91, "def": "a mill for grinding pepper", "synonyms": ["pepper_mill", "pepper_grinder"], "image_count": 69, "id": 790, "frequency": "c", "synset": "pepper_mill.n.01"}, {"name": "perfume", "instance_count": 28, "def": "a toiletry that emits and diffuses a fragrant odor", "synonyms": ["perfume"], "image_count": 13, "id": 791, "frequency": "c", "synset": "perfume.n.02"}, {"name": "persimmon", "instance_count": 22, "def": "orange fruit resembling a plum; edible when fully ripe", "synonyms": ["persimmon"], "image_count": 6, "id": 792, "frequency": "r", "synset": "persimmon.n.02"}, {"name": "person", "instance_count": 13439, "def": "a human being", "synonyms": ["person", "baby", "child", "boy", "girl", "man", "woman", "human"], "image_count": 1928, "id": 793, "frequency": "f", "synset": "person.n.01"}, {"name": "pet", "instance_count": 103, "def": "a domesticated animal kept for companionship or amusement", "synonyms": ["pet"], "image_count": 79, "id": 794, "frequency": "c", "synset": "pet.n.01"}, {"name": "pew_(church_bench)", "instance_count": 194, "def": "long bench with backs; used in church by the congregation", "synonyms": ["pew_(church_bench)", "church_bench"], "image_count": 14, "id": 795, "frequency": "c", "synset": "pew.n.01"}, {"name": "phonebook", "instance_count": 24, "def": "a directory containing an alphabetical list of telephone subscribers and their telephone numbers", "synonyms": ["phonebook", "telephone_book", "telephone_directory"], "image_count": 7, "id": 796, "frequency": "r", "synset": "phonebook.n.01"}, {"name": "phonograph_record", "instance_count": 138, "def": "sound recording consisting of a typically black disk with a continuous groove", "synonyms": ["phonograph_record", "phonograph_recording", "record_(phonograph_recording)"], "image_count": 20, "id": 797, "frequency": "c", "synset": "phonograph_record.n.01"}, {"name": "piano", "instance_count": 126, "def": "a keyboard instrument that is played by depressing keys that cause hammers to strike tuned strings and produce sounds", "synonyms": ["piano"], "image_count": 114, "id": 798, "frequency": "f", "synset": "piano.n.01"}, {"name": "pickle", "instance_count": 632, "def": "vegetables (especially cucumbers) preserved in brine or vinegar", "synonyms": ["pickle"], "image_count": 221, "id": 799, "frequency": "f", "synset": "pickle.n.01"}, {"name": "pickup_truck", "instance_count": 838, "def": "a light truck with an open body and low sides and a tailboard", "synonyms": ["pickup_truck"], "image_count": 502, "id": 800, "frequency": "f", "synset": "pickup.n.01"}, {"name": "pie", "instance_count": 228, "def": "dish baked in pastry-lined pan often with a pastry top", "synonyms": ["pie"], "image_count": 62, "id": 801, "frequency": "c", "synset": "pie.n.01"}, {"name": "pigeon", "instance_count": 1850, "def": "wild and domesticated birds having a heavy body and short legs", "synonyms": ["pigeon"], "image_count": 87, "id": 802, "frequency": "c", "synset": "pigeon.n.01"}, {"name": "piggy_bank", "instance_count": 5, "def": "a child's coin bank (often shaped like a pig)", "synonyms": ["piggy_bank", "penny_bank"], "image_count": 4, "id": 803, "frequency": "r", "synset": "piggy_bank.n.01"}, {"name": "pillow", "instance_count": 6115, "def": "a cushion to support the head of a sleeping person", "synonyms": ["pillow"], "image_count": 1912, "id": 804, "frequency": "f", "synset": "pillow.n.01"}, {"name": "pin_(non_jewelry)", "instance_count": 112, "def": "a small slender (often pointed) piece of wood or metal used to support or fasten or attach things", "synonyms": ["pin_(non_jewelry)"], "image_count": 7, "id": 805, "frequency": "r", "synset": "pin.n.09"}, {"name": "pineapple", "instance_count": 1636, "def": "large sweet fleshy tropical fruit with a tuft of stiff leaves", "synonyms": ["pineapple"], "image_count": 186, "id": 806, "frequency": "f", "synset": "pineapple.n.02"}, {"name": "pinecone", "instance_count": 141, "def": "the seed-producing cone of a pine tree", "synonyms": ["pinecone"], "image_count": 18, "id": 807, "frequency": "c", "synset": "pinecone.n.01"}, {"name": "ping-pong_ball", "instance_count": 4, "def": "light hollow ball used in playing table tennis", "synonyms": ["ping-pong_ball"], "image_count": 4, "id": 808, "frequency": "r", "synset": "ping-pong_ball.n.01"}, {"name": "pinwheel", "instance_count": 172, "def": "a toy consisting of vanes of colored paper or plastic that is pinned to a stick and spins when it is pointed into the wind", "synonyms": ["pinwheel"], "image_count": 3, "id": 809, "frequency": "r", "synset": "pinwheel.n.03"}, {"name": "tobacco_pipe", "instance_count": 7, "def": "a tube with a small bowl at one end; used for smoking tobacco", "synonyms": ["tobacco_pipe"], "image_count": 7, "id": 810, "frequency": "r", "synset": "pipe.n.01"}, {"name": "pipe", "instance_count": 4762, "def": "a long tube made of metal or plastic that is used to carry water or oil or gas etc.", "synonyms": ["pipe", "piping"], "image_count": 1413, "id": 811, "frequency": "f", "synset": "pipe.n.02"}, {"name": "pistol", "instance_count": 9, "def": "a firearm that is held and fired with one hand", "synonyms": ["pistol", "handgun"], "image_count": 7, "id": 812, "frequency": "r", "synset": "pistol.n.01"}, {"name": "pita_(bread)", "instance_count": 28, "def": "usually small round bread that can open into a pocket for filling", "synonyms": ["pita_(bread)", "pocket_bread"], "image_count": 12, "id": 813, "frequency": "c", "synset": "pita.n.01"}, {"name": "pitcher_(vessel_for_liquid)", "instance_count": 488, "def": "an open vessel with a handle and a spout for pouring", "synonyms": ["pitcher_(vessel_for_liquid)", "ewer"], "image_count": 248, "id": 814, "frequency": "f", "synset": "pitcher.n.02"}, {"name": "pitchfork", "instance_count": 4, "def": "a long-handled hand tool with sharp widely spaced prongs for lifting and pitching hay", "synonyms": ["pitchfork"], "image_count": 4, "id": 815, "frequency": "r", "synset": "pitchfork.n.01"}, {"name": "pizza", "instance_count": 4103, "def": "Italian open pie made of thin bread dough spread with a spiced mixture of e.g. tomato sauce and cheese", "synonyms": ["pizza"], "image_count": 1881, "id": 816, "frequency": "f", "synset": "pizza.n.01"}, {"name": "place_mat", "instance_count": 1123, "def": "a mat placed on a table for an individual place setting", "synonyms": ["place_mat"], "image_count": 529, "id": 817, "frequency": "f", "synset": "place_mat.n.01"}, {"name": "plate", "instance_count": 5214, "def": "dish on which food is served or from which food is eaten", "synonyms": ["plate"], "image_count": 1932, "id": 818, "frequency": "f", "synset": "plate.n.04"}, {"name": "platter", "instance_count": 148, "def": "a large shallow dish used for serving food", "synonyms": ["platter"], "image_count": 50, "id": 819, "frequency": "c", "synset": "platter.n.01"}, {"name": "playpen", "instance_count": 3, "def": "a portable enclosure in which babies may be left to play", "synonyms": ["playpen"], "image_count": 3, "id": 820, "frequency": "r", "synset": "playpen.n.01"}, {"name": "pliers", "instance_count": 49, "def": "a gripping hand tool with two hinged arms and (usually) serrated jaws", "synonyms": ["pliers", "plyers"], "image_count": 28, "id": 821, "frequency": "c", "synset": "pliers.n.01"}, {"name": "plow_(farm_equipment)", "instance_count": 12, "def": "a farm tool having one or more heavy blades to break the soil and cut a furrow prior to sowing", "synonyms": ["plow_(farm_equipment)", "plough_(farm_equipment)"], "image_count": 10, "id": 822, "frequency": "r", "synset": "plow.n.01"}, {"name": "plume", "instance_count": 11, "def": "a feather or cluster of feathers worn as an ornament", "synonyms": ["plume"], "image_count": 5, "id": 823, "frequency": "r", "synset": "plume.n.02"}, {"name": "pocket_watch", "instance_count": 20, "def": "a watch that is carried in a small watch pocket", "synonyms": ["pocket_watch"], "image_count": 5, "id": 824, "frequency": "r", "synset": "pocket_watch.n.01"}, {"name": "pocketknife", "instance_count": 21, "def": "a knife with a blade that folds into the handle; suitable for carrying in the pocket", "synonyms": ["pocketknife"], "image_count": 18, "id": 825, "frequency": "c", "synset": "pocketknife.n.01"}, {"name": "poker_(fire_stirring_tool)", "instance_count": 34, "def": "fire iron consisting of a metal rod with a handle; used to stir a fire", "synonyms": ["poker_(fire_stirring_tool)", "stove_poker", "fire_hook"], "image_count": 14, "id": 826, "frequency": "c", "synset": "poker.n.01"}, {"name": "pole", "instance_count": 14276, "def": "a long (usually round) rod of wood or metal or plastic", "synonyms": ["pole", "post"], "image_count": 1890, "id": 827, "frequency": "f", "synset": "pole.n.01"}, {"name": "polo_shirt", "instance_count": 1695, "def": "a shirt with short sleeves designed for comfort and casual wear", "synonyms": ["polo_shirt", "sport_shirt"], "image_count": 660, "id": 828, "frequency": "f", "synset": "polo_shirt.n.01"}, {"name": "poncho", "instance_count": 14, "def": "a blanket-like cloak with a hole in the center for the head", "synonyms": ["poncho"], "image_count": 8, "id": 829, "frequency": "r", "synset": "poncho.n.01"}, {"name": "pony", "instance_count": 57, "def": "any of various breeds of small gentle horses usually less than five feet high at the shoulder", "synonyms": ["pony"], "image_count": 25, "id": 830, "frequency": "c", "synset": "pony.n.05"}, {"name": "pool_table", "instance_count": 10, "def": "game equipment consisting of a heavy table on which pool is played", "synonyms": ["pool_table", "billiard_table", "snooker_table"], "image_count": 10, "id": 831, "frequency": "r", "synset": "pool_table.n.01"}, {"name": "pop_(soda)", "instance_count": 951, "def": "a sweet drink containing carbonated water and flavoring", "synonyms": ["pop_(soda)", "soda_(pop)", "tonic", "soft_drink"], "image_count": 218, "id": 832, "frequency": "f", "synset": "pop.n.02"}, {"name": "postbox_(public)", "instance_count": 57, "def": "public box for deposit of mail", "synonyms": ["postbox_(public)", "mailbox_(public)"], "image_count": 36, "id": 833, "frequency": "c", "synset": "postbox.n.01"}, {"name": "postcard", "instance_count": 276, "def": "a card for sending messages by post without an envelope", "synonyms": ["postcard", "postal_card", "mailing-card"], "image_count": 16, "id": 834, "frequency": "c", "synset": "postcard.n.01"}, {"name": "poster", "instance_count": 3378, "def": "a sign posted in a public place as an advertisement", "synonyms": ["poster", "placard"], "image_count": 808, "id": 835, "frequency": "f", "synset": "poster.n.01"}, {"name": "pot", "instance_count": 1719, "def": "metal or earthenware cooking vessel that is usually round and deep; often has a handle and lid", "synonyms": ["pot"], "image_count": 479, "id": 836, "frequency": "f", "synset": "pot.n.01"}, {"name": "flowerpot", "instance_count": 3902, "def": "a container in which plants are cultivated", "synonyms": ["flowerpot"], "image_count": 1404, "id": 837, "frequency": "f", "synset": "pot.n.04"}, {"name": "potato", "instance_count": 4393, "def": "an edible tuber native to South America", "synonyms": ["potato"], "image_count": 307, "id": 838, "frequency": "f", "synset": "potato.n.01"}, {"name": "potholder", "instance_count": 112, "def": "an insulated pad for holding hot pots", "synonyms": ["potholder"], "image_count": 57, "id": 839, "frequency": "c", "synset": "potholder.n.01"}, {"name": "pottery", "instance_count": 272, "def": "ceramic ware made from clay and baked in a kiln", "synonyms": ["pottery", "clayware"], "image_count": 28, "id": 840, "frequency": "c", "synset": "pottery.n.01"}, {"name": "pouch", "instance_count": 131, "def": "a small or medium size container for holding or carrying things", "synonyms": ["pouch"], "image_count": 80, "id": 841, "frequency": "c", "synset": "pouch.n.01"}, {"name": "power_shovel", "instance_count": 16, "def": "a machine for excavating", "synonyms": ["power_shovel", "excavator", "digger"], "image_count": 11, "id": 842, "frequency": "c", "synset": "power_shovel.n.01"}, {"name": "prawn", "instance_count": 779, "def": "any of various edible decapod crustaceans", "synonyms": ["prawn", "shrimp"], "image_count": 92, "id": 843, "frequency": "c", "synset": "prawn.n.01"}, {"name": "pretzel", "instance_count": 179, "def": "glazed and salted cracker typically in the shape of a loose knot", "synonyms": ["pretzel"], "image_count": 20, "id": 844, "frequency": "c", "synset": "pretzel.n.01"}, {"name": "printer", "instance_count": 217, "def": "a machine that prints", "synonyms": ["printer", "printing_machine"], "image_count": 194, "id": 845, "frequency": "f", "synset": "printer.n.03"}, {"name": "projectile_(weapon)", "instance_count": 64, "def": "a weapon that is forcibly thrown or projected at a targets", "synonyms": ["projectile_(weapon)", "missile"], "image_count": 23, "id": 846, "frequency": "c", "synset": "projectile.n.01"}, {"name": "projector", "instance_count": 54, "def": "an optical instrument that projects an enlarged image onto a screen", "synonyms": ["projector"], "image_count": 52, "id": 847, "frequency": "c", "synset": "projector.n.02"}, {"name": "propeller", "instance_count": 1458, "def": "a mechanical device that rotates to push against air or water", "synonyms": ["propeller", "propellor"], "image_count": 673, "id": 848, "frequency": "f", "synset": "propeller.n.01"}, {"name": "prune", "instance_count": 8, "def": "dried plum", "synonyms": ["prune"], "image_count": 2, "id": 849, "frequency": "r", "synset": "prune.n.01"}, {"name": "pudding", "instance_count": 2, "def": "any of various soft thick unsweetened baked dishes", "synonyms": ["pudding"], "image_count": 2, "id": 850, "frequency": "r", "synset": "pudding.n.01"}, {"name": "puffer_(fish)", "instance_count": 2, "def": "fishes whose elongated spiny body can inflate itself with water or air to form a globe", "synonyms": ["puffer_(fish)", "pufferfish", "blowfish", "globefish"], "image_count": 1, "id": 851, "frequency": "r", "synset": "puffer.n.02"}, {"name": "puffin", "instance_count": 4, "def": "seabirds having short necks and brightly colored compressed bills", "synonyms": ["puffin"], "image_count": 2, "id": 852, "frequency": "r", "synset": "puffin.n.01"}, {"name": "pug-dog", "instance_count": 13, "def": "small compact smooth-coated breed of Asiatic origin having a tightly curled tail and broad flat wrinkled muzzle", "synonyms": ["pug-dog"], "image_count": 8, "id": 853, "frequency": "r", "synset": "pug.n.01"}, {"name": "pumpkin", "instance_count": 1192, "def": "usually large pulpy deep-yellow round fruit of the squash family maturing in late summer or early autumn", "synonyms": ["pumpkin"], "image_count": 80, "id": 854, "frequency": "c", "synset": "pumpkin.n.02"}, {"name": "puncher", "instance_count": 6, "def": "a tool for making holes or indentations", "synonyms": ["puncher"], "image_count": 3, "id": 855, "frequency": "r", "synset": "punch.n.03"}, {"name": "puppet", "instance_count": 18, "def": "a small figure of a person operated from above with strings by a puppeteer", "synonyms": ["puppet", "marionette"], "image_count": 3, "id": 856, "frequency": "r", "synset": "puppet.n.01"}, {"name": "puppy", "instance_count": 57, "def": "a young dog", "synonyms": ["puppy"], "image_count": 15, "id": 857, "frequency": "c", "synset": "puppy.n.01"}, {"name": "quesadilla", "instance_count": 6, "def": "a tortilla that is filled with cheese and heated", "synonyms": ["quesadilla"], "image_count": 2, "id": 858, "frequency": "r", "synset": "quesadilla.n.01"}, {"name": "quiche", "instance_count": 33, "def": "a tart filled with rich unsweetened custard; often contains other ingredients (as cheese or ham or seafood or vegetables)", "synonyms": ["quiche"], "image_count": 10, "id": 859, "frequency": "r", "synset": "quiche.n.02"}, {"name": "quilt", "instance_count": 513, "def": "bedding made of two layers of cloth filled with stuffing and stitched together", "synonyms": ["quilt", "comforter"], "image_count": 386, "id": 860, "frequency": "f", "synset": "quilt.n.01"}, {"name": "rabbit", "instance_count": 139, "def": "any of various burrowing animals of the family Leporidae having long ears and short tails", "synonyms": ["rabbit"], "image_count": 65, "id": 861, "frequency": "c", "synset": "rabbit.n.01"}, {"name": "race_car", "instance_count": 6, "def": "a fast car that competes in races", "synonyms": ["race_car", "racing_car"], "image_count": 3, "id": 862, "frequency": "r", "synset": "racer.n.02"}, {"name": "racket", "instance_count": 64, "def": "a sports implement used to strike a ball in various games", "synonyms": ["racket", "racquet"], "image_count": 35, "id": 863, "frequency": "c", "synset": "racket.n.04"}, {"name": "radar", "instance_count": 13, "def": "measuring instrument in which the echo of a pulse of microwave radiation is used to detect and locate distant objects", "synonyms": ["radar"], "image_count": 5, "id": 864, "frequency": "r", "synset": "radar.n.01"}, {"name": "radiator", "instance_count": 195, "def": "a mechanism consisting of a metal honeycomb through which hot fluids circulate", "synonyms": ["radiator"], "image_count": 180, "id": 865, "frequency": "f", "synset": "radiator.n.03"}, {"name": "radio_receiver", "instance_count": 123, "def": "an electronic receiver that detects and demodulates and amplifies transmitted radio signals", "synonyms": ["radio_receiver", "radio_set", "radio", "tuner_(radio)"], "image_count": 99, "id": 866, "frequency": "c", "synset": "radio_receiver.n.01"}, {"name": "radish", "instance_count": 519, "def": "pungent edible root of any of various cultivated radish plants", "synonyms": ["radish", "daikon"], "image_count": 49, "id": 867, "frequency": "c", "synset": "radish.n.03"}, {"name": "raft", "instance_count": 66, "def": "a flat float (usually made of logs or planks) that can be used for transport or as a platform for swimmers", "synonyms": ["raft"], "image_count": 28, "id": 868, "frequency": "c", "synset": "raft.n.01"}, {"name": "rag_doll", "instance_count": 3, "def": "a cloth doll that is stuffed and (usually) painted", "synonyms": ["rag_doll"], "image_count": 1, "id": 869, "frequency": "r", "synset": "rag_doll.n.01"}, {"name": "raincoat", "instance_count": 303, "def": "a water-resistant coat", "synonyms": ["raincoat", "waterproof_jacket"], "image_count": 52, "id": 870, "frequency": "c", "synset": "raincoat.n.01"}, {"name": "ram_(animal)", "instance_count": 132, "def": "uncastrated adult male sheep", "synonyms": ["ram_(animal)"], "image_count": 36, "id": 871, "frequency": "c", "synset": "ram.n.05"}, {"name": "raspberry", "instance_count": 778, "def": "red or black edible aggregate berries usually smaller than the related blackberries", "synonyms": ["raspberry"], "image_count": 70, "id": 872, "frequency": "c", "synset": "raspberry.n.02"}, {"name": "rat", "instance_count": 6, "def": "any of various long-tailed rodents similar to but larger than a mouse", "synonyms": ["rat"], "image_count": 6, "id": 873, "frequency": "r", "synset": "rat.n.01"}, {"name": "razorblade", "instance_count": 35, "def": "a blade that has very sharp edge", "synonyms": ["razorblade"], "image_count": 29, "id": 874, "frequency": "c", "synset": "razorblade.n.01"}, {"name": "reamer_(juicer)", "instance_count": 26, "def": "a squeezer with a conical ridged center that is used for squeezing juice from citrus fruit", "synonyms": ["reamer_(juicer)", "juicer", "juice_reamer"], "image_count": 24, "id": 875, "frequency": "c", "synset": "reamer.n.01"}, {"name": "rearview_mirror", "instance_count": 3650, "def": "vehicle mirror (side or rearview)", "synonyms": ["rearview_mirror"], "image_count": 1115, "id": 876, "frequency": "f", "synset": "rearview_mirror.n.01"}, {"name": "receipt", "instance_count": 89, "def": "an acknowledgment (usually tangible) that payment has been made", "synonyms": ["receipt"], "image_count": 61, "id": 877, "frequency": "c", "synset": "receipt.n.02"}, {"name": "recliner", "instance_count": 28, "def": "an armchair whose back can be lowered and foot can be raised to allow the sitter to recline in it", "synonyms": ["recliner", "reclining_chair", "lounger_(chair)"], "image_count": 18, "id": 878, "frequency": "c", "synset": "recliner.n.01"}, {"name": "record_player", "instance_count": 22, "def": "machine in which rotating records cause a stylus to vibrate and the vibrations are amplified acoustically or electronically", "synonyms": ["record_player", "phonograph_(record_player)", "turntable"], "image_count": 18, "id": 879, "frequency": "c", "synset": "record_player.n.01"}, {"name": "reflector", "instance_count": 3426, "def": "device that reflects light, radiation, etc.", "synonyms": ["reflector"], "image_count": 665, "id": 880, "frequency": "f", "synset": "reflector.n.01"}, {"name": "remote_control", "instance_count": 2467, "def": "a device that can be used to control a machine or apparatus from a distance", "synonyms": ["remote_control"], "image_count": 1096, "id": 881, "frequency": "f", "synset": "remote_control.n.01"}, {"name": "rhinoceros", "instance_count": 50, "def": "massive powerful herbivorous odd-toed ungulate of southeast Asia and Africa having very thick skin and one or two horns on the snout", "synonyms": ["rhinoceros"], "image_count": 29, "id": 882, "frequency": "c", "synset": "rhinoceros.n.01"}, {"name": "rib_(food)", "instance_count": 32, "def": "cut of meat including one or more ribs", "synonyms": ["rib_(food)"], "image_count": 8, "id": 883, "frequency": "r", "synset": "rib.n.03"}, {"name": "rifle", "instance_count": 37, "def": "a shoulder firearm with a long barrel", "synonyms": ["rifle"], "image_count": 14, "id": 884, "frequency": "c", "synset": "rifle.n.01"}, {"name": "ring", "instance_count": 2314, "def": "jewelry consisting of a circlet of precious metal (often set with jewels) worn on the finger", "synonyms": ["ring"], "image_count": 1622, "id": 885, "frequency": "f", "synset": "ring.n.08"}, {"name": "river_boat", "instance_count": 3, "def": "a boat used on rivers or to ply a river", "synonyms": ["river_boat"], "image_count": 2, "id": 886, "frequency": "r", "synset": "river_boat.n.01"}, {"name": "road_map", "instance_count": 3, "def": "(NOT A ROAD) a MAP showing roads (for automobile travel)", "synonyms": ["road_map"], "image_count": 3, "id": 887, "frequency": "r", "synset": "road_map.n.02"}, {"name": "robe", "instance_count": 77, "def": "any loose flowing garment", "synonyms": ["robe"], "image_count": 32, "id": 888, "frequency": "c", "synset": "robe.n.01"}, {"name": "rocking_chair", "instance_count": 70, "def": "a chair mounted on rockers", "synonyms": ["rocking_chair"], "image_count": 55, "id": 889, "frequency": "c", "synset": "rocking_chair.n.01"}, {"name": "rodent", "instance_count": 2, "def": "relatively small placental mammals having a single pair of constantly growing incisor teeth specialized for gnawing", "synonyms": ["rodent"], "image_count": 1, "id": 890, "frequency": "r", "synset": "rodent.n.01"}, {"name": "roller_skate", "instance_count": 35, "def": "a shoe with pairs of rollers (small hard wheels) fixed to the sole", "synonyms": ["roller_skate"], "image_count": 10, "id": 891, "frequency": "r", "synset": "roller_skate.n.01"}, {"name": "Rollerblade", "instance_count": 31, "def": "an in-line variant of a roller skate", "synonyms": ["Rollerblade"], "image_count": 10, "id": 892, "frequency": "r", "synset": "rollerblade.n.01"}, {"name": "rolling_pin", "instance_count": 52, "def": "utensil consisting of a cylinder (usually of wood) with a handle at each end; used to roll out dough", "synonyms": ["rolling_pin"], "image_count": 47, "id": 893, "frequency": "c", "synset": "rolling_pin.n.01"}, {"name": "root_beer", "instance_count": 3, "def": "carbonated drink containing extracts of roots and herbs", "synonyms": ["root_beer"], "image_count": 3, "id": 894, "frequency": "r", "synset": "root_beer.n.01"}, {"name": "router_(computer_equipment)", "instance_count": 41, "def": "a device that forwards data packets between computer networks", "synonyms": ["router_(computer_equipment)"], "image_count": 29, "id": 895, "frequency": "c", "synset": "router.n.02"}, {"name": "rubber_band", "instance_count": 574, "def": "a narrow band of elastic rubber used to hold things (such as papers) together", "synonyms": ["rubber_band", "elastic_band"], "image_count": 342, "id": 896, "frequency": "f", "synset": "rubber_band.n.01"}, {"name": "runner_(carpet)", "instance_count": 32, "def": "a long narrow carpet", "synonyms": ["runner_(carpet)"], "image_count": 25, "id": 897, "frequency": "c", "synset": "runner.n.08"}, {"name": "plastic_bag", "instance_count": 3631, "def": "a bag made of paper or plastic for holding customer's purchases", "synonyms": ["plastic_bag", "paper_bag"], "image_count": 1469, "id": 898, "frequency": "f", "synset": "sack.n.01"}, {"name": "saddle_(on_an_animal)", "instance_count": 955, "def": "a seat for the rider of a horse or camel", "synonyms": ["saddle_(on_an_animal)"], "image_count": 521, "id": 899, "frequency": "f", "synset": "saddle.n.01"}, {"name": "saddle_blanket", "instance_count": 648, "def": "stable gear consisting of a blanket placed under the saddle", "synonyms": ["saddle_blanket", "saddlecloth", "horse_blanket"], "image_count": 347, "id": 900, "frequency": "f", "synset": "saddle_blanket.n.01"}, {"name": "saddlebag", "instance_count": 56, "def": "a large bag (or pair of bags) hung over a saddle", "synonyms": ["saddlebag"], "image_count": 35, "id": 901, "frequency": "c", "synset": "saddlebag.n.01"}, {"name": "safety_pin", "instance_count": 15, "def": "a pin in the form of a clasp; has a guard so the point of the pin will not stick the user", "synonyms": ["safety_pin"], "image_count": 7, "id": 902, "frequency": "r", "synset": "safety_pin.n.01"}, {"name": "sail", "instance_count": 863, "def": "a large piece of fabric by means of which wind is used to propel a sailing vessel", "synonyms": ["sail"], "image_count": 207, "id": 903, "frequency": "f", "synset": "sail.n.01"}, {"name": "salad", "instance_count": 171, "def": "food mixtures either arranged on a plate or tossed and served with a moist dressing; usually consisting of or including greens", "synonyms": ["salad"], "image_count": 108, "id": 904, "frequency": "f", "synset": "salad.n.01"}, {"name": "salad_plate", "instance_count": 6, "def": "a plate or bowl for individual servings of salad", "synonyms": ["salad_plate", "salad_bowl"], "image_count": 2, "id": 905, "frequency": "r", "synset": "salad_plate.n.01"}, {"name": "salami", "instance_count": 290, "def": "highly seasoned fatty sausage of pork and beef usually dried", "synonyms": ["salami"], "image_count": 34, "id": 906, "frequency": "c", "synset": "salami.n.01"}, {"name": "salmon_(fish)", "instance_count": 27, "def": "any of various large food and game fishes of northern waters", "synonyms": ["salmon_(fish)"], "image_count": 12, "id": 907, "frequency": "c", "synset": "salmon.n.01"}, {"name": "salmon_(food)", "instance_count": 14, "def": "flesh of any of various marine or freshwater fish of the family Salmonidae", "synonyms": ["salmon_(food)"], "image_count": 10, "id": 908, "frequency": "r", "synset": "salmon.n.03"}, {"name": "salsa", "instance_count": 22, "def": "spicy sauce of tomatoes and onions and chili peppers to accompany Mexican foods", "synonyms": ["salsa"], "image_count": 13, "id": 909, "frequency": "c", "synset": "salsa.n.01"}, {"name": "saltshaker", "instance_count": 543, "def": "a shaker with a perforated top for sprinkling salt", "synonyms": ["saltshaker"], "image_count": 361, "id": 910, "frequency": "f", "synset": "saltshaker.n.01"}, {"name": "sandal_(type_of_shoe)", "instance_count": 3145, "def": "a shoe consisting of a sole fastened by straps to the foot", "synonyms": ["sandal_(type_of_shoe)"], "image_count": 1023, "id": 911, "frequency": "f", "synset": "sandal.n.01"}, {"name": "sandwich", "instance_count": 2315, "def": "two (or more) slices of bread with a filling between them", "synonyms": ["sandwich"], "image_count": 782, "id": 912, "frequency": "f", "synset": "sandwich.n.01"}, {"name": "satchel", "instance_count": 3, "def": "luggage consisting of a small case with a flat bottom and (usually) a shoulder strap", "synonyms": ["satchel"], "image_count": 2, "id": 913, "frequency": "r", "synset": "satchel.n.01"}, {"name": "saucepan", "instance_count": 26, "def": "a deep pan with a handle; used for stewing or boiling", "synonyms": ["saucepan"], "image_count": 5, "id": 914, "frequency": "r", "synset": "saucepan.n.01"}, {"name": "saucer", "instance_count": 555, "def": "a small shallow dish for holding a cup at the table", "synonyms": ["saucer"], "image_count": 247, "id": 915, "frequency": "f", "synset": "saucer.n.02"}, {"name": "sausage", "instance_count": 2704, "def": "highly seasoned minced meat stuffed in casings", "synonyms": ["sausage"], "image_count": 221, "id": 916, "frequency": "f", "synset": "sausage.n.01"}, {"name": "sawhorse", "instance_count": 5, "def": "a framework for holding wood that is being sawed", "synonyms": ["sawhorse", "sawbuck"], "image_count": 4, "id": 917, "frequency": "r", "synset": "sawhorse.n.01"}, {"name": "saxophone", "instance_count": 13, "def": "a wind instrument with a `J'-shaped form typically made of brass", "synonyms": ["saxophone"], "image_count": 8, "id": 918, "frequency": "r", "synset": "sax.n.02"}, {"name": "scale_(measuring_instrument)", "instance_count": 178, "def": "a measuring instrument for weighing; shows amount of mass", "synonyms": ["scale_(measuring_instrument)"], "image_count": 158, "id": 919, "frequency": "f", "synset": "scale.n.07"}, {"name": "scarecrow", "instance_count": 4, "def": "an effigy in the shape of a man to frighten birds away from seeds", "synonyms": ["scarecrow", "strawman"], "image_count": 3, "id": 920, "frequency": "r", "synset": "scarecrow.n.01"}, {"name": "scarf", "instance_count": 1310, "def": "a garment worn around the head or neck or shoulders for warmth or decoration", "synonyms": ["scarf"], "image_count": 752, "id": 921, "frequency": "f", "synset": "scarf.n.01"}, {"name": "school_bus", "instance_count": 142, "def": "a bus used to transport children to or from school", "synonyms": ["school_bus"], "image_count": 64, "id": 922, "frequency": "c", "synset": "school_bus.n.01"}, {"name": "scissors", "instance_count": 1376, "def": "a tool having two crossed pivoting blades with looped handles", "synonyms": ["scissors"], "image_count": 707, "id": 923, "frequency": "f", "synset": "scissors.n.01"}, {"name": "scoreboard", "instance_count": 161, "def": "a large board for displaying the score of a contest (and some other information)", "synonyms": ["scoreboard"], "image_count": 143, "id": 924, "frequency": "f", "synset": "scoreboard.n.01"}, {"name": "scraper", "instance_count": 1, "def": "any of various hand tools for scraping", "synonyms": ["scraper"], "image_count": 1, "id": 925, "frequency": "r", "synset": "scraper.n.01"}, {"name": "screwdriver", "instance_count": 88, "def": "a hand tool for driving screws; has a tip that fits into the head of a screw", "synonyms": ["screwdriver"], "image_count": 49, "id": 926, "frequency": "c", "synset": "screwdriver.n.01"}, {"name": "scrubbing_brush", "instance_count": 141, "def": "a brush with short stiff bristles for heavy cleaning", "synonyms": ["scrubbing_brush"], "image_count": 126, "id": 927, "frequency": "f", "synset": "scrub_brush.n.01"}, {"name": "sculpture", "instance_count": 202, "def": "a three-dimensional work of art", "synonyms": ["sculpture"], "image_count": 76, "id": 928, "frequency": "c", "synset": "sculpture.n.01"}, {"name": "seabird", "instance_count": 126, "def": "a bird that frequents coastal waters and the open ocean: gulls; pelicans; gannets; cormorants; albatrosses; petrels; etc.", "synonyms": ["seabird", "seafowl"], "image_count": 11, "id": 929, "frequency": "c", "synset": "seabird.n.01"}, {"name": "seahorse", "instance_count": 23, "def": "small fish with horse-like heads bent sharply downward and curled tails", "synonyms": ["seahorse"], "image_count": 11, "id": 930, "frequency": "c", "synset": "seahorse.n.02"}, {"name": "seaplane", "instance_count": 4, "def": "an airplane that can land on or take off from water", "synonyms": ["seaplane", "hydroplane"], "image_count": 4, "id": 931, "frequency": "r", "synset": "seaplane.n.01"}, {"name": "seashell", "instance_count": 451, "def": "the shell of a marine organism", "synonyms": ["seashell"], "image_count": 39, "id": 932, "frequency": "c", "synset": "seashell.n.01"}, {"name": "sewing_machine", "instance_count": 11, "def": "a textile machine used as a home appliance for sewing", "synonyms": ["sewing_machine"], "image_count": 11, "id": 933, "frequency": "c", "synset": "sewing_machine.n.01"}, {"name": "shaker", "instance_count": 24, "def": "a container in which something can be shaken", "synonyms": ["shaker"], "image_count": 13, "id": 934, "frequency": "c", "synset": "shaker.n.03"}, {"name": "shampoo", "instance_count": 254, "def": "cleansing agent consisting of soaps or detergents used for washing the hair", "synonyms": ["shampoo"], "image_count": 91, "id": 935, "frequency": "c", "synset": "shampoo.n.01"}, {"name": "shark", "instance_count": 20, "def": "typically large carnivorous fishes with sharpe teeth", "synonyms": ["shark"], "image_count": 14, "id": 936, "frequency": "c", "synset": "shark.n.01"}, {"name": "sharpener", "instance_count": 7, "def": "any implement that is used to make something (an edge or a point) sharper", "synonyms": ["sharpener"], "image_count": 5, "id": 937, "frequency": "r", "synset": "sharpener.n.01"}, {"name": "Sharpie", "instance_count": 5, "def": "a pen with indelible ink that will write on any surface", "synonyms": ["Sharpie"], "image_count": 3, "id": 938, "frequency": "r", "synset": "sharpie.n.03"}, {"name": "shaver_(electric)", "instance_count": 12, "def": "a razor powered by an electric motor", "synonyms": ["shaver_(electric)", "electric_shaver", "electric_razor"], "image_count": 10, "id": 939, "frequency": "r", "synset": "shaver.n.03"}, {"name": "shaving_cream", "instance_count": 33, "def": "toiletry consisting that forms a rich lather for softening the beard before shaving", "synonyms": ["shaving_cream", "shaving_soap"], "image_count": 18, "id": 940, "frequency": "c", "synset": "shaving_cream.n.01"}, {"name": "shawl", "instance_count": 9, "def": "cloak consisting of an oblong piece of cloth used to cover the head and shoulders", "synonyms": ["shawl"], "image_count": 9, "id": 941, "frequency": "r", "synset": "shawl.n.01"}, {"name": "shears", "instance_count": 38, "def": "large scissors with strong blades", "synonyms": ["shears"], "image_count": 6, "id": 942, "frequency": "r", "synset": "shears.n.01"}, {"name": "sheep", "instance_count": 13304, "def": "woolly usually horned ruminant mammal related to the goat", "synonyms": ["sheep"], "image_count": 951, "id": 943, "frequency": "f", "synset": "sheep.n.01"}, {"name": "shepherd_dog", "instance_count": 2, "def": "any of various usually long-haired breeds of dog reared to herd and guard sheep", "synonyms": ["shepherd_dog", "sheepdog"], "image_count": 2, "id": 944, "frequency": "r", "synset": "shepherd_dog.n.01"}, {"name": "sherbert", "instance_count": 2, "def": "a frozen dessert made primarily of fruit juice and sugar", "synonyms": ["sherbert", "sherbet"], "image_count": 1, "id": 945, "frequency": "r", "synset": "sherbert.n.01"}, {"name": "shield", "instance_count": 41, "def": "armor carried on the arm to intercept blows", "synonyms": ["shield"], "image_count": 19, "id": 946, "frequency": "c", "synset": "shield.n.02"}, {"name": "shirt", "instance_count": 10177, "def": "a garment worn on the upper half of the body", "synonyms": ["shirt"], "image_count": 1942, "id": 947, "frequency": "f", "synset": "shirt.n.01"}, {"name": "shoe", "instance_count": 9374, "def": "common footwear covering the foot", "synonyms": ["shoe", "sneaker_(type_of_shoe)", "tennis_shoe"], "image_count": 1916, "id": 948, "frequency": "f", "synset": "shoe.n.01"}, {"name": "shopping_bag", "instance_count": 377, "def": "a bag made of plastic or strong paper (often with handles); used to transport goods after shopping", "synonyms": ["shopping_bag"], "image_count": 139, "id": 949, "frequency": "f", "synset": "shopping_bag.n.01"}, {"name": "shopping_cart", "instance_count": 90, "def": "a handcart that holds groceries or other goods while shopping", "synonyms": ["shopping_cart"], "image_count": 43, "id": 950, "frequency": "c", "synset": "shopping_cart.n.01"}, {"name": "short_pants", "instance_count": 5305, "def": "trousers that end at or above the knee", "synonyms": ["short_pants", "shorts_(clothing)", "trunks_(clothing)"], "image_count": 1969, "id": 951, "frequency": "f", "synset": "short_pants.n.01"}, {"name": "shot_glass", "instance_count": 24, "def": "a small glass adequate to hold a single swallow of whiskey", "synonyms": ["shot_glass"], "image_count": 5, "id": 952, "frequency": "r", "synset": "shot_glass.n.01"}, {"name": "shoulder_bag", "instance_count": 331, "def": "a large handbag that can be carried by a strap looped over the shoulder", "synonyms": ["shoulder_bag"], "image_count": 134, "id": 953, "frequency": "f", "synset": "shoulder_bag.n.01"}, {"name": "shovel", "instance_count": 110, "def": "a hand tool for lifting loose material such as snow, dirt, etc.", "synonyms": ["shovel"], "image_count": 74, "id": 954, "frequency": "c", "synset": "shovel.n.01"}, {"name": "shower_head", "instance_count": 450, "def": "a plumbing fixture that sprays water over you", "synonyms": ["shower_head"], "image_count": 381, "id": 955, "frequency": "f", "synset": "shower.n.01"}, {"name": "shower_cap", "instance_count": 1, "def": "a tight cap worn to keep hair dry while showering", "synonyms": ["shower_cap"], "image_count": 1, "id": 956, "frequency": "r", "synset": "shower_cap.n.01"}, {"name": "shower_curtain", "instance_count": 479, "def": "a curtain that keeps water from splashing out of the shower area", "synonyms": ["shower_curtain"], "image_count": 381, "id": 957, "frequency": "f", "synset": "shower_curtain.n.01"}, {"name": "shredder_(for_paper)", "instance_count": 6, "def": "a device that shreds documents", "synonyms": ["shredder_(for_paper)"], "image_count": 6, "id": 958, "frequency": "r", "synset": "shredder.n.01"}, {"name": "signboard", "instance_count": 8091, "def": "structure displaying a board on which advertisements can be posted", "synonyms": ["signboard"], "image_count": 1826, "id": 959, "frequency": "f", "synset": "signboard.n.01"}, {"name": "silo", "instance_count": 95, "def": "a cylindrical tower used for storing goods", "synonyms": ["silo"], "image_count": 28, "id": 960, "frequency": "c", "synset": "silo.n.01"}, {"name": "sink", "instance_count": 2182, "def": "plumbing fixture consisting of a water basin fixed to a wall or floor and having a drainpipe", "synonyms": ["sink"], "image_count": 1635, "id": 961, "frequency": "f", "synset": "sink.n.01"}, {"name": "skateboard", "instance_count": 3597, "def": "a board with wheels that is ridden in a standing or crouching position and propelled by foot", "synonyms": ["skateboard"], "image_count": 1967, "id": 962, "frequency": "f", "synset": "skateboard.n.01"}, {"name": "skewer", "instance_count": 81, "def": "a long pin for holding meat in position while it is being roasted", "synonyms": ["skewer"], "image_count": 16, "id": 963, "frequency": "c", "synset": "skewer.n.01"}, {"name": "ski", "instance_count": 8496, "def": "sports equipment for skiing on snow", "synonyms": ["ski"], "image_count": 1926, "id": 964, "frequency": "f", "synset": "ski.n.01"}, {"name": "ski_boot", "instance_count": 8124, "def": "a stiff boot that is fastened to a ski with a ski binding", "synonyms": ["ski_boot"], "image_count": 1789, "id": 965, "frequency": "f", "synset": "ski_boot.n.01"}, {"name": "ski_parka", "instance_count": 1727, "def": "a parka to be worn while skiing", "synonyms": ["ski_parka", "ski_jacket"], "image_count": 401, "id": 966, "frequency": "f", "synset": "ski_parka.n.01"}, {"name": "ski_pole", "instance_count": 8263, "def": "a pole with metal points used as an aid in skiing", "synonyms": ["ski_pole"], "image_count": 1968, "id": 967, "frequency": "f", "synset": "ski_pole.n.01"}, {"name": "skirt", "instance_count": 1784, "def": "a garment hanging from the waist; worn mainly by girls and women", "synonyms": ["skirt"], "image_count": 1167, "id": 968, "frequency": "f", "synset": "skirt.n.02"}, {"name": "skullcap", "instance_count": 1, "def": "rounded brimless cap fitting the crown of the head", "synonyms": ["skullcap"], "image_count": 1, "id": 969, "frequency": "r", "synset": "skullcap.n.01"}, {"name": "sled", "instance_count": 102, "def": "a vehicle or flat object for transportation over snow by sliding or pulled by dogs, etc.", "synonyms": ["sled", "sledge", "sleigh"], "image_count": 56, "id": 970, "frequency": "c", "synset": "sled.n.01"}, {"name": "sleeping_bag", "instance_count": 33, "def": "large padded bag designed to be slept in outdoors", "synonyms": ["sleeping_bag"], "image_count": 17, "id": 971, "frequency": "c", "synset": "sleeping_bag.n.01"}, {"name": "sling_(bandage)", "instance_count": 1, "def": "bandage to support an injured forearm; slung over the shoulder or neck", "synonyms": ["sling_(bandage)", "triangular_bandage"], "image_count": 1, "id": 972, "frequency": "r", "synset": "sling.n.05"}, {"name": "slipper_(footwear)", "instance_count": 121, "def": "low footwear that can be slipped on and off easily; usually worn indoors", "synonyms": ["slipper_(footwear)", "carpet_slipper_(footwear)"], "image_count": 58, "id": 973, "frequency": "c", "synset": "slipper.n.01"}, {"name": "smoothie", "instance_count": 53, "def": "a thick smooth drink consisting of fresh fruit pureed with ice cream or yoghurt or milk", "synonyms": ["smoothie"], "image_count": 9, "id": 974, "frequency": "r", "synset": "smoothie.n.02"}, {"name": "snake", "instance_count": 16, "def": "limbless scaly elongate reptile; some are venomous", "synonyms": ["snake", "serpent"], "image_count": 8, "id": 975, "frequency": "r", "synset": "snake.n.01"}, {"name": "snowboard", "instance_count": 2119, "def": "a board that resembles a broad ski or a small surfboard; used in a standing position to slide down snow-covered slopes", "synonyms": ["snowboard"], "image_count": 1124, "id": 976, "frequency": "f", "synset": "snowboard.n.01"}, {"name": "snowman", "instance_count": 61, "def": "a figure of a person made of packed snow", "synonyms": ["snowman"], "image_count": 31, "id": 977, "frequency": "c", "synset": "snowman.n.01"}, {"name": "snowmobile", "instance_count": 23, "def": "tracked vehicle for travel on snow having skis in front", "synonyms": ["snowmobile"], "image_count": 16, "id": 978, "frequency": "c", "synset": "snowmobile.n.01"}, {"name": "soap", "instance_count": 895, "def": "a cleansing agent made from the salts of vegetable or animal fats", "synonyms": ["soap"], "image_count": 491, "id": 979, "frequency": "f", "synset": "soap.n.01"}, {"name": "soccer_ball", "instance_count": 670, "def": "an inflated ball used in playing soccer (called `football' outside of the United States)", "synonyms": ["soccer_ball"], "image_count": 432, "id": 980, "frequency": "f", "synset": "soccer_ball.n.01"}, {"name": "sock", "instance_count": 6866, "def": "cloth covering for the foot; worn inside the shoe; reaches to between the ankle and the knee", "synonyms": ["sock"], "image_count": 1945, "id": 981, "frequency": "f", "synset": "sock.n.01"}, {"name": "sofa", "instance_count": 2408, "def": "an upholstered seat for more than one person", "synonyms": ["sofa", "couch", "lounge"], "image_count": 1899, "id": 982, "frequency": "f", "synset": "sofa.n.01"}, {"name": "softball", "instance_count": 5, "def": "ball used in playing softball", "synonyms": ["softball"], "image_count": 5, "id": 983, "frequency": "r", "synset": "softball.n.01"}, {"name": "solar_array", "instance_count": 52, "def": "electrical device consisting of a large array of connected solar cells", "synonyms": ["solar_array", "solar_battery", "solar_panel"], "image_count": 28, "id": 984, "frequency": "c", "synset": "solar_array.n.01"}, {"name": "sombrero", "instance_count": 22, "def": "a straw hat with a tall crown and broad brim; worn in American southwest and in Mexico", "synonyms": ["sombrero"], "image_count": 7, "id": 985, "frequency": "r", "synset": "sombrero.n.02"}, {"name": "soup", "instance_count": 193, "def": "liquid food especially of meat or fish or vegetable stock often containing pieces of solid food", "synonyms": ["soup"], "image_count": 146, "id": 986, "frequency": "f", "synset": "soup.n.01"}, {"name": "soup_bowl", "instance_count": 2, "def": "a bowl for serving soup", "synonyms": ["soup_bowl"], "image_count": 1, "id": 987, "frequency": "r", "synset": "soup_bowl.n.01"}, {"name": "soupspoon", "instance_count": 44, "def": "a spoon with a rounded bowl for eating soup", "synonyms": ["soupspoon"], "image_count": 25, "id": 988, "frequency": "c", "synset": "soupspoon.n.01"}, {"name": "sour_cream", "instance_count": 49, "def": "soured light cream", "synonyms": ["sour_cream", "soured_cream"], "image_count": 22, "id": 989, "frequency": "c", "synset": "sour_cream.n.01"}, {"name": "soya_milk", "instance_count": 2, "def": "a milk substitute containing soybean flour and water; used in some infant formulas and in making tofu", "synonyms": ["soya_milk", "soybean_milk", "soymilk"], "image_count": 1, "id": 990, "frequency": "r", "synset": "soya_milk.n.01"}, {"name": "space_shuttle", "instance_count": 10, "def": "a reusable spacecraft with wings for a controlled descent through the Earth's atmosphere", "synonyms": ["space_shuttle"], "image_count": 10, "id": 991, "frequency": "r", "synset": "space_shuttle.n.01"}, {"name": "sparkler_(fireworks)", "instance_count": 12, "def": "a firework that burns slowly and throws out a shower of sparks", "synonyms": ["sparkler_(fireworks)"], "image_count": 9, "id": 992, "frequency": "r", "synset": "sparkler.n.02"}, {"name": "spatula", "instance_count": 508, "def": "a hand tool with a thin flexible blade used to mix or spread soft substances", "synonyms": ["spatula"], "image_count": 308, "id": 993, "frequency": "f", "synset": "spatula.n.02"}, {"name": "spear", "instance_count": 9, "def": "a long pointed rod used as a tool or weapon", "synonyms": ["spear", "lance"], "image_count": 4, "id": 994, "frequency": "r", "synset": "spear.n.01"}, {"name": "spectacles", "instance_count": 3040, "def": "optical instrument consisting of a frame that holds a pair of lenses for correcting defective vision", "synonyms": ["spectacles", "specs", "eyeglasses", "glasses"], "image_count": 1969, "id": 995, "frequency": "f", "synset": "spectacles.n.01"}, {"name": "spice_rack", "instance_count": 54, "def": "a rack for displaying containers filled with spices", "synonyms": ["spice_rack"], "image_count": 45, "id": 996, "frequency": "c", "synset": "spice_rack.n.01"}, {"name": "spider", "instance_count": 19, "def": "predatory arachnid with eight legs, two poison fangs, two feelers, and usually two silk-spinning organs at the back end of the body", "synonyms": ["spider"], "image_count": 12, "id": 997, "frequency": "c", "synset": "spider.n.01"}, {"name": "crawfish", "instance_count": 5, "def": "large edible marine crustacean having a spiny carapace but lacking the large pincers of true lobsters", "synonyms": ["crawfish", "crayfish"], "image_count": 1, "id": 998, "frequency": "r", "synset": "spiny_lobster.n.02"}, {"name": "sponge", "instance_count": 116, "def": "a porous mass usable to absorb water typically used for cleaning", "synonyms": ["sponge"], "image_count": 85, "id": 999, "frequency": "c", "synset": "sponge.n.01"}, {"name": "spoon", "instance_count": 2111, "def": "a piece of cutlery with a shallow bowl-shaped container and a handle", "synonyms": ["spoon"], "image_count": 1127, "id": 1000, "frequency": "f", "synset": "spoon.n.01"}, {"name": "sportswear", "instance_count": 85, "def": "attire worn for sport or for casual wear", "synonyms": ["sportswear", "athletic_wear", "activewear"], "image_count": 11, "id": 1001, "frequency": "c", "synset": "sportswear.n.01"}, {"name": "spotlight", "instance_count": 403, "def": "a lamp that produces a strong beam of light to illuminate a restricted area; used to focus attention of a stage performer", "synonyms": ["spotlight"], "image_count": 60, "id": 1002, "frequency": "c", "synset": "spotlight.n.02"}, {"name": "squid_(food)", "instance_count": 6, "def": "(Italian cuisine) squid prepared as food", "synonyms": ["squid_(food)", "calamari", "calamary"], "image_count": 1, "id": 1003, "frequency": "r", "synset": "squid.n.01"}, {"name": "squirrel", "instance_count": 19, "def": "a kind of arboreal rodent having a long bushy tail", "synonyms": ["squirrel"], "image_count": 16, "id": 1004, "frequency": "c", "synset": "squirrel.n.01"}, {"name": "stagecoach", "instance_count": 1, "def": "a large coach-and-four formerly used to carry passengers and mail on regular routes between towns", "synonyms": ["stagecoach"], "image_count": 1, "id": 1005, "frequency": "r", "synset": "stagecoach.n.01"}, {"name": "stapler_(stapling_machine)", "instance_count": 68, "def": "a machine that inserts staples into sheets of paper in order to fasten them together", "synonyms": ["stapler_(stapling_machine)"], "image_count": 65, "id": 1006, "frequency": "c", "synset": "stapler.n.01"}, {"name": "starfish", "instance_count": 28, "def": "echinoderms characterized by five arms extending from a central disk", "synonyms": ["starfish", "sea_star"], "image_count": 13, "id": 1007, "frequency": "c", "synset": "starfish.n.01"}, {"name": "statue_(sculpture)", "instance_count": 1934, "def": "a sculpture representing a human or animal", "synonyms": ["statue_(sculpture)"], "image_count": 655, "id": 1008, "frequency": "f", "synset": "statue.n.01"}, {"name": "steak_(food)", "instance_count": 139, "def": "a slice of meat cut from the fleshy part of an animal or large fish", "synonyms": ["steak_(food)"], "image_count": 51, "id": 1009, "frequency": "c", "synset": "steak.n.01"}, {"name": "steak_knife", "instance_count": 1, "def": "a sharp table knife used in eating steak", "synonyms": ["steak_knife"], "image_count": 1, "id": 1010, "frequency": "r", "synset": "steak_knife.n.01"}, {"name": "steering_wheel", "instance_count": 901, "def": "a handwheel that is used for steering", "synonyms": ["steering_wheel"], "image_count": 673, "id": 1011, "frequency": "f", "synset": "steering_wheel.n.01"}, {"name": "stepladder", "instance_count": 5, "def": "a folding portable ladder hinged at the top", "synonyms": ["stepladder"], "image_count": 5, "id": 1012, "frequency": "r", "synset": "step_ladder.n.01"}, {"name": "step_stool", "instance_count": 43, "def": "a stool that has one or two steps that fold under the seat", "synonyms": ["step_stool"], "image_count": 36, "id": 1013, "frequency": "c", "synset": "step_stool.n.01"}, {"name": "stereo_(sound_system)", "instance_count": 77, "def": "electronic device for playing audio", "synonyms": ["stereo_(sound_system)"], "image_count": 54, "id": 1014, "frequency": "c", "synset": "stereo.n.01"}, {"name": "stew", "instance_count": 7, "def": "food prepared by stewing especially meat or fish with vegetables", "synonyms": ["stew"], "image_count": 5, "id": 1015, "frequency": "r", "synset": "stew.n.02"}, {"name": "stirrer", "instance_count": 18, "def": "an implement used for stirring", "synonyms": ["stirrer"], "image_count": 8, "id": 1016, "frequency": "r", "synset": "stirrer.n.02"}, {"name": "stirrup", "instance_count": 625, "def": "support consisting of metal loops into which rider's feet go", "synonyms": ["stirrup"], "image_count": 305, "id": 1017, "frequency": "f", "synset": "stirrup.n.01"}, {"name": "stool", "instance_count": 583, "def": "a simple seat without a back or arms", "synonyms": ["stool"], "image_count": 297, "id": 1018, "frequency": "f", "synset": "stool.n.01"}, {"name": "stop_sign", "instance_count": 1349, "def": "a traffic sign to notify drivers that they must come to a complete stop", "synonyms": ["stop_sign"], "image_count": 1053, "id": 1019, "frequency": "f", "synset": "stop_sign.n.01"}, {"name": "brake_light", "instance_count": 1334, "def": "a red light on the rear of a motor vehicle that signals when the brakes are applied", "synonyms": ["brake_light"], "image_count": 223, "id": 1020, "frequency": "f", "synset": "stoplight.n.01"}, {"name": "stove", "instance_count": 1133, "def": "a kitchen appliance used for cooking food", "synonyms": ["stove", "kitchen_stove", "range_(kitchen_appliance)", "kitchen_range", "cooking_stove"], "image_count": 1037, "id": 1021, "frequency": "f", "synset": "stove.n.01"}, {"name": "strainer", "instance_count": 99, "def": "a filter to retain larger pieces while smaller pieces and liquids pass through", "synonyms": ["strainer"], "image_count": 63, "id": 1022, "frequency": "c", "synset": "strainer.n.01"}, {"name": "strap", "instance_count": 7435, "def": "an elongated strip of material for binding things together or holding", "synonyms": ["strap"], "image_count": 1881, "id": 1023, "frequency": "f", "synset": "strap.n.01"}, {"name": "straw_(for_drinking)", "instance_count": 1154, "def": "a thin paper or plastic tube used to suck liquids into the mouth", "synonyms": ["straw_(for_drinking)", "drinking_straw"], "image_count": 507, "id": 1024, "frequency": "f", "synset": "straw.n.04"}, {"name": "strawberry", "instance_count": 4386, "def": "sweet fleshy red fruit", "synonyms": ["strawberry"], "image_count": 333, "id": 1025, "frequency": "f", "synset": "strawberry.n.01"}, {"name": "street_sign", "instance_count": 8350, "def": "a sign visible from the street", "synonyms": ["street_sign"], "image_count": 1911, "id": 1026, "frequency": "f", "synset": "street_sign.n.01"}, {"name": "streetlight", "instance_count": 7381, "def": "a lamp supported on a lamppost; for illuminating a street", "synonyms": ["streetlight", "street_lamp"], "image_count": 1765, "id": 1027, "frequency": "f", "synset": "streetlight.n.01"}, {"name": "string_cheese", "instance_count": 1, "def": "cheese formed in long strings twisted together", "synonyms": ["string_cheese"], "image_count": 1, "id": 1028, "frequency": "r", "synset": "string_cheese.n.01"}, {"name": "stylus", "instance_count": 11, "def": "a pointed tool for writing or drawing or engraving, including pens", "synonyms": ["stylus"], "image_count": 5, "id": 1029, "frequency": "r", "synset": "stylus.n.02"}, {"name": "subwoofer", "instance_count": 1, "def": "a loudspeaker that is designed to reproduce very low bass frequencies", "synonyms": ["subwoofer"], "image_count": 1, "id": 1030, "frequency": "r", "synset": "subwoofer.n.01"}, {"name": "sugar_bowl", "instance_count": 10, "def": "a dish in which sugar is served", "synonyms": ["sugar_bowl"], "image_count": 9, "id": 1031, "frequency": "r", "synset": "sugar_bowl.n.01"}, {"name": "sugarcane_(plant)", "instance_count": 31, "def": "juicy canes whose sap is a source of molasses and commercial sugar; fresh canes are sometimes chewed for the juice", "synonyms": ["sugarcane_(plant)"], "image_count": 2, "id": 1032, "frequency": "r", "synset": "sugarcane.n.01"}, {"name": "suit_(clothing)", "instance_count": 461, "def": "a set of garments (usually including a jacket and trousers or skirt) for outerwear all of the same fabric and color", "synonyms": ["suit_(clothing)"], "image_count": 151, "id": 1033, "frequency": "f", "synset": "suit.n.01"}, {"name": "sunflower", "instance_count": 618, "def": "any plant of the genus Helianthus having large flower heads with dark disk florets and showy yellow rays", "synonyms": ["sunflower"], "image_count": 82, "id": 1034, "frequency": "c", "synset": "sunflower.n.01"}, {"name": "sunglasses", "instance_count": 5603, "def": "spectacles that are darkened or polarized to protect the eyes from the glare of the sun", "synonyms": ["sunglasses"], "image_count": 1931, "id": 1035, "frequency": "f", "synset": "sunglasses.n.01"}, {"name": "sunhat", "instance_count": 170, "def": "a hat with a broad brim that protects the face from direct exposure to the sun", "synonyms": ["sunhat"], "image_count": 41, "id": 1036, "frequency": "c", "synset": "sunhat.n.01"}, {"name": "surfboard", "instance_count": 3835, "def": "a narrow buoyant board for riding surf", "synonyms": ["surfboard"], "image_count": 1895, "id": 1037, "frequency": "f", "synset": "surfboard.n.01"}, {"name": "sushi", "instance_count": 337, "def": "rice (with raw fish) wrapped in seaweed", "synonyms": ["sushi"], "image_count": 24, "id": 1038, "frequency": "c", "synset": "sushi.n.01"}, {"name": "mop", "instance_count": 22, "def": "cleaning implement consisting of absorbent material fastened to a handle; for cleaning floors", "synonyms": ["mop"], "image_count": 22, "id": 1039, "frequency": "c", "synset": "swab.n.02"}, {"name": "sweat_pants", "instance_count": 56, "def": "loose-fitting trousers with elastic cuffs; worn by athletes", "synonyms": ["sweat_pants"], "image_count": 35, "id": 1040, "frequency": "c", "synset": "sweat_pants.n.01"}, {"name": "sweatband", "instance_count": 145, "def": "a band of material tied around the forehead or wrist to absorb sweat", "synonyms": ["sweatband"], "image_count": 69, "id": 1041, "frequency": "c", "synset": "sweatband.n.02"}, {"name": "sweater", "instance_count": 1894, "def": "a crocheted or knitted garment covering the upper part of the body", "synonyms": ["sweater"], "image_count": 962, "id": 1042, "frequency": "f", "synset": "sweater.n.01"}, {"name": "sweatshirt", "instance_count": 1482, "def": "cotton knit pullover with long sleeves worn during athletic activity", "synonyms": ["sweatshirt"], "image_count": 588, "id": 1043, "frequency": "f", "synset": "sweatshirt.n.01"}, {"name": "sweet_potato", "instance_count": 137, "def": "the edible tuberous root of the sweet potato vine", "synonyms": ["sweet_potato"], "image_count": 21, "id": 1044, "frequency": "c", "synset": "sweet_potato.n.02"}, {"name": "swimsuit", "instance_count": 3141, "def": "garment worn for swimming", "synonyms": ["swimsuit", "swimwear", "bathing_suit", "swimming_costume", "bathing_costume", "swimming_trunks", "bathing_trunks"], "image_count": 825, "id": 1045, "frequency": "f", "synset": "swimsuit.n.01"}, {"name": "sword", "instance_count": 72, "def": "a cutting or thrusting weapon that has a long metal blade", "synonyms": ["sword"], "image_count": 52, "id": 1046, "frequency": "c", "synset": "sword.n.01"}, {"name": "syringe", "instance_count": 14, "def": "a medical instrument used to inject or withdraw fluids", "synonyms": ["syringe"], "image_count": 5, "id": 1047, "frequency": "r", "synset": "syringe.n.01"}, {"name": "Tabasco_sauce", "instance_count": 5, "def": "very spicy sauce (trade name Tabasco) made from fully-aged red peppers", "synonyms": ["Tabasco_sauce"], "image_count": 5, "id": 1048, "frequency": "r", "synset": "tabasco.n.02"}, {"name": "table-tennis_table", "instance_count": 5, "def": "a table used for playing table tennis", "synonyms": ["table-tennis_table", "ping-pong_table"], "image_count": 5, "id": 1049, "frequency": "r", "synset": "table-tennis_table.n.01"}, {"name": "table", "instance_count": 2804, "def": "a piece of furniture having a smooth flat top that is usually supported by one or more vertical legs", "synonyms": ["table"], "image_count": 1860, "id": 1050, "frequency": "f", "synset": "table.n.02"}, {"name": "table_lamp", "instance_count": 81, "def": "a lamp that sits on a table", "synonyms": ["table_lamp"], "image_count": 56, "id": 1051, "frequency": "c", "synset": "table_lamp.n.01"}, {"name": "tablecloth", "instance_count": 2496, "def": "a covering spread over a dining table", "synonyms": ["tablecloth"], "image_count": 1582, "id": 1052, "frequency": "f", "synset": "tablecloth.n.01"}, {"name": "tachometer", "instance_count": 10, "def": "measuring instrument for indicating speed of rotation", "synonyms": ["tachometer"], "image_count": 7, "id": 1053, "frequency": "r", "synset": "tachometer.n.01"}, {"name": "taco", "instance_count": 21, "def": "a small tortilla cupped around a filling", "synonyms": ["taco"], "image_count": 2, "id": 1054, "frequency": "r", "synset": "taco.n.02"}, {"name": "tag", "instance_count": 7550, "def": "a label associated with something for the purpose of identification or information", "synonyms": ["tag"], "image_count": 1562, "id": 1055, "frequency": "f", "synset": "tag.n.02"}, {"name": "taillight", "instance_count": 9222, "def": "lamp (usually red) mounted at the rear of a motor vehicle", "synonyms": ["taillight", "rear_light"], "image_count": 1885, "id": 1056, "frequency": "f", "synset": "taillight.n.01"}, {"name": "tambourine", "instance_count": 1, "def": "a shallow drum with a single drumhead and with metallic disks in the sides", "synonyms": ["tambourine"], "image_count": 1, "id": 1057, "frequency": "r", "synset": "tambourine.n.01"}, {"name": "army_tank", "instance_count": 7, "def": "an enclosed armored military vehicle; has a cannon and moves on caterpillar treads", "synonyms": ["army_tank", "armored_combat_vehicle", "armoured_combat_vehicle"], "image_count": 5, "id": 1058, "frequency": "r", "synset": "tank.n.01"}, {"name": "tank_(storage_vessel)", "instance_count": 304, "def": "a large (usually metallic) vessel for holding gases or liquids", "synonyms": ["tank_(storage_vessel)", "storage_tank"], "image_count": 137, "id": 1059, "frequency": "f", "synset": "tank.n.02"}, {"name": "tank_top_(clothing)", "instance_count": 1799, "def": "a tight-fitting sleeveless shirt with wide shoulder straps and low neck and no front opening", "synonyms": ["tank_top_(clothing)"], "image_count": 1094, "id": 1060, "frequency": "f", "synset": "tank_top.n.01"}, {"name": "tape_(sticky_cloth_or_paper)", "instance_count": 560, "def": "a long thin piece of cloth or paper as used for binding or fastening", "synonyms": ["tape_(sticky_cloth_or_paper)"], "image_count": 134, "id": 1061, "frequency": "f", "synset": "tape.n.01"}, {"name": "tape_measure", "instance_count": 35, "def": "measuring instrument consisting of a narrow strip (cloth or metal) marked in inches or centimeters and used for measuring lengths", "synonyms": ["tape_measure", "measuring_tape"], "image_count": 29, "id": 1062, "frequency": "c", "synset": "tape.n.04"}, {"name": "tapestry", "instance_count": 29, "def": "a heavy textile with a woven design; used for curtains and upholstery", "synonyms": ["tapestry"], "image_count": 22, "id": 1063, "frequency": "c", "synset": "tapestry.n.02"}, {"name": "tarp", "instance_count": 1315, "def": "waterproofed canvas", "synonyms": ["tarp"], "image_count": 522, "id": 1064, "frequency": "f", "synset": "tarpaulin.n.01"}, {"name": "tartan", "instance_count": 68, "def": "a cloth having a crisscross design", "synonyms": ["tartan", "plaid"], "image_count": 50, "id": 1065, "frequency": "c", "synset": "tartan.n.01"}, {"name": "tassel", "instance_count": 276, "def": "adornment consisting of a bunch of cords fastened at one end", "synonyms": ["tassel"], "image_count": 68, "id": 1066, "frequency": "c", "synset": "tassel.n.01"}, {"name": "tea_bag", "instance_count": 42, "def": "a measured amount of tea in a bag for an individual serving of tea", "synonyms": ["tea_bag"], "image_count": 16, "id": 1067, "frequency": "c", "synset": "tea_bag.n.01"}, {"name": "teacup", "instance_count": 152, "def": "a cup from which tea is drunk", "synonyms": ["teacup"], "image_count": 40, "id": 1068, "frequency": "c", "synset": "teacup.n.02"}, {"name": "teakettle", "instance_count": 40, "def": "kettle for boiling water to make tea", "synonyms": ["teakettle"], "image_count": 35, "id": 1069, "frequency": "c", "synset": "teakettle.n.01"}, {"name": "teapot", "instance_count": 209, "def": "pot for brewing tea; usually has a spout and handle", "synonyms": ["teapot"], "image_count": 135, "id": 1070, "frequency": "f", "synset": "teapot.n.01"}, {"name": "teddy_bear", "instance_count": 4886, "def": "plaything consisting of a child's toy bear (usually plush and stuffed with soft materials)", "synonyms": ["teddy_bear"], "image_count": 1413, "id": 1071, "frequency": "f", "synset": "teddy.n.01"}, {"name": "telephone", "instance_count": 945, "def": "electronic device for communicating by voice over long distances (includes wired and wireless/cell phones)", "synonyms": ["telephone", "phone", "telephone_set"], "image_count": 772, "id": 1072, "frequency": "f", "synset": "telephone.n.01"}, {"name": "telephone_booth", "instance_count": 62, "def": "booth for using a telephone", "synonyms": ["telephone_booth", "phone_booth", "call_box", "telephone_box", "telephone_kiosk"], "image_count": 50, "id": 1073, "frequency": "c", "synset": "telephone_booth.n.01"}, {"name": "telephone_pole", "instance_count": 3725, "def": "tall pole supporting telephone wires", "synonyms": ["telephone_pole", "telegraph_pole", "telegraph_post"], "image_count": 1015, "id": 1074, "frequency": "f", "synset": "telephone_pole.n.01"}, {"name": "telephoto_lens", "instance_count": 1, "def": "a camera lens that magnifies the image", "synonyms": ["telephoto_lens", "zoom_lens"], "image_count": 1, "id": 1075, "frequency": "r", "synset": "telephoto_lens.n.01"}, {"name": "television_camera", "instance_count": 117, "def": "television equipment for capturing and recording video", "synonyms": ["television_camera", "tv_camera"], "image_count": 65, "id": 1076, "frequency": "c", "synset": "television_camera.n.01"}, {"name": "television_set", "instance_count": 2205, "def": "an electronic device that receives television signals and displays them on a screen", "synonyms": ["television_set", "tv", "tv_set"], "image_count": 1900, "id": 1077, "frequency": "f", "synset": "television_receiver.n.01"}, {"name": "tennis_ball", "instance_count": 2835, "def": "ball about the size of a fist used in playing tennis", "synonyms": ["tennis_ball"], "image_count": 1302, "id": 1078, "frequency": "f", "synset": "tennis_ball.n.01"}, {"name": "tennis_racket", "instance_count": 3035, "def": "a racket used to play tennis", "synonyms": ["tennis_racket"], "image_count": 1977, "id": 1079, "frequency": "f", "synset": "tennis_racket.n.01"}, {"name": "tequila", "instance_count": 2, "def": "Mexican liquor made from fermented juices of an agave plant", "synonyms": ["tequila"], "image_count": 2, "id": 1080, "frequency": "r", "synset": "tequila.n.01"}, {"name": "thermometer", "instance_count": 33, "def": "measuring instrument for measuring temperature", "synonyms": ["thermometer"], "image_count": 29, "id": 1081, "frequency": "c", "synset": "thermometer.n.01"}, {"name": "thermos_bottle", "instance_count": 49, "def": "vacuum flask that preserves temperature of hot or cold drinks", "synonyms": ["thermos_bottle"], "image_count": 36, "id": 1082, "frequency": "c", "synset": "thermos.n.01"}, {"name": "thermostat", "instance_count": 153, "def": "a regulator for automatically regulating temperature by starting or stopping the supply of heat", "synonyms": ["thermostat"], "image_count": 138, "id": 1083, "frequency": "f", "synset": "thermostat.n.01"}, {"name": "thimble", "instance_count": 6, "def": "a small metal cap to protect the finger while sewing; can be used as a small container", "synonyms": ["thimble"], "image_count": 4, "id": 1084, "frequency": "r", "synset": "thimble.n.02"}, {"name": "thread", "instance_count": 320, "def": "a fine cord of twisted fibers (of cotton or silk or wool or nylon etc.) used in sewing and weaving", "synonyms": ["thread", "yarn"], "image_count": 67, "id": 1085, "frequency": "c", "synset": "thread.n.01"}, {"name": "thumbtack", "instance_count": 224, "def": "a tack for attaching papers to a bulletin board or drawing board", "synonyms": ["thumbtack", "drawing_pin", "pushpin"], "image_count": 26, "id": 1086, "frequency": "c", "synset": "thumbtack.n.01"}, {"name": "tiara", "instance_count": 31, "def": "a jeweled headdress worn by women on formal occasions", "synonyms": ["tiara"], "image_count": 25, "id": 1087, "frequency": "c", "synset": "tiara.n.01"}, {"name": "tiger", "instance_count": 67, "def": "large feline of forests in most of Asia having a tawny coat with black stripes", "synonyms": ["tiger"], "image_count": 33, "id": 1088, "frequency": "c", "synset": "tiger.n.02"}, {"name": "tights_(clothing)", "instance_count": 45, "def": "skintight knit hose covering the body from the waist to the feet worn by acrobats and dancers and as stockings by women and girls", "synonyms": ["tights_(clothing)", "leotards"], "image_count": 37, "id": 1089, "frequency": "c", "synset": "tights.n.01"}, {"name": "timer", "instance_count": 62, "def": "a timepiece that measures a time interval and signals its end", "synonyms": ["timer", "stopwatch"], "image_count": 50, "id": 1090, "frequency": "c", "synset": "timer.n.01"}, {"name": "tinfoil", "instance_count": 421, "def": "foil made of tin or an alloy of tin and lead", "synonyms": ["tinfoil"], "image_count": 270, "id": 1091, "frequency": "f", "synset": "tinfoil.n.01"}, {"name": "tinsel", "instance_count": 70, "def": "a showy decoration that is basically valueless", "synonyms": ["tinsel"], "image_count": 12, "id": 1092, "frequency": "c", "synset": "tinsel.n.01"}, {"name": "tissue_paper", "instance_count": 587, "def": "a soft thin (usually translucent) paper", "synonyms": ["tissue_paper"], "image_count": 316, "id": 1093, "frequency": "f", "synset": "tissue.n.02"}, {"name": "toast_(food)", "instance_count": 125, "def": "slice of bread that has been toasted", "synonyms": ["toast_(food)"], "image_count": 41, "id": 1094, "frequency": "c", "synset": "toast.n.01"}, {"name": "toaster", "instance_count": 240, "def": "a kitchen appliance (usually electric) for toasting bread", "synonyms": ["toaster"], "image_count": 224, "id": 1095, "frequency": "f", "synset": "toaster.n.02"}, {"name": "toaster_oven", "instance_count": 114, "def": "kitchen appliance consisting of a small electric oven for toasting or warming food", "synonyms": ["toaster_oven"], "image_count": 105, "id": 1096, "frequency": "f", "synset": "toaster_oven.n.01"}, {"name": "toilet", "instance_count": 2295, "def": "a plumbing fixture for defecation and urination", "synonyms": ["toilet"], "image_count": 1925, "id": 1097, "frequency": "f", "synset": "toilet.n.02"}, {"name": "toilet_tissue", "instance_count": 1683, "def": "a soft thin absorbent paper for use in toilets", "synonyms": ["toilet_tissue", "toilet_paper", "bathroom_tissue"], "image_count": 1021, "id": 1098, "frequency": "f", "synset": "toilet_tissue.n.01"}, {"name": "tomato", "instance_count": 12338, "def": "mildly acid red or yellow pulpy fruit eaten as a vegetable", "synonyms": ["tomato"], "image_count": 1213, "id": 1099, "frequency": "f", "synset": "tomato.n.01"}, {"name": "tongs", "instance_count": 294, "def": "any of various devices for taking hold of objects; usually have two hinged legs with handles above and pointed hooks below", "synonyms": ["tongs"], "image_count": 172, "id": 1100, "frequency": "f", "synset": "tongs.n.01"}, {"name": "toolbox", "instance_count": 39, "def": "a box or chest or cabinet for holding hand tools", "synonyms": ["toolbox"], "image_count": 28, "id": 1101, "frequency": "c", "synset": "toolbox.n.01"}, {"name": "toothbrush", "instance_count": 1683, "def": "small brush; has long handle; used to clean teeth", "synonyms": ["toothbrush"], "image_count": 745, "id": 1102, "frequency": "f", "synset": "toothbrush.n.01"}, {"name": "toothpaste", "instance_count": 326, "def": "a dentifrice in the form of a paste", "synonyms": ["toothpaste"], "image_count": 187, "id": 1103, "frequency": "f", "synset": "toothpaste.n.01"}, {"name": "toothpick", "instance_count": 423, "def": "pick consisting of a small strip of wood or plastic; used to pick food from between the teeth", "synonyms": ["toothpick"], "image_count": 147, "id": 1104, "frequency": "f", "synset": "toothpick.n.01"}, {"name": "cover", "instance_count": 306, "def": "covering for a hole (especially a hole in the top of a container)", "synonyms": ["cover"], "image_count": 136, "id": 1105, "frequency": "f", "synset": "top.n.09"}, {"name": "tortilla", "instance_count": 135, "def": "thin unleavened pancake made from cornmeal or wheat flour", "synonyms": ["tortilla"], "image_count": 34, "id": 1106, "frequency": "c", "synset": "tortilla.n.01"}, {"name": "tow_truck", "instance_count": 45, "def": "a truck equipped to hoist and pull wrecked cars (or to remove cars from no-parking zones)", "synonyms": ["tow_truck"], "image_count": 41, "id": 1107, "frequency": "c", "synset": "tow_truck.n.01"}, {"name": "towel", "instance_count": 2212, "def": "a rectangular piece of absorbent cloth (or paper) for drying or wiping", "synonyms": ["towel"], "image_count": 636, "id": 1108, "frequency": "f", "synset": "towel.n.01"}, {"name": "towel_rack", "instance_count": 987, "def": "a rack consisting of one or more bars on which towels can be hung", "synonyms": ["towel_rack", "towel_rail", "towel_bar"], "image_count": 570, "id": 1109, "frequency": "f", "synset": "towel_rack.n.01"}, {"name": "toy", "instance_count": 6756, "def": "a device regarded as providing amusement", "synonyms": ["toy"], "image_count": 1149, "id": 1110, "frequency": "f", "synset": "toy.n.03"}, {"name": "tractor_(farm_equipment)", "instance_count": 80, "def": "a wheeled vehicle with large wheels; used in farming and other applications", "synonyms": ["tractor_(farm_equipment)"], "image_count": 61, "id": 1111, "frequency": "c", "synset": "tractor.n.01"}, {"name": "traffic_light", "instance_count": 7298, "def": "a device to control vehicle traffic often consisting of three or more lights", "synonyms": ["traffic_light"], "image_count": 1890, "id": 1112, "frequency": "f", "synset": "traffic_light.n.01"}, {"name": "dirt_bike", "instance_count": 47, "def": "a lightweight motorcycle equipped with rugged tires and suspension for off-road use", "synonyms": ["dirt_bike"], "image_count": 18, "id": 1113, "frequency": "c", "synset": "trail_bike.n.01"}, {"name": "trailer_truck", "instance_count": 297, "def": "a truck consisting of a tractor and trailer together", "synonyms": ["trailer_truck", "tractor_trailer", "trucking_rig", "articulated_lorry", "semi_truck"], "image_count": 143, "id": 1114, "frequency": "f", "synset": "trailer_truck.n.01"}, {"name": "train_(railroad_vehicle)", "instance_count": 2192, "def": "public or private transport provided by a line of railway cars coupled together and drawn by a locomotive", "synonyms": ["train_(railroad_vehicle)", "railroad_train"], "image_count": 1517, "id": 1115, "frequency": "f", "synset": "train.n.01"}, {"name": "trampoline", "instance_count": 7, "def": "gymnastic apparatus consisting of a strong canvas sheet attached with springs to a metal frame", "synonyms": ["trampoline"], "image_count": 7, "id": 1116, "frequency": "r", "synset": "trampoline.n.01"}, {"name": "tray", "instance_count": 2397, "def": "an open receptacle for holding or displaying or serving articles or food", "synonyms": ["tray"], "image_count": 943, "id": 1117, "frequency": "f", "synset": "tray.n.01"}, {"name": "trench_coat", "instance_count": 16, "def": "a military style raincoat; belted with deep pockets", "synonyms": ["trench_coat"], "image_count": 6, "id": 1118, "frequency": "r", "synset": "trench_coat.n.01"}, {"name": "triangle_(musical_instrument)", "instance_count": 1, "def": "a percussion instrument consisting of a metal bar bent in the shape of an open triangle", "synonyms": ["triangle_(musical_instrument)"], "image_count": 1, "id": 1119, "frequency": "r", "synset": "triangle.n.05"}, {"name": "tricycle", "instance_count": 15, "def": "a vehicle with three wheels that is moved by foot pedals", "synonyms": ["tricycle"], "image_count": 11, "id": 1120, "frequency": "c", "synset": "tricycle.n.01"}, {"name": "tripod", "instance_count": 132, "def": "a three-legged rack used for support", "synonyms": ["tripod"], "image_count": 101, "id": 1121, "frequency": "f", "synset": "tripod.n.01"}, {"name": "trousers", "instance_count": 7806, "def": "a garment extending from the waist to the knee or ankle, covering each leg separately", "synonyms": ["trousers", "pants_(clothing)"], "image_count": 1909, "id": 1122, "frequency": "f", "synset": "trouser.n.01"}, {"name": "truck", "instance_count": 1797, "def": "an automotive vehicle suitable for hauling", "synonyms": ["truck"], "image_count": 800, "id": 1123, "frequency": "f", "synset": "truck.n.01"}, {"name": "truffle_(chocolate)", "instance_count": 4, "def": "creamy chocolate candy", "synonyms": ["truffle_(chocolate)", "chocolate_truffle"], "image_count": 1, "id": 1124, "frequency": "r", "synset": "truffle.n.03"}, {"name": "trunk", "instance_count": 334, "def": "luggage consisting of a large strong case used when traveling or for storage", "synonyms": ["trunk"], "image_count": 44, "id": 1125, "frequency": "c", "synset": "trunk.n.02"}, {"name": "vat", "instance_count": 15, "def": "a large vessel for holding or storing liquids", "synonyms": ["vat"], "image_count": 3, "id": 1126, "frequency": "r", "synset": "tub.n.02"}, {"name": "turban", "instance_count": 124, "def": "a traditional headdress consisting of a long scarf wrapped around the head", "synonyms": ["turban"], "image_count": 44, "id": 1127, "frequency": "c", "synset": "turban.n.01"}, {"name": "turkey_(food)", "instance_count": 120, "def": "flesh of large domesticated fowl usually roasted", "synonyms": ["turkey_(food)"], "image_count": 31, "id": 1128, "frequency": "c", "synset": "turkey.n.04"}, {"name": "turnip", "instance_count": 109, "def": "widely cultivated plant having a large fleshy edible white or yellow root", "synonyms": ["turnip"], "image_count": 7, "id": 1129, "frequency": "r", "synset": "turnip.n.01"}, {"name": "turtle", "instance_count": 31, "def": "any of various aquatic and land reptiles having a bony shell and flipper-like limbs for swimming", "synonyms": ["turtle"], "image_count": 20, "id": 1130, "frequency": "c", "synset": "turtle.n.02"}, {"name": "turtleneck_(clothing)", "instance_count": 13, "def": "a sweater or jersey with a high close-fitting collar", "synonyms": ["turtleneck_(clothing)", "polo-neck"], "image_count": 11, "id": 1131, "frequency": "c", "synset": "turtleneck.n.01"}, {"name": "typewriter", "instance_count": 14, "def": "hand-operated character printer for printing written messages one character at a time", "synonyms": ["typewriter"], "image_count": 13, "id": 1132, "frequency": "c", "synset": "typewriter.n.01"}, {"name": "umbrella", "instance_count": 9161, "def": "a lightweight handheld collapsible canopy", "synonyms": ["umbrella"], "image_count": 1924, "id": 1133, "frequency": "f", "synset": "umbrella.n.01"}, {"name": "underwear", "instance_count": 164, "def": "undergarment worn next to the skin and under the outer garments", "synonyms": ["underwear", "underclothes", "underclothing", "underpants"], "image_count": 113, "id": 1134, "frequency": "f", "synset": "underwear.n.01"}, {"name": "unicycle", "instance_count": 2, "def": "a vehicle with a single wheel that is driven by pedals", "synonyms": ["unicycle"], "image_count": 2, "id": 1135, "frequency": "r", "synset": "unicycle.n.01"}, {"name": "urinal", "instance_count": 381, "def": "a plumbing fixture (usually attached to the wall) used by men to urinate", "synonyms": ["urinal"], "image_count": 139, "id": 1136, "frequency": "f", "synset": "urinal.n.01"}, {"name": "urn", "instance_count": 81, "def": "a large vase that usually has a pedestal or feet", "synonyms": ["urn"], "image_count": 12, "id": 1137, "frequency": "c", "synset": "urn.n.01"}, {"name": "vacuum_cleaner", "instance_count": 38, "def": "an electrical home appliance that cleans by suction", "synonyms": ["vacuum_cleaner"], "image_count": 37, "id": 1138, "frequency": "c", "synset": "vacuum.n.04"}, {"name": "vase", "instance_count": 4971, "def": "an open jar of glass or porcelain used as an ornament or to hold flowers", "synonyms": ["vase"], "image_count": 1866, "id": 1139, "frequency": "f", "synset": "vase.n.01"}, {"name": "vending_machine", "instance_count": 65, "def": "a slot machine for selling goods", "synonyms": ["vending_machine"], "image_count": 47, "id": 1140, "frequency": "c", "synset": "vending_machine.n.01"}, {"name": "vent", "instance_count": 3370, "def": "a hole for the escape of gas or air", "synonyms": ["vent", "blowhole", "air_vent"], "image_count": 1468, "id": 1141, "frequency": "f", "synset": "vent.n.01"}, {"name": "vest", "instance_count": 1313, "def": "a man's sleeveless garment worn underneath a coat", "synonyms": ["vest", "waistcoat"], "image_count": 729, "id": 1142, "frequency": "f", "synset": "vest.n.01"}, {"name": "videotape", "instance_count": 228, "def": "a video recording made on magnetic tape", "synonyms": ["videotape"], "image_count": 24, "id": 1143, "frequency": "c", "synset": "videotape.n.01"}, {"name": "vinegar", "instance_count": 1, "def": "sour-tasting liquid produced usually by oxidation of the alcohol in wine or cider and used as a condiment or food preservative", "synonyms": ["vinegar"], "image_count": 1, "id": 1144, "frequency": "r", "synset": "vinegar.n.01"}, {"name": "violin", "instance_count": 10, "def": "bowed stringed instrument that is the highest member of the violin family", "synonyms": ["violin", "fiddle"], "image_count": 10, "id": 1145, "frequency": "r", "synset": "violin.n.01"}, {"name": "vodka", "instance_count": 3, "def": "unaged colorless liquor originating in Russia", "synonyms": ["vodka"], "image_count": 3, "id": 1146, "frequency": "r", "synset": "vodka.n.01"}, {"name": "volleyball", "instance_count": 33, "def": "an inflated ball used in playing volleyball", "synonyms": ["volleyball"], "image_count": 14, "id": 1147, "frequency": "c", "synset": "volleyball.n.02"}, {"name": "vulture", "instance_count": 16, "def": "any of various large birds of prey having naked heads and weak claws and feeding chiefly on carrion", "synonyms": ["vulture"], "image_count": 4, "id": 1148, "frequency": "r", "synset": "vulture.n.01"}, {"name": "waffle", "instance_count": 61, "def": "pancake batter baked in a waffle iron", "synonyms": ["waffle"], "image_count": 29, "id": 1149, "frequency": "c", "synset": "waffle.n.01"}, {"name": "waffle_iron", "instance_count": 4, "def": "a kitchen appliance for baking waffles", "synonyms": ["waffle_iron"], "image_count": 4, "id": 1150, "frequency": "r", "synset": "waffle_iron.n.01"}, {"name": "wagon", "instance_count": 121, "def": "any of various kinds of wheeled vehicles drawn by an animal or a tractor", "synonyms": ["wagon"], "image_count": 70, "id": 1151, "frequency": "c", "synset": "wagon.n.01"}, {"name": "wagon_wheel", "instance_count": 209, "def": "a wheel of a wagon", "synonyms": ["wagon_wheel"], "image_count": 46, "id": 1152, "frequency": "c", "synset": "wagon_wheel.n.01"}, {"name": "walking_stick", "instance_count": 21, "def": "a stick carried in the hand for support in walking", "synonyms": ["walking_stick"], "image_count": 14, "id": 1153, "frequency": "c", "synset": "walking_stick.n.01"}, {"name": "wall_clock", "instance_count": 100, "def": "a clock mounted on a wall", "synonyms": ["wall_clock"], "image_count": 48, "id": 1154, "frequency": "c", "synset": "wall_clock.n.01"}, {"name": "wall_socket", "instance_count": 3069, "def": "receptacle providing a place in a wiring system where current can be taken to run electrical devices", "synonyms": ["wall_socket", "wall_plug", "electric_outlet", "electrical_outlet", "outlet", "electric_receptacle"], "image_count": 1855, "id": 1155, "frequency": "f", "synset": "wall_socket.n.01"}, {"name": "wallet", "instance_count": 123, "def": "a pocket-size case for holding papers and paper money", "synonyms": ["wallet", "billfold"], "image_count": 113, "id": 1156, "frequency": "f", "synset": "wallet.n.01"}, {"name": "walrus", "instance_count": 1, "def": "either of two large northern marine mammals having ivory tusks and tough hide over thick blubber", "synonyms": ["walrus"], "image_count": 1, "id": 1157, "frequency": "r", "synset": "walrus.n.01"}, {"name": "wardrobe", "instance_count": 1, "def": "a tall piece of furniture that provides storage space for clothes; has a door and rails or hooks for hanging clothes", "synonyms": ["wardrobe"], "image_count": 1, "id": 1158, "frequency": "r", "synset": "wardrobe.n.01"}, {"name": "washbasin", "instance_count": 15, "def": "a bathroom sink that is permanently installed and connected to a water supply and drainpipe; where you can wash your hands and face", "synonyms": ["washbasin", "basin_(for_washing)", "washbowl", "washstand", "handbasin"], "image_count": 10, "id": 1159, "frequency": "r", "synset": "washbasin.n.01"}, {"name": "automatic_washer", "instance_count": 68, "def": "a home appliance for washing clothes and linens automatically", "synonyms": ["automatic_washer", "washing_machine"], "image_count": 54, "id": 1160, "frequency": "c", "synset": "washer.n.03"}, {"name": "watch", "instance_count": 2703, "def": "a small, portable timepiece", "synonyms": ["watch", "wristwatch"], "image_count": 1923, "id": 1161, "frequency": "f", "synset": "watch.n.01"}, {"name": "water_bottle", "instance_count": 1449, "def": "a bottle for holding water", "synonyms": ["water_bottle"], "image_count": 630, "id": 1162, "frequency": "f", "synset": "water_bottle.n.01"}, {"name": "water_cooler", "instance_count": 39, "def": "a device for cooling and dispensing drinking water", "synonyms": ["water_cooler"], "image_count": 31, "id": 1163, "frequency": "c", "synset": "water_cooler.n.01"}, {"name": "water_faucet", "instance_count": 109, "def": "a faucet for drawing water from a pipe or cask", "synonyms": ["water_faucet", "water_tap", "tap_(water_faucet)"], "image_count": 69, "id": 1164, "frequency": "c", "synset": "water_faucet.n.01"}, {"name": "water_heater", "instance_count": 7, "def": "a heater and storage tank to supply heated water", "synonyms": ["water_heater", "hot-water_heater"], "image_count": 7, "id": 1165, "frequency": "r", "synset": "water_heater.n.01"}, {"name": "water_jug", "instance_count": 23, "def": "a jug that holds water", "synonyms": ["water_jug"], "image_count": 11, "id": 1166, "frequency": "c", "synset": "water_jug.n.01"}, {"name": "water_gun", "instance_count": 1, "def": "plaything consisting of a toy pistol that squirts water", "synonyms": ["water_gun", "squirt_gun"], "image_count": 1, "id": 1167, "frequency": "r", "synset": "water_pistol.n.01"}, {"name": "water_scooter", "instance_count": 54, "def": "a motorboat resembling a motor scooter (NOT A SURFBOARD OR WATER SKI)", "synonyms": ["water_scooter", "sea_scooter", "jet_ski"], "image_count": 30, "id": 1168, "frequency": "c", "synset": "water_scooter.n.01"}, {"name": "water_ski", "instance_count": 98, "def": "broad ski for skimming over water towed by a speedboat (DO NOT MARK WATER)", "synonyms": ["water_ski"], "image_count": 50, "id": 1169, "frequency": "c", "synset": "water_ski.n.01"}, {"name": "water_tower", "instance_count": 60, "def": "a large reservoir for water", "synonyms": ["water_tower"], "image_count": 45, "id": 1170, "frequency": "c", "synset": "water_tower.n.01"}, {"name": "watering_can", "instance_count": 44, "def": "a container with a handle and a spout with a perforated nozzle; used to sprinkle water over plants", "synonyms": ["watering_can"], "image_count": 28, "id": 1171, "frequency": "c", "synset": "watering_can.n.01"}, {"name": "watermelon", "instance_count": 814, "def": "large oblong or roundish melon with a hard green rind and sweet watery red or occasionally yellowish pulp", "synonyms": ["watermelon"], "image_count": 114, "id": 1172, "frequency": "f", "synset": "watermelon.n.02"}, {"name": "weathervane", "instance_count": 237, "def": "mechanical device attached to an elevated structure; rotates freely to show the direction of the wind", "synonyms": ["weathervane", "vane_(weathervane)", "wind_vane"], "image_count": 193, "id": 1173, "frequency": "f", "synset": "weathervane.n.01"}, {"name": "webcam", "instance_count": 27, "def": "a digital camera designed to take digital photographs and transmit them over the internet", "synonyms": ["webcam"], "image_count": 21, "id": 1174, "frequency": "c", "synset": "webcam.n.01"}, {"name": "wedding_cake", "instance_count": 140, "def": "a rich cake with two or more tiers and covered with frosting and decorations; served at a wedding reception", "synonyms": ["wedding_cake", "bridecake"], "image_count": 91, "id": 1175, "frequency": "c", "synset": "wedding_cake.n.01"}, {"name": "wedding_ring", "instance_count": 49, "def": "a ring given to the bride and/or groom at the wedding", "synonyms": ["wedding_ring", "wedding_band"], "image_count": 31, "id": 1176, "frequency": "c", "synset": "wedding_ring.n.01"}, {"name": "wet_suit", "instance_count": 2907, "def": "a close-fitting garment made of a permeable material; worn in cold water to retain body heat", "synonyms": ["wet_suit"], "image_count": 1469, "id": 1177, "frequency": "f", "synset": "wet_suit.n.01"}, {"name": "wheel", "instance_count": 11272, "def": "a circular frame with spokes (or a solid disc) that can rotate on a shaft or axle", "synonyms": ["wheel"], "image_count": 1924, "id": 1178, "frequency": "f", "synset": "wheel.n.01"}, {"name": "wheelchair", "instance_count": 107, "def": "a movable chair mounted on large wheels", "synonyms": ["wheelchair"], "image_count": 87, "id": 1179, "frequency": "c", "synset": "wheelchair.n.01"}, {"name": "whipped_cream", "instance_count": 201, "def": "cream that has been beaten until light and fluffy", "synonyms": ["whipped_cream"], "image_count": 77, "id": 1180, "frequency": "c", "synset": "whipped_cream.n.01"}, {"name": "whistle", "instance_count": 13, "def": "a small wind instrument that produces a whistling sound by blowing into it", "synonyms": ["whistle"], "image_count": 11, "id": 1181, "frequency": "c", "synset": "whistle.n.03"}, {"name": "wig", "instance_count": 69, "def": "hairpiece covering the head and made of real or synthetic hair", "synonyms": ["wig"], "image_count": 47, "id": 1182, "frequency": "c", "synset": "wig.n.01"}, {"name": "wind_chime", "instance_count": 28, "def": "a decorative arrangement of pieces of metal or glass or pottery that hang together loosely so the wind can cause them to tinkle", "synonyms": ["wind_chime"], "image_count": 21, "id": 1183, "frequency": "c", "synset": "wind_chime.n.01"}, {"name": "windmill", "instance_count": 202, "def": "A mill or turbine that is powered by wind", "synonyms": ["windmill"], "image_count": 47, "id": 1184, "frequency": "c", "synset": "windmill.n.01"}, {"name": "window_box_(for_plants)", "instance_count": 253, "def": "a container for growing plants on a windowsill", "synonyms": ["window_box_(for_plants)"], "image_count": 70, "id": 1185, "frequency": "c", "synset": "window_box.n.01"}, {"name": "windshield_wiper", "instance_count": 4793, "def": "a mechanical device that cleans the windshield", "synonyms": ["windshield_wiper", "windscreen_wiper", "wiper_(for_windshield/screen)"], "image_count": 1838, "id": 1186, "frequency": "f", "synset": "windshield_wiper.n.01"}, {"name": "windsock", "instance_count": 26, "def": "a truncated cloth cone mounted on a mast/pole; shows wind direction", "synonyms": ["windsock", "air_sock", "air-sleeve", "wind_sleeve", "wind_cone"], "image_count": 19, "id": 1187, "frequency": "c", "synset": "windsock.n.01"}, {"name": "wine_bottle", "instance_count": 4449, "def": "a bottle for holding wine", "synonyms": ["wine_bottle"], "image_count": 531, "id": 1188, "frequency": "f", "synset": "wine_bottle.n.01"}, {"name": "wine_bucket", "instance_count": 21, "def": "a bucket of ice used to chill a bottle of wine", "synonyms": ["wine_bucket", "wine_cooler"], "image_count": 11, "id": 1189, "frequency": "c", "synset": "wine_bucket.n.01"}, {"name": "wineglass", "instance_count": 4259, "def": "a glass that has a stem and in which wine is served", "synonyms": ["wineglass"], "image_count": 941, "id": 1190, "frequency": "f", "synset": "wineglass.n.01"}, {"name": "blinder_(for_horses)", "instance_count": 271, "def": "blinds that prevent a horse from seeing something on either side", "synonyms": ["blinder_(for_horses)"], "image_count": 113, "id": 1191, "frequency": "f", "synset": "winker.n.02"}, {"name": "wok", "instance_count": 60, "def": "pan with a convex bottom; used for frying in Chinese cooking", "synonyms": ["wok"], "image_count": 26, "id": 1192, "frequency": "c", "synset": "wok.n.01"}, {"name": "wolf", "instance_count": 16, "def": "a wild carnivorous mammal of the dog family, living and hunting in packs", "synonyms": ["wolf"], "image_count": 5, "id": 1193, "frequency": "r", "synset": "wolf.n.01"}, {"name": "wooden_spoon", "instance_count": 123, "def": "a spoon made of wood", "synonyms": ["wooden_spoon"], "image_count": 56, "id": 1194, "frequency": "c", "synset": "wooden_spoon.n.02"}, {"name": "wreath", "instance_count": 119, "def": "an arrangement of flowers, leaves, or stems fastened in a ring", "synonyms": ["wreath"], "image_count": 73, "id": 1195, "frequency": "c", "synset": "wreath.n.01"}, {"name": "wrench", "instance_count": 80, "def": "a hand tool that is used to hold or twist a nut or bolt", "synonyms": ["wrench", "spanner"], "image_count": 32, "id": 1196, "frequency": "c", "synset": "wrench.n.03"}, {"name": "wristband", "instance_count": 268, "def": "band consisting of a part of a sleeve that covers the wrist", "synonyms": ["wristband"], "image_count": 128, "id": 1197, "frequency": "f", "synset": "wristband.n.01"}, {"name": "wristlet", "instance_count": 1330, "def": "a band or bracelet worn around the wrist", "synonyms": ["wristlet", "wrist_band"], "image_count": 623, "id": 1198, "frequency": "f", "synset": "wristlet.n.01"}, {"name": "yacht", "instance_count": 50, "def": "an expensive vessel propelled by sail or power and used for cruising or racing", "synonyms": ["yacht"], "image_count": 12, "id": 1199, "frequency": "c", "synset": "yacht.n.01"}, {"name": "yogurt", "instance_count": 116, "def": "a custard-like food made from curdled milk", "synonyms": ["yogurt", "yoghurt", "yoghourt"], "image_count": 52, "id": 1200, "frequency": "c", "synset": "yogurt.n.01"}, {"name": "yoke_(animal_equipment)", "instance_count": 20, "def": "gear joining two animals at the neck; NOT egg yolk", "synonyms": ["yoke_(animal_equipment)"], "image_count": 11, "id": 1201, "frequency": "c", "synset": "yoke.n.07"}, {"name": "zebra", "instance_count": 5443, "def": "any of several fleet black-and-white striped African equines", "synonyms": ["zebra"], "image_count": 1674, "id": 1202, "frequency": "f", "synset": "zebra.n.01"}, {"name": "zucchini", "instance_count": 798, "def": "small cucumber-shaped vegetable marrow; typically dark green", "synonyms": ["zucchini", "courgette"], "image_count": 81, "id": 1203, "frequency": "c", "synset": "zucchini.n.02"}] \ No newline at end of file diff --git a/approach/ovod/mm-ovod/docs/INSTALL.md b/approach/ovod/mm-ovod/docs/INSTALL.md new file mode 100644 index 0000000000000000000000000000000000000000..16c7d38eb380eff3cdf232174ea0a0bac9799f3c --- /dev/null +++ b/approach/ovod/mm-ovod/docs/INSTALL.md @@ -0,0 +1,55 @@ +# Installation + +### Requirements +- Linux or macOS with Python ≥ 3.6 +- PyTorch ≥ 1.8. + Install them together at [pytorch.org](https://pytorch.org) to make sure of this. Note, please check + PyTorch version matches that is required by Detectron2. +- Detectron2: follow [Detectron2 installation instructions](https://detectron2.readthedocs.io/tutorials/install.html). + + +### Author conda environment setup +```bash +conda create --name mm-ovod python=3.8 -y +conda activate mm-ovod +conda install pytorch torchvision=0.9.2 torchaudio cudatoolkit=11.1 -c pytorch-lts -c nvidia + +# under your working directory +git clone git@github.com:facebookresearch/detectron2.git +cd detectron2 +git checkout 2b98c273b240b54d2d0ee6853dc331c4f2ca87b9 +pip install -e . + +cd .. +git clone https://github.com/prannaykaul/mm-ovod.git --recurse-submodules +cd mm-ovod +pip install -r requirements.txt +pip uninstall pillow +CC="cc -mavx2" pip install -U --force-reinstall pillow-simd +``` + +Our project (like Detic) use a submodule: [CenterNet2](https://github.com/xingyizhou/CenterNet2.git). If you forget to add `--recurse-submodules`, do `git submodule init` and then `git submodule update`. + + +### Downloading pre-trained ResNet-50 backbone +We use the ResNet-50 backbone pre-trained on ImageNet-21k-P from [here]( +https://miil-public-eu.oss-eu-central-1.aliyuncs.com/model-zoo/ImageNet_21K_P/models/resnet50_miil_21k.pth). Please download it from the previous link, place it in the `${mm-ovod_ROOT}/checkpoints` folder and use the following command to convert it for use with detectron2: +```bash +cd ${mm-ovod_ROOT} +mkdir checkpoints +cd checkpoints +wget https://miil-public-eu.oss-eu-central-1.aliyuncs.com/model-zoo/ImageNet_21K_P/models/resnet50_miil_21k.pth +python ../tools/convert-thirdparty-pretrained-model-to-d2.py --path resnet50_miil_21k.pth +``` + +### Downloading pre-trained visual aggregator +The pretrained model for the visual aggregator is required if one wants to use their own image exemplars to produce a vison-based +classifier. The model can be downloaded from [here](https://www.robots.ox.ac.uk/~prannay/public_models/mm-ovod/visual_aggregator_ckpt_4_transformer.pth.tar) and should be placed in the `${mm-ovod_ROOT}/checkpoints` folder. +```bash +cd ${mm-ovod_ROOT} +mkdir checkpoints +cd checkpoints +wget https://robots.ox.ac.uk/~prannay/public_models/mm-ovod/visual_aggregator_ckpt_4_transformer.pth.tar +tar -xf visual_aggregator_ckpt_4_transformer.pth.tar +rm visual_aggregator_ckpt_4_transformer.pth.tar +``` diff --git a/approach/ovod/mm-ovod/docs/MODEL_ZOO.md b/approach/ovod/mm-ovod/docs/MODEL_ZOO.md new file mode 100644 index 0000000000000000000000000000000000000000..663234b541fdb95a9ff5bc484308a797ee317502 --- /dev/null +++ b/approach/ovod/mm-ovod/docs/MODEL_ZOO.md @@ -0,0 +1,49 @@ +# Multi-Modal Open-Vocabulary Object Detection Model Zoo + +## Introduction + +This file documents a collection of models reported in our paper. +Training in all cases is done with 4 32GB V100 GPUs. + +#### How to Read the Tables + +The "Name" column contains a link to the config file. +To train a model, run + +``` +python train_net_auto.py --num-gpus 4 --config-file /path/to/config/name.yaml +``` + +To evaluate a model with a trained/ pretrained model, run + +``` +python train_net_auto.py --num-gpus 4 --config-file /path/to/config/name.yaml --eval-only MODEL.WEIGHTS /path/to/weight.pth +``` + + +## Open-vocabulary LVIS + +| Name | APr | mAP | Weights | +|------------------------------------------------------------------------------------------------------------------------|:----:|:----:|------------------------------------------------------------------| +| [lvis-base_r50_4x_clip_gpt3_descriptions](../configs/lvis-base_r50_4x_clip_gpt3_descriptions.yaml) | 19.3 | 30.3 | [model](https://www.robots.ox.ac.uk/~prannay/public_models/mm-ovod/lvis-base_r50_4x_clip_gpt3_descriptions.pth.tar) | +| [lvis-base_r50_4x_clip_image_exemplars_avg](../configs/lvis-base_r50_4x_clip_image_exemplars_avg.yaml) | 14.8 | 28.8 | [model](https://www.robots.ox.ac.uk/~prannay/public_models/mm-ovod/lvis-base_r50_4x_clip_image_exemplars_avg.pth.tar) | +| [lvis-base_r50_4x_clip_image_exemplars_agg](../configs/lvis-base_r50_4x_clip_image_exemplars_agg.yaml) | 18.3 | 29.2 | [model](https://www.robots.ox.ac.uk/~prannay/public_models/mm-ovod/lvis-base_r50_4x_clip_image_exemplars_agg.pth.tar) | +| [lvis-base_r50_4x_clip_multi_modal_avg](../configs/lvis-base_r50_4x_clip_multi_modal_avg.yaml) | 20.7 | 30.5 | [model](https://www.robots.ox.ac.uk/~prannay/public_models/mm-ovod/lvis-base_r50_4x_clip_multi_modal_avg.pth.tar) | +| [lvis-base_r50_4x_clip_multi_modal_agg](../configs/lvis-base_r50_4x_clip_multi_modal_agg.yaml) | 19.2 | 30.6 | [model](https://www.robots.ox.ac.uk/~prannay/public_models/mm-ovod/lvis-base_r50_4x_clip_multi_modal_agg.pth.tar) | +| [lvis-base_in-l_r50_4x_4x_clip_gpt3_descriptions](../configs/lvis-base_in-l_r50_4x_4x_clip_gpt3_descriptions.yaml) | 25.8 | 32.6 | [model](https://www.robots.ox.ac.uk/~prannay/public_models/mm-ovod/lvis-base_in-l_r50_4x_4x_clip_gpt3_descriptions.pth.tar) | +| [lvis-base_in-l_r50_4x_4x_clip_image_exemplars_avg](../configs/lvis-base_in-l_r50_4x_4x_clip_image_exemplars_avg.yaml) | 21.6 | 31.3 | [model](https://www.robots.ox.ac.uk/~prannay/public_models/mm-ovod/lvis-base_in-l_r50_4x_4x_clip_image_exemplars_avg.pth.tar) | +| [lvis-base_in-l_r50_4x_4x_clip_image_exemplars_agg](../configs/lvis-base_in-l_r50_4x_4x_clip_image_exemplars_agg.yaml) | 23.8 | 31.3 | [model](https://www.robots.ox.ac.uk/~prannay/public_models/mm-ovod/lvis-base_in-l_r50_4x_4x_clip_image_exemplars_agg.pth.tar) | +| [lvis-base_in-l_r50_4x_4x_clip_multi_modal_avg](../configs/lvis-base_in-l_r50_4x_4x_clip_multi_modal_avg.yaml) | 26.5 | 32.8 | [model](https://www.robots.ox.ac.uk/~prannay/public_models/mm-ovod/lvis-base_in-l_r50_4x_4x_clip_multi_modal_avg.pth.tar) | +| [lvis-base_in-l_r50_4x_4x_clip_multi_modal_agg](../configs/lvis-base_in-l_r50_4x_4x_clip_multi_modal_agg.yaml) | 27.3 | 33.1 | [model](https://www.robots.ox.ac.uk/~prannay/public_models/mm-ovod/lvis-base_in-l_r50_4x_4x_clip_multi_modal_agg.pth.tar) | + + +#### Note + +- The open-vocabulary LVIS setup is LVIS without rare class annotations in training. We evaluate rare classes as novel classes in testing. + +- All models use [CLIP](https://github.com/openai/CLIP) embeddings as classifiers. This makes the box-supervised models have non-zero mAP on novel classes. + +- The models with `in-l` use the overlap classes between ImageNet-21K and LVIS as image-labeled data. + +- The models which are trained on `in-l` require the corresponding models _without_ `in-l` (indicated by MODEL.WEIGHTS in the config files). Please train or download the model without `in-l` and place them under `${mm-ovod_ROOT}/output/..` before training the model using `in-l` (check the config file). + diff --git a/approach/ovod/mm-ovod/mmovod/__init__.py b/approach/ovod/mm-ovod/mmovod/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..93db9feb60e41ec1c8bff984bd0fbe6533a24177 --- /dev/null +++ b/approach/ovod/mm-ovod/mmovod/__init__.py @@ -0,0 +1,11 @@ +# Copyright (c) Facebook, Inc. and its affiliates. +from .modeling.meta_arch import custom_rcnn +from .modeling.roi_heads import detic_roi_heads +from .modeling.roi_heads import res5_roi_heads +from .modeling.backbone import swintransformer +from .modeling.backbone import timm + + +from .data.datasets import lvis_v1 +from .data.datasets import imagenet +# from .data.datasets import objects365 diff --git a/approach/ovod/mm-ovod/mmovod/config.py b/approach/ovod/mm-ovod/mmovod/config.py new file mode 100644 index 0000000000000000000000000000000000000000..d8b0cc961d32cf4bc190d01c463e0bb8e9e14262 --- /dev/null +++ b/approach/ovod/mm-ovod/mmovod/config.py @@ -0,0 +1,105 @@ +# Copyright (c) Facebook, Inc. and its affiliates. +from detectron2.config import CfgNode as CN + + +def add_mmovod_config(cfg): + _C = cfg + + _C.WITH_IMAGE_LABELS = False # Turn on co-training with classification data + + # Open-vocabulary classifier + _C.MODEL.ROI_BOX_HEAD.USE_ZEROSHOT_CLS = False # Use fixed classifier for open-vocabulary detection + _C.MODEL.ROI_BOX_HEAD.ZEROSHOT_WEIGHT_PATH = 'datasets/metadata/lvis_v1_clip_a+cname.npy' + _C.MODEL.ROI_BOX_HEAD.ZEROSHOT_WEIGHT_DIM = 512 + _C.MODEL.ROI_BOX_HEAD.NORM_WEIGHT = True + _C.MODEL.ROI_BOX_HEAD.NORM_TEMP = 50.0 + _C.MODEL.ROI_BOX_HEAD.IGNORE_ZERO_CATS = False + _C.MODEL.ROI_BOX_HEAD.USE_BIAS = 0.0 # >= 0: not use + + _C.MODEL.ROI_BOX_HEAD.MULT_PROPOSAL_SCORE = False # CenterNet2 + _C.MODEL.ROI_BOX_HEAD.USE_SIGMOID_CE = False + _C.MODEL.ROI_BOX_HEAD.PRIOR_PROB = 0.01 + _C.MODEL.ROI_BOX_HEAD.USE_FED_LOSS = False # Federated Loss + _C.MODEL.ROI_BOX_HEAD.CAT_FREQ_PATH = \ + 'datasets/metadata/lvis_v1_train_cat_info.json' + _C.MODEL.ROI_BOX_HEAD.FED_LOSS_NUM_CAT = 50 + _C.MODEL.ROI_BOX_HEAD.FED_LOSS_FREQ_WEIGHT = 0.5 + + # Classification data configs + _C.MODEL.ROI_BOX_HEAD.IMAGE_LABEL_LOSS = 'max_size' # max, softmax, sum + _C.MODEL.ROI_BOX_HEAD.IMAGE_LOSS_WEIGHT = 0.1 + _C.MODEL.ROI_BOX_HEAD.IMAGE_BOX_SIZE = 1.0 + _C.MODEL.ROI_BOX_HEAD.ADD_IMAGE_BOX = False # Used for image-box loss and caption loss + _C.MODEL.ROI_BOX_HEAD.WS_NUM_PROPS = 128 # num proposals for image-labeled data + _C.MODEL.ROI_BOX_HEAD.WITH_SOFTMAX_PROP = False # Used for WSDDN + _C.MODEL.ROI_BOX_HEAD.CAPTION_WEIGHT = 1.0 # Caption loss weight + _C.MODEL.ROI_BOX_HEAD.NEG_CAP_WEIGHT = 0.125 # Caption loss hyper-parameter + _C.MODEL.ROI_BOX_HEAD.ADD_FEATURE_TO_PROP = False # Used for WSDDN + _C.MODEL.ROI_BOX_HEAD.SOFTMAX_WEAK_LOSS = False # Used when USE_SIGMOID_CE is False + + _C.MODEL.ROI_HEADS.MASK_WEIGHT = 1.0 + _C.MODEL.ROI_HEADS.ONE_CLASS_PER_PROPOSAL = False # For demo only + + # Caption losses + _C.MODEL.CAP_BATCH_RATIO = 4 # Ratio between detection data and caption data + _C.MODEL.WITH_CAPTION = False + _C.MODEL.SYNC_CAPTION_BATCH = False # synchronize across GPUs to enlarge # "classes" + + # dynamic class sampling when training with 21K classes + _C.MODEL.DYNAMIC_CLASSIFIER = False + _C.MODEL.NUM_SAMPLE_CATS = 50 + + # Different classifiers in testing, used in cross-dataset evaluation + _C.MODEL.RESET_CLS_TESTS = False + _C.MODEL.TEST_CLASSIFIERS = [] + _C.MODEL.TEST_NUM_CLASSES = [] + + # Backbones + _C.MODEL.SWIN = CN() + _C.MODEL.SWIN.SIZE = 'T' # 'T', 'S', 'B' + _C.MODEL.SWIN.USE_CHECKPOINT = False + _C.MODEL.SWIN.OUT_FEATURES = (1, 2, 3) # FPN stride 8 - 32 + + _C.MODEL.TIMM = CN() + _C.MODEL.TIMM.BASE_NAME = 'resnet50' + _C.MODEL.TIMM.OUT_LEVELS = (3, 4, 5) + _C.MODEL.TIMM.NORM = 'FrozenBN' + _C.MODEL.TIMM.FREEZE_AT = 0 + _C.MODEL.TIMM.PRETRAINED = False + _C.MODEL.DATASET_LOSS_WEIGHT = [] + + # Multi-dataset dataloader + _C.DATALOADER.DATASET_RATIO = [1, 1] # sample ratio + _C.DATALOADER.USE_RFS = [False, False] + _C.DATALOADER.MULTI_DATASET_GROUPING = False # Always true when multi-dataset is enabled + _C.DATALOADER.DATASET_ANN = ['box', 'box'] # Annotation type of each dataset + _C.DATALOADER.USE_DIFF_BS_SIZE = False # Use different batchsize for each dataset + _C.DATALOADER.DATASET_BS = [8, 32] # Used when USE_DIFF_BS_SIZE is on PER GPU!!!! + _C.DATALOADER.DATASET_INPUT_SIZE = [896, 384] # Used when USE_DIFF_BS_SIZE is on + _C.DATALOADER.DATASET_INPUT_SCALE = [(0.1, 2.0), (0.5, 1.5)] # Used when USE_DIFF_BS_SIZE is on + _C.DATALOADER.DATASET_MIN_SIZES = [(640, 800), (320, 400)] # Used when USE_DIFF_BS_SIZE is on + _C.DATALOADER.DATASET_MAX_SIZES = [1333, 667] # Used when USE_DIFF_BS_SIZE is on + _C.DATALOADER.USE_TAR_DATASET = False # for ImageNet-21K, directly reading from unziped files + _C.DATALOADER.TARFILE_PATH = 'datasets/imagenet/metadata-22k/tar_files.npy' + _C.DATALOADER.TAR_INDEX_DIR = 'datasets/imagenet/metadata-22k/tarindex_npy' + + _C.SOLVER.USE_CUSTOM_SOLVER = False + _C.SOLVER.OPTIMIZER = 'SGD' + + _C.INPUT.CUSTOM_AUG = '' + _C.INPUT.TRAIN_SIZE = 640 + _C.INPUT.TEST_SIZE = 640 + _C.INPUT.SCALE_RANGE = (0.1, 2.) + # 'default' for fixed short/ long edge, 'square' for max size=INPUT.SIZE + _C.INPUT.TEST_INPUT_TYPE = 'default' + + _C.FIND_UNUSED_PARAM = True + _C.EVAL_PRED_AR = False + _C.EVAL_PROPOSAL_AR = False + _C.EVAL_CAT_SPEC_AR = False + _C.IS_DEBUG = False + _C.QUICK_DEBUG = False + _C.FP16 = False + _C.EVAL_AP_FIX = False + _C.GEN_PSEDO_LABELS = False + _C.SAVE_DEBUG_PATH = 'output/save_debug/' diff --git a/approach/ovod/mm-ovod/mmovod/custom_solver.py b/approach/ovod/mm-ovod/mmovod/custom_solver.py new file mode 100644 index 0000000000000000000000000000000000000000..00a29c11d9e1bd792edaf76e870fca6a23e42595 --- /dev/null +++ b/approach/ovod/mm-ovod/mmovod/custom_solver.py @@ -0,0 +1,72 @@ +# Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved +from enum import Enum +import itertools +from typing import Any, Callable, Dict, Iterable, List, Set, Type, Union +import torch + +from detectron2.config import CfgNode + +from detectron2.solver.build import maybe_add_gradient_clipping + +def match_name_keywords(n, name_keywords): + out = False + for b in name_keywords: + if b in n: + out = True + break + return out + +def build_custom_optimizer(cfg: CfgNode, model: torch.nn.Module) -> torch.optim.Optimizer: + """ + Build an optimizer from config. + """ + params: List[Dict[str, Any]] = [] + memo: Set[torch.nn.parameter.Parameter] = set() + + optimizer_type = cfg.SOLVER.OPTIMIZER + for key, value in model.named_parameters(recurse=True): + if not value.requires_grad: + continue + # Avoid duplicating parameters + if value in memo: + continue + memo.add(value) + lr = cfg.SOLVER.BASE_LR + weight_decay = cfg.SOLVER.WEIGHT_DECAY + param = {"params": [value], "lr": lr} + if optimizer_type != 'ADAMW': + param['weight_decay'] = weight_decay + params += [param] + + def maybe_add_full_model_gradient_clipping(optim): # optim: the optimizer class + # detectron2 doesn't have full model gradient clipping now + clip_norm_val = cfg.SOLVER.CLIP_GRADIENTS.CLIP_VALUE + enable = ( + cfg.SOLVER.CLIP_GRADIENTS.ENABLED + and cfg.SOLVER.CLIP_GRADIENTS.CLIP_TYPE == "full_model" + and clip_norm_val > 0.0 + ) + + class FullModelGradientClippingOptimizer(optim): + def step(self, closure=None): + all_params = itertools.chain(*[x["params"] for x in self.param_groups]) + torch.nn.utils.clip_grad_norm_(all_params, clip_norm_val) + super().step(closure=closure) + + return FullModelGradientClippingOptimizer if enable else optim + + if optimizer_type == 'SGD': + optimizer = maybe_add_full_model_gradient_clipping(torch.optim.SGD)( + params, cfg.SOLVER.BASE_LR, momentum=cfg.SOLVER.MOMENTUM, + nesterov=cfg.SOLVER.NESTEROV + ) + elif optimizer_type == 'ADAMW': + optimizer = maybe_add_full_model_gradient_clipping(torch.optim.AdamW)( + params, cfg.SOLVER.BASE_LR, + weight_decay=cfg.SOLVER.WEIGHT_DECAY + ) + else: + raise NotImplementedError(f"no optimizer type {optimizer_type}") + if not cfg.SOLVER.CLIP_GRADIENTS.CLIP_TYPE == "full_model": + optimizer = maybe_add_gradient_clipping(cfg, optimizer) + return optimizer diff --git a/approach/ovod/mm-ovod/mmovod/modeling/backbone/swintransformer.py b/approach/ovod/mm-ovod/mmovod/modeling/backbone/swintransformer.py new file mode 100644 index 0000000000000000000000000000000000000000..21cabb37dd87a443e27eeb805f9739bef86540bf --- /dev/null +++ b/approach/ovod/mm-ovod/mmovod/modeling/backbone/swintransformer.py @@ -0,0 +1,750 @@ +# -------------------------------------------------------- +# Swin Transformer +# Copyright (c) 2021 Microsoft +# Licensed under The MIT License [see LICENSE for details] +# Written by Ze Liu, Yutong Lin, Yixuan Wei +# -------------------------------------------------------- + +# Copyright (c) Facebook, Inc. and its affiliates. +# Modified by Xingyi Zhou from https://github.com/SwinTransformer/Swin-Transformer-Object-Detection/blob/master/mmdet/models/backbones/swin_transformer.py + + +import torch +import torch.nn as nn +import torch.nn.functional as F +import torch.utils.checkpoint as checkpoint +import numpy as np +from timm.models.layers import DropPath, to_2tuple, trunc_normal_ + +from detectron2.layers import ShapeSpec +from detectron2.modeling.backbone.backbone import Backbone +from detectron2.modeling.backbone.build import BACKBONE_REGISTRY +from detectron2.modeling.backbone.fpn import FPN + +from centernet.modeling.backbone.fpn_p5 import LastLevelP6P7_P5 +from centernet.modeling.backbone.bifpn import BiFPN +# from .checkpoint import load_checkpoint + +class Mlp(nn.Module): + """ Multilayer perceptron.""" + + def __init__(self, in_features, hidden_features=None, out_features=None, act_layer=nn.GELU, drop=0.): + super().__init__() + out_features = out_features or in_features + hidden_features = hidden_features or in_features + self.fc1 = nn.Linear(in_features, hidden_features) + self.act = act_layer() + self.fc2 = nn.Linear(hidden_features, out_features) + self.drop = nn.Dropout(drop) + + def forward(self, x): + x = self.fc1(x) + x = self.act(x) + x = self.drop(x) + x = self.fc2(x) + x = self.drop(x) + return x + + +def window_partition(x, window_size): + """ + Args: + x: (B, H, W, C) + window_size (int): window size + Returns: + windows: (num_windows*B, window_size, window_size, C) + """ + B, H, W, C = x.shape + x = x.view(B, H // window_size, window_size, W // window_size, window_size, C) + windows = x.permute(0, 1, 3, 2, 4, 5).contiguous().view(-1, window_size, window_size, C) + return windows + + +def window_reverse(windows, window_size, H, W): + """ + Args: + windows: (num_windows*B, window_size, window_size, C) + window_size (int): Window size + H (int): Height of image + W (int): Width of image + Returns: + x: (B, H, W, C) + """ + B = int(windows.shape[0] / (H * W / window_size / window_size)) + x = windows.view(B, H // window_size, W // window_size, window_size, window_size, -1) + x = x.permute(0, 1, 3, 2, 4, 5).contiguous().view(B, H, W, -1) + return x + + +class WindowAttention(nn.Module): + """ Window based multi-head self attention (W-MSA) module with relative position bias. + It supports both of shifted and non-shifted window. + Args: + dim (int): Number of input channels. + window_size (tuple[int]): The height and width of the window. + num_heads (int): Number of attention heads. + qkv_bias (bool, optional): If True, add a learnable bias to query, key, value. Default: True + qk_scale (float | None, optional): Override default qk scale of head_dim ** -0.5 if set + attn_drop (float, optional): Dropout ratio of attention weight. Default: 0.0 + proj_drop (float, optional): Dropout ratio of output. Default: 0.0 + """ + + def __init__(self, dim, window_size, num_heads, qkv_bias=True, qk_scale=None, attn_drop=0., proj_drop=0.): + + super().__init__() + self.dim = dim + self.window_size = window_size # Wh, Ww + self.num_heads = num_heads + head_dim = dim // num_heads + self.scale = qk_scale or head_dim ** -0.5 + + # define a parameter table of relative position bias + self.relative_position_bias_table = nn.Parameter( + torch.zeros((2 * window_size[0] - 1) * (2 * window_size[1] - 1), num_heads)) # 2*Wh-1 * 2*Ww-1, nH + + # get pair-wise relative position index for each token inside the window + coords_h = torch.arange(self.window_size[0]) + coords_w = torch.arange(self.window_size[1]) + coords = torch.stack(torch.meshgrid([coords_h, coords_w])) # 2, Wh, Ww + coords_flatten = torch.flatten(coords, 1) # 2, Wh*Ww + relative_coords = coords_flatten[:, :, None] - coords_flatten[:, None, :] # 2, Wh*Ww, Wh*Ww + relative_coords = relative_coords.permute(1, 2, 0).contiguous() # Wh*Ww, Wh*Ww, 2 + relative_coords[:, :, 0] += self.window_size[0] - 1 # shift to start from 0 + relative_coords[:, :, 1] += self.window_size[1] - 1 + relative_coords[:, :, 0] *= 2 * self.window_size[1] - 1 + relative_position_index = relative_coords.sum(-1) # Wh*Ww, Wh*Ww + self.register_buffer("relative_position_index", relative_position_index) + + self.qkv = nn.Linear(dim, dim * 3, bias=qkv_bias) + self.attn_drop = nn.Dropout(attn_drop) + self.proj = nn.Linear(dim, dim) + self.proj_drop = nn.Dropout(proj_drop) + + trunc_normal_(self.relative_position_bias_table, std=.02) + self.softmax = nn.Softmax(dim=-1) + + def forward(self, x, mask=None): + """ Forward function. + Args: + x: input features with shape of (num_windows*B, N, C) + mask: (0/-inf) mask with shape of (num_windows, Wh*Ww, Wh*Ww) or None + """ + B_, N, C = x.shape + qkv = self.qkv(x).reshape(B_, N, 3, self.num_heads, C // self.num_heads).permute(2, 0, 3, 1, 4) + q, k, v = qkv[0], qkv[1], qkv[2] # make torchscript happy (cannot use tensor as tuple) + + q = q * self.scale + attn = (q @ k.transpose(-2, -1)) + + relative_position_bias = self.relative_position_bias_table[self.relative_position_index.view(-1)].view( + self.window_size[0] * self.window_size[1], self.window_size[0] * self.window_size[1], -1) # Wh*Ww,Wh*Ww,nH + relative_position_bias = relative_position_bias.permute(2, 0, 1).contiguous() # nH, Wh*Ww, Wh*Ww + attn = attn + relative_position_bias.unsqueeze(0) + + if mask is not None: + nW = mask.shape[0] + attn = attn.view(B_ // nW, nW, self.num_heads, N, N) + mask.unsqueeze(1).unsqueeze(0) + attn = attn.view(-1, self.num_heads, N, N) + attn = self.softmax(attn) + else: + attn = self.softmax(attn) + + attn = self.attn_drop(attn) + + x = (attn @ v).transpose(1, 2).reshape(B_, N, C) + x = self.proj(x) + x = self.proj_drop(x) + return x + + +class SwinTransformerBlock(nn.Module): + """ Swin Transformer Block. + Args: + dim (int): Number of input channels. + num_heads (int): Number of attention heads. + window_size (int): Window size. + shift_size (int): Shift size for SW-MSA. + mlp_ratio (float): Ratio of mlp hidden dim to embedding dim. + qkv_bias (bool, optional): If True, add a learnable bias to query, key, value. Default: True + qk_scale (float | None, optional): Override default qk scale of head_dim ** -0.5 if set. + drop (float, optional): Dropout rate. Default: 0.0 + attn_drop (float, optional): Attention dropout rate. Default: 0.0 + drop_path (float, optional): Stochastic depth rate. Default: 0.0 + act_layer (nn.Module, optional): Activation layer. Default: nn.GELU + norm_layer (nn.Module, optional): Normalization layer. Default: nn.LayerNorm + """ + + def __init__(self, dim, num_heads, window_size=7, shift_size=0, + mlp_ratio=4., qkv_bias=True, qk_scale=None, drop=0., attn_drop=0., drop_path=0., + act_layer=nn.GELU, norm_layer=nn.LayerNorm): + super().__init__() + self.dim = dim + self.num_heads = num_heads + self.window_size = window_size + self.shift_size = shift_size + self.mlp_ratio = mlp_ratio + assert 0 <= self.shift_size < self.window_size, "shift_size must in 0-window_size" + + self.norm1 = norm_layer(dim) + self.attn = WindowAttention( + dim, window_size=to_2tuple(self.window_size), num_heads=num_heads, + qkv_bias=qkv_bias, qk_scale=qk_scale, attn_drop=attn_drop, proj_drop=drop) + + self.drop_path = DropPath(drop_path) if drop_path > 0. else nn.Identity() + self.norm2 = norm_layer(dim) + mlp_hidden_dim = int(dim * mlp_ratio) + self.mlp = Mlp(in_features=dim, hidden_features=mlp_hidden_dim, act_layer=act_layer, drop=drop) + + self.H = None + self.W = None + + def forward(self, x, mask_matrix): + """ Forward function. + Args: + x: Input feature, tensor size (B, H*W, C). + H, W: Spatial resolution of the input feature. + mask_matrix: Attention mask for cyclic shift. + """ + B, L, C = x.shape + H, W = self.H, self.W + assert L == H * W, "input feature has wrong size" + + shortcut = x + x = self.norm1(x) + x = x.view(B, H, W, C) + + # pad feature maps to multiples of window size + pad_l = pad_t = 0 + pad_r = (self.window_size - W % self.window_size) % self.window_size + pad_b = (self.window_size - H % self.window_size) % self.window_size + x = F.pad(x, (0, 0, pad_l, pad_r, pad_t, pad_b)) + _, Hp, Wp, _ = x.shape + + # cyclic shift + if self.shift_size > 0: + shifted_x = torch.roll(x, shifts=(-self.shift_size, -self.shift_size), dims=(1, 2)) + attn_mask = mask_matrix + else: + shifted_x = x + attn_mask = None + + # partition windows + x_windows = window_partition(shifted_x, self.window_size) # nW*B, window_size, window_size, C + x_windows = x_windows.view(-1, self.window_size * self.window_size, C) # nW*B, window_size*window_size, C + + # W-MSA/SW-MSA + attn_windows = self.attn(x_windows, mask=attn_mask) # nW*B, window_size*window_size, C + + # merge windows + attn_windows = attn_windows.view(-1, self.window_size, self.window_size, C) + shifted_x = window_reverse(attn_windows, self.window_size, Hp, Wp) # B H' W' C + + # reverse cyclic shift + if self.shift_size > 0: + x = torch.roll(shifted_x, shifts=(self.shift_size, self.shift_size), dims=(1, 2)) + else: + x = shifted_x + + if pad_r > 0 or pad_b > 0: + x = x[:, :H, :W, :].contiguous() + + x = x.view(B, H * W, C) + + # FFN + x = shortcut + self.drop_path(x) + x = x + self.drop_path(self.mlp(self.norm2(x))) + + return x + + +class PatchMerging(nn.Module): + """ Patch Merging Layer + Args: + dim (int): Number of input channels. + norm_layer (nn.Module, optional): Normalization layer. Default: nn.LayerNorm + """ + def __init__(self, dim, norm_layer=nn.LayerNorm): + super().__init__() + self.dim = dim + self.reduction = nn.Linear(4 * dim, 2 * dim, bias=False) + self.norm = norm_layer(4 * dim) + + def forward(self, x, H, W): + """ Forward function. + Args: + x: Input feature, tensor size (B, H*W, C). + H, W: Spatial resolution of the input feature. + """ + B, L, C = x.shape + assert L == H * W, "input feature has wrong size" + + x = x.view(B, H, W, C) + + # padding + pad_input = (H % 2 == 1) or (W % 2 == 1) + if pad_input: + x = F.pad(x, (0, 0, 0, W % 2, 0, H % 2)) + + x0 = x[:, 0::2, 0::2, :] # B H/2 W/2 C + x1 = x[:, 1::2, 0::2, :] # B H/2 W/2 C + x2 = x[:, 0::2, 1::2, :] # B H/2 W/2 C + x3 = x[:, 1::2, 1::2, :] # B H/2 W/2 C + x = torch.cat([x0, x1, x2, x3], -1) # B H/2 W/2 4*C + x = x.view(B, -1, 4 * C) # B H/2*W/2 4*C + + x = self.norm(x) + x = self.reduction(x) + + return x + + +class BasicLayer(nn.Module): + """ A basic Swin Transformer layer for one stage. + Args: + dim (int): Number of feature channels + depth (int): Depths of this stage. + num_heads (int): Number of attention head. + window_size (int): Local window size. Default: 7. + mlp_ratio (float): Ratio of mlp hidden dim to embedding dim. Default: 4. + qkv_bias (bool, optional): If True, add a learnable bias to query, key, value. Default: True + qk_scale (float | None, optional): Override default qk scale of head_dim ** -0.5 if set. + drop (float, optional): Dropout rate. Default: 0.0 + attn_drop (float, optional): Attention dropout rate. Default: 0.0 + drop_path (float | tuple[float], optional): Stochastic depth rate. Default: 0.0 + norm_layer (nn.Module, optional): Normalization layer. Default: nn.LayerNorm + downsample (nn.Module | None, optional): Downsample layer at the end of the layer. Default: None + use_checkpoint (bool): Whether to use checkpointing to save memory. Default: False. + """ + + def __init__(self, + dim, + depth, + num_heads, + window_size=7, + mlp_ratio=4., + qkv_bias=True, + qk_scale=None, + drop=0., + attn_drop=0., + drop_path=0., + norm_layer=nn.LayerNorm, + downsample=None, + use_checkpoint=False): + super().__init__() + self.window_size = window_size + self.shift_size = window_size // 2 + self.depth = depth + self.use_checkpoint = use_checkpoint + + # build blocks + self.blocks = nn.ModuleList([ + SwinTransformerBlock( + dim=dim, + num_heads=num_heads, + window_size=window_size, + shift_size=0 if (i % 2 == 0) else window_size // 2, + mlp_ratio=mlp_ratio, + qkv_bias=qkv_bias, + qk_scale=qk_scale, + drop=drop, + attn_drop=attn_drop, + drop_path=drop_path[i] if isinstance(drop_path, list) else drop_path, + norm_layer=norm_layer) + for i in range(depth)]) + + # patch merging layer + if downsample is not None: + self.downsample = downsample(dim=dim, norm_layer=norm_layer) + else: + self.downsample = None + + def forward(self, x, H, W): + """ Forward function. + Args: + x: Input feature, tensor size (B, H*W, C). + H, W: Spatial resolution of the input feature. + """ + + # calculate attention mask for SW-MSA + Hp = int(np.ceil(H / self.window_size)) * self.window_size + Wp = int(np.ceil(W / self.window_size)) * self.window_size + img_mask = torch.zeros((1, Hp, Wp, 1), device=x.device) # 1 Hp Wp 1 + h_slices = (slice(0, -self.window_size), + slice(-self.window_size, -self.shift_size), + slice(-self.shift_size, None)) + w_slices = (slice(0, -self.window_size), + slice(-self.window_size, -self.shift_size), + slice(-self.shift_size, None)) + cnt = 0 + for h in h_slices: + for w in w_slices: + img_mask[:, h, w, :] = cnt + cnt += 1 + + mask_windows = window_partition(img_mask, self.window_size) # nW, window_size, window_size, 1 + mask_windows = mask_windows.view(-1, self.window_size * self.window_size) + attn_mask = mask_windows.unsqueeze(1) - mask_windows.unsqueeze(2) + attn_mask = attn_mask.masked_fill(attn_mask != 0, float(-100.0)).masked_fill(attn_mask == 0, float(0.0)) + + for blk in self.blocks: + blk.H, blk.W = H, W + if self.use_checkpoint: + x = checkpoint.checkpoint(blk, x, attn_mask) + else: + x = blk(x, attn_mask) + if self.downsample is not None: + x_down = self.downsample(x, H, W) + Wh, Ww = (H + 1) // 2, (W + 1) // 2 + return x, H, W, x_down, Wh, Ww + else: + return x, H, W, x, H, W + + +class PatchEmbed(nn.Module): + """ Image to Patch Embedding + Args: + patch_size (int): Patch token size. Default: 4. + in_chans (int): Number of input image channels. Default: 3. + embed_dim (int): Number of linear projection output channels. Default: 96. + norm_layer (nn.Module, optional): Normalization layer. Default: None + """ + + def __init__(self, patch_size=4, in_chans=3, embed_dim=96, norm_layer=None): + super().__init__() + patch_size = to_2tuple(patch_size) + self.patch_size = patch_size + + self.in_chans = in_chans + self.embed_dim = embed_dim + + self.proj = nn.Conv2d(in_chans, embed_dim, kernel_size=patch_size, stride=patch_size) + if norm_layer is not None: + self.norm = norm_layer(embed_dim) + else: + self.norm = None + + def forward(self, x): + """Forward function.""" + # padding + _, _, H, W = x.size() + if W % self.patch_size[1] != 0: + x = F.pad(x, (0, self.patch_size[1] - W % self.patch_size[1])) + if H % self.patch_size[0] != 0: + x = F.pad(x, (0, 0, 0, self.patch_size[0] - H % self.patch_size[0])) + + x = self.proj(x) # B C Wh Ww + if self.norm is not None: + Wh, Ww = x.size(2), x.size(3) + x = x.flatten(2).transpose(1, 2) + x = self.norm(x) + x = x.transpose(1, 2).view(-1, self.embed_dim, Wh, Ww) + + return x + + +class SwinTransformer(Backbone): + """ Swin Transformer backbone. + A PyTorch impl of : `Swin Transformer: Hierarchical Vision Transformer using Shifted Windows` - + https://arxiv.org/pdf/2103.14030 + Args: + pretrain_img_size (int): Input image size for training the pretrained model, + used in absolute postion embedding. Default 224. + patch_size (int | tuple(int)): Patch size. Default: 4. + in_chans (int): Number of input image channels. Default: 3. + embed_dim (int): Number of linear projection output channels. Default: 96. + depths (tuple[int]): Depths of each Swin Transformer stage. + num_heads (tuple[int]): Number of attention head of each stage. + window_size (int): Window size. Default: 7. + mlp_ratio (float): Ratio of mlp hidden dim to embedding dim. Default: 4. + qkv_bias (bool): If True, add a learnable bias to query, key, value. Default: True + qk_scale (float): Override default qk scale of head_dim ** -0.5 if set. + drop_rate (float): Dropout rate. + attn_drop_rate (float): Attention dropout rate. Default: 0. + drop_path_rate (float): Stochastic depth rate. Default: 0.2. + norm_layer (nn.Module): Normalization layer. Default: nn.LayerNorm. + ape (bool): If True, add absolute position embedding to the patch embedding. Default: False. + patch_norm (bool): If True, add normalization after patch embedding. Default: True. + out_indices (Sequence[int]): Output from which stages. + frozen_stages (int): Stages to be frozen (stop grad and set eval mode). + -1 means not freezing any parameters. + use_checkpoint (bool): Whether to use checkpointing to save memory. Default: False. + """ + + def __init__(self, + pretrain_img_size=224, + patch_size=4, + in_chans=3, + embed_dim=96, + depths=[2, 2, 6, 2], + num_heads=[3, 6, 12, 24], + window_size=7, + mlp_ratio=4., + qkv_bias=True, + qk_scale=None, + drop_rate=0., + attn_drop_rate=0., + drop_path_rate=0.2, + norm_layer=nn.LayerNorm, + ape=False, + patch_norm=True, + out_indices=(0, 1, 2, 3), + frozen_stages=-1, + use_checkpoint=False): + super().__init__() + + self.pretrain_img_size = pretrain_img_size + self.num_layers = len(depths) + self.embed_dim = embed_dim + self.ape = ape + self.patch_norm = patch_norm + self.out_indices = out_indices + self.frozen_stages = frozen_stages + + # split image into non-overlapping patches + self.patch_embed = PatchEmbed( + patch_size=patch_size, in_chans=in_chans, embed_dim=embed_dim, + norm_layer=norm_layer if self.patch_norm else None) + + # absolute position embedding + if self.ape: + pretrain_img_size = to_2tuple(pretrain_img_size) + patch_size = to_2tuple(patch_size) + patches_resolution = [pretrain_img_size[0] // patch_size[0], pretrain_img_size[1] // patch_size[1]] + + self.absolute_pos_embed = nn.Parameter(torch.zeros(1, embed_dim, patches_resolution[0], patches_resolution[1])) + trunc_normal_(self.absolute_pos_embed, std=.02) + + self.pos_drop = nn.Dropout(p=drop_rate) + + # stochastic depth + dpr = [x.item() for x in torch.linspace(0, drop_path_rate, sum(depths))] # stochastic depth decay rule + + # build layers + self.layers = nn.ModuleList() + for i_layer in range(self.num_layers): + layer = BasicLayer( + dim=int(embed_dim * 2 ** i_layer), + depth=depths[i_layer], + num_heads=num_heads[i_layer], + window_size=window_size, + mlp_ratio=mlp_ratio, + qkv_bias=qkv_bias, + qk_scale=qk_scale, + drop=drop_rate, + attn_drop=attn_drop_rate, + drop_path=dpr[sum(depths[:i_layer]):sum(depths[:i_layer + 1])], + norm_layer=norm_layer, + downsample=PatchMerging if (i_layer < self.num_layers - 1) else None, + use_checkpoint=use_checkpoint) + self.layers.append(layer) + + num_features = [int(embed_dim * 2 ** i) for i in range(self.num_layers)] + self.num_features = num_features + + # add a norm layer for each output + for i_layer in out_indices: + layer = norm_layer(num_features[i_layer]) + layer_name = f'norm{i_layer}' + self.add_module(layer_name, layer) + + self._freeze_stages() + self._out_features = ['swin{}'.format(i) for i in self.out_indices] + self._out_feature_channels = { + 'swin{}'.format(i): self.embed_dim * 2 ** i for i in self.out_indices + } + self._out_feature_strides = { + 'swin{}'.format(i): 2 ** (i + 2) for i in self.out_indices + } + self._size_devisibility = 32 + + + def _freeze_stages(self): + if self.frozen_stages >= 0: + self.patch_embed.eval() + for param in self.patch_embed.parameters(): + param.requires_grad = False + + if self.frozen_stages >= 1 and self.ape: + self.absolute_pos_embed.requires_grad = False + + if self.frozen_stages >= 2: + self.pos_drop.eval() + for i in range(0, self.frozen_stages - 1): + m = self.layers[i] + m.eval() + for param in m.parameters(): + param.requires_grad = False + + def init_weights(self, pretrained=None): + """Initialize the weights in backbone. + Args: + pretrained (str, optional): Path to pre-trained weights. + Defaults to None. + """ + + def _init_weights(m): + if isinstance(m, nn.Linear): + trunc_normal_(m.weight, std=.02) + if isinstance(m, nn.Linear) and m.bias is not None: + nn.init.constant_(m.bias, 0) + elif isinstance(m, nn.LayerNorm): + nn.init.constant_(m.bias, 0) + nn.init.constant_(m.weight, 1.0) + + if isinstance(pretrained, str): + self.apply(_init_weights) + # load_checkpoint(self, pretrained, strict=False) + elif pretrained is None: + self.apply(_init_weights) + else: + raise TypeError('pretrained must be a str or None') + + def forward(self, x): + """Forward function.""" + x = self.patch_embed(x) + + Wh, Ww = x.size(2), x.size(3) + if self.ape: + # interpolate the position embedding to the corresponding size + absolute_pos_embed = F.interpolate(self.absolute_pos_embed, size=(Wh, Ww), mode='bicubic') + x = (x + absolute_pos_embed).flatten(2).transpose(1, 2) # B Wh*Ww C + else: + x = x.flatten(2).transpose(1, 2) + x = self.pos_drop(x) + + # outs = [] + outs = {} + for i in range(self.num_layers): + layer = self.layers[i] + x_out, H, W, x, Wh, Ww = layer(x, Wh, Ww) + + if i in self.out_indices: + norm_layer = getattr(self, f'norm{i}') + x_out = norm_layer(x_out) + + out = x_out.view(-1, H, W, self.num_features[i]).permute(0, 3, 1, 2).contiguous() + # outs.append(out) + outs['swin{}'.format(i)] = out + + return outs + + def train(self, mode=True): + """Convert the model into training mode while keep layers freezed.""" + super(SwinTransformer, self).train(mode) + self._freeze_stages() + +size2config = { + 'T': { + 'window_size': 7, + 'embed_dim': 96, + 'depth': [2, 2, 6, 2], + 'num_heads': [3, 6, 12, 24], + 'drop_path_rate': 0.2, + 'pretrained': 'models/swin_tiny_patch4_window7_224.pth' + }, + 'S': { + 'window_size': 7, + 'embed_dim': 96, + 'depth': [2, 2, 18, 2], + 'num_heads': [3, 6, 12, 24], + 'drop_path_rate': 0.2, + 'pretrained': 'models/swin_small_patch4_window7_224.pth' + }, + 'B': { + 'window_size': 7, + 'embed_dim': 128, + 'depth': [2, 2, 18, 2], + 'num_heads': [4, 8, 16, 32], + 'drop_path_rate': 0.3, + 'pretrained': 'models/swin_base_patch4_window7_224.pth' + }, + 'B-22k': { + 'window_size': 7, + 'embed_dim': 128, + 'depth': [2, 2, 18, 2], + 'num_heads': [4, 8, 16, 32], + 'drop_path_rate': 0.3, + 'pretrained': 'models/swin_base_patch4_window7_224_22k.pth' + }, + 'B-22k-384': { + 'window_size': 12, + 'embed_dim': 128, + 'depth': [2, 2, 18, 2], + 'num_heads': [4, 8, 16, 32], + 'drop_path_rate': 0.3, + 'pretrained': 'models/swin_base_patch4_window12_384_22k.pth' + }, + 'L-22k': { + 'window_size': 7, + 'embed_dim': 192, + 'depth': [2, 2, 18, 2], + 'num_heads': [6, 12, 24, 48], + 'drop_path_rate': 0.3, # TODO (xingyi): this is unclear + 'pretrained': 'models/swin_large_patch4_window7_224_22k.pth' + }, + 'L-22k-384': { + 'window_size': 12, + 'embed_dim': 192, + 'depth': [2, 2, 18, 2], + 'num_heads': [6, 12, 24, 48], + 'drop_path_rate': 0.3, # TODO (xingyi): this is unclear + 'pretrained': 'models/swin_large_patch4_window12_384_22k.pth' + } +} + +@BACKBONE_REGISTRY.register() +def build_swintransformer_backbone(cfg, input_shape): + """ + """ + config = size2config[cfg.MODEL.SWIN.SIZE] + out_indices = cfg.MODEL.SWIN.OUT_FEATURES + model = SwinTransformer( + embed_dim=config['embed_dim'], + window_size=config['window_size'], + depths=config['depth'], + num_heads=config['num_heads'], + drop_path_rate=config['drop_path_rate'], + out_indices=out_indices, + frozen_stages=-1, + use_checkpoint=cfg.MODEL.SWIN.USE_CHECKPOINT + ) + # print('Initializing', config['pretrained']) + model.init_weights(config['pretrained']) + return model + + +@BACKBONE_REGISTRY.register() +def build_swintransformer_fpn_backbone(cfg, input_shape: ShapeSpec): + """ + """ + bottom_up = build_swintransformer_backbone(cfg, input_shape) + in_features = cfg.MODEL.FPN.IN_FEATURES + out_channels = cfg.MODEL.FPN.OUT_CHANNELS + backbone = FPN( + bottom_up=bottom_up, + in_features=in_features, + out_channels=out_channels, + norm=cfg.MODEL.FPN.NORM, + top_block=LastLevelP6P7_P5(out_channels, out_channels), + fuse_type=cfg.MODEL.FPN.FUSE_TYPE, + ) + return backbone + + +@BACKBONE_REGISTRY.register() +def build_swintransformer_bifpn_backbone(cfg, input_shape: ShapeSpec): + """ + """ + bottom_up = build_swintransformer_backbone(cfg, input_shape) + in_features = cfg.MODEL.FPN.IN_FEATURES + backbone = BiFPN( + cfg=cfg, + bottom_up=bottom_up, + in_features=in_features, + out_channels=cfg.MODEL.BIFPN.OUT_CHANNELS, + norm=cfg.MODEL.BIFPN.NORM, + num_levels=cfg.MODEL.BIFPN.NUM_LEVELS, + num_bifpn=cfg.MODEL.BIFPN.NUM_BIFPN, + separable_conv=cfg.MODEL.BIFPN.SEPARABLE_CONV, + ) + return backbone \ No newline at end of file diff --git a/approach/ovod/mm-ovod/mmovod/modeling/backbone/timm.py b/approach/ovod/mm-ovod/mmovod/modeling/backbone/timm.py new file mode 100644 index 0000000000000000000000000000000000000000..1ac62cb5d9048f19614c5693c98f31332af96753 --- /dev/null +++ b/approach/ovod/mm-ovod/mmovod/modeling/backbone/timm.py @@ -0,0 +1,221 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# Copyright (c) Facebook, Inc. and its affiliates. +import math +from os.path import join +import numpy as np +import copy +from functools import partial + +import torch +from torch import nn +import torch.utils.model_zoo as model_zoo +import torch.nn.functional as F +import fvcore.nn.weight_init as weight_init + +from detectron2.modeling.backbone import FPN +from detectron2.modeling.backbone.build import BACKBONE_REGISTRY +from detectron2.layers.batch_norm import get_norm, FrozenBatchNorm2d +from detectron2.modeling.backbone import Backbone + +from timm import create_model +from timm.models.helpers import build_model_with_cfg +from timm.models.registry import register_model +from timm.models.resnet import ResNet, Bottleneck +from timm.models.resnet import default_cfgs as default_cfgs_resnet +from timm.models.convnext import ConvNeXt, default_cfgs, checkpoint_filter_fn + + +@register_model +def convnext_tiny_21k(pretrained=False, **kwargs): + model_args = dict(depths=(3, 3, 9, 3), dims=(96, 192, 384, 768), **kwargs) + cfg = default_cfgs['convnext_tiny'] + cfg['url'] = 'https://dl.fbaipublicfiles.com/convnext/convnext_tiny_22k_224.pth' + model = build_model_with_cfg( + ConvNeXt, 'convnext_tiny', pretrained, + default_cfg=cfg, + pretrained_filter_fn=checkpoint_filter_fn, + feature_cfg=dict(out_indices=(0, 1, 2, 3), flatten_sequential=True), + **model_args) + return model + +class CustomResNet(ResNet): + def __init__(self, **kwargs): + self.out_indices = kwargs.pop('out_indices') + super().__init__(**kwargs) + + + def forward(self, x): + x = self.conv1(x) + x = self.bn1(x) + x = self.act1(x) + x = self.maxpool(x) + ret = [x] + x = self.layer1(x) + ret.append(x) + x = self.layer2(x) + ret.append(x) + x = self.layer3(x) + ret.append(x) + x = self.layer4(x) + ret.append(x) + return [ret[i] for i in self.out_indices] + + + def load_pretrained(self, cached_file): + data = torch.load(cached_file, map_location='cpu') + if 'state_dict' in data: + self.load_state_dict(data['state_dict']) + else: + self.load_state_dict(data) + + +model_params = { + 'resnet50_in21k': dict(block=Bottleneck, layers=[3, 4, 6, 3]), +} + + +def create_timm_resnet(variant, out_indices, pretrained=False, **kwargs): + params = model_params[variant] + default_cfgs_resnet['resnet50_in21k'] = \ + copy.deepcopy(default_cfgs_resnet['resnet50']) + default_cfgs_resnet['resnet50_in21k']['url'] = \ + 'https://miil-public-eu.oss-eu-central-1.aliyuncs.com/model-zoo/ImageNet_21K_P/models/resnet50_miil_21k.pth' + default_cfgs_resnet['resnet50_in21k']['num_classes'] = 11221 + + return build_model_with_cfg( + CustomResNet, variant, pretrained, + default_cfg=default_cfgs_resnet[variant], + out_indices=out_indices, + pretrained_custom_load=True, + **params, + **kwargs) + + +class LastLevelP6P7_P5(nn.Module): + """ + """ + def __init__(self, in_channels, out_channels): + super().__init__() + self.num_levels = 2 + self.in_feature = "p5" + self.p6 = nn.Conv2d(in_channels, out_channels, 3, 2, 1) + self.p7 = nn.Conv2d(out_channels, out_channels, 3, 2, 1) + for module in [self.p6, self.p7]: + weight_init.c2_xavier_fill(module) + + def forward(self, c5): + p6 = self.p6(c5) + p7 = self.p7(F.relu(p6)) + return [p6, p7] + + +def freeze_module(x): + """ + """ + for p in x.parameters(): + p.requires_grad = False + FrozenBatchNorm2d.convert_frozen_batchnorm(x) + return x + + +class TIMM(Backbone): + def __init__(self, base_name, out_levels, freeze_at=0, norm='FrozenBN', pretrained=False): + super().__init__() + out_indices = [x - 1 for x in out_levels] + if base_name in model_params: + self.base = create_timm_resnet( + base_name, out_indices=out_indices, + pretrained=False) + elif 'eff' in base_name or 'resnet' in base_name or 'regnet' in base_name: + self.base = create_model( + base_name, features_only=True, + out_indices=out_indices, pretrained=pretrained) + elif 'convnext' in base_name: + drop_path_rate = 0.2 \ + if ('tiny' in base_name or 'small' in base_name) else 0.3 + self.base = create_model( + base_name, features_only=True, + out_indices=out_indices, pretrained=pretrained, + drop_path_rate=drop_path_rate) + else: + assert 0, base_name + feature_info = [dict(num_chs=f['num_chs'], reduction=f['reduction']) \ + for i, f in enumerate(self.base.feature_info)] + self._out_features = ['layer{}'.format(x) for x in out_levels] + self._out_feature_channels = { + 'layer{}'.format(l): feature_info[l - 1]['num_chs'] for l in out_levels} + self._out_feature_strides = { + 'layer{}'.format(l): feature_info[l - 1]['reduction'] for l in out_levels} + self._size_divisibility = max(self._out_feature_strides.values()) + if 'resnet' in base_name: + self.freeze(freeze_at) + if norm == 'FrozenBN': + self = FrozenBatchNorm2d.convert_frozen_batchnorm(self) + + def freeze(self, freeze_at=0): + """ + """ + if freeze_at >= 1: + print('Frezing', self.base.conv1) + self.base.conv1 = freeze_module(self.base.conv1) + if freeze_at >= 2: + print('Frezing', self.base.layer1) + self.base.layer1 = freeze_module(self.base.layer1) + + def forward(self, x): + features = self.base(x) + ret = {k: v for k, v in zip(self._out_features, features)} + return ret + + @property + def size_divisibility(self): + return self._size_divisibility + + +@BACKBONE_REGISTRY.register() +def build_timm_backbone(cfg, input_shape): + model = TIMM( + cfg.MODEL.TIMM.BASE_NAME, + cfg.MODEL.TIMM.OUT_LEVELS, + freeze_at=cfg.MODEL.TIMM.FREEZE_AT, + norm=cfg.MODEL.TIMM.NORM, + pretrained=cfg.MODEL.TIMM.PRETRAINED, + ) + return model + + +@BACKBONE_REGISTRY.register() +def build_p67_timm_fpn_backbone(cfg, input_shape): + """ + """ + bottom_up = build_timm_backbone(cfg, input_shape) + in_features = cfg.MODEL.FPN.IN_FEATURES + out_channels = cfg.MODEL.FPN.OUT_CHANNELS + backbone = FPN( + bottom_up=bottom_up, + in_features=in_features, + out_channels=out_channels, + norm=cfg.MODEL.FPN.NORM, + top_block=LastLevelP6P7_P5(out_channels, out_channels), + fuse_type=cfg.MODEL.FPN.FUSE_TYPE, + ) + return backbone + +@BACKBONE_REGISTRY.register() +def build_p35_timm_fpn_backbone(cfg, input_shape): + """ + """ + bottom_up = build_timm_backbone(cfg, input_shape) + + in_features = cfg.MODEL.FPN.IN_FEATURES + out_channels = cfg.MODEL.FPN.OUT_CHANNELS + backbone = FPN( + bottom_up=bottom_up, + in_features=in_features, + out_channels=out_channels, + norm=cfg.MODEL.FPN.NORM, + top_block=None, + fuse_type=cfg.MODEL.FPN.FUSE_TYPE, + ) + return backbone \ No newline at end of file diff --git a/approach/ovod/mm-ovod/mmovod/modeling/debug.py b/approach/ovod/mm-ovod/mmovod/modeling/debug.py new file mode 100644 index 0000000000000000000000000000000000000000..9c7c442eb8aa9474c8874ac1dc75659371e8c894 --- /dev/null +++ b/approach/ovod/mm-ovod/mmovod/modeling/debug.py @@ -0,0 +1,334 @@ +# Copyright (c) Facebook, Inc. and its affiliates. +import cv2 +import numpy as np +import torch +import torch.nn.functional as F +import os + +COLORS = ((np.random.rand(1300, 3) * 0.4 + 0.6) * 255).astype( + np.uint8).reshape(1300, 1, 1, 3) + +def _get_color_image(heatmap): + heatmap = heatmap.reshape( + heatmap.shape[0], heatmap.shape[1], heatmap.shape[2], 1) + if heatmap.shape[0] == 1: + color_map = (heatmap * np.ones((1, 1, 1, 3), np.uint8) * 255).max( + axis=0).astype(np.uint8) # H, W, 3 + else: + color_map = (heatmap * COLORS[:heatmap.shape[0]]).max(axis=0).astype(np.uint8) # H, W, 3 + + return color_map + +def _blend_image(image, color_map, a=0.7): + color_map = cv2.resize(color_map, (image.shape[1], image.shape[0])) + ret = np.clip(image * (1 - a) + color_map * a, 0, 255).astype(np.uint8) + return ret + +def _blend_image_heatmaps(image, color_maps, a=0.7): + merges = np.zeros((image.shape[0], image.shape[1], 3), np.float32) + for color_map in color_maps: + color_map = cv2.resize(color_map, (image.shape[1], image.shape[0])) + merges = np.maximum(merges, color_map) + ret = np.clip(image * (1 - a) + merges * a, 0, 255).astype(np.uint8) + return ret + +def _decompose_level(x, shapes_per_level, N): + ''' + x: LNHiWi x C + ''' + x = x.view(x.shape[0], -1) + ret = [] + st = 0 + for l in range(len(shapes_per_level)): + ret.append([]) + h = shapes_per_level[l][0].int().item() + w = shapes_per_level[l][1].int().item() + for i in range(N): + ret[l].append(x[st + h * w * i:st + h * w * (i + 1)].view( + h, w, -1).permute(2, 0, 1)) + st += h * w * N + return ret + +def _imagelist_to_tensor(images): + images = [x for x in images] + image_sizes = [x.shape[-2:] for x in images] + h = max([size[0] for size in image_sizes]) + w = max([size[1] for size in image_sizes]) + S = 32 + h, w = ((h - 1) // S + 1) * S, ((w - 1) // S + 1) * S + images = [F.pad(x, (0, w - x.shape[2], 0, h - x.shape[1], 0, 0)) \ + for x in images] + images = torch.stack(images) + return images + + +def _ind2il(ind, shapes_per_level, N): + r = ind + l = 0 + S = 0 + while r - S >= N * shapes_per_level[l][0] * shapes_per_level[l][1]: + S += N * shapes_per_level[l][0] * shapes_per_level[l][1] + l += 1 + i = (r - S) // (shapes_per_level[l][0] * shapes_per_level[l][1]) + return i, l + +def debug_train( + images, gt_instances, flattened_hms, reg_targets, labels, pos_inds, + shapes_per_level, locations, strides): + ''' + images: N x 3 x H x W + flattened_hms: LNHiWi x C + shapes_per_level: L x 2 [(H_i, W_i)] + locations: LNHiWi x 2 + ''' + reg_inds = torch.nonzero( + reg_targets.max(dim=1)[0] > 0).squeeze(1) + N = len(images) + images = _imagelist_to_tensor(images) + repeated_locations = [torch.cat([loc] * N, dim=0) \ + for loc in locations] + locations = torch.cat(repeated_locations, dim=0) + gt_hms = _decompose_level(flattened_hms, shapes_per_level, N) + masks = flattened_hms.new_zeros((flattened_hms.shape[0], 1)) + masks[pos_inds] = 1 + masks = _decompose_level(masks, shapes_per_level, N) + for i in range(len(images)): + image = images[i].detach().cpu().numpy().transpose(1, 2, 0) + color_maps = [] + for l in range(len(gt_hms)): + color_map = _get_color_image( + gt_hms[l][i].detach().cpu().numpy()) + color_maps.append(color_map) + cv2.imshow('gthm_{}'.format(l), color_map) + blend = _blend_image_heatmaps(image.copy(), color_maps) + if gt_instances is not None: + bboxes = gt_instances[i].gt_boxes.tensor + for j in range(len(bboxes)): + bbox = bboxes[j] + cv2.rectangle( + blend, + (int(bbox[0]), int(bbox[1])), + (int(bbox[2]), int(bbox[3])), + (0, 0, 255), 3, cv2.LINE_AA) + + for j in range(len(pos_inds)): + image_id, l = _ind2il(pos_inds[j], shapes_per_level, N) + if image_id != i: + continue + loc = locations[pos_inds[j]] + cv2.drawMarker( + blend, (int(loc[0]), int(loc[1])), (0, 255, 255), + markerSize=(l + 1) * 16) + + for j in range(len(reg_inds)): + image_id, l = _ind2il(reg_inds[j], shapes_per_level, N) + if image_id != i: + continue + ltrb = reg_targets[reg_inds[j]] + ltrb *= strides[l] + loc = locations[reg_inds[j]] + bbox = [(loc[0] - ltrb[0]), (loc[1] - ltrb[1]), + (loc[0] + ltrb[2]), (loc[1] + ltrb[3])] + cv2.rectangle( + blend, + (int(bbox[0]), int(bbox[1])), + (int(bbox[2]), int(bbox[3])), + (255, 0, 0), 1, cv2.LINE_AA) + cv2.circle(blend, (int(loc[0]), int(loc[1])), 2, (255, 0, 0), -1) + + cv2.imshow('blend', blend) + cv2.waitKey() + + +def debug_test( + images, logits_pred, reg_pred, agn_hm_pred=[], preds=[], + vis_thresh=0.3, debug_show_name=False, mult_agn=False): + ''' + images: N x 3 x H x W + class_target: LNHiWi x C + cat_agn_heatmap: LNHiWi + shapes_per_level: L x 2 [(H_i, W_i)] + ''' + N = len(images) + for i in range(len(images)): + image = images[i].detach().cpu().numpy().transpose(1, 2, 0) + result = image.copy().astype(np.uint8) + pred_image = image.copy().astype(np.uint8) + color_maps = [] + L = len(logits_pred) + for l in range(L): + if logits_pred[0] is not None: + stride = min(image.shape[0], image.shape[1]) / min( + logits_pred[l][i].shape[1], logits_pred[l][i].shape[2]) + else: + stride = min(image.shape[0], image.shape[1]) / min( + agn_hm_pred[l][i].shape[1], agn_hm_pred[l][i].shape[2]) + stride = stride if stride < 60 else 64 if stride < 100 else 128 + if logits_pred[0] is not None: + if mult_agn: + logits_pred[l][i] = logits_pred[l][i] * agn_hm_pred[l][i] + color_map = _get_color_image( + logits_pred[l][i].detach().cpu().numpy()) + color_maps.append(color_map) + cv2.imshow('predhm_{}'.format(l), color_map) + + if debug_show_name: + from detectron2.data.datasets.lvis_v1_categories import LVIS_CATEGORIES + cat2name = [x['name'] for x in LVIS_CATEGORIES] + for j in range(len(preds[i].scores) if preds is not None else 0): + if preds[i].scores[j] > vis_thresh: + bbox = preds[i].proposal_boxes[j] \ + if preds[i].has('proposal_boxes') else \ + preds[i].pred_boxes[j] + bbox = bbox.tensor[0].detach().cpu().numpy().astype(np.int32) + cat = int(preds[i].pred_classes[j]) \ + if preds[i].has('pred_classes') else 0 + cl = COLORS[cat, 0, 0] + cv2.rectangle( + pred_image, (int(bbox[0]), int(bbox[1])), + (int(bbox[2]), int(bbox[3])), + (int(cl[0]), int(cl[1]), int(cl[2])), 2, cv2.LINE_AA) + if debug_show_name: + txt = '{}{:.1f}'.format( + cat2name[cat] if cat > 0 else '', + preds[i].scores[j]) + font = cv2.FONT_HERSHEY_SIMPLEX + cat_size = cv2.getTextSize(txt, font, 0.5, 2)[0] + cv2.rectangle( + pred_image, + (int(bbox[0]), int(bbox[1] - cat_size[1] - 2)), + (int(bbox[0] + cat_size[0]), int(bbox[1] - 2)), + (int(cl[0]), int(cl[1]), int(cl[2])), -1) + cv2.putText( + pred_image, txt, (int(bbox[0]), int(bbox[1] - 2)), + font, 0.5, (0, 0, 0), thickness=1, lineType=cv2.LINE_AA) + + + if agn_hm_pred[l] is not None: + agn_hm_ = agn_hm_pred[l][i, 0, :, :, None].detach().cpu().numpy() + agn_hm_ = (agn_hm_ * np.array([255, 255, 255]).reshape( + 1, 1, 3)).astype(np.uint8) + cv2.imshow('agn_hm_{}'.format(l), agn_hm_) + blend = _blend_image_heatmaps(image.copy(), color_maps) + cv2.imshow('blend', blend) + cv2.imshow('preds', pred_image) + cv2.waitKey() + +global cnt +cnt = 0 + +def debug_second_stage(images, instances, proposals=None, vis_thresh=0.3, + save_debug=False, debug_show_name=False, image_labels=[], + save_debug_path='output/save_debug/', + bgr=False): + images = _imagelist_to_tensor(images) + if 'COCO' in save_debug_path: + from detectron2.data.datasets.builtin_meta import COCO_CATEGORIES + cat2name = [x['name'] for x in COCO_CATEGORIES] + else: + from detectron2.data.datasets.lvis_v1_categories import LVIS_CATEGORIES + cat2name = ['({}){}'.format(x['frequency'], x['name']) \ + for x in LVIS_CATEGORIES] + for i in range(len(images)): + image = images[i].detach().cpu().numpy().transpose(1, 2, 0).astype(np.uint8).copy() + if bgr: + image = image[:, :, ::-1].copy() + if instances[i].has('gt_boxes'): + bboxes = instances[i].gt_boxes.tensor.cpu().numpy() + scores = np.ones(bboxes.shape[0]) + cats = instances[i].gt_classes.cpu().numpy() + else: + bboxes = instances[i].pred_boxes.tensor.cpu().numpy() + scores = instances[i].scores.cpu().numpy() + cats = instances[i].pred_classes.cpu().numpy() + for j in range(len(bboxes)): + if scores[j] > vis_thresh: + bbox = bboxes[j] + cl = COLORS[cats[j], 0, 0] + cl = (int(cl[0]), int(cl[1]), int(cl[2])) + cv2.rectangle( + image, + (int(bbox[0]), int(bbox[1])), + (int(bbox[2]), int(bbox[3])), + cl, 2, cv2.LINE_AA) + if debug_show_name: + cat = cats[j] + txt = '{}{:.1f}'.format( + cat2name[cat] if cat > 0 else '', + scores[j]) + font = cv2.FONT_HERSHEY_SIMPLEX + cat_size = cv2.getTextSize(txt, font, 0.5, 2)[0] + cv2.rectangle( + image, + (int(bbox[0]), int(bbox[1] - cat_size[1] - 2)), + (int(bbox[0] + cat_size[0]), int(bbox[1] - 2)), + (int(cl[0]), int(cl[1]), int(cl[2])), -1) + cv2.putText( + image, txt, (int(bbox[0]), int(bbox[1] - 2)), + font, 0.5, (0, 0, 0), thickness=1, lineType=cv2.LINE_AA) + if proposals is not None: + proposal_image = images[i].detach().cpu().numpy().transpose(1, 2, 0).astype(np.uint8).copy() + if bgr: + proposal_image = proposal_image.copy() + else: + proposal_image = proposal_image[:, :, ::-1].copy() + bboxes = proposals[i].proposal_boxes.tensor.cpu().numpy() + if proposals[i].has('scores'): + scores = proposals[i].scores.detach().cpu().numpy() + else: + scores = proposals[i].objectness_logits.detach().cpu().numpy() + # selected = -1 + # if proposals[i].has('image_loss'): + # selected = proposals[i].image_loss.argmin() + if proposals[i].has('selected'): + selected = proposals[i].selected + else: + selected = [-1 for _ in range(len(bboxes))] + for j in range(len(bboxes)): + if scores[j] > vis_thresh or selected[j] >= 0: + bbox = bboxes[j] + cl = (209, 159, 83) + th = 2 + if selected[j] >= 0: + cl = (0, 0, 0xa4) + th = 4 + cv2.rectangle( + proposal_image, + (int(bbox[0]), int(bbox[1])), + (int(bbox[2]), int(bbox[3])), + cl, th, cv2.LINE_AA) + if selected[j] >= 0 and debug_show_name: + cat = selected[j].item() + txt = '{}'.format(cat2name[cat]) + font = cv2.FONT_HERSHEY_SIMPLEX + cat_size = cv2.getTextSize(txt, font, 0.5, 2)[0] + cv2.rectangle( + proposal_image, + (int(bbox[0]), int(bbox[1] - cat_size[1] - 2)), + (int(bbox[0] + cat_size[0]), int(bbox[1] - 2)), + (int(cl[0]), int(cl[1]), int(cl[2])), -1) + cv2.putText( + proposal_image, txt, + (int(bbox[0]), int(bbox[1] - 2)), + font, 0.5, (0, 0, 0), thickness=1, + lineType=cv2.LINE_AA) + + if save_debug: + global cnt + cnt = (cnt + 1) % 5000 + if not os.path.exists(save_debug_path): + os.mkdir(save_debug_path) + save_name = '{}/{:05d}.jpg'.format(save_debug_path, cnt) + if i < len(image_labels): + image_label = image_labels[i] + save_name = '{}/{:05d}'.format(save_debug_path, cnt) + for x in image_label: + class_name = cat2name[x] + save_name = save_name + '|{}'.format(class_name) + save_name = save_name + '.jpg' + cv2.imwrite(save_name, proposal_image) + else: + cv2.imshow('image', image) + if proposals is not None: + cv2.imshow('proposals', proposal_image) + cv2.waitKey() \ No newline at end of file diff --git a/approach/ovod/mm-ovod/mmovod/modeling/meta_arch/custom_rcnn.py b/approach/ovod/mm-ovod/mmovod/modeling/meta_arch/custom_rcnn.py new file mode 100644 index 0000000000000000000000000000000000000000..9a5ac721d42e40a8b4f28508b10a932cef827fcf --- /dev/null +++ b/approach/ovod/mm-ovod/mmovod/modeling/meta_arch/custom_rcnn.py @@ -0,0 +1,232 @@ +# Copyright (c) Facebook, Inc. and its affiliates. +import copy +import logging +import numpy as np +from typing import Dict, List, Optional, Tuple +import torch +from torch import nn +import json +from detectron2.utils.events import get_event_storage +from detectron2.config import configurable +from detectron2.structures import ImageList, Instances, Boxes +import detectron2.utils.comm as comm + +from detectron2.modeling.meta_arch.build import META_ARCH_REGISTRY +from detectron2.modeling.meta_arch.rcnn import GeneralizedRCNN +from detectron2.modeling.postprocessing import detector_postprocess +from detectron2.utils.visualizer import Visualizer, _create_text_labels +from detectron2.data.detection_utils import convert_image_to_rgb + +from torch.cuda.amp import autocast +from ..text.text_encoder import build_text_encoder +from ..utils import load_class_freq, get_fed_loss_inds + +@META_ARCH_REGISTRY.register() +class CustomRCNN(GeneralizedRCNN): + ''' + Add image labels + ''' + @configurable + def __init__( + self, + with_image_labels = False, + dataset_loss_weight = [], + fp16 = False, + sync_caption_batch = False, + roi_head_name = '', + cap_batch_ratio = 4, + with_caption = False, + dynamic_classifier = False, + **kwargs): + """ + """ + self.with_image_labels = with_image_labels + self.dataset_loss_weight = dataset_loss_weight + self.fp16 = fp16 + self.with_caption = with_caption + self.sync_caption_batch = sync_caption_batch + self.roi_head_name = roi_head_name + self.cap_batch_ratio = cap_batch_ratio + self.dynamic_classifier = dynamic_classifier + self.return_proposal = False + if self.dynamic_classifier: + self.freq_weight = kwargs.pop('freq_weight') + self.num_classes = kwargs.pop('num_classes') + self.num_sample_cats = kwargs.pop('num_sample_cats') + super().__init__(**kwargs) + assert self.proposal_generator is not None + if self.with_caption: + assert not self.dynamic_classifier + self.text_encoder = build_text_encoder(pretrain=True) + for v in self.text_encoder.parameters(): + v.requires_grad = False + + + @classmethod + def from_config(cls, cfg): + ret = super().from_config(cfg) + ret.update({ + 'with_image_labels': cfg.WITH_IMAGE_LABELS, + 'dataset_loss_weight': cfg.MODEL.DATASET_LOSS_WEIGHT, + 'fp16': cfg.FP16, + 'with_caption': cfg.MODEL.WITH_CAPTION, + 'sync_caption_batch': cfg.MODEL.SYNC_CAPTION_BATCH, + 'dynamic_classifier': cfg.MODEL.DYNAMIC_CLASSIFIER, + 'roi_head_name': cfg.MODEL.ROI_HEADS.NAME, + 'cap_batch_ratio': cfg.MODEL.CAP_BATCH_RATIO, + }) + if ret['dynamic_classifier']: + ret['freq_weight'] = load_class_freq( + cfg.MODEL.ROI_BOX_HEAD.CAT_FREQ_PATH, + cfg.MODEL.ROI_BOX_HEAD.FED_LOSS_FREQ_WEIGHT) + ret['num_classes'] = cfg.MODEL.ROI_HEADS.NUM_CLASSES + ret['num_sample_cats'] = cfg.MODEL.NUM_SAMPLE_CATS + return ret + + + def inference( + self, + batched_inputs: Tuple[Dict[str, torch.Tensor]], + detected_instances: Optional[List[Instances]] = None, + do_postprocess: bool = True, + ): + assert not self.training + assert detected_instances is None + + images = self.preprocess_image(batched_inputs) + features = self.backbone(images.tensor) + proposals, _ = self.proposal_generator(images, features, None) + results, _ = self.roi_heads(images, features, proposals) + if do_postprocess: + assert not torch.jit.is_scripting(), \ + "Scripting is not supported for postprocess." + return CustomRCNN._postprocess( + results, batched_inputs, images.image_sizes) + else: + return results + + + def forward(self, batched_inputs: List[Dict[str, torch.Tensor]]): + """ + Add ann_type + Ignore proposal loss when training with image labels + """ + if not self.training: + return self.inference(batched_inputs) + + images = self.preprocess_image(batched_inputs) + + ann_type = 'box' + gt_instances = [x["instances"].to(self.device) for x in batched_inputs] + if self.with_image_labels: + for inst, x in zip(gt_instances, batched_inputs): + inst._ann_type = x['ann_type'] + inst._pos_category_ids = x['pos_category_ids'] + ann_types = [x['ann_type'] for x in batched_inputs] + assert len(set(ann_types)) == 1 + ann_type = ann_types[0] + if ann_type in ['prop', 'proptag']: + for t in gt_instances: + t.gt_classes *= 0 + + if self.fp16: # TODO (zhouxy): improve + with autocast(): + features = self.backbone(images.tensor.half()) + features = {k: v.float() for k, v in features.items()} + else: + features = self.backbone(images.tensor) + + cls_features, cls_inds, caption_features = None, None, None + + if self.with_caption and 'caption' in ann_type: + inds = [torch.randint(len(x['captions']), (1,))[0].item() \ + for x in batched_inputs] + caps = [x['captions'][ind] for ind, x in zip(inds, batched_inputs)] + caption_features = self.text_encoder(caps).float() + if self.sync_caption_batch: + caption_features = self._sync_caption_features( + caption_features, ann_type, len(batched_inputs)) + + if self.dynamic_classifier and ann_type != 'caption': + cls_inds = self._sample_cls_inds(gt_instances, ann_type) # inds, inv_inds + ind_with_bg = cls_inds[0].tolist() + [-1] + cls_features = self.roi_heads.box_predictor[ + 0].cls_score.zs_weight[:, ind_with_bg].permute(1, 0).contiguous() + + classifier_info = cls_features, cls_inds, caption_features + proposals, proposal_losses = self.proposal_generator( + images, features, gt_instances) + + if self.roi_head_name in ['StandardROIHeads', 'CascadeROIHeads']: + proposals, detector_losses = self.roi_heads( + images, features, proposals, gt_instances) + else: + proposals, detector_losses = self.roi_heads( + images, features, proposals, gt_instances, + ann_type=ann_type, classifier_info=classifier_info) + + if self.vis_period > 0: + storage = get_event_storage() + if storage.iter % self.vis_period == 0: + self.visualize_training(batched_inputs, proposals) + + losses = {} + losses.update(detector_losses) + if self.with_image_labels: + if ann_type in ['box', 'prop', 'proptag']: + losses.update(proposal_losses) + else: # ignore proposal loss for non-bbox data + losses.update({k: v * 0 for k, v in proposal_losses.items()}) + else: + losses.update(proposal_losses) + if len(self.dataset_loss_weight) > 0: + dataset_sources = [x['dataset_source'] for x in batched_inputs] + assert len(set(dataset_sources)) == 1 + dataset_source = dataset_sources[0] + for k in losses: + losses[k] *= self.dataset_loss_weight[dataset_source] + + if self.return_proposal: + return proposals, losses + else: + return losses + + + def _sync_caption_features(self, caption_features, ann_type, BS): + has_caption_feature = (caption_features is not None) + BS = (BS * self.cap_batch_ratio) if (ann_type == 'box') else BS + rank = torch.full( + (BS, 1), comm.get_rank(), dtype=torch.float32, + device=self.device) + if not has_caption_feature: + caption_features = rank.new_zeros((BS, 512)) + caption_features = torch.cat([caption_features, rank], dim=1) + global_caption_features = comm.all_gather(caption_features) + caption_features = torch.cat( + [x.to(self.device) for x in global_caption_features], dim=0) \ + if has_caption_feature else None # (NB) x (D + 1) + return caption_features + + + def _sample_cls_inds(self, gt_instances, ann_type='box'): + if ann_type == 'box': + gt_classes = torch.cat( + [x.gt_classes for x in gt_instances]) + C = len(self.freq_weight) + freq_weight = self.freq_weight + else: + gt_classes = torch.cat( + [torch.tensor( + x._pos_category_ids, + dtype=torch.long, device=x.gt_classes.device) \ + for x in gt_instances]) + C = self.num_classes + freq_weight = None + assert gt_classes.max() < C, '{} {}'.format(gt_classes.max(), C) + inds = get_fed_loss_inds( + gt_classes, self.num_sample_cats, C, + weight=freq_weight) + cls_id_map = gt_classes.new_full( + (self.num_classes + 1,), len(inds)) + cls_id_map[inds] = torch.arange(len(inds), device=cls_id_map.device) + return inds, cls_id_map \ No newline at end of file diff --git a/approach/ovod/mm-ovod/mmovod/modeling/roi_heads/detic_fast_rcnn.py b/approach/ovod/mm-ovod/mmovod/modeling/roi_heads/detic_fast_rcnn.py new file mode 100644 index 0000000000000000000000000000000000000000..186822dd8f67ef9d991ee79101b3bf1243a722a5 --- /dev/null +++ b/approach/ovod/mm-ovod/mmovod/modeling/roi_heads/detic_fast_rcnn.py @@ -0,0 +1,595 @@ +# Copyright (c) Facebook, Inc. and its affiliates. +import logging +import math +import json +import numpy as np +from typing import Dict, Union +import torch +from fvcore.nn import giou_loss, smooth_l1_loss +from torch import nn +from torch.nn import functional as F +import fvcore.nn.weight_init as weight_init +import detectron2.utils.comm as comm +from detectron2.config import configurable +from detectron2.layers import ShapeSpec, batched_nms, cat, cross_entropy, nonzero_tuple +from detectron2.structures import Boxes, Instances +from detectron2.utils.events import get_event_storage +from detectron2.modeling.box_regression import Box2BoxTransform +from detectron2.modeling.roi_heads.fast_rcnn import FastRCNNOutputLayers +from detectron2.modeling.roi_heads.fast_rcnn import fast_rcnn_inference +from detectron2.modeling.roi_heads.fast_rcnn import _log_classification_stats + +from torch.cuda.amp import autocast +from ..utils import load_class_freq, get_fed_loss_inds +from .zero_shot_classifier import ZeroShotClassifier + +__all__ = ["DeticFastRCNNOutputLayers"] + + +class DeticFastRCNNOutputLayers(FastRCNNOutputLayers): + @configurable + def __init__( + self, + input_shape: ShapeSpec, + *, + mult_proposal_score=False, + cls_score=None, + sync_caption_batch = False, + use_sigmoid_ce = False, + use_fed_loss = False, + ignore_zero_cats = False, + fed_loss_num_cat = 50, + dynamic_classifier = False, + image_label_loss = '', + use_zeroshot_cls = False, + image_loss_weight = 0.1, + with_softmax_prop = False, + caption_weight = 1.0, + neg_cap_weight = 1.0, + add_image_box = False, + debug = False, + prior_prob = 0.01, + cat_freq_path = '', + fed_loss_freq_weight = 0.5, + softmax_weak_loss = False, + **kwargs, + ): + super().__init__( + input_shape=input_shape, + **kwargs, + ) + self.mult_proposal_score = mult_proposal_score + self.sync_caption_batch = sync_caption_batch + self.use_sigmoid_ce = use_sigmoid_ce + self.use_fed_loss = use_fed_loss + self.ignore_zero_cats = ignore_zero_cats + self.fed_loss_num_cat = fed_loss_num_cat + self.dynamic_classifier = dynamic_classifier + self.image_label_loss = image_label_loss + self.use_zeroshot_cls = use_zeroshot_cls + self.image_loss_weight = image_loss_weight + self.with_softmax_prop = with_softmax_prop + self.caption_weight = caption_weight + self.neg_cap_weight = neg_cap_weight + self.add_image_box = add_image_box + self.softmax_weak_loss = softmax_weak_loss + self.debug = debug + + if softmax_weak_loss: + assert image_label_loss in ['max_size'] + + if self.use_sigmoid_ce: + bias_value = -math.log((1 - prior_prob) / prior_prob) + nn.init.constant_(self.cls_score.bias, bias_value) + + if self.use_fed_loss or self.ignore_zero_cats: + freq_weight = load_class_freq(cat_freq_path, fed_loss_freq_weight) + self.register_buffer('freq_weight', freq_weight) + else: + self.freq_weight = None + + if self.use_fed_loss and len(self.freq_weight) < self.num_classes: + # assert self.num_classes == 11493 + print('Extending federated loss weight') + self.freq_weight = torch.cat( + [self.freq_weight, + self.freq_weight.new_zeros( + self.num_classes - len(self.freq_weight))] + ) + + assert (not self.dynamic_classifier) or (not self.use_fed_loss) + input_size = input_shape.channels * \ + (input_shape.width or 1) * (input_shape.height or 1) + + if self.use_zeroshot_cls: + del self.cls_score + del self.bbox_pred + assert cls_score is not None + self.cls_score = cls_score + self.bbox_pred = nn.Sequential( + nn.Linear(input_size, input_size), + nn.ReLU(inplace=True), + nn.Linear(input_size, 4) + ) + weight_init.c2_xavier_fill(self.bbox_pred[0]) + nn.init.normal_(self.bbox_pred[-1].weight, std=0.001) + nn.init.constant_(self.bbox_pred[-1].bias, 0) + + if self.with_softmax_prop: + self.prop_score = nn.Sequential( + nn.Linear(input_size, input_size), + nn.ReLU(inplace=True), + nn.Linear(input_size, self.num_classes + 1), + ) + weight_init.c2_xavier_fill(self.prop_score[0]) + nn.init.normal_(self.prop_score[-1].weight, mean=0, std=0.001) + nn.init.constant_(self.prop_score[-1].bias, 0) + + + @classmethod + def from_config(cls, cfg, input_shape): + ret = super().from_config(cfg, input_shape) + ret.update({ + 'mult_proposal_score': cfg.MODEL.ROI_BOX_HEAD.MULT_PROPOSAL_SCORE, + 'sync_caption_batch': cfg.MODEL.SYNC_CAPTION_BATCH, + 'use_sigmoid_ce': cfg.MODEL.ROI_BOX_HEAD.USE_SIGMOID_CE, + 'use_fed_loss': cfg.MODEL.ROI_BOX_HEAD.USE_FED_LOSS, + 'ignore_zero_cats': cfg.MODEL.ROI_BOX_HEAD.IGNORE_ZERO_CATS, + 'fed_loss_num_cat': cfg.MODEL.ROI_BOX_HEAD.FED_LOSS_NUM_CAT, + 'dynamic_classifier': cfg.MODEL.DYNAMIC_CLASSIFIER, + 'image_label_loss': cfg.MODEL.ROI_BOX_HEAD.IMAGE_LABEL_LOSS, + 'use_zeroshot_cls': cfg.MODEL.ROI_BOX_HEAD.USE_ZEROSHOT_CLS, + 'image_loss_weight': cfg.MODEL.ROI_BOX_HEAD.IMAGE_LOSS_WEIGHT, + 'with_softmax_prop': cfg.MODEL.ROI_BOX_HEAD.WITH_SOFTMAX_PROP, + 'caption_weight': cfg.MODEL.ROI_BOX_HEAD.CAPTION_WEIGHT, + 'neg_cap_weight': cfg.MODEL.ROI_BOX_HEAD.NEG_CAP_WEIGHT, + 'add_image_box': cfg.MODEL.ROI_BOX_HEAD.ADD_IMAGE_BOX, + 'debug': cfg.DEBUG or cfg.SAVE_DEBUG or cfg.IS_DEBUG, + 'prior_prob': cfg.MODEL.ROI_BOX_HEAD.PRIOR_PROB, + 'cat_freq_path': cfg.MODEL.ROI_BOX_HEAD.CAT_FREQ_PATH, + 'fed_loss_freq_weight': cfg.MODEL.ROI_BOX_HEAD.FED_LOSS_FREQ_WEIGHT, + 'softmax_weak_loss': cfg.MODEL.ROI_BOX_HEAD.SOFTMAX_WEAK_LOSS, + }) + if ret['use_zeroshot_cls']: + ret['cls_score'] = ZeroShotClassifier(cfg, input_shape) + return ret + + def losses(self, predictions, proposals, \ + use_advanced_loss=True, + classifier_info=(None,None,None)): + """ + enable advanced loss + """ + scores, proposal_deltas = predictions + gt_classes = ( + cat([p.gt_classes for p in proposals], dim=0) if len(proposals) else torch.empty(0) + ) + num_classes = self.num_classes + if self.dynamic_classifier: + _, cls_id_map = classifier_info[1] + gt_classes = cls_id_map[gt_classes] + num_classes = scores.shape[1] - 1 + assert cls_id_map[self.num_classes] == num_classes + _log_classification_stats(scores, gt_classes) + + if len(proposals): + proposal_boxes = cat([p.proposal_boxes.tensor for p in proposals], dim=0) # Nx4 + assert not proposal_boxes.requires_grad, "Proposals should not require gradients!" + gt_boxes = cat( + [(p.gt_boxes if p.has("gt_boxes") else p.proposal_boxes).tensor for p in proposals], + dim=0, + ) + else: + proposal_boxes = gt_boxes = torch.empty((0, 4), device=proposal_deltas.device) + + if self.use_sigmoid_ce: + loss_cls = self.sigmoid_cross_entropy_loss(scores, gt_classes) + else: + loss_cls = self.softmax_cross_entropy_loss(scores, gt_classes) + return { + "loss_cls": loss_cls, + "loss_box_reg": self.box_reg_loss( + proposal_boxes, gt_boxes, proposal_deltas, gt_classes, + num_classes=num_classes) + } + + + def sigmoid_cross_entropy_loss(self, pred_class_logits, gt_classes): + if pred_class_logits.numel() == 0: + return pred_class_logits.new_zeros([1])[0] # This is more robust than .sum() * 0. + + B = pred_class_logits.shape[0] + C = pred_class_logits.shape[1] - 1 + + target = pred_class_logits.new_zeros(B, C + 1) + target[range(len(gt_classes)), gt_classes] = 1 # B x (C + 1) + target = target[:, :C] # B x C + + weight = 1 + + if self.use_fed_loss and (self.freq_weight is not None): # fedloss + appeared = get_fed_loss_inds( + gt_classes, + num_sample_cats=self.fed_loss_num_cat, + C=C, + weight=self.freq_weight) + appeared_mask = appeared.new_zeros(C + 1) + appeared_mask[appeared] = 1 # C + 1 + appeared_mask = appeared_mask[:C] + fed_w = appeared_mask.view(1, C).expand(B, C) + weight = weight * fed_w.float() + if self.ignore_zero_cats and (self.freq_weight is not None): + w = (self.freq_weight.view(-1) > 1e-4).float() + weight = weight * w.view(1, C).expand(B, C) + # import pdb; pdb.set_trace() + + cls_loss = F.binary_cross_entropy_with_logits( + pred_class_logits[:, :-1], target, reduction='none') # B x C + loss = torch.sum(cls_loss * weight) / B + return loss + + + def softmax_cross_entropy_loss(self, pred_class_logits, gt_classes): + """ + change _no_instance handling + """ + if pred_class_logits.numel() == 0: + return pred_class_logits.new_zeros([1])[0] + + if self.ignore_zero_cats and (self.freq_weight is not None): + zero_weight = torch.cat([ + (self.freq_weight.view(-1) > 1e-4).float(), + self.freq_weight.new_ones(1)]) # C + 1 + loss = F.cross_entropy( + pred_class_logits, gt_classes, + weight=zero_weight, reduction="mean") + elif self.use_fed_loss and (self.freq_weight is not None): # fedloss + C = pred_class_logits.shape[1] - 1 + appeared = get_fed_loss_inds( + gt_classes, + num_sample_cats=self.fed_loss_num_cat, + C=C, + weight=self.freq_weight) + appeared_mask = appeared.new_zeros(C + 1).float() + appeared_mask[appeared] = 1. # C + 1 + appeared_mask[C] = 1. + loss = F.cross_entropy( + pred_class_logits, gt_classes, + weight=appeared_mask, reduction="mean") + else: + loss = F.cross_entropy( + pred_class_logits, gt_classes, reduction="mean") + return loss + + + def box_reg_loss( + self, proposal_boxes, gt_boxes, pred_deltas, gt_classes, + num_classes=-1): + """ + Allow custom background index + """ + num_classes = num_classes if num_classes > 0 else self.num_classes + box_dim = proposal_boxes.shape[1] # 4 or 5 + fg_inds = nonzero_tuple((gt_classes >= 0) & (gt_classes < num_classes))[0] + if pred_deltas.shape[1] == box_dim: # cls-agnostic regression + fg_pred_deltas = pred_deltas[fg_inds] + else: + fg_pred_deltas = pred_deltas.view(-1, self.num_classes, box_dim)[ + fg_inds, gt_classes[fg_inds] + ] + + if self.box_reg_loss_type == "smooth_l1": + gt_pred_deltas = self.box2box_transform.get_deltas( + proposal_boxes[fg_inds], + gt_boxes[fg_inds], + ) + loss_box_reg = smooth_l1_loss( + fg_pred_deltas, gt_pred_deltas, self.smooth_l1_beta, reduction="sum" + ) + elif self.box_reg_loss_type == "giou": + fg_pred_boxes = self.box2box_transform.apply_deltas( + fg_pred_deltas, proposal_boxes[fg_inds] + ) + loss_box_reg = giou_loss(fg_pred_boxes, gt_boxes[fg_inds], reduction="sum") + else: + raise ValueError(f"Invalid bbox reg loss type '{self.box_reg_loss_type}'") + return loss_box_reg / max(gt_classes.numel(), 1.0) + + def inference(self, predictions, proposals): + """ + enable use proposal boxes + """ + predictions = (predictions[0], predictions[1]) + boxes = self.predict_boxes(predictions, proposals) + scores = self.predict_probs(predictions, proposals) + if self.mult_proposal_score: + proposal_scores = [p.get('objectness_logits') for p in proposals] + scores = [(s * ps[:, None]) ** 0.5 \ + for s, ps in zip(scores, proposal_scores)] + image_shapes = [x.image_size for x in proposals] + return fast_rcnn_inference( + boxes, + scores, + image_shapes, + self.test_score_thresh, + self.test_nms_thresh, + self.test_topk_per_image, + ) + + + def predict_probs(self, predictions, proposals): + """ + support sigmoid + """ + # scores, _ = predictions + scores = predictions[0] + num_inst_per_image = [len(p) for p in proposals] + if self.use_sigmoid_ce: + probs = scores.sigmoid() + else: + probs = F.softmax(scores, dim=-1) + return probs.split(num_inst_per_image, dim=0) + + + def image_label_losses(self, predictions, proposals, image_labels, \ + classifier_info=(None,None,None), ann_type='image'): + ''' + Inputs: + scores: N x (C + 1) + image_labels B x 1 + ''' + num_inst_per_image = [len(p) for p in proposals] + scores = predictions[0] + scores = scores.split(num_inst_per_image, dim=0) # B x n x (C + 1) + if self.with_softmax_prop: + prop_scores = predictions[2].split(num_inst_per_image, dim=0) + else: + prop_scores = [None for _ in num_inst_per_image] + B = len(scores) + img_box_count = 0 + select_size_count = 0 + select_x_count = 0 + select_y_count = 0 + max_score_count = 0 + storage = get_event_storage() + loss = scores[0].new_zeros([1])[0] + caption_loss = scores[0].new_zeros([1])[0] + for idx, (score, labels, prop_score, p) in enumerate(zip( + scores, image_labels, prop_scores, proposals)): + if score.shape[0] == 0: + loss += score.new_zeros([1])[0] + continue + if 'caption' in ann_type: + score, caption_loss_img = self._caption_loss( + score, classifier_info, idx, B) + caption_loss += self.caption_weight * caption_loss_img + if ann_type == 'caption': + continue + + if self.debug: + p.selected = score.new_zeros( + (len(p),), dtype=torch.long) - 1 + for i_l, label in enumerate(labels): + if self.dynamic_classifier: + if idx == 0 and i_l == 0 and comm.is_main_process(): + storage.put_scalar('stats_label', label) + label = classifier_info[1][1][label] + assert label < score.shape[1] + if self.image_label_loss in ['wsod', 'wsddn']: + loss_i, ind = self._wsddn_loss(score, prop_score, label) + elif self.image_label_loss == 'max_score': + loss_i, ind = self._max_score_loss(score, label) + elif self.image_label_loss == 'max_size': + loss_i, ind = self._max_size_loss(score, label, p) + elif self.image_label_loss == 'first': + loss_i, ind = self._first_loss(score, label) + elif self.image_label_loss == 'image': + loss_i, ind = self._image_loss(score, label) + elif self.image_label_loss == 'min_loss': + loss_i, ind = self._min_loss_loss(score, label) + else: + assert 0 + loss += loss_i / len(labels) + if type(ind) == type([]): + img_box_count = sum(ind) / len(ind) + if self.debug: + for ind_i in ind: + p.selected[ind_i] = label + else: + img_box_count = ind + select_size_count = p[ind].proposal_boxes.area() / \ + (p.image_size[0] * p.image_size[1]) + max_score_count = score[ind, label].sigmoid() + select_x_count = (p.proposal_boxes.tensor[ind, 0] + \ + p.proposal_boxes.tensor[ind, 2]) / 2 / p.image_size[1] + select_y_count = (p.proposal_boxes.tensor[ind, 1] + \ + p.proposal_boxes.tensor[ind, 3]) / 2 / p.image_size[0] + if self.debug: + p.selected[ind] = label + + loss = loss / B + storage.put_scalar('stats_l_image', loss.item()) + if 'caption' in ann_type: + caption_loss = caption_loss / B + loss = loss + caption_loss + storage.put_scalar('stats_l_caption', caption_loss.item()) + if comm.is_main_process(): + storage.put_scalar('pool_stats', img_box_count) + storage.put_scalar('stats_select_size', select_size_count) + storage.put_scalar('stats_select_x', select_x_count) + storage.put_scalar('stats_select_y', select_y_count) + storage.put_scalar('stats_max_label_score', max_score_count) + + return { + 'image_loss': loss * self.image_loss_weight, + 'loss_cls': score.new_zeros([1])[0], + 'loss_box_reg': score.new_zeros([1])[0]} + + + def forward(self, x, classifier_info=(None,None,None)): + """ + enable classifier_info + """ + if x.dim() > 2: + x = torch.flatten(x, start_dim=1) + scores = [] + + if classifier_info[0] is not None: + cls_scores = self.cls_score(x, classifier=classifier_info[0]) + scores.append(cls_scores) + else: + cls_scores = self.cls_score(x) + scores.append(cls_scores) + + if classifier_info[2] is not None: + cap_cls = classifier_info[2] + if self.sync_caption_batch: + caption_scores = self.cls_score(x, classifier=cap_cls[:, :-1]) + else: + caption_scores = self.cls_score(x, classifier=cap_cls) + scores.append(caption_scores) + scores = torch.cat(scores, dim=1) # B x C' or B x N or B x (C'+N) + + proposal_deltas = self.bbox_pred(x) + if self.with_softmax_prop: + prop_score = self.prop_score(x) + return scores, proposal_deltas, prop_score + else: + return scores, proposal_deltas + + + def _caption_loss(self, score, classifier_info, idx, B): + assert (classifier_info[2] is not None) + assert self.add_image_box + cls_and_cap_num = score.shape[1] + cap_num = classifier_info[2].shape[0] + score, caption_score = score.split( + [cls_and_cap_num - cap_num, cap_num], dim=1) + # n x (C + 1), n x B + caption_score = caption_score[-1:] # 1 x B # -1: image level box + caption_target = caption_score.new_zeros( + caption_score.shape) # 1 x B or 1 x MB, M: num machines + if self.sync_caption_batch: + # caption_target: 1 x MB + rank = comm.get_rank() + global_idx = B * rank + idx + assert (classifier_info[2][ + global_idx, -1] - rank) ** 2 < 1e-8, \ + '{} {} {} {} {}'.format( + rank, global_idx, + classifier_info[2][global_idx, -1], + classifier_info[2].shape, + classifier_info[2][:, -1]) + caption_target[:, global_idx] = 1. + else: + assert caption_score.shape[1] == B + caption_target[:, idx] = 1. + caption_loss_img = F.binary_cross_entropy_with_logits( + caption_score, caption_target, reduction='none') + if self.sync_caption_batch: + fg_mask = (caption_target > 0.5).float() + assert (fg_mask.sum().item() - 1.) ** 2 < 1e-8, '{} {}'.format( + fg_mask.shape, fg_mask) + pos_loss = (caption_loss_img * fg_mask).sum() + neg_loss = (caption_loss_img * (1. - fg_mask)).sum() + caption_loss_img = pos_loss + self.neg_cap_weight * neg_loss + else: + caption_loss_img = caption_loss_img.sum() + return score, caption_loss_img + + + def _wsddn_loss(self, score, prop_score, label): + assert prop_score is not None + loss = 0 + final_score = score.sigmoid() * \ + F.softmax(prop_score, dim=0) # B x (C + 1) + img_score = torch.clamp( + torch.sum(final_score, dim=0), + min=1e-10, max=1-1e-10) # (C + 1) + target = img_score.new_zeros(img_score.shape) # (C + 1) + target[label] = 1. + loss += F.binary_cross_entropy(img_score, target) + ind = final_score[:, label].argmax() + return loss, ind + + + def _max_score_loss(self, score, label): + loss = 0 + target = score.new_zeros(score.shape[1]) + target[label] = 1. + ind = score[:, label].argmax().item() + loss += F.binary_cross_entropy_with_logits( + score[ind], target, reduction='sum') + return loss, ind + + + def _min_loss_loss(self, score, label): + loss = 0 + target = score.new_zeros(score.shape) + target[:, label] = 1. + with torch.no_grad(): + x = F.binary_cross_entropy_with_logits( + score, target, reduction='none').sum(dim=1) # n + ind = x.argmin().item() + loss += F.binary_cross_entropy_with_logits( + score[ind], target[0], reduction='sum') + return loss, ind + + + def _first_loss(self, score, label): + loss = 0 + target = score.new_zeros(score.shape[1]) + target[label] = 1. + ind = 0 + loss += F.binary_cross_entropy_with_logits( + score[ind], target, reduction='sum') + return loss, ind + + + def _image_loss(self, score, label): + assert self.add_image_box + target = score.new_zeros(score.shape[1]) + target[label] = 1. + ind = score.shape[0] - 1 + loss = F.binary_cross_entropy_with_logits( + score[ind], target, reduction='sum') + return loss, ind + + + def _max_size_loss(self, score, label, p): + loss = 0 + target = score.new_zeros(score.shape[1]) + target[label] = 1. + sizes = p.proposal_boxes.area() + ind = sizes[:-1].argmax().item() if len(sizes) > 1 else 0 + if self.softmax_weak_loss: + loss += F.cross_entropy( + score[ind:ind+1], + score.new_tensor(label, dtype=torch.long).view(1), + reduction='sum') + else: + loss += F.binary_cross_entropy_with_logits( + score[ind], target, reduction='sum') + return loss, ind + + + +def put_label_distribution(storage, hist_name, hist_counts, num_classes): + """ + """ + ht_min, ht_max = 0, num_classes + hist_edges = torch.linspace( + start=ht_min, end=ht_max, steps=num_classes + 1, dtype=torch.float32) + + hist_params = dict( + tag=hist_name, + min=ht_min, + max=ht_max, + num=float(hist_counts.sum()), + sum=float((hist_counts * torch.arange(len(hist_counts))).sum()), + sum_squares=float(((hist_counts * torch.arange(len(hist_counts))) ** 2).sum()), + bucket_limits=hist_edges[1:].tolist(), + bucket_counts=hist_counts.tolist(), + global_step=storage._iter, + ) + storage._histograms.append(hist_params) \ No newline at end of file diff --git a/approach/ovod/mm-ovod/mmovod/modeling/roi_heads/detic_roi_heads.py b/approach/ovod/mm-ovod/mmovod/modeling/roi_heads/detic_roi_heads.py new file mode 100644 index 0000000000000000000000000000000000000000..43e2baa734b4fc2e7a134984ecafb40c125f41d1 --- /dev/null +++ b/approach/ovod/mm-ovod/mmovod/modeling/roi_heads/detic_roi_heads.py @@ -0,0 +1,270 @@ +# Copyright (c) Facebook, Inc. and its affiliates. +import copy +import numpy as np +import json +import math +import torch +from torch import nn +from torch.autograd.function import Function +from typing import Dict, List, Optional, Tuple, Union +from torch.nn import functional as F + +from detectron2.config import configurable +from detectron2.layers import ShapeSpec +from detectron2.layers import batched_nms +from detectron2.structures import Boxes, Instances, pairwise_iou +from detectron2.utils.events import get_event_storage + +from detectron2.modeling.box_regression import Box2BoxTransform +from detectron2.modeling.roi_heads.fast_rcnn import fast_rcnn_inference +from detectron2.modeling.roi_heads.roi_heads import ROI_HEADS_REGISTRY, StandardROIHeads +from detectron2.modeling.roi_heads.cascade_rcnn import CascadeROIHeads, _ScaleGradient +from detectron2.modeling.roi_heads.box_head import build_box_head +from .detic_fast_rcnn import DeticFastRCNNOutputLayers +from ..debug import debug_second_stage + +from torch.cuda.amp import autocast + +@ROI_HEADS_REGISTRY.register() +class DeticCascadeROIHeads(CascadeROIHeads): + @configurable + def __init__( + self, + *, + mult_proposal_score: bool = False, + with_image_labels: bool = False, + add_image_box: bool = False, + image_box_size: float = 1.0, + ws_num_props: int = 512, + add_feature_to_prop: bool = False, + mask_weight: float = 1.0, + one_class_per_proposal: bool = False, + **kwargs, + ): + super().__init__(**kwargs) + self.mult_proposal_score = mult_proposal_score + self.with_image_labels = with_image_labels + self.add_image_box = add_image_box + self.image_box_size = image_box_size + self.ws_num_props = ws_num_props + self.add_feature_to_prop = add_feature_to_prop + self.mask_weight = mask_weight + self.one_class_per_proposal = one_class_per_proposal + + @classmethod + def from_config(cls, cfg, input_shape): + ret = super().from_config(cfg, input_shape) + ret.update({ + 'mult_proposal_score': cfg.MODEL.ROI_BOX_HEAD.MULT_PROPOSAL_SCORE, + 'with_image_labels': cfg.WITH_IMAGE_LABELS, + 'add_image_box': cfg.MODEL.ROI_BOX_HEAD.ADD_IMAGE_BOX, + 'image_box_size': cfg.MODEL.ROI_BOX_HEAD.IMAGE_BOX_SIZE, + 'ws_num_props': cfg.MODEL.ROI_BOX_HEAD.WS_NUM_PROPS, + 'add_feature_to_prop': cfg.MODEL.ROI_BOX_HEAD.ADD_FEATURE_TO_PROP, + 'mask_weight': cfg.MODEL.ROI_HEADS.MASK_WEIGHT, + 'one_class_per_proposal': cfg.MODEL.ROI_HEADS.ONE_CLASS_PER_PROPOSAL, + }) + return ret + + + @classmethod + def _init_box_head(self, cfg, input_shape): + ret = super()._init_box_head(cfg, input_shape) + del ret['box_predictors'] + cascade_bbox_reg_weights = cfg.MODEL.ROI_BOX_CASCADE_HEAD.BBOX_REG_WEIGHTS + box_predictors = [] + for box_head, bbox_reg_weights in zip(ret['box_heads'], \ + cascade_bbox_reg_weights): + box_predictors.append( + DeticFastRCNNOutputLayers( + cfg, box_head.output_shape, + box2box_transform=Box2BoxTransform(weights=bbox_reg_weights) + )) + ret['box_predictors'] = box_predictors + return ret + + def _forward_box(self, features, proposals, targets=None, + ann_type='box', classifier_info=(None,None,None)): + """ + Add mult proposal scores at testing + Add ann_type + """ + if (not self.training) and self.mult_proposal_score: + if len(proposals) > 0 and proposals[0].has('scores'): + proposal_scores = [p.get('scores') for p in proposals] + else: + proposal_scores = [p.get('objectness_logits') for p in proposals] + + features = [features[f] for f in self.box_in_features] + head_outputs = [] # (predictor, predictions, proposals) + prev_pred_boxes = None + image_sizes = [x.image_size for x in proposals] + + for k in range(self.num_cascade_stages): + if k > 0: + proposals = self._create_proposals_from_boxes( + prev_pred_boxes, image_sizes, + logits=[p.objectness_logits for p in proposals]) + if self.training and ann_type in ['box']: + proposals = self._match_and_label_boxes( + proposals, k, targets) + predictions = self._run_stage(features, proposals, k, + classifier_info=classifier_info) + prev_pred_boxes = self.box_predictor[k].predict_boxes( + (predictions[0], predictions[1]), proposals) + head_outputs.append((self.box_predictor[k], predictions, proposals)) + + if self.training: + losses = {} + storage = get_event_storage() + for stage, (predictor, predictions, proposals) in enumerate(head_outputs): + with storage.name_scope("stage{}".format(stage)): + if ann_type != 'box': + stage_losses = {} + if ann_type in ['image', 'caption', 'captiontag']: + image_labels = [x._pos_category_ids for x in targets] + # import pdb; pdb.set_trace() + weak_losses = predictor.image_label_losses( + predictions, proposals, image_labels, + classifier_info=classifier_info, + ann_type=ann_type) + stage_losses.update(weak_losses) + else: # supervised + stage_losses = predictor.losses( + (predictions[0], predictions[1]), proposals, + classifier_info=classifier_info) + if self.with_image_labels: + stage_losses['image_loss'] = \ + predictions[0].new_zeros([1])[0] + losses.update({k + "_stage{}".format(stage): v \ + for k, v in stage_losses.items()}) + return losses + else: + # Each is a list[Tensor] of length #image. Each tensor is Ri x (K+1) + scores_per_stage = [h[0].predict_probs(h[1], h[2]) for h in head_outputs] + scores = [ + sum(list(scores_per_image)) * (1.0 / self.num_cascade_stages) + for scores_per_image in zip(*scores_per_stage) + ] + if self.mult_proposal_score: + scores = [(s * ps[:, None]) ** 0.5 \ + for s, ps in zip(scores, proposal_scores)] + if self.one_class_per_proposal: + scores = [s * (s == s[:, :-1].max(dim=1)[0][:, None]).float() for s in scores] + predictor, predictions, proposals = head_outputs[-1] + boxes = predictor.predict_boxes( + (predictions[0], predictions[1]), proposals) + pred_instances, _ = fast_rcnn_inference( + boxes, + scores, + image_sizes, + predictor.test_score_thresh, + predictor.test_nms_thresh, + predictor.test_topk_per_image, + ) + return pred_instances + + def forward(self, images, features, proposals, targets=None, + ann_type='box', classifier_info=(None,None,None)): + ''' + enable debug and image labels + classifier_info is shared across the batch + ''' + if self.training: + if ann_type in ['box', 'prop', 'proptag']: + proposals = self.label_and_sample_proposals( + proposals, targets) + else: + proposals = self.get_top_proposals(proposals) + + losses = self._forward_box(features, proposals, targets, \ + ann_type=ann_type, classifier_info=classifier_info) + if ann_type == 'box' and targets[0].has('gt_masks'): + mask_losses = self._forward_mask(features, proposals) + losses.update({k: v * self.mask_weight \ + for k, v in mask_losses.items()}) + losses.update(self._forward_keypoint(features, proposals)) + else: + losses.update(self._get_empty_mask_loss( + features, proposals, + device=proposals[0].objectness_logits.device)) + return proposals, losses + else: + pred_instances = self._forward_box( + features, proposals, classifier_info=classifier_info) + pred_instances = self.forward_with_given_boxes(features, pred_instances) + return pred_instances, {} + + + def get_top_proposals(self, proposals): + for i in range(len(proposals)): + proposals[i].proposal_boxes.clip(proposals[i].image_size) + proposals = [p[:self.ws_num_props] for p in proposals] + for i, p in enumerate(proposals): + p.proposal_boxes.tensor = p.proposal_boxes.tensor.detach() + if self.add_image_box: + proposals[i] = self._add_image_box(p) + return proposals + + + def _add_image_box(self, p): + image_box = Instances(p.image_size) + n = 1 + h, w = p.image_size + f = self.image_box_size + image_box.proposal_boxes = Boxes( + p.proposal_boxes.tensor.new_tensor( + [w * (1. - f) / 2., + h * (1. - f) / 2., + w * (1. - (1. - f) / 2.), + h * (1. - (1. - f) / 2.)] + ).view(n, 4)) + image_box.objectness_logits = p.objectness_logits.new_ones(n) + return Instances.cat([p, image_box]) + + + def _get_empty_mask_loss(self, features, proposals, device): + if self.mask_on: + return {'loss_mask': torch.zeros( + (1, ), device=device, dtype=torch.float32)[0]} + else: + return {} + + + def _create_proposals_from_boxes(self, boxes, image_sizes, logits): + """ + Add objectness_logits + """ + boxes = [Boxes(b.detach()) for b in boxes] + proposals = [] + for boxes_per_image, image_size, logit in zip( + boxes, image_sizes, logits): + boxes_per_image.clip(image_size) + if self.training: + inds = boxes_per_image.nonempty() + boxes_per_image = boxes_per_image[inds] + logit = logit[inds] + prop = Instances(image_size) + prop.proposal_boxes = boxes_per_image + prop.objectness_logits = logit + proposals.append(prop) + return proposals + + + def _run_stage(self, features, proposals, stage, \ + classifier_info=(None,None,None)): + """ + Support classifier_info and add_feature_to_prop + """ + pool_boxes = [x.proposal_boxes for x in proposals] + box_features = self.box_pooler(features, pool_boxes) + box_features = _ScaleGradient.apply(box_features, 1.0 / self.num_cascade_stages) + box_features = self.box_head[stage](box_features) + if self.add_feature_to_prop: + feats_per_image = box_features.split( + [len(p) for p in proposals], dim=0) + for feat, p in zip(feats_per_image, proposals): + p.feat = feat + return self.box_predictor[stage]( + box_features, + classifier_info=classifier_info) diff --git a/approach/ovod/mm-ovod/mmovod/modeling/roi_heads/res5_roi_heads.py b/approach/ovod/mm-ovod/mmovod/modeling/roi_heads/res5_roi_heads.py new file mode 100644 index 0000000000000000000000000000000000000000..bab706999a9927e34a7b07dad84ba1259ab5ec64 --- /dev/null +++ b/approach/ovod/mm-ovod/mmovod/modeling/roi_heads/res5_roi_heads.py @@ -0,0 +1,173 @@ +# Copyright (c) Facebook, Inc. and its affiliates. +import inspect +import logging +import numpy as np +from typing import Dict, List, Optional, Tuple +import torch +from torch import nn + +from detectron2.config import configurable +from detectron2.layers import ShapeSpec, nonzero_tuple +from detectron2.structures import Boxes, ImageList, Instances, pairwise_iou +from detectron2.utils.events import get_event_storage +from detectron2.utils.registry import Registry + +from detectron2.modeling.box_regression import Box2BoxTransform +from detectron2.modeling.roi_heads.fast_rcnn import fast_rcnn_inference +from detectron2.modeling.roi_heads.roi_heads import ROI_HEADS_REGISTRY, Res5ROIHeads +from detectron2.modeling.roi_heads.cascade_rcnn import CascadeROIHeads, _ScaleGradient +from detectron2.modeling.roi_heads.box_head import build_box_head + +from .detic_fast_rcnn import DeticFastRCNNOutputLayers +from ..debug import debug_second_stage + +from torch.cuda.amp import autocast + +@ROI_HEADS_REGISTRY.register() +class CustomRes5ROIHeads(Res5ROIHeads): + @configurable + def __init__(self, **kwargs): + cfg = kwargs.pop('cfg') + super().__init__(**kwargs) + stage_channel_factor = 2 ** 3 + out_channels = cfg.MODEL.RESNETS.RES2_OUT_CHANNELS * stage_channel_factor + + self.with_image_labels = cfg.WITH_IMAGE_LABELS + self.ws_num_props = cfg.MODEL.ROI_BOX_HEAD.WS_NUM_PROPS + self.add_image_box = cfg.MODEL.ROI_BOX_HEAD.ADD_IMAGE_BOX + self.add_feature_to_prop = cfg.MODEL.ROI_BOX_HEAD.ADD_FEATURE_TO_PROP + self.image_box_size = cfg.MODEL.ROI_BOX_HEAD.IMAGE_BOX_SIZE + self.box_predictor = DeticFastRCNNOutputLayers( + cfg, ShapeSpec(channels=out_channels, height=1, width=1) + ) + + self.save_debug = cfg.SAVE_DEBUG + self.save_debug_path = cfg.SAVE_DEBUG_PATH + if self.save_debug: + self.debug_show_name = cfg.DEBUG_SHOW_NAME + self.vis_thresh = cfg.VIS_THRESH + self.pixel_mean = torch.Tensor(cfg.MODEL.PIXEL_MEAN).to( + torch.device(cfg.MODEL.DEVICE)).view(3, 1, 1) + self.pixel_std = torch.Tensor(cfg.MODEL.PIXEL_STD).to( + torch.device(cfg.MODEL.DEVICE)).view(3, 1, 1) + self.bgr = (cfg.INPUT.FORMAT == 'BGR') + + @classmethod + def from_config(cls, cfg, input_shape): + ret = super().from_config(cfg, input_shape) + ret['cfg'] = cfg + return ret + + def forward(self, images, features, proposals, targets=None, + ann_type='box', classifier_info=(None,None,None)): + ''' + enable debug and image labels + classifier_info is shared across the batch + ''' + if not self.save_debug: + del images + + if self.training: + if ann_type in ['box']: + proposals = self.label_and_sample_proposals( + proposals, targets) + else: + proposals = self.get_top_proposals(proposals) + + proposal_boxes = [x.proposal_boxes for x in proposals] + box_features = self._shared_roi_transform( + [features[f] for f in self.in_features], proposal_boxes + ) + predictions = self.box_predictor( + box_features.mean(dim=[2, 3]), + classifier_info=classifier_info) + + if self.add_feature_to_prop: + feats_per_image = box_features.mean(dim=[2, 3]).split( + [len(p) for p in proposals], dim=0) + for feat, p in zip(feats_per_image, proposals): + p.feat = feat + + if self.training: + del features + if (ann_type != 'box'): + image_labels = [x._pos_category_ids for x in targets] + losses = self.box_predictor.image_label_losses( + predictions, proposals, image_labels, + classifier_info=classifier_info, + ann_type=ann_type) + else: + losses = self.box_predictor.losses( + (predictions[0], predictions[1]), proposals) + if self.with_image_labels: + assert 'image_loss' not in losses + losses['image_loss'] = predictions[0].new_zeros([1])[0] + if self.save_debug: + denormalizer = lambda x: x * self.pixel_std + self.pixel_mean + if ann_type != 'box': + image_labels = [x._pos_category_ids for x in targets] + else: + image_labels = [[] for x in targets] + debug_second_stage( + [denormalizer(x.clone()) for x in images], + targets, proposals=proposals, + save_debug=self.save_debug, + debug_show_name=self.debug_show_name, + vis_thresh=self.vis_thresh, + image_labels=image_labels, + save_debug_path=self.save_debug_path, + bgr=self.bgr) + return proposals, losses + else: + pred_instances, _ = self.box_predictor.inference(predictions, proposals) + pred_instances = self.forward_with_given_boxes(features, pred_instances) + if self.save_debug: + denormalizer = lambda x: x * self.pixel_std + self.pixel_mean + debug_second_stage( + [denormalizer(x.clone()) for x in images], + pred_instances, proposals=proposals, + save_debug=self.save_debug, + debug_show_name=self.debug_show_name, + vis_thresh=self.vis_thresh, + save_debug_path=self.save_debug_path, + bgr=self.bgr) + return pred_instances, {} + + def get_top_proposals(self, proposals): + for i in range(len(proposals)): + proposals[i].proposal_boxes.clip(proposals[i].image_size) + proposals = [p[:self.ws_num_props] for p in proposals] + for i, p in enumerate(proposals): + p.proposal_boxes.tensor = p.proposal_boxes.tensor.detach() + if self.add_image_box: + proposals[i] = self._add_image_box(p) + return proposals + + def _add_image_box(self, p, use_score=False): + image_box = Instances(p.image_size) + n = 1 + h, w = p.image_size + if self.image_box_size < 1.0: + f = self.image_box_size + image_box.proposal_boxes = Boxes( + p.proposal_boxes.tensor.new_tensor( + [w * (1. - f) / 2., + h * (1. - f) / 2., + w * (1. - (1. - f) / 2.), + h * (1. - (1. - f) / 2.)] + ).view(n, 4)) + else: + image_box.proposal_boxes = Boxes( + p.proposal_boxes.tensor.new_tensor( + [0, 0, w, h]).view(n, 4)) + if use_score: + image_box.scores = \ + p.objectness_logits.new_ones(n) + image_box.pred_classes = \ + p.objectness_logits.new_zeros(n, dtype=torch.long) + image_box.objectness_logits = \ + p.objectness_logits.new_ones(n) + else: + image_box.objectness_logits = \ + p.objectness_logits.new_ones(n) + return Instances.cat([p, image_box]) \ No newline at end of file diff --git a/approach/ovod/mm-ovod/mmovod/modeling/roi_heads/zero_shot_classifier.py b/approach/ovod/mm-ovod/mmovod/modeling/roi_heads/zero_shot_classifier.py new file mode 100644 index 0000000000000000000000000000000000000000..ad38ede92f63b9da9f8a919e2808849a16ef4caa --- /dev/null +++ b/approach/ovod/mm-ovod/mmovod/modeling/roi_heads/zero_shot_classifier.py @@ -0,0 +1,87 @@ +# Copyright (c) Facebook, Inc. and its affiliates. +import numpy as np +import torch +from torch import nn +from torch.nn import functional as F +from detectron2.config import configurable +from detectron2.layers import ShapeSpec + + +class ZeroShotClassifier(nn.Module): + @configurable + def __init__( + self, + input_shape: ShapeSpec, + *, + num_classes: int, + zs_weight_path: str, + zs_weight_dim: int = 512, + use_bias: float = 0.0, + norm_weight: bool = True, + norm_temperature: float = 50.0, + ): + super().__init__() + if isinstance(input_shape, int): # some backward compatibility + input_shape = ShapeSpec(channels=input_shape) + input_size = input_shape.channels * (input_shape.width or 1) * (input_shape.height or 1) + self.norm_weight = norm_weight + self.norm_temperature = norm_temperature + + self.use_bias = use_bias < 0 + if self.use_bias: + self.cls_bias = nn.Parameter(torch.ones(1) * use_bias) + + self.linear = nn.Linear(input_size, zs_weight_dim) + + if zs_weight_path == 'rand': + zs_weight = torch.randn((zs_weight_dim, num_classes)) + nn.init.normal_(zs_weight, std=0.01) + else: + zs_weight = torch.tensor( + np.load(zs_weight_path), + dtype=torch.float32).permute(1, 0).contiguous() # D x C + zs_weight = torch.cat( + [zs_weight, zs_weight.new_zeros((zs_weight_dim, 1))], + dim=1) # D x (C + 1) + + if self.norm_weight: + zs_weight = F.normalize(zs_weight, p=2, dim=0) + + if zs_weight_path == 'rand': + self.zs_weight = nn.Parameter(zs_weight) + else: + self.register_buffer('zs_weight', zs_weight) + + assert self.zs_weight.shape[1] == num_classes + 1, self.zs_weight.shape + + @classmethod + def from_config(cls, cfg, input_shape): + return { + 'input_shape': input_shape, + 'num_classes': cfg.MODEL.ROI_HEADS.NUM_CLASSES, + 'zs_weight_path': cfg.MODEL.ROI_BOX_HEAD.ZEROSHOT_WEIGHT_PATH, + 'zs_weight_dim': cfg.MODEL.ROI_BOX_HEAD.ZEROSHOT_WEIGHT_DIM, + 'use_bias': cfg.MODEL.ROI_BOX_HEAD.USE_BIAS, + 'norm_weight': cfg.MODEL.ROI_BOX_HEAD.NORM_WEIGHT, + 'norm_temperature': cfg.MODEL.ROI_BOX_HEAD.NORM_TEMP, + } + + def forward(self, x, classifier=None): + ''' + Inputs: + x: B x D' + classifier_info: (C', C' x D) + ''' + x = self.linear(x) + if classifier is not None: + zs_weight = classifier.permute(1, 0).contiguous() # D x C' + zs_weight = F.normalize(zs_weight, p=2, dim=0) \ + if self.norm_weight else zs_weight + else: + zs_weight = self.zs_weight + if self.norm_weight: + x = self.norm_temperature * F.normalize(x, p=2, dim=1) + x = torch.mm(x, zs_weight) + if self.use_bias: + x = x + self.cls_bias + return x diff --git a/approach/ovod/mm-ovod/mmovod/modeling/text/text_encoder.py b/approach/ovod/mm-ovod/mmovod/modeling/text/text_encoder.py new file mode 100644 index 0000000000000000000000000000000000000000..3ec5090c290ee5ecf1dd49915b70d6b4cc2b84d9 --- /dev/null +++ b/approach/ovod/mm-ovod/mmovod/modeling/text/text_encoder.py @@ -0,0 +1,189 @@ +# This code is modified from https://github.com/openai/CLIP/blob/main/clip/clip.py +# Modified by Xingyi Zhou +# The original code is under MIT license +# Copyright (c) Facebook, Inc. and its affiliates. +from typing import Union, List +from collections import OrderedDict +import torch +from torch import nn +import torch + +from clip.simple_tokenizer import SimpleTokenizer as _Tokenizer + +__all__ = ["tokenize"] + +count = 0 + +class LayerNorm(nn.LayerNorm): + """Subclass torch's LayerNorm to handle fp16.""" + + def forward(self, x: torch.Tensor): + orig_type = x.dtype + ret = super().forward(x.type(torch.float32)) + return ret.type(orig_type) + + +class QuickGELU(nn.Module): + def forward(self, x: torch.Tensor): + return x * torch.sigmoid(1.702 * x) + + +class ResidualAttentionBlock(nn.Module): + def __init__(self, d_model: int, n_head: int, attn_mask: torch.Tensor = None): + super().__init__() + + self.attn = nn.MultiheadAttention(d_model, n_head) + self.ln_1 = LayerNorm(d_model) + self.mlp = nn.Sequential(OrderedDict([ + ("c_fc", nn.Linear(d_model, d_model * 4)), + ("gelu", QuickGELU()), + ("c_proj", nn.Linear(d_model * 4, d_model)) + ])) + self.ln_2 = LayerNorm(d_model) + self.attn_mask = attn_mask + + def attention(self, x: torch.Tensor): + self.attn_mask = self.attn_mask.to(dtype=x.dtype, device=x.device) if self.attn_mask is not None else None + return self.attn(x, x, x, need_weights=False, attn_mask=self.attn_mask)[0] + + def forward(self, x: torch.Tensor): + x = x + self.attention(self.ln_1(x)) + x = x + self.mlp(self.ln_2(x)) + return x + + +class Transformer(nn.Module): + def __init__(self, width: int, layers: int, heads: int, attn_mask: torch.Tensor = None): + super().__init__() + self.width = width + self.layers = layers + self.resblocks = nn.Sequential( + *[ResidualAttentionBlock(width, heads, attn_mask) \ + for _ in range(layers)]) + + def forward(self, x: torch.Tensor): + return self.resblocks(x) + +class CLIPTEXT(nn.Module): + def __init__(self, + embed_dim=512, + # text + context_length=77, + vocab_size=49408, + transformer_width=512, + transformer_heads=8, + transformer_layers=12 + ): + super().__init__() + + self._tokenizer = _Tokenizer() + self.context_length = context_length + + self.transformer = Transformer( + width=transformer_width, + layers=transformer_layers, + heads=transformer_heads, + attn_mask=self.build_attention_mask() + ) + + self.vocab_size = vocab_size + self.token_embedding = nn.Embedding(vocab_size, transformer_width) + self.positional_embedding = nn.Parameter(torch.empty(self.context_length, transformer_width)) + self.ln_final = LayerNorm(transformer_width) + + self.text_projection = nn.Parameter(torch.empty(transformer_width, embed_dim)) + # self.logit_scale = nn.Parameter(torch.ones([]) * np.log(1 / 0.07)) + + self.initialize_parameters() + + def initialize_parameters(self): + nn.init.normal_(self.token_embedding.weight, std=0.02) + nn.init.normal_(self.positional_embedding, std=0.01) + + proj_std = (self.transformer.width ** -0.5) * ((2 * self.transformer.layers) ** -0.5) + attn_std = self.transformer.width ** -0.5 + fc_std = (2 * self.transformer.width) ** -0.5 + for block in self.transformer.resblocks: + nn.init.normal_(block.attn.in_proj_weight, std=attn_std) + nn.init.normal_(block.attn.out_proj.weight, std=proj_std) + nn.init.normal_(block.mlp.c_fc.weight, std=fc_std) + nn.init.normal_(block.mlp.c_proj.weight, std=proj_std) + + if self.text_projection is not None: + nn.init.normal_(self.text_projection, std=self.transformer.width ** -0.5) + + def build_attention_mask(self): + # lazily create causal attention mask, with full attention between the vision tokens + # pytorch uses additive attention mask; fill with -inf + mask = torch.empty(self.context_length, self.context_length) + mask.fill_(float("-inf")) + mask.triu_(1) # zero out the lower diagonal + return mask + + @property + def device(self): + return self.text_projection.device + + @property + def dtype(self): + return self.text_projection.dtype + + def tokenize(self, + texts: Union[str, List[str]], \ + context_length: int = 77) -> torch.LongTensor: + """ + """ + if isinstance(texts, str): + texts = [texts] + + sot_token = self._tokenizer.encoder["<|startoftext|>"] + eot_token = self._tokenizer.encoder["<|endoftext|>"] + all_tokens = [[sot_token] + self._tokenizer.encode(text) + [eot_token] for text in texts] + result = torch.zeros(len(all_tokens), context_length, dtype=torch.long) + + for i, tokens in enumerate(all_tokens): + if len(tokens) > context_length: + st = torch.randint( + len(tokens) - context_length + 1, (1,))[0].item() + tokens = tokens[st: st + context_length] + # raise RuntimeError(f"Input {texts[i]} is too long for context length {context_length}") + result[i, :len(tokens)] = torch.tensor(tokens) + + return result + + def encode_text(self, text): + x = self.token_embedding(text).type(self.dtype) # [batch_size, n_ctx, d_model] + x = x + self.positional_embedding.type(self.dtype) + x = x.permute(1, 0, 2) # NLD -> LND + x = self.transformer(x) + x = x.permute(1, 0, 2) # LND -> NLD + x = self.ln_final(x).type(self.dtype) + # take features from the eot embedding (eot_token is the highest number in each sequence) + x = x[torch.arange(x.shape[0]), text.argmax(dim=-1)] @ self.text_projection + return x + + def forward(self, captions): + ''' + captions: list of strings + ''' + text = self.tokenize(captions).to(self.device) # B x L x D + features = self.encode_text(text) # B x D + return features + + +def build_text_encoder(pretrain=True): + text_encoder = CLIPTEXT() + if pretrain: + import clip + pretrained_model, _ = clip.load("ViT-B/32", device='cpu') + state_dict = pretrained_model.state_dict() + to_delete_keys = ["logit_scale", "input_resolution", \ + "context_length", "vocab_size"] + \ + [k for k in state_dict.keys() if k.startswith('visual.')] + for k in to_delete_keys: + if k in state_dict: + del state_dict[k] + print('Loading pretrained CLIP') + text_encoder.load_state_dict(state_dict) + # import pdb; pdb.set_trace() + return text_encoder \ No newline at end of file diff --git a/approach/ovod/mm-ovod/mmovod/modeling/utils.py b/approach/ovod/mm-ovod/mmovod/modeling/utils.py new file mode 100644 index 0000000000000000000000000000000000000000..297fb469a049d3df2a4aa730e09c9919b4c4ca3c --- /dev/null +++ b/approach/ovod/mm-ovod/mmovod/modeling/utils.py @@ -0,0 +1,49 @@ +# Copyright (c) Facebook, Inc. and its affiliates. +import torch +import json +import numpy as np +from torch.nn import functional as F + +def load_class_freq( + path='datasets/metadata/lvis_v1_train_cat_info.json', freq_weight=1.0): + cat_info = json.load(open(path, 'r')) + cat_info = torch.tensor( + [c['image_count'] for c in sorted(cat_info, key=lambda x: x['id'])]) + freq_weight = cat_info.float() ** freq_weight + return freq_weight + + +def get_fed_loss_inds(gt_classes, num_sample_cats, C, weight=None): + appeared = torch.unique(gt_classes) # C' + prob = appeared.new_ones(C + 1).float() + prob[-1] = 0 + if len(appeared) < num_sample_cats: + if weight is not None: + prob[:C] = weight.float().clone() + prob[appeared] = 0 + more_appeared = torch.multinomial( + prob, num_sample_cats - len(appeared), + replacement=False) + appeared = torch.cat([appeared, more_appeared]) + return appeared + + + +def reset_cls_test(model, cls_path, num_classes): + model.roi_heads.num_classes = num_classes + if type(cls_path) == str: + print('Resetting zs_weight', cls_path) + zs_weight = torch.tensor( + np.load(cls_path), + dtype=torch.float32).permute(1, 0).contiguous() # D x C + else: + zs_weight = cls_path + zs_weight = torch.cat( + [zs_weight, zs_weight.new_zeros((zs_weight.shape[0], 1))], + dim=1) # D x (C + 1) + if model.roi_heads.box_predictor[0].cls_score.norm_weight: + zs_weight = F.normalize(zs_weight, p=2, dim=0) + zs_weight = zs_weight.to(model.device) + for k in range(len(model.roi_heads.box_predictor)): + del model.roi_heads.box_predictor[k].cls_score.zs_weight + model.roi_heads.box_predictor[k].cls_score.zs_weight = zs_weight \ No newline at end of file diff --git a/approach/ovod/mm-ovod/mmovod/predictor.py b/approach/ovod/mm-ovod/mmovod/predictor.py new file mode 100644 index 0000000000000000000000000000000000000000..318205acb90d47a54ff6f34400e1da744b2d85ba --- /dev/null +++ b/approach/ovod/mm-ovod/mmovod/predictor.py @@ -0,0 +1,253 @@ +# Copyright (c) Facebook, Inc. and its affiliates. +import atexit +import bisect +import multiprocessing as mp +from collections import deque +import cv2 +import torch + +from detectron2.data import MetadataCatalog +from detectron2.engine.defaults import DefaultPredictor +from detectron2.utils.video_visualizer import VideoVisualizer +from detectron2.utils.visualizer import ColorMode, Visualizer + +from .modeling.utils import reset_cls_test + + +def get_clip_embeddings(vocabulary, prompt='a '): + from detic.modeling.text.text_encoder import build_text_encoder + text_encoder = build_text_encoder(pretrain=True) + text_encoder.eval() + texts = [prompt + x for x in vocabulary] + emb = text_encoder(texts).detach().permute(1, 0).contiguous().cpu() + return emb + +BUILDIN_CLASSIFIER = { + 'lvis': 'datasets/metadata/lvis_v1_clip_a+cname.npy', + 'objects365': 'datasets/metadata/o365_clip_a+cnamefix.npy', + 'openimages': 'datasets/metadata/oid_clip_a+cname.npy', + 'coco': 'datasets/metadata/coco_clip_a+cname.npy', +} + +BUILDIN_METADATA_PATH = { + 'lvis': 'lvis_v1_val', + 'objects365': 'objects365_v2_val', + 'openimages': 'oid_val_expanded', + 'coco': 'coco_2017_val', +} + +class VisualizationDemo(object): + def __init__(self, cfg, args, + instance_mode=ColorMode.IMAGE, parallel=False): + """ + Args: + cfg (CfgNode): + instance_mode (ColorMode): + parallel (bool): whether to run the model in different processes from visualization. + Useful since the visualization logic can be slow. + """ + if args.vocabulary == 'custom': + self.metadata = MetadataCatalog.get("__unused") + self.metadata.thing_classes = args.custom_vocabulary.split(',') + classifier = get_clip_embeddings(self.metadata.thing_classes) + else: + self.metadata = MetadataCatalog.get( + BUILDIN_METADATA_PATH[args.vocabulary]) + classifier = BUILDIN_CLASSIFIER[args.vocabulary] + + num_classes = len(self.metadata.thing_classes) + self.cpu_device = torch.device("cpu") + self.instance_mode = instance_mode + + self.parallel = parallel + if parallel: + num_gpu = torch.cuda.device_count() + self.predictor = AsyncPredictor(cfg, num_gpus=num_gpu) + else: + self.predictor = DefaultPredictor(cfg) + reset_cls_test(self.predictor.model, classifier, num_classes) + + def run_on_image(self, image): + """ + Args: + image (np.ndarray): an image of shape (H, W, C) (in BGR order). + This is the format used by OpenCV. + + Returns: + predictions (dict): the output of the model. + vis_output (VisImage): the visualized image output. + """ + vis_output = None + predictions = self.predictor(image) + # Convert image from OpenCV BGR format to Matplotlib RGB format. + image = image[:, :, ::-1] + visualizer = Visualizer(image, self.metadata, instance_mode=self.instance_mode) + if "panoptic_seg" in predictions: + panoptic_seg, segments_info = predictions["panoptic_seg"] + vis_output = visualizer.draw_panoptic_seg_predictions( + panoptic_seg.to(self.cpu_device), segments_info + ) + else: + if "sem_seg" in predictions: + vis_output = visualizer.draw_sem_seg( + predictions["sem_seg"].argmax(dim=0).to(self.cpu_device) + ) + if "instances" in predictions: + instances = predictions["instances"].to(self.cpu_device) + vis_output = visualizer.draw_instance_predictions(predictions=instances) + + return predictions, vis_output + + def _frame_from_video(self, video): + while video.isOpened(): + success, frame = video.read() + if success: + yield frame + else: + break + + def run_on_video(self, video): + """ + Visualizes predictions on frames of the input video. + + Args: + video (cv2.VideoCapture): a :class:`VideoCapture` object, whose source can be + either a webcam or a video file. + + Yields: + ndarray: BGR visualizations of each video frame. + """ + video_visualizer = VideoVisualizer(self.metadata, self.instance_mode) + + def process_predictions(frame, predictions): + frame = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB) + if "panoptic_seg" in predictions: + panoptic_seg, segments_info = predictions["panoptic_seg"] + vis_frame = video_visualizer.draw_panoptic_seg_predictions( + frame, panoptic_seg.to(self.cpu_device), segments_info + ) + elif "instances" in predictions: + predictions = predictions["instances"].to(self.cpu_device) + vis_frame = video_visualizer.draw_instance_predictions(frame, predictions) + elif "sem_seg" in predictions: + vis_frame = video_visualizer.draw_sem_seg( + frame, predictions["sem_seg"].argmax(dim=0).to(self.cpu_device) + ) + + # Converts Matplotlib RGB format to OpenCV BGR format + vis_frame = cv2.cvtColor(vis_frame.get_image(), cv2.COLOR_RGB2BGR) + return vis_frame + + frame_gen = self._frame_from_video(video) + if self.parallel: + buffer_size = self.predictor.default_buffer_size + + frame_data = deque() + + for cnt, frame in enumerate(frame_gen): + frame_data.append(frame) + self.predictor.put(frame) + + if cnt >= buffer_size: + frame = frame_data.popleft() + predictions = self.predictor.get() + yield process_predictions(frame, predictions) + + while len(frame_data): + frame = frame_data.popleft() + predictions = self.predictor.get() + yield process_predictions(frame, predictions) + else: + for frame in frame_gen: + yield process_predictions(frame, self.predictor(frame)) + + +class AsyncPredictor: + """ + A predictor that runs the model asynchronously, possibly on >1 GPUs. + Because rendering the visualization takes considerably amount of time, + this helps improve throughput a little bit when rendering videos. + """ + + class _StopToken: + pass + + class _PredictWorker(mp.Process): + def __init__(self, cfg, task_queue, result_queue): + self.cfg = cfg + self.task_queue = task_queue + self.result_queue = result_queue + super().__init__() + + def run(self): + predictor = DefaultPredictor(self.cfg) + + while True: + task = self.task_queue.get() + if isinstance(task, AsyncPredictor._StopToken): + break + idx, data = task + result = predictor(data) + self.result_queue.put((idx, result)) + + def __init__(self, cfg, num_gpus: int = 1): + """ + Args: + cfg (CfgNode): + num_gpus (int): if 0, will run on CPU + """ + num_workers = max(num_gpus, 1) + self.task_queue = mp.Queue(maxsize=num_workers * 3) + self.result_queue = mp.Queue(maxsize=num_workers * 3) + self.procs = [] + for gpuid in range(max(num_gpus, 1)): + cfg = cfg.clone() + cfg.defrost() + cfg.MODEL.DEVICE = "cuda:{}".format(gpuid) if num_gpus > 0 else "cpu" + self.procs.append( + AsyncPredictor._PredictWorker(cfg, self.task_queue, self.result_queue) + ) + + self.put_idx = 0 + self.get_idx = 0 + self.result_rank = [] + self.result_data = [] + + for p in self.procs: + p.start() + atexit.register(self.shutdown) + + def put(self, image): + self.put_idx += 1 + self.task_queue.put((self.put_idx, image)) + + def get(self): + self.get_idx += 1 # the index needed for this request + if len(self.result_rank) and self.result_rank[0] == self.get_idx: + res = self.result_data[0] + del self.result_data[0], self.result_rank[0] + return res + + while True: + # make sure the results are returned in the correct order + idx, res = self.result_queue.get() + if idx == self.get_idx: + return res + insert = bisect.bisect(self.result_rank, idx) + self.result_rank.insert(insert, idx) + self.result_data.insert(insert, res) + + def __len__(self): + return self.put_idx - self.get_idx + + def __call__(self, image): + self.put(image) + return self.get() + + def shutdown(self): + for _ in self.procs: + self.task_queue.put(AsyncPredictor._StopToken()) + + @property + def default_buffer_size(self): + return len(self.procs) * 5 diff --git a/approach/ovod/mm-ovod/tools/collate_exemplar_dict.py b/approach/ovod/mm-ovod/tools/collate_exemplar_dict.py new file mode 100644 index 0000000000000000000000000000000000000000..8dbbd1052593871113ec9ceb4047fc44714af06e --- /dev/null +++ b/approach/ovod/mm-ovod/tools/collate_exemplar_dict.py @@ -0,0 +1,275 @@ +import time +import json +import glob +import copy +import pickle +import os +import argparse + +from collections import defaultdict +from multiprocessing import Pool + +import numpy as np + +from nltk.corpus import wordnet as wn +from lvis import LVIS +from tqdm.auto import tqdm + + +def get_code(syn): + return syn.pos() + str(syn.offset()).zfill(8) + + +def get_lemma_names(syn): + return [lemma.name() for lemma in syn.lemmas()] + + +def get_args(): + parser = argparse.ArgumentParser() + parser.add_argument( + "--lvis-dir", + type=str, + default="datasets/lvis", + ) + parser.add_argument( + "--imagenet-dir", + type=str, + default="datasets/imagenet", + ) + parser.add_argument( + "--visual-genome-dir", + type=str, + default="datasets/VisualGenome", + ) + parser.add_argument( + "--output-path", + type=str, + default="datasets/metadata/exemplar_dict.json", + ) + args = parser.parse_args() + return args + + +def main(args): + lvis_train_dataset = LVIS(os.path.join(args.lvis_dir, "lvis_v1_train.json")) + # In LVIS the 'stopsign' category is not a wordnet synset and so replace with 'street_sign', a near cousin + street_sign_synset = wn.synset("street_sign.n.01") + lvis_synsets = [ + wn.synset(c['synset']) if "stop_sign" not in c['name'] else street_sign_synset + for c in lvis_train_dataset.cats.values() + ] + synset2catid = {v['synset']: v['id'] for v in lvis_train_dataset.cats.values()} + catid2synset = {v['id']: v['synset'] for v in lvis_train_dataset.cats.values()} + + # Lets start by collecting images in ImageNet + # we do this using all ImageNet21k with tree hierarchy as defined in the dataset preparation file + synsets_pos_off_paths = ( + glob.glob(os.path.join(args.imagenet_dir, "train/*")) + + glob.glob(os.path.join(args.imagenet_dir, "imagenet21k_small_classes/*")) + ) + # import pdb; pdb.set_trace() + synsets_pos_off2path = {os.path.basename(d): d for d in synsets_pos_off_paths} + synsets_pos_off = [os.path.basename(d) for d in synsets_pos_off_paths] + available_imagenet_synsets = [wn.synset_from_pos_and_offset(a[0], int(a[1:])) for a in synsets_pos_off] + direct_match_imagenet_synsets = [v for v in available_imagenet_synsets if v.name() in synset2catid.keys()] + assert len(direct_match_imagenet_synsets) == 997 + exemplar_dict_imagenet = defaultdict(list) + + for v in tqdm(direct_match_imagenet_synsets, total=len(direct_match_imagenet_synsets)): + code = get_code(v) + filenames = glob.glob(os.path.join(synsets_pos_off2path[code], "*.JPEG")) + anns = [] + for filename in filenames: + # need the last three parts of the path + ann = { + "file_name": "/".join(filename.split("/")[-3:]), + "category_id": synset2catid[v.name()], + "dataset": "imagenet21k", + "synset": v.name(), + } + anns.append(ann) + exemplar_dict_imagenet[v.name()].extend(anns) + + # Now lets collect images from LVIS with area > 32*32 + exemplar_dict_lvis = defaultdict(list) + lvis_anns = lvis_train_dataset.load_anns( + lvis_train_dataset.get_ann_ids( + cat_ids=lvis_train_dataset.get_cat_ids(), + area_rng=[32.0**2, float('inf')] + )) + + for ann in tqdm(lvis_anns): + img = lvis_train_dataset.load_imgs([ann['image_id']])[0] + ann['dataset'] = "lvis" + ann['file_name'] = "/".join(img['coco_url'].split("/")[-2:]) + ann['synset'] = catid2synset[ann['category_id']] + exemplar_dict_lvis[catid2synset[ann['category_id']]].append(ann) + + # get keys from both dictionaries + keys = list(set(exemplar_dict_imagenet.keys()).union(set(exemplar_dict_lvis.keys()))) + exemplar_dict_combined_two = defaultdict(list) + for key in keys: + exemplar_dict_combined_two[key] = exemplar_dict_imagenet[key] + exemplar_dict_lvis[key] + + # let's find the lacking synsets + lacking_synsets = [k.name() for k in lvis_synsets if len(exemplar_dict_combined_two[k.name()]) < 40] + print(f"After collecting exemplars from ImageNet and LVIS, there are still {len(lacking_synsets)} without at least 40 exemplars") + + # Now let's collect images from Visual Genome + exemplar_dict_vg = defaultdict(list) + vg_objects_path = os.path.join(args.visual_genome_dir, "objects.json") + with open(vg_objects_path, "r") as f: + visual_genome_objects = json.load(f) + + vg_images_path = os.path.join(args.visual_genome_dir, "image_data.json") + with open(vg_images_path, "r") as f: + visual_genome_images = json.load(f) + visual_genome_iid2path = {v['image_id']: "/".join(v['url'].split("/")[-2:]) for v in visual_genome_images} + + synsets2boxes = defaultdict(list) + for i, img in tqdm(enumerate(visual_genome_objects), total=len(visual_genome_objects)): + for j, obj in enumerate(img['objects']): + if len(obj['synsets']) != 1: + continue + synsets2boxes[obj['synsets'][0]].append((i, j, obj['w'] * obj['h'])) + + # We shall only use visual genome for synsets with less than 40 exemplars + for k in tqdm(lacking_synsets, total=len(lacking_synsets)): + visual_genome_ids = synsets2boxes[k] + anns = [] + for a in visual_genome_ids: + if a[-1] < 32**2: + continue + img_objects = visual_genome_objects[a[0]] + iid = img_objects['image_id'] + ann = { + 'image_id': iid, + 'dataset': 'visual_genome', + 'file_name': visual_genome_iid2path[iid], + 'category_id': synset2catid[k], + 'synset': k, + } + ann.update(img_objects['objects'][a[1]]) + assert ann['synsets'][0] == k + anns.append(ann) + exemplar_dict_vg[k] = anns + + # Now let's combine all the dictionaries + exemplar_dict_combined_three = defaultdict(list) + for syn in synset2catid.keys(): + exemplar_dict_combined_three[syn].extend( + exemplar_dict_lvis[syn] + + exemplar_dict_imagenet[syn] + + exemplar_dict_vg[syn] + ) + + # At this point there should be at least TEN exemplars in 1160 out of 1203 synsets + # as described in the appendix of the paper, some other synsets in imagenet are suitable + # and in some cases we use close cousins + + manual_synsets = { + "anklet.n.03": ["anklet.n.02"], + "beach_ball.n.01": ["volleyball.n.02"], + "bible.n.01": ["book.n.11"], + "black_flag.n.01": ["flag.n.01"], + "bob.n.05": ["spinner.n.03"], + "bowl.n.08": ["pipe_smoker.n.01"], + "brooch.n.01": ["pectoral.n.02", "bling.n.01"], + "card.n.02": ["business_card.n.01", "library_card.n.01"], + "checkbook.n.01": ["daybook.n.02"], + "coil.n.05": ["coil_spring.n.01"], + "coloring_material.n.01": ["crayon.n.01"], + "crab.n.05": ["shellfish.n.01", "lobster.n.01"], + "cube.n.05": ["die.n.01"], + "cufflink.n.01": ["bling.n.01"], + "dishwasher_detergent.n.01": ["laundry_detergent.n.01", "cleansing_agent.n.01"], + "diving_board.n.01": ["springboard.n.01"], + "dollar.n.02": ["money.n.01", "paper_money.n.01"], + "eel.n.01": ["electric_eel.n.01"], + "escargot.n.01": ["snail.n.01"], + "gargoyle.n.02": ["statue.n.01"], + "gem.n.02": ["crystal.n.01", "bling.n.01"], + "grits.n.01": ["congee.n.01"], + "hardback.n.01": ["book.n.07"], + "jewel.n.01": ["bling.n.01"], + "keycard.n.01": ["magnetic_stripe.n.01"], + "lamb_chop.n.01": ["porkchop.n.01", "rib.n.03"], + "mail_slot.n.01": ["maildrop.n.01", "mailbox.n.01"], + "milestone.n.01": ["cairn.n.01"], + "pad.n.03": ["handstamp.n.01"], + "paperback_book.n.01": ["book.n.07"], + "paperweight.n.01": ["letter_opener.n.01"], + "pennant.n.02": ["bunting.n.01"], + "penny.n.02": ["coin.n.01"], + "plume.n.02": ["headdress.n.01"], + "poker.n.01": ["fire_tongs.n.01"], + "rag_doll.n.01": ["doll.n.01"], + "road_map.n.02": ["map.n.01"], + "scarecrow.n.01": ["creche.n.02"], + "sparkler.n.02": ["firework.n.01"], + "sugarcane.n.01": ["cane_sugar.n.02"], + "water_pistol.n.01": ["pistol.n.01"], + "wedding_ring.n.01": ["ring.n.01"], + "windsock.n.01": ["weathervane.n.01"], + } + + manual_exemplar_dict = defaultdict(list) + + remaining_lacking_synsets = [(k, len(v)) for k, v in exemplar_dict_combined_three.items() if len(v) < 10] + assert len(remaining_lacking_synsets) == len(manual_synsets) == 43 + + for k, v in tqdm(manual_synsets.items(), total=len(remaining_lacking_synsets)): + for manual_synset in v: + code = get_code(wn.synset(manual_synset)) + if code not in synsets_pos_off2path: + continue + + filenames = glob.glob(os.path.join(synsets_pos_off2path[code], "*.JPEG")) + anns = [] + for filename in filenames: + ann = { + "file_name": "/".join(filename.split("/")[-3:]), + "category_id": synset2catid[k], + "dataset": "imagenet21k", + "synset": manual_synset, + } + anns.append(ann) + # if k in remaining_lacking_synsets: + # print(k, manual_synset, len(anns)) + manual_exemplar_dict[k].extend(anns) + + for k, v in tqdm(manual_synsets.items(), total=len(remaining_lacking_synsets)): + for manual_synset in v: + if manual_synset not in synsets2boxes.keys(): + continue + visual_genome_ids = synsets2boxes[manual_synset] + anns = [] + for a in visual_genome_ids: + if a[-1] < 32**2: + continue + img_objects = visual_genome_objects[a[0]] + iid = img_objects['image_id'] + ann = { + 'image_id': iid, + 'dataset': 'visual_genome', + 'file_name': visual_genome_iid2path[iid], + 'category_id': synset2catid[k], + 'synset': manual_synset, + } + ann.update(img_objects['objects'][a[1]]) + # assert ann['synsets'][0] == k + anns.append(ann) + manual_exemplar_dict[k].extend(anns) + + # combine manual_exemplar_dict with exemplar_dict_combined_three + for k, v in manual_exemplar_dict.items(): + exemplar_dict_combined_three[k].extend(v) + + assert min([len(v) for k, v in exemplar_dict_combined_three.items()]) >= 10, "some synsets have less than 10 exemplars" + with open(args.output_path, "w") as f: + json.dump(exemplar_dict_combined_three, f) + + +if __name__ == "__main__": + args = get_args() + main(args) diff --git a/approach/ovod/mm-ovod/tools/convert-thirdparty-pretrained-model-to-d2.py b/approach/ovod/mm-ovod/tools/convert-thirdparty-pretrained-model-to-d2.py new file mode 100644 index 0000000000000000000000000000000000000000..ec042b8ce48d193b40fd1e6311b2cc4b0c4e4086 --- /dev/null +++ b/approach/ovod/mm-ovod/tools/convert-thirdparty-pretrained-model-to-d2.py @@ -0,0 +1,39 @@ +#!/usr/bin/env python +# Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved +import argparse +import pickle +import torch + +""" +Usage: + +cd DETIC_ROOT/models/ +wget https://miil-public-eu.oss-eu-central-1.aliyuncs.com/model-zoo/ImageNet_21K_P/models/resnet50_miil_21k.pth +python ../tools/convert-thirdparty-pretrained-model-to-d2.py --path resnet50_miil_21k.pth + +wget https://github.com/SwinTransformer/storage/releases/download/v1.0.0/swin_base_patch4_window7_224_22k.pth +python ../tools/convert-thirdparty-pretrained-model-to-d2.py --path swin_base_patch4_window7_224_22k.pth + +""" + + +if __name__ == "__main__": + parser = argparse.ArgumentParser() + parser.add_argument('--path', default='') + args = parser.parse_args() + + print('Loading', args.path) + model = torch.load(args.path, map_location="cpu") + # import pdb; pdb.set_trace() + if 'model' in model: + model = model['model'] + if 'state_dict' in model: + model = model['state_dict'] + ret = { + "model": model, + "__author__": "third_party", + "matching_heuristics": True + } + out_path = args.path.replace('.pth', '.pkl') + print('Saving to', out_path) + pickle.dump(ret, open(out_path, "wb")) diff --git a/approach/ovod/mm-ovod/tools/create_imagenetlvis_json.py b/approach/ovod/mm-ovod/tools/create_imagenetlvis_json.py new file mode 100644 index 0000000000000000000000000000000000000000..741275c2a7f42e677da2bd771cd54cbb49e3d1ac --- /dev/null +++ b/approach/ovod/mm-ovod/tools/create_imagenetlvis_json.py @@ -0,0 +1,72 @@ +# edited from script in Detic from Facebook, Inc. and its affiliates. +import argparse +import json +import os +from nltk.corpus import wordnet as wn +from detectron2.data.detection_utils import read_image + + +def get_code(syn): + return syn.pos() + str(syn.offset()).zfill(8) + + +if __name__ == '__main__': + parser = argparse.ArgumentParser() + parser.add_argument('--imagenet-path', default='datasets/imagenet/imagenet21k_P') + parser.add_argument('--lvis-meta-path', default='datasets/lvis/lvis_v1_val.json') + parser.add_argument('--out-path', default='datasets/imagenet/annotations/imagenet_lvis_image_info.json') + args = parser.parse_args() + + print('Loading LVIS meta') + data = json.load(open(args.lvis_meta_path, 'r')) + print('Done') + synset2cat = {x['synset']: x for x in data['categories']} + count = 0 + images = [] + image_counts = {} + synset2folders = {} + for synset in synset2cat: + if synset == "stop_sign.n.01": + synset2folders["stop_sign.n.01"] = [] + continue + code = get_code(wn.synset(synset)) + folders = [ + os.path.join(args.imagenet_path, folder, code) for folder in ["train", "val", "imagenet21k_small_classes"] + ] + synset2folders[synset] = [f for f in folders if os.path.exists(f)] + + for synset, synset_folders in synset2folders.items(): + if len(synset_folders) == 0: + continue + cat = synset2cat[synset] + cat_id = cat['id'] + cat_name = cat['name'] + cat_images = [] + files = [] + for folder in synset_folders: + folder_files = os.listdir(folder) + for file in folder_files: + count = count + 1 + # file_name only needs to be last two parts of path + # import pdb; pdb.set_trace() + file_name = '{}/{}/{}'.format(*(folder.split("/")[-2:]), file) + assert os.path.join(folder, file) == os.path.join(args.imagenet_path, file_name) + img = read_image(os.path.join(args.imagenet_path, file_name)) + h, w = img.shape[:2] + image = { + 'id': count, + 'file_name': file_name, + 'pos_category_ids': [cat_id], + 'width': w, + 'height': h + } + cat_images.append(image) + images.extend(cat_images) + image_counts[cat_id] = len(cat_images) + print(cat_id, cat_name, len(cat_images)) + print('# Images', len(images)) + for x in data['categories']: + x['image_count'] = image_counts[x['id']] if x['id'] in image_counts else 0 + out = {'categories': data['categories'], 'images': images, 'annotations': []} + print('Writing to', args.out_path) + json.dump(out, open(args.out_path, 'w')) diff --git a/approach/ovod/mm-ovod/tools/dump_clip_features.py b/approach/ovod/mm-ovod/tools/dump_clip_features.py new file mode 100644 index 0000000000000000000000000000000000000000..127f8c2a86c2425611c8ec075006664f5e07df45 --- /dev/null +++ b/approach/ovod/mm-ovod/tools/dump_clip_features.py @@ -0,0 +1,116 @@ +# Copyright (c) Facebook, Inc. and its affiliates. +import argparse +import json +import torch +import numpy as np +import itertools +from nltk.corpus import wordnet +import sys + +if __name__ == '__main__': + parser = argparse.ArgumentParser() + parser.add_argument('--ann', default='datasets/lvis/lvis_v1_val.json') + parser.add_argument('--out_path', default='') + parser.add_argument('--prompt', default='a') + parser.add_argument('--model', default='clip') + parser.add_argument('--clip_model', default="ViT-B/32") + parser.add_argument('--fix_space', action='store_true') + parser.add_argument('--use_underscore', action='store_true') + parser.add_argument('--avg_synonyms', action='store_true') + parser.add_argument('--use_wn_name', action='store_true') + args = parser.parse_args() + + print('Loading', args.ann) + data = json.load(open(args.ann, 'r')) + cat_names = [x['name'] for x in \ + sorted(data['categories'], key=lambda x: x['id'])] + if 'synonyms' in data['categories'][0]: + if args.use_wn_name: + synonyms = [ + [xx.name() for xx in wordnet.synset(x['synset']).lemmas()] \ + if x['synset'] != 'stop_sign.n.01' else ['stop_sign'] \ + for x in sorted(data['categories'], key=lambda x: x['id'])] + else: + synonyms = [x['synonyms'] for x in \ + sorted(data['categories'], key=lambda x: x['id'])] + else: + synonyms = [] + if args.fix_space: + cat_names = [x.replace('_', ' ') for x in cat_names] + if args.use_underscore: + cat_names = [x.strip().replace('/ ', '/').replace(' ', '_') for x in cat_names] + print('cat_names', cat_names) + device = "cuda" if torch.cuda.is_available() else "cpu" + + if args.prompt == 'a': + sentences = ['a ' + x for x in cat_names] + sentences_synonyms = [['a ' + xx for xx in x] for x in synonyms] + if args.prompt == 'none': + sentences = [x for x in cat_names] + sentences_synonyms = [[xx for xx in x] for x in synonyms] + elif args.prompt == 'photo': + sentences = ['a photo of a {}'.format(x) for x in cat_names] + sentences_synonyms = [['a photo of a {}'.format(xx) for xx in x] \ + for x in synonyms] + elif args.prompt == 'scene': + sentences = ['a photo of a {} in the scene'.format(x) for x in cat_names] + sentences_synonyms = [['a photo of a {} in the scene'.format(xx) for xx in x] \ + for x in synonyms] + + print('sentences_synonyms', len(sentences_synonyms), \ + sum(len(x) for x in sentences_synonyms)) + if args.model == 'clip': + import clip + print('Loading CLIP') + model, preprocess = clip.load(args.clip_model, device=device) + if args.avg_synonyms: + sentences = list(itertools.chain.from_iterable(sentences_synonyms)) + print('flattened_sentences', len(sentences)) + text = clip.tokenize(sentences).to(device) + with torch.no_grad(): + if len(text) > 10000: + text_features = torch.cat([ + model.encode_text(text[:len(text) // 2]), + model.encode_text(text[len(text) // 2:])], + dim=0) + else: + text_features = model.encode_text(text) + print('text_features.shape', text_features.shape) + if args.avg_synonyms: + synonyms_per_cat = [len(x) for x in sentences_synonyms] + text_features = text_features.split(synonyms_per_cat, dim=0) + text_features = [x.mean(dim=0) for x in text_features] + text_features = torch.stack(text_features, dim=0) + print('after stack', text_features.shape) + text_features = text_features.cpu().numpy() + elif args.model in ['bert', 'roberta']: + from transformers import AutoTokenizer, AutoModel + if args.model == 'bert': + model_name = 'bert-large-uncased' + if args.model == 'roberta': + model_name = 'roberta-large' + tokenizer = AutoTokenizer.from_pretrained(model_name) + model = AutoModel.from_pretrained(model_name) + model.eval() + if args.avg_synonyms: + sentences = list(itertools.chain.from_iterable(sentences_synonyms)) + print('flattened_sentences', len(sentences)) + inputs = tokenizer(sentences, padding=True, return_tensors="pt") + with torch.no_grad(): + model_outputs = model(**inputs) + outputs = model_outputs.pooler_output + text_features = outputs.detach().cpu() + if args.avg_synonyms: + synonyms_per_cat = [len(x) for x in sentences_synonyms] + text_features = text_features.split(synonyms_per_cat, dim=0) + text_features = [x.mean(dim=0) for x in text_features] + text_features = torch.stack(text_features, dim=0) + print('after stack', text_features.shape) + text_features = text_features.numpy() + print('text_features.shape', text_features.shape) + else: + assert 0, args.model + if args.out_path != '': + print('saveing to', args.out_path) + np.save(open(args.out_path, 'wb'), text_features) + import pdb; pdb.set_trace() diff --git a/approach/ovod/mm-ovod/tools/dump_clip_features_lvis_sentences.py b/approach/ovod/mm-ovod/tools/dump_clip_features_lvis_sentences.py new file mode 100644 index 0000000000000000000000000000000000000000..d32c76e6977c4cd741916d32cd4a806b254d8783 --- /dev/null +++ b/approach/ovod/mm-ovod/tools/dump_clip_features_lvis_sentences.py @@ -0,0 +1,76 @@ +import argparse +import json +import torch +import numpy as np +from tqdm.auto import tqdm + +if __name__ == '__main__': + parser = argparse.ArgumentParser() + parser.add_argument( + "--descriptions-path", + type=str, + default="datasets/metadata/lvis_gpt3_text-davinci-002_descriptions_author.json" + ) + parser.add_argument( + "--ann-path", + type=str, + default="datasets/lvis/lvis_v1_val.json" + ) + parser.add_argument( + "--out-path", + type=str, + default="datasets/metadata/lvis_gpt3_text-davinci-002_features_author.npy" + ) + parser.add_argument('--model', default='clip') + parser.add_argument('--clip_model', default="ViT-B/32") + + args = parser.parse_args() + + print("Loading descriptions from: {}".format(args.descriptions_path)) + with open(args.descriptions_path, 'r') as f: + descriptions = json.load(f) + + print("Loading annotations from: {}".format(args.ann_path)) + with open(args.ann_path, 'r') as f: + ann_data = json.load(f) + + lvis_cats = ann_data['categories'] + lvis_cats = [(c['id'], c['synonyms'][0].replace("_", " ")) for c in lvis_cats] + sentences_per_cat = [descriptions[c[1]] for c in lvis_cats] + + device = "cuda" if torch.cuda.is_available() else "cpu" + print( + "Total number of sentences for {} classes: {}".format( + len(sentences_per_cat), sum(len(x) for x in sentences_per_cat)) + ) + + if args.model == 'clip': + import clip + print('Loading CLIP') + model, preprocess = clip.load(args.clip_model, device=device) + model.eval() + all_text_features = [] + for cat_sentences in tqdm(sentences_per_cat): + text = clip.tokenize(cat_sentences, truncate=True) + with torch.no_grad(): + if len(text) > 10000: + split_text = text.split(128) + split_features = [] + for t in tqdm(split_text, total=len(split_text)): + split_features.append(model.encode_text(t.to(device)).cpu()) + text_features = torch.cat(split_features, dim=0) + # text_features = torch.cat([ + # model.encode_text(t) for t in text.split(128) + # ], dim=0) + else: + text_features = model.encode_text(text.to(device)) + all_text_features.append(text_features.mean(dim=0)) + all_text_features = torch.stack(all_text_features) + print("Output text features shape: ", all_text_features.shape) + text_features = text_features.cpu().numpy() + + else: + assert 0, "Model {} is not supported only clip".format(args.model) + if args.out_path != '': + print('saveing to', args.out_path) + np.save(open(args.out_path, 'wb'), text_features) diff --git a/approach/ovod/mm-ovod/tools/generate_descriptions.py b/approach/ovod/mm-ovod/tools/generate_descriptions.py new file mode 100644 index 0000000000000000000000000000000000000000..63f3ed57170afb5b2a1f0c0aab616ad976bfe5bb --- /dev/null +++ b/approach/ovod/mm-ovod/tools/generate_descriptions.py @@ -0,0 +1,84 @@ +import argparse +import time +import json + +from openai import OpenAI + +client = OpenAI() +from openai.error import RateLimitError +from lvis import LVIS + + +API_KEY = "YOUR_API_KEY" + + +def get_args(): + parser = argparse.ArgumentParser() + parser.add_argument( + "--ann-path", + type=str, + default="datasets/lvis/lvis_v1_val.json" + ) + parser.add_argument( + "--output-path", + type=str, + default="datasets/metadata/lvis_gpt3_{}_descriptions_own.json" + ) + parser.add_argument( + "--openai-model", + type=str, + default="text-davinci-002" + ) + + +def main(args): + lvis_gt = LVIS(args.ann_path) + categories = sorted(lvis_gt.cats.values(), key=lambda x: x["id"]) + + category_list = [c['synonyms'][0].replace('_', ' ') for c in categories] + all_responses = {} + vowel_list = ['a', 'e', 'i', 'o', 'u'] + + for i, category in enumerate(category_list): + if category[0] in vowel_list: + article = 'an' + else: + article = 'a' + prompts = [] + prompts.append("Describe what " + article + " " + category + " looks like.") + + all_result = [] + # call openai api taking into account rate limits + for curr_prompt in prompts: + try: + response = client.completions.create(model="text-davinci-002", + prompt=curr_prompt, + temperature=0.99, + max_tokens=50, + n=10, + stop=".") + except RateLimitError: + print("Hit rate limit. Waiting 15 seconds.") + time.sleep(15) + response = client.completions.create(model="text-davinci-002", + prompt=curr_prompt, + temperature=.99, + max_tokens=50, + n=10, + stop=".") + + time.sleep(0.15) + + for r in range(len(response.choices)): + result = response.choices[r].text + all_result.append(result.replace("\n\n", "") + ".") + all_responses[category] = all_result + + output_path = args.output_path.format(args.openai_model) + with open(output_path, 'w') as f: + json.dump(all_responses, f, indent=4) + + +if __name__ == "__main__": + args = get_args() + main(args) diff --git a/approach/ovod/mm-ovod/tools/generate_vision_classifier_agg.py b/approach/ovod/mm-ovod/tools/generate_vision_classifier_agg.py new file mode 100644 index 0000000000000000000000000000000000000000..251484ca0f6a0f6ba3aa05b0c4ec45a40e491224 --- /dev/null +++ b/approach/ovod/mm-ovod/tools/generate_vision_classifier_agg.py @@ -0,0 +1,529 @@ +import torch +import torch.nn as nn +from torch.utils.data import Dataset, DataLoader +from enum import Enum +from tqdm import tqdm +import os +import argparse +from PIL import Image +import json +from typing import Tuple, Optional +import random + +import torch.nn.functional as F +import numpy as np +from detectron2.data.datasets.lvis_v1_categories import LVIS_CATEGORIES as LVIS_V1_CATEGORIES +import clip +from clip.model import CLIP as CLIPModel +# import socket +import torchvision.transforms as tvt + + +# HOSTNAME = socket.gethostname().split(".")[0] +try: + from torchvision.transforms import InterpolationMode + BICUBIC = InterpolationMode.BICUBIC +except ImportError: + BICUBIC = Image.BICUBIC + + +# if HOSTNAME == "gnodea10": +# PATHS = { +# "imagenet21k": "", +# "visual_genome": "/scratch/local/hdd/prannay/datasets/VisualGenome/", +# "lvis": "/scratch/local/hdd/prannay/datasets/coco/", +# "coco": "/scratch/local/hdd/prannay/datasets/coco/", +# "o365": "/scratch/local/hdd/prannay/datasets/objects365/train/", +# } +# else: +# PATHS = { +# "imagenet21k": "", +# "visual_genome": "/scratch/local/prannay/datasets/VisualGenome/", +# "lvis": "/scratch/local/prannay/datasets/coco/", +# "coco": "/scratch/local/prannay/datasets/coco/", +# "o365": "/scratch/local/prannay/datasets/objects365/train/", +# } + + +LVIS_V1_UNSEEN_IDS = torch.tensor( + [x['id'] for x in LVIS_V1_CATEGORIES if x['frequency'] == 'r'], + dtype=torch.long, +) + +LVIS_V1_SEEN_IDS = torch.tensor( + [x['id'] for x in LVIS_V1_CATEGORIES if x['frequency'] != 'r'], + dtype=torch.long, +) + +LVIS_V1_ALL_IDS = torch.tensor( + [x['id'] for x in LVIS_V1_CATEGORIES], + dtype=torch.long, +) + +# https://www.exiv2.org/tags.html +_EXIF_ORIENT = 274 # exif 'Orientation' tag + + +def get_crop(img, bb, context=0.0, square=True, train=True): + x1, y1, w, h = bb + W, H = img.size + y, x = y1 + h / 2.0, x1 + w / 2.0 + if train: + context_sample = random.random() * context + h, w = h * (1. + context_sample), w * (1. + context_sample) + else: + h, w = h * (1. + context), w * (1. + context) + if square: + w = max(w, h) + h = max(w, h) + if train: + x_a = random.random() + y_a = random.random() + x1, x2 = x - ((1. - x_a) * w / 2.0), x + ((x_a * w) / 2.0) + y1, y2 = y - ((1. - y_a) * w / 2.0), y + ((y_a * w) / 2.0) + else: + x1, x2 = x - w / 2.0, x + w / 2.0 + y1, y2 = y - h / 2.0, y + h / 2.0 + x1, x2 = max(0, x1), min(W, x2) + y1, y2 = max(0, y1), min(H, y2) + bb_new = [int(c) for c in [x1, y1, x2, y2]] + crop = img.crop(bb_new) + return crop + + +def run_crop(d, paths, context=0.4, square=True, train=True): + dataset = d['dataset'] + file_name = os.path.join(paths[dataset], d['file_name']) + img = Image.open(file_name) + img = img.convert("RGB") + img = _apply_exif_orientation(img) + if dataset == "imagenet21k": + bb = [0, 0, 0, 0] + return img + elif dataset in {"lvis", "coco", "o365"}: + bb = [ + int(c) + for c in [ + d['bbox'][0] // 1, + d['bbox'][1] // 1, + d['bbox'][2] // 1 + 1, + d['bbox'][3] // 1 + 1 + ] + ] + elif dataset == "visual_genome": + bb = [int(c) for c in [d['x'], d['y'], d['w'], d['h']]] + return get_crop(img, bb, context=context, square=square, train=train) + + +def _apply_exif_orientation(image): + """ + Applies the exif orientation correctly. + + This code exists per the bug: + https://github.com/python-pillow/Pillow/issues/3973 + with the function `ImageOps.exif_transpose`. The Pillow source raises errors with + various methods, especially `tobytes` + + Function based on: + https://github.com/wkentaro/labelme/blob/v4.5.4/labelme/utils/image.py#L59 + https://github.com/python-pillow/Pillow/blob/7.1.2/src/PIL/ImageOps.py#L527 + + Args: + image (PIL.Image): a PIL image + + Returns: + (PIL.Image): the PIL image with exif orientation applied, if applicable + """ + if not hasattr(image, "getexif"): + return image + + try: + exif = image.getexif() + except Exception: # https://github.com/facebookresearch/detectron2/issues/1885 + exif = None + + if exif is None: + return image + + orientation = exif.get(_EXIF_ORIENT) + + method = { + # 2: Image.Transpose.FLIP_LEFT_RIGHT, + 2: Image.FLIP_LEFT_RIGHT, + # 3: Image.Transpose.ROTATE_180, + 3: Image.ROTATE_180, + # 4: Image.Transpose.FLIP_TOP_BOTTOM, + 4: Image.FLIP_TOP_BOTTOM, + # 5: Image.Transpose.TRANSPOSE, + 5: Image.TRANSPOSE, + # 6: Image.Transpose.ROTATE_270, + 6: Image.ROTATE_270, + # 7: Image.Transpose.TRANSVERSE, + 7: Image.TRANSVERSE, + # 8: Image.Transpose.ROTATE_90, + 8: Image.ROTATE_90, + }.get(orientation) + + if method is not None: + return image.transpose(method) + return image + + +def _convert_image_to_rgb(image: Image.Image): + return image.convert("RGB") + + +class TransformsSimCLR_CLIP: + """ + A stochastic data augmentation module that transforms any given data example randomly + resulting in two correlated views of the same example, + denoted x ̃i and x ̃j, which we consider as a positive pair. + """ + + def __init__(self, size, tta=False, num_augs=5): + + self.tta = tta + if self.tta: + random.seed(100000 + num_augs) + torch.manual_seed(100000 + num_augs) + s = 0.25 + color_jitter = tvt.ColorJitter( + 0.8 * s, 0.8 * s, 0.8 * s, 0.2 * s + ) + self.transform2 = tvt.Compose([ + tvt.RandomResizedCrop(size=224 * 4, scale=(0.8, 1.0), interpolation=BICUBIC), + tvt.RandomHorizontalFlip(), # with 0.5 probability + _convert_image_to_rgb, + tvt.RandomApply([color_jitter], p=0.8), + ]) + self.transform = tvt.Compose([ + tvt.Resize(size, interpolation=BICUBIC), + tvt.CenterCrop(size), + _convert_image_to_rgb, + tvt.ToTensor(), + tvt.Normalize((0.48145466, 0.4578275, 0.40821073), (0.26862954, 0.26130258, 0.27577711)), + ]) + + def __call__(self, x): + if self.tta: + x = self.transform2(x) + return self.transform(x) + + +class Summary(Enum): + NONE = 0 + AVERAGE = 1 + SUM = 2 + COUNT = 3 + + +class MappingType(Enum): + MLP = 'mlp' + Transformer = 'transformer' + Linear = 'linear' + Identity = 'identity' + + +class MLP(nn.Module): + + def forward(self, x: torch.Tensor) -> torch.Tensor: + B, N, K, D = x.size() + x = x.view(B * N * K, D) + return self.model(x).view(B, N, K, D) + + def __init__(self, sizes: Tuple[int, ...], bias=True, act=nn.Tanh): + super(MLP, self).__init__() + layers = [] + for i in range(len(sizes) - 1): + layers.append(nn.Linear(sizes[i], sizes[i + 1], bias=bias)) + if i < len(sizes) - 2: + layers.append(act()) + self.model = nn.Sequential(*layers) + + +class MlpTransformer(nn.Module): + def __init__(self, in_dim, h_dim, out_d: Optional[int] = None, act=F.relu, dropout=0.): + super().__init__() + out_d = out_d if out_d is not None else in_dim + self.fc1 = nn.Linear(in_dim, h_dim) + self.act = act + self.fc2 = nn.Linear(h_dim, out_d) + self.dropout = nn.Dropout(dropout) + + def forward(self, x): + x = self.fc1(x) + x = self.act(x) + x = self.dropout(x) + x = self.fc2(x) + x = self.dropout(x) + return x + + +class MultiHeadAttention(nn.Module): + + def __init__(self, dim_self, dim_ref, num_heads, bias=True, dropout=0.): + super().__init__() + self.num_heads = num_heads + head_dim = dim_self // num_heads + self.scale = head_dim ** -0.5 + self.to_queries = nn.Linear(dim_self, dim_self, bias=bias) + self.to_keys_values = nn.Linear(dim_ref, dim_self * 2, bias=bias) + self.project = nn.Linear(dim_self, dim_self) + self.dropout = nn.Dropout(dropout) + + def forward(self, x, y=None, mask=None): + y = y if y is not None else x + b, n, c = x.shape + _, m, d = y.shape + # b n h dh + queries = self.to_queries(x).reshape(b, n, self.num_heads, c // self.num_heads) + # b m 2 h dh + keys_values = self.to_keys_values(y).reshape(b, m, 2, self.num_heads, c // self.num_heads) + keys, values = keys_values[:, :, 0], keys_values[:, :, 1] + attention = torch.einsum('bnhd,bmhd->bnmh', queries, keys) * self.scale + if mask is not None: + if mask.dim() == 2: + mask = mask.unsqueeze(1) + attention = attention.masked_fill(mask.unsqueeze(3), float("-inf")) + attention = attention.softmax(dim=2) + out = torch.einsum('bnmh,bmhd->bnhd', attention, values).reshape(b, n, c) + out = self.project(out) + return out, attention + + +class TransformerLayer(nn.Module): + + def forward_with_attention(self, x, y=None, mask=None): + x_, attention = self.attn(self.norm1(x), y, mask) + x = x + x_ + x = x + self.mlp(self.norm2(x)) + return x, attention + + def forward(self, x, y=None, mask=None): + x = x + self.attn(self.norm1(x), y, mask)[0] + x = x + self.mlp(self.norm2(x)) + return x + + def __init__(self, dim_self, dim_ref, num_heads, mlp_ratio=4., bias=False, dropout=0., act=F.relu, + norm_layer: nn.Module = nn.LayerNorm): + super().__init__() + self.norm1 = norm_layer(dim_self) + self.attn = MultiHeadAttention(dim_self, dim_ref, num_heads, bias=bias, dropout=dropout) + self.norm2 = norm_layer(dim_self) + self.mlp = MlpTransformer(dim_self, int(dim_self * mlp_ratio), act=act, dropout=dropout) + + +class Transformer(nn.Module): + + def forward_with_attention(self, x, y=None, mask=None): + attentions = [] + for layer in self.layers: + x, att = layer.forward_with_attention(x, y, mask) + attentions.append(att) + return x, attentions + + def forward(self, x, y=None, mask=None): + for i, layer in enumerate(self.layers): + if i % 2 == 0 and self.enc_dec: # cross + x = layer(x, y) + elif self.enc_dec: # self + x = layer(x, x, mask) + else: # self or cross + x = layer(x, y, mask) + return x + + def __init__(self, dim_self: int, num_heads: int, num_layers: int, dim_ref: Optional[int] = None, + mlp_ratio: float = 4., act=F.relu, norm_layer: nn.Module = nn.LayerNorm, enc_dec: bool = False): + super(Transformer, self).__init__() + dim_ref = dim_ref if dim_ref is not None else dim_self + self.enc_dec = enc_dec + if enc_dec: + num_layers = num_layers * 2 + layers = [] + for i in range(num_layers): + if i % 2 == 0 and enc_dec: # cross + layers.append( + TransformerLayer(dim_self, dim_ref, num_heads, mlp_ratio, act=act, norm_layer=norm_layer)) + elif enc_dec: # self + layers.append( + TransformerLayer(dim_self, dim_self, num_heads, mlp_ratio, act=act, norm_layer=norm_layer)) + else: # self or cross + layers.append( + TransformerLayer(dim_self, dim_ref, num_heads, mlp_ratio, act=act, norm_layer=norm_layer)) + self.layers = nn.ModuleList(layers) + + +class TransformerMapper(nn.Module): + + def forward(self, x) -> torch.Tensor: + B, N, K, D = x.size() + x = x.view(B * N * K, D) + x = self.linear(x).view(B, N, K, D) + prefix = self.cls_token.unsqueeze(0).unsqueeze(0).expand(B, N, *self.cls_token.shape) + prefix = torch.cat((x, prefix), dim=-2) + + prefix = prefix.view(B * N, K + self.prefix_length, D) + out = self.transformer(prefix) + + out = out.view(B, N, K + self.prefix_length, D) + return out[:, :, -1:] + + def __init__(self, dim: int, prefix_length: int, num_layers: int = 8): + super(TransformerMapper, self).__init__() + self.prefix_length = prefix_length + self.transformer = Transformer(dim, 8, num_layers) + self.linear = nn.Linear(dim, dim) + self.cls_token = nn.Parameter(torch.randn(prefix_length, dim), requires_grad=True) + + +class MappingPlus(nn.Module): + def __init__( + self, + dim: int, + num_layers: int = 4, + mapping_type: MappingType = MappingType.Linear, + ): + super(MappingPlus, self).__init__() + self.dim = dim + self.num_layers = num_layers + self.mapping_type = mapping_type + + # init modules + if self.mapping_type == "transformer": + self.mapper = TransformerMapper( + dim=self.dim, + prefix_length=1, + num_layers=self.num_layers + ) + else: + raise NotImplementedError(self.mapping_type) + + def forward(self, x: torch.Tensor) -> torch.Tensor: + y = self.mapper(x) + return y + + +class ImageShotDataset(Dataset): + def __init__( + self, + exemplar_dict: str, + args: argparse.Namespace, + context: float = 0.2, + tta: bool = False, + num_augs: int = 1, + ): + super(ImageShotDataset, self).__init__() + with open(exemplar_dict, "r") as fp: + self.exemplar_dict = json.load(fp) + self.context = context + self.tvt_transform = TransformsSimCLR_CLIP(224, tta=tta, num_augs=num_augs) + self.num_augs = num_augs + self.paths = { + "imagenet21k": args.imagenet_img_dir, + "visual_genome": args.visual_genome_img_dir, + "lvis": args.lvis_img_dir, + } + + def __len__(self): + return len(self.exemplar_dict) + + def yield_crop(self, d): + return self.tvt_transform( + run_crop( + d, self.paths, context=self.context, square=True, train=False) + ) + + def __getitem__(self, idx): + class_samples = self.exemplar_dict[idx] + imgs = [self.yield_crop(d) for d in class_samples for _ in range(self.num_augs)] + # print(len(imgs)) + return torch.stack(imgs) + + +@torch.no_grad() +def generate(dataset: ImageShotDataset, clip_model: CLIPModel, model: MappingPlus, + args, output_path: str = ""): + device = torch.device("cuda:{}".format(args.gpu)) + if not os.path.exists(os.path.dirname(output_path)): + os.makedirs(os.path.dirname(output_path)) + clip_model = clip_model.to(device) + clip_model.eval() + model = model.to(device) + model.eval() + gen_dataloader = DataLoader( + dataset, batch_size=1, shuffle=False, drop_last=False, num_workers=args.nw, pin_memory=True + ) + out_features = [] + for images in tqdm(gen_dataloader, total=len(gen_dataloader)): + images = images.to(device) + images = images.flatten(end_dim=-4) + # print(images.size()) + clip_features = clip_model.encode_image(images) + out_feature = model(clip_features[None, None]) + out_features.append(out_feature.view(-1)) + + out_features = torch.stack(out_features) + np.save(output_path, out_features.detach().cpu().half().numpy()) + print(output_path) + return + + +def main(): + parser = argparse.ArgumentParser() + parser.add_argument('--exemplar-list', required=True, help="path to list of features") + parser.add_argument('--out-path', default='', required=True, help="path to output") + parser.add_argument('--nw', default=4, type=int) + parser.add_argument('--gpu', default=0) + parser.add_argument('--clip-model', default="ViT-B/32") + parser.add_argument('--mapping_type', type=str, default='transformer', help='mlp/transformer/linear/identity') + parser.add_argument('--num-layers', type=int, default=4) + parser.add_argument('--load-path', default="") + parser.add_argument('--tta', action="store_true") + parser.add_argument('--num-augs', type=int, default=5) + parser.add_argument( + "--lvis-img-dir", + type=str, + default="datasets/coco/" + ) + parser.add_argument( + "--imagenet-img-dir", + type=str, + default="datasets/imagenet" + ) + parser.add_argument( + "--visual-genome-img-dir", + type=str, + default="datasets/VisualGenome/" + ) + args = parser.parse_args() + embedding_dim = 512 + + gen_dataset = ImageShotDataset( + args.exemplar_list, + tta=args.tta, + num_augs=args.num_augs, + args=args, + ) + + print("Length of gen dataset: {}".format(len(gen_dataset))) + + clip_model, _ = clip.load(args.clip_model, device="cpu") + del clip_model.transformer + model = MappingPlus( + embedding_dim, + num_layers=args.num_layers, + mapping_type=args.mapping_type, + ) + print(model) + if args.load_path != "": + checkpoint = torch.load(args.load_path, map_location="cpu") + if "state_dict" in checkpoint: + model.load_state_dict(checkpoint['state_dict']) + else: + model.load_state_dict(checkpoint) + + generate(gen_dataset, clip_model, model, args, output_path=args.out_path) + + +if __name__ == '__main__': + main() diff --git a/approach/ovod/mm-ovod/tools/get_exemplars_tta.py b/approach/ovod/mm-ovod/tools/get_exemplars_tta.py new file mode 100644 index 0000000000000000000000000000000000000000..8f68866a141ad82fd745fd93b695fc5b05ae874e --- /dev/null +++ b/approach/ovod/mm-ovod/tools/get_exemplars_tta.py @@ -0,0 +1,212 @@ +#!/usr/bin/env python +# coding: utf-8 + +import clip +import json +from PIL import Image +import sys +import argparse +# from lvis import LVIS +import os +# from pprint import pprint +import random +import numpy as np +from tqdm.auto import tqdm +import torch +import torchvision.transforms as tvt +from torch.utils.data import Dataset, DataLoader + +try: + from torchvision.transforms import InterpolationMode + BICUBIC = InterpolationMode.BICUBIC +except ImportError: + BICUBIC = Image.BICUBIC + + +# PATHS = { +# "imagenet21k": "", +# "visual_genome": "/scratch/local/hdd/prannay/datasets/VisualGenome/", +# "lvis": "/scratch/local/hdd/prannay/datasets/coco/", +# } + + +def _convert_image_to_rgb(image: Image.Image): + return image.convert("RGB") + + +def get_crop(img, bb, context=0.0, square=True): + # print(bb) + x1, y1, w, h = bb + W, H = img.size + y, x = y1 + h / 2.0, x1 + w / 2.0 + h, w = h * (1. + context), w * (1. + context) + if square: + w = max(w, h) + h = max(w, h) + # print(x, y, w, h) + x1, x2 = x - w / 2.0, x + w / 2.0 + y1, y2 = y - h / 2.0, y + h / 2.0 + # print([x1, y1, x2, y2]) + x1, x2 = max(0, x1), min(W, x2) + y1, y2 = max(0, y1), min(H, y2) + # print([x1, y1, x2, y2]) + bb_new = [int(c) for c in [x1, y1, x2, y2]] + # print(bb_new) + crop = img.crop(bb_new) + return crop + + +def run_crop(d, paths, context=0.4, square=True): + dataset = d['dataset'] + file_name = os.path.join(paths[dataset], d['file_name']) + # with open(file_name, "rb") as f: + img = Image.open(file_name) + if dataset == "imagenet21k": + bb = [0, 0, 0, 0] + return img + elif dataset == "lvis": + bb = [ + int(c) + for c in [ + d['bbox'][0] // 1, + d['bbox'][1] // 1, + d['bbox'][2] // 1 + 1, + d['bbox'][3] // 1 + 1 + ] + ] + elif dataset == "visual_genome": + bb = [int(c) for c in [d['x'], d['y'], d['w'], d['h']]] + return get_crop(img, bb, context=context, square=square) + + +def get_args(): + parser = argparse.ArgumentParser() + parser.add_argument( + "--ann-path", + type=str, + default="datasets/metadata/lvis_image_exemplar_dict_K-005_own.json" + ) + parser.add_argument( + "--output-path", + type=str, + default="datasets/metadata/lvis_image_exemplar_features_avg_K-005_own.npy" + ) + parser.add_argument( + "--lvis-img-dir", + type=str, + default="datasets/coco/" + ) + parser.add_argument( + "--imagenet-img-dir", + type=str, + default="datasets/imagenet" + ) + parser.add_argument( + "--visual-genome-img-dir", + type=str, + default="datasets/VisualGenome/" + ) + parser.add_argument("--num-augs", type=int, default=5) + parser.add_argument("--nw", type=int, default=8) + + args = parser.parse_args() + return args + + +def main(args): + + anns_path = args.ann_path + num_augs = args.num_augs + + model, transform = clip.load("ViT-B/32", device="cpu") + del model.transformer + + model = model.to("cuda:0") + + run(anns_path, num_augs, model, transform, args) + + +class CropDataset(Dataset): + def __init__( + self, + exemplar_dict, + num_augs, + transform, + transform2, + args, + ): + self.exemplar_dict = exemplar_dict + self.transform = transform + self.transform2 = transform2 + self.num_augs = num_augs + self.paths = { + "imagenet21k": args.imagenet_img_dir, + "visual_genome": args.visual_genome_img_dir, + "lvis": args.lvis_img_dir, + } + + def __len__(self): + return len(self.exemplar_dict) + + def __getitem__(self, idx): + chosen_anns = self.exemplar_dict[idx] + crops = [run_crop(ann, self.paths) for ann in chosen_anns] + # add the tta in here somewhere + crops = [ + self.transform(self.transform2(crop)) + for crop in crops for _ in range(self.num_augs) + ] + return torch.stack(crops) + + +def run(anns_path, num_augs, model, transform, args): + random.seed(100000 + num_augs) + torch.manual_seed(100000 + num_augs) + s = 0.25 + color_jitter = tvt.ColorJitter( + 0.8 * s, 0.8 * s, 0.8 * s, 0.2 * s + ) + transform2 = tvt.Compose([ + tvt.RandomResizedCrop(size=224 * 4, scale=(0.8, 1.0), interpolation=BICUBIC), + tvt.RandomHorizontalFlip(), # with 0.5 probability + _convert_image_to_rgb, + tvt.RandomApply([color_jitter], p=0.8), + ]) + with open(anns_path, "r") as fp: + exemplar_dict = json.load(fp) + dataset = CropDataset(exemplar_dict, num_augs, transform, transform2, args) + dataloader = DataLoader( + dataset, batch_size=1, shuffle=False, pin_memory=True, num_workers=args.nw) + feats = [] + # chosen_anns_all = [] + for crops in tqdm(dataloader, total=len(dataloader)): + # rng = np.random.default_rng(seed) + # synset = catid2synset[cat_id] + # trial_anns = exemplar_dict[synset] + # probs = [a['area'] for a in trial_anns] + # probs = np.array(probs) / sum(probs) + # chosen_anns = rng.choice(trial_anns, size=K, p=probs, replace=len(trial_anns) < K) + # if len(trial_anns) < K: + # chosen_anns = rng.choice(trial_anns, size=K, p=[a['area'] for a in trial_anns], replace=False) + # else: + # chosen_anns = rng.sample(trial_anns, k=K, counts=[a['area'] for a in trial_anns + # crops = [run_crop(ann) for ann in chosen_anns] + # # add the tta in here somewhere + # crops = [transform(transform2(crop)) for crop in crops for _ in range(num_augs)] + with torch.no_grad(): + image_embeddings = model.encode_image(crops[0].to("cuda:0")) + # print(image_embeddings.size()) + feats.append(image_embeddings.cpu()) + # chosen_anns_all.append(chosen_anns.tolist()) + # crops.append([run_crop(ann) for ann in chosen_anns]) + + feats_all = torch.stack(feats) + + save_basename = args.output_path + + np.save(save_basename, feats_all.mean(dim=1).numpy()) + + +if __name__ == "__main__": + args = get_args() + main(args) diff --git a/approach/ovod/mm-ovod/tools/get_lvis_cat_info.py b/approach/ovod/mm-ovod/tools/get_lvis_cat_info.py new file mode 100644 index 0000000000000000000000000000000000000000..e421471250bebcf50880413e6aed9ef8324fec89 --- /dev/null +++ b/approach/ovod/mm-ovod/tools/get_lvis_cat_info.py @@ -0,0 +1,51 @@ +# Copyright (c) Facebook, Inc. and its affiliates. +import argparse +import json + +if __name__ == '__main__': + parser = argparse.ArgumentParser() + parser.add_argument("--ann", default='datasets/lvis/lvis_v1_train.json') + parser.add_argument("--add_freq", action='store_true') + parser.add_argument("--r_thresh", type=int, default=10) + parser.add_argument("--c_thresh", type=int, default=100) + parser.add_argument("--bypass", action='store_true') + args = parser.parse_args() + + print('Loading', args.ann) + data = json.load(open(args.ann, 'r')) + cats = data['categories'] + image_count = {x['id']: set() for x in cats} + ann_count = {x['id']: 0 for x in cats} + if args.bypass: + for x in data['images']: + for y in x['pos_category_ids']: + image_count[y].add(x['id']) + ann_count[y] += 1 + else: + for x in data['annotations']: + image_count[x['category_id']].add(x['image_id']) + ann_count[x['category_id']] += 1 + num_freqs = {x: 0 for x in ['r', 'f', 'c']} + for x in cats: + x['image_count'] = len(image_count[x['id']]) + x['instance_count'] = ann_count[x['id']] + if args.add_freq: + freq = 'f' + if x['image_count'] < args.c_thresh: + freq = 'c' + if x['image_count'] < args.r_thresh: + freq = 'r' + x['frequency'] = freq + num_freqs[freq] += 1 + print(cats) + image_counts = sorted([x['image_count'] for x in cats]) + # print('image count', image_counts) + # import pdb; pdb.set_trace() + if args.add_freq: + for x in ['r', 'c', 'f']: + print(x, num_freqs[x]) + out = cats # {'categories': cats} + out_path = args.ann[:-5] + '_cat_info.json' + print('Saving to', out_path) + json.dump(out, open(out_path, 'w')) + diff --git a/approach/ovod/mm-ovod/tools/norm_feat_sum_norm.py b/approach/ovod/mm-ovod/tools/norm_feat_sum_norm.py new file mode 100644 index 0000000000000000000000000000000000000000..7b92759fed7fe86c049314121f9675a3f91ac556 --- /dev/null +++ b/approach/ovod/mm-ovod/tools/norm_feat_sum_norm.py @@ -0,0 +1,40 @@ +import argparse +import numpy as np + +def get_args(): + parser = argparse.ArgumentParser() + parser.add_argument( + "--feat1-path", + type=str, + default="datasets/metadata/lvis_gpt3_text-davinci-002_features_author.npy" + ) + parser.add_argument( + "--feat2-path", + type=str, + default="datasets/metadata/lvis_image_exemplar_features_avg_K-005_own.npy" + ) + parser.add_argument( + "--out-path", + type=str, + default="datasets/metadata/lvis_multi-modal_avg_K-005_own.npy" + ) + return parser.parse_args() + + +def main(args): + + feat1 = np.load(args.feat1_path) + feat2 = np.load(args.feat2_path) + # l2 normalize each + feat1 = feat1 / np.linalg.norm(feat1, axis=1, keepdims=True) + feat2 = feat2 / np.linalg.norm(feat2, axis=1, keepdims=True) + # take sum + feat = feat1 + feat2 + # l2 normalize again + feat = feat / np.linalg.norm(feat, axis=1, keepdims=True) + np.save(args.out_path, feat) + + +if __name__ == '__main__': + args = get_args() + main(args) diff --git a/approach/ovod/mm-ovod/tools/remove_lvis_rare.py b/approach/ovod/mm-ovod/tools/remove_lvis_rare.py new file mode 100644 index 0000000000000000000000000000000000000000..06e4e881bfa50e2cd74747511a3ad2e8676e0c70 --- /dev/null +++ b/approach/ovod/mm-ovod/tools/remove_lvis_rare.py @@ -0,0 +1,20 @@ +# Copyright (c) Facebook, Inc. and its affiliates. +import argparse +import json + +if __name__ == '__main__': + parser = argparse.ArgumentParser() + parser.add_argument('--ann', default='datasets/lvis/lvis_v1_train.json') + args = parser.parse_args() + + print('Loading', args.ann) + data = json.load(open(args.ann, 'r')) + catid2freq = {x['id']: x['frequency'] for x in data['categories']} + print('ori #anns', len(data['annotations'])) + exclude = ['r'] + data['annotations'] = [x for x in data['annotations'] \ + if catid2freq[x['category_id']] not in exclude] + print('filtered #anns', len(data['annotations'])) + out_path = args.ann[:-5] + '_norare.json' + print('Saving to', out_path) + json.dump(data, open(out_path, 'w')) diff --git a/approach/ovod/mm-ovod/tools/sample_exemplars.py b/approach/ovod/mm-ovod/tools/sample_exemplars.py new file mode 100644 index 0000000000000000000000000000000000000000..1d2ba8ee83ca4d055cad09fbd70994ed911509d0 --- /dev/null +++ b/approach/ovod/mm-ovod/tools/sample_exemplars.py @@ -0,0 +1,73 @@ +import json +import argparse +from lvis import LVIS +from tqdm.auto import tqdm +import numpy as np + + +def get_args(): + parser = argparse.ArgumentParser() + parser.add_argument( + "--exemplar-dict-path", + type=str, + default="datasets/metadata/exemplar_dict.json" + ) + parser.add_argument( + "--lvis-ann-path", + type=str, + default="datasets/lvis/lvis_v1_val.json" + ) + parser.add_argument( + "--out-path", + type=str, + default="datasets/metadata/lvis_image_exemplar_dict_K-005_own.json" + ) + parser.add_argument( + "-K", + type=int, + default=5 + ) + parser.add_argument( + "--seed", + type=int, + default=42 + ) + args = parser.parse_args() + return args + + +def run(catid2synset, exemplar_dict, K, seed, out_path): + chosen_anns_all = [] + for cat_id in tqdm(sorted(catid2synset.keys()), total=len(catid2synset)): + rng = np.random.default_rng(seed) + synset = catid2synset[cat_id] + trial_anns = exemplar_dict[synset] + probs = [a['area'] for a in trial_anns] + probs = np.array(probs) / sum(probs) + chosen_anns = rng.choice(trial_anns, size=K, p=probs, replace=False) + chosen_anns_all.append(chosen_anns.tolist()) + with open(out_path, "w") as f: + json.dump(chosen_anns_all, f) + + +def main(args): + lvis_cats = LVIS(args.lvis_ann_path).cats + catid2synset = {v['id']: v['synset'] for v in lvis_cats.values()} + with open(args.exemplar_dict_path, 'r') as f: + exemplar_dict = json.load(f) + for k, v in exemplar_dict.items(): + for ann in v: + dataset = ann['dataset'] + if dataset == "imagenet21k": + ann['area'] = 100. * 100. + elif dataset == "lvis": + ann['area'] = float(ann['bbox'][2] * ann['bbox'][3]) + elif dataset == "visual_genome": + ann['area'] = float(ann['w'] * ann['h']) + + run(catid2synset, exemplar_dict, args.K, args.seed, args.out_path) + + +if __name__ == "__main__": + args = get_args() + main(args) diff --git a/approach/ovod/mm-ovod/tools/unzip_imagenet_lvis.py b/approach/ovod/mm-ovod/tools/unzip_imagenet_lvis.py new file mode 100644 index 0000000000000000000000000000000000000000..56ccad1a9024f425951ae025182fb709d2effcab --- /dev/null +++ b/approach/ovod/mm-ovod/tools/unzip_imagenet_lvis.py @@ -0,0 +1,19 @@ +# Copyright (c) Facebook, Inc. and its affiliates. +import os +import argparse + +if __name__ == '__main__': + parser = argparse.ArgumentParser() + parser.add_argument('--src_path', default='datasets/imagenet/ImageNet-21K/') + parser.add_argument('--dst_path', default='datasets/imagenet/ImageNet-LVIS/') + parser.add_argument('--data_path', default='datasets/imagenet_lvis_wnid.txt') + args = parser.parse_args() + + f = open(args.data_path) + for i, line in enumerate(f): + cmd = 'mkdir {x} && tar -xf {src}/{l}.tar -C {x}'.format( + src=args.src_path, + l=line.strip(), + x=args.dst_path + '/' + line.strip()) + print(i, cmd) + os.system(cmd)