diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json index 91e5303fd0..82040ed82b 100644 --- a/.devcontainer/devcontainer.json +++ b/.devcontainer/devcontainer.json @@ -1,7 +1,6 @@ { "name": "dimos-dev", - "image": "ghcr.io/dimensionalos/dimos-dev:latest", - "postCreateCommand": "pre-commit install", + "image": "ghcr.io/dimensionalos/dev:dev", "customizations": { "vscode": { "extensions": [ @@ -9,5 +8,19 @@ "ms-python.vscode-pylance" ] } + }, + + "settings": { + "notebook.formatOnSave.enabled": true, + "notebook.codeActionsOnSave": { + "notebook.source.fixAll": "explicit", + "notebook.source.organizeImports": "explicit" + }, + "editor.codeActionsOnSave": { + "source.fixAll": "explicit", + "source.organizeImports": "explicit" + }, + "editor.defaultFormatter": "charliermarsh.ruff", + "editor.formatOnSave": true } } diff --git a/dimos/agents/agent.py b/dimos/agents/agent.py index 298af0eac9..908b258474 100644 --- a/dimos/agents/agent.py +++ b/dimos/agents/agent.py @@ -27,19 +27,16 @@ from __future__ import annotations # Standard library imports -import ast import json import os import threading -import logging -from typing import Any, Dict, List, Tuple, Optional, Union +from typing import Any, Tuple, Optional, Union # Third-party imports from dotenv import load_dotenv from openai import NOT_GIVEN, OpenAI from pydantic import BaseModel -import reactivex -from reactivex import Observer, create, Observable, empty, operators as RxOps, throw, just +from reactivex import Observer, create, Observable, empty, operators as RxOps, just from reactivex.disposable import CompositeDisposable, Disposable from reactivex.scheduler import ThreadPoolScheduler from reactivex.subject import Subject @@ -54,7 +51,6 @@ from dimos.stream.frame_processor import FrameProcessor from dimos.stream.stream_merger import create_stream_merger from dimos.stream.video_operators import Operators as MyOps, VideoOperators as MyVidOps -from dimos.types.constants import Colors from dimos.utils.threadpool import get_scheduler from dimos.utils.logging_config import setup_logger @@ -75,11 +71,13 @@ class Agent: """Base agent that manages memory and subscriptions.""" - def __init__(self, - dev_name: str = "NA", - agent_type: str = "Base", - agent_memory: Optional[AbstractAgentSemanticMemory] = None, - pool_scheduler: Optional[ThreadPoolScheduler] = None): + def __init__( + self, + dev_name: str = "NA", + agent_type: str = "Base", + agent_memory: Optional[AbstractAgentSemanticMemory] = None, + pool_scheduler: Optional[ThreadPoolScheduler] = None, + ): """ Initializes a new instance of the Agent. @@ -123,7 +121,7 @@ class LLMAgent(Agent): Subclasses must implement the `_send_query` method, which is responsible for sending the prompt to a specific LLM API. - + Attributes: query (str): The current query text to process. prompt_builder (PromptBuilder): Handles construction of prompts. @@ -137,23 +135,26 @@ class LLMAgent(Agent): frame_processor (FrameProcessor): Processes video frames. output_dir (str): Directory for output files. response_subject (Subject): Subject that emits agent responses. - process_all_inputs (bool): Whether to process every input emission (True) or + process_all_inputs (bool): Whether to process every input emission (True) or skip emissions when the agent is busy processing a previous input (False). """ + logging_file_memory_lock = threading.Lock() - def __init__(self, - dev_name: str = "NA", - agent_type: str = "LLM", - agent_memory: Optional[AbstractAgentSemanticMemory] = None, - pool_scheduler: Optional[ThreadPoolScheduler] = None, - process_all_inputs: bool = False, - system_query: Optional[str] = None, - max_output_tokens_per_request: int = 16384, - max_input_tokens_per_request: int = 128000, - input_query_stream: Optional[Observable] = None, - input_data_stream: Optional[Observable] = None, - input_video_stream: Optional[Observable] = None): + def __init__( + self, + dev_name: str = "NA", + agent_type: str = "LLM", + agent_memory: Optional[AbstractAgentSemanticMemory] = None, + pool_scheduler: Optional[ThreadPoolScheduler] = None, + process_all_inputs: bool = False, + system_query: Optional[str] = None, + max_output_tokens_per_request: int = 16384, + max_input_tokens_per_request: int = 128000, + input_query_stream: Optional[Observable] = None, + input_data_stream: Optional[Observable] = None, + input_video_stream: Optional[Observable] = None, + ): """ Initializes a new instance of the LLMAgent. @@ -163,7 +164,7 @@ def __init__(self, agent_memory (AbstractAgentSemanticMemory): The memory system for the agent. pool_scheduler (ThreadPoolScheduler): The scheduler to use for thread pool operations. If None, the global scheduler from get_scheduler() will be used. - process_all_inputs (bool): Whether to process every input emission (True) or + process_all_inputs (bool): Whether to process every input emission (True) or skip emissions when the agent is busy processing a previous input (False). """ super().__init__(dev_name, agent_type, agent_memory, pool_scheduler) @@ -174,48 +175,69 @@ def __init__(self, self.image_detail: str = "low" self.max_input_tokens_per_request: int = max_input_tokens_per_request self.max_output_tokens_per_request: int = max_output_tokens_per_request - self.max_tokens_per_request: int = (self.max_input_tokens_per_request + - self.max_output_tokens_per_request) + self.max_tokens_per_request: int = ( + self.max_input_tokens_per_request + self.max_output_tokens_per_request + ) self.rag_query_n: int = 4 self.rag_similarity_threshold: float = 0.45 self.frame_processor: Optional[FrameProcessor] = None self.output_dir: str = os.path.join(os.getcwd(), "assets", "agent") self.process_all_inputs: bool = process_all_inputs os.makedirs(self.output_dir, exist_ok=True) - + # Subject for emitting responses self.response_subject = Subject() - + # Conversation history for maintaining context between calls self.conversation_history = [] # Initialize input streams self.input_video_stream = input_video_stream - self.input_query_stream = input_query_stream if (input_data_stream is None) else (input_query_stream.pipe( - RxOps.with_latest_from(input_data_stream), - RxOps.map(lambda combined: { - "query": combined[0], - "objects": combined[1] if len(combined) > 1 else "No object data available" - }), - RxOps.map(lambda data: f"{data['query']}\n\nCurrent objects detected:\n{data['objects']}"), - RxOps.do_action(lambda x: print(f"\033[34mEnriched query: {x.split(chr(10))[0]}\033[0m") or - [print(f"\033[34m{line}\033[0m") for line in x.split(chr(10))[1:]]), - )) + self.input_query_stream = ( + input_query_stream + if (input_data_stream is None) + else ( + input_query_stream.pipe( + RxOps.with_latest_from(input_data_stream), + RxOps.map( + lambda combined: { + "query": combined[0], + "objects": combined[1] + if len(combined) > 1 + else "No object data available", + } + ), + RxOps.map( + lambda data: f"{data['query']}\n\nCurrent objects detected:\n{data['objects']}" + ), + RxOps.do_action( + lambda x: print( + f"\033[34mEnriched query: {x.split(chr(10))[0]}\033[0m" + ) + or [ + print(f"\033[34m{line}\033[0m") + for line in x.split(chr(10))[1:] + ] + ), + ) + ) + ) # Setup stream subscriptions based on inputs provided - if (self.input_video_stream is not None) and (self.input_query_stream is not None): + if (self.input_video_stream is not None) and ( + self.input_query_stream is not None + ): self.merged_stream = create_stream_merger( data_input_stream=self.input_video_stream, - text_query_stream=self.input_query_stream + text_query_stream=self.input_query_stream, ) - + logger.info("Subscribing to merged input stream...") # Define a query extractor for the merged stream query_extractor = lambda emission: (emission[0], emission[1][0]) self.disposables.add( self.subscribe_to_image_processing( - self.merged_stream, - query_extractor=query_extractor + self.merged_stream, query_extractor=query_extractor ) ) else: @@ -223,11 +245,13 @@ def __init__(self, if self.input_video_stream is not None: logger.info("Subscribing to input video stream...") self.disposables.add( - self.subscribe_to_image_processing(self.input_video_stream)) + self.subscribe_to_image_processing(self.input_video_stream) + ) if self.input_query_stream is not None: logger.info("Subscribing to input query stream...") self.disposables.add( - self.subscribe_to_query_processing(self.input_query_stream)) + self.subscribe_to_query_processing(self.input_query_stream) + ) def _update_query(self, incoming_query: Optional[str]) -> None: """Updates the query if an incoming query is provided. @@ -248,20 +272,24 @@ def _get_rag_context(self) -> Tuple[str, str]: results = self.agent_memory.query( query_texts=self.query, n_results=self.rag_query_n, - similarity_threshold=self.rag_similarity_threshold) + similarity_threshold=self.rag_similarity_threshold, + ) formatted_results = "\n".join( f"Document ID: {doc.id}\nMetadata: {doc.metadata}\nContent: {doc.page_content}\nScore: {score}\n" - for (doc, score) in results) - condensed_results = " | ".join( - f"{doc.page_content}" for (doc, _) in results) + for (doc, score) in results + ) + condensed_results = " | ".join(f"{doc.page_content}" for (doc, _) in results) logger.info(f"Agent Memory Query Results:\n{formatted_results}") logger.info("=== Results End ===") return formatted_results, condensed_results - def _build_prompt(self, base64_image: Optional[str], - dimensions: Optional[Tuple[int, int]], - override_token_limit: bool, - condensed_results: str) -> list: + def _build_prompt( + self, + base64_image: Optional[str], + dimensions: Optional[Tuple[int, int]], + override_token_limit: bool, + condensed_results: str, + ) -> list: """Builds a prompt message using the prompt builder. Args: @@ -275,14 +303,10 @@ def _build_prompt(self, base64_image: Optional[str], """ # Budget for each component of the prompt budgets = { - "system_prompt": - self.max_input_tokens_per_request // _TOKEN_BUDGET_PARTS, - "user_query": - self.max_input_tokens_per_request // _TOKEN_BUDGET_PARTS, - "image": - self.max_input_tokens_per_request // _TOKEN_BUDGET_PARTS, - "rag": - self.max_input_tokens_per_request // _TOKEN_BUDGET_PARTS, + "system_prompt": self.max_input_tokens_per_request // _TOKEN_BUDGET_PARTS, + "user_query": self.max_input_tokens_per_request // _TOKEN_BUDGET_PARTS, + "image": self.max_input_tokens_per_request // _TOKEN_BUDGET_PARTS, + "rag": self.max_input_tokens_per_request // _TOKEN_BUDGET_PARTS, } # Define truncation policies for each component @@ -322,8 +346,9 @@ def _handle_tooling(self, response_message, messages): # TODO: Make this more generic or move implementation to OpenAIAgent. # This is presently OpenAI-specific. - def _tooling_callback(message, messages, response_message, - skill_library: SkillLibrary): + def _tooling_callback( + message, messages, response_message, skill_library: SkillLibrary + ): has_called_tools = False new_messages = [] for tool_call in message.tool_calls: @@ -332,12 +357,14 @@ def _tooling_callback(message, messages, response_message, args = json.loads(tool_call.function.arguments) result = skill_library.call(name, **args) logger.info(f"Function Call Results: {result}") - new_messages.append({ - "role": "tool", - "tool_call_id": tool_call.id, - "content": str(result), - "name": name - }) + new_messages.append( + { + "role": "tool", + "tool_call_id": tool_call.id, + "content": str(result), + "name": name, + } + ) if has_called_tools: logger.info("Sending Another Query.") messages.append(response_message) @@ -349,16 +376,19 @@ def _tooling_callback(message, messages, response_message, return None if response_message.tool_calls is not None: - return _tooling_callback(response_message, messages, - response_message, self.skill_library) + return _tooling_callback( + response_message, messages, response_message, self.skill_library + ) return None - def _observable_query(self, - observer: Observer, - base64_image: Optional[str] = None, - dimensions: Optional[Tuple[int, int]] = None, - override_token_limit: bool = False, - incoming_query: Optional[str] = None): + def _observable_query( + self, + observer: Observer, + base64_image: Optional[str] = None, + dimensions: Optional[Tuple[int, int]] = None, + override_token_limit: bool = False, + incoming_query: Optional[str] = None, + ): """Prepares and sends a query to the LLM, emitting the response to the observer. Args: @@ -374,9 +404,9 @@ def _observable_query(self, try: self._update_query(incoming_query) _, condensed_results = self._get_rag_context() - messages = self._build_prompt(base64_image, dimensions, - override_token_limit, - condensed_results) + messages = self._build_prompt( + base64_image, dimensions, override_token_limit, condensed_results + ) # logger.debug(f"Sending Query: {messages}") logger.info("Sending Query.") response_message = self._send_query(messages) @@ -386,20 +416,30 @@ def _observable_query(self, # TODO: Make this more generic. The parsed tag and tooling handling may be OpenAI-specific. # If no skill library is provided or there are no tool calls, emit the response directly. - if (self.skill_library is None or - self.skill_library.get_tools() in (None, NOT_GIVEN) or - response_message.tool_calls is None): - final_msg = (response_message.parsed - if hasattr(response_message, 'parsed') and - response_message.parsed else - (response_message.content if hasattr(response_message, 'content') else response_message)) + if ( + self.skill_library is None + or self.skill_library.get_tools() in (None, NOT_GIVEN) + or response_message.tool_calls is None + ): + final_msg = ( + response_message.parsed + if hasattr(response_message, "parsed") and response_message.parsed + else ( + response_message.content + if hasattr(response_message, "content") + else response_message + ) + ) observer.on_next(final_msg) self.response_subject.on_next(final_msg) else: - response_message_2 = self._handle_tooling( - response_message, messages) - final_msg = response_message_2 if response_message_2 is not None else response_message - if isinstance(final_msg, BaseModel): # TODO: Test + response_message_2 = self._handle_tooling(response_message, messages) + final_msg = ( + response_message_2 + if response_message_2 is not None + else response_message + ) + if isinstance(final_msg, BaseModel): # TODO: Test final_msg = str(final_msg.content) observer.on_next(final_msg) self.response_subject.on_next(final_msg) @@ -423,8 +463,7 @@ def _send_query(self, messages: list) -> Any: Raises: NotImplementedError: Always, unless overridden. """ - raise NotImplementedError( - "Subclasses must implement _send_query method.") + raise NotImplementedError("Subclasses must implement _send_query method.") def _log_response_to_file(self, response, output_dir: str = None): """Logs the LLM response to a file. @@ -437,15 +476,14 @@ def _log_response_to_file(self, response, output_dir: str = None): output_dir = self.output_dir if response is not None: with self.logging_file_memory_lock: - log_path = os.path.join(output_dir, 'memory.txt') - with open(log_path, 'a') as file: + log_path = os.path.join(output_dir, "memory.txt") + with open(log_path, "a") as file: file.write(f"{self.dev_name}: {response}\n") logger.info(f"LLM Response [{self.dev_name}]: {response}") def subscribe_to_image_processing( - self, - frame_observable: Observable, - query_extractor=None) -> Disposable: + self, frame_observable: Observable, query_extractor=None + ) -> Disposable: """Subscribes to a stream of video frames for processing. This method sets up a subscription to process incoming video frames. @@ -466,11 +504,7 @@ def subscribe_to_image_processing( if self.frame_processor is None: self.frame_processor = FrameProcessor(delete_on_init=True) - print_emission_args = { - "enabled": True, - "dev_name": self.dev_name, - "counts": {} - } + print_emission_args = {"enabled": True, "dev_name": self.dev_name, "counts": {}} def _process_frame(emission) -> Observable: """ @@ -483,28 +517,36 @@ def _process_frame(emission) -> Observable: query = self.system_query frame = emission return just(frame).pipe( - MyOps.print_emission(id='B', **print_emission_args), + MyOps.print_emission(id="B", **print_emission_args), RxOps.observe_on(self.pool_scheduler), - MyOps.print_emission(id='C', **print_emission_args), + MyOps.print_emission(id="C", **print_emission_args), RxOps.subscribe_on(self.pool_scheduler), - MyOps.print_emission(id='D', **print_emission_args), - MyVidOps.with_jpeg_export(self.frame_processor, - suffix=f"{self.dev_name}_frame_", - save_limit=_MAX_SAVED_FRAMES), - MyOps.print_emission(id='E', **print_emission_args), + MyOps.print_emission(id="D", **print_emission_args), + MyVidOps.with_jpeg_export( + self.frame_processor, + suffix=f"{self.dev_name}_frame_", + save_limit=_MAX_SAVED_FRAMES, + ), + MyOps.print_emission(id="E", **print_emission_args), MyVidOps.encode_image(), - MyOps.print_emission(id='F', **print_emission_args), - RxOps.filter(lambda base64_and_dims: base64_and_dims is not None - and base64_and_dims[0] is not None and - base64_and_dims[1] is not None), - MyOps.print_emission(id='G', **print_emission_args), - RxOps.flat_map(lambda base64_and_dims: create( - lambda observer, _: self._observable_query( - observer, - base64_image=base64_and_dims[0], - dimensions=base64_and_dims[1], - incoming_query=query))), # Use the extracted query - MyOps.print_emission(id='H', **print_emission_args), + MyOps.print_emission(id="F", **print_emission_args), + RxOps.filter( + lambda base64_and_dims: base64_and_dims is not None + and base64_and_dims[0] is not None + and base64_and_dims[1] is not None + ), + MyOps.print_emission(id="G", **print_emission_args), + RxOps.flat_map( + lambda base64_and_dims: create( + lambda observer, _: self._observable_query( + observer, + base64_image=base64_and_dims[0], + dimensions=base64_and_dims[1], + incoming_query=query, + ) + ) + ), # Use the extracted query + MyOps.print_emission(id="H", **print_emission_args), ) # Use a mutable flag to ensure only one frame is processed at a time. @@ -517,35 +559,37 @@ def process_if_free(emission): else: is_processing[0] = True return _process_frame(emission).pipe( - MyOps.print_emission(id='I', **print_emission_args), + MyOps.print_emission(id="I", **print_emission_args), RxOps.observe_on(self.pool_scheduler), - MyOps.print_emission(id='J', **print_emission_args), + MyOps.print_emission(id="J", **print_emission_args), RxOps.subscribe_on(self.pool_scheduler), - MyOps.print_emission(id='K', **print_emission_args), + MyOps.print_emission(id="K", **print_emission_args), RxOps.do_action( - on_completed=lambda: is_processing.__setitem__( - 0, False), - on_error=lambda e: is_processing.__setitem__(0, False)), - MyOps.print_emission(id='L', **print_emission_args), + on_completed=lambda: is_processing.__setitem__(0, False), + on_error=lambda e: is_processing.__setitem__(0, False), + ), + MyOps.print_emission(id="L", **print_emission_args), ) observable = frame_observable.pipe( - MyOps.print_emission(id='A', **print_emission_args), + MyOps.print_emission(id="A", **print_emission_args), RxOps.flat_map(process_if_free), - MyOps.print_emission(id='M', **print_emission_args), + MyOps.print_emission(id="M", **print_emission_args), ) disposable = observable.subscribe( on_next=lambda response: self._log_response_to_file( - response, self.output_dir), + response, self.output_dir + ), on_error=lambda e: logger.error(f"Error encountered: {e}"), on_completed=lambda: logger.info( - f"Stream processing completed for {self.dev_name}")) + f"Stream processing completed for {self.dev_name}" + ), + ) self.disposables.add(disposable) return disposable - def subscribe_to_query_processing( - self, query_observable: Observable) -> Disposable: + def subscribe_to_query_processing(self, query_observable: Observable) -> Disposable: """Subscribes to a stream of queries for processing. This method sets up a subscription to process incoming queries by directly @@ -557,11 +601,7 @@ def subscribe_to_query_processing( Returns: Disposable: A disposable representing the subscription. """ - print_emission_args = { - "enabled": True, - "dev_name": self.dev_name, - "counts": {} - } + print_emission_args = {"enabled": True, "dev_name": self.dev_name, "counts": {}} def _process_query(query) -> Observable: """ @@ -569,11 +609,15 @@ def _process_query(query) -> Observable: Returns an observable that emits the LLM response. """ return just(query).pipe( - MyOps.print_emission(id='Pr A', **print_emission_args), - RxOps.flat_map(lambda query: create( - lambda observer, _: self._observable_query( - observer, incoming_query=query))), - MyOps.print_emission(id='Pr B', **print_emission_args), + MyOps.print_emission(id="Pr A", **print_emission_args), + RxOps.flat_map( + lambda query: create( + lambda observer, _: self._observable_query( + observer, incoming_query=query + ) + ) + ), + MyOps.print_emission(id="Pr B", **print_emission_args), ) # A mutable flag indicating whether a query is currently being processed. @@ -588,62 +632,71 @@ def process_if_free(query): is_processing[0] = True logger.info("Processing Query.") return _process_query(query).pipe( - MyOps.print_emission(id='B', **print_emission_args), + MyOps.print_emission(id="B", **print_emission_args), RxOps.observe_on(self.pool_scheduler), - MyOps.print_emission(id='C', **print_emission_args), + MyOps.print_emission(id="C", **print_emission_args), RxOps.subscribe_on(self.pool_scheduler), - MyOps.print_emission(id='D', **print_emission_args), + MyOps.print_emission(id="D", **print_emission_args), RxOps.do_action( - on_completed=lambda: is_processing.__setitem__( - 0, False), - on_error=lambda e: is_processing.__setitem__(0, False)), - MyOps.print_emission(id='E', **print_emission_args), + on_completed=lambda: is_processing.__setitem__(0, False), + on_error=lambda e: is_processing.__setitem__(0, False), + ), + MyOps.print_emission(id="E", **print_emission_args), ) observable = query_observable.pipe( - MyOps.print_emission(id='A', **print_emission_args), + MyOps.print_emission(id="A", **print_emission_args), RxOps.flat_map(lambda query: process_if_free(query)), - MyOps.print_emission(id='F', **print_emission_args)) + MyOps.print_emission(id="F", **print_emission_args), + ) disposable = observable.subscribe( on_next=lambda response: self._log_response_to_file( - response, self.output_dir), + response, self.output_dir + ), on_error=lambda e: logger.error( - f"Error processing query for {self.dev_name}: {e}"), + f"Error processing query for {self.dev_name}: {e}" + ), on_completed=lambda: logger.info( - f"Stream processing completed for {self.dev_name}")) + f"Stream processing completed for {self.dev_name}" + ), + ) self.disposables.add(disposable) return disposable def get_response_observable(self) -> Observable: """Gets an observable that emits responses from this agent. - + Returns: Observable: An observable that emits string responses from the agent. """ return self.response_subject.pipe( - RxOps.observe_on(self.pool_scheduler), + RxOps.observe_on(self.pool_scheduler), RxOps.subscribe_on(self.pool_scheduler), - RxOps.share()) + RxOps.share(), + ) def run_observable_query(self, query_text: str, **kwargs) -> Observable: """Creates an observable that processes a one-off text query to Agent and emits the response. - + This method provides a simple way to send a text query and get an observable stream of the response. It's designed for one-off queries rather than continuous processing of input streams. Useful for testing and development. - + Args: query_text (str): The query text to process. **kwargs: Additional arguments to pass to _observable_query. Supported args vary by agent type. For example, ClaudeAgent supports: base64_image, dimensions, override_token_limit, reset_conversation, thinking_budget_tokens - + Returns: Observable: An observable that emits the response as a string. """ - return create(lambda observer, _: self._observable_query( - observer, incoming_query=query_text, **kwargs)) + return create( + lambda observer, _: self._observable_query( + observer, incoming_query=query_text, **kwargs + ) + ) def dispose_all(self): """Disposes of all active subscriptions managed by this agent.""" @@ -665,31 +718,34 @@ class OpenAIAgent(LLMAgent): tokenizer, and response model. """ - def __init__(self, - dev_name: str, - agent_type: str = "Vision", - query: str = "What do you see?", - input_query_stream: Optional[Observable] = None, - input_data_stream: Optional[Observable] = None, - input_video_stream: Optional[Observable] = None, - output_dir: str = os.path.join(os.getcwd(), "assets", - "agent"), - agent_memory: Optional[AbstractAgentSemanticMemory] = None, - system_query: Optional[str] = None, - max_input_tokens_per_request: int = 128000, - max_output_tokens_per_request: int = 16384, - model_name: str = "gpt-4o", - prompt_builder: Optional[PromptBuilder] = None, - tokenizer: Optional[AbstractTokenizer] = None, - rag_query_n: int = 4, - rag_similarity_threshold: float = 0.45, - skills: Optional[Union[AbstractSkill, list[AbstractSkill], SkillLibrary]] = None, - response_model: Optional[BaseModel] = None, - frame_processor: Optional[FrameProcessor] = None, - image_detail: str = "low", - pool_scheduler: Optional[ThreadPoolScheduler] = None, - process_all_inputs: Optional[bool] = None, - openai_client: Optional[OpenAI] = None): + def __init__( + self, + dev_name: str, + agent_type: str = "Vision", + query: str = "What do you see?", + input_query_stream: Optional[Observable] = None, + input_data_stream: Optional[Observable] = None, + input_video_stream: Optional[Observable] = None, + output_dir: str = os.path.join(os.getcwd(), "assets", "agent"), + agent_memory: Optional[AbstractAgentSemanticMemory] = None, + system_query: Optional[str] = None, + max_input_tokens_per_request: int = 128000, + max_output_tokens_per_request: int = 16384, + model_name: str = "gpt-4o", + prompt_builder: Optional[PromptBuilder] = None, + tokenizer: Optional[AbstractTokenizer] = None, + rag_query_n: int = 4, + rag_similarity_threshold: float = 0.45, + skills: Optional[ + Union[AbstractSkill, list[AbstractSkill], SkillLibrary] + ] = None, + response_model: Optional[BaseModel] = None, + frame_processor: Optional[FrameProcessor] = None, + image_detail: str = "low", + pool_scheduler: Optional[ThreadPoolScheduler] = None, + process_all_inputs: Optional[bool] = None, + openai_client: Optional[OpenAI] = None, + ): """ Initializes a new instance of the OpenAIAgent. @@ -727,7 +783,7 @@ def __init__(self, process_all_inputs = True else: process_all_inputs = False - + super().__init__( dev_name=dev_name, agent_type=agent_type, @@ -737,7 +793,7 @@ def __init__(self, system_query=system_query, input_query_stream=input_query_stream, input_data_stream=input_data_stream, - input_video_stream=input_video_stream + input_video_stream=input_video_stream, ) self.client = openai_client or OpenAI() self.query = query @@ -757,44 +813,50 @@ def __init__(self, self.skill_library = SkillLibrary() self.skill_library.add(self.skills) - self.response_model = response_model if response_model is not None else NOT_GIVEN + self.response_model = ( + response_model if response_model is not None else NOT_GIVEN + ) self.model_name = model_name - self.tokenizer = tokenizer or OpenAITokenizer( - model_name=self.model_name) + self.tokenizer = tokenizer or OpenAITokenizer(model_name=self.model_name) self.prompt_builder = prompt_builder or PromptBuilder( - self.model_name, tokenizer=self.tokenizer) + self.model_name, tokenizer=self.tokenizer + ) self.rag_query_n = rag_query_n self.rag_similarity_threshold = rag_similarity_threshold self.image_detail = image_detail self.max_output_tokens_per_request = max_output_tokens_per_request self.max_input_tokens_per_request = max_input_tokens_per_request - self.max_tokens_per_request = max_input_tokens_per_request + max_output_tokens_per_request + self.max_tokens_per_request = ( + max_input_tokens_per_request + max_output_tokens_per_request + ) # Add static context to memory. self._add_context_to_memory() - self.frame_processor = frame_processor or FrameProcessor( - delete_on_init=True) + self.frame_processor = frame_processor or FrameProcessor(delete_on_init=True) logger.info("OpenAI Agent Initialized.") def _add_context_to_memory(self): """Adds initial context to the agent's memory.""" context_data = [ - ("id0", - "Optical Flow is a technique used to track the movement of objects in a video sequence." - ), - ("id1", - "Edge Detection is a technique used to identify the boundaries of objects in an image." - ), - ("id2", - "Video is a sequence of frames captured at regular intervals."), - ("id3", - "Colors in Optical Flow are determined by the movement of light, and can be used to track the movement of objects." - ), - ("id4", - "Json is a data interchange format that is easy for humans to read and write, and easy for machines to parse and generate." - ), + ( + "id0", + "Optical Flow is a technique used to track the movement of objects in a video sequence.", + ), + ( + "id1", + "Edge Detection is a technique used to identify the boundaries of objects in an image.", + ), + ("id2", "Video is a sequence of frames captured at regular intervals."), + ( + "id3", + "Colors in Optical Flow are determined by the movement of light, and can be used to track the movement of objects.", + ), + ( + "id4", + "Json is a data interchange format that is easy for humans to read and write, and easy for machines to parse and generate.", + ), ] for doc_id, text in context_data: self.agent_memory.add_vector(doc_id, text) @@ -822,7 +884,11 @@ def _send_query(self, messages: list) -> Any: model=self.model_name, messages=messages, response_format=self.response_model, - tools=(self.skill_library.get_tools() if self.skill_library is not None else NOT_GIVEN), + tools=( + self.skill_library.get_tools() + if self.skill_library is not None + else NOT_GIVEN + ), max_tokens=self.max_output_tokens_per_request, ) else: @@ -830,8 +896,11 @@ def _send_query(self, messages: list) -> Any: model=self.model_name, messages=messages, max_tokens=self.max_output_tokens_per_request, - tools=(self.skill_library.get_tools() - if self.skill_library is not None else NOT_GIVEN), + tools=( + self.skill_library.get_tools() + if self.skill_library is not None + else NOT_GIVEN + ), ) response_message = response.choices[0].message if response_message is None: @@ -850,19 +919,22 @@ def _send_query(self, messages: list) -> Any: def stream_query(self, query_text: str) -> Observable: """Creates an observable that processes a text query and emits the response. - + This method provides a simple way to send a text query and get an observable stream of the response. It's designed for one-off queries rather than continuous processing of input streams. - + Args: query_text (str): The query text to process. - + Returns: Observable: An observable that emits the response as a string. """ - return create(lambda observer, _: self._observable_query( - observer, incoming_query=query_text)) + return create( + lambda observer, _: self._observable_query( + observer, incoming_query=query_text + ) + ) -# endregion OpenAIAgent Subclass (OpenAI-Specific Implementation) \ No newline at end of file +# endregion OpenAIAgent Subclass (OpenAI-Specific Implementation) diff --git a/dimos/agents/agent_config.py b/dimos/agents/agent_config.py index de31644597..0ffbcd2983 100644 --- a/dimos/agents/agent_config.py +++ b/dimos/agents/agent_config.py @@ -15,6 +15,7 @@ from typing import List from dimos.agents.agent import Agent + class AgentConfig: def __init__(self, agents: List[Agent] = None): """ diff --git a/dimos/agents/agent_ctransformers_gguf.py b/dimos/agents/agent_ctransformers_gguf.py index 14d4649832..b1725372ff 100644 --- a/dimos/agents/agent_ctransformers_gguf.py +++ b/dimos/agents/agent_ctransformers_gguf.py @@ -15,7 +15,6 @@ from __future__ import annotations # Standard library imports -import json import logging import os from typing import Any, Optional @@ -26,14 +25,11 @@ from reactivex.scheduler import ThreadPoolScheduler from reactivex.subject import Subject import torch -from transformers import AutoModelForCausalLM, AutoTokenizer # Local imports from dimos.agents.agent import LLMAgent from dimos.agents.memory.base import AbstractAgentSemanticMemory from dimos.agents.prompt_builder.impl import PromptBuilder -from dimos.agents.tokenizer.base import AbstractTokenizer -from dimos.agents.tokenizer.huggingface_tokenizer import HuggingFaceTokenizer from dimos.utils.logging_config import setup_logger # Initialize environment variables @@ -44,6 +40,7 @@ from ctransformers import AutoModelForCausalLM as CTransformersModel + class CTransformersTokenizerAdapter: def __init__(self, model): self.model = model @@ -66,7 +63,9 @@ def detokenize_text(self, tokenized_text): except Exception as e: raise ValueError(f"Failed to detokenize text. Error: {str(e)}") - def apply_chat_template(self, conversation, tokenize=False, add_generation_prompt=True): + def apply_chat_template( + self, conversation, tokenize=False, add_generation_prompt=True + ): prompt = "" for message in conversation: role = message["role"] @@ -84,26 +83,27 @@ def apply_chat_template(self, conversation, tokenize=False, add_generation_promp # CTransformers Agent Class class CTransformersGGUFAgent(LLMAgent): - def __init__(self, - dev_name: str, - agent_type: str = "HF-LLM", - model_name: str = "TheBloke/Llama-2-7B-GGUF", - model_file: str = "llama-2-7b.Q4_K_M.gguf", - model_type: str = "llama", - gpu_layers: int = 50, - device: str = "auto", - query: str = "How many r's are in the word 'strawberry'?", - input_query_stream: Optional[Observable] = None, - input_video_stream: Optional[Observable] = None, - output_dir: str = os.path.join(os.getcwd(), "assets", "agent"), - agent_memory: Optional[AbstractAgentSemanticMemory] = None, - system_query: Optional[str] = "You are a helpful assistant.", - max_output_tokens_per_request: int = 10, - max_input_tokens_per_request: int = 250, - prompt_builder: Optional[PromptBuilder] = None, - pool_scheduler: Optional[ThreadPoolScheduler] = None, - process_all_inputs: Optional[bool] = None,): - + def __init__( + self, + dev_name: str, + agent_type: str = "HF-LLM", + model_name: str = "TheBloke/Llama-2-7B-GGUF", + model_file: str = "llama-2-7b.Q4_K_M.gguf", + model_type: str = "llama", + gpu_layers: int = 50, + device: str = "auto", + query: str = "How many r's are in the word 'strawberry'?", + input_query_stream: Optional[Observable] = None, + input_video_stream: Optional[Observable] = None, + output_dir: str = os.path.join(os.getcwd(), "assets", "agent"), + agent_memory: Optional[AbstractAgentSemanticMemory] = None, + system_query: Optional[str] = "You are a helpful assistant.", + max_output_tokens_per_request: int = 10, + max_input_tokens_per_request: int = 250, + prompt_builder: Optional[PromptBuilder] = None, + pool_scheduler: Optional[ThreadPoolScheduler] = None, + process_all_inputs: Optional[bool] = None, + ): # Determine appropriate default for process_all_inputs if not provided if process_all_inputs is None: # Default to True for text queries, False for video streams @@ -120,7 +120,7 @@ def __init__(self, process_all_inputs=process_all_inputs, system_query=system_query, max_output_tokens_per_request=max_output_tokens_per_request, - max_input_tokens_per_request=max_input_tokens_per_request + max_input_tokens_per_request=max_input_tokens_per_request, ) self.query = query @@ -141,14 +141,13 @@ def __init__(self, model_name, model_file=model_file, model_type=model_type, - gpu_layers=gpu_layers + gpu_layers=gpu_layers, ) self.tokenizer = CTransformersTokenizerAdapter(self.model) self.prompt_builder = prompt_builder or PromptBuilder( - self.model_name, - tokenizer=self.tokenizer + self.model_name, tokenizer=self.tokenizer ) self.max_output_tokens_per_request = max_output_tokens_per_request @@ -167,12 +166,13 @@ def __init__(self, if self.input_video_stream is not None: logger.info("Subscribing to input video stream...") self.disposables.add( - self.subscribe_to_image_processing(self.input_video_stream)) + self.subscribe_to_image_processing(self.input_video_stream) + ) if self.input_query_stream is not None: logger.info("Subscribing to input query stream...") self.disposables.add( - self.subscribe_to_query_processing(self.input_query_stream)) - + self.subscribe_to_query_processing(self.input_query_stream) + ) def _send_query(self, messages: list) -> Any: try: @@ -186,7 +186,11 @@ def _send_query(self, messages: list) -> Any: content = msg["content"] if isinstance(content, list): # Assume it's a list of {'type': 'text', 'text': ...} - text_parts = [c["text"] for c in content if isinstance(c, dict) and "text" in c] + text_parts = [ + c["text"] + for c in content + if isinstance(c, dict) and "text" in c + ] content = " ".join(text_parts) flat_messages.append({"role": role, "content": content}) @@ -194,14 +198,14 @@ def _send_query(self, messages: list) -> Any: print("Applying chat template...") prompt_text = self.tokenizer.apply_chat_template( - conversation=flat_messages, - tokenize=False, - add_generation_prompt=True + conversation=flat_messages, tokenize=False, add_generation_prompt=True ) print("Chat template applied.") print(f"Prompt text:\n{prompt_text}") - response = self.model(prompt_text, max_new_tokens=self.max_output_tokens_per_request) + response = self.model( + prompt_text, max_new_tokens=self.max_output_tokens_per_request + ) print("Model response received.") return response @@ -213,7 +217,11 @@ def stream_query(self, query_text: str) -> Subject: """ Creates an observable that processes a text query and emits the response. """ - return create(lambda observer, _: self._observable_query( - observer, incoming_query=query_text)) + return create( + lambda observer, _: self._observable_query( + observer, incoming_query=query_text + ) + ) + # endregion HuggingFaceLLMAgent Subclass (HuggingFace-Specific Implementation) diff --git a/dimos/agents/agent_huggingface_local.py b/dimos/agents/agent_huggingface_local.py index d209f8d88f..160b8b5a44 100644 --- a/dimos/agents/agent_huggingface_local.py +++ b/dimos/agents/agent_huggingface_local.py @@ -15,7 +15,6 @@ from __future__ import annotations # Standard library imports -import json import logging import os from typing import Any, Optional @@ -26,7 +25,7 @@ from reactivex.scheduler import ThreadPoolScheduler from reactivex.subject import Subject import torch -from transformers import AutoModelForCausalLM, AutoTokenizer +from transformers import AutoModelForCausalLM # Local imports from dimos.agents.agent import LLMAgent @@ -43,28 +42,29 @@ # Initialize logger for the agent module logger = setup_logger("dimos.agents", level=logging.DEBUG) + # HuggingFaceLLMAgent Class class HuggingFaceLocalAgent(LLMAgent): - def __init__(self, - dev_name: str, - agent_type: str = "HF-LLM", - model_name: str = "Qwen/Qwen2.5-3B", - device: str = "auto", - query: str = "How many r's are in the word 'strawberry'?", - input_query_stream: Optional[Observable] = None, - input_video_stream: Optional[Observable] = None, - output_dir: str = os.path.join(os.getcwd(), "assets", - "agent"), - agent_memory: Optional[AbstractAgentSemanticMemory] = None, - system_query: Optional[str] = None, - max_output_tokens_per_request: int = None, - max_input_tokens_per_request: int = None, - prompt_builder: Optional[PromptBuilder] = None, - tokenizer: Optional[AbstractTokenizer] = None, - image_detail: str = "low", - pool_scheduler: Optional[ThreadPoolScheduler] = None, - process_all_inputs: Optional[bool] = None,): - + def __init__( + self, + dev_name: str, + agent_type: str = "HF-LLM", + model_name: str = "Qwen/Qwen2.5-3B", + device: str = "auto", + query: str = "How many r's are in the word 'strawberry'?", + input_query_stream: Optional[Observable] = None, + input_video_stream: Optional[Observable] = None, + output_dir: str = os.path.join(os.getcwd(), "assets", "agent"), + agent_memory: Optional[AbstractAgentSemanticMemory] = None, + system_query: Optional[str] = None, + max_output_tokens_per_request: int = None, + max_input_tokens_per_request: int = None, + prompt_builder: Optional[PromptBuilder] = None, + tokenizer: Optional[AbstractTokenizer] = None, + image_detail: str = "low", + pool_scheduler: Optional[ThreadPoolScheduler] = None, + process_all_inputs: Optional[bool] = None, + ): # Determine appropriate default for process_all_inputs if not provided if process_all_inputs is None: # Default to True for text queries, False for video streams @@ -79,7 +79,7 @@ def __init__(self, agent_memory=agent_memory or LocalSemanticMemory(), pool_scheduler=pool_scheduler, process_all_inputs=process_all_inputs, - system_query=system_query + system_query=system_query, ) self.query = query @@ -99,14 +99,13 @@ def __init__(self, self.tokenizer = tokenizer or HuggingFaceTokenizer(self.model_name) self.prompt_builder = prompt_builder or PromptBuilder( - self.model_name, - tokenizer=self.tokenizer + self.model_name, tokenizer=self.tokenizer ) self.model = AutoModelForCausalLM.from_pretrained( model_name, torch_dtype=torch.float16 if self.device == "cuda" else torch.float32, - device_map=self.device + device_map=self.device, ) self.max_output_tokens_per_request = max_output_tokens_per_request @@ -125,104 +124,123 @@ def __init__(self, if self.input_video_stream is not None: logger.info("Subscribing to input video stream...") self.disposables.add( - self.subscribe_to_image_processing(self.input_video_stream)) + self.subscribe_to_image_processing(self.input_video_stream) + ) if self.input_query_stream is not None: logger.info("Subscribing to input query stream...") self.disposables.add( - self.subscribe_to_query_processing(self.input_query_stream)) - + self.subscribe_to_query_processing(self.input_query_stream) + ) def _send_query(self, messages: list) -> Any: _BLUE_PRINT_COLOR: str = "\033[34m" _RESET_COLOR: str = "\033[0m" - + try: # Log the incoming messages print(f"{_BLUE_PRINT_COLOR}Messages: {str(messages)}{_RESET_COLOR}") - + # Process with chat template try: print("Applying chat template...") prompt_text = self.tokenizer.tokenizer.apply_chat_template( conversation=[{"role": "user", "content": str(messages)}], tokenize=False, - add_generation_prompt=True + add_generation_prompt=True, ) print("Chat template applied.") - + # Tokenize the prompt print("Preparing model inputs...") - model_inputs = self.tokenizer.tokenizer([prompt_text], return_tensors="pt").to(self.model.device) + model_inputs = self.tokenizer.tokenizer( + [prompt_text], return_tensors="pt" + ).to(self.model.device) print("Model inputs prepared.") - + # Generate the response print("Generating response...") generated_ids = self.model.generate( - **model_inputs, - max_new_tokens=self.max_output_tokens_per_request + **model_inputs, max_new_tokens=self.max_output_tokens_per_request ) - + # Extract the generated tokens (excluding the input prompt tokens) print("Processing generated output...") generated_ids = [ - output_ids[len(input_ids):] - for input_ids, output_ids in zip(model_inputs.input_ids, generated_ids) + output_ids[len(input_ids) :] + for input_ids, output_ids in zip( + model_inputs.input_ids, generated_ids + ) ] - + # Convert tokens back to text - response = self.tokenizer.tokenizer.batch_decode(generated_ids, skip_special_tokens=True)[0] + response = self.tokenizer.tokenizer.batch_decode( + generated_ids, skip_special_tokens=True + )[0] print("Response successfully generated.") - + return response - + except AttributeError as e: # Handle case where tokenizer doesn't have the expected methods - logger.warning(f"Chat template not available: {e}. Using simple format.") + logger.warning( + f"Chat template not available: {e}. Using simple format." + ) # Continue with execution and use simple format - + except Exception as e: # Log any other errors but continue execution - logger.warning(f"Error in chat template processing: {e}. Falling back to simple format.") - + logger.warning( + f"Error in chat template processing: {e}. Falling back to simple format." + ) + # Fallback approach for models without chat template support # This code runs if the try block above raises an exception print("Using simple prompt format...") - + # Convert messages to a simple text format - if isinstance(messages, list) and messages and isinstance(messages[0], dict) and "content" in messages[0]: + if ( + isinstance(messages, list) + and messages + and isinstance(messages[0], dict) + and "content" in messages[0] + ): prompt_text = messages[0]["content"] else: prompt_text = str(messages) - + # Tokenize the prompt model_inputs = self.tokenizer.tokenize_text(prompt_text) model_inputs = torch.tensor([model_inputs], device=self.model.device) - + # Generate the response generated_ids = self.model.generate( input_ids=model_inputs, - max_new_tokens=self.max_output_tokens_per_request + max_new_tokens=self.max_output_tokens_per_request, ) - + # Extract the generated tokens - generated_ids = generated_ids[0][len(model_inputs[0]):] - + generated_ids = generated_ids[0][len(model_inputs[0]) :] + # Convert tokens back to text response = self.tokenizer.detokenize_text(generated_ids.tolist()) print("Response generated using simple format.") - + return response - + except Exception as e: # Catch all other errors logger.error(f"Error during query processing: {e}", exc_info=True) - return f"Error processing request. Please try again." + return "Error processing request. Please try again." def stream_query(self, query_text: str) -> Subject: """ Creates an observable that processes a text query and emits the response. """ - return create(lambda observer, _: self._observable_query( - observer, incoming_query=query_text)) + return create( + lambda observer, _: self._observable_query( + observer, incoming_query=query_text + ) + ) + # endregion HuggingFaceLLMAgent Subclass (HuggingFace-Specific Implementation) diff --git a/dimos/agents/agent_huggingface_remote.py b/dimos/agents/agent_huggingface_remote.py index d974259815..90a1bd68cc 100644 --- a/dimos/agents/agent_huggingface_remote.py +++ b/dimos/agents/agent_huggingface_remote.py @@ -40,29 +40,30 @@ # Initialize logger for the agent module logger = setup_logger("dimos.agents", level=logging.DEBUG) + # HuggingFaceLLMAgent Class class HuggingFaceRemoteAgent(LLMAgent): - def __init__(self, - dev_name: str, - agent_type: str = "HF-LLM", - model_name: str = "Qwen/QwQ-32B", - query: str = "How many r's are in the word 'strawberry'?", - input_query_stream: Optional[Observable] = None, - input_video_stream: Optional[Observable] = None, - output_dir: str = os.path.join(os.getcwd(), "assets", - "agent"), - agent_memory: Optional[AbstractAgentSemanticMemory] = None, - system_query: Optional[str] = None, - max_output_tokens_per_request: int = 16384, - prompt_builder: Optional[PromptBuilder] = None, - tokenizer: Optional[AbstractTokenizer] = None, - image_detail: str = "low", - pool_scheduler: Optional[ThreadPoolScheduler] = None, - process_all_inputs: Optional[bool] = None, - api_key: Optional[str] = None, - hf_provider: Optional[str] = None, - hf_base_url: Optional[str] = None): - + def __init__( + self, + dev_name: str, + agent_type: str = "HF-LLM", + model_name: str = "Qwen/QwQ-32B", + query: str = "How many r's are in the word 'strawberry'?", + input_query_stream: Optional[Observable] = None, + input_video_stream: Optional[Observable] = None, + output_dir: str = os.path.join(os.getcwd(), "assets", "agent"), + agent_memory: Optional[AbstractAgentSemanticMemory] = None, + system_query: Optional[str] = None, + max_output_tokens_per_request: int = 16384, + prompt_builder: Optional[PromptBuilder] = None, + tokenizer: Optional[AbstractTokenizer] = None, + image_detail: str = "low", + pool_scheduler: Optional[ThreadPoolScheduler] = None, + process_all_inputs: Optional[bool] = None, + api_key: Optional[str] = None, + hf_provider: Optional[str] = None, + hf_base_url: Optional[str] = None, + ): # Determine appropriate default for process_all_inputs if not provided if process_all_inputs is None: # Default to True for text queries, False for video streams @@ -77,7 +78,7 @@ def __init__(self, agent_memory=agent_memory, pool_scheduler=pool_scheduler, process_all_inputs=process_all_inputs, - system_query=system_query + system_query=system_query, ) self.query = query @@ -87,16 +88,16 @@ def __init__(self, self.model_name = model_name self.prompt_builder = prompt_builder or PromptBuilder( self.model_name, - tokenizer=tokenizer or HuggingFaceTokenizer(self.model_name) + tokenizer=tokenizer or HuggingFaceTokenizer(self.model_name), ) self.model_name = model_name self.max_output_tokens_per_request = max_output_tokens_per_request - self.api_key = api_key or os.getenv('HF_TOKEN') + self.api_key = api_key or os.getenv("HF_TOKEN") self.provider = hf_provider or "hf-inference" - self.base_url = hf_base_url or os.getenv('HUGGINGFACE_PRV_ENDPOINT') + self.base_url = hf_base_url or os.getenv("HUGGINGFACE_PRV_ENDPOINT") self.client = InferenceClient( provider=self.provider, base_url=self.base_url, @@ -117,12 +118,13 @@ def __init__(self, if self.input_video_stream is not None: logger.info("Subscribing to input video stream...") self.disposables.add( - self.subscribe_to_image_processing(self.input_video_stream)) + self.subscribe_to_image_processing(self.input_video_stream) + ) if self.input_query_stream is not None: logger.info("Subscribing to input query stream...") self.disposables.add( - self.subscribe_to_query_processing(self.input_query_stream)) - + self.subscribe_to_query_processing(self.input_query_stream) + ) def _send_query(self, messages: list) -> Any: try: @@ -132,7 +134,7 @@ def _send_query(self, messages: list) -> Any: max_tokens=self.max_output_tokens_per_request, ) - return (completion.choices[0].message) + return completion.choices[0].message except Exception as e: logger.error(f"Error during HuggingFace query: {e}") return "Error processing request." @@ -141,5 +143,8 @@ def stream_query(self, query_text: str) -> Subject: """ Creates an observable that processes a text query and emits the response. """ - return create(lambda observer, _: self._observable_query( - observer, incoming_query=query_text)) + return create( + lambda observer, _: self._observable_query( + observer, incoming_query=query_text + ) + ) diff --git a/dimos/agents/claude_agent.py b/dimos/agents/claude_agent.py index a2f7d5556b..eb6edc9fba 100644 --- a/dimos/agents/claude_agent.py +++ b/dimos/agents/claude_agent.py @@ -23,18 +23,13 @@ import json import os -from typing import Any, Dict, List, Optional, Tuple, Union, cast -import logging +from typing import Any, Dict, List, Optional, Tuple, Union import anthropic -from anthropic.types import ContentBlock, MessageParam, ToolUseBlock from dotenv import load_dotenv -from httpx._transports import base from pydantic import BaseModel from reactivex import Observable -from reactivex.disposable import Disposable from reactivex.scheduler import ThreadPoolScheduler -from reactivex import create # Local imports from dimos.agents.agent import LLMAgent @@ -43,7 +38,6 @@ from dimos.skills.skills import AbstractSkill, SkillLibrary from dimos.stream.frame_processor import FrameProcessor from dimos.utils.logging_config import setup_logger -from dimos.utils.threadpool import get_scheduler # Initialize environment variables load_dotenv() @@ -51,6 +45,7 @@ # Initialize logger for the Claude agent logger = setup_logger("dimos.agents.claude") + # Response object compatible with LLMAgent class ResponseMessage: def __init__(self, content="", tool_calls=None, thinking_blocks=None): @@ -58,22 +53,23 @@ def __init__(self, content="", tool_calls=None, thinking_blocks=None): self.tool_calls = tool_calls or [] self.thinking_blocks = thinking_blocks or [] self.parsed = None - + def __str__(self): # Return a string representation for logging parts = [] - + # Include content if available if self.content: parts.append(self.content) - + # Include tool calls if available if self.tool_calls: tool_names = [tc.function.name for tc in self.tool_calls] parts.append(f"[Tools called: {', '.join(tool_names)}]") - + return "\n".join(parts) if parts else "[No content]" + class ClaudeAgent(LLMAgent): """Claude agent implementation that uses Anthropic's API for processing. @@ -81,29 +77,31 @@ class ClaudeAgent(LLMAgent): and overrides _build_prompt to create Claude-formatted messages directly. """ - def __init__(self, - dev_name: str, - agent_type: str = "Vision", - query: str = "What do you see?", - input_query_stream: Optional[Observable] = None, - input_video_stream: Optional[Observable] = None, - input_data_stream: Optional[Observable] = None, - output_dir: str = os.path.join(os.getcwd(), "assets", "agent"), - agent_memory: Optional[AbstractAgentSemanticMemory] = None, - system_query: Optional[str] = None, - max_input_tokens_per_request: int = 128000, - max_output_tokens_per_request: int = 16384, - model_name: str = "claude-3-7-sonnet-20250219", - prompt_builder: Optional[PromptBuilder] = None, - rag_query_n: int = 4, - rag_similarity_threshold: float = 0.45, - skills: Optional[AbstractSkill] = None, - response_model: Optional[BaseModel] = None, - frame_processor: Optional[FrameProcessor] = None, - image_detail: str = "low", - pool_scheduler: Optional[ThreadPoolScheduler] = None, - process_all_inputs: Optional[bool] = None, - thinking_budget_tokens: Optional[int] = 2000): + def __init__( + self, + dev_name: str, + agent_type: str = "Vision", + query: str = "What do you see?", + input_query_stream: Optional[Observable] = None, + input_video_stream: Optional[Observable] = None, + input_data_stream: Optional[Observable] = None, + output_dir: str = os.path.join(os.getcwd(), "assets", "agent"), + agent_memory: Optional[AbstractAgentSemanticMemory] = None, + system_query: Optional[str] = None, + max_input_tokens_per_request: int = 128000, + max_output_tokens_per_request: int = 16384, + model_name: str = "claude-3-7-sonnet-20250219", + prompt_builder: Optional[PromptBuilder] = None, + rag_query_n: int = 4, + rag_similarity_threshold: float = 0.45, + skills: Optional[AbstractSkill] = None, + response_model: Optional[BaseModel] = None, + frame_processor: Optional[FrameProcessor] = None, + image_detail: str = "low", + pool_scheduler: Optional[ThreadPoolScheduler] = None, + process_all_inputs: Optional[bool] = None, + thinking_budget_tokens: Optional[int] = 2000, + ): """ Initializes a new instance of the ClaudeAgent. @@ -137,7 +135,7 @@ def __init__(self, process_all_inputs = True else: process_all_inputs = False - + super().__init__( dev_name=dev_name, agent_type=agent_type, @@ -147,9 +145,9 @@ def __init__(self, system_query=system_query, input_query_stream=input_query_stream, input_video_stream=input_video_stream, - input_data_stream=input_data_stream + input_data_stream=input_data_stream, ) - + self.client = anthropic.Anthropic() self.query = query self.output_dir = output_dir @@ -158,10 +156,10 @@ def __init__(self, # Claude-specific parameters self.thinking_budget_tokens = thinking_budget_tokens self.claude_api_params = {} # Will store params for Claude API calls - + # Configure skills self.skills = skills - self.skill_library = None # Required for error 'ClaudeAgent' object has no attribute 'skill_library' due to skills refactor + self.skill_library = None # Required for error 'ClaudeAgent' object has no attribute 'skill_library' due to skills refactor if isinstance(self.skills, SkillLibrary): self.skill_library = self.skills elif isinstance(self.skills, list): @@ -171,7 +169,7 @@ def __init__(self, elif isinstance(self.skills, AbstractSkill): self.skill_library = SkillLibrary() self.skill_library.add(self.skills) - + self.response_model = response_model self.model_name = model_name self.rag_query_n = rag_query_n @@ -179,14 +177,15 @@ def __init__(self, self.image_detail = image_detail self.max_output_tokens_per_request = max_output_tokens_per_request self.max_input_tokens_per_request = max_input_tokens_per_request - self.max_tokens_per_request = max_input_tokens_per_request + max_output_tokens_per_request + self.max_tokens_per_request = ( + max_input_tokens_per_request + max_output_tokens_per_request + ) # Add static context to memory. self._add_context_to_memory() self.frame_processor = frame_processor or FrameProcessor(delete_on_init=True) - # Ensure only one input stream is provided. if self.input_video_stream is not None and self.input_query_stream is not None: raise ValueError( @@ -198,68 +197,77 @@ def __init__(self, def _add_context_to_memory(self): """Adds initial context to the agent's memory.""" context_data = [ - ("id0", - "Optical Flow is a technique used to track the movement of objects in a video sequence." - ), - ("id1", - "Edge Detection is a technique used to identify the boundaries of objects in an image." - ), - ("id2", - "Video is a sequence of frames captured at regular intervals."), - ("id3", - "Colors in Optical Flow are determined by the movement of light, and can be used to track the movement of objects." - ), - ("id4", - "Json is a data interchange format that is easy for humans to read and write, and easy for machines to parse and generate." - ), + ( + "id0", + "Optical Flow is a technique used to track the movement of objects in a video sequence.", + ), + ( + "id1", + "Edge Detection is a technique used to identify the boundaries of objects in an image.", + ), + ("id2", "Video is a sequence of frames captured at regular intervals."), + ( + "id3", + "Colors in Optical Flow are determined by the movement of light, and can be used to track the movement of objects.", + ), + ( + "id4", + "Json is a data interchange format that is easy for humans to read and write, and easy for machines to parse and generate.", + ), ] for doc_id, text in context_data: self.agent_memory.add_vector(doc_id, text) - def _convert_tools_to_claude_format(self, tools: List[Dict[str, Any]]) -> List[Dict[str, Any]]: + def _convert_tools_to_claude_format( + self, tools: List[Dict[str, Any]] + ) -> List[Dict[str, Any]]: """ Converts DIMOS tools to Claude format. - + Args: tools: List of tools in DIMOS format. - + Returns: List of tools in Claude format. """ if not tools: return [] - + claude_tools = [] - + for tool in tools: # Skip if not a function - if tool.get('type') != 'function': + if tool.get("type") != "function": continue - - function = tool.get('function', {}) - name = function.get('name') - description = function.get('description', '') - parameters = function.get('parameters', {}) - + + function = tool.get("function", {}) + name = function.get("name") + description = function.get("description", "") + parameters = function.get("parameters", {}) + claude_tool = { "name": name, "description": description, "input_schema": { "type": "object", - "properties": parameters.get('properties', {}), - "required": parameters.get('required', []), - } + "properties": parameters.get("properties", {}), + "required": parameters.get("required", []), + }, } - + claude_tools.append(claude_tool) - + return claude_tools - def _build_prompt(self, messages: list, base64_image: Optional[Union[str, List[str]]] = None, - dimensions: Optional[Tuple[int, int]] = None, - override_token_limit: bool = False, - rag_results: str = "", - thinking_budget_tokens: int = None) -> list: + def _build_prompt( + self, + messages: list, + base64_image: Optional[Union[str, List[str]]] = None, + dimensions: Optional[Tuple[int, int]] = None, + override_token_limit: bool = False, + rag_results: str = "", + thinking_budget_tokens: int = None, + ) -> list: """Builds a prompt message specifically for Claude API, using local messages copy.""" """Builds a prompt message specifically for Claude API. @@ -276,19 +284,25 @@ def _build_prompt(self, messages: list, base64_image: Optional[Union[str, List[s Returns: dict: A dict containing Claude API parameters. """ - + # Append user query to conversation history while handling RAG if rag_results: - messages.append({"role": "user", "content": f"{rag_results}\n\n{self.query}"}) - logger.info(f"Added new user message to conversation history with RAG context (now has {len(messages)} messages)") - else: + messages.append( + {"role": "user", "content": f"{rag_results}\n\n{self.query}"} + ) + logger.info( + f"Added new user message to conversation history with RAG context (now has {len(messages)} messages)" + ) + else: messages.append({"role": "user", "content": self.query}) - logger.info(f"Added new user message to conversation history (now has {len(messages)} messages)") - + logger.info( + f"Added new user message to conversation history (now has {len(messages)} messages)" + ) + if base64_image is not None: # Handle both single image (str) and multiple images (List[str]) images = [base64_image] if isinstance(base64_image, str) else base64_image - + # Add each image as a separate entry in conversation history for img in images: img_content = [ @@ -297,195 +311,241 @@ def _build_prompt(self, messages: list, base64_image: Optional[Union[str, List[s "source": { "type": "base64", "media_type": "image/jpeg", - "data": img - } + "data": img, + }, } ] messages.append({"role": "user", "content": img_content}) - + if images: - logger.info(f"Added {len(images)} image(s) as separate entries to conversation history") - + logger.info( + f"Added {len(images)} image(s) as separate entries to conversation history" + ) + # Create Claude parameters with basic settings claude_params = { "model": self.model_name, "max_tokens": self.max_output_tokens_per_request, "temperature": 0, # Add temperature to make responses more deterministic - "messages": messages + "messages": messages, } - + # Add system prompt as a top-level parameter (not as a message) if self.system_query: - claude_params['system'] = self.system_query - + claude_params["system"] = self.system_query + # Store the parameters for use in _send_query self.claude_api_params = claude_params.copy() - + # Add tools if skills are available if self.skills and self.skills.get_tools(): tools = self._convert_tools_to_claude_format(self.skills.get_tools()) if tools: # Only add if we have valid tools claude_params["tools"] = tools # Enable tool calling with proper format - claude_params["tool_choice"] = { - "type": "auto" - } - + claude_params["tool_choice"] = {"type": "auto"} + # Add thinking if enabled and hard code required temperature = 1 if thinking_budget_tokens is not None and thinking_budget_tokens != 0: claude_params["thinking"] = { "type": "enabled", - "budget_tokens": thinking_budget_tokens + "budget_tokens": thinking_budget_tokens, } - claude_params["temperature"] = 1 # Required to be 1 when thinking is enabled # Default to 0 for deterministic responses - + claude_params["temperature"] = ( + 1 # Required to be 1 when thinking is enabled # Default to 0 for deterministic responses + ) + # Store the parameters for use in _send_query and return them self.claude_api_params = claude_params.copy() return messages, claude_params - + def _send_query(self, messages: list, claude_params: dict) -> Any: """Sends the query to Anthropic's API using streaming for better thinking visualization. - + Args: messages: Dict with 'claude_prompt' key containing Claude API parameters. - + Returns: The response message in a format compatible with LLMAgent's expectations. """ try: # Get Claude parameters - claude_params = (claude_params.get('claude_prompt', None) or self.claude_api_params) - + claude_params = ( + claude_params.get("claude_prompt", None) or self.claude_api_params + ) + # Log request parameters with truncated base64 data logger.debug(self._debug_api_call(claude_params)) - + # Initialize response containers text_content = "" tool_calls = [] thinking_blocks = [] - + # Log the start of streaming and the query - logger.info(f"Sending streaming request to Claude API") - + logger.info("Sending streaming request to Claude API") + # Log the query to memory.txt with open(os.path.join(self.output_dir, "memory.txt"), "a") as f: f.write(f"\n\nQUERY: {self.query}\n\n") f.flush() - + # Stream the response with self.client.messages.stream(**claude_params) as stream: print("\n==== CLAUDE API RESPONSE STREAM STARTED ====") - + # Open the memory file once for the entire stream processing - with open(os.path.join(self.output_dir, "memory.txt"), "a") as memory_file: + with open( + os.path.join(self.output_dir, "memory.txt"), "a" + ) as memory_file: # Track the current block being processed - current_block = {'type': None, 'id': None, 'content': "", 'signature': None} - + current_block = { + "type": None, + "id": None, + "content": "", + "signature": None, + } + for event in stream: # Log each event to console - # print(f"EVENT: {event.type}") + # print(f"EVENT: {event.type}") # print(json.dumps(event.model_dump(), indent=2, default=str)) - + if event.type == "content_block_start": # Initialize a new content block block_type = event.content_block.type - current_block = {'type': block_type, 'id': event.index, 'content': "", 'signature': None} + current_block = { + "type": block_type, + "id": event.index, + "content": "", + "signature": None, + } logger.debug(f"Starting {block_type} block...") - + elif event.type == "content_block_delta": if event.delta.type == "thinking_delta": # Accumulate thinking content - current_block['content'] = event.delta.thinking + current_block["content"] = event.delta.thinking memory_file.write(f"{event.delta.thinking}") memory_file.flush() # Ensure content is written immediately - + elif event.delta.type == "text_delta": # Accumulate text content text_content += event.delta.text - current_block['content'] += event.delta.text + current_block["content"] += event.delta.text memory_file.write(f"{event.delta.text}") memory_file.flush() - + elif event.delta.type == "signature_delta": # Store signature for thinking blocks - current_block['signature'] = event.delta.signature - memory_file.write(f"\n[Signature received for block {current_block['id']}]\n") + current_block["signature"] = event.delta.signature + memory_file.write( + f"\n[Signature received for block {current_block['id']}]\n" + ) memory_file.flush() - + elif event.type == "content_block_stop": # Store completed blocks - if current_block['type'] == "thinking": + if current_block["type"] == "thinking": # IMPORTANT: Store the complete event.content_block to ensure we preserve # the exact format that Claude expects in subsequent requests - if hasattr(event, 'content_block'): + if hasattr(event, "content_block"): # Use the exact thinking block as provided by Claude - thinking_blocks.append(event.content_block.model_dump()) - memory_file.write(f"\nTHINKING COMPLETE: block {current_block['id']}\n") + thinking_blocks.append( + event.content_block.model_dump() + ) + memory_file.write( + f"\nTHINKING COMPLETE: block {current_block['id']}\n" + ) else: # Fallback to constructed thinking block if content_block missing thinking_block = { "type": "thinking", - "thinking": current_block['content'], - "signature": current_block['signature'] + "thinking": current_block["content"], + "signature": current_block["signature"], } thinking_blocks.append(thinking_block) - memory_file.write(f"\nTHINKING COMPLETE: block {current_block['id']}\n") - - elif current_block['type'] == "redacted_thinking": + memory_file.write( + f"\nTHINKING COMPLETE: block {current_block['id']}\n" + ) + + elif current_block["type"] == "redacted_thinking": # Handle redacted thinking blocks - if hasattr(event, 'content_block') and hasattr(event.content_block, 'data'): + if hasattr(event, "content_block") and hasattr( + event.content_block, "data" + ): redacted_block = { "type": "redacted_thinking", - "data": event.content_block.data + "data": event.content_block.data, } thinking_blocks.append(redacted_block) - - elif current_block['type'] == "tool_use": + + elif current_block["type"] == "tool_use": # Process tool use blocks when they're complete - if hasattr(event, 'content_block'): + if hasattr(event, "content_block"): tool_block = event.content_block tool_id = tool_block.id tool_name = tool_block.name tool_input = tool_block.input - + # Create a tool call object for LLMAgent compatibility - tool_call_obj = type('ToolCall', (), { - 'id': tool_id, - 'function': type('Function', (), { - 'name': tool_name, - 'arguments': json.dumps(tool_input) - }) - }) + tool_call_obj = type( + "ToolCall", + (), + { + "id": tool_id, + "function": type( + "Function", + (), + { + "name": tool_name, + "arguments": json.dumps(tool_input), + }, + ), + }, + ) tool_calls.append(tool_call_obj) - + # Write tool call information to memory.txt memory_file.write(f"\n\nTOOL CALL: {tool_name}\n") - memory_file.write(f"ARGUMENTS: {json.dumps(tool_input, indent=2)}\n") - + memory_file.write( + f"ARGUMENTS: {json.dumps(tool_input, indent=2)}\n" + ) + # Reset current block - current_block = {'type': None, 'id': None, 'content': "", 'signature': None} + current_block = { + "type": None, + "id": None, + "content": "", + "signature": None, + } memory_file.flush() - - elif event.type == "message_delta" and event.delta.stop_reason == "tool_use": + + elif ( + event.type == "message_delta" + and event.delta.stop_reason == "tool_use" + ): # When a tool use is detected - logger.info(f"Tool use stop reason detected in stream") + logger.info("Tool use stop reason detected in stream") # Mark the end of the response in memory.txt - memory_file.write(f"\n\nRESPONSE COMPLETE\n\n") + memory_file.write("\n\nRESPONSE COMPLETE\n\n") memory_file.flush() - + print("\n==== CLAUDE API RESPONSE STREAM COMPLETED ====") - + # Final response - logger.info(f"Claude streaming complete. Text: {len(text_content)} chars, Tool calls: {len(tool_calls)}, Thinking blocks: {len(thinking_blocks)}") - + logger.info( + f"Claude streaming complete. Text: {len(text_content)} chars, Tool calls: {len(tool_calls)}, Thinking blocks: {len(thinking_blocks)}" + ) + # Return the complete response with all components return ResponseMessage( - content=text_content, + content=text_content, tool_calls=tool_calls if tool_calls else None, - thinking_blocks=thinking_blocks if thinking_blocks else None + thinking_blocks=thinking_blocks if thinking_blocks else None, ) - + except ConnectionError as ce: logger.error(f"Connection error with Anthropic API: {ce}") raise @@ -497,20 +557,22 @@ def _send_query(self, messages: list, claude_params: dict) -> Any: logger.exception(e) # This will print the full traceback raise - def _observable_query(self, - observer: Observer, - base64_image: Optional[str] = None, - dimensions: Optional[Tuple[int, int]] = None, - override_token_limit: bool = False, - incoming_query: Optional[str] = None, - reset_conversation: bool = False, - thinking_budget_tokens: int = None): + def _observable_query( + self, + observer: Observer, + base64_image: Optional[str] = None, + dimensions: Optional[Tuple[int, int]] = None, + override_token_limit: bool = False, + incoming_query: Optional[str] = None, + reset_conversation: bool = False, + thinking_budget_tokens: int = None, + ): """Main query handler that manages conversation history and Claude interactions. - + This is the primary method for handling all queries, whether they come through direct_query or through the observable pattern. It manages the conversation history, builds prompts, and handles tool calls. - + Args: observer (Observer): The observer to emit responses to base64_image (Optional[str]): Optional Base64-encoded image @@ -519,10 +581,11 @@ def _observable_query(self, incoming_query (Optional[str]): Optional query to update the agent's query reset_conversation (bool): Whether to reset the conversation history """ - + try: logger.info("_observable_query called in claude") import copy + # Reset conversation history if requested if reset_conversation: self.conversation_history = [] @@ -536,12 +599,23 @@ def _observable_query(self, _, rag_results = self._get_rag_context() # Build prompt and get Claude parameters - budget = thinking_budget_tokens if thinking_budget_tokens is not None else self.thinking_budget_tokens - messages, claude_params = self._build_prompt(messages, base64_image, dimensions, override_token_limit, rag_results, budget) - + budget = ( + thinking_budget_tokens + if thinking_budget_tokens is not None + else self.thinking_budget_tokens + ) + messages, claude_params = self._build_prompt( + messages, + base64_image, + dimensions, + override_token_limit, + rag_results, + budget, + ) + # Send query and get response response_message = self._send_query(messages, claude_params) - + if response_message is None: logger.error("Received None response from Claude API") observer.on_next("") @@ -552,23 +626,20 @@ def _observable_query(self, if response_message.thinking_blocks: content_blocks.extend(response_message.thinking_blocks) if response_message.content: - content_blocks.append({ - "type": "text", - "text": response_message.content - }) + content_blocks.append( + {"type": "text", "text": response_message.content} + ) if content_blocks: - messages.append({ - "role": "assistant", - "content": content_blocks - }) - + messages.append({"role": "assistant", "content": content_blocks}) + # Handle tool calls if present if response_message.tool_calls: self._handle_tooling(response_message, messages) # At the end, append only new messages (including tool-use/results) to the global conversation history under a lock import threading - if not hasattr(self, '_history_lock'): + + if not hasattr(self, "_history_lock"): self._history_lock = threading.Lock() with self._history_lock: for msg in messages[base_len:]: @@ -587,15 +658,20 @@ def _observable_query(self, logger.error(f"Query failed in {self.dev_name}: {e}") observer.on_error(e) self.response_subject.on_error(e) - + def _handle_tooling(self, response_message, messages): """Executes tools and appends tool-use/result blocks to messages.""" - if not hasattr(response_message, 'tool_calls') or not response_message.tool_calls: + if ( + not hasattr(response_message, "tool_calls") + or not response_message.tool_calls + ): logger.info("No tool calls found in response message") return None - + if len(response_message.tool_calls) > 1: - logger.warning("Multiple tool calls detected in response message. Not a tested feature.") + logger.warning( + "Multiple tool calls detected in response message. Not a tested feature." + ) # Execute all tools first and collect their results for tool_call in response_message.tool_calls: @@ -604,56 +680,61 @@ def _handle_tooling(self, response_message, messages): "type": "tool_use", "id": tool_call.id, "name": tool_call.function.name, - "input": json.loads(tool_call.function.arguments) + "input": json.loads(tool_call.function.arguments), } - messages.append({ - "role": "assistant", - "content": [tool_use_block] - }) - + messages.append({"role": "assistant", "content": [tool_use_block]}) + # Execute the tool args = json.loads(tool_call.function.arguments) tool_result = self.skills.call(tool_call.function.name, **args) - + # Add tool result to conversation history if tool_result: - messages.append({ - "role": "user", - "content": [{ - "type": "tool_result", - "tool_use_id": tool_call.id, - "content": f"{tool_result}" - }] - }) + messages.append( + { + "role": "user", + "content": [ + { + "type": "tool_result", + "tool_use_id": tool_call.id, + "content": f"{tool_result}", + } + ], + } + ) def _tooling_callback(self, response_message): """Runs the observable query for each tool call in the current response_message""" - if not hasattr(response_message, 'tool_calls') or not response_message.tool_calls: + if ( + not hasattr(response_message, "tool_calls") + or not response_message.tool_calls + ): return for tool_call in response_message.tool_calls: tool_name = tool_call.function.name tool_id = tool_call.id self.run_observable_query( query_text=f"Tool {tool_name}, ID: {tool_id} execution complete. Please summarize the results and continue.", - thinking_budget_tokens=0 + thinking_budget_tokens=0, ).run() def _debug_api_call(self, claude_params: dict): """Debugging function to log API calls with truncated base64 data.""" # Remove tools to reduce verbosity import copy + log_params = copy.deepcopy(claude_params) - if 'tools' in log_params: - del log_params['tools'] - + if "tools" in log_params: + del log_params["tools"] + # Truncate base64 data in images - much cleaner approach - if 'messages' in log_params: - for msg in log_params['messages']: - if 'content' in msg: - for content in msg['content']: - if isinstance(content, dict) and content.get('type') == 'image': - source = content.get('source', {}) - if source.get('type') == 'base64' and 'data' in source: - data = source['data'] - source['data'] = f"{data[:50]}..." - return json.dumps(log_params, indent=2, default=str) \ No newline at end of file + if "messages" in log_params: + for msg in log_params["messages"]: + if "content" in msg: + for content in msg["content"]: + if isinstance(content, dict) and content.get("type") == "image": + source = content.get("source", {}) + if source.get("type") == "base64" and "data" in source: + data = source["data"] + source["data"] = f"{data[:50]}..." + return json.dumps(log_params, indent=2, default=str) diff --git a/dimos/agents/memory/base.py b/dimos/agents/memory/base.py index 340b886edc..84b2b973a4 100644 --- a/dimos/agents/memory/base.py +++ b/dimos/agents/memory/base.py @@ -12,9 +12,11 @@ # See the License for the specific language governing permissions and # limitations under the License. -from abc import ABC, abstractmethod -import logging -from dimos.exceptions.agent_memory_exceptions import UnknownConnectionTypeError, AgentMemoryConnectionError +from abc import abstractmethod +from dimos.exceptions.agent_memory_exceptions import ( + UnknownConnectionTypeError, + AgentMemoryConnectionError, +) from dimos.utils.logging_config import setup_logger # TODO @@ -23,8 +25,9 @@ # TODO # class AbstractAgentSymbolicMemory(AbstractAgentMemory): -class AbstractAgentSemanticMemory(): # AbstractAgentMemory): - def __init__(self, connection_type='local', **kwargs): + +class AbstractAgentSemanticMemory: # AbstractAgentMemory): + def __init__(self, connection_type="local", **kwargs): """ Initialize with dynamic connection parameters. Args: @@ -34,25 +37,34 @@ def __init__(self, connection_type='local', **kwargs): AgentMemoryConnectionError: If initializing the database connection fails. """ self.logger = setup_logger(self.__class__.__name__) - self.logger.info('Initializing AgentMemory with connection type: %s', connection_type) + self.logger.info( + "Initializing AgentMemory with connection type: %s", connection_type + ) self.connection_params = kwargs - self.db_connection = None # Holds the conection, whether local or remote, to the database used. - - if connection_type not in ['local', 'remote']: - error = UnknownConnectionTypeError(f"Invalid connection_type {connection_type}. Expected 'local' or 'remote'.") + self.db_connection = ( + None # Holds the conection, whether local or remote, to the database used. + ) + + if connection_type not in ["local", "remote"]: + error = UnknownConnectionTypeError( + f"Invalid connection_type {connection_type}. Expected 'local' or 'remote'." + ) self.logger.error(str(error)) raise error try: - if connection_type == 'remote': + if connection_type == "remote": self.connect() - elif connection_type == 'local': + elif connection_type == "local": self.create() except Exception as e: - self.logger.error("Failed to initialize database connection: %s", str(e), exc_info=True) - raise AgentMemoryConnectionError("Initialization failed due to an unexpected error.", cause=e) from e + self.logger.error( + "Failed to initialize database connection: %s", str(e), exc_info=True + ) + raise AgentMemoryConnectionError( + "Initialization failed due to an unexpected error.", cause=e + ) from e - @abstractmethod def connect(self): """Establish a connection to the data store using dynamic parameters specified during initialization.""" @@ -77,7 +89,7 @@ def get_vector(self, vector_id): Args: vector_id (any): The identifier of the vector to retrieve. """ - + @abstractmethod def query(self, query_texts, n_results=4, similarity_threshold=None): """Performs a semantic search in the vector database. @@ -123,4 +135,3 @@ def delete_vector(self, vector_id): # (some sort of tag/metadata) # temporal - diff --git a/dimos/agents/memory/chroma_impl.py b/dimos/agents/memory/chroma_impl.py index 369003d290..74f18bb054 100644 --- a/dimos/agents/memory/chroma_impl.py +++ b/dimos/agents/memory/chroma_impl.py @@ -14,7 +14,6 @@ from dimos.agents.memory.base import AbstractAgentSemanticMemory -import chromadb from langchain_openai import OpenAIEmbeddings from langchain_chroma import Chroma import os @@ -23,18 +22,18 @@ class ChromaAgentSemanticMemory(AbstractAgentSemanticMemory): """Base class for Chroma-based semantic memory implementations.""" - + def __init__(self, collection_name="my_collection"): """Initialize the connection to the local Chroma DB.""" self.collection_name = collection_name self.db_connection = None self.embeddings = None - super().__init__(connection_type='local') + super().__init__(connection_type="local") def connect(self): # Stub return super().connect() - + def create(self): """Create the embedding function and initialize the Chroma database. This method must be implemented by child classes.""" @@ -52,26 +51,23 @@ def add_vector(self, vector_id, vector_data): def get_vector(self, vector_id): """Retrieve a vector from the ChromaDB by its identifier.""" - result = self.db_connection.get(include=['embeddings'], ids=[vector_id]) + result = self.db_connection.get(include=["embeddings"], ids=[vector_id]) return result def query(self, query_texts, n_results=4, similarity_threshold=None): """Query the collection with a specific text and return up to n results.""" if not self.db_connection: raise Exception("Collection not initialized. Call connect() first.") - + if similarity_threshold is not None: if not (0 <= similarity_threshold <= 1): raise ValueError("similarity_threshold must be between 0 and 1.") return self.db_connection.similarity_search_with_relevance_scores( - query=query_texts, - k=n_results, - score_threshold=similarity_threshold + query=query_texts, k=n_results, score_threshold=similarity_threshold ) else: documents = self.db_connection.similarity_search( - query=query_texts, - k=n_results + query=query_texts, k=n_results ) return [(doc, None) for doc in documents] @@ -88,10 +84,15 @@ def delete_vector(self, vector_id): class OpenAISemanticMemory(ChromaAgentSemanticMemory): """Semantic memory implementation using OpenAI's embedding API.""" - - def __init__(self, collection_name="my_collection", model="text-embedding-3-large", dimensions=1024): + + def __init__( + self, + collection_name="my_collection", + model="text-embedding-3-large", + dimensions=1024, + ): """Initialize OpenAI-based semantic memory. - + Args: collection_name (str): Name of the Chroma collection model (str): OpenAI embedding model to use @@ -119,22 +120,25 @@ def create(self): self.db_connection = Chroma( collection_name=self.collection_name, embedding_function=self.embeddings, - collection_metadata={"hnsw:space": "cosine"} + collection_metadata={"hnsw:space": "cosine"}, ) class LocalSemanticMemory(ChromaAgentSemanticMemory): """Semantic memory implementation using local models.""" - - def __init__(self, collection_name="my_collection", model_name="sentence-transformers/all-MiniLM-L6-v2"): + + def __init__( + self, + collection_name="my_collection", + model_name="sentence-transformers/all-MiniLM-L6-v2", + ): """Initialize the local semantic memory using SentenceTransformer. - + Args: collection_name (str): Name of the Chroma collection model_name (str): Embeddings model """ - from sentence_transformers import SentenceTransformer - + self.model_name = model_name super().__init__(collection_name=collection_name) @@ -142,23 +146,23 @@ def create(self): """Create local embedding model and initialize the ChromaDB client.""" # Load the sentence transformer model # Use CUDA if available, otherwise fall back to CPU - device = 'cuda' if torch.cuda.is_available() else 'cpu' + device = "cuda" if torch.cuda.is_available() else "cpu" print(f"Using device: {device}") self.model = SentenceTransformer(self.model_name, device=device) - + # Create a custom embedding class that implements the embed_query method class SentenceTransformerEmbeddings: def __init__(self, model): self.model = model - + def embed_query(self, text): """Embed a single query text.""" return self.model.encode(text, normalize_embeddings=True).tolist() - + def embed_documents(self, texts): """Embed multiple documents/texts.""" return self.model.encode(texts, normalize_embeddings=True).tolist() - + # Create an instance of our custom embeddings class self.embeddings = SentenceTransformerEmbeddings(self.model) @@ -166,6 +170,5 @@ def embed_documents(self, texts): self.db_connection = Chroma( collection_name=self.collection_name, embedding_function=self.embeddings, - collection_metadata={"hnsw:space": "cosine"} + collection_metadata={"hnsw:space": "cosine"}, ) - diff --git a/dimos/agents/memory/image_embedding.py b/dimos/agents/memory/image_embedding.py index 49c1ec67b6..2355fad74d 100644 --- a/dimos/agents/memory/image_embedding.py +++ b/dimos/agents/memory/image_embedding.py @@ -20,9 +20,8 @@ """ import os -import logging import numpy as np -from typing import Union, List, Dict, Any +from typing import Union from PIL import Image import io import cv2 @@ -31,18 +30,19 @@ logger = setup_logger("dimos.agents.memory.image_embedding") + class ImageEmbeddingProvider: """ A provider for generating vector embeddings from images. - + This class uses pre-trained models to convert images into vector embeddings that can be stored in a vector database and used for similarity search. """ - + def __init__(self, model_name: str = "clip", dimensions: int = 512): """ Initialize the image embedding provider. - + Args: model_name: Name of the embedding model to use ("clip", "resnet", etc.) dimensions: Dimensions of the embedding vectors @@ -51,17 +51,22 @@ def __init__(self, model_name: str = "clip", dimensions: int = 512): self.dimensions = dimensions self.model = None self.processor = None - + self._initialize_model() - + logger.info(f"ImageEmbeddingProvider initialized with model {model_name}") - + def _initialize_model(self): """Initialize the specified embedding model.""" try: import torch - from transformers import CLIPProcessor, CLIPModel, AutoFeatureExtractor, AutoModel - + from transformers import ( + CLIPProcessor, + CLIPModel, + AutoFeatureExtractor, + AutoModel, + ) + if self.model_name == "clip": model_id = "openai/clip-vit-base-patch32" self.model = CLIPModel.from_pretrained(model_id) @@ -81,102 +86,110 @@ def _initialize_model(self): self.model = None self.processor = None raise - + def get_embedding(self, image: Union[np.ndarray, str, bytes]) -> np.ndarray: """ Generate an embedding vector for the provided image. - + Args: image: The image to embed, can be a numpy array (OpenCV format), a file path, or a base64-encoded string - + Returns: A numpy array containing the embedding vector """ if self.model is None or self.processor is None: logger.error("Model not initialized. Using fallback random embedding.") return np.random.randn(self.dimensions).astype(np.float32) - + pil_image = self._prepare_image(image) - + try: import torch - + if self.model_name == "clip": inputs = self.processor(images=pil_image, return_tensors="pt") - + with torch.no_grad(): image_features = self.model.get_image_features(**inputs) - - image_embedding = image_features / image_features.norm(dim=1, keepdim=True) + + image_embedding = image_features / image_features.norm( + dim=1, keepdim=True + ) embedding = image_embedding.numpy()[0] - + elif self.model_name == "resnet": inputs = self.processor(images=pil_image, return_tensors="pt") - + with torch.no_grad(): outputs = self.model(**inputs) - + # Get the [CLS] token embedding embedding = outputs.last_hidden_state[:, 0, :].numpy()[0] else: - logger.warning(f"Unsupported model: {self.model_name}. Using random embedding.") + logger.warning( + f"Unsupported model: {self.model_name}. Using random embedding." + ) embedding = np.random.randn(self.dimensions).astype(np.float32) - + # Normalize and ensure correct dimensions embedding = embedding / np.linalg.norm(embedding) - + logger.debug(f"Generated embedding with shape {embedding.shape}") return embedding - + except Exception as e: logger.error(f"Error generating embedding: {e}") return np.random.randn(self.dimensions).astype(np.float32) - + def get_text_embedding(self, text: str) -> np.ndarray: """ Generate an embedding vector for the provided text. - + Args: text: The text to embed - + Returns: A numpy array containing the embedding vector """ if self.model is None or self.processor is None: logger.error("Model not initialized. Using fallback random embedding.") return np.random.randn(self.dimensions).astype(np.float32) - + if self.model_name != "clip": - logger.warning(f"Text embeddings are only supported with CLIP model, not {self.model_name}. Using random embedding.") + logger.warning( + f"Text embeddings are only supported with CLIP model, not {self.model_name}. Using random embedding." + ) return np.random.randn(self.dimensions).astype(np.float32) - + try: import torch - + inputs = self.processor(text=[text], return_tensors="pt", padding=True) - + with torch.no_grad(): text_features = self.model.get_text_features(**inputs) - + # Normalize the features text_embedding = text_features / text_features.norm(dim=1, keepdim=True) embedding = text_embedding.numpy()[0] - - logger.debug(f"Generated text embedding with shape {embedding.shape} for text: '{text}'") + + logger.debug( + f"Generated text embedding with shape {embedding.shape} for text: '{text}'" + ) return embedding - + except Exception as e: logger.error(f"Error generating text embedding: {e}") return np.random.randn(self.dimensions).astype(np.float32) - + def _prepare_image(self, image: Union[np.ndarray, str, bytes]) -> Image.Image: """ Convert the input image to PIL format required by the models. - + Args: image: Input image in various formats - + Returns: PIL Image object """ @@ -185,9 +198,9 @@ def _prepare_image(self, image: Union[np.ndarray, str, bytes]) -> Image.Image: image_rgb = cv2.cvtColor(image, cv2.COLOR_BGR2RGB) else: image_rgb = image - + return Image.fromarray(image_rgb) - + elif isinstance(image, str): if os.path.isfile(image): return Image.open(image) @@ -198,9 +211,9 @@ def _prepare_image(self, image: Union[np.ndarray, str, bytes]) -> Image.Image: except Exception as e: logger.error(f"Failed to decode image string: {e}") raise ValueError("Invalid image string format") - + elif isinstance(image, bytes): return Image.open(io.BytesIO(image)) - + else: raise ValueError(f"Unsupported image format: {type(image)}") diff --git a/dimos/agents/memory/spatial_vector_db.py b/dimos/agents/memory/spatial_vector_db.py index 247c8dee65..85becdb8d0 100644 --- a/dimos/agents/memory/spatial_vector_db.py +++ b/dimos/agents/memory/spatial_vector_db.py @@ -19,85 +19,96 @@ their XY locations and querying by location or image similarity. """ -import os -import logging import numpy as np -import cv2 -import json -import base64 -from typing import List, Dict, Tuple, Any, Optional, Union +from typing import List, Dict, Tuple, Any import chromadb -from chromadb.utils import embedding_functions -from dimos.agents.memory.base import AbstractAgentSemanticMemory from dimos.agents.memory.visual_memory import VisualMemory from dimos.utils.logging_config import setup_logger logger = setup_logger("dimos.agents.memory.spatial_vector_db") + class SpatialVectorDB: """ A vector database for storing and querying images mapped to X,Y,theta absolute locations for SpatialMemory. - + This class extends the ChromaDB implementation to support storing images with their absolute locations and querying by location, text, or image cosine semantic similarity. """ - - def __init__(self, collection_name: str = "spatial_memory", chroma_client=None, visual_memory=None): + + def __init__( + self, + collection_name: str = "spatial_memory", + chroma_client=None, + visual_memory=None, + ): """ Initialize the spatial vector database. - + Args: collection_name: Name of the vector database collection chroma_client: Optional ChromaDB client for persistence. If None, an in-memory client is used. visual_memory: Optional VisualMemory instance for storing images. If None, a new one is created. """ self.collection_name = collection_name - + # Use provided client or create in-memory client self.client = chroma_client if chroma_client is not None else chromadb.Client() - + # Check if collection already exists - in newer ChromaDB versions list_collections returns names directly existing_collections = self.client.list_collections() - + # Handle different versions of ChromaDB API try: collection_exists = collection_name in existing_collections except: try: - collection_exists = collection_name in [c.name for c in existing_collections] + collection_exists = collection_name in [ + c.name for c in existing_collections + ] except: try: self.client.get_collection(name=collection_name) collection_exists = True except Exception: collection_exists = False - + # Get or create the collection self.image_collection = self.client.get_or_create_collection( - name=collection_name, - metadata={"hnsw:space": "cosine"} + name=collection_name, metadata={"hnsw:space": "cosine"} ) - + # Use provided visual memory or create a new one - self.visual_memory = visual_memory if visual_memory is not None else VisualMemory() - + self.visual_memory = ( + visual_memory if visual_memory is not None else VisualMemory() + ) + # Log initialization info with details about whether using existing collection client_type = "persistent" if chroma_client is not None else "in-memory" try: - count = len(self.image_collection.get(include=[])['ids']) + count = len(self.image_collection.get(include=[])["ids"]) if collection_exists: - logger.info(f"Using EXISTING {client_type} collection '{collection_name}' with {count} entries") + logger.info( + f"Using EXISTING {client_type} collection '{collection_name}' with {count} entries" + ) else: logger.info(f"Created NEW {client_type} collection '{collection_name}'") except Exception as e: - logger.info(f"Initialized {client_type} collection '{collection_name}' (count error: {str(e)})") - - def add_image_vector(self, vector_id: str, image: np.ndarray, embedding: np.ndarray, - metadata: Dict[str, Any]) -> None: + logger.info( + f"Initialized {client_type} collection '{collection_name}' (count error: {str(e)})" + ) + + def add_image_vector( + self, + vector_id: str, + image: np.ndarray, + embedding: np.ndarray, + metadata: Dict[str, Any], + ) -> None: """ Add an image with its embedding and metadata to the vector database. - + Args: vector_id: Unique identifier for the vector image: The image to store @@ -106,156 +117,168 @@ def add_image_vector(self, vector_id: str, image: np.ndarray, embedding: np.ndar """ # Store the image in visual memory self.visual_memory.add(vector_id, image) - + # Add the vector to ChromaDB self.image_collection.add( - ids=[vector_id], - embeddings=[embedding.tolist()], - metadatas=[metadata] + ids=[vector_id], embeddings=[embedding.tolist()], metadatas=[metadata] ) - + logger.debug(f"Added image vector {vector_id} with metadata: {metadata}") - + def query_by_embedding(self, embedding: np.ndarray, limit: int = 5) -> List[Dict]: """ Query the vector database for images similar to the provided embedding. - + Args: embedding: Query embedding vector limit: Maximum number of results to return - + Returns: List of results, each containing the image and its metadata """ results = self.image_collection.query( - query_embeddings=[embedding.tolist()], - n_results=limit + query_embeddings=[embedding.tolist()], n_results=limit ) - + return self._process_query_results(results) - # TODO: implement efficient nearest neighbor search - def query_by_location(self, x: float, y: float, radius: float = 2.0, limit: int = 5) -> List[Dict]: + + # TODO: implement efficient nearest neighbor search + def query_by_location( + self, x: float, y: float, radius: float = 2.0, limit: int = 5 + ) -> List[Dict]: """ Query the vector database for images near the specified location. - + Args: x: X coordinate y: Y coordinate radius: Search radius in meters limit: Maximum number of results to return - + Returns: List of results, each containing the image and its metadata """ results = self.image_collection.get() - - if not results or not results['ids']: + + if not results or not results["ids"]: return [] - - filtered_results = { - 'ids': [], - 'metadatas': [], - 'distances': [] - } - - for i, metadata in enumerate(results['metadatas']): - item_x = metadata.get('x') - item_y = metadata.get('y') - + + filtered_results = {"ids": [], "metadatas": [], "distances": []} + + for i, metadata in enumerate(results["metadatas"]): + item_x = metadata.get("x") + item_y = metadata.get("y") + if item_x is not None and item_y is not None: - distance = np.sqrt((x - item_x)**2 + (y - item_y)**2) - + distance = np.sqrt((x - item_x) ** 2 + (y - item_y) ** 2) + if distance <= radius: - filtered_results['ids'].append(results['ids'][i]) - filtered_results['metadatas'].append(metadata) - filtered_results['distances'].append(distance) - - sorted_indices = np.argsort(filtered_results['distances']) - filtered_results['ids'] = [filtered_results['ids'][i] for i in sorted_indices[:limit]] - filtered_results['metadatas'] = [filtered_results['metadatas'][i] for i in sorted_indices[:limit]] - filtered_results['distances'] = [filtered_results['distances'][i] for i in sorted_indices[:limit]] - + filtered_results["ids"].append(results["ids"][i]) + filtered_results["metadatas"].append(metadata) + filtered_results["distances"].append(distance) + + sorted_indices = np.argsort(filtered_results["distances"]) + filtered_results["ids"] = [ + filtered_results["ids"][i] for i in sorted_indices[:limit] + ] + filtered_results["metadatas"] = [ + filtered_results["metadatas"][i] for i in sorted_indices[:limit] + ] + filtered_results["distances"] = [ + filtered_results["distances"][i] for i in sorted_indices[:limit] + ] + return self._process_query_results(filtered_results) - + def _process_query_results(self, results) -> List[Dict]: """Process query results to include decoded images.""" - if not results or not results['ids']: + if not results or not results["ids"]: return [] - + processed_results = [] - - for i, vector_id in enumerate(results['ids']): + + for i, vector_id in enumerate(results["ids"]): lookup_id = vector_id[0] if isinstance(vector_id, list) else vector_id - + # Create the result dictionary with metadata regardless of image availability result = { - 'metadata': results['metadatas'][i] if 'metadatas' in results else {}, - 'id': lookup_id + "metadata": results["metadatas"][i] if "metadatas" in results else {}, + "id": lookup_id, } - + # Add distance if available - if 'distances' in results: - result['distance'] = results['distances'][i][0] if isinstance(results['distances'][i], list) else results['distances'][i] - + if "distances" in results: + result["distance"] = ( + results["distances"][i][0] + if isinstance(results["distances"][i], list) + else results["distances"][i] + ) + # Get the image from visual memory image = self.visual_memory.get(lookup_id) - result['image'] = image - + result["image"] = image + processed_results.append(result) - + return processed_results - + def query_by_text(self, text: str, limit: int = 5) -> List[Dict]: """ Query the vector database for images matching the provided text description. - + This method uses CLIP's text-to-image matching capability to find images that semantically match the text query (e.g., "where is the kitchen"). - + Args: text: Text query to search for limit: Maximum number of results to return - + Returns: List of results, each containing the image, its metadata, and similarity score """ from dimos.agents.memory.image_embedding import ImageEmbeddingProvider - + embedding_provider = ImageEmbeddingProvider(model_name="clip") - + text_embedding = embedding_provider.get_text_embedding(text) - + results = self.image_collection.query( query_embeddings=[text_embedding.tolist()], n_results=limit, - include=["documents", "metadatas", "distances"] + include=["documents", "metadatas", "distances"], + ) + + logger.info( + f"Text query: '{text}' returned {len(results['ids'] if 'ids' in results else [])} results" ) - - logger.info(f"Text query: '{text}' returned {len(results['ids'] if 'ids' in results else [])} results") return self._process_query_results(results) - + def get_all_locations(self) -> List[Tuple[float, float, float]]: """Get all locations stored in the database.""" # Get all items from the collection without embeddings results = self.image_collection.get(include=["metadatas"]) - + if not results or "metadatas" not in results or not results["metadatas"]: return [] - + # Extract x, y coordinates from metadata locations = [] for metadata in results["metadatas"]: - if isinstance(metadata, list) and metadata and isinstance(metadata[0], dict): + if ( + isinstance(metadata, list) + and metadata + and isinstance(metadata[0], dict) + ): metadata = metadata[0] # Handle nested metadata - + if isinstance(metadata, dict) and "x" in metadata and "y" in metadata: x = metadata.get("x", 0) y = metadata.get("y", 0) z = metadata.get("z", 0) if "z" in metadata else 0 locations.append((x, y, z)) - + return locations - + @property def image_storage(self): """Legacy accessor for compatibility with existing code.""" diff --git a/dimos/agents/memory/visual_memory.py b/dimos/agents/memory/visual_memory.py index fb520c9c85..cf4e7669ea 100644 --- a/dimos/agents/memory/visual_memory.py +++ b/dimos/agents/memory/visual_memory.py @@ -15,78 +15,81 @@ """ Visual memory storage for managing image data persistence and retrieval """ + import os import pickle import base64 -import logging import numpy as np import cv2 -from typing import Dict, Optional, Tuple, Any, List +from typing import Optional from dimos.utils.logging_config import setup_logger logger = setup_logger("dimos.agents.memory.visual_memory") + class VisualMemory: """ A class for storing and retrieving visual memories (images) with persistence. - + This class handles the storage, encoding, and retrieval of images associated with vector database entries. It provides persistence mechanisms to save and load the image data from disk. """ - + def __init__(self, output_dir: str = None): """ Initialize the visual memory system. - + Args: output_dir: Directory to store the serialized image data """ self.images = {} # Maps IDs to encoded images self.output_dir = output_dir - + if output_dir: os.makedirs(output_dir, exist_ok=True) logger.info(f"VisualMemory initialized with output directory: {output_dir}") else: logger.info("VisualMemory initialized with no persistence directory") - + def add(self, image_id: str, image: np.ndarray) -> None: """ Add an image to visual memory. - + Args: image_id: Unique identifier for the image image: The image data as a numpy array """ # Encode the image to base64 for storage - success, encoded_image = cv2.imencode('.jpg', image) + success, encoded_image = cv2.imencode(".jpg", image) if not success: logger.error(f"Failed to encode image {image_id}") return - + image_bytes = encoded_image.tobytes() - b64_encoded = base64.b64encode(image_bytes).decode('utf-8') - + b64_encoded = base64.b64encode(image_bytes).decode("utf-8") + # Store the encoded image self.images[image_id] = b64_encoded logger.debug(f"Added image {image_id} to visual memory") - + def get(self, image_id: str) -> Optional[np.ndarray]: """ Retrieve an image from visual memory. - + Args: image_id: Unique identifier for the image - + Returns: The decoded image as a numpy array, or None if not found """ if image_id not in self.images: - logger.warning(f"Image not found in storage for ID {image_id}. Incomplete or corrupted image storage.") + logger.warning( + f"Image not found in storage for ID {image_id}. Incomplete or corrupted image storage." + ) return None - + try: encoded_image = self.images[image_id] image_bytes = base64.b64decode(encoded_image) @@ -96,83 +99,85 @@ def get(self, image_id: str) -> Optional[np.ndarray]: except Exception as e: logger.warning(f"Failed to decode image for ID {image_id}: {str(e)}") return None - + def contains(self, image_id: str) -> bool: """ Check if an image ID exists in visual memory. - + Args: image_id: Unique identifier for the image - + Returns: True if the image exists, False otherwise """ return image_id in self.images - + def count(self) -> int: """ Get the number of images in visual memory. - + Returns: The number of images stored """ return len(self.images) - + def save(self, filename: Optional[str] = None) -> str: """ Save the visual memory to disk. - + Args: filename: Optional filename to save to. If None, uses a default name in the output directory. - + Returns: The path where the data was saved """ if not self.output_dir: - logger.warning("No output directory specified for VisualMemory. Cannot save.") + logger.warning( + "No output directory specified for VisualMemory. Cannot save." + ) return "" - + if not filename: filename = "visual_memory.pkl" - + output_path = os.path.join(self.output_dir, filename) - + try: - with open(output_path, 'wb') as f: + with open(output_path, "wb") as f: pickle.dump(self.images, f) logger.info(f"Saved {len(self.images)} images to {output_path}") return output_path except Exception as e: logger.error(f"Failed to save visual memory: {str(e)}") return "" - + @classmethod - def load(cls, path: str, output_dir: Optional[str] = None) -> 'VisualMemory': + def load(cls, path: str, output_dir: Optional[str] = None) -> "VisualMemory": """ Load visual memory from disk. - + Args: path: Path to the saved visual memory file output_dir: Optional output directory for the new instance - + Returns: A new VisualMemory instance with the loaded data """ instance = cls(output_dir=output_dir) - + if not os.path.exists(path): logger.warning(f"Visual memory file {path} not found") return instance - + try: - with open(path, 'rb') as f: + with open(path, "rb") as f: instance.images = pickle.load(f) logger.info(f"Loaded {len(instance.images)} images from {path}") return instance except Exception as e: logger.error(f"Failed to load visual memory: {str(e)}") return instance - + def clear(self) -> None: """Clear all images from memory.""" self.images = {} diff --git a/dimos/agents/planning_agent.py b/dimos/agents/planning_agent.py index 197ebe76d5..320fc52968 100644 --- a/dimos/agents/planning_agent.py +++ b/dimos/agents/planning_agent.py @@ -13,47 +13,49 @@ # limitations under the License. import threading -from typing import List, Optional, Dict, Union, Literal -import json -from reactivex import Subject, Observable, disposable, create +from typing import List, Optional, Literal +from reactivex import Observable from reactivex import operators as ops -from openai import OpenAI, NOT_GIVEN import time from dimos.skills.skills import AbstractSkill from dimos.agents.agent import OpenAIAgent from dimos.utils.logging_config import setup_logger from textwrap import dedent -from pydantic import BaseModel, Field +from pydantic import BaseModel logger = setup_logger("dimos.agents.planning_agent") + # For response validation class PlanningAgentResponse(BaseModel): type: Literal["dialogue", "plan"] content: List[str] needs_confirmation: bool + class PlanningAgent(OpenAIAgent): """Agent that plans and breaks down tasks through dialogue. - + This agent specializes in: 1. Understanding complex tasks through dialogue 2. Breaking tasks into concrete, executable steps 3. Refining plans based on user feedback 4. Streaming individual steps to ExecutionAgents - + The agent maintains conversation state and can refine plans until the user confirms they are ready to execute. """ - - def __init__(self, - dev_name: str = "PlanningAgent", - model_name: str = "gpt-4", - input_query_stream: Optional[Observable] = None, - use_terminal: bool = False, - skills: Optional[AbstractSkill] = None): + + def __init__( + self, + dev_name: str = "PlanningAgent", + model_name: str = "gpt-4", + input_query_stream: Optional[Observable] = None, + use_terminal: bool = False, + skills: Optional[AbstractSkill] = None, + ): """Initialize the planning agent. - + Args: dev_name: Name identifier for the agent model_name: OpenAI model to use @@ -66,12 +68,12 @@ def __init__(self, self.current_plan = [] self.plan_confirmed = False self.latest_response = None - + # Build system prompt skills_list = [] if skills is not None: skills_list = skills.get_tools() - + system_query = dedent(f""" You are a Robot planning assistant that helps break down tasks into concrete, executable steps. Your goal is to: @@ -120,7 +122,7 @@ def __init__(self, input_query_stream=input_query_stream, system_query=system_query, max_output_tokens_per_request=1000, - response_model=PlanningAgentResponse + response_model=PlanningAgentResponse, ) logger.info("Planning agent initialized") @@ -130,34 +132,35 @@ def __init__(self, if use_terminal: # Start terminal interface in a separate thread logger.info("Starting terminal interface in a separate thread") - terminal_thread = threading.Thread(target=self.start_terminal_interface, daemon=True) + terminal_thread = threading.Thread( + target=self.start_terminal_interface, daemon=True + ) terminal_thread.start() - + def _handle_response(self, response) -> None: """Handle the agent's response and update state. - + Args: response: ParsedChatCompletionMessage containing PlanningAgentResponse """ print("handle response", response) print("handle response type", type(response)) - + # Extract the PlanningAgentResponse from parsed field if available - planning_response = response.parsed if hasattr(response, 'parsed') else response + planning_response = response.parsed if hasattr(response, "parsed") else response print("planning response", planning_response) print("planning response type", type(planning_response)) # Convert to dict for storage in conversation history response_dict = planning_response.model_dump() self.conversation_history.append(response_dict) - + # If it's a plan, update current plan if planning_response.type == "plan": logger.info(f"Updating current plan: {planning_response.content}") self.current_plan = planning_response.content - + # Store latest response self.latest_response = response_dict - def _stream_plan(self) -> None: """Stream each step of the confirmed plan.""" @@ -173,18 +176,18 @@ def _stream_plan(self) -> None: logger.debug(f"Successfully emitted step {i} to response_subject") except Exception as e: logger.error(f"Error emitting step {i}: {e}") - + logger.info("Plan streaming completed") self.response_subject.on_completed() - + def _send_query(self, messages: list) -> PlanningAgentResponse: """Send query to OpenAI and parse the response. - + Extends OpenAIAgent's _send_query to handle planning-specific response formats. - + Args: messages: List of message dictionaries - + Returns: PlanningAgentResponse: Validated response with type, content, and needs_confirmation """ @@ -193,20 +196,18 @@ def _send_query(self, messages: list) -> PlanningAgentResponse: except Exception as e: logger.error(f"Caught exception in _send_query: {str(e)}") return PlanningAgentResponse( - type="dialogue", - content=f"Error: {str(e)}", - needs_confirmation=False + type="dialogue", content=f"Error: {str(e)}", needs_confirmation=False ) def process_user_input(self, user_input: str) -> None: """Process user input and generate appropriate response. - + Args: user_input: The user's message """ if not user_input: return - + # Check for plan confirmation if self.current_plan and user_input.lower() in ["yes", "y", "confirm"]: logger.info("Plan confirmation received") @@ -215,23 +216,25 @@ def process_user_input(self, user_input: str) -> None: confirmation_msg = PlanningAgentResponse( type="dialogue", content="Plan confirmed! Streaming steps to execution...", - needs_confirmation=False + needs_confirmation=False, ) self._handle_response(confirmation_msg) self._stream_plan() return - + # Build messages for OpenAI with conversation history messages = [ - {"role": "system", "content": self.system_query} # Using system_query from OpenAIAgent + { + "role": "system", + "content": self.system_query, + } # Using system_query from OpenAIAgent ] - + # Add the new user input to conversation history - self.conversation_history.append({ - "type": "user_message", - "content": user_input - }) - + self.conversation_history.append( + {"type": "user_message", "content": user_input} + ) + # Add complete conversation history including both user and assistant messages for msg in self.conversation_history: if msg["type"] == "user_message": @@ -239,9 +242,11 @@ def process_user_input(self, user_input: str) -> None: elif msg["type"] == "dialogue": messages.append({"role": "assistant", "content": msg["content"]}) elif msg["type"] == "plan": - plan_text = "Here's my proposed plan:\n" + "\n".join(f"{i+1}. {step}" for i, step in enumerate(msg["content"])) + plan_text = "Here's my proposed plan:\n" + "\n".join( + f"{i + 1}. {step}" for i, step in enumerate(msg["content"]) + ) messages.append({"role": "assistant", "content": plan_text}) - + # Get and handle response response = self._send_query(messages) self._handle_response(response) @@ -249,23 +254,25 @@ def process_user_input(self, user_input: str) -> None: def start_terminal_interface(self): """Start the terminal interface for input/output.""" - time.sleep(5) # buffer time for clean terminal interface printing + time.sleep(5) # buffer time for clean terminal interface printing print("=" * 50) print("\nDimOS Action PlanningAgent\n") print("I have access to your Robot() and Robot Skills()") - print("Describe your task and I'll break it down into steps using your skills as a reference.") + print( + "Describe your task and I'll break it down into steps using your skills as a reference." + ) print("Once you're happy with the plan, type 'yes' to execute it.") print("Type 'quit' to exit.\n") - + while True: try: print("=" * 50) user_input = input("USER > ") - if user_input.lower() in ['quit', 'exit']: + if user_input.lower() in ["quit", "exit"]: break - + self.process_user_input(user_input) - + # Display response if self.latest_response["type"] == "dialogue": print(f"\nPlanner: {self.latest_response['content']}") @@ -275,28 +282,29 @@ def start_terminal_interface(self): print(f"{i}. {step}") if self.latest_response["needs_confirmation"]: print("\nDoes this plan look good? (yes/no)") - + if self.plan_confirmed: print("\nPlan confirmed! Streaming steps to execution...") break - + except KeyboardInterrupt: print("\nStopping...") break except Exception as e: print(f"\nError: {e}") break - + def get_response_observable(self) -> Observable: """Gets an observable that emits responses from this agent. This method processes the response stream from the parent class, extracting content from `PlanningAgentResponse` objects and flattening any lists of plan steps for emission. - + Returns: Observable: An observable that emits plan steps from the agent. """ + def extract_content(response) -> List[str]: if isinstance(response, PlanningAgentResponse): if response.type == "plan": @@ -312,5 +320,5 @@ def extract_content(response) -> List[str]: # Process the stream: extract content and flatten plan lists return base_observable.pipe( ops.map(extract_content), - ops.flat_map(lambda items: items) # Flatten the list of items + ops.flat_map(lambda items: items), # Flatten the list of items ) diff --git a/dimos/agents/prompt_builder/impl.py b/dimos/agents/prompt_builder/impl.py index f1ddf5681f..854f114eaf 100644 --- a/dimos/agents/prompt_builder/impl.py +++ b/dimos/agents/prompt_builder/impl.py @@ -21,8 +21,8 @@ # TODO: Make class more generic when implementing other tokenizers. Presently its OpenAI specific. # TODO: Build out testing and logging -class PromptBuilder(): +class PromptBuilder: DEFAULT_SYSTEM_PROMPT = dedent(""" You are an AI assistant capable of understanding and analyzing both visual and textual information. Your task is to provide accurate and insightful responses based on the data provided to you. @@ -37,8 +37,13 @@ class PromptBuilder(): - If the information is insufficient to provide a complete answer, acknowledge the limitation. - Maintain a professional and informative tone in your response. """) - - def __init__(self, model_name='gpt-4o', max_tokens=128000, tokenizer: Optional[AbstractTokenizer] = None): + + def __init__( + self, + model_name="gpt-4o", + max_tokens=128000, + tokenizer: Optional[AbstractTokenizer] = None, + ): """ Initialize the prompt builder. Args: @@ -48,8 +53,10 @@ def __init__(self, model_name='gpt-4o', max_tokens=128000, tokenizer: Optional[A """ self.model_name = model_name self.max_tokens = max_tokens - self.tokenizer: AbstractTokenizer = tokenizer or OpenAITokenizer(model_name=self.model_name) - + self.tokenizer: AbstractTokenizer = tokenizer or OpenAITokenizer( + model_name=self.model_name + ) + def truncate_tokens(self, text, max_tokens, strategy): """ Truncate text to fit within max_tokens using a specified strategy. @@ -78,7 +85,7 @@ def truncate_tokens(self, text, max_tokens, strategy): raise ValueError(f"Unknown truncation strategy: {strategy}") return self.tokenizer.detokenize_text(truncated) - + def build( self, system_prompt=None, @@ -138,7 +145,7 @@ def build( system_prompt = self.DEFAULT_SYSTEM_PROMPT rag_context = rag_context or "" - + # Debug: # print("system_prompt: ", system_prompt) # print("rag_context: ", rag_context) @@ -148,7 +155,13 @@ def build( rag_token_cnt = self.tokenizer.token_count(rag_context) system_prompt_token_cnt = self.tokenizer.token_count(system_prompt) user_query_token_cnt = self.tokenizer.token_count(user_query) - image_token_cnt = self.tokenizer.image_token_count(image_width, image_height, image_detail) if base64_image else 0 + image_token_cnt = ( + self.tokenizer.image_token_count( + image_width, image_height, image_detail + ) + if base64_image + else 0 + ) else: rag_token_cnt = 0 system_prompt_token_cnt = 0 @@ -177,7 +190,9 @@ def build( components[key]["text"] = self.truncate_tokens( component["text"], max_allowed, policies[key] ) - tokens_after = self.tokenizer.token_count(components[key]["text"]) + tokens_after = self.tokenizer.token_count( + components[key]["text"] + ) excess_tokens -= component["tokens"] - tokens_after component["tokens"] = tokens_after @@ -185,18 +200,25 @@ def build( messages = [{"role": "system", "content": components["system_prompt"]["text"]}] if components["rag"]["text"]: - user_content = [{"type": "text", "text": f"{components['rag']['text']}\n\n{components['user_query']['text']}"}] + user_content = [ + { + "type": "text", + "text": f"{components['rag']['text']}\n\n{components['user_query']['text']}", + } + ] else: user_content = [{"type": "text", "text": components["user_query"]["text"]}] if base64_image: - user_content.append({ - "type": "image_url", - "image_url": { - "url": f"data:image/jpeg;base64,{base64_image}", - "detail": image_detail, - }, - }) + user_content.append( + { + "type": "image_url", + "image_url": { + "url": f"data:image/jpeg;base64,{base64_image}", + "detail": image_detail, + }, + } + ) messages.append({"role": "user", "content": user_content}) # Debug: diff --git a/dimos/agents/tokenizer/base.py b/dimos/agents/tokenizer/base.py index 8097bdd685..b7e96de71f 100644 --- a/dimos/agents/tokenizer/base.py +++ b/dimos/agents/tokenizer/base.py @@ -13,8 +13,6 @@ # limitations under the License. from abc import ABC, abstractmethod -import tiktoken -from dimos.utils.logging_config import setup_logger # TODO: Add a class for specific tokenizer exceptions # TODO: Build out testing and logging @@ -22,7 +20,6 @@ class AbstractTokenizer(ABC): - @abstractmethod def tokenize_text(self, text): pass diff --git a/dimos/agents/tokenizer/huggingface_tokenizer.py b/dimos/agents/tokenizer/huggingface_tokenizer.py index e06a2520da..04ab3d87c2 100644 --- a/dimos/agents/tokenizer/huggingface_tokenizer.py +++ b/dimos/agents/tokenizer/huggingface_tokenizer.py @@ -16,8 +16,8 @@ from dimos.agents.tokenizer.base import AbstractTokenizer from dimos.utils.logging_config import setup_logger -class HuggingFaceTokenizer(AbstractTokenizer): +class HuggingFaceTokenizer(AbstractTokenizer): def __init__(self, model_name: str = "Qwen/Qwen2.5-0.5B", **kwargs): super().__init__(**kwargs) @@ -57,14 +57,14 @@ def image_token_count(image_width, image_height, image_detail="high"): Calculate the number of tokens in an image. Low detail is 85 tokens, high detail is 170 tokens per 512x512 square. """ logger = setup_logger( - "dimos.agents.tokenizer.HuggingFaceTokenizer.image_token_count") + "dimos.agents.tokenizer.HuggingFaceTokenizer.image_token_count" + ) if image_detail == "low": return 85 elif image_detail == "high": # Image dimensions - logger.debug( - f"Image Width: {image_width}, Image Height: {image_height}") + logger.debug(f"Image Width: {image_width}, Image Height: {image_height}") if image_width is None or image_height is None: raise ValueError( "Image width and height must be provided for high detail image token count calculation." @@ -87,5 +87,4 @@ def image_token_count(image_width, image_height, image_detail="high"): num_squares = (image_width // 512) * (image_height // 512) return 170 * num_squares + 85 else: - raise ValueError( - "Detail specification of image is not 'low' or 'high'") \ No newline at end of file + raise ValueError("Detail specification of image is not 'low' or 'high'") diff --git a/dimos/agents/tokenizer/openai_tokenizer.py b/dimos/agents/tokenizer/openai_tokenizer.py index b410e13aa6..7517ae5e72 100644 --- a/dimos/agents/tokenizer/openai_tokenizer.py +++ b/dimos/agents/tokenizer/openai_tokenizer.py @@ -16,8 +16,8 @@ from dimos.agents.tokenizer.base import AbstractTokenizer from dimos.utils.logging_config import setup_logger -class OpenAITokenizer(AbstractTokenizer): +class OpenAITokenizer(AbstractTokenizer): def __init__(self, model_name: str = "gpt-4o", **kwargs): super().__init__(**kwargs) @@ -56,15 +56,13 @@ def image_token_count(image_width, image_height, image_detail="high"): """ Calculate the number of tokens in an image. Low detail is 85 tokens, high detail is 170 tokens per 512x512 square. """ - logger = setup_logger( - "dimos.agents.tokenizer.openai.image_token_count") + logger = setup_logger("dimos.agents.tokenizer.openai.image_token_count") if image_detail == "low": return 85 elif image_detail == "high": # Image dimensions - logger.debug( - f"Image Width: {image_width}, Image Height: {image_height}") + logger.debug(f"Image Width: {image_width}, Image Height: {image_height}") if image_width is None or image_height is None: raise ValueError( "Image width and height must be provided for high detail image token count calculation." @@ -87,7 +85,4 @@ def image_token_count(image_width, image_height, image_detail="high"): num_squares = (image_width // 512) * (image_height // 512) return 170 * num_squares + 85 else: - raise ValueError( - "Detail specification of image is not 'low' or 'high'") - - + raise ValueError("Detail specification of image is not 'low' or 'high'") diff --git a/dimos/data/data_pipeline.py b/dimos/data/data_pipeline.py index d828bdc00b..a5c9c263d6 100644 --- a/dimos/data/data_pipeline.py +++ b/dimos/data/data_pipeline.py @@ -16,7 +16,6 @@ from dimos.stream.videostream import VideoStream import warnings -from concurrent.futures import ProcessPoolExecutor, as_completed from collections import deque from dimos.types.depth_map import DepthMapType from dimos.types.label import LabelType @@ -24,13 +23,17 @@ from dimos.types.segmentation import SegmentationType import os + class DataPipeline: - def __init__(self, video_stream: VideoStream, - run_depth: bool = False, - run_labels: bool = False, - run_pointclouds: bool = False, - run_segmentations: bool = False, - max_workers: int = 4): + def __init__( + self, + video_stream: VideoStream, + run_depth: bool = False, + run_labels: bool = False, + run_pointclouds: bool = False, + run_segmentations: bool = False, + max_workers: int = 4, + ): self.video_stream = video_stream self.run_depth = run_depth self.run_labels = run_labels @@ -53,20 +56,32 @@ def __init__(self, video_stream: VideoStream, def _validate_pipeline(self): """Validate the pipeline configuration based on dependencies.""" if self.run_pointclouds and not self.run_depth: - raise ValueError("PointClouds generation requires Depth maps. " - "Enable run_depth=True to use run_pointclouds=True.") + raise ValueError( + "PointClouds generation requires Depth maps. Enable run_depth=True to use run_pointclouds=True." + ) if self.run_segmentations and not self.run_labels: - raise ValueError("Segmentations generation requires Labels. " - "Enable run_labels=True to use run_segmentations=True.") - - if not any([self.run_depth, self.run_labels, self.run_pointclouds, self.run_segmentations]): - warnings.warn("No pipeline layers selected to run. The DataPipeline will be initialized without any processing.") + raise ValueError( + "Segmentations generation requires Labels. Enable run_labels=True to use run_segmentations=True." + ) + + if not any( + [ + self.run_depth, + self.run_labels, + self.run_pointclouds, + self.run_segmentations, + ] + ): + warnings.warn( + "No pipeline layers selected to run. The DataPipeline will be initialized without any processing." + ) def _initialize_pipeline(self): """Initialize necessary components based on selected pipeline layers.""" if self.run_depth: from .depth import DepthProcessor + self.depth_processor = DepthProcessor(debug=True) print("Depth map generation enabled.") else: @@ -74,6 +89,7 @@ def _initialize_pipeline(self): if self.run_labels: from .labels import LabelProcessor + self.labels_processor = LabelProcessor(debug=True) print("Label generation enabled.") else: @@ -81,6 +97,7 @@ def _initialize_pipeline(self): if self.run_pointclouds: from .pointcloud import PointCloudProcessor + self.pointcloud_processor = PointCloudProcessor(debug=True) print("PointCloud generation enabled.") else: @@ -88,6 +105,7 @@ def _initialize_pipeline(self): if self.run_segmentations: from .segment import SegmentProcessor + self.segmentation_processor = SegmentProcessor(debug=True) print("Segmentation generation enabled.") else: @@ -124,11 +142,23 @@ def _process_frame(self, frame): if self.run_labels: label = self.labels_processor.caption_image_data(frame) - if self.run_pointclouds and isinstance(depth_map, DepthMapType) and self.pointcloud_processor: - pointcloud = self.pointcloud_processor.process_frame(frame, depth_map.depth_data) - - if self.run_segmentations and isinstance(label, LabelType) and self.segmentation_processor: - segmentation = self.segmentation_processor.process_frame(frame, label.labels) + if ( + self.run_pointclouds + and isinstance(depth_map, DepthMapType) + and self.pointcloud_processor + ): + pointcloud = self.pointcloud_processor.process_frame( + frame, depth_map.depth_data + ) + + if ( + self.run_segmentations + and isinstance(label, LabelType) + and self.segmentation_processor + ): + segmentation = self.segmentation_processor.process_frame( + frame, label.labels + ) return depth_map, label, pointcloud, segmentation diff --git a/dimos/data/depth.py b/dimos/data/depth.py index 76e60bebb8..84eec78b1f 100644 --- a/dimos/data/depth.py +++ b/dimos/data/depth.py @@ -13,25 +13,14 @@ # limitations under the License. from dimos.models.depth.metric3d import Metric3D -import os -import pickle -import argparse -import pandas as pd from PIL import Image -from io import BytesIO import torch -import sys import cv2 -import tarfile import logging -import time -import tempfile -import gc -import io -import csv import numpy as np from dimos.types.depth_map import DepthMapType + class DepthProcessor: def __init__(self, debug=False): self.debug = debug @@ -47,14 +36,13 @@ def __init__(self, debug=False): print("Running in debug mode") self.logger.info("Running in debug mode") - def process(self, frame: Image.Image, intrinsics=None): """Process a frame to generate a depth map. - + Args: frame: PIL Image to process intrinsics: Optional camera intrinsics parameters - + Returns: DepthMapType containing the depth map """ @@ -65,11 +53,13 @@ def process(self, frame: Image.Image, intrinsics=None): # Convert frame to numpy array suitable for processing if isinstance(frame, Image.Image): - image = frame.convert('RGB') + image = frame.convert("RGB") elif isinstance(frame, np.ndarray): image = Image.fromarray(cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)) else: - raise ValueError("Unsupported frame format. Must be PIL Image or numpy array.") + raise ValueError( + "Unsupported frame format. Must be PIL Image or numpy array." + ) image_np = cv2.cvtColor(np.array(image), cv2.COLOR_RGB2BGR) image_np = resize_image_for_vit(image_np) @@ -85,7 +75,7 @@ def process(self, frame: Image.Image, intrinsics=None): if is_depth_map_valid(np.array(depth_map)): self.valid_depth_count += 1 else: - self.logger.error(f"Invalid depth map for the provided frame.") + self.logger.error("Invalid depth map for the provided frame.") print("Invalid depth map for the provided frame.") return None @@ -93,8 +83,10 @@ def process(self, frame: Image.Image, intrinsics=None): # Save depth map locally or to S3 as needed pass # Implement saving logic if required - return DepthMapType(depth_data=depth_map, metadata={"intrinsics": intrinsics}) + return DepthMapType( + depth_data=depth_map, metadata={"intrinsics": intrinsics} + ) except Exception as e: self.logger.error(f"Error processing frame: {e}") - return None \ No newline at end of file + return None diff --git a/dimos/data/labels.py b/dimos/data/labels.py index fe8d9107b8..662af56f34 100644 --- a/dimos/data/labels.py +++ b/dimos/data/labels.py @@ -13,10 +13,9 @@ # limitations under the License. import os -from dimos.models.labels.llava_34b import Llava -from PIL import Image from dimos.types.label import LabelType + class LabelProcessor: def __init__(self, debug: bool = False): self.model = None @@ -26,7 +25,12 @@ def __init__(self, debug: bool = False): def _initialize_model(self): if self.model is None: from dimos.models.labels.llava_34b import Llava - self.model = Llava(mmproj=f"{os.getcwd()}/models/mmproj-model-f16.gguf", model_path=f"{os.getcwd()}/models/llava-v1.6-34b.Q4_K_M.gguf", gpu=True) + + self.model = Llava( + mmproj=f"{os.getcwd()}/models/mmproj-model-f16.gguf", + model_path=f"{os.getcwd()}/models/llava-v1.6-34b.Q4_K_M.gguf", + gpu=True, + ) if self.debug: print("Llava model initialized.") @@ -39,4 +43,4 @@ def caption_image_data(self, frame): return LabelType(labels=output, metadata={"frame_id": frame.id}) except Exception as e: print(f"Error in captioning image: {e}") - return LabelType(labels={}, metadata={"error": str(e)}) \ No newline at end of file + return LabelType(labels={}, metadata={"error": str(e)}) diff --git a/dimos/data/pointcloud.py b/dimos/data/pointcloud.py index 8d16a62590..2564df99ef 100644 --- a/dimos/data/pointcloud.py +++ b/dimos/data/pointcloud.py @@ -16,14 +16,13 @@ import cv2 import numpy as np import open3d as o3d -from pathlib import Path from PIL import Image import logging from dimos.models.segmentation.segment_utils import apply_mask_to_image from dimos.models.pointcloud.pointcloud_utils import ( create_point_cloud_from_rgbd, - canonicalize_point_cloud + canonicalize_point_cloud, ) from dimos.types.pointcloud import PointCloudType @@ -48,14 +47,18 @@ def __init__(self, output_dir, intrinsic_parameters=None): # Default intrinsic parameters self.default_intrinsic_parameters = { - 'width': 640, - 'height': 480, - 'fx': 960.0, - 'fy': 960.0, - 'cx': 320.0, - 'cy': 240.0, + "width": 640, + "height": 480, + "fx": 960.0, + "fy": 960.0, + "cx": 320.0, + "cy": 240.0, } - self.intrinsic_parameters = intrinsic_parameters if intrinsic_parameters else self.default_intrinsic_parameters + self.intrinsic_parameters = ( + intrinsic_parameters + if intrinsic_parameters + else self.default_intrinsic_parameters + ) def process_frame(self, image, depth_map, masks): """ @@ -71,34 +74,46 @@ def process_frame(self, image, depth_map, masks): bool: A flag indicating if the point clouds were canonicalized. """ try: - self.logger.info("STARTING POINT CLOUD PROCESSING ---------------------------------------") + self.logger.info( + "STARTING POINT CLOUD PROCESSING ---------------------------------------" + ) # Convert images to OpenCV format if they are PIL Images if isinstance(image, Image.Image): - original_image_cv = cv2.cvtColor(np.array(image.convert('RGB')), cv2.COLOR_RGB2BGR) + original_image_cv = cv2.cvtColor( + np.array(image.convert("RGB")), cv2.COLOR_RGB2BGR + ) else: original_image_cv = image if isinstance(depth_map, Image.Image): - depth_image_cv = cv2.cvtColor(np.array(depth_map.convert('RGB')), cv2.COLOR_RGB2BGR) + depth_image_cv = cv2.cvtColor( + np.array(depth_map.convert("RGB")), cv2.COLOR_RGB2BGR + ) else: depth_image_cv = depth_map width, height = original_image_cv.shape[1], original_image_cv.shape[0] intrinsic_parameters = self.intrinsic_parameters.copy() - intrinsic_parameters.update({ - 'width': width, - 'height': height, - 'cx': width / 2, - 'cy': height / 2, - }) + intrinsic_parameters.update( + { + "width": width, + "height": height, + "cx": width / 2, + "cy": height / 2, + } + ) point_clouds = [] point_cloud_data = [] # Create original point cloud - original_pcd = create_point_cloud_from_rgbd(original_image_cv, depth_image_cv, intrinsic_parameters) - pcd, canonicalized, transformation = canonicalize_point_cloud(original_pcd, canonicalize_threshold=0.3) + original_pcd = create_point_cloud_from_rgbd( + original_image_cv, depth_image_cv, intrinsic_parameters + ) + pcd, canonicalized, transformation = canonicalize_point_cloud( + original_pcd, canonicalize_threshold=0.3 + ) for idx, mask in enumerate(masks): mask_binary = mask > 0 @@ -106,14 +121,20 @@ def process_frame(self, image, depth_map, masks): masked_rgb = apply_mask_to_image(original_image_cv, mask_binary) masked_depth = apply_mask_to_image(depth_image_cv, mask_binary) - pcd = create_point_cloud_from_rgbd(masked_rgb, masked_depth, intrinsic_parameters) + pcd = create_point_cloud_from_rgbd( + masked_rgb, masked_depth, intrinsic_parameters + ) # Remove outliers cl, ind = pcd.remove_statistical_outlier(nb_neighbors=20, std_ratio=2.0) inlier_cloud = pcd.select_by_index(ind) if canonicalized: inlier_cloud.transform(transformation) - point_clouds.append(PointCloudType(point_cloud=inlier_cloud, metadata={"mask_index": idx})) + point_clouds.append( + PointCloudType( + point_cloud=inlier_cloud, metadata={"mask_index": idx} + ) + ) # Save point cloud to file pointcloud_filename = f"pointcloud_{idx}.pcd" pointcloud_filepath = os.path.join(self.output_dir, pointcloud_filename) @@ -121,7 +142,9 @@ def process_frame(self, image, depth_map, masks): point_cloud_data.append(pointcloud_filepath) self.logger.info(f"Saved point cloud {pointcloud_filepath}") - self.logger.info("DONE POINT CLOUD PROCESSING ---------------------------------------") + self.logger.info( + "DONE POINT CLOUD PROCESSING ---------------------------------------" + ) return point_clouds, canonicalized except Exception as e: self.logger.error(f"Error processing frame: {e}") diff --git a/dimos/data/segment.py b/dimos/data/segment.py index 8a830520a4..82fe44ab91 100644 --- a/dimos/data/segment.py +++ b/dimos/data/segment.py @@ -26,7 +26,7 @@ class SegmentProcessor: - def __init__(self, device='cuda'): + def __init__(self, device="cuda"): # Initialize CLIPSeg and SAM models self.clipseg = CLIPSeg(model_name="CIDAS/clipseg-rd64-refined", device=device) self.sam = SAM(model_name="facebook/sam-vit-huge", device=device) @@ -44,7 +44,9 @@ def process_frame(self, image, captions): list of np.ndarray: A list of segmentation masks corresponding to the captions. """ try: - self.logger.info("STARTING PROCESSING IMAGE ---------------------------------------") + self.logger.info( + "STARTING PROCESSING IMAGE ---------------------------------------" + ) self.logger.info(f"Processing image with captions: {captions}") # Convert image to PIL.Image if it's a numpy array @@ -58,7 +60,9 @@ def process_frame(self, image, captions): original_size = image.size # (width, height) for idx in range(preds.shape[0]): - points = sample_points_from_heatmap(preds[idx][0], original_size, num_points=10) + points = sample_points_from_heatmap( + preds[idx][0], original_size, num_points=10 + ) if points: sampled_points.append(points) else: @@ -67,20 +71,34 @@ def process_frame(self, image, captions): for idx in range(preds.shape[0]): if sampled_points[idx]: - mask_tensor = self.sam.run_inference_from_points(image, [sampled_points[idx]]) + mask_tensor = self.sam.run_inference_from_points( + image, [sampled_points[idx]] + ) if mask_tensor: # Convert mask tensor to a numpy array mask = (255 * mask_tensor[0].numpy().squeeze()).astype(np.uint8) sam_masks.append(mask) else: - self.logger.info(f"No mask tensor returned for sampled points at index {idx}") - sam_masks.append(np.zeros((original_size[1], original_size[0]), dtype=np.uint8)) + self.logger.info( + f"No mask tensor returned for sampled points at index {idx}" + ) + sam_masks.append( + np.zeros( + (original_size[1], original_size[0]), dtype=np.uint8 + ) + ) else: - self.logger.info(f"No sampled points for prediction index {idx}, skipping mask inference") - sam_masks.append(np.zeros((original_size[1], original_size[0]), dtype=np.uint8)) + self.logger.info( + f"No sampled points for prediction index {idx}, skipping mask inference" + ) + sam_masks.append( + np.zeros((original_size[1], original_size[0]), dtype=np.uint8) + ) - self.logger.info("DONE PROCESSING IMAGE ---------------------------------------") + self.logger.info( + "DONE PROCESSING IMAGE ---------------------------------------" + ) return sam_masks except Exception as e: self.logger.error(f"Error processing image: {e}") - return [] \ No newline at end of file + return [] diff --git a/dimos/environment/agent_environment.py b/dimos/environment/agent_environment.py index 76209f5c76..5ff6b712e5 100644 --- a/dimos/environment/agent_environment.py +++ b/dimos/environment/agent_environment.py @@ -18,6 +18,7 @@ from typing import List, Union from .environment import Environment + class AgentEnvironment(Environment): def __init__(self): super().__init__() @@ -28,7 +29,9 @@ def __init__(self): self._segmentations = [] self._point_clouds = [] - def initialize_from_images(self, images: Union[List[str], List[np.ndarray]]) -> bool: + def initialize_from_images( + self, images: Union[List[str], List[np.ndarray]] + ) -> bool: """Initialize environment from a list of image paths or numpy arrays. Args: @@ -69,13 +72,13 @@ def initialize_from_file(self, file_path: str) -> bool: cap = cv2.VideoCapture(file_path) self.frames = [] - + while cap.isOpened(): ret, frame = cap.read() if not ret: break self.frames.append(frame) - + cap.release() return len(self.frames) > 0 except Exception as e: @@ -92,8 +95,9 @@ def label_objects(self) -> List[str]: # TODO: Implement object labeling using a detection model raise NotImplementedError("Object labeling not yet implemented") - - def generate_segmentations(self, model: str = None, objects: List[str] = None, *args, **kwargs) -> List[np.ndarray]: + def generate_segmentations( + self, model: str = None, objects: List[str] = None, *args, **kwargs + ) -> List[np.ndarray]: """Generate segmentations for the current frame.""" # TODO: Implement segmentation generation using specified model raise NotImplementedError("Segmentation generation not yet implemented") @@ -115,7 +119,14 @@ def get_point_cloud(self, object: str = None) -> np.ndarray: return self._point_clouds[self.current_frame_idx] return np.array([]) - def generate_depth_map(self, stereo: bool = None, monocular: bool = None, model: str = None, *args, **kwargs) -> np.ndarray: + def generate_depth_map( + self, + stereo: bool = None, + monocular: bool = None, + model: str = None, + *args, + **kwargs, + ) -> np.ndarray: """Generate depth map for the current frame.""" # TODO: Implement depth map generation using specified method raise NotImplementedError("Depth map generation not yet implemented") diff --git a/dimos/environment/colmap_environment.py b/dimos/environment/colmap_environment.py index 1e22d6290b..9981e50098 100644 --- a/dimos/environment/colmap_environment.py +++ b/dimos/environment/colmap_environment.py @@ -19,6 +19,7 @@ from pathlib import Path from dimos.environment.environment import Environment + class COLMAPEnvironment(Environment): def initialize_from_images(self, image_dir): """Initialize the environment from a set of image frames or video.""" diff --git a/dimos/environment/environment.py b/dimos/environment/environment.py index a2d48b3b6d..fbb20e9b1c 100644 --- a/dimos/environment/environment.py +++ b/dimos/environment/environment.py @@ -15,6 +15,7 @@ from abc import ABC, abstractmethod import numpy as np + class Environment(ABC): def __init__(self): self.environment_type = None @@ -24,7 +25,7 @@ def __init__(self): def label_objects(self) -> list[str]: """ Label all objects in the environment. - + Returns: A list of string labels representing the objects in the environment. """ @@ -34,9 +35,11 @@ def label_objects(self) -> list[str]: def get_visualization(self, format_type): """Return different visualization formats like images, NERFs, or other 3D file types.""" pass - + @abstractmethod - def generate_segmentations(self, model: str = None, objects: list[str] = None, *args, **kwargs) -> list[np.ndarray]: + def generate_segmentations( + self, model: str = None, objects: list[str] = None, *args, **kwargs + ) -> list[np.ndarray]: """ Generate object segmentations of objects[] using neural methods. @@ -66,7 +69,6 @@ def get_segmentations(self) -> list[np.ndarray]: """ pass - @abstractmethod def generate_point_cloud(self, object: str = None, *args, **kwargs) -> np.ndarray: """ @@ -102,7 +104,14 @@ def get_point_cloud(self, object: str = None) -> np.ndarray: pass @abstractmethod - def generate_depth_map(self, stereo: bool = None, monocular: bool = None, model: str = None, *args, **kwargs) -> np.ndarray: + def generate_depth_map( + self, + stereo: bool = None, + monocular: bool = None, + model: str = None, + *args, + **kwargs, + ) -> np.ndarray: """ Generate a depth map using monocular or stereo camera methods. @@ -142,7 +151,9 @@ def get_depth_map(self) -> np.ndarray: def initialize_from_images(self, images): """Initialize the environment from a set of image frames or video.""" - raise NotImplementedError("This method is not implemented for this environment type.") + raise NotImplementedError( + "This method is not implemented for this environment type." + ) def initialize_from_file(self, file_path): """Initialize the environment from a spatial file type. @@ -165,6 +176,6 @@ def initialize_from_file(self, file_path): Raises: NotImplementedError: If the method is not implemented for this environment type. """ - raise NotImplementedError("This method is not implemented for this environment type.") - - + raise NotImplementedError( + "This method is not implemented for this environment type." + ) diff --git a/dimos/exceptions/agent_memory_exceptions.py b/dimos/exceptions/agent_memory_exceptions.py index 9b2ba35b2c..a75488dfad 100644 --- a/dimos/exceptions/agent_memory_exceptions.py +++ b/dimos/exceptions/agent_memory_exceptions.py @@ -14,26 +14,30 @@ import traceback + class AgentMemoryError(Exception): """ Base class for all exceptions raised by AgentMemory operations. All custom exceptions related to AgentMemory should inherit from this class. - + Args: message (str): Human-readable message describing the error. """ + def __init__(self, message="Error in AgentMemory operation"): super().__init__(message) + class AgentMemoryConnectionError(AgentMemoryError): """ Exception raised for errors attempting to connect to the database. This includes failures due to network issues, authentication errors, or incorrect connection parameters. - + Args: message (str): Human-readable message describing the error. cause (Exception, optional): Original exception, if any, that led to this error. """ + def __init__(self, message="Failed to connect to the database", cause=None): super().__init__(message) if cause: @@ -41,38 +45,50 @@ def __init__(self, message="Failed to connect to the database", cause=None): self.traceback = traceback.format_exc() if cause else None def __str__(self): - return f"{self.message}\nCaused by: {repr(self.cause)}" if self.cause else self.message + return ( + f"{self.message}\nCaused by: {repr(self.cause)}" + if self.cause + else self.message + ) + class UnknownConnectionTypeError(AgentMemoryConnectionError): """ Exception raised when an unknown or unsupported connection type is specified during AgentMemory setup. - + Args: message (str): Human-readable message explaining that an unknown connection type was used. """ - def __init__(self, message="Unknown connection type used in AgentMemory connection"): + + def __init__( + self, message="Unknown connection type used in AgentMemory connection" + ): super().__init__(message) + class DataRetrievalError(AgentMemoryError): """ Exception raised for errors retrieving data from the database. This could occur due to query failures, timeouts, or corrupt data issues. - + Args: message (str): Human-readable message describing the data retrieval error. """ + def __init__(self, message="Error in retrieving data during AgentMemory operation"): super().__init__(message) + class DataNotFoundError(DataRetrievalError): """ Exception raised when the requested data is not found in the database. This is used when a query completes successfully but returns no result for the specified identifier. - + Args: vector_id (int or str): The identifier for the vector that was not found. message (str, optional): Human-readable message providing more detail. If not provided, a default message is generated. """ + def __init__(self, vector_id, message=None): message = message or f"Requested data for vector ID {vector_id} was not found." super().__init__(message) diff --git a/dimos/hardware/camera.py b/dimos/hardware/camera.py index 8793a5dd0a..fb1b2b5240 100644 --- a/dimos/hardware/camera.py +++ b/dimos/hardware/camera.py @@ -14,8 +14,11 @@ from dimos.hardware.sensor import AbstractSensor + class Camera(AbstractSensor): - def __init__(self, resolution=None, focal_length=None, sensor_size=None, sensor_type='Camera'): + def __init__( + self, resolution=None, focal_length=None, sensor_size=None, sensor_type="Camera" + ): super().__init__(sensor_type) self.resolution = resolution # (width, height) in pixels self.focal_length = focal_length # in millimeters @@ -26,7 +29,9 @@ def get_sensor_type(self): def calculate_intrinsics(self): if not self.resolution or not self.focal_length or not self.sensor_size: - raise ValueError("Resolution, focal length, and sensor size must be provided") + raise ValueError( + "Resolution, focal length, and sensor size must be provided" + ) # Calculate pixel size pixel_size_x = self.sensor_size[0] / self.resolution[0] @@ -41,10 +46,10 @@ def calculate_intrinsics(self): focal_length_y = self.focal_length / pixel_size_y return { - 'focal_length_x': focal_length_x, - 'focal_length_y': focal_length_y, - 'principal_point_x': principal_point_x, - 'principal_point_y': principal_point_y + "focal_length_x": focal_length_x, + "focal_length_y": focal_length_y, + "principal_point_x": principal_point_x, + "principal_point_y": principal_point_y, } def get_intrinsics(self): diff --git a/dimos/hardware/end_effector.py b/dimos/hardware/end_effector.py index fd2c130610..373408003d 100644 --- a/dimos/hardware/end_effector.py +++ b/dimos/hardware/end_effector.py @@ -12,6 +12,7 @@ # See the License for the specific language governing permissions and # limitations under the License. + class EndEffector: def __init__(self, effector_type=None): self.effector_type = effector_type diff --git a/dimos/hardware/interface.py b/dimos/hardware/interface.py index 6c26608995..f137a6d748 100644 --- a/dimos/hardware/interface.py +++ b/dimos/hardware/interface.py @@ -15,10 +15,16 @@ from dimos.hardware.end_effector import EndEffector from dimos.hardware.camera import Camera from dimos.hardware.stereo_camera import StereoCamera -from dimos.hardware.ufactory import UFactoryEndEffector, UFactory7DOFArm +from dimos.hardware.ufactory import UFactory7DOFArm + class HardwareInterface: - def __init__(self, end_effector: EndEffector = None, sensors: list = None, arm_architecture: UFactory7DOFArm = None): + def __init__( + self, + end_effector: EndEffector = None, + sensors: list = None, + arm_architecture: UFactory7DOFArm = None, + ): self.end_effector = end_effector self.sensors = sensors if sensors is not None else [] self.arm_architecture = arm_architecture @@ -26,16 +32,18 @@ def __init__(self, end_effector: EndEffector = None, sensors: list = None, arm_a def get_configuration(self): """Return the current hardware configuration.""" return { - 'end_effector': self.end_effector, - 'sensors': [sensor.get_sensor_type() for sensor in self.sensors], - 'arm_architecture': self.arm_architecture + "end_effector": self.end_effector, + "sensors": [sensor.get_sensor_type() for sensor in self.sensors], + "arm_architecture": self.arm_architecture, } def set_configuration(self, configuration): """Set the hardware configuration.""" - self.end_effector = configuration.get('end_effector', self.end_effector) - self.sensors = configuration.get('sensors', self.sensors) - self.arm_architecture = configuration.get('arm_architecture', self.arm_architecture) + self.end_effector = configuration.get("end_effector", self.end_effector) + self.sensors = configuration.get("sensors", self.sensors) + self.arm_architecture = configuration.get( + "arm_architecture", self.arm_architecture + ) def add_sensor(self, sensor): """Add a sensor to the hardware interface.""" diff --git a/dimos/hardware/sensor.py b/dimos/hardware/sensor.py index ac5ff0ebaf..3dc7b3850e 100644 --- a/dimos/hardware/sensor.py +++ b/dimos/hardware/sensor.py @@ -14,6 +14,7 @@ from abc import ABC, abstractmethod + class AbstractSensor(ABC): def __init__(self, sensor_type=None): self.sensor_type = sensor_type diff --git a/dimos/hardware/stereo_camera.py b/dimos/hardware/stereo_camera.py index c81bc9ed18..4ffdc51811 100644 --- a/dimos/hardware/stereo_camera.py +++ b/dimos/hardware/stereo_camera.py @@ -14,6 +14,7 @@ from dimos.hardware.camera import Camera + class StereoCamera(Camera): def __init__(self, baseline=None, **kwargs): super().__init__(**kwargs) @@ -21,5 +22,5 @@ def __init__(self, baseline=None, **kwargs): def get_intrinsics(self): intrinsics = super().get_intrinsics() - intrinsics['baseline'] = self.baseline + intrinsics["baseline"] = self.baseline return intrinsics diff --git a/dimos/hardware/ufactory.py b/dimos/hardware/ufactory.py index cb81337a95..cf4e139ccb 100644 --- a/dimos/hardware/ufactory.py +++ b/dimos/hardware/ufactory.py @@ -14,6 +14,7 @@ from dimos.hardware.end_effector import EndEffector + class UFactoryEndEffector(EndEffector): def __init__(self, model=None, **kwargs): super().__init__(**kwargs) @@ -22,6 +23,7 @@ def __init__(self, model=None, **kwargs): def get_model(self): return self.model + class UFactory7DOFArm: def __init__(self, arm_length=None): self.arm_length = arm_length diff --git a/dimos/models/Detic/configs/BoxSup_ViLD_200e.py b/dimos/models/Detic/configs/BoxSup_ViLD_200e.py index eef46bc174..d81587b963 100644 --- a/dimos/models/Detic/configs/BoxSup_ViLD_200e.py +++ b/dimos/models/Detic/configs/BoxSup_ViLD_200e.py @@ -20,10 +20,10 @@ from detic.modeling.roi_heads.detic_roi_heads import DeticCascadeROIHeads from detic.modeling.roi_heads.detic_fast_rcnn import DeticFastRCNNOutputLayers -default_configs = get_config('new_baselines/mask_rcnn_R_50_FPN_100ep_LSJ.py') -dataloader = default_configs['dataloader'] -model = default_configs['model'] -train = default_configs['train'] +default_configs = get_config("new_baselines/mask_rcnn_R_50_FPN_100ep_LSJ.py") +dataloader = default_configs["dataloader"] +model = default_configs["model"] +train = default_configs["train"] [model.roi_heads.pop(k) for k in ["box_head", "box_predictor", "proposal_matcher"]] @@ -35,7 +35,7 @@ input_shape=ShapeSpec(channels=256, height=7, width=7), conv_dims=[256, 256, 256, 256], fc_dims=[1024], - conv_norm=lambda c: NaiveSyncBatchNorm(c, stats_mode="N") + conv_norm=lambda c: NaiveSyncBatchNorm(c, stats_mode="N"), ) for _ in range(1) ], @@ -50,14 +50,14 @@ cls_score=L(ZeroShotClassifier)( input_shape=ShapeSpec(channels=1024), num_classes=1203, - zs_weight_path='datasets/metadata/lvis_v1_clip_a+cname.npy', + zs_weight_path="datasets/metadata/lvis_v1_clip_a+cname.npy", norm_weight=True, # use_bias=-4.6, ), use_zeroshot_cls=True, use_sigmoid_ce=True, ignore_zero_cats=True, - cat_freq_path='datasets/lvis/lvis_v1_train_norare_cat_info.json' + cat_freq_path="datasets/lvis/lvis_v1_train_norare_cat_info.json", ) for (w1, w2) in [(10, 5)] ], @@ -68,10 +68,11 @@ ) model.roi_heads.mask_head.num_classes = 1 -dataloader.train.dataset.names="lvis_v1_train_norare" -dataloader.train.sampler=L(RepeatFactorTrainingSampler)( - repeat_factors=L(RepeatFactorTrainingSampler.repeat_factors_from_category_frequency)( - dataset_dicts="${dataloader.train.dataset}", repeat_thresh=0.001) +dataloader.train.dataset.names = "lvis_v1_train_norare" +dataloader.train.sampler = L(RepeatFactorTrainingSampler)( + repeat_factors=L( + RepeatFactorTrainingSampler.repeat_factors_from_category_frequency + )(dataset_dicts="${dataloader.train.dataset}", repeat_thresh=0.001) ) image_size = 896 dataloader.train.mapper.augmentations = [ @@ -81,9 +82,9 @@ L(T.FixedSizeCrop)(crop_size=(image_size, image_size)), L(T.RandomFlip)(horizontal=True), ] -dataloader.train.num_workers=32 +dataloader.train.num_workers = 32 -dataloader.test.dataset.names="lvis_v1_val" +dataloader.test.dataset.names = "lvis_v1_val" dataloader.evaluator = L(LVISEvaluator)( dataset_name="${..test.dataset.names}", ) @@ -100,12 +101,10 @@ ) optimizer = L(torch.optim.AdamW)( - params=L(get_default_optimizer_params)( - weight_decay_norm=0.0 - ), + params=L(get_default_optimizer_params)(weight_decay_norm=0.0), lr=0.0002 * num_nodes, weight_decay=1e-4, ) -train.checkpointer.period=20000 // num_nodes -train.output_dir='./output/Lazy/{}'.format(os.path.basename(__file__)[:-3]) \ No newline at end of file +train.checkpointer.period = 20000 // num_nodes +train.output_dir = "./output/Lazy/{}".format(os.path.basename(__file__)[:-3]) diff --git a/dimos/models/Detic/configs/Detic_ViLD_200e.py b/dimos/models/Detic/configs/Detic_ViLD_200e.py index 7a98e28b5d..c2378aa825 100644 --- a/dimos/models/Detic/configs/Detic_ViLD_200e.py +++ b/dimos/models/Detic/configs/Detic_ViLD_200e.py @@ -5,7 +5,6 @@ import detectron2.data.transforms as T from detectron2.config import LazyCall as L from detectron2.layers import ShapeSpec -from detectron2.data.samplers import RepeatFactorTrainingSampler from detectron2.evaluation.lvis_evaluation import LVISEvaluator from detectron2.layers.batch_norm import NaiveSyncBatchNorm from detectron2.solver import WarmupParamScheduler @@ -25,12 +24,12 @@ from detic.data.custom_dataset_dataloader import MultiDatasetSampler from detic.data.custom_dataset_dataloader import get_detection_dataset_dicts_with_source -default_configs = get_config('new_baselines/mask_rcnn_R_50_FPN_100ep_LSJ.py') -dataloader = default_configs['dataloader'] -model = default_configs['model'] -train = default_configs['train'] +default_configs = get_config("new_baselines/mask_rcnn_R_50_FPN_100ep_LSJ.py") +dataloader = default_configs["dataloader"] +model = default_configs["model"] +train = default_configs["train"] -train.init_checkpoint = 'models/BoxSup_ViLD_200e.pth' +train.init_checkpoint = "models/BoxSup_ViLD_200e.pth" [model.roi_heads.pop(k) for k in ["box_head", "box_predictor", "proposal_matcher"]] @@ -42,7 +41,7 @@ input_shape=ShapeSpec(channels=256, height=7, width=7), conv_dims=[256, 256, 256, 256], fc_dims=[1024], - conv_norm=lambda c: NaiveSyncBatchNorm(c, stats_mode="N") + conv_norm=lambda c: NaiveSyncBatchNorm(c, stats_mode="N"), ) for _ in range(1) ], @@ -57,15 +56,15 @@ cls_score=L(ZeroShotClassifier)( input_shape=ShapeSpec(channels=1024), num_classes=1203, - zs_weight_path='datasets/metadata/lvis_v1_clip_a+cname.npy', + zs_weight_path="datasets/metadata/lvis_v1_clip_a+cname.npy", norm_weight=True, # use_bias=-4.6, ), use_zeroshot_cls=True, use_sigmoid_ce=True, ignore_zero_cats=True, - cat_freq_path='datasets/lvis/lvis_v1_train_norare_cat_info.json', - image_label_loss='max_size', + cat_freq_path="datasets/lvis/lvis_v1_train_norare_cat_info.json", + image_label_loss="max_size", image_loss_weight=0.1, ) for (w1, w2) in [(10, 5)] @@ -90,35 +89,43 @@ image_size_weak = 448 dataloader.train = L(build_custom_train_loader)( dataset=L(get_detection_dataset_dicts_with_source)( - dataset_names=['lvis_v1_train_norare', 'imagenet_lvis_v1'], + dataset_names=["lvis_v1_train_norare", "imagenet_lvis_v1"], filter_empty=False, ), mapper=L(CustomDatasetMapper)( is_train=True, augmentations=[], with_ann_type=True, - dataset_ann=['box', 'image'], + dataset_ann=["box", "image"], use_diff_bs_size=True, - dataset_augs = [ - [L(T.ResizeScale)( - min_scale=0.1, max_scale=2.0, target_height=image_size, target_width=image_size + dataset_augs=[ + [ + 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)), L(T.RandomFlip)(horizontal=True), ], - [L(T.ResizeScale)( - min_scale=0.5, max_scale=1.5, target_height=image_size_weak, target_width=image_size_weak + [ + L(T.ResizeScale)( + min_scale=0.5, + max_scale=1.5, + target_height=image_size_weak, + target_width=image_size_weak, ), L(T.FixedSizeCrop)(crop_size=(image_size_weak, image_size_weak)), L(T.RandomFlip)(horizontal=True), - ] + ], ], image_format="BGR", use_instance_mask=True, ), sampler=L(MultiDatasetSampler)( dataset_dicts="${dataloader.train.dataset}", - dataset_ratio=[1,4], + dataset_ratio=[1, 4], use_rfs=[True, False], dataset_ann="${dataloader.train.mapper.dataset_ann}", repeat_threshold=0.001, @@ -131,7 +138,7 @@ num_workers=8, ) -dataloader.test.dataset.names="lvis_v1_val" +dataloader.test.dataset.names = "lvis_v1_val" dataloader.evaluator = L(LVISEvaluator)( dataset_name="${..test.dataset.names}", ) @@ -144,12 +151,10 @@ ) optimizer = L(torch.optim.AdamW)( - params=L(get_default_optimizer_params)( - weight_decay_norm=0.0 - ), + params=L(get_default_optimizer_params)(weight_decay_norm=0.0), lr=0.0002 * num_nodes, weight_decay=1e-4, ) -train.checkpointer.period=20000 // num_nodes -train.output_dir='./output/Lazy/{}'.format(os.path.basename(__file__)[:-3]) \ No newline at end of file +train.checkpointer.period = 20000 // num_nodes +train.output_dir = "./output/Lazy/{}".format(os.path.basename(__file__)[:-3]) diff --git a/dimos/models/Detic/demo.py b/dimos/models/Detic/demo.py index 9221af2dd6..b9aaa15a79 100755 --- a/dimos/models/Detic/demo.py +++ b/dimos/models/Detic/demo.py @@ -16,26 +16,33 @@ from detectron2.data.detection_utils import read_image from detectron2.utils.logger import setup_logger -sys.path.insert(0, 'third_party/CenterNet2/') +sys.path.insert(0, "third_party/CenterNet2/") from centernet.config import add_centernet_config from detic.config import add_detic_config from detic.predictor import VisualizationDemo + # Fake a video capture object OpenCV style - half width, half height of first screen using MSS class ScreenGrab: def __init__(self): self.sct = mss.mss() m0 = self.sct.monitors[0] - self.monitor = {'top': 0, 'left': 0, 'width': m0['width'] / 2, 'height': m0['height'] / 2} + self.monitor = { + "top": 0, + "left": 0, + "width": m0["width"] / 2, + "height": m0["height"] / 2, + } def read(self): - img = np.array(self.sct.grab(self.monitor)) + img = np.array(self.sct.grab(self.monitor)) nf = cv2.cvtColor(img, cv2.COLOR_BGRA2BGR) return (True, nf) def isOpened(self): return True + def release(self): return True @@ -43,10 +50,11 @@ def release(self): # constants WINDOW_NAME = "Detic" + def setup_cfg(args): cfg = get_cfg() if args.cpu: - cfg.MODEL.DEVICE="cpu" + cfg.MODEL.DEVICE = "cpu" add_centernet_config(cfg) add_detic_config(cfg) cfg.merge_from_file(args.config_file) @@ -54,8 +62,10 @@ def setup_cfg(args): # Set score_threshold for builtin models cfg.MODEL.RETINANET.SCORE_THRESH_TEST = args.confidence_threshold cfg.MODEL.ROI_HEADS.SCORE_THRESH_TEST = args.confidence_threshold - cfg.MODEL.PANOPTIC_FPN.COMBINE.INSTANCES_CONFIDENCE_THRESH = args.confidence_threshold - cfg.MODEL.ROI_BOX_HEAD.ZEROSHOT_WEIGHT_PATH = 'rand' # load later + cfg.MODEL.PANOPTIC_FPN.COMBINE.INSTANCES_CONFIDENCE_THRESH = ( + args.confidence_threshold + ) + cfg.MODEL.ROI_BOX_HEAD.ZEROSHOT_WEIGHT_PATH = "rand" # load later if not args.pred_all_class: cfg.MODEL.ROI_HEADS.ONE_CLASS_PER_PROPOSAL = True cfg.freeze() @@ -71,23 +81,21 @@ def get_parser(): help="path to config file", ) parser.add_argument("--webcam", help="Take inputs from webcam.") - parser.add_argument("--cpu", action='store_true', help="Use CPU only.") + parser.add_argument("--cpu", action="store_true", help="Use CPU only.") parser.add_argument("--video-input", help="Path to video file.") parser.add_argument( "--input", nargs="+", - help="A list of space separated input images; " - "or a single glob pattern such as 'directory/*.jpg'", + help="A list of space separated input images; or a single glob pattern such as 'directory/*.jpg'", ) parser.add_argument( "--output", - help="A file or directory to save output visualizations. " - "If not given, will show output in an OpenCV window.", + help="A file or directory to save output visualizations. If not given, will show output in an OpenCV window.", ) parser.add_argument( "--vocabulary", default="lvis", - choices=['lvis', 'openimages', 'objects365', 'coco', 'custom'], + choices=["lvis", "openimages", "objects365", "coco", "custom"], help="", ) parser.add_argument( @@ -95,7 +103,7 @@ def get_parser(): default="", help="", ) - parser.add_argument("--pred_all_class", action='store_true') + parser.add_argument("--pred_all_class", action="store_true") parser.add_argument( "--confidence-threshold", type=float, @@ -162,7 +170,9 @@ def test_opencv_video_format(codec, file_ext): assert os.path.isdir(args.output), args.output out_filename = os.path.join(args.output, os.path.basename(path)) else: - assert len(args.input) == 1, "Please specify a directory with args.output" + assert len(args.input) == 1, ( + "Please specify a directory with args.output" + ) out_filename = args.output visualized_output.save(out_filename) else: @@ -192,7 +202,9 @@ def test_opencv_video_format(codec, file_ext): num_frames = int(video.get(cv2.CAP_PROP_FRAME_COUNT)) basename = os.path.basename(args.video_input) codec, file_ext = ( - ("x264", ".mkv") if test_opencv_video_format("x264", ".mkv") else ("mp4v", ".mp4") + ("x264", ".mkv") + if test_opencv_video_format("x264", ".mkv") + else ("mp4v", ".mp4") ) if codec == ".mp4v": warnings.warn("x264 codec not available, switching to mp4v") diff --git a/dimos/models/Detic/detic/__init__.py b/dimos/models/Detic/detic/__init__.py index 8ffba6afd9..ecf772726e 100644 --- a/dimos/models/Detic/detic/__init__.py +++ b/dimos/models/Detic/detic/__init__.py @@ -16,4 +16,4 @@ try: from .modeling.meta_arch import d2_deformable_detr except: - pass \ No newline at end of file + pass diff --git a/dimos/models/Detic/detic/config.py b/dimos/models/Detic/detic/config.py index bbf6e58064..89ff5b552b 100644 --- a/dimos/models/Detic/detic/config.py +++ b/dimos/models/Detic/detic/config.py @@ -1,48 +1,58 @@ # Copyright (c) Facebook, Inc. and its affiliates. from detectron2.config import CfgNode as CN + def add_detic_config(cfg): _C = cfg - _C.WITH_IMAGE_LABELS = False # Turn on co-training with classification data + _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.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_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.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_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_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 + _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.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" + _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 @@ -55,43 +65,53 @@ def add_detic_config(cfg): # Backbones _C.MODEL.SWIN = CN() - _C.MODEL.SWIN.SIZE = 'T' # 'T', 'S', 'B' + _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.SWIN.OUT_FEATURES = (1, 2, 3) # FPN stride 8 - 32 _C.MODEL.TIMM = CN() - _C.MODEL.TIMM.BASE_NAME = 'resnet50' + _C.MODEL.TIMM.BASE_NAME = "resnet50" _C.MODEL.TIMM.OUT_LEVELS = (3, 4, 5) - _C.MODEL.TIMM.NORM = 'FrozenBN' + _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.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 - _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.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 + _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.SOLVER.BACKBONE_MULTIPLIER = 1.0 # Used in DETR - _C.SOLVER.CUSTOM_MULTIPLIER = 1.0 # Used in DETR - _C.SOLVER.CUSTOM_MULTIPLIER_NAME = [] # Used in DETR + _C.SOLVER.OPTIMIZER = "SGD" + _C.SOLVER.BACKBONE_MULTIPLIER = 1.0 # Used in DETR + _C.SOLVER.CUSTOM_MULTIPLIER = 1.0 # Used in DETR + _C.SOLVER.CUSTOM_MULTIPLIER_NAME = [] # Used in DETR # Deformable DETR _C.MODEL.DETR = CN() _C.MODEL.DETR.NUM_CLASSES = 80 - _C.MODEL.DETR.FROZEN_WEIGHTS = '' # For Segmentation + _C.MODEL.DETR.FROZEN_WEIGHTS = "" # For Segmentation _C.MODEL.DETR.GIOU_WEIGHT = 2.0 _C.MODEL.DETR.L1_WEIGHT = 5.0 _C.MODEL.DETR.DEEP_SUPERVISION = True @@ -113,12 +133,12 @@ def add_detic_config(cfg): _C.MODEL.DETR.USE_FED_LOSS = False _C.MODEL.DETR.WEAK_WEIGHT = 0.1 - _C.INPUT.CUSTOM_AUG = '' + _C.INPUT.CUSTOM_AUG = "" _C.INPUT.TRAIN_SIZE = 640 _C.INPUT.TEST_SIZE = 640 - _C.INPUT.SCALE_RANGE = (0.1, 2.) + _C.INPUT.SCALE_RANGE = (0.1, 2.0) # 'default' for fixed short/ long edge, 'square' for max size=INPUT.SIZE - _C.INPUT.TEST_INPUT_TYPE = 'default' + _C.INPUT.TEST_INPUT_TYPE = "default" _C.FIND_UNUSED_PARAM = True _C.EVAL_PRED_AR = False @@ -129,4 +149,4 @@ def add_detic_config(cfg): _C.FP16 = False _C.EVAL_AP_FIX = False _C.GEN_PSEDO_LABELS = False - _C.SAVE_DEBUG_PATH = 'output/save_debug/' \ No newline at end of file + _C.SAVE_DEBUG_PATH = "output/save_debug/" diff --git a/dimos/models/Detic/detic/custom_solver.py b/dimos/models/Detic/detic/custom_solver.py index 0284ae14ed..ae55779c14 100644 --- a/dimos/models/Detic/detic/custom_solver.py +++ b/dimos/models/Detic/detic/custom_solver.py @@ -1,13 +1,13 @@ # 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 +from typing import Any, Dict, List, Set 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: @@ -16,7 +16,10 @@ def match_name_keywords(n, name_keywords): break return out -def build_custom_optimizer(cfg: CfgNode, model: torch.nn.Module) -> torch.optim.Optimizer: + +def build_custom_optimizer( + cfg: CfgNode, model: torch.nn.Module +) -> torch.optim.Optimizer: """ Build an optimizer from config. """ @@ -37,10 +40,10 @@ def build_custom_optimizer(cfg: CfgNode, model: torch.nn.Module) -> torch.optim. lr = lr * cfg.SOLVER.BACKBONE_MULTIPLIER if match_name_keywords(key, custom_multiplier_name): lr = lr * cfg.SOLVER.CUSTOM_MULTIPLIER - print('Costum LR', key, lr) + print("Costum LR", key, lr) param = {"params": [value], "lr": lr} - if optimizer_type != 'ADAMW': - param['weight_decay'] = weight_decay + if optimizer_type != "ADAMW": + param["weight_decay"] = weight_decay params += [param] def maybe_add_full_model_gradient_clipping(optim): # optim: the optimizer class @@ -60,19 +63,19 @@ def step(self, closure=None): return FullModelGradientClippingOptimizer if enable else optim - - if optimizer_type == 'SGD': + 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 + params, + cfg.SOLVER.BASE_LR, + momentum=cfg.SOLVER.MOMENTUM, + nesterov=cfg.SOLVER.NESTEROV, ) - elif optimizer_type == 'ADAMW': + 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 + 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 \ No newline at end of file + return optimizer diff --git a/dimos/models/Detic/detic/data/custom_build_augmentation.py b/dimos/models/Detic/detic/data/custom_build_augmentation.py index 9642c15e58..3bab30dee7 100644 --- a/dimos/models/Detic/detic/data/custom_build_augmentation.py +++ b/dimos/models/Detic/detic/data/custom_build_augmentation.py @@ -1,17 +1,13 @@ # Copyright (c) Facebook, Inc. and its affiliates. -import logging -import numpy as np -import pycocotools.mask as mask_util -import torch -from fvcore.common.file_io import PathManager -from PIL import Image from detectron2.data import transforms as T from .transforms.custom_augmentation_impl import EfficientDetResizeCrop -def build_custom_augmentation(cfg, is_train, scale=None, size=None, \ - min_size=None, max_size=None): + +def build_custom_augmentation( + cfg, is_train, scale=None, size=None, min_size=None, max_size=None +): """ Create a list of default :class:`Augmentation` from config. Now it includes resizing and flipping. @@ -19,7 +15,7 @@ def build_custom_augmentation(cfg, is_train, scale=None, size=None, \ Returns: list[Augmentation] """ - if cfg.INPUT.CUSTOM_AUG == 'ResizeShortestEdge': + if cfg.INPUT.CUSTOM_AUG == "ResizeShortestEdge": if is_train: min_size = cfg.INPUT.MIN_SIZE_TRAIN if min_size is None else min_size max_size = cfg.INPUT.MAX_SIZE_TRAIN if max_size is None else max_size @@ -29,7 +25,7 @@ def build_custom_augmentation(cfg, is_train, scale=None, size=None, \ max_size = cfg.INPUT.MAX_SIZE_TEST sample_style = "choice" augmentation = [T.ResizeShortestEdge(min_size, max_size, sample_style)] - elif cfg.INPUT.CUSTOM_AUG == 'EfficientDetResizeCrop': + elif cfg.INPUT.CUSTOM_AUG == "EfficientDetResizeCrop": if is_train: scale = cfg.INPUT.SCALE_RANGE if scale is None else scale size = cfg.INPUT.TRAIN_SIZE if size is None else size @@ -48,4 +44,4 @@ def build_custom_augmentation(cfg, is_train, scale=None, size=None, \ build_custom_transform_gen = build_custom_augmentation """ Alias for backward-compatibility. -""" \ No newline at end of file +""" diff --git a/dimos/models/Detic/detic/data/custom_dataset_dataloader.py b/dimos/models/Detic/detic/data/custom_dataset_dataloader.py index 8f8d681770..ab2a7dcc4c 100644 --- a/dimos/models/Detic/detic/data/custom_dataset_dataloader.py +++ b/dimos/models/Detic/detic/data/custom_dataset_dataloader.py @@ -1,23 +1,20 @@ # Copyright (c) Facebook, Inc. and its affiliates. # Part of the code is from https://github.com/xingyizhou/UniDet/blob/master/projects/UniDet/unidet/data/multi_dataset_dataloader.py (Apache-2.0 License) -import copy -import logging -import numpy as np import operator import torch import torch.utils.data -import json from detectron2.utils.comm import get_world_size -from detectron2.utils.logger import _log_api_usage, log_first_n from detectron2.config import configurable -from detectron2.data import samplers -from torch.utils.data.sampler import BatchSampler, Sampler +from torch.utils.data.sampler import Sampler from detectron2.data.common import DatasetFromList, MapDataset from detectron2.data.dataset_mapper import DatasetMapper from detectron2.data.build import get_detection_dataset_dicts, build_batch_data_loader from detectron2.data.samplers import TrainingSampler, RepeatFactorTrainingSampler -from detectron2.data.build import worker_init_reset_seed, print_instances_class_histogram +from detectron2.data.build import ( + worker_init_reset_seed, + print_instances_class_histogram, +) from detectron2.data.build import filter_images_with_only_crowd_annotations from detectron2.data.build import filter_images_with_few_keypoints from detectron2.data.build import check_metadata_consistency @@ -31,21 +28,27 @@ def _custom_train_loader_from_config(cfg, mapper=None, *, dataset=None, sampler=None): sampler_name = cfg.DATALOADER.SAMPLER_TRAIN - if 'MultiDataset' in sampler_name: + if "MultiDataset" in sampler_name: dataset_dicts = get_detection_dataset_dicts_with_source( cfg.DATASETS.TRAIN, filter_empty=cfg.DATALOADER.FILTER_EMPTY_ANNOTATIONS, min_keypoints=cfg.MODEL.ROI_KEYPOINT_HEAD.MIN_KEYPOINTS_PER_IMAGE - if cfg.MODEL.KEYPOINT_ON else 0, - proposal_files=cfg.DATASETS.PROPOSAL_FILES_TRAIN if cfg.MODEL.LOAD_PROPOSALS else None, + if cfg.MODEL.KEYPOINT_ON + else 0, + proposal_files=cfg.DATASETS.PROPOSAL_FILES_TRAIN + if cfg.MODEL.LOAD_PROPOSALS + else None, ) else: dataset_dicts = get_detection_dataset_dicts( cfg.DATASETS.TRAIN, filter_empty=cfg.DATALOADER.FILTER_EMPTY_ANNOTATIONS, min_keypoints=cfg.MODEL.ROI_KEYPOINT_HEAD.MIN_KEYPOINTS_PER_IMAGE - if cfg.MODEL.KEYPOINT_ON else 0, - proposal_files=cfg.DATASETS.PROPOSAL_FILES_TRAIN if cfg.MODEL.LOAD_PROPOSALS else None, + if cfg.MODEL.KEYPOINT_ON + else 0, + proposal_files=cfg.DATASETS.PROPOSAL_FILES_TRAIN + if cfg.MODEL.LOAD_PROPOSALS + else None, ) if mapper is None: @@ -58,14 +61,16 @@ def _custom_train_loader_from_config(cfg, mapper=None, *, dataset=None, sampler= elif sampler_name == "MultiDatasetSampler": sampler = MultiDatasetSampler( dataset_dicts, - dataset_ratio = cfg.DATALOADER.DATASET_RATIO, - use_rfs = cfg.DATALOADER.USE_RFS, - dataset_ann = cfg.DATALOADER.DATASET_ANN, - repeat_threshold = cfg.DATALOADER.REPEAT_THRESHOLD, + dataset_ratio=cfg.DATALOADER.DATASET_RATIO, + use_rfs=cfg.DATALOADER.USE_RFS, + dataset_ann=cfg.DATALOADER.DATASET_ANN, + repeat_threshold=cfg.DATALOADER.REPEAT_THRESHOLD, ) elif sampler_name == "RepeatFactorTrainingSampler": - repeat_factors = RepeatFactorTrainingSampler.repeat_factors_from_category_frequency( - dataset_dicts, cfg.DATALOADER.REPEAT_THRESHOLD + repeat_factors = ( + RepeatFactorTrainingSampler.repeat_factors_from_category_frequency( + dataset_dicts, cfg.DATALOADER.REPEAT_THRESHOLD + ) ) sampler = RepeatFactorTrainingSampler(repeat_factors) else: @@ -78,24 +83,27 @@ def _custom_train_loader_from_config(cfg, mapper=None, *, dataset=None, sampler= "total_batch_size": cfg.SOLVER.IMS_PER_BATCH, "aspect_ratio_grouping": cfg.DATALOADER.ASPECT_RATIO_GROUPING, "num_workers": cfg.DATALOADER.NUM_WORKERS, - 'multi_dataset_grouping': cfg.DATALOADER.MULTI_DATASET_GROUPING, - 'use_diff_bs_size': cfg.DATALOADER.USE_DIFF_BS_SIZE, - 'dataset_bs': cfg.DATALOADER.DATASET_BS, - 'num_datasets': len(cfg.DATASETS.TRAIN) + "multi_dataset_grouping": cfg.DATALOADER.MULTI_DATASET_GROUPING, + "use_diff_bs_size": cfg.DATALOADER.USE_DIFF_BS_SIZE, + "dataset_bs": cfg.DATALOADER.DATASET_BS, + "num_datasets": len(cfg.DATASETS.TRAIN), } @configurable(from_config=_custom_train_loader_from_config) def build_custom_train_loader( - dataset, *, mapper, sampler, - total_batch_size=16, - aspect_ratio_grouping=True, - num_workers=0, - num_datasets=1, - multi_dataset_grouping=False, - use_diff_bs_size=False, - dataset_bs=[] - ): + dataset, + *, + mapper, + sampler, + total_batch_size=16, + aspect_ratio_grouping=True, + num_workers=0, + num_datasets=1, + multi_dataset_grouping=False, + use_diff_bs_size=False, + dataset_bs=[], +): """ Modified from detectron2.data.build.build_custom_train_loader, but supports different samplers @@ -128,16 +136,20 @@ def build_custom_train_loader( def build_multi_dataset_batch_data_loader( - use_diff_bs_size, dataset_bs, - dataset, sampler, total_batch_size, num_datasets, num_workers=0 + use_diff_bs_size, + dataset_bs, + dataset, + sampler, + total_batch_size, + num_datasets, + num_workers=0, ): - """ - """ + """ """ world_size = get_world_size() - assert ( - total_batch_size > 0 and total_batch_size % world_size == 0 - ), "Total batch size ({}) must be divisible by the number of gpus ({}).".format( - total_batch_size, world_size + assert total_batch_size > 0 and total_batch_size % world_size == 0, ( + "Total batch size ({}) must be divisible by the number of gpus ({}).".format( + total_batch_size, world_size + ) ) batch_size = total_batch_size // world_size @@ -150,11 +162,9 @@ def build_multi_dataset_batch_data_loader( worker_init_fn=worker_init_reset_seed, ) # yield individual mapped dict if use_diff_bs_size: - return DIFFMDAspectRatioGroupedDataset( - data_loader, dataset_bs, num_datasets) + return DIFFMDAspectRatioGroupedDataset(data_loader, dataset_bs, num_datasets) else: - return MDAspectRatioGroupedDataset( - data_loader, batch_size, num_datasets) + return MDAspectRatioGroupedDataset(data_loader, batch_size, num_datasets) def get_detection_dataset_dicts_with_source( @@ -164,12 +174,13 @@ def get_detection_dataset_dicts_with_source( dataset_dicts = [DatasetCatalog.get(dataset_name) for dataset_name in dataset_names] for dataset_name, dicts in zip(dataset_names, dataset_dicts): assert len(dicts), "Dataset '{}' is empty!".format(dataset_name) - - for source_id, (dataset_name, dicts) in \ - enumerate(zip(dataset_names, dataset_dicts)): + + for source_id, (dataset_name, dicts) in enumerate( + zip(dataset_names, dataset_dicts) + ): assert len(dicts), "Dataset '{}' is empty!".format(dataset_name) for d in dicts: - d['dataset_source'] = source_id + d["dataset_source"] = source_id if "annotations" in dicts[0]: try: @@ -194,49 +205,52 @@ def get_detection_dataset_dicts_with_source( class MultiDatasetSampler(Sampler): def __init__( - self, - dataset_dicts, + self, + dataset_dicts, dataset_ratio, use_rfs, dataset_ann, repeat_threshold=0.001, seed: Optional[int] = None, - ): - """ - """ + ): + """ """ sizes = [0 for _ in range(len(dataset_ratio))] for d in dataset_dicts: - sizes[d['dataset_source']] += 1 - print('dataset sizes', sizes) + sizes[d["dataset_source"]] += 1 + print("dataset sizes", sizes) self.sizes = sizes - assert len(dataset_ratio) == len(sizes), \ - 'length of dataset ratio {} should be equal to number if dataset {}'.format( + assert len(dataset_ratio) == len(sizes), ( + "length of dataset ratio {} should be equal to number if dataset {}".format( len(dataset_ratio), len(sizes) ) + ) if seed is None: seed = comm.shared_random_seed() self._seed = int(seed) self._rank = comm.get_rank() self._world_size = comm.get_world_size() - - self.dataset_ids = torch.tensor( - [d['dataset_source'] for d in dataset_dicts], dtype=torch.long) - dataset_weight = [torch.ones(s) * max(sizes) / s * r / sum(dataset_ratio) \ - for i, (r, s) in enumerate(zip(dataset_ratio, sizes))] + self.dataset_ids = torch.tensor( + [d["dataset_source"] for d in dataset_dicts], dtype=torch.long + ) + + dataset_weight = [ + torch.ones(s) * max(sizes) / s * r / sum(dataset_ratio) + for i, (r, s) in enumerate(zip(dataset_ratio, sizes)) + ] dataset_weight = torch.cat(dataset_weight) - + rfs_factors = [] st = 0 for i, s in enumerate(sizes): if use_rfs[i]: - if dataset_ann[i] == 'box': + if dataset_ann[i] == "box": rfs_func = RepeatFactorTrainingSampler.repeat_factors_from_category_frequency else: rfs_func = repeat_factors_from_tag_frequency rfs_factor = rfs_func( - dataset_dicts[st: st + s], - repeat_thresh=repeat_threshold) + dataset_dicts[st : st + s], repeat_thresh=repeat_threshold + ) rfs_factor = rfs_factor * (s / rfs_factor.sum()) else: rfs_factor = torch.ones(s) @@ -250,25 +264,26 @@ def __init__( def __iter__(self): start = self._rank yield from itertools.islice( - self._infinite_indices(), start, None, self._world_size) - + self._infinite_indices(), start, None, self._world_size + ) def _infinite_indices(self): g = torch.Generator() g.manual_seed(self._seed) while True: ids = torch.multinomial( - self.weights, self.sample_epoch_size, generator=g, - replacement=True) - nums = [(self.dataset_ids[ids] == i).sum().int().item() \ - for i in range(len(self.sizes))] + self.weights, self.sample_epoch_size, generator=g, replacement=True + ) + nums = [ + (self.dataset_ids[ids] == i).sum().int().item() + for i in range(len(self.sizes)) + ] yield from ids class MDAspectRatioGroupedDataset(torch.utils.data.IterableDataset): def __init__(self, dataset, batch_size, num_datasets): - """ - """ + """ """ self.dataset = dataset self.batch_size = batch_size self._buckets = [[] for _ in range(2 * num_datasets)] @@ -277,7 +292,7 @@ def __iter__(self): for d in self.dataset: w, h = d["width"], d["height"] aspect_ratio_bucket_id = 0 if w > h else 1 - bucket_id = d['dataset_source'] * 2 + aspect_ratio_bucket_id + bucket_id = d["dataset_source"] * 2 + aspect_ratio_bucket_id bucket = self._buckets[bucket_id] bucket.append(d) if len(bucket) == self.batch_size: @@ -287,8 +302,7 @@ def __iter__(self): class DIFFMDAspectRatioGroupedDataset(torch.utils.data.IterableDataset): def __init__(self, dataset, batch_sizes, num_datasets): - """ - """ + """ """ self.dataset = dataset self.batch_sizes = batch_sizes self._buckets = [[] for _ in range(2 * num_datasets)] @@ -297,20 +311,19 @@ def __iter__(self): for d in self.dataset: w, h = d["width"], d["height"] aspect_ratio_bucket_id = 0 if w > h else 1 - bucket_id = d['dataset_source'] * 2 + aspect_ratio_bucket_id + bucket_id = d["dataset_source"] * 2 + aspect_ratio_bucket_id bucket = self._buckets[bucket_id] bucket.append(d) - if len(bucket) == self.batch_sizes[d['dataset_source']]: + if len(bucket) == self.batch_sizes[d["dataset_source"]]: yield bucket[:] del bucket[:] def repeat_factors_from_tag_frequency(dataset_dicts, repeat_thresh): - """ - """ + """ """ category_freq = defaultdict(int) for dataset_dict in dataset_dicts: - cat_ids = dataset_dict['pos_category_ids'] + cat_ids = dataset_dict["pos_category_ids"] for cat_id in cat_ids: category_freq[cat_id] += 1 num_images = len(dataset_dicts) @@ -324,8 +337,8 @@ def repeat_factors_from_tag_frequency(dataset_dicts, repeat_thresh): rep_factors = [] for dataset_dict in dataset_dicts: - cat_ids = dataset_dict['pos_category_ids'] + cat_ids = dataset_dict["pos_category_ids"] rep_factor = max({category_rep[cat_id] for cat_id in cat_ids}, default=1.0) rep_factors.append(rep_factor) - return torch.tensor(rep_factors, dtype=torch.float32) \ No newline at end of file + return torch.tensor(rep_factors, dtype=torch.float32) diff --git a/dimos/models/Detic/detic/data/custom_dataset_mapper.py b/dimos/models/Detic/detic/data/custom_dataset_mapper.py index c7727dded3..1f38138e4b 100644 --- a/dimos/models/Detic/detic/data/custom_dataset_mapper.py +++ b/dimos/models/Detic/detic/data/custom_dataset_mapper.py @@ -2,36 +2,34 @@ import copy import logging import numpy as np -from typing import List, Optional, Union import torch -import pycocotools.mask as mask_util from detectron2.config import configurable from detectron2.data import detection_utils as utils -from detectron2.data.detection_utils import transform_keypoint_annotations from detectron2.data import transforms as T from detectron2.data.dataset_mapper import DatasetMapper -from detectron2.structures import Boxes, BoxMode, Instances -from detectron2.structures import Keypoints, PolygonMasks, BitMasks -from fvcore.transforms.transform import TransformList from .custom_build_augmentation import build_custom_augmentation from .tar_dataset import DiskTarDataset __all__ = ["CustomDatasetMapper"] + class CustomDatasetMapper(DatasetMapper): @configurable - def __init__(self, is_train: bool, + def __init__( + self, + is_train: bool, with_ann_type=False, dataset_ann=[], use_diff_bs_size=False, dataset_augs=[], is_debug=False, use_tar_dataset=False, - tarfile_path='', - tar_index_dir='', - **kwargs): + tarfile_path="", + tar_index_dir="", + **kwargs, + ): """ add image labels """ @@ -43,40 +41,42 @@ def __init__(self, is_train: bool, self.is_debug = is_debug self.use_tar_dataset = use_tar_dataset if self.use_tar_dataset: - print('Using tar dataset') + print("Using tar dataset") self.tar_dataset = DiskTarDataset(tarfile_path, tar_index_dir) super().__init__(is_train, **kwargs) - @classmethod def from_config(cls, cfg, is_train: bool = True): ret = super().from_config(cfg, is_train) - ret.update({ - 'with_ann_type': cfg.WITH_IMAGE_LABELS, - 'dataset_ann': cfg.DATALOADER.DATASET_ANN, - 'use_diff_bs_size': cfg.DATALOADER.USE_DIFF_BS_SIZE, - 'is_debug': cfg.IS_DEBUG, - 'use_tar_dataset': cfg.DATALOADER.USE_TAR_DATASET, - 'tarfile_path': cfg.DATALOADER.TARFILE_PATH, - 'tar_index_dir': cfg.DATALOADER.TAR_INDEX_DIR, - }) - if ret['use_diff_bs_size'] and is_train: - if cfg.INPUT.CUSTOM_AUG == 'EfficientDetResizeCrop': + ret.update( + { + "with_ann_type": cfg.WITH_IMAGE_LABELS, + "dataset_ann": cfg.DATALOADER.DATASET_ANN, + "use_diff_bs_size": cfg.DATALOADER.USE_DIFF_BS_SIZE, + "is_debug": cfg.IS_DEBUG, + "use_tar_dataset": cfg.DATALOADER.USE_TAR_DATASET, + "tarfile_path": cfg.DATALOADER.TARFILE_PATH, + "tar_index_dir": cfg.DATALOADER.TAR_INDEX_DIR, + } + ) + if ret["use_diff_bs_size"] and is_train: + if cfg.INPUT.CUSTOM_AUG == "EfficientDetResizeCrop": dataset_scales = cfg.DATALOADER.DATASET_INPUT_SCALE dataset_sizes = cfg.DATALOADER.DATASET_INPUT_SIZE - ret['dataset_augs'] = [ - build_custom_augmentation(cfg, True, scale, size) \ - for scale, size in zip(dataset_scales, dataset_sizes)] + ret["dataset_augs"] = [ + build_custom_augmentation(cfg, True, scale, size) + for scale, size in zip(dataset_scales, dataset_sizes) + ] else: - assert cfg.INPUT.CUSTOM_AUG == 'ResizeShortestEdge' + assert cfg.INPUT.CUSTOM_AUG == "ResizeShortestEdge" min_sizes = cfg.DATALOADER.DATASET_MIN_SIZES max_sizes = cfg.DATALOADER.DATASET_MAX_SIZES - ret['dataset_augs'] = [ - build_custom_augmentation( - cfg, True, min_size=mi, max_size=ma) \ - for mi, ma in zip(min_sizes, max_sizes)] + ret["dataset_augs"] = [ + build_custom_augmentation(cfg, True, min_size=mi, max_size=ma) + for mi, ma in zip(min_sizes, max_sizes) + ] else: - ret['dataset_augs'] = [] + ret["dataset_augs"] = [] return ret @@ -86,9 +86,10 @@ def __call__(self, dataset_dict): """ dataset_dict = copy.deepcopy(dataset_dict) # it will be modified by code below # USER: Write your own image loading if it's not from a file - if 'file_name' in dataset_dict: + if "file_name" in dataset_dict: ori_image = utils.read_image( - dataset_dict["file_name"], format=self.image_format) + dataset_dict["file_name"], format=self.image_format + ) else: ori_image, _, _ = self.tar_dataset[dataset_dict["tar_index"]] ori_image = utils._apply_exif_orientation(ori_image) @@ -98,29 +99,32 @@ def __call__(self, dataset_dict): # USER: Remove if you don't do semantic/panoptic segmentation. if "sem_seg_file_name" in dataset_dict: sem_seg_gt = utils.read_image( - dataset_dict.pop("sem_seg_file_name"), "L").squeeze(2) + dataset_dict.pop("sem_seg_file_name"), "L" + ).squeeze(2) else: sem_seg_gt = None if self.is_debug: - dataset_dict['dataset_source'] = 0 + dataset_dict["dataset_source"] = 0 - not_full_labeled = 'dataset_source' in dataset_dict and \ - self.with_ann_type and \ - self.dataset_ann[dataset_dict['dataset_source']] != 'box' + not_full_labeled = ( + "dataset_source" in dataset_dict + and self.with_ann_type + and self.dataset_ann[dataset_dict["dataset_source"]] != "box" + ) aug_input = T.AugInput(copy.deepcopy(ori_image), sem_seg=sem_seg_gt) if self.use_diff_bs_size and self.is_train: - transforms = \ - self.dataset_augs[dataset_dict['dataset_source']](aug_input) + transforms = self.dataset_augs[dataset_dict["dataset_source"]](aug_input) else: transforms = self.augmentations(aug_input) image, sem_seg_gt = aug_input.image, aug_input.sem_seg image_shape = image.shape[:2] # h, w dataset_dict["image"] = torch.as_tensor( - np.ascontiguousarray(image.transpose(2, 0, 1))) - + np.ascontiguousarray(image.transpose(2, 0, 1)) + ) + if sem_seg_gt is not None: dataset_dict["sem_seg"] = torch.as_tensor(sem_seg_gt.astype("long")) @@ -128,8 +132,7 @@ def __call__(self, dataset_dict): # Most users would not need this feature. if self.proposal_topk is not None: utils.transform_proposals( - dataset_dict, image_shape, transforms, - proposal_topk=self.proposal_topk + dataset_dict, image_shape, transforms, proposal_topk=self.proposal_topk ) if not self.is_train: @@ -148,37 +151,42 @@ def __call__(self, dataset_dict): # USER: Implement additional transformations if you have other types of data all_annos = [ - (utils.transform_instance_annotations( - obj, transforms, image_shape, - keypoint_hflip_indices=self.keypoint_hflip_indices, - ), obj.get("iscrowd", 0)) + ( + utils.transform_instance_annotations( + obj, + transforms, + image_shape, + keypoint_hflip_indices=self.keypoint_hflip_indices, + ), + obj.get("iscrowd", 0), + ) for obj in dataset_dict.pop("annotations") ] annos = [ann[0] for ann in all_annos if ann[1] == 0] instances = utils.annotations_to_instances( annos, image_shape, mask_format=self.instance_mask_format ) - + del all_annos if self.recompute_boxes: instances.gt_boxes = instances.gt_masks.get_bounding_boxes() dataset_dict["instances"] = utils.filter_empty_instances(instances) if self.with_ann_type: - dataset_dict["pos_category_ids"] = dataset_dict.get( - 'pos_category_ids', []) - dataset_dict["ann_type"] = \ - self.dataset_ann[dataset_dict['dataset_source']] - if self.is_debug and (('pos_category_ids' not in dataset_dict) or \ - (dataset_dict['pos_category_ids'] == [])): - dataset_dict['pos_category_ids'] = [x for x in sorted(set( - dataset_dict['instances'].gt_classes.tolist() - ))] + dataset_dict["pos_category_ids"] = dataset_dict.get("pos_category_ids", []) + dataset_dict["ann_type"] = self.dataset_ann[dataset_dict["dataset_source"]] + if self.is_debug and ( + ("pos_category_ids" not in dataset_dict) + or (dataset_dict["pos_category_ids"] == []) + ): + dataset_dict["pos_category_ids"] = [ + x for x in sorted(set(dataset_dict["instances"].gt_classes.tolist())) + ] return dataset_dict + # DETR augmentation def build_transform_gen(cfg, is_train): - """ - """ + """ """ if is_train: min_size = cfg.INPUT.MIN_SIZE_TRAIN max_size = cfg.INPUT.MAX_SIZE_TRAIN @@ -188,7 +196,9 @@ def build_transform_gen(cfg, is_train): max_size = cfg.INPUT.MAX_SIZE_TEST sample_style = "choice" if sample_style == "range": - assert len(min_size) == 2, "more than 2 ({}) min_size(s) are provided for ranges".format(len(min_size)) + assert len(min_size) == 2, ( + "more than 2 ({}) min_size(s) are provided for ranges".format(len(min_size)) + ) logger = logging.getLogger(__name__) tfm_gens = [] @@ -223,7 +233,9 @@ def __init__(self, cfg, is_train=True): self.mask_on = cfg.MODEL.MASK_ON self.tfm_gens = build_transform_gen(cfg, is_train) logging.getLogger(__name__).info( - "Full TransformGens used in training: {}, crop: {}".format(str(self.tfm_gens), str(self.crop_gen)) + "Full TransformGens used in training: {}, crop: {}".format( + str(self.tfm_gens), str(self.crop_gen) + ) ) self.img_format = cfg.INPUT.FORMAT @@ -255,7 +267,9 @@ def __call__(self, dataset_dict): # Pytorch's dataloader is efficient on torch.Tensor due to shared-memory, # but not efficient on large generic data structures due to the use of pickle & mp.Queue. # Therefore it's important to use torch.Tensor. - dataset_dict["image"] = torch.as_tensor(np.ascontiguousarray(image.transpose(2, 0, 1))) + dataset_dict["image"] = torch.as_tensor( + np.ascontiguousarray(image.transpose(2, 0, 1)) + ) if not self.is_train: # USER: Modify this if you want to keep them for some reason. @@ -277,4 +291,4 @@ def __call__(self, dataset_dict): ] instances = utils.annotations_to_instances(annos, image_shape) dataset_dict["instances"] = utils.filter_empty_instances(instances) - return dataset_dict \ No newline at end of file + return dataset_dict diff --git a/dimos/models/Detic/detic/data/datasets/cc.py b/dimos/models/Detic/detic/data/datasets/cc.py index 7c3e50726f..706db88415 100644 --- a/dimos/models/Detic/detic/data/datasets/cc.py +++ b/dimos/models/Detic/detic/data/datasets/cc.py @@ -1,8 +1,6 @@ # Copyright (c) Facebook, Inc. and its affiliates. -import logging import os -from detectron2.data.datasets.builtin_meta import _get_builtin_metadata from detectron2.data.datasets.lvis import get_lvis_instances_meta from .lvis_v1 import custom_register_lvis_instances @@ -10,14 +8,12 @@ "cc3m_v1_val": ("cc3m/validation/", "cc3m/val_image_info.json"), "cc3m_v1_train": ("cc3m/training/", "cc3m/train_image_info.json"), "cc3m_v1_train_tags": ("cc3m/training/", "cc3m/train_image_info_tags.json"), - } for key, (image_root, json_file) in _CUSTOM_SPLITS.items(): custom_register_lvis_instances( key, - get_lvis_instances_meta('lvis_v1'), + get_lvis_instances_meta("lvis_v1"), os.path.join("datasets", json_file) if "://" not in json_file else json_file, os.path.join("datasets", image_root), ) - diff --git a/dimos/models/Detic/detic/data/datasets/coco_zeroshot.py b/dimos/models/Detic/detic/data/datasets/coco_zeroshot.py index aee895de41..caf169adc9 100644 --- a/dimos/models/Detic/detic/data/datasets/coco_zeroshot.py +++ b/dimos/models/Detic/detic/data/datasets/coco_zeroshot.py @@ -6,98 +6,120 @@ from .lvis_v1 import custom_register_lvis_instances categories_seen = [ - {'id': 1, 'name': 'person'}, - {'id': 2, 'name': 'bicycle'}, - {'id': 3, 'name': 'car'}, - {'id': 4, 'name': 'motorcycle'}, - {'id': 7, 'name': 'train'}, - {'id': 8, 'name': 'truck'}, - {'id': 9, 'name': 'boat'}, - {'id': 15, 'name': 'bench'}, - {'id': 16, 'name': 'bird'}, - {'id': 19, 'name': 'horse'}, - {'id': 20, 'name': 'sheep'}, - {'id': 23, 'name': 'bear'}, - {'id': 24, 'name': 'zebra'}, - {'id': 25, 'name': 'giraffe'}, - {'id': 27, 'name': 'backpack'}, - {'id': 31, 'name': 'handbag'}, - {'id': 33, 'name': 'suitcase'}, - {'id': 34, 'name': 'frisbee'}, - {'id': 35, 'name': 'skis'}, - {'id': 38, 'name': 'kite'}, - {'id': 42, 'name': 'surfboard'}, - {'id': 44, 'name': 'bottle'}, - {'id': 48, 'name': 'fork'}, - {'id': 50, 'name': 'spoon'}, - {'id': 51, 'name': 'bowl'}, - {'id': 52, 'name': 'banana'}, - {'id': 53, 'name': 'apple'}, - {'id': 54, 'name': 'sandwich'}, - {'id': 55, 'name': 'orange'}, - {'id': 56, 'name': 'broccoli'}, - {'id': 57, 'name': 'carrot'}, - {'id': 59, 'name': 'pizza'}, - {'id': 60, 'name': 'donut'}, - {'id': 62, 'name': 'chair'}, - {'id': 65, 'name': 'bed'}, - {'id': 70, 'name': 'toilet'}, - {'id': 72, 'name': 'tv'}, - {'id': 73, 'name': 'laptop'}, - {'id': 74, 'name': 'mouse'}, - {'id': 75, 'name': 'remote'}, - {'id': 78, 'name': 'microwave'}, - {'id': 79, 'name': 'oven'}, - {'id': 80, 'name': 'toaster'}, - {'id': 82, 'name': 'refrigerator'}, - {'id': 84, 'name': 'book'}, - {'id': 85, 'name': 'clock'}, - {'id': 86, 'name': 'vase'}, - {'id': 90, 'name': 'toothbrush'}, + {"id": 1, "name": "person"}, + {"id": 2, "name": "bicycle"}, + {"id": 3, "name": "car"}, + {"id": 4, "name": "motorcycle"}, + {"id": 7, "name": "train"}, + {"id": 8, "name": "truck"}, + {"id": 9, "name": "boat"}, + {"id": 15, "name": "bench"}, + {"id": 16, "name": "bird"}, + {"id": 19, "name": "horse"}, + {"id": 20, "name": "sheep"}, + {"id": 23, "name": "bear"}, + {"id": 24, "name": "zebra"}, + {"id": 25, "name": "giraffe"}, + {"id": 27, "name": "backpack"}, + {"id": 31, "name": "handbag"}, + {"id": 33, "name": "suitcase"}, + {"id": 34, "name": "frisbee"}, + {"id": 35, "name": "skis"}, + {"id": 38, "name": "kite"}, + {"id": 42, "name": "surfboard"}, + {"id": 44, "name": "bottle"}, + {"id": 48, "name": "fork"}, + {"id": 50, "name": "spoon"}, + {"id": 51, "name": "bowl"}, + {"id": 52, "name": "banana"}, + {"id": 53, "name": "apple"}, + {"id": 54, "name": "sandwich"}, + {"id": 55, "name": "orange"}, + {"id": 56, "name": "broccoli"}, + {"id": 57, "name": "carrot"}, + {"id": 59, "name": "pizza"}, + {"id": 60, "name": "donut"}, + {"id": 62, "name": "chair"}, + {"id": 65, "name": "bed"}, + {"id": 70, "name": "toilet"}, + {"id": 72, "name": "tv"}, + {"id": 73, "name": "laptop"}, + {"id": 74, "name": "mouse"}, + {"id": 75, "name": "remote"}, + {"id": 78, "name": "microwave"}, + {"id": 79, "name": "oven"}, + {"id": 80, "name": "toaster"}, + {"id": 82, "name": "refrigerator"}, + {"id": 84, "name": "book"}, + {"id": 85, "name": "clock"}, + {"id": 86, "name": "vase"}, + {"id": 90, "name": "toothbrush"}, ] categories_unseen = [ - {'id': 5, 'name': 'airplane'}, - {'id': 6, 'name': 'bus'}, - {'id': 17, 'name': 'cat'}, - {'id': 18, 'name': 'dog'}, - {'id': 21, 'name': 'cow'}, - {'id': 22, 'name': 'elephant'}, - {'id': 28, 'name': 'umbrella'}, - {'id': 32, 'name': 'tie'}, - {'id': 36, 'name': 'snowboard'}, - {'id': 41, 'name': 'skateboard'}, - {'id': 47, 'name': 'cup'}, - {'id': 49, 'name': 'knife'}, - {'id': 61, 'name': 'cake'}, - {'id': 63, 'name': 'couch'}, - {'id': 76, 'name': 'keyboard'}, - {'id': 81, 'name': 'sink'}, - {'id': 87, 'name': 'scissors'}, + {"id": 5, "name": "airplane"}, + {"id": 6, "name": "bus"}, + {"id": 17, "name": "cat"}, + {"id": 18, "name": "dog"}, + {"id": 21, "name": "cow"}, + {"id": 22, "name": "elephant"}, + {"id": 28, "name": "umbrella"}, + {"id": 32, "name": "tie"}, + {"id": 36, "name": "snowboard"}, + {"id": 41, "name": "skateboard"}, + {"id": 47, "name": "cup"}, + {"id": 49, "name": "knife"}, + {"id": 61, "name": "cake"}, + {"id": 63, "name": "couch"}, + {"id": 76, "name": "keyboard"}, + {"id": 81, "name": "sink"}, + {"id": 87, "name": "scissors"}, ] + def _get_metadata(cat): - if cat == 'all': - return _get_builtin_metadata('coco') - elif cat == 'seen': - id_to_name = {x['id']: x['name'] for x in categories_seen} + if cat == "all": + return _get_builtin_metadata("coco") + elif cat == "seen": + id_to_name = {x["id"]: x["name"] for x in categories_seen} else: - assert cat == 'unseen' - id_to_name = {x['id']: x['name'] for x in categories_unseen} + assert cat == "unseen" + id_to_name = {x["id"]: x["name"] for x in categories_unseen} - thing_dataset_id_to_contiguous_id = { - x: i for i, x in enumerate(sorted(id_to_name))} + thing_dataset_id_to_contiguous_id = {x: i for i, x in enumerate(sorted(id_to_name))} thing_classes = [id_to_name[k] for k in sorted(id_to_name)] return { "thing_dataset_id_to_contiguous_id": thing_dataset_id_to_contiguous_id, - "thing_classes": thing_classes} + "thing_classes": thing_classes, + } + _PREDEFINED_SPLITS_COCO = { - "coco_zeroshot_train": ("coco/train2017", "coco/zero-shot/instances_train2017_seen_2.json", 'seen'), - "coco_zeroshot_val": ("coco/val2017", "coco/zero-shot/instances_val2017_unseen_2.json", 'unseen'), - "coco_not_zeroshot_val": ("coco/val2017", "coco/zero-shot/instances_val2017_seen_2.json", 'seen'), - "coco_generalized_zeroshot_val": ("coco/val2017", "coco/zero-shot/instances_val2017_all_2_oriorder.json", 'all'), - "coco_zeroshot_train_oriorder": ("coco/train2017", "coco/zero-shot/instances_train2017_seen_2_oriorder.json", 'all'), + "coco_zeroshot_train": ( + "coco/train2017", + "coco/zero-shot/instances_train2017_seen_2.json", + "seen", + ), + "coco_zeroshot_val": ( + "coco/val2017", + "coco/zero-shot/instances_val2017_unseen_2.json", + "unseen", + ), + "coco_not_zeroshot_val": ( + "coco/val2017", + "coco/zero-shot/instances_val2017_seen_2.json", + "seen", + ), + "coco_generalized_zeroshot_val": ( + "coco/val2017", + "coco/zero-shot/instances_val2017_all_2_oriorder.json", + "all", + ), + "coco_zeroshot_train_oriorder": ( + "coco/train2017", + "coco/zero-shot/instances_train2017_seen_2_oriorder.json", + "all", + ), } for key, (image_root, json_file, cat) in _PREDEFINED_SPLITS_COCO.items(): @@ -110,12 +132,16 @@ def _get_metadata(cat): _CUSTOM_SPLITS_COCO = { "cc3m_coco_train_tags": ("cc3m/training/", "cc3m/coco_train_image_info_tags.json"), - "coco_caption_train_tags": ("coco/train2017/", "coco/annotations/captions_train2017_tags_allcaps.json"),} + "coco_caption_train_tags": ( + "coco/train2017/", + "coco/annotations/captions_train2017_tags_allcaps.json", + ), +} for key, (image_root, json_file) in _CUSTOM_SPLITS_COCO.items(): custom_register_lvis_instances( key, - _get_builtin_metadata('coco'), + _get_builtin_metadata("coco"), os.path.join("datasets", json_file) if "://" not in json_file else json_file, os.path.join("datasets", image_root), - ) \ No newline at end of file + ) diff --git a/dimos/models/Detic/detic/data/datasets/imagenet.py b/dimos/models/Detic/detic/data/datasets/imagenet.py index 9b6d78e51f..dc12a200f5 100644 --- a/dimos/models/Detic/detic/data/datasets/imagenet.py +++ b/dimos/models/Detic/detic/data/datasets/imagenet.py @@ -1,35 +1,45 @@ # Copyright (c) Facebook, Inc. and its affiliates. -import logging import os from detectron2.data import DatasetCatalog, MetadataCatalog from detectron2.data.datasets.lvis import get_lvis_instances_meta from .lvis_v1 import custom_load_lvis_json, get_lvis_22k_meta + + def custom_register_imagenet_instances(name, metadata, json_file, image_root): - """ - """ - DatasetCatalog.register(name, lambda: custom_load_lvis_json( - json_file, image_root, name)) + """ """ + DatasetCatalog.register( + name, lambda: custom_load_lvis_json(json_file, image_root, name) + ) MetadataCatalog.get(name).set( - json_file=json_file, image_root=image_root, - evaluator_type="imagenet", **metadata + json_file=json_file, + image_root=image_root, + evaluator_type="imagenet", + **metadata, ) + _CUSTOM_SPLITS_IMAGENET = { - "imagenet_lvis_v1": ("imagenet/ImageNet-LVIS/", "imagenet/annotations/imagenet_lvis_image_info.json"), + "imagenet_lvis_v1": ( + "imagenet/ImageNet-LVIS/", + "imagenet/annotations/imagenet_lvis_image_info.json", + ), } for key, (image_root, json_file) in _CUSTOM_SPLITS_IMAGENET.items(): custom_register_imagenet_instances( key, - get_lvis_instances_meta('lvis_v1'), + get_lvis_instances_meta("lvis_v1"), os.path.join("datasets", json_file) if "://" not in json_file else json_file, os.path.join("datasets", image_root), ) _CUSTOM_SPLITS_IMAGENET_22K = { - "imagenet_lvis-22k": ("imagenet/ImageNet-LVIS/", "imagenet/annotations/imagenet-22k_image_info_lvis-22k.json"), + "imagenet_lvis-22k": ( + "imagenet/ImageNet-LVIS/", + "imagenet/annotations/imagenet-22k_image_info_lvis-22k.json", + ), } for key, (image_root, json_file) in _CUSTOM_SPLITS_IMAGENET_22K.items(): @@ -38,4 +48,4 @@ def custom_register_imagenet_instances(name, metadata, json_file, image_root): get_lvis_22k_meta(), os.path.join("datasets", json_file) if "://" not in json_file else json_file, os.path.join("datasets", image_root), - ) \ No newline at end of file + ) diff --git a/dimos/models/Detic/detic/data/datasets/lvis_22k_categories.py b/dimos/models/Detic/detic/data/datasets/lvis_22k_categories.py index 9525f0873d..8e82fde536 100644 --- a/dimos/models/Detic/detic/data/datasets/lvis_22k_categories.py +++ b/dimos/models/Detic/detic/data/datasets/lvis_22k_categories.py @@ -1 +1,25798 @@ -CATEGORIES = [{'name': 'aerosol_can', 'id': 1, 'frequency': 'c', 'synset': 'aerosol.n.02'}, {'name': 'air_conditioner', 'id': 2, 'frequency': 'f', 'synset': 'air_conditioner.n.01'}, {'name': 'airplane', 'id': 3, 'frequency': 'f', 'synset': 'airplane.n.01'}, {'name': 'alarm_clock', 'id': 4, 'frequency': 'f', 'synset': 'alarm_clock.n.01'}, {'name': 'alcohol', 'id': 5, 'frequency': 'c', 'synset': 'alcohol.n.01'}, {'name': 'alligator', 'id': 6, 'frequency': 'c', 'synset': 'alligator.n.02'}, {'name': 'almond', 'id': 7, 'frequency': 'c', 'synset': 'almond.n.02'}, {'name': 'ambulance', 'id': 8, 'frequency': 'c', 'synset': 'ambulance.n.01'}, {'name': 'amplifier', 'id': 9, 'frequency': 'c', 'synset': 'amplifier.n.01'}, {'name': 'anklet', 'id': 10, 'frequency': 'c', 'synset': 'anklet.n.03'}, {'name': 'antenna', 'id': 11, 'frequency': 'f', 'synset': 'antenna.n.01'}, {'name': 'apple', 'id': 12, 'frequency': 'f', 'synset': 'apple.n.01'}, {'name': 'applesauce', 'id': 13, 'frequency': 'r', 'synset': 'applesauce.n.01'}, {'name': 'apricot', 'id': 14, 'frequency': 'r', 'synset': 'apricot.n.02'}, {'name': 'apron', 'id': 15, 'frequency': 'f', 'synset': 'apron.n.01'}, {'name': 'aquarium', 'id': 16, 'frequency': 'c', 'synset': 'aquarium.n.01'}, {'name': 'arctic_(type_of_shoe)', 'id': 17, 'frequency': 'r', 'synset': 'arctic.n.02'}, {'name': 'armband', 'id': 18, 'frequency': 'c', 'synset': 'armband.n.02'}, {'name': 'armchair', 'id': 19, 'frequency': 'f', 'synset': 'armchair.n.01'}, {'name': 'armoire', 'id': 20, 'frequency': 'r', 'synset': 'armoire.n.01'}, {'name': 'armor', 'id': 21, 'frequency': 'r', 'synset': 'armor.n.01'}, {'name': 'artichoke', 'id': 22, 'frequency': 'c', 'synset': 'artichoke.n.02'}, {'name': 'trash_can', 'id': 23, 'frequency': 'f', 'synset': 'ashcan.n.01'}, {'name': 'ashtray', 'id': 24, 'frequency': 'c', 'synset': 'ashtray.n.01'}, {'name': 'asparagus', 'id': 25, 'frequency': 'c', 'synset': 'asparagus.n.02'}, {'name': 'atomizer', 'id': 26, 'frequency': 'c', 'synset': 'atomizer.n.01'}, {'name': 'avocado', 'id': 27, 'frequency': 'f', 'synset': 'avocado.n.01'}, {'name': 'award', 'id': 28, 'frequency': 'c', 'synset': 'award.n.02'}, {'name': 'awning', 'id': 29, 'frequency': 'f', 'synset': 'awning.n.01'}, {'name': 'ax', 'id': 30, 'frequency': 'r', 'synset': 'ax.n.01'}, {'name': 'baboon', 'id': 31, 'frequency': 'r', 'synset': 'baboon.n.01'}, {'name': 'baby_buggy', 'id': 32, 'frequency': 'f', 'synset': 'baby_buggy.n.01'}, {'name': 'basketball_backboard', 'id': 33, 'frequency': 'c', 'synset': 'backboard.n.01'}, {'name': 'backpack', 'id': 34, 'frequency': 'f', 'synset': 'backpack.n.01'}, {'name': 'handbag', 'id': 35, 'frequency': 'f', 'synset': 'bag.n.04'}, {'name': 'suitcase', 'id': 36, 'frequency': 'f', 'synset': 'bag.n.06'}, {'name': 'bagel', 'id': 37, 'frequency': 'c', 'synset': 'bagel.n.01'}, {'name': 'bagpipe', 'id': 38, 'frequency': 'r', 'synset': 'bagpipe.n.01'}, {'name': 'baguet', 'id': 39, 'frequency': 'r', 'synset': 'baguet.n.01'}, {'name': 'bait', 'id': 40, 'frequency': 'r', 'synset': 'bait.n.02'}, {'name': 'ball', 'id': 41, 'frequency': 'f', 'synset': 'ball.n.06'}, {'name': 'ballet_skirt', 'id': 42, 'frequency': 'r', 'synset': 'ballet_skirt.n.01'}, {'name': 'balloon', 'id': 43, 'frequency': 'f', 'synset': 'balloon.n.01'}, {'name': 'bamboo', 'id': 44, 'frequency': 'c', 'synset': 'bamboo.n.02'}, {'name': 'banana', 'id': 45, 'frequency': 'f', 'synset': 'banana.n.02'}, {'name': 'Band_Aid', 'id': 46, 'frequency': 'c', 'synset': 'band_aid.n.01'}, {'name': 'bandage', 'id': 47, 'frequency': 'c', 'synset': 'bandage.n.01'}, {'name': 'bandanna', 'id': 48, 'frequency': 'f', 'synset': 'bandanna.n.01'}, {'name': 'banjo', 'id': 49, 'frequency': 'r', 'synset': 'banjo.n.01'}, {'name': 'banner', 'id': 50, 'frequency': 'f', 'synset': 'banner.n.01'}, {'name': 'barbell', 'id': 51, 'frequency': 'r', 'synset': 'barbell.n.01'}, {'name': 'barge', 'id': 52, 'frequency': 'r', 'synset': 'barge.n.01'}, {'name': 'barrel', 'id': 53, 'frequency': 'f', 'synset': 'barrel.n.02'}, {'name': 'barrette', 'id': 54, 'frequency': 'c', 'synset': 'barrette.n.01'}, {'name': 'barrow', 'id': 55, 'frequency': 'c', 'synset': 'barrow.n.03'}, {'name': 'baseball_base', 'id': 56, 'frequency': 'f', 'synset': 'base.n.03'}, {'name': 'baseball', 'id': 57, 'frequency': 'f', 'synset': 'baseball.n.02'}, {'name': 'baseball_bat', 'id': 58, 'frequency': 'f', 'synset': 'baseball_bat.n.01'}, {'name': 'baseball_cap', 'id': 59, 'frequency': 'f', 'synset': 'baseball_cap.n.01'}, {'name': 'baseball_glove', 'id': 60, 'frequency': 'f', 'synset': 'baseball_glove.n.01'}, {'name': 'basket', 'id': 61, 'frequency': 'f', 'synset': 'basket.n.01'}, {'name': 'basketball', 'id': 62, 'frequency': 'c', 'synset': 'basketball.n.02'}, {'name': 'bass_horn', 'id': 63, 'frequency': 'r', 'synset': 'bass_horn.n.01'}, {'name': 'bat_(animal)', 'id': 64, 'frequency': 'c', 'synset': 'bat.n.01'}, {'name': 'bath_mat', 'id': 65, 'frequency': 'f', 'synset': 'bath_mat.n.01'}, {'name': 'bath_towel', 'id': 66, 'frequency': 'f', 'synset': 'bath_towel.n.01'}, {'name': 'bathrobe', 'id': 67, 'frequency': 'c', 'synset': 'bathrobe.n.01'}, {'name': 'bathtub', 'id': 68, 'frequency': 'f', 'synset': 'bathtub.n.01'}, {'name': 'batter_(food)', 'id': 69, 'frequency': 'r', 'synset': 'batter.n.02'}, {'name': 'battery', 'id': 70, 'frequency': 'c', 'synset': 'battery.n.02'}, {'name': 'beachball', 'id': 71, 'frequency': 'r', 'synset': 'beach_ball.n.01'}, {'name': 'bead', 'id': 72, 'frequency': 'c', 'synset': 'bead.n.01'}, {'name': 'bean_curd', 'id': 73, 'frequency': 'c', 'synset': 'bean_curd.n.01'}, {'name': 'beanbag', 'id': 74, 'frequency': 'c', 'synset': 'beanbag.n.01'}, {'name': 'beanie', 'id': 75, 'frequency': 'f', 'synset': 'beanie.n.01'}, {'name': 'bear', 'id': 76, 'frequency': 'f', 'synset': 'bear.n.01'}, {'name': 'bed', 'id': 77, 'frequency': 'f', 'synset': 'bed.n.01'}, {'name': 'bedpan', 'id': 78, 'frequency': 'r', 'synset': 'bedpan.n.01'}, {'name': 'bedspread', 'id': 79, 'frequency': 'f', 'synset': 'bedspread.n.01'}, {'name': 'cow', 'id': 80, 'frequency': 'f', 'synset': 'beef.n.01'}, {'name': 'beef_(food)', 'id': 81, 'frequency': 'f', 'synset': 'beef.n.02'}, {'name': 'beeper', 'id': 82, 'frequency': 'r', 'synset': 'beeper.n.01'}, {'name': 'beer_bottle', 'id': 83, 'frequency': 'f', 'synset': 'beer_bottle.n.01'}, {'name': 'beer_can', 'id': 84, 'frequency': 'c', 'synset': 'beer_can.n.01'}, {'name': 'beetle', 'id': 85, 'frequency': 'r', 'synset': 'beetle.n.01'}, {'name': 'bell', 'id': 86, 'frequency': 'f', 'synset': 'bell.n.01'}, {'name': 'bell_pepper', 'id': 87, 'frequency': 'f', 'synset': 'bell_pepper.n.02'}, {'name': 'belt', 'id': 88, 'frequency': 'f', 'synset': 'belt.n.02'}, {'name': 'belt_buckle', 'id': 89, 'frequency': 'f', 'synset': 'belt_buckle.n.01'}, {'name': 'bench', 'id': 90, 'frequency': 'f', 'synset': 'bench.n.01'}, {'name': 'beret', 'id': 91, 'frequency': 'c', 'synset': 'beret.n.01'}, {'name': 'bib', 'id': 92, 'frequency': 'c', 'synset': 'bib.n.02'}, {'name': 'Bible', 'id': 93, 'frequency': 'r', 'synset': 'bible.n.01'}, {'name': 'bicycle', 'id': 94, 'frequency': 'f', 'synset': 'bicycle.n.01'}, {'name': 'visor', 'id': 95, 'frequency': 'f', 'synset': 'bill.n.09'}, {'name': 'billboard', 'id': 96, 'frequency': 'f', 'synset': 'billboard.n.01'}, {'name': 'binder', 'id': 97, 'frequency': 'c', 'synset': 'binder.n.03'}, {'name': 'binoculars', 'id': 98, 'frequency': 'c', 'synset': 'binoculars.n.01'}, {'name': 'bird', 'id': 99, 'frequency': 'f', 'synset': 'bird.n.01'}, {'name': 'birdfeeder', 'id': 100, 'frequency': 'c', 'synset': 'bird_feeder.n.01'}, {'name': 'birdbath', 'id': 101, 'frequency': 'c', 'synset': 'birdbath.n.01'}, {'name': 'birdcage', 'id': 102, 'frequency': 'c', 'synset': 'birdcage.n.01'}, {'name': 'birdhouse', 'id': 103, 'frequency': 'c', 'synset': 'birdhouse.n.01'}, {'name': 'birthday_cake', 'id': 104, 'frequency': 'f', 'synset': 'birthday_cake.n.01'}, {'name': 'birthday_card', 'id': 105, 'frequency': 'r', 'synset': 'birthday_card.n.01'}, {'name': 'pirate_flag', 'id': 106, 'frequency': 'r', 'synset': 'black_flag.n.01'}, {'name': 'black_sheep', 'id': 107, 'frequency': 'c', 'synset': 'black_sheep.n.02'}, {'name': 'blackberry', 'id': 108, 'frequency': 'c', 'synset': 'blackberry.n.01'}, {'name': 'blackboard', 'id': 109, 'frequency': 'f', 'synset': 'blackboard.n.01'}, {'name': 'blanket', 'id': 110, 'frequency': 'f', 'synset': 'blanket.n.01'}, {'name': 'blazer', 'id': 111, 'frequency': 'c', 'synset': 'blazer.n.01'}, {'name': 'blender', 'id': 112, 'frequency': 'f', 'synset': 'blender.n.01'}, {'name': 'blimp', 'id': 113, 'frequency': 'r', 'synset': 'blimp.n.02'}, {'name': 'blinker', 'id': 114, 'frequency': 'f', 'synset': 'blinker.n.01'}, {'name': 'blouse', 'id': 115, 'frequency': 'f', 'synset': 'blouse.n.01'}, {'name': 'blueberry', 'id': 116, 'frequency': 'f', 'synset': 'blueberry.n.02'}, {'name': 'gameboard', 'id': 117, 'frequency': 'r', 'synset': 'board.n.09'}, {'name': 'boat', 'id': 118, 'frequency': 'f', 'synset': 'boat.n.01'}, {'name': 'bob', 'id': 119, 'frequency': 'r', 'synset': 'bob.n.05'}, {'name': 'bobbin', 'id': 120, 'frequency': 'c', 'synset': 'bobbin.n.01'}, {'name': 'bobby_pin', 'id': 121, 'frequency': 'c', 'synset': 'bobby_pin.n.01'}, {'name': 'boiled_egg', 'id': 122, 'frequency': 'c', 'synset': 'boiled_egg.n.01'}, {'name': 'bolo_tie', 'id': 123, 'frequency': 'r', 'synset': 'bolo_tie.n.01'}, {'name': 'deadbolt', 'id': 124, 'frequency': 'c', 'synset': 'bolt.n.03'}, {'name': 'bolt', 'id': 125, 'frequency': 'f', 'synset': 'bolt.n.06'}, {'name': 'bonnet', 'id': 126, 'frequency': 'r', 'synset': 'bonnet.n.01'}, {'name': 'book', 'id': 127, 'frequency': 'f', 'synset': 'book.n.01'}, {'name': 'bookcase', 'id': 128, 'frequency': 'c', 'synset': 'bookcase.n.01'}, {'name': 'booklet', 'id': 129, 'frequency': 'c', 'synset': 'booklet.n.01'}, {'name': 'bookmark', 'id': 130, 'frequency': 'r', 'synset': 'bookmark.n.01'}, {'name': 'boom_microphone', 'id': 131, 'frequency': 'r', 'synset': 'boom.n.04'}, {'name': 'boot', 'id': 132, 'frequency': 'f', 'synset': 'boot.n.01'}, {'name': 'bottle', 'id': 133, 'frequency': 'f', 'synset': 'bottle.n.01'}, {'name': 'bottle_opener', 'id': 134, 'frequency': 'c', 'synset': 'bottle_opener.n.01'}, {'name': 'bouquet', 'id': 135, 'frequency': 'c', 'synset': 'bouquet.n.01'}, {'name': 'bow_(weapon)', 'id': 136, 'frequency': 'r', 'synset': 'bow.n.04'}, {'name': 'bow_(decorative_ribbons)', 'id': 137, 'frequency': 'f', 'synset': 'bow.n.08'}, {'name': 'bow-tie', 'id': 138, 'frequency': 'f', 'synset': 'bow_tie.n.01'}, {'name': 'bowl', 'id': 139, 'frequency': 'f', 'synset': 'bowl.n.03'}, {'name': 'pipe_bowl', 'id': 140, 'frequency': 'r', 'synset': 'bowl.n.08'}, {'name': 'bowler_hat', 'id': 141, 'frequency': 'c', 'synset': 'bowler_hat.n.01'}, {'name': 'bowling_ball', 'id': 142, 'frequency': 'r', 'synset': 'bowling_ball.n.01'}, {'name': 'box', 'id': 143, 'frequency': 'f', 'synset': 'box.n.01'}, {'name': 'boxing_glove', 'id': 144, 'frequency': 'r', 'synset': 'boxing_glove.n.01'}, {'name': 'suspenders', 'id': 145, 'frequency': 'c', 'synset': 'brace.n.06'}, {'name': 'bracelet', 'id': 146, 'frequency': 'f', 'synset': 'bracelet.n.02'}, {'name': 'brass_plaque', 'id': 147, 'frequency': 'r', 'synset': 'brass.n.07'}, {'name': 'brassiere', 'id': 148, 'frequency': 'c', 'synset': 'brassiere.n.01'}, {'name': 'bread-bin', 'id': 149, 'frequency': 'c', 'synset': 'bread-bin.n.01'}, {'name': 'bread', 'id': 150, 'frequency': 'f', 'synset': 'bread.n.01'}, {'name': 'breechcloth', 'id': 151, 'frequency': 'r', 'synset': 'breechcloth.n.01'}, {'name': 'bridal_gown', 'id': 152, 'frequency': 'f', 'synset': 'bridal_gown.n.01'}, {'name': 'briefcase', 'id': 153, 'frequency': 'c', 'synset': 'briefcase.n.01'}, {'name': 'broccoli', 'id': 154, 'frequency': 'f', 'synset': 'broccoli.n.01'}, {'name': 'broach', 'id': 155, 'frequency': 'r', 'synset': 'brooch.n.01'}, {'name': 'broom', 'id': 156, 'frequency': 'c', 'synset': 'broom.n.01'}, {'name': 'brownie', 'id': 157, 'frequency': 'c', 'synset': 'brownie.n.03'}, {'name': 'brussels_sprouts', 'id': 158, 'frequency': 'c', 'synset': 'brussels_sprouts.n.01'}, {'name': 'bubble_gum', 'id': 159, 'frequency': 'r', 'synset': 'bubble_gum.n.01'}, {'name': 'bucket', 'id': 160, 'frequency': 'f', 'synset': 'bucket.n.01'}, {'name': 'horse_buggy', 'id': 161, 'frequency': 'r', 'synset': 'buggy.n.01'}, {'name': 'bull', 'id': 162, 'frequency': 'c', 'synset': 'bull.n.11'}, {'name': 'bulldog', 'id': 163, 'frequency': 'c', 'synset': 'bulldog.n.01'}, {'name': 'bulldozer', 'id': 164, 'frequency': 'r', 'synset': 'bulldozer.n.01'}, {'name': 'bullet_train', 'id': 165, 'frequency': 'c', 'synset': 'bullet_train.n.01'}, {'name': 'bulletin_board', 'id': 166, 'frequency': 'c', 'synset': 'bulletin_board.n.02'}, {'name': 'bulletproof_vest', 'id': 167, 'frequency': 'r', 'synset': 'bulletproof_vest.n.01'}, {'name': 'bullhorn', 'id': 168, 'frequency': 'c', 'synset': 'bullhorn.n.01'}, {'name': 'bun', 'id': 169, 'frequency': 'f', 'synset': 'bun.n.01'}, {'name': 'bunk_bed', 'id': 170, 'frequency': 'c', 'synset': 'bunk_bed.n.01'}, {'name': 'buoy', 'id': 171, 'frequency': 'f', 'synset': 'buoy.n.01'}, {'name': 'burrito', 'id': 172, 'frequency': 'r', 'synset': 'burrito.n.01'}, {'name': 'bus_(vehicle)', 'id': 173, 'frequency': 'f', 'synset': 'bus.n.01'}, {'name': 'business_card', 'id': 174, 'frequency': 'c', 'synset': 'business_card.n.01'}, {'name': 'butter', 'id': 175, 'frequency': 'f', 'synset': 'butter.n.01'}, {'name': 'butterfly', 'id': 176, 'frequency': 'c', 'synset': 'butterfly.n.01'}, {'name': 'button', 'id': 177, 'frequency': 'f', 'synset': 'button.n.01'}, {'name': 'cab_(taxi)', 'id': 178, 'frequency': 'f', 'synset': 'cab.n.03'}, {'name': 'cabana', 'id': 179, 'frequency': 'r', 'synset': 'cabana.n.01'}, {'name': 'cabin_car', 'id': 180, 'frequency': 'c', 'synset': 'cabin_car.n.01'}, {'name': 'cabinet', 'id': 181, 'frequency': 'f', 'synset': 'cabinet.n.01'}, {'name': 'locker', 'id': 182, 'frequency': 'r', 'synset': 'cabinet.n.03'}, {'name': 'cake', 'id': 183, 'frequency': 'f', 'synset': 'cake.n.03'}, {'name': 'calculator', 'id': 184, 'frequency': 'c', 'synset': 'calculator.n.02'}, {'name': 'calendar', 'id': 185, 'frequency': 'f', 'synset': 'calendar.n.02'}, {'name': 'calf', 'id': 186, 'frequency': 'c', 'synset': 'calf.n.01'}, {'name': 'camcorder', 'id': 187, 'frequency': 'c', 'synset': 'camcorder.n.01'}, {'name': 'camel', 'id': 188, 'frequency': 'c', 'synset': 'camel.n.01'}, {'name': 'camera', 'id': 189, 'frequency': 'f', 'synset': 'camera.n.01'}, {'name': 'camera_lens', 'id': 190, 'frequency': 'c', 'synset': 'camera_lens.n.01'}, {'name': 'camper_(vehicle)', 'id': 191, 'frequency': 'c', 'synset': 'camper.n.02'}, {'name': 'can', 'id': 192, 'frequency': 'f', 'synset': 'can.n.01'}, {'name': 'can_opener', 'id': 193, 'frequency': 'c', 'synset': 'can_opener.n.01'}, {'name': 'candle', 'id': 194, 'frequency': 'f', 'synset': 'candle.n.01'}, {'name': 'candle_holder', 'id': 195, 'frequency': 'f', 'synset': 'candlestick.n.01'}, {'name': 'candy_bar', 'id': 196, 'frequency': 'r', 'synset': 'candy_bar.n.01'}, {'name': 'candy_cane', 'id': 197, 'frequency': 'c', 'synset': 'candy_cane.n.01'}, {'name': 'walking_cane', 'id': 198, 'frequency': 'c', 'synset': 'cane.n.01'}, {'name': 'canister', 'id': 199, 'frequency': 'c', 'synset': 'canister.n.02'}, {'name': 'canoe', 'id': 200, 'frequency': 'c', 'synset': 'canoe.n.01'}, {'name': 'cantaloup', 'id': 201, 'frequency': 'c', 'synset': 'cantaloup.n.02'}, {'name': 'canteen', 'id': 202, 'frequency': 'r', 'synset': 'canteen.n.01'}, {'name': 'cap_(headwear)', 'id': 203, 'frequency': 'f', 'synset': 'cap.n.01'}, {'name': 'bottle_cap', 'id': 204, 'frequency': 'f', 'synset': 'cap.n.02'}, {'name': 'cape', 'id': 205, 'frequency': 'c', 'synset': 'cape.n.02'}, {'name': 'cappuccino', 'id': 206, 'frequency': 'c', 'synset': 'cappuccino.n.01'}, {'name': 'car_(automobile)', 'id': 207, 'frequency': 'f', 'synset': 'car.n.01'}, {'name': 'railcar_(part_of_a_train)', 'id': 208, 'frequency': 'f', 'synset': 'car.n.02'}, {'name': 'elevator_car', 'id': 209, 'frequency': 'r', 'synset': 'car.n.04'}, {'name': 'car_battery', 'id': 210, 'frequency': 'r', 'synset': 'car_battery.n.01'}, {'name': 'identity_card', 'id': 211, 'frequency': 'c', 'synset': 'card.n.02'}, {'name': 'card', 'id': 212, 'frequency': 'c', 'synset': 'card.n.03'}, {'name': 'cardigan', 'id': 213, 'frequency': 'c', 'synset': 'cardigan.n.01'}, {'name': 'cargo_ship', 'id': 214, 'frequency': 'r', 'synset': 'cargo_ship.n.01'}, {'name': 'carnation', 'id': 215, 'frequency': 'r', 'synset': 'carnation.n.01'}, {'name': 'horse_carriage', 'id': 216, 'frequency': 'c', 'synset': 'carriage.n.02'}, {'name': 'carrot', 'id': 217, 'frequency': 'f', 'synset': 'carrot.n.01'}, {'name': 'tote_bag', 'id': 218, 'frequency': 'f', 'synset': 'carryall.n.01'}, {'name': 'cart', 'id': 219, 'frequency': 'c', 'synset': 'cart.n.01'}, {'name': 'carton', 'id': 220, 'frequency': 'c', 'synset': 'carton.n.02'}, {'name': 'cash_register', 'id': 221, 'frequency': 'c', 'synset': 'cash_register.n.01'}, {'name': 'casserole', 'id': 222, 'frequency': 'r', 'synset': 'casserole.n.01'}, {'name': 'cassette', 'id': 223, 'frequency': 'r', 'synset': 'cassette.n.01'}, {'name': 'cast', 'id': 224, 'frequency': 'c', 'synset': 'cast.n.05'}, {'name': 'cat', 'id': 225, 'frequency': 'f', 'synset': 'cat.n.01'}, {'name': 'cauliflower', 'id': 226, 'frequency': 'f', 'synset': 'cauliflower.n.02'}, {'name': 'cayenne_(spice)', 'id': 227, 'frequency': 'c', 'synset': 'cayenne.n.02'}, {'name': 'CD_player', 'id': 228, 'frequency': 'c', 'synset': 'cd_player.n.01'}, {'name': 'celery', 'id': 229, 'frequency': 'f', 'synset': 'celery.n.01'}, {'name': 'cellular_telephone', 'id': 230, 'frequency': 'f', 'synset': 'cellular_telephone.n.01'}, {'name': 'chain_mail', 'id': 231, 'frequency': 'r', 'synset': 'chain_mail.n.01'}, {'name': 'chair', 'id': 232, 'frequency': 'f', 'synset': 'chair.n.01'}, {'name': 'chaise_longue', 'id': 233, 'frequency': 'r', 'synset': 'chaise_longue.n.01'}, {'name': 'chalice', 'id': 234, 'frequency': 'r', 'synset': 'chalice.n.01'}, {'name': 'chandelier', 'id': 235, 'frequency': 'f', 'synset': 'chandelier.n.01'}, {'name': 'chap', 'id': 236, 'frequency': 'r', 'synset': 'chap.n.04'}, {'name': 'checkbook', 'id': 237, 'frequency': 'r', 'synset': 'checkbook.n.01'}, {'name': 'checkerboard', 'id': 238, 'frequency': 'r', 'synset': 'checkerboard.n.01'}, {'name': 'cherry', 'id': 239, 'frequency': 'c', 'synset': 'cherry.n.03'}, {'name': 'chessboard', 'id': 240, 'frequency': 'r', 'synset': 'chessboard.n.01'}, {'name': 'chicken_(animal)', 'id': 241, 'frequency': 'c', 'synset': 'chicken.n.02'}, {'name': 'chickpea', 'id': 242, 'frequency': 'c', 'synset': 'chickpea.n.01'}, {'name': 'chili_(vegetable)', 'id': 243, 'frequency': 'c', 'synset': 'chili.n.02'}, {'name': 'chime', 'id': 244, 'frequency': 'r', 'synset': 'chime.n.01'}, {'name': 'chinaware', 'id': 245, 'frequency': 'r', 'synset': 'chinaware.n.01'}, {'name': 'crisp_(potato_chip)', 'id': 246, 'frequency': 'c', 'synset': 'chip.n.04'}, {'name': 'poker_chip', 'id': 247, 'frequency': 'r', 'synset': 'chip.n.06'}, {'name': 'chocolate_bar', 'id': 248, 'frequency': 'c', 'synset': 'chocolate_bar.n.01'}, {'name': 'chocolate_cake', 'id': 249, 'frequency': 'c', 'synset': 'chocolate_cake.n.01'}, {'name': 'chocolate_milk', 'id': 250, 'frequency': 'r', 'synset': 'chocolate_milk.n.01'}, {'name': 'chocolate_mousse', 'id': 251, 'frequency': 'r', 'synset': 'chocolate_mousse.n.01'}, {'name': 'choker', 'id': 252, 'frequency': 'f', 'synset': 'choker.n.03'}, {'name': 'chopping_board', 'id': 253, 'frequency': 'f', 'synset': 'chopping_board.n.01'}, {'name': 'chopstick', 'id': 254, 'frequency': 'f', 'synset': 'chopstick.n.01'}, {'name': 'Christmas_tree', 'id': 255, 'frequency': 'f', 'synset': 'christmas_tree.n.05'}, {'name': 'slide', 'id': 256, 'frequency': 'c', 'synset': 'chute.n.02'}, {'name': 'cider', 'id': 257, 'frequency': 'r', 'synset': 'cider.n.01'}, {'name': 'cigar_box', 'id': 258, 'frequency': 'r', 'synset': 'cigar_box.n.01'}, {'name': 'cigarette', 'id': 259, 'frequency': 'f', 'synset': 'cigarette.n.01'}, {'name': 'cigarette_case', 'id': 260, 'frequency': 'c', 'synset': 'cigarette_case.n.01'}, {'name': 'cistern', 'id': 261, 'frequency': 'f', 'synset': 'cistern.n.02'}, {'name': 'clarinet', 'id': 262, 'frequency': 'r', 'synset': 'clarinet.n.01'}, {'name': 'clasp', 'id': 263, 'frequency': 'c', 'synset': 'clasp.n.01'}, {'name': 'cleansing_agent', 'id': 264, 'frequency': 'c', 'synset': 'cleansing_agent.n.01'}, {'name': 'cleat_(for_securing_rope)', 'id': 265, 'frequency': 'r', 'synset': 'cleat.n.02'}, {'name': 'clementine', 'id': 266, 'frequency': 'r', 'synset': 'clementine.n.01'}, {'name': 'clip', 'id': 267, 'frequency': 'c', 'synset': 'clip.n.03'}, {'name': 'clipboard', 'id': 268, 'frequency': 'c', 'synset': 'clipboard.n.01'}, {'name': 'clippers_(for_plants)', 'id': 269, 'frequency': 'r', 'synset': 'clipper.n.03'}, {'name': 'cloak', 'id': 270, 'frequency': 'r', 'synset': 'cloak.n.02'}, {'name': 'clock', 'id': 271, 'frequency': 'f', 'synset': 'clock.n.01'}, {'name': 'clock_tower', 'id': 272, 'frequency': 'f', 'synset': 'clock_tower.n.01'}, {'name': 'clothes_hamper', 'id': 273, 'frequency': 'c', 'synset': 'clothes_hamper.n.01'}, {'name': 'clothespin', 'id': 274, 'frequency': 'c', 'synset': 'clothespin.n.01'}, {'name': 'clutch_bag', 'id': 275, 'frequency': 'r', 'synset': 'clutch_bag.n.01'}, {'name': 'coaster', 'id': 276, 'frequency': 'f', 'synset': 'coaster.n.03'}, {'name': 'coat', 'id': 277, 'frequency': 'f', 'synset': 'coat.n.01'}, {'name': 'coat_hanger', 'id': 278, 'frequency': 'c', 'synset': 'coat_hanger.n.01'}, {'name': 'coatrack', 'id': 279, 'frequency': 'c', 'synset': 'coatrack.n.01'}, {'name': 'cock', 'id': 280, 'frequency': 'c', 'synset': 'cock.n.04'}, {'name': 'cockroach', 'id': 281, 'frequency': 'r', 'synset': 'cockroach.n.01'}, {'name': 'cocoa_(beverage)', 'id': 282, 'frequency': 'r', 'synset': 'cocoa.n.01'}, {'name': 'coconut', 'id': 283, 'frequency': 'c', 'synset': 'coconut.n.02'}, {'name': 'coffee_maker', 'id': 284, 'frequency': 'f', 'synset': 'coffee_maker.n.01'}, {'name': 'coffee_table', 'id': 285, 'frequency': 'f', 'synset': 'coffee_table.n.01'}, {'name': 'coffeepot', 'id': 286, 'frequency': 'c', 'synset': 'coffeepot.n.01'}, {'name': 'coil', 'id': 287, 'frequency': 'r', 'synset': 'coil.n.05'}, {'name': 'coin', 'id': 288, 'frequency': 'c', 'synset': 'coin.n.01'}, {'name': 'colander', 'id': 289, 'frequency': 'c', 'synset': 'colander.n.01'}, {'name': 'coleslaw', 'id': 290, 'frequency': 'c', 'synset': 'coleslaw.n.01'}, {'name': 'coloring_material', 'id': 291, 'frequency': 'r', 'synset': 'coloring_material.n.01'}, {'name': 'combination_lock', 'id': 292, 'frequency': 'r', 'synset': 'combination_lock.n.01'}, {'name': 'pacifier', 'id': 293, 'frequency': 'c', 'synset': 'comforter.n.04'}, {'name': 'comic_book', 'id': 294, 'frequency': 'r', 'synset': 'comic_book.n.01'}, {'name': 'compass', 'id': 295, 'frequency': 'r', 'synset': 'compass.n.01'}, {'name': 'computer_keyboard', 'id': 296, 'frequency': 'f', 'synset': 'computer_keyboard.n.01'}, {'name': 'condiment', 'id': 297, 'frequency': 'f', 'synset': 'condiment.n.01'}, {'name': 'cone', 'id': 298, 'frequency': 'f', 'synset': 'cone.n.01'}, {'name': 'control', 'id': 299, 'frequency': 'f', 'synset': 'control.n.09'}, {'name': 'convertible_(automobile)', 'id': 300, 'frequency': 'r', 'synset': 'convertible.n.01'}, {'name': 'sofa_bed', 'id': 301, 'frequency': 'r', 'synset': 'convertible.n.03'}, {'name': 'cooker', 'id': 302, 'frequency': 'r', 'synset': 'cooker.n.01'}, {'name': 'cookie', 'id': 303, 'frequency': 'f', 'synset': 'cookie.n.01'}, {'name': 'cooking_utensil', 'id': 304, 'frequency': 'r', 'synset': 'cooking_utensil.n.01'}, {'name': 'cooler_(for_food)', 'id': 305, 'frequency': 'f', 'synset': 'cooler.n.01'}, {'name': 'cork_(bottle_plug)', 'id': 306, 'frequency': 'f', 'synset': 'cork.n.04'}, {'name': 'corkboard', 'id': 307, 'frequency': 'r', 'synset': 'corkboard.n.01'}, {'name': 'corkscrew', 'id': 308, 'frequency': 'c', 'synset': 'corkscrew.n.01'}, {'name': 'edible_corn', 'id': 309, 'frequency': 'f', 'synset': 'corn.n.03'}, {'name': 'cornbread', 'id': 310, 'frequency': 'r', 'synset': 'cornbread.n.01'}, {'name': 'cornet', 'id': 311, 'frequency': 'c', 'synset': 'cornet.n.01'}, {'name': 'cornice', 'id': 312, 'frequency': 'c', 'synset': 'cornice.n.01'}, {'name': 'cornmeal', 'id': 313, 'frequency': 'r', 'synset': 'cornmeal.n.01'}, {'name': 'corset', 'id': 314, 'frequency': 'c', 'synset': 'corset.n.01'}, {'name': 'costume', 'id': 315, 'frequency': 'c', 'synset': 'costume.n.04'}, {'name': 'cougar', 'id': 316, 'frequency': 'r', 'synset': 'cougar.n.01'}, {'name': 'coverall', 'id': 317, 'frequency': 'r', 'synset': 'coverall.n.01'}, {'name': 'cowbell', 'id': 318, 'frequency': 'c', 'synset': 'cowbell.n.01'}, {'name': 'cowboy_hat', 'id': 319, 'frequency': 'f', 'synset': 'cowboy_hat.n.01'}, {'name': 'crab_(animal)', 'id': 320, 'frequency': 'c', 'synset': 'crab.n.01'}, {'name': 'crabmeat', 'id': 321, 'frequency': 'r', 'synset': 'crab.n.05'}, {'name': 'cracker', 'id': 322, 'frequency': 'c', 'synset': 'cracker.n.01'}, {'name': 'crape', 'id': 323, 'frequency': 'r', 'synset': 'crape.n.01'}, {'name': 'crate', 'id': 324, 'frequency': 'f', 'synset': 'crate.n.01'}, {'name': 'crayon', 'id': 325, 'frequency': 'c', 'synset': 'crayon.n.01'}, {'name': 'cream_pitcher', 'id': 326, 'frequency': 'r', 'synset': 'cream_pitcher.n.01'}, {'name': 'crescent_roll', 'id': 327, 'frequency': 'c', 'synset': 'crescent_roll.n.01'}, {'name': 'crib', 'id': 328, 'frequency': 'c', 'synset': 'crib.n.01'}, {'name': 'crock_pot', 'id': 329, 'frequency': 'c', 'synset': 'crock.n.03'}, {'name': 'crossbar', 'id': 330, 'frequency': 'f', 'synset': 'crossbar.n.01'}, {'name': 'crouton', 'id': 331, 'frequency': 'r', 'synset': 'crouton.n.01'}, {'name': 'crow', 'id': 332, 'frequency': 'c', 'synset': 'crow.n.01'}, {'name': 'crowbar', 'id': 333, 'frequency': 'r', 'synset': 'crowbar.n.01'}, {'name': 'crown', 'id': 334, 'frequency': 'c', 'synset': 'crown.n.04'}, {'name': 'crucifix', 'id': 335, 'frequency': 'c', 'synset': 'crucifix.n.01'}, {'name': 'cruise_ship', 'id': 336, 'frequency': 'c', 'synset': 'cruise_ship.n.01'}, {'name': 'police_cruiser', 'id': 337, 'frequency': 'c', 'synset': 'cruiser.n.01'}, {'name': 'crumb', 'id': 338, 'frequency': 'f', 'synset': 'crumb.n.03'}, {'name': 'crutch', 'id': 339, 'frequency': 'c', 'synset': 'crutch.n.01'}, {'name': 'cub_(animal)', 'id': 340, 'frequency': 'c', 'synset': 'cub.n.03'}, {'name': 'cube', 'id': 341, 'frequency': 'c', 'synset': 'cube.n.05'}, {'name': 'cucumber', 'id': 342, 'frequency': 'f', 'synset': 'cucumber.n.02'}, {'name': 'cufflink', 'id': 343, 'frequency': 'c', 'synset': 'cufflink.n.01'}, {'name': 'cup', 'id': 344, 'frequency': 'f', 'synset': 'cup.n.01'}, {'name': 'trophy_cup', 'id': 345, 'frequency': 'c', 'synset': 'cup.n.08'}, {'name': 'cupboard', 'id': 346, 'frequency': 'f', 'synset': 'cupboard.n.01'}, {'name': 'cupcake', 'id': 347, 'frequency': 'f', 'synset': 'cupcake.n.01'}, {'name': 'hair_curler', 'id': 348, 'frequency': 'r', 'synset': 'curler.n.01'}, {'name': 'curling_iron', 'id': 349, 'frequency': 'r', 'synset': 'curling_iron.n.01'}, {'name': 'curtain', 'id': 350, 'frequency': 'f', 'synset': 'curtain.n.01'}, {'name': 'cushion', 'id': 351, 'frequency': 'f', 'synset': 'cushion.n.03'}, {'name': 'cylinder', 'id': 352, 'frequency': 'r', 'synset': 'cylinder.n.04'}, {'name': 'cymbal', 'id': 353, 'frequency': 'r', 'synset': 'cymbal.n.01'}, {'name': 'dagger', 'id': 354, 'frequency': 'r', 'synset': 'dagger.n.01'}, {'name': 'dalmatian', 'id': 355, 'frequency': 'r', 'synset': 'dalmatian.n.02'}, {'name': 'dartboard', 'id': 356, 'frequency': 'c', 'synset': 'dartboard.n.01'}, {'name': 'date_(fruit)', 'id': 357, 'frequency': 'r', 'synset': 'date.n.08'}, {'name': 'deck_chair', 'id': 358, 'frequency': 'f', 'synset': 'deck_chair.n.01'}, {'name': 'deer', 'id': 359, 'frequency': 'c', 'synset': 'deer.n.01'}, {'name': 'dental_floss', 'id': 360, 'frequency': 'c', 'synset': 'dental_floss.n.01'}, {'name': 'desk', 'id': 361, 'frequency': 'f', 'synset': 'desk.n.01'}, {'name': 'detergent', 'id': 362, 'frequency': 'r', 'synset': 'detergent.n.01'}, {'name': 'diaper', 'id': 363, 'frequency': 'c', 'synset': 'diaper.n.01'}, {'name': 'diary', 'id': 364, 'frequency': 'r', 'synset': 'diary.n.01'}, {'name': 'die', 'id': 365, 'frequency': 'r', 'synset': 'die.n.01'}, {'name': 'dinghy', 'id': 366, 'frequency': 'r', 'synset': 'dinghy.n.01'}, {'name': 'dining_table', 'id': 367, 'frequency': 'f', 'synset': 'dining_table.n.01'}, {'name': 'tux', 'id': 368, 'frequency': 'r', 'synset': 'dinner_jacket.n.01'}, {'name': 'dish', 'id': 369, 'frequency': 'f', 'synset': 'dish.n.01'}, {'name': 'dish_antenna', 'id': 370, 'frequency': 'c', 'synset': 'dish.n.05'}, {'name': 'dishrag', 'id': 371, 'frequency': 'c', 'synset': 'dishrag.n.01'}, {'name': 'dishtowel', 'id': 372, 'frequency': 'f', 'synset': 'dishtowel.n.01'}, {'name': 'dishwasher', 'id': 373, 'frequency': 'f', 'synset': 'dishwasher.n.01'}, {'name': 'dishwasher_detergent', 'id': 374, 'frequency': 'r', 'synset': 'dishwasher_detergent.n.01'}, {'name': 'dispenser', 'id': 375, 'frequency': 'f', 'synset': 'dispenser.n.01'}, {'name': 'diving_board', 'id': 376, 'frequency': 'r', 'synset': 'diving_board.n.01'}, {'name': 'Dixie_cup', 'id': 377, 'frequency': 'f', 'synset': 'dixie_cup.n.01'}, {'name': 'dog', 'id': 378, 'frequency': 'f', 'synset': 'dog.n.01'}, {'name': 'dog_collar', 'id': 379, 'frequency': 'f', 'synset': 'dog_collar.n.01'}, {'name': 'doll', 'id': 380, 'frequency': 'f', 'synset': 'doll.n.01'}, {'name': 'dollar', 'id': 381, 'frequency': 'r', 'synset': 'dollar.n.02'}, {'name': 'dollhouse', 'id': 382, 'frequency': 'r', 'synset': 'dollhouse.n.01'}, {'name': 'dolphin', 'id': 383, 'frequency': 'c', 'synset': 'dolphin.n.02'}, {'name': 'domestic_ass', 'id': 384, 'frequency': 'c', 'synset': 'domestic_ass.n.01'}, {'name': 'doorknob', 'id': 385, 'frequency': 'f', 'synset': 'doorknob.n.01'}, {'name': 'doormat', 'id': 386, 'frequency': 'c', 'synset': 'doormat.n.02'}, {'name': 'doughnut', 'id': 387, 'frequency': 'f', 'synset': 'doughnut.n.02'}, {'name': 'dove', 'id': 388, 'frequency': 'r', 'synset': 'dove.n.01'}, {'name': 'dragonfly', 'id': 389, 'frequency': 'r', 'synset': 'dragonfly.n.01'}, {'name': 'drawer', 'id': 390, 'frequency': 'f', 'synset': 'drawer.n.01'}, {'name': 'underdrawers', 'id': 391, 'frequency': 'c', 'synset': 'drawers.n.01'}, {'name': 'dress', 'id': 392, 'frequency': 'f', 'synset': 'dress.n.01'}, {'name': 'dress_hat', 'id': 393, 'frequency': 'c', 'synset': 'dress_hat.n.01'}, {'name': 'dress_suit', 'id': 394, 'frequency': 'f', 'synset': 'dress_suit.n.01'}, {'name': 'dresser', 'id': 395, 'frequency': 'f', 'synset': 'dresser.n.05'}, {'name': 'drill', 'id': 396, 'frequency': 'c', 'synset': 'drill.n.01'}, {'name': 'drone', 'id': 397, 'frequency': 'r', 'synset': 'drone.n.04'}, {'name': 'dropper', 'id': 398, 'frequency': 'r', 'synset': 'dropper.n.01'}, {'name': 'drum_(musical_instrument)', 'id': 399, 'frequency': 'c', 'synset': 'drum.n.01'}, {'name': 'drumstick', 'id': 400, 'frequency': 'r', 'synset': 'drumstick.n.02'}, {'name': 'duck', 'id': 401, 'frequency': 'f', 'synset': 'duck.n.01'}, {'name': 'duckling', 'id': 402, 'frequency': 'c', 'synset': 'duckling.n.02'}, {'name': 'duct_tape', 'id': 403, 'frequency': 'c', 'synset': 'duct_tape.n.01'}, {'name': 'duffel_bag', 'id': 404, 'frequency': 'f', 'synset': 'duffel_bag.n.01'}, {'name': 'dumbbell', 'id': 405, 'frequency': 'r', 'synset': 'dumbbell.n.01'}, {'name': 'dumpster', 'id': 406, 'frequency': 'c', 'synset': 'dumpster.n.01'}, {'name': 'dustpan', 'id': 407, 'frequency': 'r', 'synset': 'dustpan.n.02'}, {'name': 'eagle', 'id': 408, 'frequency': 'c', 'synset': 'eagle.n.01'}, {'name': 'earphone', 'id': 409, 'frequency': 'f', 'synset': 'earphone.n.01'}, {'name': 'earplug', 'id': 410, 'frequency': 'r', 'synset': 'earplug.n.01'}, {'name': 'earring', 'id': 411, 'frequency': 'f', 'synset': 'earring.n.01'}, {'name': 'easel', 'id': 412, 'frequency': 'c', 'synset': 'easel.n.01'}, {'name': 'eclair', 'id': 413, 'frequency': 'r', 'synset': 'eclair.n.01'}, {'name': 'eel', 'id': 414, 'frequency': 'r', 'synset': 'eel.n.01'}, {'name': 'egg', 'id': 415, 'frequency': 'f', 'synset': 'egg.n.02'}, {'name': 'egg_roll', 'id': 416, 'frequency': 'r', 'synset': 'egg_roll.n.01'}, {'name': 'egg_yolk', 'id': 417, 'frequency': 'c', 'synset': 'egg_yolk.n.01'}, {'name': 'eggbeater', 'id': 418, 'frequency': 'c', 'synset': 'eggbeater.n.02'}, {'name': 'eggplant', 'id': 419, 'frequency': 'c', 'synset': 'eggplant.n.01'}, {'name': 'electric_chair', 'id': 420, 'frequency': 'r', 'synset': 'electric_chair.n.01'}, {'name': 'refrigerator', 'id': 421, 'frequency': 'f', 'synset': 'electric_refrigerator.n.01'}, {'name': 'elephant', 'id': 422, 'frequency': 'f', 'synset': 'elephant.n.01'}, {'name': 'elk', 'id': 423, 'frequency': 'c', 'synset': 'elk.n.01'}, {'name': 'envelope', 'id': 424, 'frequency': 'c', 'synset': 'envelope.n.01'}, {'name': 'eraser', 'id': 425, 'frequency': 'c', 'synset': 'eraser.n.01'}, {'name': 'escargot', 'id': 426, 'frequency': 'r', 'synset': 'escargot.n.01'}, {'name': 'eyepatch', 'id': 427, 'frequency': 'r', 'synset': 'eyepatch.n.01'}, {'name': 'falcon', 'id': 428, 'frequency': 'r', 'synset': 'falcon.n.01'}, {'name': 'fan', 'id': 429, 'frequency': 'f', 'synset': 'fan.n.01'}, {'name': 'faucet', 'id': 430, 'frequency': 'f', 'synset': 'faucet.n.01'}, {'name': 'fedora', 'id': 431, 'frequency': 'r', 'synset': 'fedora.n.01'}, {'name': 'ferret', 'id': 432, 'frequency': 'r', 'synset': 'ferret.n.02'}, {'name': 'Ferris_wheel', 'id': 433, 'frequency': 'c', 'synset': 'ferris_wheel.n.01'}, {'name': 'ferry', 'id': 434, 'frequency': 'c', 'synset': 'ferry.n.01'}, {'name': 'fig_(fruit)', 'id': 435, 'frequency': 'r', 'synset': 'fig.n.04'}, {'name': 'fighter_jet', 'id': 436, 'frequency': 'c', 'synset': 'fighter.n.02'}, {'name': 'figurine', 'id': 437, 'frequency': 'f', 'synset': 'figurine.n.01'}, {'name': 'file_cabinet', 'id': 438, 'frequency': 'c', 'synset': 'file.n.03'}, {'name': 'file_(tool)', 'id': 439, 'frequency': 'r', 'synset': 'file.n.04'}, {'name': 'fire_alarm', 'id': 440, 'frequency': 'f', 'synset': 'fire_alarm.n.02'}, {'name': 'fire_engine', 'id': 441, 'frequency': 'f', 'synset': 'fire_engine.n.01'}, {'name': 'fire_extinguisher', 'id': 442, 'frequency': 'f', 'synset': 'fire_extinguisher.n.01'}, {'name': 'fire_hose', 'id': 443, 'frequency': 'c', 'synset': 'fire_hose.n.01'}, {'name': 'fireplace', 'id': 444, 'frequency': 'f', 'synset': 'fireplace.n.01'}, {'name': 'fireplug', 'id': 445, 'frequency': 'f', 'synset': 'fireplug.n.01'}, {'name': 'first-aid_kit', 'id': 446, 'frequency': 'r', 'synset': 'first-aid_kit.n.01'}, {'name': 'fish', 'id': 447, 'frequency': 'f', 'synset': 'fish.n.01'}, {'name': 'fish_(food)', 'id': 448, 'frequency': 'c', 'synset': 'fish.n.02'}, {'name': 'fishbowl', 'id': 449, 'frequency': 'r', 'synset': 'fishbowl.n.02'}, {'name': 'fishing_rod', 'id': 450, 'frequency': 'c', 'synset': 'fishing_rod.n.01'}, {'name': 'flag', 'id': 451, 'frequency': 'f', 'synset': 'flag.n.01'}, {'name': 'flagpole', 'id': 452, 'frequency': 'f', 'synset': 'flagpole.n.02'}, {'name': 'flamingo', 'id': 453, 'frequency': 'c', 'synset': 'flamingo.n.01'}, {'name': 'flannel', 'id': 454, 'frequency': 'c', 'synset': 'flannel.n.01'}, {'name': 'flap', 'id': 455, 'frequency': 'c', 'synset': 'flap.n.01'}, {'name': 'flash', 'id': 456, 'frequency': 'r', 'synset': 'flash.n.10'}, {'name': 'flashlight', 'id': 457, 'frequency': 'c', 'synset': 'flashlight.n.01'}, {'name': 'fleece', 'id': 458, 'frequency': 'r', 'synset': 'fleece.n.03'}, {'name': 'flip-flop_(sandal)', 'id': 459, 'frequency': 'f', 'synset': 'flip-flop.n.02'}, {'name': 'flipper_(footwear)', 'id': 460, 'frequency': 'c', 'synset': 'flipper.n.01'}, {'name': 'flower_arrangement', 'id': 461, 'frequency': 'f', 'synset': 'flower_arrangement.n.01'}, {'name': 'flute_glass', 'id': 462, 'frequency': 'c', 'synset': 'flute.n.02'}, {'name': 'foal', 'id': 463, 'frequency': 'c', 'synset': 'foal.n.01'}, {'name': 'folding_chair', 'id': 464, 'frequency': 'c', 'synset': 'folding_chair.n.01'}, {'name': 'food_processor', 'id': 465, 'frequency': 'c', 'synset': 'food_processor.n.01'}, {'name': 'football_(American)', 'id': 466, 'frequency': 'c', 'synset': 'football.n.02'}, {'name': 'football_helmet', 'id': 467, 'frequency': 'r', 'synset': 'football_helmet.n.01'}, {'name': 'footstool', 'id': 468, 'frequency': 'c', 'synset': 'footstool.n.01'}, {'name': 'fork', 'id': 469, 'frequency': 'f', 'synset': 'fork.n.01'}, {'name': 'forklift', 'id': 470, 'frequency': 'c', 'synset': 'forklift.n.01'}, {'name': 'freight_car', 'id': 471, 'frequency': 'c', 'synset': 'freight_car.n.01'}, {'name': 'French_toast', 'id': 472, 'frequency': 'c', 'synset': 'french_toast.n.01'}, {'name': 'freshener', 'id': 473, 'frequency': 'c', 'synset': 'freshener.n.01'}, {'name': 'frisbee', 'id': 474, 'frequency': 'f', 'synset': 'frisbee.n.01'}, {'name': 'frog', 'id': 475, 'frequency': 'c', 'synset': 'frog.n.01'}, {'name': 'fruit_juice', 'id': 476, 'frequency': 'c', 'synset': 'fruit_juice.n.01'}, {'name': 'frying_pan', 'id': 477, 'frequency': 'f', 'synset': 'frying_pan.n.01'}, {'name': 'fudge', 'id': 478, 'frequency': 'r', 'synset': 'fudge.n.01'}, {'name': 'funnel', 'id': 479, 'frequency': 'r', 'synset': 'funnel.n.02'}, {'name': 'futon', 'id': 480, 'frequency': 'r', 'synset': 'futon.n.01'}, {'name': 'gag', 'id': 481, 'frequency': 'r', 'synset': 'gag.n.02'}, {'name': 'garbage', 'id': 482, 'frequency': 'r', 'synset': 'garbage.n.03'}, {'name': 'garbage_truck', 'id': 483, 'frequency': 'c', 'synset': 'garbage_truck.n.01'}, {'name': 'garden_hose', 'id': 484, 'frequency': 'c', 'synset': 'garden_hose.n.01'}, {'name': 'gargle', 'id': 485, 'frequency': 'c', 'synset': 'gargle.n.01'}, {'name': 'gargoyle', 'id': 486, 'frequency': 'r', 'synset': 'gargoyle.n.02'}, {'name': 'garlic', 'id': 487, 'frequency': 'c', 'synset': 'garlic.n.02'}, {'name': 'gasmask', 'id': 488, 'frequency': 'r', 'synset': 'gasmask.n.01'}, {'name': 'gazelle', 'id': 489, 'frequency': 'c', 'synset': 'gazelle.n.01'}, {'name': 'gelatin', 'id': 490, 'frequency': 'c', 'synset': 'gelatin.n.02'}, {'name': 'gemstone', 'id': 491, 'frequency': 'r', 'synset': 'gem.n.02'}, {'name': 'generator', 'id': 492, 'frequency': 'r', 'synset': 'generator.n.02'}, {'name': 'giant_panda', 'id': 493, 'frequency': 'c', 'synset': 'giant_panda.n.01'}, {'name': 'gift_wrap', 'id': 494, 'frequency': 'c', 'synset': 'gift_wrap.n.01'}, {'name': 'ginger', 'id': 495, 'frequency': 'c', 'synset': 'ginger.n.03'}, {'name': 'giraffe', 'id': 496, 'frequency': 'f', 'synset': 'giraffe.n.01'}, {'name': 'cincture', 'id': 497, 'frequency': 'c', 'synset': 'girdle.n.02'}, {'name': 'glass_(drink_container)', 'id': 498, 'frequency': 'f', 'synset': 'glass.n.02'}, {'name': 'globe', 'id': 499, 'frequency': 'c', 'synset': 'globe.n.03'}, {'name': 'glove', 'id': 500, 'frequency': 'f', 'synset': 'glove.n.02'}, {'name': 'goat', 'id': 501, 'frequency': 'c', 'synset': 'goat.n.01'}, {'name': 'goggles', 'id': 502, 'frequency': 'f', 'synset': 'goggles.n.01'}, {'name': 'goldfish', 'id': 503, 'frequency': 'r', 'synset': 'goldfish.n.01'}, {'name': 'golf_club', 'id': 504, 'frequency': 'c', 'synset': 'golf_club.n.02'}, {'name': 'golfcart', 'id': 505, 'frequency': 'c', 'synset': 'golfcart.n.01'}, {'name': 'gondola_(boat)', 'id': 506, 'frequency': 'r', 'synset': 'gondola.n.02'}, {'name': 'goose', 'id': 507, 'frequency': 'c', 'synset': 'goose.n.01'}, {'name': 'gorilla', 'id': 508, 'frequency': 'r', 'synset': 'gorilla.n.01'}, {'name': 'gourd', 'id': 509, 'frequency': 'r', 'synset': 'gourd.n.02'}, {'name': 'grape', 'id': 510, 'frequency': 'f', 'synset': 'grape.n.01'}, {'name': 'grater', 'id': 511, 'frequency': 'c', 'synset': 'grater.n.01'}, {'name': 'gravestone', 'id': 512, 'frequency': 'c', 'synset': 'gravestone.n.01'}, {'name': 'gravy_boat', 'id': 513, 'frequency': 'r', 'synset': 'gravy_boat.n.01'}, {'name': 'green_bean', 'id': 514, 'frequency': 'f', 'synset': 'green_bean.n.02'}, {'name': 'green_onion', 'id': 515, 'frequency': 'f', 'synset': 'green_onion.n.01'}, {'name': 'griddle', 'id': 516, 'frequency': 'r', 'synset': 'griddle.n.01'}, {'name': 'grill', 'id': 517, 'frequency': 'f', 'synset': 'grill.n.02'}, {'name': 'grits', 'id': 518, 'frequency': 'r', 'synset': 'grits.n.01'}, {'name': 'grizzly', 'id': 519, 'frequency': 'c', 'synset': 'grizzly.n.01'}, {'name': 'grocery_bag', 'id': 520, 'frequency': 'c', 'synset': 'grocery_bag.n.01'}, {'name': 'guitar', 'id': 521, 'frequency': 'f', 'synset': 'guitar.n.01'}, {'name': 'gull', 'id': 522, 'frequency': 'c', 'synset': 'gull.n.02'}, {'name': 'gun', 'id': 523, 'frequency': 'c', 'synset': 'gun.n.01'}, {'name': 'hairbrush', 'id': 524, 'frequency': 'f', 'synset': 'hairbrush.n.01'}, {'name': 'hairnet', 'id': 525, 'frequency': 'c', 'synset': 'hairnet.n.01'}, {'name': 'hairpin', 'id': 526, 'frequency': 'c', 'synset': 'hairpin.n.01'}, {'name': 'halter_top', 'id': 527, 'frequency': 'r', 'synset': 'halter.n.03'}, {'name': 'ham', 'id': 528, 'frequency': 'f', 'synset': 'ham.n.01'}, {'name': 'hamburger', 'id': 529, 'frequency': 'c', 'synset': 'hamburger.n.01'}, {'name': 'hammer', 'id': 530, 'frequency': 'c', 'synset': 'hammer.n.02'}, {'name': 'hammock', 'id': 531, 'frequency': 'c', 'synset': 'hammock.n.02'}, {'name': 'hamper', 'id': 532, 'frequency': 'r', 'synset': 'hamper.n.02'}, {'name': 'hamster', 'id': 533, 'frequency': 'c', 'synset': 'hamster.n.01'}, {'name': 'hair_dryer', 'id': 534, 'frequency': 'f', 'synset': 'hand_blower.n.01'}, {'name': 'hand_glass', 'id': 535, 'frequency': 'r', 'synset': 'hand_glass.n.01'}, {'name': 'hand_towel', 'id': 536, 'frequency': 'f', 'synset': 'hand_towel.n.01'}, {'name': 'handcart', 'id': 537, 'frequency': 'c', 'synset': 'handcart.n.01'}, {'name': 'handcuff', 'id': 538, 'frequency': 'r', 'synset': 'handcuff.n.01'}, {'name': 'handkerchief', 'id': 539, 'frequency': 'c', 'synset': 'handkerchief.n.01'}, {'name': 'handle', 'id': 540, 'frequency': 'f', 'synset': 'handle.n.01'}, {'name': 'handsaw', 'id': 541, 'frequency': 'r', 'synset': 'handsaw.n.01'}, {'name': 'hardback_book', 'id': 542, 'frequency': 'r', 'synset': 'hardback.n.01'}, {'name': 'harmonium', 'id': 543, 'frequency': 'r', 'synset': 'harmonium.n.01'}, {'name': 'hat', 'id': 544, 'frequency': 'f', 'synset': 'hat.n.01'}, {'name': 'hatbox', 'id': 545, 'frequency': 'r', 'synset': 'hatbox.n.01'}, {'name': 'veil', 'id': 546, 'frequency': 'c', 'synset': 'head_covering.n.01'}, {'name': 'headband', 'id': 547, 'frequency': 'f', 'synset': 'headband.n.01'}, {'name': 'headboard', 'id': 548, 'frequency': 'f', 'synset': 'headboard.n.01'}, {'name': 'headlight', 'id': 549, 'frequency': 'f', 'synset': 'headlight.n.01'}, {'name': 'headscarf', 'id': 550, 'frequency': 'c', 'synset': 'headscarf.n.01'}, {'name': 'headset', 'id': 551, 'frequency': 'r', 'synset': 'headset.n.01'}, {'name': 'headstall_(for_horses)', 'id': 552, 'frequency': 'c', 'synset': 'headstall.n.01'}, {'name': 'heart', 'id': 553, 'frequency': 'c', 'synset': 'heart.n.02'}, {'name': 'heater', 'id': 554, 'frequency': 'c', 'synset': 'heater.n.01'}, {'name': 'helicopter', 'id': 555, 'frequency': 'c', 'synset': 'helicopter.n.01'}, {'name': 'helmet', 'id': 556, 'frequency': 'f', 'synset': 'helmet.n.02'}, {'name': 'heron', 'id': 557, 'frequency': 'r', 'synset': 'heron.n.02'}, {'name': 'highchair', 'id': 558, 'frequency': 'c', 'synset': 'highchair.n.01'}, {'name': 'hinge', 'id': 559, 'frequency': 'f', 'synset': 'hinge.n.01'}, {'name': 'hippopotamus', 'id': 560, 'frequency': 'r', 'synset': 'hippopotamus.n.01'}, {'name': 'hockey_stick', 'id': 561, 'frequency': 'r', 'synset': 'hockey_stick.n.01'}, {'name': 'hog', 'id': 562, 'frequency': 'c', 'synset': 'hog.n.03'}, {'name': 'home_plate_(baseball)', 'id': 563, 'frequency': 'f', 'synset': 'home_plate.n.01'}, {'name': 'honey', 'id': 564, 'frequency': 'c', 'synset': 'honey.n.01'}, {'name': 'fume_hood', 'id': 565, 'frequency': 'f', 'synset': 'hood.n.06'}, {'name': 'hook', 'id': 566, 'frequency': 'f', 'synset': 'hook.n.05'}, {'name': 'hookah', 'id': 567, 'frequency': 'r', 'synset': 'hookah.n.01'}, {'name': 'hornet', 'id': 568, 'frequency': 'r', 'synset': 'hornet.n.01'}, {'name': 'horse', 'id': 569, 'frequency': 'f', 'synset': 'horse.n.01'}, {'name': 'hose', 'id': 570, 'frequency': 'f', 'synset': 'hose.n.03'}, {'name': 'hot-air_balloon', 'id': 571, 'frequency': 'r', 'synset': 'hot-air_balloon.n.01'}, {'name': 'hotplate', 'id': 572, 'frequency': 'r', 'synset': 'hot_plate.n.01'}, {'name': 'hot_sauce', 'id': 573, 'frequency': 'c', 'synset': 'hot_sauce.n.01'}, {'name': 'hourglass', 'id': 574, 'frequency': 'r', 'synset': 'hourglass.n.01'}, {'name': 'houseboat', 'id': 575, 'frequency': 'r', 'synset': 'houseboat.n.01'}, {'name': 'hummingbird', 'id': 576, 'frequency': 'c', 'synset': 'hummingbird.n.01'}, {'name': 'hummus', 'id': 577, 'frequency': 'r', 'synset': 'hummus.n.01'}, {'name': 'polar_bear', 'id': 578, 'frequency': 'f', 'synset': 'ice_bear.n.01'}, {'name': 'icecream', 'id': 579, 'frequency': 'c', 'synset': 'ice_cream.n.01'}, {'name': 'popsicle', 'id': 580, 'frequency': 'r', 'synset': 'ice_lolly.n.01'}, {'name': 'ice_maker', 'id': 581, 'frequency': 'c', 'synset': 'ice_maker.n.01'}, {'name': 'ice_pack', 'id': 582, 'frequency': 'r', 'synset': 'ice_pack.n.01'}, {'name': 'ice_skate', 'id': 583, 'frequency': 'r', 'synset': 'ice_skate.n.01'}, {'name': 'igniter', 'id': 584, 'frequency': 'c', 'synset': 'igniter.n.01'}, {'name': 'inhaler', 'id': 585, 'frequency': 'r', 'synset': 'inhaler.n.01'}, {'name': 'iPod', 'id': 586, 'frequency': 'f', 'synset': 'ipod.n.01'}, {'name': 'iron_(for_clothing)', 'id': 587, 'frequency': 'c', 'synset': 'iron.n.04'}, {'name': 'ironing_board', 'id': 588, 'frequency': 'c', 'synset': 'ironing_board.n.01'}, {'name': 'jacket', 'id': 589, 'frequency': 'f', 'synset': 'jacket.n.01'}, {'name': 'jam', 'id': 590, 'frequency': 'c', 'synset': 'jam.n.01'}, {'name': 'jar', 'id': 591, 'frequency': 'f', 'synset': 'jar.n.01'}, {'name': 'jean', 'id': 592, 'frequency': 'f', 'synset': 'jean.n.01'}, {'name': 'jeep', 'id': 593, 'frequency': 'c', 'synset': 'jeep.n.01'}, {'name': 'jelly_bean', 'id': 594, 'frequency': 'r', 'synset': 'jelly_bean.n.01'}, {'name': 'jersey', 'id': 595, 'frequency': 'f', 'synset': 'jersey.n.03'}, {'name': 'jet_plane', 'id': 596, 'frequency': 'c', 'synset': 'jet.n.01'}, {'name': 'jewel', 'id': 597, 'frequency': 'r', 'synset': 'jewel.n.01'}, {'name': 'jewelry', 'id': 598, 'frequency': 'c', 'synset': 'jewelry.n.01'}, {'name': 'joystick', 'id': 599, 'frequency': 'r', 'synset': 'joystick.n.02'}, {'name': 'jumpsuit', 'id': 600, 'frequency': 'c', 'synset': 'jump_suit.n.01'}, {'name': 'kayak', 'id': 601, 'frequency': 'c', 'synset': 'kayak.n.01'}, {'name': 'keg', 'id': 602, 'frequency': 'r', 'synset': 'keg.n.02'}, {'name': 'kennel', 'id': 603, 'frequency': 'r', 'synset': 'kennel.n.01'}, {'name': 'kettle', 'id': 604, 'frequency': 'c', 'synset': 'kettle.n.01'}, {'name': 'key', 'id': 605, 'frequency': 'f', 'synset': 'key.n.01'}, {'name': 'keycard', 'id': 606, 'frequency': 'r', 'synset': 'keycard.n.01'}, {'name': 'kilt', 'id': 607, 'frequency': 'c', 'synset': 'kilt.n.01'}, {'name': 'kimono', 'id': 608, 'frequency': 'c', 'synset': 'kimono.n.01'}, {'name': 'kitchen_sink', 'id': 609, 'frequency': 'f', 'synset': 'kitchen_sink.n.01'}, {'name': 'kitchen_table', 'id': 610, 'frequency': 'r', 'synset': 'kitchen_table.n.01'}, {'name': 'kite', 'id': 611, 'frequency': 'f', 'synset': 'kite.n.03'}, {'name': 'kitten', 'id': 612, 'frequency': 'c', 'synset': 'kitten.n.01'}, {'name': 'kiwi_fruit', 'id': 613, 'frequency': 'c', 'synset': 'kiwi.n.03'}, {'name': 'knee_pad', 'id': 614, 'frequency': 'f', 'synset': 'knee_pad.n.01'}, {'name': 'knife', 'id': 615, 'frequency': 'f', 'synset': 'knife.n.01'}, {'name': 'knitting_needle', 'id': 616, 'frequency': 'r', 'synset': 'knitting_needle.n.01'}, {'name': 'knob', 'id': 617, 'frequency': 'f', 'synset': 'knob.n.02'}, {'name': 'knocker_(on_a_door)', 'id': 618, 'frequency': 'r', 'synset': 'knocker.n.05'}, {'name': 'koala', 'id': 619, 'frequency': 'r', 'synset': 'koala.n.01'}, {'name': 'lab_coat', 'id': 620, 'frequency': 'r', 'synset': 'lab_coat.n.01'}, {'name': 'ladder', 'id': 621, 'frequency': 'f', 'synset': 'ladder.n.01'}, {'name': 'ladle', 'id': 622, 'frequency': 'c', 'synset': 'ladle.n.01'}, {'name': 'ladybug', 'id': 623, 'frequency': 'c', 'synset': 'ladybug.n.01'}, {'name': 'lamb_(animal)', 'id': 624, 'frequency': 'f', 'synset': 'lamb.n.01'}, {'name': 'lamb-chop', 'id': 625, 'frequency': 'r', 'synset': 'lamb_chop.n.01'}, {'name': 'lamp', 'id': 626, 'frequency': 'f', 'synset': 'lamp.n.02'}, {'name': 'lamppost', 'id': 627, 'frequency': 'f', 'synset': 'lamppost.n.01'}, {'name': 'lampshade', 'id': 628, 'frequency': 'f', 'synset': 'lampshade.n.01'}, {'name': 'lantern', 'id': 629, 'frequency': 'c', 'synset': 'lantern.n.01'}, {'name': 'lanyard', 'id': 630, 'frequency': 'f', 'synset': 'lanyard.n.02'}, {'name': 'laptop_computer', 'id': 631, 'frequency': 'f', 'synset': 'laptop.n.01'}, {'name': 'lasagna', 'id': 632, 'frequency': 'r', 'synset': 'lasagna.n.01'}, {'name': 'latch', 'id': 633, 'frequency': 'f', 'synset': 'latch.n.02'}, {'name': 'lawn_mower', 'id': 634, 'frequency': 'r', 'synset': 'lawn_mower.n.01'}, {'name': 'leather', 'id': 635, 'frequency': 'r', 'synset': 'leather.n.01'}, {'name': 'legging_(clothing)', 'id': 636, 'frequency': 'c', 'synset': 'legging.n.01'}, {'name': 'Lego', 'id': 637, 'frequency': 'c', 'synset': 'lego.n.01'}, {'name': 'legume', 'id': 638, 'frequency': 'r', 'synset': 'legume.n.02'}, {'name': 'lemon', 'id': 639, 'frequency': 'f', 'synset': 'lemon.n.01'}, {'name': 'lemonade', 'id': 640, 'frequency': 'r', 'synset': 'lemonade.n.01'}, {'name': 'lettuce', 'id': 641, 'frequency': 'f', 'synset': 'lettuce.n.02'}, {'name': 'license_plate', 'id': 642, 'frequency': 'f', 'synset': 'license_plate.n.01'}, {'name': 'life_buoy', 'id': 643, 'frequency': 'f', 'synset': 'life_buoy.n.01'}, {'name': 'life_jacket', 'id': 644, 'frequency': 'f', 'synset': 'life_jacket.n.01'}, {'name': 'lightbulb', 'id': 645, 'frequency': 'f', 'synset': 'light_bulb.n.01'}, {'name': 'lightning_rod', 'id': 646, 'frequency': 'r', 'synset': 'lightning_rod.n.02'}, {'name': 'lime', 'id': 647, 'frequency': 'f', 'synset': 'lime.n.06'}, {'name': 'limousine', 'id': 648, 'frequency': 'r', 'synset': 'limousine.n.01'}, {'name': 'lion', 'id': 649, 'frequency': 'c', 'synset': 'lion.n.01'}, {'name': 'lip_balm', 'id': 650, 'frequency': 'c', 'synset': 'lip_balm.n.01'}, {'name': 'liquor', 'id': 651, 'frequency': 'r', 'synset': 'liquor.n.01'}, {'name': 'lizard', 'id': 652, 'frequency': 'c', 'synset': 'lizard.n.01'}, {'name': 'log', 'id': 653, 'frequency': 'f', 'synset': 'log.n.01'}, {'name': 'lollipop', 'id': 654, 'frequency': 'c', 'synset': 'lollipop.n.02'}, {'name': 'speaker_(stero_equipment)', 'id': 655, 'frequency': 'f', 'synset': 'loudspeaker.n.01'}, {'name': 'loveseat', 'id': 656, 'frequency': 'c', 'synset': 'love_seat.n.01'}, {'name': 'machine_gun', 'id': 657, 'frequency': 'r', 'synset': 'machine_gun.n.01'}, {'name': 'magazine', 'id': 658, 'frequency': 'f', 'synset': 'magazine.n.02'}, {'name': 'magnet', 'id': 659, 'frequency': 'f', 'synset': 'magnet.n.01'}, {'name': 'mail_slot', 'id': 660, 'frequency': 'c', 'synset': 'mail_slot.n.01'}, {'name': 'mailbox_(at_home)', 'id': 661, 'frequency': 'f', 'synset': 'mailbox.n.01'}, {'name': 'mallard', 'id': 662, 'frequency': 'r', 'synset': 'mallard.n.01'}, {'name': 'mallet', 'id': 663, 'frequency': 'r', 'synset': 'mallet.n.01'}, {'name': 'mammoth', 'id': 664, 'frequency': 'r', 'synset': 'mammoth.n.01'}, {'name': 'manatee', 'id': 665, 'frequency': 'r', 'synset': 'manatee.n.01'}, {'name': 'mandarin_orange', 'id': 666, 'frequency': 'c', 'synset': 'mandarin.n.05'}, {'name': 'manger', 'id': 667, 'frequency': 'c', 'synset': 'manger.n.01'}, {'name': 'manhole', 'id': 668, 'frequency': 'f', 'synset': 'manhole.n.01'}, {'name': 'map', 'id': 669, 'frequency': 'f', 'synset': 'map.n.01'}, {'name': 'marker', 'id': 670, 'frequency': 'f', 'synset': 'marker.n.03'}, {'name': 'martini', 'id': 671, 'frequency': 'r', 'synset': 'martini.n.01'}, {'name': 'mascot', 'id': 672, 'frequency': 'r', 'synset': 'mascot.n.01'}, {'name': 'mashed_potato', 'id': 673, 'frequency': 'c', 'synset': 'mashed_potato.n.01'}, {'name': 'masher', 'id': 674, 'frequency': 'r', 'synset': 'masher.n.02'}, {'name': 'mask', 'id': 675, 'frequency': 'f', 'synset': 'mask.n.04'}, {'name': 'mast', 'id': 676, 'frequency': 'f', 'synset': 'mast.n.01'}, {'name': 'mat_(gym_equipment)', 'id': 677, 'frequency': 'c', 'synset': 'mat.n.03'}, {'name': 'matchbox', 'id': 678, 'frequency': 'r', 'synset': 'matchbox.n.01'}, {'name': 'mattress', 'id': 679, 'frequency': 'f', 'synset': 'mattress.n.01'}, {'name': 'measuring_cup', 'id': 680, 'frequency': 'c', 'synset': 'measuring_cup.n.01'}, {'name': 'measuring_stick', 'id': 681, 'frequency': 'c', 'synset': 'measuring_stick.n.01'}, {'name': 'meatball', 'id': 682, 'frequency': 'c', 'synset': 'meatball.n.01'}, {'name': 'medicine', 'id': 683, 'frequency': 'c', 'synset': 'medicine.n.02'}, {'name': 'melon', 'id': 684, 'frequency': 'c', 'synset': 'melon.n.01'}, {'name': 'microphone', 'id': 685, 'frequency': 'f', 'synset': 'microphone.n.01'}, {'name': 'microscope', 'id': 686, 'frequency': 'r', 'synset': 'microscope.n.01'}, {'name': 'microwave_oven', 'id': 687, 'frequency': 'f', 'synset': 'microwave.n.02'}, {'name': 'milestone', 'id': 688, 'frequency': 'r', 'synset': 'milestone.n.01'}, {'name': 'milk', 'id': 689, 'frequency': 'f', 'synset': 'milk.n.01'}, {'name': 'milk_can', 'id': 690, 'frequency': 'r', 'synset': 'milk_can.n.01'}, {'name': 'milkshake', 'id': 691, 'frequency': 'r', 'synset': 'milkshake.n.01'}, {'name': 'minivan', 'id': 692, 'frequency': 'f', 'synset': 'minivan.n.01'}, {'name': 'mint_candy', 'id': 693, 'frequency': 'r', 'synset': 'mint.n.05'}, {'name': 'mirror', 'id': 694, 'frequency': 'f', 'synset': 'mirror.n.01'}, {'name': 'mitten', 'id': 695, 'frequency': 'c', 'synset': 'mitten.n.01'}, {'name': 'mixer_(kitchen_tool)', 'id': 696, 'frequency': 'c', 'synset': 'mixer.n.04'}, {'name': 'money', 'id': 697, 'frequency': 'c', 'synset': 'money.n.03'}, {'name': 'monitor_(computer_equipment) computer_monitor', 'id': 698, 'frequency': 'f', 'synset': 'monitor.n.04'}, {'name': 'monkey', 'id': 699, 'frequency': 'c', 'synset': 'monkey.n.01'}, {'name': 'motor', 'id': 700, 'frequency': 'f', 'synset': 'motor.n.01'}, {'name': 'motor_scooter', 'id': 701, 'frequency': 'f', 'synset': 'motor_scooter.n.01'}, {'name': 'motor_vehicle', 'id': 702, 'frequency': 'r', 'synset': 'motor_vehicle.n.01'}, {'name': 'motorcycle', 'id': 703, 'frequency': 'f', 'synset': 'motorcycle.n.01'}, {'name': 'mound_(baseball)', 'id': 704, 'frequency': 'f', 'synset': 'mound.n.01'}, {'name': 'mouse_(computer_equipment)', 'id': 705, 'frequency': 'f', 'synset': 'mouse.n.04'}, {'name': 'mousepad', 'id': 706, 'frequency': 'f', 'synset': 'mousepad.n.01'}, {'name': 'muffin', 'id': 707, 'frequency': 'c', 'synset': 'muffin.n.01'}, {'name': 'mug', 'id': 708, 'frequency': 'f', 'synset': 'mug.n.04'}, {'name': 'mushroom', 'id': 709, 'frequency': 'f', 'synset': 'mushroom.n.02'}, {'name': 'music_stool', 'id': 710, 'frequency': 'r', 'synset': 'music_stool.n.01'}, {'name': 'musical_instrument', 'id': 711, 'frequency': 'c', 'synset': 'musical_instrument.n.01'}, {'name': 'nailfile', 'id': 712, 'frequency': 'r', 'synset': 'nailfile.n.01'}, {'name': 'napkin', 'id': 713, 'frequency': 'f', 'synset': 'napkin.n.01'}, {'name': 'neckerchief', 'id': 714, 'frequency': 'r', 'synset': 'neckerchief.n.01'}, {'name': 'necklace', 'id': 715, 'frequency': 'f', 'synset': 'necklace.n.01'}, {'name': 'necktie', 'id': 716, 'frequency': 'f', 'synset': 'necktie.n.01'}, {'name': 'needle', 'id': 717, 'frequency': 'c', 'synset': 'needle.n.03'}, {'name': 'nest', 'id': 718, 'frequency': 'c', 'synset': 'nest.n.01'}, {'name': 'newspaper', 'id': 719, 'frequency': 'f', 'synset': 'newspaper.n.01'}, {'name': 'newsstand', 'id': 720, 'frequency': 'c', 'synset': 'newsstand.n.01'}, {'name': 'nightshirt', 'id': 721, 'frequency': 'c', 'synset': 'nightwear.n.01'}, {'name': 'nosebag_(for_animals)', 'id': 722, 'frequency': 'r', 'synset': 'nosebag.n.01'}, {'name': 'noseband_(for_animals)', 'id': 723, 'frequency': 'c', 'synset': 'noseband.n.01'}, {'name': 'notebook', 'id': 724, 'frequency': 'f', 'synset': 'notebook.n.01'}, {'name': 'notepad', 'id': 725, 'frequency': 'c', 'synset': 'notepad.n.01'}, {'name': 'nut', 'id': 726, 'frequency': 'f', 'synset': 'nut.n.03'}, {'name': 'nutcracker', 'id': 727, 'frequency': 'r', 'synset': 'nutcracker.n.01'}, {'name': 'oar', 'id': 728, 'frequency': 'f', 'synset': 'oar.n.01'}, {'name': 'octopus_(food)', 'id': 729, 'frequency': 'r', 'synset': 'octopus.n.01'}, {'name': 'octopus_(animal)', 'id': 730, 'frequency': 'r', 'synset': 'octopus.n.02'}, {'name': 'oil_lamp', 'id': 731, 'frequency': 'c', 'synset': 'oil_lamp.n.01'}, {'name': 'olive_oil', 'id': 732, 'frequency': 'c', 'synset': 'olive_oil.n.01'}, {'name': 'omelet', 'id': 733, 'frequency': 'r', 'synset': 'omelet.n.01'}, {'name': 'onion', 'id': 734, 'frequency': 'f', 'synset': 'onion.n.01'}, {'name': 'orange_(fruit)', 'id': 735, 'frequency': 'f', 'synset': 'orange.n.01'}, {'name': 'orange_juice', 'id': 736, 'frequency': 'c', 'synset': 'orange_juice.n.01'}, {'name': 'ostrich', 'id': 737, 'frequency': 'c', 'synset': 'ostrich.n.02'}, {'name': 'ottoman', 'id': 738, 'frequency': 'f', 'synset': 'ottoman.n.03'}, {'name': 'oven', 'id': 739, 'frequency': 'f', 'synset': 'oven.n.01'}, {'name': 'overalls_(clothing)', 'id': 740, 'frequency': 'c', 'synset': 'overall.n.01'}, {'name': 'owl', 'id': 741, 'frequency': 'c', 'synset': 'owl.n.01'}, {'name': 'packet', 'id': 742, 'frequency': 'c', 'synset': 'packet.n.03'}, {'name': 'inkpad', 'id': 743, 'frequency': 'r', 'synset': 'pad.n.03'}, {'name': 'pad', 'id': 744, 'frequency': 'c', 'synset': 'pad.n.04'}, {'name': 'paddle', 'id': 745, 'frequency': 'f', 'synset': 'paddle.n.04'}, {'name': 'padlock', 'id': 746, 'frequency': 'c', 'synset': 'padlock.n.01'}, {'name': 'paintbrush', 'id': 747, 'frequency': 'c', 'synset': 'paintbrush.n.01'}, {'name': 'painting', 'id': 748, 'frequency': 'f', 'synset': 'painting.n.01'}, {'name': 'pajamas', 'id': 749, 'frequency': 'f', 'synset': 'pajama.n.02'}, {'name': 'palette', 'id': 750, 'frequency': 'c', 'synset': 'palette.n.02'}, {'name': 'pan_(for_cooking)', 'id': 751, 'frequency': 'f', 'synset': 'pan.n.01'}, {'name': 'pan_(metal_container)', 'id': 752, 'frequency': 'r', 'synset': 'pan.n.03'}, {'name': 'pancake', 'id': 753, 'frequency': 'c', 'synset': 'pancake.n.01'}, {'name': 'pantyhose', 'id': 754, 'frequency': 'r', 'synset': 'pantyhose.n.01'}, {'name': 'papaya', 'id': 755, 'frequency': 'r', 'synset': 'papaya.n.02'}, {'name': 'paper_plate', 'id': 756, 'frequency': 'f', 'synset': 'paper_plate.n.01'}, {'name': 'paper_towel', 'id': 757, 'frequency': 'f', 'synset': 'paper_towel.n.01'}, {'name': 'paperback_book', 'id': 758, 'frequency': 'r', 'synset': 'paperback_book.n.01'}, {'name': 'paperweight', 'id': 759, 'frequency': 'r', 'synset': 'paperweight.n.01'}, {'name': 'parachute', 'id': 760, 'frequency': 'c', 'synset': 'parachute.n.01'}, {'name': 'parakeet', 'id': 761, 'frequency': 'c', 'synset': 'parakeet.n.01'}, {'name': 'parasail_(sports)', 'id': 762, 'frequency': 'c', 'synset': 'parasail.n.01'}, {'name': 'parasol', 'id': 763, 'frequency': 'c', 'synset': 'parasol.n.01'}, {'name': 'parchment', 'id': 764, 'frequency': 'r', 'synset': 'parchment.n.01'}, {'name': 'parka', 'id': 765, 'frequency': 'c', 'synset': 'parka.n.01'}, {'name': 'parking_meter', 'id': 766, 'frequency': 'f', 'synset': 'parking_meter.n.01'}, {'name': 'parrot', 'id': 767, 'frequency': 'c', 'synset': 'parrot.n.01'}, {'name': 'passenger_car_(part_of_a_train)', 'id': 768, 'frequency': 'c', 'synset': 'passenger_car.n.01'}, {'name': 'passenger_ship', 'id': 769, 'frequency': 'r', 'synset': 'passenger_ship.n.01'}, {'name': 'passport', 'id': 770, 'frequency': 'c', 'synset': 'passport.n.02'}, {'name': 'pastry', 'id': 771, 'frequency': 'f', 'synset': 'pastry.n.02'}, {'name': 'patty_(food)', 'id': 772, 'frequency': 'r', 'synset': 'patty.n.01'}, {'name': 'pea_(food)', 'id': 773, 'frequency': 'c', 'synset': 'pea.n.01'}, {'name': 'peach', 'id': 774, 'frequency': 'c', 'synset': 'peach.n.03'}, {'name': 'peanut_butter', 'id': 775, 'frequency': 'c', 'synset': 'peanut_butter.n.01'}, {'name': 'pear', 'id': 776, 'frequency': 'f', 'synset': 'pear.n.01'}, {'name': 'peeler_(tool_for_fruit_and_vegetables)', 'id': 777, 'frequency': 'c', 'synset': 'peeler.n.03'}, {'name': 'wooden_leg', 'id': 778, 'frequency': 'r', 'synset': 'peg.n.04'}, {'name': 'pegboard', 'id': 779, 'frequency': 'r', 'synset': 'pegboard.n.01'}, {'name': 'pelican', 'id': 780, 'frequency': 'c', 'synset': 'pelican.n.01'}, {'name': 'pen', 'id': 781, 'frequency': 'f', 'synset': 'pen.n.01'}, {'name': 'pencil', 'id': 782, 'frequency': 'f', 'synset': 'pencil.n.01'}, {'name': 'pencil_box', 'id': 783, 'frequency': 'r', 'synset': 'pencil_box.n.01'}, {'name': 'pencil_sharpener', 'id': 784, 'frequency': 'r', 'synset': 'pencil_sharpener.n.01'}, {'name': 'pendulum', 'id': 785, 'frequency': 'r', 'synset': 'pendulum.n.01'}, {'name': 'penguin', 'id': 786, 'frequency': 'c', 'synset': 'penguin.n.01'}, {'name': 'pennant', 'id': 787, 'frequency': 'r', 'synset': 'pennant.n.02'}, {'name': 'penny_(coin)', 'id': 788, 'frequency': 'r', 'synset': 'penny.n.02'}, {'name': 'pepper', 'id': 789, 'frequency': 'f', 'synset': 'pepper.n.03'}, {'name': 'pepper_mill', 'id': 790, 'frequency': 'c', 'synset': 'pepper_mill.n.01'}, {'name': 'perfume', 'id': 791, 'frequency': 'c', 'synset': 'perfume.n.02'}, {'name': 'persimmon', 'id': 792, 'frequency': 'r', 'synset': 'persimmon.n.02'}, {'name': 'person', 'id': 793, 'frequency': 'f', 'synset': 'person.n.01'}, {'name': 'pet', 'id': 794, 'frequency': 'c', 'synset': 'pet.n.01'}, {'name': 'pew_(church_bench)', 'id': 795, 'frequency': 'c', 'synset': 'pew.n.01'}, {'name': 'phonebook', 'id': 796, 'frequency': 'r', 'synset': 'phonebook.n.01'}, {'name': 'phonograph_record', 'id': 797, 'frequency': 'c', 'synset': 'phonograph_record.n.01'}, {'name': 'piano', 'id': 798, 'frequency': 'f', 'synset': 'piano.n.01'}, {'name': 'pickle', 'id': 799, 'frequency': 'f', 'synset': 'pickle.n.01'}, {'name': 'pickup_truck', 'id': 800, 'frequency': 'f', 'synset': 'pickup.n.01'}, {'name': 'pie', 'id': 801, 'frequency': 'c', 'synset': 'pie.n.01'}, {'name': 'pigeon', 'id': 802, 'frequency': 'c', 'synset': 'pigeon.n.01'}, {'name': 'piggy_bank', 'id': 803, 'frequency': 'r', 'synset': 'piggy_bank.n.01'}, {'name': 'pillow', 'id': 804, 'frequency': 'f', 'synset': 'pillow.n.01'}, {'name': 'pin_(non_jewelry)', 'id': 805, 'frequency': 'r', 'synset': 'pin.n.09'}, {'name': 'pineapple', 'id': 806, 'frequency': 'f', 'synset': 'pineapple.n.02'}, {'name': 'pinecone', 'id': 807, 'frequency': 'c', 'synset': 'pinecone.n.01'}, {'name': 'ping-pong_ball', 'id': 808, 'frequency': 'r', 'synset': 'ping-pong_ball.n.01'}, {'name': 'pinwheel', 'id': 809, 'frequency': 'r', 'synset': 'pinwheel.n.03'}, {'name': 'tobacco_pipe', 'id': 810, 'frequency': 'r', 'synset': 'pipe.n.01'}, {'name': 'pipe', 'id': 811, 'frequency': 'f', 'synset': 'pipe.n.02'}, {'name': 'pistol', 'id': 812, 'frequency': 'r', 'synset': 'pistol.n.01'}, {'name': 'pita_(bread)', 'id': 813, 'frequency': 'c', 'synset': 'pita.n.01'}, {'name': 'pitcher_(vessel_for_liquid)', 'id': 814, 'frequency': 'f', 'synset': 'pitcher.n.02'}, {'name': 'pitchfork', 'id': 815, 'frequency': 'r', 'synset': 'pitchfork.n.01'}, {'name': 'pizza', 'id': 816, 'frequency': 'f', 'synset': 'pizza.n.01'}, {'name': 'place_mat', 'id': 817, 'frequency': 'f', 'synset': 'place_mat.n.01'}, {'name': 'plate', 'id': 818, 'frequency': 'f', 'synset': 'plate.n.04'}, {'name': 'platter', 'id': 819, 'frequency': 'c', 'synset': 'platter.n.01'}, {'name': 'playpen', 'id': 820, 'frequency': 'r', 'synset': 'playpen.n.01'}, {'name': 'pliers', 'id': 821, 'frequency': 'c', 'synset': 'pliers.n.01'}, {'name': 'plow_(farm_equipment)', 'id': 822, 'frequency': 'r', 'synset': 'plow.n.01'}, {'name': 'plume', 'id': 823, 'frequency': 'r', 'synset': 'plume.n.02'}, {'name': 'pocket_watch', 'id': 824, 'frequency': 'r', 'synset': 'pocket_watch.n.01'}, {'name': 'pocketknife', 'id': 825, 'frequency': 'c', 'synset': 'pocketknife.n.01'}, {'name': 'poker_(fire_stirring_tool)', 'id': 826, 'frequency': 'c', 'synset': 'poker.n.01'}, {'name': 'pole', 'id': 827, 'frequency': 'f', 'synset': 'pole.n.01'}, {'name': 'polo_shirt', 'id': 828, 'frequency': 'f', 'synset': 'polo_shirt.n.01'}, {'name': 'poncho', 'id': 829, 'frequency': 'r', 'synset': 'poncho.n.01'}, {'name': 'pony', 'id': 830, 'frequency': 'c', 'synset': 'pony.n.05'}, {'name': 'pool_table', 'id': 831, 'frequency': 'r', 'synset': 'pool_table.n.01'}, {'name': 'pop_(soda)', 'id': 832, 'frequency': 'f', 'synset': 'pop.n.02'}, {'name': 'postbox_(public)', 'id': 833, 'frequency': 'c', 'synset': 'postbox.n.01'}, {'name': 'postcard', 'id': 834, 'frequency': 'c', 'synset': 'postcard.n.01'}, {'name': 'poster', 'id': 835, 'frequency': 'f', 'synset': 'poster.n.01'}, {'name': 'pot', 'id': 836, 'frequency': 'f', 'synset': 'pot.n.01'}, {'name': 'flowerpot', 'id': 837, 'frequency': 'f', 'synset': 'pot.n.04'}, {'name': 'potato', 'id': 838, 'frequency': 'f', 'synset': 'potato.n.01'}, {'name': 'potholder', 'id': 839, 'frequency': 'c', 'synset': 'potholder.n.01'}, {'name': 'pottery', 'id': 840, 'frequency': 'c', 'synset': 'pottery.n.01'}, {'name': 'pouch', 'id': 841, 'frequency': 'c', 'synset': 'pouch.n.01'}, {'name': 'power_shovel', 'id': 842, 'frequency': 'c', 'synset': 'power_shovel.n.01'}, {'name': 'prawn', 'id': 843, 'frequency': 'c', 'synset': 'prawn.n.01'}, {'name': 'pretzel', 'id': 844, 'frequency': 'c', 'synset': 'pretzel.n.01'}, {'name': 'printer', 'id': 845, 'frequency': 'f', 'synset': 'printer.n.03'}, {'name': 'projectile_(weapon)', 'id': 846, 'frequency': 'c', 'synset': 'projectile.n.01'}, {'name': 'projector', 'id': 847, 'frequency': 'c', 'synset': 'projector.n.02'}, {'name': 'propeller', 'id': 848, 'frequency': 'f', 'synset': 'propeller.n.01'}, {'name': 'prune', 'id': 849, 'frequency': 'r', 'synset': 'prune.n.01'}, {'name': 'pudding', 'id': 850, 'frequency': 'r', 'synset': 'pudding.n.01'}, {'name': 'puffer_(fish)', 'id': 851, 'frequency': 'r', 'synset': 'puffer.n.02'}, {'name': 'puffin', 'id': 852, 'frequency': 'r', 'synset': 'puffin.n.01'}, {'name': 'pug-dog', 'id': 853, 'frequency': 'r', 'synset': 'pug.n.01'}, {'name': 'pumpkin', 'id': 854, 'frequency': 'c', 'synset': 'pumpkin.n.02'}, {'name': 'puncher', 'id': 855, 'frequency': 'r', 'synset': 'punch.n.03'}, {'name': 'puppet', 'id': 856, 'frequency': 'r', 'synset': 'puppet.n.01'}, {'name': 'puppy', 'id': 857, 'frequency': 'c', 'synset': 'puppy.n.01'}, {'name': 'quesadilla', 'id': 858, 'frequency': 'r', 'synset': 'quesadilla.n.01'}, {'name': 'quiche', 'id': 859, 'frequency': 'r', 'synset': 'quiche.n.02'}, {'name': 'quilt', 'id': 860, 'frequency': 'f', 'synset': 'quilt.n.01'}, {'name': 'rabbit', 'id': 861, 'frequency': 'c', 'synset': 'rabbit.n.01'}, {'name': 'race_car', 'id': 862, 'frequency': 'r', 'synset': 'racer.n.02'}, {'name': 'racket', 'id': 863, 'frequency': 'c', 'synset': 'racket.n.04'}, {'name': 'radar', 'id': 864, 'frequency': 'r', 'synset': 'radar.n.01'}, {'name': 'radiator', 'id': 865, 'frequency': 'f', 'synset': 'radiator.n.03'}, {'name': 'radio_receiver', 'id': 866, 'frequency': 'c', 'synset': 'radio_receiver.n.01'}, {'name': 'radish', 'id': 867, 'frequency': 'c', 'synset': 'radish.n.03'}, {'name': 'raft', 'id': 868, 'frequency': 'c', 'synset': 'raft.n.01'}, {'name': 'rag_doll', 'id': 869, 'frequency': 'r', 'synset': 'rag_doll.n.01'}, {'name': 'raincoat', 'id': 870, 'frequency': 'c', 'synset': 'raincoat.n.01'}, {'name': 'ram_(animal)', 'id': 871, 'frequency': 'c', 'synset': 'ram.n.05'}, {'name': 'raspberry', 'id': 872, 'frequency': 'c', 'synset': 'raspberry.n.02'}, {'name': 'rat', 'id': 873, 'frequency': 'r', 'synset': 'rat.n.01'}, {'name': 'razorblade', 'id': 874, 'frequency': 'c', 'synset': 'razorblade.n.01'}, {'name': 'reamer_(juicer)', 'id': 875, 'frequency': 'c', 'synset': 'reamer.n.01'}, {'name': 'rearview_mirror', 'id': 876, 'frequency': 'f', 'synset': 'rearview_mirror.n.01'}, {'name': 'receipt', 'id': 877, 'frequency': 'c', 'synset': 'receipt.n.02'}, {'name': 'recliner', 'id': 878, 'frequency': 'c', 'synset': 'recliner.n.01'}, {'name': 'record_player', 'id': 879, 'frequency': 'c', 'synset': 'record_player.n.01'}, {'name': 'reflector', 'id': 880, 'frequency': 'f', 'synset': 'reflector.n.01'}, {'name': 'remote_control', 'id': 881, 'frequency': 'f', 'synset': 'remote_control.n.01'}, {'name': 'rhinoceros', 'id': 882, 'frequency': 'c', 'synset': 'rhinoceros.n.01'}, {'name': 'rib_(food)', 'id': 883, 'frequency': 'r', 'synset': 'rib.n.03'}, {'name': 'rifle', 'id': 884, 'frequency': 'c', 'synset': 'rifle.n.01'}, {'name': 'ring', 'id': 885, 'frequency': 'f', 'synset': 'ring.n.08'}, {'name': 'river_boat', 'id': 886, 'frequency': 'r', 'synset': 'river_boat.n.01'}, {'name': 'road_map', 'id': 887, 'frequency': 'r', 'synset': 'road_map.n.02'}, {'name': 'robe', 'id': 888, 'frequency': 'c', 'synset': 'robe.n.01'}, {'name': 'rocking_chair', 'id': 889, 'frequency': 'c', 'synset': 'rocking_chair.n.01'}, {'name': 'rodent', 'id': 890, 'frequency': 'r', 'synset': 'rodent.n.01'}, {'name': 'roller_skate', 'id': 891, 'frequency': 'r', 'synset': 'roller_skate.n.01'}, {'name': 'Rollerblade', 'id': 892, 'frequency': 'r', 'synset': 'rollerblade.n.01'}, {'name': 'rolling_pin', 'id': 893, 'frequency': 'c', 'synset': 'rolling_pin.n.01'}, {'name': 'root_beer', 'id': 894, 'frequency': 'r', 'synset': 'root_beer.n.01'}, {'name': 'router_(computer_equipment)', 'id': 895, 'frequency': 'c', 'synset': 'router.n.02'}, {'name': 'rubber_band', 'id': 896, 'frequency': 'f', 'synset': 'rubber_band.n.01'}, {'name': 'runner_(carpet)', 'id': 897, 'frequency': 'c', 'synset': 'runner.n.08'}, {'name': 'plastic_bag', 'id': 898, 'frequency': 'f', 'synset': 'sack.n.01'}, {'name': 'saddle_(on_an_animal)', 'id': 899, 'frequency': 'f', 'synset': 'saddle.n.01'}, {'name': 'saddle_blanket', 'id': 900, 'frequency': 'f', 'synset': 'saddle_blanket.n.01'}, {'name': 'saddlebag', 'id': 901, 'frequency': 'c', 'synset': 'saddlebag.n.01'}, {'name': 'safety_pin', 'id': 902, 'frequency': 'r', 'synset': 'safety_pin.n.01'}, {'name': 'sail', 'id': 903, 'frequency': 'f', 'synset': 'sail.n.01'}, {'name': 'salad', 'id': 904, 'frequency': 'f', 'synset': 'salad.n.01'}, {'name': 'salad_plate', 'id': 905, 'frequency': 'r', 'synset': 'salad_plate.n.01'}, {'name': 'salami', 'id': 906, 'frequency': 'c', 'synset': 'salami.n.01'}, {'name': 'salmon_(fish)', 'id': 907, 'frequency': 'c', 'synset': 'salmon.n.01'}, {'name': 'salmon_(food)', 'id': 908, 'frequency': 'r', 'synset': 'salmon.n.03'}, {'name': 'salsa', 'id': 909, 'frequency': 'c', 'synset': 'salsa.n.01'}, {'name': 'saltshaker', 'id': 910, 'frequency': 'f', 'synset': 'saltshaker.n.01'}, {'name': 'sandal_(type_of_shoe)', 'id': 911, 'frequency': 'f', 'synset': 'sandal.n.01'}, {'name': 'sandwich', 'id': 912, 'frequency': 'f', 'synset': 'sandwich.n.01'}, {'name': 'satchel', 'id': 913, 'frequency': 'r', 'synset': 'satchel.n.01'}, {'name': 'saucepan', 'id': 914, 'frequency': 'r', 'synset': 'saucepan.n.01'}, {'name': 'saucer', 'id': 915, 'frequency': 'f', 'synset': 'saucer.n.02'}, {'name': 'sausage', 'id': 916, 'frequency': 'f', 'synset': 'sausage.n.01'}, {'name': 'sawhorse', 'id': 917, 'frequency': 'r', 'synset': 'sawhorse.n.01'}, {'name': 'saxophone', 'id': 918, 'frequency': 'r', 'synset': 'sax.n.02'}, {'name': 'scale_(measuring_instrument)', 'id': 919, 'frequency': 'f', 'synset': 'scale.n.07'}, {'name': 'scarecrow', 'id': 920, 'frequency': 'r', 'synset': 'scarecrow.n.01'}, {'name': 'scarf', 'id': 921, 'frequency': 'f', 'synset': 'scarf.n.01'}, {'name': 'school_bus', 'id': 922, 'frequency': 'c', 'synset': 'school_bus.n.01'}, {'name': 'scissors', 'id': 923, 'frequency': 'f', 'synset': 'scissors.n.01'}, {'name': 'scoreboard', 'id': 924, 'frequency': 'f', 'synset': 'scoreboard.n.01'}, {'name': 'scraper', 'id': 925, 'frequency': 'r', 'synset': 'scraper.n.01'}, {'name': 'screwdriver', 'id': 926, 'frequency': 'c', 'synset': 'screwdriver.n.01'}, {'name': 'scrubbing_brush', 'id': 927, 'frequency': 'f', 'synset': 'scrub_brush.n.01'}, {'name': 'sculpture', 'id': 928, 'frequency': 'c', 'synset': 'sculpture.n.01'}, {'name': 'seabird', 'id': 929, 'frequency': 'c', 'synset': 'seabird.n.01'}, {'name': 'seahorse', 'id': 930, 'frequency': 'c', 'synset': 'seahorse.n.02'}, {'name': 'seaplane', 'id': 931, 'frequency': 'r', 'synset': 'seaplane.n.01'}, {'name': 'seashell', 'id': 932, 'frequency': 'c', 'synset': 'seashell.n.01'}, {'name': 'sewing_machine', 'id': 933, 'frequency': 'c', 'synset': 'sewing_machine.n.01'}, {'name': 'shaker', 'id': 934, 'frequency': 'c', 'synset': 'shaker.n.03'}, {'name': 'shampoo', 'id': 935, 'frequency': 'c', 'synset': 'shampoo.n.01'}, {'name': 'shark', 'id': 936, 'frequency': 'c', 'synset': 'shark.n.01'}, {'name': 'sharpener', 'id': 937, 'frequency': 'r', 'synset': 'sharpener.n.01'}, {'name': 'Sharpie', 'id': 938, 'frequency': 'r', 'synset': 'sharpie.n.03'}, {'name': 'shaver_(electric)', 'id': 939, 'frequency': 'r', 'synset': 'shaver.n.03'}, {'name': 'shaving_cream', 'id': 940, 'frequency': 'c', 'synset': 'shaving_cream.n.01'}, {'name': 'shawl', 'id': 941, 'frequency': 'r', 'synset': 'shawl.n.01'}, {'name': 'shears', 'id': 942, 'frequency': 'r', 'synset': 'shears.n.01'}, {'name': 'sheep', 'id': 943, 'frequency': 'f', 'synset': 'sheep.n.01'}, {'name': 'shepherd_dog', 'id': 944, 'frequency': 'r', 'synset': 'shepherd_dog.n.01'}, {'name': 'sherbert', 'id': 945, 'frequency': 'r', 'synset': 'sherbert.n.01'}, {'name': 'shield', 'id': 946, 'frequency': 'c', 'synset': 'shield.n.02'}, {'name': 'shirt', 'id': 947, 'frequency': 'f', 'synset': 'shirt.n.01'}, {'name': 'shoe', 'id': 948, 'frequency': 'f', 'synset': 'shoe.n.01'}, {'name': 'shopping_bag', 'id': 949, 'frequency': 'f', 'synset': 'shopping_bag.n.01'}, {'name': 'shopping_cart', 'id': 950, 'frequency': 'c', 'synset': 'shopping_cart.n.01'}, {'name': 'short_pants', 'id': 951, 'frequency': 'f', 'synset': 'short_pants.n.01'}, {'name': 'shot_glass', 'id': 952, 'frequency': 'r', 'synset': 'shot_glass.n.01'}, {'name': 'shoulder_bag', 'id': 953, 'frequency': 'f', 'synset': 'shoulder_bag.n.01'}, {'name': 'shovel', 'id': 954, 'frequency': 'c', 'synset': 'shovel.n.01'}, {'name': 'shower_head', 'id': 955, 'frequency': 'f', 'synset': 'shower.n.01'}, {'name': 'shower_cap', 'id': 956, 'frequency': 'r', 'synset': 'shower_cap.n.01'}, {'name': 'shower_curtain', 'id': 957, 'frequency': 'f', 'synset': 'shower_curtain.n.01'}, {'name': 'shredder_(for_paper)', 'id': 958, 'frequency': 'r', 'synset': 'shredder.n.01'}, {'name': 'signboard', 'id': 959, 'frequency': 'f', 'synset': 'signboard.n.01'}, {'name': 'silo', 'id': 960, 'frequency': 'c', 'synset': 'silo.n.01'}, {'name': 'sink', 'id': 961, 'frequency': 'f', 'synset': 'sink.n.01'}, {'name': 'skateboard', 'id': 962, 'frequency': 'f', 'synset': 'skateboard.n.01'}, {'name': 'skewer', 'id': 963, 'frequency': 'c', 'synset': 'skewer.n.01'}, {'name': 'ski', 'id': 964, 'frequency': 'f', 'synset': 'ski.n.01'}, {'name': 'ski_boot', 'id': 965, 'frequency': 'f', 'synset': 'ski_boot.n.01'}, {'name': 'ski_parka', 'id': 966, 'frequency': 'f', 'synset': 'ski_parka.n.01'}, {'name': 'ski_pole', 'id': 967, 'frequency': 'f', 'synset': 'ski_pole.n.01'}, {'name': 'skirt', 'id': 968, 'frequency': 'f', 'synset': 'skirt.n.02'}, {'name': 'skullcap', 'id': 969, 'frequency': 'r', 'synset': 'skullcap.n.01'}, {'name': 'sled', 'id': 970, 'frequency': 'c', 'synset': 'sled.n.01'}, {'name': 'sleeping_bag', 'id': 971, 'frequency': 'c', 'synset': 'sleeping_bag.n.01'}, {'name': 'sling_(bandage)', 'id': 972, 'frequency': 'r', 'synset': 'sling.n.05'}, {'name': 'slipper_(footwear)', 'id': 973, 'frequency': 'c', 'synset': 'slipper.n.01'}, {'name': 'smoothie', 'id': 974, 'frequency': 'r', 'synset': 'smoothie.n.02'}, {'name': 'snake', 'id': 975, 'frequency': 'r', 'synset': 'snake.n.01'}, {'name': 'snowboard', 'id': 976, 'frequency': 'f', 'synset': 'snowboard.n.01'}, {'name': 'snowman', 'id': 977, 'frequency': 'c', 'synset': 'snowman.n.01'}, {'name': 'snowmobile', 'id': 978, 'frequency': 'c', 'synset': 'snowmobile.n.01'}, {'name': 'soap', 'id': 979, 'frequency': 'f', 'synset': 'soap.n.01'}, {'name': 'soccer_ball', 'id': 980, 'frequency': 'f', 'synset': 'soccer_ball.n.01'}, {'name': 'sock', 'id': 981, 'frequency': 'f', 'synset': 'sock.n.01'}, {'name': 'sofa', 'id': 982, 'frequency': 'f', 'synset': 'sofa.n.01'}, {'name': 'softball', 'id': 983, 'frequency': 'r', 'synset': 'softball.n.01'}, {'name': 'solar_array', 'id': 984, 'frequency': 'c', 'synset': 'solar_array.n.01'}, {'name': 'sombrero', 'id': 985, 'frequency': 'r', 'synset': 'sombrero.n.02'}, {'name': 'soup', 'id': 986, 'frequency': 'f', 'synset': 'soup.n.01'}, {'name': 'soup_bowl', 'id': 987, 'frequency': 'r', 'synset': 'soup_bowl.n.01'}, {'name': 'soupspoon', 'id': 988, 'frequency': 'c', 'synset': 'soupspoon.n.01'}, {'name': 'sour_cream', 'id': 989, 'frequency': 'c', 'synset': 'sour_cream.n.01'}, {'name': 'soya_milk', 'id': 990, 'frequency': 'r', 'synset': 'soya_milk.n.01'}, {'name': 'space_shuttle', 'id': 991, 'frequency': 'r', 'synset': 'space_shuttle.n.01'}, {'name': 'sparkler_(fireworks)', 'id': 992, 'frequency': 'r', 'synset': 'sparkler.n.02'}, {'name': 'spatula', 'id': 993, 'frequency': 'f', 'synset': 'spatula.n.02'}, {'name': 'spear', 'id': 994, 'frequency': 'r', 'synset': 'spear.n.01'}, {'name': 'spectacles', 'id': 995, 'frequency': 'f', 'synset': 'spectacles.n.01'}, {'name': 'spice_rack', 'id': 996, 'frequency': 'c', 'synset': 'spice_rack.n.01'}, {'name': 'spider', 'id': 997, 'frequency': 'c', 'synset': 'spider.n.01'}, {'name': 'crawfish', 'id': 998, 'frequency': 'r', 'synset': 'spiny_lobster.n.02'}, {'name': 'sponge', 'id': 999, 'frequency': 'c', 'synset': 'sponge.n.01'}, {'name': 'spoon', 'id': 1000, 'frequency': 'f', 'synset': 'spoon.n.01'}, {'name': 'sportswear', 'id': 1001, 'frequency': 'c', 'synset': 'sportswear.n.01'}, {'name': 'spotlight', 'id': 1002, 'frequency': 'c', 'synset': 'spotlight.n.02'}, {'name': 'squid_(food)', 'id': 1003, 'frequency': 'r', 'synset': 'squid.n.01'}, {'name': 'squirrel', 'id': 1004, 'frequency': 'c', 'synset': 'squirrel.n.01'}, {'name': 'stagecoach', 'id': 1005, 'frequency': 'r', 'synset': 'stagecoach.n.01'}, {'name': 'stapler_(stapling_machine)', 'id': 1006, 'frequency': 'c', 'synset': 'stapler.n.01'}, {'name': 'starfish', 'id': 1007, 'frequency': 'c', 'synset': 'starfish.n.01'}, {'name': 'statue_(sculpture)', 'id': 1008, 'frequency': 'f', 'synset': 'statue.n.01'}, {'name': 'steak_(food)', 'id': 1009, 'frequency': 'c', 'synset': 'steak.n.01'}, {'name': 'steak_knife', 'id': 1010, 'frequency': 'r', 'synset': 'steak_knife.n.01'}, {'name': 'steering_wheel', 'id': 1011, 'frequency': 'f', 'synset': 'steering_wheel.n.01'}, {'name': 'stepladder', 'id': 1012, 'frequency': 'r', 'synset': 'step_ladder.n.01'}, {'name': 'step_stool', 'id': 1013, 'frequency': 'c', 'synset': 'step_stool.n.01'}, {'name': 'stereo_(sound_system)', 'id': 1014, 'frequency': 'c', 'synset': 'stereo.n.01'}, {'name': 'stew', 'id': 1015, 'frequency': 'r', 'synset': 'stew.n.02'}, {'name': 'stirrer', 'id': 1016, 'frequency': 'r', 'synset': 'stirrer.n.02'}, {'name': 'stirrup', 'id': 1017, 'frequency': 'f', 'synset': 'stirrup.n.01'}, {'name': 'stool', 'id': 1018, 'frequency': 'f', 'synset': 'stool.n.01'}, {'name': 'stop_sign', 'id': 1019, 'frequency': 'f', 'synset': 'stop_sign.n.01'}, {'name': 'brake_light', 'id': 1020, 'frequency': 'f', 'synset': 'stoplight.n.01'}, {'name': 'stove', 'id': 1021, 'frequency': 'f', 'synset': 'stove.n.01'}, {'name': 'strainer', 'id': 1022, 'frequency': 'c', 'synset': 'strainer.n.01'}, {'name': 'strap', 'id': 1023, 'frequency': 'f', 'synset': 'strap.n.01'}, {'name': 'straw_(for_drinking)', 'id': 1024, 'frequency': 'f', 'synset': 'straw.n.04'}, {'name': 'strawberry', 'id': 1025, 'frequency': 'f', 'synset': 'strawberry.n.01'}, {'name': 'street_sign', 'id': 1026, 'frequency': 'f', 'synset': 'street_sign.n.01'}, {'name': 'streetlight', 'id': 1027, 'frequency': 'f', 'synset': 'streetlight.n.01'}, {'name': 'string_cheese', 'id': 1028, 'frequency': 'r', 'synset': 'string_cheese.n.01'}, {'name': 'stylus', 'id': 1029, 'frequency': 'r', 'synset': 'stylus.n.02'}, {'name': 'subwoofer', 'id': 1030, 'frequency': 'r', 'synset': 'subwoofer.n.01'}, {'name': 'sugar_bowl', 'id': 1031, 'frequency': 'r', 'synset': 'sugar_bowl.n.01'}, {'name': 'sugarcane_(plant)', 'id': 1032, 'frequency': 'r', 'synset': 'sugarcane.n.01'}, {'name': 'suit_(clothing)', 'id': 1033, 'frequency': 'f', 'synset': 'suit.n.01'}, {'name': 'sunflower', 'id': 1034, 'frequency': 'c', 'synset': 'sunflower.n.01'}, {'name': 'sunglasses', 'id': 1035, 'frequency': 'f', 'synset': 'sunglasses.n.01'}, {'name': 'sunhat', 'id': 1036, 'frequency': 'c', 'synset': 'sunhat.n.01'}, {'name': 'surfboard', 'id': 1037, 'frequency': 'f', 'synset': 'surfboard.n.01'}, {'name': 'sushi', 'id': 1038, 'frequency': 'c', 'synset': 'sushi.n.01'}, {'name': 'mop', 'id': 1039, 'frequency': 'c', 'synset': 'swab.n.02'}, {'name': 'sweat_pants', 'id': 1040, 'frequency': 'c', 'synset': 'sweat_pants.n.01'}, {'name': 'sweatband', 'id': 1041, 'frequency': 'c', 'synset': 'sweatband.n.02'}, {'name': 'sweater', 'id': 1042, 'frequency': 'f', 'synset': 'sweater.n.01'}, {'name': 'sweatshirt', 'id': 1043, 'frequency': 'f', 'synset': 'sweatshirt.n.01'}, {'name': 'sweet_potato', 'id': 1044, 'frequency': 'c', 'synset': 'sweet_potato.n.02'}, {'name': 'swimsuit', 'id': 1045, 'frequency': 'f', 'synset': 'swimsuit.n.01'}, {'name': 'sword', 'id': 1046, 'frequency': 'c', 'synset': 'sword.n.01'}, {'name': 'syringe', 'id': 1047, 'frequency': 'r', 'synset': 'syringe.n.01'}, {'name': 'Tabasco_sauce', 'id': 1048, 'frequency': 'r', 'synset': 'tabasco.n.02'}, {'name': 'table-tennis_table', 'id': 1049, 'frequency': 'r', 'synset': 'table-tennis_table.n.01'}, {'name': 'table', 'id': 1050, 'frequency': 'f', 'synset': 'table.n.02'}, {'name': 'table_lamp', 'id': 1051, 'frequency': 'c', 'synset': 'table_lamp.n.01'}, {'name': 'tablecloth', 'id': 1052, 'frequency': 'f', 'synset': 'tablecloth.n.01'}, {'name': 'tachometer', 'id': 1053, 'frequency': 'r', 'synset': 'tachometer.n.01'}, {'name': 'taco', 'id': 1054, 'frequency': 'r', 'synset': 'taco.n.02'}, {'name': 'tag', 'id': 1055, 'frequency': 'f', 'synset': 'tag.n.02'}, {'name': 'taillight', 'id': 1056, 'frequency': 'f', 'synset': 'taillight.n.01'}, {'name': 'tambourine', 'id': 1057, 'frequency': 'r', 'synset': 'tambourine.n.01'}, {'name': 'army_tank', 'id': 1058, 'frequency': 'r', 'synset': 'tank.n.01'}, {'name': 'tank_(storage_vessel)', 'id': 1059, 'frequency': 'f', 'synset': 'tank.n.02'}, {'name': 'tank_top_(clothing)', 'id': 1060, 'frequency': 'f', 'synset': 'tank_top.n.01'}, {'name': 'tape_(sticky_cloth_or_paper)', 'id': 1061, 'frequency': 'f', 'synset': 'tape.n.01'}, {'name': 'tape_measure', 'id': 1062, 'frequency': 'c', 'synset': 'tape.n.04'}, {'name': 'tapestry', 'id': 1063, 'frequency': 'c', 'synset': 'tapestry.n.02'}, {'name': 'tarp', 'id': 1064, 'frequency': 'f', 'synset': 'tarpaulin.n.01'}, {'name': 'tartan', 'id': 1065, 'frequency': 'c', 'synset': 'tartan.n.01'}, {'name': 'tassel', 'id': 1066, 'frequency': 'c', 'synset': 'tassel.n.01'}, {'name': 'tea_bag', 'id': 1067, 'frequency': 'c', 'synset': 'tea_bag.n.01'}, {'name': 'teacup', 'id': 1068, 'frequency': 'c', 'synset': 'teacup.n.02'}, {'name': 'teakettle', 'id': 1069, 'frequency': 'c', 'synset': 'teakettle.n.01'}, {'name': 'teapot', 'id': 1070, 'frequency': 'f', 'synset': 'teapot.n.01'}, {'name': 'teddy_bear', 'id': 1071, 'frequency': 'f', 'synset': 'teddy.n.01'}, {'name': 'telephone', 'id': 1072, 'frequency': 'f', 'synset': 'telephone.n.01'}, {'name': 'telephone_booth', 'id': 1073, 'frequency': 'c', 'synset': 'telephone_booth.n.01'}, {'name': 'telephone_pole', 'id': 1074, 'frequency': 'f', 'synset': 'telephone_pole.n.01'}, {'name': 'telephoto_lens', 'id': 1075, 'frequency': 'r', 'synset': 'telephoto_lens.n.01'}, {'name': 'television_camera', 'id': 1076, 'frequency': 'c', 'synset': 'television_camera.n.01'}, {'name': 'television_set', 'id': 1077, 'frequency': 'f', 'synset': 'television_receiver.n.01'}, {'name': 'tennis_ball', 'id': 1078, 'frequency': 'f', 'synset': 'tennis_ball.n.01'}, {'name': 'tennis_racket', 'id': 1079, 'frequency': 'f', 'synset': 'tennis_racket.n.01'}, {'name': 'tequila', 'id': 1080, 'frequency': 'r', 'synset': 'tequila.n.01'}, {'name': 'thermometer', 'id': 1081, 'frequency': 'c', 'synset': 'thermometer.n.01'}, {'name': 'thermos_bottle', 'id': 1082, 'frequency': 'c', 'synset': 'thermos.n.01'}, {'name': 'thermostat', 'id': 1083, 'frequency': 'f', 'synset': 'thermostat.n.01'}, {'name': 'thimble', 'id': 1084, 'frequency': 'r', 'synset': 'thimble.n.02'}, {'name': 'thread', 'id': 1085, 'frequency': 'c', 'synset': 'thread.n.01'}, {'name': 'thumbtack', 'id': 1086, 'frequency': 'c', 'synset': 'thumbtack.n.01'}, {'name': 'tiara', 'id': 1087, 'frequency': 'c', 'synset': 'tiara.n.01'}, {'name': 'tiger', 'id': 1088, 'frequency': 'c', 'synset': 'tiger.n.02'}, {'name': 'tights_(clothing)', 'id': 1089, 'frequency': 'c', 'synset': 'tights.n.01'}, {'name': 'timer', 'id': 1090, 'frequency': 'c', 'synset': 'timer.n.01'}, {'name': 'tinfoil', 'id': 1091, 'frequency': 'f', 'synset': 'tinfoil.n.01'}, {'name': 'tinsel', 'id': 1092, 'frequency': 'c', 'synset': 'tinsel.n.01'}, {'name': 'tissue_paper', 'id': 1093, 'frequency': 'f', 'synset': 'tissue.n.02'}, {'name': 'toast_(food)', 'id': 1094, 'frequency': 'c', 'synset': 'toast.n.01'}, {'name': 'toaster', 'id': 1095, 'frequency': 'f', 'synset': 'toaster.n.02'}, {'name': 'toaster_oven', 'id': 1096, 'frequency': 'f', 'synset': 'toaster_oven.n.01'}, {'name': 'toilet', 'id': 1097, 'frequency': 'f', 'synset': 'toilet.n.02'}, {'name': 'toilet_tissue', 'id': 1098, 'frequency': 'f', 'synset': 'toilet_tissue.n.01'}, {'name': 'tomato', 'id': 1099, 'frequency': 'f', 'synset': 'tomato.n.01'}, {'name': 'tongs', 'id': 1100, 'frequency': 'f', 'synset': 'tongs.n.01'}, {'name': 'toolbox', 'id': 1101, 'frequency': 'c', 'synset': 'toolbox.n.01'}, {'name': 'toothbrush', 'id': 1102, 'frequency': 'f', 'synset': 'toothbrush.n.01'}, {'name': 'toothpaste', 'id': 1103, 'frequency': 'f', 'synset': 'toothpaste.n.01'}, {'name': 'toothpick', 'id': 1104, 'frequency': 'f', 'synset': 'toothpick.n.01'}, {'name': 'cover', 'id': 1105, 'frequency': 'f', 'synset': 'top.n.09'}, {'name': 'tortilla', 'id': 1106, 'frequency': 'c', 'synset': 'tortilla.n.01'}, {'name': 'tow_truck', 'id': 1107, 'frequency': 'c', 'synset': 'tow_truck.n.01'}, {'name': 'towel', 'id': 1108, 'frequency': 'f', 'synset': 'towel.n.01'}, {'name': 'towel_rack', 'id': 1109, 'frequency': 'f', 'synset': 'towel_rack.n.01'}, {'name': 'toy', 'id': 1110, 'frequency': 'f', 'synset': 'toy.n.03'}, {'name': 'tractor_(farm_equipment)', 'id': 1111, 'frequency': 'c', 'synset': 'tractor.n.01'}, {'name': 'traffic_light', 'id': 1112, 'frequency': 'f', 'synset': 'traffic_light.n.01'}, {'name': 'dirt_bike', 'id': 1113, 'frequency': 'c', 'synset': 'trail_bike.n.01'}, {'name': 'trailer_truck', 'id': 1114, 'frequency': 'f', 'synset': 'trailer_truck.n.01'}, {'name': 'train_(railroad_vehicle)', 'id': 1115, 'frequency': 'f', 'synset': 'train.n.01'}, {'name': 'trampoline', 'id': 1116, 'frequency': 'r', 'synset': 'trampoline.n.01'}, {'name': 'tray', 'id': 1117, 'frequency': 'f', 'synset': 'tray.n.01'}, {'name': 'trench_coat', 'id': 1118, 'frequency': 'r', 'synset': 'trench_coat.n.01'}, {'name': 'triangle_(musical_instrument)', 'id': 1119, 'frequency': 'r', 'synset': 'triangle.n.05'}, {'name': 'tricycle', 'id': 1120, 'frequency': 'c', 'synset': 'tricycle.n.01'}, {'name': 'tripod', 'id': 1121, 'frequency': 'f', 'synset': 'tripod.n.01'}, {'name': 'trousers', 'id': 1122, 'frequency': 'f', 'synset': 'trouser.n.01'}, {'name': 'truck', 'id': 1123, 'frequency': 'f', 'synset': 'truck.n.01'}, {'name': 'truffle_(chocolate)', 'id': 1124, 'frequency': 'r', 'synset': 'truffle.n.03'}, {'name': 'trunk', 'id': 1125, 'frequency': 'c', 'synset': 'trunk.n.02'}, {'name': 'vat', 'id': 1126, 'frequency': 'r', 'synset': 'tub.n.02'}, {'name': 'turban', 'id': 1127, 'frequency': 'c', 'synset': 'turban.n.01'}, {'name': 'turkey_(food)', 'id': 1128, 'frequency': 'c', 'synset': 'turkey.n.04'}, {'name': 'turnip', 'id': 1129, 'frequency': 'r', 'synset': 'turnip.n.01'}, {'name': 'turtle', 'id': 1130, 'frequency': 'c', 'synset': 'turtle.n.02'}, {'name': 'turtleneck_(clothing)', 'id': 1131, 'frequency': 'c', 'synset': 'turtleneck.n.01'}, {'name': 'typewriter', 'id': 1132, 'frequency': 'c', 'synset': 'typewriter.n.01'}, {'name': 'umbrella', 'id': 1133, 'frequency': 'f', 'synset': 'umbrella.n.01'}, {'name': 'underwear', 'id': 1134, 'frequency': 'f', 'synset': 'underwear.n.01'}, {'name': 'unicycle', 'id': 1135, 'frequency': 'r', 'synset': 'unicycle.n.01'}, {'name': 'urinal', 'id': 1136, 'frequency': 'f', 'synset': 'urinal.n.01'}, {'name': 'urn', 'id': 1137, 'frequency': 'c', 'synset': 'urn.n.01'}, {'name': 'vacuum_cleaner', 'id': 1138, 'frequency': 'c', 'synset': 'vacuum.n.04'}, {'name': 'vase', 'id': 1139, 'frequency': 'f', 'synset': 'vase.n.01'}, {'name': 'vending_machine', 'id': 1140, 'frequency': 'c', 'synset': 'vending_machine.n.01'}, {'name': 'vent', 'id': 1141, 'frequency': 'f', 'synset': 'vent.n.01'}, {'name': 'vest', 'id': 1142, 'frequency': 'f', 'synset': 'vest.n.01'}, {'name': 'videotape', 'id': 1143, 'frequency': 'c', 'synset': 'videotape.n.01'}, {'name': 'vinegar', 'id': 1144, 'frequency': 'r', 'synset': 'vinegar.n.01'}, {'name': 'violin', 'id': 1145, 'frequency': 'r', 'synset': 'violin.n.01'}, {'name': 'vodka', 'id': 1146, 'frequency': 'r', 'synset': 'vodka.n.01'}, {'name': 'volleyball', 'id': 1147, 'frequency': 'c', 'synset': 'volleyball.n.02'}, {'name': 'vulture', 'id': 1148, 'frequency': 'r', 'synset': 'vulture.n.01'}, {'name': 'waffle', 'id': 1149, 'frequency': 'c', 'synset': 'waffle.n.01'}, {'name': 'waffle_iron', 'id': 1150, 'frequency': 'r', 'synset': 'waffle_iron.n.01'}, {'name': 'wagon', 'id': 1151, 'frequency': 'c', 'synset': 'wagon.n.01'}, {'name': 'wagon_wheel', 'id': 1152, 'frequency': 'c', 'synset': 'wagon_wheel.n.01'}, {'name': 'walking_stick', 'id': 1153, 'frequency': 'c', 'synset': 'walking_stick.n.01'}, {'name': 'wall_clock', 'id': 1154, 'frequency': 'c', 'synset': 'wall_clock.n.01'}, {'name': 'wall_socket', 'id': 1155, 'frequency': 'f', 'synset': 'wall_socket.n.01'}, {'name': 'wallet', 'id': 1156, 'frequency': 'f', 'synset': 'wallet.n.01'}, {'name': 'walrus', 'id': 1157, 'frequency': 'r', 'synset': 'walrus.n.01'}, {'name': 'wardrobe', 'id': 1158, 'frequency': 'r', 'synset': 'wardrobe.n.01'}, {'name': 'washbasin', 'id': 1159, 'frequency': 'r', 'synset': 'washbasin.n.01'}, {'name': 'automatic_washer', 'id': 1160, 'frequency': 'c', 'synset': 'washer.n.03'}, {'name': 'watch', 'id': 1161, 'frequency': 'f', 'synset': 'watch.n.01'}, {'name': 'water_bottle', 'id': 1162, 'frequency': 'f', 'synset': 'water_bottle.n.01'}, {'name': 'water_cooler', 'id': 1163, 'frequency': 'c', 'synset': 'water_cooler.n.01'}, {'name': 'water_faucet', 'id': 1164, 'frequency': 'c', 'synset': 'water_faucet.n.01'}, {'name': 'water_heater', 'id': 1165, 'frequency': 'r', 'synset': 'water_heater.n.01'}, {'name': 'water_jug', 'id': 1166, 'frequency': 'c', 'synset': 'water_jug.n.01'}, {'name': 'water_gun', 'id': 1167, 'frequency': 'r', 'synset': 'water_pistol.n.01'}, {'name': 'water_scooter', 'id': 1168, 'frequency': 'c', 'synset': 'water_scooter.n.01'}, {'name': 'water_ski', 'id': 1169, 'frequency': 'c', 'synset': 'water_ski.n.01'}, {'name': 'water_tower', 'id': 1170, 'frequency': 'c', 'synset': 'water_tower.n.01'}, {'name': 'watering_can', 'id': 1171, 'frequency': 'c', 'synset': 'watering_can.n.01'}, {'name': 'watermelon', 'id': 1172, 'frequency': 'f', 'synset': 'watermelon.n.02'}, {'name': 'weathervane', 'id': 1173, 'frequency': 'f', 'synset': 'weathervane.n.01'}, {'name': 'webcam', 'id': 1174, 'frequency': 'c', 'synset': 'webcam.n.01'}, {'name': 'wedding_cake', 'id': 1175, 'frequency': 'c', 'synset': 'wedding_cake.n.01'}, {'name': 'wedding_ring', 'id': 1176, 'frequency': 'c', 'synset': 'wedding_ring.n.01'}, {'name': 'wet_suit', 'id': 1177, 'frequency': 'f', 'synset': 'wet_suit.n.01'}, {'name': 'wheel', 'id': 1178, 'frequency': 'f', 'synset': 'wheel.n.01'}, {'name': 'wheelchair', 'id': 1179, 'frequency': 'c', 'synset': 'wheelchair.n.01'}, {'name': 'whipped_cream', 'id': 1180, 'frequency': 'c', 'synset': 'whipped_cream.n.01'}, {'name': 'whistle', 'id': 1181, 'frequency': 'c', 'synset': 'whistle.n.03'}, {'name': 'wig', 'id': 1182, 'frequency': 'c', 'synset': 'wig.n.01'}, {'name': 'wind_chime', 'id': 1183, 'frequency': 'c', 'synset': 'wind_chime.n.01'}, {'name': 'windmill', 'id': 1184, 'frequency': 'c', 'synset': 'windmill.n.01'}, {'name': 'window_box_(for_plants)', 'id': 1185, 'frequency': 'c', 'synset': 'window_box.n.01'}, {'name': 'windshield_wiper', 'id': 1186, 'frequency': 'f', 'synset': 'windshield_wiper.n.01'}, {'name': 'windsock', 'id': 1187, 'frequency': 'c', 'synset': 'windsock.n.01'}, {'name': 'wine_bottle', 'id': 1188, 'frequency': 'f', 'synset': 'wine_bottle.n.01'}, {'name': 'wine_bucket', 'id': 1189, 'frequency': 'c', 'synset': 'wine_bucket.n.01'}, {'name': 'wineglass', 'id': 1190, 'frequency': 'f', 'synset': 'wineglass.n.01'}, {'name': 'blinder_(for_horses)', 'id': 1191, 'frequency': 'f', 'synset': 'winker.n.02'}, {'name': 'wok', 'id': 1192, 'frequency': 'c', 'synset': 'wok.n.01'}, {'name': 'wolf', 'id': 1193, 'frequency': 'r', 'synset': 'wolf.n.01'}, {'name': 'wooden_spoon', 'id': 1194, 'frequency': 'c', 'synset': 'wooden_spoon.n.02'}, {'name': 'wreath', 'id': 1195, 'frequency': 'c', 'synset': 'wreath.n.01'}, {'name': 'wrench', 'id': 1196, 'frequency': 'c', 'synset': 'wrench.n.03'}, {'name': 'wristband', 'id': 1197, 'frequency': 'f', 'synset': 'wristband.n.01'}, {'name': 'wristlet', 'id': 1198, 'frequency': 'f', 'synset': 'wristlet.n.01'}, {'name': 'yacht', 'id': 1199, 'frequency': 'c', 'synset': 'yacht.n.01'}, {'name': 'yogurt', 'id': 1200, 'frequency': 'c', 'synset': 'yogurt.n.01'}, {'name': 'yoke_(animal_equipment)', 'id': 1201, 'frequency': 'c', 'synset': 'yoke.n.07'}, {'name': 'zebra', 'id': 1202, 'frequency': 'f', 'synset': 'zebra.n.01'}, {'name': 'zucchini', 'id': 1203, 'frequency': 'c', 'synset': 'zucchini.n.02'}, {'id': 1204, 'synset': 'organism.n.01', 'name': 'organism'}, {'id': 1205, 'synset': 'benthos.n.02', 'name': 'benthos'}, {'id': 1206, 'synset': 'heterotroph.n.01', 'name': 'heterotroph'}, {'id': 1207, 'synset': 'cell.n.02', 'name': 'cell'}, {'id': 1208, 'synset': 'animal.n.01', 'name': 'animal'}, {'id': 1209, 'synset': 'plant.n.02', 'name': 'plant'}, {'id': 1210, 'synset': 'food.n.01', 'name': 'food'}, {'id': 1211, 'synset': 'artifact.n.01', 'name': 'artifact'}, {'id': 1212, 'synset': 'hop.n.01', 'name': 'hop'}, {'id': 1213, 'synset': 'check-in.n.01', 'name': 'check-in'}, {'id': 1214, 'synset': 'dressage.n.01', 'name': 'dressage'}, {'id': 1215, 'synset': 'curvet.n.01', 'name': 'curvet'}, {'id': 1216, 'synset': 'piaffe.n.01', 'name': 'piaffe'}, {'id': 1217, 'synset': 'funambulism.n.01', 'name': 'funambulism'}, {'id': 1218, 'synset': 'rock_climbing.n.01', 'name': 'rock_climbing'}, {'id': 1219, 'synset': 'contact_sport.n.01', 'name': 'contact_sport'}, {'id': 1220, 'synset': 'outdoor_sport.n.01', 'name': 'outdoor_sport'}, {'id': 1221, 'synset': 'gymnastics.n.01', 'name': 'gymnastics'}, {'id': 1222, 'synset': 'acrobatics.n.01', 'name': 'acrobatics'}, {'id': 1223, 'synset': 'track_and_field.n.01', 'name': 'track_and_field'}, {'id': 1224, 'synset': 'track.n.11', 'name': 'track'}, {'id': 1225, 'synset': 'jumping.n.01', 'name': 'jumping'}, {'id': 1226, 'synset': 'broad_jump.n.02', 'name': 'broad_jump'}, {'id': 1227, 'synset': 'high_jump.n.02', 'name': 'high_jump'}, {'id': 1228, 'synset': 'fosbury_flop.n.01', 'name': 'Fosbury_flop'}, {'id': 1229, 'synset': 'skiing.n.01', 'name': 'skiing'}, {'id': 1230, 'synset': 'cross-country_skiing.n.01', 'name': 'cross-country_skiing'}, {'id': 1231, 'synset': 'ski_jumping.n.01', 'name': 'ski_jumping'}, {'id': 1232, 'synset': 'water_sport.n.01', 'name': 'water_sport'}, {'id': 1233, 'synset': 'swimming.n.01', 'name': 'swimming'}, {'id': 1234, 'synset': 'bathe.n.01', 'name': 'bathe'}, {'id': 1235, 'synset': 'dip.n.08', 'name': 'dip'}, {'id': 1236, 'synset': 'dive.n.02', 'name': 'dive'}, {'id': 1237, 'synset': 'floating.n.01', 'name': 'floating'}, {'id': 1238, 'synset': "dead-man's_float.n.01", 'name': "dead-man's_float"}, {'id': 1239, 'synset': 'belly_flop.n.01', 'name': 'belly_flop'}, {'id': 1240, 'synset': 'cliff_diving.n.01', 'name': 'cliff_diving'}, {'id': 1241, 'synset': 'flip.n.05', 'name': 'flip'}, {'id': 1242, 'synset': 'gainer.n.03', 'name': 'gainer'}, {'id': 1243, 'synset': 'half_gainer.n.01', 'name': 'half_gainer'}, {'id': 1244, 'synset': 'jackknife.n.02', 'name': 'jackknife'}, {'id': 1245, 'synset': 'swan_dive.n.01', 'name': 'swan_dive'}, {'id': 1246, 'synset': 'skin_diving.n.01', 'name': 'skin_diving'}, {'id': 1247, 'synset': 'scuba_diving.n.01', 'name': 'scuba_diving'}, {'id': 1248, 'synset': 'snorkeling.n.01', 'name': 'snorkeling'}, {'id': 1249, 'synset': 'surfing.n.01', 'name': 'surfing'}, {'id': 1250, 'synset': 'water-skiing.n.01', 'name': 'water-skiing'}, {'id': 1251, 'synset': 'rowing.n.01', 'name': 'rowing'}, {'id': 1252, 'synset': 'sculling.n.01', 'name': 'sculling'}, {'id': 1253, 'synset': 'boxing.n.01', 'name': 'boxing'}, {'id': 1254, 'synset': 'professional_boxing.n.01', 'name': 'professional_boxing'}, {'id': 1255, 'synset': 'in-fighting.n.02', 'name': 'in-fighting'}, {'id': 1256, 'synset': 'fight.n.05', 'name': 'fight'}, {'id': 1257, 'synset': 'rope-a-dope.n.01', 'name': 'rope-a-dope'}, {'id': 1258, 'synset': 'spar.n.03', 'name': 'spar'}, {'id': 1259, 'synset': 'archery.n.01', 'name': 'archery'}, {'id': 1260, 'synset': 'sledding.n.01', 'name': 'sledding'}, {'id': 1261, 'synset': 'tobogganing.n.01', 'name': 'tobogganing'}, {'id': 1262, 'synset': 'luging.n.01', 'name': 'luging'}, {'id': 1263, 'synset': 'bobsledding.n.01', 'name': 'bobsledding'}, {'id': 1264, 'synset': 'wrestling.n.02', 'name': 'wrestling'}, {'id': 1265, 'synset': 'greco-roman_wrestling.n.01', 'name': 'Greco-Roman_wrestling'}, {'id': 1266, 'synset': 'professional_wrestling.n.01', 'name': 'professional_wrestling'}, {'id': 1267, 'synset': 'sumo.n.01', 'name': 'sumo'}, {'id': 1268, 'synset': 'skating.n.01', 'name': 'skating'}, {'id': 1269, 'synset': 'ice_skating.n.01', 'name': 'ice_skating'}, {'id': 1270, 'synset': 'figure_skating.n.01', 'name': 'figure_skating'}, {'id': 1271, 'synset': 'rollerblading.n.01', 'name': 'rollerblading'}, {'id': 1272, 'synset': 'roller_skating.n.01', 'name': 'roller_skating'}, {'id': 1273, 'synset': 'skateboarding.n.01', 'name': 'skateboarding'}, {'id': 1274, 'synset': 'speed_skating.n.01', 'name': 'speed_skating'}, {'id': 1275, 'synset': 'racing.n.01', 'name': 'racing'}, {'id': 1276, 'synset': 'auto_racing.n.01', 'name': 'auto_racing'}, {'id': 1277, 'synset': 'boat_racing.n.01', 'name': 'boat_racing'}, {'id': 1278, 'synset': 'hydroplane_racing.n.01', 'name': 'hydroplane_racing'}, {'id': 1279, 'synset': 'camel_racing.n.01', 'name': 'camel_racing'}, {'id': 1280, 'synset': 'greyhound_racing.n.01', 'name': 'greyhound_racing'}, {'id': 1281, 'synset': 'horse_racing.n.01', 'name': 'horse_racing'}, {'id': 1282, 'synset': 'riding.n.01', 'name': 'riding'}, {'id': 1283, 'synset': 'equestrian_sport.n.01', 'name': 'equestrian_sport'}, {'id': 1284, 'synset': 'pony-trekking.n.01', 'name': 'pony-trekking'}, {'id': 1285, 'synset': 'showjumping.n.01', 'name': 'showjumping'}, {'id': 1286, 'synset': 'cross-country_riding.n.01', 'name': 'cross-country_riding'}, {'id': 1287, 'synset': 'cycling.n.01', 'name': 'cycling'}, {'id': 1288, 'synset': 'bicycling.n.01', 'name': 'bicycling'}, {'id': 1289, 'synset': 'motorcycling.n.01', 'name': 'motorcycling'}, {'id': 1290, 'synset': 'dune_cycling.n.01', 'name': 'dune_cycling'}, {'id': 1291, 'synset': 'blood_sport.n.01', 'name': 'blood_sport'}, {'id': 1292, 'synset': 'bullfighting.n.01', 'name': 'bullfighting'}, {'id': 1293, 'synset': 'cockfighting.n.01', 'name': 'cockfighting'}, {'id': 1294, 'synset': 'hunt.n.08', 'name': 'hunt'}, {'id': 1295, 'synset': 'battue.n.01', 'name': 'battue'}, {'id': 1296, 'synset': 'beagling.n.01', 'name': 'beagling'}, {'id': 1297, 'synset': 'coursing.n.01', 'name': 'coursing'}, {'id': 1298, 'synset': 'deer_hunting.n.01', 'name': 'deer_hunting'}, {'id': 1299, 'synset': 'ducking.n.01', 'name': 'ducking'}, {'id': 1300, 'synset': 'fox_hunting.n.01', 'name': 'fox_hunting'}, {'id': 1301, 'synset': 'pigsticking.n.01', 'name': 'pigsticking'}, {'id': 1302, 'synset': 'fishing.n.01', 'name': 'fishing'}, {'id': 1303, 'synset': 'angling.n.01', 'name': 'angling'}, {'id': 1304, 'synset': 'fly-fishing.n.01', 'name': 'fly-fishing'}, {'id': 1305, 'synset': 'troll.n.04', 'name': 'troll'}, {'id': 1306, 'synset': 'casting.n.03', 'name': 'casting'}, {'id': 1307, 'synset': 'bait_casting.n.01', 'name': 'bait_casting'}, {'id': 1308, 'synset': 'fly_casting.n.01', 'name': 'fly_casting'}, {'id': 1309, 'synset': 'overcast.n.04', 'name': 'overcast'}, {'id': 1310, 'synset': 'surf_casting.n.01', 'name': 'surf_casting'}, {'id': 1311, 'synset': 'day_game.n.01', 'name': 'day_game'}, {'id': 1312, 'synset': 'athletic_game.n.01', 'name': 'athletic_game'}, {'id': 1313, 'synset': 'ice_hockey.n.01', 'name': 'ice_hockey'}, {'id': 1314, 'synset': 'tetherball.n.01', 'name': 'tetherball'}, {'id': 1315, 'synset': 'water_polo.n.01', 'name': 'water_polo'}, {'id': 1316, 'synset': 'outdoor_game.n.01', 'name': 'outdoor_game'}, {'id': 1317, 'synset': 'golf.n.01', 'name': 'golf'}, {'id': 1318, 'synset': 'professional_golf.n.01', 'name': 'professional_golf'}, {'id': 1319, 'synset': 'round_of_golf.n.01', 'name': 'round_of_golf'}, {'id': 1320, 'synset': 'medal_play.n.01', 'name': 'medal_play'}, {'id': 1321, 'synset': 'match_play.n.01', 'name': 'match_play'}, {'id': 1322, 'synset': 'miniature_golf.n.01', 'name': 'miniature_golf'}, {'id': 1323, 'synset': 'croquet.n.01', 'name': 'croquet'}, {'id': 1324, 'synset': 'quoits.n.01', 'name': 'quoits'}, {'id': 1325, 'synset': 'shuffleboard.n.01', 'name': 'shuffleboard'}, {'id': 1326, 'synset': 'field_game.n.01', 'name': 'field_game'}, {'id': 1327, 'synset': 'field_hockey.n.01', 'name': 'field_hockey'}, {'id': 1328, 'synset': 'shinny.n.01', 'name': 'shinny'}, {'id': 1329, 'synset': 'football.n.01', 'name': 'football'}, {'id': 1330, 'synset': 'american_football.n.01', 'name': 'American_football'}, {'id': 1331, 'synset': 'professional_football.n.01', 'name': 'professional_football'}, {'id': 1332, 'synset': 'touch_football.n.01', 'name': 'touch_football'}, {'id': 1333, 'synset': 'hurling.n.01', 'name': 'hurling'}, {'id': 1334, 'synset': 'rugby.n.01', 'name': 'rugby'}, {'id': 1335, 'synset': 'ball_game.n.01', 'name': 'ball_game'}, {'id': 1336, 'synset': 'baseball.n.01', 'name': 'baseball'}, {'id': 1337, 'synset': 'ball.n.11', 'name': 'ball'}, {'id': 1338, 'synset': 'professional_baseball.n.01', 'name': 'professional_baseball'}, {'id': 1339, 'synset': 'hardball.n.02', 'name': 'hardball'}, {'id': 1340, 'synset': 'perfect_game.n.01', 'name': 'perfect_game'}, {'id': 1341, 'synset': 'no-hit_game.n.01', 'name': 'no-hit_game'}, {'id': 1342, 'synset': 'one-hitter.n.01', 'name': 'one-hitter'}, {'id': 1343, 'synset': 'two-hitter.n.01', 'name': 'two-hitter'}, {'id': 1344, 'synset': 'three-hitter.n.01', 'name': 'three-hitter'}, {'id': 1345, 'synset': 'four-hitter.n.01', 'name': 'four-hitter'}, {'id': 1346, 'synset': 'five-hitter.n.01', 'name': 'five-hitter'}, {'id': 1347, 'synset': 'softball.n.02', 'name': 'softball'}, {'id': 1348, 'synset': 'rounders.n.01', 'name': 'rounders'}, {'id': 1349, 'synset': 'stickball.n.01', 'name': 'stickball'}, {'id': 1350, 'synset': 'cricket.n.02', 'name': 'cricket'}, {'id': 1351, 'synset': 'lacrosse.n.01', 'name': 'lacrosse'}, {'id': 1352, 'synset': 'polo.n.02', 'name': 'polo'}, {'id': 1353, 'synset': 'pushball.n.01', 'name': 'pushball'}, {'id': 1354, 'synset': 'soccer.n.01', 'name': 'soccer'}, {'id': 1355, 'synset': 'court_game.n.01', 'name': 'court_game'}, {'id': 1356, 'synset': 'handball.n.02', 'name': 'handball'}, {'id': 1357, 'synset': 'racquetball.n.02', 'name': 'racquetball'}, {'id': 1358, 'synset': 'fives.n.01', 'name': 'fives'}, {'id': 1359, 'synset': 'squash.n.03', 'name': 'squash'}, {'id': 1360, 'synset': 'volleyball.n.01', 'name': 'volleyball'}, {'id': 1361, 'synset': 'jai_alai.n.01', 'name': 'jai_alai'}, {'id': 1362, 'synset': 'badminton.n.01', 'name': 'badminton'}, {'id': 1363, 'synset': 'battledore.n.02', 'name': 'battledore'}, {'id': 1364, 'synset': 'basketball.n.01', 'name': 'basketball'}, {'id': 1365, 'synset': 'professional_basketball.n.01', 'name': 'professional_basketball'}, {'id': 1366, 'synset': 'deck_tennis.n.01', 'name': 'deck_tennis'}, {'id': 1367, 'synset': 'netball.n.01', 'name': 'netball'}, {'id': 1368, 'synset': 'tennis.n.01', 'name': 'tennis'}, {'id': 1369, 'synset': 'professional_tennis.n.01', 'name': 'professional_tennis'}, {'id': 1370, 'synset': 'singles.n.02', 'name': 'singles'}, {'id': 1371, 'synset': 'singles.n.01', 'name': 'singles'}, {'id': 1372, 'synset': 'doubles.n.02', 'name': 'doubles'}, {'id': 1373, 'synset': 'doubles.n.01', 'name': 'doubles'}, {'id': 1374, 'synset': 'royal_tennis.n.01', 'name': 'royal_tennis'}, {'id': 1375, 'synset': 'pallone.n.01', 'name': 'pallone'}, {'id': 1376, 'synset': 'sport.n.01', 'name': 'sport'}, {'id': 1377, 'synset': 'clasp.n.02', 'name': 'clasp'}, {'id': 1378, 'synset': 'judo.n.01', 'name': 'judo'}, {'id': 1379, 'synset': 'team_sport.n.01', 'name': 'team_sport'}, {'id': 1380, 'synset': 'last_supper.n.01', 'name': 'Last_Supper'}, {'id': 1381, 'synset': 'seder.n.01', 'name': 'Seder'}, {'id': 1382, 'synset': 'camping.n.01', 'name': 'camping'}, {'id': 1383, 'synset': 'pest.n.04', 'name': 'pest'}, {'id': 1384, 'synset': 'critter.n.01', 'name': 'critter'}, {'id': 1385, 'synset': 'creepy-crawly.n.01', 'name': 'creepy-crawly'}, {'id': 1386, 'synset': 'darter.n.02', 'name': 'darter'}, {'id': 1387, 'synset': 'peeper.n.03', 'name': 'peeper'}, {'id': 1388, 'synset': 'homeotherm.n.01', 'name': 'homeotherm'}, {'id': 1389, 'synset': 'poikilotherm.n.01', 'name': 'poikilotherm'}, {'id': 1390, 'synset': 'range_animal.n.01', 'name': 'range_animal'}, {'id': 1391, 'synset': 'scavenger.n.03', 'name': 'scavenger'}, {'id': 1392, 'synset': 'bottom-feeder.n.02', 'name': 'bottom-feeder'}, {'id': 1393, 'synset': 'bottom-feeder.n.01', 'name': 'bottom-feeder'}, {'id': 1394, 'synset': 'work_animal.n.01', 'name': 'work_animal'}, {'id': 1395, 'synset': 'beast_of_burden.n.01', 'name': 'beast_of_burden'}, {'id': 1396, 'synset': 'draft_animal.n.01', 'name': 'draft_animal'}, {'id': 1397, 'synset': 'pack_animal.n.01', 'name': 'pack_animal'}, {'id': 1398, 'synset': 'domestic_animal.n.01', 'name': 'domestic_animal'}, {'id': 1399, 'synset': 'feeder.n.01', 'name': 'feeder'}, {'id': 1400, 'synset': 'feeder.n.06', 'name': 'feeder'}, {'id': 1401, 'synset': 'stocker.n.01', 'name': 'stocker'}, {'id': 1402, 'synset': 'hatchling.n.01', 'name': 'hatchling'}, {'id': 1403, 'synset': 'head.n.02', 'name': 'head'}, {'id': 1404, 'synset': 'migrator.n.02', 'name': 'migrator'}, {'id': 1405, 'synset': 'molter.n.01', 'name': 'molter'}, {'id': 1406, 'synset': 'stayer.n.01', 'name': 'stayer'}, {'id': 1407, 'synset': 'stunt.n.02', 'name': 'stunt'}, {'id': 1408, 'synset': 'marine_animal.n.01', 'name': 'marine_animal'}, {'id': 1409, 'synset': 'by-catch.n.01', 'name': 'by-catch'}, {'id': 1410, 'synset': 'female.n.01', 'name': 'female'}, {'id': 1411, 'synset': 'hen.n.04', 'name': 'hen'}, {'id': 1412, 'synset': 'male.n.01', 'name': 'male'}, {'id': 1413, 'synset': 'adult.n.02', 'name': 'adult'}, {'id': 1414, 'synset': 'young.n.01', 'name': 'young'}, {'id': 1415, 'synset': 'orphan.n.04', 'name': 'orphan'}, {'id': 1416, 'synset': 'young_mammal.n.01', 'name': 'young_mammal'}, {'id': 1417, 'synset': 'baby.n.06', 'name': 'baby'}, {'id': 1418, 'synset': 'pup.n.01', 'name': 'pup'}, {'id': 1419, 'synset': 'wolf_pup.n.01', 'name': 'wolf_pup'}, {'id': 1420, 'synset': 'lion_cub.n.01', 'name': 'lion_cub'}, {'id': 1421, 'synset': 'bear_cub.n.01', 'name': 'bear_cub'}, {'id': 1422, 'synset': 'tiger_cub.n.01', 'name': 'tiger_cub'}, {'id': 1423, 'synset': 'kit.n.03', 'name': 'kit'}, {'id': 1424, 'synset': 'suckling.n.03', 'name': 'suckling'}, {'id': 1425, 'synset': 'sire.n.03', 'name': 'sire'}, {'id': 1426, 'synset': 'dam.n.03', 'name': 'dam'}, {'id': 1427, 'synset': 'thoroughbred.n.03', 'name': 'thoroughbred'}, {'id': 1428, 'synset': 'giant.n.01', 'name': 'giant'}, {'id': 1429, 'synset': 'mutant.n.02', 'name': 'mutant'}, {'id': 1430, 'synset': 'carnivore.n.02', 'name': 'carnivore'}, {'id': 1431, 'synset': 'herbivore.n.01', 'name': 'herbivore'}, {'id': 1432, 'synset': 'insectivore.n.02', 'name': 'insectivore'}, {'id': 1433, 'synset': 'acrodont.n.01', 'name': 'acrodont'}, {'id': 1434, 'synset': 'pleurodont.n.01', 'name': 'pleurodont'}, {'id': 1435, 'synset': 'microorganism.n.01', 'name': 'microorganism'}, {'id': 1436, 'synset': 'monohybrid.n.01', 'name': 'monohybrid'}, {'id': 1437, 'synset': 'arbovirus.n.01', 'name': 'arbovirus'}, {'id': 1438, 'synset': 'adenovirus.n.01', 'name': 'adenovirus'}, {'id': 1439, 'synset': 'arenavirus.n.01', 'name': 'arenavirus'}, {'id': 1440, 'synset': 'marburg_virus.n.01', 'name': 'Marburg_virus'}, {'id': 1441, 'synset': 'arenaviridae.n.01', 'name': 'Arenaviridae'}, {'id': 1442, 'synset': 'vesiculovirus.n.01', 'name': 'vesiculovirus'}, {'id': 1443, 'synset': 'reoviridae.n.01', 'name': 'Reoviridae'}, {'id': 1444, 'synset': 'variola_major.n.02', 'name': 'variola_major'}, {'id': 1445, 'synset': 'viroid.n.01', 'name': 'viroid'}, {'id': 1446, 'synset': 'coliphage.n.01', 'name': 'coliphage'}, {'id': 1447, 'synset': 'paramyxovirus.n.01', 'name': 'paramyxovirus'}, {'id': 1448, 'synset': 'poliovirus.n.01', 'name': 'poliovirus'}, {'id': 1449, 'synset': 'herpes.n.02', 'name': 'herpes'}, {'id': 1450, 'synset': 'herpes_simplex_1.n.01', 'name': 'herpes_simplex_1'}, {'id': 1451, 'synset': 'herpes_zoster.n.02', 'name': 'herpes_zoster'}, {'id': 1452, 'synset': 'herpes_varicella_zoster.n.01', 'name': 'herpes_varicella_zoster'}, {'id': 1453, 'synset': 'cytomegalovirus.n.01', 'name': 'cytomegalovirus'}, {'id': 1454, 'synset': 'varicella_zoster_virus.n.01', 'name': 'varicella_zoster_virus'}, {'id': 1455, 'synset': 'polyoma.n.01', 'name': 'polyoma'}, {'id': 1456, 'synset': 'lyssavirus.n.01', 'name': 'lyssavirus'}, {'id': 1457, 'synset': 'reovirus.n.01', 'name': 'reovirus'}, {'id': 1458, 'synset': 'rotavirus.n.01', 'name': 'rotavirus'}, {'id': 1459, 'synset': 'moneran.n.01', 'name': 'moneran'}, {'id': 1460, 'synset': 'archaebacteria.n.01', 'name': 'archaebacteria'}, {'id': 1461, 'synset': 'bacteroid.n.01', 'name': 'bacteroid'}, {'id': 1462, 'synset': 'bacillus_anthracis.n.01', 'name': 'Bacillus_anthracis'}, {'id': 1463, 'synset': 'yersinia_pestis.n.01', 'name': 'Yersinia_pestis'}, {'id': 1464, 'synset': 'brucella.n.01', 'name': 'Brucella'}, {'id': 1465, 'synset': 'spirillum.n.02', 'name': 'spirillum'}, {'id': 1466, 'synset': 'botulinus.n.01', 'name': 'botulinus'}, {'id': 1467, 'synset': 'clostridium_perfringens.n.01', 'name': 'clostridium_perfringens'}, {'id': 1468, 'synset': 'cyanobacteria.n.01', 'name': 'cyanobacteria'}, {'id': 1469, 'synset': 'trichodesmium.n.01', 'name': 'trichodesmium'}, {'id': 1470, 'synset': 'nitric_bacteria.n.01', 'name': 'nitric_bacteria'}, {'id': 1471, 'synset': 'spirillum.n.01', 'name': 'spirillum'}, {'id': 1472, 'synset': 'francisella.n.01', 'name': 'Francisella'}, {'id': 1473, 'synset': 'gonococcus.n.01', 'name': 'gonococcus'}, {'id': 1474, 'synset': 'corynebacterium_diphtheriae.n.01', 'name': 'Corynebacterium_diphtheriae'}, {'id': 1475, 'synset': 'enteric_bacteria.n.01', 'name': 'enteric_bacteria'}, {'id': 1476, 'synset': 'klebsiella.n.01', 'name': 'klebsiella'}, {'id': 1477, 'synset': 'salmonella_typhimurium.n.01', 'name': 'Salmonella_typhimurium'}, {'id': 1478, 'synset': 'typhoid_bacillus.n.01', 'name': 'typhoid_bacillus'}, {'id': 1479, 'synset': 'nitrate_bacterium.n.01', 'name': 'nitrate_bacterium'}, {'id': 1480, 'synset': 'nitrite_bacterium.n.01', 'name': 'nitrite_bacterium'}, {'id': 1481, 'synset': 'actinomycete.n.01', 'name': 'actinomycete'}, {'id': 1482, 'synset': 'streptomyces.n.01', 'name': 'streptomyces'}, {'id': 1483, 'synset': 'streptomyces_erythreus.n.01', 'name': 'Streptomyces_erythreus'}, {'id': 1484, 'synset': 'streptomyces_griseus.n.01', 'name': 'Streptomyces_griseus'}, {'id': 1485, 'synset': 'tubercle_bacillus.n.01', 'name': 'tubercle_bacillus'}, {'id': 1486, 'synset': 'pus-forming_bacteria.n.01', 'name': 'pus-forming_bacteria'}, {'id': 1487, 'synset': 'streptobacillus.n.01', 'name': 'streptobacillus'}, {'id': 1488, 'synset': 'myxobacteria.n.01', 'name': 'myxobacteria'}, {'id': 1489, 'synset': 'staphylococcus.n.01', 'name': 'staphylococcus'}, {'id': 1490, 'synset': 'diplococcus.n.01', 'name': 'diplococcus'}, {'id': 1491, 'synset': 'pneumococcus.n.01', 'name': 'pneumococcus'}, {'id': 1492, 'synset': 'streptococcus.n.01', 'name': 'streptococcus'}, {'id': 1493, 'synset': 'spirochete.n.01', 'name': 'spirochete'}, {'id': 1494, 'synset': 'planktonic_algae.n.01', 'name': 'planktonic_algae'}, {'id': 1495, 'synset': 'zooplankton.n.01', 'name': 'zooplankton'}, {'id': 1496, 'synset': 'parasite.n.01', 'name': 'parasite'}, {'id': 1497, 'synset': 'endoparasite.n.01', 'name': 'endoparasite'}, {'id': 1498, 'synset': 'ectoparasite.n.01', 'name': 'ectoparasite'}, {'id': 1499, 'synset': 'pathogen.n.01', 'name': 'pathogen'}, {'id': 1500, 'synset': 'commensal.n.01', 'name': 'commensal'}, {'id': 1501, 'synset': 'myrmecophile.n.01', 'name': 'myrmecophile'}, {'id': 1502, 'synset': 'protoctist.n.01', 'name': 'protoctist'}, {'id': 1503, 'synset': 'protozoan.n.01', 'name': 'protozoan'}, {'id': 1504, 'synset': 'sarcodinian.n.01', 'name': 'sarcodinian'}, {'id': 1505, 'synset': 'heliozoan.n.01', 'name': 'heliozoan'}, {'id': 1506, 'synset': 'endameba.n.01', 'name': 'endameba'}, {'id': 1507, 'synset': 'ameba.n.01', 'name': 'ameba'}, {'id': 1508, 'synset': 'globigerina.n.01', 'name': 'globigerina'}, {'id': 1509, 'synset': 'testacean.n.01', 'name': 'testacean'}, {'id': 1510, 'synset': 'arcella.n.01', 'name': 'arcella'}, {'id': 1511, 'synset': 'difflugia.n.01', 'name': 'difflugia'}, {'id': 1512, 'synset': 'ciliate.n.01', 'name': 'ciliate'}, {'id': 1513, 'synset': 'paramecium.n.01', 'name': 'paramecium'}, {'id': 1514, 'synset': 'stentor.n.03', 'name': 'stentor'}, {'id': 1515, 'synset': 'alga.n.01', 'name': 'alga'}, {'id': 1516, 'synset': 'arame.n.01', 'name': 'arame'}, {'id': 1517, 'synset': 'seagrass.n.01', 'name': 'seagrass'}, {'id': 1518, 'synset': 'golden_algae.n.01', 'name': 'golden_algae'}, {'id': 1519, 'synset': 'yellow-green_algae.n.01', 'name': 'yellow-green_algae'}, {'id': 1520, 'synset': 'brown_algae.n.01', 'name': 'brown_algae'}, {'id': 1521, 'synset': 'kelp.n.01', 'name': 'kelp'}, {'id': 1522, 'synset': 'fucoid.n.02', 'name': 'fucoid'}, {'id': 1523, 'synset': 'fucoid.n.01', 'name': 'fucoid'}, {'id': 1524, 'synset': 'fucus.n.01', 'name': 'fucus'}, {'id': 1525, 'synset': 'bladderwrack.n.01', 'name': 'bladderwrack'}, {'id': 1526, 'synset': 'green_algae.n.01', 'name': 'green_algae'}, {'id': 1527, 'synset': 'pond_scum.n.01', 'name': 'pond_scum'}, {'id': 1528, 'synset': 'chlorella.n.01', 'name': 'chlorella'}, {'id': 1529, 'synset': 'stonewort.n.01', 'name': 'stonewort'}, {'id': 1530, 'synset': 'desmid.n.01', 'name': 'desmid'}, {'id': 1531, 'synset': 'sea_moss.n.02', 'name': 'sea_moss'}, {'id': 1532, 'synset': 'eukaryote.n.01', 'name': 'eukaryote'}, {'id': 1533, 'synset': 'prokaryote.n.01', 'name': 'prokaryote'}, {'id': 1534, 'synset': 'zooid.n.01', 'name': 'zooid'}, {'id': 1535, 'synset': 'leishmania.n.01', 'name': 'Leishmania'}, {'id': 1536, 'synset': 'zoomastigote.n.01', 'name': 'zoomastigote'}, {'id': 1537, 'synset': 'polymastigote.n.01', 'name': 'polymastigote'}, {'id': 1538, 'synset': 'costia.n.01', 'name': 'costia'}, {'id': 1539, 'synset': 'giardia.n.01', 'name': 'giardia'}, {'id': 1540, 'synset': 'cryptomonad.n.01', 'name': 'cryptomonad'}, {'id': 1541, 'synset': 'sporozoan.n.01', 'name': 'sporozoan'}, {'id': 1542, 'synset': 'sporozoite.n.01', 'name': 'sporozoite'}, {'id': 1543, 'synset': 'trophozoite.n.01', 'name': 'trophozoite'}, {'id': 1544, 'synset': 'merozoite.n.01', 'name': 'merozoite'}, {'id': 1545, 'synset': 'coccidium.n.01', 'name': 'coccidium'}, {'id': 1546, 'synset': 'gregarine.n.01', 'name': 'gregarine'}, {'id': 1547, 'synset': 'plasmodium.n.02', 'name': 'plasmodium'}, {'id': 1548, 'synset': 'leucocytozoan.n.01', 'name': 'leucocytozoan'}, {'id': 1549, 'synset': 'microsporidian.n.01', 'name': 'microsporidian'}, {'id': 1550, 'synset': 'ostariophysi.n.01', 'name': 'Ostariophysi'}, {'id': 1551, 'synset': 'cypriniform_fish.n.01', 'name': 'cypriniform_fish'}, {'id': 1552, 'synset': 'loach.n.01', 'name': 'loach'}, {'id': 1553, 'synset': 'cyprinid.n.01', 'name': 'cyprinid'}, {'id': 1554, 'synset': 'carp.n.02', 'name': 'carp'}, {'id': 1555, 'synset': 'domestic_carp.n.01', 'name': 'domestic_carp'}, {'id': 1556, 'synset': 'leather_carp.n.01', 'name': 'leather_carp'}, {'id': 1557, 'synset': 'mirror_carp.n.01', 'name': 'mirror_carp'}, {'id': 1558, 'synset': 'european_bream.n.01', 'name': 'European_bream'}, {'id': 1559, 'synset': 'tench.n.01', 'name': 'tench'}, {'id': 1560, 'synset': 'dace.n.01', 'name': 'dace'}, {'id': 1561, 'synset': 'chub.n.01', 'name': 'chub'}, {'id': 1562, 'synset': 'shiner.n.04', 'name': 'shiner'}, {'id': 1563, 'synset': 'common_shiner.n.01', 'name': 'common_shiner'}, {'id': 1564, 'synset': 'roach.n.05', 'name': 'roach'}, {'id': 1565, 'synset': 'rudd.n.01', 'name': 'rudd'}, {'id': 1566, 'synset': 'minnow.n.01', 'name': 'minnow'}, {'id': 1567, 'synset': 'gudgeon.n.02', 'name': 'gudgeon'}, {'id': 1568, 'synset': 'crucian_carp.n.01', 'name': 'crucian_carp'}, {'id': 1569, 'synset': 'electric_eel.n.01', 'name': 'electric_eel'}, {'id': 1570, 'synset': 'catostomid.n.01', 'name': 'catostomid'}, {'id': 1571, 'synset': 'buffalo_fish.n.01', 'name': 'buffalo_fish'}, {'id': 1572, 'synset': 'black_buffalo.n.01', 'name': 'black_buffalo'}, {'id': 1573, 'synset': 'hog_sucker.n.01', 'name': 'hog_sucker'}, {'id': 1574, 'synset': 'redhorse.n.01', 'name': 'redhorse'}, {'id': 1575, 'synset': 'cyprinodont.n.01', 'name': 'cyprinodont'}, {'id': 1576, 'synset': 'killifish.n.01', 'name': 'killifish'}, {'id': 1577, 'synset': 'mummichog.n.01', 'name': 'mummichog'}, {'id': 1578, 'synset': 'striped_killifish.n.01', 'name': 'striped_killifish'}, {'id': 1579, 'synset': 'rivulus.n.01', 'name': 'rivulus'}, {'id': 1580, 'synset': 'flagfish.n.01', 'name': 'flagfish'}, {'id': 1581, 'synset': 'swordtail.n.01', 'name': 'swordtail'}, {'id': 1582, 'synset': 'guppy.n.01', 'name': 'guppy'}, {'id': 1583, 'synset': 'topminnow.n.01', 'name': 'topminnow'}, {'id': 1584, 'synset': 'mosquitofish.n.01', 'name': 'mosquitofish'}, {'id': 1585, 'synset': 'platy.n.01', 'name': 'platy'}, {'id': 1586, 'synset': 'mollie.n.01', 'name': 'mollie'}, {'id': 1587, 'synset': 'squirrelfish.n.02', 'name': 'squirrelfish'}, {'id': 1588, 'synset': 'reef_squirrelfish.n.01', 'name': 'reef_squirrelfish'}, {'id': 1589, 'synset': 'deepwater_squirrelfish.n.01', 'name': 'deepwater_squirrelfish'}, {'id': 1590, 'synset': 'holocentrus_ascensionis.n.01', 'name': 'Holocentrus_ascensionis'}, {'id': 1591, 'synset': 'soldierfish.n.01', 'name': 'soldierfish'}, {'id': 1592, 'synset': 'anomalops.n.01', 'name': 'anomalops'}, {'id': 1593, 'synset': 'flashlight_fish.n.01', 'name': 'flashlight_fish'}, {'id': 1594, 'synset': 'john_dory.n.01', 'name': 'John_Dory'}, {'id': 1595, 'synset': 'boarfish.n.02', 'name': 'boarfish'}, {'id': 1596, 'synset': 'boarfish.n.01', 'name': 'boarfish'}, {'id': 1597, 'synset': 'cornetfish.n.01', 'name': 'cornetfish'}, {'id': 1598, 'synset': 'stickleback.n.01', 'name': 'stickleback'}, {'id': 1599, 'synset': 'three-spined_stickleback.n.01', 'name': 'three-spined_stickleback'}, {'id': 1600, 'synset': 'ten-spined_stickleback.n.01', 'name': 'ten-spined_stickleback'}, {'id': 1601, 'synset': 'pipefish.n.01', 'name': 'pipefish'}, {'id': 1602, 'synset': 'dwarf_pipefish.n.01', 'name': 'dwarf_pipefish'}, {'id': 1603, 'synset': 'deepwater_pipefish.n.01', 'name': 'deepwater_pipefish'}, {'id': 1604, 'synset': 'snipefish.n.01', 'name': 'snipefish'}, {'id': 1605, 'synset': 'shrimpfish.n.01', 'name': 'shrimpfish'}, {'id': 1606, 'synset': 'trumpetfish.n.01', 'name': 'trumpetfish'}, {'id': 1607, 'synset': 'pellicle.n.01', 'name': 'pellicle'}, {'id': 1608, 'synset': 'embryo.n.02', 'name': 'embryo'}, {'id': 1609, 'synset': 'fetus.n.01', 'name': 'fetus'}, {'id': 1610, 'synset': 'abortus.n.01', 'name': 'abortus'}, {'id': 1611, 'synset': 'spawn.n.01', 'name': 'spawn'}, {'id': 1612, 'synset': 'blastula.n.01', 'name': 'blastula'}, {'id': 1613, 'synset': 'blastocyst.n.01', 'name': 'blastocyst'}, {'id': 1614, 'synset': 'gastrula.n.01', 'name': 'gastrula'}, {'id': 1615, 'synset': 'morula.n.01', 'name': 'morula'}, {'id': 1616, 'synset': 'yolk.n.02', 'name': 'yolk'}, {'id': 1617, 'synset': 'chordate.n.01', 'name': 'chordate'}, {'id': 1618, 'synset': 'cephalochordate.n.01', 'name': 'cephalochordate'}, {'id': 1619, 'synset': 'lancelet.n.01', 'name': 'lancelet'}, {'id': 1620, 'synset': 'tunicate.n.01', 'name': 'tunicate'}, {'id': 1621, 'synset': 'ascidian.n.01', 'name': 'ascidian'}, {'id': 1622, 'synset': 'sea_squirt.n.01', 'name': 'sea_squirt'}, {'id': 1623, 'synset': 'salp.n.01', 'name': 'salp'}, {'id': 1624, 'synset': 'doliolum.n.01', 'name': 'doliolum'}, {'id': 1625, 'synset': 'larvacean.n.01', 'name': 'larvacean'}, {'id': 1626, 'synset': 'appendicularia.n.01', 'name': 'appendicularia'}, {'id': 1627, 'synset': 'ascidian_tadpole.n.01', 'name': 'ascidian_tadpole'}, {'id': 1628, 'synset': 'vertebrate.n.01', 'name': 'vertebrate'}, {'id': 1629, 'synset': 'amniota.n.01', 'name': 'Amniota'}, {'id': 1630, 'synset': 'amniote.n.01', 'name': 'amniote'}, {'id': 1631, 'synset': 'aquatic_vertebrate.n.01', 'name': 'aquatic_vertebrate'}, {'id': 1632, 'synset': 'jawless_vertebrate.n.01', 'name': 'jawless_vertebrate'}, {'id': 1633, 'synset': 'ostracoderm.n.01', 'name': 'ostracoderm'}, {'id': 1634, 'synset': 'heterostracan.n.01', 'name': 'heterostracan'}, {'id': 1635, 'synset': 'anaspid.n.01', 'name': 'anaspid'}, {'id': 1636, 'synset': 'conodont.n.02', 'name': 'conodont'}, {'id': 1637, 'synset': 'cyclostome.n.01', 'name': 'cyclostome'}, {'id': 1638, 'synset': 'lamprey.n.01', 'name': 'lamprey'}, {'id': 1639, 'synset': 'sea_lamprey.n.01', 'name': 'sea_lamprey'}, {'id': 1640, 'synset': 'hagfish.n.01', 'name': 'hagfish'}, {'id': 1641, 'synset': 'myxine_glutinosa.n.01', 'name': 'Myxine_glutinosa'}, {'id': 1642, 'synset': 'eptatretus.n.01', 'name': 'eptatretus'}, {'id': 1643, 'synset': 'gnathostome.n.01', 'name': 'gnathostome'}, {'id': 1644, 'synset': 'placoderm.n.01', 'name': 'placoderm'}, {'id': 1645, 'synset': 'cartilaginous_fish.n.01', 'name': 'cartilaginous_fish'}, {'id': 1646, 'synset': 'holocephalan.n.01', 'name': 'holocephalan'}, {'id': 1647, 'synset': 'chimaera.n.03', 'name': 'chimaera'}, {'id': 1648, 'synset': 'rabbitfish.n.01', 'name': 'rabbitfish'}, {'id': 1649, 'synset': 'elasmobranch.n.01', 'name': 'elasmobranch'}, {'id': 1650, 'synset': 'cow_shark.n.01', 'name': 'cow_shark'}, {'id': 1651, 'synset': 'mackerel_shark.n.01', 'name': 'mackerel_shark'}, {'id': 1652, 'synset': 'porbeagle.n.01', 'name': 'porbeagle'}, {'id': 1653, 'synset': 'mako.n.01', 'name': 'mako'}, {'id': 1654, 'synset': 'shortfin_mako.n.01', 'name': 'shortfin_mako'}, {'id': 1655, 'synset': 'longfin_mako.n.01', 'name': 'longfin_mako'}, {'id': 1656, 'synset': 'bonito_shark.n.01', 'name': 'bonito_shark'}, {'id': 1657, 'synset': 'great_white_shark.n.01', 'name': 'great_white_shark'}, {'id': 1658, 'synset': 'basking_shark.n.01', 'name': 'basking_shark'}, {'id': 1659, 'synset': 'thresher.n.02', 'name': 'thresher'}, {'id': 1660, 'synset': 'carpet_shark.n.01', 'name': 'carpet_shark'}, {'id': 1661, 'synset': 'nurse_shark.n.01', 'name': 'nurse_shark'}, {'id': 1662, 'synset': 'sand_tiger.n.01', 'name': 'sand_tiger'}, {'id': 1663, 'synset': 'whale_shark.n.01', 'name': 'whale_shark'}, {'id': 1664, 'synset': 'requiem_shark.n.01', 'name': 'requiem_shark'}, {'id': 1665, 'synset': 'bull_shark.n.01', 'name': 'bull_shark'}, {'id': 1666, 'synset': 'sandbar_shark.n.02', 'name': 'sandbar_shark'}, {'id': 1667, 'synset': 'blacktip_shark.n.01', 'name': 'blacktip_shark'}, {'id': 1668, 'synset': 'whitetip_shark.n.02', 'name': 'whitetip_shark'}, {'id': 1669, 'synset': 'dusky_shark.n.01', 'name': 'dusky_shark'}, {'id': 1670, 'synset': 'lemon_shark.n.01', 'name': 'lemon_shark'}, {'id': 1671, 'synset': 'blue_shark.n.01', 'name': 'blue_shark'}, {'id': 1672, 'synset': 'tiger_shark.n.01', 'name': 'tiger_shark'}, {'id': 1673, 'synset': 'soupfin_shark.n.01', 'name': 'soupfin_shark'}, {'id': 1674, 'synset': 'dogfish.n.02', 'name': 'dogfish'}, {'id': 1675, 'synset': 'smooth_dogfish.n.01', 'name': 'smooth_dogfish'}, {'id': 1676, 'synset': 'smoothhound.n.01', 'name': 'smoothhound'}, {'id': 1677, 'synset': 'american_smooth_dogfish.n.01', 'name': 'American_smooth_dogfish'}, {'id': 1678, 'synset': 'florida_smoothhound.n.01', 'name': 'Florida_smoothhound'}, {'id': 1679, 'synset': 'whitetip_shark.n.01', 'name': 'whitetip_shark'}, {'id': 1680, 'synset': 'spiny_dogfish.n.01', 'name': 'spiny_dogfish'}, {'id': 1681, 'synset': 'atlantic_spiny_dogfish.n.01', 'name': 'Atlantic_spiny_dogfish'}, {'id': 1682, 'synset': 'pacific_spiny_dogfish.n.01', 'name': 'Pacific_spiny_dogfish'}, {'id': 1683, 'synset': 'hammerhead.n.03', 'name': 'hammerhead'}, {'id': 1684, 'synset': 'smooth_hammerhead.n.01', 'name': 'smooth_hammerhead'}, {'id': 1685, 'synset': 'smalleye_hammerhead.n.01', 'name': 'smalleye_hammerhead'}, {'id': 1686, 'synset': 'shovelhead.n.01', 'name': 'shovelhead'}, {'id': 1687, 'synset': 'angel_shark.n.01', 'name': 'angel_shark'}, {'id': 1688, 'synset': 'ray.n.07', 'name': 'ray'}, {'id': 1689, 'synset': 'electric_ray.n.01', 'name': 'electric_ray'}, {'id': 1690, 'synset': 'sawfish.n.01', 'name': 'sawfish'}, {'id': 1691, 'synset': 'smalltooth_sawfish.n.01', 'name': 'smalltooth_sawfish'}, {'id': 1692, 'synset': 'guitarfish.n.01', 'name': 'guitarfish'}, {'id': 1693, 'synset': 'stingray.n.01', 'name': 'stingray'}, {'id': 1694, 'synset': 'roughtail_stingray.n.01', 'name': 'roughtail_stingray'}, {'id': 1695, 'synset': 'butterfly_ray.n.01', 'name': 'butterfly_ray'}, {'id': 1696, 'synset': 'eagle_ray.n.01', 'name': 'eagle_ray'}, {'id': 1697, 'synset': 'spotted_eagle_ray.n.01', 'name': 'spotted_eagle_ray'}, {'id': 1698, 'synset': 'cownose_ray.n.01', 'name': 'cownose_ray'}, {'id': 1699, 'synset': 'manta.n.02', 'name': 'manta'}, {'id': 1700, 'synset': 'atlantic_manta.n.01', 'name': 'Atlantic_manta'}, {'id': 1701, 'synset': 'devil_ray.n.01', 'name': 'devil_ray'}, {'id': 1702, 'synset': 'skate.n.02', 'name': 'skate'}, {'id': 1703, 'synset': 'grey_skate.n.01', 'name': 'grey_skate'}, {'id': 1704, 'synset': 'little_skate.n.01', 'name': 'little_skate'}, {'id': 1705, 'synset': 'thorny_skate.n.01', 'name': 'thorny_skate'}, {'id': 1706, 'synset': 'barndoor_skate.n.01', 'name': 'barndoor_skate'}, {'id': 1707, 'synset': 'dickeybird.n.01', 'name': 'dickeybird'}, {'id': 1708, 'synset': 'fledgling.n.02', 'name': 'fledgling'}, {'id': 1709, 'synset': 'nestling.n.01', 'name': 'nestling'}, {'id': 1710, 'synset': 'cock.n.05', 'name': 'cock'}, {'id': 1711, 'synset': 'gamecock.n.01', 'name': 'gamecock'}, {'id': 1712, 'synset': 'hen.n.02', 'name': 'hen'}, {'id': 1713, 'synset': 'nester.n.02', 'name': 'nester'}, {'id': 1714, 'synset': 'night_bird.n.01', 'name': 'night_bird'}, {'id': 1715, 'synset': 'night_raven.n.02', 'name': 'night_raven'}, {'id': 1716, 'synset': 'bird_of_passage.n.02', 'name': 'bird_of_passage'}, {'id': 1717, 'synset': 'archaeopteryx.n.01', 'name': 'archaeopteryx'}, {'id': 1718, 'synset': 'archaeornis.n.01', 'name': 'archaeornis'}, {'id': 1719, 'synset': 'ratite.n.01', 'name': 'ratite'}, {'id': 1720, 'synset': 'carinate.n.01', 'name': 'carinate'}, {'id': 1721, 'synset': 'cassowary.n.01', 'name': 'cassowary'}, {'id': 1722, 'synset': 'emu.n.02', 'name': 'emu'}, {'id': 1723, 'synset': 'kiwi.n.04', 'name': 'kiwi'}, {'id': 1724, 'synset': 'rhea.n.03', 'name': 'rhea'}, {'id': 1725, 'synset': 'rhea.n.02', 'name': 'rhea'}, {'id': 1726, 'synset': 'elephant_bird.n.01', 'name': 'elephant_bird'}, {'id': 1727, 'synset': 'moa.n.01', 'name': 'moa'}, {'id': 1728, 'synset': 'passerine.n.01', 'name': 'passerine'}, {'id': 1729, 'synset': 'nonpasserine_bird.n.01', 'name': 'nonpasserine_bird'}, {'id': 1730, 'synset': 'oscine.n.01', 'name': 'oscine'}, {'id': 1731, 'synset': 'songbird.n.01', 'name': 'songbird'}, {'id': 1732, 'synset': 'honey_eater.n.01', 'name': 'honey_eater'}, {'id': 1733, 'synset': 'accentor.n.01', 'name': 'accentor'}, {'id': 1734, 'synset': 'hedge_sparrow.n.01', 'name': 'hedge_sparrow'}, {'id': 1735, 'synset': 'lark.n.03', 'name': 'lark'}, {'id': 1736, 'synset': 'skylark.n.01', 'name': 'skylark'}, {'id': 1737, 'synset': 'wagtail.n.01', 'name': 'wagtail'}, {'id': 1738, 'synset': 'pipit.n.01', 'name': 'pipit'}, {'id': 1739, 'synset': 'meadow_pipit.n.01', 'name': 'meadow_pipit'}, {'id': 1740, 'synset': 'finch.n.01', 'name': 'finch'}, {'id': 1741, 'synset': 'chaffinch.n.01', 'name': 'chaffinch'}, {'id': 1742, 'synset': 'brambling.n.01', 'name': 'brambling'}, {'id': 1743, 'synset': 'goldfinch.n.02', 'name': 'goldfinch'}, {'id': 1744, 'synset': 'linnet.n.02', 'name': 'linnet'}, {'id': 1745, 'synset': 'siskin.n.01', 'name': 'siskin'}, {'id': 1746, 'synset': 'red_siskin.n.01', 'name': 'red_siskin'}, {'id': 1747, 'synset': 'redpoll.n.02', 'name': 'redpoll'}, {'id': 1748, 'synset': 'redpoll.n.01', 'name': 'redpoll'}, {'id': 1749, 'synset': 'new_world_goldfinch.n.01', 'name': 'New_World_goldfinch'}, {'id': 1750, 'synset': 'pine_siskin.n.01', 'name': 'pine_siskin'}, {'id': 1751, 'synset': 'house_finch.n.01', 'name': 'house_finch'}, {'id': 1752, 'synset': 'purple_finch.n.01', 'name': 'purple_finch'}, {'id': 1753, 'synset': 'canary.n.04', 'name': 'canary'}, {'id': 1754, 'synset': 'common_canary.n.01', 'name': 'common_canary'}, {'id': 1755, 'synset': 'serin.n.01', 'name': 'serin'}, {'id': 1756, 'synset': 'crossbill.n.01', 'name': 'crossbill'}, {'id': 1757, 'synset': 'bullfinch.n.02', 'name': 'bullfinch'}, {'id': 1758, 'synset': 'junco.n.01', 'name': 'junco'}, {'id': 1759, 'synset': 'dark-eyed_junco.n.01', 'name': 'dark-eyed_junco'}, {'id': 1760, 'synset': 'new_world_sparrow.n.01', 'name': 'New_World_sparrow'}, {'id': 1761, 'synset': 'vesper_sparrow.n.01', 'name': 'vesper_sparrow'}, {'id': 1762, 'synset': 'white-throated_sparrow.n.01', 'name': 'white-throated_sparrow'}, {'id': 1763, 'synset': 'white-crowned_sparrow.n.01', 'name': 'white-crowned_sparrow'}, {'id': 1764, 'synset': 'chipping_sparrow.n.01', 'name': 'chipping_sparrow'}, {'id': 1765, 'synset': 'field_sparrow.n.01', 'name': 'field_sparrow'}, {'id': 1766, 'synset': 'tree_sparrow.n.02', 'name': 'tree_sparrow'}, {'id': 1767, 'synset': 'song_sparrow.n.01', 'name': 'song_sparrow'}, {'id': 1768, 'synset': 'swamp_sparrow.n.01', 'name': 'swamp_sparrow'}, {'id': 1769, 'synset': 'bunting.n.02', 'name': 'bunting'}, {'id': 1770, 'synset': 'indigo_bunting.n.01', 'name': 'indigo_bunting'}, {'id': 1771, 'synset': 'ortolan.n.01', 'name': 'ortolan'}, {'id': 1772, 'synset': 'reed_bunting.n.01', 'name': 'reed_bunting'}, {'id': 1773, 'synset': 'yellowhammer.n.02', 'name': 'yellowhammer'}, {'id': 1774, 'synset': 'yellow-breasted_bunting.n.01', 'name': 'yellow-breasted_bunting'}, {'id': 1775, 'synset': 'snow_bunting.n.01', 'name': 'snow_bunting'}, {'id': 1776, 'synset': 'honeycreeper.n.02', 'name': 'honeycreeper'}, {'id': 1777, 'synset': 'banana_quit.n.01', 'name': 'banana_quit'}, {'id': 1778, 'synset': 'sparrow.n.01', 'name': 'sparrow'}, {'id': 1779, 'synset': 'english_sparrow.n.01', 'name': 'English_sparrow'}, {'id': 1780, 'synset': 'tree_sparrow.n.01', 'name': 'tree_sparrow'}, {'id': 1781, 'synset': 'grosbeak.n.01', 'name': 'grosbeak'}, {'id': 1782, 'synset': 'evening_grosbeak.n.01', 'name': 'evening_grosbeak'}, {'id': 1783, 'synset': 'hawfinch.n.01', 'name': 'hawfinch'}, {'id': 1784, 'synset': 'pine_grosbeak.n.01', 'name': 'pine_grosbeak'}, {'id': 1785, 'synset': 'cardinal.n.04', 'name': 'cardinal'}, {'id': 1786, 'synset': 'pyrrhuloxia.n.01', 'name': 'pyrrhuloxia'}, {'id': 1787, 'synset': 'towhee.n.01', 'name': 'towhee'}, {'id': 1788, 'synset': 'chewink.n.01', 'name': 'chewink'}, {'id': 1789, 'synset': 'green-tailed_towhee.n.01', 'name': 'green-tailed_towhee'}, {'id': 1790, 'synset': 'weaver.n.02', 'name': 'weaver'}, {'id': 1791, 'synset': 'baya.n.01', 'name': 'baya'}, {'id': 1792, 'synset': 'whydah.n.01', 'name': 'whydah'}, {'id': 1793, 'synset': 'java_sparrow.n.01', 'name': 'Java_sparrow'}, {'id': 1794, 'synset': 'avadavat.n.01', 'name': 'avadavat'}, {'id': 1795, 'synset': 'grassfinch.n.01', 'name': 'grassfinch'}, {'id': 1796, 'synset': 'zebra_finch.n.01', 'name': 'zebra_finch'}, {'id': 1797, 'synset': 'honeycreeper.n.01', 'name': 'honeycreeper'}, {'id': 1798, 'synset': 'lyrebird.n.01', 'name': 'lyrebird'}, {'id': 1799, 'synset': 'scrubbird.n.01', 'name': 'scrubbird'}, {'id': 1800, 'synset': 'broadbill.n.04', 'name': 'broadbill'}, {'id': 1801, 'synset': 'tyrannid.n.01', 'name': 'tyrannid'}, {'id': 1802, 'synset': 'new_world_flycatcher.n.01', 'name': 'New_World_flycatcher'}, {'id': 1803, 'synset': 'kingbird.n.01', 'name': 'kingbird'}, {'id': 1804, 'synset': 'arkansas_kingbird.n.01', 'name': 'Arkansas_kingbird'}, {'id': 1805, 'synset': "cassin's_kingbird.n.01", 'name': "Cassin's_kingbird"}, {'id': 1806, 'synset': 'eastern_kingbird.n.01', 'name': 'eastern_kingbird'}, {'id': 1807, 'synset': 'grey_kingbird.n.01', 'name': 'grey_kingbird'}, {'id': 1808, 'synset': 'pewee.n.01', 'name': 'pewee'}, {'id': 1809, 'synset': 'western_wood_pewee.n.01', 'name': 'western_wood_pewee'}, {'id': 1810, 'synset': 'phoebe.n.03', 'name': 'phoebe'}, {'id': 1811, 'synset': 'vermillion_flycatcher.n.01', 'name': 'vermillion_flycatcher'}, {'id': 1812, 'synset': 'cotinga.n.01', 'name': 'cotinga'}, {'id': 1813, 'synset': 'cock_of_the_rock.n.02', 'name': 'cock_of_the_rock'}, {'id': 1814, 'synset': 'cock_of_the_rock.n.01', 'name': 'cock_of_the_rock'}, {'id': 1815, 'synset': 'manakin.n.03', 'name': 'manakin'}, {'id': 1816, 'synset': 'bellbird.n.01', 'name': 'bellbird'}, {'id': 1817, 'synset': 'umbrella_bird.n.01', 'name': 'umbrella_bird'}, {'id': 1818, 'synset': 'ovenbird.n.02', 'name': 'ovenbird'}, {'id': 1819, 'synset': 'antbird.n.01', 'name': 'antbird'}, {'id': 1820, 'synset': 'ant_thrush.n.01', 'name': 'ant_thrush'}, {'id': 1821, 'synset': 'ant_shrike.n.01', 'name': 'ant_shrike'}, {'id': 1822, 'synset': 'spotted_antbird.n.01', 'name': 'spotted_antbird'}, {'id': 1823, 'synset': 'woodhewer.n.01', 'name': 'woodhewer'}, {'id': 1824, 'synset': 'pitta.n.01', 'name': 'pitta'}, {'id': 1825, 'synset': 'scissortail.n.01', 'name': 'scissortail'}, {'id': 1826, 'synset': 'old_world_flycatcher.n.01', 'name': 'Old_World_flycatcher'}, {'id': 1827, 'synset': 'spotted_flycatcher.n.01', 'name': 'spotted_flycatcher'}, {'id': 1828, 'synset': 'thickhead.n.01', 'name': 'thickhead'}, {'id': 1829, 'synset': 'thrush.n.03', 'name': 'thrush'}, {'id': 1830, 'synset': 'missel_thrush.n.01', 'name': 'missel_thrush'}, {'id': 1831, 'synset': 'song_thrush.n.01', 'name': 'song_thrush'}, {'id': 1832, 'synset': 'fieldfare.n.01', 'name': 'fieldfare'}, {'id': 1833, 'synset': 'redwing.n.02', 'name': 'redwing'}, {'id': 1834, 'synset': 'blackbird.n.02', 'name': 'blackbird'}, {'id': 1835, 'synset': 'ring_ouzel.n.01', 'name': 'ring_ouzel'}, {'id': 1836, 'synset': 'robin.n.02', 'name': 'robin'}, {'id': 1837, 'synset': 'clay-colored_robin.n.01', 'name': 'clay-colored_robin'}, {'id': 1838, 'synset': 'hermit_thrush.n.01', 'name': 'hermit_thrush'}, {'id': 1839, 'synset': 'veery.n.01', 'name': 'veery'}, {'id': 1840, 'synset': 'wood_thrush.n.01', 'name': 'wood_thrush'}, {'id': 1841, 'synset': 'nightingale.n.01', 'name': 'nightingale'}, {'id': 1842, 'synset': 'thrush_nightingale.n.01', 'name': 'thrush_nightingale'}, {'id': 1843, 'synset': 'bulbul.n.01', 'name': 'bulbul'}, {'id': 1844, 'synset': 'old_world_chat.n.01', 'name': 'Old_World_chat'}, {'id': 1845, 'synset': 'stonechat.n.01', 'name': 'stonechat'}, {'id': 1846, 'synset': 'whinchat.n.01', 'name': 'whinchat'}, {'id': 1847, 'synset': 'solitaire.n.03', 'name': 'solitaire'}, {'id': 1848, 'synset': 'redstart.n.02', 'name': 'redstart'}, {'id': 1849, 'synset': 'wheatear.n.01', 'name': 'wheatear'}, {'id': 1850, 'synset': 'bluebird.n.02', 'name': 'bluebird'}, {'id': 1851, 'synset': 'robin.n.01', 'name': 'robin'}, {'id': 1852, 'synset': 'bluethroat.n.01', 'name': 'bluethroat'}, {'id': 1853, 'synset': 'warbler.n.02', 'name': 'warbler'}, {'id': 1854, 'synset': 'gnatcatcher.n.01', 'name': 'gnatcatcher'}, {'id': 1855, 'synset': 'kinglet.n.01', 'name': 'kinglet'}, {'id': 1856, 'synset': 'goldcrest.n.01', 'name': 'goldcrest'}, {'id': 1857, 'synset': 'gold-crowned_kinglet.n.01', 'name': 'gold-crowned_kinglet'}, {'id': 1858, 'synset': 'ruby-crowned_kinglet.n.01', 'name': 'ruby-crowned_kinglet'}, {'id': 1859, 'synset': 'old_world_warbler.n.01', 'name': 'Old_World_warbler'}, {'id': 1860, 'synset': 'blackcap.n.04', 'name': 'blackcap'}, {'id': 1861, 'synset': 'greater_whitethroat.n.01', 'name': 'greater_whitethroat'}, {'id': 1862, 'synset': 'lesser_whitethroat.n.01', 'name': 'lesser_whitethroat'}, {'id': 1863, 'synset': 'wood_warbler.n.02', 'name': 'wood_warbler'}, {'id': 1864, 'synset': 'sedge_warbler.n.01', 'name': 'sedge_warbler'}, {'id': 1865, 'synset': 'wren_warbler.n.01', 'name': 'wren_warbler'}, {'id': 1866, 'synset': 'tailorbird.n.01', 'name': 'tailorbird'}, {'id': 1867, 'synset': 'babbler.n.02', 'name': 'babbler'}, {'id': 1868, 'synset': 'new_world_warbler.n.01', 'name': 'New_World_warbler'}, {'id': 1869, 'synset': 'parula_warbler.n.01', 'name': 'parula_warbler'}, {'id': 1870, 'synset': "wilson's_warbler.n.01", 'name': "Wilson's_warbler"}, {'id': 1871, 'synset': 'flycatching_warbler.n.01', 'name': 'flycatching_warbler'}, {'id': 1872, 'synset': 'american_redstart.n.01', 'name': 'American_redstart'}, {'id': 1873, 'synset': 'cape_may_warbler.n.01', 'name': 'Cape_May_warbler'}, {'id': 1874, 'synset': 'yellow_warbler.n.01', 'name': 'yellow_warbler'}, {'id': 1875, 'synset': 'blackburn.n.01', 'name': 'Blackburn'}, {'id': 1876, 'synset': "audubon's_warbler.n.01", 'name': "Audubon's_warbler"}, {'id': 1877, 'synset': 'myrtle_warbler.n.01', 'name': 'myrtle_warbler'}, {'id': 1878, 'synset': 'blackpoll.n.01', 'name': 'blackpoll'}, {'id': 1879, 'synset': 'new_world_chat.n.01', 'name': 'New_World_chat'}, {'id': 1880, 'synset': 'yellow-breasted_chat.n.01', 'name': 'yellow-breasted_chat'}, {'id': 1881, 'synset': 'ovenbird.n.01', 'name': 'ovenbird'}, {'id': 1882, 'synset': 'water_thrush.n.01', 'name': 'water_thrush'}, {'id': 1883, 'synset': 'yellowthroat.n.01', 'name': 'yellowthroat'}, {'id': 1884, 'synset': 'common_yellowthroat.n.01', 'name': 'common_yellowthroat'}, {'id': 1885, 'synset': 'riflebird.n.01', 'name': 'riflebird'}, {'id': 1886, 'synset': 'new_world_oriole.n.01', 'name': 'New_World_oriole'}, {'id': 1887, 'synset': 'northern_oriole.n.01', 'name': 'northern_oriole'}, {'id': 1888, 'synset': 'baltimore_oriole.n.01', 'name': 'Baltimore_oriole'}, {'id': 1889, 'synset': "bullock's_oriole.n.01", 'name': "Bullock's_oriole"}, {'id': 1890, 'synset': 'orchard_oriole.n.01', 'name': 'orchard_oriole'}, {'id': 1891, 'synset': 'meadowlark.n.01', 'name': 'meadowlark'}, {'id': 1892, 'synset': 'eastern_meadowlark.n.01', 'name': 'eastern_meadowlark'}, {'id': 1893, 'synset': 'western_meadowlark.n.01', 'name': 'western_meadowlark'}, {'id': 1894, 'synset': 'cacique.n.01', 'name': 'cacique'}, {'id': 1895, 'synset': 'bobolink.n.01', 'name': 'bobolink'}, {'id': 1896, 'synset': 'new_world_blackbird.n.01', 'name': 'New_World_blackbird'}, {'id': 1897, 'synset': 'grackle.n.02', 'name': 'grackle'}, {'id': 1898, 'synset': 'purple_grackle.n.01', 'name': 'purple_grackle'}, {'id': 1899, 'synset': 'rusty_blackbird.n.01', 'name': 'rusty_blackbird'}, {'id': 1900, 'synset': 'cowbird.n.01', 'name': 'cowbird'}, {'id': 1901, 'synset': 'red-winged_blackbird.n.01', 'name': 'red-winged_blackbird'}, {'id': 1902, 'synset': 'old_world_oriole.n.01', 'name': 'Old_World_oriole'}, {'id': 1903, 'synset': 'golden_oriole.n.01', 'name': 'golden_oriole'}, {'id': 1904, 'synset': 'fig-bird.n.01', 'name': 'fig-bird'}, {'id': 1905, 'synset': 'starling.n.01', 'name': 'starling'}, {'id': 1906, 'synset': 'common_starling.n.01', 'name': 'common_starling'}, {'id': 1907, 'synset': 'rose-colored_starling.n.01', 'name': 'rose-colored_starling'}, {'id': 1908, 'synset': 'myna.n.01', 'name': 'myna'}, {'id': 1909, 'synset': 'crested_myna.n.01', 'name': 'crested_myna'}, {'id': 1910, 'synset': 'hill_myna.n.01', 'name': 'hill_myna'}, {'id': 1911, 'synset': 'corvine_bird.n.01', 'name': 'corvine_bird'}, {'id': 1912, 'synset': 'american_crow.n.01', 'name': 'American_crow'}, {'id': 1913, 'synset': 'raven.n.01', 'name': 'raven'}, {'id': 1914, 'synset': 'rook.n.02', 'name': 'rook'}, {'id': 1915, 'synset': 'jackdaw.n.01', 'name': 'jackdaw'}, {'id': 1916, 'synset': 'chough.n.01', 'name': 'chough'}, {'id': 1917, 'synset': 'jay.n.02', 'name': 'jay'}, {'id': 1918, 'synset': 'old_world_jay.n.01', 'name': 'Old_World_jay'}, {'id': 1919, 'synset': 'common_european_jay.n.01', 'name': 'common_European_jay'}, {'id': 1920, 'synset': 'new_world_jay.n.01', 'name': 'New_World_jay'}, {'id': 1921, 'synset': 'blue_jay.n.01', 'name': 'blue_jay'}, {'id': 1922, 'synset': 'canada_jay.n.01', 'name': 'Canada_jay'}, {'id': 1923, 'synset': 'rocky_mountain_jay.n.01', 'name': 'Rocky_Mountain_jay'}, {'id': 1924, 'synset': 'nutcracker.n.03', 'name': 'nutcracker'}, {'id': 1925, 'synset': 'common_nutcracker.n.01', 'name': 'common_nutcracker'}, {'id': 1926, 'synset': "clark's_nutcracker.n.01", 'name': "Clark's_nutcracker"}, {'id': 1927, 'synset': 'magpie.n.01', 'name': 'magpie'}, {'id': 1928, 'synset': 'european_magpie.n.01', 'name': 'European_magpie'}, {'id': 1929, 'synset': 'american_magpie.n.01', 'name': 'American_magpie'}, {'id': 1930, 'synset': 'australian_magpie.n.01', 'name': 'Australian_magpie'}, {'id': 1931, 'synset': 'butcherbird.n.02', 'name': 'butcherbird'}, {'id': 1932, 'synset': 'currawong.n.01', 'name': 'currawong'}, {'id': 1933, 'synset': 'piping_crow.n.01', 'name': 'piping_crow'}, {'id': 1934, 'synset': 'wren.n.02', 'name': 'wren'}, {'id': 1935, 'synset': 'winter_wren.n.01', 'name': 'winter_wren'}, {'id': 1936, 'synset': 'house_wren.n.01', 'name': 'house_wren'}, {'id': 1937, 'synset': 'marsh_wren.n.01', 'name': 'marsh_wren'}, {'id': 1938, 'synset': 'long-billed_marsh_wren.n.01', 'name': 'long-billed_marsh_wren'}, {'id': 1939, 'synset': 'sedge_wren.n.01', 'name': 'sedge_wren'}, {'id': 1940, 'synset': 'rock_wren.n.02', 'name': 'rock_wren'}, {'id': 1941, 'synset': 'carolina_wren.n.01', 'name': 'Carolina_wren'}, {'id': 1942, 'synset': 'cactus_wren.n.01', 'name': 'cactus_wren'}, {'id': 1943, 'synset': 'mockingbird.n.01', 'name': 'mockingbird'}, {'id': 1944, 'synset': 'blue_mockingbird.n.01', 'name': 'blue_mockingbird'}, {'id': 1945, 'synset': 'catbird.n.02', 'name': 'catbird'}, {'id': 1946, 'synset': 'thrasher.n.02', 'name': 'thrasher'}, {'id': 1947, 'synset': 'brown_thrasher.n.01', 'name': 'brown_thrasher'}, {'id': 1948, 'synset': 'new_zealand_wren.n.01', 'name': 'New_Zealand_wren'}, {'id': 1949, 'synset': 'rock_wren.n.01', 'name': 'rock_wren'}, {'id': 1950, 'synset': 'rifleman_bird.n.01', 'name': 'rifleman_bird'}, {'id': 1951, 'synset': 'creeper.n.03', 'name': 'creeper'}, {'id': 1952, 'synset': 'brown_creeper.n.01', 'name': 'brown_creeper'}, {'id': 1953, 'synset': 'european_creeper.n.01', 'name': 'European_creeper'}, {'id': 1954, 'synset': 'wall_creeper.n.01', 'name': 'wall_creeper'}, {'id': 1955, 'synset': 'european_nuthatch.n.01', 'name': 'European_nuthatch'}, {'id': 1956, 'synset': 'red-breasted_nuthatch.n.01', 'name': 'red-breasted_nuthatch'}, {'id': 1957, 'synset': 'white-breasted_nuthatch.n.01', 'name': 'white-breasted_nuthatch'}, {'id': 1958, 'synset': 'titmouse.n.01', 'name': 'titmouse'}, {'id': 1959, 'synset': 'chickadee.n.01', 'name': 'chickadee'}, {'id': 1960, 'synset': 'black-capped_chickadee.n.01', 'name': 'black-capped_chickadee'}, {'id': 1961, 'synset': 'tufted_titmouse.n.01', 'name': 'tufted_titmouse'}, {'id': 1962, 'synset': 'carolina_chickadee.n.01', 'name': 'Carolina_chickadee'}, {'id': 1963, 'synset': 'blue_tit.n.01', 'name': 'blue_tit'}, {'id': 1964, 'synset': 'bushtit.n.01', 'name': 'bushtit'}, {'id': 1965, 'synset': 'wren-tit.n.01', 'name': 'wren-tit'}, {'id': 1966, 'synset': 'verdin.n.01', 'name': 'verdin'}, {'id': 1967, 'synset': 'fairy_bluebird.n.01', 'name': 'fairy_bluebird'}, {'id': 1968, 'synset': 'swallow.n.03', 'name': 'swallow'}, {'id': 1969, 'synset': 'barn_swallow.n.01', 'name': 'barn_swallow'}, {'id': 1970, 'synset': 'cliff_swallow.n.01', 'name': 'cliff_swallow'}, {'id': 1971, 'synset': 'tree_swallow.n.02', 'name': 'tree_swallow'}, {'id': 1972, 'synset': 'white-bellied_swallow.n.01', 'name': 'white-bellied_swallow'}, {'id': 1973, 'synset': 'martin.n.05', 'name': 'martin'}, {'id': 1974, 'synset': 'house_martin.n.01', 'name': 'house_martin'}, {'id': 1975, 'synset': 'bank_martin.n.01', 'name': 'bank_martin'}, {'id': 1976, 'synset': 'purple_martin.n.01', 'name': 'purple_martin'}, {'id': 1977, 'synset': 'wood_swallow.n.01', 'name': 'wood_swallow'}, {'id': 1978, 'synset': 'tanager.n.01', 'name': 'tanager'}, {'id': 1979, 'synset': 'scarlet_tanager.n.01', 'name': 'scarlet_tanager'}, {'id': 1980, 'synset': 'western_tanager.n.01', 'name': 'western_tanager'}, {'id': 1981, 'synset': 'summer_tanager.n.01', 'name': 'summer_tanager'}, {'id': 1982, 'synset': 'hepatic_tanager.n.01', 'name': 'hepatic_tanager'}, {'id': 1983, 'synset': 'shrike.n.01', 'name': 'shrike'}, {'id': 1984, 'synset': 'butcherbird.n.01', 'name': 'butcherbird'}, {'id': 1985, 'synset': 'european_shrike.n.01', 'name': 'European_shrike'}, {'id': 1986, 'synset': 'northern_shrike.n.01', 'name': 'northern_shrike'}, {'id': 1987, 'synset': 'white-rumped_shrike.n.01', 'name': 'white-rumped_shrike'}, {'id': 1988, 'synset': 'loggerhead_shrike.n.01', 'name': 'loggerhead_shrike'}, {'id': 1989, 'synset': 'migrant_shrike.n.01', 'name': 'migrant_shrike'}, {'id': 1990, 'synset': 'bush_shrike.n.01', 'name': 'bush_shrike'}, {'id': 1991, 'synset': 'black-fronted_bush_shrike.n.01', 'name': 'black-fronted_bush_shrike'}, {'id': 1992, 'synset': 'bowerbird.n.01', 'name': 'bowerbird'}, {'id': 1993, 'synset': 'satin_bowerbird.n.01', 'name': 'satin_bowerbird'}, {'id': 1994, 'synset': 'great_bowerbird.n.01', 'name': 'great_bowerbird'}, {'id': 1995, 'synset': 'water_ouzel.n.01', 'name': 'water_ouzel'}, {'id': 1996, 'synset': 'european_water_ouzel.n.01', 'name': 'European_water_ouzel'}, {'id': 1997, 'synset': 'american_water_ouzel.n.01', 'name': 'American_water_ouzel'}, {'id': 1998, 'synset': 'vireo.n.01', 'name': 'vireo'}, {'id': 1999, 'synset': 'red-eyed_vireo.n.01', 'name': 'red-eyed_vireo'}, {'id': 2000, 'synset': 'solitary_vireo.n.01', 'name': 'solitary_vireo'}, {'id': 2001, 'synset': 'blue-headed_vireo.n.01', 'name': 'blue-headed_vireo'}, {'id': 2002, 'synset': 'waxwing.n.01', 'name': 'waxwing'}, {'id': 2003, 'synset': 'cedar_waxwing.n.01', 'name': 'cedar_waxwing'}, {'id': 2004, 'synset': 'bohemian_waxwing.n.01', 'name': 'Bohemian_waxwing'}, {'id': 2005, 'synset': 'bird_of_prey.n.01', 'name': 'bird_of_prey'}, {'id': 2006, 'synset': 'accipitriformes.n.01', 'name': 'Accipitriformes'}, {'id': 2007, 'synset': 'hawk.n.01', 'name': 'hawk'}, {'id': 2008, 'synset': 'eyas.n.01', 'name': 'eyas'}, {'id': 2009, 'synset': 'tiercel.n.01', 'name': 'tiercel'}, {'id': 2010, 'synset': 'goshawk.n.01', 'name': 'goshawk'}, {'id': 2011, 'synset': 'sparrow_hawk.n.02', 'name': 'sparrow_hawk'}, {'id': 2012, 'synset': "cooper's_hawk.n.01", 'name': "Cooper's_hawk"}, {'id': 2013, 'synset': 'chicken_hawk.n.01', 'name': 'chicken_hawk'}, {'id': 2014, 'synset': 'buteonine.n.01', 'name': 'buteonine'}, {'id': 2015, 'synset': 'redtail.n.01', 'name': 'redtail'}, {'id': 2016, 'synset': 'rough-legged_hawk.n.01', 'name': 'rough-legged_hawk'}, {'id': 2017, 'synset': 'red-shouldered_hawk.n.01', 'name': 'red-shouldered_hawk'}, {'id': 2018, 'synset': 'buzzard.n.02', 'name': 'buzzard'}, {'id': 2019, 'synset': 'honey_buzzard.n.01', 'name': 'honey_buzzard'}, {'id': 2020, 'synset': 'kite.n.04', 'name': 'kite'}, {'id': 2021, 'synset': 'black_kite.n.01', 'name': 'black_kite'}, {'id': 2022, 'synset': 'swallow-tailed_kite.n.01', 'name': 'swallow-tailed_kite'}, {'id': 2023, 'synset': 'white-tailed_kite.n.01', 'name': 'white-tailed_kite'}, {'id': 2024, 'synset': 'harrier.n.03', 'name': 'harrier'}, {'id': 2025, 'synset': 'marsh_harrier.n.01', 'name': 'marsh_harrier'}, {'id': 2026, 'synset': "montagu's_harrier.n.01", 'name': "Montagu's_harrier"}, {'id': 2027, 'synset': 'marsh_hawk.n.01', 'name': 'marsh_hawk'}, {'id': 2028, 'synset': 'harrier_eagle.n.01', 'name': 'harrier_eagle'}, {'id': 2029, 'synset': 'peregrine.n.01', 'name': 'peregrine'}, {'id': 2030, 'synset': 'falcon-gentle.n.01', 'name': 'falcon-gentle'}, {'id': 2031, 'synset': 'gyrfalcon.n.01', 'name': 'gyrfalcon'}, {'id': 2032, 'synset': 'kestrel.n.02', 'name': 'kestrel'}, {'id': 2033, 'synset': 'sparrow_hawk.n.01', 'name': 'sparrow_hawk'}, {'id': 2034, 'synset': 'pigeon_hawk.n.01', 'name': 'pigeon_hawk'}, {'id': 2035, 'synset': 'hobby.n.03', 'name': 'hobby'}, {'id': 2036, 'synset': 'caracara.n.01', 'name': 'caracara'}, {'id': 2037, 'synset': "audubon's_caracara.n.01", 'name': "Audubon's_caracara"}, {'id': 2038, 'synset': 'carancha.n.01', 'name': 'carancha'}, {'id': 2039, 'synset': 'young_bird.n.01', 'name': 'young_bird'}, {'id': 2040, 'synset': 'eaglet.n.01', 'name': 'eaglet'}, {'id': 2041, 'synset': 'harpy.n.04', 'name': 'harpy'}, {'id': 2042, 'synset': 'golden_eagle.n.01', 'name': 'golden_eagle'}, {'id': 2043, 'synset': 'tawny_eagle.n.01', 'name': 'tawny_eagle'}, {'id': 2044, 'synset': 'bald_eagle.n.01', 'name': 'bald_eagle'}, {'id': 2045, 'synset': 'sea_eagle.n.02', 'name': 'sea_eagle'}, {'id': 2046, 'synset': 'kamchatkan_sea_eagle.n.01', 'name': 'Kamchatkan_sea_eagle'}, {'id': 2047, 'synset': 'ern.n.01', 'name': 'ern'}, {'id': 2048, 'synset': 'fishing_eagle.n.01', 'name': 'fishing_eagle'}, {'id': 2049, 'synset': 'osprey.n.01', 'name': 'osprey'}, {'id': 2050, 'synset': 'aegypiidae.n.01', 'name': 'Aegypiidae'}, {'id': 2051, 'synset': 'old_world_vulture.n.01', 'name': 'Old_World_vulture'}, {'id': 2052, 'synset': 'griffon_vulture.n.01', 'name': 'griffon_vulture'}, {'id': 2053, 'synset': 'bearded_vulture.n.01', 'name': 'bearded_vulture'}, {'id': 2054, 'synset': 'egyptian_vulture.n.01', 'name': 'Egyptian_vulture'}, {'id': 2055, 'synset': 'black_vulture.n.02', 'name': 'black_vulture'}, {'id': 2056, 'synset': 'secretary_bird.n.01', 'name': 'secretary_bird'}, {'id': 2057, 'synset': 'new_world_vulture.n.01', 'name': 'New_World_vulture'}, {'id': 2058, 'synset': 'buzzard.n.01', 'name': 'buzzard'}, {'id': 2059, 'synset': 'condor.n.01', 'name': 'condor'}, {'id': 2060, 'synset': 'andean_condor.n.01', 'name': 'Andean_condor'}, {'id': 2061, 'synset': 'california_condor.n.01', 'name': 'California_condor'}, {'id': 2062, 'synset': 'black_vulture.n.01', 'name': 'black_vulture'}, {'id': 2063, 'synset': 'king_vulture.n.01', 'name': 'king_vulture'}, {'id': 2064, 'synset': 'owlet.n.01', 'name': 'owlet'}, {'id': 2065, 'synset': 'little_owl.n.01', 'name': 'little_owl'}, {'id': 2066, 'synset': 'horned_owl.n.01', 'name': 'horned_owl'}, {'id': 2067, 'synset': 'great_horned_owl.n.01', 'name': 'great_horned_owl'}, {'id': 2068, 'synset': 'great_grey_owl.n.01', 'name': 'great_grey_owl'}, {'id': 2069, 'synset': 'tawny_owl.n.01', 'name': 'tawny_owl'}, {'id': 2070, 'synset': 'barred_owl.n.01', 'name': 'barred_owl'}, {'id': 2071, 'synset': 'screech_owl.n.02', 'name': 'screech_owl'}, {'id': 2072, 'synset': 'screech_owl.n.01', 'name': 'screech_owl'}, {'id': 2073, 'synset': 'scops_owl.n.01', 'name': 'scops_owl'}, {'id': 2074, 'synset': 'spotted_owl.n.01', 'name': 'spotted_owl'}, {'id': 2075, 'synset': 'old_world_scops_owl.n.01', 'name': 'Old_World_scops_owl'}, {'id': 2076, 'synset': 'oriental_scops_owl.n.01', 'name': 'Oriental_scops_owl'}, {'id': 2077, 'synset': 'hoot_owl.n.01', 'name': 'hoot_owl'}, {'id': 2078, 'synset': 'hawk_owl.n.01', 'name': 'hawk_owl'}, {'id': 2079, 'synset': 'long-eared_owl.n.01', 'name': 'long-eared_owl'}, {'id': 2080, 'synset': 'laughing_owl.n.01', 'name': 'laughing_owl'}, {'id': 2081, 'synset': 'barn_owl.n.01', 'name': 'barn_owl'}, {'id': 2082, 'synset': 'amphibian.n.03', 'name': 'amphibian'}, {'id': 2083, 'synset': 'ichyostega.n.01', 'name': 'Ichyostega'}, {'id': 2084, 'synset': 'urodele.n.01', 'name': 'urodele'}, {'id': 2085, 'synset': 'salamander.n.01', 'name': 'salamander'}, {'id': 2086, 'synset': 'european_fire_salamander.n.01', 'name': 'European_fire_salamander'}, {'id': 2087, 'synset': 'spotted_salamander.n.02', 'name': 'spotted_salamander'}, {'id': 2088, 'synset': 'alpine_salamander.n.01', 'name': 'alpine_salamander'}, {'id': 2089, 'synset': 'newt.n.01', 'name': 'newt'}, {'id': 2090, 'synset': 'common_newt.n.01', 'name': 'common_newt'}, {'id': 2091, 'synset': 'red_eft.n.01', 'name': 'red_eft'}, {'id': 2092, 'synset': 'pacific_newt.n.01', 'name': 'Pacific_newt'}, {'id': 2093, 'synset': 'rough-skinned_newt.n.01', 'name': 'rough-skinned_newt'}, {'id': 2094, 'synset': 'california_newt.n.01', 'name': 'California_newt'}, {'id': 2095, 'synset': 'eft.n.01', 'name': 'eft'}, {'id': 2096, 'synset': 'ambystomid.n.01', 'name': 'ambystomid'}, {'id': 2097, 'synset': 'mole_salamander.n.01', 'name': 'mole_salamander'}, {'id': 2098, 'synset': 'spotted_salamander.n.01', 'name': 'spotted_salamander'}, {'id': 2099, 'synset': 'tiger_salamander.n.01', 'name': 'tiger_salamander'}, {'id': 2100, 'synset': 'axolotl.n.01', 'name': 'axolotl'}, {'id': 2101, 'synset': 'waterdog.n.01', 'name': 'waterdog'}, {'id': 2102, 'synset': 'hellbender.n.01', 'name': 'hellbender'}, {'id': 2103, 'synset': 'giant_salamander.n.01', 'name': 'giant_salamander'}, {'id': 2104, 'synset': 'olm.n.01', 'name': 'olm'}, {'id': 2105, 'synset': 'mud_puppy.n.01', 'name': 'mud_puppy'}, {'id': 2106, 'synset': 'dicamptodon.n.01', 'name': 'dicamptodon'}, {'id': 2107, 'synset': 'pacific_giant_salamander.n.01', 'name': 'Pacific_giant_salamander'}, {'id': 2108, 'synset': 'olympic_salamander.n.01', 'name': 'olympic_salamander'}, {'id': 2109, 'synset': 'lungless_salamander.n.01', 'name': 'lungless_salamander'}, {'id': 2110, 'synset': 'eastern_red-backed_salamander.n.01', 'name': 'eastern_red-backed_salamander'}, {'id': 2111, 'synset': 'western_red-backed_salamander.n.01', 'name': 'western_red-backed_salamander'}, {'id': 2112, 'synset': 'dusky_salamander.n.01', 'name': 'dusky_salamander'}, {'id': 2113, 'synset': 'climbing_salamander.n.01', 'name': 'climbing_salamander'}, {'id': 2114, 'synset': 'arboreal_salamander.n.01', 'name': 'arboreal_salamander'}, {'id': 2115, 'synset': 'slender_salamander.n.01', 'name': 'slender_salamander'}, {'id': 2116, 'synset': 'web-toed_salamander.n.01', 'name': 'web-toed_salamander'}, {'id': 2117, 'synset': 'shasta_salamander.n.01', 'name': 'Shasta_salamander'}, {'id': 2118, 'synset': 'limestone_salamander.n.01', 'name': 'limestone_salamander'}, {'id': 2119, 'synset': 'amphiuma.n.01', 'name': 'amphiuma'}, {'id': 2120, 'synset': 'siren.n.05', 'name': 'siren'}, {'id': 2121, 'synset': 'true_frog.n.01', 'name': 'true_frog'}, {'id': 2122, 'synset': 'wood-frog.n.01', 'name': 'wood-frog'}, {'id': 2123, 'synset': 'leopard_frog.n.01', 'name': 'leopard_frog'}, {'id': 2124, 'synset': 'bullfrog.n.01', 'name': 'bullfrog'}, {'id': 2125, 'synset': 'green_frog.n.01', 'name': 'green_frog'}, {'id': 2126, 'synset': 'cascades_frog.n.01', 'name': 'cascades_frog'}, {'id': 2127, 'synset': 'goliath_frog.n.01', 'name': 'goliath_frog'}, {'id': 2128, 'synset': 'pickerel_frog.n.01', 'name': 'pickerel_frog'}, {'id': 2129, 'synset': 'tarahumara_frog.n.01', 'name': 'tarahumara_frog'}, {'id': 2130, 'synset': 'grass_frog.n.01', 'name': 'grass_frog'}, {'id': 2131, 'synset': 'leptodactylid_frog.n.01', 'name': 'leptodactylid_frog'}, {'id': 2132, 'synset': 'robber_frog.n.02', 'name': 'robber_frog'}, {'id': 2133, 'synset': 'barking_frog.n.01', 'name': 'barking_frog'}, {'id': 2134, 'synset': 'crapaud.n.01', 'name': 'crapaud'}, {'id': 2135, 'synset': 'tree_frog.n.02', 'name': 'tree_frog'}, {'id': 2136, 'synset': 'tailed_frog.n.01', 'name': 'tailed_frog'}, {'id': 2137, 'synset': 'liopelma_hamiltoni.n.01', 'name': 'Liopelma_hamiltoni'}, {'id': 2138, 'synset': 'true_toad.n.01', 'name': 'true_toad'}, {'id': 2139, 'synset': 'bufo.n.01', 'name': 'bufo'}, {'id': 2140, 'synset': 'agua.n.01', 'name': 'agua'}, {'id': 2141, 'synset': 'european_toad.n.01', 'name': 'European_toad'}, {'id': 2142, 'synset': 'natterjack.n.01', 'name': 'natterjack'}, {'id': 2143, 'synset': 'american_toad.n.01', 'name': 'American_toad'}, {'id': 2144, 'synset': 'eurasian_green_toad.n.01', 'name': 'Eurasian_green_toad'}, {'id': 2145, 'synset': 'american_green_toad.n.01', 'name': 'American_green_toad'}, {'id': 2146, 'synset': 'yosemite_toad.n.01', 'name': 'Yosemite_toad'}, {'id': 2147, 'synset': 'texas_toad.n.01', 'name': 'Texas_toad'}, {'id': 2148, 'synset': 'southwestern_toad.n.01', 'name': 'southwestern_toad'}, {'id': 2149, 'synset': 'western_toad.n.01', 'name': 'western_toad'}, {'id': 2150, 'synset': 'obstetrical_toad.n.01', 'name': 'obstetrical_toad'}, {'id': 2151, 'synset': 'midwife_toad.n.01', 'name': 'midwife_toad'}, {'id': 2152, 'synset': 'fire-bellied_toad.n.01', 'name': 'fire-bellied_toad'}, {'id': 2153, 'synset': 'spadefoot.n.01', 'name': 'spadefoot'}, {'id': 2154, 'synset': 'western_spadefoot.n.01', 'name': 'western_spadefoot'}, {'id': 2155, 'synset': 'southern_spadefoot.n.01', 'name': 'southern_spadefoot'}, {'id': 2156, 'synset': 'plains_spadefoot.n.01', 'name': 'plains_spadefoot'}, {'id': 2157, 'synset': 'tree_toad.n.01', 'name': 'tree_toad'}, {'id': 2158, 'synset': 'spring_peeper.n.01', 'name': 'spring_peeper'}, {'id': 2159, 'synset': 'pacific_tree_toad.n.01', 'name': 'Pacific_tree_toad'}, {'id': 2160, 'synset': 'canyon_treefrog.n.01', 'name': 'canyon_treefrog'}, {'id': 2161, 'synset': 'chameleon_tree_frog.n.01', 'name': 'chameleon_tree_frog'}, {'id': 2162, 'synset': 'cricket_frog.n.01', 'name': 'cricket_frog'}, {'id': 2163, 'synset': 'northern_cricket_frog.n.01', 'name': 'northern_cricket_frog'}, {'id': 2164, 'synset': 'eastern_cricket_frog.n.01', 'name': 'eastern_cricket_frog'}, {'id': 2165, 'synset': 'chorus_frog.n.01', 'name': 'chorus_frog'}, {'id': 2166, 'synset': 'lowland_burrowing_treefrog.n.01', 'name': 'lowland_burrowing_treefrog'}, {'id': 2167, 'synset': 'western_narrow-mouthed_toad.n.01', 'name': 'western_narrow-mouthed_toad'}, {'id': 2168, 'synset': 'eastern_narrow-mouthed_toad.n.01', 'name': 'eastern_narrow-mouthed_toad'}, {'id': 2169, 'synset': 'sheep_frog.n.01', 'name': 'sheep_frog'}, {'id': 2170, 'synset': 'tongueless_frog.n.01', 'name': 'tongueless_frog'}, {'id': 2171, 'synset': 'surinam_toad.n.01', 'name': 'Surinam_toad'}, {'id': 2172, 'synset': 'african_clawed_frog.n.01', 'name': 'African_clawed_frog'}, {'id': 2173, 'synset': 'south_american_poison_toad.n.01', 'name': 'South_American_poison_toad'}, {'id': 2174, 'synset': 'caecilian.n.01', 'name': 'caecilian'}, {'id': 2175, 'synset': 'reptile.n.01', 'name': 'reptile'}, {'id': 2176, 'synset': 'anapsid.n.01', 'name': 'anapsid'}, {'id': 2177, 'synset': 'diapsid.n.01', 'name': 'diapsid'}, {'id': 2178, 'synset': 'diapsida.n.01', 'name': 'Diapsida'}, {'id': 2179, 'synset': 'chelonian.n.01', 'name': 'chelonian'}, {'id': 2180, 'synset': 'sea_turtle.n.01', 'name': 'sea_turtle'}, {'id': 2181, 'synset': 'green_turtle.n.01', 'name': 'green_turtle'}, {'id': 2182, 'synset': 'loggerhead.n.02', 'name': 'loggerhead'}, {'id': 2183, 'synset': 'ridley.n.01', 'name': 'ridley'}, {'id': 2184, 'synset': 'atlantic_ridley.n.01', 'name': 'Atlantic_ridley'}, {'id': 2185, 'synset': 'pacific_ridley.n.01', 'name': 'Pacific_ridley'}, {'id': 2186, 'synset': 'hawksbill_turtle.n.01', 'name': 'hawksbill_turtle'}, {'id': 2187, 'synset': 'leatherback_turtle.n.01', 'name': 'leatherback_turtle'}, {'id': 2188, 'synset': 'snapping_turtle.n.01', 'name': 'snapping_turtle'}, {'id': 2189, 'synset': 'common_snapping_turtle.n.01', 'name': 'common_snapping_turtle'}, {'id': 2190, 'synset': 'alligator_snapping_turtle.n.01', 'name': 'alligator_snapping_turtle'}, {'id': 2191, 'synset': 'mud_turtle.n.01', 'name': 'mud_turtle'}, {'id': 2192, 'synset': 'musk_turtle.n.01', 'name': 'musk_turtle'}, {'id': 2193, 'synset': 'terrapin.n.01', 'name': 'terrapin'}, {'id': 2194, 'synset': 'diamondback_terrapin.n.01', 'name': 'diamondback_terrapin'}, {'id': 2195, 'synset': 'red-bellied_terrapin.n.01', 'name': 'red-bellied_terrapin'}, {'id': 2196, 'synset': 'slider.n.03', 'name': 'slider'}, {'id': 2197, 'synset': 'cooter.n.01', 'name': 'cooter'}, {'id': 2198, 'synset': 'box_turtle.n.01', 'name': 'box_turtle'}, {'id': 2199, 'synset': 'western_box_turtle.n.01', 'name': 'Western_box_turtle'}, {'id': 2200, 'synset': 'painted_turtle.n.01', 'name': 'painted_turtle'}, {'id': 2201, 'synset': 'tortoise.n.01', 'name': 'tortoise'}, {'id': 2202, 'synset': 'european_tortoise.n.01', 'name': 'European_tortoise'}, {'id': 2203, 'synset': 'giant_tortoise.n.01', 'name': 'giant_tortoise'}, {'id': 2204, 'synset': 'gopher_tortoise.n.01', 'name': 'gopher_tortoise'}, {'id': 2205, 'synset': 'desert_tortoise.n.01', 'name': 'desert_tortoise'}, {'id': 2206, 'synset': 'texas_tortoise.n.01', 'name': 'Texas_tortoise'}, {'id': 2207, 'synset': 'soft-shelled_turtle.n.01', 'name': 'soft-shelled_turtle'}, {'id': 2208, 'synset': 'spiny_softshell.n.01', 'name': 'spiny_softshell'}, {'id': 2209, 'synset': 'smooth_softshell.n.01', 'name': 'smooth_softshell'}, {'id': 2210, 'synset': 'tuatara.n.01', 'name': 'tuatara'}, {'id': 2211, 'synset': 'saurian.n.01', 'name': 'saurian'}, {'id': 2212, 'synset': 'gecko.n.01', 'name': 'gecko'}, {'id': 2213, 'synset': 'flying_gecko.n.01', 'name': 'flying_gecko'}, {'id': 2214, 'synset': 'banded_gecko.n.01', 'name': 'banded_gecko'}, {'id': 2215, 'synset': 'iguanid.n.01', 'name': 'iguanid'}, {'id': 2216, 'synset': 'common_iguana.n.01', 'name': 'common_iguana'}, {'id': 2217, 'synset': 'marine_iguana.n.01', 'name': 'marine_iguana'}, {'id': 2218, 'synset': 'desert_iguana.n.01', 'name': 'desert_iguana'}, {'id': 2219, 'synset': 'chuckwalla.n.01', 'name': 'chuckwalla'}, {'id': 2220, 'synset': 'zebra-tailed_lizard.n.01', 'name': 'zebra-tailed_lizard'}, {'id': 2221, 'synset': 'fringe-toed_lizard.n.01', 'name': 'fringe-toed_lizard'}, {'id': 2222, 'synset': 'earless_lizard.n.01', 'name': 'earless_lizard'}, {'id': 2223, 'synset': 'collared_lizard.n.01', 'name': 'collared_lizard'}, {'id': 2224, 'synset': 'leopard_lizard.n.01', 'name': 'leopard_lizard'}, {'id': 2225, 'synset': 'spiny_lizard.n.02', 'name': 'spiny_lizard'}, {'id': 2226, 'synset': 'fence_lizard.n.01', 'name': 'fence_lizard'}, {'id': 2227, 'synset': 'western_fence_lizard.n.01', 'name': 'western_fence_lizard'}, {'id': 2228, 'synset': 'eastern_fence_lizard.n.01', 'name': 'eastern_fence_lizard'}, {'id': 2229, 'synset': 'sagebrush_lizard.n.01', 'name': 'sagebrush_lizard'}, {'id': 2230, 'synset': 'side-blotched_lizard.n.01', 'name': 'side-blotched_lizard'}, {'id': 2231, 'synset': 'tree_lizard.n.01', 'name': 'tree_lizard'}, {'id': 2232, 'synset': 'horned_lizard.n.01', 'name': 'horned_lizard'}, {'id': 2233, 'synset': 'texas_horned_lizard.n.01', 'name': 'Texas_horned_lizard'}, {'id': 2234, 'synset': 'basilisk.n.03', 'name': 'basilisk'}, {'id': 2235, 'synset': 'american_chameleon.n.01', 'name': 'American_chameleon'}, {'id': 2236, 'synset': 'worm_lizard.n.01', 'name': 'worm_lizard'}, {'id': 2237, 'synset': 'night_lizard.n.01', 'name': 'night_lizard'}, {'id': 2238, 'synset': 'skink.n.01', 'name': 'skink'}, {'id': 2239, 'synset': 'western_skink.n.01', 'name': 'western_skink'}, {'id': 2240, 'synset': 'mountain_skink.n.01', 'name': 'mountain_skink'}, {'id': 2241, 'synset': 'teiid_lizard.n.01', 'name': 'teiid_lizard'}, {'id': 2242, 'synset': 'whiptail.n.01', 'name': 'whiptail'}, {'id': 2243, 'synset': 'racerunner.n.01', 'name': 'racerunner'}, {'id': 2244, 'synset': 'plateau_striped_whiptail.n.01', 'name': 'plateau_striped_whiptail'}, {'id': 2245, 'synset': 'chihuahuan_spotted_whiptail.n.01', 'name': 'Chihuahuan_spotted_whiptail'}, {'id': 2246, 'synset': 'western_whiptail.n.01', 'name': 'western_whiptail'}, {'id': 2247, 'synset': 'checkered_whiptail.n.01', 'name': 'checkered_whiptail'}, {'id': 2248, 'synset': 'teju.n.01', 'name': 'teju'}, {'id': 2249, 'synset': 'caiman_lizard.n.01', 'name': 'caiman_lizard'}, {'id': 2250, 'synset': 'agamid.n.01', 'name': 'agamid'}, {'id': 2251, 'synset': 'agama.n.01', 'name': 'agama'}, {'id': 2252, 'synset': 'frilled_lizard.n.01', 'name': 'frilled_lizard'}, {'id': 2253, 'synset': 'moloch.n.03', 'name': 'moloch'}, {'id': 2254, 'synset': 'mountain_devil.n.02', 'name': 'mountain_devil'}, {'id': 2255, 'synset': 'anguid_lizard.n.01', 'name': 'anguid_lizard'}, {'id': 2256, 'synset': 'alligator_lizard.n.01', 'name': 'alligator_lizard'}, {'id': 2257, 'synset': 'blindworm.n.01', 'name': 'blindworm'}, {'id': 2258, 'synset': 'glass_lizard.n.01', 'name': 'glass_lizard'}, {'id': 2259, 'synset': 'legless_lizard.n.01', 'name': 'legless_lizard'}, {'id': 2260, 'synset': 'lanthanotus_borneensis.n.01', 'name': 'Lanthanotus_borneensis'}, {'id': 2261, 'synset': 'venomous_lizard.n.01', 'name': 'venomous_lizard'}, {'id': 2262, 'synset': 'gila_monster.n.01', 'name': 'Gila_monster'}, {'id': 2263, 'synset': 'beaded_lizard.n.01', 'name': 'beaded_lizard'}, {'id': 2264, 'synset': 'lacertid_lizard.n.01', 'name': 'lacertid_lizard'}, {'id': 2265, 'synset': 'sand_lizard.n.01', 'name': 'sand_lizard'}, {'id': 2266, 'synset': 'green_lizard.n.01', 'name': 'green_lizard'}, {'id': 2267, 'synset': 'chameleon.n.03', 'name': 'chameleon'}, {'id': 2268, 'synset': 'african_chameleon.n.01', 'name': 'African_chameleon'}, {'id': 2269, 'synset': 'horned_chameleon.n.01', 'name': 'horned_chameleon'}, {'id': 2270, 'synset': 'monitor.n.07', 'name': 'monitor'}, {'id': 2271, 'synset': 'african_monitor.n.01', 'name': 'African_monitor'}, {'id': 2272, 'synset': 'komodo_dragon.n.01', 'name': 'Komodo_dragon'}, {'id': 2273, 'synset': 'crocodilian_reptile.n.01', 'name': 'crocodilian_reptile'}, {'id': 2274, 'synset': 'crocodile.n.01', 'name': 'crocodile'}, {'id': 2275, 'synset': 'african_crocodile.n.01', 'name': 'African_crocodile'}, {'id': 2276, 'synset': 'asian_crocodile.n.01', 'name': 'Asian_crocodile'}, {'id': 2277, 'synset': "morlett's_crocodile.n.01", 'name': "Morlett's_crocodile"}, {'id': 2278, 'synset': 'false_gavial.n.01', 'name': 'false_gavial'}, {'id': 2279, 'synset': 'american_alligator.n.01', 'name': 'American_alligator'}, {'id': 2280, 'synset': 'chinese_alligator.n.01', 'name': 'Chinese_alligator'}, {'id': 2281, 'synset': 'caiman.n.01', 'name': 'caiman'}, {'id': 2282, 'synset': 'spectacled_caiman.n.01', 'name': 'spectacled_caiman'}, {'id': 2283, 'synset': 'gavial.n.01', 'name': 'gavial'}, {'id': 2284, 'synset': 'armored_dinosaur.n.01', 'name': 'armored_dinosaur'}, {'id': 2285, 'synset': 'stegosaur.n.01', 'name': 'stegosaur'}, {'id': 2286, 'synset': 'ankylosaur.n.01', 'name': 'ankylosaur'}, {'id': 2287, 'synset': 'edmontonia.n.01', 'name': 'Edmontonia'}, {'id': 2288, 'synset': 'bone-headed_dinosaur.n.01', 'name': 'bone-headed_dinosaur'}, {'id': 2289, 'synset': 'pachycephalosaur.n.01', 'name': 'pachycephalosaur'}, {'id': 2290, 'synset': 'ceratopsian.n.01', 'name': 'ceratopsian'}, {'id': 2291, 'synset': 'protoceratops.n.01', 'name': 'protoceratops'}, {'id': 2292, 'synset': 'triceratops.n.01', 'name': 'triceratops'}, {'id': 2293, 'synset': 'styracosaur.n.01', 'name': 'styracosaur'}, {'id': 2294, 'synset': 'psittacosaur.n.01', 'name': 'psittacosaur'}, {'id': 2295, 'synset': 'ornithopod.n.01', 'name': 'ornithopod'}, {'id': 2296, 'synset': 'hadrosaur.n.01', 'name': 'hadrosaur'}, {'id': 2297, 'synset': 'trachodon.n.01', 'name': 'trachodon'}, {'id': 2298, 'synset': 'saurischian.n.01', 'name': 'saurischian'}, {'id': 2299, 'synset': 'sauropod.n.01', 'name': 'sauropod'}, {'id': 2300, 'synset': 'apatosaur.n.01', 'name': 'apatosaur'}, {'id': 2301, 'synset': 'barosaur.n.01', 'name': 'barosaur'}, {'id': 2302, 'synset': 'diplodocus.n.01', 'name': 'diplodocus'}, {'id': 2303, 'synset': 'argentinosaur.n.01', 'name': 'argentinosaur'}, {'id': 2304, 'synset': 'theropod.n.01', 'name': 'theropod'}, {'id': 2305, 'synset': 'ceratosaur.n.01', 'name': 'ceratosaur'}, {'id': 2306, 'synset': 'coelophysis.n.01', 'name': 'coelophysis'}, {'id': 2307, 'synset': 'tyrannosaur.n.01', 'name': 'tyrannosaur'}, {'id': 2308, 'synset': 'allosaur.n.01', 'name': 'allosaur'}, {'id': 2309, 'synset': 'ornithomimid.n.01', 'name': 'ornithomimid'}, {'id': 2310, 'synset': 'maniraptor.n.01', 'name': 'maniraptor'}, {'id': 2311, 'synset': 'oviraptorid.n.01', 'name': 'oviraptorid'}, {'id': 2312, 'synset': 'velociraptor.n.01', 'name': 'velociraptor'}, {'id': 2313, 'synset': 'deinonychus.n.01', 'name': 'deinonychus'}, {'id': 2314, 'synset': 'utahraptor.n.01', 'name': 'utahraptor'}, {'id': 2315, 'synset': 'synapsid.n.01', 'name': 'synapsid'}, {'id': 2316, 'synset': 'dicynodont.n.01', 'name': 'dicynodont'}, {'id': 2317, 'synset': 'pelycosaur.n.01', 'name': 'pelycosaur'}, {'id': 2318, 'synset': 'dimetrodon.n.01', 'name': 'dimetrodon'}, {'id': 2319, 'synset': 'pterosaur.n.01', 'name': 'pterosaur'}, {'id': 2320, 'synset': 'pterodactyl.n.01', 'name': 'pterodactyl'}, {'id': 2321, 'synset': 'ichthyosaur.n.01', 'name': 'ichthyosaur'}, {'id': 2322, 'synset': 'ichthyosaurus.n.01', 'name': 'ichthyosaurus'}, {'id': 2323, 'synset': 'stenopterygius.n.01', 'name': 'stenopterygius'}, {'id': 2324, 'synset': 'plesiosaur.n.01', 'name': 'plesiosaur'}, {'id': 2325, 'synset': 'nothosaur.n.01', 'name': 'nothosaur'}, {'id': 2326, 'synset': 'colubrid_snake.n.01', 'name': 'colubrid_snake'}, {'id': 2327, 'synset': 'hoop_snake.n.01', 'name': 'hoop_snake'}, {'id': 2328, 'synset': 'thunder_snake.n.01', 'name': 'thunder_snake'}, {'id': 2329, 'synset': 'ringneck_snake.n.01', 'name': 'ringneck_snake'}, {'id': 2330, 'synset': 'hognose_snake.n.01', 'name': 'hognose_snake'}, {'id': 2331, 'synset': 'leaf-nosed_snake.n.01', 'name': 'leaf-nosed_snake'}, {'id': 2332, 'synset': 'green_snake.n.02', 'name': 'green_snake'}, {'id': 2333, 'synset': 'smooth_green_snake.n.01', 'name': 'smooth_green_snake'}, {'id': 2334, 'synset': 'rough_green_snake.n.01', 'name': 'rough_green_snake'}, {'id': 2335, 'synset': 'green_snake.n.01', 'name': 'green_snake'}, {'id': 2336, 'synset': 'racer.n.04', 'name': 'racer'}, {'id': 2337, 'synset': 'blacksnake.n.02', 'name': 'blacksnake'}, {'id': 2338, 'synset': 'blue_racer.n.01', 'name': 'blue_racer'}, {'id': 2339, 'synset': 'horseshoe_whipsnake.n.01', 'name': 'horseshoe_whipsnake'}, {'id': 2340, 'synset': 'whip-snake.n.01', 'name': 'whip-snake'}, {'id': 2341, 'synset': 'coachwhip.n.02', 'name': 'coachwhip'}, {'id': 2342, 'synset': 'california_whipsnake.n.01', 'name': 'California_whipsnake'}, {'id': 2343, 'synset': 'sonoran_whipsnake.n.01', 'name': 'Sonoran_whipsnake'}, {'id': 2344, 'synset': 'rat_snake.n.01', 'name': 'rat_snake'}, {'id': 2345, 'synset': 'corn_snake.n.01', 'name': 'corn_snake'}, {'id': 2346, 'synset': 'black_rat_snake.n.01', 'name': 'black_rat_snake'}, {'id': 2347, 'synset': 'chicken_snake.n.01', 'name': 'chicken_snake'}, {'id': 2348, 'synset': 'indian_rat_snake.n.01', 'name': 'Indian_rat_snake'}, {'id': 2349, 'synset': 'glossy_snake.n.01', 'name': 'glossy_snake'}, {'id': 2350, 'synset': 'bull_snake.n.01', 'name': 'bull_snake'}, {'id': 2351, 'synset': 'gopher_snake.n.02', 'name': 'gopher_snake'}, {'id': 2352, 'synset': 'pine_snake.n.01', 'name': 'pine_snake'}, {'id': 2353, 'synset': 'king_snake.n.01', 'name': 'king_snake'}, {'id': 2354, 'synset': 'common_kingsnake.n.01', 'name': 'common_kingsnake'}, {'id': 2355, 'synset': 'milk_snake.n.01', 'name': 'milk_snake'}, {'id': 2356, 'synset': 'garter_snake.n.01', 'name': 'garter_snake'}, {'id': 2357, 'synset': 'common_garter_snake.n.01', 'name': 'common_garter_snake'}, {'id': 2358, 'synset': 'ribbon_snake.n.01', 'name': 'ribbon_snake'}, {'id': 2359, 'synset': 'western_ribbon_snake.n.01', 'name': 'Western_ribbon_snake'}, {'id': 2360, 'synset': 'lined_snake.n.01', 'name': 'lined_snake'}, {'id': 2361, 'synset': 'ground_snake.n.01', 'name': 'ground_snake'}, {'id': 2362, 'synset': 'eastern_ground_snake.n.01', 'name': 'eastern_ground_snake'}, {'id': 2363, 'synset': 'water_snake.n.01', 'name': 'water_snake'}, {'id': 2364, 'synset': 'common_water_snake.n.01', 'name': 'common_water_snake'}, {'id': 2365, 'synset': 'water_moccasin.n.02', 'name': 'water_moccasin'}, {'id': 2366, 'synset': 'grass_snake.n.01', 'name': 'grass_snake'}, {'id': 2367, 'synset': 'viperine_grass_snake.n.01', 'name': 'viperine_grass_snake'}, {'id': 2368, 'synset': 'red-bellied_snake.n.01', 'name': 'red-bellied_snake'}, {'id': 2369, 'synset': 'sand_snake.n.01', 'name': 'sand_snake'}, {'id': 2370, 'synset': 'banded_sand_snake.n.01', 'name': 'banded_sand_snake'}, {'id': 2371, 'synset': 'black-headed_snake.n.01', 'name': 'black-headed_snake'}, {'id': 2372, 'synset': 'vine_snake.n.01', 'name': 'vine_snake'}, {'id': 2373, 'synset': 'lyre_snake.n.01', 'name': 'lyre_snake'}, {'id': 2374, 'synset': 'sonoran_lyre_snake.n.01', 'name': 'Sonoran_lyre_snake'}, {'id': 2375, 'synset': 'night_snake.n.01', 'name': 'night_snake'}, {'id': 2376, 'synset': 'blind_snake.n.01', 'name': 'blind_snake'}, {'id': 2377, 'synset': 'western_blind_snake.n.01', 'name': 'western_blind_snake'}, {'id': 2378, 'synset': 'indigo_snake.n.01', 'name': 'indigo_snake'}, {'id': 2379, 'synset': 'eastern_indigo_snake.n.01', 'name': 'eastern_indigo_snake'}, {'id': 2380, 'synset': 'constrictor.n.01', 'name': 'constrictor'}, {'id': 2381, 'synset': 'boa.n.02', 'name': 'boa'}, {'id': 2382, 'synset': 'boa_constrictor.n.01', 'name': 'boa_constrictor'}, {'id': 2383, 'synset': 'rubber_boa.n.01', 'name': 'rubber_boa'}, {'id': 2384, 'synset': 'rosy_boa.n.01', 'name': 'rosy_boa'}, {'id': 2385, 'synset': 'anaconda.n.01', 'name': 'anaconda'}, {'id': 2386, 'synset': 'python.n.01', 'name': 'python'}, {'id': 2387, 'synset': 'carpet_snake.n.01', 'name': 'carpet_snake'}, {'id': 2388, 'synset': 'reticulated_python.n.01', 'name': 'reticulated_python'}, {'id': 2389, 'synset': 'indian_python.n.01', 'name': 'Indian_python'}, {'id': 2390, 'synset': 'rock_python.n.01', 'name': 'rock_python'}, {'id': 2391, 'synset': 'amethystine_python.n.01', 'name': 'amethystine_python'}, {'id': 2392, 'synset': 'elapid.n.01', 'name': 'elapid'}, {'id': 2393, 'synset': 'coral_snake.n.02', 'name': 'coral_snake'}, {'id': 2394, 'synset': 'eastern_coral_snake.n.01', 'name': 'eastern_coral_snake'}, {'id': 2395, 'synset': 'western_coral_snake.n.01', 'name': 'western_coral_snake'}, {'id': 2396, 'synset': 'coral_snake.n.01', 'name': 'coral_snake'}, {'id': 2397, 'synset': 'african_coral_snake.n.01', 'name': 'African_coral_snake'}, {'id': 2398, 'synset': 'australian_coral_snake.n.01', 'name': 'Australian_coral_snake'}, {'id': 2399, 'synset': 'copperhead.n.02', 'name': 'copperhead'}, {'id': 2400, 'synset': 'cobra.n.01', 'name': 'cobra'}, {'id': 2401, 'synset': 'indian_cobra.n.01', 'name': 'Indian_cobra'}, {'id': 2402, 'synset': 'asp.n.02', 'name': 'asp'}, {'id': 2403, 'synset': 'black-necked_cobra.n.01', 'name': 'black-necked_cobra'}, {'id': 2404, 'synset': 'hamadryad.n.02', 'name': 'hamadryad'}, {'id': 2405, 'synset': 'ringhals.n.01', 'name': 'ringhals'}, {'id': 2406, 'synset': 'mamba.n.01', 'name': 'mamba'}, {'id': 2407, 'synset': 'black_mamba.n.01', 'name': 'black_mamba'}, {'id': 2408, 'synset': 'green_mamba.n.01', 'name': 'green_mamba'}, {'id': 2409, 'synset': 'death_adder.n.01', 'name': 'death_adder'}, {'id': 2410, 'synset': 'tiger_snake.n.01', 'name': 'tiger_snake'}, {'id': 2411, 'synset': 'australian_blacksnake.n.01', 'name': 'Australian_blacksnake'}, {'id': 2412, 'synset': 'krait.n.01', 'name': 'krait'}, {'id': 2413, 'synset': 'banded_krait.n.01', 'name': 'banded_krait'}, {'id': 2414, 'synset': 'taipan.n.01', 'name': 'taipan'}, {'id': 2415, 'synset': 'sea_snake.n.01', 'name': 'sea_snake'}, {'id': 2416, 'synset': 'viper.n.01', 'name': 'viper'}, {'id': 2417, 'synset': 'adder.n.03', 'name': 'adder'}, {'id': 2418, 'synset': 'asp.n.01', 'name': 'asp'}, {'id': 2419, 'synset': 'puff_adder.n.01', 'name': 'puff_adder'}, {'id': 2420, 'synset': 'gaboon_viper.n.01', 'name': 'gaboon_viper'}, {'id': 2421, 'synset': 'horned_viper.n.01', 'name': 'horned_viper'}, {'id': 2422, 'synset': 'pit_viper.n.01', 'name': 'pit_viper'}, {'id': 2423, 'synset': 'copperhead.n.01', 'name': 'copperhead'}, {'id': 2424, 'synset': 'water_moccasin.n.01', 'name': 'water_moccasin'}, {'id': 2425, 'synset': 'rattlesnake.n.01', 'name': 'rattlesnake'}, {'id': 2426, 'synset': 'diamondback.n.01', 'name': 'diamondback'}, {'id': 2427, 'synset': 'timber_rattlesnake.n.01', 'name': 'timber_rattlesnake'}, {'id': 2428, 'synset': 'canebrake_rattlesnake.n.01', 'name': 'canebrake_rattlesnake'}, {'id': 2429, 'synset': 'prairie_rattlesnake.n.01', 'name': 'prairie_rattlesnake'}, {'id': 2430, 'synset': 'sidewinder.n.01', 'name': 'sidewinder'}, {'id': 2431, 'synset': 'western_diamondback.n.01', 'name': 'Western_diamondback'}, {'id': 2432, 'synset': 'rock_rattlesnake.n.01', 'name': 'rock_rattlesnake'}, {'id': 2433, 'synset': 'tiger_rattlesnake.n.01', 'name': 'tiger_rattlesnake'}, {'id': 2434, 'synset': 'mojave_rattlesnake.n.01', 'name': 'Mojave_rattlesnake'}, {'id': 2435, 'synset': 'speckled_rattlesnake.n.01', 'name': 'speckled_rattlesnake'}, {'id': 2436, 'synset': 'massasauga.n.02', 'name': 'massasauga'}, {'id': 2437, 'synset': 'ground_rattler.n.01', 'name': 'ground_rattler'}, {'id': 2438, 'synset': 'fer-de-lance.n.01', 'name': 'fer-de-lance'}, {'id': 2439, 'synset': 'carcase.n.01', 'name': 'carcase'}, {'id': 2440, 'synset': 'carrion.n.01', 'name': 'carrion'}, {'id': 2441, 'synset': 'arthropod.n.01', 'name': 'arthropod'}, {'id': 2442, 'synset': 'trilobite.n.01', 'name': 'trilobite'}, {'id': 2443, 'synset': 'arachnid.n.01', 'name': 'arachnid'}, {'id': 2444, 'synset': 'harvestman.n.01', 'name': 'harvestman'}, {'id': 2445, 'synset': 'scorpion.n.03', 'name': 'scorpion'}, {'id': 2446, 'synset': 'false_scorpion.n.01', 'name': 'false_scorpion'}, {'id': 2447, 'synset': 'book_scorpion.n.01', 'name': 'book_scorpion'}, {'id': 2448, 'synset': 'whip-scorpion.n.01', 'name': 'whip-scorpion'}, {'id': 2449, 'synset': 'vinegarroon.n.01', 'name': 'vinegarroon'}, {'id': 2450, 'synset': 'orb-weaving_spider.n.01', 'name': 'orb-weaving_spider'}, {'id': 2451, 'synset': 'black_and_gold_garden_spider.n.01', 'name': 'black_and_gold_garden_spider'}, {'id': 2452, 'synset': 'barn_spider.n.01', 'name': 'barn_spider'}, {'id': 2453, 'synset': 'garden_spider.n.01', 'name': 'garden_spider'}, {'id': 2454, 'synset': 'comb-footed_spider.n.01', 'name': 'comb-footed_spider'}, {'id': 2455, 'synset': 'black_widow.n.01', 'name': 'black_widow'}, {'id': 2456, 'synset': 'tarantula.n.02', 'name': 'tarantula'}, {'id': 2457, 'synset': 'wolf_spider.n.01', 'name': 'wolf_spider'}, {'id': 2458, 'synset': 'european_wolf_spider.n.01', 'name': 'European_wolf_spider'}, {'id': 2459, 'synset': 'trap-door_spider.n.01', 'name': 'trap-door_spider'}, {'id': 2460, 'synset': 'acarine.n.01', 'name': 'acarine'}, {'id': 2461, 'synset': 'tick.n.02', 'name': 'tick'}, {'id': 2462, 'synset': 'hard_tick.n.01', 'name': 'hard_tick'}, {'id': 2463, 'synset': 'ixodes_dammini.n.01', 'name': 'Ixodes_dammini'}, {'id': 2464, 'synset': 'ixodes_neotomae.n.01', 'name': 'Ixodes_neotomae'}, {'id': 2465, 'synset': 'ixodes_pacificus.n.01', 'name': 'Ixodes_pacificus'}, {'id': 2466, 'synset': 'ixodes_scapularis.n.01', 'name': 'Ixodes_scapularis'}, {'id': 2467, 'synset': 'sheep-tick.n.02', 'name': 'sheep-tick'}, {'id': 2468, 'synset': 'ixodes_persulcatus.n.01', 'name': 'Ixodes_persulcatus'}, {'id': 2469, 'synset': 'ixodes_dentatus.n.01', 'name': 'Ixodes_dentatus'}, {'id': 2470, 'synset': 'ixodes_spinipalpis.n.01', 'name': 'Ixodes_spinipalpis'}, {'id': 2471, 'synset': 'wood_tick.n.01', 'name': 'wood_tick'}, {'id': 2472, 'synset': 'soft_tick.n.01', 'name': 'soft_tick'}, {'id': 2473, 'synset': 'mite.n.02', 'name': 'mite'}, {'id': 2474, 'synset': 'web-spinning_mite.n.01', 'name': 'web-spinning_mite'}, {'id': 2475, 'synset': 'acarid.n.01', 'name': 'acarid'}, {'id': 2476, 'synset': 'trombidiid.n.01', 'name': 'trombidiid'}, {'id': 2477, 'synset': 'trombiculid.n.01', 'name': 'trombiculid'}, {'id': 2478, 'synset': 'harvest_mite.n.01', 'name': 'harvest_mite'}, {'id': 2479, 'synset': 'acarus.n.01', 'name': 'acarus'}, {'id': 2480, 'synset': 'itch_mite.n.01', 'name': 'itch_mite'}, {'id': 2481, 'synset': 'rust_mite.n.01', 'name': 'rust_mite'}, {'id': 2482, 'synset': 'spider_mite.n.01', 'name': 'spider_mite'}, {'id': 2483, 'synset': 'red_spider.n.01', 'name': 'red_spider'}, {'id': 2484, 'synset': 'myriapod.n.01', 'name': 'myriapod'}, {'id': 2485, 'synset': 'garden_centipede.n.01', 'name': 'garden_centipede'}, {'id': 2486, 'synset': 'tardigrade.n.01', 'name': 'tardigrade'}, {'id': 2487, 'synset': 'centipede.n.01', 'name': 'centipede'}, {'id': 2488, 'synset': 'house_centipede.n.01', 'name': 'house_centipede'}, {'id': 2489, 'synset': 'millipede.n.01', 'name': 'millipede'}, {'id': 2490, 'synset': 'sea_spider.n.01', 'name': 'sea_spider'}, {'id': 2491, 'synset': 'merostomata.n.01', 'name': 'Merostomata'}, {'id': 2492, 'synset': 'horseshoe_crab.n.01', 'name': 'horseshoe_crab'}, {'id': 2493, 'synset': 'asian_horseshoe_crab.n.01', 'name': 'Asian_horseshoe_crab'}, {'id': 2494, 'synset': 'eurypterid.n.01', 'name': 'eurypterid'}, {'id': 2495, 'synset': 'tongue_worm.n.01', 'name': 'tongue_worm'}, {'id': 2496, 'synset': 'gallinaceous_bird.n.01', 'name': 'gallinaceous_bird'}, {'id': 2497, 'synset': 'domestic_fowl.n.01', 'name': 'domestic_fowl'}, {'id': 2498, 'synset': 'dorking.n.01', 'name': 'Dorking'}, {'id': 2499, 'synset': 'plymouth_rock.n.02', 'name': 'Plymouth_Rock'}, {'id': 2500, 'synset': 'cornish.n.02', 'name': 'Cornish'}, {'id': 2501, 'synset': 'rock_cornish.n.01', 'name': 'Rock_Cornish'}, {'id': 2502, 'synset': 'game_fowl.n.01', 'name': 'game_fowl'}, {'id': 2503, 'synset': 'cochin.n.01', 'name': 'cochin'}, {'id': 2504, 'synset': 'jungle_fowl.n.01', 'name': 'jungle_fowl'}, {'id': 2505, 'synset': 'jungle_cock.n.01', 'name': 'jungle_cock'}, {'id': 2506, 'synset': 'jungle_hen.n.01', 'name': 'jungle_hen'}, {'id': 2507, 'synset': 'red_jungle_fowl.n.01', 'name': 'red_jungle_fowl'}, {'id': 2508, 'synset': 'bantam.n.01', 'name': 'bantam'}, {'id': 2509, 'synset': 'chick.n.01', 'name': 'chick'}, {'id': 2510, 'synset': 'cockerel.n.01', 'name': 'cockerel'}, {'id': 2511, 'synset': 'capon.n.02', 'name': 'capon'}, {'id': 2512, 'synset': 'hen.n.01', 'name': 'hen'}, {'id': 2513, 'synset': 'cackler.n.01', 'name': 'cackler'}, {'id': 2514, 'synset': 'brood_hen.n.01', 'name': 'brood_hen'}, {'id': 2515, 'synset': 'mother_hen.n.02', 'name': 'mother_hen'}, {'id': 2516, 'synset': 'layer.n.04', 'name': 'layer'}, {'id': 2517, 'synset': 'pullet.n.02', 'name': 'pullet'}, {'id': 2518, 'synset': 'spring_chicken.n.02', 'name': 'spring_chicken'}, {'id': 2519, 'synset': 'rhode_island_red.n.01', 'name': 'Rhode_Island_red'}, {'id': 2520, 'synset': 'dominique.n.01', 'name': 'Dominique'}, {'id': 2521, 'synset': 'orpington.n.01', 'name': 'Orpington'}, {'id': 2522, 'synset': 'turkey.n.01', 'name': 'turkey'}, {'id': 2523, 'synset': 'turkey_cock.n.01', 'name': 'turkey_cock'}, {'id': 2524, 'synset': 'ocellated_turkey.n.01', 'name': 'ocellated_turkey'}, {'id': 2525, 'synset': 'grouse.n.02', 'name': 'grouse'}, {'id': 2526, 'synset': 'black_grouse.n.01', 'name': 'black_grouse'}, {'id': 2527, 'synset': 'european_black_grouse.n.01', 'name': 'European_black_grouse'}, {'id': 2528, 'synset': 'asian_black_grouse.n.01', 'name': 'Asian_black_grouse'}, {'id': 2529, 'synset': 'blackcock.n.01', 'name': 'blackcock'}, {'id': 2530, 'synset': 'greyhen.n.01', 'name': 'greyhen'}, {'id': 2531, 'synset': 'ptarmigan.n.01', 'name': 'ptarmigan'}, {'id': 2532, 'synset': 'red_grouse.n.01', 'name': 'red_grouse'}, {'id': 2533, 'synset': 'moorhen.n.02', 'name': 'moorhen'}, {'id': 2534, 'synset': 'capercaillie.n.01', 'name': 'capercaillie'}, {'id': 2535, 'synset': 'spruce_grouse.n.01', 'name': 'spruce_grouse'}, {'id': 2536, 'synset': 'sage_grouse.n.01', 'name': 'sage_grouse'}, {'id': 2537, 'synset': 'ruffed_grouse.n.01', 'name': 'ruffed_grouse'}, {'id': 2538, 'synset': 'sharp-tailed_grouse.n.01', 'name': 'sharp-tailed_grouse'}, {'id': 2539, 'synset': 'prairie_chicken.n.01', 'name': 'prairie_chicken'}, {'id': 2540, 'synset': 'greater_prairie_chicken.n.01', 'name': 'greater_prairie_chicken'}, {'id': 2541, 'synset': 'lesser_prairie_chicken.n.01', 'name': 'lesser_prairie_chicken'}, {'id': 2542, 'synset': 'heath_hen.n.01', 'name': 'heath_hen'}, {'id': 2543, 'synset': 'guan.n.01', 'name': 'guan'}, {'id': 2544, 'synset': 'curassow.n.01', 'name': 'curassow'}, {'id': 2545, 'synset': 'piping_guan.n.01', 'name': 'piping_guan'}, {'id': 2546, 'synset': 'chachalaca.n.01', 'name': 'chachalaca'}, {'id': 2547, 'synset': 'texas_chachalaca.n.01', 'name': 'Texas_chachalaca'}, {'id': 2548, 'synset': 'megapode.n.01', 'name': 'megapode'}, {'id': 2549, 'synset': 'mallee_fowl.n.01', 'name': 'mallee_fowl'}, {'id': 2550, 'synset': 'mallee_hen.n.01', 'name': 'mallee_hen'}, {'id': 2551, 'synset': 'brush_turkey.n.01', 'name': 'brush_turkey'}, {'id': 2552, 'synset': 'maleo.n.01', 'name': 'maleo'}, {'id': 2553, 'synset': 'phasianid.n.01', 'name': 'phasianid'}, {'id': 2554, 'synset': 'pheasant.n.01', 'name': 'pheasant'}, {'id': 2555, 'synset': 'ring-necked_pheasant.n.01', 'name': 'ring-necked_pheasant'}, {'id': 2556, 'synset': 'afropavo.n.01', 'name': 'afropavo'}, {'id': 2557, 'synset': 'argus.n.02', 'name': 'argus'}, {'id': 2558, 'synset': 'golden_pheasant.n.01', 'name': 'golden_pheasant'}, {'id': 2559, 'synset': 'bobwhite.n.01', 'name': 'bobwhite'}, {'id': 2560, 'synset': 'northern_bobwhite.n.01', 'name': 'northern_bobwhite'}, {'id': 2561, 'synset': 'old_world_quail.n.01', 'name': 'Old_World_quail'}, {'id': 2562, 'synset': 'migratory_quail.n.01', 'name': 'migratory_quail'}, {'id': 2563, 'synset': 'monal.n.01', 'name': 'monal'}, {'id': 2564, 'synset': 'peafowl.n.01', 'name': 'peafowl'}, {'id': 2565, 'synset': 'peachick.n.01', 'name': 'peachick'}, {'id': 2566, 'synset': 'peacock.n.02', 'name': 'peacock'}, {'id': 2567, 'synset': 'peahen.n.01', 'name': 'peahen'}, {'id': 2568, 'synset': 'blue_peafowl.n.01', 'name': 'blue_peafowl'}, {'id': 2569, 'synset': 'green_peafowl.n.01', 'name': 'green_peafowl'}, {'id': 2570, 'synset': 'quail.n.02', 'name': 'quail'}, {'id': 2571, 'synset': 'california_quail.n.01', 'name': 'California_quail'}, {'id': 2572, 'synset': 'tragopan.n.01', 'name': 'tragopan'}, {'id': 2573, 'synset': 'partridge.n.03', 'name': 'partridge'}, {'id': 2574, 'synset': 'hungarian_partridge.n.01', 'name': 'Hungarian_partridge'}, {'id': 2575, 'synset': 'red-legged_partridge.n.01', 'name': 'red-legged_partridge'}, {'id': 2576, 'synset': 'greek_partridge.n.01', 'name': 'Greek_partridge'}, {'id': 2577, 'synset': 'mountain_quail.n.01', 'name': 'mountain_quail'}, {'id': 2578, 'synset': 'guinea_fowl.n.01', 'name': 'guinea_fowl'}, {'id': 2579, 'synset': 'guinea_hen.n.02', 'name': 'guinea_hen'}, {'id': 2580, 'synset': 'hoatzin.n.01', 'name': 'hoatzin'}, {'id': 2581, 'synset': 'tinamou.n.01', 'name': 'tinamou'}, {'id': 2582, 'synset': 'columbiform_bird.n.01', 'name': 'columbiform_bird'}, {'id': 2583, 'synset': 'dodo.n.02', 'name': 'dodo'}, {'id': 2584, 'synset': 'pouter_pigeon.n.01', 'name': 'pouter_pigeon'}, {'id': 2585, 'synset': 'rock_dove.n.01', 'name': 'rock_dove'}, {'id': 2586, 'synset': 'band-tailed_pigeon.n.01', 'name': 'band-tailed_pigeon'}, {'id': 2587, 'synset': 'wood_pigeon.n.01', 'name': 'wood_pigeon'}, {'id': 2588, 'synset': 'turtledove.n.02', 'name': 'turtledove'}, {'id': 2589, 'synset': 'streptopelia_turtur.n.01', 'name': 'Streptopelia_turtur'}, {'id': 2590, 'synset': 'ringdove.n.01', 'name': 'ringdove'}, {'id': 2591, 'synset': 'australian_turtledove.n.01', 'name': 'Australian_turtledove'}, {'id': 2592, 'synset': 'mourning_dove.n.01', 'name': 'mourning_dove'}, {'id': 2593, 'synset': 'domestic_pigeon.n.01', 'name': 'domestic_pigeon'}, {'id': 2594, 'synset': 'squab.n.03', 'name': 'squab'}, {'id': 2595, 'synset': 'fairy_swallow.n.01', 'name': 'fairy_swallow'}, {'id': 2596, 'synset': 'roller.n.07', 'name': 'roller'}, {'id': 2597, 'synset': 'homing_pigeon.n.01', 'name': 'homing_pigeon'}, {'id': 2598, 'synset': 'carrier_pigeon.n.01', 'name': 'carrier_pigeon'}, {'id': 2599, 'synset': 'passenger_pigeon.n.01', 'name': 'passenger_pigeon'}, {'id': 2600, 'synset': 'sandgrouse.n.01', 'name': 'sandgrouse'}, {'id': 2601, 'synset': 'painted_sandgrouse.n.01', 'name': 'painted_sandgrouse'}, {'id': 2602, 'synset': 'pin-tailed_sandgrouse.n.01', 'name': 'pin-tailed_sandgrouse'}, {'id': 2603, 'synset': "pallas's_sandgrouse.n.01", 'name': "pallas's_sandgrouse"}, {'id': 2604, 'synset': 'popinjay.n.02', 'name': 'popinjay'}, {'id': 2605, 'synset': 'poll.n.04', 'name': 'poll'}, {'id': 2606, 'synset': 'african_grey.n.01', 'name': 'African_grey'}, {'id': 2607, 'synset': 'amazon.n.04', 'name': 'amazon'}, {'id': 2608, 'synset': 'macaw.n.01', 'name': 'macaw'}, {'id': 2609, 'synset': 'kea.n.01', 'name': 'kea'}, {'id': 2610, 'synset': 'cockatoo.n.01', 'name': 'cockatoo'}, {'id': 2611, 'synset': 'sulphur-crested_cockatoo.n.01', 'name': 'sulphur-crested_cockatoo'}, {'id': 2612, 'synset': 'pink_cockatoo.n.01', 'name': 'pink_cockatoo'}, {'id': 2613, 'synset': 'cockateel.n.01', 'name': 'cockateel'}, {'id': 2614, 'synset': 'lovebird.n.02', 'name': 'lovebird'}, {'id': 2615, 'synset': 'lory.n.01', 'name': 'lory'}, {'id': 2616, 'synset': 'lorikeet.n.01', 'name': 'lorikeet'}, {'id': 2617, 'synset': 'varied_lorikeet.n.01', 'name': 'varied_Lorikeet'}, {'id': 2618, 'synset': 'rainbow_lorikeet.n.01', 'name': 'rainbow_lorikeet'}, {'id': 2619, 'synset': 'carolina_parakeet.n.01', 'name': 'Carolina_parakeet'}, {'id': 2620, 'synset': 'budgerigar.n.01', 'name': 'budgerigar'}, {'id': 2621, 'synset': 'ring-necked_parakeet.n.01', 'name': 'ring-necked_parakeet'}, {'id': 2622, 'synset': 'cuculiform_bird.n.01', 'name': 'cuculiform_bird'}, {'id': 2623, 'synset': 'cuckoo.n.02', 'name': 'cuckoo'}, {'id': 2624, 'synset': 'european_cuckoo.n.01', 'name': 'European_cuckoo'}, {'id': 2625, 'synset': 'black-billed_cuckoo.n.01', 'name': 'black-billed_cuckoo'}, {'id': 2626, 'synset': 'roadrunner.n.01', 'name': 'roadrunner'}, {'id': 2627, 'synset': 'ani.n.01', 'name': 'ani'}, {'id': 2628, 'synset': 'coucal.n.01', 'name': 'coucal'}, {'id': 2629, 'synset': 'crow_pheasant.n.01', 'name': 'crow_pheasant'}, {'id': 2630, 'synset': 'touraco.n.01', 'name': 'touraco'}, {'id': 2631, 'synset': 'coraciiform_bird.n.01', 'name': 'coraciiform_bird'}, {'id': 2632, 'synset': 'roller.n.06', 'name': 'roller'}, {'id': 2633, 'synset': 'european_roller.n.01', 'name': 'European_roller'}, {'id': 2634, 'synset': 'ground_roller.n.01', 'name': 'ground_roller'}, {'id': 2635, 'synset': 'kingfisher.n.01', 'name': 'kingfisher'}, {'id': 2636, 'synset': 'eurasian_kingfisher.n.01', 'name': 'Eurasian_kingfisher'}, {'id': 2637, 'synset': 'belted_kingfisher.n.01', 'name': 'belted_kingfisher'}, {'id': 2638, 'synset': 'kookaburra.n.01', 'name': 'kookaburra'}, {'id': 2639, 'synset': 'bee_eater.n.01', 'name': 'bee_eater'}, {'id': 2640, 'synset': 'hornbill.n.01', 'name': 'hornbill'}, {'id': 2641, 'synset': 'hoopoe.n.01', 'name': 'hoopoe'}, {'id': 2642, 'synset': 'euopean_hoopoe.n.01', 'name': 'Euopean_hoopoe'}, {'id': 2643, 'synset': 'wood_hoopoe.n.01', 'name': 'wood_hoopoe'}, {'id': 2644, 'synset': 'motmot.n.01', 'name': 'motmot'}, {'id': 2645, 'synset': 'tody.n.01', 'name': 'tody'}, {'id': 2646, 'synset': 'apodiform_bird.n.01', 'name': 'apodiform_bird'}, {'id': 2647, 'synset': 'swift.n.03', 'name': 'swift'}, {'id': 2648, 'synset': 'european_swift.n.01', 'name': 'European_swift'}, {'id': 2649, 'synset': 'chimney_swift.n.01', 'name': 'chimney_swift'}, {'id': 2650, 'synset': 'swiftlet.n.01', 'name': 'swiftlet'}, {'id': 2651, 'synset': 'tree_swift.n.01', 'name': 'tree_swift'}, {'id': 2652, 'synset': 'archilochus_colubris.n.01', 'name': 'Archilochus_colubris'}, {'id': 2653, 'synset': 'thornbill.n.01', 'name': 'thornbill'}, {'id': 2654, 'synset': 'goatsucker.n.01', 'name': 'goatsucker'}, {'id': 2655, 'synset': 'european_goatsucker.n.01', 'name': 'European_goatsucker'}, {'id': 2656, 'synset': "chuck-will's-widow.n.01", 'name': "chuck-will's-widow"}, {'id': 2657, 'synset': 'whippoorwill.n.01', 'name': 'whippoorwill'}, {'id': 2658, 'synset': 'poorwill.n.01', 'name': 'poorwill'}, {'id': 2659, 'synset': 'frogmouth.n.01', 'name': 'frogmouth'}, {'id': 2660, 'synset': 'oilbird.n.01', 'name': 'oilbird'}, {'id': 2661, 'synset': 'piciform_bird.n.01', 'name': 'piciform_bird'}, {'id': 2662, 'synset': 'woodpecker.n.01', 'name': 'woodpecker'}, {'id': 2663, 'synset': 'green_woodpecker.n.01', 'name': 'green_woodpecker'}, {'id': 2664, 'synset': 'downy_woodpecker.n.01', 'name': 'downy_woodpecker'}, {'id': 2665, 'synset': 'flicker.n.02', 'name': 'flicker'}, {'id': 2666, 'synset': 'yellow-shafted_flicker.n.01', 'name': 'yellow-shafted_flicker'}, {'id': 2667, 'synset': 'gilded_flicker.n.01', 'name': 'gilded_flicker'}, {'id': 2668, 'synset': 'red-shafted_flicker.n.01', 'name': 'red-shafted_flicker'}, {'id': 2669, 'synset': 'ivorybill.n.01', 'name': 'ivorybill'}, {'id': 2670, 'synset': 'redheaded_woodpecker.n.01', 'name': 'redheaded_woodpecker'}, {'id': 2671, 'synset': 'sapsucker.n.01', 'name': 'sapsucker'}, {'id': 2672, 'synset': 'yellow-bellied_sapsucker.n.01', 'name': 'yellow-bellied_sapsucker'}, {'id': 2673, 'synset': 'red-breasted_sapsucker.n.01', 'name': 'red-breasted_sapsucker'}, {'id': 2674, 'synset': 'wryneck.n.02', 'name': 'wryneck'}, {'id': 2675, 'synset': 'piculet.n.01', 'name': 'piculet'}, {'id': 2676, 'synset': 'barbet.n.01', 'name': 'barbet'}, {'id': 2677, 'synset': 'puffbird.n.01', 'name': 'puffbird'}, {'id': 2678, 'synset': 'honey_guide.n.01', 'name': 'honey_guide'}, {'id': 2679, 'synset': 'jacamar.n.01', 'name': 'jacamar'}, {'id': 2680, 'synset': 'toucan.n.01', 'name': 'toucan'}, {'id': 2681, 'synset': 'toucanet.n.01', 'name': 'toucanet'}, {'id': 2682, 'synset': 'trogon.n.01', 'name': 'trogon'}, {'id': 2683, 'synset': 'quetzal.n.02', 'name': 'quetzal'}, {'id': 2684, 'synset': 'resplendent_quetzel.n.01', 'name': 'resplendent_quetzel'}, {'id': 2685, 'synset': 'aquatic_bird.n.01', 'name': 'aquatic_bird'}, {'id': 2686, 'synset': 'waterfowl.n.01', 'name': 'waterfowl'}, {'id': 2687, 'synset': 'anseriform_bird.n.01', 'name': 'anseriform_bird'}, {'id': 2688, 'synset': 'drake.n.02', 'name': 'drake'}, {'id': 2689, 'synset': 'quack-quack.n.01', 'name': 'quack-quack'}, {'id': 2690, 'synset': 'diving_duck.n.01', 'name': 'diving_duck'}, {'id': 2691, 'synset': 'dabbling_duck.n.01', 'name': 'dabbling_duck'}, {'id': 2692, 'synset': 'black_duck.n.01', 'name': 'black_duck'}, {'id': 2693, 'synset': 'teal.n.02', 'name': 'teal'}, {'id': 2694, 'synset': 'greenwing.n.01', 'name': 'greenwing'}, {'id': 2695, 'synset': 'bluewing.n.01', 'name': 'bluewing'}, {'id': 2696, 'synset': 'garganey.n.01', 'name': 'garganey'}, {'id': 2697, 'synset': 'widgeon.n.01', 'name': 'widgeon'}, {'id': 2698, 'synset': 'american_widgeon.n.01', 'name': 'American_widgeon'}, {'id': 2699, 'synset': 'shoveler.n.02', 'name': 'shoveler'}, {'id': 2700, 'synset': 'pintail.n.01', 'name': 'pintail'}, {'id': 2701, 'synset': 'sheldrake.n.02', 'name': 'sheldrake'}, {'id': 2702, 'synset': 'shelduck.n.01', 'name': 'shelduck'}, {'id': 2703, 'synset': 'ruddy_duck.n.01', 'name': 'ruddy_duck'}, {'id': 2704, 'synset': 'bufflehead.n.01', 'name': 'bufflehead'}, {'id': 2705, 'synset': 'goldeneye.n.02', 'name': 'goldeneye'}, {'id': 2706, 'synset': "barrow's_goldeneye.n.01", 'name': "Barrow's_goldeneye"}, {'id': 2707, 'synset': 'canvasback.n.01', 'name': 'canvasback'}, {'id': 2708, 'synset': 'pochard.n.01', 'name': 'pochard'}, {'id': 2709, 'synset': 'redhead.n.02', 'name': 'redhead'}, {'id': 2710, 'synset': 'scaup.n.01', 'name': 'scaup'}, {'id': 2711, 'synset': 'greater_scaup.n.01', 'name': 'greater_scaup'}, {'id': 2712, 'synset': 'lesser_scaup.n.01', 'name': 'lesser_scaup'}, {'id': 2713, 'synset': 'wild_duck.n.01', 'name': 'wild_duck'}, {'id': 2714, 'synset': 'wood_duck.n.01', 'name': 'wood_duck'}, {'id': 2715, 'synset': 'wood_drake.n.01', 'name': 'wood_drake'}, {'id': 2716, 'synset': 'mandarin_duck.n.01', 'name': 'mandarin_duck'}, {'id': 2717, 'synset': 'muscovy_duck.n.01', 'name': 'muscovy_duck'}, {'id': 2718, 'synset': 'sea_duck.n.01', 'name': 'sea_duck'}, {'id': 2719, 'synset': 'eider.n.01', 'name': 'eider'}, {'id': 2720, 'synset': 'scoter.n.01', 'name': 'scoter'}, {'id': 2721, 'synset': 'common_scoter.n.01', 'name': 'common_scoter'}, {'id': 2722, 'synset': 'old_squaw.n.01', 'name': 'old_squaw'}, {'id': 2723, 'synset': 'merganser.n.01', 'name': 'merganser'}, {'id': 2724, 'synset': 'goosander.n.01', 'name': 'goosander'}, {'id': 2725, 'synset': 'american_merganser.n.01', 'name': 'American_merganser'}, {'id': 2726, 'synset': 'red-breasted_merganser.n.01', 'name': 'red-breasted_merganser'}, {'id': 2727, 'synset': 'smew.n.01', 'name': 'smew'}, {'id': 2728, 'synset': 'hooded_merganser.n.01', 'name': 'hooded_merganser'}, {'id': 2729, 'synset': 'gosling.n.01', 'name': 'gosling'}, {'id': 2730, 'synset': 'gander.n.01', 'name': 'gander'}, {'id': 2731, 'synset': 'chinese_goose.n.01', 'name': 'Chinese_goose'}, {'id': 2732, 'synset': 'greylag.n.01', 'name': 'greylag'}, {'id': 2733, 'synset': 'blue_goose.n.01', 'name': 'blue_goose'}, {'id': 2734, 'synset': 'snow_goose.n.01', 'name': 'snow_goose'}, {'id': 2735, 'synset': 'brant.n.01', 'name': 'brant'}, {'id': 2736, 'synset': 'common_brant_goose.n.01', 'name': 'common_brant_goose'}, {'id': 2737, 'synset': 'honker.n.03', 'name': 'honker'}, {'id': 2738, 'synset': 'barnacle_goose.n.01', 'name': 'barnacle_goose'}, {'id': 2739, 'synset': 'coscoroba.n.01', 'name': 'coscoroba'}, {'id': 2740, 'synset': 'swan.n.01', 'name': 'swan'}, {'id': 2741, 'synset': 'cob.n.04', 'name': 'cob'}, {'id': 2742, 'synset': 'pen.n.05', 'name': 'pen'}, {'id': 2743, 'synset': 'cygnet.n.01', 'name': 'cygnet'}, {'id': 2744, 'synset': 'mute_swan.n.01', 'name': 'mute_swan'}, {'id': 2745, 'synset': 'whooper.n.02', 'name': 'whooper'}, {'id': 2746, 'synset': 'tundra_swan.n.01', 'name': 'tundra_swan'}, {'id': 2747, 'synset': 'whistling_swan.n.01', 'name': 'whistling_swan'}, {'id': 2748, 'synset': "bewick's_swan.n.01", 'name': "Bewick's_swan"}, {'id': 2749, 'synset': 'trumpeter.n.04', 'name': 'trumpeter'}, {'id': 2750, 'synset': 'black_swan.n.01', 'name': 'black_swan'}, {'id': 2751, 'synset': 'screamer.n.03', 'name': 'screamer'}, {'id': 2752, 'synset': 'horned_screamer.n.01', 'name': 'horned_screamer'}, {'id': 2753, 'synset': 'crested_screamer.n.01', 'name': 'crested_screamer'}, {'id': 2754, 'synset': 'chaja.n.01', 'name': 'chaja'}, {'id': 2755, 'synset': 'mammal.n.01', 'name': 'mammal'}, {'id': 2756, 'synset': 'female_mammal.n.01', 'name': 'female_mammal'}, {'id': 2757, 'synset': 'tusker.n.01', 'name': 'tusker'}, {'id': 2758, 'synset': 'prototherian.n.01', 'name': 'prototherian'}, {'id': 2759, 'synset': 'monotreme.n.01', 'name': 'monotreme'}, {'id': 2760, 'synset': 'echidna.n.02', 'name': 'echidna'}, {'id': 2761, 'synset': 'echidna.n.01', 'name': 'echidna'}, {'id': 2762, 'synset': 'platypus.n.01', 'name': 'platypus'}, {'id': 2763, 'synset': 'marsupial.n.01', 'name': 'marsupial'}, {'id': 2764, 'synset': 'opossum.n.02', 'name': 'opossum'}, {'id': 2765, 'synset': 'common_opossum.n.01', 'name': 'common_opossum'}, {'id': 2766, 'synset': 'crab-eating_opossum.n.01', 'name': 'crab-eating_opossum'}, {'id': 2767, 'synset': 'opossum_rat.n.01', 'name': 'opossum_rat'}, {'id': 2768, 'synset': 'bandicoot.n.01', 'name': 'bandicoot'}, {'id': 2769, 'synset': 'rabbit-eared_bandicoot.n.01', 'name': 'rabbit-eared_bandicoot'}, {'id': 2770, 'synset': 'kangaroo.n.01', 'name': 'kangaroo'}, {'id': 2771, 'synset': 'giant_kangaroo.n.01', 'name': 'giant_kangaroo'}, {'id': 2772, 'synset': 'wallaby.n.01', 'name': 'wallaby'}, {'id': 2773, 'synset': 'common_wallaby.n.01', 'name': 'common_wallaby'}, {'id': 2774, 'synset': 'hare_wallaby.n.01', 'name': 'hare_wallaby'}, {'id': 2775, 'synset': 'nail-tailed_wallaby.n.01', 'name': 'nail-tailed_wallaby'}, {'id': 2776, 'synset': 'rock_wallaby.n.01', 'name': 'rock_wallaby'}, {'id': 2777, 'synset': 'pademelon.n.01', 'name': 'pademelon'}, {'id': 2778, 'synset': 'tree_wallaby.n.01', 'name': 'tree_wallaby'}, {'id': 2779, 'synset': 'musk_kangaroo.n.01', 'name': 'musk_kangaroo'}, {'id': 2780, 'synset': 'rat_kangaroo.n.01', 'name': 'rat_kangaroo'}, {'id': 2781, 'synset': 'potoroo.n.01', 'name': 'potoroo'}, {'id': 2782, 'synset': 'bettong.n.01', 'name': 'bettong'}, {'id': 2783, 'synset': 'jerboa_kangaroo.n.01', 'name': 'jerboa_kangaroo'}, {'id': 2784, 'synset': 'phalanger.n.01', 'name': 'phalanger'}, {'id': 2785, 'synset': 'cuscus.n.01', 'name': 'cuscus'}, {'id': 2786, 'synset': 'brush-tailed_phalanger.n.01', 'name': 'brush-tailed_phalanger'}, {'id': 2787, 'synset': 'flying_phalanger.n.01', 'name': 'flying_phalanger'}, {'id': 2788, 'synset': 'wombat.n.01', 'name': 'wombat'}, {'id': 2789, 'synset': 'dasyurid_marsupial.n.01', 'name': 'dasyurid_marsupial'}, {'id': 2790, 'synset': 'dasyure.n.01', 'name': 'dasyure'}, {'id': 2791, 'synset': 'eastern_dasyure.n.01', 'name': 'eastern_dasyure'}, {'id': 2792, 'synset': 'native_cat.n.01', 'name': 'native_cat'}, {'id': 2793, 'synset': 'thylacine.n.01', 'name': 'thylacine'}, {'id': 2794, 'synset': 'tasmanian_devil.n.01', 'name': 'Tasmanian_devil'}, {'id': 2795, 'synset': 'pouched_mouse.n.01', 'name': 'pouched_mouse'}, {'id': 2796, 'synset': 'numbat.n.01', 'name': 'numbat'}, {'id': 2797, 'synset': 'pouched_mole.n.01', 'name': 'pouched_mole'}, {'id': 2798, 'synset': 'placental.n.01', 'name': 'placental'}, {'id': 2799, 'synset': 'livestock.n.01', 'name': 'livestock'}, {'id': 2800, 'synset': 'cow.n.02', 'name': 'cow'}, {'id': 2801, 'synset': 'calf.n.04', 'name': 'calf'}, {'id': 2802, 'synset': 'yearling.n.03', 'name': 'yearling'}, {'id': 2803, 'synset': 'buck.n.05', 'name': 'buck'}, {'id': 2804, 'synset': 'doe.n.02', 'name': 'doe'}, {'id': 2805, 'synset': 'insectivore.n.01', 'name': 'insectivore'}, {'id': 2806, 'synset': 'mole.n.06', 'name': 'mole'}, {'id': 2807, 'synset': 'starnose_mole.n.01', 'name': 'starnose_mole'}, {'id': 2808, 'synset': "brewer's_mole.n.01", 'name': "brewer's_mole"}, {'id': 2809, 'synset': 'golden_mole.n.01', 'name': 'golden_mole'}, {'id': 2810, 'synset': 'shrew_mole.n.01', 'name': 'shrew_mole'}, {'id': 2811, 'synset': 'asiatic_shrew_mole.n.01', 'name': 'Asiatic_shrew_mole'}, {'id': 2812, 'synset': 'american_shrew_mole.n.01', 'name': 'American_shrew_mole'}, {'id': 2813, 'synset': 'shrew.n.02', 'name': 'shrew'}, {'id': 2814, 'synset': 'common_shrew.n.01', 'name': 'common_shrew'}, {'id': 2815, 'synset': 'masked_shrew.n.01', 'name': 'masked_shrew'}, {'id': 2816, 'synset': 'short-tailed_shrew.n.01', 'name': 'short-tailed_shrew'}, {'id': 2817, 'synset': 'water_shrew.n.01', 'name': 'water_shrew'}, {'id': 2818, 'synset': 'american_water_shrew.n.01', 'name': 'American_water_shrew'}, {'id': 2819, 'synset': 'european_water_shrew.n.01', 'name': 'European_water_shrew'}, {'id': 2820, 'synset': 'mediterranean_water_shrew.n.01', 'name': 'Mediterranean_water_shrew'}, {'id': 2821, 'synset': 'least_shrew.n.01', 'name': 'least_shrew'}, {'id': 2822, 'synset': 'hedgehog.n.02', 'name': 'hedgehog'}, {'id': 2823, 'synset': 'tenrec.n.01', 'name': 'tenrec'}, {'id': 2824, 'synset': 'tailless_tenrec.n.01', 'name': 'tailless_tenrec'}, {'id': 2825, 'synset': 'otter_shrew.n.01', 'name': 'otter_shrew'}, {'id': 2826, 'synset': 'eiderdown.n.02', 'name': 'eiderdown'}, {'id': 2827, 'synset': 'aftershaft.n.01', 'name': 'aftershaft'}, {'id': 2828, 'synset': 'sickle_feather.n.01', 'name': 'sickle_feather'}, {'id': 2829, 'synset': 'contour_feather.n.01', 'name': 'contour_feather'}, {'id': 2830, 'synset': 'bastard_wing.n.01', 'name': 'bastard_wing'}, {'id': 2831, 'synset': 'saddle_hackle.n.01', 'name': 'saddle_hackle'}, {'id': 2832, 'synset': 'encolure.n.01', 'name': 'encolure'}, {'id': 2833, 'synset': 'hair.n.06', 'name': 'hair'}, {'id': 2834, 'synset': 'squama.n.01', 'name': 'squama'}, {'id': 2835, 'synset': 'scute.n.01', 'name': 'scute'}, {'id': 2836, 'synset': 'sclerite.n.01', 'name': 'sclerite'}, {'id': 2837, 'synset': 'plastron.n.05', 'name': 'plastron'}, {'id': 2838, 'synset': 'scallop_shell.n.01', 'name': 'scallop_shell'}, {'id': 2839, 'synset': 'oyster_shell.n.01', 'name': 'oyster_shell'}, {'id': 2840, 'synset': 'theca.n.02', 'name': 'theca'}, {'id': 2841, 'synset': 'invertebrate.n.01', 'name': 'invertebrate'}, {'id': 2842, 'synset': 'sponge.n.04', 'name': 'sponge'}, {'id': 2843, 'synset': 'choanocyte.n.01', 'name': 'choanocyte'}, {'id': 2844, 'synset': 'glass_sponge.n.01', 'name': 'glass_sponge'}, {'id': 2845, 'synset': "venus's_flower_basket.n.01", 'name': "Venus's_flower_basket"}, {'id': 2846, 'synset': 'metazoan.n.01', 'name': 'metazoan'}, {'id': 2847, 'synset': 'coelenterate.n.01', 'name': 'coelenterate'}, {'id': 2848, 'synset': 'planula.n.01', 'name': 'planula'}, {'id': 2849, 'synset': 'polyp.n.02', 'name': 'polyp'}, {'id': 2850, 'synset': 'medusa.n.02', 'name': 'medusa'}, {'id': 2851, 'synset': 'jellyfish.n.02', 'name': 'jellyfish'}, {'id': 2852, 'synset': 'scyphozoan.n.01', 'name': 'scyphozoan'}, {'id': 2853, 'synset': 'chrysaora_quinquecirrha.n.01', 'name': 'Chrysaora_quinquecirrha'}, {'id': 2854, 'synset': 'hydrozoan.n.01', 'name': 'hydrozoan'}, {'id': 2855, 'synset': 'hydra.n.04', 'name': 'hydra'}, {'id': 2856, 'synset': 'siphonophore.n.01', 'name': 'siphonophore'}, {'id': 2857, 'synset': 'nanomia.n.01', 'name': 'nanomia'}, {'id': 2858, 'synset': 'portuguese_man-of-war.n.01', 'name': 'Portuguese_man-of-war'}, {'id': 2859, 'synset': 'praya.n.01', 'name': 'praya'}, {'id': 2860, 'synset': 'apolemia.n.01', 'name': 'apolemia'}, {'id': 2861, 'synset': 'anthozoan.n.01', 'name': 'anthozoan'}, {'id': 2862, 'synset': 'sea_anemone.n.01', 'name': 'sea_anemone'}, {'id': 2863, 'synset': 'actinia.n.02', 'name': 'actinia'}, {'id': 2864, 'synset': 'sea_pen.n.01', 'name': 'sea_pen'}, {'id': 2865, 'synset': 'coral.n.04', 'name': 'coral'}, {'id': 2866, 'synset': 'gorgonian.n.01', 'name': 'gorgonian'}, {'id': 2867, 'synset': 'sea_feather.n.01', 'name': 'sea_feather'}, {'id': 2868, 'synset': 'sea_fan.n.01', 'name': 'sea_fan'}, {'id': 2869, 'synset': 'red_coral.n.02', 'name': 'red_coral'}, {'id': 2870, 'synset': 'stony_coral.n.01', 'name': 'stony_coral'}, {'id': 2871, 'synset': 'brain_coral.n.01', 'name': 'brain_coral'}, {'id': 2872, 'synset': 'staghorn_coral.n.01', 'name': 'staghorn_coral'}, {'id': 2873, 'synset': 'mushroom_coral.n.01', 'name': 'mushroom_coral'}, {'id': 2874, 'synset': 'ctenophore.n.01', 'name': 'ctenophore'}, {'id': 2875, 'synset': 'beroe.n.01', 'name': 'beroe'}, {'id': 2876, 'synset': 'platyctenean.n.01', 'name': 'platyctenean'}, {'id': 2877, 'synset': 'sea_gooseberry.n.01', 'name': 'sea_gooseberry'}, {'id': 2878, 'synset': "venus's_girdle.n.01", 'name': "Venus's_girdle"}, {'id': 2879, 'synset': 'worm.n.01', 'name': 'worm'}, {'id': 2880, 'synset': 'helminth.n.01', 'name': 'helminth'}, {'id': 2881, 'synset': 'woodworm.n.01', 'name': 'woodworm'}, {'id': 2882, 'synset': 'woodborer.n.01', 'name': 'woodborer'}, {'id': 2883, 'synset': 'acanthocephalan.n.01', 'name': 'acanthocephalan'}, {'id': 2884, 'synset': 'arrowworm.n.01', 'name': 'arrowworm'}, {'id': 2885, 'synset': 'bladder_worm.n.01', 'name': 'bladder_worm'}, {'id': 2886, 'synset': 'flatworm.n.01', 'name': 'flatworm'}, {'id': 2887, 'synset': 'planarian.n.01', 'name': 'planarian'}, {'id': 2888, 'synset': 'fluke.n.05', 'name': 'fluke'}, {'id': 2889, 'synset': 'cercaria.n.01', 'name': 'cercaria'}, {'id': 2890, 'synset': 'liver_fluke.n.01', 'name': 'liver_fluke'}, {'id': 2891, 'synset': 'fasciolopsis_buski.n.01', 'name': 'Fasciolopsis_buski'}, {'id': 2892, 'synset': 'schistosome.n.01', 'name': 'schistosome'}, {'id': 2893, 'synset': 'tapeworm.n.01', 'name': 'tapeworm'}, {'id': 2894, 'synset': 'echinococcus.n.01', 'name': 'echinococcus'}, {'id': 2895, 'synset': 'taenia.n.02', 'name': 'taenia'}, {'id': 2896, 'synset': 'ribbon_worm.n.01', 'name': 'ribbon_worm'}, {'id': 2897, 'synset': 'beard_worm.n.01', 'name': 'beard_worm'}, {'id': 2898, 'synset': 'rotifer.n.01', 'name': 'rotifer'}, {'id': 2899, 'synset': 'nematode.n.01', 'name': 'nematode'}, {'id': 2900, 'synset': 'common_roundworm.n.01', 'name': 'common_roundworm'}, {'id': 2901, 'synset': 'chicken_roundworm.n.01', 'name': 'chicken_roundworm'}, {'id': 2902, 'synset': 'pinworm.n.01', 'name': 'pinworm'}, {'id': 2903, 'synset': 'eelworm.n.01', 'name': 'eelworm'}, {'id': 2904, 'synset': 'vinegar_eel.n.01', 'name': 'vinegar_eel'}, {'id': 2905, 'synset': 'trichina.n.01', 'name': 'trichina'}, {'id': 2906, 'synset': 'hookworm.n.01', 'name': 'hookworm'}, {'id': 2907, 'synset': 'filaria.n.02', 'name': 'filaria'}, {'id': 2908, 'synset': 'guinea_worm.n.02', 'name': 'Guinea_worm'}, {'id': 2909, 'synset': 'annelid.n.01', 'name': 'annelid'}, {'id': 2910, 'synset': 'archiannelid.n.01', 'name': 'archiannelid'}, {'id': 2911, 'synset': 'oligochaete.n.01', 'name': 'oligochaete'}, {'id': 2912, 'synset': 'earthworm.n.01', 'name': 'earthworm'}, {'id': 2913, 'synset': 'polychaete.n.01', 'name': 'polychaete'}, {'id': 2914, 'synset': 'lugworm.n.01', 'name': 'lugworm'}, {'id': 2915, 'synset': 'sea_mouse.n.01', 'name': 'sea_mouse'}, {'id': 2916, 'synset': 'bloodworm.n.01', 'name': 'bloodworm'}, {'id': 2917, 'synset': 'leech.n.01', 'name': 'leech'}, {'id': 2918, 'synset': 'medicinal_leech.n.01', 'name': 'medicinal_leech'}, {'id': 2919, 'synset': 'horseleech.n.01', 'name': 'horseleech'}, {'id': 2920, 'synset': 'mollusk.n.01', 'name': 'mollusk'}, {'id': 2921, 'synset': 'scaphopod.n.01', 'name': 'scaphopod'}, {'id': 2922, 'synset': 'tooth_shell.n.01', 'name': 'tooth_shell'}, {'id': 2923, 'synset': 'gastropod.n.01', 'name': 'gastropod'}, {'id': 2924, 'synset': 'abalone.n.01', 'name': 'abalone'}, {'id': 2925, 'synset': 'ormer.n.01', 'name': 'ormer'}, {'id': 2926, 'synset': 'scorpion_shell.n.01', 'name': 'scorpion_shell'}, {'id': 2927, 'synset': 'conch.n.01', 'name': 'conch'}, {'id': 2928, 'synset': 'giant_conch.n.01', 'name': 'giant_conch'}, {'id': 2929, 'synset': 'snail.n.01', 'name': 'snail'}, {'id': 2930, 'synset': 'edible_snail.n.01', 'name': 'edible_snail'}, {'id': 2931, 'synset': 'garden_snail.n.01', 'name': 'garden_snail'}, {'id': 2932, 'synset': 'brown_snail.n.01', 'name': 'brown_snail'}, {'id': 2933, 'synset': 'helix_hortensis.n.01', 'name': 'Helix_hortensis'}, {'id': 2934, 'synset': 'slug.n.07', 'name': 'slug'}, {'id': 2935, 'synset': 'seasnail.n.02', 'name': 'seasnail'}, {'id': 2936, 'synset': 'neritid.n.01', 'name': 'neritid'}, {'id': 2937, 'synset': 'nerita.n.01', 'name': 'nerita'}, {'id': 2938, 'synset': 'bleeding_tooth.n.01', 'name': 'bleeding_tooth'}, {'id': 2939, 'synset': 'neritina.n.01', 'name': 'neritina'}, {'id': 2940, 'synset': 'whelk.n.02', 'name': 'whelk'}, {'id': 2941, 'synset': 'moon_shell.n.01', 'name': 'moon_shell'}, {'id': 2942, 'synset': 'periwinkle.n.04', 'name': 'periwinkle'}, {'id': 2943, 'synset': 'limpet.n.02', 'name': 'limpet'}, {'id': 2944, 'synset': 'common_limpet.n.01', 'name': 'common_limpet'}, {'id': 2945, 'synset': 'keyhole_limpet.n.01', 'name': 'keyhole_limpet'}, {'id': 2946, 'synset': 'river_limpet.n.01', 'name': 'river_limpet'}, {'id': 2947, 'synset': 'sea_slug.n.01', 'name': 'sea_slug'}, {'id': 2948, 'synset': 'sea_hare.n.01', 'name': 'sea_hare'}, {'id': 2949, 'synset': 'hermissenda_crassicornis.n.01', 'name': 'Hermissenda_crassicornis'}, {'id': 2950, 'synset': 'bubble_shell.n.01', 'name': 'bubble_shell'}, {'id': 2951, 'synset': 'physa.n.01', 'name': 'physa'}, {'id': 2952, 'synset': 'cowrie.n.01', 'name': 'cowrie'}, {'id': 2953, 'synset': 'money_cowrie.n.01', 'name': 'money_cowrie'}, {'id': 2954, 'synset': 'tiger_cowrie.n.01', 'name': 'tiger_cowrie'}, {'id': 2955, 'synset': 'solenogaster.n.01', 'name': 'solenogaster'}, {'id': 2956, 'synset': 'chiton.n.02', 'name': 'chiton'}, {'id': 2957, 'synset': 'bivalve.n.01', 'name': 'bivalve'}, {'id': 2958, 'synset': 'spat.n.03', 'name': 'spat'}, {'id': 2959, 'synset': 'clam.n.01', 'name': 'clam'}, {'id': 2960, 'synset': 'soft-shell_clam.n.02', 'name': 'soft-shell_clam'}, {'id': 2961, 'synset': 'quahog.n.02', 'name': 'quahog'}, {'id': 2962, 'synset': 'littleneck.n.02', 'name': 'littleneck'}, {'id': 2963, 'synset': 'cherrystone.n.02', 'name': 'cherrystone'}, {'id': 2964, 'synset': 'geoduck.n.01', 'name': 'geoduck'}, {'id': 2965, 'synset': 'razor_clam.n.01', 'name': 'razor_clam'}, {'id': 2966, 'synset': 'giant_clam.n.01', 'name': 'giant_clam'}, {'id': 2967, 'synset': 'cockle.n.02', 'name': 'cockle'}, {'id': 2968, 'synset': 'edible_cockle.n.01', 'name': 'edible_cockle'}, {'id': 2969, 'synset': 'oyster.n.01', 'name': 'oyster'}, {'id': 2970, 'synset': 'japanese_oyster.n.01', 'name': 'Japanese_oyster'}, {'id': 2971, 'synset': 'virginia_oyster.n.01', 'name': 'Virginia_oyster'}, {'id': 2972, 'synset': 'pearl_oyster.n.01', 'name': 'pearl_oyster'}, {'id': 2973, 'synset': 'saddle_oyster.n.01', 'name': 'saddle_oyster'}, {'id': 2974, 'synset': 'window_oyster.n.01', 'name': 'window_oyster'}, {'id': 2975, 'synset': 'ark_shell.n.01', 'name': 'ark_shell'}, {'id': 2976, 'synset': 'blood_clam.n.01', 'name': 'blood_clam'}, {'id': 2977, 'synset': 'mussel.n.02', 'name': 'mussel'}, {'id': 2978, 'synset': 'marine_mussel.n.01', 'name': 'marine_mussel'}, {'id': 2979, 'synset': 'edible_mussel.n.01', 'name': 'edible_mussel'}, {'id': 2980, 'synset': 'freshwater_mussel.n.01', 'name': 'freshwater_mussel'}, {'id': 2981, 'synset': 'pearly-shelled_mussel.n.01', 'name': 'pearly-shelled_mussel'}, {'id': 2982, 'synset': 'thin-shelled_mussel.n.01', 'name': 'thin-shelled_mussel'}, {'id': 2983, 'synset': 'zebra_mussel.n.01', 'name': 'zebra_mussel'}, {'id': 2984, 'synset': 'scallop.n.04', 'name': 'scallop'}, {'id': 2985, 'synset': 'bay_scallop.n.02', 'name': 'bay_scallop'}, {'id': 2986, 'synset': 'sea_scallop.n.02', 'name': 'sea_scallop'}, {'id': 2987, 'synset': 'shipworm.n.01', 'name': 'shipworm'}, {'id': 2988, 'synset': 'teredo.n.01', 'name': 'teredo'}, {'id': 2989, 'synset': 'piddock.n.01', 'name': 'piddock'}, {'id': 2990, 'synset': 'cephalopod.n.01', 'name': 'cephalopod'}, {'id': 2991, 'synset': 'chambered_nautilus.n.01', 'name': 'chambered_nautilus'}, {'id': 2992, 'synset': 'octopod.n.01', 'name': 'octopod'}, {'id': 2993, 'synset': 'paper_nautilus.n.01', 'name': 'paper_nautilus'}, {'id': 2994, 'synset': 'decapod.n.02', 'name': 'decapod'}, {'id': 2995, 'synset': 'squid.n.02', 'name': 'squid'}, {'id': 2996, 'synset': 'loligo.n.01', 'name': 'loligo'}, {'id': 2997, 'synset': 'ommastrephes.n.01', 'name': 'ommastrephes'}, {'id': 2998, 'synset': 'architeuthis.n.01', 'name': 'architeuthis'}, {'id': 2999, 'synset': 'cuttlefish.n.01', 'name': 'cuttlefish'}, {'id': 3000, 'synset': 'spirula.n.01', 'name': 'spirula'}, {'id': 3001, 'synset': 'crustacean.n.01', 'name': 'crustacean'}, {'id': 3002, 'synset': 'malacostracan_crustacean.n.01', 'name': 'malacostracan_crustacean'}, {'id': 3003, 'synset': 'decapod_crustacean.n.01', 'name': 'decapod_crustacean'}, {'id': 3004, 'synset': 'brachyuran.n.01', 'name': 'brachyuran'}, {'id': 3005, 'synset': 'stone_crab.n.02', 'name': 'stone_crab'}, {'id': 3006, 'synset': 'hard-shell_crab.n.01', 'name': 'hard-shell_crab'}, {'id': 3007, 'synset': 'soft-shell_crab.n.02', 'name': 'soft-shell_crab'}, {'id': 3008, 'synset': 'dungeness_crab.n.02', 'name': 'Dungeness_crab'}, {'id': 3009, 'synset': 'rock_crab.n.01', 'name': 'rock_crab'}, {'id': 3010, 'synset': 'jonah_crab.n.01', 'name': 'Jonah_crab'}, {'id': 3011, 'synset': 'swimming_crab.n.01', 'name': 'swimming_crab'}, {'id': 3012, 'synset': 'english_lady_crab.n.01', 'name': 'English_lady_crab'}, {'id': 3013, 'synset': 'american_lady_crab.n.01', 'name': 'American_lady_crab'}, {'id': 3014, 'synset': 'blue_crab.n.02', 'name': 'blue_crab'}, {'id': 3015, 'synset': 'fiddler_crab.n.01', 'name': 'fiddler_crab'}, {'id': 3016, 'synset': 'pea_crab.n.01', 'name': 'pea_crab'}, {'id': 3017, 'synset': 'king_crab.n.03', 'name': 'king_crab'}, {'id': 3018, 'synset': 'spider_crab.n.01', 'name': 'spider_crab'}, {'id': 3019, 'synset': 'european_spider_crab.n.01', 'name': 'European_spider_crab'}, {'id': 3020, 'synset': 'giant_crab.n.01', 'name': 'giant_crab'}, {'id': 3021, 'synset': 'lobster.n.02', 'name': 'lobster'}, {'id': 3022, 'synset': 'true_lobster.n.01', 'name': 'true_lobster'}, {'id': 3023, 'synset': 'american_lobster.n.02', 'name': 'American_lobster'}, {'id': 3024, 'synset': 'european_lobster.n.02', 'name': 'European_lobster'}, {'id': 3025, 'synset': 'cape_lobster.n.01', 'name': 'Cape_lobster'}, {'id': 3026, 'synset': 'norway_lobster.n.01', 'name': 'Norway_lobster'}, {'id': 3027, 'synset': 'crayfish.n.03', 'name': 'crayfish'}, {'id': 3028, 'synset': 'old_world_crayfish.n.01', 'name': 'Old_World_crayfish'}, {'id': 3029, 'synset': 'american_crayfish.n.01', 'name': 'American_crayfish'}, {'id': 3030, 'synset': 'hermit_crab.n.01', 'name': 'hermit_crab'}, {'id': 3031, 'synset': 'shrimp.n.03', 'name': 'shrimp'}, {'id': 3032, 'synset': 'snapping_shrimp.n.01', 'name': 'snapping_shrimp'}, {'id': 3033, 'synset': 'prawn.n.02', 'name': 'prawn'}, {'id': 3034, 'synset': 'long-clawed_prawn.n.01', 'name': 'long-clawed_prawn'}, {'id': 3035, 'synset': 'tropical_prawn.n.01', 'name': 'tropical_prawn'}, {'id': 3036, 'synset': 'krill.n.01', 'name': 'krill'}, {'id': 3037, 'synset': 'euphausia_pacifica.n.01', 'name': 'Euphausia_pacifica'}, {'id': 3038, 'synset': 'opossum_shrimp.n.01', 'name': 'opossum_shrimp'}, {'id': 3039, 'synset': 'stomatopod.n.01', 'name': 'stomatopod'}, {'id': 3040, 'synset': 'mantis_shrimp.n.01', 'name': 'mantis_shrimp'}, {'id': 3041, 'synset': 'squilla.n.01', 'name': 'squilla'}, {'id': 3042, 'synset': 'isopod.n.01', 'name': 'isopod'}, {'id': 3043, 'synset': 'woodlouse.n.01', 'name': 'woodlouse'}, {'id': 3044, 'synset': 'pill_bug.n.01', 'name': 'pill_bug'}, {'id': 3045, 'synset': 'sow_bug.n.01', 'name': 'sow_bug'}, {'id': 3046, 'synset': 'sea_louse.n.01', 'name': 'sea_louse'}, {'id': 3047, 'synset': 'amphipod.n.01', 'name': 'amphipod'}, {'id': 3048, 'synset': 'skeleton_shrimp.n.01', 'name': 'skeleton_shrimp'}, {'id': 3049, 'synset': 'whale_louse.n.01', 'name': 'whale_louse'}, {'id': 3050, 'synset': 'daphnia.n.01', 'name': 'daphnia'}, {'id': 3051, 'synset': 'fairy_shrimp.n.01', 'name': 'fairy_shrimp'}, {'id': 3052, 'synset': 'brine_shrimp.n.01', 'name': 'brine_shrimp'}, {'id': 3053, 'synset': 'tadpole_shrimp.n.01', 'name': 'tadpole_shrimp'}, {'id': 3054, 'synset': 'copepod.n.01', 'name': 'copepod'}, {'id': 3055, 'synset': 'cyclops.n.02', 'name': 'cyclops'}, {'id': 3056, 'synset': 'seed_shrimp.n.01', 'name': 'seed_shrimp'}, {'id': 3057, 'synset': 'barnacle.n.01', 'name': 'barnacle'}, {'id': 3058, 'synset': 'acorn_barnacle.n.01', 'name': 'acorn_barnacle'}, {'id': 3059, 'synset': 'goose_barnacle.n.01', 'name': 'goose_barnacle'}, {'id': 3060, 'synset': 'onychophoran.n.01', 'name': 'onychophoran'}, {'id': 3061, 'synset': 'wading_bird.n.01', 'name': 'wading_bird'}, {'id': 3062, 'synset': 'stork.n.01', 'name': 'stork'}, {'id': 3063, 'synset': 'white_stork.n.01', 'name': 'white_stork'}, {'id': 3064, 'synset': 'black_stork.n.01', 'name': 'black_stork'}, {'id': 3065, 'synset': 'adjutant_bird.n.01', 'name': 'adjutant_bird'}, {'id': 3066, 'synset': 'marabou.n.01', 'name': 'marabou'}, {'id': 3067, 'synset': 'openbill.n.01', 'name': 'openbill'}, {'id': 3068, 'synset': 'jabiru.n.03', 'name': 'jabiru'}, {'id': 3069, 'synset': 'saddlebill.n.01', 'name': 'saddlebill'}, {'id': 3070, 'synset': 'policeman_bird.n.01', 'name': 'policeman_bird'}, {'id': 3071, 'synset': 'wood_ibis.n.02', 'name': 'wood_ibis'}, {'id': 3072, 'synset': 'shoebill.n.01', 'name': 'shoebill'}, {'id': 3073, 'synset': 'ibis.n.01', 'name': 'ibis'}, {'id': 3074, 'synset': 'wood_ibis.n.01', 'name': 'wood_ibis'}, {'id': 3075, 'synset': 'sacred_ibis.n.01', 'name': 'sacred_ibis'}, {'id': 3076, 'synset': 'spoonbill.n.01', 'name': 'spoonbill'}, {'id': 3077, 'synset': 'common_spoonbill.n.01', 'name': 'common_spoonbill'}, {'id': 3078, 'synset': 'roseate_spoonbill.n.01', 'name': 'roseate_spoonbill'}, {'id': 3079, 'synset': 'great_blue_heron.n.01', 'name': 'great_blue_heron'}, {'id': 3080, 'synset': 'great_white_heron.n.03', 'name': 'great_white_heron'}, {'id': 3081, 'synset': 'egret.n.01', 'name': 'egret'}, {'id': 3082, 'synset': 'little_blue_heron.n.01', 'name': 'little_blue_heron'}, {'id': 3083, 'synset': 'snowy_egret.n.01', 'name': 'snowy_egret'}, {'id': 3084, 'synset': 'little_egret.n.01', 'name': 'little_egret'}, {'id': 3085, 'synset': 'great_white_heron.n.02', 'name': 'great_white_heron'}, {'id': 3086, 'synset': 'american_egret.n.01', 'name': 'American_egret'}, {'id': 3087, 'synset': 'cattle_egret.n.01', 'name': 'cattle_egret'}, {'id': 3088, 'synset': 'night_heron.n.01', 'name': 'night_heron'}, {'id': 3089, 'synset': 'black-crowned_night_heron.n.01', 'name': 'black-crowned_night_heron'}, {'id': 3090, 'synset': 'yellow-crowned_night_heron.n.01', 'name': 'yellow-crowned_night_heron'}, {'id': 3091, 'synset': 'boatbill.n.01', 'name': 'boatbill'}, {'id': 3092, 'synset': 'bittern.n.01', 'name': 'bittern'}, {'id': 3093, 'synset': 'american_bittern.n.01', 'name': 'American_bittern'}, {'id': 3094, 'synset': 'european_bittern.n.01', 'name': 'European_bittern'}, {'id': 3095, 'synset': 'least_bittern.n.01', 'name': 'least_bittern'}, {'id': 3096, 'synset': 'crane.n.05', 'name': 'crane'}, {'id': 3097, 'synset': 'whooping_crane.n.01', 'name': 'whooping_crane'}, {'id': 3098, 'synset': 'courlan.n.01', 'name': 'courlan'}, {'id': 3099, 'synset': 'limpkin.n.01', 'name': 'limpkin'}, {'id': 3100, 'synset': 'crested_cariama.n.01', 'name': 'crested_cariama'}, {'id': 3101, 'synset': 'chunga.n.01', 'name': 'chunga'}, {'id': 3102, 'synset': 'rail.n.05', 'name': 'rail'}, {'id': 3103, 'synset': 'weka.n.01', 'name': 'weka'}, {'id': 3104, 'synset': 'crake.n.01', 'name': 'crake'}, {'id': 3105, 'synset': 'corncrake.n.01', 'name': 'corncrake'}, {'id': 3106, 'synset': 'spotted_crake.n.01', 'name': 'spotted_crake'}, {'id': 3107, 'synset': 'gallinule.n.01', 'name': 'gallinule'}, {'id': 3108, 'synset': 'florida_gallinule.n.01', 'name': 'Florida_gallinule'}, {'id': 3109, 'synset': 'moorhen.n.01', 'name': 'moorhen'}, {'id': 3110, 'synset': 'purple_gallinule.n.01', 'name': 'purple_gallinule'}, {'id': 3111, 'synset': 'european_gallinule.n.01', 'name': 'European_gallinule'}, {'id': 3112, 'synset': 'american_gallinule.n.01', 'name': 'American_gallinule'}, {'id': 3113, 'synset': 'notornis.n.01', 'name': 'notornis'}, {'id': 3114, 'synset': 'coot.n.01', 'name': 'coot'}, {'id': 3115, 'synset': 'american_coot.n.01', 'name': 'American_coot'}, {'id': 3116, 'synset': 'old_world_coot.n.01', 'name': 'Old_World_coot'}, {'id': 3117, 'synset': 'bustard.n.01', 'name': 'bustard'}, {'id': 3118, 'synset': 'great_bustard.n.01', 'name': 'great_bustard'}, {'id': 3119, 'synset': 'plain_turkey.n.01', 'name': 'plain_turkey'}, {'id': 3120, 'synset': 'button_quail.n.01', 'name': 'button_quail'}, {'id': 3121, 'synset': 'striped_button_quail.n.01', 'name': 'striped_button_quail'}, {'id': 3122, 'synset': 'plain_wanderer.n.01', 'name': 'plain_wanderer'}, {'id': 3123, 'synset': 'trumpeter.n.03', 'name': 'trumpeter'}, {'id': 3124, 'synset': 'brazilian_trumpeter.n.01', 'name': 'Brazilian_trumpeter'}, {'id': 3125, 'synset': 'shorebird.n.01', 'name': 'shorebird'}, {'id': 3126, 'synset': 'plover.n.01', 'name': 'plover'}, {'id': 3127, 'synset': 'piping_plover.n.01', 'name': 'piping_plover'}, {'id': 3128, 'synset': 'killdeer.n.01', 'name': 'killdeer'}, {'id': 3129, 'synset': 'dotterel.n.01', 'name': 'dotterel'}, {'id': 3130, 'synset': 'golden_plover.n.01', 'name': 'golden_plover'}, {'id': 3131, 'synset': 'lapwing.n.01', 'name': 'lapwing'}, {'id': 3132, 'synset': 'turnstone.n.01', 'name': 'turnstone'}, {'id': 3133, 'synset': 'ruddy_turnstone.n.01', 'name': 'ruddy_turnstone'}, {'id': 3134, 'synset': 'black_turnstone.n.01', 'name': 'black_turnstone'}, {'id': 3135, 'synset': 'sandpiper.n.01', 'name': 'sandpiper'}, {'id': 3136, 'synset': 'surfbird.n.01', 'name': 'surfbird'}, {'id': 3137, 'synset': 'european_sandpiper.n.01', 'name': 'European_sandpiper'}, {'id': 3138, 'synset': 'spotted_sandpiper.n.01', 'name': 'spotted_sandpiper'}, {'id': 3139, 'synset': 'least_sandpiper.n.01', 'name': 'least_sandpiper'}, {'id': 3140, 'synset': 'red-backed_sandpiper.n.01', 'name': 'red-backed_sandpiper'}, {'id': 3141, 'synset': 'greenshank.n.01', 'name': 'greenshank'}, {'id': 3142, 'synset': 'redshank.n.01', 'name': 'redshank'}, {'id': 3143, 'synset': 'yellowlegs.n.01', 'name': 'yellowlegs'}, {'id': 3144, 'synset': 'greater_yellowlegs.n.01', 'name': 'greater_yellowlegs'}, {'id': 3145, 'synset': 'lesser_yellowlegs.n.01', 'name': 'lesser_yellowlegs'}, {'id': 3146, 'synset': 'pectoral_sandpiper.n.01', 'name': 'pectoral_sandpiper'}, {'id': 3147, 'synset': 'knot.n.07', 'name': 'knot'}, {'id': 3148, 'synset': 'curlew_sandpiper.n.01', 'name': 'curlew_sandpiper'}, {'id': 3149, 'synset': 'sanderling.n.01', 'name': 'sanderling'}, {'id': 3150, 'synset': 'upland_sandpiper.n.01', 'name': 'upland_sandpiper'}, {'id': 3151, 'synset': 'ruff.n.03', 'name': 'ruff'}, {'id': 3152, 'synset': 'reeve.n.01', 'name': 'reeve'}, {'id': 3153, 'synset': 'tattler.n.02', 'name': 'tattler'}, {'id': 3154, 'synset': 'polynesian_tattler.n.01', 'name': 'Polynesian_tattler'}, {'id': 3155, 'synset': 'willet.n.01', 'name': 'willet'}, {'id': 3156, 'synset': 'woodcock.n.01', 'name': 'woodcock'}, {'id': 3157, 'synset': 'eurasian_woodcock.n.01', 'name': 'Eurasian_woodcock'}, {'id': 3158, 'synset': 'american_woodcock.n.01', 'name': 'American_woodcock'}, {'id': 3159, 'synset': 'snipe.n.01', 'name': 'snipe'}, {'id': 3160, 'synset': 'whole_snipe.n.01', 'name': 'whole_snipe'}, {'id': 3161, 'synset': "wilson's_snipe.n.01", 'name': "Wilson's_snipe"}, {'id': 3162, 'synset': 'great_snipe.n.01', 'name': 'great_snipe'}, {'id': 3163, 'synset': 'jacksnipe.n.01', 'name': 'jacksnipe'}, {'id': 3164, 'synset': 'dowitcher.n.01', 'name': 'dowitcher'}, {'id': 3165, 'synset': 'greyback.n.02', 'name': 'greyback'}, {'id': 3166, 'synset': 'red-breasted_snipe.n.01', 'name': 'red-breasted_snipe'}, {'id': 3167, 'synset': 'curlew.n.01', 'name': 'curlew'}, {'id': 3168, 'synset': 'european_curlew.n.01', 'name': 'European_curlew'}, {'id': 3169, 'synset': 'eskimo_curlew.n.01', 'name': 'Eskimo_curlew'}, {'id': 3170, 'synset': 'godwit.n.01', 'name': 'godwit'}, {'id': 3171, 'synset': 'hudsonian_godwit.n.01', 'name': 'Hudsonian_godwit'}, {'id': 3172, 'synset': 'stilt.n.04', 'name': 'stilt'}, {'id': 3173, 'synset': 'black-necked_stilt.n.01', 'name': 'black-necked_stilt'}, {'id': 3174, 'synset': 'black-winged_stilt.n.01', 'name': 'black-winged_stilt'}, {'id': 3175, 'synset': 'white-headed_stilt.n.01', 'name': 'white-headed_stilt'}, {'id': 3176, 'synset': 'kaki.n.02', 'name': 'kaki'}, {'id': 3177, 'synset': 'stilt.n.03', 'name': 'stilt'}, {'id': 3178, 'synset': 'banded_stilt.n.01', 'name': 'banded_stilt'}, {'id': 3179, 'synset': 'avocet.n.01', 'name': 'avocet'}, {'id': 3180, 'synset': 'oystercatcher.n.01', 'name': 'oystercatcher'}, {'id': 3181, 'synset': 'phalarope.n.01', 'name': 'phalarope'}, {'id': 3182, 'synset': 'red_phalarope.n.01', 'name': 'red_phalarope'}, {'id': 3183, 'synset': 'northern_phalarope.n.01', 'name': 'northern_phalarope'}, {'id': 3184, 'synset': "wilson's_phalarope.n.01", 'name': "Wilson's_phalarope"}, {'id': 3185, 'synset': 'pratincole.n.01', 'name': 'pratincole'}, {'id': 3186, 'synset': 'courser.n.04', 'name': 'courser'}, {'id': 3187, 'synset': 'cream-colored_courser.n.01', 'name': 'cream-colored_courser'}, {'id': 3188, 'synset': 'crocodile_bird.n.01', 'name': 'crocodile_bird'}, {'id': 3189, 'synset': 'stone_curlew.n.01', 'name': 'stone_curlew'}, {'id': 3190, 'synset': 'coastal_diving_bird.n.01', 'name': 'coastal_diving_bird'}, {'id': 3191, 'synset': 'larid.n.01', 'name': 'larid'}, {'id': 3192, 'synset': 'mew.n.02', 'name': 'mew'}, {'id': 3193, 'synset': 'black-backed_gull.n.01', 'name': 'black-backed_gull'}, {'id': 3194, 'synset': 'herring_gull.n.01', 'name': 'herring_gull'}, {'id': 3195, 'synset': 'laughing_gull.n.01', 'name': 'laughing_gull'}, {'id': 3196, 'synset': 'ivory_gull.n.01', 'name': 'ivory_gull'}, {'id': 3197, 'synset': 'kittiwake.n.01', 'name': 'kittiwake'}, {'id': 3198, 'synset': 'tern.n.01', 'name': 'tern'}, {'id': 3199, 'synset': 'sea_swallow.n.01', 'name': 'sea_swallow'}, {'id': 3200, 'synset': 'skimmer.n.04', 'name': 'skimmer'}, {'id': 3201, 'synset': 'jaeger.n.01', 'name': 'jaeger'}, {'id': 3202, 'synset': 'parasitic_jaeger.n.01', 'name': 'parasitic_jaeger'}, {'id': 3203, 'synset': 'skua.n.01', 'name': 'skua'}, {'id': 3204, 'synset': 'great_skua.n.01', 'name': 'great_skua'}, {'id': 3205, 'synset': 'auk.n.01', 'name': 'auk'}, {'id': 3206, 'synset': 'auklet.n.01', 'name': 'auklet'}, {'id': 3207, 'synset': 'razorbill.n.01', 'name': 'razorbill'}, {'id': 3208, 'synset': 'little_auk.n.01', 'name': 'little_auk'}, {'id': 3209, 'synset': 'guillemot.n.01', 'name': 'guillemot'}, {'id': 3210, 'synset': 'black_guillemot.n.01', 'name': 'black_guillemot'}, {'id': 3211, 'synset': 'pigeon_guillemot.n.01', 'name': 'pigeon_guillemot'}, {'id': 3212, 'synset': 'murre.n.01', 'name': 'murre'}, {'id': 3213, 'synset': 'common_murre.n.01', 'name': 'common_murre'}, {'id': 3214, 'synset': 'thick-billed_murre.n.01', 'name': 'thick-billed_murre'}, {'id': 3215, 'synset': 'atlantic_puffin.n.01', 'name': 'Atlantic_puffin'}, {'id': 3216, 'synset': 'horned_puffin.n.01', 'name': 'horned_puffin'}, {'id': 3217, 'synset': 'tufted_puffin.n.01', 'name': 'tufted_puffin'}, {'id': 3218, 'synset': 'gaviiform_seabird.n.01', 'name': 'gaviiform_seabird'}, {'id': 3219, 'synset': 'loon.n.02', 'name': 'loon'}, {'id': 3220, 'synset': 'podicipitiform_seabird.n.01', 'name': 'podicipitiform_seabird'}, {'id': 3221, 'synset': 'grebe.n.01', 'name': 'grebe'}, {'id': 3222, 'synset': 'great_crested_grebe.n.01', 'name': 'great_crested_grebe'}, {'id': 3223, 'synset': 'red-necked_grebe.n.01', 'name': 'red-necked_grebe'}, {'id': 3224, 'synset': 'black-necked_grebe.n.01', 'name': 'black-necked_grebe'}, {'id': 3225, 'synset': 'dabchick.n.01', 'name': 'dabchick'}, {'id': 3226, 'synset': 'pied-billed_grebe.n.01', 'name': 'pied-billed_grebe'}, {'id': 3227, 'synset': 'pelecaniform_seabird.n.01', 'name': 'pelecaniform_seabird'}, {'id': 3228, 'synset': 'white_pelican.n.01', 'name': 'white_pelican'}, {'id': 3229, 'synset': 'old_world_white_pelican.n.01', 'name': 'Old_world_white_pelican'}, {'id': 3230, 'synset': 'frigate_bird.n.01', 'name': 'frigate_bird'}, {'id': 3231, 'synset': 'gannet.n.01', 'name': 'gannet'}, {'id': 3232, 'synset': 'solan.n.01', 'name': 'solan'}, {'id': 3233, 'synset': 'booby.n.02', 'name': 'booby'}, {'id': 3234, 'synset': 'cormorant.n.01', 'name': 'cormorant'}, {'id': 3235, 'synset': 'snakebird.n.01', 'name': 'snakebird'}, {'id': 3236, 'synset': 'water_turkey.n.01', 'name': 'water_turkey'}, {'id': 3237, 'synset': 'tropic_bird.n.01', 'name': 'tropic_bird'}, {'id': 3238, 'synset': 'sphenisciform_seabird.n.01', 'name': 'sphenisciform_seabird'}, {'id': 3239, 'synset': 'adelie.n.01', 'name': 'Adelie'}, {'id': 3240, 'synset': 'king_penguin.n.01', 'name': 'king_penguin'}, {'id': 3241, 'synset': 'emperor_penguin.n.01', 'name': 'emperor_penguin'}, {'id': 3242, 'synset': 'jackass_penguin.n.01', 'name': 'jackass_penguin'}, {'id': 3243, 'synset': 'rock_hopper.n.01', 'name': 'rock_hopper'}, {'id': 3244, 'synset': 'pelagic_bird.n.01', 'name': 'pelagic_bird'}, {'id': 3245, 'synset': 'procellariiform_seabird.n.01', 'name': 'procellariiform_seabird'}, {'id': 3246, 'synset': 'albatross.n.02', 'name': 'albatross'}, {'id': 3247, 'synset': 'wandering_albatross.n.01', 'name': 'wandering_albatross'}, {'id': 3248, 'synset': 'black-footed_albatross.n.01', 'name': 'black-footed_albatross'}, {'id': 3249, 'synset': 'petrel.n.01', 'name': 'petrel'}, {'id': 3250, 'synset': 'white-chinned_petrel.n.01', 'name': 'white-chinned_petrel'}, {'id': 3251, 'synset': 'giant_petrel.n.01', 'name': 'giant_petrel'}, {'id': 3252, 'synset': 'fulmar.n.01', 'name': 'fulmar'}, {'id': 3253, 'synset': 'shearwater.n.01', 'name': 'shearwater'}, {'id': 3254, 'synset': 'manx_shearwater.n.01', 'name': 'Manx_shearwater'}, {'id': 3255, 'synset': 'storm_petrel.n.01', 'name': 'storm_petrel'}, {'id': 3256, 'synset': 'stormy_petrel.n.01', 'name': 'stormy_petrel'}, {'id': 3257, 'synset': "mother_carey's_chicken.n.01", 'name': "Mother_Carey's_chicken"}, {'id': 3258, 'synset': 'diving_petrel.n.01', 'name': 'diving_petrel'}, {'id': 3259, 'synset': 'aquatic_mammal.n.01', 'name': 'aquatic_mammal'}, {'id': 3260, 'synset': 'cetacean.n.01', 'name': 'cetacean'}, {'id': 3261, 'synset': 'whale.n.02', 'name': 'whale'}, {'id': 3262, 'synset': 'baleen_whale.n.01', 'name': 'baleen_whale'}, {'id': 3263, 'synset': 'right_whale.n.01', 'name': 'right_whale'}, {'id': 3264, 'synset': 'bowhead.n.01', 'name': 'bowhead'}, {'id': 3265, 'synset': 'rorqual.n.01', 'name': 'rorqual'}, {'id': 3266, 'synset': 'blue_whale.n.01', 'name': 'blue_whale'}, {'id': 3267, 'synset': 'finback.n.01', 'name': 'finback'}, {'id': 3268, 'synset': 'sei_whale.n.01', 'name': 'sei_whale'}, {'id': 3269, 'synset': 'lesser_rorqual.n.01', 'name': 'lesser_rorqual'}, {'id': 3270, 'synset': 'humpback.n.03', 'name': 'humpback'}, {'id': 3271, 'synset': 'grey_whale.n.01', 'name': 'grey_whale'}, {'id': 3272, 'synset': 'toothed_whale.n.01', 'name': 'toothed_whale'}, {'id': 3273, 'synset': 'sperm_whale.n.01', 'name': 'sperm_whale'}, {'id': 3274, 'synset': 'pygmy_sperm_whale.n.01', 'name': 'pygmy_sperm_whale'}, {'id': 3275, 'synset': 'dwarf_sperm_whale.n.01', 'name': 'dwarf_sperm_whale'}, {'id': 3276, 'synset': 'beaked_whale.n.01', 'name': 'beaked_whale'}, {'id': 3277, 'synset': 'bottle-nosed_whale.n.01', 'name': 'bottle-nosed_whale'}, {'id': 3278, 'synset': 'common_dolphin.n.01', 'name': 'common_dolphin'}, {'id': 3279, 'synset': 'bottlenose_dolphin.n.01', 'name': 'bottlenose_dolphin'}, {'id': 3280, 'synset': 'atlantic_bottlenose_dolphin.n.01', 'name': 'Atlantic_bottlenose_dolphin'}, {'id': 3281, 'synset': 'pacific_bottlenose_dolphin.n.01', 'name': 'Pacific_bottlenose_dolphin'}, {'id': 3282, 'synset': 'porpoise.n.01', 'name': 'porpoise'}, {'id': 3283, 'synset': 'harbor_porpoise.n.01', 'name': 'harbor_porpoise'}, {'id': 3284, 'synset': 'vaquita.n.01', 'name': 'vaquita'}, {'id': 3285, 'synset': 'grampus.n.02', 'name': 'grampus'}, {'id': 3286, 'synset': 'killer_whale.n.01', 'name': 'killer_whale'}, {'id': 3287, 'synset': 'pilot_whale.n.01', 'name': 'pilot_whale'}, {'id': 3288, 'synset': 'river_dolphin.n.01', 'name': 'river_dolphin'}, {'id': 3289, 'synset': 'narwhal.n.01', 'name': 'narwhal'}, {'id': 3290, 'synset': 'white_whale.n.01', 'name': 'white_whale'}, {'id': 3291, 'synset': 'sea_cow.n.01', 'name': 'sea_cow'}, {'id': 3292, 'synset': 'dugong.n.01', 'name': 'dugong'}, {'id': 3293, 'synset': "steller's_sea_cow.n.01", 'name': "Steller's_sea_cow"}, {'id': 3294, 'synset': 'carnivore.n.01', 'name': 'carnivore'}, {'id': 3295, 'synset': 'omnivore.n.02', 'name': 'omnivore'}, {'id': 3296, 'synset': 'pinniped_mammal.n.01', 'name': 'pinniped_mammal'}, {'id': 3297, 'synset': 'seal.n.09', 'name': 'seal'}, {'id': 3298, 'synset': 'crabeater_seal.n.01', 'name': 'crabeater_seal'}, {'id': 3299, 'synset': 'eared_seal.n.01', 'name': 'eared_seal'}, {'id': 3300, 'synset': 'fur_seal.n.02', 'name': 'fur_seal'}, {'id': 3301, 'synset': 'guadalupe_fur_seal.n.01', 'name': 'guadalupe_fur_seal'}, {'id': 3302, 'synset': 'fur_seal.n.01', 'name': 'fur_seal'}, {'id': 3303, 'synset': 'alaska_fur_seal.n.01', 'name': 'Alaska_fur_seal'}, {'id': 3304, 'synset': 'sea_lion.n.01', 'name': 'sea_lion'}, {'id': 3305, 'synset': 'south_american_sea_lion.n.01', 'name': 'South_American_sea_lion'}, {'id': 3306, 'synset': 'california_sea_lion.n.01', 'name': 'California_sea_lion'}, {'id': 3307, 'synset': 'australian_sea_lion.n.01', 'name': 'Australian_sea_lion'}, {'id': 3308, 'synset': 'steller_sea_lion.n.01', 'name': 'Steller_sea_lion'}, {'id': 3309, 'synset': 'earless_seal.n.01', 'name': 'earless_seal'}, {'id': 3310, 'synset': 'harbor_seal.n.01', 'name': 'harbor_seal'}, {'id': 3311, 'synset': 'harp_seal.n.01', 'name': 'harp_seal'}, {'id': 3312, 'synset': 'elephant_seal.n.01', 'name': 'elephant_seal'}, {'id': 3313, 'synset': 'bearded_seal.n.01', 'name': 'bearded_seal'}, {'id': 3314, 'synset': 'hooded_seal.n.01', 'name': 'hooded_seal'}, {'id': 3315, 'synset': 'atlantic_walrus.n.01', 'name': 'Atlantic_walrus'}, {'id': 3316, 'synset': 'pacific_walrus.n.01', 'name': 'Pacific_walrus'}, {'id': 3317, 'synset': 'fissipedia.n.01', 'name': 'Fissipedia'}, {'id': 3318, 'synset': 'fissiped_mammal.n.01', 'name': 'fissiped_mammal'}, {'id': 3319, 'synset': 'aardvark.n.01', 'name': 'aardvark'}, {'id': 3320, 'synset': 'canine.n.02', 'name': 'canine'}, {'id': 3321, 'synset': 'bitch.n.04', 'name': 'bitch'}, {'id': 3322, 'synset': 'brood_bitch.n.01', 'name': 'brood_bitch'}, {'id': 3323, 'synset': 'pooch.n.01', 'name': 'pooch'}, {'id': 3324, 'synset': 'cur.n.01', 'name': 'cur'}, {'id': 3325, 'synset': 'feist.n.01', 'name': 'feist'}, {'id': 3326, 'synset': 'pariah_dog.n.01', 'name': 'pariah_dog'}, {'id': 3327, 'synset': 'lapdog.n.01', 'name': 'lapdog'}, {'id': 3328, 'synset': 'toy_dog.n.01', 'name': 'toy_dog'}, {'id': 3329, 'synset': 'chihuahua.n.03', 'name': 'Chihuahua'}, {'id': 3330, 'synset': 'japanese_spaniel.n.01', 'name': 'Japanese_spaniel'}, {'id': 3331, 'synset': 'maltese_dog.n.01', 'name': 'Maltese_dog'}, {'id': 3332, 'synset': 'pekinese.n.01', 'name': 'Pekinese'}, {'id': 3333, 'synset': 'shih-tzu.n.01', 'name': 'Shih-Tzu'}, {'id': 3334, 'synset': 'toy_spaniel.n.01', 'name': 'toy_spaniel'}, {'id': 3335, 'synset': 'english_toy_spaniel.n.01', 'name': 'English_toy_spaniel'}, {'id': 3336, 'synset': 'blenheim_spaniel.n.01', 'name': 'Blenheim_spaniel'}, {'id': 3337, 'synset': 'king_charles_spaniel.n.01', 'name': 'King_Charles_spaniel'}, {'id': 3338, 'synset': 'papillon.n.01', 'name': 'papillon'}, {'id': 3339, 'synset': 'toy_terrier.n.01', 'name': 'toy_terrier'}, {'id': 3340, 'synset': 'hunting_dog.n.01', 'name': 'hunting_dog'}, {'id': 3341, 'synset': 'courser.n.03', 'name': 'courser'}, {'id': 3342, 'synset': 'rhodesian_ridgeback.n.01', 'name': 'Rhodesian_ridgeback'}, {'id': 3343, 'synset': 'hound.n.01', 'name': 'hound'}, {'id': 3344, 'synset': 'afghan_hound.n.01', 'name': 'Afghan_hound'}, {'id': 3345, 'synset': 'basset.n.01', 'name': 'basset'}, {'id': 3346, 'synset': 'beagle.n.01', 'name': 'beagle'}, {'id': 3347, 'synset': 'bloodhound.n.01', 'name': 'bloodhound'}, {'id': 3348, 'synset': 'bluetick.n.01', 'name': 'bluetick'}, {'id': 3349, 'synset': 'boarhound.n.01', 'name': 'boarhound'}, {'id': 3350, 'synset': 'coonhound.n.01', 'name': 'coonhound'}, {'id': 3351, 'synset': 'coondog.n.01', 'name': 'coondog'}, {'id': 3352, 'synset': 'black-and-tan_coonhound.n.01', 'name': 'black-and-tan_coonhound'}, {'id': 3353, 'synset': 'dachshund.n.01', 'name': 'dachshund'}, {'id': 3354, 'synset': 'sausage_dog.n.01', 'name': 'sausage_dog'}, {'id': 3355, 'synset': 'foxhound.n.01', 'name': 'foxhound'}, {'id': 3356, 'synset': 'american_foxhound.n.01', 'name': 'American_foxhound'}, {'id': 3357, 'synset': 'walker_hound.n.01', 'name': 'Walker_hound'}, {'id': 3358, 'synset': 'english_foxhound.n.01', 'name': 'English_foxhound'}, {'id': 3359, 'synset': 'harrier.n.02', 'name': 'harrier'}, {'id': 3360, 'synset': 'plott_hound.n.01', 'name': 'Plott_hound'}, {'id': 3361, 'synset': 'redbone.n.01', 'name': 'redbone'}, {'id': 3362, 'synset': 'wolfhound.n.01', 'name': 'wolfhound'}, {'id': 3363, 'synset': 'borzoi.n.01', 'name': 'borzoi'}, {'id': 3364, 'synset': 'irish_wolfhound.n.01', 'name': 'Irish_wolfhound'}, {'id': 3365, 'synset': 'greyhound.n.01', 'name': 'greyhound'}, {'id': 3366, 'synset': 'italian_greyhound.n.01', 'name': 'Italian_greyhound'}, {'id': 3367, 'synset': 'whippet.n.01', 'name': 'whippet'}, {'id': 3368, 'synset': 'ibizan_hound.n.01', 'name': 'Ibizan_hound'}, {'id': 3369, 'synset': 'norwegian_elkhound.n.01', 'name': 'Norwegian_elkhound'}, {'id': 3370, 'synset': 'otterhound.n.01', 'name': 'otterhound'}, {'id': 3371, 'synset': 'saluki.n.01', 'name': 'Saluki'}, {'id': 3372, 'synset': 'scottish_deerhound.n.01', 'name': 'Scottish_deerhound'}, {'id': 3373, 'synset': 'staghound.n.01', 'name': 'staghound'}, {'id': 3374, 'synset': 'weimaraner.n.01', 'name': 'Weimaraner'}, {'id': 3375, 'synset': 'terrier.n.01', 'name': 'terrier'}, {'id': 3376, 'synset': 'bullterrier.n.01', 'name': 'bullterrier'}, {'id': 3377, 'synset': 'staffordshire_bullterrier.n.01', 'name': 'Staffordshire_bullterrier'}, {'id': 3378, 'synset': 'american_staffordshire_terrier.n.01', 'name': 'American_Staffordshire_terrier'}, {'id': 3379, 'synset': 'bedlington_terrier.n.01', 'name': 'Bedlington_terrier'}, {'id': 3380, 'synset': 'border_terrier.n.01', 'name': 'Border_terrier'}, {'id': 3381, 'synset': 'kerry_blue_terrier.n.01', 'name': 'Kerry_blue_terrier'}, {'id': 3382, 'synset': 'irish_terrier.n.01', 'name': 'Irish_terrier'}, {'id': 3383, 'synset': 'norfolk_terrier.n.01', 'name': 'Norfolk_terrier'}, {'id': 3384, 'synset': 'norwich_terrier.n.01', 'name': 'Norwich_terrier'}, {'id': 3385, 'synset': 'yorkshire_terrier.n.01', 'name': 'Yorkshire_terrier'}, {'id': 3386, 'synset': 'rat_terrier.n.01', 'name': 'rat_terrier'}, {'id': 3387, 'synset': 'manchester_terrier.n.01', 'name': 'Manchester_terrier'}, {'id': 3388, 'synset': 'toy_manchester.n.01', 'name': 'toy_Manchester'}, {'id': 3389, 'synset': 'fox_terrier.n.01', 'name': 'fox_terrier'}, {'id': 3390, 'synset': 'smooth-haired_fox_terrier.n.01', 'name': 'smooth-haired_fox_terrier'}, {'id': 3391, 'synset': 'wire-haired_fox_terrier.n.01', 'name': 'wire-haired_fox_terrier'}, {'id': 3392, 'synset': 'wirehair.n.01', 'name': 'wirehair'}, {'id': 3393, 'synset': 'lakeland_terrier.n.01', 'name': 'Lakeland_terrier'}, {'id': 3394, 'synset': 'welsh_terrier.n.01', 'name': 'Welsh_terrier'}, {'id': 3395, 'synset': 'sealyham_terrier.n.01', 'name': 'Sealyham_terrier'}, {'id': 3396, 'synset': 'airedale.n.01', 'name': 'Airedale'}, {'id': 3397, 'synset': 'cairn.n.02', 'name': 'cairn'}, {'id': 3398, 'synset': 'australian_terrier.n.01', 'name': 'Australian_terrier'}, {'id': 3399, 'synset': 'dandie_dinmont.n.01', 'name': 'Dandie_Dinmont'}, {'id': 3400, 'synset': 'boston_bull.n.01', 'name': 'Boston_bull'}, {'id': 3401, 'synset': 'schnauzer.n.01', 'name': 'schnauzer'}, {'id': 3402, 'synset': 'miniature_schnauzer.n.01', 'name': 'miniature_schnauzer'}, {'id': 3403, 'synset': 'giant_schnauzer.n.01', 'name': 'giant_schnauzer'}, {'id': 3404, 'synset': 'standard_schnauzer.n.01', 'name': 'standard_schnauzer'}, {'id': 3405, 'synset': 'scotch_terrier.n.01', 'name': 'Scotch_terrier'}, {'id': 3406, 'synset': 'tibetan_terrier.n.01', 'name': 'Tibetan_terrier'}, {'id': 3407, 'synset': 'silky_terrier.n.01', 'name': 'silky_terrier'}, {'id': 3408, 'synset': 'skye_terrier.n.01', 'name': 'Skye_terrier'}, {'id': 3409, 'synset': 'clydesdale_terrier.n.01', 'name': 'Clydesdale_terrier'}, {'id': 3410, 'synset': 'soft-coated_wheaten_terrier.n.01', 'name': 'soft-coated_wheaten_terrier'}, {'id': 3411, 'synset': 'west_highland_white_terrier.n.01', 'name': 'West_Highland_white_terrier'}, {'id': 3412, 'synset': 'lhasa.n.02', 'name': 'Lhasa'}, {'id': 3413, 'synset': 'sporting_dog.n.01', 'name': 'sporting_dog'}, {'id': 3414, 'synset': 'bird_dog.n.01', 'name': 'bird_dog'}, {'id': 3415, 'synset': 'water_dog.n.02', 'name': 'water_dog'}, {'id': 3416, 'synset': 'retriever.n.01', 'name': 'retriever'}, {'id': 3417, 'synset': 'flat-coated_retriever.n.01', 'name': 'flat-coated_retriever'}, {'id': 3418, 'synset': 'curly-coated_retriever.n.01', 'name': 'curly-coated_retriever'}, {'id': 3419, 'synset': 'golden_retriever.n.01', 'name': 'golden_retriever'}, {'id': 3420, 'synset': 'labrador_retriever.n.01', 'name': 'Labrador_retriever'}, {'id': 3421, 'synset': 'chesapeake_bay_retriever.n.01', 'name': 'Chesapeake_Bay_retriever'}, {'id': 3422, 'synset': 'pointer.n.04', 'name': 'pointer'}, {'id': 3423, 'synset': 'german_short-haired_pointer.n.01', 'name': 'German_short-haired_pointer'}, {'id': 3424, 'synset': 'setter.n.02', 'name': 'setter'}, {'id': 3425, 'synset': 'vizsla.n.01', 'name': 'vizsla'}, {'id': 3426, 'synset': 'english_setter.n.01', 'name': 'English_setter'}, {'id': 3427, 'synset': 'irish_setter.n.01', 'name': 'Irish_setter'}, {'id': 3428, 'synset': 'gordon_setter.n.01', 'name': 'Gordon_setter'}, {'id': 3429, 'synset': 'spaniel.n.01', 'name': 'spaniel'}, {'id': 3430, 'synset': 'brittany_spaniel.n.01', 'name': 'Brittany_spaniel'}, {'id': 3431, 'synset': 'clumber.n.01', 'name': 'clumber'}, {'id': 3432, 'synset': 'field_spaniel.n.01', 'name': 'field_spaniel'}, {'id': 3433, 'synset': 'springer_spaniel.n.01', 'name': 'springer_spaniel'}, {'id': 3434, 'synset': 'english_springer.n.01', 'name': 'English_springer'}, {'id': 3435, 'synset': 'welsh_springer_spaniel.n.01', 'name': 'Welsh_springer_spaniel'}, {'id': 3436, 'synset': 'cocker_spaniel.n.01', 'name': 'cocker_spaniel'}, {'id': 3437, 'synset': 'sussex_spaniel.n.01', 'name': 'Sussex_spaniel'}, {'id': 3438, 'synset': 'water_spaniel.n.01', 'name': 'water_spaniel'}, {'id': 3439, 'synset': 'american_water_spaniel.n.01', 'name': 'American_water_spaniel'}, {'id': 3440, 'synset': 'irish_water_spaniel.n.01', 'name': 'Irish_water_spaniel'}, {'id': 3441, 'synset': 'griffon.n.03', 'name': 'griffon'}, {'id': 3442, 'synset': 'working_dog.n.01', 'name': 'working_dog'}, {'id': 3443, 'synset': 'watchdog.n.02', 'name': 'watchdog'}, {'id': 3444, 'synset': 'kuvasz.n.01', 'name': 'kuvasz'}, {'id': 3445, 'synset': 'attack_dog.n.01', 'name': 'attack_dog'}, {'id': 3446, 'synset': 'housedog.n.01', 'name': 'housedog'}, {'id': 3447, 'synset': 'schipperke.n.01', 'name': 'schipperke'}, {'id': 3448, 'synset': 'belgian_sheepdog.n.01', 'name': 'Belgian_sheepdog'}, {'id': 3449, 'synset': 'groenendael.n.01', 'name': 'groenendael'}, {'id': 3450, 'synset': 'malinois.n.01', 'name': 'malinois'}, {'id': 3451, 'synset': 'briard.n.01', 'name': 'briard'}, {'id': 3452, 'synset': 'kelpie.n.02', 'name': 'kelpie'}, {'id': 3453, 'synset': 'komondor.n.01', 'name': 'komondor'}, {'id': 3454, 'synset': 'old_english_sheepdog.n.01', 'name': 'Old_English_sheepdog'}, {'id': 3455, 'synset': 'shetland_sheepdog.n.01', 'name': 'Shetland_sheepdog'}, {'id': 3456, 'synset': 'collie.n.01', 'name': 'collie'}, {'id': 3457, 'synset': 'border_collie.n.01', 'name': 'Border_collie'}, {'id': 3458, 'synset': 'bouvier_des_flandres.n.01', 'name': 'Bouvier_des_Flandres'}, {'id': 3459, 'synset': 'rottweiler.n.01', 'name': 'Rottweiler'}, {'id': 3460, 'synset': 'german_shepherd.n.01', 'name': 'German_shepherd'}, {'id': 3461, 'synset': 'police_dog.n.01', 'name': 'police_dog'}, {'id': 3462, 'synset': 'pinscher.n.01', 'name': 'pinscher'}, {'id': 3463, 'synset': 'doberman.n.01', 'name': 'Doberman'}, {'id': 3464, 'synset': 'miniature_pinscher.n.01', 'name': 'miniature_pinscher'}, {'id': 3465, 'synset': 'sennenhunde.n.01', 'name': 'Sennenhunde'}, {'id': 3466, 'synset': 'greater_swiss_mountain_dog.n.01', 'name': 'Greater_Swiss_Mountain_dog'}, {'id': 3467, 'synset': 'bernese_mountain_dog.n.01', 'name': 'Bernese_mountain_dog'}, {'id': 3468, 'synset': 'appenzeller.n.01', 'name': 'Appenzeller'}, {'id': 3469, 'synset': 'entlebucher.n.01', 'name': 'EntleBucher'}, {'id': 3470, 'synset': 'boxer.n.04', 'name': 'boxer'}, {'id': 3471, 'synset': 'mastiff.n.01', 'name': 'mastiff'}, {'id': 3472, 'synset': 'bull_mastiff.n.01', 'name': 'bull_mastiff'}, {'id': 3473, 'synset': 'tibetan_mastiff.n.01', 'name': 'Tibetan_mastiff'}, {'id': 3474, 'synset': 'french_bulldog.n.01', 'name': 'French_bulldog'}, {'id': 3475, 'synset': 'great_dane.n.01', 'name': 'Great_Dane'}, {'id': 3476, 'synset': 'guide_dog.n.01', 'name': 'guide_dog'}, {'id': 3477, 'synset': 'seeing_eye_dog.n.01', 'name': 'Seeing_Eye_dog'}, {'id': 3478, 'synset': 'hearing_dog.n.01', 'name': 'hearing_dog'}, {'id': 3479, 'synset': 'saint_bernard.n.01', 'name': 'Saint_Bernard'}, {'id': 3480, 'synset': 'seizure-alert_dog.n.01', 'name': 'seizure-alert_dog'}, {'id': 3481, 'synset': 'sled_dog.n.01', 'name': 'sled_dog'}, {'id': 3482, 'synset': 'eskimo_dog.n.01', 'name': 'Eskimo_dog'}, {'id': 3483, 'synset': 'malamute.n.01', 'name': 'malamute'}, {'id': 3484, 'synset': 'siberian_husky.n.01', 'name': 'Siberian_husky'}, {'id': 3485, 'synset': 'liver-spotted_dalmatian.n.01', 'name': 'liver-spotted_dalmatian'}, {'id': 3486, 'synset': 'affenpinscher.n.01', 'name': 'affenpinscher'}, {'id': 3487, 'synset': 'basenji.n.01', 'name': 'basenji'}, {'id': 3488, 'synset': 'leonberg.n.01', 'name': 'Leonberg'}, {'id': 3489, 'synset': 'newfoundland.n.01', 'name': 'Newfoundland'}, {'id': 3490, 'synset': 'great_pyrenees.n.01', 'name': 'Great_Pyrenees'}, {'id': 3491, 'synset': 'spitz.n.01', 'name': 'spitz'}, {'id': 3492, 'synset': 'samoyed.n.03', 'name': 'Samoyed'}, {'id': 3493, 'synset': 'pomeranian.n.01', 'name': 'Pomeranian'}, {'id': 3494, 'synset': 'chow.n.03', 'name': 'chow'}, {'id': 3495, 'synset': 'keeshond.n.01', 'name': 'keeshond'}, {'id': 3496, 'synset': 'griffon.n.02', 'name': 'griffon'}, {'id': 3497, 'synset': 'brabancon_griffon.n.01', 'name': 'Brabancon_griffon'}, {'id': 3498, 'synset': 'corgi.n.01', 'name': 'corgi'}, {'id': 3499, 'synset': 'pembroke.n.01', 'name': 'Pembroke'}, {'id': 3500, 'synset': 'cardigan.n.02', 'name': 'Cardigan'}, {'id': 3501, 'synset': 'poodle.n.01', 'name': 'poodle'}, {'id': 3502, 'synset': 'toy_poodle.n.01', 'name': 'toy_poodle'}, {'id': 3503, 'synset': 'miniature_poodle.n.01', 'name': 'miniature_poodle'}, {'id': 3504, 'synset': 'standard_poodle.n.01', 'name': 'standard_poodle'}, {'id': 3505, 'synset': 'large_poodle.n.01', 'name': 'large_poodle'}, {'id': 3506, 'synset': 'mexican_hairless.n.01', 'name': 'Mexican_hairless'}, {'id': 3507, 'synset': 'timber_wolf.n.01', 'name': 'timber_wolf'}, {'id': 3508, 'synset': 'white_wolf.n.01', 'name': 'white_wolf'}, {'id': 3509, 'synset': 'red_wolf.n.01', 'name': 'red_wolf'}, {'id': 3510, 'synset': 'coyote.n.01', 'name': 'coyote'}, {'id': 3511, 'synset': 'coydog.n.01', 'name': 'coydog'}, {'id': 3512, 'synset': 'jackal.n.01', 'name': 'jackal'}, {'id': 3513, 'synset': 'wild_dog.n.01', 'name': 'wild_dog'}, {'id': 3514, 'synset': 'dingo.n.01', 'name': 'dingo'}, {'id': 3515, 'synset': 'dhole.n.01', 'name': 'dhole'}, {'id': 3516, 'synset': 'crab-eating_dog.n.01', 'name': 'crab-eating_dog'}, {'id': 3517, 'synset': 'raccoon_dog.n.01', 'name': 'raccoon_dog'}, {'id': 3518, 'synset': 'african_hunting_dog.n.01', 'name': 'African_hunting_dog'}, {'id': 3519, 'synset': 'hyena.n.01', 'name': 'hyena'}, {'id': 3520, 'synset': 'striped_hyena.n.01', 'name': 'striped_hyena'}, {'id': 3521, 'synset': 'brown_hyena.n.01', 'name': 'brown_hyena'}, {'id': 3522, 'synset': 'spotted_hyena.n.01', 'name': 'spotted_hyena'}, {'id': 3523, 'synset': 'aardwolf.n.01', 'name': 'aardwolf'}, {'id': 3524, 'synset': 'fox.n.01', 'name': 'fox'}, {'id': 3525, 'synset': 'vixen.n.02', 'name': 'vixen'}, {'id': 3526, 'synset': 'reynard.n.01', 'name': 'Reynard'}, {'id': 3527, 'synset': 'red_fox.n.03', 'name': 'red_fox'}, {'id': 3528, 'synset': 'black_fox.n.01', 'name': 'black_fox'}, {'id': 3529, 'synset': 'silver_fox.n.01', 'name': 'silver_fox'}, {'id': 3530, 'synset': 'red_fox.n.02', 'name': 'red_fox'}, {'id': 3531, 'synset': 'kit_fox.n.02', 'name': 'kit_fox'}, {'id': 3532, 'synset': 'kit_fox.n.01', 'name': 'kit_fox'}, {'id': 3533, 'synset': 'arctic_fox.n.01', 'name': 'Arctic_fox'}, {'id': 3534, 'synset': 'blue_fox.n.01', 'name': 'blue_fox'}, {'id': 3535, 'synset': 'grey_fox.n.01', 'name': 'grey_fox'}, {'id': 3536, 'synset': 'feline.n.01', 'name': 'feline'}, {'id': 3537, 'synset': 'domestic_cat.n.01', 'name': 'domestic_cat'}, {'id': 3538, 'synset': 'kitty.n.04', 'name': 'kitty'}, {'id': 3539, 'synset': 'mouser.n.01', 'name': 'mouser'}, {'id': 3540, 'synset': 'alley_cat.n.01', 'name': 'alley_cat'}, {'id': 3541, 'synset': 'stray.n.01', 'name': 'stray'}, {'id': 3542, 'synset': 'tom.n.02', 'name': 'tom'}, {'id': 3543, 'synset': 'gib.n.02', 'name': 'gib'}, {'id': 3544, 'synset': 'tabby.n.02', 'name': 'tabby'}, {'id': 3545, 'synset': 'tabby.n.01', 'name': 'tabby'}, {'id': 3546, 'synset': 'tiger_cat.n.02', 'name': 'tiger_cat'}, {'id': 3547, 'synset': 'tortoiseshell.n.03', 'name': 'tortoiseshell'}, {'id': 3548, 'synset': 'persian_cat.n.01', 'name': 'Persian_cat'}, {'id': 3549, 'synset': 'angora.n.04', 'name': 'Angora'}, {'id': 3550, 'synset': 'siamese_cat.n.01', 'name': 'Siamese_cat'}, {'id': 3551, 'synset': 'blue_point_siamese.n.01', 'name': 'blue_point_Siamese'}, {'id': 3552, 'synset': 'burmese_cat.n.01', 'name': 'Burmese_cat'}, {'id': 3553, 'synset': 'egyptian_cat.n.01', 'name': 'Egyptian_cat'}, {'id': 3554, 'synset': 'maltese.n.03', 'name': 'Maltese'}, {'id': 3555, 'synset': 'abyssinian.n.01', 'name': 'Abyssinian'}, {'id': 3556, 'synset': 'manx.n.02', 'name': 'Manx'}, {'id': 3557, 'synset': 'wildcat.n.03', 'name': 'wildcat'}, {'id': 3558, 'synset': 'sand_cat.n.01', 'name': 'sand_cat'}, {'id': 3559, 'synset': 'european_wildcat.n.01', 'name': 'European_wildcat'}, {'id': 3560, 'synset': 'ocelot.n.01', 'name': 'ocelot'}, {'id': 3561, 'synset': 'jaguarundi.n.01', 'name': 'jaguarundi'}, {'id': 3562, 'synset': 'kaffir_cat.n.01', 'name': 'kaffir_cat'}, {'id': 3563, 'synset': 'jungle_cat.n.01', 'name': 'jungle_cat'}, {'id': 3564, 'synset': 'serval.n.01', 'name': 'serval'}, {'id': 3565, 'synset': 'leopard_cat.n.01', 'name': 'leopard_cat'}, {'id': 3566, 'synset': 'margay.n.01', 'name': 'margay'}, {'id': 3567, 'synset': 'manul.n.01', 'name': 'manul'}, {'id': 3568, 'synset': 'lynx.n.02', 'name': 'lynx'}, {'id': 3569, 'synset': 'common_lynx.n.01', 'name': 'common_lynx'}, {'id': 3570, 'synset': 'canada_lynx.n.01', 'name': 'Canada_lynx'}, {'id': 3571, 'synset': 'bobcat.n.01', 'name': 'bobcat'}, {'id': 3572, 'synset': 'spotted_lynx.n.01', 'name': 'spotted_lynx'}, {'id': 3573, 'synset': 'caracal.n.01', 'name': 'caracal'}, {'id': 3574, 'synset': 'big_cat.n.01', 'name': 'big_cat'}, {'id': 3575, 'synset': 'leopard.n.02', 'name': 'leopard'}, {'id': 3576, 'synset': 'leopardess.n.01', 'name': 'leopardess'}, {'id': 3577, 'synset': 'panther.n.02', 'name': 'panther'}, {'id': 3578, 'synset': 'snow_leopard.n.01', 'name': 'snow_leopard'}, {'id': 3579, 'synset': 'jaguar.n.01', 'name': 'jaguar'}, {'id': 3580, 'synset': 'lioness.n.01', 'name': 'lioness'}, {'id': 3581, 'synset': 'lionet.n.01', 'name': 'lionet'}, {'id': 3582, 'synset': 'bengal_tiger.n.01', 'name': 'Bengal_tiger'}, {'id': 3583, 'synset': 'tigress.n.01', 'name': 'tigress'}, {'id': 3584, 'synset': 'liger.n.01', 'name': 'liger'}, {'id': 3585, 'synset': 'tiglon.n.01', 'name': 'tiglon'}, {'id': 3586, 'synset': 'cheetah.n.01', 'name': 'cheetah'}, {'id': 3587, 'synset': 'saber-toothed_tiger.n.01', 'name': 'saber-toothed_tiger'}, {'id': 3588, 'synset': 'smiledon_californicus.n.01', 'name': 'Smiledon_californicus'}, {'id': 3589, 'synset': 'brown_bear.n.01', 'name': 'brown_bear'}, {'id': 3590, 'synset': 'bruin.n.01', 'name': 'bruin'}, {'id': 3591, 'synset': 'syrian_bear.n.01', 'name': 'Syrian_bear'}, {'id': 3592, 'synset': 'alaskan_brown_bear.n.01', 'name': 'Alaskan_brown_bear'}, {'id': 3593, 'synset': 'american_black_bear.n.01', 'name': 'American_black_bear'}, {'id': 3594, 'synset': 'cinnamon_bear.n.01', 'name': 'cinnamon_bear'}, {'id': 3595, 'synset': 'asiatic_black_bear.n.01', 'name': 'Asiatic_black_bear'}, {'id': 3596, 'synset': 'sloth_bear.n.01', 'name': 'sloth_bear'}, {'id': 3597, 'synset': 'viverrine.n.01', 'name': 'viverrine'}, {'id': 3598, 'synset': 'civet.n.01', 'name': 'civet'}, {'id': 3599, 'synset': 'large_civet.n.01', 'name': 'large_civet'}, {'id': 3600, 'synset': 'small_civet.n.01', 'name': 'small_civet'}, {'id': 3601, 'synset': 'binturong.n.01', 'name': 'binturong'}, {'id': 3602, 'synset': 'cryptoprocta.n.01', 'name': 'Cryptoprocta'}, {'id': 3603, 'synset': 'fossa.n.03', 'name': 'fossa'}, {'id': 3604, 'synset': 'fanaloka.n.01', 'name': 'fanaloka'}, {'id': 3605, 'synset': 'genet.n.03', 'name': 'genet'}, {'id': 3606, 'synset': 'banded_palm_civet.n.01', 'name': 'banded_palm_civet'}, {'id': 3607, 'synset': 'mongoose.n.01', 'name': 'mongoose'}, {'id': 3608, 'synset': 'indian_mongoose.n.01', 'name': 'Indian_mongoose'}, {'id': 3609, 'synset': 'ichneumon.n.01', 'name': 'ichneumon'}, {'id': 3610, 'synset': 'palm_cat.n.01', 'name': 'palm_cat'}, {'id': 3611, 'synset': 'meerkat.n.01', 'name': 'meerkat'}, {'id': 3612, 'synset': 'slender-tailed_meerkat.n.01', 'name': 'slender-tailed_meerkat'}, {'id': 3613, 'synset': 'suricate.n.01', 'name': 'suricate'}, {'id': 3614, 'synset': 'fruit_bat.n.01', 'name': 'fruit_bat'}, {'id': 3615, 'synset': 'flying_fox.n.01', 'name': 'flying_fox'}, {'id': 3616, 'synset': 'pteropus_capestratus.n.01', 'name': 'Pteropus_capestratus'}, {'id': 3617, 'synset': 'pteropus_hypomelanus.n.01', 'name': 'Pteropus_hypomelanus'}, {'id': 3618, 'synset': 'harpy.n.03', 'name': 'harpy'}, {'id': 3619, 'synset': 'cynopterus_sphinx.n.01', 'name': 'Cynopterus_sphinx'}, {'id': 3620, 'synset': 'carnivorous_bat.n.01', 'name': 'carnivorous_bat'}, {'id': 3621, 'synset': 'mouse-eared_bat.n.01', 'name': 'mouse-eared_bat'}, {'id': 3622, 'synset': 'leafnose_bat.n.01', 'name': 'leafnose_bat'}, {'id': 3623, 'synset': 'macrotus.n.01', 'name': 'macrotus'}, {'id': 3624, 'synset': 'spearnose_bat.n.01', 'name': 'spearnose_bat'}, {'id': 3625, 'synset': 'phyllostomus_hastatus.n.01', 'name': 'Phyllostomus_hastatus'}, {'id': 3626, 'synset': 'hognose_bat.n.01', 'name': 'hognose_bat'}, {'id': 3627, 'synset': 'horseshoe_bat.n.02', 'name': 'horseshoe_bat'}, {'id': 3628, 'synset': 'horseshoe_bat.n.01', 'name': 'horseshoe_bat'}, {'id': 3629, 'synset': 'orange_bat.n.01', 'name': 'orange_bat'}, {'id': 3630, 'synset': 'false_vampire.n.01', 'name': 'false_vampire'}, {'id': 3631, 'synset': 'big-eared_bat.n.01', 'name': 'big-eared_bat'}, {'id': 3632, 'synset': 'vespertilian_bat.n.01', 'name': 'vespertilian_bat'}, {'id': 3633, 'synset': 'frosted_bat.n.01', 'name': 'frosted_bat'}, {'id': 3634, 'synset': 'red_bat.n.01', 'name': 'red_bat'}, {'id': 3635, 'synset': 'brown_bat.n.01', 'name': 'brown_bat'}, {'id': 3636, 'synset': 'little_brown_bat.n.01', 'name': 'little_brown_bat'}, {'id': 3637, 'synset': 'cave_myotis.n.01', 'name': 'cave_myotis'}, {'id': 3638, 'synset': 'big_brown_bat.n.01', 'name': 'big_brown_bat'}, {'id': 3639, 'synset': 'serotine.n.01', 'name': 'serotine'}, {'id': 3640, 'synset': 'pallid_bat.n.01', 'name': 'pallid_bat'}, {'id': 3641, 'synset': 'pipistrelle.n.01', 'name': 'pipistrelle'}, {'id': 3642, 'synset': 'eastern_pipistrel.n.01', 'name': 'eastern_pipistrel'}, {'id': 3643, 'synset': 'jackass_bat.n.01', 'name': 'jackass_bat'}, {'id': 3644, 'synset': 'long-eared_bat.n.01', 'name': 'long-eared_bat'}, {'id': 3645, 'synset': 'western_big-eared_bat.n.01', 'name': 'western_big-eared_bat'}, {'id': 3646, 'synset': 'freetail.n.01', 'name': 'freetail'}, {'id': 3647, 'synset': 'guano_bat.n.01', 'name': 'guano_bat'}, {'id': 3648, 'synset': 'pocketed_bat.n.01', 'name': 'pocketed_bat'}, {'id': 3649, 'synset': 'mastiff_bat.n.01', 'name': 'mastiff_bat'}, {'id': 3650, 'synset': 'vampire_bat.n.01', 'name': 'vampire_bat'}, {'id': 3651, 'synset': 'desmodus_rotundus.n.01', 'name': 'Desmodus_rotundus'}, {'id': 3652, 'synset': 'hairy-legged_vampire_bat.n.01', 'name': 'hairy-legged_vampire_bat'}, {'id': 3653, 'synset': 'predator.n.02', 'name': 'predator'}, {'id': 3654, 'synset': 'prey.n.02', 'name': 'prey'}, {'id': 3655, 'synset': 'game.n.04', 'name': 'game'}, {'id': 3656, 'synset': 'big_game.n.01', 'name': 'big_game'}, {'id': 3657, 'synset': 'game_bird.n.01', 'name': 'game_bird'}, {'id': 3658, 'synset': 'fossorial_mammal.n.01', 'name': 'fossorial_mammal'}, {'id': 3659, 'synset': 'tetrapod.n.01', 'name': 'tetrapod'}, {'id': 3660, 'synset': 'quadruped.n.01', 'name': 'quadruped'}, {'id': 3661, 'synset': 'hexapod.n.01', 'name': 'hexapod'}, {'id': 3662, 'synset': 'biped.n.01', 'name': 'biped'}, {'id': 3663, 'synset': 'insect.n.01', 'name': 'insect'}, {'id': 3664, 'synset': 'social_insect.n.01', 'name': 'social_insect'}, {'id': 3665, 'synset': 'holometabola.n.01', 'name': 'holometabola'}, {'id': 3666, 'synset': 'defoliator.n.01', 'name': 'defoliator'}, {'id': 3667, 'synset': 'pollinator.n.01', 'name': 'pollinator'}, {'id': 3668, 'synset': 'gallfly.n.03', 'name': 'gallfly'}, {'id': 3669, 'synset': 'scorpion_fly.n.01', 'name': 'scorpion_fly'}, {'id': 3670, 'synset': 'hanging_fly.n.01', 'name': 'hanging_fly'}, {'id': 3671, 'synset': 'collembolan.n.01', 'name': 'collembolan'}, {'id': 3672, 'synset': 'tiger_beetle.n.01', 'name': 'tiger_beetle'}, {'id': 3673, 'synset': 'two-spotted_ladybug.n.01', 'name': 'two-spotted_ladybug'}, {'id': 3674, 'synset': 'mexican_bean_beetle.n.01', 'name': 'Mexican_bean_beetle'}, {'id': 3675, 'synset': 'hippodamia_convergens.n.01', 'name': 'Hippodamia_convergens'}, {'id': 3676, 'synset': 'vedalia.n.01', 'name': 'vedalia'}, {'id': 3677, 'synset': 'ground_beetle.n.01', 'name': 'ground_beetle'}, {'id': 3678, 'synset': 'bombardier_beetle.n.01', 'name': 'bombardier_beetle'}, {'id': 3679, 'synset': 'calosoma.n.01', 'name': 'calosoma'}, {'id': 3680, 'synset': 'searcher.n.03', 'name': 'searcher'}, {'id': 3681, 'synset': 'firefly.n.02', 'name': 'firefly'}, {'id': 3682, 'synset': 'glowworm.n.01', 'name': 'glowworm'}, {'id': 3683, 'synset': 'long-horned_beetle.n.01', 'name': 'long-horned_beetle'}, {'id': 3684, 'synset': 'sawyer.n.02', 'name': 'sawyer'}, {'id': 3685, 'synset': 'pine_sawyer.n.01', 'name': 'pine_sawyer'}, {'id': 3686, 'synset': 'leaf_beetle.n.01', 'name': 'leaf_beetle'}, {'id': 3687, 'synset': 'flea_beetle.n.01', 'name': 'flea_beetle'}, {'id': 3688, 'synset': 'colorado_potato_beetle.n.01', 'name': 'Colorado_potato_beetle'}, {'id': 3689, 'synset': 'carpet_beetle.n.01', 'name': 'carpet_beetle'}, {'id': 3690, 'synset': 'buffalo_carpet_beetle.n.01', 'name': 'buffalo_carpet_beetle'}, {'id': 3691, 'synset': 'black_carpet_beetle.n.01', 'name': 'black_carpet_beetle'}, {'id': 3692, 'synset': 'clerid_beetle.n.01', 'name': 'clerid_beetle'}, {'id': 3693, 'synset': 'bee_beetle.n.01', 'name': 'bee_beetle'}, {'id': 3694, 'synset': 'lamellicorn_beetle.n.01', 'name': 'lamellicorn_beetle'}, {'id': 3695, 'synset': 'scarabaeid_beetle.n.01', 'name': 'scarabaeid_beetle'}, {'id': 3696, 'synset': 'dung_beetle.n.01', 'name': 'dung_beetle'}, {'id': 3697, 'synset': 'scarab.n.01', 'name': 'scarab'}, {'id': 3698, 'synset': 'tumblebug.n.01', 'name': 'tumblebug'}, {'id': 3699, 'synset': 'dorbeetle.n.01', 'name': 'dorbeetle'}, {'id': 3700, 'synset': 'june_beetle.n.01', 'name': 'June_beetle'}, {'id': 3701, 'synset': 'green_june_beetle.n.01', 'name': 'green_June_beetle'}, {'id': 3702, 'synset': 'japanese_beetle.n.01', 'name': 'Japanese_beetle'}, {'id': 3703, 'synset': 'oriental_beetle.n.01', 'name': 'Oriental_beetle'}, {'id': 3704, 'synset': 'rhinoceros_beetle.n.01', 'name': 'rhinoceros_beetle'}, {'id': 3705, 'synset': 'melolonthid_beetle.n.01', 'name': 'melolonthid_beetle'}, {'id': 3706, 'synset': 'cockchafer.n.01', 'name': 'cockchafer'}, {'id': 3707, 'synset': 'rose_chafer.n.02', 'name': 'rose_chafer'}, {'id': 3708, 'synset': 'rose_chafer.n.01', 'name': 'rose_chafer'}, {'id': 3709, 'synset': 'stag_beetle.n.01', 'name': 'stag_beetle'}, {'id': 3710, 'synset': 'elaterid_beetle.n.01', 'name': 'elaterid_beetle'}, {'id': 3711, 'synset': 'click_beetle.n.01', 'name': 'click_beetle'}, {'id': 3712, 'synset': 'firefly.n.01', 'name': 'firefly'}, {'id': 3713, 'synset': 'wireworm.n.01', 'name': 'wireworm'}, {'id': 3714, 'synset': 'water_beetle.n.01', 'name': 'water_beetle'}, {'id': 3715, 'synset': 'whirligig_beetle.n.01', 'name': 'whirligig_beetle'}, {'id': 3716, 'synset': 'deathwatch_beetle.n.01', 'name': 'deathwatch_beetle'}, {'id': 3717, 'synset': 'weevil.n.01', 'name': 'weevil'}, {'id': 3718, 'synset': 'snout_beetle.n.01', 'name': 'snout_beetle'}, {'id': 3719, 'synset': 'boll_weevil.n.01', 'name': 'boll_weevil'}, {'id': 3720, 'synset': 'blister_beetle.n.01', 'name': 'blister_beetle'}, {'id': 3721, 'synset': 'oil_beetle.n.01', 'name': 'oil_beetle'}, {'id': 3722, 'synset': 'spanish_fly.n.01', 'name': 'Spanish_fly'}, {'id': 3723, 'synset': 'dutch-elm_beetle.n.01', 'name': 'Dutch-elm_beetle'}, {'id': 3724, 'synset': 'bark_beetle.n.01', 'name': 'bark_beetle'}, {'id': 3725, 'synset': 'spruce_bark_beetle.n.01', 'name': 'spruce_bark_beetle'}, {'id': 3726, 'synset': 'rove_beetle.n.01', 'name': 'rove_beetle'}, {'id': 3727, 'synset': 'darkling_beetle.n.01', 'name': 'darkling_beetle'}, {'id': 3728, 'synset': 'mealworm.n.01', 'name': 'mealworm'}, {'id': 3729, 'synset': 'flour_beetle.n.01', 'name': 'flour_beetle'}, {'id': 3730, 'synset': 'seed_beetle.n.01', 'name': 'seed_beetle'}, {'id': 3731, 'synset': 'pea_weevil.n.01', 'name': 'pea_weevil'}, {'id': 3732, 'synset': 'bean_weevil.n.01', 'name': 'bean_weevil'}, {'id': 3733, 'synset': 'rice_weevil.n.01', 'name': 'rice_weevil'}, {'id': 3734, 'synset': 'asian_longhorned_beetle.n.01', 'name': 'Asian_longhorned_beetle'}, {'id': 3735, 'synset': 'web_spinner.n.01', 'name': 'web_spinner'}, {'id': 3736, 'synset': 'louse.n.01', 'name': 'louse'}, {'id': 3737, 'synset': 'common_louse.n.01', 'name': 'common_louse'}, {'id': 3738, 'synset': 'head_louse.n.01', 'name': 'head_louse'}, {'id': 3739, 'synset': 'body_louse.n.01', 'name': 'body_louse'}, {'id': 3740, 'synset': 'crab_louse.n.01', 'name': 'crab_louse'}, {'id': 3741, 'synset': 'bird_louse.n.01', 'name': 'bird_louse'}, {'id': 3742, 'synset': 'flea.n.01', 'name': 'flea'}, {'id': 3743, 'synset': 'pulex_irritans.n.01', 'name': 'Pulex_irritans'}, {'id': 3744, 'synset': 'dog_flea.n.01', 'name': 'dog_flea'}, {'id': 3745, 'synset': 'cat_flea.n.01', 'name': 'cat_flea'}, {'id': 3746, 'synset': 'chigoe.n.01', 'name': 'chigoe'}, {'id': 3747, 'synset': 'sticktight.n.02', 'name': 'sticktight'}, {'id': 3748, 'synset': 'dipterous_insect.n.01', 'name': 'dipterous_insect'}, {'id': 3749, 'synset': 'gall_midge.n.01', 'name': 'gall_midge'}, {'id': 3750, 'synset': 'hessian_fly.n.01', 'name': 'Hessian_fly'}, {'id': 3751, 'synset': 'fly.n.01', 'name': 'fly'}, {'id': 3752, 'synset': 'housefly.n.01', 'name': 'housefly'}, {'id': 3753, 'synset': 'tsetse_fly.n.01', 'name': 'tsetse_fly'}, {'id': 3754, 'synset': 'blowfly.n.01', 'name': 'blowfly'}, {'id': 3755, 'synset': 'bluebottle.n.02', 'name': 'bluebottle'}, {'id': 3756, 'synset': 'greenbottle.n.01', 'name': 'greenbottle'}, {'id': 3757, 'synset': 'flesh_fly.n.01', 'name': 'flesh_fly'}, {'id': 3758, 'synset': 'tachina_fly.n.01', 'name': 'tachina_fly'}, {'id': 3759, 'synset': 'gadfly.n.02', 'name': 'gadfly'}, {'id': 3760, 'synset': 'botfly.n.01', 'name': 'botfly'}, {'id': 3761, 'synset': 'human_botfly.n.01', 'name': 'human_botfly'}, {'id': 3762, 'synset': 'sheep_botfly.n.01', 'name': 'sheep_botfly'}, {'id': 3763, 'synset': 'warble_fly.n.01', 'name': 'warble_fly'}, {'id': 3764, 'synset': 'horsefly.n.02', 'name': 'horsefly'}, {'id': 3765, 'synset': 'bee_fly.n.01', 'name': 'bee_fly'}, {'id': 3766, 'synset': 'robber_fly.n.01', 'name': 'robber_fly'}, {'id': 3767, 'synset': 'fruit_fly.n.01', 'name': 'fruit_fly'}, {'id': 3768, 'synset': 'apple_maggot.n.01', 'name': 'apple_maggot'}, {'id': 3769, 'synset': 'mediterranean_fruit_fly.n.01', 'name': 'Mediterranean_fruit_fly'}, {'id': 3770, 'synset': 'drosophila.n.01', 'name': 'drosophila'}, {'id': 3771, 'synset': 'vinegar_fly.n.01', 'name': 'vinegar_fly'}, {'id': 3772, 'synset': 'leaf_miner.n.01', 'name': 'leaf_miner'}, {'id': 3773, 'synset': 'louse_fly.n.01', 'name': 'louse_fly'}, {'id': 3774, 'synset': 'horse_tick.n.01', 'name': 'horse_tick'}, {'id': 3775, 'synset': 'sheep_ked.n.01', 'name': 'sheep_ked'}, {'id': 3776, 'synset': 'horn_fly.n.01', 'name': 'horn_fly'}, {'id': 3777, 'synset': 'mosquito.n.01', 'name': 'mosquito'}, {'id': 3778, 'synset': 'wiggler.n.02', 'name': 'wiggler'}, {'id': 3779, 'synset': 'gnat.n.02', 'name': 'gnat'}, {'id': 3780, 'synset': 'yellow-fever_mosquito.n.01', 'name': 'yellow-fever_mosquito'}, {'id': 3781, 'synset': 'asian_tiger_mosquito.n.01', 'name': 'Asian_tiger_mosquito'}, {'id': 3782, 'synset': 'anopheline.n.01', 'name': 'anopheline'}, {'id': 3783, 'synset': 'malarial_mosquito.n.01', 'name': 'malarial_mosquito'}, {'id': 3784, 'synset': 'common_mosquito.n.01', 'name': 'common_mosquito'}, {'id': 3785, 'synset': 'culex_quinquefasciatus.n.01', 'name': 'Culex_quinquefasciatus'}, {'id': 3786, 'synset': 'gnat.n.01', 'name': 'gnat'}, {'id': 3787, 'synset': 'punkie.n.01', 'name': 'punkie'}, {'id': 3788, 'synset': 'midge.n.01', 'name': 'midge'}, {'id': 3789, 'synset': 'fungus_gnat.n.02', 'name': 'fungus_gnat'}, {'id': 3790, 'synset': 'psychodid.n.01', 'name': 'psychodid'}, {'id': 3791, 'synset': 'sand_fly.n.01', 'name': 'sand_fly'}, {'id': 3792, 'synset': 'fungus_gnat.n.01', 'name': 'fungus_gnat'}, {'id': 3793, 'synset': 'armyworm.n.03', 'name': 'armyworm'}, {'id': 3794, 'synset': 'crane_fly.n.01', 'name': 'crane_fly'}, {'id': 3795, 'synset': 'blackfly.n.02', 'name': 'blackfly'}, {'id': 3796, 'synset': 'hymenopterous_insect.n.01', 'name': 'hymenopterous_insect'}, {'id': 3797, 'synset': 'bee.n.01', 'name': 'bee'}, {'id': 3798, 'synset': 'drone.n.01', 'name': 'drone'}, {'id': 3799, 'synset': 'queen_bee.n.01', 'name': 'queen_bee'}, {'id': 3800, 'synset': 'worker.n.03', 'name': 'worker'}, {'id': 3801, 'synset': 'soldier.n.02', 'name': 'soldier'}, {'id': 3802, 'synset': 'worker_bee.n.01', 'name': 'worker_bee'}, {'id': 3803, 'synset': 'honeybee.n.01', 'name': 'honeybee'}, {'id': 3804, 'synset': 'africanized_bee.n.01', 'name': 'Africanized_bee'}, {'id': 3805, 'synset': 'black_bee.n.01', 'name': 'black_bee'}, {'id': 3806, 'synset': 'carniolan_bee.n.01', 'name': 'Carniolan_bee'}, {'id': 3807, 'synset': 'italian_bee.n.01', 'name': 'Italian_bee'}, {'id': 3808, 'synset': 'carpenter_bee.n.01', 'name': 'carpenter_bee'}, {'id': 3809, 'synset': 'bumblebee.n.01', 'name': 'bumblebee'}, {'id': 3810, 'synset': 'cuckoo-bumblebee.n.01', 'name': 'cuckoo-bumblebee'}, {'id': 3811, 'synset': 'andrena.n.01', 'name': 'andrena'}, {'id': 3812, 'synset': 'nomia_melanderi.n.01', 'name': 'Nomia_melanderi'}, {'id': 3813, 'synset': 'leaf-cutting_bee.n.01', 'name': 'leaf-cutting_bee'}, {'id': 3814, 'synset': 'mason_bee.n.01', 'name': 'mason_bee'}, {'id': 3815, 'synset': 'potter_bee.n.01', 'name': 'potter_bee'}, {'id': 3816, 'synset': 'wasp.n.02', 'name': 'wasp'}, {'id': 3817, 'synset': 'vespid.n.01', 'name': 'vespid'}, {'id': 3818, 'synset': 'paper_wasp.n.01', 'name': 'paper_wasp'}, {'id': 3819, 'synset': 'giant_hornet.n.01', 'name': 'giant_hornet'}, {'id': 3820, 'synset': 'common_wasp.n.01', 'name': 'common_wasp'}, {'id': 3821, 'synset': 'bald-faced_hornet.n.01', 'name': 'bald-faced_hornet'}, {'id': 3822, 'synset': 'yellow_jacket.n.02', 'name': 'yellow_jacket'}, {'id': 3823, 'synset': 'polistes_annularis.n.01', 'name': 'Polistes_annularis'}, {'id': 3824, 'synset': 'mason_wasp.n.02', 'name': 'mason_wasp'}, {'id': 3825, 'synset': 'potter_wasp.n.01', 'name': 'potter_wasp'}, {'id': 3826, 'synset': 'mutillidae.n.01', 'name': 'Mutillidae'}, {'id': 3827, 'synset': 'velvet_ant.n.01', 'name': 'velvet_ant'}, {'id': 3828, 'synset': 'sphecoid_wasp.n.01', 'name': 'sphecoid_wasp'}, {'id': 3829, 'synset': 'mason_wasp.n.01', 'name': 'mason_wasp'}, {'id': 3830, 'synset': 'digger_wasp.n.01', 'name': 'digger_wasp'}, {'id': 3831, 'synset': 'cicada_killer.n.01', 'name': 'cicada_killer'}, {'id': 3832, 'synset': 'mud_dauber.n.01', 'name': 'mud_dauber'}, {'id': 3833, 'synset': 'gall_wasp.n.01', 'name': 'gall_wasp'}, {'id': 3834, 'synset': 'chalcid_fly.n.01', 'name': 'chalcid_fly'}, {'id': 3835, 'synset': 'strawworm.n.02', 'name': 'strawworm'}, {'id': 3836, 'synset': 'chalcis_fly.n.01', 'name': 'chalcis_fly'}, {'id': 3837, 'synset': 'ichneumon_fly.n.01', 'name': 'ichneumon_fly'}, {'id': 3838, 'synset': 'sawfly.n.01', 'name': 'sawfly'}, {'id': 3839, 'synset': 'birch_leaf_miner.n.01', 'name': 'birch_leaf_miner'}, {'id': 3840, 'synset': 'ant.n.01', 'name': 'ant'}, {'id': 3841, 'synset': 'pharaoh_ant.n.01', 'name': 'pharaoh_ant'}, {'id': 3842, 'synset': 'little_black_ant.n.01', 'name': 'little_black_ant'}, {'id': 3843, 'synset': 'army_ant.n.01', 'name': 'army_ant'}, {'id': 3844, 'synset': 'carpenter_ant.n.01', 'name': 'carpenter_ant'}, {'id': 3845, 'synset': 'fire_ant.n.01', 'name': 'fire_ant'}, {'id': 3846, 'synset': 'wood_ant.n.01', 'name': 'wood_ant'}, {'id': 3847, 'synset': 'slave_ant.n.01', 'name': 'slave_ant'}, {'id': 3848, 'synset': 'formica_fusca.n.01', 'name': 'Formica_fusca'}, {'id': 3849, 'synset': 'slave-making_ant.n.01', 'name': 'slave-making_ant'}, {'id': 3850, 'synset': 'sanguinary_ant.n.01', 'name': 'sanguinary_ant'}, {'id': 3851, 'synset': 'bulldog_ant.n.01', 'name': 'bulldog_ant'}, {'id': 3852, 'synset': 'amazon_ant.n.01', 'name': 'Amazon_ant'}, {'id': 3853, 'synset': 'termite.n.01', 'name': 'termite'}, {'id': 3854, 'synset': 'dry-wood_termite.n.01', 'name': 'dry-wood_termite'}, {'id': 3855, 'synset': 'reticulitermes_lucifugus.n.01', 'name': 'Reticulitermes_lucifugus'}, {'id': 3856, 'synset': 'mastotermes_darwiniensis.n.01', 'name': 'Mastotermes_darwiniensis'}, {'id': 3857, 'synset': 'mastotermes_electrodominicus.n.01', 'name': 'Mastotermes_electrodominicus'}, {'id': 3858, 'synset': 'powder-post_termite.n.01', 'name': 'powder-post_termite'}, {'id': 3859, 'synset': 'orthopterous_insect.n.01', 'name': 'orthopterous_insect'}, {'id': 3860, 'synset': 'grasshopper.n.01', 'name': 'grasshopper'}, {'id': 3861, 'synset': 'short-horned_grasshopper.n.01', 'name': 'short-horned_grasshopper'}, {'id': 3862, 'synset': 'locust.n.01', 'name': 'locust'}, {'id': 3863, 'synset': 'migratory_locust.n.01', 'name': 'migratory_locust'}, {'id': 3864, 'synset': 'migratory_grasshopper.n.01', 'name': 'migratory_grasshopper'}, {'id': 3865, 'synset': 'long-horned_grasshopper.n.01', 'name': 'long-horned_grasshopper'}, {'id': 3866, 'synset': 'katydid.n.01', 'name': 'katydid'}, {'id': 3867, 'synset': 'mormon_cricket.n.01', 'name': 'mormon_cricket'}, {'id': 3868, 'synset': 'sand_cricket.n.01', 'name': 'sand_cricket'}, {'id': 3869, 'synset': 'cricket.n.01', 'name': 'cricket'}, {'id': 3870, 'synset': 'mole_cricket.n.01', 'name': 'mole_cricket'}, {'id': 3871, 'synset': 'european_house_cricket.n.01', 'name': 'European_house_cricket'}, {'id': 3872, 'synset': 'field_cricket.n.01', 'name': 'field_cricket'}, {'id': 3873, 'synset': 'tree_cricket.n.01', 'name': 'tree_cricket'}, {'id': 3874, 'synset': 'snowy_tree_cricket.n.01', 'name': 'snowy_tree_cricket'}, {'id': 3875, 'synset': 'phasmid.n.01', 'name': 'phasmid'}, {'id': 3876, 'synset': 'walking_stick.n.02', 'name': 'walking_stick'}, {'id': 3877, 'synset': 'diapheromera.n.01', 'name': 'diapheromera'}, {'id': 3878, 'synset': 'walking_leaf.n.02', 'name': 'walking_leaf'}, {'id': 3879, 'synset': 'oriental_cockroach.n.01', 'name': 'oriental_cockroach'}, {'id': 3880, 'synset': 'american_cockroach.n.01', 'name': 'American_cockroach'}, {'id': 3881, 'synset': 'australian_cockroach.n.01', 'name': 'Australian_cockroach'}, {'id': 3882, 'synset': 'german_cockroach.n.01', 'name': 'German_cockroach'}, {'id': 3883, 'synset': 'giant_cockroach.n.01', 'name': 'giant_cockroach'}, {'id': 3884, 'synset': 'mantis.n.01', 'name': 'mantis'}, {'id': 3885, 'synset': 'praying_mantis.n.01', 'name': 'praying_mantis'}, {'id': 3886, 'synset': 'bug.n.01', 'name': 'bug'}, {'id': 3887, 'synset': 'hemipterous_insect.n.01', 'name': 'hemipterous_insect'}, {'id': 3888, 'synset': 'leaf_bug.n.01', 'name': 'leaf_bug'}, {'id': 3889, 'synset': 'mirid_bug.n.01', 'name': 'mirid_bug'}, {'id': 3890, 'synset': 'four-lined_plant_bug.n.01', 'name': 'four-lined_plant_bug'}, {'id': 3891, 'synset': 'lygus_bug.n.01', 'name': 'lygus_bug'}, {'id': 3892, 'synset': 'tarnished_plant_bug.n.01', 'name': 'tarnished_plant_bug'}, {'id': 3893, 'synset': 'lace_bug.n.01', 'name': 'lace_bug'}, {'id': 3894, 'synset': 'lygaeid.n.01', 'name': 'lygaeid'}, {'id': 3895, 'synset': 'chinch_bug.n.01', 'name': 'chinch_bug'}, {'id': 3896, 'synset': 'coreid_bug.n.01', 'name': 'coreid_bug'}, {'id': 3897, 'synset': 'squash_bug.n.01', 'name': 'squash_bug'}, {'id': 3898, 'synset': 'leaf-footed_bug.n.01', 'name': 'leaf-footed_bug'}, {'id': 3899, 'synset': 'bedbug.n.01', 'name': 'bedbug'}, {'id': 3900, 'synset': 'backswimmer.n.01', 'name': 'backswimmer'}, {'id': 3901, 'synset': 'true_bug.n.01', 'name': 'true_bug'}, {'id': 3902, 'synset': 'heteropterous_insect.n.01', 'name': 'heteropterous_insect'}, {'id': 3903, 'synset': 'water_bug.n.01', 'name': 'water_bug'}, {'id': 3904, 'synset': 'giant_water_bug.n.01', 'name': 'giant_water_bug'}, {'id': 3905, 'synset': 'water_scorpion.n.01', 'name': 'water_scorpion'}, {'id': 3906, 'synset': 'water_boatman.n.01', 'name': 'water_boatman'}, {'id': 3907, 'synset': 'water_strider.n.01', 'name': 'water_strider'}, {'id': 3908, 'synset': 'common_pond-skater.n.01', 'name': 'common_pond-skater'}, {'id': 3909, 'synset': 'assassin_bug.n.01', 'name': 'assassin_bug'}, {'id': 3910, 'synset': 'conenose.n.01', 'name': 'conenose'}, {'id': 3911, 'synset': 'wheel_bug.n.01', 'name': 'wheel_bug'}, {'id': 3912, 'synset': 'firebug.n.02', 'name': 'firebug'}, {'id': 3913, 'synset': 'cotton_stainer.n.01', 'name': 'cotton_stainer'}, {'id': 3914, 'synset': 'homopterous_insect.n.01', 'name': 'homopterous_insect'}, {'id': 3915, 'synset': 'whitefly.n.01', 'name': 'whitefly'}, {'id': 3916, 'synset': 'citrus_whitefly.n.01', 'name': 'citrus_whitefly'}, {'id': 3917, 'synset': 'greenhouse_whitefly.n.01', 'name': 'greenhouse_whitefly'}, {'id': 3918, 'synset': 'sweet-potato_whitefly.n.01', 'name': 'sweet-potato_whitefly'}, {'id': 3919, 'synset': 'superbug.n.02', 'name': 'superbug'}, {'id': 3920, 'synset': 'cotton_strain.n.01', 'name': 'cotton_strain'}, {'id': 3921, 'synset': 'coccid_insect.n.01', 'name': 'coccid_insect'}, {'id': 3922, 'synset': 'scale_insect.n.01', 'name': 'scale_insect'}, {'id': 3923, 'synset': 'soft_scale.n.01', 'name': 'soft_scale'}, {'id': 3924, 'synset': 'brown_soft_scale.n.01', 'name': 'brown_soft_scale'}, {'id': 3925, 'synset': 'armored_scale.n.01', 'name': 'armored_scale'}, {'id': 3926, 'synset': 'san_jose_scale.n.01', 'name': 'San_Jose_scale'}, {'id': 3927, 'synset': 'cochineal_insect.n.01', 'name': 'cochineal_insect'}, {'id': 3928, 'synset': 'mealybug.n.01', 'name': 'mealybug'}, {'id': 3929, 'synset': 'citrophilous_mealybug.n.01', 'name': 'citrophilous_mealybug'}, {'id': 3930, 'synset': 'comstock_mealybug.n.01', 'name': 'Comstock_mealybug'}, {'id': 3931, 'synset': 'citrus_mealybug.n.01', 'name': 'citrus_mealybug'}, {'id': 3932, 'synset': 'plant_louse.n.01', 'name': 'plant_louse'}, {'id': 3933, 'synset': 'aphid.n.01', 'name': 'aphid'}, {'id': 3934, 'synset': 'apple_aphid.n.01', 'name': 'apple_aphid'}, {'id': 3935, 'synset': 'blackfly.n.01', 'name': 'blackfly'}, {'id': 3936, 'synset': 'greenfly.n.01', 'name': 'greenfly'}, {'id': 3937, 'synset': 'green_peach_aphid.n.01', 'name': 'green_peach_aphid'}, {'id': 3938, 'synset': 'ant_cow.n.01', 'name': 'ant_cow'}, {'id': 3939, 'synset': 'woolly_aphid.n.01', 'name': 'woolly_aphid'}, {'id': 3940, 'synset': 'woolly_apple_aphid.n.01', 'name': 'woolly_apple_aphid'}, {'id': 3941, 'synset': 'woolly_alder_aphid.n.01', 'name': 'woolly_alder_aphid'}, {'id': 3942, 'synset': 'adelgid.n.01', 'name': 'adelgid'}, {'id': 3943, 'synset': 'balsam_woolly_aphid.n.01', 'name': 'balsam_woolly_aphid'}, {'id': 3944, 'synset': 'spruce_gall_aphid.n.01', 'name': 'spruce_gall_aphid'}, {'id': 3945, 'synset': 'woolly_adelgid.n.01', 'name': 'woolly_adelgid'}, {'id': 3946, 'synset': 'jumping_plant_louse.n.01', 'name': 'jumping_plant_louse'}, {'id': 3947, 'synset': 'cicada.n.01', 'name': 'cicada'}, {'id': 3948, 'synset': 'dog-day_cicada.n.01', 'name': 'dog-day_cicada'}, {'id': 3949, 'synset': 'seventeen-year_locust.n.01', 'name': 'seventeen-year_locust'}, {'id': 3950, 'synset': 'spittle_insect.n.01', 'name': 'spittle_insect'}, {'id': 3951, 'synset': 'froghopper.n.01', 'name': 'froghopper'}, {'id': 3952, 'synset': 'meadow_spittlebug.n.01', 'name': 'meadow_spittlebug'}, {'id': 3953, 'synset': 'pine_spittlebug.n.01', 'name': 'pine_spittlebug'}, {'id': 3954, 'synset': 'saratoga_spittlebug.n.01', 'name': 'Saratoga_spittlebug'}, {'id': 3955, 'synset': 'leafhopper.n.01', 'name': 'leafhopper'}, {'id': 3956, 'synset': 'plant_hopper.n.01', 'name': 'plant_hopper'}, {'id': 3957, 'synset': 'treehopper.n.01', 'name': 'treehopper'}, {'id': 3958, 'synset': 'lantern_fly.n.01', 'name': 'lantern_fly'}, {'id': 3959, 'synset': 'psocopterous_insect.n.01', 'name': 'psocopterous_insect'}, {'id': 3960, 'synset': 'psocid.n.01', 'name': 'psocid'}, {'id': 3961, 'synset': 'bark-louse.n.01', 'name': 'bark-louse'}, {'id': 3962, 'synset': 'booklouse.n.01', 'name': 'booklouse'}, {'id': 3963, 'synset': 'common_booklouse.n.01', 'name': 'common_booklouse'}, {'id': 3964, 'synset': 'ephemerid.n.01', 'name': 'ephemerid'}, {'id': 3965, 'synset': 'mayfly.n.01', 'name': 'mayfly'}, {'id': 3966, 'synset': 'stonefly.n.01', 'name': 'stonefly'}, {'id': 3967, 'synset': 'neuropteron.n.01', 'name': 'neuropteron'}, {'id': 3968, 'synset': 'ant_lion.n.02', 'name': 'ant_lion'}, {'id': 3969, 'synset': 'doodlebug.n.03', 'name': 'doodlebug'}, {'id': 3970, 'synset': 'lacewing.n.01', 'name': 'lacewing'}, {'id': 3971, 'synset': 'aphid_lion.n.01', 'name': 'aphid_lion'}, {'id': 3972, 'synset': 'green_lacewing.n.01', 'name': 'green_lacewing'}, {'id': 3973, 'synset': 'brown_lacewing.n.01', 'name': 'brown_lacewing'}, {'id': 3974, 'synset': 'dobson.n.02', 'name': 'dobson'}, {'id': 3975, 'synset': 'hellgrammiate.n.01', 'name': 'hellgrammiate'}, {'id': 3976, 'synset': 'fish_fly.n.01', 'name': 'fish_fly'}, {'id': 3977, 'synset': 'alderfly.n.01', 'name': 'alderfly'}, {'id': 3978, 'synset': 'snakefly.n.01', 'name': 'snakefly'}, {'id': 3979, 'synset': 'mantispid.n.01', 'name': 'mantispid'}, {'id': 3980, 'synset': 'odonate.n.01', 'name': 'odonate'}, {'id': 3981, 'synset': 'damselfly.n.01', 'name': 'damselfly'}, {'id': 3982, 'synset': 'trichopterous_insect.n.01', 'name': 'trichopterous_insect'}, {'id': 3983, 'synset': 'caddis_fly.n.01', 'name': 'caddis_fly'}, {'id': 3984, 'synset': 'caseworm.n.01', 'name': 'caseworm'}, {'id': 3985, 'synset': 'caddisworm.n.01', 'name': 'caddisworm'}, {'id': 3986, 'synset': 'thysanuran_insect.n.01', 'name': 'thysanuran_insect'}, {'id': 3987, 'synset': 'bristletail.n.01', 'name': 'bristletail'}, {'id': 3988, 'synset': 'silverfish.n.01', 'name': 'silverfish'}, {'id': 3989, 'synset': 'firebrat.n.01', 'name': 'firebrat'}, {'id': 3990, 'synset': 'jumping_bristletail.n.01', 'name': 'jumping_bristletail'}, {'id': 3991, 'synset': 'thysanopter.n.01', 'name': 'thysanopter'}, {'id': 3992, 'synset': 'thrips.n.01', 'name': 'thrips'}, {'id': 3993, 'synset': 'tobacco_thrips.n.01', 'name': 'tobacco_thrips'}, {'id': 3994, 'synset': 'onion_thrips.n.01', 'name': 'onion_thrips'}, {'id': 3995, 'synset': 'earwig.n.01', 'name': 'earwig'}, {'id': 3996, 'synset': 'common_european_earwig.n.01', 'name': 'common_European_earwig'}, {'id': 3997, 'synset': 'lepidopterous_insect.n.01', 'name': 'lepidopterous_insect'}, {'id': 3998, 'synset': 'nymphalid.n.01', 'name': 'nymphalid'}, {'id': 3999, 'synset': 'mourning_cloak.n.01', 'name': 'mourning_cloak'}, {'id': 4000, 'synset': 'tortoiseshell.n.02', 'name': 'tortoiseshell'}, {'id': 4001, 'synset': 'painted_beauty.n.01', 'name': 'painted_beauty'}, {'id': 4002, 'synset': 'admiral.n.02', 'name': 'admiral'}, {'id': 4003, 'synset': 'red_admiral.n.01', 'name': 'red_admiral'}, {'id': 4004, 'synset': 'white_admiral.n.02', 'name': 'white_admiral'}, {'id': 4005, 'synset': 'banded_purple.n.01', 'name': 'banded_purple'}, {'id': 4006, 'synset': 'red-spotted_purple.n.01', 'name': 'red-spotted_purple'}, {'id': 4007, 'synset': 'viceroy.n.02', 'name': 'viceroy'}, {'id': 4008, 'synset': 'anglewing.n.01', 'name': 'anglewing'}, {'id': 4009, 'synset': 'ringlet.n.04', 'name': 'ringlet'}, {'id': 4010, 'synset': 'comma.n.02', 'name': 'comma'}, {'id': 4011, 'synset': 'fritillary.n.02', 'name': 'fritillary'}, {'id': 4012, 'synset': 'silverspot.n.01', 'name': 'silverspot'}, {'id': 4013, 'synset': 'emperor_butterfly.n.01', 'name': 'emperor_butterfly'}, {'id': 4014, 'synset': 'purple_emperor.n.01', 'name': 'purple_emperor'}, {'id': 4015, 'synset': 'peacock.n.01', 'name': 'peacock'}, {'id': 4016, 'synset': 'danaid.n.01', 'name': 'danaid'}, {'id': 4017, 'synset': 'monarch.n.02', 'name': 'monarch'}, {'id': 4018, 'synset': 'pierid.n.01', 'name': 'pierid'}, {'id': 4019, 'synset': 'cabbage_butterfly.n.01', 'name': 'cabbage_butterfly'}, {'id': 4020, 'synset': 'small_white.n.01', 'name': 'small_white'}, {'id': 4021, 'synset': 'large_white.n.01', 'name': 'large_white'}, {'id': 4022, 'synset': 'southern_cabbage_butterfly.n.01', 'name': 'southern_cabbage_butterfly'}, {'id': 4023, 'synset': 'sulphur_butterfly.n.01', 'name': 'sulphur_butterfly'}, {'id': 4024, 'synset': 'lycaenid.n.01', 'name': 'lycaenid'}, {'id': 4025, 'synset': 'blue.n.07', 'name': 'blue'}, {'id': 4026, 'synset': 'copper.n.05', 'name': 'copper'}, {'id': 4027, 'synset': 'american_copper.n.01', 'name': 'American_copper'}, {'id': 4028, 'synset': 'hairstreak.n.01', 'name': 'hairstreak'}, {'id': 4029, 'synset': 'strymon_melinus.n.01', 'name': 'Strymon_melinus'}, {'id': 4030, 'synset': 'moth.n.01', 'name': 'moth'}, {'id': 4031, 'synset': 'moth_miller.n.01', 'name': 'moth_miller'}, {'id': 4032, 'synset': 'tortricid.n.01', 'name': 'tortricid'}, {'id': 4033, 'synset': 'leaf_roller.n.01', 'name': 'leaf_roller'}, {'id': 4034, 'synset': 'tea_tortrix.n.01', 'name': 'tea_tortrix'}, {'id': 4035, 'synset': 'orange_tortrix.n.01', 'name': 'orange_tortrix'}, {'id': 4036, 'synset': 'codling_moth.n.01', 'name': 'codling_moth'}, {'id': 4037, 'synset': 'lymantriid.n.01', 'name': 'lymantriid'}, {'id': 4038, 'synset': 'tussock_caterpillar.n.01', 'name': 'tussock_caterpillar'}, {'id': 4039, 'synset': 'gypsy_moth.n.01', 'name': 'gypsy_moth'}, {'id': 4040, 'synset': 'browntail.n.01', 'name': 'browntail'}, {'id': 4041, 'synset': 'gold-tail_moth.n.01', 'name': 'gold-tail_moth'}, {'id': 4042, 'synset': 'geometrid.n.01', 'name': 'geometrid'}, {'id': 4043, 'synset': 'paleacrita_vernata.n.01', 'name': 'Paleacrita_vernata'}, {'id': 4044, 'synset': 'alsophila_pometaria.n.01', 'name': 'Alsophila_pometaria'}, {'id': 4045, 'synset': 'cankerworm.n.01', 'name': 'cankerworm'}, {'id': 4046, 'synset': 'spring_cankerworm.n.01', 'name': 'spring_cankerworm'}, {'id': 4047, 'synset': 'fall_cankerworm.n.01', 'name': 'fall_cankerworm'}, {'id': 4048, 'synset': 'measuring_worm.n.01', 'name': 'measuring_worm'}, {'id': 4049, 'synset': 'pyralid.n.01', 'name': 'pyralid'}, {'id': 4050, 'synset': 'bee_moth.n.01', 'name': 'bee_moth'}, {'id': 4051, 'synset': 'corn_borer.n.02', 'name': 'corn_borer'}, {'id': 4052, 'synset': 'mediterranean_flour_moth.n.01', 'name': 'Mediterranean_flour_moth'}, {'id': 4053, 'synset': 'tobacco_moth.n.01', 'name': 'tobacco_moth'}, {'id': 4054, 'synset': 'almond_moth.n.01', 'name': 'almond_moth'}, {'id': 4055, 'synset': 'raisin_moth.n.01', 'name': 'raisin_moth'}, {'id': 4056, 'synset': 'tineoid.n.01', 'name': 'tineoid'}, {'id': 4057, 'synset': 'tineid.n.01', 'name': 'tineid'}, {'id': 4058, 'synset': 'clothes_moth.n.01', 'name': 'clothes_moth'}, {'id': 4059, 'synset': 'casemaking_clothes_moth.n.01', 'name': 'casemaking_clothes_moth'}, {'id': 4060, 'synset': 'webbing_clothes_moth.n.01', 'name': 'webbing_clothes_moth'}, {'id': 4061, 'synset': 'carpet_moth.n.01', 'name': 'carpet_moth'}, {'id': 4062, 'synset': 'gelechiid.n.01', 'name': 'gelechiid'}, {'id': 4063, 'synset': 'grain_moth.n.01', 'name': 'grain_moth'}, {'id': 4064, 'synset': 'angoumois_moth.n.01', 'name': 'angoumois_moth'}, {'id': 4065, 'synset': 'potato_moth.n.01', 'name': 'potato_moth'}, {'id': 4066, 'synset': 'potato_tuberworm.n.01', 'name': 'potato_tuberworm'}, {'id': 4067, 'synset': 'noctuid_moth.n.01', 'name': 'noctuid_moth'}, {'id': 4068, 'synset': 'cutworm.n.01', 'name': 'cutworm'}, {'id': 4069, 'synset': 'underwing.n.01', 'name': 'underwing'}, {'id': 4070, 'synset': 'red_underwing.n.01', 'name': 'red_underwing'}, {'id': 4071, 'synset': 'antler_moth.n.01', 'name': 'antler_moth'}, {'id': 4072, 'synset': 'heliothis_moth.n.01', 'name': 'heliothis_moth'}, {'id': 4073, 'synset': 'army_cutworm.n.01', 'name': 'army_cutworm'}, {'id': 4074, 'synset': 'armyworm.n.02', 'name': 'armyworm'}, {'id': 4075, 'synset': 'armyworm.n.01', 'name': 'armyworm'}, {'id': 4076, 'synset': 'spodoptera_exigua.n.02', 'name': 'Spodoptera_exigua'}, {'id': 4077, 'synset': 'beet_armyworm.n.01', 'name': 'beet_armyworm'}, {'id': 4078, 'synset': 'spodoptera_frugiperda.n.02', 'name': 'Spodoptera_frugiperda'}, {'id': 4079, 'synset': 'fall_armyworm.n.01', 'name': 'fall_armyworm'}, {'id': 4080, 'synset': 'hawkmoth.n.01', 'name': 'hawkmoth'}, {'id': 4081, 'synset': 'manduca_sexta.n.02', 'name': 'Manduca_sexta'}, {'id': 4082, 'synset': 'tobacco_hornworm.n.01', 'name': 'tobacco_hornworm'}, {'id': 4083, 'synset': 'manduca_quinquemaculata.n.02', 'name': 'Manduca_quinquemaculata'}, {'id': 4084, 'synset': 'tomato_hornworm.n.01', 'name': 'tomato_hornworm'}, {'id': 4085, 'synset': "death's-head_moth.n.01", 'name': "death's-head_moth"}, {'id': 4086, 'synset': 'bombycid.n.01', 'name': 'bombycid'}, {'id': 4087, 'synset': 'domestic_silkworm_moth.n.01', 'name': 'domestic_silkworm_moth'}, {'id': 4088, 'synset': 'silkworm.n.01', 'name': 'silkworm'}, {'id': 4089, 'synset': 'saturniid.n.01', 'name': 'saturniid'}, {'id': 4090, 'synset': 'emperor.n.03', 'name': 'emperor'}, {'id': 4091, 'synset': 'imperial_moth.n.01', 'name': 'imperial_moth'}, {'id': 4092, 'synset': 'giant_silkworm_moth.n.01', 'name': 'giant_silkworm_moth'}, {'id': 4093, 'synset': 'silkworm.n.02', 'name': 'silkworm'}, {'id': 4094, 'synset': 'luna_moth.n.01', 'name': 'luna_moth'}, {'id': 4095, 'synset': 'cecropia.n.02', 'name': 'cecropia'}, {'id': 4096, 'synset': 'cynthia_moth.n.01', 'name': 'cynthia_moth'}, {'id': 4097, 'synset': 'ailanthus_silkworm.n.01', 'name': 'ailanthus_silkworm'}, {'id': 4098, 'synset': 'io_moth.n.01', 'name': 'io_moth'}, {'id': 4099, 'synset': 'polyphemus_moth.n.01', 'name': 'polyphemus_moth'}, {'id': 4100, 'synset': 'pernyi_moth.n.01', 'name': 'pernyi_moth'}, {'id': 4101, 'synset': 'tussah.n.01', 'name': 'tussah'}, {'id': 4102, 'synset': 'atlas_moth.n.01', 'name': 'atlas_moth'}, {'id': 4103, 'synset': 'arctiid.n.01', 'name': 'arctiid'}, {'id': 4104, 'synset': 'tiger_moth.n.01', 'name': 'tiger_moth'}, {'id': 4105, 'synset': 'cinnabar.n.02', 'name': 'cinnabar'}, {'id': 4106, 'synset': 'lasiocampid.n.01', 'name': 'lasiocampid'}, {'id': 4107, 'synset': 'eggar.n.01', 'name': 'eggar'}, {'id': 4108, 'synset': 'tent-caterpillar_moth.n.02', 'name': 'tent-caterpillar_moth'}, {'id': 4109, 'synset': 'tent_caterpillar.n.01', 'name': 'tent_caterpillar'}, {'id': 4110, 'synset': 'tent-caterpillar_moth.n.01', 'name': 'tent-caterpillar_moth'}, {'id': 4111, 'synset': 'forest_tent_caterpillar.n.01', 'name': 'forest_tent_caterpillar'}, {'id': 4112, 'synset': 'lappet.n.03', 'name': 'lappet'}, {'id': 4113, 'synset': 'lappet_caterpillar.n.01', 'name': 'lappet_caterpillar'}, {'id': 4114, 'synset': 'webworm.n.01', 'name': 'webworm'}, {'id': 4115, 'synset': 'webworm_moth.n.01', 'name': 'webworm_moth'}, {'id': 4116, 'synset': 'hyphantria_cunea.n.02', 'name': 'Hyphantria_cunea'}, {'id': 4117, 'synset': 'fall_webworm.n.01', 'name': 'fall_webworm'}, {'id': 4118, 'synset': 'garden_webworm.n.01', 'name': 'garden_webworm'}, {'id': 4119, 'synset': 'instar.n.01', 'name': 'instar'}, {'id': 4120, 'synset': 'caterpillar.n.01', 'name': 'caterpillar'}, {'id': 4121, 'synset': 'corn_borer.n.01', 'name': 'corn_borer'}, {'id': 4122, 'synset': 'bollworm.n.01', 'name': 'bollworm'}, {'id': 4123, 'synset': 'pink_bollworm.n.01', 'name': 'pink_bollworm'}, {'id': 4124, 'synset': 'corn_earworm.n.01', 'name': 'corn_earworm'}, {'id': 4125, 'synset': 'cabbageworm.n.01', 'name': 'cabbageworm'}, {'id': 4126, 'synset': 'woolly_bear.n.01', 'name': 'woolly_bear'}, {'id': 4127, 'synset': 'woolly_bear_moth.n.01', 'name': 'woolly_bear_moth'}, {'id': 4128, 'synset': 'larva.n.01', 'name': 'larva'}, {'id': 4129, 'synset': 'nymph.n.02', 'name': 'nymph'}, {'id': 4130, 'synset': 'leptocephalus.n.01', 'name': 'leptocephalus'}, {'id': 4131, 'synset': 'grub.n.02', 'name': 'grub'}, {'id': 4132, 'synset': 'maggot.n.01', 'name': 'maggot'}, {'id': 4133, 'synset': 'leatherjacket.n.03', 'name': 'leatherjacket'}, {'id': 4134, 'synset': 'pupa.n.01', 'name': 'pupa'}, {'id': 4135, 'synset': 'chrysalis.n.01', 'name': 'chrysalis'}, {'id': 4136, 'synset': 'imago.n.02', 'name': 'imago'}, {'id': 4137, 'synset': 'queen.n.01', 'name': 'queen'}, {'id': 4138, 'synset': 'phoronid.n.01', 'name': 'phoronid'}, {'id': 4139, 'synset': 'bryozoan.n.01', 'name': 'bryozoan'}, {'id': 4140, 'synset': 'brachiopod.n.01', 'name': 'brachiopod'}, {'id': 4141, 'synset': 'peanut_worm.n.01', 'name': 'peanut_worm'}, {'id': 4142, 'synset': 'echinoderm.n.01', 'name': 'echinoderm'}, {'id': 4143, 'synset': 'brittle_star.n.01', 'name': 'brittle_star'}, {'id': 4144, 'synset': 'basket_star.n.01', 'name': 'basket_star'}, {'id': 4145, 'synset': 'astrophyton_muricatum.n.01', 'name': 'Astrophyton_muricatum'}, {'id': 4146, 'synset': 'sea_urchin.n.01', 'name': 'sea_urchin'}, {'id': 4147, 'synset': 'edible_sea_urchin.n.01', 'name': 'edible_sea_urchin'}, {'id': 4148, 'synset': 'sand_dollar.n.01', 'name': 'sand_dollar'}, {'id': 4149, 'synset': 'heart_urchin.n.01', 'name': 'heart_urchin'}, {'id': 4150, 'synset': 'crinoid.n.01', 'name': 'crinoid'}, {'id': 4151, 'synset': 'sea_lily.n.01', 'name': 'sea_lily'}, {'id': 4152, 'synset': 'feather_star.n.01', 'name': 'feather_star'}, {'id': 4153, 'synset': 'sea_cucumber.n.01', 'name': 'sea_cucumber'}, {'id': 4154, 'synset': 'trepang.n.01', 'name': 'trepang'}, {'id': 4155, 'synset': 'duplicidentata.n.01', 'name': 'Duplicidentata'}, {'id': 4156, 'synset': 'lagomorph.n.01', 'name': 'lagomorph'}, {'id': 4157, 'synset': 'leporid.n.01', 'name': 'leporid'}, {'id': 4158, 'synset': 'rabbit_ears.n.02', 'name': 'rabbit_ears'}, {'id': 4159, 'synset': 'lapin.n.02', 'name': 'lapin'}, {'id': 4160, 'synset': 'bunny.n.02', 'name': 'bunny'}, {'id': 4161, 'synset': 'european_rabbit.n.01', 'name': 'European_rabbit'}, {'id': 4162, 'synset': 'wood_rabbit.n.01', 'name': 'wood_rabbit'}, {'id': 4163, 'synset': 'eastern_cottontail.n.01', 'name': 'eastern_cottontail'}, {'id': 4164, 'synset': 'swamp_rabbit.n.02', 'name': 'swamp_rabbit'}, {'id': 4165, 'synset': 'marsh_hare.n.01', 'name': 'marsh_hare'}, {'id': 4166, 'synset': 'hare.n.01', 'name': 'hare'}, {'id': 4167, 'synset': 'leveret.n.01', 'name': 'leveret'}, {'id': 4168, 'synset': 'european_hare.n.01', 'name': 'European_hare'}, {'id': 4169, 'synset': 'jackrabbit.n.01', 'name': 'jackrabbit'}, {'id': 4170, 'synset': 'white-tailed_jackrabbit.n.01', 'name': 'white-tailed_jackrabbit'}, {'id': 4171, 'synset': 'blacktail_jackrabbit.n.01', 'name': 'blacktail_jackrabbit'}, {'id': 4172, 'synset': 'polar_hare.n.01', 'name': 'polar_hare'}, {'id': 4173, 'synset': 'snowshoe_hare.n.01', 'name': 'snowshoe_hare'}, {'id': 4174, 'synset': 'belgian_hare.n.01', 'name': 'Belgian_hare'}, {'id': 4175, 'synset': 'angora.n.03', 'name': 'Angora'}, {'id': 4176, 'synset': 'pika.n.01', 'name': 'pika'}, {'id': 4177, 'synset': 'little_chief_hare.n.01', 'name': 'little_chief_hare'}, {'id': 4178, 'synset': 'collared_pika.n.01', 'name': 'collared_pika'}, {'id': 4179, 'synset': 'mouse.n.01', 'name': 'mouse'}, {'id': 4180, 'synset': 'pocket_rat.n.01', 'name': 'pocket_rat'}, {'id': 4181, 'synset': 'murine.n.01', 'name': 'murine'}, {'id': 4182, 'synset': 'house_mouse.n.01', 'name': 'house_mouse'}, {'id': 4183, 'synset': 'harvest_mouse.n.02', 'name': 'harvest_mouse'}, {'id': 4184, 'synset': 'field_mouse.n.02', 'name': 'field_mouse'}, {'id': 4185, 'synset': 'nude_mouse.n.01', 'name': 'nude_mouse'}, {'id': 4186, 'synset': 'european_wood_mouse.n.01', 'name': 'European_wood_mouse'}, {'id': 4187, 'synset': 'brown_rat.n.01', 'name': 'brown_rat'}, {'id': 4188, 'synset': 'wharf_rat.n.02', 'name': 'wharf_rat'}, {'id': 4189, 'synset': 'sewer_rat.n.01', 'name': 'sewer_rat'}, {'id': 4190, 'synset': 'black_rat.n.01', 'name': 'black_rat'}, {'id': 4191, 'synset': 'bandicoot_rat.n.01', 'name': 'bandicoot_rat'}, {'id': 4192, 'synset': 'jerboa_rat.n.01', 'name': 'jerboa_rat'}, {'id': 4193, 'synset': 'kangaroo_mouse.n.02', 'name': 'kangaroo_mouse'}, {'id': 4194, 'synset': 'water_rat.n.03', 'name': 'water_rat'}, {'id': 4195, 'synset': 'beaver_rat.n.01', 'name': 'beaver_rat'}, {'id': 4196, 'synset': 'new_world_mouse.n.01', 'name': 'New_World_mouse'}, {'id': 4197, 'synset': 'american_harvest_mouse.n.01', 'name': 'American_harvest_mouse'}, {'id': 4198, 'synset': 'wood_mouse.n.01', 'name': 'wood_mouse'}, {'id': 4199, 'synset': 'white-footed_mouse.n.01', 'name': 'white-footed_mouse'}, {'id': 4200, 'synset': 'deer_mouse.n.01', 'name': 'deer_mouse'}, {'id': 4201, 'synset': 'cactus_mouse.n.01', 'name': 'cactus_mouse'}, {'id': 4202, 'synset': 'cotton_mouse.n.01', 'name': 'cotton_mouse'}, {'id': 4203, 'synset': 'pygmy_mouse.n.01', 'name': 'pygmy_mouse'}, {'id': 4204, 'synset': 'grasshopper_mouse.n.01', 'name': 'grasshopper_mouse'}, {'id': 4205, 'synset': 'muskrat.n.02', 'name': 'muskrat'}, {'id': 4206, 'synset': 'round-tailed_muskrat.n.01', 'name': 'round-tailed_muskrat'}, {'id': 4207, 'synset': 'cotton_rat.n.01', 'name': 'cotton_rat'}, {'id': 4208, 'synset': 'wood_rat.n.01', 'name': 'wood_rat'}, {'id': 4209, 'synset': 'dusky-footed_wood_rat.n.01', 'name': 'dusky-footed_wood_rat'}, {'id': 4210, 'synset': 'vole.n.01', 'name': 'vole'}, {'id': 4211, 'synset': 'packrat.n.02', 'name': 'packrat'}, {'id': 4212, 'synset': 'dusky-footed_woodrat.n.01', 'name': 'dusky-footed_woodrat'}, {'id': 4213, 'synset': 'eastern_woodrat.n.01', 'name': 'eastern_woodrat'}, {'id': 4214, 'synset': 'rice_rat.n.01', 'name': 'rice_rat'}, {'id': 4215, 'synset': 'pine_vole.n.01', 'name': 'pine_vole'}, {'id': 4216, 'synset': 'meadow_vole.n.01', 'name': 'meadow_vole'}, {'id': 4217, 'synset': 'water_vole.n.02', 'name': 'water_vole'}, {'id': 4218, 'synset': 'prairie_vole.n.01', 'name': 'prairie_vole'}, {'id': 4219, 'synset': 'water_vole.n.01', 'name': 'water_vole'}, {'id': 4220, 'synset': 'red-backed_mouse.n.01', 'name': 'red-backed_mouse'}, {'id': 4221, 'synset': 'phenacomys.n.01', 'name': 'phenacomys'}, {'id': 4222, 'synset': 'eurasian_hamster.n.01', 'name': 'Eurasian_hamster'}, {'id': 4223, 'synset': 'golden_hamster.n.01', 'name': 'golden_hamster'}, {'id': 4224, 'synset': 'gerbil.n.01', 'name': 'gerbil'}, {'id': 4225, 'synset': 'jird.n.01', 'name': 'jird'}, {'id': 4226, 'synset': 'tamarisk_gerbil.n.01', 'name': 'tamarisk_gerbil'}, {'id': 4227, 'synset': 'sand_rat.n.02', 'name': 'sand_rat'}, {'id': 4228, 'synset': 'lemming.n.01', 'name': 'lemming'}, {'id': 4229, 'synset': 'european_lemming.n.01', 'name': 'European_lemming'}, {'id': 4230, 'synset': 'brown_lemming.n.01', 'name': 'brown_lemming'}, {'id': 4231, 'synset': 'grey_lemming.n.01', 'name': 'grey_lemming'}, {'id': 4232, 'synset': 'pied_lemming.n.01', 'name': 'pied_lemming'}, {'id': 4233, 'synset': 'hudson_bay_collared_lemming.n.01', 'name': 'Hudson_bay_collared_lemming'}, {'id': 4234, 'synset': 'southern_bog_lemming.n.01', 'name': 'southern_bog_lemming'}, {'id': 4235, 'synset': 'northern_bog_lemming.n.01', 'name': 'northern_bog_lemming'}, {'id': 4236, 'synset': 'porcupine.n.01', 'name': 'porcupine'}, {'id': 4237, 'synset': 'old_world_porcupine.n.01', 'name': 'Old_World_porcupine'}, {'id': 4238, 'synset': 'brush-tailed_porcupine.n.01', 'name': 'brush-tailed_porcupine'}, {'id': 4239, 'synset': 'long-tailed_porcupine.n.01', 'name': 'long-tailed_porcupine'}, {'id': 4240, 'synset': 'new_world_porcupine.n.01', 'name': 'New_World_porcupine'}, {'id': 4241, 'synset': 'canada_porcupine.n.01', 'name': 'Canada_porcupine'}, {'id': 4242, 'synset': 'pocket_mouse.n.01', 'name': 'pocket_mouse'}, {'id': 4243, 'synset': 'silky_pocket_mouse.n.01', 'name': 'silky_pocket_mouse'}, {'id': 4244, 'synset': 'plains_pocket_mouse.n.01', 'name': 'plains_pocket_mouse'}, {'id': 4245, 'synset': 'hispid_pocket_mouse.n.01', 'name': 'hispid_pocket_mouse'}, {'id': 4246, 'synset': 'mexican_pocket_mouse.n.01', 'name': 'Mexican_pocket_mouse'}, {'id': 4247, 'synset': 'kangaroo_rat.n.01', 'name': 'kangaroo_rat'}, {'id': 4248, 'synset': 'ord_kangaroo_rat.n.01', 'name': 'Ord_kangaroo_rat'}, {'id': 4249, 'synset': 'kangaroo_mouse.n.01', 'name': 'kangaroo_mouse'}, {'id': 4250, 'synset': 'jumping_mouse.n.01', 'name': 'jumping_mouse'}, {'id': 4251, 'synset': 'meadow_jumping_mouse.n.01', 'name': 'meadow_jumping_mouse'}, {'id': 4252, 'synset': 'jerboa.n.01', 'name': 'jerboa'}, {'id': 4253, 'synset': 'typical_jerboa.n.01', 'name': 'typical_jerboa'}, {'id': 4254, 'synset': 'jaculus_jaculus.n.01', 'name': 'Jaculus_jaculus'}, {'id': 4255, 'synset': 'dormouse.n.01', 'name': 'dormouse'}, {'id': 4256, 'synset': 'loir.n.01', 'name': 'loir'}, {'id': 4257, 'synset': 'hazel_mouse.n.01', 'name': 'hazel_mouse'}, {'id': 4258, 'synset': 'lerot.n.01', 'name': 'lerot'}, {'id': 4259, 'synset': 'gopher.n.04', 'name': 'gopher'}, {'id': 4260, 'synset': 'plains_pocket_gopher.n.01', 'name': 'plains_pocket_gopher'}, {'id': 4261, 'synset': 'southeastern_pocket_gopher.n.01', 'name': 'southeastern_pocket_gopher'}, {'id': 4262, 'synset': 'valley_pocket_gopher.n.01', 'name': 'valley_pocket_gopher'}, {'id': 4263, 'synset': 'northern_pocket_gopher.n.01', 'name': 'northern_pocket_gopher'}, {'id': 4264, 'synset': 'tree_squirrel.n.01', 'name': 'tree_squirrel'}, {'id': 4265, 'synset': 'eastern_grey_squirrel.n.01', 'name': 'eastern_grey_squirrel'}, {'id': 4266, 'synset': 'western_grey_squirrel.n.01', 'name': 'western_grey_squirrel'}, {'id': 4267, 'synset': 'fox_squirrel.n.01', 'name': 'fox_squirrel'}, {'id': 4268, 'synset': 'black_squirrel.n.01', 'name': 'black_squirrel'}, {'id': 4269, 'synset': 'red_squirrel.n.02', 'name': 'red_squirrel'}, {'id': 4270, 'synset': 'american_red_squirrel.n.01', 'name': 'American_red_squirrel'}, {'id': 4271, 'synset': 'chickeree.n.01', 'name': 'chickeree'}, {'id': 4272, 'synset': 'antelope_squirrel.n.01', 'name': 'antelope_squirrel'}, {'id': 4273, 'synset': 'ground_squirrel.n.02', 'name': 'ground_squirrel'}, {'id': 4274, 'synset': 'mantled_ground_squirrel.n.01', 'name': 'mantled_ground_squirrel'}, {'id': 4275, 'synset': 'suslik.n.01', 'name': 'suslik'}, {'id': 4276, 'synset': 'flickertail.n.01', 'name': 'flickertail'}, {'id': 4277, 'synset': 'rock_squirrel.n.01', 'name': 'rock_squirrel'}, {'id': 4278, 'synset': 'arctic_ground_squirrel.n.01', 'name': 'Arctic_ground_squirrel'}, {'id': 4279, 'synset': 'prairie_dog.n.01', 'name': 'prairie_dog'}, {'id': 4280, 'synset': 'blacktail_prairie_dog.n.01', 'name': 'blacktail_prairie_dog'}, {'id': 4281, 'synset': 'whitetail_prairie_dog.n.01', 'name': 'whitetail_prairie_dog'}, {'id': 4282, 'synset': 'eastern_chipmunk.n.01', 'name': 'eastern_chipmunk'}, {'id': 4283, 'synset': 'chipmunk.n.01', 'name': 'chipmunk'}, {'id': 4284, 'synset': 'baronduki.n.01', 'name': 'baronduki'}, {'id': 4285, 'synset': 'american_flying_squirrel.n.01', 'name': 'American_flying_squirrel'}, {'id': 4286, 'synset': 'southern_flying_squirrel.n.01', 'name': 'southern_flying_squirrel'}, {'id': 4287, 'synset': 'northern_flying_squirrel.n.01', 'name': 'northern_flying_squirrel'}, {'id': 4288, 'synset': 'marmot.n.01', 'name': 'marmot'}, {'id': 4289, 'synset': 'groundhog.n.01', 'name': 'groundhog'}, {'id': 4290, 'synset': 'hoary_marmot.n.01', 'name': 'hoary_marmot'}, {'id': 4291, 'synset': 'yellowbelly_marmot.n.01', 'name': 'yellowbelly_marmot'}, {'id': 4292, 'synset': 'asiatic_flying_squirrel.n.01', 'name': 'Asiatic_flying_squirrel'}, {'id': 4293, 'synset': 'beaver.n.07', 'name': 'beaver'}, {'id': 4294, 'synset': 'old_world_beaver.n.01', 'name': 'Old_World_beaver'}, {'id': 4295, 'synset': 'new_world_beaver.n.01', 'name': 'New_World_beaver'}, {'id': 4296, 'synset': 'mountain_beaver.n.01', 'name': 'mountain_beaver'}, {'id': 4297, 'synset': 'cavy.n.01', 'name': 'cavy'}, {'id': 4298, 'synset': 'guinea_pig.n.02', 'name': 'guinea_pig'}, {'id': 4299, 'synset': 'aperea.n.01', 'name': 'aperea'}, {'id': 4300, 'synset': 'mara.n.02', 'name': 'mara'}, {'id': 4301, 'synset': 'capybara.n.01', 'name': 'capybara'}, {'id': 4302, 'synset': 'agouti.n.01', 'name': 'agouti'}, {'id': 4303, 'synset': 'paca.n.01', 'name': 'paca'}, {'id': 4304, 'synset': 'mountain_paca.n.01', 'name': 'mountain_paca'}, {'id': 4305, 'synset': 'coypu.n.01', 'name': 'coypu'}, {'id': 4306, 'synset': 'chinchilla.n.03', 'name': 'chinchilla'}, {'id': 4307, 'synset': 'mountain_chinchilla.n.01', 'name': 'mountain_chinchilla'}, {'id': 4308, 'synset': 'viscacha.n.01', 'name': 'viscacha'}, {'id': 4309, 'synset': 'abrocome.n.01', 'name': 'abrocome'}, {'id': 4310, 'synset': 'mole_rat.n.02', 'name': 'mole_rat'}, {'id': 4311, 'synset': 'mole_rat.n.01', 'name': 'mole_rat'}, {'id': 4312, 'synset': 'sand_rat.n.01', 'name': 'sand_rat'}, {'id': 4313, 'synset': 'naked_mole_rat.n.01', 'name': 'naked_mole_rat'}, {'id': 4314, 'synset': 'queen.n.09', 'name': 'queen'}, {'id': 4315, 'synset': 'damaraland_mole_rat.n.01', 'name': 'Damaraland_mole_rat'}, {'id': 4316, 'synset': 'ungulata.n.01', 'name': 'Ungulata'}, {'id': 4317, 'synset': 'ungulate.n.01', 'name': 'ungulate'}, {'id': 4318, 'synset': 'unguiculate.n.01', 'name': 'unguiculate'}, {'id': 4319, 'synset': 'dinoceras.n.01', 'name': 'dinoceras'}, {'id': 4320, 'synset': 'hyrax.n.01', 'name': 'hyrax'}, {'id': 4321, 'synset': 'rock_hyrax.n.01', 'name': 'rock_hyrax'}, {'id': 4322, 'synset': 'odd-toed_ungulate.n.01', 'name': 'odd-toed_ungulate'}, {'id': 4323, 'synset': 'equine.n.01', 'name': 'equine'}, {'id': 4324, 'synset': 'roan.n.02', 'name': 'roan'}, {'id': 4325, 'synset': 'stablemate.n.01', 'name': 'stablemate'}, {'id': 4326, 'synset': 'gee-gee.n.01', 'name': 'gee-gee'}, {'id': 4327, 'synset': 'eohippus.n.01', 'name': 'eohippus'}, {'id': 4328, 'synset': 'filly.n.01', 'name': 'filly'}, {'id': 4329, 'synset': 'colt.n.01', 'name': 'colt'}, {'id': 4330, 'synset': 'male_horse.n.01', 'name': 'male_horse'}, {'id': 4331, 'synset': 'ridgeling.n.01', 'name': 'ridgeling'}, {'id': 4332, 'synset': 'stallion.n.01', 'name': 'stallion'}, {'id': 4333, 'synset': 'stud.n.04', 'name': 'stud'}, {'id': 4334, 'synset': 'gelding.n.01', 'name': 'gelding'}, {'id': 4335, 'synset': 'mare.n.01', 'name': 'mare'}, {'id': 4336, 'synset': 'broodmare.n.01', 'name': 'broodmare'}, {'id': 4337, 'synset': 'saddle_horse.n.01', 'name': 'saddle_horse'}, {'id': 4338, 'synset': 'remount.n.01', 'name': 'remount'}, {'id': 4339, 'synset': 'palfrey.n.01', 'name': 'palfrey'}, {'id': 4340, 'synset': 'warhorse.n.03', 'name': 'warhorse'}, {'id': 4341, 'synset': 'cavalry_horse.n.01', 'name': 'cavalry_horse'}, {'id': 4342, 'synset': 'charger.n.01', 'name': 'charger'}, {'id': 4343, 'synset': 'steed.n.01', 'name': 'steed'}, {'id': 4344, 'synset': 'prancer.n.01', 'name': 'prancer'}, {'id': 4345, 'synset': 'hack.n.08', 'name': 'hack'}, {'id': 4346, 'synset': 'cow_pony.n.01', 'name': 'cow_pony'}, {'id': 4347, 'synset': 'quarter_horse.n.01', 'name': 'quarter_horse'}, {'id': 4348, 'synset': 'morgan.n.06', 'name': 'Morgan'}, {'id': 4349, 'synset': 'tennessee_walker.n.01', 'name': 'Tennessee_walker'}, {'id': 4350, 'synset': 'american_saddle_horse.n.01', 'name': 'American_saddle_horse'}, {'id': 4351, 'synset': 'appaloosa.n.01', 'name': 'Appaloosa'}, {'id': 4352, 'synset': 'arabian.n.02', 'name': 'Arabian'}, {'id': 4353, 'synset': 'lippizan.n.01', 'name': 'Lippizan'}, {'id': 4354, 'synset': 'pony.n.01', 'name': 'pony'}, {'id': 4355, 'synset': 'polo_pony.n.01', 'name': 'polo_pony'}, {'id': 4356, 'synset': 'mustang.n.01', 'name': 'mustang'}, {'id': 4357, 'synset': 'bronco.n.01', 'name': 'bronco'}, {'id': 4358, 'synset': 'bucking_bronco.n.01', 'name': 'bucking_bronco'}, {'id': 4359, 'synset': 'buckskin.n.01', 'name': 'buckskin'}, {'id': 4360, 'synset': 'crowbait.n.01', 'name': 'crowbait'}, {'id': 4361, 'synset': 'dun.n.01', 'name': 'dun'}, {'id': 4362, 'synset': 'grey.n.07', 'name': 'grey'}, {'id': 4363, 'synset': 'wild_horse.n.01', 'name': 'wild_horse'}, {'id': 4364, 'synset': 'tarpan.n.01', 'name': 'tarpan'}, {'id': 4365, 'synset': "przewalski's_horse.n.01", 'name': "Przewalski's_horse"}, {'id': 4366, 'synset': 'cayuse.n.01', 'name': 'cayuse'}, {'id': 4367, 'synset': 'hack.n.07', 'name': 'hack'}, {'id': 4368, 'synset': 'hack.n.06', 'name': 'hack'}, {'id': 4369, 'synset': 'plow_horse.n.01', 'name': 'plow_horse'}, {'id': 4370, 'synset': 'shetland_pony.n.01', 'name': 'Shetland_pony'}, {'id': 4371, 'synset': 'welsh_pony.n.01', 'name': 'Welsh_pony'}, {'id': 4372, 'synset': 'exmoor.n.02', 'name': 'Exmoor'}, {'id': 4373, 'synset': 'racehorse.n.01', 'name': 'racehorse'}, {'id': 4374, 'synset': 'thoroughbred.n.02', 'name': 'thoroughbred'}, {'id': 4375, 'synset': 'steeplechaser.n.01', 'name': 'steeplechaser'}, {'id': 4376, 'synset': 'racer.n.03', 'name': 'racer'}, {'id': 4377, 'synset': 'finisher.n.06', 'name': 'finisher'}, {'id': 4378, 'synset': 'pony.n.02', 'name': 'pony'}, {'id': 4379, 'synset': 'yearling.n.02', 'name': 'yearling'}, {'id': 4380, 'synset': 'dark_horse.n.02', 'name': 'dark_horse'}, {'id': 4381, 'synset': 'mudder.n.01', 'name': 'mudder'}, {'id': 4382, 'synset': 'nonstarter.n.02', 'name': 'nonstarter'}, {'id': 4383, 'synset': 'stalking-horse.n.04', 'name': 'stalking-horse'}, {'id': 4384, 'synset': 'harness_horse.n.01', 'name': 'harness_horse'}, {'id': 4385, 'synset': 'cob.n.02', 'name': 'cob'}, {'id': 4386, 'synset': 'hackney.n.02', 'name': 'hackney'}, {'id': 4387, 'synset': 'workhorse.n.02', 'name': 'workhorse'}, {'id': 4388, 'synset': 'draft_horse.n.01', 'name': 'draft_horse'}, {'id': 4389, 'synset': 'packhorse.n.01', 'name': 'packhorse'}, {'id': 4390, 'synset': 'carthorse.n.01', 'name': 'carthorse'}, {'id': 4391, 'synset': 'clydesdale.n.01', 'name': 'Clydesdale'}, {'id': 4392, 'synset': 'percheron.n.01', 'name': 'Percheron'}, {'id': 4393, 'synset': 'farm_horse.n.01', 'name': 'farm_horse'}, {'id': 4394, 'synset': 'shire.n.02', 'name': 'shire'}, {'id': 4395, 'synset': 'pole_horse.n.02', 'name': 'pole_horse'}, {'id': 4396, 'synset': 'post_horse.n.01', 'name': 'post_horse'}, {'id': 4397, 'synset': 'coach_horse.n.01', 'name': 'coach_horse'}, {'id': 4398, 'synset': 'pacer.n.02', 'name': 'pacer'}, {'id': 4399, 'synset': 'pacer.n.01', 'name': 'pacer'}, {'id': 4400, 'synset': 'trotting_horse.n.01', 'name': 'trotting_horse'}, {'id': 4401, 'synset': 'pole_horse.n.01', 'name': 'pole_horse'}, {'id': 4402, 'synset': 'stepper.n.03', 'name': 'stepper'}, {'id': 4403, 'synset': 'chestnut.n.06', 'name': 'chestnut'}, {'id': 4404, 'synset': 'liver_chestnut.n.01', 'name': 'liver_chestnut'}, {'id': 4405, 'synset': 'bay.n.07', 'name': 'bay'}, {'id': 4406, 'synset': 'sorrel.n.05', 'name': 'sorrel'}, {'id': 4407, 'synset': 'palomino.n.01', 'name': 'palomino'}, {'id': 4408, 'synset': 'pinto.n.01', 'name': 'pinto'}, {'id': 4409, 'synset': 'ass.n.03', 'name': 'ass'}, {'id': 4410, 'synset': 'burro.n.01', 'name': 'burro'}, {'id': 4411, 'synset': 'moke.n.01', 'name': 'moke'}, {'id': 4412, 'synset': 'jack.n.12', 'name': 'jack'}, {'id': 4413, 'synset': 'jennet.n.01', 'name': 'jennet'}, {'id': 4414, 'synset': 'mule.n.01', 'name': 'mule'}, {'id': 4415, 'synset': 'hinny.n.01', 'name': 'hinny'}, {'id': 4416, 'synset': 'wild_ass.n.01', 'name': 'wild_ass'}, {'id': 4417, 'synset': 'african_wild_ass.n.01', 'name': 'African_wild_ass'}, {'id': 4418, 'synset': 'kiang.n.01', 'name': 'kiang'}, {'id': 4419, 'synset': 'onager.n.02', 'name': 'onager'}, {'id': 4420, 'synset': 'chigetai.n.01', 'name': 'chigetai'}, {'id': 4421, 'synset': 'common_zebra.n.01', 'name': 'common_zebra'}, {'id': 4422, 'synset': 'mountain_zebra.n.01', 'name': 'mountain_zebra'}, {'id': 4423, 'synset': "grevy's_zebra.n.01", 'name': "grevy's_zebra"}, {'id': 4424, 'synset': 'quagga.n.01', 'name': 'quagga'}, {'id': 4425, 'synset': 'indian_rhinoceros.n.01', 'name': 'Indian_rhinoceros'}, {'id': 4426, 'synset': 'woolly_rhinoceros.n.01', 'name': 'woolly_rhinoceros'}, {'id': 4427, 'synset': 'white_rhinoceros.n.01', 'name': 'white_rhinoceros'}, {'id': 4428, 'synset': 'black_rhinoceros.n.01', 'name': 'black_rhinoceros'}, {'id': 4429, 'synset': 'tapir.n.01', 'name': 'tapir'}, {'id': 4430, 'synset': 'new_world_tapir.n.01', 'name': 'New_World_tapir'}, {'id': 4431, 'synset': 'malayan_tapir.n.01', 'name': 'Malayan_tapir'}, {'id': 4432, 'synset': 'even-toed_ungulate.n.01', 'name': 'even-toed_ungulate'}, {'id': 4433, 'synset': 'swine.n.01', 'name': 'swine'}, {'id': 4434, 'synset': 'piglet.n.01', 'name': 'piglet'}, {'id': 4435, 'synset': 'sucking_pig.n.01', 'name': 'sucking_pig'}, {'id': 4436, 'synset': 'porker.n.01', 'name': 'porker'}, {'id': 4437, 'synset': 'boar.n.02', 'name': 'boar'}, {'id': 4438, 'synset': 'sow.n.01', 'name': 'sow'}, {'id': 4439, 'synset': 'razorback.n.01', 'name': 'razorback'}, {'id': 4440, 'synset': 'wild_boar.n.01', 'name': 'wild_boar'}, {'id': 4441, 'synset': 'babirusa.n.01', 'name': 'babirusa'}, {'id': 4442, 'synset': 'warthog.n.01', 'name': 'warthog'}, {'id': 4443, 'synset': 'peccary.n.01', 'name': 'peccary'}, {'id': 4444, 'synset': 'collared_peccary.n.01', 'name': 'collared_peccary'}, {'id': 4445, 'synset': 'white-lipped_peccary.n.01', 'name': 'white-lipped_peccary'}, {'id': 4446, 'synset': 'ruminant.n.01', 'name': 'ruminant'}, {'id': 4447, 'synset': 'bovid.n.01', 'name': 'bovid'}, {'id': 4448, 'synset': 'bovine.n.01', 'name': 'bovine'}, {'id': 4449, 'synset': 'ox.n.02', 'name': 'ox'}, {'id': 4450, 'synset': 'cattle.n.01', 'name': 'cattle'}, {'id': 4451, 'synset': 'ox.n.01', 'name': 'ox'}, {'id': 4452, 'synset': 'stirk.n.01', 'name': 'stirk'}, {'id': 4453, 'synset': 'bullock.n.02', 'name': 'bullock'}, {'id': 4454, 'synset': 'bull.n.01', 'name': 'bull'}, {'id': 4455, 'synset': 'cow.n.01', 'name': 'cow'}, {'id': 4456, 'synset': 'heifer.n.01', 'name': 'heifer'}, {'id': 4457, 'synset': 'bullock.n.01', 'name': 'bullock'}, {'id': 4458, 'synset': 'dogie.n.01', 'name': 'dogie'}, {'id': 4459, 'synset': 'maverick.n.02', 'name': 'maverick'}, {'id': 4460, 'synset': 'longhorn.n.01', 'name': 'longhorn'}, {'id': 4461, 'synset': 'brahman.n.04', 'name': 'Brahman'}, {'id': 4462, 'synset': 'zebu.n.01', 'name': 'zebu'}, {'id': 4463, 'synset': 'aurochs.n.02', 'name': 'aurochs'}, {'id': 4464, 'synset': 'yak.n.02', 'name': 'yak'}, {'id': 4465, 'synset': 'banteng.n.01', 'name': 'banteng'}, {'id': 4466, 'synset': 'welsh.n.03', 'name': 'Welsh'}, {'id': 4467, 'synset': 'red_poll.n.01', 'name': 'red_poll'}, {'id': 4468, 'synset': 'santa_gertrudis.n.01', 'name': 'Santa_Gertrudis'}, {'id': 4469, 'synset': 'aberdeen_angus.n.01', 'name': 'Aberdeen_Angus'}, {'id': 4470, 'synset': 'africander.n.01', 'name': 'Africander'}, {'id': 4471, 'synset': 'dairy_cattle.n.01', 'name': 'dairy_cattle'}, {'id': 4472, 'synset': 'ayrshire.n.01', 'name': 'Ayrshire'}, {'id': 4473, 'synset': 'brown_swiss.n.01', 'name': 'Brown_Swiss'}, {'id': 4474, 'synset': 'charolais.n.01', 'name': 'Charolais'}, {'id': 4475, 'synset': 'jersey.n.05', 'name': 'Jersey'}, {'id': 4476, 'synset': 'devon.n.02', 'name': 'Devon'}, {'id': 4477, 'synset': 'grade.n.09', 'name': 'grade'}, {'id': 4478, 'synset': 'durham.n.02', 'name': 'Durham'}, {'id': 4479, 'synset': 'milking_shorthorn.n.01', 'name': 'milking_shorthorn'}, {'id': 4480, 'synset': 'galloway.n.02', 'name': 'Galloway'}, {'id': 4481, 'synset': 'friesian.n.01', 'name': 'Friesian'}, {'id': 4482, 'synset': 'guernsey.n.02', 'name': 'Guernsey'}, {'id': 4483, 'synset': 'hereford.n.01', 'name': 'Hereford'}, {'id': 4484, 'synset': 'cattalo.n.01', 'name': 'cattalo'}, {'id': 4485, 'synset': 'old_world_buffalo.n.01', 'name': 'Old_World_buffalo'}, {'id': 4486, 'synset': 'water_buffalo.n.01', 'name': 'water_buffalo'}, {'id': 4487, 'synset': 'indian_buffalo.n.01', 'name': 'Indian_buffalo'}, {'id': 4488, 'synset': 'carabao.n.01', 'name': 'carabao'}, {'id': 4489, 'synset': 'anoa.n.01', 'name': 'anoa'}, {'id': 4490, 'synset': 'tamarau.n.01', 'name': 'tamarau'}, {'id': 4491, 'synset': 'cape_buffalo.n.01', 'name': 'Cape_buffalo'}, {'id': 4492, 'synset': 'asian_wild_ox.n.01', 'name': 'Asian_wild_ox'}, {'id': 4493, 'synset': 'gaur.n.01', 'name': 'gaur'}, {'id': 4494, 'synset': 'gayal.n.01', 'name': 'gayal'}, {'id': 4495, 'synset': 'bison.n.01', 'name': 'bison'}, {'id': 4496, 'synset': 'american_bison.n.01', 'name': 'American_bison'}, {'id': 4497, 'synset': 'wisent.n.01', 'name': 'wisent'}, {'id': 4498, 'synset': 'musk_ox.n.01', 'name': 'musk_ox'}, {'id': 4499, 'synset': 'ewe.n.03', 'name': 'ewe'}, {'id': 4500, 'synset': 'wether.n.01', 'name': 'wether'}, {'id': 4501, 'synset': 'lambkin.n.01', 'name': 'lambkin'}, {'id': 4502, 'synset': 'baa-lamb.n.01', 'name': 'baa-lamb'}, {'id': 4503, 'synset': 'hog.n.02', 'name': 'hog'}, {'id': 4504, 'synset': 'teg.n.01', 'name': 'teg'}, {'id': 4505, 'synset': 'persian_lamb.n.02', 'name': 'Persian_lamb'}, {'id': 4506, 'synset': 'domestic_sheep.n.01', 'name': 'domestic_sheep'}, {'id': 4507, 'synset': 'cotswold.n.01', 'name': 'Cotswold'}, {'id': 4508, 'synset': 'hampshire.n.02', 'name': 'Hampshire'}, {'id': 4509, 'synset': 'lincoln.n.03', 'name': 'Lincoln'}, {'id': 4510, 'synset': 'exmoor.n.01', 'name': 'Exmoor'}, {'id': 4511, 'synset': 'cheviot.n.01', 'name': 'Cheviot'}, {'id': 4512, 'synset': 'broadtail.n.02', 'name': 'broadtail'}, {'id': 4513, 'synset': 'longwool.n.01', 'name': 'longwool'}, {'id': 4514, 'synset': 'merino.n.01', 'name': 'merino'}, {'id': 4515, 'synset': 'rambouillet.n.01', 'name': 'Rambouillet'}, {'id': 4516, 'synset': 'wild_sheep.n.01', 'name': 'wild_sheep'}, {'id': 4517, 'synset': 'argali.n.01', 'name': 'argali'}, {'id': 4518, 'synset': 'marco_polo_sheep.n.01', 'name': 'Marco_Polo_sheep'}, {'id': 4519, 'synset': 'urial.n.01', 'name': 'urial'}, {'id': 4520, 'synset': 'dall_sheep.n.01', 'name': 'Dall_sheep'}, {'id': 4521, 'synset': 'mountain_sheep.n.01', 'name': 'mountain_sheep'}, {'id': 4522, 'synset': 'bighorn.n.02', 'name': 'bighorn'}, {'id': 4523, 'synset': 'mouflon.n.01', 'name': 'mouflon'}, {'id': 4524, 'synset': 'aoudad.n.01', 'name': 'aoudad'}, {'id': 4525, 'synset': 'kid.n.05', 'name': 'kid'}, {'id': 4526, 'synset': 'billy.n.02', 'name': 'billy'}, {'id': 4527, 'synset': 'nanny.n.02', 'name': 'nanny'}, {'id': 4528, 'synset': 'domestic_goat.n.01', 'name': 'domestic_goat'}, {'id': 4529, 'synset': 'cashmere_goat.n.01', 'name': 'Cashmere_goat'}, {'id': 4530, 'synset': 'angora.n.02', 'name': 'Angora'}, {'id': 4531, 'synset': 'wild_goat.n.01', 'name': 'wild_goat'}, {'id': 4532, 'synset': 'bezoar_goat.n.01', 'name': 'bezoar_goat'}, {'id': 4533, 'synset': 'markhor.n.01', 'name': 'markhor'}, {'id': 4534, 'synset': 'ibex.n.01', 'name': 'ibex'}, {'id': 4535, 'synset': 'goat_antelope.n.01', 'name': 'goat_antelope'}, {'id': 4536, 'synset': 'mountain_goat.n.01', 'name': 'mountain_goat'}, {'id': 4537, 'synset': 'goral.n.01', 'name': 'goral'}, {'id': 4538, 'synset': 'serow.n.01', 'name': 'serow'}, {'id': 4539, 'synset': 'chamois.n.02', 'name': 'chamois'}, {'id': 4540, 'synset': 'takin.n.01', 'name': 'takin'}, {'id': 4541, 'synset': 'antelope.n.01', 'name': 'antelope'}, {'id': 4542, 'synset': 'blackbuck.n.01', 'name': 'blackbuck'}, {'id': 4543, 'synset': 'gerenuk.n.01', 'name': 'gerenuk'}, {'id': 4544, 'synset': 'addax.n.01', 'name': 'addax'}, {'id': 4545, 'synset': 'gnu.n.01', 'name': 'gnu'}, {'id': 4546, 'synset': 'dik-dik.n.01', 'name': 'dik-dik'}, {'id': 4547, 'synset': 'hartebeest.n.01', 'name': 'hartebeest'}, {'id': 4548, 'synset': 'sassaby.n.01', 'name': 'sassaby'}, {'id': 4549, 'synset': 'impala.n.01', 'name': 'impala'}, {'id': 4550, 'synset': "thomson's_gazelle.n.01", 'name': "Thomson's_gazelle"}, {'id': 4551, 'synset': 'gazella_subgutturosa.n.01', 'name': 'Gazella_subgutturosa'}, {'id': 4552, 'synset': 'springbok.n.01', 'name': 'springbok'}, {'id': 4553, 'synset': 'bongo.n.02', 'name': 'bongo'}, {'id': 4554, 'synset': 'kudu.n.01', 'name': 'kudu'}, {'id': 4555, 'synset': 'greater_kudu.n.01', 'name': 'greater_kudu'}, {'id': 4556, 'synset': 'lesser_kudu.n.01', 'name': 'lesser_kudu'}, {'id': 4557, 'synset': 'harnessed_antelope.n.01', 'name': 'harnessed_antelope'}, {'id': 4558, 'synset': 'nyala.n.02', 'name': 'nyala'}, {'id': 4559, 'synset': 'mountain_nyala.n.01', 'name': 'mountain_nyala'}, {'id': 4560, 'synset': 'bushbuck.n.01', 'name': 'bushbuck'}, {'id': 4561, 'synset': 'nilgai.n.01', 'name': 'nilgai'}, {'id': 4562, 'synset': 'sable_antelope.n.01', 'name': 'sable_antelope'}, {'id': 4563, 'synset': 'saiga.n.01', 'name': 'saiga'}, {'id': 4564, 'synset': 'steenbok.n.01', 'name': 'steenbok'}, {'id': 4565, 'synset': 'eland.n.01', 'name': 'eland'}, {'id': 4566, 'synset': 'common_eland.n.01', 'name': 'common_eland'}, {'id': 4567, 'synset': 'giant_eland.n.01', 'name': 'giant_eland'}, {'id': 4568, 'synset': 'kob.n.01', 'name': 'kob'}, {'id': 4569, 'synset': 'lechwe.n.01', 'name': 'lechwe'}, {'id': 4570, 'synset': 'waterbuck.n.01', 'name': 'waterbuck'}, {'id': 4571, 'synset': 'puku.n.01', 'name': 'puku'}, {'id': 4572, 'synset': 'oryx.n.01', 'name': 'oryx'}, {'id': 4573, 'synset': 'gemsbok.n.01', 'name': 'gemsbok'}, {'id': 4574, 'synset': 'forest_goat.n.01', 'name': 'forest_goat'}, {'id': 4575, 'synset': 'pronghorn.n.01', 'name': 'pronghorn'}, {'id': 4576, 'synset': 'stag.n.02', 'name': 'stag'}, {'id': 4577, 'synset': 'royal.n.02', 'name': 'royal'}, {'id': 4578, 'synset': 'pricket.n.02', 'name': 'pricket'}, {'id': 4579, 'synset': 'fawn.n.02', 'name': 'fawn'}, {'id': 4580, 'synset': 'red_deer.n.01', 'name': 'red_deer'}, {'id': 4581, 'synset': 'hart.n.03', 'name': 'hart'}, {'id': 4582, 'synset': 'hind.n.02', 'name': 'hind'}, {'id': 4583, 'synset': 'brocket.n.02', 'name': 'brocket'}, {'id': 4584, 'synset': 'sambar.n.01', 'name': 'sambar'}, {'id': 4585, 'synset': 'wapiti.n.01', 'name': 'wapiti'}, {'id': 4586, 'synset': 'japanese_deer.n.01', 'name': 'Japanese_deer'}, {'id': 4587, 'synset': 'virginia_deer.n.01', 'name': 'Virginia_deer'}, {'id': 4588, 'synset': 'mule_deer.n.01', 'name': 'mule_deer'}, {'id': 4589, 'synset': 'black-tailed_deer.n.01', 'name': 'black-tailed_deer'}, {'id': 4590, 'synset': 'fallow_deer.n.01', 'name': 'fallow_deer'}, {'id': 4591, 'synset': 'roe_deer.n.01', 'name': 'roe_deer'}, {'id': 4592, 'synset': 'roebuck.n.01', 'name': 'roebuck'}, {'id': 4593, 'synset': 'caribou.n.01', 'name': 'caribou'}, {'id': 4594, 'synset': 'woodland_caribou.n.01', 'name': 'woodland_caribou'}, {'id': 4595, 'synset': 'barren_ground_caribou.n.01', 'name': 'barren_ground_caribou'}, {'id': 4596, 'synset': 'brocket.n.01', 'name': 'brocket'}, {'id': 4597, 'synset': 'muntjac.n.01', 'name': 'muntjac'}, {'id': 4598, 'synset': 'musk_deer.n.01', 'name': 'musk_deer'}, {'id': 4599, 'synset': "pere_david's_deer.n.01", 'name': "pere_david's_deer"}, {'id': 4600, 'synset': 'chevrotain.n.01', 'name': 'chevrotain'}, {'id': 4601, 'synset': 'kanchil.n.01', 'name': 'kanchil'}, {'id': 4602, 'synset': 'napu.n.01', 'name': 'napu'}, {'id': 4603, 'synset': 'water_chevrotain.n.01', 'name': 'water_chevrotain'}, {'id': 4604, 'synset': 'arabian_camel.n.01', 'name': 'Arabian_camel'}, {'id': 4605, 'synset': 'bactrian_camel.n.01', 'name': 'Bactrian_camel'}, {'id': 4606, 'synset': 'llama.n.01', 'name': 'llama'}, {'id': 4607, 'synset': 'domestic_llama.n.01', 'name': 'domestic_llama'}, {'id': 4608, 'synset': 'guanaco.n.01', 'name': 'guanaco'}, {'id': 4609, 'synset': 'alpaca.n.03', 'name': 'alpaca'}, {'id': 4610, 'synset': 'vicuna.n.03', 'name': 'vicuna'}, {'id': 4611, 'synset': 'okapi.n.01', 'name': 'okapi'}, {'id': 4612, 'synset': 'musteline_mammal.n.01', 'name': 'musteline_mammal'}, {'id': 4613, 'synset': 'weasel.n.02', 'name': 'weasel'}, {'id': 4614, 'synset': 'ermine.n.02', 'name': 'ermine'}, {'id': 4615, 'synset': 'stoat.n.01', 'name': 'stoat'}, {'id': 4616, 'synset': 'new_world_least_weasel.n.01', 'name': 'New_World_least_weasel'}, {'id': 4617, 'synset': 'old_world_least_weasel.n.01', 'name': 'Old_World_least_weasel'}, {'id': 4618, 'synset': 'longtail_weasel.n.01', 'name': 'longtail_weasel'}, {'id': 4619, 'synset': 'mink.n.03', 'name': 'mink'}, {'id': 4620, 'synset': 'american_mink.n.01', 'name': 'American_mink'}, {'id': 4621, 'synset': 'polecat.n.02', 'name': 'polecat'}, {'id': 4622, 'synset': 'black-footed_ferret.n.01', 'name': 'black-footed_ferret'}, {'id': 4623, 'synset': 'muishond.n.01', 'name': 'muishond'}, {'id': 4624, 'synset': 'snake_muishond.n.01', 'name': 'snake_muishond'}, {'id': 4625, 'synset': 'striped_muishond.n.01', 'name': 'striped_muishond'}, {'id': 4626, 'synset': 'otter.n.02', 'name': 'otter'}, {'id': 4627, 'synset': 'river_otter.n.01', 'name': 'river_otter'}, {'id': 4628, 'synset': 'eurasian_otter.n.01', 'name': 'Eurasian_otter'}, {'id': 4629, 'synset': 'sea_otter.n.01', 'name': 'sea_otter'}, {'id': 4630, 'synset': 'skunk.n.04', 'name': 'skunk'}, {'id': 4631, 'synset': 'striped_skunk.n.01', 'name': 'striped_skunk'}, {'id': 4632, 'synset': 'hooded_skunk.n.01', 'name': 'hooded_skunk'}, {'id': 4633, 'synset': 'hog-nosed_skunk.n.01', 'name': 'hog-nosed_skunk'}, {'id': 4634, 'synset': 'spotted_skunk.n.01', 'name': 'spotted_skunk'}, {'id': 4635, 'synset': 'badger.n.02', 'name': 'badger'}, {'id': 4636, 'synset': 'american_badger.n.01', 'name': 'American_badger'}, {'id': 4637, 'synset': 'eurasian_badger.n.01', 'name': 'Eurasian_badger'}, {'id': 4638, 'synset': 'ratel.n.01', 'name': 'ratel'}, {'id': 4639, 'synset': 'ferret_badger.n.01', 'name': 'ferret_badger'}, {'id': 4640, 'synset': 'hog_badger.n.01', 'name': 'hog_badger'}, {'id': 4641, 'synset': 'wolverine.n.03', 'name': 'wolverine'}, {'id': 4642, 'synset': 'glutton.n.02', 'name': 'glutton'}, {'id': 4643, 'synset': 'grison.n.01', 'name': 'grison'}, {'id': 4644, 'synset': 'marten.n.01', 'name': 'marten'}, {'id': 4645, 'synset': 'pine_marten.n.01', 'name': 'pine_marten'}, {'id': 4646, 'synset': 'sable.n.05', 'name': 'sable'}, {'id': 4647, 'synset': 'american_marten.n.01', 'name': 'American_marten'}, {'id': 4648, 'synset': 'stone_marten.n.01', 'name': 'stone_marten'}, {'id': 4649, 'synset': 'fisher.n.02', 'name': 'fisher'}, {'id': 4650, 'synset': 'yellow-throated_marten.n.01', 'name': 'yellow-throated_marten'}, {'id': 4651, 'synset': 'tayra.n.01', 'name': 'tayra'}, {'id': 4652, 'synset': 'fictional_animal.n.01', 'name': 'fictional_animal'}, {'id': 4653, 'synset': 'pachyderm.n.01', 'name': 'pachyderm'}, {'id': 4654, 'synset': 'edentate.n.01', 'name': 'edentate'}, {'id': 4655, 'synset': 'armadillo.n.01', 'name': 'armadillo'}, {'id': 4656, 'synset': 'peba.n.01', 'name': 'peba'}, {'id': 4657, 'synset': 'apar.n.01', 'name': 'apar'}, {'id': 4658, 'synset': 'tatouay.n.01', 'name': 'tatouay'}, {'id': 4659, 'synset': 'peludo.n.01', 'name': 'peludo'}, {'id': 4660, 'synset': 'giant_armadillo.n.01', 'name': 'giant_armadillo'}, {'id': 4661, 'synset': 'pichiciago.n.01', 'name': 'pichiciago'}, {'id': 4662, 'synset': 'sloth.n.02', 'name': 'sloth'}, {'id': 4663, 'synset': 'three-toed_sloth.n.01', 'name': 'three-toed_sloth'}, {'id': 4664, 'synset': 'two-toed_sloth.n.02', 'name': 'two-toed_sloth'}, {'id': 4665, 'synset': 'two-toed_sloth.n.01', 'name': 'two-toed_sloth'}, {'id': 4666, 'synset': 'megatherian.n.01', 'name': 'megatherian'}, {'id': 4667, 'synset': 'mylodontid.n.01', 'name': 'mylodontid'}, {'id': 4668, 'synset': 'anteater.n.02', 'name': 'anteater'}, {'id': 4669, 'synset': 'ant_bear.n.01', 'name': 'ant_bear'}, {'id': 4670, 'synset': 'silky_anteater.n.01', 'name': 'silky_anteater'}, {'id': 4671, 'synset': 'tamandua.n.01', 'name': 'tamandua'}, {'id': 4672, 'synset': 'pangolin.n.01', 'name': 'pangolin'}, {'id': 4673, 'synset': 'coronet.n.02', 'name': 'coronet'}, {'id': 4674, 'synset': 'scapular.n.01', 'name': 'scapular'}, {'id': 4675, 'synset': 'tadpole.n.01', 'name': 'tadpole'}, {'id': 4676, 'synset': 'primate.n.02', 'name': 'primate'}, {'id': 4677, 'synset': 'simian.n.01', 'name': 'simian'}, {'id': 4678, 'synset': 'ape.n.01', 'name': 'ape'}, {'id': 4679, 'synset': 'anthropoid.n.02', 'name': 'anthropoid'}, {'id': 4680, 'synset': 'anthropoid_ape.n.01', 'name': 'anthropoid_ape'}, {'id': 4681, 'synset': 'hominoid.n.01', 'name': 'hominoid'}, {'id': 4682, 'synset': 'hominid.n.01', 'name': 'hominid'}, {'id': 4683, 'synset': 'homo.n.02', 'name': 'homo'}, {'id': 4684, 'synset': 'world.n.08', 'name': 'world'}, {'id': 4685, 'synset': 'homo_erectus.n.01', 'name': 'Homo_erectus'}, {'id': 4686, 'synset': 'pithecanthropus.n.01', 'name': 'Pithecanthropus'}, {'id': 4687, 'synset': 'java_man.n.01', 'name': 'Java_man'}, {'id': 4688, 'synset': 'peking_man.n.01', 'name': 'Peking_man'}, {'id': 4689, 'synset': 'sinanthropus.n.01', 'name': 'Sinanthropus'}, {'id': 4690, 'synset': 'homo_soloensis.n.01', 'name': 'Homo_soloensis'}, {'id': 4691, 'synset': 'javanthropus.n.01', 'name': 'Javanthropus'}, {'id': 4692, 'synset': 'homo_habilis.n.01', 'name': 'Homo_habilis'}, {'id': 4693, 'synset': 'homo_sapiens.n.01', 'name': 'Homo_sapiens'}, {'id': 4694, 'synset': 'neandertal_man.n.01', 'name': 'Neandertal_man'}, {'id': 4695, 'synset': 'cro-magnon.n.01', 'name': 'Cro-magnon'}, {'id': 4696, 'synset': 'homo_sapiens_sapiens.n.01', 'name': 'Homo_sapiens_sapiens'}, {'id': 4697, 'synset': 'australopithecine.n.01', 'name': 'australopithecine'}, {'id': 4698, 'synset': 'australopithecus_afarensis.n.01', 'name': 'Australopithecus_afarensis'}, {'id': 4699, 'synset': 'australopithecus_africanus.n.01', 'name': 'Australopithecus_africanus'}, {'id': 4700, 'synset': 'australopithecus_boisei.n.01', 'name': 'Australopithecus_boisei'}, {'id': 4701, 'synset': 'zinjanthropus.n.01', 'name': 'Zinjanthropus'}, {'id': 4702, 'synset': 'australopithecus_robustus.n.01', 'name': 'Australopithecus_robustus'}, {'id': 4703, 'synset': 'paranthropus.n.01', 'name': 'Paranthropus'}, {'id': 4704, 'synset': 'sivapithecus.n.01', 'name': 'Sivapithecus'}, {'id': 4705, 'synset': 'rudapithecus.n.01', 'name': 'rudapithecus'}, {'id': 4706, 'synset': 'proconsul.n.03', 'name': 'proconsul'}, {'id': 4707, 'synset': 'aegyptopithecus.n.01', 'name': 'Aegyptopithecus'}, {'id': 4708, 'synset': 'great_ape.n.01', 'name': 'great_ape'}, {'id': 4709, 'synset': 'orangutan.n.01', 'name': 'orangutan'}, {'id': 4710, 'synset': 'western_lowland_gorilla.n.01', 'name': 'western_lowland_gorilla'}, {'id': 4711, 'synset': 'eastern_lowland_gorilla.n.01', 'name': 'eastern_lowland_gorilla'}, {'id': 4712, 'synset': 'mountain_gorilla.n.01', 'name': 'mountain_gorilla'}, {'id': 4713, 'synset': 'silverback.n.01', 'name': 'silverback'}, {'id': 4714, 'synset': 'chimpanzee.n.01', 'name': 'chimpanzee'}, {'id': 4715, 'synset': 'western_chimpanzee.n.01', 'name': 'western_chimpanzee'}, {'id': 4716, 'synset': 'eastern_chimpanzee.n.01', 'name': 'eastern_chimpanzee'}, {'id': 4717, 'synset': 'central_chimpanzee.n.01', 'name': 'central_chimpanzee'}, {'id': 4718, 'synset': 'pygmy_chimpanzee.n.01', 'name': 'pygmy_chimpanzee'}, {'id': 4719, 'synset': 'lesser_ape.n.01', 'name': 'lesser_ape'}, {'id': 4720, 'synset': 'gibbon.n.02', 'name': 'gibbon'}, {'id': 4721, 'synset': 'siamang.n.01', 'name': 'siamang'}, {'id': 4722, 'synset': 'old_world_monkey.n.01', 'name': 'Old_World_monkey'}, {'id': 4723, 'synset': 'guenon.n.01', 'name': 'guenon'}, {'id': 4724, 'synset': 'talapoin.n.01', 'name': 'talapoin'}, {'id': 4725, 'synset': 'grivet.n.01', 'name': 'grivet'}, {'id': 4726, 'synset': 'vervet.n.01', 'name': 'vervet'}, {'id': 4727, 'synset': 'green_monkey.n.01', 'name': 'green_monkey'}, {'id': 4728, 'synset': 'mangabey.n.01', 'name': 'mangabey'}, {'id': 4729, 'synset': 'patas.n.01', 'name': 'patas'}, {'id': 4730, 'synset': 'chacma.n.01', 'name': 'chacma'}, {'id': 4731, 'synset': 'mandrill.n.01', 'name': 'mandrill'}, {'id': 4732, 'synset': 'drill.n.02', 'name': 'drill'}, {'id': 4733, 'synset': 'macaque.n.01', 'name': 'macaque'}, {'id': 4734, 'synset': 'rhesus.n.01', 'name': 'rhesus'}, {'id': 4735, 'synset': 'bonnet_macaque.n.01', 'name': 'bonnet_macaque'}, {'id': 4736, 'synset': 'barbary_ape.n.01', 'name': 'Barbary_ape'}, {'id': 4737, 'synset': 'crab-eating_macaque.n.01', 'name': 'crab-eating_macaque'}, {'id': 4738, 'synset': 'langur.n.01', 'name': 'langur'}, {'id': 4739, 'synset': 'entellus.n.01', 'name': 'entellus'}, {'id': 4740, 'synset': 'colobus.n.01', 'name': 'colobus'}, {'id': 4741, 'synset': 'guereza.n.01', 'name': 'guereza'}, {'id': 4742, 'synset': 'proboscis_monkey.n.01', 'name': 'proboscis_monkey'}, {'id': 4743, 'synset': 'new_world_monkey.n.01', 'name': 'New_World_monkey'}, {'id': 4744, 'synset': 'marmoset.n.01', 'name': 'marmoset'}, {'id': 4745, 'synset': 'true_marmoset.n.01', 'name': 'true_marmoset'}, {'id': 4746, 'synset': 'pygmy_marmoset.n.01', 'name': 'pygmy_marmoset'}, {'id': 4747, 'synset': 'tamarin.n.01', 'name': 'tamarin'}, {'id': 4748, 'synset': 'silky_tamarin.n.01', 'name': 'silky_tamarin'}, {'id': 4749, 'synset': 'pinche.n.01', 'name': 'pinche'}, {'id': 4750, 'synset': 'capuchin.n.02', 'name': 'capuchin'}, {'id': 4751, 'synset': 'douroucouli.n.01', 'name': 'douroucouli'}, {'id': 4752, 'synset': 'howler_monkey.n.01', 'name': 'howler_monkey'}, {'id': 4753, 'synset': 'saki.n.03', 'name': 'saki'}, {'id': 4754, 'synset': 'uakari.n.01', 'name': 'uakari'}, {'id': 4755, 'synset': 'titi.n.03', 'name': 'titi'}, {'id': 4756, 'synset': 'spider_monkey.n.01', 'name': 'spider_monkey'}, {'id': 4757, 'synset': 'squirrel_monkey.n.01', 'name': 'squirrel_monkey'}, {'id': 4758, 'synset': 'woolly_monkey.n.01', 'name': 'woolly_monkey'}, {'id': 4759, 'synset': 'tree_shrew.n.01', 'name': 'tree_shrew'}, {'id': 4760, 'synset': 'prosimian.n.01', 'name': 'prosimian'}, {'id': 4761, 'synset': 'lemur.n.01', 'name': 'lemur'}, {'id': 4762, 'synset': 'madagascar_cat.n.01', 'name': 'Madagascar_cat'}, {'id': 4763, 'synset': 'aye-aye.n.01', 'name': 'aye-aye'}, {'id': 4764, 'synset': 'slender_loris.n.01', 'name': 'slender_loris'}, {'id': 4765, 'synset': 'slow_loris.n.01', 'name': 'slow_loris'}, {'id': 4766, 'synset': 'potto.n.02', 'name': 'potto'}, {'id': 4767, 'synset': 'angwantibo.n.01', 'name': 'angwantibo'}, {'id': 4768, 'synset': 'galago.n.01', 'name': 'galago'}, {'id': 4769, 'synset': 'indri.n.01', 'name': 'indri'}, {'id': 4770, 'synset': 'woolly_indris.n.01', 'name': 'woolly_indris'}, {'id': 4771, 'synset': 'tarsier.n.01', 'name': 'tarsier'}, {'id': 4772, 'synset': 'tarsius_syrichta.n.01', 'name': 'Tarsius_syrichta'}, {'id': 4773, 'synset': 'tarsius_glis.n.01', 'name': 'Tarsius_glis'}, {'id': 4774, 'synset': 'flying_lemur.n.01', 'name': 'flying_lemur'}, {'id': 4775, 'synset': 'cynocephalus_variegatus.n.01', 'name': 'Cynocephalus_variegatus'}, {'id': 4776, 'synset': 'proboscidean.n.01', 'name': 'proboscidean'}, {'id': 4777, 'synset': 'rogue_elephant.n.01', 'name': 'rogue_elephant'}, {'id': 4778, 'synset': 'indian_elephant.n.01', 'name': 'Indian_elephant'}, {'id': 4779, 'synset': 'african_elephant.n.01', 'name': 'African_elephant'}, {'id': 4780, 'synset': 'woolly_mammoth.n.01', 'name': 'woolly_mammoth'}, {'id': 4781, 'synset': 'columbian_mammoth.n.01', 'name': 'columbian_mammoth'}, {'id': 4782, 'synset': 'imperial_mammoth.n.01', 'name': 'imperial_mammoth'}, {'id': 4783, 'synset': 'mastodon.n.01', 'name': 'mastodon'}, {'id': 4784, 'synset': 'plantigrade_mammal.n.01', 'name': 'plantigrade_mammal'}, {'id': 4785, 'synset': 'digitigrade_mammal.n.01', 'name': 'digitigrade_mammal'}, {'id': 4786, 'synset': 'procyonid.n.01', 'name': 'procyonid'}, {'id': 4787, 'synset': 'raccoon.n.02', 'name': 'raccoon'}, {'id': 4788, 'synset': 'common_raccoon.n.01', 'name': 'common_raccoon'}, {'id': 4789, 'synset': 'crab-eating_raccoon.n.01', 'name': 'crab-eating_raccoon'}, {'id': 4790, 'synset': 'bassarisk.n.01', 'name': 'bassarisk'}, {'id': 4791, 'synset': 'kinkajou.n.01', 'name': 'kinkajou'}, {'id': 4792, 'synset': 'coati.n.01', 'name': 'coati'}, {'id': 4793, 'synset': 'lesser_panda.n.01', 'name': 'lesser_panda'}, {'id': 4794, 'synset': 'twitterer.n.01', 'name': 'twitterer'}, {'id': 4795, 'synset': 'fingerling.n.01', 'name': 'fingerling'}, {'id': 4796, 'synset': 'game_fish.n.01', 'name': 'game_fish'}, {'id': 4797, 'synset': 'food_fish.n.01', 'name': 'food_fish'}, {'id': 4798, 'synset': 'rough_fish.n.01', 'name': 'rough_fish'}, {'id': 4799, 'synset': 'groundfish.n.01', 'name': 'groundfish'}, {'id': 4800, 'synset': 'young_fish.n.01', 'name': 'young_fish'}, {'id': 4801, 'synset': 'parr.n.03', 'name': 'parr'}, {'id': 4802, 'synset': 'mouthbreeder.n.01', 'name': 'mouthbreeder'}, {'id': 4803, 'synset': 'spawner.n.01', 'name': 'spawner'}, {'id': 4804, 'synset': 'barracouta.n.01', 'name': 'barracouta'}, {'id': 4805, 'synset': 'crossopterygian.n.01', 'name': 'crossopterygian'}, {'id': 4806, 'synset': 'coelacanth.n.01', 'name': 'coelacanth'}, {'id': 4807, 'synset': 'lungfish.n.01', 'name': 'lungfish'}, {'id': 4808, 'synset': 'ceratodus.n.01', 'name': 'ceratodus'}, {'id': 4809, 'synset': 'catfish.n.03', 'name': 'catfish'}, {'id': 4810, 'synset': 'silurid.n.01', 'name': 'silurid'}, {'id': 4811, 'synset': 'european_catfish.n.01', 'name': 'European_catfish'}, {'id': 4812, 'synset': 'electric_catfish.n.01', 'name': 'electric_catfish'}, {'id': 4813, 'synset': 'bullhead.n.02', 'name': 'bullhead'}, {'id': 4814, 'synset': 'horned_pout.n.01', 'name': 'horned_pout'}, {'id': 4815, 'synset': 'brown_bullhead.n.01', 'name': 'brown_bullhead'}, {'id': 4816, 'synset': 'channel_catfish.n.01', 'name': 'channel_catfish'}, {'id': 4817, 'synset': 'blue_catfish.n.01', 'name': 'blue_catfish'}, {'id': 4818, 'synset': 'flathead_catfish.n.01', 'name': 'flathead_catfish'}, {'id': 4819, 'synset': 'armored_catfish.n.01', 'name': 'armored_catfish'}, {'id': 4820, 'synset': 'sea_catfish.n.01', 'name': 'sea_catfish'}, {'id': 4821, 'synset': 'gadoid.n.01', 'name': 'gadoid'}, {'id': 4822, 'synset': 'cod.n.03', 'name': 'cod'}, {'id': 4823, 'synset': 'codling.n.01', 'name': 'codling'}, {'id': 4824, 'synset': 'atlantic_cod.n.01', 'name': 'Atlantic_cod'}, {'id': 4825, 'synset': 'pacific_cod.n.01', 'name': 'Pacific_cod'}, {'id': 4826, 'synset': 'whiting.n.06', 'name': 'whiting'}, {'id': 4827, 'synset': 'burbot.n.01', 'name': 'burbot'}, {'id': 4828, 'synset': 'haddock.n.02', 'name': 'haddock'}, {'id': 4829, 'synset': 'pollack.n.03', 'name': 'pollack'}, {'id': 4830, 'synset': 'hake.n.02', 'name': 'hake'}, {'id': 4831, 'synset': 'silver_hake.n.01', 'name': 'silver_hake'}, {'id': 4832, 'synset': 'ling.n.04', 'name': 'ling'}, {'id': 4833, 'synset': 'cusk.n.02', 'name': 'cusk'}, {'id': 4834, 'synset': 'grenadier.n.02', 'name': 'grenadier'}, {'id': 4835, 'synset': 'eel.n.02', 'name': 'eel'}, {'id': 4836, 'synset': 'elver.n.02', 'name': 'elver'}, {'id': 4837, 'synset': 'common_eel.n.01', 'name': 'common_eel'}, {'id': 4838, 'synset': 'tuna.n.04', 'name': 'tuna'}, {'id': 4839, 'synset': 'moray.n.01', 'name': 'moray'}, {'id': 4840, 'synset': 'conger.n.01', 'name': 'conger'}, {'id': 4841, 'synset': 'teleost_fish.n.01', 'name': 'teleost_fish'}, {'id': 4842, 'synset': 'beaked_salmon.n.01', 'name': 'beaked_salmon'}, {'id': 4843, 'synset': 'clupeid_fish.n.01', 'name': 'clupeid_fish'}, {'id': 4844, 'synset': 'whitebait.n.02', 'name': 'whitebait'}, {'id': 4845, 'synset': 'brit.n.02', 'name': 'brit'}, {'id': 4846, 'synset': 'shad.n.02', 'name': 'shad'}, {'id': 4847, 'synset': 'common_american_shad.n.01', 'name': 'common_American_shad'}, {'id': 4848, 'synset': 'river_shad.n.01', 'name': 'river_shad'}, {'id': 4849, 'synset': 'allice_shad.n.01', 'name': 'allice_shad'}, {'id': 4850, 'synset': 'alewife.n.02', 'name': 'alewife'}, {'id': 4851, 'synset': 'menhaden.n.01', 'name': 'menhaden'}, {'id': 4852, 'synset': 'herring.n.02', 'name': 'herring'}, {'id': 4853, 'synset': 'atlantic_herring.n.01', 'name': 'Atlantic_herring'}, {'id': 4854, 'synset': 'pacific_herring.n.01', 'name': 'Pacific_herring'}, {'id': 4855, 'synset': 'sardine.n.02', 'name': 'sardine'}, {'id': 4856, 'synset': 'sild.n.01', 'name': 'sild'}, {'id': 4857, 'synset': 'brisling.n.02', 'name': 'brisling'}, {'id': 4858, 'synset': 'pilchard.n.02', 'name': 'pilchard'}, {'id': 4859, 'synset': 'pacific_sardine.n.01', 'name': 'Pacific_sardine'}, {'id': 4860, 'synset': 'anchovy.n.02', 'name': 'anchovy'}, {'id': 4861, 'synset': 'mediterranean_anchovy.n.01', 'name': 'mediterranean_anchovy'}, {'id': 4862, 'synset': 'salmonid.n.01', 'name': 'salmonid'}, {'id': 4863, 'synset': 'parr.n.02', 'name': 'parr'}, {'id': 4864, 'synset': 'blackfish.n.02', 'name': 'blackfish'}, {'id': 4865, 'synset': 'redfish.n.03', 'name': 'redfish'}, {'id': 4866, 'synset': 'atlantic_salmon.n.02', 'name': 'Atlantic_salmon'}, {'id': 4867, 'synset': 'landlocked_salmon.n.01', 'name': 'landlocked_salmon'}, {'id': 4868, 'synset': 'sockeye.n.02', 'name': 'sockeye'}, {'id': 4869, 'synset': 'chinook.n.05', 'name': 'chinook'}, {'id': 4870, 'synset': 'coho.n.02', 'name': 'coho'}, {'id': 4871, 'synset': 'trout.n.02', 'name': 'trout'}, {'id': 4872, 'synset': 'brown_trout.n.01', 'name': 'brown_trout'}, {'id': 4873, 'synset': 'rainbow_trout.n.02', 'name': 'rainbow_trout'}, {'id': 4874, 'synset': 'sea_trout.n.03', 'name': 'sea_trout'}, {'id': 4875, 'synset': 'lake_trout.n.02', 'name': 'lake_trout'}, {'id': 4876, 'synset': 'brook_trout.n.02', 'name': 'brook_trout'}, {'id': 4877, 'synset': 'char.n.03', 'name': 'char'}, {'id': 4878, 'synset': 'arctic_char.n.01', 'name': 'Arctic_char'}, {'id': 4879, 'synset': 'whitefish.n.03', 'name': 'whitefish'}, {'id': 4880, 'synset': 'lake_whitefish.n.01', 'name': 'lake_whitefish'}, {'id': 4881, 'synset': 'cisco.n.02', 'name': 'cisco'}, {'id': 4882, 'synset': 'round_whitefish.n.01', 'name': 'round_whitefish'}, {'id': 4883, 'synset': 'smelt.n.02', 'name': 'smelt'}, {'id': 4884, 'synset': 'sparling.n.02', 'name': 'sparling'}, {'id': 4885, 'synset': 'capelin.n.01', 'name': 'capelin'}, {'id': 4886, 'synset': 'tarpon.n.01', 'name': 'tarpon'}, {'id': 4887, 'synset': 'ladyfish.n.01', 'name': 'ladyfish'}, {'id': 4888, 'synset': 'bonefish.n.01', 'name': 'bonefish'}, {'id': 4889, 'synset': 'argentine.n.01', 'name': 'argentine'}, {'id': 4890, 'synset': 'lanternfish.n.01', 'name': 'lanternfish'}, {'id': 4891, 'synset': 'lizardfish.n.01', 'name': 'lizardfish'}, {'id': 4892, 'synset': 'lancetfish.n.01', 'name': 'lancetfish'}, {'id': 4893, 'synset': 'opah.n.01', 'name': 'opah'}, {'id': 4894, 'synset': 'new_world_opah.n.01', 'name': 'New_World_opah'}, {'id': 4895, 'synset': 'ribbonfish.n.02', 'name': 'ribbonfish'}, {'id': 4896, 'synset': 'dealfish.n.01', 'name': 'dealfish'}, {'id': 4897, 'synset': 'oarfish.n.01', 'name': 'oarfish'}, {'id': 4898, 'synset': 'batfish.n.01', 'name': 'batfish'}, {'id': 4899, 'synset': 'goosefish.n.01', 'name': 'goosefish'}, {'id': 4900, 'synset': 'toadfish.n.01', 'name': 'toadfish'}, {'id': 4901, 'synset': 'oyster_fish.n.01', 'name': 'oyster_fish'}, {'id': 4902, 'synset': 'frogfish.n.01', 'name': 'frogfish'}, {'id': 4903, 'synset': 'sargassum_fish.n.01', 'name': 'sargassum_fish'}, {'id': 4904, 'synset': 'needlefish.n.01', 'name': 'needlefish'}, {'id': 4905, 'synset': 'timucu.n.01', 'name': 'timucu'}, {'id': 4906, 'synset': 'flying_fish.n.01', 'name': 'flying_fish'}, {'id': 4907, 'synset': 'monoplane_flying_fish.n.01', 'name': 'monoplane_flying_fish'}, {'id': 4908, 'synset': 'halfbeak.n.01', 'name': 'halfbeak'}, {'id': 4909, 'synset': 'saury.n.01', 'name': 'saury'}, {'id': 4910, 'synset': 'spiny-finned_fish.n.01', 'name': 'spiny-finned_fish'}, {'id': 4911, 'synset': 'lingcod.n.02', 'name': 'lingcod'}, {'id': 4912, 'synset': 'percoid_fish.n.01', 'name': 'percoid_fish'}, {'id': 4913, 'synset': 'perch.n.07', 'name': 'perch'}, {'id': 4914, 'synset': 'climbing_perch.n.01', 'name': 'climbing_perch'}, {'id': 4915, 'synset': 'perch.n.06', 'name': 'perch'}, {'id': 4916, 'synset': 'yellow_perch.n.01', 'name': 'yellow_perch'}, {'id': 4917, 'synset': 'european_perch.n.01', 'name': 'European_perch'}, {'id': 4918, 'synset': 'pike-perch.n.01', 'name': 'pike-perch'}, {'id': 4919, 'synset': 'walleye.n.02', 'name': 'walleye'}, {'id': 4920, 'synset': 'blue_pike.n.01', 'name': 'blue_pike'}, {'id': 4921, 'synset': 'snail_darter.n.01', 'name': 'snail_darter'}, {'id': 4922, 'synset': 'cusk-eel.n.01', 'name': 'cusk-eel'}, {'id': 4923, 'synset': 'brotula.n.01', 'name': 'brotula'}, {'id': 4924, 'synset': 'pearlfish.n.01', 'name': 'pearlfish'}, {'id': 4925, 'synset': 'robalo.n.01', 'name': 'robalo'}, {'id': 4926, 'synset': 'snook.n.01', 'name': 'snook'}, {'id': 4927, 'synset': 'pike.n.05', 'name': 'pike'}, {'id': 4928, 'synset': 'northern_pike.n.01', 'name': 'northern_pike'}, {'id': 4929, 'synset': 'muskellunge.n.02', 'name': 'muskellunge'}, {'id': 4930, 'synset': 'pickerel.n.02', 'name': 'pickerel'}, {'id': 4931, 'synset': 'chain_pickerel.n.01', 'name': 'chain_pickerel'}, {'id': 4932, 'synset': 'redfin_pickerel.n.01', 'name': 'redfin_pickerel'}, {'id': 4933, 'synset': 'sunfish.n.03', 'name': 'sunfish'}, {'id': 4934, 'synset': 'crappie.n.02', 'name': 'crappie'}, {'id': 4935, 'synset': 'black_crappie.n.01', 'name': 'black_crappie'}, {'id': 4936, 'synset': 'white_crappie.n.01', 'name': 'white_crappie'}, {'id': 4937, 'synset': 'freshwater_bream.n.02', 'name': 'freshwater_bream'}, {'id': 4938, 'synset': 'pumpkinseed.n.01', 'name': 'pumpkinseed'}, {'id': 4939, 'synset': 'bluegill.n.01', 'name': 'bluegill'}, {'id': 4940, 'synset': 'spotted_sunfish.n.01', 'name': 'spotted_sunfish'}, {'id': 4941, 'synset': 'freshwater_bass.n.02', 'name': 'freshwater_bass'}, {'id': 4942, 'synset': 'rock_bass.n.02', 'name': 'rock_bass'}, {'id': 4943, 'synset': 'black_bass.n.02', 'name': 'black_bass'}, {'id': 4944, 'synset': 'kentucky_black_bass.n.01', 'name': 'Kentucky_black_bass'}, {'id': 4945, 'synset': 'smallmouth.n.01', 'name': 'smallmouth'}, {'id': 4946, 'synset': 'largemouth.n.01', 'name': 'largemouth'}, {'id': 4947, 'synset': 'bass.n.08', 'name': 'bass'}, {'id': 4948, 'synset': 'serranid_fish.n.01', 'name': 'serranid_fish'}, {'id': 4949, 'synset': 'white_perch.n.01', 'name': 'white_perch'}, {'id': 4950, 'synset': 'yellow_bass.n.01', 'name': 'yellow_bass'}, {'id': 4951, 'synset': 'blackmouth_bass.n.01', 'name': 'blackmouth_bass'}, {'id': 4952, 'synset': 'rock_sea_bass.n.01', 'name': 'rock_sea_bass'}, {'id': 4953, 'synset': 'striped_bass.n.02', 'name': 'striped_bass'}, {'id': 4954, 'synset': 'stone_bass.n.01', 'name': 'stone_bass'}, {'id': 4955, 'synset': 'grouper.n.02', 'name': 'grouper'}, {'id': 4956, 'synset': 'hind.n.01', 'name': 'hind'}, {'id': 4957, 'synset': 'rock_hind.n.01', 'name': 'rock_hind'}, {'id': 4958, 'synset': 'creole-fish.n.01', 'name': 'creole-fish'}, {'id': 4959, 'synset': 'jewfish.n.02', 'name': 'jewfish'}, {'id': 4960, 'synset': 'soapfish.n.01', 'name': 'soapfish'}, {'id': 4961, 'synset': 'surfperch.n.01', 'name': 'surfperch'}, {'id': 4962, 'synset': 'rainbow_seaperch.n.01', 'name': 'rainbow_seaperch'}, {'id': 4963, 'synset': 'bigeye.n.01', 'name': 'bigeye'}, {'id': 4964, 'synset': 'catalufa.n.01', 'name': 'catalufa'}, {'id': 4965, 'synset': 'cardinalfish.n.01', 'name': 'cardinalfish'}, {'id': 4966, 'synset': 'flame_fish.n.01', 'name': 'flame_fish'}, {'id': 4967, 'synset': 'tilefish.n.02', 'name': 'tilefish'}, {'id': 4968, 'synset': 'bluefish.n.01', 'name': 'bluefish'}, {'id': 4969, 'synset': 'cobia.n.01', 'name': 'cobia'}, {'id': 4970, 'synset': 'remora.n.01', 'name': 'remora'}, {'id': 4971, 'synset': 'sharksucker.n.01', 'name': 'sharksucker'}, {'id': 4972, 'synset': 'whale_sucker.n.01', 'name': 'whale_sucker'}, {'id': 4973, 'synset': 'carangid_fish.n.01', 'name': 'carangid_fish'}, {'id': 4974, 'synset': 'jack.n.11', 'name': 'jack'}, {'id': 4975, 'synset': 'crevalle_jack.n.01', 'name': 'crevalle_jack'}, {'id': 4976, 'synset': 'yellow_jack.n.03', 'name': 'yellow_jack'}, {'id': 4977, 'synset': 'runner.n.10', 'name': 'runner'}, {'id': 4978, 'synset': 'rainbow_runner.n.01', 'name': 'rainbow_runner'}, {'id': 4979, 'synset': 'leatherjacket.n.02', 'name': 'leatherjacket'}, {'id': 4980, 'synset': 'threadfish.n.01', 'name': 'threadfish'}, {'id': 4981, 'synset': 'moonfish.n.01', 'name': 'moonfish'}, {'id': 4982, 'synset': 'lookdown.n.01', 'name': 'lookdown'}, {'id': 4983, 'synset': 'amberjack.n.01', 'name': 'amberjack'}, {'id': 4984, 'synset': 'yellowtail.n.02', 'name': 'yellowtail'}, {'id': 4985, 'synset': 'kingfish.n.05', 'name': 'kingfish'}, {'id': 4986, 'synset': 'pompano.n.02', 'name': 'pompano'}, {'id': 4987, 'synset': 'florida_pompano.n.01', 'name': 'Florida_pompano'}, {'id': 4988, 'synset': 'permit.n.03', 'name': 'permit'}, {'id': 4989, 'synset': 'scad.n.01', 'name': 'scad'}, {'id': 4990, 'synset': 'horse_mackerel.n.03', 'name': 'horse_mackerel'}, {'id': 4991, 'synset': 'horse_mackerel.n.02', 'name': 'horse_mackerel'}, {'id': 4992, 'synset': 'bigeye_scad.n.01', 'name': 'bigeye_scad'}, {'id': 4993, 'synset': 'mackerel_scad.n.01', 'name': 'mackerel_scad'}, {'id': 4994, 'synset': 'round_scad.n.01', 'name': 'round_scad'}, {'id': 4995, 'synset': 'dolphinfish.n.02', 'name': 'dolphinfish'}, {'id': 4996, 'synset': 'coryphaena_hippurus.n.01', 'name': 'Coryphaena_hippurus'}, {'id': 4997, 'synset': 'coryphaena_equisetis.n.01', 'name': 'Coryphaena_equisetis'}, {'id': 4998, 'synset': 'pomfret.n.01', 'name': 'pomfret'}, {'id': 4999, 'synset': 'characin.n.01', 'name': 'characin'}, {'id': 5000, 'synset': 'tetra.n.01', 'name': 'tetra'}, {'id': 5001, 'synset': 'cardinal_tetra.n.01', 'name': 'cardinal_tetra'}, {'id': 5002, 'synset': 'piranha.n.02', 'name': 'piranha'}, {'id': 5003, 'synset': 'cichlid.n.01', 'name': 'cichlid'}, {'id': 5004, 'synset': 'bolti.n.01', 'name': 'bolti'}, {'id': 5005, 'synset': 'snapper.n.05', 'name': 'snapper'}, {'id': 5006, 'synset': 'red_snapper.n.02', 'name': 'red_snapper'}, {'id': 5007, 'synset': 'grey_snapper.n.01', 'name': 'grey_snapper'}, {'id': 5008, 'synset': 'mutton_snapper.n.01', 'name': 'mutton_snapper'}, {'id': 5009, 'synset': 'schoolmaster.n.03', 'name': 'schoolmaster'}, {'id': 5010, 'synset': 'yellowtail.n.01', 'name': 'yellowtail'}, {'id': 5011, 'synset': 'grunt.n.03', 'name': 'grunt'}, {'id': 5012, 'synset': 'margate.n.01', 'name': 'margate'}, {'id': 5013, 'synset': 'spanish_grunt.n.01', 'name': 'Spanish_grunt'}, {'id': 5014, 'synset': 'tomtate.n.01', 'name': 'tomtate'}, {'id': 5015, 'synset': 'cottonwick.n.01', 'name': 'cottonwick'}, {'id': 5016, 'synset': "sailor's-choice.n.02", 'name': "sailor's-choice"}, {'id': 5017, 'synset': 'porkfish.n.01', 'name': 'porkfish'}, {'id': 5018, 'synset': 'pompon.n.02', 'name': 'pompon'}, {'id': 5019, 'synset': 'pigfish.n.02', 'name': 'pigfish'}, {'id': 5020, 'synset': 'sparid.n.01', 'name': 'sparid'}, {'id': 5021, 'synset': 'sea_bream.n.02', 'name': 'sea_bream'}, {'id': 5022, 'synset': 'porgy.n.02', 'name': 'porgy'}, {'id': 5023, 'synset': 'red_porgy.n.01', 'name': 'red_porgy'}, {'id': 5024, 'synset': 'european_sea_bream.n.01', 'name': 'European_sea_bream'}, {'id': 5025, 'synset': 'atlantic_sea_bream.n.01', 'name': 'Atlantic_sea_bream'}, {'id': 5026, 'synset': 'sheepshead.n.01', 'name': 'sheepshead'}, {'id': 5027, 'synset': 'pinfish.n.01', 'name': 'pinfish'}, {'id': 5028, 'synset': 'sheepshead_porgy.n.01', 'name': 'sheepshead_porgy'}, {'id': 5029, 'synset': 'snapper.n.04', 'name': 'snapper'}, {'id': 5030, 'synset': 'black_bream.n.01', 'name': 'black_bream'}, {'id': 5031, 'synset': 'scup.n.04', 'name': 'scup'}, {'id': 5032, 'synset': 'scup.n.03', 'name': 'scup'}, {'id': 5033, 'synset': 'sciaenid_fish.n.01', 'name': 'sciaenid_fish'}, {'id': 5034, 'synset': 'striped_drum.n.01', 'name': 'striped_drum'}, {'id': 5035, 'synset': 'jackknife-fish.n.01', 'name': 'jackknife-fish'}, {'id': 5036, 'synset': 'silver_perch.n.01', 'name': 'silver_perch'}, {'id': 5037, 'synset': 'red_drum.n.01', 'name': 'red_drum'}, {'id': 5038, 'synset': 'mulloway.n.01', 'name': 'mulloway'}, {'id': 5039, 'synset': 'maigre.n.01', 'name': 'maigre'}, {'id': 5040, 'synset': 'croaker.n.02', 'name': 'croaker'}, {'id': 5041, 'synset': 'atlantic_croaker.n.01', 'name': 'Atlantic_croaker'}, {'id': 5042, 'synset': 'yellowfin_croaker.n.01', 'name': 'yellowfin_croaker'}, {'id': 5043, 'synset': 'whiting.n.04', 'name': 'whiting'}, {'id': 5044, 'synset': 'kingfish.n.04', 'name': 'kingfish'}, {'id': 5045, 'synset': 'king_whiting.n.01', 'name': 'king_whiting'}, {'id': 5046, 'synset': 'northern_whiting.n.01', 'name': 'northern_whiting'}, {'id': 5047, 'synset': 'corbina.n.01', 'name': 'corbina'}, {'id': 5048, 'synset': 'white_croaker.n.02', 'name': 'white_croaker'}, {'id': 5049, 'synset': 'white_croaker.n.01', 'name': 'white_croaker'}, {'id': 5050, 'synset': 'sea_trout.n.02', 'name': 'sea_trout'}, {'id': 5051, 'synset': 'weakfish.n.02', 'name': 'weakfish'}, {'id': 5052, 'synset': 'spotted_weakfish.n.01', 'name': 'spotted_weakfish'}, {'id': 5053, 'synset': 'mullet.n.03', 'name': 'mullet'}, {'id': 5054, 'synset': 'goatfish.n.01', 'name': 'goatfish'}, {'id': 5055, 'synset': 'red_goatfish.n.01', 'name': 'red_goatfish'}, {'id': 5056, 'synset': 'yellow_goatfish.n.01', 'name': 'yellow_goatfish'}, {'id': 5057, 'synset': 'mullet.n.02', 'name': 'mullet'}, {'id': 5058, 'synset': 'striped_mullet.n.01', 'name': 'striped_mullet'}, {'id': 5059, 'synset': 'white_mullet.n.01', 'name': 'white_mullet'}, {'id': 5060, 'synset': 'liza.n.01', 'name': 'liza'}, {'id': 5061, 'synset': 'silversides.n.01', 'name': 'silversides'}, {'id': 5062, 'synset': 'jacksmelt.n.01', 'name': 'jacksmelt'}, {'id': 5063, 'synset': 'barracuda.n.01', 'name': 'barracuda'}, {'id': 5064, 'synset': 'great_barracuda.n.01', 'name': 'great_barracuda'}, {'id': 5065, 'synset': 'sweeper.n.03', 'name': 'sweeper'}, {'id': 5066, 'synset': 'sea_chub.n.01', 'name': 'sea_chub'}, {'id': 5067, 'synset': 'bermuda_chub.n.01', 'name': 'Bermuda_chub'}, {'id': 5068, 'synset': 'spadefish.n.01', 'name': 'spadefish'}, {'id': 5069, 'synset': 'butterfly_fish.n.01', 'name': 'butterfly_fish'}, {'id': 5070, 'synset': 'chaetodon.n.01', 'name': 'chaetodon'}, {'id': 5071, 'synset': 'angelfish.n.01', 'name': 'angelfish'}, {'id': 5072, 'synset': 'rock_beauty.n.01', 'name': 'rock_beauty'}, {'id': 5073, 'synset': 'damselfish.n.01', 'name': 'damselfish'}, {'id': 5074, 'synset': 'beaugregory.n.01', 'name': 'beaugregory'}, {'id': 5075, 'synset': 'anemone_fish.n.01', 'name': 'anemone_fish'}, {'id': 5076, 'synset': 'clown_anemone_fish.n.01', 'name': 'clown_anemone_fish'}, {'id': 5077, 'synset': 'sergeant_major.n.02', 'name': 'sergeant_major'}, {'id': 5078, 'synset': 'wrasse.n.01', 'name': 'wrasse'}, {'id': 5079, 'synset': 'pigfish.n.01', 'name': 'pigfish'}, {'id': 5080, 'synset': 'hogfish.n.01', 'name': 'hogfish'}, {'id': 5081, 'synset': 'slippery_dick.n.01', 'name': 'slippery_dick'}, {'id': 5082, 'synset': 'puddingwife.n.01', 'name': 'puddingwife'}, {'id': 5083, 'synset': 'bluehead.n.01', 'name': 'bluehead'}, {'id': 5084, 'synset': 'pearly_razorfish.n.01', 'name': 'pearly_razorfish'}, {'id': 5085, 'synset': 'tautog.n.01', 'name': 'tautog'}, {'id': 5086, 'synset': 'cunner.n.01', 'name': 'cunner'}, {'id': 5087, 'synset': 'parrotfish.n.01', 'name': 'parrotfish'}, {'id': 5088, 'synset': 'threadfin.n.01', 'name': 'threadfin'}, {'id': 5089, 'synset': 'jawfish.n.01', 'name': 'jawfish'}, {'id': 5090, 'synset': 'stargazer.n.03', 'name': 'stargazer'}, {'id': 5091, 'synset': 'sand_stargazer.n.01', 'name': 'sand_stargazer'}, {'id': 5092, 'synset': 'blenny.n.01', 'name': 'blenny'}, {'id': 5093, 'synset': 'shanny.n.01', 'name': 'shanny'}, {'id': 5094, 'synset': 'molly_miller.n.01', 'name': 'Molly_Miller'}, {'id': 5095, 'synset': 'clinid.n.01', 'name': 'clinid'}, {'id': 5096, 'synset': 'pikeblenny.n.01', 'name': 'pikeblenny'}, {'id': 5097, 'synset': 'bluethroat_pikeblenny.n.01', 'name': 'bluethroat_pikeblenny'}, {'id': 5098, 'synset': 'gunnel.n.02', 'name': 'gunnel'}, {'id': 5099, 'synset': 'rock_gunnel.n.01', 'name': 'rock_gunnel'}, {'id': 5100, 'synset': 'eelblenny.n.01', 'name': 'eelblenny'}, {'id': 5101, 'synset': 'wrymouth.n.01', 'name': 'wrymouth'}, {'id': 5102, 'synset': 'wolffish.n.01', 'name': 'wolffish'}, {'id': 5103, 'synset': 'viviparous_eelpout.n.01', 'name': 'viviparous_eelpout'}, {'id': 5104, 'synset': 'ocean_pout.n.01', 'name': 'ocean_pout'}, {'id': 5105, 'synset': 'sand_lance.n.01', 'name': 'sand_lance'}, {'id': 5106, 'synset': 'dragonet.n.01', 'name': 'dragonet'}, {'id': 5107, 'synset': 'goby.n.01', 'name': 'goby'}, {'id': 5108, 'synset': 'mudskipper.n.01', 'name': 'mudskipper'}, {'id': 5109, 'synset': 'sleeper.n.08', 'name': 'sleeper'}, {'id': 5110, 'synset': 'flathead.n.02', 'name': 'flathead'}, {'id': 5111, 'synset': 'archerfish.n.01', 'name': 'archerfish'}, {'id': 5112, 'synset': 'surgeonfish.n.01', 'name': 'surgeonfish'}, {'id': 5113, 'synset': 'gempylid.n.01', 'name': 'gempylid'}, {'id': 5114, 'synset': 'snake_mackerel.n.01', 'name': 'snake_mackerel'}, {'id': 5115, 'synset': 'escolar.n.01', 'name': 'escolar'}, {'id': 5116, 'synset': 'oilfish.n.01', 'name': 'oilfish'}, {'id': 5117, 'synset': 'cutlassfish.n.01', 'name': 'cutlassfish'}, {'id': 5118, 'synset': 'scombroid.n.01', 'name': 'scombroid'}, {'id': 5119, 'synset': 'mackerel.n.02', 'name': 'mackerel'}, {'id': 5120, 'synset': 'common_mackerel.n.01', 'name': 'common_mackerel'}, {'id': 5121, 'synset': 'spanish_mackerel.n.03', 'name': 'Spanish_mackerel'}, {'id': 5122, 'synset': 'chub_mackerel.n.01', 'name': 'chub_mackerel'}, {'id': 5123, 'synset': 'wahoo.n.03', 'name': 'wahoo'}, {'id': 5124, 'synset': 'spanish_mackerel.n.02', 'name': 'Spanish_mackerel'}, {'id': 5125, 'synset': 'king_mackerel.n.01', 'name': 'king_mackerel'}, {'id': 5126, 'synset': 'scomberomorus_maculatus.n.01', 'name': 'Scomberomorus_maculatus'}, {'id': 5127, 'synset': 'cero.n.01', 'name': 'cero'}, {'id': 5128, 'synset': 'sierra.n.02', 'name': 'sierra'}, {'id': 5129, 'synset': 'tuna.n.03', 'name': 'tuna'}, {'id': 5130, 'synset': 'albacore.n.02', 'name': 'albacore'}, {'id': 5131, 'synset': 'bluefin.n.02', 'name': 'bluefin'}, {'id': 5132, 'synset': 'yellowfin.n.01', 'name': 'yellowfin'}, {'id': 5133, 'synset': 'bonito.n.03', 'name': 'bonito'}, {'id': 5134, 'synset': 'skipjack.n.02', 'name': 'skipjack'}, {'id': 5135, 'synset': 'chile_bonito.n.01', 'name': 'Chile_bonito'}, {'id': 5136, 'synset': 'skipjack.n.01', 'name': 'skipjack'}, {'id': 5137, 'synset': 'bonito.n.02', 'name': 'bonito'}, {'id': 5138, 'synset': 'swordfish.n.02', 'name': 'swordfish'}, {'id': 5139, 'synset': 'sailfish.n.02', 'name': 'sailfish'}, {'id': 5140, 'synset': 'atlantic_sailfish.n.01', 'name': 'Atlantic_sailfish'}, {'id': 5141, 'synset': 'billfish.n.02', 'name': 'billfish'}, {'id': 5142, 'synset': 'marlin.n.01', 'name': 'marlin'}, {'id': 5143, 'synset': 'blue_marlin.n.01', 'name': 'blue_marlin'}, {'id': 5144, 'synset': 'black_marlin.n.01', 'name': 'black_marlin'}, {'id': 5145, 'synset': 'striped_marlin.n.01', 'name': 'striped_marlin'}, {'id': 5146, 'synset': 'white_marlin.n.01', 'name': 'white_marlin'}, {'id': 5147, 'synset': 'spearfish.n.01', 'name': 'spearfish'}, {'id': 5148, 'synset': 'louvar.n.01', 'name': 'louvar'}, {'id': 5149, 'synset': 'dollarfish.n.01', 'name': 'dollarfish'}, {'id': 5150, 'synset': 'palometa.n.01', 'name': 'palometa'}, {'id': 5151, 'synset': 'harvestfish.n.01', 'name': 'harvestfish'}, {'id': 5152, 'synset': 'driftfish.n.01', 'name': 'driftfish'}, {'id': 5153, 'synset': 'barrelfish.n.01', 'name': 'barrelfish'}, {'id': 5154, 'synset': 'clingfish.n.01', 'name': 'clingfish'}, {'id': 5155, 'synset': 'tripletail.n.01', 'name': 'tripletail'}, {'id': 5156, 'synset': 'atlantic_tripletail.n.01', 'name': 'Atlantic_tripletail'}, {'id': 5157, 'synset': 'pacific_tripletail.n.01', 'name': 'Pacific_tripletail'}, {'id': 5158, 'synset': 'mojarra.n.01', 'name': 'mojarra'}, {'id': 5159, 'synset': 'yellowfin_mojarra.n.01', 'name': 'yellowfin_mojarra'}, {'id': 5160, 'synset': 'silver_jenny.n.01', 'name': 'silver_jenny'}, {'id': 5161, 'synset': 'whiting.n.03', 'name': 'whiting'}, {'id': 5162, 'synset': 'ganoid.n.01', 'name': 'ganoid'}, {'id': 5163, 'synset': 'bowfin.n.01', 'name': 'bowfin'}, {'id': 5164, 'synset': 'paddlefish.n.01', 'name': 'paddlefish'}, {'id': 5165, 'synset': 'chinese_paddlefish.n.01', 'name': 'Chinese_paddlefish'}, {'id': 5166, 'synset': 'sturgeon.n.01', 'name': 'sturgeon'}, {'id': 5167, 'synset': 'pacific_sturgeon.n.01', 'name': 'Pacific_sturgeon'}, {'id': 5168, 'synset': 'beluga.n.01', 'name': 'beluga'}, {'id': 5169, 'synset': 'gar.n.01', 'name': 'gar'}, {'id': 5170, 'synset': 'scorpaenoid.n.01', 'name': 'scorpaenoid'}, {'id': 5171, 'synset': 'scorpaenid.n.01', 'name': 'scorpaenid'}, {'id': 5172, 'synset': 'scorpionfish.n.01', 'name': 'scorpionfish'}, {'id': 5173, 'synset': 'plumed_scorpionfish.n.01', 'name': 'plumed_scorpionfish'}, {'id': 5174, 'synset': 'lionfish.n.01', 'name': 'lionfish'}, {'id': 5175, 'synset': 'stonefish.n.01', 'name': 'stonefish'}, {'id': 5176, 'synset': 'rockfish.n.02', 'name': 'rockfish'}, {'id': 5177, 'synset': 'copper_rockfish.n.01', 'name': 'copper_rockfish'}, {'id': 5178, 'synset': 'vermillion_rockfish.n.01', 'name': 'vermillion_rockfish'}, {'id': 5179, 'synset': 'red_rockfish.n.02', 'name': 'red_rockfish'}, {'id': 5180, 'synset': 'rosefish.n.02', 'name': 'rosefish'}, {'id': 5181, 'synset': 'bullhead.n.01', 'name': 'bullhead'}, {'id': 5182, 'synset': "miller's-thumb.n.01", 'name': "miller's-thumb"}, {'id': 5183, 'synset': 'sea_raven.n.01', 'name': 'sea_raven'}, {'id': 5184, 'synset': 'lumpfish.n.01', 'name': 'lumpfish'}, {'id': 5185, 'synset': 'lumpsucker.n.01', 'name': 'lumpsucker'}, {'id': 5186, 'synset': 'pogge.n.01', 'name': 'pogge'}, {'id': 5187, 'synset': 'greenling.n.01', 'name': 'greenling'}, {'id': 5188, 'synset': 'kelp_greenling.n.01', 'name': 'kelp_greenling'}, {'id': 5189, 'synset': 'painted_greenling.n.01', 'name': 'painted_greenling'}, {'id': 5190, 'synset': 'flathead.n.01', 'name': 'flathead'}, {'id': 5191, 'synset': 'gurnard.n.01', 'name': 'gurnard'}, {'id': 5192, 'synset': 'tub_gurnard.n.01', 'name': 'tub_gurnard'}, {'id': 5193, 'synset': 'sea_robin.n.01', 'name': 'sea_robin'}, {'id': 5194, 'synset': 'northern_sea_robin.n.01', 'name': 'northern_sea_robin'}, {'id': 5195, 'synset': 'flying_gurnard.n.01', 'name': 'flying_gurnard'}, {'id': 5196, 'synset': 'plectognath.n.01', 'name': 'plectognath'}, {'id': 5197, 'synset': 'triggerfish.n.01', 'name': 'triggerfish'}, {'id': 5198, 'synset': 'queen_triggerfish.n.01', 'name': 'queen_triggerfish'}, {'id': 5199, 'synset': 'filefish.n.01', 'name': 'filefish'}, {'id': 5200, 'synset': 'leatherjacket.n.01', 'name': 'leatherjacket'}, {'id': 5201, 'synset': 'boxfish.n.01', 'name': 'boxfish'}, {'id': 5202, 'synset': 'cowfish.n.01', 'name': 'cowfish'}, {'id': 5203, 'synset': 'spiny_puffer.n.01', 'name': 'spiny_puffer'}, {'id': 5204, 'synset': 'porcupinefish.n.01', 'name': 'porcupinefish'}, {'id': 5205, 'synset': 'balloonfish.n.01', 'name': 'balloonfish'}, {'id': 5206, 'synset': 'burrfish.n.01', 'name': 'burrfish'}, {'id': 5207, 'synset': 'ocean_sunfish.n.01', 'name': 'ocean_sunfish'}, {'id': 5208, 'synset': 'sharptail_mola.n.01', 'name': 'sharptail_mola'}, {'id': 5209, 'synset': 'flatfish.n.02', 'name': 'flatfish'}, {'id': 5210, 'synset': 'flounder.n.02', 'name': 'flounder'}, {'id': 5211, 'synset': 'righteye_flounder.n.01', 'name': 'righteye_flounder'}, {'id': 5212, 'synset': 'plaice.n.02', 'name': 'plaice'}, {'id': 5213, 'synset': 'european_flatfish.n.01', 'name': 'European_flatfish'}, {'id': 5214, 'synset': 'yellowtail_flounder.n.02', 'name': 'yellowtail_flounder'}, {'id': 5215, 'synset': 'winter_flounder.n.02', 'name': 'winter_flounder'}, {'id': 5216, 'synset': 'lemon_sole.n.05', 'name': 'lemon_sole'}, {'id': 5217, 'synset': 'american_plaice.n.01', 'name': 'American_plaice'}, {'id': 5218, 'synset': 'halibut.n.02', 'name': 'halibut'}, {'id': 5219, 'synset': 'atlantic_halibut.n.01', 'name': 'Atlantic_halibut'}, {'id': 5220, 'synset': 'pacific_halibut.n.01', 'name': 'Pacific_halibut'}, {'id': 5221, 'synset': 'lefteye_flounder.n.01', 'name': 'lefteye_flounder'}, {'id': 5222, 'synset': 'southern_flounder.n.01', 'name': 'southern_flounder'}, {'id': 5223, 'synset': 'summer_flounder.n.01', 'name': 'summer_flounder'}, {'id': 5224, 'synset': 'whiff.n.02', 'name': 'whiff'}, {'id': 5225, 'synset': 'horned_whiff.n.01', 'name': 'horned_whiff'}, {'id': 5226, 'synset': 'sand_dab.n.02', 'name': 'sand_dab'}, {'id': 5227, 'synset': 'windowpane.n.02', 'name': 'windowpane'}, {'id': 5228, 'synset': 'brill.n.01', 'name': 'brill'}, {'id': 5229, 'synset': 'turbot.n.02', 'name': 'turbot'}, {'id': 5230, 'synset': 'tonguefish.n.01', 'name': 'tonguefish'}, {'id': 5231, 'synset': 'sole.n.04', 'name': 'sole'}, {'id': 5232, 'synset': 'european_sole.n.01', 'name': 'European_sole'}, {'id': 5233, 'synset': 'english_sole.n.02', 'name': 'English_sole'}, {'id': 5234, 'synset': 'hogchoker.n.01', 'name': 'hogchoker'}, {'id': 5235, 'synset': 'aba.n.02', 'name': 'aba'}, {'id': 5236, 'synset': 'abacus.n.02', 'name': 'abacus'}, {'id': 5237, 'synset': 'abandoned_ship.n.01', 'name': 'abandoned_ship'}, {'id': 5238, 'synset': 'a_battery.n.01', 'name': 'A_battery'}, {'id': 5239, 'synset': 'abattoir.n.01', 'name': 'abattoir'}, {'id': 5240, 'synset': 'abaya.n.01', 'name': 'abaya'}, {'id': 5241, 'synset': 'abbe_condenser.n.01', 'name': 'Abbe_condenser'}, {'id': 5242, 'synset': 'abbey.n.03', 'name': 'abbey'}, {'id': 5243, 'synset': 'abbey.n.02', 'name': 'abbey'}, {'id': 5244, 'synset': 'abbey.n.01', 'name': 'abbey'}, {'id': 5245, 'synset': 'abney_level.n.01', 'name': 'Abney_level'}, {'id': 5246, 'synset': 'abrader.n.01', 'name': 'abrader'}, {'id': 5247, 'synset': 'abrading_stone.n.01', 'name': 'abrading_stone'}, {'id': 5248, 'synset': 'abutment.n.02', 'name': 'abutment'}, {'id': 5249, 'synset': 'abutment_arch.n.01', 'name': 'abutment_arch'}, {'id': 5250, 'synset': 'academic_costume.n.01', 'name': 'academic_costume'}, {'id': 5251, 'synset': 'academic_gown.n.01', 'name': 'academic_gown'}, {'id': 5252, 'synset': 'accelerator.n.02', 'name': 'accelerator'}, {'id': 5253, 'synset': 'accelerator.n.04', 'name': 'accelerator'}, {'id': 5254, 'synset': 'accelerator.n.01', 'name': 'accelerator'}, {'id': 5255, 'synset': 'accelerometer.n.01', 'name': 'accelerometer'}, {'id': 5256, 'synset': 'accessory.n.01', 'name': 'accessory'}, {'id': 5257, 'synset': 'accommodating_lens_implant.n.01', 'name': 'accommodating_lens_implant'}, {'id': 5258, 'synset': 'accommodation.n.04', 'name': 'accommodation'}, {'id': 5259, 'synset': 'accordion.n.01', 'name': 'accordion'}, {'id': 5260, 'synset': 'acetate_disk.n.01', 'name': 'acetate_disk'}, {'id': 5261, 'synset': 'acetate_rayon.n.01', 'name': 'acetate_rayon'}, {'id': 5262, 'synset': 'achromatic_lens.n.01', 'name': 'achromatic_lens'}, {'id': 5263, 'synset': 'acoustic_delay_line.n.01', 'name': 'acoustic_delay_line'}, {'id': 5264, 'synset': 'acoustic_device.n.01', 'name': 'acoustic_device'}, {'id': 5265, 'synset': 'acoustic_guitar.n.01', 'name': 'acoustic_guitar'}, {'id': 5266, 'synset': 'acoustic_modem.n.01', 'name': 'acoustic_modem'}, {'id': 5267, 'synset': 'acropolis.n.01', 'name': 'acropolis'}, {'id': 5268, 'synset': 'acrylic.n.04', 'name': 'acrylic'}, {'id': 5269, 'synset': 'acrylic.n.03', 'name': 'acrylic'}, {'id': 5270, 'synset': 'actinometer.n.01', 'name': 'actinometer'}, {'id': 5271, 'synset': 'action.n.07', 'name': 'action'}, {'id': 5272, 'synset': 'active_matrix_screen.n.01', 'name': 'active_matrix_screen'}, {'id': 5273, 'synset': 'actuator.n.01', 'name': 'actuator'}, {'id': 5274, 'synset': 'adapter.n.02', 'name': 'adapter'}, {'id': 5275, 'synset': 'adder.n.02', 'name': 'adder'}, {'id': 5276, 'synset': 'adding_machine.n.01', 'name': 'adding_machine'}, {'id': 5277, 'synset': 'addressing_machine.n.01', 'name': 'addressing_machine'}, {'id': 5278, 'synset': 'adhesive_bandage.n.01', 'name': 'adhesive_bandage'}, {'id': 5279, 'synset': 'adit.n.01', 'name': 'adit'}, {'id': 5280, 'synset': 'adjoining_room.n.01', 'name': 'adjoining_room'}, {'id': 5281, 'synset': 'adjustable_wrench.n.01', 'name': 'adjustable_wrench'}, {'id': 5282, 'synset': 'adobe.n.02', 'name': 'adobe'}, {'id': 5283, 'synset': 'adz.n.01', 'name': 'adz'}, {'id': 5284, 'synset': 'aeolian_harp.n.01', 'name': 'aeolian_harp'}, {'id': 5285, 'synset': 'aerator.n.01', 'name': 'aerator'}, {'id': 5286, 'synset': 'aerial_torpedo.n.01', 'name': 'aerial_torpedo'}, {'id': 5287, 'synset': 'aertex.n.01', 'name': 'Aertex'}, {'id': 5288, 'synset': 'afghan.n.01', 'name': 'afghan'}, {'id': 5289, 'synset': 'afro-wig.n.01', 'name': 'Afro-wig'}, {'id': 5290, 'synset': 'afterburner.n.01', 'name': 'afterburner'}, {'id': 5291, 'synset': 'after-shave.n.01', 'name': 'after-shave'}, {'id': 5292, 'synset': 'agateware.n.01', 'name': 'agateware'}, {'id': 5293, 'synset': 'agglomerator.n.01', 'name': 'agglomerator'}, {'id': 5294, 'synset': 'aglet.n.02', 'name': 'aglet'}, {'id': 5295, 'synset': 'aglet.n.01', 'name': 'aglet'}, {'id': 5296, 'synset': 'agora.n.03', 'name': 'agora'}, {'id': 5297, 'synset': 'aigrette.n.01', 'name': 'aigrette'}, {'id': 5298, 'synset': 'aileron.n.01', 'name': 'aileron'}, {'id': 5299, 'synset': 'air_bag.n.01', 'name': 'air_bag'}, {'id': 5300, 'synset': 'airbrake.n.02', 'name': 'airbrake'}, {'id': 5301, 'synset': 'airbrush.n.01', 'name': 'airbrush'}, {'id': 5302, 'synset': 'airbus.n.01', 'name': 'airbus'}, {'id': 5303, 'synset': 'air_compressor.n.01', 'name': 'air_compressor'}, {'id': 5304, 'synset': 'aircraft.n.01', 'name': 'aircraft'}, {'id': 5305, 'synset': 'aircraft_carrier.n.01', 'name': 'aircraft_carrier'}, {'id': 5306, 'synset': 'aircraft_engine.n.01', 'name': 'aircraft_engine'}, {'id': 5307, 'synset': 'air_cushion.n.02', 'name': 'air_cushion'}, {'id': 5308, 'synset': 'airdock.n.01', 'name': 'airdock'}, {'id': 5309, 'synset': 'airfield.n.01', 'name': 'airfield'}, {'id': 5310, 'synset': 'air_filter.n.01', 'name': 'air_filter'}, {'id': 5311, 'synset': 'airfoil.n.01', 'name': 'airfoil'}, {'id': 5312, 'synset': 'airframe.n.01', 'name': 'airframe'}, {'id': 5313, 'synset': 'air_gun.n.01', 'name': 'air_gun'}, {'id': 5314, 'synset': 'air_hammer.n.01', 'name': 'air_hammer'}, {'id': 5315, 'synset': 'air_horn.n.01', 'name': 'air_horn'}, {'id': 5316, 'synset': 'airing_cupboard.n.01', 'name': 'airing_cupboard'}, {'id': 5317, 'synset': 'airliner.n.01', 'name': 'airliner'}, {'id': 5318, 'synset': 'airmailer.n.01', 'name': 'airmailer'}, {'id': 5319, 'synset': 'airplane_propeller.n.01', 'name': 'airplane_propeller'}, {'id': 5320, 'synset': 'airport.n.01', 'name': 'airport'}, {'id': 5321, 'synset': 'air_pump.n.01', 'name': 'air_pump'}, {'id': 5322, 'synset': 'air_search_radar.n.01', 'name': 'air_search_radar'}, {'id': 5323, 'synset': 'airship.n.01', 'name': 'airship'}, {'id': 5324, 'synset': 'air_terminal.n.01', 'name': 'air_terminal'}, {'id': 5325, 'synset': 'air-to-air_missile.n.01', 'name': 'air-to-air_missile'}, {'id': 5326, 'synset': 'air-to-ground_missile.n.01', 'name': 'air-to-ground_missile'}, {'id': 5327, 'synset': 'aisle.n.03', 'name': 'aisle'}, {'id': 5328, 'synset': "aladdin's_lamp.n.01", 'name': "Aladdin's_lamp"}, {'id': 5329, 'synset': 'alarm.n.02', 'name': 'alarm'}, {'id': 5330, 'synset': 'alb.n.01', 'name': 'alb'}, {'id': 5331, 'synset': 'alcazar.n.01', 'name': 'alcazar'}, {'id': 5332, 'synset': 'alcohol_thermometer.n.01', 'name': 'alcohol_thermometer'}, {'id': 5333, 'synset': 'alehouse.n.01', 'name': 'alehouse'}, {'id': 5334, 'synset': 'alembic.n.01', 'name': 'alembic'}, {'id': 5335, 'synset': 'algometer.n.01', 'name': 'algometer'}, {'id': 5336, 'synset': 'alidade.n.02', 'name': 'alidade'}, {'id': 5337, 'synset': 'alidade.n.01', 'name': 'alidade'}, {'id': 5338, 'synset': 'a-line.n.01', 'name': 'A-line'}, {'id': 5339, 'synset': 'allen_screw.n.01', 'name': 'Allen_screw'}, {'id': 5340, 'synset': 'allen_wrench.n.01', 'name': 'Allen_wrench'}, {'id': 5341, 'synset': 'alligator_wrench.n.01', 'name': 'alligator_wrench'}, {'id': 5342, 'synset': 'alms_dish.n.01', 'name': 'alms_dish'}, {'id': 5343, 'synset': 'alpaca.n.02', 'name': 'alpaca'}, {'id': 5344, 'synset': 'alpenstock.n.01', 'name': 'alpenstock'}, {'id': 5345, 'synset': 'altar.n.02', 'name': 'altar'}, {'id': 5346, 'synset': 'altar.n.01', 'name': 'altar'}, {'id': 5347, 'synset': 'altarpiece.n.01', 'name': 'altarpiece'}, {'id': 5348, 'synset': 'altazimuth.n.01', 'name': 'altazimuth'}, {'id': 5349, 'synset': 'alternator.n.01', 'name': 'alternator'}, {'id': 5350, 'synset': 'altimeter.n.01', 'name': 'altimeter'}, {'id': 5351, 'synset': 'amati.n.02', 'name': 'Amati'}, {'id': 5352, 'synset': 'amen_corner.n.01', 'name': 'amen_corner'}, {'id': 5353, 'synset': 'american_organ.n.01', 'name': 'American_organ'}, {'id': 5354, 'synset': 'ammeter.n.01', 'name': 'ammeter'}, {'id': 5355, 'synset': 'ammonia_clock.n.01', 'name': 'ammonia_clock'}, {'id': 5356, 'synset': 'ammunition.n.01', 'name': 'ammunition'}, {'id': 5357, 'synset': 'amphibian.n.02', 'name': 'amphibian'}, {'id': 5358, 'synset': 'amphibian.n.01', 'name': 'amphibian'}, {'id': 5359, 'synset': 'amphitheater.n.02', 'name': 'amphitheater'}, {'id': 5360, 'synset': 'amphitheater.n.01', 'name': 'amphitheater'}, {'id': 5361, 'synset': 'amphora.n.01', 'name': 'amphora'}, {'id': 5362, 'synset': 'ampulla.n.02', 'name': 'ampulla'}, {'id': 5363, 'synset': 'amusement_arcade.n.01', 'name': 'amusement_arcade'}, {'id': 5364, 'synset': 'analog_clock.n.01', 'name': 'analog_clock'}, {'id': 5365, 'synset': 'analog_computer.n.01', 'name': 'analog_computer'}, {'id': 5366, 'synset': 'analog_watch.n.01', 'name': 'analog_watch'}, {'id': 5367, 'synset': 'analytical_balance.n.01', 'name': 'analytical_balance'}, {'id': 5368, 'synset': 'analyzer.n.01', 'name': 'analyzer'}, {'id': 5369, 'synset': 'anamorphosis.n.02', 'name': 'anamorphosis'}, {'id': 5370, 'synset': 'anastigmat.n.01', 'name': 'anastigmat'}, {'id': 5371, 'synset': 'anchor.n.01', 'name': 'anchor'}, {'id': 5372, 'synset': 'anchor_chain.n.01', 'name': 'anchor_chain'}, {'id': 5373, 'synset': 'anchor_light.n.01', 'name': 'anchor_light'}, {'id': 5374, 'synset': 'and_circuit.n.01', 'name': 'AND_circuit'}, {'id': 5375, 'synset': 'andiron.n.01', 'name': 'andiron'}, {'id': 5376, 'synset': 'android.n.01', 'name': 'android'}, {'id': 5377, 'synset': 'anechoic_chamber.n.01', 'name': 'anechoic_chamber'}, {'id': 5378, 'synset': 'anemometer.n.01', 'name': 'anemometer'}, {'id': 5379, 'synset': 'aneroid_barometer.n.01', 'name': 'aneroid_barometer'}, {'id': 5380, 'synset': 'angiocardiogram.n.01', 'name': 'angiocardiogram'}, {'id': 5381, 'synset': 'angioscope.n.01', 'name': 'angioscope'}, {'id': 5382, 'synset': 'angle_bracket.n.02', 'name': 'angle_bracket'}, {'id': 5383, 'synset': 'angledozer.n.01', 'name': 'angledozer'}, {'id': 5384, 'synset': 'ankle_brace.n.01', 'name': 'ankle_brace'}, {'id': 5385, 'synset': 'anklet.n.02', 'name': 'anklet'}, {'id': 5386, 'synset': 'anklet.n.01', 'name': 'anklet'}, {'id': 5387, 'synset': 'ankus.n.01', 'name': 'ankus'}, {'id': 5388, 'synset': 'anode.n.01', 'name': 'anode'}, {'id': 5389, 'synset': 'anode.n.02', 'name': 'anode'}, {'id': 5390, 'synset': 'answering_machine.n.01', 'name': 'answering_machine'}, {'id': 5391, 'synset': 'anteroom.n.01', 'name': 'anteroom'}, {'id': 5392, 'synset': 'antiaircraft.n.01', 'name': 'antiaircraft'}, {'id': 5393, 'synset': 'antiballistic_missile.n.01', 'name': 'antiballistic_missile'}, {'id': 5394, 'synset': 'antifouling_paint.n.01', 'name': 'antifouling_paint'}, {'id': 5395, 'synset': 'anti-g_suit.n.01', 'name': 'anti-G_suit'}, {'id': 5396, 'synset': 'antimacassar.n.01', 'name': 'antimacassar'}, {'id': 5397, 'synset': 'antiperspirant.n.01', 'name': 'antiperspirant'}, {'id': 5398, 'synset': 'anti-submarine_rocket.n.01', 'name': 'anti-submarine_rocket'}, {'id': 5399, 'synset': 'anvil.n.01', 'name': 'anvil'}, {'id': 5400, 'synset': 'ao_dai.n.01', 'name': 'ao_dai'}, {'id': 5401, 'synset': 'apadana.n.01', 'name': 'apadana'}, {'id': 5402, 'synset': 'apartment.n.01', 'name': 'apartment'}, {'id': 5403, 'synset': 'apartment_building.n.01', 'name': 'apartment_building'}, {'id': 5404, 'synset': 'aperture.n.03', 'name': 'aperture'}, {'id': 5405, 'synset': 'aperture.n.01', 'name': 'aperture'}, {'id': 5406, 'synset': 'apiary.n.01', 'name': 'apiary'}, {'id': 5407, 'synset': 'apparatus.n.01', 'name': 'apparatus'}, {'id': 5408, 'synset': 'apparel.n.01', 'name': 'apparel'}, {'id': 5409, 'synset': 'applecart.n.02', 'name': 'applecart'}, {'id': 5410, 'synset': 'appliance.n.02', 'name': 'appliance'}, {'id': 5411, 'synset': 'appliance.n.01', 'name': 'appliance'}, {'id': 5412, 'synset': 'applicator.n.01', 'name': 'applicator'}, {'id': 5413, 'synset': 'appointment.n.03', 'name': 'appointment'}, {'id': 5414, 'synset': 'apron_string.n.01', 'name': 'apron_string'}, {'id': 5415, 'synset': 'apse.n.01', 'name': 'apse'}, {'id': 5416, 'synset': 'aqualung.n.01', 'name': 'aqualung'}, {'id': 5417, 'synset': 'aquaplane.n.01', 'name': 'aquaplane'}, {'id': 5418, 'synset': 'arabesque.n.02', 'name': 'arabesque'}, {'id': 5419, 'synset': 'arbor.n.03', 'name': 'arbor'}, {'id': 5420, 'synset': 'arcade.n.02', 'name': 'arcade'}, {'id': 5421, 'synset': 'arch.n.04', 'name': 'arch'}, {'id': 5422, 'synset': 'architecture.n.01', 'name': 'architecture'}, {'id': 5423, 'synset': 'architrave.n.02', 'name': 'architrave'}, {'id': 5424, 'synset': 'arch_support.n.01', 'name': 'arch_support'}, {'id': 5425, 'synset': 'arc_lamp.n.01', 'name': 'arc_lamp'}, {'id': 5426, 'synset': 'area.n.05', 'name': 'area'}, {'id': 5427, 'synset': 'areaway.n.01', 'name': 'areaway'}, {'id': 5428, 'synset': 'argyle.n.03', 'name': 'argyle'}, {'id': 5429, 'synset': 'ark.n.02', 'name': 'ark'}, {'id': 5430, 'synset': 'arm.n.04', 'name': 'arm'}, {'id': 5431, 'synset': 'armament.n.01', 'name': 'armament'}, {'id': 5432, 'synset': 'armature.n.01', 'name': 'armature'}, {'id': 5433, 'synset': 'armet.n.01', 'name': 'armet'}, {'id': 5434, 'synset': 'arm_guard.n.01', 'name': 'arm_guard'}, {'id': 5435, 'synset': 'armhole.n.01', 'name': 'armhole'}, {'id': 5436, 'synset': 'armilla.n.02', 'name': 'armilla'}, {'id': 5437, 'synset': 'armlet.n.01', 'name': 'armlet'}, {'id': 5438, 'synset': 'armored_car.n.02', 'name': 'armored_car'}, {'id': 5439, 'synset': 'armored_car.n.01', 'name': 'armored_car'}, {'id': 5440, 'synset': 'armored_personnel_carrier.n.01', 'name': 'armored_personnel_carrier'}, {'id': 5441, 'synset': 'armored_vehicle.n.01', 'name': 'armored_vehicle'}, {'id': 5442, 'synset': 'armor_plate.n.01', 'name': 'armor_plate'}, {'id': 5443, 'synset': 'armory.n.04', 'name': 'armory'}, {'id': 5444, 'synset': 'armrest.n.01', 'name': 'armrest'}, {'id': 5445, 'synset': 'arquebus.n.01', 'name': 'arquebus'}, {'id': 5446, 'synset': 'array.n.04', 'name': 'array'}, {'id': 5447, 'synset': 'array.n.03', 'name': 'array'}, {'id': 5448, 'synset': 'arrester.n.01', 'name': 'arrester'}, {'id': 5449, 'synset': 'arrow.n.02', 'name': 'arrow'}, {'id': 5450, 'synset': 'arsenal.n.01', 'name': 'arsenal'}, {'id': 5451, 'synset': 'arterial_road.n.01', 'name': 'arterial_road'}, {'id': 5452, 'synset': 'arthrogram.n.01', 'name': 'arthrogram'}, {'id': 5453, 'synset': 'arthroscope.n.01', 'name': 'arthroscope'}, {'id': 5454, 'synset': 'artificial_heart.n.01', 'name': 'artificial_heart'}, {'id': 5455, 'synset': 'artificial_horizon.n.01', 'name': 'artificial_horizon'}, {'id': 5456, 'synset': 'artificial_joint.n.01', 'name': 'artificial_joint'}, {'id': 5457, 'synset': 'artificial_kidney.n.01', 'name': 'artificial_kidney'}, {'id': 5458, 'synset': 'artificial_skin.n.01', 'name': 'artificial_skin'}, {'id': 5459, 'synset': 'artillery.n.01', 'name': 'artillery'}, {'id': 5460, 'synset': 'artillery_shell.n.01', 'name': 'artillery_shell'}, {'id': 5461, 'synset': "artist's_loft.n.01", 'name': "artist's_loft"}, {'id': 5462, 'synset': 'art_school.n.01', 'name': 'art_school'}, {'id': 5463, 'synset': 'ascot.n.01', 'name': 'ascot'}, {'id': 5464, 'synset': 'ash-pan.n.01', 'name': 'ash-pan'}, {'id': 5465, 'synset': 'aspergill.n.01', 'name': 'aspergill'}, {'id': 5466, 'synset': 'aspersorium.n.01', 'name': 'aspersorium'}, {'id': 5467, 'synset': 'aspirator.n.01', 'name': 'aspirator'}, {'id': 5468, 'synset': 'aspirin_powder.n.01', 'name': 'aspirin_powder'}, {'id': 5469, 'synset': 'assault_gun.n.02', 'name': 'assault_gun'}, {'id': 5470, 'synset': 'assault_rifle.n.01', 'name': 'assault_rifle'}, {'id': 5471, 'synset': 'assegai.n.01', 'name': 'assegai'}, {'id': 5472, 'synset': 'assembly.n.01', 'name': 'assembly'}, {'id': 5473, 'synset': 'assembly.n.05', 'name': 'assembly'}, {'id': 5474, 'synset': 'assembly_hall.n.01', 'name': 'assembly_hall'}, {'id': 5475, 'synset': 'assembly_plant.n.01', 'name': 'assembly_plant'}, {'id': 5476, 'synset': 'astatic_coils.n.01', 'name': 'astatic_coils'}, {'id': 5477, 'synset': 'astatic_galvanometer.n.01', 'name': 'astatic_galvanometer'}, {'id': 5478, 'synset': 'astrodome.n.01', 'name': 'astrodome'}, {'id': 5479, 'synset': 'astrolabe.n.01', 'name': 'astrolabe'}, {'id': 5480, 'synset': 'astronomical_telescope.n.01', 'name': 'astronomical_telescope'}, {'id': 5481, 'synset': 'astronomy_satellite.n.01', 'name': 'astronomy_satellite'}, {'id': 5482, 'synset': 'athenaeum.n.02', 'name': 'athenaeum'}, {'id': 5483, 'synset': 'athletic_sock.n.01', 'name': 'athletic_sock'}, {'id': 5484, 'synset': 'athletic_supporter.n.01', 'name': 'athletic_supporter'}, {'id': 5485, 'synset': 'atlas.n.04', 'name': 'atlas'}, {'id': 5486, 'synset': 'atmometer.n.01', 'name': 'atmometer'}, {'id': 5487, 'synset': 'atom_bomb.n.01', 'name': 'atom_bomb'}, {'id': 5488, 'synset': 'atomic_clock.n.01', 'name': 'atomic_clock'}, {'id': 5489, 'synset': 'atomic_pile.n.01', 'name': 'atomic_pile'}, {'id': 5490, 'synset': 'atrium.n.02', 'name': 'atrium'}, {'id': 5491, 'synset': 'attache_case.n.01', 'name': 'attache_case'}, {'id': 5492, 'synset': 'attachment.n.04', 'name': 'attachment'}, {'id': 5493, 'synset': 'attack_submarine.n.01', 'name': 'attack_submarine'}, {'id': 5494, 'synset': 'attenuator.n.01', 'name': 'attenuator'}, {'id': 5495, 'synset': 'attic.n.04', 'name': 'attic'}, {'id': 5496, 'synset': 'attic_fan.n.01', 'name': 'attic_fan'}, {'id': 5497, 'synset': 'attire.n.01', 'name': 'attire'}, {'id': 5498, 'synset': 'audio_amplifier.n.01', 'name': 'audio_amplifier'}, {'id': 5499, 'synset': 'audiocassette.n.01', 'name': 'audiocassette'}, {'id': 5500, 'synset': 'audio_cd.n.01', 'name': 'audio_CD'}, {'id': 5501, 'synset': 'audiometer.n.01', 'name': 'audiometer'}, {'id': 5502, 'synset': 'audio_system.n.01', 'name': 'audio_system'}, {'id': 5503, 'synset': 'audiotape.n.02', 'name': 'audiotape'}, {'id': 5504, 'synset': 'audiotape.n.01', 'name': 'audiotape'}, {'id': 5505, 'synset': 'audiovisual.n.01', 'name': 'audiovisual'}, {'id': 5506, 'synset': 'auditorium.n.01', 'name': 'auditorium'}, {'id': 5507, 'synset': 'auger.n.02', 'name': 'auger'}, {'id': 5508, 'synset': 'autobahn.n.01', 'name': 'autobahn'}, {'id': 5509, 'synset': 'autoclave.n.01', 'name': 'autoclave'}, {'id': 5510, 'synset': 'autofocus.n.01', 'name': 'autofocus'}, {'id': 5511, 'synset': 'autogiro.n.01', 'name': 'autogiro'}, {'id': 5512, 'synset': 'autoinjector.n.01', 'name': 'autoinjector'}, {'id': 5513, 'synset': 'autoloader.n.01', 'name': 'autoloader'}, {'id': 5514, 'synset': 'automat.n.02', 'name': 'automat'}, {'id': 5515, 'synset': 'automat.n.01', 'name': 'automat'}, {'id': 5516, 'synset': 'automatic_choke.n.01', 'name': 'automatic_choke'}, {'id': 5517, 'synset': 'automatic_firearm.n.01', 'name': 'automatic_firearm'}, {'id': 5518, 'synset': 'automatic_pistol.n.01', 'name': 'automatic_pistol'}, {'id': 5519, 'synset': 'automatic_rifle.n.01', 'name': 'automatic_rifle'}, {'id': 5520, 'synset': 'automatic_transmission.n.01', 'name': 'automatic_transmission'}, {'id': 5521, 'synset': 'automation.n.03', 'name': 'automation'}, {'id': 5522, 'synset': 'automaton.n.02', 'name': 'automaton'}, {'id': 5523, 'synset': 'automobile_engine.n.01', 'name': 'automobile_engine'}, {'id': 5524, 'synset': 'automobile_factory.n.01', 'name': 'automobile_factory'}, {'id': 5525, 'synset': 'automobile_horn.n.01', 'name': 'automobile_horn'}, {'id': 5526, 'synset': 'autopilot.n.02', 'name': 'autopilot'}, {'id': 5527, 'synset': 'autoradiograph.n.01', 'name': 'autoradiograph'}, {'id': 5528, 'synset': 'autostrada.n.01', 'name': 'autostrada'}, {'id': 5529, 'synset': 'auxiliary_boiler.n.01', 'name': 'auxiliary_boiler'}, {'id': 5530, 'synset': 'auxiliary_engine.n.01', 'name': 'auxiliary_engine'}, {'id': 5531, 'synset': 'auxiliary_pump.n.01', 'name': 'auxiliary_pump'}, {'id': 5532, 'synset': 'auxiliary_research_submarine.n.01', 'name': 'auxiliary_research_submarine'}, {'id': 5533, 'synset': 'auxiliary_storage.n.01', 'name': 'auxiliary_storage'}, {'id': 5534, 'synset': 'aviary.n.01', 'name': 'aviary'}, {'id': 5535, 'synset': 'awl.n.01', 'name': 'awl'}, {'id': 5536, 'synset': 'ax_handle.n.01', 'name': 'ax_handle'}, {'id': 5537, 'synset': 'ax_head.n.01', 'name': 'ax_head'}, {'id': 5538, 'synset': 'axis.n.06', 'name': 'axis'}, {'id': 5539, 'synset': 'axle.n.01', 'name': 'axle'}, {'id': 5540, 'synset': 'axle_bar.n.01', 'name': 'axle_bar'}, {'id': 5541, 'synset': 'axletree.n.01', 'name': 'axletree'}, {'id': 5542, 'synset': 'babushka.n.01', 'name': 'babushka'}, {'id': 5543, 'synset': 'baby_bed.n.01', 'name': 'baby_bed'}, {'id': 5544, 'synset': 'baby_grand.n.01', 'name': 'baby_grand'}, {'id': 5545, 'synset': 'baby_powder.n.01', 'name': 'baby_powder'}, {'id': 5546, 'synset': 'baby_shoe.n.01', 'name': 'baby_shoe'}, {'id': 5547, 'synset': 'back.n.08', 'name': 'back'}, {'id': 5548, 'synset': 'back.n.07', 'name': 'back'}, {'id': 5549, 'synset': 'backbench.n.01', 'name': 'backbench'}, {'id': 5550, 'synset': 'backboard.n.02', 'name': 'backboard'}, {'id': 5551, 'synset': 'backbone.n.05', 'name': 'backbone'}, {'id': 5552, 'synset': 'back_brace.n.01', 'name': 'back_brace'}, {'id': 5553, 'synset': 'backgammon_board.n.01', 'name': 'backgammon_board'}, {'id': 5554, 'synset': 'background.n.07', 'name': 'background'}, {'id': 5555, 'synset': 'backhoe.n.01', 'name': 'backhoe'}, {'id': 5556, 'synset': 'backlighting.n.01', 'name': 'backlighting'}, {'id': 5557, 'synset': 'backpacking_tent.n.01', 'name': 'backpacking_tent'}, {'id': 5558, 'synset': 'backplate.n.01', 'name': 'backplate'}, {'id': 5559, 'synset': 'back_porch.n.01', 'name': 'back_porch'}, {'id': 5560, 'synset': 'backsaw.n.01', 'name': 'backsaw'}, {'id': 5561, 'synset': 'backscratcher.n.02', 'name': 'backscratcher'}, {'id': 5562, 'synset': 'backseat.n.02', 'name': 'backseat'}, {'id': 5563, 'synset': 'backspace_key.n.01', 'name': 'backspace_key'}, {'id': 5564, 'synset': 'backstairs.n.01', 'name': 'backstairs'}, {'id': 5565, 'synset': 'backstay.n.01', 'name': 'backstay'}, {'id': 5566, 'synset': 'backstop.n.02', 'name': 'backstop'}, {'id': 5567, 'synset': 'backsword.n.02', 'name': 'backsword'}, {'id': 5568, 'synset': 'backup_system.n.01', 'name': 'backup_system'}, {'id': 5569, 'synset': 'badminton_court.n.01', 'name': 'badminton_court'}, {'id': 5570, 'synset': 'badminton_equipment.n.01', 'name': 'badminton_equipment'}, {'id': 5571, 'synset': 'badminton_racket.n.01', 'name': 'badminton_racket'}, {'id': 5572, 'synset': 'bag.n.01', 'name': 'bag'}, {'id': 5573, 'synset': 'baggage.n.01', 'name': 'baggage'}, {'id': 5574, 'synset': 'baggage.n.03', 'name': 'baggage'}, {'id': 5575, 'synset': 'baggage_car.n.01', 'name': 'baggage_car'}, {'id': 5576, 'synset': 'baggage_claim.n.01', 'name': 'baggage_claim'}, {'id': 5577, 'synset': 'bailey.n.04', 'name': 'bailey'}, {'id': 5578, 'synset': 'bailey.n.03', 'name': 'bailey'}, {'id': 5579, 'synset': 'bailey_bridge.n.01', 'name': 'Bailey_bridge'}, {'id': 5580, 'synset': 'bain-marie.n.01', 'name': 'bain-marie'}, {'id': 5581, 'synset': 'baize.n.01', 'name': 'baize'}, {'id': 5582, 'synset': 'bakery.n.01', 'name': 'bakery'}, {'id': 5583, 'synset': 'balaclava.n.01', 'name': 'balaclava'}, {'id': 5584, 'synset': 'balalaika.n.01', 'name': 'balalaika'}, {'id': 5585, 'synset': 'balance.n.12', 'name': 'balance'}, {'id': 5586, 'synset': 'balance_beam.n.01', 'name': 'balance_beam'}, {'id': 5587, 'synset': 'balance_wheel.n.01', 'name': 'balance_wheel'}, {'id': 5588, 'synset': 'balbriggan.n.01', 'name': 'balbriggan'}, {'id': 5589, 'synset': 'balcony.n.02', 'name': 'balcony'}, {'id': 5590, 'synset': 'balcony.n.01', 'name': 'balcony'}, {'id': 5591, 'synset': 'baldachin.n.01', 'name': 'baldachin'}, {'id': 5592, 'synset': 'baldric.n.01', 'name': 'baldric'}, {'id': 5593, 'synset': 'bale.n.01', 'name': 'bale'}, {'id': 5594, 'synset': 'baling_wire.n.01', 'name': 'baling_wire'}, {'id': 5595, 'synset': 'ball.n.01', 'name': 'ball'}, {'id': 5596, 'synset': 'ball_and_chain.n.01', 'name': 'ball_and_chain'}, {'id': 5597, 'synset': 'ball-and-socket_joint.n.02', 'name': 'ball-and-socket_joint'}, {'id': 5598, 'synset': 'ballast.n.05', 'name': 'ballast'}, {'id': 5599, 'synset': 'ball_bearing.n.01', 'name': 'ball_bearing'}, {'id': 5600, 'synset': 'ball_cartridge.n.01', 'name': 'ball_cartridge'}, {'id': 5601, 'synset': 'ballcock.n.01', 'name': 'ballcock'}, {'id': 5602, 'synset': 'balldress.n.01', 'name': 'balldress'}, {'id': 5603, 'synset': 'ball_gown.n.01', 'name': 'ball_gown'}, {'id': 5604, 'synset': 'ballistic_galvanometer.n.01', 'name': 'ballistic_galvanometer'}, {'id': 5605, 'synset': 'ballistic_missile.n.01', 'name': 'ballistic_missile'}, {'id': 5606, 'synset': 'ballistic_pendulum.n.01', 'name': 'ballistic_pendulum'}, {'id': 5607, 'synset': 'ballistocardiograph.n.01', 'name': 'ballistocardiograph'}, {'id': 5608, 'synset': 'balloon_bomb.n.01', 'name': 'balloon_bomb'}, {'id': 5609, 'synset': 'balloon_sail.n.01', 'name': 'balloon_sail'}, {'id': 5610, 'synset': 'ballot_box.n.01', 'name': 'ballot_box'}, {'id': 5611, 'synset': 'ballpark.n.01', 'name': 'ballpark'}, {'id': 5612, 'synset': 'ball-peen_hammer.n.01', 'name': 'ball-peen_hammer'}, {'id': 5613, 'synset': 'ballpoint.n.01', 'name': 'ballpoint'}, {'id': 5614, 'synset': 'ballroom.n.01', 'name': 'ballroom'}, {'id': 5615, 'synset': 'ball_valve.n.01', 'name': 'ball_valve'}, {'id': 5616, 'synset': 'balsa_raft.n.01', 'name': 'balsa_raft'}, {'id': 5617, 'synset': 'baluster.n.01', 'name': 'baluster'}, {'id': 5618, 'synset': 'banana_boat.n.01', 'name': 'banana_boat'}, {'id': 5619, 'synset': 'band.n.13', 'name': 'band'}, {'id': 5620, 'synset': 'bandbox.n.01', 'name': 'bandbox'}, {'id': 5621, 'synset': 'banderilla.n.01', 'name': 'banderilla'}, {'id': 5622, 'synset': 'bandoleer.n.01', 'name': 'bandoleer'}, {'id': 5623, 'synset': 'bandoneon.n.01', 'name': 'bandoneon'}, {'id': 5624, 'synset': 'bandsaw.n.01', 'name': 'bandsaw'}, {'id': 5625, 'synset': 'bandwagon.n.02', 'name': 'bandwagon'}, {'id': 5626, 'synset': 'bangalore_torpedo.n.01', 'name': 'bangalore_torpedo'}, {'id': 5627, 'synset': 'bangle.n.02', 'name': 'bangle'}, {'id': 5628, 'synset': 'bannister.n.02', 'name': 'bannister'}, {'id': 5629, 'synset': 'banquette.n.01', 'name': 'banquette'}, {'id': 5630, 'synset': 'banyan.n.02', 'name': 'banyan'}, {'id': 5631, 'synset': 'baptismal_font.n.01', 'name': 'baptismal_font'}, {'id': 5632, 'synset': 'bar.n.03', 'name': 'bar'}, {'id': 5633, 'synset': 'bar.n.02', 'name': 'bar'}, {'id': 5634, 'synset': 'barbecue.n.03', 'name': 'barbecue'}, {'id': 5635, 'synset': 'barbed_wire.n.01', 'name': 'barbed_wire'}, {'id': 5636, 'synset': 'barber_chair.n.01', 'name': 'barber_chair'}, {'id': 5637, 'synset': 'barbershop.n.01', 'name': 'barbershop'}, {'id': 5638, 'synset': 'barbette_carriage.n.01', 'name': 'barbette_carriage'}, {'id': 5639, 'synset': 'barbican.n.01', 'name': 'barbican'}, {'id': 5640, 'synset': 'bar_bit.n.01', 'name': 'bar_bit'}, {'id': 5641, 'synset': 'bareboat.n.01', 'name': 'bareboat'}, {'id': 5642, 'synset': 'barge_pole.n.01', 'name': 'barge_pole'}, {'id': 5643, 'synset': 'baritone.n.03', 'name': 'baritone'}, {'id': 5644, 'synset': 'bark.n.03', 'name': 'bark'}, {'id': 5645, 'synset': 'bar_magnet.n.01', 'name': 'bar_magnet'}, {'id': 5646, 'synset': 'bar_mask.n.01', 'name': 'bar_mask'}, {'id': 5647, 'synset': 'barn.n.01', 'name': 'barn'}, {'id': 5648, 'synset': 'barndoor.n.01', 'name': 'barndoor'}, {'id': 5649, 'synset': 'barn_door.n.01', 'name': 'barn_door'}, {'id': 5650, 'synset': 'barnyard.n.01', 'name': 'barnyard'}, {'id': 5651, 'synset': 'barograph.n.01', 'name': 'barograph'}, {'id': 5652, 'synset': 'barometer.n.01', 'name': 'barometer'}, {'id': 5653, 'synset': 'barong.n.01', 'name': 'barong'}, {'id': 5654, 'synset': 'barouche.n.01', 'name': 'barouche'}, {'id': 5655, 'synset': 'bar_printer.n.01', 'name': 'bar_printer'}, {'id': 5656, 'synset': 'barrack.n.01', 'name': 'barrack'}, {'id': 5657, 'synset': 'barrage_balloon.n.01', 'name': 'barrage_balloon'}, {'id': 5658, 'synset': 'barrel.n.01', 'name': 'barrel'}, {'id': 5659, 'synset': 'barrelhouse.n.01', 'name': 'barrelhouse'}, {'id': 5660, 'synset': 'barrel_knot.n.01', 'name': 'barrel_knot'}, {'id': 5661, 'synset': 'barrel_organ.n.01', 'name': 'barrel_organ'}, {'id': 5662, 'synset': 'barrel_vault.n.01', 'name': 'barrel_vault'}, {'id': 5663, 'synset': 'barricade.n.02', 'name': 'barricade'}, {'id': 5664, 'synset': 'barrier.n.01', 'name': 'barrier'}, {'id': 5665, 'synset': 'barroom.n.01', 'name': 'barroom'}, {'id': 5666, 'synset': 'bascule.n.01', 'name': 'bascule'}, {'id': 5667, 'synset': 'base.n.08', 'name': 'base'}, {'id': 5668, 'synset': 'baseball_equipment.n.01', 'name': 'baseball_equipment'}, {'id': 5669, 'synset': 'basement.n.01', 'name': 'basement'}, {'id': 5670, 'synset': 'basement.n.02', 'name': 'basement'}, {'id': 5671, 'synset': 'basic_point_defense_missile_system.n.01', 'name': 'basic_point_defense_missile_system'}, {'id': 5672, 'synset': 'basilica.n.02', 'name': 'basilica'}, {'id': 5673, 'synset': 'basilica.n.01', 'name': 'basilica'}, {'id': 5674, 'synset': 'basilisk.n.02', 'name': 'basilisk'}, {'id': 5675, 'synset': 'basin.n.01', 'name': 'basin'}, {'id': 5676, 'synset': 'basinet.n.01', 'name': 'basinet'}, {'id': 5677, 'synset': 'basket.n.03', 'name': 'basket'}, {'id': 5678, 'synset': 'basketball_court.n.01', 'name': 'basketball_court'}, {'id': 5679, 'synset': 'basketball_equipment.n.01', 'name': 'basketball_equipment'}, {'id': 5680, 'synset': 'basket_weave.n.01', 'name': 'basket_weave'}, {'id': 5681, 'synset': 'bass.n.07', 'name': 'bass'}, {'id': 5682, 'synset': 'bass_clarinet.n.01', 'name': 'bass_clarinet'}, {'id': 5683, 'synset': 'bass_drum.n.01', 'name': 'bass_drum'}, {'id': 5684, 'synset': 'basset_horn.n.01', 'name': 'basset_horn'}, {'id': 5685, 'synset': 'bass_fiddle.n.01', 'name': 'bass_fiddle'}, {'id': 5686, 'synset': 'bass_guitar.n.01', 'name': 'bass_guitar'}, {'id': 5687, 'synset': 'bassinet.n.01', 'name': 'bassinet'}, {'id': 5688, 'synset': 'bassinet.n.02', 'name': 'bassinet'}, {'id': 5689, 'synset': 'bassoon.n.01', 'name': 'bassoon'}, {'id': 5690, 'synset': 'baster.n.03', 'name': 'baster'}, {'id': 5691, 'synset': 'bastinado.n.01', 'name': 'bastinado'}, {'id': 5692, 'synset': 'bastion.n.03', 'name': 'bastion'}, {'id': 5693, 'synset': 'bastion.n.02', 'name': 'bastion'}, {'id': 5694, 'synset': 'bat.n.05', 'name': 'bat'}, {'id': 5695, 'synset': 'bath.n.01', 'name': 'bath'}, {'id': 5696, 'synset': 'bath_chair.n.01', 'name': 'bath_chair'}, {'id': 5697, 'synset': 'bathhouse.n.02', 'name': 'bathhouse'}, {'id': 5698, 'synset': 'bathhouse.n.01', 'name': 'bathhouse'}, {'id': 5699, 'synset': 'bathing_cap.n.01', 'name': 'bathing_cap'}, {'id': 5700, 'synset': 'bath_oil.n.01', 'name': 'bath_oil'}, {'id': 5701, 'synset': 'bathroom.n.01', 'name': 'bathroom'}, {'id': 5702, 'synset': 'bath_salts.n.01', 'name': 'bath_salts'}, {'id': 5703, 'synset': 'bathyscaphe.n.01', 'name': 'bathyscaphe'}, {'id': 5704, 'synset': 'bathysphere.n.01', 'name': 'bathysphere'}, {'id': 5705, 'synset': 'batik.n.01', 'name': 'batik'}, {'id': 5706, 'synset': 'batiste.n.01', 'name': 'batiste'}, {'id': 5707, 'synset': 'baton.n.01', 'name': 'baton'}, {'id': 5708, 'synset': 'baton.n.05', 'name': 'baton'}, {'id': 5709, 'synset': 'baton.n.04', 'name': 'baton'}, {'id': 5710, 'synset': 'baton.n.03', 'name': 'baton'}, {'id': 5711, 'synset': 'battering_ram.n.01', 'name': 'battering_ram'}, {'id': 5712, 'synset': "batter's_box.n.01", 'name': "batter's_box"}, {'id': 5713, 'synset': 'battery.n.05', 'name': 'battery'}, {'id': 5714, 'synset': 'batting_cage.n.01', 'name': 'batting_cage'}, {'id': 5715, 'synset': 'batting_glove.n.01', 'name': 'batting_glove'}, {'id': 5716, 'synset': 'batting_helmet.n.01', 'name': 'batting_helmet'}, {'id': 5717, 'synset': 'battle-ax.n.01', 'name': 'battle-ax'}, {'id': 5718, 'synset': 'battle_cruiser.n.01', 'name': 'battle_cruiser'}, {'id': 5719, 'synset': 'battle_dress.n.01', 'name': 'battle_dress'}, {'id': 5720, 'synset': 'battlement.n.01', 'name': 'battlement'}, {'id': 5721, 'synset': 'battleship.n.01', 'name': 'battleship'}, {'id': 5722, 'synset': 'battle_sight.n.01', 'name': 'battle_sight'}, {'id': 5723, 'synset': 'bay.n.05', 'name': 'bay'}, {'id': 5724, 'synset': 'bay.n.04', 'name': 'bay'}, {'id': 5725, 'synset': 'bayonet.n.01', 'name': 'bayonet'}, {'id': 5726, 'synset': 'bay_rum.n.01', 'name': 'bay_rum'}, {'id': 5727, 'synset': 'bay_window.n.02', 'name': 'bay_window'}, {'id': 5728, 'synset': 'bazaar.n.01', 'name': 'bazaar'}, {'id': 5729, 'synset': 'bazaar.n.02', 'name': 'bazaar'}, {'id': 5730, 'synset': 'bazooka.n.01', 'name': 'bazooka'}, {'id': 5731, 'synset': 'b_battery.n.01', 'name': 'B_battery'}, {'id': 5732, 'synset': 'bb_gun.n.01', 'name': 'BB_gun'}, {'id': 5733, 'synset': 'beach_house.n.01', 'name': 'beach_house'}, {'id': 5734, 'synset': 'beach_towel.n.01', 'name': 'beach_towel'}, {'id': 5735, 'synset': 'beach_wagon.n.01', 'name': 'beach_wagon'}, {'id': 5736, 'synset': 'beachwear.n.01', 'name': 'beachwear'}, {'id': 5737, 'synset': 'beacon.n.03', 'name': 'beacon'}, {'id': 5738, 'synset': 'beading_plane.n.01', 'name': 'beading_plane'}, {'id': 5739, 'synset': 'beaker.n.02', 'name': 'beaker'}, {'id': 5740, 'synset': 'beaker.n.01', 'name': 'beaker'}, {'id': 5741, 'synset': 'beam.n.02', 'name': 'beam'}, {'id': 5742, 'synset': 'beam_balance.n.01', 'name': 'beam_balance'}, {'id': 5743, 'synset': 'bearing.n.06', 'name': 'bearing'}, {'id': 5744, 'synset': 'bearing_rein.n.01', 'name': 'bearing_rein'}, {'id': 5745, 'synset': 'bearing_wall.n.01', 'name': 'bearing_wall'}, {'id': 5746, 'synset': 'bearskin.n.02', 'name': 'bearskin'}, {'id': 5747, 'synset': 'beater.n.02', 'name': 'beater'}, {'id': 5748, 'synset': 'beating-reed_instrument.n.01', 'name': 'beating-reed_instrument'}, {'id': 5749, 'synset': 'beaver.n.06', 'name': 'beaver'}, {'id': 5750, 'synset': 'beaver.n.05', 'name': 'beaver'}, {'id': 5751, 'synset': 'beckman_thermometer.n.01', 'name': 'Beckman_thermometer'}, {'id': 5752, 'synset': 'bed.n.08', 'name': 'bed'}, {'id': 5753, 'synset': 'bed_and_breakfast.n.01', 'name': 'bed_and_breakfast'}, {'id': 5754, 'synset': 'bedclothes.n.01', 'name': 'bedclothes'}, {'id': 5755, 'synset': 'bedford_cord.n.01', 'name': 'Bedford_cord'}, {'id': 5756, 'synset': 'bed_jacket.n.01', 'name': 'bed_jacket'}, {'id': 5757, 'synset': 'bedpost.n.01', 'name': 'bedpost'}, {'id': 5758, 'synset': 'bedroll.n.01', 'name': 'bedroll'}, {'id': 5759, 'synset': 'bedroom.n.01', 'name': 'bedroom'}, {'id': 5760, 'synset': 'bedroom_furniture.n.01', 'name': 'bedroom_furniture'}, {'id': 5761, 'synset': 'bedsitting_room.n.01', 'name': 'bedsitting_room'}, {'id': 5762, 'synset': 'bedspring.n.01', 'name': 'bedspring'}, {'id': 5763, 'synset': 'bedstead.n.01', 'name': 'bedstead'}, {'id': 5764, 'synset': 'beefcake.n.01', 'name': 'beefcake'}, {'id': 5765, 'synset': 'beehive.n.04', 'name': 'beehive'}, {'id': 5766, 'synset': 'beer_barrel.n.01', 'name': 'beer_barrel'}, {'id': 5767, 'synset': 'beer_garden.n.01', 'name': 'beer_garden'}, {'id': 5768, 'synset': 'beer_glass.n.01', 'name': 'beer_glass'}, {'id': 5769, 'synset': 'beer_hall.n.01', 'name': 'beer_hall'}, {'id': 5770, 'synset': 'beer_mat.n.01', 'name': 'beer_mat'}, {'id': 5771, 'synset': 'beer_mug.n.01', 'name': 'beer_mug'}, {'id': 5772, 'synset': 'belaying_pin.n.01', 'name': 'belaying_pin'}, {'id': 5773, 'synset': 'belfry.n.02', 'name': 'belfry'}, {'id': 5774, 'synset': 'bell_arch.n.01', 'name': 'bell_arch'}, {'id': 5775, 'synset': 'bellarmine.n.02', 'name': 'bellarmine'}, {'id': 5776, 'synset': 'bellbottom_trousers.n.01', 'name': 'bellbottom_trousers'}, {'id': 5777, 'synset': 'bell_cote.n.01', 'name': 'bell_cote'}, {'id': 5778, 'synset': 'bell_foundry.n.01', 'name': 'bell_foundry'}, {'id': 5779, 'synset': 'bell_gable.n.01', 'name': 'bell_gable'}, {'id': 5780, 'synset': 'bell_jar.n.01', 'name': 'bell_jar'}, {'id': 5781, 'synset': 'bellows.n.01', 'name': 'bellows'}, {'id': 5782, 'synset': 'bellpull.n.01', 'name': 'bellpull'}, {'id': 5783, 'synset': 'bell_push.n.01', 'name': 'bell_push'}, {'id': 5784, 'synset': 'bell_seat.n.01', 'name': 'bell_seat'}, {'id': 5785, 'synset': 'bell_tent.n.01', 'name': 'bell_tent'}, {'id': 5786, 'synset': 'bell_tower.n.01', 'name': 'bell_tower'}, {'id': 5787, 'synset': 'bellyband.n.01', 'name': 'bellyband'}, {'id': 5788, 'synset': 'belt.n.06', 'name': 'belt'}, {'id': 5789, 'synset': 'belting.n.01', 'name': 'belting'}, {'id': 5790, 'synset': 'bench_clamp.n.01', 'name': 'bench_clamp'}, {'id': 5791, 'synset': 'bench_hook.n.01', 'name': 'bench_hook'}, {'id': 5792, 'synset': 'bench_lathe.n.01', 'name': 'bench_lathe'}, {'id': 5793, 'synset': 'bench_press.n.02', 'name': 'bench_press'}, {'id': 5794, 'synset': 'bender.n.01', 'name': 'bender'}, {'id': 5795, 'synset': 'berlin.n.03', 'name': 'berlin'}, {'id': 5796, 'synset': 'bermuda_shorts.n.01', 'name': 'Bermuda_shorts'}, {'id': 5797, 'synset': 'berth.n.03', 'name': 'berth'}, {'id': 5798, 'synset': 'besom.n.01', 'name': 'besom'}, {'id': 5799, 'synset': 'bessemer_converter.n.01', 'name': 'Bessemer_converter'}, {'id': 5800, 'synset': 'bethel.n.01', 'name': 'bethel'}, {'id': 5801, 'synset': 'betting_shop.n.01', 'name': 'betting_shop'}, {'id': 5802, 'synset': 'bevatron.n.01', 'name': 'bevatron'}, {'id': 5803, 'synset': 'bevel.n.02', 'name': 'bevel'}, {'id': 5804, 'synset': 'bevel_gear.n.01', 'name': 'bevel_gear'}, {'id': 5805, 'synset': 'b-flat_clarinet.n.01', 'name': 'B-flat_clarinet'}, {'id': 5806, 'synset': 'bib.n.01', 'name': 'bib'}, {'id': 5807, 'synset': 'bib-and-tucker.n.01', 'name': 'bib-and-tucker'}, {'id': 5808, 'synset': 'bicorn.n.01', 'name': 'bicorn'}, {'id': 5809, 'synset': 'bicycle-built-for-two.n.01', 'name': 'bicycle-built-for-two'}, {'id': 5810, 'synset': 'bicycle_chain.n.01', 'name': 'bicycle_chain'}, {'id': 5811, 'synset': 'bicycle_clip.n.01', 'name': 'bicycle_clip'}, {'id': 5812, 'synset': 'bicycle_pump.n.01', 'name': 'bicycle_pump'}, {'id': 5813, 'synset': 'bicycle_rack.n.01', 'name': 'bicycle_rack'}, {'id': 5814, 'synset': 'bicycle_seat.n.01', 'name': 'bicycle_seat'}, {'id': 5815, 'synset': 'bicycle_wheel.n.01', 'name': 'bicycle_wheel'}, {'id': 5816, 'synset': 'bidet.n.01', 'name': 'bidet'}, {'id': 5817, 'synset': 'bier.n.02', 'name': 'bier'}, {'id': 5818, 'synset': 'bier.n.01', 'name': 'bier'}, {'id': 5819, 'synset': 'bi-fold_door.n.01', 'name': 'bi-fold_door'}, {'id': 5820, 'synset': 'bifocals.n.01', 'name': 'bifocals'}, {'id': 5821, 'synset': 'big_blue.n.01', 'name': 'Big_Blue'}, {'id': 5822, 'synset': 'big_board.n.02', 'name': 'big_board'}, {'id': 5823, 'synset': 'bight.n.04', 'name': 'bight'}, {'id': 5824, 'synset': 'bikini.n.02', 'name': 'bikini'}, {'id': 5825, 'synset': 'bikini_pants.n.01', 'name': 'bikini_pants'}, {'id': 5826, 'synset': 'bilge.n.02', 'name': 'bilge'}, {'id': 5827, 'synset': 'bilge_keel.n.01', 'name': 'bilge_keel'}, {'id': 5828, 'synset': 'bilge_pump.n.01', 'name': 'bilge_pump'}, {'id': 5829, 'synset': 'bilge_well.n.01', 'name': 'bilge_well'}, {'id': 5830, 'synset': 'bill.n.08', 'name': 'bill'}, {'id': 5831, 'synset': 'billiard_ball.n.01', 'name': 'billiard_ball'}, {'id': 5832, 'synset': 'billiard_room.n.01', 'name': 'billiard_room'}, {'id': 5833, 'synset': 'bin.n.01', 'name': 'bin'}, {'id': 5834, 'synset': 'binder.n.04', 'name': 'binder'}, {'id': 5835, 'synset': 'bindery.n.01', 'name': 'bindery'}, {'id': 5836, 'synset': 'binding.n.05', 'name': 'binding'}, {'id': 5837, 'synset': 'bin_liner.n.01', 'name': 'bin_liner'}, {'id': 5838, 'synset': 'binnacle.n.01', 'name': 'binnacle'}, {'id': 5839, 'synset': 'binocular_microscope.n.01', 'name': 'binocular_microscope'}, {'id': 5840, 'synset': 'biochip.n.01', 'name': 'biochip'}, {'id': 5841, 'synset': 'biohazard_suit.n.01', 'name': 'biohazard_suit'}, {'id': 5842, 'synset': 'bioscope.n.02', 'name': 'bioscope'}, {'id': 5843, 'synset': 'biplane.n.01', 'name': 'biplane'}, {'id': 5844, 'synset': 'birch.n.03', 'name': 'birch'}, {'id': 5845, 'synset': 'birchbark_canoe.n.01', 'name': 'birchbark_canoe'}, {'id': 5846, 'synset': 'birdcall.n.02', 'name': 'birdcall'}, {'id': 5847, 'synset': 'bird_shot.n.01', 'name': 'bird_shot'}, {'id': 5848, 'synset': 'biretta.n.01', 'name': 'biretta'}, {'id': 5849, 'synset': 'bishop.n.03', 'name': 'bishop'}, {'id': 5850, 'synset': 'bistro.n.01', 'name': 'bistro'}, {'id': 5851, 'synset': 'bit.n.11', 'name': 'bit'}, {'id': 5852, 'synset': 'bit.n.05', 'name': 'bit'}, {'id': 5853, 'synset': 'bite_plate.n.01', 'name': 'bite_plate'}, {'id': 5854, 'synset': 'bitewing.n.01', 'name': 'bitewing'}, {'id': 5855, 'synset': 'bitumastic.n.01', 'name': 'bitumastic'}, {'id': 5856, 'synset': 'black.n.07', 'name': 'black'}, {'id': 5857, 'synset': 'black.n.06', 'name': 'black'}, {'id': 5858, 'synset': 'blackboard_eraser.n.01', 'name': 'blackboard_eraser'}, {'id': 5859, 'synset': 'black_box.n.01', 'name': 'black_box'}, {'id': 5860, 'synset': 'blackface.n.01', 'name': 'blackface'}, {'id': 5861, 'synset': 'blackjack.n.02', 'name': 'blackjack'}, {'id': 5862, 'synset': 'black_tie.n.02', 'name': 'black_tie'}, {'id': 5863, 'synset': 'blackwash.n.03', 'name': 'blackwash'}, {'id': 5864, 'synset': 'bladder.n.02', 'name': 'bladder'}, {'id': 5865, 'synset': 'blade.n.09', 'name': 'blade'}, {'id': 5866, 'synset': 'blade.n.08', 'name': 'blade'}, {'id': 5867, 'synset': 'blade.n.07', 'name': 'blade'}, {'id': 5868, 'synset': 'blank.n.04', 'name': 'blank'}, {'id': 5869, 'synset': 'blast_furnace.n.01', 'name': 'blast_furnace'}, {'id': 5870, 'synset': 'blasting_cap.n.01', 'name': 'blasting_cap'}, {'id': 5871, 'synset': 'blind.n.03', 'name': 'blind'}, {'id': 5872, 'synset': 'blind_curve.n.01', 'name': 'blind_curve'}, {'id': 5873, 'synset': 'blindfold.n.01', 'name': 'blindfold'}, {'id': 5874, 'synset': 'bling.n.01', 'name': 'bling'}, {'id': 5875, 'synset': 'blister_pack.n.01', 'name': 'blister_pack'}, {'id': 5876, 'synset': 'block.n.05', 'name': 'block'}, {'id': 5877, 'synset': 'blockade.n.02', 'name': 'blockade'}, {'id': 5878, 'synset': 'blockade-runner.n.01', 'name': 'blockade-runner'}, {'id': 5879, 'synset': 'block_and_tackle.n.01', 'name': 'block_and_tackle'}, {'id': 5880, 'synset': 'blockbuster.n.01', 'name': 'blockbuster'}, {'id': 5881, 'synset': 'blockhouse.n.01', 'name': 'blockhouse'}, {'id': 5882, 'synset': 'block_plane.n.01', 'name': 'block_plane'}, {'id': 5883, 'synset': 'bloodmobile.n.01', 'name': 'bloodmobile'}, {'id': 5884, 'synset': 'bloomers.n.01', 'name': 'bloomers'}, {'id': 5885, 'synset': 'blower.n.01', 'name': 'blower'}, {'id': 5886, 'synset': 'blowtorch.n.01', 'name': 'blowtorch'}, {'id': 5887, 'synset': 'blucher.n.02', 'name': 'blucher'}, {'id': 5888, 'synset': 'bludgeon.n.01', 'name': 'bludgeon'}, {'id': 5889, 'synset': 'blue.n.02', 'name': 'blue'}, {'id': 5890, 'synset': 'blue_chip.n.02', 'name': 'blue_chip'}, {'id': 5891, 'synset': 'blunderbuss.n.01', 'name': 'blunderbuss'}, {'id': 5892, 'synset': 'blunt_file.n.01', 'name': 'blunt_file'}, {'id': 5893, 'synset': 'boarding.n.02', 'name': 'boarding'}, {'id': 5894, 'synset': 'boarding_house.n.01', 'name': 'boarding_house'}, {'id': 5895, 'synset': 'boardroom.n.01', 'name': 'boardroom'}, {'id': 5896, 'synset': 'boards.n.02', 'name': 'boards'}, {'id': 5897, 'synset': 'boater.n.01', 'name': 'boater'}, {'id': 5898, 'synset': 'boat_hook.n.01', 'name': 'boat_hook'}, {'id': 5899, 'synset': 'boathouse.n.01', 'name': 'boathouse'}, {'id': 5900, 'synset': "boatswain's_chair.n.01", 'name': "boatswain's_chair"}, {'id': 5901, 'synset': 'boat_train.n.01', 'name': 'boat_train'}, {'id': 5902, 'synset': 'boatyard.n.01', 'name': 'boatyard'}, {'id': 5903, 'synset': 'bobsled.n.02', 'name': 'bobsled'}, {'id': 5904, 'synset': 'bobsled.n.01', 'name': 'bobsled'}, {'id': 5905, 'synset': 'bocce_ball.n.01', 'name': 'bocce_ball'}, {'id': 5906, 'synset': 'bodega.n.01', 'name': 'bodega'}, {'id': 5907, 'synset': 'bodice.n.01', 'name': 'bodice'}, {'id': 5908, 'synset': 'bodkin.n.04', 'name': 'bodkin'}, {'id': 5909, 'synset': 'bodkin.n.03', 'name': 'bodkin'}, {'id': 5910, 'synset': 'bodkin.n.02', 'name': 'bodkin'}, {'id': 5911, 'synset': 'body.n.11', 'name': 'body'}, {'id': 5912, 'synset': 'body_armor.n.01', 'name': 'body_armor'}, {'id': 5913, 'synset': 'body_lotion.n.01', 'name': 'body_lotion'}, {'id': 5914, 'synset': 'body_stocking.n.01', 'name': 'body_stocking'}, {'id': 5915, 'synset': 'body_plethysmograph.n.01', 'name': 'body_plethysmograph'}, {'id': 5916, 'synset': 'body_pad.n.01', 'name': 'body_pad'}, {'id': 5917, 'synset': 'bodywork.n.01', 'name': 'bodywork'}, {'id': 5918, 'synset': 'bofors_gun.n.01', 'name': 'Bofors_gun'}, {'id': 5919, 'synset': 'bogy.n.01', 'name': 'bogy'}, {'id': 5920, 'synset': 'boiler.n.01', 'name': 'boiler'}, {'id': 5921, 'synset': 'boiling_water_reactor.n.01', 'name': 'boiling_water_reactor'}, {'id': 5922, 'synset': 'bolero.n.02', 'name': 'bolero'}, {'id': 5923, 'synset': 'bollard.n.01', 'name': 'bollard'}, {'id': 5924, 'synset': 'bolo.n.02', 'name': 'bolo'}, {'id': 5925, 'synset': 'bolt.n.02', 'name': 'bolt'}, {'id': 5926, 'synset': 'bolt_cutter.n.01', 'name': 'bolt_cutter'}, {'id': 5927, 'synset': 'bomb.n.01', 'name': 'bomb'}, {'id': 5928, 'synset': 'bombazine.n.01', 'name': 'bombazine'}, {'id': 5929, 'synset': 'bomb_calorimeter.n.01', 'name': 'bomb_calorimeter'}, {'id': 5930, 'synset': 'bomber.n.01', 'name': 'bomber'}, {'id': 5931, 'synset': 'bomber_jacket.n.01', 'name': 'bomber_jacket'}, {'id': 5932, 'synset': 'bomblet.n.01', 'name': 'bomblet'}, {'id': 5933, 'synset': 'bomb_rack.n.01', 'name': 'bomb_rack'}, {'id': 5934, 'synset': 'bombshell.n.03', 'name': 'bombshell'}, {'id': 5935, 'synset': 'bomb_shelter.n.01', 'name': 'bomb_shelter'}, {'id': 5936, 'synset': 'bone-ash_cup.n.01', 'name': 'bone-ash_cup'}, {'id': 5937, 'synset': 'bone_china.n.01', 'name': 'bone_china'}, {'id': 5938, 'synset': 'bones.n.01', 'name': 'bones'}, {'id': 5939, 'synset': 'boneshaker.n.01', 'name': 'boneshaker'}, {'id': 5940, 'synset': 'bongo.n.01', 'name': 'bongo'}, {'id': 5941, 'synset': 'book.n.11', 'name': 'book'}, {'id': 5942, 'synset': 'book_bag.n.01', 'name': 'book_bag'}, {'id': 5943, 'synset': 'bookbindery.n.01', 'name': 'bookbindery'}, {'id': 5944, 'synset': 'bookend.n.01', 'name': 'bookend'}, {'id': 5945, 'synset': 'bookmobile.n.01', 'name': 'bookmobile'}, {'id': 5946, 'synset': 'bookshelf.n.01', 'name': 'bookshelf'}, {'id': 5947, 'synset': 'bookshop.n.01', 'name': 'bookshop'}, {'id': 5948, 'synset': 'boom.n.05', 'name': 'boom'}, {'id': 5949, 'synset': 'boomerang.n.01', 'name': 'boomerang'}, {'id': 5950, 'synset': 'booster.n.05', 'name': 'booster'}, {'id': 5951, 'synset': 'booster.n.04', 'name': 'booster'}, {'id': 5952, 'synset': 'boot.n.04', 'name': 'boot'}, {'id': 5953, 'synset': 'boot_camp.n.01', 'name': 'boot_camp'}, {'id': 5954, 'synset': 'bootee.n.01', 'name': 'bootee'}, {'id': 5955, 'synset': 'booth.n.02', 'name': 'booth'}, {'id': 5956, 'synset': 'booth.n.04', 'name': 'booth'}, {'id': 5957, 'synset': 'booth.n.01', 'name': 'booth'}, {'id': 5958, 'synset': 'boothose.n.01', 'name': 'boothose'}, {'id': 5959, 'synset': 'bootjack.n.01', 'name': 'bootjack'}, {'id': 5960, 'synset': 'bootlace.n.01', 'name': 'bootlace'}, {'id': 5961, 'synset': 'bootleg.n.02', 'name': 'bootleg'}, {'id': 5962, 'synset': 'bootstrap.n.01', 'name': 'bootstrap'}, {'id': 5963, 'synset': 'bore_bit.n.01', 'name': 'bore_bit'}, {'id': 5964, 'synset': 'boron_chamber.n.01', 'name': 'boron_chamber'}, {'id': 5965, 'synset': 'borstal.n.01', 'name': 'borstal'}, {'id': 5966, 'synset': 'bosom.n.03', 'name': 'bosom'}, {'id': 5967, 'synset': 'boston_rocker.n.01', 'name': 'Boston_rocker'}, {'id': 5968, 'synset': 'bota.n.01', 'name': 'bota'}, {'id': 5969, 'synset': 'bottle.n.03', 'name': 'bottle'}, {'id': 5970, 'synset': 'bottle_bank.n.01', 'name': 'bottle_bank'}, {'id': 5971, 'synset': 'bottlebrush.n.01', 'name': 'bottlebrush'}, {'id': 5972, 'synset': 'bottlecap.n.01', 'name': 'bottlecap'}, {'id': 5973, 'synset': 'bottling_plant.n.01', 'name': 'bottling_plant'}, {'id': 5974, 'synset': 'bottom.n.07', 'name': 'bottom'}, {'id': 5975, 'synset': 'boucle.n.01', 'name': 'boucle'}, {'id': 5976, 'synset': 'boudoir.n.01', 'name': 'boudoir'}, {'id': 5977, 'synset': 'boulle.n.01', 'name': 'boulle'}, {'id': 5978, 'synset': 'bouncing_betty.n.01', 'name': 'bouncing_betty'}, {'id': 5979, 'synset': 'boutique.n.01', 'name': 'boutique'}, {'id': 5980, 'synset': 'boutonniere.n.01', 'name': 'boutonniere'}, {'id': 5981, 'synset': 'bow.n.02', 'name': 'bow'}, {'id': 5982, 'synset': 'bow.n.01', 'name': 'bow'}, {'id': 5983, 'synset': 'bow_and_arrow.n.01', 'name': 'bow_and_arrow'}, {'id': 5984, 'synset': 'bowed_stringed_instrument.n.01', 'name': 'bowed_stringed_instrument'}, {'id': 5985, 'synset': 'bowie_knife.n.01', 'name': 'Bowie_knife'}, {'id': 5986, 'synset': 'bowl.n.01', 'name': 'bowl'}, {'id': 5987, 'synset': 'bowl.n.07', 'name': 'bowl'}, {'id': 5988, 'synset': 'bowline.n.01', 'name': 'bowline'}, {'id': 5989, 'synset': 'bowling_alley.n.01', 'name': 'bowling_alley'}, {'id': 5990, 'synset': 'bowling_equipment.n.01', 'name': 'bowling_equipment'}, {'id': 5991, 'synset': 'bowling_pin.n.01', 'name': 'bowling_pin'}, {'id': 5992, 'synset': 'bowling_shoe.n.01', 'name': 'bowling_shoe'}, {'id': 5993, 'synset': 'bowsprit.n.01', 'name': 'bowsprit'}, {'id': 5994, 'synset': 'bowstring.n.01', 'name': 'bowstring'}, {'id': 5995, 'synset': 'box.n.02', 'name': 'box'}, {'id': 5996, 'synset': 'box.n.08', 'name': 'box'}, {'id': 5997, 'synset': 'box_beam.n.01', 'name': 'box_beam'}, {'id': 5998, 'synset': 'box_camera.n.01', 'name': 'box_camera'}, {'id': 5999, 'synset': 'boxcar.n.01', 'name': 'boxcar'}, {'id': 6000, 'synset': 'box_coat.n.01', 'name': 'box_coat'}, {'id': 6001, 'synset': 'boxing_equipment.n.01', 'name': 'boxing_equipment'}, {'id': 6002, 'synset': 'box_office.n.02', 'name': 'box_office'}, {'id': 6003, 'synset': 'box_spring.n.01', 'name': 'box_spring'}, {'id': 6004, 'synset': 'box_wrench.n.01', 'name': 'box_wrench'}, {'id': 6005, 'synset': 'brace.n.09', 'name': 'brace'}, {'id': 6006, 'synset': 'brace.n.07', 'name': 'brace'}, {'id': 6007, 'synset': 'brace.n.01', 'name': 'brace'}, {'id': 6008, 'synset': 'brace_and_bit.n.01', 'name': 'brace_and_bit'}, {'id': 6009, 'synset': 'bracer.n.01', 'name': 'bracer'}, {'id': 6010, 'synset': 'brace_wrench.n.01', 'name': 'brace_wrench'}, {'id': 6011, 'synset': 'bracket.n.04', 'name': 'bracket'}, {'id': 6012, 'synset': 'bradawl.n.01', 'name': 'bradawl'}, {'id': 6013, 'synset': 'brake.n.01', 'name': 'brake'}, {'id': 6014, 'synset': 'brake.n.05', 'name': 'brake'}, {'id': 6015, 'synset': 'brake_band.n.01', 'name': 'brake_band'}, {'id': 6016, 'synset': 'brake_cylinder.n.01', 'name': 'brake_cylinder'}, {'id': 6017, 'synset': 'brake_disk.n.01', 'name': 'brake_disk'}, {'id': 6018, 'synset': 'brake_drum.n.01', 'name': 'brake_drum'}, {'id': 6019, 'synset': 'brake_lining.n.01', 'name': 'brake_lining'}, {'id': 6020, 'synset': 'brake_pad.n.01', 'name': 'brake_pad'}, {'id': 6021, 'synset': 'brake_pedal.n.01', 'name': 'brake_pedal'}, {'id': 6022, 'synset': 'brake_shoe.n.01', 'name': 'brake_shoe'}, {'id': 6023, 'synset': 'brake_system.n.01', 'name': 'brake_system'}, {'id': 6024, 'synset': 'brass.n.02', 'name': 'brass'}, {'id': 6025, 'synset': 'brass.n.05', 'name': 'brass'}, {'id': 6026, 'synset': 'brassard.n.01', 'name': 'brassard'}, {'id': 6027, 'synset': 'brasserie.n.01', 'name': 'brasserie'}, {'id': 6028, 'synset': 'brassie.n.01', 'name': 'brassie'}, {'id': 6029, 'synset': 'brass_knucks.n.01', 'name': 'brass_knucks'}, {'id': 6030, 'synset': 'brattice.n.01', 'name': 'brattice'}, {'id': 6031, 'synset': 'brazier.n.01', 'name': 'brazier'}, {'id': 6032, 'synset': 'breadbasket.n.03', 'name': 'breadbasket'}, {'id': 6033, 'synset': 'bread_knife.n.01', 'name': 'bread_knife'}, {'id': 6034, 'synset': 'breakable.n.01', 'name': 'breakable'}, {'id': 6035, 'synset': 'breakfast_area.n.01', 'name': 'breakfast_area'}, {'id': 6036, 'synset': 'breakfast_table.n.01', 'name': 'breakfast_table'}, {'id': 6037, 'synset': 'breakwater.n.01', 'name': 'breakwater'}, {'id': 6038, 'synset': 'breast_drill.n.01', 'name': 'breast_drill'}, {'id': 6039, 'synset': 'breast_implant.n.01', 'name': 'breast_implant'}, {'id': 6040, 'synset': 'breastplate.n.01', 'name': 'breastplate'}, {'id': 6041, 'synset': 'breast_pocket.n.01', 'name': 'breast_pocket'}, {'id': 6042, 'synset': 'breathalyzer.n.01', 'name': 'breathalyzer'}, {'id': 6043, 'synset': 'breechblock.n.01', 'name': 'breechblock'}, {'id': 6044, 'synset': 'breeches.n.01', 'name': 'breeches'}, {'id': 6045, 'synset': 'breeches_buoy.n.01', 'name': 'breeches_buoy'}, {'id': 6046, 'synset': 'breechloader.n.01', 'name': 'breechloader'}, {'id': 6047, 'synset': 'breeder_reactor.n.01', 'name': 'breeder_reactor'}, {'id': 6048, 'synset': 'bren.n.01', 'name': 'Bren'}, {'id': 6049, 'synset': 'brewpub.n.01', 'name': 'brewpub'}, {'id': 6050, 'synset': 'brick.n.01', 'name': 'brick'}, {'id': 6051, 'synset': 'brickkiln.n.01', 'name': 'brickkiln'}, {'id': 6052, 'synset': "bricklayer's_hammer.n.01", 'name': "bricklayer's_hammer"}, {'id': 6053, 'synset': 'brick_trowel.n.01', 'name': 'brick_trowel'}, {'id': 6054, 'synset': 'brickwork.n.01', 'name': 'brickwork'}, {'id': 6055, 'synset': 'bridge.n.01', 'name': 'bridge'}, {'id': 6056, 'synset': 'bridge.n.08', 'name': 'bridge'}, {'id': 6057, 'synset': 'bridle.n.01', 'name': 'bridle'}, {'id': 6058, 'synset': 'bridle_path.n.01', 'name': 'bridle_path'}, {'id': 6059, 'synset': 'bridoon.n.01', 'name': 'bridoon'}, {'id': 6060, 'synset': 'briefcase_bomb.n.01', 'name': 'briefcase_bomb'}, {'id': 6061, 'synset': 'briefcase_computer.n.01', 'name': 'briefcase_computer'}, {'id': 6062, 'synset': 'briefs.n.01', 'name': 'briefs'}, {'id': 6063, 'synset': 'brig.n.02', 'name': 'brig'}, {'id': 6064, 'synset': 'brig.n.01', 'name': 'brig'}, {'id': 6065, 'synset': 'brigandine.n.01', 'name': 'brigandine'}, {'id': 6066, 'synset': 'brigantine.n.01', 'name': 'brigantine'}, {'id': 6067, 'synset': 'brilliantine.n.01', 'name': 'brilliantine'}, {'id': 6068, 'synset': 'brilliant_pebble.n.01', 'name': 'brilliant_pebble'}, {'id': 6069, 'synset': 'brim.n.02', 'name': 'brim'}, {'id': 6070, 'synset': 'bristle_brush.n.01', 'name': 'bristle_brush'}, {'id': 6071, 'synset': 'britches.n.01', 'name': 'britches'}, {'id': 6072, 'synset': 'broad_arrow.n.03', 'name': 'broad_arrow'}, {'id': 6073, 'synset': 'broadax.n.01', 'name': 'broadax'}, {'id': 6074, 'synset': 'brochette.n.01', 'name': 'brochette'}, {'id': 6075, 'synset': 'broadcaster.n.02', 'name': 'broadcaster'}, {'id': 6076, 'synset': 'broadcloth.n.02', 'name': 'broadcloth'}, {'id': 6077, 'synset': 'broadcloth.n.01', 'name': 'broadcloth'}, {'id': 6078, 'synset': 'broad_hatchet.n.01', 'name': 'broad_hatchet'}, {'id': 6079, 'synset': 'broadloom.n.01', 'name': 'broadloom'}, {'id': 6080, 'synset': 'broadside.n.03', 'name': 'broadside'}, {'id': 6081, 'synset': 'broadsword.n.01', 'name': 'broadsword'}, {'id': 6082, 'synset': 'brocade.n.01', 'name': 'brocade'}, {'id': 6083, 'synset': 'brogan.n.01', 'name': 'brogan'}, {'id': 6084, 'synset': 'broiler.n.01', 'name': 'broiler'}, {'id': 6085, 'synset': 'broken_arch.n.01', 'name': 'broken_arch'}, {'id': 6086, 'synset': 'bronchoscope.n.01', 'name': 'bronchoscope'}, {'id': 6087, 'synset': 'broom_closet.n.01', 'name': 'broom_closet'}, {'id': 6088, 'synset': 'broomstick.n.01', 'name': 'broomstick'}, {'id': 6089, 'synset': 'brougham.n.01', 'name': 'brougham'}, {'id': 6090, 'synset': 'browning_automatic_rifle.n.01', 'name': 'Browning_automatic_rifle'}, {'id': 6091, 'synset': 'browning_machine_gun.n.01', 'name': 'Browning_machine_gun'}, {'id': 6092, 'synset': 'brownstone.n.02', 'name': 'brownstone'}, {'id': 6093, 'synset': 'brunch_coat.n.01', 'name': 'brunch_coat'}, {'id': 6094, 'synset': 'brush.n.02', 'name': 'brush'}, {'id': 6095, 'synset': 'brussels_carpet.n.01', 'name': 'Brussels_carpet'}, {'id': 6096, 'synset': 'brussels_lace.n.01', 'name': 'Brussels_lace'}, {'id': 6097, 'synset': 'bubble.n.04', 'name': 'bubble'}, {'id': 6098, 'synset': 'bubble_chamber.n.01', 'name': 'bubble_chamber'}, {'id': 6099, 'synset': 'bubble_jet_printer.n.01', 'name': 'bubble_jet_printer'}, {'id': 6100, 'synset': 'buckboard.n.01', 'name': 'buckboard'}, {'id': 6101, 'synset': 'bucket_seat.n.01', 'name': 'bucket_seat'}, {'id': 6102, 'synset': 'bucket_shop.n.02', 'name': 'bucket_shop'}, {'id': 6103, 'synset': 'buckle.n.01', 'name': 'buckle'}, {'id': 6104, 'synset': 'buckram.n.01', 'name': 'buckram'}, {'id': 6105, 'synset': 'bucksaw.n.01', 'name': 'bucksaw'}, {'id': 6106, 'synset': 'buckskins.n.01', 'name': 'buckskins'}, {'id': 6107, 'synset': 'buff.n.05', 'name': 'buff'}, {'id': 6108, 'synset': 'buffer.n.05', 'name': 'buffer'}, {'id': 6109, 'synset': 'buffer.n.04', 'name': 'buffer'}, {'id': 6110, 'synset': 'buffet.n.01', 'name': 'buffet'}, {'id': 6111, 'synset': 'buffing_wheel.n.01', 'name': 'buffing_wheel'}, {'id': 6112, 'synset': 'bugle.n.01', 'name': 'bugle'}, {'id': 6113, 'synset': 'building.n.01', 'name': 'building'}, {'id': 6114, 'synset': 'building_complex.n.01', 'name': 'building_complex'}, {'id': 6115, 'synset': 'bulldog_clip.n.01', 'name': 'bulldog_clip'}, {'id': 6116, 'synset': 'bulldog_wrench.n.01', 'name': 'bulldog_wrench'}, {'id': 6117, 'synset': 'bullet.n.01', 'name': 'bullet'}, {'id': 6118, 'synset': 'bullion.n.02', 'name': 'bullion'}, {'id': 6119, 'synset': 'bullnose.n.01', 'name': 'bullnose'}, {'id': 6120, 'synset': 'bullpen.n.02', 'name': 'bullpen'}, {'id': 6121, 'synset': 'bullpen.n.01', 'name': 'bullpen'}, {'id': 6122, 'synset': 'bullring.n.01', 'name': 'bullring'}, {'id': 6123, 'synset': 'bulwark.n.02', 'name': 'bulwark'}, {'id': 6124, 'synset': 'bumboat.n.01', 'name': 'bumboat'}, {'id': 6125, 'synset': 'bumper.n.02', 'name': 'bumper'}, {'id': 6126, 'synset': 'bumper.n.01', 'name': 'bumper'}, {'id': 6127, 'synset': 'bumper_car.n.01', 'name': 'bumper_car'}, {'id': 6128, 'synset': 'bumper_guard.n.01', 'name': 'bumper_guard'}, {'id': 6129, 'synset': 'bumper_jack.n.01', 'name': 'bumper_jack'}, {'id': 6130, 'synset': 'bundle.n.02', 'name': 'bundle'}, {'id': 6131, 'synset': 'bung.n.01', 'name': 'bung'}, {'id': 6132, 'synset': 'bungalow.n.01', 'name': 'bungalow'}, {'id': 6133, 'synset': 'bungee.n.01', 'name': 'bungee'}, {'id': 6134, 'synset': 'bunghole.n.02', 'name': 'bunghole'}, {'id': 6135, 'synset': 'bunk.n.03', 'name': 'bunk'}, {'id': 6136, 'synset': 'bunk.n.01', 'name': 'bunk'}, {'id': 6137, 'synset': 'bunker.n.01', 'name': 'bunker'}, {'id': 6138, 'synset': 'bunker.n.03', 'name': 'bunker'}, {'id': 6139, 'synset': 'bunker.n.02', 'name': 'bunker'}, {'id': 6140, 'synset': 'bunsen_burner.n.01', 'name': 'bunsen_burner'}, {'id': 6141, 'synset': 'bunting.n.01', 'name': 'bunting'}, {'id': 6142, 'synset': 'bur.n.02', 'name': 'bur'}, {'id': 6143, 'synset': 'burberry.n.01', 'name': 'Burberry'}, {'id': 6144, 'synset': 'burette.n.01', 'name': 'burette'}, {'id': 6145, 'synset': 'burglar_alarm.n.02', 'name': 'burglar_alarm'}, {'id': 6146, 'synset': 'burial_chamber.n.01', 'name': 'burial_chamber'}, {'id': 6147, 'synset': 'burial_garment.n.01', 'name': 'burial_garment'}, {'id': 6148, 'synset': 'burial_mound.n.01', 'name': 'burial_mound'}, {'id': 6149, 'synset': 'burin.n.01', 'name': 'burin'}, {'id': 6150, 'synset': 'burqa.n.01', 'name': 'burqa'}, {'id': 6151, 'synset': 'burlap.n.01', 'name': 'burlap'}, {'id': 6152, 'synset': 'burn_bag.n.01', 'name': 'burn_bag'}, {'id': 6153, 'synset': 'burner.n.01', 'name': 'burner'}, {'id': 6154, 'synset': 'burnous.n.01', 'name': 'burnous'}, {'id': 6155, 'synset': 'burp_gun.n.01', 'name': 'burp_gun'}, {'id': 6156, 'synset': 'burr.n.04', 'name': 'burr'}, {'id': 6157, 'synset': 'bushel_basket.n.01', 'name': 'bushel_basket'}, {'id': 6158, 'synset': 'bushing.n.02', 'name': 'bushing'}, {'id': 6159, 'synset': 'bush_jacket.n.01', 'name': 'bush_jacket'}, {'id': 6160, 'synset': 'business_suit.n.01', 'name': 'business_suit'}, {'id': 6161, 'synset': 'buskin.n.01', 'name': 'buskin'}, {'id': 6162, 'synset': 'bustier.n.01', 'name': 'bustier'}, {'id': 6163, 'synset': 'bustle.n.02', 'name': 'bustle'}, {'id': 6164, 'synset': 'butcher_knife.n.01', 'name': 'butcher_knife'}, {'id': 6165, 'synset': 'butcher_shop.n.01', 'name': 'butcher_shop'}, {'id': 6166, 'synset': 'butter_dish.n.01', 'name': 'butter_dish'}, {'id': 6167, 'synset': 'butterfly_valve.n.01', 'name': 'butterfly_valve'}, {'id': 6168, 'synset': 'butter_knife.n.01', 'name': 'butter_knife'}, {'id': 6169, 'synset': 'butt_hinge.n.01', 'name': 'butt_hinge'}, {'id': 6170, 'synset': 'butt_joint.n.01', 'name': 'butt_joint'}, {'id': 6171, 'synset': 'buttonhook.n.01', 'name': 'buttonhook'}, {'id': 6172, 'synset': 'buttress.n.01', 'name': 'buttress'}, {'id': 6173, 'synset': 'butt_shaft.n.01', 'name': 'butt_shaft'}, {'id': 6174, 'synset': 'butt_weld.n.01', 'name': 'butt_weld'}, {'id': 6175, 'synset': 'buzz_bomb.n.01', 'name': 'buzz_bomb'}, {'id': 6176, 'synset': 'buzzer.n.02', 'name': 'buzzer'}, {'id': 6177, 'synset': 'bvd.n.01', 'name': 'BVD'}, {'id': 6178, 'synset': 'bypass_condenser.n.01', 'name': 'bypass_condenser'}, {'id': 6179, 'synset': 'byway.n.01', 'name': 'byway'}, {'id': 6180, 'synset': 'cab.n.02', 'name': 'cab'}, {'id': 6181, 'synset': 'cab.n.01', 'name': 'cab'}, {'id': 6182, 'synset': 'cabaret.n.01', 'name': 'cabaret'}, {'id': 6183, 'synset': 'caber.n.01', 'name': 'caber'}, {'id': 6184, 'synset': 'cabin.n.03', 'name': 'cabin'}, {'id': 6185, 'synset': 'cabin.n.02', 'name': 'cabin'}, {'id': 6186, 'synset': 'cabin_class.n.01', 'name': 'cabin_class'}, {'id': 6187, 'synset': 'cabin_cruiser.n.01', 'name': 'cabin_cruiser'}, {'id': 6188, 'synset': 'cabinet.n.04', 'name': 'cabinet'}, {'id': 6189, 'synset': 'cabinetwork.n.01', 'name': 'cabinetwork'}, {'id': 6190, 'synset': 'cabin_liner.n.01', 'name': 'cabin_liner'}, {'id': 6191, 'synset': 'cable.n.06', 'name': 'cable'}, {'id': 6192, 'synset': 'cable.n.02', 'name': 'cable'}, {'id': 6193, 'synset': 'cable_car.n.01', 'name': 'cable_car'}, {'id': 6194, 'synset': 'cache.n.03', 'name': 'cache'}, {'id': 6195, 'synset': 'caddy.n.01', 'name': 'caddy'}, {'id': 6196, 'synset': 'caesium_clock.n.01', 'name': 'caesium_clock'}, {'id': 6197, 'synset': 'cafe.n.01', 'name': 'cafe'}, {'id': 6198, 'synset': 'cafeteria.n.01', 'name': 'cafeteria'}, {'id': 6199, 'synset': 'cafeteria_tray.n.01', 'name': 'cafeteria_tray'}, {'id': 6200, 'synset': 'caff.n.01', 'name': 'caff'}, {'id': 6201, 'synset': 'caftan.n.02', 'name': 'caftan'}, {'id': 6202, 'synset': 'caftan.n.01', 'name': 'caftan'}, {'id': 6203, 'synset': 'cage.n.01', 'name': 'cage'}, {'id': 6204, 'synset': 'cage.n.04', 'name': 'cage'}, {'id': 6205, 'synset': 'cagoule.n.01', 'name': 'cagoule'}, {'id': 6206, 'synset': 'caisson.n.02', 'name': 'caisson'}, {'id': 6207, 'synset': 'calash.n.02', 'name': 'calash'}, {'id': 6208, 'synset': 'calceus.n.01', 'name': 'calceus'}, {'id': 6209, 'synset': 'calcimine.n.01', 'name': 'calcimine'}, {'id': 6210, 'synset': 'caldron.n.01', 'name': 'caldron'}, {'id': 6211, 'synset': 'calico.n.01', 'name': 'calico'}, {'id': 6212, 'synset': 'caliper.n.01', 'name': 'caliper'}, {'id': 6213, 'synset': 'call-board.n.01', 'name': 'call-board'}, {'id': 6214, 'synset': 'call_center.n.01', 'name': 'call_center'}, {'id': 6215, 'synset': 'caller_id.n.01', 'name': 'caller_ID'}, {'id': 6216, 'synset': 'calliope.n.02', 'name': 'calliope'}, {'id': 6217, 'synset': 'calorimeter.n.01', 'name': 'calorimeter'}, {'id': 6218, 'synset': 'calpac.n.01', 'name': 'calpac'}, {'id': 6219, 'synset': 'camail.n.01', 'name': 'camail'}, {'id': 6220, 'synset': 'camber_arch.n.01', 'name': 'camber_arch'}, {'id': 6221, 'synset': 'cambric.n.01', 'name': 'cambric'}, {'id': 6222, 'synset': "camel's_hair.n.01", 'name': "camel's_hair"}, {'id': 6223, 'synset': 'camera_lucida.n.01', 'name': 'camera_lucida'}, {'id': 6224, 'synset': 'camera_obscura.n.01', 'name': 'camera_obscura'}, {'id': 6225, 'synset': 'camera_tripod.n.01', 'name': 'camera_tripod'}, {'id': 6226, 'synset': 'camise.n.01', 'name': 'camise'}, {'id': 6227, 'synset': 'camisole.n.02', 'name': 'camisole'}, {'id': 6228, 'synset': 'camisole.n.01', 'name': 'camisole'}, {'id': 6229, 'synset': 'camlet.n.02', 'name': 'camlet'}, {'id': 6230, 'synset': 'camouflage.n.03', 'name': 'camouflage'}, {'id': 6231, 'synset': 'camouflage.n.02', 'name': 'camouflage'}, {'id': 6232, 'synset': 'camp.n.01', 'name': 'camp'}, {'id': 6233, 'synset': 'camp.n.03', 'name': 'camp'}, {'id': 6234, 'synset': 'camp.n.07', 'name': 'camp'}, {'id': 6235, 'synset': 'campaign_hat.n.01', 'name': 'campaign_hat'}, {'id': 6236, 'synset': 'campanile.n.01', 'name': 'campanile'}, {'id': 6237, 'synset': 'camp_chair.n.01', 'name': 'camp_chair'}, {'id': 6238, 'synset': 'camper_trailer.n.01', 'name': 'camper_trailer'}, {'id': 6239, 'synset': 'campstool.n.01', 'name': 'campstool'}, {'id': 6240, 'synset': 'camshaft.n.01', 'name': 'camshaft'}, {'id': 6241, 'synset': 'canal.n.03', 'name': 'canal'}, {'id': 6242, 'synset': 'canal_boat.n.01', 'name': 'canal_boat'}, {'id': 6243, 'synset': 'candelabrum.n.01', 'name': 'candelabrum'}, {'id': 6244, 'synset': 'candid_camera.n.01', 'name': 'candid_camera'}, {'id': 6245, 'synset': 'candlepin.n.01', 'name': 'candlepin'}, {'id': 6246, 'synset': 'candlesnuffer.n.01', 'name': 'candlesnuffer'}, {'id': 6247, 'synset': 'candlewick.n.02', 'name': 'candlewick'}, {'id': 6248, 'synset': 'candy_thermometer.n.01', 'name': 'candy_thermometer'}, {'id': 6249, 'synset': 'cane.n.03', 'name': 'cane'}, {'id': 6250, 'synset': 'cangue.n.01', 'name': 'cangue'}, {'id': 6251, 'synset': 'cannery.n.01', 'name': 'cannery'}, {'id': 6252, 'synset': 'cannikin.n.02', 'name': 'cannikin'}, {'id': 6253, 'synset': 'cannikin.n.01', 'name': 'cannikin'}, {'id': 6254, 'synset': 'cannon.n.01', 'name': 'cannon'}, {'id': 6255, 'synset': 'cannon.n.04', 'name': 'cannon'}, {'id': 6256, 'synset': 'cannon.n.03', 'name': 'cannon'}, {'id': 6257, 'synset': 'cannon.n.02', 'name': 'cannon'}, {'id': 6258, 'synset': 'cannonball.n.01', 'name': 'cannonball'}, {'id': 6259, 'synset': 'canopic_jar.n.01', 'name': 'canopic_jar'}, {'id': 6260, 'synset': 'canopy.n.03', 'name': 'canopy'}, {'id': 6261, 'synset': 'canopy.n.02', 'name': 'canopy'}, {'id': 6262, 'synset': 'canopy.n.01', 'name': 'canopy'}, {'id': 6263, 'synset': 'canteen.n.05', 'name': 'canteen'}, {'id': 6264, 'synset': 'canteen.n.04', 'name': 'canteen'}, {'id': 6265, 'synset': 'canteen.n.03', 'name': 'canteen'}, {'id': 6266, 'synset': 'canteen.n.02', 'name': 'canteen'}, {'id': 6267, 'synset': 'cant_hook.n.01', 'name': 'cant_hook'}, {'id': 6268, 'synset': 'cantilever.n.01', 'name': 'cantilever'}, {'id': 6269, 'synset': 'cantilever_bridge.n.01', 'name': 'cantilever_bridge'}, {'id': 6270, 'synset': 'cantle.n.01', 'name': 'cantle'}, {'id': 6271, 'synset': 'canton_crepe.n.01', 'name': 'Canton_crepe'}, {'id': 6272, 'synset': 'canvas.n.01', 'name': 'canvas'}, {'id': 6273, 'synset': 'canvas.n.06', 'name': 'canvas'}, {'id': 6274, 'synset': 'canvas_tent.n.01', 'name': 'canvas_tent'}, {'id': 6275, 'synset': 'cap.n.04', 'name': 'cap'}, {'id': 6276, 'synset': 'capacitor.n.01', 'name': 'capacitor'}, {'id': 6277, 'synset': 'caparison.n.01', 'name': 'caparison'}, {'id': 6278, 'synset': 'capital_ship.n.01', 'name': 'capital_ship'}, {'id': 6279, 'synset': 'capitol.n.01', 'name': 'capitol'}, {'id': 6280, 'synset': 'cap_opener.n.01', 'name': 'cap_opener'}, {'id': 6281, 'synset': 'capote.n.02', 'name': 'capote'}, {'id': 6282, 'synset': 'capote.n.01', 'name': 'capote'}, {'id': 6283, 'synset': 'cap_screw.n.01', 'name': 'cap_screw'}, {'id': 6284, 'synset': 'capstan.n.01', 'name': 'capstan'}, {'id': 6285, 'synset': 'capstone.n.02', 'name': 'capstone'}, {'id': 6286, 'synset': 'capsule.n.01', 'name': 'capsule'}, {'id': 6287, 'synset': "captain's_chair.n.01", 'name': "captain's_chair"}, {'id': 6288, 'synset': 'carabiner.n.01', 'name': 'carabiner'}, {'id': 6289, 'synset': 'carafe.n.01', 'name': 'carafe'}, {'id': 6290, 'synset': 'caravansary.n.01', 'name': 'caravansary'}, {'id': 6291, 'synset': 'carbine.n.01', 'name': 'carbine'}, {'id': 6292, 'synset': 'car_bomb.n.01', 'name': 'car_bomb'}, {'id': 6293, 'synset': 'carbon_arc_lamp.n.01', 'name': 'carbon_arc_lamp'}, {'id': 6294, 'synset': 'carboy.n.01', 'name': 'carboy'}, {'id': 6295, 'synset': 'carburetor.n.01', 'name': 'carburetor'}, {'id': 6296, 'synset': 'car_carrier.n.01', 'name': 'car_carrier'}, {'id': 6297, 'synset': 'cardcase.n.01', 'name': 'cardcase'}, {'id': 6298, 'synset': 'cardiac_monitor.n.01', 'name': 'cardiac_monitor'}, {'id': 6299, 'synset': 'card_index.n.01', 'name': 'card_index'}, {'id': 6300, 'synset': 'cardiograph.n.01', 'name': 'cardiograph'}, {'id': 6301, 'synset': 'cardioid_microphone.n.01', 'name': 'cardioid_microphone'}, {'id': 6302, 'synset': 'car_door.n.01', 'name': 'car_door'}, {'id': 6303, 'synset': 'cardroom.n.01', 'name': 'cardroom'}, {'id': 6304, 'synset': 'card_table.n.02', 'name': 'card_table'}, {'id': 6305, 'synset': 'card_table.n.01', 'name': 'card_table'}, {'id': 6306, 'synset': 'car-ferry.n.01', 'name': 'car-ferry'}, {'id': 6307, 'synset': 'cargo_area.n.01', 'name': 'cargo_area'}, {'id': 6308, 'synset': 'cargo_container.n.01', 'name': 'cargo_container'}, {'id': 6309, 'synset': 'cargo_door.n.01', 'name': 'cargo_door'}, {'id': 6310, 'synset': 'cargo_hatch.n.01', 'name': 'cargo_hatch'}, {'id': 6311, 'synset': 'cargo_helicopter.n.01', 'name': 'cargo_helicopter'}, {'id': 6312, 'synset': 'cargo_liner.n.01', 'name': 'cargo_liner'}, {'id': 6313, 'synset': 'carillon.n.01', 'name': 'carillon'}, {'id': 6314, 'synset': 'car_mirror.n.01', 'name': 'car_mirror'}, {'id': 6315, 'synset': 'caroche.n.01', 'name': 'caroche'}, {'id': 6316, 'synset': 'carousel.n.02', 'name': 'carousel'}, {'id': 6317, 'synset': "carpenter's_hammer.n.01", 'name': "carpenter's_hammer"}, {'id': 6318, 'synset': "carpenter's_kit.n.01", 'name': "carpenter's_kit"}, {'id': 6319, 'synset': "carpenter's_level.n.01", 'name': "carpenter's_level"}, {'id': 6320, 'synset': "carpenter's_mallet.n.01", 'name': "carpenter's_mallet"}, {'id': 6321, 'synset': "carpenter's_rule.n.01", 'name': "carpenter's_rule"}, {'id': 6322, 'synset': "carpenter's_square.n.01", 'name': "carpenter's_square"}, {'id': 6323, 'synset': 'carpetbag.n.01', 'name': 'carpetbag'}, {'id': 6324, 'synset': 'carpet_beater.n.01', 'name': 'carpet_beater'}, {'id': 6325, 'synset': 'carpet_loom.n.01', 'name': 'carpet_loom'}, {'id': 6326, 'synset': 'carpet_pad.n.01', 'name': 'carpet_pad'}, {'id': 6327, 'synset': 'carpet_sweeper.n.01', 'name': 'carpet_sweeper'}, {'id': 6328, 'synset': 'carpet_tack.n.01', 'name': 'carpet_tack'}, {'id': 6329, 'synset': 'carport.n.01', 'name': 'carport'}, {'id': 6330, 'synset': 'carrack.n.01', 'name': 'carrack'}, {'id': 6331, 'synset': 'carrel.n.02', 'name': 'carrel'}, {'id': 6332, 'synset': 'carriage.n.04', 'name': 'carriage'}, {'id': 6333, 'synset': 'carriage_bolt.n.01', 'name': 'carriage_bolt'}, {'id': 6334, 'synset': 'carriageway.n.01', 'name': 'carriageway'}, {'id': 6335, 'synset': 'carriage_wrench.n.01', 'name': 'carriage_wrench'}, {'id': 6336, 'synset': 'carrick_bend.n.01', 'name': 'carrick_bend'}, {'id': 6337, 'synset': 'carrier.n.10', 'name': 'carrier'}, {'id': 6338, 'synset': 'carrycot.n.01', 'name': 'carrycot'}, {'id': 6339, 'synset': 'car_seat.n.01', 'name': 'car_seat'}, {'id': 6340, 'synset': 'car_tire.n.01', 'name': 'car_tire'}, {'id': 6341, 'synset': 'cartouche.n.01', 'name': 'cartouche'}, {'id': 6342, 'synset': 'car_train.n.01', 'name': 'car_train'}, {'id': 6343, 'synset': 'cartridge.n.01', 'name': 'cartridge'}, {'id': 6344, 'synset': 'cartridge.n.04', 'name': 'cartridge'}, {'id': 6345, 'synset': 'cartridge_belt.n.01', 'name': 'cartridge_belt'}, {'id': 6346, 'synset': 'cartridge_extractor.n.01', 'name': 'cartridge_extractor'}, {'id': 6347, 'synset': 'cartridge_fuse.n.01', 'name': 'cartridge_fuse'}, {'id': 6348, 'synset': 'cartridge_holder.n.01', 'name': 'cartridge_holder'}, {'id': 6349, 'synset': 'cartwheel.n.01', 'name': 'cartwheel'}, {'id': 6350, 'synset': 'carving_fork.n.01', 'name': 'carving_fork'}, {'id': 6351, 'synset': 'carving_knife.n.01', 'name': 'carving_knife'}, {'id': 6352, 'synset': 'car_wheel.n.01', 'name': 'car_wheel'}, {'id': 6353, 'synset': 'caryatid.n.01', 'name': 'caryatid'}, {'id': 6354, 'synset': 'cascade_liquefier.n.01', 'name': 'cascade_liquefier'}, {'id': 6355, 'synset': 'cascade_transformer.n.01', 'name': 'cascade_transformer'}, {'id': 6356, 'synset': 'case.n.05', 'name': 'case'}, {'id': 6357, 'synset': 'case.n.20', 'name': 'case'}, {'id': 6358, 'synset': 'case.n.18', 'name': 'case'}, {'id': 6359, 'synset': 'casein_paint.n.01', 'name': 'casein_paint'}, {'id': 6360, 'synset': 'case_knife.n.02', 'name': 'case_knife'}, {'id': 6361, 'synset': 'case_knife.n.01', 'name': 'case_knife'}, {'id': 6362, 'synset': 'casement.n.01', 'name': 'casement'}, {'id': 6363, 'synset': 'casement_window.n.01', 'name': 'casement_window'}, {'id': 6364, 'synset': 'casern.n.01', 'name': 'casern'}, {'id': 6365, 'synset': 'case_shot.n.01', 'name': 'case_shot'}, {'id': 6366, 'synset': 'cash_bar.n.01', 'name': 'cash_bar'}, {'id': 6367, 'synset': 'cashbox.n.01', 'name': 'cashbox'}, {'id': 6368, 'synset': 'cash_machine.n.01', 'name': 'cash_machine'}, {'id': 6369, 'synset': 'cashmere.n.01', 'name': 'cashmere'}, {'id': 6370, 'synset': 'casing.n.03', 'name': 'casing'}, {'id': 6371, 'synset': 'casino.n.01', 'name': 'casino'}, {'id': 6372, 'synset': 'casket.n.02', 'name': 'casket'}, {'id': 6373, 'synset': 'casque.n.01', 'name': 'casque'}, {'id': 6374, 'synset': 'casquet.n.01', 'name': 'casquet'}, {'id': 6375, 'synset': 'cassegrainian_telescope.n.01', 'name': 'Cassegrainian_telescope'}, {'id': 6376, 'synset': 'casserole.n.02', 'name': 'casserole'}, {'id': 6377, 'synset': 'cassette_deck.n.01', 'name': 'cassette_deck'}, {'id': 6378, 'synset': 'cassette_player.n.01', 'name': 'cassette_player'}, {'id': 6379, 'synset': 'cassette_recorder.n.01', 'name': 'cassette_recorder'}, {'id': 6380, 'synset': 'cassette_tape.n.01', 'name': 'cassette_tape'}, {'id': 6381, 'synset': 'cassock.n.01', 'name': 'cassock'}, {'id': 6382, 'synset': 'caster.n.03', 'name': 'caster'}, {'id': 6383, 'synset': 'caster.n.02', 'name': 'caster'}, {'id': 6384, 'synset': 'castle.n.02', 'name': 'castle'}, {'id': 6385, 'synset': 'castle.n.03', 'name': 'castle'}, {'id': 6386, 'synset': 'catacomb.n.01', 'name': 'catacomb'}, {'id': 6387, 'synset': 'catafalque.n.01', 'name': 'catafalque'}, {'id': 6388, 'synset': 'catalytic_converter.n.01', 'name': 'catalytic_converter'}, {'id': 6389, 'synset': 'catalytic_cracker.n.01', 'name': 'catalytic_cracker'}, {'id': 6390, 'synset': 'catamaran.n.01', 'name': 'catamaran'}, {'id': 6391, 'synset': 'catapult.n.03', 'name': 'catapult'}, {'id': 6392, 'synset': 'catapult.n.02', 'name': 'catapult'}, {'id': 6393, 'synset': 'catboat.n.01', 'name': 'catboat'}, {'id': 6394, 'synset': 'cat_box.n.01', 'name': 'cat_box'}, {'id': 6395, 'synset': 'catch.n.07', 'name': 'catch'}, {'id': 6396, 'synset': 'catchall.n.01', 'name': 'catchall'}, {'id': 6397, 'synset': "catcher's_mask.n.01", 'name': "catcher's_mask"}, {'id': 6398, 'synset': 'catchment.n.01', 'name': 'catchment'}, {'id': 6399, 'synset': 'caterpillar.n.02', 'name': 'Caterpillar'}, {'id': 6400, 'synset': 'cathedra.n.01', 'name': 'cathedra'}, {'id': 6401, 'synset': 'cathedral.n.01', 'name': 'cathedral'}, {'id': 6402, 'synset': 'cathedral.n.02', 'name': 'cathedral'}, {'id': 6403, 'synset': 'catheter.n.01', 'name': 'catheter'}, {'id': 6404, 'synset': 'cathode.n.01', 'name': 'cathode'}, {'id': 6405, 'synset': 'cathode-ray_tube.n.01', 'name': 'cathode-ray_tube'}, {'id': 6406, 'synset': "cat-o'-nine-tails.n.01", 'name': "cat-o'-nine-tails"}, {'id': 6407, 'synset': "cat's-paw.n.02", 'name': "cat's-paw"}, {'id': 6408, 'synset': 'catsup_bottle.n.01', 'name': 'catsup_bottle'}, {'id': 6409, 'synset': 'cattle_car.n.01', 'name': 'cattle_car'}, {'id': 6410, 'synset': 'cattle_guard.n.01', 'name': 'cattle_guard'}, {'id': 6411, 'synset': 'cattleship.n.01', 'name': 'cattleship'}, {'id': 6412, 'synset': 'cautery.n.01', 'name': 'cautery'}, {'id': 6413, 'synset': 'cavalier_hat.n.01', 'name': 'cavalier_hat'}, {'id': 6414, 'synset': 'cavalry_sword.n.01', 'name': 'cavalry_sword'}, {'id': 6415, 'synset': 'cavetto.n.01', 'name': 'cavetto'}, {'id': 6416, 'synset': 'cavity_wall.n.01', 'name': 'cavity_wall'}, {'id': 6417, 'synset': 'c_battery.n.01', 'name': 'C_battery'}, {'id': 6418, 'synset': 'c-clamp.n.01', 'name': 'C-clamp'}, {'id': 6419, 'synset': 'cd_drive.n.01', 'name': 'CD_drive'}, {'id': 6420, 'synset': 'cd-r.n.01', 'name': 'CD-R'}, {'id': 6421, 'synset': 'cd-rom.n.01', 'name': 'CD-ROM'}, {'id': 6422, 'synset': 'cd-rom_drive.n.01', 'name': 'CD-ROM_drive'}, {'id': 6423, 'synset': 'cedar_chest.n.01', 'name': 'cedar_chest'}, {'id': 6424, 'synset': 'ceiling.n.01', 'name': 'ceiling'}, {'id': 6425, 'synset': 'celesta.n.01', 'name': 'celesta'}, {'id': 6426, 'synset': 'cell.n.03', 'name': 'cell'}, {'id': 6427, 'synset': 'cell.n.07', 'name': 'cell'}, {'id': 6428, 'synset': 'cellar.n.03', 'name': 'cellar'}, {'id': 6429, 'synset': 'cellblock.n.01', 'name': 'cellblock'}, {'id': 6430, 'synset': 'cello.n.01', 'name': 'cello'}, {'id': 6431, 'synset': 'cellophane.n.01', 'name': 'cellophane'}, {'id': 6432, 'synset': 'cellulose_tape.n.01', 'name': 'cellulose_tape'}, {'id': 6433, 'synset': 'cenotaph.n.01', 'name': 'cenotaph'}, {'id': 6434, 'synset': 'censer.n.01', 'name': 'censer'}, {'id': 6435, 'synset': 'center.n.03', 'name': 'center'}, {'id': 6436, 'synset': 'center_punch.n.01', 'name': 'center_punch'}, {'id': 6437, 'synset': 'centigrade_thermometer.n.01', 'name': 'Centigrade_thermometer'}, {'id': 6438, 'synset': 'central_processing_unit.n.01', 'name': 'central_processing_unit'}, {'id': 6439, 'synset': 'centrifugal_pump.n.01', 'name': 'centrifugal_pump'}, {'id': 6440, 'synset': 'centrifuge.n.01', 'name': 'centrifuge'}, {'id': 6441, 'synset': 'ceramic.n.01', 'name': 'ceramic'}, {'id': 6442, 'synset': 'ceramic_ware.n.01', 'name': 'ceramic_ware'}, {'id': 6443, 'synset': 'cereal_bowl.n.01', 'name': 'cereal_bowl'}, {'id': 6444, 'synset': 'cereal_box.n.01', 'name': 'cereal_box'}, {'id': 6445, 'synset': 'cerecloth.n.01', 'name': 'cerecloth'}, {'id': 6446, 'synset': 'cesspool.n.01', 'name': 'cesspool'}, {'id': 6447, 'synset': 'chachka.n.02', 'name': 'chachka'}, {'id': 6448, 'synset': 'chador.n.01', 'name': 'chador'}, {'id': 6449, 'synset': 'chafing_dish.n.01', 'name': 'chafing_dish'}, {'id': 6450, 'synset': 'chain.n.03', 'name': 'chain'}, {'id': 6451, 'synset': 'chain.n.05', 'name': 'chain'}, {'id': 6452, 'synset': 'chainlink_fence.n.01', 'name': 'chainlink_fence'}, {'id': 6453, 'synset': 'chain_printer.n.01', 'name': 'chain_printer'}, {'id': 6454, 'synset': 'chain_saw.n.01', 'name': 'chain_saw'}, {'id': 6455, 'synset': 'chain_store.n.01', 'name': 'chain_store'}, {'id': 6456, 'synset': 'chain_tongs.n.01', 'name': 'chain_tongs'}, {'id': 6457, 'synset': 'chain_wrench.n.01', 'name': 'chain_wrench'}, {'id': 6458, 'synset': 'chair.n.05', 'name': 'chair'}, {'id': 6459, 'synset': 'chair_of_state.n.01', 'name': 'chair_of_state'}, {'id': 6460, 'synset': 'chairlift.n.01', 'name': 'chairlift'}, {'id': 6461, 'synset': 'chaise.n.02', 'name': 'chaise'}, {'id': 6462, 'synset': 'chalet.n.01', 'name': 'chalet'}, {'id': 6463, 'synset': 'chalk.n.04', 'name': 'chalk'}, {'id': 6464, 'synset': 'challis.n.01', 'name': 'challis'}, {'id': 6465, 'synset': 'chamberpot.n.01', 'name': 'chamberpot'}, {'id': 6466, 'synset': 'chambray.n.01', 'name': 'chambray'}, {'id': 6467, 'synset': 'chamfer_bit.n.01', 'name': 'chamfer_bit'}, {'id': 6468, 'synset': 'chamfer_plane.n.01', 'name': 'chamfer_plane'}, {'id': 6469, 'synset': 'chamois_cloth.n.01', 'name': 'chamois_cloth'}, {'id': 6470, 'synset': 'chancel.n.01', 'name': 'chancel'}, {'id': 6471, 'synset': 'chancellery.n.01', 'name': 'chancellery'}, {'id': 6472, 'synset': 'chancery.n.02', 'name': 'chancery'}, {'id': 6473, 'synset': 'chandlery.n.01', 'name': 'chandlery'}, {'id': 6474, 'synset': 'chanfron.n.01', 'name': 'chanfron'}, {'id': 6475, 'synset': 'chanter.n.01', 'name': 'chanter'}, {'id': 6476, 'synset': 'chantry.n.02', 'name': 'chantry'}, {'id': 6477, 'synset': 'chapel.n.01', 'name': 'chapel'}, {'id': 6478, 'synset': 'chapterhouse.n.02', 'name': 'chapterhouse'}, {'id': 6479, 'synset': 'chapterhouse.n.01', 'name': 'chapterhouse'}, {'id': 6480, 'synset': 'character_printer.n.01', 'name': 'character_printer'}, {'id': 6481, 'synset': 'charcuterie.n.01', 'name': 'charcuterie'}, {'id': 6482, 'synset': 'charge-exchange_accelerator.n.01', 'name': 'charge-exchange_accelerator'}, {'id': 6483, 'synset': 'charger.n.02', 'name': 'charger'}, {'id': 6484, 'synset': 'chariot.n.01', 'name': 'chariot'}, {'id': 6485, 'synset': 'chariot.n.02', 'name': 'chariot'}, {'id': 6486, 'synset': 'charnel_house.n.01', 'name': 'charnel_house'}, {'id': 6487, 'synset': 'chassis.n.03', 'name': 'chassis'}, {'id': 6488, 'synset': 'chassis.n.02', 'name': 'chassis'}, {'id': 6489, 'synset': 'chasuble.n.01', 'name': 'chasuble'}, {'id': 6490, 'synset': 'chateau.n.01', 'name': 'chateau'}, {'id': 6491, 'synset': 'chatelaine.n.02', 'name': 'chatelaine'}, {'id': 6492, 'synset': 'checker.n.03', 'name': 'checker'}, {'id': 6493, 'synset': 'checkout.n.03', 'name': 'checkout'}, {'id': 6494, 'synset': 'cheekpiece.n.01', 'name': 'cheekpiece'}, {'id': 6495, 'synset': 'cheeseboard.n.01', 'name': 'cheeseboard'}, {'id': 6496, 'synset': 'cheesecloth.n.01', 'name': 'cheesecloth'}, {'id': 6497, 'synset': 'cheese_cutter.n.01', 'name': 'cheese_cutter'}, {'id': 6498, 'synset': 'cheese_press.n.01', 'name': 'cheese_press'}, {'id': 6499, 'synset': 'chemical_bomb.n.01', 'name': 'chemical_bomb'}, {'id': 6500, 'synset': 'chemical_plant.n.01', 'name': 'chemical_plant'}, {'id': 6501, 'synset': 'chemical_reactor.n.01', 'name': 'chemical_reactor'}, {'id': 6502, 'synset': 'chemise.n.02', 'name': 'chemise'}, {'id': 6503, 'synset': 'chemise.n.01', 'name': 'chemise'}, {'id': 6504, 'synset': 'chenille.n.02', 'name': 'chenille'}, {'id': 6505, 'synset': 'chessman.n.01', 'name': 'chessman'}, {'id': 6506, 'synset': 'chest.n.02', 'name': 'chest'}, {'id': 6507, 'synset': 'chesterfield.n.02', 'name': 'chesterfield'}, {'id': 6508, 'synset': 'chest_of_drawers.n.01', 'name': 'chest_of_drawers'}, {'id': 6509, 'synset': 'chest_protector.n.01', 'name': 'chest_protector'}, {'id': 6510, 'synset': 'cheval-de-frise.n.01', 'name': 'cheval-de-frise'}, {'id': 6511, 'synset': 'cheval_glass.n.01', 'name': 'cheval_glass'}, {'id': 6512, 'synset': 'chicane.n.02', 'name': 'chicane'}, {'id': 6513, 'synset': 'chicken_coop.n.01', 'name': 'chicken_coop'}, {'id': 6514, 'synset': 'chicken_wire.n.01', 'name': 'chicken_wire'}, {'id': 6515, 'synset': 'chicken_yard.n.01', 'name': 'chicken_yard'}, {'id': 6516, 'synset': 'chiffon.n.01', 'name': 'chiffon'}, {'id': 6517, 'synset': 'chiffonier.n.01', 'name': 'chiffonier'}, {'id': 6518, 'synset': "child's_room.n.01", 'name': "child's_room"}, {'id': 6519, 'synset': 'chimney_breast.n.01', 'name': 'chimney_breast'}, {'id': 6520, 'synset': 'chimney_corner.n.01', 'name': 'chimney_corner'}, {'id': 6521, 'synset': 'china.n.02', 'name': 'china'}, {'id': 6522, 'synset': 'china_cabinet.n.01', 'name': 'china_cabinet'}, {'id': 6523, 'synset': 'chinchilla.n.02', 'name': 'chinchilla'}, {'id': 6524, 'synset': 'chinese_lantern.n.01', 'name': 'Chinese_lantern'}, {'id': 6525, 'synset': 'chinese_puzzle.n.01', 'name': 'Chinese_puzzle'}, {'id': 6526, 'synset': 'chinning_bar.n.01', 'name': 'chinning_bar'}, {'id': 6527, 'synset': 'chino.n.02', 'name': 'chino'}, {'id': 6528, 'synset': 'chino.n.01', 'name': 'chino'}, {'id': 6529, 'synset': 'chin_rest.n.01', 'name': 'chin_rest'}, {'id': 6530, 'synset': 'chin_strap.n.01', 'name': 'chin_strap'}, {'id': 6531, 'synset': 'chintz.n.01', 'name': 'chintz'}, {'id': 6532, 'synset': 'chip.n.07', 'name': 'chip'}, {'id': 6533, 'synset': 'chisel.n.01', 'name': 'chisel'}, {'id': 6534, 'synset': 'chlamys.n.02', 'name': 'chlamys'}, {'id': 6535, 'synset': 'choir.n.03', 'name': 'choir'}, {'id': 6536, 'synset': 'choir_loft.n.01', 'name': 'choir_loft'}, {'id': 6537, 'synset': 'choke.n.02', 'name': 'choke'}, {'id': 6538, 'synset': 'choke.n.01', 'name': 'choke'}, {'id': 6539, 'synset': 'chokey.n.01', 'name': 'chokey'}, {'id': 6540, 'synset': 'choo-choo.n.01', 'name': 'choo-choo'}, {'id': 6541, 'synset': 'chopine.n.01', 'name': 'chopine'}, {'id': 6542, 'synset': 'chordophone.n.01', 'name': 'chordophone'}, {'id': 6543, 'synset': 'christmas_stocking.n.01', 'name': 'Christmas_stocking'}, {'id': 6544, 'synset': 'chronograph.n.01', 'name': 'chronograph'}, {'id': 6545, 'synset': 'chronometer.n.01', 'name': 'chronometer'}, {'id': 6546, 'synset': 'chronoscope.n.01', 'name': 'chronoscope'}, {'id': 6547, 'synset': 'chuck.n.03', 'name': 'chuck'}, {'id': 6548, 'synset': 'chuck_wagon.n.01', 'name': 'chuck_wagon'}, {'id': 6549, 'synset': 'chukka.n.02', 'name': 'chukka'}, {'id': 6550, 'synset': 'church.n.02', 'name': 'church'}, {'id': 6551, 'synset': 'church_bell.n.01', 'name': 'church_bell'}, {'id': 6552, 'synset': 'church_hat.n.01', 'name': 'church_hat'}, {'id': 6553, 'synset': 'church_key.n.01', 'name': 'church_key'}, {'id': 6554, 'synset': 'church_tower.n.01', 'name': 'church_tower'}, {'id': 6555, 'synset': 'churidars.n.01', 'name': 'churidars'}, {'id': 6556, 'synset': 'churn.n.01', 'name': 'churn'}, {'id': 6557, 'synset': 'ciderpress.n.01', 'name': 'ciderpress'}, {'id': 6558, 'synset': 'cigar_band.n.01', 'name': 'cigar_band'}, {'id': 6559, 'synset': 'cigar_cutter.n.01', 'name': 'cigar_cutter'}, {'id': 6560, 'synset': 'cigarette_butt.n.01', 'name': 'cigarette_butt'}, {'id': 6561, 'synset': 'cigarette_holder.n.01', 'name': 'cigarette_holder'}, {'id': 6562, 'synset': 'cigar_lighter.n.01', 'name': 'cigar_lighter'}, {'id': 6563, 'synset': 'cinch.n.02', 'name': 'cinch'}, {'id': 6564, 'synset': 'cinema.n.02', 'name': 'cinema'}, {'id': 6565, 'synset': 'cinquefoil.n.02', 'name': 'cinquefoil'}, {'id': 6566, 'synset': 'circle.n.08', 'name': 'circle'}, {'id': 6567, 'synset': 'circlet.n.02', 'name': 'circlet'}, {'id': 6568, 'synset': 'circuit.n.01', 'name': 'circuit'}, {'id': 6569, 'synset': 'circuit_board.n.01', 'name': 'circuit_board'}, {'id': 6570, 'synset': 'circuit_breaker.n.01', 'name': 'circuit_breaker'}, {'id': 6571, 'synset': 'circuitry.n.01', 'name': 'circuitry'}, {'id': 6572, 'synset': 'circular_plane.n.01', 'name': 'circular_plane'}, {'id': 6573, 'synset': 'circular_saw.n.01', 'name': 'circular_saw'}, {'id': 6574, 'synset': 'circus_tent.n.01', 'name': 'circus_tent'}, {'id': 6575, 'synset': 'cistern.n.03', 'name': 'cistern'}, {'id': 6576, 'synset': 'cittern.n.01', 'name': 'cittern'}, {'id': 6577, 'synset': 'city_hall.n.01', 'name': 'city_hall'}, {'id': 6578, 'synset': 'cityscape.n.02', 'name': 'cityscape'}, {'id': 6579, 'synset': 'city_university.n.01', 'name': 'city_university'}, {'id': 6580, 'synset': 'civies.n.01', 'name': 'civies'}, {'id': 6581, 'synset': 'civilian_clothing.n.01', 'name': 'civilian_clothing'}, {'id': 6582, 'synset': 'clack_valve.n.01', 'name': 'clack_valve'}, {'id': 6583, 'synset': 'clamp.n.01', 'name': 'clamp'}, {'id': 6584, 'synset': 'clamshell.n.02', 'name': 'clamshell'}, {'id': 6585, 'synset': 'clapper.n.03', 'name': 'clapper'}, {'id': 6586, 'synset': 'clapperboard.n.01', 'name': 'clapperboard'}, {'id': 6587, 'synset': 'clarence.n.01', 'name': 'clarence'}, {'id': 6588, 'synset': 'clark_cell.n.01', 'name': 'Clark_cell'}, {'id': 6589, 'synset': 'clasp_knife.n.01', 'name': 'clasp_knife'}, {'id': 6590, 'synset': 'classroom.n.01', 'name': 'classroom'}, {'id': 6591, 'synset': 'clavichord.n.01', 'name': 'clavichord'}, {'id': 6592, 'synset': 'clavier.n.02', 'name': 'clavier'}, {'id': 6593, 'synset': 'clay_pigeon.n.01', 'name': 'clay_pigeon'}, {'id': 6594, 'synset': 'claymore_mine.n.01', 'name': 'claymore_mine'}, {'id': 6595, 'synset': 'claymore.n.01', 'name': 'claymore'}, {'id': 6596, 'synset': 'cleaners.n.01', 'name': 'cleaners'}, {'id': 6597, 'synset': 'cleaning_implement.n.01', 'name': 'cleaning_implement'}, {'id': 6598, 'synset': 'cleaning_pad.n.01', 'name': 'cleaning_pad'}, {'id': 6599, 'synset': 'clean_room.n.01', 'name': 'clean_room'}, {'id': 6600, 'synset': 'clearway.n.01', 'name': 'clearway'}, {'id': 6601, 'synset': 'cleat.n.01', 'name': 'cleat'}, {'id': 6602, 'synset': 'cleats.n.01', 'name': 'cleats'}, {'id': 6603, 'synset': 'cleaver.n.01', 'name': 'cleaver'}, {'id': 6604, 'synset': 'clerestory.n.01', 'name': 'clerestory'}, {'id': 6605, 'synset': 'clevis.n.01', 'name': 'clevis'}, {'id': 6606, 'synset': 'clews.n.01', 'name': 'clews'}, {'id': 6607, 'synset': 'cliff_dwelling.n.01', 'name': 'cliff_dwelling'}, {'id': 6608, 'synset': 'climbing_frame.n.01', 'name': 'climbing_frame'}, {'id': 6609, 'synset': 'clinch.n.03', 'name': 'clinch'}, {'id': 6610, 'synset': 'clinch.n.02', 'name': 'clinch'}, {'id': 6611, 'synset': 'clincher.n.03', 'name': 'clincher'}, {'id': 6612, 'synset': 'clinic.n.03', 'name': 'clinic'}, {'id': 6613, 'synset': 'clinical_thermometer.n.01', 'name': 'clinical_thermometer'}, {'id': 6614, 'synset': 'clinker.n.02', 'name': 'clinker'}, {'id': 6615, 'synset': 'clinometer.n.01', 'name': 'clinometer'}, {'id': 6616, 'synset': 'clip_lead.n.01', 'name': 'clip_lead'}, {'id': 6617, 'synset': 'clip-on.n.01', 'name': 'clip-on'}, {'id': 6618, 'synset': 'clipper.n.04', 'name': 'clipper'}, {'id': 6619, 'synset': 'clipper.n.02', 'name': 'clipper'}, {'id': 6620, 'synset': 'cloak.n.01', 'name': 'cloak'}, {'id': 6621, 'synset': 'cloakroom.n.02', 'name': 'cloakroom'}, {'id': 6622, 'synset': 'cloche.n.02', 'name': 'cloche'}, {'id': 6623, 'synset': 'cloche.n.01', 'name': 'cloche'}, {'id': 6624, 'synset': 'clock_pendulum.n.01', 'name': 'clock_pendulum'}, {'id': 6625, 'synset': 'clock_radio.n.01', 'name': 'clock_radio'}, {'id': 6626, 'synset': 'clockwork.n.01', 'name': 'clockwork'}, {'id': 6627, 'synset': 'clog.n.01', 'name': 'clog'}, {'id': 6628, 'synset': 'cloisonne.n.01', 'name': 'cloisonne'}, {'id': 6629, 'synset': 'cloister.n.02', 'name': 'cloister'}, {'id': 6630, 'synset': 'closed_circuit.n.01', 'name': 'closed_circuit'}, {'id': 6631, 'synset': 'closed-circuit_television.n.01', 'name': 'closed-circuit_television'}, {'id': 6632, 'synset': 'closed_loop.n.01', 'name': 'closed_loop'}, {'id': 6633, 'synset': 'closet.n.04', 'name': 'closet'}, {'id': 6634, 'synset': 'closeup_lens.n.01', 'name': 'closeup_lens'}, {'id': 6635, 'synset': 'cloth_cap.n.01', 'name': 'cloth_cap'}, {'id': 6636, 'synset': 'cloth_covering.n.01', 'name': 'cloth_covering'}, {'id': 6637, 'synset': 'clothesbrush.n.01', 'name': 'clothesbrush'}, {'id': 6638, 'synset': 'clothes_closet.n.01', 'name': 'clothes_closet'}, {'id': 6639, 'synset': 'clothes_dryer.n.01', 'name': 'clothes_dryer'}, {'id': 6640, 'synset': 'clotheshorse.n.01', 'name': 'clotheshorse'}, {'id': 6641, 'synset': 'clothes_tree.n.01', 'name': 'clothes_tree'}, {'id': 6642, 'synset': 'clothing.n.01', 'name': 'clothing'}, {'id': 6643, 'synset': 'clothing_store.n.01', 'name': 'clothing_store'}, {'id': 6644, 'synset': 'clout_nail.n.01', 'name': 'clout_nail'}, {'id': 6645, 'synset': 'clove_hitch.n.01', 'name': 'clove_hitch'}, {'id': 6646, 'synset': 'club_car.n.01', 'name': 'club_car'}, {'id': 6647, 'synset': 'clubroom.n.01', 'name': 'clubroom'}, {'id': 6648, 'synset': 'cluster_bomb.n.01', 'name': 'cluster_bomb'}, {'id': 6649, 'synset': 'clutch.n.07', 'name': 'clutch'}, {'id': 6650, 'synset': 'clutch.n.06', 'name': 'clutch'}, {'id': 6651, 'synset': 'coach.n.04', 'name': 'coach'}, {'id': 6652, 'synset': 'coach_house.n.01', 'name': 'coach_house'}, {'id': 6653, 'synset': 'coal_car.n.01', 'name': 'coal_car'}, {'id': 6654, 'synset': 'coal_chute.n.01', 'name': 'coal_chute'}, {'id': 6655, 'synset': 'coal_house.n.01', 'name': 'coal_house'}, {'id': 6656, 'synset': 'coal_shovel.n.01', 'name': 'coal_shovel'}, {'id': 6657, 'synset': 'coaming.n.01', 'name': 'coaming'}, {'id': 6658, 'synset': 'coaster_brake.n.01', 'name': 'coaster_brake'}, {'id': 6659, 'synset': 'coat_button.n.01', 'name': 'coat_button'}, {'id': 6660, 'synset': 'coat_closet.n.01', 'name': 'coat_closet'}, {'id': 6661, 'synset': 'coatdress.n.01', 'name': 'coatdress'}, {'id': 6662, 'synset': 'coatee.n.01', 'name': 'coatee'}, {'id': 6663, 'synset': 'coating.n.01', 'name': 'coating'}, {'id': 6664, 'synset': 'coating.n.03', 'name': 'coating'}, {'id': 6665, 'synset': 'coat_of_paint.n.01', 'name': 'coat_of_paint'}, {'id': 6666, 'synset': 'coattail.n.01', 'name': 'coattail'}, {'id': 6667, 'synset': 'coaxial_cable.n.01', 'name': 'coaxial_cable'}, {'id': 6668, 'synset': 'cobweb.n.03', 'name': 'cobweb'}, {'id': 6669, 'synset': 'cobweb.n.01', 'name': 'cobweb'}, {'id': 6670, 'synset': 'cockcroft_and_walton_accelerator.n.01', 'name': 'Cockcroft_and_Walton_accelerator'}, {'id': 6671, 'synset': 'cocked_hat.n.01', 'name': 'cocked_hat'}, {'id': 6672, 'synset': 'cockhorse.n.01', 'name': 'cockhorse'}, {'id': 6673, 'synset': 'cockleshell.n.01', 'name': 'cockleshell'}, {'id': 6674, 'synset': 'cockpit.n.01', 'name': 'cockpit'}, {'id': 6675, 'synset': 'cockpit.n.03', 'name': 'cockpit'}, {'id': 6676, 'synset': 'cockpit.n.02', 'name': 'cockpit'}, {'id': 6677, 'synset': 'cockscomb.n.03', 'name': 'cockscomb'}, {'id': 6678, 'synset': 'cocktail_dress.n.01', 'name': 'cocktail_dress'}, {'id': 6679, 'synset': 'cocktail_lounge.n.01', 'name': 'cocktail_lounge'}, {'id': 6680, 'synset': 'cocktail_shaker.n.01', 'name': 'cocktail_shaker'}, {'id': 6681, 'synset': 'cocotte.n.02', 'name': 'cocotte'}, {'id': 6682, 'synset': 'codpiece.n.01', 'name': 'codpiece'}, {'id': 6683, 'synset': 'coelostat.n.01', 'name': 'coelostat'}, {'id': 6684, 'synset': 'coffee_can.n.01', 'name': 'coffee_can'}, {'id': 6685, 'synset': 'coffee_cup.n.01', 'name': 'coffee_cup'}, {'id': 6686, 'synset': 'coffee_filter.n.01', 'name': 'coffee_filter'}, {'id': 6687, 'synset': 'coffee_mill.n.01', 'name': 'coffee_mill'}, {'id': 6688, 'synset': 'coffee_mug.n.01', 'name': 'coffee_mug'}, {'id': 6689, 'synset': 'coffee_stall.n.01', 'name': 'coffee_stall'}, {'id': 6690, 'synset': 'coffee_urn.n.01', 'name': 'coffee_urn'}, {'id': 6691, 'synset': 'coffer.n.02', 'name': 'coffer'}, {'id': 6692, 'synset': 'coffey_still.n.01', 'name': 'Coffey_still'}, {'id': 6693, 'synset': 'coffin.n.01', 'name': 'coffin'}, {'id': 6694, 'synset': 'cog.n.02', 'name': 'cog'}, {'id': 6695, 'synset': 'coif.n.02', 'name': 'coif'}, {'id': 6696, 'synset': 'coil.n.01', 'name': 'coil'}, {'id': 6697, 'synset': 'coil.n.06', 'name': 'coil'}, {'id': 6698, 'synset': 'coil.n.03', 'name': 'coil'}, {'id': 6699, 'synset': 'coil_spring.n.01', 'name': 'coil_spring'}, {'id': 6700, 'synset': 'coin_box.n.01', 'name': 'coin_box'}, {'id': 6701, 'synset': 'cold_cathode.n.01', 'name': 'cold_cathode'}, {'id': 6702, 'synset': 'cold_chisel.n.01', 'name': 'cold_chisel'}, {'id': 6703, 'synset': 'cold_cream.n.01', 'name': 'cold_cream'}, {'id': 6704, 'synset': 'cold_frame.n.01', 'name': 'cold_frame'}, {'id': 6705, 'synset': 'collar.n.01', 'name': 'collar'}, {'id': 6706, 'synset': 'collar.n.03', 'name': 'collar'}, {'id': 6707, 'synset': 'college.n.03', 'name': 'college'}, {'id': 6708, 'synset': 'collet.n.02', 'name': 'collet'}, {'id': 6709, 'synset': 'collider.n.01', 'name': 'collider'}, {'id': 6710, 'synset': 'colliery.n.01', 'name': 'colliery'}, {'id': 6711, 'synset': 'collimator.n.02', 'name': 'collimator'}, {'id': 6712, 'synset': 'collimator.n.01', 'name': 'collimator'}, {'id': 6713, 'synset': 'cologne.n.02', 'name': 'cologne'}, {'id': 6714, 'synset': 'colonnade.n.01', 'name': 'colonnade'}, {'id': 6715, 'synset': 'colonoscope.n.01', 'name': 'colonoscope'}, {'id': 6716, 'synset': 'colorimeter.n.01', 'name': 'colorimeter'}, {'id': 6717, 'synset': 'colors.n.02', 'name': 'colors'}, {'id': 6718, 'synset': 'color_television.n.01', 'name': 'color_television'}, {'id': 6719, 'synset': 'color_tube.n.01', 'name': 'color_tube'}, {'id': 6720, 'synset': 'color_wash.n.01', 'name': 'color_wash'}, {'id': 6721, 'synset': 'colt.n.02', 'name': 'Colt'}, {'id': 6722, 'synset': 'colter.n.01', 'name': 'colter'}, {'id': 6723, 'synset': 'columbarium.n.03', 'name': 'columbarium'}, {'id': 6724, 'synset': 'columbarium.n.02', 'name': 'columbarium'}, {'id': 6725, 'synset': 'column.n.07', 'name': 'column'}, {'id': 6726, 'synset': 'column.n.06', 'name': 'column'}, {'id': 6727, 'synset': 'comb.n.01', 'name': 'comb'}, {'id': 6728, 'synset': 'comb.n.03', 'name': 'comb'}, {'id': 6729, 'synset': 'comber.n.03', 'name': 'comber'}, {'id': 6730, 'synset': 'combination_plane.n.01', 'name': 'combination_plane'}, {'id': 6731, 'synset': 'combine.n.01', 'name': 'combine'}, {'id': 6732, 'synset': 'command_module.n.01', 'name': 'command_module'}, {'id': 6733, 'synset': 'commissary.n.01', 'name': 'commissary'}, {'id': 6734, 'synset': 'commissary.n.02', 'name': 'commissary'}, {'id': 6735, 'synset': 'commodity.n.01', 'name': 'commodity'}, {'id': 6736, 'synset': 'common_ax.n.01', 'name': 'common_ax'}, {'id': 6737, 'synset': 'common_room.n.01', 'name': 'common_room'}, {'id': 6738, 'synset': 'communications_satellite.n.01', 'name': 'communications_satellite'}, {'id': 6739, 'synset': 'communication_system.n.01', 'name': 'communication_system'}, {'id': 6740, 'synset': 'community_center.n.01', 'name': 'community_center'}, {'id': 6741, 'synset': 'commutator.n.01', 'name': 'commutator'}, {'id': 6742, 'synset': 'commuter.n.01', 'name': 'commuter'}, {'id': 6743, 'synset': 'compact.n.01', 'name': 'compact'}, {'id': 6744, 'synset': 'compact.n.03', 'name': 'compact'}, {'id': 6745, 'synset': 'compact_disk.n.01', 'name': 'compact_disk'}, {'id': 6746, 'synset': 'compact-disk_burner.n.01', 'name': 'compact-disk_burner'}, {'id': 6747, 'synset': 'companionway.n.01', 'name': 'companionway'}, {'id': 6748, 'synset': 'compartment.n.02', 'name': 'compartment'}, {'id': 6749, 'synset': 'compartment.n.01', 'name': 'compartment'}, {'id': 6750, 'synset': 'compass.n.04', 'name': 'compass'}, {'id': 6751, 'synset': 'compass_card.n.01', 'name': 'compass_card'}, {'id': 6752, 'synset': 'compass_saw.n.01', 'name': 'compass_saw'}, {'id': 6753, 'synset': 'compound.n.03', 'name': 'compound'}, {'id': 6754, 'synset': 'compound_lens.n.01', 'name': 'compound_lens'}, {'id': 6755, 'synset': 'compound_lever.n.01', 'name': 'compound_lever'}, {'id': 6756, 'synset': 'compound_microscope.n.01', 'name': 'compound_microscope'}, {'id': 6757, 'synset': 'compress.n.01', 'name': 'compress'}, {'id': 6758, 'synset': 'compression_bandage.n.01', 'name': 'compression_bandage'}, {'id': 6759, 'synset': 'compressor.n.01', 'name': 'compressor'}, {'id': 6760, 'synset': 'computer.n.01', 'name': 'computer'}, {'id': 6761, 'synset': 'computer_circuit.n.01', 'name': 'computer_circuit'}, {'id': 6762, 'synset': 'computerized_axial_tomography_scanner.n.01', 'name': 'computerized_axial_tomography_scanner'}, {'id': 6763, 'synset': 'computer_monitor.n.01', 'name': 'computer_monitor'}, {'id': 6764, 'synset': 'computer_network.n.01', 'name': 'computer_network'}, {'id': 6765, 'synset': 'computer_screen.n.01', 'name': 'computer_screen'}, {'id': 6766, 'synset': 'computer_store.n.01', 'name': 'computer_store'}, {'id': 6767, 'synset': 'computer_system.n.01', 'name': 'computer_system'}, {'id': 6768, 'synset': 'concentration_camp.n.01', 'name': 'concentration_camp'}, {'id': 6769, 'synset': 'concert_grand.n.01', 'name': 'concert_grand'}, {'id': 6770, 'synset': 'concert_hall.n.01', 'name': 'concert_hall'}, {'id': 6771, 'synset': 'concertina.n.02', 'name': 'concertina'}, {'id': 6772, 'synset': 'concertina.n.01', 'name': 'concertina'}, {'id': 6773, 'synset': 'concrete_mixer.n.01', 'name': 'concrete_mixer'}, {'id': 6774, 'synset': 'condensation_pump.n.01', 'name': 'condensation_pump'}, {'id': 6775, 'synset': 'condenser.n.04', 'name': 'condenser'}, {'id': 6776, 'synset': 'condenser.n.03', 'name': 'condenser'}, {'id': 6777, 'synset': 'condenser.n.02', 'name': 'condenser'}, {'id': 6778, 'synset': 'condenser_microphone.n.01', 'name': 'condenser_microphone'}, {'id': 6779, 'synset': 'condominium.n.02', 'name': 'condominium'}, {'id': 6780, 'synset': 'condominium.n.01', 'name': 'condominium'}, {'id': 6781, 'synset': 'conductor.n.04', 'name': 'conductor'}, {'id': 6782, 'synset': 'cone_clutch.n.01', 'name': 'cone_clutch'}, {'id': 6783, 'synset': 'confectionery.n.02', 'name': 'confectionery'}, {'id': 6784, 'synset': 'conference_center.n.01', 'name': 'conference_center'}, {'id': 6785, 'synset': 'conference_room.n.01', 'name': 'conference_room'}, {'id': 6786, 'synset': 'conference_table.n.01', 'name': 'conference_table'}, {'id': 6787, 'synset': 'confessional.n.01', 'name': 'confessional'}, {'id': 6788, 'synset': 'conformal_projection.n.01', 'name': 'conformal_projection'}, {'id': 6789, 'synset': 'congress_boot.n.01', 'name': 'congress_boot'}, {'id': 6790, 'synset': 'conic_projection.n.01', 'name': 'conic_projection'}, {'id': 6791, 'synset': 'connecting_rod.n.01', 'name': 'connecting_rod'}, {'id': 6792, 'synset': 'connecting_room.n.01', 'name': 'connecting_room'}, {'id': 6793, 'synset': 'connection.n.03', 'name': 'connection'}, {'id': 6794, 'synset': 'conning_tower.n.02', 'name': 'conning_tower'}, {'id': 6795, 'synset': 'conning_tower.n.01', 'name': 'conning_tower'}, {'id': 6796, 'synset': 'conservatory.n.03', 'name': 'conservatory'}, {'id': 6797, 'synset': 'conservatory.n.02', 'name': 'conservatory'}, {'id': 6798, 'synset': 'console.n.03', 'name': 'console'}, {'id': 6799, 'synset': 'console.n.02', 'name': 'console'}, {'id': 6800, 'synset': 'console_table.n.01', 'name': 'console_table'}, {'id': 6801, 'synset': 'consulate.n.01', 'name': 'consulate'}, {'id': 6802, 'synset': 'contact.n.07', 'name': 'contact'}, {'id': 6803, 'synset': 'contact.n.09', 'name': 'contact'}, {'id': 6804, 'synset': 'container.n.01', 'name': 'container'}, {'id': 6805, 'synset': 'container_ship.n.01', 'name': 'container_ship'}, {'id': 6806, 'synset': 'containment.n.02', 'name': 'containment'}, {'id': 6807, 'synset': 'contrabassoon.n.01', 'name': 'contrabassoon'}, {'id': 6808, 'synset': 'control_center.n.01', 'name': 'control_center'}, {'id': 6809, 'synset': 'control_circuit.n.01', 'name': 'control_circuit'}, {'id': 6810, 'synset': 'control_key.n.01', 'name': 'control_key'}, {'id': 6811, 'synset': 'control_panel.n.01', 'name': 'control_panel'}, {'id': 6812, 'synset': 'control_rod.n.01', 'name': 'control_rod'}, {'id': 6813, 'synset': 'control_room.n.01', 'name': 'control_room'}, {'id': 6814, 'synset': 'control_system.n.01', 'name': 'control_system'}, {'id': 6815, 'synset': 'control_tower.n.01', 'name': 'control_tower'}, {'id': 6816, 'synset': 'convector.n.01', 'name': 'convector'}, {'id': 6817, 'synset': 'convenience_store.n.01', 'name': 'convenience_store'}, {'id': 6818, 'synset': 'convent.n.01', 'name': 'convent'}, {'id': 6819, 'synset': 'conventicle.n.02', 'name': 'conventicle'}, {'id': 6820, 'synset': 'converging_lens.n.01', 'name': 'converging_lens'}, {'id': 6821, 'synset': 'converter.n.01', 'name': 'converter'}, {'id': 6822, 'synset': 'conveyance.n.03', 'name': 'conveyance'}, {'id': 6823, 'synset': 'conveyer_belt.n.01', 'name': 'conveyer_belt'}, {'id': 6824, 'synset': 'cookfire.n.01', 'name': 'cookfire'}, {'id': 6825, 'synset': 'cookhouse.n.02', 'name': 'cookhouse'}, {'id': 6826, 'synset': 'cookie_cutter.n.01', 'name': 'cookie_cutter'}, {'id': 6827, 'synset': 'cookie_jar.n.01', 'name': 'cookie_jar'}, {'id': 6828, 'synset': 'cookie_sheet.n.01', 'name': 'cookie_sheet'}, {'id': 6829, 'synset': 'cookstove.n.01', 'name': 'cookstove'}, {'id': 6830, 'synset': 'coolant_system.n.01', 'name': 'coolant_system'}, {'id': 6831, 'synset': 'cooling_system.n.02', 'name': 'cooling_system'}, {'id': 6832, 'synset': 'cooling_system.n.01', 'name': 'cooling_system'}, {'id': 6833, 'synset': 'cooling_tower.n.01', 'name': 'cooling_tower'}, {'id': 6834, 'synset': 'coonskin_cap.n.01', 'name': 'coonskin_cap'}, {'id': 6835, 'synset': 'cope.n.02', 'name': 'cope'}, {'id': 6836, 'synset': 'coping_saw.n.01', 'name': 'coping_saw'}, {'id': 6837, 'synset': 'copperware.n.01', 'name': 'copperware'}, {'id': 6838, 'synset': 'copyholder.n.01', 'name': 'copyholder'}, {'id': 6839, 'synset': 'coquille.n.02', 'name': 'coquille'}, {'id': 6840, 'synset': 'coracle.n.01', 'name': 'coracle'}, {'id': 6841, 'synset': 'corbel.n.01', 'name': 'corbel'}, {'id': 6842, 'synset': 'corbel_arch.n.01', 'name': 'corbel_arch'}, {'id': 6843, 'synset': 'corbel_step.n.01', 'name': 'corbel_step'}, {'id': 6844, 'synset': 'corbie_gable.n.01', 'name': 'corbie_gable'}, {'id': 6845, 'synset': 'cord.n.04', 'name': 'cord'}, {'id': 6846, 'synset': 'cord.n.03', 'name': 'cord'}, {'id': 6847, 'synset': 'cordage.n.02', 'name': 'cordage'}, {'id': 6848, 'synset': 'cords.n.01', 'name': 'cords'}, {'id': 6849, 'synset': 'core.n.10', 'name': 'core'}, {'id': 6850, 'synset': 'core_bit.n.01', 'name': 'core_bit'}, {'id': 6851, 'synset': 'core_drill.n.01', 'name': 'core_drill'}, {'id': 6852, 'synset': 'corer.n.01', 'name': 'corer'}, {'id': 6853, 'synset': 'corker.n.02', 'name': 'corker'}, {'id': 6854, 'synset': 'corncrib.n.01', 'name': 'corncrib'}, {'id': 6855, 'synset': 'corner.n.11', 'name': 'corner'}, {'id': 6856, 'synset': 'corner.n.03', 'name': 'corner'}, {'id': 6857, 'synset': 'corner_post.n.01', 'name': 'corner_post'}, {'id': 6858, 'synset': 'cornice.n.03', 'name': 'cornice'}, {'id': 6859, 'synset': 'cornice.n.02', 'name': 'cornice'}, {'id': 6860, 'synset': 'correctional_institution.n.01', 'name': 'correctional_institution'}, {'id': 6861, 'synset': 'corrugated_fastener.n.01', 'name': 'corrugated_fastener'}, {'id': 6862, 'synset': 'corselet.n.01', 'name': 'corselet'}, {'id': 6863, 'synset': 'cosmetic.n.01', 'name': 'cosmetic'}, {'id': 6864, 'synset': 'cosmotron.n.01', 'name': 'cosmotron'}, {'id': 6865, 'synset': 'costume.n.01', 'name': 'costume'}, {'id': 6866, 'synset': 'costume.n.02', 'name': 'costume'}, {'id': 6867, 'synset': 'costume.n.03', 'name': 'costume'}, {'id': 6868, 'synset': 'cosy.n.01', 'name': 'cosy'}, {'id': 6869, 'synset': 'cot.n.03', 'name': 'cot'}, {'id': 6870, 'synset': 'cottage_tent.n.01', 'name': 'cottage_tent'}, {'id': 6871, 'synset': 'cotter.n.03', 'name': 'cotter'}, {'id': 6872, 'synset': 'cotter_pin.n.01', 'name': 'cotter_pin'}, {'id': 6873, 'synset': 'cotton.n.02', 'name': 'cotton'}, {'id': 6874, 'synset': 'cotton_flannel.n.01', 'name': 'cotton_flannel'}, {'id': 6875, 'synset': 'cotton_mill.n.01', 'name': 'cotton_mill'}, {'id': 6876, 'synset': 'couch.n.03', 'name': 'couch'}, {'id': 6877, 'synset': 'couch.n.02', 'name': 'couch'}, {'id': 6878, 'synset': 'couchette.n.01', 'name': 'couchette'}, {'id': 6879, 'synset': 'coude_telescope.n.01', 'name': 'coude_telescope'}, {'id': 6880, 'synset': 'counter.n.01', 'name': 'counter'}, {'id': 6881, 'synset': 'counter.n.03', 'name': 'counter'}, {'id': 6882, 'synset': 'counter.n.02', 'name': 'counter'}, {'id': 6883, 'synset': 'counterbore.n.01', 'name': 'counterbore'}, {'id': 6884, 'synset': 'counter_tube.n.01', 'name': 'counter_tube'}, {'id': 6885, 'synset': 'country_house.n.01', 'name': 'country_house'}, {'id': 6886, 'synset': 'country_store.n.01', 'name': 'country_store'}, {'id': 6887, 'synset': 'coupe.n.01', 'name': 'coupe'}, {'id': 6888, 'synset': 'coupling.n.02', 'name': 'coupling'}, {'id': 6889, 'synset': 'court.n.10', 'name': 'court'}, {'id': 6890, 'synset': 'court.n.04', 'name': 'court'}, {'id': 6891, 'synset': 'court.n.02', 'name': 'court'}, {'id': 6892, 'synset': 'court.n.09', 'name': 'court'}, {'id': 6893, 'synset': 'courtelle.n.01', 'name': 'Courtelle'}, {'id': 6894, 'synset': 'courthouse.n.02', 'name': 'courthouse'}, {'id': 6895, 'synset': 'courthouse.n.01', 'name': 'courthouse'}, {'id': 6896, 'synset': 'covered_bridge.n.01', 'name': 'covered_bridge'}, {'id': 6897, 'synset': 'covered_couch.n.01', 'name': 'covered_couch'}, {'id': 6898, 'synset': 'covered_wagon.n.01', 'name': 'covered_wagon'}, {'id': 6899, 'synset': 'covering.n.02', 'name': 'covering'}, {'id': 6900, 'synset': 'coverlet.n.01', 'name': 'coverlet'}, {'id': 6901, 'synset': 'cover_plate.n.01', 'name': 'cover_plate'}, {'id': 6902, 'synset': 'cowbarn.n.01', 'name': 'cowbarn'}, {'id': 6903, 'synset': 'cowboy_boot.n.01', 'name': 'cowboy_boot'}, {'id': 6904, 'synset': 'cowhide.n.03', 'name': 'cowhide'}, {'id': 6905, 'synset': 'cowl.n.02', 'name': 'cowl'}, {'id': 6906, 'synset': 'cow_pen.n.01', 'name': 'cow_pen'}, {'id': 6907, 'synset': 'cpu_board.n.01', 'name': 'CPU_board'}, {'id': 6908, 'synset': 'crackle.n.02', 'name': 'crackle'}, {'id': 6909, 'synset': 'cradle.n.01', 'name': 'cradle'}, {'id': 6910, 'synset': 'craft.n.02', 'name': 'craft'}, {'id': 6911, 'synset': 'cramp.n.03', 'name': 'cramp'}, {'id': 6912, 'synset': 'crampon.n.02', 'name': 'crampon'}, {'id': 6913, 'synset': 'crampon.n.01', 'name': 'crampon'}, {'id': 6914, 'synset': 'crane.n.04', 'name': 'crane'}, {'id': 6915, 'synset': 'craniometer.n.01', 'name': 'craniometer'}, {'id': 6916, 'synset': 'crank.n.04', 'name': 'crank'}, {'id': 6917, 'synset': 'crankcase.n.01', 'name': 'crankcase'}, {'id': 6918, 'synset': 'crankshaft.n.01', 'name': 'crankshaft'}, {'id': 6919, 'synset': 'crash_barrier.n.01', 'name': 'crash_barrier'}, {'id': 6920, 'synset': 'crash_helmet.n.01', 'name': 'crash_helmet'}, {'id': 6921, 'synset': 'cravat.n.01', 'name': 'cravat'}, {'id': 6922, 'synset': 'crazy_quilt.n.01', 'name': 'crazy_quilt'}, {'id': 6923, 'synset': 'cream.n.03', 'name': 'cream'}, {'id': 6924, 'synset': 'creche.n.01', 'name': 'creche'}, {'id': 6925, 'synset': 'creche.n.02', 'name': 'creche'}, {'id': 6926, 'synset': 'credenza.n.01', 'name': 'credenza'}, {'id': 6927, 'synset': 'creel.n.01', 'name': 'creel'}, {'id': 6928, 'synset': 'crematory.n.02', 'name': 'crematory'}, {'id': 6929, 'synset': 'crematory.n.01', 'name': 'crematory'}, {'id': 6930, 'synset': 'crepe.n.03', 'name': 'crepe'}, {'id': 6931, 'synset': 'crepe_de_chine.n.01', 'name': 'crepe_de_Chine'}, {'id': 6932, 'synset': 'crescent_wrench.n.01', 'name': 'crescent_wrench'}, {'id': 6933, 'synset': 'cretonne.n.01', 'name': 'cretonne'}, {'id': 6934, 'synset': 'crib.n.03', 'name': 'crib'}, {'id': 6935, 'synset': 'cricket_ball.n.01', 'name': 'cricket_ball'}, {'id': 6936, 'synset': 'cricket_bat.n.01', 'name': 'cricket_bat'}, {'id': 6937, 'synset': 'cricket_equipment.n.01', 'name': 'cricket_equipment'}, {'id': 6938, 'synset': 'cringle.n.01', 'name': 'cringle'}, {'id': 6939, 'synset': 'crinoline.n.03', 'name': 'crinoline'}, {'id': 6940, 'synset': 'crinoline.n.02', 'name': 'crinoline'}, {'id': 6941, 'synset': 'crochet_needle.n.01', 'name': 'crochet_needle'}, {'id': 6942, 'synset': 'crock_pot.n.01', 'name': 'Crock_Pot'}, {'id': 6943, 'synset': 'crook.n.03', 'name': 'crook'}, {'id': 6944, 'synset': 'crookes_radiometer.n.01', 'name': 'Crookes_radiometer'}, {'id': 6945, 'synset': 'crookes_tube.n.01', 'name': 'Crookes_tube'}, {'id': 6946, 'synset': 'croquet_ball.n.01', 'name': 'croquet_ball'}, {'id': 6947, 'synset': 'croquet_equipment.n.01', 'name': 'croquet_equipment'}, {'id': 6948, 'synset': 'croquet_mallet.n.01', 'name': 'croquet_mallet'}, {'id': 6949, 'synset': 'cross.n.01', 'name': 'cross'}, {'id': 6950, 'synset': 'crossbar.n.03', 'name': 'crossbar'}, {'id': 6951, 'synset': 'crossbar.n.02', 'name': 'crossbar'}, {'id': 6952, 'synset': 'crossbench.n.01', 'name': 'crossbench'}, {'id': 6953, 'synset': 'cross_bit.n.01', 'name': 'cross_bit'}, {'id': 6954, 'synset': 'crossbow.n.01', 'name': 'crossbow'}, {'id': 6955, 'synset': 'crosscut_saw.n.01', 'name': 'crosscut_saw'}, {'id': 6956, 'synset': 'crossjack.n.01', 'name': 'crossjack'}, {'id': 6957, 'synset': 'crosspiece.n.02', 'name': 'crosspiece'}, {'id': 6958, 'synset': 'crotchet.n.04', 'name': 'crotchet'}, {'id': 6959, 'synset': "croupier's_rake.n.01", 'name': "croupier's_rake"}, {'id': 6960, 'synset': 'crown.n.11', 'name': 'crown'}, {'id': 6961, 'synset': 'crown_jewels.n.01', 'name': 'crown_jewels'}, {'id': 6962, 'synset': 'crown_lens.n.01', 'name': 'crown_lens'}, {'id': 6963, 'synset': "crow's_nest.n.01", 'name': "crow's_nest"}, {'id': 6964, 'synset': 'crucible.n.01', 'name': 'crucible'}, {'id': 6965, 'synset': 'cruet.n.01', 'name': 'cruet'}, {'id': 6966, 'synset': 'cruet-stand.n.01', 'name': 'cruet-stand'}, {'id': 6967, 'synset': 'cruise_control.n.01', 'name': 'cruise_control'}, {'id': 6968, 'synset': 'cruise_missile.n.01', 'name': 'cruise_missile'}, {'id': 6969, 'synset': 'cruiser.n.02', 'name': 'cruiser'}, {'id': 6970, 'synset': 'crupper.n.01', 'name': 'crupper'}, {'id': 6971, 'synset': 'cruse.n.01', 'name': 'cruse'}, {'id': 6972, 'synset': 'crusher.n.01', 'name': 'crusher'}, {'id': 6973, 'synset': 'cryometer.n.01', 'name': 'cryometer'}, {'id': 6974, 'synset': 'cryoscope.n.01', 'name': 'cryoscope'}, {'id': 6975, 'synset': 'cryostat.n.01', 'name': 'cryostat'}, {'id': 6976, 'synset': 'crypt.n.01', 'name': 'crypt'}, {'id': 6977, 'synset': 'crystal.n.06', 'name': 'crystal'}, {'id': 6978, 'synset': 'crystal_detector.n.01', 'name': 'crystal_detector'}, {'id': 6979, 'synset': 'crystal_microphone.n.01', 'name': 'crystal_microphone'}, {'id': 6980, 'synset': 'crystal_oscillator.n.01', 'name': 'crystal_oscillator'}, {'id': 6981, 'synset': 'crystal_set.n.01', 'name': 'crystal_set'}, {'id': 6982, 'synset': 'cubitiere.n.01', 'name': 'cubitiere'}, {'id': 6983, 'synset': 'cucking_stool.n.01', 'name': 'cucking_stool'}, {'id': 6984, 'synset': 'cuckoo_clock.n.01', 'name': 'cuckoo_clock'}, {'id': 6985, 'synset': 'cuddy.n.01', 'name': 'cuddy'}, {'id': 6986, 'synset': 'cudgel.n.01', 'name': 'cudgel'}, {'id': 6987, 'synset': 'cue.n.04', 'name': 'cue'}, {'id': 6988, 'synset': 'cue_ball.n.01', 'name': 'cue_ball'}, {'id': 6989, 'synset': 'cuff.n.01', 'name': 'cuff'}, {'id': 6990, 'synset': 'cuirass.n.01', 'name': 'cuirass'}, {'id': 6991, 'synset': 'cuisse.n.01', 'name': 'cuisse'}, {'id': 6992, 'synset': 'cul.n.01', 'name': 'cul'}, {'id': 6993, 'synset': 'culdoscope.n.01', 'name': 'culdoscope'}, {'id': 6994, 'synset': 'cullis.n.01', 'name': 'cullis'}, {'id': 6995, 'synset': 'culotte.n.01', 'name': 'culotte'}, {'id': 6996, 'synset': 'cultivator.n.02', 'name': 'cultivator'}, {'id': 6997, 'synset': 'culverin.n.02', 'name': 'culverin'}, {'id': 6998, 'synset': 'culverin.n.01', 'name': 'culverin'}, {'id': 6999, 'synset': 'culvert.n.01', 'name': 'culvert'}, {'id': 7000, 'synset': 'cup_hook.n.01', 'name': 'cup_hook'}, {'id': 7001, 'synset': 'cupola.n.02', 'name': 'cupola'}, {'id': 7002, 'synset': 'cupola.n.01', 'name': 'cupola'}, {'id': 7003, 'synset': 'curb.n.02', 'name': 'curb'}, {'id': 7004, 'synset': 'curb_roof.n.01', 'name': 'curb_roof'}, {'id': 7005, 'synset': 'curbstone.n.01', 'name': 'curbstone'}, {'id': 7006, 'synset': 'curette.n.01', 'name': 'curette'}, {'id': 7007, 'synset': 'currycomb.n.01', 'name': 'currycomb'}, {'id': 7008, 'synset': 'cursor.n.01', 'name': 'cursor'}, {'id': 7009, 'synset': 'customhouse.n.01', 'name': 'customhouse'}, {'id': 7010, 'synset': 'cutaway.n.01', 'name': 'cutaway'}, {'id': 7011, 'synset': 'cutlas.n.01', 'name': 'cutlas'}, {'id': 7012, 'synset': 'cutoff.n.03', 'name': 'cutoff'}, {'id': 7013, 'synset': 'cutout.n.01', 'name': 'cutout'}, {'id': 7014, 'synset': 'cutter.n.06', 'name': 'cutter'}, {'id': 7015, 'synset': 'cutter.n.05', 'name': 'cutter'}, {'id': 7016, 'synset': 'cutting_implement.n.01', 'name': 'cutting_implement'}, {'id': 7017, 'synset': 'cutting_room.n.01', 'name': 'cutting_room'}, {'id': 7018, 'synset': 'cutty_stool.n.01', 'name': 'cutty_stool'}, {'id': 7019, 'synset': 'cutwork.n.01', 'name': 'cutwork'}, {'id': 7020, 'synset': 'cybercafe.n.01', 'name': 'cybercafe'}, {'id': 7021, 'synset': 'cyclopean_masonry.n.01', 'name': 'cyclopean_masonry'}, {'id': 7022, 'synset': 'cyclostyle.n.01', 'name': 'cyclostyle'}, {'id': 7023, 'synset': 'cyclotron.n.01', 'name': 'cyclotron'}, {'id': 7024, 'synset': 'cylinder.n.03', 'name': 'cylinder'}, {'id': 7025, 'synset': 'cylinder_lock.n.01', 'name': 'cylinder_lock'}, {'id': 7026, 'synset': 'dacha.n.01', 'name': 'dacha'}, {'id': 7027, 'synset': 'dacron.n.01', 'name': 'Dacron'}, {'id': 7028, 'synset': 'dado.n.02', 'name': 'dado'}, {'id': 7029, 'synset': 'dado_plane.n.01', 'name': 'dado_plane'}, {'id': 7030, 'synset': 'dairy.n.01', 'name': 'dairy'}, {'id': 7031, 'synset': 'dais.n.01', 'name': 'dais'}, {'id': 7032, 'synset': 'daisy_print_wheel.n.01', 'name': 'daisy_print_wheel'}, {'id': 7033, 'synset': 'daisywheel_printer.n.01', 'name': 'daisywheel_printer'}, {'id': 7034, 'synset': 'dam.n.01', 'name': 'dam'}, {'id': 7035, 'synset': 'damask.n.02', 'name': 'damask'}, {'id': 7036, 'synset': 'dampener.n.01', 'name': 'dampener'}, {'id': 7037, 'synset': 'damper.n.02', 'name': 'damper'}, {'id': 7038, 'synset': 'damper_block.n.01', 'name': 'damper_block'}, {'id': 7039, 'synset': 'dark_lantern.n.01', 'name': 'dark_lantern'}, {'id': 7040, 'synset': 'darkroom.n.01', 'name': 'darkroom'}, {'id': 7041, 'synset': 'darning_needle.n.01', 'name': 'darning_needle'}, {'id': 7042, 'synset': 'dart.n.02', 'name': 'dart'}, {'id': 7043, 'synset': 'dart.n.01', 'name': 'dart'}, {'id': 7044, 'synset': 'dashboard.n.02', 'name': 'dashboard'}, {'id': 7045, 'synset': 'dashiki.n.01', 'name': 'dashiki'}, {'id': 7046, 'synset': 'dash-pot.n.01', 'name': 'dash-pot'}, {'id': 7047, 'synset': 'data_converter.n.01', 'name': 'data_converter'}, {'id': 7048, 'synset': 'data_input_device.n.01', 'name': 'data_input_device'}, {'id': 7049, 'synset': 'data_multiplexer.n.01', 'name': 'data_multiplexer'}, {'id': 7050, 'synset': 'data_system.n.01', 'name': 'data_system'}, {'id': 7051, 'synset': 'davenport.n.03', 'name': 'davenport'}, {'id': 7052, 'synset': 'davenport.n.02', 'name': 'davenport'}, {'id': 7053, 'synset': 'davit.n.01', 'name': 'davit'}, {'id': 7054, 'synset': 'daybed.n.01', 'name': 'daybed'}, {'id': 7055, 'synset': 'daybook.n.02', 'name': 'daybook'}, {'id': 7056, 'synset': 'day_nursery.n.01', 'name': 'day_nursery'}, {'id': 7057, 'synset': 'day_school.n.03', 'name': 'day_school'}, {'id': 7058, 'synset': 'dead_axle.n.01', 'name': 'dead_axle'}, {'id': 7059, 'synset': 'deadeye.n.02', 'name': 'deadeye'}, {'id': 7060, 'synset': 'deadhead.n.02', 'name': 'deadhead'}, {'id': 7061, 'synset': 'deanery.n.01', 'name': 'deanery'}, {'id': 7062, 'synset': 'deathbed.n.02', 'name': 'deathbed'}, {'id': 7063, 'synset': 'death_camp.n.01', 'name': 'death_camp'}, {'id': 7064, 'synset': 'death_house.n.01', 'name': 'death_house'}, {'id': 7065, 'synset': 'death_knell.n.02', 'name': 'death_knell'}, {'id': 7066, 'synset': 'death_seat.n.01', 'name': 'death_seat'}, {'id': 7067, 'synset': 'deck.n.02', 'name': 'deck'}, {'id': 7068, 'synset': 'deck.n.04', 'name': 'deck'}, {'id': 7069, 'synset': 'deck-house.n.01', 'name': 'deck-house'}, {'id': 7070, 'synset': 'deckle.n.02', 'name': 'deckle'}, {'id': 7071, 'synset': 'deckle_edge.n.01', 'name': 'deckle_edge'}, {'id': 7072, 'synset': 'declinometer.n.01', 'name': 'declinometer'}, {'id': 7073, 'synset': 'decoder.n.02', 'name': 'decoder'}, {'id': 7074, 'synset': 'decolletage.n.01', 'name': 'decolletage'}, {'id': 7075, 'synset': 'decoupage.n.01', 'name': 'decoupage'}, {'id': 7076, 'synset': 'dedicated_file_server.n.01', 'name': 'dedicated_file_server'}, {'id': 7077, 'synset': 'deep-freeze.n.01', 'name': 'deep-freeze'}, {'id': 7078, 'synset': 'deerstalker.n.01', 'name': 'deerstalker'}, {'id': 7079, 'synset': 'defense_system.n.01', 'name': 'defense_system'}, {'id': 7080, 'synset': 'defensive_structure.n.01', 'name': 'defensive_structure'}, {'id': 7081, 'synset': 'defibrillator.n.01', 'name': 'defibrillator'}, {'id': 7082, 'synset': 'defilade.n.01', 'name': 'defilade'}, {'id': 7083, 'synset': 'deflector.n.01', 'name': 'deflector'}, {'id': 7084, 'synset': 'delayed_action.n.01', 'name': 'delayed_action'}, {'id': 7085, 'synset': 'delay_line.n.01', 'name': 'delay_line'}, {'id': 7086, 'synset': 'delft.n.01', 'name': 'delft'}, {'id': 7087, 'synset': 'delicatessen.n.02', 'name': 'delicatessen'}, {'id': 7088, 'synset': 'delivery_truck.n.01', 'name': 'delivery_truck'}, {'id': 7089, 'synset': 'delta_wing.n.01', 'name': 'delta_wing'}, {'id': 7090, 'synset': 'demijohn.n.01', 'name': 'demijohn'}, {'id': 7091, 'synset': 'demitasse.n.02', 'name': 'demitasse'}, {'id': 7092, 'synset': 'den.n.04', 'name': 'den'}, {'id': 7093, 'synset': 'denim.n.02', 'name': 'denim'}, {'id': 7094, 'synset': 'densimeter.n.01', 'name': 'densimeter'}, {'id': 7095, 'synset': 'densitometer.n.01', 'name': 'densitometer'}, {'id': 7096, 'synset': 'dental_appliance.n.01', 'name': 'dental_appliance'}, {'id': 7097, 'synset': 'dental_implant.n.01', 'name': 'dental_implant'}, {'id': 7098, 'synset': "dentist's_drill.n.01", 'name': "dentist's_drill"}, {'id': 7099, 'synset': 'denture.n.01', 'name': 'denture'}, {'id': 7100, 'synset': 'deodorant.n.01', 'name': 'deodorant'}, {'id': 7101, 'synset': 'department_store.n.01', 'name': 'department_store'}, {'id': 7102, 'synset': 'departure_lounge.n.01', 'name': 'departure_lounge'}, {'id': 7103, 'synset': 'depilatory.n.02', 'name': 'depilatory'}, {'id': 7104, 'synset': 'depressor.n.03', 'name': 'depressor'}, {'id': 7105, 'synset': 'depth_finder.n.01', 'name': 'depth_finder'}, {'id': 7106, 'synset': 'depth_gauge.n.01', 'name': 'depth_gauge'}, {'id': 7107, 'synset': 'derrick.n.02', 'name': 'derrick'}, {'id': 7108, 'synset': 'derrick.n.01', 'name': 'derrick'}, {'id': 7109, 'synset': 'derringer.n.01', 'name': 'derringer'}, {'id': 7110, 'synset': 'desk_phone.n.01', 'name': 'desk_phone'}, {'id': 7111, 'synset': 'desktop_computer.n.01', 'name': 'desktop_computer'}, {'id': 7112, 'synset': 'dessert_spoon.n.01', 'name': 'dessert_spoon'}, {'id': 7113, 'synset': 'destroyer.n.01', 'name': 'destroyer'}, {'id': 7114, 'synset': 'destroyer_escort.n.01', 'name': 'destroyer_escort'}, {'id': 7115, 'synset': 'detached_house.n.01', 'name': 'detached_house'}, {'id': 7116, 'synset': 'detector.n.01', 'name': 'detector'}, {'id': 7117, 'synset': 'detector.n.03', 'name': 'detector'}, {'id': 7118, 'synset': 'detention_home.n.01', 'name': 'detention_home'}, {'id': 7119, 'synset': 'detonating_fuse.n.01', 'name': 'detonating_fuse'}, {'id': 7120, 'synset': 'detonator.n.01', 'name': 'detonator'}, {'id': 7121, 'synset': 'developer.n.02', 'name': 'developer'}, {'id': 7122, 'synset': 'device.n.01', 'name': 'device'}, {'id': 7123, 'synset': 'dewar_flask.n.01', 'name': 'Dewar_flask'}, {'id': 7124, 'synset': 'dhoti.n.01', 'name': 'dhoti'}, {'id': 7125, 'synset': 'dhow.n.01', 'name': 'dhow'}, {'id': 7126, 'synset': 'dial.n.04', 'name': 'dial'}, {'id': 7127, 'synset': 'dial.n.03', 'name': 'dial'}, {'id': 7128, 'synset': 'dial.n.02', 'name': 'dial'}, {'id': 7129, 'synset': 'dialog_box.n.01', 'name': 'dialog_box'}, {'id': 7130, 'synset': 'dial_telephone.n.01', 'name': 'dial_telephone'}, {'id': 7131, 'synset': 'dialyzer.n.01', 'name': 'dialyzer'}, {'id': 7132, 'synset': 'diamante.n.02', 'name': 'diamante'}, {'id': 7133, 'synset': 'diaper.n.02', 'name': 'diaper'}, {'id': 7134, 'synset': 'diaphone.n.01', 'name': 'diaphone'}, {'id': 7135, 'synset': 'diaphragm.n.01', 'name': 'diaphragm'}, {'id': 7136, 'synset': 'diaphragm.n.04', 'name': 'diaphragm'}, {'id': 7137, 'synset': 'diathermy_machine.n.01', 'name': 'diathermy_machine'}, {'id': 7138, 'synset': 'dibble.n.01', 'name': 'dibble'}, {'id': 7139, 'synset': 'dice_cup.n.01', 'name': 'dice_cup'}, {'id': 7140, 'synset': 'dicer.n.01', 'name': 'dicer'}, {'id': 7141, 'synset': 'dickey.n.02', 'name': 'dickey'}, {'id': 7142, 'synset': 'dickey.n.01', 'name': 'dickey'}, {'id': 7143, 'synset': 'dictaphone.n.01', 'name': 'Dictaphone'}, {'id': 7144, 'synset': 'die.n.03', 'name': 'die'}, {'id': 7145, 'synset': 'diesel.n.02', 'name': 'diesel'}, {'id': 7146, 'synset': 'diesel-electric_locomotive.n.01', 'name': 'diesel-electric_locomotive'}, {'id': 7147, 'synset': 'diesel-hydraulic_locomotive.n.01', 'name': 'diesel-hydraulic_locomotive'}, {'id': 7148, 'synset': 'diesel_locomotive.n.01', 'name': 'diesel_locomotive'}, {'id': 7149, 'synset': 'diestock.n.01', 'name': 'diestock'}, {'id': 7150, 'synset': 'differential_analyzer.n.01', 'name': 'differential_analyzer'}, {'id': 7151, 'synset': 'differential_gear.n.01', 'name': 'differential_gear'}, {'id': 7152, 'synset': 'diffuser.n.02', 'name': 'diffuser'}, {'id': 7153, 'synset': 'diffuser.n.01', 'name': 'diffuser'}, {'id': 7154, 'synset': 'digester.n.01', 'name': 'digester'}, {'id': 7155, 'synset': 'diggings.n.02', 'name': 'diggings'}, {'id': 7156, 'synset': 'digital-analog_converter.n.01', 'name': 'digital-analog_converter'}, {'id': 7157, 'synset': 'digital_audiotape.n.01', 'name': 'digital_audiotape'}, {'id': 7158, 'synset': 'digital_camera.n.01', 'name': 'digital_camera'}, {'id': 7159, 'synset': 'digital_clock.n.01', 'name': 'digital_clock'}, {'id': 7160, 'synset': 'digital_computer.n.01', 'name': 'digital_computer'}, {'id': 7161, 'synset': 'digital_display.n.01', 'name': 'digital_display'}, {'id': 7162, 'synset': 'digital_subscriber_line.n.01', 'name': 'digital_subscriber_line'}, {'id': 7163, 'synset': 'digital_voltmeter.n.01', 'name': 'digital_voltmeter'}, {'id': 7164, 'synset': 'digital_watch.n.01', 'name': 'digital_watch'}, {'id': 7165, 'synset': 'digitizer.n.01', 'name': 'digitizer'}, {'id': 7166, 'synset': 'dilator.n.03', 'name': 'dilator'}, {'id': 7167, 'synset': 'dildo.n.01', 'name': 'dildo'}, {'id': 7168, 'synset': 'dimity.n.01', 'name': 'dimity'}, {'id': 7169, 'synset': 'dimmer.n.01', 'name': 'dimmer'}, {'id': 7170, 'synset': 'diner.n.03', 'name': 'diner'}, {'id': 7171, 'synset': 'dinette.n.01', 'name': 'dinette'}, {'id': 7172, 'synset': 'dining_area.n.01', 'name': 'dining_area'}, {'id': 7173, 'synset': 'dining_car.n.01', 'name': 'dining_car'}, {'id': 7174, 'synset': 'dining-hall.n.01', 'name': 'dining-hall'}, {'id': 7175, 'synset': 'dining_room.n.01', 'name': 'dining_room'}, {'id': 7176, 'synset': 'dining-room_furniture.n.01', 'name': 'dining-room_furniture'}, {'id': 7177, 'synset': 'dining-room_table.n.01', 'name': 'dining-room_table'}, {'id': 7178, 'synset': 'dinner_bell.n.01', 'name': 'dinner_bell'}, {'id': 7179, 'synset': 'dinner_dress.n.01', 'name': 'dinner_dress'}, {'id': 7180, 'synset': 'dinner_napkin.n.01', 'name': 'dinner_napkin'}, {'id': 7181, 'synset': 'dinner_pail.n.01', 'name': 'dinner_pail'}, {'id': 7182, 'synset': 'dinner_table.n.01', 'name': 'dinner_table'}, {'id': 7183, 'synset': 'dinner_theater.n.01', 'name': 'dinner_theater'}, {'id': 7184, 'synset': 'diode.n.02', 'name': 'diode'}, {'id': 7185, 'synset': 'diode.n.01', 'name': 'diode'}, {'id': 7186, 'synset': 'dip.n.07', 'name': 'dip'}, {'id': 7187, 'synset': 'diplomatic_building.n.01', 'name': 'diplomatic_building'}, {'id': 7188, 'synset': 'dipole.n.02', 'name': 'dipole'}, {'id': 7189, 'synset': 'dipper.n.01', 'name': 'dipper'}, {'id': 7190, 'synset': 'dipstick.n.01', 'name': 'dipstick'}, {'id': 7191, 'synset': 'dip_switch.n.01', 'name': 'DIP_switch'}, {'id': 7192, 'synset': 'directional_antenna.n.01', 'name': 'directional_antenna'}, {'id': 7193, 'synset': 'directional_microphone.n.01', 'name': 'directional_microphone'}, {'id': 7194, 'synset': 'direction_finder.n.01', 'name': 'direction_finder'}, {'id': 7195, 'synset': 'dirk.n.01', 'name': 'dirk'}, {'id': 7196, 'synset': 'dirndl.n.02', 'name': 'dirndl'}, {'id': 7197, 'synset': 'dirndl.n.01', 'name': 'dirndl'}, {'id': 7198, 'synset': 'dirty_bomb.n.01', 'name': 'dirty_bomb'}, {'id': 7199, 'synset': 'discharge_lamp.n.01', 'name': 'discharge_lamp'}, {'id': 7200, 'synset': 'discharge_pipe.n.01', 'name': 'discharge_pipe'}, {'id': 7201, 'synset': 'disco.n.02', 'name': 'disco'}, {'id': 7202, 'synset': 'discount_house.n.01', 'name': 'discount_house'}, {'id': 7203, 'synset': 'discus.n.02', 'name': 'discus'}, {'id': 7204, 'synset': 'disguise.n.02', 'name': 'disguise'}, {'id': 7205, 'synset': 'dishpan.n.01', 'name': 'dishpan'}, {'id': 7206, 'synset': 'dish_rack.n.01', 'name': 'dish_rack'}, {'id': 7207, 'synset': 'disk.n.02', 'name': 'disk'}, {'id': 7208, 'synset': 'disk_brake.n.01', 'name': 'disk_brake'}, {'id': 7209, 'synset': 'disk_clutch.n.01', 'name': 'disk_clutch'}, {'id': 7210, 'synset': 'disk_controller.n.01', 'name': 'disk_controller'}, {'id': 7211, 'synset': 'disk_drive.n.01', 'name': 'disk_drive'}, {'id': 7212, 'synset': 'diskette.n.01', 'name': 'diskette'}, {'id': 7213, 'synset': 'disk_harrow.n.01', 'name': 'disk_harrow'}, {'id': 7214, 'synset': 'dispatch_case.n.01', 'name': 'dispatch_case'}, {'id': 7215, 'synset': 'dispensary.n.01', 'name': 'dispensary'}, {'id': 7216, 'synset': 'display.n.06', 'name': 'display'}, {'id': 7217, 'synset': 'display_adapter.n.01', 'name': 'display_adapter'}, {'id': 7218, 'synset': 'display_panel.n.01', 'name': 'display_panel'}, {'id': 7219, 'synset': 'display_window.n.01', 'name': 'display_window'}, {'id': 7220, 'synset': 'disposal.n.04', 'name': 'disposal'}, {'id': 7221, 'synset': 'disrupting_explosive.n.01', 'name': 'disrupting_explosive'}, {'id': 7222, 'synset': 'distaff.n.02', 'name': 'distaff'}, {'id': 7223, 'synset': 'distillery.n.01', 'name': 'distillery'}, {'id': 7224, 'synset': 'distributor.n.04', 'name': 'distributor'}, {'id': 7225, 'synset': 'distributor_cam.n.01', 'name': 'distributor_cam'}, {'id': 7226, 'synset': 'distributor_cap.n.01', 'name': 'distributor_cap'}, {'id': 7227, 'synset': 'distributor_housing.n.01', 'name': 'distributor_housing'}, {'id': 7228, 'synset': 'distributor_point.n.01', 'name': 'distributor_point'}, {'id': 7229, 'synset': 'ditch.n.01', 'name': 'ditch'}, {'id': 7230, 'synset': 'ditch_spade.n.01', 'name': 'ditch_spade'}, {'id': 7231, 'synset': 'ditty_bag.n.01', 'name': 'ditty_bag'}, {'id': 7232, 'synset': 'divan.n.01', 'name': 'divan'}, {'id': 7233, 'synset': 'divan.n.04', 'name': 'divan'}, {'id': 7234, 'synset': 'dive_bomber.n.01', 'name': 'dive_bomber'}, {'id': 7235, 'synset': 'diverging_lens.n.01', 'name': 'diverging_lens'}, {'id': 7236, 'synset': 'divided_highway.n.01', 'name': 'divided_highway'}, {'id': 7237, 'synset': 'divider.n.04', 'name': 'divider'}, {'id': 7238, 'synset': 'diving_bell.n.01', 'name': 'diving_bell'}, {'id': 7239, 'synset': 'divining_rod.n.01', 'name': 'divining_rod'}, {'id': 7240, 'synset': 'diving_suit.n.01', 'name': 'diving_suit'}, {'id': 7241, 'synset': 'dixie.n.02', 'name': 'dixie'}, {'id': 7242, 'synset': 'dock.n.05', 'name': 'dock'}, {'id': 7243, 'synset': 'doeskin.n.02', 'name': 'doeskin'}, {'id': 7244, 'synset': 'dogcart.n.01', 'name': 'dogcart'}, {'id': 7245, 'synset': 'doggie_bag.n.01', 'name': 'doggie_bag'}, {'id': 7246, 'synset': 'dogsled.n.01', 'name': 'dogsled'}, {'id': 7247, 'synset': 'dog_wrench.n.01', 'name': 'dog_wrench'}, {'id': 7248, 'synset': 'doily.n.01', 'name': 'doily'}, {'id': 7249, 'synset': 'dolly.n.02', 'name': 'dolly'}, {'id': 7250, 'synset': 'dolman.n.02', 'name': 'dolman'}, {'id': 7251, 'synset': 'dolman.n.01', 'name': 'dolman'}, {'id': 7252, 'synset': 'dolman_sleeve.n.01', 'name': 'dolman_sleeve'}, {'id': 7253, 'synset': 'dolmen.n.01', 'name': 'dolmen'}, {'id': 7254, 'synset': 'dome.n.04', 'name': 'dome'}, {'id': 7255, 'synset': 'dome.n.03', 'name': 'dome'}, {'id': 7256, 'synset': 'domino.n.03', 'name': 'domino'}, {'id': 7257, 'synset': 'dongle.n.01', 'name': 'dongle'}, {'id': 7258, 'synset': 'donkey_jacket.n.01', 'name': 'donkey_jacket'}, {'id': 7259, 'synset': 'door.n.01', 'name': 'door'}, {'id': 7260, 'synset': 'door.n.05', 'name': 'door'}, {'id': 7261, 'synset': 'door.n.04', 'name': 'door'}, {'id': 7262, 'synset': 'doorbell.n.01', 'name': 'doorbell'}, {'id': 7263, 'synset': 'doorframe.n.01', 'name': 'doorframe'}, {'id': 7264, 'synset': 'doorjamb.n.01', 'name': 'doorjamb'}, {'id': 7265, 'synset': 'doorlock.n.01', 'name': 'doorlock'}, {'id': 7266, 'synset': 'doornail.n.01', 'name': 'doornail'}, {'id': 7267, 'synset': 'doorplate.n.01', 'name': 'doorplate'}, {'id': 7268, 'synset': 'doorsill.n.01', 'name': 'doorsill'}, {'id': 7269, 'synset': 'doorstop.n.01', 'name': 'doorstop'}, {'id': 7270, 'synset': 'doppler_radar.n.01', 'name': 'Doppler_radar'}, {'id': 7271, 'synset': 'dormer.n.01', 'name': 'dormer'}, {'id': 7272, 'synset': 'dormer_window.n.01', 'name': 'dormer_window'}, {'id': 7273, 'synset': 'dormitory.n.01', 'name': 'dormitory'}, {'id': 7274, 'synset': 'dormitory.n.02', 'name': 'dormitory'}, {'id': 7275, 'synset': 'dosemeter.n.01', 'name': 'dosemeter'}, {'id': 7276, 'synset': 'dossal.n.01', 'name': 'dossal'}, {'id': 7277, 'synset': 'dot_matrix_printer.n.01', 'name': 'dot_matrix_printer'}, {'id': 7278, 'synset': 'double_bed.n.01', 'name': 'double_bed'}, {'id': 7279, 'synset': 'double-bitted_ax.n.01', 'name': 'double-bitted_ax'}, {'id': 7280, 'synset': 'double_boiler.n.01', 'name': 'double_boiler'}, {'id': 7281, 'synset': 'double-breasted_jacket.n.01', 'name': 'double-breasted_jacket'}, {'id': 7282, 'synset': 'double-breasted_suit.n.01', 'name': 'double-breasted_suit'}, {'id': 7283, 'synset': 'double_door.n.01', 'name': 'double_door'}, {'id': 7284, 'synset': 'double_glazing.n.01', 'name': 'double_glazing'}, {'id': 7285, 'synset': 'double-hung_window.n.01', 'name': 'double-hung_window'}, {'id': 7286, 'synset': 'double_knit.n.01', 'name': 'double_knit'}, {'id': 7287, 'synset': 'doubler.n.01', 'name': 'doubler'}, {'id': 7288, 'synset': 'double_reed.n.02', 'name': 'double_reed'}, {'id': 7289, 'synset': 'double-reed_instrument.n.01', 'name': 'double-reed_instrument'}, {'id': 7290, 'synset': 'doublet.n.01', 'name': 'doublet'}, {'id': 7291, 'synset': 'doubletree.n.01', 'name': 'doubletree'}, {'id': 7292, 'synset': 'douche.n.01', 'name': 'douche'}, {'id': 7293, 'synset': 'dovecote.n.01', 'name': 'dovecote'}, {'id': 7294, 'synset': "dover's_powder.n.01", 'name': "Dover's_powder"}, {'id': 7295, 'synset': 'dovetail.n.01', 'name': 'dovetail'}, {'id': 7296, 'synset': 'dovetail_plane.n.01', 'name': 'dovetail_plane'}, {'id': 7297, 'synset': 'dowel.n.01', 'name': 'dowel'}, {'id': 7298, 'synset': 'downstage.n.01', 'name': 'downstage'}, {'id': 7299, 'synset': 'drafting_instrument.n.01', 'name': 'drafting_instrument'}, {'id': 7300, 'synset': 'drafting_table.n.01', 'name': 'drafting_table'}, {'id': 7301, 'synset': 'dragunov.n.01', 'name': 'Dragunov'}, {'id': 7302, 'synset': 'drainage_ditch.n.01', 'name': 'drainage_ditch'}, {'id': 7303, 'synset': 'drainage_system.n.01', 'name': 'drainage_system'}, {'id': 7304, 'synset': 'drain_basket.n.01', 'name': 'drain_basket'}, {'id': 7305, 'synset': 'drainplug.n.01', 'name': 'drainplug'}, {'id': 7306, 'synset': 'drape.n.03', 'name': 'drape'}, {'id': 7307, 'synset': 'drapery.n.02', 'name': 'drapery'}, {'id': 7308, 'synset': 'drawbar.n.01', 'name': 'drawbar'}, {'id': 7309, 'synset': 'drawbridge.n.01', 'name': 'drawbridge'}, {'id': 7310, 'synset': 'drawing_chalk.n.01', 'name': 'drawing_chalk'}, {'id': 7311, 'synset': 'drawing_room.n.01', 'name': 'drawing_room'}, {'id': 7312, 'synset': 'drawing_room.n.02', 'name': 'drawing_room'}, {'id': 7313, 'synset': 'drawknife.n.01', 'name': 'drawknife'}, {'id': 7314, 'synset': 'drawstring_bag.n.01', 'name': 'drawstring_bag'}, {'id': 7315, 'synset': 'dray.n.01', 'name': 'dray'}, {'id': 7316, 'synset': 'dreadnought.n.01', 'name': 'dreadnought'}, {'id': 7317, 'synset': 'dredge.n.01', 'name': 'dredge'}, {'id': 7318, 'synset': 'dredger.n.01', 'name': 'dredger'}, {'id': 7319, 'synset': 'dredging_bucket.n.01', 'name': 'dredging_bucket'}, {'id': 7320, 'synset': 'dress_blues.n.01', 'name': 'dress_blues'}, {'id': 7321, 'synset': 'dressing.n.04', 'name': 'dressing'}, {'id': 7322, 'synset': 'dressing_case.n.01', 'name': 'dressing_case'}, {'id': 7323, 'synset': 'dressing_gown.n.01', 'name': 'dressing_gown'}, {'id': 7324, 'synset': 'dressing_room.n.01', 'name': 'dressing_room'}, {'id': 7325, 'synset': 'dressing_sack.n.01', 'name': 'dressing_sack'}, {'id': 7326, 'synset': 'dressing_table.n.01', 'name': 'dressing_table'}, {'id': 7327, 'synset': 'dress_rack.n.01', 'name': 'dress_rack'}, {'id': 7328, 'synset': 'dress_shirt.n.01', 'name': 'dress_shirt'}, {'id': 7329, 'synset': 'dress_uniform.n.01', 'name': 'dress_uniform'}, {'id': 7330, 'synset': 'drift_net.n.01', 'name': 'drift_net'}, {'id': 7331, 'synset': 'electric_drill.n.01', 'name': 'electric_drill'}, {'id': 7332, 'synset': 'drilling_platform.n.01', 'name': 'drilling_platform'}, {'id': 7333, 'synset': 'drill_press.n.01', 'name': 'drill_press'}, {'id': 7334, 'synset': 'drill_rig.n.01', 'name': 'drill_rig'}, {'id': 7335, 'synset': 'drinking_fountain.n.01', 'name': 'drinking_fountain'}, {'id': 7336, 'synset': 'drinking_vessel.n.01', 'name': 'drinking_vessel'}, {'id': 7337, 'synset': 'drip_loop.n.01', 'name': 'drip_loop'}, {'id': 7338, 'synset': 'drip_mat.n.01', 'name': 'drip_mat'}, {'id': 7339, 'synset': 'drip_pan.n.02', 'name': 'drip_pan'}, {'id': 7340, 'synset': 'dripping_pan.n.01', 'name': 'dripping_pan'}, {'id': 7341, 'synset': 'drip_pot.n.01', 'name': 'drip_pot'}, {'id': 7342, 'synset': 'drive.n.02', 'name': 'drive'}, {'id': 7343, 'synset': 'drive.n.10', 'name': 'drive'}, {'id': 7344, 'synset': 'drive_line.n.01', 'name': 'drive_line'}, {'id': 7345, 'synset': 'driver.n.05', 'name': 'driver'}, {'id': 7346, 'synset': 'driveshaft.n.01', 'name': 'driveshaft'}, {'id': 7347, 'synset': 'driveway.n.01', 'name': 'driveway'}, {'id': 7348, 'synset': 'driving_iron.n.01', 'name': 'driving_iron'}, {'id': 7349, 'synset': 'driving_wheel.n.01', 'name': 'driving_wheel'}, {'id': 7350, 'synset': 'drogue.n.04', 'name': 'drogue'}, {'id': 7351, 'synset': 'drogue_parachute.n.01', 'name': 'drogue_parachute'}, {'id': 7352, 'synset': 'drone.n.05', 'name': 'drone'}, {'id': 7353, 'synset': 'drop_arch.n.01', 'name': 'drop_arch'}, {'id': 7354, 'synset': 'drop_cloth.n.02', 'name': 'drop_cloth'}, {'id': 7355, 'synset': 'drop_curtain.n.01', 'name': 'drop_curtain'}, {'id': 7356, 'synset': 'drop_forge.n.01', 'name': 'drop_forge'}, {'id': 7357, 'synset': 'drop-leaf_table.n.01', 'name': 'drop-leaf_table'}, {'id': 7358, 'synset': 'droshky.n.01', 'name': 'droshky'}, {'id': 7359, 'synset': 'drove.n.03', 'name': 'drove'}, {'id': 7360, 'synset': 'drugget.n.01', 'name': 'drugget'}, {'id': 7361, 'synset': 'drugstore.n.01', 'name': 'drugstore'}, {'id': 7362, 'synset': 'drum.n.04', 'name': 'drum'}, {'id': 7363, 'synset': 'drum_brake.n.01', 'name': 'drum_brake'}, {'id': 7364, 'synset': 'drumhead.n.01', 'name': 'drumhead'}, {'id': 7365, 'synset': 'drum_printer.n.01', 'name': 'drum_printer'}, {'id': 7366, 'synset': 'drum_sander.n.01', 'name': 'drum_sander'}, {'id': 7367, 'synset': 'dry_battery.n.01', 'name': 'dry_battery'}, {'id': 7368, 'synset': 'dry-bulb_thermometer.n.01', 'name': 'dry-bulb_thermometer'}, {'id': 7369, 'synset': 'dry_cell.n.01', 'name': 'dry_cell'}, {'id': 7370, 'synset': 'dry_dock.n.01', 'name': 'dry_dock'}, {'id': 7371, 'synset': 'dryer.n.01', 'name': 'dryer'}, {'id': 7372, 'synset': 'dry_fly.n.01', 'name': 'dry_fly'}, {'id': 7373, 'synset': 'dry_kiln.n.01', 'name': 'dry_kiln'}, {'id': 7374, 'synset': 'dry_masonry.n.01', 'name': 'dry_masonry'}, {'id': 7375, 'synset': 'dry_point.n.02', 'name': 'dry_point'}, {'id': 7376, 'synset': 'dry_wall.n.02', 'name': 'dry_wall'}, {'id': 7377, 'synset': 'dual_scan_display.n.01', 'name': 'dual_scan_display'}, {'id': 7378, 'synset': 'duck.n.04', 'name': 'duck'}, {'id': 7379, 'synset': 'duckboard.n.01', 'name': 'duckboard'}, {'id': 7380, 'synset': 'duckpin.n.01', 'name': 'duckpin'}, {'id': 7381, 'synset': 'dudeen.n.01', 'name': 'dudeen'}, {'id': 7382, 'synset': 'duffel.n.02', 'name': 'duffel'}, {'id': 7383, 'synset': 'duffel_coat.n.01', 'name': 'duffel_coat'}, {'id': 7384, 'synset': 'dugout.n.01', 'name': 'dugout'}, {'id': 7385, 'synset': 'dugout_canoe.n.01', 'name': 'dugout_canoe'}, {'id': 7386, 'synset': 'dulciana.n.01', 'name': 'dulciana'}, {'id': 7387, 'synset': 'dulcimer.n.02', 'name': 'dulcimer'}, {'id': 7388, 'synset': 'dulcimer.n.01', 'name': 'dulcimer'}, {'id': 7389, 'synset': 'dumb_bomb.n.01', 'name': 'dumb_bomb'}, {'id': 7390, 'synset': 'dumbwaiter.n.01', 'name': 'dumbwaiter'}, {'id': 7391, 'synset': 'dumdum.n.01', 'name': 'dumdum'}, {'id': 7392, 'synset': 'dumpcart.n.01', 'name': 'dumpcart'}, {'id': 7393, 'synset': 'dump_truck.n.01', 'name': 'dump_truck'}, {'id': 7394, 'synset': 'dumpy_level.n.01', 'name': 'Dumpy_level'}, {'id': 7395, 'synset': 'dunce_cap.n.01', 'name': 'dunce_cap'}, {'id': 7396, 'synset': 'dune_buggy.n.01', 'name': 'dune_buggy'}, {'id': 7397, 'synset': 'dungeon.n.02', 'name': 'dungeon'}, {'id': 7398, 'synset': 'duplex_apartment.n.01', 'name': 'duplex_apartment'}, {'id': 7399, 'synset': 'duplex_house.n.01', 'name': 'duplex_house'}, {'id': 7400, 'synset': 'duplicator.n.01', 'name': 'duplicator'}, {'id': 7401, 'synset': 'dust_bag.n.01', 'name': 'dust_bag'}, {'id': 7402, 'synset': 'dustcloth.n.01', 'name': 'dustcloth'}, {'id': 7403, 'synset': 'dust_cover.n.03', 'name': 'dust_cover'}, {'id': 7404, 'synset': 'dust_cover.n.02', 'name': 'dust_cover'}, {'id': 7405, 'synset': 'dustmop.n.01', 'name': 'dustmop'}, {'id': 7406, 'synset': 'dutch_oven.n.01', 'name': 'Dutch_oven'}, {'id': 7407, 'synset': 'dutch_oven.n.02', 'name': 'Dutch_oven'}, {'id': 7408, 'synset': 'dwelling.n.01', 'name': 'dwelling'}, {'id': 7409, 'synset': 'dye-works.n.01', 'name': 'dye-works'}, {'id': 7410, 'synset': 'dynamo.n.01', 'name': 'dynamo'}, {'id': 7411, 'synset': 'dynamometer.n.01', 'name': 'dynamometer'}, {'id': 7412, 'synset': 'eames_chair.n.01', 'name': 'Eames_chair'}, {'id': 7413, 'synset': 'earflap.n.01', 'name': 'earflap'}, {'id': 7414, 'synset': 'early_warning_radar.n.01', 'name': 'early_warning_radar'}, {'id': 7415, 'synset': 'early_warning_system.n.01', 'name': 'early_warning_system'}, {'id': 7416, 'synset': 'earmuff.n.01', 'name': 'earmuff'}, {'id': 7417, 'synset': 'earplug.n.02', 'name': 'earplug'}, {'id': 7418, 'synset': 'earthenware.n.01', 'name': 'earthenware'}, {'id': 7419, 'synset': 'earthwork.n.01', 'name': 'earthwork'}, {'id': 7420, 'synset': 'easy_chair.n.01', 'name': 'easy_chair'}, {'id': 7421, 'synset': 'eaves.n.01', 'name': 'eaves'}, {'id': 7422, 'synset': 'ecclesiastical_attire.n.01', 'name': 'ecclesiastical_attire'}, {'id': 7423, 'synset': 'echinus.n.01', 'name': 'echinus'}, {'id': 7424, 'synset': 'echocardiograph.n.01', 'name': 'echocardiograph'}, {'id': 7425, 'synset': 'edger.n.02', 'name': 'edger'}, {'id': 7426, 'synset': 'edge_tool.n.01', 'name': 'edge_tool'}, {'id': 7427, 'synset': 'efficiency_apartment.n.01', 'name': 'efficiency_apartment'}, {'id': 7428, 'synset': 'egg-and-dart.n.01', 'name': 'egg-and-dart'}, {'id': 7429, 'synset': 'egg_timer.n.01', 'name': 'egg_timer'}, {'id': 7430, 'synset': 'eiderdown.n.01', 'name': 'eiderdown'}, {'id': 7431, 'synset': 'eight_ball.n.01', 'name': 'eight_ball'}, {'id': 7432, 'synset': 'ejection_seat.n.01', 'name': 'ejection_seat'}, {'id': 7433, 'synset': 'elastic.n.02', 'name': 'elastic'}, {'id': 7434, 'synset': 'elastic_bandage.n.01', 'name': 'elastic_bandage'}, {'id': 7435, 'synset': 'elastoplast.n.01', 'name': 'Elastoplast'}, {'id': 7436, 'synset': 'elbow.n.04', 'name': 'elbow'}, {'id': 7437, 'synset': 'elbow_pad.n.01', 'name': 'elbow_pad'}, {'id': 7438, 'synset': 'electric.n.01', 'name': 'electric'}, {'id': 7439, 'synset': 'electrical_cable.n.01', 'name': 'electrical_cable'}, {'id': 7440, 'synset': 'electrical_contact.n.01', 'name': 'electrical_contact'}, {'id': 7441, 'synset': 'electrical_converter.n.01', 'name': 'electrical_converter'}, {'id': 7442, 'synset': 'electrical_device.n.01', 'name': 'electrical_device'}, {'id': 7443, 'synset': 'electrical_system.n.02', 'name': 'electrical_system'}, {'id': 7444, 'synset': 'electric_bell.n.01', 'name': 'electric_bell'}, {'id': 7445, 'synset': 'electric_blanket.n.01', 'name': 'electric_blanket'}, {'id': 7446, 'synset': 'electric_clock.n.01', 'name': 'electric_clock'}, {'id': 7447, 'synset': 'electric-discharge_lamp.n.01', 'name': 'electric-discharge_lamp'}, {'id': 7448, 'synset': 'electric_fan.n.01', 'name': 'electric_fan'}, {'id': 7449, 'synset': 'electric_frying_pan.n.01', 'name': 'electric_frying_pan'}, {'id': 7450, 'synset': 'electric_furnace.n.01', 'name': 'electric_furnace'}, {'id': 7451, 'synset': 'electric_guitar.n.01', 'name': 'electric_guitar'}, {'id': 7452, 'synset': 'electric_hammer.n.01', 'name': 'electric_hammer'}, {'id': 7453, 'synset': 'electric_heater.n.01', 'name': 'electric_heater'}, {'id': 7454, 'synset': 'electric_lamp.n.01', 'name': 'electric_lamp'}, {'id': 7455, 'synset': 'electric_locomotive.n.01', 'name': 'electric_locomotive'}, {'id': 7456, 'synset': 'electric_meter.n.01', 'name': 'electric_meter'}, {'id': 7457, 'synset': 'electric_mixer.n.01', 'name': 'electric_mixer'}, {'id': 7458, 'synset': 'electric_motor.n.01', 'name': 'electric_motor'}, {'id': 7459, 'synset': 'electric_organ.n.01', 'name': 'electric_organ'}, {'id': 7460, 'synset': 'electric_range.n.01', 'name': 'electric_range'}, {'id': 7461, 'synset': 'electric_toothbrush.n.01', 'name': 'electric_toothbrush'}, {'id': 7462, 'synset': 'electric_typewriter.n.01', 'name': 'electric_typewriter'}, {'id': 7463, 'synset': 'electro-acoustic_transducer.n.01', 'name': 'electro-acoustic_transducer'}, {'id': 7464, 'synset': 'electrode.n.01', 'name': 'electrode'}, {'id': 7465, 'synset': 'electrodynamometer.n.01', 'name': 'electrodynamometer'}, {'id': 7466, 'synset': 'electroencephalograph.n.01', 'name': 'electroencephalograph'}, {'id': 7467, 'synset': 'electrograph.n.01', 'name': 'electrograph'}, {'id': 7468, 'synset': 'electrolytic.n.01', 'name': 'electrolytic'}, {'id': 7469, 'synset': 'electrolytic_cell.n.01', 'name': 'electrolytic_cell'}, {'id': 7470, 'synset': 'electromagnet.n.01', 'name': 'electromagnet'}, {'id': 7471, 'synset': 'electrometer.n.01', 'name': 'electrometer'}, {'id': 7472, 'synset': 'electromyograph.n.01', 'name': 'electromyograph'}, {'id': 7473, 'synset': 'electron_accelerator.n.01', 'name': 'electron_accelerator'}, {'id': 7474, 'synset': 'electron_gun.n.01', 'name': 'electron_gun'}, {'id': 7475, 'synset': 'electronic_balance.n.01', 'name': 'electronic_balance'}, {'id': 7476, 'synset': 'electronic_converter.n.01', 'name': 'electronic_converter'}, {'id': 7477, 'synset': 'electronic_device.n.01', 'name': 'electronic_device'}, {'id': 7478, 'synset': 'electronic_equipment.n.01', 'name': 'electronic_equipment'}, {'id': 7479, 'synset': 'electronic_fetal_monitor.n.01', 'name': 'electronic_fetal_monitor'}, {'id': 7480, 'synset': 'electronic_instrument.n.01', 'name': 'electronic_instrument'}, {'id': 7481, 'synset': 'electronic_voltmeter.n.01', 'name': 'electronic_voltmeter'}, {'id': 7482, 'synset': 'electron_microscope.n.01', 'name': 'electron_microscope'}, {'id': 7483, 'synset': 'electron_multiplier.n.01', 'name': 'electron_multiplier'}, {'id': 7484, 'synset': 'electrophorus.n.01', 'name': 'electrophorus'}, {'id': 7485, 'synset': 'electroscope.n.01', 'name': 'electroscope'}, {'id': 7486, 'synset': 'electrostatic_generator.n.01', 'name': 'electrostatic_generator'}, {'id': 7487, 'synset': 'electrostatic_printer.n.01', 'name': 'electrostatic_printer'}, {'id': 7488, 'synset': 'elevator.n.01', 'name': 'elevator'}, {'id': 7489, 'synset': 'elevator.n.02', 'name': 'elevator'}, {'id': 7490, 'synset': 'elevator_shaft.n.01', 'name': 'elevator_shaft'}, {'id': 7491, 'synset': 'embankment.n.01', 'name': 'embankment'}, {'id': 7492, 'synset': 'embassy.n.01', 'name': 'embassy'}, {'id': 7493, 'synset': 'embellishment.n.02', 'name': 'embellishment'}, {'id': 7494, 'synset': 'emergency_room.n.01', 'name': 'emergency_room'}, {'id': 7495, 'synset': 'emesis_basin.n.01', 'name': 'emesis_basin'}, {'id': 7496, 'synset': 'emitter.n.01', 'name': 'emitter'}, {'id': 7497, 'synset': 'empty.n.01', 'name': 'empty'}, {'id': 7498, 'synset': 'emulsion.n.02', 'name': 'emulsion'}, {'id': 7499, 'synset': 'enamel.n.04', 'name': 'enamel'}, {'id': 7500, 'synset': 'enamel.n.03', 'name': 'enamel'}, {'id': 7501, 'synset': 'enamelware.n.01', 'name': 'enamelware'}, {'id': 7502, 'synset': 'encaustic.n.01', 'name': 'encaustic'}, {'id': 7503, 'synset': 'encephalogram.n.02', 'name': 'encephalogram'}, {'id': 7504, 'synset': 'enclosure.n.01', 'name': 'enclosure'}, {'id': 7505, 'synset': 'endoscope.n.01', 'name': 'endoscope'}, {'id': 7506, 'synset': 'energizer.n.02', 'name': 'energizer'}, {'id': 7507, 'synset': 'engine.n.01', 'name': 'engine'}, {'id': 7508, 'synset': 'engine.n.04', 'name': 'engine'}, {'id': 7509, 'synset': 'engineering.n.03', 'name': 'engineering'}, {'id': 7510, 'synset': 'enginery.n.01', 'name': 'enginery'}, {'id': 7511, 'synset': 'english_horn.n.01', 'name': 'English_horn'}, {'id': 7512, 'synset': 'english_saddle.n.01', 'name': 'English_saddle'}, {'id': 7513, 'synset': 'enlarger.n.01', 'name': 'enlarger'}, {'id': 7514, 'synset': 'ensemble.n.05', 'name': 'ensemble'}, {'id': 7515, 'synset': 'ensign.n.03', 'name': 'ensign'}, {'id': 7516, 'synset': 'entablature.n.01', 'name': 'entablature'}, {'id': 7517, 'synset': 'entertainment_center.n.01', 'name': 'entertainment_center'}, {'id': 7518, 'synset': 'entrenching_tool.n.01', 'name': 'entrenching_tool'}, {'id': 7519, 'synset': 'entrenchment.n.01', 'name': 'entrenchment'}, {'id': 7520, 'synset': 'envelope.n.02', 'name': 'envelope'}, {'id': 7521, 'synset': 'envelope.n.06', 'name': 'envelope'}, {'id': 7522, 'synset': 'eolith.n.01', 'name': 'eolith'}, {'id': 7523, 'synset': 'epauliere.n.01', 'name': 'epauliere'}, {'id': 7524, 'synset': 'epee.n.01', 'name': 'epee'}, {'id': 7525, 'synset': 'epergne.n.01', 'name': 'epergne'}, {'id': 7526, 'synset': 'epicyclic_train.n.01', 'name': 'epicyclic_train'}, {'id': 7527, 'synset': 'epidiascope.n.01', 'name': 'epidiascope'}, {'id': 7528, 'synset': 'epilating_wax.n.01', 'name': 'epilating_wax'}, {'id': 7529, 'synset': 'equalizer.n.01', 'name': 'equalizer'}, {'id': 7530, 'synset': 'equatorial.n.01', 'name': 'equatorial'}, {'id': 7531, 'synset': 'equipment.n.01', 'name': 'equipment'}, {'id': 7532, 'synset': 'erasable_programmable_read-only_memory.n.01', 'name': 'erasable_programmable_read-only_memory'}, {'id': 7533, 'synset': 'erecting_prism.n.01', 'name': 'erecting_prism'}, {'id': 7534, 'synset': 'erection.n.02', 'name': 'erection'}, {'id': 7535, 'synset': 'erlenmeyer_flask.n.01', 'name': 'Erlenmeyer_flask'}, {'id': 7536, 'synset': 'escape_hatch.n.01', 'name': 'escape_hatch'}, {'id': 7537, 'synset': 'escapement.n.01', 'name': 'escapement'}, {'id': 7538, 'synset': 'escape_wheel.n.01', 'name': 'escape_wheel'}, {'id': 7539, 'synset': 'escarpment.n.02', 'name': 'escarpment'}, {'id': 7540, 'synset': 'escutcheon.n.03', 'name': 'escutcheon'}, {'id': 7541, 'synset': 'esophagoscope.n.01', 'name': 'esophagoscope'}, {'id': 7542, 'synset': 'espadrille.n.01', 'name': 'espadrille'}, {'id': 7543, 'synset': 'espalier.n.01', 'name': 'espalier'}, {'id': 7544, 'synset': 'espresso_maker.n.01', 'name': 'espresso_maker'}, {'id': 7545, 'synset': 'espresso_shop.n.01', 'name': 'espresso_shop'}, {'id': 7546, 'synset': 'establishment.n.04', 'name': 'establishment'}, {'id': 7547, 'synset': 'estaminet.n.01', 'name': 'estaminet'}, {'id': 7548, 'synset': 'estradiol_patch.n.01', 'name': 'estradiol_patch'}, {'id': 7549, 'synset': 'etagere.n.01', 'name': 'etagere'}, {'id': 7550, 'synset': 'etamine.n.01', 'name': 'etamine'}, {'id': 7551, 'synset': 'etching.n.02', 'name': 'etching'}, {'id': 7552, 'synset': 'ethernet.n.01', 'name': 'ethernet'}, {'id': 7553, 'synset': 'ethernet_cable.n.01', 'name': 'ethernet_cable'}, {'id': 7554, 'synset': 'eton_jacket.n.01', 'name': 'Eton_jacket'}, {'id': 7555, 'synset': 'etui.n.01', 'name': 'etui'}, {'id': 7556, 'synset': 'eudiometer.n.01', 'name': 'eudiometer'}, {'id': 7557, 'synset': 'euphonium.n.01', 'name': 'euphonium'}, {'id': 7558, 'synset': 'evaporative_cooler.n.01', 'name': 'evaporative_cooler'}, {'id': 7559, 'synset': 'evening_bag.n.01', 'name': 'evening_bag'}, {'id': 7560, 'synset': 'exercise_bike.n.01', 'name': 'exercise_bike'}, {'id': 7561, 'synset': 'exercise_device.n.01', 'name': 'exercise_device'}, {'id': 7562, 'synset': 'exhaust.n.02', 'name': 'exhaust'}, {'id': 7563, 'synset': 'exhaust_fan.n.01', 'name': 'exhaust_fan'}, {'id': 7564, 'synset': 'exhaust_valve.n.01', 'name': 'exhaust_valve'}, {'id': 7565, 'synset': 'exhibition_hall.n.01', 'name': 'exhibition_hall'}, {'id': 7566, 'synset': 'exocet.n.01', 'name': 'Exocet'}, {'id': 7567, 'synset': 'expansion_bit.n.01', 'name': 'expansion_bit'}, {'id': 7568, 'synset': 'expansion_bolt.n.01', 'name': 'expansion_bolt'}, {'id': 7569, 'synset': 'explosive_detection_system.n.01', 'name': 'explosive_detection_system'}, {'id': 7570, 'synset': 'explosive_device.n.01', 'name': 'explosive_device'}, {'id': 7571, 'synset': 'explosive_trace_detection.n.01', 'name': 'explosive_trace_detection'}, {'id': 7572, 'synset': 'express.n.02', 'name': 'express'}, {'id': 7573, 'synset': 'extension.n.10', 'name': 'extension'}, {'id': 7574, 'synset': 'extension_cord.n.01', 'name': 'extension_cord'}, {'id': 7575, 'synset': 'external-combustion_engine.n.01', 'name': 'external-combustion_engine'}, {'id': 7576, 'synset': 'external_drive.n.01', 'name': 'external_drive'}, {'id': 7577, 'synset': 'extractor.n.01', 'name': 'extractor'}, {'id': 7578, 'synset': 'eyebrow_pencil.n.01', 'name': 'eyebrow_pencil'}, {'id': 7579, 'synset': 'eyecup.n.01', 'name': 'eyecup'}, {'id': 7580, 'synset': 'eyeliner.n.01', 'name': 'eyeliner'}, {'id': 7581, 'synset': 'eyepiece.n.01', 'name': 'eyepiece'}, {'id': 7582, 'synset': 'eyeshadow.n.01', 'name': 'eyeshadow'}, {'id': 7583, 'synset': 'fabric.n.01', 'name': 'fabric'}, {'id': 7584, 'synset': 'facade.n.01', 'name': 'facade'}, {'id': 7585, 'synset': 'face_guard.n.01', 'name': 'face_guard'}, {'id': 7586, 'synset': 'face_mask.n.01', 'name': 'face_mask'}, {'id': 7587, 'synset': 'faceplate.n.01', 'name': 'faceplate'}, {'id': 7588, 'synset': 'face_powder.n.01', 'name': 'face_powder'}, {'id': 7589, 'synset': 'face_veil.n.01', 'name': 'face_veil'}, {'id': 7590, 'synset': 'facing.n.03', 'name': 'facing'}, {'id': 7591, 'synset': 'facing.n.01', 'name': 'facing'}, {'id': 7592, 'synset': 'facing.n.02', 'name': 'facing'}, {'id': 7593, 'synset': 'facsimile.n.02', 'name': 'facsimile'}, {'id': 7594, 'synset': 'factory.n.01', 'name': 'factory'}, {'id': 7595, 'synset': 'factory_ship.n.01', 'name': 'factory_ship'}, {'id': 7596, 'synset': 'fagot.n.02', 'name': 'fagot'}, {'id': 7597, 'synset': 'fagot_stitch.n.01', 'name': 'fagot_stitch'}, {'id': 7598, 'synset': 'fahrenheit_thermometer.n.01', 'name': 'Fahrenheit_thermometer'}, {'id': 7599, 'synset': 'faience.n.01', 'name': 'faience'}, {'id': 7600, 'synset': 'faille.n.01', 'name': 'faille'}, {'id': 7601, 'synset': 'fairlead.n.01', 'name': 'fairlead'}, {'id': 7602, 'synset': 'fairy_light.n.01', 'name': 'fairy_light'}, {'id': 7603, 'synset': 'falchion.n.01', 'name': 'falchion'}, {'id': 7604, 'synset': 'fallboard.n.01', 'name': 'fallboard'}, {'id': 7605, 'synset': 'fallout_shelter.n.01', 'name': 'fallout_shelter'}, {'id': 7606, 'synset': 'false_face.n.01', 'name': 'false_face'}, {'id': 7607, 'synset': 'false_teeth.n.01', 'name': 'false_teeth'}, {'id': 7608, 'synset': 'family_room.n.01', 'name': 'family_room'}, {'id': 7609, 'synset': 'fan_belt.n.01', 'name': 'fan_belt'}, {'id': 7610, 'synset': 'fan_blade.n.01', 'name': 'fan_blade'}, {'id': 7611, 'synset': 'fancy_dress.n.01', 'name': 'fancy_dress'}, {'id': 7612, 'synset': 'fanion.n.01', 'name': 'fanion'}, {'id': 7613, 'synset': 'fanlight.n.03', 'name': 'fanlight'}, {'id': 7614, 'synset': 'fanjet.n.02', 'name': 'fanjet'}, {'id': 7615, 'synset': 'fanjet.n.01', 'name': 'fanjet'}, {'id': 7616, 'synset': 'fanny_pack.n.01', 'name': 'fanny_pack'}, {'id': 7617, 'synset': 'fan_tracery.n.01', 'name': 'fan_tracery'}, {'id': 7618, 'synset': 'fan_vaulting.n.01', 'name': 'fan_vaulting'}, {'id': 7619, 'synset': 'farm_building.n.01', 'name': 'farm_building'}, {'id': 7620, 'synset': "farmer's_market.n.01", 'name': "farmer's_market"}, {'id': 7621, 'synset': 'farmhouse.n.01', 'name': 'farmhouse'}, {'id': 7622, 'synset': 'farm_machine.n.01', 'name': 'farm_machine'}, {'id': 7623, 'synset': 'farmplace.n.01', 'name': 'farmplace'}, {'id': 7624, 'synset': 'farmyard.n.01', 'name': 'farmyard'}, {'id': 7625, 'synset': 'farthingale.n.01', 'name': 'farthingale'}, {'id': 7626, 'synset': 'fastener.n.02', 'name': 'fastener'}, {'id': 7627, 'synset': 'fast_reactor.n.01', 'name': 'fast_reactor'}, {'id': 7628, 'synset': 'fat_farm.n.01', 'name': 'fat_farm'}, {'id': 7629, 'synset': 'fatigues.n.01', 'name': 'fatigues'}, {'id': 7630, 'synset': 'fauld.n.01', 'name': 'fauld'}, {'id': 7631, 'synset': 'fauteuil.n.01', 'name': 'fauteuil'}, {'id': 7632, 'synset': 'feather_boa.n.01', 'name': 'feather_boa'}, {'id': 7633, 'synset': 'featheredge.n.01', 'name': 'featheredge'}, {'id': 7634, 'synset': 'feedback_circuit.n.01', 'name': 'feedback_circuit'}, {'id': 7635, 'synset': 'feedlot.n.01', 'name': 'feedlot'}, {'id': 7636, 'synset': 'fell.n.02', 'name': 'fell'}, {'id': 7637, 'synset': 'felloe.n.01', 'name': 'felloe'}, {'id': 7638, 'synset': 'felt.n.01', 'name': 'felt'}, {'id': 7639, 'synset': 'felt-tip_pen.n.01', 'name': 'felt-tip_pen'}, {'id': 7640, 'synset': 'felucca.n.01', 'name': 'felucca'}, {'id': 7641, 'synset': 'fence.n.01', 'name': 'fence'}, {'id': 7642, 'synset': 'fencing_mask.n.01', 'name': 'fencing_mask'}, {'id': 7643, 'synset': 'fencing_sword.n.01', 'name': 'fencing_sword'}, {'id': 7644, 'synset': 'fender.n.01', 'name': 'fender'}, {'id': 7645, 'synset': 'fender.n.02', 'name': 'fender'}, {'id': 7646, 'synset': 'ferrule.n.01', 'name': 'ferrule'}, {'id': 7647, 'synset': 'ferule.n.01', 'name': 'ferule'}, {'id': 7648, 'synset': 'festoon.n.01', 'name': 'festoon'}, {'id': 7649, 'synset': 'fetoscope.n.01', 'name': 'fetoscope'}, {'id': 7650, 'synset': 'fetter.n.01', 'name': 'fetter'}, {'id': 7651, 'synset': 'fez.n.02', 'name': 'fez'}, {'id': 7652, 'synset': 'fiber.n.05', 'name': 'fiber'}, {'id': 7653, 'synset': 'fiber_optic_cable.n.01', 'name': 'fiber_optic_cable'}, {'id': 7654, 'synset': 'fiberscope.n.01', 'name': 'fiberscope'}, {'id': 7655, 'synset': 'fichu.n.01', 'name': 'fichu'}, {'id': 7656, 'synset': 'fiddlestick.n.01', 'name': 'fiddlestick'}, {'id': 7657, 'synset': 'field_artillery.n.01', 'name': 'field_artillery'}, {'id': 7658, 'synset': 'field_coil.n.01', 'name': 'field_coil'}, {'id': 7659, 'synset': 'field-effect_transistor.n.01', 'name': 'field-effect_transistor'}, {'id': 7660, 'synset': 'field-emission_microscope.n.01', 'name': 'field-emission_microscope'}, {'id': 7661, 'synset': 'field_glass.n.01', 'name': 'field_glass'}, {'id': 7662, 'synset': 'field_hockey_ball.n.01', 'name': 'field_hockey_ball'}, {'id': 7663, 'synset': 'field_hospital.n.01', 'name': 'field_hospital'}, {'id': 7664, 'synset': 'field_house.n.01', 'name': 'field_house'}, {'id': 7665, 'synset': 'field_lens.n.01', 'name': 'field_lens'}, {'id': 7666, 'synset': 'field_magnet.n.01', 'name': 'field_magnet'}, {'id': 7667, 'synset': 'field-sequential_color_television.n.01', 'name': 'field-sequential_color_television'}, {'id': 7668, 'synset': 'field_tent.n.01', 'name': 'field_tent'}, {'id': 7669, 'synset': 'fieldwork.n.01', 'name': 'fieldwork'}, {'id': 7670, 'synset': 'fife.n.01', 'name': 'fife'}, {'id': 7671, 'synset': 'fifth_wheel.n.02', 'name': 'fifth_wheel'}, {'id': 7672, 'synset': 'fighting_chair.n.01', 'name': 'fighting_chair'}, {'id': 7673, 'synset': 'fig_leaf.n.02', 'name': 'fig_leaf'}, {'id': 7674, 'synset': 'figure_eight.n.01', 'name': 'figure_eight'}, {'id': 7675, 'synset': 'figure_loom.n.01', 'name': 'figure_loom'}, {'id': 7676, 'synset': 'figure_skate.n.01', 'name': 'figure_skate'}, {'id': 7677, 'synset': 'filament.n.04', 'name': 'filament'}, {'id': 7678, 'synset': 'filature.n.01', 'name': 'filature'}, {'id': 7679, 'synset': 'file_folder.n.01', 'name': 'file_folder'}, {'id': 7680, 'synset': 'file_server.n.01', 'name': 'file_server'}, {'id': 7681, 'synset': 'filigree.n.01', 'name': 'filigree'}, {'id': 7682, 'synset': 'filling.n.05', 'name': 'filling'}, {'id': 7683, 'synset': 'film.n.03', 'name': 'film'}, {'id': 7684, 'synset': 'film.n.05', 'name': 'film'}, {'id': 7685, 'synset': 'film_advance.n.01', 'name': 'film_advance'}, {'id': 7686, 'synset': 'filter.n.01', 'name': 'filter'}, {'id': 7687, 'synset': 'filter.n.02', 'name': 'filter'}, {'id': 7688, 'synset': 'finder.n.03', 'name': 'finder'}, {'id': 7689, 'synset': 'finery.n.01', 'name': 'finery'}, {'id': 7690, 'synset': 'fine-tooth_comb.n.01', 'name': 'fine-tooth_comb'}, {'id': 7691, 'synset': 'finger.n.03', 'name': 'finger'}, {'id': 7692, 'synset': 'fingerboard.n.03', 'name': 'fingerboard'}, {'id': 7693, 'synset': 'finger_bowl.n.01', 'name': 'finger_bowl'}, {'id': 7694, 'synset': 'finger_paint.n.01', 'name': 'finger_paint'}, {'id': 7695, 'synset': 'finger-painting.n.01', 'name': 'finger-painting'}, {'id': 7696, 'synset': 'finger_plate.n.01', 'name': 'finger_plate'}, {'id': 7697, 'synset': 'fingerstall.n.01', 'name': 'fingerstall'}, {'id': 7698, 'synset': 'finish_coat.n.02', 'name': 'finish_coat'}, {'id': 7699, 'synset': 'finish_coat.n.01', 'name': 'finish_coat'}, {'id': 7700, 'synset': 'finisher.n.05', 'name': 'finisher'}, {'id': 7701, 'synset': 'fin_keel.n.01', 'name': 'fin_keel'}, {'id': 7702, 'synset': 'fipple.n.01', 'name': 'fipple'}, {'id': 7703, 'synset': 'fipple_flute.n.01', 'name': 'fipple_flute'}, {'id': 7704, 'synset': 'fire.n.04', 'name': 'fire'}, {'id': 7705, 'synset': 'firearm.n.01', 'name': 'firearm'}, {'id': 7706, 'synset': 'fire_bell.n.01', 'name': 'fire_bell'}, {'id': 7707, 'synset': 'fireboat.n.01', 'name': 'fireboat'}, {'id': 7708, 'synset': 'firebox.n.01', 'name': 'firebox'}, {'id': 7709, 'synset': 'firebrick.n.01', 'name': 'firebrick'}, {'id': 7710, 'synset': 'fire_control_radar.n.01', 'name': 'fire_control_radar'}, {'id': 7711, 'synset': 'fire_control_system.n.01', 'name': 'fire_control_system'}, {'id': 7712, 'synset': 'fire_iron.n.01', 'name': 'fire_iron'}, {'id': 7713, 'synset': "fireman's_ax.n.01", 'name': "fireman's_ax"}, {'id': 7714, 'synset': 'fire_screen.n.01', 'name': 'fire_screen'}, {'id': 7715, 'synset': 'fire_tongs.n.01', 'name': 'fire_tongs'}, {'id': 7716, 'synset': 'fire_tower.n.01', 'name': 'fire_tower'}, {'id': 7717, 'synset': 'firewall.n.02', 'name': 'firewall'}, {'id': 7718, 'synset': 'firing_chamber.n.01', 'name': 'firing_chamber'}, {'id': 7719, 'synset': 'firing_pin.n.01', 'name': 'firing_pin'}, {'id': 7720, 'synset': 'firkin.n.02', 'name': 'firkin'}, {'id': 7721, 'synset': 'firmer_chisel.n.01', 'name': 'firmer_chisel'}, {'id': 7722, 'synset': 'first-aid_station.n.01', 'name': 'first-aid_station'}, {'id': 7723, 'synset': 'first_base.n.01', 'name': 'first_base'}, {'id': 7724, 'synset': 'first_class.n.03', 'name': 'first_class'}, {'id': 7725, 'synset': "fisherman's_bend.n.01", 'name': "fisherman's_bend"}, {'id': 7726, 'synset': "fisherman's_knot.n.01", 'name': "fisherman's_knot"}, {'id': 7727, 'synset': "fisherman's_lure.n.01", 'name': "fisherman's_lure"}, {'id': 7728, 'synset': 'fishhook.n.01', 'name': 'fishhook'}, {'id': 7729, 'synset': 'fishing_boat.n.01', 'name': 'fishing_boat'}, {'id': 7730, 'synset': 'fishing_gear.n.01', 'name': 'fishing_gear'}, {'id': 7731, 'synset': 'fish_joint.n.01', 'name': 'fish_joint'}, {'id': 7732, 'synset': 'fish_knife.n.01', 'name': 'fish_knife'}, {'id': 7733, 'synset': 'fishnet.n.01', 'name': 'fishnet'}, {'id': 7734, 'synset': 'fish_slice.n.01', 'name': 'fish_slice'}, {'id': 7735, 'synset': 'fitment.n.01', 'name': 'fitment'}, {'id': 7736, 'synset': 'fixative.n.02', 'name': 'fixative'}, {'id': 7737, 'synset': 'fixer-upper.n.01', 'name': 'fixer-upper'}, {'id': 7738, 'synset': 'flageolet.n.02', 'name': 'flageolet'}, {'id': 7739, 'synset': 'flagon.n.01', 'name': 'flagon'}, {'id': 7740, 'synset': 'flagship.n.02', 'name': 'flagship'}, {'id': 7741, 'synset': 'flail.n.01', 'name': 'flail'}, {'id': 7742, 'synset': 'flambeau.n.01', 'name': 'flambeau'}, {'id': 7743, 'synset': 'flamethrower.n.01', 'name': 'flamethrower'}, {'id': 7744, 'synset': 'flange.n.01', 'name': 'flange'}, {'id': 7745, 'synset': 'flannel.n.03', 'name': 'flannel'}, {'id': 7746, 'synset': 'flannelette.n.01', 'name': 'flannelette'}, {'id': 7747, 'synset': 'flap.n.05', 'name': 'flap'}, {'id': 7748, 'synset': 'flash.n.09', 'name': 'flash'}, {'id': 7749, 'synset': 'flash_camera.n.01', 'name': 'flash_camera'}, {'id': 7750, 'synset': 'flasher.n.02', 'name': 'flasher'}, {'id': 7751, 'synset': 'flashlight_battery.n.01', 'name': 'flashlight_battery'}, {'id': 7752, 'synset': 'flash_memory.n.01', 'name': 'flash_memory'}, {'id': 7753, 'synset': 'flask.n.01', 'name': 'flask'}, {'id': 7754, 'synset': 'flat_arch.n.01', 'name': 'flat_arch'}, {'id': 7755, 'synset': 'flatbed.n.02', 'name': 'flatbed'}, {'id': 7756, 'synset': 'flatbed_press.n.01', 'name': 'flatbed_press'}, {'id': 7757, 'synset': 'flat_bench.n.01', 'name': 'flat_bench'}, {'id': 7758, 'synset': 'flatcar.n.01', 'name': 'flatcar'}, {'id': 7759, 'synset': 'flat_file.n.01', 'name': 'flat_file'}, {'id': 7760, 'synset': 'flatlet.n.01', 'name': 'flatlet'}, {'id': 7761, 'synset': 'flat_panel_display.n.01', 'name': 'flat_panel_display'}, {'id': 7762, 'synset': 'flats.n.01', 'name': 'flats'}, {'id': 7763, 'synset': 'flat_tip_screwdriver.n.01', 'name': 'flat_tip_screwdriver'}, {'id': 7764, 'synset': 'fleet_ballistic_missile_submarine.n.01', 'name': 'fleet_ballistic_missile_submarine'}, {'id': 7765, 'synset': 'fleur-de-lis.n.02', 'name': 'fleur-de-lis'}, {'id': 7766, 'synset': 'flight_simulator.n.01', 'name': 'flight_simulator'}, {'id': 7767, 'synset': 'flintlock.n.02', 'name': 'flintlock'}, {'id': 7768, 'synset': 'flintlock.n.01', 'name': 'flintlock'}, {'id': 7769, 'synset': 'float.n.05', 'name': 'float'}, {'id': 7770, 'synset': 'floating_dock.n.01', 'name': 'floating_dock'}, {'id': 7771, 'synset': 'floatplane.n.01', 'name': 'floatplane'}, {'id': 7772, 'synset': 'flood.n.03', 'name': 'flood'}, {'id': 7773, 'synset': 'floor.n.01', 'name': 'floor'}, {'id': 7774, 'synset': 'floor.n.02', 'name': 'floor'}, {'id': 7775, 'synset': 'floor.n.09', 'name': 'floor'}, {'id': 7776, 'synset': 'floorboard.n.02', 'name': 'floorboard'}, {'id': 7777, 'synset': 'floor_cover.n.01', 'name': 'floor_cover'}, {'id': 7778, 'synset': 'floor_joist.n.01', 'name': 'floor_joist'}, {'id': 7779, 'synset': 'floor_lamp.n.01', 'name': 'floor_lamp'}, {'id': 7780, 'synset': 'flophouse.n.01', 'name': 'flophouse'}, {'id': 7781, 'synset': 'florist.n.02', 'name': 'florist'}, {'id': 7782, 'synset': 'floss.n.01', 'name': 'floss'}, {'id': 7783, 'synset': 'flotsam.n.01', 'name': 'flotsam'}, {'id': 7784, 'synset': 'flour_bin.n.01', 'name': 'flour_bin'}, {'id': 7785, 'synset': 'flour_mill.n.01', 'name': 'flour_mill'}, {'id': 7786, 'synset': 'flowerbed.n.01', 'name': 'flowerbed'}, {'id': 7787, 'synset': 'flugelhorn.n.01', 'name': 'flugelhorn'}, {'id': 7788, 'synset': 'fluid_drive.n.01', 'name': 'fluid_drive'}, {'id': 7789, 'synset': 'fluid_flywheel.n.01', 'name': 'fluid_flywheel'}, {'id': 7790, 'synset': 'flume.n.02', 'name': 'flume'}, {'id': 7791, 'synset': 'fluorescent_lamp.n.01', 'name': 'fluorescent_lamp'}, {'id': 7792, 'synset': 'fluoroscope.n.01', 'name': 'fluoroscope'}, {'id': 7793, 'synset': 'flush_toilet.n.01', 'name': 'flush_toilet'}, {'id': 7794, 'synset': 'flute.n.01', 'name': 'flute'}, {'id': 7795, 'synset': 'flux_applicator.n.01', 'name': 'flux_applicator'}, {'id': 7796, 'synset': 'fluxmeter.n.01', 'name': 'fluxmeter'}, {'id': 7797, 'synset': 'fly.n.05', 'name': 'fly'}, {'id': 7798, 'synset': 'flying_boat.n.01', 'name': 'flying_boat'}, {'id': 7799, 'synset': 'flying_buttress.n.01', 'name': 'flying_buttress'}, {'id': 7800, 'synset': 'flying_carpet.n.01', 'name': 'flying_carpet'}, {'id': 7801, 'synset': 'flying_jib.n.01', 'name': 'flying_jib'}, {'id': 7802, 'synset': 'fly_rod.n.01', 'name': 'fly_rod'}, {'id': 7803, 'synset': 'fly_tent.n.01', 'name': 'fly_tent'}, {'id': 7804, 'synset': 'flytrap.n.01', 'name': 'flytrap'}, {'id': 7805, 'synset': 'flywheel.n.01', 'name': 'flywheel'}, {'id': 7806, 'synset': 'fob.n.03', 'name': 'fob'}, {'id': 7807, 'synset': 'foghorn.n.02', 'name': 'foghorn'}, {'id': 7808, 'synset': 'foglamp.n.01', 'name': 'foglamp'}, {'id': 7809, 'synset': 'foil.n.05', 'name': 'foil'}, {'id': 7810, 'synset': 'fold.n.06', 'name': 'fold'}, {'id': 7811, 'synset': 'folder.n.02', 'name': 'folder'}, {'id': 7812, 'synset': 'folding_door.n.01', 'name': 'folding_door'}, {'id': 7813, 'synset': 'folding_saw.n.01', 'name': 'folding_saw'}, {'id': 7814, 'synset': 'food_court.n.01', 'name': 'food_court'}, {'id': 7815, 'synset': 'food_hamper.n.01', 'name': 'food_hamper'}, {'id': 7816, 'synset': 'foot.n.11', 'name': 'foot'}, {'id': 7817, 'synset': 'footage.n.01', 'name': 'footage'}, {'id': 7818, 'synset': 'football_stadium.n.01', 'name': 'football_stadium'}, {'id': 7819, 'synset': 'footbath.n.01', 'name': 'footbath'}, {'id': 7820, 'synset': 'foot_brake.n.01', 'name': 'foot_brake'}, {'id': 7821, 'synset': 'footbridge.n.01', 'name': 'footbridge'}, {'id': 7822, 'synset': 'foothold.n.02', 'name': 'foothold'}, {'id': 7823, 'synset': 'footlocker.n.01', 'name': 'footlocker'}, {'id': 7824, 'synset': 'foot_rule.n.01', 'name': 'foot_rule'}, {'id': 7825, 'synset': 'footwear.n.02', 'name': 'footwear'}, {'id': 7826, 'synset': 'footwear.n.01', 'name': 'footwear'}, {'id': 7827, 'synset': 'forceps.n.01', 'name': 'forceps'}, {'id': 7828, 'synset': 'force_pump.n.01', 'name': 'force_pump'}, {'id': 7829, 'synset': 'fore-and-after.n.01', 'name': 'fore-and-after'}, {'id': 7830, 'synset': 'fore-and-aft_sail.n.01', 'name': 'fore-and-aft_sail'}, {'id': 7831, 'synset': 'forecastle.n.01', 'name': 'forecastle'}, {'id': 7832, 'synset': 'forecourt.n.01', 'name': 'forecourt'}, {'id': 7833, 'synset': 'foredeck.n.01', 'name': 'foredeck'}, {'id': 7834, 'synset': 'fore_edge.n.01', 'name': 'fore_edge'}, {'id': 7835, 'synset': 'foreground.n.02', 'name': 'foreground'}, {'id': 7836, 'synset': 'foremast.n.01', 'name': 'foremast'}, {'id': 7837, 'synset': 'fore_plane.n.01', 'name': 'fore_plane'}, {'id': 7838, 'synset': 'foresail.n.01', 'name': 'foresail'}, {'id': 7839, 'synset': 'forestay.n.01', 'name': 'forestay'}, {'id': 7840, 'synset': 'foretop.n.01', 'name': 'foretop'}, {'id': 7841, 'synset': 'fore-topmast.n.01', 'name': 'fore-topmast'}, {'id': 7842, 'synset': 'fore-topsail.n.01', 'name': 'fore-topsail'}, {'id': 7843, 'synset': 'forge.n.01', 'name': 'forge'}, {'id': 7844, 'synset': 'fork.n.04', 'name': 'fork'}, {'id': 7845, 'synset': 'formalwear.n.01', 'name': 'formalwear'}, {'id': 7846, 'synset': 'formica.n.01', 'name': 'Formica'}, {'id': 7847, 'synset': 'fortification.n.01', 'name': 'fortification'}, {'id': 7848, 'synset': 'fortress.n.01', 'name': 'fortress'}, {'id': 7849, 'synset': 'forty-five.n.01', 'name': 'forty-five'}, {'id': 7850, 'synset': 'foucault_pendulum.n.01', 'name': 'Foucault_pendulum'}, {'id': 7851, 'synset': 'foulard.n.01', 'name': 'foulard'}, {'id': 7852, 'synset': 'foul-weather_gear.n.01', 'name': 'foul-weather_gear'}, {'id': 7853, 'synset': 'foundation_garment.n.01', 'name': 'foundation_garment'}, {'id': 7854, 'synset': 'foundry.n.01', 'name': 'foundry'}, {'id': 7855, 'synset': 'fountain.n.01', 'name': 'fountain'}, {'id': 7856, 'synset': 'fountain_pen.n.01', 'name': 'fountain_pen'}, {'id': 7857, 'synset': 'four-in-hand.n.01', 'name': 'four-in-hand'}, {'id': 7858, 'synset': 'four-poster.n.01', 'name': 'four-poster'}, {'id': 7859, 'synset': 'four-pounder.n.01', 'name': 'four-pounder'}, {'id': 7860, 'synset': 'four-stroke_engine.n.01', 'name': 'four-stroke_engine'}, {'id': 7861, 'synset': 'four-wheel_drive.n.02', 'name': 'four-wheel_drive'}, {'id': 7862, 'synset': 'four-wheel_drive.n.01', 'name': 'four-wheel_drive'}, {'id': 7863, 'synset': 'four-wheeler.n.01', 'name': 'four-wheeler'}, {'id': 7864, 'synset': 'fowling_piece.n.01', 'name': 'fowling_piece'}, {'id': 7865, 'synset': 'foxhole.n.01', 'name': 'foxhole'}, {'id': 7866, 'synset': 'fragmentation_bomb.n.01', 'name': 'fragmentation_bomb'}, {'id': 7867, 'synset': 'frail.n.02', 'name': 'frail'}, {'id': 7868, 'synset': 'fraise.n.02', 'name': 'fraise'}, {'id': 7869, 'synset': 'frame.n.10', 'name': 'frame'}, {'id': 7870, 'synset': 'frame.n.01', 'name': 'frame'}, {'id': 7871, 'synset': 'frame_buffer.n.01', 'name': 'frame_buffer'}, {'id': 7872, 'synset': 'framework.n.03', 'name': 'framework'}, {'id': 7873, 'synset': 'francis_turbine.n.01', 'name': 'Francis_turbine'}, {'id': 7874, 'synset': 'franking_machine.n.01', 'name': 'franking_machine'}, {'id': 7875, 'synset': 'free_house.n.01', 'name': 'free_house'}, {'id': 7876, 'synset': 'free-reed.n.01', 'name': 'free-reed'}, {'id': 7877, 'synset': 'free-reed_instrument.n.01', 'name': 'free-reed_instrument'}, {'id': 7878, 'synset': 'freewheel.n.01', 'name': 'freewheel'}, {'id': 7879, 'synset': 'freight_elevator.n.01', 'name': 'freight_elevator'}, {'id': 7880, 'synset': 'freight_liner.n.01', 'name': 'freight_liner'}, {'id': 7881, 'synset': 'freight_train.n.01', 'name': 'freight_train'}, {'id': 7882, 'synset': 'french_door.n.01', 'name': 'French_door'}, {'id': 7883, 'synset': 'french_horn.n.01', 'name': 'French_horn'}, {'id': 7884, 'synset': 'french_polish.n.02', 'name': 'French_polish'}, {'id': 7885, 'synset': 'french_roof.n.01', 'name': 'French_roof'}, {'id': 7886, 'synset': 'french_window.n.01', 'name': 'French_window'}, {'id': 7887, 'synset': 'fresnel_lens.n.01', 'name': 'Fresnel_lens'}, {'id': 7888, 'synset': 'fret.n.04', 'name': 'fret'}, {'id': 7889, 'synset': 'friary.n.01', 'name': 'friary'}, {'id': 7890, 'synset': 'friction_clutch.n.01', 'name': 'friction_clutch'}, {'id': 7891, 'synset': 'frieze.n.02', 'name': 'frieze'}, {'id': 7892, 'synset': 'frieze.n.01', 'name': 'frieze'}, {'id': 7893, 'synset': 'frigate.n.02', 'name': 'frigate'}, {'id': 7894, 'synset': 'frigate.n.01', 'name': 'frigate'}, {'id': 7895, 'synset': 'frill.n.03', 'name': 'frill'}, {'id': 7896, 'synset': 'frock.n.01', 'name': 'frock'}, {'id': 7897, 'synset': 'frock_coat.n.01', 'name': 'frock_coat'}, {'id': 7898, 'synset': 'frontlet.n.01', 'name': 'frontlet'}, {'id': 7899, 'synset': 'front_porch.n.01', 'name': 'front_porch'}, {'id': 7900, 'synset': 'front_projector.n.01', 'name': 'front_projector'}, {'id': 7901, 'synset': 'fruit_machine.n.01', 'name': 'fruit_machine'}, {'id': 7902, 'synset': 'fuel_filter.n.01', 'name': 'fuel_filter'}, {'id': 7903, 'synset': 'fuel_gauge.n.01', 'name': 'fuel_gauge'}, {'id': 7904, 'synset': 'fuel_injection.n.01', 'name': 'fuel_injection'}, {'id': 7905, 'synset': 'fuel_system.n.01', 'name': 'fuel_system'}, {'id': 7906, 'synset': 'full-dress_uniform.n.01', 'name': 'full-dress_uniform'}, {'id': 7907, 'synset': 'full_metal_jacket.n.01', 'name': 'full_metal_jacket'}, {'id': 7908, 'synset': 'full_skirt.n.01', 'name': 'full_skirt'}, {'id': 7909, 'synset': 'fumigator.n.02', 'name': 'fumigator'}, {'id': 7910, 'synset': 'funeral_home.n.01', 'name': 'funeral_home'}, {'id': 7911, 'synset': 'funny_wagon.n.01', 'name': 'funny_wagon'}, {'id': 7912, 'synset': 'fur.n.03', 'name': 'fur'}, {'id': 7913, 'synset': 'fur_coat.n.01', 'name': 'fur_coat'}, {'id': 7914, 'synset': 'fur_hat.n.01', 'name': 'fur_hat'}, {'id': 7915, 'synset': 'furnace.n.01', 'name': 'furnace'}, {'id': 7916, 'synset': 'furnace_lining.n.01', 'name': 'furnace_lining'}, {'id': 7917, 'synset': 'furnace_room.n.01', 'name': 'furnace_room'}, {'id': 7918, 'synset': 'furnishing.n.02', 'name': 'furnishing'}, {'id': 7919, 'synset': 'furnishing.n.01', 'name': 'furnishing'}, {'id': 7920, 'synset': 'furniture.n.01', 'name': 'furniture'}, {'id': 7921, 'synset': 'fur-piece.n.01', 'name': 'fur-piece'}, {'id': 7922, 'synset': 'furrow.n.01', 'name': 'furrow'}, {'id': 7923, 'synset': 'fuse.n.01', 'name': 'fuse'}, {'id': 7924, 'synset': 'fusee_drive.n.01', 'name': 'fusee_drive'}, {'id': 7925, 'synset': 'fuselage.n.01', 'name': 'fuselage'}, {'id': 7926, 'synset': 'fusil.n.01', 'name': 'fusil'}, {'id': 7927, 'synset': 'fustian.n.02', 'name': 'fustian'}, {'id': 7928, 'synset': 'gabardine.n.01', 'name': 'gabardine'}, {'id': 7929, 'synset': 'gable.n.01', 'name': 'gable'}, {'id': 7930, 'synset': 'gable_roof.n.01', 'name': 'gable_roof'}, {'id': 7931, 'synset': 'gadgetry.n.01', 'name': 'gadgetry'}, {'id': 7932, 'synset': 'gaff.n.03', 'name': 'gaff'}, {'id': 7933, 'synset': 'gaff.n.02', 'name': 'gaff'}, {'id': 7934, 'synset': 'gaff.n.01', 'name': 'gaff'}, {'id': 7935, 'synset': 'gaffsail.n.01', 'name': 'gaffsail'}, {'id': 7936, 'synset': 'gaff_topsail.n.01', 'name': 'gaff_topsail'}, {'id': 7937, 'synset': 'gaiter.n.03', 'name': 'gaiter'}, {'id': 7938, 'synset': 'gaiter.n.02', 'name': 'gaiter'}, {'id': 7939, 'synset': 'galilean_telescope.n.01', 'name': 'Galilean_telescope'}, {'id': 7940, 'synset': 'galleon.n.01', 'name': 'galleon'}, {'id': 7941, 'synset': 'gallery.n.04', 'name': 'gallery'}, {'id': 7942, 'synset': 'gallery.n.03', 'name': 'gallery'}, {'id': 7943, 'synset': 'galley.n.04', 'name': 'galley'}, {'id': 7944, 'synset': 'galley.n.03', 'name': 'galley'}, {'id': 7945, 'synset': 'galley.n.02', 'name': 'galley'}, {'id': 7946, 'synset': 'gallows.n.01', 'name': 'gallows'}, {'id': 7947, 'synset': 'gallows_tree.n.01', 'name': 'gallows_tree'}, {'id': 7948, 'synset': 'galvanometer.n.01', 'name': 'galvanometer'}, {'id': 7949, 'synset': 'gambling_house.n.01', 'name': 'gambling_house'}, {'id': 7950, 'synset': 'gambrel.n.01', 'name': 'gambrel'}, {'id': 7951, 'synset': 'game.n.09', 'name': 'game'}, {'id': 7952, 'synset': 'gamebag.n.01', 'name': 'gamebag'}, {'id': 7953, 'synset': 'game_equipment.n.01', 'name': 'game_equipment'}, {'id': 7954, 'synset': 'gaming_table.n.01', 'name': 'gaming_table'}, {'id': 7955, 'synset': 'gamp.n.01', 'name': 'gamp'}, {'id': 7956, 'synset': 'gangplank.n.01', 'name': 'gangplank'}, {'id': 7957, 'synset': 'gangsaw.n.01', 'name': 'gangsaw'}, {'id': 7958, 'synset': 'gangway.n.01', 'name': 'gangway'}, {'id': 7959, 'synset': 'gantlet.n.04', 'name': 'gantlet'}, {'id': 7960, 'synset': 'gantry.n.01', 'name': 'gantry'}, {'id': 7961, 'synset': 'garage.n.01', 'name': 'garage'}, {'id': 7962, 'synset': 'garage.n.02', 'name': 'garage'}, {'id': 7963, 'synset': 'garand_rifle.n.01', 'name': 'Garand_rifle'}, {'id': 7964, 'synset': 'garboard.n.01', 'name': 'garboard'}, {'id': 7965, 'synset': 'garden.n.01', 'name': 'garden'}, {'id': 7966, 'synset': 'garden.n.03', 'name': 'garden'}, {'id': 7967, 'synset': 'garden_rake.n.01', 'name': 'garden_rake'}, {'id': 7968, 'synset': 'garden_spade.n.01', 'name': 'garden_spade'}, {'id': 7969, 'synset': 'garden_tool.n.01', 'name': 'garden_tool'}, {'id': 7970, 'synset': 'garden_trowel.n.01', 'name': 'garden_trowel'}, {'id': 7971, 'synset': 'gargoyle.n.01', 'name': 'gargoyle'}, {'id': 7972, 'synset': 'garibaldi.n.02', 'name': 'garibaldi'}, {'id': 7973, 'synset': 'garlic_press.n.01', 'name': 'garlic_press'}, {'id': 7974, 'synset': 'garment.n.01', 'name': 'garment'}, {'id': 7975, 'synset': 'garment_bag.n.01', 'name': 'garment_bag'}, {'id': 7976, 'synset': 'garrison_cap.n.01', 'name': 'garrison_cap'}, {'id': 7977, 'synset': 'garrote.n.01', 'name': 'garrote'}, {'id': 7978, 'synset': 'garter.n.01', 'name': 'garter'}, {'id': 7979, 'synset': 'garter_belt.n.01', 'name': 'garter_belt'}, {'id': 7980, 'synset': 'garter_stitch.n.01', 'name': 'garter_stitch'}, {'id': 7981, 'synset': 'gas_guzzler.n.01', 'name': 'gas_guzzler'}, {'id': 7982, 'synset': 'gas_shell.n.01', 'name': 'gas_shell'}, {'id': 7983, 'synset': 'gas_bracket.n.01', 'name': 'gas_bracket'}, {'id': 7984, 'synset': 'gas_burner.n.01', 'name': 'gas_burner'}, {'id': 7985, 'synset': 'gas-cooled_reactor.n.01', 'name': 'gas-cooled_reactor'}, {'id': 7986, 'synset': 'gas-discharge_tube.n.01', 'name': 'gas-discharge_tube'}, {'id': 7987, 'synset': 'gas_engine.n.01', 'name': 'gas_engine'}, {'id': 7988, 'synset': 'gas_fixture.n.01', 'name': 'gas_fixture'}, {'id': 7989, 'synset': 'gas_furnace.n.01', 'name': 'gas_furnace'}, {'id': 7990, 'synset': 'gas_gun.n.01', 'name': 'gas_gun'}, {'id': 7991, 'synset': 'gas_heater.n.01', 'name': 'gas_heater'}, {'id': 7992, 'synset': 'gas_holder.n.01', 'name': 'gas_holder'}, {'id': 7993, 'synset': 'gasket.n.01', 'name': 'gasket'}, {'id': 7994, 'synset': 'gas_lamp.n.01', 'name': 'gas_lamp'}, {'id': 7995, 'synset': 'gas_maser.n.01', 'name': 'gas_maser'}, {'id': 7996, 'synset': 'gas_meter.n.01', 'name': 'gas_meter'}, {'id': 7997, 'synset': 'gasoline_engine.n.01', 'name': 'gasoline_engine'}, {'id': 7998, 'synset': 'gasoline_gauge.n.01', 'name': 'gasoline_gauge'}, {'id': 7999, 'synset': 'gas_oven.n.02', 'name': 'gas_oven'}, {'id': 8000, 'synset': 'gas_oven.n.01', 'name': 'gas_oven'}, {'id': 8001, 'synset': 'gas_pump.n.01', 'name': 'gas_pump'}, {'id': 8002, 'synset': 'gas_range.n.01', 'name': 'gas_range'}, {'id': 8003, 'synset': 'gas_ring.n.01', 'name': 'gas_ring'}, {'id': 8004, 'synset': 'gas_tank.n.01', 'name': 'gas_tank'}, {'id': 8005, 'synset': 'gas_thermometer.n.01', 'name': 'gas_thermometer'}, {'id': 8006, 'synset': 'gastroscope.n.01', 'name': 'gastroscope'}, {'id': 8007, 'synset': 'gas_turbine.n.01', 'name': 'gas_turbine'}, {'id': 8008, 'synset': 'gas-turbine_ship.n.01', 'name': 'gas-turbine_ship'}, {'id': 8009, 'synset': 'gat.n.01', 'name': 'gat'}, {'id': 8010, 'synset': 'gate.n.01', 'name': 'gate'}, {'id': 8011, 'synset': 'gatehouse.n.01', 'name': 'gatehouse'}, {'id': 8012, 'synset': 'gateleg_table.n.01', 'name': 'gateleg_table'}, {'id': 8013, 'synset': 'gatepost.n.01', 'name': 'gatepost'}, {'id': 8014, 'synset': 'gathered_skirt.n.01', 'name': 'gathered_skirt'}, {'id': 8015, 'synset': 'gatling_gun.n.01', 'name': 'Gatling_gun'}, {'id': 8016, 'synset': 'gauge.n.01', 'name': 'gauge'}, {'id': 8017, 'synset': 'gauntlet.n.03', 'name': 'gauntlet'}, {'id': 8018, 'synset': 'gauntlet.n.02', 'name': 'gauntlet'}, {'id': 8019, 'synset': 'gauze.n.02', 'name': 'gauze'}, {'id': 8020, 'synset': 'gauze.n.01', 'name': 'gauze'}, {'id': 8021, 'synset': 'gavel.n.01', 'name': 'gavel'}, {'id': 8022, 'synset': 'gazebo.n.01', 'name': 'gazebo'}, {'id': 8023, 'synset': 'gear.n.01', 'name': 'gear'}, {'id': 8024, 'synset': 'gear.n.04', 'name': 'gear'}, {'id': 8025, 'synset': 'gear.n.03', 'name': 'gear'}, {'id': 8026, 'synset': 'gearbox.n.01', 'name': 'gearbox'}, {'id': 8027, 'synset': 'gearing.n.01', 'name': 'gearing'}, {'id': 8028, 'synset': 'gearset.n.01', 'name': 'gearset'}, {'id': 8029, 'synset': 'gearshift.n.01', 'name': 'gearshift'}, {'id': 8030, 'synset': 'geiger_counter.n.01', 'name': 'Geiger_counter'}, {'id': 8031, 'synset': 'geiger_tube.n.01', 'name': 'Geiger_tube'}, {'id': 8032, 'synset': 'gene_chip.n.01', 'name': 'gene_chip'}, {'id': 8033, 'synset': 'general-purpose_bomb.n.01', 'name': 'general-purpose_bomb'}, {'id': 8034, 'synset': 'generator.n.01', 'name': 'generator'}, {'id': 8035, 'synset': 'generator.n.04', 'name': 'generator'}, {'id': 8036, 'synset': 'geneva_gown.n.01', 'name': 'Geneva_gown'}, {'id': 8037, 'synset': 'geodesic_dome.n.01', 'name': 'geodesic_dome'}, {'id': 8038, 'synset': 'georgette.n.01', 'name': 'georgette'}, {'id': 8039, 'synset': 'gharry.n.01', 'name': 'gharry'}, {'id': 8040, 'synset': 'ghat.n.01', 'name': 'ghat'}, {'id': 8041, 'synset': 'ghetto_blaster.n.01', 'name': 'ghetto_blaster'}, {'id': 8042, 'synset': 'gift_shop.n.01', 'name': 'gift_shop'}, {'id': 8043, 'synset': 'gift_wrapping.n.01', 'name': 'gift_wrapping'}, {'id': 8044, 'synset': 'gig.n.05', 'name': 'gig'}, {'id': 8045, 'synset': 'gig.n.04', 'name': 'gig'}, {'id': 8046, 'synset': 'gig.n.01', 'name': 'gig'}, {'id': 8047, 'synset': 'gig.n.03', 'name': 'gig'}, {'id': 8048, 'synset': 'gildhall.n.01', 'name': 'gildhall'}, {'id': 8049, 'synset': 'gill_net.n.01', 'name': 'gill_net'}, {'id': 8050, 'synset': 'gilt.n.01', 'name': 'gilt'}, {'id': 8051, 'synset': 'gimbal.n.01', 'name': 'gimbal'}, {'id': 8052, 'synset': 'gingham.n.01', 'name': 'gingham'}, {'id': 8053, 'synset': 'girandole.n.01', 'name': 'girandole'}, {'id': 8054, 'synset': 'girder.n.01', 'name': 'girder'}, {'id': 8055, 'synset': 'glass.n.07', 'name': 'glass'}, {'id': 8056, 'synset': 'glass_cutter.n.03', 'name': 'glass_cutter'}, {'id': 8057, 'synset': 'glasses_case.n.01', 'name': 'glasses_case'}, {'id': 8058, 'synset': 'glebe_house.n.01', 'name': 'glebe_house'}, {'id': 8059, 'synset': 'glengarry.n.01', 'name': 'Glengarry'}, {'id': 8060, 'synset': 'glider.n.01', 'name': 'glider'}, {'id': 8061, 'synset': 'global_positioning_system.n.01', 'name': 'Global_Positioning_System'}, {'id': 8062, 'synset': 'glockenspiel.n.01', 'name': 'glockenspiel'}, {'id': 8063, 'synset': 'glory_hole.n.01', 'name': 'glory_hole'}, {'id': 8064, 'synset': 'glove_compartment.n.01', 'name': 'glove_compartment'}, {'id': 8065, 'synset': 'glow_lamp.n.01', 'name': 'glow_lamp'}, {'id': 8066, 'synset': 'glow_tube.n.01', 'name': 'glow_tube'}, {'id': 8067, 'synset': 'glyptic_art.n.01', 'name': 'glyptic_art'}, {'id': 8068, 'synset': 'glyptics.n.01', 'name': 'glyptics'}, {'id': 8069, 'synset': 'gnomon.n.01', 'name': 'gnomon'}, {'id': 8070, 'synset': 'goal.n.03', 'name': 'goal'}, {'id': 8071, 'synset': 'goalmouth.n.01', 'name': 'goalmouth'}, {'id': 8072, 'synset': 'goalpost.n.01', 'name': 'goalpost'}, {'id': 8073, 'synset': 'goblet.n.01', 'name': 'goblet'}, {'id': 8074, 'synset': 'godown.n.01', 'name': 'godown'}, {'id': 8075, 'synset': 'go-kart.n.01', 'name': 'go-kart'}, {'id': 8076, 'synset': 'gold_plate.n.02', 'name': 'gold_plate'}, {'id': 8077, 'synset': 'golf_bag.n.01', 'name': 'golf_bag'}, {'id': 8078, 'synset': 'golf_ball.n.01', 'name': 'golf_ball'}, {'id': 8079, 'synset': 'golf-club_head.n.01', 'name': 'golf-club_head'}, {'id': 8080, 'synset': 'golf_equipment.n.01', 'name': 'golf_equipment'}, {'id': 8081, 'synset': 'golf_glove.n.01', 'name': 'golf_glove'}, {'id': 8082, 'synset': 'golliwog.n.01', 'name': 'golliwog'}, {'id': 8083, 'synset': 'gong.n.01', 'name': 'gong'}, {'id': 8084, 'synset': 'goniometer.n.01', 'name': 'goniometer'}, {'id': 8085, 'synset': 'gordian_knot.n.02', 'name': 'Gordian_knot'}, {'id': 8086, 'synset': 'gorget.n.01', 'name': 'gorget'}, {'id': 8087, 'synset': 'gossamer.n.01', 'name': 'gossamer'}, {'id': 8088, 'synset': 'gothic_arch.n.01', 'name': 'Gothic_arch'}, {'id': 8089, 'synset': 'gouache.n.01', 'name': 'gouache'}, {'id': 8090, 'synset': 'gouge.n.02', 'name': 'gouge'}, {'id': 8091, 'synset': 'gourd.n.01', 'name': 'gourd'}, {'id': 8092, 'synset': 'government_building.n.01', 'name': 'government_building'}, {'id': 8093, 'synset': 'government_office.n.01', 'name': 'government_office'}, {'id': 8094, 'synset': 'gown.n.01', 'name': 'gown'}, {'id': 8095, 'synset': 'gown.n.05', 'name': 'gown'}, {'id': 8096, 'synset': 'gown.n.04', 'name': 'gown'}, {'id': 8097, 'synset': 'grab.n.01', 'name': 'grab'}, {'id': 8098, 'synset': 'grab_bag.n.02', 'name': 'grab_bag'}, {'id': 8099, 'synset': 'grab_bar.n.01', 'name': 'grab_bar'}, {'id': 8100, 'synset': 'grace_cup.n.01', 'name': 'grace_cup'}, {'id': 8101, 'synset': 'grade_separation.n.01', 'name': 'grade_separation'}, {'id': 8102, 'synset': 'graduated_cylinder.n.01', 'name': 'graduated_cylinder'}, {'id': 8103, 'synset': 'graffito.n.01', 'name': 'graffito'}, {'id': 8104, 'synset': 'gramophone.n.01', 'name': 'gramophone'}, {'id': 8105, 'synset': 'granary.n.01', 'name': 'granary'}, {'id': 8106, 'synset': 'grandfather_clock.n.01', 'name': 'grandfather_clock'}, {'id': 8107, 'synset': 'grand_piano.n.01', 'name': 'grand_piano'}, {'id': 8108, 'synset': 'graniteware.n.01', 'name': 'graniteware'}, {'id': 8109, 'synset': 'granny_knot.n.01', 'name': 'granny_knot'}, {'id': 8110, 'synset': 'grape_arbor.n.01', 'name': 'grape_arbor'}, {'id': 8111, 'synset': 'grapnel.n.02', 'name': 'grapnel'}, {'id': 8112, 'synset': 'grapnel.n.01', 'name': 'grapnel'}, {'id': 8113, 'synset': 'grass_skirt.n.01', 'name': 'grass_skirt'}, {'id': 8114, 'synset': 'grate.n.01', 'name': 'grate'}, {'id': 8115, 'synset': 'grate.n.03', 'name': 'grate'}, {'id': 8116, 'synset': 'graver.n.01', 'name': 'graver'}, {'id': 8117, 'synset': 'gravimeter.n.02', 'name': 'gravimeter'}, {'id': 8118, 'synset': 'gravure.n.03', 'name': 'gravure'}, {'id': 8119, 'synset': 'grey.n.06', 'name': 'grey'}, {'id': 8120, 'synset': 'grease-gun.n.01', 'name': 'grease-gun'}, {'id': 8121, 'synset': 'greasepaint.n.01', 'name': 'greasepaint'}, {'id': 8122, 'synset': 'greasy_spoon.n.01', 'name': 'greasy_spoon'}, {'id': 8123, 'synset': 'greatcoat.n.01', 'name': 'greatcoat'}, {'id': 8124, 'synset': 'great_hall.n.01', 'name': 'great_hall'}, {'id': 8125, 'synset': 'greave.n.01', 'name': 'greave'}, {'id': 8126, 'synset': 'greengrocery.n.02', 'name': 'greengrocery'}, {'id': 8127, 'synset': 'greenhouse.n.01', 'name': 'greenhouse'}, {'id': 8128, 'synset': 'grenade.n.01', 'name': 'grenade'}, {'id': 8129, 'synset': 'grid.n.05', 'name': 'grid'}, {'id': 8130, 'synset': 'grille.n.02', 'name': 'grille'}, {'id': 8131, 'synset': 'grillroom.n.01', 'name': 'grillroom'}, {'id': 8132, 'synset': 'grinder.n.04', 'name': 'grinder'}, {'id': 8133, 'synset': 'grinding_wheel.n.01', 'name': 'grinding_wheel'}, {'id': 8134, 'synset': 'grindstone.n.01', 'name': 'grindstone'}, {'id': 8135, 'synset': 'gripsack.n.01', 'name': 'gripsack'}, {'id': 8136, 'synset': 'gristmill.n.01', 'name': 'gristmill'}, {'id': 8137, 'synset': 'grocery_store.n.01', 'name': 'grocery_store'}, {'id': 8138, 'synset': 'grogram.n.01', 'name': 'grogram'}, {'id': 8139, 'synset': 'groined_vault.n.01', 'name': 'groined_vault'}, {'id': 8140, 'synset': 'groover.n.01', 'name': 'groover'}, {'id': 8141, 'synset': 'grosgrain.n.01', 'name': 'grosgrain'}, {'id': 8142, 'synset': 'gros_point.n.01', 'name': 'gros_point'}, {'id': 8143, 'synset': 'ground.n.09', 'name': 'ground'}, {'id': 8144, 'synset': 'ground_bait.n.01', 'name': 'ground_bait'}, {'id': 8145, 'synset': 'ground_control.n.01', 'name': 'ground_control'}, {'id': 8146, 'synset': 'ground_floor.n.01', 'name': 'ground_floor'}, {'id': 8147, 'synset': 'groundsheet.n.01', 'name': 'groundsheet'}, {'id': 8148, 'synset': 'g-string.n.01', 'name': 'G-string'}, {'id': 8149, 'synset': 'guard.n.03', 'name': 'guard'}, {'id': 8150, 'synset': 'guard_boat.n.01', 'name': 'guard_boat'}, {'id': 8151, 'synset': 'guardroom.n.02', 'name': 'guardroom'}, {'id': 8152, 'synset': 'guardroom.n.01', 'name': 'guardroom'}, {'id': 8153, 'synset': 'guard_ship.n.01', 'name': 'guard_ship'}, {'id': 8154, 'synset': "guard's_van.n.01", 'name': "guard's_van"}, {'id': 8155, 'synset': 'gueridon.n.01', 'name': 'gueridon'}, {'id': 8156, 'synset': 'guarnerius.n.03', 'name': 'Guarnerius'}, {'id': 8157, 'synset': 'guesthouse.n.01', 'name': 'guesthouse'}, {'id': 8158, 'synset': 'guestroom.n.01', 'name': 'guestroom'}, {'id': 8159, 'synset': 'guidance_system.n.01', 'name': 'guidance_system'}, {'id': 8160, 'synset': 'guided_missile.n.01', 'name': 'guided_missile'}, {'id': 8161, 'synset': 'guided_missile_cruiser.n.01', 'name': 'guided_missile_cruiser'}, {'id': 8162, 'synset': 'guided_missile_frigate.n.01', 'name': 'guided_missile_frigate'}, {'id': 8163, 'synset': 'guildhall.n.01', 'name': 'guildhall'}, {'id': 8164, 'synset': 'guilloche.n.01', 'name': 'guilloche'}, {'id': 8165, 'synset': 'guillotine.n.02', 'name': 'guillotine'}, {'id': 8166, 'synset': 'guimpe.n.02', 'name': 'guimpe'}, {'id': 8167, 'synset': 'guimpe.n.01', 'name': 'guimpe'}, {'id': 8168, 'synset': 'guitar_pick.n.01', 'name': 'guitar_pick'}, {'id': 8169, 'synset': 'gulag.n.01', 'name': 'gulag'}, {'id': 8170, 'synset': 'gunboat.n.01', 'name': 'gunboat'}, {'id': 8171, 'synset': 'gun_carriage.n.01', 'name': 'gun_carriage'}, {'id': 8172, 'synset': 'gun_case.n.01', 'name': 'gun_case'}, {'id': 8173, 'synset': 'gun_emplacement.n.01', 'name': 'gun_emplacement'}, {'id': 8174, 'synset': 'gun_enclosure.n.01', 'name': 'gun_enclosure'}, {'id': 8175, 'synset': 'gunlock.n.01', 'name': 'gunlock'}, {'id': 8176, 'synset': 'gunnery.n.01', 'name': 'gunnery'}, {'id': 8177, 'synset': 'gunnysack.n.01', 'name': 'gunnysack'}, {'id': 8178, 'synset': 'gun_pendulum.n.01', 'name': 'gun_pendulum'}, {'id': 8179, 'synset': 'gun_room.n.01', 'name': 'gun_room'}, {'id': 8180, 'synset': 'gunsight.n.01', 'name': 'gunsight'}, {'id': 8181, 'synset': 'gun_trigger.n.01', 'name': 'gun_trigger'}, {'id': 8182, 'synset': 'gurney.n.01', 'name': 'gurney'}, {'id': 8183, 'synset': 'gusher.n.01', 'name': 'gusher'}, {'id': 8184, 'synset': 'gusset.n.03', 'name': 'gusset'}, {'id': 8185, 'synset': 'gusset.n.02', 'name': 'gusset'}, {'id': 8186, 'synset': 'guy.n.03', 'name': 'guy'}, {'id': 8187, 'synset': 'gymnastic_apparatus.n.01', 'name': 'gymnastic_apparatus'}, {'id': 8188, 'synset': 'gym_shoe.n.01', 'name': 'gym_shoe'}, {'id': 8189, 'synset': 'gym_suit.n.01', 'name': 'gym_suit'}, {'id': 8190, 'synset': 'gymslip.n.01', 'name': 'gymslip'}, {'id': 8191, 'synset': 'gypsy_cab.n.01', 'name': 'gypsy_cab'}, {'id': 8192, 'synset': 'gyrocompass.n.01', 'name': 'gyrocompass'}, {'id': 8193, 'synset': 'gyroscope.n.01', 'name': 'gyroscope'}, {'id': 8194, 'synset': 'gyrostabilizer.n.01', 'name': 'gyrostabilizer'}, {'id': 8195, 'synset': 'habergeon.n.01', 'name': 'habergeon'}, {'id': 8196, 'synset': 'habit.n.03', 'name': 'habit'}, {'id': 8197, 'synset': 'habit.n.05', 'name': 'habit'}, {'id': 8198, 'synset': 'hacienda.n.02', 'name': 'hacienda'}, {'id': 8199, 'synset': 'hacksaw.n.01', 'name': 'hacksaw'}, {'id': 8200, 'synset': 'haft.n.01', 'name': 'haft'}, {'id': 8201, 'synset': 'haircloth.n.01', 'name': 'haircloth'}, {'id': 8202, 'synset': 'hairdressing.n.01', 'name': 'hairdressing'}, {'id': 8203, 'synset': 'hairpiece.n.01', 'name': 'hairpiece'}, {'id': 8204, 'synset': 'hair_shirt.n.01', 'name': 'hair_shirt'}, {'id': 8205, 'synset': 'hair_slide.n.01', 'name': 'hair_slide'}, {'id': 8206, 'synset': 'hair_spray.n.01', 'name': 'hair_spray'}, {'id': 8207, 'synset': 'hairspring.n.01', 'name': 'hairspring'}, {'id': 8208, 'synset': 'hair_trigger.n.01', 'name': 'hair_trigger'}, {'id': 8209, 'synset': 'halberd.n.01', 'name': 'halberd'}, {'id': 8210, 'synset': 'half_binding.n.01', 'name': 'half_binding'}, {'id': 8211, 'synset': 'half_hatchet.n.01', 'name': 'half_hatchet'}, {'id': 8212, 'synset': 'half_hitch.n.01', 'name': 'half_hitch'}, {'id': 8213, 'synset': 'half_track.n.01', 'name': 'half_track'}, {'id': 8214, 'synset': 'hall.n.13', 'name': 'hall'}, {'id': 8215, 'synset': 'hall.n.03', 'name': 'hall'}, {'id': 8216, 'synset': 'hall.n.12', 'name': 'hall'}, {'id': 8217, 'synset': 'hall_of_fame.n.01', 'name': 'Hall_of_Fame'}, {'id': 8218, 'synset': 'hall_of_residence.n.01', 'name': 'hall_of_residence'}, {'id': 8219, 'synset': 'hallstand.n.01', 'name': 'hallstand'}, {'id': 8220, 'synset': 'halter.n.01', 'name': 'halter'}, {'id': 8221, 'synset': 'hame.n.01', 'name': 'hame'}, {'id': 8222, 'synset': 'hammer.n.07', 'name': 'hammer'}, {'id': 8223, 'synset': 'hammer.n.05', 'name': 'hammer'}, {'id': 8224, 'synset': 'hammerhead.n.02', 'name': 'hammerhead'}, {'id': 8225, 'synset': 'hand.n.08', 'name': 'hand'}, {'id': 8226, 'synset': 'handball.n.01', 'name': 'handball'}, {'id': 8227, 'synset': 'handbarrow.n.01', 'name': 'handbarrow'}, {'id': 8228, 'synset': 'handbell.n.01', 'name': 'handbell'}, {'id': 8229, 'synset': 'handbow.n.01', 'name': 'handbow'}, {'id': 8230, 'synset': 'hand_brake.n.01', 'name': 'hand_brake'}, {'id': 8231, 'synset': 'hand_calculator.n.01', 'name': 'hand_calculator'}, {'id': 8232, 'synset': 'handcar.n.01', 'name': 'handcar'}, {'id': 8233, 'synset': 'hand_cream.n.01', 'name': 'hand_cream'}, {'id': 8234, 'synset': 'hand_drill.n.01', 'name': 'hand_drill'}, {'id': 8235, 'synset': 'hand_glass.n.02', 'name': 'hand_glass'}, {'id': 8236, 'synset': 'hand_grenade.n.01', 'name': 'hand_grenade'}, {'id': 8237, 'synset': 'hand-held_computer.n.01', 'name': 'hand-held_computer'}, {'id': 8238, 'synset': 'handhold.n.01', 'name': 'handhold'}, {'id': 8239, 'synset': 'handlebar.n.01', 'name': 'handlebar'}, {'id': 8240, 'synset': 'handloom.n.01', 'name': 'handloom'}, {'id': 8241, 'synset': 'hand_lotion.n.01', 'name': 'hand_lotion'}, {'id': 8242, 'synset': 'hand_luggage.n.01', 'name': 'hand_luggage'}, {'id': 8243, 'synset': 'hand-me-down.n.01', 'name': 'hand-me-down'}, {'id': 8244, 'synset': 'hand_mower.n.01', 'name': 'hand_mower'}, {'id': 8245, 'synset': 'hand_pump.n.01', 'name': 'hand_pump'}, {'id': 8246, 'synset': 'handrest.n.01', 'name': 'handrest'}, {'id': 8247, 'synset': 'handset.n.01', 'name': 'handset'}, {'id': 8248, 'synset': 'hand_shovel.n.01', 'name': 'hand_shovel'}, {'id': 8249, 'synset': 'handspike.n.01', 'name': 'handspike'}, {'id': 8250, 'synset': 'handstamp.n.01', 'name': 'handstamp'}, {'id': 8251, 'synset': 'hand_throttle.n.01', 'name': 'hand_throttle'}, {'id': 8252, 'synset': 'hand_tool.n.01', 'name': 'hand_tool'}, {'id': 8253, 'synset': 'hand_truck.n.01', 'name': 'hand_truck'}, {'id': 8254, 'synset': 'handwear.n.01', 'name': 'handwear'}, {'id': 8255, 'synset': 'handwheel.n.02', 'name': 'handwheel'}, {'id': 8256, 'synset': 'handwheel.n.01', 'name': 'handwheel'}, {'id': 8257, 'synset': 'hangar_queen.n.01', 'name': 'hangar_queen'}, {'id': 8258, 'synset': 'hanger.n.02', 'name': 'hanger'}, {'id': 8259, 'synset': 'hang_glider.n.02', 'name': 'hang_glider'}, {'id': 8260, 'synset': "hangman's_rope.n.01", 'name': "hangman's_rope"}, {'id': 8261, 'synset': 'hank.n.01', 'name': 'hank'}, {'id': 8262, 'synset': 'hansom.n.01', 'name': 'hansom'}, {'id': 8263, 'synset': 'harbor.n.02', 'name': 'harbor'}, {'id': 8264, 'synset': 'hard_disc.n.01', 'name': 'hard_disc'}, {'id': 8265, 'synset': 'hard_hat.n.02', 'name': 'hard_hat'}, {'id': 8266, 'synset': 'hardtop.n.01', 'name': 'hardtop'}, {'id': 8267, 'synset': 'hardware.n.02', 'name': 'hardware'}, {'id': 8268, 'synset': 'hardware_store.n.01', 'name': 'hardware_store'}, {'id': 8269, 'synset': 'harmonica.n.01', 'name': 'harmonica'}, {'id': 8270, 'synset': 'harness.n.02', 'name': 'harness'}, {'id': 8271, 'synset': 'harness.n.01', 'name': 'harness'}, {'id': 8272, 'synset': 'harp.n.01', 'name': 'harp'}, {'id': 8273, 'synset': 'harp.n.02', 'name': 'harp'}, {'id': 8274, 'synset': 'harpoon.n.01', 'name': 'harpoon'}, {'id': 8275, 'synset': 'harpoon_gun.n.01', 'name': 'harpoon_gun'}, {'id': 8276, 'synset': 'harpoon_log.n.01', 'name': 'harpoon_log'}, {'id': 8277, 'synset': 'harpsichord.n.01', 'name': 'harpsichord'}, {'id': 8278, 'synset': 'harris_tweed.n.01', 'name': 'Harris_Tweed'}, {'id': 8279, 'synset': 'harrow.n.01', 'name': 'harrow'}, {'id': 8280, 'synset': 'harvester.n.02', 'name': 'harvester'}, {'id': 8281, 'synset': 'hash_house.n.01', 'name': 'hash_house'}, {'id': 8282, 'synset': 'hasp.n.01', 'name': 'hasp'}, {'id': 8283, 'synset': 'hatch.n.03', 'name': 'hatch'}, {'id': 8284, 'synset': 'hatchback.n.02', 'name': 'hatchback'}, {'id': 8285, 'synset': 'hatchback.n.01', 'name': 'hatchback'}, {'id': 8286, 'synset': 'hatchel.n.01', 'name': 'hatchel'}, {'id': 8287, 'synset': 'hatchet.n.02', 'name': 'hatchet'}, {'id': 8288, 'synset': 'hatpin.n.01', 'name': 'hatpin'}, {'id': 8289, 'synset': 'hauberk.n.01', 'name': 'hauberk'}, {'id': 8290, 'synset': 'hawaiian_guitar.n.01', 'name': 'Hawaiian_guitar'}, {'id': 8291, 'synset': 'hawse.n.01', 'name': 'hawse'}, {'id': 8292, 'synset': 'hawser.n.01', 'name': 'hawser'}, {'id': 8293, 'synset': 'hawser_bend.n.01', 'name': 'hawser_bend'}, {'id': 8294, 'synset': 'hay_bale.n.01', 'name': 'hay_bale'}, {'id': 8295, 'synset': 'hayfork.n.01', 'name': 'hayfork'}, {'id': 8296, 'synset': 'hayloft.n.01', 'name': 'hayloft'}, {'id': 8297, 'synset': 'haymaker.n.01', 'name': 'haymaker'}, {'id': 8298, 'synset': 'hayrack.n.02', 'name': 'hayrack'}, {'id': 8299, 'synset': 'hayrack.n.01', 'name': 'hayrack'}, {'id': 8300, 'synset': 'hazard.n.03', 'name': 'hazard'}, {'id': 8301, 'synset': 'head.n.31', 'name': 'head'}, {'id': 8302, 'synset': 'head.n.30', 'name': 'head'}, {'id': 8303, 'synset': 'head.n.29', 'name': 'head'}, {'id': 8304, 'synset': 'headdress.n.01', 'name': 'headdress'}, {'id': 8305, 'synset': 'header.n.05', 'name': 'header'}, {'id': 8306, 'synset': 'header.n.04', 'name': 'header'}, {'id': 8307, 'synset': 'header.n.03', 'name': 'header'}, {'id': 8308, 'synset': 'header.n.02', 'name': 'header'}, {'id': 8309, 'synset': 'headfast.n.01', 'name': 'headfast'}, {'id': 8310, 'synset': 'head_gasket.n.01', 'name': 'head_gasket'}, {'id': 8311, 'synset': 'head_gate.n.02', 'name': 'head_gate'}, {'id': 8312, 'synset': 'headgear.n.03', 'name': 'headgear'}, {'id': 8313, 'synset': 'headpiece.n.02', 'name': 'headpiece'}, {'id': 8314, 'synset': 'headpin.n.01', 'name': 'headpin'}, {'id': 8315, 'synset': 'headquarters.n.01', 'name': 'headquarters'}, {'id': 8316, 'synset': 'headrace.n.01', 'name': 'headrace'}, {'id': 8317, 'synset': 'headrest.n.02', 'name': 'headrest'}, {'id': 8318, 'synset': 'headsail.n.01', 'name': 'headsail'}, {'id': 8319, 'synset': 'head_shop.n.01', 'name': 'head_shop'}, {'id': 8320, 'synset': 'headstock.n.01', 'name': 'headstock'}, {'id': 8321, 'synset': 'health_spa.n.01', 'name': 'health_spa'}, {'id': 8322, 'synset': 'hearing_aid.n.02', 'name': 'hearing_aid'}, {'id': 8323, 'synset': 'hearing_aid.n.01', 'name': 'hearing_aid'}, {'id': 8324, 'synset': 'hearse.n.01', 'name': 'hearse'}, {'id': 8325, 'synset': 'hearth.n.02', 'name': 'hearth'}, {'id': 8326, 'synset': 'hearthrug.n.01', 'name': 'hearthrug'}, {'id': 8327, 'synset': 'heart-lung_machine.n.01', 'name': 'heart-lung_machine'}, {'id': 8328, 'synset': 'heat_engine.n.01', 'name': 'heat_engine'}, {'id': 8329, 'synset': 'heat_exchanger.n.01', 'name': 'heat_exchanger'}, {'id': 8330, 'synset': 'heating_pad.n.01', 'name': 'heating_pad'}, {'id': 8331, 'synset': 'heat_lamp.n.01', 'name': 'heat_lamp'}, {'id': 8332, 'synset': 'heat_pump.n.01', 'name': 'heat_pump'}, {'id': 8333, 'synset': 'heat-seeking_missile.n.01', 'name': 'heat-seeking_missile'}, {'id': 8334, 'synset': 'heat_shield.n.01', 'name': 'heat_shield'}, {'id': 8335, 'synset': 'heat_sink.n.01', 'name': 'heat_sink'}, {'id': 8336, 'synset': 'heaume.n.01', 'name': 'heaume'}, {'id': 8337, 'synset': 'heaver.n.01', 'name': 'heaver'}, {'id': 8338, 'synset': 'heavier-than-air_craft.n.01', 'name': 'heavier-than-air_craft'}, {'id': 8339, 'synset': 'heckelphone.n.01', 'name': 'heckelphone'}, {'id': 8340, 'synset': 'hectograph.n.01', 'name': 'hectograph'}, {'id': 8341, 'synset': 'hedge.n.01', 'name': 'hedge'}, {'id': 8342, 'synset': 'hedge_trimmer.n.01', 'name': 'hedge_trimmer'}, {'id': 8343, 'synset': 'helicon.n.01', 'name': 'helicon'}, {'id': 8344, 'synset': 'heliograph.n.01', 'name': 'heliograph'}, {'id': 8345, 'synset': 'heliometer.n.01', 'name': 'heliometer'}, {'id': 8346, 'synset': 'helm.n.01', 'name': 'helm'}, {'id': 8347, 'synset': 'helmet.n.01', 'name': 'helmet'}, {'id': 8348, 'synset': 'hematocrit.n.02', 'name': 'hematocrit'}, {'id': 8349, 'synset': 'hemming-stitch.n.01', 'name': 'hemming-stitch'}, {'id': 8350, 'synset': 'hemostat.n.01', 'name': 'hemostat'}, {'id': 8351, 'synset': 'hemstitch.n.01', 'name': 'hemstitch'}, {'id': 8352, 'synset': 'henroost.n.01', 'name': 'henroost'}, {'id': 8353, 'synset': 'heraldry.n.02', 'name': 'heraldry'}, {'id': 8354, 'synset': 'hermitage.n.01', 'name': 'hermitage'}, {'id': 8355, 'synset': 'herringbone.n.01', 'name': 'herringbone'}, {'id': 8356, 'synset': 'herringbone.n.02', 'name': 'herringbone'}, {'id': 8357, 'synset': 'herschelian_telescope.n.01', 'name': 'Herschelian_telescope'}, {'id': 8358, 'synset': 'hessian_boot.n.01', 'name': 'Hessian_boot'}, {'id': 8359, 'synset': 'heterodyne_receiver.n.01', 'name': 'heterodyne_receiver'}, {'id': 8360, 'synset': 'hibachi.n.01', 'name': 'hibachi'}, {'id': 8361, 'synset': 'hideaway.n.02', 'name': 'hideaway'}, {'id': 8362, 'synset': 'hi-fi.n.01', 'name': 'hi-fi'}, {'id': 8363, 'synset': 'high_altar.n.01', 'name': 'high_altar'}, {'id': 8364, 'synset': 'high-angle_gun.n.01', 'name': 'high-angle_gun'}, {'id': 8365, 'synset': 'highball_glass.n.01', 'name': 'highball_glass'}, {'id': 8366, 'synset': 'highboard.n.01', 'name': 'highboard'}, {'id': 8367, 'synset': 'highboy.n.01', 'name': 'highboy'}, {'id': 8368, 'synset': 'high_gear.n.01', 'name': 'high_gear'}, {'id': 8369, 'synset': 'high-hat_cymbal.n.01', 'name': 'high-hat_cymbal'}, {'id': 8370, 'synset': 'highlighter.n.02', 'name': 'highlighter'}, {'id': 8371, 'synset': 'highlighter.n.01', 'name': 'highlighter'}, {'id': 8372, 'synset': 'high-pass_filter.n.01', 'name': 'high-pass_filter'}, {'id': 8373, 'synset': 'high-rise.n.01', 'name': 'high-rise'}, {'id': 8374, 'synset': 'high_table.n.01', 'name': 'high_table'}, {'id': 8375, 'synset': 'high-warp_loom.n.01', 'name': 'high-warp_loom'}, {'id': 8376, 'synset': 'hijab.n.01', 'name': 'hijab'}, {'id': 8377, 'synset': 'hinging_post.n.01', 'name': 'hinging_post'}, {'id': 8378, 'synset': 'hip_boot.n.01', 'name': 'hip_boot'}, {'id': 8379, 'synset': 'hipflask.n.01', 'name': 'hipflask'}, {'id': 8380, 'synset': 'hip_pad.n.01', 'name': 'hip_pad'}, {'id': 8381, 'synset': 'hip_pocket.n.01', 'name': 'hip_pocket'}, {'id': 8382, 'synset': 'hippodrome.n.01', 'name': 'hippodrome'}, {'id': 8383, 'synset': 'hip_roof.n.01', 'name': 'hip_roof'}, {'id': 8384, 'synset': 'hitch.n.05', 'name': 'hitch'}, {'id': 8385, 'synset': 'hitch.n.04', 'name': 'hitch'}, {'id': 8386, 'synset': 'hitching_post.n.01', 'name': 'hitching_post'}, {'id': 8387, 'synset': 'hitchrack.n.01', 'name': 'hitchrack'}, {'id': 8388, 'synset': 'hob.n.03', 'name': 'hob'}, {'id': 8389, 'synset': 'hobble_skirt.n.01', 'name': 'hobble_skirt'}, {'id': 8390, 'synset': 'hockey_skate.n.01', 'name': 'hockey_skate'}, {'id': 8391, 'synset': 'hod.n.01', 'name': 'hod'}, {'id': 8392, 'synset': 'hodoscope.n.01', 'name': 'hodoscope'}, {'id': 8393, 'synset': 'hoe.n.01', 'name': 'hoe'}, {'id': 8394, 'synset': 'hoe_handle.n.01', 'name': 'hoe_handle'}, {'id': 8395, 'synset': 'hogshead.n.02', 'name': 'hogshead'}, {'id': 8396, 'synset': 'hoist.n.01', 'name': 'hoist'}, {'id': 8397, 'synset': 'hold.n.07', 'name': 'hold'}, {'id': 8398, 'synset': 'holder.n.01', 'name': 'holder'}, {'id': 8399, 'synset': 'holding_cell.n.01', 'name': 'holding_cell'}, {'id': 8400, 'synset': 'holding_device.n.01', 'name': 'holding_device'}, {'id': 8401, 'synset': 'holding_pen.n.01', 'name': 'holding_pen'}, {'id': 8402, 'synset': 'hollowware.n.01', 'name': 'hollowware'}, {'id': 8403, 'synset': 'holster.n.01', 'name': 'holster'}, {'id': 8404, 'synset': 'holster.n.02', 'name': 'holster'}, {'id': 8405, 'synset': 'holy_of_holies.n.02', 'name': 'holy_of_holies'}, {'id': 8406, 'synset': 'home.n.09', 'name': 'home'}, {'id': 8407, 'synset': 'home_appliance.n.01', 'name': 'home_appliance'}, {'id': 8408, 'synset': 'home_computer.n.01', 'name': 'home_computer'}, {'id': 8409, 'synset': 'home_room.n.01', 'name': 'home_room'}, {'id': 8410, 'synset': 'homespun.n.01', 'name': 'homespun'}, {'id': 8411, 'synset': 'homestead.n.03', 'name': 'homestead'}, {'id': 8412, 'synset': 'home_theater.n.01', 'name': 'home_theater'}, {'id': 8413, 'synset': 'homing_torpedo.n.01', 'name': 'homing_torpedo'}, {'id': 8414, 'synset': 'hone.n.01', 'name': 'hone'}, {'id': 8415, 'synset': 'honeycomb.n.02', 'name': 'honeycomb'}, {'id': 8416, 'synset': 'hood.n.09', 'name': 'hood'}, {'id': 8417, 'synset': 'hood.n.08', 'name': 'hood'}, {'id': 8418, 'synset': 'hood.n.07', 'name': 'hood'}, {'id': 8419, 'synset': 'hood.n.05', 'name': 'hood'}, {'id': 8420, 'synset': 'hood_latch.n.01', 'name': 'hood_latch'}, {'id': 8421, 'synset': 'hook.n.04', 'name': 'hook'}, {'id': 8422, 'synset': 'hook.n.01', 'name': 'hook'}, {'id': 8423, 'synset': 'hook_and_eye.n.01', 'name': 'hook_and_eye'}, {'id': 8424, 'synset': 'hookup.n.02', 'name': 'hookup'}, {'id': 8425, 'synset': 'hookup.n.01', 'name': 'hookup'}, {'id': 8426, 'synset': 'hook_wrench.n.01', 'name': 'hook_wrench'}, {'id': 8427, 'synset': 'hoopskirt.n.01', 'name': 'hoopskirt'}, {'id': 8428, 'synset': 'hoosegow.n.01', 'name': 'hoosegow'}, {'id': 8429, 'synset': 'hoover.n.04', 'name': 'Hoover'}, {'id': 8430, 'synset': 'hope_chest.n.01', 'name': 'hope_chest'}, {'id': 8431, 'synset': 'hopper.n.01', 'name': 'hopper'}, {'id': 8432, 'synset': 'hopsacking.n.01', 'name': 'hopsacking'}, {'id': 8433, 'synset': 'horizontal_bar.n.01', 'name': 'horizontal_bar'}, {'id': 8434, 'synset': 'horizontal_stabilizer.n.01', 'name': 'horizontal_stabilizer'}, {'id': 8435, 'synset': 'horizontal_tail.n.01', 'name': 'horizontal_tail'}, {'id': 8436, 'synset': 'horn.n.09', 'name': 'horn'}, {'id': 8437, 'synset': 'horn.n.01', 'name': 'horn'}, {'id': 8438, 'synset': 'horn.n.08', 'name': 'horn'}, {'id': 8439, 'synset': 'horn_button.n.01', 'name': 'horn_button'}, {'id': 8440, 'synset': 'hornpipe.n.03', 'name': 'hornpipe'}, {'id': 8441, 'synset': 'horse.n.02', 'name': 'horse'}, {'id': 8442, 'synset': 'horsebox.n.01', 'name': 'horsebox'}, {'id': 8443, 'synset': 'horsecar.n.01', 'name': 'horsecar'}, {'id': 8444, 'synset': 'horse_cart.n.01', 'name': 'horse_cart'}, {'id': 8445, 'synset': 'horsecloth.n.01', 'name': 'horsecloth'}, {'id': 8446, 'synset': 'horse-drawn_vehicle.n.01', 'name': 'horse-drawn_vehicle'}, {'id': 8447, 'synset': 'horsehair.n.02', 'name': 'horsehair'}, {'id': 8448, 'synset': 'horsehair_wig.n.01', 'name': 'horsehair_wig'}, {'id': 8449, 'synset': 'horseless_carriage.n.01', 'name': 'horseless_carriage'}, {'id': 8450, 'synset': 'horse_pistol.n.01', 'name': 'horse_pistol'}, {'id': 8451, 'synset': 'horseshoe.n.02', 'name': 'horseshoe'}, {'id': 8452, 'synset': 'horseshoe.n.01', 'name': 'horseshoe'}, {'id': 8453, 'synset': 'horse-trail.n.01', 'name': 'horse-trail'}, {'id': 8454, 'synset': 'horsewhip.n.01', 'name': 'horsewhip'}, {'id': 8455, 'synset': 'hose.n.02', 'name': 'hose'}, {'id': 8456, 'synset': 'hosiery.n.01', 'name': 'hosiery'}, {'id': 8457, 'synset': 'hospice.n.01', 'name': 'hospice'}, {'id': 8458, 'synset': 'hospital.n.01', 'name': 'hospital'}, {'id': 8459, 'synset': 'hospital_bed.n.01', 'name': 'hospital_bed'}, {'id': 8460, 'synset': 'hospital_room.n.01', 'name': 'hospital_room'}, {'id': 8461, 'synset': 'hospital_ship.n.01', 'name': 'hospital_ship'}, {'id': 8462, 'synset': 'hospital_train.n.01', 'name': 'hospital_train'}, {'id': 8463, 'synset': 'hostel.n.02', 'name': 'hostel'}, {'id': 8464, 'synset': 'hostel.n.01', 'name': 'hostel'}, {'id': 8465, 'synset': 'hotel.n.01', 'name': 'hotel'}, {'id': 8466, 'synset': 'hotel-casino.n.02', 'name': 'hotel-casino'}, {'id': 8467, 'synset': 'hotel-casino.n.01', 'name': 'hotel-casino'}, {'id': 8468, 'synset': 'hotel_room.n.01', 'name': 'hotel_room'}, {'id': 8469, 'synset': 'hot_line.n.01', 'name': 'hot_line'}, {'id': 8470, 'synset': 'hot_pants.n.02', 'name': 'hot_pants'}, {'id': 8471, 'synset': 'hot_rod.n.01', 'name': 'hot_rod'}, {'id': 8472, 'synset': 'hot_spot.n.03', 'name': 'hot_spot'}, {'id': 8473, 'synset': 'hot_tub.n.01', 'name': 'hot_tub'}, {'id': 8474, 'synset': 'hot-water_bottle.n.01', 'name': 'hot-water_bottle'}, {'id': 8475, 'synset': 'houndstooth_check.n.01', 'name': 'houndstooth_check'}, {'id': 8476, 'synset': 'hour_hand.n.01', 'name': 'hour_hand'}, {'id': 8477, 'synset': 'house.n.01', 'name': 'house'}, {'id': 8478, 'synset': 'house.n.12', 'name': 'house'}, {'id': 8479, 'synset': 'houselights.n.01', 'name': 'houselights'}, {'id': 8480, 'synset': 'house_of_cards.n.02', 'name': 'house_of_cards'}, {'id': 8481, 'synset': 'house_of_correction.n.01', 'name': 'house_of_correction'}, {'id': 8482, 'synset': 'house_paint.n.01', 'name': 'house_paint'}, {'id': 8483, 'synset': 'housetop.n.01', 'name': 'housetop'}, {'id': 8484, 'synset': 'housing.n.01', 'name': 'housing'}, {'id': 8485, 'synset': 'hovel.n.01', 'name': 'hovel'}, {'id': 8486, 'synset': 'hovercraft.n.01', 'name': 'hovercraft'}, {'id': 8487, 'synset': 'howdah.n.01', 'name': 'howdah'}, {'id': 8488, 'synset': 'huarache.n.01', 'name': 'huarache'}, {'id': 8489, 'synset': 'hub-and-spoke.n.01', 'name': 'hub-and-spoke'}, {'id': 8490, 'synset': 'hubcap.n.01', 'name': 'hubcap'}, {'id': 8491, 'synset': 'huck.n.01', 'name': 'huck'}, {'id': 8492, 'synset': 'hug-me-tight.n.01', 'name': 'hug-me-tight'}, {'id': 8493, 'synset': 'hula-hoop.n.01', 'name': 'hula-hoop'}, {'id': 8494, 'synset': 'hulk.n.02', 'name': 'hulk'}, {'id': 8495, 'synset': 'hull.n.06', 'name': 'hull'}, {'id': 8496, 'synset': 'humeral_veil.n.01', 'name': 'humeral_veil'}, {'id': 8497, 'synset': 'humvee.n.01', 'name': 'Humvee'}, {'id': 8498, 'synset': 'hunter.n.04', 'name': 'hunter'}, {'id': 8499, 'synset': 'hunting_knife.n.01', 'name': 'hunting_knife'}, {'id': 8500, 'synset': 'hurdle.n.01', 'name': 'hurdle'}, {'id': 8501, 'synset': 'hurricane_deck.n.01', 'name': 'hurricane_deck'}, {'id': 8502, 'synset': 'hurricane_lamp.n.01', 'name': 'hurricane_lamp'}, {'id': 8503, 'synset': 'hut.n.01', 'name': 'hut'}, {'id': 8504, 'synset': 'hutch.n.01', 'name': 'hutch'}, {'id': 8505, 'synset': 'hutment.n.01', 'name': 'hutment'}, {'id': 8506, 'synset': 'hydraulic_brake.n.01', 'name': 'hydraulic_brake'}, {'id': 8507, 'synset': 'hydraulic_press.n.01', 'name': 'hydraulic_press'}, {'id': 8508, 'synset': 'hydraulic_pump.n.01', 'name': 'hydraulic_pump'}, {'id': 8509, 'synset': 'hydraulic_system.n.01', 'name': 'hydraulic_system'}, {'id': 8510, 'synset': 'hydraulic_transmission.n.01', 'name': 'hydraulic_transmission'}, {'id': 8511, 'synset': 'hydroelectric_turbine.n.01', 'name': 'hydroelectric_turbine'}, {'id': 8512, 'synset': 'hydrofoil.n.02', 'name': 'hydrofoil'}, {'id': 8513, 'synset': 'hydrofoil.n.01', 'name': 'hydrofoil'}, {'id': 8514, 'synset': 'hydrogen_bomb.n.01', 'name': 'hydrogen_bomb'}, {'id': 8515, 'synset': 'hydrometer.n.01', 'name': 'hydrometer'}, {'id': 8516, 'synset': 'hygrodeik.n.01', 'name': 'hygrodeik'}, {'id': 8517, 'synset': 'hygrometer.n.01', 'name': 'hygrometer'}, {'id': 8518, 'synset': 'hygroscope.n.01', 'name': 'hygroscope'}, {'id': 8519, 'synset': 'hyperbaric_chamber.n.01', 'name': 'hyperbaric_chamber'}, {'id': 8520, 'synset': 'hypercoaster.n.01', 'name': 'hypercoaster'}, {'id': 8521, 'synset': 'hypermarket.n.01', 'name': 'hypermarket'}, {'id': 8522, 'synset': 'hypodermic_needle.n.01', 'name': 'hypodermic_needle'}, {'id': 8523, 'synset': 'hypodermic_syringe.n.01', 'name': 'hypodermic_syringe'}, {'id': 8524, 'synset': 'hypsometer.n.01', 'name': 'hypsometer'}, {'id': 8525, 'synset': 'hysterosalpingogram.n.01', 'name': 'hysterosalpingogram'}, {'id': 8526, 'synset': 'i-beam.n.01', 'name': 'I-beam'}, {'id': 8527, 'synset': 'ice_ax.n.01', 'name': 'ice_ax'}, {'id': 8528, 'synset': 'iceboat.n.02', 'name': 'iceboat'}, {'id': 8529, 'synset': 'icebreaker.n.01', 'name': 'icebreaker'}, {'id': 8530, 'synset': 'iced-tea_spoon.n.01', 'name': 'iced-tea_spoon'}, {'id': 8531, 'synset': 'ice_hockey_rink.n.01', 'name': 'ice_hockey_rink'}, {'id': 8532, 'synset': 'ice_machine.n.01', 'name': 'ice_machine'}, {'id': 8533, 'synset': 'icepick.n.01', 'name': 'icepick'}, {'id': 8534, 'synset': 'ice_rink.n.01', 'name': 'ice_rink'}, {'id': 8535, 'synset': 'ice_tongs.n.01', 'name': 'ice_tongs'}, {'id': 8536, 'synset': 'icetray.n.01', 'name': 'icetray'}, {'id': 8537, 'synset': 'iconoscope.n.01', 'name': 'iconoscope'}, {'id': 8538, 'synset': 'identikit.n.01', 'name': 'Identikit'}, {'id': 8539, 'synset': 'idle_pulley.n.01', 'name': 'idle_pulley'}, {'id': 8540, 'synset': 'igloo.n.01', 'name': 'igloo'}, {'id': 8541, 'synset': 'ignition_coil.n.01', 'name': 'ignition_coil'}, {'id': 8542, 'synset': 'ignition_key.n.01', 'name': 'ignition_key'}, {'id': 8543, 'synset': 'ignition_switch.n.01', 'name': 'ignition_switch'}, {'id': 8544, 'synset': 'imaret.n.01', 'name': 'imaret'}, {'id': 8545, 'synset': 'immovable_bandage.n.01', 'name': 'immovable_bandage'}, {'id': 8546, 'synset': 'impact_printer.n.01', 'name': 'impact_printer'}, {'id': 8547, 'synset': 'impeller.n.01', 'name': 'impeller'}, {'id': 8548, 'synset': 'implant.n.01', 'name': 'implant'}, {'id': 8549, 'synset': 'implement.n.01', 'name': 'implement'}, {'id': 8550, 'synset': 'impression.n.07', 'name': 'impression'}, {'id': 8551, 'synset': 'imprint.n.05', 'name': 'imprint'}, {'id': 8552, 'synset': 'improvised_explosive_device.n.01', 'name': 'improvised_explosive_device'}, {'id': 8553, 'synset': 'impulse_turbine.n.01', 'name': 'impulse_turbine'}, {'id': 8554, 'synset': 'in-basket.n.01', 'name': 'in-basket'}, {'id': 8555, 'synset': 'incendiary_bomb.n.01', 'name': 'incendiary_bomb'}, {'id': 8556, 'synset': 'incinerator.n.01', 'name': 'incinerator'}, {'id': 8557, 'synset': 'inclined_plane.n.01', 'name': 'inclined_plane'}, {'id': 8558, 'synset': 'inclinometer.n.02', 'name': 'inclinometer'}, {'id': 8559, 'synset': 'inclinometer.n.01', 'name': 'inclinometer'}, {'id': 8560, 'synset': 'incrustation.n.03', 'name': 'incrustation'}, {'id': 8561, 'synset': 'incubator.n.01', 'name': 'incubator'}, {'id': 8562, 'synset': 'index_register.n.01', 'name': 'index_register'}, {'id': 8563, 'synset': 'indiaman.n.01', 'name': 'Indiaman'}, {'id': 8564, 'synset': 'indian_club.n.01', 'name': 'Indian_club'}, {'id': 8565, 'synset': 'indicator.n.03', 'name': 'indicator'}, {'id': 8566, 'synset': 'induction_coil.n.01', 'name': 'induction_coil'}, {'id': 8567, 'synset': 'inductor.n.01', 'name': 'inductor'}, {'id': 8568, 'synset': 'industrial_watercourse.n.01', 'name': 'industrial_watercourse'}, {'id': 8569, 'synset': 'inertial_guidance_system.n.01', 'name': 'inertial_guidance_system'}, {'id': 8570, 'synset': 'inflater.n.01', 'name': 'inflater'}, {'id': 8571, 'synset': 'injector.n.01', 'name': 'injector'}, {'id': 8572, 'synset': 'ink_bottle.n.01', 'name': 'ink_bottle'}, {'id': 8573, 'synset': 'ink_eraser.n.01', 'name': 'ink_eraser'}, {'id': 8574, 'synset': 'ink-jet_printer.n.01', 'name': 'ink-jet_printer'}, {'id': 8575, 'synset': 'inkle.n.01', 'name': 'inkle'}, {'id': 8576, 'synset': 'inkstand.n.02', 'name': 'inkstand'}, {'id': 8577, 'synset': 'inkwell.n.01', 'name': 'inkwell'}, {'id': 8578, 'synset': 'inlay.n.01', 'name': 'inlay'}, {'id': 8579, 'synset': 'inside_caliper.n.01', 'name': 'inside_caliper'}, {'id': 8580, 'synset': 'insole.n.01', 'name': 'insole'}, {'id': 8581, 'synset': 'instep.n.02', 'name': 'instep'}, {'id': 8582, 'synset': 'instillator.n.01', 'name': 'instillator'}, {'id': 8583, 'synset': 'institution.n.02', 'name': 'institution'}, {'id': 8584, 'synset': 'instrument.n.01', 'name': 'instrument'}, {'id': 8585, 'synset': 'instrument_of_punishment.n.01', 'name': 'instrument_of_punishment'}, {'id': 8586, 'synset': 'instrument_of_torture.n.01', 'name': 'instrument_of_torture'}, {'id': 8587, 'synset': 'intaglio.n.02', 'name': 'intaglio'}, {'id': 8588, 'synset': 'intake_valve.n.01', 'name': 'intake_valve'}, {'id': 8589, 'synset': 'integrated_circuit.n.01', 'name': 'integrated_circuit'}, {'id': 8590, 'synset': 'integrator.n.01', 'name': 'integrator'}, {'id': 8591, 'synset': 'intelnet.n.01', 'name': 'Intelnet'}, {'id': 8592, 'synset': 'interceptor.n.01', 'name': 'interceptor'}, {'id': 8593, 'synset': 'interchange.n.01', 'name': 'interchange'}, {'id': 8594, 'synset': 'intercommunication_system.n.01', 'name': 'intercommunication_system'}, {'id': 8595, 'synset': 'intercontinental_ballistic_missile.n.01', 'name': 'intercontinental_ballistic_missile'}, {'id': 8596, 'synset': 'interface.n.04', 'name': 'interface'}, {'id': 8597, 'synset': 'interferometer.n.01', 'name': 'interferometer'}, {'id': 8598, 'synset': 'interior_door.n.01', 'name': 'interior_door'}, {'id': 8599, 'synset': 'internal-combustion_engine.n.01', 'name': 'internal-combustion_engine'}, {'id': 8600, 'synset': 'internal_drive.n.01', 'name': 'internal_drive'}, {'id': 8601, 'synset': 'internet.n.01', 'name': 'internet'}, {'id': 8602, 'synset': 'interphone.n.01', 'name': 'interphone'}, {'id': 8603, 'synset': 'interrupter.n.01', 'name': 'interrupter'}, {'id': 8604, 'synset': 'intersection.n.02', 'name': 'intersection'}, {'id': 8605, 'synset': 'interstice.n.02', 'name': 'interstice'}, {'id': 8606, 'synset': 'intraocular_lens.n.01', 'name': 'intraocular_lens'}, {'id': 8607, 'synset': 'intravenous_pyelogram.n.01', 'name': 'intravenous_pyelogram'}, {'id': 8608, 'synset': 'inverter.n.01', 'name': 'inverter'}, {'id': 8609, 'synset': 'ion_engine.n.01', 'name': 'ion_engine'}, {'id': 8610, 'synset': 'ionization_chamber.n.01', 'name': 'ionization_chamber'}, {'id': 8611, 'synset': 'video_ipod.n.01', 'name': 'video_iPod'}, {'id': 8612, 'synset': 'iron.n.02', 'name': 'iron'}, {'id': 8613, 'synset': 'iron.n.03', 'name': 'iron'}, {'id': 8614, 'synset': 'irons.n.01', 'name': 'irons'}, {'id': 8615, 'synset': 'ironclad.n.01', 'name': 'ironclad'}, {'id': 8616, 'synset': 'iron_foundry.n.01', 'name': 'iron_foundry'}, {'id': 8617, 'synset': 'iron_horse.n.01', 'name': 'iron_horse'}, {'id': 8618, 'synset': 'ironing.n.01', 'name': 'ironing'}, {'id': 8619, 'synset': 'iron_lung.n.01', 'name': 'iron_lung'}, {'id': 8620, 'synset': 'ironmongery.n.01', 'name': 'ironmongery'}, {'id': 8621, 'synset': 'ironworks.n.01', 'name': 'ironworks'}, {'id': 8622, 'synset': 'irrigation_ditch.n.01', 'name': 'irrigation_ditch'}, {'id': 8623, 'synset': 'izar.n.01', 'name': 'izar'}, {'id': 8624, 'synset': 'jabot.n.01', 'name': 'jabot'}, {'id': 8625, 'synset': 'jack.n.10', 'name': 'jack'}, {'id': 8626, 'synset': 'jack.n.07', 'name': 'jack'}, {'id': 8627, 'synset': 'jack.n.06', 'name': 'jack'}, {'id': 8628, 'synset': 'jack.n.05', 'name': 'jack'}, {'id': 8629, 'synset': 'jacket.n.02', 'name': 'jacket'}, {'id': 8630, 'synset': 'jacket.n.05', 'name': 'jacket'}, {'id': 8631, 'synset': 'jack-in-the-box.n.01', 'name': 'jack-in-the-box'}, {'id': 8632, 'synset': "jack-o'-lantern.n.02", 'name': "jack-o'-lantern"}, {'id': 8633, 'synset': 'jack_plane.n.01', 'name': 'jack_plane'}, {'id': 8634, 'synset': "jacob's_ladder.n.02", 'name': "Jacob's_ladder"}, {'id': 8635, 'synset': 'jaconet.n.01', 'name': 'jaconet'}, {'id': 8636, 'synset': 'jacquard_loom.n.01', 'name': 'Jacquard_loom'}, {'id': 8637, 'synset': 'jacquard.n.02', 'name': 'jacquard'}, {'id': 8638, 'synset': 'jag.n.03', 'name': 'jag'}, {'id': 8639, 'synset': 'jail.n.01', 'name': 'jail'}, {'id': 8640, 'synset': 'jalousie.n.02', 'name': 'jalousie'}, {'id': 8641, 'synset': 'jamb.n.01', 'name': 'jamb'}, {'id': 8642, 'synset': 'jammer.n.01', 'name': 'jammer'}, {'id': 8643, 'synset': 'jampot.n.01', 'name': 'jampot'}, {'id': 8644, 'synset': 'japan.n.04', 'name': 'japan'}, {'id': 8645, 'synset': 'jarvik_heart.n.01', 'name': 'Jarvik_heart'}, {'id': 8646, 'synset': 'jaunting_car.n.01', 'name': 'jaunting_car'}, {'id': 8647, 'synset': 'javelin.n.02', 'name': 'javelin'}, {'id': 8648, 'synset': 'jaw.n.03', 'name': 'jaw'}, {'id': 8649, 'synset': 'jaws_of_life.n.01', 'name': 'Jaws_of_Life'}, {'id': 8650, 'synset': 'jellaba.n.01', 'name': 'jellaba'}, {'id': 8651, 'synset': 'jerkin.n.01', 'name': 'jerkin'}, {'id': 8652, 'synset': 'jeroboam.n.02', 'name': 'jeroboam'}, {'id': 8653, 'synset': 'jersey.n.04', 'name': 'jersey'}, {'id': 8654, 'synset': 'jet_bridge.n.01', 'name': 'jet_bridge'}, {'id': 8655, 'synset': 'jet_engine.n.01', 'name': 'jet_engine'}, {'id': 8656, 'synset': 'jetliner.n.01', 'name': 'jetliner'}, {'id': 8657, 'synset': "jeweler's_glass.n.01", 'name': "jeweler's_glass"}, {'id': 8658, 'synset': 'jewelled_headdress.n.01', 'name': 'jewelled_headdress'}, {'id': 8659, 'synset': "jew's_harp.n.01", 'name': "jew's_harp"}, {'id': 8660, 'synset': 'jib.n.01', 'name': 'jib'}, {'id': 8661, 'synset': 'jibboom.n.01', 'name': 'jibboom'}, {'id': 8662, 'synset': 'jig.n.03', 'name': 'jig'}, {'id': 8663, 'synset': 'jig.n.02', 'name': 'jig'}, {'id': 8664, 'synset': 'jiggermast.n.01', 'name': 'jiggermast'}, {'id': 8665, 'synset': 'jigsaw.n.02', 'name': 'jigsaw'}, {'id': 8666, 'synset': 'jigsaw_puzzle.n.01', 'name': 'jigsaw_puzzle'}, {'id': 8667, 'synset': 'jinrikisha.n.01', 'name': 'jinrikisha'}, {'id': 8668, 'synset': 'jobcentre.n.01', 'name': 'jobcentre'}, {'id': 8669, 'synset': 'jodhpurs.n.01', 'name': 'jodhpurs'}, {'id': 8670, 'synset': 'jodhpur.n.01', 'name': 'jodhpur'}, {'id': 8671, 'synset': 'joinery.n.01', 'name': 'joinery'}, {'id': 8672, 'synset': 'joint.n.05', 'name': 'joint'}, {'id': 8673, 'synset': 'joint_direct_attack_munition.n.01', 'name': 'Joint_Direct_Attack_Munition'}, {'id': 8674, 'synset': 'jointer.n.01', 'name': 'jointer'}, {'id': 8675, 'synset': 'joist.n.01', 'name': 'joist'}, {'id': 8676, 'synset': 'jolly_boat.n.01', 'name': 'jolly_boat'}, {'id': 8677, 'synset': 'jorum.n.01', 'name': 'jorum'}, {'id': 8678, 'synset': 'joss_house.n.01', 'name': 'joss_house'}, {'id': 8679, 'synset': 'journal_bearing.n.01', 'name': 'journal_bearing'}, {'id': 8680, 'synset': 'journal_box.n.01', 'name': 'journal_box'}, {'id': 8681, 'synset': 'jungle_gym.n.01', 'name': 'jungle_gym'}, {'id': 8682, 'synset': 'junk.n.02', 'name': 'junk'}, {'id': 8683, 'synset': 'jug.n.01', 'name': 'jug'}, {'id': 8684, 'synset': 'jukebox.n.01', 'name': 'jukebox'}, {'id': 8685, 'synset': 'jumbojet.n.01', 'name': 'jumbojet'}, {'id': 8686, 'synset': 'jumper.n.07', 'name': 'jumper'}, {'id': 8687, 'synset': 'jumper.n.06', 'name': 'jumper'}, {'id': 8688, 'synset': 'jumper.n.05', 'name': 'jumper'}, {'id': 8689, 'synset': 'jumper.n.04', 'name': 'jumper'}, {'id': 8690, 'synset': 'jumper_cable.n.01', 'name': 'jumper_cable'}, {'id': 8691, 'synset': 'jump_seat.n.01', 'name': 'jump_seat'}, {'id': 8692, 'synset': 'jump_suit.n.02', 'name': 'jump_suit'}, {'id': 8693, 'synset': 'junction.n.01', 'name': 'junction'}, {'id': 8694, 'synset': 'junction.n.04', 'name': 'junction'}, {'id': 8695, 'synset': 'junction_barrier.n.01', 'name': 'junction_barrier'}, {'id': 8696, 'synset': 'junk_shop.n.01', 'name': 'junk_shop'}, {'id': 8697, 'synset': 'jury_box.n.01', 'name': 'jury_box'}, {'id': 8698, 'synset': 'jury_mast.n.01', 'name': 'jury_mast'}, {'id': 8699, 'synset': 'kachina.n.03', 'name': 'kachina'}, {'id': 8700, 'synset': 'kaffiyeh.n.01', 'name': 'kaffiyeh'}, {'id': 8701, 'synset': 'kalansuwa.n.01', 'name': 'kalansuwa'}, {'id': 8702, 'synset': 'kalashnikov.n.01', 'name': 'Kalashnikov'}, {'id': 8703, 'synset': 'kameez.n.01', 'name': 'kameez'}, {'id': 8704, 'synset': 'kanzu.n.01', 'name': 'kanzu'}, {'id': 8705, 'synset': 'katharometer.n.01', 'name': 'katharometer'}, {'id': 8706, 'synset': 'kazoo.n.01', 'name': 'kazoo'}, {'id': 8707, 'synset': 'keel.n.03', 'name': 'keel'}, {'id': 8708, 'synset': 'keelboat.n.01', 'name': 'keelboat'}, {'id': 8709, 'synset': 'keelson.n.01', 'name': 'keelson'}, {'id': 8710, 'synset': 'keep.n.02', 'name': 'keep'}, {'id': 8711, 'synset': 'kepi.n.01', 'name': 'kepi'}, {'id': 8712, 'synset': 'keratoscope.n.01', 'name': 'keratoscope'}, {'id': 8713, 'synset': 'kerchief.n.01', 'name': 'kerchief'}, {'id': 8714, 'synset': 'ketch.n.01', 'name': 'ketch'}, {'id': 8715, 'synset': 'kettle.n.04', 'name': 'kettle'}, {'id': 8716, 'synset': 'key.n.15', 'name': 'key'}, {'id': 8717, 'synset': 'keyboard.n.01', 'name': 'keyboard'}, {'id': 8718, 'synset': 'keyboard_buffer.n.01', 'name': 'keyboard_buffer'}, {'id': 8719, 'synset': 'keyboard_instrument.n.01', 'name': 'keyboard_instrument'}, {'id': 8720, 'synset': 'keyhole.n.01', 'name': 'keyhole'}, {'id': 8721, 'synset': 'keyhole_saw.n.01', 'name': 'keyhole_saw'}, {'id': 8722, 'synset': 'khadi.n.01', 'name': 'khadi'}, {'id': 8723, 'synset': 'khaki.n.01', 'name': 'khaki'}, {'id': 8724, 'synset': 'khakis.n.01', 'name': 'khakis'}, {'id': 8725, 'synset': 'khimar.n.01', 'name': 'khimar'}, {'id': 8726, 'synset': 'khukuri.n.01', 'name': 'khukuri'}, {'id': 8727, 'synset': 'kick_pleat.n.01', 'name': 'kick_pleat'}, {'id': 8728, 'synset': 'kicksorter.n.01', 'name': 'kicksorter'}, {'id': 8729, 'synset': 'kickstand.n.01', 'name': 'kickstand'}, {'id': 8730, 'synset': 'kick_starter.n.01', 'name': 'kick_starter'}, {'id': 8731, 'synset': 'kid_glove.n.01', 'name': 'kid_glove'}, {'id': 8732, 'synset': 'kiln.n.01', 'name': 'kiln'}, {'id': 8733, 'synset': 'kinescope.n.01', 'name': 'kinescope'}, {'id': 8734, 'synset': 'kinetoscope.n.01', 'name': 'Kinetoscope'}, {'id': 8735, 'synset': 'king.n.10', 'name': 'king'}, {'id': 8736, 'synset': 'king.n.08', 'name': 'king'}, {'id': 8737, 'synset': 'kingbolt.n.01', 'name': 'kingbolt'}, {'id': 8738, 'synset': 'king_post.n.01', 'name': 'king_post'}, {'id': 8739, 'synset': "kipp's_apparatus.n.01", 'name': "Kipp's_apparatus"}, {'id': 8740, 'synset': 'kirk.n.01', 'name': 'kirk'}, {'id': 8741, 'synset': 'kirpan.n.01', 'name': 'kirpan'}, {'id': 8742, 'synset': 'kirtle.n.02', 'name': 'kirtle'}, {'id': 8743, 'synset': 'kirtle.n.01', 'name': 'kirtle'}, {'id': 8744, 'synset': 'kit.n.02', 'name': 'kit'}, {'id': 8745, 'synset': 'kit.n.01', 'name': 'kit'}, {'id': 8746, 'synset': 'kitbag.n.01', 'name': 'kitbag'}, {'id': 8747, 'synset': 'kitchen.n.01', 'name': 'kitchen'}, {'id': 8748, 'synset': 'kitchen_appliance.n.01', 'name': 'kitchen_appliance'}, {'id': 8749, 'synset': 'kitchenette.n.01', 'name': 'kitchenette'}, {'id': 8750, 'synset': 'kitchen_utensil.n.01', 'name': 'kitchen_utensil'}, {'id': 8751, 'synset': 'kitchenware.n.01', 'name': 'kitchenware'}, {'id': 8752, 'synset': 'kite_balloon.n.01', 'name': 'kite_balloon'}, {'id': 8753, 'synset': 'klaxon.n.01', 'name': 'klaxon'}, {'id': 8754, 'synset': 'klieg_light.n.01', 'name': 'klieg_light'}, {'id': 8755, 'synset': 'klystron.n.01', 'name': 'klystron'}, {'id': 8756, 'synset': 'knee_brace.n.01', 'name': 'knee_brace'}, {'id': 8757, 'synset': 'knee-high.n.01', 'name': 'knee-high'}, {'id': 8758, 'synset': 'knee_piece.n.01', 'name': 'knee_piece'}, {'id': 8759, 'synset': 'knife.n.02', 'name': 'knife'}, {'id': 8760, 'synset': 'knife_blade.n.01', 'name': 'knife_blade'}, {'id': 8761, 'synset': 'knight.n.02', 'name': 'knight'}, {'id': 8762, 'synset': 'knit.n.01', 'name': 'knit'}, {'id': 8763, 'synset': 'knitting_machine.n.01', 'name': 'knitting_machine'}, {'id': 8764, 'synset': 'knitwear.n.01', 'name': 'knitwear'}, {'id': 8765, 'synset': 'knob.n.01', 'name': 'knob'}, {'id': 8766, 'synset': 'knob.n.04', 'name': 'knob'}, {'id': 8767, 'synset': 'knobble.n.01', 'name': 'knobble'}, {'id': 8768, 'synset': 'knobkerrie.n.01', 'name': 'knobkerrie'}, {'id': 8769, 'synset': 'knot.n.02', 'name': 'knot'}, {'id': 8770, 'synset': 'knuckle_joint.n.02', 'name': 'knuckle_joint'}, {'id': 8771, 'synset': 'kohl.n.01', 'name': 'kohl'}, {'id': 8772, 'synset': 'koto.n.01', 'name': 'koto'}, {'id': 8773, 'synset': 'kraal.n.02', 'name': 'kraal'}, {'id': 8774, 'synset': 'kremlin.n.02', 'name': 'kremlin'}, {'id': 8775, 'synset': 'kris.n.01', 'name': 'kris'}, {'id': 8776, 'synset': 'krummhorn.n.01', 'name': 'krummhorn'}, {'id': 8777, 'synset': "kundt's_tube.n.01", 'name': "Kundt's_tube"}, {'id': 8778, 'synset': 'kurdistan.n.02', 'name': 'Kurdistan'}, {'id': 8779, 'synset': 'kurta.n.01', 'name': 'kurta'}, {'id': 8780, 'synset': 'kylix.n.01', 'name': 'kylix'}, {'id': 8781, 'synset': 'kymograph.n.01', 'name': 'kymograph'}, {'id': 8782, 'synset': 'lab_bench.n.01', 'name': 'lab_bench'}, {'id': 8783, 'synset': 'lace.n.02', 'name': 'lace'}, {'id': 8784, 'synset': 'lacquer.n.02', 'name': 'lacquer'}, {'id': 8785, 'synset': 'lacquerware.n.01', 'name': 'lacquerware'}, {'id': 8786, 'synset': 'lacrosse_ball.n.01', 'name': 'lacrosse_ball'}, {'id': 8787, 'synset': 'ladder-back.n.02', 'name': 'ladder-back'}, {'id': 8788, 'synset': 'ladder-back.n.01', 'name': 'ladder-back'}, {'id': 8789, 'synset': 'ladder_truck.n.01', 'name': 'ladder_truck'}, {'id': 8790, 'synset': "ladies'_room.n.01", 'name': "ladies'_room"}, {'id': 8791, 'synset': 'lady_chapel.n.01', 'name': 'lady_chapel'}, {'id': 8792, 'synset': 'lagerphone.n.01', 'name': 'lagerphone'}, {'id': 8793, 'synset': 'lag_screw.n.01', 'name': 'lag_screw'}, {'id': 8794, 'synset': 'lake_dwelling.n.01', 'name': 'lake_dwelling'}, {'id': 8795, 'synset': 'lally.n.01', 'name': 'lally'}, {'id': 8796, 'synset': 'lamasery.n.01', 'name': 'lamasery'}, {'id': 8797, 'synset': 'lambrequin.n.02', 'name': 'lambrequin'}, {'id': 8798, 'synset': 'lame.n.02', 'name': 'lame'}, {'id': 8799, 'synset': 'laminar_flow_clean_room.n.01', 'name': 'laminar_flow_clean_room'}, {'id': 8800, 'synset': 'laminate.n.01', 'name': 'laminate'}, {'id': 8801, 'synset': 'lamination.n.01', 'name': 'lamination'}, {'id': 8802, 'synset': 'lamp.n.01', 'name': 'lamp'}, {'id': 8803, 'synset': 'lamp_house.n.01', 'name': 'lamp_house'}, {'id': 8804, 'synset': 'lanai.n.02', 'name': 'lanai'}, {'id': 8805, 'synset': 'lancet_arch.n.01', 'name': 'lancet_arch'}, {'id': 8806, 'synset': 'lancet_window.n.01', 'name': 'lancet_window'}, {'id': 8807, 'synset': 'landau.n.02', 'name': 'landau'}, {'id': 8808, 'synset': 'lander.n.02', 'name': 'lander'}, {'id': 8809, 'synset': 'landing_craft.n.01', 'name': 'landing_craft'}, {'id': 8810, 'synset': 'landing_flap.n.01', 'name': 'landing_flap'}, {'id': 8811, 'synset': 'landing_gear.n.01', 'name': 'landing_gear'}, {'id': 8812, 'synset': 'landing_net.n.01', 'name': 'landing_net'}, {'id': 8813, 'synset': 'landing_skid.n.01', 'name': 'landing_skid'}, {'id': 8814, 'synset': 'land_line.n.01', 'name': 'land_line'}, {'id': 8815, 'synset': 'land_mine.n.01', 'name': 'land_mine'}, {'id': 8816, 'synset': 'land_office.n.01', 'name': 'land_office'}, {'id': 8817, 'synset': 'lanolin.n.02', 'name': 'lanolin'}, {'id': 8818, 'synset': 'lanyard.n.01', 'name': 'lanyard'}, {'id': 8819, 'synset': 'lap.n.03', 'name': 'lap'}, {'id': 8820, 'synset': 'laparoscope.n.01', 'name': 'laparoscope'}, {'id': 8821, 'synset': 'lapboard.n.01', 'name': 'lapboard'}, {'id': 8822, 'synset': 'lapel.n.01', 'name': 'lapel'}, {'id': 8823, 'synset': 'lap_joint.n.01', 'name': 'lap_joint'}, {'id': 8824, 'synset': 'laryngoscope.n.01', 'name': 'laryngoscope'}, {'id': 8825, 'synset': 'laser.n.01', 'name': 'laser'}, {'id': 8826, 'synset': 'laser-guided_bomb.n.01', 'name': 'laser-guided_bomb'}, {'id': 8827, 'synset': 'laser_printer.n.01', 'name': 'laser_printer'}, {'id': 8828, 'synset': 'lash.n.02', 'name': 'lash'}, {'id': 8829, 'synset': 'lashing.n.02', 'name': 'lashing'}, {'id': 8830, 'synset': 'lasso.n.02', 'name': 'lasso'}, {'id': 8831, 'synset': 'latch.n.01', 'name': 'latch'}, {'id': 8832, 'synset': 'latchet.n.01', 'name': 'latchet'}, {'id': 8833, 'synset': 'latchkey.n.01', 'name': 'latchkey'}, {'id': 8834, 'synset': 'lateen.n.01', 'name': 'lateen'}, {'id': 8835, 'synset': 'latex_paint.n.01', 'name': 'latex_paint'}, {'id': 8836, 'synset': 'lath.n.01', 'name': 'lath'}, {'id': 8837, 'synset': 'lathe.n.01', 'name': 'lathe'}, {'id': 8838, 'synset': 'latrine.n.01', 'name': 'latrine'}, {'id': 8839, 'synset': 'lattice.n.03', 'name': 'lattice'}, {'id': 8840, 'synset': 'launch.n.01', 'name': 'launch'}, {'id': 8841, 'synset': 'launcher.n.01', 'name': 'launcher'}, {'id': 8842, 'synset': 'laundry.n.01', 'name': 'laundry'}, {'id': 8843, 'synset': 'laundry_cart.n.01', 'name': 'laundry_cart'}, {'id': 8844, 'synset': 'laundry_truck.n.01', 'name': 'laundry_truck'}, {'id': 8845, 'synset': 'lavalava.n.01', 'name': 'lavalava'}, {'id': 8846, 'synset': 'lavaliere.n.01', 'name': 'lavaliere'}, {'id': 8847, 'synset': 'laver.n.02', 'name': 'laver'}, {'id': 8848, 'synset': 'lawn_chair.n.01', 'name': 'lawn_chair'}, {'id': 8849, 'synset': 'lawn_furniture.n.01', 'name': 'lawn_furniture'}, {'id': 8850, 'synset': 'layette.n.01', 'name': 'layette'}, {'id': 8851, 'synset': 'lead-acid_battery.n.01', 'name': 'lead-acid_battery'}, {'id': 8852, 'synset': 'lead-in.n.02', 'name': 'lead-in'}, {'id': 8853, 'synset': 'leading_rein.n.01', 'name': 'leading_rein'}, {'id': 8854, 'synset': 'lead_pencil.n.01', 'name': 'lead_pencil'}, {'id': 8855, 'synset': 'leaf_spring.n.01', 'name': 'leaf_spring'}, {'id': 8856, 'synset': 'lean-to.n.01', 'name': 'lean-to'}, {'id': 8857, 'synset': 'lean-to_tent.n.01', 'name': 'lean-to_tent'}, {'id': 8858, 'synset': 'leash.n.01', 'name': 'leash'}, {'id': 8859, 'synset': 'leatherette.n.01', 'name': 'leatherette'}, {'id': 8860, 'synset': 'leather_strip.n.01', 'name': 'leather_strip'}, {'id': 8861, 'synset': 'leclanche_cell.n.01', 'name': 'Leclanche_cell'}, {'id': 8862, 'synset': 'lectern.n.01', 'name': 'lectern'}, {'id': 8863, 'synset': 'lecture_room.n.01', 'name': 'lecture_room'}, {'id': 8864, 'synset': 'lederhosen.n.01', 'name': 'lederhosen'}, {'id': 8865, 'synset': 'ledger_board.n.01', 'name': 'ledger_board'}, {'id': 8866, 'synset': 'leg.n.07', 'name': 'leg'}, {'id': 8867, 'synset': 'leg.n.03', 'name': 'leg'}, {'id': 8868, 'synset': 'leiden_jar.n.01', 'name': 'Leiden_jar'}, {'id': 8869, 'synset': 'leisure_wear.n.01', 'name': 'leisure_wear'}, {'id': 8870, 'synset': 'lens.n.01', 'name': 'lens'}, {'id': 8871, 'synset': 'lens.n.05', 'name': 'lens'}, {'id': 8872, 'synset': 'lens_cap.n.01', 'name': 'lens_cap'}, {'id': 8873, 'synset': 'lens_implant.n.01', 'name': 'lens_implant'}, {'id': 8874, 'synset': 'leotard.n.01', 'name': 'leotard'}, {'id': 8875, 'synset': 'letter_case.n.01', 'name': 'letter_case'}, {'id': 8876, 'synset': 'letter_opener.n.01', 'name': 'letter_opener'}, {'id': 8877, 'synset': 'levee.n.03', 'name': 'levee'}, {'id': 8878, 'synset': 'level.n.05', 'name': 'level'}, {'id': 8879, 'synset': 'lever.n.01', 'name': 'lever'}, {'id': 8880, 'synset': 'lever.n.03', 'name': 'lever'}, {'id': 8881, 'synset': 'lever.n.02', 'name': 'lever'}, {'id': 8882, 'synset': 'lever_lock.n.01', 'name': 'lever_lock'}, {'id': 8883, 'synset': "levi's.n.01", 'name': "Levi's"}, {'id': 8884, 'synset': 'liberty_ship.n.01', 'name': 'Liberty_ship'}, {'id': 8885, 'synset': 'library.n.01', 'name': 'library'}, {'id': 8886, 'synset': 'library.n.05', 'name': 'library'}, {'id': 8887, 'synset': 'lid.n.02', 'name': 'lid'}, {'id': 8888, 'synset': 'liebig_condenser.n.01', 'name': 'Liebig_condenser'}, {'id': 8889, 'synset': 'lie_detector.n.01', 'name': 'lie_detector'}, {'id': 8890, 'synset': 'lifeboat.n.01', 'name': 'lifeboat'}, {'id': 8891, 'synset': 'life_office.n.01', 'name': 'life_office'}, {'id': 8892, 'synset': 'life_preserver.n.01', 'name': 'life_preserver'}, {'id': 8893, 'synset': 'life-support_system.n.02', 'name': 'life-support_system'}, {'id': 8894, 'synset': 'life-support_system.n.01', 'name': 'life-support_system'}, {'id': 8895, 'synset': 'lifting_device.n.01', 'name': 'lifting_device'}, {'id': 8896, 'synset': 'lift_pump.n.01', 'name': 'lift_pump'}, {'id': 8897, 'synset': 'ligament.n.02', 'name': 'ligament'}, {'id': 8898, 'synset': 'ligature.n.03', 'name': 'ligature'}, {'id': 8899, 'synset': 'light.n.02', 'name': 'light'}, {'id': 8900, 'synset': 'light_arm.n.01', 'name': 'light_arm'}, {'id': 8901, 'synset': 'light_circuit.n.01', 'name': 'light_circuit'}, {'id': 8902, 'synset': 'light-emitting_diode.n.01', 'name': 'light-emitting_diode'}, {'id': 8903, 'synset': 'lighter.n.02', 'name': 'lighter'}, {'id': 8904, 'synset': 'lighter-than-air_craft.n.01', 'name': 'lighter-than-air_craft'}, {'id': 8905, 'synset': 'light_filter.n.01', 'name': 'light_filter'}, {'id': 8906, 'synset': 'lighting.n.02', 'name': 'lighting'}, {'id': 8907, 'synset': 'light_machine_gun.n.01', 'name': 'light_machine_gun'}, {'id': 8908, 'synset': 'light_meter.n.01', 'name': 'light_meter'}, {'id': 8909, 'synset': 'light_microscope.n.01', 'name': 'light_microscope'}, {'id': 8910, 'synset': 'light_pen.n.01', 'name': 'light_pen'}, {'id': 8911, 'synset': 'lightship.n.01', 'name': 'lightship'}, {'id': 8912, 'synset': 'lilo.n.01', 'name': 'Lilo'}, {'id': 8913, 'synset': 'limber.n.01', 'name': 'limber'}, {'id': 8914, 'synset': 'limekiln.n.01', 'name': 'limekiln'}, {'id': 8915, 'synset': 'limiter.n.01', 'name': 'limiter'}, {'id': 8916, 'synset': 'linear_accelerator.n.01', 'name': 'linear_accelerator'}, {'id': 8917, 'synset': 'linen.n.01', 'name': 'linen'}, {'id': 8918, 'synset': 'line_printer.n.01', 'name': 'line_printer'}, {'id': 8919, 'synset': 'liner.n.04', 'name': 'liner'}, {'id': 8920, 'synset': 'liner.n.03', 'name': 'liner'}, {'id': 8921, 'synset': 'lingerie.n.01', 'name': 'lingerie'}, {'id': 8922, 'synset': 'lining.n.01', 'name': 'lining'}, {'id': 8923, 'synset': 'link.n.09', 'name': 'link'}, {'id': 8924, 'synset': 'linkage.n.03', 'name': 'linkage'}, {'id': 8925, 'synset': 'link_trainer.n.01', 'name': 'Link_trainer'}, {'id': 8926, 'synset': 'linocut.n.02', 'name': 'linocut'}, {'id': 8927, 'synset': 'linoleum_knife.n.01', 'name': 'linoleum_knife'}, {'id': 8928, 'synset': 'linotype.n.01', 'name': 'Linotype'}, {'id': 8929, 'synset': 'linsey-woolsey.n.01', 'name': 'linsey-woolsey'}, {'id': 8930, 'synset': 'linstock.n.01', 'name': 'linstock'}, {'id': 8931, 'synset': 'lion-jaw_forceps.n.01', 'name': 'lion-jaw_forceps'}, {'id': 8932, 'synset': 'lip-gloss.n.01', 'name': 'lip-gloss'}, {'id': 8933, 'synset': 'lipstick.n.01', 'name': 'lipstick'}, {'id': 8934, 'synset': 'liqueur_glass.n.01', 'name': 'liqueur_glass'}, {'id': 8935, 'synset': 'liquid_crystal_display.n.01', 'name': 'liquid_crystal_display'}, {'id': 8936, 'synset': 'liquid_metal_reactor.n.01', 'name': 'liquid_metal_reactor'}, {'id': 8937, 'synset': 'lisle.n.01', 'name': 'lisle'}, {'id': 8938, 'synset': 'lister.n.03', 'name': 'lister'}, {'id': 8939, 'synset': 'litterbin.n.01', 'name': 'litterbin'}, {'id': 8940, 'synset': 'little_theater.n.01', 'name': 'little_theater'}, {'id': 8941, 'synset': 'live_axle.n.01', 'name': 'live_axle'}, {'id': 8942, 'synset': 'living_quarters.n.01', 'name': 'living_quarters'}, {'id': 8943, 'synset': 'living_room.n.01', 'name': 'living_room'}, {'id': 8944, 'synset': 'load.n.09', 'name': 'load'}, {'id': 8945, 'synset': 'loafer.n.02', 'name': 'Loafer'}, {'id': 8946, 'synset': 'loaner.n.02', 'name': 'loaner'}, {'id': 8947, 'synset': 'lobe.n.04', 'name': 'lobe'}, {'id': 8948, 'synset': 'lobster_pot.n.01', 'name': 'lobster_pot'}, {'id': 8949, 'synset': 'local.n.01', 'name': 'local'}, {'id': 8950, 'synset': 'local_area_network.n.01', 'name': 'local_area_network'}, {'id': 8951, 'synset': 'local_oscillator.n.01', 'name': 'local_oscillator'}, {'id': 8952, 'synset': 'lochaber_ax.n.01', 'name': 'Lochaber_ax'}, {'id': 8953, 'synset': 'lock.n.01', 'name': 'lock'}, {'id': 8954, 'synset': 'lock.n.05', 'name': 'lock'}, {'id': 8955, 'synset': 'lock.n.04', 'name': 'lock'}, {'id': 8956, 'synset': 'lock.n.03', 'name': 'lock'}, {'id': 8957, 'synset': 'lockage.n.02', 'name': 'lockage'}, {'id': 8958, 'synset': 'locker.n.02', 'name': 'locker'}, {'id': 8959, 'synset': 'locker_room.n.01', 'name': 'locker_room'}, {'id': 8960, 'synset': 'locket.n.01', 'name': 'locket'}, {'id': 8961, 'synset': 'lock-gate.n.01', 'name': 'lock-gate'}, {'id': 8962, 'synset': 'locking_pliers.n.01', 'name': 'locking_pliers'}, {'id': 8963, 'synset': 'lockring.n.01', 'name': 'lockring'}, {'id': 8964, 'synset': 'lockstitch.n.01', 'name': 'lockstitch'}, {'id': 8965, 'synset': 'lockup.n.01', 'name': 'lockup'}, {'id': 8966, 'synset': 'locomotive.n.01', 'name': 'locomotive'}, {'id': 8967, 'synset': 'lodge.n.05', 'name': 'lodge'}, {'id': 8968, 'synset': 'lodge.n.04', 'name': 'lodge'}, {'id': 8969, 'synset': 'lodge.n.03', 'name': 'lodge'}, {'id': 8970, 'synset': 'lodging_house.n.01', 'name': 'lodging_house'}, {'id': 8971, 'synset': 'loft.n.02', 'name': 'loft'}, {'id': 8972, 'synset': 'loft.n.04', 'name': 'loft'}, {'id': 8973, 'synset': 'loft.n.01', 'name': 'loft'}, {'id': 8974, 'synset': 'log_cabin.n.01', 'name': 'log_cabin'}, {'id': 8975, 'synset': 'loggia.n.01', 'name': 'loggia'}, {'id': 8976, 'synset': 'longbow.n.01', 'name': 'longbow'}, {'id': 8977, 'synset': 'long_iron.n.01', 'name': 'long_iron'}, {'id': 8978, 'synset': 'long_johns.n.01', 'name': 'long_johns'}, {'id': 8979, 'synset': 'long_sleeve.n.01', 'name': 'long_sleeve'}, {'id': 8980, 'synset': 'long_tom.n.01', 'name': 'long_tom'}, {'id': 8981, 'synset': 'long_trousers.n.01', 'name': 'long_trousers'}, {'id': 8982, 'synset': 'long_underwear.n.01', 'name': 'long_underwear'}, {'id': 8983, 'synset': 'looking_glass.n.01', 'name': 'looking_glass'}, {'id': 8984, 'synset': 'lookout.n.03', 'name': 'lookout'}, {'id': 8985, 'synset': 'loom.n.01', 'name': 'loom'}, {'id': 8986, 'synset': 'loop_knot.n.01', 'name': 'loop_knot'}, {'id': 8987, 'synset': 'lorgnette.n.01', 'name': 'lorgnette'}, {'id': 8988, 'synset': 'lorraine_cross.n.01', 'name': 'Lorraine_cross'}, {'id': 8989, 'synset': 'lorry.n.02', 'name': 'lorry'}, {'id': 8990, 'synset': 'lota.n.01', 'name': 'lota'}, {'id': 8991, 'synset': 'lotion.n.01', 'name': 'lotion'}, {'id': 8992, 'synset': 'lounge.n.02', 'name': 'lounge'}, {'id': 8993, 'synset': 'lounger.n.03', 'name': 'lounger'}, {'id': 8994, 'synset': 'lounging_jacket.n.01', 'name': 'lounging_jacket'}, {'id': 8995, 'synset': 'lounging_pajama.n.01', 'name': 'lounging_pajama'}, {'id': 8996, 'synset': 'loungewear.n.01', 'name': 'loungewear'}, {'id': 8997, 'synset': 'loupe.n.01', 'name': 'loupe'}, {'id': 8998, 'synset': 'louvered_window.n.01', 'name': 'louvered_window'}, {'id': 8999, 'synset': 'love_knot.n.01', 'name': 'love_knot'}, {'id': 9000, 'synset': 'loving_cup.n.01', 'name': 'loving_cup'}, {'id': 9001, 'synset': 'lowboy.n.01', 'name': 'lowboy'}, {'id': 9002, 'synset': 'low-pass_filter.n.01', 'name': 'low-pass_filter'}, {'id': 9003, 'synset': 'low-warp-loom.n.01', 'name': 'low-warp-loom'}, {'id': 9004, 'synset': 'lp.n.01', 'name': 'LP'}, {'id': 9005, 'synset': 'l-plate.n.01', 'name': 'L-plate'}, {'id': 9006, 'synset': "lubber's_hole.n.01", 'name': "lubber's_hole"}, {'id': 9007, 'synset': 'lubricating_system.n.01', 'name': 'lubricating_system'}, {'id': 9008, 'synset': 'luff.n.01', 'name': 'luff'}, {'id': 9009, 'synset': 'lug.n.03', 'name': 'lug'}, {'id': 9010, 'synset': 'luge.n.01', 'name': 'luge'}, {'id': 9011, 'synset': 'luger.n.01', 'name': 'Luger'}, {'id': 9012, 'synset': 'luggage_carrier.n.01', 'name': 'luggage_carrier'}, {'id': 9013, 'synset': 'luggage_compartment.n.01', 'name': 'luggage_compartment'}, {'id': 9014, 'synset': 'luggage_rack.n.01', 'name': 'luggage_rack'}, {'id': 9015, 'synset': 'lugger.n.01', 'name': 'lugger'}, {'id': 9016, 'synset': 'lugsail.n.01', 'name': 'lugsail'}, {'id': 9017, 'synset': 'lug_wrench.n.01', 'name': 'lug_wrench'}, {'id': 9018, 'synset': 'lumberjack.n.02', 'name': 'lumberjack'}, {'id': 9019, 'synset': 'lumbermill.n.01', 'name': 'lumbermill'}, {'id': 9020, 'synset': 'lunar_excursion_module.n.01', 'name': 'lunar_excursion_module'}, {'id': 9021, 'synset': 'lunchroom.n.01', 'name': 'lunchroom'}, {'id': 9022, 'synset': 'lunette.n.01', 'name': 'lunette'}, {'id': 9023, 'synset': 'lungi.n.01', 'name': 'lungi'}, {'id': 9024, 'synset': 'lunula.n.02', 'name': 'lunula'}, {'id': 9025, 'synset': 'lusterware.n.01', 'name': 'lusterware'}, {'id': 9026, 'synset': 'lute.n.02', 'name': 'lute'}, {'id': 9027, 'synset': 'luxury_liner.n.01', 'name': 'luxury_liner'}, {'id': 9028, 'synset': 'lyceum.n.02', 'name': 'lyceum'}, {'id': 9029, 'synset': 'lychgate.n.01', 'name': 'lychgate'}, {'id': 9030, 'synset': 'lyre.n.01', 'name': 'lyre'}, {'id': 9031, 'synset': 'machete.n.01', 'name': 'machete'}, {'id': 9032, 'synset': 'machicolation.n.01', 'name': 'machicolation'}, {'id': 9033, 'synset': 'machine.n.01', 'name': 'machine'}, {'id': 9034, 'synset': 'machine.n.04', 'name': 'machine'}, {'id': 9035, 'synset': 'machine_bolt.n.01', 'name': 'machine_bolt'}, {'id': 9036, 'synset': 'machinery.n.01', 'name': 'machinery'}, {'id': 9037, 'synset': 'machine_screw.n.01', 'name': 'machine_screw'}, {'id': 9038, 'synset': 'machine_tool.n.01', 'name': 'machine_tool'}, {'id': 9039, 'synset': "machinist's_vise.n.01", 'name': "machinist's_vise"}, {'id': 9040, 'synset': 'machmeter.n.01', 'name': 'machmeter'}, {'id': 9041, 'synset': 'mackinaw.n.04', 'name': 'mackinaw'}, {'id': 9042, 'synset': 'mackinaw.n.03', 'name': 'mackinaw'}, {'id': 9043, 'synset': 'mackinaw.n.01', 'name': 'mackinaw'}, {'id': 9044, 'synset': 'mackintosh.n.01', 'name': 'mackintosh'}, {'id': 9045, 'synset': 'macrame.n.01', 'name': 'macrame'}, {'id': 9046, 'synset': 'madras.n.03', 'name': 'madras'}, {'id': 9047, 'synset': 'mae_west.n.02', 'name': 'Mae_West'}, {'id': 9048, 'synset': 'magazine_rack.n.01', 'name': 'magazine_rack'}, {'id': 9049, 'synset': 'magic_lantern.n.01', 'name': 'magic_lantern'}, {'id': 9050, 'synset': 'magnetic_bottle.n.01', 'name': 'magnetic_bottle'}, {'id': 9051, 'synset': 'magnetic_compass.n.01', 'name': 'magnetic_compass'}, {'id': 9052, 'synset': 'magnetic_core_memory.n.01', 'name': 'magnetic_core_memory'}, {'id': 9053, 'synset': 'magnetic_disk.n.01', 'name': 'magnetic_disk'}, {'id': 9054, 'synset': 'magnetic_head.n.01', 'name': 'magnetic_head'}, {'id': 9055, 'synset': 'magnetic_mine.n.01', 'name': 'magnetic_mine'}, {'id': 9056, 'synset': 'magnetic_needle.n.01', 'name': 'magnetic_needle'}, {'id': 9057, 'synset': 'magnetic_recorder.n.01', 'name': 'magnetic_recorder'}, {'id': 9058, 'synset': 'magnetic_stripe.n.01', 'name': 'magnetic_stripe'}, {'id': 9059, 'synset': 'magnetic_tape.n.01', 'name': 'magnetic_tape'}, {'id': 9060, 'synset': 'magneto.n.01', 'name': 'magneto'}, {'id': 9061, 'synset': 'magnetometer.n.01', 'name': 'magnetometer'}, {'id': 9062, 'synset': 'magnetron.n.01', 'name': 'magnetron'}, {'id': 9063, 'synset': 'magnifier.n.01', 'name': 'magnifier'}, {'id': 9064, 'synset': 'magnum.n.01', 'name': 'magnum'}, {'id': 9065, 'synset': 'magnus_hitch.n.01', 'name': 'magnus_hitch'}, {'id': 9066, 'synset': 'mail.n.03', 'name': 'mail'}, {'id': 9067, 'synset': 'mailbag.n.02', 'name': 'mailbag'}, {'id': 9068, 'synset': 'mailbag.n.01', 'name': 'mailbag'}, {'id': 9069, 'synset': 'mailboat.n.01', 'name': 'mailboat'}, {'id': 9070, 'synset': 'mail_car.n.01', 'name': 'mail_car'}, {'id': 9071, 'synset': 'maildrop.n.01', 'name': 'maildrop'}, {'id': 9072, 'synset': 'mailer.n.04', 'name': 'mailer'}, {'id': 9073, 'synset': 'maillot.n.02', 'name': 'maillot'}, {'id': 9074, 'synset': 'maillot.n.01', 'name': 'maillot'}, {'id': 9075, 'synset': 'mailsorter.n.01', 'name': 'mailsorter'}, {'id': 9076, 'synset': 'mail_train.n.01', 'name': 'mail_train'}, {'id': 9077, 'synset': 'mainframe.n.01', 'name': 'mainframe'}, {'id': 9078, 'synset': 'mainmast.n.01', 'name': 'mainmast'}, {'id': 9079, 'synset': 'main_rotor.n.01', 'name': 'main_rotor'}, {'id': 9080, 'synset': 'mainsail.n.01', 'name': 'mainsail'}, {'id': 9081, 'synset': 'mainspring.n.01', 'name': 'mainspring'}, {'id': 9082, 'synset': 'main-topmast.n.01', 'name': 'main-topmast'}, {'id': 9083, 'synset': 'main-topsail.n.01', 'name': 'main-topsail'}, {'id': 9084, 'synset': 'main_yard.n.01', 'name': 'main_yard'}, {'id': 9085, 'synset': 'maisonette.n.02', 'name': 'maisonette'}, {'id': 9086, 'synset': 'majolica.n.01', 'name': 'majolica'}, {'id': 9087, 'synset': 'makeup.n.01', 'name': 'makeup'}, {'id': 9088, 'synset': 'maksutov_telescope.n.01', 'name': 'Maksutov_telescope'}, {'id': 9089, 'synset': 'malacca.n.02', 'name': 'malacca'}, {'id': 9090, 'synset': 'mallet.n.03', 'name': 'mallet'}, {'id': 9091, 'synset': 'mallet.n.02', 'name': 'mallet'}, {'id': 9092, 'synset': 'mammogram.n.01', 'name': 'mammogram'}, {'id': 9093, 'synset': 'mandola.n.01', 'name': 'mandola'}, {'id': 9094, 'synset': 'mandolin.n.01', 'name': 'mandolin'}, {'id': 9095, 'synset': 'mangle.n.01', 'name': 'mangle'}, {'id': 9096, 'synset': 'manhole_cover.n.01', 'name': 'manhole_cover'}, {'id': 9097, 'synset': 'man-of-war.n.01', 'name': 'man-of-war'}, {'id': 9098, 'synset': 'manometer.n.01', 'name': 'manometer'}, {'id': 9099, 'synset': 'manor.n.01', 'name': 'manor'}, {'id': 9100, 'synset': 'manor_hall.n.01', 'name': 'manor_hall'}, {'id': 9101, 'synset': 'manpad.n.01', 'name': 'MANPAD'}, {'id': 9102, 'synset': 'mansard.n.01', 'name': 'mansard'}, {'id': 9103, 'synset': 'manse.n.02', 'name': 'manse'}, {'id': 9104, 'synset': 'mansion.n.02', 'name': 'mansion'}, {'id': 9105, 'synset': 'mantel.n.01', 'name': 'mantel'}, {'id': 9106, 'synset': 'mantelet.n.02', 'name': 'mantelet'}, {'id': 9107, 'synset': 'mantilla.n.01', 'name': 'mantilla'}, {'id': 9108, 'synset': 'mao_jacket.n.01', 'name': 'Mao_jacket'}, {'id': 9109, 'synset': 'maquiladora.n.01', 'name': 'maquiladora'}, {'id': 9110, 'synset': 'maraca.n.01', 'name': 'maraca'}, {'id': 9111, 'synset': 'marble.n.02', 'name': 'marble'}, {'id': 9112, 'synset': 'marching_order.n.01', 'name': 'marching_order'}, {'id': 9113, 'synset': 'marimba.n.01', 'name': 'marimba'}, {'id': 9114, 'synset': 'marina.n.01', 'name': 'marina'}, {'id': 9115, 'synset': 'marketplace.n.02', 'name': 'marketplace'}, {'id': 9116, 'synset': 'marlinespike.n.01', 'name': 'marlinespike'}, {'id': 9117, 'synset': 'marocain.n.01', 'name': 'marocain'}, {'id': 9118, 'synset': 'marquee.n.02', 'name': 'marquee'}, {'id': 9119, 'synset': 'marquetry.n.01', 'name': 'marquetry'}, {'id': 9120, 'synset': 'marriage_bed.n.01', 'name': 'marriage_bed'}, {'id': 9121, 'synset': 'martello_tower.n.01', 'name': 'martello_tower'}, {'id': 9122, 'synset': 'martingale.n.01', 'name': 'martingale'}, {'id': 9123, 'synset': 'mascara.n.01', 'name': 'mascara'}, {'id': 9124, 'synset': 'maser.n.01', 'name': 'maser'}, {'id': 9125, 'synset': 'mashie.n.01', 'name': 'mashie'}, {'id': 9126, 'synset': 'mashie_niblick.n.01', 'name': 'mashie_niblick'}, {'id': 9127, 'synset': 'masjid.n.01', 'name': 'masjid'}, {'id': 9128, 'synset': 'mask.n.01', 'name': 'mask'}, {'id': 9129, 'synset': 'masonite.n.01', 'name': 'Masonite'}, {'id': 9130, 'synset': 'mason_jar.n.01', 'name': 'Mason_jar'}, {'id': 9131, 'synset': 'masonry.n.01', 'name': 'masonry'}, {'id': 9132, 'synset': "mason's_level.n.01", 'name': "mason's_level"}, {'id': 9133, 'synset': 'massage_parlor.n.02', 'name': 'massage_parlor'}, {'id': 9134, 'synset': 'massage_parlor.n.01', 'name': 'massage_parlor'}, {'id': 9135, 'synset': 'mass_spectrograph.n.01', 'name': 'mass_spectrograph'}, {'id': 9136, 'synset': 'mass_spectrometer.n.01', 'name': 'mass_spectrometer'}, {'id': 9137, 'synset': 'mast.n.04', 'name': 'mast'}, {'id': 9138, 'synset': 'mastaba.n.01', 'name': 'mastaba'}, {'id': 9139, 'synset': 'master_bedroom.n.01', 'name': 'master_bedroom'}, {'id': 9140, 'synset': 'masterpiece.n.01', 'name': 'masterpiece'}, {'id': 9141, 'synset': 'mat.n.01', 'name': 'mat'}, {'id': 9142, 'synset': 'match.n.01', 'name': 'match'}, {'id': 9143, 'synset': 'match.n.03', 'name': 'match'}, {'id': 9144, 'synset': 'matchboard.n.01', 'name': 'matchboard'}, {'id': 9145, 'synset': 'matchbook.n.01', 'name': 'matchbook'}, {'id': 9146, 'synset': 'matchlock.n.01', 'name': 'matchlock'}, {'id': 9147, 'synset': 'match_plane.n.01', 'name': 'match_plane'}, {'id': 9148, 'synset': 'matchstick.n.01', 'name': 'matchstick'}, {'id': 9149, 'synset': 'material.n.04', 'name': 'material'}, {'id': 9150, 'synset': 'materiel.n.01', 'name': 'materiel'}, {'id': 9151, 'synset': 'maternity_hospital.n.01', 'name': 'maternity_hospital'}, {'id': 9152, 'synset': 'maternity_ward.n.01', 'name': 'maternity_ward'}, {'id': 9153, 'synset': 'matrix.n.06', 'name': 'matrix'}, {'id': 9154, 'synset': 'matthew_walker.n.01', 'name': 'Matthew_Walker'}, {'id': 9155, 'synset': 'matting.n.01', 'name': 'matting'}, {'id': 9156, 'synset': 'mattock.n.01', 'name': 'mattock'}, {'id': 9157, 'synset': 'mattress_cover.n.01', 'name': 'mattress_cover'}, {'id': 9158, 'synset': 'maul.n.01', 'name': 'maul'}, {'id': 9159, 'synset': 'maulstick.n.01', 'name': 'maulstick'}, {'id': 9160, 'synset': 'mauser.n.02', 'name': 'Mauser'}, {'id': 9161, 'synset': 'mausoleum.n.01', 'name': 'mausoleum'}, {'id': 9162, 'synset': 'maxi.n.01', 'name': 'maxi'}, {'id': 9163, 'synset': 'maxim_gun.n.01', 'name': 'Maxim_gun'}, {'id': 9164, 'synset': 'maximum_and_minimum_thermometer.n.01', 'name': 'maximum_and_minimum_thermometer'}, {'id': 9165, 'synset': 'maypole.n.01', 'name': 'maypole'}, {'id': 9166, 'synset': 'maze.n.01', 'name': 'maze'}, {'id': 9167, 'synset': 'mazer.n.01', 'name': 'mazer'}, {'id': 9168, 'synset': 'means.n.02', 'name': 'means'}, {'id': 9169, 'synset': 'measure.n.09', 'name': 'measure'}, {'id': 9170, 'synset': 'measuring_instrument.n.01', 'name': 'measuring_instrument'}, {'id': 9171, 'synset': 'meat_counter.n.01', 'name': 'meat_counter'}, {'id': 9172, 'synset': 'meat_grinder.n.01', 'name': 'meat_grinder'}, {'id': 9173, 'synset': 'meat_hook.n.01', 'name': 'meat_hook'}, {'id': 9174, 'synset': 'meat_house.n.02', 'name': 'meat_house'}, {'id': 9175, 'synset': 'meat_safe.n.01', 'name': 'meat_safe'}, {'id': 9176, 'synset': 'meat_thermometer.n.01', 'name': 'meat_thermometer'}, {'id': 9177, 'synset': 'mechanical_device.n.01', 'name': 'mechanical_device'}, {'id': 9178, 'synset': 'mechanical_piano.n.01', 'name': 'mechanical_piano'}, {'id': 9179, 'synset': 'mechanical_system.n.01', 'name': 'mechanical_system'}, {'id': 9180, 'synset': 'mechanism.n.05', 'name': 'mechanism'}, {'id': 9181, 'synset': 'medical_building.n.01', 'name': 'medical_building'}, {'id': 9182, 'synset': 'medical_instrument.n.01', 'name': 'medical_instrument'}, {'id': 9183, 'synset': 'medicine_ball.n.01', 'name': 'medicine_ball'}, {'id': 9184, 'synset': 'medicine_chest.n.01', 'name': 'medicine_chest'}, {'id': 9185, 'synset': 'medline.n.01', 'name': 'MEDLINE'}, {'id': 9186, 'synset': 'megalith.n.01', 'name': 'megalith'}, {'id': 9187, 'synset': 'megaphone.n.01', 'name': 'megaphone'}, {'id': 9188, 'synset': 'memorial.n.03', 'name': 'memorial'}, {'id': 9189, 'synset': 'memory.n.04', 'name': 'memory'}, {'id': 9190, 'synset': 'memory_chip.n.01', 'name': 'memory_chip'}, {'id': 9191, 'synset': 'memory_device.n.01', 'name': 'memory_device'}, {'id': 9192, 'synset': 'menagerie.n.02', 'name': 'menagerie'}, {'id': 9193, 'synset': 'mending.n.01', 'name': 'mending'}, {'id': 9194, 'synset': 'menhir.n.01', 'name': 'menhir'}, {'id': 9195, 'synset': 'menorah.n.02', 'name': 'menorah'}, {'id': 9196, 'synset': 'menorah.n.01', 'name': 'Menorah'}, {'id': 9197, 'synset': "man's_clothing.n.01", 'name': "man's_clothing"}, {'id': 9198, 'synset': "men's_room.n.01", 'name': "men's_room"}, {'id': 9199, 'synset': 'mercantile_establishment.n.01', 'name': 'mercantile_establishment'}, {'id': 9200, 'synset': 'mercury_barometer.n.01', 'name': 'mercury_barometer'}, {'id': 9201, 'synset': 'mercury_cell.n.01', 'name': 'mercury_cell'}, {'id': 9202, 'synset': 'mercury_thermometer.n.01', 'name': 'mercury_thermometer'}, {'id': 9203, 'synset': 'mercury-vapor_lamp.n.01', 'name': 'mercury-vapor_lamp'}, {'id': 9204, 'synset': 'mercy_seat.n.02', 'name': 'mercy_seat'}, {'id': 9205, 'synset': 'merlon.n.01', 'name': 'merlon'}, {'id': 9206, 'synset': 'mess.n.05', 'name': 'mess'}, {'id': 9207, 'synset': 'mess_jacket.n.01', 'name': 'mess_jacket'}, {'id': 9208, 'synset': 'mess_kit.n.01', 'name': 'mess_kit'}, {'id': 9209, 'synset': 'messuage.n.01', 'name': 'messuage'}, {'id': 9210, 'synset': 'metal_detector.n.01', 'name': 'metal_detector'}, {'id': 9211, 'synset': 'metallic.n.01', 'name': 'metallic'}, {'id': 9212, 'synset': 'metal_screw.n.01', 'name': 'metal_screw'}, {'id': 9213, 'synset': 'metal_wood.n.01', 'name': 'metal_wood'}, {'id': 9214, 'synset': 'meteorological_balloon.n.01', 'name': 'meteorological_balloon'}, {'id': 9215, 'synset': 'meter.n.02', 'name': 'meter'}, {'id': 9216, 'synset': 'meterstick.n.01', 'name': 'meterstick'}, {'id': 9217, 'synset': 'metronome.n.01', 'name': 'metronome'}, {'id': 9218, 'synset': 'mezzanine.n.02', 'name': 'mezzanine'}, {'id': 9219, 'synset': 'mezzanine.n.01', 'name': 'mezzanine'}, {'id': 9220, 'synset': 'microbalance.n.01', 'name': 'microbalance'}, {'id': 9221, 'synset': 'microbrewery.n.01', 'name': 'microbrewery'}, {'id': 9222, 'synset': 'microfiche.n.01', 'name': 'microfiche'}, {'id': 9223, 'synset': 'microfilm.n.01', 'name': 'microfilm'}, {'id': 9224, 'synset': 'micrometer.n.02', 'name': 'micrometer'}, {'id': 9225, 'synset': 'microprocessor.n.01', 'name': 'microprocessor'}, {'id': 9226, 'synset': 'microtome.n.01', 'name': 'microtome'}, {'id': 9227, 'synset': 'microwave_diathermy_machine.n.01', 'name': 'microwave_diathermy_machine'}, {'id': 9228, 'synset': 'microwave_linear_accelerator.n.01', 'name': 'microwave_linear_accelerator'}, {'id': 9229, 'synset': 'middy.n.01', 'name': 'middy'}, {'id': 9230, 'synset': 'midiron.n.01', 'name': 'midiron'}, {'id': 9231, 'synset': 'mihrab.n.02', 'name': 'mihrab'}, {'id': 9232, 'synset': 'mihrab.n.01', 'name': 'mihrab'}, {'id': 9233, 'synset': 'military_hospital.n.01', 'name': 'military_hospital'}, {'id': 9234, 'synset': 'military_quarters.n.01', 'name': 'military_quarters'}, {'id': 9235, 'synset': 'military_uniform.n.01', 'name': 'military_uniform'}, {'id': 9236, 'synset': 'military_vehicle.n.01', 'name': 'military_vehicle'}, {'id': 9237, 'synset': 'milk_bar.n.01', 'name': 'milk_bar'}, {'id': 9238, 'synset': 'milk_float.n.01', 'name': 'milk_float'}, {'id': 9239, 'synset': 'milking_machine.n.01', 'name': 'milking_machine'}, {'id': 9240, 'synset': 'milking_stool.n.01', 'name': 'milking_stool'}, {'id': 9241, 'synset': 'milk_wagon.n.01', 'name': 'milk_wagon'}, {'id': 9242, 'synset': 'mill.n.04', 'name': 'mill'}, {'id': 9243, 'synset': 'milldam.n.01', 'name': 'milldam'}, {'id': 9244, 'synset': 'miller.n.05', 'name': 'miller'}, {'id': 9245, 'synset': 'milliammeter.n.01', 'name': 'milliammeter'}, {'id': 9246, 'synset': 'millinery.n.02', 'name': 'millinery'}, {'id': 9247, 'synset': 'millinery.n.01', 'name': 'millinery'}, {'id': 9248, 'synset': 'milling.n.01', 'name': 'milling'}, {'id': 9249, 'synset': 'millivoltmeter.n.01', 'name': 'millivoltmeter'}, {'id': 9250, 'synset': 'millstone.n.03', 'name': 'millstone'}, {'id': 9251, 'synset': 'millstone.n.02', 'name': 'millstone'}, {'id': 9252, 'synset': 'millwheel.n.01', 'name': 'millwheel'}, {'id': 9253, 'synset': 'mimeograph.n.01', 'name': 'mimeograph'}, {'id': 9254, 'synset': 'minaret.n.01', 'name': 'minaret'}, {'id': 9255, 'synset': 'mincer.n.01', 'name': 'mincer'}, {'id': 9256, 'synset': 'mine.n.02', 'name': 'mine'}, {'id': 9257, 'synset': 'mine_detector.n.01', 'name': 'mine_detector'}, {'id': 9258, 'synset': 'minelayer.n.01', 'name': 'minelayer'}, {'id': 9259, 'synset': 'mineshaft.n.01', 'name': 'mineshaft'}, {'id': 9260, 'synset': 'minibar.n.01', 'name': 'minibar'}, {'id': 9261, 'synset': 'minibike.n.01', 'name': 'minibike'}, {'id': 9262, 'synset': 'minibus.n.01', 'name': 'minibus'}, {'id': 9263, 'synset': 'minicar.n.01', 'name': 'minicar'}, {'id': 9264, 'synset': 'minicomputer.n.01', 'name': 'minicomputer'}, {'id': 9265, 'synset': 'ministry.n.02', 'name': 'ministry'}, {'id': 9266, 'synset': 'miniskirt.n.01', 'name': 'miniskirt'}, {'id': 9267, 'synset': 'minisub.n.01', 'name': 'minisub'}, {'id': 9268, 'synset': 'miniver.n.01', 'name': 'miniver'}, {'id': 9269, 'synset': 'mink.n.02', 'name': 'mink'}, {'id': 9270, 'synset': 'minster.n.01', 'name': 'minster'}, {'id': 9271, 'synset': 'mint.n.06', 'name': 'mint'}, {'id': 9272, 'synset': 'minute_hand.n.01', 'name': 'minute_hand'}, {'id': 9273, 'synset': 'minuteman.n.02', 'name': 'Minuteman'}, {'id': 9274, 'synset': 'missile.n.01', 'name': 'missile'}, {'id': 9275, 'synset': 'missile_defense_system.n.01', 'name': 'missile_defense_system'}, {'id': 9276, 'synset': 'miter_box.n.01', 'name': 'miter_box'}, {'id': 9277, 'synset': 'miter_joint.n.01', 'name': 'miter_joint'}, {'id': 9278, 'synset': 'mixer.n.03', 'name': 'mixer'}, {'id': 9279, 'synset': 'mixing_bowl.n.01', 'name': 'mixing_bowl'}, {'id': 9280, 'synset': 'mixing_faucet.n.01', 'name': 'mixing_faucet'}, {'id': 9281, 'synset': 'mizzen.n.02', 'name': 'mizzen'}, {'id': 9282, 'synset': 'mizzenmast.n.01', 'name': 'mizzenmast'}, {'id': 9283, 'synset': 'mobcap.n.01', 'name': 'mobcap'}, {'id': 9284, 'synset': 'mobile_home.n.01', 'name': 'mobile_home'}, {'id': 9285, 'synset': 'moccasin.n.01', 'name': 'moccasin'}, {'id': 9286, 'synset': 'mock-up.n.01', 'name': 'mock-up'}, {'id': 9287, 'synset': 'mod_con.n.01', 'name': 'mod_con'}, {'id': 9288, 'synset': 'model_t.n.01', 'name': 'Model_T'}, {'id': 9289, 'synset': 'modem.n.01', 'name': 'modem'}, {'id': 9290, 'synset': 'modillion.n.01', 'name': 'modillion'}, {'id': 9291, 'synset': 'module.n.03', 'name': 'module'}, {'id': 9292, 'synset': 'module.n.02', 'name': 'module'}, {'id': 9293, 'synset': 'mohair.n.01', 'name': 'mohair'}, {'id': 9294, 'synset': 'moire.n.01', 'name': 'moire'}, {'id': 9295, 'synset': 'mold.n.02', 'name': 'mold'}, {'id': 9296, 'synset': 'moldboard.n.01', 'name': 'moldboard'}, {'id': 9297, 'synset': 'moldboard_plow.n.01', 'name': 'moldboard_plow'}, {'id': 9298, 'synset': 'moleskin.n.01', 'name': 'moleskin'}, {'id': 9299, 'synset': 'molotov_cocktail.n.01', 'name': 'Molotov_cocktail'}, {'id': 9300, 'synset': 'monastery.n.01', 'name': 'monastery'}, {'id': 9301, 'synset': 'monastic_habit.n.01', 'name': 'monastic_habit'}, {'id': 9302, 'synset': 'moneybag.n.01', 'name': 'moneybag'}, {'id': 9303, 'synset': 'money_belt.n.01', 'name': 'money_belt'}, {'id': 9304, 'synset': 'monitor.n.06', 'name': 'monitor'}, {'id': 9305, 'synset': 'monitor.n.05', 'name': 'monitor'}, {'id': 9306, 'synset': 'monkey-wrench.n.01', 'name': 'monkey-wrench'}, {'id': 9307, 'synset': "monk's_cloth.n.01", 'name': "monk's_cloth"}, {'id': 9308, 'synset': 'monochrome.n.01', 'name': 'monochrome'}, {'id': 9309, 'synset': 'monocle.n.01', 'name': 'monocle'}, {'id': 9310, 'synset': 'monofocal_lens_implant.n.01', 'name': 'monofocal_lens_implant'}, {'id': 9311, 'synset': 'monoplane.n.01', 'name': 'monoplane'}, {'id': 9312, 'synset': 'monotype.n.02', 'name': 'monotype'}, {'id': 9313, 'synset': 'monstrance.n.02', 'name': 'monstrance'}, {'id': 9314, 'synset': 'mooring_tower.n.01', 'name': 'mooring_tower'}, {'id': 9315, 'synset': 'moorish_arch.n.01', 'name': 'Moorish_arch'}, {'id': 9316, 'synset': 'moped.n.01', 'name': 'moped'}, {'id': 9317, 'synset': 'mop_handle.n.01', 'name': 'mop_handle'}, {'id': 9318, 'synset': 'moquette.n.01', 'name': 'moquette'}, {'id': 9319, 'synset': 'morgue.n.01', 'name': 'morgue'}, {'id': 9320, 'synset': 'morion.n.01', 'name': 'morion'}, {'id': 9321, 'synset': 'morning_dress.n.02', 'name': 'morning_dress'}, {'id': 9322, 'synset': 'morning_dress.n.01', 'name': 'morning_dress'}, {'id': 9323, 'synset': 'morning_room.n.01', 'name': 'morning_room'}, {'id': 9324, 'synset': 'morris_chair.n.01', 'name': 'Morris_chair'}, {'id': 9325, 'synset': 'mortar.n.01', 'name': 'mortar'}, {'id': 9326, 'synset': 'mortar.n.03', 'name': 'mortar'}, {'id': 9327, 'synset': 'mortarboard.n.02', 'name': 'mortarboard'}, {'id': 9328, 'synset': 'mortise_joint.n.02', 'name': 'mortise_joint'}, {'id': 9329, 'synset': 'mosaic.n.05', 'name': 'mosaic'}, {'id': 9330, 'synset': 'mosque.n.01', 'name': 'mosque'}, {'id': 9331, 'synset': 'mosquito_net.n.01', 'name': 'mosquito_net'}, {'id': 9332, 'synset': 'motel.n.01', 'name': 'motel'}, {'id': 9333, 'synset': 'motel_room.n.01', 'name': 'motel_room'}, {'id': 9334, 'synset': 'mother_hubbard.n.01', 'name': 'Mother_Hubbard'}, {'id': 9335, 'synset': 'motion-picture_camera.n.01', 'name': 'motion-picture_camera'}, {'id': 9336, 'synset': 'motion-picture_film.n.01', 'name': 'motion-picture_film'}, {'id': 9337, 'synset': 'motley.n.03', 'name': 'motley'}, {'id': 9338, 'synset': 'motley.n.02', 'name': 'motley'}, {'id': 9339, 'synset': 'motorboat.n.01', 'name': 'motorboat'}, {'id': 9340, 'synset': 'motor_hotel.n.01', 'name': 'motor_hotel'}, {'id': 9341, 'synset': 'motorized_wheelchair.n.01', 'name': 'motorized_wheelchair'}, {'id': 9342, 'synset': 'mound.n.04', 'name': 'mound'}, {'id': 9343, 'synset': 'mount.n.04', 'name': 'mount'}, {'id': 9344, 'synset': 'mountain_bike.n.01', 'name': 'mountain_bike'}, {'id': 9345, 'synset': 'mountain_tent.n.01', 'name': 'mountain_tent'}, {'id': 9346, 'synset': 'mouse_button.n.01', 'name': 'mouse_button'}, {'id': 9347, 'synset': 'mousetrap.n.01', 'name': 'mousetrap'}, {'id': 9348, 'synset': 'mousse.n.03', 'name': 'mousse'}, {'id': 9349, 'synset': 'mouthpiece.n.06', 'name': 'mouthpiece'}, {'id': 9350, 'synset': 'mouthpiece.n.02', 'name': 'mouthpiece'}, {'id': 9351, 'synset': 'mouthpiece.n.04', 'name': 'mouthpiece'}, {'id': 9352, 'synset': 'movement.n.10', 'name': 'movement'}, {'id': 9353, 'synset': 'movie_projector.n.01', 'name': 'movie_projector'}, {'id': 9354, 'synset': 'moving-coil_galvanometer.n.01', 'name': 'moving-coil_galvanometer'}, {'id': 9355, 'synset': 'moving_van.n.01', 'name': 'moving_van'}, {'id': 9356, 'synset': 'mud_brick.n.01', 'name': 'mud_brick'}, {'id': 9357, 'synset': 'mudguard.n.01', 'name': 'mudguard'}, {'id': 9358, 'synset': 'mudhif.n.01', 'name': 'mudhif'}, {'id': 9359, 'synset': 'muff.n.01', 'name': 'muff'}, {'id': 9360, 'synset': 'muffle.n.01', 'name': 'muffle'}, {'id': 9361, 'synset': 'muffler.n.02', 'name': 'muffler'}, {'id': 9362, 'synset': 'mufti.n.02', 'name': 'mufti'}, {'id': 9363, 'synset': 'mulch.n.01', 'name': 'mulch'}, {'id': 9364, 'synset': 'mule.n.02', 'name': 'mule'}, {'id': 9365, 'synset': 'multichannel_recorder.n.01', 'name': 'multichannel_recorder'}, {'id': 9366, 'synset': 'multiengine_airplane.n.01', 'name': 'multiengine_airplane'}, {'id': 9367, 'synset': 'multiplex.n.02', 'name': 'multiplex'}, {'id': 9368, 'synset': 'multiplexer.n.01', 'name': 'multiplexer'}, {'id': 9369, 'synset': 'multiprocessor.n.01', 'name': 'multiprocessor'}, {'id': 9370, 'synset': 'multistage_rocket.n.01', 'name': 'multistage_rocket'}, {'id': 9371, 'synset': 'munition.n.02', 'name': 'munition'}, {'id': 9372, 'synset': 'murphy_bed.n.01', 'name': 'Murphy_bed'}, {'id': 9373, 'synset': 'musette.n.01', 'name': 'musette'}, {'id': 9374, 'synset': 'musette_pipe.n.01', 'name': 'musette_pipe'}, {'id': 9375, 'synset': 'museum.n.01', 'name': 'museum'}, {'id': 9376, 'synset': 'mushroom_anchor.n.01', 'name': 'mushroom_anchor'}, {'id': 9377, 'synset': 'music_box.n.01', 'name': 'music_box'}, {'id': 9378, 'synset': 'music_hall.n.01', 'name': 'music_hall'}, {'id': 9379, 'synset': 'music_school.n.02', 'name': 'music_school'}, {'id': 9380, 'synset': 'music_stand.n.01', 'name': 'music_stand'}, {'id': 9381, 'synset': 'musket.n.01', 'name': 'musket'}, {'id': 9382, 'synset': 'musket_ball.n.01', 'name': 'musket_ball'}, {'id': 9383, 'synset': 'muslin.n.01', 'name': 'muslin'}, {'id': 9384, 'synset': 'mustache_cup.n.01', 'name': 'mustache_cup'}, {'id': 9385, 'synset': 'mustard_plaster.n.01', 'name': 'mustard_plaster'}, {'id': 9386, 'synset': 'mute.n.02', 'name': 'mute'}, {'id': 9387, 'synset': 'muzzle_loader.n.01', 'name': 'muzzle_loader'}, {'id': 9388, 'synset': 'muzzle.n.03', 'name': 'muzzle'}, {'id': 9389, 'synset': 'myelogram.n.01', 'name': 'myelogram'}, {'id': 9390, 'synset': 'nacelle.n.01', 'name': 'nacelle'}, {'id': 9391, 'synset': 'nail.n.02', 'name': 'nail'}, {'id': 9392, 'synset': 'nailbrush.n.01', 'name': 'nailbrush'}, {'id': 9393, 'synset': 'nailhead.n.02', 'name': 'nailhead'}, {'id': 9394, 'synset': 'nailhead.n.01', 'name': 'nailhead'}, {'id': 9395, 'synset': 'nail_polish.n.01', 'name': 'nail_polish'}, {'id': 9396, 'synset': 'nainsook.n.01', 'name': 'nainsook'}, {'id': 9397, 'synset': "napier's_bones.n.01", 'name': "Napier's_bones"}, {'id': 9398, 'synset': 'nard.n.01', 'name': 'nard'}, {'id': 9399, 'synset': 'narrowbody_aircraft.n.01', 'name': 'narrowbody_aircraft'}, {'id': 9400, 'synset': 'narrow_wale.n.01', 'name': 'narrow_wale'}, {'id': 9401, 'synset': 'narthex.n.02', 'name': 'narthex'}, {'id': 9402, 'synset': 'narthex.n.01', 'name': 'narthex'}, {'id': 9403, 'synset': 'nasotracheal_tube.n.01', 'name': 'nasotracheal_tube'}, {'id': 9404, 'synset': 'national_monument.n.01', 'name': 'national_monument'}, {'id': 9405, 'synset': 'nautilus.n.01', 'name': 'nautilus'}, {'id': 9406, 'synset': 'navigational_system.n.01', 'name': 'navigational_system'}, {'id': 9407, 'synset': 'naval_equipment.n.01', 'name': 'naval_equipment'}, {'id': 9408, 'synset': 'naval_gun.n.01', 'name': 'naval_gun'}, {'id': 9409, 'synset': 'naval_missile.n.01', 'name': 'naval_missile'}, {'id': 9410, 'synset': 'naval_radar.n.01', 'name': 'naval_radar'}, {'id': 9411, 'synset': 'naval_tactical_data_system.n.01', 'name': 'naval_tactical_data_system'}, {'id': 9412, 'synset': 'naval_weaponry.n.01', 'name': 'naval_weaponry'}, {'id': 9413, 'synset': 'nave.n.01', 'name': 'nave'}, {'id': 9414, 'synset': 'navigational_instrument.n.01', 'name': 'navigational_instrument'}, {'id': 9415, 'synset': 'nebuchadnezzar.n.02', 'name': 'nebuchadnezzar'}, {'id': 9416, 'synset': 'neckband.n.01', 'name': 'neckband'}, {'id': 9417, 'synset': 'neck_brace.n.01', 'name': 'neck_brace'}, {'id': 9418, 'synset': 'neckcloth.n.01', 'name': 'neckcloth'}, {'id': 9419, 'synset': 'necklet.n.01', 'name': 'necklet'}, {'id': 9420, 'synset': 'neckline.n.01', 'name': 'neckline'}, {'id': 9421, 'synset': 'neckpiece.n.01', 'name': 'neckpiece'}, {'id': 9422, 'synset': 'neckwear.n.01', 'name': 'neckwear'}, {'id': 9423, 'synset': 'needle.n.02', 'name': 'needle'}, {'id': 9424, 'synset': 'needlenose_pliers.n.01', 'name': 'needlenose_pliers'}, {'id': 9425, 'synset': 'needlework.n.01', 'name': 'needlework'}, {'id': 9426, 'synset': 'negative.n.02', 'name': 'negative'}, {'id': 9427, 'synset': 'negative_magnetic_pole.n.01', 'name': 'negative_magnetic_pole'}, {'id': 9428, 'synset': 'negative_pole.n.01', 'name': 'negative_pole'}, {'id': 9429, 'synset': 'negligee.n.01', 'name': 'negligee'}, {'id': 9430, 'synset': 'neolith.n.01', 'name': 'neolith'}, {'id': 9431, 'synset': 'neon_lamp.n.01', 'name': 'neon_lamp'}, {'id': 9432, 'synset': 'nephoscope.n.01', 'name': 'nephoscope'}, {'id': 9433, 'synset': 'nest.n.05', 'name': 'nest'}, {'id': 9434, 'synset': 'nest_egg.n.02', 'name': 'nest_egg'}, {'id': 9435, 'synset': 'net.n.06', 'name': 'net'}, {'id': 9436, 'synset': 'net.n.02', 'name': 'net'}, {'id': 9437, 'synset': 'net.n.05', 'name': 'net'}, {'id': 9438, 'synset': 'net.n.04', 'name': 'net'}, {'id': 9439, 'synset': 'network.n.05', 'name': 'network'}, {'id': 9440, 'synset': 'network.n.04', 'name': 'network'}, {'id': 9441, 'synset': 'neutron_bomb.n.01', 'name': 'neutron_bomb'}, {'id': 9442, 'synset': 'newel.n.02', 'name': 'newel'}, {'id': 9443, 'synset': 'newel_post.n.01', 'name': 'newel_post'}, {'id': 9444, 'synset': 'newspaper.n.03', 'name': 'newspaper'}, {'id': 9445, 'synset': 'newsroom.n.03', 'name': 'newsroom'}, {'id': 9446, 'synset': 'newsroom.n.02', 'name': 'newsroom'}, {'id': 9447, 'synset': 'newtonian_telescope.n.01', 'name': 'Newtonian_telescope'}, {'id': 9448, 'synset': 'nib.n.01', 'name': 'nib'}, {'id': 9449, 'synset': 'niblick.n.01', 'name': 'niblick'}, {'id': 9450, 'synset': 'nicad.n.01', 'name': 'nicad'}, {'id': 9451, 'synset': 'nickel-iron_battery.n.01', 'name': 'nickel-iron_battery'}, {'id': 9452, 'synset': 'nicol_prism.n.01', 'name': 'Nicol_prism'}, {'id': 9453, 'synset': 'night_bell.n.01', 'name': 'night_bell'}, {'id': 9454, 'synset': 'nightcap.n.02', 'name': 'nightcap'}, {'id': 9455, 'synset': 'nightgown.n.01', 'name': 'nightgown'}, {'id': 9456, 'synset': 'night_latch.n.01', 'name': 'night_latch'}, {'id': 9457, 'synset': 'night-light.n.01', 'name': 'night-light'}, {'id': 9458, 'synset': 'nightshirt.n.01', 'name': 'nightshirt'}, {'id': 9459, 'synset': 'ninepin.n.01', 'name': 'ninepin'}, {'id': 9460, 'synset': 'ninepin_ball.n.01', 'name': 'ninepin_ball'}, {'id': 9461, 'synset': 'ninon.n.01', 'name': 'ninon'}, {'id': 9462, 'synset': 'nipple.n.02', 'name': 'nipple'}, {'id': 9463, 'synset': 'nipple_shield.n.01', 'name': 'nipple_shield'}, {'id': 9464, 'synset': 'niqab.n.01', 'name': 'niqab'}, {'id': 9465, 'synset': 'nissen_hut.n.01', 'name': 'Nissen_hut'}, {'id': 9466, 'synset': 'nogging.n.01', 'name': 'nogging'}, {'id': 9467, 'synset': 'noisemaker.n.01', 'name': 'noisemaker'}, {'id': 9468, 'synset': 'nonsmoker.n.02', 'name': 'nonsmoker'}, {'id': 9469, 'synset': 'non-volatile_storage.n.01', 'name': 'non-volatile_storage'}, {'id': 9470, 'synset': 'norfolk_jacket.n.01', 'name': 'Norfolk_jacket'}, {'id': 9471, 'synset': 'noria.n.01', 'name': 'noria'}, {'id': 9472, 'synset': 'nose_flute.n.01', 'name': 'nose_flute'}, {'id': 9473, 'synset': 'nosewheel.n.01', 'name': 'nosewheel'}, {'id': 9474, 'synset': 'notebook.n.02', 'name': 'notebook'}, {'id': 9475, 'synset': 'nuclear-powered_ship.n.01', 'name': 'nuclear-powered_ship'}, {'id': 9476, 'synset': 'nuclear_reactor.n.01', 'name': 'nuclear_reactor'}, {'id': 9477, 'synset': 'nuclear_rocket.n.01', 'name': 'nuclear_rocket'}, {'id': 9478, 'synset': 'nuclear_weapon.n.01', 'name': 'nuclear_weapon'}, {'id': 9479, 'synset': 'nude.n.01', 'name': 'nude'}, {'id': 9480, 'synset': 'numdah.n.01', 'name': 'numdah'}, {'id': 9481, 'synset': "nun's_habit.n.01", 'name': "nun's_habit"}, {'id': 9482, 'synset': 'nursery.n.01', 'name': 'nursery'}, {'id': 9483, 'synset': 'nut_and_bolt.n.01', 'name': 'nut_and_bolt'}, {'id': 9484, 'synset': 'nylon.n.02', 'name': 'nylon'}, {'id': 9485, 'synset': 'nylons.n.01', 'name': 'nylons'}, {'id': 9486, 'synset': 'oast.n.01', 'name': 'oast'}, {'id': 9487, 'synset': 'oast_house.n.01', 'name': 'oast_house'}, {'id': 9488, 'synset': 'obelisk.n.01', 'name': 'obelisk'}, {'id': 9489, 'synset': 'object_ball.n.01', 'name': 'object_ball'}, {'id': 9490, 'synset': 'objective.n.02', 'name': 'objective'}, {'id': 9491, 'synset': 'oblique_bandage.n.01', 'name': 'oblique_bandage'}, {'id': 9492, 'synset': 'oboe.n.01', 'name': 'oboe'}, {'id': 9493, 'synset': 'oboe_da_caccia.n.01', 'name': 'oboe_da_caccia'}, {'id': 9494, 'synset': "oboe_d'amore.n.01", 'name': "oboe_d'amore"}, {'id': 9495, 'synset': 'observation_dome.n.01', 'name': 'observation_dome'}, {'id': 9496, 'synset': 'observatory.n.01', 'name': 'observatory'}, {'id': 9497, 'synset': 'obstacle.n.02', 'name': 'obstacle'}, {'id': 9498, 'synset': 'obturator.n.01', 'name': 'obturator'}, {'id': 9499, 'synset': 'ocarina.n.01', 'name': 'ocarina'}, {'id': 9500, 'synset': 'octant.n.01', 'name': 'octant'}, {'id': 9501, 'synset': 'odd-leg_caliper.n.01', 'name': 'odd-leg_caliper'}, {'id': 9502, 'synset': 'odometer.n.01', 'name': 'odometer'}, {'id': 9503, 'synset': 'oeil_de_boeuf.n.01', 'name': 'oeil_de_boeuf'}, {'id': 9504, 'synset': 'office.n.01', 'name': 'office'}, {'id': 9505, 'synset': 'office_building.n.01', 'name': 'office_building'}, {'id': 9506, 'synset': 'office_furniture.n.01', 'name': 'office_furniture'}, {'id': 9507, 'synset': "officer's_mess.n.01", 'name': "officer's_mess"}, {'id': 9508, 'synset': 'off-line_equipment.n.01', 'name': 'off-line_equipment'}, {'id': 9509, 'synset': 'ogee.n.01', 'name': 'ogee'}, {'id': 9510, 'synset': 'ogee_arch.n.01', 'name': 'ogee_arch'}, {'id': 9511, 'synset': 'ohmmeter.n.01', 'name': 'ohmmeter'}, {'id': 9512, 'synset': 'oil.n.02', 'name': 'oil'}, {'id': 9513, 'synset': 'oilcan.n.01', 'name': 'oilcan'}, {'id': 9514, 'synset': 'oilcloth.n.01', 'name': 'oilcloth'}, {'id': 9515, 'synset': 'oil_filter.n.01', 'name': 'oil_filter'}, {'id': 9516, 'synset': 'oil_heater.n.01', 'name': 'oil_heater'}, {'id': 9517, 'synset': 'oil_paint.n.01', 'name': 'oil_paint'}, {'id': 9518, 'synset': 'oil_pump.n.01', 'name': 'oil_pump'}, {'id': 9519, 'synset': 'oil_refinery.n.01', 'name': 'oil_refinery'}, {'id': 9520, 'synset': 'oilskin.n.01', 'name': 'oilskin'}, {'id': 9521, 'synset': 'oil_slick.n.01', 'name': 'oil_slick'}, {'id': 9522, 'synset': 'oilstone.n.01', 'name': 'oilstone'}, {'id': 9523, 'synset': 'oil_tanker.n.01', 'name': 'oil_tanker'}, {'id': 9524, 'synset': 'old_school_tie.n.01', 'name': 'old_school_tie'}, {'id': 9525, 'synset': 'olive_drab.n.03', 'name': 'olive_drab'}, {'id': 9526, 'synset': 'olive_drab.n.02', 'name': 'olive_drab'}, {'id': 9527, 'synset': 'olympian_zeus.n.01', 'name': 'Olympian_Zeus'}, {'id': 9528, 'synset': 'omelet_pan.n.01', 'name': 'omelet_pan'}, {'id': 9529, 'synset': 'omnidirectional_antenna.n.01', 'name': 'omnidirectional_antenna'}, {'id': 9530, 'synset': 'omnirange.n.01', 'name': 'omnirange'}, {'id': 9531, 'synset': 'onion_dome.n.01', 'name': 'onion_dome'}, {'id': 9532, 'synset': 'open-air_market.n.01', 'name': 'open-air_market'}, {'id': 9533, 'synset': 'open_circuit.n.01', 'name': 'open_circuit'}, {'id': 9534, 'synset': 'open-end_wrench.n.01', 'name': 'open-end_wrench'}, {'id': 9535, 'synset': 'opener.n.03', 'name': 'opener'}, {'id': 9536, 'synset': 'open-hearth_furnace.n.01', 'name': 'open-hearth_furnace'}, {'id': 9537, 'synset': 'openside_plane.n.01', 'name': 'openside_plane'}, {'id': 9538, 'synset': 'open_sight.n.01', 'name': 'open_sight'}, {'id': 9539, 'synset': 'openwork.n.01', 'name': 'openwork'}, {'id': 9540, 'synset': 'opera.n.03', 'name': 'opera'}, {'id': 9541, 'synset': 'opera_cloak.n.01', 'name': 'opera_cloak'}, {'id': 9542, 'synset': 'operating_microscope.n.01', 'name': 'operating_microscope'}, {'id': 9543, 'synset': 'operating_room.n.01', 'name': 'operating_room'}, {'id': 9544, 'synset': 'operating_table.n.01', 'name': 'operating_table'}, {'id': 9545, 'synset': 'ophthalmoscope.n.01', 'name': 'ophthalmoscope'}, {'id': 9546, 'synset': 'optical_device.n.01', 'name': 'optical_device'}, {'id': 9547, 'synset': 'optical_disk.n.01', 'name': 'optical_disk'}, {'id': 9548, 'synset': 'optical_instrument.n.01', 'name': 'optical_instrument'}, {'id': 9549, 'synset': 'optical_pyrometer.n.01', 'name': 'optical_pyrometer'}, {'id': 9550, 'synset': 'optical_telescope.n.01', 'name': 'optical_telescope'}, {'id': 9551, 'synset': 'orchestra_pit.n.01', 'name': 'orchestra_pit'}, {'id': 9552, 'synset': 'ordinary.n.04', 'name': 'ordinary'}, {'id': 9553, 'synset': 'organ.n.05', 'name': 'organ'}, {'id': 9554, 'synset': 'organdy.n.01', 'name': 'organdy'}, {'id': 9555, 'synset': 'organic_light-emitting_diode.n.01', 'name': 'organic_light-emitting_diode'}, {'id': 9556, 'synset': 'organ_loft.n.01', 'name': 'organ_loft'}, {'id': 9557, 'synset': 'organ_pipe.n.01', 'name': 'organ_pipe'}, {'id': 9558, 'synset': 'organza.n.01', 'name': 'organza'}, {'id': 9559, 'synset': 'oriel.n.01', 'name': 'oriel'}, {'id': 9560, 'synset': 'oriflamme.n.02', 'name': 'oriflamme'}, {'id': 9561, 'synset': 'o_ring.n.01', 'name': 'O_ring'}, {'id': 9562, 'synset': 'orlon.n.01', 'name': 'Orlon'}, {'id': 9563, 'synset': 'orlop_deck.n.01', 'name': 'orlop_deck'}, {'id': 9564, 'synset': 'orphanage.n.02', 'name': 'orphanage'}, {'id': 9565, 'synset': 'orphrey.n.01', 'name': 'orphrey'}, {'id': 9566, 'synset': 'orrery.n.01', 'name': 'orrery'}, {'id': 9567, 'synset': 'orthicon.n.01', 'name': 'orthicon'}, {'id': 9568, 'synset': 'orthochromatic_film.n.01', 'name': 'orthochromatic_film'}, {'id': 9569, 'synset': 'orthopter.n.01', 'name': 'orthopter'}, {'id': 9570, 'synset': 'orthoscope.n.01', 'name': 'orthoscope'}, {'id': 9571, 'synset': 'oscillograph.n.01', 'name': 'oscillograph'}, {'id': 9572, 'synset': 'oscilloscope.n.01', 'name': 'oscilloscope'}, {'id': 9573, 'synset': 'ossuary.n.01', 'name': 'ossuary'}, {'id': 9574, 'synset': 'otoscope.n.01', 'name': 'otoscope'}, {'id': 9575, 'synset': 'oubliette.n.01', 'name': 'oubliette'}, {'id': 9576, 'synset': 'out-basket.n.01', 'name': 'out-basket'}, {'id': 9577, 'synset': 'outboard_motor.n.01', 'name': 'outboard_motor'}, {'id': 9578, 'synset': 'outboard_motorboat.n.01', 'name': 'outboard_motorboat'}, {'id': 9579, 'synset': 'outbuilding.n.01', 'name': 'outbuilding'}, {'id': 9580, 'synset': 'outerwear.n.01', 'name': 'outerwear'}, {'id': 9581, 'synset': 'outfall.n.01', 'name': 'outfall'}, {'id': 9582, 'synset': 'outfit.n.02', 'name': 'outfit'}, {'id': 9583, 'synset': 'outfitter.n.02', 'name': 'outfitter'}, {'id': 9584, 'synset': 'outhouse.n.01', 'name': 'outhouse'}, {'id': 9585, 'synset': 'output_device.n.01', 'name': 'output_device'}, {'id': 9586, 'synset': 'outrigger.n.01', 'name': 'outrigger'}, {'id': 9587, 'synset': 'outrigger_canoe.n.01', 'name': 'outrigger_canoe'}, {'id': 9588, 'synset': 'outside_caliper.n.01', 'name': 'outside_caliper'}, {'id': 9589, 'synset': 'outside_mirror.n.01', 'name': 'outside_mirror'}, {'id': 9590, 'synset': 'outwork.n.01', 'name': 'outwork'}, {'id': 9591, 'synset': 'oven_thermometer.n.01', 'name': 'oven_thermometer'}, {'id': 9592, 'synset': 'overall.n.02', 'name': 'overall'}, {'id': 9593, 'synset': 'overcoat.n.02', 'name': 'overcoat'}, {'id': 9594, 'synset': 'overdrive.n.02', 'name': 'overdrive'}, {'id': 9595, 'synset': 'overgarment.n.01', 'name': 'overgarment'}, {'id': 9596, 'synset': 'overhand_knot.n.01', 'name': 'overhand_knot'}, {'id': 9597, 'synset': 'overhang.n.01', 'name': 'overhang'}, {'id': 9598, 'synset': 'overhead_projector.n.01', 'name': 'overhead_projector'}, {'id': 9599, 'synset': 'overmantel.n.01', 'name': 'overmantel'}, {'id': 9600, 'synset': 'overnighter.n.02', 'name': 'overnighter'}, {'id': 9601, 'synset': 'overpass.n.01', 'name': 'overpass'}, {'id': 9602, 'synset': 'override.n.01', 'name': 'override'}, {'id': 9603, 'synset': 'overshoe.n.01', 'name': 'overshoe'}, {'id': 9604, 'synset': 'overskirt.n.01', 'name': 'overskirt'}, {'id': 9605, 'synset': 'oxbow.n.03', 'name': 'oxbow'}, {'id': 9606, 'synset': 'oxbridge.n.01', 'name': 'Oxbridge'}, {'id': 9607, 'synset': 'oxcart.n.01', 'name': 'oxcart'}, {'id': 9608, 'synset': 'oxeye.n.03', 'name': 'oxeye'}, {'id': 9609, 'synset': 'oxford.n.04', 'name': 'oxford'}, {'id': 9610, 'synset': 'oximeter.n.01', 'name': 'oximeter'}, {'id': 9611, 'synset': 'oxyacetylene_torch.n.01', 'name': 'oxyacetylene_torch'}, {'id': 9612, 'synset': 'oxygen_mask.n.01', 'name': 'oxygen_mask'}, {'id': 9613, 'synset': 'oyster_bar.n.01', 'name': 'oyster_bar'}, {'id': 9614, 'synset': 'oyster_bed.n.01', 'name': 'oyster_bed'}, {'id': 9615, 'synset': 'pace_car.n.01', 'name': 'pace_car'}, {'id': 9616, 'synset': 'pacemaker.n.03', 'name': 'pacemaker'}, {'id': 9617, 'synset': 'pack.n.03', 'name': 'pack'}, {'id': 9618, 'synset': 'pack.n.09', 'name': 'pack'}, {'id': 9619, 'synset': 'pack.n.07', 'name': 'pack'}, {'id': 9620, 'synset': 'package.n.02', 'name': 'package'}, {'id': 9621, 'synset': 'package_store.n.01', 'name': 'package_store'}, {'id': 9622, 'synset': 'packaging.n.03', 'name': 'packaging'}, {'id': 9623, 'synset': 'packing_box.n.02', 'name': 'packing_box'}, {'id': 9624, 'synset': 'packinghouse.n.02', 'name': 'packinghouse'}, {'id': 9625, 'synset': 'packinghouse.n.01', 'name': 'packinghouse'}, {'id': 9626, 'synset': 'packing_needle.n.01', 'name': 'packing_needle'}, {'id': 9627, 'synset': 'packsaddle.n.01', 'name': 'packsaddle'}, {'id': 9628, 'synset': 'paddle.n.02', 'name': 'paddle'}, {'id': 9629, 'synset': 'paddle.n.01', 'name': 'paddle'}, {'id': 9630, 'synset': 'paddle_box.n.01', 'name': 'paddle_box'}, {'id': 9631, 'synset': 'paddle_steamer.n.01', 'name': 'paddle_steamer'}, {'id': 9632, 'synset': 'paddlewheel.n.01', 'name': 'paddlewheel'}, {'id': 9633, 'synset': 'paddock.n.01', 'name': 'paddock'}, {'id': 9634, 'synset': 'page_printer.n.01', 'name': 'page_printer'}, {'id': 9635, 'synset': 'paint.n.01', 'name': 'paint'}, {'id': 9636, 'synset': 'paintball.n.01', 'name': 'paintball'}, {'id': 9637, 'synset': 'paintball_gun.n.01', 'name': 'paintball_gun'}, {'id': 9638, 'synset': 'paintbox.n.01', 'name': 'paintbox'}, {'id': 9639, 'synset': 'paisley.n.01', 'name': 'paisley'}, {'id': 9640, 'synset': 'pajama.n.01', 'name': 'pajama'}, {'id': 9641, 'synset': 'palace.n.04', 'name': 'palace'}, {'id': 9642, 'synset': 'palace.n.01', 'name': 'palace'}, {'id': 9643, 'synset': 'palace.n.03', 'name': 'palace'}, {'id': 9644, 'synset': 'palanquin.n.01', 'name': 'palanquin'}, {'id': 9645, 'synset': 'paleolith.n.01', 'name': 'paleolith'}, {'id': 9646, 'synset': 'palestra.n.01', 'name': 'palestra'}, {'id': 9647, 'synset': 'palette_knife.n.01', 'name': 'palette_knife'}, {'id': 9648, 'synset': 'palisade.n.01', 'name': 'palisade'}, {'id': 9649, 'synset': 'pallet.n.03', 'name': 'pallet'}, {'id': 9650, 'synset': 'pallette.n.01', 'name': 'pallette'}, {'id': 9651, 'synset': 'pallium.n.04', 'name': 'pallium'}, {'id': 9652, 'synset': 'pallium.n.03', 'name': 'pallium'}, {'id': 9653, 'synset': 'pancake_turner.n.01', 'name': 'pancake_turner'}, {'id': 9654, 'synset': 'panchromatic_film.n.01', 'name': 'panchromatic_film'}, {'id': 9655, 'synset': 'panda_car.n.01', 'name': 'panda_car'}, {'id': 9656, 'synset': 'paneling.n.01', 'name': 'paneling'}, {'id': 9657, 'synset': 'panhandle.n.02', 'name': 'panhandle'}, {'id': 9658, 'synset': 'panic_button.n.01', 'name': 'panic_button'}, {'id': 9659, 'synset': 'pannier.n.02', 'name': 'pannier'}, {'id': 9660, 'synset': 'pannier.n.01', 'name': 'pannier'}, {'id': 9661, 'synset': 'pannikin.n.01', 'name': 'pannikin'}, {'id': 9662, 'synset': 'panopticon.n.02', 'name': 'panopticon'}, {'id': 9663, 'synset': 'panopticon.n.01', 'name': 'panopticon'}, {'id': 9664, 'synset': 'panpipe.n.01', 'name': 'panpipe'}, {'id': 9665, 'synset': 'pantaloon.n.03', 'name': 'pantaloon'}, {'id': 9666, 'synset': 'pantechnicon.n.01', 'name': 'pantechnicon'}, {'id': 9667, 'synset': 'pantheon.n.03', 'name': 'pantheon'}, {'id': 9668, 'synset': 'pantheon.n.02', 'name': 'pantheon'}, {'id': 9669, 'synset': 'pantie.n.01', 'name': 'pantie'}, {'id': 9670, 'synset': 'panting.n.02', 'name': 'panting'}, {'id': 9671, 'synset': 'pant_leg.n.01', 'name': 'pant_leg'}, {'id': 9672, 'synset': 'pantograph.n.01', 'name': 'pantograph'}, {'id': 9673, 'synset': 'pantry.n.01', 'name': 'pantry'}, {'id': 9674, 'synset': 'pants_suit.n.01', 'name': 'pants_suit'}, {'id': 9675, 'synset': 'panty_girdle.n.01', 'name': 'panty_girdle'}, {'id': 9676, 'synset': 'panzer.n.01', 'name': 'panzer'}, {'id': 9677, 'synset': 'paper_chain.n.01', 'name': 'paper_chain'}, {'id': 9678, 'synset': 'paper_clip.n.01', 'name': 'paper_clip'}, {'id': 9679, 'synset': 'paper_cutter.n.01', 'name': 'paper_cutter'}, {'id': 9680, 'synset': 'paper_fastener.n.01', 'name': 'paper_fastener'}, {'id': 9681, 'synset': 'paper_feed.n.01', 'name': 'paper_feed'}, {'id': 9682, 'synset': 'paper_mill.n.01', 'name': 'paper_mill'}, {'id': 9683, 'synset': 'parabolic_mirror.n.01', 'name': 'parabolic_mirror'}, {'id': 9684, 'synset': 'parabolic_reflector.n.01', 'name': 'parabolic_reflector'}, {'id': 9685, 'synset': 'parallel_bars.n.01', 'name': 'parallel_bars'}, {'id': 9686, 'synset': 'parallel_circuit.n.01', 'name': 'parallel_circuit'}, {'id': 9687, 'synset': 'parallel_interface.n.01', 'name': 'parallel_interface'}, {'id': 9688, 'synset': 'parang.n.01', 'name': 'parang'}, {'id': 9689, 'synset': 'parapet.n.02', 'name': 'parapet'}, {'id': 9690, 'synset': 'parapet.n.01', 'name': 'parapet'}, {'id': 9691, 'synset': 'parer.n.02', 'name': 'parer'}, {'id': 9692, 'synset': 'parfait_glass.n.01', 'name': 'parfait_glass'}, {'id': 9693, 'synset': 'pargeting.n.02', 'name': 'pargeting'}, {'id': 9694, 'synset': 'pari-mutuel_machine.n.01', 'name': 'pari-mutuel_machine'}, {'id': 9695, 'synset': 'park_bench.n.01', 'name': 'park_bench'}, {'id': 9696, 'synset': 'parlor.n.01', 'name': 'parlor'}, {'id': 9697, 'synset': 'parquet.n.01', 'name': 'parquet'}, {'id': 9698, 'synset': 'parquetry.n.01', 'name': 'parquetry'}, {'id': 9699, 'synset': 'parsonage.n.01', 'name': 'parsonage'}, {'id': 9700, 'synset': 'parsons_table.n.01', 'name': 'Parsons_table'}, {'id': 9701, 'synset': 'partial_denture.n.01', 'name': 'partial_denture'}, {'id': 9702, 'synset': 'particle_detector.n.01', 'name': 'particle_detector'}, {'id': 9703, 'synset': 'partition.n.01', 'name': 'partition'}, {'id': 9704, 'synset': 'parts_bin.n.01', 'name': 'parts_bin'}, {'id': 9705, 'synset': 'party_line.n.02', 'name': 'party_line'}, {'id': 9706, 'synset': 'party_wall.n.01', 'name': 'party_wall'}, {'id': 9707, 'synset': 'parvis.n.01', 'name': 'parvis'}, {'id': 9708, 'synset': 'passenger_train.n.01', 'name': 'passenger_train'}, {'id': 9709, 'synset': 'passenger_van.n.01', 'name': 'passenger_van'}, {'id': 9710, 'synset': 'passe-partout.n.02', 'name': 'passe-partout'}, {'id': 9711, 'synset': 'passive_matrix_display.n.01', 'name': 'passive_matrix_display'}, {'id': 9712, 'synset': 'passkey.n.01', 'name': 'passkey'}, {'id': 9713, 'synset': 'pass-through.n.01', 'name': 'pass-through'}, {'id': 9714, 'synset': 'pastry_cart.n.01', 'name': 'pastry_cart'}, {'id': 9715, 'synset': 'patch.n.03', 'name': 'patch'}, {'id': 9716, 'synset': 'patchcord.n.01', 'name': 'patchcord'}, {'id': 9717, 'synset': 'patchouli.n.02', 'name': 'patchouli'}, {'id': 9718, 'synset': 'patch_pocket.n.01', 'name': 'patch_pocket'}, {'id': 9719, 'synset': 'patchwork.n.02', 'name': 'patchwork'}, {'id': 9720, 'synset': 'patent_log.n.01', 'name': 'patent_log'}, {'id': 9721, 'synset': 'paternoster.n.02', 'name': 'paternoster'}, {'id': 9722, 'synset': 'patina.n.01', 'name': 'patina'}, {'id': 9723, 'synset': 'patio.n.01', 'name': 'patio'}, {'id': 9724, 'synset': 'patisserie.n.01', 'name': 'patisserie'}, {'id': 9725, 'synset': 'patka.n.01', 'name': 'patka'}, {'id': 9726, 'synset': 'patrol_boat.n.01', 'name': 'patrol_boat'}, {'id': 9727, 'synset': 'patty-pan.n.01', 'name': 'patty-pan'}, {'id': 9728, 'synset': 'pave.n.01', 'name': 'pave'}, {'id': 9729, 'synset': 'pavilion.n.01', 'name': 'pavilion'}, {'id': 9730, 'synset': 'pavior.n.01', 'name': 'pavior'}, {'id': 9731, 'synset': 'pavis.n.01', 'name': 'pavis'}, {'id': 9732, 'synset': 'pawn.n.03', 'name': 'pawn'}, {'id': 9733, 'synset': "pawnbroker's_shop.n.01", 'name': "pawnbroker's_shop"}, {'id': 9734, 'synset': 'pay-phone.n.01', 'name': 'pay-phone'}, {'id': 9735, 'synset': 'pc_board.n.01', 'name': 'PC_board'}, {'id': 9736, 'synset': 'peach_orchard.n.01', 'name': 'peach_orchard'}, {'id': 9737, 'synset': 'pea_jacket.n.01', 'name': 'pea_jacket'}, {'id': 9738, 'synset': 'peavey.n.01', 'name': 'peavey'}, {'id': 9739, 'synset': 'pectoral.n.02', 'name': 'pectoral'}, {'id': 9740, 'synset': 'pedal.n.02', 'name': 'pedal'}, {'id': 9741, 'synset': 'pedal_pusher.n.01', 'name': 'pedal_pusher'}, {'id': 9742, 'synset': 'pedestal.n.03', 'name': 'pedestal'}, {'id': 9743, 'synset': 'pedestal_table.n.01', 'name': 'pedestal_table'}, {'id': 9744, 'synset': 'pedestrian_crossing.n.01', 'name': 'pedestrian_crossing'}, {'id': 9745, 'synset': 'pedicab.n.01', 'name': 'pedicab'}, {'id': 9746, 'synset': 'pediment.n.01', 'name': 'pediment'}, {'id': 9747, 'synset': 'pedometer.n.01', 'name': 'pedometer'}, {'id': 9748, 'synset': 'peep_sight.n.01', 'name': 'peep_sight'}, {'id': 9749, 'synset': 'peg.n.01', 'name': 'peg'}, {'id': 9750, 'synset': 'peg.n.06', 'name': 'peg'}, {'id': 9751, 'synset': 'peg.n.05', 'name': 'peg'}, {'id': 9752, 'synset': 'pelham.n.01', 'name': 'Pelham'}, {'id': 9753, 'synset': 'pelican_crossing.n.01', 'name': 'pelican_crossing'}, {'id': 9754, 'synset': 'pelisse.n.01', 'name': 'pelisse'}, {'id': 9755, 'synset': 'pelvimeter.n.01', 'name': 'pelvimeter'}, {'id': 9756, 'synset': 'penal_colony.n.01', 'name': 'penal_colony'}, {'id': 9757, 'synset': 'penal_institution.n.01', 'name': 'penal_institution'}, {'id': 9758, 'synset': 'penalty_box.n.01', 'name': 'penalty_box'}, {'id': 9759, 'synset': 'pen-and-ink.n.01', 'name': 'pen-and-ink'}, {'id': 9760, 'synset': 'pencil.n.04', 'name': 'pencil'}, {'id': 9761, 'synset': 'pendant_earring.n.01', 'name': 'pendant_earring'}, {'id': 9762, 'synset': 'pendulum_clock.n.01', 'name': 'pendulum_clock'}, {'id': 9763, 'synset': 'pendulum_watch.n.01', 'name': 'pendulum_watch'}, {'id': 9764, 'synset': 'penetration_bomb.n.01', 'name': 'penetration_bomb'}, {'id': 9765, 'synset': 'penile_implant.n.01', 'name': 'penile_implant'}, {'id': 9766, 'synset': 'penitentiary.n.01', 'name': 'penitentiary'}, {'id': 9767, 'synset': 'penknife.n.01', 'name': 'penknife'}, {'id': 9768, 'synset': 'penlight.n.01', 'name': 'penlight'}, {'id': 9769, 'synset': 'pennant.n.03', 'name': 'pennant'}, {'id': 9770, 'synset': 'pennywhistle.n.01', 'name': 'pennywhistle'}, {'id': 9771, 'synset': 'penthouse.n.01', 'name': 'penthouse'}, {'id': 9772, 'synset': 'pentode.n.01', 'name': 'pentode'}, {'id': 9773, 'synset': 'peplos.n.01', 'name': 'peplos'}, {'id': 9774, 'synset': 'peplum.n.01', 'name': 'peplum'}, {'id': 9775, 'synset': 'pepper_shaker.n.01', 'name': 'pepper_shaker'}, {'id': 9776, 'synset': 'pepper_spray.n.01', 'name': 'pepper_spray'}, {'id': 9777, 'synset': 'percale.n.01', 'name': 'percale'}, {'id': 9778, 'synset': 'percolator.n.01', 'name': 'percolator'}, {'id': 9779, 'synset': 'percussion_cap.n.01', 'name': 'percussion_cap'}, {'id': 9780, 'synset': 'percussion_instrument.n.01', 'name': 'percussion_instrument'}, {'id': 9781, 'synset': 'perforation.n.01', 'name': 'perforation'}, {'id': 9782, 'synset': 'perfumery.n.03', 'name': 'perfumery'}, {'id': 9783, 'synset': 'perfumery.n.02', 'name': 'perfumery'}, {'id': 9784, 'synset': 'perfumery.n.01', 'name': 'perfumery'}, {'id': 9785, 'synset': 'peripheral.n.01', 'name': 'peripheral'}, {'id': 9786, 'synset': 'periscope.n.01', 'name': 'periscope'}, {'id': 9787, 'synset': 'peristyle.n.01', 'name': 'peristyle'}, {'id': 9788, 'synset': 'periwig.n.01', 'name': 'periwig'}, {'id': 9789, 'synset': 'permanent_press.n.01', 'name': 'permanent_press'}, {'id': 9790, 'synset': 'perpetual_motion_machine.n.01', 'name': 'perpetual_motion_machine'}, {'id': 9791, 'synset': 'personal_computer.n.01', 'name': 'personal_computer'}, {'id': 9792, 'synset': 'personal_digital_assistant.n.01', 'name': 'personal_digital_assistant'}, {'id': 9793, 'synset': 'personnel_carrier.n.01', 'name': 'personnel_carrier'}, {'id': 9794, 'synset': 'pestle.n.03', 'name': 'pestle'}, {'id': 9795, 'synset': 'pestle.n.02', 'name': 'pestle'}, {'id': 9796, 'synset': 'petcock.n.01', 'name': 'petcock'}, {'id': 9797, 'synset': 'petri_dish.n.01', 'name': 'Petri_dish'}, {'id': 9798, 'synset': 'petrolatum_gauze.n.01', 'name': 'petrolatum_gauze'}, {'id': 9799, 'synset': 'pet_shop.n.01', 'name': 'pet_shop'}, {'id': 9800, 'synset': 'petticoat.n.01', 'name': 'petticoat'}, {'id': 9801, 'synset': 'phial.n.01', 'name': 'phial'}, {'id': 9802, 'synset': 'phillips_screw.n.01', 'name': 'Phillips_screw'}, {'id': 9803, 'synset': 'phillips_screwdriver.n.01', 'name': 'Phillips_screwdriver'}, {'id': 9804, 'synset': 'phonograph_needle.n.01', 'name': 'phonograph_needle'}, {'id': 9805, 'synset': 'photocathode.n.01', 'name': 'photocathode'}, {'id': 9806, 'synset': 'photocoagulator.n.01', 'name': 'photocoagulator'}, {'id': 9807, 'synset': 'photocopier.n.01', 'name': 'photocopier'}, {'id': 9808, 'synset': 'photographic_equipment.n.01', 'name': 'photographic_equipment'}, {'id': 9809, 'synset': 'photographic_paper.n.01', 'name': 'photographic_paper'}, {'id': 9810, 'synset': 'photometer.n.01', 'name': 'photometer'}, {'id': 9811, 'synset': 'photomicrograph.n.01', 'name': 'photomicrograph'}, {'id': 9812, 'synset': 'photostat.n.02', 'name': 'Photostat'}, {'id': 9813, 'synset': 'photostat.n.01', 'name': 'photostat'}, {'id': 9814, 'synset': 'physical_pendulum.n.01', 'name': 'physical_pendulum'}, {'id': 9815, 'synset': 'piano_action.n.01', 'name': 'piano_action'}, {'id': 9816, 'synset': 'piano_keyboard.n.01', 'name': 'piano_keyboard'}, {'id': 9817, 'synset': 'piano_wire.n.01', 'name': 'piano_wire'}, {'id': 9818, 'synset': 'piccolo.n.01', 'name': 'piccolo'}, {'id': 9819, 'synset': 'pick.n.07', 'name': 'pick'}, {'id': 9820, 'synset': 'pick.n.06', 'name': 'pick'}, {'id': 9821, 'synset': 'pick.n.05', 'name': 'pick'}, {'id': 9822, 'synset': 'pickelhaube.n.01', 'name': 'pickelhaube'}, {'id': 9823, 'synset': 'picket_boat.n.01', 'name': 'picket_boat'}, {'id': 9824, 'synset': 'picket_fence.n.01', 'name': 'picket_fence'}, {'id': 9825, 'synset': 'picket_ship.n.01', 'name': 'picket_ship'}, {'id': 9826, 'synset': 'pickle_barrel.n.01', 'name': 'pickle_barrel'}, {'id': 9827, 'synset': 'picture_frame.n.01', 'name': 'picture_frame'}, {'id': 9828, 'synset': 'picture_hat.n.01', 'name': 'picture_hat'}, {'id': 9829, 'synset': 'picture_rail.n.01', 'name': 'picture_rail'}, {'id': 9830, 'synset': 'picture_window.n.01', 'name': 'picture_window'}, {'id': 9831, 'synset': 'piece_of_cloth.n.01', 'name': 'piece_of_cloth'}, {'id': 9832, 'synset': 'pied-a-terre.n.01', 'name': 'pied-a-terre'}, {'id': 9833, 'synset': 'pier.n.03', 'name': 'pier'}, {'id': 9834, 'synset': 'pier.n.02', 'name': 'pier'}, {'id': 9835, 'synset': 'pier_arch.n.01', 'name': 'pier_arch'}, {'id': 9836, 'synset': 'pier_glass.n.01', 'name': 'pier_glass'}, {'id': 9837, 'synset': 'pier_table.n.01', 'name': 'pier_table'}, {'id': 9838, 'synset': 'pieta.n.01', 'name': 'pieta'}, {'id': 9839, 'synset': 'piezometer.n.01', 'name': 'piezometer'}, {'id': 9840, 'synset': 'pig_bed.n.01', 'name': 'pig_bed'}, {'id': 9841, 'synset': 'piggery.n.01', 'name': 'piggery'}, {'id': 9842, 'synset': 'pilaster.n.01', 'name': 'pilaster'}, {'id': 9843, 'synset': 'pile.n.06', 'name': 'pile'}, {'id': 9844, 'synset': 'pile_driver.n.01', 'name': 'pile_driver'}, {'id': 9845, 'synset': 'pill_bottle.n.01', 'name': 'pill_bottle'}, {'id': 9846, 'synset': 'pillbox.n.01', 'name': 'pillbox'}, {'id': 9847, 'synset': 'pillion.n.01', 'name': 'pillion'}, {'id': 9848, 'synset': 'pillory.n.01', 'name': 'pillory'}, {'id': 9849, 'synset': 'pillow_block.n.01', 'name': 'pillow_block'}, {'id': 9850, 'synset': 'pillow_lace.n.01', 'name': 'pillow_lace'}, {'id': 9851, 'synset': 'pillow_sham.n.01', 'name': 'pillow_sham'}, {'id': 9852, 'synset': 'pilot_bit.n.01', 'name': 'pilot_bit'}, {'id': 9853, 'synset': 'pilot_boat.n.01', 'name': 'pilot_boat'}, {'id': 9854, 'synset': 'pilot_burner.n.01', 'name': 'pilot_burner'}, {'id': 9855, 'synset': 'pilot_cloth.n.01', 'name': 'pilot_cloth'}, {'id': 9856, 'synset': 'pilot_engine.n.01', 'name': 'pilot_engine'}, {'id': 9857, 'synset': 'pilothouse.n.01', 'name': 'pilothouse'}, {'id': 9858, 'synset': 'pilot_light.n.02', 'name': 'pilot_light'}, {'id': 9859, 'synset': 'pin.n.08', 'name': 'pin'}, {'id': 9860, 'synset': 'pin.n.07', 'name': 'pin'}, {'id': 9861, 'synset': 'pinata.n.01', 'name': 'pinata'}, {'id': 9862, 'synset': 'pinball_machine.n.01', 'name': 'pinball_machine'}, {'id': 9863, 'synset': 'pince-nez.n.01', 'name': 'pince-nez'}, {'id': 9864, 'synset': 'pincer.n.01', 'name': 'pincer'}, {'id': 9865, 'synset': 'pinch_bar.n.01', 'name': 'pinch_bar'}, {'id': 9866, 'synset': 'pincurl_clip.n.01', 'name': 'pincurl_clip'}, {'id': 9867, 'synset': 'pinfold.n.01', 'name': 'pinfold'}, {'id': 9868, 'synset': 'pinhead.n.02', 'name': 'pinhead'}, {'id': 9869, 'synset': 'pinion.n.01', 'name': 'pinion'}, {'id': 9870, 'synset': 'pinnacle.n.01', 'name': 'pinnacle'}, {'id': 9871, 'synset': 'pinprick.n.02', 'name': 'pinprick'}, {'id': 9872, 'synset': 'pinstripe.n.03', 'name': 'pinstripe'}, {'id': 9873, 'synset': 'pinstripe.n.02', 'name': 'pinstripe'}, {'id': 9874, 'synset': 'pinstripe.n.01', 'name': 'pinstripe'}, {'id': 9875, 'synset': 'pintle.n.01', 'name': 'pintle'}, {'id': 9876, 'synset': 'pinwheel.n.02', 'name': 'pinwheel'}, {'id': 9877, 'synset': 'tabor_pipe.n.01', 'name': 'tabor_pipe'}, {'id': 9878, 'synset': 'pipe.n.04', 'name': 'pipe'}, {'id': 9879, 'synset': 'pipe_bomb.n.01', 'name': 'pipe_bomb'}, {'id': 9880, 'synset': 'pipe_cleaner.n.01', 'name': 'pipe_cleaner'}, {'id': 9881, 'synset': 'pipe_cutter.n.01', 'name': 'pipe_cutter'}, {'id': 9882, 'synset': 'pipefitting.n.01', 'name': 'pipefitting'}, {'id': 9883, 'synset': 'pipet.n.01', 'name': 'pipet'}, {'id': 9884, 'synset': 'pipe_vise.n.01', 'name': 'pipe_vise'}, {'id': 9885, 'synset': 'pipe_wrench.n.01', 'name': 'pipe_wrench'}, {'id': 9886, 'synset': 'pique.n.01', 'name': 'pique'}, {'id': 9887, 'synset': 'pirate.n.03', 'name': 'pirate'}, {'id': 9888, 'synset': 'piste.n.02', 'name': 'piste'}, {'id': 9889, 'synset': 'pistol_grip.n.01', 'name': 'pistol_grip'}, {'id': 9890, 'synset': 'piston.n.02', 'name': 'piston'}, {'id': 9891, 'synset': 'piston_ring.n.01', 'name': 'piston_ring'}, {'id': 9892, 'synset': 'piston_rod.n.01', 'name': 'piston_rod'}, {'id': 9893, 'synset': 'pit.n.07', 'name': 'pit'}, {'id': 9894, 'synset': 'pitching_wedge.n.01', 'name': 'pitching_wedge'}, {'id': 9895, 'synset': 'pitch_pipe.n.01', 'name': 'pitch_pipe'}, {'id': 9896, 'synset': 'pith_hat.n.01', 'name': 'pith_hat'}, {'id': 9897, 'synset': 'piton.n.01', 'name': 'piton'}, {'id': 9898, 'synset': 'pitot-static_tube.n.01', 'name': 'Pitot-static_tube'}, {'id': 9899, 'synset': 'pitot_tube.n.01', 'name': 'Pitot_tube'}, {'id': 9900, 'synset': 'pitsaw.n.01', 'name': 'pitsaw'}, {'id': 9901, 'synset': 'pivot.n.02', 'name': 'pivot'}, {'id': 9902, 'synset': 'pivoting_window.n.01', 'name': 'pivoting_window'}, {'id': 9903, 'synset': 'pizzeria.n.01', 'name': 'pizzeria'}, {'id': 9904, 'synset': 'place_of_business.n.01', 'name': 'place_of_business'}, {'id': 9905, 'synset': 'place_of_worship.n.01', 'name': 'place_of_worship'}, {'id': 9906, 'synset': 'placket.n.01', 'name': 'placket'}, {'id': 9907, 'synset': 'planchet.n.01', 'name': 'planchet'}, {'id': 9908, 'synset': 'plane.n.05', 'name': 'plane'}, {'id': 9909, 'synset': 'plane.n.04', 'name': 'plane'}, {'id': 9910, 'synset': 'plane_seat.n.01', 'name': 'plane_seat'}, {'id': 9911, 'synset': 'planetarium.n.03', 'name': 'planetarium'}, {'id': 9912, 'synset': 'planetarium.n.02', 'name': 'planetarium'}, {'id': 9913, 'synset': 'planetarium.n.01', 'name': 'planetarium'}, {'id': 9914, 'synset': 'planetary_gear.n.01', 'name': 'planetary_gear'}, {'id': 9915, 'synset': 'plank-bed.n.01', 'name': 'plank-bed'}, {'id': 9916, 'synset': 'planking.n.02', 'name': 'planking'}, {'id': 9917, 'synset': 'planner.n.02', 'name': 'planner'}, {'id': 9918, 'synset': 'plant.n.01', 'name': 'plant'}, {'id': 9919, 'synset': 'planter.n.03', 'name': 'planter'}, {'id': 9920, 'synset': 'plaster.n.05', 'name': 'plaster'}, {'id': 9921, 'synset': 'plasterboard.n.01', 'name': 'plasterboard'}, {'id': 9922, 'synset': 'plastering_trowel.n.01', 'name': 'plastering_trowel'}, {'id': 9923, 'synset': 'plastic_bag.n.01', 'name': 'plastic_bag'}, {'id': 9924, 'synset': 'plastic_bomb.n.01', 'name': 'plastic_bomb'}, {'id': 9925, 'synset': 'plastic_laminate.n.01', 'name': 'plastic_laminate'}, {'id': 9926, 'synset': 'plastic_wrap.n.01', 'name': 'plastic_wrap'}, {'id': 9927, 'synset': 'plastron.n.03', 'name': 'plastron'}, {'id': 9928, 'synset': 'plastron.n.02', 'name': 'plastron'}, {'id': 9929, 'synset': 'plastron.n.01', 'name': 'plastron'}, {'id': 9930, 'synset': 'plate.n.14', 'name': 'plate'}, {'id': 9931, 'synset': 'plate.n.13', 'name': 'plate'}, {'id': 9932, 'synset': 'plate.n.12', 'name': 'plate'}, {'id': 9933, 'synset': 'platen.n.03', 'name': 'platen'}, {'id': 9934, 'synset': 'platen.n.01', 'name': 'platen'}, {'id': 9935, 'synset': 'plate_rack.n.01', 'name': 'plate_rack'}, {'id': 9936, 'synset': 'plate_rail.n.01', 'name': 'plate_rail'}, {'id': 9937, 'synset': 'platform.n.01', 'name': 'platform'}, {'id': 9938, 'synset': 'platform.n.04', 'name': 'platform'}, {'id': 9939, 'synset': 'platform.n.03', 'name': 'platform'}, {'id': 9940, 'synset': 'platform_bed.n.01', 'name': 'platform_bed'}, {'id': 9941, 'synset': 'platform_rocker.n.01', 'name': 'platform_rocker'}, {'id': 9942, 'synset': 'plating.n.01', 'name': 'plating'}, {'id': 9943, 'synset': 'playback.n.02', 'name': 'playback'}, {'id': 9944, 'synset': 'playbox.n.01', 'name': 'playbox'}, {'id': 9945, 'synset': 'playground.n.02', 'name': 'playground'}, {'id': 9946, 'synset': 'playsuit.n.01', 'name': 'playsuit'}, {'id': 9947, 'synset': 'plaza.n.02', 'name': 'plaza'}, {'id': 9948, 'synset': 'pleat.n.01', 'name': 'pleat'}, {'id': 9949, 'synset': 'plenum.n.02', 'name': 'plenum'}, {'id': 9950, 'synset': 'plethysmograph.n.01', 'name': 'plethysmograph'}, {'id': 9951, 'synset': 'pleximeter.n.01', 'name': 'pleximeter'}, {'id': 9952, 'synset': 'plexor.n.01', 'name': 'plexor'}, {'id': 9953, 'synset': 'plimsoll.n.02', 'name': 'plimsoll'}, {'id': 9954, 'synset': 'plotter.n.04', 'name': 'plotter'}, {'id': 9955, 'synset': 'plug.n.01', 'name': 'plug'}, {'id': 9956, 'synset': 'plug.n.05', 'name': 'plug'}, {'id': 9957, 'synset': 'plug_fuse.n.01', 'name': 'plug_fuse'}, {'id': 9958, 'synset': 'plughole.n.01', 'name': 'plughole'}, {'id': 9959, 'synset': 'plumb_bob.n.01', 'name': 'plumb_bob'}, {'id': 9960, 'synset': 'plumb_level.n.01', 'name': 'plumb_level'}, {'id': 9961, 'synset': 'plunger.n.03', 'name': 'plunger'}, {'id': 9962, 'synset': 'plus_fours.n.01', 'name': 'plus_fours'}, {'id': 9963, 'synset': 'plush.n.01', 'name': 'plush'}, {'id': 9964, 'synset': 'plywood.n.01', 'name': 'plywood'}, {'id': 9965, 'synset': 'pneumatic_drill.n.01', 'name': 'pneumatic_drill'}, {'id': 9966, 'synset': 'p-n_junction.n.01', 'name': 'p-n_junction'}, {'id': 9967, 'synset': 'p-n-p_transistor.n.01', 'name': 'p-n-p_transistor'}, {'id': 9968, 'synset': 'poacher.n.02', 'name': 'poacher'}, {'id': 9969, 'synset': 'pocket.n.01', 'name': 'pocket'}, {'id': 9970, 'synset': 'pocket_battleship.n.01', 'name': 'pocket_battleship'}, {'id': 9971, 'synset': 'pocketcomb.n.01', 'name': 'pocketcomb'}, {'id': 9972, 'synset': 'pocket_flap.n.01', 'name': 'pocket_flap'}, {'id': 9973, 'synset': 'pocket-handkerchief.n.01', 'name': 'pocket-handkerchief'}, {'id': 9974, 'synset': 'pod.n.04', 'name': 'pod'}, {'id': 9975, 'synset': 'pogo_stick.n.01', 'name': 'pogo_stick'}, {'id': 9976, 'synset': 'point-and-shoot_camera.n.01', 'name': 'point-and-shoot_camera'}, {'id': 9977, 'synset': 'pointed_arch.n.01', 'name': 'pointed_arch'}, {'id': 9978, 'synset': 'pointing_trowel.n.01', 'name': 'pointing_trowel'}, {'id': 9979, 'synset': 'point_lace.n.01', 'name': 'point_lace'}, {'id': 9980, 'synset': 'polarimeter.n.01', 'name': 'polarimeter'}, {'id': 9981, 'synset': 'polaroid.n.01', 'name': 'Polaroid'}, {'id': 9982, 'synset': 'polaroid_camera.n.01', 'name': 'Polaroid_camera'}, {'id': 9983, 'synset': 'pole.n.09', 'name': 'pole'}, {'id': 9984, 'synset': 'poleax.n.02', 'name': 'poleax'}, {'id': 9985, 'synset': 'poleax.n.01', 'name': 'poleax'}, {'id': 9986, 'synset': 'police_boat.n.01', 'name': 'police_boat'}, {'id': 9987, 'synset': 'police_van.n.01', 'name': 'police_van'}, {'id': 9988, 'synset': 'polling_booth.n.01', 'name': 'polling_booth'}, {'id': 9989, 'synset': 'polo_ball.n.01', 'name': 'polo_ball'}, {'id': 9990, 'synset': 'polo_mallet.n.01', 'name': 'polo_mallet'}, {'id': 9991, 'synset': 'polonaise.n.01', 'name': 'polonaise'}, {'id': 9992, 'synset': 'polyester.n.03', 'name': 'polyester'}, {'id': 9993, 'synset': 'polygraph.n.01', 'name': 'polygraph'}, {'id': 9994, 'synset': 'pomade.n.01', 'name': 'pomade'}, {'id': 9995, 'synset': 'pommel_horse.n.01', 'name': 'pommel_horse'}, {'id': 9996, 'synset': 'pongee.n.01', 'name': 'pongee'}, {'id': 9997, 'synset': 'poniard.n.01', 'name': 'poniard'}, {'id': 9998, 'synset': 'pontifical.n.01', 'name': 'pontifical'}, {'id': 9999, 'synset': 'pontoon.n.01', 'name': 'pontoon'}, {'id': 10000, 'synset': 'pontoon_bridge.n.01', 'name': 'pontoon_bridge'}, {'id': 10001, 'synset': 'pony_cart.n.01', 'name': 'pony_cart'}, {'id': 10002, 'synset': 'pool_ball.n.01', 'name': 'pool_ball'}, {'id': 10003, 'synset': 'poolroom.n.01', 'name': 'poolroom'}, {'id': 10004, 'synset': 'poop_deck.n.01', 'name': 'poop_deck'}, {'id': 10005, 'synset': 'poor_box.n.01', 'name': 'poor_box'}, {'id': 10006, 'synset': 'poorhouse.n.01', 'name': 'poorhouse'}, {'id': 10007, 'synset': 'pop_bottle.n.01', 'name': 'pop_bottle'}, {'id': 10008, 'synset': 'popgun.n.01', 'name': 'popgun'}, {'id': 10009, 'synset': 'poplin.n.01', 'name': 'poplin'}, {'id': 10010, 'synset': 'popper.n.03', 'name': 'popper'}, {'id': 10011, 'synset': 'poppet.n.01', 'name': 'poppet'}, {'id': 10012, 'synset': 'pop_tent.n.01', 'name': 'pop_tent'}, {'id': 10013, 'synset': 'porcelain.n.01', 'name': 'porcelain'}, {'id': 10014, 'synset': 'porch.n.01', 'name': 'porch'}, {'id': 10015, 'synset': 'porkpie.n.01', 'name': 'porkpie'}, {'id': 10016, 'synset': 'porringer.n.01', 'name': 'porringer'}, {'id': 10017, 'synset': 'portable.n.01', 'name': 'portable'}, {'id': 10018, 'synset': 'portable_computer.n.01', 'name': 'portable_computer'}, {'id': 10019, 'synset': 'portable_circular_saw.n.01', 'name': 'portable_circular_saw'}, {'id': 10020, 'synset': 'portcullis.n.01', 'name': 'portcullis'}, {'id': 10021, 'synset': 'porte-cochere.n.02', 'name': 'porte-cochere'}, {'id': 10022, 'synset': 'porte-cochere.n.01', 'name': 'porte-cochere'}, {'id': 10023, 'synset': 'portfolio.n.01', 'name': 'portfolio'}, {'id': 10024, 'synset': 'porthole.n.01', 'name': 'porthole'}, {'id': 10025, 'synset': 'portico.n.01', 'name': 'portico'}, {'id': 10026, 'synset': 'portiere.n.01', 'name': 'portiere'}, {'id': 10027, 'synset': 'portmanteau.n.02', 'name': 'portmanteau'}, {'id': 10028, 'synset': 'portrait_camera.n.01', 'name': 'portrait_camera'}, {'id': 10029, 'synset': 'portrait_lens.n.01', 'name': 'portrait_lens'}, {'id': 10030, 'synset': 'positive_pole.n.02', 'name': 'positive_pole'}, {'id': 10031, 'synset': 'positive_pole.n.01', 'name': 'positive_pole'}, {'id': 10032, 'synset': 'positron_emission_tomography_scanner.n.01', 'name': 'positron_emission_tomography_scanner'}, {'id': 10033, 'synset': 'post.n.04', 'name': 'post'}, {'id': 10034, 'synset': 'postage_meter.n.01', 'name': 'postage_meter'}, {'id': 10035, 'synset': 'post_and_lintel.n.01', 'name': 'post_and_lintel'}, {'id': 10036, 'synset': 'post_chaise.n.01', 'name': 'post_chaise'}, {'id': 10037, 'synset': 'postern.n.01', 'name': 'postern'}, {'id': 10038, 'synset': 'post_exchange.n.01', 'name': 'post_exchange'}, {'id': 10039, 'synset': 'posthole_digger.n.01', 'name': 'posthole_digger'}, {'id': 10040, 'synset': 'post_horn.n.01', 'name': 'post_horn'}, {'id': 10041, 'synset': 'posthouse.n.01', 'name': 'posthouse'}, {'id': 10042, 'synset': 'potbelly.n.02', 'name': 'potbelly'}, {'id': 10043, 'synset': 'potemkin_village.n.01', 'name': 'Potemkin_village'}, {'id': 10044, 'synset': 'potential_divider.n.01', 'name': 'potential_divider'}, {'id': 10045, 'synset': 'potentiometer.n.02', 'name': 'potentiometer'}, {'id': 10046, 'synset': 'potentiometer.n.01', 'name': 'potentiometer'}, {'id': 10047, 'synset': 'potpourri.n.03', 'name': 'potpourri'}, {'id': 10048, 'synset': 'potsherd.n.01', 'name': 'potsherd'}, {'id': 10049, 'synset': "potter's_wheel.n.01", 'name': "potter's_wheel"}, {'id': 10050, 'synset': 'pottle.n.01', 'name': 'pottle'}, {'id': 10051, 'synset': 'potty_seat.n.01', 'name': 'potty_seat'}, {'id': 10052, 'synset': 'poultice.n.01', 'name': 'poultice'}, {'id': 10053, 'synset': 'pound.n.13', 'name': 'pound'}, {'id': 10054, 'synset': 'pound_net.n.01', 'name': 'pound_net'}, {'id': 10055, 'synset': 'powder.n.03', 'name': 'powder'}, {'id': 10056, 'synset': 'powder_and_shot.n.01', 'name': 'powder_and_shot'}, {'id': 10057, 'synset': 'powdered_mustard.n.01', 'name': 'powdered_mustard'}, {'id': 10058, 'synset': 'powder_horn.n.01', 'name': 'powder_horn'}, {'id': 10059, 'synset': 'powder_keg.n.02', 'name': 'powder_keg'}, {'id': 10060, 'synset': 'power_brake.n.01', 'name': 'power_brake'}, {'id': 10061, 'synset': 'power_cord.n.01', 'name': 'power_cord'}, {'id': 10062, 'synset': 'power_drill.n.01', 'name': 'power_drill'}, {'id': 10063, 'synset': 'power_line.n.01', 'name': 'power_line'}, {'id': 10064, 'synset': 'power_loom.n.01', 'name': 'power_loom'}, {'id': 10065, 'synset': 'power_mower.n.01', 'name': 'power_mower'}, {'id': 10066, 'synset': 'power_pack.n.01', 'name': 'power_pack'}, {'id': 10067, 'synset': 'power_saw.n.01', 'name': 'power_saw'}, {'id': 10068, 'synset': 'power_steering.n.01', 'name': 'power_steering'}, {'id': 10069, 'synset': 'power_takeoff.n.01', 'name': 'power_takeoff'}, {'id': 10070, 'synset': 'power_tool.n.01', 'name': 'power_tool'}, {'id': 10071, 'synset': 'praetorium.n.01', 'name': 'praetorium'}, {'id': 10072, 'synset': 'prayer_rug.n.01', 'name': 'prayer_rug'}, {'id': 10073, 'synset': 'prayer_shawl.n.01', 'name': 'prayer_shawl'}, {'id': 10074, 'synset': 'precipitator.n.01', 'name': 'precipitator'}, {'id': 10075, 'synset': 'prefab.n.01', 'name': 'prefab'}, {'id': 10076, 'synset': 'presbytery.n.01', 'name': 'presbytery'}, {'id': 10077, 'synset': 'presence_chamber.n.01', 'name': 'presence_chamber'}, {'id': 10078, 'synset': 'press.n.07', 'name': 'press'}, {'id': 10079, 'synset': 'press.n.03', 'name': 'press'}, {'id': 10080, 'synset': 'press.n.06', 'name': 'press'}, {'id': 10081, 'synset': 'press_box.n.01', 'name': 'press_box'}, {'id': 10082, 'synset': 'press_gallery.n.01', 'name': 'press_gallery'}, {'id': 10083, 'synset': 'press_of_sail.n.01', 'name': 'press_of_sail'}, {'id': 10084, 'synset': 'pressure_cabin.n.01', 'name': 'pressure_cabin'}, {'id': 10085, 'synset': 'pressure_cooker.n.01', 'name': 'pressure_cooker'}, {'id': 10086, 'synset': 'pressure_dome.n.01', 'name': 'pressure_dome'}, {'id': 10087, 'synset': 'pressure_gauge.n.01', 'name': 'pressure_gauge'}, {'id': 10088, 'synset': 'pressurized_water_reactor.n.01', 'name': 'pressurized_water_reactor'}, {'id': 10089, 'synset': 'pressure_suit.n.01', 'name': 'pressure_suit'}, {'id': 10090, 'synset': 'pricket.n.01', 'name': 'pricket'}, {'id': 10091, 'synset': 'prie-dieu.n.01', 'name': 'prie-dieu'}, {'id': 10092, 'synset': 'primary_coil.n.01', 'name': 'primary_coil'}, {'id': 10093, 'synset': 'primus_stove.n.01', 'name': 'Primus_stove'}, {'id': 10094, 'synset': 'prince_albert.n.02', 'name': 'Prince_Albert'}, {'id': 10095, 'synset': 'print.n.06', 'name': 'print'}, {'id': 10096, 'synset': 'print_buffer.n.01', 'name': 'print_buffer'}, {'id': 10097, 'synset': 'printed_circuit.n.01', 'name': 'printed_circuit'}, {'id': 10098, 'synset': 'printer.n.02', 'name': 'printer'}, {'id': 10099, 'synset': 'printer_cable.n.01', 'name': 'printer_cable'}, {'id': 10100, 'synset': 'priory.n.01', 'name': 'priory'}, {'id': 10101, 'synset': 'prison.n.01', 'name': 'prison'}, {'id': 10102, 'synset': 'prison_camp.n.01', 'name': 'prison_camp'}, {'id': 10103, 'synset': 'privateer.n.02', 'name': 'privateer'}, {'id': 10104, 'synset': 'private_line.n.01', 'name': 'private_line'}, {'id': 10105, 'synset': 'privet_hedge.n.01', 'name': 'privet_hedge'}, {'id': 10106, 'synset': 'probe.n.02', 'name': 'probe'}, {'id': 10107, 'synset': 'proctoscope.n.01', 'name': 'proctoscope'}, {'id': 10108, 'synset': 'prod.n.02', 'name': 'prod'}, {'id': 10109, 'synset': 'production_line.n.01', 'name': 'production_line'}, {'id': 10110, 'synset': 'projector.n.01', 'name': 'projector'}, {'id': 10111, 'synset': 'prolonge.n.01', 'name': 'prolonge'}, {'id': 10112, 'synset': 'prolonge_knot.n.01', 'name': 'prolonge_knot'}, {'id': 10113, 'synset': 'prompter.n.02', 'name': 'prompter'}, {'id': 10114, 'synset': 'prong.n.01', 'name': 'prong'}, {'id': 10115, 'synset': 'propeller_plane.n.01', 'name': 'propeller_plane'}, {'id': 10116, 'synset': 'propjet.n.01', 'name': 'propjet'}, {'id': 10117, 'synset': 'proportional_counter_tube.n.01', 'name': 'proportional_counter_tube'}, {'id': 10118, 'synset': 'propulsion_system.n.01', 'name': 'propulsion_system'}, {'id': 10119, 'synset': 'proscenium.n.02', 'name': 'proscenium'}, {'id': 10120, 'synset': 'proscenium_arch.n.01', 'name': 'proscenium_arch'}, {'id': 10121, 'synset': 'prosthesis.n.01', 'name': 'prosthesis'}, {'id': 10122, 'synset': 'protective_covering.n.01', 'name': 'protective_covering'}, {'id': 10123, 'synset': 'protective_garment.n.01', 'name': 'protective_garment'}, {'id': 10124, 'synset': 'proton_accelerator.n.01', 'name': 'proton_accelerator'}, {'id': 10125, 'synset': 'protractor.n.01', 'name': 'protractor'}, {'id': 10126, 'synset': 'pruner.n.02', 'name': 'pruner'}, {'id': 10127, 'synset': 'pruning_knife.n.01', 'name': 'pruning_knife'}, {'id': 10128, 'synset': 'pruning_saw.n.01', 'name': 'pruning_saw'}, {'id': 10129, 'synset': 'pruning_shears.n.01', 'name': 'pruning_shears'}, {'id': 10130, 'synset': 'psaltery.n.01', 'name': 'psaltery'}, {'id': 10131, 'synset': 'psychrometer.n.01', 'name': 'psychrometer'}, {'id': 10132, 'synset': 'pt_boat.n.01', 'name': 'PT_boat'}, {'id': 10133, 'synset': 'public_address_system.n.01', 'name': 'public_address_system'}, {'id': 10134, 'synset': 'public_house.n.01', 'name': 'public_house'}, {'id': 10135, 'synset': 'public_toilet.n.01', 'name': 'public_toilet'}, {'id': 10136, 'synset': 'public_transport.n.01', 'name': 'public_transport'}, {'id': 10137, 'synset': 'public_works.n.01', 'name': 'public_works'}, {'id': 10138, 'synset': 'puck.n.02', 'name': 'puck'}, {'id': 10139, 'synset': 'pull.n.04', 'name': 'pull'}, {'id': 10140, 'synset': 'pullback.n.01', 'name': 'pullback'}, {'id': 10141, 'synset': 'pull_chain.n.01', 'name': 'pull_chain'}, {'id': 10142, 'synset': 'pulley.n.01', 'name': 'pulley'}, {'id': 10143, 'synset': 'pull-off.n.01', 'name': 'pull-off'}, {'id': 10144, 'synset': 'pullman.n.01', 'name': 'Pullman'}, {'id': 10145, 'synset': 'pullover.n.01', 'name': 'pullover'}, {'id': 10146, 'synset': 'pull-through.n.01', 'name': 'pull-through'}, {'id': 10147, 'synset': 'pulse_counter.n.01', 'name': 'pulse_counter'}, {'id': 10148, 'synset': 'pulse_generator.n.01', 'name': 'pulse_generator'}, {'id': 10149, 'synset': 'pulse_timing_circuit.n.01', 'name': 'pulse_timing_circuit'}, {'id': 10150, 'synset': 'pump.n.01', 'name': 'pump'}, {'id': 10151, 'synset': 'pump.n.03', 'name': 'pump'}, {'id': 10152, 'synset': 'pump_action.n.01', 'name': 'pump_action'}, {'id': 10153, 'synset': 'pump_house.n.01', 'name': 'pump_house'}, {'id': 10154, 'synset': 'pump_room.n.01', 'name': 'pump_room'}, {'id': 10155, 'synset': 'pump-type_pliers.n.01', 'name': 'pump-type_pliers'}, {'id': 10156, 'synset': 'pump_well.n.01', 'name': 'pump_well'}, {'id': 10157, 'synset': 'punchboard.n.01', 'name': 'punchboard'}, {'id': 10158, 'synset': 'punch_bowl.n.01', 'name': 'punch_bowl'}, {'id': 10159, 'synset': 'punching_bag.n.02', 'name': 'punching_bag'}, {'id': 10160, 'synset': 'punch_pliers.n.01', 'name': 'punch_pliers'}, {'id': 10161, 'synset': 'punch_press.n.01', 'name': 'punch_press'}, {'id': 10162, 'synset': 'punnet.n.01', 'name': 'punnet'}, {'id': 10163, 'synset': 'punt.n.02', 'name': 'punt'}, {'id': 10164, 'synset': 'pup_tent.n.01', 'name': 'pup_tent'}, {'id': 10165, 'synset': 'purdah.n.03', 'name': 'purdah'}, {'id': 10166, 'synset': 'purifier.n.01', 'name': 'purifier'}, {'id': 10167, 'synset': 'purl.n.02', 'name': 'purl'}, {'id': 10168, 'synset': 'purse.n.03', 'name': 'purse'}, {'id': 10169, 'synset': 'push-bike.n.01', 'name': 'push-bike'}, {'id': 10170, 'synset': 'push_broom.n.01', 'name': 'push_broom'}, {'id': 10171, 'synset': 'push_button.n.01', 'name': 'push_button'}, {'id': 10172, 'synset': 'push-button_radio.n.01', 'name': 'push-button_radio'}, {'id': 10173, 'synset': 'pusher.n.04', 'name': 'pusher'}, {'id': 10174, 'synset': 'put-put.n.01', 'name': 'put-put'}, {'id': 10175, 'synset': 'puttee.n.01', 'name': 'puttee'}, {'id': 10176, 'synset': 'putter.n.02', 'name': 'putter'}, {'id': 10177, 'synset': 'putty_knife.n.01', 'name': 'putty_knife'}, {'id': 10178, 'synset': 'puzzle.n.02', 'name': 'puzzle'}, {'id': 10179, 'synset': 'pylon.n.02', 'name': 'pylon'}, {'id': 10180, 'synset': 'pylon.n.01', 'name': 'pylon'}, {'id': 10181, 'synset': 'pyramidal_tent.n.01', 'name': 'pyramidal_tent'}, {'id': 10182, 'synset': 'pyrograph.n.01', 'name': 'pyrograph'}, {'id': 10183, 'synset': 'pyrometer.n.01', 'name': 'pyrometer'}, {'id': 10184, 'synset': 'pyrometric_cone.n.01', 'name': 'pyrometric_cone'}, {'id': 10185, 'synset': 'pyrostat.n.01', 'name': 'pyrostat'}, {'id': 10186, 'synset': 'pyx.n.02', 'name': 'pyx'}, {'id': 10187, 'synset': 'pyx.n.01', 'name': 'pyx'}, {'id': 10188, 'synset': 'pyxis.n.03', 'name': 'pyxis'}, {'id': 10189, 'synset': 'quad.n.04', 'name': 'quad'}, {'id': 10190, 'synset': 'quadrant.n.04', 'name': 'quadrant'}, {'id': 10191, 'synset': 'quadraphony.n.01', 'name': 'quadraphony'}, {'id': 10192, 'synset': 'quartering.n.02', 'name': 'quartering'}, {'id': 10193, 'synset': 'quarterstaff.n.01', 'name': 'quarterstaff'}, {'id': 10194, 'synset': 'quartz_battery.n.01', 'name': 'quartz_battery'}, {'id': 10195, 'synset': 'quartz_lamp.n.01', 'name': 'quartz_lamp'}, {'id': 10196, 'synset': 'queen.n.08', 'name': 'queen'}, {'id': 10197, 'synset': 'queen.n.07', 'name': 'queen'}, {'id': 10198, 'synset': 'queen_post.n.01', 'name': 'queen_post'}, {'id': 10199, 'synset': 'quern.n.01', 'name': 'quern'}, {'id': 10200, 'synset': 'quill.n.01', 'name': 'quill'}, {'id': 10201, 'synset': 'quilted_bedspread.n.01', 'name': 'quilted_bedspread'}, {'id': 10202, 'synset': 'quilting.n.02', 'name': 'quilting'}, {'id': 10203, 'synset': 'quipu.n.01', 'name': 'quipu'}, {'id': 10204, 'synset': 'quirk_molding.n.01', 'name': 'quirk_molding'}, {'id': 10205, 'synset': 'quirt.n.01', 'name': 'quirt'}, {'id': 10206, 'synset': 'quiver.n.03', 'name': 'quiver'}, {'id': 10207, 'synset': 'quoin.n.02', 'name': 'quoin'}, {'id': 10208, 'synset': 'quoit.n.01', 'name': 'quoit'}, {'id': 10209, 'synset': 'qwerty_keyboard.n.01', 'name': 'QWERTY_keyboard'}, {'id': 10210, 'synset': 'rabbet.n.01', 'name': 'rabbet'}, {'id': 10211, 'synset': 'rabbet_joint.n.01', 'name': 'rabbet_joint'}, {'id': 10212, 'synset': 'rabbit_ears.n.01', 'name': 'rabbit_ears'}, {'id': 10213, 'synset': 'rabbit_hutch.n.01', 'name': 'rabbit_hutch'}, {'id': 10214, 'synset': 'raceabout.n.01', 'name': 'raceabout'}, {'id': 10215, 'synset': 'raceway.n.01', 'name': 'raceway'}, {'id': 10216, 'synset': 'racing_boat.n.01', 'name': 'racing_boat'}, {'id': 10217, 'synset': 'racing_gig.n.01', 'name': 'racing_gig'}, {'id': 10218, 'synset': 'racing_skiff.n.01', 'name': 'racing_skiff'}, {'id': 10219, 'synset': 'rack.n.05', 'name': 'rack'}, {'id': 10220, 'synset': 'rack.n.01', 'name': 'rack'}, {'id': 10221, 'synset': 'rack.n.04', 'name': 'rack'}, {'id': 10222, 'synset': 'rack_and_pinion.n.01', 'name': 'rack_and_pinion'}, {'id': 10223, 'synset': 'racquetball.n.01', 'name': 'racquetball'}, {'id': 10224, 'synset': 'radial.n.01', 'name': 'radial'}, {'id': 10225, 'synset': 'radial_engine.n.01', 'name': 'radial_engine'}, {'id': 10226, 'synset': 'radiation_pyrometer.n.01', 'name': 'radiation_pyrometer'}, {'id': 10227, 'synset': 'radiator.n.02', 'name': 'radiator'}, {'id': 10228, 'synset': 'radiator_cap.n.01', 'name': 'radiator_cap'}, {'id': 10229, 'synset': 'radiator_hose.n.01', 'name': 'radiator_hose'}, {'id': 10230, 'synset': 'radio.n.03', 'name': 'radio'}, {'id': 10231, 'synset': 'radio_antenna.n.01', 'name': 'radio_antenna'}, {'id': 10232, 'synset': 'radio_chassis.n.01', 'name': 'radio_chassis'}, {'id': 10233, 'synset': 'radio_compass.n.01', 'name': 'radio_compass'}, {'id': 10234, 'synset': 'radiogram.n.02', 'name': 'radiogram'}, {'id': 10235, 'synset': 'radio_interferometer.n.01', 'name': 'radio_interferometer'}, {'id': 10236, 'synset': 'radio_link.n.01', 'name': 'radio_link'}, {'id': 10237, 'synset': 'radiometer.n.01', 'name': 'radiometer'}, {'id': 10238, 'synset': 'radiomicrometer.n.01', 'name': 'radiomicrometer'}, {'id': 10239, 'synset': 'radio-phonograph.n.01', 'name': 'radio-phonograph'}, {'id': 10240, 'synset': 'radiotelegraph.n.02', 'name': 'radiotelegraph'}, {'id': 10241, 'synset': 'radiotelephone.n.02', 'name': 'radiotelephone'}, {'id': 10242, 'synset': 'radio_telescope.n.01', 'name': 'radio_telescope'}, {'id': 10243, 'synset': 'radiotherapy_equipment.n.01', 'name': 'radiotherapy_equipment'}, {'id': 10244, 'synset': 'radio_transmitter.n.01', 'name': 'radio_transmitter'}, {'id': 10245, 'synset': 'radome.n.01', 'name': 'radome'}, {'id': 10246, 'synset': 'rafter.n.01', 'name': 'rafter'}, {'id': 10247, 'synset': 'raft_foundation.n.01', 'name': 'raft_foundation'}, {'id': 10248, 'synset': 'rag.n.01', 'name': 'rag'}, {'id': 10249, 'synset': 'ragbag.n.02', 'name': 'ragbag'}, {'id': 10250, 'synset': 'raglan.n.01', 'name': 'raglan'}, {'id': 10251, 'synset': 'raglan_sleeve.n.01', 'name': 'raglan_sleeve'}, {'id': 10252, 'synset': 'rail.n.04', 'name': 'rail'}, {'id': 10253, 'synset': 'rail_fence.n.01', 'name': 'rail_fence'}, {'id': 10254, 'synset': 'railhead.n.01', 'name': 'railhead'}, {'id': 10255, 'synset': 'railing.n.01', 'name': 'railing'}, {'id': 10256, 'synset': 'railing.n.02', 'name': 'railing'}, {'id': 10257, 'synset': 'railroad_bed.n.01', 'name': 'railroad_bed'}, {'id': 10258, 'synset': 'railroad_tunnel.n.01', 'name': 'railroad_tunnel'}, {'id': 10259, 'synset': 'rain_barrel.n.01', 'name': 'rain_barrel'}, {'id': 10260, 'synset': 'rain_gauge.n.01', 'name': 'rain_gauge'}, {'id': 10261, 'synset': 'rain_stick.n.01', 'name': 'rain_stick'}, {'id': 10262, 'synset': 'rake.n.03', 'name': 'rake'}, {'id': 10263, 'synset': 'rake_handle.n.01', 'name': 'rake_handle'}, {'id': 10264, 'synset': 'ram_disk.n.01', 'name': 'RAM_disk'}, {'id': 10265, 'synset': 'ramekin.n.02', 'name': 'ramekin'}, {'id': 10266, 'synset': 'ramjet.n.01', 'name': 'ramjet'}, {'id': 10267, 'synset': 'rammer.n.01', 'name': 'rammer'}, {'id': 10268, 'synset': 'ramp.n.01', 'name': 'ramp'}, {'id': 10269, 'synset': 'rampant_arch.n.01', 'name': 'rampant_arch'}, {'id': 10270, 'synset': 'rampart.n.01', 'name': 'rampart'}, {'id': 10271, 'synset': 'ramrod.n.01', 'name': 'ramrod'}, {'id': 10272, 'synset': 'ramrod.n.03', 'name': 'ramrod'}, {'id': 10273, 'synset': 'ranch.n.01', 'name': 'ranch'}, {'id': 10274, 'synset': 'ranch_house.n.01', 'name': 'ranch_house'}, {'id': 10275, 'synset': 'random-access_memory.n.01', 'name': 'random-access_memory'}, {'id': 10276, 'synset': 'rangefinder.n.01', 'name': 'rangefinder'}, {'id': 10277, 'synset': 'range_hood.n.01', 'name': 'range_hood'}, {'id': 10278, 'synset': 'range_pole.n.01', 'name': 'range_pole'}, {'id': 10279, 'synset': 'rapier.n.01', 'name': 'rapier'}, {'id': 10280, 'synset': 'rariora.n.01', 'name': 'rariora'}, {'id': 10281, 'synset': 'rasp.n.02', 'name': 'rasp'}, {'id': 10282, 'synset': 'ratchet.n.01', 'name': 'ratchet'}, {'id': 10283, 'synset': 'ratchet_wheel.n.01', 'name': 'ratchet_wheel'}, {'id': 10284, 'synset': 'rathskeller.n.01', 'name': 'rathskeller'}, {'id': 10285, 'synset': 'ratline.n.01', 'name': 'ratline'}, {'id': 10286, 'synset': 'rat-tail_file.n.01', 'name': 'rat-tail_file'}, {'id': 10287, 'synset': 'rattan.n.03', 'name': 'rattan'}, {'id': 10288, 'synset': 'rattrap.n.03', 'name': 'rattrap'}, {'id': 10289, 'synset': 'rayon.n.01', 'name': 'rayon'}, {'id': 10290, 'synset': 'razor.n.01', 'name': 'razor'}, {'id': 10291, 'synset': 'reaction-propulsion_engine.n.01', 'name': 'reaction-propulsion_engine'}, {'id': 10292, 'synset': 'reaction_turbine.n.01', 'name': 'reaction_turbine'}, {'id': 10293, 'synset': 'reactor.n.01', 'name': 'reactor'}, {'id': 10294, 'synset': 'reading_lamp.n.01', 'name': 'reading_lamp'}, {'id': 10295, 'synset': 'reading_room.n.01', 'name': 'reading_room'}, {'id': 10296, 'synset': 'read-only_memory.n.01', 'name': 'read-only_memory'}, {'id': 10297, 'synset': 'read-only_memory_chip.n.01', 'name': 'read-only_memory_chip'}, {'id': 10298, 'synset': 'readout.n.03', 'name': 'readout'}, {'id': 10299, 'synset': 'read/write_head.n.01', 'name': 'read/write_head'}, {'id': 10300, 'synset': 'ready-to-wear.n.01', 'name': 'ready-to-wear'}, {'id': 10301, 'synset': 'real_storage.n.01', 'name': 'real_storage'}, {'id': 10302, 'synset': 'reamer.n.02', 'name': 'reamer'}, {'id': 10303, 'synset': 'reaumur_thermometer.n.01', 'name': 'Reaumur_thermometer'}, {'id': 10304, 'synset': 'rebozo.n.01', 'name': 'rebozo'}, {'id': 10305, 'synset': 'receiver.n.01', 'name': 'receiver'}, {'id': 10306, 'synset': 'receptacle.n.01', 'name': 'receptacle'}, {'id': 10307, 'synset': 'reception_desk.n.01', 'name': 'reception_desk'}, {'id': 10308, 'synset': 'reception_room.n.01', 'name': 'reception_room'}, {'id': 10309, 'synset': 'recess.n.04', 'name': 'recess'}, {'id': 10310, 'synset': 'reciprocating_engine.n.01', 'name': 'reciprocating_engine'}, {'id': 10311, 'synset': 'reconnaissance_plane.n.01', 'name': 'reconnaissance_plane'}, {'id': 10312, 'synset': 'reconnaissance_vehicle.n.01', 'name': 'reconnaissance_vehicle'}, {'id': 10313, 'synset': 'record_changer.n.01', 'name': 'record_changer'}, {'id': 10314, 'synset': 'recorder.n.01', 'name': 'recorder'}, {'id': 10315, 'synset': 'recording.n.03', 'name': 'recording'}, {'id': 10316, 'synset': 'recording_system.n.01', 'name': 'recording_system'}, {'id': 10317, 'synset': 'record_sleeve.n.01', 'name': 'record_sleeve'}, {'id': 10318, 'synset': 'recovery_room.n.01', 'name': 'recovery_room'}, {'id': 10319, 'synset': 'recreational_vehicle.n.01', 'name': 'recreational_vehicle'}, {'id': 10320, 'synset': 'recreation_room.n.01', 'name': 'recreation_room'}, {'id': 10321, 'synset': 'recycling_bin.n.01', 'name': 'recycling_bin'}, {'id': 10322, 'synset': 'recycling_plant.n.01', 'name': 'recycling_plant'}, {'id': 10323, 'synset': 'redbrick_university.n.01', 'name': 'redbrick_university'}, {'id': 10324, 'synset': 'red_carpet.n.01', 'name': 'red_carpet'}, {'id': 10325, 'synset': 'redoubt.n.02', 'name': 'redoubt'}, {'id': 10326, 'synset': 'redoubt.n.01', 'name': 'redoubt'}, {'id': 10327, 'synset': 'reduction_gear.n.01', 'name': 'reduction_gear'}, {'id': 10328, 'synset': 'reed_pipe.n.01', 'name': 'reed_pipe'}, {'id': 10329, 'synset': 'reed_stop.n.01', 'name': 'reed_stop'}, {'id': 10330, 'synset': 'reef_knot.n.01', 'name': 'reef_knot'}, {'id': 10331, 'synset': 'reel.n.03', 'name': 'reel'}, {'id': 10332, 'synset': 'reel.n.01', 'name': 'reel'}, {'id': 10333, 'synset': 'refectory.n.01', 'name': 'refectory'}, {'id': 10334, 'synset': 'refectory_table.n.01', 'name': 'refectory_table'}, {'id': 10335, 'synset': 'refinery.n.01', 'name': 'refinery'}, {'id': 10336, 'synset': 'reflecting_telescope.n.01', 'name': 'reflecting_telescope'}, {'id': 10337, 'synset': 'reflectometer.n.01', 'name': 'reflectometer'}, {'id': 10338, 'synset': 'reflex_camera.n.01', 'name': 'reflex_camera'}, {'id': 10339, 'synset': 'reflux_condenser.n.01', 'name': 'reflux_condenser'}, {'id': 10340, 'synset': 'reformatory.n.01', 'name': 'reformatory'}, {'id': 10341, 'synset': 'reformer.n.02', 'name': 'reformer'}, {'id': 10342, 'synset': 'refracting_telescope.n.01', 'name': 'refracting_telescope'}, {'id': 10343, 'synset': 'refractometer.n.01', 'name': 'refractometer'}, {'id': 10344, 'synset': 'refrigeration_system.n.01', 'name': 'refrigeration_system'}, {'id': 10345, 'synset': 'refrigerator.n.01', 'name': 'refrigerator'}, {'id': 10346, 'synset': 'refrigerator_car.n.01', 'name': 'refrigerator_car'}, {'id': 10347, 'synset': 'refuge.n.03', 'name': 'refuge'}, {'id': 10348, 'synset': 'regalia.n.01', 'name': 'regalia'}, {'id': 10349, 'synset': 'regimentals.n.01', 'name': 'regimentals'}, {'id': 10350, 'synset': 'regulator.n.01', 'name': 'regulator'}, {'id': 10351, 'synset': 'rein.n.01', 'name': 'rein'}, {'id': 10352, 'synset': 'relay.n.05', 'name': 'relay'}, {'id': 10353, 'synset': 'release.n.08', 'name': 'release'}, {'id': 10354, 'synset': 'religious_residence.n.01', 'name': 'religious_residence'}, {'id': 10355, 'synset': 'reliquary.n.01', 'name': 'reliquary'}, {'id': 10356, 'synset': 'remote_terminal.n.01', 'name': 'remote_terminal'}, {'id': 10357, 'synset': 'removable_disk.n.01', 'name': 'removable_disk'}, {'id': 10358, 'synset': 'rendering.n.05', 'name': 'rendering'}, {'id': 10359, 'synset': 'rep.n.02', 'name': 'rep'}, {'id': 10360, 'synset': 'repair_shop.n.01', 'name': 'repair_shop'}, {'id': 10361, 'synset': 'repeater.n.04', 'name': 'repeater'}, {'id': 10362, 'synset': 'repeating_firearm.n.01', 'name': 'repeating_firearm'}, {'id': 10363, 'synset': 'repository.n.03', 'name': 'repository'}, {'id': 10364, 'synset': 'reproducer.n.01', 'name': 'reproducer'}, {'id': 10365, 'synset': 'rerebrace.n.01', 'name': 'rerebrace'}, {'id': 10366, 'synset': 'rescue_equipment.n.01', 'name': 'rescue_equipment'}, {'id': 10367, 'synset': 'research_center.n.01', 'name': 'research_center'}, {'id': 10368, 'synset': 'reseau.n.02', 'name': 'reseau'}, {'id': 10369, 'synset': 'reservoir.n.03', 'name': 'reservoir'}, {'id': 10370, 'synset': 'reset.n.01', 'name': 'reset'}, {'id': 10371, 'synset': 'reset_button.n.01', 'name': 'reset_button'}, {'id': 10372, 'synset': 'residence.n.02', 'name': 'residence'}, {'id': 10373, 'synset': 'resistance_pyrometer.n.01', 'name': 'resistance_pyrometer'}, {'id': 10374, 'synset': 'resistor.n.01', 'name': 'resistor'}, {'id': 10375, 'synset': 'resonator.n.03', 'name': 'resonator'}, {'id': 10376, 'synset': 'resonator.n.01', 'name': 'resonator'}, {'id': 10377, 'synset': 'resort_hotel.n.02', 'name': 'resort_hotel'}, {'id': 10378, 'synset': 'respirator.n.01', 'name': 'respirator'}, {'id': 10379, 'synset': 'restaurant.n.01', 'name': 'restaurant'}, {'id': 10380, 'synset': 'rest_house.n.01', 'name': 'rest_house'}, {'id': 10381, 'synset': 'restraint.n.06', 'name': 'restraint'}, {'id': 10382, 'synset': 'resuscitator.n.01', 'name': 'resuscitator'}, {'id': 10383, 'synset': 'retainer.n.03', 'name': 'retainer'}, {'id': 10384, 'synset': 'retaining_wall.n.01', 'name': 'retaining_wall'}, {'id': 10385, 'synset': 'reticle.n.01', 'name': 'reticle'}, {'id': 10386, 'synset': 'reticulation.n.02', 'name': 'reticulation'}, {'id': 10387, 'synset': 'reticule.n.01', 'name': 'reticule'}, {'id': 10388, 'synset': 'retort.n.02', 'name': 'retort'}, {'id': 10389, 'synset': 'retractor.n.01', 'name': 'retractor'}, {'id': 10390, 'synset': 'return_key.n.01', 'name': 'return_key'}, {'id': 10391, 'synset': 'reverberatory_furnace.n.01', 'name': 'reverberatory_furnace'}, {'id': 10392, 'synset': 'revers.n.01', 'name': 'revers'}, {'id': 10393, 'synset': 'reverse.n.02', 'name': 'reverse'}, {'id': 10394, 'synset': 'reversible.n.01', 'name': 'reversible'}, {'id': 10395, 'synset': 'revetment.n.02', 'name': 'revetment'}, {'id': 10396, 'synset': 'revetment.n.01', 'name': 'revetment'}, {'id': 10397, 'synset': 'revolver.n.01', 'name': 'revolver'}, {'id': 10398, 'synset': 'revolving_door.n.02', 'name': 'revolving_door'}, {'id': 10399, 'synset': 'rheometer.n.01', 'name': 'rheometer'}, {'id': 10400, 'synset': 'rheostat.n.01', 'name': 'rheostat'}, {'id': 10401, 'synset': 'rhinoscope.n.01', 'name': 'rhinoscope'}, {'id': 10402, 'synset': 'rib.n.01', 'name': 'rib'}, {'id': 10403, 'synset': 'riband.n.01', 'name': 'riband'}, {'id': 10404, 'synset': 'ribbed_vault.n.01', 'name': 'ribbed_vault'}, {'id': 10405, 'synset': 'ribbing.n.01', 'name': 'ribbing'}, {'id': 10406, 'synset': 'ribbon_development.n.01', 'name': 'ribbon_development'}, {'id': 10407, 'synset': 'rib_joint_pliers.n.01', 'name': 'rib_joint_pliers'}, {'id': 10408, 'synset': 'ricer.n.01', 'name': 'ricer'}, {'id': 10409, 'synset': 'riddle.n.02', 'name': 'riddle'}, {'id': 10410, 'synset': 'ride.n.02', 'name': 'ride'}, {'id': 10411, 'synset': 'ridge.n.06', 'name': 'ridge'}, {'id': 10412, 'synset': 'ridge_rope.n.01', 'name': 'ridge_rope'}, {'id': 10413, 'synset': 'riding_boot.n.01', 'name': 'riding_boot'}, {'id': 10414, 'synset': 'riding_crop.n.01', 'name': 'riding_crop'}, {'id': 10415, 'synset': 'riding_mower.n.01', 'name': 'riding_mower'}, {'id': 10416, 'synset': 'rifle_ball.n.01', 'name': 'rifle_ball'}, {'id': 10417, 'synset': 'rifle_grenade.n.01', 'name': 'rifle_grenade'}, {'id': 10418, 'synset': 'rig.n.01', 'name': 'rig'}, {'id': 10419, 'synset': 'rigger.n.02', 'name': 'rigger'}, {'id': 10420, 'synset': 'rigger.n.04', 'name': 'rigger'}, {'id': 10421, 'synset': 'rigging.n.01', 'name': 'rigging'}, {'id': 10422, 'synset': 'rigout.n.01', 'name': 'rigout'}, {'id': 10423, 'synset': 'ringlet.n.03', 'name': 'ringlet'}, {'id': 10424, 'synset': 'rings.n.01', 'name': 'rings'}, {'id': 10425, 'synset': 'rink.n.01', 'name': 'rink'}, {'id': 10426, 'synset': 'riot_gun.n.01', 'name': 'riot_gun'}, {'id': 10427, 'synset': 'ripcord.n.02', 'name': 'ripcord'}, {'id': 10428, 'synset': 'ripcord.n.01', 'name': 'ripcord'}, {'id': 10429, 'synset': 'ripping_bar.n.01', 'name': 'ripping_bar'}, {'id': 10430, 'synset': 'ripping_chisel.n.01', 'name': 'ripping_chisel'}, {'id': 10431, 'synset': 'ripsaw.n.01', 'name': 'ripsaw'}, {'id': 10432, 'synset': 'riser.n.03', 'name': 'riser'}, {'id': 10433, 'synset': 'riser.n.02', 'name': 'riser'}, {'id': 10434, 'synset': 'ritz.n.03', 'name': 'Ritz'}, {'id': 10435, 'synset': 'rivet.n.02', 'name': 'rivet'}, {'id': 10436, 'synset': 'riveting_machine.n.01', 'name': 'riveting_machine'}, {'id': 10437, 'synset': 'roach_clip.n.01', 'name': 'roach_clip'}, {'id': 10438, 'synset': 'road.n.01', 'name': 'road'}, {'id': 10439, 'synset': 'roadbed.n.01', 'name': 'roadbed'}, {'id': 10440, 'synset': 'roadblock.n.02', 'name': 'roadblock'}, {'id': 10441, 'synset': 'roadhouse.n.01', 'name': 'roadhouse'}, {'id': 10442, 'synset': 'roadster.n.01', 'name': 'roadster'}, {'id': 10443, 'synset': 'roadway.n.01', 'name': 'roadway'}, {'id': 10444, 'synset': 'roaster.n.04', 'name': 'roaster'}, {'id': 10445, 'synset': 'robotics_equipment.n.01', 'name': 'robotics_equipment'}, {'id': 10446, 'synset': 'rochon_prism.n.01', 'name': 'Rochon_prism'}, {'id': 10447, 'synset': 'rock_bit.n.01', 'name': 'rock_bit'}, {'id': 10448, 'synset': 'rocker.n.07', 'name': 'rocker'}, {'id': 10449, 'synset': 'rocker.n.05', 'name': 'rocker'}, {'id': 10450, 'synset': 'rocker_arm.n.01', 'name': 'rocker_arm'}, {'id': 10451, 'synset': 'rocket.n.02', 'name': 'rocket'}, {'id': 10452, 'synset': 'rocket.n.01', 'name': 'rocket'}, {'id': 10453, 'synset': 'rod.n.01', 'name': 'rod'}, {'id': 10454, 'synset': 'rodeo.n.02', 'name': 'rodeo'}, {'id': 10455, 'synset': 'roll.n.04', 'name': 'roll'}, {'id': 10456, 'synset': 'roller.n.04', 'name': 'roller'}, {'id': 10457, 'synset': 'roller.n.03', 'name': 'roller'}, {'id': 10458, 'synset': 'roller_bandage.n.01', 'name': 'roller_bandage'}, {'id': 10459, 'synset': 'in-line_skate.n.01', 'name': 'in-line_skate'}, {'id': 10460, 'synset': 'roller_blind.n.01', 'name': 'roller_blind'}, {'id': 10461, 'synset': 'roller_coaster.n.02', 'name': 'roller_coaster'}, {'id': 10462, 'synset': 'roller_towel.n.01', 'name': 'roller_towel'}, {'id': 10463, 'synset': 'roll_film.n.01', 'name': 'roll_film'}, {'id': 10464, 'synset': 'rolling_hitch.n.01', 'name': 'rolling_hitch'}, {'id': 10465, 'synset': 'rolling_mill.n.01', 'name': 'rolling_mill'}, {'id': 10466, 'synset': 'rolling_stock.n.01', 'name': 'rolling_stock'}, {'id': 10467, 'synset': 'roll-on.n.02', 'name': 'roll-on'}, {'id': 10468, 'synset': 'roll-on.n.01', 'name': 'roll-on'}, {'id': 10469, 'synset': 'roll-on_roll-off.n.01', 'name': 'roll-on_roll-off'}, {'id': 10470, 'synset': 'rolodex.n.01', 'name': 'Rolodex'}, {'id': 10471, 'synset': 'roman_arch.n.01', 'name': 'Roman_arch'}, {'id': 10472, 'synset': 'roman_building.n.01', 'name': 'Roman_building'}, {'id': 10473, 'synset': 'romper.n.02', 'name': 'romper'}, {'id': 10474, 'synset': 'rood_screen.n.01', 'name': 'rood_screen'}, {'id': 10475, 'synset': 'roof.n.01', 'name': 'roof'}, {'id': 10476, 'synset': 'roof.n.02', 'name': 'roof'}, {'id': 10477, 'synset': 'roofing.n.01', 'name': 'roofing'}, {'id': 10478, 'synset': 'room.n.01', 'name': 'room'}, {'id': 10479, 'synset': 'roomette.n.01', 'name': 'roomette'}, {'id': 10480, 'synset': 'room_light.n.01', 'name': 'room_light'}, {'id': 10481, 'synset': 'roost.n.01', 'name': 'roost'}, {'id': 10482, 'synset': 'rope.n.01', 'name': 'rope'}, {'id': 10483, 'synset': 'rope_bridge.n.01', 'name': 'rope_bridge'}, {'id': 10484, 'synset': 'rope_tow.n.01', 'name': 'rope_tow'}, {'id': 10485, 'synset': 'rose_water.n.01', 'name': 'rose_water'}, {'id': 10486, 'synset': 'rose_window.n.01', 'name': 'rose_window'}, {'id': 10487, 'synset': 'rosin_bag.n.01', 'name': 'rosin_bag'}, {'id': 10488, 'synset': 'rotary_actuator.n.01', 'name': 'rotary_actuator'}, {'id': 10489, 'synset': 'rotary_engine.n.01', 'name': 'rotary_engine'}, {'id': 10490, 'synset': 'rotary_press.n.01', 'name': 'rotary_press'}, {'id': 10491, 'synset': 'rotating_mechanism.n.01', 'name': 'rotating_mechanism'}, {'id': 10492, 'synset': 'rotating_shaft.n.01', 'name': 'rotating_shaft'}, {'id': 10493, 'synset': 'rotisserie.n.02', 'name': 'rotisserie'}, {'id': 10494, 'synset': 'rotisserie.n.01', 'name': 'rotisserie'}, {'id': 10495, 'synset': 'rotor.n.03', 'name': 'rotor'}, {'id': 10496, 'synset': 'rotor.n.01', 'name': 'rotor'}, {'id': 10497, 'synset': 'rotor.n.02', 'name': 'rotor'}, {'id': 10498, 'synset': 'rotor_blade.n.01', 'name': 'rotor_blade'}, {'id': 10499, 'synset': 'rotor_head.n.01', 'name': 'rotor_head'}, {'id': 10500, 'synset': 'rotunda.n.02', 'name': 'rotunda'}, {'id': 10501, 'synset': 'rotunda.n.01', 'name': 'rotunda'}, {'id': 10502, 'synset': 'rouge.n.01', 'name': 'rouge'}, {'id': 10503, 'synset': 'roughcast.n.02', 'name': 'roughcast'}, {'id': 10504, 'synset': 'rouleau.n.02', 'name': 'rouleau'}, {'id': 10505, 'synset': 'roulette.n.02', 'name': 'roulette'}, {'id': 10506, 'synset': 'roulette_ball.n.01', 'name': 'roulette_ball'}, {'id': 10507, 'synset': 'roulette_wheel.n.01', 'name': 'roulette_wheel'}, {'id': 10508, 'synset': 'round.n.01', 'name': 'round'}, {'id': 10509, 'synset': 'round_arch.n.01', 'name': 'round_arch'}, {'id': 10510, 'synset': 'round-bottom_flask.n.01', 'name': 'round-bottom_flask'}, {'id': 10511, 'synset': 'roundel.n.02', 'name': 'roundel'}, {'id': 10512, 'synset': 'round_file.n.01', 'name': 'round_file'}, {'id': 10513, 'synset': 'roundhouse.n.01', 'name': 'roundhouse'}, {'id': 10514, 'synset': 'router.n.03', 'name': 'router'}, {'id': 10515, 'synset': 'router_plane.n.01', 'name': 'router_plane'}, {'id': 10516, 'synset': 'rowel.n.01', 'name': 'rowel'}, {'id': 10517, 'synset': 'row_house.n.01', 'name': 'row_house'}, {'id': 10518, 'synset': 'rowing_boat.n.01', 'name': 'rowing_boat'}, {'id': 10519, 'synset': 'rowlock_arch.n.01', 'name': 'rowlock_arch'}, {'id': 10520, 'synset': 'royal.n.01', 'name': 'royal'}, {'id': 10521, 'synset': 'royal_mast.n.01', 'name': 'royal_mast'}, {'id': 10522, 'synset': 'rubber_boot.n.01', 'name': 'rubber_boot'}, {'id': 10523, 'synset': 'rubber_bullet.n.01', 'name': 'rubber_bullet'}, {'id': 10524, 'synset': 'rubber_eraser.n.01', 'name': 'rubber_eraser'}, {'id': 10525, 'synset': 'rudder.n.02', 'name': 'rudder'}, {'id': 10526, 'synset': 'rudder.n.01', 'name': 'rudder'}, {'id': 10527, 'synset': 'rudder_blade.n.01', 'name': 'rudder_blade'}, {'id': 10528, 'synset': 'rug.n.01', 'name': 'rug'}, {'id': 10529, 'synset': 'rugby_ball.n.01', 'name': 'rugby_ball'}, {'id': 10530, 'synset': 'ruin.n.02', 'name': 'ruin'}, {'id': 10531, 'synset': 'rule.n.12', 'name': 'rule'}, {'id': 10532, 'synset': 'rumble.n.02', 'name': 'rumble'}, {'id': 10533, 'synset': 'rumble_seat.n.01', 'name': 'rumble_seat'}, {'id': 10534, 'synset': 'rummer.n.01', 'name': 'rummer'}, {'id': 10535, 'synset': 'rumpus_room.n.01', 'name': 'rumpus_room'}, {'id': 10536, 'synset': 'runcible_spoon.n.01', 'name': 'runcible_spoon'}, {'id': 10537, 'synset': 'rundle.n.01', 'name': 'rundle'}, {'id': 10538, 'synset': 'running_shoe.n.01', 'name': 'running_shoe'}, {'id': 10539, 'synset': 'running_suit.n.01', 'name': 'running_suit'}, {'id': 10540, 'synset': 'runway.n.04', 'name': 'runway'}, {'id': 10541, 'synset': 'rushlight.n.01', 'name': 'rushlight'}, {'id': 10542, 'synset': 'russet.n.01', 'name': 'russet'}, {'id': 10543, 'synset': 'rya.n.01', 'name': 'rya'}, {'id': 10544, 'synset': 'saber.n.01', 'name': 'saber'}, {'id': 10545, 'synset': 'saber_saw.n.01', 'name': 'saber_saw'}, {'id': 10546, 'synset': 'sable.n.04', 'name': 'sable'}, {'id': 10547, 'synset': 'sable.n.01', 'name': 'sable'}, {'id': 10548, 'synset': 'sable_coat.n.01', 'name': 'sable_coat'}, {'id': 10549, 'synset': 'sabot.n.01', 'name': 'sabot'}, {'id': 10550, 'synset': 'sachet.n.01', 'name': 'sachet'}, {'id': 10551, 'synset': 'sack.n.05', 'name': 'sack'}, {'id': 10552, 'synset': 'sackbut.n.01', 'name': 'sackbut'}, {'id': 10553, 'synset': 'sackcloth.n.02', 'name': 'sackcloth'}, {'id': 10554, 'synset': 'sackcloth.n.01', 'name': 'sackcloth'}, {'id': 10555, 'synset': 'sack_coat.n.01', 'name': 'sack_coat'}, {'id': 10556, 'synset': 'sacking.n.01', 'name': 'sacking'}, {'id': 10557, 'synset': 'saddle_oxford.n.01', 'name': 'saddle_oxford'}, {'id': 10558, 'synset': 'saddlery.n.02', 'name': 'saddlery'}, {'id': 10559, 'synset': 'saddle_seat.n.01', 'name': 'saddle_seat'}, {'id': 10560, 'synset': 'saddle_stitch.n.01', 'name': 'saddle_stitch'}, {'id': 10561, 'synset': 'safe.n.01', 'name': 'safe'}, {'id': 10562, 'synset': 'safe.n.02', 'name': 'safe'}, {'id': 10563, 'synset': 'safe-deposit.n.01', 'name': 'safe-deposit'}, {'id': 10564, 'synset': 'safe_house.n.01', 'name': 'safe_house'}, {'id': 10565, 'synset': 'safety_arch.n.01', 'name': 'safety_arch'}, {'id': 10566, 'synset': 'safety_belt.n.01', 'name': 'safety_belt'}, {'id': 10567, 'synset': 'safety_bicycle.n.01', 'name': 'safety_bicycle'}, {'id': 10568, 'synset': 'safety_bolt.n.01', 'name': 'safety_bolt'}, {'id': 10569, 'synset': 'safety_curtain.n.01', 'name': 'safety_curtain'}, {'id': 10570, 'synset': 'safety_fuse.n.01', 'name': 'safety_fuse'}, {'id': 10571, 'synset': 'safety_lamp.n.01', 'name': 'safety_lamp'}, {'id': 10572, 'synset': 'safety_match.n.01', 'name': 'safety_match'}, {'id': 10573, 'synset': 'safety_net.n.02', 'name': 'safety_net'}, {'id': 10574, 'synset': 'safety_rail.n.01', 'name': 'safety_rail'}, {'id': 10575, 'synset': 'safety_razor.n.01', 'name': 'safety_razor'}, {'id': 10576, 'synset': 'safety_valve.n.01', 'name': 'safety_valve'}, {'id': 10577, 'synset': 'sail.n.03', 'name': 'sail'}, {'id': 10578, 'synset': 'sailboat.n.01', 'name': 'sailboat'}, {'id': 10579, 'synset': 'sailcloth.n.01', 'name': 'sailcloth'}, {'id': 10580, 'synset': 'sailing_vessel.n.01', 'name': 'sailing_vessel'}, {'id': 10581, 'synset': 'sailing_warship.n.01', 'name': 'sailing_warship'}, {'id': 10582, 'synset': 'sailor_cap.n.01', 'name': 'sailor_cap'}, {'id': 10583, 'synset': 'sailor_suit.n.01', 'name': 'sailor_suit'}, {'id': 10584, 'synset': 'salad_bar.n.01', 'name': 'salad_bar'}, {'id': 10585, 'synset': 'salad_bowl.n.02', 'name': 'salad_bowl'}, {'id': 10586, 'synset': 'salinometer.n.01', 'name': 'salinometer'}, {'id': 10587, 'synset': 'sallet.n.01', 'name': 'sallet'}, {'id': 10588, 'synset': 'salon.n.03', 'name': 'salon'}, {'id': 10589, 'synset': 'salon.n.01', 'name': 'salon'}, {'id': 10590, 'synset': 'salon.n.02', 'name': 'salon'}, {'id': 10591, 'synset': 'saltbox.n.01', 'name': 'saltbox'}, {'id': 10592, 'synset': 'saltcellar.n.01', 'name': 'saltcellar'}, {'id': 10593, 'synset': 'saltworks.n.01', 'name': 'saltworks'}, {'id': 10594, 'synset': 'salver.n.01', 'name': 'salver'}, {'id': 10595, 'synset': 'salwar.n.01', 'name': 'salwar'}, {'id': 10596, 'synset': 'sam_browne_belt.n.01', 'name': 'Sam_Browne_belt'}, {'id': 10597, 'synset': 'samisen.n.01', 'name': 'samisen'}, {'id': 10598, 'synset': 'samite.n.01', 'name': 'samite'}, {'id': 10599, 'synset': 'samovar.n.01', 'name': 'samovar'}, {'id': 10600, 'synset': 'sampan.n.01', 'name': 'sampan'}, {'id': 10601, 'synset': 'sandbag.n.01', 'name': 'sandbag'}, {'id': 10602, 'synset': 'sandblaster.n.01', 'name': 'sandblaster'}, {'id': 10603, 'synset': 'sandbox.n.01', 'name': 'sandbox'}, {'id': 10604, 'synset': 'sandglass.n.01', 'name': 'sandglass'}, {'id': 10605, 'synset': 'sand_wedge.n.01', 'name': 'sand_wedge'}, {'id': 10606, 'synset': 'sandwich_board.n.01', 'name': 'sandwich_board'}, {'id': 10607, 'synset': 'sanitary_napkin.n.01', 'name': 'sanitary_napkin'}, {'id': 10608, 'synset': 'cling_film.n.01', 'name': 'cling_film'}, {'id': 10609, 'synset': 'sarcenet.n.01', 'name': 'sarcenet'}, {'id': 10610, 'synset': 'sarcophagus.n.01', 'name': 'sarcophagus'}, {'id': 10611, 'synset': 'sari.n.01', 'name': 'sari'}, {'id': 10612, 'synset': 'sarong.n.01', 'name': 'sarong'}, {'id': 10613, 'synset': 'sash.n.01', 'name': 'sash'}, {'id': 10614, 'synset': 'sash_fastener.n.01', 'name': 'sash_fastener'}, {'id': 10615, 'synset': 'sash_window.n.01', 'name': 'sash_window'}, {'id': 10616, 'synset': 'sateen.n.01', 'name': 'sateen'}, {'id': 10617, 'synset': 'satellite.n.01', 'name': 'satellite'}, {'id': 10618, 'synset': 'satellite_receiver.n.01', 'name': 'satellite_receiver'}, {'id': 10619, 'synset': 'satellite_television.n.01', 'name': 'satellite_television'}, {'id': 10620, 'synset': 'satellite_transmitter.n.01', 'name': 'satellite_transmitter'}, {'id': 10621, 'synset': 'satin.n.01', 'name': 'satin'}, {'id': 10622, 'synset': 'saturday_night_special.n.01', 'name': 'Saturday_night_special'}, {'id': 10623, 'synset': 'saucepot.n.01', 'name': 'saucepot'}, {'id': 10624, 'synset': 'sauna.n.01', 'name': 'sauna'}, {'id': 10625, 'synset': 'savings_bank.n.02', 'name': 'savings_bank'}, {'id': 10626, 'synset': 'saw.n.02', 'name': 'saw'}, {'id': 10627, 'synset': 'sawed-off_shotgun.n.01', 'name': 'sawed-off_shotgun'}, {'id': 10628, 'synset': 'sawmill.n.01', 'name': 'sawmill'}, {'id': 10629, 'synset': 'saw_set.n.01', 'name': 'saw_set'}, {'id': 10630, 'synset': 'saxhorn.n.01', 'name': 'saxhorn'}, {'id': 10631, 'synset': 'scabbard.n.01', 'name': 'scabbard'}, {'id': 10632, 'synset': 'scaffolding.n.01', 'name': 'scaffolding'}, {'id': 10633, 'synset': 'scale.n.08', 'name': 'scale'}, {'id': 10634, 'synset': 'scaler.n.01', 'name': 'scaler'}, {'id': 10635, 'synset': 'scaling_ladder.n.01', 'name': 'scaling_ladder'}, {'id': 10636, 'synset': 'scalpel.n.01', 'name': 'scalpel'}, {'id': 10637, 'synset': 'scanner.n.04', 'name': 'scanner'}, {'id': 10638, 'synset': 'scanner.n.03', 'name': 'scanner'}, {'id': 10639, 'synset': 'scanner.n.02', 'name': 'scanner'}, {'id': 10640, 'synset': 'scantling.n.01', 'name': 'scantling'}, {'id': 10641, 'synset': 'scarf_joint.n.01', 'name': 'scarf_joint'}, {'id': 10642, 'synset': 'scatter_rug.n.01', 'name': 'scatter_rug'}, {'id': 10643, 'synset': 'scauper.n.01', 'name': 'scauper'}, {'id': 10644, 'synset': 'schmidt_telescope.n.01', 'name': 'Schmidt_telescope'}, {'id': 10645, 'synset': 'school.n.02', 'name': 'school'}, {'id': 10646, 'synset': 'schoolbag.n.01', 'name': 'schoolbag'}, {'id': 10647, 'synset': 'school_bell.n.01', 'name': 'school_bell'}, {'id': 10648, 'synset': 'school_ship.n.01', 'name': 'school_ship'}, {'id': 10649, 'synset': 'school_system.n.01', 'name': 'school_system'}, {'id': 10650, 'synset': 'schooner.n.02', 'name': 'schooner'}, {'id': 10651, 'synset': 'schooner.n.01', 'name': 'schooner'}, {'id': 10652, 'synset': 'scientific_instrument.n.01', 'name': 'scientific_instrument'}, {'id': 10653, 'synset': 'scimitar.n.01', 'name': 'scimitar'}, {'id': 10654, 'synset': 'scintillation_counter.n.01', 'name': 'scintillation_counter'}, {'id': 10655, 'synset': 'sclerometer.n.01', 'name': 'sclerometer'}, {'id': 10656, 'synset': 'scoinson_arch.n.01', 'name': 'scoinson_arch'}, {'id': 10657, 'synset': 'sconce.n.04', 'name': 'sconce'}, {'id': 10658, 'synset': 'sconce.n.03', 'name': 'sconce'}, {'id': 10659, 'synset': 'scoop.n.06', 'name': 'scoop'}, {'id': 10660, 'synset': 'scooter.n.02', 'name': 'scooter'}, {'id': 10661, 'synset': 'scouring_pad.n.01', 'name': 'scouring_pad'}, {'id': 10662, 'synset': 'scow.n.02', 'name': 'scow'}, {'id': 10663, 'synset': 'scow.n.01', 'name': 'scow'}, {'id': 10664, 'synset': 'scratcher.n.03', 'name': 'scratcher'}, {'id': 10665, 'synset': 'screen.n.05', 'name': 'screen'}, {'id': 10666, 'synset': 'screen.n.04', 'name': 'screen'}, {'id': 10667, 'synset': 'screen.n.09', 'name': 'screen'}, {'id': 10668, 'synset': 'screen.n.03', 'name': 'screen'}, {'id': 10669, 'synset': 'screen_door.n.01', 'name': 'screen_door'}, {'id': 10670, 'synset': 'screening.n.02', 'name': 'screening'}, {'id': 10671, 'synset': 'screw.n.04', 'name': 'screw'}, {'id': 10672, 'synset': 'screw.n.03', 'name': 'screw'}, {'id': 10673, 'synset': 'screw.n.02', 'name': 'screw'}, {'id': 10674, 'synset': 'screw_eye.n.01', 'name': 'screw_eye'}, {'id': 10675, 'synset': 'screw_key.n.01', 'name': 'screw_key'}, {'id': 10676, 'synset': 'screw_thread.n.01', 'name': 'screw_thread'}, {'id': 10677, 'synset': 'screwtop.n.01', 'name': 'screwtop'}, {'id': 10678, 'synset': 'screw_wrench.n.01', 'name': 'screw_wrench'}, {'id': 10679, 'synset': 'scriber.n.01', 'name': 'scriber'}, {'id': 10680, 'synset': 'scrim.n.01', 'name': 'scrim'}, {'id': 10681, 'synset': 'scrimshaw.n.01', 'name': 'scrimshaw'}, {'id': 10682, 'synset': 'scriptorium.n.01', 'name': 'scriptorium'}, {'id': 10683, 'synset': 'scrubber.n.03', 'name': 'scrubber'}, {'id': 10684, 'synset': 'scrub_plane.n.01', 'name': 'scrub_plane'}, {'id': 10685, 'synset': 'scuffer.n.01', 'name': 'scuffer'}, {'id': 10686, 'synset': 'scuffle.n.02', 'name': 'scuffle'}, {'id': 10687, 'synset': 'scull.n.02', 'name': 'scull'}, {'id': 10688, 'synset': 'scull.n.01', 'name': 'scull'}, {'id': 10689, 'synset': 'scullery.n.01', 'name': 'scullery'}, {'id': 10690, 'synset': 'scuttle.n.01', 'name': 'scuttle'}, {'id': 10691, 'synset': 'scyphus.n.01', 'name': 'scyphus'}, {'id': 10692, 'synset': 'scythe.n.01', 'name': 'scythe'}, {'id': 10693, 'synset': 'seabag.n.01', 'name': 'seabag'}, {'id': 10694, 'synset': 'sea_boat.n.01', 'name': 'sea_boat'}, {'id': 10695, 'synset': 'sea_chest.n.01', 'name': 'sea_chest'}, {'id': 10696, 'synset': 'sealing_wax.n.01', 'name': 'sealing_wax'}, {'id': 10697, 'synset': 'sealskin.n.02', 'name': 'sealskin'}, {'id': 10698, 'synset': 'seam.n.01', 'name': 'seam'}, {'id': 10699, 'synset': 'searchlight.n.01', 'name': 'searchlight'}, {'id': 10700, 'synset': 'searing_iron.n.01', 'name': 'searing_iron'}, {'id': 10701, 'synset': 'seat.n.04', 'name': 'seat'}, {'id': 10702, 'synset': 'seat.n.03', 'name': 'seat'}, {'id': 10703, 'synset': 'seat.n.09', 'name': 'seat'}, {'id': 10704, 'synset': 'seat_belt.n.01', 'name': 'seat_belt'}, {'id': 10705, 'synset': 'secateurs.n.01', 'name': 'secateurs'}, {'id': 10706, 'synset': 'secondary_coil.n.01', 'name': 'secondary_coil'}, {'id': 10707, 'synset': 'second_balcony.n.01', 'name': 'second_balcony'}, {'id': 10708, 'synset': 'second_base.n.01', 'name': 'second_base'}, {'id': 10709, 'synset': 'second_hand.n.02', 'name': 'second_hand'}, {'id': 10710, 'synset': 'secretary.n.04', 'name': 'secretary'}, {'id': 10711, 'synset': 'sectional.n.01', 'name': 'sectional'}, {'id': 10712, 'synset': 'security_blanket.n.02', 'name': 'security_blanket'}, {'id': 10713, 'synset': 'security_system.n.02', 'name': 'security_system'}, {'id': 10714, 'synset': 'security_system.n.01', 'name': 'security_system'}, {'id': 10715, 'synset': 'sedan.n.01', 'name': 'sedan'}, {'id': 10716, 'synset': 'sedan.n.02', 'name': 'sedan'}, {'id': 10717, 'synset': 'seeder.n.02', 'name': 'seeder'}, {'id': 10718, 'synset': 'seeker.n.02', 'name': 'seeker'}, {'id': 10719, 'synset': 'seersucker.n.01', 'name': 'seersucker'}, {'id': 10720, 'synset': 'segmental_arch.n.01', 'name': 'segmental_arch'}, {'id': 10721, 'synset': 'segway.n.01', 'name': 'Segway'}, {'id': 10722, 'synset': 'seidel.n.01', 'name': 'seidel'}, {'id': 10723, 'synset': 'seine.n.02', 'name': 'seine'}, {'id': 10724, 'synset': 'seismograph.n.01', 'name': 'seismograph'}, {'id': 10725, 'synset': 'selector.n.02', 'name': 'selector'}, {'id': 10726, 'synset': 'selenium_cell.n.01', 'name': 'selenium_cell'}, {'id': 10727, 'synset': 'self-propelled_vehicle.n.01', 'name': 'self-propelled_vehicle'}, {'id': 10728, 'synset': 'self-registering_thermometer.n.01', 'name': 'self-registering_thermometer'}, {'id': 10729, 'synset': 'self-starter.n.02', 'name': 'self-starter'}, {'id': 10730, 'synset': 'selsyn.n.01', 'name': 'selsyn'}, {'id': 10731, 'synset': 'selvage.n.02', 'name': 'selvage'}, {'id': 10732, 'synset': 'semaphore.n.01', 'name': 'semaphore'}, {'id': 10733, 'synset': 'semiautomatic_firearm.n.01', 'name': 'semiautomatic_firearm'}, {'id': 10734, 'synset': 'semiautomatic_pistol.n.01', 'name': 'semiautomatic_pistol'}, {'id': 10735, 'synset': 'semiconductor_device.n.01', 'name': 'semiconductor_device'}, {'id': 10736, 'synset': 'semi-detached_house.n.01', 'name': 'semi-detached_house'}, {'id': 10737, 'synset': 'semigloss.n.01', 'name': 'semigloss'}, {'id': 10738, 'synset': 'semitrailer.n.01', 'name': 'semitrailer'}, {'id': 10739, 'synset': 'sennit.n.01', 'name': 'sennit'}, {'id': 10740, 'synset': 'sensitometer.n.01', 'name': 'sensitometer'}, {'id': 10741, 'synset': 'sentry_box.n.01', 'name': 'sentry_box'}, {'id': 10742, 'synset': 'separate.n.02', 'name': 'separate'}, {'id': 10743, 'synset': 'septic_tank.n.01', 'name': 'septic_tank'}, {'id': 10744, 'synset': 'sequence.n.03', 'name': 'sequence'}, {'id': 10745, 'synset': 'sequencer.n.01', 'name': 'sequencer'}, {'id': 10746, 'synset': 'serape.n.01', 'name': 'serape'}, {'id': 10747, 'synset': 'serge.n.01', 'name': 'serge'}, {'id': 10748, 'synset': 'serger.n.01', 'name': 'serger'}, {'id': 10749, 'synset': 'serial_port.n.01', 'name': 'serial_port'}, {'id': 10750, 'synset': 'serpent.n.03', 'name': 'serpent'}, {'id': 10751, 'synset': 'serration.n.03', 'name': 'serration'}, {'id': 10752, 'synset': 'server.n.04', 'name': 'server'}, {'id': 10753, 'synset': 'server.n.03', 'name': 'server'}, {'id': 10754, 'synset': 'service_club.n.02', 'name': 'service_club'}, {'id': 10755, 'synset': 'serving_cart.n.01', 'name': 'serving_cart'}, {'id': 10756, 'synset': 'serving_dish.n.01', 'name': 'serving_dish'}, {'id': 10757, 'synset': 'servo.n.01', 'name': 'servo'}, {'id': 10758, 'synset': 'set.n.13', 'name': 'set'}, {'id': 10759, 'synset': 'set_gun.n.01', 'name': 'set_gun'}, {'id': 10760, 'synset': 'setscrew.n.02', 'name': 'setscrew'}, {'id': 10761, 'synset': 'setscrew.n.01', 'name': 'setscrew'}, {'id': 10762, 'synset': 'set_square.n.01', 'name': 'set_square'}, {'id': 10763, 'synset': 'settee.n.02', 'name': 'settee'}, {'id': 10764, 'synset': 'settle.n.01', 'name': 'settle'}, {'id': 10765, 'synset': 'settlement_house.n.01', 'name': 'settlement_house'}, {'id': 10766, 'synset': 'seventy-eight.n.02', 'name': 'seventy-eight'}, {'id': 10767, 'synset': 'seven_wonders_of_the_ancient_world.n.01', 'name': 'Seven_Wonders_of_the_Ancient_World'}, {'id': 10768, 'synset': 'sewage_disposal_plant.n.01', 'name': 'sewage_disposal_plant'}, {'id': 10769, 'synset': 'sewer.n.01', 'name': 'sewer'}, {'id': 10770, 'synset': 'sewing_basket.n.01', 'name': 'sewing_basket'}, {'id': 10771, 'synset': 'sewing_kit.n.01', 'name': 'sewing_kit'}, {'id': 10772, 'synset': 'sewing_needle.n.01', 'name': 'sewing_needle'}, {'id': 10773, 'synset': 'sewing_room.n.01', 'name': 'sewing_room'}, {'id': 10774, 'synset': 'sextant.n.02', 'name': 'sextant'}, {'id': 10775, 'synset': 'sgraffito.n.01', 'name': 'sgraffito'}, {'id': 10776, 'synset': 'shackle.n.01', 'name': 'shackle'}, {'id': 10777, 'synset': 'shackle.n.02', 'name': 'shackle'}, {'id': 10778, 'synset': 'shade.n.03', 'name': 'shade'}, {'id': 10779, 'synset': 'shadow_box.n.01', 'name': 'shadow_box'}, {'id': 10780, 'synset': 'shaft.n.03', 'name': 'shaft'}, {'id': 10781, 'synset': 'shag_rug.n.01', 'name': 'shag_rug'}, {'id': 10782, 'synset': 'shank.n.04', 'name': 'shank'}, {'id': 10783, 'synset': 'shank.n.03', 'name': 'shank'}, {'id': 10784, 'synset': 'shantung.n.01', 'name': 'shantung'}, {'id': 10785, 'synset': 'shaper.n.02', 'name': 'shaper'}, {'id': 10786, 'synset': 'shaping_tool.n.01', 'name': 'shaping_tool'}, {'id': 10787, 'synset': 'sharkskin.n.01', 'name': 'sharkskin'}, {'id': 10788, 'synset': 'shaving_brush.n.01', 'name': 'shaving_brush'}, {'id': 10789, 'synset': 'shaving_foam.n.01', 'name': 'shaving_foam'}, {'id': 10790, 'synset': 'shawm.n.01', 'name': 'shawm'}, {'id': 10791, 'synset': 'sheath.n.01', 'name': 'sheath'}, {'id': 10792, 'synset': 'sheathing.n.01', 'name': 'sheathing'}, {'id': 10793, 'synset': 'shed.n.01', 'name': 'shed'}, {'id': 10794, 'synset': 'sheep_bell.n.01', 'name': 'sheep_bell'}, {'id': 10795, 'synset': 'sheepshank.n.01', 'name': 'sheepshank'}, {'id': 10796, 'synset': 'sheepskin_coat.n.01', 'name': 'sheepskin_coat'}, {'id': 10797, 'synset': 'sheepwalk.n.01', 'name': 'sheepwalk'}, {'id': 10798, 'synset': 'sheet.n.03', 'name': 'sheet'}, {'id': 10799, 'synset': 'sheet_bend.n.01', 'name': 'sheet_bend'}, {'id': 10800, 'synset': 'sheeting.n.01', 'name': 'sheeting'}, {'id': 10801, 'synset': 'sheet_pile.n.01', 'name': 'sheet_pile'}, {'id': 10802, 'synset': 'sheetrock.n.01', 'name': 'Sheetrock'}, {'id': 10803, 'synset': 'shelf.n.01', 'name': 'shelf'}, {'id': 10804, 'synset': 'shelf_bracket.n.01', 'name': 'shelf_bracket'}, {'id': 10805, 'synset': 'shell.n.01', 'name': 'shell'}, {'id': 10806, 'synset': 'shell.n.08', 'name': 'shell'}, {'id': 10807, 'synset': 'shell.n.07', 'name': 'shell'}, {'id': 10808, 'synset': 'shellac.n.02', 'name': 'shellac'}, {'id': 10809, 'synset': 'shelter.n.01', 'name': 'shelter'}, {'id': 10810, 'synset': 'shelter.n.02', 'name': 'shelter'}, {'id': 10811, 'synset': 'shelter.n.05', 'name': 'shelter'}, {'id': 10812, 'synset': 'sheltered_workshop.n.01', 'name': 'sheltered_workshop'}, {'id': 10813, 'synset': 'sheraton.n.01', 'name': 'Sheraton'}, {'id': 10814, 'synset': 'shield.n.01', 'name': 'shield'}, {'id': 10815, 'synset': 'shielding.n.03', 'name': 'shielding'}, {'id': 10816, 'synset': 'shift_key.n.01', 'name': 'shift_key'}, {'id': 10817, 'synset': 'shillelagh.n.01', 'name': 'shillelagh'}, {'id': 10818, 'synset': 'shim.n.01', 'name': 'shim'}, {'id': 10819, 'synset': 'shingle.n.03', 'name': 'shingle'}, {'id': 10820, 'synset': 'shin_guard.n.01', 'name': 'shin_guard'}, {'id': 10821, 'synset': 'ship.n.01', 'name': 'ship'}, {'id': 10822, 'synset': 'shipboard_system.n.01', 'name': 'shipboard_system'}, {'id': 10823, 'synset': 'shipping.n.02', 'name': 'shipping'}, {'id': 10824, 'synset': 'shipping_room.n.01', 'name': 'shipping_room'}, {'id': 10825, 'synset': 'ship-towed_long-range_acoustic_detection_system.n.01', 'name': 'ship-towed_long-range_acoustic_detection_system'}, {'id': 10826, 'synset': 'shipwreck.n.01', 'name': 'shipwreck'}, {'id': 10827, 'synset': 'shirt_button.n.01', 'name': 'shirt_button'}, {'id': 10828, 'synset': 'shirtdress.n.01', 'name': 'shirtdress'}, {'id': 10829, 'synset': 'shirtfront.n.01', 'name': 'shirtfront'}, {'id': 10830, 'synset': 'shirting.n.01', 'name': 'shirting'}, {'id': 10831, 'synset': 'shirtsleeve.n.01', 'name': 'shirtsleeve'}, {'id': 10832, 'synset': 'shirttail.n.02', 'name': 'shirttail'}, {'id': 10833, 'synset': 'shirtwaist.n.01', 'name': 'shirtwaist'}, {'id': 10834, 'synset': 'shiv.n.01', 'name': 'shiv'}, {'id': 10835, 'synset': 'shock_absorber.n.01', 'name': 'shock_absorber'}, {'id': 10836, 'synset': 'shoe.n.02', 'name': 'shoe'}, {'id': 10837, 'synset': 'shoebox.n.02', 'name': 'shoebox'}, {'id': 10838, 'synset': 'shoehorn.n.01', 'name': 'shoehorn'}, {'id': 10839, 'synset': 'shoe_shop.n.01', 'name': 'shoe_shop'}, {'id': 10840, 'synset': 'shoetree.n.01', 'name': 'shoetree'}, {'id': 10841, 'synset': 'shofar.n.01', 'name': 'shofar'}, {'id': 10842, 'synset': 'shoji.n.01', 'name': 'shoji'}, {'id': 10843, 'synset': 'shooting_brake.n.01', 'name': 'shooting_brake'}, {'id': 10844, 'synset': 'shooting_lodge.n.01', 'name': 'shooting_lodge'}, {'id': 10845, 'synset': 'shooting_stick.n.01', 'name': 'shooting_stick'}, {'id': 10846, 'synset': 'shop.n.01', 'name': 'shop'}, {'id': 10847, 'synset': 'shop_bell.n.01', 'name': 'shop_bell'}, {'id': 10848, 'synset': 'shopping_basket.n.01', 'name': 'shopping_basket'}, {'id': 10849, 'synset': 'short_circuit.n.01', 'name': 'short_circuit'}, {'id': 10850, 'synset': 'short_iron.n.01', 'name': 'short_iron'}, {'id': 10851, 'synset': 'short_sleeve.n.01', 'name': 'short_sleeve'}, {'id': 10852, 'synset': 'shortwave_diathermy_machine.n.01', 'name': 'shortwave_diathermy_machine'}, {'id': 10853, 'synset': 'shot.n.12', 'name': 'shot'}, {'id': 10854, 'synset': 'shotgun.n.01', 'name': 'shotgun'}, {'id': 10855, 'synset': 'shotgun_shell.n.01', 'name': 'shotgun_shell'}, {'id': 10856, 'synset': 'shot_tower.n.01', 'name': 'shot_tower'}, {'id': 10857, 'synset': 'shoulder.n.04', 'name': 'shoulder'}, {'id': 10858, 'synset': 'shouldered_arch.n.01', 'name': 'shouldered_arch'}, {'id': 10859, 'synset': 'shoulder_holster.n.01', 'name': 'shoulder_holster'}, {'id': 10860, 'synset': 'shoulder_pad.n.01', 'name': 'shoulder_pad'}, {'id': 10861, 'synset': 'shoulder_patch.n.01', 'name': 'shoulder_patch'}, {'id': 10862, 'synset': 'shovel.n.03', 'name': 'shovel'}, {'id': 10863, 'synset': 'shovel_hat.n.01', 'name': 'shovel_hat'}, {'id': 10864, 'synset': 'showboat.n.01', 'name': 'showboat'}, {'id': 10865, 'synset': 'shower_room.n.01', 'name': 'shower_room'}, {'id': 10866, 'synset': 'shower_stall.n.01', 'name': 'shower_stall'}, {'id': 10867, 'synset': 'showroom.n.01', 'name': 'showroom'}, {'id': 10868, 'synset': 'shrapnel.n.01', 'name': 'shrapnel'}, {'id': 10869, 'synset': 'shrimper.n.01', 'name': 'shrimper'}, {'id': 10870, 'synset': 'shrine.n.01', 'name': 'shrine'}, {'id': 10871, 'synset': 'shrink-wrap.n.01', 'name': 'shrink-wrap'}, {'id': 10872, 'synset': 'shunt.n.03', 'name': 'shunt'}, {'id': 10873, 'synset': 'shunt.n.02', 'name': 'shunt'}, {'id': 10874, 'synset': 'shunter.n.01', 'name': 'shunter'}, {'id': 10875, 'synset': 'shutter.n.02', 'name': 'shutter'}, {'id': 10876, 'synset': 'shutter.n.01', 'name': 'shutter'}, {'id': 10877, 'synset': 'shuttle.n.03', 'name': 'shuttle'}, {'id': 10878, 'synset': 'shuttle.n.02', 'name': 'shuttle'}, {'id': 10879, 'synset': 'shuttle_bus.n.01', 'name': 'shuttle_bus'}, {'id': 10880, 'synset': 'shuttlecock.n.01', 'name': 'shuttlecock'}, {'id': 10881, 'synset': 'shuttle_helicopter.n.01', 'name': 'shuttle_helicopter'}, {'id': 10882, 'synset': 'sibley_tent.n.01', 'name': 'Sibley_tent'}, {'id': 10883, 'synset': 'sickbay.n.01', 'name': 'sickbay'}, {'id': 10884, 'synset': 'sickbed.n.01', 'name': 'sickbed'}, {'id': 10885, 'synset': 'sickle.n.01', 'name': 'sickle'}, {'id': 10886, 'synset': 'sickroom.n.01', 'name': 'sickroom'}, {'id': 10887, 'synset': 'sideboard.n.02', 'name': 'sideboard'}, {'id': 10888, 'synset': 'sidecar.n.02', 'name': 'sidecar'}, {'id': 10889, 'synset': 'side_chapel.n.01', 'name': 'side_chapel'}, {'id': 10890, 'synset': 'sidelight.n.01', 'name': 'sidelight'}, {'id': 10891, 'synset': 'sidesaddle.n.01', 'name': 'sidesaddle'}, {'id': 10892, 'synset': 'sidewalk.n.01', 'name': 'sidewalk'}, {'id': 10893, 'synset': 'sidewall.n.02', 'name': 'sidewall'}, {'id': 10894, 'synset': 'side-wheeler.n.01', 'name': 'side-wheeler'}, {'id': 10895, 'synset': 'sidewinder.n.02', 'name': 'sidewinder'}, {'id': 10896, 'synset': 'sieve.n.01', 'name': 'sieve'}, {'id': 10897, 'synset': 'sifter.n.01', 'name': 'sifter'}, {'id': 10898, 'synset': 'sights.n.01', 'name': 'sights'}, {'id': 10899, 'synset': 'sigmoidoscope.n.01', 'name': 'sigmoidoscope'}, {'id': 10900, 'synset': 'signal_box.n.01', 'name': 'signal_box'}, {'id': 10901, 'synset': 'signaling_device.n.01', 'name': 'signaling_device'}, {'id': 10902, 'synset': 'silencer.n.02', 'name': 'silencer'}, {'id': 10903, 'synset': 'silent_butler.n.01', 'name': 'silent_butler'}, {'id': 10904, 'synset': 'silex.n.02', 'name': 'Silex'}, {'id': 10905, 'synset': 'silk.n.01', 'name': 'silk'}, {'id': 10906, 'synset': 'silks.n.01', 'name': 'silks'}, {'id': 10907, 'synset': 'silver_plate.n.02', 'name': 'silver_plate'}, {'id': 10908, 'synset': 'silverpoint.n.01', 'name': 'silverpoint'}, {'id': 10909, 'synset': 'simple_pendulum.n.01', 'name': 'simple_pendulum'}, {'id': 10910, 'synset': 'simulator.n.01', 'name': 'simulator'}, {'id': 10911, 'synset': 'single_bed.n.01', 'name': 'single_bed'}, {'id': 10912, 'synset': 'single-breasted_jacket.n.01', 'name': 'single-breasted_jacket'}, {'id': 10913, 'synset': 'single-breasted_suit.n.01', 'name': 'single-breasted_suit'}, {'id': 10914, 'synset': 'single_prop.n.01', 'name': 'single_prop'}, {'id': 10915, 'synset': 'single-reed_instrument.n.01', 'name': 'single-reed_instrument'}, {'id': 10916, 'synset': 'single-rotor_helicopter.n.01', 'name': 'single-rotor_helicopter'}, {'id': 10917, 'synset': 'singlestick.n.01', 'name': 'singlestick'}, {'id': 10918, 'synset': 'singlet.n.01', 'name': 'singlet'}, {'id': 10919, 'synset': 'siren.n.04', 'name': 'siren'}, {'id': 10920, 'synset': 'sister_ship.n.01', 'name': 'sister_ship'}, {'id': 10921, 'synset': 'sitar.n.01', 'name': 'sitar'}, {'id': 10922, 'synset': 'sitz_bath.n.01', 'name': 'sitz_bath'}, {'id': 10923, 'synset': 'six-pack.n.01', 'name': 'six-pack'}, {'id': 10924, 'synset': 'skate.n.01', 'name': 'skate'}, {'id': 10925, 'synset': 'skeg.n.01', 'name': 'skeg'}, {'id': 10926, 'synset': 'skein.n.01', 'name': 'skein'}, {'id': 10927, 'synset': 'skeleton.n.04', 'name': 'skeleton'}, {'id': 10928, 'synset': 'skeleton_key.n.01', 'name': 'skeleton_key'}, {'id': 10929, 'synset': 'skep.n.02', 'name': 'skep'}, {'id': 10930, 'synset': 'skep.n.01', 'name': 'skep'}, {'id': 10931, 'synset': 'sketch.n.01', 'name': 'sketch'}, {'id': 10932, 'synset': 'sketcher.n.02', 'name': 'sketcher'}, {'id': 10933, 'synset': 'skew_arch.n.01', 'name': 'skew_arch'}, {'id': 10934, 'synset': 'ski_binding.n.01', 'name': 'ski_binding'}, {'id': 10935, 'synset': 'skibob.n.01', 'name': 'skibob'}, {'id': 10936, 'synset': 'ski_cap.n.01', 'name': 'ski_cap'}, {'id': 10937, 'synset': 'skidder.n.03', 'name': 'skidder'}, {'id': 10938, 'synset': 'skid_lid.n.01', 'name': 'skid_lid'}, {'id': 10939, 'synset': 'skiff.n.01', 'name': 'skiff'}, {'id': 10940, 'synset': 'ski_jump.n.01', 'name': 'ski_jump'}, {'id': 10941, 'synset': 'ski_lodge.n.01', 'name': 'ski_lodge'}, {'id': 10942, 'synset': 'ski_mask.n.01', 'name': 'ski_mask'}, {'id': 10943, 'synset': 'skimmer.n.02', 'name': 'skimmer'}, {'id': 10944, 'synset': 'ski-plane.n.01', 'name': 'ski-plane'}, {'id': 10945, 'synset': 'ski_rack.n.01', 'name': 'ski_rack'}, {'id': 10946, 'synset': 'skirt.n.01', 'name': 'skirt'}, {'id': 10947, 'synset': 'ski_tow.n.01', 'name': 'ski_tow'}, {'id': 10948, 'synset': 'skivvies.n.01', 'name': 'Skivvies'}, {'id': 10949, 'synset': 'skybox.n.01', 'name': 'skybox'}, {'id': 10950, 'synset': 'skyhook.n.02', 'name': 'skyhook'}, {'id': 10951, 'synset': 'skylight.n.01', 'name': 'skylight'}, {'id': 10952, 'synset': 'skysail.n.01', 'name': 'skysail'}, {'id': 10953, 'synset': 'skyscraper.n.01', 'name': 'skyscraper'}, {'id': 10954, 'synset': 'skywalk.n.01', 'name': 'skywalk'}, {'id': 10955, 'synset': 'slacks.n.01', 'name': 'slacks'}, {'id': 10956, 'synset': 'slack_suit.n.01', 'name': 'slack_suit'}, {'id': 10957, 'synset': 'slasher.n.02', 'name': 'slasher'}, {'id': 10958, 'synset': 'slash_pocket.n.01', 'name': 'slash_pocket'}, {'id': 10959, 'synset': 'slat.n.01', 'name': 'slat'}, {'id': 10960, 'synset': 'slate.n.01', 'name': 'slate'}, {'id': 10961, 'synset': 'slate_pencil.n.01', 'name': 'slate_pencil'}, {'id': 10962, 'synset': 'slate_roof.n.01', 'name': 'slate_roof'}, {'id': 10963, 'synset': 'sleeper.n.07', 'name': 'sleeper'}, {'id': 10964, 'synset': 'sleeper.n.06', 'name': 'sleeper'}, {'id': 10965, 'synset': 'sleeping_car.n.01', 'name': 'sleeping_car'}, {'id': 10966, 'synset': 'sleeve.n.01', 'name': 'sleeve'}, {'id': 10967, 'synset': 'sleeve.n.02', 'name': 'sleeve'}, {'id': 10968, 'synset': 'sleigh_bed.n.01', 'name': 'sleigh_bed'}, {'id': 10969, 'synset': 'sleigh_bell.n.01', 'name': 'sleigh_bell'}, {'id': 10970, 'synset': 'slice_bar.n.01', 'name': 'slice_bar'}, {'id': 10971, 'synset': 'slicer.n.03', 'name': 'slicer'}, {'id': 10972, 'synset': 'slicer.n.02', 'name': 'slicer'}, {'id': 10973, 'synset': 'slide.n.04', 'name': 'slide'}, {'id': 10974, 'synset': 'slide_fastener.n.01', 'name': 'slide_fastener'}, {'id': 10975, 'synset': 'slide_projector.n.01', 'name': 'slide_projector'}, {'id': 10976, 'synset': 'slide_rule.n.01', 'name': 'slide_rule'}, {'id': 10977, 'synset': 'slide_valve.n.01', 'name': 'slide_valve'}, {'id': 10978, 'synset': 'sliding_door.n.01', 'name': 'sliding_door'}, {'id': 10979, 'synset': 'sliding_seat.n.01', 'name': 'sliding_seat'}, {'id': 10980, 'synset': 'sliding_window.n.01', 'name': 'sliding_window'}, {'id': 10981, 'synset': 'sling.n.04', 'name': 'sling'}, {'id': 10982, 'synset': 'slingback.n.01', 'name': 'slingback'}, {'id': 10983, 'synset': 'slinger_ring.n.01', 'name': 'slinger_ring'}, {'id': 10984, 'synset': 'slip_clutch.n.01', 'name': 'slip_clutch'}, {'id': 10985, 'synset': 'slipcover.n.01', 'name': 'slipcover'}, {'id': 10986, 'synset': 'slip-joint_pliers.n.01', 'name': 'slip-joint_pliers'}, {'id': 10987, 'synset': 'slipknot.n.01', 'name': 'slipknot'}, {'id': 10988, 'synset': 'slip-on.n.01', 'name': 'slip-on'}, {'id': 10989, 'synset': 'slip_ring.n.01', 'name': 'slip_ring'}, {'id': 10990, 'synset': 'slit_lamp.n.01', 'name': 'slit_lamp'}, {'id': 10991, 'synset': 'slit_trench.n.01', 'name': 'slit_trench'}, {'id': 10992, 'synset': 'sloop.n.01', 'name': 'sloop'}, {'id': 10993, 'synset': 'sloop_of_war.n.01', 'name': 'sloop_of_war'}, {'id': 10994, 'synset': 'slop_basin.n.01', 'name': 'slop_basin'}, {'id': 10995, 'synset': 'slop_pail.n.01', 'name': 'slop_pail'}, {'id': 10996, 'synset': 'slops.n.02', 'name': 'slops'}, {'id': 10997, 'synset': 'slopshop.n.01', 'name': 'slopshop'}, {'id': 10998, 'synset': 'slot.n.07', 'name': 'slot'}, {'id': 10999, 'synset': 'slot_machine.n.01', 'name': 'slot_machine'}, {'id': 11000, 'synset': 'sluice.n.01', 'name': 'sluice'}, {'id': 11001, 'synset': 'smack.n.03', 'name': 'smack'}, {'id': 11002, 'synset': 'small_boat.n.01', 'name': 'small_boat'}, {'id': 11003, 'synset': 'small_computer_system_interface.n.01', 'name': 'small_computer_system_interface'}, {'id': 11004, 'synset': 'small_ship.n.01', 'name': 'small_ship'}, {'id': 11005, 'synset': 'small_stores.n.01', 'name': 'small_stores'}, {'id': 11006, 'synset': 'smart_bomb.n.01', 'name': 'smart_bomb'}, {'id': 11007, 'synset': 'smelling_bottle.n.01', 'name': 'smelling_bottle'}, {'id': 11008, 'synset': 'smocking.n.01', 'name': 'smocking'}, {'id': 11009, 'synset': 'smoke_bomb.n.01', 'name': 'smoke_bomb'}, {'id': 11010, 'synset': 'smokehouse.n.01', 'name': 'smokehouse'}, {'id': 11011, 'synset': 'smoker.n.03', 'name': 'smoker'}, {'id': 11012, 'synset': 'smoke_screen.n.01', 'name': 'smoke_screen'}, {'id': 11013, 'synset': 'smoking_room.n.01', 'name': 'smoking_room'}, {'id': 11014, 'synset': 'smoothbore.n.01', 'name': 'smoothbore'}, {'id': 11015, 'synset': 'smooth_plane.n.01', 'name': 'smooth_plane'}, {'id': 11016, 'synset': 'snack_bar.n.01', 'name': 'snack_bar'}, {'id': 11017, 'synset': 'snaffle.n.01', 'name': 'snaffle'}, {'id': 11018, 'synset': 'snap.n.10', 'name': 'snap'}, {'id': 11019, 'synset': 'snap_brim.n.01', 'name': 'snap_brim'}, {'id': 11020, 'synset': 'snap-brim_hat.n.01', 'name': 'snap-brim_hat'}, {'id': 11021, 'synset': 'snare.n.05', 'name': 'snare'}, {'id': 11022, 'synset': 'snare_drum.n.01', 'name': 'snare_drum'}, {'id': 11023, 'synset': 'snatch_block.n.01', 'name': 'snatch_block'}, {'id': 11024, 'synset': 'snifter.n.01', 'name': 'snifter'}, {'id': 11025, 'synset': 'sniper_rifle.n.01', 'name': 'sniper_rifle'}, {'id': 11026, 'synset': 'snips.n.01', 'name': 'snips'}, {'id': 11027, 'synset': 'sno-cat.n.01', 'name': 'Sno-cat'}, {'id': 11028, 'synset': 'snood.n.01', 'name': 'snood'}, {'id': 11029, 'synset': 'snorkel.n.02', 'name': 'snorkel'}, {'id': 11030, 'synset': 'snorkel.n.01', 'name': 'snorkel'}, {'id': 11031, 'synset': 'snowbank.n.01', 'name': 'snowbank'}, {'id': 11032, 'synset': 'snowplow.n.01', 'name': 'snowplow'}, {'id': 11033, 'synset': 'snowshoe.n.01', 'name': 'snowshoe'}, {'id': 11034, 'synset': 'snowsuit.n.01', 'name': 'snowsuit'}, {'id': 11035, 'synset': 'snow_thrower.n.01', 'name': 'snow_thrower'}, {'id': 11036, 'synset': 'snuffbox.n.01', 'name': 'snuffbox'}, {'id': 11037, 'synset': 'snuffer.n.01', 'name': 'snuffer'}, {'id': 11038, 'synset': 'snuffers.n.01', 'name': 'snuffers'}, {'id': 11039, 'synset': 'soapbox.n.01', 'name': 'soapbox'}, {'id': 11040, 'synset': 'soap_dish.n.01', 'name': 'soap_dish'}, {'id': 11041, 'synset': 'soap_dispenser.n.01', 'name': 'soap_dispenser'}, {'id': 11042, 'synset': 'soap_pad.n.01', 'name': 'soap_pad'}, {'id': 11043, 'synset': 'socket.n.02', 'name': 'socket'}, {'id': 11044, 'synset': 'socket_wrench.n.01', 'name': 'socket_wrench'}, {'id': 11045, 'synset': 'socle.n.01', 'name': 'socle'}, {'id': 11046, 'synset': 'soda_can.n.01', 'name': 'soda_can'}, {'id': 11047, 'synset': 'soda_fountain.n.02', 'name': 'soda_fountain'}, {'id': 11048, 'synset': 'soda_fountain.n.01', 'name': 'soda_fountain'}, {'id': 11049, 'synset': 'sod_house.n.01', 'name': 'sod_house'}, {'id': 11050, 'synset': 'sodium-vapor_lamp.n.01', 'name': 'sodium-vapor_lamp'}, {'id': 11051, 'synset': 'soffit.n.01', 'name': 'soffit'}, {'id': 11052, 'synset': 'soft_pedal.n.01', 'name': 'soft_pedal'}, {'id': 11053, 'synset': 'soil_pipe.n.01', 'name': 'soil_pipe'}, {'id': 11054, 'synset': 'solar_cell.n.01', 'name': 'solar_cell'}, {'id': 11055, 'synset': 'solar_dish.n.01', 'name': 'solar_dish'}, {'id': 11056, 'synset': 'solar_heater.n.01', 'name': 'solar_heater'}, {'id': 11057, 'synset': 'solar_house.n.01', 'name': 'solar_house'}, {'id': 11058, 'synset': 'solar_telescope.n.01', 'name': 'solar_telescope'}, {'id': 11059, 'synset': 'solar_thermal_system.n.01', 'name': 'solar_thermal_system'}, {'id': 11060, 'synset': 'soldering_iron.n.01', 'name': 'soldering_iron'}, {'id': 11061, 'synset': 'solenoid.n.01', 'name': 'solenoid'}, {'id': 11062, 'synset': 'solleret.n.01', 'name': 'solleret'}, {'id': 11063, 'synset': 'sonic_depth_finder.n.01', 'name': 'sonic_depth_finder'}, {'id': 11064, 'synset': 'sonogram.n.01', 'name': 'sonogram'}, {'id': 11065, 'synset': 'sonograph.n.01', 'name': 'sonograph'}, {'id': 11066, 'synset': 'sorter.n.02', 'name': 'sorter'}, {'id': 11067, 'synset': 'souk.n.01', 'name': 'souk'}, {'id': 11068, 'synset': 'sound_bow.n.01', 'name': 'sound_bow'}, {'id': 11069, 'synset': 'soundbox.n.01', 'name': 'soundbox'}, {'id': 11070, 'synset': 'sound_camera.n.01', 'name': 'sound_camera'}, {'id': 11071, 'synset': 'sounder.n.01', 'name': 'sounder'}, {'id': 11072, 'synset': 'sound_film.n.01', 'name': 'sound_film'}, {'id': 11073, 'synset': 'sounding_board.n.02', 'name': 'sounding_board'}, {'id': 11074, 'synset': 'sounding_rocket.n.01', 'name': 'sounding_rocket'}, {'id': 11075, 'synset': 'sound_recording.n.01', 'name': 'sound_recording'}, {'id': 11076, 'synset': 'sound_spectrograph.n.01', 'name': 'sound_spectrograph'}, {'id': 11077, 'synset': 'soup_ladle.n.01', 'name': 'soup_ladle'}, {'id': 11078, 'synset': 'source_of_illumination.n.01', 'name': 'source_of_illumination'}, {'id': 11079, 'synset': 'sourdine.n.02', 'name': 'sourdine'}, {'id': 11080, 'synset': 'soutache.n.01', 'name': 'soutache'}, {'id': 11081, 'synset': 'soutane.n.01', 'name': 'soutane'}, {'id': 11082, 'synset': "sou'wester.n.02", 'name': "sou'wester"}, {'id': 11083, 'synset': 'soybean_future.n.01', 'name': 'soybean_future'}, {'id': 11084, 'synset': 'space_bar.n.01', 'name': 'space_bar'}, {'id': 11085, 'synset': 'space_capsule.n.01', 'name': 'space_capsule'}, {'id': 11086, 'synset': 'spacecraft.n.01', 'name': 'spacecraft'}, {'id': 11087, 'synset': 'space_heater.n.01', 'name': 'space_heater'}, {'id': 11088, 'synset': 'space_helmet.n.01', 'name': 'space_helmet'}, {'id': 11089, 'synset': 'space_rocket.n.01', 'name': 'space_rocket'}, {'id': 11090, 'synset': 'space_station.n.01', 'name': 'space_station'}, {'id': 11091, 'synset': 'spacesuit.n.01', 'name': 'spacesuit'}, {'id': 11092, 'synset': 'spade.n.02', 'name': 'spade'}, {'id': 11093, 'synset': 'spade_bit.n.01', 'name': 'spade_bit'}, {'id': 11094, 'synset': 'spaghetti_junction.n.01', 'name': 'spaghetti_junction'}, {'id': 11095, 'synset': 'spandau.n.01', 'name': 'Spandau'}, {'id': 11096, 'synset': 'spandex.n.01', 'name': 'spandex'}, {'id': 11097, 'synset': 'spandrel.n.01', 'name': 'spandrel'}, {'id': 11098, 'synset': 'spanker.n.02', 'name': 'spanker'}, {'id': 11099, 'synset': 'spar.n.02', 'name': 'spar'}, {'id': 11100, 'synset': 'sparge_pipe.n.01', 'name': 'sparge_pipe'}, {'id': 11101, 'synset': 'spark_arrester.n.02', 'name': 'spark_arrester'}, {'id': 11102, 'synset': 'spark_arrester.n.01', 'name': 'spark_arrester'}, {'id': 11103, 'synset': 'spark_chamber.n.01', 'name': 'spark_chamber'}, {'id': 11104, 'synset': 'spark_coil.n.01', 'name': 'spark_coil'}, {'id': 11105, 'synset': 'spark_gap.n.01', 'name': 'spark_gap'}, {'id': 11106, 'synset': 'spark_lever.n.01', 'name': 'spark_lever'}, {'id': 11107, 'synset': 'spark_plug.n.01', 'name': 'spark_plug'}, {'id': 11108, 'synset': 'sparkplug_wrench.n.01', 'name': 'sparkplug_wrench'}, {'id': 11109, 'synset': 'spark_transmitter.n.01', 'name': 'spark_transmitter'}, {'id': 11110, 'synset': 'spat.n.02', 'name': 'spat'}, {'id': 11111, 'synset': 'spatula.n.01', 'name': 'spatula'}, {'id': 11112, 'synset': 'speakerphone.n.01', 'name': 'speakerphone'}, {'id': 11113, 'synset': 'speaking_trumpet.n.01', 'name': 'speaking_trumpet'}, {'id': 11114, 'synset': 'spear.n.02', 'name': 'spear'}, {'id': 11115, 'synset': 'specialty_store.n.01', 'name': 'specialty_store'}, {'id': 11116, 'synset': 'specimen_bottle.n.01', 'name': 'specimen_bottle'}, {'id': 11117, 'synset': 'spectacle.n.02', 'name': 'spectacle'}, {'id': 11118, 'synset': 'spectator_pump.n.01', 'name': 'spectator_pump'}, {'id': 11119, 'synset': 'spectrograph.n.01', 'name': 'spectrograph'}, {'id': 11120, 'synset': 'spectrophotometer.n.01', 'name': 'spectrophotometer'}, {'id': 11121, 'synset': 'spectroscope.n.01', 'name': 'spectroscope'}, {'id': 11122, 'synset': 'speculum.n.02', 'name': 'speculum'}, {'id': 11123, 'synset': 'speedboat.n.01', 'name': 'speedboat'}, {'id': 11124, 'synset': 'speed_bump.n.01', 'name': 'speed_bump'}, {'id': 11125, 'synset': 'speedometer.n.01', 'name': 'speedometer'}, {'id': 11126, 'synset': 'speed_skate.n.01', 'name': 'speed_skate'}, {'id': 11127, 'synset': 'spherometer.n.01', 'name': 'spherometer'}, {'id': 11128, 'synset': 'sphygmomanometer.n.01', 'name': 'sphygmomanometer'}, {'id': 11129, 'synset': 'spicemill.n.01', 'name': 'spicemill'}, {'id': 11130, 'synset': 'spider.n.03', 'name': 'spider'}, {'id': 11131, 'synset': 'spider_web.n.01', 'name': 'spider_web'}, {'id': 11132, 'synset': 'spike.n.02', 'name': 'spike'}, {'id': 11133, 'synset': 'spike.n.11', 'name': 'spike'}, {'id': 11134, 'synset': 'spindle.n.04', 'name': 'spindle'}, {'id': 11135, 'synset': 'spindle.n.03', 'name': 'spindle'}, {'id': 11136, 'synset': 'spindle.n.02', 'name': 'spindle'}, {'id': 11137, 'synset': 'spin_dryer.n.01', 'name': 'spin_dryer'}, {'id': 11138, 'synset': 'spinet.n.02', 'name': 'spinet'}, {'id': 11139, 'synset': 'spinet.n.01', 'name': 'spinet'}, {'id': 11140, 'synset': 'spinnaker.n.01', 'name': 'spinnaker'}, {'id': 11141, 'synset': 'spinner.n.03', 'name': 'spinner'}, {'id': 11142, 'synset': 'spinning_frame.n.01', 'name': 'spinning_frame'}, {'id': 11143, 'synset': 'spinning_jenny.n.01', 'name': 'spinning_jenny'}, {'id': 11144, 'synset': 'spinning_machine.n.01', 'name': 'spinning_machine'}, {'id': 11145, 'synset': 'spinning_rod.n.01', 'name': 'spinning_rod'}, {'id': 11146, 'synset': 'spinning_wheel.n.01', 'name': 'spinning_wheel'}, {'id': 11147, 'synset': 'spiral_bandage.n.01', 'name': 'spiral_bandage'}, {'id': 11148, 'synset': 'spiral_ratchet_screwdriver.n.01', 'name': 'spiral_ratchet_screwdriver'}, {'id': 11149, 'synset': 'spiral_spring.n.01', 'name': 'spiral_spring'}, {'id': 11150, 'synset': 'spirit_lamp.n.01', 'name': 'spirit_lamp'}, {'id': 11151, 'synset': 'spirit_stove.n.01', 'name': 'spirit_stove'}, {'id': 11152, 'synset': 'spirometer.n.01', 'name': 'spirometer'}, {'id': 11153, 'synset': 'spit.n.03', 'name': 'spit'}, {'id': 11154, 'synset': 'spittoon.n.01', 'name': 'spittoon'}, {'id': 11155, 'synset': 'splashboard.n.02', 'name': 'splashboard'}, {'id': 11156, 'synset': 'splasher.n.01', 'name': 'splasher'}, {'id': 11157, 'synset': 'splice.n.01', 'name': 'splice'}, {'id': 11158, 'synset': 'splicer.n.03', 'name': 'splicer'}, {'id': 11159, 'synset': 'splint.n.02', 'name': 'splint'}, {'id': 11160, 'synset': 'split_rail.n.01', 'name': 'split_rail'}, {'id': 11161, 'synset': 'spode.n.02', 'name': 'Spode'}, {'id': 11162, 'synset': 'spoiler.n.05', 'name': 'spoiler'}, {'id': 11163, 'synset': 'spoiler.n.04', 'name': 'spoiler'}, {'id': 11164, 'synset': 'spoke.n.01', 'name': 'spoke'}, {'id': 11165, 'synset': 'spokeshave.n.01', 'name': 'spokeshave'}, {'id': 11166, 'synset': 'sponge_cloth.n.01', 'name': 'sponge_cloth'}, {'id': 11167, 'synset': 'sponge_mop.n.01', 'name': 'sponge_mop'}, {'id': 11168, 'synset': 'spoon.n.03', 'name': 'spoon'}, {'id': 11169, 'synset': 'spork.n.01', 'name': 'Spork'}, {'id': 11170, 'synset': 'sporran.n.01', 'name': 'sporran'}, {'id': 11171, 'synset': 'sport_kite.n.01', 'name': 'sport_kite'}, {'id': 11172, 'synset': 'sports_car.n.01', 'name': 'sports_car'}, {'id': 11173, 'synset': 'sports_equipment.n.01', 'name': 'sports_equipment'}, {'id': 11174, 'synset': 'sports_implement.n.01', 'name': 'sports_implement'}, {'id': 11175, 'synset': 'sport_utility.n.01', 'name': 'sport_utility'}, {'id': 11176, 'synset': 'spot.n.07', 'name': 'spot'}, {'id': 11177, 'synset': 'spot_weld.n.01', 'name': 'spot_weld'}, {'id': 11178, 'synset': 'spouter.n.02', 'name': 'spouter'}, {'id': 11179, 'synset': 'sprag.n.01', 'name': 'sprag'}, {'id': 11180, 'synset': 'spray_gun.n.01', 'name': 'spray_gun'}, {'id': 11181, 'synset': 'spray_paint.n.01', 'name': 'spray_paint'}, {'id': 11182, 'synset': 'spreader.n.01', 'name': 'spreader'}, {'id': 11183, 'synset': 'sprig.n.02', 'name': 'sprig'}, {'id': 11184, 'synset': 'spring.n.02', 'name': 'spring'}, {'id': 11185, 'synset': 'spring_balance.n.01', 'name': 'spring_balance'}, {'id': 11186, 'synset': 'springboard.n.01', 'name': 'springboard'}, {'id': 11187, 'synset': 'sprinkler.n.01', 'name': 'sprinkler'}, {'id': 11188, 'synset': 'sprinkler_system.n.01', 'name': 'sprinkler_system'}, {'id': 11189, 'synset': 'sprit.n.01', 'name': 'sprit'}, {'id': 11190, 'synset': 'spritsail.n.01', 'name': 'spritsail'}, {'id': 11191, 'synset': 'sprocket.n.02', 'name': 'sprocket'}, {'id': 11192, 'synset': 'sprocket.n.01', 'name': 'sprocket'}, {'id': 11193, 'synset': 'spun_yarn.n.01', 'name': 'spun_yarn'}, {'id': 11194, 'synset': 'spur.n.04', 'name': 'spur'}, {'id': 11195, 'synset': 'spur_gear.n.01', 'name': 'spur_gear'}, {'id': 11196, 'synset': 'sputnik.n.01', 'name': 'sputnik'}, {'id': 11197, 'synset': 'spy_satellite.n.01', 'name': 'spy_satellite'}, {'id': 11198, 'synset': 'squad_room.n.01', 'name': 'squad_room'}, {'id': 11199, 'synset': 'square.n.08', 'name': 'square'}, {'id': 11200, 'synset': 'square_knot.n.01', 'name': 'square_knot'}, {'id': 11201, 'synset': 'square-rigger.n.01', 'name': 'square-rigger'}, {'id': 11202, 'synset': 'square_sail.n.01', 'name': 'square_sail'}, {'id': 11203, 'synset': 'squash_ball.n.01', 'name': 'squash_ball'}, {'id': 11204, 'synset': 'squash_racket.n.01', 'name': 'squash_racket'}, {'id': 11205, 'synset': 'squawk_box.n.01', 'name': 'squawk_box'}, {'id': 11206, 'synset': 'squeegee.n.01', 'name': 'squeegee'}, {'id': 11207, 'synset': 'squeezer.n.01', 'name': 'squeezer'}, {'id': 11208, 'synset': 'squelch_circuit.n.01', 'name': 'squelch_circuit'}, {'id': 11209, 'synset': 'squinch.n.01', 'name': 'squinch'}, {'id': 11210, 'synset': 'stabilizer.n.03', 'name': 'stabilizer'}, {'id': 11211, 'synset': 'stabilizer.n.02', 'name': 'stabilizer'}, {'id': 11212, 'synset': 'stabilizer_bar.n.01', 'name': 'stabilizer_bar'}, {'id': 11213, 'synset': 'stable.n.01', 'name': 'stable'}, {'id': 11214, 'synset': 'stable_gear.n.01', 'name': 'stable_gear'}, {'id': 11215, 'synset': 'stabling.n.01', 'name': 'stabling'}, {'id': 11216, 'synset': 'stacks.n.02', 'name': 'stacks'}, {'id': 11217, 'synset': 'staddle.n.01', 'name': 'staddle'}, {'id': 11218, 'synset': 'stadium.n.01', 'name': 'stadium'}, {'id': 11219, 'synset': 'stage.n.03', 'name': 'stage'}, {'id': 11220, 'synset': 'stained-glass_window.n.01', 'name': 'stained-glass_window'}, {'id': 11221, 'synset': 'stair-carpet.n.01', 'name': 'stair-carpet'}, {'id': 11222, 'synset': 'stair-rod.n.01', 'name': 'stair-rod'}, {'id': 11223, 'synset': 'stairwell.n.01', 'name': 'stairwell'}, {'id': 11224, 'synset': 'stake.n.05', 'name': 'stake'}, {'id': 11225, 'synset': 'stall.n.03', 'name': 'stall'}, {'id': 11226, 'synset': 'stall.n.01', 'name': 'stall'}, {'id': 11227, 'synset': 'stamp.n.08', 'name': 'stamp'}, {'id': 11228, 'synset': 'stamp_mill.n.01', 'name': 'stamp_mill'}, {'id': 11229, 'synset': 'stamping_machine.n.01', 'name': 'stamping_machine'}, {'id': 11230, 'synset': 'stanchion.n.01', 'name': 'stanchion'}, {'id': 11231, 'synset': 'stand.n.04', 'name': 'stand'}, {'id': 11232, 'synset': 'standard.n.05', 'name': 'standard'}, {'id': 11233, 'synset': 'standard_cell.n.01', 'name': 'standard_cell'}, {'id': 11234, 'synset': 'standard_transmission.n.01', 'name': 'standard_transmission'}, {'id': 11235, 'synset': 'standing_press.n.01', 'name': 'standing_press'}, {'id': 11236, 'synset': 'stanhope.n.01', 'name': 'stanhope'}, {'id': 11237, 'synset': 'stanley_steamer.n.01', 'name': 'Stanley_Steamer'}, {'id': 11238, 'synset': 'staple.n.05', 'name': 'staple'}, {'id': 11239, 'synset': 'staple.n.04', 'name': 'staple'}, {'id': 11240, 'synset': 'staple_gun.n.01', 'name': 'staple_gun'}, {'id': 11241, 'synset': 'starship.n.01', 'name': 'starship'}, {'id': 11242, 'synset': 'starter.n.01', 'name': 'starter'}, {'id': 11243, 'synset': 'starting_gate.n.01', 'name': 'starting_gate'}, {'id': 11244, 'synset': 'stassano_furnace.n.01', 'name': 'Stassano_furnace'}, {'id': 11245, 'synset': 'statehouse.n.01', 'name': 'Statehouse'}, {'id': 11246, 'synset': 'stately_home.n.01', 'name': 'stately_home'}, {'id': 11247, 'synset': 'state_prison.n.01', 'name': 'state_prison'}, {'id': 11248, 'synset': 'stateroom.n.01', 'name': 'stateroom'}, {'id': 11249, 'synset': 'static_tube.n.01', 'name': 'static_tube'}, {'id': 11250, 'synset': 'station.n.01', 'name': 'station'}, {'id': 11251, 'synset': 'stator.n.01', 'name': 'stator'}, {'id': 11252, 'synset': 'stay.n.05', 'name': 'stay'}, {'id': 11253, 'synset': 'staysail.n.01', 'name': 'staysail'}, {'id': 11254, 'synset': 'steakhouse.n.01', 'name': 'steakhouse'}, {'id': 11255, 'synset': 'stealth_aircraft.n.01', 'name': 'stealth_aircraft'}, {'id': 11256, 'synset': 'stealth_bomber.n.01', 'name': 'stealth_bomber'}, {'id': 11257, 'synset': 'stealth_fighter.n.01', 'name': 'stealth_fighter'}, {'id': 11258, 'synset': 'steam_bath.n.01', 'name': 'steam_bath'}, {'id': 11259, 'synset': 'steamboat.n.01', 'name': 'steamboat'}, {'id': 11260, 'synset': 'steam_chest.n.01', 'name': 'steam_chest'}, {'id': 11261, 'synset': 'steam_engine.n.01', 'name': 'steam_engine'}, {'id': 11262, 'synset': 'steamer.n.03', 'name': 'steamer'}, {'id': 11263, 'synset': 'steamer.n.02', 'name': 'steamer'}, {'id': 11264, 'synset': 'steam_iron.n.01', 'name': 'steam_iron'}, {'id': 11265, 'synset': 'steam_locomotive.n.01', 'name': 'steam_locomotive'}, {'id': 11266, 'synset': 'steamroller.n.02', 'name': 'steamroller'}, {'id': 11267, 'synset': 'steam_shovel.n.01', 'name': 'steam_shovel'}, {'id': 11268, 'synset': 'steam_turbine.n.01', 'name': 'steam_turbine'}, {'id': 11269, 'synset': 'steam_whistle.n.01', 'name': 'steam_whistle'}, {'id': 11270, 'synset': 'steel.n.03', 'name': 'steel'}, {'id': 11271, 'synset': 'steel_arch_bridge.n.01', 'name': 'steel_arch_bridge'}, {'id': 11272, 'synset': 'steel_drum.n.01', 'name': 'steel_drum'}, {'id': 11273, 'synset': 'steel_mill.n.01', 'name': 'steel_mill'}, {'id': 11274, 'synset': 'steel-wool_pad.n.01', 'name': 'steel-wool_pad'}, {'id': 11275, 'synset': 'steelyard.n.01', 'name': 'steelyard'}, {'id': 11276, 'synset': 'steeple.n.01', 'name': 'steeple'}, {'id': 11277, 'synset': 'steerage.n.01', 'name': 'steerage'}, {'id': 11278, 'synset': 'steering_gear.n.01', 'name': 'steering_gear'}, {'id': 11279, 'synset': 'steering_linkage.n.01', 'name': 'steering_linkage'}, {'id': 11280, 'synset': 'steering_system.n.01', 'name': 'steering_system'}, {'id': 11281, 'synset': 'stele.n.02', 'name': 'stele'}, {'id': 11282, 'synset': 'stem-winder.n.01', 'name': 'stem-winder'}, {'id': 11283, 'synset': 'stencil.n.01', 'name': 'stencil'}, {'id': 11284, 'synset': 'sten_gun.n.01', 'name': 'Sten_gun'}, {'id': 11285, 'synset': 'stenograph.n.02', 'name': 'stenograph'}, {'id': 11286, 'synset': 'step.n.04', 'name': 'step'}, {'id': 11287, 'synset': 'step-down_transformer.n.01', 'name': 'step-down_transformer'}, {'id': 11288, 'synset': 'step-up_transformer.n.01', 'name': 'step-up_transformer'}, {'id': 11289, 'synset': 'stereoscope.n.01', 'name': 'stereoscope'}, {'id': 11290, 'synset': 'stern_chaser.n.01', 'name': 'stern_chaser'}, {'id': 11291, 'synset': 'sternpost.n.01', 'name': 'sternpost'}, {'id': 11292, 'synset': 'sternwheeler.n.01', 'name': 'sternwheeler'}, {'id': 11293, 'synset': 'stethoscope.n.01', 'name': 'stethoscope'}, {'id': 11294, 'synset': 'stewing_pan.n.01', 'name': 'stewing_pan'}, {'id': 11295, 'synset': 'stick.n.01', 'name': 'stick'}, {'id': 11296, 'synset': 'stick.n.07', 'name': 'stick'}, {'id': 11297, 'synset': 'stick.n.03', 'name': 'stick'}, {'id': 11298, 'synset': 'stick.n.06', 'name': 'stick'}, {'id': 11299, 'synset': 'stile.n.01', 'name': 'stile'}, {'id': 11300, 'synset': 'stiletto.n.01', 'name': 'stiletto'}, {'id': 11301, 'synset': 'still.n.03', 'name': 'still'}, {'id': 11302, 'synset': 'stillroom.n.01', 'name': 'stillroom'}, {'id': 11303, 'synset': 'stillson_wrench.n.01', 'name': 'Stillson_wrench'}, {'id': 11304, 'synset': 'stilt.n.02', 'name': 'stilt'}, {'id': 11305, 'synset': 'stinger.n.03', 'name': 'Stinger'}, {'id': 11306, 'synset': 'stink_bomb.n.01', 'name': 'stink_bomb'}, {'id': 11307, 'synset': 'stirrup_pump.n.01', 'name': 'stirrup_pump'}, {'id': 11308, 'synset': 'stob.n.01', 'name': 'stob'}, {'id': 11309, 'synset': 'stock.n.03', 'name': 'stock'}, {'id': 11310, 'synset': 'stockade.n.01', 'name': 'stockade'}, {'id': 11311, 'synset': 'stockcar.n.01', 'name': 'stockcar'}, {'id': 11312, 'synset': 'stock_car.n.02', 'name': 'stock_car'}, {'id': 11313, 'synset': 'stockinet.n.01', 'name': 'stockinet'}, {'id': 11314, 'synset': 'stocking.n.01', 'name': 'stocking'}, {'id': 11315, 'synset': 'stock-in-trade.n.01', 'name': 'stock-in-trade'}, {'id': 11316, 'synset': 'stockpot.n.01', 'name': 'stockpot'}, {'id': 11317, 'synset': 'stockroom.n.01', 'name': 'stockroom'}, {'id': 11318, 'synset': 'stocks.n.03', 'name': 'stocks'}, {'id': 11319, 'synset': 'stock_saddle.n.01', 'name': 'stock_saddle'}, {'id': 11320, 'synset': 'stockyard.n.01', 'name': 'stockyard'}, {'id': 11321, 'synset': 'stole.n.01', 'name': 'stole'}, {'id': 11322, 'synset': 'stomacher.n.01', 'name': 'stomacher'}, {'id': 11323, 'synset': 'stomach_pump.n.01', 'name': 'stomach_pump'}, {'id': 11324, 'synset': 'stone_wall.n.01', 'name': 'stone_wall'}, {'id': 11325, 'synset': 'stoneware.n.01', 'name': 'stoneware'}, {'id': 11326, 'synset': 'stonework.n.01', 'name': 'stonework'}, {'id': 11327, 'synset': 'stoop.n.03', 'name': 'stoop'}, {'id': 11328, 'synset': 'stop_bath.n.01', 'name': 'stop_bath'}, {'id': 11329, 'synset': 'stopcock.n.01', 'name': 'stopcock'}, {'id': 11330, 'synset': 'stopper_knot.n.01', 'name': 'stopper_knot'}, {'id': 11331, 'synset': 'stopwatch.n.01', 'name': 'stopwatch'}, {'id': 11332, 'synset': 'storage_battery.n.01', 'name': 'storage_battery'}, {'id': 11333, 'synset': 'storage_cell.n.01', 'name': 'storage_cell'}, {'id': 11334, 'synset': 'storage_ring.n.01', 'name': 'storage_ring'}, {'id': 11335, 'synset': 'storage_space.n.01', 'name': 'storage_space'}, {'id': 11336, 'synset': 'storeroom.n.01', 'name': 'storeroom'}, {'id': 11337, 'synset': 'storm_cellar.n.01', 'name': 'storm_cellar'}, {'id': 11338, 'synset': 'storm_door.n.01', 'name': 'storm_door'}, {'id': 11339, 'synset': 'storm_window.n.01', 'name': 'storm_window'}, {'id': 11340, 'synset': 'stoup.n.02', 'name': 'stoup'}, {'id': 11341, 'synset': 'stoup.n.01', 'name': 'stoup'}, {'id': 11342, 'synset': 'stove.n.02', 'name': 'stove'}, {'id': 11343, 'synset': 'stove_bolt.n.01', 'name': 'stove_bolt'}, {'id': 11344, 'synset': 'stovepipe.n.01', 'name': 'stovepipe'}, {'id': 11345, 'synset': 'stovepipe_iron.n.01', 'name': 'stovepipe_iron'}, {'id': 11346, 'synset': 'stradavarius.n.01', 'name': 'Stradavarius'}, {'id': 11347, 'synset': 'straight_chair.n.01', 'name': 'straight_chair'}, {'id': 11348, 'synset': 'straightedge.n.01', 'name': 'straightedge'}, {'id': 11349, 'synset': 'straightener.n.01', 'name': 'straightener'}, {'id': 11350, 'synset': 'straight_flute.n.01', 'name': 'straight_flute'}, {'id': 11351, 'synset': 'straight_pin.n.01', 'name': 'straight_pin'}, {'id': 11352, 'synset': 'straight_razor.n.01', 'name': 'straight_razor'}, {'id': 11353, 'synset': 'straitjacket.n.02', 'name': 'straitjacket'}, {'id': 11354, 'synset': 'strap.n.04', 'name': 'strap'}, {'id': 11355, 'synset': 'strap_hinge.n.01', 'name': 'strap_hinge'}, {'id': 11356, 'synset': 'strapless.n.01', 'name': 'strapless'}, {'id': 11357, 'synset': 'streamer_fly.n.01', 'name': 'streamer_fly'}, {'id': 11358, 'synset': 'streamliner.n.01', 'name': 'streamliner'}, {'id': 11359, 'synset': 'street.n.01', 'name': 'street'}, {'id': 11360, 'synset': 'street.n.02', 'name': 'street'}, {'id': 11361, 'synset': 'streetcar.n.01', 'name': 'streetcar'}, {'id': 11362, 'synset': 'street_clothes.n.01', 'name': 'street_clothes'}, {'id': 11363, 'synset': 'stretcher.n.03', 'name': 'stretcher'}, {'id': 11364, 'synset': 'stretcher.n.01', 'name': 'stretcher'}, {'id': 11365, 'synset': 'stretch_pants.n.01', 'name': 'stretch_pants'}, {'id': 11366, 'synset': 'strickle.n.02', 'name': 'strickle'}, {'id': 11367, 'synset': 'strickle.n.01', 'name': 'strickle'}, {'id': 11368, 'synset': 'stringed_instrument.n.01', 'name': 'stringed_instrument'}, {'id': 11369, 'synset': 'stringer.n.04', 'name': 'stringer'}, {'id': 11370, 'synset': 'stringer.n.03', 'name': 'stringer'}, {'id': 11371, 'synset': 'string_tie.n.01', 'name': 'string_tie'}, {'id': 11372, 'synset': 'strip.n.05', 'name': 'strip'}, {'id': 11373, 'synset': 'strip_lighting.n.01', 'name': 'strip_lighting'}, {'id': 11374, 'synset': 'strip_mall.n.01', 'name': 'strip_mall'}, {'id': 11375, 'synset': 'stroboscope.n.01', 'name': 'stroboscope'}, {'id': 11376, 'synset': 'strongbox.n.01', 'name': 'strongbox'}, {'id': 11377, 'synset': 'stronghold.n.01', 'name': 'stronghold'}, {'id': 11378, 'synset': 'strongroom.n.01', 'name': 'strongroom'}, {'id': 11379, 'synset': 'strop.n.01', 'name': 'strop'}, {'id': 11380, 'synset': 'structural_member.n.01', 'name': 'structural_member'}, {'id': 11381, 'synset': 'structure.n.01', 'name': 'structure'}, {'id': 11382, 'synset': 'student_center.n.01', 'name': 'student_center'}, {'id': 11383, 'synset': 'student_lamp.n.01', 'name': 'student_lamp'}, {'id': 11384, 'synset': 'student_union.n.01', 'name': 'student_union'}, {'id': 11385, 'synset': 'stud_finder.n.01', 'name': 'stud_finder'}, {'id': 11386, 'synset': 'studio_apartment.n.01', 'name': 'studio_apartment'}, {'id': 11387, 'synset': 'studio_couch.n.01', 'name': 'studio_couch'}, {'id': 11388, 'synset': 'study.n.05', 'name': 'study'}, {'id': 11389, 'synset': 'study_hall.n.02', 'name': 'study_hall'}, {'id': 11390, 'synset': 'stuffing_nut.n.01', 'name': 'stuffing_nut'}, {'id': 11391, 'synset': 'stump.n.03', 'name': 'stump'}, {'id': 11392, 'synset': 'stun_gun.n.01', 'name': 'stun_gun'}, {'id': 11393, 'synset': 'stupa.n.01', 'name': 'stupa'}, {'id': 11394, 'synset': 'sty.n.02', 'name': 'sty'}, {'id': 11395, 'synset': 'stylus.n.01', 'name': 'stylus'}, {'id': 11396, 'synset': 'sub-assembly.n.01', 'name': 'sub-assembly'}, {'id': 11397, 'synset': 'subcompact.n.01', 'name': 'subcompact'}, {'id': 11398, 'synset': 'submachine_gun.n.01', 'name': 'submachine_gun'}, {'id': 11399, 'synset': 'submarine.n.01', 'name': 'submarine'}, {'id': 11400, 'synset': 'submarine_torpedo.n.01', 'name': 'submarine_torpedo'}, {'id': 11401, 'synset': 'submersible.n.02', 'name': 'submersible'}, {'id': 11402, 'synset': 'submersible.n.01', 'name': 'submersible'}, {'id': 11403, 'synset': 'subtracter.n.02', 'name': 'subtracter'}, {'id': 11404, 'synset': 'subway_token.n.01', 'name': 'subway_token'}, {'id': 11405, 'synset': 'subway_train.n.01', 'name': 'subway_train'}, {'id': 11406, 'synset': 'suction_cup.n.01', 'name': 'suction_cup'}, {'id': 11407, 'synset': 'suction_pump.n.01', 'name': 'suction_pump'}, {'id': 11408, 'synset': 'sudatorium.n.01', 'name': 'sudatorium'}, {'id': 11409, 'synset': 'suede_cloth.n.01', 'name': 'suede_cloth'}, {'id': 11410, 'synset': 'sugar_refinery.n.01', 'name': 'sugar_refinery'}, {'id': 11411, 'synset': 'sugar_spoon.n.01', 'name': 'sugar_spoon'}, {'id': 11412, 'synset': 'suite.n.02', 'name': 'suite'}, {'id': 11413, 'synset': 'suiting.n.01', 'name': 'suiting'}, {'id': 11414, 'synset': 'sulky.n.01', 'name': 'sulky'}, {'id': 11415, 'synset': 'summer_house.n.01', 'name': 'summer_house'}, {'id': 11416, 'synset': 'sumo_ring.n.01', 'name': 'sumo_ring'}, {'id': 11417, 'synset': 'sump.n.01', 'name': 'sump'}, {'id': 11418, 'synset': 'sump_pump.n.01', 'name': 'sump_pump'}, {'id': 11419, 'synset': 'sunbonnet.n.01', 'name': 'sunbonnet'}, {'id': 11420, 'synset': 'sunday_best.n.01', 'name': 'Sunday_best'}, {'id': 11421, 'synset': 'sun_deck.n.01', 'name': 'sun_deck'}, {'id': 11422, 'synset': 'sundial.n.01', 'name': 'sundial'}, {'id': 11423, 'synset': 'sundress.n.01', 'name': 'sundress'}, {'id': 11424, 'synset': 'sundries.n.01', 'name': 'sundries'}, {'id': 11425, 'synset': 'sun_gear.n.01', 'name': 'sun_gear'}, {'id': 11426, 'synset': 'sunglass.n.01', 'name': 'sunglass'}, {'id': 11427, 'synset': 'sunlamp.n.01', 'name': 'sunlamp'}, {'id': 11428, 'synset': 'sun_parlor.n.01', 'name': 'sun_parlor'}, {'id': 11429, 'synset': 'sunroof.n.01', 'name': 'sunroof'}, {'id': 11430, 'synset': 'sunscreen.n.01', 'name': 'sunscreen'}, {'id': 11431, 'synset': 'sunsuit.n.01', 'name': 'sunsuit'}, {'id': 11432, 'synset': 'supercharger.n.01', 'name': 'supercharger'}, {'id': 11433, 'synset': 'supercomputer.n.01', 'name': 'supercomputer'}, {'id': 11434, 'synset': 'superconducting_supercollider.n.01', 'name': 'superconducting_supercollider'}, {'id': 11435, 'synset': 'superhighway.n.02', 'name': 'superhighway'}, {'id': 11436, 'synset': 'supermarket.n.01', 'name': 'supermarket'}, {'id': 11437, 'synset': 'superstructure.n.01', 'name': 'superstructure'}, {'id': 11438, 'synset': 'supertanker.n.01', 'name': 'supertanker'}, {'id': 11439, 'synset': 'supper_club.n.01', 'name': 'supper_club'}, {'id': 11440, 'synset': 'supplejack.n.01', 'name': 'supplejack'}, {'id': 11441, 'synset': 'supply_chamber.n.01', 'name': 'supply_chamber'}, {'id': 11442, 'synset': 'supply_closet.n.01', 'name': 'supply_closet'}, {'id': 11443, 'synset': 'support.n.10', 'name': 'support'}, {'id': 11444, 'synset': 'support.n.07', 'name': 'support'}, {'id': 11445, 'synset': 'support_column.n.01', 'name': 'support_column'}, {'id': 11446, 'synset': 'support_hose.n.01', 'name': 'support_hose'}, {'id': 11447, 'synset': 'supporting_structure.n.01', 'name': 'supporting_structure'}, {'id': 11448, 'synset': 'supporting_tower.n.01', 'name': 'supporting_tower'}, {'id': 11449, 'synset': 'surcoat.n.02', 'name': 'surcoat'}, {'id': 11450, 'synset': 'surface_gauge.n.01', 'name': 'surface_gauge'}, {'id': 11451, 'synset': 'surface_lift.n.01', 'name': 'surface_lift'}, {'id': 11452, 'synset': 'surface_search_radar.n.01', 'name': 'surface_search_radar'}, {'id': 11453, 'synset': 'surface_ship.n.01', 'name': 'surface_ship'}, {'id': 11454, 'synset': 'surface-to-air_missile.n.01', 'name': 'surface-to-air_missile'}, {'id': 11455, 'synset': 'surface-to-air_missile_system.n.01', 'name': 'surface-to-air_missile_system'}, {'id': 11456, 'synset': 'surfboat.n.01', 'name': 'surfboat'}, {'id': 11457, 'synset': 'surcoat.n.01', 'name': 'surcoat'}, {'id': 11458, 'synset': "surgeon's_knot.n.01", 'name': "surgeon's_knot"}, {'id': 11459, 'synset': 'surgery.n.02', 'name': 'surgery'}, {'id': 11460, 'synset': 'surge_suppressor.n.01', 'name': 'surge_suppressor'}, {'id': 11461, 'synset': 'surgical_dressing.n.01', 'name': 'surgical_dressing'}, {'id': 11462, 'synset': 'surgical_instrument.n.01', 'name': 'surgical_instrument'}, {'id': 11463, 'synset': 'surgical_knife.n.01', 'name': 'surgical_knife'}, {'id': 11464, 'synset': 'surplice.n.01', 'name': 'surplice'}, {'id': 11465, 'synset': 'surrey.n.02', 'name': 'surrey'}, {'id': 11466, 'synset': 'surtout.n.01', 'name': 'surtout'}, {'id': 11467, 'synset': 'surveillance_system.n.01', 'name': 'surveillance_system'}, {'id': 11468, 'synset': 'surveying_instrument.n.01', 'name': 'surveying_instrument'}, {'id': 11469, 'synset': "surveyor's_level.n.01", 'name': "surveyor's_level"}, {'id': 11470, 'synset': 'sushi_bar.n.01', 'name': 'sushi_bar'}, {'id': 11471, 'synset': 'suspension.n.05', 'name': 'suspension'}, {'id': 11472, 'synset': 'suspension_bridge.n.01', 'name': 'suspension_bridge'}, {'id': 11473, 'synset': 'suspensory.n.01', 'name': 'suspensory'}, {'id': 11474, 'synset': 'sustaining_pedal.n.01', 'name': 'sustaining_pedal'}, {'id': 11475, 'synset': 'suture.n.02', 'name': 'suture'}, {'id': 11476, 'synset': 'swab.n.01', 'name': 'swab'}, {'id': 11477, 'synset': 'swaddling_clothes.n.01', 'name': 'swaddling_clothes'}, {'id': 11478, 'synset': 'swag.n.03', 'name': 'swag'}, {'id': 11479, 'synset': 'swage_block.n.01', 'name': 'swage_block'}, {'id': 11480, 'synset': 'swagger_stick.n.01', 'name': 'swagger_stick'}, {'id': 11481, 'synset': 'swallow-tailed_coat.n.01', 'name': 'swallow-tailed_coat'}, {'id': 11482, 'synset': 'swamp_buggy.n.01', 'name': 'swamp_buggy'}, {'id': 11483, 'synset': "swan's_down.n.01", 'name': "swan's_down"}, {'id': 11484, 'synset': 'swathe.n.01', 'name': 'swathe'}, {'id': 11485, 'synset': 'swatter.n.01', 'name': 'swatter'}, {'id': 11486, 'synset': 'sweat_bag.n.01', 'name': 'sweat_bag'}, {'id': 11487, 'synset': 'sweatband.n.01', 'name': 'sweatband'}, {'id': 11488, 'synset': 'sweatshop.n.01', 'name': 'sweatshop'}, {'id': 11489, 'synset': 'sweat_suit.n.01', 'name': 'sweat_suit'}, {'id': 11490, 'synset': 'sweep.n.04', 'name': 'sweep'}, {'id': 11491, 'synset': 'sweep_hand.n.01', 'name': 'sweep_hand'}, {'id': 11492, 'synset': 'swimming_trunks.n.01', 'name': 'swimming_trunks'}, {'id': 11493, 'synset': 'swing.n.02', 'name': 'swing'}, {'id': 11494, 'synset': 'swing_door.n.01', 'name': 'swing_door'}, {'id': 11495, 'synset': 'switch.n.01', 'name': 'switch'}, {'id': 11496, 'synset': 'switchblade.n.01', 'name': 'switchblade'}, {'id': 11497, 'synset': 'switch_engine.n.01', 'name': 'switch_engine'}, {'id': 11498, 'synset': 'swivel.n.01', 'name': 'swivel'}, {'id': 11499, 'synset': 'swivel_chair.n.01', 'name': 'swivel_chair'}, {'id': 11500, 'synset': 'swizzle_stick.n.01', 'name': 'swizzle_stick'}, {'id': 11501, 'synset': 'sword_cane.n.01', 'name': 'sword_cane'}, {'id': 11502, 'synset': 's_wrench.n.01', 'name': 'S_wrench'}, {'id': 11503, 'synset': 'synagogue.n.01', 'name': 'synagogue'}, {'id': 11504, 'synset': 'synchrocyclotron.n.01', 'name': 'synchrocyclotron'}, {'id': 11505, 'synset': 'synchroflash.n.01', 'name': 'synchroflash'}, {'id': 11506, 'synset': 'synchromesh.n.01', 'name': 'synchromesh'}, {'id': 11507, 'synset': 'synchronous_converter.n.01', 'name': 'synchronous_converter'}, {'id': 11508, 'synset': 'synchronous_motor.n.01', 'name': 'synchronous_motor'}, {'id': 11509, 'synset': 'synchrotron.n.01', 'name': 'synchrotron'}, {'id': 11510, 'synset': 'synchroscope.n.01', 'name': 'synchroscope'}, {'id': 11511, 'synset': 'synthesizer.n.02', 'name': 'synthesizer'}, {'id': 11512, 'synset': 'system.n.01', 'name': 'system'}, {'id': 11513, 'synset': 'tabard.n.01', 'name': 'tabard'}, {'id': 11514, 'synset': 'tabernacle.n.02', 'name': 'Tabernacle'}, {'id': 11515, 'synset': 'tabi.n.01', 'name': 'tabi'}, {'id': 11516, 'synset': 'tab_key.n.01', 'name': 'tab_key'}, {'id': 11517, 'synset': 'table.n.03', 'name': 'table'}, {'id': 11518, 'synset': 'tablefork.n.01', 'name': 'tablefork'}, {'id': 11519, 'synset': 'table_knife.n.01', 'name': 'table_knife'}, {'id': 11520, 'synset': 'table_saw.n.01', 'name': 'table_saw'}, {'id': 11521, 'synset': 'tablespoon.n.02', 'name': 'tablespoon'}, {'id': 11522, 'synset': 'tablet-armed_chair.n.01', 'name': 'tablet-armed_chair'}, {'id': 11523, 'synset': 'table-tennis_racquet.n.01', 'name': 'table-tennis_racquet'}, {'id': 11524, 'synset': 'tabletop.n.01', 'name': 'tabletop'}, {'id': 11525, 'synset': 'tableware.n.01', 'name': 'tableware'}, {'id': 11526, 'synset': 'tabor.n.01', 'name': 'tabor'}, {'id': 11527, 'synset': 'taboret.n.01', 'name': 'taboret'}, {'id': 11528, 'synset': 'tachistoscope.n.01', 'name': 'tachistoscope'}, {'id': 11529, 'synset': 'tachograph.n.01', 'name': 'tachograph'}, {'id': 11530, 'synset': 'tachymeter.n.01', 'name': 'tachymeter'}, {'id': 11531, 'synset': 'tack.n.02', 'name': 'tack'}, {'id': 11532, 'synset': 'tack_hammer.n.01', 'name': 'tack_hammer'}, {'id': 11533, 'synset': 'taffeta.n.01', 'name': 'taffeta'}, {'id': 11534, 'synset': 'taffrail.n.01', 'name': 'taffrail'}, {'id': 11535, 'synset': 'tailgate.n.01', 'name': 'tailgate'}, {'id': 11536, 'synset': 'tailor-made.n.01', 'name': 'tailor-made'}, {'id': 11537, 'synset': "tailor's_chalk.n.01", 'name': "tailor's_chalk"}, {'id': 11538, 'synset': 'tailpipe.n.01', 'name': 'tailpipe'}, {'id': 11539, 'synset': 'tail_rotor.n.01', 'name': 'tail_rotor'}, {'id': 11540, 'synset': 'tailstock.n.01', 'name': 'tailstock'}, {'id': 11541, 'synset': 'take-up.n.01', 'name': 'take-up'}, {'id': 11542, 'synset': 'talaria.n.01', 'name': 'talaria'}, {'id': 11543, 'synset': 'talcum.n.02', 'name': 'talcum'}, {'id': 11544, 'synset': 'tam.n.01', 'name': 'tam'}, {'id': 11545, 'synset': 'tambour.n.02', 'name': 'tambour'}, {'id': 11546, 'synset': 'tambour.n.01', 'name': 'tambour'}, {'id': 11547, 'synset': 'tammy.n.01', 'name': 'tammy'}, {'id': 11548, 'synset': 'tamp.n.01', 'name': 'tamp'}, {'id': 11549, 'synset': 'tampax.n.01', 'name': 'Tampax'}, {'id': 11550, 'synset': 'tampion.n.01', 'name': 'tampion'}, {'id': 11551, 'synset': 'tampon.n.01', 'name': 'tampon'}, {'id': 11552, 'synset': 'tandoor.n.01', 'name': 'tandoor'}, {'id': 11553, 'synset': 'tangram.n.01', 'name': 'tangram'}, {'id': 11554, 'synset': 'tankard.n.01', 'name': 'tankard'}, {'id': 11555, 'synset': 'tank_car.n.01', 'name': 'tank_car'}, {'id': 11556, 'synset': 'tank_destroyer.n.01', 'name': 'tank_destroyer'}, {'id': 11557, 'synset': 'tank_engine.n.01', 'name': 'tank_engine'}, {'id': 11558, 'synset': 'tanker_plane.n.01', 'name': 'tanker_plane'}, {'id': 11559, 'synset': 'tank_shell.n.01', 'name': 'tank_shell'}, {'id': 11560, 'synset': 'tannoy.n.01', 'name': 'tannoy'}, {'id': 11561, 'synset': 'tap.n.06', 'name': 'tap'}, {'id': 11562, 'synset': 'tapa.n.02', 'name': 'tapa'}, {'id': 11563, 'synset': 'tape.n.02', 'name': 'tape'}, {'id': 11564, 'synset': 'tape_deck.n.01', 'name': 'tape_deck'}, {'id': 11565, 'synset': 'tape_drive.n.01', 'name': 'tape_drive'}, {'id': 11566, 'synset': 'tape_player.n.01', 'name': 'tape_player'}, {'id': 11567, 'synset': 'tape_recorder.n.01', 'name': 'tape_recorder'}, {'id': 11568, 'synset': 'taper_file.n.01', 'name': 'taper_file'}, {'id': 11569, 'synset': 'tappet.n.01', 'name': 'tappet'}, {'id': 11570, 'synset': 'tap_wrench.n.01', 'name': 'tap_wrench'}, {'id': 11571, 'synset': 'tare.n.05', 'name': 'tare'}, {'id': 11572, 'synset': 'target.n.04', 'name': 'target'}, {'id': 11573, 'synset': 'target_acquisition_system.n.01', 'name': 'target_acquisition_system'}, {'id': 11574, 'synset': 'tarmacadam.n.02', 'name': 'tarmacadam'}, {'id': 11575, 'synset': 'tasset.n.01', 'name': 'tasset'}, {'id': 11576, 'synset': 'tattoo.n.02', 'name': 'tattoo'}, {'id': 11577, 'synset': 'tavern.n.01', 'name': 'tavern'}, {'id': 11578, 'synset': 'tawse.n.01', 'name': 'tawse'}, {'id': 11579, 'synset': 'taximeter.n.01', 'name': 'taximeter'}, {'id': 11580, 'synset': 't-bar_lift.n.01', 'name': 'T-bar_lift'}, {'id': 11581, 'synset': 'tea_bag.n.02', 'name': 'tea_bag'}, {'id': 11582, 'synset': 'tea_ball.n.01', 'name': 'tea_ball'}, {'id': 11583, 'synset': 'tea_cart.n.01', 'name': 'tea_cart'}, {'id': 11584, 'synset': 'tea_chest.n.01', 'name': 'tea_chest'}, {'id': 11585, 'synset': 'teaching_aid.n.01', 'name': 'teaching_aid'}, {'id': 11586, 'synset': 'tea_gown.n.01', 'name': 'tea_gown'}, {'id': 11587, 'synset': 'tea_maker.n.01', 'name': 'tea_maker'}, {'id': 11588, 'synset': 'teashop.n.01', 'name': 'teashop'}, {'id': 11589, 'synset': 'teaspoon.n.02', 'name': 'teaspoon'}, {'id': 11590, 'synset': 'tea-strainer.n.01', 'name': 'tea-strainer'}, {'id': 11591, 'synset': 'tea_table.n.01', 'name': 'tea_table'}, {'id': 11592, 'synset': 'tea_tray.n.01', 'name': 'tea_tray'}, {'id': 11593, 'synset': 'tea_urn.n.01', 'name': 'tea_urn'}, {'id': 11594, 'synset': 'tee.n.03', 'name': 'tee'}, {'id': 11595, 'synset': 'tee_hinge.n.01', 'name': 'tee_hinge'}, {'id': 11596, 'synset': 'telecom_hotel.n.01', 'name': 'telecom_hotel'}, {'id': 11597, 'synset': 'telecommunication_system.n.01', 'name': 'telecommunication_system'}, {'id': 11598, 'synset': 'telegraph.n.01', 'name': 'telegraph'}, {'id': 11599, 'synset': 'telegraph_key.n.01', 'name': 'telegraph_key'}, {'id': 11600, 'synset': 'telemeter.n.01', 'name': 'telemeter'}, {'id': 11601, 'synset': 'telephone_bell.n.01', 'name': 'telephone_bell'}, {'id': 11602, 'synset': 'telephone_cord.n.01', 'name': 'telephone_cord'}, {'id': 11603, 'synset': 'telephone_jack.n.01', 'name': 'telephone_jack'}, {'id': 11604, 'synset': 'telephone_line.n.02', 'name': 'telephone_line'}, {'id': 11605, 'synset': 'telephone_plug.n.01', 'name': 'telephone_plug'}, {'id': 11606, 'synset': 'telephone_receiver.n.01', 'name': 'telephone_receiver'}, {'id': 11607, 'synset': 'telephone_system.n.01', 'name': 'telephone_system'}, {'id': 11608, 'synset': 'telephone_wire.n.01', 'name': 'telephone_wire'}, {'id': 11609, 'synset': 'teleprompter.n.01', 'name': 'Teleprompter'}, {'id': 11610, 'synset': 'telescope.n.01', 'name': 'telescope'}, {'id': 11611, 'synset': 'telescopic_sight.n.01', 'name': 'telescopic_sight'}, {'id': 11612, 'synset': 'telethermometer.n.01', 'name': 'telethermometer'}, {'id': 11613, 'synset': 'teletypewriter.n.01', 'name': 'teletypewriter'}, {'id': 11614, 'synset': 'television.n.02', 'name': 'television'}, {'id': 11615, 'synset': 'television_antenna.n.01', 'name': 'television_antenna'}, {'id': 11616, 'synset': 'television_equipment.n.01', 'name': 'television_equipment'}, {'id': 11617, 'synset': 'television_monitor.n.01', 'name': 'television_monitor'}, {'id': 11618, 'synset': 'television_room.n.01', 'name': 'television_room'}, {'id': 11619, 'synset': 'television_transmitter.n.01', 'name': 'television_transmitter'}, {'id': 11620, 'synset': 'telpher.n.01', 'name': 'telpher'}, {'id': 11621, 'synset': 'telpherage.n.01', 'name': 'telpherage'}, {'id': 11622, 'synset': 'tempera.n.01', 'name': 'tempera'}, {'id': 11623, 'synset': 'temple.n.01', 'name': 'temple'}, {'id': 11624, 'synset': 'temple.n.03', 'name': 'temple'}, {'id': 11625, 'synset': 'temporary_hookup.n.01', 'name': 'temporary_hookup'}, {'id': 11626, 'synset': 'tender.n.06', 'name': 'tender'}, {'id': 11627, 'synset': 'tender.n.05', 'name': 'tender'}, {'id': 11628, 'synset': 'tender.n.04', 'name': 'tender'}, {'id': 11629, 'synset': 'tenement.n.01', 'name': 'tenement'}, {'id': 11630, 'synset': 'tennis_camp.n.01', 'name': 'tennis_camp'}, {'id': 11631, 'synset': 'tenon.n.01', 'name': 'tenon'}, {'id': 11632, 'synset': 'tenor_drum.n.01', 'name': 'tenor_drum'}, {'id': 11633, 'synset': 'tenoroon.n.01', 'name': 'tenoroon'}, {'id': 11634, 'synset': 'tenpenny_nail.n.01', 'name': 'tenpenny_nail'}, {'id': 11635, 'synset': 'tenpin.n.01', 'name': 'tenpin'}, {'id': 11636, 'synset': 'tensimeter.n.01', 'name': 'tensimeter'}, {'id': 11637, 'synset': 'tensiometer.n.03', 'name': 'tensiometer'}, {'id': 11638, 'synset': 'tensiometer.n.02', 'name': 'tensiometer'}, {'id': 11639, 'synset': 'tensiometer.n.01', 'name': 'tensiometer'}, {'id': 11640, 'synset': 'tent.n.01', 'name': 'tent'}, {'id': 11641, 'synset': 'tenter.n.01', 'name': 'tenter'}, {'id': 11642, 'synset': 'tenterhook.n.01', 'name': 'tenterhook'}, {'id': 11643, 'synset': 'tent-fly.n.01', 'name': 'tent-fly'}, {'id': 11644, 'synset': 'tent_peg.n.01', 'name': 'tent_peg'}, {'id': 11645, 'synset': 'tepee.n.01', 'name': 'tepee'}, {'id': 11646, 'synset': 'terminal.n.02', 'name': 'terminal'}, {'id': 11647, 'synset': 'terminal.n.04', 'name': 'terminal'}, {'id': 11648, 'synset': 'terraced_house.n.01', 'name': 'terraced_house'}, {'id': 11649, 'synset': 'terra_cotta.n.01', 'name': 'terra_cotta'}, {'id': 11650, 'synset': 'terrarium.n.01', 'name': 'terrarium'}, {'id': 11651, 'synset': 'terra_sigillata.n.01', 'name': 'terra_sigillata'}, {'id': 11652, 'synset': 'terry.n.02', 'name': 'terry'}, {'id': 11653, 'synset': 'tesla_coil.n.01', 'name': 'Tesla_coil'}, {'id': 11654, 'synset': 'tessera.n.01', 'name': 'tessera'}, {'id': 11655, 'synset': 'test_equipment.n.01', 'name': 'test_equipment'}, {'id': 11656, 'synset': 'test_rocket.n.01', 'name': 'test_rocket'}, {'id': 11657, 'synset': 'test_room.n.01', 'name': 'test_room'}, {'id': 11658, 'synset': 'testudo.n.01', 'name': 'testudo'}, {'id': 11659, 'synset': 'tetraskelion.n.01', 'name': 'tetraskelion'}, {'id': 11660, 'synset': 'tetrode.n.01', 'name': 'tetrode'}, {'id': 11661, 'synset': 'textile_machine.n.01', 'name': 'textile_machine'}, {'id': 11662, 'synset': 'textile_mill.n.01', 'name': 'textile_mill'}, {'id': 11663, 'synset': 'thatch.n.04', 'name': 'thatch'}, {'id': 11664, 'synset': 'theater.n.01', 'name': 'theater'}, {'id': 11665, 'synset': 'theater_curtain.n.01', 'name': 'theater_curtain'}, {'id': 11666, 'synset': 'theater_light.n.01', 'name': 'theater_light'}, {'id': 11667, 'synset': 'theodolite.n.01', 'name': 'theodolite'}, {'id': 11668, 'synset': 'theremin.n.01', 'name': 'theremin'}, {'id': 11669, 'synset': 'thermal_printer.n.01', 'name': 'thermal_printer'}, {'id': 11670, 'synset': 'thermal_reactor.n.01', 'name': 'thermal_reactor'}, {'id': 11671, 'synset': 'thermocouple.n.01', 'name': 'thermocouple'}, {'id': 11672, 'synset': 'thermoelectric_thermometer.n.01', 'name': 'thermoelectric_thermometer'}, {'id': 11673, 'synset': 'thermograph.n.02', 'name': 'thermograph'}, {'id': 11674, 'synset': 'thermograph.n.01', 'name': 'thermograph'}, {'id': 11675, 'synset': 'thermohydrometer.n.01', 'name': 'thermohydrometer'}, {'id': 11676, 'synset': 'thermojunction.n.01', 'name': 'thermojunction'}, {'id': 11677, 'synset': 'thermonuclear_reactor.n.01', 'name': 'thermonuclear_reactor'}, {'id': 11678, 'synset': 'thermopile.n.01', 'name': 'thermopile'}, {'id': 11679, 'synset': 'thigh_pad.n.01', 'name': 'thigh_pad'}, {'id': 11680, 'synset': 'thill.n.01', 'name': 'thill'}, {'id': 11681, 'synset': 'thinning_shears.n.01', 'name': 'thinning_shears'}, {'id': 11682, 'synset': 'third_base.n.01', 'name': 'third_base'}, {'id': 11683, 'synset': 'third_gear.n.01', 'name': 'third_gear'}, {'id': 11684, 'synset': 'third_rail.n.01', 'name': 'third_rail'}, {'id': 11685, 'synset': 'thong.n.03', 'name': 'thong'}, {'id': 11686, 'synset': 'thong.n.02', 'name': 'thong'}, {'id': 11687, 'synset': 'three-centered_arch.n.01', 'name': 'three-centered_arch'}, {'id': 11688, 'synset': 'three-decker.n.02', 'name': 'three-decker'}, {'id': 11689, 'synset': 'three-dimensional_radar.n.01', 'name': 'three-dimensional_radar'}, {'id': 11690, 'synset': 'three-piece_suit.n.01', 'name': 'three-piece_suit'}, {'id': 11691, 'synset': 'three-quarter_binding.n.01', 'name': 'three-quarter_binding'}, {'id': 11692, 'synset': 'three-way_switch.n.01', 'name': 'three-way_switch'}, {'id': 11693, 'synset': 'thresher.n.01', 'name': 'thresher'}, {'id': 11694, 'synset': 'threshing_floor.n.01', 'name': 'threshing_floor'}, {'id': 11695, 'synset': 'thriftshop.n.01', 'name': 'thriftshop'}, {'id': 11696, 'synset': 'throat_protector.n.01', 'name': 'throat_protector'}, {'id': 11697, 'synset': 'throne.n.01', 'name': 'throne'}, {'id': 11698, 'synset': 'thrust_bearing.n.01', 'name': 'thrust_bearing'}, {'id': 11699, 'synset': 'thruster.n.02', 'name': 'thruster'}, {'id': 11700, 'synset': 'thumb.n.02', 'name': 'thumb'}, {'id': 11701, 'synset': 'thumbhole.n.02', 'name': 'thumbhole'}, {'id': 11702, 'synset': 'thumbscrew.n.02', 'name': 'thumbscrew'}, {'id': 11703, 'synset': 'thumbstall.n.01', 'name': 'thumbstall'}, {'id': 11704, 'synset': 'thunderer.n.02', 'name': 'thunderer'}, {'id': 11705, 'synset': 'thwart.n.01', 'name': 'thwart'}, {'id': 11706, 'synset': 'ticking.n.02', 'name': 'ticking'}, {'id': 11707, 'synset': 'tickler_coil.n.01', 'name': 'tickler_coil'}, {'id': 11708, 'synset': 'tie.n.04', 'name': 'tie'}, {'id': 11709, 'synset': 'tie.n.08', 'name': 'tie'}, {'id': 11710, 'synset': 'tie_rack.n.01', 'name': 'tie_rack'}, {'id': 11711, 'synset': 'tie_rod.n.01', 'name': 'tie_rod'}, {'id': 11712, 'synset': 'tile.n.01', 'name': 'tile'}, {'id': 11713, 'synset': 'tile_cutter.n.01', 'name': 'tile_cutter'}, {'id': 11714, 'synset': 'tile_roof.n.01', 'name': 'tile_roof'}, {'id': 11715, 'synset': 'tiller.n.03', 'name': 'tiller'}, {'id': 11716, 'synset': 'tilter.n.02', 'name': 'tilter'}, {'id': 11717, 'synset': 'tilt-top_table.n.01', 'name': 'tilt-top_table'}, {'id': 11718, 'synset': 'timber.n.02', 'name': 'timber'}, {'id': 11719, 'synset': 'timber.n.03', 'name': 'timber'}, {'id': 11720, 'synset': 'timber_hitch.n.01', 'name': 'timber_hitch'}, {'id': 11721, 'synset': 'timbrel.n.01', 'name': 'timbrel'}, {'id': 11722, 'synset': 'time_bomb.n.02', 'name': 'time_bomb'}, {'id': 11723, 'synset': 'time_capsule.n.01', 'name': 'time_capsule'}, {'id': 11724, 'synset': 'time_clock.n.01', 'name': 'time_clock'}, {'id': 11725, 'synset': 'time-delay_measuring_instrument.n.01', 'name': 'time-delay_measuring_instrument'}, {'id': 11726, 'synset': 'time-fuse.n.01', 'name': 'time-fuse'}, {'id': 11727, 'synset': 'timepiece.n.01', 'name': 'timepiece'}, {'id': 11728, 'synset': 'timer.n.03', 'name': 'timer'}, {'id': 11729, 'synset': 'time-switch.n.01', 'name': 'time-switch'}, {'id': 11730, 'synset': 'tin.n.02', 'name': 'tin'}, {'id': 11731, 'synset': 'tinderbox.n.02', 'name': 'tinderbox'}, {'id': 11732, 'synset': 'tine.n.01', 'name': 'tine'}, {'id': 11733, 'synset': 'tippet.n.01', 'name': 'tippet'}, {'id': 11734, 'synset': 'tire_chain.n.01', 'name': 'tire_chain'}, {'id': 11735, 'synset': 'tire_iron.n.01', 'name': 'tire_iron'}, {'id': 11736, 'synset': 'titfer.n.01', 'name': 'titfer'}, {'id': 11737, 'synset': 'tithe_barn.n.01', 'name': 'tithe_barn'}, {'id': 11738, 'synset': 'titrator.n.01', 'name': 'titrator'}, {'id': 11739, 'synset': 'toasting_fork.n.01', 'name': 'toasting_fork'}, {'id': 11740, 'synset': 'toastrack.n.01', 'name': 'toastrack'}, {'id': 11741, 'synset': 'tobacco_pouch.n.01', 'name': 'tobacco_pouch'}, {'id': 11742, 'synset': 'tobacco_shop.n.01', 'name': 'tobacco_shop'}, {'id': 11743, 'synset': 'toboggan.n.01', 'name': 'toboggan'}, {'id': 11744, 'synset': 'toby.n.01', 'name': 'toby'}, {'id': 11745, 'synset': 'tocsin.n.02', 'name': 'tocsin'}, {'id': 11746, 'synset': 'toe.n.02', 'name': 'toe'}, {'id': 11747, 'synset': 'toecap.n.01', 'name': 'toecap'}, {'id': 11748, 'synset': 'toehold.n.02', 'name': 'toehold'}, {'id': 11749, 'synset': 'toga.n.01', 'name': 'toga'}, {'id': 11750, 'synset': 'toga_virilis.n.01', 'name': 'toga_virilis'}, {'id': 11751, 'synset': 'toggle.n.03', 'name': 'toggle'}, {'id': 11752, 'synset': 'toggle_bolt.n.01', 'name': 'toggle_bolt'}, {'id': 11753, 'synset': 'toggle_joint.n.01', 'name': 'toggle_joint'}, {'id': 11754, 'synset': 'toggle_switch.n.01', 'name': 'toggle_switch'}, {'id': 11755, 'synset': 'togs.n.01', 'name': 'togs'}, {'id': 11756, 'synset': 'toilet.n.01', 'name': 'toilet'}, {'id': 11757, 'synset': 'toilet_bag.n.01', 'name': 'toilet_bag'}, {'id': 11758, 'synset': 'toilet_bowl.n.01', 'name': 'toilet_bowl'}, {'id': 11759, 'synset': 'toilet_kit.n.01', 'name': 'toilet_kit'}, {'id': 11760, 'synset': 'toilet_powder.n.01', 'name': 'toilet_powder'}, {'id': 11761, 'synset': 'toiletry.n.01', 'name': 'toiletry'}, {'id': 11762, 'synset': 'toilet_seat.n.01', 'name': 'toilet_seat'}, {'id': 11763, 'synset': 'toilet_water.n.01', 'name': 'toilet_water'}, {'id': 11764, 'synset': 'tokamak.n.01', 'name': 'tokamak'}, {'id': 11765, 'synset': 'token.n.03', 'name': 'token'}, {'id': 11766, 'synset': 'tollbooth.n.01', 'name': 'tollbooth'}, {'id': 11767, 'synset': 'toll_bridge.n.01', 'name': 'toll_bridge'}, {'id': 11768, 'synset': 'tollgate.n.01', 'name': 'tollgate'}, {'id': 11769, 'synset': 'toll_line.n.01', 'name': 'toll_line'}, {'id': 11770, 'synset': 'tomahawk.n.01', 'name': 'tomahawk'}, {'id': 11771, 'synset': 'tommy_gun.n.01', 'name': 'Tommy_gun'}, {'id': 11772, 'synset': 'tomograph.n.01', 'name': 'tomograph'}, {'id': 11773, 'synset': 'tone_arm.n.01', 'name': 'tone_arm'}, {'id': 11774, 'synset': 'toner.n.03', 'name': 'toner'}, {'id': 11775, 'synset': 'tongue.n.07', 'name': 'tongue'}, {'id': 11776, 'synset': 'tongue_and_groove_joint.n.01', 'name': 'tongue_and_groove_joint'}, {'id': 11777, 'synset': 'tongue_depressor.n.01', 'name': 'tongue_depressor'}, {'id': 11778, 'synset': 'tonometer.n.01', 'name': 'tonometer'}, {'id': 11779, 'synset': 'tool.n.01', 'name': 'tool'}, {'id': 11780, 'synset': 'tool_bag.n.01', 'name': 'tool_bag'}, {'id': 11781, 'synset': 'toolshed.n.01', 'name': 'toolshed'}, {'id': 11782, 'synset': 'tooth.n.02', 'name': 'tooth'}, {'id': 11783, 'synset': 'tooth.n.05', 'name': 'tooth'}, {'id': 11784, 'synset': 'top.n.10', 'name': 'top'}, {'id': 11785, 'synset': 'topgallant.n.02', 'name': 'topgallant'}, {'id': 11786, 'synset': 'topgallant.n.01', 'name': 'topgallant'}, {'id': 11787, 'synset': 'topiary.n.01', 'name': 'topiary'}, {'id': 11788, 'synset': 'topknot.n.01', 'name': 'topknot'}, {'id': 11789, 'synset': 'topmast.n.01', 'name': 'topmast'}, {'id': 11790, 'synset': 'topper.n.05', 'name': 'topper'}, {'id': 11791, 'synset': 'topsail.n.01', 'name': 'topsail'}, {'id': 11792, 'synset': 'toque.n.01', 'name': 'toque'}, {'id': 11793, 'synset': 'torch.n.01', 'name': 'torch'}, {'id': 11794, 'synset': 'torpedo.n.06', 'name': 'torpedo'}, {'id': 11795, 'synset': 'torpedo.n.05', 'name': 'torpedo'}, {'id': 11796, 'synset': 'torpedo.n.03', 'name': 'torpedo'}, {'id': 11797, 'synset': 'torpedo_boat.n.01', 'name': 'torpedo_boat'}, {'id': 11798, 'synset': 'torpedo-boat_destroyer.n.01', 'name': 'torpedo-boat_destroyer'}, {'id': 11799, 'synset': 'torpedo_tube.n.01', 'name': 'torpedo_tube'}, {'id': 11800, 'synset': 'torque_converter.n.01', 'name': 'torque_converter'}, {'id': 11801, 'synset': 'torque_wrench.n.01', 'name': 'torque_wrench'}, {'id': 11802, 'synset': 'torture_chamber.n.01', 'name': 'torture_chamber'}, {'id': 11803, 'synset': 'totem_pole.n.01', 'name': 'totem_pole'}, {'id': 11804, 'synset': 'touch_screen.n.01', 'name': 'touch_screen'}, {'id': 11805, 'synset': 'toupee.n.01', 'name': 'toupee'}, {'id': 11806, 'synset': 'touring_car.n.01', 'name': 'touring_car'}, {'id': 11807, 'synset': 'tourist_class.n.01', 'name': 'tourist_class'}, {'id': 11808, 'synset': 'toweling.n.01', 'name': 'toweling'}, {'id': 11809, 'synset': 'towel_rail.n.01', 'name': 'towel_rail'}, {'id': 11810, 'synset': 'tower.n.01', 'name': 'tower'}, {'id': 11811, 'synset': 'town_hall.n.01', 'name': 'town_hall'}, {'id': 11812, 'synset': 'towpath.n.01', 'name': 'towpath'}, {'id': 11813, 'synset': 'toy_box.n.01', 'name': 'toy_box'}, {'id': 11814, 'synset': 'toyshop.n.01', 'name': 'toyshop'}, {'id': 11815, 'synset': 'trace_detector.n.01', 'name': 'trace_detector'}, {'id': 11816, 'synset': 'track.n.09', 'name': 'track'}, {'id': 11817, 'synset': 'track.n.08', 'name': 'track'}, {'id': 11818, 'synset': 'trackball.n.01', 'name': 'trackball'}, {'id': 11819, 'synset': 'tracked_vehicle.n.01', 'name': 'tracked_vehicle'}, {'id': 11820, 'synset': 'tract_house.n.01', 'name': 'tract_house'}, {'id': 11821, 'synset': 'tract_housing.n.01', 'name': 'tract_housing'}, {'id': 11822, 'synset': 'traction_engine.n.01', 'name': 'traction_engine'}, {'id': 11823, 'synset': 'tractor.n.02', 'name': 'tractor'}, {'id': 11824, 'synset': 'trailer.n.04', 'name': 'trailer'}, {'id': 11825, 'synset': 'trailer.n.03', 'name': 'trailer'}, {'id': 11826, 'synset': 'trailer_camp.n.01', 'name': 'trailer_camp'}, {'id': 11827, 'synset': 'trailing_edge.n.01', 'name': 'trailing_edge'}, {'id': 11828, 'synset': 'tramline.n.01', 'name': 'tramline'}, {'id': 11829, 'synset': 'trammel.n.02', 'name': 'trammel'}, {'id': 11830, 'synset': 'tramp_steamer.n.01', 'name': 'tramp_steamer'}, {'id': 11831, 'synset': 'tramway.n.01', 'name': 'tramway'}, {'id': 11832, 'synset': 'transdermal_patch.n.01', 'name': 'transdermal_patch'}, {'id': 11833, 'synset': 'transept.n.01', 'name': 'transept'}, {'id': 11834, 'synset': 'transformer.n.01', 'name': 'transformer'}, {'id': 11835, 'synset': 'transistor.n.01', 'name': 'transistor'}, {'id': 11836, 'synset': 'transit_instrument.n.01', 'name': 'transit_instrument'}, {'id': 11837, 'synset': 'transmission.n.05', 'name': 'transmission'}, {'id': 11838, 'synset': 'transmission_shaft.n.01', 'name': 'transmission_shaft'}, {'id': 11839, 'synset': 'transmitter.n.03', 'name': 'transmitter'}, {'id': 11840, 'synset': 'transom.n.02', 'name': 'transom'}, {'id': 11841, 'synset': 'transom.n.01', 'name': 'transom'}, {'id': 11842, 'synset': 'transponder.n.01', 'name': 'transponder'}, {'id': 11843, 'synset': 'transporter.n.02', 'name': 'transporter'}, {'id': 11844, 'synset': 'transporter.n.01', 'name': 'transporter'}, {'id': 11845, 'synset': 'transport_ship.n.01', 'name': 'transport_ship'}, {'id': 11846, 'synset': 'trap.n.01', 'name': 'trap'}, {'id': 11847, 'synset': 'trap_door.n.01', 'name': 'trap_door'}, {'id': 11848, 'synset': 'trapeze.n.01', 'name': 'trapeze'}, {'id': 11849, 'synset': 'trave.n.01', 'name': 'trave'}, {'id': 11850, 'synset': 'travel_iron.n.01', 'name': 'travel_iron'}, {'id': 11851, 'synset': 'trawl.n.02', 'name': 'trawl'}, {'id': 11852, 'synset': 'trawl.n.01', 'name': 'trawl'}, {'id': 11853, 'synset': 'trawler.n.02', 'name': 'trawler'}, {'id': 11854, 'synset': 'tray_cloth.n.01', 'name': 'tray_cloth'}, {'id': 11855, 'synset': 'tread.n.04', 'name': 'tread'}, {'id': 11856, 'synset': 'tread.n.03', 'name': 'tread'}, {'id': 11857, 'synset': 'treadmill.n.02', 'name': 'treadmill'}, {'id': 11858, 'synset': 'treadmill.n.01', 'name': 'treadmill'}, {'id': 11859, 'synset': 'treasure_chest.n.01', 'name': 'treasure_chest'}, {'id': 11860, 'synset': 'treasure_ship.n.01', 'name': 'treasure_ship'}, {'id': 11861, 'synset': 'treenail.n.01', 'name': 'treenail'}, {'id': 11862, 'synset': 'trefoil_arch.n.01', 'name': 'trefoil_arch'}, {'id': 11863, 'synset': 'trellis.n.01', 'name': 'trellis'}, {'id': 11864, 'synset': 'trench.n.01', 'name': 'trench'}, {'id': 11865, 'synset': 'trench_knife.n.01', 'name': 'trench_knife'}, {'id': 11866, 'synset': 'trepan.n.02', 'name': 'trepan'}, {'id': 11867, 'synset': 'trepan.n.01', 'name': 'trepan'}, {'id': 11868, 'synset': 'trestle.n.02', 'name': 'trestle'}, {'id': 11869, 'synset': 'trestle.n.01', 'name': 'trestle'}, {'id': 11870, 'synset': 'trestle_bridge.n.01', 'name': 'trestle_bridge'}, {'id': 11871, 'synset': 'trestle_table.n.01', 'name': 'trestle_table'}, {'id': 11872, 'synset': 'trestlework.n.01', 'name': 'trestlework'}, {'id': 11873, 'synset': 'trews.n.01', 'name': 'trews'}, {'id': 11874, 'synset': 'trial_balloon.n.02', 'name': 'trial_balloon'}, {'id': 11875, 'synset': 'triangle.n.04', 'name': 'triangle'}, {'id': 11876, 'synset': 'triclinium.n.02', 'name': 'triclinium'}, {'id': 11877, 'synset': 'triclinium.n.01', 'name': 'triclinium'}, {'id': 11878, 'synset': 'tricorn.n.01', 'name': 'tricorn'}, {'id': 11879, 'synset': 'tricot.n.01', 'name': 'tricot'}, {'id': 11880, 'synset': 'trident.n.01', 'name': 'trident'}, {'id': 11881, 'synset': 'trigger.n.02', 'name': 'trigger'}, {'id': 11882, 'synset': 'trimaran.n.01', 'name': 'trimaran'}, {'id': 11883, 'synset': 'trimmer.n.02', 'name': 'trimmer'}, {'id': 11884, 'synset': 'trimmer_arch.n.01', 'name': 'trimmer_arch'}, {'id': 11885, 'synset': 'triode.n.01', 'name': 'triode'}, {'id': 11886, 'synset': 'triptych.n.01', 'name': 'triptych'}, {'id': 11887, 'synset': 'trip_wire.n.02', 'name': 'trip_wire'}, {'id': 11888, 'synset': 'trireme.n.01', 'name': 'trireme'}, {'id': 11889, 'synset': 'triskelion.n.01', 'name': 'triskelion'}, {'id': 11890, 'synset': 'triumphal_arch.n.01', 'name': 'triumphal_arch'}, {'id': 11891, 'synset': 'trivet.n.02', 'name': 'trivet'}, {'id': 11892, 'synset': 'trivet.n.01', 'name': 'trivet'}, {'id': 11893, 'synset': 'troika.n.01', 'name': 'troika'}, {'id': 11894, 'synset': 'troll.n.03', 'name': 'troll'}, {'id': 11895, 'synset': 'trolleybus.n.01', 'name': 'trolleybus'}, {'id': 11896, 'synset': 'trombone.n.01', 'name': 'trombone'}, {'id': 11897, 'synset': 'troop_carrier.n.01', 'name': 'troop_carrier'}, {'id': 11898, 'synset': 'troopship.n.01', 'name': 'troopship'}, {'id': 11899, 'synset': 'trophy_case.n.01', 'name': 'trophy_case'}, {'id': 11900, 'synset': 'trough.n.05', 'name': 'trough'}, {'id': 11901, 'synset': 'trouser.n.02', 'name': 'trouser'}, {'id': 11902, 'synset': 'trouser_cuff.n.01', 'name': 'trouser_cuff'}, {'id': 11903, 'synset': 'trouser_press.n.01', 'name': 'trouser_press'}, {'id': 11904, 'synset': 'trousseau.n.01', 'name': 'trousseau'}, {'id': 11905, 'synset': 'trowel.n.01', 'name': 'trowel'}, {'id': 11906, 'synset': 'trumpet_arch.n.01', 'name': 'trumpet_arch'}, {'id': 11907, 'synset': 'truncheon.n.01', 'name': 'truncheon'}, {'id': 11908, 'synset': 'trundle_bed.n.01', 'name': 'trundle_bed'}, {'id': 11909, 'synset': 'trunk_hose.n.01', 'name': 'trunk_hose'}, {'id': 11910, 'synset': 'trunk_lid.n.01', 'name': 'trunk_lid'}, {'id': 11911, 'synset': 'trunk_line.n.02', 'name': 'trunk_line'}, {'id': 11912, 'synset': 'truss.n.02', 'name': 'truss'}, {'id': 11913, 'synset': 'truss_bridge.n.01', 'name': 'truss_bridge'}, {'id': 11914, 'synset': 'try_square.n.01', 'name': 'try_square'}, {'id': 11915, 'synset': 't-square.n.01', 'name': 'T-square'}, {'id': 11916, 'synset': 'tube.n.02', 'name': 'tube'}, {'id': 11917, 'synset': 'tuck_box.n.01', 'name': 'tuck_box'}, {'id': 11918, 'synset': 'tucker.n.04', 'name': 'tucker'}, {'id': 11919, 'synset': 'tucker-bag.n.01', 'name': 'tucker-bag'}, {'id': 11920, 'synset': 'tuck_shop.n.01', 'name': 'tuck_shop'}, {'id': 11921, 'synset': 'tudor_arch.n.01', 'name': 'Tudor_arch'}, {'id': 11922, 'synset': 'tudung.n.01', 'name': 'tudung'}, {'id': 11923, 'synset': 'tugboat.n.01', 'name': 'tugboat'}, {'id': 11924, 'synset': 'tulle.n.01', 'name': 'tulle'}, {'id': 11925, 'synset': 'tumble-dryer.n.01', 'name': 'tumble-dryer'}, {'id': 11926, 'synset': 'tumbler.n.02', 'name': 'tumbler'}, {'id': 11927, 'synset': 'tumbrel.n.01', 'name': 'tumbrel'}, {'id': 11928, 'synset': 'tun.n.01', 'name': 'tun'}, {'id': 11929, 'synset': 'tunic.n.02', 'name': 'tunic'}, {'id': 11930, 'synset': 'tuning_fork.n.01', 'name': 'tuning_fork'}, {'id': 11931, 'synset': 'tupik.n.01', 'name': 'tupik'}, {'id': 11932, 'synset': 'turbine.n.01', 'name': 'turbine'}, {'id': 11933, 'synset': 'turbogenerator.n.01', 'name': 'turbogenerator'}, {'id': 11934, 'synset': 'tureen.n.01', 'name': 'tureen'}, {'id': 11935, 'synset': 'turkish_bath.n.01', 'name': 'Turkish_bath'}, {'id': 11936, 'synset': 'turkish_towel.n.01', 'name': 'Turkish_towel'}, {'id': 11937, 'synset': "turk's_head.n.01", 'name': "Turk's_head"}, {'id': 11938, 'synset': 'turnbuckle.n.01', 'name': 'turnbuckle'}, {'id': 11939, 'synset': 'turner.n.08', 'name': 'turner'}, {'id': 11940, 'synset': 'turnery.n.01', 'name': 'turnery'}, {'id': 11941, 'synset': 'turnpike.n.01', 'name': 'turnpike'}, {'id': 11942, 'synset': 'turnspit.n.01', 'name': 'turnspit'}, {'id': 11943, 'synset': 'turnstile.n.01', 'name': 'turnstile'}, {'id': 11944, 'synset': 'turntable.n.01', 'name': 'turntable'}, {'id': 11945, 'synset': 'turntable.n.02', 'name': 'turntable'}, {'id': 11946, 'synset': 'turret.n.01', 'name': 'turret'}, {'id': 11947, 'synset': 'turret_clock.n.01', 'name': 'turret_clock'}, {'id': 11948, 'synset': 'tweed.n.01', 'name': 'tweed'}, {'id': 11949, 'synset': 'tweeter.n.01', 'name': 'tweeter'}, {'id': 11950, 'synset': 'twenty-two.n.02', 'name': 'twenty-two'}, {'id': 11951, 'synset': 'twenty-two_pistol.n.01', 'name': 'twenty-two_pistol'}, {'id': 11952, 'synset': 'twenty-two_rifle.n.01', 'name': 'twenty-two_rifle'}, {'id': 11953, 'synset': 'twill.n.02', 'name': 'twill'}, {'id': 11954, 'synset': 'twill.n.01', 'name': 'twill'}, {'id': 11955, 'synset': 'twin_bed.n.01', 'name': 'twin_bed'}, {'id': 11956, 'synset': 'twinjet.n.01', 'name': 'twinjet'}, {'id': 11957, 'synset': 'twist_bit.n.01', 'name': 'twist_bit'}, {'id': 11958, 'synset': 'two-by-four.n.01', 'name': 'two-by-four'}, {'id': 11959, 'synset': 'two-man_tent.n.01', 'name': 'two-man_tent'}, {'id': 11960, 'synset': 'two-piece.n.01', 'name': 'two-piece'}, {'id': 11961, 'synset': 'typesetting_machine.n.01', 'name': 'typesetting_machine'}, {'id': 11962, 'synset': 'typewriter_carriage.n.01', 'name': 'typewriter_carriage'}, {'id': 11963, 'synset': 'typewriter_keyboard.n.01', 'name': 'typewriter_keyboard'}, {'id': 11964, 'synset': 'tyrolean.n.02', 'name': 'tyrolean'}, {'id': 11965, 'synset': 'uke.n.01', 'name': 'uke'}, {'id': 11966, 'synset': 'ulster.n.02', 'name': 'ulster'}, {'id': 11967, 'synset': 'ultracentrifuge.n.01', 'name': 'ultracentrifuge'}, {'id': 11968, 'synset': 'ultramicroscope.n.01', 'name': 'ultramicroscope'}, {'id': 11969, 'synset': 'ultrasuede.n.01', 'name': 'Ultrasuede'}, {'id': 11970, 'synset': 'ultraviolet_lamp.n.01', 'name': 'ultraviolet_lamp'}, {'id': 11971, 'synset': 'umbrella_tent.n.01', 'name': 'umbrella_tent'}, {'id': 11972, 'synset': 'undercarriage.n.01', 'name': 'undercarriage'}, {'id': 11973, 'synset': 'undercoat.n.01', 'name': 'undercoat'}, {'id': 11974, 'synset': 'undergarment.n.01', 'name': 'undergarment'}, {'id': 11975, 'synset': 'underpants.n.01', 'name': 'underpants'}, {'id': 11976, 'synset': 'undies.n.01', 'name': 'undies'}, {'id': 11977, 'synset': 'uneven_parallel_bars.n.01', 'name': 'uneven_parallel_bars'}, {'id': 11978, 'synset': 'uniform.n.01', 'name': 'uniform'}, {'id': 11979, 'synset': 'universal_joint.n.01', 'name': 'universal_joint'}, {'id': 11980, 'synset': 'university.n.02', 'name': 'university'}, {'id': 11981, 'synset': 'upholstery.n.01', 'name': 'upholstery'}, {'id': 11982, 'synset': 'upholstery_material.n.01', 'name': 'upholstery_material'}, {'id': 11983, 'synset': 'upholstery_needle.n.01', 'name': 'upholstery_needle'}, {'id': 11984, 'synset': 'uplift.n.02', 'name': 'uplift'}, {'id': 11985, 'synset': 'upper_berth.n.01', 'name': 'upper_berth'}, {'id': 11986, 'synset': 'upright.n.02', 'name': 'upright'}, {'id': 11987, 'synset': 'upset.n.04', 'name': 'upset'}, {'id': 11988, 'synset': 'upstairs.n.01', 'name': 'upstairs'}, {'id': 11989, 'synset': 'urceole.n.01', 'name': 'urceole'}, {'id': 11990, 'synset': 'urn.n.02', 'name': 'urn'}, {'id': 11991, 'synset': 'used-car.n.01', 'name': 'used-car'}, {'id': 11992, 'synset': 'utensil.n.01', 'name': 'utensil'}, {'id': 11993, 'synset': 'uzi.n.01', 'name': 'Uzi'}, {'id': 11994, 'synset': 'vacation_home.n.01', 'name': 'vacation_home'}, {'id': 11995, 'synset': 'vacuum_chamber.n.01', 'name': 'vacuum_chamber'}, {'id': 11996, 'synset': 'vacuum_flask.n.01', 'name': 'vacuum_flask'}, {'id': 11997, 'synset': 'vacuum_gauge.n.01', 'name': 'vacuum_gauge'}, {'id': 11998, 'synset': 'valenciennes.n.02', 'name': 'Valenciennes'}, {'id': 11999, 'synset': 'valise.n.01', 'name': 'valise'}, {'id': 12000, 'synset': 'valve.n.03', 'name': 'valve'}, {'id': 12001, 'synset': 'valve.n.02', 'name': 'valve'}, {'id': 12002, 'synset': 'valve-in-head_engine.n.01', 'name': 'valve-in-head_engine'}, {'id': 12003, 'synset': 'vambrace.n.01', 'name': 'vambrace'}, {'id': 12004, 'synset': 'van.n.05', 'name': 'van'}, {'id': 12005, 'synset': 'van.n.04', 'name': 'van'}, {'id': 12006, 'synset': 'vane.n.02', 'name': 'vane'}, {'id': 12007, 'synset': 'vaporizer.n.01', 'name': 'vaporizer'}, {'id': 12008, 'synset': 'variable-pitch_propeller.n.01', 'name': 'variable-pitch_propeller'}, {'id': 12009, 'synset': 'variometer.n.01', 'name': 'variometer'}, {'id': 12010, 'synset': 'varnish.n.01', 'name': 'varnish'}, {'id': 12011, 'synset': 'vault.n.03', 'name': 'vault'}, {'id': 12012, 'synset': 'vault.n.02', 'name': 'vault'}, {'id': 12013, 'synset': 'vaulting_horse.n.01', 'name': 'vaulting_horse'}, {'id': 12014, 'synset': 'vehicle.n.01', 'name': 'vehicle'}, {'id': 12015, 'synset': 'velcro.n.01', 'name': 'Velcro'}, {'id': 12016, 'synset': 'velocipede.n.01', 'name': 'velocipede'}, {'id': 12017, 'synset': 'velour.n.01', 'name': 'velour'}, {'id': 12018, 'synset': 'velvet.n.01', 'name': 'velvet'}, {'id': 12019, 'synset': 'velveteen.n.01', 'name': 'velveteen'}, {'id': 12020, 'synset': 'veneer.n.01', 'name': 'veneer'}, {'id': 12021, 'synset': 'venetian_blind.n.01', 'name': 'Venetian_blind'}, {'id': 12022, 'synset': 'venn_diagram.n.01', 'name': 'Venn_diagram'}, {'id': 12023, 'synset': 'ventilation.n.02', 'name': 'ventilation'}, {'id': 12024, 'synset': 'ventilation_shaft.n.01', 'name': 'ventilation_shaft'}, {'id': 12025, 'synset': 'ventilator.n.01', 'name': 'ventilator'}, {'id': 12026, 'synset': 'veranda.n.01', 'name': 'veranda'}, {'id': 12027, 'synset': 'verdigris.n.02', 'name': 'verdigris'}, {'id': 12028, 'synset': 'vernier_caliper.n.01', 'name': 'vernier_caliper'}, {'id': 12029, 'synset': 'vernier_scale.n.01', 'name': 'vernier_scale'}, {'id': 12030, 'synset': 'vertical_file.n.01', 'name': 'vertical_file'}, {'id': 12031, 'synset': 'vertical_stabilizer.n.01', 'name': 'vertical_stabilizer'}, {'id': 12032, 'synset': 'vertical_tail.n.01', 'name': 'vertical_tail'}, {'id': 12033, 'synset': 'very_pistol.n.01', 'name': 'Very_pistol'}, {'id': 12034, 'synset': 'vessel.n.02', 'name': 'vessel'}, {'id': 12035, 'synset': 'vessel.n.03', 'name': 'vessel'}, {'id': 12036, 'synset': 'vestiture.n.01', 'name': 'vestiture'}, {'id': 12037, 'synset': 'vestment.n.01', 'name': 'vestment'}, {'id': 12038, 'synset': 'vest_pocket.n.01', 'name': 'vest_pocket'}, {'id': 12039, 'synset': 'vestry.n.02', 'name': 'vestry'}, {'id': 12040, 'synset': 'viaduct.n.01', 'name': 'viaduct'}, {'id': 12041, 'synset': 'vibraphone.n.01', 'name': 'vibraphone'}, {'id': 12042, 'synset': 'vibrator.n.02', 'name': 'vibrator'}, {'id': 12043, 'synset': 'vibrator.n.01', 'name': 'vibrator'}, {'id': 12044, 'synset': 'victrola.n.01', 'name': 'Victrola'}, {'id': 12045, 'synset': 'vicuna.n.02', 'name': 'vicuna'}, {'id': 12046, 'synset': 'videocassette.n.01', 'name': 'videocassette'}, {'id': 12047, 'synset': 'videocassette_recorder.n.01', 'name': 'videocassette_recorder'}, {'id': 12048, 'synset': 'videodisk.n.01', 'name': 'videodisk'}, {'id': 12049, 'synset': 'video_recording.n.01', 'name': 'video_recording'}, {'id': 12050, 'synset': 'videotape.n.02', 'name': 'videotape'}, {'id': 12051, 'synset': 'vigil_light.n.01', 'name': 'vigil_light'}, {'id': 12052, 'synset': 'villa.n.04', 'name': 'villa'}, {'id': 12053, 'synset': 'villa.n.03', 'name': 'villa'}, {'id': 12054, 'synset': 'villa.n.02', 'name': 'villa'}, {'id': 12055, 'synset': 'viol.n.01', 'name': 'viol'}, {'id': 12056, 'synset': 'viola.n.03', 'name': 'viola'}, {'id': 12057, 'synset': 'viola_da_braccio.n.01', 'name': 'viola_da_braccio'}, {'id': 12058, 'synset': 'viola_da_gamba.n.01', 'name': 'viola_da_gamba'}, {'id': 12059, 'synset': "viola_d'amore.n.01", 'name': "viola_d'amore"}, {'id': 12060, 'synset': 'virginal.n.01', 'name': 'virginal'}, {'id': 12061, 'synset': 'viscometer.n.01', 'name': 'viscometer'}, {'id': 12062, 'synset': 'viscose_rayon.n.01', 'name': 'viscose_rayon'}, {'id': 12063, 'synset': 'vise.n.01', 'name': 'vise'}, {'id': 12064, 'synset': 'visor.n.01', 'name': 'visor'}, {'id': 12065, 'synset': 'visual_display_unit.n.01', 'name': 'visual_display_unit'}, {'id': 12066, 'synset': 'vivarium.n.01', 'name': 'vivarium'}, {'id': 12067, 'synset': 'viyella.n.01', 'name': 'Viyella'}, {'id': 12068, 'synset': 'voile.n.01', 'name': 'voile'}, {'id': 12069, 'synset': 'volleyball_net.n.01', 'name': 'volleyball_net'}, {'id': 12070, 'synset': 'voltage_regulator.n.01', 'name': 'voltage_regulator'}, {'id': 12071, 'synset': 'voltaic_cell.n.01', 'name': 'voltaic_cell'}, {'id': 12072, 'synset': 'voltaic_pile.n.01', 'name': 'voltaic_pile'}, {'id': 12073, 'synset': 'voltmeter.n.01', 'name': 'voltmeter'}, {'id': 12074, 'synset': 'vomitory.n.01', 'name': 'vomitory'}, {'id': 12075, 'synset': 'von_neumann_machine.n.01', 'name': 'von_Neumann_machine'}, {'id': 12076, 'synset': 'voting_booth.n.01', 'name': 'voting_booth'}, {'id': 12077, 'synset': 'voting_machine.n.01', 'name': 'voting_machine'}, {'id': 12078, 'synset': 'voussoir.n.01', 'name': 'voussoir'}, {'id': 12079, 'synset': 'vox_angelica.n.01', 'name': 'vox_angelica'}, {'id': 12080, 'synset': 'vox_humana.n.01', 'name': 'vox_humana'}, {'id': 12081, 'synset': 'waders.n.01', 'name': 'waders'}, {'id': 12082, 'synset': 'wading_pool.n.01', 'name': 'wading_pool'}, {'id': 12083, 'synset': 'wagon.n.04', 'name': 'wagon'}, {'id': 12084, 'synset': 'wagon_tire.n.01', 'name': 'wagon_tire'}, {'id': 12085, 'synset': 'wain.n.03', 'name': 'wain'}, {'id': 12086, 'synset': 'wainscot.n.02', 'name': 'wainscot'}, {'id': 12087, 'synset': 'wainscoting.n.01', 'name': 'wainscoting'}, {'id': 12088, 'synset': 'waist_pack.n.01', 'name': 'waist_pack'}, {'id': 12089, 'synset': 'walker.n.06', 'name': 'walker'}, {'id': 12090, 'synset': 'walker.n.05', 'name': 'walker'}, {'id': 12091, 'synset': 'walker.n.04', 'name': 'walker'}, {'id': 12092, 'synset': 'walkie-talkie.n.01', 'name': 'walkie-talkie'}, {'id': 12093, 'synset': 'walk-in.n.04', 'name': 'walk-in'}, {'id': 12094, 'synset': 'walking_shoe.n.01', 'name': 'walking_shoe'}, {'id': 12095, 'synset': 'walkman.n.01', 'name': 'Walkman'}, {'id': 12096, 'synset': 'walk-up_apartment.n.01', 'name': 'walk-up_apartment'}, {'id': 12097, 'synset': 'wall.n.01', 'name': 'wall'}, {'id': 12098, 'synset': 'wall.n.07', 'name': 'wall'}, {'id': 12099, 'synset': 'wall_tent.n.01', 'name': 'wall_tent'}, {'id': 12100, 'synset': 'wall_unit.n.01', 'name': 'wall_unit'}, {'id': 12101, 'synset': 'wand.n.01', 'name': 'wand'}, {'id': 12102, 'synset': 'wankel_engine.n.01', 'name': 'Wankel_engine'}, {'id': 12103, 'synset': 'ward.n.03', 'name': 'ward'}, {'id': 12104, 'synset': 'wardroom.n.01', 'name': 'wardroom'}, {'id': 12105, 'synset': 'warehouse.n.01', 'name': 'warehouse'}, {'id': 12106, 'synset': 'warming_pan.n.01', 'name': 'warming_pan'}, {'id': 12107, 'synset': 'war_paint.n.02', 'name': 'war_paint'}, {'id': 12108, 'synset': 'warplane.n.01', 'name': 'warplane'}, {'id': 12109, 'synset': 'war_room.n.01', 'name': 'war_room'}, {'id': 12110, 'synset': 'warship.n.01', 'name': 'warship'}, {'id': 12111, 'synset': 'wash.n.01', 'name': 'wash'}, {'id': 12112, 'synset': 'wash-and-wear.n.01', 'name': 'wash-and-wear'}, {'id': 12113, 'synset': 'washbasin.n.02', 'name': 'washbasin'}, {'id': 12114, 'synset': 'washboard.n.02', 'name': 'washboard'}, {'id': 12115, 'synset': 'washboard.n.01', 'name': 'washboard'}, {'id': 12116, 'synset': 'washer.n.02', 'name': 'washer'}, {'id': 12117, 'synset': 'washhouse.n.01', 'name': 'washhouse'}, {'id': 12118, 'synset': 'washroom.n.01', 'name': 'washroom'}, {'id': 12119, 'synset': 'washstand.n.01', 'name': 'washstand'}, {'id': 12120, 'synset': 'washtub.n.01', 'name': 'washtub'}, {'id': 12121, 'synset': 'wastepaper_basket.n.01', 'name': 'wastepaper_basket'}, {'id': 12122, 'synset': 'watch_cap.n.01', 'name': 'watch_cap'}, {'id': 12123, 'synset': 'watch_case.n.01', 'name': 'watch_case'}, {'id': 12124, 'synset': 'watch_glass.n.01', 'name': 'watch_glass'}, {'id': 12125, 'synset': 'watchtower.n.01', 'name': 'watchtower'}, {'id': 12126, 'synset': 'water-base_paint.n.01', 'name': 'water-base_paint'}, {'id': 12127, 'synset': 'water_bed.n.01', 'name': 'water_bed'}, {'id': 12128, 'synset': 'water_butt.n.01', 'name': 'water_butt'}, {'id': 12129, 'synset': 'water_cart.n.01', 'name': 'water_cart'}, {'id': 12130, 'synset': 'water_chute.n.01', 'name': 'water_chute'}, {'id': 12131, 'synset': 'water_closet.n.01', 'name': 'water_closet'}, {'id': 12132, 'synset': 'watercolor.n.02', 'name': 'watercolor'}, {'id': 12133, 'synset': 'water-cooled_reactor.n.01', 'name': 'water-cooled_reactor'}, {'id': 12134, 'synset': 'water_filter.n.01', 'name': 'water_filter'}, {'id': 12135, 'synset': 'water_gauge.n.01', 'name': 'water_gauge'}, {'id': 12136, 'synset': 'water_glass.n.02', 'name': 'water_glass'}, {'id': 12137, 'synset': 'water_hazard.n.01', 'name': 'water_hazard'}, {'id': 12138, 'synset': 'watering_cart.n.01', 'name': 'watering_cart'}, {'id': 12139, 'synset': 'water_jacket.n.01', 'name': 'water_jacket'}, {'id': 12140, 'synset': 'water_jump.n.01', 'name': 'water_jump'}, {'id': 12141, 'synset': 'water_level.n.04', 'name': 'water_level'}, {'id': 12142, 'synset': 'water_meter.n.01', 'name': 'water_meter'}, {'id': 12143, 'synset': 'water_mill.n.01', 'name': 'water_mill'}, {'id': 12144, 'synset': 'waterproof.n.01', 'name': 'waterproof'}, {'id': 12145, 'synset': 'waterproofing.n.02', 'name': 'waterproofing'}, {'id': 12146, 'synset': 'water_pump.n.01', 'name': 'water_pump'}, {'id': 12147, 'synset': 'waterspout.n.03', 'name': 'waterspout'}, {'id': 12148, 'synset': 'water_wagon.n.01', 'name': 'water_wagon'}, {'id': 12149, 'synset': 'waterwheel.n.02', 'name': 'waterwheel'}, {'id': 12150, 'synset': 'waterwheel.n.01', 'name': 'waterwheel'}, {'id': 12151, 'synset': 'water_wings.n.01', 'name': 'water_wings'}, {'id': 12152, 'synset': 'waterworks.n.02', 'name': 'waterworks'}, {'id': 12153, 'synset': 'wattmeter.n.01', 'name': 'wattmeter'}, {'id': 12154, 'synset': 'waxwork.n.02', 'name': 'waxwork'}, {'id': 12155, 'synset': 'ways.n.01', 'name': 'ways'}, {'id': 12156, 'synset': 'weapon.n.01', 'name': 'weapon'}, {'id': 12157, 'synset': 'weaponry.n.01', 'name': 'weaponry'}, {'id': 12158, 'synset': 'weapons_carrier.n.01', 'name': 'weapons_carrier'}, {'id': 12159, 'synset': 'weathercock.n.01', 'name': 'weathercock'}, {'id': 12160, 'synset': 'weatherglass.n.01', 'name': 'weatherglass'}, {'id': 12161, 'synset': 'weather_satellite.n.01', 'name': 'weather_satellite'}, {'id': 12162, 'synset': 'weather_ship.n.01', 'name': 'weather_ship'}, {'id': 12163, 'synset': 'web.n.02', 'name': 'web'}, {'id': 12164, 'synset': 'web.n.06', 'name': 'web'}, {'id': 12165, 'synset': 'webbing.n.03', 'name': 'webbing'}, {'id': 12166, 'synset': 'wedge.n.06', 'name': 'wedge'}, {'id': 12167, 'synset': 'wedge.n.05', 'name': 'wedge'}, {'id': 12168, 'synset': 'wedgie.n.01', 'name': 'wedgie'}, {'id': 12169, 'synset': 'wedgwood.n.02', 'name': 'Wedgwood'}, {'id': 12170, 'synset': 'weeder.n.02', 'name': 'weeder'}, {'id': 12171, 'synset': 'weeds.n.01', 'name': 'weeds'}, {'id': 12172, 'synset': 'weekender.n.02', 'name': 'weekender'}, {'id': 12173, 'synset': 'weighbridge.n.01', 'name': 'weighbridge'}, {'id': 12174, 'synset': 'weight.n.02', 'name': 'weight'}, {'id': 12175, 'synset': 'weir.n.01', 'name': 'weir'}, {'id': 12176, 'synset': 'weir.n.02', 'name': 'weir'}, {'id': 12177, 'synset': 'welcome_wagon.n.01', 'name': 'welcome_wagon'}, {'id': 12178, 'synset': 'weld.n.03', 'name': 'weld'}, {'id': 12179, 'synset': "welder's_mask.n.01", 'name': "welder's_mask"}, {'id': 12180, 'synset': 'weldment.n.01', 'name': 'weldment'}, {'id': 12181, 'synset': 'well.n.02', 'name': 'well'}, {'id': 12182, 'synset': 'wellhead.n.02', 'name': 'wellhead'}, {'id': 12183, 'synset': 'welt.n.02', 'name': 'welt'}, {'id': 12184, 'synset': 'weston_cell.n.01', 'name': 'Weston_cell'}, {'id': 12185, 'synset': 'wet_bar.n.01', 'name': 'wet_bar'}, {'id': 12186, 'synset': 'wet-bulb_thermometer.n.01', 'name': 'wet-bulb_thermometer'}, {'id': 12187, 'synset': 'wet_cell.n.01', 'name': 'wet_cell'}, {'id': 12188, 'synset': 'wet_fly.n.01', 'name': 'wet_fly'}, {'id': 12189, 'synset': 'whaleboat.n.01', 'name': 'whaleboat'}, {'id': 12190, 'synset': 'whaler.n.02', 'name': 'whaler'}, {'id': 12191, 'synset': 'whaling_gun.n.01', 'name': 'whaling_gun'}, {'id': 12192, 'synset': 'wheel.n.04', 'name': 'wheel'}, {'id': 12193, 'synset': 'wheel_and_axle.n.01', 'name': 'wheel_and_axle'}, {'id': 12194, 'synset': 'wheeled_vehicle.n.01', 'name': 'wheeled_vehicle'}, {'id': 12195, 'synset': 'wheelwork.n.01', 'name': 'wheelwork'}, {'id': 12196, 'synset': 'wherry.n.02', 'name': 'wherry'}, {'id': 12197, 'synset': 'wherry.n.01', 'name': 'wherry'}, {'id': 12198, 'synset': 'whetstone.n.01', 'name': 'whetstone'}, {'id': 12199, 'synset': 'whiffletree.n.01', 'name': 'whiffletree'}, {'id': 12200, 'synset': 'whip.n.01', 'name': 'whip'}, {'id': 12201, 'synset': 'whipcord.n.02', 'name': 'whipcord'}, {'id': 12202, 'synset': 'whipping_post.n.01', 'name': 'whipping_post'}, {'id': 12203, 'synset': 'whipstitch.n.01', 'name': 'whipstitch'}, {'id': 12204, 'synset': 'whirler.n.02', 'name': 'whirler'}, {'id': 12205, 'synset': 'whisk.n.02', 'name': 'whisk'}, {'id': 12206, 'synset': 'whisk.n.01', 'name': 'whisk'}, {'id': 12207, 'synset': 'whiskey_bottle.n.01', 'name': 'whiskey_bottle'}, {'id': 12208, 'synset': 'whiskey_jug.n.01', 'name': 'whiskey_jug'}, {'id': 12209, 'synset': 'whispering_gallery.n.01', 'name': 'whispering_gallery'}, {'id': 12210, 'synset': 'whistle.n.04', 'name': 'whistle'}, {'id': 12211, 'synset': 'white.n.11', 'name': 'white'}, {'id': 12212, 'synset': 'white_goods.n.01', 'name': 'white_goods'}, {'id': 12213, 'synset': 'whitewash.n.02', 'name': 'whitewash'}, {'id': 12214, 'synset': 'whorehouse.n.01', 'name': 'whorehouse'}, {'id': 12215, 'synset': 'wick.n.02', 'name': 'wick'}, {'id': 12216, 'synset': 'wicker.n.02', 'name': 'wicker'}, {'id': 12217, 'synset': 'wicker_basket.n.01', 'name': 'wicker_basket'}, {'id': 12218, 'synset': 'wicket.n.02', 'name': 'wicket'}, {'id': 12219, 'synset': 'wicket.n.01', 'name': 'wicket'}, {'id': 12220, 'synset': 'wickiup.n.01', 'name': 'wickiup'}, {'id': 12221, 'synset': 'wide-angle_lens.n.01', 'name': 'wide-angle_lens'}, {'id': 12222, 'synset': 'widebody_aircraft.n.01', 'name': 'widebody_aircraft'}, {'id': 12223, 'synset': 'wide_wale.n.01', 'name': 'wide_wale'}, {'id': 12224, 'synset': "widow's_walk.n.01", 'name': "widow's_walk"}, {'id': 12225, 'synset': 'wiffle.n.01', 'name': 'Wiffle'}, {'id': 12226, 'synset': 'wigwam.n.01', 'name': 'wigwam'}, {'id': 12227, 'synset': 'wilton.n.01', 'name': 'Wilton'}, {'id': 12228, 'synset': 'wimple.n.01', 'name': 'wimple'}, {'id': 12229, 'synset': 'wincey.n.01', 'name': 'wincey'}, {'id': 12230, 'synset': 'winceyette.n.01', 'name': 'winceyette'}, {'id': 12231, 'synset': 'winch.n.01', 'name': 'winch'}, {'id': 12232, 'synset': 'winchester.n.02', 'name': 'Winchester'}, {'id': 12233, 'synset': 'windbreak.n.01', 'name': 'windbreak'}, {'id': 12234, 'synset': 'winder.n.02', 'name': 'winder'}, {'id': 12235, 'synset': 'wind_instrument.n.01', 'name': 'wind_instrument'}, {'id': 12236, 'synset': 'windjammer.n.01', 'name': 'windjammer'}, {'id': 12237, 'synset': 'windmill.n.02', 'name': 'windmill'}, {'id': 12238, 'synset': 'window.n.01', 'name': 'window'}, {'id': 12239, 'synset': 'window.n.08', 'name': 'window'}, {'id': 12240, 'synset': 'window_blind.n.01', 'name': 'window_blind'}, {'id': 12241, 'synset': 'window_envelope.n.01', 'name': 'window_envelope'}, {'id': 12242, 'synset': 'window_frame.n.01', 'name': 'window_frame'}, {'id': 12243, 'synset': 'window_screen.n.01', 'name': 'window_screen'}, {'id': 12244, 'synset': 'window_seat.n.01', 'name': 'window_seat'}, {'id': 12245, 'synset': 'window_shade.n.01', 'name': 'window_shade'}, {'id': 12246, 'synset': 'windowsill.n.01', 'name': 'windowsill'}, {'id': 12247, 'synset': 'windshield.n.01', 'name': 'windshield'}, {'id': 12248, 'synset': 'windsor_chair.n.01', 'name': 'Windsor_chair'}, {'id': 12249, 'synset': 'windsor_knot.n.01', 'name': 'Windsor_knot'}, {'id': 12250, 'synset': 'windsor_tie.n.01', 'name': 'Windsor_tie'}, {'id': 12251, 'synset': 'wind_tee.n.01', 'name': 'wind_tee'}, {'id': 12252, 'synset': 'wind_tunnel.n.01', 'name': 'wind_tunnel'}, {'id': 12253, 'synset': 'wind_turbine.n.01', 'name': 'wind_turbine'}, {'id': 12254, 'synset': 'wine_bar.n.01', 'name': 'wine_bar'}, {'id': 12255, 'synset': 'wine_cask.n.01', 'name': 'wine_cask'}, {'id': 12256, 'synset': 'winepress.n.01', 'name': 'winepress'}, {'id': 12257, 'synset': 'winery.n.01', 'name': 'winery'}, {'id': 12258, 'synset': 'wineskin.n.01', 'name': 'wineskin'}, {'id': 12259, 'synset': 'wing.n.02', 'name': 'wing'}, {'id': 12260, 'synset': 'wing_chair.n.01', 'name': 'wing_chair'}, {'id': 12261, 'synset': 'wing_nut.n.02', 'name': 'wing_nut'}, {'id': 12262, 'synset': 'wing_tip.n.02', 'name': 'wing_tip'}, {'id': 12263, 'synset': 'wing_tip.n.01', 'name': 'wing_tip'}, {'id': 12264, 'synset': 'wiper.n.02', 'name': 'wiper'}, {'id': 12265, 'synset': 'wiper_motor.n.01', 'name': 'wiper_motor'}, {'id': 12266, 'synset': 'wire.n.01', 'name': 'wire'}, {'id': 12267, 'synset': 'wire.n.02', 'name': 'wire'}, {'id': 12268, 'synset': 'wire_cloth.n.01', 'name': 'wire_cloth'}, {'id': 12269, 'synset': 'wire_cutter.n.01', 'name': 'wire_cutter'}, {'id': 12270, 'synset': 'wire_gauge.n.01', 'name': 'wire_gauge'}, {'id': 12271, 'synset': 'wireless_local_area_network.n.01', 'name': 'wireless_local_area_network'}, {'id': 12272, 'synset': 'wire_matrix_printer.n.01', 'name': 'wire_matrix_printer'}, {'id': 12273, 'synset': 'wire_recorder.n.01', 'name': 'wire_recorder'}, {'id': 12274, 'synset': 'wire_stripper.n.01', 'name': 'wire_stripper'}, {'id': 12275, 'synset': 'wirework.n.01', 'name': 'wirework'}, {'id': 12276, 'synset': 'wiring.n.01', 'name': 'wiring'}, {'id': 12277, 'synset': 'wishing_cap.n.01', 'name': 'wishing_cap'}, {'id': 12278, 'synset': 'witness_box.n.01', 'name': 'witness_box'}, {'id': 12279, 'synset': "woman's_clothing.n.01", 'name': "woman's_clothing"}, {'id': 12280, 'synset': 'wood.n.08', 'name': 'wood'}, {'id': 12281, 'synset': 'woodcarving.n.01', 'name': 'woodcarving'}, {'id': 12282, 'synset': 'wood_chisel.n.01', 'name': 'wood_chisel'}, {'id': 12283, 'synset': 'woodenware.n.01', 'name': 'woodenware'}, {'id': 12284, 'synset': 'woodscrew.n.01', 'name': 'woodscrew'}, {'id': 12285, 'synset': 'woodshed.n.01', 'name': 'woodshed'}, {'id': 12286, 'synset': 'wood_vise.n.01', 'name': 'wood_vise'}, {'id': 12287, 'synset': 'woodwind.n.01', 'name': 'woodwind'}, {'id': 12288, 'synset': 'woof.n.01', 'name': 'woof'}, {'id': 12289, 'synset': 'woofer.n.01', 'name': 'woofer'}, {'id': 12290, 'synset': 'wool.n.01', 'name': 'wool'}, {'id': 12291, 'synset': 'workbasket.n.01', 'name': 'workbasket'}, {'id': 12292, 'synset': 'workbench.n.01', 'name': 'workbench'}, {'id': 12293, 'synset': 'work-clothing.n.01', 'name': 'work-clothing'}, {'id': 12294, 'synset': 'workhouse.n.02', 'name': 'workhouse'}, {'id': 12295, 'synset': 'workhouse.n.01', 'name': 'workhouse'}, {'id': 12296, 'synset': 'workpiece.n.01', 'name': 'workpiece'}, {'id': 12297, 'synset': 'workroom.n.01', 'name': 'workroom'}, {'id': 12298, 'synset': 'works.n.04', 'name': 'works'}, {'id': 12299, 'synset': 'work-shirt.n.01', 'name': 'work-shirt'}, {'id': 12300, 'synset': 'workstation.n.01', 'name': 'workstation'}, {'id': 12301, 'synset': 'worktable.n.01', 'name': 'worktable'}, {'id': 12302, 'synset': 'workwear.n.01', 'name': 'workwear'}, {'id': 12303, 'synset': 'world_wide_web.n.01', 'name': 'World_Wide_Web'}, {'id': 12304, 'synset': 'worm_fence.n.01', 'name': 'worm_fence'}, {'id': 12305, 'synset': 'worm_gear.n.01', 'name': 'worm_gear'}, {'id': 12306, 'synset': 'worm_wheel.n.01', 'name': 'worm_wheel'}, {'id': 12307, 'synset': 'worsted.n.01', 'name': 'worsted'}, {'id': 12308, 'synset': 'worsted.n.02', 'name': 'worsted'}, {'id': 12309, 'synset': 'wrap.n.01', 'name': 'wrap'}, {'id': 12310, 'synset': 'wraparound.n.01', 'name': 'wraparound'}, {'id': 12311, 'synset': 'wrapping.n.01', 'name': 'wrapping'}, {'id': 12312, 'synset': 'wreck.n.04', 'name': 'wreck'}, {'id': 12313, 'synset': 'wrestling_mat.n.01', 'name': 'wrestling_mat'}, {'id': 12314, 'synset': 'wringer.n.01', 'name': 'wringer'}, {'id': 12315, 'synset': 'wrist_pad.n.01', 'name': 'wrist_pad'}, {'id': 12316, 'synset': 'wrist_pin.n.01', 'name': 'wrist_pin'}, {'id': 12317, 'synset': 'wristwatch.n.01', 'name': 'wristwatch'}, {'id': 12318, 'synset': 'writing_arm.n.01', 'name': 'writing_arm'}, {'id': 12319, 'synset': 'writing_desk.n.02', 'name': 'writing_desk'}, {'id': 12320, 'synset': 'writing_desk.n.01', 'name': 'writing_desk'}, {'id': 12321, 'synset': 'writing_implement.n.01', 'name': 'writing_implement'}, {'id': 12322, 'synset': 'xerographic_printer.n.01', 'name': 'xerographic_printer'}, {'id': 12323, 'synset': 'xerox.n.02', 'name': 'Xerox'}, {'id': 12324, 'synset': 'x-ray_film.n.01', 'name': 'X-ray_film'}, {'id': 12325, 'synset': 'x-ray_machine.n.01', 'name': 'X-ray_machine'}, {'id': 12326, 'synset': 'x-ray_tube.n.01', 'name': 'X-ray_tube'}, {'id': 12327, 'synset': 'yacht_chair.n.01', 'name': 'yacht_chair'}, {'id': 12328, 'synset': 'yagi.n.01', 'name': 'yagi'}, {'id': 12329, 'synset': 'yard.n.09', 'name': 'yard'}, {'id': 12330, 'synset': 'yard.n.08', 'name': 'yard'}, {'id': 12331, 'synset': 'yardarm.n.01', 'name': 'yardarm'}, {'id': 12332, 'synset': 'yard_marker.n.01', 'name': 'yard_marker'}, {'id': 12333, 'synset': 'yardstick.n.02', 'name': 'yardstick'}, {'id': 12334, 'synset': 'yarmulke.n.01', 'name': 'yarmulke'}, {'id': 12335, 'synset': 'yashmak.n.01', 'name': 'yashmak'}, {'id': 12336, 'synset': 'yataghan.n.01', 'name': 'yataghan'}, {'id': 12337, 'synset': 'yawl.n.02', 'name': 'yawl'}, {'id': 12338, 'synset': 'yawl.n.01', 'name': 'yawl'}, {'id': 12339, 'synset': 'yoke.n.01', 'name': 'yoke'}, {'id': 12340, 'synset': 'yoke.n.06', 'name': 'yoke'}, {'id': 12341, 'synset': 'yurt.n.01', 'name': 'yurt'}, {'id': 12342, 'synset': 'zamboni.n.01', 'name': 'Zamboni'}, {'id': 12343, 'synset': 'zero.n.04', 'name': 'zero'}, {'id': 12344, 'synset': 'ziggurat.n.01', 'name': 'ziggurat'}, {'id': 12345, 'synset': 'zill.n.01', 'name': 'zill'}, {'id': 12346, 'synset': 'zip_gun.n.01', 'name': 'zip_gun'}, {'id': 12347, 'synset': 'zither.n.01', 'name': 'zither'}, {'id': 12348, 'synset': 'zoot_suit.n.01', 'name': 'zoot_suit'}, {'id': 12349, 'synset': 'shading.n.01', 'name': 'shading'}, {'id': 12350, 'synset': 'grain.n.10', 'name': 'grain'}, {'id': 12351, 'synset': 'wood_grain.n.01', 'name': 'wood_grain'}, {'id': 12352, 'synset': 'graining.n.01', 'name': 'graining'}, {'id': 12353, 'synset': 'marbleization.n.01', 'name': 'marbleization'}, {'id': 12354, 'synset': 'light.n.07', 'name': 'light'}, {'id': 12355, 'synset': 'aura.n.02', 'name': 'aura'}, {'id': 12356, 'synset': 'sunniness.n.01', 'name': 'sunniness'}, {'id': 12357, 'synset': 'glint.n.02', 'name': 'glint'}, {'id': 12358, 'synset': 'opalescence.n.01', 'name': 'opalescence'}, {'id': 12359, 'synset': 'polish.n.01', 'name': 'polish'}, {'id': 12360, 'synset': 'primary_color_for_pigments.n.01', 'name': 'primary_color_for_pigments'}, {'id': 12361, 'synset': 'primary_color_for_light.n.01', 'name': 'primary_color_for_light'}, {'id': 12362, 'synset': 'colorlessness.n.01', 'name': 'colorlessness'}, {'id': 12363, 'synset': 'mottle.n.01', 'name': 'mottle'}, {'id': 12364, 'synset': 'achromia.n.01', 'name': 'achromia'}, {'id': 12365, 'synset': 'shade.n.02', 'name': 'shade'}, {'id': 12366, 'synset': 'chromatic_color.n.01', 'name': 'chromatic_color'}, {'id': 12367, 'synset': 'black.n.01', 'name': 'black'}, {'id': 12368, 'synset': 'coal_black.n.01', 'name': 'coal_black'}, {'id': 12369, 'synset': 'alabaster.n.03', 'name': 'alabaster'}, {'id': 12370, 'synset': 'bone.n.03', 'name': 'bone'}, {'id': 12371, 'synset': 'gray.n.01', 'name': 'gray'}, {'id': 12372, 'synset': 'ash_grey.n.01', 'name': 'ash_grey'}, {'id': 12373, 'synset': 'charcoal.n.03', 'name': 'charcoal'}, {'id': 12374, 'synset': 'sanguine.n.01', 'name': 'sanguine'}, {'id': 12375, 'synset': 'turkey_red.n.01', 'name': 'Turkey_red'}, {'id': 12376, 'synset': 'crimson.n.01', 'name': 'crimson'}, {'id': 12377, 'synset': 'dark_red.n.01', 'name': 'dark_red'}, {'id': 12378, 'synset': 'claret.n.01', 'name': 'claret'}, {'id': 12379, 'synset': 'fuschia.n.01', 'name': 'fuschia'}, {'id': 12380, 'synset': 'maroon.n.02', 'name': 'maroon'}, {'id': 12381, 'synset': 'orange.n.02', 'name': 'orange'}, {'id': 12382, 'synset': 'reddish_orange.n.01', 'name': 'reddish_orange'}, {'id': 12383, 'synset': 'yellow.n.01', 'name': 'yellow'}, {'id': 12384, 'synset': 'gamboge.n.02', 'name': 'gamboge'}, {'id': 12385, 'synset': 'pale_yellow.n.01', 'name': 'pale_yellow'}, {'id': 12386, 'synset': 'green.n.01', 'name': 'green'}, {'id': 12387, 'synset': 'greenishness.n.01', 'name': 'greenishness'}, {'id': 12388, 'synset': 'sea_green.n.01', 'name': 'sea_green'}, {'id': 12389, 'synset': 'sage_green.n.01', 'name': 'sage_green'}, {'id': 12390, 'synset': 'bottle_green.n.01', 'name': 'bottle_green'}, {'id': 12391, 'synset': 'emerald.n.03', 'name': 'emerald'}, {'id': 12392, 'synset': 'olive_green.n.01', 'name': 'olive_green'}, {'id': 12393, 'synset': 'jade_green.n.01', 'name': 'jade_green'}, {'id': 12394, 'synset': 'blue.n.01', 'name': 'blue'}, {'id': 12395, 'synset': 'azure.n.01', 'name': 'azure'}, {'id': 12396, 'synset': 'steel_blue.n.01', 'name': 'steel_blue'}, {'id': 12397, 'synset': 'greenish_blue.n.01', 'name': 'greenish_blue'}, {'id': 12398, 'synset': 'purplish_blue.n.01', 'name': 'purplish_blue'}, {'id': 12399, 'synset': 'purple.n.01', 'name': 'purple'}, {'id': 12400, 'synset': 'tyrian_purple.n.02', 'name': 'Tyrian_purple'}, {'id': 12401, 'synset': 'indigo.n.03', 'name': 'indigo'}, {'id': 12402, 'synset': 'lavender.n.02', 'name': 'lavender'}, {'id': 12403, 'synset': 'reddish_purple.n.01', 'name': 'reddish_purple'}, {'id': 12404, 'synset': 'pink.n.01', 'name': 'pink'}, {'id': 12405, 'synset': 'carnation.n.02', 'name': 'carnation'}, {'id': 12406, 'synset': 'rose.n.03', 'name': 'rose'}, {'id': 12407, 'synset': 'chestnut.n.04', 'name': 'chestnut'}, {'id': 12408, 'synset': 'chocolate.n.03', 'name': 'chocolate'}, {'id': 12409, 'synset': 'light_brown.n.01', 'name': 'light_brown'}, {'id': 12410, 'synset': 'tan.n.02', 'name': 'tan'}, {'id': 12411, 'synset': 'beige.n.01', 'name': 'beige'}, {'id': 12412, 'synset': 'reddish_brown.n.01', 'name': 'reddish_brown'}, {'id': 12413, 'synset': 'brick_red.n.01', 'name': 'brick_red'}, {'id': 12414, 'synset': 'copper.n.04', 'name': 'copper'}, {'id': 12415, 'synset': 'indian_red.n.03', 'name': 'Indian_red'}, {'id': 12416, 'synset': 'puce.n.01', 'name': 'puce'}, {'id': 12417, 'synset': 'olive.n.05', 'name': 'olive'}, {'id': 12418, 'synset': 'ultramarine.n.02', 'name': 'ultramarine'}, {'id': 12419, 'synset': 'complementary_color.n.01', 'name': 'complementary_color'}, {'id': 12420, 'synset': 'pigmentation.n.02', 'name': 'pigmentation'}, {'id': 12421, 'synset': 'complexion.n.01', 'name': 'complexion'}, {'id': 12422, 'synset': 'ruddiness.n.01', 'name': 'ruddiness'}, {'id': 12423, 'synset': 'nonsolid_color.n.01', 'name': 'nonsolid_color'}, {'id': 12424, 'synset': 'aposematic_coloration.n.01', 'name': 'aposematic_coloration'}, {'id': 12425, 'synset': 'cryptic_coloration.n.01', 'name': 'cryptic_coloration'}, {'id': 12426, 'synset': 'ring.n.01', 'name': 'ring'}, {'id': 12427, 'synset': 'center_of_curvature.n.01', 'name': 'center_of_curvature'}, {'id': 12428, 'synset': 'cadaver.n.01', 'name': 'cadaver'}, {'id': 12429, 'synset': 'mandibular_notch.n.01', 'name': 'mandibular_notch'}, {'id': 12430, 'synset': 'rib.n.05', 'name': 'rib'}, {'id': 12431, 'synset': 'skin.n.01', 'name': 'skin'}, {'id': 12432, 'synset': 'skin_graft.n.01', 'name': 'skin_graft'}, {'id': 12433, 'synset': 'epidermal_cell.n.01', 'name': 'epidermal_cell'}, {'id': 12434, 'synset': 'melanocyte.n.01', 'name': 'melanocyte'}, {'id': 12435, 'synset': 'prickle_cell.n.01', 'name': 'prickle_cell'}, {'id': 12436, 'synset': 'columnar_cell.n.01', 'name': 'columnar_cell'}, {'id': 12437, 'synset': 'spongioblast.n.01', 'name': 'spongioblast'}, {'id': 12438, 'synset': 'squamous_cell.n.01', 'name': 'squamous_cell'}, {'id': 12439, 'synset': 'amyloid_plaque.n.01', 'name': 'amyloid_plaque'}, {'id': 12440, 'synset': 'dental_plaque.n.01', 'name': 'dental_plaque'}, {'id': 12441, 'synset': 'macule.n.01', 'name': 'macule'}, {'id': 12442, 'synset': 'freckle.n.01', 'name': 'freckle'}, {'id': 12443, 'synset': 'bouffant.n.01', 'name': 'bouffant'}, {'id': 12444, 'synset': 'sausage_curl.n.01', 'name': 'sausage_curl'}, {'id': 12445, 'synset': 'forelock.n.01', 'name': 'forelock'}, {'id': 12446, 'synset': 'spit_curl.n.01', 'name': 'spit_curl'}, {'id': 12447, 'synset': 'pigtail.n.01', 'name': 'pigtail'}, {'id': 12448, 'synset': 'pageboy.n.02', 'name': 'pageboy'}, {'id': 12449, 'synset': 'pompadour.n.02', 'name': 'pompadour'}, {'id': 12450, 'synset': 'thatch.n.01', 'name': 'thatch'}, {'id': 12451, 'synset': 'soup-strainer.n.01', 'name': 'soup-strainer'}, {'id': 12452, 'synset': 'mustachio.n.01', 'name': 'mustachio'}, {'id': 12453, 'synset': 'walrus_mustache.n.01', 'name': 'walrus_mustache'}, {'id': 12454, 'synset': 'stubble.n.02', 'name': 'stubble'}, {'id': 12455, 'synset': 'vandyke_beard.n.01', 'name': 'vandyke_beard'}, {'id': 12456, 'synset': 'soul_patch.n.01', 'name': 'soul_patch'}, {'id': 12457, 'synset': 'esophageal_smear.n.01', 'name': 'esophageal_smear'}, {'id': 12458, 'synset': 'paraduodenal_smear.n.01', 'name': 'paraduodenal_smear'}, {'id': 12459, 'synset': 'specimen.n.02', 'name': 'specimen'}, {'id': 12460, 'synset': 'punctum.n.01', 'name': 'punctum'}, {'id': 12461, 'synset': 'glenoid_fossa.n.02', 'name': 'glenoid_fossa'}, {'id': 12462, 'synset': 'diastema.n.01', 'name': 'diastema'}, {'id': 12463, 'synset': 'marrow.n.01', 'name': 'marrow'}, {'id': 12464, 'synset': 'mouth.n.01', 'name': 'mouth'}, {'id': 12465, 'synset': 'canthus.n.01', 'name': 'canthus'}, {'id': 12466, 'synset': 'milk.n.02', 'name': 'milk'}, {'id': 12467, 'synset': "mother's_milk.n.01", 'name': "mother's_milk"}, {'id': 12468, 'synset': 'colostrum.n.01', 'name': 'colostrum'}, {'id': 12469, 'synset': 'vein.n.01', 'name': 'vein'}, {'id': 12470, 'synset': 'ganglion_cell.n.01', 'name': 'ganglion_cell'}, {'id': 12471, 'synset': 'x_chromosome.n.01', 'name': 'X_chromosome'}, {'id': 12472, 'synset': 'embryonic_cell.n.01', 'name': 'embryonic_cell'}, {'id': 12473, 'synset': 'myeloblast.n.01', 'name': 'myeloblast'}, {'id': 12474, 'synset': 'sideroblast.n.01', 'name': 'sideroblast'}, {'id': 12475, 'synset': 'osteocyte.n.01', 'name': 'osteocyte'}, {'id': 12476, 'synset': 'megalocyte.n.01', 'name': 'megalocyte'}, {'id': 12477, 'synset': 'leukocyte.n.01', 'name': 'leukocyte'}, {'id': 12478, 'synset': 'histiocyte.n.01', 'name': 'histiocyte'}, {'id': 12479, 'synset': 'fixed_phagocyte.n.01', 'name': 'fixed_phagocyte'}, {'id': 12480, 'synset': 'lymphocyte.n.01', 'name': 'lymphocyte'}, {'id': 12481, 'synset': 'monoblast.n.01', 'name': 'monoblast'}, {'id': 12482, 'synset': 'neutrophil.n.01', 'name': 'neutrophil'}, {'id': 12483, 'synset': 'microphage.n.01', 'name': 'microphage'}, {'id': 12484, 'synset': 'sickle_cell.n.01', 'name': 'sickle_cell'}, {'id': 12485, 'synset': 'siderocyte.n.01', 'name': 'siderocyte'}, {'id': 12486, 'synset': 'spherocyte.n.01', 'name': 'spherocyte'}, {'id': 12487, 'synset': 'ootid.n.01', 'name': 'ootid'}, {'id': 12488, 'synset': 'oocyte.n.01', 'name': 'oocyte'}, {'id': 12489, 'synset': 'spermatid.n.01', 'name': 'spermatid'}, {'id': 12490, 'synset': 'leydig_cell.n.01', 'name': 'Leydig_cell'}, {'id': 12491, 'synset': 'striated_muscle_cell.n.01', 'name': 'striated_muscle_cell'}, {'id': 12492, 'synset': 'smooth_muscle_cell.n.01', 'name': 'smooth_muscle_cell'}, {'id': 12493, 'synset': "ranvier's_nodes.n.01", 'name': "Ranvier's_nodes"}, {'id': 12494, 'synset': 'neuroglia.n.01', 'name': 'neuroglia'}, {'id': 12495, 'synset': 'astrocyte.n.01', 'name': 'astrocyte'}, {'id': 12496, 'synset': 'protoplasmic_astrocyte.n.01', 'name': 'protoplasmic_astrocyte'}, {'id': 12497, 'synset': 'oligodendrocyte.n.01', 'name': 'oligodendrocyte'}, {'id': 12498, 'synset': 'proprioceptor.n.01', 'name': 'proprioceptor'}, {'id': 12499, 'synset': 'dendrite.n.01', 'name': 'dendrite'}, {'id': 12500, 'synset': 'sensory_fiber.n.01', 'name': 'sensory_fiber'}, {'id': 12501, 'synset': 'subarachnoid_space.n.01', 'name': 'subarachnoid_space'}, {'id': 12502, 'synset': 'cerebral_cortex.n.01', 'name': 'cerebral_cortex'}, {'id': 12503, 'synset': 'renal_cortex.n.01', 'name': 'renal_cortex'}, {'id': 12504, 'synset': 'prepuce.n.02', 'name': 'prepuce'}, {'id': 12505, 'synset': 'head.n.01', 'name': 'head'}, {'id': 12506, 'synset': 'scalp.n.01', 'name': 'scalp'}, {'id': 12507, 'synset': 'frontal_eminence.n.01', 'name': 'frontal_eminence'}, {'id': 12508, 'synset': 'suture.n.01', 'name': 'suture'}, {'id': 12509, 'synset': 'foramen_magnum.n.01', 'name': 'foramen_magnum'}, {'id': 12510, 'synset': 'esophagogastric_junction.n.01', 'name': 'esophagogastric_junction'}, {'id': 12511, 'synset': 'heel.n.02', 'name': 'heel'}, {'id': 12512, 'synset': 'cuticle.n.01', 'name': 'cuticle'}, {'id': 12513, 'synset': 'hangnail.n.01', 'name': 'hangnail'}, {'id': 12514, 'synset': 'exoskeleton.n.01', 'name': 'exoskeleton'}, {'id': 12515, 'synset': 'abdominal_wall.n.01', 'name': 'abdominal_wall'}, {'id': 12516, 'synset': 'lemon.n.04', 'name': 'lemon'}, {'id': 12517, 'synset': 'coordinate_axis.n.01', 'name': 'coordinate_axis'}, {'id': 12518, 'synset': 'landscape.n.04', 'name': 'landscape'}, {'id': 12519, 'synset': 'medium.n.01', 'name': 'medium'}, {'id': 12520, 'synset': 'vehicle.n.02', 'name': 'vehicle'}, {'id': 12521, 'synset': 'paper.n.04', 'name': 'paper'}, {'id': 12522, 'synset': 'channel.n.01', 'name': 'channel'}, {'id': 12523, 'synset': 'film.n.02', 'name': 'film'}, {'id': 12524, 'synset': 'silver_screen.n.01', 'name': 'silver_screen'}, {'id': 12525, 'synset': 'free_press.n.01', 'name': 'free_press'}, {'id': 12526, 'synset': 'press.n.02', 'name': 'press'}, {'id': 12527, 'synset': 'print_media.n.01', 'name': 'print_media'}, {'id': 12528, 'synset': 'storage_medium.n.01', 'name': 'storage_medium'}, {'id': 12529, 'synset': 'magnetic_storage_medium.n.01', 'name': 'magnetic_storage_medium'}, {'id': 12530, 'synset': 'journalism.n.01', 'name': 'journalism'}, {'id': 12531, 'synset': 'fleet_street.n.02', 'name': 'Fleet_Street'}, {'id': 12532, 'synset': 'photojournalism.n.01', 'name': 'photojournalism'}, {'id': 12533, 'synset': 'news_photography.n.01', 'name': 'news_photography'}, {'id': 12534, 'synset': 'rotogravure.n.02', 'name': 'rotogravure'}, {'id': 12535, 'synset': 'daily.n.01', 'name': 'daily'}, {'id': 12536, 'synset': 'gazette.n.01', 'name': 'gazette'}, {'id': 12537, 'synset': 'school_newspaper.n.01', 'name': 'school_newspaper'}, {'id': 12538, 'synset': 'tabloid.n.02', 'name': 'tabloid'}, {'id': 12539, 'synset': 'yellow_journalism.n.01', 'name': 'yellow_journalism'}, {'id': 12540, 'synset': 'telecommunication.n.01', 'name': 'telecommunication'}, {'id': 12541, 'synset': 'telephone.n.02', 'name': 'telephone'}, {'id': 12542, 'synset': 'voice_mail.n.01', 'name': 'voice_mail'}, {'id': 12543, 'synset': 'call.n.01', 'name': 'call'}, {'id': 12544, 'synset': 'call-back.n.01', 'name': 'call-back'}, {'id': 12545, 'synset': 'collect_call.n.01', 'name': 'collect_call'}, {'id': 12546, 'synset': 'call_forwarding.n.01', 'name': 'call_forwarding'}, {'id': 12547, 'synset': 'call-in.n.01', 'name': 'call-in'}, {'id': 12548, 'synset': 'call_waiting.n.01', 'name': 'call_waiting'}, {'id': 12549, 'synset': 'crank_call.n.01', 'name': 'crank_call'}, {'id': 12550, 'synset': 'local_call.n.01', 'name': 'local_call'}, {'id': 12551, 'synset': 'long_distance.n.01', 'name': 'long_distance'}, {'id': 12552, 'synset': 'toll_call.n.01', 'name': 'toll_call'}, {'id': 12553, 'synset': 'wake-up_call.n.02', 'name': 'wake-up_call'}, {'id': 12554, 'synset': 'three-way_calling.n.01', 'name': 'three-way_calling'}, {'id': 12555, 'synset': 'telegraphy.n.01', 'name': 'telegraphy'}, {'id': 12556, 'synset': 'cable.n.01', 'name': 'cable'}, {'id': 12557, 'synset': 'wireless.n.02', 'name': 'wireless'}, {'id': 12558, 'synset': 'radiotelegraph.n.01', 'name': 'radiotelegraph'}, {'id': 12559, 'synset': 'radiotelephone.n.01', 'name': 'radiotelephone'}, {'id': 12560, 'synset': 'broadcasting.n.02', 'name': 'broadcasting'}, {'id': 12561, 'synset': 'rediffusion.n.01', 'name': 'Rediffusion'}, {'id': 12562, 'synset': 'multiplex.n.01', 'name': 'multiplex'}, {'id': 12563, 'synset': 'radio.n.01', 'name': 'radio'}, {'id': 12564, 'synset': 'television.n.01', 'name': 'television'}, {'id': 12565, 'synset': 'cable_television.n.01', 'name': 'cable_television'}, {'id': 12566, 'synset': 'high-definition_television.n.01', 'name': 'high-definition_television'}, {'id': 12567, 'synset': 'reception.n.03', 'name': 'reception'}, {'id': 12568, 'synset': 'signal_detection.n.01', 'name': 'signal_detection'}, {'id': 12569, 'synset': 'hakham.n.01', 'name': 'Hakham'}, {'id': 12570, 'synset': 'web_site.n.01', 'name': 'web_site'}, {'id': 12571, 'synset': 'chat_room.n.01', 'name': 'chat_room'}, {'id': 12572, 'synset': 'portal_site.n.01', 'name': 'portal_site'}, {'id': 12573, 'synset': 'jotter.n.01', 'name': 'jotter'}, {'id': 12574, 'synset': 'breviary.n.01', 'name': 'breviary'}, {'id': 12575, 'synset': 'wordbook.n.01', 'name': 'wordbook'}, {'id': 12576, 'synset': 'desk_dictionary.n.01', 'name': 'desk_dictionary'}, {'id': 12577, 'synset': 'reckoner.n.02', 'name': 'reckoner'}, {'id': 12578, 'synset': 'document.n.01', 'name': 'document'}, {'id': 12579, 'synset': 'album.n.01', 'name': 'album'}, {'id': 12580, 'synset': 'concept_album.n.01', 'name': 'concept_album'}, {'id': 12581, 'synset': 'rock_opera.n.01', 'name': 'rock_opera'}, {'id': 12582, 'synset': 'tribute_album.n.01', 'name': 'tribute_album'}, {'id': 12583, 'synset': 'magazine.n.01', 'name': 'magazine'}, {'id': 12584, 'synset': 'colour_supplement.n.01', 'name': 'colour_supplement'}, {'id': 12585, 'synset': 'news_magazine.n.01', 'name': 'news_magazine'}, {'id': 12586, 'synset': 'pulp.n.04', 'name': 'pulp'}, {'id': 12587, 'synset': 'slick.n.02', 'name': 'slick'}, {'id': 12588, 'synset': 'trade_magazine.n.01', 'name': 'trade_magazine'}, {'id': 12589, 'synset': 'movie.n.01', 'name': 'movie'}, {'id': 12590, 'synset': 'outtake.n.01', 'name': 'outtake'}, {'id': 12591, 'synset': "shoot-'em-up.n.01", 'name': "shoot-'em-up"}, {'id': 12592, 'synset': 'spaghetti_western.n.01', 'name': 'spaghetti_Western'}, {'id': 12593, 'synset': 'encyclical.n.01', 'name': 'encyclical'}, {'id': 12594, 'synset': 'crossword_puzzle.n.01', 'name': 'crossword_puzzle'}, {'id': 12595, 'synset': 'sign.n.02', 'name': 'sign'}, {'id': 12596, 'synset': 'swastika.n.01', 'name': 'swastika'}, {'id': 12597, 'synset': 'concert.n.01', 'name': 'concert'}, {'id': 12598, 'synset': 'artwork.n.01', 'name': 'artwork'}, {'id': 12599, 'synset': 'lobe.n.03', 'name': 'lobe'}, {'id': 12600, 'synset': 'book_jacket.n.01', 'name': 'book_jacket'}, {'id': 12601, 'synset': 'cairn.n.01', 'name': 'cairn'}, {'id': 12602, 'synset': 'three-day_event.n.01', 'name': 'three-day_event'}, {'id': 12603, 'synset': 'comfort_food.n.01', 'name': 'comfort_food'}, {'id': 12604, 'synset': 'comestible.n.01', 'name': 'comestible'}, {'id': 12605, 'synset': 'tuck.n.01', 'name': 'tuck'}, {'id': 12606, 'synset': 'course.n.07', 'name': 'course'}, {'id': 12607, 'synset': 'dainty.n.01', 'name': 'dainty'}, {'id': 12608, 'synset': 'dish.n.02', 'name': 'dish'}, {'id': 12609, 'synset': 'fast_food.n.01', 'name': 'fast_food'}, {'id': 12610, 'synset': 'finger_food.n.01', 'name': 'finger_food'}, {'id': 12611, 'synset': 'ingesta.n.01', 'name': 'ingesta'}, {'id': 12612, 'synset': 'kosher.n.01', 'name': 'kosher'}, {'id': 12613, 'synset': 'fare.n.04', 'name': 'fare'}, {'id': 12614, 'synset': 'diet.n.03', 'name': 'diet'}, {'id': 12615, 'synset': 'diet.n.01', 'name': 'diet'}, {'id': 12616, 'synset': 'dietary.n.01', 'name': 'dietary'}, {'id': 12617, 'synset': 'balanced_diet.n.01', 'name': 'balanced_diet'}, {'id': 12618, 'synset': 'bland_diet.n.01', 'name': 'bland_diet'}, {'id': 12619, 'synset': 'clear_liquid_diet.n.01', 'name': 'clear_liquid_diet'}, {'id': 12620, 'synset': 'diabetic_diet.n.01', 'name': 'diabetic_diet'}, {'id': 12621, 'synset': 'dietary_supplement.n.01', 'name': 'dietary_supplement'}, {'id': 12622, 'synset': 'carbohydrate_loading.n.01', 'name': 'carbohydrate_loading'}, {'id': 12623, 'synset': 'fad_diet.n.01', 'name': 'fad_diet'}, {'id': 12624, 'synset': 'gluten-free_diet.n.01', 'name': 'gluten-free_diet'}, {'id': 12625, 'synset': 'high-protein_diet.n.01', 'name': 'high-protein_diet'}, {'id': 12626, 'synset': 'high-vitamin_diet.n.01', 'name': 'high-vitamin_diet'}, {'id': 12627, 'synset': 'light_diet.n.01', 'name': 'light_diet'}, {'id': 12628, 'synset': 'liquid_diet.n.01', 'name': 'liquid_diet'}, {'id': 12629, 'synset': 'low-calorie_diet.n.01', 'name': 'low-calorie_diet'}, {'id': 12630, 'synset': 'low-fat_diet.n.01', 'name': 'low-fat_diet'}, {'id': 12631, 'synset': 'low-sodium_diet.n.01', 'name': 'low-sodium_diet'}, {'id': 12632, 'synset': 'macrobiotic_diet.n.01', 'name': 'macrobiotic_diet'}, {'id': 12633, 'synset': 'reducing_diet.n.01', 'name': 'reducing_diet'}, {'id': 12634, 'synset': 'soft_diet.n.01', 'name': 'soft_diet'}, {'id': 12635, 'synset': 'vegetarianism.n.01', 'name': 'vegetarianism'}, {'id': 12636, 'synset': 'menu.n.02', 'name': 'menu'}, {'id': 12637, 'synset': 'chow.n.02', 'name': 'chow'}, {'id': 12638, 'synset': 'board.n.04', 'name': 'board'}, {'id': 12639, 'synset': 'mess.n.04', 'name': 'mess'}, {'id': 12640, 'synset': 'ration.n.01', 'name': 'ration'}, {'id': 12641, 'synset': 'field_ration.n.01', 'name': 'field_ration'}, {'id': 12642, 'synset': 'k_ration.n.01', 'name': 'K_ration'}, {'id': 12643, 'synset': 'c-ration.n.01', 'name': 'C-ration'}, {'id': 12644, 'synset': 'foodstuff.n.02', 'name': 'foodstuff'}, {'id': 12645, 'synset': 'starches.n.01', 'name': 'starches'}, {'id': 12646, 'synset': 'breadstuff.n.02', 'name': 'breadstuff'}, {'id': 12647, 'synset': 'coloring.n.01', 'name': 'coloring'}, {'id': 12648, 'synset': 'concentrate.n.02', 'name': 'concentrate'}, {'id': 12649, 'synset': 'tomato_concentrate.n.01', 'name': 'tomato_concentrate'}, {'id': 12650, 'synset': 'meal.n.03', 'name': 'meal'}, {'id': 12651, 'synset': 'kibble.n.01', 'name': 'kibble'}, {'id': 12652, 'synset': 'farina.n.01', 'name': 'farina'}, {'id': 12653, 'synset': 'matzo_meal.n.01', 'name': 'matzo_meal'}, {'id': 12654, 'synset': 'oatmeal.n.02', 'name': 'oatmeal'}, {'id': 12655, 'synset': 'pea_flour.n.01', 'name': 'pea_flour'}, {'id': 12656, 'synset': 'roughage.n.01', 'name': 'roughage'}, {'id': 12657, 'synset': 'bran.n.02', 'name': 'bran'}, {'id': 12658, 'synset': 'flour.n.01', 'name': 'flour'}, {'id': 12659, 'synset': 'plain_flour.n.01', 'name': 'plain_flour'}, {'id': 12660, 'synset': 'wheat_flour.n.01', 'name': 'wheat_flour'}, {'id': 12661, 'synset': 'whole_wheat_flour.n.01', 'name': 'whole_wheat_flour'}, {'id': 12662, 'synset': 'soybean_meal.n.01', 'name': 'soybean_meal'}, {'id': 12663, 'synset': 'semolina.n.01', 'name': 'semolina'}, {'id': 12664, 'synset': 'corn_gluten_feed.n.01', 'name': 'corn_gluten_feed'}, {'id': 12665, 'synset': 'nutriment.n.01', 'name': 'nutriment'}, {'id': 12666, 'synset': 'commissariat.n.01', 'name': 'commissariat'}, {'id': 12667, 'synset': 'larder.n.01', 'name': 'larder'}, {'id': 12668, 'synset': 'frozen_food.n.01', 'name': 'frozen_food'}, {'id': 12669, 'synset': 'canned_food.n.01', 'name': 'canned_food'}, {'id': 12670, 'synset': 'canned_meat.n.01', 'name': 'canned_meat'}, {'id': 12671, 'synset': 'spam.n.01', 'name': 'Spam'}, {'id': 12672, 'synset': 'dehydrated_food.n.01', 'name': 'dehydrated_food'}, {'id': 12673, 'synset': 'square_meal.n.01', 'name': 'square_meal'}, {'id': 12674, 'synset': 'meal.n.01', 'name': 'meal'}, {'id': 12675, 'synset': 'potluck.n.01', 'name': 'potluck'}, {'id': 12676, 'synset': 'refection.n.01', 'name': 'refection'}, {'id': 12677, 'synset': 'refreshment.n.01', 'name': 'refreshment'}, {'id': 12678, 'synset': 'breakfast.n.01', 'name': 'breakfast'}, {'id': 12679, 'synset': 'continental_breakfast.n.01', 'name': 'continental_breakfast'}, {'id': 12680, 'synset': 'brunch.n.01', 'name': 'brunch'}, {'id': 12681, 'synset': 'lunch.n.01', 'name': 'lunch'}, {'id': 12682, 'synset': 'business_lunch.n.01', 'name': 'business_lunch'}, {'id': 12683, 'synset': 'high_tea.n.01', 'name': 'high_tea'}, {'id': 12684, 'synset': 'tea.n.02', 'name': 'tea'}, {'id': 12685, 'synset': 'dinner.n.01', 'name': 'dinner'}, {'id': 12686, 'synset': 'supper.n.01', 'name': 'supper'}, {'id': 12687, 'synset': 'buffet.n.02', 'name': 'buffet'}, {'id': 12688, 'synset': 'picnic.n.03', 'name': 'picnic'}, {'id': 12689, 'synset': 'cookout.n.01', 'name': 'cookout'}, {'id': 12690, 'synset': 'barbecue.n.02', 'name': 'barbecue'}, {'id': 12691, 'synset': 'clambake.n.01', 'name': 'clambake'}, {'id': 12692, 'synset': 'fish_fry.n.01', 'name': 'fish_fry'}, {'id': 12693, 'synset': 'bite.n.04', 'name': 'bite'}, {'id': 12694, 'synset': 'nosh.n.01', 'name': 'nosh'}, {'id': 12695, 'synset': 'nosh-up.n.01', 'name': 'nosh-up'}, {'id': 12696, 'synset': "ploughman's_lunch.n.01", 'name': "ploughman's_lunch"}, {'id': 12697, 'synset': 'coffee_break.n.01', 'name': 'coffee_break'}, {'id': 12698, 'synset': 'banquet.n.02', 'name': 'banquet'}, {'id': 12699, 'synset': 'entree.n.01', 'name': 'entree'}, {'id': 12700, 'synset': 'piece_de_resistance.n.02', 'name': 'piece_de_resistance'}, {'id': 12701, 'synset': 'plate.n.08', 'name': 'plate'}, {'id': 12702, 'synset': 'adobo.n.01', 'name': 'adobo'}, {'id': 12703, 'synset': 'side_dish.n.01', 'name': 'side_dish'}, {'id': 12704, 'synset': 'special.n.02', 'name': 'special'}, {'id': 12705, 'synset': 'chicken_casserole.n.01', 'name': 'chicken_casserole'}, {'id': 12706, 'synset': 'chicken_cacciatore.n.01', 'name': 'chicken_cacciatore'}, {'id': 12707, 'synset': 'antipasto.n.01', 'name': 'antipasto'}, {'id': 12708, 'synset': 'appetizer.n.01', 'name': 'appetizer'}, {'id': 12709, 'synset': 'canape.n.01', 'name': 'canape'}, {'id': 12710, 'synset': 'cocktail.n.02', 'name': 'cocktail'}, {'id': 12711, 'synset': 'fruit_cocktail.n.01', 'name': 'fruit_cocktail'}, {'id': 12712, 'synset': 'crab_cocktail.n.01', 'name': 'crab_cocktail'}, {'id': 12713, 'synset': 'shrimp_cocktail.n.01', 'name': 'shrimp_cocktail'}, {'id': 12714, 'synset': "hors_d'oeuvre.n.01", 'name': "hors_d'oeuvre"}, {'id': 12715, 'synset': 'relish.n.02', 'name': 'relish'}, {'id': 12716, 'synset': 'dip.n.04', 'name': 'dip'}, {'id': 12717, 'synset': 'bean_dip.n.01', 'name': 'bean_dip'}, {'id': 12718, 'synset': 'cheese_dip.n.01', 'name': 'cheese_dip'}, {'id': 12719, 'synset': 'clam_dip.n.01', 'name': 'clam_dip'}, {'id': 12720, 'synset': 'guacamole.n.01', 'name': 'guacamole'}, {'id': 12721, 'synset': 'soup_du_jour.n.01', 'name': 'soup_du_jour'}, {'id': 12722, 'synset': 'alphabet_soup.n.02', 'name': 'alphabet_soup'}, {'id': 12723, 'synset': 'consomme.n.01', 'name': 'consomme'}, {'id': 12724, 'synset': 'madrilene.n.01', 'name': 'madrilene'}, {'id': 12725, 'synset': 'bisque.n.01', 'name': 'bisque'}, {'id': 12726, 'synset': 'borsch.n.01', 'name': 'borsch'}, {'id': 12727, 'synset': 'broth.n.02', 'name': 'broth'}, {'id': 12728, 'synset': 'barley_water.n.01', 'name': 'barley_water'}, {'id': 12729, 'synset': 'bouillon.n.01', 'name': 'bouillon'}, {'id': 12730, 'synset': 'beef_broth.n.01', 'name': 'beef_broth'}, {'id': 12731, 'synset': 'chicken_broth.n.01', 'name': 'chicken_broth'}, {'id': 12732, 'synset': 'broth.n.01', 'name': 'broth'}, {'id': 12733, 'synset': 'stock_cube.n.01', 'name': 'stock_cube'}, {'id': 12734, 'synset': 'chicken_soup.n.01', 'name': 'chicken_soup'}, {'id': 12735, 'synset': 'cock-a-leekie.n.01', 'name': 'cock-a-leekie'}, {'id': 12736, 'synset': 'gazpacho.n.01', 'name': 'gazpacho'}, {'id': 12737, 'synset': 'gumbo.n.04', 'name': 'gumbo'}, {'id': 12738, 'synset': 'julienne.n.02', 'name': 'julienne'}, {'id': 12739, 'synset': 'marmite.n.01', 'name': 'marmite'}, {'id': 12740, 'synset': 'mock_turtle_soup.n.01', 'name': 'mock_turtle_soup'}, {'id': 12741, 'synset': 'mulligatawny.n.01', 'name': 'mulligatawny'}, {'id': 12742, 'synset': 'oxtail_soup.n.01', 'name': 'oxtail_soup'}, {'id': 12743, 'synset': 'pea_soup.n.01', 'name': 'pea_soup'}, {'id': 12744, 'synset': 'pepper_pot.n.01', 'name': 'pepper_pot'}, {'id': 12745, 'synset': 'petite_marmite.n.01', 'name': 'petite_marmite'}, {'id': 12746, 'synset': 'potage.n.01', 'name': 'potage'}, {'id': 12747, 'synset': 'pottage.n.01', 'name': 'pottage'}, {'id': 12748, 'synset': 'turtle_soup.n.01', 'name': 'turtle_soup'}, {'id': 12749, 'synset': 'eggdrop_soup.n.01', 'name': 'eggdrop_soup'}, {'id': 12750, 'synset': 'chowder.n.01', 'name': 'chowder'}, {'id': 12751, 'synset': 'corn_chowder.n.01', 'name': 'corn_chowder'}, {'id': 12752, 'synset': 'clam_chowder.n.01', 'name': 'clam_chowder'}, {'id': 12753, 'synset': 'manhattan_clam_chowder.n.01', 'name': 'Manhattan_clam_chowder'}, {'id': 12754, 'synset': 'new_england_clam_chowder.n.01', 'name': 'New_England_clam_chowder'}, {'id': 12755, 'synset': 'fish_chowder.n.01', 'name': 'fish_chowder'}, {'id': 12756, 'synset': 'won_ton.n.02', 'name': 'won_ton'}, {'id': 12757, 'synset': 'split-pea_soup.n.01', 'name': 'split-pea_soup'}, {'id': 12758, 'synset': 'green_pea_soup.n.01', 'name': 'green_pea_soup'}, {'id': 12759, 'synset': 'lentil_soup.n.01', 'name': 'lentil_soup'}, {'id': 12760, 'synset': 'scotch_broth.n.01', 'name': 'Scotch_broth'}, {'id': 12761, 'synset': 'vichyssoise.n.01', 'name': 'vichyssoise'}, {'id': 12762, 'synset': 'bigos.n.01', 'name': 'bigos'}, {'id': 12763, 'synset': 'brunswick_stew.n.01', 'name': 'Brunswick_stew'}, {'id': 12764, 'synset': 'burgoo.n.03', 'name': 'burgoo'}, {'id': 12765, 'synset': 'burgoo.n.02', 'name': 'burgoo'}, {'id': 12766, 'synset': 'olla_podrida.n.01', 'name': 'olla_podrida'}, {'id': 12767, 'synset': 'mulligan_stew.n.01', 'name': 'mulligan_stew'}, {'id': 12768, 'synset': 'purloo.n.01', 'name': 'purloo'}, {'id': 12769, 'synset': 'goulash.n.01', 'name': 'goulash'}, {'id': 12770, 'synset': 'hotchpotch.n.02', 'name': 'hotchpotch'}, {'id': 12771, 'synset': 'hot_pot.n.01', 'name': 'hot_pot'}, {'id': 12772, 'synset': 'beef_goulash.n.01', 'name': 'beef_goulash'}, {'id': 12773, 'synset': 'pork-and-veal_goulash.n.01', 'name': 'pork-and-veal_goulash'}, {'id': 12774, 'synset': 'porkholt.n.01', 'name': 'porkholt'}, {'id': 12775, 'synset': 'irish_stew.n.01', 'name': 'Irish_stew'}, {'id': 12776, 'synset': 'oyster_stew.n.01', 'name': 'oyster_stew'}, {'id': 12777, 'synset': 'lobster_stew.n.01', 'name': 'lobster_stew'}, {'id': 12778, 'synset': 'lobscouse.n.01', 'name': 'lobscouse'}, {'id': 12779, 'synset': 'fish_stew.n.01', 'name': 'fish_stew'}, {'id': 12780, 'synset': 'bouillabaisse.n.01', 'name': 'bouillabaisse'}, {'id': 12781, 'synset': 'matelote.n.01', 'name': 'matelote'}, {'id': 12782, 'synset': 'paella.n.01', 'name': 'paella'}, {'id': 12783, 'synset': 'fricassee.n.01', 'name': 'fricassee'}, {'id': 12784, 'synset': 'chicken_stew.n.01', 'name': 'chicken_stew'}, {'id': 12785, 'synset': 'turkey_stew.n.01', 'name': 'turkey_stew'}, {'id': 12786, 'synset': 'beef_stew.n.01', 'name': 'beef_stew'}, {'id': 12787, 'synset': 'ragout.n.01', 'name': 'ragout'}, {'id': 12788, 'synset': 'ratatouille.n.01', 'name': 'ratatouille'}, {'id': 12789, 'synset': 'salmi.n.01', 'name': 'salmi'}, {'id': 12790, 'synset': 'pot-au-feu.n.01', 'name': 'pot-au-feu'}, {'id': 12791, 'synset': 'slumgullion.n.01', 'name': 'slumgullion'}, {'id': 12792, 'synset': 'smorgasbord.n.02', 'name': 'smorgasbord'}, {'id': 12793, 'synset': 'viand.n.01', 'name': 'viand'}, {'id': 12794, 'synset': 'ready-mix.n.01', 'name': 'ready-mix'}, {'id': 12795, 'synset': 'brownie_mix.n.01', 'name': 'brownie_mix'}, {'id': 12796, 'synset': 'cake_mix.n.01', 'name': 'cake_mix'}, {'id': 12797, 'synset': 'lemonade_mix.n.01', 'name': 'lemonade_mix'}, {'id': 12798, 'synset': 'self-rising_flour.n.01', 'name': 'self-rising_flour'}, {'id': 12799, 'synset': 'choice_morsel.n.01', 'name': 'choice_morsel'}, {'id': 12800, 'synset': 'savory.n.04', 'name': 'savory'}, {'id': 12801, 'synset': "calf's-foot_jelly.n.01", 'name': "calf's-foot_jelly"}, {'id': 12802, 'synset': 'caramel.n.02', 'name': 'caramel'}, {'id': 12803, 'synset': 'lump_sugar.n.01', 'name': 'lump_sugar'}, {'id': 12804, 'synset': 'cane_sugar.n.02', 'name': 'cane_sugar'}, {'id': 12805, 'synset': 'castor_sugar.n.01', 'name': 'castor_sugar'}, {'id': 12806, 'synset': 'powdered_sugar.n.01', 'name': 'powdered_sugar'}, {'id': 12807, 'synset': 'granulated_sugar.n.01', 'name': 'granulated_sugar'}, {'id': 12808, 'synset': 'icing_sugar.n.01', 'name': 'icing_sugar'}, {'id': 12809, 'synset': 'corn_sugar.n.02', 'name': 'corn_sugar'}, {'id': 12810, 'synset': 'brown_sugar.n.01', 'name': 'brown_sugar'}, {'id': 12811, 'synset': 'demerara.n.05', 'name': 'demerara'}, {'id': 12812, 'synset': 'sweet.n.03', 'name': 'sweet'}, {'id': 12813, 'synset': 'confectionery.n.01', 'name': 'confectionery'}, {'id': 12814, 'synset': 'confiture.n.01', 'name': 'confiture'}, {'id': 12815, 'synset': 'sweetmeat.n.01', 'name': 'sweetmeat'}, {'id': 12816, 'synset': 'candy.n.01', 'name': 'candy'}, {'id': 12817, 'synset': 'carob_bar.n.01', 'name': 'carob_bar'}, {'id': 12818, 'synset': 'hardbake.n.01', 'name': 'hardbake'}, {'id': 12819, 'synset': 'hard_candy.n.01', 'name': 'hard_candy'}, {'id': 12820, 'synset': 'barley-sugar.n.01', 'name': 'barley-sugar'}, {'id': 12821, 'synset': 'brandyball.n.01', 'name': 'brandyball'}, {'id': 12822, 'synset': 'jawbreaker.n.01', 'name': 'jawbreaker'}, {'id': 12823, 'synset': 'lemon_drop.n.01', 'name': 'lemon_drop'}, {'id': 12824, 'synset': 'sourball.n.01', 'name': 'sourball'}, {'id': 12825, 'synset': 'patty.n.03', 'name': 'patty'}, {'id': 12826, 'synset': 'peppermint_patty.n.01', 'name': 'peppermint_patty'}, {'id': 12827, 'synset': 'bonbon.n.01', 'name': 'bonbon'}, {'id': 12828, 'synset': 'brittle.n.01', 'name': 'brittle'}, {'id': 12829, 'synset': 'peanut_brittle.n.01', 'name': 'peanut_brittle'}, {'id': 12830, 'synset': 'chewing_gum.n.01', 'name': 'chewing_gum'}, {'id': 12831, 'synset': 'gum_ball.n.01', 'name': 'gum_ball'}, {'id': 12832, 'synset': 'butterscotch.n.01', 'name': 'butterscotch'}, {'id': 12833, 'synset': 'candied_fruit.n.01', 'name': 'candied_fruit'}, {'id': 12834, 'synset': 'candied_apple.n.01', 'name': 'candied_apple'}, {'id': 12835, 'synset': 'crystallized_ginger.n.01', 'name': 'crystallized_ginger'}, {'id': 12836, 'synset': 'grapefruit_peel.n.01', 'name': 'grapefruit_peel'}, {'id': 12837, 'synset': 'lemon_peel.n.02', 'name': 'lemon_peel'}, {'id': 12838, 'synset': 'orange_peel.n.02', 'name': 'orange_peel'}, {'id': 12839, 'synset': 'candied_citrus_peel.n.01', 'name': 'candied_citrus_peel'}, {'id': 12840, 'synset': 'candy_corn.n.01', 'name': 'candy_corn'}, {'id': 12841, 'synset': 'caramel.n.01', 'name': 'caramel'}, {'id': 12842, 'synset': 'center.n.14', 'name': 'center'}, {'id': 12843, 'synset': 'comfit.n.01', 'name': 'comfit'}, {'id': 12844, 'synset': 'cotton_candy.n.01', 'name': 'cotton_candy'}, {'id': 12845, 'synset': 'dragee.n.02', 'name': 'dragee'}, {'id': 12846, 'synset': 'dragee.n.01', 'name': 'dragee'}, {'id': 12847, 'synset': 'fondant.n.01', 'name': 'fondant'}, {'id': 12848, 'synset': 'chocolate_fudge.n.01', 'name': 'chocolate_fudge'}, {'id': 12849, 'synset': 'divinity.n.03', 'name': 'divinity'}, {'id': 12850, 'synset': 'penuche.n.01', 'name': 'penuche'}, {'id': 12851, 'synset': 'gumdrop.n.01', 'name': 'gumdrop'}, {'id': 12852, 'synset': 'jujube.n.03', 'name': 'jujube'}, {'id': 12853, 'synset': 'honey_crisp.n.01', 'name': 'honey_crisp'}, {'id': 12854, 'synset': 'horehound.n.02', 'name': 'horehound'}, {'id': 12855, 'synset': 'peppermint.n.03', 'name': 'peppermint'}, {'id': 12856, 'synset': 'kiss.n.03', 'name': 'kiss'}, {'id': 12857, 'synset': 'molasses_kiss.n.01', 'name': 'molasses_kiss'}, {'id': 12858, 'synset': 'meringue_kiss.n.01', 'name': 'meringue_kiss'}, {'id': 12859, 'synset': 'chocolate_kiss.n.01', 'name': 'chocolate_kiss'}, {'id': 12860, 'synset': 'licorice.n.02', 'name': 'licorice'}, {'id': 12861, 'synset': 'life_saver.n.01', 'name': 'Life_Saver'}, {'id': 12862, 'synset': 'lozenge.n.01', 'name': 'lozenge'}, {'id': 12863, 'synset': 'cachou.n.01', 'name': 'cachou'}, {'id': 12864, 'synset': 'cough_drop.n.01', 'name': 'cough_drop'}, {'id': 12865, 'synset': 'marshmallow.n.01', 'name': 'marshmallow'}, {'id': 12866, 'synset': 'marzipan.n.01', 'name': 'marzipan'}, {'id': 12867, 'synset': 'nougat.n.01', 'name': 'nougat'}, {'id': 12868, 'synset': 'nougat_bar.n.01', 'name': 'nougat_bar'}, {'id': 12869, 'synset': 'nut_bar.n.01', 'name': 'nut_bar'}, {'id': 12870, 'synset': 'peanut_bar.n.01', 'name': 'peanut_bar'}, {'id': 12871, 'synset': 'popcorn_ball.n.01', 'name': 'popcorn_ball'}, {'id': 12872, 'synset': 'praline.n.01', 'name': 'praline'}, {'id': 12873, 'synset': 'rock_candy.n.02', 'name': 'rock_candy'}, {'id': 12874, 'synset': 'rock_candy.n.01', 'name': 'rock_candy'}, {'id': 12875, 'synset': 'sugar_candy.n.01', 'name': 'sugar_candy'}, {'id': 12876, 'synset': 'sugarplum.n.01', 'name': 'sugarplum'}, {'id': 12877, 'synset': 'taffy.n.01', 'name': 'taffy'}, {'id': 12878, 'synset': 'molasses_taffy.n.01', 'name': 'molasses_taffy'}, {'id': 12879, 'synset': 'turkish_delight.n.01', 'name': 'Turkish_Delight'}, {'id': 12880, 'synset': 'dessert.n.01', 'name': 'dessert'}, {'id': 12881, 'synset': 'ambrosia.n.04', 'name': 'ambrosia'}, {'id': 12882, 'synset': 'ambrosia.n.03', 'name': 'ambrosia'}, {'id': 12883, 'synset': 'baked_alaska.n.01', 'name': 'baked_Alaska'}, {'id': 12884, 'synset': 'blancmange.n.01', 'name': 'blancmange'}, {'id': 12885, 'synset': 'charlotte.n.02', 'name': 'charlotte'}, {'id': 12886, 'synset': 'compote.n.01', 'name': 'compote'}, {'id': 12887, 'synset': 'dumpling.n.02', 'name': 'dumpling'}, {'id': 12888, 'synset': 'flan.n.01', 'name': 'flan'}, {'id': 12889, 'synset': 'frozen_dessert.n.01', 'name': 'frozen_dessert'}, {'id': 12890, 'synset': 'junket.n.01', 'name': 'junket'}, {'id': 12891, 'synset': 'mousse.n.02', 'name': 'mousse'}, {'id': 12892, 'synset': 'mousse.n.01', 'name': 'mousse'}, {'id': 12893, 'synset': 'pavlova.n.02', 'name': 'pavlova'}, {'id': 12894, 'synset': 'peach_melba.n.01', 'name': 'peach_melba'}, {'id': 12895, 'synset': 'whip.n.03', 'name': 'whip'}, {'id': 12896, 'synset': 'prune_whip.n.01', 'name': 'prune_whip'}, {'id': 12897, 'synset': 'pudding.n.03', 'name': 'pudding'}, {'id': 12898, 'synset': 'pudding.n.02', 'name': 'pudding'}, {'id': 12899, 'synset': 'syllabub.n.02', 'name': 'syllabub'}, {'id': 12900, 'synset': 'tiramisu.n.01', 'name': 'tiramisu'}, {'id': 12901, 'synset': 'trifle.n.01', 'name': 'trifle'}, {'id': 12902, 'synset': 'tipsy_cake.n.01', 'name': 'tipsy_cake'}, {'id': 12903, 'synset': 'jello.n.01', 'name': 'jello'}, {'id': 12904, 'synset': 'apple_dumpling.n.01', 'name': 'apple_dumpling'}, {'id': 12905, 'synset': 'ice.n.05', 'name': 'ice'}, {'id': 12906, 'synset': 'water_ice.n.02', 'name': 'water_ice'}, {'id': 12907, 'synset': 'ice-cream_cone.n.01', 'name': 'ice-cream_cone'}, {'id': 12908, 'synset': 'chocolate_ice_cream.n.01', 'name': 'chocolate_ice_cream'}, {'id': 12909, 'synset': 'neapolitan_ice_cream.n.01', 'name': 'Neapolitan_ice_cream'}, {'id': 12910, 'synset': 'peach_ice_cream.n.01', 'name': 'peach_ice_cream'}, {'id': 12911, 'synset': 'strawberry_ice_cream.n.01', 'name': 'strawberry_ice_cream'}, {'id': 12912, 'synset': 'tutti-frutti.n.01', 'name': 'tutti-frutti'}, {'id': 12913, 'synset': 'vanilla_ice_cream.n.01', 'name': 'vanilla_ice_cream'}, {'id': 12914, 'synset': 'ice_milk.n.01', 'name': 'ice_milk'}, {'id': 12915, 'synset': 'frozen_yogurt.n.01', 'name': 'frozen_yogurt'}, {'id': 12916, 'synset': 'snowball.n.03', 'name': 'snowball'}, {'id': 12917, 'synset': 'snowball.n.02', 'name': 'snowball'}, {'id': 12918, 'synset': 'parfait.n.01', 'name': 'parfait'}, {'id': 12919, 'synset': 'ice-cream_sundae.n.01', 'name': 'ice-cream_sundae'}, {'id': 12920, 'synset': 'split.n.07', 'name': 'split'}, {'id': 12921, 'synset': 'banana_split.n.01', 'name': 'banana_split'}, {'id': 12922, 'synset': 'frozen_pudding.n.01', 'name': 'frozen_pudding'}, {'id': 12923, 'synset': 'frozen_custard.n.01', 'name': 'frozen_custard'}, {'id': 12924, 'synset': 'flummery.n.01', 'name': 'flummery'}, {'id': 12925, 'synset': 'fish_mousse.n.01', 'name': 'fish_mousse'}, {'id': 12926, 'synset': 'chicken_mousse.n.01', 'name': 'chicken_mousse'}, {'id': 12927, 'synset': 'plum_pudding.n.01', 'name': 'plum_pudding'}, {'id': 12928, 'synset': 'carrot_pudding.n.01', 'name': 'carrot_pudding'}, {'id': 12929, 'synset': 'corn_pudding.n.01', 'name': 'corn_pudding'}, {'id': 12930, 'synset': 'steamed_pudding.n.01', 'name': 'steamed_pudding'}, {'id': 12931, 'synset': 'duff.n.01', 'name': 'duff'}, {'id': 12932, 'synset': 'vanilla_pudding.n.01', 'name': 'vanilla_pudding'}, {'id': 12933, 'synset': 'chocolate_pudding.n.01', 'name': 'chocolate_pudding'}, {'id': 12934, 'synset': 'brown_betty.n.01', 'name': 'brown_Betty'}, {'id': 12935, 'synset': 'nesselrode.n.01', 'name': 'Nesselrode'}, {'id': 12936, 'synset': 'pease_pudding.n.01', 'name': 'pease_pudding'}, {'id': 12937, 'synset': 'custard.n.01', 'name': 'custard'}, {'id': 12938, 'synset': 'creme_caramel.n.01', 'name': 'creme_caramel'}, {'id': 12939, 'synset': 'creme_anglais.n.01', 'name': 'creme_anglais'}, {'id': 12940, 'synset': 'creme_brulee.n.01', 'name': 'creme_brulee'}, {'id': 12941, 'synset': 'fruit_custard.n.01', 'name': 'fruit_custard'}, {'id': 12942, 'synset': 'tapioca.n.01', 'name': 'tapioca'}, {'id': 12943, 'synset': 'tapioca_pudding.n.01', 'name': 'tapioca_pudding'}, {'id': 12944, 'synset': 'roly-poly.n.02', 'name': 'roly-poly'}, {'id': 12945, 'synset': 'suet_pudding.n.01', 'name': 'suet_pudding'}, {'id': 12946, 'synset': 'bavarian_cream.n.01', 'name': 'Bavarian_cream'}, {'id': 12947, 'synset': 'maraschino.n.02', 'name': 'maraschino'}, {'id': 12948, 'synset': 'nonpareil.n.02', 'name': 'nonpareil'}, {'id': 12949, 'synset': 'zabaglione.n.01', 'name': 'zabaglione'}, {'id': 12950, 'synset': 'garnish.n.01', 'name': 'garnish'}, {'id': 12951, 'synset': 'pastry.n.01', 'name': 'pastry'}, {'id': 12952, 'synset': 'turnover.n.02', 'name': 'turnover'}, {'id': 12953, 'synset': 'apple_turnover.n.01', 'name': 'apple_turnover'}, {'id': 12954, 'synset': 'knish.n.01', 'name': 'knish'}, {'id': 12955, 'synset': 'pirogi.n.01', 'name': 'pirogi'}, {'id': 12956, 'synset': 'samosa.n.01', 'name': 'samosa'}, {'id': 12957, 'synset': 'timbale.n.01', 'name': 'timbale'}, {'id': 12958, 'synset': 'puff_paste.n.01', 'name': 'puff_paste'}, {'id': 12959, 'synset': 'phyllo.n.01', 'name': 'phyllo'}, {'id': 12960, 'synset': 'puff_batter.n.01', 'name': 'puff_batter'}, {'id': 12961, 'synset': 'ice-cream_cake.n.01', 'name': 'ice-cream_cake'}, {'id': 12962, 'synset': 'fish_cake.n.01', 'name': 'fish_cake'}, {'id': 12963, 'synset': 'fish_stick.n.01', 'name': 'fish_stick'}, {'id': 12964, 'synset': 'conserve.n.01', 'name': 'conserve'}, {'id': 12965, 'synset': 'apple_butter.n.01', 'name': 'apple_butter'}, {'id': 12966, 'synset': 'chowchow.n.02', 'name': 'chowchow'}, {'id': 12967, 'synset': 'lemon_curd.n.01', 'name': 'lemon_curd'}, {'id': 12968, 'synset': 'strawberry_jam.n.01', 'name': 'strawberry_jam'}, {'id': 12969, 'synset': 'jelly.n.02', 'name': 'jelly'}, {'id': 12970, 'synset': 'apple_jelly.n.01', 'name': 'apple_jelly'}, {'id': 12971, 'synset': 'crabapple_jelly.n.01', 'name': 'crabapple_jelly'}, {'id': 12972, 'synset': 'grape_jelly.n.01', 'name': 'grape_jelly'}, {'id': 12973, 'synset': 'marmalade.n.01', 'name': 'marmalade'}, {'id': 12974, 'synset': 'orange_marmalade.n.01', 'name': 'orange_marmalade'}, {'id': 12975, 'synset': 'gelatin_dessert.n.01', 'name': 'gelatin_dessert'}, {'id': 12976, 'synset': 'buffalo_wing.n.01', 'name': 'buffalo_wing'}, {'id': 12977, 'synset': 'barbecued_wing.n.01', 'name': 'barbecued_wing'}, {'id': 12978, 'synset': 'mess.n.03', 'name': 'mess'}, {'id': 12979, 'synset': 'mince.n.01', 'name': 'mince'}, {'id': 12980, 'synset': 'puree.n.01', 'name': 'puree'}, {'id': 12981, 'synset': 'barbecue.n.01', 'name': 'barbecue'}, {'id': 12982, 'synset': 'biryani.n.01', 'name': 'biryani'}, {'id': 12983, 'synset': 'escalope_de_veau_orloff.n.01', 'name': 'escalope_de_veau_Orloff'}, {'id': 12984, 'synset': 'saute.n.01', 'name': 'saute'}, {'id': 12985, 'synset': 'veal_parmesan.n.01', 'name': 'veal_parmesan'}, {'id': 12986, 'synset': 'veal_cordon_bleu.n.01', 'name': 'veal_cordon_bleu'}, {'id': 12987, 'synset': 'margarine.n.01', 'name': 'margarine'}, {'id': 12988, 'synset': 'mincemeat.n.01', 'name': 'mincemeat'}, {'id': 12989, 'synset': 'stuffing.n.01', 'name': 'stuffing'}, {'id': 12990, 'synset': 'turkey_stuffing.n.01', 'name': 'turkey_stuffing'}, {'id': 12991, 'synset': 'oyster_stuffing.n.01', 'name': 'oyster_stuffing'}, {'id': 12992, 'synset': 'forcemeat.n.01', 'name': 'forcemeat'}, {'id': 12993, 'synset': 'anadama_bread.n.01', 'name': 'anadama_bread'}, {'id': 12994, 'synset': 'bap.n.01', 'name': 'bap'}, {'id': 12995, 'synset': 'barmbrack.n.01', 'name': 'barmbrack'}, {'id': 12996, 'synset': 'breadstick.n.01', 'name': 'breadstick'}, {'id': 12997, 'synset': 'grissino.n.01', 'name': 'grissino'}, {'id': 12998, 'synset': 'brown_bread.n.02', 'name': 'brown_bread'}, {'id': 12999, 'synset': 'tea_bread.n.01', 'name': 'tea_bread'}, {'id': 13000, 'synset': 'caraway_seed_bread.n.01', 'name': 'caraway_seed_bread'}, {'id': 13001, 'synset': 'challah.n.01', 'name': 'challah'}, {'id': 13002, 'synset': 'cinnamon_bread.n.01', 'name': 'cinnamon_bread'}, {'id': 13003, 'synset': 'cracked-wheat_bread.n.01', 'name': 'cracked-wheat_bread'}, {'id': 13004, 'synset': 'dark_bread.n.01', 'name': 'dark_bread'}, {'id': 13005, 'synset': 'english_muffin.n.01', 'name': 'English_muffin'}, {'id': 13006, 'synset': 'flatbread.n.01', 'name': 'flatbread'}, {'id': 13007, 'synset': 'garlic_bread.n.01', 'name': 'garlic_bread'}, {'id': 13008, 'synset': 'gluten_bread.n.01', 'name': 'gluten_bread'}, {'id': 13009, 'synset': 'graham_bread.n.01', 'name': 'graham_bread'}, {'id': 13010, 'synset': 'host.n.09', 'name': 'Host'}, {'id': 13011, 'synset': 'flatbrod.n.01', 'name': 'flatbrod'}, {'id': 13012, 'synset': 'bannock.n.01', 'name': 'bannock'}, {'id': 13013, 'synset': 'chapatti.n.01', 'name': 'chapatti'}, {'id': 13014, 'synset': 'loaf_of_bread.n.01', 'name': 'loaf_of_bread'}, {'id': 13015, 'synset': 'french_loaf.n.01', 'name': 'French_loaf'}, {'id': 13016, 'synset': 'matzo.n.01', 'name': 'matzo'}, {'id': 13017, 'synset': 'nan.n.04', 'name': 'nan'}, {'id': 13018, 'synset': 'onion_bread.n.01', 'name': 'onion_bread'}, {'id': 13019, 'synset': 'raisin_bread.n.01', 'name': 'raisin_bread'}, {'id': 13020, 'synset': 'quick_bread.n.01', 'name': 'quick_bread'}, {'id': 13021, 'synset': 'banana_bread.n.01', 'name': 'banana_bread'}, {'id': 13022, 'synset': 'date_bread.n.01', 'name': 'date_bread'}, {'id': 13023, 'synset': 'date-nut_bread.n.01', 'name': 'date-nut_bread'}, {'id': 13024, 'synset': 'nut_bread.n.01', 'name': 'nut_bread'}, {'id': 13025, 'synset': 'oatcake.n.01', 'name': 'oatcake'}, {'id': 13026, 'synset': 'irish_soda_bread.n.01', 'name': 'Irish_soda_bread'}, {'id': 13027, 'synset': 'skillet_bread.n.01', 'name': 'skillet_bread'}, {'id': 13028, 'synset': 'rye_bread.n.01', 'name': 'rye_bread'}, {'id': 13029, 'synset': 'black_bread.n.01', 'name': 'black_bread'}, {'id': 13030, 'synset': 'jewish_rye_bread.n.01', 'name': 'Jewish_rye_bread'}, {'id': 13031, 'synset': 'limpa.n.01', 'name': 'limpa'}, {'id': 13032, 'synset': 'swedish_rye_bread.n.01', 'name': 'Swedish_rye_bread'}, {'id': 13033, 'synset': 'salt-rising_bread.n.01', 'name': 'salt-rising_bread'}, {'id': 13034, 'synset': 'simnel.n.01', 'name': 'simnel'}, {'id': 13035, 'synset': 'sour_bread.n.01', 'name': 'sour_bread'}, {'id': 13036, 'synset': 'wafer.n.03', 'name': 'wafer'}, {'id': 13037, 'synset': 'white_bread.n.01', 'name': 'white_bread'}, {'id': 13038, 'synset': 'french_bread.n.01', 'name': 'French_bread'}, {'id': 13039, 'synset': 'italian_bread.n.01', 'name': 'Italian_bread'}, {'id': 13040, 'synset': 'corn_cake.n.01', 'name': 'corn_cake'}, {'id': 13041, 'synset': 'skillet_corn_bread.n.01', 'name': 'skillet_corn_bread'}, {'id': 13042, 'synset': 'ashcake.n.01', 'name': 'ashcake'}, {'id': 13043, 'synset': 'hoecake.n.01', 'name': 'hoecake'}, {'id': 13044, 'synset': 'cornpone.n.01', 'name': 'cornpone'}, {'id': 13045, 'synset': 'corn_dab.n.01', 'name': 'corn_dab'}, {'id': 13046, 'synset': 'hush_puppy.n.01', 'name': 'hush_puppy'}, {'id': 13047, 'synset': 'johnnycake.n.01', 'name': 'johnnycake'}, {'id': 13048, 'synset': 'shawnee_cake.n.01', 'name': 'Shawnee_cake'}, {'id': 13049, 'synset': 'spoon_bread.n.01', 'name': 'spoon_bread'}, {'id': 13050, 'synset': 'cinnamon_toast.n.01', 'name': 'cinnamon_toast'}, {'id': 13051, 'synset': 'orange_toast.n.01', 'name': 'orange_toast'}, {'id': 13052, 'synset': 'melba_toast.n.01', 'name': 'Melba_toast'}, {'id': 13053, 'synset': 'zwieback.n.01', 'name': 'zwieback'}, {'id': 13054, 'synset': 'frankfurter_bun.n.01', 'name': 'frankfurter_bun'}, {'id': 13055, 'synset': 'hamburger_bun.n.01', 'name': 'hamburger_bun'}, {'id': 13056, 'synset': 'bran_muffin.n.01', 'name': 'bran_muffin'}, {'id': 13057, 'synset': 'corn_muffin.n.01', 'name': 'corn_muffin'}, {'id': 13058, 'synset': 'yorkshire_pudding.n.01', 'name': 'Yorkshire_pudding'}, {'id': 13059, 'synset': 'popover.n.01', 'name': 'popover'}, {'id': 13060, 'synset': 'scone.n.01', 'name': 'scone'}, {'id': 13061, 'synset': 'drop_scone.n.01', 'name': 'drop_scone'}, {'id': 13062, 'synset': 'cross_bun.n.01', 'name': 'cross_bun'}, {'id': 13063, 'synset': 'brioche.n.01', 'name': 'brioche'}, {'id': 13064, 'synset': 'hard_roll.n.01', 'name': 'hard_roll'}, {'id': 13065, 'synset': 'soft_roll.n.01', 'name': 'soft_roll'}, {'id': 13066, 'synset': 'kaiser_roll.n.01', 'name': 'kaiser_roll'}, {'id': 13067, 'synset': 'parker_house_roll.n.01', 'name': 'Parker_House_roll'}, {'id': 13068, 'synset': 'clover-leaf_roll.n.01', 'name': 'clover-leaf_roll'}, {'id': 13069, 'synset': 'onion_roll.n.01', 'name': 'onion_roll'}, {'id': 13070, 'synset': 'bialy.n.01', 'name': 'bialy'}, {'id': 13071, 'synset': 'sweet_roll.n.01', 'name': 'sweet_roll'}, {'id': 13072, 'synset': 'bear_claw.n.01', 'name': 'bear_claw'}, {'id': 13073, 'synset': 'cinnamon_roll.n.01', 'name': 'cinnamon_roll'}, {'id': 13074, 'synset': 'honey_bun.n.01', 'name': 'honey_bun'}, {'id': 13075, 'synset': 'pinwheel_roll.n.01', 'name': 'pinwheel_roll'}, {'id': 13076, 'synset': 'danish.n.02', 'name': 'danish'}, {'id': 13077, 'synset': 'onion_bagel.n.01', 'name': 'onion_bagel'}, {'id': 13078, 'synset': 'biscuit.n.01', 'name': 'biscuit'}, {'id': 13079, 'synset': 'rolled_biscuit.n.01', 'name': 'rolled_biscuit'}, {'id': 13080, 'synset': 'baking-powder_biscuit.n.01', 'name': 'baking-powder_biscuit'}, {'id': 13081, 'synset': 'buttermilk_biscuit.n.01', 'name': 'buttermilk_biscuit'}, {'id': 13082, 'synset': 'shortcake.n.01', 'name': 'shortcake'}, {'id': 13083, 'synset': 'hardtack.n.01', 'name': 'hardtack'}, {'id': 13084, 'synset': 'saltine.n.01', 'name': 'saltine'}, {'id': 13085, 'synset': 'soda_cracker.n.01', 'name': 'soda_cracker'}, {'id': 13086, 'synset': 'oyster_cracker.n.01', 'name': 'oyster_cracker'}, {'id': 13087, 'synset': 'water_biscuit.n.01', 'name': 'water_biscuit'}, {'id': 13088, 'synset': 'graham_cracker.n.01', 'name': 'graham_cracker'}, {'id': 13089, 'synset': 'soft_pretzel.n.01', 'name': 'soft_pretzel'}, {'id': 13090, 'synset': 'sandwich_plate.n.01', 'name': 'sandwich_plate'}, {'id': 13091, 'synset': 'butty.n.01', 'name': 'butty'}, {'id': 13092, 'synset': 'ham_sandwich.n.01', 'name': 'ham_sandwich'}, {'id': 13093, 'synset': 'chicken_sandwich.n.01', 'name': 'chicken_sandwich'}, {'id': 13094, 'synset': 'club_sandwich.n.01', 'name': 'club_sandwich'}, {'id': 13095, 'synset': 'open-face_sandwich.n.01', 'name': 'open-face_sandwich'}, {'id': 13096, 'synset': 'cheeseburger.n.01', 'name': 'cheeseburger'}, {'id': 13097, 'synset': 'tunaburger.n.01', 'name': 'tunaburger'}, {'id': 13098, 'synset': 'hotdog.n.02', 'name': 'hotdog'}, {'id': 13099, 'synset': 'sloppy_joe.n.01', 'name': 'Sloppy_Joe'}, {'id': 13100, 'synset': 'bomber.n.03', 'name': 'bomber'}, {'id': 13101, 'synset': 'gyro.n.01', 'name': 'gyro'}, {'id': 13102, 'synset': 'bacon-lettuce-tomato_sandwich.n.01', 'name': 'bacon-lettuce-tomato_sandwich'}, {'id': 13103, 'synset': 'reuben.n.02', 'name': 'Reuben'}, {'id': 13104, 'synset': 'western.n.02', 'name': 'western'}, {'id': 13105, 'synset': 'wrap.n.02', 'name': 'wrap'}, {'id': 13106, 'synset': 'spaghetti.n.01', 'name': 'spaghetti'}, {'id': 13107, 'synset': 'hasty_pudding.n.01', 'name': 'hasty_pudding'}, {'id': 13108, 'synset': 'gruel.n.01', 'name': 'gruel'}, {'id': 13109, 'synset': 'congee.n.01', 'name': 'congee'}, {'id': 13110, 'synset': 'skilly.n.01', 'name': 'skilly'}, {'id': 13111, 'synset': 'edible_fruit.n.01', 'name': 'edible_fruit'}, {'id': 13112, 'synset': 'vegetable.n.01', 'name': 'vegetable'}, {'id': 13113, 'synset': 'julienne.n.01', 'name': 'julienne'}, {'id': 13114, 'synset': 'raw_vegetable.n.01', 'name': 'raw_vegetable'}, {'id': 13115, 'synset': 'crudites.n.01', 'name': 'crudites'}, {'id': 13116, 'synset': 'celery_stick.n.01', 'name': 'celery_stick'}, {'id': 13117, 'synset': 'legume.n.03', 'name': 'legume'}, {'id': 13118, 'synset': 'pulse.n.04', 'name': 'pulse'}, {'id': 13119, 'synset': 'potherb.n.01', 'name': 'potherb'}, {'id': 13120, 'synset': 'greens.n.01', 'name': 'greens'}, {'id': 13121, 'synset': 'chop-suey_greens.n.02', 'name': 'chop-suey_greens'}, {'id': 13122, 'synset': 'solanaceous_vegetable.n.01', 'name': 'solanaceous_vegetable'}, {'id': 13123, 'synset': 'root_vegetable.n.01', 'name': 'root_vegetable'}, {'id': 13124, 'synset': 'baked_potato.n.01', 'name': 'baked_potato'}, {'id': 13125, 'synset': 'french_fries.n.01', 'name': 'french_fries'}, {'id': 13126, 'synset': 'home_fries.n.01', 'name': 'home_fries'}, {'id': 13127, 'synset': 'jacket_potato.n.01', 'name': 'jacket_potato'}, {'id': 13128, 'synset': 'potato_skin.n.01', 'name': 'potato_skin'}, {'id': 13129, 'synset': 'uruguay_potato.n.02', 'name': 'Uruguay_potato'}, {'id': 13130, 'synset': 'yam.n.04', 'name': 'yam'}, {'id': 13131, 'synset': 'yam.n.03', 'name': 'yam'}, {'id': 13132, 'synset': 'snack_food.n.01', 'name': 'snack_food'}, {'id': 13133, 'synset': 'corn_chip.n.01', 'name': 'corn_chip'}, {'id': 13134, 'synset': 'tortilla_chip.n.01', 'name': 'tortilla_chip'}, {'id': 13135, 'synset': 'nacho.n.01', 'name': 'nacho'}, {'id': 13136, 'synset': 'pieplant.n.01', 'name': 'pieplant'}, {'id': 13137, 'synset': 'cruciferous_vegetable.n.01', 'name': 'cruciferous_vegetable'}, {'id': 13138, 'synset': 'mustard.n.03', 'name': 'mustard'}, {'id': 13139, 'synset': 'cabbage.n.01', 'name': 'cabbage'}, {'id': 13140, 'synset': 'kale.n.03', 'name': 'kale'}, {'id': 13141, 'synset': 'collards.n.01', 'name': 'collards'}, {'id': 13142, 'synset': 'chinese_cabbage.n.02', 'name': 'Chinese_cabbage'}, {'id': 13143, 'synset': 'bok_choy.n.02', 'name': 'bok_choy'}, {'id': 13144, 'synset': 'head_cabbage.n.02', 'name': 'head_cabbage'}, {'id': 13145, 'synset': 'red_cabbage.n.02', 'name': 'red_cabbage'}, {'id': 13146, 'synset': 'savoy_cabbage.n.02', 'name': 'savoy_cabbage'}, {'id': 13147, 'synset': 'broccoli.n.02', 'name': 'broccoli'}, {'id': 13148, 'synset': 'broccoli_rabe.n.02', 'name': 'broccoli_rabe'}, {'id': 13149, 'synset': 'squash.n.02', 'name': 'squash'}, {'id': 13150, 'synset': 'summer_squash.n.02', 'name': 'summer_squash'}, {'id': 13151, 'synset': 'yellow_squash.n.02', 'name': 'yellow_squash'}, {'id': 13152, 'synset': 'crookneck.n.01', 'name': 'crookneck'}, {'id': 13153, 'synset': 'marrow.n.04', 'name': 'marrow'}, {'id': 13154, 'synset': 'cocozelle.n.02', 'name': 'cocozelle'}, {'id': 13155, 'synset': 'pattypan_squash.n.02', 'name': 'pattypan_squash'}, {'id': 13156, 'synset': 'spaghetti_squash.n.02', 'name': 'spaghetti_squash'}, {'id': 13157, 'synset': 'winter_squash.n.02', 'name': 'winter_squash'}, {'id': 13158, 'synset': 'acorn_squash.n.02', 'name': 'acorn_squash'}, {'id': 13159, 'synset': 'butternut_squash.n.02', 'name': 'butternut_squash'}, {'id': 13160, 'synset': 'hubbard_squash.n.02', 'name': 'hubbard_squash'}, {'id': 13161, 'synset': 'turban_squash.n.02', 'name': 'turban_squash'}, {'id': 13162, 'synset': 'buttercup_squash.n.02', 'name': 'buttercup_squash'}, {'id': 13163, 'synset': 'cushaw.n.02', 'name': 'cushaw'}, {'id': 13164, 'synset': 'winter_crookneck_squash.n.02', 'name': 'winter_crookneck_squash'}, {'id': 13165, 'synset': 'gherkin.n.02', 'name': 'gherkin'}, {'id': 13166, 'synset': 'artichoke_heart.n.01', 'name': 'artichoke_heart'}, {'id': 13167, 'synset': 'jerusalem_artichoke.n.03', 'name': 'Jerusalem_artichoke'}, {'id': 13168, 'synset': 'bamboo_shoot.n.01', 'name': 'bamboo_shoot'}, {'id': 13169, 'synset': 'sprout.n.02', 'name': 'sprout'}, {'id': 13170, 'synset': 'bean_sprout.n.01', 'name': 'bean_sprout'}, {'id': 13171, 'synset': 'alfalfa_sprout.n.01', 'name': 'alfalfa_sprout'}, {'id': 13172, 'synset': 'beet.n.02', 'name': 'beet'}, {'id': 13173, 'synset': 'beet_green.n.01', 'name': 'beet_green'}, {'id': 13174, 'synset': 'sugar_beet.n.02', 'name': 'sugar_beet'}, {'id': 13175, 'synset': 'mangel-wurzel.n.02', 'name': 'mangel-wurzel'}, {'id': 13176, 'synset': 'chard.n.02', 'name': 'chard'}, {'id': 13177, 'synset': 'pepper.n.04', 'name': 'pepper'}, {'id': 13178, 'synset': 'sweet_pepper.n.02', 'name': 'sweet_pepper'}, {'id': 13179, 'synset': 'green_pepper.n.01', 'name': 'green_pepper'}, {'id': 13180, 'synset': 'globe_pepper.n.01', 'name': 'globe_pepper'}, {'id': 13181, 'synset': 'pimento.n.02', 'name': 'pimento'}, {'id': 13182, 'synset': 'hot_pepper.n.02', 'name': 'hot_pepper'}, {'id': 13183, 'synset': 'jalapeno.n.02', 'name': 'jalapeno'}, {'id': 13184, 'synset': 'chipotle.n.01', 'name': 'chipotle'}, {'id': 13185, 'synset': 'cayenne.n.03', 'name': 'cayenne'}, {'id': 13186, 'synset': 'tabasco.n.03', 'name': 'tabasco'}, {'id': 13187, 'synset': 'onion.n.03', 'name': 'onion'}, {'id': 13188, 'synset': 'bermuda_onion.n.01', 'name': 'Bermuda_onion'}, {'id': 13189, 'synset': 'vidalia_onion.n.01', 'name': 'Vidalia_onion'}, {'id': 13190, 'synset': 'spanish_onion.n.01', 'name': 'Spanish_onion'}, {'id': 13191, 'synset': 'purple_onion.n.01', 'name': 'purple_onion'}, {'id': 13192, 'synset': 'leek.n.02', 'name': 'leek'}, {'id': 13193, 'synset': 'shallot.n.03', 'name': 'shallot'}, {'id': 13194, 'synset': 'salad_green.n.01', 'name': 'salad_green'}, {'id': 13195, 'synset': 'lettuce.n.03', 'name': 'lettuce'}, {'id': 13196, 'synset': 'butterhead_lettuce.n.01', 'name': 'butterhead_lettuce'}, {'id': 13197, 'synset': 'buttercrunch.n.01', 'name': 'buttercrunch'}, {'id': 13198, 'synset': 'bibb_lettuce.n.01', 'name': 'Bibb_lettuce'}, {'id': 13199, 'synset': 'boston_lettuce.n.01', 'name': 'Boston_lettuce'}, {'id': 13200, 'synset': 'crisphead_lettuce.n.01', 'name': 'crisphead_lettuce'}, {'id': 13201, 'synset': 'cos.n.02', 'name': 'cos'}, {'id': 13202, 'synset': 'leaf_lettuce.n.02', 'name': 'leaf_lettuce'}, {'id': 13203, 'synset': 'celtuce.n.02', 'name': 'celtuce'}, {'id': 13204, 'synset': 'bean.n.01', 'name': 'bean'}, {'id': 13205, 'synset': 'goa_bean.n.02', 'name': 'goa_bean'}, {'id': 13206, 'synset': 'lentil.n.01', 'name': 'lentil'}, {'id': 13207, 'synset': 'green_pea.n.01', 'name': 'green_pea'}, {'id': 13208, 'synset': 'marrowfat_pea.n.01', 'name': 'marrowfat_pea'}, {'id': 13209, 'synset': 'snow_pea.n.02', 'name': 'snow_pea'}, {'id': 13210, 'synset': 'sugar_snap_pea.n.02', 'name': 'sugar_snap_pea'}, {'id': 13211, 'synset': 'split-pea.n.01', 'name': 'split-pea'}, {'id': 13212, 'synset': 'chickpea.n.03', 'name': 'chickpea'}, {'id': 13213, 'synset': 'cajan_pea.n.02', 'name': 'cajan_pea'}, {'id': 13214, 'synset': 'field_pea.n.03', 'name': 'field_pea'}, {'id': 13215, 'synset': 'mushy_peas.n.01', 'name': 'mushy_peas'}, {'id': 13216, 'synset': 'black-eyed_pea.n.03', 'name': 'black-eyed_pea'}, {'id': 13217, 'synset': 'common_bean.n.02', 'name': 'common_bean'}, {'id': 13218, 'synset': 'kidney_bean.n.02', 'name': 'kidney_bean'}, {'id': 13219, 'synset': 'navy_bean.n.01', 'name': 'navy_bean'}, {'id': 13220, 'synset': 'pinto_bean.n.01', 'name': 'pinto_bean'}, {'id': 13221, 'synset': 'frijole.n.02', 'name': 'frijole'}, {'id': 13222, 'synset': 'black_bean.n.01', 'name': 'black_bean'}, {'id': 13223, 'synset': 'fresh_bean.n.01', 'name': 'fresh_bean'}, {'id': 13224, 'synset': 'flageolet.n.01', 'name': 'flageolet'}, {'id': 13225, 'synset': 'green_bean.n.01', 'name': 'green_bean'}, {'id': 13226, 'synset': 'snap_bean.n.01', 'name': 'snap_bean'}, {'id': 13227, 'synset': 'string_bean.n.01', 'name': 'string_bean'}, {'id': 13228, 'synset': 'kentucky_wonder.n.01', 'name': 'Kentucky_wonder'}, {'id': 13229, 'synset': 'scarlet_runner.n.03', 'name': 'scarlet_runner'}, {'id': 13230, 'synset': 'haricot_vert.n.01', 'name': 'haricot_vert'}, {'id': 13231, 'synset': 'wax_bean.n.02', 'name': 'wax_bean'}, {'id': 13232, 'synset': 'shell_bean.n.02', 'name': 'shell_bean'}, {'id': 13233, 'synset': 'lima_bean.n.03', 'name': 'lima_bean'}, {'id': 13234, 'synset': 'fordhooks.n.01', 'name': 'Fordhooks'}, {'id': 13235, 'synset': 'sieva_bean.n.02', 'name': 'sieva_bean'}, {'id': 13236, 'synset': 'fava_bean.n.02', 'name': 'fava_bean'}, {'id': 13237, 'synset': 'soy.n.04', 'name': 'soy'}, {'id': 13238, 'synset': 'green_soybean.n.01', 'name': 'green_soybean'}, {'id': 13239, 'synset': 'field_soybean.n.01', 'name': 'field_soybean'}, {'id': 13240, 'synset': 'cardoon.n.02', 'name': 'cardoon'}, {'id': 13241, 'synset': 'carrot.n.03', 'name': 'carrot'}, {'id': 13242, 'synset': 'carrot_stick.n.01', 'name': 'carrot_stick'}, {'id': 13243, 'synset': 'celery.n.02', 'name': 'celery'}, {'id': 13244, 'synset': 'pascal_celery.n.01', 'name': 'pascal_celery'}, {'id': 13245, 'synset': 'celeriac.n.02', 'name': 'celeriac'}, {'id': 13246, 'synset': 'chicory.n.04', 'name': 'chicory'}, {'id': 13247, 'synset': 'radicchio.n.01', 'name': 'radicchio'}, {'id': 13248, 'synset': 'coffee_substitute.n.01', 'name': 'coffee_substitute'}, {'id': 13249, 'synset': 'chicory.n.03', 'name': 'chicory'}, {'id': 13250, 'synset': 'postum.n.01', 'name': 'Postum'}, {'id': 13251, 'synset': 'chicory_escarole.n.01', 'name': 'chicory_escarole'}, {'id': 13252, 'synset': 'belgian_endive.n.01', 'name': 'Belgian_endive'}, {'id': 13253, 'synset': 'sweet_corn.n.02', 'name': 'sweet_corn'}, {'id': 13254, 'synset': 'hominy.n.01', 'name': 'hominy'}, {'id': 13255, 'synset': 'lye_hominy.n.01', 'name': 'lye_hominy'}, {'id': 13256, 'synset': 'pearl_hominy.n.01', 'name': 'pearl_hominy'}, {'id': 13257, 'synset': 'popcorn.n.02', 'name': 'popcorn'}, {'id': 13258, 'synset': 'cress.n.02', 'name': 'cress'}, {'id': 13259, 'synset': 'watercress.n.02', 'name': 'watercress'}, {'id': 13260, 'synset': 'garden_cress.n.01', 'name': 'garden_cress'}, {'id': 13261, 'synset': 'winter_cress.n.02', 'name': 'winter_cress'}, {'id': 13262, 'synset': 'dandelion_green.n.02', 'name': 'dandelion_green'}, {'id': 13263, 'synset': 'gumbo.n.03', 'name': 'gumbo'}, {'id': 13264, 'synset': 'kohlrabi.n.02', 'name': 'kohlrabi'}, {'id': 13265, 'synset': "lamb's-quarter.n.01", 'name': "lamb's-quarter"}, {'id': 13266, 'synset': 'wild_spinach.n.03', 'name': 'wild_spinach'}, {'id': 13267, 'synset': 'beefsteak_tomato.n.01', 'name': 'beefsteak_tomato'}, {'id': 13268, 'synset': 'cherry_tomato.n.02', 'name': 'cherry_tomato'}, {'id': 13269, 'synset': 'plum_tomato.n.02', 'name': 'plum_tomato'}, {'id': 13270, 'synset': 'tomatillo.n.03', 'name': 'tomatillo'}, {'id': 13271, 'synset': 'mushroom.n.05', 'name': 'mushroom'}, {'id': 13272, 'synset': 'stuffed_mushroom.n.01', 'name': 'stuffed_mushroom'}, {'id': 13273, 'synset': 'salsify.n.03', 'name': 'salsify'}, {'id': 13274, 'synset': 'oyster_plant.n.03', 'name': 'oyster_plant'}, {'id': 13275, 'synset': 'scorzonera.n.02', 'name': 'scorzonera'}, {'id': 13276, 'synset': 'parsnip.n.03', 'name': 'parsnip'}, {'id': 13277, 'synset': 'radish.n.01', 'name': 'radish'}, {'id': 13278, 'synset': 'turnip.n.02', 'name': 'turnip'}, {'id': 13279, 'synset': 'white_turnip.n.02', 'name': 'white_turnip'}, {'id': 13280, 'synset': 'rutabaga.n.01', 'name': 'rutabaga'}, {'id': 13281, 'synset': 'turnip_greens.n.01', 'name': 'turnip_greens'}, {'id': 13282, 'synset': 'sorrel.n.04', 'name': 'sorrel'}, {'id': 13283, 'synset': 'french_sorrel.n.02', 'name': 'French_sorrel'}, {'id': 13284, 'synset': 'spinach.n.02', 'name': 'spinach'}, {'id': 13285, 'synset': 'taro.n.03', 'name': 'taro'}, {'id': 13286, 'synset': 'truffle.n.02', 'name': 'truffle'}, {'id': 13287, 'synset': 'edible_nut.n.01', 'name': 'edible_nut'}, {'id': 13288, 'synset': 'bunya_bunya.n.02', 'name': 'bunya_bunya'}, {'id': 13289, 'synset': 'peanut.n.04', 'name': 'peanut'}, {'id': 13290, 'synset': 'freestone.n.01', 'name': 'freestone'}, {'id': 13291, 'synset': 'cling.n.01', 'name': 'cling'}, {'id': 13292, 'synset': 'windfall.n.01', 'name': 'windfall'}, {'id': 13293, 'synset': 'crab_apple.n.03', 'name': 'crab_apple'}, {'id': 13294, 'synset': 'eating_apple.n.01', 'name': 'eating_apple'}, {'id': 13295, 'synset': 'baldwin.n.03', 'name': 'Baldwin'}, {'id': 13296, 'synset': 'cortland.n.01', 'name': 'Cortland'}, {'id': 13297, 'synset': "cox's_orange_pippin.n.01", 'name': "Cox's_Orange_Pippin"}, {'id': 13298, 'synset': 'delicious.n.01', 'name': 'Delicious'}, {'id': 13299, 'synset': 'golden_delicious.n.01', 'name': 'Golden_Delicious'}, {'id': 13300, 'synset': 'red_delicious.n.01', 'name': 'Red_Delicious'}, {'id': 13301, 'synset': 'empire.n.05', 'name': 'Empire'}, {'id': 13302, 'synset': "grimes'_golden.n.01", 'name': "Grimes'_golden"}, {'id': 13303, 'synset': 'jonathan.n.01', 'name': 'Jonathan'}, {'id': 13304, 'synset': 'mcintosh.n.01', 'name': 'McIntosh'}, {'id': 13305, 'synset': 'macoun.n.01', 'name': 'Macoun'}, {'id': 13306, 'synset': 'northern_spy.n.01', 'name': 'Northern_Spy'}, {'id': 13307, 'synset': 'pearmain.n.01', 'name': 'Pearmain'}, {'id': 13308, 'synset': 'pippin.n.01', 'name': 'Pippin'}, {'id': 13309, 'synset': 'prima.n.01', 'name': 'Prima'}, {'id': 13310, 'synset': 'stayman.n.01', 'name': 'Stayman'}, {'id': 13311, 'synset': 'winesap.n.01', 'name': 'Winesap'}, {'id': 13312, 'synset': 'stayman_winesap.n.01', 'name': 'Stayman_Winesap'}, {'id': 13313, 'synset': 'cooking_apple.n.01', 'name': 'cooking_apple'}, {'id': 13314, 'synset': "bramley's_seedling.n.01", 'name': "Bramley's_Seedling"}, {'id': 13315, 'synset': 'granny_smith.n.01', 'name': 'Granny_Smith'}, {'id': 13316, 'synset': "lane's_prince_albert.n.01", 'name': "Lane's_Prince_Albert"}, {'id': 13317, 'synset': 'newtown_wonder.n.01', 'name': 'Newtown_Wonder'}, {'id': 13318, 'synset': 'rome_beauty.n.01', 'name': 'Rome_Beauty'}, {'id': 13319, 'synset': 'berry.n.01', 'name': 'berry'}, {'id': 13320, 'synset': 'bilberry.n.03', 'name': 'bilberry'}, {'id': 13321, 'synset': 'huckleberry.n.03', 'name': 'huckleberry'}, {'id': 13322, 'synset': 'wintergreen.n.03', 'name': 'wintergreen'}, {'id': 13323, 'synset': 'cranberry.n.02', 'name': 'cranberry'}, {'id': 13324, 'synset': 'lingonberry.n.02', 'name': 'lingonberry'}, {'id': 13325, 'synset': 'currant.n.01', 'name': 'currant'}, {'id': 13326, 'synset': 'gooseberry.n.02', 'name': 'gooseberry'}, {'id': 13327, 'synset': 'black_currant.n.02', 'name': 'black_currant'}, {'id': 13328, 'synset': 'red_currant.n.02', 'name': 'red_currant'}, {'id': 13329, 'synset': 'boysenberry.n.02', 'name': 'boysenberry'}, {'id': 13330, 'synset': 'dewberry.n.02', 'name': 'dewberry'}, {'id': 13331, 'synset': 'loganberry.n.02', 'name': 'loganberry'}, {'id': 13332, 'synset': 'saskatoon.n.02', 'name': 'saskatoon'}, {'id': 13333, 'synset': 'sugarberry.n.02', 'name': 'sugarberry'}, {'id': 13334, 'synset': 'acerola.n.02', 'name': 'acerola'}, {'id': 13335, 'synset': 'carambola.n.02', 'name': 'carambola'}, {'id': 13336, 'synset': 'ceriman.n.02', 'name': 'ceriman'}, {'id': 13337, 'synset': 'carissa_plum.n.01', 'name': 'carissa_plum'}, {'id': 13338, 'synset': 'citrus.n.01', 'name': 'citrus'}, {'id': 13339, 'synset': 'temple_orange.n.02', 'name': 'temple_orange'}, {'id': 13340, 'synset': 'clementine.n.02', 'name': 'clementine'}, {'id': 13341, 'synset': 'satsuma.n.02', 'name': 'satsuma'}, {'id': 13342, 'synset': 'tangerine.n.02', 'name': 'tangerine'}, {'id': 13343, 'synset': 'tangelo.n.02', 'name': 'tangelo'}, {'id': 13344, 'synset': 'bitter_orange.n.02', 'name': 'bitter_orange'}, {'id': 13345, 'synset': 'sweet_orange.n.01', 'name': 'sweet_orange'}, {'id': 13346, 'synset': 'jaffa_orange.n.01', 'name': 'Jaffa_orange'}, {'id': 13347, 'synset': 'navel_orange.n.01', 'name': 'navel_orange'}, {'id': 13348, 'synset': 'valencia_orange.n.01', 'name': 'Valencia_orange'}, {'id': 13349, 'synset': 'kumquat.n.02', 'name': 'kumquat'}, {'id': 13350, 'synset': 'key_lime.n.01', 'name': 'key_lime'}, {'id': 13351, 'synset': 'grapefruit.n.02', 'name': 'grapefruit'}, {'id': 13352, 'synset': 'pomelo.n.02', 'name': 'pomelo'}, {'id': 13353, 'synset': 'citrange.n.02', 'name': 'citrange'}, {'id': 13354, 'synset': 'citron.n.01', 'name': 'citron'}, {'id': 13355, 'synset': 'jordan_almond.n.02', 'name': 'Jordan_almond'}, {'id': 13356, 'synset': 'nectarine.n.02', 'name': 'nectarine'}, {'id': 13357, 'synset': 'pitahaya.n.02', 'name': 'pitahaya'}, {'id': 13358, 'synset': 'plum.n.02', 'name': 'plum'}, {'id': 13359, 'synset': 'damson.n.01', 'name': 'damson'}, {'id': 13360, 'synset': 'greengage.n.01', 'name': 'greengage'}, {'id': 13361, 'synset': 'beach_plum.n.02', 'name': 'beach_plum'}, {'id': 13362, 'synset': 'sloe.n.03', 'name': 'sloe'}, {'id': 13363, 'synset': 'victoria_plum.n.01', 'name': 'Victoria_plum'}, {'id': 13364, 'synset': 'dried_fruit.n.01', 'name': 'dried_fruit'}, {'id': 13365, 'synset': 'dried_apricot.n.01', 'name': 'dried_apricot'}, {'id': 13366, 'synset': 'raisin.n.01', 'name': 'raisin'}, {'id': 13367, 'synset': 'seedless_raisin.n.01', 'name': 'seedless_raisin'}, {'id': 13368, 'synset': 'seeded_raisin.n.01', 'name': 'seeded_raisin'}, {'id': 13369, 'synset': 'currant.n.03', 'name': 'currant'}, {'id': 13370, 'synset': 'anchovy_pear.n.02', 'name': 'anchovy_pear'}, {'id': 13371, 'synset': 'passion_fruit.n.01', 'name': 'passion_fruit'}, {'id': 13372, 'synset': 'granadilla.n.04', 'name': 'granadilla'}, {'id': 13373, 'synset': 'sweet_calabash.n.02', 'name': 'sweet_calabash'}, {'id': 13374, 'synset': 'bell_apple.n.01', 'name': 'bell_apple'}, {'id': 13375, 'synset': 'breadfruit.n.02', 'name': 'breadfruit'}, {'id': 13376, 'synset': 'jackfruit.n.02', 'name': 'jackfruit'}, {'id': 13377, 'synset': 'cacao_bean.n.01', 'name': 'cacao_bean'}, {'id': 13378, 'synset': 'cocoa.n.02', 'name': 'cocoa'}, {'id': 13379, 'synset': 'canistel.n.02', 'name': 'canistel'}, {'id': 13380, 'synset': 'melon_ball.n.01', 'name': 'melon_ball'}, {'id': 13381, 'synset': 'muskmelon.n.02', 'name': 'muskmelon'}, {'id': 13382, 'synset': 'winter_melon.n.02', 'name': 'winter_melon'}, {'id': 13383, 'synset': 'honeydew.n.01', 'name': 'honeydew'}, {'id': 13384, 'synset': 'persian_melon.n.02', 'name': 'Persian_melon'}, {'id': 13385, 'synset': 'net_melon.n.02', 'name': 'net_melon'}, {'id': 13386, 'synset': 'casaba.n.01', 'name': 'casaba'}, {'id': 13387, 'synset': 'sweet_cherry.n.02', 'name': 'sweet_cherry'}, {'id': 13388, 'synset': 'bing_cherry.n.01', 'name': 'bing_cherry'}, {'id': 13389, 'synset': 'heart_cherry.n.02', 'name': 'heart_cherry'}, {'id': 13390, 'synset': 'blackheart.n.02', 'name': 'blackheart'}, {'id': 13391, 'synset': 'capulin.n.02', 'name': 'capulin'}, {'id': 13392, 'synset': 'sour_cherry.n.03', 'name': 'sour_cherry'}, {'id': 13393, 'synset': 'amarelle.n.02', 'name': 'amarelle'}, {'id': 13394, 'synset': 'morello.n.02', 'name': 'morello'}, {'id': 13395, 'synset': 'cocoa_plum.n.02', 'name': 'cocoa_plum'}, {'id': 13396, 'synset': 'gherkin.n.01', 'name': 'gherkin'}, {'id': 13397, 'synset': 'fox_grape.n.02', 'name': 'fox_grape'}, {'id': 13398, 'synset': 'concord_grape.n.01', 'name': 'Concord_grape'}, {'id': 13399, 'synset': 'catawba.n.02', 'name': 'Catawba'}, {'id': 13400, 'synset': 'muscadine.n.02', 'name': 'muscadine'}, {'id': 13401, 'synset': 'scuppernong.n.01', 'name': 'scuppernong'}, {'id': 13402, 'synset': 'slipskin_grape.n.01', 'name': 'slipskin_grape'}, {'id': 13403, 'synset': 'vinifera_grape.n.02', 'name': 'vinifera_grape'}, {'id': 13404, 'synset': 'emperor.n.02', 'name': 'emperor'}, {'id': 13405, 'synset': 'muscat.n.04', 'name': 'muscat'}, {'id': 13406, 'synset': 'ribier.n.01', 'name': 'ribier'}, {'id': 13407, 'synset': 'sultana.n.01', 'name': 'sultana'}, {'id': 13408, 'synset': 'tokay.n.02', 'name': 'Tokay'}, {'id': 13409, 'synset': 'flame_tokay.n.01', 'name': 'flame_tokay'}, {'id': 13410, 'synset': 'thompson_seedless.n.01', 'name': 'Thompson_Seedless'}, {'id': 13411, 'synset': 'custard_apple.n.02', 'name': 'custard_apple'}, {'id': 13412, 'synset': 'cherimoya.n.02', 'name': 'cherimoya'}, {'id': 13413, 'synset': 'soursop.n.02', 'name': 'soursop'}, {'id': 13414, 'synset': 'sweetsop.n.02', 'name': 'sweetsop'}, {'id': 13415, 'synset': 'ilama.n.02', 'name': 'ilama'}, {'id': 13416, 'synset': 'pond_apple.n.02', 'name': 'pond_apple'}, {'id': 13417, 'synset': 'papaw.n.02', 'name': 'papaw'}, {'id': 13418, 'synset': 'kai_apple.n.01', 'name': 'kai_apple'}, {'id': 13419, 'synset': 'ketembilla.n.02', 'name': 'ketembilla'}, {'id': 13420, 'synset': 'ackee.n.01', 'name': 'ackee'}, {'id': 13421, 'synset': 'durian.n.02', 'name': 'durian'}, {'id': 13422, 'synset': 'feijoa.n.02', 'name': 'feijoa'}, {'id': 13423, 'synset': 'genip.n.02', 'name': 'genip'}, {'id': 13424, 'synset': 'genipap.n.01', 'name': 'genipap'}, {'id': 13425, 'synset': 'loquat.n.02', 'name': 'loquat'}, {'id': 13426, 'synset': 'mangosteen.n.02', 'name': 'mangosteen'}, {'id': 13427, 'synset': 'mango.n.02', 'name': 'mango'}, {'id': 13428, 'synset': 'sapodilla.n.02', 'name': 'sapodilla'}, {'id': 13429, 'synset': 'sapote.n.02', 'name': 'sapote'}, {'id': 13430, 'synset': 'tamarind.n.02', 'name': 'tamarind'}, {'id': 13431, 'synset': 'elderberry.n.02', 'name': 'elderberry'}, {'id': 13432, 'synset': 'guava.n.03', 'name': 'guava'}, {'id': 13433, 'synset': 'mombin.n.02', 'name': 'mombin'}, {'id': 13434, 'synset': 'hog_plum.n.04', 'name': 'hog_plum'}, {'id': 13435, 'synset': 'hog_plum.n.03', 'name': 'hog_plum'}, {'id': 13436, 'synset': 'jaboticaba.n.02', 'name': 'jaboticaba'}, {'id': 13437, 'synset': 'jujube.n.02', 'name': 'jujube'}, {'id': 13438, 'synset': 'litchi.n.02', 'name': 'litchi'}, {'id': 13439, 'synset': 'longanberry.n.02', 'name': 'longanberry'}, {'id': 13440, 'synset': 'mamey.n.02', 'name': 'mamey'}, {'id': 13441, 'synset': 'marang.n.02', 'name': 'marang'}, {'id': 13442, 'synset': 'medlar.n.04', 'name': 'medlar'}, {'id': 13443, 'synset': 'medlar.n.03', 'name': 'medlar'}, {'id': 13444, 'synset': 'mulberry.n.02', 'name': 'mulberry'}, {'id': 13445, 'synset': 'olive.n.04', 'name': 'olive'}, {'id': 13446, 'synset': 'black_olive.n.01', 'name': 'black_olive'}, {'id': 13447, 'synset': 'green_olive.n.01', 'name': 'green_olive'}, {'id': 13448, 'synset': 'bosc.n.01', 'name': 'bosc'}, {'id': 13449, 'synset': 'anjou.n.02', 'name': 'anjou'}, {'id': 13450, 'synset': 'bartlett.n.03', 'name': 'bartlett'}, {'id': 13451, 'synset': 'seckel.n.01', 'name': 'seckel'}, {'id': 13452, 'synset': 'plantain.n.03', 'name': 'plantain'}, {'id': 13453, 'synset': 'plumcot.n.02', 'name': 'plumcot'}, {'id': 13454, 'synset': 'pomegranate.n.02', 'name': 'pomegranate'}, {'id': 13455, 'synset': 'prickly_pear.n.02', 'name': 'prickly_pear'}, {'id': 13456, 'synset': 'barbados_gooseberry.n.02', 'name': 'Barbados_gooseberry'}, {'id': 13457, 'synset': 'quandong.n.04', 'name': 'quandong'}, {'id': 13458, 'synset': 'quandong_nut.n.01', 'name': 'quandong_nut'}, {'id': 13459, 'synset': 'quince.n.02', 'name': 'quince'}, {'id': 13460, 'synset': 'rambutan.n.02', 'name': 'rambutan'}, {'id': 13461, 'synset': 'pulasan.n.02', 'name': 'pulasan'}, {'id': 13462, 'synset': 'rose_apple.n.02', 'name': 'rose_apple'}, {'id': 13463, 'synset': 'sorb.n.01', 'name': 'sorb'}, {'id': 13464, 'synset': 'sour_gourd.n.02', 'name': 'sour_gourd'}, {'id': 13465, 'synset': 'edible_seed.n.01', 'name': 'edible_seed'}, {'id': 13466, 'synset': 'pumpkin_seed.n.01', 'name': 'pumpkin_seed'}, {'id': 13467, 'synset': 'betel_nut.n.01', 'name': 'betel_nut'}, {'id': 13468, 'synset': 'beechnut.n.01', 'name': 'beechnut'}, {'id': 13469, 'synset': 'walnut.n.01', 'name': 'walnut'}, {'id': 13470, 'synset': 'black_walnut.n.02', 'name': 'black_walnut'}, {'id': 13471, 'synset': 'english_walnut.n.02', 'name': 'English_walnut'}, {'id': 13472, 'synset': 'brazil_nut.n.02', 'name': 'brazil_nut'}, {'id': 13473, 'synset': 'butternut.n.02', 'name': 'butternut'}, {'id': 13474, 'synset': 'souari_nut.n.02', 'name': 'souari_nut'}, {'id': 13475, 'synset': 'cashew.n.02', 'name': 'cashew'}, {'id': 13476, 'synset': 'chestnut.n.03', 'name': 'chestnut'}, {'id': 13477, 'synset': 'chincapin.n.01', 'name': 'chincapin'}, {'id': 13478, 'synset': 'hazelnut.n.02', 'name': 'hazelnut'}, {'id': 13479, 'synset': 'coconut_milk.n.02', 'name': 'coconut_milk'}, {'id': 13480, 'synset': 'grugru_nut.n.01', 'name': 'grugru_nut'}, {'id': 13481, 'synset': 'hickory_nut.n.01', 'name': 'hickory_nut'}, {'id': 13482, 'synset': 'cola_extract.n.01', 'name': 'cola_extract'}, {'id': 13483, 'synset': 'macadamia_nut.n.02', 'name': 'macadamia_nut'}, {'id': 13484, 'synset': 'pecan.n.03', 'name': 'pecan'}, {'id': 13485, 'synset': 'pine_nut.n.01', 'name': 'pine_nut'}, {'id': 13486, 'synset': 'pistachio.n.02', 'name': 'pistachio'}, {'id': 13487, 'synset': 'sunflower_seed.n.01', 'name': 'sunflower_seed'}, {'id': 13488, 'synset': 'anchovy_paste.n.01', 'name': 'anchovy_paste'}, {'id': 13489, 'synset': 'rollmops.n.01', 'name': 'rollmops'}, {'id': 13490, 'synset': 'feed.n.01', 'name': 'feed'}, {'id': 13491, 'synset': 'cattle_cake.n.01', 'name': 'cattle_cake'}, {'id': 13492, 'synset': 'creep_feed.n.01', 'name': 'creep_feed'}, {'id': 13493, 'synset': 'fodder.n.02', 'name': 'fodder'}, {'id': 13494, 'synset': 'feed_grain.n.01', 'name': 'feed_grain'}, {'id': 13495, 'synset': 'eatage.n.01', 'name': 'eatage'}, {'id': 13496, 'synset': 'silage.n.01', 'name': 'silage'}, {'id': 13497, 'synset': 'oil_cake.n.01', 'name': 'oil_cake'}, {'id': 13498, 'synset': 'oil_meal.n.01', 'name': 'oil_meal'}, {'id': 13499, 'synset': 'alfalfa.n.02', 'name': 'alfalfa'}, {'id': 13500, 'synset': 'broad_bean.n.03', 'name': 'broad_bean'}, {'id': 13501, 'synset': 'hay.n.01', 'name': 'hay'}, {'id': 13502, 'synset': 'timothy.n.03', 'name': 'timothy'}, {'id': 13503, 'synset': 'stover.n.01', 'name': 'stover'}, {'id': 13504, 'synset': 'grain.n.02', 'name': 'grain'}, {'id': 13505, 'synset': 'grist.n.01', 'name': 'grist'}, {'id': 13506, 'synset': 'groats.n.01', 'name': 'groats'}, {'id': 13507, 'synset': 'millet.n.03', 'name': 'millet'}, {'id': 13508, 'synset': 'barley.n.01', 'name': 'barley'}, {'id': 13509, 'synset': 'pearl_barley.n.01', 'name': 'pearl_barley'}, {'id': 13510, 'synset': 'buckwheat.n.02', 'name': 'buckwheat'}, {'id': 13511, 'synset': 'bulgur.n.01', 'name': 'bulgur'}, {'id': 13512, 'synset': 'wheat.n.02', 'name': 'wheat'}, {'id': 13513, 'synset': 'cracked_wheat.n.01', 'name': 'cracked_wheat'}, {'id': 13514, 'synset': 'stodge.n.01', 'name': 'stodge'}, {'id': 13515, 'synset': 'wheat_germ.n.01', 'name': 'wheat_germ'}, {'id': 13516, 'synset': 'oat.n.02', 'name': 'oat'}, {'id': 13517, 'synset': 'rice.n.01', 'name': 'rice'}, {'id': 13518, 'synset': 'brown_rice.n.01', 'name': 'brown_rice'}, {'id': 13519, 'synset': 'white_rice.n.01', 'name': 'white_rice'}, {'id': 13520, 'synset': 'wild_rice.n.02', 'name': 'wild_rice'}, {'id': 13521, 'synset': 'paddy.n.03', 'name': 'paddy'}, {'id': 13522, 'synset': 'slop.n.01', 'name': 'slop'}, {'id': 13523, 'synset': 'mash.n.02', 'name': 'mash'}, {'id': 13524, 'synset': 'chicken_feed.n.01', 'name': 'chicken_feed'}, {'id': 13525, 'synset': 'cud.n.01', 'name': 'cud'}, {'id': 13526, 'synset': 'bird_feed.n.01', 'name': 'bird_feed'}, {'id': 13527, 'synset': 'petfood.n.01', 'name': 'petfood'}, {'id': 13528, 'synset': 'dog_food.n.01', 'name': 'dog_food'}, {'id': 13529, 'synset': 'cat_food.n.01', 'name': 'cat_food'}, {'id': 13530, 'synset': 'canary_seed.n.01', 'name': 'canary_seed'}, {'id': 13531, 'synset': 'tossed_salad.n.01', 'name': 'tossed_salad'}, {'id': 13532, 'synset': 'green_salad.n.01', 'name': 'green_salad'}, {'id': 13533, 'synset': 'caesar_salad.n.01', 'name': 'Caesar_salad'}, {'id': 13534, 'synset': 'salmagundi.n.02', 'name': 'salmagundi'}, {'id': 13535, 'synset': 'salad_nicoise.n.01', 'name': 'salad_nicoise'}, {'id': 13536, 'synset': 'combination_salad.n.01', 'name': 'combination_salad'}, {'id': 13537, 'synset': "chef's_salad.n.01", 'name': "chef's_salad"}, {'id': 13538, 'synset': 'potato_salad.n.01', 'name': 'potato_salad'}, {'id': 13539, 'synset': 'pasta_salad.n.01', 'name': 'pasta_salad'}, {'id': 13540, 'synset': 'macaroni_salad.n.01', 'name': 'macaroni_salad'}, {'id': 13541, 'synset': 'fruit_salad.n.01', 'name': 'fruit_salad'}, {'id': 13542, 'synset': 'waldorf_salad.n.01', 'name': 'Waldorf_salad'}, {'id': 13543, 'synset': 'crab_louis.n.01', 'name': 'crab_Louis'}, {'id': 13544, 'synset': 'herring_salad.n.01', 'name': 'herring_salad'}, {'id': 13545, 'synset': 'tuna_fish_salad.n.01', 'name': 'tuna_fish_salad'}, {'id': 13546, 'synset': 'chicken_salad.n.01', 'name': 'chicken_salad'}, {'id': 13547, 'synset': 'aspic.n.01', 'name': 'aspic'}, {'id': 13548, 'synset': 'molded_salad.n.01', 'name': 'molded_salad'}, {'id': 13549, 'synset': 'tabbouleh.n.01', 'name': 'tabbouleh'}, {'id': 13550, 'synset': 'ingredient.n.03', 'name': 'ingredient'}, {'id': 13551, 'synset': 'flavorer.n.01', 'name': 'flavorer'}, {'id': 13552, 'synset': 'bouillon_cube.n.01', 'name': 'bouillon_cube'}, {'id': 13553, 'synset': 'herb.n.02', 'name': 'herb'}, {'id': 13554, 'synset': 'fines_herbes.n.01', 'name': 'fines_herbes'}, {'id': 13555, 'synset': 'spice.n.02', 'name': 'spice'}, {'id': 13556, 'synset': 'spearmint_oil.n.01', 'name': 'spearmint_oil'}, {'id': 13557, 'synset': 'lemon_oil.n.01', 'name': 'lemon_oil'}, {'id': 13558, 'synset': 'wintergreen_oil.n.01', 'name': 'wintergreen_oil'}, {'id': 13559, 'synset': 'salt.n.02', 'name': 'salt'}, {'id': 13560, 'synset': 'celery_salt.n.01', 'name': 'celery_salt'}, {'id': 13561, 'synset': 'onion_salt.n.01', 'name': 'onion_salt'}, {'id': 13562, 'synset': 'seasoned_salt.n.01', 'name': 'seasoned_salt'}, {'id': 13563, 'synset': 'sour_salt.n.01', 'name': 'sour_salt'}, {'id': 13564, 'synset': 'five_spice_powder.n.01', 'name': 'five_spice_powder'}, {'id': 13565, 'synset': 'allspice.n.03', 'name': 'allspice'}, {'id': 13566, 'synset': 'cinnamon.n.03', 'name': 'cinnamon'}, {'id': 13567, 'synset': 'stick_cinnamon.n.01', 'name': 'stick_cinnamon'}, {'id': 13568, 'synset': 'clove.n.04', 'name': 'clove'}, {'id': 13569, 'synset': 'cumin.n.02', 'name': 'cumin'}, {'id': 13570, 'synset': 'fennel.n.04', 'name': 'fennel'}, {'id': 13571, 'synset': 'ginger.n.02', 'name': 'ginger'}, {'id': 13572, 'synset': 'mace.n.03', 'name': 'mace'}, {'id': 13573, 'synset': 'nutmeg.n.02', 'name': 'nutmeg'}, {'id': 13574, 'synset': 'black_pepper.n.02', 'name': 'black_pepper'}, {'id': 13575, 'synset': 'white_pepper.n.02', 'name': 'white_pepper'}, {'id': 13576, 'synset': 'sassafras.n.02', 'name': 'sassafras'}, {'id': 13577, 'synset': 'basil.n.03', 'name': 'basil'}, {'id': 13578, 'synset': 'bay_leaf.n.01', 'name': 'bay_leaf'}, {'id': 13579, 'synset': 'borage.n.02', 'name': 'borage'}, {'id': 13580, 'synset': 'hyssop.n.02', 'name': 'hyssop'}, {'id': 13581, 'synset': 'caraway.n.02', 'name': 'caraway'}, {'id': 13582, 'synset': 'chervil.n.02', 'name': 'chervil'}, {'id': 13583, 'synset': 'chives.n.02', 'name': 'chives'}, {'id': 13584, 'synset': 'comfrey.n.02', 'name': 'comfrey'}, {'id': 13585, 'synset': 'coriander.n.03', 'name': 'coriander'}, {'id': 13586, 'synset': 'coriander.n.02', 'name': 'coriander'}, {'id': 13587, 'synset': 'costmary.n.02', 'name': 'costmary'}, {'id': 13588, 'synset': 'fennel.n.03', 'name': 'fennel'}, {'id': 13589, 'synset': 'fennel.n.02', 'name': 'fennel'}, {'id': 13590, 'synset': 'fennel_seed.n.01', 'name': 'fennel_seed'}, {'id': 13591, 'synset': 'fenugreek.n.02', 'name': 'fenugreek'}, {'id': 13592, 'synset': 'clove.n.03', 'name': 'clove'}, {'id': 13593, 'synset': 'garlic_chive.n.02', 'name': 'garlic_chive'}, {'id': 13594, 'synset': 'lemon_balm.n.02', 'name': 'lemon_balm'}, {'id': 13595, 'synset': 'lovage.n.02', 'name': 'lovage'}, {'id': 13596, 'synset': 'marjoram.n.02', 'name': 'marjoram'}, {'id': 13597, 'synset': 'mint.n.04', 'name': 'mint'}, {'id': 13598, 'synset': 'mustard_seed.n.01', 'name': 'mustard_seed'}, {'id': 13599, 'synset': 'mustard.n.02', 'name': 'mustard'}, {'id': 13600, 'synset': 'chinese_mustard.n.02', 'name': 'Chinese_mustard'}, {'id': 13601, 'synset': 'nasturtium.n.03', 'name': 'nasturtium'}, {'id': 13602, 'synset': 'parsley.n.02', 'name': 'parsley'}, {'id': 13603, 'synset': 'salad_burnet.n.02', 'name': 'salad_burnet'}, {'id': 13604, 'synset': 'rosemary.n.02', 'name': 'rosemary'}, {'id': 13605, 'synset': 'rue.n.02', 'name': 'rue'}, {'id': 13606, 'synset': 'sage.n.02', 'name': 'sage'}, {'id': 13607, 'synset': 'clary_sage.n.02', 'name': 'clary_sage'}, {'id': 13608, 'synset': 'savory.n.03', 'name': 'savory'}, {'id': 13609, 'synset': 'summer_savory.n.02', 'name': 'summer_savory'}, {'id': 13610, 'synset': 'winter_savory.n.02', 'name': 'winter_savory'}, {'id': 13611, 'synset': 'sweet_woodruff.n.02', 'name': 'sweet_woodruff'}, {'id': 13612, 'synset': 'sweet_cicely.n.03', 'name': 'sweet_cicely'}, {'id': 13613, 'synset': 'tarragon.n.02', 'name': 'tarragon'}, {'id': 13614, 'synset': 'thyme.n.02', 'name': 'thyme'}, {'id': 13615, 'synset': 'turmeric.n.02', 'name': 'turmeric'}, {'id': 13616, 'synset': 'caper.n.02', 'name': 'caper'}, {'id': 13617, 'synset': 'catsup.n.01', 'name': 'catsup'}, {'id': 13618, 'synset': 'cardamom.n.02', 'name': 'cardamom'}, {'id': 13619, 'synset': 'chili_powder.n.01', 'name': 'chili_powder'}, {'id': 13620, 'synset': 'chili_sauce.n.01', 'name': 'chili_sauce'}, {'id': 13621, 'synset': 'chutney.n.01', 'name': 'chutney'}, {'id': 13622, 'synset': 'steak_sauce.n.01', 'name': 'steak_sauce'}, {'id': 13623, 'synset': 'taco_sauce.n.01', 'name': 'taco_sauce'}, {'id': 13624, 'synset': 'mint_sauce.n.01', 'name': 'mint_sauce'}, {'id': 13625, 'synset': 'cranberry_sauce.n.01', 'name': 'cranberry_sauce'}, {'id': 13626, 'synset': 'curry_powder.n.01', 'name': 'curry_powder'}, {'id': 13627, 'synset': 'curry.n.01', 'name': 'curry'}, {'id': 13628, 'synset': 'lamb_curry.n.01', 'name': 'lamb_curry'}, {'id': 13629, 'synset': 'duck_sauce.n.01', 'name': 'duck_sauce'}, {'id': 13630, 'synset': 'horseradish.n.03', 'name': 'horseradish'}, {'id': 13631, 'synset': 'marinade.n.01', 'name': 'marinade'}, {'id': 13632, 'synset': 'paprika.n.02', 'name': 'paprika'}, {'id': 13633, 'synset': 'spanish_paprika.n.01', 'name': 'Spanish_paprika'}, {'id': 13634, 'synset': 'dill_pickle.n.01', 'name': 'dill_pickle'}, {'id': 13635, 'synset': 'bread_and_butter_pickle.n.01', 'name': 'bread_and_butter_pickle'}, {'id': 13636, 'synset': 'pickle_relish.n.01', 'name': 'pickle_relish'}, {'id': 13637, 'synset': 'piccalilli.n.01', 'name': 'piccalilli'}, {'id': 13638, 'synset': 'sweet_pickle.n.01', 'name': 'sweet_pickle'}, {'id': 13639, 'synset': 'soy_sauce.n.01', 'name': 'soy_sauce'}, {'id': 13640, 'synset': 'tomato_paste.n.01', 'name': 'tomato_paste'}, {'id': 13641, 'synset': 'angelica.n.03', 'name': 'angelica'}, {'id': 13642, 'synset': 'angelica.n.02', 'name': 'angelica'}, {'id': 13643, 'synset': 'almond_extract.n.01', 'name': 'almond_extract'}, {'id': 13644, 'synset': 'anise.n.02', 'name': 'anise'}, {'id': 13645, 'synset': 'chinese_anise.n.02', 'name': 'Chinese_anise'}, {'id': 13646, 'synset': 'juniper_berries.n.01', 'name': 'juniper_berries'}, {'id': 13647, 'synset': 'saffron.n.02', 'name': 'saffron'}, {'id': 13648, 'synset': 'sesame_seed.n.01', 'name': 'sesame_seed'}, {'id': 13649, 'synset': 'caraway_seed.n.01', 'name': 'caraway_seed'}, {'id': 13650, 'synset': 'poppy_seed.n.01', 'name': 'poppy_seed'}, {'id': 13651, 'synset': 'dill.n.02', 'name': 'dill'}, {'id': 13652, 'synset': 'dill_seed.n.01', 'name': 'dill_seed'}, {'id': 13653, 'synset': 'celery_seed.n.01', 'name': 'celery_seed'}, {'id': 13654, 'synset': 'lemon_extract.n.01', 'name': 'lemon_extract'}, {'id': 13655, 'synset': 'monosodium_glutamate.n.01', 'name': 'monosodium_glutamate'}, {'id': 13656, 'synset': 'vanilla_bean.n.01', 'name': 'vanilla_bean'}, {'id': 13657, 'synset': 'cider_vinegar.n.01', 'name': 'cider_vinegar'}, {'id': 13658, 'synset': 'wine_vinegar.n.01', 'name': 'wine_vinegar'}, {'id': 13659, 'synset': 'sauce.n.01', 'name': 'sauce'}, {'id': 13660, 'synset': 'anchovy_sauce.n.01', 'name': 'anchovy_sauce'}, {'id': 13661, 'synset': 'hard_sauce.n.01', 'name': 'hard_sauce'}, {'id': 13662, 'synset': 'horseradish_sauce.n.01', 'name': 'horseradish_sauce'}, {'id': 13663, 'synset': 'bolognese_pasta_sauce.n.01', 'name': 'bolognese_pasta_sauce'}, {'id': 13664, 'synset': 'carbonara.n.01', 'name': 'carbonara'}, {'id': 13665, 'synset': 'tomato_sauce.n.01', 'name': 'tomato_sauce'}, {'id': 13666, 'synset': 'tartare_sauce.n.01', 'name': 'tartare_sauce'}, {'id': 13667, 'synset': 'wine_sauce.n.01', 'name': 'wine_sauce'}, {'id': 13668, 'synset': 'marchand_de_vin.n.01', 'name': 'marchand_de_vin'}, {'id': 13669, 'synset': 'bread_sauce.n.01', 'name': 'bread_sauce'}, {'id': 13670, 'synset': 'plum_sauce.n.01', 'name': 'plum_sauce'}, {'id': 13671, 'synset': 'peach_sauce.n.01', 'name': 'peach_sauce'}, {'id': 13672, 'synset': 'apricot_sauce.n.01', 'name': 'apricot_sauce'}, {'id': 13673, 'synset': 'pesto.n.01', 'name': 'pesto'}, {'id': 13674, 'synset': 'ravigote.n.01', 'name': 'ravigote'}, {'id': 13675, 'synset': 'remoulade_sauce.n.01', 'name': 'remoulade_sauce'}, {'id': 13676, 'synset': 'dressing.n.01', 'name': 'dressing'}, {'id': 13677, 'synset': 'sauce_louis.n.01', 'name': 'sauce_Louis'}, {'id': 13678, 'synset': 'bleu_cheese_dressing.n.01', 'name': 'bleu_cheese_dressing'}, {'id': 13679, 'synset': 'blue_cheese_dressing.n.01', 'name': 'blue_cheese_dressing'}, {'id': 13680, 'synset': 'french_dressing.n.01', 'name': 'French_dressing'}, {'id': 13681, 'synset': 'lorenzo_dressing.n.01', 'name': 'Lorenzo_dressing'}, {'id': 13682, 'synset': 'anchovy_dressing.n.01', 'name': 'anchovy_dressing'}, {'id': 13683, 'synset': 'italian_dressing.n.01', 'name': 'Italian_dressing'}, {'id': 13684, 'synset': 'half-and-half_dressing.n.01', 'name': 'half-and-half_dressing'}, {'id': 13685, 'synset': 'mayonnaise.n.01', 'name': 'mayonnaise'}, {'id': 13686, 'synset': 'green_mayonnaise.n.01', 'name': 'green_mayonnaise'}, {'id': 13687, 'synset': 'aioli.n.01', 'name': 'aioli'}, {'id': 13688, 'synset': 'russian_dressing.n.01', 'name': 'Russian_dressing'}, {'id': 13689, 'synset': 'salad_cream.n.01', 'name': 'salad_cream'}, {'id': 13690, 'synset': 'thousand_island_dressing.n.01', 'name': 'Thousand_Island_dressing'}, {'id': 13691, 'synset': 'barbecue_sauce.n.01', 'name': 'barbecue_sauce'}, {'id': 13692, 'synset': 'hollandaise.n.01', 'name': 'hollandaise'}, {'id': 13693, 'synset': 'bearnaise.n.01', 'name': 'bearnaise'}, {'id': 13694, 'synset': 'bercy.n.01', 'name': 'Bercy'}, {'id': 13695, 'synset': 'bordelaise.n.01', 'name': 'bordelaise'}, {'id': 13696, 'synset': 'bourguignon.n.01', 'name': 'bourguignon'}, {'id': 13697, 'synset': 'brown_sauce.n.02', 'name': 'brown_sauce'}, {'id': 13698, 'synset': 'espagnole.n.01', 'name': 'Espagnole'}, {'id': 13699, 'synset': 'chinese_brown_sauce.n.01', 'name': 'Chinese_brown_sauce'}, {'id': 13700, 'synset': 'blanc.n.01', 'name': 'blanc'}, {'id': 13701, 'synset': 'cheese_sauce.n.01', 'name': 'cheese_sauce'}, {'id': 13702, 'synset': 'chocolate_sauce.n.01', 'name': 'chocolate_sauce'}, {'id': 13703, 'synset': 'hot-fudge_sauce.n.01', 'name': 'hot-fudge_sauce'}, {'id': 13704, 'synset': 'cocktail_sauce.n.01', 'name': 'cocktail_sauce'}, {'id': 13705, 'synset': 'colbert.n.01', 'name': 'Colbert'}, {'id': 13706, 'synset': 'white_sauce.n.01', 'name': 'white_sauce'}, {'id': 13707, 'synset': 'cream_sauce.n.01', 'name': 'cream_sauce'}, {'id': 13708, 'synset': 'mornay_sauce.n.01', 'name': 'Mornay_sauce'}, {'id': 13709, 'synset': 'demiglace.n.01', 'name': 'demiglace'}, {'id': 13710, 'synset': 'gravy.n.02', 'name': 'gravy'}, {'id': 13711, 'synset': 'gravy.n.01', 'name': 'gravy'}, {'id': 13712, 'synset': 'spaghetti_sauce.n.01', 'name': 'spaghetti_sauce'}, {'id': 13713, 'synset': 'marinara.n.01', 'name': 'marinara'}, {'id': 13714, 'synset': 'mole.n.03', 'name': 'mole'}, {'id': 13715, 'synset': "hunter's_sauce.n.01", 'name': "hunter's_sauce"}, {'id': 13716, 'synset': 'mushroom_sauce.n.01', 'name': 'mushroom_sauce'}, {'id': 13717, 'synset': 'mustard_sauce.n.01', 'name': 'mustard_sauce'}, {'id': 13718, 'synset': 'nantua.n.01', 'name': 'Nantua'}, {'id': 13719, 'synset': 'hungarian_sauce.n.01', 'name': 'Hungarian_sauce'}, {'id': 13720, 'synset': 'pepper_sauce.n.01', 'name': 'pepper_sauce'}, {'id': 13721, 'synset': 'roux.n.01', 'name': 'roux'}, {'id': 13722, 'synset': 'smitane.n.01', 'name': 'Smitane'}, {'id': 13723, 'synset': 'soubise.n.01', 'name': 'Soubise'}, {'id': 13724, 'synset': 'lyonnaise_sauce.n.01', 'name': 'Lyonnaise_sauce'}, {'id': 13725, 'synset': 'veloute.n.01', 'name': 'veloute'}, {'id': 13726, 'synset': 'allemande.n.01', 'name': 'allemande'}, {'id': 13727, 'synset': 'caper_sauce.n.01', 'name': 'caper_sauce'}, {'id': 13728, 'synset': 'poulette.n.01', 'name': 'poulette'}, {'id': 13729, 'synset': 'curry_sauce.n.01', 'name': 'curry_sauce'}, {'id': 13730, 'synset': 'worcester_sauce.n.01', 'name': 'Worcester_sauce'}, {'id': 13731, 'synset': 'coconut_milk.n.01', 'name': 'coconut_milk'}, {'id': 13732, 'synset': 'egg_white.n.01', 'name': 'egg_white'}, {'id': 13733, 'synset': 'hard-boiled_egg.n.01', 'name': 'hard-boiled_egg'}, {'id': 13734, 'synset': 'easter_egg.n.02', 'name': 'Easter_egg'}, {'id': 13735, 'synset': 'easter_egg.n.01', 'name': 'Easter_egg'}, {'id': 13736, 'synset': 'chocolate_egg.n.01', 'name': 'chocolate_egg'}, {'id': 13737, 'synset': 'candy_egg.n.01', 'name': 'candy_egg'}, {'id': 13738, 'synset': 'poached_egg.n.01', 'name': 'poached_egg'}, {'id': 13739, 'synset': 'scrambled_eggs.n.01', 'name': 'scrambled_eggs'}, {'id': 13740, 'synset': 'deviled_egg.n.01', 'name': 'deviled_egg'}, {'id': 13741, 'synset': 'shirred_egg.n.01', 'name': 'shirred_egg'}, {'id': 13742, 'synset': 'firm_omelet.n.01', 'name': 'firm_omelet'}, {'id': 13743, 'synset': 'french_omelet.n.01', 'name': 'French_omelet'}, {'id': 13744, 'synset': 'fluffy_omelet.n.01', 'name': 'fluffy_omelet'}, {'id': 13745, 'synset': 'western_omelet.n.01', 'name': 'western_omelet'}, {'id': 13746, 'synset': 'souffle.n.01', 'name': 'souffle'}, {'id': 13747, 'synset': 'fried_egg.n.01', 'name': 'fried_egg'}, {'id': 13748, 'synset': 'dairy_product.n.01', 'name': 'dairy_product'}, {'id': 13749, 'synset': 'milk.n.04', 'name': 'milk'}, {'id': 13750, 'synset': 'sour_milk.n.01', 'name': 'sour_milk'}, {'id': 13751, 'synset': 'formula.n.06', 'name': 'formula'}, {'id': 13752, 'synset': 'pasteurized_milk.n.01', 'name': 'pasteurized_milk'}, {'id': 13753, 'synset': "cows'_milk.n.01", 'name': "cows'_milk"}, {'id': 13754, 'synset': "yak's_milk.n.01", 'name': "yak's_milk"}, {'id': 13755, 'synset': "goats'_milk.n.01", 'name': "goats'_milk"}, {'id': 13756, 'synset': 'acidophilus_milk.n.01', 'name': 'acidophilus_milk'}, {'id': 13757, 'synset': 'raw_milk.n.01', 'name': 'raw_milk'}, {'id': 13758, 'synset': 'scalded_milk.n.01', 'name': 'scalded_milk'}, {'id': 13759, 'synset': 'homogenized_milk.n.01', 'name': 'homogenized_milk'}, {'id': 13760, 'synset': 'certified_milk.n.01', 'name': 'certified_milk'}, {'id': 13761, 'synset': 'powdered_milk.n.01', 'name': 'powdered_milk'}, {'id': 13762, 'synset': 'nonfat_dry_milk.n.01', 'name': 'nonfat_dry_milk'}, {'id': 13763, 'synset': 'evaporated_milk.n.01', 'name': 'evaporated_milk'}, {'id': 13764, 'synset': 'condensed_milk.n.01', 'name': 'condensed_milk'}, {'id': 13765, 'synset': 'skim_milk.n.01', 'name': 'skim_milk'}, {'id': 13766, 'synset': 'semi-skimmed_milk.n.01', 'name': 'semi-skimmed_milk'}, {'id': 13767, 'synset': 'whole_milk.n.01', 'name': 'whole_milk'}, {'id': 13768, 'synset': 'low-fat_milk.n.01', 'name': 'low-fat_milk'}, {'id': 13769, 'synset': 'buttermilk.n.01', 'name': 'buttermilk'}, {'id': 13770, 'synset': 'cream.n.02', 'name': 'cream'}, {'id': 13771, 'synset': 'clotted_cream.n.01', 'name': 'clotted_cream'}, {'id': 13772, 'synset': 'double_creme.n.01', 'name': 'double_creme'}, {'id': 13773, 'synset': 'half-and-half.n.01', 'name': 'half-and-half'}, {'id': 13774, 'synset': 'heavy_cream.n.01', 'name': 'heavy_cream'}, {'id': 13775, 'synset': 'light_cream.n.01', 'name': 'light_cream'}, {'id': 13776, 'synset': 'whipping_cream.n.01', 'name': 'whipping_cream'}, {'id': 13777, 'synset': 'clarified_butter.n.01', 'name': 'clarified_butter'}, {'id': 13778, 'synset': 'ghee.n.01', 'name': 'ghee'}, {'id': 13779, 'synset': 'brown_butter.n.01', 'name': 'brown_butter'}, {'id': 13780, 'synset': 'meuniere_butter.n.01', 'name': 'Meuniere_butter'}, {'id': 13781, 'synset': 'blueberry_yogurt.n.01', 'name': 'blueberry_yogurt'}, {'id': 13782, 'synset': 'raita.n.01', 'name': 'raita'}, {'id': 13783, 'synset': 'whey.n.02', 'name': 'whey'}, {'id': 13784, 'synset': 'curd.n.02', 'name': 'curd'}, {'id': 13785, 'synset': 'curd.n.01', 'name': 'curd'}, {'id': 13786, 'synset': 'clabber.n.01', 'name': 'clabber'}, {'id': 13787, 'synset': 'cheese.n.01', 'name': 'cheese'}, {'id': 13788, 'synset': 'paring.n.02', 'name': 'paring'}, {'id': 13789, 'synset': 'cream_cheese.n.01', 'name': 'cream_cheese'}, {'id': 13790, 'synset': 'double_cream.n.01', 'name': 'double_cream'}, {'id': 13791, 'synset': 'mascarpone.n.01', 'name': 'mascarpone'}, {'id': 13792, 'synset': 'triple_cream.n.01', 'name': 'triple_cream'}, {'id': 13793, 'synset': 'cottage_cheese.n.01', 'name': 'cottage_cheese'}, {'id': 13794, 'synset': 'process_cheese.n.01', 'name': 'process_cheese'}, {'id': 13795, 'synset': 'bleu.n.01', 'name': 'bleu'}, {'id': 13796, 'synset': 'stilton.n.01', 'name': 'Stilton'}, {'id': 13797, 'synset': 'roquefort.n.01', 'name': 'Roquefort'}, {'id': 13798, 'synset': 'gorgonzola.n.01', 'name': 'gorgonzola'}, {'id': 13799, 'synset': 'danish_blue.n.01', 'name': 'Danish_blue'}, {'id': 13800, 'synset': 'bavarian_blue.n.01', 'name': 'Bavarian_blue'}, {'id': 13801, 'synset': 'brie.n.01', 'name': 'Brie'}, {'id': 13802, 'synset': 'brick_cheese.n.01', 'name': 'brick_cheese'}, {'id': 13803, 'synset': 'camembert.n.01', 'name': 'Camembert'}, {'id': 13804, 'synset': 'cheddar.n.02', 'name': 'cheddar'}, {'id': 13805, 'synset': 'rat_cheese.n.01', 'name': 'rat_cheese'}, {'id': 13806, 'synset': 'cheshire_cheese.n.01', 'name': 'Cheshire_cheese'}, {'id': 13807, 'synset': 'double_gloucester.n.01', 'name': 'double_Gloucester'}, {'id': 13808, 'synset': 'edam.n.01', 'name': 'Edam'}, {'id': 13809, 'synset': 'goat_cheese.n.01', 'name': 'goat_cheese'}, {'id': 13810, 'synset': 'gouda.n.01', 'name': 'Gouda'}, {'id': 13811, 'synset': 'grated_cheese.n.01', 'name': 'grated_cheese'}, {'id': 13812, 'synset': 'hand_cheese.n.01', 'name': 'hand_cheese'}, {'id': 13813, 'synset': 'liederkranz.n.01', 'name': 'Liederkranz'}, {'id': 13814, 'synset': 'limburger.n.01', 'name': 'Limburger'}, {'id': 13815, 'synset': 'mozzarella.n.01', 'name': 'mozzarella'}, {'id': 13816, 'synset': 'muenster.n.01', 'name': 'Muenster'}, {'id': 13817, 'synset': 'parmesan.n.01', 'name': 'Parmesan'}, {'id': 13818, 'synset': 'quark_cheese.n.01', 'name': 'quark_cheese'}, {'id': 13819, 'synset': 'ricotta.n.01', 'name': 'ricotta'}, {'id': 13820, 'synset': 'swiss_cheese.n.01', 'name': 'Swiss_cheese'}, {'id': 13821, 'synset': 'emmenthal.n.01', 'name': 'Emmenthal'}, {'id': 13822, 'synset': 'gruyere.n.01', 'name': 'Gruyere'}, {'id': 13823, 'synset': 'sapsago.n.01', 'name': 'sapsago'}, {'id': 13824, 'synset': 'velveeta.n.01', 'name': 'Velveeta'}, {'id': 13825, 'synset': 'nut_butter.n.01', 'name': 'nut_butter'}, {'id': 13826, 'synset': 'marshmallow_fluff.n.01', 'name': 'marshmallow_fluff'}, {'id': 13827, 'synset': 'onion_butter.n.01', 'name': 'onion_butter'}, {'id': 13828, 'synset': 'pimento_butter.n.01', 'name': 'pimento_butter'}, {'id': 13829, 'synset': 'shrimp_butter.n.01', 'name': 'shrimp_butter'}, {'id': 13830, 'synset': 'lobster_butter.n.01', 'name': 'lobster_butter'}, {'id': 13831, 'synset': 'yak_butter.n.01', 'name': 'yak_butter'}, {'id': 13832, 'synset': 'spread.n.05', 'name': 'spread'}, {'id': 13833, 'synset': 'cheese_spread.n.01', 'name': 'cheese_spread'}, {'id': 13834, 'synset': 'anchovy_butter.n.01', 'name': 'anchovy_butter'}, {'id': 13835, 'synset': 'fishpaste.n.01', 'name': 'fishpaste'}, {'id': 13836, 'synset': 'garlic_butter.n.01', 'name': 'garlic_butter'}, {'id': 13837, 'synset': 'miso.n.01', 'name': 'miso'}, {'id': 13838, 'synset': 'wasabi.n.02', 'name': 'wasabi'}, {'id': 13839, 'synset': 'snail_butter.n.01', 'name': 'snail_butter'}, {'id': 13840, 'synset': 'pate.n.01', 'name': 'pate'}, {'id': 13841, 'synset': 'duck_pate.n.01', 'name': 'duck_pate'}, {'id': 13842, 'synset': 'foie_gras.n.01', 'name': 'foie_gras'}, {'id': 13843, 'synset': 'tapenade.n.01', 'name': 'tapenade'}, {'id': 13844, 'synset': 'tahini.n.01', 'name': 'tahini'}, {'id': 13845, 'synset': 'sweetening.n.01', 'name': 'sweetening'}, {'id': 13846, 'synset': 'aspartame.n.01', 'name': 'aspartame'}, {'id': 13847, 'synset': 'saccharin.n.01', 'name': 'saccharin'}, {'id': 13848, 'synset': 'sugar.n.01', 'name': 'sugar'}, {'id': 13849, 'synset': 'syrup.n.01', 'name': 'syrup'}, {'id': 13850, 'synset': 'sugar_syrup.n.01', 'name': 'sugar_syrup'}, {'id': 13851, 'synset': 'molasses.n.01', 'name': 'molasses'}, {'id': 13852, 'synset': 'sorghum.n.03', 'name': 'sorghum'}, {'id': 13853, 'synset': 'treacle.n.01', 'name': 'treacle'}, {'id': 13854, 'synset': 'grenadine.n.01', 'name': 'grenadine'}, {'id': 13855, 'synset': 'maple_syrup.n.01', 'name': 'maple_syrup'}, {'id': 13856, 'synset': 'corn_syrup.n.01', 'name': 'corn_syrup'}, {'id': 13857, 'synset': 'miraculous_food.n.01', 'name': 'miraculous_food'}, {'id': 13858, 'synset': 'dough.n.01', 'name': 'dough'}, {'id': 13859, 'synset': 'bread_dough.n.01', 'name': 'bread_dough'}, {'id': 13860, 'synset': 'pancake_batter.n.01', 'name': 'pancake_batter'}, {'id': 13861, 'synset': 'fritter_batter.n.01', 'name': 'fritter_batter'}, {'id': 13862, 'synset': 'coq_au_vin.n.01', 'name': 'coq_au_vin'}, {'id': 13863, 'synset': 'chicken_provencale.n.01', 'name': 'chicken_provencale'}, {'id': 13864, 'synset': 'chicken_and_rice.n.01', 'name': 'chicken_and_rice'}, {'id': 13865, 'synset': 'moo_goo_gai_pan.n.01', 'name': 'moo_goo_gai_pan'}, {'id': 13866, 'synset': 'arroz_con_pollo.n.01', 'name': 'arroz_con_pollo'}, {'id': 13867, 'synset': 'bacon_and_eggs.n.02', 'name': 'bacon_and_eggs'}, {'id': 13868, 'synset': 'barbecued_spareribs.n.01', 'name': 'barbecued_spareribs'}, {'id': 13869, 'synset': 'beef_bourguignonne.n.01', 'name': 'beef_Bourguignonne'}, {'id': 13870, 'synset': 'beef_wellington.n.01', 'name': 'beef_Wellington'}, {'id': 13871, 'synset': 'bitok.n.01', 'name': 'bitok'}, {'id': 13872, 'synset': 'boiled_dinner.n.01', 'name': 'boiled_dinner'}, {'id': 13873, 'synset': 'boston_baked_beans.n.01', 'name': 'Boston_baked_beans'}, {'id': 13874, 'synset': 'bubble_and_squeak.n.01', 'name': 'bubble_and_squeak'}, {'id': 13875, 'synset': 'pasta.n.01', 'name': 'pasta'}, {'id': 13876, 'synset': 'cannelloni.n.01', 'name': 'cannelloni'}, {'id': 13877, 'synset': 'carbonnade_flamande.n.01', 'name': 'carbonnade_flamande'}, {'id': 13878, 'synset': 'cheese_souffle.n.01', 'name': 'cheese_souffle'}, {'id': 13879, 'synset': 'chicken_marengo.n.01', 'name': 'chicken_Marengo'}, {'id': 13880, 'synset': 'chicken_cordon_bleu.n.01', 'name': 'chicken_cordon_bleu'}, {'id': 13881, 'synset': 'maryland_chicken.n.01', 'name': 'Maryland_chicken'}, {'id': 13882, 'synset': 'chicken_paprika.n.01', 'name': 'chicken_paprika'}, {'id': 13883, 'synset': 'chicken_tetrazzini.n.01', 'name': 'chicken_Tetrazzini'}, {'id': 13884, 'synset': 'tetrazzini.n.01', 'name': 'Tetrazzini'}, {'id': 13885, 'synset': 'chicken_kiev.n.01', 'name': 'chicken_Kiev'}, {'id': 13886, 'synset': 'chili.n.01', 'name': 'chili'}, {'id': 13887, 'synset': 'chili_dog.n.01', 'name': 'chili_dog'}, {'id': 13888, 'synset': 'chop_suey.n.01', 'name': 'chop_suey'}, {'id': 13889, 'synset': 'chow_mein.n.01', 'name': 'chow_mein'}, {'id': 13890, 'synset': 'codfish_ball.n.01', 'name': 'codfish_ball'}, {'id': 13891, 'synset': 'coquille.n.01', 'name': 'coquille'}, {'id': 13892, 'synset': 'coquilles_saint-jacques.n.01', 'name': 'coquilles_Saint-Jacques'}, {'id': 13893, 'synset': 'croquette.n.01', 'name': 'croquette'}, {'id': 13894, 'synset': 'cottage_pie.n.01', 'name': 'cottage_pie'}, {'id': 13895, 'synset': 'rissole.n.01', 'name': 'rissole'}, {'id': 13896, 'synset': 'dolmas.n.01', 'name': 'dolmas'}, {'id': 13897, 'synset': 'egg_foo_yong.n.01', 'name': 'egg_foo_yong'}, {'id': 13898, 'synset': 'eggs_benedict.n.01', 'name': 'eggs_Benedict'}, {'id': 13899, 'synset': 'enchilada.n.01', 'name': 'enchilada'}, {'id': 13900, 'synset': 'falafel.n.01', 'name': 'falafel'}, {'id': 13901, 'synset': 'fish_and_chips.n.01', 'name': 'fish_and_chips'}, {'id': 13902, 'synset': 'fondue.n.02', 'name': 'fondue'}, {'id': 13903, 'synset': 'cheese_fondue.n.01', 'name': 'cheese_fondue'}, {'id': 13904, 'synset': 'chocolate_fondue.n.01', 'name': 'chocolate_fondue'}, {'id': 13905, 'synset': 'fondue.n.01', 'name': 'fondue'}, {'id': 13906, 'synset': 'beef_fondue.n.01', 'name': 'beef_fondue'}, {'id': 13907, 'synset': 'fried_rice.n.01', 'name': 'fried_rice'}, {'id': 13908, 'synset': 'frittata.n.01', 'name': 'frittata'}, {'id': 13909, 'synset': 'frog_legs.n.01', 'name': 'frog_legs'}, {'id': 13910, 'synset': 'galantine.n.01', 'name': 'galantine'}, {'id': 13911, 'synset': 'gefilte_fish.n.01', 'name': 'gefilte_fish'}, {'id': 13912, 'synset': 'haggis.n.01', 'name': 'haggis'}, {'id': 13913, 'synset': 'ham_and_eggs.n.01', 'name': 'ham_and_eggs'}, {'id': 13914, 'synset': 'hash.n.01', 'name': 'hash'}, {'id': 13915, 'synset': 'corned_beef_hash.n.01', 'name': 'corned_beef_hash'}, {'id': 13916, 'synset': 'jambalaya.n.01', 'name': 'jambalaya'}, {'id': 13917, 'synset': 'kabob.n.01', 'name': 'kabob'}, {'id': 13918, 'synset': 'kedgeree.n.01', 'name': 'kedgeree'}, {'id': 13919, 'synset': 'souvlaki.n.01', 'name': 'souvlaki'}, {'id': 13920, 'synset': 'seafood_newburg.n.01', 'name': 'seafood_Newburg'}, {'id': 13921, 'synset': 'lobster_newburg.n.01', 'name': 'lobster_Newburg'}, {'id': 13922, 'synset': 'shrimp_newburg.n.01', 'name': 'shrimp_Newburg'}, {'id': 13923, 'synset': 'newburg_sauce.n.01', 'name': 'Newburg_sauce'}, {'id': 13924, 'synset': 'lobster_thermidor.n.01', 'name': 'lobster_thermidor'}, {'id': 13925, 'synset': 'lutefisk.n.01', 'name': 'lutefisk'}, {'id': 13926, 'synset': 'macaroni_and_cheese.n.01', 'name': 'macaroni_and_cheese'}, {'id': 13927, 'synset': 'macedoine.n.01', 'name': 'macedoine'}, {'id': 13928, 'synset': 'porcupine_ball.n.01', 'name': 'porcupine_ball'}, {'id': 13929, 'synset': 'swedish_meatball.n.01', 'name': 'Swedish_meatball'}, {'id': 13930, 'synset': 'meat_loaf.n.01', 'name': 'meat_loaf'}, {'id': 13931, 'synset': 'moussaka.n.01', 'name': 'moussaka'}, {'id': 13932, 'synset': 'osso_buco.n.01', 'name': 'osso_buco'}, {'id': 13933, 'synset': 'marrow.n.03', 'name': 'marrow'}, {'id': 13934, 'synset': 'pheasant_under_glass.n.01', 'name': 'pheasant_under_glass'}, {'id': 13935, 'synset': 'pigs_in_blankets.n.01', 'name': 'pigs_in_blankets'}, {'id': 13936, 'synset': 'pilaf.n.01', 'name': 'pilaf'}, {'id': 13937, 'synset': 'bulgur_pilaf.n.01', 'name': 'bulgur_pilaf'}, {'id': 13938, 'synset': 'sausage_pizza.n.01', 'name': 'sausage_pizza'}, {'id': 13939, 'synset': 'pepperoni_pizza.n.01', 'name': 'pepperoni_pizza'}, {'id': 13940, 'synset': 'cheese_pizza.n.01', 'name': 'cheese_pizza'}, {'id': 13941, 'synset': 'anchovy_pizza.n.01', 'name': 'anchovy_pizza'}, {'id': 13942, 'synset': 'sicilian_pizza.n.01', 'name': 'Sicilian_pizza'}, {'id': 13943, 'synset': 'poi.n.01', 'name': 'poi'}, {'id': 13944, 'synset': 'pork_and_beans.n.01', 'name': 'pork_and_beans'}, {'id': 13945, 'synset': 'porridge.n.01', 'name': 'porridge'}, {'id': 13946, 'synset': 'oatmeal.n.01', 'name': 'oatmeal'}, {'id': 13947, 'synset': 'loblolly.n.01', 'name': 'loblolly'}, {'id': 13948, 'synset': 'potpie.n.01', 'name': 'potpie'}, {'id': 13949, 'synset': 'rijsttaffel.n.01', 'name': 'rijsttaffel'}, {'id': 13950, 'synset': 'risotto.n.01', 'name': 'risotto'}, {'id': 13951, 'synset': 'roulade.n.01', 'name': 'roulade'}, {'id': 13952, 'synset': 'fish_loaf.n.01', 'name': 'fish_loaf'}, {'id': 13953, 'synset': 'salmon_loaf.n.01', 'name': 'salmon_loaf'}, {'id': 13954, 'synset': 'salisbury_steak.n.01', 'name': 'Salisbury_steak'}, {'id': 13955, 'synset': 'sauerbraten.n.01', 'name': 'sauerbraten'}, {'id': 13956, 'synset': 'sauerkraut.n.01', 'name': 'sauerkraut'}, {'id': 13957, 'synset': 'scallopine.n.01', 'name': 'scallopine'}, {'id': 13958, 'synset': 'veal_scallopini.n.01', 'name': 'veal_scallopini'}, {'id': 13959, 'synset': 'scampi.n.01', 'name': 'scampi'}, {'id': 13960, 'synset': 'scotch_egg.n.01', 'name': 'Scotch_egg'}, {'id': 13961, 'synset': 'scotch_woodcock.n.01', 'name': 'Scotch_woodcock'}, {'id': 13962, 'synset': 'scrapple.n.01', 'name': 'scrapple'}, {'id': 13963, 'synset': 'spaghetti_and_meatballs.n.01', 'name': 'spaghetti_and_meatballs'}, {'id': 13964, 'synset': 'spanish_rice.n.01', 'name': 'Spanish_rice'}, {'id': 13965, 'synset': 'steak_tartare.n.01', 'name': 'steak_tartare'}, {'id': 13966, 'synset': 'pepper_steak.n.02', 'name': 'pepper_steak'}, {'id': 13967, 'synset': 'steak_au_poivre.n.01', 'name': 'steak_au_poivre'}, {'id': 13968, 'synset': 'beef_stroganoff.n.01', 'name': 'beef_Stroganoff'}, {'id': 13969, 'synset': 'stuffed_cabbage.n.01', 'name': 'stuffed_cabbage'}, {'id': 13970, 'synset': 'kishke.n.01', 'name': 'kishke'}, {'id': 13971, 'synset': 'stuffed_peppers.n.01', 'name': 'stuffed_peppers'}, {'id': 13972, 'synset': 'stuffed_tomato.n.02', 'name': 'stuffed_tomato'}, {'id': 13973, 'synset': 'stuffed_tomato.n.01', 'name': 'stuffed_tomato'}, {'id': 13974, 'synset': 'succotash.n.01', 'name': 'succotash'}, {'id': 13975, 'synset': 'sukiyaki.n.01', 'name': 'sukiyaki'}, {'id': 13976, 'synset': 'sashimi.n.01', 'name': 'sashimi'}, {'id': 13977, 'synset': 'swiss_steak.n.01', 'name': 'Swiss_steak'}, {'id': 13978, 'synset': 'tamale.n.02', 'name': 'tamale'}, {'id': 13979, 'synset': 'tamale_pie.n.01', 'name': 'tamale_pie'}, {'id': 13980, 'synset': 'tempura.n.01', 'name': 'tempura'}, {'id': 13981, 'synset': 'teriyaki.n.01', 'name': 'teriyaki'}, {'id': 13982, 'synset': 'terrine.n.01', 'name': 'terrine'}, {'id': 13983, 'synset': 'welsh_rarebit.n.01', 'name': 'Welsh_rarebit'}, {'id': 13984, 'synset': 'schnitzel.n.01', 'name': 'schnitzel'}, {'id': 13985, 'synset': 'chicken_taco.n.01', 'name': 'chicken_taco'}, {'id': 13986, 'synset': 'beef_burrito.n.01', 'name': 'beef_burrito'}, {'id': 13987, 'synset': 'tostada.n.01', 'name': 'tostada'}, {'id': 13988, 'synset': 'bean_tostada.n.01', 'name': 'bean_tostada'}, {'id': 13989, 'synset': 'refried_beans.n.01', 'name': 'refried_beans'}, {'id': 13990, 'synset': 'beverage.n.01', 'name': 'beverage'}, {'id': 13991, 'synset': 'wish-wash.n.01', 'name': 'wish-wash'}, {'id': 13992, 'synset': 'concoction.n.01', 'name': 'concoction'}, {'id': 13993, 'synset': 'mix.n.01', 'name': 'mix'}, {'id': 13994, 'synset': 'filling.n.03', 'name': 'filling'}, {'id': 13995, 'synset': 'lekvar.n.01', 'name': 'lekvar'}, {'id': 13996, 'synset': 'potion.n.01', 'name': 'potion'}, {'id': 13997, 'synset': 'elixir.n.03', 'name': 'elixir'}, {'id': 13998, 'synset': 'elixir_of_life.n.01', 'name': 'elixir_of_life'}, {'id': 13999, 'synset': 'philter.n.01', 'name': 'philter'}, {'id': 14000, 'synset': 'proof_spirit.n.01', 'name': 'proof_spirit'}, {'id': 14001, 'synset': 'home_brew.n.01', 'name': 'home_brew'}, {'id': 14002, 'synset': 'hooch.n.01', 'name': 'hooch'}, {'id': 14003, 'synset': 'kava.n.01', 'name': 'kava'}, {'id': 14004, 'synset': 'aperitif.n.01', 'name': 'aperitif'}, {'id': 14005, 'synset': 'brew.n.01', 'name': 'brew'}, {'id': 14006, 'synset': 'beer.n.01', 'name': 'beer'}, {'id': 14007, 'synset': 'draft_beer.n.01', 'name': 'draft_beer'}, {'id': 14008, 'synset': 'suds.n.02', 'name': 'suds'}, {'id': 14009, 'synset': 'munich_beer.n.01', 'name': 'Munich_beer'}, {'id': 14010, 'synset': 'bock.n.01', 'name': 'bock'}, {'id': 14011, 'synset': 'lager.n.02', 'name': 'lager'}, {'id': 14012, 'synset': 'light_beer.n.01', 'name': 'light_beer'}, {'id': 14013, 'synset': 'oktoberfest.n.01', 'name': 'Oktoberfest'}, {'id': 14014, 'synset': 'pilsner.n.01', 'name': 'Pilsner'}, {'id': 14015, 'synset': 'shebeen.n.01', 'name': 'shebeen'}, {'id': 14016, 'synset': 'weissbier.n.01', 'name': 'Weissbier'}, {'id': 14017, 'synset': 'weizenbock.n.01', 'name': 'Weizenbock'}, {'id': 14018, 'synset': 'malt.n.03', 'name': 'malt'}, {'id': 14019, 'synset': 'wort.n.02', 'name': 'wort'}, {'id': 14020, 'synset': 'malt.n.02', 'name': 'malt'}, {'id': 14021, 'synset': 'ale.n.01', 'name': 'ale'}, {'id': 14022, 'synset': 'bitter.n.01', 'name': 'bitter'}, {'id': 14023, 'synset': 'burton.n.03', 'name': 'Burton'}, {'id': 14024, 'synset': 'pale_ale.n.01', 'name': 'pale_ale'}, {'id': 14025, 'synset': 'porter.n.07', 'name': 'porter'}, {'id': 14026, 'synset': 'stout.n.01', 'name': 'stout'}, {'id': 14027, 'synset': 'guinness.n.02', 'name': 'Guinness'}, {'id': 14028, 'synset': 'kvass.n.01', 'name': 'kvass'}, {'id': 14029, 'synset': 'mead.n.03', 'name': 'mead'}, {'id': 14030, 'synset': 'metheglin.n.01', 'name': 'metheglin'}, {'id': 14031, 'synset': 'hydromel.n.01', 'name': 'hydromel'}, {'id': 14032, 'synset': 'oenomel.n.01', 'name': 'oenomel'}, {'id': 14033, 'synset': 'near_beer.n.01', 'name': 'near_beer'}, {'id': 14034, 'synset': 'ginger_beer.n.01', 'name': 'ginger_beer'}, {'id': 14035, 'synset': 'sake.n.02', 'name': 'sake'}, {'id': 14036, 'synset': 'wine.n.01', 'name': 'wine'}, {'id': 14037, 'synset': 'vintage.n.01', 'name': 'vintage'}, {'id': 14038, 'synset': 'red_wine.n.01', 'name': 'red_wine'}, {'id': 14039, 'synset': 'white_wine.n.01', 'name': 'white_wine'}, {'id': 14040, 'synset': 'blush_wine.n.01', 'name': 'blush_wine'}, {'id': 14041, 'synset': 'altar_wine.n.01', 'name': 'altar_wine'}, {'id': 14042, 'synset': 'sparkling_wine.n.01', 'name': 'sparkling_wine'}, {'id': 14043, 'synset': 'champagne.n.01', 'name': 'champagne'}, {'id': 14044, 'synset': 'cold_duck.n.01', 'name': 'cold_duck'}, {'id': 14045, 'synset': 'burgundy.n.02', 'name': 'Burgundy'}, {'id': 14046, 'synset': 'beaujolais.n.01', 'name': 'Beaujolais'}, {'id': 14047, 'synset': 'medoc.n.01', 'name': 'Medoc'}, {'id': 14048, 'synset': 'canary_wine.n.01', 'name': 'Canary_wine'}, {'id': 14049, 'synset': 'chablis.n.02', 'name': 'Chablis'}, {'id': 14050, 'synset': 'montrachet.n.01', 'name': 'Montrachet'}, {'id': 14051, 'synset': 'chardonnay.n.02', 'name': 'Chardonnay'}, {'id': 14052, 'synset': 'pinot_noir.n.02', 'name': 'Pinot_noir'}, {'id': 14053, 'synset': 'pinot_blanc.n.02', 'name': 'Pinot_blanc'}, {'id': 14054, 'synset': 'bordeaux.n.02', 'name': 'Bordeaux'}, {'id': 14055, 'synset': 'claret.n.02', 'name': 'claret'}, {'id': 14056, 'synset': 'chianti.n.01', 'name': 'Chianti'}, {'id': 14057, 'synset': 'cabernet.n.01', 'name': 'Cabernet'}, {'id': 14058, 'synset': 'merlot.n.02', 'name': 'Merlot'}, {'id': 14059, 'synset': 'sauvignon_blanc.n.02', 'name': 'Sauvignon_blanc'}, {'id': 14060, 'synset': 'california_wine.n.01', 'name': 'California_wine'}, {'id': 14061, 'synset': 'cotes_de_provence.n.01', 'name': 'Cotes_de_Provence'}, {'id': 14062, 'synset': 'dessert_wine.n.01', 'name': 'dessert_wine'}, {'id': 14063, 'synset': 'dubonnet.n.01', 'name': 'Dubonnet'}, {'id': 14064, 'synset': 'jug_wine.n.01', 'name': 'jug_wine'}, {'id': 14065, 'synset': 'macon.n.02', 'name': 'macon'}, {'id': 14066, 'synset': 'moselle.n.01', 'name': 'Moselle'}, {'id': 14067, 'synset': 'muscadet.n.02', 'name': 'Muscadet'}, {'id': 14068, 'synset': 'plonk.n.01', 'name': 'plonk'}, {'id': 14069, 'synset': 'retsina.n.01', 'name': 'retsina'}, {'id': 14070, 'synset': 'rhine_wine.n.01', 'name': 'Rhine_wine'}, {'id': 14071, 'synset': 'riesling.n.02', 'name': 'Riesling'}, {'id': 14072, 'synset': 'liebfraumilch.n.01', 'name': 'liebfraumilch'}, {'id': 14073, 'synset': 'rhone_wine.n.01', 'name': 'Rhone_wine'}, {'id': 14074, 'synset': 'rioja.n.01', 'name': 'Rioja'}, {'id': 14075, 'synset': 'sack.n.04', 'name': 'sack'}, {'id': 14076, 'synset': 'saint_emilion.n.01', 'name': 'Saint_Emilion'}, {'id': 14077, 'synset': 'soave.n.01', 'name': 'Soave'}, {'id': 14078, 'synset': 'zinfandel.n.02', 'name': 'zinfandel'}, {'id': 14079, 'synset': 'sauterne.n.01', 'name': 'Sauterne'}, {'id': 14080, 'synset': 'straw_wine.n.01', 'name': 'straw_wine'}, {'id': 14081, 'synset': 'table_wine.n.01', 'name': 'table_wine'}, {'id': 14082, 'synset': 'tokay.n.01', 'name': 'Tokay'}, {'id': 14083, 'synset': 'vin_ordinaire.n.01', 'name': 'vin_ordinaire'}, {'id': 14084, 'synset': 'vermouth.n.01', 'name': 'vermouth'}, {'id': 14085, 'synset': 'sweet_vermouth.n.01', 'name': 'sweet_vermouth'}, {'id': 14086, 'synset': 'dry_vermouth.n.01', 'name': 'dry_vermouth'}, {'id': 14087, 'synset': 'chenin_blanc.n.02', 'name': 'Chenin_blanc'}, {'id': 14088, 'synset': 'verdicchio.n.02', 'name': 'Verdicchio'}, {'id': 14089, 'synset': 'vouvray.n.01', 'name': 'Vouvray'}, {'id': 14090, 'synset': 'yquem.n.01', 'name': 'Yquem'}, {'id': 14091, 'synset': 'generic.n.01', 'name': 'generic'}, {'id': 14092, 'synset': 'varietal.n.01', 'name': 'varietal'}, {'id': 14093, 'synset': 'fortified_wine.n.01', 'name': 'fortified_wine'}, {'id': 14094, 'synset': 'madeira.n.03', 'name': 'Madeira'}, {'id': 14095, 'synset': 'malmsey.n.01', 'name': 'malmsey'}, {'id': 14096, 'synset': 'port.n.02', 'name': 'port'}, {'id': 14097, 'synset': 'sherry.n.01', 'name': 'sherry'}, {'id': 14098, 'synset': 'marsala.n.01', 'name': 'Marsala'}, {'id': 14099, 'synset': 'muscat.n.03', 'name': 'muscat'}, {'id': 14100, 'synset': 'neutral_spirits.n.01', 'name': 'neutral_spirits'}, {'id': 14101, 'synset': 'aqua_vitae.n.01', 'name': 'aqua_vitae'}, {'id': 14102, 'synset': 'eau_de_vie.n.01', 'name': 'eau_de_vie'}, {'id': 14103, 'synset': 'moonshine.n.02', 'name': 'moonshine'}, {'id': 14104, 'synset': 'bathtub_gin.n.01', 'name': 'bathtub_gin'}, {'id': 14105, 'synset': 'aquavit.n.01', 'name': 'aquavit'}, {'id': 14106, 'synset': 'arrack.n.01', 'name': 'arrack'}, {'id': 14107, 'synset': 'bitters.n.01', 'name': 'bitters'}, {'id': 14108, 'synset': 'brandy.n.01', 'name': 'brandy'}, {'id': 14109, 'synset': 'applejack.n.01', 'name': 'applejack'}, {'id': 14110, 'synset': 'calvados.n.01', 'name': 'Calvados'}, {'id': 14111, 'synset': 'armagnac.n.01', 'name': 'Armagnac'}, {'id': 14112, 'synset': 'cognac.n.01', 'name': 'Cognac'}, {'id': 14113, 'synset': 'grappa.n.01', 'name': 'grappa'}, {'id': 14114, 'synset': 'kirsch.n.01', 'name': 'kirsch'}, {'id': 14115, 'synset': 'slivovitz.n.01', 'name': 'slivovitz'}, {'id': 14116, 'synset': 'gin.n.01', 'name': 'gin'}, {'id': 14117, 'synset': 'sloe_gin.n.01', 'name': 'sloe_gin'}, {'id': 14118, 'synset': 'geneva.n.02', 'name': 'geneva'}, {'id': 14119, 'synset': 'grog.n.01', 'name': 'grog'}, {'id': 14120, 'synset': 'ouzo.n.01', 'name': 'ouzo'}, {'id': 14121, 'synset': 'rum.n.01', 'name': 'rum'}, {'id': 14122, 'synset': 'demerara.n.04', 'name': 'demerara'}, {'id': 14123, 'synset': 'jamaica_rum.n.01', 'name': 'Jamaica_rum'}, {'id': 14124, 'synset': 'schnapps.n.01', 'name': 'schnapps'}, {'id': 14125, 'synset': 'pulque.n.01', 'name': 'pulque'}, {'id': 14126, 'synset': 'mescal.n.02', 'name': 'mescal'}, {'id': 14127, 'synset': 'whiskey.n.01', 'name': 'whiskey'}, {'id': 14128, 'synset': 'blended_whiskey.n.01', 'name': 'blended_whiskey'}, {'id': 14129, 'synset': 'bourbon.n.02', 'name': 'bourbon'}, {'id': 14130, 'synset': 'corn_whiskey.n.01', 'name': 'corn_whiskey'}, {'id': 14131, 'synset': 'firewater.n.01', 'name': 'firewater'}, {'id': 14132, 'synset': 'irish.n.02', 'name': 'Irish'}, {'id': 14133, 'synset': 'poteen.n.01', 'name': 'poteen'}, {'id': 14134, 'synset': 'rye.n.03', 'name': 'rye'}, {'id': 14135, 'synset': 'scotch.n.02', 'name': 'Scotch'}, {'id': 14136, 'synset': 'sour_mash.n.02', 'name': 'sour_mash'}, {'id': 14137, 'synset': 'liqueur.n.01', 'name': 'liqueur'}, {'id': 14138, 'synset': 'absinth.n.01', 'name': 'absinth'}, {'id': 14139, 'synset': 'amaretto.n.01', 'name': 'amaretto'}, {'id': 14140, 'synset': 'anisette.n.01', 'name': 'anisette'}, {'id': 14141, 'synset': 'benedictine.n.02', 'name': 'benedictine'}, {'id': 14142, 'synset': 'chartreuse.n.01', 'name': 'Chartreuse'}, {'id': 14143, 'synset': 'coffee_liqueur.n.01', 'name': 'coffee_liqueur'}, {'id': 14144, 'synset': 'creme_de_cacao.n.01', 'name': 'creme_de_cacao'}, {'id': 14145, 'synset': 'creme_de_menthe.n.01', 'name': 'creme_de_menthe'}, {'id': 14146, 'synset': 'creme_de_fraise.n.01', 'name': 'creme_de_fraise'}, {'id': 14147, 'synset': 'drambuie.n.01', 'name': 'Drambuie'}, {'id': 14148, 'synset': 'galliano.n.01', 'name': 'Galliano'}, {'id': 14149, 'synset': 'orange_liqueur.n.01', 'name': 'orange_liqueur'}, {'id': 14150, 'synset': 'curacao.n.02', 'name': 'curacao'}, {'id': 14151, 'synset': 'triple_sec.n.01', 'name': 'triple_sec'}, {'id': 14152, 'synset': 'grand_marnier.n.01', 'name': 'Grand_Marnier'}, {'id': 14153, 'synset': 'kummel.n.01', 'name': 'kummel'}, {'id': 14154, 'synset': 'maraschino.n.01', 'name': 'maraschino'}, {'id': 14155, 'synset': 'pastis.n.01', 'name': 'pastis'}, {'id': 14156, 'synset': 'pernod.n.01', 'name': 'Pernod'}, {'id': 14157, 'synset': 'pousse-cafe.n.01', 'name': 'pousse-cafe'}, {'id': 14158, 'synset': 'kahlua.n.01', 'name': 'Kahlua'}, {'id': 14159, 'synset': 'ratafia.n.01', 'name': 'ratafia'}, {'id': 14160, 'synset': 'sambuca.n.01', 'name': 'sambuca'}, {'id': 14161, 'synset': 'mixed_drink.n.01', 'name': 'mixed_drink'}, {'id': 14162, 'synset': 'cocktail.n.01', 'name': 'cocktail'}, {'id': 14163, 'synset': 'dom_pedro.n.01', 'name': 'Dom_Pedro'}, {'id': 14164, 'synset': 'highball.n.01', 'name': 'highball'}, {'id': 14165, 'synset': 'mixer.n.02', 'name': 'mixer'}, {'id': 14166, 'synset': 'bishop.n.02', 'name': 'bishop'}, {'id': 14167, 'synset': 'bloody_mary.n.02', 'name': 'Bloody_Mary'}, {'id': 14168, 'synset': 'virgin_mary.n.02', 'name': 'Virgin_Mary'}, {'id': 14169, 'synset': 'bullshot.n.01', 'name': 'bullshot'}, {'id': 14170, 'synset': 'cobbler.n.02', 'name': 'cobbler'}, {'id': 14171, 'synset': 'collins.n.02', 'name': 'collins'}, {'id': 14172, 'synset': 'cooler.n.02', 'name': 'cooler'}, {'id': 14173, 'synset': 'refresher.n.02', 'name': 'refresher'}, {'id': 14174, 'synset': 'daiquiri.n.01', 'name': 'daiquiri'}, {'id': 14175, 'synset': 'strawberry_daiquiri.n.01', 'name': 'strawberry_daiquiri'}, {'id': 14176, 'synset': 'nada_daiquiri.n.01', 'name': 'NADA_daiquiri'}, {'id': 14177, 'synset': 'spritzer.n.01', 'name': 'spritzer'}, {'id': 14178, 'synset': 'flip.n.02', 'name': 'flip'}, {'id': 14179, 'synset': 'gimlet.n.01', 'name': 'gimlet'}, {'id': 14180, 'synset': 'gin_and_tonic.n.01', 'name': 'gin_and_tonic'}, {'id': 14181, 'synset': 'grasshopper.n.02', 'name': 'grasshopper'}, {'id': 14182, 'synset': 'harvey_wallbanger.n.01', 'name': 'Harvey_Wallbanger'}, {'id': 14183, 'synset': 'julep.n.01', 'name': 'julep'}, {'id': 14184, 'synset': 'manhattan.n.02', 'name': 'manhattan'}, {'id': 14185, 'synset': 'rob_roy.n.02', 'name': 'Rob_Roy'}, {'id': 14186, 'synset': 'margarita.n.01', 'name': 'margarita'}, {'id': 14187, 'synset': 'gin_and_it.n.01', 'name': 'gin_and_it'}, {'id': 14188, 'synset': 'vodka_martini.n.01', 'name': 'vodka_martini'}, {'id': 14189, 'synset': 'old_fashioned.n.01', 'name': 'old_fashioned'}, {'id': 14190, 'synset': 'pink_lady.n.01', 'name': 'pink_lady'}, {'id': 14191, 'synset': 'sazerac.n.01', 'name': 'Sazerac'}, {'id': 14192, 'synset': 'screwdriver.n.02', 'name': 'screwdriver'}, {'id': 14193, 'synset': 'sidecar.n.01', 'name': 'sidecar'}, {'id': 14194, 'synset': 'scotch_and_soda.n.01', 'name': 'Scotch_and_soda'}, {'id': 14195, 'synset': 'sling.n.01', 'name': 'sling'}, {'id': 14196, 'synset': 'brandy_sling.n.01', 'name': 'brandy_sling'}, {'id': 14197, 'synset': 'gin_sling.n.01', 'name': 'gin_sling'}, {'id': 14198, 'synset': 'rum_sling.n.01', 'name': 'rum_sling'}, {'id': 14199, 'synset': 'sour.n.01', 'name': 'sour'}, {'id': 14200, 'synset': 'whiskey_sour.n.01', 'name': 'whiskey_sour'}, {'id': 14201, 'synset': 'stinger.n.01', 'name': 'stinger'}, {'id': 14202, 'synset': 'swizzle.n.01', 'name': 'swizzle'}, {'id': 14203, 'synset': 'hot_toddy.n.01', 'name': 'hot_toddy'}, {'id': 14204, 'synset': 'zombie.n.05', 'name': 'zombie'}, {'id': 14205, 'synset': 'fizz.n.01', 'name': 'fizz'}, {'id': 14206, 'synset': 'irish_coffee.n.01', 'name': 'Irish_coffee'}, {'id': 14207, 'synset': 'cafe_au_lait.n.01', 'name': 'cafe_au_lait'}, {'id': 14208, 'synset': 'cafe_noir.n.01', 'name': 'cafe_noir'}, {'id': 14209, 'synset': 'decaffeinated_coffee.n.01', 'name': 'decaffeinated_coffee'}, {'id': 14210, 'synset': 'drip_coffee.n.01', 'name': 'drip_coffee'}, {'id': 14211, 'synset': 'espresso.n.01', 'name': 'espresso'}, {'id': 14212, 'synset': 'caffe_latte.n.01', 'name': 'caffe_latte'}, {'id': 14213, 'synset': 'iced_coffee.n.01', 'name': 'iced_coffee'}, {'id': 14214, 'synset': 'instant_coffee.n.01', 'name': 'instant_coffee'}, {'id': 14215, 'synset': 'mocha.n.03', 'name': 'mocha'}, {'id': 14216, 'synset': 'mocha.n.02', 'name': 'mocha'}, {'id': 14217, 'synset': 'cassareep.n.01', 'name': 'cassareep'}, {'id': 14218, 'synset': 'turkish_coffee.n.01', 'name': 'Turkish_coffee'}, {'id': 14219, 'synset': 'hard_cider.n.01', 'name': 'hard_cider'}, {'id': 14220, 'synset': 'scrumpy.n.01', 'name': 'scrumpy'}, {'id': 14221, 'synset': 'sweet_cider.n.01', 'name': 'sweet_cider'}, {'id': 14222, 'synset': 'mulled_cider.n.01', 'name': 'mulled_cider'}, {'id': 14223, 'synset': 'perry.n.04', 'name': 'perry'}, {'id': 14224, 'synset': 'rotgut.n.01', 'name': 'rotgut'}, {'id': 14225, 'synset': 'slug.n.05', 'name': 'slug'}, {'id': 14226, 'synset': 'criollo.n.02', 'name': 'criollo'}, {'id': 14227, 'synset': 'juice.n.01', 'name': 'juice'}, {'id': 14228, 'synset': 'nectar.n.02', 'name': 'nectar'}, {'id': 14229, 'synset': 'apple_juice.n.01', 'name': 'apple_juice'}, {'id': 14230, 'synset': 'cranberry_juice.n.01', 'name': 'cranberry_juice'}, {'id': 14231, 'synset': 'grape_juice.n.01', 'name': 'grape_juice'}, {'id': 14232, 'synset': 'must.n.02', 'name': 'must'}, {'id': 14233, 'synset': 'grapefruit_juice.n.01', 'name': 'grapefruit_juice'}, {'id': 14234, 'synset': 'frozen_orange_juice.n.01', 'name': 'frozen_orange_juice'}, {'id': 14235, 'synset': 'pineapple_juice.n.01', 'name': 'pineapple_juice'}, {'id': 14236, 'synset': 'lemon_juice.n.01', 'name': 'lemon_juice'}, {'id': 14237, 'synset': 'lime_juice.n.01', 'name': 'lime_juice'}, {'id': 14238, 'synset': 'papaya_juice.n.01', 'name': 'papaya_juice'}, {'id': 14239, 'synset': 'tomato_juice.n.01', 'name': 'tomato_juice'}, {'id': 14240, 'synset': 'carrot_juice.n.01', 'name': 'carrot_juice'}, {'id': 14241, 'synset': 'v-8_juice.n.01', 'name': 'V-8_juice'}, {'id': 14242, 'synset': 'koumiss.n.01', 'name': 'koumiss'}, {'id': 14243, 'synset': 'fruit_drink.n.01', 'name': 'fruit_drink'}, {'id': 14244, 'synset': 'limeade.n.01', 'name': 'limeade'}, {'id': 14245, 'synset': 'orangeade.n.01', 'name': 'orangeade'}, {'id': 14246, 'synset': 'malted_milk.n.02', 'name': 'malted_milk'}, {'id': 14247, 'synset': 'mate.n.09', 'name': 'mate'}, {'id': 14248, 'synset': 'mulled_wine.n.01', 'name': 'mulled_wine'}, {'id': 14249, 'synset': 'negus.n.01', 'name': 'negus'}, {'id': 14250, 'synset': 'soft_drink.n.01', 'name': 'soft_drink'}, {'id': 14251, 'synset': 'birch_beer.n.01', 'name': 'birch_beer'}, {'id': 14252, 'synset': 'bitter_lemon.n.01', 'name': 'bitter_lemon'}, {'id': 14253, 'synset': 'cola.n.02', 'name': 'cola'}, {'id': 14254, 'synset': 'cream_soda.n.01', 'name': 'cream_soda'}, {'id': 14255, 'synset': 'egg_cream.n.01', 'name': 'egg_cream'}, {'id': 14256, 'synset': 'ginger_ale.n.01', 'name': 'ginger_ale'}, {'id': 14257, 'synset': 'orange_soda.n.01', 'name': 'orange_soda'}, {'id': 14258, 'synset': 'phosphate.n.02', 'name': 'phosphate'}, {'id': 14259, 'synset': 'coca_cola.n.01', 'name': 'Coca_Cola'}, {'id': 14260, 'synset': 'pepsi.n.01', 'name': 'Pepsi'}, {'id': 14261, 'synset': 'sarsaparilla.n.02', 'name': 'sarsaparilla'}, {'id': 14262, 'synset': 'tonic.n.01', 'name': 'tonic'}, {'id': 14263, 'synset': 'coffee_bean.n.01', 'name': 'coffee_bean'}, {'id': 14264, 'synset': 'coffee.n.01', 'name': 'coffee'}, {'id': 14265, 'synset': 'cafe_royale.n.01', 'name': 'cafe_royale'}, {'id': 14266, 'synset': 'fruit_punch.n.01', 'name': 'fruit_punch'}, {'id': 14267, 'synset': 'milk_punch.n.01', 'name': 'milk_punch'}, {'id': 14268, 'synset': 'mimosa.n.03', 'name': 'mimosa'}, {'id': 14269, 'synset': 'pina_colada.n.01', 'name': 'pina_colada'}, {'id': 14270, 'synset': 'punch.n.02', 'name': 'punch'}, {'id': 14271, 'synset': 'cup.n.06', 'name': 'cup'}, {'id': 14272, 'synset': 'champagne_cup.n.01', 'name': 'champagne_cup'}, {'id': 14273, 'synset': 'claret_cup.n.01', 'name': 'claret_cup'}, {'id': 14274, 'synset': 'wassail.n.01', 'name': 'wassail'}, {'id': 14275, 'synset': "planter's_punch.n.01", 'name': "planter's_punch"}, {'id': 14276, 'synset': 'white_russian.n.02', 'name': 'White_Russian'}, {'id': 14277, 'synset': 'fish_house_punch.n.01', 'name': 'fish_house_punch'}, {'id': 14278, 'synset': 'may_wine.n.01', 'name': 'May_wine'}, {'id': 14279, 'synset': 'eggnog.n.01', 'name': 'eggnog'}, {'id': 14280, 'synset': 'cassiri.n.01', 'name': 'cassiri'}, {'id': 14281, 'synset': 'spruce_beer.n.01', 'name': 'spruce_beer'}, {'id': 14282, 'synset': 'rickey.n.01', 'name': 'rickey'}, {'id': 14283, 'synset': 'gin_rickey.n.01', 'name': 'gin_rickey'}, {'id': 14284, 'synset': 'tea.n.05', 'name': 'tea'}, {'id': 14285, 'synset': 'tea.n.01', 'name': 'tea'}, {'id': 14286, 'synset': 'tea-like_drink.n.01', 'name': 'tea-like_drink'}, {'id': 14287, 'synset': 'cambric_tea.n.01', 'name': 'cambric_tea'}, {'id': 14288, 'synset': 'cuppa.n.01', 'name': 'cuppa'}, {'id': 14289, 'synset': 'herb_tea.n.01', 'name': 'herb_tea'}, {'id': 14290, 'synset': 'tisane.n.01', 'name': 'tisane'}, {'id': 14291, 'synset': 'camomile_tea.n.01', 'name': 'camomile_tea'}, {'id': 14292, 'synset': 'ice_tea.n.01', 'name': 'ice_tea'}, {'id': 14293, 'synset': 'sun_tea.n.01', 'name': 'sun_tea'}, {'id': 14294, 'synset': 'black_tea.n.01', 'name': 'black_tea'}, {'id': 14295, 'synset': 'congou.n.01', 'name': 'congou'}, {'id': 14296, 'synset': 'darjeeling.n.01', 'name': 'Darjeeling'}, {'id': 14297, 'synset': 'orange_pekoe.n.01', 'name': 'orange_pekoe'}, {'id': 14298, 'synset': 'souchong.n.01', 'name': 'souchong'}, {'id': 14299, 'synset': 'green_tea.n.01', 'name': 'green_tea'}, {'id': 14300, 'synset': 'hyson.n.01', 'name': 'hyson'}, {'id': 14301, 'synset': 'oolong.n.01', 'name': 'oolong'}, {'id': 14302, 'synset': 'water.n.06', 'name': 'water'}, {'id': 14303, 'synset': 'bottled_water.n.01', 'name': 'bottled_water'}, {'id': 14304, 'synset': 'branch_water.n.01', 'name': 'branch_water'}, {'id': 14305, 'synset': 'spring_water.n.02', 'name': 'spring_water'}, {'id': 14306, 'synset': 'sugar_water.n.01', 'name': 'sugar_water'}, {'id': 14307, 'synset': 'drinking_water.n.01', 'name': 'drinking_water'}, {'id': 14308, 'synset': 'ice_water.n.01', 'name': 'ice_water'}, {'id': 14309, 'synset': 'soda_water.n.01', 'name': 'soda_water'}, {'id': 14310, 'synset': 'mineral_water.n.01', 'name': 'mineral_water'}, {'id': 14311, 'synset': 'seltzer.n.01', 'name': 'seltzer'}, {'id': 14312, 'synset': 'vichy_water.n.01', 'name': 'Vichy_water'}, {'id': 14313, 'synset': 'perishable.n.01', 'name': 'perishable'}, {'id': 14314, 'synset': 'couscous.n.01', 'name': 'couscous'}, {'id': 14315, 'synset': 'ramekin.n.01', 'name': 'ramekin'}, {'id': 14316, 'synset': 'multivitamin.n.01', 'name': 'multivitamin'}, {'id': 14317, 'synset': 'vitamin_pill.n.01', 'name': 'vitamin_pill'}, {'id': 14318, 'synset': 'soul_food.n.01', 'name': 'soul_food'}, {'id': 14319, 'synset': 'mold.n.06', 'name': 'mold'}, {'id': 14320, 'synset': 'people.n.01', 'name': 'people'}, {'id': 14321, 'synset': 'collection.n.01', 'name': 'collection'}, {'id': 14322, 'synset': 'book.n.07', 'name': 'book'}, {'id': 14323, 'synset': 'library.n.02', 'name': 'library'}, {'id': 14324, 'synset': 'baseball_club.n.01', 'name': 'baseball_club'}, {'id': 14325, 'synset': 'crowd.n.01', 'name': 'crowd'}, {'id': 14326, 'synset': 'class.n.02', 'name': 'class'}, {'id': 14327, 'synset': 'core.n.01', 'name': 'core'}, {'id': 14328, 'synset': 'concert_band.n.01', 'name': 'concert_band'}, {'id': 14329, 'synset': 'dance.n.02', 'name': 'dance'}, {'id': 14330, 'synset': 'wedding.n.03', 'name': 'wedding'}, {'id': 14331, 'synset': 'chain.n.01', 'name': 'chain'}, {'id': 14332, 'synset': 'power_breakfast.n.01', 'name': 'power_breakfast'}, {'id': 14333, 'synset': 'aerie.n.02', 'name': 'aerie'}, {'id': 14334, 'synset': 'agora.n.02', 'name': 'agora'}, {'id': 14335, 'synset': 'amusement_park.n.01', 'name': 'amusement_park'}, {'id': 14336, 'synset': 'aphelion.n.01', 'name': 'aphelion'}, {'id': 14337, 'synset': 'apron.n.02', 'name': 'apron'}, {'id': 14338, 'synset': 'interplanetary_space.n.01', 'name': 'interplanetary_space'}, {'id': 14339, 'synset': 'interstellar_space.n.01', 'name': 'interstellar_space'}, {'id': 14340, 'synset': 'intergalactic_space.n.01', 'name': 'intergalactic_space'}, {'id': 14341, 'synset': 'bush.n.02', 'name': 'bush'}, {'id': 14342, 'synset': 'semidesert.n.01', 'name': 'semidesert'}, {'id': 14343, 'synset': 'beam-ends.n.01', 'name': 'beam-ends'}, {'id': 14344, 'synset': 'bridgehead.n.02', 'name': 'bridgehead'}, {'id': 14345, 'synset': 'bus_stop.n.01', 'name': 'bus_stop'}, {'id': 14346, 'synset': 'campsite.n.01', 'name': 'campsite'}, {'id': 14347, 'synset': 'detention_basin.n.01', 'name': 'detention_basin'}, {'id': 14348, 'synset': 'cemetery.n.01', 'name': 'cemetery'}, {'id': 14349, 'synset': 'trichion.n.01', 'name': 'trichion'}, {'id': 14350, 'synset': 'city.n.01', 'name': 'city'}, {'id': 14351, 'synset': 'business_district.n.01', 'name': 'business_district'}, {'id': 14352, 'synset': 'outskirts.n.01', 'name': 'outskirts'}, {'id': 14353, 'synset': 'borough.n.01', 'name': 'borough'}, {'id': 14354, 'synset': 'cow_pasture.n.01', 'name': 'cow_pasture'}, {'id': 14355, 'synset': 'crest.n.01', 'name': 'crest'}, {'id': 14356, 'synset': 'eparchy.n.02', 'name': 'eparchy'}, {'id': 14357, 'synset': 'suburb.n.01', 'name': 'suburb'}, {'id': 14358, 'synset': 'stockbroker_belt.n.01', 'name': 'stockbroker_belt'}, {'id': 14359, 'synset': 'crawlspace.n.01', 'name': 'crawlspace'}, {'id': 14360, 'synset': 'sheikdom.n.01', 'name': 'sheikdom'}, {'id': 14361, 'synset': 'residence.n.01', 'name': 'residence'}, {'id': 14362, 'synset': 'domicile.n.01', 'name': 'domicile'}, {'id': 14363, 'synset': 'dude_ranch.n.01', 'name': 'dude_ranch'}, {'id': 14364, 'synset': 'farmland.n.01', 'name': 'farmland'}, {'id': 14365, 'synset': 'midfield.n.01', 'name': 'midfield'}, {'id': 14366, 'synset': 'firebreak.n.01', 'name': 'firebreak'}, {'id': 14367, 'synset': 'flea_market.n.01', 'name': 'flea_market'}, {'id': 14368, 'synset': 'battlefront.n.01', 'name': 'battlefront'}, {'id': 14369, 'synset': 'garbage_heap.n.01', 'name': 'garbage_heap'}, {'id': 14370, 'synset': 'benthos.n.01', 'name': 'benthos'}, {'id': 14371, 'synset': 'goldfield.n.01', 'name': 'goldfield'}, {'id': 14372, 'synset': 'grainfield.n.01', 'name': 'grainfield'}, {'id': 14373, 'synset': 'half-mast.n.01', 'name': 'half-mast'}, {'id': 14374, 'synset': 'hemline.n.01', 'name': 'hemline'}, {'id': 14375, 'synset': 'heronry.n.01', 'name': 'heronry'}, {'id': 14376, 'synset': 'hipline.n.02', 'name': 'hipline'}, {'id': 14377, 'synset': 'hipline.n.01', 'name': 'hipline'}, {'id': 14378, 'synset': 'hole-in-the-wall.n.01', 'name': 'hole-in-the-wall'}, {'id': 14379, 'synset': 'junkyard.n.01', 'name': 'junkyard'}, {'id': 14380, 'synset': 'isoclinic_line.n.01', 'name': 'isoclinic_line'}, {'id': 14381, 'synset': 'littoral.n.01', 'name': 'littoral'}, {'id': 14382, 'synset': 'magnetic_pole.n.01', 'name': 'magnetic_pole'}, {'id': 14383, 'synset': 'grassland.n.01', 'name': 'grassland'}, {'id': 14384, 'synset': 'mecca.n.02', 'name': 'mecca'}, {'id': 14385, 'synset': "observer's_meridian.n.01", 'name': "observer's_meridian"}, {'id': 14386, 'synset': 'prime_meridian.n.01', 'name': 'prime_meridian'}, {'id': 14387, 'synset': 'nombril.n.01', 'name': 'nombril'}, {'id': 14388, 'synset': 'no-parking_zone.n.01', 'name': 'no-parking_zone'}, {'id': 14389, 'synset': 'outdoors.n.01', 'name': 'outdoors'}, {'id': 14390, 'synset': 'fairground.n.01', 'name': 'fairground'}, {'id': 14391, 'synset': 'pasture.n.01', 'name': 'pasture'}, {'id': 14392, 'synset': 'perihelion.n.01', 'name': 'perihelion'}, {'id': 14393, 'synset': 'periselene.n.01', 'name': 'periselene'}, {'id': 14394, 'synset': 'locus_of_infection.n.01', 'name': 'locus_of_infection'}, {'id': 14395, 'synset': 'kasbah.n.01', 'name': 'kasbah'}, {'id': 14396, 'synset': 'waterfront.n.01', 'name': 'waterfront'}, {'id': 14397, 'synset': 'resort.n.01', 'name': 'resort'}, {'id': 14398, 'synset': 'resort_area.n.01', 'name': 'resort_area'}, {'id': 14399, 'synset': 'rough.n.01', 'name': 'rough'}, {'id': 14400, 'synset': 'ashram.n.02', 'name': 'ashram'}, {'id': 14401, 'synset': 'harborage.n.01', 'name': 'harborage'}, {'id': 14402, 'synset': 'scrubland.n.01', 'name': 'scrubland'}, {'id': 14403, 'synset': 'weald.n.01', 'name': 'weald'}, {'id': 14404, 'synset': 'wold.n.01', 'name': 'wold'}, {'id': 14405, 'synset': 'schoolyard.n.01', 'name': 'schoolyard'}, {'id': 14406, 'synset': 'showplace.n.01', 'name': 'showplace'}, {'id': 14407, 'synset': 'bedside.n.01', 'name': 'bedside'}, {'id': 14408, 'synset': 'sideline.n.01', 'name': 'sideline'}, {'id': 14409, 'synset': 'ski_resort.n.01', 'name': 'ski_resort'}, {'id': 14410, 'synset': 'soil_horizon.n.01', 'name': 'soil_horizon'}, {'id': 14411, 'synset': 'geological_horizon.n.01', 'name': 'geological_horizon'}, {'id': 14412, 'synset': 'coal_seam.n.01', 'name': 'coal_seam'}, {'id': 14413, 'synset': 'coalface.n.01', 'name': 'coalface'}, {'id': 14414, 'synset': 'field.n.14', 'name': 'field'}, {'id': 14415, 'synset': 'oilfield.n.01', 'name': 'oilfield'}, {'id': 14416, 'synset': 'temperate_zone.n.01', 'name': 'Temperate_Zone'}, {'id': 14417, 'synset': 'terreplein.n.01', 'name': 'terreplein'}, {'id': 14418, 'synset': 'three-mile_limit.n.01', 'name': 'three-mile_limit'}, {'id': 14419, 'synset': 'desktop.n.01', 'name': 'desktop'}, {'id': 14420, 'synset': 'top.n.01', 'name': 'top'}, {'id': 14421, 'synset': 'kampong.n.01', 'name': 'kampong'}, {'id': 14422, 'synset': 'subtropics.n.01', 'name': 'subtropics'}, {'id': 14423, 'synset': 'barrio.n.02', 'name': 'barrio'}, {'id': 14424, 'synset': 'veld.n.01', 'name': 'veld'}, {'id': 14425, 'synset': 'vertex.n.02', 'name': 'vertex'}, {'id': 14426, 'synset': 'waterline.n.01', 'name': 'waterline'}, {'id': 14427, 'synset': 'high-water_mark.n.01', 'name': 'high-water_mark'}, {'id': 14428, 'synset': 'low-water_mark.n.02', 'name': 'low-water_mark'}, {'id': 14429, 'synset': 'continental_divide.n.01', 'name': 'continental_divide'}, {'id': 14430, 'synset': 'zodiac.n.01', 'name': 'zodiac'}, {'id': 14431, 'synset': 'aegean_island.n.01', 'name': 'Aegean_island'}, {'id': 14432, 'synset': 'sultanate.n.01', 'name': 'sultanate'}, {'id': 14433, 'synset': 'swiss_canton.n.01', 'name': 'Swiss_canton'}, {'id': 14434, 'synset': 'abyssal_zone.n.01', 'name': 'abyssal_zone'}, {'id': 14435, 'synset': 'aerie.n.01', 'name': 'aerie'}, {'id': 14436, 'synset': 'air_bubble.n.01', 'name': 'air_bubble'}, {'id': 14437, 'synset': 'alluvial_flat.n.01', 'name': 'alluvial_flat'}, {'id': 14438, 'synset': 'alp.n.01', 'name': 'alp'}, {'id': 14439, 'synset': 'alpine_glacier.n.01', 'name': 'Alpine_glacier'}, {'id': 14440, 'synset': 'anthill.n.01', 'name': 'anthill'}, {'id': 14441, 'synset': 'aquifer.n.01', 'name': 'aquifer'}, {'id': 14442, 'synset': 'archipelago.n.01', 'name': 'archipelago'}, {'id': 14443, 'synset': 'arete.n.01', 'name': 'arete'}, {'id': 14444, 'synset': 'arroyo.n.01', 'name': 'arroyo'}, {'id': 14445, 'synset': 'ascent.n.01', 'name': 'ascent'}, {'id': 14446, 'synset': 'asterism.n.02', 'name': 'asterism'}, {'id': 14447, 'synset': 'asthenosphere.n.01', 'name': 'asthenosphere'}, {'id': 14448, 'synset': 'atoll.n.01', 'name': 'atoll'}, {'id': 14449, 'synset': 'bank.n.03', 'name': 'bank'}, {'id': 14450, 'synset': 'bank.n.01', 'name': 'bank'}, {'id': 14451, 'synset': 'bar.n.08', 'name': 'bar'}, {'id': 14452, 'synset': 'barbecue_pit.n.01', 'name': 'barbecue_pit'}, {'id': 14453, 'synset': 'barrier_reef.n.01', 'name': 'barrier_reef'}, {'id': 14454, 'synset': 'baryon.n.01', 'name': 'baryon'}, {'id': 14455, 'synset': 'basin.n.03', 'name': 'basin'}, {'id': 14456, 'synset': 'beach.n.01', 'name': 'beach'}, {'id': 14457, 'synset': 'honeycomb.n.01', 'name': 'honeycomb'}, {'id': 14458, 'synset': 'belay.n.01', 'name': 'belay'}, {'id': 14459, 'synset': 'ben.n.01', 'name': 'ben'}, {'id': 14460, 'synset': 'berm.n.01', 'name': 'berm'}, {'id': 14461, 'synset': 'bladder_stone.n.01', 'name': 'bladder_stone'}, {'id': 14462, 'synset': 'bluff.n.01', 'name': 'bluff'}, {'id': 14463, 'synset': 'borrow_pit.n.01', 'name': 'borrow_pit'}, {'id': 14464, 'synset': 'brae.n.01', 'name': 'brae'}, {'id': 14465, 'synset': 'bubble.n.01', 'name': 'bubble'}, {'id': 14466, 'synset': 'burrow.n.01', 'name': 'burrow'}, {'id': 14467, 'synset': 'butte.n.01', 'name': 'butte'}, {'id': 14468, 'synset': 'caldera.n.01', 'name': 'caldera'}, {'id': 14469, 'synset': 'canyon.n.01', 'name': 'canyon'}, {'id': 14470, 'synset': 'canyonside.n.01', 'name': 'canyonside'}, {'id': 14471, 'synset': 'cave.n.01', 'name': 'cave'}, {'id': 14472, 'synset': 'cavern.n.02', 'name': 'cavern'}, {'id': 14473, 'synset': 'chasm.n.01', 'name': 'chasm'}, {'id': 14474, 'synset': 'cirque.n.01', 'name': 'cirque'}, {'id': 14475, 'synset': 'cliff.n.01', 'name': 'cliff'}, {'id': 14476, 'synset': 'cloud.n.02', 'name': 'cloud'}, {'id': 14477, 'synset': 'coast.n.02', 'name': 'coast'}, {'id': 14478, 'synset': 'coastland.n.01', 'name': 'coastland'}, {'id': 14479, 'synset': 'col.n.01', 'name': 'col'}, {'id': 14480, 'synset': 'collector.n.03', 'name': 'collector'}, {'id': 14481, 'synset': 'comet.n.01', 'name': 'comet'}, {'id': 14482, 'synset': 'continental_glacier.n.01', 'name': 'continental_glacier'}, {'id': 14483, 'synset': 'coral_reef.n.01', 'name': 'coral_reef'}, {'id': 14484, 'synset': 'cove.n.02', 'name': 'cove'}, {'id': 14485, 'synset': 'crag.n.01', 'name': 'crag'}, {'id': 14486, 'synset': 'crater.n.03', 'name': 'crater'}, {'id': 14487, 'synset': 'cultivated_land.n.01', 'name': 'cultivated_land'}, {'id': 14488, 'synset': 'dale.n.01', 'name': 'dale'}, {'id': 14489, 'synset': 'defile.n.01', 'name': 'defile'}, {'id': 14490, 'synset': 'delta.n.01', 'name': 'delta'}, {'id': 14491, 'synset': 'descent.n.05', 'name': 'descent'}, {'id': 14492, 'synset': 'diapir.n.01', 'name': 'diapir'}, {'id': 14493, 'synset': 'divot.n.02', 'name': 'divot'}, {'id': 14494, 'synset': 'divot.n.01', 'name': 'divot'}, {'id': 14495, 'synset': 'down.n.04', 'name': 'down'}, {'id': 14496, 'synset': 'downhill.n.01', 'name': 'downhill'}, {'id': 14497, 'synset': 'draw.n.01', 'name': 'draw'}, {'id': 14498, 'synset': 'drey.n.01', 'name': 'drey'}, {'id': 14499, 'synset': 'drumlin.n.01', 'name': 'drumlin'}, {'id': 14500, 'synset': 'dune.n.01', 'name': 'dune'}, {'id': 14501, 'synset': 'escarpment.n.01', 'name': 'escarpment'}, {'id': 14502, 'synset': 'esker.n.01', 'name': 'esker'}, {'id': 14503, 'synset': 'fireball.n.03', 'name': 'fireball'}, {'id': 14504, 'synset': 'flare_star.n.01', 'name': 'flare_star'}, {'id': 14505, 'synset': 'floor.n.04', 'name': 'floor'}, {'id': 14506, 'synset': 'fomite.n.01', 'name': 'fomite'}, {'id': 14507, 'synset': 'foothill.n.01', 'name': 'foothill'}, {'id': 14508, 'synset': 'footwall.n.01', 'name': 'footwall'}, {'id': 14509, 'synset': 'foreland.n.02', 'name': 'foreland'}, {'id': 14510, 'synset': 'foreshore.n.01', 'name': 'foreshore'}, {'id': 14511, 'synset': 'gauge_boson.n.01', 'name': 'gauge_boson'}, {'id': 14512, 'synset': 'geological_formation.n.01', 'name': 'geological_formation'}, {'id': 14513, 'synset': 'geyser.n.01', 'name': 'geyser'}, {'id': 14514, 'synset': 'glacier.n.01', 'name': 'glacier'}, {'id': 14515, 'synset': 'glen.n.01', 'name': 'glen'}, {'id': 14516, 'synset': 'gopher_hole.n.01', 'name': 'gopher_hole'}, {'id': 14517, 'synset': 'gorge.n.01', 'name': 'gorge'}, {'id': 14518, 'synset': 'grotto.n.01', 'name': 'grotto'}, {'id': 14519, 'synset': 'growler.n.02', 'name': 'growler'}, {'id': 14520, 'synset': 'gulch.n.01', 'name': 'gulch'}, {'id': 14521, 'synset': 'gully.n.01', 'name': 'gully'}, {'id': 14522, 'synset': 'hail.n.02', 'name': 'hail'}, {'id': 14523, 'synset': 'highland.n.01', 'name': 'highland'}, {'id': 14524, 'synset': 'hill.n.01', 'name': 'hill'}, {'id': 14525, 'synset': 'hillside.n.01', 'name': 'hillside'}, {'id': 14526, 'synset': 'hole.n.05', 'name': 'hole'}, {'id': 14527, 'synset': 'hollow.n.02', 'name': 'hollow'}, {'id': 14528, 'synset': 'hot_spring.n.01', 'name': 'hot_spring'}, {'id': 14529, 'synset': 'iceberg.n.01', 'name': 'iceberg'}, {'id': 14530, 'synset': 'icecap.n.01', 'name': 'icecap'}, {'id': 14531, 'synset': 'ice_field.n.01', 'name': 'ice_field'}, {'id': 14532, 'synset': 'ice_floe.n.01', 'name': 'ice_floe'}, {'id': 14533, 'synset': 'ice_mass.n.01', 'name': 'ice_mass'}, {'id': 14534, 'synset': 'inclined_fault.n.01', 'name': 'inclined_fault'}, {'id': 14535, 'synset': 'ion.n.01', 'name': 'ion'}, {'id': 14536, 'synset': 'isthmus.n.01', 'name': 'isthmus'}, {'id': 14537, 'synset': 'kidney_stone.n.01', 'name': 'kidney_stone'}, {'id': 14538, 'synset': 'knoll.n.01', 'name': 'knoll'}, {'id': 14539, 'synset': 'kopje.n.01', 'name': 'kopje'}, {'id': 14540, 'synset': 'kuiper_belt.n.01', 'name': 'Kuiper_belt'}, {'id': 14541, 'synset': 'lake_bed.n.01', 'name': 'lake_bed'}, {'id': 14542, 'synset': 'lakefront.n.01', 'name': 'lakefront'}, {'id': 14543, 'synset': 'lakeside.n.01', 'name': 'lakeside'}, {'id': 14544, 'synset': 'landfall.n.01', 'name': 'landfall'}, {'id': 14545, 'synset': 'landfill.n.01', 'name': 'landfill'}, {'id': 14546, 'synset': 'lather.n.04', 'name': 'lather'}, {'id': 14547, 'synset': 'leak.n.01', 'name': 'leak'}, {'id': 14548, 'synset': 'ledge.n.01', 'name': 'ledge'}, {'id': 14549, 'synset': 'lepton.n.02', 'name': 'lepton'}, {'id': 14550, 'synset': 'lithosphere.n.01', 'name': 'lithosphere'}, {'id': 14551, 'synset': 'lowland.n.01', 'name': 'lowland'}, {'id': 14552, 'synset': 'lunar_crater.n.01', 'name': 'lunar_crater'}, {'id': 14553, 'synset': 'maar.n.01', 'name': 'maar'}, {'id': 14554, 'synset': 'massif.n.01', 'name': 'massif'}, {'id': 14555, 'synset': 'meander.n.01', 'name': 'meander'}, {'id': 14556, 'synset': 'mesa.n.01', 'name': 'mesa'}, {'id': 14557, 'synset': 'meteorite.n.01', 'name': 'meteorite'}, {'id': 14558, 'synset': 'microfossil.n.01', 'name': 'microfossil'}, {'id': 14559, 'synset': 'midstream.n.01', 'name': 'midstream'}, {'id': 14560, 'synset': 'molehill.n.01', 'name': 'molehill'}, {'id': 14561, 'synset': 'monocline.n.01', 'name': 'monocline'}, {'id': 14562, 'synset': 'mountain.n.01', 'name': 'mountain'}, {'id': 14563, 'synset': 'mountainside.n.01', 'name': 'mountainside'}, {'id': 14564, 'synset': 'mouth.n.04', 'name': 'mouth'}, {'id': 14565, 'synset': 'mull.n.01', 'name': 'mull'}, {'id': 14566, 'synset': 'natural_depression.n.01', 'name': 'natural_depression'}, {'id': 14567, 'synset': 'natural_elevation.n.01', 'name': 'natural_elevation'}, {'id': 14568, 'synset': 'nullah.n.01', 'name': 'nullah'}, {'id': 14569, 'synset': 'ocean.n.01', 'name': 'ocean'}, {'id': 14570, 'synset': 'ocean_floor.n.01', 'name': 'ocean_floor'}, {'id': 14571, 'synset': 'oceanfront.n.01', 'name': 'oceanfront'}, {'id': 14572, 'synset': 'outcrop.n.01', 'name': 'outcrop'}, {'id': 14573, 'synset': 'oxbow.n.01', 'name': 'oxbow'}, {'id': 14574, 'synset': 'pallasite.n.01', 'name': 'pallasite'}, {'id': 14575, 'synset': 'perforation.n.02', 'name': 'perforation'}, {'id': 14576, 'synset': 'photosphere.n.01', 'name': 'photosphere'}, {'id': 14577, 'synset': 'piedmont.n.02', 'name': 'piedmont'}, {'id': 14578, 'synset': 'piedmont_glacier.n.01', 'name': 'Piedmont_glacier'}, {'id': 14579, 'synset': 'pinetum.n.01', 'name': 'pinetum'}, {'id': 14580, 'synset': 'plage.n.01', 'name': 'plage'}, {'id': 14581, 'synset': 'plain.n.01', 'name': 'plain'}, {'id': 14582, 'synset': 'point.n.11', 'name': 'point'}, {'id': 14583, 'synset': 'polar_glacier.n.01', 'name': 'polar_glacier'}, {'id': 14584, 'synset': 'pothole.n.01', 'name': 'pothole'}, {'id': 14585, 'synset': 'precipice.n.01', 'name': 'precipice'}, {'id': 14586, 'synset': 'promontory.n.01', 'name': 'promontory'}, {'id': 14587, 'synset': 'ptyalith.n.01', 'name': 'ptyalith'}, {'id': 14588, 'synset': 'pulsar.n.01', 'name': 'pulsar'}, {'id': 14589, 'synset': 'quicksand.n.02', 'name': 'quicksand'}, {'id': 14590, 'synset': 'rabbit_burrow.n.01', 'name': 'rabbit_burrow'}, {'id': 14591, 'synset': 'radiator.n.01', 'name': 'radiator'}, {'id': 14592, 'synset': 'rainbow.n.01', 'name': 'rainbow'}, {'id': 14593, 'synset': 'range.n.04', 'name': 'range'}, {'id': 14594, 'synset': 'rangeland.n.01', 'name': 'rangeland'}, {'id': 14595, 'synset': 'ravine.n.01', 'name': 'ravine'}, {'id': 14596, 'synset': 'reef.n.01', 'name': 'reef'}, {'id': 14597, 'synset': 'ridge.n.01', 'name': 'ridge'}, {'id': 14598, 'synset': 'ridge.n.04', 'name': 'ridge'}, {'id': 14599, 'synset': 'rift_valley.n.01', 'name': 'rift_valley'}, {'id': 14600, 'synset': 'riparian_forest.n.01', 'name': 'riparian_forest'}, {'id': 14601, 'synset': 'ripple_mark.n.01', 'name': 'ripple_mark'}, {'id': 14602, 'synset': 'riverbank.n.01', 'name': 'riverbank'}, {'id': 14603, 'synset': 'riverbed.n.01', 'name': 'riverbed'}, {'id': 14604, 'synset': 'rock.n.01', 'name': 'rock'}, {'id': 14605, 'synset': 'roof.n.03', 'name': 'roof'}, {'id': 14606, 'synset': 'saltpan.n.01', 'name': 'saltpan'}, {'id': 14607, 'synset': 'sandbank.n.01', 'name': 'sandbank'}, {'id': 14608, 'synset': 'sandbar.n.01', 'name': 'sandbar'}, {'id': 14609, 'synset': 'sandpit.n.01', 'name': 'sandpit'}, {'id': 14610, 'synset': 'sanitary_landfill.n.01', 'name': 'sanitary_landfill'}, {'id': 14611, 'synset': 'sawpit.n.01', 'name': 'sawpit'}, {'id': 14612, 'synset': 'scablands.n.01', 'name': 'scablands'}, {'id': 14613, 'synset': 'seashore.n.01', 'name': 'seashore'}, {'id': 14614, 'synset': 'seaside.n.01', 'name': 'seaside'}, {'id': 14615, 'synset': 'seif_dune.n.01', 'name': 'seif_dune'}, {'id': 14616, 'synset': 'shell.n.06', 'name': 'shell'}, {'id': 14617, 'synset': 'shiner.n.02', 'name': 'shiner'}, {'id': 14618, 'synset': 'shoal.n.01', 'name': 'shoal'}, {'id': 14619, 'synset': 'shore.n.01', 'name': 'shore'}, {'id': 14620, 'synset': 'shoreline.n.01', 'name': 'shoreline'}, {'id': 14621, 'synset': 'sinkhole.n.01', 'name': 'sinkhole'}, {'id': 14622, 'synset': 'ski_slope.n.01', 'name': 'ski_slope'}, {'id': 14623, 'synset': 'sky.n.01', 'name': 'sky'}, {'id': 14624, 'synset': 'slope.n.01', 'name': 'slope'}, {'id': 14625, 'synset': 'snowcap.n.01', 'name': 'snowcap'}, {'id': 14626, 'synset': 'snowdrift.n.01', 'name': 'snowdrift'}, {'id': 14627, 'synset': 'snowfield.n.01', 'name': 'snowfield'}, {'id': 14628, 'synset': 'soapsuds.n.01', 'name': 'soapsuds'}, {'id': 14629, 'synset': 'spit.n.01', 'name': 'spit'}, {'id': 14630, 'synset': 'spoor.n.01', 'name': 'spoor'}, {'id': 14631, 'synset': 'spume.n.01', 'name': 'spume'}, {'id': 14632, 'synset': 'star.n.03', 'name': 'star'}, {'id': 14633, 'synset': 'steep.n.01', 'name': 'steep'}, {'id': 14634, 'synset': 'steppe.n.01', 'name': 'steppe'}, {'id': 14635, 'synset': 'strand.n.05', 'name': 'strand'}, {'id': 14636, 'synset': 'streambed.n.01', 'name': 'streambed'}, {'id': 14637, 'synset': 'sun.n.01', 'name': 'sun'}, {'id': 14638, 'synset': 'supernova.n.01', 'name': 'supernova'}, {'id': 14639, 'synset': 'swale.n.01', 'name': 'swale'}, {'id': 14640, 'synset': 'swamp.n.01', 'name': 'swamp'}, {'id': 14641, 'synset': 'swell.n.02', 'name': 'swell'}, {'id': 14642, 'synset': 'tableland.n.01', 'name': 'tableland'}, {'id': 14643, 'synset': 'talus.n.01', 'name': 'talus'}, {'id': 14644, 'synset': 'tangle.n.01', 'name': 'tangle'}, {'id': 14645, 'synset': 'tar_pit.n.01', 'name': 'tar_pit'}, {'id': 14646, 'synset': 'terrace.n.02', 'name': 'terrace'}, {'id': 14647, 'synset': 'tidal_basin.n.01', 'name': 'tidal_basin'}, {'id': 14648, 'synset': 'tideland.n.01', 'name': 'tideland'}, {'id': 14649, 'synset': 'tor.n.02', 'name': 'tor'}, {'id': 14650, 'synset': 'tor.n.01', 'name': 'tor'}, {'id': 14651, 'synset': 'trapezium.n.02', 'name': 'Trapezium'}, {'id': 14652, 'synset': 'troposphere.n.01', 'name': 'troposphere'}, {'id': 14653, 'synset': 'tundra.n.01', 'name': 'tundra'}, {'id': 14654, 'synset': 'twinkler.n.01', 'name': 'twinkler'}, {'id': 14655, 'synset': 'uphill.n.01', 'name': 'uphill'}, {'id': 14656, 'synset': 'urolith.n.01', 'name': 'urolith'}, {'id': 14657, 'synset': 'valley.n.01', 'name': 'valley'}, {'id': 14658, 'synset': 'vehicle-borne_transmission.n.01', 'name': 'vehicle-borne_transmission'}, {'id': 14659, 'synset': 'vein.n.04', 'name': 'vein'}, {'id': 14660, 'synset': 'volcanic_crater.n.01', 'name': 'volcanic_crater'}, {'id': 14661, 'synset': 'volcano.n.02', 'name': 'volcano'}, {'id': 14662, 'synset': 'wadi.n.01', 'name': 'wadi'}, {'id': 14663, 'synset': 'wall.n.05', 'name': 'wall'}, {'id': 14664, 'synset': 'warren.n.03', 'name': 'warren'}, {'id': 14665, 'synset': "wasp's_nest.n.01", 'name': "wasp's_nest"}, {'id': 14666, 'synset': 'watercourse.n.01', 'name': 'watercourse'}, {'id': 14667, 'synset': 'waterside.n.01', 'name': 'waterside'}, {'id': 14668, 'synset': 'water_table.n.01', 'name': 'water_table'}, {'id': 14669, 'synset': 'whinstone.n.01', 'name': 'whinstone'}, {'id': 14670, 'synset': 'wormcast.n.02', 'name': 'wormcast'}, {'id': 14671, 'synset': 'xenolith.n.01', 'name': 'xenolith'}, {'id': 14672, 'synset': 'circe.n.01', 'name': 'Circe'}, {'id': 14673, 'synset': 'gryphon.n.01', 'name': 'gryphon'}, {'id': 14674, 'synset': 'spiritual_leader.n.01', 'name': 'spiritual_leader'}, {'id': 14675, 'synset': 'messiah.n.01', 'name': 'messiah'}, {'id': 14676, 'synset': 'rhea_silvia.n.01', 'name': 'Rhea_Silvia'}, {'id': 14677, 'synset': 'number_one.n.01', 'name': 'number_one'}, {'id': 14678, 'synset': 'adventurer.n.01', 'name': 'adventurer'}, {'id': 14679, 'synset': 'anomaly.n.02', 'name': 'anomaly'}, {'id': 14680, 'synset': 'appointee.n.02', 'name': 'appointee'}, {'id': 14681, 'synset': 'argonaut.n.01', 'name': 'argonaut'}, {'id': 14682, 'synset': 'ashkenazi.n.01', 'name': 'Ashkenazi'}, {'id': 14683, 'synset': 'benefactor.n.01', 'name': 'benefactor'}, {'id': 14684, 'synset': 'color-blind_person.n.01', 'name': 'color-blind_person'}, {'id': 14685, 'synset': 'commoner.n.01', 'name': 'commoner'}, {'id': 14686, 'synset': 'conservator.n.02', 'name': 'conservator'}, {'id': 14687, 'synset': 'contrarian.n.01', 'name': 'contrarian'}, {'id': 14688, 'synset': 'contadino.n.01', 'name': 'contadino'}, {'id': 14689, 'synset': 'contestant.n.01', 'name': 'contestant'}, {'id': 14690, 'synset': 'cosigner.n.01', 'name': 'cosigner'}, {'id': 14691, 'synset': 'discussant.n.01', 'name': 'discussant'}, {'id': 14692, 'synset': 'enologist.n.01', 'name': 'enologist'}, {'id': 14693, 'synset': 'entertainer.n.01', 'name': 'entertainer'}, {'id': 14694, 'synset': 'eulogist.n.01', 'name': 'eulogist'}, {'id': 14695, 'synset': 'ex-gambler.n.01', 'name': 'ex-gambler'}, {'id': 14696, 'synset': 'experimenter.n.01', 'name': 'experimenter'}, {'id': 14697, 'synset': 'experimenter.n.02', 'name': 'experimenter'}, {'id': 14698, 'synset': 'exponent.n.02', 'name': 'exponent'}, {'id': 14699, 'synset': 'ex-president.n.01', 'name': 'ex-president'}, {'id': 14700, 'synset': 'face.n.05', 'name': 'face'}, {'id': 14701, 'synset': 'female.n.02', 'name': 'female'}, {'id': 14702, 'synset': 'finisher.n.04', 'name': 'finisher'}, {'id': 14703, 'synset': 'inhabitant.n.01', 'name': 'inhabitant'}, {'id': 14704, 'synset': 'native.n.01', 'name': 'native'}, {'id': 14705, 'synset': 'native.n.02', 'name': 'native'}, {'id': 14706, 'synset': 'juvenile.n.01', 'name': 'juvenile'}, {'id': 14707, 'synset': 'lover.n.01', 'name': 'lover'}, {'id': 14708, 'synset': 'male.n.02', 'name': 'male'}, {'id': 14709, 'synset': 'mediator.n.01', 'name': 'mediator'}, {'id': 14710, 'synset': 'mediatrix.n.01', 'name': 'mediatrix'}, {'id': 14711, 'synset': 'national.n.01', 'name': 'national'}, {'id': 14712, 'synset': 'peer.n.01', 'name': 'peer'}, {'id': 14713, 'synset': 'prize_winner.n.01', 'name': 'prize_winner'}, {'id': 14714, 'synset': 'recipient.n.01', 'name': 'recipient'}, {'id': 14715, 'synset': 'religionist.n.01', 'name': 'religionist'}, {'id': 14716, 'synset': 'sensualist.n.01', 'name': 'sensualist'}, {'id': 14717, 'synset': 'traveler.n.01', 'name': 'traveler'}, {'id': 14718, 'synset': 'unwelcome_person.n.01', 'name': 'unwelcome_person'}, {'id': 14719, 'synset': 'unskilled_person.n.01', 'name': 'unskilled_person'}, {'id': 14720, 'synset': 'worker.n.01', 'name': 'worker'}, {'id': 14721, 'synset': 'wrongdoer.n.01', 'name': 'wrongdoer'}, {'id': 14722, 'synset': 'black_african.n.01', 'name': 'Black_African'}, {'id': 14723, 'synset': 'afrikaner.n.01', 'name': 'Afrikaner'}, {'id': 14724, 'synset': 'aryan.n.01', 'name': 'Aryan'}, {'id': 14725, 'synset': 'black.n.05', 'name': 'Black'}, {'id': 14726, 'synset': 'black_woman.n.01', 'name': 'Black_woman'}, {'id': 14727, 'synset': 'mulatto.n.01', 'name': 'mulatto'}, {'id': 14728, 'synset': 'white.n.01', 'name': 'White'}, {'id': 14729, 'synset': 'circassian.n.01', 'name': 'Circassian'}, {'id': 14730, 'synset': 'semite.n.01', 'name': 'Semite'}, {'id': 14731, 'synset': 'chaldean.n.02', 'name': 'Chaldean'}, {'id': 14732, 'synset': 'elamite.n.01', 'name': 'Elamite'}, {'id': 14733, 'synset': 'white_man.n.01', 'name': 'white_man'}, {'id': 14734, 'synset': 'wasp.n.01', 'name': 'WASP'}, {'id': 14735, 'synset': 'gook.n.02', 'name': 'gook'}, {'id': 14736, 'synset': 'mongol.n.01', 'name': 'Mongol'}, {'id': 14737, 'synset': 'tatar.n.01', 'name': 'Tatar'}, {'id': 14738, 'synset': 'nahuatl.n.01', 'name': 'Nahuatl'}, {'id': 14739, 'synset': 'aztec.n.01', 'name': 'Aztec'}, {'id': 14740, 'synset': 'olmec.n.01', 'name': 'Olmec'}, {'id': 14741, 'synset': 'biloxi.n.01', 'name': 'Biloxi'}, {'id': 14742, 'synset': 'blackfoot.n.01', 'name': 'Blackfoot'}, {'id': 14743, 'synset': 'brule.n.01', 'name': 'Brule'}, {'id': 14744, 'synset': 'caddo.n.01', 'name': 'Caddo'}, {'id': 14745, 'synset': 'cheyenne.n.03', 'name': 'Cheyenne'}, {'id': 14746, 'synset': 'chickasaw.n.01', 'name': 'Chickasaw'}, {'id': 14747, 'synset': 'cocopa.n.01', 'name': 'Cocopa'}, {'id': 14748, 'synset': 'comanche.n.01', 'name': 'Comanche'}, {'id': 14749, 'synset': 'creek.n.02', 'name': 'Creek'}, {'id': 14750, 'synset': 'delaware.n.02', 'name': 'Delaware'}, {'id': 14751, 'synset': 'diegueno.n.01', 'name': 'Diegueno'}, {'id': 14752, 'synset': 'esselen.n.01', 'name': 'Esselen'}, {'id': 14753, 'synset': 'eyeish.n.01', 'name': 'Eyeish'}, {'id': 14754, 'synset': 'havasupai.n.01', 'name': 'Havasupai'}, {'id': 14755, 'synset': 'hunkpapa.n.01', 'name': 'Hunkpapa'}, {'id': 14756, 'synset': 'iowa.n.01', 'name': 'Iowa'}, {'id': 14757, 'synset': 'kalapooia.n.01', 'name': 'Kalapooia'}, {'id': 14758, 'synset': 'kamia.n.01', 'name': 'Kamia'}, {'id': 14759, 'synset': 'kekchi.n.01', 'name': 'Kekchi'}, {'id': 14760, 'synset': 'kichai.n.01', 'name': 'Kichai'}, {'id': 14761, 'synset': 'kickapoo.n.01', 'name': 'Kickapoo'}, {'id': 14762, 'synset': 'kiliwa.n.01', 'name': 'Kiliwa'}, {'id': 14763, 'synset': 'malecite.n.01', 'name': 'Malecite'}, {'id': 14764, 'synset': 'maricopa.n.01', 'name': 'Maricopa'}, {'id': 14765, 'synset': 'mohican.n.01', 'name': 'Mohican'}, {'id': 14766, 'synset': 'muskhogean.n.01', 'name': 'Muskhogean'}, {'id': 14767, 'synset': 'navaho.n.01', 'name': 'Navaho'}, {'id': 14768, 'synset': 'nootka.n.01', 'name': 'Nootka'}, {'id': 14769, 'synset': 'oglala.n.01', 'name': 'Oglala'}, {'id': 14770, 'synset': 'osage.n.01', 'name': 'Osage'}, {'id': 14771, 'synset': 'oneida.n.01', 'name': 'Oneida'}, {'id': 14772, 'synset': 'paiute.n.01', 'name': 'Paiute'}, {'id': 14773, 'synset': 'passamaquody.n.01', 'name': 'Passamaquody'}, {'id': 14774, 'synset': 'penobscot.n.01', 'name': 'Penobscot'}, {'id': 14775, 'synset': 'penutian.n.02', 'name': 'Penutian'}, {'id': 14776, 'synset': 'potawatomi.n.01', 'name': 'Potawatomi'}, {'id': 14777, 'synset': 'powhatan.n.02', 'name': 'Powhatan'}, {'id': 14778, 'synset': 'kachina.n.02', 'name': 'kachina'}, {'id': 14779, 'synset': 'salish.n.02', 'name': 'Salish'}, {'id': 14780, 'synset': 'shahaptian.n.01', 'name': 'Shahaptian'}, {'id': 14781, 'synset': 'shasta.n.01', 'name': 'Shasta'}, {'id': 14782, 'synset': 'shawnee.n.01', 'name': 'Shawnee'}, {'id': 14783, 'synset': 'sihasapa.n.01', 'name': 'Sihasapa'}, {'id': 14784, 'synset': 'teton.n.01', 'name': 'Teton'}, {'id': 14785, 'synset': 'taracahitian.n.01', 'name': 'Taracahitian'}, {'id': 14786, 'synset': 'tarahumara.n.01', 'name': 'Tarahumara'}, {'id': 14787, 'synset': 'tuscarora.n.01', 'name': 'Tuscarora'}, {'id': 14788, 'synset': 'tutelo.n.01', 'name': 'Tutelo'}, {'id': 14789, 'synset': 'yana.n.01', 'name': 'Yana'}, {'id': 14790, 'synset': 'yavapai.n.01', 'name': 'Yavapai'}, {'id': 14791, 'synset': 'yokuts.n.02', 'name': 'Yokuts'}, {'id': 14792, 'synset': 'yuma.n.01', 'name': 'Yuma'}, {'id': 14793, 'synset': 'gadaba.n.01', 'name': 'Gadaba'}, {'id': 14794, 'synset': 'kolam.n.01', 'name': 'Kolam'}, {'id': 14795, 'synset': 'kui.n.01', 'name': 'Kui'}, {'id': 14796, 'synset': 'toda.n.01', 'name': 'Toda'}, {'id': 14797, 'synset': 'tulu.n.01', 'name': 'Tulu'}, {'id': 14798, 'synset': 'gujarati.n.01', 'name': 'Gujarati'}, {'id': 14799, 'synset': 'kashmiri.n.01', 'name': 'Kashmiri'}, {'id': 14800, 'synset': 'punjabi.n.01', 'name': 'Punjabi'}, {'id': 14801, 'synset': 'slav.n.01', 'name': 'Slav'}, {'id': 14802, 'synset': 'anabaptist.n.01', 'name': 'Anabaptist'}, {'id': 14803, 'synset': 'adventist.n.01', 'name': 'Adventist'}, {'id': 14804, 'synset': 'gentile.n.03', 'name': 'gentile'}, {'id': 14805, 'synset': 'gentile.n.02', 'name': 'gentile'}, {'id': 14806, 'synset': 'catholic.n.01', 'name': 'Catholic'}, {'id': 14807, 'synset': 'old_catholic.n.01', 'name': 'Old_Catholic'}, {'id': 14808, 'synset': 'uniat.n.01', 'name': 'Uniat'}, {'id': 14809, 'synset': 'copt.n.02', 'name': 'Copt'}, {'id': 14810, 'synset': 'jewess.n.01', 'name': 'Jewess'}, {'id': 14811, 'synset': 'jihadist.n.01', 'name': 'Jihadist'}, {'id': 14812, 'synset': 'buddhist.n.01', 'name': 'Buddhist'}, {'id': 14813, 'synset': 'zen_buddhist.n.01', 'name': 'Zen_Buddhist'}, {'id': 14814, 'synset': 'mahayanist.n.01', 'name': 'Mahayanist'}, {'id': 14815, 'synset': 'swami.n.01', 'name': 'swami'}, {'id': 14816, 'synset': 'hare_krishna.n.01', 'name': 'Hare_Krishna'}, {'id': 14817, 'synset': 'shintoist.n.01', 'name': 'Shintoist'}, {'id': 14818, 'synset': 'eurafrican.n.01', 'name': 'Eurafrican'}, {'id': 14819, 'synset': 'eurasian.n.01', 'name': 'Eurasian'}, {'id': 14820, 'synset': 'gael.n.01', 'name': 'Gael'}, {'id': 14821, 'synset': 'frank.n.01', 'name': 'Frank'}, {'id': 14822, 'synset': 'afghan.n.02', 'name': 'Afghan'}, {'id': 14823, 'synset': 'albanian.n.01', 'name': 'Albanian'}, {'id': 14824, 'synset': 'algerian.n.01', 'name': 'Algerian'}, {'id': 14825, 'synset': 'altaic.n.01', 'name': 'Altaic'}, {'id': 14826, 'synset': 'andorran.n.01', 'name': 'Andorran'}, {'id': 14827, 'synset': 'angolan.n.01', 'name': 'Angolan'}, {'id': 14828, 'synset': 'anguillan.n.01', 'name': 'Anguillan'}, {'id': 14829, 'synset': 'austrian.n.01', 'name': 'Austrian'}, {'id': 14830, 'synset': 'bahamian.n.01', 'name': 'Bahamian'}, {'id': 14831, 'synset': 'bahraini.n.01', 'name': 'Bahraini'}, {'id': 14832, 'synset': 'basotho.n.01', 'name': 'Basotho'}, {'id': 14833, 'synset': 'herero.n.01', 'name': 'Herero'}, {'id': 14834, 'synset': 'luba.n.01', 'name': 'Luba'}, {'id': 14835, 'synset': 'barbadian.n.01', 'name': 'Barbadian'}, {'id': 14836, 'synset': 'bolivian.n.01', 'name': 'Bolivian'}, {'id': 14837, 'synset': 'bornean.n.01', 'name': 'Bornean'}, {'id': 14838, 'synset': 'carioca.n.01', 'name': 'Carioca'}, {'id': 14839, 'synset': 'tupi.n.01', 'name': 'Tupi'}, {'id': 14840, 'synset': 'bruneian.n.01', 'name': 'Bruneian'}, {'id': 14841, 'synset': 'bulgarian.n.01', 'name': 'Bulgarian'}, {'id': 14842, 'synset': 'byelorussian.n.01', 'name': 'Byelorussian'}, {'id': 14843, 'synset': 'cameroonian.n.01', 'name': 'Cameroonian'}, {'id': 14844, 'synset': 'canadian.n.01', 'name': 'Canadian'}, {'id': 14845, 'synset': 'french_canadian.n.01', 'name': 'French_Canadian'}, {'id': 14846, 'synset': 'central_american.n.01', 'name': 'Central_American'}, {'id': 14847, 'synset': 'chilean.n.01', 'name': 'Chilean'}, {'id': 14848, 'synset': 'congolese.n.01', 'name': 'Congolese'}, {'id': 14849, 'synset': 'cypriot.n.01', 'name': 'Cypriot'}, {'id': 14850, 'synset': 'dane.n.01', 'name': 'Dane'}, {'id': 14851, 'synset': 'djiboutian.n.01', 'name': 'Djiboutian'}, {'id': 14852, 'synset': 'britisher.n.01', 'name': 'Britisher'}, {'id': 14853, 'synset': 'english_person.n.01', 'name': 'English_person'}, {'id': 14854, 'synset': 'englishwoman.n.01', 'name': 'Englishwoman'}, {'id': 14855, 'synset': 'anglo-saxon.n.02', 'name': 'Anglo-Saxon'}, {'id': 14856, 'synset': 'angle.n.03', 'name': 'Angle'}, {'id': 14857, 'synset': 'west_saxon.n.01', 'name': 'West_Saxon'}, {'id': 14858, 'synset': 'lombard.n.01', 'name': 'Lombard'}, {'id': 14859, 'synset': 'limey.n.01', 'name': 'limey'}, {'id': 14860, 'synset': 'cantabrigian.n.01', 'name': 'Cantabrigian'}, {'id': 14861, 'synset': 'cornishman.n.01', 'name': 'Cornishman'}, {'id': 14862, 'synset': 'cornishwoman.n.01', 'name': 'Cornishwoman'}, {'id': 14863, 'synset': 'lancastrian.n.02', 'name': 'Lancastrian'}, {'id': 14864, 'synset': 'lancastrian.n.01', 'name': 'Lancastrian'}, {'id': 14865, 'synset': 'geordie.n.01', 'name': 'Geordie'}, {'id': 14866, 'synset': 'oxonian.n.01', 'name': 'Oxonian'}, {'id': 14867, 'synset': 'ethiopian.n.01', 'name': 'Ethiopian'}, {'id': 14868, 'synset': 'amhara.n.01', 'name': 'Amhara'}, {'id': 14869, 'synset': 'eritrean.n.01', 'name': 'Eritrean'}, {'id': 14870, 'synset': 'finn.n.01', 'name': 'Finn'}, {'id': 14871, 'synset': 'komi.n.01', 'name': 'Komi'}, {'id': 14872, 'synset': 'livonian.n.01', 'name': 'Livonian'}, {'id': 14873, 'synset': 'lithuanian.n.01', 'name': 'Lithuanian'}, {'id': 14874, 'synset': 'selkup.n.01', 'name': 'Selkup'}, {'id': 14875, 'synset': 'parisian.n.01', 'name': 'Parisian'}, {'id': 14876, 'synset': 'parisienne.n.01', 'name': 'Parisienne'}, {'id': 14877, 'synset': 'creole.n.02', 'name': 'Creole'}, {'id': 14878, 'synset': 'creole.n.01', 'name': 'Creole'}, {'id': 14879, 'synset': 'gabonese.n.01', 'name': 'Gabonese'}, {'id': 14880, 'synset': 'greek.n.02', 'name': 'Greek'}, {'id': 14881, 'synset': 'dorian.n.01', 'name': 'Dorian'}, {'id': 14882, 'synset': 'athenian.n.01', 'name': 'Athenian'}, {'id': 14883, 'synset': 'laconian.n.01', 'name': 'Laconian'}, {'id': 14884, 'synset': 'guyanese.n.01', 'name': 'Guyanese'}, {'id': 14885, 'synset': 'haitian.n.01', 'name': 'Haitian'}, {'id': 14886, 'synset': 'malay.n.01', 'name': 'Malay'}, {'id': 14887, 'synset': 'moro.n.01', 'name': 'Moro'}, {'id': 14888, 'synset': 'netherlander.n.01', 'name': 'Netherlander'}, {'id': 14889, 'synset': 'icelander.n.01', 'name': 'Icelander'}, {'id': 14890, 'synset': 'iraqi.n.01', 'name': 'Iraqi'}, {'id': 14891, 'synset': 'irishman.n.01', 'name': 'Irishman'}, {'id': 14892, 'synset': 'irishwoman.n.01', 'name': 'Irishwoman'}, {'id': 14893, 'synset': 'dubliner.n.01', 'name': 'Dubliner'}, {'id': 14894, 'synset': 'italian.n.01', 'name': 'Italian'}, {'id': 14895, 'synset': 'roman.n.01', 'name': 'Roman'}, {'id': 14896, 'synset': 'sabine.n.02', 'name': 'Sabine'}, {'id': 14897, 'synset': 'japanese.n.01', 'name': 'Japanese'}, {'id': 14898, 'synset': 'jordanian.n.01', 'name': 'Jordanian'}, {'id': 14899, 'synset': 'korean.n.01', 'name': 'Korean'}, {'id': 14900, 'synset': 'kenyan.n.01', 'name': 'Kenyan'}, {'id': 14901, 'synset': 'lao.n.01', 'name': 'Lao'}, {'id': 14902, 'synset': 'lapp.n.01', 'name': 'Lapp'}, {'id': 14903, 'synset': 'latin_american.n.01', 'name': 'Latin_American'}, {'id': 14904, 'synset': 'lebanese.n.01', 'name': 'Lebanese'}, {'id': 14905, 'synset': 'levantine.n.01', 'name': 'Levantine'}, {'id': 14906, 'synset': 'liberian.n.01', 'name': 'Liberian'}, {'id': 14907, 'synset': 'luxemburger.n.01', 'name': 'Luxemburger'}, {'id': 14908, 'synset': 'macedonian.n.01', 'name': 'Macedonian'}, {'id': 14909, 'synset': 'sabahan.n.01', 'name': 'Sabahan'}, {'id': 14910, 'synset': 'mexican.n.01', 'name': 'Mexican'}, {'id': 14911, 'synset': 'chicano.n.01', 'name': 'Chicano'}, {'id': 14912, 'synset': 'mexican-american.n.01', 'name': 'Mexican-American'}, {'id': 14913, 'synset': 'namibian.n.01', 'name': 'Namibian'}, {'id': 14914, 'synset': 'nauruan.n.01', 'name': 'Nauruan'}, {'id': 14915, 'synset': 'gurkha.n.02', 'name': 'Gurkha'}, {'id': 14916, 'synset': 'new_zealander.n.01', 'name': 'New_Zealander'}, {'id': 14917, 'synset': 'nicaraguan.n.01', 'name': 'Nicaraguan'}, {'id': 14918, 'synset': 'nigerian.n.01', 'name': 'Nigerian'}, {'id': 14919, 'synset': 'hausa.n.01', 'name': 'Hausa'}, {'id': 14920, 'synset': 'north_american.n.01', 'name': 'North_American'}, {'id': 14921, 'synset': 'nova_scotian.n.01', 'name': 'Nova_Scotian'}, {'id': 14922, 'synset': 'omani.n.01', 'name': 'Omani'}, {'id': 14923, 'synset': 'pakistani.n.01', 'name': 'Pakistani'}, {'id': 14924, 'synset': 'brahui.n.01', 'name': 'Brahui'}, {'id': 14925, 'synset': 'south_american_indian.n.01', 'name': 'South_American_Indian'}, {'id': 14926, 'synset': 'carib.n.01', 'name': 'Carib'}, {'id': 14927, 'synset': 'filipino.n.01', 'name': 'Filipino'}, {'id': 14928, 'synset': 'polynesian.n.01', 'name': 'Polynesian'}, {'id': 14929, 'synset': 'qatari.n.01', 'name': 'Qatari'}, {'id': 14930, 'synset': 'romanian.n.01', 'name': 'Romanian'}, {'id': 14931, 'synset': 'muscovite.n.02', 'name': 'Muscovite'}, {'id': 14932, 'synset': 'georgian.n.02', 'name': 'Georgian'}, {'id': 14933, 'synset': 'sarawakian.n.01', 'name': 'Sarawakian'}, {'id': 14934, 'synset': 'scandinavian.n.01', 'name': 'Scandinavian'}, {'id': 14935, 'synset': 'senegalese.n.01', 'name': 'Senegalese'}, {'id': 14936, 'synset': 'slovene.n.01', 'name': 'Slovene'}, {'id': 14937, 'synset': 'south_african.n.01', 'name': 'South_African'}, {'id': 14938, 'synset': 'south_american.n.01', 'name': 'South_American'}, {'id': 14939, 'synset': 'sudanese.n.01', 'name': 'Sudanese'}, {'id': 14940, 'synset': 'syrian.n.01', 'name': 'Syrian'}, {'id': 14941, 'synset': 'tahitian.n.01', 'name': 'Tahitian'}, {'id': 14942, 'synset': 'tanzanian.n.01', 'name': 'Tanzanian'}, {'id': 14943, 'synset': 'tibetan.n.02', 'name': 'Tibetan'}, {'id': 14944, 'synset': 'togolese.n.01', 'name': 'Togolese'}, {'id': 14945, 'synset': 'tuareg.n.01', 'name': 'Tuareg'}, {'id': 14946, 'synset': 'turki.n.01', 'name': 'Turki'}, {'id': 14947, 'synset': 'chuvash.n.01', 'name': 'Chuvash'}, {'id': 14948, 'synset': 'turkoman.n.01', 'name': 'Turkoman'}, {'id': 14949, 'synset': 'uzbek.n.01', 'name': 'Uzbek'}, {'id': 14950, 'synset': 'ugandan.n.01', 'name': 'Ugandan'}, {'id': 14951, 'synset': 'ukranian.n.01', 'name': 'Ukranian'}, {'id': 14952, 'synset': 'yakut.n.01', 'name': 'Yakut'}, {'id': 14953, 'synset': 'tungus.n.01', 'name': 'Tungus'}, {'id': 14954, 'synset': 'igbo.n.01', 'name': 'Igbo'}, {'id': 14955, 'synset': 'american.n.03', 'name': 'American'}, {'id': 14956, 'synset': 'anglo-american.n.01', 'name': 'Anglo-American'}, {'id': 14957, 'synset': 'alaska_native.n.01', 'name': 'Alaska_Native'}, {'id': 14958, 'synset': 'arkansan.n.01', 'name': 'Arkansan'}, {'id': 14959, 'synset': 'carolinian.n.01', 'name': 'Carolinian'}, {'id': 14960, 'synset': 'coloradan.n.01', 'name': 'Coloradan'}, {'id': 14961, 'synset': 'connecticuter.n.01', 'name': 'Connecticuter'}, {'id': 14962, 'synset': 'delawarean.n.01', 'name': 'Delawarean'}, {'id': 14963, 'synset': 'floridian.n.01', 'name': 'Floridian'}, {'id': 14964, 'synset': 'german_american.n.01', 'name': 'German_American'}, {'id': 14965, 'synset': 'illinoisan.n.01', 'name': 'Illinoisan'}, {'id': 14966, 'synset': 'mainer.n.01', 'name': 'Mainer'}, {'id': 14967, 'synset': 'marylander.n.01', 'name': 'Marylander'}, {'id': 14968, 'synset': 'minnesotan.n.01', 'name': 'Minnesotan'}, {'id': 14969, 'synset': 'nebraskan.n.01', 'name': 'Nebraskan'}, {'id': 14970, 'synset': 'new_hampshirite.n.01', 'name': 'New_Hampshirite'}, {'id': 14971, 'synset': 'new_jerseyan.n.01', 'name': 'New_Jerseyan'}, {'id': 14972, 'synset': 'new_yorker.n.01', 'name': 'New_Yorker'}, {'id': 14973, 'synset': 'north_carolinian.n.01', 'name': 'North_Carolinian'}, {'id': 14974, 'synset': 'oregonian.n.01', 'name': 'Oregonian'}, {'id': 14975, 'synset': 'pennsylvanian.n.02', 'name': 'Pennsylvanian'}, {'id': 14976, 'synset': 'texan.n.01', 'name': 'Texan'}, {'id': 14977, 'synset': 'utahan.n.01', 'name': 'Utahan'}, {'id': 14978, 'synset': 'uruguayan.n.01', 'name': 'Uruguayan'}, {'id': 14979, 'synset': 'vietnamese.n.01', 'name': 'Vietnamese'}, {'id': 14980, 'synset': 'gambian.n.01', 'name': 'Gambian'}, {'id': 14981, 'synset': 'east_german.n.01', 'name': 'East_German'}, {'id': 14982, 'synset': 'berliner.n.01', 'name': 'Berliner'}, {'id': 14983, 'synset': 'prussian.n.01', 'name': 'Prussian'}, {'id': 14984, 'synset': 'ghanian.n.01', 'name': 'Ghanian'}, {'id': 14985, 'synset': 'guinean.n.01', 'name': 'Guinean'}, {'id': 14986, 'synset': 'papuan.n.01', 'name': 'Papuan'}, {'id': 14987, 'synset': 'walloon.n.01', 'name': 'Walloon'}, {'id': 14988, 'synset': 'yemeni.n.01', 'name': 'Yemeni'}, {'id': 14989, 'synset': 'yugoslav.n.01', 'name': 'Yugoslav'}, {'id': 14990, 'synset': 'serbian.n.01', 'name': 'Serbian'}, {'id': 14991, 'synset': 'xhosa.n.01', 'name': 'Xhosa'}, {'id': 14992, 'synset': 'zairese.n.01', 'name': 'Zairese'}, {'id': 14993, 'synset': 'zimbabwean.n.01', 'name': 'Zimbabwean'}, {'id': 14994, 'synset': 'zulu.n.01', 'name': 'Zulu'}, {'id': 14995, 'synset': 'gemini.n.01', 'name': 'Gemini'}, {'id': 14996, 'synset': 'sagittarius.n.01', 'name': 'Sagittarius'}, {'id': 14997, 'synset': 'pisces.n.02', 'name': 'Pisces'}, {'id': 14998, 'synset': 'abbe.n.01', 'name': 'abbe'}, {'id': 14999, 'synset': 'abbess.n.01', 'name': 'abbess'}, {'id': 15000, 'synset': 'abnegator.n.01', 'name': 'abnegator'}, {'id': 15001, 'synset': 'abridger.n.01', 'name': 'abridger'}, {'id': 15002, 'synset': 'abstractor.n.01', 'name': 'abstractor'}, {'id': 15003, 'synset': 'absconder.n.01', 'name': 'absconder'}, {'id': 15004, 'synset': 'absolver.n.01', 'name': 'absolver'}, {'id': 15005, 'synset': 'abecedarian.n.01', 'name': 'abecedarian'}, {'id': 15006, 'synset': 'aberrant.n.01', 'name': 'aberrant'}, {'id': 15007, 'synset': 'abettor.n.01', 'name': 'abettor'}, {'id': 15008, 'synset': 'abhorrer.n.01', 'name': 'abhorrer'}, {'id': 15009, 'synset': 'abomination.n.01', 'name': 'abomination'}, {'id': 15010, 'synset': 'abseiler.n.01', 'name': 'abseiler'}, {'id': 15011, 'synset': 'abstainer.n.01', 'name': 'abstainer'}, {'id': 15012, 'synset': 'academic_administrator.n.01', 'name': 'academic_administrator'}, {'id': 15013, 'synset': 'academician.n.01', 'name': 'academician'}, {'id': 15014, 'synset': 'accessory_before_the_fact.n.01', 'name': 'accessory_before_the_fact'}, {'id': 15015, 'synset': 'companion.n.03', 'name': 'companion'}, {'id': 15016, 'synset': 'accompanist.n.01', 'name': 'accompanist'}, {'id': 15017, 'synset': 'accomplice.n.01', 'name': 'accomplice'}, {'id': 15018, 'synset': 'account_executive.n.01', 'name': 'account_executive'}, {'id': 15019, 'synset': 'accused.n.01', 'name': 'accused'}, {'id': 15020, 'synset': 'accuser.n.01', 'name': 'accuser'}, {'id': 15021, 'synset': 'acid_head.n.01', 'name': 'acid_head'}, {'id': 15022, 'synset': 'acquaintance.n.03', 'name': 'acquaintance'}, {'id': 15023, 'synset': 'acquirer.n.01', 'name': 'acquirer'}, {'id': 15024, 'synset': 'aerialist.n.01', 'name': 'aerialist'}, {'id': 15025, 'synset': 'action_officer.n.01', 'name': 'action_officer'}, {'id': 15026, 'synset': 'active.n.03', 'name': 'active'}, {'id': 15027, 'synset': 'active_citizen.n.01', 'name': 'active_citizen'}, {'id': 15028, 'synset': 'actor.n.01', 'name': 'actor'}, {'id': 15029, 'synset': 'actor.n.02', 'name': 'actor'}, {'id': 15030, 'synset': 'addict.n.01', 'name': 'addict'}, {'id': 15031, 'synset': 'adducer.n.01', 'name': 'adducer'}, {'id': 15032, 'synset': 'adjuster.n.01', 'name': 'adjuster'}, {'id': 15033, 'synset': 'adjutant.n.01', 'name': 'adjutant'}, {'id': 15034, 'synset': 'adjutant_general.n.01', 'name': 'adjutant_general'}, {'id': 15035, 'synset': 'admirer.n.03', 'name': 'admirer'}, {'id': 15036, 'synset': 'adoptee.n.01', 'name': 'adoptee'}, {'id': 15037, 'synset': 'adulterer.n.01', 'name': 'adulterer'}, {'id': 15038, 'synset': 'adulteress.n.01', 'name': 'adulteress'}, {'id': 15039, 'synset': 'advertiser.n.01', 'name': 'advertiser'}, {'id': 15040, 'synset': 'advisee.n.01', 'name': 'advisee'}, {'id': 15041, 'synset': 'advocate.n.01', 'name': 'advocate'}, {'id': 15042, 'synset': 'aeronautical_engineer.n.01', 'name': 'aeronautical_engineer'}, {'id': 15043, 'synset': 'affiliate.n.01', 'name': 'affiliate'}, {'id': 15044, 'synset': 'affluent.n.01', 'name': 'affluent'}, {'id': 15045, 'synset': 'aficionado.n.02', 'name': 'aficionado'}, {'id': 15046, 'synset': 'buck_sergeant.n.01', 'name': 'buck_sergeant'}, {'id': 15047, 'synset': 'agent-in-place.n.01', 'name': 'agent-in-place'}, {'id': 15048, 'synset': 'aggravator.n.01', 'name': 'aggravator'}, {'id': 15049, 'synset': 'agitator.n.01', 'name': 'agitator'}, {'id': 15050, 'synset': 'agnostic.n.02', 'name': 'agnostic'}, {'id': 15051, 'synset': 'agnostic.n.01', 'name': 'agnostic'}, {'id': 15052, 'synset': 'agonist.n.02', 'name': 'agonist'}, {'id': 15053, 'synset': 'agony_aunt.n.01', 'name': 'agony_aunt'}, {'id': 15054, 'synset': 'agriculturist.n.01', 'name': 'agriculturist'}, {'id': 15055, 'synset': 'air_attache.n.01', 'name': 'air_attache'}, {'id': 15056, 'synset': 'air_force_officer.n.01', 'name': 'air_force_officer'}, {'id': 15057, 'synset': 'airhead.n.01', 'name': 'airhead'}, {'id': 15058, 'synset': 'air_traveler.n.01', 'name': 'air_traveler'}, {'id': 15059, 'synset': 'alarmist.n.01', 'name': 'alarmist'}, {'id': 15060, 'synset': 'albino.n.01', 'name': 'albino'}, {'id': 15061, 'synset': 'alcoholic.n.01', 'name': 'alcoholic'}, {'id': 15062, 'synset': 'alderman.n.01', 'name': 'alderman'}, {'id': 15063, 'synset': 'alexic.n.01', 'name': 'alexic'}, {'id': 15064, 'synset': 'alienee.n.01', 'name': 'alienee'}, {'id': 15065, 'synset': 'alienor.n.01', 'name': 'alienor'}, {'id': 15066, 'synset': 'aliterate.n.01', 'name': 'aliterate'}, {'id': 15067, 'synset': 'algebraist.n.01', 'name': 'algebraist'}, {'id': 15068, 'synset': 'allegorizer.n.01', 'name': 'allegorizer'}, {'id': 15069, 'synset': 'alliterator.n.01', 'name': 'alliterator'}, {'id': 15070, 'synset': 'almoner.n.01', 'name': 'almoner'}, {'id': 15071, 'synset': 'alpinist.n.01', 'name': 'alpinist'}, {'id': 15072, 'synset': 'altar_boy.n.01', 'name': 'altar_boy'}, {'id': 15073, 'synset': 'alto.n.01', 'name': 'alto'}, {'id': 15074, 'synset': 'ambassador.n.01', 'name': 'ambassador'}, {'id': 15075, 'synset': 'ambassador.n.02', 'name': 'ambassador'}, {'id': 15076, 'synset': 'ambusher.n.01', 'name': 'ambusher'}, {'id': 15077, 'synset': 'amicus_curiae.n.01', 'name': 'amicus_curiae'}, {'id': 15078, 'synset': 'amoralist.n.01', 'name': 'amoralist'}, {'id': 15079, 'synset': 'amputee.n.01', 'name': 'amputee'}, {'id': 15080, 'synset': 'analogist.n.01', 'name': 'analogist'}, {'id': 15081, 'synset': 'analphabet.n.01', 'name': 'analphabet'}, {'id': 15082, 'synset': 'analyst.n.01', 'name': 'analyst'}, {'id': 15083, 'synset': 'industry_analyst.n.01', 'name': 'industry_analyst'}, {'id': 15084, 'synset': 'market_strategist.n.01', 'name': 'market_strategist'}, {'id': 15085, 'synset': 'anarchist.n.01', 'name': 'anarchist'}, {'id': 15086, 'synset': 'anathema.n.01', 'name': 'anathema'}, {'id': 15087, 'synset': 'ancestor.n.01', 'name': 'ancestor'}, {'id': 15088, 'synset': 'anchor.n.03', 'name': 'anchor'}, {'id': 15089, 'synset': 'ancient.n.02', 'name': 'ancient'}, {'id': 15090, 'synset': 'anecdotist.n.01', 'name': 'anecdotist'}, {'id': 15091, 'synset': 'angler.n.02', 'name': 'angler'}, {'id': 15092, 'synset': 'animator.n.02', 'name': 'animator'}, {'id': 15093, 'synset': 'animist.n.01', 'name': 'animist'}, {'id': 15094, 'synset': 'annotator.n.01', 'name': 'annotator'}, {'id': 15095, 'synset': 'announcer.n.02', 'name': 'announcer'}, {'id': 15096, 'synset': 'announcer.n.01', 'name': 'announcer'}, {'id': 15097, 'synset': 'anti.n.01', 'name': 'anti'}, {'id': 15098, 'synset': 'anti-american.n.01', 'name': 'anti-American'}, {'id': 15099, 'synset': 'anti-semite.n.01', 'name': 'anti-Semite'}, {'id': 15100, 'synset': 'anzac.n.01', 'name': 'Anzac'}, {'id': 15101, 'synset': 'ape-man.n.02', 'name': 'ape-man'}, {'id': 15102, 'synset': 'aphakic.n.01', 'name': 'aphakic'}, {'id': 15103, 'synset': 'appellant.n.01', 'name': 'appellant'}, {'id': 15104, 'synset': 'appointee.n.01', 'name': 'appointee'}, {'id': 15105, 'synset': 'apprehender.n.02', 'name': 'apprehender'}, {'id': 15106, 'synset': 'april_fool.n.01', 'name': 'April_fool'}, {'id': 15107, 'synset': 'aspirant.n.01', 'name': 'aspirant'}, {'id': 15108, 'synset': 'appreciator.n.01', 'name': 'appreciator'}, {'id': 15109, 'synset': 'appropriator.n.01', 'name': 'appropriator'}, {'id': 15110, 'synset': 'arabist.n.01', 'name': 'Arabist'}, {'id': 15111, 'synset': 'archaist.n.01', 'name': 'archaist'}, {'id': 15112, 'synset': 'archbishop.n.01', 'name': 'archbishop'}, {'id': 15113, 'synset': 'archer.n.01', 'name': 'archer'}, {'id': 15114, 'synset': 'architect.n.01', 'name': 'architect'}, {'id': 15115, 'synset': 'archivist.n.01', 'name': 'archivist'}, {'id': 15116, 'synset': 'archpriest.n.01', 'name': 'archpriest'}, {'id': 15117, 'synset': 'aristotelian.n.01', 'name': 'Aristotelian'}, {'id': 15118, 'synset': 'armiger.n.02', 'name': 'armiger'}, {'id': 15119, 'synset': 'army_attache.n.01', 'name': 'army_attache'}, {'id': 15120, 'synset': 'army_engineer.n.01', 'name': 'army_engineer'}, {'id': 15121, 'synset': 'army_officer.n.01', 'name': 'army_officer'}, {'id': 15122, 'synset': 'arranger.n.02', 'name': 'arranger'}, {'id': 15123, 'synset': 'arrival.n.03', 'name': 'arrival'}, {'id': 15124, 'synset': 'arthritic.n.01', 'name': 'arthritic'}, {'id': 15125, 'synset': 'articulator.n.01', 'name': 'articulator'}, {'id': 15126, 'synset': 'artilleryman.n.01', 'name': 'artilleryman'}, {'id': 15127, 'synset': "artist's_model.n.01", 'name': "artist's_model"}, {'id': 15128, 'synset': 'assayer.n.01', 'name': 'assayer'}, {'id': 15129, 'synset': 'assemblyman.n.01', 'name': 'assemblyman'}, {'id': 15130, 'synset': 'assemblywoman.n.01', 'name': 'assemblywoman'}, {'id': 15131, 'synset': 'assenter.n.01', 'name': 'assenter'}, {'id': 15132, 'synset': 'asserter.n.01', 'name': 'asserter'}, {'id': 15133, 'synset': 'assignee.n.01', 'name': 'assignee'}, {'id': 15134, 'synset': 'assistant.n.01', 'name': 'assistant'}, {'id': 15135, 'synset': 'assistant_professor.n.01', 'name': 'assistant_professor'}, {'id': 15136, 'synset': 'associate.n.01', 'name': 'associate'}, {'id': 15137, 'synset': 'associate.n.03', 'name': 'associate'}, {'id': 15138, 'synset': 'associate_professor.n.01', 'name': 'associate_professor'}, {'id': 15139, 'synset': 'astronaut.n.01', 'name': 'astronaut'}, {'id': 15140, 'synset': 'cosmographer.n.01', 'name': 'cosmographer'}, {'id': 15141, 'synset': 'atheist.n.01', 'name': 'atheist'}, {'id': 15142, 'synset': 'athlete.n.01', 'name': 'athlete'}, {'id': 15143, 'synset': 'attendant.n.01', 'name': 'attendant'}, {'id': 15144, 'synset': 'attorney_general.n.01', 'name': 'attorney_general'}, {'id': 15145, 'synset': 'auditor.n.02', 'name': 'auditor'}, {'id': 15146, 'synset': 'augur.n.01', 'name': 'augur'}, {'id': 15147, 'synset': 'aunt.n.01', 'name': 'aunt'}, {'id': 15148, 'synset': 'au_pair_girl.n.01', 'name': 'au_pair_girl'}, {'id': 15149, 'synset': 'authoritarian.n.01', 'name': 'authoritarian'}, {'id': 15150, 'synset': 'authority.n.02', 'name': 'authority'}, {'id': 15151, 'synset': 'authorizer.n.01', 'name': 'authorizer'}, {'id': 15152, 'synset': 'automobile_mechanic.n.01', 'name': 'automobile_mechanic'}, {'id': 15153, 'synset': 'aviator.n.01', 'name': 'aviator'}, {'id': 15154, 'synset': 'aviatrix.n.01', 'name': 'aviatrix'}, {'id': 15155, 'synset': 'ayah.n.01', 'name': 'ayah'}, {'id': 15156, 'synset': 'babu.n.01', 'name': 'babu'}, {'id': 15157, 'synset': 'baby.n.05', 'name': 'baby'}, {'id': 15158, 'synset': 'baby.n.04', 'name': 'baby'}, {'id': 15159, 'synset': 'baby_boomer.n.01', 'name': 'baby_boomer'}, {'id': 15160, 'synset': 'baby_farmer.n.01', 'name': 'baby_farmer'}, {'id': 15161, 'synset': 'back.n.04', 'name': 'back'}, {'id': 15162, 'synset': 'backbencher.n.01', 'name': 'backbencher'}, {'id': 15163, 'synset': 'backpacker.n.01', 'name': 'backpacker'}, {'id': 15164, 'synset': 'backroom_boy.n.01', 'name': 'backroom_boy'}, {'id': 15165, 'synset': 'backscratcher.n.01', 'name': 'backscratcher'}, {'id': 15166, 'synset': 'bad_person.n.01', 'name': 'bad_person'}, {'id': 15167, 'synset': 'baggage.n.02', 'name': 'baggage'}, {'id': 15168, 'synset': 'bag_lady.n.01', 'name': 'bag_lady'}, {'id': 15169, 'synset': 'bailee.n.01', 'name': 'bailee'}, {'id': 15170, 'synset': 'bailiff.n.01', 'name': 'bailiff'}, {'id': 15171, 'synset': 'bailor.n.01', 'name': 'bailor'}, {'id': 15172, 'synset': 'bairn.n.01', 'name': 'bairn'}, {'id': 15173, 'synset': 'baker.n.02', 'name': 'baker'}, {'id': 15174, 'synset': 'balancer.n.01', 'name': 'balancer'}, {'id': 15175, 'synset': 'balker.n.01', 'name': 'balker'}, {'id': 15176, 'synset': 'ball-buster.n.01', 'name': 'ball-buster'}, {'id': 15177, 'synset': 'ball_carrier.n.01', 'name': 'ball_carrier'}, {'id': 15178, 'synset': 'ballet_dancer.n.01', 'name': 'ballet_dancer'}, {'id': 15179, 'synset': 'ballet_master.n.01', 'name': 'ballet_master'}, {'id': 15180, 'synset': 'ballet_mistress.n.01', 'name': 'ballet_mistress'}, {'id': 15181, 'synset': 'balletomane.n.01', 'name': 'balletomane'}, {'id': 15182, 'synset': 'ball_hawk.n.01', 'name': 'ball_hawk'}, {'id': 15183, 'synset': 'balloonist.n.01', 'name': 'balloonist'}, {'id': 15184, 'synset': 'ballplayer.n.01', 'name': 'ballplayer'}, {'id': 15185, 'synset': 'bullfighter.n.01', 'name': 'bullfighter'}, {'id': 15186, 'synset': 'banderillero.n.01', 'name': 'banderillero'}, {'id': 15187, 'synset': 'matador.n.01', 'name': 'matador'}, {'id': 15188, 'synset': 'picador.n.01', 'name': 'picador'}, {'id': 15189, 'synset': 'bandsman.n.01', 'name': 'bandsman'}, {'id': 15190, 'synset': 'banker.n.02', 'name': 'banker'}, {'id': 15191, 'synset': 'bank_robber.n.01', 'name': 'bank_robber'}, {'id': 15192, 'synset': 'bankrupt.n.01', 'name': 'bankrupt'}, {'id': 15193, 'synset': 'bantamweight.n.01', 'name': 'bantamweight'}, {'id': 15194, 'synset': 'barmaid.n.01', 'name': 'barmaid'}, {'id': 15195, 'synset': 'baron.n.03', 'name': 'baron'}, {'id': 15196, 'synset': 'baron.n.02', 'name': 'baron'}, {'id': 15197, 'synset': 'baron.n.01', 'name': 'baron'}, {'id': 15198, 'synset': 'bartender.n.01', 'name': 'bartender'}, {'id': 15199, 'synset': 'baseball_coach.n.01', 'name': 'baseball_coach'}, {'id': 15200, 'synset': 'base_runner.n.01', 'name': 'base_runner'}, {'id': 15201, 'synset': 'basketball_player.n.01', 'name': 'basketball_player'}, {'id': 15202, 'synset': 'basketweaver.n.01', 'name': 'basketweaver'}, {'id': 15203, 'synset': 'basket_maker.n.01', 'name': 'Basket_Maker'}, {'id': 15204, 'synset': 'bass.n.03', 'name': 'bass'}, {'id': 15205, 'synset': 'bastard.n.02', 'name': 'bastard'}, {'id': 15206, 'synset': 'bat_boy.n.01', 'name': 'bat_boy'}, {'id': 15207, 'synset': 'bather.n.02', 'name': 'bather'}, {'id': 15208, 'synset': 'batman.n.01', 'name': 'batman'}, {'id': 15209, 'synset': 'baton_twirler.n.01', 'name': 'baton_twirler'}, {'id': 15210, 'synset': 'bavarian.n.01', 'name': 'Bavarian'}, {'id': 15211, 'synset': 'beadsman.n.01', 'name': 'beadsman'}, {'id': 15212, 'synset': 'beard.n.03', 'name': 'beard'}, {'id': 15213, 'synset': 'beatnik.n.01', 'name': 'beatnik'}, {'id': 15214, 'synset': 'beauty_consultant.n.01', 'name': 'beauty_consultant'}, {'id': 15215, 'synset': 'bedouin.n.01', 'name': 'Bedouin'}, {'id': 15216, 'synset': 'bedwetter.n.01', 'name': 'bedwetter'}, {'id': 15217, 'synset': 'beekeeper.n.01', 'name': 'beekeeper'}, {'id': 15218, 'synset': 'beer_drinker.n.01', 'name': 'beer_drinker'}, {'id': 15219, 'synset': 'beggarman.n.01', 'name': 'beggarman'}, {'id': 15220, 'synset': 'beggarwoman.n.01', 'name': 'beggarwoman'}, {'id': 15221, 'synset': 'beldam.n.02', 'name': 'beldam'}, {'id': 15222, 'synset': 'theist.n.01', 'name': 'theist'}, {'id': 15223, 'synset': 'believer.n.01', 'name': 'believer'}, {'id': 15224, 'synset': 'bell_founder.n.01', 'name': 'bell_founder'}, {'id': 15225, 'synset': 'benedick.n.01', 'name': 'benedick'}, {'id': 15226, 'synset': 'berserker.n.01', 'name': 'berserker'}, {'id': 15227, 'synset': 'besieger.n.01', 'name': 'besieger'}, {'id': 15228, 'synset': 'best.n.02', 'name': 'best'}, {'id': 15229, 'synset': 'betrothed.n.01', 'name': 'betrothed'}, {'id': 15230, 'synset': 'big_brother.n.01', 'name': 'Big_Brother'}, {'id': 15231, 'synset': 'bigot.n.01', 'name': 'bigot'}, {'id': 15232, 'synset': 'big_shot.n.01', 'name': 'big_shot'}, {'id': 15233, 'synset': 'big_sister.n.01', 'name': 'big_sister'}, {'id': 15234, 'synset': 'billiard_player.n.01', 'name': 'billiard_player'}, {'id': 15235, 'synset': 'biochemist.n.01', 'name': 'biochemist'}, {'id': 15236, 'synset': 'biographer.n.01', 'name': 'biographer'}, {'id': 15237, 'synset': 'bird_fancier.n.01', 'name': 'bird_fancier'}, {'id': 15238, 'synset': 'birth.n.05', 'name': 'birth'}, {'id': 15239, 'synset': 'birth-control_campaigner.n.01', 'name': 'birth-control_campaigner'}, {'id': 15240, 'synset': 'bisexual.n.01', 'name': 'bisexual'}, {'id': 15241, 'synset': 'black_belt.n.01', 'name': 'black_belt'}, {'id': 15242, 'synset': 'blackmailer.n.01', 'name': 'blackmailer'}, {'id': 15243, 'synset': 'black_muslim.n.01', 'name': 'Black_Muslim'}, {'id': 15244, 'synset': 'blacksmith.n.01', 'name': 'blacksmith'}, {'id': 15245, 'synset': 'blade.n.02', 'name': 'blade'}, {'id': 15246, 'synset': 'blind_date.n.01', 'name': 'blind_date'}, {'id': 15247, 'synset': 'bluecoat.n.01', 'name': 'bluecoat'}, {'id': 15248, 'synset': 'bluestocking.n.01', 'name': 'bluestocking'}, {'id': 15249, 'synset': 'boatbuilder.n.01', 'name': 'boatbuilder'}, {'id': 15250, 'synset': 'boatman.n.01', 'name': 'boatman'}, {'id': 15251, 'synset': 'boatswain.n.01', 'name': 'boatswain'}, {'id': 15252, 'synset': 'bobby.n.01', 'name': 'bobby'}, {'id': 15253, 'synset': 'bodyguard.n.01', 'name': 'bodyguard'}, {'id': 15254, 'synset': 'boffin.n.01', 'name': 'boffin'}, {'id': 15255, 'synset': 'bolshevik.n.01', 'name': 'Bolshevik'}, {'id': 15256, 'synset': 'bolshevik.n.02', 'name': 'Bolshevik'}, {'id': 15257, 'synset': 'bombshell.n.01', 'name': 'bombshell'}, {'id': 15258, 'synset': 'bondman.n.01', 'name': 'bondman'}, {'id': 15259, 'synset': 'bondwoman.n.02', 'name': 'bondwoman'}, {'id': 15260, 'synset': 'bondwoman.n.01', 'name': 'bondwoman'}, {'id': 15261, 'synset': 'bond_servant.n.01', 'name': 'bond_servant'}, {'id': 15262, 'synset': 'book_agent.n.01', 'name': 'book_agent'}, {'id': 15263, 'synset': 'bookbinder.n.01', 'name': 'bookbinder'}, {'id': 15264, 'synset': 'bookkeeper.n.01', 'name': 'bookkeeper'}, {'id': 15265, 'synset': 'bookmaker.n.01', 'name': 'bookmaker'}, {'id': 15266, 'synset': 'bookworm.n.02', 'name': 'bookworm'}, {'id': 15267, 'synset': 'booster.n.03', 'name': 'booster'}, {'id': 15268, 'synset': 'bootblack.n.01', 'name': 'bootblack'}, {'id': 15269, 'synset': 'bootlegger.n.01', 'name': 'bootlegger'}, {'id': 15270, 'synset': 'bootmaker.n.01', 'name': 'bootmaker'}, {'id': 15271, 'synset': 'borderer.n.01', 'name': 'borderer'}, {'id': 15272, 'synset': 'border_patrolman.n.01', 'name': 'border_patrolman'}, {'id': 15273, 'synset': 'botanist.n.01', 'name': 'botanist'}, {'id': 15274, 'synset': 'bottom_feeder.n.01', 'name': 'bottom_feeder'}, {'id': 15275, 'synset': 'boulevardier.n.01', 'name': 'boulevardier'}, {'id': 15276, 'synset': 'bounty_hunter.n.02', 'name': 'bounty_hunter'}, {'id': 15277, 'synset': 'bounty_hunter.n.01', 'name': 'bounty_hunter'}, {'id': 15278, 'synset': 'bourbon.n.03', 'name': 'Bourbon'}, {'id': 15279, 'synset': 'bowler.n.01', 'name': 'bowler'}, {'id': 15280, 'synset': 'slugger.n.02', 'name': 'slugger'}, {'id': 15281, 'synset': 'cub.n.02', 'name': 'cub'}, {'id': 15282, 'synset': 'boy_scout.n.01', 'name': 'Boy_Scout'}, {'id': 15283, 'synset': 'boy_scout.n.02', 'name': 'boy_scout'}, {'id': 15284, 'synset': 'boy_wonder.n.01', 'name': 'boy_wonder'}, {'id': 15285, 'synset': 'bragger.n.01', 'name': 'bragger'}, {'id': 15286, 'synset': 'brahman.n.02', 'name': 'brahman'}, {'id': 15287, 'synset': 'brawler.n.01', 'name': 'brawler'}, {'id': 15288, 'synset': 'breadwinner.n.01', 'name': 'breadwinner'}, {'id': 15289, 'synset': 'breaststroker.n.01', 'name': 'breaststroker'}, {'id': 15290, 'synset': 'breeder.n.01', 'name': 'breeder'}, {'id': 15291, 'synset': 'brick.n.02', 'name': 'brick'}, {'id': 15292, 'synset': 'bride.n.03', 'name': 'bride'}, {'id': 15293, 'synset': 'bridesmaid.n.01', 'name': 'bridesmaid'}, {'id': 15294, 'synset': 'bridge_agent.n.01', 'name': 'bridge_agent'}, {'id': 15295, 'synset': 'broadcast_journalist.n.01', 'name': 'broadcast_journalist'}, {'id': 15296, 'synset': 'brother.n.05', 'name': 'Brother'}, {'id': 15297, 'synset': 'brother-in-law.n.01', 'name': 'brother-in-law'}, {'id': 15298, 'synset': 'browser.n.01', 'name': 'browser'}, {'id': 15299, 'synset': 'brummie.n.01', 'name': 'Brummie'}, {'id': 15300, 'synset': 'buddy.n.01', 'name': 'buddy'}, {'id': 15301, 'synset': 'bull.n.06', 'name': 'bull'}, {'id': 15302, 'synset': 'bully.n.02', 'name': 'bully'}, {'id': 15303, 'synset': 'bunny.n.01', 'name': 'bunny'}, {'id': 15304, 'synset': 'burglar.n.01', 'name': 'burglar'}, {'id': 15305, 'synset': 'bursar.n.01', 'name': 'bursar'}, {'id': 15306, 'synset': 'busboy.n.01', 'name': 'busboy'}, {'id': 15307, 'synset': 'business_editor.n.01', 'name': 'business_editor'}, {'id': 15308, 'synset': 'business_traveler.n.01', 'name': 'business_traveler'}, {'id': 15309, 'synset': 'buster.n.04', 'name': 'buster'}, {'id': 15310, 'synset': 'busybody.n.01', 'name': 'busybody'}, {'id': 15311, 'synset': 'buttinsky.n.01', 'name': 'buttinsky'}, {'id': 15312, 'synset': 'cabinetmaker.n.01', 'name': 'cabinetmaker'}, {'id': 15313, 'synset': 'caddie.n.01', 'name': 'caddie'}, {'id': 15314, 'synset': 'cadet.n.01', 'name': 'cadet'}, {'id': 15315, 'synset': 'caller.n.04', 'name': 'caller'}, {'id': 15316, 'synset': 'call_girl.n.01', 'name': 'call_girl'}, {'id': 15317, 'synset': 'calligrapher.n.01', 'name': 'calligrapher'}, {'id': 15318, 'synset': 'campaigner.n.01', 'name': 'campaigner'}, {'id': 15319, 'synset': 'camper.n.01', 'name': 'camper'}, {'id': 15320, 'synset': 'camp_follower.n.02', 'name': 'camp_follower'}, {'id': 15321, 'synset': 'candidate.n.02', 'name': 'candidate'}, {'id': 15322, 'synset': 'canonist.n.01', 'name': 'canonist'}, {'id': 15323, 'synset': 'capitalist.n.01', 'name': 'capitalist'}, {'id': 15324, 'synset': 'captain.n.07', 'name': 'captain'}, {'id': 15325, 'synset': 'captain.n.06', 'name': 'captain'}, {'id': 15326, 'synset': 'captain.n.01', 'name': 'captain'}, {'id': 15327, 'synset': 'captain.n.05', 'name': 'captain'}, {'id': 15328, 'synset': 'captive.n.02', 'name': 'captive'}, {'id': 15329, 'synset': 'captive.n.03', 'name': 'captive'}, {'id': 15330, 'synset': 'cardinal.n.01', 'name': 'cardinal'}, {'id': 15331, 'synset': 'cardiologist.n.01', 'name': 'cardiologist'}, {'id': 15332, 'synset': 'card_player.n.01', 'name': 'card_player'}, {'id': 15333, 'synset': 'cardsharp.n.01', 'name': 'cardsharp'}, {'id': 15334, 'synset': 'careerist.n.01', 'name': 'careerist'}, {'id': 15335, 'synset': 'career_man.n.01', 'name': 'career_man'}, {'id': 15336, 'synset': 'caregiver.n.02', 'name': 'caregiver'}, {'id': 15337, 'synset': 'caretaker.n.01', 'name': 'caretaker'}, {'id': 15338, 'synset': 'caretaker.n.02', 'name': 'caretaker'}, {'id': 15339, 'synset': 'caricaturist.n.01', 'name': 'caricaturist'}, {'id': 15340, 'synset': 'carillonneur.n.01', 'name': 'carillonneur'}, {'id': 15341, 'synset': 'caroler.n.01', 'name': 'caroler'}, {'id': 15342, 'synset': 'carpenter.n.01', 'name': 'carpenter'}, {'id': 15343, 'synset': 'carper.n.01', 'name': 'carper'}, {'id': 15344, 'synset': 'cartesian.n.01', 'name': 'Cartesian'}, {'id': 15345, 'synset': 'cashier.n.02', 'name': 'cashier'}, {'id': 15346, 'synset': 'casualty.n.02', 'name': 'casualty'}, {'id': 15347, 'synset': 'casualty.n.01', 'name': 'casualty'}, {'id': 15348, 'synset': 'casuist.n.01', 'name': 'casuist'}, {'id': 15349, 'synset': 'catechist.n.01', 'name': 'catechist'}, {'id': 15350, 'synset': 'catechumen.n.01', 'name': 'catechumen'}, {'id': 15351, 'synset': 'caterer.n.01', 'name': 'caterer'}, {'id': 15352, 'synset': 'catholicos.n.01', 'name': 'Catholicos'}, {'id': 15353, 'synset': 'cat_fancier.n.01', 'name': 'cat_fancier'}, {'id': 15354, 'synset': 'cavalier.n.02', 'name': 'Cavalier'}, {'id': 15355, 'synset': 'cavalryman.n.02', 'name': 'cavalryman'}, {'id': 15356, 'synset': 'caveman.n.01', 'name': 'caveman'}, {'id': 15357, 'synset': 'celebrant.n.02', 'name': 'celebrant'}, {'id': 15358, 'synset': 'celebrant.n.01', 'name': 'celebrant'}, {'id': 15359, 'synset': 'celebrity.n.01', 'name': 'celebrity'}, {'id': 15360, 'synset': 'cellist.n.01', 'name': 'cellist'}, {'id': 15361, 'synset': 'censor.n.02', 'name': 'censor'}, {'id': 15362, 'synset': 'censor.n.01', 'name': 'censor'}, {'id': 15363, 'synset': 'centenarian.n.01', 'name': 'centenarian'}, {'id': 15364, 'synset': 'centrist.n.01', 'name': 'centrist'}, {'id': 15365, 'synset': 'centurion.n.01', 'name': 'centurion'}, {'id': 15366, 'synset': 'certified_public_accountant.n.01', 'name': 'certified_public_accountant'}, {'id': 15367, 'synset': 'chachka.n.01', 'name': 'chachka'}, {'id': 15368, 'synset': 'chambermaid.n.01', 'name': 'chambermaid'}, {'id': 15369, 'synset': 'chameleon.n.01', 'name': 'chameleon'}, {'id': 15370, 'synset': 'champion.n.01', 'name': 'champion'}, {'id': 15371, 'synset': 'chandler.n.02', 'name': 'chandler'}, {'id': 15372, 'synset': 'prison_chaplain.n.01', 'name': 'prison_chaplain'}, {'id': 15373, 'synset': 'charcoal_burner.n.01', 'name': 'charcoal_burner'}, {'id': 15374, 'synset': "charge_d'affaires.n.01", 'name': "charge_d'affaires"}, {'id': 15375, 'synset': 'charioteer.n.01', 'name': 'charioteer'}, {'id': 15376, 'synset': 'charmer.n.02', 'name': 'charmer'}, {'id': 15377, 'synset': 'chartered_accountant.n.01', 'name': 'chartered_accountant'}, {'id': 15378, 'synset': 'chartist.n.02', 'name': 'chartist'}, {'id': 15379, 'synset': 'charwoman.n.01', 'name': 'charwoman'}, {'id': 15380, 'synset': 'male_chauvinist.n.01', 'name': 'male_chauvinist'}, {'id': 15381, 'synset': 'cheapskate.n.01', 'name': 'cheapskate'}, {'id': 15382, 'synset': 'chechen.n.01', 'name': 'Chechen'}, {'id': 15383, 'synset': 'checker.n.02', 'name': 'checker'}, {'id': 15384, 'synset': 'cheerer.n.01', 'name': 'cheerer'}, {'id': 15385, 'synset': 'cheerleader.n.02', 'name': 'cheerleader'}, {'id': 15386, 'synset': 'cheerleader.n.01', 'name': 'cheerleader'}, {'id': 15387, 'synset': 'cheops.n.01', 'name': 'Cheops'}, {'id': 15388, 'synset': 'chess_master.n.01', 'name': 'chess_master'}, {'id': 15389, 'synset': 'chief_executive_officer.n.01', 'name': 'chief_executive_officer'}, {'id': 15390, 'synset': 'chief_of_staff.n.01', 'name': 'chief_of_staff'}, {'id': 15391, 'synset': 'chief_petty_officer.n.01', 'name': 'chief_petty_officer'}, {'id': 15392, 'synset': 'chief_secretary.n.01', 'name': 'Chief_Secretary'}, {'id': 15393, 'synset': 'child.n.01', 'name': 'child'}, {'id': 15394, 'synset': 'child.n.02', 'name': 'child'}, {'id': 15395, 'synset': 'child.n.03', 'name': 'child'}, {'id': 15396, 'synset': 'child_prodigy.n.01', 'name': 'child_prodigy'}, {'id': 15397, 'synset': 'chimneysweeper.n.01', 'name': 'chimneysweeper'}, {'id': 15398, 'synset': 'chiropractor.n.01', 'name': 'chiropractor'}, {'id': 15399, 'synset': 'chit.n.01', 'name': 'chit'}, {'id': 15400, 'synset': 'choker.n.02', 'name': 'choker'}, {'id': 15401, 'synset': 'choragus.n.01', 'name': 'choragus'}, {'id': 15402, 'synset': 'choreographer.n.01', 'name': 'choreographer'}, {'id': 15403, 'synset': 'chorus_girl.n.01', 'name': 'chorus_girl'}, {'id': 15404, 'synset': 'chosen.n.01', 'name': 'chosen'}, {'id': 15405, 'synset': 'cicerone.n.01', 'name': 'cicerone'}, {'id': 15406, 'synset': 'cigar_smoker.n.01', 'name': 'cigar_smoker'}, {'id': 15407, 'synset': 'cipher.n.04', 'name': 'cipher'}, {'id': 15408, 'synset': 'circus_acrobat.n.01', 'name': 'circus_acrobat'}, {'id': 15409, 'synset': 'citizen.n.01', 'name': 'citizen'}, {'id': 15410, 'synset': 'city_editor.n.01', 'name': 'city_editor'}, {'id': 15411, 'synset': 'city_father.n.01', 'name': 'city_father'}, {'id': 15412, 'synset': 'city_man.n.01', 'name': 'city_man'}, {'id': 15413, 'synset': 'city_slicker.n.01', 'name': 'city_slicker'}, {'id': 15414, 'synset': 'civic_leader.n.01', 'name': 'civic_leader'}, {'id': 15415, 'synset': 'civil_rights_leader.n.01', 'name': 'civil_rights_leader'}, {'id': 15416, 'synset': 'cleaner.n.03', 'name': 'cleaner'}, {'id': 15417, 'synset': 'clergyman.n.01', 'name': 'clergyman'}, {'id': 15418, 'synset': 'cleric.n.01', 'name': 'cleric'}, {'id': 15419, 'synset': 'clerk.n.01', 'name': 'clerk'}, {'id': 15420, 'synset': 'clever_dick.n.01', 'name': 'clever_Dick'}, {'id': 15421, 'synset': 'climatologist.n.01', 'name': 'climatologist'}, {'id': 15422, 'synset': 'climber.n.04', 'name': 'climber'}, {'id': 15423, 'synset': 'clinician.n.01', 'name': 'clinician'}, {'id': 15424, 'synset': 'closer.n.02', 'name': 'closer'}, {'id': 15425, 'synset': 'closet_queen.n.01', 'name': 'closet_queen'}, {'id': 15426, 'synset': 'clown.n.02', 'name': 'clown'}, {'id': 15427, 'synset': 'clown.n.01', 'name': 'clown'}, {'id': 15428, 'synset': 'coach.n.02', 'name': 'coach'}, {'id': 15429, 'synset': 'coach.n.01', 'name': 'coach'}, {'id': 15430, 'synset': 'pitching_coach.n.01', 'name': 'pitching_coach'}, {'id': 15431, 'synset': 'coachman.n.01', 'name': 'coachman'}, {'id': 15432, 'synset': 'coal_miner.n.01', 'name': 'coal_miner'}, {'id': 15433, 'synset': 'coastguardsman.n.01', 'name': 'coastguardsman'}, {'id': 15434, 'synset': 'cobber.n.01', 'name': 'cobber'}, {'id': 15435, 'synset': 'cobbler.n.01', 'name': 'cobbler'}, {'id': 15436, 'synset': 'codger.n.01', 'name': 'codger'}, {'id': 15437, 'synset': 'co-beneficiary.n.01', 'name': 'co-beneficiary'}, {'id': 15438, 'synset': 'cog.n.01', 'name': 'cog'}, {'id': 15439, 'synset': 'cognitive_neuroscientist.n.01', 'name': 'cognitive_neuroscientist'}, {'id': 15440, 'synset': 'coiffeur.n.01', 'name': 'coiffeur'}, {'id': 15441, 'synset': 'coiner.n.02', 'name': 'coiner'}, {'id': 15442, 'synset': 'collaborator.n.03', 'name': 'collaborator'}, {'id': 15443, 'synset': 'colleen.n.01', 'name': 'colleen'}, {'id': 15444, 'synset': 'college_student.n.01', 'name': 'college_student'}, {'id': 15445, 'synset': 'collegian.n.01', 'name': 'collegian'}, {'id': 15446, 'synset': 'colonial.n.01', 'name': 'colonial'}, {'id': 15447, 'synset': 'colonialist.n.01', 'name': 'colonialist'}, {'id': 15448, 'synset': 'colonizer.n.01', 'name': 'colonizer'}, {'id': 15449, 'synset': 'coloratura.n.01', 'name': 'coloratura'}, {'id': 15450, 'synset': 'color_guard.n.01', 'name': 'color_guard'}, {'id': 15451, 'synset': 'colossus.n.02', 'name': 'colossus'}, {'id': 15452, 'synset': 'comedian.n.02', 'name': 'comedian'}, {'id': 15453, 'synset': 'comedienne.n.02', 'name': 'comedienne'}, {'id': 15454, 'synset': 'comer.n.01', 'name': 'comer'}, {'id': 15455, 'synset': 'commander.n.03', 'name': 'commander'}, {'id': 15456, 'synset': 'commander_in_chief.n.01', 'name': 'commander_in_chief'}, {'id': 15457, 'synset': 'commanding_officer.n.01', 'name': 'commanding_officer'}, {'id': 15458, 'synset': 'commissar.n.01', 'name': 'commissar'}, {'id': 15459, 'synset': 'commissioned_officer.n.01', 'name': 'commissioned_officer'}, {'id': 15460, 'synset': 'commissioned_military_officer.n.01', 'name': 'commissioned_military_officer'}, {'id': 15461, 'synset': 'commissioner.n.01', 'name': 'commissioner'}, {'id': 15462, 'synset': 'commissioner.n.02', 'name': 'commissioner'}, {'id': 15463, 'synset': 'committee_member.n.01', 'name': 'committee_member'}, {'id': 15464, 'synset': 'committeewoman.n.01', 'name': 'committeewoman'}, {'id': 15465, 'synset': 'commodore.n.01', 'name': 'commodore'}, {'id': 15466, 'synset': 'communicant.n.01', 'name': 'communicant'}, {'id': 15467, 'synset': 'communist.n.02', 'name': 'communist'}, {'id': 15468, 'synset': 'communist.n.01', 'name': 'Communist'}, {'id': 15469, 'synset': 'commuter.n.02', 'name': 'commuter'}, {'id': 15470, 'synset': 'compere.n.01', 'name': 'compere'}, {'id': 15471, 'synset': 'complexifier.n.01', 'name': 'complexifier'}, {'id': 15472, 'synset': 'compulsive.n.01', 'name': 'compulsive'}, {'id': 15473, 'synset': 'computational_linguist.n.01', 'name': 'computational_linguist'}, {'id': 15474, 'synset': 'computer_scientist.n.01', 'name': 'computer_scientist'}, {'id': 15475, 'synset': 'computer_user.n.01', 'name': 'computer_user'}, {'id': 15476, 'synset': 'comrade.n.02', 'name': 'Comrade'}, {'id': 15477, 'synset': 'concert-goer.n.01', 'name': 'concert-goer'}, {'id': 15478, 'synset': 'conciliator.n.01', 'name': 'conciliator'}, {'id': 15479, 'synset': 'conductor.n.03', 'name': 'conductor'}, {'id': 15480, 'synset': 'confectioner.n.01', 'name': 'confectioner'}, {'id': 15481, 'synset': 'confederate.n.01', 'name': 'Confederate'}, {'id': 15482, 'synset': 'confessor.n.01', 'name': 'confessor'}, {'id': 15483, 'synset': 'confidant.n.01', 'name': 'confidant'}, {'id': 15484, 'synset': 'confucian.n.01', 'name': 'Confucian'}, {'id': 15485, 'synset': 'rep.n.01', 'name': 'rep'}, {'id': 15486, 'synset': 'conqueror.n.01', 'name': 'conqueror'}, {'id': 15487, 'synset': 'conservative.n.02', 'name': 'Conservative'}, {'id': 15488, 'synset': 'nonconformist.n.01', 'name': 'Nonconformist'}, {'id': 15489, 'synset': 'anglican.n.01', 'name': 'Anglican'}, {'id': 15490, 'synset': 'consignee.n.01', 'name': 'consignee'}, {'id': 15491, 'synset': 'consigner.n.01', 'name': 'consigner'}, {'id': 15492, 'synset': 'constable.n.01', 'name': 'constable'}, {'id': 15493, 'synset': 'constructivist.n.01', 'name': 'constructivist'}, {'id': 15494, 'synset': 'contractor.n.01', 'name': 'contractor'}, {'id': 15495, 'synset': 'contralto.n.01', 'name': 'contralto'}, {'id': 15496, 'synset': 'contributor.n.02', 'name': 'contributor'}, {'id': 15497, 'synset': 'control_freak.n.01', 'name': 'control_freak'}, {'id': 15498, 'synset': 'convalescent.n.01', 'name': 'convalescent'}, {'id': 15499, 'synset': 'convener.n.01', 'name': 'convener'}, {'id': 15500, 'synset': 'convict.n.01', 'name': 'convict'}, {'id': 15501, 'synset': 'copilot.n.01', 'name': 'copilot'}, {'id': 15502, 'synset': 'copycat.n.01', 'name': 'copycat'}, {'id': 15503, 'synset': 'coreligionist.n.01', 'name': 'coreligionist'}, {'id': 15504, 'synset': 'cornerback.n.01', 'name': 'cornerback'}, {'id': 15505, 'synset': 'corporatist.n.01', 'name': 'corporatist'}, {'id': 15506, 'synset': 'correspondent.n.01', 'name': 'correspondent'}, {'id': 15507, 'synset': 'cosmetician.n.01', 'name': 'cosmetician'}, {'id': 15508, 'synset': 'cosmopolitan.n.01', 'name': 'cosmopolitan'}, {'id': 15509, 'synset': 'cossack.n.01', 'name': 'Cossack'}, {'id': 15510, 'synset': 'cost_accountant.n.01', 'name': 'cost_accountant'}, {'id': 15511, 'synset': 'co-star.n.01', 'name': 'co-star'}, {'id': 15512, 'synset': 'costumier.n.01', 'name': 'costumier'}, {'id': 15513, 'synset': 'cotter.n.02', 'name': 'cotter'}, {'id': 15514, 'synset': 'cotter.n.01', 'name': 'cotter'}, {'id': 15515, 'synset': 'counselor.n.01', 'name': 'counselor'}, {'id': 15516, 'synset': 'counterterrorist.n.01', 'name': 'counterterrorist'}, {'id': 15517, 'synset': 'counterspy.n.01', 'name': 'counterspy'}, {'id': 15518, 'synset': 'countess.n.01', 'name': 'countess'}, {'id': 15519, 'synset': 'compromiser.n.01', 'name': 'compromiser'}, {'id': 15520, 'synset': 'countrywoman.n.01', 'name': 'countrywoman'}, {'id': 15521, 'synset': 'county_agent.n.01', 'name': 'county_agent'}, {'id': 15522, 'synset': 'courtier.n.01', 'name': 'courtier'}, {'id': 15523, 'synset': 'cousin.n.01', 'name': 'cousin'}, {'id': 15524, 'synset': 'cover_girl.n.01', 'name': 'cover_girl'}, {'id': 15525, 'synset': 'cow.n.03', 'name': 'cow'}, {'id': 15526, 'synset': 'craftsman.n.03', 'name': 'craftsman'}, {'id': 15527, 'synset': 'craftsman.n.02', 'name': 'craftsman'}, {'id': 15528, 'synset': 'crapshooter.n.01', 'name': 'crapshooter'}, {'id': 15529, 'synset': 'crazy.n.01', 'name': 'crazy'}, {'id': 15530, 'synset': 'creature.n.02', 'name': 'creature'}, {'id': 15531, 'synset': 'creditor.n.01', 'name': 'creditor'}, {'id': 15532, 'synset': 'creep.n.01', 'name': 'creep'}, {'id': 15533, 'synset': 'criminologist.n.01', 'name': 'criminologist'}, {'id': 15534, 'synset': 'critic.n.02', 'name': 'critic'}, {'id': 15535, 'synset': 'croesus.n.02', 'name': 'Croesus'}, {'id': 15536, 'synset': 'cross-examiner.n.01', 'name': 'cross-examiner'}, {'id': 15537, 'synset': 'crossover_voter.n.01', 'name': 'crossover_voter'}, {'id': 15538, 'synset': 'croupier.n.01', 'name': 'croupier'}, {'id': 15539, 'synset': 'crown_prince.n.01', 'name': 'crown_prince'}, {'id': 15540, 'synset': 'crown_princess.n.01', 'name': 'crown_princess'}, {'id': 15541, 'synset': 'cryptanalyst.n.01', 'name': 'cryptanalyst'}, {'id': 15542, 'synset': 'cub_scout.n.01', 'name': 'Cub_Scout'}, {'id': 15543, 'synset': 'cuckold.n.01', 'name': 'cuckold'}, {'id': 15544, 'synset': 'cultist.n.02', 'name': 'cultist'}, {'id': 15545, 'synset': 'curandera.n.01', 'name': 'curandera'}, {'id': 15546, 'synset': 'curate.n.01', 'name': 'curate'}, {'id': 15547, 'synset': 'curator.n.01', 'name': 'curator'}, {'id': 15548, 'synset': 'customer_agent.n.01', 'name': 'customer_agent'}, {'id': 15549, 'synset': 'cutter.n.02', 'name': 'cutter'}, {'id': 15550, 'synset': 'cyberpunk.n.02', 'name': 'cyberpunk'}, {'id': 15551, 'synset': 'cyborg.n.01', 'name': 'cyborg'}, {'id': 15552, 'synset': 'cymbalist.n.01', 'name': 'cymbalist'}, {'id': 15553, 'synset': 'cynic.n.02', 'name': 'Cynic'}, {'id': 15554, 'synset': 'cytogeneticist.n.01', 'name': 'cytogeneticist'}, {'id': 15555, 'synset': 'cytologist.n.01', 'name': 'cytologist'}, {'id': 15556, 'synset': 'czar.n.02', 'name': 'czar'}, {'id': 15557, 'synset': 'czar.n.01', 'name': 'czar'}, {'id': 15558, 'synset': 'dad.n.01', 'name': 'dad'}, {'id': 15559, 'synset': 'dairyman.n.02', 'name': 'dairyman'}, {'id': 15560, 'synset': 'dalai_lama.n.01', 'name': 'Dalai_Lama'}, {'id': 15561, 'synset': 'dallier.n.01', 'name': 'dallier'}, {'id': 15562, 'synset': 'dancer.n.01', 'name': 'dancer'}, {'id': 15563, 'synset': 'dancer.n.02', 'name': 'dancer'}, {'id': 15564, 'synset': 'clog_dancer.n.01', 'name': 'clog_dancer'}, {'id': 15565, 'synset': 'dancing-master.n.01', 'name': 'dancing-master'}, {'id': 15566, 'synset': 'dark_horse.n.01', 'name': 'dark_horse'}, {'id': 15567, 'synset': 'darling.n.01', 'name': 'darling'}, {'id': 15568, 'synset': 'date.n.02', 'name': 'date'}, {'id': 15569, 'synset': 'daughter.n.01', 'name': 'daughter'}, {'id': 15570, 'synset': 'dawdler.n.01', 'name': 'dawdler'}, {'id': 15571, 'synset': 'day_boarder.n.01', 'name': 'day_boarder'}, {'id': 15572, 'synset': 'day_laborer.n.01', 'name': 'day_laborer'}, {'id': 15573, 'synset': 'deacon.n.01', 'name': 'deacon'}, {'id': 15574, 'synset': 'deaconess.n.01', 'name': 'deaconess'}, {'id': 15575, 'synset': 'deadeye.n.01', 'name': 'deadeye'}, {'id': 15576, 'synset': 'deipnosophist.n.01', 'name': 'deipnosophist'}, {'id': 15577, 'synset': 'dropout.n.02', 'name': 'dropout'}, {'id': 15578, 'synset': 'deadhead.n.01', 'name': 'deadhead'}, {'id': 15579, 'synset': 'deaf_person.n.01', 'name': 'deaf_person'}, {'id': 15580, 'synset': 'debtor.n.01', 'name': 'debtor'}, {'id': 15581, 'synset': 'deckhand.n.01', 'name': 'deckhand'}, {'id': 15582, 'synset': 'defamer.n.01', 'name': 'defamer'}, {'id': 15583, 'synset': 'defense_contractor.n.01', 'name': 'defense_contractor'}, {'id': 15584, 'synset': 'deist.n.01', 'name': 'deist'}, {'id': 15585, 'synset': 'delegate.n.01', 'name': 'delegate'}, {'id': 15586, 'synset': 'deliveryman.n.01', 'name': 'deliveryman'}, {'id': 15587, 'synset': 'demagogue.n.01', 'name': 'demagogue'}, {'id': 15588, 'synset': 'demigod.n.01', 'name': 'demigod'}, {'id': 15589, 'synset': 'demographer.n.01', 'name': 'demographer'}, {'id': 15590, 'synset': 'demonstrator.n.03', 'name': 'demonstrator'}, {'id': 15591, 'synset': 'den_mother.n.02', 'name': 'den_mother'}, {'id': 15592, 'synset': 'department_head.n.01', 'name': 'department_head'}, {'id': 15593, 'synset': 'depositor.n.01', 'name': 'depositor'}, {'id': 15594, 'synset': 'deputy.n.03', 'name': 'deputy'}, {'id': 15595, 'synset': 'dermatologist.n.01', 'name': 'dermatologist'}, {'id': 15596, 'synset': 'descender.n.01', 'name': 'descender'}, {'id': 15597, 'synset': 'designated_hitter.n.01', 'name': 'designated_hitter'}, {'id': 15598, 'synset': 'designer.n.04', 'name': 'designer'}, {'id': 15599, 'synset': 'desk_clerk.n.01', 'name': 'desk_clerk'}, {'id': 15600, 'synset': 'desk_officer.n.01', 'name': 'desk_officer'}, {'id': 15601, 'synset': 'desk_sergeant.n.01', 'name': 'desk_sergeant'}, {'id': 15602, 'synset': 'detainee.n.01', 'name': 'detainee'}, {'id': 15603, 'synset': 'detective.n.01', 'name': 'detective'}, {'id': 15604, 'synset': 'detective.n.02', 'name': 'detective'}, {'id': 15605, 'synset': 'detractor.n.01', 'name': 'detractor'}, {'id': 15606, 'synset': 'developer.n.01', 'name': 'developer'}, {'id': 15607, 'synset': 'deviationist.n.01', 'name': 'deviationist'}, {'id': 15608, 'synset': 'devisee.n.01', 'name': 'devisee'}, {'id': 15609, 'synset': 'devisor.n.01', 'name': 'devisor'}, {'id': 15610, 'synset': 'devourer.n.01', 'name': 'devourer'}, {'id': 15611, 'synset': 'dialectician.n.01', 'name': 'dialectician'}, {'id': 15612, 'synset': 'diarist.n.01', 'name': 'diarist'}, {'id': 15613, 'synset': 'dietician.n.01', 'name': 'dietician'}, {'id': 15614, 'synset': 'diocesan.n.01', 'name': 'diocesan'}, {'id': 15615, 'synset': 'director.n.03', 'name': 'director'}, {'id': 15616, 'synset': 'director.n.02', 'name': 'director'}, {'id': 15617, 'synset': 'dirty_old_man.n.01', 'name': 'dirty_old_man'}, {'id': 15618, 'synset': 'disbeliever.n.01', 'name': 'disbeliever'}, {'id': 15619, 'synset': 'disk_jockey.n.01', 'name': 'disk_jockey'}, {'id': 15620, 'synset': 'dispatcher.n.02', 'name': 'dispatcher'}, {'id': 15621, 'synset': 'distortionist.n.01', 'name': 'distortionist'}, {'id': 15622, 'synset': 'distributor.n.01', 'name': 'distributor'}, {'id': 15623, 'synset': 'district_attorney.n.01', 'name': 'district_attorney'}, {'id': 15624, 'synset': 'district_manager.n.01', 'name': 'district_manager'}, {'id': 15625, 'synset': 'diver.n.02', 'name': 'diver'}, {'id': 15626, 'synset': 'divorcee.n.01', 'name': 'divorcee'}, {'id': 15627, 'synset': 'ex-wife.n.01', 'name': 'ex-wife'}, {'id': 15628, 'synset': 'divorce_lawyer.n.01', 'name': 'divorce_lawyer'}, {'id': 15629, 'synset': 'docent.n.01', 'name': 'docent'}, {'id': 15630, 'synset': 'doctor.n.01', 'name': 'doctor'}, {'id': 15631, 'synset': 'dodo.n.01', 'name': 'dodo'}, {'id': 15632, 'synset': 'doge.n.01', 'name': 'doge'}, {'id': 15633, 'synset': 'dog_in_the_manger.n.01', 'name': 'dog_in_the_manger'}, {'id': 15634, 'synset': 'dogmatist.n.01', 'name': 'dogmatist'}, {'id': 15635, 'synset': 'dolichocephalic.n.01', 'name': 'dolichocephalic'}, {'id': 15636, 'synset': 'domestic_partner.n.01', 'name': 'domestic_partner'}, {'id': 15637, 'synset': 'dominican.n.02', 'name': 'Dominican'}, {'id': 15638, 'synset': 'dominus.n.01', 'name': 'dominus'}, {'id': 15639, 'synset': 'don.n.03', 'name': 'don'}, {'id': 15640, 'synset': 'donatist.n.01', 'name': 'Donatist'}, {'id': 15641, 'synset': 'donna.n.01', 'name': 'donna'}, {'id': 15642, 'synset': 'dosser.n.01', 'name': 'dosser'}, {'id': 15643, 'synset': 'double.n.03', 'name': 'double'}, {'id': 15644, 'synset': 'double-crosser.n.01', 'name': 'double-crosser'}, {'id': 15645, 'synset': 'down-and-out.n.01', 'name': 'down-and-out'}, {'id': 15646, 'synset': 'doyenne.n.01', 'name': 'doyenne'}, {'id': 15647, 'synset': 'draftsman.n.02', 'name': 'draftsman'}, {'id': 15648, 'synset': 'dramatist.n.01', 'name': 'dramatist'}, {'id': 15649, 'synset': 'dreamer.n.01', 'name': 'dreamer'}, {'id': 15650, 'synset': 'dressmaker.n.01', 'name': 'dressmaker'}, {'id': 15651, 'synset': "dressmaker's_model.n.01", 'name': "dressmaker's_model"}, {'id': 15652, 'synset': 'dribbler.n.02', 'name': 'dribbler'}, {'id': 15653, 'synset': 'dribbler.n.01', 'name': 'dribbler'}, {'id': 15654, 'synset': 'drinker.n.02', 'name': 'drinker'}, {'id': 15655, 'synset': 'drinker.n.01', 'name': 'drinker'}, {'id': 15656, 'synset': 'drug_addict.n.01', 'name': 'drug_addict'}, {'id': 15657, 'synset': 'drug_user.n.01', 'name': 'drug_user'}, {'id': 15658, 'synset': 'druid.n.01', 'name': 'Druid'}, {'id': 15659, 'synset': 'drum_majorette.n.02', 'name': 'drum_majorette'}, {'id': 15660, 'synset': 'drummer.n.01', 'name': 'drummer'}, {'id': 15661, 'synset': 'drunk.n.02', 'name': 'drunk'}, {'id': 15662, 'synset': 'drunkard.n.01', 'name': 'drunkard'}, {'id': 15663, 'synset': 'druze.n.01', 'name': 'Druze'}, {'id': 15664, 'synset': 'dry.n.01', 'name': 'dry'}, {'id': 15665, 'synset': 'dry_nurse.n.01', 'name': 'dry_nurse'}, {'id': 15666, 'synset': 'duchess.n.01', 'name': 'duchess'}, {'id': 15667, 'synset': 'duke.n.01', 'name': 'duke'}, {'id': 15668, 'synset': 'duffer.n.01', 'name': 'duffer'}, {'id': 15669, 'synset': 'dunker.n.02', 'name': 'dunker'}, {'id': 15670, 'synset': 'dutch_uncle.n.01', 'name': 'Dutch_uncle'}, {'id': 15671, 'synset': 'dyspeptic.n.01', 'name': 'dyspeptic'}, {'id': 15672, 'synset': 'eager_beaver.n.01', 'name': 'eager_beaver'}, {'id': 15673, 'synset': 'earl.n.01', 'name': 'earl'}, {'id': 15674, 'synset': 'earner.n.01', 'name': 'earner'}, {'id': 15675, 'synset': 'eavesdropper.n.01', 'name': 'eavesdropper'}, {'id': 15676, 'synset': 'eccentric.n.01', 'name': 'eccentric'}, {'id': 15677, 'synset': 'eclectic.n.01', 'name': 'eclectic'}, {'id': 15678, 'synset': 'econometrician.n.01', 'name': 'econometrician'}, {'id': 15679, 'synset': 'economist.n.01', 'name': 'economist'}, {'id': 15680, 'synset': 'ectomorph.n.01', 'name': 'ectomorph'}, {'id': 15681, 'synset': 'editor.n.01', 'name': 'editor'}, {'id': 15682, 'synset': 'egocentric.n.01', 'name': 'egocentric'}, {'id': 15683, 'synset': 'egotist.n.01', 'name': 'egotist'}, {'id': 15684, 'synset': 'ejaculator.n.01', 'name': 'ejaculator'}, {'id': 15685, 'synset': 'elder.n.03', 'name': 'elder'}, {'id': 15686, 'synset': 'elder_statesman.n.01', 'name': 'elder_statesman'}, {'id': 15687, 'synset': 'elected_official.n.01', 'name': 'elected_official'}, {'id': 15688, 'synset': 'electrician.n.01', 'name': 'electrician'}, {'id': 15689, 'synset': 'elegist.n.01', 'name': 'elegist'}, {'id': 15690, 'synset': 'elocutionist.n.01', 'name': 'elocutionist'}, {'id': 15691, 'synset': 'emancipator.n.01', 'name': 'emancipator'}, {'id': 15692, 'synset': 'embryologist.n.01', 'name': 'embryologist'}, {'id': 15693, 'synset': 'emeritus.n.01', 'name': 'emeritus'}, {'id': 15694, 'synset': 'emigrant.n.01', 'name': 'emigrant'}, {'id': 15695, 'synset': 'emissary.n.01', 'name': 'emissary'}, {'id': 15696, 'synset': 'empress.n.01', 'name': 'empress'}, {'id': 15697, 'synset': 'employee.n.01', 'name': 'employee'}, {'id': 15698, 'synset': 'employer.n.01', 'name': 'employer'}, {'id': 15699, 'synset': 'enchantress.n.02', 'name': 'enchantress'}, {'id': 15700, 'synset': 'enchantress.n.01', 'name': 'enchantress'}, {'id': 15701, 'synset': 'encyclopedist.n.01', 'name': 'encyclopedist'}, {'id': 15702, 'synset': 'endomorph.n.01', 'name': 'endomorph'}, {'id': 15703, 'synset': 'enemy.n.02', 'name': 'enemy'}, {'id': 15704, 'synset': 'energizer.n.01', 'name': 'energizer'}, {'id': 15705, 'synset': 'end_man.n.02', 'name': 'end_man'}, {'id': 15706, 'synset': 'end_man.n.01', 'name': 'end_man'}, {'id': 15707, 'synset': 'endorser.n.02', 'name': 'endorser'}, {'id': 15708, 'synset': 'enjoyer.n.01', 'name': 'enjoyer'}, {'id': 15709, 'synset': 'enlisted_woman.n.01', 'name': 'enlisted_woman'}, {'id': 15710, 'synset': 'enophile.n.01', 'name': 'enophile'}, {'id': 15711, 'synset': 'entrant.n.04', 'name': 'entrant'}, {'id': 15712, 'synset': 'entrant.n.03', 'name': 'entrant'}, {'id': 15713, 'synset': 'entrepreneur.n.01', 'name': 'entrepreneur'}, {'id': 15714, 'synset': 'envoy.n.01', 'name': 'envoy'}, {'id': 15715, 'synset': 'enzymologist.n.01', 'name': 'enzymologist'}, {'id': 15716, 'synset': 'eparch.n.01', 'name': 'eparch'}, {'id': 15717, 'synset': 'epidemiologist.n.01', 'name': 'epidemiologist'}, {'id': 15718, 'synset': 'epigone.n.01', 'name': 'epigone'}, {'id': 15719, 'synset': 'epileptic.n.01', 'name': 'epileptic'}, {'id': 15720, 'synset': 'episcopalian.n.01', 'name': 'Episcopalian'}, {'id': 15721, 'synset': 'equerry.n.02', 'name': 'equerry'}, {'id': 15722, 'synset': 'equerry.n.01', 'name': 'equerry'}, {'id': 15723, 'synset': 'erotic.n.01', 'name': 'erotic'}, {'id': 15724, 'synset': 'escapee.n.01', 'name': 'escapee'}, {'id': 15725, 'synset': 'escapist.n.01', 'name': 'escapist'}, {'id': 15726, 'synset': 'eskimo.n.01', 'name': 'Eskimo'}, {'id': 15727, 'synset': 'espionage_agent.n.01', 'name': 'espionage_agent'}, {'id': 15728, 'synset': 'esthetician.n.01', 'name': 'esthetician'}, {'id': 15729, 'synset': 'etcher.n.01', 'name': 'etcher'}, {'id': 15730, 'synset': 'ethnologist.n.01', 'name': 'ethnologist'}, {'id': 15731, 'synset': 'etonian.n.01', 'name': 'Etonian'}, {'id': 15732, 'synset': 'etymologist.n.01', 'name': 'etymologist'}, {'id': 15733, 'synset': 'evangelist.n.01', 'name': 'evangelist'}, {'id': 15734, 'synset': 'evangelist.n.02', 'name': 'Evangelist'}, {'id': 15735, 'synset': 'event_planner.n.01', 'name': 'event_planner'}, {'id': 15736, 'synset': 'examiner.n.02', 'name': 'examiner'}, {'id': 15737, 'synset': 'examiner.n.01', 'name': 'examiner'}, {'id': 15738, 'synset': 'exarch.n.03', 'name': 'exarch'}, {'id': 15739, 'synset': 'executant.n.01', 'name': 'executant'}, {'id': 15740, 'synset': 'executive_secretary.n.01', 'name': 'executive_secretary'}, {'id': 15741, 'synset': 'executive_vice_president.n.01', 'name': 'executive_vice_president'}, {'id': 15742, 'synset': 'executrix.n.01', 'name': 'executrix'}, {'id': 15743, 'synset': 'exegete.n.01', 'name': 'exegete'}, {'id': 15744, 'synset': 'exhibitor.n.01', 'name': 'exhibitor'}, {'id': 15745, 'synset': 'exhibitionist.n.02', 'name': 'exhibitionist'}, {'id': 15746, 'synset': 'exile.n.01', 'name': 'exile'}, {'id': 15747, 'synset': 'existentialist.n.01', 'name': 'existentialist'}, {'id': 15748, 'synset': 'exorcist.n.02', 'name': 'exorcist'}, {'id': 15749, 'synset': 'ex-spouse.n.01', 'name': 'ex-spouse'}, {'id': 15750, 'synset': 'extern.n.01', 'name': 'extern'}, {'id': 15751, 'synset': 'extremist.n.01', 'name': 'extremist'}, {'id': 15752, 'synset': 'extrovert.n.01', 'name': 'extrovert'}, {'id': 15753, 'synset': 'eyewitness.n.01', 'name': 'eyewitness'}, {'id': 15754, 'synset': 'facilitator.n.01', 'name': 'facilitator'}, {'id': 15755, 'synset': 'fairy_godmother.n.01', 'name': 'fairy_godmother'}, {'id': 15756, 'synset': 'falangist.n.01', 'name': 'falangist'}, {'id': 15757, 'synset': 'falconer.n.01', 'name': 'falconer'}, {'id': 15758, 'synset': 'falsifier.n.01', 'name': 'falsifier'}, {'id': 15759, 'synset': 'familiar.n.01', 'name': 'familiar'}, {'id': 15760, 'synset': 'fan.n.03', 'name': 'fan'}, {'id': 15761, 'synset': 'fanatic.n.01', 'name': 'fanatic'}, {'id': 15762, 'synset': 'fancier.n.01', 'name': 'fancier'}, {'id': 15763, 'synset': 'farm_boy.n.01', 'name': 'farm_boy'}, {'id': 15764, 'synset': 'farmer.n.01', 'name': 'farmer'}, {'id': 15765, 'synset': 'farmhand.n.01', 'name': 'farmhand'}, {'id': 15766, 'synset': 'fascist.n.01', 'name': 'fascist'}, {'id': 15767, 'synset': 'fascista.n.01', 'name': 'fascista'}, {'id': 15768, 'synset': 'fatalist.n.01', 'name': 'fatalist'}, {'id': 15769, 'synset': 'father.n.01', 'name': 'father'}, {'id': 15770, 'synset': 'father.n.03', 'name': 'Father'}, {'id': 15771, 'synset': 'father-figure.n.01', 'name': 'father-figure'}, {'id': 15772, 'synset': 'father-in-law.n.01', 'name': 'father-in-law'}, {'id': 15773, 'synset': 'fauntleroy.n.01', 'name': 'Fauntleroy'}, {'id': 15774, 'synset': 'fauve.n.01', 'name': 'Fauve'}, {'id': 15775, 'synset': 'favorite_son.n.01', 'name': 'favorite_son'}, {'id': 15776, 'synset': 'featherweight.n.03', 'name': 'featherweight'}, {'id': 15777, 'synset': 'federalist.n.02', 'name': 'federalist'}, {'id': 15778, 'synset': 'fellow_traveler.n.01', 'name': 'fellow_traveler'}, {'id': 15779, 'synset': 'female_aristocrat.n.01', 'name': 'female_aristocrat'}, {'id': 15780, 'synset': 'female_offspring.n.01', 'name': 'female_offspring'}, {'id': 15781, 'synset': 'female_child.n.01', 'name': 'female_child'}, {'id': 15782, 'synset': 'fence.n.02', 'name': 'fence'}, {'id': 15783, 'synset': 'fiance.n.01', 'name': 'fiance'}, {'id': 15784, 'synset': 'fielder.n.02', 'name': 'fielder'}, {'id': 15785, 'synset': 'field_judge.n.01', 'name': 'field_judge'}, {'id': 15786, 'synset': 'fighter_pilot.n.01', 'name': 'fighter_pilot'}, {'id': 15787, 'synset': 'filer.n.01', 'name': 'filer'}, {'id': 15788, 'synset': 'film_director.n.01', 'name': 'film_director'}, {'id': 15789, 'synset': 'finder.n.01', 'name': 'finder'}, {'id': 15790, 'synset': 'fire_chief.n.01', 'name': 'fire_chief'}, {'id': 15791, 'synset': 'fire-eater.n.03', 'name': 'fire-eater'}, {'id': 15792, 'synset': 'fire-eater.n.02', 'name': 'fire-eater'}, {'id': 15793, 'synset': 'fireman.n.04', 'name': 'fireman'}, {'id': 15794, 'synset': 'fire_marshall.n.01', 'name': 'fire_marshall'}, {'id': 15795, 'synset': 'fire_walker.n.01', 'name': 'fire_walker'}, {'id': 15796, 'synset': 'first_baseman.n.01', 'name': 'first_baseman'}, {'id': 15797, 'synset': 'firstborn.n.01', 'name': 'firstborn'}, {'id': 15798, 'synset': 'first_lady.n.02', 'name': 'first_lady'}, {'id': 15799, 'synset': 'first_lieutenant.n.01', 'name': 'first_lieutenant'}, {'id': 15800, 'synset': 'first_offender.n.01', 'name': 'first_offender'}, {'id': 15801, 'synset': 'first_sergeant.n.01', 'name': 'first_sergeant'}, {'id': 15802, 'synset': 'fishmonger.n.01', 'name': 'fishmonger'}, {'id': 15803, 'synset': 'flagellant.n.02', 'name': 'flagellant'}, {'id': 15804, 'synset': 'flag_officer.n.01', 'name': 'flag_officer'}, {'id': 15805, 'synset': 'flak_catcher.n.01', 'name': 'flak_catcher'}, {'id': 15806, 'synset': 'flanker_back.n.01', 'name': 'flanker_back'}, {'id': 15807, 'synset': 'flapper.n.01', 'name': 'flapper'}, {'id': 15808, 'synset': 'flatmate.n.01', 'name': 'flatmate'}, {'id': 15809, 'synset': 'flatterer.n.01', 'name': 'flatterer'}, {'id': 15810, 'synset': 'flibbertigibbet.n.01', 'name': 'flibbertigibbet'}, {'id': 15811, 'synset': 'flight_surgeon.n.01', 'name': 'flight_surgeon'}, {'id': 15812, 'synset': 'floorwalker.n.01', 'name': 'floorwalker'}, {'id': 15813, 'synset': 'flop.n.02', 'name': 'flop'}, {'id': 15814, 'synset': 'florentine.n.01', 'name': 'Florentine'}, {'id': 15815, 'synset': 'flower_girl.n.02', 'name': 'flower_girl'}, {'id': 15816, 'synset': 'flower_girl.n.01', 'name': 'flower_girl'}, {'id': 15817, 'synset': 'flutist.n.01', 'name': 'flutist'}, {'id': 15818, 'synset': 'fly-by-night.n.01', 'name': 'fly-by-night'}, {'id': 15819, 'synset': 'flyweight.n.02', 'name': 'flyweight'}, {'id': 15820, 'synset': 'flyweight.n.01', 'name': 'flyweight'}, {'id': 15821, 'synset': 'foe.n.02', 'name': 'foe'}, {'id': 15822, 'synset': 'folk_dancer.n.01', 'name': 'folk_dancer'}, {'id': 15823, 'synset': 'folk_poet.n.01', 'name': 'folk_poet'}, {'id': 15824, 'synset': 'follower.n.01', 'name': 'follower'}, {'id': 15825, 'synset': 'football_hero.n.01', 'name': 'football_hero'}, {'id': 15826, 'synset': 'football_player.n.01', 'name': 'football_player'}, {'id': 15827, 'synset': 'footman.n.01', 'name': 'footman'}, {'id': 15828, 'synset': 'forefather.n.01', 'name': 'forefather'}, {'id': 15829, 'synset': 'foremother.n.01', 'name': 'foremother'}, {'id': 15830, 'synset': 'foreign_agent.n.01', 'name': 'foreign_agent'}, {'id': 15831, 'synset': 'foreigner.n.02', 'name': 'foreigner'}, {'id': 15832, 'synset': 'boss.n.03', 'name': 'boss'}, {'id': 15833, 'synset': 'foreman.n.02', 'name': 'foreman'}, {'id': 15834, 'synset': 'forester.n.02', 'name': 'forester'}, {'id': 15835, 'synset': 'forewoman.n.02', 'name': 'forewoman'}, {'id': 15836, 'synset': 'forger.n.02', 'name': 'forger'}, {'id': 15837, 'synset': 'forward.n.01', 'name': 'forward'}, {'id': 15838, 'synset': 'foster-brother.n.01', 'name': 'foster-brother'}, {'id': 15839, 'synset': 'foster-father.n.01', 'name': 'foster-father'}, {'id': 15840, 'synset': 'foster-mother.n.01', 'name': 'foster-mother'}, {'id': 15841, 'synset': 'foster-sister.n.01', 'name': 'foster-sister'}, {'id': 15842, 'synset': 'foster-son.n.01', 'name': 'foster-son'}, {'id': 15843, 'synset': 'founder.n.02', 'name': 'founder'}, {'id': 15844, 'synset': 'foundress.n.01', 'name': 'foundress'}, {'id': 15845, 'synset': 'four-minute_man.n.01', 'name': 'four-minute_man'}, {'id': 15846, 'synset': 'framer.n.02', 'name': 'framer'}, {'id': 15847, 'synset': 'francophobe.n.01', 'name': 'Francophobe'}, {'id': 15848, 'synset': 'freak.n.01', 'name': 'freak'}, {'id': 15849, 'synset': 'free_agent.n.02', 'name': 'free_agent'}, {'id': 15850, 'synset': 'free_agent.n.01', 'name': 'free_agent'}, {'id': 15851, 'synset': 'freedom_rider.n.01', 'name': 'freedom_rider'}, {'id': 15852, 'synset': 'free-liver.n.01', 'name': 'free-liver'}, {'id': 15853, 'synset': 'freeloader.n.01', 'name': 'freeloader'}, {'id': 15854, 'synset': 'free_trader.n.01', 'name': 'free_trader'}, {'id': 15855, 'synset': 'freudian.n.01', 'name': 'Freudian'}, {'id': 15856, 'synset': 'friar.n.01', 'name': 'friar'}, {'id': 15857, 'synset': 'monk.n.01', 'name': 'monk'}, {'id': 15858, 'synset': 'frontierswoman.n.01', 'name': 'frontierswoman'}, {'id': 15859, 'synset': 'front_man.n.01', 'name': 'front_man'}, {'id': 15860, 'synset': 'frotteur.n.01', 'name': 'frotteur'}, {'id': 15861, 'synset': 'fucker.n.02', 'name': 'fucker'}, {'id': 15862, 'synset': 'fucker.n.01', 'name': 'fucker'}, {'id': 15863, 'synset': 'fuddy-duddy.n.01', 'name': 'fuddy-duddy'}, {'id': 15864, 'synset': 'fullback.n.01', 'name': 'fullback'}, {'id': 15865, 'synset': 'funambulist.n.01', 'name': 'funambulist'}, {'id': 15866, 'synset': 'fundamentalist.n.01', 'name': 'fundamentalist'}, {'id': 15867, 'synset': 'fundraiser.n.01', 'name': 'fundraiser'}, {'id': 15868, 'synset': 'futurist.n.01', 'name': 'futurist'}, {'id': 15869, 'synset': 'gadgeteer.n.01', 'name': 'gadgeteer'}, {'id': 15870, 'synset': 'gagman.n.02', 'name': 'gagman'}, {'id': 15871, 'synset': 'gagman.n.01', 'name': 'gagman'}, {'id': 15872, 'synset': 'gainer.n.01', 'name': 'gainer'}, {'id': 15873, 'synset': 'gal.n.03', 'name': 'gal'}, {'id': 15874, 'synset': 'galoot.n.01', 'name': 'galoot'}, {'id': 15875, 'synset': 'gambist.n.01', 'name': 'gambist'}, {'id': 15876, 'synset': 'gambler.n.01', 'name': 'gambler'}, {'id': 15877, 'synset': 'gamine.n.02', 'name': 'gamine'}, {'id': 15878, 'synset': 'garbage_man.n.01', 'name': 'garbage_man'}, {'id': 15879, 'synset': 'gardener.n.02', 'name': 'gardener'}, {'id': 15880, 'synset': 'garment_cutter.n.01', 'name': 'garment_cutter'}, {'id': 15881, 'synset': 'garroter.n.01', 'name': 'garroter'}, {'id': 15882, 'synset': 'gasman.n.01', 'name': 'gasman'}, {'id': 15883, 'synset': 'gastroenterologist.n.01', 'name': 'gastroenterologist'}, {'id': 15884, 'synset': 'gatherer.n.01', 'name': 'gatherer'}, {'id': 15885, 'synset': 'gawker.n.01', 'name': 'gawker'}, {'id': 15886, 'synset': 'gendarme.n.01', 'name': 'gendarme'}, {'id': 15887, 'synset': 'general.n.01', 'name': 'general'}, {'id': 15888, 'synset': 'generator.n.03', 'name': 'generator'}, {'id': 15889, 'synset': 'geneticist.n.01', 'name': 'geneticist'}, {'id': 15890, 'synset': 'genitor.n.01', 'name': 'genitor'}, {'id': 15891, 'synset': 'gent.n.01', 'name': 'gent'}, {'id': 15892, 'synset': 'geologist.n.01', 'name': 'geologist'}, {'id': 15893, 'synset': 'geophysicist.n.01', 'name': 'geophysicist'}, {'id': 15894, 'synset': 'ghostwriter.n.01', 'name': 'ghostwriter'}, {'id': 15895, 'synset': 'gibson_girl.n.01', 'name': 'Gibson_girl'}, {'id': 15896, 'synset': 'girl.n.01', 'name': 'girl'}, {'id': 15897, 'synset': 'girlfriend.n.02', 'name': 'girlfriend'}, {'id': 15898, 'synset': 'girlfriend.n.01', 'name': 'girlfriend'}, {'id': 15899, 'synset': 'girl_wonder.n.01', 'name': 'girl_wonder'}, {'id': 15900, 'synset': 'girondist.n.01', 'name': 'Girondist'}, {'id': 15901, 'synset': 'gitano.n.01', 'name': 'gitano'}, {'id': 15902, 'synset': 'gladiator.n.01', 'name': 'gladiator'}, {'id': 15903, 'synset': 'glassblower.n.01', 'name': 'glassblower'}, {'id': 15904, 'synset': 'gleaner.n.02', 'name': 'gleaner'}, {'id': 15905, 'synset': 'goat_herder.n.01', 'name': 'goat_herder'}, {'id': 15906, 'synset': 'godchild.n.01', 'name': 'godchild'}, {'id': 15907, 'synset': 'godfather.n.01', 'name': 'godfather'}, {'id': 15908, 'synset': 'godparent.n.01', 'name': 'godparent'}, {'id': 15909, 'synset': 'godson.n.01', 'name': 'godson'}, {'id': 15910, 'synset': 'gofer.n.01', 'name': 'gofer'}, {'id': 15911, 'synset': 'goffer.n.01', 'name': 'goffer'}, {'id': 15912, 'synset': 'goldsmith.n.01', 'name': 'goldsmith'}, {'id': 15913, 'synset': 'golfer.n.01', 'name': 'golfer'}, {'id': 15914, 'synset': 'gondolier.n.01', 'name': 'gondolier'}, {'id': 15915, 'synset': 'good_guy.n.01', 'name': 'good_guy'}, {'id': 15916, 'synset': 'good_old_boy.n.01', 'name': 'good_old_boy'}, {'id': 15917, 'synset': 'good_samaritan.n.01', 'name': 'good_Samaritan'}, {'id': 15918, 'synset': 'gossip_columnist.n.01', 'name': 'gossip_columnist'}, {'id': 15919, 'synset': 'gouger.n.01', 'name': 'gouger'}, {'id': 15920, 'synset': 'governor_general.n.01', 'name': 'governor_general'}, {'id': 15921, 'synset': 'grabber.n.01', 'name': 'grabber'}, {'id': 15922, 'synset': 'grader.n.01', 'name': 'grader'}, {'id': 15923, 'synset': 'graduate_nurse.n.01', 'name': 'graduate_nurse'}, {'id': 15924, 'synset': 'grammarian.n.01', 'name': 'grammarian'}, {'id': 15925, 'synset': 'granddaughter.n.01', 'name': 'granddaughter'}, {'id': 15926, 'synset': 'grande_dame.n.01', 'name': 'grande_dame'}, {'id': 15927, 'synset': 'grandfather.n.01', 'name': 'grandfather'}, {'id': 15928, 'synset': 'grand_inquisitor.n.01', 'name': 'Grand_Inquisitor'}, {'id': 15929, 'synset': 'grandma.n.01', 'name': 'grandma'}, {'id': 15930, 'synset': 'grandmaster.n.01', 'name': 'grandmaster'}, {'id': 15931, 'synset': 'grandparent.n.01', 'name': 'grandparent'}, {'id': 15932, 'synset': 'grantee.n.01', 'name': 'grantee'}, {'id': 15933, 'synset': 'granter.n.01', 'name': 'granter'}, {'id': 15934, 'synset': 'grass_widower.n.01', 'name': 'grass_widower'}, {'id': 15935, 'synset': 'great-aunt.n.01', 'name': 'great-aunt'}, {'id': 15936, 'synset': 'great_grandchild.n.01', 'name': 'great_grandchild'}, {'id': 15937, 'synset': 'great_granddaughter.n.01', 'name': 'great_granddaughter'}, {'id': 15938, 'synset': 'great_grandmother.n.01', 'name': 'great_grandmother'}, {'id': 15939, 'synset': 'great_grandparent.n.01', 'name': 'great_grandparent'}, {'id': 15940, 'synset': 'great_grandson.n.01', 'name': 'great_grandson'}, {'id': 15941, 'synset': 'great-nephew.n.01', 'name': 'great-nephew'}, {'id': 15942, 'synset': 'great-niece.n.01', 'name': 'great-niece'}, {'id': 15943, 'synset': 'green_beret.n.01', 'name': 'Green_Beret'}, {'id': 15944, 'synset': 'grenadier.n.01', 'name': 'grenadier'}, {'id': 15945, 'synset': 'greeter.n.01', 'name': 'greeter'}, {'id': 15946, 'synset': 'gringo.n.01', 'name': 'gringo'}, {'id': 15947, 'synset': 'grinner.n.01', 'name': 'grinner'}, {'id': 15948, 'synset': 'grocer.n.01', 'name': 'grocer'}, {'id': 15949, 'synset': 'groom.n.03', 'name': 'groom'}, {'id': 15950, 'synset': 'groom.n.01', 'name': 'groom'}, {'id': 15951, 'synset': 'grouch.n.01', 'name': 'grouch'}, {'id': 15952, 'synset': 'group_captain.n.01', 'name': 'group_captain'}, {'id': 15953, 'synset': 'grunter.n.01', 'name': 'grunter'}, {'id': 15954, 'synset': 'prison_guard.n.01', 'name': 'prison_guard'}, {'id': 15955, 'synset': 'guard.n.01', 'name': 'guard'}, {'id': 15956, 'synset': 'guesser.n.01', 'name': 'guesser'}, {'id': 15957, 'synset': 'guest.n.01', 'name': 'guest'}, {'id': 15958, 'synset': 'guest.n.03', 'name': 'guest'}, {'id': 15959, 'synset': 'guest_of_honor.n.01', 'name': 'guest_of_honor'}, {'id': 15960, 'synset': 'guest_worker.n.01', 'name': 'guest_worker'}, {'id': 15961, 'synset': 'guide.n.02', 'name': 'guide'}, {'id': 15962, 'synset': 'guitarist.n.01', 'name': 'guitarist'}, {'id': 15963, 'synset': 'gunnery_sergeant.n.01', 'name': 'gunnery_sergeant'}, {'id': 15964, 'synset': 'guru.n.01', 'name': 'guru'}, {'id': 15965, 'synset': 'guru.n.03', 'name': 'guru'}, {'id': 15966, 'synset': 'guvnor.n.01', 'name': 'guvnor'}, {'id': 15967, 'synset': 'guy.n.01', 'name': 'guy'}, {'id': 15968, 'synset': 'gymnast.n.01', 'name': 'gymnast'}, {'id': 15969, 'synset': 'gym_rat.n.01', 'name': 'gym_rat'}, {'id': 15970, 'synset': 'gynecologist.n.01', 'name': 'gynecologist'}, {'id': 15971, 'synset': 'gypsy.n.02', 'name': 'Gypsy'}, {'id': 15972, 'synset': 'hack.n.01', 'name': 'hack'}, {'id': 15973, 'synset': 'hacker.n.02', 'name': 'hacker'}, {'id': 15974, 'synset': 'haggler.n.01', 'name': 'haggler'}, {'id': 15975, 'synset': 'hairdresser.n.01', 'name': 'hairdresser'}, {'id': 15976, 'synset': 'hakim.n.02', 'name': 'hakim'}, {'id': 15977, 'synset': 'hakka.n.01', 'name': 'Hakka'}, {'id': 15978, 'synset': 'halberdier.n.01', 'name': 'halberdier'}, {'id': 15979, 'synset': 'halfback.n.01', 'name': 'halfback'}, {'id': 15980, 'synset': 'half_blood.n.01', 'name': 'half_blood'}, {'id': 15981, 'synset': 'hand.n.10', 'name': 'hand'}, {'id': 15982, 'synset': 'animal_trainer.n.01', 'name': 'animal_trainer'}, {'id': 15983, 'synset': 'handyman.n.01', 'name': 'handyman'}, {'id': 15984, 'synset': 'hang_glider.n.01', 'name': 'hang_glider'}, {'id': 15985, 'synset': 'hardliner.n.01', 'name': 'hardliner'}, {'id': 15986, 'synset': 'harlequin.n.01', 'name': 'harlequin'}, {'id': 15987, 'synset': 'harmonizer.n.02', 'name': 'harmonizer'}, {'id': 15988, 'synset': 'hash_head.n.01', 'name': 'hash_head'}, {'id': 15989, 'synset': 'hatchet_man.n.01', 'name': 'hatchet_man'}, {'id': 15990, 'synset': 'hater.n.01', 'name': 'hater'}, {'id': 15991, 'synset': 'hatmaker.n.01', 'name': 'hatmaker'}, {'id': 15992, 'synset': 'headman.n.02', 'name': 'headman'}, {'id': 15993, 'synset': 'headmaster.n.01', 'name': 'headmaster'}, {'id': 15994, 'synset': 'head_nurse.n.01', 'name': 'head_nurse'}, {'id': 15995, 'synset': 'hearer.n.01', 'name': 'hearer'}, {'id': 15996, 'synset': 'heartbreaker.n.01', 'name': 'heartbreaker'}, {'id': 15997, 'synset': 'heathen.n.01', 'name': 'heathen'}, {'id': 15998, 'synset': 'heavyweight.n.02', 'name': 'heavyweight'}, {'id': 15999, 'synset': 'heavy.n.01', 'name': 'heavy'}, {'id': 16000, 'synset': 'heckler.n.01', 'name': 'heckler'}, {'id': 16001, 'synset': 'hedger.n.02', 'name': 'hedger'}, {'id': 16002, 'synset': 'hedger.n.01', 'name': 'hedger'}, {'id': 16003, 'synset': 'hedonist.n.01', 'name': 'hedonist'}, {'id': 16004, 'synset': 'heir.n.01', 'name': 'heir'}, {'id': 16005, 'synset': 'heir_apparent.n.01', 'name': 'heir_apparent'}, {'id': 16006, 'synset': 'heiress.n.01', 'name': 'heiress'}, {'id': 16007, 'synset': 'heir_presumptive.n.01', 'name': 'heir_presumptive'}, {'id': 16008, 'synset': 'hellion.n.01', 'name': 'hellion'}, {'id': 16009, 'synset': 'helmsman.n.01', 'name': 'helmsman'}, {'id': 16010, 'synset': 'hire.n.01', 'name': 'hire'}, {'id': 16011, 'synset': 'hematologist.n.01', 'name': 'hematologist'}, {'id': 16012, 'synset': 'hemiplegic.n.01', 'name': 'hemiplegic'}, {'id': 16013, 'synset': 'herald.n.01', 'name': 'herald'}, {'id': 16014, 'synset': 'herbalist.n.01', 'name': 'herbalist'}, {'id': 16015, 'synset': 'herder.n.02', 'name': 'herder'}, {'id': 16016, 'synset': 'hermaphrodite.n.01', 'name': 'hermaphrodite'}, {'id': 16017, 'synset': 'heroine.n.02', 'name': 'heroine'}, {'id': 16018, 'synset': 'heroin_addict.n.01', 'name': 'heroin_addict'}, {'id': 16019, 'synset': 'hero_worshiper.n.01', 'name': 'hero_worshiper'}, {'id': 16020, 'synset': 'herr.n.01', 'name': 'Herr'}, {'id': 16021, 'synset': 'highbinder.n.01', 'name': 'highbinder'}, {'id': 16022, 'synset': 'highbrow.n.01', 'name': 'highbrow'}, {'id': 16023, 'synset': 'high_commissioner.n.01', 'name': 'high_commissioner'}, {'id': 16024, 'synset': 'highflier.n.01', 'name': 'highflier'}, {'id': 16025, 'synset': 'highlander.n.02', 'name': 'Highlander'}, {'id': 16026, 'synset': 'high-muck-a-muck.n.01', 'name': 'high-muck-a-muck'}, {'id': 16027, 'synset': 'high_priest.n.01', 'name': 'high_priest'}, {'id': 16028, 'synset': 'highjacker.n.01', 'name': 'highjacker'}, {'id': 16029, 'synset': 'hireling.n.01', 'name': 'hireling'}, {'id': 16030, 'synset': 'historian.n.01', 'name': 'historian'}, {'id': 16031, 'synset': 'hitchhiker.n.01', 'name': 'hitchhiker'}, {'id': 16032, 'synset': 'hitter.n.02', 'name': 'hitter'}, {'id': 16033, 'synset': 'hobbyist.n.01', 'name': 'hobbyist'}, {'id': 16034, 'synset': 'holdout.n.01', 'name': 'holdout'}, {'id': 16035, 'synset': 'holdover.n.01', 'name': 'holdover'}, {'id': 16036, 'synset': 'holdup_man.n.01', 'name': 'holdup_man'}, {'id': 16037, 'synset': 'homeboy.n.02', 'name': 'homeboy'}, {'id': 16038, 'synset': 'homeboy.n.01', 'name': 'homeboy'}, {'id': 16039, 'synset': 'home_buyer.n.01', 'name': 'home_buyer'}, {'id': 16040, 'synset': 'homegirl.n.01', 'name': 'homegirl'}, {'id': 16041, 'synset': 'homeless.n.01', 'name': 'homeless'}, {'id': 16042, 'synset': 'homeopath.n.01', 'name': 'homeopath'}, {'id': 16043, 'synset': 'honest_woman.n.01', 'name': 'honest_woman'}, {'id': 16044, 'synset': 'honor_guard.n.01', 'name': 'honor_guard'}, {'id': 16045, 'synset': 'hooker.n.05', 'name': 'hooker'}, {'id': 16046, 'synset': 'hoper.n.01', 'name': 'hoper'}, {'id': 16047, 'synset': 'hornist.n.01', 'name': 'hornist'}, {'id': 16048, 'synset': 'horseman.n.01', 'name': 'horseman'}, {'id': 16049, 'synset': 'horse_trader.n.01', 'name': 'horse_trader'}, {'id': 16050, 'synset': 'horsewoman.n.01', 'name': 'horsewoman'}, {'id': 16051, 'synset': 'horse_wrangler.n.01', 'name': 'horse_wrangler'}, {'id': 16052, 'synset': 'horticulturist.n.01', 'name': 'horticulturist'}, {'id': 16053, 'synset': 'hospital_chaplain.n.01', 'name': 'hospital_chaplain'}, {'id': 16054, 'synset': 'host.n.08', 'name': 'host'}, {'id': 16055, 'synset': 'host.n.01', 'name': 'host'}, {'id': 16056, 'synset': 'hostess.n.01', 'name': 'hostess'}, {'id': 16057, 'synset': 'hotelier.n.01', 'name': 'hotelier'}, {'id': 16058, 'synset': 'housekeeper.n.01', 'name': 'housekeeper'}, {'id': 16059, 'synset': 'housemaster.n.01', 'name': 'housemaster'}, {'id': 16060, 'synset': 'housemate.n.01', 'name': 'housemate'}, {'id': 16061, 'synset': 'house_physician.n.01', 'name': 'house_physician'}, {'id': 16062, 'synset': 'house_sitter.n.01', 'name': 'house_sitter'}, {'id': 16063, 'synset': 'housing_commissioner.n.01', 'name': 'housing_commissioner'}, {'id': 16064, 'synset': 'huckster.n.01', 'name': 'huckster'}, {'id': 16065, 'synset': 'hugger.n.01', 'name': 'hugger'}, {'id': 16066, 'synset': 'humanist.n.02', 'name': 'humanist'}, {'id': 16067, 'synset': 'humanitarian.n.01', 'name': 'humanitarian'}, {'id': 16068, 'synset': 'hunk.n.01', 'name': 'hunk'}, {'id': 16069, 'synset': 'huntress.n.01', 'name': 'huntress'}, {'id': 16070, 'synset': 'ex-husband.n.01', 'name': 'ex-husband'}, {'id': 16071, 'synset': 'hydrologist.n.01', 'name': 'hydrologist'}, {'id': 16072, 'synset': 'hyperope.n.01', 'name': 'hyperope'}, {'id': 16073, 'synset': 'hypertensive.n.01', 'name': 'hypertensive'}, {'id': 16074, 'synset': 'hypnotist.n.01', 'name': 'hypnotist'}, {'id': 16075, 'synset': 'hypocrite.n.01', 'name': 'hypocrite'}, {'id': 16076, 'synset': 'iceman.n.01', 'name': 'iceman'}, {'id': 16077, 'synset': 'iconoclast.n.02', 'name': 'iconoclast'}, {'id': 16078, 'synset': 'ideologist.n.01', 'name': 'ideologist'}, {'id': 16079, 'synset': 'idol.n.02', 'name': 'idol'}, {'id': 16080, 'synset': 'idolizer.n.01', 'name': 'idolizer'}, {'id': 16081, 'synset': 'imam.n.01', 'name': 'imam'}, {'id': 16082, 'synset': 'imperialist.n.01', 'name': 'imperialist'}, {'id': 16083, 'synset': 'important_person.n.01', 'name': 'important_person'}, {'id': 16084, 'synset': 'inamorato.n.01', 'name': 'inamorato'}, {'id': 16085, 'synset': 'incumbent.n.01', 'name': 'incumbent'}, {'id': 16086, 'synset': 'incurable.n.01', 'name': 'incurable'}, {'id': 16087, 'synset': 'inductee.n.01', 'name': 'inductee'}, {'id': 16088, 'synset': 'industrialist.n.01', 'name': 'industrialist'}, {'id': 16089, 'synset': 'infanticide.n.01', 'name': 'infanticide'}, {'id': 16090, 'synset': 'inferior.n.01', 'name': 'inferior'}, {'id': 16091, 'synset': 'infernal.n.01', 'name': 'infernal'}, {'id': 16092, 'synset': 'infielder.n.01', 'name': 'infielder'}, {'id': 16093, 'synset': 'infiltrator.n.02', 'name': 'infiltrator'}, {'id': 16094, 'synset': 'informer.n.01', 'name': 'informer'}, {'id': 16095, 'synset': 'ingenue.n.02', 'name': 'ingenue'}, {'id': 16096, 'synset': 'ingenue.n.01', 'name': 'ingenue'}, {'id': 16097, 'synset': 'polymath.n.01', 'name': 'polymath'}, {'id': 16098, 'synset': 'in-law.n.01', 'name': 'in-law'}, {'id': 16099, 'synset': 'inquiry_agent.n.01', 'name': 'inquiry_agent'}, {'id': 16100, 'synset': 'inspector.n.01', 'name': 'inspector'}, {'id': 16101, 'synset': 'inspector_general.n.01', 'name': 'inspector_general'}, {'id': 16102, 'synset': 'instigator.n.02', 'name': 'instigator'}, {'id': 16103, 'synset': 'insurance_broker.n.01', 'name': 'insurance_broker'}, {'id': 16104, 'synset': 'insurgent.n.01', 'name': 'insurgent'}, {'id': 16105, 'synset': 'intelligence_analyst.n.01', 'name': 'intelligence_analyst'}, {'id': 16106, 'synset': 'interior_designer.n.01', 'name': 'interior_designer'}, {'id': 16107, 'synset': 'interlocutor.n.02', 'name': 'interlocutor'}, {'id': 16108, 'synset': 'interlocutor.n.01', 'name': 'interlocutor'}, {'id': 16109, 'synset': 'international_grandmaster.n.01', 'name': 'International_Grandmaster'}, {'id': 16110, 'synset': 'internationalist.n.02', 'name': 'internationalist'}, {'id': 16111, 'synset': 'internist.n.01', 'name': 'internist'}, {'id': 16112, 'synset': 'interpreter.n.01', 'name': 'interpreter'}, {'id': 16113, 'synset': 'interpreter.n.02', 'name': 'interpreter'}, {'id': 16114, 'synset': 'intervenor.n.01', 'name': 'intervenor'}, {'id': 16115, 'synset': 'introvert.n.01', 'name': 'introvert'}, {'id': 16116, 'synset': 'invader.n.01', 'name': 'invader'}, {'id': 16117, 'synset': 'invalidator.n.01', 'name': 'invalidator'}, {'id': 16118, 'synset': 'investigator.n.02', 'name': 'investigator'}, {'id': 16119, 'synset': 'investor.n.01', 'name': 'investor'}, {'id': 16120, 'synset': 'invigilator.n.01', 'name': 'invigilator'}, {'id': 16121, 'synset': 'irreligionist.n.01', 'name': 'irreligionist'}, {'id': 16122, 'synset': 'ivy_leaguer.n.01', 'name': 'Ivy_Leaguer'}, {'id': 16123, 'synset': 'jack_of_all_trades.n.01', 'name': 'Jack_of_all_trades'}, {'id': 16124, 'synset': 'jacksonian.n.01', 'name': 'Jacksonian'}, {'id': 16125, 'synset': 'jane_doe.n.01', 'name': 'Jane_Doe'}, {'id': 16126, 'synset': 'janissary.n.01', 'name': 'janissary'}, {'id': 16127, 'synset': 'jat.n.01', 'name': 'Jat'}, {'id': 16128, 'synset': 'javanese.n.01', 'name': 'Javanese'}, {'id': 16129, 'synset': 'jekyll_and_hyde.n.01', 'name': 'Jekyll_and_Hyde'}, {'id': 16130, 'synset': 'jester.n.01', 'name': 'jester'}, {'id': 16131, 'synset': 'jesuit.n.01', 'name': 'Jesuit'}, {'id': 16132, 'synset': 'jezebel.n.02', 'name': 'jezebel'}, {'id': 16133, 'synset': 'jilt.n.01', 'name': 'jilt'}, {'id': 16134, 'synset': 'jobber.n.01', 'name': 'jobber'}, {'id': 16135, 'synset': 'job_candidate.n.01', 'name': 'job_candidate'}, {'id': 16136, 'synset': "job's_comforter.n.01", 'name': "Job's_comforter"}, {'id': 16137, 'synset': 'jockey.n.01', 'name': 'jockey'}, {'id': 16138, 'synset': 'john_doe.n.02', 'name': 'John_Doe'}, {'id': 16139, 'synset': 'journalist.n.01', 'name': 'journalist'}, {'id': 16140, 'synset': 'judge.n.01', 'name': 'judge'}, {'id': 16141, 'synset': 'judge_advocate.n.01', 'name': 'judge_advocate'}, {'id': 16142, 'synset': 'juggler.n.01', 'name': 'juggler'}, {'id': 16143, 'synset': 'jungian.n.01', 'name': 'Jungian'}, {'id': 16144, 'synset': 'junior.n.03', 'name': 'junior'}, {'id': 16145, 'synset': 'junior.n.02', 'name': 'junior'}, {'id': 16146, 'synset': 'junior.n.04', 'name': 'Junior'}, {'id': 16147, 'synset': 'junior_lightweight.n.01', 'name': 'junior_lightweight'}, {'id': 16148, 'synset': 'junior_middleweight.n.01', 'name': 'junior_middleweight'}, {'id': 16149, 'synset': 'jurist.n.01', 'name': 'jurist'}, {'id': 16150, 'synset': 'juror.n.01', 'name': 'juror'}, {'id': 16151, 'synset': 'justice_of_the_peace.n.01', 'name': 'justice_of_the_peace'}, {'id': 16152, 'synset': 'justiciar.n.01', 'name': 'justiciar'}, {'id': 16153, 'synset': 'kachina.n.01', 'name': 'kachina'}, {'id': 16154, 'synset': 'keyboardist.n.01', 'name': 'keyboardist'}, {'id': 16155, 'synset': 'khedive.n.01', 'name': 'Khedive'}, {'id': 16156, 'synset': 'kingmaker.n.02', 'name': 'kingmaker'}, {'id': 16157, 'synset': 'king.n.02', 'name': 'king'}, {'id': 16158, 'synset': "king's_counsel.n.01", 'name': "King's_Counsel"}, {'id': 16159, 'synset': 'counsel_to_the_crown.n.01', 'name': 'Counsel_to_the_Crown'}, {'id': 16160, 'synset': 'kin.n.01', 'name': 'kin'}, {'id': 16161, 'synset': 'enate.n.01', 'name': 'enate'}, {'id': 16162, 'synset': 'kink.n.03', 'name': 'kink'}, {'id': 16163, 'synset': 'kinswoman.n.01', 'name': 'kinswoman'}, {'id': 16164, 'synset': 'kisser.n.01', 'name': 'kisser'}, {'id': 16165, 'synset': 'kitchen_help.n.01', 'name': 'kitchen_help'}, {'id': 16166, 'synset': 'kitchen_police.n.01', 'name': 'kitchen_police'}, {'id': 16167, 'synset': 'klansman.n.01', 'name': 'Klansman'}, {'id': 16168, 'synset': 'kleptomaniac.n.01', 'name': 'kleptomaniac'}, {'id': 16169, 'synset': 'kneeler.n.01', 'name': 'kneeler'}, {'id': 16170, 'synset': 'knight.n.01', 'name': 'knight'}, {'id': 16171, 'synset': 'knocker.n.01', 'name': 'knocker'}, {'id': 16172, 'synset': 'knower.n.01', 'name': 'knower'}, {'id': 16173, 'synset': 'know-it-all.n.01', 'name': 'know-it-all'}, {'id': 16174, 'synset': 'kolkhoznik.n.01', 'name': 'kolkhoznik'}, {'id': 16175, 'synset': 'kshatriya.n.01', 'name': 'Kshatriya'}, {'id': 16176, 'synset': 'labor_coach.n.01', 'name': 'labor_coach'}, {'id': 16177, 'synset': 'laborer.n.01', 'name': 'laborer'}, {'id': 16178, 'synset': 'labourite.n.01', 'name': 'Labourite'}, {'id': 16179, 'synset': 'lady.n.01', 'name': 'lady'}, {'id': 16180, 'synset': 'lady-in-waiting.n.01', 'name': 'lady-in-waiting'}, {'id': 16181, 'synset': "lady's_maid.n.01", 'name': "lady's_maid"}, {'id': 16182, 'synset': 'lama.n.01', 'name': 'lama'}, {'id': 16183, 'synset': 'lamb.n.04', 'name': 'lamb'}, {'id': 16184, 'synset': 'lame_duck.n.01', 'name': 'lame_duck'}, {'id': 16185, 'synset': 'lamplighter.n.01', 'name': 'lamplighter'}, {'id': 16186, 'synset': 'land_agent.n.02', 'name': 'land_agent'}, {'id': 16187, 'synset': 'landgrave.n.01', 'name': 'landgrave'}, {'id': 16188, 'synset': 'landlubber.n.02', 'name': 'landlubber'}, {'id': 16189, 'synset': 'landlubber.n.01', 'name': 'landlubber'}, {'id': 16190, 'synset': 'landowner.n.01', 'name': 'landowner'}, {'id': 16191, 'synset': 'landscape_architect.n.01', 'name': 'landscape_architect'}, {'id': 16192, 'synset': 'langlaufer.n.01', 'name': 'langlaufer'}, {'id': 16193, 'synset': 'languisher.n.01', 'name': 'languisher'}, {'id': 16194, 'synset': 'lapidary.n.01', 'name': 'lapidary'}, {'id': 16195, 'synset': 'lass.n.01', 'name': 'lass'}, {'id': 16196, 'synset': 'latin.n.03', 'name': 'Latin'}, {'id': 16197, 'synset': 'latin.n.02', 'name': 'Latin'}, {'id': 16198, 'synset': 'latitudinarian.n.01', 'name': 'latitudinarian'}, {'id': 16199, 'synset': "jehovah's_witness.n.01", 'name': "Jehovah's_Witness"}, {'id': 16200, 'synset': 'law_agent.n.01', 'name': 'law_agent'}, {'id': 16201, 'synset': 'lawgiver.n.01', 'name': 'lawgiver'}, {'id': 16202, 'synset': 'lawman.n.01', 'name': 'lawman'}, {'id': 16203, 'synset': 'law_student.n.01', 'name': 'law_student'}, {'id': 16204, 'synset': 'lawyer.n.01', 'name': 'lawyer'}, {'id': 16205, 'synset': 'lay_reader.n.01', 'name': 'lay_reader'}, {'id': 16206, 'synset': 'lazybones.n.01', 'name': 'lazybones'}, {'id': 16207, 'synset': 'leaker.n.01', 'name': 'leaker'}, {'id': 16208, 'synset': 'leaseholder.n.01', 'name': 'leaseholder'}, {'id': 16209, 'synset': 'lector.n.02', 'name': 'lector'}, {'id': 16210, 'synset': 'lector.n.01', 'name': 'lector'}, {'id': 16211, 'synset': 'lecturer.n.02', 'name': 'lecturer'}, {'id': 16212, 'synset': 'left-hander.n.02', 'name': 'left-hander'}, {'id': 16213, 'synset': 'legal_representative.n.01', 'name': 'legal_representative'}, {'id': 16214, 'synset': 'legate.n.01', 'name': 'legate'}, {'id': 16215, 'synset': 'legatee.n.01', 'name': 'legatee'}, {'id': 16216, 'synset': 'legionnaire.n.02', 'name': 'legionnaire'}, {'id': 16217, 'synset': 'letterman.n.01', 'name': 'letterman'}, {'id': 16218, 'synset': 'liberator.n.01', 'name': 'liberator'}, {'id': 16219, 'synset': 'licenser.n.01', 'name': 'licenser'}, {'id': 16220, 'synset': 'licentiate.n.01', 'name': 'licentiate'}, {'id': 16221, 'synset': 'lieutenant.n.01', 'name': 'lieutenant'}, {'id': 16222, 'synset': 'lieutenant_colonel.n.01', 'name': 'lieutenant_colonel'}, {'id': 16223, 'synset': 'lieutenant_commander.n.01', 'name': 'lieutenant_commander'}, {'id': 16224, 'synset': 'lieutenant_junior_grade.n.01', 'name': 'lieutenant_junior_grade'}, {'id': 16225, 'synset': 'life.n.08', 'name': 'life'}, {'id': 16226, 'synset': 'lifeguard.n.01', 'name': 'lifeguard'}, {'id': 16227, 'synset': 'life_tenant.n.01', 'name': 'life_tenant'}, {'id': 16228, 'synset': 'light_flyweight.n.01', 'name': 'light_flyweight'}, {'id': 16229, 'synset': 'light_heavyweight.n.03', 'name': 'light_heavyweight'}, {'id': 16230, 'synset': 'light_heavyweight.n.01', 'name': 'light_heavyweight'}, {'id': 16231, 'synset': "light-o'-love.n.01", 'name': "light-o'-love"}, {'id': 16232, 'synset': 'lightweight.n.01', 'name': 'lightweight'}, {'id': 16233, 'synset': 'lightweight.n.04', 'name': 'lightweight'}, {'id': 16234, 'synset': 'lightweight.n.03', 'name': 'lightweight'}, {'id': 16235, 'synset': 'lilliputian.n.01', 'name': 'lilliputian'}, {'id': 16236, 'synset': 'limnologist.n.01', 'name': 'limnologist'}, {'id': 16237, 'synset': 'lineman.n.01', 'name': 'lineman'}, {'id': 16238, 'synset': 'line_officer.n.01', 'name': 'line_officer'}, {'id': 16239, 'synset': 'lion-hunter.n.01', 'name': 'lion-hunter'}, {'id': 16240, 'synset': 'lisper.n.01', 'name': 'lisper'}, {'id': 16241, 'synset': 'lister.n.02', 'name': 'lister'}, {'id': 16242, 'synset': 'literary_critic.n.01', 'name': 'literary_critic'}, {'id': 16243, 'synset': 'literate.n.01', 'name': 'literate'}, {'id': 16244, 'synset': 'litigant.n.01', 'name': 'litigant'}, {'id': 16245, 'synset': 'litterer.n.01', 'name': 'litterer'}, {'id': 16246, 'synset': 'little_brother.n.01', 'name': 'little_brother'}, {'id': 16247, 'synset': 'little_sister.n.01', 'name': 'little_sister'}, {'id': 16248, 'synset': 'lobbyist.n.01', 'name': 'lobbyist'}, {'id': 16249, 'synset': 'locksmith.n.01', 'name': 'locksmith'}, {'id': 16250, 'synset': 'locum_tenens.n.01', 'name': 'locum_tenens'}, {'id': 16251, 'synset': 'lord.n.03', 'name': 'Lord'}, {'id': 16252, 'synset': 'loser.n.03', 'name': 'loser'}, {'id': 16253, 'synset': 'loser.n.01', 'name': 'loser'}, {'id': 16254, 'synset': 'failure.n.04', 'name': 'failure'}, {'id': 16255, 'synset': 'lothario.n.01', 'name': 'Lothario'}, {'id': 16256, 'synset': 'loudmouth.n.01', 'name': 'loudmouth'}, {'id': 16257, 'synset': 'lowerclassman.n.01', 'name': 'lowerclassman'}, {'id': 16258, 'synset': 'lowlander.n.01', 'name': 'Lowlander'}, {'id': 16259, 'synset': 'loyalist.n.01', 'name': 'loyalist'}, {'id': 16260, 'synset': 'luddite.n.01', 'name': 'Luddite'}, {'id': 16261, 'synset': 'lumberman.n.01', 'name': 'lumberman'}, {'id': 16262, 'synset': 'lumper.n.02', 'name': 'lumper'}, {'id': 16263, 'synset': 'bedlamite.n.01', 'name': 'bedlamite'}, {'id': 16264, 'synset': 'pyromaniac.n.01', 'name': 'pyromaniac'}, {'id': 16265, 'synset': 'lutist.n.01', 'name': 'lutist'}, {'id': 16266, 'synset': 'lutheran.n.01', 'name': 'Lutheran'}, {'id': 16267, 'synset': 'lyricist.n.01', 'name': 'lyricist'}, {'id': 16268, 'synset': 'macebearer.n.01', 'name': 'macebearer'}, {'id': 16269, 'synset': 'machinist.n.01', 'name': 'machinist'}, {'id': 16270, 'synset': 'madame.n.01', 'name': 'madame'}, {'id': 16271, 'synset': 'maenad.n.01', 'name': 'maenad'}, {'id': 16272, 'synset': 'maestro.n.01', 'name': 'maestro'}, {'id': 16273, 'synset': 'magdalen.n.01', 'name': 'magdalen'}, {'id': 16274, 'synset': 'magician.n.01', 'name': 'magician'}, {'id': 16275, 'synset': 'magus.n.01', 'name': 'magus'}, {'id': 16276, 'synset': 'maharani.n.01', 'name': 'maharani'}, {'id': 16277, 'synset': 'mahatma.n.01', 'name': 'mahatma'}, {'id': 16278, 'synset': 'maid.n.02', 'name': 'maid'}, {'id': 16279, 'synset': 'maid.n.01', 'name': 'maid'}, {'id': 16280, 'synset': 'major.n.01', 'name': 'major'}, {'id': 16281, 'synset': 'major.n.03', 'name': 'major'}, {'id': 16282, 'synset': 'major-domo.n.01', 'name': 'major-domo'}, {'id': 16283, 'synset': 'maker.n.01', 'name': 'maker'}, {'id': 16284, 'synset': 'malahini.n.01', 'name': 'malahini'}, {'id': 16285, 'synset': 'malcontent.n.01', 'name': 'malcontent'}, {'id': 16286, 'synset': 'malik.n.01', 'name': 'malik'}, {'id': 16287, 'synset': 'malingerer.n.01', 'name': 'malingerer'}, {'id': 16288, 'synset': 'malthusian.n.01', 'name': 'Malthusian'}, {'id': 16289, 'synset': 'adonis.n.01', 'name': 'adonis'}, {'id': 16290, 'synset': 'man.n.03', 'name': 'man'}, {'id': 16291, 'synset': 'man.n.05', 'name': 'man'}, {'id': 16292, 'synset': 'manageress.n.01', 'name': 'manageress'}, {'id': 16293, 'synset': 'mandarin.n.03', 'name': 'mandarin'}, {'id': 16294, 'synset': 'maneuverer.n.01', 'name': 'maneuverer'}, {'id': 16295, 'synset': 'maniac.n.02', 'name': 'maniac'}, {'id': 16296, 'synset': 'manichaean.n.01', 'name': 'Manichaean'}, {'id': 16297, 'synset': 'manicurist.n.01', 'name': 'manicurist'}, {'id': 16298, 'synset': 'manipulator.n.02', 'name': 'manipulator'}, {'id': 16299, 'synset': 'man-at-arms.n.01', 'name': 'man-at-arms'}, {'id': 16300, 'synset': 'man_of_action.n.01', 'name': 'man_of_action'}, {'id': 16301, 'synset': 'man_of_letters.n.01', 'name': 'man_of_letters'}, {'id': 16302, 'synset': 'manufacturer.n.02', 'name': 'manufacturer'}, {'id': 16303, 'synset': 'marcher.n.02', 'name': 'marcher'}, {'id': 16304, 'synset': 'marchioness.n.02', 'name': 'marchioness'}, {'id': 16305, 'synset': 'margrave.n.02', 'name': 'margrave'}, {'id': 16306, 'synset': 'margrave.n.01', 'name': 'margrave'}, {'id': 16307, 'synset': 'marine.n.01', 'name': 'Marine'}, {'id': 16308, 'synset': 'marquess.n.02', 'name': 'marquess'}, {'id': 16309, 'synset': 'marquis.n.02', 'name': 'marquis'}, {'id': 16310, 'synset': 'marshal.n.02', 'name': 'marshal'}, {'id': 16311, 'synset': 'martinet.n.01', 'name': 'martinet'}, {'id': 16312, 'synset': 'masochist.n.01', 'name': 'masochist'}, {'id': 16313, 'synset': 'mason.n.04', 'name': 'mason'}, {'id': 16314, 'synset': 'masquerader.n.01', 'name': 'masquerader'}, {'id': 16315, 'synset': 'masseur.n.01', 'name': 'masseur'}, {'id': 16316, 'synset': 'masseuse.n.01', 'name': 'masseuse'}, {'id': 16317, 'synset': 'master.n.04', 'name': 'master'}, {'id': 16318, 'synset': 'master.n.07', 'name': 'master'}, {'id': 16319, 'synset': 'master-at-arms.n.01', 'name': 'master-at-arms'}, {'id': 16320, 'synset': 'master_of_ceremonies.n.01', 'name': 'master_of_ceremonies'}, {'id': 16321, 'synset': 'masturbator.n.01', 'name': 'masturbator'}, {'id': 16322, 'synset': 'matchmaker.n.01', 'name': 'matchmaker'}, {'id': 16323, 'synset': 'mate.n.01', 'name': 'mate'}, {'id': 16324, 'synset': 'mate.n.08', 'name': 'mate'}, {'id': 16325, 'synset': 'mate.n.03', 'name': 'mate'}, {'id': 16326, 'synset': 'mater.n.01', 'name': 'mater'}, {'id': 16327, 'synset': 'material.n.05', 'name': 'material'}, {'id': 16328, 'synset': 'materialist.n.02', 'name': 'materialist'}, {'id': 16329, 'synset': 'matriarch.n.01', 'name': 'matriarch'}, {'id': 16330, 'synset': 'matriarch.n.02', 'name': 'matriarch'}, {'id': 16331, 'synset': 'matriculate.n.01', 'name': 'matriculate'}, {'id': 16332, 'synset': 'matron.n.01', 'name': 'matron'}, {'id': 16333, 'synset': 'mayor.n.01', 'name': 'mayor'}, {'id': 16334, 'synset': 'mayoress.n.01', 'name': 'mayoress'}, {'id': 16335, 'synset': 'mechanical_engineer.n.01', 'name': 'mechanical_engineer'}, {'id': 16336, 'synset': 'medalist.n.02', 'name': 'medalist'}, {'id': 16337, 'synset': 'medical_officer.n.01', 'name': 'medical_officer'}, {'id': 16338, 'synset': 'medical_practitioner.n.01', 'name': 'medical_practitioner'}, {'id': 16339, 'synset': 'medical_scientist.n.01', 'name': 'medical_scientist'}, {'id': 16340, 'synset': 'medium.n.09', 'name': 'medium'}, {'id': 16341, 'synset': 'megalomaniac.n.01', 'name': 'megalomaniac'}, {'id': 16342, 'synset': 'melancholic.n.01', 'name': 'melancholic'}, {'id': 16343, 'synset': 'melkite.n.01', 'name': 'Melkite'}, {'id': 16344, 'synset': 'melter.n.01', 'name': 'melter'}, {'id': 16345, 'synset': 'nonmember.n.01', 'name': 'nonmember'}, {'id': 16346, 'synset': 'board_member.n.01', 'name': 'board_member'}, {'id': 16347, 'synset': 'clansman.n.01', 'name': 'clansman'}, {'id': 16348, 'synset': 'memorizer.n.01', 'name': 'memorizer'}, {'id': 16349, 'synset': 'mendelian.n.01', 'name': 'Mendelian'}, {'id': 16350, 'synset': 'mender.n.01', 'name': 'mender'}, {'id': 16351, 'synset': 'mesoamerican.n.01', 'name': 'Mesoamerican'}, {'id': 16352, 'synset': 'messmate.n.01', 'name': 'messmate'}, {'id': 16353, 'synset': 'mestiza.n.01', 'name': 'mestiza'}, {'id': 16354, 'synset': 'meteorologist.n.01', 'name': 'meteorologist'}, {'id': 16355, 'synset': 'meter_maid.n.01', 'name': 'meter_maid'}, {'id': 16356, 'synset': 'methodist.n.01', 'name': 'Methodist'}, {'id': 16357, 'synset': 'metis.n.01', 'name': 'Metis'}, {'id': 16358, 'synset': 'metropolitan.n.01', 'name': 'metropolitan'}, {'id': 16359, 'synset': 'mezzo-soprano.n.01', 'name': 'mezzo-soprano'}, {'id': 16360, 'synset': 'microeconomist.n.01', 'name': 'microeconomist'}, {'id': 16361, 'synset': 'middle-aged_man.n.01', 'name': 'middle-aged_man'}, {'id': 16362, 'synset': 'middlebrow.n.01', 'name': 'middlebrow'}, {'id': 16363, 'synset': 'middleweight.n.01', 'name': 'middleweight'}, {'id': 16364, 'synset': 'midwife.n.01', 'name': 'midwife'}, {'id': 16365, 'synset': 'mikado.n.01', 'name': 'mikado'}, {'id': 16366, 'synset': 'milanese.n.01', 'name': 'Milanese'}, {'id': 16367, 'synset': 'miler.n.02', 'name': 'miler'}, {'id': 16368, 'synset': 'miles_gloriosus.n.01', 'name': 'miles_gloriosus'}, {'id': 16369, 'synset': 'military_attache.n.01', 'name': 'military_attache'}, {'id': 16370, 'synset': 'military_chaplain.n.01', 'name': 'military_chaplain'}, {'id': 16371, 'synset': 'military_leader.n.01', 'name': 'military_leader'}, {'id': 16372, 'synset': 'military_officer.n.01', 'name': 'military_officer'}, {'id': 16373, 'synset': 'military_policeman.n.01', 'name': 'military_policeman'}, {'id': 16374, 'synset': 'mill_agent.n.01', 'name': 'mill_agent'}, {'id': 16375, 'synset': 'mill-hand.n.01', 'name': 'mill-hand'}, {'id': 16376, 'synset': 'millionairess.n.01', 'name': 'millionairess'}, {'id': 16377, 'synset': 'millwright.n.01', 'name': 'millwright'}, {'id': 16378, 'synset': 'minder.n.01', 'name': 'minder'}, {'id': 16379, 'synset': 'mining_engineer.n.01', 'name': 'mining_engineer'}, {'id': 16380, 'synset': 'minister.n.02', 'name': 'minister'}, {'id': 16381, 'synset': 'ministrant.n.01', 'name': 'ministrant'}, {'id': 16382, 'synset': 'minor_leaguer.n.01', 'name': 'minor_leaguer'}, {'id': 16383, 'synset': 'minuteman.n.01', 'name': 'Minuteman'}, {'id': 16384, 'synset': 'misanthrope.n.01', 'name': 'misanthrope'}, {'id': 16385, 'synset': 'misfit.n.01', 'name': 'misfit'}, {'id': 16386, 'synset': 'mistress.n.03', 'name': 'mistress'}, {'id': 16387, 'synset': 'mistress.n.01', 'name': 'mistress'}, {'id': 16388, 'synset': 'mixed-blood.n.01', 'name': 'mixed-blood'}, {'id': 16389, 'synset': 'model.n.03', 'name': 'model'}, {'id': 16390, 'synset': 'class_act.n.01', 'name': 'class_act'}, {'id': 16391, 'synset': 'modeler.n.01', 'name': 'modeler'}, {'id': 16392, 'synset': 'modifier.n.02', 'name': 'modifier'}, {'id': 16393, 'synset': 'molecular_biologist.n.01', 'name': 'molecular_biologist'}, {'id': 16394, 'synset': 'monegasque.n.01', 'name': 'Monegasque'}, {'id': 16395, 'synset': 'monetarist.n.01', 'name': 'monetarist'}, {'id': 16396, 'synset': 'moneygrubber.n.01', 'name': 'moneygrubber'}, {'id': 16397, 'synset': 'moneymaker.n.01', 'name': 'moneymaker'}, {'id': 16398, 'synset': 'mongoloid.n.01', 'name': 'Mongoloid'}, {'id': 16399, 'synset': 'monolingual.n.01', 'name': 'monolingual'}, {'id': 16400, 'synset': 'monologist.n.01', 'name': 'monologist'}, {'id': 16401, 'synset': 'moonlighter.n.01', 'name': 'moonlighter'}, {'id': 16402, 'synset': 'moralist.n.01', 'name': 'moralist'}, {'id': 16403, 'synset': 'morosoph.n.01', 'name': 'morosoph'}, {'id': 16404, 'synset': 'morris_dancer.n.01', 'name': 'morris_dancer'}, {'id': 16405, 'synset': 'mortal_enemy.n.01', 'name': 'mortal_enemy'}, {'id': 16406, 'synset': 'mortgagee.n.01', 'name': 'mortgagee'}, {'id': 16407, 'synset': 'mortician.n.01', 'name': 'mortician'}, {'id': 16408, 'synset': 'moss-trooper.n.01', 'name': 'moss-trooper'}, {'id': 16409, 'synset': 'mother.n.01', 'name': 'mother'}, {'id': 16410, 'synset': 'mother.n.04', 'name': 'mother'}, {'id': 16411, 'synset': 'mother.n.03', 'name': 'mother'}, {'id': 16412, 'synset': 'mother_figure.n.01', 'name': 'mother_figure'}, {'id': 16413, 'synset': 'mother_hen.n.01', 'name': 'mother_hen'}, {'id': 16414, 'synset': 'mother-in-law.n.01', 'name': 'mother-in-law'}, {'id': 16415, 'synset': "mother's_boy.n.01", 'name': "mother's_boy"}, {'id': 16416, 'synset': "mother's_daughter.n.01", 'name': "mother's_daughter"}, {'id': 16417, 'synset': 'motorcycle_cop.n.01', 'name': 'motorcycle_cop'}, {'id': 16418, 'synset': 'motorcyclist.n.01', 'name': 'motorcyclist'}, {'id': 16419, 'synset': 'mound_builder.n.01', 'name': 'Mound_Builder'}, {'id': 16420, 'synset': 'mountebank.n.01', 'name': 'mountebank'}, {'id': 16421, 'synset': 'mourner.n.01', 'name': 'mourner'}, {'id': 16422, 'synset': 'mouthpiece.n.03', 'name': 'mouthpiece'}, {'id': 16423, 'synset': 'mover.n.03', 'name': 'mover'}, {'id': 16424, 'synset': 'moviegoer.n.01', 'name': 'moviegoer'}, {'id': 16425, 'synset': 'muffin_man.n.01', 'name': 'muffin_man'}, {'id': 16426, 'synset': 'mugwump.n.02', 'name': 'mugwump'}, {'id': 16427, 'synset': 'mullah.n.01', 'name': 'Mullah'}, {'id': 16428, 'synset': 'muncher.n.01', 'name': 'muncher'}, {'id': 16429, 'synset': 'murderess.n.01', 'name': 'murderess'}, {'id': 16430, 'synset': 'murder_suspect.n.01', 'name': 'murder_suspect'}, {'id': 16431, 'synset': 'musher.n.01', 'name': 'musher'}, {'id': 16432, 'synset': 'musician.n.01', 'name': 'musician'}, {'id': 16433, 'synset': 'musicologist.n.01', 'name': 'musicologist'}, {'id': 16434, 'synset': 'music_teacher.n.01', 'name': 'music_teacher'}, {'id': 16435, 'synset': 'musketeer.n.01', 'name': 'musketeer'}, {'id': 16436, 'synset': 'muslimah.n.01', 'name': 'Muslimah'}, {'id': 16437, 'synset': 'mutilator.n.01', 'name': 'mutilator'}, {'id': 16438, 'synset': 'mutineer.n.01', 'name': 'mutineer'}, {'id': 16439, 'synset': 'mute.n.01', 'name': 'mute'}, {'id': 16440, 'synset': 'mutterer.n.01', 'name': 'mutterer'}, {'id': 16441, 'synset': 'muzzler.n.01', 'name': 'muzzler'}, {'id': 16442, 'synset': 'mycenaen.n.01', 'name': 'Mycenaen'}, {'id': 16443, 'synset': 'mycologist.n.01', 'name': 'mycologist'}, {'id': 16444, 'synset': 'myope.n.01', 'name': 'myope'}, {'id': 16445, 'synset': 'myrmidon.n.01', 'name': 'myrmidon'}, {'id': 16446, 'synset': 'mystic.n.01', 'name': 'mystic'}, {'id': 16447, 'synset': 'mythologist.n.01', 'name': 'mythologist'}, {'id': 16448, 'synset': 'naif.n.01', 'name': 'naif'}, {'id': 16449, 'synset': 'nailer.n.01', 'name': 'nailer'}, {'id': 16450, 'synset': 'namby-pamby.n.01', 'name': 'namby-pamby'}, {'id': 16451, 'synset': 'name_dropper.n.01', 'name': 'name_dropper'}, {'id': 16452, 'synset': 'namer.n.01', 'name': 'namer'}, {'id': 16453, 'synset': 'nan.n.01', 'name': 'nan'}, {'id': 16454, 'synset': 'nanny.n.01', 'name': 'nanny'}, {'id': 16455, 'synset': 'narc.n.01', 'name': 'narc'}, {'id': 16456, 'synset': 'narcissist.n.01', 'name': 'narcissist'}, {'id': 16457, 'synset': 'nark.n.01', 'name': 'nark'}, {'id': 16458, 'synset': 'nationalist.n.02', 'name': 'nationalist'}, {'id': 16459, 'synset': 'nautch_girl.n.01', 'name': 'nautch_girl'}, {'id': 16460, 'synset': 'naval_commander.n.01', 'name': 'naval_commander'}, {'id': 16461, 'synset': 'navy_seal.n.01', 'name': 'Navy_SEAL'}, {'id': 16462, 'synset': 'obstructionist.n.01', 'name': 'obstructionist'}, {'id': 16463, 'synset': 'nazarene.n.02', 'name': 'Nazarene'}, {'id': 16464, 'synset': 'nazarene.n.01', 'name': 'Nazarene'}, {'id': 16465, 'synset': 'nazi.n.01', 'name': 'Nazi'}, {'id': 16466, 'synset': 'nebbish.n.01', 'name': 'nebbish'}, {'id': 16467, 'synset': 'necker.n.01', 'name': 'necker'}, {'id': 16468, 'synset': 'neonate.n.01', 'name': 'neonate'}, {'id': 16469, 'synset': 'nephew.n.01', 'name': 'nephew'}, {'id': 16470, 'synset': 'neurobiologist.n.01', 'name': 'neurobiologist'}, {'id': 16471, 'synset': 'neurologist.n.01', 'name': 'neurologist'}, {'id': 16472, 'synset': 'neurosurgeon.n.01', 'name': 'neurosurgeon'}, {'id': 16473, 'synset': 'neutral.n.01', 'name': 'neutral'}, {'id': 16474, 'synset': 'neutralist.n.01', 'name': 'neutralist'}, {'id': 16475, 'synset': 'newcomer.n.01', 'name': 'newcomer'}, {'id': 16476, 'synset': 'newcomer.n.02', 'name': 'newcomer'}, {'id': 16477, 'synset': 'new_dealer.n.01', 'name': 'New_Dealer'}, {'id': 16478, 'synset': 'newspaper_editor.n.01', 'name': 'newspaper_editor'}, {'id': 16479, 'synset': 'newsreader.n.01', 'name': 'newsreader'}, {'id': 16480, 'synset': 'newtonian.n.01', 'name': 'Newtonian'}, {'id': 16481, 'synset': 'niece.n.01', 'name': 'niece'}, {'id': 16482, 'synset': 'niggard.n.01', 'name': 'niggard'}, {'id': 16483, 'synset': 'night_porter.n.01', 'name': 'night_porter'}, {'id': 16484, 'synset': 'night_rider.n.01', 'name': 'night_rider'}, {'id': 16485, 'synset': 'nimby.n.01', 'name': 'NIMBY'}, {'id': 16486, 'synset': 'niqaabi.n.01', 'name': 'niqaabi'}, {'id': 16487, 'synset': 'nitpicker.n.01', 'name': 'nitpicker'}, {'id': 16488, 'synset': 'nobelist.n.01', 'name': 'Nobelist'}, {'id': 16489, 'synset': 'noc.n.01', 'name': 'NOC'}, {'id': 16490, 'synset': 'noncandidate.n.01', 'name': 'noncandidate'}, {'id': 16491, 'synset': 'noncommissioned_officer.n.01', 'name': 'noncommissioned_officer'}, {'id': 16492, 'synset': 'nondescript.n.01', 'name': 'nondescript'}, {'id': 16493, 'synset': 'nondriver.n.01', 'name': 'nondriver'}, {'id': 16494, 'synset': 'nonparticipant.n.01', 'name': 'nonparticipant'}, {'id': 16495, 'synset': 'nonperson.n.01', 'name': 'nonperson'}, {'id': 16496, 'synset': 'nonresident.n.01', 'name': 'nonresident'}, {'id': 16497, 'synset': 'nonsmoker.n.01', 'name': 'nonsmoker'}, {'id': 16498, 'synset': 'northern_baptist.n.01', 'name': 'Northern_Baptist'}, {'id': 16499, 'synset': 'noticer.n.01', 'name': 'noticer'}, {'id': 16500, 'synset': 'novelist.n.01', 'name': 'novelist'}, {'id': 16501, 'synset': 'novitiate.n.02', 'name': 'novitiate'}, {'id': 16502, 'synset': 'nuclear_chemist.n.01', 'name': 'nuclear_chemist'}, {'id': 16503, 'synset': 'nudger.n.01', 'name': 'nudger'}, {'id': 16504, 'synset': 'nullipara.n.01', 'name': 'nullipara'}, {'id': 16505, 'synset': 'number_theorist.n.01', 'name': 'number_theorist'}, {'id': 16506, 'synset': 'nurse.n.01', 'name': 'nurse'}, {'id': 16507, 'synset': 'nursling.n.01', 'name': 'nursling'}, {'id': 16508, 'synset': 'nymph.n.03', 'name': 'nymph'}, {'id': 16509, 'synset': 'nymphet.n.01', 'name': 'nymphet'}, {'id': 16510, 'synset': 'nympholept.n.01', 'name': 'nympholept'}, {'id': 16511, 'synset': 'nymphomaniac.n.01', 'name': 'nymphomaniac'}, {'id': 16512, 'synset': 'oarswoman.n.01', 'name': 'oarswoman'}, {'id': 16513, 'synset': 'oboist.n.01', 'name': 'oboist'}, {'id': 16514, 'synset': 'obscurantist.n.01', 'name': 'obscurantist'}, {'id': 16515, 'synset': 'observer.n.02', 'name': 'observer'}, {'id': 16516, 'synset': 'obstetrician.n.01', 'name': 'obstetrician'}, {'id': 16517, 'synset': 'occupier.n.02', 'name': 'occupier'}, {'id': 16518, 'synset': 'occultist.n.01', 'name': 'occultist'}, {'id': 16519, 'synset': 'wine_lover.n.01', 'name': 'wine_lover'}, {'id': 16520, 'synset': 'offerer.n.01', 'name': 'offerer'}, {'id': 16521, 'synset': 'office-bearer.n.01', 'name': 'office-bearer'}, {'id': 16522, 'synset': 'office_boy.n.01', 'name': 'office_boy'}, {'id': 16523, 'synset': 'officeholder.n.01', 'name': 'officeholder'}, {'id': 16524, 'synset': 'officiant.n.01', 'name': 'officiant'}, {'id': 16525, 'synset': 'federal.n.02', 'name': 'Federal'}, {'id': 16526, 'synset': 'oilman.n.02', 'name': 'oilman'}, {'id': 16527, 'synset': 'oil_tycoon.n.01', 'name': 'oil_tycoon'}, {'id': 16528, 'synset': 'old-age_pensioner.n.01', 'name': 'old-age_pensioner'}, {'id': 16529, 'synset': 'old_boy.n.02', 'name': 'old_boy'}, {'id': 16530, 'synset': 'old_lady.n.01', 'name': 'old_lady'}, {'id': 16531, 'synset': 'old_man.n.03', 'name': 'old_man'}, {'id': 16532, 'synset': 'oldster.n.01', 'name': 'oldster'}, {'id': 16533, 'synset': 'old-timer.n.02', 'name': 'old-timer'}, {'id': 16534, 'synset': 'old_woman.n.01', 'name': 'old_woman'}, {'id': 16535, 'synset': 'oligarch.n.01', 'name': 'oligarch'}, {'id': 16536, 'synset': 'olympian.n.01', 'name': 'Olympian'}, {'id': 16537, 'synset': 'omnivore.n.01', 'name': 'omnivore'}, {'id': 16538, 'synset': 'oncologist.n.01', 'name': 'oncologist'}, {'id': 16539, 'synset': 'onlooker.n.01', 'name': 'onlooker'}, {'id': 16540, 'synset': 'onomancer.n.01', 'name': 'onomancer'}, {'id': 16541, 'synset': 'operator.n.03', 'name': 'operator'}, {'id': 16542, 'synset': 'opportunist.n.01', 'name': 'opportunist'}, {'id': 16543, 'synset': 'optimist.n.01', 'name': 'optimist'}, {'id': 16544, 'synset': 'orangeman.n.01', 'name': 'Orangeman'}, {'id': 16545, 'synset': 'orator.n.01', 'name': 'orator'}, {'id': 16546, 'synset': 'orderly.n.02', 'name': 'orderly'}, {'id': 16547, 'synset': 'orderly.n.01', 'name': 'orderly'}, {'id': 16548, 'synset': 'orderly_sergeant.n.01', 'name': 'orderly_sergeant'}, {'id': 16549, 'synset': 'ordinand.n.01', 'name': 'ordinand'}, {'id': 16550, 'synset': 'ordinary.n.03', 'name': 'ordinary'}, {'id': 16551, 'synset': 'organ-grinder.n.01', 'name': 'organ-grinder'}, {'id': 16552, 'synset': 'organist.n.01', 'name': 'organist'}, {'id': 16553, 'synset': 'organization_man.n.01', 'name': 'organization_man'}, {'id': 16554, 'synset': 'organizer.n.01', 'name': 'organizer'}, {'id': 16555, 'synset': 'organizer.n.02', 'name': 'organizer'}, {'id': 16556, 'synset': 'originator.n.01', 'name': 'originator'}, {'id': 16557, 'synset': 'ornithologist.n.01', 'name': 'ornithologist'}, {'id': 16558, 'synset': 'orphan.n.01', 'name': 'orphan'}, {'id': 16559, 'synset': 'orphan.n.02', 'name': 'orphan'}, {'id': 16560, 'synset': 'osteopath.n.01', 'name': 'osteopath'}, {'id': 16561, 'synset': 'out-and-outer.n.01', 'name': 'out-and-outer'}, {'id': 16562, 'synset': 'outdoorswoman.n.01', 'name': 'outdoorswoman'}, {'id': 16563, 'synset': 'outfielder.n.02', 'name': 'outfielder'}, {'id': 16564, 'synset': 'outfielder.n.01', 'name': 'outfielder'}, {'id': 16565, 'synset': 'right_fielder.n.01', 'name': 'right_fielder'}, {'id': 16566, 'synset': 'right-handed_pitcher.n.01', 'name': 'right-handed_pitcher'}, {'id': 16567, 'synset': 'outlier.n.01', 'name': 'outlier'}, {'id': 16568, 'synset': 'owner-occupier.n.01', 'name': 'owner-occupier'}, {'id': 16569, 'synset': 'oyabun.n.01', 'name': 'oyabun'}, {'id': 16570, 'synset': 'packrat.n.01', 'name': 'packrat'}, {'id': 16571, 'synset': 'padrone.n.02', 'name': 'padrone'}, {'id': 16572, 'synset': 'padrone.n.01', 'name': 'padrone'}, {'id': 16573, 'synset': 'page.n.04', 'name': 'page'}, {'id': 16574, 'synset': 'painter.n.02', 'name': 'painter'}, {'id': 16575, 'synset': 'paleo-american.n.01', 'name': 'Paleo-American'}, {'id': 16576, 'synset': 'paleontologist.n.01', 'name': 'paleontologist'}, {'id': 16577, 'synset': 'pallbearer.n.01', 'name': 'pallbearer'}, {'id': 16578, 'synset': 'palmist.n.01', 'name': 'palmist'}, {'id': 16579, 'synset': 'pamperer.n.01', 'name': 'pamperer'}, {'id': 16580, 'synset': 'panchen_lama.n.01', 'name': 'Panchen_Lama'}, {'id': 16581, 'synset': 'panelist.n.01', 'name': 'panelist'}, {'id': 16582, 'synset': 'panhandler.n.01', 'name': 'panhandler'}, {'id': 16583, 'synset': 'paparazzo.n.01', 'name': 'paparazzo'}, {'id': 16584, 'synset': 'paperboy.n.01', 'name': 'paperboy'}, {'id': 16585, 'synset': 'paperhanger.n.02', 'name': 'paperhanger'}, {'id': 16586, 'synset': 'paperhanger.n.01', 'name': 'paperhanger'}, {'id': 16587, 'synset': 'papoose.n.01', 'name': 'papoose'}, {'id': 16588, 'synset': 'pardoner.n.02', 'name': 'pardoner'}, {'id': 16589, 'synset': 'paretic.n.01', 'name': 'paretic'}, {'id': 16590, 'synset': 'parishioner.n.01', 'name': 'parishioner'}, {'id': 16591, 'synset': 'park_commissioner.n.01', 'name': 'park_commissioner'}, {'id': 16592, 'synset': 'parliamentarian.n.01', 'name': 'Parliamentarian'}, {'id': 16593, 'synset': 'parliamentary_agent.n.01', 'name': 'parliamentary_agent'}, {'id': 16594, 'synset': 'parodist.n.01', 'name': 'parodist'}, {'id': 16595, 'synset': 'parricide.n.01', 'name': 'parricide'}, {'id': 16596, 'synset': 'parrot.n.02', 'name': 'parrot'}, {'id': 16597, 'synset': 'partaker.n.01', 'name': 'partaker'}, {'id': 16598, 'synset': 'part-timer.n.01', 'name': 'part-timer'}, {'id': 16599, 'synset': 'party.n.05', 'name': 'party'}, {'id': 16600, 'synset': 'party_man.n.01', 'name': 'party_man'}, {'id': 16601, 'synset': 'passenger.n.01', 'name': 'passenger'}, {'id': 16602, 'synset': 'passer.n.03', 'name': 'passer'}, {'id': 16603, 'synset': 'paster.n.01', 'name': 'paster'}, {'id': 16604, 'synset': 'pater.n.01', 'name': 'pater'}, {'id': 16605, 'synset': 'patient.n.01', 'name': 'patient'}, {'id': 16606, 'synset': 'patriarch.n.04', 'name': 'patriarch'}, {'id': 16607, 'synset': 'patriarch.n.03', 'name': 'patriarch'}, {'id': 16608, 'synset': 'patriarch.n.02', 'name': 'patriarch'}, {'id': 16609, 'synset': 'patriot.n.01', 'name': 'patriot'}, {'id': 16610, 'synset': 'patron.n.03', 'name': 'patron'}, {'id': 16611, 'synset': 'patternmaker.n.01', 'name': 'patternmaker'}, {'id': 16612, 'synset': 'pawnbroker.n.01', 'name': 'pawnbroker'}, {'id': 16613, 'synset': 'payer.n.01', 'name': 'payer'}, {'id': 16614, 'synset': 'peacekeeper.n.01', 'name': 'peacekeeper'}, {'id': 16615, 'synset': 'peasant.n.02', 'name': 'peasant'}, {'id': 16616, 'synset': 'pedant.n.01', 'name': 'pedant'}, {'id': 16617, 'synset': 'peddler.n.01', 'name': 'peddler'}, {'id': 16618, 'synset': 'pederast.n.01', 'name': 'pederast'}, {'id': 16619, 'synset': 'penologist.n.01', 'name': 'penologist'}, {'id': 16620, 'synset': 'pentathlete.n.01', 'name': 'pentathlete'}, {'id': 16621, 'synset': 'pentecostal.n.01', 'name': 'Pentecostal'}, {'id': 16622, 'synset': 'percussionist.n.01', 'name': 'percussionist'}, {'id': 16623, 'synset': 'periodontist.n.01', 'name': 'periodontist'}, {'id': 16624, 'synset': 'peshmerga.n.01', 'name': 'peshmerga'}, {'id': 16625, 'synset': 'personality.n.02', 'name': 'personality'}, {'id': 16626, 'synset': 'personal_representative.n.01', 'name': 'personal_representative'}, {'id': 16627, 'synset': 'personage.n.01', 'name': 'personage'}, {'id': 16628, 'synset': 'persona_grata.n.01', 'name': 'persona_grata'}, {'id': 16629, 'synset': 'persona_non_grata.n.01', 'name': 'persona_non_grata'}, {'id': 16630, 'synset': 'personification.n.01', 'name': 'personification'}, {'id': 16631, 'synset': 'perspirer.n.01', 'name': 'perspirer'}, {'id': 16632, 'synset': 'pervert.n.01', 'name': 'pervert'}, {'id': 16633, 'synset': 'pessimist.n.01', 'name': 'pessimist'}, {'id': 16634, 'synset': 'pest.n.03', 'name': 'pest'}, {'id': 16635, 'synset': 'peter_pan.n.01', 'name': 'Peter_Pan'}, {'id': 16636, 'synset': 'petitioner.n.01', 'name': 'petitioner'}, {'id': 16637, 'synset': 'petit_juror.n.01', 'name': 'petit_juror'}, {'id': 16638, 'synset': 'pet_sitter.n.01', 'name': 'pet_sitter'}, {'id': 16639, 'synset': 'petter.n.01', 'name': 'petter'}, {'id': 16640, 'synset': 'pharaoh.n.01', 'name': 'Pharaoh'}, {'id': 16641, 'synset': 'pharmacist.n.01', 'name': 'pharmacist'}, {'id': 16642, 'synset': 'philanthropist.n.01', 'name': 'philanthropist'}, {'id': 16643, 'synset': 'philatelist.n.01', 'name': 'philatelist'}, {'id': 16644, 'synset': 'philosopher.n.02', 'name': 'philosopher'}, {'id': 16645, 'synset': 'phonetician.n.01', 'name': 'phonetician'}, {'id': 16646, 'synset': 'phonologist.n.01', 'name': 'phonologist'}, {'id': 16647, 'synset': 'photojournalist.n.01', 'name': 'photojournalist'}, {'id': 16648, 'synset': 'photometrist.n.01', 'name': 'photometrist'}, {'id': 16649, 'synset': 'physical_therapist.n.01', 'name': 'physical_therapist'}, {'id': 16650, 'synset': 'physicist.n.01', 'name': 'physicist'}, {'id': 16651, 'synset': 'piano_maker.n.01', 'name': 'piano_maker'}, {'id': 16652, 'synset': 'picker.n.01', 'name': 'picker'}, {'id': 16653, 'synset': 'picnicker.n.01', 'name': 'picnicker'}, {'id': 16654, 'synset': 'pilgrim.n.01', 'name': 'pilgrim'}, {'id': 16655, 'synset': 'pill.n.03', 'name': 'pill'}, {'id': 16656, 'synset': 'pillar.n.03', 'name': 'pillar'}, {'id': 16657, 'synset': 'pill_head.n.01', 'name': 'pill_head'}, {'id': 16658, 'synset': 'pilot.n.02', 'name': 'pilot'}, {'id': 16659, 'synset': 'piltdown_man.n.01', 'name': 'Piltdown_man'}, {'id': 16660, 'synset': 'pimp.n.01', 'name': 'pimp'}, {'id': 16661, 'synset': 'pipe_smoker.n.01', 'name': 'pipe_smoker'}, {'id': 16662, 'synset': 'pip-squeak.n.01', 'name': 'pip-squeak'}, {'id': 16663, 'synset': 'pisser.n.01', 'name': 'pisser'}, {'id': 16664, 'synset': 'pitcher.n.01', 'name': 'pitcher'}, {'id': 16665, 'synset': 'pitchman.n.01', 'name': 'pitchman'}, {'id': 16666, 'synset': 'placeman.n.01', 'name': 'placeman'}, {'id': 16667, 'synset': 'placer_miner.n.01', 'name': 'placer_miner'}, {'id': 16668, 'synset': 'plagiarist.n.01', 'name': 'plagiarist'}, {'id': 16669, 'synset': 'plainsman.n.01', 'name': 'plainsman'}, {'id': 16670, 'synset': 'planner.n.01', 'name': 'planner'}, {'id': 16671, 'synset': 'planter.n.01', 'name': 'planter'}, {'id': 16672, 'synset': 'plasterer.n.01', 'name': 'plasterer'}, {'id': 16673, 'synset': 'platinum_blond.n.01', 'name': 'platinum_blond'}, {'id': 16674, 'synset': 'platitudinarian.n.01', 'name': 'platitudinarian'}, {'id': 16675, 'synset': 'playboy.n.01', 'name': 'playboy'}, {'id': 16676, 'synset': 'player.n.01', 'name': 'player'}, {'id': 16677, 'synset': 'playmate.n.01', 'name': 'playmate'}, {'id': 16678, 'synset': 'pleaser.n.01', 'name': 'pleaser'}, {'id': 16679, 'synset': 'pledger.n.01', 'name': 'pledger'}, {'id': 16680, 'synset': 'plenipotentiary.n.01', 'name': 'plenipotentiary'}, {'id': 16681, 'synset': 'plier.n.01', 'name': 'plier'}, {'id': 16682, 'synset': 'plodder.n.03', 'name': 'plodder'}, {'id': 16683, 'synset': 'plodder.n.02', 'name': 'plodder'}, {'id': 16684, 'synset': 'plotter.n.02', 'name': 'plotter'}, {'id': 16685, 'synset': 'plumber.n.01', 'name': 'plumber'}, {'id': 16686, 'synset': 'pluralist.n.02', 'name': 'pluralist'}, {'id': 16687, 'synset': 'pluralist.n.01', 'name': 'pluralist'}, {'id': 16688, 'synset': 'poet.n.01', 'name': 'poet'}, {'id': 16689, 'synset': 'pointsman.n.01', 'name': 'pointsman'}, {'id': 16690, 'synset': 'point_woman.n.01', 'name': 'point_woman'}, {'id': 16691, 'synset': 'policyholder.n.01', 'name': 'policyholder'}, {'id': 16692, 'synset': 'political_prisoner.n.01', 'name': 'political_prisoner'}, {'id': 16693, 'synset': 'political_scientist.n.01', 'name': 'political_scientist'}, {'id': 16694, 'synset': 'politician.n.02', 'name': 'politician'}, {'id': 16695, 'synset': 'politician.n.03', 'name': 'politician'}, {'id': 16696, 'synset': 'pollster.n.01', 'name': 'pollster'}, {'id': 16697, 'synset': 'polluter.n.01', 'name': 'polluter'}, {'id': 16698, 'synset': 'pool_player.n.01', 'name': 'pool_player'}, {'id': 16699, 'synset': 'portraitist.n.01', 'name': 'portraitist'}, {'id': 16700, 'synset': 'poseuse.n.01', 'name': 'poseuse'}, {'id': 16701, 'synset': 'positivist.n.01', 'name': 'positivist'}, {'id': 16702, 'synset': 'postdoc.n.02', 'name': 'postdoc'}, {'id': 16703, 'synset': 'poster_girl.n.01', 'name': 'poster_girl'}, {'id': 16704, 'synset': 'postulator.n.02', 'name': 'postulator'}, {'id': 16705, 'synset': 'private_citizen.n.01', 'name': 'private_citizen'}, {'id': 16706, 'synset': 'problem_solver.n.01', 'name': 'problem_solver'}, {'id': 16707, 'synset': 'pro-lifer.n.01', 'name': 'pro-lifer'}, {'id': 16708, 'synset': 'prosthetist.n.01', 'name': 'prosthetist'}, {'id': 16709, 'synset': 'postulant.n.01', 'name': 'postulant'}, {'id': 16710, 'synset': 'potboy.n.01', 'name': 'potboy'}, {'id': 16711, 'synset': 'poultryman.n.01', 'name': 'poultryman'}, {'id': 16712, 'synset': 'power_user.n.01', 'name': 'power_user'}, {'id': 16713, 'synset': 'power_worker.n.01', 'name': 'power_worker'}, {'id': 16714, 'synset': 'practitioner.n.01', 'name': 'practitioner'}, {'id': 16715, 'synset': 'prayer.n.05', 'name': 'prayer'}, {'id': 16716, 'synset': 'preceptor.n.01', 'name': 'preceptor'}, {'id': 16717, 'synset': 'predecessor.n.01', 'name': 'predecessor'}, {'id': 16718, 'synset': 'preemptor.n.02', 'name': 'preemptor'}, {'id': 16719, 'synset': 'preemptor.n.01', 'name': 'preemptor'}, {'id': 16720, 'synset': 'premature_baby.n.01', 'name': 'premature_baby'}, {'id': 16721, 'synset': 'presbyter.n.01', 'name': 'presbyter'}, {'id': 16722, 'synset': 'presenter.n.02', 'name': 'presenter'}, {'id': 16723, 'synset': 'presentist.n.01', 'name': 'presentist'}, {'id': 16724, 'synset': 'preserver.n.03', 'name': 'preserver'}, {'id': 16725, 'synset': 'president.n.03', 'name': 'president'}, {'id': 16726, 'synset': 'president_of_the_united_states.n.01', 'name': 'President_of_the_United_States'}, {'id': 16727, 'synset': 'president.n.05', 'name': 'president'}, {'id': 16728, 'synset': 'press_agent.n.01', 'name': 'press_agent'}, {'id': 16729, 'synset': 'press_photographer.n.01', 'name': 'press_photographer'}, {'id': 16730, 'synset': 'priest.n.01', 'name': 'priest'}, {'id': 16731, 'synset': 'prima_ballerina.n.01', 'name': 'prima_ballerina'}, {'id': 16732, 'synset': 'prima_donna.n.02', 'name': 'prima_donna'}, {'id': 16733, 'synset': 'prima_donna.n.01', 'name': 'prima_donna'}, {'id': 16734, 'synset': 'primigravida.n.01', 'name': 'primigravida'}, {'id': 16735, 'synset': 'primordial_dwarf.n.01', 'name': 'primordial_dwarf'}, {'id': 16736, 'synset': 'prince_charming.n.01', 'name': 'prince_charming'}, {'id': 16737, 'synset': 'prince_consort.n.01', 'name': 'prince_consort'}, {'id': 16738, 'synset': 'princeling.n.01', 'name': 'princeling'}, {'id': 16739, 'synset': 'prince_of_wales.n.01', 'name': 'Prince_of_Wales'}, {'id': 16740, 'synset': 'princess.n.01', 'name': 'princess'}, {'id': 16741, 'synset': 'princess_royal.n.01', 'name': 'princess_royal'}, {'id': 16742, 'synset': 'principal.n.06', 'name': 'principal'}, {'id': 16743, 'synset': 'principal.n.02', 'name': 'principal'}, {'id': 16744, 'synset': 'print_seller.n.01', 'name': 'print_seller'}, {'id': 16745, 'synset': 'prior.n.01', 'name': 'prior'}, {'id': 16746, 'synset': 'private.n.01', 'name': 'private'}, {'id': 16747, 'synset': 'probationer.n.01', 'name': 'probationer'}, {'id': 16748, 'synset': 'processor.n.02', 'name': 'processor'}, {'id': 16749, 'synset': 'process-server.n.01', 'name': 'process-server'}, {'id': 16750, 'synset': 'proconsul.n.02', 'name': 'proconsul'}, {'id': 16751, 'synset': 'proconsul.n.01', 'name': 'proconsul'}, {'id': 16752, 'synset': 'proctologist.n.01', 'name': 'proctologist'}, {'id': 16753, 'synset': 'proctor.n.01', 'name': 'proctor'}, {'id': 16754, 'synset': 'procurator.n.02', 'name': 'procurator'}, {'id': 16755, 'synset': 'procurer.n.02', 'name': 'procurer'}, {'id': 16756, 'synset': 'profit_taker.n.01', 'name': 'profit_taker'}, {'id': 16757, 'synset': 'programmer.n.01', 'name': 'programmer'}, {'id': 16758, 'synset': 'promiser.n.01', 'name': 'promiser'}, {'id': 16759, 'synset': 'promoter.n.01', 'name': 'promoter'}, {'id': 16760, 'synset': 'promulgator.n.01', 'name': 'promulgator'}, {'id': 16761, 'synset': 'propagandist.n.01', 'name': 'propagandist'}, {'id': 16762, 'synset': 'propagator.n.02', 'name': 'propagator'}, {'id': 16763, 'synset': 'property_man.n.01', 'name': 'property_man'}, {'id': 16764, 'synset': 'prophetess.n.01', 'name': 'prophetess'}, {'id': 16765, 'synset': 'prophet.n.02', 'name': 'prophet'}, {'id': 16766, 'synset': 'prosecutor.n.01', 'name': 'prosecutor'}, {'id': 16767, 'synset': 'prospector.n.01', 'name': 'prospector'}, {'id': 16768, 'synset': 'protectionist.n.01', 'name': 'protectionist'}, {'id': 16769, 'synset': 'protegee.n.01', 'name': 'protegee'}, {'id': 16770, 'synset': 'protozoologist.n.01', 'name': 'protozoologist'}, {'id': 16771, 'synset': 'provost_marshal.n.01', 'name': 'provost_marshal'}, {'id': 16772, 'synset': 'pruner.n.01', 'name': 'pruner'}, {'id': 16773, 'synset': 'psalmist.n.01', 'name': 'psalmist'}, {'id': 16774, 'synset': 'psephologist.n.01', 'name': 'psephologist'}, {'id': 16775, 'synset': 'psychiatrist.n.01', 'name': 'psychiatrist'}, {'id': 16776, 'synset': 'psychic.n.01', 'name': 'psychic'}, {'id': 16777, 'synset': 'psycholinguist.n.01', 'name': 'psycholinguist'}, {'id': 16778, 'synset': 'psychophysicist.n.01', 'name': 'psychophysicist'}, {'id': 16779, 'synset': 'publican.n.01', 'name': 'publican'}, {'id': 16780, 'synset': 'pudge.n.01', 'name': 'pudge'}, {'id': 16781, 'synset': 'puerpera.n.01', 'name': 'puerpera'}, {'id': 16782, 'synset': 'punching_bag.n.01', 'name': 'punching_bag'}, {'id': 16783, 'synset': 'punter.n.02', 'name': 'punter'}, {'id': 16784, 'synset': 'punter.n.01', 'name': 'punter'}, {'id': 16785, 'synset': 'puppeteer.n.01', 'name': 'puppeteer'}, {'id': 16786, 'synset': 'puppy.n.02', 'name': 'puppy'}, {'id': 16787, 'synset': 'purchasing_agent.n.01', 'name': 'purchasing_agent'}, {'id': 16788, 'synset': 'puritan.n.02', 'name': 'puritan'}, {'id': 16789, 'synset': 'puritan.n.01', 'name': 'Puritan'}, {'id': 16790, 'synset': 'pursuer.n.02', 'name': 'pursuer'}, {'id': 16791, 'synset': 'pusher.n.03', 'name': 'pusher'}, {'id': 16792, 'synset': 'pusher.n.02', 'name': 'pusher'}, {'id': 16793, 'synset': 'pusher.n.01', 'name': 'pusher'}, {'id': 16794, 'synset': 'putz.n.01', 'name': 'putz'}, {'id': 16795, 'synset': 'pygmy.n.02', 'name': 'Pygmy'}, {'id': 16796, 'synset': 'qadi.n.01', 'name': 'qadi'}, {'id': 16797, 'synset': 'quadriplegic.n.01', 'name': 'quadriplegic'}, {'id': 16798, 'synset': 'quadruplet.n.02', 'name': 'quadruplet'}, {'id': 16799, 'synset': 'quaker.n.02', 'name': 'quaker'}, {'id': 16800, 'synset': 'quarter.n.11', 'name': 'quarter'}, {'id': 16801, 'synset': 'quarterback.n.01', 'name': 'quarterback'}, {'id': 16802, 'synset': 'quartermaster.n.01', 'name': 'quartermaster'}, {'id': 16803, 'synset': 'quartermaster_general.n.01', 'name': 'quartermaster_general'}, {'id': 16804, 'synset': 'quebecois.n.01', 'name': 'Quebecois'}, {'id': 16805, 'synset': 'queen.n.02', 'name': 'queen'}, {'id': 16806, 'synset': 'queen_of_england.n.01', 'name': 'Queen_of_England'}, {'id': 16807, 'synset': 'queen.n.03', 'name': 'queen'}, {'id': 16808, 'synset': 'queen.n.04', 'name': 'queen'}, {'id': 16809, 'synset': 'queen_consort.n.01', 'name': 'queen_consort'}, {'id': 16810, 'synset': 'queen_mother.n.01', 'name': 'queen_mother'}, {'id': 16811, 'synset': "queen's_counsel.n.01", 'name': "Queen's_Counsel"}, {'id': 16812, 'synset': 'question_master.n.01', 'name': 'question_master'}, {'id': 16813, 'synset': 'quick_study.n.01', 'name': 'quick_study'}, {'id': 16814, 'synset': 'quietist.n.01', 'name': 'quietist'}, {'id': 16815, 'synset': 'quitter.n.01', 'name': 'quitter'}, {'id': 16816, 'synset': 'rabbi.n.01', 'name': 'rabbi'}, {'id': 16817, 'synset': 'racist.n.01', 'name': 'racist'}, {'id': 16818, 'synset': 'radiobiologist.n.01', 'name': 'radiobiologist'}, {'id': 16819, 'synset': 'radiologic_technologist.n.01', 'name': 'radiologic_technologist'}, {'id': 16820, 'synset': 'radiologist.n.01', 'name': 'radiologist'}, {'id': 16821, 'synset': 'rainmaker.n.02', 'name': 'rainmaker'}, {'id': 16822, 'synset': 'raiser.n.01', 'name': 'raiser'}, {'id': 16823, 'synset': 'raja.n.01', 'name': 'raja'}, {'id': 16824, 'synset': 'rake.n.01', 'name': 'rake'}, {'id': 16825, 'synset': 'ramrod.n.02', 'name': 'ramrod'}, {'id': 16826, 'synset': 'ranch_hand.n.01', 'name': 'ranch_hand'}, {'id': 16827, 'synset': 'ranker.n.01', 'name': 'ranker'}, {'id': 16828, 'synset': 'ranter.n.01', 'name': 'ranter'}, {'id': 16829, 'synset': 'rape_suspect.n.01', 'name': 'rape_suspect'}, {'id': 16830, 'synset': 'rapper.n.01', 'name': 'rapper'}, {'id': 16831, 'synset': 'rapporteur.n.01', 'name': 'rapporteur'}, {'id': 16832, 'synset': 'rare_bird.n.01', 'name': 'rare_bird'}, {'id': 16833, 'synset': 'ratepayer.n.01', 'name': 'ratepayer'}, {'id': 16834, 'synset': 'raw_recruit.n.01', 'name': 'raw_recruit'}, {'id': 16835, 'synset': 'reader.n.01', 'name': 'reader'}, {'id': 16836, 'synset': 'reading_teacher.n.01', 'name': 'reading_teacher'}, {'id': 16837, 'synset': 'realist.n.01', 'name': 'realist'}, {'id': 16838, 'synset': 'real_estate_broker.n.01', 'name': 'real_estate_broker'}, {'id': 16839, 'synset': 'rear_admiral.n.01', 'name': 'rear_admiral'}, {'id': 16840, 'synset': 'receiver.n.05', 'name': 'receiver'}, {'id': 16841, 'synset': 'reciter.n.01', 'name': 'reciter'}, {'id': 16842, 'synset': 'recruit.n.02', 'name': 'recruit'}, {'id': 16843, 'synset': 'recruit.n.01', 'name': 'recruit'}, {'id': 16844, 'synset': 'recruiter.n.01', 'name': 'recruiter'}, {'id': 16845, 'synset': 'recruiting-sergeant.n.01', 'name': 'recruiting-sergeant'}, {'id': 16846, 'synset': 'redcap.n.01', 'name': 'redcap'}, {'id': 16847, 'synset': 'redhead.n.01', 'name': 'redhead'}, {'id': 16848, 'synset': 'redneck.n.01', 'name': 'redneck'}, {'id': 16849, 'synset': 'reeler.n.02', 'name': 'reeler'}, {'id': 16850, 'synset': 'reenactor.n.01', 'name': 'reenactor'}, {'id': 16851, 'synset': 'referral.n.01', 'name': 'referral'}, {'id': 16852, 'synset': 'referee.n.01', 'name': 'referee'}, {'id': 16853, 'synset': 'refiner.n.01', 'name': 'refiner'}, {'id': 16854, 'synset': 'reform_jew.n.01', 'name': 'Reform_Jew'}, {'id': 16855, 'synset': 'registered_nurse.n.01', 'name': 'registered_nurse'}, {'id': 16856, 'synset': 'registrar.n.01', 'name': 'registrar'}, {'id': 16857, 'synset': 'regius_professor.n.01', 'name': 'Regius_professor'}, {'id': 16858, 'synset': 'reliever.n.02', 'name': 'reliever'}, {'id': 16859, 'synset': 'anchorite.n.01', 'name': 'anchorite'}, {'id': 16860, 'synset': 'religious_leader.n.01', 'name': 'religious_leader'}, {'id': 16861, 'synset': 'remover.n.02', 'name': 'remover'}, {'id': 16862, 'synset': 'renaissance_man.n.01', 'name': 'Renaissance_man'}, {'id': 16863, 'synset': 'renegade.n.01', 'name': 'renegade'}, {'id': 16864, 'synset': 'rentier.n.01', 'name': 'rentier'}, {'id': 16865, 'synset': 'repairman.n.01', 'name': 'repairman'}, {'id': 16866, 'synset': 'reporter.n.01', 'name': 'reporter'}, {'id': 16867, 'synset': 'newswoman.n.01', 'name': 'newswoman'}, {'id': 16868, 'synset': 'representative.n.01', 'name': 'representative'}, {'id': 16869, 'synset': 'reprobate.n.01', 'name': 'reprobate'}, {'id': 16870, 'synset': 'rescuer.n.02', 'name': 'rescuer'}, {'id': 16871, 'synset': 'reservist.n.01', 'name': 'reservist'}, {'id': 16872, 'synset': 'resident_commissioner.n.01', 'name': 'resident_commissioner'}, {'id': 16873, 'synset': 'respecter.n.01', 'name': 'respecter'}, {'id': 16874, 'synset': 'restaurateur.n.01', 'name': 'restaurateur'}, {'id': 16875, 'synset': 'restrainer.n.02', 'name': 'restrainer'}, {'id': 16876, 'synset': 'retailer.n.01', 'name': 'retailer'}, {'id': 16877, 'synset': 'retiree.n.01', 'name': 'retiree'}, {'id': 16878, 'synset': 'returning_officer.n.01', 'name': 'returning_officer'}, {'id': 16879, 'synset': 'revenant.n.01', 'name': 'revenant'}, {'id': 16880, 'synset': 'revisionist.n.01', 'name': 'revisionist'}, {'id': 16881, 'synset': 'revolutionist.n.01', 'name': 'revolutionist'}, {'id': 16882, 'synset': 'rheumatologist.n.01', 'name': 'rheumatologist'}, {'id': 16883, 'synset': 'rhodesian_man.n.01', 'name': 'Rhodesian_man'}, {'id': 16884, 'synset': 'rhymer.n.01', 'name': 'rhymer'}, {'id': 16885, 'synset': 'rich_person.n.01', 'name': 'rich_person'}, {'id': 16886, 'synset': 'rider.n.03', 'name': 'rider'}, {'id': 16887, 'synset': 'riding_master.n.01', 'name': 'riding_master'}, {'id': 16888, 'synset': 'rifleman.n.02', 'name': 'rifleman'}, {'id': 16889, 'synset': 'right-hander.n.02', 'name': 'right-hander'}, {'id': 16890, 'synset': 'right-hand_man.n.01', 'name': 'right-hand_man'}, {'id': 16891, 'synset': 'ringer.n.03', 'name': 'ringer'}, {'id': 16892, 'synset': 'ringleader.n.01', 'name': 'ringleader'}, {'id': 16893, 'synset': 'roadman.n.02', 'name': 'roadman'}, {'id': 16894, 'synset': 'roarer.n.01', 'name': 'roarer'}, {'id': 16895, 'synset': 'rocket_engineer.n.01', 'name': 'rocket_engineer'}, {'id': 16896, 'synset': 'rocket_scientist.n.01', 'name': 'rocket_scientist'}, {'id': 16897, 'synset': 'rock_star.n.01', 'name': 'rock_star'}, {'id': 16898, 'synset': 'romanov.n.01', 'name': 'Romanov'}, {'id': 16899, 'synset': 'romanticist.n.02', 'name': 'romanticist'}, {'id': 16900, 'synset': 'ropemaker.n.01', 'name': 'ropemaker'}, {'id': 16901, 'synset': 'roper.n.02', 'name': 'roper'}, {'id': 16902, 'synset': 'roper.n.01', 'name': 'roper'}, {'id': 16903, 'synset': 'ropewalker.n.01', 'name': 'ropewalker'}, {'id': 16904, 'synset': 'rosebud.n.02', 'name': 'rosebud'}, {'id': 16905, 'synset': 'rosicrucian.n.02', 'name': 'Rosicrucian'}, {'id': 16906, 'synset': 'mountie.n.01', 'name': 'Mountie'}, {'id': 16907, 'synset': 'rough_rider.n.01', 'name': 'Rough_Rider'}, {'id': 16908, 'synset': 'roundhead.n.01', 'name': 'roundhead'}, {'id': 16909, 'synset': 'civil_authority.n.01', 'name': 'civil_authority'}, {'id': 16910, 'synset': 'runner.n.03', 'name': 'runner'}, {'id': 16911, 'synset': 'runner.n.02', 'name': 'runner'}, {'id': 16912, 'synset': 'runner.n.06', 'name': 'runner'}, {'id': 16913, 'synset': 'running_back.n.01', 'name': 'running_back'}, {'id': 16914, 'synset': 'rusher.n.02', 'name': 'rusher'}, {'id': 16915, 'synset': 'rustic.n.01', 'name': 'rustic'}, {'id': 16916, 'synset': 'saboteur.n.01', 'name': 'saboteur'}, {'id': 16917, 'synset': 'sadist.n.01', 'name': 'sadist'}, {'id': 16918, 'synset': 'sailing_master.n.01', 'name': 'sailing_master'}, {'id': 16919, 'synset': 'sailor.n.01', 'name': 'sailor'}, {'id': 16920, 'synset': 'salesgirl.n.01', 'name': 'salesgirl'}, {'id': 16921, 'synset': 'salesman.n.01', 'name': 'salesman'}, {'id': 16922, 'synset': 'salesperson.n.01', 'name': 'salesperson'}, {'id': 16923, 'synset': 'salvager.n.01', 'name': 'salvager'}, {'id': 16924, 'synset': 'sandwichman.n.01', 'name': 'sandwichman'}, {'id': 16925, 'synset': 'sangoma.n.01', 'name': 'sangoma'}, {'id': 16926, 'synset': 'sannup.n.01', 'name': 'sannup'}, {'id': 16927, 'synset': 'sapper.n.02', 'name': 'sapper'}, {'id': 16928, 'synset': 'sassenach.n.01', 'name': 'Sassenach'}, {'id': 16929, 'synset': 'satrap.n.01', 'name': 'satrap'}, {'id': 16930, 'synset': 'saunterer.n.01', 'name': 'saunterer'}, {'id': 16931, 'synset': 'savoyard.n.01', 'name': 'Savoyard'}, {'id': 16932, 'synset': 'sawyer.n.01', 'name': 'sawyer'}, {'id': 16933, 'synset': 'scalper.n.01', 'name': 'scalper'}, {'id': 16934, 'synset': 'scandalmonger.n.01', 'name': 'scandalmonger'}, {'id': 16935, 'synset': 'scapegrace.n.01', 'name': 'scapegrace'}, {'id': 16936, 'synset': 'scene_painter.n.02', 'name': 'scene_painter'}, {'id': 16937, 'synset': 'schemer.n.01', 'name': 'schemer'}, {'id': 16938, 'synset': 'schizophrenic.n.01', 'name': 'schizophrenic'}, {'id': 16939, 'synset': 'schlemiel.n.01', 'name': 'schlemiel'}, {'id': 16940, 'synset': 'schlockmeister.n.01', 'name': 'schlockmeister'}, {'id': 16941, 'synset': 'scholar.n.01', 'name': 'scholar'}, {'id': 16942, 'synset': 'scholiast.n.01', 'name': 'scholiast'}, {'id': 16943, 'synset': 'schoolchild.n.01', 'name': 'schoolchild'}, {'id': 16944, 'synset': 'schoolfriend.n.01', 'name': 'schoolfriend'}, {'id': 16945, 'synset': 'schoolman.n.01', 'name': 'Schoolman'}, {'id': 16946, 'synset': 'schoolmaster.n.02', 'name': 'schoolmaster'}, {'id': 16947, 'synset': 'schoolmate.n.01', 'name': 'schoolmate'}, {'id': 16948, 'synset': 'scientist.n.01', 'name': 'scientist'}, {'id': 16949, 'synset': 'scion.n.01', 'name': 'scion'}, {'id': 16950, 'synset': 'scoffer.n.02', 'name': 'scoffer'}, {'id': 16951, 'synset': 'scofflaw.n.01', 'name': 'scofflaw'}, {'id': 16952, 'synset': 'scorekeeper.n.01', 'name': 'scorekeeper'}, {'id': 16953, 'synset': 'scorer.n.02', 'name': 'scorer'}, {'id': 16954, 'synset': 'scourer.n.02', 'name': 'scourer'}, {'id': 16955, 'synset': 'scout.n.03', 'name': 'scout'}, {'id': 16956, 'synset': 'scoutmaster.n.01', 'name': 'scoutmaster'}, {'id': 16957, 'synset': 'scrambler.n.01', 'name': 'scrambler'}, {'id': 16958, 'synset': 'scratcher.n.02', 'name': 'scratcher'}, {'id': 16959, 'synset': 'screen_actor.n.01', 'name': 'screen_actor'}, {'id': 16960, 'synset': 'scrutineer.n.01', 'name': 'scrutineer'}, {'id': 16961, 'synset': 'scuba_diver.n.01', 'name': 'scuba_diver'}, {'id': 16962, 'synset': 'sculptor.n.01', 'name': 'sculptor'}, {'id': 16963, 'synset': 'sea_scout.n.01', 'name': 'Sea_Scout'}, {'id': 16964, 'synset': 'seasonal_worker.n.01', 'name': 'seasonal_worker'}, {'id': 16965, 'synset': 'seasoner.n.01', 'name': 'seasoner'}, {'id': 16966, 'synset': 'second_baseman.n.01', 'name': 'second_baseman'}, {'id': 16967, 'synset': 'second_cousin.n.01', 'name': 'second_cousin'}, {'id': 16968, 'synset': 'seconder.n.01', 'name': 'seconder'}, {'id': 16969, 'synset': 'second_fiddle.n.01', 'name': 'second_fiddle'}, {'id': 16970, 'synset': 'second-in-command.n.01', 'name': 'second-in-command'}, {'id': 16971, 'synset': 'second_lieutenant.n.01', 'name': 'second_lieutenant'}, {'id': 16972, 'synset': 'second-rater.n.01', 'name': 'second-rater'}, {'id': 16973, 'synset': 'secretary.n.01', 'name': 'secretary'}, {'id': 16974, 'synset': 'secretary_of_agriculture.n.01', 'name': 'Secretary_of_Agriculture'}, {'id': 16975, 'synset': 'secretary_of_health_and_human_services.n.01', 'name': 'Secretary_of_Health_and_Human_Services'}, {'id': 16976, 'synset': 'secretary_of_state.n.01', 'name': 'Secretary_of_State'}, {'id': 16977, 'synset': 'secretary_of_the_interior.n.02', 'name': 'Secretary_of_the_Interior'}, {'id': 16978, 'synset': 'sectarian.n.01', 'name': 'sectarian'}, {'id': 16979, 'synset': 'section_hand.n.01', 'name': 'section_hand'}, {'id': 16980, 'synset': 'secularist.n.01', 'name': 'secularist'}, {'id': 16981, 'synset': 'security_consultant.n.01', 'name': 'security_consultant'}, {'id': 16982, 'synset': 'seeded_player.n.01', 'name': 'seeded_player'}, {'id': 16983, 'synset': 'seeder.n.01', 'name': 'seeder'}, {'id': 16984, 'synset': 'seeker.n.01', 'name': 'seeker'}, {'id': 16985, 'synset': 'segregate.n.01', 'name': 'segregate'}, {'id': 16986, 'synset': 'segregator.n.01', 'name': 'segregator'}, {'id': 16987, 'synset': 'selectman.n.01', 'name': 'selectman'}, {'id': 16988, 'synset': 'selectwoman.n.01', 'name': 'selectwoman'}, {'id': 16989, 'synset': 'selfish_person.n.01', 'name': 'selfish_person'}, {'id': 16990, 'synset': 'self-starter.n.01', 'name': 'self-starter'}, {'id': 16991, 'synset': 'seller.n.01', 'name': 'seller'}, {'id': 16992, 'synset': 'selling_agent.n.01', 'name': 'selling_agent'}, {'id': 16993, 'synset': 'semanticist.n.01', 'name': 'semanticist'}, {'id': 16994, 'synset': 'semifinalist.n.01', 'name': 'semifinalist'}, {'id': 16995, 'synset': 'seminarian.n.01', 'name': 'seminarian'}, {'id': 16996, 'synset': 'senator.n.01', 'name': 'senator'}, {'id': 16997, 'synset': 'sendee.n.01', 'name': 'sendee'}, {'id': 16998, 'synset': 'senior.n.01', 'name': 'senior'}, {'id': 16999, 'synset': 'senior_vice_president.n.01', 'name': 'senior_vice_president'}, {'id': 17000, 'synset': 'separatist.n.01', 'name': 'separatist'}, {'id': 17001, 'synset': 'septuagenarian.n.01', 'name': 'septuagenarian'}, {'id': 17002, 'synset': 'serf.n.01', 'name': 'serf'}, {'id': 17003, 'synset': 'spree_killer.n.01', 'name': 'spree_killer'}, {'id': 17004, 'synset': 'serjeant-at-law.n.01', 'name': 'serjeant-at-law'}, {'id': 17005, 'synset': 'server.n.02', 'name': 'server'}, {'id': 17006, 'synset': 'serviceman.n.01', 'name': 'serviceman'}, {'id': 17007, 'synset': 'settler.n.01', 'name': 'settler'}, {'id': 17008, 'synset': 'settler.n.03', 'name': 'settler'}, {'id': 17009, 'synset': 'sex_symbol.n.01', 'name': 'sex_symbol'}, {'id': 17010, 'synset': 'sexton.n.02', 'name': 'sexton'}, {'id': 17011, 'synset': 'shaheed.n.01', 'name': 'shaheed'}, {'id': 17012, 'synset': 'shakespearian.n.01', 'name': 'Shakespearian'}, {'id': 17013, 'synset': 'shanghaier.n.01', 'name': 'shanghaier'}, {'id': 17014, 'synset': 'sharecropper.n.01', 'name': 'sharecropper'}, {'id': 17015, 'synset': 'shaver.n.01', 'name': 'shaver'}, {'id': 17016, 'synset': 'shavian.n.01', 'name': 'Shavian'}, {'id': 17017, 'synset': 'sheep.n.02', 'name': 'sheep'}, {'id': 17018, 'synset': 'sheik.n.01', 'name': 'sheik'}, {'id': 17019, 'synset': 'shelver.n.01', 'name': 'shelver'}, {'id': 17020, 'synset': 'shepherd.n.01', 'name': 'shepherd'}, {'id': 17021, 'synset': 'ship-breaker.n.01', 'name': 'ship-breaker'}, {'id': 17022, 'synset': 'shipmate.n.01', 'name': 'shipmate'}, {'id': 17023, 'synset': 'shipowner.n.01', 'name': 'shipowner'}, {'id': 17024, 'synset': 'shipping_agent.n.01', 'name': 'shipping_agent'}, {'id': 17025, 'synset': 'shirtmaker.n.01', 'name': 'shirtmaker'}, {'id': 17026, 'synset': 'shogun.n.01', 'name': 'shogun'}, {'id': 17027, 'synset': 'shopaholic.n.01', 'name': 'shopaholic'}, {'id': 17028, 'synset': 'shop_girl.n.01', 'name': 'shop_girl'}, {'id': 17029, 'synset': 'shop_steward.n.01', 'name': 'shop_steward'}, {'id': 17030, 'synset': 'shot_putter.n.01', 'name': 'shot_putter'}, {'id': 17031, 'synset': 'shrew.n.01', 'name': 'shrew'}, {'id': 17032, 'synset': 'shuffler.n.01', 'name': 'shuffler'}, {'id': 17033, 'synset': 'shyster.n.01', 'name': 'shyster'}, {'id': 17034, 'synset': 'sibling.n.01', 'name': 'sibling'}, {'id': 17035, 'synset': 'sick_person.n.01', 'name': 'sick_person'}, {'id': 17036, 'synset': 'sightreader.n.01', 'name': 'sightreader'}, {'id': 17037, 'synset': 'signaler.n.01', 'name': 'signaler'}, {'id': 17038, 'synset': 'signer.n.01', 'name': 'signer'}, {'id': 17039, 'synset': 'signor.n.01', 'name': 'signor'}, {'id': 17040, 'synset': 'signora.n.01', 'name': 'signora'}, {'id': 17041, 'synset': 'signore.n.01', 'name': 'signore'}, {'id': 17042, 'synset': 'signorina.n.01', 'name': 'signorina'}, {'id': 17043, 'synset': 'silent_partner.n.01', 'name': 'silent_partner'}, {'id': 17044, 'synset': 'addle-head.n.01', 'name': 'addle-head'}, {'id': 17045, 'synset': 'simperer.n.01', 'name': 'simperer'}, {'id': 17046, 'synset': 'singer.n.01', 'name': 'singer'}, {'id': 17047, 'synset': 'sinologist.n.01', 'name': 'Sinologist'}, {'id': 17048, 'synset': 'sipper.n.01', 'name': 'sipper'}, {'id': 17049, 'synset': 'sirrah.n.01', 'name': 'sirrah'}, {'id': 17050, 'synset': 'sister.n.02', 'name': 'Sister'}, {'id': 17051, 'synset': 'sister.n.01', 'name': 'sister'}, {'id': 17052, 'synset': 'waverer.n.01', 'name': 'waverer'}, {'id': 17053, 'synset': 'sitar_player.n.01', 'name': 'sitar_player'}, {'id': 17054, 'synset': 'sixth-former.n.01', 'name': 'sixth-former'}, {'id': 17055, 'synset': 'skateboarder.n.01', 'name': 'skateboarder'}, {'id': 17056, 'synset': 'skeptic.n.01', 'name': 'skeptic'}, {'id': 17057, 'synset': 'sketcher.n.01', 'name': 'sketcher'}, {'id': 17058, 'synset': 'skidder.n.02', 'name': 'skidder'}, {'id': 17059, 'synset': 'skier.n.01', 'name': 'skier'}, {'id': 17060, 'synset': 'skinny-dipper.n.01', 'name': 'skinny-dipper'}, {'id': 17061, 'synset': 'skin-diver.n.01', 'name': 'skin-diver'}, {'id': 17062, 'synset': 'skinhead.n.01', 'name': 'skinhead'}, {'id': 17063, 'synset': 'slasher.n.01', 'name': 'slasher'}, {'id': 17064, 'synset': 'slattern.n.02', 'name': 'slattern'}, {'id': 17065, 'synset': 'sleeper.n.01', 'name': 'sleeper'}, {'id': 17066, 'synset': 'sleeper.n.02', 'name': 'sleeper'}, {'id': 17067, 'synset': 'sleeping_beauty.n.02', 'name': 'sleeping_beauty'}, {'id': 17068, 'synset': 'sleuth.n.01', 'name': 'sleuth'}, {'id': 17069, 'synset': 'slob.n.01', 'name': 'slob'}, {'id': 17070, 'synset': 'sloganeer.n.01', 'name': 'sloganeer'}, {'id': 17071, 'synset': 'slopseller.n.01', 'name': 'slopseller'}, {'id': 17072, 'synset': 'smasher.n.02', 'name': 'smasher'}, {'id': 17073, 'synset': 'smirker.n.01', 'name': 'smirker'}, {'id': 17074, 'synset': 'smith.n.10', 'name': 'smith'}, {'id': 17075, 'synset': 'smoothie.n.01', 'name': 'smoothie'}, {'id': 17076, 'synset': 'smuggler.n.01', 'name': 'smuggler'}, {'id': 17077, 'synset': 'sneezer.n.01', 'name': 'sneezer'}, {'id': 17078, 'synset': 'snob.n.01', 'name': 'snob'}, {'id': 17079, 'synset': 'snoop.n.01', 'name': 'snoop'}, {'id': 17080, 'synset': 'snorer.n.01', 'name': 'snorer'}, {'id': 17081, 'synset': 'sob_sister.n.01', 'name': 'sob_sister'}, {'id': 17082, 'synset': 'soccer_player.n.01', 'name': 'soccer_player'}, {'id': 17083, 'synset': 'social_anthropologist.n.01', 'name': 'social_anthropologist'}, {'id': 17084, 'synset': 'social_climber.n.01', 'name': 'social_climber'}, {'id': 17085, 'synset': 'socialist.n.01', 'name': 'socialist'}, {'id': 17086, 'synset': 'socializer.n.01', 'name': 'socializer'}, {'id': 17087, 'synset': 'social_scientist.n.01', 'name': 'social_scientist'}, {'id': 17088, 'synset': 'social_secretary.n.01', 'name': 'social_secretary'}, {'id': 17089, 'synset': 'socinian.n.01', 'name': 'Socinian'}, {'id': 17090, 'synset': 'sociolinguist.n.01', 'name': 'sociolinguist'}, {'id': 17091, 'synset': 'sociologist.n.01', 'name': 'sociologist'}, {'id': 17092, 'synset': 'soda_jerk.n.01', 'name': 'soda_jerk'}, {'id': 17093, 'synset': 'sodalist.n.01', 'name': 'sodalist'}, {'id': 17094, 'synset': 'sodomite.n.01', 'name': 'sodomite'}, {'id': 17095, 'synset': 'soldier.n.01', 'name': 'soldier'}, {'id': 17096, 'synset': 'son.n.01', 'name': 'son'}, {'id': 17097, 'synset': 'songster.n.02', 'name': 'songster'}, {'id': 17098, 'synset': 'songstress.n.01', 'name': 'songstress'}, {'id': 17099, 'synset': 'songwriter.n.01', 'name': 'songwriter'}, {'id': 17100, 'synset': 'sorcerer.n.01', 'name': 'sorcerer'}, {'id': 17101, 'synset': 'sorehead.n.01', 'name': 'sorehead'}, {'id': 17102, 'synset': 'soul_mate.n.01', 'name': 'soul_mate'}, {'id': 17103, 'synset': 'southern_baptist.n.01', 'name': 'Southern_Baptist'}, {'id': 17104, 'synset': 'sovereign.n.01', 'name': 'sovereign'}, {'id': 17105, 'synset': 'spacewalker.n.01', 'name': 'spacewalker'}, {'id': 17106, 'synset': 'spanish_american.n.01', 'name': 'Spanish_American'}, {'id': 17107, 'synset': 'sparring_partner.n.01', 'name': 'sparring_partner'}, {'id': 17108, 'synset': 'spastic.n.01', 'name': 'spastic'}, {'id': 17109, 'synset': 'speaker.n.01', 'name': 'speaker'}, {'id': 17110, 'synset': 'native_speaker.n.01', 'name': 'native_speaker'}, {'id': 17111, 'synset': 'speaker.n.03', 'name': 'Speaker'}, {'id': 17112, 'synset': 'speechwriter.n.01', 'name': 'speechwriter'}, {'id': 17113, 'synset': 'specialist.n.02', 'name': 'specialist'}, {'id': 17114, 'synset': 'specifier.n.01', 'name': 'specifier'}, {'id': 17115, 'synset': 'spectator.n.01', 'name': 'spectator'}, {'id': 17116, 'synset': 'speech_therapist.n.01', 'name': 'speech_therapist'}, {'id': 17117, 'synset': 'speedskater.n.01', 'name': 'speedskater'}, {'id': 17118, 'synset': 'spellbinder.n.01', 'name': 'spellbinder'}, {'id': 17119, 'synset': 'sphinx.n.01', 'name': 'sphinx'}, {'id': 17120, 'synset': 'spinster.n.01', 'name': 'spinster'}, {'id': 17121, 'synset': 'split_end.n.01', 'name': 'split_end'}, {'id': 17122, 'synset': 'sport.n.05', 'name': 'sport'}, {'id': 17123, 'synset': 'sport.n.03', 'name': 'sport'}, {'id': 17124, 'synset': 'sporting_man.n.02', 'name': 'sporting_man'}, {'id': 17125, 'synset': 'sports_announcer.n.01', 'name': 'sports_announcer'}, {'id': 17126, 'synset': 'sports_editor.n.01', 'name': 'sports_editor'}, {'id': 17127, 'synset': 'sprog.n.02', 'name': 'sprog'}, {'id': 17128, 'synset': 'square_dancer.n.01', 'name': 'square_dancer'}, {'id': 17129, 'synset': 'square_shooter.n.01', 'name': 'square_shooter'}, {'id': 17130, 'synset': 'squatter.n.02', 'name': 'squatter'}, {'id': 17131, 'synset': 'squire.n.02', 'name': 'squire'}, {'id': 17132, 'synset': 'squire.n.01', 'name': 'squire'}, {'id': 17133, 'synset': 'staff_member.n.01', 'name': 'staff_member'}, {'id': 17134, 'synset': 'staff_sergeant.n.01', 'name': 'staff_sergeant'}, {'id': 17135, 'synset': 'stage_director.n.01', 'name': 'stage_director'}, {'id': 17136, 'synset': 'stainer.n.01', 'name': 'stainer'}, {'id': 17137, 'synset': 'stakeholder.n.01', 'name': 'stakeholder'}, {'id': 17138, 'synset': 'stalker.n.02', 'name': 'stalker'}, {'id': 17139, 'synset': 'stalking-horse.n.01', 'name': 'stalking-horse'}, {'id': 17140, 'synset': 'stammerer.n.01', 'name': 'stammerer'}, {'id': 17141, 'synset': 'stamper.n.02', 'name': 'stamper'}, {'id': 17142, 'synset': 'standee.n.01', 'name': 'standee'}, {'id': 17143, 'synset': 'stand-in.n.01', 'name': 'stand-in'}, {'id': 17144, 'synset': 'star.n.04', 'name': 'star'}, {'id': 17145, 'synset': 'starlet.n.01', 'name': 'starlet'}, {'id': 17146, 'synset': 'starter.n.03', 'name': 'starter'}, {'id': 17147, 'synset': 'statesman.n.01', 'name': 'statesman'}, {'id': 17148, 'synset': 'state_treasurer.n.01', 'name': 'state_treasurer'}, {'id': 17149, 'synset': 'stationer.n.01', 'name': 'stationer'}, {'id': 17150, 'synset': 'stenographer.n.01', 'name': 'stenographer'}, {'id': 17151, 'synset': 'stentor.n.01', 'name': 'stentor'}, {'id': 17152, 'synset': 'stepbrother.n.01', 'name': 'stepbrother'}, {'id': 17153, 'synset': 'stepmother.n.01', 'name': 'stepmother'}, {'id': 17154, 'synset': 'stepparent.n.01', 'name': 'stepparent'}, {'id': 17155, 'synset': 'stevedore.n.01', 'name': 'stevedore'}, {'id': 17156, 'synset': 'steward.n.01', 'name': 'steward'}, {'id': 17157, 'synset': 'steward.n.03', 'name': 'steward'}, {'id': 17158, 'synset': 'steward.n.02', 'name': 'steward'}, {'id': 17159, 'synset': 'stickler.n.01', 'name': 'stickler'}, {'id': 17160, 'synset': 'stiff.n.01', 'name': 'stiff'}, {'id': 17161, 'synset': 'stifler.n.01', 'name': 'stifler'}, {'id': 17162, 'synset': 'stipendiary.n.01', 'name': 'stipendiary'}, {'id': 17163, 'synset': 'stitcher.n.01', 'name': 'stitcher'}, {'id': 17164, 'synset': 'stockjobber.n.01', 'name': 'stockjobber'}, {'id': 17165, 'synset': 'stock_trader.n.01', 'name': 'stock_trader'}, {'id': 17166, 'synset': 'stockist.n.01', 'name': 'stockist'}, {'id': 17167, 'synset': 'stoker.n.02', 'name': 'stoker'}, {'id': 17168, 'synset': 'stooper.n.02', 'name': 'stooper'}, {'id': 17169, 'synset': 'store_detective.n.01', 'name': 'store_detective'}, {'id': 17170, 'synset': 'strafer.n.01', 'name': 'strafer'}, {'id': 17171, 'synset': 'straight_man.n.01', 'name': 'straight_man'}, {'id': 17172, 'synset': 'stranger.n.01', 'name': 'stranger'}, {'id': 17173, 'synset': 'stranger.n.02', 'name': 'stranger'}, {'id': 17174, 'synset': 'strategist.n.01', 'name': 'strategist'}, {'id': 17175, 'synset': 'straw_boss.n.01', 'name': 'straw_boss'}, {'id': 17176, 'synset': 'streetwalker.n.01', 'name': 'streetwalker'}, {'id': 17177, 'synset': 'stretcher-bearer.n.01', 'name': 'stretcher-bearer'}, {'id': 17178, 'synset': 'struggler.n.01', 'name': 'struggler'}, {'id': 17179, 'synset': 'stud.n.01', 'name': 'stud'}, {'id': 17180, 'synset': 'student.n.01', 'name': 'student'}, {'id': 17181, 'synset': 'stumblebum.n.01', 'name': 'stumblebum'}, {'id': 17182, 'synset': 'stylist.n.01', 'name': 'stylist'}, {'id': 17183, 'synset': 'subaltern.n.01', 'name': 'subaltern'}, {'id': 17184, 'synset': 'subcontractor.n.01', 'name': 'subcontractor'}, {'id': 17185, 'synset': 'subduer.n.01', 'name': 'subduer'}, {'id': 17186, 'synset': 'subject.n.06', 'name': 'subject'}, {'id': 17187, 'synset': 'subordinate.n.01', 'name': 'subordinate'}, {'id': 17188, 'synset': 'substitute.n.02', 'name': 'substitute'}, {'id': 17189, 'synset': 'successor.n.03', 'name': 'successor'}, {'id': 17190, 'synset': 'successor.n.01', 'name': 'successor'}, {'id': 17191, 'synset': 'succorer.n.01', 'name': 'succorer'}, {'id': 17192, 'synset': 'sufi.n.01', 'name': 'Sufi'}, {'id': 17193, 'synset': 'suffragan.n.01', 'name': 'suffragan'}, {'id': 17194, 'synset': 'suffragette.n.01', 'name': 'suffragette'}, {'id': 17195, 'synset': 'sugar_daddy.n.01', 'name': 'sugar_daddy'}, {'id': 17196, 'synset': 'suicide_bomber.n.01', 'name': 'suicide_bomber'}, {'id': 17197, 'synset': 'suitor.n.01', 'name': 'suitor'}, {'id': 17198, 'synset': 'sumo_wrestler.n.01', 'name': 'sumo_wrestler'}, {'id': 17199, 'synset': 'sunbather.n.01', 'name': 'sunbather'}, {'id': 17200, 'synset': 'sundowner.n.01', 'name': 'sundowner'}, {'id': 17201, 'synset': 'super_heavyweight.n.01', 'name': 'super_heavyweight'}, {'id': 17202, 'synset': 'superior.n.01', 'name': 'superior'}, {'id': 17203, 'synset': 'supermom.n.01', 'name': 'supermom'}, {'id': 17204, 'synset': 'supernumerary.n.02', 'name': 'supernumerary'}, {'id': 17205, 'synset': 'supremo.n.01', 'name': 'supremo'}, {'id': 17206, 'synset': 'surgeon.n.01', 'name': 'surgeon'}, {'id': 17207, 'synset': 'surgeon_general.n.02', 'name': 'Surgeon_General'}, {'id': 17208, 'synset': 'surgeon_general.n.01', 'name': 'Surgeon_General'}, {'id': 17209, 'synset': 'surpriser.n.01', 'name': 'surpriser'}, {'id': 17210, 'synset': 'surveyor.n.01', 'name': 'surveyor'}, {'id': 17211, 'synset': 'surveyor.n.02', 'name': 'surveyor'}, {'id': 17212, 'synset': 'survivor.n.01', 'name': 'survivor'}, {'id': 17213, 'synset': 'sutler.n.01', 'name': 'sutler'}, {'id': 17214, 'synset': 'sweeper.n.01', 'name': 'sweeper'}, {'id': 17215, 'synset': 'sweetheart.n.01', 'name': 'sweetheart'}, {'id': 17216, 'synset': 'swinger.n.02', 'name': 'swinger'}, {'id': 17217, 'synset': 'switcher.n.01', 'name': 'switcher'}, {'id': 17218, 'synset': 'swot.n.01', 'name': 'swot'}, {'id': 17219, 'synset': 'sycophant.n.01', 'name': 'sycophant'}, {'id': 17220, 'synset': 'sylph.n.01', 'name': 'sylph'}, {'id': 17221, 'synset': 'sympathizer.n.02', 'name': 'sympathizer'}, {'id': 17222, 'synset': 'symphonist.n.01', 'name': 'symphonist'}, {'id': 17223, 'synset': 'syncopator.n.01', 'name': 'syncopator'}, {'id': 17224, 'synset': 'syndic.n.01', 'name': 'syndic'}, {'id': 17225, 'synset': 'tactician.n.01', 'name': 'tactician'}, {'id': 17226, 'synset': 'tagger.n.02', 'name': 'tagger'}, {'id': 17227, 'synset': 'tailback.n.01', 'name': 'tailback'}, {'id': 17228, 'synset': 'tallyman.n.02', 'name': 'tallyman'}, {'id': 17229, 'synset': 'tallyman.n.01', 'name': 'tallyman'}, {'id': 17230, 'synset': 'tanker.n.02', 'name': 'tanker'}, {'id': 17231, 'synset': 'tapper.n.04', 'name': 'tapper'}, {'id': 17232, 'synset': 'tartuffe.n.01', 'name': 'Tartuffe'}, {'id': 17233, 'synset': 'tarzan.n.01', 'name': 'Tarzan'}, {'id': 17234, 'synset': 'taster.n.01', 'name': 'taster'}, {'id': 17235, 'synset': 'tax_assessor.n.01', 'name': 'tax_assessor'}, {'id': 17236, 'synset': 'taxer.n.01', 'name': 'taxer'}, {'id': 17237, 'synset': 'taxi_dancer.n.01', 'name': 'taxi_dancer'}, {'id': 17238, 'synset': 'taxonomist.n.01', 'name': 'taxonomist'}, {'id': 17239, 'synset': 'teacher.n.01', 'name': 'teacher'}, {'id': 17240, 'synset': 'teaching_fellow.n.01', 'name': 'teaching_fellow'}, {'id': 17241, 'synset': 'tearaway.n.01', 'name': 'tearaway'}, {'id': 17242, 'synset': 'technical_sergeant.n.01', 'name': 'technical_sergeant'}, {'id': 17243, 'synset': 'technician.n.02', 'name': 'technician'}, {'id': 17244, 'synset': 'ted.n.01', 'name': 'Ted'}, {'id': 17245, 'synset': 'teetotaler.n.01', 'name': 'teetotaler'}, {'id': 17246, 'synset': 'television_reporter.n.01', 'name': 'television_reporter'}, {'id': 17247, 'synset': 'temporizer.n.01', 'name': 'temporizer'}, {'id': 17248, 'synset': 'tempter.n.01', 'name': 'tempter'}, {'id': 17249, 'synset': 'term_infant.n.01', 'name': 'term_infant'}, {'id': 17250, 'synset': 'toiler.n.01', 'name': 'toiler'}, {'id': 17251, 'synset': 'tenant.n.01', 'name': 'tenant'}, {'id': 17252, 'synset': 'tenant.n.02', 'name': 'tenant'}, {'id': 17253, 'synset': 'tenderfoot.n.01', 'name': 'tenderfoot'}, {'id': 17254, 'synset': 'tennis_player.n.01', 'name': 'tennis_player'}, {'id': 17255, 'synset': 'tennis_pro.n.01', 'name': 'tennis_pro'}, {'id': 17256, 'synset': 'tenor_saxophonist.n.01', 'name': 'tenor_saxophonist'}, {'id': 17257, 'synset': 'termer.n.01', 'name': 'termer'}, {'id': 17258, 'synset': 'terror.n.02', 'name': 'terror'}, {'id': 17259, 'synset': 'tertigravida.n.01', 'name': 'tertigravida'}, {'id': 17260, 'synset': 'testator.n.01', 'name': 'testator'}, {'id': 17261, 'synset': 'testatrix.n.01', 'name': 'testatrix'}, {'id': 17262, 'synset': 'testee.n.01', 'name': 'testee'}, {'id': 17263, 'synset': 'test-tube_baby.n.01', 'name': 'test-tube_baby'}, {'id': 17264, 'synset': 'texas_ranger.n.01', 'name': 'Texas_Ranger'}, {'id': 17265, 'synset': 'thane.n.02', 'name': 'thane'}, {'id': 17266, 'synset': 'theatrical_producer.n.01', 'name': 'theatrical_producer'}, {'id': 17267, 'synset': 'theologian.n.01', 'name': 'theologian'}, {'id': 17268, 'synset': 'theorist.n.01', 'name': 'theorist'}, {'id': 17269, 'synset': 'theosophist.n.01', 'name': 'theosophist'}, {'id': 17270, 'synset': 'therapist.n.01', 'name': 'therapist'}, {'id': 17271, 'synset': 'thessalonian.n.01', 'name': 'Thessalonian'}, {'id': 17272, 'synset': 'thinker.n.01', 'name': 'thinker'}, {'id': 17273, 'synset': 'thinker.n.02', 'name': 'thinker'}, {'id': 17274, 'synset': 'thrower.n.02', 'name': 'thrower'}, {'id': 17275, 'synset': 'thurifer.n.01', 'name': 'thurifer'}, {'id': 17276, 'synset': 'ticket_collector.n.01', 'name': 'ticket_collector'}, {'id': 17277, 'synset': 'tight_end.n.01', 'name': 'tight_end'}, {'id': 17278, 'synset': 'tiler.n.01', 'name': 'tiler'}, {'id': 17279, 'synset': 'timekeeper.n.01', 'name': 'timekeeper'}, {'id': 17280, 'synset': 'timorese.n.01', 'name': 'Timorese'}, {'id': 17281, 'synset': 'tinkerer.n.01', 'name': 'tinkerer'}, {'id': 17282, 'synset': 'tinsmith.n.01', 'name': 'tinsmith'}, {'id': 17283, 'synset': 'tinter.n.01', 'name': 'tinter'}, {'id': 17284, 'synset': 'tippler.n.01', 'name': 'tippler'}, {'id': 17285, 'synset': 'tipster.n.01', 'name': 'tipster'}, {'id': 17286, 'synset': 't-man.n.01', 'name': 'T-man'}, {'id': 17287, 'synset': 'toastmaster.n.01', 'name': 'toastmaster'}, {'id': 17288, 'synset': 'toast_mistress.n.01', 'name': 'toast_mistress'}, {'id': 17289, 'synset': 'tobogganist.n.01', 'name': 'tobogganist'}, {'id': 17290, 'synset': 'tomboy.n.01', 'name': 'tomboy'}, {'id': 17291, 'synset': 'toolmaker.n.01', 'name': 'toolmaker'}, {'id': 17292, 'synset': 'torchbearer.n.01', 'name': 'torchbearer'}, {'id': 17293, 'synset': 'tory.n.01', 'name': 'Tory'}, {'id': 17294, 'synset': 'tory.n.02', 'name': 'Tory'}, {'id': 17295, 'synset': 'tosser.n.02', 'name': 'tosser'}, {'id': 17296, 'synset': 'tosser.n.01', 'name': 'tosser'}, {'id': 17297, 'synset': 'totalitarian.n.01', 'name': 'totalitarian'}, {'id': 17298, 'synset': 'tourist.n.01', 'name': 'tourist'}, {'id': 17299, 'synset': 'tout.n.02', 'name': 'tout'}, {'id': 17300, 'synset': 'tout.n.01', 'name': 'tout'}, {'id': 17301, 'synset': 'tovarich.n.01', 'name': 'tovarich'}, {'id': 17302, 'synset': 'towhead.n.01', 'name': 'towhead'}, {'id': 17303, 'synset': 'town_clerk.n.01', 'name': 'town_clerk'}, {'id': 17304, 'synset': 'town_crier.n.01', 'name': 'town_crier'}, {'id': 17305, 'synset': 'townsman.n.02', 'name': 'townsman'}, {'id': 17306, 'synset': 'toxicologist.n.01', 'name': 'toxicologist'}, {'id': 17307, 'synset': 'track_star.n.01', 'name': 'track_star'}, {'id': 17308, 'synset': 'trader.n.01', 'name': 'trader'}, {'id': 17309, 'synset': 'trade_unionist.n.01', 'name': 'trade_unionist'}, {'id': 17310, 'synset': 'traditionalist.n.01', 'name': 'traditionalist'}, {'id': 17311, 'synset': 'traffic_cop.n.01', 'name': 'traffic_cop'}, {'id': 17312, 'synset': 'tragedian.n.02', 'name': 'tragedian'}, {'id': 17313, 'synset': 'tragedian.n.01', 'name': 'tragedian'}, {'id': 17314, 'synset': 'tragedienne.n.01', 'name': 'tragedienne'}, {'id': 17315, 'synset': 'trail_boss.n.01', 'name': 'trail_boss'}, {'id': 17316, 'synset': 'trainer.n.01', 'name': 'trainer'}, {'id': 17317, 'synset': 'traitor.n.01', 'name': 'traitor'}, {'id': 17318, 'synset': 'traitress.n.01', 'name': 'traitress'}, {'id': 17319, 'synset': 'transactor.n.01', 'name': 'transactor'}, {'id': 17320, 'synset': 'transcriber.n.03', 'name': 'transcriber'}, {'id': 17321, 'synset': 'transfer.n.02', 'name': 'transfer'}, {'id': 17322, 'synset': 'transferee.n.01', 'name': 'transferee'}, {'id': 17323, 'synset': 'translator.n.01', 'name': 'translator'}, {'id': 17324, 'synset': 'transvestite.n.01', 'name': 'transvestite'}, {'id': 17325, 'synset': 'traveling_salesman.n.01', 'name': 'traveling_salesman'}, {'id': 17326, 'synset': 'traverser.n.01', 'name': 'traverser'}, {'id': 17327, 'synset': 'trawler.n.01', 'name': 'trawler'}, {'id': 17328, 'synset': 'treasury.n.04', 'name': 'Treasury'}, {'id': 17329, 'synset': 'trencher.n.01', 'name': 'trencher'}, {'id': 17330, 'synset': 'trend-setter.n.01', 'name': 'trend-setter'}, {'id': 17331, 'synset': 'tribesman.n.01', 'name': 'tribesman'}, {'id': 17332, 'synset': 'trier.n.02', 'name': 'trier'}, {'id': 17333, 'synset': 'trifler.n.01', 'name': 'trifler'}, {'id': 17334, 'synset': 'trooper.n.02', 'name': 'trooper'}, {'id': 17335, 'synset': 'trooper.n.03', 'name': 'trooper'}, {'id': 17336, 'synset': 'trotskyite.n.01', 'name': 'Trotskyite'}, {'id': 17337, 'synset': 'truant.n.01', 'name': 'truant'}, {'id': 17338, 'synset': 'trumpeter.n.01', 'name': 'trumpeter'}, {'id': 17339, 'synset': 'trusty.n.01', 'name': 'trusty'}, {'id': 17340, 'synset': 'tudor.n.03', 'name': 'Tudor'}, {'id': 17341, 'synset': 'tumbler.n.01', 'name': 'tumbler'}, {'id': 17342, 'synset': 'tutee.n.01', 'name': 'tutee'}, {'id': 17343, 'synset': 'twin.n.01', 'name': 'twin'}, {'id': 17344, 'synset': 'two-timer.n.01', 'name': 'two-timer'}, {'id': 17345, 'synset': 'tyke.n.01', 'name': 'Tyke'}, {'id': 17346, 'synset': 'tympanist.n.01', 'name': 'tympanist'}, {'id': 17347, 'synset': 'typist.n.01', 'name': 'typist'}, {'id': 17348, 'synset': 'tyrant.n.01', 'name': 'tyrant'}, {'id': 17349, 'synset': 'umpire.n.01', 'name': 'umpire'}, {'id': 17350, 'synset': 'understudy.n.01', 'name': 'understudy'}, {'id': 17351, 'synset': 'undesirable.n.01', 'name': 'undesirable'}, {'id': 17352, 'synset': 'unicyclist.n.01', 'name': 'unicyclist'}, {'id': 17353, 'synset': 'unilateralist.n.01', 'name': 'unilateralist'}, {'id': 17354, 'synset': 'unitarian.n.01', 'name': 'Unitarian'}, {'id': 17355, 'synset': 'arminian.n.01', 'name': 'Arminian'}, {'id': 17356, 'synset': 'universal_donor.n.01', 'name': 'universal_donor'}, {'id': 17357, 'synset': 'unix_guru.n.01', 'name': 'UNIX_guru'}, {'id': 17358, 'synset': 'unknown_soldier.n.01', 'name': 'Unknown_Soldier'}, {'id': 17359, 'synset': 'upsetter.n.01', 'name': 'upsetter'}, {'id': 17360, 'synset': 'upstager.n.01', 'name': 'upstager'}, {'id': 17361, 'synset': 'upstart.n.02', 'name': 'upstart'}, {'id': 17362, 'synset': 'upstart.n.01', 'name': 'upstart'}, {'id': 17363, 'synset': 'urchin.n.01', 'name': 'urchin'}, {'id': 17364, 'synset': 'urologist.n.01', 'name': 'urologist'}, {'id': 17365, 'synset': 'usherette.n.01', 'name': 'usherette'}, {'id': 17366, 'synset': 'usher.n.02', 'name': 'usher'}, {'id': 17367, 'synset': 'usurper.n.01', 'name': 'usurper'}, {'id': 17368, 'synset': 'utility_man.n.01', 'name': 'utility_man'}, {'id': 17369, 'synset': 'utilizer.n.01', 'name': 'utilizer'}, {'id': 17370, 'synset': 'utopian.n.01', 'name': 'Utopian'}, {'id': 17371, 'synset': 'uxoricide.n.01', 'name': 'uxoricide'}, {'id': 17372, 'synset': 'vacationer.n.01', 'name': 'vacationer'}, {'id': 17373, 'synset': 'valedictorian.n.01', 'name': 'valedictorian'}, {'id': 17374, 'synset': 'valley_girl.n.01', 'name': 'valley_girl'}, {'id': 17375, 'synset': 'vaulter.n.01', 'name': 'vaulter'}, {'id': 17376, 'synset': 'vegetarian.n.01', 'name': 'vegetarian'}, {'id': 17377, 'synset': 'vegan.n.01', 'name': 'vegan'}, {'id': 17378, 'synset': 'venerator.n.01', 'name': 'venerator'}, {'id': 17379, 'synset': 'venture_capitalist.n.01', 'name': 'venture_capitalist'}, {'id': 17380, 'synset': 'venturer.n.01', 'name': 'venturer'}, {'id': 17381, 'synset': 'vermin.n.01', 'name': 'vermin'}, {'id': 17382, 'synset': 'very_important_person.n.01', 'name': 'very_important_person'}, {'id': 17383, 'synset': 'vibist.n.01', 'name': 'vibist'}, {'id': 17384, 'synset': 'vicar.n.01', 'name': 'vicar'}, {'id': 17385, 'synset': 'vicar.n.03', 'name': 'vicar'}, {'id': 17386, 'synset': 'vicar-general.n.01', 'name': 'vicar-general'}, {'id': 17387, 'synset': 'vice_chancellor.n.01', 'name': 'vice_chancellor'}, {'id': 17388, 'synset': 'vicegerent.n.01', 'name': 'vicegerent'}, {'id': 17389, 'synset': 'vice_president.n.01', 'name': 'vice_president'}, {'id': 17390, 'synset': 'vice-regent.n.01', 'name': 'vice-regent'}, {'id': 17391, 'synset': 'victim.n.02', 'name': 'victim'}, {'id': 17392, 'synset': 'victorian.n.01', 'name': 'Victorian'}, {'id': 17393, 'synset': 'victualer.n.01', 'name': 'victualer'}, {'id': 17394, 'synset': 'vigilante.n.01', 'name': 'vigilante'}, {'id': 17395, 'synset': 'villager.n.01', 'name': 'villager'}, {'id': 17396, 'synset': 'vintager.n.01', 'name': 'vintager'}, {'id': 17397, 'synset': 'vintner.n.01', 'name': 'vintner'}, {'id': 17398, 'synset': 'violator.n.02', 'name': 'violator'}, {'id': 17399, 'synset': 'violator.n.01', 'name': 'violator'}, {'id': 17400, 'synset': 'violist.n.01', 'name': 'violist'}, {'id': 17401, 'synset': 'virago.n.01', 'name': 'virago'}, {'id': 17402, 'synset': 'virologist.n.01', 'name': 'virologist'}, {'id': 17403, 'synset': 'visayan.n.01', 'name': 'Visayan'}, {'id': 17404, 'synset': 'viscountess.n.01', 'name': 'viscountess'}, {'id': 17405, 'synset': 'viscount.n.01', 'name': 'viscount'}, {'id': 17406, 'synset': 'visigoth.n.01', 'name': 'Visigoth'}, {'id': 17407, 'synset': 'visionary.n.01', 'name': 'visionary'}, {'id': 17408, 'synset': 'visiting_fireman.n.01', 'name': 'visiting_fireman'}, {'id': 17409, 'synset': 'visiting_professor.n.01', 'name': 'visiting_professor'}, {'id': 17410, 'synset': 'visualizer.n.01', 'name': 'visualizer'}, {'id': 17411, 'synset': 'vixen.n.01', 'name': 'vixen'}, {'id': 17412, 'synset': 'vizier.n.01', 'name': 'vizier'}, {'id': 17413, 'synset': 'voicer.n.01', 'name': 'voicer'}, {'id': 17414, 'synset': 'volunteer.n.02', 'name': 'volunteer'}, {'id': 17415, 'synset': 'volunteer.n.01', 'name': 'volunteer'}, {'id': 17416, 'synset': 'votary.n.02', 'name': 'votary'}, {'id': 17417, 'synset': 'votary.n.01', 'name': 'votary'}, {'id': 17418, 'synset': 'vouchee.n.01', 'name': 'vouchee'}, {'id': 17419, 'synset': 'vower.n.01', 'name': 'vower'}, {'id': 17420, 'synset': 'voyager.n.01', 'name': 'voyager'}, {'id': 17421, 'synset': 'voyeur.n.01', 'name': 'voyeur'}, {'id': 17422, 'synset': 'vulcanizer.n.01', 'name': 'vulcanizer'}, {'id': 17423, 'synset': 'waffler.n.01', 'name': 'waffler'}, {'id': 17424, 'synset': 'wagnerian.n.01', 'name': 'Wagnerian'}, {'id': 17425, 'synset': 'waif.n.01', 'name': 'waif'}, {'id': 17426, 'synset': 'wailer.n.01', 'name': 'wailer'}, {'id': 17427, 'synset': 'waiter.n.01', 'name': 'waiter'}, {'id': 17428, 'synset': 'waitress.n.01', 'name': 'waitress'}, {'id': 17429, 'synset': 'walking_delegate.n.01', 'name': 'walking_delegate'}, {'id': 17430, 'synset': 'walk-on.n.01', 'name': 'walk-on'}, {'id': 17431, 'synset': 'wallah.n.01', 'name': 'wallah'}, {'id': 17432, 'synset': 'wally.n.01', 'name': 'wally'}, {'id': 17433, 'synset': 'waltzer.n.01', 'name': 'waltzer'}, {'id': 17434, 'synset': 'wanderer.n.01', 'name': 'wanderer'}, {'id': 17435, 'synset': 'wandering_jew.n.01', 'name': 'Wandering_Jew'}, {'id': 17436, 'synset': 'wanton.n.01', 'name': 'wanton'}, {'id': 17437, 'synset': 'warrantee.n.02', 'name': 'warrantee'}, {'id': 17438, 'synset': 'warrantee.n.01', 'name': 'warrantee'}, {'id': 17439, 'synset': 'washer.n.01', 'name': 'washer'}, {'id': 17440, 'synset': 'washerman.n.01', 'name': 'washerman'}, {'id': 17441, 'synset': 'washwoman.n.01', 'name': 'washwoman'}, {'id': 17442, 'synset': 'wassailer.n.01', 'name': 'wassailer'}, {'id': 17443, 'synset': 'wastrel.n.01', 'name': 'wastrel'}, {'id': 17444, 'synset': 'wave.n.09', 'name': 'Wave'}, {'id': 17445, 'synset': 'weatherman.n.01', 'name': 'weatherman'}, {'id': 17446, 'synset': 'weekend_warrior.n.02', 'name': 'weekend_warrior'}, {'id': 17447, 'synset': 'weeder.n.01', 'name': 'weeder'}, {'id': 17448, 'synset': 'welder.n.01', 'name': 'welder'}, {'id': 17449, 'synset': 'welfare_case.n.01', 'name': 'welfare_case'}, {'id': 17450, 'synset': 'westerner.n.01', 'name': 'westerner'}, {'id': 17451, 'synset': 'west-sider.n.01', 'name': 'West-sider'}, {'id': 17452, 'synset': 'wetter.n.02', 'name': 'wetter'}, {'id': 17453, 'synset': 'whaler.n.01', 'name': 'whaler'}, {'id': 17454, 'synset': 'whig.n.02', 'name': 'Whig'}, {'id': 17455, 'synset': 'whiner.n.01', 'name': 'whiner'}, {'id': 17456, 'synset': 'whipper-in.n.01', 'name': 'whipper-in'}, {'id': 17457, 'synset': 'whisperer.n.01', 'name': 'whisperer'}, {'id': 17458, 'synset': 'whiteface.n.02', 'name': 'whiteface'}, {'id': 17459, 'synset': 'carmelite.n.01', 'name': 'Carmelite'}, {'id': 17460, 'synset': 'augustinian.n.01', 'name': 'Augustinian'}, {'id': 17461, 'synset': 'white_hope.n.01', 'name': 'white_hope'}, {'id': 17462, 'synset': 'white_supremacist.n.01', 'name': 'white_supremacist'}, {'id': 17463, 'synset': 'whoremaster.n.02', 'name': 'whoremaster'}, {'id': 17464, 'synset': 'whoremaster.n.01', 'name': 'whoremaster'}, {'id': 17465, 'synset': 'widow.n.01', 'name': 'widow'}, {'id': 17466, 'synset': 'wife.n.01', 'name': 'wife'}, {'id': 17467, 'synset': 'wiggler.n.01', 'name': 'wiggler'}, {'id': 17468, 'synset': 'wimp.n.01', 'name': 'wimp'}, {'id': 17469, 'synset': 'wing_commander.n.01', 'name': 'wing_commander'}, {'id': 17470, 'synset': 'winger.n.01', 'name': 'winger'}, {'id': 17471, 'synset': 'winner.n.02', 'name': 'winner'}, {'id': 17472, 'synset': 'winner.n.01', 'name': 'winner'}, {'id': 17473, 'synset': 'window_dresser.n.01', 'name': 'window_dresser'}, {'id': 17474, 'synset': 'winker.n.01', 'name': 'winker'}, {'id': 17475, 'synset': 'wiper.n.01', 'name': 'wiper'}, {'id': 17476, 'synset': 'wireman.n.01', 'name': 'wireman'}, {'id': 17477, 'synset': 'wise_guy.n.01', 'name': 'wise_guy'}, {'id': 17478, 'synset': 'witch_doctor.n.01', 'name': 'witch_doctor'}, {'id': 17479, 'synset': 'withdrawer.n.05', 'name': 'withdrawer'}, {'id': 17480, 'synset': 'withdrawer.n.01', 'name': 'withdrawer'}, {'id': 17481, 'synset': 'woman.n.01', 'name': 'woman'}, {'id': 17482, 'synset': 'woman.n.02', 'name': 'woman'}, {'id': 17483, 'synset': 'wonder_boy.n.01', 'name': 'wonder_boy'}, {'id': 17484, 'synset': 'wonderer.n.01', 'name': 'wonderer'}, {'id': 17485, 'synset': 'working_girl.n.01', 'name': 'working_girl'}, {'id': 17486, 'synset': 'workman.n.01', 'name': 'workman'}, {'id': 17487, 'synset': 'workmate.n.01', 'name': 'workmate'}, {'id': 17488, 'synset': 'worldling.n.01', 'name': 'worldling'}, {'id': 17489, 'synset': 'worshiper.n.01', 'name': 'worshiper'}, {'id': 17490, 'synset': 'worthy.n.01', 'name': 'worthy'}, {'id': 17491, 'synset': 'wrecker.n.01', 'name': 'wrecker'}, {'id': 17492, 'synset': 'wright.n.07', 'name': 'wright'}, {'id': 17493, 'synset': 'write-in_candidate.n.01', 'name': 'write-in_candidate'}, {'id': 17494, 'synset': 'writer.n.01', 'name': 'writer'}, {'id': 17495, 'synset': 'wykehamist.n.01', 'name': 'Wykehamist'}, {'id': 17496, 'synset': 'yakuza.n.01', 'name': 'yakuza'}, {'id': 17497, 'synset': 'yard_bird.n.01', 'name': 'yard_bird'}, {'id': 17498, 'synset': 'yardie.n.01', 'name': 'yardie'}, {'id': 17499, 'synset': 'yardman.n.01', 'name': 'yardman'}, {'id': 17500, 'synset': 'yardmaster.n.01', 'name': 'yardmaster'}, {'id': 17501, 'synset': 'yenta.n.02', 'name': 'yenta'}, {'id': 17502, 'synset': 'yogi.n.02', 'name': 'yogi'}, {'id': 17503, 'synset': 'young_buck.n.01', 'name': 'young_buck'}, {'id': 17504, 'synset': 'young_turk.n.02', 'name': 'young_Turk'}, {'id': 17505, 'synset': 'young_turk.n.01', 'name': 'Young_Turk'}, {'id': 17506, 'synset': 'zionist.n.01', 'name': 'Zionist'}, {'id': 17507, 'synset': 'zoo_keeper.n.01', 'name': 'zoo_keeper'}, {'id': 17508, 'synset': 'genet.n.01', 'name': 'Genet'}, {'id': 17509, 'synset': 'kennan.n.01', 'name': 'Kennan'}, {'id': 17510, 'synset': 'munro.n.01', 'name': 'Munro'}, {'id': 17511, 'synset': 'popper.n.01', 'name': 'Popper'}, {'id': 17512, 'synset': 'stoker.n.01', 'name': 'Stoker'}, {'id': 17513, 'synset': 'townes.n.01', 'name': 'Townes'}, {'id': 17514, 'synset': 'dust_storm.n.01', 'name': 'dust_storm'}, {'id': 17515, 'synset': 'parhelion.n.01', 'name': 'parhelion'}, {'id': 17516, 'synset': 'snow.n.01', 'name': 'snow'}, {'id': 17517, 'synset': 'facula.n.01', 'name': 'facula'}, {'id': 17518, 'synset': 'wave.n.08', 'name': 'wave'}, {'id': 17519, 'synset': 'microflora.n.01', 'name': 'microflora'}, {'id': 17520, 'synset': 'wilding.n.01', 'name': 'wilding'}, {'id': 17521, 'synset': 'semi-climber.n.01', 'name': 'semi-climber'}, {'id': 17522, 'synset': 'volva.n.01', 'name': 'volva'}, {'id': 17523, 'synset': 'basidiocarp.n.01', 'name': 'basidiocarp'}, {'id': 17524, 'synset': 'domatium.n.01', 'name': 'domatium'}, {'id': 17525, 'synset': 'apomict.n.01', 'name': 'apomict'}, {'id': 17526, 'synset': 'aquatic.n.01', 'name': 'aquatic'}, {'id': 17527, 'synset': 'bryophyte.n.01', 'name': 'bryophyte'}, {'id': 17528, 'synset': 'acrocarp.n.01', 'name': 'acrocarp'}, {'id': 17529, 'synset': 'sphagnum.n.01', 'name': 'sphagnum'}, {'id': 17530, 'synset': 'liverwort.n.01', 'name': 'liverwort'}, {'id': 17531, 'synset': 'hepatica.n.02', 'name': 'hepatica'}, {'id': 17532, 'synset': 'pecopteris.n.01', 'name': 'pecopteris'}, {'id': 17533, 'synset': 'pteridophyte.n.01', 'name': 'pteridophyte'}, {'id': 17534, 'synset': 'fern.n.01', 'name': 'fern'}, {'id': 17535, 'synset': 'fern_ally.n.01', 'name': 'fern_ally'}, {'id': 17536, 'synset': 'spore.n.01', 'name': 'spore'}, {'id': 17537, 'synset': 'carpospore.n.01', 'name': 'carpospore'}, {'id': 17538, 'synset': 'chlamydospore.n.01', 'name': 'chlamydospore'}, {'id': 17539, 'synset': 'conidium.n.01', 'name': 'conidium'}, {'id': 17540, 'synset': 'oospore.n.01', 'name': 'oospore'}, {'id': 17541, 'synset': 'tetraspore.n.01', 'name': 'tetraspore'}, {'id': 17542, 'synset': 'zoospore.n.01', 'name': 'zoospore'}, {'id': 17543, 'synset': 'cryptogam.n.01', 'name': 'cryptogam'}, {'id': 17544, 'synset': 'spermatophyte.n.01', 'name': 'spermatophyte'}, {'id': 17545, 'synset': 'seedling.n.01', 'name': 'seedling'}, {'id': 17546, 'synset': 'annual.n.01', 'name': 'annual'}, {'id': 17547, 'synset': 'biennial.n.01', 'name': 'biennial'}, {'id': 17548, 'synset': 'perennial.n.01', 'name': 'perennial'}, {'id': 17549, 'synset': 'hygrophyte.n.01', 'name': 'hygrophyte'}, {'id': 17550, 'synset': 'gymnosperm.n.01', 'name': 'gymnosperm'}, {'id': 17551, 'synset': 'gnetum.n.01', 'name': 'gnetum'}, {'id': 17552, 'synset': 'catha_edulis.n.01', 'name': 'Catha_edulis'}, {'id': 17553, 'synset': 'ephedra.n.01', 'name': 'ephedra'}, {'id': 17554, 'synset': 'mahuang.n.01', 'name': 'mahuang'}, {'id': 17555, 'synset': 'welwitschia.n.01', 'name': 'welwitschia'}, {'id': 17556, 'synset': 'cycad.n.01', 'name': 'cycad'}, {'id': 17557, 'synset': 'sago_palm.n.02', 'name': 'sago_palm'}, {'id': 17558, 'synset': 'false_sago.n.01', 'name': 'false_sago'}, {'id': 17559, 'synset': 'zamia.n.01', 'name': 'zamia'}, {'id': 17560, 'synset': 'coontie.n.01', 'name': 'coontie'}, {'id': 17561, 'synset': 'ceratozamia.n.01', 'name': 'ceratozamia'}, {'id': 17562, 'synset': 'dioon.n.01', 'name': 'dioon'}, {'id': 17563, 'synset': 'encephalartos.n.01', 'name': 'encephalartos'}, {'id': 17564, 'synset': 'kaffir_bread.n.01', 'name': 'kaffir_bread'}, {'id': 17565, 'synset': 'macrozamia.n.01', 'name': 'macrozamia'}, {'id': 17566, 'synset': 'burrawong.n.01', 'name': 'burrawong'}, {'id': 17567, 'synset': 'pine.n.01', 'name': 'pine'}, {'id': 17568, 'synset': 'pinon.n.01', 'name': 'pinon'}, {'id': 17569, 'synset': 'nut_pine.n.01', 'name': 'nut_pine'}, {'id': 17570, 'synset': 'pinon_pine.n.01', 'name': 'pinon_pine'}, {'id': 17571, 'synset': 'rocky_mountain_pinon.n.01', 'name': 'Rocky_mountain_pinon'}, {'id': 17572, 'synset': 'single-leaf.n.01', 'name': 'single-leaf'}, {'id': 17573, 'synset': 'bishop_pine.n.01', 'name': 'bishop_pine'}, {'id': 17574, 'synset': 'california_single-leaf_pinyon.n.01', 'name': 'California_single-leaf_pinyon'}, {'id': 17575, 'synset': "parry's_pinyon.n.01", 'name': "Parry's_pinyon"}, {'id': 17576, 'synset': 'spruce_pine.n.04', 'name': 'spruce_pine'}, {'id': 17577, 'synset': 'black_pine.n.05', 'name': 'black_pine'}, {'id': 17578, 'synset': 'pitch_pine.n.02', 'name': 'pitch_pine'}, {'id': 17579, 'synset': 'pond_pine.n.01', 'name': 'pond_pine'}, {'id': 17580, 'synset': 'stone_pine.n.01', 'name': 'stone_pine'}, {'id': 17581, 'synset': 'swiss_pine.n.01', 'name': 'Swiss_pine'}, {'id': 17582, 'synset': 'cembra_nut.n.01', 'name': 'cembra_nut'}, {'id': 17583, 'synset': 'swiss_mountain_pine.n.01', 'name': 'Swiss_mountain_pine'}, {'id': 17584, 'synset': 'ancient_pine.n.01', 'name': 'ancient_pine'}, {'id': 17585, 'synset': 'white_pine.n.01', 'name': 'white_pine'}, {'id': 17586, 'synset': 'american_white_pine.n.01', 'name': 'American_white_pine'}, {'id': 17587, 'synset': 'western_white_pine.n.01', 'name': 'western_white_pine'}, {'id': 17588, 'synset': 'southwestern_white_pine.n.01', 'name': 'southwestern_white_pine'}, {'id': 17589, 'synset': 'limber_pine.n.01', 'name': 'limber_pine'}, {'id': 17590, 'synset': 'whitebark_pine.n.01', 'name': 'whitebark_pine'}, {'id': 17591, 'synset': 'yellow_pine.n.01', 'name': 'yellow_pine'}, {'id': 17592, 'synset': 'ponderosa.n.01', 'name': 'ponderosa'}, {'id': 17593, 'synset': 'jeffrey_pine.n.01', 'name': 'Jeffrey_pine'}, {'id': 17594, 'synset': 'shore_pine.n.01', 'name': 'shore_pine'}, {'id': 17595, 'synset': 'sierra_lodgepole_pine.n.01', 'name': 'Sierra_lodgepole_pine'}, {'id': 17596, 'synset': 'loblolly_pine.n.01', 'name': 'loblolly_pine'}, {'id': 17597, 'synset': 'jack_pine.n.01', 'name': 'jack_pine'}, {'id': 17598, 'synset': 'swamp_pine.n.01', 'name': 'swamp_pine'}, {'id': 17599, 'synset': 'longleaf_pine.n.01', 'name': 'longleaf_pine'}, {'id': 17600, 'synset': 'shortleaf_pine.n.01', 'name': 'shortleaf_pine'}, {'id': 17601, 'synset': 'red_pine.n.02', 'name': 'red_pine'}, {'id': 17602, 'synset': 'scotch_pine.n.01', 'name': 'Scotch_pine'}, {'id': 17603, 'synset': 'scrub_pine.n.01', 'name': 'scrub_pine'}, {'id': 17604, 'synset': 'monterey_pine.n.01', 'name': 'Monterey_pine'}, {'id': 17605, 'synset': 'bristlecone_pine.n.01', 'name': 'bristlecone_pine'}, {'id': 17606, 'synset': 'table-mountain_pine.n.01', 'name': 'table-mountain_pine'}, {'id': 17607, 'synset': 'knobcone_pine.n.01', 'name': 'knobcone_pine'}, {'id': 17608, 'synset': 'japanese_red_pine.n.01', 'name': 'Japanese_red_pine'}, {'id': 17609, 'synset': 'japanese_black_pine.n.01', 'name': 'Japanese_black_pine'}, {'id': 17610, 'synset': 'torrey_pine.n.01', 'name': 'Torrey_pine'}, {'id': 17611, 'synset': 'larch.n.02', 'name': 'larch'}, {'id': 17612, 'synset': 'american_larch.n.01', 'name': 'American_larch'}, {'id': 17613, 'synset': 'western_larch.n.01', 'name': 'western_larch'}, {'id': 17614, 'synset': 'subalpine_larch.n.01', 'name': 'subalpine_larch'}, {'id': 17615, 'synset': 'european_larch.n.01', 'name': 'European_larch'}, {'id': 17616, 'synset': 'siberian_larch.n.01', 'name': 'Siberian_larch'}, {'id': 17617, 'synset': 'golden_larch.n.01', 'name': 'golden_larch'}, {'id': 17618, 'synset': 'fir.n.02', 'name': 'fir'}, {'id': 17619, 'synset': 'silver_fir.n.01', 'name': 'silver_fir'}, {'id': 17620, 'synset': 'amabilis_fir.n.01', 'name': 'amabilis_fir'}, {'id': 17621, 'synset': 'european_silver_fir.n.01', 'name': 'European_silver_fir'}, {'id': 17622, 'synset': 'white_fir.n.01', 'name': 'white_fir'}, {'id': 17623, 'synset': 'balsam_fir.n.01', 'name': 'balsam_fir'}, {'id': 17624, 'synset': 'fraser_fir.n.01', 'name': 'Fraser_fir'}, {'id': 17625, 'synset': 'lowland_fir.n.01', 'name': 'lowland_fir'}, {'id': 17626, 'synset': 'alpine_fir.n.01', 'name': 'Alpine_fir'}, {'id': 17627, 'synset': 'santa_lucia_fir.n.01', 'name': 'Santa_Lucia_fir'}, {'id': 17628, 'synset': 'cedar.n.03', 'name': 'cedar'}, {'id': 17629, 'synset': 'cedar_of_lebanon.n.01', 'name': 'cedar_of_Lebanon'}, {'id': 17630, 'synset': 'deodar.n.01', 'name': 'deodar'}, {'id': 17631, 'synset': 'atlas_cedar.n.01', 'name': 'Atlas_cedar'}, {'id': 17632, 'synset': 'spruce.n.02', 'name': 'spruce'}, {'id': 17633, 'synset': 'norway_spruce.n.01', 'name': 'Norway_spruce'}, {'id': 17634, 'synset': 'weeping_spruce.n.01', 'name': 'weeping_spruce'}, {'id': 17635, 'synset': 'engelmann_spruce.n.01', 'name': 'Engelmann_spruce'}, {'id': 17636, 'synset': 'white_spruce.n.01', 'name': 'white_spruce'}, {'id': 17637, 'synset': 'black_spruce.n.01', 'name': 'black_spruce'}, {'id': 17638, 'synset': 'siberian_spruce.n.01', 'name': 'Siberian_spruce'}, {'id': 17639, 'synset': 'sitka_spruce.n.01', 'name': 'Sitka_spruce'}, {'id': 17640, 'synset': 'oriental_spruce.n.01', 'name': 'oriental_spruce'}, {'id': 17641, 'synset': 'colorado_spruce.n.01', 'name': 'Colorado_spruce'}, {'id': 17642, 'synset': 'red_spruce.n.01', 'name': 'red_spruce'}, {'id': 17643, 'synset': 'hemlock.n.04', 'name': 'hemlock'}, {'id': 17644, 'synset': 'eastern_hemlock.n.01', 'name': 'eastern_hemlock'}, {'id': 17645, 'synset': 'carolina_hemlock.n.01', 'name': 'Carolina_hemlock'}, {'id': 17646, 'synset': 'mountain_hemlock.n.01', 'name': 'mountain_hemlock'}, {'id': 17647, 'synset': 'western_hemlock.n.01', 'name': 'western_hemlock'}, {'id': 17648, 'synset': 'douglas_fir.n.02', 'name': 'douglas_fir'}, {'id': 17649, 'synset': 'green_douglas_fir.n.01', 'name': 'green_douglas_fir'}, {'id': 17650, 'synset': 'big-cone_spruce.n.01', 'name': 'big-cone_spruce'}, {'id': 17651, 'synset': 'cathaya.n.01', 'name': 'Cathaya'}, {'id': 17652, 'synset': 'cedar.n.01', 'name': 'cedar'}, {'id': 17653, 'synset': 'cypress.n.02', 'name': 'cypress'}, {'id': 17654, 'synset': 'gowen_cypress.n.01', 'name': 'gowen_cypress'}, {'id': 17655, 'synset': 'pygmy_cypress.n.01', 'name': 'pygmy_cypress'}, {'id': 17656, 'synset': 'santa_cruz_cypress.n.01', 'name': 'Santa_Cruz_cypress'}, {'id': 17657, 'synset': 'arizona_cypress.n.01', 'name': 'Arizona_cypress'}, {'id': 17658, 'synset': 'guadalupe_cypress.n.01', 'name': 'Guadalupe_cypress'}, {'id': 17659, 'synset': 'monterey_cypress.n.01', 'name': 'Monterey_cypress'}, {'id': 17660, 'synset': 'mexican_cypress.n.01', 'name': 'Mexican_cypress'}, {'id': 17661, 'synset': 'italian_cypress.n.01', 'name': 'Italian_cypress'}, {'id': 17662, 'synset': 'king_william_pine.n.01', 'name': 'King_William_pine'}, {'id': 17663, 'synset': 'chilean_cedar.n.01', 'name': 'Chilean_cedar'}, {'id': 17664, 'synset': 'incense_cedar.n.02', 'name': 'incense_cedar'}, {'id': 17665, 'synset': 'southern_white_cedar.n.01', 'name': 'southern_white_cedar'}, {'id': 17666, 'synset': 'oregon_cedar.n.01', 'name': 'Oregon_cedar'}, {'id': 17667, 'synset': 'yellow_cypress.n.01', 'name': 'yellow_cypress'}, {'id': 17668, 'synset': 'japanese_cedar.n.01', 'name': 'Japanese_cedar'}, {'id': 17669, 'synset': 'juniper_berry.n.01', 'name': 'juniper_berry'}, {'id': 17670, 'synset': 'incense_cedar.n.01', 'name': 'incense_cedar'}, {'id': 17671, 'synset': 'kawaka.n.01', 'name': 'kawaka'}, {'id': 17672, 'synset': 'pahautea.n.01', 'name': 'pahautea'}, {'id': 17673, 'synset': 'metasequoia.n.01', 'name': 'metasequoia'}, {'id': 17674, 'synset': 'arborvitae.n.01', 'name': 'arborvitae'}, {'id': 17675, 'synset': 'western_red_cedar.n.01', 'name': 'western_red_cedar'}, {'id': 17676, 'synset': 'american_arborvitae.n.01', 'name': 'American_arborvitae'}, {'id': 17677, 'synset': 'oriental_arborvitae.n.01', 'name': 'Oriental_arborvitae'}, {'id': 17678, 'synset': 'hiba_arborvitae.n.01', 'name': 'hiba_arborvitae'}, {'id': 17679, 'synset': 'keteleeria.n.01', 'name': 'keteleeria'}, {'id': 17680, 'synset': 'wollemi_pine.n.01', 'name': 'Wollemi_pine'}, {'id': 17681, 'synset': 'araucaria.n.01', 'name': 'araucaria'}, {'id': 17682, 'synset': 'monkey_puzzle.n.01', 'name': 'monkey_puzzle'}, {'id': 17683, 'synset': 'norfolk_island_pine.n.01', 'name': 'norfolk_island_pine'}, {'id': 17684, 'synset': 'new_caledonian_pine.n.01', 'name': 'new_caledonian_pine'}, {'id': 17685, 'synset': 'bunya_bunya.n.01', 'name': 'bunya_bunya'}, {'id': 17686, 'synset': 'hoop_pine.n.01', 'name': 'hoop_pine'}, {'id': 17687, 'synset': 'kauri_pine.n.01', 'name': 'kauri_pine'}, {'id': 17688, 'synset': 'kauri.n.02', 'name': 'kauri'}, {'id': 17689, 'synset': 'amboina_pine.n.01', 'name': 'amboina_pine'}, {'id': 17690, 'synset': 'dundathu_pine.n.01', 'name': 'dundathu_pine'}, {'id': 17691, 'synset': 'red_kauri.n.01', 'name': 'red_kauri'}, {'id': 17692, 'synset': 'plum-yew.n.01', 'name': 'plum-yew'}, {'id': 17693, 'synset': 'california_nutmeg.n.01', 'name': 'California_nutmeg'}, {'id': 17694, 'synset': 'stinking_cedar.n.01', 'name': 'stinking_cedar'}, {'id': 17695, 'synset': 'celery_pine.n.01', 'name': 'celery_pine'}, {'id': 17696, 'synset': 'celery_top_pine.n.01', 'name': 'celery_top_pine'}, {'id': 17697, 'synset': 'tanekaha.n.01', 'name': 'tanekaha'}, {'id': 17698, 'synset': 'alpine_celery_pine.n.01', 'name': 'Alpine_celery_pine'}, {'id': 17699, 'synset': 'yellowwood.n.02', 'name': 'yellowwood'}, {'id': 17700, 'synset': 'gymnospermous_yellowwood.n.01', 'name': 'gymnospermous_yellowwood'}, {'id': 17701, 'synset': 'podocarp.n.01', 'name': 'podocarp'}, {'id': 17702, 'synset': 'yacca.n.01', 'name': 'yacca'}, {'id': 17703, 'synset': 'brown_pine.n.01', 'name': 'brown_pine'}, {'id': 17704, 'synset': 'cape_yellowwood.n.01', 'name': 'cape_yellowwood'}, {'id': 17705, 'synset': 'south-african_yellowwood.n.01', 'name': 'South-African_yellowwood'}, {'id': 17706, 'synset': 'alpine_totara.n.01', 'name': 'alpine_totara'}, {'id': 17707, 'synset': 'totara.n.01', 'name': 'totara'}, {'id': 17708, 'synset': 'common_yellowwood.n.01', 'name': 'common_yellowwood'}, {'id': 17709, 'synset': 'kahikatea.n.01', 'name': 'kahikatea'}, {'id': 17710, 'synset': 'rimu.n.01', 'name': 'rimu'}, {'id': 17711, 'synset': 'tarwood.n.02', 'name': 'tarwood'}, {'id': 17712, 'synset': 'common_sickle_pine.n.01', 'name': 'common_sickle_pine'}, {'id': 17713, 'synset': 'yellow-leaf_sickle_pine.n.01', 'name': 'yellow-leaf_sickle_pine'}, {'id': 17714, 'synset': 'tarwood.n.01', 'name': 'tarwood'}, {'id': 17715, 'synset': 'westland_pine.n.01', 'name': 'westland_pine'}, {'id': 17716, 'synset': 'huon_pine.n.01', 'name': 'huon_pine'}, {'id': 17717, 'synset': 'chilean_rimu.n.01', 'name': 'Chilean_rimu'}, {'id': 17718, 'synset': 'mountain_rimu.n.01', 'name': 'mountain_rimu'}, {'id': 17719, 'synset': 'nagi.n.01', 'name': 'nagi'}, {'id': 17720, 'synset': 'miro.n.01', 'name': 'miro'}, {'id': 17721, 'synset': 'matai.n.01', 'name': 'matai'}, {'id': 17722, 'synset': 'plum-fruited_yew.n.01', 'name': 'plum-fruited_yew'}, {'id': 17723, 'synset': 'prince_albert_yew.n.01', 'name': 'Prince_Albert_yew'}, {'id': 17724, 'synset': 'sundacarpus_amara.n.01', 'name': 'Sundacarpus_amara'}, {'id': 17725, 'synset': 'japanese_umbrella_pine.n.01', 'name': 'Japanese_umbrella_pine'}, {'id': 17726, 'synset': 'yew.n.02', 'name': 'yew'}, {'id': 17727, 'synset': 'old_world_yew.n.01', 'name': 'Old_World_yew'}, {'id': 17728, 'synset': 'pacific_yew.n.01', 'name': 'Pacific_yew'}, {'id': 17729, 'synset': 'japanese_yew.n.01', 'name': 'Japanese_yew'}, {'id': 17730, 'synset': 'florida_yew.n.01', 'name': 'Florida_yew'}, {'id': 17731, 'synset': 'new_caledonian_yew.n.01', 'name': 'New_Caledonian_yew'}, {'id': 17732, 'synset': 'white-berry_yew.n.01', 'name': 'white-berry_yew'}, {'id': 17733, 'synset': 'ginkgo.n.01', 'name': 'ginkgo'}, {'id': 17734, 'synset': 'angiosperm.n.01', 'name': 'angiosperm'}, {'id': 17735, 'synset': 'dicot.n.01', 'name': 'dicot'}, {'id': 17736, 'synset': 'monocot.n.01', 'name': 'monocot'}, {'id': 17737, 'synset': 'floret.n.01', 'name': 'floret'}, {'id': 17738, 'synset': 'flower.n.01', 'name': 'flower'}, {'id': 17739, 'synset': 'bloomer.n.01', 'name': 'bloomer'}, {'id': 17740, 'synset': 'wildflower.n.01', 'name': 'wildflower'}, {'id': 17741, 'synset': 'apetalous_flower.n.01', 'name': 'apetalous_flower'}, {'id': 17742, 'synset': 'inflorescence.n.02', 'name': 'inflorescence'}, {'id': 17743, 'synset': 'rosebud.n.01', 'name': 'rosebud'}, {'id': 17744, 'synset': 'gynostegium.n.01', 'name': 'gynostegium'}, {'id': 17745, 'synset': 'pollinium.n.01', 'name': 'pollinium'}, {'id': 17746, 'synset': 'pistil.n.01', 'name': 'pistil'}, {'id': 17747, 'synset': 'gynobase.n.01', 'name': 'gynobase'}, {'id': 17748, 'synset': 'gynophore.n.01', 'name': 'gynophore'}, {'id': 17749, 'synset': 'stylopodium.n.01', 'name': 'stylopodium'}, {'id': 17750, 'synset': 'carpophore.n.01', 'name': 'carpophore'}, {'id': 17751, 'synset': 'cornstalk.n.01', 'name': 'cornstalk'}, {'id': 17752, 'synset': 'petiolule.n.01', 'name': 'petiolule'}, {'id': 17753, 'synset': 'mericarp.n.01', 'name': 'mericarp'}, {'id': 17754, 'synset': 'micropyle.n.01', 'name': 'micropyle'}, {'id': 17755, 'synset': 'germ_tube.n.01', 'name': 'germ_tube'}, {'id': 17756, 'synset': 'pollen_tube.n.01', 'name': 'pollen_tube'}, {'id': 17757, 'synset': 'gemma.n.01', 'name': 'gemma'}, {'id': 17758, 'synset': 'galbulus.n.01', 'name': 'galbulus'}, {'id': 17759, 'synset': 'nectary.n.01', 'name': 'nectary'}, {'id': 17760, 'synset': 'pericarp.n.01', 'name': 'pericarp'}, {'id': 17761, 'synset': 'epicarp.n.01', 'name': 'epicarp'}, {'id': 17762, 'synset': 'mesocarp.n.01', 'name': 'mesocarp'}, {'id': 17763, 'synset': 'pip.n.03', 'name': 'pip'}, {'id': 17764, 'synset': 'silique.n.01', 'name': 'silique'}, {'id': 17765, 'synset': 'cataphyll.n.01', 'name': 'cataphyll'}, {'id': 17766, 'synset': 'perisperm.n.01', 'name': 'perisperm'}, {'id': 17767, 'synset': 'monocarp.n.01', 'name': 'monocarp'}, {'id': 17768, 'synset': 'sporophyte.n.01', 'name': 'sporophyte'}, {'id': 17769, 'synset': 'gametophyte.n.01', 'name': 'gametophyte'}, {'id': 17770, 'synset': 'megasporangium.n.01', 'name': 'megasporangium'}, {'id': 17771, 'synset': 'microspore.n.01', 'name': 'microspore'}, {'id': 17772, 'synset': 'microsporangium.n.01', 'name': 'microsporangium'}, {'id': 17773, 'synset': 'microsporophyll.n.01', 'name': 'microsporophyll'}, {'id': 17774, 'synset': 'archespore.n.01', 'name': 'archespore'}, {'id': 17775, 'synset': 'bonduc_nut.n.01', 'name': 'bonduc_nut'}, {'id': 17776, 'synset': "job's_tears.n.01", 'name': "Job's_tears"}, {'id': 17777, 'synset': 'oilseed.n.01', 'name': 'oilseed'}, {'id': 17778, 'synset': 'castor_bean.n.01', 'name': 'castor_bean'}, {'id': 17779, 'synset': 'cottonseed.n.01', 'name': 'cottonseed'}, {'id': 17780, 'synset': 'candlenut.n.02', 'name': 'candlenut'}, {'id': 17781, 'synset': 'peach_pit.n.01', 'name': 'peach_pit'}, {'id': 17782, 'synset': 'hypanthium.n.01', 'name': 'hypanthium'}, {'id': 17783, 'synset': 'petal.n.01', 'name': 'petal'}, {'id': 17784, 'synset': 'corolla.n.01', 'name': 'corolla'}, {'id': 17785, 'synset': 'lip.n.02', 'name': 'lip'}, {'id': 17786, 'synset': 'perianth.n.01', 'name': 'perianth'}, {'id': 17787, 'synset': 'thistledown.n.01', 'name': 'thistledown'}, {'id': 17788, 'synset': 'custard_apple.n.01', 'name': 'custard_apple'}, {'id': 17789, 'synset': 'cherimoya.n.01', 'name': 'cherimoya'}, {'id': 17790, 'synset': 'ilama.n.01', 'name': 'ilama'}, {'id': 17791, 'synset': 'soursop.n.01', 'name': 'soursop'}, {'id': 17792, 'synset': "bullock's_heart.n.01", 'name': "bullock's_heart"}, {'id': 17793, 'synset': 'sweetsop.n.01', 'name': 'sweetsop'}, {'id': 17794, 'synset': 'pond_apple.n.01', 'name': 'pond_apple'}, {'id': 17795, 'synset': 'pawpaw.n.02', 'name': 'pawpaw'}, {'id': 17796, 'synset': 'ilang-ilang.n.02', 'name': 'ilang-ilang'}, {'id': 17797, 'synset': 'lancewood.n.02', 'name': 'lancewood'}, {'id': 17798, 'synset': 'guinea_pepper.n.02', 'name': 'Guinea_pepper'}, {'id': 17799, 'synset': 'barberry.n.01', 'name': 'barberry'}, {'id': 17800, 'synset': 'american_barberry.n.01', 'name': 'American_barberry'}, {'id': 17801, 'synset': 'common_barberry.n.01', 'name': 'common_barberry'}, {'id': 17802, 'synset': 'japanese_barberry.n.01', 'name': 'Japanese_barberry'}, {'id': 17803, 'synset': 'oregon_grape.n.02', 'name': 'Oregon_grape'}, {'id': 17804, 'synset': 'oregon_grape.n.01', 'name': 'Oregon_grape'}, {'id': 17805, 'synset': 'mayapple.n.01', 'name': 'mayapple'}, {'id': 17806, 'synset': 'may_apple.n.01', 'name': 'May_apple'}, {'id': 17807, 'synset': 'allspice.n.02', 'name': 'allspice'}, {'id': 17808, 'synset': 'carolina_allspice.n.01', 'name': 'Carolina_allspice'}, {'id': 17809, 'synset': 'spicebush.n.02', 'name': 'spicebush'}, {'id': 17810, 'synset': 'katsura_tree.n.01', 'name': 'katsura_tree'}, {'id': 17811, 'synset': 'laurel.n.01', 'name': 'laurel'}, {'id': 17812, 'synset': 'true_laurel.n.01', 'name': 'true_laurel'}, {'id': 17813, 'synset': 'camphor_tree.n.01', 'name': 'camphor_tree'}, {'id': 17814, 'synset': 'cinnamon.n.02', 'name': 'cinnamon'}, {'id': 17815, 'synset': 'cassia.n.03', 'name': 'cassia'}, {'id': 17816, 'synset': 'cassia_bark.n.01', 'name': 'cassia_bark'}, {'id': 17817, 'synset': 'saigon_cinnamon.n.01', 'name': 'Saigon_cinnamon'}, {'id': 17818, 'synset': 'cinnamon_bark.n.01', 'name': 'cinnamon_bark'}, {'id': 17819, 'synset': 'spicebush.n.01', 'name': 'spicebush'}, {'id': 17820, 'synset': 'avocado.n.02', 'name': 'avocado'}, {'id': 17821, 'synset': 'laurel-tree.n.01', 'name': 'laurel-tree'}, {'id': 17822, 'synset': 'sassafras.n.01', 'name': 'sassafras'}, {'id': 17823, 'synset': 'california_laurel.n.01', 'name': 'California_laurel'}, {'id': 17824, 'synset': 'anise_tree.n.01', 'name': 'anise_tree'}, {'id': 17825, 'synset': 'purple_anise.n.01', 'name': 'purple_anise'}, {'id': 17826, 'synset': 'star_anise.n.02', 'name': 'star_anise'}, {'id': 17827, 'synset': 'star_anise.n.01', 'name': 'star_anise'}, {'id': 17828, 'synset': 'magnolia.n.02', 'name': 'magnolia'}, {'id': 17829, 'synset': 'southern_magnolia.n.01', 'name': 'southern_magnolia'}, {'id': 17830, 'synset': 'umbrella_tree.n.02', 'name': 'umbrella_tree'}, {'id': 17831, 'synset': 'earleaved_umbrella_tree.n.01', 'name': 'earleaved_umbrella_tree'}, {'id': 17832, 'synset': 'cucumber_tree.n.01', 'name': 'cucumber_tree'}, {'id': 17833, 'synset': 'large-leaved_magnolia.n.01', 'name': 'large-leaved_magnolia'}, {'id': 17834, 'synset': 'saucer_magnolia.n.01', 'name': 'saucer_magnolia'}, {'id': 17835, 'synset': 'star_magnolia.n.01', 'name': 'star_magnolia'}, {'id': 17836, 'synset': 'sweet_bay.n.01', 'name': 'sweet_bay'}, {'id': 17837, 'synset': 'manglietia.n.01', 'name': 'manglietia'}, {'id': 17838, 'synset': 'tulip_tree.n.01', 'name': 'tulip_tree'}, {'id': 17839, 'synset': 'moonseed.n.01', 'name': 'moonseed'}, {'id': 17840, 'synset': 'common_moonseed.n.01', 'name': 'common_moonseed'}, {'id': 17841, 'synset': 'carolina_moonseed.n.01', 'name': 'Carolina_moonseed'}, {'id': 17842, 'synset': 'nutmeg.n.01', 'name': 'nutmeg'}, {'id': 17843, 'synset': 'water_nymph.n.02', 'name': 'water_nymph'}, {'id': 17844, 'synset': 'european_white_lily.n.01', 'name': 'European_white_lily'}, {'id': 17845, 'synset': 'southern_spatterdock.n.01', 'name': 'southern_spatterdock'}, {'id': 17846, 'synset': 'lotus.n.01', 'name': 'lotus'}, {'id': 17847, 'synset': 'water_chinquapin.n.01', 'name': 'water_chinquapin'}, {'id': 17848, 'synset': 'water-shield.n.02', 'name': 'water-shield'}, {'id': 17849, 'synset': 'water-shield.n.01', 'name': 'water-shield'}, {'id': 17850, 'synset': 'peony.n.01', 'name': 'peony'}, {'id': 17851, 'synset': 'buttercup.n.01', 'name': 'buttercup'}, {'id': 17852, 'synset': 'meadow_buttercup.n.01', 'name': 'meadow_buttercup'}, {'id': 17853, 'synset': 'water_crowfoot.n.01', 'name': 'water_crowfoot'}, {'id': 17854, 'synset': 'lesser_celandine.n.01', 'name': 'lesser_celandine'}, {'id': 17855, 'synset': 'lesser_spearwort.n.01', 'name': 'lesser_spearwort'}, {'id': 17856, 'synset': 'greater_spearwort.n.01', 'name': 'greater_spearwort'}, {'id': 17857, 'synset': 'western_buttercup.n.01', 'name': 'western_buttercup'}, {'id': 17858, 'synset': 'creeping_buttercup.n.01', 'name': 'creeping_buttercup'}, {'id': 17859, 'synset': 'cursed_crowfoot.n.01', 'name': 'cursed_crowfoot'}, {'id': 17860, 'synset': 'aconite.n.01', 'name': 'aconite'}, {'id': 17861, 'synset': 'monkshood.n.01', 'name': 'monkshood'}, {'id': 17862, 'synset': 'wolfsbane.n.01', 'name': 'wolfsbane'}, {'id': 17863, 'synset': 'baneberry.n.02', 'name': 'baneberry'}, {'id': 17864, 'synset': 'baneberry.n.01', 'name': 'baneberry'}, {'id': 17865, 'synset': 'red_baneberry.n.01', 'name': 'red_baneberry'}, {'id': 17866, 'synset': "pheasant's-eye.n.01", 'name': "pheasant's-eye"}, {'id': 17867, 'synset': 'anemone.n.01', 'name': 'anemone'}, {'id': 17868, 'synset': 'alpine_anemone.n.01', 'name': 'Alpine_anemone'}, {'id': 17869, 'synset': 'canada_anemone.n.01', 'name': 'Canada_anemone'}, {'id': 17870, 'synset': 'thimbleweed.n.01', 'name': 'thimbleweed'}, {'id': 17871, 'synset': 'wood_anemone.n.02', 'name': 'wood_anemone'}, {'id': 17872, 'synset': 'wood_anemone.n.01', 'name': 'wood_anemone'}, {'id': 17873, 'synset': 'longheaded_thimbleweed.n.01', 'name': 'longheaded_thimbleweed'}, {'id': 17874, 'synset': 'snowdrop_anemone.n.01', 'name': 'snowdrop_anemone'}, {'id': 17875, 'synset': 'virginia_thimbleweed.n.01', 'name': 'Virginia_thimbleweed'}, {'id': 17876, 'synset': 'rue_anemone.n.01', 'name': 'rue_anemone'}, {'id': 17877, 'synset': 'columbine.n.01', 'name': 'columbine'}, {'id': 17878, 'synset': 'meeting_house.n.01', 'name': 'meeting_house'}, {'id': 17879, 'synset': 'blue_columbine.n.01', 'name': 'blue_columbine'}, {'id': 17880, 'synset': "granny's_bonnets.n.01", 'name': "granny's_bonnets"}, {'id': 17881, 'synset': 'marsh_marigold.n.01', 'name': 'marsh_marigold'}, {'id': 17882, 'synset': 'american_bugbane.n.01', 'name': 'American_bugbane'}, {'id': 17883, 'synset': 'black_cohosh.n.01', 'name': 'black_cohosh'}, {'id': 17884, 'synset': 'fetid_bugbane.n.01', 'name': 'fetid_bugbane'}, {'id': 17885, 'synset': 'clematis.n.01', 'name': 'clematis'}, {'id': 17886, 'synset': 'pine_hyacinth.n.01', 'name': 'pine_hyacinth'}, {'id': 17887, 'synset': 'blue_jasmine.n.01', 'name': 'blue_jasmine'}, {'id': 17888, 'synset': 'golden_clematis.n.01', 'name': 'golden_clematis'}, {'id': 17889, 'synset': 'scarlet_clematis.n.01', 'name': 'scarlet_clematis'}, {'id': 17890, 'synset': 'leather_flower.n.02', 'name': 'leather_flower'}, {'id': 17891, 'synset': 'leather_flower.n.01', 'name': 'leather_flower'}, {'id': 17892, 'synset': "virgin's_bower.n.01", 'name': "virgin's_bower"}, {'id': 17893, 'synset': 'purple_clematis.n.01', 'name': 'purple_clematis'}, {'id': 17894, 'synset': 'goldthread.n.01', 'name': 'goldthread'}, {'id': 17895, 'synset': 'rocket_larkspur.n.01', 'name': 'rocket_larkspur'}, {'id': 17896, 'synset': 'delphinium.n.01', 'name': 'delphinium'}, {'id': 17897, 'synset': 'larkspur.n.01', 'name': 'larkspur'}, {'id': 17898, 'synset': 'winter_aconite.n.01', 'name': 'winter_aconite'}, {'id': 17899, 'synset': 'lenten_rose.n.01', 'name': 'lenten_rose'}, {'id': 17900, 'synset': 'green_hellebore.n.01', 'name': 'green_hellebore'}, {'id': 17901, 'synset': 'hepatica.n.01', 'name': 'hepatica'}, {'id': 17902, 'synset': 'goldenseal.n.01', 'name': 'goldenseal'}, {'id': 17903, 'synset': 'false_rue_anemone.n.01', 'name': 'false_rue_anemone'}, {'id': 17904, 'synset': 'giant_buttercup.n.01', 'name': 'giant_buttercup'}, {'id': 17905, 'synset': 'nigella.n.01', 'name': 'nigella'}, {'id': 17906, 'synset': 'love-in-a-mist.n.03', 'name': 'love-in-a-mist'}, {'id': 17907, 'synset': 'fennel_flower.n.01', 'name': 'fennel_flower'}, {'id': 17908, 'synset': 'black_caraway.n.01', 'name': 'black_caraway'}, {'id': 17909, 'synset': 'pasqueflower.n.01', 'name': 'pasqueflower'}, {'id': 17910, 'synset': 'meadow_rue.n.01', 'name': 'meadow_rue'}, {'id': 17911, 'synset': 'false_bugbane.n.01', 'name': 'false_bugbane'}, {'id': 17912, 'synset': 'globeflower.n.01', 'name': 'globeflower'}, {'id': 17913, 'synset': "winter's_bark.n.02", 'name': "winter's_bark"}, {'id': 17914, 'synset': 'pepper_shrub.n.01', 'name': 'pepper_shrub'}, {'id': 17915, 'synset': 'sweet_gale.n.01', 'name': 'sweet_gale'}, {'id': 17916, 'synset': 'wax_myrtle.n.01', 'name': 'wax_myrtle'}, {'id': 17917, 'synset': 'bay_myrtle.n.01', 'name': 'bay_myrtle'}, {'id': 17918, 'synset': 'bayberry.n.02', 'name': 'bayberry'}, {'id': 17919, 'synset': 'sweet_fern.n.02', 'name': 'sweet_fern'}, {'id': 17920, 'synset': 'corkwood.n.01', 'name': 'corkwood'}, {'id': 17921, 'synset': 'jointed_rush.n.01', 'name': 'jointed_rush'}, {'id': 17922, 'synset': 'toad_rush.n.01', 'name': 'toad_rush'}, {'id': 17923, 'synset': 'slender_rush.n.01', 'name': 'slender_rush'}, {'id': 17924, 'synset': 'zebrawood.n.02', 'name': 'zebrawood'}, {'id': 17925, 'synset': 'connarus_guianensis.n.01', 'name': 'Connarus_guianensis'}, {'id': 17926, 'synset': 'legume.n.01', 'name': 'legume'}, {'id': 17927, 'synset': 'peanut.n.01', 'name': 'peanut'}, {'id': 17928, 'synset': 'granadilla_tree.n.01', 'name': 'granadilla_tree'}, {'id': 17929, 'synset': 'arariba.n.01', 'name': 'arariba'}, {'id': 17930, 'synset': 'tonka_bean.n.01', 'name': 'tonka_bean'}, {'id': 17931, 'synset': 'courbaril.n.01', 'name': 'courbaril'}, {'id': 17932, 'synset': 'melilotus.n.01', 'name': 'melilotus'}, {'id': 17933, 'synset': 'darling_pea.n.01', 'name': 'darling_pea'}, {'id': 17934, 'synset': 'smooth_darling_pea.n.01', 'name': 'smooth_darling_pea'}, {'id': 17935, 'synset': 'clover.n.01', 'name': 'clover'}, {'id': 17936, 'synset': 'alpine_clover.n.01', 'name': 'alpine_clover'}, {'id': 17937, 'synset': 'hop_clover.n.02', 'name': 'hop_clover'}, {'id': 17938, 'synset': 'crimson_clover.n.01', 'name': 'crimson_clover'}, {'id': 17939, 'synset': 'red_clover.n.01', 'name': 'red_clover'}, {'id': 17940, 'synset': 'buffalo_clover.n.02', 'name': 'buffalo_clover'}, {'id': 17941, 'synset': 'white_clover.n.01', 'name': 'white_clover'}, {'id': 17942, 'synset': 'mimosa.n.02', 'name': 'mimosa'}, {'id': 17943, 'synset': 'acacia.n.01', 'name': 'acacia'}, {'id': 17944, 'synset': 'shittah.n.01', 'name': 'shittah'}, {'id': 17945, 'synset': 'wattle.n.03', 'name': 'wattle'}, {'id': 17946, 'synset': 'black_wattle.n.01', 'name': 'black_wattle'}, {'id': 17947, 'synset': 'gidgee.n.01', 'name': 'gidgee'}, {'id': 17948, 'synset': 'catechu.n.02', 'name': 'catechu'}, {'id': 17949, 'synset': 'silver_wattle.n.01', 'name': 'silver_wattle'}, {'id': 17950, 'synset': 'huisache.n.01', 'name': 'huisache'}, {'id': 17951, 'synset': 'lightwood.n.01', 'name': 'lightwood'}, {'id': 17952, 'synset': 'golden_wattle.n.01', 'name': 'golden_wattle'}, {'id': 17953, 'synset': 'fever_tree.n.04', 'name': 'fever_tree'}, {'id': 17954, 'synset': 'coralwood.n.01', 'name': 'coralwood'}, {'id': 17955, 'synset': 'albizzia.n.01', 'name': 'albizzia'}, {'id': 17956, 'synset': 'silk_tree.n.01', 'name': 'silk_tree'}, {'id': 17957, 'synset': 'siris.n.01', 'name': 'siris'}, {'id': 17958, 'synset': 'rain_tree.n.01', 'name': 'rain_tree'}, {'id': 17959, 'synset': 'calliandra.n.01', 'name': 'calliandra'}, {'id': 17960, 'synset': 'conacaste.n.01', 'name': 'conacaste'}, {'id': 17961, 'synset': 'inga.n.01', 'name': 'inga'}, {'id': 17962, 'synset': 'ice-cream_bean.n.01', 'name': 'ice-cream_bean'}, {'id': 17963, 'synset': 'guama.n.01', 'name': 'guama'}, {'id': 17964, 'synset': 'lead_tree.n.01', 'name': 'lead_tree'}, {'id': 17965, 'synset': 'wild_tamarind.n.02', 'name': 'wild_tamarind'}, {'id': 17966, 'synset': 'sabicu.n.02', 'name': 'sabicu'}, {'id': 17967, 'synset': 'nitta_tree.n.01', 'name': 'nitta_tree'}, {'id': 17968, 'synset': 'parkia_javanica.n.01', 'name': 'Parkia_javanica'}, {'id': 17969, 'synset': 'manila_tamarind.n.01', 'name': 'manila_tamarind'}, {'id': 17970, 'synset': "cat's-claw.n.01", 'name': "cat's-claw"}, {'id': 17971, 'synset': 'honey_mesquite.n.01', 'name': 'honey_mesquite'}, {'id': 17972, 'synset': 'algarroba.n.03', 'name': 'algarroba'}, {'id': 17973, 'synset': 'screw_bean.n.02', 'name': 'screw_bean'}, {'id': 17974, 'synset': 'screw_bean.n.01', 'name': 'screw_bean'}, {'id': 17975, 'synset': 'dogbane.n.01', 'name': 'dogbane'}, {'id': 17976, 'synset': 'indian_hemp.n.03', 'name': 'Indian_hemp'}, {'id': 17977, 'synset': "bushman's_poison.n.01", 'name': "bushman's_poison"}, {'id': 17978, 'synset': 'impala_lily.n.01', 'name': 'impala_lily'}, {'id': 17979, 'synset': 'allamanda.n.01', 'name': 'allamanda'}, {'id': 17980, 'synset': 'common_allamanda.n.01', 'name': 'common_allamanda'}, {'id': 17981, 'synset': 'dita.n.01', 'name': 'dita'}, {'id': 17982, 'synset': 'nepal_trumpet_flower.n.01', 'name': 'Nepal_trumpet_flower'}, {'id': 17983, 'synset': 'carissa.n.01', 'name': 'carissa'}, {'id': 17984, 'synset': 'hedge_thorn.n.01', 'name': 'hedge_thorn'}, {'id': 17985, 'synset': 'natal_plum.n.01', 'name': 'natal_plum'}, {'id': 17986, 'synset': 'periwinkle.n.02', 'name': 'periwinkle'}, {'id': 17987, 'synset': 'ivory_tree.n.01', 'name': 'ivory_tree'}, {'id': 17988, 'synset': 'white_dipladenia.n.01', 'name': 'white_dipladenia'}, {'id': 17989, 'synset': 'chilean_jasmine.n.01', 'name': 'Chilean_jasmine'}, {'id': 17990, 'synset': 'oleander.n.01', 'name': 'oleander'}, {'id': 17991, 'synset': 'frangipani.n.01', 'name': 'frangipani'}, {'id': 17992, 'synset': 'west_indian_jasmine.n.01', 'name': 'West_Indian_jasmine'}, {'id': 17993, 'synset': 'rauwolfia.n.02', 'name': 'rauwolfia'}, {'id': 17994, 'synset': 'snakewood.n.01', 'name': 'snakewood'}, {'id': 17995, 'synset': 'strophanthus_kombe.n.01', 'name': 'Strophanthus_kombe'}, {'id': 17996, 'synset': 'yellow_oleander.n.01', 'name': 'yellow_oleander'}, {'id': 17997, 'synset': 'myrtle.n.01', 'name': 'myrtle'}, {'id': 17998, 'synset': 'large_periwinkle.n.01', 'name': 'large_periwinkle'}, {'id': 17999, 'synset': 'arum.n.02', 'name': 'arum'}, {'id': 18000, 'synset': 'cuckoopint.n.01', 'name': 'cuckoopint'}, {'id': 18001, 'synset': 'black_calla.n.01', 'name': 'black_calla'}, {'id': 18002, 'synset': 'calamus.n.02', 'name': 'calamus'}, {'id': 18003, 'synset': 'alocasia.n.01', 'name': 'alocasia'}, {'id': 18004, 'synset': 'giant_taro.n.01', 'name': 'giant_taro'}, {'id': 18005, 'synset': 'amorphophallus.n.01', 'name': 'amorphophallus'}, {'id': 18006, 'synset': 'pungapung.n.01', 'name': 'pungapung'}, {'id': 18007, 'synset': "devil's_tongue.n.01", 'name': "devil's_tongue"}, {'id': 18008, 'synset': 'anthurium.n.01', 'name': 'anthurium'}, {'id': 18009, 'synset': 'flamingo_flower.n.01', 'name': 'flamingo_flower'}, {'id': 18010, 'synset': 'jack-in-the-pulpit.n.01', 'name': 'jack-in-the-pulpit'}, {'id': 18011, 'synset': "friar's-cowl.n.01", 'name': "friar's-cowl"}, {'id': 18012, 'synset': 'caladium.n.01', 'name': 'caladium'}, {'id': 18013, 'synset': 'caladium_bicolor.n.01', 'name': 'Caladium_bicolor'}, {'id': 18014, 'synset': 'wild_calla.n.01', 'name': 'wild_calla'}, {'id': 18015, 'synset': 'taro.n.02', 'name': 'taro'}, {'id': 18016, 'synset': 'taro.n.01', 'name': 'taro'}, {'id': 18017, 'synset': 'cryptocoryne.n.01', 'name': 'cryptocoryne'}, {'id': 18018, 'synset': 'dracontium.n.01', 'name': 'dracontium'}, {'id': 18019, 'synset': 'golden_pothos.n.01', 'name': 'golden_pothos'}, {'id': 18020, 'synset': 'skunk_cabbage.n.02', 'name': 'skunk_cabbage'}, {'id': 18021, 'synset': 'monstera.n.01', 'name': 'monstera'}, {'id': 18022, 'synset': 'ceriman.n.01', 'name': 'ceriman'}, {'id': 18023, 'synset': 'nephthytis.n.01', 'name': 'nephthytis'}, {'id': 18024, 'synset': 'nephthytis_afzelii.n.01', 'name': 'Nephthytis_afzelii'}, {'id': 18025, 'synset': 'arrow_arum.n.01', 'name': 'arrow_arum'}, {'id': 18026, 'synset': 'green_arrow_arum.n.01', 'name': 'green_arrow_arum'}, {'id': 18027, 'synset': 'philodendron.n.01', 'name': 'philodendron'}, {'id': 18028, 'synset': 'pistia.n.01', 'name': 'pistia'}, {'id': 18029, 'synset': 'pothos.n.01', 'name': 'pothos'}, {'id': 18030, 'synset': 'spathiphyllum.n.01', 'name': 'spathiphyllum'}, {'id': 18031, 'synset': 'skunk_cabbage.n.01', 'name': 'skunk_cabbage'}, {'id': 18032, 'synset': 'yautia.n.01', 'name': 'yautia'}, {'id': 18033, 'synset': 'calla_lily.n.01', 'name': 'calla_lily'}, {'id': 18034, 'synset': 'pink_calla.n.01', 'name': 'pink_calla'}, {'id': 18035, 'synset': 'golden_calla.n.01', 'name': 'golden_calla'}, {'id': 18036, 'synset': 'duckweed.n.01', 'name': 'duckweed'}, {'id': 18037, 'synset': 'common_duckweed.n.01', 'name': 'common_duckweed'}, {'id': 18038, 'synset': 'star-duckweed.n.01', 'name': 'star-duckweed'}, {'id': 18039, 'synset': 'great_duckweed.n.01', 'name': 'great_duckweed'}, {'id': 18040, 'synset': 'watermeal.n.01', 'name': 'watermeal'}, {'id': 18041, 'synset': 'common_wolffia.n.01', 'name': 'common_wolffia'}, {'id': 18042, 'synset': 'aralia.n.01', 'name': 'aralia'}, {'id': 18043, 'synset': 'american_angelica_tree.n.01', 'name': 'American_angelica_tree'}, {'id': 18044, 'synset': 'american_spikenard.n.01', 'name': 'American_spikenard'}, {'id': 18045, 'synset': 'bristly_sarsaparilla.n.01', 'name': 'bristly_sarsaparilla'}, {'id': 18046, 'synset': 'japanese_angelica_tree.n.01', 'name': 'Japanese_angelica_tree'}, {'id': 18047, 'synset': 'chinese_angelica.n.01', 'name': 'Chinese_angelica'}, {'id': 18048, 'synset': 'ivy.n.01', 'name': 'ivy'}, {'id': 18049, 'synset': 'puka.n.02', 'name': 'puka'}, {'id': 18050, 'synset': 'ginseng.n.02', 'name': 'ginseng'}, {'id': 18051, 'synset': 'ginseng.n.01', 'name': 'ginseng'}, {'id': 18052, 'synset': 'umbrella_tree.n.01', 'name': 'umbrella_tree'}, {'id': 18053, 'synset': 'birthwort.n.01', 'name': 'birthwort'}, {'id': 18054, 'synset': "dutchman's-pipe.n.01", 'name': "Dutchman's-pipe"}, {'id': 18055, 'synset': 'virginia_snakeroot.n.01', 'name': 'Virginia_snakeroot'}, {'id': 18056, 'synset': 'canada_ginger.n.01', 'name': 'Canada_ginger'}, {'id': 18057, 'synset': 'heartleaf.n.02', 'name': 'heartleaf'}, {'id': 18058, 'synset': 'heartleaf.n.01', 'name': 'heartleaf'}, {'id': 18059, 'synset': 'asarabacca.n.01', 'name': 'asarabacca'}, {'id': 18060, 'synset': 'caryophyllaceous_plant.n.01', 'name': 'caryophyllaceous_plant'}, {'id': 18061, 'synset': 'corn_cockle.n.01', 'name': 'corn_cockle'}, {'id': 18062, 'synset': 'sandwort.n.03', 'name': 'sandwort'}, {'id': 18063, 'synset': 'mountain_sandwort.n.01', 'name': 'mountain_sandwort'}, {'id': 18064, 'synset': 'pine-barren_sandwort.n.01', 'name': 'pine-barren_sandwort'}, {'id': 18065, 'synset': 'seabeach_sandwort.n.01', 'name': 'seabeach_sandwort'}, {'id': 18066, 'synset': 'rock_sandwort.n.01', 'name': 'rock_sandwort'}, {'id': 18067, 'synset': 'thyme-leaved_sandwort.n.01', 'name': 'thyme-leaved_sandwort'}, {'id': 18068, 'synset': 'mouse-ear_chickweed.n.01', 'name': 'mouse-ear_chickweed'}, {'id': 18069, 'synset': 'snow-in-summer.n.02', 'name': 'snow-in-summer'}, {'id': 18070, 'synset': 'alpine_mouse-ear.n.01', 'name': 'Alpine_mouse-ear'}, {'id': 18071, 'synset': 'pink.n.02', 'name': 'pink'}, {'id': 18072, 'synset': 'sweet_william.n.01', 'name': 'sweet_William'}, {'id': 18073, 'synset': 'china_pink.n.01', 'name': 'china_pink'}, {'id': 18074, 'synset': 'japanese_pink.n.01', 'name': 'Japanese_pink'}, {'id': 18075, 'synset': 'maiden_pink.n.01', 'name': 'maiden_pink'}, {'id': 18076, 'synset': 'cheddar_pink.n.01', 'name': 'cheddar_pink'}, {'id': 18077, 'synset': 'button_pink.n.01', 'name': 'button_pink'}, {'id': 18078, 'synset': 'cottage_pink.n.01', 'name': 'cottage_pink'}, {'id': 18079, 'synset': 'fringed_pink.n.02', 'name': 'fringed_pink'}, {'id': 18080, 'synset': 'drypis.n.01', 'name': 'drypis'}, {'id': 18081, 'synset': "baby's_breath.n.01", 'name': "baby's_breath"}, {'id': 18082, 'synset': 'coral_necklace.n.01', 'name': 'coral_necklace'}, {'id': 18083, 'synset': 'lychnis.n.01', 'name': 'lychnis'}, {'id': 18084, 'synset': 'ragged_robin.n.01', 'name': 'ragged_robin'}, {'id': 18085, 'synset': 'scarlet_lychnis.n.01', 'name': 'scarlet_lychnis'}, {'id': 18086, 'synset': 'mullein_pink.n.01', 'name': 'mullein_pink'}, {'id': 18087, 'synset': 'sandwort.n.02', 'name': 'sandwort'}, {'id': 18088, 'synset': 'sandwort.n.01', 'name': 'sandwort'}, {'id': 18089, 'synset': 'soapwort.n.01', 'name': 'soapwort'}, {'id': 18090, 'synset': 'knawel.n.01', 'name': 'knawel'}, {'id': 18091, 'synset': 'silene.n.01', 'name': 'silene'}, {'id': 18092, 'synset': 'moss_campion.n.01', 'name': 'moss_campion'}, {'id': 18093, 'synset': 'wild_pink.n.02', 'name': 'wild_pink'}, {'id': 18094, 'synset': 'red_campion.n.01', 'name': 'red_campion'}, {'id': 18095, 'synset': 'white_campion.n.01', 'name': 'white_campion'}, {'id': 18096, 'synset': 'fire_pink.n.01', 'name': 'fire_pink'}, {'id': 18097, 'synset': 'bladder_campion.n.01', 'name': 'bladder_campion'}, {'id': 18098, 'synset': 'corn_spurry.n.01', 'name': 'corn_spurry'}, {'id': 18099, 'synset': 'sand_spurry.n.01', 'name': 'sand_spurry'}, {'id': 18100, 'synset': 'chickweed.n.01', 'name': 'chickweed'}, {'id': 18101, 'synset': 'common_chickweed.n.01', 'name': 'common_chickweed'}, {'id': 18102, 'synset': 'cowherb.n.01', 'name': 'cowherb'}, {'id': 18103, 'synset': 'hottentot_fig.n.01', 'name': 'Hottentot_fig'}, {'id': 18104, 'synset': 'livingstone_daisy.n.01', 'name': 'livingstone_daisy'}, {'id': 18105, 'synset': 'fig_marigold.n.01', 'name': 'fig_marigold'}, {'id': 18106, 'synset': 'ice_plant.n.01', 'name': 'ice_plant'}, {'id': 18107, 'synset': 'new_zealand_spinach.n.01', 'name': 'New_Zealand_spinach'}, {'id': 18108, 'synset': 'amaranth.n.02', 'name': 'amaranth'}, {'id': 18109, 'synset': 'amaranth.n.01', 'name': 'amaranth'}, {'id': 18110, 'synset': 'tumbleweed.n.04', 'name': 'tumbleweed'}, {'id': 18111, 'synset': "prince's-feather.n.02", 'name': "prince's-feather"}, {'id': 18112, 'synset': 'pigweed.n.02', 'name': 'pigweed'}, {'id': 18113, 'synset': 'thorny_amaranth.n.01', 'name': 'thorny_amaranth'}, {'id': 18114, 'synset': 'alligator_weed.n.01', 'name': 'alligator_weed'}, {'id': 18115, 'synset': 'cockscomb.n.01', 'name': 'cockscomb'}, {'id': 18116, 'synset': 'cottonweed.n.02', 'name': 'cottonweed'}, {'id': 18117, 'synset': 'globe_amaranth.n.01', 'name': 'globe_amaranth'}, {'id': 18118, 'synset': 'bloodleaf.n.01', 'name': 'bloodleaf'}, {'id': 18119, 'synset': 'saltwort.n.02', 'name': 'saltwort'}, {'id': 18120, 'synset': "lamb's-quarters.n.01", 'name': "lamb's-quarters"}, {'id': 18121, 'synset': 'good-king-henry.n.01', 'name': 'good-king-henry'}, {'id': 18122, 'synset': 'jerusalem_oak.n.01', 'name': 'Jerusalem_oak'}, {'id': 18123, 'synset': 'oak-leaved_goosefoot.n.01', 'name': 'oak-leaved_goosefoot'}, {'id': 18124, 'synset': 'sowbane.n.01', 'name': 'sowbane'}, {'id': 18125, 'synset': 'nettle-leaved_goosefoot.n.01', 'name': 'nettle-leaved_goosefoot'}, {'id': 18126, 'synset': 'red_goosefoot.n.01', 'name': 'red_goosefoot'}, {'id': 18127, 'synset': 'stinking_goosefoot.n.01', 'name': 'stinking_goosefoot'}, {'id': 18128, 'synset': 'orach.n.01', 'name': 'orach'}, {'id': 18129, 'synset': 'saltbush.n.01', 'name': 'saltbush'}, {'id': 18130, 'synset': 'garden_orache.n.01', 'name': 'garden_orache'}, {'id': 18131, 'synset': 'desert_holly.n.01', 'name': 'desert_holly'}, {'id': 18132, 'synset': 'quail_bush.n.01', 'name': 'quail_bush'}, {'id': 18133, 'synset': 'beet.n.01', 'name': 'beet'}, {'id': 18134, 'synset': 'beetroot.n.01', 'name': 'beetroot'}, {'id': 18135, 'synset': 'chard.n.01', 'name': 'chard'}, {'id': 18136, 'synset': 'mangel-wurzel.n.01', 'name': 'mangel-wurzel'}, {'id': 18137, 'synset': 'winged_pigweed.n.01', 'name': 'winged_pigweed'}, {'id': 18138, 'synset': 'halogeton.n.01', 'name': 'halogeton'}, {'id': 18139, 'synset': 'glasswort.n.02', 'name': 'glasswort'}, {'id': 18140, 'synset': 'saltwort.n.01', 'name': 'saltwort'}, {'id': 18141, 'synset': 'russian_thistle.n.01', 'name': 'Russian_thistle'}, {'id': 18142, 'synset': 'greasewood.n.01', 'name': 'greasewood'}, {'id': 18143, 'synset': 'scarlet_musk_flower.n.01', 'name': 'scarlet_musk_flower'}, {'id': 18144, 'synset': 'sand_verbena.n.01', 'name': 'sand_verbena'}, {'id': 18145, 'synset': 'sweet_sand_verbena.n.01', 'name': 'sweet_sand_verbena'}, {'id': 18146, 'synset': 'yellow_sand_verbena.n.01', 'name': 'yellow_sand_verbena'}, {'id': 18147, 'synset': 'beach_pancake.n.01', 'name': 'beach_pancake'}, {'id': 18148, 'synset': 'beach_sand_verbena.n.01', 'name': 'beach_sand_verbena'}, {'id': 18149, 'synset': 'desert_sand_verbena.n.01', 'name': 'desert_sand_verbena'}, {'id': 18150, 'synset': "trailing_four_o'clock.n.01", 'name': "trailing_four_o'clock"}, {'id': 18151, 'synset': 'bougainvillea.n.01', 'name': 'bougainvillea'}, {'id': 18152, 'synset': 'umbrellawort.n.01', 'name': 'umbrellawort'}, {'id': 18153, 'synset': "four_o'clock.n.01", 'name': "four_o'clock"}, {'id': 18154, 'synset': "common_four-o'clock.n.01", 'name': "common_four-o'clock"}, {'id': 18155, 'synset': "california_four_o'clock.n.01", 'name': "California_four_o'clock"}, {'id': 18156, 'synset': "sweet_four_o'clock.n.01", 'name': "sweet_four_o'clock"}, {'id': 18157, 'synset': "desert_four_o'clock.n.01", 'name': "desert_four_o'clock"}, {'id': 18158, 'synset': "mountain_four_o'clock.n.01", 'name': "mountain_four_o'clock"}, {'id': 18159, 'synset': 'cockspur.n.02', 'name': 'cockspur'}, {'id': 18160, 'synset': 'rattail_cactus.n.01', 'name': 'rattail_cactus'}, {'id': 18161, 'synset': 'saguaro.n.01', 'name': 'saguaro'}, {'id': 18162, 'synset': 'night-blooming_cereus.n.03', 'name': 'night-blooming_cereus'}, {'id': 18163, 'synset': 'echinocactus.n.01', 'name': 'echinocactus'}, {'id': 18164, 'synset': 'hedgehog_cactus.n.01', 'name': 'hedgehog_cactus'}, {'id': 18165, 'synset': 'golden_barrel_cactus.n.01', 'name': 'golden_barrel_cactus'}, {'id': 18166, 'synset': 'hedgehog_cereus.n.01', 'name': 'hedgehog_cereus'}, {'id': 18167, 'synset': 'rainbow_cactus.n.01', 'name': 'rainbow_cactus'}, {'id': 18168, 'synset': 'epiphyllum.n.01', 'name': 'epiphyllum'}, {'id': 18169, 'synset': 'barrel_cactus.n.01', 'name': 'barrel_cactus'}, {'id': 18170, 'synset': 'night-blooming_cereus.n.02', 'name': 'night-blooming_cereus'}, {'id': 18171, 'synset': 'chichipe.n.01', 'name': 'chichipe'}, {'id': 18172, 'synset': 'mescal.n.01', 'name': 'mescal'}, {'id': 18173, 'synset': 'mescal_button.n.01', 'name': 'mescal_button'}, {'id': 18174, 'synset': 'mammillaria.n.01', 'name': 'mammillaria'}, {'id': 18175, 'synset': 'feather_ball.n.01', 'name': 'feather_ball'}, {'id': 18176, 'synset': 'garambulla.n.01', 'name': 'garambulla'}, {'id': 18177, 'synset': "knowlton's_cactus.n.01", 'name': "Knowlton's_cactus"}, {'id': 18178, 'synset': 'nopal.n.02', 'name': 'nopal'}, {'id': 18179, 'synset': 'prickly_pear.n.01', 'name': 'prickly_pear'}, {'id': 18180, 'synset': 'cholla.n.01', 'name': 'cholla'}, {'id': 18181, 'synset': 'nopal.n.01', 'name': 'nopal'}, {'id': 18182, 'synset': 'tuna.n.01', 'name': 'tuna'}, {'id': 18183, 'synset': 'barbados_gooseberry.n.01', 'name': 'Barbados_gooseberry'}, {'id': 18184, 'synset': 'mistletoe_cactus.n.01', 'name': 'mistletoe_cactus'}, {'id': 18185, 'synset': 'christmas_cactus.n.01', 'name': 'Christmas_cactus'}, {'id': 18186, 'synset': 'night-blooming_cereus.n.01', 'name': 'night-blooming_cereus'}, {'id': 18187, 'synset': 'crab_cactus.n.01', 'name': 'crab_cactus'}, {'id': 18188, 'synset': 'pokeweed.n.01', 'name': 'pokeweed'}, {'id': 18189, 'synset': 'indian_poke.n.02', 'name': 'Indian_poke'}, {'id': 18190, 'synset': 'poke.n.01', 'name': 'poke'}, {'id': 18191, 'synset': 'ombu.n.01', 'name': 'ombu'}, {'id': 18192, 'synset': 'bloodberry.n.01', 'name': 'bloodberry'}, {'id': 18193, 'synset': 'portulaca.n.01', 'name': 'portulaca'}, {'id': 18194, 'synset': 'rose_moss.n.01', 'name': 'rose_moss'}, {'id': 18195, 'synset': 'common_purslane.n.01', 'name': 'common_purslane'}, {'id': 18196, 'synset': 'rock_purslane.n.01', 'name': 'rock_purslane'}, {'id': 18197, 'synset': 'red_maids.n.01', 'name': 'red_maids'}, {'id': 18198, 'synset': 'carolina_spring_beauty.n.01', 'name': 'Carolina_spring_beauty'}, {'id': 18199, 'synset': 'spring_beauty.n.01', 'name': 'spring_beauty'}, {'id': 18200, 'synset': 'virginia_spring_beauty.n.01', 'name': 'Virginia_spring_beauty'}, {'id': 18201, 'synset': 'siskiyou_lewisia.n.01', 'name': 'siskiyou_lewisia'}, {'id': 18202, 'synset': 'bitterroot.n.01', 'name': 'bitterroot'}, {'id': 18203, 'synset': 'broad-leaved_montia.n.01', 'name': 'broad-leaved_montia'}, {'id': 18204, 'synset': 'blinks.n.01', 'name': 'blinks'}, {'id': 18205, 'synset': 'toad_lily.n.01', 'name': 'toad_lily'}, {'id': 18206, 'synset': 'winter_purslane.n.01', 'name': 'winter_purslane'}, {'id': 18207, 'synset': 'flame_flower.n.02', 'name': 'flame_flower'}, {'id': 18208, 'synset': 'pigmy_talinum.n.01', 'name': 'pigmy_talinum'}, {'id': 18209, 'synset': 'jewels-of-opar.n.01', 'name': 'jewels-of-opar'}, {'id': 18210, 'synset': 'caper.n.01', 'name': 'caper'}, {'id': 18211, 'synset': 'native_pomegranate.n.01', 'name': 'native_pomegranate'}, {'id': 18212, 'synset': 'caper_tree.n.02', 'name': 'caper_tree'}, {'id': 18213, 'synset': 'caper_tree.n.01', 'name': 'caper_tree'}, {'id': 18214, 'synset': 'common_caper.n.01', 'name': 'common_caper'}, {'id': 18215, 'synset': 'spiderflower.n.01', 'name': 'spiderflower'}, {'id': 18216, 'synset': 'rocky_mountain_bee_plant.n.01', 'name': 'Rocky_Mountain_bee_plant'}, {'id': 18217, 'synset': 'clammyweed.n.01', 'name': 'clammyweed'}, {'id': 18218, 'synset': 'crucifer.n.01', 'name': 'crucifer'}, {'id': 18219, 'synset': 'cress.n.01', 'name': 'cress'}, {'id': 18220, 'synset': 'watercress.n.01', 'name': 'watercress'}, {'id': 18221, 'synset': 'stonecress.n.01', 'name': 'stonecress'}, {'id': 18222, 'synset': 'garlic_mustard.n.01', 'name': 'garlic_mustard'}, {'id': 18223, 'synset': 'alyssum.n.01', 'name': 'alyssum'}, {'id': 18224, 'synset': 'rose_of_jericho.n.02', 'name': 'rose_of_Jericho'}, {'id': 18225, 'synset': 'arabidopsis_thaliana.n.01', 'name': 'Arabidopsis_thaliana'}, {'id': 18226, 'synset': 'arabidopsis_lyrata.n.01', 'name': 'Arabidopsis_lyrata'}, {'id': 18227, 'synset': 'rock_cress.n.01', 'name': 'rock_cress'}, {'id': 18228, 'synset': 'sicklepod.n.02', 'name': 'sicklepod'}, {'id': 18229, 'synset': 'tower_mustard.n.01', 'name': 'tower_mustard'}, {'id': 18230, 'synset': 'horseradish.n.01', 'name': 'horseradish'}, {'id': 18231, 'synset': 'winter_cress.n.01', 'name': 'winter_cress'}, {'id': 18232, 'synset': 'yellow_rocket.n.01', 'name': 'yellow_rocket'}, {'id': 18233, 'synset': 'hoary_alison.n.01', 'name': 'hoary_alison'}, {'id': 18234, 'synset': 'buckler_mustard.n.01', 'name': 'buckler_mustard'}, {'id': 18235, 'synset': 'wild_cabbage.n.01', 'name': 'wild_cabbage'}, {'id': 18236, 'synset': 'cabbage.n.03', 'name': 'cabbage'}, {'id': 18237, 'synset': 'head_cabbage.n.01', 'name': 'head_cabbage'}, {'id': 18238, 'synset': 'savoy_cabbage.n.01', 'name': 'savoy_cabbage'}, {'id': 18239, 'synset': 'brussels_sprout.n.01', 'name': 'brussels_sprout'}, {'id': 18240, 'synset': 'cauliflower.n.01', 'name': 'cauliflower'}, {'id': 18241, 'synset': 'collard.n.01', 'name': 'collard'}, {'id': 18242, 'synset': 'kohlrabi.n.01', 'name': 'kohlrabi'}, {'id': 18243, 'synset': 'turnip_plant.n.01', 'name': 'turnip_plant'}, {'id': 18244, 'synset': 'rutabaga.n.02', 'name': 'rutabaga'}, {'id': 18245, 'synset': 'broccoli_raab.n.01', 'name': 'broccoli_raab'}, {'id': 18246, 'synset': 'mustard.n.01', 'name': 'mustard'}, {'id': 18247, 'synset': 'chinese_mustard.n.01', 'name': 'chinese_mustard'}, {'id': 18248, 'synset': 'bok_choy.n.01', 'name': 'bok_choy'}, {'id': 18249, 'synset': 'rape.n.01', 'name': 'rape'}, {'id': 18250, 'synset': 'rapeseed.n.01', 'name': 'rapeseed'}, {'id': 18251, 'synset': "shepherd's_purse.n.01", 'name': "shepherd's_purse"}, {'id': 18252, 'synset': "lady's_smock.n.01", 'name': "lady's_smock"}, {'id': 18253, 'synset': 'coral-root_bittercress.n.01', 'name': 'coral-root_bittercress'}, {'id': 18254, 'synset': 'crinkleroot.n.01', 'name': 'crinkleroot'}, {'id': 18255, 'synset': 'american_watercress.n.01', 'name': 'American_watercress'}, {'id': 18256, 'synset': 'spring_cress.n.01', 'name': 'spring_cress'}, {'id': 18257, 'synset': 'purple_cress.n.01', 'name': 'purple_cress'}, {'id': 18258, 'synset': 'wallflower.n.02', 'name': 'wallflower'}, {'id': 18259, 'synset': 'prairie_rocket.n.02', 'name': 'prairie_rocket'}, {'id': 18260, 'synset': 'scurvy_grass.n.01', 'name': 'scurvy_grass'}, {'id': 18261, 'synset': 'sea_kale.n.01', 'name': 'sea_kale'}, {'id': 18262, 'synset': 'tansy_mustard.n.01', 'name': 'tansy_mustard'}, {'id': 18263, 'synset': 'draba.n.01', 'name': 'draba'}, {'id': 18264, 'synset': 'wallflower.n.01', 'name': 'wallflower'}, {'id': 18265, 'synset': 'prairie_rocket.n.01', 'name': 'prairie_rocket'}, {'id': 18266, 'synset': 'siberian_wall_flower.n.01', 'name': 'Siberian_wall_flower'}, {'id': 18267, 'synset': 'western_wall_flower.n.01', 'name': 'western_wall_flower'}, {'id': 18268, 'synset': 'wormseed_mustard.n.01', 'name': 'wormseed_mustard'}, {'id': 18269, 'synset': 'heliophila.n.01', 'name': 'heliophila'}, {'id': 18270, 'synset': 'damask_violet.n.01', 'name': 'damask_violet'}, {'id': 18271, 'synset': 'tansy-leaved_rocket.n.01', 'name': 'tansy-leaved_rocket'}, {'id': 18272, 'synset': 'candytuft.n.01', 'name': 'candytuft'}, {'id': 18273, 'synset': 'woad.n.02', 'name': 'woad'}, {'id': 18274, 'synset': "dyer's_woad.n.01", 'name': "dyer's_woad"}, {'id': 18275, 'synset': 'bladderpod.n.04', 'name': 'bladderpod'}, {'id': 18276, 'synset': 'sweet_alyssum.n.01', 'name': 'sweet_alyssum'}, {'id': 18277, 'synset': 'malcolm_stock.n.01', 'name': 'Malcolm_stock'}, {'id': 18278, 'synset': 'virginian_stock.n.01', 'name': 'Virginian_stock'}, {'id': 18279, 'synset': 'stock.n.12', 'name': 'stock'}, {'id': 18280, 'synset': 'brompton_stock.n.01', 'name': 'brompton_stock'}, {'id': 18281, 'synset': 'bladderpod.n.03', 'name': 'bladderpod'}, {'id': 18282, 'synset': 'chamois_cress.n.01', 'name': 'chamois_cress'}, {'id': 18283, 'synset': 'radish_plant.n.01', 'name': 'radish_plant'}, {'id': 18284, 'synset': 'jointed_charlock.n.01', 'name': 'jointed_charlock'}, {'id': 18285, 'synset': 'radish.n.04', 'name': 'radish'}, {'id': 18286, 'synset': 'radish.n.02', 'name': 'radish'}, {'id': 18287, 'synset': 'marsh_cress.n.01', 'name': 'marsh_cress'}, {'id': 18288, 'synset': 'great_yellowcress.n.01', 'name': 'great_yellowcress'}, {'id': 18289, 'synset': 'schizopetalon.n.01', 'name': 'schizopetalon'}, {'id': 18290, 'synset': 'field_mustard.n.01', 'name': 'field_mustard'}, {'id': 18291, 'synset': 'hedge_mustard.n.01', 'name': 'hedge_mustard'}, {'id': 18292, 'synset': 'desert_plume.n.01', 'name': 'desert_plume'}, {'id': 18293, 'synset': 'pennycress.n.01', 'name': 'pennycress'}, {'id': 18294, 'synset': 'field_pennycress.n.01', 'name': 'field_pennycress'}, {'id': 18295, 'synset': 'fringepod.n.01', 'name': 'fringepod'}, {'id': 18296, 'synset': 'bladderpod.n.02', 'name': 'bladderpod'}, {'id': 18297, 'synset': 'wasabi.n.01', 'name': 'wasabi'}, {'id': 18298, 'synset': 'poppy.n.01', 'name': 'poppy'}, {'id': 18299, 'synset': 'iceland_poppy.n.02', 'name': 'Iceland_poppy'}, {'id': 18300, 'synset': 'western_poppy.n.01', 'name': 'western_poppy'}, {'id': 18301, 'synset': 'prickly_poppy.n.02', 'name': 'prickly_poppy'}, {'id': 18302, 'synset': 'iceland_poppy.n.01', 'name': 'Iceland_poppy'}, {'id': 18303, 'synset': 'oriental_poppy.n.01', 'name': 'oriental_poppy'}, {'id': 18304, 'synset': 'corn_poppy.n.01', 'name': 'corn_poppy'}, {'id': 18305, 'synset': 'opium_poppy.n.01', 'name': 'opium_poppy'}, {'id': 18306, 'synset': 'prickly_poppy.n.01', 'name': 'prickly_poppy'}, {'id': 18307, 'synset': 'mexican_poppy.n.01', 'name': 'Mexican_poppy'}, {'id': 18308, 'synset': 'bocconia.n.02', 'name': 'bocconia'}, {'id': 18309, 'synset': 'celandine.n.02', 'name': 'celandine'}, {'id': 18310, 'synset': 'corydalis.n.01', 'name': 'corydalis'}, {'id': 18311, 'synset': 'climbing_corydalis.n.01', 'name': 'climbing_corydalis'}, {'id': 18312, 'synset': 'california_poppy.n.01', 'name': 'California_poppy'}, {'id': 18313, 'synset': 'horn_poppy.n.01', 'name': 'horn_poppy'}, {'id': 18314, 'synset': 'golden_cup.n.01', 'name': 'golden_cup'}, {'id': 18315, 'synset': 'plume_poppy.n.01', 'name': 'plume_poppy'}, {'id': 18316, 'synset': 'blue_poppy.n.01', 'name': 'blue_poppy'}, {'id': 18317, 'synset': 'welsh_poppy.n.01', 'name': 'Welsh_poppy'}, {'id': 18318, 'synset': 'creamcups.n.01', 'name': 'creamcups'}, {'id': 18319, 'synset': 'matilija_poppy.n.01', 'name': 'matilija_poppy'}, {'id': 18320, 'synset': 'wind_poppy.n.01', 'name': 'wind_poppy'}, {'id': 18321, 'synset': 'celandine_poppy.n.01', 'name': 'celandine_poppy'}, {'id': 18322, 'synset': 'climbing_fumitory.n.01', 'name': 'climbing_fumitory'}, {'id': 18323, 'synset': 'bleeding_heart.n.01', 'name': 'bleeding_heart'}, {'id': 18324, 'synset': "dutchman's_breeches.n.01", 'name': "Dutchman's_breeches"}, {'id': 18325, 'synset': 'squirrel_corn.n.01', 'name': 'squirrel_corn'}, {'id': 18326, 'synset': 'composite.n.02', 'name': 'composite'}, {'id': 18327, 'synset': 'compass_plant.n.02', 'name': 'compass_plant'}, {'id': 18328, 'synset': 'everlasting.n.01', 'name': 'everlasting'}, {'id': 18329, 'synset': 'achillea.n.01', 'name': 'achillea'}, {'id': 18330, 'synset': 'yarrow.n.01', 'name': 'yarrow'}, {'id': 18331, 'synset': 'pink-and-white_everlasting.n.01', 'name': 'pink-and-white_everlasting'}, {'id': 18332, 'synset': 'white_snakeroot.n.01', 'name': 'white_snakeroot'}, {'id': 18333, 'synset': 'ageratum.n.02', 'name': 'ageratum'}, {'id': 18334, 'synset': 'common_ageratum.n.01', 'name': 'common_ageratum'}, {'id': 18335, 'synset': 'sweet_sultan.n.03', 'name': 'sweet_sultan'}, {'id': 18336, 'synset': 'ragweed.n.02', 'name': 'ragweed'}, {'id': 18337, 'synset': 'common_ragweed.n.01', 'name': 'common_ragweed'}, {'id': 18338, 'synset': 'great_ragweed.n.01', 'name': 'great_ragweed'}, {'id': 18339, 'synset': 'western_ragweed.n.01', 'name': 'western_ragweed'}, {'id': 18340, 'synset': 'ammobium.n.01', 'name': 'ammobium'}, {'id': 18341, 'synset': 'winged_everlasting.n.01', 'name': 'winged_everlasting'}, {'id': 18342, 'synset': 'pellitory.n.02', 'name': 'pellitory'}, {'id': 18343, 'synset': 'pearly_everlasting.n.01', 'name': 'pearly_everlasting'}, {'id': 18344, 'synset': 'andryala.n.01', 'name': 'andryala'}, {'id': 18345, 'synset': 'plantain-leaved_pussytoes.n.01', 'name': 'plantain-leaved_pussytoes'}, {'id': 18346, 'synset': 'field_pussytoes.n.01', 'name': 'field_pussytoes'}, {'id': 18347, 'synset': 'solitary_pussytoes.n.01', 'name': 'solitary_pussytoes'}, {'id': 18348, 'synset': 'mountain_everlasting.n.01', 'name': 'mountain_everlasting'}, {'id': 18349, 'synset': 'mayweed.n.01', 'name': 'mayweed'}, {'id': 18350, 'synset': 'yellow_chamomile.n.01', 'name': 'yellow_chamomile'}, {'id': 18351, 'synset': 'corn_chamomile.n.01', 'name': 'corn_chamomile'}, {'id': 18352, 'synset': 'woolly_daisy.n.01', 'name': 'woolly_daisy'}, {'id': 18353, 'synset': 'burdock.n.01', 'name': 'burdock'}, {'id': 18354, 'synset': 'great_burdock.n.01', 'name': 'great_burdock'}, {'id': 18355, 'synset': 'african_daisy.n.03', 'name': 'African_daisy'}, {'id': 18356, 'synset': 'blue-eyed_african_daisy.n.01', 'name': 'blue-eyed_African_daisy'}, {'id': 18357, 'synset': 'marguerite.n.02', 'name': 'marguerite'}, {'id': 18358, 'synset': 'silversword.n.01', 'name': 'silversword'}, {'id': 18359, 'synset': 'arnica.n.02', 'name': 'arnica'}, {'id': 18360, 'synset': 'heartleaf_arnica.n.01', 'name': 'heartleaf_arnica'}, {'id': 18361, 'synset': 'arnica_montana.n.01', 'name': 'Arnica_montana'}, {'id': 18362, 'synset': 'lamb_succory.n.01', 'name': 'lamb_succory'}, {'id': 18363, 'synset': 'artemisia.n.01', 'name': 'artemisia'}, {'id': 18364, 'synset': 'mugwort.n.01', 'name': 'mugwort'}, {'id': 18365, 'synset': 'sweet_wormwood.n.01', 'name': 'sweet_wormwood'}, {'id': 18366, 'synset': 'field_wormwood.n.01', 'name': 'field_wormwood'}, {'id': 18367, 'synset': 'tarragon.n.01', 'name': 'tarragon'}, {'id': 18368, 'synset': 'sand_sage.n.01', 'name': 'sand_sage'}, {'id': 18369, 'synset': 'wormwood_sage.n.01', 'name': 'wormwood_sage'}, {'id': 18370, 'synset': 'western_mugwort.n.01', 'name': 'western_mugwort'}, {'id': 18371, 'synset': 'roman_wormwood.n.01', 'name': 'Roman_wormwood'}, {'id': 18372, 'synset': 'bud_brush.n.01', 'name': 'bud_brush'}, {'id': 18373, 'synset': 'common_mugwort.n.01', 'name': 'common_mugwort'}, {'id': 18374, 'synset': 'aster.n.01', 'name': 'aster'}, {'id': 18375, 'synset': 'wood_aster.n.01', 'name': 'wood_aster'}, {'id': 18376, 'synset': 'whorled_aster.n.01', 'name': 'whorled_aster'}, {'id': 18377, 'synset': 'heath_aster.n.02', 'name': 'heath_aster'}, {'id': 18378, 'synset': 'heart-leaved_aster.n.01', 'name': 'heart-leaved_aster'}, {'id': 18379, 'synset': 'white_wood_aster.n.01', 'name': 'white_wood_aster'}, {'id': 18380, 'synset': 'bushy_aster.n.01', 'name': 'bushy_aster'}, {'id': 18381, 'synset': 'heath_aster.n.01', 'name': 'heath_aster'}, {'id': 18382, 'synset': 'white_prairie_aster.n.01', 'name': 'white_prairie_aster'}, {'id': 18383, 'synset': 'stiff_aster.n.01', 'name': 'stiff_aster'}, {'id': 18384, 'synset': 'goldilocks.n.01', 'name': 'goldilocks'}, {'id': 18385, 'synset': 'large-leaved_aster.n.01', 'name': 'large-leaved_aster'}, {'id': 18386, 'synset': 'new_england_aster.n.01', 'name': 'New_England_aster'}, {'id': 18387, 'synset': 'michaelmas_daisy.n.01', 'name': 'Michaelmas_daisy'}, {'id': 18388, 'synset': 'upland_white_aster.n.01', 'name': 'upland_white_aster'}, {'id': 18389, 'synset': "short's_aster.n.01", 'name': "Short's_aster"}, {'id': 18390, 'synset': 'sea_aster.n.01', 'name': 'sea_aster'}, {'id': 18391, 'synset': 'prairie_aster.n.01', 'name': 'prairie_aster'}, {'id': 18392, 'synset': 'annual_salt-marsh_aster.n.01', 'name': 'annual_salt-marsh_aster'}, {'id': 18393, 'synset': 'aromatic_aster.n.01', 'name': 'aromatic_aster'}, {'id': 18394, 'synset': 'arrow_leaved_aster.n.01', 'name': 'arrow_leaved_aster'}, {'id': 18395, 'synset': 'azure_aster.n.01', 'name': 'azure_aster'}, {'id': 18396, 'synset': 'bog_aster.n.01', 'name': 'bog_aster'}, {'id': 18397, 'synset': 'crooked-stemmed_aster.n.01', 'name': 'crooked-stemmed_aster'}, {'id': 18398, 'synset': 'eastern_silvery_aster.n.01', 'name': 'Eastern_silvery_aster'}, {'id': 18399, 'synset': 'flat-topped_white_aster.n.01', 'name': 'flat-topped_white_aster'}, {'id': 18400, 'synset': 'late_purple_aster.n.01', 'name': 'late_purple_aster'}, {'id': 18401, 'synset': 'panicled_aster.n.01', 'name': 'panicled_aster'}, {'id': 18402, 'synset': 'perennial_salt_marsh_aster.n.01', 'name': 'perennial_salt_marsh_aster'}, {'id': 18403, 'synset': 'purple-stemmed_aster.n.01', 'name': 'purple-stemmed_aster'}, {'id': 18404, 'synset': 'rough-leaved_aster.n.01', 'name': 'rough-leaved_aster'}, {'id': 18405, 'synset': 'rush_aster.n.01', 'name': 'rush_aster'}, {'id': 18406, 'synset': "schreiber's_aster.n.01", 'name': "Schreiber's_aster"}, {'id': 18407, 'synset': 'small_white_aster.n.01', 'name': 'small_white_aster'}, {'id': 18408, 'synset': 'smooth_aster.n.01', 'name': 'smooth_aster'}, {'id': 18409, 'synset': 'southern_aster.n.01', 'name': 'southern_aster'}, {'id': 18410, 'synset': 'starved_aster.n.01', 'name': 'starved_aster'}, {'id': 18411, 'synset': "tradescant's_aster.n.01", 'name': "tradescant's_aster"}, {'id': 18412, 'synset': 'wavy-leaved_aster.n.01', 'name': 'wavy-leaved_aster'}, {'id': 18413, 'synset': 'western_silvery_aster.n.01', 'name': 'Western_silvery_aster'}, {'id': 18414, 'synset': 'willow_aster.n.01', 'name': 'willow_aster'}, {'id': 18415, 'synset': 'ayapana.n.01', 'name': 'ayapana'}, {'id': 18416, 'synset': 'mule_fat.n.01', 'name': 'mule_fat'}, {'id': 18417, 'synset': 'balsamroot.n.01', 'name': 'balsamroot'}, {'id': 18418, 'synset': 'daisy.n.01', 'name': 'daisy'}, {'id': 18419, 'synset': 'common_daisy.n.01', 'name': 'common_daisy'}, {'id': 18420, 'synset': 'bur_marigold.n.01', 'name': 'bur_marigold'}, {'id': 18421, 'synset': 'spanish_needles.n.02', 'name': 'Spanish_needles'}, {'id': 18422, 'synset': 'tickseed_sunflower.n.01', 'name': 'tickseed_sunflower'}, {'id': 18423, 'synset': 'european_beggar-ticks.n.01', 'name': 'European_beggar-ticks'}, {'id': 18424, 'synset': 'slender_knapweed.n.01', 'name': 'slender_knapweed'}, {'id': 18425, 'synset': 'false_chamomile.n.01', 'name': 'false_chamomile'}, {'id': 18426, 'synset': 'swan_river_daisy.n.01', 'name': 'Swan_River_daisy'}, {'id': 18427, 'synset': 'woodland_oxeye.n.01', 'name': 'woodland_oxeye'}, {'id': 18428, 'synset': 'indian_plantain.n.01', 'name': 'Indian_plantain'}, {'id': 18429, 'synset': 'calendula.n.01', 'name': 'calendula'}, {'id': 18430, 'synset': 'common_marigold.n.01', 'name': 'common_marigold'}, {'id': 18431, 'synset': 'china_aster.n.01', 'name': 'China_aster'}, {'id': 18432, 'synset': 'thistle.n.01', 'name': 'thistle'}, {'id': 18433, 'synset': 'welted_thistle.n.01', 'name': 'welted_thistle'}, {'id': 18434, 'synset': 'musk_thistle.n.01', 'name': 'musk_thistle'}, {'id': 18435, 'synset': 'carline_thistle.n.01', 'name': 'carline_thistle'}, {'id': 18436, 'synset': 'stemless_carline_thistle.n.01', 'name': 'stemless_carline_thistle'}, {'id': 18437, 'synset': 'common_carline_thistle.n.01', 'name': 'common_carline_thistle'}, {'id': 18438, 'synset': 'safflower.n.01', 'name': 'safflower'}, {'id': 18439, 'synset': 'safflower_seed.n.01', 'name': 'safflower_seed'}, {'id': 18440, 'synset': 'catananche.n.01', 'name': 'catananche'}, {'id': 18441, 'synset': 'blue_succory.n.01', 'name': 'blue_succory'}, {'id': 18442, 'synset': 'centaury.n.02', 'name': 'centaury'}, {'id': 18443, 'synset': 'dusty_miller.n.03', 'name': 'dusty_miller'}, {'id': 18444, 'synset': 'cornflower.n.02', 'name': 'cornflower'}, {'id': 18445, 'synset': 'star-thistle.n.01', 'name': 'star-thistle'}, {'id': 18446, 'synset': 'knapweed.n.01', 'name': 'knapweed'}, {'id': 18447, 'synset': 'sweet_sultan.n.02', 'name': 'sweet_sultan'}, {'id': 18448, 'synset': 'great_knapweed.n.01', 'name': 'great_knapweed'}, {'id': 18449, 'synset': "barnaby's_thistle.n.01", 'name': "Barnaby's_thistle"}, {'id': 18450, 'synset': 'chamomile.n.01', 'name': 'chamomile'}, {'id': 18451, 'synset': 'chaenactis.n.01', 'name': 'chaenactis'}, {'id': 18452, 'synset': 'chrysanthemum.n.02', 'name': 'chrysanthemum'}, {'id': 18453, 'synset': 'corn_marigold.n.01', 'name': 'corn_marigold'}, {'id': 18454, 'synset': 'crown_daisy.n.01', 'name': 'crown_daisy'}, {'id': 18455, 'synset': 'chop-suey_greens.n.01', 'name': 'chop-suey_greens'}, {'id': 18456, 'synset': 'golden_aster.n.01', 'name': 'golden_aster'}, {'id': 18457, 'synset': 'maryland_golden_aster.n.01', 'name': 'Maryland_golden_aster'}, {'id': 18458, 'synset': 'goldenbush.n.02', 'name': 'goldenbush'}, {'id': 18459, 'synset': 'rabbit_brush.n.01', 'name': 'rabbit_brush'}, {'id': 18460, 'synset': 'chicory.n.02', 'name': 'chicory'}, {'id': 18461, 'synset': 'endive.n.01', 'name': 'endive'}, {'id': 18462, 'synset': 'chicory.n.01', 'name': 'chicory'}, {'id': 18463, 'synset': 'plume_thistle.n.01', 'name': 'plume_thistle'}, {'id': 18464, 'synset': 'canada_thistle.n.01', 'name': 'Canada_thistle'}, {'id': 18465, 'synset': 'field_thistle.n.01', 'name': 'field_thistle'}, {'id': 18466, 'synset': 'woolly_thistle.n.02', 'name': 'woolly_thistle'}, {'id': 18467, 'synset': 'european_woolly_thistle.n.01', 'name': 'European_woolly_thistle'}, {'id': 18468, 'synset': 'melancholy_thistle.n.01', 'name': 'melancholy_thistle'}, {'id': 18469, 'synset': 'brook_thistle.n.01', 'name': 'brook_thistle'}, {'id': 18470, 'synset': 'bull_thistle.n.01', 'name': 'bull_thistle'}, {'id': 18471, 'synset': 'blessed_thistle.n.02', 'name': 'blessed_thistle'}, {'id': 18472, 'synset': 'mistflower.n.01', 'name': 'mistflower'}, {'id': 18473, 'synset': 'horseweed.n.02', 'name': 'horseweed'}, {'id': 18474, 'synset': 'coreopsis.n.01', 'name': 'coreopsis'}, {'id': 18475, 'synset': 'giant_coreopsis.n.01', 'name': 'giant_coreopsis'}, {'id': 18476, 'synset': 'sea_dahlia.n.01', 'name': 'sea_dahlia'}, {'id': 18477, 'synset': 'calliopsis.n.01', 'name': 'calliopsis'}, {'id': 18478, 'synset': 'cosmos.n.02', 'name': 'cosmos'}, {'id': 18479, 'synset': 'brass_buttons.n.01', 'name': 'brass_buttons'}, {'id': 18480, 'synset': 'billy_buttons.n.01', 'name': 'billy_buttons'}, {'id': 18481, 'synset': "hawk's-beard.n.01", 'name': "hawk's-beard"}, {'id': 18482, 'synset': 'artichoke.n.01', 'name': 'artichoke'}, {'id': 18483, 'synset': 'cardoon.n.01', 'name': 'cardoon'}, {'id': 18484, 'synset': 'dahlia.n.01', 'name': 'dahlia'}, {'id': 18485, 'synset': 'german_ivy.n.01', 'name': 'German_ivy'}, {'id': 18486, 'synset': "florist's_chrysanthemum.n.01", 'name': "florist's_chrysanthemum"}, {'id': 18487, 'synset': 'cape_marigold.n.01', 'name': 'cape_marigold'}, {'id': 18488, 'synset': "leopard's-bane.n.01", 'name': "leopard's-bane"}, {'id': 18489, 'synset': 'coneflower.n.03', 'name': 'coneflower'}, {'id': 18490, 'synset': 'globe_thistle.n.01', 'name': 'globe_thistle'}, {'id': 18491, 'synset': "elephant's-foot.n.02", 'name': "elephant's-foot"}, {'id': 18492, 'synset': 'tassel_flower.n.01', 'name': 'tassel_flower'}, {'id': 18493, 'synset': 'brittlebush.n.01', 'name': 'brittlebush'}, {'id': 18494, 'synset': 'sunray.n.02', 'name': 'sunray'}, {'id': 18495, 'synset': 'engelmannia.n.01', 'name': 'engelmannia'}, {'id': 18496, 'synset': 'fireweed.n.02', 'name': 'fireweed'}, {'id': 18497, 'synset': 'fleabane.n.02', 'name': 'fleabane'}, {'id': 18498, 'synset': 'blue_fleabane.n.01', 'name': 'blue_fleabane'}, {'id': 18499, 'synset': 'daisy_fleabane.n.01', 'name': 'daisy_fleabane'}, {'id': 18500, 'synset': 'orange_daisy.n.01', 'name': 'orange_daisy'}, {'id': 18501, 'synset': 'spreading_fleabane.n.01', 'name': 'spreading_fleabane'}, {'id': 18502, 'synset': 'seaside_daisy.n.01', 'name': 'seaside_daisy'}, {'id': 18503, 'synset': 'philadelphia_fleabane.n.01', 'name': 'Philadelphia_fleabane'}, {'id': 18504, 'synset': "robin's_plantain.n.01", 'name': "robin's_plantain"}, {'id': 18505, 'synset': 'showy_daisy.n.01', 'name': 'showy_daisy'}, {'id': 18506, 'synset': 'woolly_sunflower.n.01', 'name': 'woolly_sunflower'}, {'id': 18507, 'synset': 'golden_yarrow.n.01', 'name': 'golden_yarrow'}, {'id': 18508, 'synset': 'dog_fennel.n.01', 'name': 'dog_fennel'}, {'id': 18509, 'synset': 'joe-pye_weed.n.02', 'name': 'Joe-Pye_weed'}, {'id': 18510, 'synset': 'boneset.n.02', 'name': 'boneset'}, {'id': 18511, 'synset': 'joe-pye_weed.n.01', 'name': 'Joe-Pye_weed'}, {'id': 18512, 'synset': 'blue_daisy.n.01', 'name': 'blue_daisy'}, {'id': 18513, 'synset': 'kingfisher_daisy.n.01', 'name': 'kingfisher_daisy'}, {'id': 18514, 'synset': 'cotton_rose.n.02', 'name': 'cotton_rose'}, {'id': 18515, 'synset': 'herba_impia.n.01', 'name': 'herba_impia'}, {'id': 18516, 'synset': 'gaillardia.n.01', 'name': 'gaillardia'}, {'id': 18517, 'synset': 'gazania.n.01', 'name': 'gazania'}, {'id': 18518, 'synset': 'treasure_flower.n.01', 'name': 'treasure_flower'}, {'id': 18519, 'synset': 'african_daisy.n.02', 'name': 'African_daisy'}, {'id': 18520, 'synset': 'barberton_daisy.n.01', 'name': 'Barberton_daisy'}, {'id': 18521, 'synset': 'desert_sunflower.n.01', 'name': 'desert_sunflower'}, {'id': 18522, 'synset': 'cudweed.n.01', 'name': 'cudweed'}, {'id': 18523, 'synset': 'chafeweed.n.01', 'name': 'chafeweed'}, {'id': 18524, 'synset': 'gumweed.n.01', 'name': 'gumweed'}, {'id': 18525, 'synset': 'grindelia_robusta.n.01', 'name': 'Grindelia_robusta'}, {'id': 18526, 'synset': 'curlycup_gumweed.n.01', 'name': 'curlycup_gumweed'}, {'id': 18527, 'synset': 'little-head_snakeweed.n.01', 'name': 'little-head_snakeweed'}, {'id': 18528, 'synset': 'rabbitweed.n.01', 'name': 'rabbitweed'}, {'id': 18529, 'synset': 'broomweed.n.01', 'name': 'broomweed'}, {'id': 18530, 'synset': 'velvet_plant.n.02', 'name': 'velvet_plant'}, {'id': 18531, 'synset': 'goldenbush.n.01', 'name': 'goldenbush'}, {'id': 18532, 'synset': 'camphor_daisy.n.01', 'name': 'camphor_daisy'}, {'id': 18533, 'synset': 'yellow_spiny_daisy.n.01', 'name': 'yellow_spiny_daisy'}, {'id': 18534, 'synset': 'hoary_golden_bush.n.01', 'name': 'hoary_golden_bush'}, {'id': 18535, 'synset': 'sneezeweed.n.01', 'name': 'sneezeweed'}, {'id': 18536, 'synset': 'orange_sneezeweed.n.01', 'name': 'orange_sneezeweed'}, {'id': 18537, 'synset': 'rosilla.n.01', 'name': 'rosilla'}, {'id': 18538, 'synset': 'swamp_sunflower.n.01', 'name': 'swamp_sunflower'}, {'id': 18539, 'synset': 'common_sunflower.n.01', 'name': 'common_sunflower'}, {'id': 18540, 'synset': 'giant_sunflower.n.01', 'name': 'giant_sunflower'}, {'id': 18541, 'synset': 'showy_sunflower.n.01', 'name': 'showy_sunflower'}, {'id': 18542, 'synset': "maximilian's_sunflower.n.01", 'name': "Maximilian's_sunflower"}, {'id': 18543, 'synset': 'prairie_sunflower.n.01', 'name': 'prairie_sunflower'}, {'id': 18544, 'synset': 'jerusalem_artichoke.n.02', 'name': 'Jerusalem_artichoke'}, {'id': 18545, 'synset': 'jerusalem_artichoke.n.01', 'name': 'Jerusalem_artichoke'}, {'id': 18546, 'synset': 'strawflower.n.03', 'name': 'strawflower'}, {'id': 18547, 'synset': 'heliopsis.n.01', 'name': 'heliopsis'}, {'id': 18548, 'synset': 'strawflower.n.02', 'name': 'strawflower'}, {'id': 18549, 'synset': 'hairy_golden_aster.n.01', 'name': 'hairy_golden_aster'}, {'id': 18550, 'synset': 'hawkweed.n.02', 'name': 'hawkweed'}, {'id': 18551, 'synset': 'rattlesnake_weed.n.01', 'name': 'rattlesnake_weed'}, {'id': 18552, 'synset': 'alpine_coltsfoot.n.01', 'name': 'alpine_coltsfoot'}, {'id': 18553, 'synset': 'alpine_gold.n.01', 'name': 'alpine_gold'}, {'id': 18554, 'synset': 'dwarf_hulsea.n.01', 'name': 'dwarf_hulsea'}, {'id': 18555, 'synset': "cat's-ear.n.02", 'name': "cat's-ear"}, {'id': 18556, 'synset': 'inula.n.01', 'name': 'inula'}, {'id': 18557, 'synset': 'marsh_elder.n.01', 'name': 'marsh_elder'}, {'id': 18558, 'synset': 'burweed_marsh_elder.n.01', 'name': 'burweed_marsh_elder'}, {'id': 18559, 'synset': 'krigia.n.01', 'name': 'krigia'}, {'id': 18560, 'synset': 'dwarf_dandelion.n.01', 'name': 'dwarf_dandelion'}, {'id': 18561, 'synset': 'garden_lettuce.n.01', 'name': 'garden_lettuce'}, {'id': 18562, 'synset': 'cos_lettuce.n.01', 'name': 'cos_lettuce'}, {'id': 18563, 'synset': 'leaf_lettuce.n.01', 'name': 'leaf_lettuce'}, {'id': 18564, 'synset': 'celtuce.n.01', 'name': 'celtuce'}, {'id': 18565, 'synset': 'prickly_lettuce.n.01', 'name': 'prickly_lettuce'}, {'id': 18566, 'synset': 'goldfields.n.01', 'name': 'goldfields'}, {'id': 18567, 'synset': 'tidytips.n.01', 'name': 'tidytips'}, {'id': 18568, 'synset': 'hawkbit.n.01', 'name': 'hawkbit'}, {'id': 18569, 'synset': 'fall_dandelion.n.01', 'name': 'fall_dandelion'}, {'id': 18570, 'synset': 'edelweiss.n.01', 'name': 'edelweiss'}, {'id': 18571, 'synset': 'oxeye_daisy.n.02', 'name': 'oxeye_daisy'}, {'id': 18572, 'synset': 'oxeye_daisy.n.01', 'name': 'oxeye_daisy'}, {'id': 18573, 'synset': 'shasta_daisy.n.01', 'name': 'shasta_daisy'}, {'id': 18574, 'synset': 'pyrenees_daisy.n.01', 'name': 'Pyrenees_daisy'}, {'id': 18575, 'synset': 'north_island_edelweiss.n.01', 'name': 'north_island_edelweiss'}, {'id': 18576, 'synset': 'blazing_star.n.02', 'name': 'blazing_star'}, {'id': 18577, 'synset': 'dotted_gayfeather.n.01', 'name': 'dotted_gayfeather'}, {'id': 18578, 'synset': 'dense_blazing_star.n.01', 'name': 'dense_blazing_star'}, {'id': 18579, 'synset': 'texas_star.n.02', 'name': 'Texas_star'}, {'id': 18580, 'synset': 'african_daisy.n.01', 'name': 'African_daisy'}, {'id': 18581, 'synset': 'tahoka_daisy.n.01', 'name': 'tahoka_daisy'}, {'id': 18582, 'synset': 'sticky_aster.n.01', 'name': 'sticky_aster'}, {'id': 18583, 'synset': 'mojave_aster.n.01', 'name': 'Mojave_aster'}, {'id': 18584, 'synset': 'tarweed.n.01', 'name': 'tarweed'}, {'id': 18585, 'synset': 'sweet_false_chamomile.n.01', 'name': 'sweet_false_chamomile'}, {'id': 18586, 'synset': 'pineapple_weed.n.01', 'name': 'pineapple_weed'}, {'id': 18587, 'synset': 'climbing_hempweed.n.01', 'name': 'climbing_hempweed'}, {'id': 18588, 'synset': 'mutisia.n.01', 'name': 'mutisia'}, {'id': 18589, 'synset': 'rattlesnake_root.n.02', 'name': 'rattlesnake_root'}, {'id': 18590, 'synset': 'white_lettuce.n.01', 'name': 'white_lettuce'}, {'id': 18591, 'synset': 'daisybush.n.01', 'name': 'daisybush'}, {'id': 18592, 'synset': 'new_zealand_daisybush.n.01', 'name': 'New_Zealand_daisybush'}, {'id': 18593, 'synset': 'cotton_thistle.n.01', 'name': 'cotton_thistle'}, {'id': 18594, 'synset': 'othonna.n.01', 'name': 'othonna'}, {'id': 18595, 'synset': 'cascade_everlasting.n.01', 'name': 'cascade_everlasting'}, {'id': 18596, 'synset': 'butterweed.n.02', 'name': 'butterweed'}, {'id': 18597, 'synset': 'american_feverfew.n.01', 'name': 'American_feverfew'}, {'id': 18598, 'synset': 'cineraria.n.01', 'name': 'cineraria'}, {'id': 18599, 'synset': "florest's_cineraria.n.01", 'name': "florest's_cineraria"}, {'id': 18600, 'synset': 'butterbur.n.01', 'name': 'butterbur'}, {'id': 18601, 'synset': 'winter_heliotrope.n.01', 'name': 'winter_heliotrope'}, {'id': 18602, 'synset': 'sweet_coltsfoot.n.01', 'name': 'sweet_coltsfoot'}, {'id': 18603, 'synset': 'oxtongue.n.01', 'name': 'oxtongue'}, {'id': 18604, 'synset': 'hawkweed.n.01', 'name': 'hawkweed'}, {'id': 18605, 'synset': 'mouse-ear_hawkweed.n.01', 'name': 'mouse-ear_hawkweed'}, {'id': 18606, 'synset': 'stevia.n.02', 'name': 'stevia'}, {'id': 18607, 'synset': 'rattlesnake_root.n.01', 'name': 'rattlesnake_root'}, {'id': 18608, 'synset': 'fleabane.n.01', 'name': 'fleabane'}, {'id': 18609, 'synset': 'sheep_plant.n.01', 'name': 'sheep_plant'}, {'id': 18610, 'synset': 'coneflower.n.02', 'name': 'coneflower'}, {'id': 18611, 'synset': 'mexican_hat.n.01', 'name': 'Mexican_hat'}, {'id': 18612, 'synset': 'long-head_coneflower.n.01', 'name': 'long-head_coneflower'}, {'id': 18613, 'synset': 'prairie_coneflower.n.01', 'name': 'prairie_coneflower'}, {'id': 18614, 'synset': 'swan_river_everlasting.n.01', 'name': 'Swan_River_everlasting'}, {'id': 18615, 'synset': 'coneflower.n.01', 'name': 'coneflower'}, {'id': 18616, 'synset': 'black-eyed_susan.n.03', 'name': 'black-eyed_Susan'}, {'id': 18617, 'synset': 'cutleaved_coneflower.n.01', 'name': 'cutleaved_coneflower'}, {'id': 18618, 'synset': 'golden_glow.n.01', 'name': 'golden_glow'}, {'id': 18619, 'synset': 'lavender_cotton.n.01', 'name': 'lavender_cotton'}, {'id': 18620, 'synset': 'creeping_zinnia.n.01', 'name': 'creeping_zinnia'}, {'id': 18621, 'synset': 'golden_thistle.n.01', 'name': 'golden_thistle'}, {'id': 18622, 'synset': 'spanish_oyster_plant.n.01', 'name': 'Spanish_oyster_plant'}, {'id': 18623, 'synset': 'nodding_groundsel.n.01', 'name': 'nodding_groundsel'}, {'id': 18624, 'synset': 'dusty_miller.n.02', 'name': 'dusty_miller'}, {'id': 18625, 'synset': 'butterweed.n.01', 'name': 'butterweed'}, {'id': 18626, 'synset': 'ragwort.n.01', 'name': 'ragwort'}, {'id': 18627, 'synset': 'arrowleaf_groundsel.n.01', 'name': 'arrowleaf_groundsel'}, {'id': 18628, 'synset': 'black_salsify.n.01', 'name': 'black_salsify'}, {'id': 18629, 'synset': 'white-topped_aster.n.01', 'name': 'white-topped_aster'}, {'id': 18630, 'synset': 'narrow-leaved_white-topped_aster.n.01', 'name': 'narrow-leaved_white-topped_aster'}, {'id': 18631, 'synset': 'silver_sage.n.01', 'name': 'silver_sage'}, {'id': 18632, 'synset': 'sea_wormwood.n.01', 'name': 'sea_wormwood'}, {'id': 18633, 'synset': 'sawwort.n.01', 'name': 'sawwort'}, {'id': 18634, 'synset': 'rosinweed.n.01', 'name': 'rosinweed'}, {'id': 18635, 'synset': 'milk_thistle.n.02', 'name': 'milk_thistle'}, {'id': 18636, 'synset': 'goldenrod.n.01', 'name': 'goldenrod'}, {'id': 18637, 'synset': 'silverrod.n.01', 'name': 'silverrod'}, {'id': 18638, 'synset': 'meadow_goldenrod.n.01', 'name': 'meadow_goldenrod'}, {'id': 18639, 'synset': 'missouri_goldenrod.n.01', 'name': 'Missouri_goldenrod'}, {'id': 18640, 'synset': 'alpine_goldenrod.n.01', 'name': 'alpine_goldenrod'}, {'id': 18641, 'synset': 'grey_goldenrod.n.01', 'name': 'grey_goldenrod'}, {'id': 18642, 'synset': 'blue_mountain_tea.n.01', 'name': 'Blue_Mountain_tea'}, {'id': 18643, 'synset': "dyer's_weed.n.01", 'name': "dyer's_weed"}, {'id': 18644, 'synset': 'seaside_goldenrod.n.01', 'name': 'seaside_goldenrod'}, {'id': 18645, 'synset': 'narrow_goldenrod.n.01', 'name': 'narrow_goldenrod'}, {'id': 18646, 'synset': "boott's_goldenrod.n.01", 'name': "Boott's_goldenrod"}, {'id': 18647, 'synset': "elliott's_goldenrod.n.01", 'name': "Elliott's_goldenrod"}, {'id': 18648, 'synset': 'ohio_goldenrod.n.01', 'name': 'Ohio_goldenrod'}, {'id': 18649, 'synset': 'rough-stemmed_goldenrod.n.01', 'name': 'rough-stemmed_goldenrod'}, {'id': 18650, 'synset': 'showy_goldenrod.n.01', 'name': 'showy_goldenrod'}, {'id': 18651, 'synset': 'tall_goldenrod.n.01', 'name': 'tall_goldenrod'}, {'id': 18652, 'synset': 'zigzag_goldenrod.n.01', 'name': 'zigzag_goldenrod'}, {'id': 18653, 'synset': 'sow_thistle.n.01', 'name': 'sow_thistle'}, {'id': 18654, 'synset': 'milkweed.n.02', 'name': 'milkweed'}, {'id': 18655, 'synset': 'stevia.n.01', 'name': 'stevia'}, {'id': 18656, 'synset': "stokes'_aster.n.01", 'name': "stokes'_aster"}, {'id': 18657, 'synset': 'marigold.n.01', 'name': 'marigold'}, {'id': 18658, 'synset': 'african_marigold.n.01', 'name': 'African_marigold'}, {'id': 18659, 'synset': 'french_marigold.n.01', 'name': 'French_marigold'}, {'id': 18660, 'synset': 'painted_daisy.n.01', 'name': 'painted_daisy'}, {'id': 18661, 'synset': 'pyrethrum.n.02', 'name': 'pyrethrum'}, {'id': 18662, 'synset': 'northern_dune_tansy.n.01', 'name': 'northern_dune_tansy'}, {'id': 18663, 'synset': 'feverfew.n.01', 'name': 'feverfew'}, {'id': 18664, 'synset': 'dusty_miller.n.01', 'name': 'dusty_miller'}, {'id': 18665, 'synset': 'tansy.n.01', 'name': 'tansy'}, {'id': 18666, 'synset': 'dandelion.n.01', 'name': 'dandelion'}, {'id': 18667, 'synset': 'common_dandelion.n.01', 'name': 'common_dandelion'}, {'id': 18668, 'synset': 'dandelion_green.n.01', 'name': 'dandelion_green'}, {'id': 18669, 'synset': 'russian_dandelion.n.01', 'name': 'Russian_dandelion'}, {'id': 18670, 'synset': 'stemless_hymenoxys.n.01', 'name': 'stemless_hymenoxys'}, {'id': 18671, 'synset': 'mexican_sunflower.n.01', 'name': 'Mexican_sunflower'}, {'id': 18672, 'synset': 'easter_daisy.n.01', 'name': 'Easter_daisy'}, {'id': 18673, 'synset': 'yellow_salsify.n.01', 'name': 'yellow_salsify'}, {'id': 18674, 'synset': 'salsify.n.02', 'name': 'salsify'}, {'id': 18675, 'synset': 'meadow_salsify.n.01', 'name': 'meadow_salsify'}, {'id': 18676, 'synset': 'scentless_camomile.n.01', 'name': 'scentless_camomile'}, {'id': 18677, 'synset': 'turfing_daisy.n.01', 'name': 'turfing_daisy'}, {'id': 18678, 'synset': 'coltsfoot.n.02', 'name': 'coltsfoot'}, {'id': 18679, 'synset': 'ursinia.n.01', 'name': 'ursinia'}, {'id': 18680, 'synset': 'crownbeard.n.01', 'name': 'crownbeard'}, {'id': 18681, 'synset': 'wingstem.n.01', 'name': 'wingstem'}, {'id': 18682, 'synset': 'cowpen_daisy.n.01', 'name': 'cowpen_daisy'}, {'id': 18683, 'synset': 'gravelweed.n.01', 'name': 'gravelweed'}, {'id': 18684, 'synset': 'virginia_crownbeard.n.01', 'name': 'Virginia_crownbeard'}, {'id': 18685, 'synset': 'ironweed.n.01', 'name': 'ironweed'}, {'id': 18686, 'synset': "mule's_ears.n.01", 'name': "mule's_ears"}, {'id': 18687, 'synset': "white-rayed_mule's_ears.n.01", 'name': "white-rayed_mule's_ears"}, {'id': 18688, 'synset': 'cocklebur.n.01', 'name': 'cocklebur'}, {'id': 18689, 'synset': 'xeranthemum.n.01', 'name': 'xeranthemum'}, {'id': 18690, 'synset': 'immortelle.n.01', 'name': 'immortelle'}, {'id': 18691, 'synset': 'zinnia.n.01', 'name': 'zinnia'}, {'id': 18692, 'synset': 'white_zinnia.n.01', 'name': 'white_zinnia'}, {'id': 18693, 'synset': 'little_golden_zinnia.n.01', 'name': 'little_golden_zinnia'}, {'id': 18694, 'synset': 'blazing_star.n.01', 'name': 'blazing_star'}, {'id': 18695, 'synset': 'bartonia.n.01', 'name': 'bartonia'}, {'id': 18696, 'synset': 'achene.n.01', 'name': 'achene'}, {'id': 18697, 'synset': 'samara.n.01', 'name': 'samara'}, {'id': 18698, 'synset': 'campanula.n.01', 'name': 'campanula'}, {'id': 18699, 'synset': 'creeping_bellflower.n.01', 'name': 'creeping_bellflower'}, {'id': 18700, 'synset': 'canterbury_bell.n.02', 'name': 'Canterbury_bell'}, {'id': 18701, 'synset': 'tall_bellflower.n.01', 'name': 'tall_bellflower'}, {'id': 18702, 'synset': 'marsh_bellflower.n.01', 'name': 'marsh_bellflower'}, {'id': 18703, 'synset': 'clustered_bellflower.n.01', 'name': 'clustered_bellflower'}, {'id': 18704, 'synset': 'peach_bells.n.01', 'name': 'peach_bells'}, {'id': 18705, 'synset': 'chimney_plant.n.01', 'name': 'chimney_plant'}, {'id': 18706, 'synset': 'rampion.n.01', 'name': 'rampion'}, {'id': 18707, 'synset': 'tussock_bellflower.n.01', 'name': 'tussock_bellflower'}, {'id': 18708, 'synset': 'orchid.n.01', 'name': 'orchid'}, {'id': 18709, 'synset': 'orchis.n.01', 'name': 'orchis'}, {'id': 18710, 'synset': 'male_orchis.n.01', 'name': 'male_orchis'}, {'id': 18711, 'synset': 'butterfly_orchid.n.05', 'name': 'butterfly_orchid'}, {'id': 18712, 'synset': 'showy_orchis.n.01', 'name': 'showy_orchis'}, {'id': 18713, 'synset': 'aerides.n.01', 'name': 'aerides'}, {'id': 18714, 'synset': 'angrecum.n.01', 'name': 'angrecum'}, {'id': 18715, 'synset': 'jewel_orchid.n.01', 'name': 'jewel_orchid'}, {'id': 18716, 'synset': 'puttyroot.n.01', 'name': 'puttyroot'}, {'id': 18717, 'synset': 'arethusa.n.01', 'name': 'arethusa'}, {'id': 18718, 'synset': 'bog_rose.n.01', 'name': 'bog_rose'}, {'id': 18719, 'synset': 'bletia.n.01', 'name': 'bletia'}, {'id': 18720, 'synset': 'bletilla_striata.n.01', 'name': 'Bletilla_striata'}, {'id': 18721, 'synset': 'brassavola.n.01', 'name': 'brassavola'}, {'id': 18722, 'synset': 'spider_orchid.n.03', 'name': 'spider_orchid'}, {'id': 18723, 'synset': 'spider_orchid.n.02', 'name': 'spider_orchid'}, {'id': 18724, 'synset': 'caladenia.n.01', 'name': 'caladenia'}, {'id': 18725, 'synset': 'calanthe.n.01', 'name': 'calanthe'}, {'id': 18726, 'synset': 'grass_pink.n.01', 'name': 'grass_pink'}, {'id': 18727, 'synset': 'calypso.n.01', 'name': 'calypso'}, {'id': 18728, 'synset': 'cattleya.n.01', 'name': 'cattleya'}, {'id': 18729, 'synset': 'helleborine.n.03', 'name': 'helleborine'}, {'id': 18730, 'synset': 'red_helleborine.n.01', 'name': 'red_helleborine'}, {'id': 18731, 'synset': 'spreading_pogonia.n.01', 'name': 'spreading_pogonia'}, {'id': 18732, 'synset': 'rosebud_orchid.n.01', 'name': 'rosebud_orchid'}, {'id': 18733, 'synset': 'satyr_orchid.n.01', 'name': 'satyr_orchid'}, {'id': 18734, 'synset': 'frog_orchid.n.02', 'name': 'frog_orchid'}, {'id': 18735, 'synset': 'coelogyne.n.01', 'name': 'coelogyne'}, {'id': 18736, 'synset': 'coral_root.n.01', 'name': 'coral_root'}, {'id': 18737, 'synset': 'spotted_coral_root.n.01', 'name': 'spotted_coral_root'}, {'id': 18738, 'synset': 'striped_coral_root.n.01', 'name': 'striped_coral_root'}, {'id': 18739, 'synset': 'early_coral_root.n.01', 'name': 'early_coral_root'}, {'id': 18740, 'synset': 'swan_orchid.n.01', 'name': 'swan_orchid'}, {'id': 18741, 'synset': 'cymbid.n.01', 'name': 'cymbid'}, {'id': 18742, 'synset': 'cypripedia.n.01', 'name': 'cypripedia'}, {'id': 18743, 'synset': "lady's_slipper.n.01", 'name': "lady's_slipper"}, {'id': 18744, 'synset': 'moccasin_flower.n.01', 'name': 'moccasin_flower'}, {'id': 18745, 'synset': "common_lady's-slipper.n.01", 'name': "common_lady's-slipper"}, {'id': 18746, 'synset': "ram's-head.n.01", 'name': "ram's-head"}, {'id': 18747, 'synset': "yellow_lady's_slipper.n.01", 'name': "yellow_lady's_slipper"}, {'id': 18748, 'synset': "large_yellow_lady's_slipper.n.01", 'name': "large_yellow_lady's_slipper"}, {'id': 18749, 'synset': "california_lady's_slipper.n.01", 'name': "California_lady's_slipper"}, {'id': 18750, 'synset': "clustered_lady's_slipper.n.01", 'name': "clustered_lady's_slipper"}, {'id': 18751, 'synset': "mountain_lady's_slipper.n.01", 'name': "mountain_lady's_slipper"}, {'id': 18752, 'synset': 'marsh_orchid.n.01', 'name': 'marsh_orchid'}, {'id': 18753, 'synset': 'common_spotted_orchid.n.01', 'name': 'common_spotted_orchid'}, {'id': 18754, 'synset': 'dendrobium.n.01', 'name': 'dendrobium'}, {'id': 18755, 'synset': 'disa.n.01', 'name': 'disa'}, {'id': 18756, 'synset': 'phantom_orchid.n.01', 'name': 'phantom_orchid'}, {'id': 18757, 'synset': 'tulip_orchid.n.01', 'name': 'tulip_orchid'}, {'id': 18758, 'synset': 'butterfly_orchid.n.04', 'name': 'butterfly_orchid'}, {'id': 18759, 'synset': 'butterfly_orchid.n.03', 'name': 'butterfly_orchid'}, {'id': 18760, 'synset': 'epidendron.n.01', 'name': 'epidendron'}, {'id': 18761, 'synset': 'helleborine.n.02', 'name': 'helleborine'}, {'id': 18762, 'synset': 'epipactis_helleborine.n.01', 'name': 'Epipactis_helleborine'}, {'id': 18763, 'synset': 'stream_orchid.n.01', 'name': 'stream_orchid'}, {'id': 18764, 'synset': 'tongueflower.n.01', 'name': 'tongueflower'}, {'id': 18765, 'synset': 'rattlesnake_plantain.n.01', 'name': 'rattlesnake_plantain'}, {'id': 18766, 'synset': 'fragrant_orchid.n.01', 'name': 'fragrant_orchid'}, {'id': 18767, 'synset': 'short-spurred_fragrant_orchid.n.01', 'name': 'short-spurred_fragrant_orchid'}, {'id': 18768, 'synset': 'fringed_orchis.n.01', 'name': 'fringed_orchis'}, {'id': 18769, 'synset': 'frog_orchid.n.01', 'name': 'frog_orchid'}, {'id': 18770, 'synset': 'rein_orchid.n.01', 'name': 'rein_orchid'}, {'id': 18771, 'synset': 'bog_rein_orchid.n.01', 'name': 'bog_rein_orchid'}, {'id': 18772, 'synset': 'white_fringed_orchis.n.01', 'name': 'white_fringed_orchis'}, {'id': 18773, 'synset': 'elegant_habenaria.n.01', 'name': 'elegant_Habenaria'}, {'id': 18774, 'synset': 'purple-fringed_orchid.n.02', 'name': 'purple-fringed_orchid'}, {'id': 18775, 'synset': 'coastal_rein_orchid.n.01', 'name': 'coastal_rein_orchid'}, {'id': 18776, 'synset': "hooker's_orchid.n.01", 'name': "Hooker's_orchid"}, {'id': 18777, 'synset': 'ragged_orchid.n.01', 'name': 'ragged_orchid'}, {'id': 18778, 'synset': 'prairie_orchid.n.01', 'name': 'prairie_orchid'}, {'id': 18779, 'synset': 'snowy_orchid.n.01', 'name': 'snowy_orchid'}, {'id': 18780, 'synset': 'round-leaved_rein_orchid.n.01', 'name': 'round-leaved_rein_orchid'}, {'id': 18781, 'synset': 'purple_fringeless_orchid.n.01', 'name': 'purple_fringeless_orchid'}, {'id': 18782, 'synset': 'purple-fringed_orchid.n.01', 'name': 'purple-fringed_orchid'}, {'id': 18783, 'synset': 'alaska_rein_orchid.n.01', 'name': 'Alaska_rein_orchid'}, {'id': 18784, 'synset': 'crested_coral_root.n.01', 'name': 'crested_coral_root'}, {'id': 18785, 'synset': 'texas_purple_spike.n.01', 'name': 'Texas_purple_spike'}, {'id': 18786, 'synset': 'lizard_orchid.n.01', 'name': 'lizard_orchid'}, {'id': 18787, 'synset': 'laelia.n.01', 'name': 'laelia'}, {'id': 18788, 'synset': 'liparis.n.01', 'name': 'liparis'}, {'id': 18789, 'synset': 'twayblade.n.02', 'name': 'twayblade'}, {'id': 18790, 'synset': 'fen_orchid.n.01', 'name': 'fen_orchid'}, {'id': 18791, 'synset': 'broad-leaved_twayblade.n.01', 'name': 'broad-leaved_twayblade'}, {'id': 18792, 'synset': 'lesser_twayblade.n.01', 'name': 'lesser_twayblade'}, {'id': 18793, 'synset': 'twayblade.n.01', 'name': 'twayblade'}, {'id': 18794, 'synset': "green_adder's_mouth.n.01", 'name': "green_adder's_mouth"}, {'id': 18795, 'synset': 'masdevallia.n.01', 'name': 'masdevallia'}, {'id': 18796, 'synset': 'maxillaria.n.01', 'name': 'maxillaria'}, {'id': 18797, 'synset': 'pansy_orchid.n.01', 'name': 'pansy_orchid'}, {'id': 18798, 'synset': 'odontoglossum.n.01', 'name': 'odontoglossum'}, {'id': 18799, 'synset': 'oncidium.n.01', 'name': 'oncidium'}, {'id': 18800, 'synset': 'bee_orchid.n.01', 'name': 'bee_orchid'}, {'id': 18801, 'synset': 'fly_orchid.n.02', 'name': 'fly_orchid'}, {'id': 18802, 'synset': 'spider_orchid.n.01', 'name': 'spider_orchid'}, {'id': 18803, 'synset': 'early_spider_orchid.n.01', 'name': 'early_spider_orchid'}, {'id': 18804, 'synset': "venus'_slipper.n.01", 'name': "Venus'_slipper"}, {'id': 18805, 'synset': 'phaius.n.01', 'name': 'phaius'}, {'id': 18806, 'synset': 'moth_orchid.n.01', 'name': 'moth_orchid'}, {'id': 18807, 'synset': 'butterfly_plant.n.01', 'name': 'butterfly_plant'}, {'id': 18808, 'synset': 'rattlesnake_orchid.n.01', 'name': 'rattlesnake_orchid'}, {'id': 18809, 'synset': 'lesser_butterfly_orchid.n.01', 'name': 'lesser_butterfly_orchid'}, {'id': 18810, 'synset': 'greater_butterfly_orchid.n.01', 'name': 'greater_butterfly_orchid'}, {'id': 18811, 'synset': 'prairie_white-fringed_orchid.n.01', 'name': 'prairie_white-fringed_orchid'}, {'id': 18812, 'synset': 'tangle_orchid.n.01', 'name': 'tangle_orchid'}, {'id': 18813, 'synset': 'indian_crocus.n.01', 'name': 'Indian_crocus'}, {'id': 18814, 'synset': 'pleurothallis.n.01', 'name': 'pleurothallis'}, {'id': 18815, 'synset': 'pogonia.n.01', 'name': 'pogonia'}, {'id': 18816, 'synset': 'butterfly_orchid.n.01', 'name': 'butterfly_orchid'}, {'id': 18817, 'synset': 'psychopsis_krameriana.n.01', 'name': 'Psychopsis_krameriana'}, {'id': 18818, 'synset': 'psychopsis_papilio.n.01', 'name': 'Psychopsis_papilio'}, {'id': 18819, 'synset': 'helmet_orchid.n.01', 'name': 'helmet_orchid'}, {'id': 18820, 'synset': 'foxtail_orchid.n.01', 'name': 'foxtail_orchid'}, {'id': 18821, 'synset': 'orange-blossom_orchid.n.01', 'name': 'orange-blossom_orchid'}, {'id': 18822, 'synset': 'sobralia.n.01', 'name': 'sobralia'}, {'id': 18823, 'synset': "ladies'_tresses.n.01", 'name': "ladies'_tresses"}, {'id': 18824, 'synset': 'screw_augur.n.01', 'name': 'screw_augur'}, {'id': 18825, 'synset': "hooded_ladies'_tresses.n.01", 'name': "hooded_ladies'_tresses"}, {'id': 18826, 'synset': "western_ladies'_tresses.n.01", 'name': "western_ladies'_tresses"}, {'id': 18827, 'synset': "european_ladies'_tresses.n.01", 'name': "European_ladies'_tresses"}, {'id': 18828, 'synset': 'stanhopea.n.01', 'name': 'stanhopea'}, {'id': 18829, 'synset': 'stelis.n.01', 'name': 'stelis'}, {'id': 18830, 'synset': 'fly_orchid.n.01', 'name': 'fly_orchid'}, {'id': 18831, 'synset': 'vanda.n.01', 'name': 'vanda'}, {'id': 18832, 'synset': 'blue_orchid.n.01', 'name': 'blue_orchid'}, {'id': 18833, 'synset': 'vanilla.n.01', 'name': 'vanilla'}, {'id': 18834, 'synset': 'vanilla_orchid.n.01', 'name': 'vanilla_orchid'}, {'id': 18835, 'synset': 'yam.n.02', 'name': 'yam'}, {'id': 18836, 'synset': 'yam.n.01', 'name': 'yam'}, {'id': 18837, 'synset': 'white_yam.n.01', 'name': 'white_yam'}, {'id': 18838, 'synset': 'cinnamon_vine.n.01', 'name': 'cinnamon_vine'}, {'id': 18839, 'synset': "elephant's-foot.n.01", 'name': "elephant's-foot"}, {'id': 18840, 'synset': 'wild_yam.n.01', 'name': 'wild_yam'}, {'id': 18841, 'synset': 'cush-cush.n.01', 'name': 'cush-cush'}, {'id': 18842, 'synset': 'black_bryony.n.01', 'name': 'black_bryony'}, {'id': 18843, 'synset': 'primrose.n.01', 'name': 'primrose'}, {'id': 18844, 'synset': 'english_primrose.n.01', 'name': 'English_primrose'}, {'id': 18845, 'synset': 'cowslip.n.01', 'name': 'cowslip'}, {'id': 18846, 'synset': 'oxlip.n.01', 'name': 'oxlip'}, {'id': 18847, 'synset': 'chinese_primrose.n.01', 'name': 'Chinese_primrose'}, {'id': 18848, 'synset': 'polyanthus.n.01', 'name': 'polyanthus'}, {'id': 18849, 'synset': 'pimpernel.n.02', 'name': 'pimpernel'}, {'id': 18850, 'synset': 'scarlet_pimpernel.n.01', 'name': 'scarlet_pimpernel'}, {'id': 18851, 'synset': 'bog_pimpernel.n.01', 'name': 'bog_pimpernel'}, {'id': 18852, 'synset': 'chaffweed.n.01', 'name': 'chaffweed'}, {'id': 18853, 'synset': 'cyclamen.n.01', 'name': 'cyclamen'}, {'id': 18854, 'synset': 'sowbread.n.01', 'name': 'sowbread'}, {'id': 18855, 'synset': 'sea_milkwort.n.01', 'name': 'sea_milkwort'}, {'id': 18856, 'synset': 'featherfoil.n.01', 'name': 'featherfoil'}, {'id': 18857, 'synset': 'water_gillyflower.n.01', 'name': 'water_gillyflower'}, {'id': 18858, 'synset': 'water_violet.n.01', 'name': 'water_violet'}, {'id': 18859, 'synset': 'loosestrife.n.02', 'name': 'loosestrife'}, {'id': 18860, 'synset': 'gooseneck_loosestrife.n.01', 'name': 'gooseneck_loosestrife'}, {'id': 18861, 'synset': 'yellow_pimpernel.n.01', 'name': 'yellow_pimpernel'}, {'id': 18862, 'synset': 'fringed_loosestrife.n.01', 'name': 'fringed_loosestrife'}, {'id': 18863, 'synset': 'moneywort.n.01', 'name': 'moneywort'}, {'id': 18864, 'synset': 'swamp_candles.n.01', 'name': 'swamp_candles'}, {'id': 18865, 'synset': 'whorled_loosestrife.n.01', 'name': 'whorled_loosestrife'}, {'id': 18866, 'synset': 'water_pimpernel.n.01', 'name': 'water_pimpernel'}, {'id': 18867, 'synset': 'brookweed.n.02', 'name': 'brookweed'}, {'id': 18868, 'synset': 'brookweed.n.01', 'name': 'brookweed'}, {'id': 18869, 'synset': 'coralberry.n.02', 'name': 'coralberry'}, {'id': 18870, 'synset': 'marlberry.n.01', 'name': 'marlberry'}, {'id': 18871, 'synset': 'plumbago.n.02', 'name': 'plumbago'}, {'id': 18872, 'synset': 'leadwort.n.01', 'name': 'leadwort'}, {'id': 18873, 'synset': 'thrift.n.01', 'name': 'thrift'}, {'id': 18874, 'synset': 'sea_lavender.n.01', 'name': 'sea_lavender'}, {'id': 18875, 'synset': 'barbasco.n.01', 'name': 'barbasco'}, {'id': 18876, 'synset': 'gramineous_plant.n.01', 'name': 'gramineous_plant'}, {'id': 18877, 'synset': 'grass.n.01', 'name': 'grass'}, {'id': 18878, 'synset': 'midgrass.n.01', 'name': 'midgrass'}, {'id': 18879, 'synset': 'shortgrass.n.01', 'name': 'shortgrass'}, {'id': 18880, 'synset': 'sword_grass.n.01', 'name': 'sword_grass'}, {'id': 18881, 'synset': 'tallgrass.n.01', 'name': 'tallgrass'}, {'id': 18882, 'synset': 'herbage.n.01', 'name': 'herbage'}, {'id': 18883, 'synset': 'goat_grass.n.01', 'name': 'goat_grass'}, {'id': 18884, 'synset': 'wheatgrass.n.01', 'name': 'wheatgrass'}, {'id': 18885, 'synset': 'crested_wheatgrass.n.01', 'name': 'crested_wheatgrass'}, {'id': 18886, 'synset': 'bearded_wheatgrass.n.01', 'name': 'bearded_wheatgrass'}, {'id': 18887, 'synset': 'western_wheatgrass.n.01', 'name': 'western_wheatgrass'}, {'id': 18888, 'synset': 'intermediate_wheatgrass.n.01', 'name': 'intermediate_wheatgrass'}, {'id': 18889, 'synset': 'slender_wheatgrass.n.01', 'name': 'slender_wheatgrass'}, {'id': 18890, 'synset': 'velvet_bent.n.01', 'name': 'velvet_bent'}, {'id': 18891, 'synset': 'cloud_grass.n.01', 'name': 'cloud_grass'}, {'id': 18892, 'synset': 'meadow_foxtail.n.01', 'name': 'meadow_foxtail'}, {'id': 18893, 'synset': 'foxtail.n.01', 'name': 'foxtail'}, {'id': 18894, 'synset': 'broom_grass.n.01', 'name': 'broom_grass'}, {'id': 18895, 'synset': 'broom_sedge.n.01', 'name': 'broom_sedge'}, {'id': 18896, 'synset': 'tall_oat_grass.n.01', 'name': 'tall_oat_grass'}, {'id': 18897, 'synset': 'toetoe.n.02', 'name': 'toetoe'}, {'id': 18898, 'synset': 'oat.n.01', 'name': 'oat'}, {'id': 18899, 'synset': 'cereal_oat.n.01', 'name': 'cereal_oat'}, {'id': 18900, 'synset': 'wild_oat.n.01', 'name': 'wild_oat'}, {'id': 18901, 'synset': 'slender_wild_oat.n.01', 'name': 'slender_wild_oat'}, {'id': 18902, 'synset': 'wild_red_oat.n.01', 'name': 'wild_red_oat'}, {'id': 18903, 'synset': 'brome.n.01', 'name': 'brome'}, {'id': 18904, 'synset': 'chess.n.01', 'name': 'chess'}, {'id': 18905, 'synset': 'field_brome.n.01', 'name': 'field_brome'}, {'id': 18906, 'synset': 'grama.n.01', 'name': 'grama'}, {'id': 18907, 'synset': 'black_grama.n.01', 'name': 'black_grama'}, {'id': 18908, 'synset': 'buffalo_grass.n.02', 'name': 'buffalo_grass'}, {'id': 18909, 'synset': 'reed_grass.n.01', 'name': 'reed_grass'}, {'id': 18910, 'synset': 'feather_reed_grass.n.01', 'name': 'feather_reed_grass'}, {'id': 18911, 'synset': 'australian_reed_grass.n.01', 'name': 'Australian_reed_grass'}, {'id': 18912, 'synset': 'burgrass.n.01', 'name': 'burgrass'}, {'id': 18913, 'synset': 'buffel_grass.n.01', 'name': 'buffel_grass'}, {'id': 18914, 'synset': 'rhodes_grass.n.01', 'name': 'Rhodes_grass'}, {'id': 18915, 'synset': 'pampas_grass.n.01', 'name': 'pampas_grass'}, {'id': 18916, 'synset': 'giant_star_grass.n.01', 'name': 'giant_star_grass'}, {'id': 18917, 'synset': 'orchard_grass.n.01', 'name': 'orchard_grass'}, {'id': 18918, 'synset': 'egyptian_grass.n.01', 'name': 'Egyptian_grass'}, {'id': 18919, 'synset': 'crabgrass.n.01', 'name': 'crabgrass'}, {'id': 18920, 'synset': 'smooth_crabgrass.n.01', 'name': 'smooth_crabgrass'}, {'id': 18921, 'synset': 'large_crabgrass.n.01', 'name': 'large_crabgrass'}, {'id': 18922, 'synset': 'barnyard_grass.n.01', 'name': 'barnyard_grass'}, {'id': 18923, 'synset': 'japanese_millet.n.01', 'name': 'Japanese_millet'}, {'id': 18924, 'synset': 'yardgrass.n.01', 'name': 'yardgrass'}, {'id': 18925, 'synset': 'finger_millet.n.01', 'name': 'finger_millet'}, {'id': 18926, 'synset': 'lyme_grass.n.01', 'name': 'lyme_grass'}, {'id': 18927, 'synset': 'wild_rye.n.01', 'name': 'wild_rye'}, {'id': 18928, 'synset': 'giant_ryegrass.n.01', 'name': 'giant_ryegrass'}, {'id': 18929, 'synset': 'sea_lyme_grass.n.01', 'name': 'sea_lyme_grass'}, {'id': 18930, 'synset': 'canada_wild_rye.n.01', 'name': 'Canada_wild_rye'}, {'id': 18931, 'synset': 'teff.n.01', 'name': 'teff'}, {'id': 18932, 'synset': 'weeping_love_grass.n.01', 'name': 'weeping_love_grass'}, {'id': 18933, 'synset': 'plume_grass.n.01', 'name': 'plume_grass'}, {'id': 18934, 'synset': 'ravenna_grass.n.01', 'name': 'Ravenna_grass'}, {'id': 18935, 'synset': 'fescue.n.01', 'name': 'fescue'}, {'id': 18936, 'synset': 'reed_meadow_grass.n.01', 'name': 'reed_meadow_grass'}, {'id': 18937, 'synset': 'velvet_grass.n.01', 'name': 'velvet_grass'}, {'id': 18938, 'synset': 'creeping_soft_grass.n.01', 'name': 'creeping_soft_grass'}, {'id': 18939, 'synset': 'barleycorn.n.01', 'name': 'barleycorn'}, {'id': 18940, 'synset': 'barley_grass.n.01', 'name': 'barley_grass'}, {'id': 18941, 'synset': 'little_barley.n.01', 'name': 'little_barley'}, {'id': 18942, 'synset': 'rye_grass.n.01', 'name': 'rye_grass'}, {'id': 18943, 'synset': 'perennial_ryegrass.n.01', 'name': 'perennial_ryegrass'}, {'id': 18944, 'synset': 'italian_ryegrass.n.01', 'name': 'Italian_ryegrass'}, {'id': 18945, 'synset': 'darnel.n.01', 'name': 'darnel'}, {'id': 18946, 'synset': 'nimblewill.n.01', 'name': 'nimblewill'}, {'id': 18947, 'synset': 'cultivated_rice.n.01', 'name': 'cultivated_rice'}, {'id': 18948, 'synset': 'ricegrass.n.01', 'name': 'ricegrass'}, {'id': 18949, 'synset': 'smilo.n.01', 'name': 'smilo'}, {'id': 18950, 'synset': 'switch_grass.n.01', 'name': 'switch_grass'}, {'id': 18951, 'synset': 'broomcorn_millet.n.01', 'name': 'broomcorn_millet'}, {'id': 18952, 'synset': 'goose_grass.n.03', 'name': 'goose_grass'}, {'id': 18953, 'synset': 'dallisgrass.n.01', 'name': 'dallisgrass'}, {'id': 18954, 'synset': 'bahia_grass.n.01', 'name': 'Bahia_grass'}, {'id': 18955, 'synset': 'knotgrass.n.01', 'name': 'knotgrass'}, {'id': 18956, 'synset': 'fountain_grass.n.01', 'name': 'fountain_grass'}, {'id': 18957, 'synset': 'reed_canary_grass.n.01', 'name': 'reed_canary_grass'}, {'id': 18958, 'synset': 'canary_grass.n.01', 'name': 'canary_grass'}, {'id': 18959, 'synset': 'timothy.n.01', 'name': 'timothy'}, {'id': 18960, 'synset': 'bluegrass.n.01', 'name': 'bluegrass'}, {'id': 18961, 'synset': 'meadowgrass.n.01', 'name': 'meadowgrass'}, {'id': 18962, 'synset': 'wood_meadowgrass.n.01', 'name': 'wood_meadowgrass'}, {'id': 18963, 'synset': 'noble_cane.n.01', 'name': 'noble_cane'}, {'id': 18964, 'synset': 'munj.n.01', 'name': 'munj'}, {'id': 18965, 'synset': 'broom_beard_grass.n.01', 'name': 'broom_beard_grass'}, {'id': 18966, 'synset': 'bluestem.n.01', 'name': 'bluestem'}, {'id': 18967, 'synset': 'rye.n.02', 'name': 'rye'}, {'id': 18968, 'synset': 'bristlegrass.n.01', 'name': 'bristlegrass'}, {'id': 18969, 'synset': 'giant_foxtail.n.01', 'name': 'giant_foxtail'}, {'id': 18970, 'synset': 'yellow_bristlegrass.n.01', 'name': 'yellow_bristlegrass'}, {'id': 18971, 'synset': 'green_bristlegrass.n.01', 'name': 'green_bristlegrass'}, {'id': 18972, 'synset': 'siberian_millet.n.01', 'name': 'Siberian_millet'}, {'id': 18973, 'synset': 'german_millet.n.01', 'name': 'German_millet'}, {'id': 18974, 'synset': 'millet.n.01', 'name': 'millet'}, {'id': 18975, 'synset': 'rattan.n.02', 'name': 'rattan'}, {'id': 18976, 'synset': 'malacca.n.01', 'name': 'malacca'}, {'id': 18977, 'synset': 'reed.n.01', 'name': 'reed'}, {'id': 18978, 'synset': 'sorghum.n.01', 'name': 'sorghum'}, {'id': 18979, 'synset': 'grain_sorghum.n.01', 'name': 'grain_sorghum'}, {'id': 18980, 'synset': 'durra.n.01', 'name': 'durra'}, {'id': 18981, 'synset': 'feterita.n.01', 'name': 'feterita'}, {'id': 18982, 'synset': 'hegari.n.01', 'name': 'hegari'}, {'id': 18983, 'synset': 'kaoliang.n.01', 'name': 'kaoliang'}, {'id': 18984, 'synset': 'milo.n.01', 'name': 'milo'}, {'id': 18985, 'synset': 'shallu.n.01', 'name': 'shallu'}, {'id': 18986, 'synset': 'broomcorn.n.01', 'name': 'broomcorn'}, {'id': 18987, 'synset': 'cordgrass.n.01', 'name': 'cordgrass'}, {'id': 18988, 'synset': 'salt_reed_grass.n.01', 'name': 'salt_reed_grass'}, {'id': 18989, 'synset': 'prairie_cordgrass.n.01', 'name': 'prairie_cordgrass'}, {'id': 18990, 'synset': 'smut_grass.n.01', 'name': 'smut_grass'}, {'id': 18991, 'synset': 'sand_dropseed.n.01', 'name': 'sand_dropseed'}, {'id': 18992, 'synset': 'rush_grass.n.01', 'name': 'rush_grass'}, {'id': 18993, 'synset': 'st._augustine_grass.n.01', 'name': 'St._Augustine_grass'}, {'id': 18994, 'synset': 'grain.n.08', 'name': 'grain'}, {'id': 18995, 'synset': 'cereal.n.01', 'name': 'cereal'}, {'id': 18996, 'synset': 'wheat.n.01', 'name': 'wheat'}, {'id': 18997, 'synset': 'wheat_berry.n.01', 'name': 'wheat_berry'}, {'id': 18998, 'synset': 'durum.n.01', 'name': 'durum'}, {'id': 18999, 'synset': 'spelt.n.01', 'name': 'spelt'}, {'id': 19000, 'synset': 'emmer.n.01', 'name': 'emmer'}, {'id': 19001, 'synset': 'wild_wheat.n.01', 'name': 'wild_wheat'}, {'id': 19002, 'synset': 'corn.n.01', 'name': 'corn'}, {'id': 19003, 'synset': 'mealie.n.01', 'name': 'mealie'}, {'id': 19004, 'synset': 'corn.n.02', 'name': 'corn'}, {'id': 19005, 'synset': 'dent_corn.n.01', 'name': 'dent_corn'}, {'id': 19006, 'synset': 'flint_corn.n.01', 'name': 'flint_corn'}, {'id': 19007, 'synset': 'popcorn.n.01', 'name': 'popcorn'}, {'id': 19008, 'synset': 'zoysia.n.01', 'name': 'zoysia'}, {'id': 19009, 'synset': 'manila_grass.n.01', 'name': 'Manila_grass'}, {'id': 19010, 'synset': 'korean_lawn_grass.n.01', 'name': 'Korean_lawn_grass'}, {'id': 19011, 'synset': 'common_bamboo.n.01', 'name': 'common_bamboo'}, {'id': 19012, 'synset': 'giant_bamboo.n.01', 'name': 'giant_bamboo'}, {'id': 19013, 'synset': 'umbrella_plant.n.03', 'name': 'umbrella_plant'}, {'id': 19014, 'synset': 'chufa.n.01', 'name': 'chufa'}, {'id': 19015, 'synset': 'galingale.n.01', 'name': 'galingale'}, {'id': 19016, 'synset': 'nutgrass.n.01', 'name': 'nutgrass'}, {'id': 19017, 'synset': 'sand_sedge.n.01', 'name': 'sand_sedge'}, {'id': 19018, 'synset': 'cypress_sedge.n.01', 'name': 'cypress_sedge'}, {'id': 19019, 'synset': 'cotton_grass.n.01', 'name': 'cotton_grass'}, {'id': 19020, 'synset': 'common_cotton_grass.n.01', 'name': 'common_cotton_grass'}, {'id': 19021, 'synset': 'hardstem_bulrush.n.01', 'name': 'hardstem_bulrush'}, {'id': 19022, 'synset': 'wool_grass.n.01', 'name': 'wool_grass'}, {'id': 19023, 'synset': 'spike_rush.n.01', 'name': 'spike_rush'}, {'id': 19024, 'synset': 'water_chestnut.n.02', 'name': 'water_chestnut'}, {'id': 19025, 'synset': 'needle_spike_rush.n.01', 'name': 'needle_spike_rush'}, {'id': 19026, 'synset': 'creeping_spike_rush.n.01', 'name': 'creeping_spike_rush'}, {'id': 19027, 'synset': 'pandanus.n.02', 'name': 'pandanus'}, {'id': 19028, 'synset': 'textile_screw_pine.n.01', 'name': 'textile_screw_pine'}, {'id': 19029, 'synset': 'cattail.n.01', 'name': 'cattail'}, {'id': 19030, 'synset': "cat's-tail.n.01", 'name': "cat's-tail"}, {'id': 19031, 'synset': 'bur_reed.n.01', 'name': 'bur_reed'}, {'id': 19032, 'synset': 'grain.n.07', 'name': 'grain'}, {'id': 19033, 'synset': 'kernel.n.02', 'name': 'kernel'}, {'id': 19034, 'synset': 'rye.n.01', 'name': 'rye'}, {'id': 19035, 'synset': 'gourd.n.03', 'name': 'gourd'}, {'id': 19036, 'synset': 'pumpkin.n.01', 'name': 'pumpkin'}, {'id': 19037, 'synset': 'squash.n.01', 'name': 'squash'}, {'id': 19038, 'synset': 'summer_squash.n.01', 'name': 'summer_squash'}, {'id': 19039, 'synset': 'yellow_squash.n.01', 'name': 'yellow_squash'}, {'id': 19040, 'synset': 'marrow.n.02', 'name': 'marrow'}, {'id': 19041, 'synset': 'zucchini.n.01', 'name': 'zucchini'}, {'id': 19042, 'synset': 'cocozelle.n.01', 'name': 'cocozelle'}, {'id': 19043, 'synset': 'cymling.n.01', 'name': 'cymling'}, {'id': 19044, 'synset': 'spaghetti_squash.n.01', 'name': 'spaghetti_squash'}, {'id': 19045, 'synset': 'winter_squash.n.01', 'name': 'winter_squash'}, {'id': 19046, 'synset': 'acorn_squash.n.01', 'name': 'acorn_squash'}, {'id': 19047, 'synset': 'hubbard_squash.n.01', 'name': 'hubbard_squash'}, {'id': 19048, 'synset': 'turban_squash.n.01', 'name': 'turban_squash'}, {'id': 19049, 'synset': 'buttercup_squash.n.01', 'name': 'buttercup_squash'}, {'id': 19050, 'synset': 'butternut_squash.n.01', 'name': 'butternut_squash'}, {'id': 19051, 'synset': 'winter_crookneck.n.01', 'name': 'winter_crookneck'}, {'id': 19052, 'synset': 'cushaw.n.01', 'name': 'cushaw'}, {'id': 19053, 'synset': 'prairie_gourd.n.02', 'name': 'prairie_gourd'}, {'id': 19054, 'synset': 'prairie_gourd.n.01', 'name': 'prairie_gourd'}, {'id': 19055, 'synset': 'bryony.n.01', 'name': 'bryony'}, {'id': 19056, 'synset': 'white_bryony.n.01', 'name': 'white_bryony'}, {'id': 19057, 'synset': 'sweet_melon.n.01', 'name': 'sweet_melon'}, {'id': 19058, 'synset': 'cantaloupe.n.01', 'name': 'cantaloupe'}, {'id': 19059, 'synset': 'winter_melon.n.01', 'name': 'winter_melon'}, {'id': 19060, 'synset': 'net_melon.n.01', 'name': 'net_melon'}, {'id': 19061, 'synset': 'cucumber.n.01', 'name': 'cucumber'}, {'id': 19062, 'synset': 'squirting_cucumber.n.01', 'name': 'squirting_cucumber'}, {'id': 19063, 'synset': 'bottle_gourd.n.01', 'name': 'bottle_gourd'}, {'id': 19064, 'synset': 'luffa.n.02', 'name': 'luffa'}, {'id': 19065, 'synset': 'loofah.n.02', 'name': 'loofah'}, {'id': 19066, 'synset': 'angled_loofah.n.01', 'name': 'angled_loofah'}, {'id': 19067, 'synset': 'loofa.n.01', 'name': 'loofa'}, {'id': 19068, 'synset': 'balsam_apple.n.01', 'name': 'balsam_apple'}, {'id': 19069, 'synset': 'balsam_pear.n.01', 'name': 'balsam_pear'}, {'id': 19070, 'synset': 'lobelia.n.01', 'name': 'lobelia'}, {'id': 19071, 'synset': 'water_lobelia.n.01', 'name': 'water_lobelia'}, {'id': 19072, 'synset': 'mallow.n.01', 'name': 'mallow'}, {'id': 19073, 'synset': 'musk_mallow.n.02', 'name': 'musk_mallow'}, {'id': 19074, 'synset': 'common_mallow.n.01', 'name': 'common_mallow'}, {'id': 19075, 'synset': 'okra.n.02', 'name': 'okra'}, {'id': 19076, 'synset': 'okra.n.01', 'name': 'okra'}, {'id': 19077, 'synset': 'abelmosk.n.01', 'name': 'abelmosk'}, {'id': 19078, 'synset': 'flowering_maple.n.01', 'name': 'flowering_maple'}, {'id': 19079, 'synset': 'velvetleaf.n.02', 'name': 'velvetleaf'}, {'id': 19080, 'synset': 'hollyhock.n.02', 'name': 'hollyhock'}, {'id': 19081, 'synset': 'rose_mallow.n.02', 'name': 'rose_mallow'}, {'id': 19082, 'synset': 'althea.n.01', 'name': 'althea'}, {'id': 19083, 'synset': 'marsh_mallow.n.01', 'name': 'marsh_mallow'}, {'id': 19084, 'synset': 'poppy_mallow.n.01', 'name': 'poppy_mallow'}, {'id': 19085, 'synset': 'fringed_poppy_mallow.n.01', 'name': 'fringed_poppy_mallow'}, {'id': 19086, 'synset': 'purple_poppy_mallow.n.01', 'name': 'purple_poppy_mallow'}, {'id': 19087, 'synset': 'clustered_poppy_mallow.n.01', 'name': 'clustered_poppy_mallow'}, {'id': 19088, 'synset': 'sea_island_cotton.n.01', 'name': 'sea_island_cotton'}, {'id': 19089, 'synset': 'levant_cotton.n.01', 'name': 'Levant_cotton'}, {'id': 19090, 'synset': 'upland_cotton.n.01', 'name': 'upland_cotton'}, {'id': 19091, 'synset': 'peruvian_cotton.n.01', 'name': 'Peruvian_cotton'}, {'id': 19092, 'synset': 'wild_cotton.n.01', 'name': 'wild_cotton'}, {'id': 19093, 'synset': 'kenaf.n.02', 'name': 'kenaf'}, {'id': 19094, 'synset': 'sorrel_tree.n.02', 'name': 'sorrel_tree'}, {'id': 19095, 'synset': 'rose_mallow.n.01', 'name': 'rose_mallow'}, {'id': 19096, 'synset': 'cotton_rose.n.01', 'name': 'cotton_rose'}, {'id': 19097, 'synset': 'roselle.n.01', 'name': 'roselle'}, {'id': 19098, 'synset': 'mahoe.n.01', 'name': 'mahoe'}, {'id': 19099, 'synset': 'flower-of-an-hour.n.01', 'name': 'flower-of-an-hour'}, {'id': 19100, 'synset': 'lacebark.n.01', 'name': 'lacebark'}, {'id': 19101, 'synset': 'wild_hollyhock.n.02', 'name': 'wild_hollyhock'}, {'id': 19102, 'synset': 'mountain_hollyhock.n.01', 'name': 'mountain_hollyhock'}, {'id': 19103, 'synset': 'seashore_mallow.n.01', 'name': 'seashore_mallow'}, {'id': 19104, 'synset': 'salt_marsh_mallow.n.01', 'name': 'salt_marsh_mallow'}, {'id': 19105, 'synset': 'chaparral_mallow.n.01', 'name': 'chaparral_mallow'}, {'id': 19106, 'synset': 'malope.n.01', 'name': 'malope'}, {'id': 19107, 'synset': 'false_mallow.n.02', 'name': 'false_mallow'}, {'id': 19108, 'synset': 'waxmallow.n.01', 'name': 'waxmallow'}, {'id': 19109, 'synset': 'glade_mallow.n.01', 'name': 'glade_mallow'}, {'id': 19110, 'synset': 'pavonia.n.01', 'name': 'pavonia'}, {'id': 19111, 'synset': 'ribbon_tree.n.01', 'name': 'ribbon_tree'}, {'id': 19112, 'synset': 'bush_hibiscus.n.01', 'name': 'bush_hibiscus'}, {'id': 19113, 'synset': 'virginia_mallow.n.01', 'name': 'Virginia_mallow'}, {'id': 19114, 'synset': 'queensland_hemp.n.01', 'name': 'Queensland_hemp'}, {'id': 19115, 'synset': 'indian_mallow.n.01', 'name': 'Indian_mallow'}, {'id': 19116, 'synset': 'checkerbloom.n.01', 'name': 'checkerbloom'}, {'id': 19117, 'synset': 'globe_mallow.n.01', 'name': 'globe_mallow'}, {'id': 19118, 'synset': 'prairie_mallow.n.01', 'name': 'prairie_mallow'}, {'id': 19119, 'synset': 'tulipwood_tree.n.01', 'name': 'tulipwood_tree'}, {'id': 19120, 'synset': 'portia_tree.n.01', 'name': 'portia_tree'}, {'id': 19121, 'synset': 'red_silk-cotton_tree.n.01', 'name': 'red_silk-cotton_tree'}, {'id': 19122, 'synset': 'cream-of-tartar_tree.n.01', 'name': 'cream-of-tartar_tree'}, {'id': 19123, 'synset': 'baobab.n.01', 'name': 'baobab'}, {'id': 19124, 'synset': 'kapok.n.02', 'name': 'kapok'}, {'id': 19125, 'synset': 'durian.n.01', 'name': 'durian'}, {'id': 19126, 'synset': 'montezuma.n.01', 'name': 'Montezuma'}, {'id': 19127, 'synset': 'shaving-brush_tree.n.01', 'name': 'shaving-brush_tree'}, {'id': 19128, 'synset': 'quandong.n.03', 'name': 'quandong'}, {'id': 19129, 'synset': 'quandong.n.02', 'name': 'quandong'}, {'id': 19130, 'synset': 'makomako.n.01', 'name': 'makomako'}, {'id': 19131, 'synset': 'jamaican_cherry.n.01', 'name': 'Jamaican_cherry'}, {'id': 19132, 'synset': 'breakax.n.01', 'name': 'breakax'}, {'id': 19133, 'synset': 'sterculia.n.01', 'name': 'sterculia'}, {'id': 19134, 'synset': 'panama_tree.n.01', 'name': 'Panama_tree'}, {'id': 19135, 'synset': 'kalumpang.n.01', 'name': 'kalumpang'}, {'id': 19136, 'synset': 'bottle-tree.n.01', 'name': 'bottle-tree'}, {'id': 19137, 'synset': 'flame_tree.n.04', 'name': 'flame_tree'}, {'id': 19138, 'synset': 'flame_tree.n.03', 'name': 'flame_tree'}, {'id': 19139, 'synset': 'kurrajong.n.01', 'name': 'kurrajong'}, {'id': 19140, 'synset': 'queensland_bottletree.n.01', 'name': 'Queensland_bottletree'}, {'id': 19141, 'synset': 'kola.n.01', 'name': 'kola'}, {'id': 19142, 'synset': 'kola_nut.n.01', 'name': 'kola_nut'}, {'id': 19143, 'synset': 'chinese_parasol_tree.n.01', 'name': 'Chinese_parasol_tree'}, {'id': 19144, 'synset': 'flannelbush.n.01', 'name': 'flannelbush'}, {'id': 19145, 'synset': 'screw_tree.n.01', 'name': 'screw_tree'}, {'id': 19146, 'synset': 'nut-leaved_screw_tree.n.01', 'name': 'nut-leaved_screw_tree'}, {'id': 19147, 'synset': 'red_beech.n.02', 'name': 'red_beech'}, {'id': 19148, 'synset': 'looking_glass_tree.n.01', 'name': 'looking_glass_tree'}, {'id': 19149, 'synset': 'looking-glass_plant.n.01', 'name': 'looking-glass_plant'}, {'id': 19150, 'synset': 'honey_bell.n.01', 'name': 'honey_bell'}, {'id': 19151, 'synset': 'mayeng.n.01', 'name': 'mayeng'}, {'id': 19152, 'synset': 'silver_tree.n.02', 'name': 'silver_tree'}, {'id': 19153, 'synset': 'cacao.n.01', 'name': 'cacao'}, {'id': 19154, 'synset': 'obeche.n.02', 'name': 'obeche'}, {'id': 19155, 'synset': 'linden.n.02', 'name': 'linden'}, {'id': 19156, 'synset': 'american_basswood.n.01', 'name': 'American_basswood'}, {'id': 19157, 'synset': 'small-leaved_linden.n.01', 'name': 'small-leaved_linden'}, {'id': 19158, 'synset': 'white_basswood.n.01', 'name': 'white_basswood'}, {'id': 19159, 'synset': 'japanese_linden.n.01', 'name': 'Japanese_linden'}, {'id': 19160, 'synset': 'silver_lime.n.01', 'name': 'silver_lime'}, {'id': 19161, 'synset': 'corchorus.n.01', 'name': 'corchorus'}, {'id': 19162, 'synset': 'african_hemp.n.02', 'name': 'African_hemp'}, {'id': 19163, 'synset': 'herb.n.01', 'name': 'herb'}, {'id': 19164, 'synset': 'protea.n.01', 'name': 'protea'}, {'id': 19165, 'synset': 'honeypot.n.01', 'name': 'honeypot'}, {'id': 19166, 'synset': 'honeyflower.n.02', 'name': 'honeyflower'}, {'id': 19167, 'synset': 'banksia.n.01', 'name': 'banksia'}, {'id': 19168, 'synset': 'honeysuckle.n.02', 'name': 'honeysuckle'}, {'id': 19169, 'synset': 'smoke_bush.n.02', 'name': 'smoke_bush'}, {'id': 19170, 'synset': 'chilean_firebush.n.01', 'name': 'Chilean_firebush'}, {'id': 19171, 'synset': 'chilean_nut.n.01', 'name': 'Chilean_nut'}, {'id': 19172, 'synset': 'grevillea.n.01', 'name': 'grevillea'}, {'id': 19173, 'synset': 'red-flowered_silky_oak.n.01', 'name': 'red-flowered_silky_oak'}, {'id': 19174, 'synset': 'silky_oak.n.01', 'name': 'silky_oak'}, {'id': 19175, 'synset': 'beefwood.n.05', 'name': 'beefwood'}, {'id': 19176, 'synset': 'cushion_flower.n.01', 'name': 'cushion_flower'}, {'id': 19177, 'synset': 'rewa-rewa.n.01', 'name': 'rewa-rewa'}, {'id': 19178, 'synset': 'honeyflower.n.01', 'name': 'honeyflower'}, {'id': 19179, 'synset': 'silver_tree.n.01', 'name': 'silver_tree'}, {'id': 19180, 'synset': 'lomatia.n.01', 'name': 'lomatia'}, {'id': 19181, 'synset': 'macadamia.n.01', 'name': 'macadamia'}, {'id': 19182, 'synset': 'macadamia_integrifolia.n.01', 'name': 'Macadamia_integrifolia'}, {'id': 19183, 'synset': 'macadamia_nut.n.01', 'name': 'macadamia_nut'}, {'id': 19184, 'synset': 'queensland_nut.n.01', 'name': 'Queensland_nut'}, {'id': 19185, 'synset': 'prickly_ash.n.02', 'name': 'prickly_ash'}, {'id': 19186, 'synset': 'geebung.n.01', 'name': 'geebung'}, {'id': 19187, 'synset': 'wheel_tree.n.01', 'name': 'wheel_tree'}, {'id': 19188, 'synset': 'scrub_beefwood.n.01', 'name': 'scrub_beefwood'}, {'id': 19189, 'synset': 'waratah.n.02', 'name': 'waratah'}, {'id': 19190, 'synset': 'waratah.n.01', 'name': 'waratah'}, {'id': 19191, 'synset': 'casuarina.n.01', 'name': 'casuarina'}, {'id': 19192, 'synset': 'she-oak.n.01', 'name': 'she-oak'}, {'id': 19193, 'synset': 'beefwood.n.03', 'name': 'beefwood'}, {'id': 19194, 'synset': 'australian_pine.n.01', 'name': 'Australian_pine'}, {'id': 19195, 'synset': 'heath.n.01', 'name': 'heath'}, {'id': 19196, 'synset': 'tree_heath.n.02', 'name': 'tree_heath'}, {'id': 19197, 'synset': 'briarroot.n.01', 'name': 'briarroot'}, {'id': 19198, 'synset': 'winter_heath.n.01', 'name': 'winter_heath'}, {'id': 19199, 'synset': 'bell_heather.n.02', 'name': 'bell_heather'}, {'id': 19200, 'synset': 'cornish_heath.n.01', 'name': 'Cornish_heath'}, {'id': 19201, 'synset': 'spanish_heath.n.01', 'name': 'Spanish_heath'}, {'id': 19202, 'synset': "prince-of-wales'-heath.n.01", 'name': "Prince-of-Wales'-heath"}, {'id': 19203, 'synset': 'bog_rosemary.n.01', 'name': 'bog_rosemary'}, {'id': 19204, 'synset': 'marsh_andromeda.n.01', 'name': 'marsh_andromeda'}, {'id': 19205, 'synset': 'madrona.n.01', 'name': 'madrona'}, {'id': 19206, 'synset': 'strawberry_tree.n.01', 'name': 'strawberry_tree'}, {'id': 19207, 'synset': 'bearberry.n.03', 'name': 'bearberry'}, {'id': 19208, 'synset': 'alpine_bearberry.n.01', 'name': 'alpine_bearberry'}, {'id': 19209, 'synset': 'heartleaf_manzanita.n.01', 'name': 'heartleaf_manzanita'}, {'id': 19210, 'synset': 'parry_manzanita.n.01', 'name': 'Parry_manzanita'}, {'id': 19211, 'synset': 'spike_heath.n.01', 'name': 'spike_heath'}, {'id': 19212, 'synset': 'bryanthus.n.01', 'name': 'bryanthus'}, {'id': 19213, 'synset': 'leatherleaf.n.02', 'name': 'leatherleaf'}, {'id': 19214, 'synset': 'connemara_heath.n.01', 'name': 'Connemara_heath'}, {'id': 19215, 'synset': 'trailing_arbutus.n.01', 'name': 'trailing_arbutus'}, {'id': 19216, 'synset': 'creeping_snowberry.n.01', 'name': 'creeping_snowberry'}, {'id': 19217, 'synset': 'salal.n.01', 'name': 'salal'}, {'id': 19218, 'synset': 'huckleberry.n.02', 'name': 'huckleberry'}, {'id': 19219, 'synset': 'black_huckleberry.n.01', 'name': 'black_huckleberry'}, {'id': 19220, 'synset': 'dangleberry.n.01', 'name': 'dangleberry'}, {'id': 19221, 'synset': 'box_huckleberry.n.01', 'name': 'box_huckleberry'}, {'id': 19222, 'synset': 'kalmia.n.01', 'name': 'kalmia'}, {'id': 19223, 'synset': 'mountain_laurel.n.01', 'name': 'mountain_laurel'}, {'id': 19224, 'synset': 'swamp_laurel.n.01', 'name': 'swamp_laurel'}, {'id': 19225, 'synset': "trapper's_tea.n.01", 'name': "trapper's_tea"}, {'id': 19226, 'synset': 'wild_rosemary.n.01', 'name': 'wild_rosemary'}, {'id': 19227, 'synset': 'sand_myrtle.n.01', 'name': 'sand_myrtle'}, {'id': 19228, 'synset': 'leucothoe.n.01', 'name': 'leucothoe'}, {'id': 19229, 'synset': 'dog_laurel.n.01', 'name': 'dog_laurel'}, {'id': 19230, 'synset': 'sweet_bells.n.01', 'name': 'sweet_bells'}, {'id': 19231, 'synset': 'alpine_azalea.n.01', 'name': 'alpine_azalea'}, {'id': 19232, 'synset': 'staggerbush.n.01', 'name': 'staggerbush'}, {'id': 19233, 'synset': 'maleberry.n.01', 'name': 'maleberry'}, {'id': 19234, 'synset': 'fetterbush.n.02', 'name': 'fetterbush'}, {'id': 19235, 'synset': 'false_azalea.n.01', 'name': 'false_azalea'}, {'id': 19236, 'synset': 'minniebush.n.01', 'name': 'minniebush'}, {'id': 19237, 'synset': 'sorrel_tree.n.01', 'name': 'sorrel_tree'}, {'id': 19238, 'synset': 'mountain_heath.n.01', 'name': 'mountain_heath'}, {'id': 19239, 'synset': 'purple_heather.n.01', 'name': 'purple_heather'}, {'id': 19240, 'synset': 'fetterbush.n.01', 'name': 'fetterbush'}, {'id': 19241, 'synset': 'rhododendron.n.01', 'name': 'rhododendron'}, {'id': 19242, 'synset': 'coast_rhododendron.n.01', 'name': 'coast_rhododendron'}, {'id': 19243, 'synset': 'rosebay.n.01', 'name': 'rosebay'}, {'id': 19244, 'synset': 'swamp_azalea.n.01', 'name': 'swamp_azalea'}, {'id': 19245, 'synset': 'azalea.n.01', 'name': 'azalea'}, {'id': 19246, 'synset': 'cranberry.n.01', 'name': 'cranberry'}, {'id': 19247, 'synset': 'american_cranberry.n.01', 'name': 'American_cranberry'}, {'id': 19248, 'synset': 'european_cranberry.n.01', 'name': 'European_cranberry'}, {'id': 19249, 'synset': 'blueberry.n.01', 'name': 'blueberry'}, {'id': 19250, 'synset': 'farkleberry.n.01', 'name': 'farkleberry'}, {'id': 19251, 'synset': 'low-bush_blueberry.n.01', 'name': 'low-bush_blueberry'}, {'id': 19252, 'synset': 'rabbiteye_blueberry.n.01', 'name': 'rabbiteye_blueberry'}, {'id': 19253, 'synset': 'dwarf_bilberry.n.01', 'name': 'dwarf_bilberry'}, {'id': 19254, 'synset': 'evergreen_blueberry.n.01', 'name': 'evergreen_blueberry'}, {'id': 19255, 'synset': 'evergreen_huckleberry.n.01', 'name': 'evergreen_huckleberry'}, {'id': 19256, 'synset': 'bilberry.n.02', 'name': 'bilberry'}, {'id': 19257, 'synset': 'bilberry.n.01', 'name': 'bilberry'}, {'id': 19258, 'synset': 'bog_bilberry.n.01', 'name': 'bog_bilberry'}, {'id': 19259, 'synset': 'dryland_blueberry.n.01', 'name': 'dryland_blueberry'}, {'id': 19260, 'synset': 'grouseberry.n.01', 'name': 'grouseberry'}, {'id': 19261, 'synset': 'deerberry.n.01', 'name': 'deerberry'}, {'id': 19262, 'synset': 'cowberry.n.01', 'name': 'cowberry'}, {'id': 19263, 'synset': 'diapensia.n.01', 'name': 'diapensia'}, {'id': 19264, 'synset': 'galax.n.01', 'name': 'galax'}, {'id': 19265, 'synset': 'pyxie.n.01', 'name': 'pyxie'}, {'id': 19266, 'synset': 'shortia.n.01', 'name': 'shortia'}, {'id': 19267, 'synset': 'oconee_bells.n.01', 'name': 'oconee_bells'}, {'id': 19268, 'synset': 'australian_heath.n.01', 'name': 'Australian_heath'}, {'id': 19269, 'synset': 'epacris.n.01', 'name': 'epacris'}, {'id': 19270, 'synset': 'common_heath.n.02', 'name': 'common_heath'}, {'id': 19271, 'synset': 'common_heath.n.01', 'name': 'common_heath'}, {'id': 19272, 'synset': 'port_jackson_heath.n.01', 'name': 'Port_Jackson_heath'}, {'id': 19273, 'synset': 'native_cranberry.n.01', 'name': 'native_cranberry'}, {'id': 19274, 'synset': 'pink_fivecorner.n.01', 'name': 'pink_fivecorner'}, {'id': 19275, 'synset': 'wintergreen.n.01', 'name': 'wintergreen'}, {'id': 19276, 'synset': 'false_wintergreen.n.01', 'name': 'false_wintergreen'}, {'id': 19277, 'synset': 'lesser_wintergreen.n.01', 'name': 'lesser_wintergreen'}, {'id': 19278, 'synset': 'wild_lily_of_the_valley.n.02', 'name': 'wild_lily_of_the_valley'}, {'id': 19279, 'synset': 'wild_lily_of_the_valley.n.01', 'name': 'wild_lily_of_the_valley'}, {'id': 19280, 'synset': 'pipsissewa.n.01', 'name': 'pipsissewa'}, {'id': 19281, 'synset': 'love-in-winter.n.01', 'name': 'love-in-winter'}, {'id': 19282, 'synset': 'one-flowered_wintergreen.n.01', 'name': 'one-flowered_wintergreen'}, {'id': 19283, 'synset': 'indian_pipe.n.01', 'name': 'Indian_pipe'}, {'id': 19284, 'synset': 'pinesap.n.01', 'name': 'pinesap'}, {'id': 19285, 'synset': 'beech.n.01', 'name': 'beech'}, {'id': 19286, 'synset': 'common_beech.n.01', 'name': 'common_beech'}, {'id': 19287, 'synset': 'copper_beech.n.01', 'name': 'copper_beech'}, {'id': 19288, 'synset': 'american_beech.n.01', 'name': 'American_beech'}, {'id': 19289, 'synset': 'weeping_beech.n.01', 'name': 'weeping_beech'}, {'id': 19290, 'synset': 'japanese_beech.n.01', 'name': 'Japanese_beech'}, {'id': 19291, 'synset': 'chestnut.n.02', 'name': 'chestnut'}, {'id': 19292, 'synset': 'american_chestnut.n.01', 'name': 'American_chestnut'}, {'id': 19293, 'synset': 'european_chestnut.n.01', 'name': 'European_chestnut'}, {'id': 19294, 'synset': 'chinese_chestnut.n.01', 'name': 'Chinese_chestnut'}, {'id': 19295, 'synset': 'japanese_chestnut.n.01', 'name': 'Japanese_chestnut'}, {'id': 19296, 'synset': 'allegheny_chinkapin.n.01', 'name': 'Allegheny_chinkapin'}, {'id': 19297, 'synset': 'ozark_chinkapin.n.01', 'name': 'Ozark_chinkapin'}, {'id': 19298, 'synset': 'oak_chestnut.n.01', 'name': 'oak_chestnut'}, {'id': 19299, 'synset': 'giant_chinkapin.n.01', 'name': 'giant_chinkapin'}, {'id': 19300, 'synset': 'dwarf_golden_chinkapin.n.01', 'name': 'dwarf_golden_chinkapin'}, {'id': 19301, 'synset': 'tanbark_oak.n.01', 'name': 'tanbark_oak'}, {'id': 19302, 'synset': 'japanese_oak.n.02', 'name': 'Japanese_oak'}, {'id': 19303, 'synset': 'southern_beech.n.01', 'name': 'southern_beech'}, {'id': 19304, 'synset': 'myrtle_beech.n.01', 'name': 'myrtle_beech'}, {'id': 19305, 'synset': 'coigue.n.01', 'name': 'Coigue'}, {'id': 19306, 'synset': 'new_zealand_beech.n.01', 'name': 'New_Zealand_beech'}, {'id': 19307, 'synset': 'silver_beech.n.01', 'name': 'silver_beech'}, {'id': 19308, 'synset': 'roble_beech.n.01', 'name': 'roble_beech'}, {'id': 19309, 'synset': 'rauli_beech.n.01', 'name': 'rauli_beech'}, {'id': 19310, 'synset': 'black_beech.n.01', 'name': 'black_beech'}, {'id': 19311, 'synset': 'hard_beech.n.01', 'name': 'hard_beech'}, {'id': 19312, 'synset': 'acorn.n.01', 'name': 'acorn'}, {'id': 19313, 'synset': 'cupule.n.01', 'name': 'cupule'}, {'id': 19314, 'synset': 'oak.n.02', 'name': 'oak'}, {'id': 19315, 'synset': 'live_oak.n.01', 'name': 'live_oak'}, {'id': 19316, 'synset': 'coast_live_oak.n.01', 'name': 'coast_live_oak'}, {'id': 19317, 'synset': 'white_oak.n.01', 'name': 'white_oak'}, {'id': 19318, 'synset': 'american_white_oak.n.01', 'name': 'American_white_oak'}, {'id': 19319, 'synset': 'arizona_white_oak.n.01', 'name': 'Arizona_white_oak'}, {'id': 19320, 'synset': 'swamp_white_oak.n.01', 'name': 'swamp_white_oak'}, {'id': 19321, 'synset': 'european_turkey_oak.n.01', 'name': 'European_turkey_oak'}, {'id': 19322, 'synset': 'canyon_oak.n.01', 'name': 'canyon_oak'}, {'id': 19323, 'synset': 'scarlet_oak.n.01', 'name': 'scarlet_oak'}, {'id': 19324, 'synset': 'jack_oak.n.02', 'name': 'jack_oak'}, {'id': 19325, 'synset': 'red_oak.n.01', 'name': 'red_oak'}, {'id': 19326, 'synset': 'southern_red_oak.n.01', 'name': 'southern_red_oak'}, {'id': 19327, 'synset': 'oregon_white_oak.n.01', 'name': 'Oregon_white_oak'}, {'id': 19328, 'synset': 'holm_oak.n.02', 'name': 'holm_oak'}, {'id': 19329, 'synset': 'bear_oak.n.01', 'name': 'bear_oak'}, {'id': 19330, 'synset': 'shingle_oak.n.01', 'name': 'shingle_oak'}, {'id': 19331, 'synset': 'bluejack_oak.n.01', 'name': 'bluejack_oak'}, {'id': 19332, 'synset': 'california_black_oak.n.01', 'name': 'California_black_oak'}, {'id': 19333, 'synset': 'american_turkey_oak.n.01', 'name': 'American_turkey_oak'}, {'id': 19334, 'synset': 'laurel_oak.n.01', 'name': 'laurel_oak'}, {'id': 19335, 'synset': 'california_white_oak.n.01', 'name': 'California_white_oak'}, {'id': 19336, 'synset': 'overcup_oak.n.01', 'name': 'overcup_oak'}, {'id': 19337, 'synset': 'bur_oak.n.01', 'name': 'bur_oak'}, {'id': 19338, 'synset': 'scrub_oak.n.01', 'name': 'scrub_oak'}, {'id': 19339, 'synset': 'blackjack_oak.n.01', 'name': 'blackjack_oak'}, {'id': 19340, 'synset': 'swamp_chestnut_oak.n.01', 'name': 'swamp_chestnut_oak'}, {'id': 19341, 'synset': 'japanese_oak.n.01', 'name': 'Japanese_oak'}, {'id': 19342, 'synset': 'chestnut_oak.n.01', 'name': 'chestnut_oak'}, {'id': 19343, 'synset': 'chinquapin_oak.n.01', 'name': 'chinquapin_oak'}, {'id': 19344, 'synset': 'myrtle_oak.n.01', 'name': 'myrtle_oak'}, {'id': 19345, 'synset': 'water_oak.n.01', 'name': 'water_oak'}, {'id': 19346, 'synset': 'nuttall_oak.n.01', 'name': 'Nuttall_oak'}, {'id': 19347, 'synset': 'durmast.n.01', 'name': 'durmast'}, {'id': 19348, 'synset': 'basket_oak.n.01', 'name': 'basket_oak'}, {'id': 19349, 'synset': 'pin_oak.n.01', 'name': 'pin_oak'}, {'id': 19350, 'synset': 'willow_oak.n.01', 'name': 'willow_oak'}, {'id': 19351, 'synset': 'dwarf_chinkapin_oak.n.01', 'name': 'dwarf_chinkapin_oak'}, {'id': 19352, 'synset': 'common_oak.n.01', 'name': 'common_oak'}, {'id': 19353, 'synset': 'northern_red_oak.n.01', 'name': 'northern_red_oak'}, {'id': 19354, 'synset': 'shumard_oak.n.01', 'name': 'Shumard_oak'}, {'id': 19355, 'synset': 'post_oak.n.01', 'name': 'post_oak'}, {'id': 19356, 'synset': 'cork_oak.n.01', 'name': 'cork_oak'}, {'id': 19357, 'synset': 'spanish_oak.n.01', 'name': 'Spanish_oak'}, {'id': 19358, 'synset': 'huckleberry_oak.n.01', 'name': 'huckleberry_oak'}, {'id': 19359, 'synset': 'chinese_cork_oak.n.01', 'name': 'Chinese_cork_oak'}, {'id': 19360, 'synset': 'black_oak.n.01', 'name': 'black_oak'}, {'id': 19361, 'synset': 'southern_live_oak.n.01', 'name': 'southern_live_oak'}, {'id': 19362, 'synset': 'interior_live_oak.n.01', 'name': 'interior_live_oak'}, {'id': 19363, 'synset': 'mast.n.02', 'name': 'mast'}, {'id': 19364, 'synset': 'birch.n.02', 'name': 'birch'}, {'id': 19365, 'synset': 'yellow_birch.n.01', 'name': 'yellow_birch'}, {'id': 19366, 'synset': 'american_white_birch.n.01', 'name': 'American_white_birch'}, {'id': 19367, 'synset': 'grey_birch.n.01', 'name': 'grey_birch'}, {'id': 19368, 'synset': 'silver_birch.n.01', 'name': 'silver_birch'}, {'id': 19369, 'synset': 'downy_birch.n.01', 'name': 'downy_birch'}, {'id': 19370, 'synset': 'black_birch.n.02', 'name': 'black_birch'}, {'id': 19371, 'synset': 'sweet_birch.n.01', 'name': 'sweet_birch'}, {'id': 19372, 'synset': 'yukon_white_birch.n.01', 'name': 'Yukon_white_birch'}, {'id': 19373, 'synset': 'swamp_birch.n.01', 'name': 'swamp_birch'}, {'id': 19374, 'synset': 'newfoundland_dwarf_birch.n.01', 'name': 'Newfoundland_dwarf_birch'}, {'id': 19375, 'synset': 'alder.n.02', 'name': 'alder'}, {'id': 19376, 'synset': 'common_alder.n.01', 'name': 'common_alder'}, {'id': 19377, 'synset': 'grey_alder.n.01', 'name': 'grey_alder'}, {'id': 19378, 'synset': 'seaside_alder.n.01', 'name': 'seaside_alder'}, {'id': 19379, 'synset': 'white_alder.n.01', 'name': 'white_alder'}, {'id': 19380, 'synset': 'red_alder.n.01', 'name': 'red_alder'}, {'id': 19381, 'synset': 'speckled_alder.n.01', 'name': 'speckled_alder'}, {'id': 19382, 'synset': 'smooth_alder.n.01', 'name': 'smooth_alder'}, {'id': 19383, 'synset': 'green_alder.n.02', 'name': 'green_alder'}, {'id': 19384, 'synset': 'green_alder.n.01', 'name': 'green_alder'}, {'id': 19385, 'synset': 'hornbeam.n.01', 'name': 'hornbeam'}, {'id': 19386, 'synset': 'european_hornbeam.n.01', 'name': 'European_hornbeam'}, {'id': 19387, 'synset': 'american_hornbeam.n.01', 'name': 'American_hornbeam'}, {'id': 19388, 'synset': 'hop_hornbeam.n.01', 'name': 'hop_hornbeam'}, {'id': 19389, 'synset': 'old_world_hop_hornbeam.n.01', 'name': 'Old_World_hop_hornbeam'}, {'id': 19390, 'synset': 'eastern_hop_hornbeam.n.01', 'name': 'Eastern_hop_hornbeam'}, {'id': 19391, 'synset': 'hazelnut.n.01', 'name': 'hazelnut'}, {'id': 19392, 'synset': 'american_hazel.n.01', 'name': 'American_hazel'}, {'id': 19393, 'synset': 'cobnut.n.01', 'name': 'cobnut'}, {'id': 19394, 'synset': 'beaked_hazelnut.n.01', 'name': 'beaked_hazelnut'}, {'id': 19395, 'synset': 'centaury.n.01', 'name': 'centaury'}, {'id': 19396, 'synset': 'rosita.n.01', 'name': 'rosita'}, {'id': 19397, 'synset': 'lesser_centaury.n.01', 'name': 'lesser_centaury'}, {'id': 19398, 'synset': 'seaside_centaury.n.01', 'name': 'seaside_centaury'}, {'id': 19399, 'synset': 'slender_centaury.n.01', 'name': 'slender_centaury'}, {'id': 19400, 'synset': 'prairie_gentian.n.01', 'name': 'prairie_gentian'}, {'id': 19401, 'synset': 'persian_violet.n.01', 'name': 'Persian_violet'}, {'id': 19402, 'synset': 'columbo.n.01', 'name': 'columbo'}, {'id': 19403, 'synset': 'gentian.n.01', 'name': 'gentian'}, {'id': 19404, 'synset': 'gentianella.n.02', 'name': 'gentianella'}, {'id': 19405, 'synset': 'closed_gentian.n.02', 'name': 'closed_gentian'}, {'id': 19406, 'synset': "explorer's_gentian.n.01", 'name': "explorer's_gentian"}, {'id': 19407, 'synset': 'closed_gentian.n.01', 'name': 'closed_gentian'}, {'id': 19408, 'synset': 'great_yellow_gentian.n.01', 'name': 'great_yellow_gentian'}, {'id': 19409, 'synset': 'marsh_gentian.n.01', 'name': 'marsh_gentian'}, {'id': 19410, 'synset': 'soapwort_gentian.n.01', 'name': 'soapwort_gentian'}, {'id': 19411, 'synset': 'striped_gentian.n.01', 'name': 'striped_gentian'}, {'id': 19412, 'synset': 'agueweed.n.01', 'name': 'agueweed'}, {'id': 19413, 'synset': 'felwort.n.01', 'name': 'felwort'}, {'id': 19414, 'synset': 'fringed_gentian.n.01', 'name': 'fringed_gentian'}, {'id': 19415, 'synset': 'gentianopsis_crinita.n.01', 'name': 'Gentianopsis_crinita'}, {'id': 19416, 'synset': 'gentianopsis_detonsa.n.01', 'name': 'Gentianopsis_detonsa'}, {'id': 19417, 'synset': 'gentianopsid_procera.n.01', 'name': 'Gentianopsid_procera'}, {'id': 19418, 'synset': 'gentianopsis_thermalis.n.01', 'name': 'Gentianopsis_thermalis'}, {'id': 19419, 'synset': 'tufted_gentian.n.01', 'name': 'tufted_gentian'}, {'id': 19420, 'synset': 'spurred_gentian.n.01', 'name': 'spurred_gentian'}, {'id': 19421, 'synset': 'sabbatia.n.01', 'name': 'sabbatia'}, {'id': 19422, 'synset': 'toothbrush_tree.n.01', 'name': 'toothbrush_tree'}, {'id': 19423, 'synset': 'olive_tree.n.01', 'name': 'olive_tree'}, {'id': 19424, 'synset': 'olive.n.02', 'name': 'olive'}, {'id': 19425, 'synset': 'olive.n.01', 'name': 'olive'}, {'id': 19426, 'synset': 'black_maire.n.01', 'name': 'black_maire'}, {'id': 19427, 'synset': 'white_maire.n.01', 'name': 'white_maire'}, {'id': 19428, 'synset': 'fringe_tree.n.01', 'name': 'fringe_tree'}, {'id': 19429, 'synset': 'fringe_bush.n.01', 'name': 'fringe_bush'}, {'id': 19430, 'synset': 'forestiera.n.01', 'name': 'forestiera'}, {'id': 19431, 'synset': 'forsythia.n.01', 'name': 'forsythia'}, {'id': 19432, 'synset': 'ash.n.02', 'name': 'ash'}, {'id': 19433, 'synset': 'white_ash.n.02', 'name': 'white_ash'}, {'id': 19434, 'synset': 'swamp_ash.n.01', 'name': 'swamp_ash'}, {'id': 19435, 'synset': 'flowering_ash.n.03', 'name': 'flowering_ash'}, {'id': 19436, 'synset': 'european_ash.n.01', 'name': 'European_ash'}, {'id': 19437, 'synset': 'oregon_ash.n.01', 'name': 'Oregon_ash'}, {'id': 19438, 'synset': 'black_ash.n.01', 'name': 'black_ash'}, {'id': 19439, 'synset': 'manna_ash.n.01', 'name': 'manna_ash'}, {'id': 19440, 'synset': 'red_ash.n.01', 'name': 'red_ash'}, {'id': 19441, 'synset': 'green_ash.n.01', 'name': 'green_ash'}, {'id': 19442, 'synset': 'blue_ash.n.01', 'name': 'blue_ash'}, {'id': 19443, 'synset': 'mountain_ash.n.03', 'name': 'mountain_ash'}, {'id': 19444, 'synset': 'pumpkin_ash.n.01', 'name': 'pumpkin_ash'}, {'id': 19445, 'synset': 'arizona_ash.n.01', 'name': 'Arizona_ash'}, {'id': 19446, 'synset': 'jasmine.n.01', 'name': 'jasmine'}, {'id': 19447, 'synset': 'primrose_jasmine.n.01', 'name': 'primrose_jasmine'}, {'id': 19448, 'synset': 'winter_jasmine.n.01', 'name': 'winter_jasmine'}, {'id': 19449, 'synset': 'common_jasmine.n.01', 'name': 'common_jasmine'}, {'id': 19450, 'synset': 'privet.n.01', 'name': 'privet'}, {'id': 19451, 'synset': 'amur_privet.n.01', 'name': 'Amur_privet'}, {'id': 19452, 'synset': 'japanese_privet.n.01', 'name': 'Japanese_privet'}, {'id': 19453, 'synset': 'ligustrum_obtusifolium.n.01', 'name': 'Ligustrum_obtusifolium'}, {'id': 19454, 'synset': 'common_privet.n.01', 'name': 'common_privet'}, {'id': 19455, 'synset': 'devilwood.n.01', 'name': 'devilwood'}, {'id': 19456, 'synset': 'mock_privet.n.01', 'name': 'mock_privet'}, {'id': 19457, 'synset': 'lilac.n.01', 'name': 'lilac'}, {'id': 19458, 'synset': 'himalayan_lilac.n.01', 'name': 'Himalayan_lilac'}, {'id': 19459, 'synset': 'persian_lilac.n.02', 'name': 'Persian_lilac'}, {'id': 19460, 'synset': 'japanese_tree_lilac.n.01', 'name': 'Japanese_tree_lilac'}, {'id': 19461, 'synset': 'japanese_lilac.n.01', 'name': 'Japanese_lilac'}, {'id': 19462, 'synset': 'common_lilac.n.01', 'name': 'common_lilac'}, {'id': 19463, 'synset': 'bloodwort.n.01', 'name': 'bloodwort'}, {'id': 19464, 'synset': 'kangaroo_paw.n.01', 'name': 'kangaroo_paw'}, {'id': 19465, 'synset': 'virginian_witch_hazel.n.01', 'name': 'Virginian_witch_hazel'}, {'id': 19466, 'synset': 'vernal_witch_hazel.n.01', 'name': 'vernal_witch_hazel'}, {'id': 19467, 'synset': 'winter_hazel.n.01', 'name': 'winter_hazel'}, {'id': 19468, 'synset': 'fothergilla.n.01', 'name': 'fothergilla'}, {'id': 19469, 'synset': 'liquidambar.n.02', 'name': 'liquidambar'}, {'id': 19470, 'synset': 'sweet_gum.n.03', 'name': 'sweet_gum'}, {'id': 19471, 'synset': 'iron_tree.n.01', 'name': 'iron_tree'}, {'id': 19472, 'synset': 'walnut.n.03', 'name': 'walnut'}, {'id': 19473, 'synset': 'california_black_walnut.n.01', 'name': 'California_black_walnut'}, {'id': 19474, 'synset': 'butternut.n.01', 'name': 'butternut'}, {'id': 19475, 'synset': 'black_walnut.n.01', 'name': 'black_walnut'}, {'id': 19476, 'synset': 'english_walnut.n.01', 'name': 'English_walnut'}, {'id': 19477, 'synset': 'hickory.n.02', 'name': 'hickory'}, {'id': 19478, 'synset': 'water_hickory.n.01', 'name': 'water_hickory'}, {'id': 19479, 'synset': 'pignut.n.01', 'name': 'pignut'}, {'id': 19480, 'synset': 'bitternut.n.01', 'name': 'bitternut'}, {'id': 19481, 'synset': 'pecan.n.02', 'name': 'pecan'}, {'id': 19482, 'synset': 'big_shellbark.n.01', 'name': 'big_shellbark'}, {'id': 19483, 'synset': 'nutmeg_hickory.n.01', 'name': 'nutmeg_hickory'}, {'id': 19484, 'synset': 'shagbark.n.01', 'name': 'shagbark'}, {'id': 19485, 'synset': 'mockernut.n.01', 'name': 'mockernut'}, {'id': 19486, 'synset': 'wing_nut.n.01', 'name': 'wing_nut'}, {'id': 19487, 'synset': 'caucasian_walnut.n.01', 'name': 'Caucasian_walnut'}, {'id': 19488, 'synset': 'dhawa.n.01', 'name': 'dhawa'}, {'id': 19489, 'synset': 'combretum.n.01', 'name': 'combretum'}, {'id': 19490, 'synset': 'hiccup_nut.n.01', 'name': 'hiccup_nut'}, {'id': 19491, 'synset': 'bush_willow.n.02', 'name': 'bush_willow'}, {'id': 19492, 'synset': 'bush_willow.n.01', 'name': 'bush_willow'}, {'id': 19493, 'synset': 'button_tree.n.01', 'name': 'button_tree'}, {'id': 19494, 'synset': 'white_mangrove.n.02', 'name': 'white_mangrove'}, {'id': 19495, 'synset': 'oleaster.n.01', 'name': 'oleaster'}, {'id': 19496, 'synset': 'water_milfoil.n.01', 'name': 'water_milfoil'}, {'id': 19497, 'synset': 'anchovy_pear.n.01', 'name': 'anchovy_pear'}, {'id': 19498, 'synset': 'brazil_nut.n.01', 'name': 'brazil_nut'}, {'id': 19499, 'synset': 'loosestrife.n.01', 'name': 'loosestrife'}, {'id': 19500, 'synset': 'purple_loosestrife.n.01', 'name': 'purple_loosestrife'}, {'id': 19501, 'synset': 'grass_poly.n.01', 'name': 'grass_poly'}, {'id': 19502, 'synset': 'crape_myrtle.n.01', 'name': 'crape_myrtle'}, {'id': 19503, 'synset': "queen's_crape_myrtle.n.01", 'name': "Queen's_crape_myrtle"}, {'id': 19504, 'synset': 'myrtaceous_tree.n.01', 'name': 'myrtaceous_tree'}, {'id': 19505, 'synset': 'myrtle.n.02', 'name': 'myrtle'}, {'id': 19506, 'synset': 'common_myrtle.n.01', 'name': 'common_myrtle'}, {'id': 19507, 'synset': 'bayberry.n.01', 'name': 'bayberry'}, {'id': 19508, 'synset': 'allspice.n.01', 'name': 'allspice'}, {'id': 19509, 'synset': 'allspice_tree.n.01', 'name': 'allspice_tree'}, {'id': 19510, 'synset': 'sour_cherry.n.02', 'name': 'sour_cherry'}, {'id': 19511, 'synset': 'nakedwood.n.02', 'name': 'nakedwood'}, {'id': 19512, 'synset': 'surinam_cherry.n.02', 'name': 'Surinam_cherry'}, {'id': 19513, 'synset': 'rose_apple.n.01', 'name': 'rose_apple'}, {'id': 19514, 'synset': 'feijoa.n.01', 'name': 'feijoa'}, {'id': 19515, 'synset': 'jaboticaba.n.01', 'name': 'jaboticaba'}, {'id': 19516, 'synset': 'guava.n.02', 'name': 'guava'}, {'id': 19517, 'synset': 'guava.n.01', 'name': 'guava'}, {'id': 19518, 'synset': 'cattley_guava.n.01', 'name': 'cattley_guava'}, {'id': 19519, 'synset': 'brazilian_guava.n.01', 'name': 'Brazilian_guava'}, {'id': 19520, 'synset': 'gum_tree.n.01', 'name': 'gum_tree'}, {'id': 19521, 'synset': 'eucalyptus.n.02', 'name': 'eucalyptus'}, {'id': 19522, 'synset': 'flooded_gum.n.01', 'name': 'flooded_gum'}, {'id': 19523, 'synset': 'mallee.n.01', 'name': 'mallee'}, {'id': 19524, 'synset': 'stringybark.n.01', 'name': 'stringybark'}, {'id': 19525, 'synset': 'smoothbark.n.01', 'name': 'smoothbark'}, {'id': 19526, 'synset': 'red_gum.n.03', 'name': 'red_gum'}, {'id': 19527, 'synset': 'red_gum.n.02', 'name': 'red_gum'}, {'id': 19528, 'synset': 'river_red_gum.n.01', 'name': 'river_red_gum'}, {'id': 19529, 'synset': 'mountain_swamp_gum.n.01', 'name': 'mountain_swamp_gum'}, {'id': 19530, 'synset': 'snow_gum.n.01', 'name': 'snow_gum'}, {'id': 19531, 'synset': 'alpine_ash.n.01', 'name': 'alpine_ash'}, {'id': 19532, 'synset': 'white_mallee.n.01', 'name': 'white_mallee'}, {'id': 19533, 'synset': 'white_stringybark.n.01', 'name': 'white_stringybark'}, {'id': 19534, 'synset': 'white_mountain_ash.n.01', 'name': 'white_mountain_ash'}, {'id': 19535, 'synset': 'blue_gum.n.01', 'name': 'blue_gum'}, {'id': 19536, 'synset': 'rose_gum.n.01', 'name': 'rose_gum'}, {'id': 19537, 'synset': 'cider_gum.n.01', 'name': 'cider_gum'}, {'id': 19538, 'synset': 'swamp_gum.n.01', 'name': 'swamp_gum'}, {'id': 19539, 'synset': 'spotted_gum.n.01', 'name': 'spotted_gum'}, {'id': 19540, 'synset': 'lemon-scented_gum.n.01', 'name': 'lemon-scented_gum'}, {'id': 19541, 'synset': 'black_mallee.n.01', 'name': 'black_mallee'}, {'id': 19542, 'synset': 'forest_red_gum.n.01', 'name': 'forest_red_gum'}, {'id': 19543, 'synset': 'mountain_ash.n.02', 'name': 'mountain_ash'}, {'id': 19544, 'synset': 'manna_gum.n.01', 'name': 'manna_gum'}, {'id': 19545, 'synset': 'clove.n.02', 'name': 'clove'}, {'id': 19546, 'synset': 'clove.n.01', 'name': 'clove'}, {'id': 19547, 'synset': 'tupelo.n.02', 'name': 'tupelo'}, {'id': 19548, 'synset': 'water_gum.n.01', 'name': 'water_gum'}, {'id': 19549, 'synset': 'sour_gum.n.01', 'name': 'sour_gum'}, {'id': 19550, 'synset': "enchanter's_nightshade.n.01", 'name': "enchanter's_nightshade"}, {'id': 19551, 'synset': 'circaea_lutetiana.n.01', 'name': 'Circaea_lutetiana'}, {'id': 19552, 'synset': 'willowherb.n.01', 'name': 'willowherb'}, {'id': 19553, 'synset': 'fireweed.n.01', 'name': 'fireweed'}, {'id': 19554, 'synset': 'california_fuchsia.n.01', 'name': 'California_fuchsia'}, {'id': 19555, 'synset': 'fuchsia.n.01', 'name': 'fuchsia'}, {'id': 19556, 'synset': "lady's-eardrop.n.01", 'name': "lady's-eardrop"}, {'id': 19557, 'synset': 'evening_primrose.n.01', 'name': 'evening_primrose'}, {'id': 19558, 'synset': 'common_evening_primrose.n.01', 'name': 'common_evening_primrose'}, {'id': 19559, 'synset': 'sundrops.n.01', 'name': 'sundrops'}, {'id': 19560, 'synset': 'missouri_primrose.n.01', 'name': 'Missouri_primrose'}, {'id': 19561, 'synset': 'pomegranate.n.01', 'name': 'pomegranate'}, {'id': 19562, 'synset': 'mangrove.n.01', 'name': 'mangrove'}, {'id': 19563, 'synset': 'daphne.n.01', 'name': 'daphne'}, {'id': 19564, 'synset': 'garland_flower.n.01', 'name': 'garland_flower'}, {'id': 19565, 'synset': 'spurge_laurel.n.01', 'name': 'spurge_laurel'}, {'id': 19566, 'synset': 'mezereon.n.01', 'name': 'mezereon'}, {'id': 19567, 'synset': 'indian_rhododendron.n.01', 'name': 'Indian_rhododendron'}, {'id': 19568, 'synset': 'medinilla_magnifica.n.01', 'name': 'Medinilla_magnifica'}, {'id': 19569, 'synset': 'deer_grass.n.01', 'name': 'deer_grass'}, {'id': 19570, 'synset': 'canna.n.01', 'name': 'canna'}, {'id': 19571, 'synset': 'achira.n.01', 'name': 'achira'}, {'id': 19572, 'synset': 'arrowroot.n.02', 'name': 'arrowroot'}, {'id': 19573, 'synset': 'banana.n.01', 'name': 'banana'}, {'id': 19574, 'synset': 'dwarf_banana.n.01', 'name': 'dwarf_banana'}, {'id': 19575, 'synset': 'japanese_banana.n.01', 'name': 'Japanese_banana'}, {'id': 19576, 'synset': 'plantain.n.02', 'name': 'plantain'}, {'id': 19577, 'synset': 'edible_banana.n.01', 'name': 'edible_banana'}, {'id': 19578, 'synset': 'abaca.n.02', 'name': 'abaca'}, {'id': 19579, 'synset': 'abyssinian_banana.n.01', 'name': 'Abyssinian_banana'}, {'id': 19580, 'synset': 'ginger.n.01', 'name': 'ginger'}, {'id': 19581, 'synset': 'common_ginger.n.01', 'name': 'common_ginger'}, {'id': 19582, 'synset': 'turmeric.n.01', 'name': 'turmeric'}, {'id': 19583, 'synset': 'galangal.n.01', 'name': 'galangal'}, {'id': 19584, 'synset': 'shellflower.n.02', 'name': 'shellflower'}, {'id': 19585, 'synset': 'grains_of_paradise.n.01', 'name': 'grains_of_paradise'}, {'id': 19586, 'synset': 'cardamom.n.01', 'name': 'cardamom'}, {'id': 19587, 'synset': 'begonia.n.01', 'name': 'begonia'}, {'id': 19588, 'synset': 'fibrous-rooted_begonia.n.01', 'name': 'fibrous-rooted_begonia'}, {'id': 19589, 'synset': 'tuberous_begonia.n.01', 'name': 'tuberous_begonia'}, {'id': 19590, 'synset': 'rhizomatous_begonia.n.01', 'name': 'rhizomatous_begonia'}, {'id': 19591, 'synset': 'christmas_begonia.n.01', 'name': 'Christmas_begonia'}, {'id': 19592, 'synset': 'angel-wing_begonia.n.01', 'name': 'angel-wing_begonia'}, {'id': 19593, 'synset': 'beefsteak_begonia.n.01', 'name': 'beefsteak_begonia'}, {'id': 19594, 'synset': 'star_begonia.n.01', 'name': 'star_begonia'}, {'id': 19595, 'synset': 'rex_begonia.n.01', 'name': 'rex_begonia'}, {'id': 19596, 'synset': 'wax_begonia.n.01', 'name': 'wax_begonia'}, {'id': 19597, 'synset': 'socotra_begonia.n.01', 'name': 'Socotra_begonia'}, {'id': 19598, 'synset': 'hybrid_tuberous_begonia.n.01', 'name': 'hybrid_tuberous_begonia'}, {'id': 19599, 'synset': 'dillenia.n.01', 'name': 'dillenia'}, {'id': 19600, 'synset': 'guinea_gold_vine.n.01', 'name': 'guinea_gold_vine'}, {'id': 19601, 'synset': 'poon.n.02', 'name': 'poon'}, {'id': 19602, 'synset': 'calaba.n.01', 'name': 'calaba'}, {'id': 19603, 'synset': 'maria.n.02', 'name': 'Maria'}, {'id': 19604, 'synset': 'laurelwood.n.01', 'name': 'laurelwood'}, {'id': 19605, 'synset': 'alexandrian_laurel.n.01', 'name': 'Alexandrian_laurel'}, {'id': 19606, 'synset': 'clusia.n.01', 'name': 'clusia'}, {'id': 19607, 'synset': 'wild_fig.n.02', 'name': 'wild_fig'}, {'id': 19608, 'synset': 'waxflower.n.02', 'name': 'waxflower'}, {'id': 19609, 'synset': 'pitch_apple.n.01', 'name': 'pitch_apple'}, {'id': 19610, 'synset': 'mangosteen.n.01', 'name': 'mangosteen'}, {'id': 19611, 'synset': 'gamboge_tree.n.01', 'name': 'gamboge_tree'}, {'id': 19612, 'synset': "st_john's_wort.n.01", 'name': "St_John's_wort"}, {'id': 19613, 'synset': "common_st_john's_wort.n.01", 'name': "common_St_John's_wort"}, {'id': 19614, 'synset': "great_st_john's_wort.n.01", 'name': "great_St_John's_wort"}, {'id': 19615, 'synset': "creeping_st_john's_wort.n.01", 'name': "creeping_St_John's_wort"}, {'id': 19616, 'synset': "low_st_andrew's_cross.n.01", 'name': "low_St_Andrew's_cross"}, {'id': 19617, 'synset': 'klammath_weed.n.01', 'name': 'klammath_weed'}, {'id': 19618, 'synset': "shrubby_st_john's_wort.n.01", 'name': "shrubby_St_John's_wort"}, {'id': 19619, 'synset': "st_peter's_wort.n.01", 'name': "St_Peter's_wort"}, {'id': 19620, 'synset': "marsh_st-john's_wort.n.01", 'name': "marsh_St-John's_wort"}, {'id': 19621, 'synset': 'mammee_apple.n.01', 'name': 'mammee_apple'}, {'id': 19622, 'synset': 'rose_chestnut.n.01', 'name': 'rose_chestnut'}, {'id': 19623, 'synset': 'bower_actinidia.n.01', 'name': 'bower_actinidia'}, {'id': 19624, 'synset': 'chinese_gooseberry.n.01', 'name': 'Chinese_gooseberry'}, {'id': 19625, 'synset': 'silvervine.n.01', 'name': 'silvervine'}, {'id': 19626, 'synset': 'wild_cinnamon.n.01', 'name': 'wild_cinnamon'}, {'id': 19627, 'synset': 'papaya.n.01', 'name': 'papaya'}, {'id': 19628, 'synset': 'souari.n.01', 'name': 'souari'}, {'id': 19629, 'synset': 'rockrose.n.02', 'name': 'rockrose'}, {'id': 19630, 'synset': 'white-leaved_rockrose.n.01', 'name': 'white-leaved_rockrose'}, {'id': 19631, 'synset': 'common_gum_cistus.n.01', 'name': 'common_gum_cistus'}, {'id': 19632, 'synset': 'frostweed.n.01', 'name': 'frostweed'}, {'id': 19633, 'synset': 'dipterocarp.n.01', 'name': 'dipterocarp'}, {'id': 19634, 'synset': 'red_lauan.n.02', 'name': 'red_lauan'}, {'id': 19635, 'synset': "governor's_plum.n.01", 'name': "governor's_plum"}, {'id': 19636, 'synset': 'kei_apple.n.01', 'name': 'kei_apple'}, {'id': 19637, 'synset': 'ketembilla.n.01', 'name': 'ketembilla'}, {'id': 19638, 'synset': 'chaulmoogra.n.01', 'name': 'chaulmoogra'}, {'id': 19639, 'synset': 'wild_peach.n.01', 'name': 'wild_peach'}, {'id': 19640, 'synset': 'candlewood.n.01', 'name': 'candlewood'}, {'id': 19641, 'synset': 'boojum_tree.n.01', 'name': 'boojum_tree'}, {'id': 19642, 'synset': "bird's-eye_bush.n.01", 'name': "bird's-eye_bush"}, {'id': 19643, 'synset': 'granadilla.n.03', 'name': 'granadilla'}, {'id': 19644, 'synset': 'granadilla.n.02', 'name': 'granadilla'}, {'id': 19645, 'synset': 'granadilla.n.01', 'name': 'granadilla'}, {'id': 19646, 'synset': 'maypop.n.01', 'name': 'maypop'}, {'id': 19647, 'synset': 'jamaica_honeysuckle.n.01', 'name': 'Jamaica_honeysuckle'}, {'id': 19648, 'synset': 'banana_passion_fruit.n.01', 'name': 'banana_passion_fruit'}, {'id': 19649, 'synset': 'sweet_calabash.n.01', 'name': 'sweet_calabash'}, {'id': 19650, 'synset': 'love-in-a-mist.n.01', 'name': 'love-in-a-mist'}, {'id': 19651, 'synset': 'reseda.n.01', 'name': 'reseda'}, {'id': 19652, 'synset': 'mignonette.n.01', 'name': 'mignonette'}, {'id': 19653, 'synset': "dyer's_rocket.n.01", 'name': "dyer's_rocket"}, {'id': 19654, 'synset': 'false_tamarisk.n.01', 'name': 'false_tamarisk'}, {'id': 19655, 'synset': 'halophyte.n.01', 'name': 'halophyte'}, {'id': 19656, 'synset': 'viola.n.01', 'name': 'viola'}, {'id': 19657, 'synset': 'violet.n.01', 'name': 'violet'}, {'id': 19658, 'synset': 'field_pansy.n.01', 'name': 'field_pansy'}, {'id': 19659, 'synset': 'american_dog_violet.n.01', 'name': 'American_dog_violet'}, {'id': 19660, 'synset': 'dog_violet.n.01', 'name': 'dog_violet'}, {'id': 19661, 'synset': 'horned_violet.n.01', 'name': 'horned_violet'}, {'id': 19662, 'synset': 'two-eyed_violet.n.01', 'name': 'two-eyed_violet'}, {'id': 19663, 'synset': "bird's-foot_violet.n.01", 'name': "bird's-foot_violet"}, {'id': 19664, 'synset': 'downy_yellow_violet.n.01', 'name': 'downy_yellow_violet'}, {'id': 19665, 'synset': 'long-spurred_violet.n.01', 'name': 'long-spurred_violet'}, {'id': 19666, 'synset': 'pale_violet.n.01', 'name': 'pale_violet'}, {'id': 19667, 'synset': 'hedge_violet.n.01', 'name': 'hedge_violet'}, {'id': 19668, 'synset': 'nettle.n.01', 'name': 'nettle'}, {'id': 19669, 'synset': 'stinging_nettle.n.01', 'name': 'stinging_nettle'}, {'id': 19670, 'synset': 'roman_nettle.n.01', 'name': 'Roman_nettle'}, {'id': 19671, 'synset': 'ramie.n.01', 'name': 'ramie'}, {'id': 19672, 'synset': 'wood_nettle.n.01', 'name': 'wood_nettle'}, {'id': 19673, 'synset': 'australian_nettle.n.01', 'name': 'Australian_nettle'}, {'id': 19674, 'synset': 'pellitory-of-the-wall.n.01', 'name': 'pellitory-of-the-wall'}, {'id': 19675, 'synset': 'richweed.n.02', 'name': 'richweed'}, {'id': 19676, 'synset': 'artillery_plant.n.01', 'name': 'artillery_plant'}, {'id': 19677, 'synset': 'friendship_plant.n.01', 'name': 'friendship_plant'}, {'id': 19678, 'synset': 'queensland_grass-cloth_plant.n.01', 'name': 'Queensland_grass-cloth_plant'}, {'id': 19679, 'synset': 'pipturus_albidus.n.01', 'name': 'Pipturus_albidus'}, {'id': 19680, 'synset': 'cannabis.n.01', 'name': 'cannabis'}, {'id': 19681, 'synset': 'indian_hemp.n.01', 'name': 'Indian_hemp'}, {'id': 19682, 'synset': 'mulberry.n.01', 'name': 'mulberry'}, {'id': 19683, 'synset': 'white_mulberry.n.01', 'name': 'white_mulberry'}, {'id': 19684, 'synset': 'black_mulberry.n.01', 'name': 'black_mulberry'}, {'id': 19685, 'synset': 'red_mulberry.n.01', 'name': 'red_mulberry'}, {'id': 19686, 'synset': 'osage_orange.n.01', 'name': 'osage_orange'}, {'id': 19687, 'synset': 'breadfruit.n.01', 'name': 'breadfruit'}, {'id': 19688, 'synset': 'jackfruit.n.01', 'name': 'jackfruit'}, {'id': 19689, 'synset': 'marang.n.01', 'name': 'marang'}, {'id': 19690, 'synset': 'fig_tree.n.01', 'name': 'fig_tree'}, {'id': 19691, 'synset': 'fig.n.02', 'name': 'fig'}, {'id': 19692, 'synset': 'caprifig.n.01', 'name': 'caprifig'}, {'id': 19693, 'synset': 'golden_fig.n.01', 'name': 'golden_fig'}, {'id': 19694, 'synset': 'banyan.n.01', 'name': 'banyan'}, {'id': 19695, 'synset': 'pipal.n.01', 'name': 'pipal'}, {'id': 19696, 'synset': 'india-rubber_tree.n.01', 'name': 'India-rubber_tree'}, {'id': 19697, 'synset': 'mistletoe_fig.n.01', 'name': 'mistletoe_fig'}, {'id': 19698, 'synset': 'port_jackson_fig.n.01', 'name': 'Port_Jackson_fig'}, {'id': 19699, 'synset': 'sycamore.n.04', 'name': 'sycamore'}, {'id': 19700, 'synset': 'paper_mulberry.n.01', 'name': 'paper_mulberry'}, {'id': 19701, 'synset': 'trumpetwood.n.01', 'name': 'trumpetwood'}, {'id': 19702, 'synset': 'elm.n.01', 'name': 'elm'}, {'id': 19703, 'synset': 'winged_elm.n.01', 'name': 'winged_elm'}, {'id': 19704, 'synset': 'american_elm.n.01', 'name': 'American_elm'}, {'id': 19705, 'synset': 'smooth-leaved_elm.n.01', 'name': 'smooth-leaved_elm'}, {'id': 19706, 'synset': 'cedar_elm.n.01', 'name': 'cedar_elm'}, {'id': 19707, 'synset': 'witch_elm.n.01', 'name': 'witch_elm'}, {'id': 19708, 'synset': 'dutch_elm.n.01', 'name': 'Dutch_elm'}, {'id': 19709, 'synset': 'huntingdon_elm.n.01', 'name': 'Huntingdon_elm'}, {'id': 19710, 'synset': 'water_elm.n.01', 'name': 'water_elm'}, {'id': 19711, 'synset': 'chinese_elm.n.02', 'name': 'Chinese_elm'}, {'id': 19712, 'synset': 'english_elm.n.01', 'name': 'English_elm'}, {'id': 19713, 'synset': 'siberian_elm.n.01', 'name': 'Siberian_elm'}, {'id': 19714, 'synset': 'slippery_elm.n.01', 'name': 'slippery_elm'}, {'id': 19715, 'synset': 'jersey_elm.n.01', 'name': 'Jersey_elm'}, {'id': 19716, 'synset': 'september_elm.n.01', 'name': 'September_elm'}, {'id': 19717, 'synset': 'rock_elm.n.01', 'name': 'rock_elm'}, {'id': 19718, 'synset': 'hackberry.n.01', 'name': 'hackberry'}, {'id': 19719, 'synset': 'european_hackberry.n.01', 'name': 'European_hackberry'}, {'id': 19720, 'synset': 'american_hackberry.n.01', 'name': 'American_hackberry'}, {'id': 19721, 'synset': 'sugarberry.n.01', 'name': 'sugarberry'}, {'id': 19722, 'synset': 'iridaceous_plant.n.01', 'name': 'iridaceous_plant'}, {'id': 19723, 'synset': 'bearded_iris.n.01', 'name': 'bearded_iris'}, {'id': 19724, 'synset': 'beardless_iris.n.01', 'name': 'beardless_iris'}, {'id': 19725, 'synset': 'orrisroot.n.01', 'name': 'orrisroot'}, {'id': 19726, 'synset': 'dwarf_iris.n.02', 'name': 'dwarf_iris'}, {'id': 19727, 'synset': 'dutch_iris.n.02', 'name': 'Dutch_iris'}, {'id': 19728, 'synset': 'florentine_iris.n.01', 'name': 'Florentine_iris'}, {'id': 19729, 'synset': 'stinking_iris.n.01', 'name': 'stinking_iris'}, {'id': 19730, 'synset': 'german_iris.n.02', 'name': 'German_iris'}, {'id': 19731, 'synset': 'japanese_iris.n.01', 'name': 'Japanese_iris'}, {'id': 19732, 'synset': 'german_iris.n.01', 'name': 'German_iris'}, {'id': 19733, 'synset': 'dalmatian_iris.n.01', 'name': 'Dalmatian_iris'}, {'id': 19734, 'synset': 'persian_iris.n.01', 'name': 'Persian_iris'}, {'id': 19735, 'synset': 'dutch_iris.n.01', 'name': 'Dutch_iris'}, {'id': 19736, 'synset': 'dwarf_iris.n.01', 'name': 'dwarf_iris'}, {'id': 19737, 'synset': 'spanish_iris.n.01', 'name': 'Spanish_iris'}, {'id': 19738, 'synset': 'blackberry-lily.n.01', 'name': 'blackberry-lily'}, {'id': 19739, 'synset': 'crocus.n.01', 'name': 'crocus'}, {'id': 19740, 'synset': 'saffron.n.01', 'name': 'saffron'}, {'id': 19741, 'synset': 'corn_lily.n.01', 'name': 'corn_lily'}, {'id': 19742, 'synset': 'blue-eyed_grass.n.01', 'name': 'blue-eyed_grass'}, {'id': 19743, 'synset': 'wandflower.n.01', 'name': 'wandflower'}, {'id': 19744, 'synset': 'amaryllis.n.01', 'name': 'amaryllis'}, {'id': 19745, 'synset': 'salsilla.n.02', 'name': 'salsilla'}, {'id': 19746, 'synset': 'salsilla.n.01', 'name': 'salsilla'}, {'id': 19747, 'synset': 'blood_lily.n.01', 'name': 'blood_lily'}, {'id': 19748, 'synset': 'cape_tulip.n.01', 'name': 'Cape_tulip'}, {'id': 19749, 'synset': 'hippeastrum.n.01', 'name': 'hippeastrum'}, {'id': 19750, 'synset': 'narcissus.n.01', 'name': 'narcissus'}, {'id': 19751, 'synset': 'daffodil.n.01', 'name': 'daffodil'}, {'id': 19752, 'synset': 'jonquil.n.01', 'name': 'jonquil'}, {'id': 19753, 'synset': 'jonquil.n.02', 'name': 'jonquil'}, {'id': 19754, 'synset': 'jacobean_lily.n.01', 'name': 'Jacobean_lily'}, {'id': 19755, 'synset': 'liliaceous_plant.n.01', 'name': 'liliaceous_plant'}, {'id': 19756, 'synset': 'mountain_lily.n.01', 'name': 'mountain_lily'}, {'id': 19757, 'synset': 'canada_lily.n.01', 'name': 'Canada_lily'}, {'id': 19758, 'synset': 'tiger_lily.n.02', 'name': 'tiger_lily'}, {'id': 19759, 'synset': 'columbia_tiger_lily.n.01', 'name': 'Columbia_tiger_lily'}, {'id': 19760, 'synset': 'tiger_lily.n.01', 'name': 'tiger_lily'}, {'id': 19761, 'synset': 'easter_lily.n.01', 'name': 'Easter_lily'}, {'id': 19762, 'synset': 'coast_lily.n.01', 'name': 'coast_lily'}, {'id': 19763, 'synset': "turk's-cap.n.02", 'name': "Turk's-cap"}, {'id': 19764, 'synset': 'michigan_lily.n.01', 'name': 'Michigan_lily'}, {'id': 19765, 'synset': 'leopard_lily.n.01', 'name': 'leopard_lily'}, {'id': 19766, 'synset': "turk's-cap.n.01", 'name': "Turk's-cap"}, {'id': 19767, 'synset': 'african_lily.n.01', 'name': 'African_lily'}, {'id': 19768, 'synset': 'colicroot.n.01', 'name': 'colicroot'}, {'id': 19769, 'synset': 'ague_root.n.01', 'name': 'ague_root'}, {'id': 19770, 'synset': 'yellow_colicroot.n.01', 'name': 'yellow_colicroot'}, {'id': 19771, 'synset': 'alliaceous_plant.n.01', 'name': 'alliaceous_plant'}, {'id': 19772, 'synset': "hooker's_onion.n.01", 'name': "Hooker's_onion"}, {'id': 19773, 'synset': 'wild_leek.n.02', 'name': 'wild_leek'}, {'id': 19774, 'synset': 'canada_garlic.n.01', 'name': 'Canada_garlic'}, {'id': 19775, 'synset': 'keeled_garlic.n.01', 'name': 'keeled_garlic'}, {'id': 19776, 'synset': 'shallot.n.02', 'name': 'shallot'}, {'id': 19777, 'synset': 'nodding_onion.n.01', 'name': 'nodding_onion'}, {'id': 19778, 'synset': 'welsh_onion.n.01', 'name': 'Welsh_onion'}, {'id': 19779, 'synset': 'red-skinned_onion.n.01', 'name': 'red-skinned_onion'}, {'id': 19780, 'synset': 'daffodil_garlic.n.01', 'name': 'daffodil_garlic'}, {'id': 19781, 'synset': 'few-flowered_leek.n.01', 'name': 'few-flowered_leek'}, {'id': 19782, 'synset': 'garlic.n.01', 'name': 'garlic'}, {'id': 19783, 'synset': 'sand_leek.n.01', 'name': 'sand_leek'}, {'id': 19784, 'synset': 'chives.n.01', 'name': 'chives'}, {'id': 19785, 'synset': 'crow_garlic.n.01', 'name': 'crow_garlic'}, {'id': 19786, 'synset': 'wild_garlic.n.01', 'name': 'wild_garlic'}, {'id': 19787, 'synset': 'garlic_chive.n.01', 'name': 'garlic_chive'}, {'id': 19788, 'synset': 'round-headed_leek.n.01', 'name': 'round-headed_leek'}, {'id': 19789, 'synset': 'three-cornered_leek.n.01', 'name': 'three-cornered_leek'}, {'id': 19790, 'synset': 'cape_aloe.n.01', 'name': 'cape_aloe'}, {'id': 19791, 'synset': 'kniphofia.n.01', 'name': 'kniphofia'}, {'id': 19792, 'synset': 'poker_plant.n.01', 'name': 'poker_plant'}, {'id': 19793, 'synset': 'red-hot_poker.n.01', 'name': 'red-hot_poker'}, {'id': 19794, 'synset': 'fly_poison.n.01', 'name': 'fly_poison'}, {'id': 19795, 'synset': 'amber_lily.n.01', 'name': 'amber_lily'}, {'id': 19796, 'synset': 'asparagus.n.01', 'name': 'asparagus'}, {'id': 19797, 'synset': 'asparagus_fern.n.01', 'name': 'asparagus_fern'}, {'id': 19798, 'synset': 'smilax.n.02', 'name': 'smilax'}, {'id': 19799, 'synset': 'asphodel.n.01', 'name': 'asphodel'}, {'id': 19800, 'synset': "jacob's_rod.n.01", 'name': "Jacob's_rod"}, {'id': 19801, 'synset': 'aspidistra.n.01', 'name': 'aspidistra'}, {'id': 19802, 'synset': 'coral_drops.n.01', 'name': 'coral_drops'}, {'id': 19803, 'synset': 'christmas_bells.n.01', 'name': 'Christmas_bells'}, {'id': 19804, 'synset': 'climbing_onion.n.01', 'name': 'climbing_onion'}, {'id': 19805, 'synset': 'mariposa.n.01', 'name': 'mariposa'}, {'id': 19806, 'synset': 'globe_lily.n.01', 'name': 'globe_lily'}, {'id': 19807, 'synset': "cat's-ear.n.01", 'name': "cat's-ear"}, {'id': 19808, 'synset': 'white_globe_lily.n.01', 'name': 'white_globe_lily'}, {'id': 19809, 'synset': 'yellow_globe_lily.n.01', 'name': 'yellow_globe_lily'}, {'id': 19810, 'synset': 'rose_globe_lily.n.01', 'name': 'rose_globe_lily'}, {'id': 19811, 'synset': 'star_tulip.n.01', 'name': 'star_tulip'}, {'id': 19812, 'synset': 'desert_mariposa_tulip.n.01', 'name': 'desert_mariposa_tulip'}, {'id': 19813, 'synset': 'yellow_mariposa_tulip.n.01', 'name': 'yellow_mariposa_tulip'}, {'id': 19814, 'synset': 'sagebrush_mariposa_tulip.n.01', 'name': 'sagebrush_mariposa_tulip'}, {'id': 19815, 'synset': 'sego_lily.n.01', 'name': 'sego_lily'}, {'id': 19816, 'synset': 'camas.n.01', 'name': 'camas'}, {'id': 19817, 'synset': 'common_camas.n.01', 'name': 'common_camas'}, {'id': 19818, 'synset': "leichtlin's_camas.n.01", 'name': "Leichtlin's_camas"}, {'id': 19819, 'synset': 'wild_hyacinth.n.02', 'name': 'wild_hyacinth'}, {'id': 19820, 'synset': 'dogtooth_violet.n.01', 'name': 'dogtooth_violet'}, {'id': 19821, 'synset': 'white_dogtooth_violet.n.01', 'name': 'white_dogtooth_violet'}, {'id': 19822, 'synset': "yellow_adder's_tongue.n.01", 'name': "yellow_adder's_tongue"}, {'id': 19823, 'synset': 'european_dogtooth.n.01', 'name': 'European_dogtooth'}, {'id': 19824, 'synset': 'fawn_lily.n.01', 'name': 'fawn_lily'}, {'id': 19825, 'synset': 'glacier_lily.n.01', 'name': 'glacier_lily'}, {'id': 19826, 'synset': 'avalanche_lily.n.01', 'name': 'avalanche_lily'}, {'id': 19827, 'synset': 'fritillary.n.01', 'name': 'fritillary'}, {'id': 19828, 'synset': 'mission_bells.n.02', 'name': 'mission_bells'}, {'id': 19829, 'synset': 'mission_bells.n.01', 'name': 'mission_bells'}, {'id': 19830, 'synset': 'stink_bell.n.01', 'name': 'stink_bell'}, {'id': 19831, 'synset': 'crown_imperial.n.01', 'name': 'crown_imperial'}, {'id': 19832, 'synset': 'white_fritillary.n.01', 'name': 'white_fritillary'}, {'id': 19833, 'synset': "snake's_head_fritillary.n.01", 'name': "snake's_head_fritillary"}, {'id': 19834, 'synset': 'adobe_lily.n.01', 'name': 'adobe_lily'}, {'id': 19835, 'synset': 'scarlet_fritillary.n.01', 'name': 'scarlet_fritillary'}, {'id': 19836, 'synset': 'tulip.n.01', 'name': 'tulip'}, {'id': 19837, 'synset': 'dwarf_tulip.n.01', 'name': 'dwarf_tulip'}, {'id': 19838, 'synset': 'lady_tulip.n.01', 'name': 'lady_tulip'}, {'id': 19839, 'synset': 'tulipa_gesneriana.n.01', 'name': 'Tulipa_gesneriana'}, {'id': 19840, 'synset': 'cottage_tulip.n.01', 'name': 'cottage_tulip'}, {'id': 19841, 'synset': 'darwin_tulip.n.01', 'name': 'Darwin_tulip'}, {'id': 19842, 'synset': 'gloriosa.n.01', 'name': 'gloriosa'}, {'id': 19843, 'synset': 'lemon_lily.n.01', 'name': 'lemon_lily'}, {'id': 19844, 'synset': 'common_hyacinth.n.01', 'name': 'common_hyacinth'}, {'id': 19845, 'synset': 'roman_hyacinth.n.01', 'name': 'Roman_hyacinth'}, {'id': 19846, 'synset': 'summer_hyacinth.n.01', 'name': 'summer_hyacinth'}, {'id': 19847, 'synset': 'star-of-bethlehem.n.01', 'name': 'star-of-Bethlehem'}, {'id': 19848, 'synset': 'bath_asparagus.n.01', 'name': 'bath_asparagus'}, {'id': 19849, 'synset': 'grape_hyacinth.n.01', 'name': 'grape_hyacinth'}, {'id': 19850, 'synset': 'common_grape_hyacinth.n.01', 'name': 'common_grape_hyacinth'}, {'id': 19851, 'synset': 'tassel_hyacinth.n.01', 'name': 'tassel_hyacinth'}, {'id': 19852, 'synset': 'scilla.n.01', 'name': 'scilla'}, {'id': 19853, 'synset': 'spring_squill.n.01', 'name': 'spring_squill'}, {'id': 19854, 'synset': 'false_asphodel.n.01', 'name': 'false_asphodel'}, {'id': 19855, 'synset': 'scotch_asphodel.n.01', 'name': 'Scotch_asphodel'}, {'id': 19856, 'synset': 'sea_squill.n.01', 'name': 'sea_squill'}, {'id': 19857, 'synset': 'squill.n.01', 'name': 'squill'}, {'id': 19858, 'synset': "butcher's_broom.n.01", 'name': "butcher's_broom"}, {'id': 19859, 'synset': 'bog_asphodel.n.01', 'name': 'bog_asphodel'}, {'id': 19860, 'synset': 'european_bog_asphodel.n.01', 'name': 'European_bog_asphodel'}, {'id': 19861, 'synset': 'american_bog_asphodel.n.01', 'name': 'American_bog_asphodel'}, {'id': 19862, 'synset': 'hellebore.n.01', 'name': 'hellebore'}, {'id': 19863, 'synset': 'white_hellebore.n.01', 'name': 'white_hellebore'}, {'id': 19864, 'synset': 'squaw_grass.n.01', 'name': 'squaw_grass'}, {'id': 19865, 'synset': 'death_camas.n.01', 'name': 'death_camas'}, {'id': 19866, 'synset': 'alkali_grass.n.01', 'name': 'alkali_grass'}, {'id': 19867, 'synset': 'white_camas.n.01', 'name': 'white_camas'}, {'id': 19868, 'synset': 'poison_camas.n.01', 'name': 'poison_camas'}, {'id': 19869, 'synset': 'grassy_death_camas.n.01', 'name': 'grassy_death_camas'}, {'id': 19870, 'synset': 'prairie_wake-robin.n.01', 'name': 'prairie_wake-robin'}, {'id': 19871, 'synset': 'dwarf-white_trillium.n.01', 'name': 'dwarf-white_trillium'}, {'id': 19872, 'synset': 'herb_paris.n.01', 'name': 'herb_Paris'}, {'id': 19873, 'synset': 'sarsaparilla.n.01', 'name': 'sarsaparilla'}, {'id': 19874, 'synset': 'bullbrier.n.01', 'name': 'bullbrier'}, {'id': 19875, 'synset': 'rough_bindweed.n.01', 'name': 'rough_bindweed'}, {'id': 19876, 'synset': 'clintonia.n.01', 'name': 'clintonia'}, {'id': 19877, 'synset': 'false_lily_of_the_valley.n.02', 'name': 'false_lily_of_the_valley'}, {'id': 19878, 'synset': 'false_lily_of_the_valley.n.01', 'name': 'false_lily_of_the_valley'}, {'id': 19879, 'synset': "solomon's-seal.n.01", 'name': "Solomon's-seal"}, {'id': 19880, 'synset': "great_solomon's-seal.n.01", 'name': "great_Solomon's-seal"}, {'id': 19881, 'synset': 'bellwort.n.01', 'name': 'bellwort'}, {'id': 19882, 'synset': 'strawflower.n.01', 'name': 'strawflower'}, {'id': 19883, 'synset': 'pia.n.01', 'name': 'pia'}, {'id': 19884, 'synset': 'agave.n.01', 'name': 'agave'}, {'id': 19885, 'synset': 'american_agave.n.01', 'name': 'American_agave'}, {'id': 19886, 'synset': 'sisal.n.02', 'name': 'sisal'}, {'id': 19887, 'synset': 'maguey.n.02', 'name': 'maguey'}, {'id': 19888, 'synset': 'maguey.n.01', 'name': 'maguey'}, {'id': 19889, 'synset': 'agave_tequilana.n.01', 'name': 'Agave_tequilana'}, {'id': 19890, 'synset': 'cabbage_tree.n.03', 'name': 'cabbage_tree'}, {'id': 19891, 'synset': 'dracaena.n.01', 'name': 'dracaena'}, {'id': 19892, 'synset': 'tuberose.n.01', 'name': 'tuberose'}, {'id': 19893, 'synset': 'sansevieria.n.01', 'name': 'sansevieria'}, {'id': 19894, 'synset': 'african_bowstring_hemp.n.01', 'name': 'African_bowstring_hemp'}, {'id': 19895, 'synset': 'ceylon_bowstring_hemp.n.01', 'name': 'Ceylon_bowstring_hemp'}, {'id': 19896, 'synset': "mother-in-law's_tongue.n.01", 'name': "mother-in-law's_tongue"}, {'id': 19897, 'synset': 'spanish_bayonet.n.02', 'name': 'Spanish_bayonet'}, {'id': 19898, 'synset': 'spanish_bayonet.n.01', 'name': 'Spanish_bayonet'}, {'id': 19899, 'synset': 'joshua_tree.n.01', 'name': 'Joshua_tree'}, {'id': 19900, 'synset': 'soapweed.n.01', 'name': 'soapweed'}, {'id': 19901, 'synset': "adam's_needle.n.01", 'name': "Adam's_needle"}, {'id': 19902, 'synset': 'bear_grass.n.02', 'name': 'bear_grass'}, {'id': 19903, 'synset': 'spanish_dagger.n.01', 'name': 'Spanish_dagger'}, {'id': 19904, 'synset': "our_lord's_candle.n.01", 'name': "Our_Lord's_candle"}, {'id': 19905, 'synset': 'water_shamrock.n.01', 'name': 'water_shamrock'}, {'id': 19906, 'synset': 'butterfly_bush.n.01', 'name': 'butterfly_bush'}, {'id': 19907, 'synset': 'yellow_jasmine.n.01', 'name': 'yellow_jasmine'}, {'id': 19908, 'synset': 'flax.n.02', 'name': 'flax'}, {'id': 19909, 'synset': 'calabar_bean.n.01', 'name': 'calabar_bean'}, {'id': 19910, 'synset': 'bonduc.n.02', 'name': 'bonduc'}, {'id': 19911, 'synset': 'divi-divi.n.02', 'name': 'divi-divi'}, {'id': 19912, 'synset': 'mysore_thorn.n.01', 'name': 'Mysore_thorn'}, {'id': 19913, 'synset': 'brazilian_ironwood.n.01', 'name': 'brazilian_ironwood'}, {'id': 19914, 'synset': 'bird_of_paradise.n.01', 'name': 'bird_of_paradise'}, {'id': 19915, 'synset': 'shingle_tree.n.01', 'name': 'shingle_tree'}, {'id': 19916, 'synset': 'mountain_ebony.n.01', 'name': 'mountain_ebony'}, {'id': 19917, 'synset': 'msasa.n.01', 'name': 'msasa'}, {'id': 19918, 'synset': 'cassia.n.01', 'name': 'cassia'}, {'id': 19919, 'synset': 'golden_shower_tree.n.01', 'name': 'golden_shower_tree'}, {'id': 19920, 'synset': 'pink_shower.n.01', 'name': 'pink_shower'}, {'id': 19921, 'synset': 'rainbow_shower.n.01', 'name': 'rainbow_shower'}, {'id': 19922, 'synset': 'horse_cassia.n.01', 'name': 'horse_cassia'}, {'id': 19923, 'synset': 'carob.n.02', 'name': 'carob'}, {'id': 19924, 'synset': 'carob.n.01', 'name': 'carob'}, {'id': 19925, 'synset': 'paloverde.n.01', 'name': 'paloverde'}, {'id': 19926, 'synset': 'royal_poinciana.n.01', 'name': 'royal_poinciana'}, {'id': 19927, 'synset': 'locust_tree.n.01', 'name': 'locust_tree'}, {'id': 19928, 'synset': 'water_locust.n.01', 'name': 'water_locust'}, {'id': 19929, 'synset': 'honey_locust.n.01', 'name': 'honey_locust'}, {'id': 19930, 'synset': 'kentucky_coffee_tree.n.01', 'name': 'Kentucky_coffee_tree'}, {'id': 19931, 'synset': 'logwood.n.02', 'name': 'logwood'}, {'id': 19932, 'synset': 'jerusalem_thorn.n.03', 'name': 'Jerusalem_thorn'}, {'id': 19933, 'synset': 'palo_verde.n.01', 'name': 'palo_verde'}, {'id': 19934, 'synset': 'dalmatian_laburnum.n.01', 'name': 'Dalmatian_laburnum'}, {'id': 19935, 'synset': 'senna.n.01', 'name': 'senna'}, {'id': 19936, 'synset': 'avaram.n.01', 'name': 'avaram'}, {'id': 19937, 'synset': 'alexandria_senna.n.01', 'name': 'Alexandria_senna'}, {'id': 19938, 'synset': 'wild_senna.n.01', 'name': 'wild_senna'}, {'id': 19939, 'synset': 'sicklepod.n.01', 'name': 'sicklepod'}, {'id': 19940, 'synset': 'coffee_senna.n.01', 'name': 'coffee_senna'}, {'id': 19941, 'synset': 'tamarind.n.01', 'name': 'tamarind'}, {'id': 19942, 'synset': 'false_indigo.n.03', 'name': 'false_indigo'}, {'id': 19943, 'synset': 'false_indigo.n.02', 'name': 'false_indigo'}, {'id': 19944, 'synset': 'hog_peanut.n.01', 'name': 'hog_peanut'}, {'id': 19945, 'synset': 'angelim.n.01', 'name': 'angelim'}, {'id': 19946, 'synset': 'cabbage_bark.n.01', 'name': 'cabbage_bark'}, {'id': 19947, 'synset': 'kidney_vetch.n.01', 'name': 'kidney_vetch'}, {'id': 19948, 'synset': 'groundnut.n.01', 'name': 'groundnut'}, {'id': 19949, 'synset': 'rooibos.n.01', 'name': 'rooibos'}, {'id': 19950, 'synset': 'milk_vetch.n.01', 'name': 'milk_vetch'}, {'id': 19951, 'synset': 'alpine_milk_vetch.n.01', 'name': 'alpine_milk_vetch'}, {'id': 19952, 'synset': 'purple_milk_vetch.n.01', 'name': 'purple_milk_vetch'}, {'id': 19953, 'synset': 'camwood.n.01', 'name': 'camwood'}, {'id': 19954, 'synset': 'wild_indigo.n.01', 'name': 'wild_indigo'}, {'id': 19955, 'synset': 'blue_false_indigo.n.01', 'name': 'blue_false_indigo'}, {'id': 19956, 'synset': 'white_false_indigo.n.01', 'name': 'white_false_indigo'}, {'id': 19957, 'synset': 'indigo_broom.n.01', 'name': 'indigo_broom'}, {'id': 19958, 'synset': 'dhak.n.01', 'name': 'dhak'}, {'id': 19959, 'synset': 'pigeon_pea.n.01', 'name': 'pigeon_pea'}, {'id': 19960, 'synset': 'sword_bean.n.01', 'name': 'sword_bean'}, {'id': 19961, 'synset': 'pea_tree.n.01', 'name': 'pea_tree'}, {'id': 19962, 'synset': 'siberian_pea_tree.n.01', 'name': 'Siberian_pea_tree'}, {'id': 19963, 'synset': 'chinese_pea_tree.n.01', 'name': 'Chinese_pea_tree'}, {'id': 19964, 'synset': 'moreton_bay_chestnut.n.01', 'name': 'Moreton_Bay_chestnut'}, {'id': 19965, 'synset': 'butterfly_pea.n.03', 'name': 'butterfly_pea'}, {'id': 19966, 'synset': 'judas_tree.n.01', 'name': 'Judas_tree'}, {'id': 19967, 'synset': 'redbud.n.01', 'name': 'redbud'}, {'id': 19968, 'synset': 'western_redbud.n.01', 'name': 'western_redbud'}, {'id': 19969, 'synset': 'tagasaste.n.01', 'name': 'tagasaste'}, {'id': 19970, 'synset': 'weeping_tree_broom.n.01', 'name': 'weeping_tree_broom'}, {'id': 19971, 'synset': 'flame_pea.n.01', 'name': 'flame_pea'}, {'id': 19972, 'synset': 'chickpea.n.02', 'name': 'chickpea'}, {'id': 19973, 'synset': 'kentucky_yellowwood.n.01', 'name': 'Kentucky_yellowwood'}, {'id': 19974, 'synset': 'glory_pea.n.01', 'name': 'glory_pea'}, {'id': 19975, 'synset': 'desert_pea.n.01', 'name': 'desert_pea'}, {'id': 19976, 'synset': "parrot's_beak.n.01", 'name': "parrot's_beak"}, {'id': 19977, 'synset': 'butterfly_pea.n.02', 'name': 'butterfly_pea'}, {'id': 19978, 'synset': 'blue_pea.n.01', 'name': 'blue_pea'}, {'id': 19979, 'synset': 'telegraph_plant.n.01', 'name': 'telegraph_plant'}, {'id': 19980, 'synset': 'bladder_senna.n.01', 'name': 'bladder_senna'}, {'id': 19981, 'synset': 'axseed.n.01', 'name': 'axseed'}, {'id': 19982, 'synset': 'crotalaria.n.01', 'name': 'crotalaria'}, {'id': 19983, 'synset': 'guar.n.01', 'name': 'guar'}, {'id': 19984, 'synset': 'white_broom.n.01', 'name': 'white_broom'}, {'id': 19985, 'synset': 'common_broom.n.01', 'name': 'common_broom'}, {'id': 19986, 'synset': 'rosewood.n.02', 'name': 'rosewood'}, {'id': 19987, 'synset': 'indian_blackwood.n.01', 'name': 'Indian_blackwood'}, {'id': 19988, 'synset': 'sissoo.n.01', 'name': 'sissoo'}, {'id': 19989, 'synset': 'kingwood.n.02', 'name': 'kingwood'}, {'id': 19990, 'synset': 'brazilian_rosewood.n.01', 'name': 'Brazilian_rosewood'}, {'id': 19991, 'synset': 'cocobolo.n.01', 'name': 'cocobolo'}, {'id': 19992, 'synset': 'blackwood.n.02', 'name': 'blackwood'}, {'id': 19993, 'synset': 'bitter_pea.n.01', 'name': 'bitter_pea'}, {'id': 19994, 'synset': 'derris.n.01', 'name': 'derris'}, {'id': 19995, 'synset': 'derris_root.n.01', 'name': 'derris_root'}, {'id': 19996, 'synset': 'prairie_mimosa.n.01', 'name': 'prairie_mimosa'}, {'id': 19997, 'synset': 'tick_trefoil.n.01', 'name': 'tick_trefoil'}, {'id': 19998, 'synset': 'beggarweed.n.01', 'name': 'beggarweed'}, {'id': 19999, 'synset': 'australian_pea.n.01', 'name': 'Australian_pea'}, {'id': 20000, 'synset': 'coral_tree.n.01', 'name': 'coral_tree'}, {'id': 20001, 'synset': 'kaffir_boom.n.02', 'name': 'kaffir_boom'}, {'id': 20002, 'synset': 'coral_bean_tree.n.01', 'name': 'coral_bean_tree'}, {'id': 20003, 'synset': 'ceibo.n.01', 'name': 'ceibo'}, {'id': 20004, 'synset': 'kaffir_boom.n.01', 'name': 'kaffir_boom'}, {'id': 20005, 'synset': 'indian_coral_tree.n.01', 'name': 'Indian_coral_tree'}, {'id': 20006, 'synset': 'cork_tree.n.02', 'name': 'cork_tree'}, {'id': 20007, 'synset': "goat's_rue.n.02", 'name': "goat's_rue"}, {'id': 20008, 'synset': 'poison_bush.n.01', 'name': 'poison_bush'}, {'id': 20009, 'synset': 'spanish_broom.n.02', 'name': 'Spanish_broom'}, {'id': 20010, 'synset': 'woodwaxen.n.01', 'name': 'woodwaxen'}, {'id': 20011, 'synset': 'chanar.n.01', 'name': 'chanar'}, {'id': 20012, 'synset': 'gliricidia.n.01', 'name': 'gliricidia'}, {'id': 20013, 'synset': 'soy.n.01', 'name': 'soy'}, {'id': 20014, 'synset': 'licorice.n.01', 'name': 'licorice'}, {'id': 20015, 'synset': 'wild_licorice.n.02', 'name': 'wild_licorice'}, {'id': 20016, 'synset': 'licorice_root.n.01', 'name': 'licorice_root'}, {'id': 20017, 'synset': 'western_australia_coral_pea.n.01', 'name': 'Western_Australia_coral_pea'}, {'id': 20018, 'synset': 'sweet_vetch.n.01', 'name': 'sweet_vetch'}, {'id': 20019, 'synset': 'french_honeysuckle.n.02', 'name': 'French_honeysuckle'}, {'id': 20020, 'synset': 'anil.n.02', 'name': 'anil'}, {'id': 20021, 'synset': 'scarlet_runner.n.02', 'name': 'scarlet_runner'}, {'id': 20022, 'synset': 'hyacinth_bean.n.01', 'name': 'hyacinth_bean'}, {'id': 20023, 'synset': 'scotch_laburnum.n.01', 'name': 'Scotch_laburnum'}, {'id': 20024, 'synset': 'vetchling.n.01', 'name': 'vetchling'}, {'id': 20025, 'synset': 'wild_pea.n.01', 'name': 'wild_pea'}, {'id': 20026, 'synset': 'everlasting_pea.n.01', 'name': 'everlasting_pea'}, {'id': 20027, 'synset': 'beach_pea.n.01', 'name': 'beach_pea'}, {'id': 20028, 'synset': 'grass_vetch.n.01', 'name': 'grass_vetch'}, {'id': 20029, 'synset': 'marsh_pea.n.01', 'name': 'marsh_pea'}, {'id': 20030, 'synset': 'common_vetchling.n.01', 'name': 'common_vetchling'}, {'id': 20031, 'synset': 'grass_pea.n.01', 'name': 'grass_pea'}, {'id': 20032, 'synset': 'tangier_pea.n.01', 'name': 'Tangier_pea'}, {'id': 20033, 'synset': 'heath_pea.n.01', 'name': 'heath_pea'}, {'id': 20034, 'synset': 'bicolor_lespediza.n.01', 'name': 'bicolor_lespediza'}, {'id': 20035, 'synset': 'japanese_clover.n.01', 'name': 'japanese_clover'}, {'id': 20036, 'synset': 'korean_lespedeza.n.01', 'name': 'Korean_lespedeza'}, {'id': 20037, 'synset': 'sericea_lespedeza.n.01', 'name': 'sericea_lespedeza'}, {'id': 20038, 'synset': 'lentil.n.03', 'name': 'lentil'}, {'id': 20039, 'synset': 'lentil.n.02', 'name': 'lentil'}, {'id': 20040, 'synset': "prairie_bird's-foot_trefoil.n.01", 'name': "prairie_bird's-foot_trefoil"}, {'id': 20041, 'synset': "bird's_foot_trefoil.n.02", 'name': "bird's_foot_trefoil"}, {'id': 20042, 'synset': 'winged_pea.n.02', 'name': 'winged_pea'}, {'id': 20043, 'synset': 'lupine.n.01', 'name': 'lupine'}, {'id': 20044, 'synset': 'white_lupine.n.01', 'name': 'white_lupine'}, {'id': 20045, 'synset': 'tree_lupine.n.01', 'name': 'tree_lupine'}, {'id': 20046, 'synset': 'wild_lupine.n.01', 'name': 'wild_lupine'}, {'id': 20047, 'synset': 'bluebonnet.n.01', 'name': 'bluebonnet'}, {'id': 20048, 'synset': 'texas_bluebonnet.n.01', 'name': 'Texas_bluebonnet'}, {'id': 20049, 'synset': 'medic.n.01', 'name': 'medic'}, {'id': 20050, 'synset': 'moon_trefoil.n.01', 'name': 'moon_trefoil'}, {'id': 20051, 'synset': 'sickle_alfalfa.n.01', 'name': 'sickle_alfalfa'}, {'id': 20052, 'synset': 'calvary_clover.n.01', 'name': 'Calvary_clover'}, {'id': 20053, 'synset': 'black_medick.n.01', 'name': 'black_medick'}, {'id': 20054, 'synset': 'alfalfa.n.01', 'name': 'alfalfa'}, {'id': 20055, 'synset': 'millettia.n.01', 'name': 'millettia'}, {'id': 20056, 'synset': 'mucuna.n.01', 'name': 'mucuna'}, {'id': 20057, 'synset': 'cowage.n.02', 'name': 'cowage'}, {'id': 20058, 'synset': 'tolu_tree.n.01', 'name': 'tolu_tree'}, {'id': 20059, 'synset': 'peruvian_balsam.n.01', 'name': 'Peruvian_balsam'}, {'id': 20060, 'synset': 'sainfoin.n.01', 'name': 'sainfoin'}, {'id': 20061, 'synset': 'restharrow.n.02', 'name': 'restharrow'}, {'id': 20062, 'synset': 'bead_tree.n.01', 'name': 'bead_tree'}, {'id': 20063, 'synset': 'jumby_bead.n.01', 'name': 'jumby_bead'}, {'id': 20064, 'synset': 'locoweed.n.01', 'name': 'locoweed'}, {'id': 20065, 'synset': 'purple_locoweed.n.01', 'name': 'purple_locoweed'}, {'id': 20066, 'synset': 'tumbleweed.n.01', 'name': 'tumbleweed'}, {'id': 20067, 'synset': 'yam_bean.n.02', 'name': 'yam_bean'}, {'id': 20068, 'synset': 'shamrock_pea.n.01', 'name': 'shamrock_pea'}, {'id': 20069, 'synset': 'pole_bean.n.01', 'name': 'pole_bean'}, {'id': 20070, 'synset': 'kidney_bean.n.01', 'name': 'kidney_bean'}, {'id': 20071, 'synset': 'haricot.n.01', 'name': 'haricot'}, {'id': 20072, 'synset': 'wax_bean.n.01', 'name': 'wax_bean'}, {'id': 20073, 'synset': 'scarlet_runner.n.01', 'name': 'scarlet_runner'}, {'id': 20074, 'synset': 'lima_bean.n.02', 'name': 'lima_bean'}, {'id': 20075, 'synset': 'sieva_bean.n.01', 'name': 'sieva_bean'}, {'id': 20076, 'synset': 'tepary_bean.n.01', 'name': 'tepary_bean'}, {'id': 20077, 'synset': 'chaparral_pea.n.01', 'name': 'chaparral_pea'}, {'id': 20078, 'synset': 'jamaica_dogwood.n.01', 'name': 'Jamaica_dogwood'}, {'id': 20079, 'synset': 'pea.n.02', 'name': 'pea'}, {'id': 20080, 'synset': 'garden_pea.n.01', 'name': 'garden_pea'}, {'id': 20081, 'synset': 'edible-pod_pea.n.01', 'name': 'edible-pod_pea'}, {'id': 20082, 'synset': 'sugar_snap_pea.n.01', 'name': 'sugar_snap_pea'}, {'id': 20083, 'synset': 'field_pea.n.02', 'name': 'field_pea'}, {'id': 20084, 'synset': 'field_pea.n.01', 'name': 'field_pea'}, {'id': 20085, 'synset': 'common_flat_pea.n.01', 'name': 'common_flat_pea'}, {'id': 20086, 'synset': 'quira.n.02', 'name': 'quira'}, {'id': 20087, 'synset': 'roble.n.01', 'name': 'roble'}, {'id': 20088, 'synset': 'panama_redwood_tree.n.01', 'name': 'Panama_redwood_tree'}, {'id': 20089, 'synset': 'indian_beech.n.01', 'name': 'Indian_beech'}, {'id': 20090, 'synset': 'winged_bean.n.01', 'name': 'winged_bean'}, {'id': 20091, 'synset': 'breadroot.n.01', 'name': 'breadroot'}, {'id': 20092, 'synset': 'bloodwood_tree.n.01', 'name': 'bloodwood_tree'}, {'id': 20093, 'synset': 'kino.n.02', 'name': 'kino'}, {'id': 20094, 'synset': 'red_sandalwood.n.02', 'name': 'red_sandalwood'}, {'id': 20095, 'synset': 'kudzu.n.01', 'name': 'kudzu'}, {'id': 20096, 'synset': 'bristly_locust.n.01', 'name': 'bristly_locust'}, {'id': 20097, 'synset': 'black_locust.n.02', 'name': 'black_locust'}, {'id': 20098, 'synset': 'clammy_locust.n.01', 'name': 'clammy_locust'}, {'id': 20099, 'synset': 'carib_wood.n.01', 'name': 'carib_wood'}, {'id': 20100, 'synset': 'colorado_river_hemp.n.01', 'name': 'Colorado_River_hemp'}, {'id': 20101, 'synset': 'scarlet_wisteria_tree.n.01', 'name': 'scarlet_wisteria_tree'}, {'id': 20102, 'synset': 'japanese_pagoda_tree.n.01', 'name': 'Japanese_pagoda_tree'}, {'id': 20103, 'synset': 'mescal_bean.n.01', 'name': 'mescal_bean'}, {'id': 20104, 'synset': 'kowhai.n.01', 'name': 'kowhai'}, {'id': 20105, 'synset': 'jade_vine.n.01', 'name': 'jade_vine'}, {'id': 20106, 'synset': 'hoary_pea.n.01', 'name': 'hoary_pea'}, {'id': 20107, 'synset': 'bastard_indigo.n.01', 'name': 'bastard_indigo'}, {'id': 20108, 'synset': 'catgut.n.01', 'name': 'catgut'}, {'id': 20109, 'synset': 'bush_pea.n.01', 'name': 'bush_pea'}, {'id': 20110, 'synset': 'false_lupine.n.01', 'name': 'false_lupine'}, {'id': 20111, 'synset': 'carolina_lupine.n.01', 'name': 'Carolina_lupine'}, {'id': 20112, 'synset': 'tipu.n.01', 'name': 'tipu'}, {'id': 20113, 'synset': "bird's_foot_trefoil.n.01", 'name': "bird's_foot_trefoil"}, {'id': 20114, 'synset': 'fenugreek.n.01', 'name': 'fenugreek'}, {'id': 20115, 'synset': 'gorse.n.01', 'name': 'gorse'}, {'id': 20116, 'synset': 'vetch.n.01', 'name': 'vetch'}, {'id': 20117, 'synset': 'tufted_vetch.n.01', 'name': 'tufted_vetch'}, {'id': 20118, 'synset': 'broad_bean.n.01', 'name': 'broad_bean'}, {'id': 20119, 'synset': 'bitter_betch.n.01', 'name': 'bitter_betch'}, {'id': 20120, 'synset': 'bush_vetch.n.01', 'name': 'bush_vetch'}, {'id': 20121, 'synset': 'moth_bean.n.01', 'name': 'moth_bean'}, {'id': 20122, 'synset': 'snailflower.n.01', 'name': 'snailflower'}, {'id': 20123, 'synset': 'mung.n.01', 'name': 'mung'}, {'id': 20124, 'synset': 'cowpea.n.02', 'name': 'cowpea'}, {'id': 20125, 'synset': 'cowpea.n.01', 'name': 'cowpea'}, {'id': 20126, 'synset': 'asparagus_bean.n.01', 'name': 'asparagus_bean'}, {'id': 20127, 'synset': 'swamp_oak.n.01', 'name': 'swamp_oak'}, {'id': 20128, 'synset': 'keurboom.n.02', 'name': 'keurboom'}, {'id': 20129, 'synset': 'keurboom.n.01', 'name': 'keurboom'}, {'id': 20130, 'synset': 'japanese_wistaria.n.01', 'name': 'Japanese_wistaria'}, {'id': 20131, 'synset': 'chinese_wistaria.n.01', 'name': 'Chinese_wistaria'}, {'id': 20132, 'synset': 'american_wistaria.n.01', 'name': 'American_wistaria'}, {'id': 20133, 'synset': 'silky_wisteria.n.01', 'name': 'silky_wisteria'}, {'id': 20134, 'synset': 'palm.n.03', 'name': 'palm'}, {'id': 20135, 'synset': 'sago_palm.n.01', 'name': 'sago_palm'}, {'id': 20136, 'synset': 'feather_palm.n.01', 'name': 'feather_palm'}, {'id': 20137, 'synset': 'fan_palm.n.01', 'name': 'fan_palm'}, {'id': 20138, 'synset': 'palmetto.n.01', 'name': 'palmetto'}, {'id': 20139, 'synset': 'coyol.n.01', 'name': 'coyol'}, {'id': 20140, 'synset': 'grugru.n.01', 'name': 'grugru'}, {'id': 20141, 'synset': 'areca.n.01', 'name': 'areca'}, {'id': 20142, 'synset': 'betel_palm.n.01', 'name': 'betel_palm'}, {'id': 20143, 'synset': 'sugar_palm.n.01', 'name': 'sugar_palm'}, {'id': 20144, 'synset': 'piassava_palm.n.01', 'name': 'piassava_palm'}, {'id': 20145, 'synset': 'coquilla_nut.n.01', 'name': 'coquilla_nut'}, {'id': 20146, 'synset': 'palmyra.n.01', 'name': 'palmyra'}, {'id': 20147, 'synset': 'calamus.n.01', 'name': 'calamus'}, {'id': 20148, 'synset': 'rattan.n.01', 'name': 'rattan'}, {'id': 20149, 'synset': 'lawyer_cane.n.01', 'name': 'lawyer_cane'}, {'id': 20150, 'synset': 'fishtail_palm.n.01', 'name': 'fishtail_palm'}, {'id': 20151, 'synset': 'wine_palm.n.01', 'name': 'wine_palm'}, {'id': 20152, 'synset': 'wax_palm.n.03', 'name': 'wax_palm'}, {'id': 20153, 'synset': 'coconut.n.03', 'name': 'coconut'}, {'id': 20154, 'synset': 'carnauba.n.02', 'name': 'carnauba'}, {'id': 20155, 'synset': 'caranday.n.01', 'name': 'caranday'}, {'id': 20156, 'synset': 'corozo.n.01', 'name': 'corozo'}, {'id': 20157, 'synset': 'gebang_palm.n.01', 'name': 'gebang_palm'}, {'id': 20158, 'synset': 'latanier.n.01', 'name': 'latanier'}, {'id': 20159, 'synset': 'talipot.n.01', 'name': 'talipot'}, {'id': 20160, 'synset': 'oil_palm.n.01', 'name': 'oil_palm'}, {'id': 20161, 'synset': 'african_oil_palm.n.01', 'name': 'African_oil_palm'}, {'id': 20162, 'synset': 'american_oil_palm.n.01', 'name': 'American_oil_palm'}, {'id': 20163, 'synset': 'palm_nut.n.01', 'name': 'palm_nut'}, {'id': 20164, 'synset': 'cabbage_palm.n.04', 'name': 'cabbage_palm'}, {'id': 20165, 'synset': 'cabbage_palm.n.03', 'name': 'cabbage_palm'}, {'id': 20166, 'synset': 'true_sago_palm.n.01', 'name': 'true_sago_palm'}, {'id': 20167, 'synset': 'nipa_palm.n.01', 'name': 'nipa_palm'}, {'id': 20168, 'synset': 'babassu.n.01', 'name': 'babassu'}, {'id': 20169, 'synset': 'babassu_nut.n.01', 'name': 'babassu_nut'}, {'id': 20170, 'synset': 'cohune_palm.n.01', 'name': 'cohune_palm'}, {'id': 20171, 'synset': 'cohune_nut.n.01', 'name': 'cohune_nut'}, {'id': 20172, 'synset': 'date_palm.n.01', 'name': 'date_palm'}, {'id': 20173, 'synset': 'ivory_palm.n.01', 'name': 'ivory_palm'}, {'id': 20174, 'synset': 'raffia_palm.n.01', 'name': 'raffia_palm'}, {'id': 20175, 'synset': 'bamboo_palm.n.02', 'name': 'bamboo_palm'}, {'id': 20176, 'synset': 'lady_palm.n.01', 'name': 'lady_palm'}, {'id': 20177, 'synset': 'miniature_fan_palm.n.01', 'name': 'miniature_fan_palm'}, {'id': 20178, 'synset': 'reed_rhapis.n.01', 'name': 'reed_rhapis'}, {'id': 20179, 'synset': 'royal_palm.n.01', 'name': 'royal_palm'}, {'id': 20180, 'synset': 'cabbage_palm.n.02', 'name': 'cabbage_palm'}, {'id': 20181, 'synset': 'cabbage_palmetto.n.01', 'name': 'cabbage_palmetto'}, {'id': 20182, 'synset': 'saw_palmetto.n.01', 'name': 'saw_palmetto'}, {'id': 20183, 'synset': 'thatch_palm.n.01', 'name': 'thatch_palm'}, {'id': 20184, 'synset': 'key_palm.n.01', 'name': 'key_palm'}, {'id': 20185, 'synset': 'english_plantain.n.01', 'name': 'English_plantain'}, {'id': 20186, 'synset': 'broad-leaved_plantain.n.02', 'name': 'broad-leaved_plantain'}, {'id': 20187, 'synset': 'hoary_plantain.n.02', 'name': 'hoary_plantain'}, {'id': 20188, 'synset': 'fleawort.n.01', 'name': 'fleawort'}, {'id': 20189, 'synset': "rugel's_plantain.n.01", 'name': "rugel's_plantain"}, {'id': 20190, 'synset': 'hoary_plantain.n.01', 'name': 'hoary_plantain'}, {'id': 20191, 'synset': 'buckwheat.n.01', 'name': 'buckwheat'}, {'id': 20192, 'synset': "prince's-feather.n.01", 'name': "prince's-feather"}, {'id': 20193, 'synset': 'eriogonum.n.01', 'name': 'eriogonum'}, {'id': 20194, 'synset': 'umbrella_plant.n.02', 'name': 'umbrella_plant'}, {'id': 20195, 'synset': 'wild_buckwheat.n.01', 'name': 'wild_buckwheat'}, {'id': 20196, 'synset': 'rhubarb.n.02', 'name': 'rhubarb'}, {'id': 20197, 'synset': 'himalayan_rhubarb.n.01', 'name': 'Himalayan_rhubarb'}, {'id': 20198, 'synset': 'pie_plant.n.01', 'name': 'pie_plant'}, {'id': 20199, 'synset': 'chinese_rhubarb.n.01', 'name': 'Chinese_rhubarb'}, {'id': 20200, 'synset': 'sour_dock.n.01', 'name': 'sour_dock'}, {'id': 20201, 'synset': 'sheep_sorrel.n.01', 'name': 'sheep_sorrel'}, {'id': 20202, 'synset': 'bitter_dock.n.01', 'name': 'bitter_dock'}, {'id': 20203, 'synset': 'french_sorrel.n.01', 'name': 'French_sorrel'}, {'id': 20204, 'synset': 'yellow-eyed_grass.n.01', 'name': 'yellow-eyed_grass'}, {'id': 20205, 'synset': 'commelina.n.01', 'name': 'commelina'}, {'id': 20206, 'synset': 'spiderwort.n.01', 'name': 'spiderwort'}, {'id': 20207, 'synset': 'pineapple.n.01', 'name': 'pineapple'}, {'id': 20208, 'synset': 'pipewort.n.01', 'name': 'pipewort'}, {'id': 20209, 'synset': 'water_hyacinth.n.01', 'name': 'water_hyacinth'}, {'id': 20210, 'synset': 'water_star_grass.n.01', 'name': 'water_star_grass'}, {'id': 20211, 'synset': 'naiad.n.01', 'name': 'naiad'}, {'id': 20212, 'synset': 'water_plantain.n.01', 'name': 'water_plantain'}, {'id': 20213, 'synset': 'narrow-leaved_water_plantain.n.01', 'name': 'narrow-leaved_water_plantain'}, {'id': 20214, 'synset': 'hydrilla.n.01', 'name': 'hydrilla'}, {'id': 20215, 'synset': 'american_frogbit.n.01', 'name': 'American_frogbit'}, {'id': 20216, 'synset': 'waterweed.n.01', 'name': 'waterweed'}, {'id': 20217, 'synset': 'canadian_pondweed.n.01', 'name': 'Canadian_pondweed'}, {'id': 20218, 'synset': 'tape_grass.n.01', 'name': 'tape_grass'}, {'id': 20219, 'synset': 'pondweed.n.01', 'name': 'pondweed'}, {'id': 20220, 'synset': 'curled_leaf_pondweed.n.01', 'name': 'curled_leaf_pondweed'}, {'id': 20221, 'synset': 'loddon_pondweed.n.01', 'name': 'loddon_pondweed'}, {'id': 20222, 'synset': "frog's_lettuce.n.01", 'name': "frog's_lettuce"}, {'id': 20223, 'synset': 'arrow_grass.n.01', 'name': 'arrow_grass'}, {'id': 20224, 'synset': 'horned_pondweed.n.01', 'name': 'horned_pondweed'}, {'id': 20225, 'synset': 'eelgrass.n.01', 'name': 'eelgrass'}, {'id': 20226, 'synset': 'rose.n.01', 'name': 'rose'}, {'id': 20227, 'synset': 'hip.n.05', 'name': 'hip'}, {'id': 20228, 'synset': 'banksia_rose.n.01', 'name': 'banksia_rose'}, {'id': 20229, 'synset': 'damask_rose.n.01', 'name': 'damask_rose'}, {'id': 20230, 'synset': 'sweetbrier.n.01', 'name': 'sweetbrier'}, {'id': 20231, 'synset': 'cherokee_rose.n.01', 'name': 'Cherokee_rose'}, {'id': 20232, 'synset': 'musk_rose.n.01', 'name': 'musk_rose'}, {'id': 20233, 'synset': 'agrimonia.n.01', 'name': 'agrimonia'}, {'id': 20234, 'synset': 'harvest-lice.n.01', 'name': 'harvest-lice'}, {'id': 20235, 'synset': 'fragrant_agrimony.n.01', 'name': 'fragrant_agrimony'}, {'id': 20236, 'synset': 'alderleaf_juneberry.n.01', 'name': 'alderleaf_Juneberry'}, {'id': 20237, 'synset': 'flowering_quince.n.01', 'name': 'flowering_quince'}, {'id': 20238, 'synset': 'japonica.n.02', 'name': 'japonica'}, {'id': 20239, 'synset': 'coco_plum.n.01', 'name': 'coco_plum'}, {'id': 20240, 'synset': 'cotoneaster.n.01', 'name': 'cotoneaster'}, {'id': 20241, 'synset': 'cotoneaster_dammeri.n.01', 'name': 'Cotoneaster_dammeri'}, {'id': 20242, 'synset': 'cotoneaster_horizontalis.n.01', 'name': 'Cotoneaster_horizontalis'}, {'id': 20243, 'synset': 'parsley_haw.n.01', 'name': 'parsley_haw'}, {'id': 20244, 'synset': 'scarlet_haw.n.01', 'name': 'scarlet_haw'}, {'id': 20245, 'synset': 'blackthorn.n.02', 'name': 'blackthorn'}, {'id': 20246, 'synset': 'cockspur_thorn.n.01', 'name': 'cockspur_thorn'}, {'id': 20247, 'synset': 'mayhaw.n.01', 'name': 'mayhaw'}, {'id': 20248, 'synset': 'red_haw.n.02', 'name': 'red_haw'}, {'id': 20249, 'synset': 'red_haw.n.01', 'name': 'red_haw'}, {'id': 20250, 'synset': 'quince.n.01', 'name': 'quince'}, {'id': 20251, 'synset': 'mountain_avens.n.01', 'name': 'mountain_avens'}, {'id': 20252, 'synset': 'loquat.n.01', 'name': 'loquat'}, {'id': 20253, 'synset': 'beach_strawberry.n.01', 'name': 'beach_strawberry'}, {'id': 20254, 'synset': 'virginia_strawberry.n.01', 'name': 'Virginia_strawberry'}, {'id': 20255, 'synset': 'avens.n.01', 'name': 'avens'}, {'id': 20256, 'synset': 'yellow_avens.n.02', 'name': 'yellow_avens'}, {'id': 20257, 'synset': 'yellow_avens.n.01', 'name': 'yellow_avens'}, {'id': 20258, 'synset': 'prairie_smoke.n.01', 'name': 'prairie_smoke'}, {'id': 20259, 'synset': 'bennet.n.01', 'name': 'bennet'}, {'id': 20260, 'synset': 'toyon.n.01', 'name': 'toyon'}, {'id': 20261, 'synset': 'apple_tree.n.01', 'name': 'apple_tree'}, {'id': 20262, 'synset': 'apple.n.02', 'name': 'apple'}, {'id': 20263, 'synset': 'wild_apple.n.01', 'name': 'wild_apple'}, {'id': 20264, 'synset': 'crab_apple.n.01', 'name': 'crab_apple'}, {'id': 20265, 'synset': 'siberian_crab.n.01', 'name': 'Siberian_crab'}, {'id': 20266, 'synset': 'wild_crab.n.01', 'name': 'wild_crab'}, {'id': 20267, 'synset': 'american_crab_apple.n.01', 'name': 'American_crab_apple'}, {'id': 20268, 'synset': 'oregon_crab_apple.n.01', 'name': 'Oregon_crab_apple'}, {'id': 20269, 'synset': 'southern_crab_apple.n.01', 'name': 'Southern_crab_apple'}, {'id': 20270, 'synset': 'iowa_crab.n.01', 'name': 'Iowa_crab'}, {'id': 20271, 'synset': 'bechtel_crab.n.01', 'name': 'Bechtel_crab'}, {'id': 20272, 'synset': 'medlar.n.02', 'name': 'medlar'}, {'id': 20273, 'synset': 'cinquefoil.n.01', 'name': 'cinquefoil'}, {'id': 20274, 'synset': 'silverweed.n.02', 'name': 'silverweed'}, {'id': 20275, 'synset': 'salad_burnet.n.01', 'name': 'salad_burnet'}, {'id': 20276, 'synset': 'plum.n.01', 'name': 'plum'}, {'id': 20277, 'synset': 'wild_plum.n.01', 'name': 'wild_plum'}, {'id': 20278, 'synset': 'allegheny_plum.n.01', 'name': 'Allegheny_plum'}, {'id': 20279, 'synset': 'american_red_plum.n.01', 'name': 'American_red_plum'}, {'id': 20280, 'synset': 'chickasaw_plum.n.01', 'name': 'chickasaw_plum'}, {'id': 20281, 'synset': 'beach_plum.n.01', 'name': 'beach_plum'}, {'id': 20282, 'synset': 'common_plum.n.01', 'name': 'common_plum'}, {'id': 20283, 'synset': 'bullace.n.01', 'name': 'bullace'}, {'id': 20284, 'synset': 'damson_plum.n.02', 'name': 'damson_plum'}, {'id': 20285, 'synset': 'big-tree_plum.n.01', 'name': 'big-tree_plum'}, {'id': 20286, 'synset': 'canada_plum.n.01', 'name': 'Canada_plum'}, {'id': 20287, 'synset': 'plumcot.n.01', 'name': 'plumcot'}, {'id': 20288, 'synset': 'apricot.n.01', 'name': 'apricot'}, {'id': 20289, 'synset': 'japanese_apricot.n.01', 'name': 'Japanese_apricot'}, {'id': 20290, 'synset': 'common_apricot.n.01', 'name': 'common_apricot'}, {'id': 20291, 'synset': 'purple_apricot.n.01', 'name': 'purple_apricot'}, {'id': 20292, 'synset': 'cherry.n.02', 'name': 'cherry'}, {'id': 20293, 'synset': 'wild_cherry.n.02', 'name': 'wild_cherry'}, {'id': 20294, 'synset': 'wild_cherry.n.01', 'name': 'wild_cherry'}, {'id': 20295, 'synset': 'sweet_cherry.n.01', 'name': 'sweet_cherry'}, {'id': 20296, 'synset': 'heart_cherry.n.01', 'name': 'heart_cherry'}, {'id': 20297, 'synset': 'gean.n.01', 'name': 'gean'}, {'id': 20298, 'synset': 'capulin.n.01', 'name': 'capulin'}, {'id': 20299, 'synset': 'cherry_laurel.n.02', 'name': 'cherry_laurel'}, {'id': 20300, 'synset': 'cherry_plum.n.01', 'name': 'cherry_plum'}, {'id': 20301, 'synset': 'sour_cherry.n.01', 'name': 'sour_cherry'}, {'id': 20302, 'synset': 'amarelle.n.01', 'name': 'amarelle'}, {'id': 20303, 'synset': 'morello.n.01', 'name': 'morello'}, {'id': 20304, 'synset': 'marasca.n.01', 'name': 'marasca'}, {'id': 20305, 'synset': 'almond_tree.n.01', 'name': 'almond_tree'}, {'id': 20306, 'synset': 'almond.n.01', 'name': 'almond'}, {'id': 20307, 'synset': 'bitter_almond.n.01', 'name': 'bitter_almond'}, {'id': 20308, 'synset': 'jordan_almond.n.01', 'name': 'jordan_almond'}, {'id': 20309, 'synset': 'dwarf_flowering_almond.n.01', 'name': 'dwarf_flowering_almond'}, {'id': 20310, 'synset': 'holly-leaved_cherry.n.01', 'name': 'holly-leaved_cherry'}, {'id': 20311, 'synset': 'fuji.n.01', 'name': 'fuji'}, {'id': 20312, 'synset': 'flowering_almond.n.02', 'name': 'flowering_almond'}, {'id': 20313, 'synset': 'cherry_laurel.n.01', 'name': 'cherry_laurel'}, {'id': 20314, 'synset': 'catalina_cherry.n.01', 'name': 'Catalina_cherry'}, {'id': 20315, 'synset': 'bird_cherry.n.01', 'name': 'bird_cherry'}, {'id': 20316, 'synset': 'hagberry_tree.n.01', 'name': 'hagberry_tree'}, {'id': 20317, 'synset': 'hagberry.n.01', 'name': 'hagberry'}, {'id': 20318, 'synset': 'pin_cherry.n.01', 'name': 'pin_cherry'}, {'id': 20319, 'synset': 'peach.n.01', 'name': 'peach'}, {'id': 20320, 'synset': 'nectarine.n.01', 'name': 'nectarine'}, {'id': 20321, 'synset': 'sand_cherry.n.01', 'name': 'sand_cherry'}, {'id': 20322, 'synset': 'japanese_plum.n.01', 'name': 'Japanese_plum'}, {'id': 20323, 'synset': 'black_cherry.n.01', 'name': 'black_cherry'}, {'id': 20324, 'synset': 'flowering_cherry.n.01', 'name': 'flowering_cherry'}, {'id': 20325, 'synset': 'oriental_cherry.n.01', 'name': 'oriental_cherry'}, {'id': 20326, 'synset': 'japanese_flowering_cherry.n.01', 'name': 'Japanese_flowering_cherry'}, {'id': 20327, 'synset': 'sierra_plum.n.01', 'name': 'Sierra_plum'}, {'id': 20328, 'synset': 'rosebud_cherry.n.01', 'name': 'rosebud_cherry'}, {'id': 20329, 'synset': 'russian_almond.n.01', 'name': 'Russian_almond'}, {'id': 20330, 'synset': 'flowering_almond.n.01', 'name': 'flowering_almond'}, {'id': 20331, 'synset': 'chokecherry.n.02', 'name': 'chokecherry'}, {'id': 20332, 'synset': 'chokecherry.n.01', 'name': 'chokecherry'}, {'id': 20333, 'synset': 'western_chokecherry.n.01', 'name': 'western_chokecherry'}, {'id': 20334, 'synset': 'pyracantha.n.01', 'name': 'Pyracantha'}, {'id': 20335, 'synset': 'pear.n.02', 'name': 'pear'}, {'id': 20336, 'synset': 'fruit_tree.n.01', 'name': 'fruit_tree'}, {'id': 20337, 'synset': 'bramble_bush.n.01', 'name': 'bramble_bush'}, {'id': 20338, 'synset': 'lawyerbush.n.01', 'name': 'lawyerbush'}, {'id': 20339, 'synset': 'stone_bramble.n.01', 'name': 'stone_bramble'}, {'id': 20340, 'synset': 'sand_blackberry.n.01', 'name': 'sand_blackberry'}, {'id': 20341, 'synset': 'boysenberry.n.01', 'name': 'boysenberry'}, {'id': 20342, 'synset': 'loganberry.n.01', 'name': 'loganberry'}, {'id': 20343, 'synset': 'american_dewberry.n.02', 'name': 'American_dewberry'}, {'id': 20344, 'synset': 'northern_dewberry.n.01', 'name': 'Northern_dewberry'}, {'id': 20345, 'synset': 'southern_dewberry.n.01', 'name': 'Southern_dewberry'}, {'id': 20346, 'synset': 'swamp_dewberry.n.01', 'name': 'swamp_dewberry'}, {'id': 20347, 'synset': 'european_dewberry.n.01', 'name': 'European_dewberry'}, {'id': 20348, 'synset': 'raspberry.n.01', 'name': 'raspberry'}, {'id': 20349, 'synset': 'wild_raspberry.n.01', 'name': 'wild_raspberry'}, {'id': 20350, 'synset': 'american_raspberry.n.01', 'name': 'American_raspberry'}, {'id': 20351, 'synset': 'black_raspberry.n.01', 'name': 'black_raspberry'}, {'id': 20352, 'synset': 'salmonberry.n.03', 'name': 'salmonberry'}, {'id': 20353, 'synset': 'salmonberry.n.02', 'name': 'salmonberry'}, {'id': 20354, 'synset': 'wineberry.n.01', 'name': 'wineberry'}, {'id': 20355, 'synset': 'mountain_ash.n.01', 'name': 'mountain_ash'}, {'id': 20356, 'synset': 'rowan.n.01', 'name': 'rowan'}, {'id': 20357, 'synset': 'rowanberry.n.01', 'name': 'rowanberry'}, {'id': 20358, 'synset': 'american_mountain_ash.n.01', 'name': 'American_mountain_ash'}, {'id': 20359, 'synset': 'western_mountain_ash.n.01', 'name': 'Western_mountain_ash'}, {'id': 20360, 'synset': 'service_tree.n.01', 'name': 'service_tree'}, {'id': 20361, 'synset': 'wild_service_tree.n.01', 'name': 'wild_service_tree'}, {'id': 20362, 'synset': 'spirea.n.02', 'name': 'spirea'}, {'id': 20363, 'synset': 'bridal_wreath.n.02', 'name': 'bridal_wreath'}, {'id': 20364, 'synset': 'madderwort.n.01', 'name': 'madderwort'}, {'id': 20365, 'synset': 'indian_madder.n.01', 'name': 'Indian_madder'}, {'id': 20366, 'synset': 'madder.n.01', 'name': 'madder'}, {'id': 20367, 'synset': 'woodruff.n.02', 'name': 'woodruff'}, {'id': 20368, 'synset': 'dagame.n.01', 'name': 'dagame'}, {'id': 20369, 'synset': 'blolly.n.01', 'name': 'blolly'}, {'id': 20370, 'synset': 'coffee.n.02', 'name': 'coffee'}, {'id': 20371, 'synset': 'arabian_coffee.n.01', 'name': 'Arabian_coffee'}, {'id': 20372, 'synset': 'liberian_coffee.n.01', 'name': 'Liberian_coffee'}, {'id': 20373, 'synset': 'robusta_coffee.n.01', 'name': 'robusta_coffee'}, {'id': 20374, 'synset': 'cinchona.n.02', 'name': 'cinchona'}, {'id': 20375, 'synset': 'cartagena_bark.n.01', 'name': 'Cartagena_bark'}, {'id': 20376, 'synset': 'calisaya.n.01', 'name': 'calisaya'}, {'id': 20377, 'synset': 'cinchona_tree.n.01', 'name': 'cinchona_tree'}, {'id': 20378, 'synset': 'cinchona.n.01', 'name': 'cinchona'}, {'id': 20379, 'synset': 'bedstraw.n.01', 'name': 'bedstraw'}, {'id': 20380, 'synset': 'sweet_woodruff.n.01', 'name': 'sweet_woodruff'}, {'id': 20381, 'synset': 'northern_bedstraw.n.01', 'name': 'Northern_bedstraw'}, {'id': 20382, 'synset': 'yellow_bedstraw.n.01', 'name': 'yellow_bedstraw'}, {'id': 20383, 'synset': 'wild_licorice.n.01', 'name': 'wild_licorice'}, {'id': 20384, 'synset': 'cleavers.n.01', 'name': 'cleavers'}, {'id': 20385, 'synset': 'wild_madder.n.01', 'name': 'wild_madder'}, {'id': 20386, 'synset': 'cape_jasmine.n.01', 'name': 'cape_jasmine'}, {'id': 20387, 'synset': 'genipa.n.01', 'name': 'genipa'}, {'id': 20388, 'synset': 'genipap_fruit.n.01', 'name': 'genipap_fruit'}, {'id': 20389, 'synset': 'hamelia.n.01', 'name': 'hamelia'}, {'id': 20390, 'synset': 'scarlet_bush.n.01', 'name': 'scarlet_bush'}, {'id': 20391, 'synset': 'lemonwood.n.02', 'name': 'lemonwood'}, {'id': 20392, 'synset': 'negro_peach.n.01', 'name': 'negro_peach'}, {'id': 20393, 'synset': 'wild_medlar.n.01', 'name': 'wild_medlar'}, {'id': 20394, 'synset': 'spanish_tamarind.n.01', 'name': 'Spanish_tamarind'}, {'id': 20395, 'synset': 'abelia.n.01', 'name': 'abelia'}, {'id': 20396, 'synset': 'bush_honeysuckle.n.02', 'name': 'bush_honeysuckle'}, {'id': 20397, 'synset': 'american_twinflower.n.01', 'name': 'American_twinflower'}, {'id': 20398, 'synset': 'honeysuckle.n.01', 'name': 'honeysuckle'}, {'id': 20399, 'synset': 'american_fly_honeysuckle.n.01', 'name': 'American_fly_honeysuckle'}, {'id': 20400, 'synset': 'italian_honeysuckle.n.01', 'name': 'Italian_honeysuckle'}, {'id': 20401, 'synset': 'yellow_honeysuckle.n.01', 'name': 'yellow_honeysuckle'}, {'id': 20402, 'synset': 'hairy_honeysuckle.n.01', 'name': 'hairy_honeysuckle'}, {'id': 20403, 'synset': 'japanese_honeysuckle.n.01', 'name': 'Japanese_honeysuckle'}, {'id': 20404, 'synset': "hall's_honeysuckle.n.01", 'name': "Hall's_honeysuckle"}, {'id': 20405, 'synset': "morrow's_honeysuckle.n.01", 'name': "Morrow's_honeysuckle"}, {'id': 20406, 'synset': 'woodbine.n.02', 'name': 'woodbine'}, {'id': 20407, 'synset': 'trumpet_honeysuckle.n.01', 'name': 'trumpet_honeysuckle'}, {'id': 20408, 'synset': 'european_fly_honeysuckle.n.01', 'name': 'European_fly_honeysuckle'}, {'id': 20409, 'synset': 'swamp_fly_honeysuckle.n.01', 'name': 'swamp_fly_honeysuckle'}, {'id': 20410, 'synset': 'snowberry.n.01', 'name': 'snowberry'}, {'id': 20411, 'synset': 'coralberry.n.01', 'name': 'coralberry'}, {'id': 20412, 'synset': 'blue_elder.n.01', 'name': 'blue_elder'}, {'id': 20413, 'synset': 'dwarf_elder.n.01', 'name': 'dwarf_elder'}, {'id': 20414, 'synset': 'american_red_elder.n.01', 'name': 'American_red_elder'}, {'id': 20415, 'synset': 'european_red_elder.n.01', 'name': 'European_red_elder'}, {'id': 20416, 'synset': 'feverroot.n.01', 'name': 'feverroot'}, {'id': 20417, 'synset': 'cranberry_bush.n.01', 'name': 'cranberry_bush'}, {'id': 20418, 'synset': 'wayfaring_tree.n.01', 'name': 'wayfaring_tree'}, {'id': 20419, 'synset': 'guelder_rose.n.01', 'name': 'guelder_rose'}, {'id': 20420, 'synset': 'arrow_wood.n.01', 'name': 'arrow_wood'}, {'id': 20421, 'synset': 'black_haw.n.02', 'name': 'black_haw'}, {'id': 20422, 'synset': 'weigela.n.01', 'name': 'weigela'}, {'id': 20423, 'synset': 'teasel.n.01', 'name': 'teasel'}, {'id': 20424, 'synset': 'common_teasel.n.01', 'name': 'common_teasel'}, {'id': 20425, 'synset': "fuller's_teasel.n.01", 'name': "fuller's_teasel"}, {'id': 20426, 'synset': 'wild_teasel.n.01', 'name': 'wild_teasel'}, {'id': 20427, 'synset': 'scabious.n.01', 'name': 'scabious'}, {'id': 20428, 'synset': 'sweet_scabious.n.01', 'name': 'sweet_scabious'}, {'id': 20429, 'synset': 'field_scabious.n.01', 'name': 'field_scabious'}, {'id': 20430, 'synset': 'jewelweed.n.01', 'name': 'jewelweed'}, {'id': 20431, 'synset': 'geranium.n.01', 'name': 'geranium'}, {'id': 20432, 'synset': 'cranesbill.n.01', 'name': 'cranesbill'}, {'id': 20433, 'synset': 'wild_geranium.n.01', 'name': 'wild_geranium'}, {'id': 20434, 'synset': 'meadow_cranesbill.n.01', 'name': 'meadow_cranesbill'}, {'id': 20435, 'synset': "richardson's_geranium.n.01", 'name': "Richardson's_geranium"}, {'id': 20436, 'synset': 'herb_robert.n.01', 'name': 'herb_robert'}, {'id': 20437, 'synset': 'sticky_geranium.n.01', 'name': 'sticky_geranium'}, {'id': 20438, 'synset': "dove's_foot_geranium.n.01", 'name': "dove's_foot_geranium"}, {'id': 20439, 'synset': 'rose_geranium.n.01', 'name': 'rose_geranium'}, {'id': 20440, 'synset': 'fish_geranium.n.01', 'name': 'fish_geranium'}, {'id': 20441, 'synset': 'ivy_geranium.n.01', 'name': 'ivy_geranium'}, {'id': 20442, 'synset': 'apple_geranium.n.01', 'name': 'apple_geranium'}, {'id': 20443, 'synset': 'lemon_geranium.n.01', 'name': 'lemon_geranium'}, {'id': 20444, 'synset': 'storksbill.n.01', 'name': 'storksbill'}, {'id': 20445, 'synset': 'musk_clover.n.01', 'name': 'musk_clover'}, {'id': 20446, 'synset': 'incense_tree.n.01', 'name': 'incense_tree'}, {'id': 20447, 'synset': 'elephant_tree.n.01', 'name': 'elephant_tree'}, {'id': 20448, 'synset': 'gumbo-limbo.n.01', 'name': 'gumbo-limbo'}, {'id': 20449, 'synset': 'boswellia_carteri.n.01', 'name': 'Boswellia_carteri'}, {'id': 20450, 'synset': 'salai.n.01', 'name': 'salai'}, {'id': 20451, 'synset': 'balm_of_gilead.n.03', 'name': 'balm_of_gilead'}, {'id': 20452, 'synset': 'myrrh_tree.n.01', 'name': 'myrrh_tree'}, {'id': 20453, 'synset': 'protium_heptaphyllum.n.01', 'name': 'Protium_heptaphyllum'}, {'id': 20454, 'synset': 'protium_guianense.n.01', 'name': 'Protium_guianense'}, {'id': 20455, 'synset': 'water_starwort.n.01', 'name': 'water_starwort'}, {'id': 20456, 'synset': 'barbados_cherry.n.01', 'name': 'barbados_cherry'}, {'id': 20457, 'synset': 'mahogany.n.02', 'name': 'mahogany'}, {'id': 20458, 'synset': 'chinaberry.n.02', 'name': 'chinaberry'}, {'id': 20459, 'synset': 'neem.n.01', 'name': 'neem'}, {'id': 20460, 'synset': 'neem_seed.n.01', 'name': 'neem_seed'}, {'id': 20461, 'synset': 'spanish_cedar.n.01', 'name': 'Spanish_cedar'}, {'id': 20462, 'synset': 'satinwood.n.03', 'name': 'satinwood'}, {'id': 20463, 'synset': 'african_scented_mahogany.n.01', 'name': 'African_scented_mahogany'}, {'id': 20464, 'synset': 'silver_ash.n.01', 'name': 'silver_ash'}, {'id': 20465, 'synset': 'native_beech.n.01', 'name': 'native_beech'}, {'id': 20466, 'synset': 'bunji-bunji.n.01', 'name': 'bunji-bunji'}, {'id': 20467, 'synset': 'african_mahogany.n.01', 'name': 'African_mahogany'}, {'id': 20468, 'synset': 'lanseh_tree.n.01', 'name': 'lanseh_tree'}, {'id': 20469, 'synset': 'true_mahogany.n.01', 'name': 'true_mahogany'}, {'id': 20470, 'synset': 'honduras_mahogany.n.01', 'name': 'Honduras_mahogany'}, {'id': 20471, 'synset': 'philippine_mahogany.n.02', 'name': 'Philippine_mahogany'}, {'id': 20472, 'synset': 'caracolito.n.01', 'name': 'caracolito'}, {'id': 20473, 'synset': 'common_wood_sorrel.n.01', 'name': 'common_wood_sorrel'}, {'id': 20474, 'synset': 'bermuda_buttercup.n.01', 'name': 'Bermuda_buttercup'}, {'id': 20475, 'synset': 'creeping_oxalis.n.01', 'name': 'creeping_oxalis'}, {'id': 20476, 'synset': 'goatsfoot.n.01', 'name': 'goatsfoot'}, {'id': 20477, 'synset': 'violet_wood_sorrel.n.01', 'name': 'violet_wood_sorrel'}, {'id': 20478, 'synset': 'oca.n.01', 'name': 'oca'}, {'id': 20479, 'synset': 'carambola.n.01', 'name': 'carambola'}, {'id': 20480, 'synset': 'bilimbi.n.01', 'name': 'bilimbi'}, {'id': 20481, 'synset': 'milkwort.n.01', 'name': 'milkwort'}, {'id': 20482, 'synset': 'senega.n.02', 'name': 'senega'}, {'id': 20483, 'synset': 'orange_milkwort.n.01', 'name': 'orange_milkwort'}, {'id': 20484, 'synset': 'flowering_wintergreen.n.01', 'name': 'flowering_wintergreen'}, {'id': 20485, 'synset': 'seneca_snakeroot.n.01', 'name': 'Seneca_snakeroot'}, {'id': 20486, 'synset': 'common_milkwort.n.01', 'name': 'common_milkwort'}, {'id': 20487, 'synset': 'rue.n.01', 'name': 'rue'}, {'id': 20488, 'synset': 'citrus.n.02', 'name': 'citrus'}, {'id': 20489, 'synset': 'orange.n.03', 'name': 'orange'}, {'id': 20490, 'synset': 'sour_orange.n.01', 'name': 'sour_orange'}, {'id': 20491, 'synset': 'bergamot.n.01', 'name': 'bergamot'}, {'id': 20492, 'synset': 'pomelo.n.01', 'name': 'pomelo'}, {'id': 20493, 'synset': 'citron.n.02', 'name': 'citron'}, {'id': 20494, 'synset': 'grapefruit.n.01', 'name': 'grapefruit'}, {'id': 20495, 'synset': 'mandarin.n.01', 'name': 'mandarin'}, {'id': 20496, 'synset': 'tangerine.n.01', 'name': 'tangerine'}, {'id': 20497, 'synset': 'satsuma.n.01', 'name': 'satsuma'}, {'id': 20498, 'synset': 'sweet_orange.n.02', 'name': 'sweet_orange'}, {'id': 20499, 'synset': 'temple_orange.n.01', 'name': 'temple_orange'}, {'id': 20500, 'synset': 'tangelo.n.01', 'name': 'tangelo'}, {'id': 20501, 'synset': 'rangpur.n.01', 'name': 'rangpur'}, {'id': 20502, 'synset': 'lemon.n.03', 'name': 'lemon'}, {'id': 20503, 'synset': 'sweet_lemon.n.01', 'name': 'sweet_lemon'}, {'id': 20504, 'synset': 'lime.n.04', 'name': 'lime'}, {'id': 20505, 'synset': 'citrange.n.01', 'name': 'citrange'}, {'id': 20506, 'synset': 'fraxinella.n.01', 'name': 'fraxinella'}, {'id': 20507, 'synset': 'kumquat.n.01', 'name': 'kumquat'}, {'id': 20508, 'synset': 'marumi.n.01', 'name': 'marumi'}, {'id': 20509, 'synset': 'nagami.n.01', 'name': 'nagami'}, {'id': 20510, 'synset': 'cork_tree.n.01', 'name': 'cork_tree'}, {'id': 20511, 'synset': 'trifoliate_orange.n.01', 'name': 'trifoliate_orange'}, {'id': 20512, 'synset': 'prickly_ash.n.01', 'name': 'prickly_ash'}, {'id': 20513, 'synset': 'toothache_tree.n.01', 'name': 'toothache_tree'}, {'id': 20514, 'synset': "hercules'-club.n.01", 'name': "Hercules'-club"}, {'id': 20515, 'synset': 'bitterwood_tree.n.01', 'name': 'bitterwood_tree'}, {'id': 20516, 'synset': 'marupa.n.01', 'name': 'marupa'}, {'id': 20517, 'synset': 'paradise_tree.n.01', 'name': 'paradise_tree'}, {'id': 20518, 'synset': 'ailanthus.n.01', 'name': 'ailanthus'}, {'id': 20519, 'synset': 'tree_of_heaven.n.01', 'name': 'tree_of_heaven'}, {'id': 20520, 'synset': 'wild_mango.n.01', 'name': 'wild_mango'}, {'id': 20521, 'synset': 'pepper_tree.n.02', 'name': 'pepper_tree'}, {'id': 20522, 'synset': 'jamaica_quassia.n.02', 'name': 'Jamaica_quassia'}, {'id': 20523, 'synset': 'quassia.n.02', 'name': 'quassia'}, {'id': 20524, 'synset': 'nasturtium.n.01', 'name': 'nasturtium'}, {'id': 20525, 'synset': 'garden_nasturtium.n.01', 'name': 'garden_nasturtium'}, {'id': 20526, 'synset': 'bush_nasturtium.n.01', 'name': 'bush_nasturtium'}, {'id': 20527, 'synset': 'canarybird_flower.n.01', 'name': 'canarybird_flower'}, {'id': 20528, 'synset': 'bean_caper.n.01', 'name': 'bean_caper'}, {'id': 20529, 'synset': 'palo_santo.n.01', 'name': 'palo_santo'}, {'id': 20530, 'synset': 'lignum_vitae.n.02', 'name': 'lignum_vitae'}, {'id': 20531, 'synset': 'creosote_bush.n.01', 'name': 'creosote_bush'}, {'id': 20532, 'synset': 'caltrop.n.01', 'name': 'caltrop'}, {'id': 20533, 'synset': 'willow.n.01', 'name': 'willow'}, {'id': 20534, 'synset': 'osier.n.02', 'name': 'osier'}, {'id': 20535, 'synset': 'white_willow.n.01', 'name': 'white_willow'}, {'id': 20536, 'synset': 'silver_willow.n.01', 'name': 'silver_willow'}, {'id': 20537, 'synset': 'golden_willow.n.01', 'name': 'golden_willow'}, {'id': 20538, 'synset': 'cricket-bat_willow.n.01', 'name': 'cricket-bat_willow'}, {'id': 20539, 'synset': 'arctic_willow.n.01', 'name': 'arctic_willow'}, {'id': 20540, 'synset': 'weeping_willow.n.01', 'name': 'weeping_willow'}, {'id': 20541, 'synset': 'wisconsin_weeping_willow.n.01', 'name': 'Wisconsin_weeping_willow'}, {'id': 20542, 'synset': 'pussy_willow.n.01', 'name': 'pussy_willow'}, {'id': 20543, 'synset': 'sallow.n.01', 'name': 'sallow'}, {'id': 20544, 'synset': 'goat_willow.n.01', 'name': 'goat_willow'}, {'id': 20545, 'synset': 'peachleaf_willow.n.01', 'name': 'peachleaf_willow'}, {'id': 20546, 'synset': 'almond_willow.n.01', 'name': 'almond_willow'}, {'id': 20547, 'synset': 'hoary_willow.n.01', 'name': 'hoary_willow'}, {'id': 20548, 'synset': 'crack_willow.n.01', 'name': 'crack_willow'}, {'id': 20549, 'synset': 'prairie_willow.n.01', 'name': 'prairie_willow'}, {'id': 20550, 'synset': 'dwarf_willow.n.01', 'name': 'dwarf_willow'}, {'id': 20551, 'synset': 'grey_willow.n.01', 'name': 'grey_willow'}, {'id': 20552, 'synset': 'arroyo_willow.n.01', 'name': 'arroyo_willow'}, {'id': 20553, 'synset': 'shining_willow.n.01', 'name': 'shining_willow'}, {'id': 20554, 'synset': 'swamp_willow.n.01', 'name': 'swamp_willow'}, {'id': 20555, 'synset': 'bay_willow.n.01', 'name': 'bay_willow'}, {'id': 20556, 'synset': 'purple_willow.n.01', 'name': 'purple_willow'}, {'id': 20557, 'synset': 'balsam_willow.n.01', 'name': 'balsam_willow'}, {'id': 20558, 'synset': 'creeping_willow.n.01', 'name': 'creeping_willow'}, {'id': 20559, 'synset': 'sitka_willow.n.01', 'name': 'Sitka_willow'}, {'id': 20560, 'synset': 'dwarf_grey_willow.n.01', 'name': 'dwarf_grey_willow'}, {'id': 20561, 'synset': 'bearberry_willow.n.01', 'name': 'bearberry_willow'}, {'id': 20562, 'synset': 'common_osier.n.01', 'name': 'common_osier'}, {'id': 20563, 'synset': 'poplar.n.02', 'name': 'poplar'}, {'id': 20564, 'synset': 'balsam_poplar.n.01', 'name': 'balsam_poplar'}, {'id': 20565, 'synset': 'white_poplar.n.01', 'name': 'white_poplar'}, {'id': 20566, 'synset': 'grey_poplar.n.01', 'name': 'grey_poplar'}, {'id': 20567, 'synset': 'black_poplar.n.01', 'name': 'black_poplar'}, {'id': 20568, 'synset': 'lombardy_poplar.n.01', 'name': 'Lombardy_poplar'}, {'id': 20569, 'synset': 'cottonwood.n.01', 'name': 'cottonwood'}, {'id': 20570, 'synset': 'eastern_cottonwood.n.01', 'name': 'Eastern_cottonwood'}, {'id': 20571, 'synset': 'black_cottonwood.n.02', 'name': 'black_cottonwood'}, {'id': 20572, 'synset': 'swamp_cottonwood.n.01', 'name': 'swamp_cottonwood'}, {'id': 20573, 'synset': 'aspen.n.01', 'name': 'aspen'}, {'id': 20574, 'synset': 'quaking_aspen.n.01', 'name': 'quaking_aspen'}, {'id': 20575, 'synset': 'american_quaking_aspen.n.01', 'name': 'American_quaking_aspen'}, {'id': 20576, 'synset': 'canadian_aspen.n.01', 'name': 'Canadian_aspen'}, {'id': 20577, 'synset': 'sandalwood_tree.n.01', 'name': 'sandalwood_tree'}, {'id': 20578, 'synset': 'quandong.n.01', 'name': 'quandong'}, {'id': 20579, 'synset': 'rabbitwood.n.01', 'name': 'rabbitwood'}, {'id': 20580, 'synset': 'loranthaceae.n.01', 'name': 'Loranthaceae'}, {'id': 20581, 'synset': 'mistletoe.n.03', 'name': 'mistletoe'}, {'id': 20582, 'synset': 'american_mistletoe.n.02', 'name': 'American_mistletoe'}, {'id': 20583, 'synset': 'mistletoe.n.02', 'name': 'mistletoe'}, {'id': 20584, 'synset': 'american_mistletoe.n.01', 'name': 'American_mistletoe'}, {'id': 20585, 'synset': 'aalii.n.01', 'name': 'aalii'}, {'id': 20586, 'synset': 'soapberry.n.01', 'name': 'soapberry'}, {'id': 20587, 'synset': 'wild_china_tree.n.01', 'name': 'wild_China_tree'}, {'id': 20588, 'synset': 'china_tree.n.01', 'name': 'China_tree'}, {'id': 20589, 'synset': 'akee.n.01', 'name': 'akee'}, {'id': 20590, 'synset': 'soapberry_vine.n.01', 'name': 'soapberry_vine'}, {'id': 20591, 'synset': 'heartseed.n.01', 'name': 'heartseed'}, {'id': 20592, 'synset': 'balloon_vine.n.01', 'name': 'balloon_vine'}, {'id': 20593, 'synset': 'longan.n.01', 'name': 'longan'}, {'id': 20594, 'synset': 'harpullia.n.01', 'name': 'harpullia'}, {'id': 20595, 'synset': 'harpulla.n.01', 'name': 'harpulla'}, {'id': 20596, 'synset': 'moreton_bay_tulipwood.n.01', 'name': 'Moreton_Bay_tulipwood'}, {'id': 20597, 'synset': 'litchi.n.01', 'name': 'litchi'}, {'id': 20598, 'synset': 'spanish_lime.n.01', 'name': 'Spanish_lime'}, {'id': 20599, 'synset': 'rambutan.n.01', 'name': 'rambutan'}, {'id': 20600, 'synset': 'pulasan.n.01', 'name': 'pulasan'}, {'id': 20601, 'synset': 'pachysandra.n.01', 'name': 'pachysandra'}, {'id': 20602, 'synset': 'allegheny_spurge.n.01', 'name': 'Allegheny_spurge'}, {'id': 20603, 'synset': 'bittersweet.n.02', 'name': 'bittersweet'}, {'id': 20604, 'synset': 'spindle_tree.n.01', 'name': 'spindle_tree'}, {'id': 20605, 'synset': 'winged_spindle_tree.n.01', 'name': 'winged_spindle_tree'}, {'id': 20606, 'synset': 'wahoo.n.02', 'name': 'wahoo'}, {'id': 20607, 'synset': 'strawberry_bush.n.01', 'name': 'strawberry_bush'}, {'id': 20608, 'synset': 'evergreen_bittersweet.n.01', 'name': 'evergreen_bittersweet'}, {'id': 20609, 'synset': 'cyrilla.n.01', 'name': 'cyrilla'}, {'id': 20610, 'synset': 'titi.n.01', 'name': 'titi'}, {'id': 20611, 'synset': 'crowberry.n.01', 'name': 'crowberry'}, {'id': 20612, 'synset': 'maple.n.02', 'name': 'maple'}, {'id': 20613, 'synset': 'silver_maple.n.01', 'name': 'silver_maple'}, {'id': 20614, 'synset': 'sugar_maple.n.01', 'name': 'sugar_maple'}, {'id': 20615, 'synset': 'red_maple.n.01', 'name': 'red_maple'}, {'id': 20616, 'synset': 'moosewood.n.01', 'name': 'moosewood'}, {'id': 20617, 'synset': 'oregon_maple.n.01', 'name': 'Oregon_maple'}, {'id': 20618, 'synset': 'dwarf_maple.n.01', 'name': 'dwarf_maple'}, {'id': 20619, 'synset': 'mountain_maple.n.01', 'name': 'mountain_maple'}, {'id': 20620, 'synset': 'vine_maple.n.01', 'name': 'vine_maple'}, {'id': 20621, 'synset': 'hedge_maple.n.01', 'name': 'hedge_maple'}, {'id': 20622, 'synset': 'norway_maple.n.01', 'name': 'Norway_maple'}, {'id': 20623, 'synset': 'sycamore.n.03', 'name': 'sycamore'}, {'id': 20624, 'synset': 'box_elder.n.01', 'name': 'box_elder'}, {'id': 20625, 'synset': 'california_box_elder.n.01', 'name': 'California_box_elder'}, {'id': 20626, 'synset': 'pointed-leaf_maple.n.01', 'name': 'pointed-leaf_maple'}, {'id': 20627, 'synset': 'japanese_maple.n.02', 'name': 'Japanese_maple'}, {'id': 20628, 'synset': 'japanese_maple.n.01', 'name': 'Japanese_maple'}, {'id': 20629, 'synset': 'holly.n.01', 'name': 'holly'}, {'id': 20630, 'synset': 'chinese_holly.n.01', 'name': 'Chinese_holly'}, {'id': 20631, 'synset': 'bearberry.n.02', 'name': 'bearberry'}, {'id': 20632, 'synset': 'inkberry.n.01', 'name': 'inkberry'}, {'id': 20633, 'synset': 'mate.n.07', 'name': 'mate'}, {'id': 20634, 'synset': 'american_holly.n.01', 'name': 'American_holly'}, {'id': 20635, 'synset': 'low_gallberry_holly.n.01', 'name': 'low_gallberry_holly'}, {'id': 20636, 'synset': 'tall_gallberry_holly.n.01', 'name': 'tall_gallberry_holly'}, {'id': 20637, 'synset': 'yaupon_holly.n.01', 'name': 'yaupon_holly'}, {'id': 20638, 'synset': 'deciduous_holly.n.01', 'name': 'deciduous_holly'}, {'id': 20639, 'synset': 'juneberry_holly.n.01', 'name': 'juneberry_holly'}, {'id': 20640, 'synset': 'largeleaf_holly.n.01', 'name': 'largeleaf_holly'}, {'id': 20641, 'synset': 'geogia_holly.n.01', 'name': 'Geogia_holly'}, {'id': 20642, 'synset': 'common_winterberry_holly.n.01', 'name': 'common_winterberry_holly'}, {'id': 20643, 'synset': 'smooth_winterberry_holly.n.01', 'name': 'smooth_winterberry_holly'}, {'id': 20644, 'synset': 'cashew.n.01', 'name': 'cashew'}, {'id': 20645, 'synset': 'goncalo_alves.n.01', 'name': 'goncalo_alves'}, {'id': 20646, 'synset': 'venetian_sumac.n.01', 'name': 'Venetian_sumac'}, {'id': 20647, 'synset': 'laurel_sumac.n.01', 'name': 'laurel_sumac'}, {'id': 20648, 'synset': 'mango.n.01', 'name': 'mango'}, {'id': 20649, 'synset': 'pistachio.n.01', 'name': 'pistachio'}, {'id': 20650, 'synset': 'terebinth.n.01', 'name': 'terebinth'}, {'id': 20651, 'synset': 'mastic.n.03', 'name': 'mastic'}, {'id': 20652, 'synset': 'australian_sumac.n.01', 'name': 'Australian_sumac'}, {'id': 20653, 'synset': 'sumac.n.02', 'name': 'sumac'}, {'id': 20654, 'synset': 'smooth_sumac.n.01', 'name': 'smooth_sumac'}, {'id': 20655, 'synset': 'sugar-bush.n.01', 'name': 'sugar-bush'}, {'id': 20656, 'synset': 'staghorn_sumac.n.01', 'name': 'staghorn_sumac'}, {'id': 20657, 'synset': 'squawbush.n.01', 'name': 'squawbush'}, {'id': 20658, 'synset': 'aroeira_blanca.n.01', 'name': 'aroeira_blanca'}, {'id': 20659, 'synset': 'pepper_tree.n.01', 'name': 'pepper_tree'}, {'id': 20660, 'synset': 'brazilian_pepper_tree.n.01', 'name': 'Brazilian_pepper_tree'}, {'id': 20661, 'synset': 'hog_plum.n.01', 'name': 'hog_plum'}, {'id': 20662, 'synset': 'mombin.n.01', 'name': 'mombin'}, {'id': 20663, 'synset': 'poison_ash.n.01', 'name': 'poison_ash'}, {'id': 20664, 'synset': 'poison_ivy.n.02', 'name': 'poison_ivy'}, {'id': 20665, 'synset': 'western_poison_oak.n.01', 'name': 'western_poison_oak'}, {'id': 20666, 'synset': 'eastern_poison_oak.n.01', 'name': 'eastern_poison_oak'}, {'id': 20667, 'synset': 'varnish_tree.n.02', 'name': 'varnish_tree'}, {'id': 20668, 'synset': 'horse_chestnut.n.01', 'name': 'horse_chestnut'}, {'id': 20669, 'synset': 'buckeye.n.01', 'name': 'buckeye'}, {'id': 20670, 'synset': 'sweet_buckeye.n.01', 'name': 'sweet_buckeye'}, {'id': 20671, 'synset': 'ohio_buckeye.n.01', 'name': 'Ohio_buckeye'}, {'id': 20672, 'synset': 'dwarf_buckeye.n.01', 'name': 'dwarf_buckeye'}, {'id': 20673, 'synset': 'red_buckeye.n.01', 'name': 'red_buckeye'}, {'id': 20674, 'synset': 'particolored_buckeye.n.01', 'name': 'particolored_buckeye'}, {'id': 20675, 'synset': 'ebony.n.03', 'name': 'ebony'}, {'id': 20676, 'synset': 'marblewood.n.02', 'name': 'marblewood'}, {'id': 20677, 'synset': 'marblewood.n.01', 'name': 'marblewood'}, {'id': 20678, 'synset': 'persimmon.n.01', 'name': 'persimmon'}, {'id': 20679, 'synset': 'japanese_persimmon.n.01', 'name': 'Japanese_persimmon'}, {'id': 20680, 'synset': 'american_persimmon.n.01', 'name': 'American_persimmon'}, {'id': 20681, 'synset': 'date_plum.n.01', 'name': 'date_plum'}, {'id': 20682, 'synset': 'buckthorn.n.02', 'name': 'buckthorn'}, {'id': 20683, 'synset': 'southern_buckthorn.n.01', 'name': 'southern_buckthorn'}, {'id': 20684, 'synset': 'false_buckthorn.n.01', 'name': 'false_buckthorn'}, {'id': 20685, 'synset': 'star_apple.n.01', 'name': 'star_apple'}, {'id': 20686, 'synset': 'satinleaf.n.01', 'name': 'satinleaf'}, {'id': 20687, 'synset': 'balata.n.02', 'name': 'balata'}, {'id': 20688, 'synset': 'sapodilla.n.01', 'name': 'sapodilla'}, {'id': 20689, 'synset': 'gutta-percha_tree.n.02', 'name': 'gutta-percha_tree'}, {'id': 20690, 'synset': 'gutta-percha_tree.n.01', 'name': 'gutta-percha_tree'}, {'id': 20691, 'synset': 'canistel.n.01', 'name': 'canistel'}, {'id': 20692, 'synset': 'marmalade_tree.n.01', 'name': 'marmalade_tree'}, {'id': 20693, 'synset': 'sweetleaf.n.01', 'name': 'sweetleaf'}, {'id': 20694, 'synset': 'asiatic_sweetleaf.n.01', 'name': 'Asiatic_sweetleaf'}, {'id': 20695, 'synset': 'styrax.n.01', 'name': 'styrax'}, {'id': 20696, 'synset': 'snowbell.n.01', 'name': 'snowbell'}, {'id': 20697, 'synset': 'japanese_snowbell.n.01', 'name': 'Japanese_snowbell'}, {'id': 20698, 'synset': 'texas_snowbell.n.01', 'name': 'Texas_snowbell'}, {'id': 20699, 'synset': 'silver-bell_tree.n.01', 'name': 'silver-bell_tree'}, {'id': 20700, 'synset': 'carnivorous_plant.n.01', 'name': 'carnivorous_plant'}, {'id': 20701, 'synset': 'pitcher_plant.n.01', 'name': 'pitcher_plant'}, {'id': 20702, 'synset': 'common_pitcher_plant.n.01', 'name': 'common_pitcher_plant'}, {'id': 20703, 'synset': 'hooded_pitcher_plant.n.01', 'name': 'hooded_pitcher_plant'}, {'id': 20704, 'synset': "huntsman's_horn.n.01", 'name': "huntsman's_horn"}, {'id': 20705, 'synset': 'tropical_pitcher_plant.n.01', 'name': 'tropical_pitcher_plant'}, {'id': 20706, 'synset': 'sundew.n.01', 'name': 'sundew'}, {'id': 20707, 'synset': "venus's_flytrap.n.01", 'name': "Venus's_flytrap"}, {'id': 20708, 'synset': 'waterwheel_plant.n.01', 'name': 'waterwheel_plant'}, {'id': 20709, 'synset': 'drosophyllum_lusitanicum.n.01', 'name': 'Drosophyllum_lusitanicum'}, {'id': 20710, 'synset': 'roridula.n.01', 'name': 'roridula'}, {'id': 20711, 'synset': 'australian_pitcher_plant.n.01', 'name': 'Australian_pitcher_plant'}, {'id': 20712, 'synset': 'sedum.n.01', 'name': 'sedum'}, {'id': 20713, 'synset': 'stonecrop.n.01', 'name': 'stonecrop'}, {'id': 20714, 'synset': 'rose-root.n.01', 'name': 'rose-root'}, {'id': 20715, 'synset': 'orpine.n.01', 'name': 'orpine'}, {'id': 20716, 'synset': 'pinwheel.n.01', 'name': 'pinwheel'}, {'id': 20717, 'synset': 'christmas_bush.n.01', 'name': 'Christmas_bush'}, {'id': 20718, 'synset': 'hortensia.n.01', 'name': 'hortensia'}, {'id': 20719, 'synset': 'fall-blooming_hydrangea.n.01', 'name': 'fall-blooming_hydrangea'}, {'id': 20720, 'synset': 'carpenteria.n.01', 'name': 'carpenteria'}, {'id': 20721, 'synset': 'decumary.n.01', 'name': 'decumary'}, {'id': 20722, 'synset': 'deutzia.n.01', 'name': 'deutzia'}, {'id': 20723, 'synset': 'philadelphus.n.01', 'name': 'philadelphus'}, {'id': 20724, 'synset': 'mock_orange.n.01', 'name': 'mock_orange'}, {'id': 20725, 'synset': 'saxifrage.n.01', 'name': 'saxifrage'}, {'id': 20726, 'synset': 'yellow_mountain_saxifrage.n.01', 'name': 'yellow_mountain_saxifrage'}, {'id': 20727, 'synset': 'meadow_saxifrage.n.01', 'name': 'meadow_saxifrage'}, {'id': 20728, 'synset': 'mossy_saxifrage.n.01', 'name': 'mossy_saxifrage'}, {'id': 20729, 'synset': 'western_saxifrage.n.01', 'name': 'western_saxifrage'}, {'id': 20730, 'synset': 'purple_saxifrage.n.01', 'name': 'purple_saxifrage'}, {'id': 20731, 'synset': 'star_saxifrage.n.01', 'name': 'star_saxifrage'}, {'id': 20732, 'synset': 'strawberry_geranium.n.01', 'name': 'strawberry_geranium'}, {'id': 20733, 'synset': 'astilbe.n.01', 'name': 'astilbe'}, {'id': 20734, 'synset': 'false_goatsbeard.n.01', 'name': 'false_goatsbeard'}, {'id': 20735, 'synset': 'dwarf_astilbe.n.01', 'name': 'dwarf_astilbe'}, {'id': 20736, 'synset': 'spirea.n.01', 'name': 'spirea'}, {'id': 20737, 'synset': 'bergenia.n.01', 'name': 'bergenia'}, {'id': 20738, 'synset': 'coast_boykinia.n.01', 'name': 'coast_boykinia'}, {'id': 20739, 'synset': 'golden_saxifrage.n.01', 'name': 'golden_saxifrage'}, {'id': 20740, 'synset': 'umbrella_plant.n.01', 'name': 'umbrella_plant'}, {'id': 20741, 'synset': 'bridal_wreath.n.01', 'name': 'bridal_wreath'}, {'id': 20742, 'synset': 'alumroot.n.01', 'name': 'alumroot'}, {'id': 20743, 'synset': 'coralbells.n.01', 'name': 'coralbells'}, {'id': 20744, 'synset': 'leatherleaf_saxifrage.n.01', 'name': 'leatherleaf_saxifrage'}, {'id': 20745, 'synset': 'woodland_star.n.01', 'name': 'woodland_star'}, {'id': 20746, 'synset': 'prairie_star.n.01', 'name': 'prairie_star'}, {'id': 20747, 'synset': 'miterwort.n.01', 'name': 'miterwort'}, {'id': 20748, 'synset': "five-point_bishop's_cap.n.01", 'name': "five-point_bishop's_cap"}, {'id': 20749, 'synset': 'parnassia.n.01', 'name': 'parnassia'}, {'id': 20750, 'synset': 'bog_star.n.01', 'name': 'bog_star'}, {'id': 20751, 'synset': 'fringed_grass_of_parnassus.n.01', 'name': 'fringed_grass_of_Parnassus'}, {'id': 20752, 'synset': 'false_alumroot.n.01', 'name': 'false_alumroot'}, {'id': 20753, 'synset': 'foamflower.n.01', 'name': 'foamflower'}, {'id': 20754, 'synset': 'false_miterwort.n.01', 'name': 'false_miterwort'}, {'id': 20755, 'synset': 'pickaback_plant.n.01', 'name': 'pickaback_plant'}, {'id': 20756, 'synset': 'currant.n.02', 'name': 'currant'}, {'id': 20757, 'synset': 'black_currant.n.01', 'name': 'black_currant'}, {'id': 20758, 'synset': 'white_currant.n.01', 'name': 'white_currant'}, {'id': 20759, 'synset': 'gooseberry.n.01', 'name': 'gooseberry'}, {'id': 20760, 'synset': 'plane_tree.n.01', 'name': 'plane_tree'}, {'id': 20761, 'synset': 'london_plane.n.01', 'name': 'London_plane'}, {'id': 20762, 'synset': 'american_sycamore.n.01', 'name': 'American_sycamore'}, {'id': 20763, 'synset': 'oriental_plane.n.01', 'name': 'oriental_plane'}, {'id': 20764, 'synset': 'california_sycamore.n.01', 'name': 'California_sycamore'}, {'id': 20765, 'synset': 'arizona_sycamore.n.01', 'name': 'Arizona_sycamore'}, {'id': 20766, 'synset': 'greek_valerian.n.01', 'name': 'Greek_valerian'}, {'id': 20767, 'synset': "northern_jacob's_ladder.n.01", 'name': "northern_Jacob's_ladder"}, {'id': 20768, 'synset': 'skunkweed.n.01', 'name': 'skunkweed'}, {'id': 20769, 'synset': 'phlox.n.01', 'name': 'phlox'}, {'id': 20770, 'synset': 'moss_pink.n.02', 'name': 'moss_pink'}, {'id': 20771, 'synset': 'evening-snow.n.01', 'name': 'evening-snow'}, {'id': 20772, 'synset': 'acanthus.n.01', 'name': 'acanthus'}, {'id': 20773, 'synset': "bear's_breech.n.01", 'name': "bear's_breech"}, {'id': 20774, 'synset': 'caricature_plant.n.01', 'name': 'caricature_plant'}, {'id': 20775, 'synset': 'black-eyed_susan.n.01', 'name': 'black-eyed_Susan'}, {'id': 20776, 'synset': 'catalpa.n.01', 'name': 'catalpa'}, {'id': 20777, 'synset': 'catalpa_bignioides.n.01', 'name': 'Catalpa_bignioides'}, {'id': 20778, 'synset': 'catalpa_speciosa.n.01', 'name': 'Catalpa_speciosa'}, {'id': 20779, 'synset': 'desert_willow.n.01', 'name': 'desert_willow'}, {'id': 20780, 'synset': 'calabash.n.02', 'name': 'calabash'}, {'id': 20781, 'synset': 'calabash.n.01', 'name': 'calabash'}, {'id': 20782, 'synset': 'borage.n.01', 'name': 'borage'}, {'id': 20783, 'synset': 'common_amsinckia.n.01', 'name': 'common_amsinckia'}, {'id': 20784, 'synset': 'anchusa.n.01', 'name': 'anchusa'}, {'id': 20785, 'synset': 'bugloss.n.01', 'name': 'bugloss'}, {'id': 20786, 'synset': 'cape_forget-me-not.n.02', 'name': 'cape_forget-me-not'}, {'id': 20787, 'synset': 'cape_forget-me-not.n.01', 'name': 'cape_forget-me-not'}, {'id': 20788, 'synset': 'spanish_elm.n.02', 'name': 'Spanish_elm'}, {'id': 20789, 'synset': 'princewood.n.01', 'name': 'princewood'}, {'id': 20790, 'synset': 'chinese_forget-me-not.n.01', 'name': 'Chinese_forget-me-not'}, {'id': 20791, 'synset': "hound's-tongue.n.02", 'name': "hound's-tongue"}, {'id': 20792, 'synset': "hound's-tongue.n.01", 'name': "hound's-tongue"}, {'id': 20793, 'synset': 'blueweed.n.01', 'name': 'blueweed'}, {'id': 20794, 'synset': "beggar's_lice.n.01", 'name': "beggar's_lice"}, {'id': 20795, 'synset': 'gromwell.n.01', 'name': 'gromwell'}, {'id': 20796, 'synset': 'puccoon.n.01', 'name': 'puccoon'}, {'id': 20797, 'synset': 'virginia_bluebell.n.01', 'name': 'Virginia_bluebell'}, {'id': 20798, 'synset': 'garden_forget-me-not.n.01', 'name': 'garden_forget-me-not'}, {'id': 20799, 'synset': 'forget-me-not.n.01', 'name': 'forget-me-not'}, {'id': 20800, 'synset': 'false_gromwell.n.01', 'name': 'false_gromwell'}, {'id': 20801, 'synset': 'comfrey.n.01', 'name': 'comfrey'}, {'id': 20802, 'synset': 'common_comfrey.n.01', 'name': 'common_comfrey'}, {'id': 20803, 'synset': 'convolvulus.n.01', 'name': 'convolvulus'}, {'id': 20804, 'synset': 'bindweed.n.01', 'name': 'bindweed'}, {'id': 20805, 'synset': 'field_bindweed.n.01', 'name': 'field_bindweed'}, {'id': 20806, 'synset': 'scammony.n.03', 'name': 'scammony'}, {'id': 20807, 'synset': 'silverweed.n.01', 'name': 'silverweed'}, {'id': 20808, 'synset': 'dodder.n.01', 'name': 'dodder'}, {'id': 20809, 'synset': 'dichondra.n.01', 'name': 'dichondra'}, {'id': 20810, 'synset': 'cypress_vine.n.01', 'name': 'cypress_vine'}, {'id': 20811, 'synset': 'moonflower.n.01', 'name': 'moonflower'}, {'id': 20812, 'synset': 'wild_potato_vine.n.01', 'name': 'wild_potato_vine'}, {'id': 20813, 'synset': 'red_morning-glory.n.01', 'name': 'red_morning-glory'}, {'id': 20814, 'synset': 'man-of-the-earth.n.01', 'name': 'man-of-the-earth'}, {'id': 20815, 'synset': 'scammony.n.01', 'name': 'scammony'}, {'id': 20816, 'synset': 'japanese_morning_glory.n.01', 'name': 'Japanese_morning_glory'}, {'id': 20817, 'synset': 'imperial_japanese_morning_glory.n.01', 'name': 'imperial_Japanese_morning_glory'}, {'id': 20818, 'synset': 'gesneriad.n.01', 'name': 'gesneriad'}, {'id': 20819, 'synset': 'gesneria.n.01', 'name': 'gesneria'}, {'id': 20820, 'synset': 'achimenes.n.01', 'name': 'achimenes'}, {'id': 20821, 'synset': 'aeschynanthus.n.01', 'name': 'aeschynanthus'}, {'id': 20822, 'synset': 'lace-flower_vine.n.01', 'name': 'lace-flower_vine'}, {'id': 20823, 'synset': 'columnea.n.01', 'name': 'columnea'}, {'id': 20824, 'synset': 'episcia.n.01', 'name': 'episcia'}, {'id': 20825, 'synset': 'gloxinia.n.01', 'name': 'gloxinia'}, {'id': 20826, 'synset': 'canterbury_bell.n.01', 'name': 'Canterbury_bell'}, {'id': 20827, 'synset': 'kohleria.n.01', 'name': 'kohleria'}, {'id': 20828, 'synset': 'african_violet.n.01', 'name': 'African_violet'}, {'id': 20829, 'synset': 'streptocarpus.n.01', 'name': 'streptocarpus'}, {'id': 20830, 'synset': 'cape_primrose.n.01', 'name': 'Cape_primrose'}, {'id': 20831, 'synset': 'waterleaf.n.01', 'name': 'waterleaf'}, {'id': 20832, 'synset': 'virginia_waterleaf.n.01', 'name': 'Virginia_waterleaf'}, {'id': 20833, 'synset': 'yellow_bells.n.01', 'name': 'yellow_bells'}, {'id': 20834, 'synset': 'yerba_santa.n.01', 'name': 'yerba_santa'}, {'id': 20835, 'synset': 'nemophila.n.01', 'name': 'nemophila'}, {'id': 20836, 'synset': 'baby_blue-eyes.n.01', 'name': 'baby_blue-eyes'}, {'id': 20837, 'synset': 'five-spot.n.02', 'name': 'five-spot'}, {'id': 20838, 'synset': 'scorpionweed.n.01', 'name': 'scorpionweed'}, {'id': 20839, 'synset': 'california_bluebell.n.02', 'name': 'California_bluebell'}, {'id': 20840, 'synset': 'california_bluebell.n.01', 'name': 'California_bluebell'}, {'id': 20841, 'synset': 'fiddleneck.n.01', 'name': 'fiddleneck'}, {'id': 20842, 'synset': 'fiesta_flower.n.01', 'name': 'fiesta_flower'}, {'id': 20843, 'synset': 'basil_thyme.n.01', 'name': 'basil_thyme'}, {'id': 20844, 'synset': 'giant_hyssop.n.01', 'name': 'giant_hyssop'}, {'id': 20845, 'synset': 'yellow_giant_hyssop.n.01', 'name': 'yellow_giant_hyssop'}, {'id': 20846, 'synset': 'anise_hyssop.n.01', 'name': 'anise_hyssop'}, {'id': 20847, 'synset': 'mexican_hyssop.n.01', 'name': 'Mexican_hyssop'}, {'id': 20848, 'synset': 'bugle.n.02', 'name': 'bugle'}, {'id': 20849, 'synset': 'creeping_bugle.n.01', 'name': 'creeping_bugle'}, {'id': 20850, 'synset': 'erect_bugle.n.01', 'name': 'erect_bugle'}, {'id': 20851, 'synset': 'pyramid_bugle.n.01', 'name': 'pyramid_bugle'}, {'id': 20852, 'synset': 'wood_mint.n.01', 'name': 'wood_mint'}, {'id': 20853, 'synset': 'hairy_wood_mint.n.01', 'name': 'hairy_wood_mint'}, {'id': 20854, 'synset': 'downy_wood_mint.n.01', 'name': 'downy_wood_mint'}, {'id': 20855, 'synset': 'calamint.n.01', 'name': 'calamint'}, {'id': 20856, 'synset': 'common_calamint.n.01', 'name': 'common_calamint'}, {'id': 20857, 'synset': 'large-flowered_calamint.n.01', 'name': 'large-flowered_calamint'}, {'id': 20858, 'synset': 'lesser_calamint.n.01', 'name': 'lesser_calamint'}, {'id': 20859, 'synset': 'wild_basil.n.01', 'name': 'wild_basil'}, {'id': 20860, 'synset': 'horse_balm.n.01', 'name': 'horse_balm'}, {'id': 20861, 'synset': 'coleus.n.01', 'name': 'coleus'}, {'id': 20862, 'synset': 'country_borage.n.01', 'name': 'country_borage'}, {'id': 20863, 'synset': 'painted_nettle.n.01', 'name': 'painted_nettle'}, {'id': 20864, 'synset': 'apalachicola_rosemary.n.01', 'name': 'Apalachicola_rosemary'}, {'id': 20865, 'synset': 'dragonhead.n.01', 'name': 'dragonhead'}, {'id': 20866, 'synset': 'elsholtzia.n.01', 'name': 'elsholtzia'}, {'id': 20867, 'synset': 'hemp_nettle.n.01', 'name': 'hemp_nettle'}, {'id': 20868, 'synset': 'ground_ivy.n.01', 'name': 'ground_ivy'}, {'id': 20869, 'synset': 'pennyroyal.n.02', 'name': 'pennyroyal'}, {'id': 20870, 'synset': 'hyssop.n.01', 'name': 'hyssop'}, {'id': 20871, 'synset': 'dead_nettle.n.02', 'name': 'dead_nettle'}, {'id': 20872, 'synset': 'white_dead_nettle.n.01', 'name': 'white_dead_nettle'}, {'id': 20873, 'synset': 'henbit.n.01', 'name': 'henbit'}, {'id': 20874, 'synset': 'english_lavender.n.01', 'name': 'English_lavender'}, {'id': 20875, 'synset': 'french_lavender.n.02', 'name': 'French_lavender'}, {'id': 20876, 'synset': 'spike_lavender.n.01', 'name': 'spike_lavender'}, {'id': 20877, 'synset': 'dagga.n.01', 'name': 'dagga'}, {'id': 20878, 'synset': "lion's-ear.n.01", 'name': "lion's-ear"}, {'id': 20879, 'synset': 'motherwort.n.01', 'name': 'motherwort'}, {'id': 20880, 'synset': 'pitcher_sage.n.02', 'name': 'pitcher_sage'}, {'id': 20881, 'synset': 'bugleweed.n.01', 'name': 'bugleweed'}, {'id': 20882, 'synset': 'water_horehound.n.01', 'name': 'water_horehound'}, {'id': 20883, 'synset': 'gipsywort.n.01', 'name': 'gipsywort'}, {'id': 20884, 'synset': 'origanum.n.01', 'name': 'origanum'}, {'id': 20885, 'synset': 'oregano.n.01', 'name': 'oregano'}, {'id': 20886, 'synset': 'sweet_marjoram.n.01', 'name': 'sweet_marjoram'}, {'id': 20887, 'synset': 'horehound.n.01', 'name': 'horehound'}, {'id': 20888, 'synset': 'common_horehound.n.01', 'name': 'common_horehound'}, {'id': 20889, 'synset': 'lemon_balm.n.01', 'name': 'lemon_balm'}, {'id': 20890, 'synset': 'corn_mint.n.01', 'name': 'corn_mint'}, {'id': 20891, 'synset': 'water-mint.n.01', 'name': 'water-mint'}, {'id': 20892, 'synset': 'bergamot_mint.n.02', 'name': 'bergamot_mint'}, {'id': 20893, 'synset': 'horsemint.n.03', 'name': 'horsemint'}, {'id': 20894, 'synset': 'peppermint.n.01', 'name': 'peppermint'}, {'id': 20895, 'synset': 'spearmint.n.01', 'name': 'spearmint'}, {'id': 20896, 'synset': 'apple_mint.n.01', 'name': 'apple_mint'}, {'id': 20897, 'synset': 'pennyroyal.n.01', 'name': 'pennyroyal'}, {'id': 20898, 'synset': 'yerba_buena.n.01', 'name': 'yerba_buena'}, {'id': 20899, 'synset': 'molucca_balm.n.01', 'name': 'molucca_balm'}, {'id': 20900, 'synset': 'monarda.n.01', 'name': 'monarda'}, {'id': 20901, 'synset': 'bee_balm.n.02', 'name': 'bee_balm'}, {'id': 20902, 'synset': 'horsemint.n.02', 'name': 'horsemint'}, {'id': 20903, 'synset': 'bee_balm.n.01', 'name': 'bee_balm'}, {'id': 20904, 'synset': 'lemon_mint.n.01', 'name': 'lemon_mint'}, {'id': 20905, 'synset': 'plains_lemon_monarda.n.01', 'name': 'plains_lemon_monarda'}, {'id': 20906, 'synset': 'basil_balm.n.01', 'name': 'basil_balm'}, {'id': 20907, 'synset': 'mustang_mint.n.01', 'name': 'mustang_mint'}, {'id': 20908, 'synset': 'catmint.n.01', 'name': 'catmint'}, {'id': 20909, 'synset': 'basil.n.01', 'name': 'basil'}, {'id': 20910, 'synset': 'beefsteak_plant.n.01', 'name': 'beefsteak_plant'}, {'id': 20911, 'synset': 'phlomis.n.01', 'name': 'phlomis'}, {'id': 20912, 'synset': 'jerusalem_sage.n.01', 'name': 'Jerusalem_sage'}, {'id': 20913, 'synset': 'physostegia.n.01', 'name': 'physostegia'}, {'id': 20914, 'synset': 'plectranthus.n.01', 'name': 'plectranthus'}, {'id': 20915, 'synset': 'patchouli.n.01', 'name': 'patchouli'}, {'id': 20916, 'synset': 'self-heal.n.01', 'name': 'self-heal'}, {'id': 20917, 'synset': 'mountain_mint.n.01', 'name': 'mountain_mint'}, {'id': 20918, 'synset': 'rosemary.n.01', 'name': 'rosemary'}, {'id': 20919, 'synset': 'clary_sage.n.01', 'name': 'clary_sage'}, {'id': 20920, 'synset': 'purple_sage.n.01', 'name': 'purple_sage'}, {'id': 20921, 'synset': 'cancerweed.n.01', 'name': 'cancerweed'}, {'id': 20922, 'synset': 'common_sage.n.01', 'name': 'common_sage'}, {'id': 20923, 'synset': 'meadow_clary.n.01', 'name': 'meadow_clary'}, {'id': 20924, 'synset': 'clary.n.01', 'name': 'clary'}, {'id': 20925, 'synset': 'pitcher_sage.n.01', 'name': 'pitcher_sage'}, {'id': 20926, 'synset': 'mexican_mint.n.01', 'name': 'Mexican_mint'}, {'id': 20927, 'synset': 'wild_sage.n.01', 'name': 'wild_sage'}, {'id': 20928, 'synset': 'savory.n.01', 'name': 'savory'}, {'id': 20929, 'synset': 'summer_savory.n.01', 'name': 'summer_savory'}, {'id': 20930, 'synset': 'winter_savory.n.01', 'name': 'winter_savory'}, {'id': 20931, 'synset': 'skullcap.n.02', 'name': 'skullcap'}, {'id': 20932, 'synset': 'blue_pimpernel.n.01', 'name': 'blue_pimpernel'}, {'id': 20933, 'synset': 'hedge_nettle.n.02', 'name': 'hedge_nettle'}, {'id': 20934, 'synset': 'hedge_nettle.n.01', 'name': 'hedge_nettle'}, {'id': 20935, 'synset': 'germander.n.01', 'name': 'germander'}, {'id': 20936, 'synset': 'american_germander.n.01', 'name': 'American_germander'}, {'id': 20937, 'synset': 'cat_thyme.n.01', 'name': 'cat_thyme'}, {'id': 20938, 'synset': 'wood_sage.n.01', 'name': 'wood_sage'}, {'id': 20939, 'synset': 'thyme.n.01', 'name': 'thyme'}, {'id': 20940, 'synset': 'common_thyme.n.01', 'name': 'common_thyme'}, {'id': 20941, 'synset': 'wild_thyme.n.01', 'name': 'wild_thyme'}, {'id': 20942, 'synset': 'blue_curls.n.01', 'name': 'blue_curls'}, {'id': 20943, 'synset': 'turpentine_camphor_weed.n.01', 'name': 'turpentine_camphor_weed'}, {'id': 20944, 'synset': 'bastard_pennyroyal.n.01', 'name': 'bastard_pennyroyal'}, {'id': 20945, 'synset': 'bladderwort.n.01', 'name': 'bladderwort'}, {'id': 20946, 'synset': 'butterwort.n.01', 'name': 'butterwort'}, {'id': 20947, 'synset': 'genlisea.n.01', 'name': 'genlisea'}, {'id': 20948, 'synset': 'martynia.n.01', 'name': 'martynia'}, {'id': 20949, 'synset': 'common_unicorn_plant.n.01', 'name': 'common_unicorn_plant'}, {'id': 20950, 'synset': "sand_devil's_claw.n.01", 'name': "sand_devil's_claw"}, {'id': 20951, 'synset': 'sweet_unicorn_plant.n.01', 'name': 'sweet_unicorn_plant'}, {'id': 20952, 'synset': 'figwort.n.01', 'name': 'figwort'}, {'id': 20953, 'synset': 'snapdragon.n.01', 'name': 'snapdragon'}, {'id': 20954, 'synset': 'white_snapdragon.n.01', 'name': 'white_snapdragon'}, {'id': 20955, 'synset': 'yellow_twining_snapdragon.n.01', 'name': 'yellow_twining_snapdragon'}, {'id': 20956, 'synset': 'mediterranean_snapdragon.n.01', 'name': 'Mediterranean_snapdragon'}, {'id': 20957, 'synset': 'kitten-tails.n.01', 'name': 'kitten-tails'}, {'id': 20958, 'synset': 'alpine_besseya.n.01', 'name': 'Alpine_besseya'}, {'id': 20959, 'synset': 'false_foxglove.n.02', 'name': 'false_foxglove'}, {'id': 20960, 'synset': 'false_foxglove.n.01', 'name': 'false_foxglove'}, {'id': 20961, 'synset': 'calceolaria.n.01', 'name': 'calceolaria'}, {'id': 20962, 'synset': 'indian_paintbrush.n.02', 'name': 'Indian_paintbrush'}, {'id': 20963, 'synset': 'desert_paintbrush.n.01', 'name': 'desert_paintbrush'}, {'id': 20964, 'synset': 'giant_red_paintbrush.n.01', 'name': 'giant_red_paintbrush'}, {'id': 20965, 'synset': 'great_plains_paintbrush.n.01', 'name': 'great_plains_paintbrush'}, {'id': 20966, 'synset': 'sulfur_paintbrush.n.01', 'name': 'sulfur_paintbrush'}, {'id': 20967, 'synset': 'shellflower.n.01', 'name': 'shellflower'}, {'id': 20968, 'synset': 'maiden_blue-eyed_mary.n.01', 'name': 'maiden_blue-eyed_Mary'}, {'id': 20969, 'synset': 'blue-eyed_mary.n.01', 'name': 'blue-eyed_Mary'}, {'id': 20970, 'synset': 'foxglove.n.01', 'name': 'foxglove'}, {'id': 20971, 'synset': 'common_foxglove.n.01', 'name': 'common_foxglove'}, {'id': 20972, 'synset': 'yellow_foxglove.n.01', 'name': 'yellow_foxglove'}, {'id': 20973, 'synset': 'gerardia.n.01', 'name': 'gerardia'}, {'id': 20974, 'synset': 'blue_toadflax.n.01', 'name': 'blue_toadflax'}, {'id': 20975, 'synset': 'toadflax.n.01', 'name': 'toadflax'}, {'id': 20976, 'synset': 'golden-beard_penstemon.n.01', 'name': 'golden-beard_penstemon'}, {'id': 20977, 'synset': 'scarlet_bugler.n.01', 'name': 'scarlet_bugler'}, {'id': 20978, 'synset': 'red_shrubby_penstemon.n.01', 'name': 'red_shrubby_penstemon'}, {'id': 20979, 'synset': 'platte_river_penstemon.n.01', 'name': 'Platte_River_penstemon'}, {'id': 20980, 'synset': 'hot-rock_penstemon.n.01', 'name': 'hot-rock_penstemon'}, {'id': 20981, 'synset': "jones'_penstemon.n.01", 'name': "Jones'_penstemon"}, {'id': 20982, 'synset': 'shrubby_penstemon.n.01', 'name': 'shrubby_penstemon'}, {'id': 20983, 'synset': 'narrow-leaf_penstemon.n.01', 'name': 'narrow-leaf_penstemon'}, {'id': 20984, 'synset': 'balloon_flower.n.01', 'name': 'balloon_flower'}, {'id': 20985, 'synset': "parry's_penstemon.n.01", 'name': "Parry's_penstemon"}, {'id': 20986, 'synset': 'rock_penstemon.n.01', 'name': 'rock_penstemon'}, {'id': 20987, 'synset': "rydberg's_penstemon.n.01", 'name': "Rydberg's_penstemon"}, {'id': 20988, 'synset': 'cascade_penstemon.n.01', 'name': 'cascade_penstemon'}, {'id': 20989, 'synset': "whipple's_penstemon.n.01", 'name': "Whipple's_penstemon"}, {'id': 20990, 'synset': 'moth_mullein.n.01', 'name': 'moth_mullein'}, {'id': 20991, 'synset': 'white_mullein.n.01', 'name': 'white_mullein'}, {'id': 20992, 'synset': 'purple_mullein.n.01', 'name': 'purple_mullein'}, {'id': 20993, 'synset': 'common_mullein.n.01', 'name': 'common_mullein'}, {'id': 20994, 'synset': 'veronica.n.01', 'name': 'veronica'}, {'id': 20995, 'synset': 'field_speedwell.n.01', 'name': 'field_speedwell'}, {'id': 20996, 'synset': 'brooklime.n.02', 'name': 'brooklime'}, {'id': 20997, 'synset': 'corn_speedwell.n.01', 'name': 'corn_speedwell'}, {'id': 20998, 'synset': 'brooklime.n.01', 'name': 'brooklime'}, {'id': 20999, 'synset': 'germander_speedwell.n.01', 'name': 'germander_speedwell'}, {'id': 21000, 'synset': 'water_speedwell.n.01', 'name': 'water_speedwell'}, {'id': 21001, 'synset': 'common_speedwell.n.01', 'name': 'common_speedwell'}, {'id': 21002, 'synset': 'purslane_speedwell.n.01', 'name': 'purslane_speedwell'}, {'id': 21003, 'synset': 'thyme-leaved_speedwell.n.01', 'name': 'thyme-leaved_speedwell'}, {'id': 21004, 'synset': 'nightshade.n.01', 'name': 'nightshade'}, {'id': 21005, 'synset': 'horse_nettle.n.01', 'name': 'horse_nettle'}, {'id': 21006, 'synset': 'african_holly.n.01', 'name': 'African_holly'}, {'id': 21007, 'synset': 'potato_vine.n.02', 'name': 'potato_vine'}, {'id': 21008, 'synset': 'garden_huckleberry.n.01', 'name': 'garden_huckleberry'}, {'id': 21009, 'synset': 'naranjilla.n.01', 'name': 'naranjilla'}, {'id': 21010, 'synset': 'potato_vine.n.01', 'name': 'potato_vine'}, {'id': 21011, 'synset': 'potato_tree.n.01', 'name': 'potato_tree'}, {'id': 21012, 'synset': 'belladonna.n.01', 'name': 'belladonna'}, {'id': 21013, 'synset': 'bush_violet.n.01', 'name': 'bush_violet'}, {'id': 21014, 'synset': 'lady-of-the-night.n.01', 'name': 'lady-of-the-night'}, {'id': 21015, 'synset': "angel's_trumpet.n.02", 'name': "angel's_trumpet"}, {'id': 21016, 'synset': "angel's_trumpet.n.01", 'name': "angel's_trumpet"}, {'id': 21017, 'synset': "red_angel's_trumpet.n.01", 'name': "red_angel's_trumpet"}, {'id': 21018, 'synset': 'cone_pepper.n.01', 'name': 'cone_pepper'}, {'id': 21019, 'synset': 'bird_pepper.n.01', 'name': 'bird_pepper'}, {'id': 21020, 'synset': 'day_jessamine.n.01', 'name': 'day_jessamine'}, {'id': 21021, 'synset': 'night_jasmine.n.01', 'name': 'night_jasmine'}, {'id': 21022, 'synset': 'tree_tomato.n.01', 'name': 'tree_tomato'}, {'id': 21023, 'synset': 'thorn_apple.n.01', 'name': 'thorn_apple'}, {'id': 21024, 'synset': 'jimsonweed.n.01', 'name': 'jimsonweed'}, {'id': 21025, 'synset': 'pichi.n.01', 'name': 'pichi'}, {'id': 21026, 'synset': 'henbane.n.01', 'name': 'henbane'}, {'id': 21027, 'synset': 'egyptian_henbane.n.01', 'name': 'Egyptian_henbane'}, {'id': 21028, 'synset': 'matrimony_vine.n.01', 'name': 'matrimony_vine'}, {'id': 21029, 'synset': 'common_matrimony_vine.n.01', 'name': 'common_matrimony_vine'}, {'id': 21030, 'synset': 'christmasberry.n.01', 'name': 'Christmasberry'}, {'id': 21031, 'synset': 'plum_tomato.n.01', 'name': 'plum_tomato'}, {'id': 21032, 'synset': 'mandrake.n.02', 'name': 'mandrake'}, {'id': 21033, 'synset': 'mandrake_root.n.01', 'name': 'mandrake_root'}, {'id': 21034, 'synset': 'apple_of_peru.n.01', 'name': 'apple_of_Peru'}, {'id': 21035, 'synset': 'flowering_tobacco.n.01', 'name': 'flowering_tobacco'}, {'id': 21036, 'synset': 'common_tobacco.n.01', 'name': 'common_tobacco'}, {'id': 21037, 'synset': 'wild_tobacco.n.01', 'name': 'wild_tobacco'}, {'id': 21038, 'synset': 'cupflower.n.02', 'name': 'cupflower'}, {'id': 21039, 'synset': 'whitecup.n.01', 'name': 'whitecup'}, {'id': 21040, 'synset': 'petunia.n.01', 'name': 'petunia'}, {'id': 21041, 'synset': 'large_white_petunia.n.01', 'name': 'large_white_petunia'}, {'id': 21042, 'synset': 'violet-flowered_petunia.n.01', 'name': 'violet-flowered_petunia'}, {'id': 21043, 'synset': 'hybrid_petunia.n.01', 'name': 'hybrid_petunia'}, {'id': 21044, 'synset': 'cape_gooseberry.n.01', 'name': 'cape_gooseberry'}, {'id': 21045, 'synset': 'strawberry_tomato.n.01', 'name': 'strawberry_tomato'}, {'id': 21046, 'synset': 'tomatillo.n.02', 'name': 'tomatillo'}, {'id': 21047, 'synset': 'tomatillo.n.01', 'name': 'tomatillo'}, {'id': 21048, 'synset': 'yellow_henbane.n.01', 'name': 'yellow_henbane'}, {'id': 21049, 'synset': "cock's_eggs.n.01", 'name': "cock's_eggs"}, {'id': 21050, 'synset': 'salpiglossis.n.01', 'name': 'salpiglossis'}, {'id': 21051, 'synset': 'painted_tongue.n.01', 'name': 'painted_tongue'}, {'id': 21052, 'synset': 'butterfly_flower.n.01', 'name': 'butterfly_flower'}, {'id': 21053, 'synset': 'scopolia_carniolica.n.01', 'name': 'Scopolia_carniolica'}, {'id': 21054, 'synset': 'chalice_vine.n.01', 'name': 'chalice_vine'}, {'id': 21055, 'synset': 'verbena.n.01', 'name': 'verbena'}, {'id': 21056, 'synset': 'lantana.n.01', 'name': 'lantana'}, {'id': 21057, 'synset': 'black_mangrove.n.02', 'name': 'black_mangrove'}, {'id': 21058, 'synset': 'white_mangrove.n.01', 'name': 'white_mangrove'}, {'id': 21059, 'synset': 'black_mangrove.n.01', 'name': 'black_mangrove'}, {'id': 21060, 'synset': 'teak.n.02', 'name': 'teak'}, {'id': 21061, 'synset': 'spurge.n.01', 'name': 'spurge'}, {'id': 21062, 'synset': 'sun_spurge.n.01', 'name': 'sun_spurge'}, {'id': 21063, 'synset': 'petty_spurge.n.01', 'name': 'petty_spurge'}, {'id': 21064, 'synset': "medusa's_head.n.01", 'name': "medusa's_head"}, {'id': 21065, 'synset': 'wild_spurge.n.01', 'name': 'wild_spurge'}, {'id': 21066, 'synset': 'snow-on-the-mountain.n.01', 'name': 'snow-on-the-mountain'}, {'id': 21067, 'synset': 'cypress_spurge.n.01', 'name': 'cypress_spurge'}, {'id': 21068, 'synset': 'leafy_spurge.n.01', 'name': 'leafy_spurge'}, {'id': 21069, 'synset': 'hairy_spurge.n.01', 'name': 'hairy_spurge'}, {'id': 21070, 'synset': 'poinsettia.n.01', 'name': 'poinsettia'}, {'id': 21071, 'synset': 'japanese_poinsettia.n.01', 'name': 'Japanese_poinsettia'}, {'id': 21072, 'synset': 'fire-on-the-mountain.n.01', 'name': 'fire-on-the-mountain'}, {'id': 21073, 'synset': 'wood_spurge.n.01', 'name': 'wood_spurge'}, {'id': 21074, 'synset': 'dwarf_spurge.n.01', 'name': 'dwarf_spurge'}, {'id': 21075, 'synset': 'scarlet_plume.n.01', 'name': 'scarlet_plume'}, {'id': 21076, 'synset': 'naboom.n.01', 'name': 'naboom'}, {'id': 21077, 'synset': 'crown_of_thorns.n.02', 'name': 'crown_of_thorns'}, {'id': 21078, 'synset': 'toothed_spurge.n.01', 'name': 'toothed_spurge'}, {'id': 21079, 'synset': 'three-seeded_mercury.n.01', 'name': 'three-seeded_mercury'}, {'id': 21080, 'synset': 'croton.n.02', 'name': 'croton'}, {'id': 21081, 'synset': 'cascarilla.n.01', 'name': 'cascarilla'}, {'id': 21082, 'synset': 'cascarilla_bark.n.01', 'name': 'cascarilla_bark'}, {'id': 21083, 'synset': 'castor-oil_plant.n.01', 'name': 'castor-oil_plant'}, {'id': 21084, 'synset': 'spurge_nettle.n.01', 'name': 'spurge_nettle'}, {'id': 21085, 'synset': 'physic_nut.n.01', 'name': 'physic_nut'}, {'id': 21086, 'synset': 'para_rubber_tree.n.01', 'name': 'Para_rubber_tree'}, {'id': 21087, 'synset': 'cassava.n.03', 'name': 'cassava'}, {'id': 21088, 'synset': 'bitter_cassava.n.01', 'name': 'bitter_cassava'}, {'id': 21089, 'synset': 'cassava.n.02', 'name': 'cassava'}, {'id': 21090, 'synset': 'sweet_cassava.n.01', 'name': 'sweet_cassava'}, {'id': 21091, 'synset': 'candlenut.n.01', 'name': 'candlenut'}, {'id': 21092, 'synset': 'tung_tree.n.01', 'name': 'tung_tree'}, {'id': 21093, 'synset': 'slipper_spurge.n.01', 'name': 'slipper_spurge'}, {'id': 21094, 'synset': 'candelilla.n.01', 'name': 'candelilla'}, {'id': 21095, 'synset': 'jewbush.n.01', 'name': 'Jewbush'}, {'id': 21096, 'synset': 'jumping_bean.n.01', 'name': 'jumping_bean'}, {'id': 21097, 'synset': 'camellia.n.01', 'name': 'camellia'}, {'id': 21098, 'synset': 'japonica.n.01', 'name': 'japonica'}, {'id': 21099, 'synset': 'umbellifer.n.01', 'name': 'umbellifer'}, {'id': 21100, 'synset': 'wild_parsley.n.01', 'name': 'wild_parsley'}, {'id': 21101, 'synset': "fool's_parsley.n.01", 'name': "fool's_parsley"}, {'id': 21102, 'synset': 'dill.n.01', 'name': 'dill'}, {'id': 21103, 'synset': 'angelica.n.01', 'name': 'angelica'}, {'id': 21104, 'synset': 'garden_angelica.n.01', 'name': 'garden_angelica'}, {'id': 21105, 'synset': 'wild_angelica.n.01', 'name': 'wild_angelica'}, {'id': 21106, 'synset': 'chervil.n.01', 'name': 'chervil'}, {'id': 21107, 'synset': 'cow_parsley.n.01', 'name': 'cow_parsley'}, {'id': 21108, 'synset': 'wild_celery.n.01', 'name': 'wild_celery'}, {'id': 21109, 'synset': 'astrantia.n.01', 'name': 'astrantia'}, {'id': 21110, 'synset': 'greater_masterwort.n.01', 'name': 'greater_masterwort'}, {'id': 21111, 'synset': 'caraway.n.01', 'name': 'caraway'}, {'id': 21112, 'synset': 'whorled_caraway.n.01', 'name': 'whorled_caraway'}, {'id': 21113, 'synset': 'water_hemlock.n.01', 'name': 'water_hemlock'}, {'id': 21114, 'synset': 'spotted_cowbane.n.01', 'name': 'spotted_cowbane'}, {'id': 21115, 'synset': 'hemlock.n.02', 'name': 'hemlock'}, {'id': 21116, 'synset': 'earthnut.n.02', 'name': 'earthnut'}, {'id': 21117, 'synset': 'cumin.n.01', 'name': 'cumin'}, {'id': 21118, 'synset': 'wild_carrot.n.01', 'name': 'wild_carrot'}, {'id': 21119, 'synset': 'eryngo.n.01', 'name': 'eryngo'}, {'id': 21120, 'synset': 'sea_holly.n.01', 'name': 'sea_holly'}, {'id': 21121, 'synset': 'button_snakeroot.n.02', 'name': 'button_snakeroot'}, {'id': 21122, 'synset': 'rattlesnake_master.n.01', 'name': 'rattlesnake_master'}, {'id': 21123, 'synset': 'fennel.n.01', 'name': 'fennel'}, {'id': 21124, 'synset': 'common_fennel.n.01', 'name': 'common_fennel'}, {'id': 21125, 'synset': 'florence_fennel.n.01', 'name': 'Florence_fennel'}, {'id': 21126, 'synset': 'cow_parsnip.n.01', 'name': 'cow_parsnip'}, {'id': 21127, 'synset': 'lovage.n.01', 'name': 'lovage'}, {'id': 21128, 'synset': 'sweet_cicely.n.01', 'name': 'sweet_cicely'}, {'id': 21129, 'synset': 'water_fennel.n.01', 'name': 'water_fennel'}, {'id': 21130, 'synset': 'parsnip.n.02', 'name': 'parsnip'}, {'id': 21131, 'synset': 'cultivated_parsnip.n.01', 'name': 'cultivated_parsnip'}, {'id': 21132, 'synset': 'wild_parsnip.n.01', 'name': 'wild_parsnip'}, {'id': 21133, 'synset': 'parsley.n.01', 'name': 'parsley'}, {'id': 21134, 'synset': 'italian_parsley.n.01', 'name': 'Italian_parsley'}, {'id': 21135, 'synset': 'hamburg_parsley.n.01', 'name': 'Hamburg_parsley'}, {'id': 21136, 'synset': 'anise.n.01', 'name': 'anise'}, {'id': 21137, 'synset': 'sanicle.n.01', 'name': 'sanicle'}, {'id': 21138, 'synset': 'purple_sanicle.n.01', 'name': 'purple_sanicle'}, {'id': 21139, 'synset': 'european_sanicle.n.01', 'name': 'European_sanicle'}, {'id': 21140, 'synset': 'water_parsnip.n.01', 'name': 'water_parsnip'}, {'id': 21141, 'synset': 'greater_water_parsnip.n.01', 'name': 'greater_water_parsnip'}, {'id': 21142, 'synset': 'skirret.n.01', 'name': 'skirret'}, {'id': 21143, 'synset': 'dogwood.n.01', 'name': 'dogwood'}, {'id': 21144, 'synset': 'common_white_dogwood.n.01', 'name': 'common_white_dogwood'}, {'id': 21145, 'synset': 'red_osier.n.01', 'name': 'red_osier'}, {'id': 21146, 'synset': 'silky_dogwood.n.02', 'name': 'silky_dogwood'}, {'id': 21147, 'synset': 'silky_cornel.n.01', 'name': 'silky_cornel'}, {'id': 21148, 'synset': 'common_european_dogwood.n.01', 'name': 'common_European_dogwood'}, {'id': 21149, 'synset': 'bunchberry.n.01', 'name': 'bunchberry'}, {'id': 21150, 'synset': 'cornelian_cherry.n.01', 'name': 'cornelian_cherry'}, {'id': 21151, 'synset': 'puka.n.01', 'name': 'puka'}, {'id': 21152, 'synset': 'kapuka.n.01', 'name': 'kapuka'}, {'id': 21153, 'synset': 'valerian.n.01', 'name': 'valerian'}, {'id': 21154, 'synset': 'common_valerian.n.01', 'name': 'common_valerian'}, {'id': 21155, 'synset': 'common_corn_salad.n.01', 'name': 'common_corn_salad'}, {'id': 21156, 'synset': 'red_valerian.n.01', 'name': 'red_valerian'}, {'id': 21157, 'synset': 'filmy_fern.n.02', 'name': 'filmy_fern'}, {'id': 21158, 'synset': 'bristle_fern.n.01', 'name': 'bristle_fern'}, {'id': 21159, 'synset': "hare's-foot_bristle_fern.n.01", 'name': "hare's-foot_bristle_fern"}, {'id': 21160, 'synset': 'killarney_fern.n.01', 'name': 'Killarney_fern'}, {'id': 21161, 'synset': 'kidney_fern.n.01', 'name': 'kidney_fern'}, {'id': 21162, 'synset': 'flowering_fern.n.02', 'name': 'flowering_fern'}, {'id': 21163, 'synset': 'royal_fern.n.01', 'name': 'royal_fern'}, {'id': 21164, 'synset': 'interrupted_fern.n.01', 'name': 'interrupted_fern'}, {'id': 21165, 'synset': 'crape_fern.n.01', 'name': 'crape_fern'}, {'id': 21166, 'synset': 'crepe_fern.n.01', 'name': 'crepe_fern'}, {'id': 21167, 'synset': 'curly_grass.n.01', 'name': 'curly_grass'}, {'id': 21168, 'synset': 'pine_fern.n.01', 'name': 'pine_fern'}, {'id': 21169, 'synset': 'climbing_fern.n.01', 'name': 'climbing_fern'}, {'id': 21170, 'synset': 'creeping_fern.n.01', 'name': 'creeping_fern'}, {'id': 21171, 'synset': 'climbing_maidenhair.n.01', 'name': 'climbing_maidenhair'}, {'id': 21172, 'synset': 'scented_fern.n.02', 'name': 'scented_fern'}, {'id': 21173, 'synset': 'clover_fern.n.01', 'name': 'clover_fern'}, {'id': 21174, 'synset': 'nardoo.n.01', 'name': 'nardoo'}, {'id': 21175, 'synset': 'water_clover.n.01', 'name': 'water_clover'}, {'id': 21176, 'synset': 'pillwort.n.01', 'name': 'pillwort'}, {'id': 21177, 'synset': 'regnellidium.n.01', 'name': 'regnellidium'}, {'id': 21178, 'synset': 'floating-moss.n.01', 'name': 'floating-moss'}, {'id': 21179, 'synset': 'mosquito_fern.n.01', 'name': 'mosquito_fern'}, {'id': 21180, 'synset': "adder's_tongue.n.01", 'name': "adder's_tongue"}, {'id': 21181, 'synset': 'ribbon_fern.n.03', 'name': 'ribbon_fern'}, {'id': 21182, 'synset': 'grape_fern.n.01', 'name': 'grape_fern'}, {'id': 21183, 'synset': 'daisyleaf_grape_fern.n.01', 'name': 'daisyleaf_grape_fern'}, {'id': 21184, 'synset': 'leathery_grape_fern.n.01', 'name': 'leathery_grape_fern'}, {'id': 21185, 'synset': 'rattlesnake_fern.n.01', 'name': 'rattlesnake_fern'}, {'id': 21186, 'synset': 'flowering_fern.n.01', 'name': 'flowering_fern'}, {'id': 21187, 'synset': 'powdery_mildew.n.01', 'name': 'powdery_mildew'}, {'id': 21188, 'synset': 'dutch_elm_fungus.n.01', 'name': 'Dutch_elm_fungus'}, {'id': 21189, 'synset': 'ergot.n.02', 'name': 'ergot'}, {'id': 21190, 'synset': 'rye_ergot.n.01', 'name': 'rye_ergot'}, {'id': 21191, 'synset': 'black_root_rot_fungus.n.01', 'name': 'black_root_rot_fungus'}, {'id': 21192, 'synset': "dead-man's-fingers.n.01", 'name': "dead-man's-fingers"}, {'id': 21193, 'synset': 'sclerotinia.n.01', 'name': 'sclerotinia'}, {'id': 21194, 'synset': 'brown_cup.n.01', 'name': 'brown_cup'}, {'id': 21195, 'synset': 'earthball.n.01', 'name': 'earthball'}, {'id': 21196, 'synset': 'scleroderma_citrinum.n.01', 'name': 'Scleroderma_citrinum'}, {'id': 21197, 'synset': 'scleroderma_flavidium.n.01', 'name': 'Scleroderma_flavidium'}, {'id': 21198, 'synset': 'scleroderma_bovista.n.01', 'name': 'Scleroderma_bovista'}, {'id': 21199, 'synset': 'podaxaceae.n.01', 'name': 'Podaxaceae'}, {'id': 21200, 'synset': 'stalked_puffball.n.02', 'name': 'stalked_puffball'}, {'id': 21201, 'synset': 'stalked_puffball.n.01', 'name': 'stalked_puffball'}, {'id': 21202, 'synset': 'false_truffle.n.01', 'name': 'false_truffle'}, {'id': 21203, 'synset': 'rhizopogon_idahoensis.n.01', 'name': 'Rhizopogon_idahoensis'}, {'id': 21204, 'synset': 'truncocolumella_citrina.n.01', 'name': 'Truncocolumella_citrina'}, {'id': 21205, 'synset': 'mucor.n.01', 'name': 'mucor'}, {'id': 21206, 'synset': 'rhizopus.n.01', 'name': 'rhizopus'}, {'id': 21207, 'synset': 'bread_mold.n.01', 'name': 'bread_mold'}, {'id': 21208, 'synset': 'slime_mold.n.01', 'name': 'slime_mold'}, {'id': 21209, 'synset': 'true_slime_mold.n.01', 'name': 'true_slime_mold'}, {'id': 21210, 'synset': 'cellular_slime_mold.n.01', 'name': 'cellular_slime_mold'}, {'id': 21211, 'synset': 'dictostylium.n.01', 'name': 'dictostylium'}, {'id': 21212, 'synset': 'pond-scum_parasite.n.01', 'name': 'pond-scum_parasite'}, {'id': 21213, 'synset': 'potato_wart_fungus.n.01', 'name': 'potato_wart_fungus'}, {'id': 21214, 'synset': 'white_fungus.n.01', 'name': 'white_fungus'}, {'id': 21215, 'synset': 'water_mold.n.01', 'name': 'water_mold'}, {'id': 21216, 'synset': 'downy_mildew.n.01', 'name': 'downy_mildew'}, {'id': 21217, 'synset': 'blue_mold_fungus.n.01', 'name': 'blue_mold_fungus'}, {'id': 21218, 'synset': 'onion_mildew.n.01', 'name': 'onion_mildew'}, {'id': 21219, 'synset': 'tobacco_mildew.n.01', 'name': 'tobacco_mildew'}, {'id': 21220, 'synset': 'white_rust.n.01', 'name': 'white_rust'}, {'id': 21221, 'synset': 'pythium.n.01', 'name': 'pythium'}, {'id': 21222, 'synset': 'damping_off_fungus.n.01', 'name': 'damping_off_fungus'}, {'id': 21223, 'synset': 'phytophthora_citrophthora.n.01', 'name': 'Phytophthora_citrophthora'}, {'id': 21224, 'synset': 'phytophthora_infestans.n.01', 'name': 'Phytophthora_infestans'}, {'id': 21225, 'synset': 'clubroot_fungus.n.01', 'name': 'clubroot_fungus'}, {'id': 21226, 'synset': 'geglossaceae.n.01', 'name': 'Geglossaceae'}, {'id': 21227, 'synset': 'sarcosomataceae.n.01', 'name': 'Sarcosomataceae'}, {'id': 21228, 'synset': 'rufous_rubber_cup.n.01', 'name': 'Rufous_rubber_cup'}, {'id': 21229, 'synset': "devil's_cigar.n.01", 'name': "devil's_cigar"}, {'id': 21230, 'synset': "devil's_urn.n.01", 'name': "devil's_urn"}, {'id': 21231, 'synset': 'truffle.n.01', 'name': 'truffle'}, {'id': 21232, 'synset': 'club_fungus.n.01', 'name': 'club_fungus'}, {'id': 21233, 'synset': 'coral_fungus.n.01', 'name': 'coral_fungus'}, {'id': 21234, 'synset': 'tooth_fungus.n.01', 'name': 'tooth_fungus'}, {'id': 21235, 'synset': 'lichen.n.02', 'name': 'lichen'}, {'id': 21236, 'synset': 'ascolichen.n.01', 'name': 'ascolichen'}, {'id': 21237, 'synset': 'basidiolichen.n.01', 'name': 'basidiolichen'}, {'id': 21238, 'synset': 'lecanora.n.01', 'name': 'lecanora'}, {'id': 21239, 'synset': 'manna_lichen.n.01', 'name': 'manna_lichen'}, {'id': 21240, 'synset': 'archil.n.02', 'name': 'archil'}, {'id': 21241, 'synset': 'roccella.n.01', 'name': 'roccella'}, {'id': 21242, 'synset': 'beard_lichen.n.01', 'name': 'beard_lichen'}, {'id': 21243, 'synset': 'horsehair_lichen.n.01', 'name': 'horsehair_lichen'}, {'id': 21244, 'synset': 'reindeer_moss.n.01', 'name': 'reindeer_moss'}, {'id': 21245, 'synset': 'crottle.n.01', 'name': 'crottle'}, {'id': 21246, 'synset': 'iceland_moss.n.01', 'name': 'Iceland_moss'}, {'id': 21247, 'synset': 'fungus.n.01', 'name': 'fungus'}, {'id': 21248, 'synset': 'promycelium.n.01', 'name': 'promycelium'}, {'id': 21249, 'synset': 'true_fungus.n.01', 'name': 'true_fungus'}, {'id': 21250, 'synset': 'basidiomycete.n.01', 'name': 'basidiomycete'}, {'id': 21251, 'synset': 'mushroom.n.03', 'name': 'mushroom'}, {'id': 21252, 'synset': 'agaric.n.02', 'name': 'agaric'}, {'id': 21253, 'synset': 'mushroom.n.01', 'name': 'mushroom'}, {'id': 21254, 'synset': 'toadstool.n.01', 'name': 'toadstool'}, {'id': 21255, 'synset': 'horse_mushroom.n.01', 'name': 'horse_mushroom'}, {'id': 21256, 'synset': 'meadow_mushroom.n.01', 'name': 'meadow_mushroom'}, {'id': 21257, 'synset': 'shiitake.n.01', 'name': 'shiitake'}, {'id': 21258, 'synset': 'scaly_lentinus.n.01', 'name': 'scaly_lentinus'}, {'id': 21259, 'synset': 'royal_agaric.n.01', 'name': 'royal_agaric'}, {'id': 21260, 'synset': 'false_deathcap.n.01', 'name': 'false_deathcap'}, {'id': 21261, 'synset': 'fly_agaric.n.01', 'name': 'fly_agaric'}, {'id': 21262, 'synset': 'death_cap.n.01', 'name': 'death_cap'}, {'id': 21263, 'synset': 'blushing_mushroom.n.01', 'name': 'blushing_mushroom'}, {'id': 21264, 'synset': 'destroying_angel.n.01', 'name': 'destroying_angel'}, {'id': 21265, 'synset': 'chanterelle.n.01', 'name': 'chanterelle'}, {'id': 21266, 'synset': 'floccose_chanterelle.n.01', 'name': 'floccose_chanterelle'}, {'id': 21267, 'synset': "pig's_ears.n.01", 'name': "pig's_ears"}, {'id': 21268, 'synset': 'cinnabar_chanterelle.n.01', 'name': 'cinnabar_chanterelle'}, {'id': 21269, 'synset': 'jack-o-lantern_fungus.n.01', 'name': 'jack-o-lantern_fungus'}, {'id': 21270, 'synset': 'inky_cap.n.01', 'name': 'inky_cap'}, {'id': 21271, 'synset': 'shaggymane.n.01', 'name': 'shaggymane'}, {'id': 21272, 'synset': 'milkcap.n.01', 'name': 'milkcap'}, {'id': 21273, 'synset': 'fairy-ring_mushroom.n.01', 'name': 'fairy-ring_mushroom'}, {'id': 21274, 'synset': 'fairy_ring.n.01', 'name': 'fairy_ring'}, {'id': 21275, 'synset': 'oyster_mushroom.n.01', 'name': 'oyster_mushroom'}, {'id': 21276, 'synset': 'olive-tree_agaric.n.01', 'name': 'olive-tree_agaric'}, {'id': 21277, 'synset': 'pholiota_astragalina.n.01', 'name': 'Pholiota_astragalina'}, {'id': 21278, 'synset': 'pholiota_aurea.n.01', 'name': 'Pholiota_aurea'}, {'id': 21279, 'synset': 'pholiota_destruens.n.01', 'name': 'Pholiota_destruens'}, {'id': 21280, 'synset': 'pholiota_flammans.n.01', 'name': 'Pholiota_flammans'}, {'id': 21281, 'synset': 'pholiota_flavida.n.01', 'name': 'Pholiota_flavida'}, {'id': 21282, 'synset': 'nameko.n.01', 'name': 'nameko'}, {'id': 21283, 'synset': 'pholiota_squarrosa-adiposa.n.01', 'name': 'Pholiota_squarrosa-adiposa'}, {'id': 21284, 'synset': 'pholiota_squarrosa.n.01', 'name': 'Pholiota_squarrosa'}, {'id': 21285, 'synset': 'pholiota_squarrosoides.n.01', 'name': 'Pholiota_squarrosoides'}, {'id': 21286, 'synset': 'stropharia_ambigua.n.01', 'name': 'Stropharia_ambigua'}, {'id': 21287, 'synset': 'stropharia_hornemannii.n.01', 'name': 'Stropharia_hornemannii'}, {'id': 21288, 'synset': 'stropharia_rugoso-annulata.n.01', 'name': 'Stropharia_rugoso-annulata'}, {'id': 21289, 'synset': 'gill_fungus.n.01', 'name': 'gill_fungus'}, {'id': 21290, 'synset': 'entoloma_lividum.n.01', 'name': 'Entoloma_lividum'}, {'id': 21291, 'synset': 'entoloma_aprile.n.01', 'name': 'Entoloma_aprile'}, {'id': 21292, 'synset': 'chlorophyllum_molybdites.n.01', 'name': 'Chlorophyllum_molybdites'}, {'id': 21293, 'synset': 'lepiota.n.01', 'name': 'lepiota'}, {'id': 21294, 'synset': 'parasol_mushroom.n.01', 'name': 'parasol_mushroom'}, {'id': 21295, 'synset': 'poisonous_parasol.n.01', 'name': 'poisonous_parasol'}, {'id': 21296, 'synset': 'lepiota_naucina.n.01', 'name': 'Lepiota_naucina'}, {'id': 21297, 'synset': 'lepiota_rhacodes.n.01', 'name': 'Lepiota_rhacodes'}, {'id': 21298, 'synset': 'american_parasol.n.01', 'name': 'American_parasol'}, {'id': 21299, 'synset': 'lepiota_rubrotincta.n.01', 'name': 'Lepiota_rubrotincta'}, {'id': 21300, 'synset': 'lepiota_clypeolaria.n.01', 'name': 'Lepiota_clypeolaria'}, {'id': 21301, 'synset': 'onion_stem.n.01', 'name': 'onion_stem'}, {'id': 21302, 'synset': 'pink_disease_fungus.n.01', 'name': 'pink_disease_fungus'}, {'id': 21303, 'synset': 'bottom_rot_fungus.n.01', 'name': 'bottom_rot_fungus'}, {'id': 21304, 'synset': 'potato_fungus.n.01', 'name': 'potato_fungus'}, {'id': 21305, 'synset': 'coffee_fungus.n.01', 'name': 'coffee_fungus'}, {'id': 21306, 'synset': 'blewits.n.01', 'name': 'blewits'}, {'id': 21307, 'synset': 'sandy_mushroom.n.01', 'name': 'sandy_mushroom'}, {'id': 21308, 'synset': 'tricholoma_pessundatum.n.01', 'name': 'Tricholoma_pessundatum'}, {'id': 21309, 'synset': 'tricholoma_sejunctum.n.01', 'name': 'Tricholoma_sejunctum'}, {'id': 21310, 'synset': 'man-on-a-horse.n.01', 'name': 'man-on-a-horse'}, {'id': 21311, 'synset': 'tricholoma_venenata.n.01', 'name': 'Tricholoma_venenata'}, {'id': 21312, 'synset': 'tricholoma_pardinum.n.01', 'name': 'Tricholoma_pardinum'}, {'id': 21313, 'synset': 'tricholoma_vaccinum.n.01', 'name': 'Tricholoma_vaccinum'}, {'id': 21314, 'synset': 'tricholoma_aurantium.n.01', 'name': 'Tricholoma_aurantium'}, {'id': 21315, 'synset': 'volvaria_bombycina.n.01', 'name': 'Volvaria_bombycina'}, {'id': 21316, 'synset': 'pluteus_aurantiorugosus.n.01', 'name': 'Pluteus_aurantiorugosus'}, {'id': 21317, 'synset': 'pluteus_magnus.n.01', 'name': 'Pluteus_magnus'}, {'id': 21318, 'synset': 'deer_mushroom.n.01', 'name': 'deer_mushroom'}, {'id': 21319, 'synset': 'straw_mushroom.n.01', 'name': 'straw_mushroom'}, {'id': 21320, 'synset': 'volvariella_bombycina.n.01', 'name': 'Volvariella_bombycina'}, {'id': 21321, 'synset': 'clitocybe_clavipes.n.01', 'name': 'Clitocybe_clavipes'}, {'id': 21322, 'synset': 'clitocybe_dealbata.n.01', 'name': 'Clitocybe_dealbata'}, {'id': 21323, 'synset': 'clitocybe_inornata.n.01', 'name': 'Clitocybe_inornata'}, {'id': 21324, 'synset': 'clitocybe_robusta.n.01', 'name': 'Clitocybe_robusta'}, {'id': 21325, 'synset': 'clitocybe_irina.n.01', 'name': 'Clitocybe_irina'}, {'id': 21326, 'synset': 'clitocybe_subconnexa.n.01', 'name': 'Clitocybe_subconnexa'}, {'id': 21327, 'synset': 'winter_mushroom.n.01', 'name': 'winter_mushroom'}, {'id': 21328, 'synset': 'mycelium.n.01', 'name': 'mycelium'}, {'id': 21329, 'synset': 'sclerotium.n.02', 'name': 'sclerotium'}, {'id': 21330, 'synset': 'sac_fungus.n.01', 'name': 'sac_fungus'}, {'id': 21331, 'synset': 'ascomycete.n.01', 'name': 'ascomycete'}, {'id': 21332, 'synset': 'clavicipitaceae.n.01', 'name': 'Clavicipitaceae'}, {'id': 21333, 'synset': 'grainy_club.n.01', 'name': 'grainy_club'}, {'id': 21334, 'synset': 'yeast.n.02', 'name': 'yeast'}, {'id': 21335, 'synset': "baker's_yeast.n.01", 'name': "baker's_yeast"}, {'id': 21336, 'synset': "wine-maker's_yeast.n.01", 'name': "wine-maker's_yeast"}, {'id': 21337, 'synset': 'aspergillus_fumigatus.n.01', 'name': 'Aspergillus_fumigatus'}, {'id': 21338, 'synset': 'brown_root_rot_fungus.n.01', 'name': 'brown_root_rot_fungus'}, {'id': 21339, 'synset': 'discomycete.n.01', 'name': 'discomycete'}, {'id': 21340, 'synset': 'leotia_lubrica.n.01', 'name': 'Leotia_lubrica'}, {'id': 21341, 'synset': 'mitrula_elegans.n.01', 'name': 'Mitrula_elegans'}, {'id': 21342, 'synset': 'sarcoscypha_coccinea.n.01', 'name': 'Sarcoscypha_coccinea'}, {'id': 21343, 'synset': 'caloscypha_fulgens.n.01', 'name': 'Caloscypha_fulgens'}, {'id': 21344, 'synset': 'aleuria_aurantia.n.01', 'name': 'Aleuria_aurantia'}, {'id': 21345, 'synset': 'elf_cup.n.01', 'name': 'elf_cup'}, {'id': 21346, 'synset': 'peziza_domicilina.n.01', 'name': 'Peziza_domicilina'}, {'id': 21347, 'synset': 'blood_cup.n.01', 'name': 'blood_cup'}, {'id': 21348, 'synset': 'urnula_craterium.n.01', 'name': 'Urnula_craterium'}, {'id': 21349, 'synset': 'galiella_rufa.n.01', 'name': 'Galiella_rufa'}, {'id': 21350, 'synset': 'jafnea_semitosta.n.01', 'name': 'Jafnea_semitosta'}, {'id': 21351, 'synset': 'morel.n.01', 'name': 'morel'}, {'id': 21352, 'synset': 'common_morel.n.01', 'name': 'common_morel'}, {'id': 21353, 'synset': 'disciotis_venosa.n.01', 'name': 'Disciotis_venosa'}, {'id': 21354, 'synset': 'verpa.n.01', 'name': 'Verpa'}, {'id': 21355, 'synset': 'verpa_bohemica.n.01', 'name': 'Verpa_bohemica'}, {'id': 21356, 'synset': 'verpa_conica.n.01', 'name': 'Verpa_conica'}, {'id': 21357, 'synset': 'black_morel.n.01', 'name': 'black_morel'}, {'id': 21358, 'synset': 'morchella_crassipes.n.01', 'name': 'Morchella_crassipes'}, {'id': 21359, 'synset': 'morchella_semilibera.n.01', 'name': 'Morchella_semilibera'}, {'id': 21360, 'synset': 'wynnea_americana.n.01', 'name': 'Wynnea_americana'}, {'id': 21361, 'synset': 'wynnea_sparassoides.n.01', 'name': 'Wynnea_sparassoides'}, {'id': 21362, 'synset': 'false_morel.n.01', 'name': 'false_morel'}, {'id': 21363, 'synset': 'lorchel.n.01', 'name': 'lorchel'}, {'id': 21364, 'synset': 'helvella.n.01', 'name': 'helvella'}, {'id': 21365, 'synset': 'helvella_crispa.n.01', 'name': 'Helvella_crispa'}, {'id': 21366, 'synset': 'helvella_acetabulum.n.01', 'name': 'Helvella_acetabulum'}, {'id': 21367, 'synset': 'helvella_sulcata.n.01', 'name': 'Helvella_sulcata'}, {'id': 21368, 'synset': 'discina.n.01', 'name': 'discina'}, {'id': 21369, 'synset': 'gyromitra.n.01', 'name': 'gyromitra'}, {'id': 21370, 'synset': 'gyromitra_californica.n.01', 'name': 'Gyromitra_californica'}, {'id': 21371, 'synset': 'gyromitra_sphaerospora.n.01', 'name': 'Gyromitra_sphaerospora'}, {'id': 21372, 'synset': 'gyromitra_esculenta.n.01', 'name': 'Gyromitra_esculenta'}, {'id': 21373, 'synset': 'gyromitra_infula.n.01', 'name': 'Gyromitra_infula'}, {'id': 21374, 'synset': 'gyromitra_fastigiata.n.01', 'name': 'Gyromitra_fastigiata'}, {'id': 21375, 'synset': 'gyromitra_gigas.n.01', 'name': 'Gyromitra_gigas'}, {'id': 21376, 'synset': 'gasteromycete.n.01', 'name': 'gasteromycete'}, {'id': 21377, 'synset': 'stinkhorn.n.01', 'name': 'stinkhorn'}, {'id': 21378, 'synset': 'common_stinkhorn.n.01', 'name': 'common_stinkhorn'}, {'id': 21379, 'synset': 'phallus_ravenelii.n.01', 'name': 'Phallus_ravenelii'}, {'id': 21380, 'synset': 'dog_stinkhorn.n.01', 'name': 'dog_stinkhorn'}, {'id': 21381, 'synset': 'calostoma_lutescens.n.01', 'name': 'Calostoma_lutescens'}, {'id': 21382, 'synset': 'calostoma_cinnabarina.n.01', 'name': 'Calostoma_cinnabarina'}, {'id': 21383, 'synset': 'calostoma_ravenelii.n.01', 'name': 'Calostoma_ravenelii'}, {'id': 21384, 'synset': 'stinky_squid.n.01', 'name': 'stinky_squid'}, {'id': 21385, 'synset': 'puffball.n.01', 'name': 'puffball'}, {'id': 21386, 'synset': 'giant_puffball.n.01', 'name': 'giant_puffball'}, {'id': 21387, 'synset': 'earthstar.n.01', 'name': 'earthstar'}, {'id': 21388, 'synset': 'geastrum_coronatum.n.01', 'name': 'Geastrum_coronatum'}, {'id': 21389, 'synset': 'radiigera_fuscogleba.n.01', 'name': 'Radiigera_fuscogleba'}, {'id': 21390, 'synset': 'astreus_pteridis.n.01', 'name': 'Astreus_pteridis'}, {'id': 21391, 'synset': 'astreus_hygrometricus.n.01', 'name': 'Astreus_hygrometricus'}, {'id': 21392, 'synset': "bird's-nest_fungus.n.01", 'name': "bird's-nest_fungus"}, {'id': 21393, 'synset': 'gastrocybe_lateritia.n.01', 'name': 'Gastrocybe_lateritia'}, {'id': 21394, 'synset': 'macowanites_americanus.n.01', 'name': 'Macowanites_americanus'}, {'id': 21395, 'synset': 'polypore.n.01', 'name': 'polypore'}, {'id': 21396, 'synset': 'bracket_fungus.n.01', 'name': 'bracket_fungus'}, {'id': 21397, 'synset': 'albatrellus_dispansus.n.01', 'name': 'Albatrellus_dispansus'}, {'id': 21398, 'synset': 'albatrellus_ovinus.n.01', 'name': 'Albatrellus_ovinus'}, {'id': 21399, 'synset': 'neolentinus_ponderosus.n.01', 'name': 'Neolentinus_ponderosus'}, {'id': 21400, 'synset': 'oligoporus_leucospongia.n.01', 'name': 'Oligoporus_leucospongia'}, {'id': 21401, 'synset': 'polyporus_tenuiculus.n.01', 'name': 'Polyporus_tenuiculus'}, {'id': 21402, 'synset': 'hen-of-the-woods.n.01', 'name': 'hen-of-the-woods'}, {'id': 21403, 'synset': 'polyporus_squamosus.n.01', 'name': 'Polyporus_squamosus'}, {'id': 21404, 'synset': 'beefsteak_fungus.n.01', 'name': 'beefsteak_fungus'}, {'id': 21405, 'synset': 'agaric.n.01', 'name': 'agaric'}, {'id': 21406, 'synset': 'bolete.n.01', 'name': 'bolete'}, {'id': 21407, 'synset': 'boletus_chrysenteron.n.01', 'name': 'Boletus_chrysenteron'}, {'id': 21408, 'synset': 'boletus_edulis.n.01', 'name': 'Boletus_edulis'}, {'id': 21409, 'synset': "frost's_bolete.n.01", 'name': "Frost's_bolete"}, {'id': 21410, 'synset': 'boletus_luridus.n.01', 'name': 'Boletus_luridus'}, {'id': 21411, 'synset': 'boletus_mirabilis.n.01', 'name': 'Boletus_mirabilis'}, {'id': 21412, 'synset': 'boletus_pallidus.n.01', 'name': 'Boletus_pallidus'}, {'id': 21413, 'synset': 'boletus_pulcherrimus.n.01', 'name': 'Boletus_pulcherrimus'}, {'id': 21414, 'synset': 'boletus_pulverulentus.n.01', 'name': 'Boletus_pulverulentus'}, {'id': 21415, 'synset': 'boletus_roxanae.n.01', 'name': 'Boletus_roxanae'}, {'id': 21416, 'synset': 'boletus_subvelutipes.n.01', 'name': 'Boletus_subvelutipes'}, {'id': 21417, 'synset': 'boletus_variipes.n.01', 'name': 'Boletus_variipes'}, {'id': 21418, 'synset': 'boletus_zelleri.n.01', 'name': 'Boletus_zelleri'}, {'id': 21419, 'synset': 'fuscoboletinus_paluster.n.01', 'name': 'Fuscoboletinus_paluster'}, {'id': 21420, 'synset': 'fuscoboletinus_serotinus.n.01', 'name': 'Fuscoboletinus_serotinus'}, {'id': 21421, 'synset': 'leccinum_fibrillosum.n.01', 'name': 'Leccinum_fibrillosum'}, {'id': 21422, 'synset': 'suillus_albivelatus.n.01', 'name': 'Suillus_albivelatus'}, {'id': 21423, 'synset': 'old-man-of-the-woods.n.01', 'name': 'old-man-of-the-woods'}, {'id': 21424, 'synset': 'boletellus_russellii.n.01', 'name': 'Boletellus_russellii'}, {'id': 21425, 'synset': 'jelly_fungus.n.01', 'name': 'jelly_fungus'}, {'id': 21426, 'synset': 'snow_mushroom.n.01', 'name': 'snow_mushroom'}, {'id': 21427, 'synset': "witches'_butter.n.01", 'name': "witches'_butter"}, {'id': 21428, 'synset': 'tremella_foliacea.n.01', 'name': 'Tremella_foliacea'}, {'id': 21429, 'synset': 'tremella_reticulata.n.01', 'name': 'Tremella_reticulata'}, {'id': 21430, 'synset': "jew's-ear.n.01", 'name': "Jew's-ear"}, {'id': 21431, 'synset': 'rust.n.04', 'name': 'rust'}, {'id': 21432, 'synset': 'aecium.n.01', 'name': 'aecium'}, {'id': 21433, 'synset': 'flax_rust.n.01', 'name': 'flax_rust'}, {'id': 21434, 'synset': 'blister_rust.n.02', 'name': 'blister_rust'}, {'id': 21435, 'synset': 'wheat_rust.n.01', 'name': 'wheat_rust'}, {'id': 21436, 'synset': 'apple_rust.n.01', 'name': 'apple_rust'}, {'id': 21437, 'synset': 'smut.n.03', 'name': 'smut'}, {'id': 21438, 'synset': 'covered_smut.n.01', 'name': 'covered_smut'}, {'id': 21439, 'synset': 'loose_smut.n.02', 'name': 'loose_smut'}, {'id': 21440, 'synset': 'cornsmut.n.01', 'name': 'cornsmut'}, {'id': 21441, 'synset': 'boil_smut.n.01', 'name': 'boil_smut'}, {'id': 21442, 'synset': 'sphacelotheca.n.01', 'name': 'Sphacelotheca'}, {'id': 21443, 'synset': 'head_smut.n.01', 'name': 'head_smut'}, {'id': 21444, 'synset': 'bunt.n.04', 'name': 'bunt'}, {'id': 21445, 'synset': 'bunt.n.03', 'name': 'bunt'}, {'id': 21446, 'synset': 'onion_smut.n.01', 'name': 'onion_smut'}, {'id': 21447, 'synset': 'flag_smut_fungus.n.01', 'name': 'flag_smut_fungus'}, {'id': 21448, 'synset': 'wheat_flag_smut.n.01', 'name': 'wheat_flag_smut'}, {'id': 21449, 'synset': 'felt_fungus.n.01', 'name': 'felt_fungus'}, {'id': 21450, 'synset': 'waxycap.n.01', 'name': 'waxycap'}, {'id': 21451, 'synset': 'hygrocybe_acutoconica.n.01', 'name': 'Hygrocybe_acutoconica'}, {'id': 21452, 'synset': 'hygrophorus_borealis.n.01', 'name': 'Hygrophorus_borealis'}, {'id': 21453, 'synset': 'hygrophorus_caeruleus.n.01', 'name': 'Hygrophorus_caeruleus'}, {'id': 21454, 'synset': 'hygrophorus_inocybiformis.n.01', 'name': 'Hygrophorus_inocybiformis'}, {'id': 21455, 'synset': 'hygrophorus_kauffmanii.n.01', 'name': 'Hygrophorus_kauffmanii'}, {'id': 21456, 'synset': 'hygrophorus_marzuolus.n.01', 'name': 'Hygrophorus_marzuolus'}, {'id': 21457, 'synset': 'hygrophorus_purpurascens.n.01', 'name': 'Hygrophorus_purpurascens'}, {'id': 21458, 'synset': 'hygrophorus_russula.n.01', 'name': 'Hygrophorus_russula'}, {'id': 21459, 'synset': 'hygrophorus_sordidus.n.01', 'name': 'Hygrophorus_sordidus'}, {'id': 21460, 'synset': 'hygrophorus_tennesseensis.n.01', 'name': 'Hygrophorus_tennesseensis'}, {'id': 21461, 'synset': 'hygrophorus_turundus.n.01', 'name': 'Hygrophorus_turundus'}, {'id': 21462, 'synset': 'neohygrophorus_angelesianus.n.01', 'name': 'Neohygrophorus_angelesianus'}, {'id': 21463, 'synset': 'cortinarius_armillatus.n.01', 'name': 'Cortinarius_armillatus'}, {'id': 21464, 'synset': 'cortinarius_atkinsonianus.n.01', 'name': 'Cortinarius_atkinsonianus'}, {'id': 21465, 'synset': 'cortinarius_corrugatus.n.01', 'name': 'Cortinarius_corrugatus'}, {'id': 21466, 'synset': 'cortinarius_gentilis.n.01', 'name': 'Cortinarius_gentilis'}, {'id': 21467, 'synset': 'cortinarius_mutabilis.n.01', 'name': 'Cortinarius_mutabilis'}, {'id': 21468, 'synset': 'cortinarius_semisanguineus.n.01', 'name': 'Cortinarius_semisanguineus'}, {'id': 21469, 'synset': 'cortinarius_subfoetidus.n.01', 'name': 'Cortinarius_subfoetidus'}, {'id': 21470, 'synset': 'cortinarius_violaceus.n.01', 'name': 'Cortinarius_violaceus'}, {'id': 21471, 'synset': 'gymnopilus_spectabilis.n.01', 'name': 'Gymnopilus_spectabilis'}, {'id': 21472, 'synset': 'gymnopilus_validipes.n.01', 'name': 'Gymnopilus_validipes'}, {'id': 21473, 'synset': 'gymnopilus_ventricosus.n.01', 'name': 'Gymnopilus_ventricosus'}, {'id': 21474, 'synset': 'mold.n.05', 'name': 'mold'}, {'id': 21475, 'synset': 'mildew.n.02', 'name': 'mildew'}, {'id': 21476, 'synset': 'verticillium.n.01', 'name': 'verticillium'}, {'id': 21477, 'synset': 'monilia.n.01', 'name': 'monilia'}, {'id': 21478, 'synset': 'candida.n.01', 'name': 'candida'}, {'id': 21479, 'synset': 'candida_albicans.n.01', 'name': 'Candida_albicans'}, {'id': 21480, 'synset': 'blastomycete.n.01', 'name': 'blastomycete'}, {'id': 21481, 'synset': 'yellow_spot_fungus.n.01', 'name': 'yellow_spot_fungus'}, {'id': 21482, 'synset': 'green_smut_fungus.n.01', 'name': 'green_smut_fungus'}, {'id': 21483, 'synset': 'dry_rot.n.02', 'name': 'dry_rot'}, {'id': 21484, 'synset': 'rhizoctinia.n.01', 'name': 'rhizoctinia'}, {'id': 21485, 'synset': 'houseplant.n.01', 'name': 'houseplant'}, {'id': 21486, 'synset': 'bedder.n.01', 'name': 'bedder'}, {'id': 21487, 'synset': 'succulent.n.01', 'name': 'succulent'}, {'id': 21488, 'synset': 'cultivar.n.01', 'name': 'cultivar'}, {'id': 21489, 'synset': 'weed.n.01', 'name': 'weed'}, {'id': 21490, 'synset': 'wort.n.01', 'name': 'wort'}, {'id': 21491, 'synset': 'brier.n.02', 'name': 'brier'}, {'id': 21492, 'synset': 'aril.n.01', 'name': 'aril'}, {'id': 21493, 'synset': 'sporophyll.n.01', 'name': 'sporophyll'}, {'id': 21494, 'synset': 'sporangium.n.01', 'name': 'sporangium'}, {'id': 21495, 'synset': 'sporangiophore.n.01', 'name': 'sporangiophore'}, {'id': 21496, 'synset': 'ascus.n.01', 'name': 'ascus'}, {'id': 21497, 'synset': 'ascospore.n.01', 'name': 'ascospore'}, {'id': 21498, 'synset': 'arthrospore.n.02', 'name': 'arthrospore'}, {'id': 21499, 'synset': 'eusporangium.n.01', 'name': 'eusporangium'}, {'id': 21500, 'synset': 'tetrasporangium.n.01', 'name': 'tetrasporangium'}, {'id': 21501, 'synset': 'gametangium.n.01', 'name': 'gametangium'}, {'id': 21502, 'synset': 'sorus.n.02', 'name': 'sorus'}, {'id': 21503, 'synset': 'sorus.n.01', 'name': 'sorus'}, {'id': 21504, 'synset': 'partial_veil.n.01', 'name': 'partial_veil'}, {'id': 21505, 'synset': 'lignum.n.01', 'name': 'lignum'}, {'id': 21506, 'synset': 'vascular_ray.n.01', 'name': 'vascular_ray'}, {'id': 21507, 'synset': 'phloem.n.01', 'name': 'phloem'}, {'id': 21508, 'synset': 'evergreen.n.01', 'name': 'evergreen'}, {'id': 21509, 'synset': 'deciduous_plant.n.01', 'name': 'deciduous_plant'}, {'id': 21510, 'synset': 'poisonous_plant.n.01', 'name': 'poisonous_plant'}, {'id': 21511, 'synset': 'vine.n.01', 'name': 'vine'}, {'id': 21512, 'synset': 'creeper.n.01', 'name': 'creeper'}, {'id': 21513, 'synset': 'tendril.n.01', 'name': 'tendril'}, {'id': 21514, 'synset': 'root_climber.n.01', 'name': 'root_climber'}, {'id': 21515, 'synset': 'lignosae.n.01', 'name': 'lignosae'}, {'id': 21516, 'synset': 'arborescent_plant.n.01', 'name': 'arborescent_plant'}, {'id': 21517, 'synset': 'snag.n.02', 'name': 'snag'}, {'id': 21518, 'synset': 'tree.n.01', 'name': 'tree'}, {'id': 21519, 'synset': 'timber_tree.n.01', 'name': 'timber_tree'}, {'id': 21520, 'synset': 'treelet.n.01', 'name': 'treelet'}, {'id': 21521, 'synset': 'arbor.n.01', 'name': 'arbor'}, {'id': 21522, 'synset': 'bean_tree.n.01', 'name': 'bean_tree'}, {'id': 21523, 'synset': 'pollard.n.01', 'name': 'pollard'}, {'id': 21524, 'synset': 'sapling.n.01', 'name': 'sapling'}, {'id': 21525, 'synset': 'shade_tree.n.01', 'name': 'shade_tree'}, {'id': 21526, 'synset': 'gymnospermous_tree.n.01', 'name': 'gymnospermous_tree'}, {'id': 21527, 'synset': 'conifer.n.01', 'name': 'conifer'}, {'id': 21528, 'synset': 'angiospermous_tree.n.01', 'name': 'angiospermous_tree'}, {'id': 21529, 'synset': 'nut_tree.n.01', 'name': 'nut_tree'}, {'id': 21530, 'synset': 'spice_tree.n.01', 'name': 'spice_tree'}, {'id': 21531, 'synset': 'fever_tree.n.01', 'name': 'fever_tree'}, {'id': 21532, 'synset': 'stump.n.01', 'name': 'stump'}, {'id': 21533, 'synset': 'bonsai.n.01', 'name': 'bonsai'}, {'id': 21534, 'synset': 'ming_tree.n.02', 'name': 'ming_tree'}, {'id': 21535, 'synset': 'ming_tree.n.01', 'name': 'ming_tree'}, {'id': 21536, 'synset': 'undershrub.n.01', 'name': 'undershrub'}, {'id': 21537, 'synset': 'subshrub.n.01', 'name': 'subshrub'}, {'id': 21538, 'synset': 'bramble.n.01', 'name': 'bramble'}, {'id': 21539, 'synset': 'liana.n.01', 'name': 'liana'}, {'id': 21540, 'synset': 'geophyte.n.01', 'name': 'geophyte'}, {'id': 21541, 'synset': 'desert_plant.n.01', 'name': 'desert_plant'}, {'id': 21542, 'synset': 'mesophyte.n.01', 'name': 'mesophyte'}, {'id': 21543, 'synset': 'marsh_plant.n.01', 'name': 'marsh_plant'}, {'id': 21544, 'synset': 'hemiepiphyte.n.01', 'name': 'hemiepiphyte'}, {'id': 21545, 'synset': 'strangler.n.01', 'name': 'strangler'}, {'id': 21546, 'synset': 'lithophyte.n.01', 'name': 'lithophyte'}, {'id': 21547, 'synset': 'saprobe.n.01', 'name': 'saprobe'}, {'id': 21548, 'synset': 'autophyte.n.01', 'name': 'autophyte'}, {'id': 21549, 'synset': 'root.n.01', 'name': 'root'}, {'id': 21550, 'synset': 'taproot.n.01', 'name': 'taproot'}, {'id': 21551, 'synset': 'prop_root.n.01', 'name': 'prop_root'}, {'id': 21552, 'synset': 'prophyll.n.01', 'name': 'prophyll'}, {'id': 21553, 'synset': 'rootstock.n.02', 'name': 'rootstock'}, {'id': 21554, 'synset': 'quickset.n.01', 'name': 'quickset'}, {'id': 21555, 'synset': 'stolon.n.01', 'name': 'stolon'}, {'id': 21556, 'synset': 'tuberous_plant.n.01', 'name': 'tuberous_plant'}, {'id': 21557, 'synset': 'rhizome.n.01', 'name': 'rhizome'}, {'id': 21558, 'synset': 'rachis.n.01', 'name': 'rachis'}, {'id': 21559, 'synset': 'caudex.n.02', 'name': 'caudex'}, {'id': 21560, 'synset': 'cladode.n.01', 'name': 'cladode'}, {'id': 21561, 'synset': 'receptacle.n.02', 'name': 'receptacle'}, {'id': 21562, 'synset': 'scape.n.01', 'name': 'scape'}, {'id': 21563, 'synset': 'umbel.n.01', 'name': 'umbel'}, {'id': 21564, 'synset': 'petiole.n.01', 'name': 'petiole'}, {'id': 21565, 'synset': 'peduncle.n.02', 'name': 'peduncle'}, {'id': 21566, 'synset': 'pedicel.n.01', 'name': 'pedicel'}, {'id': 21567, 'synset': 'flower_cluster.n.01', 'name': 'flower_cluster'}, {'id': 21568, 'synset': 'raceme.n.01', 'name': 'raceme'}, {'id': 21569, 'synset': 'panicle.n.01', 'name': 'panicle'}, {'id': 21570, 'synset': 'thyrse.n.01', 'name': 'thyrse'}, {'id': 21571, 'synset': 'cyme.n.01', 'name': 'cyme'}, {'id': 21572, 'synset': 'cymule.n.01', 'name': 'cymule'}, {'id': 21573, 'synset': 'glomerule.n.01', 'name': 'glomerule'}, {'id': 21574, 'synset': 'scorpioid_cyme.n.01', 'name': 'scorpioid_cyme'}, {'id': 21575, 'synset': 'ear.n.05', 'name': 'ear'}, {'id': 21576, 'synset': 'spadix.n.01', 'name': 'spadix'}, {'id': 21577, 'synset': 'bulbous_plant.n.01', 'name': 'bulbous_plant'}, {'id': 21578, 'synset': 'bulbil.n.01', 'name': 'bulbil'}, {'id': 21579, 'synset': 'cormous_plant.n.01', 'name': 'cormous_plant'}, {'id': 21580, 'synset': 'fruit.n.01', 'name': 'fruit'}, {'id': 21581, 'synset': 'fruitlet.n.01', 'name': 'fruitlet'}, {'id': 21582, 'synset': 'seed.n.01', 'name': 'seed'}, {'id': 21583, 'synset': 'bean.n.02', 'name': 'bean'}, {'id': 21584, 'synset': 'nut.n.01', 'name': 'nut'}, {'id': 21585, 'synset': 'nutlet.n.01', 'name': 'nutlet'}, {'id': 21586, 'synset': 'kernel.n.01', 'name': 'kernel'}, {'id': 21587, 'synset': 'syconium.n.01', 'name': 'syconium'}, {'id': 21588, 'synset': 'berry.n.02', 'name': 'berry'}, {'id': 21589, 'synset': 'aggregate_fruit.n.01', 'name': 'aggregate_fruit'}, {'id': 21590, 'synset': 'simple_fruit.n.01', 'name': 'simple_fruit'}, {'id': 21591, 'synset': 'acinus.n.01', 'name': 'acinus'}, {'id': 21592, 'synset': 'drupe.n.01', 'name': 'drupe'}, {'id': 21593, 'synset': 'drupelet.n.01', 'name': 'drupelet'}, {'id': 21594, 'synset': 'pome.n.01', 'name': 'pome'}, {'id': 21595, 'synset': 'pod.n.02', 'name': 'pod'}, {'id': 21596, 'synset': 'loment.n.01', 'name': 'loment'}, {'id': 21597, 'synset': 'pyxidium.n.01', 'name': 'pyxidium'}, {'id': 21598, 'synset': 'husk.n.02', 'name': 'husk'}, {'id': 21599, 'synset': 'cornhusk.n.01', 'name': 'cornhusk'}, {'id': 21600, 'synset': 'pod.n.01', 'name': 'pod'}, {'id': 21601, 'synset': 'accessory_fruit.n.01', 'name': 'accessory_fruit'}, {'id': 21602, 'synset': 'buckthorn.n.01', 'name': 'buckthorn'}, {'id': 21603, 'synset': 'buckthorn_berry.n.01', 'name': 'buckthorn_berry'}, {'id': 21604, 'synset': 'cascara_buckthorn.n.01', 'name': 'cascara_buckthorn'}, {'id': 21605, 'synset': 'cascara.n.01', 'name': 'cascara'}, {'id': 21606, 'synset': 'carolina_buckthorn.n.01', 'name': 'Carolina_buckthorn'}, {'id': 21607, 'synset': 'coffeeberry.n.01', 'name': 'coffeeberry'}, {'id': 21608, 'synset': 'redberry.n.01', 'name': 'redberry'}, {'id': 21609, 'synset': 'nakedwood.n.01', 'name': 'nakedwood'}, {'id': 21610, 'synset': 'jujube.n.01', 'name': 'jujube'}, {'id': 21611, 'synset': "christ's-thorn.n.01", 'name': "Christ's-thorn"}, {'id': 21612, 'synset': 'hazel.n.01', 'name': 'hazel'}, {'id': 21613, 'synset': 'fox_grape.n.01', 'name': 'fox_grape'}, {'id': 21614, 'synset': 'muscadine.n.01', 'name': 'muscadine'}, {'id': 21615, 'synset': 'vinifera.n.01', 'name': 'vinifera'}, {'id': 21616, 'synset': 'pinot_blanc.n.01', 'name': 'Pinot_blanc'}, {'id': 21617, 'synset': 'sauvignon_grape.n.01', 'name': 'Sauvignon_grape'}, {'id': 21618, 'synset': 'sauvignon_blanc.n.01', 'name': 'Sauvignon_blanc'}, {'id': 21619, 'synset': 'muscadet.n.01', 'name': 'Muscadet'}, {'id': 21620, 'synset': 'riesling.n.01', 'name': 'Riesling'}, {'id': 21621, 'synset': 'zinfandel.n.01', 'name': 'Zinfandel'}, {'id': 21622, 'synset': 'chenin_blanc.n.01', 'name': 'Chenin_blanc'}, {'id': 21623, 'synset': 'malvasia.n.01', 'name': 'malvasia'}, {'id': 21624, 'synset': 'verdicchio.n.01', 'name': 'Verdicchio'}, {'id': 21625, 'synset': 'boston_ivy.n.01', 'name': 'Boston_ivy'}, {'id': 21626, 'synset': 'virginia_creeper.n.01', 'name': 'Virginia_creeper'}, {'id': 21627, 'synset': 'true_pepper.n.01', 'name': 'true_pepper'}, {'id': 21628, 'synset': 'betel.n.01', 'name': 'betel'}, {'id': 21629, 'synset': 'cubeb.n.01', 'name': 'cubeb'}, {'id': 21630, 'synset': 'schizocarp.n.01', 'name': 'schizocarp'}, {'id': 21631, 'synset': 'peperomia.n.01', 'name': 'peperomia'}, {'id': 21632, 'synset': 'watermelon_begonia.n.01', 'name': 'watermelon_begonia'}, {'id': 21633, 'synset': 'yerba_mansa.n.01', 'name': 'yerba_mansa'}, {'id': 21634, 'synset': 'pinna.n.01', 'name': 'pinna'}, {'id': 21635, 'synset': 'frond.n.01', 'name': 'frond'}, {'id': 21636, 'synset': 'bract.n.01', 'name': 'bract'}, {'id': 21637, 'synset': 'bracteole.n.01', 'name': 'bracteole'}, {'id': 21638, 'synset': 'involucre.n.01', 'name': 'involucre'}, {'id': 21639, 'synset': 'glume.n.01', 'name': 'glume'}, {'id': 21640, 'synset': 'palmate_leaf.n.01', 'name': 'palmate_leaf'}, {'id': 21641, 'synset': 'pinnate_leaf.n.01', 'name': 'pinnate_leaf'}, {'id': 21642, 'synset': 'bijugate_leaf.n.01', 'name': 'bijugate_leaf'}, {'id': 21643, 'synset': 'decompound_leaf.n.01', 'name': 'decompound_leaf'}, {'id': 21644, 'synset': 'acuminate_leaf.n.01', 'name': 'acuminate_leaf'}, {'id': 21645, 'synset': 'deltoid_leaf.n.01', 'name': 'deltoid_leaf'}, {'id': 21646, 'synset': 'ensiform_leaf.n.01', 'name': 'ensiform_leaf'}, {'id': 21647, 'synset': 'linear_leaf.n.01', 'name': 'linear_leaf'}, {'id': 21648, 'synset': 'lyrate_leaf.n.01', 'name': 'lyrate_leaf'}, {'id': 21649, 'synset': 'obtuse_leaf.n.01', 'name': 'obtuse_leaf'}, {'id': 21650, 'synset': 'oblanceolate_leaf.n.01', 'name': 'oblanceolate_leaf'}, {'id': 21651, 'synset': 'pandurate_leaf.n.01', 'name': 'pandurate_leaf'}, {'id': 21652, 'synset': 'reniform_leaf.n.01', 'name': 'reniform_leaf'}, {'id': 21653, 'synset': 'spatulate_leaf.n.01', 'name': 'spatulate_leaf'}, {'id': 21654, 'synset': 'even-pinnate_leaf.n.01', 'name': 'even-pinnate_leaf'}, {'id': 21655, 'synset': 'odd-pinnate_leaf.n.01', 'name': 'odd-pinnate_leaf'}, {'id': 21656, 'synset': 'pedate_leaf.n.01', 'name': 'pedate_leaf'}, {'id': 21657, 'synset': 'crenate_leaf.n.01', 'name': 'crenate_leaf'}, {'id': 21658, 'synset': 'dentate_leaf.n.01', 'name': 'dentate_leaf'}, {'id': 21659, 'synset': 'denticulate_leaf.n.01', 'name': 'denticulate_leaf'}, {'id': 21660, 'synset': 'erose_leaf.n.01', 'name': 'erose_leaf'}, {'id': 21661, 'synset': 'runcinate_leaf.n.01', 'name': 'runcinate_leaf'}, {'id': 21662, 'synset': 'prickly-edged_leaf.n.01', 'name': 'prickly-edged_leaf'}, {'id': 21663, 'synset': 'deadwood.n.01', 'name': 'deadwood'}, {'id': 21664, 'synset': 'haulm.n.01', 'name': 'haulm'}, {'id': 21665, 'synset': 'branchlet.n.01', 'name': 'branchlet'}, {'id': 21666, 'synset': 'osier.n.01', 'name': 'osier'}, {'id': 21667, 'synset': 'giant_scrambling_fern.n.01', 'name': 'giant_scrambling_fern'}, {'id': 21668, 'synset': 'umbrella_fern.n.01', 'name': 'umbrella_fern'}, {'id': 21669, 'synset': 'floating_fern.n.02', 'name': 'floating_fern'}, {'id': 21670, 'synset': 'polypody.n.01', 'name': 'polypody'}, {'id': 21671, 'synset': 'licorice_fern.n.01', 'name': 'licorice_fern'}, {'id': 21672, 'synset': 'grey_polypody.n.01', 'name': 'grey_polypody'}, {'id': 21673, 'synset': 'leatherleaf.n.01', 'name': 'leatherleaf'}, {'id': 21674, 'synset': 'rock_polypody.n.01', 'name': 'rock_polypody'}, {'id': 21675, 'synset': 'common_polypody.n.01', 'name': 'common_polypody'}, {'id': 21676, 'synset': "bear's-paw_fern.n.01", 'name': "bear's-paw_fern"}, {'id': 21677, 'synset': 'strap_fern.n.01', 'name': 'strap_fern'}, {'id': 21678, 'synset': 'florida_strap_fern.n.01', 'name': 'Florida_strap_fern'}, {'id': 21679, 'synset': 'basket_fern.n.02', 'name': 'basket_fern'}, {'id': 21680, 'synset': 'snake_polypody.n.01', 'name': 'snake_polypody'}, {'id': 21681, 'synset': "climbing_bird's_nest_fern.n.01", 'name': "climbing_bird's_nest_fern"}, {'id': 21682, 'synset': 'golden_polypody.n.01', 'name': 'golden_polypody'}, {'id': 21683, 'synset': 'staghorn_fern.n.01', 'name': 'staghorn_fern'}, {'id': 21684, 'synset': 'south_american_staghorn.n.01', 'name': 'South_American_staghorn'}, {'id': 21685, 'synset': 'common_staghorn_fern.n.01', 'name': 'common_staghorn_fern'}, {'id': 21686, 'synset': 'felt_fern.n.01', 'name': 'felt_fern'}, {'id': 21687, 'synset': 'potato_fern.n.02', 'name': 'potato_fern'}, {'id': 21688, 'synset': 'myrmecophyte.n.01', 'name': 'myrmecophyte'}, {'id': 21689, 'synset': 'grass_fern.n.01', 'name': 'grass_fern'}, {'id': 21690, 'synset': 'spleenwort.n.01', 'name': 'spleenwort'}, {'id': 21691, 'synset': 'black_spleenwort.n.01', 'name': 'black_spleenwort'}, {'id': 21692, 'synset': "bird's_nest_fern.n.01", 'name': "bird's_nest_fern"}, {'id': 21693, 'synset': 'ebony_spleenwort.n.01', 'name': 'ebony_spleenwort'}, {'id': 21694, 'synset': 'black-stem_spleenwort.n.01', 'name': 'black-stem_spleenwort'}, {'id': 21695, 'synset': 'walking_fern.n.01', 'name': 'walking_fern'}, {'id': 21696, 'synset': 'green_spleenwort.n.01', 'name': 'green_spleenwort'}, {'id': 21697, 'synset': 'mountain_spleenwort.n.01', 'name': 'mountain_spleenwort'}, {'id': 21698, 'synset': 'lobed_spleenwort.n.01', 'name': 'lobed_spleenwort'}, {'id': 21699, 'synset': 'lanceolate_spleenwort.n.01', 'name': 'lanceolate_spleenwort'}, {'id': 21700, 'synset': "hart's-tongue.n.02", 'name': "hart's-tongue"}, {'id': 21701, 'synset': 'scale_fern.n.01', 'name': 'scale_fern'}, {'id': 21702, 'synset': 'scolopendrium.n.01', 'name': 'scolopendrium'}, {'id': 21703, 'synset': 'deer_fern.n.01', 'name': 'deer_fern'}, {'id': 21704, 'synset': 'doodia.n.01', 'name': 'doodia'}, {'id': 21705, 'synset': 'chain_fern.n.01', 'name': 'chain_fern'}, {'id': 21706, 'synset': 'virginia_chain_fern.n.01', 'name': 'Virginia_chain_fern'}, {'id': 21707, 'synset': 'silver_tree_fern.n.01', 'name': 'silver_tree_fern'}, {'id': 21708, 'synset': 'davallia.n.01', 'name': 'davallia'}, {'id': 21709, 'synset': "hare's-foot_fern.n.01", 'name': "hare's-foot_fern"}, {'id': 21710, 'synset': "canary_island_hare's_foot_fern.n.01", 'name': "Canary_Island_hare's_foot_fern"}, {'id': 21711, 'synset': "squirrel's-foot_fern.n.01", 'name': "squirrel's-foot_fern"}, {'id': 21712, 'synset': 'bracken.n.01', 'name': 'bracken'}, {'id': 21713, 'synset': 'soft_tree_fern.n.01', 'name': 'soft_tree_fern'}, {'id': 21714, 'synset': 'scythian_lamb.n.01', 'name': 'Scythian_lamb'}, {'id': 21715, 'synset': 'false_bracken.n.01', 'name': 'false_bracken'}, {'id': 21716, 'synset': 'thyrsopteris.n.01', 'name': 'thyrsopteris'}, {'id': 21717, 'synset': 'shield_fern.n.01', 'name': 'shield_fern'}, {'id': 21718, 'synset': 'broad_buckler-fern.n.01', 'name': 'broad_buckler-fern'}, {'id': 21719, 'synset': 'fragrant_cliff_fern.n.01', 'name': 'fragrant_cliff_fern'}, {'id': 21720, 'synset': "goldie's_fern.n.01", 'name': "Goldie's_fern"}, {'id': 21721, 'synset': 'wood_fern.n.01', 'name': 'wood_fern'}, {'id': 21722, 'synset': 'male_fern.n.01', 'name': 'male_fern'}, {'id': 21723, 'synset': 'marginal_wood_fern.n.01', 'name': 'marginal_wood_fern'}, {'id': 21724, 'synset': 'mountain_male_fern.n.01', 'name': 'mountain_male_fern'}, {'id': 21725, 'synset': 'lady_fern.n.01', 'name': 'lady_fern'}, {'id': 21726, 'synset': 'alpine_lady_fern.n.01', 'name': 'Alpine_lady_fern'}, {'id': 21727, 'synset': 'silvery_spleenwort.n.02', 'name': 'silvery_spleenwort'}, {'id': 21728, 'synset': 'holly_fern.n.02', 'name': 'holly_fern'}, {'id': 21729, 'synset': 'bladder_fern.n.01', 'name': 'bladder_fern'}, {'id': 21730, 'synset': 'brittle_bladder_fern.n.01', 'name': 'brittle_bladder_fern'}, {'id': 21731, 'synset': 'mountain_bladder_fern.n.01', 'name': 'mountain_bladder_fern'}, {'id': 21732, 'synset': 'bulblet_fern.n.01', 'name': 'bulblet_fern'}, {'id': 21733, 'synset': 'silvery_spleenwort.n.01', 'name': 'silvery_spleenwort'}, {'id': 21734, 'synset': 'oak_fern.n.01', 'name': 'oak_fern'}, {'id': 21735, 'synset': 'limestone_fern.n.01', 'name': 'limestone_fern'}, {'id': 21736, 'synset': 'ostrich_fern.n.01', 'name': 'ostrich_fern'}, {'id': 21737, 'synset': "hart's-tongue.n.01", 'name': "hart's-tongue"}, {'id': 21738, 'synset': 'sensitive_fern.n.01', 'name': 'sensitive_fern'}, {'id': 21739, 'synset': 'christmas_fern.n.01', 'name': 'Christmas_fern'}, {'id': 21740, 'synset': 'holly_fern.n.01', 'name': 'holly_fern'}, {'id': 21741, 'synset': "braun's_holly_fern.n.01", 'name': "Braun's_holly_fern"}, {'id': 21742, 'synset': 'western_holly_fern.n.01', 'name': 'western_holly_fern'}, {'id': 21743, 'synset': 'soft_shield_fern.n.01', 'name': 'soft_shield_fern'}, {'id': 21744, 'synset': 'leather_fern.n.02', 'name': 'leather_fern'}, {'id': 21745, 'synset': 'button_fern.n.02', 'name': 'button_fern'}, {'id': 21746, 'synset': 'indian_button_fern.n.01', 'name': 'Indian_button_fern'}, {'id': 21747, 'synset': 'woodsia.n.01', 'name': 'woodsia'}, {'id': 21748, 'synset': 'rusty_woodsia.n.01', 'name': 'rusty_woodsia'}, {'id': 21749, 'synset': 'alpine_woodsia.n.01', 'name': 'Alpine_woodsia'}, {'id': 21750, 'synset': 'smooth_woodsia.n.01', 'name': 'smooth_woodsia'}, {'id': 21751, 'synset': 'boston_fern.n.01', 'name': 'Boston_fern'}, {'id': 21752, 'synset': 'basket_fern.n.01', 'name': 'basket_fern'}, {'id': 21753, 'synset': 'golden_fern.n.02', 'name': 'golden_fern'}, {'id': 21754, 'synset': 'maidenhair.n.01', 'name': 'maidenhair'}, {'id': 21755, 'synset': 'common_maidenhair.n.01', 'name': 'common_maidenhair'}, {'id': 21756, 'synset': 'american_maidenhair_fern.n.01', 'name': 'American_maidenhair_fern'}, {'id': 21757, 'synset': 'bermuda_maidenhair.n.01', 'name': 'Bermuda_maidenhair'}, {'id': 21758, 'synset': 'brittle_maidenhair.n.01', 'name': 'brittle_maidenhair'}, {'id': 21759, 'synset': 'farley_maidenhair.n.01', 'name': 'Farley_maidenhair'}, {'id': 21760, 'synset': 'annual_fern.n.01', 'name': 'annual_fern'}, {'id': 21761, 'synset': 'lip_fern.n.01', 'name': 'lip_fern'}, {'id': 21762, 'synset': 'smooth_lip_fern.n.01', 'name': 'smooth_lip_fern'}, {'id': 21763, 'synset': 'lace_fern.n.01', 'name': 'lace_fern'}, {'id': 21764, 'synset': 'wooly_lip_fern.n.01', 'name': 'wooly_lip_fern'}, {'id': 21765, 'synset': 'southwestern_lip_fern.n.01', 'name': 'southwestern_lip_fern'}, {'id': 21766, 'synset': 'bamboo_fern.n.01', 'name': 'bamboo_fern'}, {'id': 21767, 'synset': 'american_rock_brake.n.01', 'name': 'American_rock_brake'}, {'id': 21768, 'synset': 'european_parsley_fern.n.01', 'name': 'European_parsley_fern'}, {'id': 21769, 'synset': 'hand_fern.n.01', 'name': 'hand_fern'}, {'id': 21770, 'synset': 'cliff_brake.n.01', 'name': 'cliff_brake'}, {'id': 21771, 'synset': 'coffee_fern.n.01', 'name': 'coffee_fern'}, {'id': 21772, 'synset': 'purple_rock_brake.n.01', 'name': 'purple_rock_brake'}, {'id': 21773, 'synset': "bird's-foot_fern.n.01", 'name': "bird's-foot_fern"}, {'id': 21774, 'synset': 'button_fern.n.01', 'name': 'button_fern'}, {'id': 21775, 'synset': 'silver_fern.n.02', 'name': 'silver_fern'}, {'id': 21776, 'synset': 'golden_fern.n.01', 'name': 'golden_fern'}, {'id': 21777, 'synset': 'gold_fern.n.01', 'name': 'gold_fern'}, {'id': 21778, 'synset': 'pteris_cretica.n.01', 'name': 'Pteris_cretica'}, {'id': 21779, 'synset': 'spider_brake.n.01', 'name': 'spider_brake'}, {'id': 21780, 'synset': 'ribbon_fern.n.01', 'name': 'ribbon_fern'}, {'id': 21781, 'synset': 'potato_fern.n.01', 'name': 'potato_fern'}, {'id': 21782, 'synset': 'angiopteris.n.01', 'name': 'angiopteris'}, {'id': 21783, 'synset': 'skeleton_fork_fern.n.01', 'name': 'skeleton_fork_fern'}, {'id': 21784, 'synset': 'horsetail.n.01', 'name': 'horsetail'}, {'id': 21785, 'synset': 'common_horsetail.n.01', 'name': 'common_horsetail'}, {'id': 21786, 'synset': 'swamp_horsetail.n.01', 'name': 'swamp_horsetail'}, {'id': 21787, 'synset': 'scouring_rush.n.01', 'name': 'scouring_rush'}, {'id': 21788, 'synset': 'marsh_horsetail.n.01', 'name': 'marsh_horsetail'}, {'id': 21789, 'synset': 'wood_horsetail.n.01', 'name': 'wood_horsetail'}, {'id': 21790, 'synset': 'variegated_horsetail.n.01', 'name': 'variegated_horsetail'}, {'id': 21791, 'synset': 'club_moss.n.01', 'name': 'club_moss'}, {'id': 21792, 'synset': 'shining_clubmoss.n.01', 'name': 'shining_clubmoss'}, {'id': 21793, 'synset': 'alpine_clubmoss.n.01', 'name': 'alpine_clubmoss'}, {'id': 21794, 'synset': 'fir_clubmoss.n.01', 'name': 'fir_clubmoss'}, {'id': 21795, 'synset': 'ground_cedar.n.01', 'name': 'ground_cedar'}, {'id': 21796, 'synset': 'ground_fir.n.01', 'name': 'ground_fir'}, {'id': 21797, 'synset': 'foxtail_grass.n.01', 'name': 'foxtail_grass'}, {'id': 21798, 'synset': 'spikemoss.n.01', 'name': 'spikemoss'}, {'id': 21799, 'synset': 'meadow_spikemoss.n.01', 'name': 'meadow_spikemoss'}, {'id': 21800, 'synset': 'desert_selaginella.n.01', 'name': 'desert_selaginella'}, {'id': 21801, 'synset': 'resurrection_plant.n.01', 'name': 'resurrection_plant'}, {'id': 21802, 'synset': 'florida_selaginella.n.01', 'name': 'florida_selaginella'}, {'id': 21803, 'synset': 'quillwort.n.01', 'name': 'quillwort'}, {'id': 21804, 'synset': 'earthtongue.n.01', 'name': 'earthtongue'}, {'id': 21805, 'synset': 'snuffbox_fern.n.01', 'name': 'snuffbox_fern'}, {'id': 21806, 'synset': 'christella.n.01', 'name': 'christella'}, {'id': 21807, 'synset': 'mountain_fern.n.01', 'name': 'mountain_fern'}, {'id': 21808, 'synset': 'new_york_fern.n.01', 'name': 'New_York_fern'}, {'id': 21809, 'synset': 'massachusetts_fern.n.01', 'name': 'Massachusetts_fern'}, {'id': 21810, 'synset': 'beech_fern.n.01', 'name': 'beech_fern'}, {'id': 21811, 'synset': 'broad_beech_fern.n.01', 'name': 'broad_beech_fern'}, {'id': 21812, 'synset': 'long_beech_fern.n.01', 'name': 'long_beech_fern'}, {'id': 21813, 'synset': 'shoestring_fungus.n.01', 'name': 'shoestring_fungus'}, {'id': 21814, 'synset': 'armillaria_caligata.n.01', 'name': 'Armillaria_caligata'}, {'id': 21815, 'synset': 'armillaria_ponderosa.n.01', 'name': 'Armillaria_ponderosa'}, {'id': 21816, 'synset': 'armillaria_zelleri.n.01', 'name': 'Armillaria_zelleri'}, {'id': 21817, 'synset': 'honey_mushroom.n.01', 'name': 'honey_mushroom'}, {'id': 21818, 'synset': 'milkweed.n.01', 'name': 'milkweed'}, {'id': 21819, 'synset': 'white_milkweed.n.01', 'name': 'white_milkweed'}, {'id': 21820, 'synset': 'poke_milkweed.n.01', 'name': 'poke_milkweed'}, {'id': 21821, 'synset': 'swamp_milkweed.n.01', 'name': 'swamp_milkweed'}, {'id': 21822, 'synset': "mead's_milkweed.n.01", 'name': "Mead's_milkweed"}, {'id': 21823, 'synset': 'purple_silkweed.n.01', 'name': 'purple_silkweed'}, {'id': 21824, 'synset': 'showy_milkweed.n.01', 'name': 'showy_milkweed'}, {'id': 21825, 'synset': 'poison_milkweed.n.01', 'name': 'poison_milkweed'}, {'id': 21826, 'synset': 'butterfly_weed.n.01', 'name': 'butterfly_weed'}, {'id': 21827, 'synset': 'whorled_milkweed.n.01', 'name': 'whorled_milkweed'}, {'id': 21828, 'synset': 'cruel_plant.n.01', 'name': 'cruel_plant'}, {'id': 21829, 'synset': 'wax_plant.n.01', 'name': 'wax_plant'}, {'id': 21830, 'synset': 'silk_vine.n.01', 'name': 'silk_vine'}, {'id': 21831, 'synset': 'stapelia.n.01', 'name': 'stapelia'}, {'id': 21832, 'synset': 'stapelias_asterias.n.01', 'name': 'Stapelias_asterias'}, {'id': 21833, 'synset': 'stephanotis.n.01', 'name': 'stephanotis'}, {'id': 21834, 'synset': 'madagascar_jasmine.n.01', 'name': 'Madagascar_jasmine'}, {'id': 21835, 'synset': 'negro_vine.n.01', 'name': 'negro_vine'}, {'id': 21836, 'synset': 'zygospore.n.01', 'name': 'zygospore'}, {'id': 21837, 'synset': 'tree_of_knowledge.n.01', 'name': 'tree_of_knowledge'}, {'id': 21838, 'synset': 'orangery.n.01', 'name': 'orangery'}, {'id': 21839, 'synset': 'pocketbook.n.01', 'name': 'pocketbook'}, {'id': 21840, 'synset': 'shit.n.04', 'name': 'shit'}, {'id': 21841, 'synset': 'cordage.n.01', 'name': 'cordage'}, {'id': 21842, 'synset': 'yard.n.01', 'name': 'yard'}, {'id': 21843, 'synset': 'extremum.n.02', 'name': 'extremum'}, {'id': 21844, 'synset': 'leaf_shape.n.01', 'name': 'leaf_shape'}, {'id': 21845, 'synset': 'equilateral.n.01', 'name': 'equilateral'}, {'id': 21846, 'synset': 'figure.n.06', 'name': 'figure'}, {'id': 21847, 'synset': 'pencil.n.03', 'name': 'pencil'}, {'id': 21848, 'synset': 'plane_figure.n.01', 'name': 'plane_figure'}, {'id': 21849, 'synset': 'solid_figure.n.01', 'name': 'solid_figure'}, {'id': 21850, 'synset': 'line.n.04', 'name': 'line'}, {'id': 21851, 'synset': 'bulb.n.04', 'name': 'bulb'}, {'id': 21852, 'synset': 'convex_shape.n.01', 'name': 'convex_shape'}, {'id': 21853, 'synset': 'concave_shape.n.01', 'name': 'concave_shape'}, {'id': 21854, 'synset': 'cylinder.n.01', 'name': 'cylinder'}, {'id': 21855, 'synset': 'round_shape.n.01', 'name': 'round_shape'}, {'id': 21856, 'synset': 'heart.n.07', 'name': 'heart'}, {'id': 21857, 'synset': 'polygon.n.01', 'name': 'polygon'}, {'id': 21858, 'synset': 'convex_polygon.n.01', 'name': 'convex_polygon'}, {'id': 21859, 'synset': 'concave_polygon.n.01', 'name': 'concave_polygon'}, {'id': 21860, 'synset': 'reentrant_polygon.n.01', 'name': 'reentrant_polygon'}, {'id': 21861, 'synset': 'amorphous_shape.n.01', 'name': 'amorphous_shape'}, {'id': 21862, 'synset': 'closed_curve.n.01', 'name': 'closed_curve'}, {'id': 21863, 'synset': 'simple_closed_curve.n.01', 'name': 'simple_closed_curve'}, {'id': 21864, 'synset': 's-shape.n.01', 'name': 'S-shape'}, {'id': 21865, 'synset': 'wave.n.07', 'name': 'wave'}, {'id': 21866, 'synset': 'extrados.n.01', 'name': 'extrados'}, {'id': 21867, 'synset': 'hook.n.02', 'name': 'hook'}, {'id': 21868, 'synset': 'envelope.n.03', 'name': 'envelope'}, {'id': 21869, 'synset': 'bight.n.02', 'name': 'bight'}, {'id': 21870, 'synset': 'diameter.n.02', 'name': 'diameter'}, {'id': 21871, 'synset': 'cone.n.02', 'name': 'cone'}, {'id': 21872, 'synset': 'funnel.n.01', 'name': 'funnel'}, {'id': 21873, 'synset': 'oblong.n.01', 'name': 'oblong'}, {'id': 21874, 'synset': 'circle.n.01', 'name': 'circle'}, {'id': 21875, 'synset': 'circle.n.03', 'name': 'circle'}, {'id': 21876, 'synset': 'equator.n.02', 'name': 'equator'}, {'id': 21877, 'synset': 'scallop.n.01', 'name': 'scallop'}, {'id': 21878, 'synset': 'ring.n.02', 'name': 'ring'}, {'id': 21879, 'synset': 'loop.n.02', 'name': 'loop'}, {'id': 21880, 'synset': 'bight.n.01', 'name': 'bight'}, {'id': 21881, 'synset': 'helix.n.01', 'name': 'helix'}, {'id': 21882, 'synset': 'element_of_a_cone.n.01', 'name': 'element_of_a_cone'}, {'id': 21883, 'synset': 'element_of_a_cylinder.n.01', 'name': 'element_of_a_cylinder'}, {'id': 21884, 'synset': 'ellipse.n.01', 'name': 'ellipse'}, {'id': 21885, 'synset': 'quadrate.n.02', 'name': 'quadrate'}, {'id': 21886, 'synset': 'triangle.n.01', 'name': 'triangle'}, {'id': 21887, 'synset': 'acute_triangle.n.01', 'name': 'acute_triangle'}, {'id': 21888, 'synset': 'isosceles_triangle.n.01', 'name': 'isosceles_triangle'}, {'id': 21889, 'synset': 'obtuse_triangle.n.01', 'name': 'obtuse_triangle'}, {'id': 21890, 'synset': 'right_triangle.n.01', 'name': 'right_triangle'}, {'id': 21891, 'synset': 'scalene_triangle.n.01', 'name': 'scalene_triangle'}, {'id': 21892, 'synset': 'parallel.n.03', 'name': 'parallel'}, {'id': 21893, 'synset': 'trapezoid.n.01', 'name': 'trapezoid'}, {'id': 21894, 'synset': 'star.n.05', 'name': 'star'}, {'id': 21895, 'synset': 'pentagon.n.03', 'name': 'pentagon'}, {'id': 21896, 'synset': 'hexagon.n.01', 'name': 'hexagon'}, {'id': 21897, 'synset': 'heptagon.n.01', 'name': 'heptagon'}, {'id': 21898, 'synset': 'octagon.n.01', 'name': 'octagon'}, {'id': 21899, 'synset': 'nonagon.n.01', 'name': 'nonagon'}, {'id': 21900, 'synset': 'decagon.n.01', 'name': 'decagon'}, {'id': 21901, 'synset': 'rhombus.n.01', 'name': 'rhombus'}, {'id': 21902, 'synset': 'spherical_polygon.n.01', 'name': 'spherical_polygon'}, {'id': 21903, 'synset': 'spherical_triangle.n.01', 'name': 'spherical_triangle'}, {'id': 21904, 'synset': 'convex_polyhedron.n.01', 'name': 'convex_polyhedron'}, {'id': 21905, 'synset': 'concave_polyhedron.n.01', 'name': 'concave_polyhedron'}, {'id': 21906, 'synset': 'cuboid.n.01', 'name': 'cuboid'}, {'id': 21907, 'synset': 'quadrangular_prism.n.01', 'name': 'quadrangular_prism'}, {'id': 21908, 'synset': 'bell.n.05', 'name': 'bell'}, {'id': 21909, 'synset': 'angular_distance.n.01', 'name': 'angular_distance'}, {'id': 21910, 'synset': 'true_anomaly.n.01', 'name': 'true_anomaly'}, {'id': 21911, 'synset': 'spherical_angle.n.01', 'name': 'spherical_angle'}, {'id': 21912, 'synset': 'angle_of_refraction.n.01', 'name': 'angle_of_refraction'}, {'id': 21913, 'synset': 'acute_angle.n.01', 'name': 'acute_angle'}, {'id': 21914, 'synset': 'groove.n.01', 'name': 'groove'}, {'id': 21915, 'synset': 'rut.n.01', 'name': 'rut'}, {'id': 21916, 'synset': 'bulge.n.01', 'name': 'bulge'}, {'id': 21917, 'synset': 'belly.n.03', 'name': 'belly'}, {'id': 21918, 'synset': 'bow.n.05', 'name': 'bow'}, {'id': 21919, 'synset': 'crescent.n.01', 'name': 'crescent'}, {'id': 21920, 'synset': 'ellipsoid.n.01', 'name': 'ellipsoid'}, {'id': 21921, 'synset': 'hypotenuse.n.01', 'name': 'hypotenuse'}, {'id': 21922, 'synset': 'balance.n.04', 'name': 'balance'}, {'id': 21923, 'synset': 'conformation.n.01', 'name': 'conformation'}, {'id': 21924, 'synset': 'symmetry.n.02', 'name': 'symmetry'}, {'id': 21925, 'synset': 'spheroid.n.01', 'name': 'spheroid'}, {'id': 21926, 'synset': 'spherule.n.01', 'name': 'spherule'}, {'id': 21927, 'synset': 'toroid.n.01', 'name': 'toroid'}, {'id': 21928, 'synset': 'column.n.04', 'name': 'column'}, {'id': 21929, 'synset': 'barrel.n.03', 'name': 'barrel'}, {'id': 21930, 'synset': 'pipe.n.03', 'name': 'pipe'}, {'id': 21931, 'synset': 'pellet.n.01', 'name': 'pellet'}, {'id': 21932, 'synset': 'bolus.n.01', 'name': 'bolus'}, {'id': 21933, 'synset': 'dewdrop.n.01', 'name': 'dewdrop'}, {'id': 21934, 'synset': 'ridge.n.02', 'name': 'ridge'}, {'id': 21935, 'synset': 'rim.n.01', 'name': 'rim'}, {'id': 21936, 'synset': 'taper.n.01', 'name': 'taper'}, {'id': 21937, 'synset': 'boundary.n.02', 'name': 'boundary'}, {'id': 21938, 'synset': 'incisure.n.01', 'name': 'incisure'}, {'id': 21939, 'synset': 'notch.n.01', 'name': 'notch'}, {'id': 21940, 'synset': 'wrinkle.n.01', 'name': 'wrinkle'}, {'id': 21941, 'synset': 'dermatoglyphic.n.01', 'name': 'dermatoglyphic'}, {'id': 21942, 'synset': 'frown_line.n.01', 'name': 'frown_line'}, {'id': 21943, 'synset': 'line_of_life.n.01', 'name': 'line_of_life'}, {'id': 21944, 'synset': 'line_of_heart.n.01', 'name': 'line_of_heart'}, {'id': 21945, 'synset': 'crevice.n.01', 'name': 'crevice'}, {'id': 21946, 'synset': 'cleft.n.01', 'name': 'cleft'}, {'id': 21947, 'synset': 'roulette.n.01', 'name': 'roulette'}, {'id': 21948, 'synset': 'node.n.01', 'name': 'node'}, {'id': 21949, 'synset': 'tree.n.02', 'name': 'tree'}, {'id': 21950, 'synset': 'stemma.n.01', 'name': 'stemma'}, {'id': 21951, 'synset': 'brachium.n.01', 'name': 'brachium'}, {'id': 21952, 'synset': 'fork.n.03', 'name': 'fork'}, {'id': 21953, 'synset': 'block.n.03', 'name': 'block'}, {'id': 21954, 'synset': 'ovoid.n.01', 'name': 'ovoid'}, {'id': 21955, 'synset': 'tetrahedron.n.01', 'name': 'tetrahedron'}, {'id': 21956, 'synset': 'pentahedron.n.01', 'name': 'pentahedron'}, {'id': 21957, 'synset': 'hexahedron.n.01', 'name': 'hexahedron'}, {'id': 21958, 'synset': 'regular_polyhedron.n.01', 'name': 'regular_polyhedron'}, {'id': 21959, 'synset': 'polyhedral_angle.n.01', 'name': 'polyhedral_angle'}, {'id': 21960, 'synset': 'cube.n.01', 'name': 'cube'}, {'id': 21961, 'synset': 'truncated_pyramid.n.01', 'name': 'truncated_pyramid'}, {'id': 21962, 'synset': 'truncated_cone.n.01', 'name': 'truncated_cone'}, {'id': 21963, 'synset': 'tail.n.03', 'name': 'tail'}, {'id': 21964, 'synset': 'tongue.n.03', 'name': 'tongue'}, {'id': 21965, 'synset': 'trapezohedron.n.01', 'name': 'trapezohedron'}, {'id': 21966, 'synset': 'wedge.n.01', 'name': 'wedge'}, {'id': 21967, 'synset': 'keel.n.01', 'name': 'keel'}, {'id': 21968, 'synset': 'place.n.06', 'name': 'place'}, {'id': 21969, 'synset': 'herpes.n.01', 'name': 'herpes'}, {'id': 21970, 'synset': 'chlamydia.n.01', 'name': 'chlamydia'}, {'id': 21971, 'synset': 'wall.n.04', 'name': 'wall'}, {'id': 21972, 'synset': 'micronutrient.n.01', 'name': 'micronutrient'}, {'id': 21973, 'synset': 'chyme.n.01', 'name': 'chyme'}, {'id': 21974, 'synset': 'ragweed_pollen.n.01', 'name': 'ragweed_pollen'}, {'id': 21975, 'synset': 'pina_cloth.n.01', 'name': 'pina_cloth'}, {'id': 21976, 'synset': 'chlorobenzylidenemalononitrile.n.01', 'name': 'chlorobenzylidenemalononitrile'}, {'id': 21977, 'synset': 'carbon.n.01', 'name': 'carbon'}, {'id': 21978, 'synset': 'charcoal.n.01', 'name': 'charcoal'}, {'id': 21979, 'synset': 'rock.n.02', 'name': 'rock'}, {'id': 21980, 'synset': 'gravel.n.01', 'name': 'gravel'}, {'id': 21981, 'synset': 'aflatoxin.n.01', 'name': 'aflatoxin'}, {'id': 21982, 'synset': 'alpha-tocopheral.n.01', 'name': 'alpha-tocopheral'}, {'id': 21983, 'synset': 'leopard.n.01', 'name': 'leopard'}, {'id': 21984, 'synset': 'bricks_and_mortar.n.01', 'name': 'bricks_and_mortar'}, {'id': 21985, 'synset': 'lagging.n.01', 'name': 'lagging'}, {'id': 21986, 'synset': 'hydraulic_cement.n.01', 'name': 'hydraulic_cement'}, {'id': 21987, 'synset': 'choline.n.01', 'name': 'choline'}, {'id': 21988, 'synset': 'concrete.n.01', 'name': 'concrete'}, {'id': 21989, 'synset': 'glass_wool.n.01', 'name': 'glass_wool'}, {'id': 21990, 'synset': 'soil.n.02', 'name': 'soil'}, {'id': 21991, 'synset': 'high_explosive.n.01', 'name': 'high_explosive'}, {'id': 21992, 'synset': 'litter.n.02', 'name': 'litter'}, {'id': 21993, 'synset': 'fish_meal.n.01', 'name': 'fish_meal'}, {'id': 21994, 'synset': 'greek_fire.n.01', 'name': 'Greek_fire'}, {'id': 21995, 'synset': 'culture_medium.n.01', 'name': 'culture_medium'}, {'id': 21996, 'synset': 'agar.n.01', 'name': 'agar'}, {'id': 21997, 'synset': 'blood_agar.n.01', 'name': 'blood_agar'}, {'id': 21998, 'synset': 'hip_tile.n.01', 'name': 'hip_tile'}, {'id': 21999, 'synset': 'hyacinth.n.01', 'name': 'hyacinth'}, {'id': 22000, 'synset': 'hydroxide_ion.n.01', 'name': 'hydroxide_ion'}, {'id': 22001, 'synset': 'ice.n.01', 'name': 'ice'}, {'id': 22002, 'synset': 'inositol.n.01', 'name': 'inositol'}, {'id': 22003, 'synset': 'linoleum.n.01', 'name': 'linoleum'}, {'id': 22004, 'synset': 'lithia_water.n.01', 'name': 'lithia_water'}, {'id': 22005, 'synset': 'lodestone.n.01', 'name': 'lodestone'}, {'id': 22006, 'synset': 'pantothenic_acid.n.01', 'name': 'pantothenic_acid'}, {'id': 22007, 'synset': 'paper.n.01', 'name': 'paper'}, {'id': 22008, 'synset': 'papyrus.n.01', 'name': 'papyrus'}, {'id': 22009, 'synset': 'pantile.n.01', 'name': 'pantile'}, {'id': 22010, 'synset': 'blacktop.n.01', 'name': 'blacktop'}, {'id': 22011, 'synset': 'tarmacadam.n.01', 'name': 'tarmacadam'}, {'id': 22012, 'synset': 'paving.n.01', 'name': 'paving'}, {'id': 22013, 'synset': 'plaster.n.01', 'name': 'plaster'}, {'id': 22014, 'synset': 'poison_gas.n.01', 'name': 'poison_gas'}, {'id': 22015, 'synset': 'ridge_tile.n.01', 'name': 'ridge_tile'}, {'id': 22016, 'synset': 'roughcast.n.01', 'name': 'roughcast'}, {'id': 22017, 'synset': 'sand.n.01', 'name': 'sand'}, {'id': 22018, 'synset': 'spackle.n.01', 'name': 'spackle'}, {'id': 22019, 'synset': 'render.n.01', 'name': 'render'}, {'id': 22020, 'synset': 'wattle_and_daub.n.01', 'name': 'wattle_and_daub'}, {'id': 22021, 'synset': 'stucco.n.01', 'name': 'stucco'}, {'id': 22022, 'synset': 'tear_gas.n.01', 'name': 'tear_gas'}, {'id': 22023, 'synset': 'linseed.n.01', 'name': 'linseed'}, {'id': 22024, 'synset': 'vitamin.n.01', 'name': 'vitamin'}, {'id': 22025, 'synset': 'fat-soluble_vitamin.n.01', 'name': 'fat-soluble_vitamin'}, {'id': 22026, 'synset': 'water-soluble_vitamin.n.01', 'name': 'water-soluble_vitamin'}, {'id': 22027, 'synset': 'vitamin_a.n.01', 'name': 'vitamin_A'}, {'id': 22028, 'synset': 'vitamin_a1.n.01', 'name': 'vitamin_A1'}, {'id': 22029, 'synset': 'vitamin_a2.n.01', 'name': 'vitamin_A2'}, {'id': 22030, 'synset': 'b-complex_vitamin.n.01', 'name': 'B-complex_vitamin'}, {'id': 22031, 'synset': 'vitamin_b1.n.01', 'name': 'vitamin_B1'}, {'id': 22032, 'synset': 'vitamin_b12.n.01', 'name': 'vitamin_B12'}, {'id': 22033, 'synset': 'vitamin_b2.n.01', 'name': 'vitamin_B2'}, {'id': 22034, 'synset': 'vitamin_b6.n.01', 'name': 'vitamin_B6'}, {'id': 22035, 'synset': 'vitamin_bc.n.01', 'name': 'vitamin_Bc'}, {'id': 22036, 'synset': 'niacin.n.01', 'name': 'niacin'}, {'id': 22037, 'synset': 'vitamin_d.n.01', 'name': 'vitamin_D'}, {'id': 22038, 'synset': 'vitamin_e.n.01', 'name': 'vitamin_E'}, {'id': 22039, 'synset': 'biotin.n.01', 'name': 'biotin'}, {'id': 22040, 'synset': 'vitamin_k.n.01', 'name': 'vitamin_K'}, {'id': 22041, 'synset': 'vitamin_k1.n.01', 'name': 'vitamin_K1'}, {'id': 22042, 'synset': 'vitamin_k3.n.01', 'name': 'vitamin_K3'}, {'id': 22043, 'synset': 'vitamin_p.n.01', 'name': 'vitamin_P'}, {'id': 22044, 'synset': 'vitamin_c.n.01', 'name': 'vitamin_C'}, {'id': 22045, 'synset': 'planking.n.01', 'name': 'planking'}, {'id': 22046, 'synset': 'chipboard.n.01', 'name': 'chipboard'}, {'id': 22047, 'synset': 'knothole.n.01', 'name': 'knothole'}] # noqa \ No newline at end of file +CATEGORIES = [ + {"name": "aerosol_can", "id": 1, "frequency": "c", "synset": "aerosol.n.02"}, + { + "name": "air_conditioner", + "id": 2, + "frequency": "f", + "synset": "air_conditioner.n.01", + }, + {"name": "airplane", "id": 3, "frequency": "f", "synset": "airplane.n.01"}, + {"name": "alarm_clock", "id": 4, "frequency": "f", "synset": "alarm_clock.n.01"}, + {"name": "alcohol", "id": 5, "frequency": "c", "synset": "alcohol.n.01"}, + {"name": "alligator", "id": 6, "frequency": "c", "synset": "alligator.n.02"}, + {"name": "almond", "id": 7, "frequency": "c", "synset": "almond.n.02"}, + {"name": "ambulance", "id": 8, "frequency": "c", "synset": "ambulance.n.01"}, + {"name": "amplifier", "id": 9, "frequency": "c", "synset": "amplifier.n.01"}, + {"name": "anklet", "id": 10, "frequency": "c", "synset": "anklet.n.03"}, + {"name": "antenna", "id": 11, "frequency": "f", "synset": "antenna.n.01"}, + {"name": "apple", "id": 12, "frequency": "f", "synset": "apple.n.01"}, + {"name": "applesauce", "id": 13, "frequency": "r", "synset": "applesauce.n.01"}, + {"name": "apricot", "id": 14, "frequency": "r", "synset": "apricot.n.02"}, + {"name": "apron", "id": 15, "frequency": "f", "synset": "apron.n.01"}, + {"name": "aquarium", "id": 16, "frequency": "c", "synset": "aquarium.n.01"}, + { + "name": "arctic_(type_of_shoe)", + "id": 17, + "frequency": "r", + "synset": "arctic.n.02", + }, + {"name": "armband", "id": 18, "frequency": "c", "synset": "armband.n.02"}, + {"name": "armchair", "id": 19, "frequency": "f", "synset": "armchair.n.01"}, + {"name": "armoire", "id": 20, "frequency": "r", "synset": "armoire.n.01"}, + {"name": "armor", "id": 21, "frequency": "r", "synset": "armor.n.01"}, + {"name": "artichoke", "id": 22, "frequency": "c", "synset": "artichoke.n.02"}, + {"name": "trash_can", "id": 23, "frequency": "f", "synset": "ashcan.n.01"}, + {"name": "ashtray", "id": 24, "frequency": "c", "synset": "ashtray.n.01"}, + {"name": "asparagus", "id": 25, "frequency": "c", "synset": "asparagus.n.02"}, + {"name": "atomizer", "id": 26, "frequency": "c", "synset": "atomizer.n.01"}, + {"name": "avocado", "id": 27, "frequency": "f", "synset": "avocado.n.01"}, + {"name": "award", "id": 28, "frequency": "c", "synset": "award.n.02"}, + {"name": "awning", "id": 29, "frequency": "f", "synset": "awning.n.01"}, + {"name": "ax", "id": 30, "frequency": "r", "synset": "ax.n.01"}, + {"name": "baboon", "id": 31, "frequency": "r", "synset": "baboon.n.01"}, + {"name": "baby_buggy", "id": 32, "frequency": "f", "synset": "baby_buggy.n.01"}, + { + "name": "basketball_backboard", + "id": 33, + "frequency": "c", + "synset": "backboard.n.01", + }, + {"name": "backpack", "id": 34, "frequency": "f", "synset": "backpack.n.01"}, + {"name": "handbag", "id": 35, "frequency": "f", "synset": "bag.n.04"}, + {"name": "suitcase", "id": 36, "frequency": "f", "synset": "bag.n.06"}, + {"name": "bagel", "id": 37, "frequency": "c", "synset": "bagel.n.01"}, + {"name": "bagpipe", "id": 38, "frequency": "r", "synset": "bagpipe.n.01"}, + {"name": "baguet", "id": 39, "frequency": "r", "synset": "baguet.n.01"}, + {"name": "bait", "id": 40, "frequency": "r", "synset": "bait.n.02"}, + {"name": "ball", "id": 41, "frequency": "f", "synset": "ball.n.06"}, + {"name": "ballet_skirt", "id": 42, "frequency": "r", "synset": "ballet_skirt.n.01"}, + {"name": "balloon", "id": 43, "frequency": "f", "synset": "balloon.n.01"}, + {"name": "bamboo", "id": 44, "frequency": "c", "synset": "bamboo.n.02"}, + {"name": "banana", "id": 45, "frequency": "f", "synset": "banana.n.02"}, + {"name": "Band_Aid", "id": 46, "frequency": "c", "synset": "band_aid.n.01"}, + {"name": "bandage", "id": 47, "frequency": "c", "synset": "bandage.n.01"}, + {"name": "bandanna", "id": 48, "frequency": "f", "synset": "bandanna.n.01"}, + {"name": "banjo", "id": 49, "frequency": "r", "synset": "banjo.n.01"}, + {"name": "banner", "id": 50, "frequency": "f", "synset": "banner.n.01"}, + {"name": "barbell", "id": 51, "frequency": "r", "synset": "barbell.n.01"}, + {"name": "barge", "id": 52, "frequency": "r", "synset": "barge.n.01"}, + {"name": "barrel", "id": 53, "frequency": "f", "synset": "barrel.n.02"}, + {"name": "barrette", "id": 54, "frequency": "c", "synset": "barrette.n.01"}, + {"name": "barrow", "id": 55, "frequency": "c", "synset": "barrow.n.03"}, + {"name": "baseball_base", "id": 56, "frequency": "f", "synset": "base.n.03"}, + {"name": "baseball", "id": 57, "frequency": "f", "synset": "baseball.n.02"}, + {"name": "baseball_bat", "id": 58, "frequency": "f", "synset": "baseball_bat.n.01"}, + {"name": "baseball_cap", "id": 59, "frequency": "f", "synset": "baseball_cap.n.01"}, + { + "name": "baseball_glove", + "id": 60, + "frequency": "f", + "synset": "baseball_glove.n.01", + }, + {"name": "basket", "id": 61, "frequency": "f", "synset": "basket.n.01"}, + {"name": "basketball", "id": 62, "frequency": "c", "synset": "basketball.n.02"}, + {"name": "bass_horn", "id": 63, "frequency": "r", "synset": "bass_horn.n.01"}, + {"name": "bat_(animal)", "id": 64, "frequency": "c", "synset": "bat.n.01"}, + {"name": "bath_mat", "id": 65, "frequency": "f", "synset": "bath_mat.n.01"}, + {"name": "bath_towel", "id": 66, "frequency": "f", "synset": "bath_towel.n.01"}, + {"name": "bathrobe", "id": 67, "frequency": "c", "synset": "bathrobe.n.01"}, + {"name": "bathtub", "id": 68, "frequency": "f", "synset": "bathtub.n.01"}, + {"name": "batter_(food)", "id": 69, "frequency": "r", "synset": "batter.n.02"}, + {"name": "battery", "id": 70, "frequency": "c", "synset": "battery.n.02"}, + {"name": "beachball", "id": 71, "frequency": "r", "synset": "beach_ball.n.01"}, + {"name": "bead", "id": 72, "frequency": "c", "synset": "bead.n.01"}, + {"name": "bean_curd", "id": 73, "frequency": "c", "synset": "bean_curd.n.01"}, + {"name": "beanbag", "id": 74, "frequency": "c", "synset": "beanbag.n.01"}, + {"name": "beanie", "id": 75, "frequency": "f", "synset": "beanie.n.01"}, + {"name": "bear", "id": 76, "frequency": "f", "synset": "bear.n.01"}, + {"name": "bed", "id": 77, "frequency": "f", "synset": "bed.n.01"}, + {"name": "bedpan", "id": 78, "frequency": "r", "synset": "bedpan.n.01"}, + {"name": "bedspread", "id": 79, "frequency": "f", "synset": "bedspread.n.01"}, + {"name": "cow", "id": 80, "frequency": "f", "synset": "beef.n.01"}, + {"name": "beef_(food)", "id": 81, "frequency": "f", "synset": "beef.n.02"}, + {"name": "beeper", "id": 82, "frequency": "r", "synset": "beeper.n.01"}, + {"name": "beer_bottle", "id": 83, "frequency": "f", "synset": "beer_bottle.n.01"}, + {"name": "beer_can", "id": 84, "frequency": "c", "synset": "beer_can.n.01"}, + {"name": "beetle", "id": 85, "frequency": "r", "synset": "beetle.n.01"}, + {"name": "bell", "id": 86, "frequency": "f", "synset": "bell.n.01"}, + {"name": "bell_pepper", "id": 87, "frequency": "f", "synset": "bell_pepper.n.02"}, + {"name": "belt", "id": 88, "frequency": "f", "synset": "belt.n.02"}, + {"name": "belt_buckle", "id": 89, "frequency": "f", "synset": "belt_buckle.n.01"}, + {"name": "bench", "id": 90, "frequency": "f", "synset": "bench.n.01"}, + {"name": "beret", "id": 91, "frequency": "c", "synset": "beret.n.01"}, + {"name": "bib", "id": 92, "frequency": "c", "synset": "bib.n.02"}, + {"name": "Bible", "id": 93, "frequency": "r", "synset": "bible.n.01"}, + {"name": "bicycle", "id": 94, "frequency": "f", "synset": "bicycle.n.01"}, + {"name": "visor", "id": 95, "frequency": "f", "synset": "bill.n.09"}, + {"name": "billboard", "id": 96, "frequency": "f", "synset": "billboard.n.01"}, + {"name": "binder", "id": 97, "frequency": "c", "synset": "binder.n.03"}, + {"name": "binoculars", "id": 98, "frequency": "c", "synset": "binoculars.n.01"}, + {"name": "bird", "id": 99, "frequency": "f", "synset": "bird.n.01"}, + {"name": "birdfeeder", "id": 100, "frequency": "c", "synset": "bird_feeder.n.01"}, + {"name": "birdbath", "id": 101, "frequency": "c", "synset": "birdbath.n.01"}, + {"name": "birdcage", "id": 102, "frequency": "c", "synset": "birdcage.n.01"}, + {"name": "birdhouse", "id": 103, "frequency": "c", "synset": "birdhouse.n.01"}, + { + "name": "birthday_cake", + "id": 104, + "frequency": "f", + "synset": "birthday_cake.n.01", + }, + { + "name": "birthday_card", + "id": 105, + "frequency": "r", + "synset": "birthday_card.n.01", + }, + {"name": "pirate_flag", "id": 106, "frequency": "r", "synset": "black_flag.n.01"}, + {"name": "black_sheep", "id": 107, "frequency": "c", "synset": "black_sheep.n.02"}, + {"name": "blackberry", "id": 108, "frequency": "c", "synset": "blackberry.n.01"}, + {"name": "blackboard", "id": 109, "frequency": "f", "synset": "blackboard.n.01"}, + {"name": "blanket", "id": 110, "frequency": "f", "synset": "blanket.n.01"}, + {"name": "blazer", "id": 111, "frequency": "c", "synset": "blazer.n.01"}, + {"name": "blender", "id": 112, "frequency": "f", "synset": "blender.n.01"}, + {"name": "blimp", "id": 113, "frequency": "r", "synset": "blimp.n.02"}, + {"name": "blinker", "id": 114, "frequency": "f", "synset": "blinker.n.01"}, + {"name": "blouse", "id": 115, "frequency": "f", "synset": "blouse.n.01"}, + {"name": "blueberry", "id": 116, "frequency": "f", "synset": "blueberry.n.02"}, + {"name": "gameboard", "id": 117, "frequency": "r", "synset": "board.n.09"}, + {"name": "boat", "id": 118, "frequency": "f", "synset": "boat.n.01"}, + {"name": "bob", "id": 119, "frequency": "r", "synset": "bob.n.05"}, + {"name": "bobbin", "id": 120, "frequency": "c", "synset": "bobbin.n.01"}, + {"name": "bobby_pin", "id": 121, "frequency": "c", "synset": "bobby_pin.n.01"}, + {"name": "boiled_egg", "id": 122, "frequency": "c", "synset": "boiled_egg.n.01"}, + {"name": "bolo_tie", "id": 123, "frequency": "r", "synset": "bolo_tie.n.01"}, + {"name": "deadbolt", "id": 124, "frequency": "c", "synset": "bolt.n.03"}, + {"name": "bolt", "id": 125, "frequency": "f", "synset": "bolt.n.06"}, + {"name": "bonnet", "id": 126, "frequency": "r", "synset": "bonnet.n.01"}, + {"name": "book", "id": 127, "frequency": "f", "synset": "book.n.01"}, + {"name": "bookcase", "id": 128, "frequency": "c", "synset": "bookcase.n.01"}, + {"name": "booklet", "id": 129, "frequency": "c", "synset": "booklet.n.01"}, + {"name": "bookmark", "id": 130, "frequency": "r", "synset": "bookmark.n.01"}, + {"name": "boom_microphone", "id": 131, "frequency": "r", "synset": "boom.n.04"}, + {"name": "boot", "id": 132, "frequency": "f", "synset": "boot.n.01"}, + {"name": "bottle", "id": 133, "frequency": "f", "synset": "bottle.n.01"}, + { + "name": "bottle_opener", + "id": 134, + "frequency": "c", + "synset": "bottle_opener.n.01", + }, + {"name": "bouquet", "id": 135, "frequency": "c", "synset": "bouquet.n.01"}, + {"name": "bow_(weapon)", "id": 136, "frequency": "r", "synset": "bow.n.04"}, + { + "name": "bow_(decorative_ribbons)", + "id": 137, + "frequency": "f", + "synset": "bow.n.08", + }, + {"name": "bow-tie", "id": 138, "frequency": "f", "synset": "bow_tie.n.01"}, + {"name": "bowl", "id": 139, "frequency": "f", "synset": "bowl.n.03"}, + {"name": "pipe_bowl", "id": 140, "frequency": "r", "synset": "bowl.n.08"}, + {"name": "bowler_hat", "id": 141, "frequency": "c", "synset": "bowler_hat.n.01"}, + { + "name": "bowling_ball", + "id": 142, + "frequency": "r", + "synset": "bowling_ball.n.01", + }, + {"name": "box", "id": 143, "frequency": "f", "synset": "box.n.01"}, + { + "name": "boxing_glove", + "id": 144, + "frequency": "r", + "synset": "boxing_glove.n.01", + }, + {"name": "suspenders", "id": 145, "frequency": "c", "synset": "brace.n.06"}, + {"name": "bracelet", "id": 146, "frequency": "f", "synset": "bracelet.n.02"}, + {"name": "brass_plaque", "id": 147, "frequency": "r", "synset": "brass.n.07"}, + {"name": "brassiere", "id": 148, "frequency": "c", "synset": "brassiere.n.01"}, + {"name": "bread-bin", "id": 149, "frequency": "c", "synset": "bread-bin.n.01"}, + {"name": "bread", "id": 150, "frequency": "f", "synset": "bread.n.01"}, + {"name": "breechcloth", "id": 151, "frequency": "r", "synset": "breechcloth.n.01"}, + {"name": "bridal_gown", "id": 152, "frequency": "f", "synset": "bridal_gown.n.01"}, + {"name": "briefcase", "id": 153, "frequency": "c", "synset": "briefcase.n.01"}, + {"name": "broccoli", "id": 154, "frequency": "f", "synset": "broccoli.n.01"}, + {"name": "broach", "id": 155, "frequency": "r", "synset": "brooch.n.01"}, + {"name": "broom", "id": 156, "frequency": "c", "synset": "broom.n.01"}, + {"name": "brownie", "id": 157, "frequency": "c", "synset": "brownie.n.03"}, + { + "name": "brussels_sprouts", + "id": 158, + "frequency": "c", + "synset": "brussels_sprouts.n.01", + }, + {"name": "bubble_gum", "id": 159, "frequency": "r", "synset": "bubble_gum.n.01"}, + {"name": "bucket", "id": 160, "frequency": "f", "synset": "bucket.n.01"}, + {"name": "horse_buggy", "id": 161, "frequency": "r", "synset": "buggy.n.01"}, + {"name": "bull", "id": 162, "frequency": "c", "synset": "bull.n.11"}, + {"name": "bulldog", "id": 163, "frequency": "c", "synset": "bulldog.n.01"}, + {"name": "bulldozer", "id": 164, "frequency": "r", "synset": "bulldozer.n.01"}, + { + "name": "bullet_train", + "id": 165, + "frequency": "c", + "synset": "bullet_train.n.01", + }, + { + "name": "bulletin_board", + "id": 166, + "frequency": "c", + "synset": "bulletin_board.n.02", + }, + { + "name": "bulletproof_vest", + "id": 167, + "frequency": "r", + "synset": "bulletproof_vest.n.01", + }, + {"name": "bullhorn", "id": 168, "frequency": "c", "synset": "bullhorn.n.01"}, + {"name": "bun", "id": 169, "frequency": "f", "synset": "bun.n.01"}, + {"name": "bunk_bed", "id": 170, "frequency": "c", "synset": "bunk_bed.n.01"}, + {"name": "buoy", "id": 171, "frequency": "f", "synset": "buoy.n.01"}, + {"name": "burrito", "id": 172, "frequency": "r", "synset": "burrito.n.01"}, + {"name": "bus_(vehicle)", "id": 173, "frequency": "f", "synset": "bus.n.01"}, + { + "name": "business_card", + "id": 174, + "frequency": "c", + "synset": "business_card.n.01", + }, + {"name": "butter", "id": 175, "frequency": "f", "synset": "butter.n.01"}, + {"name": "butterfly", "id": 176, "frequency": "c", "synset": "butterfly.n.01"}, + {"name": "button", "id": 177, "frequency": "f", "synset": "button.n.01"}, + {"name": "cab_(taxi)", "id": 178, "frequency": "f", "synset": "cab.n.03"}, + {"name": "cabana", "id": 179, "frequency": "r", "synset": "cabana.n.01"}, + {"name": "cabin_car", "id": 180, "frequency": "c", "synset": "cabin_car.n.01"}, + {"name": "cabinet", "id": 181, "frequency": "f", "synset": "cabinet.n.01"}, + {"name": "locker", "id": 182, "frequency": "r", "synset": "cabinet.n.03"}, + {"name": "cake", "id": 183, "frequency": "f", "synset": "cake.n.03"}, + {"name": "calculator", "id": 184, "frequency": "c", "synset": "calculator.n.02"}, + {"name": "calendar", "id": 185, "frequency": "f", "synset": "calendar.n.02"}, + {"name": "calf", "id": 186, "frequency": "c", "synset": "calf.n.01"}, + {"name": "camcorder", "id": 187, "frequency": "c", "synset": "camcorder.n.01"}, + {"name": "camel", "id": 188, "frequency": "c", "synset": "camel.n.01"}, + {"name": "camera", "id": 189, "frequency": "f", "synset": "camera.n.01"}, + {"name": "camera_lens", "id": 190, "frequency": "c", "synset": "camera_lens.n.01"}, + {"name": "camper_(vehicle)", "id": 191, "frequency": "c", "synset": "camper.n.02"}, + {"name": "can", "id": 192, "frequency": "f", "synset": "can.n.01"}, + {"name": "can_opener", "id": 193, "frequency": "c", "synset": "can_opener.n.01"}, + {"name": "candle", "id": 194, "frequency": "f", "synset": "candle.n.01"}, + { + "name": "candle_holder", + "id": 195, + "frequency": "f", + "synset": "candlestick.n.01", + }, + {"name": "candy_bar", "id": 196, "frequency": "r", "synset": "candy_bar.n.01"}, + {"name": "candy_cane", "id": 197, "frequency": "c", "synset": "candy_cane.n.01"}, + {"name": "walking_cane", "id": 198, "frequency": "c", "synset": "cane.n.01"}, + {"name": "canister", "id": 199, "frequency": "c", "synset": "canister.n.02"}, + {"name": "canoe", "id": 200, "frequency": "c", "synset": "canoe.n.01"}, + {"name": "cantaloup", "id": 201, "frequency": "c", "synset": "cantaloup.n.02"}, + {"name": "canteen", "id": 202, "frequency": "r", "synset": "canteen.n.01"}, + {"name": "cap_(headwear)", "id": 203, "frequency": "f", "synset": "cap.n.01"}, + {"name": "bottle_cap", "id": 204, "frequency": "f", "synset": "cap.n.02"}, + {"name": "cape", "id": 205, "frequency": "c", "synset": "cape.n.02"}, + {"name": "cappuccino", "id": 206, "frequency": "c", "synset": "cappuccino.n.01"}, + {"name": "car_(automobile)", "id": 207, "frequency": "f", "synset": "car.n.01"}, + { + "name": "railcar_(part_of_a_train)", + "id": 208, + "frequency": "f", + "synset": "car.n.02", + }, + {"name": "elevator_car", "id": 209, "frequency": "r", "synset": "car.n.04"}, + {"name": "car_battery", "id": 210, "frequency": "r", "synset": "car_battery.n.01"}, + {"name": "identity_card", "id": 211, "frequency": "c", "synset": "card.n.02"}, + {"name": "card", "id": 212, "frequency": "c", "synset": "card.n.03"}, + {"name": "cardigan", "id": 213, "frequency": "c", "synset": "cardigan.n.01"}, + {"name": "cargo_ship", "id": 214, "frequency": "r", "synset": "cargo_ship.n.01"}, + {"name": "carnation", "id": 215, "frequency": "r", "synset": "carnation.n.01"}, + {"name": "horse_carriage", "id": 216, "frequency": "c", "synset": "carriage.n.02"}, + {"name": "carrot", "id": 217, "frequency": "f", "synset": "carrot.n.01"}, + {"name": "tote_bag", "id": 218, "frequency": "f", "synset": "carryall.n.01"}, + {"name": "cart", "id": 219, "frequency": "c", "synset": "cart.n.01"}, + {"name": "carton", "id": 220, "frequency": "c", "synset": "carton.n.02"}, + { + "name": "cash_register", + "id": 221, + "frequency": "c", + "synset": "cash_register.n.01", + }, + {"name": "casserole", "id": 222, "frequency": "r", "synset": "casserole.n.01"}, + {"name": "cassette", "id": 223, "frequency": "r", "synset": "cassette.n.01"}, + {"name": "cast", "id": 224, "frequency": "c", "synset": "cast.n.05"}, + {"name": "cat", "id": 225, "frequency": "f", "synset": "cat.n.01"}, + {"name": "cauliflower", "id": 226, "frequency": "f", "synset": "cauliflower.n.02"}, + {"name": "cayenne_(spice)", "id": 227, "frequency": "c", "synset": "cayenne.n.02"}, + {"name": "CD_player", "id": 228, "frequency": "c", "synset": "cd_player.n.01"}, + {"name": "celery", "id": 229, "frequency": "f", "synset": "celery.n.01"}, + { + "name": "cellular_telephone", + "id": 230, + "frequency": "f", + "synset": "cellular_telephone.n.01", + }, + {"name": "chain_mail", "id": 231, "frequency": "r", "synset": "chain_mail.n.01"}, + {"name": "chair", "id": 232, "frequency": "f", "synset": "chair.n.01"}, + { + "name": "chaise_longue", + "id": 233, + "frequency": "r", + "synset": "chaise_longue.n.01", + }, + {"name": "chalice", "id": 234, "frequency": "r", "synset": "chalice.n.01"}, + {"name": "chandelier", "id": 235, "frequency": "f", "synset": "chandelier.n.01"}, + {"name": "chap", "id": 236, "frequency": "r", "synset": "chap.n.04"}, + {"name": "checkbook", "id": 237, "frequency": "r", "synset": "checkbook.n.01"}, + { + "name": "checkerboard", + "id": 238, + "frequency": "r", + "synset": "checkerboard.n.01", + }, + {"name": "cherry", "id": 239, "frequency": "c", "synset": "cherry.n.03"}, + {"name": "chessboard", "id": 240, "frequency": "r", "synset": "chessboard.n.01"}, + {"name": "chicken_(animal)", "id": 241, "frequency": "c", "synset": "chicken.n.02"}, + {"name": "chickpea", "id": 242, "frequency": "c", "synset": "chickpea.n.01"}, + {"name": "chili_(vegetable)", "id": 243, "frequency": "c", "synset": "chili.n.02"}, + {"name": "chime", "id": 244, "frequency": "r", "synset": "chime.n.01"}, + {"name": "chinaware", "id": 245, "frequency": "r", "synset": "chinaware.n.01"}, + {"name": "crisp_(potato_chip)", "id": 246, "frequency": "c", "synset": "chip.n.04"}, + {"name": "poker_chip", "id": 247, "frequency": "r", "synset": "chip.n.06"}, + { + "name": "chocolate_bar", + "id": 248, + "frequency": "c", + "synset": "chocolate_bar.n.01", + }, + { + "name": "chocolate_cake", + "id": 249, + "frequency": "c", + "synset": "chocolate_cake.n.01", + }, + { + "name": "chocolate_milk", + "id": 250, + "frequency": "r", + "synset": "chocolate_milk.n.01", + }, + { + "name": "chocolate_mousse", + "id": 251, + "frequency": "r", + "synset": "chocolate_mousse.n.01", + }, + {"name": "choker", "id": 252, "frequency": "f", "synset": "choker.n.03"}, + { + "name": "chopping_board", + "id": 253, + "frequency": "f", + "synset": "chopping_board.n.01", + }, + {"name": "chopstick", "id": 254, "frequency": "f", "synset": "chopstick.n.01"}, + { + "name": "Christmas_tree", + "id": 255, + "frequency": "f", + "synset": "christmas_tree.n.05", + }, + {"name": "slide", "id": 256, "frequency": "c", "synset": "chute.n.02"}, + {"name": "cider", "id": 257, "frequency": "r", "synset": "cider.n.01"}, + {"name": "cigar_box", "id": 258, "frequency": "r", "synset": "cigar_box.n.01"}, + {"name": "cigarette", "id": 259, "frequency": "f", "synset": "cigarette.n.01"}, + { + "name": "cigarette_case", + "id": 260, + "frequency": "c", + "synset": "cigarette_case.n.01", + }, + {"name": "cistern", "id": 261, "frequency": "f", "synset": "cistern.n.02"}, + {"name": "clarinet", "id": 262, "frequency": "r", "synset": "clarinet.n.01"}, + {"name": "clasp", "id": 263, "frequency": "c", "synset": "clasp.n.01"}, + { + "name": "cleansing_agent", + "id": 264, + "frequency": "c", + "synset": "cleansing_agent.n.01", + }, + { + "name": "cleat_(for_securing_rope)", + "id": 265, + "frequency": "r", + "synset": "cleat.n.02", + }, + {"name": "clementine", "id": 266, "frequency": "r", "synset": "clementine.n.01"}, + {"name": "clip", "id": 267, "frequency": "c", "synset": "clip.n.03"}, + {"name": "clipboard", "id": 268, "frequency": "c", "synset": "clipboard.n.01"}, + { + "name": "clippers_(for_plants)", + "id": 269, + "frequency": "r", + "synset": "clipper.n.03", + }, + {"name": "cloak", "id": 270, "frequency": "r", "synset": "cloak.n.02"}, + {"name": "clock", "id": 271, "frequency": "f", "synset": "clock.n.01"}, + {"name": "clock_tower", "id": 272, "frequency": "f", "synset": "clock_tower.n.01"}, + { + "name": "clothes_hamper", + "id": 273, + "frequency": "c", + "synset": "clothes_hamper.n.01", + }, + {"name": "clothespin", "id": 274, "frequency": "c", "synset": "clothespin.n.01"}, + {"name": "clutch_bag", "id": 275, "frequency": "r", "synset": "clutch_bag.n.01"}, + {"name": "coaster", "id": 276, "frequency": "f", "synset": "coaster.n.03"}, + {"name": "coat", "id": 277, "frequency": "f", "synset": "coat.n.01"}, + {"name": "coat_hanger", "id": 278, "frequency": "c", "synset": "coat_hanger.n.01"}, + {"name": "coatrack", "id": 279, "frequency": "c", "synset": "coatrack.n.01"}, + {"name": "cock", "id": 280, "frequency": "c", "synset": "cock.n.04"}, + {"name": "cockroach", "id": 281, "frequency": "r", "synset": "cockroach.n.01"}, + {"name": "cocoa_(beverage)", "id": 282, "frequency": "r", "synset": "cocoa.n.01"}, + {"name": "coconut", "id": 283, "frequency": "c", "synset": "coconut.n.02"}, + { + "name": "coffee_maker", + "id": 284, + "frequency": "f", + "synset": "coffee_maker.n.01", + }, + { + "name": "coffee_table", + "id": 285, + "frequency": "f", + "synset": "coffee_table.n.01", + }, + {"name": "coffeepot", "id": 286, "frequency": "c", "synset": "coffeepot.n.01"}, + {"name": "coil", "id": 287, "frequency": "r", "synset": "coil.n.05"}, + {"name": "coin", "id": 288, "frequency": "c", "synset": "coin.n.01"}, + {"name": "colander", "id": 289, "frequency": "c", "synset": "colander.n.01"}, + {"name": "coleslaw", "id": 290, "frequency": "c", "synset": "coleslaw.n.01"}, + { + "name": "coloring_material", + "id": 291, + "frequency": "r", + "synset": "coloring_material.n.01", + }, + { + "name": "combination_lock", + "id": 292, + "frequency": "r", + "synset": "combination_lock.n.01", + }, + {"name": "pacifier", "id": 293, "frequency": "c", "synset": "comforter.n.04"}, + {"name": "comic_book", "id": 294, "frequency": "r", "synset": "comic_book.n.01"}, + {"name": "compass", "id": 295, "frequency": "r", "synset": "compass.n.01"}, + { + "name": "computer_keyboard", + "id": 296, + "frequency": "f", + "synset": "computer_keyboard.n.01", + }, + {"name": "condiment", "id": 297, "frequency": "f", "synset": "condiment.n.01"}, + {"name": "cone", "id": 298, "frequency": "f", "synset": "cone.n.01"}, + {"name": "control", "id": 299, "frequency": "f", "synset": "control.n.09"}, + { + "name": "convertible_(automobile)", + "id": 300, + "frequency": "r", + "synset": "convertible.n.01", + }, + {"name": "sofa_bed", "id": 301, "frequency": "r", "synset": "convertible.n.03"}, + {"name": "cooker", "id": 302, "frequency": "r", "synset": "cooker.n.01"}, + {"name": "cookie", "id": 303, "frequency": "f", "synset": "cookie.n.01"}, + { + "name": "cooking_utensil", + "id": 304, + "frequency": "r", + "synset": "cooking_utensil.n.01", + }, + {"name": "cooler_(for_food)", "id": 305, "frequency": "f", "synset": "cooler.n.01"}, + {"name": "cork_(bottle_plug)", "id": 306, "frequency": "f", "synset": "cork.n.04"}, + {"name": "corkboard", "id": 307, "frequency": "r", "synset": "corkboard.n.01"}, + {"name": "corkscrew", "id": 308, "frequency": "c", "synset": "corkscrew.n.01"}, + {"name": "edible_corn", "id": 309, "frequency": "f", "synset": "corn.n.03"}, + {"name": "cornbread", "id": 310, "frequency": "r", "synset": "cornbread.n.01"}, + {"name": "cornet", "id": 311, "frequency": "c", "synset": "cornet.n.01"}, + {"name": "cornice", "id": 312, "frequency": "c", "synset": "cornice.n.01"}, + {"name": "cornmeal", "id": 313, "frequency": "r", "synset": "cornmeal.n.01"}, + {"name": "corset", "id": 314, "frequency": "c", "synset": "corset.n.01"}, + {"name": "costume", "id": 315, "frequency": "c", "synset": "costume.n.04"}, + {"name": "cougar", "id": 316, "frequency": "r", "synset": "cougar.n.01"}, + {"name": "coverall", "id": 317, "frequency": "r", "synset": "coverall.n.01"}, + {"name": "cowbell", "id": 318, "frequency": "c", "synset": "cowbell.n.01"}, + {"name": "cowboy_hat", "id": 319, "frequency": "f", "synset": "cowboy_hat.n.01"}, + {"name": "crab_(animal)", "id": 320, "frequency": "c", "synset": "crab.n.01"}, + {"name": "crabmeat", "id": 321, "frequency": "r", "synset": "crab.n.05"}, + {"name": "cracker", "id": 322, "frequency": "c", "synset": "cracker.n.01"}, + {"name": "crape", "id": 323, "frequency": "r", "synset": "crape.n.01"}, + {"name": "crate", "id": 324, "frequency": "f", "synset": "crate.n.01"}, + {"name": "crayon", "id": 325, "frequency": "c", "synset": "crayon.n.01"}, + { + "name": "cream_pitcher", + "id": 326, + "frequency": "r", + "synset": "cream_pitcher.n.01", + }, + { + "name": "crescent_roll", + "id": 327, + "frequency": "c", + "synset": "crescent_roll.n.01", + }, + {"name": "crib", "id": 328, "frequency": "c", "synset": "crib.n.01"}, + {"name": "crock_pot", "id": 329, "frequency": "c", "synset": "crock.n.03"}, + {"name": "crossbar", "id": 330, "frequency": "f", "synset": "crossbar.n.01"}, + {"name": "crouton", "id": 331, "frequency": "r", "synset": "crouton.n.01"}, + {"name": "crow", "id": 332, "frequency": "c", "synset": "crow.n.01"}, + {"name": "crowbar", "id": 333, "frequency": "r", "synset": "crowbar.n.01"}, + {"name": "crown", "id": 334, "frequency": "c", "synset": "crown.n.04"}, + {"name": "crucifix", "id": 335, "frequency": "c", "synset": "crucifix.n.01"}, + {"name": "cruise_ship", "id": 336, "frequency": "c", "synset": "cruise_ship.n.01"}, + {"name": "police_cruiser", "id": 337, "frequency": "c", "synset": "cruiser.n.01"}, + {"name": "crumb", "id": 338, "frequency": "f", "synset": "crumb.n.03"}, + {"name": "crutch", "id": 339, "frequency": "c", "synset": "crutch.n.01"}, + {"name": "cub_(animal)", "id": 340, "frequency": "c", "synset": "cub.n.03"}, + {"name": "cube", "id": 341, "frequency": "c", "synset": "cube.n.05"}, + {"name": "cucumber", "id": 342, "frequency": "f", "synset": "cucumber.n.02"}, + {"name": "cufflink", "id": 343, "frequency": "c", "synset": "cufflink.n.01"}, + {"name": "cup", "id": 344, "frequency": "f", "synset": "cup.n.01"}, + {"name": "trophy_cup", "id": 345, "frequency": "c", "synset": "cup.n.08"}, + {"name": "cupboard", "id": 346, "frequency": "f", "synset": "cupboard.n.01"}, + {"name": "cupcake", "id": 347, "frequency": "f", "synset": "cupcake.n.01"}, + {"name": "hair_curler", "id": 348, "frequency": "r", "synset": "curler.n.01"}, + { + "name": "curling_iron", + "id": 349, + "frequency": "r", + "synset": "curling_iron.n.01", + }, + {"name": "curtain", "id": 350, "frequency": "f", "synset": "curtain.n.01"}, + {"name": "cushion", "id": 351, "frequency": "f", "synset": "cushion.n.03"}, + {"name": "cylinder", "id": 352, "frequency": "r", "synset": "cylinder.n.04"}, + {"name": "cymbal", "id": 353, "frequency": "r", "synset": "cymbal.n.01"}, + {"name": "dagger", "id": 354, "frequency": "r", "synset": "dagger.n.01"}, + {"name": "dalmatian", "id": 355, "frequency": "r", "synset": "dalmatian.n.02"}, + {"name": "dartboard", "id": 356, "frequency": "c", "synset": "dartboard.n.01"}, + {"name": "date_(fruit)", "id": 357, "frequency": "r", "synset": "date.n.08"}, + {"name": "deck_chair", "id": 358, "frequency": "f", "synset": "deck_chair.n.01"}, + {"name": "deer", "id": 359, "frequency": "c", "synset": "deer.n.01"}, + { + "name": "dental_floss", + "id": 360, + "frequency": "c", + "synset": "dental_floss.n.01", + }, + {"name": "desk", "id": 361, "frequency": "f", "synset": "desk.n.01"}, + {"name": "detergent", "id": 362, "frequency": "r", "synset": "detergent.n.01"}, + {"name": "diaper", "id": 363, "frequency": "c", "synset": "diaper.n.01"}, + {"name": "diary", "id": 364, "frequency": "r", "synset": "diary.n.01"}, + {"name": "die", "id": 365, "frequency": "r", "synset": "die.n.01"}, + {"name": "dinghy", "id": 366, "frequency": "r", "synset": "dinghy.n.01"}, + { + "name": "dining_table", + "id": 367, + "frequency": "f", + "synset": "dining_table.n.01", + }, + {"name": "tux", "id": 368, "frequency": "r", "synset": "dinner_jacket.n.01"}, + {"name": "dish", "id": 369, "frequency": "f", "synset": "dish.n.01"}, + {"name": "dish_antenna", "id": 370, "frequency": "c", "synset": "dish.n.05"}, + {"name": "dishrag", "id": 371, "frequency": "c", "synset": "dishrag.n.01"}, + {"name": "dishtowel", "id": 372, "frequency": "f", "synset": "dishtowel.n.01"}, + {"name": "dishwasher", "id": 373, "frequency": "f", "synset": "dishwasher.n.01"}, + { + "name": "dishwasher_detergent", + "id": 374, + "frequency": "r", + "synset": "dishwasher_detergent.n.01", + }, + {"name": "dispenser", "id": 375, "frequency": "f", "synset": "dispenser.n.01"}, + { + "name": "diving_board", + "id": 376, + "frequency": "r", + "synset": "diving_board.n.01", + }, + {"name": "Dixie_cup", "id": 377, "frequency": "f", "synset": "dixie_cup.n.01"}, + {"name": "dog", "id": 378, "frequency": "f", "synset": "dog.n.01"}, + {"name": "dog_collar", "id": 379, "frequency": "f", "synset": "dog_collar.n.01"}, + {"name": "doll", "id": 380, "frequency": "f", "synset": "doll.n.01"}, + {"name": "dollar", "id": 381, "frequency": "r", "synset": "dollar.n.02"}, + {"name": "dollhouse", "id": 382, "frequency": "r", "synset": "dollhouse.n.01"}, + {"name": "dolphin", "id": 383, "frequency": "c", "synset": "dolphin.n.02"}, + { + "name": "domestic_ass", + "id": 384, + "frequency": "c", + "synset": "domestic_ass.n.01", + }, + {"name": "doorknob", "id": 385, "frequency": "f", "synset": "doorknob.n.01"}, + {"name": "doormat", "id": 386, "frequency": "c", "synset": "doormat.n.02"}, + {"name": "doughnut", "id": 387, "frequency": "f", "synset": "doughnut.n.02"}, + {"name": "dove", "id": 388, "frequency": "r", "synset": "dove.n.01"}, + {"name": "dragonfly", "id": 389, "frequency": "r", "synset": "dragonfly.n.01"}, + {"name": "drawer", "id": 390, "frequency": "f", "synset": "drawer.n.01"}, + {"name": "underdrawers", "id": 391, "frequency": "c", "synset": "drawers.n.01"}, + {"name": "dress", "id": 392, "frequency": "f", "synset": "dress.n.01"}, + {"name": "dress_hat", "id": 393, "frequency": "c", "synset": "dress_hat.n.01"}, + {"name": "dress_suit", "id": 394, "frequency": "f", "synset": "dress_suit.n.01"}, + {"name": "dresser", "id": 395, "frequency": "f", "synset": "dresser.n.05"}, + {"name": "drill", "id": 396, "frequency": "c", "synset": "drill.n.01"}, + {"name": "drone", "id": 397, "frequency": "r", "synset": "drone.n.04"}, + {"name": "dropper", "id": 398, "frequency": "r", "synset": "dropper.n.01"}, + { + "name": "drum_(musical_instrument)", + "id": 399, + "frequency": "c", + "synset": "drum.n.01", + }, + {"name": "drumstick", "id": 400, "frequency": "r", "synset": "drumstick.n.02"}, + {"name": "duck", "id": 401, "frequency": "f", "synset": "duck.n.01"}, + {"name": "duckling", "id": 402, "frequency": "c", "synset": "duckling.n.02"}, + {"name": "duct_tape", "id": 403, "frequency": "c", "synset": "duct_tape.n.01"}, + {"name": "duffel_bag", "id": 404, "frequency": "f", "synset": "duffel_bag.n.01"}, + {"name": "dumbbell", "id": 405, "frequency": "r", "synset": "dumbbell.n.01"}, + {"name": "dumpster", "id": 406, "frequency": "c", "synset": "dumpster.n.01"}, + {"name": "dustpan", "id": 407, "frequency": "r", "synset": "dustpan.n.02"}, + {"name": "eagle", "id": 408, "frequency": "c", "synset": "eagle.n.01"}, + {"name": "earphone", "id": 409, "frequency": "f", "synset": "earphone.n.01"}, + {"name": "earplug", "id": 410, "frequency": "r", "synset": "earplug.n.01"}, + {"name": "earring", "id": 411, "frequency": "f", "synset": "earring.n.01"}, + {"name": "easel", "id": 412, "frequency": "c", "synset": "easel.n.01"}, + {"name": "eclair", "id": 413, "frequency": "r", "synset": "eclair.n.01"}, + {"name": "eel", "id": 414, "frequency": "r", "synset": "eel.n.01"}, + {"name": "egg", "id": 415, "frequency": "f", "synset": "egg.n.02"}, + {"name": "egg_roll", "id": 416, "frequency": "r", "synset": "egg_roll.n.01"}, + {"name": "egg_yolk", "id": 417, "frequency": "c", "synset": "egg_yolk.n.01"}, + {"name": "eggbeater", "id": 418, "frequency": "c", "synset": "eggbeater.n.02"}, + {"name": "eggplant", "id": 419, "frequency": "c", "synset": "eggplant.n.01"}, + { + "name": "electric_chair", + "id": 420, + "frequency": "r", + "synset": "electric_chair.n.01", + }, + { + "name": "refrigerator", + "id": 421, + "frequency": "f", + "synset": "electric_refrigerator.n.01", + }, + {"name": "elephant", "id": 422, "frequency": "f", "synset": "elephant.n.01"}, + {"name": "elk", "id": 423, "frequency": "c", "synset": "elk.n.01"}, + {"name": "envelope", "id": 424, "frequency": "c", "synset": "envelope.n.01"}, + {"name": "eraser", "id": 425, "frequency": "c", "synset": "eraser.n.01"}, + {"name": "escargot", "id": 426, "frequency": "r", "synset": "escargot.n.01"}, + {"name": "eyepatch", "id": 427, "frequency": "r", "synset": "eyepatch.n.01"}, + {"name": "falcon", "id": 428, "frequency": "r", "synset": "falcon.n.01"}, + {"name": "fan", "id": 429, "frequency": "f", "synset": "fan.n.01"}, + {"name": "faucet", "id": 430, "frequency": "f", "synset": "faucet.n.01"}, + {"name": "fedora", "id": 431, "frequency": "r", "synset": "fedora.n.01"}, + {"name": "ferret", "id": 432, "frequency": "r", "synset": "ferret.n.02"}, + { + "name": "Ferris_wheel", + "id": 433, + "frequency": "c", + "synset": "ferris_wheel.n.01", + }, + {"name": "ferry", "id": 434, "frequency": "c", "synset": "ferry.n.01"}, + {"name": "fig_(fruit)", "id": 435, "frequency": "r", "synset": "fig.n.04"}, + {"name": "fighter_jet", "id": 436, "frequency": "c", "synset": "fighter.n.02"}, + {"name": "figurine", "id": 437, "frequency": "f", "synset": "figurine.n.01"}, + {"name": "file_cabinet", "id": 438, "frequency": "c", "synset": "file.n.03"}, + {"name": "file_(tool)", "id": 439, "frequency": "r", "synset": "file.n.04"}, + {"name": "fire_alarm", "id": 440, "frequency": "f", "synset": "fire_alarm.n.02"}, + {"name": "fire_engine", "id": 441, "frequency": "f", "synset": "fire_engine.n.01"}, + { + "name": "fire_extinguisher", + "id": 442, + "frequency": "f", + "synset": "fire_extinguisher.n.01", + }, + {"name": "fire_hose", "id": 443, "frequency": "c", "synset": "fire_hose.n.01"}, + {"name": "fireplace", "id": 444, "frequency": "f", "synset": "fireplace.n.01"}, + {"name": "fireplug", "id": 445, "frequency": "f", "synset": "fireplug.n.01"}, + { + "name": "first-aid_kit", + "id": 446, + "frequency": "r", + "synset": "first-aid_kit.n.01", + }, + {"name": "fish", "id": 447, "frequency": "f", "synset": "fish.n.01"}, + {"name": "fish_(food)", "id": 448, "frequency": "c", "synset": "fish.n.02"}, + {"name": "fishbowl", "id": 449, "frequency": "r", "synset": "fishbowl.n.02"}, + {"name": "fishing_rod", "id": 450, "frequency": "c", "synset": "fishing_rod.n.01"}, + {"name": "flag", "id": 451, "frequency": "f", "synset": "flag.n.01"}, + {"name": "flagpole", "id": 452, "frequency": "f", "synset": "flagpole.n.02"}, + {"name": "flamingo", "id": 453, "frequency": "c", "synset": "flamingo.n.01"}, + {"name": "flannel", "id": 454, "frequency": "c", "synset": "flannel.n.01"}, + {"name": "flap", "id": 455, "frequency": "c", "synset": "flap.n.01"}, + {"name": "flash", "id": 456, "frequency": "r", "synset": "flash.n.10"}, + {"name": "flashlight", "id": 457, "frequency": "c", "synset": "flashlight.n.01"}, + {"name": "fleece", "id": 458, "frequency": "r", "synset": "fleece.n.03"}, + { + "name": "flip-flop_(sandal)", + "id": 459, + "frequency": "f", + "synset": "flip-flop.n.02", + }, + { + "name": "flipper_(footwear)", + "id": 460, + "frequency": "c", + "synset": "flipper.n.01", + }, + { + "name": "flower_arrangement", + "id": 461, + "frequency": "f", + "synset": "flower_arrangement.n.01", + }, + {"name": "flute_glass", "id": 462, "frequency": "c", "synset": "flute.n.02"}, + {"name": "foal", "id": 463, "frequency": "c", "synset": "foal.n.01"}, + { + "name": "folding_chair", + "id": 464, + "frequency": "c", + "synset": "folding_chair.n.01", + }, + { + "name": "food_processor", + "id": 465, + "frequency": "c", + "synset": "food_processor.n.01", + }, + { + "name": "football_(American)", + "id": 466, + "frequency": "c", + "synset": "football.n.02", + }, + { + "name": "football_helmet", + "id": 467, + "frequency": "r", + "synset": "football_helmet.n.01", + }, + {"name": "footstool", "id": 468, "frequency": "c", "synset": "footstool.n.01"}, + {"name": "fork", "id": 469, "frequency": "f", "synset": "fork.n.01"}, + {"name": "forklift", "id": 470, "frequency": "c", "synset": "forklift.n.01"}, + {"name": "freight_car", "id": 471, "frequency": "c", "synset": "freight_car.n.01"}, + { + "name": "French_toast", + "id": 472, + "frequency": "c", + "synset": "french_toast.n.01", + }, + {"name": "freshener", "id": 473, "frequency": "c", "synset": "freshener.n.01"}, + {"name": "frisbee", "id": 474, "frequency": "f", "synset": "frisbee.n.01"}, + {"name": "frog", "id": 475, "frequency": "c", "synset": "frog.n.01"}, + {"name": "fruit_juice", "id": 476, "frequency": "c", "synset": "fruit_juice.n.01"}, + {"name": "frying_pan", "id": 477, "frequency": "f", "synset": "frying_pan.n.01"}, + {"name": "fudge", "id": 478, "frequency": "r", "synset": "fudge.n.01"}, + {"name": "funnel", "id": 479, "frequency": "r", "synset": "funnel.n.02"}, + {"name": "futon", "id": 480, "frequency": "r", "synset": "futon.n.01"}, + {"name": "gag", "id": 481, "frequency": "r", "synset": "gag.n.02"}, + {"name": "garbage", "id": 482, "frequency": "r", "synset": "garbage.n.03"}, + { + "name": "garbage_truck", + "id": 483, + "frequency": "c", + "synset": "garbage_truck.n.01", + }, + {"name": "garden_hose", "id": 484, "frequency": "c", "synset": "garden_hose.n.01"}, + {"name": "gargle", "id": 485, "frequency": "c", "synset": "gargle.n.01"}, + {"name": "gargoyle", "id": 486, "frequency": "r", "synset": "gargoyle.n.02"}, + {"name": "garlic", "id": 487, "frequency": "c", "synset": "garlic.n.02"}, + {"name": "gasmask", "id": 488, "frequency": "r", "synset": "gasmask.n.01"}, + {"name": "gazelle", "id": 489, "frequency": "c", "synset": "gazelle.n.01"}, + {"name": "gelatin", "id": 490, "frequency": "c", "synset": "gelatin.n.02"}, + {"name": "gemstone", "id": 491, "frequency": "r", "synset": "gem.n.02"}, + {"name": "generator", "id": 492, "frequency": "r", "synset": "generator.n.02"}, + {"name": "giant_panda", "id": 493, "frequency": "c", "synset": "giant_panda.n.01"}, + {"name": "gift_wrap", "id": 494, "frequency": "c", "synset": "gift_wrap.n.01"}, + {"name": "ginger", "id": 495, "frequency": "c", "synset": "ginger.n.03"}, + {"name": "giraffe", "id": 496, "frequency": "f", "synset": "giraffe.n.01"}, + {"name": "cincture", "id": 497, "frequency": "c", "synset": "girdle.n.02"}, + { + "name": "glass_(drink_container)", + "id": 498, + "frequency": "f", + "synset": "glass.n.02", + }, + {"name": "globe", "id": 499, "frequency": "c", "synset": "globe.n.03"}, + {"name": "glove", "id": 500, "frequency": "f", "synset": "glove.n.02"}, + {"name": "goat", "id": 501, "frequency": "c", "synset": "goat.n.01"}, + {"name": "goggles", "id": 502, "frequency": "f", "synset": "goggles.n.01"}, + {"name": "goldfish", "id": 503, "frequency": "r", "synset": "goldfish.n.01"}, + {"name": "golf_club", "id": 504, "frequency": "c", "synset": "golf_club.n.02"}, + {"name": "golfcart", "id": 505, "frequency": "c", "synset": "golfcart.n.01"}, + {"name": "gondola_(boat)", "id": 506, "frequency": "r", "synset": "gondola.n.02"}, + {"name": "goose", "id": 507, "frequency": "c", "synset": "goose.n.01"}, + {"name": "gorilla", "id": 508, "frequency": "r", "synset": "gorilla.n.01"}, + {"name": "gourd", "id": 509, "frequency": "r", "synset": "gourd.n.02"}, + {"name": "grape", "id": 510, "frequency": "f", "synset": "grape.n.01"}, + {"name": "grater", "id": 511, "frequency": "c", "synset": "grater.n.01"}, + {"name": "gravestone", "id": 512, "frequency": "c", "synset": "gravestone.n.01"}, + {"name": "gravy_boat", "id": 513, "frequency": "r", "synset": "gravy_boat.n.01"}, + {"name": "green_bean", "id": 514, "frequency": "f", "synset": "green_bean.n.02"}, + {"name": "green_onion", "id": 515, "frequency": "f", "synset": "green_onion.n.01"}, + {"name": "griddle", "id": 516, "frequency": "r", "synset": "griddle.n.01"}, + {"name": "grill", "id": 517, "frequency": "f", "synset": "grill.n.02"}, + {"name": "grits", "id": 518, "frequency": "r", "synset": "grits.n.01"}, + {"name": "grizzly", "id": 519, "frequency": "c", "synset": "grizzly.n.01"}, + {"name": "grocery_bag", "id": 520, "frequency": "c", "synset": "grocery_bag.n.01"}, + {"name": "guitar", "id": 521, "frequency": "f", "synset": "guitar.n.01"}, + {"name": "gull", "id": 522, "frequency": "c", "synset": "gull.n.02"}, + {"name": "gun", "id": 523, "frequency": "c", "synset": "gun.n.01"}, + {"name": "hairbrush", "id": 524, "frequency": "f", "synset": "hairbrush.n.01"}, + {"name": "hairnet", "id": 525, "frequency": "c", "synset": "hairnet.n.01"}, + {"name": "hairpin", "id": 526, "frequency": "c", "synset": "hairpin.n.01"}, + {"name": "halter_top", "id": 527, "frequency": "r", "synset": "halter.n.03"}, + {"name": "ham", "id": 528, "frequency": "f", "synset": "ham.n.01"}, + {"name": "hamburger", "id": 529, "frequency": "c", "synset": "hamburger.n.01"}, + {"name": "hammer", "id": 530, "frequency": "c", "synset": "hammer.n.02"}, + {"name": "hammock", "id": 531, "frequency": "c", "synset": "hammock.n.02"}, + {"name": "hamper", "id": 532, "frequency": "r", "synset": "hamper.n.02"}, + {"name": "hamster", "id": 533, "frequency": "c", "synset": "hamster.n.01"}, + {"name": "hair_dryer", "id": 534, "frequency": "f", "synset": "hand_blower.n.01"}, + {"name": "hand_glass", "id": 535, "frequency": "r", "synset": "hand_glass.n.01"}, + {"name": "hand_towel", "id": 536, "frequency": "f", "synset": "hand_towel.n.01"}, + {"name": "handcart", "id": 537, "frequency": "c", "synset": "handcart.n.01"}, + {"name": "handcuff", "id": 538, "frequency": "r", "synset": "handcuff.n.01"}, + { + "name": "handkerchief", + "id": 539, + "frequency": "c", + "synset": "handkerchief.n.01", + }, + {"name": "handle", "id": 540, "frequency": "f", "synset": "handle.n.01"}, + {"name": "handsaw", "id": 541, "frequency": "r", "synset": "handsaw.n.01"}, + {"name": "hardback_book", "id": 542, "frequency": "r", "synset": "hardback.n.01"}, + {"name": "harmonium", "id": 543, "frequency": "r", "synset": "harmonium.n.01"}, + {"name": "hat", "id": 544, "frequency": "f", "synset": "hat.n.01"}, + {"name": "hatbox", "id": 545, "frequency": "r", "synset": "hatbox.n.01"}, + {"name": "veil", "id": 546, "frequency": "c", "synset": "head_covering.n.01"}, + {"name": "headband", "id": 547, "frequency": "f", "synset": "headband.n.01"}, + {"name": "headboard", "id": 548, "frequency": "f", "synset": "headboard.n.01"}, + {"name": "headlight", "id": 549, "frequency": "f", "synset": "headlight.n.01"}, + {"name": "headscarf", "id": 550, "frequency": "c", "synset": "headscarf.n.01"}, + {"name": "headset", "id": 551, "frequency": "r", "synset": "headset.n.01"}, + { + "name": "headstall_(for_horses)", + "id": 552, + "frequency": "c", + "synset": "headstall.n.01", + }, + {"name": "heart", "id": 553, "frequency": "c", "synset": "heart.n.02"}, + {"name": "heater", "id": 554, "frequency": "c", "synset": "heater.n.01"}, + {"name": "helicopter", "id": 555, "frequency": "c", "synset": "helicopter.n.01"}, + {"name": "helmet", "id": 556, "frequency": "f", "synset": "helmet.n.02"}, + {"name": "heron", "id": 557, "frequency": "r", "synset": "heron.n.02"}, + {"name": "highchair", "id": 558, "frequency": "c", "synset": "highchair.n.01"}, + {"name": "hinge", "id": 559, "frequency": "f", "synset": "hinge.n.01"}, + { + "name": "hippopotamus", + "id": 560, + "frequency": "r", + "synset": "hippopotamus.n.01", + }, + { + "name": "hockey_stick", + "id": 561, + "frequency": "r", + "synset": "hockey_stick.n.01", + }, + {"name": "hog", "id": 562, "frequency": "c", "synset": "hog.n.03"}, + { + "name": "home_plate_(baseball)", + "id": 563, + "frequency": "f", + "synset": "home_plate.n.01", + }, + {"name": "honey", "id": 564, "frequency": "c", "synset": "honey.n.01"}, + {"name": "fume_hood", "id": 565, "frequency": "f", "synset": "hood.n.06"}, + {"name": "hook", "id": 566, "frequency": "f", "synset": "hook.n.05"}, + {"name": "hookah", "id": 567, "frequency": "r", "synset": "hookah.n.01"}, + {"name": "hornet", "id": 568, "frequency": "r", "synset": "hornet.n.01"}, + {"name": "horse", "id": 569, "frequency": "f", "synset": "horse.n.01"}, + {"name": "hose", "id": 570, "frequency": "f", "synset": "hose.n.03"}, + { + "name": "hot-air_balloon", + "id": 571, + "frequency": "r", + "synset": "hot-air_balloon.n.01", + }, + {"name": "hotplate", "id": 572, "frequency": "r", "synset": "hot_plate.n.01"}, + {"name": "hot_sauce", "id": 573, "frequency": "c", "synset": "hot_sauce.n.01"}, + {"name": "hourglass", "id": 574, "frequency": "r", "synset": "hourglass.n.01"}, + {"name": "houseboat", "id": 575, "frequency": "r", "synset": "houseboat.n.01"}, + {"name": "hummingbird", "id": 576, "frequency": "c", "synset": "hummingbird.n.01"}, + {"name": "hummus", "id": 577, "frequency": "r", "synset": "hummus.n.01"}, + {"name": "polar_bear", "id": 578, "frequency": "f", "synset": "ice_bear.n.01"}, + {"name": "icecream", "id": 579, "frequency": "c", "synset": "ice_cream.n.01"}, + {"name": "popsicle", "id": 580, "frequency": "r", "synset": "ice_lolly.n.01"}, + {"name": "ice_maker", "id": 581, "frequency": "c", "synset": "ice_maker.n.01"}, + {"name": "ice_pack", "id": 582, "frequency": "r", "synset": "ice_pack.n.01"}, + {"name": "ice_skate", "id": 583, "frequency": "r", "synset": "ice_skate.n.01"}, + {"name": "igniter", "id": 584, "frequency": "c", "synset": "igniter.n.01"}, + {"name": "inhaler", "id": 585, "frequency": "r", "synset": "inhaler.n.01"}, + {"name": "iPod", "id": 586, "frequency": "f", "synset": "ipod.n.01"}, + {"name": "iron_(for_clothing)", "id": 587, "frequency": "c", "synset": "iron.n.04"}, + { + "name": "ironing_board", + "id": 588, + "frequency": "c", + "synset": "ironing_board.n.01", + }, + {"name": "jacket", "id": 589, "frequency": "f", "synset": "jacket.n.01"}, + {"name": "jam", "id": 590, "frequency": "c", "synset": "jam.n.01"}, + {"name": "jar", "id": 591, "frequency": "f", "synset": "jar.n.01"}, + {"name": "jean", "id": 592, "frequency": "f", "synset": "jean.n.01"}, + {"name": "jeep", "id": 593, "frequency": "c", "synset": "jeep.n.01"}, + {"name": "jelly_bean", "id": 594, "frequency": "r", "synset": "jelly_bean.n.01"}, + {"name": "jersey", "id": 595, "frequency": "f", "synset": "jersey.n.03"}, + {"name": "jet_plane", "id": 596, "frequency": "c", "synset": "jet.n.01"}, + {"name": "jewel", "id": 597, "frequency": "r", "synset": "jewel.n.01"}, + {"name": "jewelry", "id": 598, "frequency": "c", "synset": "jewelry.n.01"}, + {"name": "joystick", "id": 599, "frequency": "r", "synset": "joystick.n.02"}, + {"name": "jumpsuit", "id": 600, "frequency": "c", "synset": "jump_suit.n.01"}, + {"name": "kayak", "id": 601, "frequency": "c", "synset": "kayak.n.01"}, + {"name": "keg", "id": 602, "frequency": "r", "synset": "keg.n.02"}, + {"name": "kennel", "id": 603, "frequency": "r", "synset": "kennel.n.01"}, + {"name": "kettle", "id": 604, "frequency": "c", "synset": "kettle.n.01"}, + {"name": "key", "id": 605, "frequency": "f", "synset": "key.n.01"}, + {"name": "keycard", "id": 606, "frequency": "r", "synset": "keycard.n.01"}, + {"name": "kilt", "id": 607, "frequency": "c", "synset": "kilt.n.01"}, + {"name": "kimono", "id": 608, "frequency": "c", "synset": "kimono.n.01"}, + { + "name": "kitchen_sink", + "id": 609, + "frequency": "f", + "synset": "kitchen_sink.n.01", + }, + { + "name": "kitchen_table", + "id": 610, + "frequency": "r", + "synset": "kitchen_table.n.01", + }, + {"name": "kite", "id": 611, "frequency": "f", "synset": "kite.n.03"}, + {"name": "kitten", "id": 612, "frequency": "c", "synset": "kitten.n.01"}, + {"name": "kiwi_fruit", "id": 613, "frequency": "c", "synset": "kiwi.n.03"}, + {"name": "knee_pad", "id": 614, "frequency": "f", "synset": "knee_pad.n.01"}, + {"name": "knife", "id": 615, "frequency": "f", "synset": "knife.n.01"}, + { + "name": "knitting_needle", + "id": 616, + "frequency": "r", + "synset": "knitting_needle.n.01", + }, + {"name": "knob", "id": 617, "frequency": "f", "synset": "knob.n.02"}, + { + "name": "knocker_(on_a_door)", + "id": 618, + "frequency": "r", + "synset": "knocker.n.05", + }, + {"name": "koala", "id": 619, "frequency": "r", "synset": "koala.n.01"}, + {"name": "lab_coat", "id": 620, "frequency": "r", "synset": "lab_coat.n.01"}, + {"name": "ladder", "id": 621, "frequency": "f", "synset": "ladder.n.01"}, + {"name": "ladle", "id": 622, "frequency": "c", "synset": "ladle.n.01"}, + {"name": "ladybug", "id": 623, "frequency": "c", "synset": "ladybug.n.01"}, + {"name": "lamb_(animal)", "id": 624, "frequency": "f", "synset": "lamb.n.01"}, + {"name": "lamb-chop", "id": 625, "frequency": "r", "synset": "lamb_chop.n.01"}, + {"name": "lamp", "id": 626, "frequency": "f", "synset": "lamp.n.02"}, + {"name": "lamppost", "id": 627, "frequency": "f", "synset": "lamppost.n.01"}, + {"name": "lampshade", "id": 628, "frequency": "f", "synset": "lampshade.n.01"}, + {"name": "lantern", "id": 629, "frequency": "c", "synset": "lantern.n.01"}, + {"name": "lanyard", "id": 630, "frequency": "f", "synset": "lanyard.n.02"}, + {"name": "laptop_computer", "id": 631, "frequency": "f", "synset": "laptop.n.01"}, + {"name": "lasagna", "id": 632, "frequency": "r", "synset": "lasagna.n.01"}, + {"name": "latch", "id": 633, "frequency": "f", "synset": "latch.n.02"}, + {"name": "lawn_mower", "id": 634, "frequency": "r", "synset": "lawn_mower.n.01"}, + {"name": "leather", "id": 635, "frequency": "r", "synset": "leather.n.01"}, + { + "name": "legging_(clothing)", + "id": 636, + "frequency": "c", + "synset": "legging.n.01", + }, + {"name": "Lego", "id": 637, "frequency": "c", "synset": "lego.n.01"}, + {"name": "legume", "id": 638, "frequency": "r", "synset": "legume.n.02"}, + {"name": "lemon", "id": 639, "frequency": "f", "synset": "lemon.n.01"}, + {"name": "lemonade", "id": 640, "frequency": "r", "synset": "lemonade.n.01"}, + {"name": "lettuce", "id": 641, "frequency": "f", "synset": "lettuce.n.02"}, + { + "name": "license_plate", + "id": 642, + "frequency": "f", + "synset": "license_plate.n.01", + }, + {"name": "life_buoy", "id": 643, "frequency": "f", "synset": "life_buoy.n.01"}, + {"name": "life_jacket", "id": 644, "frequency": "f", "synset": "life_jacket.n.01"}, + {"name": "lightbulb", "id": 645, "frequency": "f", "synset": "light_bulb.n.01"}, + { + "name": "lightning_rod", + "id": 646, + "frequency": "r", + "synset": "lightning_rod.n.02", + }, + {"name": "lime", "id": 647, "frequency": "f", "synset": "lime.n.06"}, + {"name": "limousine", "id": 648, "frequency": "r", "synset": "limousine.n.01"}, + {"name": "lion", "id": 649, "frequency": "c", "synset": "lion.n.01"}, + {"name": "lip_balm", "id": 650, "frequency": "c", "synset": "lip_balm.n.01"}, + {"name": "liquor", "id": 651, "frequency": "r", "synset": "liquor.n.01"}, + {"name": "lizard", "id": 652, "frequency": "c", "synset": "lizard.n.01"}, + {"name": "log", "id": 653, "frequency": "f", "synset": "log.n.01"}, + {"name": "lollipop", "id": 654, "frequency": "c", "synset": "lollipop.n.02"}, + { + "name": "speaker_(stero_equipment)", + "id": 655, + "frequency": "f", + "synset": "loudspeaker.n.01", + }, + {"name": "loveseat", "id": 656, "frequency": "c", "synset": "love_seat.n.01"}, + {"name": "machine_gun", "id": 657, "frequency": "r", "synset": "machine_gun.n.01"}, + {"name": "magazine", "id": 658, "frequency": "f", "synset": "magazine.n.02"}, + {"name": "magnet", "id": 659, "frequency": "f", "synset": "magnet.n.01"}, + {"name": "mail_slot", "id": 660, "frequency": "c", "synset": "mail_slot.n.01"}, + { + "name": "mailbox_(at_home)", + "id": 661, + "frequency": "f", + "synset": "mailbox.n.01", + }, + {"name": "mallard", "id": 662, "frequency": "r", "synset": "mallard.n.01"}, + {"name": "mallet", "id": 663, "frequency": "r", "synset": "mallet.n.01"}, + {"name": "mammoth", "id": 664, "frequency": "r", "synset": "mammoth.n.01"}, + {"name": "manatee", "id": 665, "frequency": "r", "synset": "manatee.n.01"}, + {"name": "mandarin_orange", "id": 666, "frequency": "c", "synset": "mandarin.n.05"}, + {"name": "manger", "id": 667, "frequency": "c", "synset": "manger.n.01"}, + {"name": "manhole", "id": 668, "frequency": "f", "synset": "manhole.n.01"}, + {"name": "map", "id": 669, "frequency": "f", "synset": "map.n.01"}, + {"name": "marker", "id": 670, "frequency": "f", "synset": "marker.n.03"}, + {"name": "martini", "id": 671, "frequency": "r", "synset": "martini.n.01"}, + {"name": "mascot", "id": 672, "frequency": "r", "synset": "mascot.n.01"}, + { + "name": "mashed_potato", + "id": 673, + "frequency": "c", + "synset": "mashed_potato.n.01", + }, + {"name": "masher", "id": 674, "frequency": "r", "synset": "masher.n.02"}, + {"name": "mask", "id": 675, "frequency": "f", "synset": "mask.n.04"}, + {"name": "mast", "id": 676, "frequency": "f", "synset": "mast.n.01"}, + {"name": "mat_(gym_equipment)", "id": 677, "frequency": "c", "synset": "mat.n.03"}, + {"name": "matchbox", "id": 678, "frequency": "r", "synset": "matchbox.n.01"}, + {"name": "mattress", "id": 679, "frequency": "f", "synset": "mattress.n.01"}, + { + "name": "measuring_cup", + "id": 680, + "frequency": "c", + "synset": "measuring_cup.n.01", + }, + { + "name": "measuring_stick", + "id": 681, + "frequency": "c", + "synset": "measuring_stick.n.01", + }, + {"name": "meatball", "id": 682, "frequency": "c", "synset": "meatball.n.01"}, + {"name": "medicine", "id": 683, "frequency": "c", "synset": "medicine.n.02"}, + {"name": "melon", "id": 684, "frequency": "c", "synset": "melon.n.01"}, + {"name": "microphone", "id": 685, "frequency": "f", "synset": "microphone.n.01"}, + {"name": "microscope", "id": 686, "frequency": "r", "synset": "microscope.n.01"}, + {"name": "microwave_oven", "id": 687, "frequency": "f", "synset": "microwave.n.02"}, + {"name": "milestone", "id": 688, "frequency": "r", "synset": "milestone.n.01"}, + {"name": "milk", "id": 689, "frequency": "f", "synset": "milk.n.01"}, + {"name": "milk_can", "id": 690, "frequency": "r", "synset": "milk_can.n.01"}, + {"name": "milkshake", "id": 691, "frequency": "r", "synset": "milkshake.n.01"}, + {"name": "minivan", "id": 692, "frequency": "f", "synset": "minivan.n.01"}, + {"name": "mint_candy", "id": 693, "frequency": "r", "synset": "mint.n.05"}, + {"name": "mirror", "id": 694, "frequency": "f", "synset": "mirror.n.01"}, + {"name": "mitten", "id": 695, "frequency": "c", "synset": "mitten.n.01"}, + { + "name": "mixer_(kitchen_tool)", + "id": 696, + "frequency": "c", + "synset": "mixer.n.04", + }, + {"name": "money", "id": 697, "frequency": "c", "synset": "money.n.03"}, + { + "name": "monitor_(computer_equipment) computer_monitor", + "id": 698, + "frequency": "f", + "synset": "monitor.n.04", + }, + {"name": "monkey", "id": 699, "frequency": "c", "synset": "monkey.n.01"}, + {"name": "motor", "id": 700, "frequency": "f", "synset": "motor.n.01"}, + { + "name": "motor_scooter", + "id": 701, + "frequency": "f", + "synset": "motor_scooter.n.01", + }, + { + "name": "motor_vehicle", + "id": 702, + "frequency": "r", + "synset": "motor_vehicle.n.01", + }, + {"name": "motorcycle", "id": 703, "frequency": "f", "synset": "motorcycle.n.01"}, + {"name": "mound_(baseball)", "id": 704, "frequency": "f", "synset": "mound.n.01"}, + { + "name": "mouse_(computer_equipment)", + "id": 705, + "frequency": "f", + "synset": "mouse.n.04", + }, + {"name": "mousepad", "id": 706, "frequency": "f", "synset": "mousepad.n.01"}, + {"name": "muffin", "id": 707, "frequency": "c", "synset": "muffin.n.01"}, + {"name": "mug", "id": 708, "frequency": "f", "synset": "mug.n.04"}, + {"name": "mushroom", "id": 709, "frequency": "f", "synset": "mushroom.n.02"}, + {"name": "music_stool", "id": 710, "frequency": "r", "synset": "music_stool.n.01"}, + { + "name": "musical_instrument", + "id": 711, + "frequency": "c", + "synset": "musical_instrument.n.01", + }, + {"name": "nailfile", "id": 712, "frequency": "r", "synset": "nailfile.n.01"}, + {"name": "napkin", "id": 713, "frequency": "f", "synset": "napkin.n.01"}, + {"name": "neckerchief", "id": 714, "frequency": "r", "synset": "neckerchief.n.01"}, + {"name": "necklace", "id": 715, "frequency": "f", "synset": "necklace.n.01"}, + {"name": "necktie", "id": 716, "frequency": "f", "synset": "necktie.n.01"}, + {"name": "needle", "id": 717, "frequency": "c", "synset": "needle.n.03"}, + {"name": "nest", "id": 718, "frequency": "c", "synset": "nest.n.01"}, + {"name": "newspaper", "id": 719, "frequency": "f", "synset": "newspaper.n.01"}, + {"name": "newsstand", "id": 720, "frequency": "c", "synset": "newsstand.n.01"}, + {"name": "nightshirt", "id": 721, "frequency": "c", "synset": "nightwear.n.01"}, + { + "name": "nosebag_(for_animals)", + "id": 722, + "frequency": "r", + "synset": "nosebag.n.01", + }, + { + "name": "noseband_(for_animals)", + "id": 723, + "frequency": "c", + "synset": "noseband.n.01", + }, + {"name": "notebook", "id": 724, "frequency": "f", "synset": "notebook.n.01"}, + {"name": "notepad", "id": 725, "frequency": "c", "synset": "notepad.n.01"}, + {"name": "nut", "id": 726, "frequency": "f", "synset": "nut.n.03"}, + {"name": "nutcracker", "id": 727, "frequency": "r", "synset": "nutcracker.n.01"}, + {"name": "oar", "id": 728, "frequency": "f", "synset": "oar.n.01"}, + {"name": "octopus_(food)", "id": 729, "frequency": "r", "synset": "octopus.n.01"}, + {"name": "octopus_(animal)", "id": 730, "frequency": "r", "synset": "octopus.n.02"}, + {"name": "oil_lamp", "id": 731, "frequency": "c", "synset": "oil_lamp.n.01"}, + {"name": "olive_oil", "id": 732, "frequency": "c", "synset": "olive_oil.n.01"}, + {"name": "omelet", "id": 733, "frequency": "r", "synset": "omelet.n.01"}, + {"name": "onion", "id": 734, "frequency": "f", "synset": "onion.n.01"}, + {"name": "orange_(fruit)", "id": 735, "frequency": "f", "synset": "orange.n.01"}, + { + "name": "orange_juice", + "id": 736, + "frequency": "c", + "synset": "orange_juice.n.01", + }, + {"name": "ostrich", "id": 737, "frequency": "c", "synset": "ostrich.n.02"}, + {"name": "ottoman", "id": 738, "frequency": "f", "synset": "ottoman.n.03"}, + {"name": "oven", "id": 739, "frequency": "f", "synset": "oven.n.01"}, + { + "name": "overalls_(clothing)", + "id": 740, + "frequency": "c", + "synset": "overall.n.01", + }, + {"name": "owl", "id": 741, "frequency": "c", "synset": "owl.n.01"}, + {"name": "packet", "id": 742, "frequency": "c", "synset": "packet.n.03"}, + {"name": "inkpad", "id": 743, "frequency": "r", "synset": "pad.n.03"}, + {"name": "pad", "id": 744, "frequency": "c", "synset": "pad.n.04"}, + {"name": "paddle", "id": 745, "frequency": "f", "synset": "paddle.n.04"}, + {"name": "padlock", "id": 746, "frequency": "c", "synset": "padlock.n.01"}, + {"name": "paintbrush", "id": 747, "frequency": "c", "synset": "paintbrush.n.01"}, + {"name": "painting", "id": 748, "frequency": "f", "synset": "painting.n.01"}, + {"name": "pajamas", "id": 749, "frequency": "f", "synset": "pajama.n.02"}, + {"name": "palette", "id": 750, "frequency": "c", "synset": "palette.n.02"}, + {"name": "pan_(for_cooking)", "id": 751, "frequency": "f", "synset": "pan.n.01"}, + { + "name": "pan_(metal_container)", + "id": 752, + "frequency": "r", + "synset": "pan.n.03", + }, + {"name": "pancake", "id": 753, "frequency": "c", "synset": "pancake.n.01"}, + {"name": "pantyhose", "id": 754, "frequency": "r", "synset": "pantyhose.n.01"}, + {"name": "papaya", "id": 755, "frequency": "r", "synset": "papaya.n.02"}, + {"name": "paper_plate", "id": 756, "frequency": "f", "synset": "paper_plate.n.01"}, + {"name": "paper_towel", "id": 757, "frequency": "f", "synset": "paper_towel.n.01"}, + { + "name": "paperback_book", + "id": 758, + "frequency": "r", + "synset": "paperback_book.n.01", + }, + {"name": "paperweight", "id": 759, "frequency": "r", "synset": "paperweight.n.01"}, + {"name": "parachute", "id": 760, "frequency": "c", "synset": "parachute.n.01"}, + {"name": "parakeet", "id": 761, "frequency": "c", "synset": "parakeet.n.01"}, + { + "name": "parasail_(sports)", + "id": 762, + "frequency": "c", + "synset": "parasail.n.01", + }, + {"name": "parasol", "id": 763, "frequency": "c", "synset": "parasol.n.01"}, + {"name": "parchment", "id": 764, "frequency": "r", "synset": "parchment.n.01"}, + {"name": "parka", "id": 765, "frequency": "c", "synset": "parka.n.01"}, + { + "name": "parking_meter", + "id": 766, + "frequency": "f", + "synset": "parking_meter.n.01", + }, + {"name": "parrot", "id": 767, "frequency": "c", "synset": "parrot.n.01"}, + { + "name": "passenger_car_(part_of_a_train)", + "id": 768, + "frequency": "c", + "synset": "passenger_car.n.01", + }, + { + "name": "passenger_ship", + "id": 769, + "frequency": "r", + "synset": "passenger_ship.n.01", + }, + {"name": "passport", "id": 770, "frequency": "c", "synset": "passport.n.02"}, + {"name": "pastry", "id": 771, "frequency": "f", "synset": "pastry.n.02"}, + {"name": "patty_(food)", "id": 772, "frequency": "r", "synset": "patty.n.01"}, + {"name": "pea_(food)", "id": 773, "frequency": "c", "synset": "pea.n.01"}, + {"name": "peach", "id": 774, "frequency": "c", "synset": "peach.n.03"}, + { + "name": "peanut_butter", + "id": 775, + "frequency": "c", + "synset": "peanut_butter.n.01", + }, + {"name": "pear", "id": 776, "frequency": "f", "synset": "pear.n.01"}, + { + "name": "peeler_(tool_for_fruit_and_vegetables)", + "id": 777, + "frequency": "c", + "synset": "peeler.n.03", + }, + {"name": "wooden_leg", "id": 778, "frequency": "r", "synset": "peg.n.04"}, + {"name": "pegboard", "id": 779, "frequency": "r", "synset": "pegboard.n.01"}, + {"name": "pelican", "id": 780, "frequency": "c", "synset": "pelican.n.01"}, + {"name": "pen", "id": 781, "frequency": "f", "synset": "pen.n.01"}, + {"name": "pencil", "id": 782, "frequency": "f", "synset": "pencil.n.01"}, + {"name": "pencil_box", "id": 783, "frequency": "r", "synset": "pencil_box.n.01"}, + { + "name": "pencil_sharpener", + "id": 784, + "frequency": "r", + "synset": "pencil_sharpener.n.01", + }, + {"name": "pendulum", "id": 785, "frequency": "r", "synset": "pendulum.n.01"}, + {"name": "penguin", "id": 786, "frequency": "c", "synset": "penguin.n.01"}, + {"name": "pennant", "id": 787, "frequency": "r", "synset": "pennant.n.02"}, + {"name": "penny_(coin)", "id": 788, "frequency": "r", "synset": "penny.n.02"}, + {"name": "pepper", "id": 789, "frequency": "f", "synset": "pepper.n.03"}, + {"name": "pepper_mill", "id": 790, "frequency": "c", "synset": "pepper_mill.n.01"}, + {"name": "perfume", "id": 791, "frequency": "c", "synset": "perfume.n.02"}, + {"name": "persimmon", "id": 792, "frequency": "r", "synset": "persimmon.n.02"}, + {"name": "person", "id": 793, "frequency": "f", "synset": "person.n.01"}, + {"name": "pet", "id": 794, "frequency": "c", "synset": "pet.n.01"}, + {"name": "pew_(church_bench)", "id": 795, "frequency": "c", "synset": "pew.n.01"}, + {"name": "phonebook", "id": 796, "frequency": "r", "synset": "phonebook.n.01"}, + { + "name": "phonograph_record", + "id": 797, + "frequency": "c", + "synset": "phonograph_record.n.01", + }, + {"name": "piano", "id": 798, "frequency": "f", "synset": "piano.n.01"}, + {"name": "pickle", "id": 799, "frequency": "f", "synset": "pickle.n.01"}, + {"name": "pickup_truck", "id": 800, "frequency": "f", "synset": "pickup.n.01"}, + {"name": "pie", "id": 801, "frequency": "c", "synset": "pie.n.01"}, + {"name": "pigeon", "id": 802, "frequency": "c", "synset": "pigeon.n.01"}, + {"name": "piggy_bank", "id": 803, "frequency": "r", "synset": "piggy_bank.n.01"}, + {"name": "pillow", "id": 804, "frequency": "f", "synset": "pillow.n.01"}, + {"name": "pin_(non_jewelry)", "id": 805, "frequency": "r", "synset": "pin.n.09"}, + {"name": "pineapple", "id": 806, "frequency": "f", "synset": "pineapple.n.02"}, + {"name": "pinecone", "id": 807, "frequency": "c", "synset": "pinecone.n.01"}, + { + "name": "ping-pong_ball", + "id": 808, + "frequency": "r", + "synset": "ping-pong_ball.n.01", + }, + {"name": "pinwheel", "id": 809, "frequency": "r", "synset": "pinwheel.n.03"}, + {"name": "tobacco_pipe", "id": 810, "frequency": "r", "synset": "pipe.n.01"}, + {"name": "pipe", "id": 811, "frequency": "f", "synset": "pipe.n.02"}, + {"name": "pistol", "id": 812, "frequency": "r", "synset": "pistol.n.01"}, + {"name": "pita_(bread)", "id": 813, "frequency": "c", "synset": "pita.n.01"}, + { + "name": "pitcher_(vessel_for_liquid)", + "id": 814, + "frequency": "f", + "synset": "pitcher.n.02", + }, + {"name": "pitchfork", "id": 815, "frequency": "r", "synset": "pitchfork.n.01"}, + {"name": "pizza", "id": 816, "frequency": "f", "synset": "pizza.n.01"}, + {"name": "place_mat", "id": 817, "frequency": "f", "synset": "place_mat.n.01"}, + {"name": "plate", "id": 818, "frequency": "f", "synset": "plate.n.04"}, + {"name": "platter", "id": 819, "frequency": "c", "synset": "platter.n.01"}, + {"name": "playpen", "id": 820, "frequency": "r", "synset": "playpen.n.01"}, + {"name": "pliers", "id": 821, "frequency": "c", "synset": "pliers.n.01"}, + { + "name": "plow_(farm_equipment)", + "id": 822, + "frequency": "r", + "synset": "plow.n.01", + }, + {"name": "plume", "id": 823, "frequency": "r", "synset": "plume.n.02"}, + { + "name": "pocket_watch", + "id": 824, + "frequency": "r", + "synset": "pocket_watch.n.01", + }, + {"name": "pocketknife", "id": 825, "frequency": "c", "synset": "pocketknife.n.01"}, + { + "name": "poker_(fire_stirring_tool)", + "id": 826, + "frequency": "c", + "synset": "poker.n.01", + }, + {"name": "pole", "id": 827, "frequency": "f", "synset": "pole.n.01"}, + {"name": "polo_shirt", "id": 828, "frequency": "f", "synset": "polo_shirt.n.01"}, + {"name": "poncho", "id": 829, "frequency": "r", "synset": "poncho.n.01"}, + {"name": "pony", "id": 830, "frequency": "c", "synset": "pony.n.05"}, + {"name": "pool_table", "id": 831, "frequency": "r", "synset": "pool_table.n.01"}, + {"name": "pop_(soda)", "id": 832, "frequency": "f", "synset": "pop.n.02"}, + {"name": "postbox_(public)", "id": 833, "frequency": "c", "synset": "postbox.n.01"}, + {"name": "postcard", "id": 834, "frequency": "c", "synset": "postcard.n.01"}, + {"name": "poster", "id": 835, "frequency": "f", "synset": "poster.n.01"}, + {"name": "pot", "id": 836, "frequency": "f", "synset": "pot.n.01"}, + {"name": "flowerpot", "id": 837, "frequency": "f", "synset": "pot.n.04"}, + {"name": "potato", "id": 838, "frequency": "f", "synset": "potato.n.01"}, + {"name": "potholder", "id": 839, "frequency": "c", "synset": "potholder.n.01"}, + {"name": "pottery", "id": 840, "frequency": "c", "synset": "pottery.n.01"}, + {"name": "pouch", "id": 841, "frequency": "c", "synset": "pouch.n.01"}, + { + "name": "power_shovel", + "id": 842, + "frequency": "c", + "synset": "power_shovel.n.01", + }, + {"name": "prawn", "id": 843, "frequency": "c", "synset": "prawn.n.01"}, + {"name": "pretzel", "id": 844, "frequency": "c", "synset": "pretzel.n.01"}, + {"name": "printer", "id": 845, "frequency": "f", "synset": "printer.n.03"}, + { + "name": "projectile_(weapon)", + "id": 846, + "frequency": "c", + "synset": "projectile.n.01", + }, + {"name": "projector", "id": 847, "frequency": "c", "synset": "projector.n.02"}, + {"name": "propeller", "id": 848, "frequency": "f", "synset": "propeller.n.01"}, + {"name": "prune", "id": 849, "frequency": "r", "synset": "prune.n.01"}, + {"name": "pudding", "id": 850, "frequency": "r", "synset": "pudding.n.01"}, + {"name": "puffer_(fish)", "id": 851, "frequency": "r", "synset": "puffer.n.02"}, + {"name": "puffin", "id": 852, "frequency": "r", "synset": "puffin.n.01"}, + {"name": "pug-dog", "id": 853, "frequency": "r", "synset": "pug.n.01"}, + {"name": "pumpkin", "id": 854, "frequency": "c", "synset": "pumpkin.n.02"}, + {"name": "puncher", "id": 855, "frequency": "r", "synset": "punch.n.03"}, + {"name": "puppet", "id": 856, "frequency": "r", "synset": "puppet.n.01"}, + {"name": "puppy", "id": 857, "frequency": "c", "synset": "puppy.n.01"}, + {"name": "quesadilla", "id": 858, "frequency": "r", "synset": "quesadilla.n.01"}, + {"name": "quiche", "id": 859, "frequency": "r", "synset": "quiche.n.02"}, + {"name": "quilt", "id": 860, "frequency": "f", "synset": "quilt.n.01"}, + {"name": "rabbit", "id": 861, "frequency": "c", "synset": "rabbit.n.01"}, + {"name": "race_car", "id": 862, "frequency": "r", "synset": "racer.n.02"}, + {"name": "racket", "id": 863, "frequency": "c", "synset": "racket.n.04"}, + {"name": "radar", "id": 864, "frequency": "r", "synset": "radar.n.01"}, + {"name": "radiator", "id": 865, "frequency": "f", "synset": "radiator.n.03"}, + { + "name": "radio_receiver", + "id": 866, + "frequency": "c", + "synset": "radio_receiver.n.01", + }, + {"name": "radish", "id": 867, "frequency": "c", "synset": "radish.n.03"}, + {"name": "raft", "id": 868, "frequency": "c", "synset": "raft.n.01"}, + {"name": "rag_doll", "id": 869, "frequency": "r", "synset": "rag_doll.n.01"}, + {"name": "raincoat", "id": 870, "frequency": "c", "synset": "raincoat.n.01"}, + {"name": "ram_(animal)", "id": 871, "frequency": "c", "synset": "ram.n.05"}, + {"name": "raspberry", "id": 872, "frequency": "c", "synset": "raspberry.n.02"}, + {"name": "rat", "id": 873, "frequency": "r", "synset": "rat.n.01"}, + {"name": "razorblade", "id": 874, "frequency": "c", "synset": "razorblade.n.01"}, + {"name": "reamer_(juicer)", "id": 875, "frequency": "c", "synset": "reamer.n.01"}, + { + "name": "rearview_mirror", + "id": 876, + "frequency": "f", + "synset": "rearview_mirror.n.01", + }, + {"name": "receipt", "id": 877, "frequency": "c", "synset": "receipt.n.02"}, + {"name": "recliner", "id": 878, "frequency": "c", "synset": "recliner.n.01"}, + { + "name": "record_player", + "id": 879, + "frequency": "c", + "synset": "record_player.n.01", + }, + {"name": "reflector", "id": 880, "frequency": "f", "synset": "reflector.n.01"}, + { + "name": "remote_control", + "id": 881, + "frequency": "f", + "synset": "remote_control.n.01", + }, + {"name": "rhinoceros", "id": 882, "frequency": "c", "synset": "rhinoceros.n.01"}, + {"name": "rib_(food)", "id": 883, "frequency": "r", "synset": "rib.n.03"}, + {"name": "rifle", "id": 884, "frequency": "c", "synset": "rifle.n.01"}, + {"name": "ring", "id": 885, "frequency": "f", "synset": "ring.n.08"}, + {"name": "river_boat", "id": 886, "frequency": "r", "synset": "river_boat.n.01"}, + {"name": "road_map", "id": 887, "frequency": "r", "synset": "road_map.n.02"}, + {"name": "robe", "id": 888, "frequency": "c", "synset": "robe.n.01"}, + { + "name": "rocking_chair", + "id": 889, + "frequency": "c", + "synset": "rocking_chair.n.01", + }, + {"name": "rodent", "id": 890, "frequency": "r", "synset": "rodent.n.01"}, + { + "name": "roller_skate", + "id": 891, + "frequency": "r", + "synset": "roller_skate.n.01", + }, + {"name": "Rollerblade", "id": 892, "frequency": "r", "synset": "rollerblade.n.01"}, + {"name": "rolling_pin", "id": 893, "frequency": "c", "synset": "rolling_pin.n.01"}, + {"name": "root_beer", "id": 894, "frequency": "r", "synset": "root_beer.n.01"}, + { + "name": "router_(computer_equipment)", + "id": 895, + "frequency": "c", + "synset": "router.n.02", + }, + {"name": "rubber_band", "id": 896, "frequency": "f", "synset": "rubber_band.n.01"}, + {"name": "runner_(carpet)", "id": 897, "frequency": "c", "synset": "runner.n.08"}, + {"name": "plastic_bag", "id": 898, "frequency": "f", "synset": "sack.n.01"}, + { + "name": "saddle_(on_an_animal)", + "id": 899, + "frequency": "f", + "synset": "saddle.n.01", + }, + { + "name": "saddle_blanket", + "id": 900, + "frequency": "f", + "synset": "saddle_blanket.n.01", + }, + {"name": "saddlebag", "id": 901, "frequency": "c", "synset": "saddlebag.n.01"}, + {"name": "safety_pin", "id": 902, "frequency": "r", "synset": "safety_pin.n.01"}, + {"name": "sail", "id": 903, "frequency": "f", "synset": "sail.n.01"}, + {"name": "salad", "id": 904, "frequency": "f", "synset": "salad.n.01"}, + {"name": "salad_plate", "id": 905, "frequency": "r", "synset": "salad_plate.n.01"}, + {"name": "salami", "id": 906, "frequency": "c", "synset": "salami.n.01"}, + {"name": "salmon_(fish)", "id": 907, "frequency": "c", "synset": "salmon.n.01"}, + {"name": "salmon_(food)", "id": 908, "frequency": "r", "synset": "salmon.n.03"}, + {"name": "salsa", "id": 909, "frequency": "c", "synset": "salsa.n.01"}, + {"name": "saltshaker", "id": 910, "frequency": "f", "synset": "saltshaker.n.01"}, + { + "name": "sandal_(type_of_shoe)", + "id": 911, + "frequency": "f", + "synset": "sandal.n.01", + }, + {"name": "sandwich", "id": 912, "frequency": "f", "synset": "sandwich.n.01"}, + {"name": "satchel", "id": 913, "frequency": "r", "synset": "satchel.n.01"}, + {"name": "saucepan", "id": 914, "frequency": "r", "synset": "saucepan.n.01"}, + {"name": "saucer", "id": 915, "frequency": "f", "synset": "saucer.n.02"}, + {"name": "sausage", "id": 916, "frequency": "f", "synset": "sausage.n.01"}, + {"name": "sawhorse", "id": 917, "frequency": "r", "synset": "sawhorse.n.01"}, + {"name": "saxophone", "id": 918, "frequency": "r", "synset": "sax.n.02"}, + { + "name": "scale_(measuring_instrument)", + "id": 919, + "frequency": "f", + "synset": "scale.n.07", + }, + {"name": "scarecrow", "id": 920, "frequency": "r", "synset": "scarecrow.n.01"}, + {"name": "scarf", "id": 921, "frequency": "f", "synset": "scarf.n.01"}, + {"name": "school_bus", "id": 922, "frequency": "c", "synset": "school_bus.n.01"}, + {"name": "scissors", "id": 923, "frequency": "f", "synset": "scissors.n.01"}, + {"name": "scoreboard", "id": 924, "frequency": "f", "synset": "scoreboard.n.01"}, + {"name": "scraper", "id": 925, "frequency": "r", "synset": "scraper.n.01"}, + {"name": "screwdriver", "id": 926, "frequency": "c", "synset": "screwdriver.n.01"}, + { + "name": "scrubbing_brush", + "id": 927, + "frequency": "f", + "synset": "scrub_brush.n.01", + }, + {"name": "sculpture", "id": 928, "frequency": "c", "synset": "sculpture.n.01"}, + {"name": "seabird", "id": 929, "frequency": "c", "synset": "seabird.n.01"}, + {"name": "seahorse", "id": 930, "frequency": "c", "synset": "seahorse.n.02"}, + {"name": "seaplane", "id": 931, "frequency": "r", "synset": "seaplane.n.01"}, + {"name": "seashell", "id": 932, "frequency": "c", "synset": "seashell.n.01"}, + { + "name": "sewing_machine", + "id": 933, + "frequency": "c", + "synset": "sewing_machine.n.01", + }, + {"name": "shaker", "id": 934, "frequency": "c", "synset": "shaker.n.03"}, + {"name": "shampoo", "id": 935, "frequency": "c", "synset": "shampoo.n.01"}, + {"name": "shark", "id": 936, "frequency": "c", "synset": "shark.n.01"}, + {"name": "sharpener", "id": 937, "frequency": "r", "synset": "sharpener.n.01"}, + {"name": "Sharpie", "id": 938, "frequency": "r", "synset": "sharpie.n.03"}, + {"name": "shaver_(electric)", "id": 939, "frequency": "r", "synset": "shaver.n.03"}, + { + "name": "shaving_cream", + "id": 940, + "frequency": "c", + "synset": "shaving_cream.n.01", + }, + {"name": "shawl", "id": 941, "frequency": "r", "synset": "shawl.n.01"}, + {"name": "shears", "id": 942, "frequency": "r", "synset": "shears.n.01"}, + {"name": "sheep", "id": 943, "frequency": "f", "synset": "sheep.n.01"}, + { + "name": "shepherd_dog", + "id": 944, + "frequency": "r", + "synset": "shepherd_dog.n.01", + }, + {"name": "sherbert", "id": 945, "frequency": "r", "synset": "sherbert.n.01"}, + {"name": "shield", "id": 946, "frequency": "c", "synset": "shield.n.02"}, + {"name": "shirt", "id": 947, "frequency": "f", "synset": "shirt.n.01"}, + {"name": "shoe", "id": 948, "frequency": "f", "synset": "shoe.n.01"}, + { + "name": "shopping_bag", + "id": 949, + "frequency": "f", + "synset": "shopping_bag.n.01", + }, + { + "name": "shopping_cart", + "id": 950, + "frequency": "c", + "synset": "shopping_cart.n.01", + }, + {"name": "short_pants", "id": 951, "frequency": "f", "synset": "short_pants.n.01"}, + {"name": "shot_glass", "id": 952, "frequency": "r", "synset": "shot_glass.n.01"}, + { + "name": "shoulder_bag", + "id": 953, + "frequency": "f", + "synset": "shoulder_bag.n.01", + }, + {"name": "shovel", "id": 954, "frequency": "c", "synset": "shovel.n.01"}, + {"name": "shower_head", "id": 955, "frequency": "f", "synset": "shower.n.01"}, + {"name": "shower_cap", "id": 956, "frequency": "r", "synset": "shower_cap.n.01"}, + { + "name": "shower_curtain", + "id": 957, + "frequency": "f", + "synset": "shower_curtain.n.01", + }, + { + "name": "shredder_(for_paper)", + "id": 958, + "frequency": "r", + "synset": "shredder.n.01", + }, + {"name": "signboard", "id": 959, "frequency": "f", "synset": "signboard.n.01"}, + {"name": "silo", "id": 960, "frequency": "c", "synset": "silo.n.01"}, + {"name": "sink", "id": 961, "frequency": "f", "synset": "sink.n.01"}, + {"name": "skateboard", "id": 962, "frequency": "f", "synset": "skateboard.n.01"}, + {"name": "skewer", "id": 963, "frequency": "c", "synset": "skewer.n.01"}, + {"name": "ski", "id": 964, "frequency": "f", "synset": "ski.n.01"}, + {"name": "ski_boot", "id": 965, "frequency": "f", "synset": "ski_boot.n.01"}, + {"name": "ski_parka", "id": 966, "frequency": "f", "synset": "ski_parka.n.01"}, + {"name": "ski_pole", "id": 967, "frequency": "f", "synset": "ski_pole.n.01"}, + {"name": "skirt", "id": 968, "frequency": "f", "synset": "skirt.n.02"}, + {"name": "skullcap", "id": 969, "frequency": "r", "synset": "skullcap.n.01"}, + {"name": "sled", "id": 970, "frequency": "c", "synset": "sled.n.01"}, + { + "name": "sleeping_bag", + "id": 971, + "frequency": "c", + "synset": "sleeping_bag.n.01", + }, + {"name": "sling_(bandage)", "id": 972, "frequency": "r", "synset": "sling.n.05"}, + { + "name": "slipper_(footwear)", + "id": 973, + "frequency": "c", + "synset": "slipper.n.01", + }, + {"name": "smoothie", "id": 974, "frequency": "r", "synset": "smoothie.n.02"}, + {"name": "snake", "id": 975, "frequency": "r", "synset": "snake.n.01"}, + {"name": "snowboard", "id": 976, "frequency": "f", "synset": "snowboard.n.01"}, + {"name": "snowman", "id": 977, "frequency": "c", "synset": "snowman.n.01"}, + {"name": "snowmobile", "id": 978, "frequency": "c", "synset": "snowmobile.n.01"}, + {"name": "soap", "id": 979, "frequency": "f", "synset": "soap.n.01"}, + {"name": "soccer_ball", "id": 980, "frequency": "f", "synset": "soccer_ball.n.01"}, + {"name": "sock", "id": 981, "frequency": "f", "synset": "sock.n.01"}, + {"name": "sofa", "id": 982, "frequency": "f", "synset": "sofa.n.01"}, + {"name": "softball", "id": 983, "frequency": "r", "synset": "softball.n.01"}, + {"name": "solar_array", "id": 984, "frequency": "c", "synset": "solar_array.n.01"}, + {"name": "sombrero", "id": 985, "frequency": "r", "synset": "sombrero.n.02"}, + {"name": "soup", "id": 986, "frequency": "f", "synset": "soup.n.01"}, + {"name": "soup_bowl", "id": 987, "frequency": "r", "synset": "soup_bowl.n.01"}, + {"name": "soupspoon", "id": 988, "frequency": "c", "synset": "soupspoon.n.01"}, + {"name": "sour_cream", "id": 989, "frequency": "c", "synset": "sour_cream.n.01"}, + {"name": "soya_milk", "id": 990, "frequency": "r", "synset": "soya_milk.n.01"}, + { + "name": "space_shuttle", + "id": 991, + "frequency": "r", + "synset": "space_shuttle.n.01", + }, + { + "name": "sparkler_(fireworks)", + "id": 992, + "frequency": "r", + "synset": "sparkler.n.02", + }, + {"name": "spatula", "id": 993, "frequency": "f", "synset": "spatula.n.02"}, + {"name": "spear", "id": 994, "frequency": "r", "synset": "spear.n.01"}, + {"name": "spectacles", "id": 995, "frequency": "f", "synset": "spectacles.n.01"}, + {"name": "spice_rack", "id": 996, "frequency": "c", "synset": "spice_rack.n.01"}, + {"name": "spider", "id": 997, "frequency": "c", "synset": "spider.n.01"}, + {"name": "crawfish", "id": 998, "frequency": "r", "synset": "spiny_lobster.n.02"}, + {"name": "sponge", "id": 999, "frequency": "c", "synset": "sponge.n.01"}, + {"name": "spoon", "id": 1000, "frequency": "f", "synset": "spoon.n.01"}, + {"name": "sportswear", "id": 1001, "frequency": "c", "synset": "sportswear.n.01"}, + {"name": "spotlight", "id": 1002, "frequency": "c", "synset": "spotlight.n.02"}, + {"name": "squid_(food)", "id": 1003, "frequency": "r", "synset": "squid.n.01"}, + {"name": "squirrel", "id": 1004, "frequency": "c", "synset": "squirrel.n.01"}, + {"name": "stagecoach", "id": 1005, "frequency": "r", "synset": "stagecoach.n.01"}, + { + "name": "stapler_(stapling_machine)", + "id": 1006, + "frequency": "c", + "synset": "stapler.n.01", + }, + {"name": "starfish", "id": 1007, "frequency": "c", "synset": "starfish.n.01"}, + { + "name": "statue_(sculpture)", + "id": 1008, + "frequency": "f", + "synset": "statue.n.01", + }, + {"name": "steak_(food)", "id": 1009, "frequency": "c", "synset": "steak.n.01"}, + {"name": "steak_knife", "id": 1010, "frequency": "r", "synset": "steak_knife.n.01"}, + { + "name": "steering_wheel", + "id": 1011, + "frequency": "f", + "synset": "steering_wheel.n.01", + }, + {"name": "stepladder", "id": 1012, "frequency": "r", "synset": "step_ladder.n.01"}, + {"name": "step_stool", "id": 1013, "frequency": "c", "synset": "step_stool.n.01"}, + { + "name": "stereo_(sound_system)", + "id": 1014, + "frequency": "c", + "synset": "stereo.n.01", + }, + {"name": "stew", "id": 1015, "frequency": "r", "synset": "stew.n.02"}, + {"name": "stirrer", "id": 1016, "frequency": "r", "synset": "stirrer.n.02"}, + {"name": "stirrup", "id": 1017, "frequency": "f", "synset": "stirrup.n.01"}, + {"name": "stool", "id": 1018, "frequency": "f", "synset": "stool.n.01"}, + {"name": "stop_sign", "id": 1019, "frequency": "f", "synset": "stop_sign.n.01"}, + {"name": "brake_light", "id": 1020, "frequency": "f", "synset": "stoplight.n.01"}, + {"name": "stove", "id": 1021, "frequency": "f", "synset": "stove.n.01"}, + {"name": "strainer", "id": 1022, "frequency": "c", "synset": "strainer.n.01"}, + {"name": "strap", "id": 1023, "frequency": "f", "synset": "strap.n.01"}, + { + "name": "straw_(for_drinking)", + "id": 1024, + "frequency": "f", + "synset": "straw.n.04", + }, + {"name": "strawberry", "id": 1025, "frequency": "f", "synset": "strawberry.n.01"}, + {"name": "street_sign", "id": 1026, "frequency": "f", "synset": "street_sign.n.01"}, + {"name": "streetlight", "id": 1027, "frequency": "f", "synset": "streetlight.n.01"}, + { + "name": "string_cheese", + "id": 1028, + "frequency": "r", + "synset": "string_cheese.n.01", + }, + {"name": "stylus", "id": 1029, "frequency": "r", "synset": "stylus.n.02"}, + {"name": "subwoofer", "id": 1030, "frequency": "r", "synset": "subwoofer.n.01"}, + {"name": "sugar_bowl", "id": 1031, "frequency": "r", "synset": "sugar_bowl.n.01"}, + { + "name": "sugarcane_(plant)", + "id": 1032, + "frequency": "r", + "synset": "sugarcane.n.01", + }, + {"name": "suit_(clothing)", "id": 1033, "frequency": "f", "synset": "suit.n.01"}, + {"name": "sunflower", "id": 1034, "frequency": "c", "synset": "sunflower.n.01"}, + {"name": "sunglasses", "id": 1035, "frequency": "f", "synset": "sunglasses.n.01"}, + {"name": "sunhat", "id": 1036, "frequency": "c", "synset": "sunhat.n.01"}, + {"name": "surfboard", "id": 1037, "frequency": "f", "synset": "surfboard.n.01"}, + {"name": "sushi", "id": 1038, "frequency": "c", "synset": "sushi.n.01"}, + {"name": "mop", "id": 1039, "frequency": "c", "synset": "swab.n.02"}, + {"name": "sweat_pants", "id": 1040, "frequency": "c", "synset": "sweat_pants.n.01"}, + {"name": "sweatband", "id": 1041, "frequency": "c", "synset": "sweatband.n.02"}, + {"name": "sweater", "id": 1042, "frequency": "f", "synset": "sweater.n.01"}, + {"name": "sweatshirt", "id": 1043, "frequency": "f", "synset": "sweatshirt.n.01"}, + { + "name": "sweet_potato", + "id": 1044, + "frequency": "c", + "synset": "sweet_potato.n.02", + }, + {"name": "swimsuit", "id": 1045, "frequency": "f", "synset": "swimsuit.n.01"}, + {"name": "sword", "id": 1046, "frequency": "c", "synset": "sword.n.01"}, + {"name": "syringe", "id": 1047, "frequency": "r", "synset": "syringe.n.01"}, + {"name": "Tabasco_sauce", "id": 1048, "frequency": "r", "synset": "tabasco.n.02"}, + { + "name": "table-tennis_table", + "id": 1049, + "frequency": "r", + "synset": "table-tennis_table.n.01", + }, + {"name": "table", "id": 1050, "frequency": "f", "synset": "table.n.02"}, + {"name": "table_lamp", "id": 1051, "frequency": "c", "synset": "table_lamp.n.01"}, + {"name": "tablecloth", "id": 1052, "frequency": "f", "synset": "tablecloth.n.01"}, + {"name": "tachometer", "id": 1053, "frequency": "r", "synset": "tachometer.n.01"}, + {"name": "taco", "id": 1054, "frequency": "r", "synset": "taco.n.02"}, + {"name": "tag", "id": 1055, "frequency": "f", "synset": "tag.n.02"}, + {"name": "taillight", "id": 1056, "frequency": "f", "synset": "taillight.n.01"}, + {"name": "tambourine", "id": 1057, "frequency": "r", "synset": "tambourine.n.01"}, + {"name": "army_tank", "id": 1058, "frequency": "r", "synset": "tank.n.01"}, + { + "name": "tank_(storage_vessel)", + "id": 1059, + "frequency": "f", + "synset": "tank.n.02", + }, + { + "name": "tank_top_(clothing)", + "id": 1060, + "frequency": "f", + "synset": "tank_top.n.01", + }, + { + "name": "tape_(sticky_cloth_or_paper)", + "id": 1061, + "frequency": "f", + "synset": "tape.n.01", + }, + {"name": "tape_measure", "id": 1062, "frequency": "c", "synset": "tape.n.04"}, + {"name": "tapestry", "id": 1063, "frequency": "c", "synset": "tapestry.n.02"}, + {"name": "tarp", "id": 1064, "frequency": "f", "synset": "tarpaulin.n.01"}, + {"name": "tartan", "id": 1065, "frequency": "c", "synset": "tartan.n.01"}, + {"name": "tassel", "id": 1066, "frequency": "c", "synset": "tassel.n.01"}, + {"name": "tea_bag", "id": 1067, "frequency": "c", "synset": "tea_bag.n.01"}, + {"name": "teacup", "id": 1068, "frequency": "c", "synset": "teacup.n.02"}, + {"name": "teakettle", "id": 1069, "frequency": "c", "synset": "teakettle.n.01"}, + {"name": "teapot", "id": 1070, "frequency": "f", "synset": "teapot.n.01"}, + {"name": "teddy_bear", "id": 1071, "frequency": "f", "synset": "teddy.n.01"}, + {"name": "telephone", "id": 1072, "frequency": "f", "synset": "telephone.n.01"}, + { + "name": "telephone_booth", + "id": 1073, + "frequency": "c", + "synset": "telephone_booth.n.01", + }, + { + "name": "telephone_pole", + "id": 1074, + "frequency": "f", + "synset": "telephone_pole.n.01", + }, + { + "name": "telephoto_lens", + "id": 1075, + "frequency": "r", + "synset": "telephoto_lens.n.01", + }, + { + "name": "television_camera", + "id": 1076, + "frequency": "c", + "synset": "television_camera.n.01", + }, + { + "name": "television_set", + "id": 1077, + "frequency": "f", + "synset": "television_receiver.n.01", + }, + {"name": "tennis_ball", "id": 1078, "frequency": "f", "synset": "tennis_ball.n.01"}, + { + "name": "tennis_racket", + "id": 1079, + "frequency": "f", + "synset": "tennis_racket.n.01", + }, + {"name": "tequila", "id": 1080, "frequency": "r", "synset": "tequila.n.01"}, + {"name": "thermometer", "id": 1081, "frequency": "c", "synset": "thermometer.n.01"}, + {"name": "thermos_bottle", "id": 1082, "frequency": "c", "synset": "thermos.n.01"}, + {"name": "thermostat", "id": 1083, "frequency": "f", "synset": "thermostat.n.01"}, + {"name": "thimble", "id": 1084, "frequency": "r", "synset": "thimble.n.02"}, + {"name": "thread", "id": 1085, "frequency": "c", "synset": "thread.n.01"}, + {"name": "thumbtack", "id": 1086, "frequency": "c", "synset": "thumbtack.n.01"}, + {"name": "tiara", "id": 1087, "frequency": "c", "synset": "tiara.n.01"}, + {"name": "tiger", "id": 1088, "frequency": "c", "synset": "tiger.n.02"}, + { + "name": "tights_(clothing)", + "id": 1089, + "frequency": "c", + "synset": "tights.n.01", + }, + {"name": "timer", "id": 1090, "frequency": "c", "synset": "timer.n.01"}, + {"name": "tinfoil", "id": 1091, "frequency": "f", "synset": "tinfoil.n.01"}, + {"name": "tinsel", "id": 1092, "frequency": "c", "synset": "tinsel.n.01"}, + {"name": "tissue_paper", "id": 1093, "frequency": "f", "synset": "tissue.n.02"}, + {"name": "toast_(food)", "id": 1094, "frequency": "c", "synset": "toast.n.01"}, + {"name": "toaster", "id": 1095, "frequency": "f", "synset": "toaster.n.02"}, + { + "name": "toaster_oven", + "id": 1096, + "frequency": "f", + "synset": "toaster_oven.n.01", + }, + {"name": "toilet", "id": 1097, "frequency": "f", "synset": "toilet.n.02"}, + { + "name": "toilet_tissue", + "id": 1098, + "frequency": "f", + "synset": "toilet_tissue.n.01", + }, + {"name": "tomato", "id": 1099, "frequency": "f", "synset": "tomato.n.01"}, + {"name": "tongs", "id": 1100, "frequency": "f", "synset": "tongs.n.01"}, + {"name": "toolbox", "id": 1101, "frequency": "c", "synset": "toolbox.n.01"}, + {"name": "toothbrush", "id": 1102, "frequency": "f", "synset": "toothbrush.n.01"}, + {"name": "toothpaste", "id": 1103, "frequency": "f", "synset": "toothpaste.n.01"}, + {"name": "toothpick", "id": 1104, "frequency": "f", "synset": "toothpick.n.01"}, + {"name": "cover", "id": 1105, "frequency": "f", "synset": "top.n.09"}, + {"name": "tortilla", "id": 1106, "frequency": "c", "synset": "tortilla.n.01"}, + {"name": "tow_truck", "id": 1107, "frequency": "c", "synset": "tow_truck.n.01"}, + {"name": "towel", "id": 1108, "frequency": "f", "synset": "towel.n.01"}, + {"name": "towel_rack", "id": 1109, "frequency": "f", "synset": "towel_rack.n.01"}, + {"name": "toy", "id": 1110, "frequency": "f", "synset": "toy.n.03"}, + { + "name": "tractor_(farm_equipment)", + "id": 1111, + "frequency": "c", + "synset": "tractor.n.01", + }, + { + "name": "traffic_light", + "id": 1112, + "frequency": "f", + "synset": "traffic_light.n.01", + }, + {"name": "dirt_bike", "id": 1113, "frequency": "c", "synset": "trail_bike.n.01"}, + { + "name": "trailer_truck", + "id": 1114, + "frequency": "f", + "synset": "trailer_truck.n.01", + }, + { + "name": "train_(railroad_vehicle)", + "id": 1115, + "frequency": "f", + "synset": "train.n.01", + }, + {"name": "trampoline", "id": 1116, "frequency": "r", "synset": "trampoline.n.01"}, + {"name": "tray", "id": 1117, "frequency": "f", "synset": "tray.n.01"}, + {"name": "trench_coat", "id": 1118, "frequency": "r", "synset": "trench_coat.n.01"}, + { + "name": "triangle_(musical_instrument)", + "id": 1119, + "frequency": "r", + "synset": "triangle.n.05", + }, + {"name": "tricycle", "id": 1120, "frequency": "c", "synset": "tricycle.n.01"}, + {"name": "tripod", "id": 1121, "frequency": "f", "synset": "tripod.n.01"}, + {"name": "trousers", "id": 1122, "frequency": "f", "synset": "trouser.n.01"}, + {"name": "truck", "id": 1123, "frequency": "f", "synset": "truck.n.01"}, + { + "name": "truffle_(chocolate)", + "id": 1124, + "frequency": "r", + "synset": "truffle.n.03", + }, + {"name": "trunk", "id": 1125, "frequency": "c", "synset": "trunk.n.02"}, + {"name": "vat", "id": 1126, "frequency": "r", "synset": "tub.n.02"}, + {"name": "turban", "id": 1127, "frequency": "c", "synset": "turban.n.01"}, + {"name": "turkey_(food)", "id": 1128, "frequency": "c", "synset": "turkey.n.04"}, + {"name": "turnip", "id": 1129, "frequency": "r", "synset": "turnip.n.01"}, + {"name": "turtle", "id": 1130, "frequency": "c", "synset": "turtle.n.02"}, + { + "name": "turtleneck_(clothing)", + "id": 1131, + "frequency": "c", + "synset": "turtleneck.n.01", + }, + {"name": "typewriter", "id": 1132, "frequency": "c", "synset": "typewriter.n.01"}, + {"name": "umbrella", "id": 1133, "frequency": "f", "synset": "umbrella.n.01"}, + {"name": "underwear", "id": 1134, "frequency": "f", "synset": "underwear.n.01"}, + {"name": "unicycle", "id": 1135, "frequency": "r", "synset": "unicycle.n.01"}, + {"name": "urinal", "id": 1136, "frequency": "f", "synset": "urinal.n.01"}, + {"name": "urn", "id": 1137, "frequency": "c", "synset": "urn.n.01"}, + {"name": "vacuum_cleaner", "id": 1138, "frequency": "c", "synset": "vacuum.n.04"}, + {"name": "vase", "id": 1139, "frequency": "f", "synset": "vase.n.01"}, + { + "name": "vending_machine", + "id": 1140, + "frequency": "c", + "synset": "vending_machine.n.01", + }, + {"name": "vent", "id": 1141, "frequency": "f", "synset": "vent.n.01"}, + {"name": "vest", "id": 1142, "frequency": "f", "synset": "vest.n.01"}, + {"name": "videotape", "id": 1143, "frequency": "c", "synset": "videotape.n.01"}, + {"name": "vinegar", "id": 1144, "frequency": "r", "synset": "vinegar.n.01"}, + {"name": "violin", "id": 1145, "frequency": "r", "synset": "violin.n.01"}, + {"name": "vodka", "id": 1146, "frequency": "r", "synset": "vodka.n.01"}, + {"name": "volleyball", "id": 1147, "frequency": "c", "synset": "volleyball.n.02"}, + {"name": "vulture", "id": 1148, "frequency": "r", "synset": "vulture.n.01"}, + {"name": "waffle", "id": 1149, "frequency": "c", "synset": "waffle.n.01"}, + {"name": "waffle_iron", "id": 1150, "frequency": "r", "synset": "waffle_iron.n.01"}, + {"name": "wagon", "id": 1151, "frequency": "c", "synset": "wagon.n.01"}, + {"name": "wagon_wheel", "id": 1152, "frequency": "c", "synset": "wagon_wheel.n.01"}, + { + "name": "walking_stick", + "id": 1153, + "frequency": "c", + "synset": "walking_stick.n.01", + }, + {"name": "wall_clock", "id": 1154, "frequency": "c", "synset": "wall_clock.n.01"}, + {"name": "wall_socket", "id": 1155, "frequency": "f", "synset": "wall_socket.n.01"}, + {"name": "wallet", "id": 1156, "frequency": "f", "synset": "wallet.n.01"}, + {"name": "walrus", "id": 1157, "frequency": "r", "synset": "walrus.n.01"}, + {"name": "wardrobe", "id": 1158, "frequency": "r", "synset": "wardrobe.n.01"}, + {"name": "washbasin", "id": 1159, "frequency": "r", "synset": "washbasin.n.01"}, + {"name": "automatic_washer", "id": 1160, "frequency": "c", "synset": "washer.n.03"}, + {"name": "watch", "id": 1161, "frequency": "f", "synset": "watch.n.01"}, + { + "name": "water_bottle", + "id": 1162, + "frequency": "f", + "synset": "water_bottle.n.01", + }, + { + "name": "water_cooler", + "id": 1163, + "frequency": "c", + "synset": "water_cooler.n.01", + }, + { + "name": "water_faucet", + "id": 1164, + "frequency": "c", + "synset": "water_faucet.n.01", + }, + { + "name": "water_heater", + "id": 1165, + "frequency": "r", + "synset": "water_heater.n.01", + }, + {"name": "water_jug", "id": 1166, "frequency": "c", "synset": "water_jug.n.01"}, + {"name": "water_gun", "id": 1167, "frequency": "r", "synset": "water_pistol.n.01"}, + { + "name": "water_scooter", + "id": 1168, + "frequency": "c", + "synset": "water_scooter.n.01", + }, + {"name": "water_ski", "id": 1169, "frequency": "c", "synset": "water_ski.n.01"}, + {"name": "water_tower", "id": 1170, "frequency": "c", "synset": "water_tower.n.01"}, + { + "name": "watering_can", + "id": 1171, + "frequency": "c", + "synset": "watering_can.n.01", + }, + {"name": "watermelon", "id": 1172, "frequency": "f", "synset": "watermelon.n.02"}, + {"name": "weathervane", "id": 1173, "frequency": "f", "synset": "weathervane.n.01"}, + {"name": "webcam", "id": 1174, "frequency": "c", "synset": "webcam.n.01"}, + { + "name": "wedding_cake", + "id": 1175, + "frequency": "c", + "synset": "wedding_cake.n.01", + }, + { + "name": "wedding_ring", + "id": 1176, + "frequency": "c", + "synset": "wedding_ring.n.01", + }, + {"name": "wet_suit", "id": 1177, "frequency": "f", "synset": "wet_suit.n.01"}, + {"name": "wheel", "id": 1178, "frequency": "f", "synset": "wheel.n.01"}, + {"name": "wheelchair", "id": 1179, "frequency": "c", "synset": "wheelchair.n.01"}, + { + "name": "whipped_cream", + "id": 1180, + "frequency": "c", + "synset": "whipped_cream.n.01", + }, + {"name": "whistle", "id": 1181, "frequency": "c", "synset": "whistle.n.03"}, + {"name": "wig", "id": 1182, "frequency": "c", "synset": "wig.n.01"}, + {"name": "wind_chime", "id": 1183, "frequency": "c", "synset": "wind_chime.n.01"}, + {"name": "windmill", "id": 1184, "frequency": "c", "synset": "windmill.n.01"}, + { + "name": "window_box_(for_plants)", + "id": 1185, + "frequency": "c", + "synset": "window_box.n.01", + }, + { + "name": "windshield_wiper", + "id": 1186, + "frequency": "f", + "synset": "windshield_wiper.n.01", + }, + {"name": "windsock", "id": 1187, "frequency": "c", "synset": "windsock.n.01"}, + {"name": "wine_bottle", "id": 1188, "frequency": "f", "synset": "wine_bottle.n.01"}, + {"name": "wine_bucket", "id": 1189, "frequency": "c", "synset": "wine_bucket.n.01"}, + {"name": "wineglass", "id": 1190, "frequency": "f", "synset": "wineglass.n.01"}, + { + "name": "blinder_(for_horses)", + "id": 1191, + "frequency": "f", + "synset": "winker.n.02", + }, + {"name": "wok", "id": 1192, "frequency": "c", "synset": "wok.n.01"}, + {"name": "wolf", "id": 1193, "frequency": "r", "synset": "wolf.n.01"}, + { + "name": "wooden_spoon", + "id": 1194, + "frequency": "c", + "synset": "wooden_spoon.n.02", + }, + {"name": "wreath", "id": 1195, "frequency": "c", "synset": "wreath.n.01"}, + {"name": "wrench", "id": 1196, "frequency": "c", "synset": "wrench.n.03"}, + {"name": "wristband", "id": 1197, "frequency": "f", "synset": "wristband.n.01"}, + {"name": "wristlet", "id": 1198, "frequency": "f", "synset": "wristlet.n.01"}, + {"name": "yacht", "id": 1199, "frequency": "c", "synset": "yacht.n.01"}, + {"name": "yogurt", "id": 1200, "frequency": "c", "synset": "yogurt.n.01"}, + { + "name": "yoke_(animal_equipment)", + "id": 1201, + "frequency": "c", + "synset": "yoke.n.07", + }, + {"name": "zebra", "id": 1202, "frequency": "f", "synset": "zebra.n.01"}, + {"name": "zucchini", "id": 1203, "frequency": "c", "synset": "zucchini.n.02"}, + {"id": 1204, "synset": "organism.n.01", "name": "organism"}, + {"id": 1205, "synset": "benthos.n.02", "name": "benthos"}, + {"id": 1206, "synset": "heterotroph.n.01", "name": "heterotroph"}, + {"id": 1207, "synset": "cell.n.02", "name": "cell"}, + {"id": 1208, "synset": "animal.n.01", "name": "animal"}, + {"id": 1209, "synset": "plant.n.02", "name": "plant"}, + {"id": 1210, "synset": "food.n.01", "name": "food"}, + {"id": 1211, "synset": "artifact.n.01", "name": "artifact"}, + {"id": 1212, "synset": "hop.n.01", "name": "hop"}, + {"id": 1213, "synset": "check-in.n.01", "name": "check-in"}, + {"id": 1214, "synset": "dressage.n.01", "name": "dressage"}, + {"id": 1215, "synset": "curvet.n.01", "name": "curvet"}, + {"id": 1216, "synset": "piaffe.n.01", "name": "piaffe"}, + {"id": 1217, "synset": "funambulism.n.01", "name": "funambulism"}, + {"id": 1218, "synset": "rock_climbing.n.01", "name": "rock_climbing"}, + {"id": 1219, "synset": "contact_sport.n.01", "name": "contact_sport"}, + {"id": 1220, "synset": "outdoor_sport.n.01", "name": "outdoor_sport"}, + {"id": 1221, "synset": "gymnastics.n.01", "name": "gymnastics"}, + {"id": 1222, "synset": "acrobatics.n.01", "name": "acrobatics"}, + {"id": 1223, "synset": "track_and_field.n.01", "name": "track_and_field"}, + {"id": 1224, "synset": "track.n.11", "name": "track"}, + {"id": 1225, "synset": "jumping.n.01", "name": "jumping"}, + {"id": 1226, "synset": "broad_jump.n.02", "name": "broad_jump"}, + {"id": 1227, "synset": "high_jump.n.02", "name": "high_jump"}, + {"id": 1228, "synset": "fosbury_flop.n.01", "name": "Fosbury_flop"}, + {"id": 1229, "synset": "skiing.n.01", "name": "skiing"}, + {"id": 1230, "synset": "cross-country_skiing.n.01", "name": "cross-country_skiing"}, + {"id": 1231, "synset": "ski_jumping.n.01", "name": "ski_jumping"}, + {"id": 1232, "synset": "water_sport.n.01", "name": "water_sport"}, + {"id": 1233, "synset": "swimming.n.01", "name": "swimming"}, + {"id": 1234, "synset": "bathe.n.01", "name": "bathe"}, + {"id": 1235, "synset": "dip.n.08", "name": "dip"}, + {"id": 1236, "synset": "dive.n.02", "name": "dive"}, + {"id": 1237, "synset": "floating.n.01", "name": "floating"}, + {"id": 1238, "synset": "dead-man's_float.n.01", "name": "dead-man's_float"}, + {"id": 1239, "synset": "belly_flop.n.01", "name": "belly_flop"}, + {"id": 1240, "synset": "cliff_diving.n.01", "name": "cliff_diving"}, + {"id": 1241, "synset": "flip.n.05", "name": "flip"}, + {"id": 1242, "synset": "gainer.n.03", "name": "gainer"}, + {"id": 1243, "synset": "half_gainer.n.01", "name": "half_gainer"}, + {"id": 1244, "synset": "jackknife.n.02", "name": "jackknife"}, + {"id": 1245, "synset": "swan_dive.n.01", "name": "swan_dive"}, + {"id": 1246, "synset": "skin_diving.n.01", "name": "skin_diving"}, + {"id": 1247, "synset": "scuba_diving.n.01", "name": "scuba_diving"}, + {"id": 1248, "synset": "snorkeling.n.01", "name": "snorkeling"}, + {"id": 1249, "synset": "surfing.n.01", "name": "surfing"}, + {"id": 1250, "synset": "water-skiing.n.01", "name": "water-skiing"}, + {"id": 1251, "synset": "rowing.n.01", "name": "rowing"}, + {"id": 1252, "synset": "sculling.n.01", "name": "sculling"}, + {"id": 1253, "synset": "boxing.n.01", "name": "boxing"}, + {"id": 1254, "synset": "professional_boxing.n.01", "name": "professional_boxing"}, + {"id": 1255, "synset": "in-fighting.n.02", "name": "in-fighting"}, + {"id": 1256, "synset": "fight.n.05", "name": "fight"}, + {"id": 1257, "synset": "rope-a-dope.n.01", "name": "rope-a-dope"}, + {"id": 1258, "synset": "spar.n.03", "name": "spar"}, + {"id": 1259, "synset": "archery.n.01", "name": "archery"}, + {"id": 1260, "synset": "sledding.n.01", "name": "sledding"}, + {"id": 1261, "synset": "tobogganing.n.01", "name": "tobogganing"}, + {"id": 1262, "synset": "luging.n.01", "name": "luging"}, + {"id": 1263, "synset": "bobsledding.n.01", "name": "bobsledding"}, + {"id": 1264, "synset": "wrestling.n.02", "name": "wrestling"}, + { + "id": 1265, + "synset": "greco-roman_wrestling.n.01", + "name": "Greco-Roman_wrestling", + }, + { + "id": 1266, + "synset": "professional_wrestling.n.01", + "name": "professional_wrestling", + }, + {"id": 1267, "synset": "sumo.n.01", "name": "sumo"}, + {"id": 1268, "synset": "skating.n.01", "name": "skating"}, + {"id": 1269, "synset": "ice_skating.n.01", "name": "ice_skating"}, + {"id": 1270, "synset": "figure_skating.n.01", "name": "figure_skating"}, + {"id": 1271, "synset": "rollerblading.n.01", "name": "rollerblading"}, + {"id": 1272, "synset": "roller_skating.n.01", "name": "roller_skating"}, + {"id": 1273, "synset": "skateboarding.n.01", "name": "skateboarding"}, + {"id": 1274, "synset": "speed_skating.n.01", "name": "speed_skating"}, + {"id": 1275, "synset": "racing.n.01", "name": "racing"}, + {"id": 1276, "synset": "auto_racing.n.01", "name": "auto_racing"}, + {"id": 1277, "synset": "boat_racing.n.01", "name": "boat_racing"}, + {"id": 1278, "synset": "hydroplane_racing.n.01", "name": "hydroplane_racing"}, + {"id": 1279, "synset": "camel_racing.n.01", "name": "camel_racing"}, + {"id": 1280, "synset": "greyhound_racing.n.01", "name": "greyhound_racing"}, + {"id": 1281, "synset": "horse_racing.n.01", "name": "horse_racing"}, + {"id": 1282, "synset": "riding.n.01", "name": "riding"}, + {"id": 1283, "synset": "equestrian_sport.n.01", "name": "equestrian_sport"}, + {"id": 1284, "synset": "pony-trekking.n.01", "name": "pony-trekking"}, + {"id": 1285, "synset": "showjumping.n.01", "name": "showjumping"}, + {"id": 1286, "synset": "cross-country_riding.n.01", "name": "cross-country_riding"}, + {"id": 1287, "synset": "cycling.n.01", "name": "cycling"}, + {"id": 1288, "synset": "bicycling.n.01", "name": "bicycling"}, + {"id": 1289, "synset": "motorcycling.n.01", "name": "motorcycling"}, + {"id": 1290, "synset": "dune_cycling.n.01", "name": "dune_cycling"}, + {"id": 1291, "synset": "blood_sport.n.01", "name": "blood_sport"}, + {"id": 1292, "synset": "bullfighting.n.01", "name": "bullfighting"}, + {"id": 1293, "synset": "cockfighting.n.01", "name": "cockfighting"}, + {"id": 1294, "synset": "hunt.n.08", "name": "hunt"}, + {"id": 1295, "synset": "battue.n.01", "name": "battue"}, + {"id": 1296, "synset": "beagling.n.01", "name": "beagling"}, + {"id": 1297, "synset": "coursing.n.01", "name": "coursing"}, + {"id": 1298, "synset": "deer_hunting.n.01", "name": "deer_hunting"}, + {"id": 1299, "synset": "ducking.n.01", "name": "ducking"}, + {"id": 1300, "synset": "fox_hunting.n.01", "name": "fox_hunting"}, + {"id": 1301, "synset": "pigsticking.n.01", "name": "pigsticking"}, + {"id": 1302, "synset": "fishing.n.01", "name": "fishing"}, + {"id": 1303, "synset": "angling.n.01", "name": "angling"}, + {"id": 1304, "synset": "fly-fishing.n.01", "name": "fly-fishing"}, + {"id": 1305, "synset": "troll.n.04", "name": "troll"}, + {"id": 1306, "synset": "casting.n.03", "name": "casting"}, + {"id": 1307, "synset": "bait_casting.n.01", "name": "bait_casting"}, + {"id": 1308, "synset": "fly_casting.n.01", "name": "fly_casting"}, + {"id": 1309, "synset": "overcast.n.04", "name": "overcast"}, + {"id": 1310, "synset": "surf_casting.n.01", "name": "surf_casting"}, + {"id": 1311, "synset": "day_game.n.01", "name": "day_game"}, + {"id": 1312, "synset": "athletic_game.n.01", "name": "athletic_game"}, + {"id": 1313, "synset": "ice_hockey.n.01", "name": "ice_hockey"}, + {"id": 1314, "synset": "tetherball.n.01", "name": "tetherball"}, + {"id": 1315, "synset": "water_polo.n.01", "name": "water_polo"}, + {"id": 1316, "synset": "outdoor_game.n.01", "name": "outdoor_game"}, + {"id": 1317, "synset": "golf.n.01", "name": "golf"}, + {"id": 1318, "synset": "professional_golf.n.01", "name": "professional_golf"}, + {"id": 1319, "synset": "round_of_golf.n.01", "name": "round_of_golf"}, + {"id": 1320, "synset": "medal_play.n.01", "name": "medal_play"}, + {"id": 1321, "synset": "match_play.n.01", "name": "match_play"}, + {"id": 1322, "synset": "miniature_golf.n.01", "name": "miniature_golf"}, + {"id": 1323, "synset": "croquet.n.01", "name": "croquet"}, + {"id": 1324, "synset": "quoits.n.01", "name": "quoits"}, + {"id": 1325, "synset": "shuffleboard.n.01", "name": "shuffleboard"}, + {"id": 1326, "synset": "field_game.n.01", "name": "field_game"}, + {"id": 1327, "synset": "field_hockey.n.01", "name": "field_hockey"}, + {"id": 1328, "synset": "shinny.n.01", "name": "shinny"}, + {"id": 1329, "synset": "football.n.01", "name": "football"}, + {"id": 1330, "synset": "american_football.n.01", "name": "American_football"}, + { + "id": 1331, + "synset": "professional_football.n.01", + "name": "professional_football", + }, + {"id": 1332, "synset": "touch_football.n.01", "name": "touch_football"}, + {"id": 1333, "synset": "hurling.n.01", "name": "hurling"}, + {"id": 1334, "synset": "rugby.n.01", "name": "rugby"}, + {"id": 1335, "synset": "ball_game.n.01", "name": "ball_game"}, + {"id": 1336, "synset": "baseball.n.01", "name": "baseball"}, + {"id": 1337, "synset": "ball.n.11", "name": "ball"}, + { + "id": 1338, + "synset": "professional_baseball.n.01", + "name": "professional_baseball", + }, + {"id": 1339, "synset": "hardball.n.02", "name": "hardball"}, + {"id": 1340, "synset": "perfect_game.n.01", "name": "perfect_game"}, + {"id": 1341, "synset": "no-hit_game.n.01", "name": "no-hit_game"}, + {"id": 1342, "synset": "one-hitter.n.01", "name": "one-hitter"}, + {"id": 1343, "synset": "two-hitter.n.01", "name": "two-hitter"}, + {"id": 1344, "synset": "three-hitter.n.01", "name": "three-hitter"}, + {"id": 1345, "synset": "four-hitter.n.01", "name": "four-hitter"}, + {"id": 1346, "synset": "five-hitter.n.01", "name": "five-hitter"}, + {"id": 1347, "synset": "softball.n.02", "name": "softball"}, + {"id": 1348, "synset": "rounders.n.01", "name": "rounders"}, + {"id": 1349, "synset": "stickball.n.01", "name": "stickball"}, + {"id": 1350, "synset": "cricket.n.02", "name": "cricket"}, + {"id": 1351, "synset": "lacrosse.n.01", "name": "lacrosse"}, + {"id": 1352, "synset": "polo.n.02", "name": "polo"}, + {"id": 1353, "synset": "pushball.n.01", "name": "pushball"}, + {"id": 1354, "synset": "soccer.n.01", "name": "soccer"}, + {"id": 1355, "synset": "court_game.n.01", "name": "court_game"}, + {"id": 1356, "synset": "handball.n.02", "name": "handball"}, + {"id": 1357, "synset": "racquetball.n.02", "name": "racquetball"}, + {"id": 1358, "synset": "fives.n.01", "name": "fives"}, + {"id": 1359, "synset": "squash.n.03", "name": "squash"}, + {"id": 1360, "synset": "volleyball.n.01", "name": "volleyball"}, + {"id": 1361, "synset": "jai_alai.n.01", "name": "jai_alai"}, + {"id": 1362, "synset": "badminton.n.01", "name": "badminton"}, + {"id": 1363, "synset": "battledore.n.02", "name": "battledore"}, + {"id": 1364, "synset": "basketball.n.01", "name": "basketball"}, + { + "id": 1365, + "synset": "professional_basketball.n.01", + "name": "professional_basketball", + }, + {"id": 1366, "synset": "deck_tennis.n.01", "name": "deck_tennis"}, + {"id": 1367, "synset": "netball.n.01", "name": "netball"}, + {"id": 1368, "synset": "tennis.n.01", "name": "tennis"}, + {"id": 1369, "synset": "professional_tennis.n.01", "name": "professional_tennis"}, + {"id": 1370, "synset": "singles.n.02", "name": "singles"}, + {"id": 1371, "synset": "singles.n.01", "name": "singles"}, + {"id": 1372, "synset": "doubles.n.02", "name": "doubles"}, + {"id": 1373, "synset": "doubles.n.01", "name": "doubles"}, + {"id": 1374, "synset": "royal_tennis.n.01", "name": "royal_tennis"}, + {"id": 1375, "synset": "pallone.n.01", "name": "pallone"}, + {"id": 1376, "synset": "sport.n.01", "name": "sport"}, + {"id": 1377, "synset": "clasp.n.02", "name": "clasp"}, + {"id": 1378, "synset": "judo.n.01", "name": "judo"}, + {"id": 1379, "synset": "team_sport.n.01", "name": "team_sport"}, + {"id": 1380, "synset": "last_supper.n.01", "name": "Last_Supper"}, + {"id": 1381, "synset": "seder.n.01", "name": "Seder"}, + {"id": 1382, "synset": "camping.n.01", "name": "camping"}, + {"id": 1383, "synset": "pest.n.04", "name": "pest"}, + {"id": 1384, "synset": "critter.n.01", "name": "critter"}, + {"id": 1385, "synset": "creepy-crawly.n.01", "name": "creepy-crawly"}, + {"id": 1386, "synset": "darter.n.02", "name": "darter"}, + {"id": 1387, "synset": "peeper.n.03", "name": "peeper"}, + {"id": 1388, "synset": "homeotherm.n.01", "name": "homeotherm"}, + {"id": 1389, "synset": "poikilotherm.n.01", "name": "poikilotherm"}, + {"id": 1390, "synset": "range_animal.n.01", "name": "range_animal"}, + {"id": 1391, "synset": "scavenger.n.03", "name": "scavenger"}, + {"id": 1392, "synset": "bottom-feeder.n.02", "name": "bottom-feeder"}, + {"id": 1393, "synset": "bottom-feeder.n.01", "name": "bottom-feeder"}, + {"id": 1394, "synset": "work_animal.n.01", "name": "work_animal"}, + {"id": 1395, "synset": "beast_of_burden.n.01", "name": "beast_of_burden"}, + {"id": 1396, "synset": "draft_animal.n.01", "name": "draft_animal"}, + {"id": 1397, "synset": "pack_animal.n.01", "name": "pack_animal"}, + {"id": 1398, "synset": "domestic_animal.n.01", "name": "domestic_animal"}, + {"id": 1399, "synset": "feeder.n.01", "name": "feeder"}, + {"id": 1400, "synset": "feeder.n.06", "name": "feeder"}, + {"id": 1401, "synset": "stocker.n.01", "name": "stocker"}, + {"id": 1402, "synset": "hatchling.n.01", "name": "hatchling"}, + {"id": 1403, "synset": "head.n.02", "name": "head"}, + {"id": 1404, "synset": "migrator.n.02", "name": "migrator"}, + {"id": 1405, "synset": "molter.n.01", "name": "molter"}, + {"id": 1406, "synset": "stayer.n.01", "name": "stayer"}, + {"id": 1407, "synset": "stunt.n.02", "name": "stunt"}, + {"id": 1408, "synset": "marine_animal.n.01", "name": "marine_animal"}, + {"id": 1409, "synset": "by-catch.n.01", "name": "by-catch"}, + {"id": 1410, "synset": "female.n.01", "name": "female"}, + {"id": 1411, "synset": "hen.n.04", "name": "hen"}, + {"id": 1412, "synset": "male.n.01", "name": "male"}, + {"id": 1413, "synset": "adult.n.02", "name": "adult"}, + {"id": 1414, "synset": "young.n.01", "name": "young"}, + {"id": 1415, "synset": "orphan.n.04", "name": "orphan"}, + {"id": 1416, "synset": "young_mammal.n.01", "name": "young_mammal"}, + {"id": 1417, "synset": "baby.n.06", "name": "baby"}, + {"id": 1418, "synset": "pup.n.01", "name": "pup"}, + {"id": 1419, "synset": "wolf_pup.n.01", "name": "wolf_pup"}, + {"id": 1420, "synset": "lion_cub.n.01", "name": "lion_cub"}, + {"id": 1421, "synset": "bear_cub.n.01", "name": "bear_cub"}, + {"id": 1422, "synset": "tiger_cub.n.01", "name": "tiger_cub"}, + {"id": 1423, "synset": "kit.n.03", "name": "kit"}, + {"id": 1424, "synset": "suckling.n.03", "name": "suckling"}, + {"id": 1425, "synset": "sire.n.03", "name": "sire"}, + {"id": 1426, "synset": "dam.n.03", "name": "dam"}, + {"id": 1427, "synset": "thoroughbred.n.03", "name": "thoroughbred"}, + {"id": 1428, "synset": "giant.n.01", "name": "giant"}, + {"id": 1429, "synset": "mutant.n.02", "name": "mutant"}, + {"id": 1430, "synset": "carnivore.n.02", "name": "carnivore"}, + {"id": 1431, "synset": "herbivore.n.01", "name": "herbivore"}, + {"id": 1432, "synset": "insectivore.n.02", "name": "insectivore"}, + {"id": 1433, "synset": "acrodont.n.01", "name": "acrodont"}, + {"id": 1434, "synset": "pleurodont.n.01", "name": "pleurodont"}, + {"id": 1435, "synset": "microorganism.n.01", "name": "microorganism"}, + {"id": 1436, "synset": "monohybrid.n.01", "name": "monohybrid"}, + {"id": 1437, "synset": "arbovirus.n.01", "name": "arbovirus"}, + {"id": 1438, "synset": "adenovirus.n.01", "name": "adenovirus"}, + {"id": 1439, "synset": "arenavirus.n.01", "name": "arenavirus"}, + {"id": 1440, "synset": "marburg_virus.n.01", "name": "Marburg_virus"}, + {"id": 1441, "synset": "arenaviridae.n.01", "name": "Arenaviridae"}, + {"id": 1442, "synset": "vesiculovirus.n.01", "name": "vesiculovirus"}, + {"id": 1443, "synset": "reoviridae.n.01", "name": "Reoviridae"}, + {"id": 1444, "synset": "variola_major.n.02", "name": "variola_major"}, + {"id": 1445, "synset": "viroid.n.01", "name": "viroid"}, + {"id": 1446, "synset": "coliphage.n.01", "name": "coliphage"}, + {"id": 1447, "synset": "paramyxovirus.n.01", "name": "paramyxovirus"}, + {"id": 1448, "synset": "poliovirus.n.01", "name": "poliovirus"}, + {"id": 1449, "synset": "herpes.n.02", "name": "herpes"}, + {"id": 1450, "synset": "herpes_simplex_1.n.01", "name": "herpes_simplex_1"}, + {"id": 1451, "synset": "herpes_zoster.n.02", "name": "herpes_zoster"}, + { + "id": 1452, + "synset": "herpes_varicella_zoster.n.01", + "name": "herpes_varicella_zoster", + }, + {"id": 1453, "synset": "cytomegalovirus.n.01", "name": "cytomegalovirus"}, + { + "id": 1454, + "synset": "varicella_zoster_virus.n.01", + "name": "varicella_zoster_virus", + }, + {"id": 1455, "synset": "polyoma.n.01", "name": "polyoma"}, + {"id": 1456, "synset": "lyssavirus.n.01", "name": "lyssavirus"}, + {"id": 1457, "synset": "reovirus.n.01", "name": "reovirus"}, + {"id": 1458, "synset": "rotavirus.n.01", "name": "rotavirus"}, + {"id": 1459, "synset": "moneran.n.01", "name": "moneran"}, + {"id": 1460, "synset": "archaebacteria.n.01", "name": "archaebacteria"}, + {"id": 1461, "synset": "bacteroid.n.01", "name": "bacteroid"}, + {"id": 1462, "synset": "bacillus_anthracis.n.01", "name": "Bacillus_anthracis"}, + {"id": 1463, "synset": "yersinia_pestis.n.01", "name": "Yersinia_pestis"}, + {"id": 1464, "synset": "brucella.n.01", "name": "Brucella"}, + {"id": 1465, "synset": "spirillum.n.02", "name": "spirillum"}, + {"id": 1466, "synset": "botulinus.n.01", "name": "botulinus"}, + { + "id": 1467, + "synset": "clostridium_perfringens.n.01", + "name": "clostridium_perfringens", + }, + {"id": 1468, "synset": "cyanobacteria.n.01", "name": "cyanobacteria"}, + {"id": 1469, "synset": "trichodesmium.n.01", "name": "trichodesmium"}, + {"id": 1470, "synset": "nitric_bacteria.n.01", "name": "nitric_bacteria"}, + {"id": 1471, "synset": "spirillum.n.01", "name": "spirillum"}, + {"id": 1472, "synset": "francisella.n.01", "name": "Francisella"}, + {"id": 1473, "synset": "gonococcus.n.01", "name": "gonococcus"}, + { + "id": 1474, + "synset": "corynebacterium_diphtheriae.n.01", + "name": "Corynebacterium_diphtheriae", + }, + {"id": 1475, "synset": "enteric_bacteria.n.01", "name": "enteric_bacteria"}, + {"id": 1476, "synset": "klebsiella.n.01", "name": "klebsiella"}, + { + "id": 1477, + "synset": "salmonella_typhimurium.n.01", + "name": "Salmonella_typhimurium", + }, + {"id": 1478, "synset": "typhoid_bacillus.n.01", "name": "typhoid_bacillus"}, + {"id": 1479, "synset": "nitrate_bacterium.n.01", "name": "nitrate_bacterium"}, + {"id": 1480, "synset": "nitrite_bacterium.n.01", "name": "nitrite_bacterium"}, + {"id": 1481, "synset": "actinomycete.n.01", "name": "actinomycete"}, + {"id": 1482, "synset": "streptomyces.n.01", "name": "streptomyces"}, + { + "id": 1483, + "synset": "streptomyces_erythreus.n.01", + "name": "Streptomyces_erythreus", + }, + {"id": 1484, "synset": "streptomyces_griseus.n.01", "name": "Streptomyces_griseus"}, + {"id": 1485, "synset": "tubercle_bacillus.n.01", "name": "tubercle_bacillus"}, + {"id": 1486, "synset": "pus-forming_bacteria.n.01", "name": "pus-forming_bacteria"}, + {"id": 1487, "synset": "streptobacillus.n.01", "name": "streptobacillus"}, + {"id": 1488, "synset": "myxobacteria.n.01", "name": "myxobacteria"}, + {"id": 1489, "synset": "staphylococcus.n.01", "name": "staphylococcus"}, + {"id": 1490, "synset": "diplococcus.n.01", "name": "diplococcus"}, + {"id": 1491, "synset": "pneumococcus.n.01", "name": "pneumococcus"}, + {"id": 1492, "synset": "streptococcus.n.01", "name": "streptococcus"}, + {"id": 1493, "synset": "spirochete.n.01", "name": "spirochete"}, + {"id": 1494, "synset": "planktonic_algae.n.01", "name": "planktonic_algae"}, + {"id": 1495, "synset": "zooplankton.n.01", "name": "zooplankton"}, + {"id": 1496, "synset": "parasite.n.01", "name": "parasite"}, + {"id": 1497, "synset": "endoparasite.n.01", "name": "endoparasite"}, + {"id": 1498, "synset": "ectoparasite.n.01", "name": "ectoparasite"}, + {"id": 1499, "synset": "pathogen.n.01", "name": "pathogen"}, + {"id": 1500, "synset": "commensal.n.01", "name": "commensal"}, + {"id": 1501, "synset": "myrmecophile.n.01", "name": "myrmecophile"}, + {"id": 1502, "synset": "protoctist.n.01", "name": "protoctist"}, + {"id": 1503, "synset": "protozoan.n.01", "name": "protozoan"}, + {"id": 1504, "synset": "sarcodinian.n.01", "name": "sarcodinian"}, + {"id": 1505, "synset": "heliozoan.n.01", "name": "heliozoan"}, + {"id": 1506, "synset": "endameba.n.01", "name": "endameba"}, + {"id": 1507, "synset": "ameba.n.01", "name": "ameba"}, + {"id": 1508, "synset": "globigerina.n.01", "name": "globigerina"}, + {"id": 1509, "synset": "testacean.n.01", "name": "testacean"}, + {"id": 1510, "synset": "arcella.n.01", "name": "arcella"}, + {"id": 1511, "synset": "difflugia.n.01", "name": "difflugia"}, + {"id": 1512, "synset": "ciliate.n.01", "name": "ciliate"}, + {"id": 1513, "synset": "paramecium.n.01", "name": "paramecium"}, + {"id": 1514, "synset": "stentor.n.03", "name": "stentor"}, + {"id": 1515, "synset": "alga.n.01", "name": "alga"}, + {"id": 1516, "synset": "arame.n.01", "name": "arame"}, + {"id": 1517, "synset": "seagrass.n.01", "name": "seagrass"}, + {"id": 1518, "synset": "golden_algae.n.01", "name": "golden_algae"}, + {"id": 1519, "synset": "yellow-green_algae.n.01", "name": "yellow-green_algae"}, + {"id": 1520, "synset": "brown_algae.n.01", "name": "brown_algae"}, + {"id": 1521, "synset": "kelp.n.01", "name": "kelp"}, + {"id": 1522, "synset": "fucoid.n.02", "name": "fucoid"}, + {"id": 1523, "synset": "fucoid.n.01", "name": "fucoid"}, + {"id": 1524, "synset": "fucus.n.01", "name": "fucus"}, + {"id": 1525, "synset": "bladderwrack.n.01", "name": "bladderwrack"}, + {"id": 1526, "synset": "green_algae.n.01", "name": "green_algae"}, + {"id": 1527, "synset": "pond_scum.n.01", "name": "pond_scum"}, + {"id": 1528, "synset": "chlorella.n.01", "name": "chlorella"}, + {"id": 1529, "synset": "stonewort.n.01", "name": "stonewort"}, + {"id": 1530, "synset": "desmid.n.01", "name": "desmid"}, + {"id": 1531, "synset": "sea_moss.n.02", "name": "sea_moss"}, + {"id": 1532, "synset": "eukaryote.n.01", "name": "eukaryote"}, + {"id": 1533, "synset": "prokaryote.n.01", "name": "prokaryote"}, + {"id": 1534, "synset": "zooid.n.01", "name": "zooid"}, + {"id": 1535, "synset": "leishmania.n.01", "name": "Leishmania"}, + {"id": 1536, "synset": "zoomastigote.n.01", "name": "zoomastigote"}, + {"id": 1537, "synset": "polymastigote.n.01", "name": "polymastigote"}, + {"id": 1538, "synset": "costia.n.01", "name": "costia"}, + {"id": 1539, "synset": "giardia.n.01", "name": "giardia"}, + {"id": 1540, "synset": "cryptomonad.n.01", "name": "cryptomonad"}, + {"id": 1541, "synset": "sporozoan.n.01", "name": "sporozoan"}, + {"id": 1542, "synset": "sporozoite.n.01", "name": "sporozoite"}, + {"id": 1543, "synset": "trophozoite.n.01", "name": "trophozoite"}, + {"id": 1544, "synset": "merozoite.n.01", "name": "merozoite"}, + {"id": 1545, "synset": "coccidium.n.01", "name": "coccidium"}, + {"id": 1546, "synset": "gregarine.n.01", "name": "gregarine"}, + {"id": 1547, "synset": "plasmodium.n.02", "name": "plasmodium"}, + {"id": 1548, "synset": "leucocytozoan.n.01", "name": "leucocytozoan"}, + {"id": 1549, "synset": "microsporidian.n.01", "name": "microsporidian"}, + {"id": 1550, "synset": "ostariophysi.n.01", "name": "Ostariophysi"}, + {"id": 1551, "synset": "cypriniform_fish.n.01", "name": "cypriniform_fish"}, + {"id": 1552, "synset": "loach.n.01", "name": "loach"}, + {"id": 1553, "synset": "cyprinid.n.01", "name": "cyprinid"}, + {"id": 1554, "synset": "carp.n.02", "name": "carp"}, + {"id": 1555, "synset": "domestic_carp.n.01", "name": "domestic_carp"}, + {"id": 1556, "synset": "leather_carp.n.01", "name": "leather_carp"}, + {"id": 1557, "synset": "mirror_carp.n.01", "name": "mirror_carp"}, + {"id": 1558, "synset": "european_bream.n.01", "name": "European_bream"}, + {"id": 1559, "synset": "tench.n.01", "name": "tench"}, + {"id": 1560, "synset": "dace.n.01", "name": "dace"}, + {"id": 1561, "synset": "chub.n.01", "name": "chub"}, + {"id": 1562, "synset": "shiner.n.04", "name": "shiner"}, + {"id": 1563, "synset": "common_shiner.n.01", "name": "common_shiner"}, + {"id": 1564, "synset": "roach.n.05", "name": "roach"}, + {"id": 1565, "synset": "rudd.n.01", "name": "rudd"}, + {"id": 1566, "synset": "minnow.n.01", "name": "minnow"}, + {"id": 1567, "synset": "gudgeon.n.02", "name": "gudgeon"}, + {"id": 1568, "synset": "crucian_carp.n.01", "name": "crucian_carp"}, + {"id": 1569, "synset": "electric_eel.n.01", "name": "electric_eel"}, + {"id": 1570, "synset": "catostomid.n.01", "name": "catostomid"}, + {"id": 1571, "synset": "buffalo_fish.n.01", "name": "buffalo_fish"}, + {"id": 1572, "synset": "black_buffalo.n.01", "name": "black_buffalo"}, + {"id": 1573, "synset": "hog_sucker.n.01", "name": "hog_sucker"}, + {"id": 1574, "synset": "redhorse.n.01", "name": "redhorse"}, + {"id": 1575, "synset": "cyprinodont.n.01", "name": "cyprinodont"}, + {"id": 1576, "synset": "killifish.n.01", "name": "killifish"}, + {"id": 1577, "synset": "mummichog.n.01", "name": "mummichog"}, + {"id": 1578, "synset": "striped_killifish.n.01", "name": "striped_killifish"}, + {"id": 1579, "synset": "rivulus.n.01", "name": "rivulus"}, + {"id": 1580, "synset": "flagfish.n.01", "name": "flagfish"}, + {"id": 1581, "synset": "swordtail.n.01", "name": "swordtail"}, + {"id": 1582, "synset": "guppy.n.01", "name": "guppy"}, + {"id": 1583, "synset": "topminnow.n.01", "name": "topminnow"}, + {"id": 1584, "synset": "mosquitofish.n.01", "name": "mosquitofish"}, + {"id": 1585, "synset": "platy.n.01", "name": "platy"}, + {"id": 1586, "synset": "mollie.n.01", "name": "mollie"}, + {"id": 1587, "synset": "squirrelfish.n.02", "name": "squirrelfish"}, + {"id": 1588, "synset": "reef_squirrelfish.n.01", "name": "reef_squirrelfish"}, + { + "id": 1589, + "synset": "deepwater_squirrelfish.n.01", + "name": "deepwater_squirrelfish", + }, + { + "id": 1590, + "synset": "holocentrus_ascensionis.n.01", + "name": "Holocentrus_ascensionis", + }, + {"id": 1591, "synset": "soldierfish.n.01", "name": "soldierfish"}, + {"id": 1592, "synset": "anomalops.n.01", "name": "anomalops"}, + {"id": 1593, "synset": "flashlight_fish.n.01", "name": "flashlight_fish"}, + {"id": 1594, "synset": "john_dory.n.01", "name": "John_Dory"}, + {"id": 1595, "synset": "boarfish.n.02", "name": "boarfish"}, + {"id": 1596, "synset": "boarfish.n.01", "name": "boarfish"}, + {"id": 1597, "synset": "cornetfish.n.01", "name": "cornetfish"}, + {"id": 1598, "synset": "stickleback.n.01", "name": "stickleback"}, + { + "id": 1599, + "synset": "three-spined_stickleback.n.01", + "name": "three-spined_stickleback", + }, + { + "id": 1600, + "synset": "ten-spined_stickleback.n.01", + "name": "ten-spined_stickleback", + }, + {"id": 1601, "synset": "pipefish.n.01", "name": "pipefish"}, + {"id": 1602, "synset": "dwarf_pipefish.n.01", "name": "dwarf_pipefish"}, + {"id": 1603, "synset": "deepwater_pipefish.n.01", "name": "deepwater_pipefish"}, + {"id": 1604, "synset": "snipefish.n.01", "name": "snipefish"}, + {"id": 1605, "synset": "shrimpfish.n.01", "name": "shrimpfish"}, + {"id": 1606, "synset": "trumpetfish.n.01", "name": "trumpetfish"}, + {"id": 1607, "synset": "pellicle.n.01", "name": "pellicle"}, + {"id": 1608, "synset": "embryo.n.02", "name": "embryo"}, + {"id": 1609, "synset": "fetus.n.01", "name": "fetus"}, + {"id": 1610, "synset": "abortus.n.01", "name": "abortus"}, + {"id": 1611, "synset": "spawn.n.01", "name": "spawn"}, + {"id": 1612, "synset": "blastula.n.01", "name": "blastula"}, + {"id": 1613, "synset": "blastocyst.n.01", "name": "blastocyst"}, + {"id": 1614, "synset": "gastrula.n.01", "name": "gastrula"}, + {"id": 1615, "synset": "morula.n.01", "name": "morula"}, + {"id": 1616, "synset": "yolk.n.02", "name": "yolk"}, + {"id": 1617, "synset": "chordate.n.01", "name": "chordate"}, + {"id": 1618, "synset": "cephalochordate.n.01", "name": "cephalochordate"}, + {"id": 1619, "synset": "lancelet.n.01", "name": "lancelet"}, + {"id": 1620, "synset": "tunicate.n.01", "name": "tunicate"}, + {"id": 1621, "synset": "ascidian.n.01", "name": "ascidian"}, + {"id": 1622, "synset": "sea_squirt.n.01", "name": "sea_squirt"}, + {"id": 1623, "synset": "salp.n.01", "name": "salp"}, + {"id": 1624, "synset": "doliolum.n.01", "name": "doliolum"}, + {"id": 1625, "synset": "larvacean.n.01", "name": "larvacean"}, + {"id": 1626, "synset": "appendicularia.n.01", "name": "appendicularia"}, + {"id": 1627, "synset": "ascidian_tadpole.n.01", "name": "ascidian_tadpole"}, + {"id": 1628, "synset": "vertebrate.n.01", "name": "vertebrate"}, + {"id": 1629, "synset": "amniota.n.01", "name": "Amniota"}, + {"id": 1630, "synset": "amniote.n.01", "name": "amniote"}, + {"id": 1631, "synset": "aquatic_vertebrate.n.01", "name": "aquatic_vertebrate"}, + {"id": 1632, "synset": "jawless_vertebrate.n.01", "name": "jawless_vertebrate"}, + {"id": 1633, "synset": "ostracoderm.n.01", "name": "ostracoderm"}, + {"id": 1634, "synset": "heterostracan.n.01", "name": "heterostracan"}, + {"id": 1635, "synset": "anaspid.n.01", "name": "anaspid"}, + {"id": 1636, "synset": "conodont.n.02", "name": "conodont"}, + {"id": 1637, "synset": "cyclostome.n.01", "name": "cyclostome"}, + {"id": 1638, "synset": "lamprey.n.01", "name": "lamprey"}, + {"id": 1639, "synset": "sea_lamprey.n.01", "name": "sea_lamprey"}, + {"id": 1640, "synset": "hagfish.n.01", "name": "hagfish"}, + {"id": 1641, "synset": "myxine_glutinosa.n.01", "name": "Myxine_glutinosa"}, + {"id": 1642, "synset": "eptatretus.n.01", "name": "eptatretus"}, + {"id": 1643, "synset": "gnathostome.n.01", "name": "gnathostome"}, + {"id": 1644, "synset": "placoderm.n.01", "name": "placoderm"}, + {"id": 1645, "synset": "cartilaginous_fish.n.01", "name": "cartilaginous_fish"}, + {"id": 1646, "synset": "holocephalan.n.01", "name": "holocephalan"}, + {"id": 1647, "synset": "chimaera.n.03", "name": "chimaera"}, + {"id": 1648, "synset": "rabbitfish.n.01", "name": "rabbitfish"}, + {"id": 1649, "synset": "elasmobranch.n.01", "name": "elasmobranch"}, + {"id": 1650, "synset": "cow_shark.n.01", "name": "cow_shark"}, + {"id": 1651, "synset": "mackerel_shark.n.01", "name": "mackerel_shark"}, + {"id": 1652, "synset": "porbeagle.n.01", "name": "porbeagle"}, + {"id": 1653, "synset": "mako.n.01", "name": "mako"}, + {"id": 1654, "synset": "shortfin_mako.n.01", "name": "shortfin_mako"}, + {"id": 1655, "synset": "longfin_mako.n.01", "name": "longfin_mako"}, + {"id": 1656, "synset": "bonito_shark.n.01", "name": "bonito_shark"}, + {"id": 1657, "synset": "great_white_shark.n.01", "name": "great_white_shark"}, + {"id": 1658, "synset": "basking_shark.n.01", "name": "basking_shark"}, + {"id": 1659, "synset": "thresher.n.02", "name": "thresher"}, + {"id": 1660, "synset": "carpet_shark.n.01", "name": "carpet_shark"}, + {"id": 1661, "synset": "nurse_shark.n.01", "name": "nurse_shark"}, + {"id": 1662, "synset": "sand_tiger.n.01", "name": "sand_tiger"}, + {"id": 1663, "synset": "whale_shark.n.01", "name": "whale_shark"}, + {"id": 1664, "synset": "requiem_shark.n.01", "name": "requiem_shark"}, + {"id": 1665, "synset": "bull_shark.n.01", "name": "bull_shark"}, + {"id": 1666, "synset": "sandbar_shark.n.02", "name": "sandbar_shark"}, + {"id": 1667, "synset": "blacktip_shark.n.01", "name": "blacktip_shark"}, + {"id": 1668, "synset": "whitetip_shark.n.02", "name": "whitetip_shark"}, + {"id": 1669, "synset": "dusky_shark.n.01", "name": "dusky_shark"}, + {"id": 1670, "synset": "lemon_shark.n.01", "name": "lemon_shark"}, + {"id": 1671, "synset": "blue_shark.n.01", "name": "blue_shark"}, + {"id": 1672, "synset": "tiger_shark.n.01", "name": "tiger_shark"}, + {"id": 1673, "synset": "soupfin_shark.n.01", "name": "soupfin_shark"}, + {"id": 1674, "synset": "dogfish.n.02", "name": "dogfish"}, + {"id": 1675, "synset": "smooth_dogfish.n.01", "name": "smooth_dogfish"}, + {"id": 1676, "synset": "smoothhound.n.01", "name": "smoothhound"}, + { + "id": 1677, + "synset": "american_smooth_dogfish.n.01", + "name": "American_smooth_dogfish", + }, + {"id": 1678, "synset": "florida_smoothhound.n.01", "name": "Florida_smoothhound"}, + {"id": 1679, "synset": "whitetip_shark.n.01", "name": "whitetip_shark"}, + {"id": 1680, "synset": "spiny_dogfish.n.01", "name": "spiny_dogfish"}, + { + "id": 1681, + "synset": "atlantic_spiny_dogfish.n.01", + "name": "Atlantic_spiny_dogfish", + }, + { + "id": 1682, + "synset": "pacific_spiny_dogfish.n.01", + "name": "Pacific_spiny_dogfish", + }, + {"id": 1683, "synset": "hammerhead.n.03", "name": "hammerhead"}, + {"id": 1684, "synset": "smooth_hammerhead.n.01", "name": "smooth_hammerhead"}, + {"id": 1685, "synset": "smalleye_hammerhead.n.01", "name": "smalleye_hammerhead"}, + {"id": 1686, "synset": "shovelhead.n.01", "name": "shovelhead"}, + {"id": 1687, "synset": "angel_shark.n.01", "name": "angel_shark"}, + {"id": 1688, "synset": "ray.n.07", "name": "ray"}, + {"id": 1689, "synset": "electric_ray.n.01", "name": "electric_ray"}, + {"id": 1690, "synset": "sawfish.n.01", "name": "sawfish"}, + {"id": 1691, "synset": "smalltooth_sawfish.n.01", "name": "smalltooth_sawfish"}, + {"id": 1692, "synset": "guitarfish.n.01", "name": "guitarfish"}, + {"id": 1693, "synset": "stingray.n.01", "name": "stingray"}, + {"id": 1694, "synset": "roughtail_stingray.n.01", "name": "roughtail_stingray"}, + {"id": 1695, "synset": "butterfly_ray.n.01", "name": "butterfly_ray"}, + {"id": 1696, "synset": "eagle_ray.n.01", "name": "eagle_ray"}, + {"id": 1697, "synset": "spotted_eagle_ray.n.01", "name": "spotted_eagle_ray"}, + {"id": 1698, "synset": "cownose_ray.n.01", "name": "cownose_ray"}, + {"id": 1699, "synset": "manta.n.02", "name": "manta"}, + {"id": 1700, "synset": "atlantic_manta.n.01", "name": "Atlantic_manta"}, + {"id": 1701, "synset": "devil_ray.n.01", "name": "devil_ray"}, + {"id": 1702, "synset": "skate.n.02", "name": "skate"}, + {"id": 1703, "synset": "grey_skate.n.01", "name": "grey_skate"}, + {"id": 1704, "synset": "little_skate.n.01", "name": "little_skate"}, + {"id": 1705, "synset": "thorny_skate.n.01", "name": "thorny_skate"}, + {"id": 1706, "synset": "barndoor_skate.n.01", "name": "barndoor_skate"}, + {"id": 1707, "synset": "dickeybird.n.01", "name": "dickeybird"}, + {"id": 1708, "synset": "fledgling.n.02", "name": "fledgling"}, + {"id": 1709, "synset": "nestling.n.01", "name": "nestling"}, + {"id": 1710, "synset": "cock.n.05", "name": "cock"}, + {"id": 1711, "synset": "gamecock.n.01", "name": "gamecock"}, + {"id": 1712, "synset": "hen.n.02", "name": "hen"}, + {"id": 1713, "synset": "nester.n.02", "name": "nester"}, + {"id": 1714, "synset": "night_bird.n.01", "name": "night_bird"}, + {"id": 1715, "synset": "night_raven.n.02", "name": "night_raven"}, + {"id": 1716, "synset": "bird_of_passage.n.02", "name": "bird_of_passage"}, + {"id": 1717, "synset": "archaeopteryx.n.01", "name": "archaeopteryx"}, + {"id": 1718, "synset": "archaeornis.n.01", "name": "archaeornis"}, + {"id": 1719, "synset": "ratite.n.01", "name": "ratite"}, + {"id": 1720, "synset": "carinate.n.01", "name": "carinate"}, + {"id": 1721, "synset": "cassowary.n.01", "name": "cassowary"}, + {"id": 1722, "synset": "emu.n.02", "name": "emu"}, + {"id": 1723, "synset": "kiwi.n.04", "name": "kiwi"}, + {"id": 1724, "synset": "rhea.n.03", "name": "rhea"}, + {"id": 1725, "synset": "rhea.n.02", "name": "rhea"}, + {"id": 1726, "synset": "elephant_bird.n.01", "name": "elephant_bird"}, + {"id": 1727, "synset": "moa.n.01", "name": "moa"}, + {"id": 1728, "synset": "passerine.n.01", "name": "passerine"}, + {"id": 1729, "synset": "nonpasserine_bird.n.01", "name": "nonpasserine_bird"}, + {"id": 1730, "synset": "oscine.n.01", "name": "oscine"}, + {"id": 1731, "synset": "songbird.n.01", "name": "songbird"}, + {"id": 1732, "synset": "honey_eater.n.01", "name": "honey_eater"}, + {"id": 1733, "synset": "accentor.n.01", "name": "accentor"}, + {"id": 1734, "synset": "hedge_sparrow.n.01", "name": "hedge_sparrow"}, + {"id": 1735, "synset": "lark.n.03", "name": "lark"}, + {"id": 1736, "synset": "skylark.n.01", "name": "skylark"}, + {"id": 1737, "synset": "wagtail.n.01", "name": "wagtail"}, + {"id": 1738, "synset": "pipit.n.01", "name": "pipit"}, + {"id": 1739, "synset": "meadow_pipit.n.01", "name": "meadow_pipit"}, + {"id": 1740, "synset": "finch.n.01", "name": "finch"}, + {"id": 1741, "synset": "chaffinch.n.01", "name": "chaffinch"}, + {"id": 1742, "synset": "brambling.n.01", "name": "brambling"}, + {"id": 1743, "synset": "goldfinch.n.02", "name": "goldfinch"}, + {"id": 1744, "synset": "linnet.n.02", "name": "linnet"}, + {"id": 1745, "synset": "siskin.n.01", "name": "siskin"}, + {"id": 1746, "synset": "red_siskin.n.01", "name": "red_siskin"}, + {"id": 1747, "synset": "redpoll.n.02", "name": "redpoll"}, + {"id": 1748, "synset": "redpoll.n.01", "name": "redpoll"}, + {"id": 1749, "synset": "new_world_goldfinch.n.01", "name": "New_World_goldfinch"}, + {"id": 1750, "synset": "pine_siskin.n.01", "name": "pine_siskin"}, + {"id": 1751, "synset": "house_finch.n.01", "name": "house_finch"}, + {"id": 1752, "synset": "purple_finch.n.01", "name": "purple_finch"}, + {"id": 1753, "synset": "canary.n.04", "name": "canary"}, + {"id": 1754, "synset": "common_canary.n.01", "name": "common_canary"}, + {"id": 1755, "synset": "serin.n.01", "name": "serin"}, + {"id": 1756, "synset": "crossbill.n.01", "name": "crossbill"}, + {"id": 1757, "synset": "bullfinch.n.02", "name": "bullfinch"}, + {"id": 1758, "synset": "junco.n.01", "name": "junco"}, + {"id": 1759, "synset": "dark-eyed_junco.n.01", "name": "dark-eyed_junco"}, + {"id": 1760, "synset": "new_world_sparrow.n.01", "name": "New_World_sparrow"}, + {"id": 1761, "synset": "vesper_sparrow.n.01", "name": "vesper_sparrow"}, + { + "id": 1762, + "synset": "white-throated_sparrow.n.01", + "name": "white-throated_sparrow", + }, + { + "id": 1763, + "synset": "white-crowned_sparrow.n.01", + "name": "white-crowned_sparrow", + }, + {"id": 1764, "synset": "chipping_sparrow.n.01", "name": "chipping_sparrow"}, + {"id": 1765, "synset": "field_sparrow.n.01", "name": "field_sparrow"}, + {"id": 1766, "synset": "tree_sparrow.n.02", "name": "tree_sparrow"}, + {"id": 1767, "synset": "song_sparrow.n.01", "name": "song_sparrow"}, + {"id": 1768, "synset": "swamp_sparrow.n.01", "name": "swamp_sparrow"}, + {"id": 1769, "synset": "bunting.n.02", "name": "bunting"}, + {"id": 1770, "synset": "indigo_bunting.n.01", "name": "indigo_bunting"}, + {"id": 1771, "synset": "ortolan.n.01", "name": "ortolan"}, + {"id": 1772, "synset": "reed_bunting.n.01", "name": "reed_bunting"}, + {"id": 1773, "synset": "yellowhammer.n.02", "name": "yellowhammer"}, + { + "id": 1774, + "synset": "yellow-breasted_bunting.n.01", + "name": "yellow-breasted_bunting", + }, + {"id": 1775, "synset": "snow_bunting.n.01", "name": "snow_bunting"}, + {"id": 1776, "synset": "honeycreeper.n.02", "name": "honeycreeper"}, + {"id": 1777, "synset": "banana_quit.n.01", "name": "banana_quit"}, + {"id": 1778, "synset": "sparrow.n.01", "name": "sparrow"}, + {"id": 1779, "synset": "english_sparrow.n.01", "name": "English_sparrow"}, + {"id": 1780, "synset": "tree_sparrow.n.01", "name": "tree_sparrow"}, + {"id": 1781, "synset": "grosbeak.n.01", "name": "grosbeak"}, + {"id": 1782, "synset": "evening_grosbeak.n.01", "name": "evening_grosbeak"}, + {"id": 1783, "synset": "hawfinch.n.01", "name": "hawfinch"}, + {"id": 1784, "synset": "pine_grosbeak.n.01", "name": "pine_grosbeak"}, + {"id": 1785, "synset": "cardinal.n.04", "name": "cardinal"}, + {"id": 1786, "synset": "pyrrhuloxia.n.01", "name": "pyrrhuloxia"}, + {"id": 1787, "synset": "towhee.n.01", "name": "towhee"}, + {"id": 1788, "synset": "chewink.n.01", "name": "chewink"}, + {"id": 1789, "synset": "green-tailed_towhee.n.01", "name": "green-tailed_towhee"}, + {"id": 1790, "synset": "weaver.n.02", "name": "weaver"}, + {"id": 1791, "synset": "baya.n.01", "name": "baya"}, + {"id": 1792, "synset": "whydah.n.01", "name": "whydah"}, + {"id": 1793, "synset": "java_sparrow.n.01", "name": "Java_sparrow"}, + {"id": 1794, "synset": "avadavat.n.01", "name": "avadavat"}, + {"id": 1795, "synset": "grassfinch.n.01", "name": "grassfinch"}, + {"id": 1796, "synset": "zebra_finch.n.01", "name": "zebra_finch"}, + {"id": 1797, "synset": "honeycreeper.n.01", "name": "honeycreeper"}, + {"id": 1798, "synset": "lyrebird.n.01", "name": "lyrebird"}, + {"id": 1799, "synset": "scrubbird.n.01", "name": "scrubbird"}, + {"id": 1800, "synset": "broadbill.n.04", "name": "broadbill"}, + {"id": 1801, "synset": "tyrannid.n.01", "name": "tyrannid"}, + {"id": 1802, "synset": "new_world_flycatcher.n.01", "name": "New_World_flycatcher"}, + {"id": 1803, "synset": "kingbird.n.01", "name": "kingbird"}, + {"id": 1804, "synset": "arkansas_kingbird.n.01", "name": "Arkansas_kingbird"}, + {"id": 1805, "synset": "cassin's_kingbird.n.01", "name": "Cassin's_kingbird"}, + {"id": 1806, "synset": "eastern_kingbird.n.01", "name": "eastern_kingbird"}, + {"id": 1807, "synset": "grey_kingbird.n.01", "name": "grey_kingbird"}, + {"id": 1808, "synset": "pewee.n.01", "name": "pewee"}, + {"id": 1809, "synset": "western_wood_pewee.n.01", "name": "western_wood_pewee"}, + {"id": 1810, "synset": "phoebe.n.03", "name": "phoebe"}, + { + "id": 1811, + "synset": "vermillion_flycatcher.n.01", + "name": "vermillion_flycatcher", + }, + {"id": 1812, "synset": "cotinga.n.01", "name": "cotinga"}, + {"id": 1813, "synset": "cock_of_the_rock.n.02", "name": "cock_of_the_rock"}, + {"id": 1814, "synset": "cock_of_the_rock.n.01", "name": "cock_of_the_rock"}, + {"id": 1815, "synset": "manakin.n.03", "name": "manakin"}, + {"id": 1816, "synset": "bellbird.n.01", "name": "bellbird"}, + {"id": 1817, "synset": "umbrella_bird.n.01", "name": "umbrella_bird"}, + {"id": 1818, "synset": "ovenbird.n.02", "name": "ovenbird"}, + {"id": 1819, "synset": "antbird.n.01", "name": "antbird"}, + {"id": 1820, "synset": "ant_thrush.n.01", "name": "ant_thrush"}, + {"id": 1821, "synset": "ant_shrike.n.01", "name": "ant_shrike"}, + {"id": 1822, "synset": "spotted_antbird.n.01", "name": "spotted_antbird"}, + {"id": 1823, "synset": "woodhewer.n.01", "name": "woodhewer"}, + {"id": 1824, "synset": "pitta.n.01", "name": "pitta"}, + {"id": 1825, "synset": "scissortail.n.01", "name": "scissortail"}, + {"id": 1826, "synset": "old_world_flycatcher.n.01", "name": "Old_World_flycatcher"}, + {"id": 1827, "synset": "spotted_flycatcher.n.01", "name": "spotted_flycatcher"}, + {"id": 1828, "synset": "thickhead.n.01", "name": "thickhead"}, + {"id": 1829, "synset": "thrush.n.03", "name": "thrush"}, + {"id": 1830, "synset": "missel_thrush.n.01", "name": "missel_thrush"}, + {"id": 1831, "synset": "song_thrush.n.01", "name": "song_thrush"}, + {"id": 1832, "synset": "fieldfare.n.01", "name": "fieldfare"}, + {"id": 1833, "synset": "redwing.n.02", "name": "redwing"}, + {"id": 1834, "synset": "blackbird.n.02", "name": "blackbird"}, + {"id": 1835, "synset": "ring_ouzel.n.01", "name": "ring_ouzel"}, + {"id": 1836, "synset": "robin.n.02", "name": "robin"}, + {"id": 1837, "synset": "clay-colored_robin.n.01", "name": "clay-colored_robin"}, + {"id": 1838, "synset": "hermit_thrush.n.01", "name": "hermit_thrush"}, + {"id": 1839, "synset": "veery.n.01", "name": "veery"}, + {"id": 1840, "synset": "wood_thrush.n.01", "name": "wood_thrush"}, + {"id": 1841, "synset": "nightingale.n.01", "name": "nightingale"}, + {"id": 1842, "synset": "thrush_nightingale.n.01", "name": "thrush_nightingale"}, + {"id": 1843, "synset": "bulbul.n.01", "name": "bulbul"}, + {"id": 1844, "synset": "old_world_chat.n.01", "name": "Old_World_chat"}, + {"id": 1845, "synset": "stonechat.n.01", "name": "stonechat"}, + {"id": 1846, "synset": "whinchat.n.01", "name": "whinchat"}, + {"id": 1847, "synset": "solitaire.n.03", "name": "solitaire"}, + {"id": 1848, "synset": "redstart.n.02", "name": "redstart"}, + {"id": 1849, "synset": "wheatear.n.01", "name": "wheatear"}, + {"id": 1850, "synset": "bluebird.n.02", "name": "bluebird"}, + {"id": 1851, "synset": "robin.n.01", "name": "robin"}, + {"id": 1852, "synset": "bluethroat.n.01", "name": "bluethroat"}, + {"id": 1853, "synset": "warbler.n.02", "name": "warbler"}, + {"id": 1854, "synset": "gnatcatcher.n.01", "name": "gnatcatcher"}, + {"id": 1855, "synset": "kinglet.n.01", "name": "kinglet"}, + {"id": 1856, "synset": "goldcrest.n.01", "name": "goldcrest"}, + {"id": 1857, "synset": "gold-crowned_kinglet.n.01", "name": "gold-crowned_kinglet"}, + {"id": 1858, "synset": "ruby-crowned_kinglet.n.01", "name": "ruby-crowned_kinglet"}, + {"id": 1859, "synset": "old_world_warbler.n.01", "name": "Old_World_warbler"}, + {"id": 1860, "synset": "blackcap.n.04", "name": "blackcap"}, + {"id": 1861, "synset": "greater_whitethroat.n.01", "name": "greater_whitethroat"}, + {"id": 1862, "synset": "lesser_whitethroat.n.01", "name": "lesser_whitethroat"}, + {"id": 1863, "synset": "wood_warbler.n.02", "name": "wood_warbler"}, + {"id": 1864, "synset": "sedge_warbler.n.01", "name": "sedge_warbler"}, + {"id": 1865, "synset": "wren_warbler.n.01", "name": "wren_warbler"}, + {"id": 1866, "synset": "tailorbird.n.01", "name": "tailorbird"}, + {"id": 1867, "synset": "babbler.n.02", "name": "babbler"}, + {"id": 1868, "synset": "new_world_warbler.n.01", "name": "New_World_warbler"}, + {"id": 1869, "synset": "parula_warbler.n.01", "name": "parula_warbler"}, + {"id": 1870, "synset": "wilson's_warbler.n.01", "name": "Wilson's_warbler"}, + {"id": 1871, "synset": "flycatching_warbler.n.01", "name": "flycatching_warbler"}, + {"id": 1872, "synset": "american_redstart.n.01", "name": "American_redstart"}, + {"id": 1873, "synset": "cape_may_warbler.n.01", "name": "Cape_May_warbler"}, + {"id": 1874, "synset": "yellow_warbler.n.01", "name": "yellow_warbler"}, + {"id": 1875, "synset": "blackburn.n.01", "name": "Blackburn"}, + {"id": 1876, "synset": "audubon's_warbler.n.01", "name": "Audubon's_warbler"}, + {"id": 1877, "synset": "myrtle_warbler.n.01", "name": "myrtle_warbler"}, + {"id": 1878, "synset": "blackpoll.n.01", "name": "blackpoll"}, + {"id": 1879, "synset": "new_world_chat.n.01", "name": "New_World_chat"}, + {"id": 1880, "synset": "yellow-breasted_chat.n.01", "name": "yellow-breasted_chat"}, + {"id": 1881, "synset": "ovenbird.n.01", "name": "ovenbird"}, + {"id": 1882, "synset": "water_thrush.n.01", "name": "water_thrush"}, + {"id": 1883, "synset": "yellowthroat.n.01", "name": "yellowthroat"}, + {"id": 1884, "synset": "common_yellowthroat.n.01", "name": "common_yellowthroat"}, + {"id": 1885, "synset": "riflebird.n.01", "name": "riflebird"}, + {"id": 1886, "synset": "new_world_oriole.n.01", "name": "New_World_oriole"}, + {"id": 1887, "synset": "northern_oriole.n.01", "name": "northern_oriole"}, + {"id": 1888, "synset": "baltimore_oriole.n.01", "name": "Baltimore_oriole"}, + {"id": 1889, "synset": "bullock's_oriole.n.01", "name": "Bullock's_oriole"}, + {"id": 1890, "synset": "orchard_oriole.n.01", "name": "orchard_oriole"}, + {"id": 1891, "synset": "meadowlark.n.01", "name": "meadowlark"}, + {"id": 1892, "synset": "eastern_meadowlark.n.01", "name": "eastern_meadowlark"}, + {"id": 1893, "synset": "western_meadowlark.n.01", "name": "western_meadowlark"}, + {"id": 1894, "synset": "cacique.n.01", "name": "cacique"}, + {"id": 1895, "synset": "bobolink.n.01", "name": "bobolink"}, + {"id": 1896, "synset": "new_world_blackbird.n.01", "name": "New_World_blackbird"}, + {"id": 1897, "synset": "grackle.n.02", "name": "grackle"}, + {"id": 1898, "synset": "purple_grackle.n.01", "name": "purple_grackle"}, + {"id": 1899, "synset": "rusty_blackbird.n.01", "name": "rusty_blackbird"}, + {"id": 1900, "synset": "cowbird.n.01", "name": "cowbird"}, + {"id": 1901, "synset": "red-winged_blackbird.n.01", "name": "red-winged_blackbird"}, + {"id": 1902, "synset": "old_world_oriole.n.01", "name": "Old_World_oriole"}, + {"id": 1903, "synset": "golden_oriole.n.01", "name": "golden_oriole"}, + {"id": 1904, "synset": "fig-bird.n.01", "name": "fig-bird"}, + {"id": 1905, "synset": "starling.n.01", "name": "starling"}, + {"id": 1906, "synset": "common_starling.n.01", "name": "common_starling"}, + { + "id": 1907, + "synset": "rose-colored_starling.n.01", + "name": "rose-colored_starling", + }, + {"id": 1908, "synset": "myna.n.01", "name": "myna"}, + {"id": 1909, "synset": "crested_myna.n.01", "name": "crested_myna"}, + {"id": 1910, "synset": "hill_myna.n.01", "name": "hill_myna"}, + {"id": 1911, "synset": "corvine_bird.n.01", "name": "corvine_bird"}, + {"id": 1912, "synset": "american_crow.n.01", "name": "American_crow"}, + {"id": 1913, "synset": "raven.n.01", "name": "raven"}, + {"id": 1914, "synset": "rook.n.02", "name": "rook"}, + {"id": 1915, "synset": "jackdaw.n.01", "name": "jackdaw"}, + {"id": 1916, "synset": "chough.n.01", "name": "chough"}, + {"id": 1917, "synset": "jay.n.02", "name": "jay"}, + {"id": 1918, "synset": "old_world_jay.n.01", "name": "Old_World_jay"}, + {"id": 1919, "synset": "common_european_jay.n.01", "name": "common_European_jay"}, + {"id": 1920, "synset": "new_world_jay.n.01", "name": "New_World_jay"}, + {"id": 1921, "synset": "blue_jay.n.01", "name": "blue_jay"}, + {"id": 1922, "synset": "canada_jay.n.01", "name": "Canada_jay"}, + {"id": 1923, "synset": "rocky_mountain_jay.n.01", "name": "Rocky_Mountain_jay"}, + {"id": 1924, "synset": "nutcracker.n.03", "name": "nutcracker"}, + {"id": 1925, "synset": "common_nutcracker.n.01", "name": "common_nutcracker"}, + {"id": 1926, "synset": "clark's_nutcracker.n.01", "name": "Clark's_nutcracker"}, + {"id": 1927, "synset": "magpie.n.01", "name": "magpie"}, + {"id": 1928, "synset": "european_magpie.n.01", "name": "European_magpie"}, + {"id": 1929, "synset": "american_magpie.n.01", "name": "American_magpie"}, + {"id": 1930, "synset": "australian_magpie.n.01", "name": "Australian_magpie"}, + {"id": 1931, "synset": "butcherbird.n.02", "name": "butcherbird"}, + {"id": 1932, "synset": "currawong.n.01", "name": "currawong"}, + {"id": 1933, "synset": "piping_crow.n.01", "name": "piping_crow"}, + {"id": 1934, "synset": "wren.n.02", "name": "wren"}, + {"id": 1935, "synset": "winter_wren.n.01", "name": "winter_wren"}, + {"id": 1936, "synset": "house_wren.n.01", "name": "house_wren"}, + {"id": 1937, "synset": "marsh_wren.n.01", "name": "marsh_wren"}, + { + "id": 1938, + "synset": "long-billed_marsh_wren.n.01", + "name": "long-billed_marsh_wren", + }, + {"id": 1939, "synset": "sedge_wren.n.01", "name": "sedge_wren"}, + {"id": 1940, "synset": "rock_wren.n.02", "name": "rock_wren"}, + {"id": 1941, "synset": "carolina_wren.n.01", "name": "Carolina_wren"}, + {"id": 1942, "synset": "cactus_wren.n.01", "name": "cactus_wren"}, + {"id": 1943, "synset": "mockingbird.n.01", "name": "mockingbird"}, + {"id": 1944, "synset": "blue_mockingbird.n.01", "name": "blue_mockingbird"}, + {"id": 1945, "synset": "catbird.n.02", "name": "catbird"}, + {"id": 1946, "synset": "thrasher.n.02", "name": "thrasher"}, + {"id": 1947, "synset": "brown_thrasher.n.01", "name": "brown_thrasher"}, + {"id": 1948, "synset": "new_zealand_wren.n.01", "name": "New_Zealand_wren"}, + {"id": 1949, "synset": "rock_wren.n.01", "name": "rock_wren"}, + {"id": 1950, "synset": "rifleman_bird.n.01", "name": "rifleman_bird"}, + {"id": 1951, "synset": "creeper.n.03", "name": "creeper"}, + {"id": 1952, "synset": "brown_creeper.n.01", "name": "brown_creeper"}, + {"id": 1953, "synset": "european_creeper.n.01", "name": "European_creeper"}, + {"id": 1954, "synset": "wall_creeper.n.01", "name": "wall_creeper"}, + {"id": 1955, "synset": "european_nuthatch.n.01", "name": "European_nuthatch"}, + { + "id": 1956, + "synset": "red-breasted_nuthatch.n.01", + "name": "red-breasted_nuthatch", + }, + { + "id": 1957, + "synset": "white-breasted_nuthatch.n.01", + "name": "white-breasted_nuthatch", + }, + {"id": 1958, "synset": "titmouse.n.01", "name": "titmouse"}, + {"id": 1959, "synset": "chickadee.n.01", "name": "chickadee"}, + { + "id": 1960, + "synset": "black-capped_chickadee.n.01", + "name": "black-capped_chickadee", + }, + {"id": 1961, "synset": "tufted_titmouse.n.01", "name": "tufted_titmouse"}, + {"id": 1962, "synset": "carolina_chickadee.n.01", "name": "Carolina_chickadee"}, + {"id": 1963, "synset": "blue_tit.n.01", "name": "blue_tit"}, + {"id": 1964, "synset": "bushtit.n.01", "name": "bushtit"}, + {"id": 1965, "synset": "wren-tit.n.01", "name": "wren-tit"}, + {"id": 1966, "synset": "verdin.n.01", "name": "verdin"}, + {"id": 1967, "synset": "fairy_bluebird.n.01", "name": "fairy_bluebird"}, + {"id": 1968, "synset": "swallow.n.03", "name": "swallow"}, + {"id": 1969, "synset": "barn_swallow.n.01", "name": "barn_swallow"}, + {"id": 1970, "synset": "cliff_swallow.n.01", "name": "cliff_swallow"}, + {"id": 1971, "synset": "tree_swallow.n.02", "name": "tree_swallow"}, + { + "id": 1972, + "synset": "white-bellied_swallow.n.01", + "name": "white-bellied_swallow", + }, + {"id": 1973, "synset": "martin.n.05", "name": "martin"}, + {"id": 1974, "synset": "house_martin.n.01", "name": "house_martin"}, + {"id": 1975, "synset": "bank_martin.n.01", "name": "bank_martin"}, + {"id": 1976, "synset": "purple_martin.n.01", "name": "purple_martin"}, + {"id": 1977, "synset": "wood_swallow.n.01", "name": "wood_swallow"}, + {"id": 1978, "synset": "tanager.n.01", "name": "tanager"}, + {"id": 1979, "synset": "scarlet_tanager.n.01", "name": "scarlet_tanager"}, + {"id": 1980, "synset": "western_tanager.n.01", "name": "western_tanager"}, + {"id": 1981, "synset": "summer_tanager.n.01", "name": "summer_tanager"}, + {"id": 1982, "synset": "hepatic_tanager.n.01", "name": "hepatic_tanager"}, + {"id": 1983, "synset": "shrike.n.01", "name": "shrike"}, + {"id": 1984, "synset": "butcherbird.n.01", "name": "butcherbird"}, + {"id": 1985, "synset": "european_shrike.n.01", "name": "European_shrike"}, + {"id": 1986, "synset": "northern_shrike.n.01", "name": "northern_shrike"}, + {"id": 1987, "synset": "white-rumped_shrike.n.01", "name": "white-rumped_shrike"}, + {"id": 1988, "synset": "loggerhead_shrike.n.01", "name": "loggerhead_shrike"}, + {"id": 1989, "synset": "migrant_shrike.n.01", "name": "migrant_shrike"}, + {"id": 1990, "synset": "bush_shrike.n.01", "name": "bush_shrike"}, + { + "id": 1991, + "synset": "black-fronted_bush_shrike.n.01", + "name": "black-fronted_bush_shrike", + }, + {"id": 1992, "synset": "bowerbird.n.01", "name": "bowerbird"}, + {"id": 1993, "synset": "satin_bowerbird.n.01", "name": "satin_bowerbird"}, + {"id": 1994, "synset": "great_bowerbird.n.01", "name": "great_bowerbird"}, + {"id": 1995, "synset": "water_ouzel.n.01", "name": "water_ouzel"}, + {"id": 1996, "synset": "european_water_ouzel.n.01", "name": "European_water_ouzel"}, + {"id": 1997, "synset": "american_water_ouzel.n.01", "name": "American_water_ouzel"}, + {"id": 1998, "synset": "vireo.n.01", "name": "vireo"}, + {"id": 1999, "synset": "red-eyed_vireo.n.01", "name": "red-eyed_vireo"}, + {"id": 2000, "synset": "solitary_vireo.n.01", "name": "solitary_vireo"}, + {"id": 2001, "synset": "blue-headed_vireo.n.01", "name": "blue-headed_vireo"}, + {"id": 2002, "synset": "waxwing.n.01", "name": "waxwing"}, + {"id": 2003, "synset": "cedar_waxwing.n.01", "name": "cedar_waxwing"}, + {"id": 2004, "synset": "bohemian_waxwing.n.01", "name": "Bohemian_waxwing"}, + {"id": 2005, "synset": "bird_of_prey.n.01", "name": "bird_of_prey"}, + {"id": 2006, "synset": "accipitriformes.n.01", "name": "Accipitriformes"}, + {"id": 2007, "synset": "hawk.n.01", "name": "hawk"}, + {"id": 2008, "synset": "eyas.n.01", "name": "eyas"}, + {"id": 2009, "synset": "tiercel.n.01", "name": "tiercel"}, + {"id": 2010, "synset": "goshawk.n.01", "name": "goshawk"}, + {"id": 2011, "synset": "sparrow_hawk.n.02", "name": "sparrow_hawk"}, + {"id": 2012, "synset": "cooper's_hawk.n.01", "name": "Cooper's_hawk"}, + {"id": 2013, "synset": "chicken_hawk.n.01", "name": "chicken_hawk"}, + {"id": 2014, "synset": "buteonine.n.01", "name": "buteonine"}, + {"id": 2015, "synset": "redtail.n.01", "name": "redtail"}, + {"id": 2016, "synset": "rough-legged_hawk.n.01", "name": "rough-legged_hawk"}, + {"id": 2017, "synset": "red-shouldered_hawk.n.01", "name": "red-shouldered_hawk"}, + {"id": 2018, "synset": "buzzard.n.02", "name": "buzzard"}, + {"id": 2019, "synset": "honey_buzzard.n.01", "name": "honey_buzzard"}, + {"id": 2020, "synset": "kite.n.04", "name": "kite"}, + {"id": 2021, "synset": "black_kite.n.01", "name": "black_kite"}, + {"id": 2022, "synset": "swallow-tailed_kite.n.01", "name": "swallow-tailed_kite"}, + {"id": 2023, "synset": "white-tailed_kite.n.01", "name": "white-tailed_kite"}, + {"id": 2024, "synset": "harrier.n.03", "name": "harrier"}, + {"id": 2025, "synset": "marsh_harrier.n.01", "name": "marsh_harrier"}, + {"id": 2026, "synset": "montagu's_harrier.n.01", "name": "Montagu's_harrier"}, + {"id": 2027, "synset": "marsh_hawk.n.01", "name": "marsh_hawk"}, + {"id": 2028, "synset": "harrier_eagle.n.01", "name": "harrier_eagle"}, + {"id": 2029, "synset": "peregrine.n.01", "name": "peregrine"}, + {"id": 2030, "synset": "falcon-gentle.n.01", "name": "falcon-gentle"}, + {"id": 2031, "synset": "gyrfalcon.n.01", "name": "gyrfalcon"}, + {"id": 2032, "synset": "kestrel.n.02", "name": "kestrel"}, + {"id": 2033, "synset": "sparrow_hawk.n.01", "name": "sparrow_hawk"}, + {"id": 2034, "synset": "pigeon_hawk.n.01", "name": "pigeon_hawk"}, + {"id": 2035, "synset": "hobby.n.03", "name": "hobby"}, + {"id": 2036, "synset": "caracara.n.01", "name": "caracara"}, + {"id": 2037, "synset": "audubon's_caracara.n.01", "name": "Audubon's_caracara"}, + {"id": 2038, "synset": "carancha.n.01", "name": "carancha"}, + {"id": 2039, "synset": "young_bird.n.01", "name": "young_bird"}, + {"id": 2040, "synset": "eaglet.n.01", "name": "eaglet"}, + {"id": 2041, "synset": "harpy.n.04", "name": "harpy"}, + {"id": 2042, "synset": "golden_eagle.n.01", "name": "golden_eagle"}, + {"id": 2043, "synset": "tawny_eagle.n.01", "name": "tawny_eagle"}, + {"id": 2044, "synset": "bald_eagle.n.01", "name": "bald_eagle"}, + {"id": 2045, "synset": "sea_eagle.n.02", "name": "sea_eagle"}, + {"id": 2046, "synset": "kamchatkan_sea_eagle.n.01", "name": "Kamchatkan_sea_eagle"}, + {"id": 2047, "synset": "ern.n.01", "name": "ern"}, + {"id": 2048, "synset": "fishing_eagle.n.01", "name": "fishing_eagle"}, + {"id": 2049, "synset": "osprey.n.01", "name": "osprey"}, + {"id": 2050, "synset": "aegypiidae.n.01", "name": "Aegypiidae"}, + {"id": 2051, "synset": "old_world_vulture.n.01", "name": "Old_World_vulture"}, + {"id": 2052, "synset": "griffon_vulture.n.01", "name": "griffon_vulture"}, + {"id": 2053, "synset": "bearded_vulture.n.01", "name": "bearded_vulture"}, + {"id": 2054, "synset": "egyptian_vulture.n.01", "name": "Egyptian_vulture"}, + {"id": 2055, "synset": "black_vulture.n.02", "name": "black_vulture"}, + {"id": 2056, "synset": "secretary_bird.n.01", "name": "secretary_bird"}, + {"id": 2057, "synset": "new_world_vulture.n.01", "name": "New_World_vulture"}, + {"id": 2058, "synset": "buzzard.n.01", "name": "buzzard"}, + {"id": 2059, "synset": "condor.n.01", "name": "condor"}, + {"id": 2060, "synset": "andean_condor.n.01", "name": "Andean_condor"}, + {"id": 2061, "synset": "california_condor.n.01", "name": "California_condor"}, + {"id": 2062, "synset": "black_vulture.n.01", "name": "black_vulture"}, + {"id": 2063, "synset": "king_vulture.n.01", "name": "king_vulture"}, + {"id": 2064, "synset": "owlet.n.01", "name": "owlet"}, + {"id": 2065, "synset": "little_owl.n.01", "name": "little_owl"}, + {"id": 2066, "synset": "horned_owl.n.01", "name": "horned_owl"}, + {"id": 2067, "synset": "great_horned_owl.n.01", "name": "great_horned_owl"}, + {"id": 2068, "synset": "great_grey_owl.n.01", "name": "great_grey_owl"}, + {"id": 2069, "synset": "tawny_owl.n.01", "name": "tawny_owl"}, + {"id": 2070, "synset": "barred_owl.n.01", "name": "barred_owl"}, + {"id": 2071, "synset": "screech_owl.n.02", "name": "screech_owl"}, + {"id": 2072, "synset": "screech_owl.n.01", "name": "screech_owl"}, + {"id": 2073, "synset": "scops_owl.n.01", "name": "scops_owl"}, + {"id": 2074, "synset": "spotted_owl.n.01", "name": "spotted_owl"}, + {"id": 2075, "synset": "old_world_scops_owl.n.01", "name": "Old_World_scops_owl"}, + {"id": 2076, "synset": "oriental_scops_owl.n.01", "name": "Oriental_scops_owl"}, + {"id": 2077, "synset": "hoot_owl.n.01", "name": "hoot_owl"}, + {"id": 2078, "synset": "hawk_owl.n.01", "name": "hawk_owl"}, + {"id": 2079, "synset": "long-eared_owl.n.01", "name": "long-eared_owl"}, + {"id": 2080, "synset": "laughing_owl.n.01", "name": "laughing_owl"}, + {"id": 2081, "synset": "barn_owl.n.01", "name": "barn_owl"}, + {"id": 2082, "synset": "amphibian.n.03", "name": "amphibian"}, + {"id": 2083, "synset": "ichyostega.n.01", "name": "Ichyostega"}, + {"id": 2084, "synset": "urodele.n.01", "name": "urodele"}, + {"id": 2085, "synset": "salamander.n.01", "name": "salamander"}, + { + "id": 2086, + "synset": "european_fire_salamander.n.01", + "name": "European_fire_salamander", + }, + {"id": 2087, "synset": "spotted_salamander.n.02", "name": "spotted_salamander"}, + {"id": 2088, "synset": "alpine_salamander.n.01", "name": "alpine_salamander"}, + {"id": 2089, "synset": "newt.n.01", "name": "newt"}, + {"id": 2090, "synset": "common_newt.n.01", "name": "common_newt"}, + {"id": 2091, "synset": "red_eft.n.01", "name": "red_eft"}, + {"id": 2092, "synset": "pacific_newt.n.01", "name": "Pacific_newt"}, + {"id": 2093, "synset": "rough-skinned_newt.n.01", "name": "rough-skinned_newt"}, + {"id": 2094, "synset": "california_newt.n.01", "name": "California_newt"}, + {"id": 2095, "synset": "eft.n.01", "name": "eft"}, + {"id": 2096, "synset": "ambystomid.n.01", "name": "ambystomid"}, + {"id": 2097, "synset": "mole_salamander.n.01", "name": "mole_salamander"}, + {"id": 2098, "synset": "spotted_salamander.n.01", "name": "spotted_salamander"}, + {"id": 2099, "synset": "tiger_salamander.n.01", "name": "tiger_salamander"}, + {"id": 2100, "synset": "axolotl.n.01", "name": "axolotl"}, + {"id": 2101, "synset": "waterdog.n.01", "name": "waterdog"}, + {"id": 2102, "synset": "hellbender.n.01", "name": "hellbender"}, + {"id": 2103, "synset": "giant_salamander.n.01", "name": "giant_salamander"}, + {"id": 2104, "synset": "olm.n.01", "name": "olm"}, + {"id": 2105, "synset": "mud_puppy.n.01", "name": "mud_puppy"}, + {"id": 2106, "synset": "dicamptodon.n.01", "name": "dicamptodon"}, + { + "id": 2107, + "synset": "pacific_giant_salamander.n.01", + "name": "Pacific_giant_salamander", + }, + {"id": 2108, "synset": "olympic_salamander.n.01", "name": "olympic_salamander"}, + {"id": 2109, "synset": "lungless_salamander.n.01", "name": "lungless_salamander"}, + { + "id": 2110, + "synset": "eastern_red-backed_salamander.n.01", + "name": "eastern_red-backed_salamander", + }, + { + "id": 2111, + "synset": "western_red-backed_salamander.n.01", + "name": "western_red-backed_salamander", + }, + {"id": 2112, "synset": "dusky_salamander.n.01", "name": "dusky_salamander"}, + {"id": 2113, "synset": "climbing_salamander.n.01", "name": "climbing_salamander"}, + {"id": 2114, "synset": "arboreal_salamander.n.01", "name": "arboreal_salamander"}, + {"id": 2115, "synset": "slender_salamander.n.01", "name": "slender_salamander"}, + {"id": 2116, "synset": "web-toed_salamander.n.01", "name": "web-toed_salamander"}, + {"id": 2117, "synset": "shasta_salamander.n.01", "name": "Shasta_salamander"}, + {"id": 2118, "synset": "limestone_salamander.n.01", "name": "limestone_salamander"}, + {"id": 2119, "synset": "amphiuma.n.01", "name": "amphiuma"}, + {"id": 2120, "synset": "siren.n.05", "name": "siren"}, + {"id": 2121, "synset": "true_frog.n.01", "name": "true_frog"}, + {"id": 2122, "synset": "wood-frog.n.01", "name": "wood-frog"}, + {"id": 2123, "synset": "leopard_frog.n.01", "name": "leopard_frog"}, + {"id": 2124, "synset": "bullfrog.n.01", "name": "bullfrog"}, + {"id": 2125, "synset": "green_frog.n.01", "name": "green_frog"}, + {"id": 2126, "synset": "cascades_frog.n.01", "name": "cascades_frog"}, + {"id": 2127, "synset": "goliath_frog.n.01", "name": "goliath_frog"}, + {"id": 2128, "synset": "pickerel_frog.n.01", "name": "pickerel_frog"}, + {"id": 2129, "synset": "tarahumara_frog.n.01", "name": "tarahumara_frog"}, + {"id": 2130, "synset": "grass_frog.n.01", "name": "grass_frog"}, + {"id": 2131, "synset": "leptodactylid_frog.n.01", "name": "leptodactylid_frog"}, + {"id": 2132, "synset": "robber_frog.n.02", "name": "robber_frog"}, + {"id": 2133, "synset": "barking_frog.n.01", "name": "barking_frog"}, + {"id": 2134, "synset": "crapaud.n.01", "name": "crapaud"}, + {"id": 2135, "synset": "tree_frog.n.02", "name": "tree_frog"}, + {"id": 2136, "synset": "tailed_frog.n.01", "name": "tailed_frog"}, + {"id": 2137, "synset": "liopelma_hamiltoni.n.01", "name": "Liopelma_hamiltoni"}, + {"id": 2138, "synset": "true_toad.n.01", "name": "true_toad"}, + {"id": 2139, "synset": "bufo.n.01", "name": "bufo"}, + {"id": 2140, "synset": "agua.n.01", "name": "agua"}, + {"id": 2141, "synset": "european_toad.n.01", "name": "European_toad"}, + {"id": 2142, "synset": "natterjack.n.01", "name": "natterjack"}, + {"id": 2143, "synset": "american_toad.n.01", "name": "American_toad"}, + {"id": 2144, "synset": "eurasian_green_toad.n.01", "name": "Eurasian_green_toad"}, + {"id": 2145, "synset": "american_green_toad.n.01", "name": "American_green_toad"}, + {"id": 2146, "synset": "yosemite_toad.n.01", "name": "Yosemite_toad"}, + {"id": 2147, "synset": "texas_toad.n.01", "name": "Texas_toad"}, + {"id": 2148, "synset": "southwestern_toad.n.01", "name": "southwestern_toad"}, + {"id": 2149, "synset": "western_toad.n.01", "name": "western_toad"}, + {"id": 2150, "synset": "obstetrical_toad.n.01", "name": "obstetrical_toad"}, + {"id": 2151, "synset": "midwife_toad.n.01", "name": "midwife_toad"}, + {"id": 2152, "synset": "fire-bellied_toad.n.01", "name": "fire-bellied_toad"}, + {"id": 2153, "synset": "spadefoot.n.01", "name": "spadefoot"}, + {"id": 2154, "synset": "western_spadefoot.n.01", "name": "western_spadefoot"}, + {"id": 2155, "synset": "southern_spadefoot.n.01", "name": "southern_spadefoot"}, + {"id": 2156, "synset": "plains_spadefoot.n.01", "name": "plains_spadefoot"}, + {"id": 2157, "synset": "tree_toad.n.01", "name": "tree_toad"}, + {"id": 2158, "synset": "spring_peeper.n.01", "name": "spring_peeper"}, + {"id": 2159, "synset": "pacific_tree_toad.n.01", "name": "Pacific_tree_toad"}, + {"id": 2160, "synset": "canyon_treefrog.n.01", "name": "canyon_treefrog"}, + {"id": 2161, "synset": "chameleon_tree_frog.n.01", "name": "chameleon_tree_frog"}, + {"id": 2162, "synset": "cricket_frog.n.01", "name": "cricket_frog"}, + { + "id": 2163, + "synset": "northern_cricket_frog.n.01", + "name": "northern_cricket_frog", + }, + {"id": 2164, "synset": "eastern_cricket_frog.n.01", "name": "eastern_cricket_frog"}, + {"id": 2165, "synset": "chorus_frog.n.01", "name": "chorus_frog"}, + { + "id": 2166, + "synset": "lowland_burrowing_treefrog.n.01", + "name": "lowland_burrowing_treefrog", + }, + { + "id": 2167, + "synset": "western_narrow-mouthed_toad.n.01", + "name": "western_narrow-mouthed_toad", + }, + { + "id": 2168, + "synset": "eastern_narrow-mouthed_toad.n.01", + "name": "eastern_narrow-mouthed_toad", + }, + {"id": 2169, "synset": "sheep_frog.n.01", "name": "sheep_frog"}, + {"id": 2170, "synset": "tongueless_frog.n.01", "name": "tongueless_frog"}, + {"id": 2171, "synset": "surinam_toad.n.01", "name": "Surinam_toad"}, + {"id": 2172, "synset": "african_clawed_frog.n.01", "name": "African_clawed_frog"}, + { + "id": 2173, + "synset": "south_american_poison_toad.n.01", + "name": "South_American_poison_toad", + }, + {"id": 2174, "synset": "caecilian.n.01", "name": "caecilian"}, + {"id": 2175, "synset": "reptile.n.01", "name": "reptile"}, + {"id": 2176, "synset": "anapsid.n.01", "name": "anapsid"}, + {"id": 2177, "synset": "diapsid.n.01", "name": "diapsid"}, + {"id": 2178, "synset": "diapsida.n.01", "name": "Diapsida"}, + {"id": 2179, "synset": "chelonian.n.01", "name": "chelonian"}, + {"id": 2180, "synset": "sea_turtle.n.01", "name": "sea_turtle"}, + {"id": 2181, "synset": "green_turtle.n.01", "name": "green_turtle"}, + {"id": 2182, "synset": "loggerhead.n.02", "name": "loggerhead"}, + {"id": 2183, "synset": "ridley.n.01", "name": "ridley"}, + {"id": 2184, "synset": "atlantic_ridley.n.01", "name": "Atlantic_ridley"}, + {"id": 2185, "synset": "pacific_ridley.n.01", "name": "Pacific_ridley"}, + {"id": 2186, "synset": "hawksbill_turtle.n.01", "name": "hawksbill_turtle"}, + {"id": 2187, "synset": "leatherback_turtle.n.01", "name": "leatherback_turtle"}, + {"id": 2188, "synset": "snapping_turtle.n.01", "name": "snapping_turtle"}, + { + "id": 2189, + "synset": "common_snapping_turtle.n.01", + "name": "common_snapping_turtle", + }, + { + "id": 2190, + "synset": "alligator_snapping_turtle.n.01", + "name": "alligator_snapping_turtle", + }, + {"id": 2191, "synset": "mud_turtle.n.01", "name": "mud_turtle"}, + {"id": 2192, "synset": "musk_turtle.n.01", "name": "musk_turtle"}, + {"id": 2193, "synset": "terrapin.n.01", "name": "terrapin"}, + {"id": 2194, "synset": "diamondback_terrapin.n.01", "name": "diamondback_terrapin"}, + {"id": 2195, "synset": "red-bellied_terrapin.n.01", "name": "red-bellied_terrapin"}, + {"id": 2196, "synset": "slider.n.03", "name": "slider"}, + {"id": 2197, "synset": "cooter.n.01", "name": "cooter"}, + {"id": 2198, "synset": "box_turtle.n.01", "name": "box_turtle"}, + {"id": 2199, "synset": "western_box_turtle.n.01", "name": "Western_box_turtle"}, + {"id": 2200, "synset": "painted_turtle.n.01", "name": "painted_turtle"}, + {"id": 2201, "synset": "tortoise.n.01", "name": "tortoise"}, + {"id": 2202, "synset": "european_tortoise.n.01", "name": "European_tortoise"}, + {"id": 2203, "synset": "giant_tortoise.n.01", "name": "giant_tortoise"}, + {"id": 2204, "synset": "gopher_tortoise.n.01", "name": "gopher_tortoise"}, + {"id": 2205, "synset": "desert_tortoise.n.01", "name": "desert_tortoise"}, + {"id": 2206, "synset": "texas_tortoise.n.01", "name": "Texas_tortoise"}, + {"id": 2207, "synset": "soft-shelled_turtle.n.01", "name": "soft-shelled_turtle"}, + {"id": 2208, "synset": "spiny_softshell.n.01", "name": "spiny_softshell"}, + {"id": 2209, "synset": "smooth_softshell.n.01", "name": "smooth_softshell"}, + {"id": 2210, "synset": "tuatara.n.01", "name": "tuatara"}, + {"id": 2211, "synset": "saurian.n.01", "name": "saurian"}, + {"id": 2212, "synset": "gecko.n.01", "name": "gecko"}, + {"id": 2213, "synset": "flying_gecko.n.01", "name": "flying_gecko"}, + {"id": 2214, "synset": "banded_gecko.n.01", "name": "banded_gecko"}, + {"id": 2215, "synset": "iguanid.n.01", "name": "iguanid"}, + {"id": 2216, "synset": "common_iguana.n.01", "name": "common_iguana"}, + {"id": 2217, "synset": "marine_iguana.n.01", "name": "marine_iguana"}, + {"id": 2218, "synset": "desert_iguana.n.01", "name": "desert_iguana"}, + {"id": 2219, "synset": "chuckwalla.n.01", "name": "chuckwalla"}, + {"id": 2220, "synset": "zebra-tailed_lizard.n.01", "name": "zebra-tailed_lizard"}, + {"id": 2221, "synset": "fringe-toed_lizard.n.01", "name": "fringe-toed_lizard"}, + {"id": 2222, "synset": "earless_lizard.n.01", "name": "earless_lizard"}, + {"id": 2223, "synset": "collared_lizard.n.01", "name": "collared_lizard"}, + {"id": 2224, "synset": "leopard_lizard.n.01", "name": "leopard_lizard"}, + {"id": 2225, "synset": "spiny_lizard.n.02", "name": "spiny_lizard"}, + {"id": 2226, "synset": "fence_lizard.n.01", "name": "fence_lizard"}, + {"id": 2227, "synset": "western_fence_lizard.n.01", "name": "western_fence_lizard"}, + {"id": 2228, "synset": "eastern_fence_lizard.n.01", "name": "eastern_fence_lizard"}, + {"id": 2229, "synset": "sagebrush_lizard.n.01", "name": "sagebrush_lizard"}, + {"id": 2230, "synset": "side-blotched_lizard.n.01", "name": "side-blotched_lizard"}, + {"id": 2231, "synset": "tree_lizard.n.01", "name": "tree_lizard"}, + {"id": 2232, "synset": "horned_lizard.n.01", "name": "horned_lizard"}, + {"id": 2233, "synset": "texas_horned_lizard.n.01", "name": "Texas_horned_lizard"}, + {"id": 2234, "synset": "basilisk.n.03", "name": "basilisk"}, + {"id": 2235, "synset": "american_chameleon.n.01", "name": "American_chameleon"}, + {"id": 2236, "synset": "worm_lizard.n.01", "name": "worm_lizard"}, + {"id": 2237, "synset": "night_lizard.n.01", "name": "night_lizard"}, + {"id": 2238, "synset": "skink.n.01", "name": "skink"}, + {"id": 2239, "synset": "western_skink.n.01", "name": "western_skink"}, + {"id": 2240, "synset": "mountain_skink.n.01", "name": "mountain_skink"}, + {"id": 2241, "synset": "teiid_lizard.n.01", "name": "teiid_lizard"}, + {"id": 2242, "synset": "whiptail.n.01", "name": "whiptail"}, + {"id": 2243, "synset": "racerunner.n.01", "name": "racerunner"}, + { + "id": 2244, + "synset": "plateau_striped_whiptail.n.01", + "name": "plateau_striped_whiptail", + }, + { + "id": 2245, + "synset": "chihuahuan_spotted_whiptail.n.01", + "name": "Chihuahuan_spotted_whiptail", + }, + {"id": 2246, "synset": "western_whiptail.n.01", "name": "western_whiptail"}, + {"id": 2247, "synset": "checkered_whiptail.n.01", "name": "checkered_whiptail"}, + {"id": 2248, "synset": "teju.n.01", "name": "teju"}, + {"id": 2249, "synset": "caiman_lizard.n.01", "name": "caiman_lizard"}, + {"id": 2250, "synset": "agamid.n.01", "name": "agamid"}, + {"id": 2251, "synset": "agama.n.01", "name": "agama"}, + {"id": 2252, "synset": "frilled_lizard.n.01", "name": "frilled_lizard"}, + {"id": 2253, "synset": "moloch.n.03", "name": "moloch"}, + {"id": 2254, "synset": "mountain_devil.n.02", "name": "mountain_devil"}, + {"id": 2255, "synset": "anguid_lizard.n.01", "name": "anguid_lizard"}, + {"id": 2256, "synset": "alligator_lizard.n.01", "name": "alligator_lizard"}, + {"id": 2257, "synset": "blindworm.n.01", "name": "blindworm"}, + {"id": 2258, "synset": "glass_lizard.n.01", "name": "glass_lizard"}, + {"id": 2259, "synset": "legless_lizard.n.01", "name": "legless_lizard"}, + { + "id": 2260, + "synset": "lanthanotus_borneensis.n.01", + "name": "Lanthanotus_borneensis", + }, + {"id": 2261, "synset": "venomous_lizard.n.01", "name": "venomous_lizard"}, + {"id": 2262, "synset": "gila_monster.n.01", "name": "Gila_monster"}, + {"id": 2263, "synset": "beaded_lizard.n.01", "name": "beaded_lizard"}, + {"id": 2264, "synset": "lacertid_lizard.n.01", "name": "lacertid_lizard"}, + {"id": 2265, "synset": "sand_lizard.n.01", "name": "sand_lizard"}, + {"id": 2266, "synset": "green_lizard.n.01", "name": "green_lizard"}, + {"id": 2267, "synset": "chameleon.n.03", "name": "chameleon"}, + {"id": 2268, "synset": "african_chameleon.n.01", "name": "African_chameleon"}, + {"id": 2269, "synset": "horned_chameleon.n.01", "name": "horned_chameleon"}, + {"id": 2270, "synset": "monitor.n.07", "name": "monitor"}, + {"id": 2271, "synset": "african_monitor.n.01", "name": "African_monitor"}, + {"id": 2272, "synset": "komodo_dragon.n.01", "name": "Komodo_dragon"}, + {"id": 2273, "synset": "crocodilian_reptile.n.01", "name": "crocodilian_reptile"}, + {"id": 2274, "synset": "crocodile.n.01", "name": "crocodile"}, + {"id": 2275, "synset": "african_crocodile.n.01", "name": "African_crocodile"}, + {"id": 2276, "synset": "asian_crocodile.n.01", "name": "Asian_crocodile"}, + {"id": 2277, "synset": "morlett's_crocodile.n.01", "name": "Morlett's_crocodile"}, + {"id": 2278, "synset": "false_gavial.n.01", "name": "false_gavial"}, + {"id": 2279, "synset": "american_alligator.n.01", "name": "American_alligator"}, + {"id": 2280, "synset": "chinese_alligator.n.01", "name": "Chinese_alligator"}, + {"id": 2281, "synset": "caiman.n.01", "name": "caiman"}, + {"id": 2282, "synset": "spectacled_caiman.n.01", "name": "spectacled_caiman"}, + {"id": 2283, "synset": "gavial.n.01", "name": "gavial"}, + {"id": 2284, "synset": "armored_dinosaur.n.01", "name": "armored_dinosaur"}, + {"id": 2285, "synset": "stegosaur.n.01", "name": "stegosaur"}, + {"id": 2286, "synset": "ankylosaur.n.01", "name": "ankylosaur"}, + {"id": 2287, "synset": "edmontonia.n.01", "name": "Edmontonia"}, + {"id": 2288, "synset": "bone-headed_dinosaur.n.01", "name": "bone-headed_dinosaur"}, + {"id": 2289, "synset": "pachycephalosaur.n.01", "name": "pachycephalosaur"}, + {"id": 2290, "synset": "ceratopsian.n.01", "name": "ceratopsian"}, + {"id": 2291, "synset": "protoceratops.n.01", "name": "protoceratops"}, + {"id": 2292, "synset": "triceratops.n.01", "name": "triceratops"}, + {"id": 2293, "synset": "styracosaur.n.01", "name": "styracosaur"}, + {"id": 2294, "synset": "psittacosaur.n.01", "name": "psittacosaur"}, + {"id": 2295, "synset": "ornithopod.n.01", "name": "ornithopod"}, + {"id": 2296, "synset": "hadrosaur.n.01", "name": "hadrosaur"}, + {"id": 2297, "synset": "trachodon.n.01", "name": "trachodon"}, + {"id": 2298, "synset": "saurischian.n.01", "name": "saurischian"}, + {"id": 2299, "synset": "sauropod.n.01", "name": "sauropod"}, + {"id": 2300, "synset": "apatosaur.n.01", "name": "apatosaur"}, + {"id": 2301, "synset": "barosaur.n.01", "name": "barosaur"}, + {"id": 2302, "synset": "diplodocus.n.01", "name": "diplodocus"}, + {"id": 2303, "synset": "argentinosaur.n.01", "name": "argentinosaur"}, + {"id": 2304, "synset": "theropod.n.01", "name": "theropod"}, + {"id": 2305, "synset": "ceratosaur.n.01", "name": "ceratosaur"}, + {"id": 2306, "synset": "coelophysis.n.01", "name": "coelophysis"}, + {"id": 2307, "synset": "tyrannosaur.n.01", "name": "tyrannosaur"}, + {"id": 2308, "synset": "allosaur.n.01", "name": "allosaur"}, + {"id": 2309, "synset": "ornithomimid.n.01", "name": "ornithomimid"}, + {"id": 2310, "synset": "maniraptor.n.01", "name": "maniraptor"}, + {"id": 2311, "synset": "oviraptorid.n.01", "name": "oviraptorid"}, + {"id": 2312, "synset": "velociraptor.n.01", "name": "velociraptor"}, + {"id": 2313, "synset": "deinonychus.n.01", "name": "deinonychus"}, + {"id": 2314, "synset": "utahraptor.n.01", "name": "utahraptor"}, + {"id": 2315, "synset": "synapsid.n.01", "name": "synapsid"}, + {"id": 2316, "synset": "dicynodont.n.01", "name": "dicynodont"}, + {"id": 2317, "synset": "pelycosaur.n.01", "name": "pelycosaur"}, + {"id": 2318, "synset": "dimetrodon.n.01", "name": "dimetrodon"}, + {"id": 2319, "synset": "pterosaur.n.01", "name": "pterosaur"}, + {"id": 2320, "synset": "pterodactyl.n.01", "name": "pterodactyl"}, + {"id": 2321, "synset": "ichthyosaur.n.01", "name": "ichthyosaur"}, + {"id": 2322, "synset": "ichthyosaurus.n.01", "name": "ichthyosaurus"}, + {"id": 2323, "synset": "stenopterygius.n.01", "name": "stenopterygius"}, + {"id": 2324, "synset": "plesiosaur.n.01", "name": "plesiosaur"}, + {"id": 2325, "synset": "nothosaur.n.01", "name": "nothosaur"}, + {"id": 2326, "synset": "colubrid_snake.n.01", "name": "colubrid_snake"}, + {"id": 2327, "synset": "hoop_snake.n.01", "name": "hoop_snake"}, + {"id": 2328, "synset": "thunder_snake.n.01", "name": "thunder_snake"}, + {"id": 2329, "synset": "ringneck_snake.n.01", "name": "ringneck_snake"}, + {"id": 2330, "synset": "hognose_snake.n.01", "name": "hognose_snake"}, + {"id": 2331, "synset": "leaf-nosed_snake.n.01", "name": "leaf-nosed_snake"}, + {"id": 2332, "synset": "green_snake.n.02", "name": "green_snake"}, + {"id": 2333, "synset": "smooth_green_snake.n.01", "name": "smooth_green_snake"}, + {"id": 2334, "synset": "rough_green_snake.n.01", "name": "rough_green_snake"}, + {"id": 2335, "synset": "green_snake.n.01", "name": "green_snake"}, + {"id": 2336, "synset": "racer.n.04", "name": "racer"}, + {"id": 2337, "synset": "blacksnake.n.02", "name": "blacksnake"}, + {"id": 2338, "synset": "blue_racer.n.01", "name": "blue_racer"}, + {"id": 2339, "synset": "horseshoe_whipsnake.n.01", "name": "horseshoe_whipsnake"}, + {"id": 2340, "synset": "whip-snake.n.01", "name": "whip-snake"}, + {"id": 2341, "synset": "coachwhip.n.02", "name": "coachwhip"}, + {"id": 2342, "synset": "california_whipsnake.n.01", "name": "California_whipsnake"}, + {"id": 2343, "synset": "sonoran_whipsnake.n.01", "name": "Sonoran_whipsnake"}, + {"id": 2344, "synset": "rat_snake.n.01", "name": "rat_snake"}, + {"id": 2345, "synset": "corn_snake.n.01", "name": "corn_snake"}, + {"id": 2346, "synset": "black_rat_snake.n.01", "name": "black_rat_snake"}, + {"id": 2347, "synset": "chicken_snake.n.01", "name": "chicken_snake"}, + {"id": 2348, "synset": "indian_rat_snake.n.01", "name": "Indian_rat_snake"}, + {"id": 2349, "synset": "glossy_snake.n.01", "name": "glossy_snake"}, + {"id": 2350, "synset": "bull_snake.n.01", "name": "bull_snake"}, + {"id": 2351, "synset": "gopher_snake.n.02", "name": "gopher_snake"}, + {"id": 2352, "synset": "pine_snake.n.01", "name": "pine_snake"}, + {"id": 2353, "synset": "king_snake.n.01", "name": "king_snake"}, + {"id": 2354, "synset": "common_kingsnake.n.01", "name": "common_kingsnake"}, + {"id": 2355, "synset": "milk_snake.n.01", "name": "milk_snake"}, + {"id": 2356, "synset": "garter_snake.n.01", "name": "garter_snake"}, + {"id": 2357, "synset": "common_garter_snake.n.01", "name": "common_garter_snake"}, + {"id": 2358, "synset": "ribbon_snake.n.01", "name": "ribbon_snake"}, + {"id": 2359, "synset": "western_ribbon_snake.n.01", "name": "Western_ribbon_snake"}, + {"id": 2360, "synset": "lined_snake.n.01", "name": "lined_snake"}, + {"id": 2361, "synset": "ground_snake.n.01", "name": "ground_snake"}, + {"id": 2362, "synset": "eastern_ground_snake.n.01", "name": "eastern_ground_snake"}, + {"id": 2363, "synset": "water_snake.n.01", "name": "water_snake"}, + {"id": 2364, "synset": "common_water_snake.n.01", "name": "common_water_snake"}, + {"id": 2365, "synset": "water_moccasin.n.02", "name": "water_moccasin"}, + {"id": 2366, "synset": "grass_snake.n.01", "name": "grass_snake"}, + {"id": 2367, "synset": "viperine_grass_snake.n.01", "name": "viperine_grass_snake"}, + {"id": 2368, "synset": "red-bellied_snake.n.01", "name": "red-bellied_snake"}, + {"id": 2369, "synset": "sand_snake.n.01", "name": "sand_snake"}, + {"id": 2370, "synset": "banded_sand_snake.n.01", "name": "banded_sand_snake"}, + {"id": 2371, "synset": "black-headed_snake.n.01", "name": "black-headed_snake"}, + {"id": 2372, "synset": "vine_snake.n.01", "name": "vine_snake"}, + {"id": 2373, "synset": "lyre_snake.n.01", "name": "lyre_snake"}, + {"id": 2374, "synset": "sonoran_lyre_snake.n.01", "name": "Sonoran_lyre_snake"}, + {"id": 2375, "synset": "night_snake.n.01", "name": "night_snake"}, + {"id": 2376, "synset": "blind_snake.n.01", "name": "blind_snake"}, + {"id": 2377, "synset": "western_blind_snake.n.01", "name": "western_blind_snake"}, + {"id": 2378, "synset": "indigo_snake.n.01", "name": "indigo_snake"}, + {"id": 2379, "synset": "eastern_indigo_snake.n.01", "name": "eastern_indigo_snake"}, + {"id": 2380, "synset": "constrictor.n.01", "name": "constrictor"}, + {"id": 2381, "synset": "boa.n.02", "name": "boa"}, + {"id": 2382, "synset": "boa_constrictor.n.01", "name": "boa_constrictor"}, + {"id": 2383, "synset": "rubber_boa.n.01", "name": "rubber_boa"}, + {"id": 2384, "synset": "rosy_boa.n.01", "name": "rosy_boa"}, + {"id": 2385, "synset": "anaconda.n.01", "name": "anaconda"}, + {"id": 2386, "synset": "python.n.01", "name": "python"}, + {"id": 2387, "synset": "carpet_snake.n.01", "name": "carpet_snake"}, + {"id": 2388, "synset": "reticulated_python.n.01", "name": "reticulated_python"}, + {"id": 2389, "synset": "indian_python.n.01", "name": "Indian_python"}, + {"id": 2390, "synset": "rock_python.n.01", "name": "rock_python"}, + {"id": 2391, "synset": "amethystine_python.n.01", "name": "amethystine_python"}, + {"id": 2392, "synset": "elapid.n.01", "name": "elapid"}, + {"id": 2393, "synset": "coral_snake.n.02", "name": "coral_snake"}, + {"id": 2394, "synset": "eastern_coral_snake.n.01", "name": "eastern_coral_snake"}, + {"id": 2395, "synset": "western_coral_snake.n.01", "name": "western_coral_snake"}, + {"id": 2396, "synset": "coral_snake.n.01", "name": "coral_snake"}, + {"id": 2397, "synset": "african_coral_snake.n.01", "name": "African_coral_snake"}, + { + "id": 2398, + "synset": "australian_coral_snake.n.01", + "name": "Australian_coral_snake", + }, + {"id": 2399, "synset": "copperhead.n.02", "name": "copperhead"}, + {"id": 2400, "synset": "cobra.n.01", "name": "cobra"}, + {"id": 2401, "synset": "indian_cobra.n.01", "name": "Indian_cobra"}, + {"id": 2402, "synset": "asp.n.02", "name": "asp"}, + {"id": 2403, "synset": "black-necked_cobra.n.01", "name": "black-necked_cobra"}, + {"id": 2404, "synset": "hamadryad.n.02", "name": "hamadryad"}, + {"id": 2405, "synset": "ringhals.n.01", "name": "ringhals"}, + {"id": 2406, "synset": "mamba.n.01", "name": "mamba"}, + {"id": 2407, "synset": "black_mamba.n.01", "name": "black_mamba"}, + {"id": 2408, "synset": "green_mamba.n.01", "name": "green_mamba"}, + {"id": 2409, "synset": "death_adder.n.01", "name": "death_adder"}, + {"id": 2410, "synset": "tiger_snake.n.01", "name": "tiger_snake"}, + { + "id": 2411, + "synset": "australian_blacksnake.n.01", + "name": "Australian_blacksnake", + }, + {"id": 2412, "synset": "krait.n.01", "name": "krait"}, + {"id": 2413, "synset": "banded_krait.n.01", "name": "banded_krait"}, + {"id": 2414, "synset": "taipan.n.01", "name": "taipan"}, + {"id": 2415, "synset": "sea_snake.n.01", "name": "sea_snake"}, + {"id": 2416, "synset": "viper.n.01", "name": "viper"}, + {"id": 2417, "synset": "adder.n.03", "name": "adder"}, + {"id": 2418, "synset": "asp.n.01", "name": "asp"}, + {"id": 2419, "synset": "puff_adder.n.01", "name": "puff_adder"}, + {"id": 2420, "synset": "gaboon_viper.n.01", "name": "gaboon_viper"}, + {"id": 2421, "synset": "horned_viper.n.01", "name": "horned_viper"}, + {"id": 2422, "synset": "pit_viper.n.01", "name": "pit_viper"}, + {"id": 2423, "synset": "copperhead.n.01", "name": "copperhead"}, + {"id": 2424, "synset": "water_moccasin.n.01", "name": "water_moccasin"}, + {"id": 2425, "synset": "rattlesnake.n.01", "name": "rattlesnake"}, + {"id": 2426, "synset": "diamondback.n.01", "name": "diamondback"}, + {"id": 2427, "synset": "timber_rattlesnake.n.01", "name": "timber_rattlesnake"}, + { + "id": 2428, + "synset": "canebrake_rattlesnake.n.01", + "name": "canebrake_rattlesnake", + }, + {"id": 2429, "synset": "prairie_rattlesnake.n.01", "name": "prairie_rattlesnake"}, + {"id": 2430, "synset": "sidewinder.n.01", "name": "sidewinder"}, + {"id": 2431, "synset": "western_diamondback.n.01", "name": "Western_diamondback"}, + {"id": 2432, "synset": "rock_rattlesnake.n.01", "name": "rock_rattlesnake"}, + {"id": 2433, "synset": "tiger_rattlesnake.n.01", "name": "tiger_rattlesnake"}, + {"id": 2434, "synset": "mojave_rattlesnake.n.01", "name": "Mojave_rattlesnake"}, + {"id": 2435, "synset": "speckled_rattlesnake.n.01", "name": "speckled_rattlesnake"}, + {"id": 2436, "synset": "massasauga.n.02", "name": "massasauga"}, + {"id": 2437, "synset": "ground_rattler.n.01", "name": "ground_rattler"}, + {"id": 2438, "synset": "fer-de-lance.n.01", "name": "fer-de-lance"}, + {"id": 2439, "synset": "carcase.n.01", "name": "carcase"}, + {"id": 2440, "synset": "carrion.n.01", "name": "carrion"}, + {"id": 2441, "synset": "arthropod.n.01", "name": "arthropod"}, + {"id": 2442, "synset": "trilobite.n.01", "name": "trilobite"}, + {"id": 2443, "synset": "arachnid.n.01", "name": "arachnid"}, + {"id": 2444, "synset": "harvestman.n.01", "name": "harvestman"}, + {"id": 2445, "synset": "scorpion.n.03", "name": "scorpion"}, + {"id": 2446, "synset": "false_scorpion.n.01", "name": "false_scorpion"}, + {"id": 2447, "synset": "book_scorpion.n.01", "name": "book_scorpion"}, + {"id": 2448, "synset": "whip-scorpion.n.01", "name": "whip-scorpion"}, + {"id": 2449, "synset": "vinegarroon.n.01", "name": "vinegarroon"}, + {"id": 2450, "synset": "orb-weaving_spider.n.01", "name": "orb-weaving_spider"}, + { + "id": 2451, + "synset": "black_and_gold_garden_spider.n.01", + "name": "black_and_gold_garden_spider", + }, + {"id": 2452, "synset": "barn_spider.n.01", "name": "barn_spider"}, + {"id": 2453, "synset": "garden_spider.n.01", "name": "garden_spider"}, + {"id": 2454, "synset": "comb-footed_spider.n.01", "name": "comb-footed_spider"}, + {"id": 2455, "synset": "black_widow.n.01", "name": "black_widow"}, + {"id": 2456, "synset": "tarantula.n.02", "name": "tarantula"}, + {"id": 2457, "synset": "wolf_spider.n.01", "name": "wolf_spider"}, + {"id": 2458, "synset": "european_wolf_spider.n.01", "name": "European_wolf_spider"}, + {"id": 2459, "synset": "trap-door_spider.n.01", "name": "trap-door_spider"}, + {"id": 2460, "synset": "acarine.n.01", "name": "acarine"}, + {"id": 2461, "synset": "tick.n.02", "name": "tick"}, + {"id": 2462, "synset": "hard_tick.n.01", "name": "hard_tick"}, + {"id": 2463, "synset": "ixodes_dammini.n.01", "name": "Ixodes_dammini"}, + {"id": 2464, "synset": "ixodes_neotomae.n.01", "name": "Ixodes_neotomae"}, + {"id": 2465, "synset": "ixodes_pacificus.n.01", "name": "Ixodes_pacificus"}, + {"id": 2466, "synset": "ixodes_scapularis.n.01", "name": "Ixodes_scapularis"}, + {"id": 2467, "synset": "sheep-tick.n.02", "name": "sheep-tick"}, + {"id": 2468, "synset": "ixodes_persulcatus.n.01", "name": "Ixodes_persulcatus"}, + {"id": 2469, "synset": "ixodes_dentatus.n.01", "name": "Ixodes_dentatus"}, + {"id": 2470, "synset": "ixodes_spinipalpis.n.01", "name": "Ixodes_spinipalpis"}, + {"id": 2471, "synset": "wood_tick.n.01", "name": "wood_tick"}, + {"id": 2472, "synset": "soft_tick.n.01", "name": "soft_tick"}, + {"id": 2473, "synset": "mite.n.02", "name": "mite"}, + {"id": 2474, "synset": "web-spinning_mite.n.01", "name": "web-spinning_mite"}, + {"id": 2475, "synset": "acarid.n.01", "name": "acarid"}, + {"id": 2476, "synset": "trombidiid.n.01", "name": "trombidiid"}, + {"id": 2477, "synset": "trombiculid.n.01", "name": "trombiculid"}, + {"id": 2478, "synset": "harvest_mite.n.01", "name": "harvest_mite"}, + {"id": 2479, "synset": "acarus.n.01", "name": "acarus"}, + {"id": 2480, "synset": "itch_mite.n.01", "name": "itch_mite"}, + {"id": 2481, "synset": "rust_mite.n.01", "name": "rust_mite"}, + {"id": 2482, "synset": "spider_mite.n.01", "name": "spider_mite"}, + {"id": 2483, "synset": "red_spider.n.01", "name": "red_spider"}, + {"id": 2484, "synset": "myriapod.n.01", "name": "myriapod"}, + {"id": 2485, "synset": "garden_centipede.n.01", "name": "garden_centipede"}, + {"id": 2486, "synset": "tardigrade.n.01", "name": "tardigrade"}, + {"id": 2487, "synset": "centipede.n.01", "name": "centipede"}, + {"id": 2488, "synset": "house_centipede.n.01", "name": "house_centipede"}, + {"id": 2489, "synset": "millipede.n.01", "name": "millipede"}, + {"id": 2490, "synset": "sea_spider.n.01", "name": "sea_spider"}, + {"id": 2491, "synset": "merostomata.n.01", "name": "Merostomata"}, + {"id": 2492, "synset": "horseshoe_crab.n.01", "name": "horseshoe_crab"}, + {"id": 2493, "synset": "asian_horseshoe_crab.n.01", "name": "Asian_horseshoe_crab"}, + {"id": 2494, "synset": "eurypterid.n.01", "name": "eurypterid"}, + {"id": 2495, "synset": "tongue_worm.n.01", "name": "tongue_worm"}, + {"id": 2496, "synset": "gallinaceous_bird.n.01", "name": "gallinaceous_bird"}, + {"id": 2497, "synset": "domestic_fowl.n.01", "name": "domestic_fowl"}, + {"id": 2498, "synset": "dorking.n.01", "name": "Dorking"}, + {"id": 2499, "synset": "plymouth_rock.n.02", "name": "Plymouth_Rock"}, + {"id": 2500, "synset": "cornish.n.02", "name": "Cornish"}, + {"id": 2501, "synset": "rock_cornish.n.01", "name": "Rock_Cornish"}, + {"id": 2502, "synset": "game_fowl.n.01", "name": "game_fowl"}, + {"id": 2503, "synset": "cochin.n.01", "name": "cochin"}, + {"id": 2504, "synset": "jungle_fowl.n.01", "name": "jungle_fowl"}, + {"id": 2505, "synset": "jungle_cock.n.01", "name": "jungle_cock"}, + {"id": 2506, "synset": "jungle_hen.n.01", "name": "jungle_hen"}, + {"id": 2507, "synset": "red_jungle_fowl.n.01", "name": "red_jungle_fowl"}, + {"id": 2508, "synset": "bantam.n.01", "name": "bantam"}, + {"id": 2509, "synset": "chick.n.01", "name": "chick"}, + {"id": 2510, "synset": "cockerel.n.01", "name": "cockerel"}, + {"id": 2511, "synset": "capon.n.02", "name": "capon"}, + {"id": 2512, "synset": "hen.n.01", "name": "hen"}, + {"id": 2513, "synset": "cackler.n.01", "name": "cackler"}, + {"id": 2514, "synset": "brood_hen.n.01", "name": "brood_hen"}, + {"id": 2515, "synset": "mother_hen.n.02", "name": "mother_hen"}, + {"id": 2516, "synset": "layer.n.04", "name": "layer"}, + {"id": 2517, "synset": "pullet.n.02", "name": "pullet"}, + {"id": 2518, "synset": "spring_chicken.n.02", "name": "spring_chicken"}, + {"id": 2519, "synset": "rhode_island_red.n.01", "name": "Rhode_Island_red"}, + {"id": 2520, "synset": "dominique.n.01", "name": "Dominique"}, + {"id": 2521, "synset": "orpington.n.01", "name": "Orpington"}, + {"id": 2522, "synset": "turkey.n.01", "name": "turkey"}, + {"id": 2523, "synset": "turkey_cock.n.01", "name": "turkey_cock"}, + {"id": 2524, "synset": "ocellated_turkey.n.01", "name": "ocellated_turkey"}, + {"id": 2525, "synset": "grouse.n.02", "name": "grouse"}, + {"id": 2526, "synset": "black_grouse.n.01", "name": "black_grouse"}, + { + "id": 2527, + "synset": "european_black_grouse.n.01", + "name": "European_black_grouse", + }, + {"id": 2528, "synset": "asian_black_grouse.n.01", "name": "Asian_black_grouse"}, + {"id": 2529, "synset": "blackcock.n.01", "name": "blackcock"}, + {"id": 2530, "synset": "greyhen.n.01", "name": "greyhen"}, + {"id": 2531, "synset": "ptarmigan.n.01", "name": "ptarmigan"}, + {"id": 2532, "synset": "red_grouse.n.01", "name": "red_grouse"}, + {"id": 2533, "synset": "moorhen.n.02", "name": "moorhen"}, + {"id": 2534, "synset": "capercaillie.n.01", "name": "capercaillie"}, + {"id": 2535, "synset": "spruce_grouse.n.01", "name": "spruce_grouse"}, + {"id": 2536, "synset": "sage_grouse.n.01", "name": "sage_grouse"}, + {"id": 2537, "synset": "ruffed_grouse.n.01", "name": "ruffed_grouse"}, + {"id": 2538, "synset": "sharp-tailed_grouse.n.01", "name": "sharp-tailed_grouse"}, + {"id": 2539, "synset": "prairie_chicken.n.01", "name": "prairie_chicken"}, + { + "id": 2540, + "synset": "greater_prairie_chicken.n.01", + "name": "greater_prairie_chicken", + }, + { + "id": 2541, + "synset": "lesser_prairie_chicken.n.01", + "name": "lesser_prairie_chicken", + }, + {"id": 2542, "synset": "heath_hen.n.01", "name": "heath_hen"}, + {"id": 2543, "synset": "guan.n.01", "name": "guan"}, + {"id": 2544, "synset": "curassow.n.01", "name": "curassow"}, + {"id": 2545, "synset": "piping_guan.n.01", "name": "piping_guan"}, + {"id": 2546, "synset": "chachalaca.n.01", "name": "chachalaca"}, + {"id": 2547, "synset": "texas_chachalaca.n.01", "name": "Texas_chachalaca"}, + {"id": 2548, "synset": "megapode.n.01", "name": "megapode"}, + {"id": 2549, "synset": "mallee_fowl.n.01", "name": "mallee_fowl"}, + {"id": 2550, "synset": "mallee_hen.n.01", "name": "mallee_hen"}, + {"id": 2551, "synset": "brush_turkey.n.01", "name": "brush_turkey"}, + {"id": 2552, "synset": "maleo.n.01", "name": "maleo"}, + {"id": 2553, "synset": "phasianid.n.01", "name": "phasianid"}, + {"id": 2554, "synset": "pheasant.n.01", "name": "pheasant"}, + {"id": 2555, "synset": "ring-necked_pheasant.n.01", "name": "ring-necked_pheasant"}, + {"id": 2556, "synset": "afropavo.n.01", "name": "afropavo"}, + {"id": 2557, "synset": "argus.n.02", "name": "argus"}, + {"id": 2558, "synset": "golden_pheasant.n.01", "name": "golden_pheasant"}, + {"id": 2559, "synset": "bobwhite.n.01", "name": "bobwhite"}, + {"id": 2560, "synset": "northern_bobwhite.n.01", "name": "northern_bobwhite"}, + {"id": 2561, "synset": "old_world_quail.n.01", "name": "Old_World_quail"}, + {"id": 2562, "synset": "migratory_quail.n.01", "name": "migratory_quail"}, + {"id": 2563, "synset": "monal.n.01", "name": "monal"}, + {"id": 2564, "synset": "peafowl.n.01", "name": "peafowl"}, + {"id": 2565, "synset": "peachick.n.01", "name": "peachick"}, + {"id": 2566, "synset": "peacock.n.02", "name": "peacock"}, + {"id": 2567, "synset": "peahen.n.01", "name": "peahen"}, + {"id": 2568, "synset": "blue_peafowl.n.01", "name": "blue_peafowl"}, + {"id": 2569, "synset": "green_peafowl.n.01", "name": "green_peafowl"}, + {"id": 2570, "synset": "quail.n.02", "name": "quail"}, + {"id": 2571, "synset": "california_quail.n.01", "name": "California_quail"}, + {"id": 2572, "synset": "tragopan.n.01", "name": "tragopan"}, + {"id": 2573, "synset": "partridge.n.03", "name": "partridge"}, + {"id": 2574, "synset": "hungarian_partridge.n.01", "name": "Hungarian_partridge"}, + {"id": 2575, "synset": "red-legged_partridge.n.01", "name": "red-legged_partridge"}, + {"id": 2576, "synset": "greek_partridge.n.01", "name": "Greek_partridge"}, + {"id": 2577, "synset": "mountain_quail.n.01", "name": "mountain_quail"}, + {"id": 2578, "synset": "guinea_fowl.n.01", "name": "guinea_fowl"}, + {"id": 2579, "synset": "guinea_hen.n.02", "name": "guinea_hen"}, + {"id": 2580, "synset": "hoatzin.n.01", "name": "hoatzin"}, + {"id": 2581, "synset": "tinamou.n.01", "name": "tinamou"}, + {"id": 2582, "synset": "columbiform_bird.n.01", "name": "columbiform_bird"}, + {"id": 2583, "synset": "dodo.n.02", "name": "dodo"}, + {"id": 2584, "synset": "pouter_pigeon.n.01", "name": "pouter_pigeon"}, + {"id": 2585, "synset": "rock_dove.n.01", "name": "rock_dove"}, + {"id": 2586, "synset": "band-tailed_pigeon.n.01", "name": "band-tailed_pigeon"}, + {"id": 2587, "synset": "wood_pigeon.n.01", "name": "wood_pigeon"}, + {"id": 2588, "synset": "turtledove.n.02", "name": "turtledove"}, + {"id": 2589, "synset": "streptopelia_turtur.n.01", "name": "Streptopelia_turtur"}, + {"id": 2590, "synset": "ringdove.n.01", "name": "ringdove"}, + { + "id": 2591, + "synset": "australian_turtledove.n.01", + "name": "Australian_turtledove", + }, + {"id": 2592, "synset": "mourning_dove.n.01", "name": "mourning_dove"}, + {"id": 2593, "synset": "domestic_pigeon.n.01", "name": "domestic_pigeon"}, + {"id": 2594, "synset": "squab.n.03", "name": "squab"}, + {"id": 2595, "synset": "fairy_swallow.n.01", "name": "fairy_swallow"}, + {"id": 2596, "synset": "roller.n.07", "name": "roller"}, + {"id": 2597, "synset": "homing_pigeon.n.01", "name": "homing_pigeon"}, + {"id": 2598, "synset": "carrier_pigeon.n.01", "name": "carrier_pigeon"}, + {"id": 2599, "synset": "passenger_pigeon.n.01", "name": "passenger_pigeon"}, + {"id": 2600, "synset": "sandgrouse.n.01", "name": "sandgrouse"}, + {"id": 2601, "synset": "painted_sandgrouse.n.01", "name": "painted_sandgrouse"}, + { + "id": 2602, + "synset": "pin-tailed_sandgrouse.n.01", + "name": "pin-tailed_sandgrouse", + }, + {"id": 2603, "synset": "pallas's_sandgrouse.n.01", "name": "pallas's_sandgrouse"}, + {"id": 2604, "synset": "popinjay.n.02", "name": "popinjay"}, + {"id": 2605, "synset": "poll.n.04", "name": "poll"}, + {"id": 2606, "synset": "african_grey.n.01", "name": "African_grey"}, + {"id": 2607, "synset": "amazon.n.04", "name": "amazon"}, + {"id": 2608, "synset": "macaw.n.01", "name": "macaw"}, + {"id": 2609, "synset": "kea.n.01", "name": "kea"}, + {"id": 2610, "synset": "cockatoo.n.01", "name": "cockatoo"}, + { + "id": 2611, + "synset": "sulphur-crested_cockatoo.n.01", + "name": "sulphur-crested_cockatoo", + }, + {"id": 2612, "synset": "pink_cockatoo.n.01", "name": "pink_cockatoo"}, + {"id": 2613, "synset": "cockateel.n.01", "name": "cockateel"}, + {"id": 2614, "synset": "lovebird.n.02", "name": "lovebird"}, + {"id": 2615, "synset": "lory.n.01", "name": "lory"}, + {"id": 2616, "synset": "lorikeet.n.01", "name": "lorikeet"}, + {"id": 2617, "synset": "varied_lorikeet.n.01", "name": "varied_Lorikeet"}, + {"id": 2618, "synset": "rainbow_lorikeet.n.01", "name": "rainbow_lorikeet"}, + {"id": 2619, "synset": "carolina_parakeet.n.01", "name": "Carolina_parakeet"}, + {"id": 2620, "synset": "budgerigar.n.01", "name": "budgerigar"}, + {"id": 2621, "synset": "ring-necked_parakeet.n.01", "name": "ring-necked_parakeet"}, + {"id": 2622, "synset": "cuculiform_bird.n.01", "name": "cuculiform_bird"}, + {"id": 2623, "synset": "cuckoo.n.02", "name": "cuckoo"}, + {"id": 2624, "synset": "european_cuckoo.n.01", "name": "European_cuckoo"}, + {"id": 2625, "synset": "black-billed_cuckoo.n.01", "name": "black-billed_cuckoo"}, + {"id": 2626, "synset": "roadrunner.n.01", "name": "roadrunner"}, + {"id": 2627, "synset": "ani.n.01", "name": "ani"}, + {"id": 2628, "synset": "coucal.n.01", "name": "coucal"}, + {"id": 2629, "synset": "crow_pheasant.n.01", "name": "crow_pheasant"}, + {"id": 2630, "synset": "touraco.n.01", "name": "touraco"}, + {"id": 2631, "synset": "coraciiform_bird.n.01", "name": "coraciiform_bird"}, + {"id": 2632, "synset": "roller.n.06", "name": "roller"}, + {"id": 2633, "synset": "european_roller.n.01", "name": "European_roller"}, + {"id": 2634, "synset": "ground_roller.n.01", "name": "ground_roller"}, + {"id": 2635, "synset": "kingfisher.n.01", "name": "kingfisher"}, + {"id": 2636, "synset": "eurasian_kingfisher.n.01", "name": "Eurasian_kingfisher"}, + {"id": 2637, "synset": "belted_kingfisher.n.01", "name": "belted_kingfisher"}, + {"id": 2638, "synset": "kookaburra.n.01", "name": "kookaburra"}, + {"id": 2639, "synset": "bee_eater.n.01", "name": "bee_eater"}, + {"id": 2640, "synset": "hornbill.n.01", "name": "hornbill"}, + {"id": 2641, "synset": "hoopoe.n.01", "name": "hoopoe"}, + {"id": 2642, "synset": "euopean_hoopoe.n.01", "name": "Euopean_hoopoe"}, + {"id": 2643, "synset": "wood_hoopoe.n.01", "name": "wood_hoopoe"}, + {"id": 2644, "synset": "motmot.n.01", "name": "motmot"}, + {"id": 2645, "synset": "tody.n.01", "name": "tody"}, + {"id": 2646, "synset": "apodiform_bird.n.01", "name": "apodiform_bird"}, + {"id": 2647, "synset": "swift.n.03", "name": "swift"}, + {"id": 2648, "synset": "european_swift.n.01", "name": "European_swift"}, + {"id": 2649, "synset": "chimney_swift.n.01", "name": "chimney_swift"}, + {"id": 2650, "synset": "swiftlet.n.01", "name": "swiftlet"}, + {"id": 2651, "synset": "tree_swift.n.01", "name": "tree_swift"}, + {"id": 2652, "synset": "archilochus_colubris.n.01", "name": "Archilochus_colubris"}, + {"id": 2653, "synset": "thornbill.n.01", "name": "thornbill"}, + {"id": 2654, "synset": "goatsucker.n.01", "name": "goatsucker"}, + {"id": 2655, "synset": "european_goatsucker.n.01", "name": "European_goatsucker"}, + {"id": 2656, "synset": "chuck-will's-widow.n.01", "name": "chuck-will's-widow"}, + {"id": 2657, "synset": "whippoorwill.n.01", "name": "whippoorwill"}, + {"id": 2658, "synset": "poorwill.n.01", "name": "poorwill"}, + {"id": 2659, "synset": "frogmouth.n.01", "name": "frogmouth"}, + {"id": 2660, "synset": "oilbird.n.01", "name": "oilbird"}, + {"id": 2661, "synset": "piciform_bird.n.01", "name": "piciform_bird"}, + {"id": 2662, "synset": "woodpecker.n.01", "name": "woodpecker"}, + {"id": 2663, "synset": "green_woodpecker.n.01", "name": "green_woodpecker"}, + {"id": 2664, "synset": "downy_woodpecker.n.01", "name": "downy_woodpecker"}, + {"id": 2665, "synset": "flicker.n.02", "name": "flicker"}, + { + "id": 2666, + "synset": "yellow-shafted_flicker.n.01", + "name": "yellow-shafted_flicker", + }, + {"id": 2667, "synset": "gilded_flicker.n.01", "name": "gilded_flicker"}, + {"id": 2668, "synset": "red-shafted_flicker.n.01", "name": "red-shafted_flicker"}, + {"id": 2669, "synset": "ivorybill.n.01", "name": "ivorybill"}, + {"id": 2670, "synset": "redheaded_woodpecker.n.01", "name": "redheaded_woodpecker"}, + {"id": 2671, "synset": "sapsucker.n.01", "name": "sapsucker"}, + { + "id": 2672, + "synset": "yellow-bellied_sapsucker.n.01", + "name": "yellow-bellied_sapsucker", + }, + { + "id": 2673, + "synset": "red-breasted_sapsucker.n.01", + "name": "red-breasted_sapsucker", + }, + {"id": 2674, "synset": "wryneck.n.02", "name": "wryneck"}, + {"id": 2675, "synset": "piculet.n.01", "name": "piculet"}, + {"id": 2676, "synset": "barbet.n.01", "name": "barbet"}, + {"id": 2677, "synset": "puffbird.n.01", "name": "puffbird"}, + {"id": 2678, "synset": "honey_guide.n.01", "name": "honey_guide"}, + {"id": 2679, "synset": "jacamar.n.01", "name": "jacamar"}, + {"id": 2680, "synset": "toucan.n.01", "name": "toucan"}, + {"id": 2681, "synset": "toucanet.n.01", "name": "toucanet"}, + {"id": 2682, "synset": "trogon.n.01", "name": "trogon"}, + {"id": 2683, "synset": "quetzal.n.02", "name": "quetzal"}, + {"id": 2684, "synset": "resplendent_quetzel.n.01", "name": "resplendent_quetzel"}, + {"id": 2685, "synset": "aquatic_bird.n.01", "name": "aquatic_bird"}, + {"id": 2686, "synset": "waterfowl.n.01", "name": "waterfowl"}, + {"id": 2687, "synset": "anseriform_bird.n.01", "name": "anseriform_bird"}, + {"id": 2688, "synset": "drake.n.02", "name": "drake"}, + {"id": 2689, "synset": "quack-quack.n.01", "name": "quack-quack"}, + {"id": 2690, "synset": "diving_duck.n.01", "name": "diving_duck"}, + {"id": 2691, "synset": "dabbling_duck.n.01", "name": "dabbling_duck"}, + {"id": 2692, "synset": "black_duck.n.01", "name": "black_duck"}, + {"id": 2693, "synset": "teal.n.02", "name": "teal"}, + {"id": 2694, "synset": "greenwing.n.01", "name": "greenwing"}, + {"id": 2695, "synset": "bluewing.n.01", "name": "bluewing"}, + {"id": 2696, "synset": "garganey.n.01", "name": "garganey"}, + {"id": 2697, "synset": "widgeon.n.01", "name": "widgeon"}, + {"id": 2698, "synset": "american_widgeon.n.01", "name": "American_widgeon"}, + {"id": 2699, "synset": "shoveler.n.02", "name": "shoveler"}, + {"id": 2700, "synset": "pintail.n.01", "name": "pintail"}, + {"id": 2701, "synset": "sheldrake.n.02", "name": "sheldrake"}, + {"id": 2702, "synset": "shelduck.n.01", "name": "shelduck"}, + {"id": 2703, "synset": "ruddy_duck.n.01", "name": "ruddy_duck"}, + {"id": 2704, "synset": "bufflehead.n.01", "name": "bufflehead"}, + {"id": 2705, "synset": "goldeneye.n.02", "name": "goldeneye"}, + {"id": 2706, "synset": "barrow's_goldeneye.n.01", "name": "Barrow's_goldeneye"}, + {"id": 2707, "synset": "canvasback.n.01", "name": "canvasback"}, + {"id": 2708, "synset": "pochard.n.01", "name": "pochard"}, + {"id": 2709, "synset": "redhead.n.02", "name": "redhead"}, + {"id": 2710, "synset": "scaup.n.01", "name": "scaup"}, + {"id": 2711, "synset": "greater_scaup.n.01", "name": "greater_scaup"}, + {"id": 2712, "synset": "lesser_scaup.n.01", "name": "lesser_scaup"}, + {"id": 2713, "synset": "wild_duck.n.01", "name": "wild_duck"}, + {"id": 2714, "synset": "wood_duck.n.01", "name": "wood_duck"}, + {"id": 2715, "synset": "wood_drake.n.01", "name": "wood_drake"}, + {"id": 2716, "synset": "mandarin_duck.n.01", "name": "mandarin_duck"}, + {"id": 2717, "synset": "muscovy_duck.n.01", "name": "muscovy_duck"}, + {"id": 2718, "synset": "sea_duck.n.01", "name": "sea_duck"}, + {"id": 2719, "synset": "eider.n.01", "name": "eider"}, + {"id": 2720, "synset": "scoter.n.01", "name": "scoter"}, + {"id": 2721, "synset": "common_scoter.n.01", "name": "common_scoter"}, + {"id": 2722, "synset": "old_squaw.n.01", "name": "old_squaw"}, + {"id": 2723, "synset": "merganser.n.01", "name": "merganser"}, + {"id": 2724, "synset": "goosander.n.01", "name": "goosander"}, + {"id": 2725, "synset": "american_merganser.n.01", "name": "American_merganser"}, + { + "id": 2726, + "synset": "red-breasted_merganser.n.01", + "name": "red-breasted_merganser", + }, + {"id": 2727, "synset": "smew.n.01", "name": "smew"}, + {"id": 2728, "synset": "hooded_merganser.n.01", "name": "hooded_merganser"}, + {"id": 2729, "synset": "gosling.n.01", "name": "gosling"}, + {"id": 2730, "synset": "gander.n.01", "name": "gander"}, + {"id": 2731, "synset": "chinese_goose.n.01", "name": "Chinese_goose"}, + {"id": 2732, "synset": "greylag.n.01", "name": "greylag"}, + {"id": 2733, "synset": "blue_goose.n.01", "name": "blue_goose"}, + {"id": 2734, "synset": "snow_goose.n.01", "name": "snow_goose"}, + {"id": 2735, "synset": "brant.n.01", "name": "brant"}, + {"id": 2736, "synset": "common_brant_goose.n.01", "name": "common_brant_goose"}, + {"id": 2737, "synset": "honker.n.03", "name": "honker"}, + {"id": 2738, "synset": "barnacle_goose.n.01", "name": "barnacle_goose"}, + {"id": 2739, "synset": "coscoroba.n.01", "name": "coscoroba"}, + {"id": 2740, "synset": "swan.n.01", "name": "swan"}, + {"id": 2741, "synset": "cob.n.04", "name": "cob"}, + {"id": 2742, "synset": "pen.n.05", "name": "pen"}, + {"id": 2743, "synset": "cygnet.n.01", "name": "cygnet"}, + {"id": 2744, "synset": "mute_swan.n.01", "name": "mute_swan"}, + {"id": 2745, "synset": "whooper.n.02", "name": "whooper"}, + {"id": 2746, "synset": "tundra_swan.n.01", "name": "tundra_swan"}, + {"id": 2747, "synset": "whistling_swan.n.01", "name": "whistling_swan"}, + {"id": 2748, "synset": "bewick's_swan.n.01", "name": "Bewick's_swan"}, + {"id": 2749, "synset": "trumpeter.n.04", "name": "trumpeter"}, + {"id": 2750, "synset": "black_swan.n.01", "name": "black_swan"}, + {"id": 2751, "synset": "screamer.n.03", "name": "screamer"}, + {"id": 2752, "synset": "horned_screamer.n.01", "name": "horned_screamer"}, + {"id": 2753, "synset": "crested_screamer.n.01", "name": "crested_screamer"}, + {"id": 2754, "synset": "chaja.n.01", "name": "chaja"}, + {"id": 2755, "synset": "mammal.n.01", "name": "mammal"}, + {"id": 2756, "synset": "female_mammal.n.01", "name": "female_mammal"}, + {"id": 2757, "synset": "tusker.n.01", "name": "tusker"}, + {"id": 2758, "synset": "prototherian.n.01", "name": "prototherian"}, + {"id": 2759, "synset": "monotreme.n.01", "name": "monotreme"}, + {"id": 2760, "synset": "echidna.n.02", "name": "echidna"}, + {"id": 2761, "synset": "echidna.n.01", "name": "echidna"}, + {"id": 2762, "synset": "platypus.n.01", "name": "platypus"}, + {"id": 2763, "synset": "marsupial.n.01", "name": "marsupial"}, + {"id": 2764, "synset": "opossum.n.02", "name": "opossum"}, + {"id": 2765, "synset": "common_opossum.n.01", "name": "common_opossum"}, + {"id": 2766, "synset": "crab-eating_opossum.n.01", "name": "crab-eating_opossum"}, + {"id": 2767, "synset": "opossum_rat.n.01", "name": "opossum_rat"}, + {"id": 2768, "synset": "bandicoot.n.01", "name": "bandicoot"}, + { + "id": 2769, + "synset": "rabbit-eared_bandicoot.n.01", + "name": "rabbit-eared_bandicoot", + }, + {"id": 2770, "synset": "kangaroo.n.01", "name": "kangaroo"}, + {"id": 2771, "synset": "giant_kangaroo.n.01", "name": "giant_kangaroo"}, + {"id": 2772, "synset": "wallaby.n.01", "name": "wallaby"}, + {"id": 2773, "synset": "common_wallaby.n.01", "name": "common_wallaby"}, + {"id": 2774, "synset": "hare_wallaby.n.01", "name": "hare_wallaby"}, + {"id": 2775, "synset": "nail-tailed_wallaby.n.01", "name": "nail-tailed_wallaby"}, + {"id": 2776, "synset": "rock_wallaby.n.01", "name": "rock_wallaby"}, + {"id": 2777, "synset": "pademelon.n.01", "name": "pademelon"}, + {"id": 2778, "synset": "tree_wallaby.n.01", "name": "tree_wallaby"}, + {"id": 2779, "synset": "musk_kangaroo.n.01", "name": "musk_kangaroo"}, + {"id": 2780, "synset": "rat_kangaroo.n.01", "name": "rat_kangaroo"}, + {"id": 2781, "synset": "potoroo.n.01", "name": "potoroo"}, + {"id": 2782, "synset": "bettong.n.01", "name": "bettong"}, + {"id": 2783, "synset": "jerboa_kangaroo.n.01", "name": "jerboa_kangaroo"}, + {"id": 2784, "synset": "phalanger.n.01", "name": "phalanger"}, + {"id": 2785, "synset": "cuscus.n.01", "name": "cuscus"}, + { + "id": 2786, + "synset": "brush-tailed_phalanger.n.01", + "name": "brush-tailed_phalanger", + }, + {"id": 2787, "synset": "flying_phalanger.n.01", "name": "flying_phalanger"}, + {"id": 2788, "synset": "wombat.n.01", "name": "wombat"}, + {"id": 2789, "synset": "dasyurid_marsupial.n.01", "name": "dasyurid_marsupial"}, + {"id": 2790, "synset": "dasyure.n.01", "name": "dasyure"}, + {"id": 2791, "synset": "eastern_dasyure.n.01", "name": "eastern_dasyure"}, + {"id": 2792, "synset": "native_cat.n.01", "name": "native_cat"}, + {"id": 2793, "synset": "thylacine.n.01", "name": "thylacine"}, + {"id": 2794, "synset": "tasmanian_devil.n.01", "name": "Tasmanian_devil"}, + {"id": 2795, "synset": "pouched_mouse.n.01", "name": "pouched_mouse"}, + {"id": 2796, "synset": "numbat.n.01", "name": "numbat"}, + {"id": 2797, "synset": "pouched_mole.n.01", "name": "pouched_mole"}, + {"id": 2798, "synset": "placental.n.01", "name": "placental"}, + {"id": 2799, "synset": "livestock.n.01", "name": "livestock"}, + {"id": 2800, "synset": "cow.n.02", "name": "cow"}, + {"id": 2801, "synset": "calf.n.04", "name": "calf"}, + {"id": 2802, "synset": "yearling.n.03", "name": "yearling"}, + {"id": 2803, "synset": "buck.n.05", "name": "buck"}, + {"id": 2804, "synset": "doe.n.02", "name": "doe"}, + {"id": 2805, "synset": "insectivore.n.01", "name": "insectivore"}, + {"id": 2806, "synset": "mole.n.06", "name": "mole"}, + {"id": 2807, "synset": "starnose_mole.n.01", "name": "starnose_mole"}, + {"id": 2808, "synset": "brewer's_mole.n.01", "name": "brewer's_mole"}, + {"id": 2809, "synset": "golden_mole.n.01", "name": "golden_mole"}, + {"id": 2810, "synset": "shrew_mole.n.01", "name": "shrew_mole"}, + {"id": 2811, "synset": "asiatic_shrew_mole.n.01", "name": "Asiatic_shrew_mole"}, + {"id": 2812, "synset": "american_shrew_mole.n.01", "name": "American_shrew_mole"}, + {"id": 2813, "synset": "shrew.n.02", "name": "shrew"}, + {"id": 2814, "synset": "common_shrew.n.01", "name": "common_shrew"}, + {"id": 2815, "synset": "masked_shrew.n.01", "name": "masked_shrew"}, + {"id": 2816, "synset": "short-tailed_shrew.n.01", "name": "short-tailed_shrew"}, + {"id": 2817, "synset": "water_shrew.n.01", "name": "water_shrew"}, + {"id": 2818, "synset": "american_water_shrew.n.01", "name": "American_water_shrew"}, + {"id": 2819, "synset": "european_water_shrew.n.01", "name": "European_water_shrew"}, + { + "id": 2820, + "synset": "mediterranean_water_shrew.n.01", + "name": "Mediterranean_water_shrew", + }, + {"id": 2821, "synset": "least_shrew.n.01", "name": "least_shrew"}, + {"id": 2822, "synset": "hedgehog.n.02", "name": "hedgehog"}, + {"id": 2823, "synset": "tenrec.n.01", "name": "tenrec"}, + {"id": 2824, "synset": "tailless_tenrec.n.01", "name": "tailless_tenrec"}, + {"id": 2825, "synset": "otter_shrew.n.01", "name": "otter_shrew"}, + {"id": 2826, "synset": "eiderdown.n.02", "name": "eiderdown"}, + {"id": 2827, "synset": "aftershaft.n.01", "name": "aftershaft"}, + {"id": 2828, "synset": "sickle_feather.n.01", "name": "sickle_feather"}, + {"id": 2829, "synset": "contour_feather.n.01", "name": "contour_feather"}, + {"id": 2830, "synset": "bastard_wing.n.01", "name": "bastard_wing"}, + {"id": 2831, "synset": "saddle_hackle.n.01", "name": "saddle_hackle"}, + {"id": 2832, "synset": "encolure.n.01", "name": "encolure"}, + {"id": 2833, "synset": "hair.n.06", "name": "hair"}, + {"id": 2834, "synset": "squama.n.01", "name": "squama"}, + {"id": 2835, "synset": "scute.n.01", "name": "scute"}, + {"id": 2836, "synset": "sclerite.n.01", "name": "sclerite"}, + {"id": 2837, "synset": "plastron.n.05", "name": "plastron"}, + {"id": 2838, "synset": "scallop_shell.n.01", "name": "scallop_shell"}, + {"id": 2839, "synset": "oyster_shell.n.01", "name": "oyster_shell"}, + {"id": 2840, "synset": "theca.n.02", "name": "theca"}, + {"id": 2841, "synset": "invertebrate.n.01", "name": "invertebrate"}, + {"id": 2842, "synset": "sponge.n.04", "name": "sponge"}, + {"id": 2843, "synset": "choanocyte.n.01", "name": "choanocyte"}, + {"id": 2844, "synset": "glass_sponge.n.01", "name": "glass_sponge"}, + { + "id": 2845, + "synset": "venus's_flower_basket.n.01", + "name": "Venus's_flower_basket", + }, + {"id": 2846, "synset": "metazoan.n.01", "name": "metazoan"}, + {"id": 2847, "synset": "coelenterate.n.01", "name": "coelenterate"}, + {"id": 2848, "synset": "planula.n.01", "name": "planula"}, + {"id": 2849, "synset": "polyp.n.02", "name": "polyp"}, + {"id": 2850, "synset": "medusa.n.02", "name": "medusa"}, + {"id": 2851, "synset": "jellyfish.n.02", "name": "jellyfish"}, + {"id": 2852, "synset": "scyphozoan.n.01", "name": "scyphozoan"}, + { + "id": 2853, + "synset": "chrysaora_quinquecirrha.n.01", + "name": "Chrysaora_quinquecirrha", + }, + {"id": 2854, "synset": "hydrozoan.n.01", "name": "hydrozoan"}, + {"id": 2855, "synset": "hydra.n.04", "name": "hydra"}, + {"id": 2856, "synset": "siphonophore.n.01", "name": "siphonophore"}, + {"id": 2857, "synset": "nanomia.n.01", "name": "nanomia"}, + { + "id": 2858, + "synset": "portuguese_man-of-war.n.01", + "name": "Portuguese_man-of-war", + }, + {"id": 2859, "synset": "praya.n.01", "name": "praya"}, + {"id": 2860, "synset": "apolemia.n.01", "name": "apolemia"}, + {"id": 2861, "synset": "anthozoan.n.01", "name": "anthozoan"}, + {"id": 2862, "synset": "sea_anemone.n.01", "name": "sea_anemone"}, + {"id": 2863, "synset": "actinia.n.02", "name": "actinia"}, + {"id": 2864, "synset": "sea_pen.n.01", "name": "sea_pen"}, + {"id": 2865, "synset": "coral.n.04", "name": "coral"}, + {"id": 2866, "synset": "gorgonian.n.01", "name": "gorgonian"}, + {"id": 2867, "synset": "sea_feather.n.01", "name": "sea_feather"}, + {"id": 2868, "synset": "sea_fan.n.01", "name": "sea_fan"}, + {"id": 2869, "synset": "red_coral.n.02", "name": "red_coral"}, + {"id": 2870, "synset": "stony_coral.n.01", "name": "stony_coral"}, + {"id": 2871, "synset": "brain_coral.n.01", "name": "brain_coral"}, + {"id": 2872, "synset": "staghorn_coral.n.01", "name": "staghorn_coral"}, + {"id": 2873, "synset": "mushroom_coral.n.01", "name": "mushroom_coral"}, + {"id": 2874, "synset": "ctenophore.n.01", "name": "ctenophore"}, + {"id": 2875, "synset": "beroe.n.01", "name": "beroe"}, + {"id": 2876, "synset": "platyctenean.n.01", "name": "platyctenean"}, + {"id": 2877, "synset": "sea_gooseberry.n.01", "name": "sea_gooseberry"}, + {"id": 2878, "synset": "venus's_girdle.n.01", "name": "Venus's_girdle"}, + {"id": 2879, "synset": "worm.n.01", "name": "worm"}, + {"id": 2880, "synset": "helminth.n.01", "name": "helminth"}, + {"id": 2881, "synset": "woodworm.n.01", "name": "woodworm"}, + {"id": 2882, "synset": "woodborer.n.01", "name": "woodborer"}, + {"id": 2883, "synset": "acanthocephalan.n.01", "name": "acanthocephalan"}, + {"id": 2884, "synset": "arrowworm.n.01", "name": "arrowworm"}, + {"id": 2885, "synset": "bladder_worm.n.01", "name": "bladder_worm"}, + {"id": 2886, "synset": "flatworm.n.01", "name": "flatworm"}, + {"id": 2887, "synset": "planarian.n.01", "name": "planarian"}, + {"id": 2888, "synset": "fluke.n.05", "name": "fluke"}, + {"id": 2889, "synset": "cercaria.n.01", "name": "cercaria"}, + {"id": 2890, "synset": "liver_fluke.n.01", "name": "liver_fluke"}, + {"id": 2891, "synset": "fasciolopsis_buski.n.01", "name": "Fasciolopsis_buski"}, + {"id": 2892, "synset": "schistosome.n.01", "name": "schistosome"}, + {"id": 2893, "synset": "tapeworm.n.01", "name": "tapeworm"}, + {"id": 2894, "synset": "echinococcus.n.01", "name": "echinococcus"}, + {"id": 2895, "synset": "taenia.n.02", "name": "taenia"}, + {"id": 2896, "synset": "ribbon_worm.n.01", "name": "ribbon_worm"}, + {"id": 2897, "synset": "beard_worm.n.01", "name": "beard_worm"}, + {"id": 2898, "synset": "rotifer.n.01", "name": "rotifer"}, + {"id": 2899, "synset": "nematode.n.01", "name": "nematode"}, + {"id": 2900, "synset": "common_roundworm.n.01", "name": "common_roundworm"}, + {"id": 2901, "synset": "chicken_roundworm.n.01", "name": "chicken_roundworm"}, + {"id": 2902, "synset": "pinworm.n.01", "name": "pinworm"}, + {"id": 2903, "synset": "eelworm.n.01", "name": "eelworm"}, + {"id": 2904, "synset": "vinegar_eel.n.01", "name": "vinegar_eel"}, + {"id": 2905, "synset": "trichina.n.01", "name": "trichina"}, + {"id": 2906, "synset": "hookworm.n.01", "name": "hookworm"}, + {"id": 2907, "synset": "filaria.n.02", "name": "filaria"}, + {"id": 2908, "synset": "guinea_worm.n.02", "name": "Guinea_worm"}, + {"id": 2909, "synset": "annelid.n.01", "name": "annelid"}, + {"id": 2910, "synset": "archiannelid.n.01", "name": "archiannelid"}, + {"id": 2911, "synset": "oligochaete.n.01", "name": "oligochaete"}, + {"id": 2912, "synset": "earthworm.n.01", "name": "earthworm"}, + {"id": 2913, "synset": "polychaete.n.01", "name": "polychaete"}, + {"id": 2914, "synset": "lugworm.n.01", "name": "lugworm"}, + {"id": 2915, "synset": "sea_mouse.n.01", "name": "sea_mouse"}, + {"id": 2916, "synset": "bloodworm.n.01", "name": "bloodworm"}, + {"id": 2917, "synset": "leech.n.01", "name": "leech"}, + {"id": 2918, "synset": "medicinal_leech.n.01", "name": "medicinal_leech"}, + {"id": 2919, "synset": "horseleech.n.01", "name": "horseleech"}, + {"id": 2920, "synset": "mollusk.n.01", "name": "mollusk"}, + {"id": 2921, "synset": "scaphopod.n.01", "name": "scaphopod"}, + {"id": 2922, "synset": "tooth_shell.n.01", "name": "tooth_shell"}, + {"id": 2923, "synset": "gastropod.n.01", "name": "gastropod"}, + {"id": 2924, "synset": "abalone.n.01", "name": "abalone"}, + {"id": 2925, "synset": "ormer.n.01", "name": "ormer"}, + {"id": 2926, "synset": "scorpion_shell.n.01", "name": "scorpion_shell"}, + {"id": 2927, "synset": "conch.n.01", "name": "conch"}, + {"id": 2928, "synset": "giant_conch.n.01", "name": "giant_conch"}, + {"id": 2929, "synset": "snail.n.01", "name": "snail"}, + {"id": 2930, "synset": "edible_snail.n.01", "name": "edible_snail"}, + {"id": 2931, "synset": "garden_snail.n.01", "name": "garden_snail"}, + {"id": 2932, "synset": "brown_snail.n.01", "name": "brown_snail"}, + {"id": 2933, "synset": "helix_hortensis.n.01", "name": "Helix_hortensis"}, + {"id": 2934, "synset": "slug.n.07", "name": "slug"}, + {"id": 2935, "synset": "seasnail.n.02", "name": "seasnail"}, + {"id": 2936, "synset": "neritid.n.01", "name": "neritid"}, + {"id": 2937, "synset": "nerita.n.01", "name": "nerita"}, + {"id": 2938, "synset": "bleeding_tooth.n.01", "name": "bleeding_tooth"}, + {"id": 2939, "synset": "neritina.n.01", "name": "neritina"}, + {"id": 2940, "synset": "whelk.n.02", "name": "whelk"}, + {"id": 2941, "synset": "moon_shell.n.01", "name": "moon_shell"}, + {"id": 2942, "synset": "periwinkle.n.04", "name": "periwinkle"}, + {"id": 2943, "synset": "limpet.n.02", "name": "limpet"}, + {"id": 2944, "synset": "common_limpet.n.01", "name": "common_limpet"}, + {"id": 2945, "synset": "keyhole_limpet.n.01", "name": "keyhole_limpet"}, + {"id": 2946, "synset": "river_limpet.n.01", "name": "river_limpet"}, + {"id": 2947, "synset": "sea_slug.n.01", "name": "sea_slug"}, + {"id": 2948, "synset": "sea_hare.n.01", "name": "sea_hare"}, + { + "id": 2949, + "synset": "hermissenda_crassicornis.n.01", + "name": "Hermissenda_crassicornis", + }, + {"id": 2950, "synset": "bubble_shell.n.01", "name": "bubble_shell"}, + {"id": 2951, "synset": "physa.n.01", "name": "physa"}, + {"id": 2952, "synset": "cowrie.n.01", "name": "cowrie"}, + {"id": 2953, "synset": "money_cowrie.n.01", "name": "money_cowrie"}, + {"id": 2954, "synset": "tiger_cowrie.n.01", "name": "tiger_cowrie"}, + {"id": 2955, "synset": "solenogaster.n.01", "name": "solenogaster"}, + {"id": 2956, "synset": "chiton.n.02", "name": "chiton"}, + {"id": 2957, "synset": "bivalve.n.01", "name": "bivalve"}, + {"id": 2958, "synset": "spat.n.03", "name": "spat"}, + {"id": 2959, "synset": "clam.n.01", "name": "clam"}, + {"id": 2960, "synset": "soft-shell_clam.n.02", "name": "soft-shell_clam"}, + {"id": 2961, "synset": "quahog.n.02", "name": "quahog"}, + {"id": 2962, "synset": "littleneck.n.02", "name": "littleneck"}, + {"id": 2963, "synset": "cherrystone.n.02", "name": "cherrystone"}, + {"id": 2964, "synset": "geoduck.n.01", "name": "geoduck"}, + {"id": 2965, "synset": "razor_clam.n.01", "name": "razor_clam"}, + {"id": 2966, "synset": "giant_clam.n.01", "name": "giant_clam"}, + {"id": 2967, "synset": "cockle.n.02", "name": "cockle"}, + {"id": 2968, "synset": "edible_cockle.n.01", "name": "edible_cockle"}, + {"id": 2969, "synset": "oyster.n.01", "name": "oyster"}, + {"id": 2970, "synset": "japanese_oyster.n.01", "name": "Japanese_oyster"}, + {"id": 2971, "synset": "virginia_oyster.n.01", "name": "Virginia_oyster"}, + {"id": 2972, "synset": "pearl_oyster.n.01", "name": "pearl_oyster"}, + {"id": 2973, "synset": "saddle_oyster.n.01", "name": "saddle_oyster"}, + {"id": 2974, "synset": "window_oyster.n.01", "name": "window_oyster"}, + {"id": 2975, "synset": "ark_shell.n.01", "name": "ark_shell"}, + {"id": 2976, "synset": "blood_clam.n.01", "name": "blood_clam"}, + {"id": 2977, "synset": "mussel.n.02", "name": "mussel"}, + {"id": 2978, "synset": "marine_mussel.n.01", "name": "marine_mussel"}, + {"id": 2979, "synset": "edible_mussel.n.01", "name": "edible_mussel"}, + {"id": 2980, "synset": "freshwater_mussel.n.01", "name": "freshwater_mussel"}, + { + "id": 2981, + "synset": "pearly-shelled_mussel.n.01", + "name": "pearly-shelled_mussel", + }, + {"id": 2982, "synset": "thin-shelled_mussel.n.01", "name": "thin-shelled_mussel"}, + {"id": 2983, "synset": "zebra_mussel.n.01", "name": "zebra_mussel"}, + {"id": 2984, "synset": "scallop.n.04", "name": "scallop"}, + {"id": 2985, "synset": "bay_scallop.n.02", "name": "bay_scallop"}, + {"id": 2986, "synset": "sea_scallop.n.02", "name": "sea_scallop"}, + {"id": 2987, "synset": "shipworm.n.01", "name": "shipworm"}, + {"id": 2988, "synset": "teredo.n.01", "name": "teredo"}, + {"id": 2989, "synset": "piddock.n.01", "name": "piddock"}, + {"id": 2990, "synset": "cephalopod.n.01", "name": "cephalopod"}, + {"id": 2991, "synset": "chambered_nautilus.n.01", "name": "chambered_nautilus"}, + {"id": 2992, "synset": "octopod.n.01", "name": "octopod"}, + {"id": 2993, "synset": "paper_nautilus.n.01", "name": "paper_nautilus"}, + {"id": 2994, "synset": "decapod.n.02", "name": "decapod"}, + {"id": 2995, "synset": "squid.n.02", "name": "squid"}, + {"id": 2996, "synset": "loligo.n.01", "name": "loligo"}, + {"id": 2997, "synset": "ommastrephes.n.01", "name": "ommastrephes"}, + {"id": 2998, "synset": "architeuthis.n.01", "name": "architeuthis"}, + {"id": 2999, "synset": "cuttlefish.n.01", "name": "cuttlefish"}, + {"id": 3000, "synset": "spirula.n.01", "name": "spirula"}, + {"id": 3001, "synset": "crustacean.n.01", "name": "crustacean"}, + { + "id": 3002, + "synset": "malacostracan_crustacean.n.01", + "name": "malacostracan_crustacean", + }, + {"id": 3003, "synset": "decapod_crustacean.n.01", "name": "decapod_crustacean"}, + {"id": 3004, "synset": "brachyuran.n.01", "name": "brachyuran"}, + {"id": 3005, "synset": "stone_crab.n.02", "name": "stone_crab"}, + {"id": 3006, "synset": "hard-shell_crab.n.01", "name": "hard-shell_crab"}, + {"id": 3007, "synset": "soft-shell_crab.n.02", "name": "soft-shell_crab"}, + {"id": 3008, "synset": "dungeness_crab.n.02", "name": "Dungeness_crab"}, + {"id": 3009, "synset": "rock_crab.n.01", "name": "rock_crab"}, + {"id": 3010, "synset": "jonah_crab.n.01", "name": "Jonah_crab"}, + {"id": 3011, "synset": "swimming_crab.n.01", "name": "swimming_crab"}, + {"id": 3012, "synset": "english_lady_crab.n.01", "name": "English_lady_crab"}, + {"id": 3013, "synset": "american_lady_crab.n.01", "name": "American_lady_crab"}, + {"id": 3014, "synset": "blue_crab.n.02", "name": "blue_crab"}, + {"id": 3015, "synset": "fiddler_crab.n.01", "name": "fiddler_crab"}, + {"id": 3016, "synset": "pea_crab.n.01", "name": "pea_crab"}, + {"id": 3017, "synset": "king_crab.n.03", "name": "king_crab"}, + {"id": 3018, "synset": "spider_crab.n.01", "name": "spider_crab"}, + {"id": 3019, "synset": "european_spider_crab.n.01", "name": "European_spider_crab"}, + {"id": 3020, "synset": "giant_crab.n.01", "name": "giant_crab"}, + {"id": 3021, "synset": "lobster.n.02", "name": "lobster"}, + {"id": 3022, "synset": "true_lobster.n.01", "name": "true_lobster"}, + {"id": 3023, "synset": "american_lobster.n.02", "name": "American_lobster"}, + {"id": 3024, "synset": "european_lobster.n.02", "name": "European_lobster"}, + {"id": 3025, "synset": "cape_lobster.n.01", "name": "Cape_lobster"}, + {"id": 3026, "synset": "norway_lobster.n.01", "name": "Norway_lobster"}, + {"id": 3027, "synset": "crayfish.n.03", "name": "crayfish"}, + {"id": 3028, "synset": "old_world_crayfish.n.01", "name": "Old_World_crayfish"}, + {"id": 3029, "synset": "american_crayfish.n.01", "name": "American_crayfish"}, + {"id": 3030, "synset": "hermit_crab.n.01", "name": "hermit_crab"}, + {"id": 3031, "synset": "shrimp.n.03", "name": "shrimp"}, + {"id": 3032, "synset": "snapping_shrimp.n.01", "name": "snapping_shrimp"}, + {"id": 3033, "synset": "prawn.n.02", "name": "prawn"}, + {"id": 3034, "synset": "long-clawed_prawn.n.01", "name": "long-clawed_prawn"}, + {"id": 3035, "synset": "tropical_prawn.n.01", "name": "tropical_prawn"}, + {"id": 3036, "synset": "krill.n.01", "name": "krill"}, + {"id": 3037, "synset": "euphausia_pacifica.n.01", "name": "Euphausia_pacifica"}, + {"id": 3038, "synset": "opossum_shrimp.n.01", "name": "opossum_shrimp"}, + {"id": 3039, "synset": "stomatopod.n.01", "name": "stomatopod"}, + {"id": 3040, "synset": "mantis_shrimp.n.01", "name": "mantis_shrimp"}, + {"id": 3041, "synset": "squilla.n.01", "name": "squilla"}, + {"id": 3042, "synset": "isopod.n.01", "name": "isopod"}, + {"id": 3043, "synset": "woodlouse.n.01", "name": "woodlouse"}, + {"id": 3044, "synset": "pill_bug.n.01", "name": "pill_bug"}, + {"id": 3045, "synset": "sow_bug.n.01", "name": "sow_bug"}, + {"id": 3046, "synset": "sea_louse.n.01", "name": "sea_louse"}, + {"id": 3047, "synset": "amphipod.n.01", "name": "amphipod"}, + {"id": 3048, "synset": "skeleton_shrimp.n.01", "name": "skeleton_shrimp"}, + {"id": 3049, "synset": "whale_louse.n.01", "name": "whale_louse"}, + {"id": 3050, "synset": "daphnia.n.01", "name": "daphnia"}, + {"id": 3051, "synset": "fairy_shrimp.n.01", "name": "fairy_shrimp"}, + {"id": 3052, "synset": "brine_shrimp.n.01", "name": "brine_shrimp"}, + {"id": 3053, "synset": "tadpole_shrimp.n.01", "name": "tadpole_shrimp"}, + {"id": 3054, "synset": "copepod.n.01", "name": "copepod"}, + {"id": 3055, "synset": "cyclops.n.02", "name": "cyclops"}, + {"id": 3056, "synset": "seed_shrimp.n.01", "name": "seed_shrimp"}, + {"id": 3057, "synset": "barnacle.n.01", "name": "barnacle"}, + {"id": 3058, "synset": "acorn_barnacle.n.01", "name": "acorn_barnacle"}, + {"id": 3059, "synset": "goose_barnacle.n.01", "name": "goose_barnacle"}, + {"id": 3060, "synset": "onychophoran.n.01", "name": "onychophoran"}, + {"id": 3061, "synset": "wading_bird.n.01", "name": "wading_bird"}, + {"id": 3062, "synset": "stork.n.01", "name": "stork"}, + {"id": 3063, "synset": "white_stork.n.01", "name": "white_stork"}, + {"id": 3064, "synset": "black_stork.n.01", "name": "black_stork"}, + {"id": 3065, "synset": "adjutant_bird.n.01", "name": "adjutant_bird"}, + {"id": 3066, "synset": "marabou.n.01", "name": "marabou"}, + {"id": 3067, "synset": "openbill.n.01", "name": "openbill"}, + {"id": 3068, "synset": "jabiru.n.03", "name": "jabiru"}, + {"id": 3069, "synset": "saddlebill.n.01", "name": "saddlebill"}, + {"id": 3070, "synset": "policeman_bird.n.01", "name": "policeman_bird"}, + {"id": 3071, "synset": "wood_ibis.n.02", "name": "wood_ibis"}, + {"id": 3072, "synset": "shoebill.n.01", "name": "shoebill"}, + {"id": 3073, "synset": "ibis.n.01", "name": "ibis"}, + {"id": 3074, "synset": "wood_ibis.n.01", "name": "wood_ibis"}, + {"id": 3075, "synset": "sacred_ibis.n.01", "name": "sacred_ibis"}, + {"id": 3076, "synset": "spoonbill.n.01", "name": "spoonbill"}, + {"id": 3077, "synset": "common_spoonbill.n.01", "name": "common_spoonbill"}, + {"id": 3078, "synset": "roseate_spoonbill.n.01", "name": "roseate_spoonbill"}, + {"id": 3079, "synset": "great_blue_heron.n.01", "name": "great_blue_heron"}, + {"id": 3080, "synset": "great_white_heron.n.03", "name": "great_white_heron"}, + {"id": 3081, "synset": "egret.n.01", "name": "egret"}, + {"id": 3082, "synset": "little_blue_heron.n.01", "name": "little_blue_heron"}, + {"id": 3083, "synset": "snowy_egret.n.01", "name": "snowy_egret"}, + {"id": 3084, "synset": "little_egret.n.01", "name": "little_egret"}, + {"id": 3085, "synset": "great_white_heron.n.02", "name": "great_white_heron"}, + {"id": 3086, "synset": "american_egret.n.01", "name": "American_egret"}, + {"id": 3087, "synset": "cattle_egret.n.01", "name": "cattle_egret"}, + {"id": 3088, "synset": "night_heron.n.01", "name": "night_heron"}, + { + "id": 3089, + "synset": "black-crowned_night_heron.n.01", + "name": "black-crowned_night_heron", + }, + { + "id": 3090, + "synset": "yellow-crowned_night_heron.n.01", + "name": "yellow-crowned_night_heron", + }, + {"id": 3091, "synset": "boatbill.n.01", "name": "boatbill"}, + {"id": 3092, "synset": "bittern.n.01", "name": "bittern"}, + {"id": 3093, "synset": "american_bittern.n.01", "name": "American_bittern"}, + {"id": 3094, "synset": "european_bittern.n.01", "name": "European_bittern"}, + {"id": 3095, "synset": "least_bittern.n.01", "name": "least_bittern"}, + {"id": 3096, "synset": "crane.n.05", "name": "crane"}, + {"id": 3097, "synset": "whooping_crane.n.01", "name": "whooping_crane"}, + {"id": 3098, "synset": "courlan.n.01", "name": "courlan"}, + {"id": 3099, "synset": "limpkin.n.01", "name": "limpkin"}, + {"id": 3100, "synset": "crested_cariama.n.01", "name": "crested_cariama"}, + {"id": 3101, "synset": "chunga.n.01", "name": "chunga"}, + {"id": 3102, "synset": "rail.n.05", "name": "rail"}, + {"id": 3103, "synset": "weka.n.01", "name": "weka"}, + {"id": 3104, "synset": "crake.n.01", "name": "crake"}, + {"id": 3105, "synset": "corncrake.n.01", "name": "corncrake"}, + {"id": 3106, "synset": "spotted_crake.n.01", "name": "spotted_crake"}, + {"id": 3107, "synset": "gallinule.n.01", "name": "gallinule"}, + {"id": 3108, "synset": "florida_gallinule.n.01", "name": "Florida_gallinule"}, + {"id": 3109, "synset": "moorhen.n.01", "name": "moorhen"}, + {"id": 3110, "synset": "purple_gallinule.n.01", "name": "purple_gallinule"}, + {"id": 3111, "synset": "european_gallinule.n.01", "name": "European_gallinule"}, + {"id": 3112, "synset": "american_gallinule.n.01", "name": "American_gallinule"}, + {"id": 3113, "synset": "notornis.n.01", "name": "notornis"}, + {"id": 3114, "synset": "coot.n.01", "name": "coot"}, + {"id": 3115, "synset": "american_coot.n.01", "name": "American_coot"}, + {"id": 3116, "synset": "old_world_coot.n.01", "name": "Old_World_coot"}, + {"id": 3117, "synset": "bustard.n.01", "name": "bustard"}, + {"id": 3118, "synset": "great_bustard.n.01", "name": "great_bustard"}, + {"id": 3119, "synset": "plain_turkey.n.01", "name": "plain_turkey"}, + {"id": 3120, "synset": "button_quail.n.01", "name": "button_quail"}, + {"id": 3121, "synset": "striped_button_quail.n.01", "name": "striped_button_quail"}, + {"id": 3122, "synset": "plain_wanderer.n.01", "name": "plain_wanderer"}, + {"id": 3123, "synset": "trumpeter.n.03", "name": "trumpeter"}, + {"id": 3124, "synset": "brazilian_trumpeter.n.01", "name": "Brazilian_trumpeter"}, + {"id": 3125, "synset": "shorebird.n.01", "name": "shorebird"}, + {"id": 3126, "synset": "plover.n.01", "name": "plover"}, + {"id": 3127, "synset": "piping_plover.n.01", "name": "piping_plover"}, + {"id": 3128, "synset": "killdeer.n.01", "name": "killdeer"}, + {"id": 3129, "synset": "dotterel.n.01", "name": "dotterel"}, + {"id": 3130, "synset": "golden_plover.n.01", "name": "golden_plover"}, + {"id": 3131, "synset": "lapwing.n.01", "name": "lapwing"}, + {"id": 3132, "synset": "turnstone.n.01", "name": "turnstone"}, + {"id": 3133, "synset": "ruddy_turnstone.n.01", "name": "ruddy_turnstone"}, + {"id": 3134, "synset": "black_turnstone.n.01", "name": "black_turnstone"}, + {"id": 3135, "synset": "sandpiper.n.01", "name": "sandpiper"}, + {"id": 3136, "synset": "surfbird.n.01", "name": "surfbird"}, + {"id": 3137, "synset": "european_sandpiper.n.01", "name": "European_sandpiper"}, + {"id": 3138, "synset": "spotted_sandpiper.n.01", "name": "spotted_sandpiper"}, + {"id": 3139, "synset": "least_sandpiper.n.01", "name": "least_sandpiper"}, + {"id": 3140, "synset": "red-backed_sandpiper.n.01", "name": "red-backed_sandpiper"}, + {"id": 3141, "synset": "greenshank.n.01", "name": "greenshank"}, + {"id": 3142, "synset": "redshank.n.01", "name": "redshank"}, + {"id": 3143, "synset": "yellowlegs.n.01", "name": "yellowlegs"}, + {"id": 3144, "synset": "greater_yellowlegs.n.01", "name": "greater_yellowlegs"}, + {"id": 3145, "synset": "lesser_yellowlegs.n.01", "name": "lesser_yellowlegs"}, + {"id": 3146, "synset": "pectoral_sandpiper.n.01", "name": "pectoral_sandpiper"}, + {"id": 3147, "synset": "knot.n.07", "name": "knot"}, + {"id": 3148, "synset": "curlew_sandpiper.n.01", "name": "curlew_sandpiper"}, + {"id": 3149, "synset": "sanderling.n.01", "name": "sanderling"}, + {"id": 3150, "synset": "upland_sandpiper.n.01", "name": "upland_sandpiper"}, + {"id": 3151, "synset": "ruff.n.03", "name": "ruff"}, + {"id": 3152, "synset": "reeve.n.01", "name": "reeve"}, + {"id": 3153, "synset": "tattler.n.02", "name": "tattler"}, + {"id": 3154, "synset": "polynesian_tattler.n.01", "name": "Polynesian_tattler"}, + {"id": 3155, "synset": "willet.n.01", "name": "willet"}, + {"id": 3156, "synset": "woodcock.n.01", "name": "woodcock"}, + {"id": 3157, "synset": "eurasian_woodcock.n.01", "name": "Eurasian_woodcock"}, + {"id": 3158, "synset": "american_woodcock.n.01", "name": "American_woodcock"}, + {"id": 3159, "synset": "snipe.n.01", "name": "snipe"}, + {"id": 3160, "synset": "whole_snipe.n.01", "name": "whole_snipe"}, + {"id": 3161, "synset": "wilson's_snipe.n.01", "name": "Wilson's_snipe"}, + {"id": 3162, "synset": "great_snipe.n.01", "name": "great_snipe"}, + {"id": 3163, "synset": "jacksnipe.n.01", "name": "jacksnipe"}, + {"id": 3164, "synset": "dowitcher.n.01", "name": "dowitcher"}, + {"id": 3165, "synset": "greyback.n.02", "name": "greyback"}, + {"id": 3166, "synset": "red-breasted_snipe.n.01", "name": "red-breasted_snipe"}, + {"id": 3167, "synset": "curlew.n.01", "name": "curlew"}, + {"id": 3168, "synset": "european_curlew.n.01", "name": "European_curlew"}, + {"id": 3169, "synset": "eskimo_curlew.n.01", "name": "Eskimo_curlew"}, + {"id": 3170, "synset": "godwit.n.01", "name": "godwit"}, + {"id": 3171, "synset": "hudsonian_godwit.n.01", "name": "Hudsonian_godwit"}, + {"id": 3172, "synset": "stilt.n.04", "name": "stilt"}, + {"id": 3173, "synset": "black-necked_stilt.n.01", "name": "black-necked_stilt"}, + {"id": 3174, "synset": "black-winged_stilt.n.01", "name": "black-winged_stilt"}, + {"id": 3175, "synset": "white-headed_stilt.n.01", "name": "white-headed_stilt"}, + {"id": 3176, "synset": "kaki.n.02", "name": "kaki"}, + {"id": 3177, "synset": "stilt.n.03", "name": "stilt"}, + {"id": 3178, "synset": "banded_stilt.n.01", "name": "banded_stilt"}, + {"id": 3179, "synset": "avocet.n.01", "name": "avocet"}, + {"id": 3180, "synset": "oystercatcher.n.01", "name": "oystercatcher"}, + {"id": 3181, "synset": "phalarope.n.01", "name": "phalarope"}, + {"id": 3182, "synset": "red_phalarope.n.01", "name": "red_phalarope"}, + {"id": 3183, "synset": "northern_phalarope.n.01", "name": "northern_phalarope"}, + {"id": 3184, "synset": "wilson's_phalarope.n.01", "name": "Wilson's_phalarope"}, + {"id": 3185, "synset": "pratincole.n.01", "name": "pratincole"}, + {"id": 3186, "synset": "courser.n.04", "name": "courser"}, + { + "id": 3187, + "synset": "cream-colored_courser.n.01", + "name": "cream-colored_courser", + }, + {"id": 3188, "synset": "crocodile_bird.n.01", "name": "crocodile_bird"}, + {"id": 3189, "synset": "stone_curlew.n.01", "name": "stone_curlew"}, + {"id": 3190, "synset": "coastal_diving_bird.n.01", "name": "coastal_diving_bird"}, + {"id": 3191, "synset": "larid.n.01", "name": "larid"}, + {"id": 3192, "synset": "mew.n.02", "name": "mew"}, + {"id": 3193, "synset": "black-backed_gull.n.01", "name": "black-backed_gull"}, + {"id": 3194, "synset": "herring_gull.n.01", "name": "herring_gull"}, + {"id": 3195, "synset": "laughing_gull.n.01", "name": "laughing_gull"}, + {"id": 3196, "synset": "ivory_gull.n.01", "name": "ivory_gull"}, + {"id": 3197, "synset": "kittiwake.n.01", "name": "kittiwake"}, + {"id": 3198, "synset": "tern.n.01", "name": "tern"}, + {"id": 3199, "synset": "sea_swallow.n.01", "name": "sea_swallow"}, + {"id": 3200, "synset": "skimmer.n.04", "name": "skimmer"}, + {"id": 3201, "synset": "jaeger.n.01", "name": "jaeger"}, + {"id": 3202, "synset": "parasitic_jaeger.n.01", "name": "parasitic_jaeger"}, + {"id": 3203, "synset": "skua.n.01", "name": "skua"}, + {"id": 3204, "synset": "great_skua.n.01", "name": "great_skua"}, + {"id": 3205, "synset": "auk.n.01", "name": "auk"}, + {"id": 3206, "synset": "auklet.n.01", "name": "auklet"}, + {"id": 3207, "synset": "razorbill.n.01", "name": "razorbill"}, + {"id": 3208, "synset": "little_auk.n.01", "name": "little_auk"}, + {"id": 3209, "synset": "guillemot.n.01", "name": "guillemot"}, + {"id": 3210, "synset": "black_guillemot.n.01", "name": "black_guillemot"}, + {"id": 3211, "synset": "pigeon_guillemot.n.01", "name": "pigeon_guillemot"}, + {"id": 3212, "synset": "murre.n.01", "name": "murre"}, + {"id": 3213, "synset": "common_murre.n.01", "name": "common_murre"}, + {"id": 3214, "synset": "thick-billed_murre.n.01", "name": "thick-billed_murre"}, + {"id": 3215, "synset": "atlantic_puffin.n.01", "name": "Atlantic_puffin"}, + {"id": 3216, "synset": "horned_puffin.n.01", "name": "horned_puffin"}, + {"id": 3217, "synset": "tufted_puffin.n.01", "name": "tufted_puffin"}, + {"id": 3218, "synset": "gaviiform_seabird.n.01", "name": "gaviiform_seabird"}, + {"id": 3219, "synset": "loon.n.02", "name": "loon"}, + { + "id": 3220, + "synset": "podicipitiform_seabird.n.01", + "name": "podicipitiform_seabird", + }, + {"id": 3221, "synset": "grebe.n.01", "name": "grebe"}, + {"id": 3222, "synset": "great_crested_grebe.n.01", "name": "great_crested_grebe"}, + {"id": 3223, "synset": "red-necked_grebe.n.01", "name": "red-necked_grebe"}, + {"id": 3224, "synset": "black-necked_grebe.n.01", "name": "black-necked_grebe"}, + {"id": 3225, "synset": "dabchick.n.01", "name": "dabchick"}, + {"id": 3226, "synset": "pied-billed_grebe.n.01", "name": "pied-billed_grebe"}, + {"id": 3227, "synset": "pelecaniform_seabird.n.01", "name": "pelecaniform_seabird"}, + {"id": 3228, "synset": "white_pelican.n.01", "name": "white_pelican"}, + { + "id": 3229, + "synset": "old_world_white_pelican.n.01", + "name": "Old_world_white_pelican", + }, + {"id": 3230, "synset": "frigate_bird.n.01", "name": "frigate_bird"}, + {"id": 3231, "synset": "gannet.n.01", "name": "gannet"}, + {"id": 3232, "synset": "solan.n.01", "name": "solan"}, + {"id": 3233, "synset": "booby.n.02", "name": "booby"}, + {"id": 3234, "synset": "cormorant.n.01", "name": "cormorant"}, + {"id": 3235, "synset": "snakebird.n.01", "name": "snakebird"}, + {"id": 3236, "synset": "water_turkey.n.01", "name": "water_turkey"}, + {"id": 3237, "synset": "tropic_bird.n.01", "name": "tropic_bird"}, + { + "id": 3238, + "synset": "sphenisciform_seabird.n.01", + "name": "sphenisciform_seabird", + }, + {"id": 3239, "synset": "adelie.n.01", "name": "Adelie"}, + {"id": 3240, "synset": "king_penguin.n.01", "name": "king_penguin"}, + {"id": 3241, "synset": "emperor_penguin.n.01", "name": "emperor_penguin"}, + {"id": 3242, "synset": "jackass_penguin.n.01", "name": "jackass_penguin"}, + {"id": 3243, "synset": "rock_hopper.n.01", "name": "rock_hopper"}, + {"id": 3244, "synset": "pelagic_bird.n.01", "name": "pelagic_bird"}, + { + "id": 3245, + "synset": "procellariiform_seabird.n.01", + "name": "procellariiform_seabird", + }, + {"id": 3246, "synset": "albatross.n.02", "name": "albatross"}, + {"id": 3247, "synset": "wandering_albatross.n.01", "name": "wandering_albatross"}, + { + "id": 3248, + "synset": "black-footed_albatross.n.01", + "name": "black-footed_albatross", + }, + {"id": 3249, "synset": "petrel.n.01", "name": "petrel"}, + {"id": 3250, "synset": "white-chinned_petrel.n.01", "name": "white-chinned_petrel"}, + {"id": 3251, "synset": "giant_petrel.n.01", "name": "giant_petrel"}, + {"id": 3252, "synset": "fulmar.n.01", "name": "fulmar"}, + {"id": 3253, "synset": "shearwater.n.01", "name": "shearwater"}, + {"id": 3254, "synset": "manx_shearwater.n.01", "name": "Manx_shearwater"}, + {"id": 3255, "synset": "storm_petrel.n.01", "name": "storm_petrel"}, + {"id": 3256, "synset": "stormy_petrel.n.01", "name": "stormy_petrel"}, + { + "id": 3257, + "synset": "mother_carey's_chicken.n.01", + "name": "Mother_Carey's_chicken", + }, + {"id": 3258, "synset": "diving_petrel.n.01", "name": "diving_petrel"}, + {"id": 3259, "synset": "aquatic_mammal.n.01", "name": "aquatic_mammal"}, + {"id": 3260, "synset": "cetacean.n.01", "name": "cetacean"}, + {"id": 3261, "synset": "whale.n.02", "name": "whale"}, + {"id": 3262, "synset": "baleen_whale.n.01", "name": "baleen_whale"}, + {"id": 3263, "synset": "right_whale.n.01", "name": "right_whale"}, + {"id": 3264, "synset": "bowhead.n.01", "name": "bowhead"}, + {"id": 3265, "synset": "rorqual.n.01", "name": "rorqual"}, + {"id": 3266, "synset": "blue_whale.n.01", "name": "blue_whale"}, + {"id": 3267, "synset": "finback.n.01", "name": "finback"}, + {"id": 3268, "synset": "sei_whale.n.01", "name": "sei_whale"}, + {"id": 3269, "synset": "lesser_rorqual.n.01", "name": "lesser_rorqual"}, + {"id": 3270, "synset": "humpback.n.03", "name": "humpback"}, + {"id": 3271, "synset": "grey_whale.n.01", "name": "grey_whale"}, + {"id": 3272, "synset": "toothed_whale.n.01", "name": "toothed_whale"}, + {"id": 3273, "synset": "sperm_whale.n.01", "name": "sperm_whale"}, + {"id": 3274, "synset": "pygmy_sperm_whale.n.01", "name": "pygmy_sperm_whale"}, + {"id": 3275, "synset": "dwarf_sperm_whale.n.01", "name": "dwarf_sperm_whale"}, + {"id": 3276, "synset": "beaked_whale.n.01", "name": "beaked_whale"}, + {"id": 3277, "synset": "bottle-nosed_whale.n.01", "name": "bottle-nosed_whale"}, + {"id": 3278, "synset": "common_dolphin.n.01", "name": "common_dolphin"}, + {"id": 3279, "synset": "bottlenose_dolphin.n.01", "name": "bottlenose_dolphin"}, + { + "id": 3280, + "synset": "atlantic_bottlenose_dolphin.n.01", + "name": "Atlantic_bottlenose_dolphin", + }, + { + "id": 3281, + "synset": "pacific_bottlenose_dolphin.n.01", + "name": "Pacific_bottlenose_dolphin", + }, + {"id": 3282, "synset": "porpoise.n.01", "name": "porpoise"}, + {"id": 3283, "synset": "harbor_porpoise.n.01", "name": "harbor_porpoise"}, + {"id": 3284, "synset": "vaquita.n.01", "name": "vaquita"}, + {"id": 3285, "synset": "grampus.n.02", "name": "grampus"}, + {"id": 3286, "synset": "killer_whale.n.01", "name": "killer_whale"}, + {"id": 3287, "synset": "pilot_whale.n.01", "name": "pilot_whale"}, + {"id": 3288, "synset": "river_dolphin.n.01", "name": "river_dolphin"}, + {"id": 3289, "synset": "narwhal.n.01", "name": "narwhal"}, + {"id": 3290, "synset": "white_whale.n.01", "name": "white_whale"}, + {"id": 3291, "synset": "sea_cow.n.01", "name": "sea_cow"}, + {"id": 3292, "synset": "dugong.n.01", "name": "dugong"}, + {"id": 3293, "synset": "steller's_sea_cow.n.01", "name": "Steller's_sea_cow"}, + {"id": 3294, "synset": "carnivore.n.01", "name": "carnivore"}, + {"id": 3295, "synset": "omnivore.n.02", "name": "omnivore"}, + {"id": 3296, "synset": "pinniped_mammal.n.01", "name": "pinniped_mammal"}, + {"id": 3297, "synset": "seal.n.09", "name": "seal"}, + {"id": 3298, "synset": "crabeater_seal.n.01", "name": "crabeater_seal"}, + {"id": 3299, "synset": "eared_seal.n.01", "name": "eared_seal"}, + {"id": 3300, "synset": "fur_seal.n.02", "name": "fur_seal"}, + {"id": 3301, "synset": "guadalupe_fur_seal.n.01", "name": "guadalupe_fur_seal"}, + {"id": 3302, "synset": "fur_seal.n.01", "name": "fur_seal"}, + {"id": 3303, "synset": "alaska_fur_seal.n.01", "name": "Alaska_fur_seal"}, + {"id": 3304, "synset": "sea_lion.n.01", "name": "sea_lion"}, + { + "id": 3305, + "synset": "south_american_sea_lion.n.01", + "name": "South_American_sea_lion", + }, + {"id": 3306, "synset": "california_sea_lion.n.01", "name": "California_sea_lion"}, + {"id": 3307, "synset": "australian_sea_lion.n.01", "name": "Australian_sea_lion"}, + {"id": 3308, "synset": "steller_sea_lion.n.01", "name": "Steller_sea_lion"}, + {"id": 3309, "synset": "earless_seal.n.01", "name": "earless_seal"}, + {"id": 3310, "synset": "harbor_seal.n.01", "name": "harbor_seal"}, + {"id": 3311, "synset": "harp_seal.n.01", "name": "harp_seal"}, + {"id": 3312, "synset": "elephant_seal.n.01", "name": "elephant_seal"}, + {"id": 3313, "synset": "bearded_seal.n.01", "name": "bearded_seal"}, + {"id": 3314, "synset": "hooded_seal.n.01", "name": "hooded_seal"}, + {"id": 3315, "synset": "atlantic_walrus.n.01", "name": "Atlantic_walrus"}, + {"id": 3316, "synset": "pacific_walrus.n.01", "name": "Pacific_walrus"}, + {"id": 3317, "synset": "fissipedia.n.01", "name": "Fissipedia"}, + {"id": 3318, "synset": "fissiped_mammal.n.01", "name": "fissiped_mammal"}, + {"id": 3319, "synset": "aardvark.n.01", "name": "aardvark"}, + {"id": 3320, "synset": "canine.n.02", "name": "canine"}, + {"id": 3321, "synset": "bitch.n.04", "name": "bitch"}, + {"id": 3322, "synset": "brood_bitch.n.01", "name": "brood_bitch"}, + {"id": 3323, "synset": "pooch.n.01", "name": "pooch"}, + {"id": 3324, "synset": "cur.n.01", "name": "cur"}, + {"id": 3325, "synset": "feist.n.01", "name": "feist"}, + {"id": 3326, "synset": "pariah_dog.n.01", "name": "pariah_dog"}, + {"id": 3327, "synset": "lapdog.n.01", "name": "lapdog"}, + {"id": 3328, "synset": "toy_dog.n.01", "name": "toy_dog"}, + {"id": 3329, "synset": "chihuahua.n.03", "name": "Chihuahua"}, + {"id": 3330, "synset": "japanese_spaniel.n.01", "name": "Japanese_spaniel"}, + {"id": 3331, "synset": "maltese_dog.n.01", "name": "Maltese_dog"}, + {"id": 3332, "synset": "pekinese.n.01", "name": "Pekinese"}, + {"id": 3333, "synset": "shih-tzu.n.01", "name": "Shih-Tzu"}, + {"id": 3334, "synset": "toy_spaniel.n.01", "name": "toy_spaniel"}, + {"id": 3335, "synset": "english_toy_spaniel.n.01", "name": "English_toy_spaniel"}, + {"id": 3336, "synset": "blenheim_spaniel.n.01", "name": "Blenheim_spaniel"}, + {"id": 3337, "synset": "king_charles_spaniel.n.01", "name": "King_Charles_spaniel"}, + {"id": 3338, "synset": "papillon.n.01", "name": "papillon"}, + {"id": 3339, "synset": "toy_terrier.n.01", "name": "toy_terrier"}, + {"id": 3340, "synset": "hunting_dog.n.01", "name": "hunting_dog"}, + {"id": 3341, "synset": "courser.n.03", "name": "courser"}, + {"id": 3342, "synset": "rhodesian_ridgeback.n.01", "name": "Rhodesian_ridgeback"}, + {"id": 3343, "synset": "hound.n.01", "name": "hound"}, + {"id": 3344, "synset": "afghan_hound.n.01", "name": "Afghan_hound"}, + {"id": 3345, "synset": "basset.n.01", "name": "basset"}, + {"id": 3346, "synset": "beagle.n.01", "name": "beagle"}, + {"id": 3347, "synset": "bloodhound.n.01", "name": "bloodhound"}, + {"id": 3348, "synset": "bluetick.n.01", "name": "bluetick"}, + {"id": 3349, "synset": "boarhound.n.01", "name": "boarhound"}, + {"id": 3350, "synset": "coonhound.n.01", "name": "coonhound"}, + {"id": 3351, "synset": "coondog.n.01", "name": "coondog"}, + { + "id": 3352, + "synset": "black-and-tan_coonhound.n.01", + "name": "black-and-tan_coonhound", + }, + {"id": 3353, "synset": "dachshund.n.01", "name": "dachshund"}, + {"id": 3354, "synset": "sausage_dog.n.01", "name": "sausage_dog"}, + {"id": 3355, "synset": "foxhound.n.01", "name": "foxhound"}, + {"id": 3356, "synset": "american_foxhound.n.01", "name": "American_foxhound"}, + {"id": 3357, "synset": "walker_hound.n.01", "name": "Walker_hound"}, + {"id": 3358, "synset": "english_foxhound.n.01", "name": "English_foxhound"}, + {"id": 3359, "synset": "harrier.n.02", "name": "harrier"}, + {"id": 3360, "synset": "plott_hound.n.01", "name": "Plott_hound"}, + {"id": 3361, "synset": "redbone.n.01", "name": "redbone"}, + {"id": 3362, "synset": "wolfhound.n.01", "name": "wolfhound"}, + {"id": 3363, "synset": "borzoi.n.01", "name": "borzoi"}, + {"id": 3364, "synset": "irish_wolfhound.n.01", "name": "Irish_wolfhound"}, + {"id": 3365, "synset": "greyhound.n.01", "name": "greyhound"}, + {"id": 3366, "synset": "italian_greyhound.n.01", "name": "Italian_greyhound"}, + {"id": 3367, "synset": "whippet.n.01", "name": "whippet"}, + {"id": 3368, "synset": "ibizan_hound.n.01", "name": "Ibizan_hound"}, + {"id": 3369, "synset": "norwegian_elkhound.n.01", "name": "Norwegian_elkhound"}, + {"id": 3370, "synset": "otterhound.n.01", "name": "otterhound"}, + {"id": 3371, "synset": "saluki.n.01", "name": "Saluki"}, + {"id": 3372, "synset": "scottish_deerhound.n.01", "name": "Scottish_deerhound"}, + {"id": 3373, "synset": "staghound.n.01", "name": "staghound"}, + {"id": 3374, "synset": "weimaraner.n.01", "name": "Weimaraner"}, + {"id": 3375, "synset": "terrier.n.01", "name": "terrier"}, + {"id": 3376, "synset": "bullterrier.n.01", "name": "bullterrier"}, + { + "id": 3377, + "synset": "staffordshire_bullterrier.n.01", + "name": "Staffordshire_bullterrier", + }, + { + "id": 3378, + "synset": "american_staffordshire_terrier.n.01", + "name": "American_Staffordshire_terrier", + }, + {"id": 3379, "synset": "bedlington_terrier.n.01", "name": "Bedlington_terrier"}, + {"id": 3380, "synset": "border_terrier.n.01", "name": "Border_terrier"}, + {"id": 3381, "synset": "kerry_blue_terrier.n.01", "name": "Kerry_blue_terrier"}, + {"id": 3382, "synset": "irish_terrier.n.01", "name": "Irish_terrier"}, + {"id": 3383, "synset": "norfolk_terrier.n.01", "name": "Norfolk_terrier"}, + {"id": 3384, "synset": "norwich_terrier.n.01", "name": "Norwich_terrier"}, + {"id": 3385, "synset": "yorkshire_terrier.n.01", "name": "Yorkshire_terrier"}, + {"id": 3386, "synset": "rat_terrier.n.01", "name": "rat_terrier"}, + {"id": 3387, "synset": "manchester_terrier.n.01", "name": "Manchester_terrier"}, + {"id": 3388, "synset": "toy_manchester.n.01", "name": "toy_Manchester"}, + {"id": 3389, "synset": "fox_terrier.n.01", "name": "fox_terrier"}, + { + "id": 3390, + "synset": "smooth-haired_fox_terrier.n.01", + "name": "smooth-haired_fox_terrier", + }, + { + "id": 3391, + "synset": "wire-haired_fox_terrier.n.01", + "name": "wire-haired_fox_terrier", + }, + {"id": 3392, "synset": "wirehair.n.01", "name": "wirehair"}, + {"id": 3393, "synset": "lakeland_terrier.n.01", "name": "Lakeland_terrier"}, + {"id": 3394, "synset": "welsh_terrier.n.01", "name": "Welsh_terrier"}, + {"id": 3395, "synset": "sealyham_terrier.n.01", "name": "Sealyham_terrier"}, + {"id": 3396, "synset": "airedale.n.01", "name": "Airedale"}, + {"id": 3397, "synset": "cairn.n.02", "name": "cairn"}, + {"id": 3398, "synset": "australian_terrier.n.01", "name": "Australian_terrier"}, + {"id": 3399, "synset": "dandie_dinmont.n.01", "name": "Dandie_Dinmont"}, + {"id": 3400, "synset": "boston_bull.n.01", "name": "Boston_bull"}, + {"id": 3401, "synset": "schnauzer.n.01", "name": "schnauzer"}, + {"id": 3402, "synset": "miniature_schnauzer.n.01", "name": "miniature_schnauzer"}, + {"id": 3403, "synset": "giant_schnauzer.n.01", "name": "giant_schnauzer"}, + {"id": 3404, "synset": "standard_schnauzer.n.01", "name": "standard_schnauzer"}, + {"id": 3405, "synset": "scotch_terrier.n.01", "name": "Scotch_terrier"}, + {"id": 3406, "synset": "tibetan_terrier.n.01", "name": "Tibetan_terrier"}, + {"id": 3407, "synset": "silky_terrier.n.01", "name": "silky_terrier"}, + {"id": 3408, "synset": "skye_terrier.n.01", "name": "Skye_terrier"}, + {"id": 3409, "synset": "clydesdale_terrier.n.01", "name": "Clydesdale_terrier"}, + { + "id": 3410, + "synset": "soft-coated_wheaten_terrier.n.01", + "name": "soft-coated_wheaten_terrier", + }, + { + "id": 3411, + "synset": "west_highland_white_terrier.n.01", + "name": "West_Highland_white_terrier", + }, + {"id": 3412, "synset": "lhasa.n.02", "name": "Lhasa"}, + {"id": 3413, "synset": "sporting_dog.n.01", "name": "sporting_dog"}, + {"id": 3414, "synset": "bird_dog.n.01", "name": "bird_dog"}, + {"id": 3415, "synset": "water_dog.n.02", "name": "water_dog"}, + {"id": 3416, "synset": "retriever.n.01", "name": "retriever"}, + { + "id": 3417, + "synset": "flat-coated_retriever.n.01", + "name": "flat-coated_retriever", + }, + { + "id": 3418, + "synset": "curly-coated_retriever.n.01", + "name": "curly-coated_retriever", + }, + {"id": 3419, "synset": "golden_retriever.n.01", "name": "golden_retriever"}, + {"id": 3420, "synset": "labrador_retriever.n.01", "name": "Labrador_retriever"}, + { + "id": 3421, + "synset": "chesapeake_bay_retriever.n.01", + "name": "Chesapeake_Bay_retriever", + }, + {"id": 3422, "synset": "pointer.n.04", "name": "pointer"}, + { + "id": 3423, + "synset": "german_short-haired_pointer.n.01", + "name": "German_short-haired_pointer", + }, + {"id": 3424, "synset": "setter.n.02", "name": "setter"}, + {"id": 3425, "synset": "vizsla.n.01", "name": "vizsla"}, + {"id": 3426, "synset": "english_setter.n.01", "name": "English_setter"}, + {"id": 3427, "synset": "irish_setter.n.01", "name": "Irish_setter"}, + {"id": 3428, "synset": "gordon_setter.n.01", "name": "Gordon_setter"}, + {"id": 3429, "synset": "spaniel.n.01", "name": "spaniel"}, + {"id": 3430, "synset": "brittany_spaniel.n.01", "name": "Brittany_spaniel"}, + {"id": 3431, "synset": "clumber.n.01", "name": "clumber"}, + {"id": 3432, "synset": "field_spaniel.n.01", "name": "field_spaniel"}, + {"id": 3433, "synset": "springer_spaniel.n.01", "name": "springer_spaniel"}, + {"id": 3434, "synset": "english_springer.n.01", "name": "English_springer"}, + { + "id": 3435, + "synset": "welsh_springer_spaniel.n.01", + "name": "Welsh_springer_spaniel", + }, + {"id": 3436, "synset": "cocker_spaniel.n.01", "name": "cocker_spaniel"}, + {"id": 3437, "synset": "sussex_spaniel.n.01", "name": "Sussex_spaniel"}, + {"id": 3438, "synset": "water_spaniel.n.01", "name": "water_spaniel"}, + { + "id": 3439, + "synset": "american_water_spaniel.n.01", + "name": "American_water_spaniel", + }, + {"id": 3440, "synset": "irish_water_spaniel.n.01", "name": "Irish_water_spaniel"}, + {"id": 3441, "synset": "griffon.n.03", "name": "griffon"}, + {"id": 3442, "synset": "working_dog.n.01", "name": "working_dog"}, + {"id": 3443, "synset": "watchdog.n.02", "name": "watchdog"}, + {"id": 3444, "synset": "kuvasz.n.01", "name": "kuvasz"}, + {"id": 3445, "synset": "attack_dog.n.01", "name": "attack_dog"}, + {"id": 3446, "synset": "housedog.n.01", "name": "housedog"}, + {"id": 3447, "synset": "schipperke.n.01", "name": "schipperke"}, + {"id": 3448, "synset": "belgian_sheepdog.n.01", "name": "Belgian_sheepdog"}, + {"id": 3449, "synset": "groenendael.n.01", "name": "groenendael"}, + {"id": 3450, "synset": "malinois.n.01", "name": "malinois"}, + {"id": 3451, "synset": "briard.n.01", "name": "briard"}, + {"id": 3452, "synset": "kelpie.n.02", "name": "kelpie"}, + {"id": 3453, "synset": "komondor.n.01", "name": "komondor"}, + {"id": 3454, "synset": "old_english_sheepdog.n.01", "name": "Old_English_sheepdog"}, + {"id": 3455, "synset": "shetland_sheepdog.n.01", "name": "Shetland_sheepdog"}, + {"id": 3456, "synset": "collie.n.01", "name": "collie"}, + {"id": 3457, "synset": "border_collie.n.01", "name": "Border_collie"}, + {"id": 3458, "synset": "bouvier_des_flandres.n.01", "name": "Bouvier_des_Flandres"}, + {"id": 3459, "synset": "rottweiler.n.01", "name": "Rottweiler"}, + {"id": 3460, "synset": "german_shepherd.n.01", "name": "German_shepherd"}, + {"id": 3461, "synset": "police_dog.n.01", "name": "police_dog"}, + {"id": 3462, "synset": "pinscher.n.01", "name": "pinscher"}, + {"id": 3463, "synset": "doberman.n.01", "name": "Doberman"}, + {"id": 3464, "synset": "miniature_pinscher.n.01", "name": "miniature_pinscher"}, + {"id": 3465, "synset": "sennenhunde.n.01", "name": "Sennenhunde"}, + { + "id": 3466, + "synset": "greater_swiss_mountain_dog.n.01", + "name": "Greater_Swiss_Mountain_dog", + }, + {"id": 3467, "synset": "bernese_mountain_dog.n.01", "name": "Bernese_mountain_dog"}, + {"id": 3468, "synset": "appenzeller.n.01", "name": "Appenzeller"}, + {"id": 3469, "synset": "entlebucher.n.01", "name": "EntleBucher"}, + {"id": 3470, "synset": "boxer.n.04", "name": "boxer"}, + {"id": 3471, "synset": "mastiff.n.01", "name": "mastiff"}, + {"id": 3472, "synset": "bull_mastiff.n.01", "name": "bull_mastiff"}, + {"id": 3473, "synset": "tibetan_mastiff.n.01", "name": "Tibetan_mastiff"}, + {"id": 3474, "synset": "french_bulldog.n.01", "name": "French_bulldog"}, + {"id": 3475, "synset": "great_dane.n.01", "name": "Great_Dane"}, + {"id": 3476, "synset": "guide_dog.n.01", "name": "guide_dog"}, + {"id": 3477, "synset": "seeing_eye_dog.n.01", "name": "Seeing_Eye_dog"}, + {"id": 3478, "synset": "hearing_dog.n.01", "name": "hearing_dog"}, + {"id": 3479, "synset": "saint_bernard.n.01", "name": "Saint_Bernard"}, + {"id": 3480, "synset": "seizure-alert_dog.n.01", "name": "seizure-alert_dog"}, + {"id": 3481, "synset": "sled_dog.n.01", "name": "sled_dog"}, + {"id": 3482, "synset": "eskimo_dog.n.01", "name": "Eskimo_dog"}, + {"id": 3483, "synset": "malamute.n.01", "name": "malamute"}, + {"id": 3484, "synset": "siberian_husky.n.01", "name": "Siberian_husky"}, + { + "id": 3485, + "synset": "liver-spotted_dalmatian.n.01", + "name": "liver-spotted_dalmatian", + }, + {"id": 3486, "synset": "affenpinscher.n.01", "name": "affenpinscher"}, + {"id": 3487, "synset": "basenji.n.01", "name": "basenji"}, + {"id": 3488, "synset": "leonberg.n.01", "name": "Leonberg"}, + {"id": 3489, "synset": "newfoundland.n.01", "name": "Newfoundland"}, + {"id": 3490, "synset": "great_pyrenees.n.01", "name": "Great_Pyrenees"}, + {"id": 3491, "synset": "spitz.n.01", "name": "spitz"}, + {"id": 3492, "synset": "samoyed.n.03", "name": "Samoyed"}, + {"id": 3493, "synset": "pomeranian.n.01", "name": "Pomeranian"}, + {"id": 3494, "synset": "chow.n.03", "name": "chow"}, + {"id": 3495, "synset": "keeshond.n.01", "name": "keeshond"}, + {"id": 3496, "synset": "griffon.n.02", "name": "griffon"}, + {"id": 3497, "synset": "brabancon_griffon.n.01", "name": "Brabancon_griffon"}, + {"id": 3498, "synset": "corgi.n.01", "name": "corgi"}, + {"id": 3499, "synset": "pembroke.n.01", "name": "Pembroke"}, + {"id": 3500, "synset": "cardigan.n.02", "name": "Cardigan"}, + {"id": 3501, "synset": "poodle.n.01", "name": "poodle"}, + {"id": 3502, "synset": "toy_poodle.n.01", "name": "toy_poodle"}, + {"id": 3503, "synset": "miniature_poodle.n.01", "name": "miniature_poodle"}, + {"id": 3504, "synset": "standard_poodle.n.01", "name": "standard_poodle"}, + {"id": 3505, "synset": "large_poodle.n.01", "name": "large_poodle"}, + {"id": 3506, "synset": "mexican_hairless.n.01", "name": "Mexican_hairless"}, + {"id": 3507, "synset": "timber_wolf.n.01", "name": "timber_wolf"}, + {"id": 3508, "synset": "white_wolf.n.01", "name": "white_wolf"}, + {"id": 3509, "synset": "red_wolf.n.01", "name": "red_wolf"}, + {"id": 3510, "synset": "coyote.n.01", "name": "coyote"}, + {"id": 3511, "synset": "coydog.n.01", "name": "coydog"}, + {"id": 3512, "synset": "jackal.n.01", "name": "jackal"}, + {"id": 3513, "synset": "wild_dog.n.01", "name": "wild_dog"}, + {"id": 3514, "synset": "dingo.n.01", "name": "dingo"}, + {"id": 3515, "synset": "dhole.n.01", "name": "dhole"}, + {"id": 3516, "synset": "crab-eating_dog.n.01", "name": "crab-eating_dog"}, + {"id": 3517, "synset": "raccoon_dog.n.01", "name": "raccoon_dog"}, + {"id": 3518, "synset": "african_hunting_dog.n.01", "name": "African_hunting_dog"}, + {"id": 3519, "synset": "hyena.n.01", "name": "hyena"}, + {"id": 3520, "synset": "striped_hyena.n.01", "name": "striped_hyena"}, + {"id": 3521, "synset": "brown_hyena.n.01", "name": "brown_hyena"}, + {"id": 3522, "synset": "spotted_hyena.n.01", "name": "spotted_hyena"}, + {"id": 3523, "synset": "aardwolf.n.01", "name": "aardwolf"}, + {"id": 3524, "synset": "fox.n.01", "name": "fox"}, + {"id": 3525, "synset": "vixen.n.02", "name": "vixen"}, + {"id": 3526, "synset": "reynard.n.01", "name": "Reynard"}, + {"id": 3527, "synset": "red_fox.n.03", "name": "red_fox"}, + {"id": 3528, "synset": "black_fox.n.01", "name": "black_fox"}, + {"id": 3529, "synset": "silver_fox.n.01", "name": "silver_fox"}, + {"id": 3530, "synset": "red_fox.n.02", "name": "red_fox"}, + {"id": 3531, "synset": "kit_fox.n.02", "name": "kit_fox"}, + {"id": 3532, "synset": "kit_fox.n.01", "name": "kit_fox"}, + {"id": 3533, "synset": "arctic_fox.n.01", "name": "Arctic_fox"}, + {"id": 3534, "synset": "blue_fox.n.01", "name": "blue_fox"}, + {"id": 3535, "synset": "grey_fox.n.01", "name": "grey_fox"}, + {"id": 3536, "synset": "feline.n.01", "name": "feline"}, + {"id": 3537, "synset": "domestic_cat.n.01", "name": "domestic_cat"}, + {"id": 3538, "synset": "kitty.n.04", "name": "kitty"}, + {"id": 3539, "synset": "mouser.n.01", "name": "mouser"}, + {"id": 3540, "synset": "alley_cat.n.01", "name": "alley_cat"}, + {"id": 3541, "synset": "stray.n.01", "name": "stray"}, + {"id": 3542, "synset": "tom.n.02", "name": "tom"}, + {"id": 3543, "synset": "gib.n.02", "name": "gib"}, + {"id": 3544, "synset": "tabby.n.02", "name": "tabby"}, + {"id": 3545, "synset": "tabby.n.01", "name": "tabby"}, + {"id": 3546, "synset": "tiger_cat.n.02", "name": "tiger_cat"}, + {"id": 3547, "synset": "tortoiseshell.n.03", "name": "tortoiseshell"}, + {"id": 3548, "synset": "persian_cat.n.01", "name": "Persian_cat"}, + {"id": 3549, "synset": "angora.n.04", "name": "Angora"}, + {"id": 3550, "synset": "siamese_cat.n.01", "name": "Siamese_cat"}, + {"id": 3551, "synset": "blue_point_siamese.n.01", "name": "blue_point_Siamese"}, + {"id": 3552, "synset": "burmese_cat.n.01", "name": "Burmese_cat"}, + {"id": 3553, "synset": "egyptian_cat.n.01", "name": "Egyptian_cat"}, + {"id": 3554, "synset": "maltese.n.03", "name": "Maltese"}, + {"id": 3555, "synset": "abyssinian.n.01", "name": "Abyssinian"}, + {"id": 3556, "synset": "manx.n.02", "name": "Manx"}, + {"id": 3557, "synset": "wildcat.n.03", "name": "wildcat"}, + {"id": 3558, "synset": "sand_cat.n.01", "name": "sand_cat"}, + {"id": 3559, "synset": "european_wildcat.n.01", "name": "European_wildcat"}, + {"id": 3560, "synset": "ocelot.n.01", "name": "ocelot"}, + {"id": 3561, "synset": "jaguarundi.n.01", "name": "jaguarundi"}, + {"id": 3562, "synset": "kaffir_cat.n.01", "name": "kaffir_cat"}, + {"id": 3563, "synset": "jungle_cat.n.01", "name": "jungle_cat"}, + {"id": 3564, "synset": "serval.n.01", "name": "serval"}, + {"id": 3565, "synset": "leopard_cat.n.01", "name": "leopard_cat"}, + {"id": 3566, "synset": "margay.n.01", "name": "margay"}, + {"id": 3567, "synset": "manul.n.01", "name": "manul"}, + {"id": 3568, "synset": "lynx.n.02", "name": "lynx"}, + {"id": 3569, "synset": "common_lynx.n.01", "name": "common_lynx"}, + {"id": 3570, "synset": "canada_lynx.n.01", "name": "Canada_lynx"}, + {"id": 3571, "synset": "bobcat.n.01", "name": "bobcat"}, + {"id": 3572, "synset": "spotted_lynx.n.01", "name": "spotted_lynx"}, + {"id": 3573, "synset": "caracal.n.01", "name": "caracal"}, + {"id": 3574, "synset": "big_cat.n.01", "name": "big_cat"}, + {"id": 3575, "synset": "leopard.n.02", "name": "leopard"}, + {"id": 3576, "synset": "leopardess.n.01", "name": "leopardess"}, + {"id": 3577, "synset": "panther.n.02", "name": "panther"}, + {"id": 3578, "synset": "snow_leopard.n.01", "name": "snow_leopard"}, + {"id": 3579, "synset": "jaguar.n.01", "name": "jaguar"}, + {"id": 3580, "synset": "lioness.n.01", "name": "lioness"}, + {"id": 3581, "synset": "lionet.n.01", "name": "lionet"}, + {"id": 3582, "synset": "bengal_tiger.n.01", "name": "Bengal_tiger"}, + {"id": 3583, "synset": "tigress.n.01", "name": "tigress"}, + {"id": 3584, "synset": "liger.n.01", "name": "liger"}, + {"id": 3585, "synset": "tiglon.n.01", "name": "tiglon"}, + {"id": 3586, "synset": "cheetah.n.01", "name": "cheetah"}, + {"id": 3587, "synset": "saber-toothed_tiger.n.01", "name": "saber-toothed_tiger"}, + { + "id": 3588, + "synset": "smiledon_californicus.n.01", + "name": "Smiledon_californicus", + }, + {"id": 3589, "synset": "brown_bear.n.01", "name": "brown_bear"}, + {"id": 3590, "synset": "bruin.n.01", "name": "bruin"}, + {"id": 3591, "synset": "syrian_bear.n.01", "name": "Syrian_bear"}, + {"id": 3592, "synset": "alaskan_brown_bear.n.01", "name": "Alaskan_brown_bear"}, + {"id": 3593, "synset": "american_black_bear.n.01", "name": "American_black_bear"}, + {"id": 3594, "synset": "cinnamon_bear.n.01", "name": "cinnamon_bear"}, + {"id": 3595, "synset": "asiatic_black_bear.n.01", "name": "Asiatic_black_bear"}, + {"id": 3596, "synset": "sloth_bear.n.01", "name": "sloth_bear"}, + {"id": 3597, "synset": "viverrine.n.01", "name": "viverrine"}, + {"id": 3598, "synset": "civet.n.01", "name": "civet"}, + {"id": 3599, "synset": "large_civet.n.01", "name": "large_civet"}, + {"id": 3600, "synset": "small_civet.n.01", "name": "small_civet"}, + {"id": 3601, "synset": "binturong.n.01", "name": "binturong"}, + {"id": 3602, "synset": "cryptoprocta.n.01", "name": "Cryptoprocta"}, + {"id": 3603, "synset": "fossa.n.03", "name": "fossa"}, + {"id": 3604, "synset": "fanaloka.n.01", "name": "fanaloka"}, + {"id": 3605, "synset": "genet.n.03", "name": "genet"}, + {"id": 3606, "synset": "banded_palm_civet.n.01", "name": "banded_palm_civet"}, + {"id": 3607, "synset": "mongoose.n.01", "name": "mongoose"}, + {"id": 3608, "synset": "indian_mongoose.n.01", "name": "Indian_mongoose"}, + {"id": 3609, "synset": "ichneumon.n.01", "name": "ichneumon"}, + {"id": 3610, "synset": "palm_cat.n.01", "name": "palm_cat"}, + {"id": 3611, "synset": "meerkat.n.01", "name": "meerkat"}, + { + "id": 3612, + "synset": "slender-tailed_meerkat.n.01", + "name": "slender-tailed_meerkat", + }, + {"id": 3613, "synset": "suricate.n.01", "name": "suricate"}, + {"id": 3614, "synset": "fruit_bat.n.01", "name": "fruit_bat"}, + {"id": 3615, "synset": "flying_fox.n.01", "name": "flying_fox"}, + {"id": 3616, "synset": "pteropus_capestratus.n.01", "name": "Pteropus_capestratus"}, + {"id": 3617, "synset": "pteropus_hypomelanus.n.01", "name": "Pteropus_hypomelanus"}, + {"id": 3618, "synset": "harpy.n.03", "name": "harpy"}, + {"id": 3619, "synset": "cynopterus_sphinx.n.01", "name": "Cynopterus_sphinx"}, + {"id": 3620, "synset": "carnivorous_bat.n.01", "name": "carnivorous_bat"}, + {"id": 3621, "synset": "mouse-eared_bat.n.01", "name": "mouse-eared_bat"}, + {"id": 3622, "synset": "leafnose_bat.n.01", "name": "leafnose_bat"}, + {"id": 3623, "synset": "macrotus.n.01", "name": "macrotus"}, + {"id": 3624, "synset": "spearnose_bat.n.01", "name": "spearnose_bat"}, + { + "id": 3625, + "synset": "phyllostomus_hastatus.n.01", + "name": "Phyllostomus_hastatus", + }, + {"id": 3626, "synset": "hognose_bat.n.01", "name": "hognose_bat"}, + {"id": 3627, "synset": "horseshoe_bat.n.02", "name": "horseshoe_bat"}, + {"id": 3628, "synset": "horseshoe_bat.n.01", "name": "horseshoe_bat"}, + {"id": 3629, "synset": "orange_bat.n.01", "name": "orange_bat"}, + {"id": 3630, "synset": "false_vampire.n.01", "name": "false_vampire"}, + {"id": 3631, "synset": "big-eared_bat.n.01", "name": "big-eared_bat"}, + {"id": 3632, "synset": "vespertilian_bat.n.01", "name": "vespertilian_bat"}, + {"id": 3633, "synset": "frosted_bat.n.01", "name": "frosted_bat"}, + {"id": 3634, "synset": "red_bat.n.01", "name": "red_bat"}, + {"id": 3635, "synset": "brown_bat.n.01", "name": "brown_bat"}, + {"id": 3636, "synset": "little_brown_bat.n.01", "name": "little_brown_bat"}, + {"id": 3637, "synset": "cave_myotis.n.01", "name": "cave_myotis"}, + {"id": 3638, "synset": "big_brown_bat.n.01", "name": "big_brown_bat"}, + {"id": 3639, "synset": "serotine.n.01", "name": "serotine"}, + {"id": 3640, "synset": "pallid_bat.n.01", "name": "pallid_bat"}, + {"id": 3641, "synset": "pipistrelle.n.01", "name": "pipistrelle"}, + {"id": 3642, "synset": "eastern_pipistrel.n.01", "name": "eastern_pipistrel"}, + {"id": 3643, "synset": "jackass_bat.n.01", "name": "jackass_bat"}, + {"id": 3644, "synset": "long-eared_bat.n.01", "name": "long-eared_bat"}, + { + "id": 3645, + "synset": "western_big-eared_bat.n.01", + "name": "western_big-eared_bat", + }, + {"id": 3646, "synset": "freetail.n.01", "name": "freetail"}, + {"id": 3647, "synset": "guano_bat.n.01", "name": "guano_bat"}, + {"id": 3648, "synset": "pocketed_bat.n.01", "name": "pocketed_bat"}, + {"id": 3649, "synset": "mastiff_bat.n.01", "name": "mastiff_bat"}, + {"id": 3650, "synset": "vampire_bat.n.01", "name": "vampire_bat"}, + {"id": 3651, "synset": "desmodus_rotundus.n.01", "name": "Desmodus_rotundus"}, + { + "id": 3652, + "synset": "hairy-legged_vampire_bat.n.01", + "name": "hairy-legged_vampire_bat", + }, + {"id": 3653, "synset": "predator.n.02", "name": "predator"}, + {"id": 3654, "synset": "prey.n.02", "name": "prey"}, + {"id": 3655, "synset": "game.n.04", "name": "game"}, + {"id": 3656, "synset": "big_game.n.01", "name": "big_game"}, + {"id": 3657, "synset": "game_bird.n.01", "name": "game_bird"}, + {"id": 3658, "synset": "fossorial_mammal.n.01", "name": "fossorial_mammal"}, + {"id": 3659, "synset": "tetrapod.n.01", "name": "tetrapod"}, + {"id": 3660, "synset": "quadruped.n.01", "name": "quadruped"}, + {"id": 3661, "synset": "hexapod.n.01", "name": "hexapod"}, + {"id": 3662, "synset": "biped.n.01", "name": "biped"}, + {"id": 3663, "synset": "insect.n.01", "name": "insect"}, + {"id": 3664, "synset": "social_insect.n.01", "name": "social_insect"}, + {"id": 3665, "synset": "holometabola.n.01", "name": "holometabola"}, + {"id": 3666, "synset": "defoliator.n.01", "name": "defoliator"}, + {"id": 3667, "synset": "pollinator.n.01", "name": "pollinator"}, + {"id": 3668, "synset": "gallfly.n.03", "name": "gallfly"}, + {"id": 3669, "synset": "scorpion_fly.n.01", "name": "scorpion_fly"}, + {"id": 3670, "synset": "hanging_fly.n.01", "name": "hanging_fly"}, + {"id": 3671, "synset": "collembolan.n.01", "name": "collembolan"}, + {"id": 3672, "synset": "tiger_beetle.n.01", "name": "tiger_beetle"}, + {"id": 3673, "synset": "two-spotted_ladybug.n.01", "name": "two-spotted_ladybug"}, + {"id": 3674, "synset": "mexican_bean_beetle.n.01", "name": "Mexican_bean_beetle"}, + { + "id": 3675, + "synset": "hippodamia_convergens.n.01", + "name": "Hippodamia_convergens", + }, + {"id": 3676, "synset": "vedalia.n.01", "name": "vedalia"}, + {"id": 3677, "synset": "ground_beetle.n.01", "name": "ground_beetle"}, + {"id": 3678, "synset": "bombardier_beetle.n.01", "name": "bombardier_beetle"}, + {"id": 3679, "synset": "calosoma.n.01", "name": "calosoma"}, + {"id": 3680, "synset": "searcher.n.03", "name": "searcher"}, + {"id": 3681, "synset": "firefly.n.02", "name": "firefly"}, + {"id": 3682, "synset": "glowworm.n.01", "name": "glowworm"}, + {"id": 3683, "synset": "long-horned_beetle.n.01", "name": "long-horned_beetle"}, + {"id": 3684, "synset": "sawyer.n.02", "name": "sawyer"}, + {"id": 3685, "synset": "pine_sawyer.n.01", "name": "pine_sawyer"}, + {"id": 3686, "synset": "leaf_beetle.n.01", "name": "leaf_beetle"}, + {"id": 3687, "synset": "flea_beetle.n.01", "name": "flea_beetle"}, + { + "id": 3688, + "synset": "colorado_potato_beetle.n.01", + "name": "Colorado_potato_beetle", + }, + {"id": 3689, "synset": "carpet_beetle.n.01", "name": "carpet_beetle"}, + { + "id": 3690, + "synset": "buffalo_carpet_beetle.n.01", + "name": "buffalo_carpet_beetle", + }, + {"id": 3691, "synset": "black_carpet_beetle.n.01", "name": "black_carpet_beetle"}, + {"id": 3692, "synset": "clerid_beetle.n.01", "name": "clerid_beetle"}, + {"id": 3693, "synset": "bee_beetle.n.01", "name": "bee_beetle"}, + {"id": 3694, "synset": "lamellicorn_beetle.n.01", "name": "lamellicorn_beetle"}, + {"id": 3695, "synset": "scarabaeid_beetle.n.01", "name": "scarabaeid_beetle"}, + {"id": 3696, "synset": "dung_beetle.n.01", "name": "dung_beetle"}, + {"id": 3697, "synset": "scarab.n.01", "name": "scarab"}, + {"id": 3698, "synset": "tumblebug.n.01", "name": "tumblebug"}, + {"id": 3699, "synset": "dorbeetle.n.01", "name": "dorbeetle"}, + {"id": 3700, "synset": "june_beetle.n.01", "name": "June_beetle"}, + {"id": 3701, "synset": "green_june_beetle.n.01", "name": "green_June_beetle"}, + {"id": 3702, "synset": "japanese_beetle.n.01", "name": "Japanese_beetle"}, + {"id": 3703, "synset": "oriental_beetle.n.01", "name": "Oriental_beetle"}, + {"id": 3704, "synset": "rhinoceros_beetle.n.01", "name": "rhinoceros_beetle"}, + {"id": 3705, "synset": "melolonthid_beetle.n.01", "name": "melolonthid_beetle"}, + {"id": 3706, "synset": "cockchafer.n.01", "name": "cockchafer"}, + {"id": 3707, "synset": "rose_chafer.n.02", "name": "rose_chafer"}, + {"id": 3708, "synset": "rose_chafer.n.01", "name": "rose_chafer"}, + {"id": 3709, "synset": "stag_beetle.n.01", "name": "stag_beetle"}, + {"id": 3710, "synset": "elaterid_beetle.n.01", "name": "elaterid_beetle"}, + {"id": 3711, "synset": "click_beetle.n.01", "name": "click_beetle"}, + {"id": 3712, "synset": "firefly.n.01", "name": "firefly"}, + {"id": 3713, "synset": "wireworm.n.01", "name": "wireworm"}, + {"id": 3714, "synset": "water_beetle.n.01", "name": "water_beetle"}, + {"id": 3715, "synset": "whirligig_beetle.n.01", "name": "whirligig_beetle"}, + {"id": 3716, "synset": "deathwatch_beetle.n.01", "name": "deathwatch_beetle"}, + {"id": 3717, "synset": "weevil.n.01", "name": "weevil"}, + {"id": 3718, "synset": "snout_beetle.n.01", "name": "snout_beetle"}, + {"id": 3719, "synset": "boll_weevil.n.01", "name": "boll_weevil"}, + {"id": 3720, "synset": "blister_beetle.n.01", "name": "blister_beetle"}, + {"id": 3721, "synset": "oil_beetle.n.01", "name": "oil_beetle"}, + {"id": 3722, "synset": "spanish_fly.n.01", "name": "Spanish_fly"}, + {"id": 3723, "synset": "dutch-elm_beetle.n.01", "name": "Dutch-elm_beetle"}, + {"id": 3724, "synset": "bark_beetle.n.01", "name": "bark_beetle"}, + {"id": 3725, "synset": "spruce_bark_beetle.n.01", "name": "spruce_bark_beetle"}, + {"id": 3726, "synset": "rove_beetle.n.01", "name": "rove_beetle"}, + {"id": 3727, "synset": "darkling_beetle.n.01", "name": "darkling_beetle"}, + {"id": 3728, "synset": "mealworm.n.01", "name": "mealworm"}, + {"id": 3729, "synset": "flour_beetle.n.01", "name": "flour_beetle"}, + {"id": 3730, "synset": "seed_beetle.n.01", "name": "seed_beetle"}, + {"id": 3731, "synset": "pea_weevil.n.01", "name": "pea_weevil"}, + {"id": 3732, "synset": "bean_weevil.n.01", "name": "bean_weevil"}, + {"id": 3733, "synset": "rice_weevil.n.01", "name": "rice_weevil"}, + { + "id": 3734, + "synset": "asian_longhorned_beetle.n.01", + "name": "Asian_longhorned_beetle", + }, + {"id": 3735, "synset": "web_spinner.n.01", "name": "web_spinner"}, + {"id": 3736, "synset": "louse.n.01", "name": "louse"}, + {"id": 3737, "synset": "common_louse.n.01", "name": "common_louse"}, + {"id": 3738, "synset": "head_louse.n.01", "name": "head_louse"}, + {"id": 3739, "synset": "body_louse.n.01", "name": "body_louse"}, + {"id": 3740, "synset": "crab_louse.n.01", "name": "crab_louse"}, + {"id": 3741, "synset": "bird_louse.n.01", "name": "bird_louse"}, + {"id": 3742, "synset": "flea.n.01", "name": "flea"}, + {"id": 3743, "synset": "pulex_irritans.n.01", "name": "Pulex_irritans"}, + {"id": 3744, "synset": "dog_flea.n.01", "name": "dog_flea"}, + {"id": 3745, "synset": "cat_flea.n.01", "name": "cat_flea"}, + {"id": 3746, "synset": "chigoe.n.01", "name": "chigoe"}, + {"id": 3747, "synset": "sticktight.n.02", "name": "sticktight"}, + {"id": 3748, "synset": "dipterous_insect.n.01", "name": "dipterous_insect"}, + {"id": 3749, "synset": "gall_midge.n.01", "name": "gall_midge"}, + {"id": 3750, "synset": "hessian_fly.n.01", "name": "Hessian_fly"}, + {"id": 3751, "synset": "fly.n.01", "name": "fly"}, + {"id": 3752, "synset": "housefly.n.01", "name": "housefly"}, + {"id": 3753, "synset": "tsetse_fly.n.01", "name": "tsetse_fly"}, + {"id": 3754, "synset": "blowfly.n.01", "name": "blowfly"}, + {"id": 3755, "synset": "bluebottle.n.02", "name": "bluebottle"}, + {"id": 3756, "synset": "greenbottle.n.01", "name": "greenbottle"}, + {"id": 3757, "synset": "flesh_fly.n.01", "name": "flesh_fly"}, + {"id": 3758, "synset": "tachina_fly.n.01", "name": "tachina_fly"}, + {"id": 3759, "synset": "gadfly.n.02", "name": "gadfly"}, + {"id": 3760, "synset": "botfly.n.01", "name": "botfly"}, + {"id": 3761, "synset": "human_botfly.n.01", "name": "human_botfly"}, + {"id": 3762, "synset": "sheep_botfly.n.01", "name": "sheep_botfly"}, + {"id": 3763, "synset": "warble_fly.n.01", "name": "warble_fly"}, + {"id": 3764, "synset": "horsefly.n.02", "name": "horsefly"}, + {"id": 3765, "synset": "bee_fly.n.01", "name": "bee_fly"}, + {"id": 3766, "synset": "robber_fly.n.01", "name": "robber_fly"}, + {"id": 3767, "synset": "fruit_fly.n.01", "name": "fruit_fly"}, + {"id": 3768, "synset": "apple_maggot.n.01", "name": "apple_maggot"}, + { + "id": 3769, + "synset": "mediterranean_fruit_fly.n.01", + "name": "Mediterranean_fruit_fly", + }, + {"id": 3770, "synset": "drosophila.n.01", "name": "drosophila"}, + {"id": 3771, "synset": "vinegar_fly.n.01", "name": "vinegar_fly"}, + {"id": 3772, "synset": "leaf_miner.n.01", "name": "leaf_miner"}, + {"id": 3773, "synset": "louse_fly.n.01", "name": "louse_fly"}, + {"id": 3774, "synset": "horse_tick.n.01", "name": "horse_tick"}, + {"id": 3775, "synset": "sheep_ked.n.01", "name": "sheep_ked"}, + {"id": 3776, "synset": "horn_fly.n.01", "name": "horn_fly"}, + {"id": 3777, "synset": "mosquito.n.01", "name": "mosquito"}, + {"id": 3778, "synset": "wiggler.n.02", "name": "wiggler"}, + {"id": 3779, "synset": "gnat.n.02", "name": "gnat"}, + { + "id": 3780, + "synset": "yellow-fever_mosquito.n.01", + "name": "yellow-fever_mosquito", + }, + {"id": 3781, "synset": "asian_tiger_mosquito.n.01", "name": "Asian_tiger_mosquito"}, + {"id": 3782, "synset": "anopheline.n.01", "name": "anopheline"}, + {"id": 3783, "synset": "malarial_mosquito.n.01", "name": "malarial_mosquito"}, + {"id": 3784, "synset": "common_mosquito.n.01", "name": "common_mosquito"}, + { + "id": 3785, + "synset": "culex_quinquefasciatus.n.01", + "name": "Culex_quinquefasciatus", + }, + {"id": 3786, "synset": "gnat.n.01", "name": "gnat"}, + {"id": 3787, "synset": "punkie.n.01", "name": "punkie"}, + {"id": 3788, "synset": "midge.n.01", "name": "midge"}, + {"id": 3789, "synset": "fungus_gnat.n.02", "name": "fungus_gnat"}, + {"id": 3790, "synset": "psychodid.n.01", "name": "psychodid"}, + {"id": 3791, "synset": "sand_fly.n.01", "name": "sand_fly"}, + {"id": 3792, "synset": "fungus_gnat.n.01", "name": "fungus_gnat"}, + {"id": 3793, "synset": "armyworm.n.03", "name": "armyworm"}, + {"id": 3794, "synset": "crane_fly.n.01", "name": "crane_fly"}, + {"id": 3795, "synset": "blackfly.n.02", "name": "blackfly"}, + {"id": 3796, "synset": "hymenopterous_insect.n.01", "name": "hymenopterous_insect"}, + {"id": 3797, "synset": "bee.n.01", "name": "bee"}, + {"id": 3798, "synset": "drone.n.01", "name": "drone"}, + {"id": 3799, "synset": "queen_bee.n.01", "name": "queen_bee"}, + {"id": 3800, "synset": "worker.n.03", "name": "worker"}, + {"id": 3801, "synset": "soldier.n.02", "name": "soldier"}, + {"id": 3802, "synset": "worker_bee.n.01", "name": "worker_bee"}, + {"id": 3803, "synset": "honeybee.n.01", "name": "honeybee"}, + {"id": 3804, "synset": "africanized_bee.n.01", "name": "Africanized_bee"}, + {"id": 3805, "synset": "black_bee.n.01", "name": "black_bee"}, + {"id": 3806, "synset": "carniolan_bee.n.01", "name": "Carniolan_bee"}, + {"id": 3807, "synset": "italian_bee.n.01", "name": "Italian_bee"}, + {"id": 3808, "synset": "carpenter_bee.n.01", "name": "carpenter_bee"}, + {"id": 3809, "synset": "bumblebee.n.01", "name": "bumblebee"}, + {"id": 3810, "synset": "cuckoo-bumblebee.n.01", "name": "cuckoo-bumblebee"}, + {"id": 3811, "synset": "andrena.n.01", "name": "andrena"}, + {"id": 3812, "synset": "nomia_melanderi.n.01", "name": "Nomia_melanderi"}, + {"id": 3813, "synset": "leaf-cutting_bee.n.01", "name": "leaf-cutting_bee"}, + {"id": 3814, "synset": "mason_bee.n.01", "name": "mason_bee"}, + {"id": 3815, "synset": "potter_bee.n.01", "name": "potter_bee"}, + {"id": 3816, "synset": "wasp.n.02", "name": "wasp"}, + {"id": 3817, "synset": "vespid.n.01", "name": "vespid"}, + {"id": 3818, "synset": "paper_wasp.n.01", "name": "paper_wasp"}, + {"id": 3819, "synset": "giant_hornet.n.01", "name": "giant_hornet"}, + {"id": 3820, "synset": "common_wasp.n.01", "name": "common_wasp"}, + {"id": 3821, "synset": "bald-faced_hornet.n.01", "name": "bald-faced_hornet"}, + {"id": 3822, "synset": "yellow_jacket.n.02", "name": "yellow_jacket"}, + {"id": 3823, "synset": "polistes_annularis.n.01", "name": "Polistes_annularis"}, + {"id": 3824, "synset": "mason_wasp.n.02", "name": "mason_wasp"}, + {"id": 3825, "synset": "potter_wasp.n.01", "name": "potter_wasp"}, + {"id": 3826, "synset": "mutillidae.n.01", "name": "Mutillidae"}, + {"id": 3827, "synset": "velvet_ant.n.01", "name": "velvet_ant"}, + {"id": 3828, "synset": "sphecoid_wasp.n.01", "name": "sphecoid_wasp"}, + {"id": 3829, "synset": "mason_wasp.n.01", "name": "mason_wasp"}, + {"id": 3830, "synset": "digger_wasp.n.01", "name": "digger_wasp"}, + {"id": 3831, "synset": "cicada_killer.n.01", "name": "cicada_killer"}, + {"id": 3832, "synset": "mud_dauber.n.01", "name": "mud_dauber"}, + {"id": 3833, "synset": "gall_wasp.n.01", "name": "gall_wasp"}, + {"id": 3834, "synset": "chalcid_fly.n.01", "name": "chalcid_fly"}, + {"id": 3835, "synset": "strawworm.n.02", "name": "strawworm"}, + {"id": 3836, "synset": "chalcis_fly.n.01", "name": "chalcis_fly"}, + {"id": 3837, "synset": "ichneumon_fly.n.01", "name": "ichneumon_fly"}, + {"id": 3838, "synset": "sawfly.n.01", "name": "sawfly"}, + {"id": 3839, "synset": "birch_leaf_miner.n.01", "name": "birch_leaf_miner"}, + {"id": 3840, "synset": "ant.n.01", "name": "ant"}, + {"id": 3841, "synset": "pharaoh_ant.n.01", "name": "pharaoh_ant"}, + {"id": 3842, "synset": "little_black_ant.n.01", "name": "little_black_ant"}, + {"id": 3843, "synset": "army_ant.n.01", "name": "army_ant"}, + {"id": 3844, "synset": "carpenter_ant.n.01", "name": "carpenter_ant"}, + {"id": 3845, "synset": "fire_ant.n.01", "name": "fire_ant"}, + {"id": 3846, "synset": "wood_ant.n.01", "name": "wood_ant"}, + {"id": 3847, "synset": "slave_ant.n.01", "name": "slave_ant"}, + {"id": 3848, "synset": "formica_fusca.n.01", "name": "Formica_fusca"}, + {"id": 3849, "synset": "slave-making_ant.n.01", "name": "slave-making_ant"}, + {"id": 3850, "synset": "sanguinary_ant.n.01", "name": "sanguinary_ant"}, + {"id": 3851, "synset": "bulldog_ant.n.01", "name": "bulldog_ant"}, + {"id": 3852, "synset": "amazon_ant.n.01", "name": "Amazon_ant"}, + {"id": 3853, "synset": "termite.n.01", "name": "termite"}, + {"id": 3854, "synset": "dry-wood_termite.n.01", "name": "dry-wood_termite"}, + { + "id": 3855, + "synset": "reticulitermes_lucifugus.n.01", + "name": "Reticulitermes_lucifugus", + }, + { + "id": 3856, + "synset": "mastotermes_darwiniensis.n.01", + "name": "Mastotermes_darwiniensis", + }, + { + "id": 3857, + "synset": "mastotermes_electrodominicus.n.01", + "name": "Mastotermes_electrodominicus", + }, + {"id": 3858, "synset": "powder-post_termite.n.01", "name": "powder-post_termite"}, + {"id": 3859, "synset": "orthopterous_insect.n.01", "name": "orthopterous_insect"}, + {"id": 3860, "synset": "grasshopper.n.01", "name": "grasshopper"}, + { + "id": 3861, + "synset": "short-horned_grasshopper.n.01", + "name": "short-horned_grasshopper", + }, + {"id": 3862, "synset": "locust.n.01", "name": "locust"}, + {"id": 3863, "synset": "migratory_locust.n.01", "name": "migratory_locust"}, + { + "id": 3864, + "synset": "migratory_grasshopper.n.01", + "name": "migratory_grasshopper", + }, + { + "id": 3865, + "synset": "long-horned_grasshopper.n.01", + "name": "long-horned_grasshopper", + }, + {"id": 3866, "synset": "katydid.n.01", "name": "katydid"}, + {"id": 3867, "synset": "mormon_cricket.n.01", "name": "mormon_cricket"}, + {"id": 3868, "synset": "sand_cricket.n.01", "name": "sand_cricket"}, + {"id": 3869, "synset": "cricket.n.01", "name": "cricket"}, + {"id": 3870, "synset": "mole_cricket.n.01", "name": "mole_cricket"}, + { + "id": 3871, + "synset": "european_house_cricket.n.01", + "name": "European_house_cricket", + }, + {"id": 3872, "synset": "field_cricket.n.01", "name": "field_cricket"}, + {"id": 3873, "synset": "tree_cricket.n.01", "name": "tree_cricket"}, + {"id": 3874, "synset": "snowy_tree_cricket.n.01", "name": "snowy_tree_cricket"}, + {"id": 3875, "synset": "phasmid.n.01", "name": "phasmid"}, + {"id": 3876, "synset": "walking_stick.n.02", "name": "walking_stick"}, + {"id": 3877, "synset": "diapheromera.n.01", "name": "diapheromera"}, + {"id": 3878, "synset": "walking_leaf.n.02", "name": "walking_leaf"}, + {"id": 3879, "synset": "oriental_cockroach.n.01", "name": "oriental_cockroach"}, + {"id": 3880, "synset": "american_cockroach.n.01", "name": "American_cockroach"}, + {"id": 3881, "synset": "australian_cockroach.n.01", "name": "Australian_cockroach"}, + {"id": 3882, "synset": "german_cockroach.n.01", "name": "German_cockroach"}, + {"id": 3883, "synset": "giant_cockroach.n.01", "name": "giant_cockroach"}, + {"id": 3884, "synset": "mantis.n.01", "name": "mantis"}, + {"id": 3885, "synset": "praying_mantis.n.01", "name": "praying_mantis"}, + {"id": 3886, "synset": "bug.n.01", "name": "bug"}, + {"id": 3887, "synset": "hemipterous_insect.n.01", "name": "hemipterous_insect"}, + {"id": 3888, "synset": "leaf_bug.n.01", "name": "leaf_bug"}, + {"id": 3889, "synset": "mirid_bug.n.01", "name": "mirid_bug"}, + {"id": 3890, "synset": "four-lined_plant_bug.n.01", "name": "four-lined_plant_bug"}, + {"id": 3891, "synset": "lygus_bug.n.01", "name": "lygus_bug"}, + {"id": 3892, "synset": "tarnished_plant_bug.n.01", "name": "tarnished_plant_bug"}, + {"id": 3893, "synset": "lace_bug.n.01", "name": "lace_bug"}, + {"id": 3894, "synset": "lygaeid.n.01", "name": "lygaeid"}, + {"id": 3895, "synset": "chinch_bug.n.01", "name": "chinch_bug"}, + {"id": 3896, "synset": "coreid_bug.n.01", "name": "coreid_bug"}, + {"id": 3897, "synset": "squash_bug.n.01", "name": "squash_bug"}, + {"id": 3898, "synset": "leaf-footed_bug.n.01", "name": "leaf-footed_bug"}, + {"id": 3899, "synset": "bedbug.n.01", "name": "bedbug"}, + {"id": 3900, "synset": "backswimmer.n.01", "name": "backswimmer"}, + {"id": 3901, "synset": "true_bug.n.01", "name": "true_bug"}, + {"id": 3902, "synset": "heteropterous_insect.n.01", "name": "heteropterous_insect"}, + {"id": 3903, "synset": "water_bug.n.01", "name": "water_bug"}, + {"id": 3904, "synset": "giant_water_bug.n.01", "name": "giant_water_bug"}, + {"id": 3905, "synset": "water_scorpion.n.01", "name": "water_scorpion"}, + {"id": 3906, "synset": "water_boatman.n.01", "name": "water_boatman"}, + {"id": 3907, "synset": "water_strider.n.01", "name": "water_strider"}, + {"id": 3908, "synset": "common_pond-skater.n.01", "name": "common_pond-skater"}, + {"id": 3909, "synset": "assassin_bug.n.01", "name": "assassin_bug"}, + {"id": 3910, "synset": "conenose.n.01", "name": "conenose"}, + {"id": 3911, "synset": "wheel_bug.n.01", "name": "wheel_bug"}, + {"id": 3912, "synset": "firebug.n.02", "name": "firebug"}, + {"id": 3913, "synset": "cotton_stainer.n.01", "name": "cotton_stainer"}, + {"id": 3914, "synset": "homopterous_insect.n.01", "name": "homopterous_insect"}, + {"id": 3915, "synset": "whitefly.n.01", "name": "whitefly"}, + {"id": 3916, "synset": "citrus_whitefly.n.01", "name": "citrus_whitefly"}, + {"id": 3917, "synset": "greenhouse_whitefly.n.01", "name": "greenhouse_whitefly"}, + { + "id": 3918, + "synset": "sweet-potato_whitefly.n.01", + "name": "sweet-potato_whitefly", + }, + {"id": 3919, "synset": "superbug.n.02", "name": "superbug"}, + {"id": 3920, "synset": "cotton_strain.n.01", "name": "cotton_strain"}, + {"id": 3921, "synset": "coccid_insect.n.01", "name": "coccid_insect"}, + {"id": 3922, "synset": "scale_insect.n.01", "name": "scale_insect"}, + {"id": 3923, "synset": "soft_scale.n.01", "name": "soft_scale"}, + {"id": 3924, "synset": "brown_soft_scale.n.01", "name": "brown_soft_scale"}, + {"id": 3925, "synset": "armored_scale.n.01", "name": "armored_scale"}, + {"id": 3926, "synset": "san_jose_scale.n.01", "name": "San_Jose_scale"}, + {"id": 3927, "synset": "cochineal_insect.n.01", "name": "cochineal_insect"}, + {"id": 3928, "synset": "mealybug.n.01", "name": "mealybug"}, + { + "id": 3929, + "synset": "citrophilous_mealybug.n.01", + "name": "citrophilous_mealybug", + }, + {"id": 3930, "synset": "comstock_mealybug.n.01", "name": "Comstock_mealybug"}, + {"id": 3931, "synset": "citrus_mealybug.n.01", "name": "citrus_mealybug"}, + {"id": 3932, "synset": "plant_louse.n.01", "name": "plant_louse"}, + {"id": 3933, "synset": "aphid.n.01", "name": "aphid"}, + {"id": 3934, "synset": "apple_aphid.n.01", "name": "apple_aphid"}, + {"id": 3935, "synset": "blackfly.n.01", "name": "blackfly"}, + {"id": 3936, "synset": "greenfly.n.01", "name": "greenfly"}, + {"id": 3937, "synset": "green_peach_aphid.n.01", "name": "green_peach_aphid"}, + {"id": 3938, "synset": "ant_cow.n.01", "name": "ant_cow"}, + {"id": 3939, "synset": "woolly_aphid.n.01", "name": "woolly_aphid"}, + {"id": 3940, "synset": "woolly_apple_aphid.n.01", "name": "woolly_apple_aphid"}, + {"id": 3941, "synset": "woolly_alder_aphid.n.01", "name": "woolly_alder_aphid"}, + {"id": 3942, "synset": "adelgid.n.01", "name": "adelgid"}, + {"id": 3943, "synset": "balsam_woolly_aphid.n.01", "name": "balsam_woolly_aphid"}, + {"id": 3944, "synset": "spruce_gall_aphid.n.01", "name": "spruce_gall_aphid"}, + {"id": 3945, "synset": "woolly_adelgid.n.01", "name": "woolly_adelgid"}, + {"id": 3946, "synset": "jumping_plant_louse.n.01", "name": "jumping_plant_louse"}, + {"id": 3947, "synset": "cicada.n.01", "name": "cicada"}, + {"id": 3948, "synset": "dog-day_cicada.n.01", "name": "dog-day_cicada"}, + { + "id": 3949, + "synset": "seventeen-year_locust.n.01", + "name": "seventeen-year_locust", + }, + {"id": 3950, "synset": "spittle_insect.n.01", "name": "spittle_insect"}, + {"id": 3951, "synset": "froghopper.n.01", "name": "froghopper"}, + {"id": 3952, "synset": "meadow_spittlebug.n.01", "name": "meadow_spittlebug"}, + {"id": 3953, "synset": "pine_spittlebug.n.01", "name": "pine_spittlebug"}, + {"id": 3954, "synset": "saratoga_spittlebug.n.01", "name": "Saratoga_spittlebug"}, + {"id": 3955, "synset": "leafhopper.n.01", "name": "leafhopper"}, + {"id": 3956, "synset": "plant_hopper.n.01", "name": "plant_hopper"}, + {"id": 3957, "synset": "treehopper.n.01", "name": "treehopper"}, + {"id": 3958, "synset": "lantern_fly.n.01", "name": "lantern_fly"}, + {"id": 3959, "synset": "psocopterous_insect.n.01", "name": "psocopterous_insect"}, + {"id": 3960, "synset": "psocid.n.01", "name": "psocid"}, + {"id": 3961, "synset": "bark-louse.n.01", "name": "bark-louse"}, + {"id": 3962, "synset": "booklouse.n.01", "name": "booklouse"}, + {"id": 3963, "synset": "common_booklouse.n.01", "name": "common_booklouse"}, + {"id": 3964, "synset": "ephemerid.n.01", "name": "ephemerid"}, + {"id": 3965, "synset": "mayfly.n.01", "name": "mayfly"}, + {"id": 3966, "synset": "stonefly.n.01", "name": "stonefly"}, + {"id": 3967, "synset": "neuropteron.n.01", "name": "neuropteron"}, + {"id": 3968, "synset": "ant_lion.n.02", "name": "ant_lion"}, + {"id": 3969, "synset": "doodlebug.n.03", "name": "doodlebug"}, + {"id": 3970, "synset": "lacewing.n.01", "name": "lacewing"}, + {"id": 3971, "synset": "aphid_lion.n.01", "name": "aphid_lion"}, + {"id": 3972, "synset": "green_lacewing.n.01", "name": "green_lacewing"}, + {"id": 3973, "synset": "brown_lacewing.n.01", "name": "brown_lacewing"}, + {"id": 3974, "synset": "dobson.n.02", "name": "dobson"}, + {"id": 3975, "synset": "hellgrammiate.n.01", "name": "hellgrammiate"}, + {"id": 3976, "synset": "fish_fly.n.01", "name": "fish_fly"}, + {"id": 3977, "synset": "alderfly.n.01", "name": "alderfly"}, + {"id": 3978, "synset": "snakefly.n.01", "name": "snakefly"}, + {"id": 3979, "synset": "mantispid.n.01", "name": "mantispid"}, + {"id": 3980, "synset": "odonate.n.01", "name": "odonate"}, + {"id": 3981, "synset": "damselfly.n.01", "name": "damselfly"}, + {"id": 3982, "synset": "trichopterous_insect.n.01", "name": "trichopterous_insect"}, + {"id": 3983, "synset": "caddis_fly.n.01", "name": "caddis_fly"}, + {"id": 3984, "synset": "caseworm.n.01", "name": "caseworm"}, + {"id": 3985, "synset": "caddisworm.n.01", "name": "caddisworm"}, + {"id": 3986, "synset": "thysanuran_insect.n.01", "name": "thysanuran_insect"}, + {"id": 3987, "synset": "bristletail.n.01", "name": "bristletail"}, + {"id": 3988, "synset": "silverfish.n.01", "name": "silverfish"}, + {"id": 3989, "synset": "firebrat.n.01", "name": "firebrat"}, + {"id": 3990, "synset": "jumping_bristletail.n.01", "name": "jumping_bristletail"}, + {"id": 3991, "synset": "thysanopter.n.01", "name": "thysanopter"}, + {"id": 3992, "synset": "thrips.n.01", "name": "thrips"}, + {"id": 3993, "synset": "tobacco_thrips.n.01", "name": "tobacco_thrips"}, + {"id": 3994, "synset": "onion_thrips.n.01", "name": "onion_thrips"}, + {"id": 3995, "synset": "earwig.n.01", "name": "earwig"}, + { + "id": 3996, + "synset": "common_european_earwig.n.01", + "name": "common_European_earwig", + }, + {"id": 3997, "synset": "lepidopterous_insect.n.01", "name": "lepidopterous_insect"}, + {"id": 3998, "synset": "nymphalid.n.01", "name": "nymphalid"}, + {"id": 3999, "synset": "mourning_cloak.n.01", "name": "mourning_cloak"}, + {"id": 4000, "synset": "tortoiseshell.n.02", "name": "tortoiseshell"}, + {"id": 4001, "synset": "painted_beauty.n.01", "name": "painted_beauty"}, + {"id": 4002, "synset": "admiral.n.02", "name": "admiral"}, + {"id": 4003, "synset": "red_admiral.n.01", "name": "red_admiral"}, + {"id": 4004, "synset": "white_admiral.n.02", "name": "white_admiral"}, + {"id": 4005, "synset": "banded_purple.n.01", "name": "banded_purple"}, + {"id": 4006, "synset": "red-spotted_purple.n.01", "name": "red-spotted_purple"}, + {"id": 4007, "synset": "viceroy.n.02", "name": "viceroy"}, + {"id": 4008, "synset": "anglewing.n.01", "name": "anglewing"}, + {"id": 4009, "synset": "ringlet.n.04", "name": "ringlet"}, + {"id": 4010, "synset": "comma.n.02", "name": "comma"}, + {"id": 4011, "synset": "fritillary.n.02", "name": "fritillary"}, + {"id": 4012, "synset": "silverspot.n.01", "name": "silverspot"}, + {"id": 4013, "synset": "emperor_butterfly.n.01", "name": "emperor_butterfly"}, + {"id": 4014, "synset": "purple_emperor.n.01", "name": "purple_emperor"}, + {"id": 4015, "synset": "peacock.n.01", "name": "peacock"}, + {"id": 4016, "synset": "danaid.n.01", "name": "danaid"}, + {"id": 4017, "synset": "monarch.n.02", "name": "monarch"}, + {"id": 4018, "synset": "pierid.n.01", "name": "pierid"}, + {"id": 4019, "synset": "cabbage_butterfly.n.01", "name": "cabbage_butterfly"}, + {"id": 4020, "synset": "small_white.n.01", "name": "small_white"}, + {"id": 4021, "synset": "large_white.n.01", "name": "large_white"}, + { + "id": 4022, + "synset": "southern_cabbage_butterfly.n.01", + "name": "southern_cabbage_butterfly", + }, + {"id": 4023, "synset": "sulphur_butterfly.n.01", "name": "sulphur_butterfly"}, + {"id": 4024, "synset": "lycaenid.n.01", "name": "lycaenid"}, + {"id": 4025, "synset": "blue.n.07", "name": "blue"}, + {"id": 4026, "synset": "copper.n.05", "name": "copper"}, + {"id": 4027, "synset": "american_copper.n.01", "name": "American_copper"}, + {"id": 4028, "synset": "hairstreak.n.01", "name": "hairstreak"}, + {"id": 4029, "synset": "strymon_melinus.n.01", "name": "Strymon_melinus"}, + {"id": 4030, "synset": "moth.n.01", "name": "moth"}, + {"id": 4031, "synset": "moth_miller.n.01", "name": "moth_miller"}, + {"id": 4032, "synset": "tortricid.n.01", "name": "tortricid"}, + {"id": 4033, "synset": "leaf_roller.n.01", "name": "leaf_roller"}, + {"id": 4034, "synset": "tea_tortrix.n.01", "name": "tea_tortrix"}, + {"id": 4035, "synset": "orange_tortrix.n.01", "name": "orange_tortrix"}, + {"id": 4036, "synset": "codling_moth.n.01", "name": "codling_moth"}, + {"id": 4037, "synset": "lymantriid.n.01", "name": "lymantriid"}, + {"id": 4038, "synset": "tussock_caterpillar.n.01", "name": "tussock_caterpillar"}, + {"id": 4039, "synset": "gypsy_moth.n.01", "name": "gypsy_moth"}, + {"id": 4040, "synset": "browntail.n.01", "name": "browntail"}, + {"id": 4041, "synset": "gold-tail_moth.n.01", "name": "gold-tail_moth"}, + {"id": 4042, "synset": "geometrid.n.01", "name": "geometrid"}, + {"id": 4043, "synset": "paleacrita_vernata.n.01", "name": "Paleacrita_vernata"}, + {"id": 4044, "synset": "alsophila_pometaria.n.01", "name": "Alsophila_pometaria"}, + {"id": 4045, "synset": "cankerworm.n.01", "name": "cankerworm"}, + {"id": 4046, "synset": "spring_cankerworm.n.01", "name": "spring_cankerworm"}, + {"id": 4047, "synset": "fall_cankerworm.n.01", "name": "fall_cankerworm"}, + {"id": 4048, "synset": "measuring_worm.n.01", "name": "measuring_worm"}, + {"id": 4049, "synset": "pyralid.n.01", "name": "pyralid"}, + {"id": 4050, "synset": "bee_moth.n.01", "name": "bee_moth"}, + {"id": 4051, "synset": "corn_borer.n.02", "name": "corn_borer"}, + { + "id": 4052, + "synset": "mediterranean_flour_moth.n.01", + "name": "Mediterranean_flour_moth", + }, + {"id": 4053, "synset": "tobacco_moth.n.01", "name": "tobacco_moth"}, + {"id": 4054, "synset": "almond_moth.n.01", "name": "almond_moth"}, + {"id": 4055, "synset": "raisin_moth.n.01", "name": "raisin_moth"}, + {"id": 4056, "synset": "tineoid.n.01", "name": "tineoid"}, + {"id": 4057, "synset": "tineid.n.01", "name": "tineid"}, + {"id": 4058, "synset": "clothes_moth.n.01", "name": "clothes_moth"}, + { + "id": 4059, + "synset": "casemaking_clothes_moth.n.01", + "name": "casemaking_clothes_moth", + }, + {"id": 4060, "synset": "webbing_clothes_moth.n.01", "name": "webbing_clothes_moth"}, + {"id": 4061, "synset": "carpet_moth.n.01", "name": "carpet_moth"}, + {"id": 4062, "synset": "gelechiid.n.01", "name": "gelechiid"}, + {"id": 4063, "synset": "grain_moth.n.01", "name": "grain_moth"}, + {"id": 4064, "synset": "angoumois_moth.n.01", "name": "angoumois_moth"}, + {"id": 4065, "synset": "potato_moth.n.01", "name": "potato_moth"}, + {"id": 4066, "synset": "potato_tuberworm.n.01", "name": "potato_tuberworm"}, + {"id": 4067, "synset": "noctuid_moth.n.01", "name": "noctuid_moth"}, + {"id": 4068, "synset": "cutworm.n.01", "name": "cutworm"}, + {"id": 4069, "synset": "underwing.n.01", "name": "underwing"}, + {"id": 4070, "synset": "red_underwing.n.01", "name": "red_underwing"}, + {"id": 4071, "synset": "antler_moth.n.01", "name": "antler_moth"}, + {"id": 4072, "synset": "heliothis_moth.n.01", "name": "heliothis_moth"}, + {"id": 4073, "synset": "army_cutworm.n.01", "name": "army_cutworm"}, + {"id": 4074, "synset": "armyworm.n.02", "name": "armyworm"}, + {"id": 4075, "synset": "armyworm.n.01", "name": "armyworm"}, + {"id": 4076, "synset": "spodoptera_exigua.n.02", "name": "Spodoptera_exigua"}, + {"id": 4077, "synset": "beet_armyworm.n.01", "name": "beet_armyworm"}, + { + "id": 4078, + "synset": "spodoptera_frugiperda.n.02", + "name": "Spodoptera_frugiperda", + }, + {"id": 4079, "synset": "fall_armyworm.n.01", "name": "fall_armyworm"}, + {"id": 4080, "synset": "hawkmoth.n.01", "name": "hawkmoth"}, + {"id": 4081, "synset": "manduca_sexta.n.02", "name": "Manduca_sexta"}, + {"id": 4082, "synset": "tobacco_hornworm.n.01", "name": "tobacco_hornworm"}, + { + "id": 4083, + "synset": "manduca_quinquemaculata.n.02", + "name": "Manduca_quinquemaculata", + }, + {"id": 4084, "synset": "tomato_hornworm.n.01", "name": "tomato_hornworm"}, + {"id": 4085, "synset": "death's-head_moth.n.01", "name": "death's-head_moth"}, + {"id": 4086, "synset": "bombycid.n.01", "name": "bombycid"}, + { + "id": 4087, + "synset": "domestic_silkworm_moth.n.01", + "name": "domestic_silkworm_moth", + }, + {"id": 4088, "synset": "silkworm.n.01", "name": "silkworm"}, + {"id": 4089, "synset": "saturniid.n.01", "name": "saturniid"}, + {"id": 4090, "synset": "emperor.n.03", "name": "emperor"}, + {"id": 4091, "synset": "imperial_moth.n.01", "name": "imperial_moth"}, + {"id": 4092, "synset": "giant_silkworm_moth.n.01", "name": "giant_silkworm_moth"}, + {"id": 4093, "synset": "silkworm.n.02", "name": "silkworm"}, + {"id": 4094, "synset": "luna_moth.n.01", "name": "luna_moth"}, + {"id": 4095, "synset": "cecropia.n.02", "name": "cecropia"}, + {"id": 4096, "synset": "cynthia_moth.n.01", "name": "cynthia_moth"}, + {"id": 4097, "synset": "ailanthus_silkworm.n.01", "name": "ailanthus_silkworm"}, + {"id": 4098, "synset": "io_moth.n.01", "name": "io_moth"}, + {"id": 4099, "synset": "polyphemus_moth.n.01", "name": "polyphemus_moth"}, + {"id": 4100, "synset": "pernyi_moth.n.01", "name": "pernyi_moth"}, + {"id": 4101, "synset": "tussah.n.01", "name": "tussah"}, + {"id": 4102, "synset": "atlas_moth.n.01", "name": "atlas_moth"}, + {"id": 4103, "synset": "arctiid.n.01", "name": "arctiid"}, + {"id": 4104, "synset": "tiger_moth.n.01", "name": "tiger_moth"}, + {"id": 4105, "synset": "cinnabar.n.02", "name": "cinnabar"}, + {"id": 4106, "synset": "lasiocampid.n.01", "name": "lasiocampid"}, + {"id": 4107, "synset": "eggar.n.01", "name": "eggar"}, + { + "id": 4108, + "synset": "tent-caterpillar_moth.n.02", + "name": "tent-caterpillar_moth", + }, + {"id": 4109, "synset": "tent_caterpillar.n.01", "name": "tent_caterpillar"}, + { + "id": 4110, + "synset": "tent-caterpillar_moth.n.01", + "name": "tent-caterpillar_moth", + }, + { + "id": 4111, + "synset": "forest_tent_caterpillar.n.01", + "name": "forest_tent_caterpillar", + }, + {"id": 4112, "synset": "lappet.n.03", "name": "lappet"}, + {"id": 4113, "synset": "lappet_caterpillar.n.01", "name": "lappet_caterpillar"}, + {"id": 4114, "synset": "webworm.n.01", "name": "webworm"}, + {"id": 4115, "synset": "webworm_moth.n.01", "name": "webworm_moth"}, + {"id": 4116, "synset": "hyphantria_cunea.n.02", "name": "Hyphantria_cunea"}, + {"id": 4117, "synset": "fall_webworm.n.01", "name": "fall_webworm"}, + {"id": 4118, "synset": "garden_webworm.n.01", "name": "garden_webworm"}, + {"id": 4119, "synset": "instar.n.01", "name": "instar"}, + {"id": 4120, "synset": "caterpillar.n.01", "name": "caterpillar"}, + {"id": 4121, "synset": "corn_borer.n.01", "name": "corn_borer"}, + {"id": 4122, "synset": "bollworm.n.01", "name": "bollworm"}, + {"id": 4123, "synset": "pink_bollworm.n.01", "name": "pink_bollworm"}, + {"id": 4124, "synset": "corn_earworm.n.01", "name": "corn_earworm"}, + {"id": 4125, "synset": "cabbageworm.n.01", "name": "cabbageworm"}, + {"id": 4126, "synset": "woolly_bear.n.01", "name": "woolly_bear"}, + {"id": 4127, "synset": "woolly_bear_moth.n.01", "name": "woolly_bear_moth"}, + {"id": 4128, "synset": "larva.n.01", "name": "larva"}, + {"id": 4129, "synset": "nymph.n.02", "name": "nymph"}, + {"id": 4130, "synset": "leptocephalus.n.01", "name": "leptocephalus"}, + {"id": 4131, "synset": "grub.n.02", "name": "grub"}, + {"id": 4132, "synset": "maggot.n.01", "name": "maggot"}, + {"id": 4133, "synset": "leatherjacket.n.03", "name": "leatherjacket"}, + {"id": 4134, "synset": "pupa.n.01", "name": "pupa"}, + {"id": 4135, "synset": "chrysalis.n.01", "name": "chrysalis"}, + {"id": 4136, "synset": "imago.n.02", "name": "imago"}, + {"id": 4137, "synset": "queen.n.01", "name": "queen"}, + {"id": 4138, "synset": "phoronid.n.01", "name": "phoronid"}, + {"id": 4139, "synset": "bryozoan.n.01", "name": "bryozoan"}, + {"id": 4140, "synset": "brachiopod.n.01", "name": "brachiopod"}, + {"id": 4141, "synset": "peanut_worm.n.01", "name": "peanut_worm"}, + {"id": 4142, "synset": "echinoderm.n.01", "name": "echinoderm"}, + {"id": 4143, "synset": "brittle_star.n.01", "name": "brittle_star"}, + {"id": 4144, "synset": "basket_star.n.01", "name": "basket_star"}, + { + "id": 4145, + "synset": "astrophyton_muricatum.n.01", + "name": "Astrophyton_muricatum", + }, + {"id": 4146, "synset": "sea_urchin.n.01", "name": "sea_urchin"}, + {"id": 4147, "synset": "edible_sea_urchin.n.01", "name": "edible_sea_urchin"}, + {"id": 4148, "synset": "sand_dollar.n.01", "name": "sand_dollar"}, + {"id": 4149, "synset": "heart_urchin.n.01", "name": "heart_urchin"}, + {"id": 4150, "synset": "crinoid.n.01", "name": "crinoid"}, + {"id": 4151, "synset": "sea_lily.n.01", "name": "sea_lily"}, + {"id": 4152, "synset": "feather_star.n.01", "name": "feather_star"}, + {"id": 4153, "synset": "sea_cucumber.n.01", "name": "sea_cucumber"}, + {"id": 4154, "synset": "trepang.n.01", "name": "trepang"}, + {"id": 4155, "synset": "duplicidentata.n.01", "name": "Duplicidentata"}, + {"id": 4156, "synset": "lagomorph.n.01", "name": "lagomorph"}, + {"id": 4157, "synset": "leporid.n.01", "name": "leporid"}, + {"id": 4158, "synset": "rabbit_ears.n.02", "name": "rabbit_ears"}, + {"id": 4159, "synset": "lapin.n.02", "name": "lapin"}, + {"id": 4160, "synset": "bunny.n.02", "name": "bunny"}, + {"id": 4161, "synset": "european_rabbit.n.01", "name": "European_rabbit"}, + {"id": 4162, "synset": "wood_rabbit.n.01", "name": "wood_rabbit"}, + {"id": 4163, "synset": "eastern_cottontail.n.01", "name": "eastern_cottontail"}, + {"id": 4164, "synset": "swamp_rabbit.n.02", "name": "swamp_rabbit"}, + {"id": 4165, "synset": "marsh_hare.n.01", "name": "marsh_hare"}, + {"id": 4166, "synset": "hare.n.01", "name": "hare"}, + {"id": 4167, "synset": "leveret.n.01", "name": "leveret"}, + {"id": 4168, "synset": "european_hare.n.01", "name": "European_hare"}, + {"id": 4169, "synset": "jackrabbit.n.01", "name": "jackrabbit"}, + { + "id": 4170, + "synset": "white-tailed_jackrabbit.n.01", + "name": "white-tailed_jackrabbit", + }, + {"id": 4171, "synset": "blacktail_jackrabbit.n.01", "name": "blacktail_jackrabbit"}, + {"id": 4172, "synset": "polar_hare.n.01", "name": "polar_hare"}, + {"id": 4173, "synset": "snowshoe_hare.n.01", "name": "snowshoe_hare"}, + {"id": 4174, "synset": "belgian_hare.n.01", "name": "Belgian_hare"}, + {"id": 4175, "synset": "angora.n.03", "name": "Angora"}, + {"id": 4176, "synset": "pika.n.01", "name": "pika"}, + {"id": 4177, "synset": "little_chief_hare.n.01", "name": "little_chief_hare"}, + {"id": 4178, "synset": "collared_pika.n.01", "name": "collared_pika"}, + {"id": 4179, "synset": "mouse.n.01", "name": "mouse"}, + {"id": 4180, "synset": "pocket_rat.n.01", "name": "pocket_rat"}, + {"id": 4181, "synset": "murine.n.01", "name": "murine"}, + {"id": 4182, "synset": "house_mouse.n.01", "name": "house_mouse"}, + {"id": 4183, "synset": "harvest_mouse.n.02", "name": "harvest_mouse"}, + {"id": 4184, "synset": "field_mouse.n.02", "name": "field_mouse"}, + {"id": 4185, "synset": "nude_mouse.n.01", "name": "nude_mouse"}, + {"id": 4186, "synset": "european_wood_mouse.n.01", "name": "European_wood_mouse"}, + {"id": 4187, "synset": "brown_rat.n.01", "name": "brown_rat"}, + {"id": 4188, "synset": "wharf_rat.n.02", "name": "wharf_rat"}, + {"id": 4189, "synset": "sewer_rat.n.01", "name": "sewer_rat"}, + {"id": 4190, "synset": "black_rat.n.01", "name": "black_rat"}, + {"id": 4191, "synset": "bandicoot_rat.n.01", "name": "bandicoot_rat"}, + {"id": 4192, "synset": "jerboa_rat.n.01", "name": "jerboa_rat"}, + {"id": 4193, "synset": "kangaroo_mouse.n.02", "name": "kangaroo_mouse"}, + {"id": 4194, "synset": "water_rat.n.03", "name": "water_rat"}, + {"id": 4195, "synset": "beaver_rat.n.01", "name": "beaver_rat"}, + {"id": 4196, "synset": "new_world_mouse.n.01", "name": "New_World_mouse"}, + { + "id": 4197, + "synset": "american_harvest_mouse.n.01", + "name": "American_harvest_mouse", + }, + {"id": 4198, "synset": "wood_mouse.n.01", "name": "wood_mouse"}, + {"id": 4199, "synset": "white-footed_mouse.n.01", "name": "white-footed_mouse"}, + {"id": 4200, "synset": "deer_mouse.n.01", "name": "deer_mouse"}, + {"id": 4201, "synset": "cactus_mouse.n.01", "name": "cactus_mouse"}, + {"id": 4202, "synset": "cotton_mouse.n.01", "name": "cotton_mouse"}, + {"id": 4203, "synset": "pygmy_mouse.n.01", "name": "pygmy_mouse"}, + {"id": 4204, "synset": "grasshopper_mouse.n.01", "name": "grasshopper_mouse"}, + {"id": 4205, "synset": "muskrat.n.02", "name": "muskrat"}, + {"id": 4206, "synset": "round-tailed_muskrat.n.01", "name": "round-tailed_muskrat"}, + {"id": 4207, "synset": "cotton_rat.n.01", "name": "cotton_rat"}, + {"id": 4208, "synset": "wood_rat.n.01", "name": "wood_rat"}, + { + "id": 4209, + "synset": "dusky-footed_wood_rat.n.01", + "name": "dusky-footed_wood_rat", + }, + {"id": 4210, "synset": "vole.n.01", "name": "vole"}, + {"id": 4211, "synset": "packrat.n.02", "name": "packrat"}, + {"id": 4212, "synset": "dusky-footed_woodrat.n.01", "name": "dusky-footed_woodrat"}, + {"id": 4213, "synset": "eastern_woodrat.n.01", "name": "eastern_woodrat"}, + {"id": 4214, "synset": "rice_rat.n.01", "name": "rice_rat"}, + {"id": 4215, "synset": "pine_vole.n.01", "name": "pine_vole"}, + {"id": 4216, "synset": "meadow_vole.n.01", "name": "meadow_vole"}, + {"id": 4217, "synset": "water_vole.n.02", "name": "water_vole"}, + {"id": 4218, "synset": "prairie_vole.n.01", "name": "prairie_vole"}, + {"id": 4219, "synset": "water_vole.n.01", "name": "water_vole"}, + {"id": 4220, "synset": "red-backed_mouse.n.01", "name": "red-backed_mouse"}, + {"id": 4221, "synset": "phenacomys.n.01", "name": "phenacomys"}, + {"id": 4222, "synset": "eurasian_hamster.n.01", "name": "Eurasian_hamster"}, + {"id": 4223, "synset": "golden_hamster.n.01", "name": "golden_hamster"}, + {"id": 4224, "synset": "gerbil.n.01", "name": "gerbil"}, + {"id": 4225, "synset": "jird.n.01", "name": "jird"}, + {"id": 4226, "synset": "tamarisk_gerbil.n.01", "name": "tamarisk_gerbil"}, + {"id": 4227, "synset": "sand_rat.n.02", "name": "sand_rat"}, + {"id": 4228, "synset": "lemming.n.01", "name": "lemming"}, + {"id": 4229, "synset": "european_lemming.n.01", "name": "European_lemming"}, + {"id": 4230, "synset": "brown_lemming.n.01", "name": "brown_lemming"}, + {"id": 4231, "synset": "grey_lemming.n.01", "name": "grey_lemming"}, + {"id": 4232, "synset": "pied_lemming.n.01", "name": "pied_lemming"}, + { + "id": 4233, + "synset": "hudson_bay_collared_lemming.n.01", + "name": "Hudson_bay_collared_lemming", + }, + {"id": 4234, "synset": "southern_bog_lemming.n.01", "name": "southern_bog_lemming"}, + {"id": 4235, "synset": "northern_bog_lemming.n.01", "name": "northern_bog_lemming"}, + {"id": 4236, "synset": "porcupine.n.01", "name": "porcupine"}, + {"id": 4237, "synset": "old_world_porcupine.n.01", "name": "Old_World_porcupine"}, + { + "id": 4238, + "synset": "brush-tailed_porcupine.n.01", + "name": "brush-tailed_porcupine", + }, + { + "id": 4239, + "synset": "long-tailed_porcupine.n.01", + "name": "long-tailed_porcupine", + }, + {"id": 4240, "synset": "new_world_porcupine.n.01", "name": "New_World_porcupine"}, + {"id": 4241, "synset": "canada_porcupine.n.01", "name": "Canada_porcupine"}, + {"id": 4242, "synset": "pocket_mouse.n.01", "name": "pocket_mouse"}, + {"id": 4243, "synset": "silky_pocket_mouse.n.01", "name": "silky_pocket_mouse"}, + {"id": 4244, "synset": "plains_pocket_mouse.n.01", "name": "plains_pocket_mouse"}, + {"id": 4245, "synset": "hispid_pocket_mouse.n.01", "name": "hispid_pocket_mouse"}, + {"id": 4246, "synset": "mexican_pocket_mouse.n.01", "name": "Mexican_pocket_mouse"}, + {"id": 4247, "synset": "kangaroo_rat.n.01", "name": "kangaroo_rat"}, + {"id": 4248, "synset": "ord_kangaroo_rat.n.01", "name": "Ord_kangaroo_rat"}, + {"id": 4249, "synset": "kangaroo_mouse.n.01", "name": "kangaroo_mouse"}, + {"id": 4250, "synset": "jumping_mouse.n.01", "name": "jumping_mouse"}, + {"id": 4251, "synset": "meadow_jumping_mouse.n.01", "name": "meadow_jumping_mouse"}, + {"id": 4252, "synset": "jerboa.n.01", "name": "jerboa"}, + {"id": 4253, "synset": "typical_jerboa.n.01", "name": "typical_jerboa"}, + {"id": 4254, "synset": "jaculus_jaculus.n.01", "name": "Jaculus_jaculus"}, + {"id": 4255, "synset": "dormouse.n.01", "name": "dormouse"}, + {"id": 4256, "synset": "loir.n.01", "name": "loir"}, + {"id": 4257, "synset": "hazel_mouse.n.01", "name": "hazel_mouse"}, + {"id": 4258, "synset": "lerot.n.01", "name": "lerot"}, + {"id": 4259, "synset": "gopher.n.04", "name": "gopher"}, + {"id": 4260, "synset": "plains_pocket_gopher.n.01", "name": "plains_pocket_gopher"}, + { + "id": 4261, + "synset": "southeastern_pocket_gopher.n.01", + "name": "southeastern_pocket_gopher", + }, + {"id": 4262, "synset": "valley_pocket_gopher.n.01", "name": "valley_pocket_gopher"}, + { + "id": 4263, + "synset": "northern_pocket_gopher.n.01", + "name": "northern_pocket_gopher", + }, + {"id": 4264, "synset": "tree_squirrel.n.01", "name": "tree_squirrel"}, + { + "id": 4265, + "synset": "eastern_grey_squirrel.n.01", + "name": "eastern_grey_squirrel", + }, + { + "id": 4266, + "synset": "western_grey_squirrel.n.01", + "name": "western_grey_squirrel", + }, + {"id": 4267, "synset": "fox_squirrel.n.01", "name": "fox_squirrel"}, + {"id": 4268, "synset": "black_squirrel.n.01", "name": "black_squirrel"}, + {"id": 4269, "synset": "red_squirrel.n.02", "name": "red_squirrel"}, + { + "id": 4270, + "synset": "american_red_squirrel.n.01", + "name": "American_red_squirrel", + }, + {"id": 4271, "synset": "chickeree.n.01", "name": "chickeree"}, + {"id": 4272, "synset": "antelope_squirrel.n.01", "name": "antelope_squirrel"}, + {"id": 4273, "synset": "ground_squirrel.n.02", "name": "ground_squirrel"}, + { + "id": 4274, + "synset": "mantled_ground_squirrel.n.01", + "name": "mantled_ground_squirrel", + }, + {"id": 4275, "synset": "suslik.n.01", "name": "suslik"}, + {"id": 4276, "synset": "flickertail.n.01", "name": "flickertail"}, + {"id": 4277, "synset": "rock_squirrel.n.01", "name": "rock_squirrel"}, + { + "id": 4278, + "synset": "arctic_ground_squirrel.n.01", + "name": "Arctic_ground_squirrel", + }, + {"id": 4279, "synset": "prairie_dog.n.01", "name": "prairie_dog"}, + { + "id": 4280, + "synset": "blacktail_prairie_dog.n.01", + "name": "blacktail_prairie_dog", + }, + { + "id": 4281, + "synset": "whitetail_prairie_dog.n.01", + "name": "whitetail_prairie_dog", + }, + {"id": 4282, "synset": "eastern_chipmunk.n.01", "name": "eastern_chipmunk"}, + {"id": 4283, "synset": "chipmunk.n.01", "name": "chipmunk"}, + {"id": 4284, "synset": "baronduki.n.01", "name": "baronduki"}, + { + "id": 4285, + "synset": "american_flying_squirrel.n.01", + "name": "American_flying_squirrel", + }, + { + "id": 4286, + "synset": "southern_flying_squirrel.n.01", + "name": "southern_flying_squirrel", + }, + { + "id": 4287, + "synset": "northern_flying_squirrel.n.01", + "name": "northern_flying_squirrel", + }, + {"id": 4288, "synset": "marmot.n.01", "name": "marmot"}, + {"id": 4289, "synset": "groundhog.n.01", "name": "groundhog"}, + {"id": 4290, "synset": "hoary_marmot.n.01", "name": "hoary_marmot"}, + {"id": 4291, "synset": "yellowbelly_marmot.n.01", "name": "yellowbelly_marmot"}, + { + "id": 4292, + "synset": "asiatic_flying_squirrel.n.01", + "name": "Asiatic_flying_squirrel", + }, + {"id": 4293, "synset": "beaver.n.07", "name": "beaver"}, + {"id": 4294, "synset": "old_world_beaver.n.01", "name": "Old_World_beaver"}, + {"id": 4295, "synset": "new_world_beaver.n.01", "name": "New_World_beaver"}, + {"id": 4296, "synset": "mountain_beaver.n.01", "name": "mountain_beaver"}, + {"id": 4297, "synset": "cavy.n.01", "name": "cavy"}, + {"id": 4298, "synset": "guinea_pig.n.02", "name": "guinea_pig"}, + {"id": 4299, "synset": "aperea.n.01", "name": "aperea"}, + {"id": 4300, "synset": "mara.n.02", "name": "mara"}, + {"id": 4301, "synset": "capybara.n.01", "name": "capybara"}, + {"id": 4302, "synset": "agouti.n.01", "name": "agouti"}, + {"id": 4303, "synset": "paca.n.01", "name": "paca"}, + {"id": 4304, "synset": "mountain_paca.n.01", "name": "mountain_paca"}, + {"id": 4305, "synset": "coypu.n.01", "name": "coypu"}, + {"id": 4306, "synset": "chinchilla.n.03", "name": "chinchilla"}, + {"id": 4307, "synset": "mountain_chinchilla.n.01", "name": "mountain_chinchilla"}, + {"id": 4308, "synset": "viscacha.n.01", "name": "viscacha"}, + {"id": 4309, "synset": "abrocome.n.01", "name": "abrocome"}, + {"id": 4310, "synset": "mole_rat.n.02", "name": "mole_rat"}, + {"id": 4311, "synset": "mole_rat.n.01", "name": "mole_rat"}, + {"id": 4312, "synset": "sand_rat.n.01", "name": "sand_rat"}, + {"id": 4313, "synset": "naked_mole_rat.n.01", "name": "naked_mole_rat"}, + {"id": 4314, "synset": "queen.n.09", "name": "queen"}, + {"id": 4315, "synset": "damaraland_mole_rat.n.01", "name": "Damaraland_mole_rat"}, + {"id": 4316, "synset": "ungulata.n.01", "name": "Ungulata"}, + {"id": 4317, "synset": "ungulate.n.01", "name": "ungulate"}, + {"id": 4318, "synset": "unguiculate.n.01", "name": "unguiculate"}, + {"id": 4319, "synset": "dinoceras.n.01", "name": "dinoceras"}, + {"id": 4320, "synset": "hyrax.n.01", "name": "hyrax"}, + {"id": 4321, "synset": "rock_hyrax.n.01", "name": "rock_hyrax"}, + {"id": 4322, "synset": "odd-toed_ungulate.n.01", "name": "odd-toed_ungulate"}, + {"id": 4323, "synset": "equine.n.01", "name": "equine"}, + {"id": 4324, "synset": "roan.n.02", "name": "roan"}, + {"id": 4325, "synset": "stablemate.n.01", "name": "stablemate"}, + {"id": 4326, "synset": "gee-gee.n.01", "name": "gee-gee"}, + {"id": 4327, "synset": "eohippus.n.01", "name": "eohippus"}, + {"id": 4328, "synset": "filly.n.01", "name": "filly"}, + {"id": 4329, "synset": "colt.n.01", "name": "colt"}, + {"id": 4330, "synset": "male_horse.n.01", "name": "male_horse"}, + {"id": 4331, "synset": "ridgeling.n.01", "name": "ridgeling"}, + {"id": 4332, "synset": "stallion.n.01", "name": "stallion"}, + {"id": 4333, "synset": "stud.n.04", "name": "stud"}, + {"id": 4334, "synset": "gelding.n.01", "name": "gelding"}, + {"id": 4335, "synset": "mare.n.01", "name": "mare"}, + {"id": 4336, "synset": "broodmare.n.01", "name": "broodmare"}, + {"id": 4337, "synset": "saddle_horse.n.01", "name": "saddle_horse"}, + {"id": 4338, "synset": "remount.n.01", "name": "remount"}, + {"id": 4339, "synset": "palfrey.n.01", "name": "palfrey"}, + {"id": 4340, "synset": "warhorse.n.03", "name": "warhorse"}, + {"id": 4341, "synset": "cavalry_horse.n.01", "name": "cavalry_horse"}, + {"id": 4342, "synset": "charger.n.01", "name": "charger"}, + {"id": 4343, "synset": "steed.n.01", "name": "steed"}, + {"id": 4344, "synset": "prancer.n.01", "name": "prancer"}, + {"id": 4345, "synset": "hack.n.08", "name": "hack"}, + {"id": 4346, "synset": "cow_pony.n.01", "name": "cow_pony"}, + {"id": 4347, "synset": "quarter_horse.n.01", "name": "quarter_horse"}, + {"id": 4348, "synset": "morgan.n.06", "name": "Morgan"}, + {"id": 4349, "synset": "tennessee_walker.n.01", "name": "Tennessee_walker"}, + { + "id": 4350, + "synset": "american_saddle_horse.n.01", + "name": "American_saddle_horse", + }, + {"id": 4351, "synset": "appaloosa.n.01", "name": "Appaloosa"}, + {"id": 4352, "synset": "arabian.n.02", "name": "Arabian"}, + {"id": 4353, "synset": "lippizan.n.01", "name": "Lippizan"}, + {"id": 4354, "synset": "pony.n.01", "name": "pony"}, + {"id": 4355, "synset": "polo_pony.n.01", "name": "polo_pony"}, + {"id": 4356, "synset": "mustang.n.01", "name": "mustang"}, + {"id": 4357, "synset": "bronco.n.01", "name": "bronco"}, + {"id": 4358, "synset": "bucking_bronco.n.01", "name": "bucking_bronco"}, + {"id": 4359, "synset": "buckskin.n.01", "name": "buckskin"}, + {"id": 4360, "synset": "crowbait.n.01", "name": "crowbait"}, + {"id": 4361, "synset": "dun.n.01", "name": "dun"}, + {"id": 4362, "synset": "grey.n.07", "name": "grey"}, + {"id": 4363, "synset": "wild_horse.n.01", "name": "wild_horse"}, + {"id": 4364, "synset": "tarpan.n.01", "name": "tarpan"}, + {"id": 4365, "synset": "przewalski's_horse.n.01", "name": "Przewalski's_horse"}, + {"id": 4366, "synset": "cayuse.n.01", "name": "cayuse"}, + {"id": 4367, "synset": "hack.n.07", "name": "hack"}, + {"id": 4368, "synset": "hack.n.06", "name": "hack"}, + {"id": 4369, "synset": "plow_horse.n.01", "name": "plow_horse"}, + {"id": 4370, "synset": "shetland_pony.n.01", "name": "Shetland_pony"}, + {"id": 4371, "synset": "welsh_pony.n.01", "name": "Welsh_pony"}, + {"id": 4372, "synset": "exmoor.n.02", "name": "Exmoor"}, + {"id": 4373, "synset": "racehorse.n.01", "name": "racehorse"}, + {"id": 4374, "synset": "thoroughbred.n.02", "name": "thoroughbred"}, + {"id": 4375, "synset": "steeplechaser.n.01", "name": "steeplechaser"}, + {"id": 4376, "synset": "racer.n.03", "name": "racer"}, + {"id": 4377, "synset": "finisher.n.06", "name": "finisher"}, + {"id": 4378, "synset": "pony.n.02", "name": "pony"}, + {"id": 4379, "synset": "yearling.n.02", "name": "yearling"}, + {"id": 4380, "synset": "dark_horse.n.02", "name": "dark_horse"}, + {"id": 4381, "synset": "mudder.n.01", "name": "mudder"}, + {"id": 4382, "synset": "nonstarter.n.02", "name": "nonstarter"}, + {"id": 4383, "synset": "stalking-horse.n.04", "name": "stalking-horse"}, + {"id": 4384, "synset": "harness_horse.n.01", "name": "harness_horse"}, + {"id": 4385, "synset": "cob.n.02", "name": "cob"}, + {"id": 4386, "synset": "hackney.n.02", "name": "hackney"}, + {"id": 4387, "synset": "workhorse.n.02", "name": "workhorse"}, + {"id": 4388, "synset": "draft_horse.n.01", "name": "draft_horse"}, + {"id": 4389, "synset": "packhorse.n.01", "name": "packhorse"}, + {"id": 4390, "synset": "carthorse.n.01", "name": "carthorse"}, + {"id": 4391, "synset": "clydesdale.n.01", "name": "Clydesdale"}, + {"id": 4392, "synset": "percheron.n.01", "name": "Percheron"}, + {"id": 4393, "synset": "farm_horse.n.01", "name": "farm_horse"}, + {"id": 4394, "synset": "shire.n.02", "name": "shire"}, + {"id": 4395, "synset": "pole_horse.n.02", "name": "pole_horse"}, + {"id": 4396, "synset": "post_horse.n.01", "name": "post_horse"}, + {"id": 4397, "synset": "coach_horse.n.01", "name": "coach_horse"}, + {"id": 4398, "synset": "pacer.n.02", "name": "pacer"}, + {"id": 4399, "synset": "pacer.n.01", "name": "pacer"}, + {"id": 4400, "synset": "trotting_horse.n.01", "name": "trotting_horse"}, + {"id": 4401, "synset": "pole_horse.n.01", "name": "pole_horse"}, + {"id": 4402, "synset": "stepper.n.03", "name": "stepper"}, + {"id": 4403, "synset": "chestnut.n.06", "name": "chestnut"}, + {"id": 4404, "synset": "liver_chestnut.n.01", "name": "liver_chestnut"}, + {"id": 4405, "synset": "bay.n.07", "name": "bay"}, + {"id": 4406, "synset": "sorrel.n.05", "name": "sorrel"}, + {"id": 4407, "synset": "palomino.n.01", "name": "palomino"}, + {"id": 4408, "synset": "pinto.n.01", "name": "pinto"}, + {"id": 4409, "synset": "ass.n.03", "name": "ass"}, + {"id": 4410, "synset": "burro.n.01", "name": "burro"}, + {"id": 4411, "synset": "moke.n.01", "name": "moke"}, + {"id": 4412, "synset": "jack.n.12", "name": "jack"}, + {"id": 4413, "synset": "jennet.n.01", "name": "jennet"}, + {"id": 4414, "synset": "mule.n.01", "name": "mule"}, + {"id": 4415, "synset": "hinny.n.01", "name": "hinny"}, + {"id": 4416, "synset": "wild_ass.n.01", "name": "wild_ass"}, + {"id": 4417, "synset": "african_wild_ass.n.01", "name": "African_wild_ass"}, + {"id": 4418, "synset": "kiang.n.01", "name": "kiang"}, + {"id": 4419, "synset": "onager.n.02", "name": "onager"}, + {"id": 4420, "synset": "chigetai.n.01", "name": "chigetai"}, + {"id": 4421, "synset": "common_zebra.n.01", "name": "common_zebra"}, + {"id": 4422, "synset": "mountain_zebra.n.01", "name": "mountain_zebra"}, + {"id": 4423, "synset": "grevy's_zebra.n.01", "name": "grevy's_zebra"}, + {"id": 4424, "synset": "quagga.n.01", "name": "quagga"}, + {"id": 4425, "synset": "indian_rhinoceros.n.01", "name": "Indian_rhinoceros"}, + {"id": 4426, "synset": "woolly_rhinoceros.n.01", "name": "woolly_rhinoceros"}, + {"id": 4427, "synset": "white_rhinoceros.n.01", "name": "white_rhinoceros"}, + {"id": 4428, "synset": "black_rhinoceros.n.01", "name": "black_rhinoceros"}, + {"id": 4429, "synset": "tapir.n.01", "name": "tapir"}, + {"id": 4430, "synset": "new_world_tapir.n.01", "name": "New_World_tapir"}, + {"id": 4431, "synset": "malayan_tapir.n.01", "name": "Malayan_tapir"}, + {"id": 4432, "synset": "even-toed_ungulate.n.01", "name": "even-toed_ungulate"}, + {"id": 4433, "synset": "swine.n.01", "name": "swine"}, + {"id": 4434, "synset": "piglet.n.01", "name": "piglet"}, + {"id": 4435, "synset": "sucking_pig.n.01", "name": "sucking_pig"}, + {"id": 4436, "synset": "porker.n.01", "name": "porker"}, + {"id": 4437, "synset": "boar.n.02", "name": "boar"}, + {"id": 4438, "synset": "sow.n.01", "name": "sow"}, + {"id": 4439, "synset": "razorback.n.01", "name": "razorback"}, + {"id": 4440, "synset": "wild_boar.n.01", "name": "wild_boar"}, + {"id": 4441, "synset": "babirusa.n.01", "name": "babirusa"}, + {"id": 4442, "synset": "warthog.n.01", "name": "warthog"}, + {"id": 4443, "synset": "peccary.n.01", "name": "peccary"}, + {"id": 4444, "synset": "collared_peccary.n.01", "name": "collared_peccary"}, + {"id": 4445, "synset": "white-lipped_peccary.n.01", "name": "white-lipped_peccary"}, + {"id": 4446, "synset": "ruminant.n.01", "name": "ruminant"}, + {"id": 4447, "synset": "bovid.n.01", "name": "bovid"}, + {"id": 4448, "synset": "bovine.n.01", "name": "bovine"}, + {"id": 4449, "synset": "ox.n.02", "name": "ox"}, + {"id": 4450, "synset": "cattle.n.01", "name": "cattle"}, + {"id": 4451, "synset": "ox.n.01", "name": "ox"}, + {"id": 4452, "synset": "stirk.n.01", "name": "stirk"}, + {"id": 4453, "synset": "bullock.n.02", "name": "bullock"}, + {"id": 4454, "synset": "bull.n.01", "name": "bull"}, + {"id": 4455, "synset": "cow.n.01", "name": "cow"}, + {"id": 4456, "synset": "heifer.n.01", "name": "heifer"}, + {"id": 4457, "synset": "bullock.n.01", "name": "bullock"}, + {"id": 4458, "synset": "dogie.n.01", "name": "dogie"}, + {"id": 4459, "synset": "maverick.n.02", "name": "maverick"}, + {"id": 4460, "synset": "longhorn.n.01", "name": "longhorn"}, + {"id": 4461, "synset": "brahman.n.04", "name": "Brahman"}, + {"id": 4462, "synset": "zebu.n.01", "name": "zebu"}, + {"id": 4463, "synset": "aurochs.n.02", "name": "aurochs"}, + {"id": 4464, "synset": "yak.n.02", "name": "yak"}, + {"id": 4465, "synset": "banteng.n.01", "name": "banteng"}, + {"id": 4466, "synset": "welsh.n.03", "name": "Welsh"}, + {"id": 4467, "synset": "red_poll.n.01", "name": "red_poll"}, + {"id": 4468, "synset": "santa_gertrudis.n.01", "name": "Santa_Gertrudis"}, + {"id": 4469, "synset": "aberdeen_angus.n.01", "name": "Aberdeen_Angus"}, + {"id": 4470, "synset": "africander.n.01", "name": "Africander"}, + {"id": 4471, "synset": "dairy_cattle.n.01", "name": "dairy_cattle"}, + {"id": 4472, "synset": "ayrshire.n.01", "name": "Ayrshire"}, + {"id": 4473, "synset": "brown_swiss.n.01", "name": "Brown_Swiss"}, + {"id": 4474, "synset": "charolais.n.01", "name": "Charolais"}, + {"id": 4475, "synset": "jersey.n.05", "name": "Jersey"}, + {"id": 4476, "synset": "devon.n.02", "name": "Devon"}, + {"id": 4477, "synset": "grade.n.09", "name": "grade"}, + {"id": 4478, "synset": "durham.n.02", "name": "Durham"}, + {"id": 4479, "synset": "milking_shorthorn.n.01", "name": "milking_shorthorn"}, + {"id": 4480, "synset": "galloway.n.02", "name": "Galloway"}, + {"id": 4481, "synset": "friesian.n.01", "name": "Friesian"}, + {"id": 4482, "synset": "guernsey.n.02", "name": "Guernsey"}, + {"id": 4483, "synset": "hereford.n.01", "name": "Hereford"}, + {"id": 4484, "synset": "cattalo.n.01", "name": "cattalo"}, + {"id": 4485, "synset": "old_world_buffalo.n.01", "name": "Old_World_buffalo"}, + {"id": 4486, "synset": "water_buffalo.n.01", "name": "water_buffalo"}, + {"id": 4487, "synset": "indian_buffalo.n.01", "name": "Indian_buffalo"}, + {"id": 4488, "synset": "carabao.n.01", "name": "carabao"}, + {"id": 4489, "synset": "anoa.n.01", "name": "anoa"}, + {"id": 4490, "synset": "tamarau.n.01", "name": "tamarau"}, + {"id": 4491, "synset": "cape_buffalo.n.01", "name": "Cape_buffalo"}, + {"id": 4492, "synset": "asian_wild_ox.n.01", "name": "Asian_wild_ox"}, + {"id": 4493, "synset": "gaur.n.01", "name": "gaur"}, + {"id": 4494, "synset": "gayal.n.01", "name": "gayal"}, + {"id": 4495, "synset": "bison.n.01", "name": "bison"}, + {"id": 4496, "synset": "american_bison.n.01", "name": "American_bison"}, + {"id": 4497, "synset": "wisent.n.01", "name": "wisent"}, + {"id": 4498, "synset": "musk_ox.n.01", "name": "musk_ox"}, + {"id": 4499, "synset": "ewe.n.03", "name": "ewe"}, + {"id": 4500, "synset": "wether.n.01", "name": "wether"}, + {"id": 4501, "synset": "lambkin.n.01", "name": "lambkin"}, + {"id": 4502, "synset": "baa-lamb.n.01", "name": "baa-lamb"}, + {"id": 4503, "synset": "hog.n.02", "name": "hog"}, + {"id": 4504, "synset": "teg.n.01", "name": "teg"}, + {"id": 4505, "synset": "persian_lamb.n.02", "name": "Persian_lamb"}, + {"id": 4506, "synset": "domestic_sheep.n.01", "name": "domestic_sheep"}, + {"id": 4507, "synset": "cotswold.n.01", "name": "Cotswold"}, + {"id": 4508, "synset": "hampshire.n.02", "name": "Hampshire"}, + {"id": 4509, "synset": "lincoln.n.03", "name": "Lincoln"}, + {"id": 4510, "synset": "exmoor.n.01", "name": "Exmoor"}, + {"id": 4511, "synset": "cheviot.n.01", "name": "Cheviot"}, + {"id": 4512, "synset": "broadtail.n.02", "name": "broadtail"}, + {"id": 4513, "synset": "longwool.n.01", "name": "longwool"}, + {"id": 4514, "synset": "merino.n.01", "name": "merino"}, + {"id": 4515, "synset": "rambouillet.n.01", "name": "Rambouillet"}, + {"id": 4516, "synset": "wild_sheep.n.01", "name": "wild_sheep"}, + {"id": 4517, "synset": "argali.n.01", "name": "argali"}, + {"id": 4518, "synset": "marco_polo_sheep.n.01", "name": "Marco_Polo_sheep"}, + {"id": 4519, "synset": "urial.n.01", "name": "urial"}, + {"id": 4520, "synset": "dall_sheep.n.01", "name": "Dall_sheep"}, + {"id": 4521, "synset": "mountain_sheep.n.01", "name": "mountain_sheep"}, + {"id": 4522, "synset": "bighorn.n.02", "name": "bighorn"}, + {"id": 4523, "synset": "mouflon.n.01", "name": "mouflon"}, + {"id": 4524, "synset": "aoudad.n.01", "name": "aoudad"}, + {"id": 4525, "synset": "kid.n.05", "name": "kid"}, + {"id": 4526, "synset": "billy.n.02", "name": "billy"}, + {"id": 4527, "synset": "nanny.n.02", "name": "nanny"}, + {"id": 4528, "synset": "domestic_goat.n.01", "name": "domestic_goat"}, + {"id": 4529, "synset": "cashmere_goat.n.01", "name": "Cashmere_goat"}, + {"id": 4530, "synset": "angora.n.02", "name": "Angora"}, + {"id": 4531, "synset": "wild_goat.n.01", "name": "wild_goat"}, + {"id": 4532, "synset": "bezoar_goat.n.01", "name": "bezoar_goat"}, + {"id": 4533, "synset": "markhor.n.01", "name": "markhor"}, + {"id": 4534, "synset": "ibex.n.01", "name": "ibex"}, + {"id": 4535, "synset": "goat_antelope.n.01", "name": "goat_antelope"}, + {"id": 4536, "synset": "mountain_goat.n.01", "name": "mountain_goat"}, + {"id": 4537, "synset": "goral.n.01", "name": "goral"}, + {"id": 4538, "synset": "serow.n.01", "name": "serow"}, + {"id": 4539, "synset": "chamois.n.02", "name": "chamois"}, + {"id": 4540, "synset": "takin.n.01", "name": "takin"}, + {"id": 4541, "synset": "antelope.n.01", "name": "antelope"}, + {"id": 4542, "synset": "blackbuck.n.01", "name": "blackbuck"}, + {"id": 4543, "synset": "gerenuk.n.01", "name": "gerenuk"}, + {"id": 4544, "synset": "addax.n.01", "name": "addax"}, + {"id": 4545, "synset": "gnu.n.01", "name": "gnu"}, + {"id": 4546, "synset": "dik-dik.n.01", "name": "dik-dik"}, + {"id": 4547, "synset": "hartebeest.n.01", "name": "hartebeest"}, + {"id": 4548, "synset": "sassaby.n.01", "name": "sassaby"}, + {"id": 4549, "synset": "impala.n.01", "name": "impala"}, + {"id": 4550, "synset": "thomson's_gazelle.n.01", "name": "Thomson's_gazelle"}, + {"id": 4551, "synset": "gazella_subgutturosa.n.01", "name": "Gazella_subgutturosa"}, + {"id": 4552, "synset": "springbok.n.01", "name": "springbok"}, + {"id": 4553, "synset": "bongo.n.02", "name": "bongo"}, + {"id": 4554, "synset": "kudu.n.01", "name": "kudu"}, + {"id": 4555, "synset": "greater_kudu.n.01", "name": "greater_kudu"}, + {"id": 4556, "synset": "lesser_kudu.n.01", "name": "lesser_kudu"}, + {"id": 4557, "synset": "harnessed_antelope.n.01", "name": "harnessed_antelope"}, + {"id": 4558, "synset": "nyala.n.02", "name": "nyala"}, + {"id": 4559, "synset": "mountain_nyala.n.01", "name": "mountain_nyala"}, + {"id": 4560, "synset": "bushbuck.n.01", "name": "bushbuck"}, + {"id": 4561, "synset": "nilgai.n.01", "name": "nilgai"}, + {"id": 4562, "synset": "sable_antelope.n.01", "name": "sable_antelope"}, + {"id": 4563, "synset": "saiga.n.01", "name": "saiga"}, + {"id": 4564, "synset": "steenbok.n.01", "name": "steenbok"}, + {"id": 4565, "synset": "eland.n.01", "name": "eland"}, + {"id": 4566, "synset": "common_eland.n.01", "name": "common_eland"}, + {"id": 4567, "synset": "giant_eland.n.01", "name": "giant_eland"}, + {"id": 4568, "synset": "kob.n.01", "name": "kob"}, + {"id": 4569, "synset": "lechwe.n.01", "name": "lechwe"}, + {"id": 4570, "synset": "waterbuck.n.01", "name": "waterbuck"}, + {"id": 4571, "synset": "puku.n.01", "name": "puku"}, + {"id": 4572, "synset": "oryx.n.01", "name": "oryx"}, + {"id": 4573, "synset": "gemsbok.n.01", "name": "gemsbok"}, + {"id": 4574, "synset": "forest_goat.n.01", "name": "forest_goat"}, + {"id": 4575, "synset": "pronghorn.n.01", "name": "pronghorn"}, + {"id": 4576, "synset": "stag.n.02", "name": "stag"}, + {"id": 4577, "synset": "royal.n.02", "name": "royal"}, + {"id": 4578, "synset": "pricket.n.02", "name": "pricket"}, + {"id": 4579, "synset": "fawn.n.02", "name": "fawn"}, + {"id": 4580, "synset": "red_deer.n.01", "name": "red_deer"}, + {"id": 4581, "synset": "hart.n.03", "name": "hart"}, + {"id": 4582, "synset": "hind.n.02", "name": "hind"}, + {"id": 4583, "synset": "brocket.n.02", "name": "brocket"}, + {"id": 4584, "synset": "sambar.n.01", "name": "sambar"}, + {"id": 4585, "synset": "wapiti.n.01", "name": "wapiti"}, + {"id": 4586, "synset": "japanese_deer.n.01", "name": "Japanese_deer"}, + {"id": 4587, "synset": "virginia_deer.n.01", "name": "Virginia_deer"}, + {"id": 4588, "synset": "mule_deer.n.01", "name": "mule_deer"}, + {"id": 4589, "synset": "black-tailed_deer.n.01", "name": "black-tailed_deer"}, + {"id": 4590, "synset": "fallow_deer.n.01", "name": "fallow_deer"}, + {"id": 4591, "synset": "roe_deer.n.01", "name": "roe_deer"}, + {"id": 4592, "synset": "roebuck.n.01", "name": "roebuck"}, + {"id": 4593, "synset": "caribou.n.01", "name": "caribou"}, + {"id": 4594, "synset": "woodland_caribou.n.01", "name": "woodland_caribou"}, + { + "id": 4595, + "synset": "barren_ground_caribou.n.01", + "name": "barren_ground_caribou", + }, + {"id": 4596, "synset": "brocket.n.01", "name": "brocket"}, + {"id": 4597, "synset": "muntjac.n.01", "name": "muntjac"}, + {"id": 4598, "synset": "musk_deer.n.01", "name": "musk_deer"}, + {"id": 4599, "synset": "pere_david's_deer.n.01", "name": "pere_david's_deer"}, + {"id": 4600, "synset": "chevrotain.n.01", "name": "chevrotain"}, + {"id": 4601, "synset": "kanchil.n.01", "name": "kanchil"}, + {"id": 4602, "synset": "napu.n.01", "name": "napu"}, + {"id": 4603, "synset": "water_chevrotain.n.01", "name": "water_chevrotain"}, + {"id": 4604, "synset": "arabian_camel.n.01", "name": "Arabian_camel"}, + {"id": 4605, "synset": "bactrian_camel.n.01", "name": "Bactrian_camel"}, + {"id": 4606, "synset": "llama.n.01", "name": "llama"}, + {"id": 4607, "synset": "domestic_llama.n.01", "name": "domestic_llama"}, + {"id": 4608, "synset": "guanaco.n.01", "name": "guanaco"}, + {"id": 4609, "synset": "alpaca.n.03", "name": "alpaca"}, + {"id": 4610, "synset": "vicuna.n.03", "name": "vicuna"}, + {"id": 4611, "synset": "okapi.n.01", "name": "okapi"}, + {"id": 4612, "synset": "musteline_mammal.n.01", "name": "musteline_mammal"}, + {"id": 4613, "synset": "weasel.n.02", "name": "weasel"}, + {"id": 4614, "synset": "ermine.n.02", "name": "ermine"}, + {"id": 4615, "synset": "stoat.n.01", "name": "stoat"}, + { + "id": 4616, + "synset": "new_world_least_weasel.n.01", + "name": "New_World_least_weasel", + }, + { + "id": 4617, + "synset": "old_world_least_weasel.n.01", + "name": "Old_World_least_weasel", + }, + {"id": 4618, "synset": "longtail_weasel.n.01", "name": "longtail_weasel"}, + {"id": 4619, "synset": "mink.n.03", "name": "mink"}, + {"id": 4620, "synset": "american_mink.n.01", "name": "American_mink"}, + {"id": 4621, "synset": "polecat.n.02", "name": "polecat"}, + {"id": 4622, "synset": "black-footed_ferret.n.01", "name": "black-footed_ferret"}, + {"id": 4623, "synset": "muishond.n.01", "name": "muishond"}, + {"id": 4624, "synset": "snake_muishond.n.01", "name": "snake_muishond"}, + {"id": 4625, "synset": "striped_muishond.n.01", "name": "striped_muishond"}, + {"id": 4626, "synset": "otter.n.02", "name": "otter"}, + {"id": 4627, "synset": "river_otter.n.01", "name": "river_otter"}, + {"id": 4628, "synset": "eurasian_otter.n.01", "name": "Eurasian_otter"}, + {"id": 4629, "synset": "sea_otter.n.01", "name": "sea_otter"}, + {"id": 4630, "synset": "skunk.n.04", "name": "skunk"}, + {"id": 4631, "synset": "striped_skunk.n.01", "name": "striped_skunk"}, + {"id": 4632, "synset": "hooded_skunk.n.01", "name": "hooded_skunk"}, + {"id": 4633, "synset": "hog-nosed_skunk.n.01", "name": "hog-nosed_skunk"}, + {"id": 4634, "synset": "spotted_skunk.n.01", "name": "spotted_skunk"}, + {"id": 4635, "synset": "badger.n.02", "name": "badger"}, + {"id": 4636, "synset": "american_badger.n.01", "name": "American_badger"}, + {"id": 4637, "synset": "eurasian_badger.n.01", "name": "Eurasian_badger"}, + {"id": 4638, "synset": "ratel.n.01", "name": "ratel"}, + {"id": 4639, "synset": "ferret_badger.n.01", "name": "ferret_badger"}, + {"id": 4640, "synset": "hog_badger.n.01", "name": "hog_badger"}, + {"id": 4641, "synset": "wolverine.n.03", "name": "wolverine"}, + {"id": 4642, "synset": "glutton.n.02", "name": "glutton"}, + {"id": 4643, "synset": "grison.n.01", "name": "grison"}, + {"id": 4644, "synset": "marten.n.01", "name": "marten"}, + {"id": 4645, "synset": "pine_marten.n.01", "name": "pine_marten"}, + {"id": 4646, "synset": "sable.n.05", "name": "sable"}, + {"id": 4647, "synset": "american_marten.n.01", "name": "American_marten"}, + {"id": 4648, "synset": "stone_marten.n.01", "name": "stone_marten"}, + {"id": 4649, "synset": "fisher.n.02", "name": "fisher"}, + { + "id": 4650, + "synset": "yellow-throated_marten.n.01", + "name": "yellow-throated_marten", + }, + {"id": 4651, "synset": "tayra.n.01", "name": "tayra"}, + {"id": 4652, "synset": "fictional_animal.n.01", "name": "fictional_animal"}, + {"id": 4653, "synset": "pachyderm.n.01", "name": "pachyderm"}, + {"id": 4654, "synset": "edentate.n.01", "name": "edentate"}, + {"id": 4655, "synset": "armadillo.n.01", "name": "armadillo"}, + {"id": 4656, "synset": "peba.n.01", "name": "peba"}, + {"id": 4657, "synset": "apar.n.01", "name": "apar"}, + {"id": 4658, "synset": "tatouay.n.01", "name": "tatouay"}, + {"id": 4659, "synset": "peludo.n.01", "name": "peludo"}, + {"id": 4660, "synset": "giant_armadillo.n.01", "name": "giant_armadillo"}, + {"id": 4661, "synset": "pichiciago.n.01", "name": "pichiciago"}, + {"id": 4662, "synset": "sloth.n.02", "name": "sloth"}, + {"id": 4663, "synset": "three-toed_sloth.n.01", "name": "three-toed_sloth"}, + {"id": 4664, "synset": "two-toed_sloth.n.02", "name": "two-toed_sloth"}, + {"id": 4665, "synset": "two-toed_sloth.n.01", "name": "two-toed_sloth"}, + {"id": 4666, "synset": "megatherian.n.01", "name": "megatherian"}, + {"id": 4667, "synset": "mylodontid.n.01", "name": "mylodontid"}, + {"id": 4668, "synset": "anteater.n.02", "name": "anteater"}, + {"id": 4669, "synset": "ant_bear.n.01", "name": "ant_bear"}, + {"id": 4670, "synset": "silky_anteater.n.01", "name": "silky_anteater"}, + {"id": 4671, "synset": "tamandua.n.01", "name": "tamandua"}, + {"id": 4672, "synset": "pangolin.n.01", "name": "pangolin"}, + {"id": 4673, "synset": "coronet.n.02", "name": "coronet"}, + {"id": 4674, "synset": "scapular.n.01", "name": "scapular"}, + {"id": 4675, "synset": "tadpole.n.01", "name": "tadpole"}, + {"id": 4676, "synset": "primate.n.02", "name": "primate"}, + {"id": 4677, "synset": "simian.n.01", "name": "simian"}, + {"id": 4678, "synset": "ape.n.01", "name": "ape"}, + {"id": 4679, "synset": "anthropoid.n.02", "name": "anthropoid"}, + {"id": 4680, "synset": "anthropoid_ape.n.01", "name": "anthropoid_ape"}, + {"id": 4681, "synset": "hominoid.n.01", "name": "hominoid"}, + {"id": 4682, "synset": "hominid.n.01", "name": "hominid"}, + {"id": 4683, "synset": "homo.n.02", "name": "homo"}, + {"id": 4684, "synset": "world.n.08", "name": "world"}, + {"id": 4685, "synset": "homo_erectus.n.01", "name": "Homo_erectus"}, + {"id": 4686, "synset": "pithecanthropus.n.01", "name": "Pithecanthropus"}, + {"id": 4687, "synset": "java_man.n.01", "name": "Java_man"}, + {"id": 4688, "synset": "peking_man.n.01", "name": "Peking_man"}, + {"id": 4689, "synset": "sinanthropus.n.01", "name": "Sinanthropus"}, + {"id": 4690, "synset": "homo_soloensis.n.01", "name": "Homo_soloensis"}, + {"id": 4691, "synset": "javanthropus.n.01", "name": "Javanthropus"}, + {"id": 4692, "synset": "homo_habilis.n.01", "name": "Homo_habilis"}, + {"id": 4693, "synset": "homo_sapiens.n.01", "name": "Homo_sapiens"}, + {"id": 4694, "synset": "neandertal_man.n.01", "name": "Neandertal_man"}, + {"id": 4695, "synset": "cro-magnon.n.01", "name": "Cro-magnon"}, + {"id": 4696, "synset": "homo_sapiens_sapiens.n.01", "name": "Homo_sapiens_sapiens"}, + {"id": 4697, "synset": "australopithecine.n.01", "name": "australopithecine"}, + { + "id": 4698, + "synset": "australopithecus_afarensis.n.01", + "name": "Australopithecus_afarensis", + }, + { + "id": 4699, + "synset": "australopithecus_africanus.n.01", + "name": "Australopithecus_africanus", + }, + { + "id": 4700, + "synset": "australopithecus_boisei.n.01", + "name": "Australopithecus_boisei", + }, + {"id": 4701, "synset": "zinjanthropus.n.01", "name": "Zinjanthropus"}, + { + "id": 4702, + "synset": "australopithecus_robustus.n.01", + "name": "Australopithecus_robustus", + }, + {"id": 4703, "synset": "paranthropus.n.01", "name": "Paranthropus"}, + {"id": 4704, "synset": "sivapithecus.n.01", "name": "Sivapithecus"}, + {"id": 4705, "synset": "rudapithecus.n.01", "name": "rudapithecus"}, + {"id": 4706, "synset": "proconsul.n.03", "name": "proconsul"}, + {"id": 4707, "synset": "aegyptopithecus.n.01", "name": "Aegyptopithecus"}, + {"id": 4708, "synset": "great_ape.n.01", "name": "great_ape"}, + {"id": 4709, "synset": "orangutan.n.01", "name": "orangutan"}, + { + "id": 4710, + "synset": "western_lowland_gorilla.n.01", + "name": "western_lowland_gorilla", + }, + { + "id": 4711, + "synset": "eastern_lowland_gorilla.n.01", + "name": "eastern_lowland_gorilla", + }, + {"id": 4712, "synset": "mountain_gorilla.n.01", "name": "mountain_gorilla"}, + {"id": 4713, "synset": "silverback.n.01", "name": "silverback"}, + {"id": 4714, "synset": "chimpanzee.n.01", "name": "chimpanzee"}, + {"id": 4715, "synset": "western_chimpanzee.n.01", "name": "western_chimpanzee"}, + {"id": 4716, "synset": "eastern_chimpanzee.n.01", "name": "eastern_chimpanzee"}, + {"id": 4717, "synset": "central_chimpanzee.n.01", "name": "central_chimpanzee"}, + {"id": 4718, "synset": "pygmy_chimpanzee.n.01", "name": "pygmy_chimpanzee"}, + {"id": 4719, "synset": "lesser_ape.n.01", "name": "lesser_ape"}, + {"id": 4720, "synset": "gibbon.n.02", "name": "gibbon"}, + {"id": 4721, "synset": "siamang.n.01", "name": "siamang"}, + {"id": 4722, "synset": "old_world_monkey.n.01", "name": "Old_World_monkey"}, + {"id": 4723, "synset": "guenon.n.01", "name": "guenon"}, + {"id": 4724, "synset": "talapoin.n.01", "name": "talapoin"}, + {"id": 4725, "synset": "grivet.n.01", "name": "grivet"}, + {"id": 4726, "synset": "vervet.n.01", "name": "vervet"}, + {"id": 4727, "synset": "green_monkey.n.01", "name": "green_monkey"}, + {"id": 4728, "synset": "mangabey.n.01", "name": "mangabey"}, + {"id": 4729, "synset": "patas.n.01", "name": "patas"}, + {"id": 4730, "synset": "chacma.n.01", "name": "chacma"}, + {"id": 4731, "synset": "mandrill.n.01", "name": "mandrill"}, + {"id": 4732, "synset": "drill.n.02", "name": "drill"}, + {"id": 4733, "synset": "macaque.n.01", "name": "macaque"}, + {"id": 4734, "synset": "rhesus.n.01", "name": "rhesus"}, + {"id": 4735, "synset": "bonnet_macaque.n.01", "name": "bonnet_macaque"}, + {"id": 4736, "synset": "barbary_ape.n.01", "name": "Barbary_ape"}, + {"id": 4737, "synset": "crab-eating_macaque.n.01", "name": "crab-eating_macaque"}, + {"id": 4738, "synset": "langur.n.01", "name": "langur"}, + {"id": 4739, "synset": "entellus.n.01", "name": "entellus"}, + {"id": 4740, "synset": "colobus.n.01", "name": "colobus"}, + {"id": 4741, "synset": "guereza.n.01", "name": "guereza"}, + {"id": 4742, "synset": "proboscis_monkey.n.01", "name": "proboscis_monkey"}, + {"id": 4743, "synset": "new_world_monkey.n.01", "name": "New_World_monkey"}, + {"id": 4744, "synset": "marmoset.n.01", "name": "marmoset"}, + {"id": 4745, "synset": "true_marmoset.n.01", "name": "true_marmoset"}, + {"id": 4746, "synset": "pygmy_marmoset.n.01", "name": "pygmy_marmoset"}, + {"id": 4747, "synset": "tamarin.n.01", "name": "tamarin"}, + {"id": 4748, "synset": "silky_tamarin.n.01", "name": "silky_tamarin"}, + {"id": 4749, "synset": "pinche.n.01", "name": "pinche"}, + {"id": 4750, "synset": "capuchin.n.02", "name": "capuchin"}, + {"id": 4751, "synset": "douroucouli.n.01", "name": "douroucouli"}, + {"id": 4752, "synset": "howler_monkey.n.01", "name": "howler_monkey"}, + {"id": 4753, "synset": "saki.n.03", "name": "saki"}, + {"id": 4754, "synset": "uakari.n.01", "name": "uakari"}, + {"id": 4755, "synset": "titi.n.03", "name": "titi"}, + {"id": 4756, "synset": "spider_monkey.n.01", "name": "spider_monkey"}, + {"id": 4757, "synset": "squirrel_monkey.n.01", "name": "squirrel_monkey"}, + {"id": 4758, "synset": "woolly_monkey.n.01", "name": "woolly_monkey"}, + {"id": 4759, "synset": "tree_shrew.n.01", "name": "tree_shrew"}, + {"id": 4760, "synset": "prosimian.n.01", "name": "prosimian"}, + {"id": 4761, "synset": "lemur.n.01", "name": "lemur"}, + {"id": 4762, "synset": "madagascar_cat.n.01", "name": "Madagascar_cat"}, + {"id": 4763, "synset": "aye-aye.n.01", "name": "aye-aye"}, + {"id": 4764, "synset": "slender_loris.n.01", "name": "slender_loris"}, + {"id": 4765, "synset": "slow_loris.n.01", "name": "slow_loris"}, + {"id": 4766, "synset": "potto.n.02", "name": "potto"}, + {"id": 4767, "synset": "angwantibo.n.01", "name": "angwantibo"}, + {"id": 4768, "synset": "galago.n.01", "name": "galago"}, + {"id": 4769, "synset": "indri.n.01", "name": "indri"}, + {"id": 4770, "synset": "woolly_indris.n.01", "name": "woolly_indris"}, + {"id": 4771, "synset": "tarsier.n.01", "name": "tarsier"}, + {"id": 4772, "synset": "tarsius_syrichta.n.01", "name": "Tarsius_syrichta"}, + {"id": 4773, "synset": "tarsius_glis.n.01", "name": "Tarsius_glis"}, + {"id": 4774, "synset": "flying_lemur.n.01", "name": "flying_lemur"}, + { + "id": 4775, + "synset": "cynocephalus_variegatus.n.01", + "name": "Cynocephalus_variegatus", + }, + {"id": 4776, "synset": "proboscidean.n.01", "name": "proboscidean"}, + {"id": 4777, "synset": "rogue_elephant.n.01", "name": "rogue_elephant"}, + {"id": 4778, "synset": "indian_elephant.n.01", "name": "Indian_elephant"}, + {"id": 4779, "synset": "african_elephant.n.01", "name": "African_elephant"}, + {"id": 4780, "synset": "woolly_mammoth.n.01", "name": "woolly_mammoth"}, + {"id": 4781, "synset": "columbian_mammoth.n.01", "name": "columbian_mammoth"}, + {"id": 4782, "synset": "imperial_mammoth.n.01", "name": "imperial_mammoth"}, + {"id": 4783, "synset": "mastodon.n.01", "name": "mastodon"}, + {"id": 4784, "synset": "plantigrade_mammal.n.01", "name": "plantigrade_mammal"}, + {"id": 4785, "synset": "digitigrade_mammal.n.01", "name": "digitigrade_mammal"}, + {"id": 4786, "synset": "procyonid.n.01", "name": "procyonid"}, + {"id": 4787, "synset": "raccoon.n.02", "name": "raccoon"}, + {"id": 4788, "synset": "common_raccoon.n.01", "name": "common_raccoon"}, + {"id": 4789, "synset": "crab-eating_raccoon.n.01", "name": "crab-eating_raccoon"}, + {"id": 4790, "synset": "bassarisk.n.01", "name": "bassarisk"}, + {"id": 4791, "synset": "kinkajou.n.01", "name": "kinkajou"}, + {"id": 4792, "synset": "coati.n.01", "name": "coati"}, + {"id": 4793, "synset": "lesser_panda.n.01", "name": "lesser_panda"}, + {"id": 4794, "synset": "twitterer.n.01", "name": "twitterer"}, + {"id": 4795, "synset": "fingerling.n.01", "name": "fingerling"}, + {"id": 4796, "synset": "game_fish.n.01", "name": "game_fish"}, + {"id": 4797, "synset": "food_fish.n.01", "name": "food_fish"}, + {"id": 4798, "synset": "rough_fish.n.01", "name": "rough_fish"}, + {"id": 4799, "synset": "groundfish.n.01", "name": "groundfish"}, + {"id": 4800, "synset": "young_fish.n.01", "name": "young_fish"}, + {"id": 4801, "synset": "parr.n.03", "name": "parr"}, + {"id": 4802, "synset": "mouthbreeder.n.01", "name": "mouthbreeder"}, + {"id": 4803, "synset": "spawner.n.01", "name": "spawner"}, + {"id": 4804, "synset": "barracouta.n.01", "name": "barracouta"}, + {"id": 4805, "synset": "crossopterygian.n.01", "name": "crossopterygian"}, + {"id": 4806, "synset": "coelacanth.n.01", "name": "coelacanth"}, + {"id": 4807, "synset": "lungfish.n.01", "name": "lungfish"}, + {"id": 4808, "synset": "ceratodus.n.01", "name": "ceratodus"}, + {"id": 4809, "synset": "catfish.n.03", "name": "catfish"}, + {"id": 4810, "synset": "silurid.n.01", "name": "silurid"}, + {"id": 4811, "synset": "european_catfish.n.01", "name": "European_catfish"}, + {"id": 4812, "synset": "electric_catfish.n.01", "name": "electric_catfish"}, + {"id": 4813, "synset": "bullhead.n.02", "name": "bullhead"}, + {"id": 4814, "synset": "horned_pout.n.01", "name": "horned_pout"}, + {"id": 4815, "synset": "brown_bullhead.n.01", "name": "brown_bullhead"}, + {"id": 4816, "synset": "channel_catfish.n.01", "name": "channel_catfish"}, + {"id": 4817, "synset": "blue_catfish.n.01", "name": "blue_catfish"}, + {"id": 4818, "synset": "flathead_catfish.n.01", "name": "flathead_catfish"}, + {"id": 4819, "synset": "armored_catfish.n.01", "name": "armored_catfish"}, + {"id": 4820, "synset": "sea_catfish.n.01", "name": "sea_catfish"}, + {"id": 4821, "synset": "gadoid.n.01", "name": "gadoid"}, + {"id": 4822, "synset": "cod.n.03", "name": "cod"}, + {"id": 4823, "synset": "codling.n.01", "name": "codling"}, + {"id": 4824, "synset": "atlantic_cod.n.01", "name": "Atlantic_cod"}, + {"id": 4825, "synset": "pacific_cod.n.01", "name": "Pacific_cod"}, + {"id": 4826, "synset": "whiting.n.06", "name": "whiting"}, + {"id": 4827, "synset": "burbot.n.01", "name": "burbot"}, + {"id": 4828, "synset": "haddock.n.02", "name": "haddock"}, + {"id": 4829, "synset": "pollack.n.03", "name": "pollack"}, + {"id": 4830, "synset": "hake.n.02", "name": "hake"}, + {"id": 4831, "synset": "silver_hake.n.01", "name": "silver_hake"}, + {"id": 4832, "synset": "ling.n.04", "name": "ling"}, + {"id": 4833, "synset": "cusk.n.02", "name": "cusk"}, + {"id": 4834, "synset": "grenadier.n.02", "name": "grenadier"}, + {"id": 4835, "synset": "eel.n.02", "name": "eel"}, + {"id": 4836, "synset": "elver.n.02", "name": "elver"}, + {"id": 4837, "synset": "common_eel.n.01", "name": "common_eel"}, + {"id": 4838, "synset": "tuna.n.04", "name": "tuna"}, + {"id": 4839, "synset": "moray.n.01", "name": "moray"}, + {"id": 4840, "synset": "conger.n.01", "name": "conger"}, + {"id": 4841, "synset": "teleost_fish.n.01", "name": "teleost_fish"}, + {"id": 4842, "synset": "beaked_salmon.n.01", "name": "beaked_salmon"}, + {"id": 4843, "synset": "clupeid_fish.n.01", "name": "clupeid_fish"}, + {"id": 4844, "synset": "whitebait.n.02", "name": "whitebait"}, + {"id": 4845, "synset": "brit.n.02", "name": "brit"}, + {"id": 4846, "synset": "shad.n.02", "name": "shad"}, + {"id": 4847, "synset": "common_american_shad.n.01", "name": "common_American_shad"}, + {"id": 4848, "synset": "river_shad.n.01", "name": "river_shad"}, + {"id": 4849, "synset": "allice_shad.n.01", "name": "allice_shad"}, + {"id": 4850, "synset": "alewife.n.02", "name": "alewife"}, + {"id": 4851, "synset": "menhaden.n.01", "name": "menhaden"}, + {"id": 4852, "synset": "herring.n.02", "name": "herring"}, + {"id": 4853, "synset": "atlantic_herring.n.01", "name": "Atlantic_herring"}, + {"id": 4854, "synset": "pacific_herring.n.01", "name": "Pacific_herring"}, + {"id": 4855, "synset": "sardine.n.02", "name": "sardine"}, + {"id": 4856, "synset": "sild.n.01", "name": "sild"}, + {"id": 4857, "synset": "brisling.n.02", "name": "brisling"}, + {"id": 4858, "synset": "pilchard.n.02", "name": "pilchard"}, + {"id": 4859, "synset": "pacific_sardine.n.01", "name": "Pacific_sardine"}, + {"id": 4860, "synset": "anchovy.n.02", "name": "anchovy"}, + { + "id": 4861, + "synset": "mediterranean_anchovy.n.01", + "name": "mediterranean_anchovy", + }, + {"id": 4862, "synset": "salmonid.n.01", "name": "salmonid"}, + {"id": 4863, "synset": "parr.n.02", "name": "parr"}, + {"id": 4864, "synset": "blackfish.n.02", "name": "blackfish"}, + {"id": 4865, "synset": "redfish.n.03", "name": "redfish"}, + {"id": 4866, "synset": "atlantic_salmon.n.02", "name": "Atlantic_salmon"}, + {"id": 4867, "synset": "landlocked_salmon.n.01", "name": "landlocked_salmon"}, + {"id": 4868, "synset": "sockeye.n.02", "name": "sockeye"}, + {"id": 4869, "synset": "chinook.n.05", "name": "chinook"}, + {"id": 4870, "synset": "coho.n.02", "name": "coho"}, + {"id": 4871, "synset": "trout.n.02", "name": "trout"}, + {"id": 4872, "synset": "brown_trout.n.01", "name": "brown_trout"}, + {"id": 4873, "synset": "rainbow_trout.n.02", "name": "rainbow_trout"}, + {"id": 4874, "synset": "sea_trout.n.03", "name": "sea_trout"}, + {"id": 4875, "synset": "lake_trout.n.02", "name": "lake_trout"}, + {"id": 4876, "synset": "brook_trout.n.02", "name": "brook_trout"}, + {"id": 4877, "synset": "char.n.03", "name": "char"}, + {"id": 4878, "synset": "arctic_char.n.01", "name": "Arctic_char"}, + {"id": 4879, "synset": "whitefish.n.03", "name": "whitefish"}, + {"id": 4880, "synset": "lake_whitefish.n.01", "name": "lake_whitefish"}, + {"id": 4881, "synset": "cisco.n.02", "name": "cisco"}, + {"id": 4882, "synset": "round_whitefish.n.01", "name": "round_whitefish"}, + {"id": 4883, "synset": "smelt.n.02", "name": "smelt"}, + {"id": 4884, "synset": "sparling.n.02", "name": "sparling"}, + {"id": 4885, "synset": "capelin.n.01", "name": "capelin"}, + {"id": 4886, "synset": "tarpon.n.01", "name": "tarpon"}, + {"id": 4887, "synset": "ladyfish.n.01", "name": "ladyfish"}, + {"id": 4888, "synset": "bonefish.n.01", "name": "bonefish"}, + {"id": 4889, "synset": "argentine.n.01", "name": "argentine"}, + {"id": 4890, "synset": "lanternfish.n.01", "name": "lanternfish"}, + {"id": 4891, "synset": "lizardfish.n.01", "name": "lizardfish"}, + {"id": 4892, "synset": "lancetfish.n.01", "name": "lancetfish"}, + {"id": 4893, "synset": "opah.n.01", "name": "opah"}, + {"id": 4894, "synset": "new_world_opah.n.01", "name": "New_World_opah"}, + {"id": 4895, "synset": "ribbonfish.n.02", "name": "ribbonfish"}, + {"id": 4896, "synset": "dealfish.n.01", "name": "dealfish"}, + {"id": 4897, "synset": "oarfish.n.01", "name": "oarfish"}, + {"id": 4898, "synset": "batfish.n.01", "name": "batfish"}, + {"id": 4899, "synset": "goosefish.n.01", "name": "goosefish"}, + {"id": 4900, "synset": "toadfish.n.01", "name": "toadfish"}, + {"id": 4901, "synset": "oyster_fish.n.01", "name": "oyster_fish"}, + {"id": 4902, "synset": "frogfish.n.01", "name": "frogfish"}, + {"id": 4903, "synset": "sargassum_fish.n.01", "name": "sargassum_fish"}, + {"id": 4904, "synset": "needlefish.n.01", "name": "needlefish"}, + {"id": 4905, "synset": "timucu.n.01", "name": "timucu"}, + {"id": 4906, "synset": "flying_fish.n.01", "name": "flying_fish"}, + { + "id": 4907, + "synset": "monoplane_flying_fish.n.01", + "name": "monoplane_flying_fish", + }, + {"id": 4908, "synset": "halfbeak.n.01", "name": "halfbeak"}, + {"id": 4909, "synset": "saury.n.01", "name": "saury"}, + {"id": 4910, "synset": "spiny-finned_fish.n.01", "name": "spiny-finned_fish"}, + {"id": 4911, "synset": "lingcod.n.02", "name": "lingcod"}, + {"id": 4912, "synset": "percoid_fish.n.01", "name": "percoid_fish"}, + {"id": 4913, "synset": "perch.n.07", "name": "perch"}, + {"id": 4914, "synset": "climbing_perch.n.01", "name": "climbing_perch"}, + {"id": 4915, "synset": "perch.n.06", "name": "perch"}, + {"id": 4916, "synset": "yellow_perch.n.01", "name": "yellow_perch"}, + {"id": 4917, "synset": "european_perch.n.01", "name": "European_perch"}, + {"id": 4918, "synset": "pike-perch.n.01", "name": "pike-perch"}, + {"id": 4919, "synset": "walleye.n.02", "name": "walleye"}, + {"id": 4920, "synset": "blue_pike.n.01", "name": "blue_pike"}, + {"id": 4921, "synset": "snail_darter.n.01", "name": "snail_darter"}, + {"id": 4922, "synset": "cusk-eel.n.01", "name": "cusk-eel"}, + {"id": 4923, "synset": "brotula.n.01", "name": "brotula"}, + {"id": 4924, "synset": "pearlfish.n.01", "name": "pearlfish"}, + {"id": 4925, "synset": "robalo.n.01", "name": "robalo"}, + {"id": 4926, "synset": "snook.n.01", "name": "snook"}, + {"id": 4927, "synset": "pike.n.05", "name": "pike"}, + {"id": 4928, "synset": "northern_pike.n.01", "name": "northern_pike"}, + {"id": 4929, "synset": "muskellunge.n.02", "name": "muskellunge"}, + {"id": 4930, "synset": "pickerel.n.02", "name": "pickerel"}, + {"id": 4931, "synset": "chain_pickerel.n.01", "name": "chain_pickerel"}, + {"id": 4932, "synset": "redfin_pickerel.n.01", "name": "redfin_pickerel"}, + {"id": 4933, "synset": "sunfish.n.03", "name": "sunfish"}, + {"id": 4934, "synset": "crappie.n.02", "name": "crappie"}, + {"id": 4935, "synset": "black_crappie.n.01", "name": "black_crappie"}, + {"id": 4936, "synset": "white_crappie.n.01", "name": "white_crappie"}, + {"id": 4937, "synset": "freshwater_bream.n.02", "name": "freshwater_bream"}, + {"id": 4938, "synset": "pumpkinseed.n.01", "name": "pumpkinseed"}, + {"id": 4939, "synset": "bluegill.n.01", "name": "bluegill"}, + {"id": 4940, "synset": "spotted_sunfish.n.01", "name": "spotted_sunfish"}, + {"id": 4941, "synset": "freshwater_bass.n.02", "name": "freshwater_bass"}, + {"id": 4942, "synset": "rock_bass.n.02", "name": "rock_bass"}, + {"id": 4943, "synset": "black_bass.n.02", "name": "black_bass"}, + {"id": 4944, "synset": "kentucky_black_bass.n.01", "name": "Kentucky_black_bass"}, + {"id": 4945, "synset": "smallmouth.n.01", "name": "smallmouth"}, + {"id": 4946, "synset": "largemouth.n.01", "name": "largemouth"}, + {"id": 4947, "synset": "bass.n.08", "name": "bass"}, + {"id": 4948, "synset": "serranid_fish.n.01", "name": "serranid_fish"}, + {"id": 4949, "synset": "white_perch.n.01", "name": "white_perch"}, + {"id": 4950, "synset": "yellow_bass.n.01", "name": "yellow_bass"}, + {"id": 4951, "synset": "blackmouth_bass.n.01", "name": "blackmouth_bass"}, + {"id": 4952, "synset": "rock_sea_bass.n.01", "name": "rock_sea_bass"}, + {"id": 4953, "synset": "striped_bass.n.02", "name": "striped_bass"}, + {"id": 4954, "synset": "stone_bass.n.01", "name": "stone_bass"}, + {"id": 4955, "synset": "grouper.n.02", "name": "grouper"}, + {"id": 4956, "synset": "hind.n.01", "name": "hind"}, + {"id": 4957, "synset": "rock_hind.n.01", "name": "rock_hind"}, + {"id": 4958, "synset": "creole-fish.n.01", "name": "creole-fish"}, + {"id": 4959, "synset": "jewfish.n.02", "name": "jewfish"}, + {"id": 4960, "synset": "soapfish.n.01", "name": "soapfish"}, + {"id": 4961, "synset": "surfperch.n.01", "name": "surfperch"}, + {"id": 4962, "synset": "rainbow_seaperch.n.01", "name": "rainbow_seaperch"}, + {"id": 4963, "synset": "bigeye.n.01", "name": "bigeye"}, + {"id": 4964, "synset": "catalufa.n.01", "name": "catalufa"}, + {"id": 4965, "synset": "cardinalfish.n.01", "name": "cardinalfish"}, + {"id": 4966, "synset": "flame_fish.n.01", "name": "flame_fish"}, + {"id": 4967, "synset": "tilefish.n.02", "name": "tilefish"}, + {"id": 4968, "synset": "bluefish.n.01", "name": "bluefish"}, + {"id": 4969, "synset": "cobia.n.01", "name": "cobia"}, + {"id": 4970, "synset": "remora.n.01", "name": "remora"}, + {"id": 4971, "synset": "sharksucker.n.01", "name": "sharksucker"}, + {"id": 4972, "synset": "whale_sucker.n.01", "name": "whale_sucker"}, + {"id": 4973, "synset": "carangid_fish.n.01", "name": "carangid_fish"}, + {"id": 4974, "synset": "jack.n.11", "name": "jack"}, + {"id": 4975, "synset": "crevalle_jack.n.01", "name": "crevalle_jack"}, + {"id": 4976, "synset": "yellow_jack.n.03", "name": "yellow_jack"}, + {"id": 4977, "synset": "runner.n.10", "name": "runner"}, + {"id": 4978, "synset": "rainbow_runner.n.01", "name": "rainbow_runner"}, + {"id": 4979, "synset": "leatherjacket.n.02", "name": "leatherjacket"}, + {"id": 4980, "synset": "threadfish.n.01", "name": "threadfish"}, + {"id": 4981, "synset": "moonfish.n.01", "name": "moonfish"}, + {"id": 4982, "synset": "lookdown.n.01", "name": "lookdown"}, + {"id": 4983, "synset": "amberjack.n.01", "name": "amberjack"}, + {"id": 4984, "synset": "yellowtail.n.02", "name": "yellowtail"}, + {"id": 4985, "synset": "kingfish.n.05", "name": "kingfish"}, + {"id": 4986, "synset": "pompano.n.02", "name": "pompano"}, + {"id": 4987, "synset": "florida_pompano.n.01", "name": "Florida_pompano"}, + {"id": 4988, "synset": "permit.n.03", "name": "permit"}, + {"id": 4989, "synset": "scad.n.01", "name": "scad"}, + {"id": 4990, "synset": "horse_mackerel.n.03", "name": "horse_mackerel"}, + {"id": 4991, "synset": "horse_mackerel.n.02", "name": "horse_mackerel"}, + {"id": 4992, "synset": "bigeye_scad.n.01", "name": "bigeye_scad"}, + {"id": 4993, "synset": "mackerel_scad.n.01", "name": "mackerel_scad"}, + {"id": 4994, "synset": "round_scad.n.01", "name": "round_scad"}, + {"id": 4995, "synset": "dolphinfish.n.02", "name": "dolphinfish"}, + {"id": 4996, "synset": "coryphaena_hippurus.n.01", "name": "Coryphaena_hippurus"}, + {"id": 4997, "synset": "coryphaena_equisetis.n.01", "name": "Coryphaena_equisetis"}, + {"id": 4998, "synset": "pomfret.n.01", "name": "pomfret"}, + {"id": 4999, "synset": "characin.n.01", "name": "characin"}, + {"id": 5000, "synset": "tetra.n.01", "name": "tetra"}, + {"id": 5001, "synset": "cardinal_tetra.n.01", "name": "cardinal_tetra"}, + {"id": 5002, "synset": "piranha.n.02", "name": "piranha"}, + {"id": 5003, "synset": "cichlid.n.01", "name": "cichlid"}, + {"id": 5004, "synset": "bolti.n.01", "name": "bolti"}, + {"id": 5005, "synset": "snapper.n.05", "name": "snapper"}, + {"id": 5006, "synset": "red_snapper.n.02", "name": "red_snapper"}, + {"id": 5007, "synset": "grey_snapper.n.01", "name": "grey_snapper"}, + {"id": 5008, "synset": "mutton_snapper.n.01", "name": "mutton_snapper"}, + {"id": 5009, "synset": "schoolmaster.n.03", "name": "schoolmaster"}, + {"id": 5010, "synset": "yellowtail.n.01", "name": "yellowtail"}, + {"id": 5011, "synset": "grunt.n.03", "name": "grunt"}, + {"id": 5012, "synset": "margate.n.01", "name": "margate"}, + {"id": 5013, "synset": "spanish_grunt.n.01", "name": "Spanish_grunt"}, + {"id": 5014, "synset": "tomtate.n.01", "name": "tomtate"}, + {"id": 5015, "synset": "cottonwick.n.01", "name": "cottonwick"}, + {"id": 5016, "synset": "sailor's-choice.n.02", "name": "sailor's-choice"}, + {"id": 5017, "synset": "porkfish.n.01", "name": "porkfish"}, + {"id": 5018, "synset": "pompon.n.02", "name": "pompon"}, + {"id": 5019, "synset": "pigfish.n.02", "name": "pigfish"}, + {"id": 5020, "synset": "sparid.n.01", "name": "sparid"}, + {"id": 5021, "synset": "sea_bream.n.02", "name": "sea_bream"}, + {"id": 5022, "synset": "porgy.n.02", "name": "porgy"}, + {"id": 5023, "synset": "red_porgy.n.01", "name": "red_porgy"}, + {"id": 5024, "synset": "european_sea_bream.n.01", "name": "European_sea_bream"}, + {"id": 5025, "synset": "atlantic_sea_bream.n.01", "name": "Atlantic_sea_bream"}, + {"id": 5026, "synset": "sheepshead.n.01", "name": "sheepshead"}, + {"id": 5027, "synset": "pinfish.n.01", "name": "pinfish"}, + {"id": 5028, "synset": "sheepshead_porgy.n.01", "name": "sheepshead_porgy"}, + {"id": 5029, "synset": "snapper.n.04", "name": "snapper"}, + {"id": 5030, "synset": "black_bream.n.01", "name": "black_bream"}, + {"id": 5031, "synset": "scup.n.04", "name": "scup"}, + {"id": 5032, "synset": "scup.n.03", "name": "scup"}, + {"id": 5033, "synset": "sciaenid_fish.n.01", "name": "sciaenid_fish"}, + {"id": 5034, "synset": "striped_drum.n.01", "name": "striped_drum"}, + {"id": 5035, "synset": "jackknife-fish.n.01", "name": "jackknife-fish"}, + {"id": 5036, "synset": "silver_perch.n.01", "name": "silver_perch"}, + {"id": 5037, "synset": "red_drum.n.01", "name": "red_drum"}, + {"id": 5038, "synset": "mulloway.n.01", "name": "mulloway"}, + {"id": 5039, "synset": "maigre.n.01", "name": "maigre"}, + {"id": 5040, "synset": "croaker.n.02", "name": "croaker"}, + {"id": 5041, "synset": "atlantic_croaker.n.01", "name": "Atlantic_croaker"}, + {"id": 5042, "synset": "yellowfin_croaker.n.01", "name": "yellowfin_croaker"}, + {"id": 5043, "synset": "whiting.n.04", "name": "whiting"}, + {"id": 5044, "synset": "kingfish.n.04", "name": "kingfish"}, + {"id": 5045, "synset": "king_whiting.n.01", "name": "king_whiting"}, + {"id": 5046, "synset": "northern_whiting.n.01", "name": "northern_whiting"}, + {"id": 5047, "synset": "corbina.n.01", "name": "corbina"}, + {"id": 5048, "synset": "white_croaker.n.02", "name": "white_croaker"}, + {"id": 5049, "synset": "white_croaker.n.01", "name": "white_croaker"}, + {"id": 5050, "synset": "sea_trout.n.02", "name": "sea_trout"}, + {"id": 5051, "synset": "weakfish.n.02", "name": "weakfish"}, + {"id": 5052, "synset": "spotted_weakfish.n.01", "name": "spotted_weakfish"}, + {"id": 5053, "synset": "mullet.n.03", "name": "mullet"}, + {"id": 5054, "synset": "goatfish.n.01", "name": "goatfish"}, + {"id": 5055, "synset": "red_goatfish.n.01", "name": "red_goatfish"}, + {"id": 5056, "synset": "yellow_goatfish.n.01", "name": "yellow_goatfish"}, + {"id": 5057, "synset": "mullet.n.02", "name": "mullet"}, + {"id": 5058, "synset": "striped_mullet.n.01", "name": "striped_mullet"}, + {"id": 5059, "synset": "white_mullet.n.01", "name": "white_mullet"}, + {"id": 5060, "synset": "liza.n.01", "name": "liza"}, + {"id": 5061, "synset": "silversides.n.01", "name": "silversides"}, + {"id": 5062, "synset": "jacksmelt.n.01", "name": "jacksmelt"}, + {"id": 5063, "synset": "barracuda.n.01", "name": "barracuda"}, + {"id": 5064, "synset": "great_barracuda.n.01", "name": "great_barracuda"}, + {"id": 5065, "synset": "sweeper.n.03", "name": "sweeper"}, + {"id": 5066, "synset": "sea_chub.n.01", "name": "sea_chub"}, + {"id": 5067, "synset": "bermuda_chub.n.01", "name": "Bermuda_chub"}, + {"id": 5068, "synset": "spadefish.n.01", "name": "spadefish"}, + {"id": 5069, "synset": "butterfly_fish.n.01", "name": "butterfly_fish"}, + {"id": 5070, "synset": "chaetodon.n.01", "name": "chaetodon"}, + {"id": 5071, "synset": "angelfish.n.01", "name": "angelfish"}, + {"id": 5072, "synset": "rock_beauty.n.01", "name": "rock_beauty"}, + {"id": 5073, "synset": "damselfish.n.01", "name": "damselfish"}, + {"id": 5074, "synset": "beaugregory.n.01", "name": "beaugregory"}, + {"id": 5075, "synset": "anemone_fish.n.01", "name": "anemone_fish"}, + {"id": 5076, "synset": "clown_anemone_fish.n.01", "name": "clown_anemone_fish"}, + {"id": 5077, "synset": "sergeant_major.n.02", "name": "sergeant_major"}, + {"id": 5078, "synset": "wrasse.n.01", "name": "wrasse"}, + {"id": 5079, "synset": "pigfish.n.01", "name": "pigfish"}, + {"id": 5080, "synset": "hogfish.n.01", "name": "hogfish"}, + {"id": 5081, "synset": "slippery_dick.n.01", "name": "slippery_dick"}, + {"id": 5082, "synset": "puddingwife.n.01", "name": "puddingwife"}, + {"id": 5083, "synset": "bluehead.n.01", "name": "bluehead"}, + {"id": 5084, "synset": "pearly_razorfish.n.01", "name": "pearly_razorfish"}, + {"id": 5085, "synset": "tautog.n.01", "name": "tautog"}, + {"id": 5086, "synset": "cunner.n.01", "name": "cunner"}, + {"id": 5087, "synset": "parrotfish.n.01", "name": "parrotfish"}, + {"id": 5088, "synset": "threadfin.n.01", "name": "threadfin"}, + {"id": 5089, "synset": "jawfish.n.01", "name": "jawfish"}, + {"id": 5090, "synset": "stargazer.n.03", "name": "stargazer"}, + {"id": 5091, "synset": "sand_stargazer.n.01", "name": "sand_stargazer"}, + {"id": 5092, "synset": "blenny.n.01", "name": "blenny"}, + {"id": 5093, "synset": "shanny.n.01", "name": "shanny"}, + {"id": 5094, "synset": "molly_miller.n.01", "name": "Molly_Miller"}, + {"id": 5095, "synset": "clinid.n.01", "name": "clinid"}, + {"id": 5096, "synset": "pikeblenny.n.01", "name": "pikeblenny"}, + { + "id": 5097, + "synset": "bluethroat_pikeblenny.n.01", + "name": "bluethroat_pikeblenny", + }, + {"id": 5098, "synset": "gunnel.n.02", "name": "gunnel"}, + {"id": 5099, "synset": "rock_gunnel.n.01", "name": "rock_gunnel"}, + {"id": 5100, "synset": "eelblenny.n.01", "name": "eelblenny"}, + {"id": 5101, "synset": "wrymouth.n.01", "name": "wrymouth"}, + {"id": 5102, "synset": "wolffish.n.01", "name": "wolffish"}, + {"id": 5103, "synset": "viviparous_eelpout.n.01", "name": "viviparous_eelpout"}, + {"id": 5104, "synset": "ocean_pout.n.01", "name": "ocean_pout"}, + {"id": 5105, "synset": "sand_lance.n.01", "name": "sand_lance"}, + {"id": 5106, "synset": "dragonet.n.01", "name": "dragonet"}, + {"id": 5107, "synset": "goby.n.01", "name": "goby"}, + {"id": 5108, "synset": "mudskipper.n.01", "name": "mudskipper"}, + {"id": 5109, "synset": "sleeper.n.08", "name": "sleeper"}, + {"id": 5110, "synset": "flathead.n.02", "name": "flathead"}, + {"id": 5111, "synset": "archerfish.n.01", "name": "archerfish"}, + {"id": 5112, "synset": "surgeonfish.n.01", "name": "surgeonfish"}, + {"id": 5113, "synset": "gempylid.n.01", "name": "gempylid"}, + {"id": 5114, "synset": "snake_mackerel.n.01", "name": "snake_mackerel"}, + {"id": 5115, "synset": "escolar.n.01", "name": "escolar"}, + {"id": 5116, "synset": "oilfish.n.01", "name": "oilfish"}, + {"id": 5117, "synset": "cutlassfish.n.01", "name": "cutlassfish"}, + {"id": 5118, "synset": "scombroid.n.01", "name": "scombroid"}, + {"id": 5119, "synset": "mackerel.n.02", "name": "mackerel"}, + {"id": 5120, "synset": "common_mackerel.n.01", "name": "common_mackerel"}, + {"id": 5121, "synset": "spanish_mackerel.n.03", "name": "Spanish_mackerel"}, + {"id": 5122, "synset": "chub_mackerel.n.01", "name": "chub_mackerel"}, + {"id": 5123, "synset": "wahoo.n.03", "name": "wahoo"}, + {"id": 5124, "synset": "spanish_mackerel.n.02", "name": "Spanish_mackerel"}, + {"id": 5125, "synset": "king_mackerel.n.01", "name": "king_mackerel"}, + { + "id": 5126, + "synset": "scomberomorus_maculatus.n.01", + "name": "Scomberomorus_maculatus", + }, + {"id": 5127, "synset": "cero.n.01", "name": "cero"}, + {"id": 5128, "synset": "sierra.n.02", "name": "sierra"}, + {"id": 5129, "synset": "tuna.n.03", "name": "tuna"}, + {"id": 5130, "synset": "albacore.n.02", "name": "albacore"}, + {"id": 5131, "synset": "bluefin.n.02", "name": "bluefin"}, + {"id": 5132, "synset": "yellowfin.n.01", "name": "yellowfin"}, + {"id": 5133, "synset": "bonito.n.03", "name": "bonito"}, + {"id": 5134, "synset": "skipjack.n.02", "name": "skipjack"}, + {"id": 5135, "synset": "chile_bonito.n.01", "name": "Chile_bonito"}, + {"id": 5136, "synset": "skipjack.n.01", "name": "skipjack"}, + {"id": 5137, "synset": "bonito.n.02", "name": "bonito"}, + {"id": 5138, "synset": "swordfish.n.02", "name": "swordfish"}, + {"id": 5139, "synset": "sailfish.n.02", "name": "sailfish"}, + {"id": 5140, "synset": "atlantic_sailfish.n.01", "name": "Atlantic_sailfish"}, + {"id": 5141, "synset": "billfish.n.02", "name": "billfish"}, + {"id": 5142, "synset": "marlin.n.01", "name": "marlin"}, + {"id": 5143, "synset": "blue_marlin.n.01", "name": "blue_marlin"}, + {"id": 5144, "synset": "black_marlin.n.01", "name": "black_marlin"}, + {"id": 5145, "synset": "striped_marlin.n.01", "name": "striped_marlin"}, + {"id": 5146, "synset": "white_marlin.n.01", "name": "white_marlin"}, + {"id": 5147, "synset": "spearfish.n.01", "name": "spearfish"}, + {"id": 5148, "synset": "louvar.n.01", "name": "louvar"}, + {"id": 5149, "synset": "dollarfish.n.01", "name": "dollarfish"}, + {"id": 5150, "synset": "palometa.n.01", "name": "palometa"}, + {"id": 5151, "synset": "harvestfish.n.01", "name": "harvestfish"}, + {"id": 5152, "synset": "driftfish.n.01", "name": "driftfish"}, + {"id": 5153, "synset": "barrelfish.n.01", "name": "barrelfish"}, + {"id": 5154, "synset": "clingfish.n.01", "name": "clingfish"}, + {"id": 5155, "synset": "tripletail.n.01", "name": "tripletail"}, + {"id": 5156, "synset": "atlantic_tripletail.n.01", "name": "Atlantic_tripletail"}, + {"id": 5157, "synset": "pacific_tripletail.n.01", "name": "Pacific_tripletail"}, + {"id": 5158, "synset": "mojarra.n.01", "name": "mojarra"}, + {"id": 5159, "synset": "yellowfin_mojarra.n.01", "name": "yellowfin_mojarra"}, + {"id": 5160, "synset": "silver_jenny.n.01", "name": "silver_jenny"}, + {"id": 5161, "synset": "whiting.n.03", "name": "whiting"}, + {"id": 5162, "synset": "ganoid.n.01", "name": "ganoid"}, + {"id": 5163, "synset": "bowfin.n.01", "name": "bowfin"}, + {"id": 5164, "synset": "paddlefish.n.01", "name": "paddlefish"}, + {"id": 5165, "synset": "chinese_paddlefish.n.01", "name": "Chinese_paddlefish"}, + {"id": 5166, "synset": "sturgeon.n.01", "name": "sturgeon"}, + {"id": 5167, "synset": "pacific_sturgeon.n.01", "name": "Pacific_sturgeon"}, + {"id": 5168, "synset": "beluga.n.01", "name": "beluga"}, + {"id": 5169, "synset": "gar.n.01", "name": "gar"}, + {"id": 5170, "synset": "scorpaenoid.n.01", "name": "scorpaenoid"}, + {"id": 5171, "synset": "scorpaenid.n.01", "name": "scorpaenid"}, + {"id": 5172, "synset": "scorpionfish.n.01", "name": "scorpionfish"}, + {"id": 5173, "synset": "plumed_scorpionfish.n.01", "name": "plumed_scorpionfish"}, + {"id": 5174, "synset": "lionfish.n.01", "name": "lionfish"}, + {"id": 5175, "synset": "stonefish.n.01", "name": "stonefish"}, + {"id": 5176, "synset": "rockfish.n.02", "name": "rockfish"}, + {"id": 5177, "synset": "copper_rockfish.n.01", "name": "copper_rockfish"}, + {"id": 5178, "synset": "vermillion_rockfish.n.01", "name": "vermillion_rockfish"}, + {"id": 5179, "synset": "red_rockfish.n.02", "name": "red_rockfish"}, + {"id": 5180, "synset": "rosefish.n.02", "name": "rosefish"}, + {"id": 5181, "synset": "bullhead.n.01", "name": "bullhead"}, + {"id": 5182, "synset": "miller's-thumb.n.01", "name": "miller's-thumb"}, + {"id": 5183, "synset": "sea_raven.n.01", "name": "sea_raven"}, + {"id": 5184, "synset": "lumpfish.n.01", "name": "lumpfish"}, + {"id": 5185, "synset": "lumpsucker.n.01", "name": "lumpsucker"}, + {"id": 5186, "synset": "pogge.n.01", "name": "pogge"}, + {"id": 5187, "synset": "greenling.n.01", "name": "greenling"}, + {"id": 5188, "synset": "kelp_greenling.n.01", "name": "kelp_greenling"}, + {"id": 5189, "synset": "painted_greenling.n.01", "name": "painted_greenling"}, + {"id": 5190, "synset": "flathead.n.01", "name": "flathead"}, + {"id": 5191, "synset": "gurnard.n.01", "name": "gurnard"}, + {"id": 5192, "synset": "tub_gurnard.n.01", "name": "tub_gurnard"}, + {"id": 5193, "synset": "sea_robin.n.01", "name": "sea_robin"}, + {"id": 5194, "synset": "northern_sea_robin.n.01", "name": "northern_sea_robin"}, + {"id": 5195, "synset": "flying_gurnard.n.01", "name": "flying_gurnard"}, + {"id": 5196, "synset": "plectognath.n.01", "name": "plectognath"}, + {"id": 5197, "synset": "triggerfish.n.01", "name": "triggerfish"}, + {"id": 5198, "synset": "queen_triggerfish.n.01", "name": "queen_triggerfish"}, + {"id": 5199, "synset": "filefish.n.01", "name": "filefish"}, + {"id": 5200, "synset": "leatherjacket.n.01", "name": "leatherjacket"}, + {"id": 5201, "synset": "boxfish.n.01", "name": "boxfish"}, + {"id": 5202, "synset": "cowfish.n.01", "name": "cowfish"}, + {"id": 5203, "synset": "spiny_puffer.n.01", "name": "spiny_puffer"}, + {"id": 5204, "synset": "porcupinefish.n.01", "name": "porcupinefish"}, + {"id": 5205, "synset": "balloonfish.n.01", "name": "balloonfish"}, + {"id": 5206, "synset": "burrfish.n.01", "name": "burrfish"}, + {"id": 5207, "synset": "ocean_sunfish.n.01", "name": "ocean_sunfish"}, + {"id": 5208, "synset": "sharptail_mola.n.01", "name": "sharptail_mola"}, + {"id": 5209, "synset": "flatfish.n.02", "name": "flatfish"}, + {"id": 5210, "synset": "flounder.n.02", "name": "flounder"}, + {"id": 5211, "synset": "righteye_flounder.n.01", "name": "righteye_flounder"}, + {"id": 5212, "synset": "plaice.n.02", "name": "plaice"}, + {"id": 5213, "synset": "european_flatfish.n.01", "name": "European_flatfish"}, + {"id": 5214, "synset": "yellowtail_flounder.n.02", "name": "yellowtail_flounder"}, + {"id": 5215, "synset": "winter_flounder.n.02", "name": "winter_flounder"}, + {"id": 5216, "synset": "lemon_sole.n.05", "name": "lemon_sole"}, + {"id": 5217, "synset": "american_plaice.n.01", "name": "American_plaice"}, + {"id": 5218, "synset": "halibut.n.02", "name": "halibut"}, + {"id": 5219, "synset": "atlantic_halibut.n.01", "name": "Atlantic_halibut"}, + {"id": 5220, "synset": "pacific_halibut.n.01", "name": "Pacific_halibut"}, + {"id": 5221, "synset": "lefteye_flounder.n.01", "name": "lefteye_flounder"}, + {"id": 5222, "synset": "southern_flounder.n.01", "name": "southern_flounder"}, + {"id": 5223, "synset": "summer_flounder.n.01", "name": "summer_flounder"}, + {"id": 5224, "synset": "whiff.n.02", "name": "whiff"}, + {"id": 5225, "synset": "horned_whiff.n.01", "name": "horned_whiff"}, + {"id": 5226, "synset": "sand_dab.n.02", "name": "sand_dab"}, + {"id": 5227, "synset": "windowpane.n.02", "name": "windowpane"}, + {"id": 5228, "synset": "brill.n.01", "name": "brill"}, + {"id": 5229, "synset": "turbot.n.02", "name": "turbot"}, + {"id": 5230, "synset": "tonguefish.n.01", "name": "tonguefish"}, + {"id": 5231, "synset": "sole.n.04", "name": "sole"}, + {"id": 5232, "synset": "european_sole.n.01", "name": "European_sole"}, + {"id": 5233, "synset": "english_sole.n.02", "name": "English_sole"}, + {"id": 5234, "synset": "hogchoker.n.01", "name": "hogchoker"}, + {"id": 5235, "synset": "aba.n.02", "name": "aba"}, + {"id": 5236, "synset": "abacus.n.02", "name": "abacus"}, + {"id": 5237, "synset": "abandoned_ship.n.01", "name": "abandoned_ship"}, + {"id": 5238, "synset": "a_battery.n.01", "name": "A_battery"}, + {"id": 5239, "synset": "abattoir.n.01", "name": "abattoir"}, + {"id": 5240, "synset": "abaya.n.01", "name": "abaya"}, + {"id": 5241, "synset": "abbe_condenser.n.01", "name": "Abbe_condenser"}, + {"id": 5242, "synset": "abbey.n.03", "name": "abbey"}, + {"id": 5243, "synset": "abbey.n.02", "name": "abbey"}, + {"id": 5244, "synset": "abbey.n.01", "name": "abbey"}, + {"id": 5245, "synset": "abney_level.n.01", "name": "Abney_level"}, + {"id": 5246, "synset": "abrader.n.01", "name": "abrader"}, + {"id": 5247, "synset": "abrading_stone.n.01", "name": "abrading_stone"}, + {"id": 5248, "synset": "abutment.n.02", "name": "abutment"}, + {"id": 5249, "synset": "abutment_arch.n.01", "name": "abutment_arch"}, + {"id": 5250, "synset": "academic_costume.n.01", "name": "academic_costume"}, + {"id": 5251, "synset": "academic_gown.n.01", "name": "academic_gown"}, + {"id": 5252, "synset": "accelerator.n.02", "name": "accelerator"}, + {"id": 5253, "synset": "accelerator.n.04", "name": "accelerator"}, + {"id": 5254, "synset": "accelerator.n.01", "name": "accelerator"}, + {"id": 5255, "synset": "accelerometer.n.01", "name": "accelerometer"}, + {"id": 5256, "synset": "accessory.n.01", "name": "accessory"}, + { + "id": 5257, + "synset": "accommodating_lens_implant.n.01", + "name": "accommodating_lens_implant", + }, + {"id": 5258, "synset": "accommodation.n.04", "name": "accommodation"}, + {"id": 5259, "synset": "accordion.n.01", "name": "accordion"}, + {"id": 5260, "synset": "acetate_disk.n.01", "name": "acetate_disk"}, + {"id": 5261, "synset": "acetate_rayon.n.01", "name": "acetate_rayon"}, + {"id": 5262, "synset": "achromatic_lens.n.01", "name": "achromatic_lens"}, + {"id": 5263, "synset": "acoustic_delay_line.n.01", "name": "acoustic_delay_line"}, + {"id": 5264, "synset": "acoustic_device.n.01", "name": "acoustic_device"}, + {"id": 5265, "synset": "acoustic_guitar.n.01", "name": "acoustic_guitar"}, + {"id": 5266, "synset": "acoustic_modem.n.01", "name": "acoustic_modem"}, + {"id": 5267, "synset": "acropolis.n.01", "name": "acropolis"}, + {"id": 5268, "synset": "acrylic.n.04", "name": "acrylic"}, + {"id": 5269, "synset": "acrylic.n.03", "name": "acrylic"}, + {"id": 5270, "synset": "actinometer.n.01", "name": "actinometer"}, + {"id": 5271, "synset": "action.n.07", "name": "action"}, + {"id": 5272, "synset": "active_matrix_screen.n.01", "name": "active_matrix_screen"}, + {"id": 5273, "synset": "actuator.n.01", "name": "actuator"}, + {"id": 5274, "synset": "adapter.n.02", "name": "adapter"}, + {"id": 5275, "synset": "adder.n.02", "name": "adder"}, + {"id": 5276, "synset": "adding_machine.n.01", "name": "adding_machine"}, + {"id": 5277, "synset": "addressing_machine.n.01", "name": "addressing_machine"}, + {"id": 5278, "synset": "adhesive_bandage.n.01", "name": "adhesive_bandage"}, + {"id": 5279, "synset": "adit.n.01", "name": "adit"}, + {"id": 5280, "synset": "adjoining_room.n.01", "name": "adjoining_room"}, + {"id": 5281, "synset": "adjustable_wrench.n.01", "name": "adjustable_wrench"}, + {"id": 5282, "synset": "adobe.n.02", "name": "adobe"}, + {"id": 5283, "synset": "adz.n.01", "name": "adz"}, + {"id": 5284, "synset": "aeolian_harp.n.01", "name": "aeolian_harp"}, + {"id": 5285, "synset": "aerator.n.01", "name": "aerator"}, + {"id": 5286, "synset": "aerial_torpedo.n.01", "name": "aerial_torpedo"}, + {"id": 5287, "synset": "aertex.n.01", "name": "Aertex"}, + {"id": 5288, "synset": "afghan.n.01", "name": "afghan"}, + {"id": 5289, "synset": "afro-wig.n.01", "name": "Afro-wig"}, + {"id": 5290, "synset": "afterburner.n.01", "name": "afterburner"}, + {"id": 5291, "synset": "after-shave.n.01", "name": "after-shave"}, + {"id": 5292, "synset": "agateware.n.01", "name": "agateware"}, + {"id": 5293, "synset": "agglomerator.n.01", "name": "agglomerator"}, + {"id": 5294, "synset": "aglet.n.02", "name": "aglet"}, + {"id": 5295, "synset": "aglet.n.01", "name": "aglet"}, + {"id": 5296, "synset": "agora.n.03", "name": "agora"}, + {"id": 5297, "synset": "aigrette.n.01", "name": "aigrette"}, + {"id": 5298, "synset": "aileron.n.01", "name": "aileron"}, + {"id": 5299, "synset": "air_bag.n.01", "name": "air_bag"}, + {"id": 5300, "synset": "airbrake.n.02", "name": "airbrake"}, + {"id": 5301, "synset": "airbrush.n.01", "name": "airbrush"}, + {"id": 5302, "synset": "airbus.n.01", "name": "airbus"}, + {"id": 5303, "synset": "air_compressor.n.01", "name": "air_compressor"}, + {"id": 5304, "synset": "aircraft.n.01", "name": "aircraft"}, + {"id": 5305, "synset": "aircraft_carrier.n.01", "name": "aircraft_carrier"}, + {"id": 5306, "synset": "aircraft_engine.n.01", "name": "aircraft_engine"}, + {"id": 5307, "synset": "air_cushion.n.02", "name": "air_cushion"}, + {"id": 5308, "synset": "airdock.n.01", "name": "airdock"}, + {"id": 5309, "synset": "airfield.n.01", "name": "airfield"}, + {"id": 5310, "synset": "air_filter.n.01", "name": "air_filter"}, + {"id": 5311, "synset": "airfoil.n.01", "name": "airfoil"}, + {"id": 5312, "synset": "airframe.n.01", "name": "airframe"}, + {"id": 5313, "synset": "air_gun.n.01", "name": "air_gun"}, + {"id": 5314, "synset": "air_hammer.n.01", "name": "air_hammer"}, + {"id": 5315, "synset": "air_horn.n.01", "name": "air_horn"}, + {"id": 5316, "synset": "airing_cupboard.n.01", "name": "airing_cupboard"}, + {"id": 5317, "synset": "airliner.n.01", "name": "airliner"}, + {"id": 5318, "synset": "airmailer.n.01", "name": "airmailer"}, + {"id": 5319, "synset": "airplane_propeller.n.01", "name": "airplane_propeller"}, + {"id": 5320, "synset": "airport.n.01", "name": "airport"}, + {"id": 5321, "synset": "air_pump.n.01", "name": "air_pump"}, + {"id": 5322, "synset": "air_search_radar.n.01", "name": "air_search_radar"}, + {"id": 5323, "synset": "airship.n.01", "name": "airship"}, + {"id": 5324, "synset": "air_terminal.n.01", "name": "air_terminal"}, + {"id": 5325, "synset": "air-to-air_missile.n.01", "name": "air-to-air_missile"}, + { + "id": 5326, + "synset": "air-to-ground_missile.n.01", + "name": "air-to-ground_missile", + }, + {"id": 5327, "synset": "aisle.n.03", "name": "aisle"}, + {"id": 5328, "synset": "aladdin's_lamp.n.01", "name": "Aladdin's_lamp"}, + {"id": 5329, "synset": "alarm.n.02", "name": "alarm"}, + {"id": 5330, "synset": "alb.n.01", "name": "alb"}, + {"id": 5331, "synset": "alcazar.n.01", "name": "alcazar"}, + {"id": 5332, "synset": "alcohol_thermometer.n.01", "name": "alcohol_thermometer"}, + {"id": 5333, "synset": "alehouse.n.01", "name": "alehouse"}, + {"id": 5334, "synset": "alembic.n.01", "name": "alembic"}, + {"id": 5335, "synset": "algometer.n.01", "name": "algometer"}, + {"id": 5336, "synset": "alidade.n.02", "name": "alidade"}, + {"id": 5337, "synset": "alidade.n.01", "name": "alidade"}, + {"id": 5338, "synset": "a-line.n.01", "name": "A-line"}, + {"id": 5339, "synset": "allen_screw.n.01", "name": "Allen_screw"}, + {"id": 5340, "synset": "allen_wrench.n.01", "name": "Allen_wrench"}, + {"id": 5341, "synset": "alligator_wrench.n.01", "name": "alligator_wrench"}, + {"id": 5342, "synset": "alms_dish.n.01", "name": "alms_dish"}, + {"id": 5343, "synset": "alpaca.n.02", "name": "alpaca"}, + {"id": 5344, "synset": "alpenstock.n.01", "name": "alpenstock"}, + {"id": 5345, "synset": "altar.n.02", "name": "altar"}, + {"id": 5346, "synset": "altar.n.01", "name": "altar"}, + {"id": 5347, "synset": "altarpiece.n.01", "name": "altarpiece"}, + {"id": 5348, "synset": "altazimuth.n.01", "name": "altazimuth"}, + {"id": 5349, "synset": "alternator.n.01", "name": "alternator"}, + {"id": 5350, "synset": "altimeter.n.01", "name": "altimeter"}, + {"id": 5351, "synset": "amati.n.02", "name": "Amati"}, + {"id": 5352, "synset": "amen_corner.n.01", "name": "amen_corner"}, + {"id": 5353, "synset": "american_organ.n.01", "name": "American_organ"}, + {"id": 5354, "synset": "ammeter.n.01", "name": "ammeter"}, + {"id": 5355, "synset": "ammonia_clock.n.01", "name": "ammonia_clock"}, + {"id": 5356, "synset": "ammunition.n.01", "name": "ammunition"}, + {"id": 5357, "synset": "amphibian.n.02", "name": "amphibian"}, + {"id": 5358, "synset": "amphibian.n.01", "name": "amphibian"}, + {"id": 5359, "synset": "amphitheater.n.02", "name": "amphitheater"}, + {"id": 5360, "synset": "amphitheater.n.01", "name": "amphitheater"}, + {"id": 5361, "synset": "amphora.n.01", "name": "amphora"}, + {"id": 5362, "synset": "ampulla.n.02", "name": "ampulla"}, + {"id": 5363, "synset": "amusement_arcade.n.01", "name": "amusement_arcade"}, + {"id": 5364, "synset": "analog_clock.n.01", "name": "analog_clock"}, + {"id": 5365, "synset": "analog_computer.n.01", "name": "analog_computer"}, + {"id": 5366, "synset": "analog_watch.n.01", "name": "analog_watch"}, + {"id": 5367, "synset": "analytical_balance.n.01", "name": "analytical_balance"}, + {"id": 5368, "synset": "analyzer.n.01", "name": "analyzer"}, + {"id": 5369, "synset": "anamorphosis.n.02", "name": "anamorphosis"}, + {"id": 5370, "synset": "anastigmat.n.01", "name": "anastigmat"}, + {"id": 5371, "synset": "anchor.n.01", "name": "anchor"}, + {"id": 5372, "synset": "anchor_chain.n.01", "name": "anchor_chain"}, + {"id": 5373, "synset": "anchor_light.n.01", "name": "anchor_light"}, + {"id": 5374, "synset": "and_circuit.n.01", "name": "AND_circuit"}, + {"id": 5375, "synset": "andiron.n.01", "name": "andiron"}, + {"id": 5376, "synset": "android.n.01", "name": "android"}, + {"id": 5377, "synset": "anechoic_chamber.n.01", "name": "anechoic_chamber"}, + {"id": 5378, "synset": "anemometer.n.01", "name": "anemometer"}, + {"id": 5379, "synset": "aneroid_barometer.n.01", "name": "aneroid_barometer"}, + {"id": 5380, "synset": "angiocardiogram.n.01", "name": "angiocardiogram"}, + {"id": 5381, "synset": "angioscope.n.01", "name": "angioscope"}, + {"id": 5382, "synset": "angle_bracket.n.02", "name": "angle_bracket"}, + {"id": 5383, "synset": "angledozer.n.01", "name": "angledozer"}, + {"id": 5384, "synset": "ankle_brace.n.01", "name": "ankle_brace"}, + {"id": 5385, "synset": "anklet.n.02", "name": "anklet"}, + {"id": 5386, "synset": "anklet.n.01", "name": "anklet"}, + {"id": 5387, "synset": "ankus.n.01", "name": "ankus"}, + {"id": 5388, "synset": "anode.n.01", "name": "anode"}, + {"id": 5389, "synset": "anode.n.02", "name": "anode"}, + {"id": 5390, "synset": "answering_machine.n.01", "name": "answering_machine"}, + {"id": 5391, "synset": "anteroom.n.01", "name": "anteroom"}, + {"id": 5392, "synset": "antiaircraft.n.01", "name": "antiaircraft"}, + { + "id": 5393, + "synset": "antiballistic_missile.n.01", + "name": "antiballistic_missile", + }, + {"id": 5394, "synset": "antifouling_paint.n.01", "name": "antifouling_paint"}, + {"id": 5395, "synset": "anti-g_suit.n.01", "name": "anti-G_suit"}, + {"id": 5396, "synset": "antimacassar.n.01", "name": "antimacassar"}, + {"id": 5397, "synset": "antiperspirant.n.01", "name": "antiperspirant"}, + { + "id": 5398, + "synset": "anti-submarine_rocket.n.01", + "name": "anti-submarine_rocket", + }, + {"id": 5399, "synset": "anvil.n.01", "name": "anvil"}, + {"id": 5400, "synset": "ao_dai.n.01", "name": "ao_dai"}, + {"id": 5401, "synset": "apadana.n.01", "name": "apadana"}, + {"id": 5402, "synset": "apartment.n.01", "name": "apartment"}, + {"id": 5403, "synset": "apartment_building.n.01", "name": "apartment_building"}, + {"id": 5404, "synset": "aperture.n.03", "name": "aperture"}, + {"id": 5405, "synset": "aperture.n.01", "name": "aperture"}, + {"id": 5406, "synset": "apiary.n.01", "name": "apiary"}, + {"id": 5407, "synset": "apparatus.n.01", "name": "apparatus"}, + {"id": 5408, "synset": "apparel.n.01", "name": "apparel"}, + {"id": 5409, "synset": "applecart.n.02", "name": "applecart"}, + {"id": 5410, "synset": "appliance.n.02", "name": "appliance"}, + {"id": 5411, "synset": "appliance.n.01", "name": "appliance"}, + {"id": 5412, "synset": "applicator.n.01", "name": "applicator"}, + {"id": 5413, "synset": "appointment.n.03", "name": "appointment"}, + {"id": 5414, "synset": "apron_string.n.01", "name": "apron_string"}, + {"id": 5415, "synset": "apse.n.01", "name": "apse"}, + {"id": 5416, "synset": "aqualung.n.01", "name": "aqualung"}, + {"id": 5417, "synset": "aquaplane.n.01", "name": "aquaplane"}, + {"id": 5418, "synset": "arabesque.n.02", "name": "arabesque"}, + {"id": 5419, "synset": "arbor.n.03", "name": "arbor"}, + {"id": 5420, "synset": "arcade.n.02", "name": "arcade"}, + {"id": 5421, "synset": "arch.n.04", "name": "arch"}, + {"id": 5422, "synset": "architecture.n.01", "name": "architecture"}, + {"id": 5423, "synset": "architrave.n.02", "name": "architrave"}, + {"id": 5424, "synset": "arch_support.n.01", "name": "arch_support"}, + {"id": 5425, "synset": "arc_lamp.n.01", "name": "arc_lamp"}, + {"id": 5426, "synset": "area.n.05", "name": "area"}, + {"id": 5427, "synset": "areaway.n.01", "name": "areaway"}, + {"id": 5428, "synset": "argyle.n.03", "name": "argyle"}, + {"id": 5429, "synset": "ark.n.02", "name": "ark"}, + {"id": 5430, "synset": "arm.n.04", "name": "arm"}, + {"id": 5431, "synset": "armament.n.01", "name": "armament"}, + {"id": 5432, "synset": "armature.n.01", "name": "armature"}, + {"id": 5433, "synset": "armet.n.01", "name": "armet"}, + {"id": 5434, "synset": "arm_guard.n.01", "name": "arm_guard"}, + {"id": 5435, "synset": "armhole.n.01", "name": "armhole"}, + {"id": 5436, "synset": "armilla.n.02", "name": "armilla"}, + {"id": 5437, "synset": "armlet.n.01", "name": "armlet"}, + {"id": 5438, "synset": "armored_car.n.02", "name": "armored_car"}, + {"id": 5439, "synset": "armored_car.n.01", "name": "armored_car"}, + { + "id": 5440, + "synset": "armored_personnel_carrier.n.01", + "name": "armored_personnel_carrier", + }, + {"id": 5441, "synset": "armored_vehicle.n.01", "name": "armored_vehicle"}, + {"id": 5442, "synset": "armor_plate.n.01", "name": "armor_plate"}, + {"id": 5443, "synset": "armory.n.04", "name": "armory"}, + {"id": 5444, "synset": "armrest.n.01", "name": "armrest"}, + {"id": 5445, "synset": "arquebus.n.01", "name": "arquebus"}, + {"id": 5446, "synset": "array.n.04", "name": "array"}, + {"id": 5447, "synset": "array.n.03", "name": "array"}, + {"id": 5448, "synset": "arrester.n.01", "name": "arrester"}, + {"id": 5449, "synset": "arrow.n.02", "name": "arrow"}, + {"id": 5450, "synset": "arsenal.n.01", "name": "arsenal"}, + {"id": 5451, "synset": "arterial_road.n.01", "name": "arterial_road"}, + {"id": 5452, "synset": "arthrogram.n.01", "name": "arthrogram"}, + {"id": 5453, "synset": "arthroscope.n.01", "name": "arthroscope"}, + {"id": 5454, "synset": "artificial_heart.n.01", "name": "artificial_heart"}, + {"id": 5455, "synset": "artificial_horizon.n.01", "name": "artificial_horizon"}, + {"id": 5456, "synset": "artificial_joint.n.01", "name": "artificial_joint"}, + {"id": 5457, "synset": "artificial_kidney.n.01", "name": "artificial_kidney"}, + {"id": 5458, "synset": "artificial_skin.n.01", "name": "artificial_skin"}, + {"id": 5459, "synset": "artillery.n.01", "name": "artillery"}, + {"id": 5460, "synset": "artillery_shell.n.01", "name": "artillery_shell"}, + {"id": 5461, "synset": "artist's_loft.n.01", "name": "artist's_loft"}, + {"id": 5462, "synset": "art_school.n.01", "name": "art_school"}, + {"id": 5463, "synset": "ascot.n.01", "name": "ascot"}, + {"id": 5464, "synset": "ash-pan.n.01", "name": "ash-pan"}, + {"id": 5465, "synset": "aspergill.n.01", "name": "aspergill"}, + {"id": 5466, "synset": "aspersorium.n.01", "name": "aspersorium"}, + {"id": 5467, "synset": "aspirator.n.01", "name": "aspirator"}, + {"id": 5468, "synset": "aspirin_powder.n.01", "name": "aspirin_powder"}, + {"id": 5469, "synset": "assault_gun.n.02", "name": "assault_gun"}, + {"id": 5470, "synset": "assault_rifle.n.01", "name": "assault_rifle"}, + {"id": 5471, "synset": "assegai.n.01", "name": "assegai"}, + {"id": 5472, "synset": "assembly.n.01", "name": "assembly"}, + {"id": 5473, "synset": "assembly.n.05", "name": "assembly"}, + {"id": 5474, "synset": "assembly_hall.n.01", "name": "assembly_hall"}, + {"id": 5475, "synset": "assembly_plant.n.01", "name": "assembly_plant"}, + {"id": 5476, "synset": "astatic_coils.n.01", "name": "astatic_coils"}, + {"id": 5477, "synset": "astatic_galvanometer.n.01", "name": "astatic_galvanometer"}, + {"id": 5478, "synset": "astrodome.n.01", "name": "astrodome"}, + {"id": 5479, "synset": "astrolabe.n.01", "name": "astrolabe"}, + { + "id": 5480, + "synset": "astronomical_telescope.n.01", + "name": "astronomical_telescope", + }, + {"id": 5481, "synset": "astronomy_satellite.n.01", "name": "astronomy_satellite"}, + {"id": 5482, "synset": "athenaeum.n.02", "name": "athenaeum"}, + {"id": 5483, "synset": "athletic_sock.n.01", "name": "athletic_sock"}, + {"id": 5484, "synset": "athletic_supporter.n.01", "name": "athletic_supporter"}, + {"id": 5485, "synset": "atlas.n.04", "name": "atlas"}, + {"id": 5486, "synset": "atmometer.n.01", "name": "atmometer"}, + {"id": 5487, "synset": "atom_bomb.n.01", "name": "atom_bomb"}, + {"id": 5488, "synset": "atomic_clock.n.01", "name": "atomic_clock"}, + {"id": 5489, "synset": "atomic_pile.n.01", "name": "atomic_pile"}, + {"id": 5490, "synset": "atrium.n.02", "name": "atrium"}, + {"id": 5491, "synset": "attache_case.n.01", "name": "attache_case"}, + {"id": 5492, "synset": "attachment.n.04", "name": "attachment"}, + {"id": 5493, "synset": "attack_submarine.n.01", "name": "attack_submarine"}, + {"id": 5494, "synset": "attenuator.n.01", "name": "attenuator"}, + {"id": 5495, "synset": "attic.n.04", "name": "attic"}, + {"id": 5496, "synset": "attic_fan.n.01", "name": "attic_fan"}, + {"id": 5497, "synset": "attire.n.01", "name": "attire"}, + {"id": 5498, "synset": "audio_amplifier.n.01", "name": "audio_amplifier"}, + {"id": 5499, "synset": "audiocassette.n.01", "name": "audiocassette"}, + {"id": 5500, "synset": "audio_cd.n.01", "name": "audio_CD"}, + {"id": 5501, "synset": "audiometer.n.01", "name": "audiometer"}, + {"id": 5502, "synset": "audio_system.n.01", "name": "audio_system"}, + {"id": 5503, "synset": "audiotape.n.02", "name": "audiotape"}, + {"id": 5504, "synset": "audiotape.n.01", "name": "audiotape"}, + {"id": 5505, "synset": "audiovisual.n.01", "name": "audiovisual"}, + {"id": 5506, "synset": "auditorium.n.01", "name": "auditorium"}, + {"id": 5507, "synset": "auger.n.02", "name": "auger"}, + {"id": 5508, "synset": "autobahn.n.01", "name": "autobahn"}, + {"id": 5509, "synset": "autoclave.n.01", "name": "autoclave"}, + {"id": 5510, "synset": "autofocus.n.01", "name": "autofocus"}, + {"id": 5511, "synset": "autogiro.n.01", "name": "autogiro"}, + {"id": 5512, "synset": "autoinjector.n.01", "name": "autoinjector"}, + {"id": 5513, "synset": "autoloader.n.01", "name": "autoloader"}, + {"id": 5514, "synset": "automat.n.02", "name": "automat"}, + {"id": 5515, "synset": "automat.n.01", "name": "automat"}, + {"id": 5516, "synset": "automatic_choke.n.01", "name": "automatic_choke"}, + {"id": 5517, "synset": "automatic_firearm.n.01", "name": "automatic_firearm"}, + {"id": 5518, "synset": "automatic_pistol.n.01", "name": "automatic_pistol"}, + {"id": 5519, "synset": "automatic_rifle.n.01", "name": "automatic_rifle"}, + { + "id": 5520, + "synset": "automatic_transmission.n.01", + "name": "automatic_transmission", + }, + {"id": 5521, "synset": "automation.n.03", "name": "automation"}, + {"id": 5522, "synset": "automaton.n.02", "name": "automaton"}, + {"id": 5523, "synset": "automobile_engine.n.01", "name": "automobile_engine"}, + {"id": 5524, "synset": "automobile_factory.n.01", "name": "automobile_factory"}, + {"id": 5525, "synset": "automobile_horn.n.01", "name": "automobile_horn"}, + {"id": 5526, "synset": "autopilot.n.02", "name": "autopilot"}, + {"id": 5527, "synset": "autoradiograph.n.01", "name": "autoradiograph"}, + {"id": 5528, "synset": "autostrada.n.01", "name": "autostrada"}, + {"id": 5529, "synset": "auxiliary_boiler.n.01", "name": "auxiliary_boiler"}, + {"id": 5530, "synset": "auxiliary_engine.n.01", "name": "auxiliary_engine"}, + {"id": 5531, "synset": "auxiliary_pump.n.01", "name": "auxiliary_pump"}, + { + "id": 5532, + "synset": "auxiliary_research_submarine.n.01", + "name": "auxiliary_research_submarine", + }, + {"id": 5533, "synset": "auxiliary_storage.n.01", "name": "auxiliary_storage"}, + {"id": 5534, "synset": "aviary.n.01", "name": "aviary"}, + {"id": 5535, "synset": "awl.n.01", "name": "awl"}, + {"id": 5536, "synset": "ax_handle.n.01", "name": "ax_handle"}, + {"id": 5537, "synset": "ax_head.n.01", "name": "ax_head"}, + {"id": 5538, "synset": "axis.n.06", "name": "axis"}, + {"id": 5539, "synset": "axle.n.01", "name": "axle"}, + {"id": 5540, "synset": "axle_bar.n.01", "name": "axle_bar"}, + {"id": 5541, "synset": "axletree.n.01", "name": "axletree"}, + {"id": 5542, "synset": "babushka.n.01", "name": "babushka"}, + {"id": 5543, "synset": "baby_bed.n.01", "name": "baby_bed"}, + {"id": 5544, "synset": "baby_grand.n.01", "name": "baby_grand"}, + {"id": 5545, "synset": "baby_powder.n.01", "name": "baby_powder"}, + {"id": 5546, "synset": "baby_shoe.n.01", "name": "baby_shoe"}, + {"id": 5547, "synset": "back.n.08", "name": "back"}, + {"id": 5548, "synset": "back.n.07", "name": "back"}, + {"id": 5549, "synset": "backbench.n.01", "name": "backbench"}, + {"id": 5550, "synset": "backboard.n.02", "name": "backboard"}, + {"id": 5551, "synset": "backbone.n.05", "name": "backbone"}, + {"id": 5552, "synset": "back_brace.n.01", "name": "back_brace"}, + {"id": 5553, "synset": "backgammon_board.n.01", "name": "backgammon_board"}, + {"id": 5554, "synset": "background.n.07", "name": "background"}, + {"id": 5555, "synset": "backhoe.n.01", "name": "backhoe"}, + {"id": 5556, "synset": "backlighting.n.01", "name": "backlighting"}, + {"id": 5557, "synset": "backpacking_tent.n.01", "name": "backpacking_tent"}, + {"id": 5558, "synset": "backplate.n.01", "name": "backplate"}, + {"id": 5559, "synset": "back_porch.n.01", "name": "back_porch"}, + {"id": 5560, "synset": "backsaw.n.01", "name": "backsaw"}, + {"id": 5561, "synset": "backscratcher.n.02", "name": "backscratcher"}, + {"id": 5562, "synset": "backseat.n.02", "name": "backseat"}, + {"id": 5563, "synset": "backspace_key.n.01", "name": "backspace_key"}, + {"id": 5564, "synset": "backstairs.n.01", "name": "backstairs"}, + {"id": 5565, "synset": "backstay.n.01", "name": "backstay"}, + {"id": 5566, "synset": "backstop.n.02", "name": "backstop"}, + {"id": 5567, "synset": "backsword.n.02", "name": "backsword"}, + {"id": 5568, "synset": "backup_system.n.01", "name": "backup_system"}, + {"id": 5569, "synset": "badminton_court.n.01", "name": "badminton_court"}, + {"id": 5570, "synset": "badminton_equipment.n.01", "name": "badminton_equipment"}, + {"id": 5571, "synset": "badminton_racket.n.01", "name": "badminton_racket"}, + {"id": 5572, "synset": "bag.n.01", "name": "bag"}, + {"id": 5573, "synset": "baggage.n.01", "name": "baggage"}, + {"id": 5574, "synset": "baggage.n.03", "name": "baggage"}, + {"id": 5575, "synset": "baggage_car.n.01", "name": "baggage_car"}, + {"id": 5576, "synset": "baggage_claim.n.01", "name": "baggage_claim"}, + {"id": 5577, "synset": "bailey.n.04", "name": "bailey"}, + {"id": 5578, "synset": "bailey.n.03", "name": "bailey"}, + {"id": 5579, "synset": "bailey_bridge.n.01", "name": "Bailey_bridge"}, + {"id": 5580, "synset": "bain-marie.n.01", "name": "bain-marie"}, + {"id": 5581, "synset": "baize.n.01", "name": "baize"}, + {"id": 5582, "synset": "bakery.n.01", "name": "bakery"}, + {"id": 5583, "synset": "balaclava.n.01", "name": "balaclava"}, + {"id": 5584, "synset": "balalaika.n.01", "name": "balalaika"}, + {"id": 5585, "synset": "balance.n.12", "name": "balance"}, + {"id": 5586, "synset": "balance_beam.n.01", "name": "balance_beam"}, + {"id": 5587, "synset": "balance_wheel.n.01", "name": "balance_wheel"}, + {"id": 5588, "synset": "balbriggan.n.01", "name": "balbriggan"}, + {"id": 5589, "synset": "balcony.n.02", "name": "balcony"}, + {"id": 5590, "synset": "balcony.n.01", "name": "balcony"}, + {"id": 5591, "synset": "baldachin.n.01", "name": "baldachin"}, + {"id": 5592, "synset": "baldric.n.01", "name": "baldric"}, + {"id": 5593, "synset": "bale.n.01", "name": "bale"}, + {"id": 5594, "synset": "baling_wire.n.01", "name": "baling_wire"}, + {"id": 5595, "synset": "ball.n.01", "name": "ball"}, + {"id": 5596, "synset": "ball_and_chain.n.01", "name": "ball_and_chain"}, + { + "id": 5597, + "synset": "ball-and-socket_joint.n.02", + "name": "ball-and-socket_joint", + }, + {"id": 5598, "synset": "ballast.n.05", "name": "ballast"}, + {"id": 5599, "synset": "ball_bearing.n.01", "name": "ball_bearing"}, + {"id": 5600, "synset": "ball_cartridge.n.01", "name": "ball_cartridge"}, + {"id": 5601, "synset": "ballcock.n.01", "name": "ballcock"}, + {"id": 5602, "synset": "balldress.n.01", "name": "balldress"}, + {"id": 5603, "synset": "ball_gown.n.01", "name": "ball_gown"}, + { + "id": 5604, + "synset": "ballistic_galvanometer.n.01", + "name": "ballistic_galvanometer", + }, + {"id": 5605, "synset": "ballistic_missile.n.01", "name": "ballistic_missile"}, + {"id": 5606, "synset": "ballistic_pendulum.n.01", "name": "ballistic_pendulum"}, + {"id": 5607, "synset": "ballistocardiograph.n.01", "name": "ballistocardiograph"}, + {"id": 5608, "synset": "balloon_bomb.n.01", "name": "balloon_bomb"}, + {"id": 5609, "synset": "balloon_sail.n.01", "name": "balloon_sail"}, + {"id": 5610, "synset": "ballot_box.n.01", "name": "ballot_box"}, + {"id": 5611, "synset": "ballpark.n.01", "name": "ballpark"}, + {"id": 5612, "synset": "ball-peen_hammer.n.01", "name": "ball-peen_hammer"}, + {"id": 5613, "synset": "ballpoint.n.01", "name": "ballpoint"}, + {"id": 5614, "synset": "ballroom.n.01", "name": "ballroom"}, + {"id": 5615, "synset": "ball_valve.n.01", "name": "ball_valve"}, + {"id": 5616, "synset": "balsa_raft.n.01", "name": "balsa_raft"}, + {"id": 5617, "synset": "baluster.n.01", "name": "baluster"}, + {"id": 5618, "synset": "banana_boat.n.01", "name": "banana_boat"}, + {"id": 5619, "synset": "band.n.13", "name": "band"}, + {"id": 5620, "synset": "bandbox.n.01", "name": "bandbox"}, + {"id": 5621, "synset": "banderilla.n.01", "name": "banderilla"}, + {"id": 5622, "synset": "bandoleer.n.01", "name": "bandoleer"}, + {"id": 5623, "synset": "bandoneon.n.01", "name": "bandoneon"}, + {"id": 5624, "synset": "bandsaw.n.01", "name": "bandsaw"}, + {"id": 5625, "synset": "bandwagon.n.02", "name": "bandwagon"}, + {"id": 5626, "synset": "bangalore_torpedo.n.01", "name": "bangalore_torpedo"}, + {"id": 5627, "synset": "bangle.n.02", "name": "bangle"}, + {"id": 5628, "synset": "bannister.n.02", "name": "bannister"}, + {"id": 5629, "synset": "banquette.n.01", "name": "banquette"}, + {"id": 5630, "synset": "banyan.n.02", "name": "banyan"}, + {"id": 5631, "synset": "baptismal_font.n.01", "name": "baptismal_font"}, + {"id": 5632, "synset": "bar.n.03", "name": "bar"}, + {"id": 5633, "synset": "bar.n.02", "name": "bar"}, + {"id": 5634, "synset": "barbecue.n.03", "name": "barbecue"}, + {"id": 5635, "synset": "barbed_wire.n.01", "name": "barbed_wire"}, + {"id": 5636, "synset": "barber_chair.n.01", "name": "barber_chair"}, + {"id": 5637, "synset": "barbershop.n.01", "name": "barbershop"}, + {"id": 5638, "synset": "barbette_carriage.n.01", "name": "barbette_carriage"}, + {"id": 5639, "synset": "barbican.n.01", "name": "barbican"}, + {"id": 5640, "synset": "bar_bit.n.01", "name": "bar_bit"}, + {"id": 5641, "synset": "bareboat.n.01", "name": "bareboat"}, + {"id": 5642, "synset": "barge_pole.n.01", "name": "barge_pole"}, + {"id": 5643, "synset": "baritone.n.03", "name": "baritone"}, + {"id": 5644, "synset": "bark.n.03", "name": "bark"}, + {"id": 5645, "synset": "bar_magnet.n.01", "name": "bar_magnet"}, + {"id": 5646, "synset": "bar_mask.n.01", "name": "bar_mask"}, + {"id": 5647, "synset": "barn.n.01", "name": "barn"}, + {"id": 5648, "synset": "barndoor.n.01", "name": "barndoor"}, + {"id": 5649, "synset": "barn_door.n.01", "name": "barn_door"}, + {"id": 5650, "synset": "barnyard.n.01", "name": "barnyard"}, + {"id": 5651, "synset": "barograph.n.01", "name": "barograph"}, + {"id": 5652, "synset": "barometer.n.01", "name": "barometer"}, + {"id": 5653, "synset": "barong.n.01", "name": "barong"}, + {"id": 5654, "synset": "barouche.n.01", "name": "barouche"}, + {"id": 5655, "synset": "bar_printer.n.01", "name": "bar_printer"}, + {"id": 5656, "synset": "barrack.n.01", "name": "barrack"}, + {"id": 5657, "synset": "barrage_balloon.n.01", "name": "barrage_balloon"}, + {"id": 5658, "synset": "barrel.n.01", "name": "barrel"}, + {"id": 5659, "synset": "barrelhouse.n.01", "name": "barrelhouse"}, + {"id": 5660, "synset": "barrel_knot.n.01", "name": "barrel_knot"}, + {"id": 5661, "synset": "barrel_organ.n.01", "name": "barrel_organ"}, + {"id": 5662, "synset": "barrel_vault.n.01", "name": "barrel_vault"}, + {"id": 5663, "synset": "barricade.n.02", "name": "barricade"}, + {"id": 5664, "synset": "barrier.n.01", "name": "barrier"}, + {"id": 5665, "synset": "barroom.n.01", "name": "barroom"}, + {"id": 5666, "synset": "bascule.n.01", "name": "bascule"}, + {"id": 5667, "synset": "base.n.08", "name": "base"}, + {"id": 5668, "synset": "baseball_equipment.n.01", "name": "baseball_equipment"}, + {"id": 5669, "synset": "basement.n.01", "name": "basement"}, + {"id": 5670, "synset": "basement.n.02", "name": "basement"}, + { + "id": 5671, + "synset": "basic_point_defense_missile_system.n.01", + "name": "basic_point_defense_missile_system", + }, + {"id": 5672, "synset": "basilica.n.02", "name": "basilica"}, + {"id": 5673, "synset": "basilica.n.01", "name": "basilica"}, + {"id": 5674, "synset": "basilisk.n.02", "name": "basilisk"}, + {"id": 5675, "synset": "basin.n.01", "name": "basin"}, + {"id": 5676, "synset": "basinet.n.01", "name": "basinet"}, + {"id": 5677, "synset": "basket.n.03", "name": "basket"}, + {"id": 5678, "synset": "basketball_court.n.01", "name": "basketball_court"}, + {"id": 5679, "synset": "basketball_equipment.n.01", "name": "basketball_equipment"}, + {"id": 5680, "synset": "basket_weave.n.01", "name": "basket_weave"}, + {"id": 5681, "synset": "bass.n.07", "name": "bass"}, + {"id": 5682, "synset": "bass_clarinet.n.01", "name": "bass_clarinet"}, + {"id": 5683, "synset": "bass_drum.n.01", "name": "bass_drum"}, + {"id": 5684, "synset": "basset_horn.n.01", "name": "basset_horn"}, + {"id": 5685, "synset": "bass_fiddle.n.01", "name": "bass_fiddle"}, + {"id": 5686, "synset": "bass_guitar.n.01", "name": "bass_guitar"}, + {"id": 5687, "synset": "bassinet.n.01", "name": "bassinet"}, + {"id": 5688, "synset": "bassinet.n.02", "name": "bassinet"}, + {"id": 5689, "synset": "bassoon.n.01", "name": "bassoon"}, + {"id": 5690, "synset": "baster.n.03", "name": "baster"}, + {"id": 5691, "synset": "bastinado.n.01", "name": "bastinado"}, + {"id": 5692, "synset": "bastion.n.03", "name": "bastion"}, + {"id": 5693, "synset": "bastion.n.02", "name": "bastion"}, + {"id": 5694, "synset": "bat.n.05", "name": "bat"}, + {"id": 5695, "synset": "bath.n.01", "name": "bath"}, + {"id": 5696, "synset": "bath_chair.n.01", "name": "bath_chair"}, + {"id": 5697, "synset": "bathhouse.n.02", "name": "bathhouse"}, + {"id": 5698, "synset": "bathhouse.n.01", "name": "bathhouse"}, + {"id": 5699, "synset": "bathing_cap.n.01", "name": "bathing_cap"}, + {"id": 5700, "synset": "bath_oil.n.01", "name": "bath_oil"}, + {"id": 5701, "synset": "bathroom.n.01", "name": "bathroom"}, + {"id": 5702, "synset": "bath_salts.n.01", "name": "bath_salts"}, + {"id": 5703, "synset": "bathyscaphe.n.01", "name": "bathyscaphe"}, + {"id": 5704, "synset": "bathysphere.n.01", "name": "bathysphere"}, + {"id": 5705, "synset": "batik.n.01", "name": "batik"}, + {"id": 5706, "synset": "batiste.n.01", "name": "batiste"}, + {"id": 5707, "synset": "baton.n.01", "name": "baton"}, + {"id": 5708, "synset": "baton.n.05", "name": "baton"}, + {"id": 5709, "synset": "baton.n.04", "name": "baton"}, + {"id": 5710, "synset": "baton.n.03", "name": "baton"}, + {"id": 5711, "synset": "battering_ram.n.01", "name": "battering_ram"}, + {"id": 5712, "synset": "batter's_box.n.01", "name": "batter's_box"}, + {"id": 5713, "synset": "battery.n.05", "name": "battery"}, + {"id": 5714, "synset": "batting_cage.n.01", "name": "batting_cage"}, + {"id": 5715, "synset": "batting_glove.n.01", "name": "batting_glove"}, + {"id": 5716, "synset": "batting_helmet.n.01", "name": "batting_helmet"}, + {"id": 5717, "synset": "battle-ax.n.01", "name": "battle-ax"}, + {"id": 5718, "synset": "battle_cruiser.n.01", "name": "battle_cruiser"}, + {"id": 5719, "synset": "battle_dress.n.01", "name": "battle_dress"}, + {"id": 5720, "synset": "battlement.n.01", "name": "battlement"}, + {"id": 5721, "synset": "battleship.n.01", "name": "battleship"}, + {"id": 5722, "synset": "battle_sight.n.01", "name": "battle_sight"}, + {"id": 5723, "synset": "bay.n.05", "name": "bay"}, + {"id": 5724, "synset": "bay.n.04", "name": "bay"}, + {"id": 5725, "synset": "bayonet.n.01", "name": "bayonet"}, + {"id": 5726, "synset": "bay_rum.n.01", "name": "bay_rum"}, + {"id": 5727, "synset": "bay_window.n.02", "name": "bay_window"}, + {"id": 5728, "synset": "bazaar.n.01", "name": "bazaar"}, + {"id": 5729, "synset": "bazaar.n.02", "name": "bazaar"}, + {"id": 5730, "synset": "bazooka.n.01", "name": "bazooka"}, + {"id": 5731, "synset": "b_battery.n.01", "name": "B_battery"}, + {"id": 5732, "synset": "bb_gun.n.01", "name": "BB_gun"}, + {"id": 5733, "synset": "beach_house.n.01", "name": "beach_house"}, + {"id": 5734, "synset": "beach_towel.n.01", "name": "beach_towel"}, + {"id": 5735, "synset": "beach_wagon.n.01", "name": "beach_wagon"}, + {"id": 5736, "synset": "beachwear.n.01", "name": "beachwear"}, + {"id": 5737, "synset": "beacon.n.03", "name": "beacon"}, + {"id": 5738, "synset": "beading_plane.n.01", "name": "beading_plane"}, + {"id": 5739, "synset": "beaker.n.02", "name": "beaker"}, + {"id": 5740, "synset": "beaker.n.01", "name": "beaker"}, + {"id": 5741, "synset": "beam.n.02", "name": "beam"}, + {"id": 5742, "synset": "beam_balance.n.01", "name": "beam_balance"}, + {"id": 5743, "synset": "bearing.n.06", "name": "bearing"}, + {"id": 5744, "synset": "bearing_rein.n.01", "name": "bearing_rein"}, + {"id": 5745, "synset": "bearing_wall.n.01", "name": "bearing_wall"}, + {"id": 5746, "synset": "bearskin.n.02", "name": "bearskin"}, + {"id": 5747, "synset": "beater.n.02", "name": "beater"}, + { + "id": 5748, + "synset": "beating-reed_instrument.n.01", + "name": "beating-reed_instrument", + }, + {"id": 5749, "synset": "beaver.n.06", "name": "beaver"}, + {"id": 5750, "synset": "beaver.n.05", "name": "beaver"}, + {"id": 5751, "synset": "beckman_thermometer.n.01", "name": "Beckman_thermometer"}, + {"id": 5752, "synset": "bed.n.08", "name": "bed"}, + {"id": 5753, "synset": "bed_and_breakfast.n.01", "name": "bed_and_breakfast"}, + {"id": 5754, "synset": "bedclothes.n.01", "name": "bedclothes"}, + {"id": 5755, "synset": "bedford_cord.n.01", "name": "Bedford_cord"}, + {"id": 5756, "synset": "bed_jacket.n.01", "name": "bed_jacket"}, + {"id": 5757, "synset": "bedpost.n.01", "name": "bedpost"}, + {"id": 5758, "synset": "bedroll.n.01", "name": "bedroll"}, + {"id": 5759, "synset": "bedroom.n.01", "name": "bedroom"}, + {"id": 5760, "synset": "bedroom_furniture.n.01", "name": "bedroom_furniture"}, + {"id": 5761, "synset": "bedsitting_room.n.01", "name": "bedsitting_room"}, + {"id": 5762, "synset": "bedspring.n.01", "name": "bedspring"}, + {"id": 5763, "synset": "bedstead.n.01", "name": "bedstead"}, + {"id": 5764, "synset": "beefcake.n.01", "name": "beefcake"}, + {"id": 5765, "synset": "beehive.n.04", "name": "beehive"}, + {"id": 5766, "synset": "beer_barrel.n.01", "name": "beer_barrel"}, + {"id": 5767, "synset": "beer_garden.n.01", "name": "beer_garden"}, + {"id": 5768, "synset": "beer_glass.n.01", "name": "beer_glass"}, + {"id": 5769, "synset": "beer_hall.n.01", "name": "beer_hall"}, + {"id": 5770, "synset": "beer_mat.n.01", "name": "beer_mat"}, + {"id": 5771, "synset": "beer_mug.n.01", "name": "beer_mug"}, + {"id": 5772, "synset": "belaying_pin.n.01", "name": "belaying_pin"}, + {"id": 5773, "synset": "belfry.n.02", "name": "belfry"}, + {"id": 5774, "synset": "bell_arch.n.01", "name": "bell_arch"}, + {"id": 5775, "synset": "bellarmine.n.02", "name": "bellarmine"}, + {"id": 5776, "synset": "bellbottom_trousers.n.01", "name": "bellbottom_trousers"}, + {"id": 5777, "synset": "bell_cote.n.01", "name": "bell_cote"}, + {"id": 5778, "synset": "bell_foundry.n.01", "name": "bell_foundry"}, + {"id": 5779, "synset": "bell_gable.n.01", "name": "bell_gable"}, + {"id": 5780, "synset": "bell_jar.n.01", "name": "bell_jar"}, + {"id": 5781, "synset": "bellows.n.01", "name": "bellows"}, + {"id": 5782, "synset": "bellpull.n.01", "name": "bellpull"}, + {"id": 5783, "synset": "bell_push.n.01", "name": "bell_push"}, + {"id": 5784, "synset": "bell_seat.n.01", "name": "bell_seat"}, + {"id": 5785, "synset": "bell_tent.n.01", "name": "bell_tent"}, + {"id": 5786, "synset": "bell_tower.n.01", "name": "bell_tower"}, + {"id": 5787, "synset": "bellyband.n.01", "name": "bellyband"}, + {"id": 5788, "synset": "belt.n.06", "name": "belt"}, + {"id": 5789, "synset": "belting.n.01", "name": "belting"}, + {"id": 5790, "synset": "bench_clamp.n.01", "name": "bench_clamp"}, + {"id": 5791, "synset": "bench_hook.n.01", "name": "bench_hook"}, + {"id": 5792, "synset": "bench_lathe.n.01", "name": "bench_lathe"}, + {"id": 5793, "synset": "bench_press.n.02", "name": "bench_press"}, + {"id": 5794, "synset": "bender.n.01", "name": "bender"}, + {"id": 5795, "synset": "berlin.n.03", "name": "berlin"}, + {"id": 5796, "synset": "bermuda_shorts.n.01", "name": "Bermuda_shorts"}, + {"id": 5797, "synset": "berth.n.03", "name": "berth"}, + {"id": 5798, "synset": "besom.n.01", "name": "besom"}, + {"id": 5799, "synset": "bessemer_converter.n.01", "name": "Bessemer_converter"}, + {"id": 5800, "synset": "bethel.n.01", "name": "bethel"}, + {"id": 5801, "synset": "betting_shop.n.01", "name": "betting_shop"}, + {"id": 5802, "synset": "bevatron.n.01", "name": "bevatron"}, + {"id": 5803, "synset": "bevel.n.02", "name": "bevel"}, + {"id": 5804, "synset": "bevel_gear.n.01", "name": "bevel_gear"}, + {"id": 5805, "synset": "b-flat_clarinet.n.01", "name": "B-flat_clarinet"}, + {"id": 5806, "synset": "bib.n.01", "name": "bib"}, + {"id": 5807, "synset": "bib-and-tucker.n.01", "name": "bib-and-tucker"}, + {"id": 5808, "synset": "bicorn.n.01", "name": "bicorn"}, + { + "id": 5809, + "synset": "bicycle-built-for-two.n.01", + "name": "bicycle-built-for-two", + }, + {"id": 5810, "synset": "bicycle_chain.n.01", "name": "bicycle_chain"}, + {"id": 5811, "synset": "bicycle_clip.n.01", "name": "bicycle_clip"}, + {"id": 5812, "synset": "bicycle_pump.n.01", "name": "bicycle_pump"}, + {"id": 5813, "synset": "bicycle_rack.n.01", "name": "bicycle_rack"}, + {"id": 5814, "synset": "bicycle_seat.n.01", "name": "bicycle_seat"}, + {"id": 5815, "synset": "bicycle_wheel.n.01", "name": "bicycle_wheel"}, + {"id": 5816, "synset": "bidet.n.01", "name": "bidet"}, + {"id": 5817, "synset": "bier.n.02", "name": "bier"}, + {"id": 5818, "synset": "bier.n.01", "name": "bier"}, + {"id": 5819, "synset": "bi-fold_door.n.01", "name": "bi-fold_door"}, + {"id": 5820, "synset": "bifocals.n.01", "name": "bifocals"}, + {"id": 5821, "synset": "big_blue.n.01", "name": "Big_Blue"}, + {"id": 5822, "synset": "big_board.n.02", "name": "big_board"}, + {"id": 5823, "synset": "bight.n.04", "name": "bight"}, + {"id": 5824, "synset": "bikini.n.02", "name": "bikini"}, + {"id": 5825, "synset": "bikini_pants.n.01", "name": "bikini_pants"}, + {"id": 5826, "synset": "bilge.n.02", "name": "bilge"}, + {"id": 5827, "synset": "bilge_keel.n.01", "name": "bilge_keel"}, + {"id": 5828, "synset": "bilge_pump.n.01", "name": "bilge_pump"}, + {"id": 5829, "synset": "bilge_well.n.01", "name": "bilge_well"}, + {"id": 5830, "synset": "bill.n.08", "name": "bill"}, + {"id": 5831, "synset": "billiard_ball.n.01", "name": "billiard_ball"}, + {"id": 5832, "synset": "billiard_room.n.01", "name": "billiard_room"}, + {"id": 5833, "synset": "bin.n.01", "name": "bin"}, + {"id": 5834, "synset": "binder.n.04", "name": "binder"}, + {"id": 5835, "synset": "bindery.n.01", "name": "bindery"}, + {"id": 5836, "synset": "binding.n.05", "name": "binding"}, + {"id": 5837, "synset": "bin_liner.n.01", "name": "bin_liner"}, + {"id": 5838, "synset": "binnacle.n.01", "name": "binnacle"}, + {"id": 5839, "synset": "binocular_microscope.n.01", "name": "binocular_microscope"}, + {"id": 5840, "synset": "biochip.n.01", "name": "biochip"}, + {"id": 5841, "synset": "biohazard_suit.n.01", "name": "biohazard_suit"}, + {"id": 5842, "synset": "bioscope.n.02", "name": "bioscope"}, + {"id": 5843, "synset": "biplane.n.01", "name": "biplane"}, + {"id": 5844, "synset": "birch.n.03", "name": "birch"}, + {"id": 5845, "synset": "birchbark_canoe.n.01", "name": "birchbark_canoe"}, + {"id": 5846, "synset": "birdcall.n.02", "name": "birdcall"}, + {"id": 5847, "synset": "bird_shot.n.01", "name": "bird_shot"}, + {"id": 5848, "synset": "biretta.n.01", "name": "biretta"}, + {"id": 5849, "synset": "bishop.n.03", "name": "bishop"}, + {"id": 5850, "synset": "bistro.n.01", "name": "bistro"}, + {"id": 5851, "synset": "bit.n.11", "name": "bit"}, + {"id": 5852, "synset": "bit.n.05", "name": "bit"}, + {"id": 5853, "synset": "bite_plate.n.01", "name": "bite_plate"}, + {"id": 5854, "synset": "bitewing.n.01", "name": "bitewing"}, + {"id": 5855, "synset": "bitumastic.n.01", "name": "bitumastic"}, + {"id": 5856, "synset": "black.n.07", "name": "black"}, + {"id": 5857, "synset": "black.n.06", "name": "black"}, + {"id": 5858, "synset": "blackboard_eraser.n.01", "name": "blackboard_eraser"}, + {"id": 5859, "synset": "black_box.n.01", "name": "black_box"}, + {"id": 5860, "synset": "blackface.n.01", "name": "blackface"}, + {"id": 5861, "synset": "blackjack.n.02", "name": "blackjack"}, + {"id": 5862, "synset": "black_tie.n.02", "name": "black_tie"}, + {"id": 5863, "synset": "blackwash.n.03", "name": "blackwash"}, + {"id": 5864, "synset": "bladder.n.02", "name": "bladder"}, + {"id": 5865, "synset": "blade.n.09", "name": "blade"}, + {"id": 5866, "synset": "blade.n.08", "name": "blade"}, + {"id": 5867, "synset": "blade.n.07", "name": "blade"}, + {"id": 5868, "synset": "blank.n.04", "name": "blank"}, + {"id": 5869, "synset": "blast_furnace.n.01", "name": "blast_furnace"}, + {"id": 5870, "synset": "blasting_cap.n.01", "name": "blasting_cap"}, + {"id": 5871, "synset": "blind.n.03", "name": "blind"}, + {"id": 5872, "synset": "blind_curve.n.01", "name": "blind_curve"}, + {"id": 5873, "synset": "blindfold.n.01", "name": "blindfold"}, + {"id": 5874, "synset": "bling.n.01", "name": "bling"}, + {"id": 5875, "synset": "blister_pack.n.01", "name": "blister_pack"}, + {"id": 5876, "synset": "block.n.05", "name": "block"}, + {"id": 5877, "synset": "blockade.n.02", "name": "blockade"}, + {"id": 5878, "synset": "blockade-runner.n.01", "name": "blockade-runner"}, + {"id": 5879, "synset": "block_and_tackle.n.01", "name": "block_and_tackle"}, + {"id": 5880, "synset": "blockbuster.n.01", "name": "blockbuster"}, + {"id": 5881, "synset": "blockhouse.n.01", "name": "blockhouse"}, + {"id": 5882, "synset": "block_plane.n.01", "name": "block_plane"}, + {"id": 5883, "synset": "bloodmobile.n.01", "name": "bloodmobile"}, + {"id": 5884, "synset": "bloomers.n.01", "name": "bloomers"}, + {"id": 5885, "synset": "blower.n.01", "name": "blower"}, + {"id": 5886, "synset": "blowtorch.n.01", "name": "blowtorch"}, + {"id": 5887, "synset": "blucher.n.02", "name": "blucher"}, + {"id": 5888, "synset": "bludgeon.n.01", "name": "bludgeon"}, + {"id": 5889, "synset": "blue.n.02", "name": "blue"}, + {"id": 5890, "synset": "blue_chip.n.02", "name": "blue_chip"}, + {"id": 5891, "synset": "blunderbuss.n.01", "name": "blunderbuss"}, + {"id": 5892, "synset": "blunt_file.n.01", "name": "blunt_file"}, + {"id": 5893, "synset": "boarding.n.02", "name": "boarding"}, + {"id": 5894, "synset": "boarding_house.n.01", "name": "boarding_house"}, + {"id": 5895, "synset": "boardroom.n.01", "name": "boardroom"}, + {"id": 5896, "synset": "boards.n.02", "name": "boards"}, + {"id": 5897, "synset": "boater.n.01", "name": "boater"}, + {"id": 5898, "synset": "boat_hook.n.01", "name": "boat_hook"}, + {"id": 5899, "synset": "boathouse.n.01", "name": "boathouse"}, + {"id": 5900, "synset": "boatswain's_chair.n.01", "name": "boatswain's_chair"}, + {"id": 5901, "synset": "boat_train.n.01", "name": "boat_train"}, + {"id": 5902, "synset": "boatyard.n.01", "name": "boatyard"}, + {"id": 5903, "synset": "bobsled.n.02", "name": "bobsled"}, + {"id": 5904, "synset": "bobsled.n.01", "name": "bobsled"}, + {"id": 5905, "synset": "bocce_ball.n.01", "name": "bocce_ball"}, + {"id": 5906, "synset": "bodega.n.01", "name": "bodega"}, + {"id": 5907, "synset": "bodice.n.01", "name": "bodice"}, + {"id": 5908, "synset": "bodkin.n.04", "name": "bodkin"}, + {"id": 5909, "synset": "bodkin.n.03", "name": "bodkin"}, + {"id": 5910, "synset": "bodkin.n.02", "name": "bodkin"}, + {"id": 5911, "synset": "body.n.11", "name": "body"}, + {"id": 5912, "synset": "body_armor.n.01", "name": "body_armor"}, + {"id": 5913, "synset": "body_lotion.n.01", "name": "body_lotion"}, + {"id": 5914, "synset": "body_stocking.n.01", "name": "body_stocking"}, + {"id": 5915, "synset": "body_plethysmograph.n.01", "name": "body_plethysmograph"}, + {"id": 5916, "synset": "body_pad.n.01", "name": "body_pad"}, + {"id": 5917, "synset": "bodywork.n.01", "name": "bodywork"}, + {"id": 5918, "synset": "bofors_gun.n.01", "name": "Bofors_gun"}, + {"id": 5919, "synset": "bogy.n.01", "name": "bogy"}, + {"id": 5920, "synset": "boiler.n.01", "name": "boiler"}, + { + "id": 5921, + "synset": "boiling_water_reactor.n.01", + "name": "boiling_water_reactor", + }, + {"id": 5922, "synset": "bolero.n.02", "name": "bolero"}, + {"id": 5923, "synset": "bollard.n.01", "name": "bollard"}, + {"id": 5924, "synset": "bolo.n.02", "name": "bolo"}, + {"id": 5925, "synset": "bolt.n.02", "name": "bolt"}, + {"id": 5926, "synset": "bolt_cutter.n.01", "name": "bolt_cutter"}, + {"id": 5927, "synset": "bomb.n.01", "name": "bomb"}, + {"id": 5928, "synset": "bombazine.n.01", "name": "bombazine"}, + {"id": 5929, "synset": "bomb_calorimeter.n.01", "name": "bomb_calorimeter"}, + {"id": 5930, "synset": "bomber.n.01", "name": "bomber"}, + {"id": 5931, "synset": "bomber_jacket.n.01", "name": "bomber_jacket"}, + {"id": 5932, "synset": "bomblet.n.01", "name": "bomblet"}, + {"id": 5933, "synset": "bomb_rack.n.01", "name": "bomb_rack"}, + {"id": 5934, "synset": "bombshell.n.03", "name": "bombshell"}, + {"id": 5935, "synset": "bomb_shelter.n.01", "name": "bomb_shelter"}, + {"id": 5936, "synset": "bone-ash_cup.n.01", "name": "bone-ash_cup"}, + {"id": 5937, "synset": "bone_china.n.01", "name": "bone_china"}, + {"id": 5938, "synset": "bones.n.01", "name": "bones"}, + {"id": 5939, "synset": "boneshaker.n.01", "name": "boneshaker"}, + {"id": 5940, "synset": "bongo.n.01", "name": "bongo"}, + {"id": 5941, "synset": "book.n.11", "name": "book"}, + {"id": 5942, "synset": "book_bag.n.01", "name": "book_bag"}, + {"id": 5943, "synset": "bookbindery.n.01", "name": "bookbindery"}, + {"id": 5944, "synset": "bookend.n.01", "name": "bookend"}, + {"id": 5945, "synset": "bookmobile.n.01", "name": "bookmobile"}, + {"id": 5946, "synset": "bookshelf.n.01", "name": "bookshelf"}, + {"id": 5947, "synset": "bookshop.n.01", "name": "bookshop"}, + {"id": 5948, "synset": "boom.n.05", "name": "boom"}, + {"id": 5949, "synset": "boomerang.n.01", "name": "boomerang"}, + {"id": 5950, "synset": "booster.n.05", "name": "booster"}, + {"id": 5951, "synset": "booster.n.04", "name": "booster"}, + {"id": 5952, "synset": "boot.n.04", "name": "boot"}, + {"id": 5953, "synset": "boot_camp.n.01", "name": "boot_camp"}, + {"id": 5954, "synset": "bootee.n.01", "name": "bootee"}, + {"id": 5955, "synset": "booth.n.02", "name": "booth"}, + {"id": 5956, "synset": "booth.n.04", "name": "booth"}, + {"id": 5957, "synset": "booth.n.01", "name": "booth"}, + {"id": 5958, "synset": "boothose.n.01", "name": "boothose"}, + {"id": 5959, "synset": "bootjack.n.01", "name": "bootjack"}, + {"id": 5960, "synset": "bootlace.n.01", "name": "bootlace"}, + {"id": 5961, "synset": "bootleg.n.02", "name": "bootleg"}, + {"id": 5962, "synset": "bootstrap.n.01", "name": "bootstrap"}, + {"id": 5963, "synset": "bore_bit.n.01", "name": "bore_bit"}, + {"id": 5964, "synset": "boron_chamber.n.01", "name": "boron_chamber"}, + {"id": 5965, "synset": "borstal.n.01", "name": "borstal"}, + {"id": 5966, "synset": "bosom.n.03", "name": "bosom"}, + {"id": 5967, "synset": "boston_rocker.n.01", "name": "Boston_rocker"}, + {"id": 5968, "synset": "bota.n.01", "name": "bota"}, + {"id": 5969, "synset": "bottle.n.03", "name": "bottle"}, + {"id": 5970, "synset": "bottle_bank.n.01", "name": "bottle_bank"}, + {"id": 5971, "synset": "bottlebrush.n.01", "name": "bottlebrush"}, + {"id": 5972, "synset": "bottlecap.n.01", "name": "bottlecap"}, + {"id": 5973, "synset": "bottling_plant.n.01", "name": "bottling_plant"}, + {"id": 5974, "synset": "bottom.n.07", "name": "bottom"}, + {"id": 5975, "synset": "boucle.n.01", "name": "boucle"}, + {"id": 5976, "synset": "boudoir.n.01", "name": "boudoir"}, + {"id": 5977, "synset": "boulle.n.01", "name": "boulle"}, + {"id": 5978, "synset": "bouncing_betty.n.01", "name": "bouncing_betty"}, + {"id": 5979, "synset": "boutique.n.01", "name": "boutique"}, + {"id": 5980, "synset": "boutonniere.n.01", "name": "boutonniere"}, + {"id": 5981, "synset": "bow.n.02", "name": "bow"}, + {"id": 5982, "synset": "bow.n.01", "name": "bow"}, + {"id": 5983, "synset": "bow_and_arrow.n.01", "name": "bow_and_arrow"}, + { + "id": 5984, + "synset": "bowed_stringed_instrument.n.01", + "name": "bowed_stringed_instrument", + }, + {"id": 5985, "synset": "bowie_knife.n.01", "name": "Bowie_knife"}, + {"id": 5986, "synset": "bowl.n.01", "name": "bowl"}, + {"id": 5987, "synset": "bowl.n.07", "name": "bowl"}, + {"id": 5988, "synset": "bowline.n.01", "name": "bowline"}, + {"id": 5989, "synset": "bowling_alley.n.01", "name": "bowling_alley"}, + {"id": 5990, "synset": "bowling_equipment.n.01", "name": "bowling_equipment"}, + {"id": 5991, "synset": "bowling_pin.n.01", "name": "bowling_pin"}, + {"id": 5992, "synset": "bowling_shoe.n.01", "name": "bowling_shoe"}, + {"id": 5993, "synset": "bowsprit.n.01", "name": "bowsprit"}, + {"id": 5994, "synset": "bowstring.n.01", "name": "bowstring"}, + {"id": 5995, "synset": "box.n.02", "name": "box"}, + {"id": 5996, "synset": "box.n.08", "name": "box"}, + {"id": 5997, "synset": "box_beam.n.01", "name": "box_beam"}, + {"id": 5998, "synset": "box_camera.n.01", "name": "box_camera"}, + {"id": 5999, "synset": "boxcar.n.01", "name": "boxcar"}, + {"id": 6000, "synset": "box_coat.n.01", "name": "box_coat"}, + {"id": 6001, "synset": "boxing_equipment.n.01", "name": "boxing_equipment"}, + {"id": 6002, "synset": "box_office.n.02", "name": "box_office"}, + {"id": 6003, "synset": "box_spring.n.01", "name": "box_spring"}, + {"id": 6004, "synset": "box_wrench.n.01", "name": "box_wrench"}, + {"id": 6005, "synset": "brace.n.09", "name": "brace"}, + {"id": 6006, "synset": "brace.n.07", "name": "brace"}, + {"id": 6007, "synset": "brace.n.01", "name": "brace"}, + {"id": 6008, "synset": "brace_and_bit.n.01", "name": "brace_and_bit"}, + {"id": 6009, "synset": "bracer.n.01", "name": "bracer"}, + {"id": 6010, "synset": "brace_wrench.n.01", "name": "brace_wrench"}, + {"id": 6011, "synset": "bracket.n.04", "name": "bracket"}, + {"id": 6012, "synset": "bradawl.n.01", "name": "bradawl"}, + {"id": 6013, "synset": "brake.n.01", "name": "brake"}, + {"id": 6014, "synset": "brake.n.05", "name": "brake"}, + {"id": 6015, "synset": "brake_band.n.01", "name": "brake_band"}, + {"id": 6016, "synset": "brake_cylinder.n.01", "name": "brake_cylinder"}, + {"id": 6017, "synset": "brake_disk.n.01", "name": "brake_disk"}, + {"id": 6018, "synset": "brake_drum.n.01", "name": "brake_drum"}, + {"id": 6019, "synset": "brake_lining.n.01", "name": "brake_lining"}, + {"id": 6020, "synset": "brake_pad.n.01", "name": "brake_pad"}, + {"id": 6021, "synset": "brake_pedal.n.01", "name": "brake_pedal"}, + {"id": 6022, "synset": "brake_shoe.n.01", "name": "brake_shoe"}, + {"id": 6023, "synset": "brake_system.n.01", "name": "brake_system"}, + {"id": 6024, "synset": "brass.n.02", "name": "brass"}, + {"id": 6025, "synset": "brass.n.05", "name": "brass"}, + {"id": 6026, "synset": "brassard.n.01", "name": "brassard"}, + {"id": 6027, "synset": "brasserie.n.01", "name": "brasserie"}, + {"id": 6028, "synset": "brassie.n.01", "name": "brassie"}, + {"id": 6029, "synset": "brass_knucks.n.01", "name": "brass_knucks"}, + {"id": 6030, "synset": "brattice.n.01", "name": "brattice"}, + {"id": 6031, "synset": "brazier.n.01", "name": "brazier"}, + {"id": 6032, "synset": "breadbasket.n.03", "name": "breadbasket"}, + {"id": 6033, "synset": "bread_knife.n.01", "name": "bread_knife"}, + {"id": 6034, "synset": "breakable.n.01", "name": "breakable"}, + {"id": 6035, "synset": "breakfast_area.n.01", "name": "breakfast_area"}, + {"id": 6036, "synset": "breakfast_table.n.01", "name": "breakfast_table"}, + {"id": 6037, "synset": "breakwater.n.01", "name": "breakwater"}, + {"id": 6038, "synset": "breast_drill.n.01", "name": "breast_drill"}, + {"id": 6039, "synset": "breast_implant.n.01", "name": "breast_implant"}, + {"id": 6040, "synset": "breastplate.n.01", "name": "breastplate"}, + {"id": 6041, "synset": "breast_pocket.n.01", "name": "breast_pocket"}, + {"id": 6042, "synset": "breathalyzer.n.01", "name": "breathalyzer"}, + {"id": 6043, "synset": "breechblock.n.01", "name": "breechblock"}, + {"id": 6044, "synset": "breeches.n.01", "name": "breeches"}, + {"id": 6045, "synset": "breeches_buoy.n.01", "name": "breeches_buoy"}, + {"id": 6046, "synset": "breechloader.n.01", "name": "breechloader"}, + {"id": 6047, "synset": "breeder_reactor.n.01", "name": "breeder_reactor"}, + {"id": 6048, "synset": "bren.n.01", "name": "Bren"}, + {"id": 6049, "synset": "brewpub.n.01", "name": "brewpub"}, + {"id": 6050, "synset": "brick.n.01", "name": "brick"}, + {"id": 6051, "synset": "brickkiln.n.01", "name": "brickkiln"}, + {"id": 6052, "synset": "bricklayer's_hammer.n.01", "name": "bricklayer's_hammer"}, + {"id": 6053, "synset": "brick_trowel.n.01", "name": "brick_trowel"}, + {"id": 6054, "synset": "brickwork.n.01", "name": "brickwork"}, + {"id": 6055, "synset": "bridge.n.01", "name": "bridge"}, + {"id": 6056, "synset": "bridge.n.08", "name": "bridge"}, + {"id": 6057, "synset": "bridle.n.01", "name": "bridle"}, + {"id": 6058, "synset": "bridle_path.n.01", "name": "bridle_path"}, + {"id": 6059, "synset": "bridoon.n.01", "name": "bridoon"}, + {"id": 6060, "synset": "briefcase_bomb.n.01", "name": "briefcase_bomb"}, + {"id": 6061, "synset": "briefcase_computer.n.01", "name": "briefcase_computer"}, + {"id": 6062, "synset": "briefs.n.01", "name": "briefs"}, + {"id": 6063, "synset": "brig.n.02", "name": "brig"}, + {"id": 6064, "synset": "brig.n.01", "name": "brig"}, + {"id": 6065, "synset": "brigandine.n.01", "name": "brigandine"}, + {"id": 6066, "synset": "brigantine.n.01", "name": "brigantine"}, + {"id": 6067, "synset": "brilliantine.n.01", "name": "brilliantine"}, + {"id": 6068, "synset": "brilliant_pebble.n.01", "name": "brilliant_pebble"}, + {"id": 6069, "synset": "brim.n.02", "name": "brim"}, + {"id": 6070, "synset": "bristle_brush.n.01", "name": "bristle_brush"}, + {"id": 6071, "synset": "britches.n.01", "name": "britches"}, + {"id": 6072, "synset": "broad_arrow.n.03", "name": "broad_arrow"}, + {"id": 6073, "synset": "broadax.n.01", "name": "broadax"}, + {"id": 6074, "synset": "brochette.n.01", "name": "brochette"}, + {"id": 6075, "synset": "broadcaster.n.02", "name": "broadcaster"}, + {"id": 6076, "synset": "broadcloth.n.02", "name": "broadcloth"}, + {"id": 6077, "synset": "broadcloth.n.01", "name": "broadcloth"}, + {"id": 6078, "synset": "broad_hatchet.n.01", "name": "broad_hatchet"}, + {"id": 6079, "synset": "broadloom.n.01", "name": "broadloom"}, + {"id": 6080, "synset": "broadside.n.03", "name": "broadside"}, + {"id": 6081, "synset": "broadsword.n.01", "name": "broadsword"}, + {"id": 6082, "synset": "brocade.n.01", "name": "brocade"}, + {"id": 6083, "synset": "brogan.n.01", "name": "brogan"}, + {"id": 6084, "synset": "broiler.n.01", "name": "broiler"}, + {"id": 6085, "synset": "broken_arch.n.01", "name": "broken_arch"}, + {"id": 6086, "synset": "bronchoscope.n.01", "name": "bronchoscope"}, + {"id": 6087, "synset": "broom_closet.n.01", "name": "broom_closet"}, + {"id": 6088, "synset": "broomstick.n.01", "name": "broomstick"}, + {"id": 6089, "synset": "brougham.n.01", "name": "brougham"}, + { + "id": 6090, + "synset": "browning_automatic_rifle.n.01", + "name": "Browning_automatic_rifle", + }, + {"id": 6091, "synset": "browning_machine_gun.n.01", "name": "Browning_machine_gun"}, + {"id": 6092, "synset": "brownstone.n.02", "name": "brownstone"}, + {"id": 6093, "synset": "brunch_coat.n.01", "name": "brunch_coat"}, + {"id": 6094, "synset": "brush.n.02", "name": "brush"}, + {"id": 6095, "synset": "brussels_carpet.n.01", "name": "Brussels_carpet"}, + {"id": 6096, "synset": "brussels_lace.n.01", "name": "Brussels_lace"}, + {"id": 6097, "synset": "bubble.n.04", "name": "bubble"}, + {"id": 6098, "synset": "bubble_chamber.n.01", "name": "bubble_chamber"}, + {"id": 6099, "synset": "bubble_jet_printer.n.01", "name": "bubble_jet_printer"}, + {"id": 6100, "synset": "buckboard.n.01", "name": "buckboard"}, + {"id": 6101, "synset": "bucket_seat.n.01", "name": "bucket_seat"}, + {"id": 6102, "synset": "bucket_shop.n.02", "name": "bucket_shop"}, + {"id": 6103, "synset": "buckle.n.01", "name": "buckle"}, + {"id": 6104, "synset": "buckram.n.01", "name": "buckram"}, + {"id": 6105, "synset": "bucksaw.n.01", "name": "bucksaw"}, + {"id": 6106, "synset": "buckskins.n.01", "name": "buckskins"}, + {"id": 6107, "synset": "buff.n.05", "name": "buff"}, + {"id": 6108, "synset": "buffer.n.05", "name": "buffer"}, + {"id": 6109, "synset": "buffer.n.04", "name": "buffer"}, + {"id": 6110, "synset": "buffet.n.01", "name": "buffet"}, + {"id": 6111, "synset": "buffing_wheel.n.01", "name": "buffing_wheel"}, + {"id": 6112, "synset": "bugle.n.01", "name": "bugle"}, + {"id": 6113, "synset": "building.n.01", "name": "building"}, + {"id": 6114, "synset": "building_complex.n.01", "name": "building_complex"}, + {"id": 6115, "synset": "bulldog_clip.n.01", "name": "bulldog_clip"}, + {"id": 6116, "synset": "bulldog_wrench.n.01", "name": "bulldog_wrench"}, + {"id": 6117, "synset": "bullet.n.01", "name": "bullet"}, + {"id": 6118, "synset": "bullion.n.02", "name": "bullion"}, + {"id": 6119, "synset": "bullnose.n.01", "name": "bullnose"}, + {"id": 6120, "synset": "bullpen.n.02", "name": "bullpen"}, + {"id": 6121, "synset": "bullpen.n.01", "name": "bullpen"}, + {"id": 6122, "synset": "bullring.n.01", "name": "bullring"}, + {"id": 6123, "synset": "bulwark.n.02", "name": "bulwark"}, + {"id": 6124, "synset": "bumboat.n.01", "name": "bumboat"}, + {"id": 6125, "synset": "bumper.n.02", "name": "bumper"}, + {"id": 6126, "synset": "bumper.n.01", "name": "bumper"}, + {"id": 6127, "synset": "bumper_car.n.01", "name": "bumper_car"}, + {"id": 6128, "synset": "bumper_guard.n.01", "name": "bumper_guard"}, + {"id": 6129, "synset": "bumper_jack.n.01", "name": "bumper_jack"}, + {"id": 6130, "synset": "bundle.n.02", "name": "bundle"}, + {"id": 6131, "synset": "bung.n.01", "name": "bung"}, + {"id": 6132, "synset": "bungalow.n.01", "name": "bungalow"}, + {"id": 6133, "synset": "bungee.n.01", "name": "bungee"}, + {"id": 6134, "synset": "bunghole.n.02", "name": "bunghole"}, + {"id": 6135, "synset": "bunk.n.03", "name": "bunk"}, + {"id": 6136, "synset": "bunk.n.01", "name": "bunk"}, + {"id": 6137, "synset": "bunker.n.01", "name": "bunker"}, + {"id": 6138, "synset": "bunker.n.03", "name": "bunker"}, + {"id": 6139, "synset": "bunker.n.02", "name": "bunker"}, + {"id": 6140, "synset": "bunsen_burner.n.01", "name": "bunsen_burner"}, + {"id": 6141, "synset": "bunting.n.01", "name": "bunting"}, + {"id": 6142, "synset": "bur.n.02", "name": "bur"}, + {"id": 6143, "synset": "burberry.n.01", "name": "Burberry"}, + {"id": 6144, "synset": "burette.n.01", "name": "burette"}, + {"id": 6145, "synset": "burglar_alarm.n.02", "name": "burglar_alarm"}, + {"id": 6146, "synset": "burial_chamber.n.01", "name": "burial_chamber"}, + {"id": 6147, "synset": "burial_garment.n.01", "name": "burial_garment"}, + {"id": 6148, "synset": "burial_mound.n.01", "name": "burial_mound"}, + {"id": 6149, "synset": "burin.n.01", "name": "burin"}, + {"id": 6150, "synset": "burqa.n.01", "name": "burqa"}, + {"id": 6151, "synset": "burlap.n.01", "name": "burlap"}, + {"id": 6152, "synset": "burn_bag.n.01", "name": "burn_bag"}, + {"id": 6153, "synset": "burner.n.01", "name": "burner"}, + {"id": 6154, "synset": "burnous.n.01", "name": "burnous"}, + {"id": 6155, "synset": "burp_gun.n.01", "name": "burp_gun"}, + {"id": 6156, "synset": "burr.n.04", "name": "burr"}, + {"id": 6157, "synset": "bushel_basket.n.01", "name": "bushel_basket"}, + {"id": 6158, "synset": "bushing.n.02", "name": "bushing"}, + {"id": 6159, "synset": "bush_jacket.n.01", "name": "bush_jacket"}, + {"id": 6160, "synset": "business_suit.n.01", "name": "business_suit"}, + {"id": 6161, "synset": "buskin.n.01", "name": "buskin"}, + {"id": 6162, "synset": "bustier.n.01", "name": "bustier"}, + {"id": 6163, "synset": "bustle.n.02", "name": "bustle"}, + {"id": 6164, "synset": "butcher_knife.n.01", "name": "butcher_knife"}, + {"id": 6165, "synset": "butcher_shop.n.01", "name": "butcher_shop"}, + {"id": 6166, "synset": "butter_dish.n.01", "name": "butter_dish"}, + {"id": 6167, "synset": "butterfly_valve.n.01", "name": "butterfly_valve"}, + {"id": 6168, "synset": "butter_knife.n.01", "name": "butter_knife"}, + {"id": 6169, "synset": "butt_hinge.n.01", "name": "butt_hinge"}, + {"id": 6170, "synset": "butt_joint.n.01", "name": "butt_joint"}, + {"id": 6171, "synset": "buttonhook.n.01", "name": "buttonhook"}, + {"id": 6172, "synset": "buttress.n.01", "name": "buttress"}, + {"id": 6173, "synset": "butt_shaft.n.01", "name": "butt_shaft"}, + {"id": 6174, "synset": "butt_weld.n.01", "name": "butt_weld"}, + {"id": 6175, "synset": "buzz_bomb.n.01", "name": "buzz_bomb"}, + {"id": 6176, "synset": "buzzer.n.02", "name": "buzzer"}, + {"id": 6177, "synset": "bvd.n.01", "name": "BVD"}, + {"id": 6178, "synset": "bypass_condenser.n.01", "name": "bypass_condenser"}, + {"id": 6179, "synset": "byway.n.01", "name": "byway"}, + {"id": 6180, "synset": "cab.n.02", "name": "cab"}, + {"id": 6181, "synset": "cab.n.01", "name": "cab"}, + {"id": 6182, "synset": "cabaret.n.01", "name": "cabaret"}, + {"id": 6183, "synset": "caber.n.01", "name": "caber"}, + {"id": 6184, "synset": "cabin.n.03", "name": "cabin"}, + {"id": 6185, "synset": "cabin.n.02", "name": "cabin"}, + {"id": 6186, "synset": "cabin_class.n.01", "name": "cabin_class"}, + {"id": 6187, "synset": "cabin_cruiser.n.01", "name": "cabin_cruiser"}, + {"id": 6188, "synset": "cabinet.n.04", "name": "cabinet"}, + {"id": 6189, "synset": "cabinetwork.n.01", "name": "cabinetwork"}, + {"id": 6190, "synset": "cabin_liner.n.01", "name": "cabin_liner"}, + {"id": 6191, "synset": "cable.n.06", "name": "cable"}, + {"id": 6192, "synset": "cable.n.02", "name": "cable"}, + {"id": 6193, "synset": "cable_car.n.01", "name": "cable_car"}, + {"id": 6194, "synset": "cache.n.03", "name": "cache"}, + {"id": 6195, "synset": "caddy.n.01", "name": "caddy"}, + {"id": 6196, "synset": "caesium_clock.n.01", "name": "caesium_clock"}, + {"id": 6197, "synset": "cafe.n.01", "name": "cafe"}, + {"id": 6198, "synset": "cafeteria.n.01", "name": "cafeteria"}, + {"id": 6199, "synset": "cafeteria_tray.n.01", "name": "cafeteria_tray"}, + {"id": 6200, "synset": "caff.n.01", "name": "caff"}, + {"id": 6201, "synset": "caftan.n.02", "name": "caftan"}, + {"id": 6202, "synset": "caftan.n.01", "name": "caftan"}, + {"id": 6203, "synset": "cage.n.01", "name": "cage"}, + {"id": 6204, "synset": "cage.n.04", "name": "cage"}, + {"id": 6205, "synset": "cagoule.n.01", "name": "cagoule"}, + {"id": 6206, "synset": "caisson.n.02", "name": "caisson"}, + {"id": 6207, "synset": "calash.n.02", "name": "calash"}, + {"id": 6208, "synset": "calceus.n.01", "name": "calceus"}, + {"id": 6209, "synset": "calcimine.n.01", "name": "calcimine"}, + {"id": 6210, "synset": "caldron.n.01", "name": "caldron"}, + {"id": 6211, "synset": "calico.n.01", "name": "calico"}, + {"id": 6212, "synset": "caliper.n.01", "name": "caliper"}, + {"id": 6213, "synset": "call-board.n.01", "name": "call-board"}, + {"id": 6214, "synset": "call_center.n.01", "name": "call_center"}, + {"id": 6215, "synset": "caller_id.n.01", "name": "caller_ID"}, + {"id": 6216, "synset": "calliope.n.02", "name": "calliope"}, + {"id": 6217, "synset": "calorimeter.n.01", "name": "calorimeter"}, + {"id": 6218, "synset": "calpac.n.01", "name": "calpac"}, + {"id": 6219, "synset": "camail.n.01", "name": "camail"}, + {"id": 6220, "synset": "camber_arch.n.01", "name": "camber_arch"}, + {"id": 6221, "synset": "cambric.n.01", "name": "cambric"}, + {"id": 6222, "synset": "camel's_hair.n.01", "name": "camel's_hair"}, + {"id": 6223, "synset": "camera_lucida.n.01", "name": "camera_lucida"}, + {"id": 6224, "synset": "camera_obscura.n.01", "name": "camera_obscura"}, + {"id": 6225, "synset": "camera_tripod.n.01", "name": "camera_tripod"}, + {"id": 6226, "synset": "camise.n.01", "name": "camise"}, + {"id": 6227, "synset": "camisole.n.02", "name": "camisole"}, + {"id": 6228, "synset": "camisole.n.01", "name": "camisole"}, + {"id": 6229, "synset": "camlet.n.02", "name": "camlet"}, + {"id": 6230, "synset": "camouflage.n.03", "name": "camouflage"}, + {"id": 6231, "synset": "camouflage.n.02", "name": "camouflage"}, + {"id": 6232, "synset": "camp.n.01", "name": "camp"}, + {"id": 6233, "synset": "camp.n.03", "name": "camp"}, + {"id": 6234, "synset": "camp.n.07", "name": "camp"}, + {"id": 6235, "synset": "campaign_hat.n.01", "name": "campaign_hat"}, + {"id": 6236, "synset": "campanile.n.01", "name": "campanile"}, + {"id": 6237, "synset": "camp_chair.n.01", "name": "camp_chair"}, + {"id": 6238, "synset": "camper_trailer.n.01", "name": "camper_trailer"}, + {"id": 6239, "synset": "campstool.n.01", "name": "campstool"}, + {"id": 6240, "synset": "camshaft.n.01", "name": "camshaft"}, + {"id": 6241, "synset": "canal.n.03", "name": "canal"}, + {"id": 6242, "synset": "canal_boat.n.01", "name": "canal_boat"}, + {"id": 6243, "synset": "candelabrum.n.01", "name": "candelabrum"}, + {"id": 6244, "synset": "candid_camera.n.01", "name": "candid_camera"}, + {"id": 6245, "synset": "candlepin.n.01", "name": "candlepin"}, + {"id": 6246, "synset": "candlesnuffer.n.01", "name": "candlesnuffer"}, + {"id": 6247, "synset": "candlewick.n.02", "name": "candlewick"}, + {"id": 6248, "synset": "candy_thermometer.n.01", "name": "candy_thermometer"}, + {"id": 6249, "synset": "cane.n.03", "name": "cane"}, + {"id": 6250, "synset": "cangue.n.01", "name": "cangue"}, + {"id": 6251, "synset": "cannery.n.01", "name": "cannery"}, + {"id": 6252, "synset": "cannikin.n.02", "name": "cannikin"}, + {"id": 6253, "synset": "cannikin.n.01", "name": "cannikin"}, + {"id": 6254, "synset": "cannon.n.01", "name": "cannon"}, + {"id": 6255, "synset": "cannon.n.04", "name": "cannon"}, + {"id": 6256, "synset": "cannon.n.03", "name": "cannon"}, + {"id": 6257, "synset": "cannon.n.02", "name": "cannon"}, + {"id": 6258, "synset": "cannonball.n.01", "name": "cannonball"}, + {"id": 6259, "synset": "canopic_jar.n.01", "name": "canopic_jar"}, + {"id": 6260, "synset": "canopy.n.03", "name": "canopy"}, + {"id": 6261, "synset": "canopy.n.02", "name": "canopy"}, + {"id": 6262, "synset": "canopy.n.01", "name": "canopy"}, + {"id": 6263, "synset": "canteen.n.05", "name": "canteen"}, + {"id": 6264, "synset": "canteen.n.04", "name": "canteen"}, + {"id": 6265, "synset": "canteen.n.03", "name": "canteen"}, + {"id": 6266, "synset": "canteen.n.02", "name": "canteen"}, + {"id": 6267, "synset": "cant_hook.n.01", "name": "cant_hook"}, + {"id": 6268, "synset": "cantilever.n.01", "name": "cantilever"}, + {"id": 6269, "synset": "cantilever_bridge.n.01", "name": "cantilever_bridge"}, + {"id": 6270, "synset": "cantle.n.01", "name": "cantle"}, + {"id": 6271, "synset": "canton_crepe.n.01", "name": "Canton_crepe"}, + {"id": 6272, "synset": "canvas.n.01", "name": "canvas"}, + {"id": 6273, "synset": "canvas.n.06", "name": "canvas"}, + {"id": 6274, "synset": "canvas_tent.n.01", "name": "canvas_tent"}, + {"id": 6275, "synset": "cap.n.04", "name": "cap"}, + {"id": 6276, "synset": "capacitor.n.01", "name": "capacitor"}, + {"id": 6277, "synset": "caparison.n.01", "name": "caparison"}, + {"id": 6278, "synset": "capital_ship.n.01", "name": "capital_ship"}, + {"id": 6279, "synset": "capitol.n.01", "name": "capitol"}, + {"id": 6280, "synset": "cap_opener.n.01", "name": "cap_opener"}, + {"id": 6281, "synset": "capote.n.02", "name": "capote"}, + {"id": 6282, "synset": "capote.n.01", "name": "capote"}, + {"id": 6283, "synset": "cap_screw.n.01", "name": "cap_screw"}, + {"id": 6284, "synset": "capstan.n.01", "name": "capstan"}, + {"id": 6285, "synset": "capstone.n.02", "name": "capstone"}, + {"id": 6286, "synset": "capsule.n.01", "name": "capsule"}, + {"id": 6287, "synset": "captain's_chair.n.01", "name": "captain's_chair"}, + {"id": 6288, "synset": "carabiner.n.01", "name": "carabiner"}, + {"id": 6289, "synset": "carafe.n.01", "name": "carafe"}, + {"id": 6290, "synset": "caravansary.n.01", "name": "caravansary"}, + {"id": 6291, "synset": "carbine.n.01", "name": "carbine"}, + {"id": 6292, "synset": "car_bomb.n.01", "name": "car_bomb"}, + {"id": 6293, "synset": "carbon_arc_lamp.n.01", "name": "carbon_arc_lamp"}, + {"id": 6294, "synset": "carboy.n.01", "name": "carboy"}, + {"id": 6295, "synset": "carburetor.n.01", "name": "carburetor"}, + {"id": 6296, "synset": "car_carrier.n.01", "name": "car_carrier"}, + {"id": 6297, "synset": "cardcase.n.01", "name": "cardcase"}, + {"id": 6298, "synset": "cardiac_monitor.n.01", "name": "cardiac_monitor"}, + {"id": 6299, "synset": "card_index.n.01", "name": "card_index"}, + {"id": 6300, "synset": "cardiograph.n.01", "name": "cardiograph"}, + {"id": 6301, "synset": "cardioid_microphone.n.01", "name": "cardioid_microphone"}, + {"id": 6302, "synset": "car_door.n.01", "name": "car_door"}, + {"id": 6303, "synset": "cardroom.n.01", "name": "cardroom"}, + {"id": 6304, "synset": "card_table.n.02", "name": "card_table"}, + {"id": 6305, "synset": "card_table.n.01", "name": "card_table"}, + {"id": 6306, "synset": "car-ferry.n.01", "name": "car-ferry"}, + {"id": 6307, "synset": "cargo_area.n.01", "name": "cargo_area"}, + {"id": 6308, "synset": "cargo_container.n.01", "name": "cargo_container"}, + {"id": 6309, "synset": "cargo_door.n.01", "name": "cargo_door"}, + {"id": 6310, "synset": "cargo_hatch.n.01", "name": "cargo_hatch"}, + {"id": 6311, "synset": "cargo_helicopter.n.01", "name": "cargo_helicopter"}, + {"id": 6312, "synset": "cargo_liner.n.01", "name": "cargo_liner"}, + {"id": 6313, "synset": "carillon.n.01", "name": "carillon"}, + {"id": 6314, "synset": "car_mirror.n.01", "name": "car_mirror"}, + {"id": 6315, "synset": "caroche.n.01", "name": "caroche"}, + {"id": 6316, "synset": "carousel.n.02", "name": "carousel"}, + {"id": 6317, "synset": "carpenter's_hammer.n.01", "name": "carpenter's_hammer"}, + {"id": 6318, "synset": "carpenter's_kit.n.01", "name": "carpenter's_kit"}, + {"id": 6319, "synset": "carpenter's_level.n.01", "name": "carpenter's_level"}, + {"id": 6320, "synset": "carpenter's_mallet.n.01", "name": "carpenter's_mallet"}, + {"id": 6321, "synset": "carpenter's_rule.n.01", "name": "carpenter's_rule"}, + {"id": 6322, "synset": "carpenter's_square.n.01", "name": "carpenter's_square"}, + {"id": 6323, "synset": "carpetbag.n.01", "name": "carpetbag"}, + {"id": 6324, "synset": "carpet_beater.n.01", "name": "carpet_beater"}, + {"id": 6325, "synset": "carpet_loom.n.01", "name": "carpet_loom"}, + {"id": 6326, "synset": "carpet_pad.n.01", "name": "carpet_pad"}, + {"id": 6327, "synset": "carpet_sweeper.n.01", "name": "carpet_sweeper"}, + {"id": 6328, "synset": "carpet_tack.n.01", "name": "carpet_tack"}, + {"id": 6329, "synset": "carport.n.01", "name": "carport"}, + {"id": 6330, "synset": "carrack.n.01", "name": "carrack"}, + {"id": 6331, "synset": "carrel.n.02", "name": "carrel"}, + {"id": 6332, "synset": "carriage.n.04", "name": "carriage"}, + {"id": 6333, "synset": "carriage_bolt.n.01", "name": "carriage_bolt"}, + {"id": 6334, "synset": "carriageway.n.01", "name": "carriageway"}, + {"id": 6335, "synset": "carriage_wrench.n.01", "name": "carriage_wrench"}, + {"id": 6336, "synset": "carrick_bend.n.01", "name": "carrick_bend"}, + {"id": 6337, "synset": "carrier.n.10", "name": "carrier"}, + {"id": 6338, "synset": "carrycot.n.01", "name": "carrycot"}, + {"id": 6339, "synset": "car_seat.n.01", "name": "car_seat"}, + {"id": 6340, "synset": "car_tire.n.01", "name": "car_tire"}, + {"id": 6341, "synset": "cartouche.n.01", "name": "cartouche"}, + {"id": 6342, "synset": "car_train.n.01", "name": "car_train"}, + {"id": 6343, "synset": "cartridge.n.01", "name": "cartridge"}, + {"id": 6344, "synset": "cartridge.n.04", "name": "cartridge"}, + {"id": 6345, "synset": "cartridge_belt.n.01", "name": "cartridge_belt"}, + {"id": 6346, "synset": "cartridge_extractor.n.01", "name": "cartridge_extractor"}, + {"id": 6347, "synset": "cartridge_fuse.n.01", "name": "cartridge_fuse"}, + {"id": 6348, "synset": "cartridge_holder.n.01", "name": "cartridge_holder"}, + {"id": 6349, "synset": "cartwheel.n.01", "name": "cartwheel"}, + {"id": 6350, "synset": "carving_fork.n.01", "name": "carving_fork"}, + {"id": 6351, "synset": "carving_knife.n.01", "name": "carving_knife"}, + {"id": 6352, "synset": "car_wheel.n.01", "name": "car_wheel"}, + {"id": 6353, "synset": "caryatid.n.01", "name": "caryatid"}, + {"id": 6354, "synset": "cascade_liquefier.n.01", "name": "cascade_liquefier"}, + {"id": 6355, "synset": "cascade_transformer.n.01", "name": "cascade_transformer"}, + {"id": 6356, "synset": "case.n.05", "name": "case"}, + {"id": 6357, "synset": "case.n.20", "name": "case"}, + {"id": 6358, "synset": "case.n.18", "name": "case"}, + {"id": 6359, "synset": "casein_paint.n.01", "name": "casein_paint"}, + {"id": 6360, "synset": "case_knife.n.02", "name": "case_knife"}, + {"id": 6361, "synset": "case_knife.n.01", "name": "case_knife"}, + {"id": 6362, "synset": "casement.n.01", "name": "casement"}, + {"id": 6363, "synset": "casement_window.n.01", "name": "casement_window"}, + {"id": 6364, "synset": "casern.n.01", "name": "casern"}, + {"id": 6365, "synset": "case_shot.n.01", "name": "case_shot"}, + {"id": 6366, "synset": "cash_bar.n.01", "name": "cash_bar"}, + {"id": 6367, "synset": "cashbox.n.01", "name": "cashbox"}, + {"id": 6368, "synset": "cash_machine.n.01", "name": "cash_machine"}, + {"id": 6369, "synset": "cashmere.n.01", "name": "cashmere"}, + {"id": 6370, "synset": "casing.n.03", "name": "casing"}, + {"id": 6371, "synset": "casino.n.01", "name": "casino"}, + {"id": 6372, "synset": "casket.n.02", "name": "casket"}, + {"id": 6373, "synset": "casque.n.01", "name": "casque"}, + {"id": 6374, "synset": "casquet.n.01", "name": "casquet"}, + { + "id": 6375, + "synset": "cassegrainian_telescope.n.01", + "name": "Cassegrainian_telescope", + }, + {"id": 6376, "synset": "casserole.n.02", "name": "casserole"}, + {"id": 6377, "synset": "cassette_deck.n.01", "name": "cassette_deck"}, + {"id": 6378, "synset": "cassette_player.n.01", "name": "cassette_player"}, + {"id": 6379, "synset": "cassette_recorder.n.01", "name": "cassette_recorder"}, + {"id": 6380, "synset": "cassette_tape.n.01", "name": "cassette_tape"}, + {"id": 6381, "synset": "cassock.n.01", "name": "cassock"}, + {"id": 6382, "synset": "caster.n.03", "name": "caster"}, + {"id": 6383, "synset": "caster.n.02", "name": "caster"}, + {"id": 6384, "synset": "castle.n.02", "name": "castle"}, + {"id": 6385, "synset": "castle.n.03", "name": "castle"}, + {"id": 6386, "synset": "catacomb.n.01", "name": "catacomb"}, + {"id": 6387, "synset": "catafalque.n.01", "name": "catafalque"}, + {"id": 6388, "synset": "catalytic_converter.n.01", "name": "catalytic_converter"}, + {"id": 6389, "synset": "catalytic_cracker.n.01", "name": "catalytic_cracker"}, + {"id": 6390, "synset": "catamaran.n.01", "name": "catamaran"}, + {"id": 6391, "synset": "catapult.n.03", "name": "catapult"}, + {"id": 6392, "synset": "catapult.n.02", "name": "catapult"}, + {"id": 6393, "synset": "catboat.n.01", "name": "catboat"}, + {"id": 6394, "synset": "cat_box.n.01", "name": "cat_box"}, + {"id": 6395, "synset": "catch.n.07", "name": "catch"}, + {"id": 6396, "synset": "catchall.n.01", "name": "catchall"}, + {"id": 6397, "synset": "catcher's_mask.n.01", "name": "catcher's_mask"}, + {"id": 6398, "synset": "catchment.n.01", "name": "catchment"}, + {"id": 6399, "synset": "caterpillar.n.02", "name": "Caterpillar"}, + {"id": 6400, "synset": "cathedra.n.01", "name": "cathedra"}, + {"id": 6401, "synset": "cathedral.n.01", "name": "cathedral"}, + {"id": 6402, "synset": "cathedral.n.02", "name": "cathedral"}, + {"id": 6403, "synset": "catheter.n.01", "name": "catheter"}, + {"id": 6404, "synset": "cathode.n.01", "name": "cathode"}, + {"id": 6405, "synset": "cathode-ray_tube.n.01", "name": "cathode-ray_tube"}, + {"id": 6406, "synset": "cat-o'-nine-tails.n.01", "name": "cat-o'-nine-tails"}, + {"id": 6407, "synset": "cat's-paw.n.02", "name": "cat's-paw"}, + {"id": 6408, "synset": "catsup_bottle.n.01", "name": "catsup_bottle"}, + {"id": 6409, "synset": "cattle_car.n.01", "name": "cattle_car"}, + {"id": 6410, "synset": "cattle_guard.n.01", "name": "cattle_guard"}, + {"id": 6411, "synset": "cattleship.n.01", "name": "cattleship"}, + {"id": 6412, "synset": "cautery.n.01", "name": "cautery"}, + {"id": 6413, "synset": "cavalier_hat.n.01", "name": "cavalier_hat"}, + {"id": 6414, "synset": "cavalry_sword.n.01", "name": "cavalry_sword"}, + {"id": 6415, "synset": "cavetto.n.01", "name": "cavetto"}, + {"id": 6416, "synset": "cavity_wall.n.01", "name": "cavity_wall"}, + {"id": 6417, "synset": "c_battery.n.01", "name": "C_battery"}, + {"id": 6418, "synset": "c-clamp.n.01", "name": "C-clamp"}, + {"id": 6419, "synset": "cd_drive.n.01", "name": "CD_drive"}, + {"id": 6420, "synset": "cd-r.n.01", "name": "CD-R"}, + {"id": 6421, "synset": "cd-rom.n.01", "name": "CD-ROM"}, + {"id": 6422, "synset": "cd-rom_drive.n.01", "name": "CD-ROM_drive"}, + {"id": 6423, "synset": "cedar_chest.n.01", "name": "cedar_chest"}, + {"id": 6424, "synset": "ceiling.n.01", "name": "ceiling"}, + {"id": 6425, "synset": "celesta.n.01", "name": "celesta"}, + {"id": 6426, "synset": "cell.n.03", "name": "cell"}, + {"id": 6427, "synset": "cell.n.07", "name": "cell"}, + {"id": 6428, "synset": "cellar.n.03", "name": "cellar"}, + {"id": 6429, "synset": "cellblock.n.01", "name": "cellblock"}, + {"id": 6430, "synset": "cello.n.01", "name": "cello"}, + {"id": 6431, "synset": "cellophane.n.01", "name": "cellophane"}, + {"id": 6432, "synset": "cellulose_tape.n.01", "name": "cellulose_tape"}, + {"id": 6433, "synset": "cenotaph.n.01", "name": "cenotaph"}, + {"id": 6434, "synset": "censer.n.01", "name": "censer"}, + {"id": 6435, "synset": "center.n.03", "name": "center"}, + {"id": 6436, "synset": "center_punch.n.01", "name": "center_punch"}, + { + "id": 6437, + "synset": "centigrade_thermometer.n.01", + "name": "Centigrade_thermometer", + }, + { + "id": 6438, + "synset": "central_processing_unit.n.01", + "name": "central_processing_unit", + }, + {"id": 6439, "synset": "centrifugal_pump.n.01", "name": "centrifugal_pump"}, + {"id": 6440, "synset": "centrifuge.n.01", "name": "centrifuge"}, + {"id": 6441, "synset": "ceramic.n.01", "name": "ceramic"}, + {"id": 6442, "synset": "ceramic_ware.n.01", "name": "ceramic_ware"}, + {"id": 6443, "synset": "cereal_bowl.n.01", "name": "cereal_bowl"}, + {"id": 6444, "synset": "cereal_box.n.01", "name": "cereal_box"}, + {"id": 6445, "synset": "cerecloth.n.01", "name": "cerecloth"}, + {"id": 6446, "synset": "cesspool.n.01", "name": "cesspool"}, + {"id": 6447, "synset": "chachka.n.02", "name": "chachka"}, + {"id": 6448, "synset": "chador.n.01", "name": "chador"}, + {"id": 6449, "synset": "chafing_dish.n.01", "name": "chafing_dish"}, + {"id": 6450, "synset": "chain.n.03", "name": "chain"}, + {"id": 6451, "synset": "chain.n.05", "name": "chain"}, + {"id": 6452, "synset": "chainlink_fence.n.01", "name": "chainlink_fence"}, + {"id": 6453, "synset": "chain_printer.n.01", "name": "chain_printer"}, + {"id": 6454, "synset": "chain_saw.n.01", "name": "chain_saw"}, + {"id": 6455, "synset": "chain_store.n.01", "name": "chain_store"}, + {"id": 6456, "synset": "chain_tongs.n.01", "name": "chain_tongs"}, + {"id": 6457, "synset": "chain_wrench.n.01", "name": "chain_wrench"}, + {"id": 6458, "synset": "chair.n.05", "name": "chair"}, + {"id": 6459, "synset": "chair_of_state.n.01", "name": "chair_of_state"}, + {"id": 6460, "synset": "chairlift.n.01", "name": "chairlift"}, + {"id": 6461, "synset": "chaise.n.02", "name": "chaise"}, + {"id": 6462, "synset": "chalet.n.01", "name": "chalet"}, + {"id": 6463, "synset": "chalk.n.04", "name": "chalk"}, + {"id": 6464, "synset": "challis.n.01", "name": "challis"}, + {"id": 6465, "synset": "chamberpot.n.01", "name": "chamberpot"}, + {"id": 6466, "synset": "chambray.n.01", "name": "chambray"}, + {"id": 6467, "synset": "chamfer_bit.n.01", "name": "chamfer_bit"}, + {"id": 6468, "synset": "chamfer_plane.n.01", "name": "chamfer_plane"}, + {"id": 6469, "synset": "chamois_cloth.n.01", "name": "chamois_cloth"}, + {"id": 6470, "synset": "chancel.n.01", "name": "chancel"}, + {"id": 6471, "synset": "chancellery.n.01", "name": "chancellery"}, + {"id": 6472, "synset": "chancery.n.02", "name": "chancery"}, + {"id": 6473, "synset": "chandlery.n.01", "name": "chandlery"}, + {"id": 6474, "synset": "chanfron.n.01", "name": "chanfron"}, + {"id": 6475, "synset": "chanter.n.01", "name": "chanter"}, + {"id": 6476, "synset": "chantry.n.02", "name": "chantry"}, + {"id": 6477, "synset": "chapel.n.01", "name": "chapel"}, + {"id": 6478, "synset": "chapterhouse.n.02", "name": "chapterhouse"}, + {"id": 6479, "synset": "chapterhouse.n.01", "name": "chapterhouse"}, + {"id": 6480, "synset": "character_printer.n.01", "name": "character_printer"}, + {"id": 6481, "synset": "charcuterie.n.01", "name": "charcuterie"}, + { + "id": 6482, + "synset": "charge-exchange_accelerator.n.01", + "name": "charge-exchange_accelerator", + }, + {"id": 6483, "synset": "charger.n.02", "name": "charger"}, + {"id": 6484, "synset": "chariot.n.01", "name": "chariot"}, + {"id": 6485, "synset": "chariot.n.02", "name": "chariot"}, + {"id": 6486, "synset": "charnel_house.n.01", "name": "charnel_house"}, + {"id": 6487, "synset": "chassis.n.03", "name": "chassis"}, + {"id": 6488, "synset": "chassis.n.02", "name": "chassis"}, + {"id": 6489, "synset": "chasuble.n.01", "name": "chasuble"}, + {"id": 6490, "synset": "chateau.n.01", "name": "chateau"}, + {"id": 6491, "synset": "chatelaine.n.02", "name": "chatelaine"}, + {"id": 6492, "synset": "checker.n.03", "name": "checker"}, + {"id": 6493, "synset": "checkout.n.03", "name": "checkout"}, + {"id": 6494, "synset": "cheekpiece.n.01", "name": "cheekpiece"}, + {"id": 6495, "synset": "cheeseboard.n.01", "name": "cheeseboard"}, + {"id": 6496, "synset": "cheesecloth.n.01", "name": "cheesecloth"}, + {"id": 6497, "synset": "cheese_cutter.n.01", "name": "cheese_cutter"}, + {"id": 6498, "synset": "cheese_press.n.01", "name": "cheese_press"}, + {"id": 6499, "synset": "chemical_bomb.n.01", "name": "chemical_bomb"}, + {"id": 6500, "synset": "chemical_plant.n.01", "name": "chemical_plant"}, + {"id": 6501, "synset": "chemical_reactor.n.01", "name": "chemical_reactor"}, + {"id": 6502, "synset": "chemise.n.02", "name": "chemise"}, + {"id": 6503, "synset": "chemise.n.01", "name": "chemise"}, + {"id": 6504, "synset": "chenille.n.02", "name": "chenille"}, + {"id": 6505, "synset": "chessman.n.01", "name": "chessman"}, + {"id": 6506, "synset": "chest.n.02", "name": "chest"}, + {"id": 6507, "synset": "chesterfield.n.02", "name": "chesterfield"}, + {"id": 6508, "synset": "chest_of_drawers.n.01", "name": "chest_of_drawers"}, + {"id": 6509, "synset": "chest_protector.n.01", "name": "chest_protector"}, + {"id": 6510, "synset": "cheval-de-frise.n.01", "name": "cheval-de-frise"}, + {"id": 6511, "synset": "cheval_glass.n.01", "name": "cheval_glass"}, + {"id": 6512, "synset": "chicane.n.02", "name": "chicane"}, + {"id": 6513, "synset": "chicken_coop.n.01", "name": "chicken_coop"}, + {"id": 6514, "synset": "chicken_wire.n.01", "name": "chicken_wire"}, + {"id": 6515, "synset": "chicken_yard.n.01", "name": "chicken_yard"}, + {"id": 6516, "synset": "chiffon.n.01", "name": "chiffon"}, + {"id": 6517, "synset": "chiffonier.n.01", "name": "chiffonier"}, + {"id": 6518, "synset": "child's_room.n.01", "name": "child's_room"}, + {"id": 6519, "synset": "chimney_breast.n.01", "name": "chimney_breast"}, + {"id": 6520, "synset": "chimney_corner.n.01", "name": "chimney_corner"}, + {"id": 6521, "synset": "china.n.02", "name": "china"}, + {"id": 6522, "synset": "china_cabinet.n.01", "name": "china_cabinet"}, + {"id": 6523, "synset": "chinchilla.n.02", "name": "chinchilla"}, + {"id": 6524, "synset": "chinese_lantern.n.01", "name": "Chinese_lantern"}, + {"id": 6525, "synset": "chinese_puzzle.n.01", "name": "Chinese_puzzle"}, + {"id": 6526, "synset": "chinning_bar.n.01", "name": "chinning_bar"}, + {"id": 6527, "synset": "chino.n.02", "name": "chino"}, + {"id": 6528, "synset": "chino.n.01", "name": "chino"}, + {"id": 6529, "synset": "chin_rest.n.01", "name": "chin_rest"}, + {"id": 6530, "synset": "chin_strap.n.01", "name": "chin_strap"}, + {"id": 6531, "synset": "chintz.n.01", "name": "chintz"}, + {"id": 6532, "synset": "chip.n.07", "name": "chip"}, + {"id": 6533, "synset": "chisel.n.01", "name": "chisel"}, + {"id": 6534, "synset": "chlamys.n.02", "name": "chlamys"}, + {"id": 6535, "synset": "choir.n.03", "name": "choir"}, + {"id": 6536, "synset": "choir_loft.n.01", "name": "choir_loft"}, + {"id": 6537, "synset": "choke.n.02", "name": "choke"}, + {"id": 6538, "synset": "choke.n.01", "name": "choke"}, + {"id": 6539, "synset": "chokey.n.01", "name": "chokey"}, + {"id": 6540, "synset": "choo-choo.n.01", "name": "choo-choo"}, + {"id": 6541, "synset": "chopine.n.01", "name": "chopine"}, + {"id": 6542, "synset": "chordophone.n.01", "name": "chordophone"}, + {"id": 6543, "synset": "christmas_stocking.n.01", "name": "Christmas_stocking"}, + {"id": 6544, "synset": "chronograph.n.01", "name": "chronograph"}, + {"id": 6545, "synset": "chronometer.n.01", "name": "chronometer"}, + {"id": 6546, "synset": "chronoscope.n.01", "name": "chronoscope"}, + {"id": 6547, "synset": "chuck.n.03", "name": "chuck"}, + {"id": 6548, "synset": "chuck_wagon.n.01", "name": "chuck_wagon"}, + {"id": 6549, "synset": "chukka.n.02", "name": "chukka"}, + {"id": 6550, "synset": "church.n.02", "name": "church"}, + {"id": 6551, "synset": "church_bell.n.01", "name": "church_bell"}, + {"id": 6552, "synset": "church_hat.n.01", "name": "church_hat"}, + {"id": 6553, "synset": "church_key.n.01", "name": "church_key"}, + {"id": 6554, "synset": "church_tower.n.01", "name": "church_tower"}, + {"id": 6555, "synset": "churidars.n.01", "name": "churidars"}, + {"id": 6556, "synset": "churn.n.01", "name": "churn"}, + {"id": 6557, "synset": "ciderpress.n.01", "name": "ciderpress"}, + {"id": 6558, "synset": "cigar_band.n.01", "name": "cigar_band"}, + {"id": 6559, "synset": "cigar_cutter.n.01", "name": "cigar_cutter"}, + {"id": 6560, "synset": "cigarette_butt.n.01", "name": "cigarette_butt"}, + {"id": 6561, "synset": "cigarette_holder.n.01", "name": "cigarette_holder"}, + {"id": 6562, "synset": "cigar_lighter.n.01", "name": "cigar_lighter"}, + {"id": 6563, "synset": "cinch.n.02", "name": "cinch"}, + {"id": 6564, "synset": "cinema.n.02", "name": "cinema"}, + {"id": 6565, "synset": "cinquefoil.n.02", "name": "cinquefoil"}, + {"id": 6566, "synset": "circle.n.08", "name": "circle"}, + {"id": 6567, "synset": "circlet.n.02", "name": "circlet"}, + {"id": 6568, "synset": "circuit.n.01", "name": "circuit"}, + {"id": 6569, "synset": "circuit_board.n.01", "name": "circuit_board"}, + {"id": 6570, "synset": "circuit_breaker.n.01", "name": "circuit_breaker"}, + {"id": 6571, "synset": "circuitry.n.01", "name": "circuitry"}, + {"id": 6572, "synset": "circular_plane.n.01", "name": "circular_plane"}, + {"id": 6573, "synset": "circular_saw.n.01", "name": "circular_saw"}, + {"id": 6574, "synset": "circus_tent.n.01", "name": "circus_tent"}, + {"id": 6575, "synset": "cistern.n.03", "name": "cistern"}, + {"id": 6576, "synset": "cittern.n.01", "name": "cittern"}, + {"id": 6577, "synset": "city_hall.n.01", "name": "city_hall"}, + {"id": 6578, "synset": "cityscape.n.02", "name": "cityscape"}, + {"id": 6579, "synset": "city_university.n.01", "name": "city_university"}, + {"id": 6580, "synset": "civies.n.01", "name": "civies"}, + {"id": 6581, "synset": "civilian_clothing.n.01", "name": "civilian_clothing"}, + {"id": 6582, "synset": "clack_valve.n.01", "name": "clack_valve"}, + {"id": 6583, "synset": "clamp.n.01", "name": "clamp"}, + {"id": 6584, "synset": "clamshell.n.02", "name": "clamshell"}, + {"id": 6585, "synset": "clapper.n.03", "name": "clapper"}, + {"id": 6586, "synset": "clapperboard.n.01", "name": "clapperboard"}, + {"id": 6587, "synset": "clarence.n.01", "name": "clarence"}, + {"id": 6588, "synset": "clark_cell.n.01", "name": "Clark_cell"}, + {"id": 6589, "synset": "clasp_knife.n.01", "name": "clasp_knife"}, + {"id": 6590, "synset": "classroom.n.01", "name": "classroom"}, + {"id": 6591, "synset": "clavichord.n.01", "name": "clavichord"}, + {"id": 6592, "synset": "clavier.n.02", "name": "clavier"}, + {"id": 6593, "synset": "clay_pigeon.n.01", "name": "clay_pigeon"}, + {"id": 6594, "synset": "claymore_mine.n.01", "name": "claymore_mine"}, + {"id": 6595, "synset": "claymore.n.01", "name": "claymore"}, + {"id": 6596, "synset": "cleaners.n.01", "name": "cleaners"}, + {"id": 6597, "synset": "cleaning_implement.n.01", "name": "cleaning_implement"}, + {"id": 6598, "synset": "cleaning_pad.n.01", "name": "cleaning_pad"}, + {"id": 6599, "synset": "clean_room.n.01", "name": "clean_room"}, + {"id": 6600, "synset": "clearway.n.01", "name": "clearway"}, + {"id": 6601, "synset": "cleat.n.01", "name": "cleat"}, + {"id": 6602, "synset": "cleats.n.01", "name": "cleats"}, + {"id": 6603, "synset": "cleaver.n.01", "name": "cleaver"}, + {"id": 6604, "synset": "clerestory.n.01", "name": "clerestory"}, + {"id": 6605, "synset": "clevis.n.01", "name": "clevis"}, + {"id": 6606, "synset": "clews.n.01", "name": "clews"}, + {"id": 6607, "synset": "cliff_dwelling.n.01", "name": "cliff_dwelling"}, + {"id": 6608, "synset": "climbing_frame.n.01", "name": "climbing_frame"}, + {"id": 6609, "synset": "clinch.n.03", "name": "clinch"}, + {"id": 6610, "synset": "clinch.n.02", "name": "clinch"}, + {"id": 6611, "synset": "clincher.n.03", "name": "clincher"}, + {"id": 6612, "synset": "clinic.n.03", "name": "clinic"}, + {"id": 6613, "synset": "clinical_thermometer.n.01", "name": "clinical_thermometer"}, + {"id": 6614, "synset": "clinker.n.02", "name": "clinker"}, + {"id": 6615, "synset": "clinometer.n.01", "name": "clinometer"}, + {"id": 6616, "synset": "clip_lead.n.01", "name": "clip_lead"}, + {"id": 6617, "synset": "clip-on.n.01", "name": "clip-on"}, + {"id": 6618, "synset": "clipper.n.04", "name": "clipper"}, + {"id": 6619, "synset": "clipper.n.02", "name": "clipper"}, + {"id": 6620, "synset": "cloak.n.01", "name": "cloak"}, + {"id": 6621, "synset": "cloakroom.n.02", "name": "cloakroom"}, + {"id": 6622, "synset": "cloche.n.02", "name": "cloche"}, + {"id": 6623, "synset": "cloche.n.01", "name": "cloche"}, + {"id": 6624, "synset": "clock_pendulum.n.01", "name": "clock_pendulum"}, + {"id": 6625, "synset": "clock_radio.n.01", "name": "clock_radio"}, + {"id": 6626, "synset": "clockwork.n.01", "name": "clockwork"}, + {"id": 6627, "synset": "clog.n.01", "name": "clog"}, + {"id": 6628, "synset": "cloisonne.n.01", "name": "cloisonne"}, + {"id": 6629, "synset": "cloister.n.02", "name": "cloister"}, + {"id": 6630, "synset": "closed_circuit.n.01", "name": "closed_circuit"}, + { + "id": 6631, + "synset": "closed-circuit_television.n.01", + "name": "closed-circuit_television", + }, + {"id": 6632, "synset": "closed_loop.n.01", "name": "closed_loop"}, + {"id": 6633, "synset": "closet.n.04", "name": "closet"}, + {"id": 6634, "synset": "closeup_lens.n.01", "name": "closeup_lens"}, + {"id": 6635, "synset": "cloth_cap.n.01", "name": "cloth_cap"}, + {"id": 6636, "synset": "cloth_covering.n.01", "name": "cloth_covering"}, + {"id": 6637, "synset": "clothesbrush.n.01", "name": "clothesbrush"}, + {"id": 6638, "synset": "clothes_closet.n.01", "name": "clothes_closet"}, + {"id": 6639, "synset": "clothes_dryer.n.01", "name": "clothes_dryer"}, + {"id": 6640, "synset": "clotheshorse.n.01", "name": "clotheshorse"}, + {"id": 6641, "synset": "clothes_tree.n.01", "name": "clothes_tree"}, + {"id": 6642, "synset": "clothing.n.01", "name": "clothing"}, + {"id": 6643, "synset": "clothing_store.n.01", "name": "clothing_store"}, + {"id": 6644, "synset": "clout_nail.n.01", "name": "clout_nail"}, + {"id": 6645, "synset": "clove_hitch.n.01", "name": "clove_hitch"}, + {"id": 6646, "synset": "club_car.n.01", "name": "club_car"}, + {"id": 6647, "synset": "clubroom.n.01", "name": "clubroom"}, + {"id": 6648, "synset": "cluster_bomb.n.01", "name": "cluster_bomb"}, + {"id": 6649, "synset": "clutch.n.07", "name": "clutch"}, + {"id": 6650, "synset": "clutch.n.06", "name": "clutch"}, + {"id": 6651, "synset": "coach.n.04", "name": "coach"}, + {"id": 6652, "synset": "coach_house.n.01", "name": "coach_house"}, + {"id": 6653, "synset": "coal_car.n.01", "name": "coal_car"}, + {"id": 6654, "synset": "coal_chute.n.01", "name": "coal_chute"}, + {"id": 6655, "synset": "coal_house.n.01", "name": "coal_house"}, + {"id": 6656, "synset": "coal_shovel.n.01", "name": "coal_shovel"}, + {"id": 6657, "synset": "coaming.n.01", "name": "coaming"}, + {"id": 6658, "synset": "coaster_brake.n.01", "name": "coaster_brake"}, + {"id": 6659, "synset": "coat_button.n.01", "name": "coat_button"}, + {"id": 6660, "synset": "coat_closet.n.01", "name": "coat_closet"}, + {"id": 6661, "synset": "coatdress.n.01", "name": "coatdress"}, + {"id": 6662, "synset": "coatee.n.01", "name": "coatee"}, + {"id": 6663, "synset": "coating.n.01", "name": "coating"}, + {"id": 6664, "synset": "coating.n.03", "name": "coating"}, + {"id": 6665, "synset": "coat_of_paint.n.01", "name": "coat_of_paint"}, + {"id": 6666, "synset": "coattail.n.01", "name": "coattail"}, + {"id": 6667, "synset": "coaxial_cable.n.01", "name": "coaxial_cable"}, + {"id": 6668, "synset": "cobweb.n.03", "name": "cobweb"}, + {"id": 6669, "synset": "cobweb.n.01", "name": "cobweb"}, + { + "id": 6670, + "synset": "cockcroft_and_walton_accelerator.n.01", + "name": "Cockcroft_and_Walton_accelerator", + }, + {"id": 6671, "synset": "cocked_hat.n.01", "name": "cocked_hat"}, + {"id": 6672, "synset": "cockhorse.n.01", "name": "cockhorse"}, + {"id": 6673, "synset": "cockleshell.n.01", "name": "cockleshell"}, + {"id": 6674, "synset": "cockpit.n.01", "name": "cockpit"}, + {"id": 6675, "synset": "cockpit.n.03", "name": "cockpit"}, + {"id": 6676, "synset": "cockpit.n.02", "name": "cockpit"}, + {"id": 6677, "synset": "cockscomb.n.03", "name": "cockscomb"}, + {"id": 6678, "synset": "cocktail_dress.n.01", "name": "cocktail_dress"}, + {"id": 6679, "synset": "cocktail_lounge.n.01", "name": "cocktail_lounge"}, + {"id": 6680, "synset": "cocktail_shaker.n.01", "name": "cocktail_shaker"}, + {"id": 6681, "synset": "cocotte.n.02", "name": "cocotte"}, + {"id": 6682, "synset": "codpiece.n.01", "name": "codpiece"}, + {"id": 6683, "synset": "coelostat.n.01", "name": "coelostat"}, + {"id": 6684, "synset": "coffee_can.n.01", "name": "coffee_can"}, + {"id": 6685, "synset": "coffee_cup.n.01", "name": "coffee_cup"}, + {"id": 6686, "synset": "coffee_filter.n.01", "name": "coffee_filter"}, + {"id": 6687, "synset": "coffee_mill.n.01", "name": "coffee_mill"}, + {"id": 6688, "synset": "coffee_mug.n.01", "name": "coffee_mug"}, + {"id": 6689, "synset": "coffee_stall.n.01", "name": "coffee_stall"}, + {"id": 6690, "synset": "coffee_urn.n.01", "name": "coffee_urn"}, + {"id": 6691, "synset": "coffer.n.02", "name": "coffer"}, + {"id": 6692, "synset": "coffey_still.n.01", "name": "Coffey_still"}, + {"id": 6693, "synset": "coffin.n.01", "name": "coffin"}, + {"id": 6694, "synset": "cog.n.02", "name": "cog"}, + {"id": 6695, "synset": "coif.n.02", "name": "coif"}, + {"id": 6696, "synset": "coil.n.01", "name": "coil"}, + {"id": 6697, "synset": "coil.n.06", "name": "coil"}, + {"id": 6698, "synset": "coil.n.03", "name": "coil"}, + {"id": 6699, "synset": "coil_spring.n.01", "name": "coil_spring"}, + {"id": 6700, "synset": "coin_box.n.01", "name": "coin_box"}, + {"id": 6701, "synset": "cold_cathode.n.01", "name": "cold_cathode"}, + {"id": 6702, "synset": "cold_chisel.n.01", "name": "cold_chisel"}, + {"id": 6703, "synset": "cold_cream.n.01", "name": "cold_cream"}, + {"id": 6704, "synset": "cold_frame.n.01", "name": "cold_frame"}, + {"id": 6705, "synset": "collar.n.01", "name": "collar"}, + {"id": 6706, "synset": "collar.n.03", "name": "collar"}, + {"id": 6707, "synset": "college.n.03", "name": "college"}, + {"id": 6708, "synset": "collet.n.02", "name": "collet"}, + {"id": 6709, "synset": "collider.n.01", "name": "collider"}, + {"id": 6710, "synset": "colliery.n.01", "name": "colliery"}, + {"id": 6711, "synset": "collimator.n.02", "name": "collimator"}, + {"id": 6712, "synset": "collimator.n.01", "name": "collimator"}, + {"id": 6713, "synset": "cologne.n.02", "name": "cologne"}, + {"id": 6714, "synset": "colonnade.n.01", "name": "colonnade"}, + {"id": 6715, "synset": "colonoscope.n.01", "name": "colonoscope"}, + {"id": 6716, "synset": "colorimeter.n.01", "name": "colorimeter"}, + {"id": 6717, "synset": "colors.n.02", "name": "colors"}, + {"id": 6718, "synset": "color_television.n.01", "name": "color_television"}, + {"id": 6719, "synset": "color_tube.n.01", "name": "color_tube"}, + {"id": 6720, "synset": "color_wash.n.01", "name": "color_wash"}, + {"id": 6721, "synset": "colt.n.02", "name": "Colt"}, + {"id": 6722, "synset": "colter.n.01", "name": "colter"}, + {"id": 6723, "synset": "columbarium.n.03", "name": "columbarium"}, + {"id": 6724, "synset": "columbarium.n.02", "name": "columbarium"}, + {"id": 6725, "synset": "column.n.07", "name": "column"}, + {"id": 6726, "synset": "column.n.06", "name": "column"}, + {"id": 6727, "synset": "comb.n.01", "name": "comb"}, + {"id": 6728, "synset": "comb.n.03", "name": "comb"}, + {"id": 6729, "synset": "comber.n.03", "name": "comber"}, + {"id": 6730, "synset": "combination_plane.n.01", "name": "combination_plane"}, + {"id": 6731, "synset": "combine.n.01", "name": "combine"}, + {"id": 6732, "synset": "command_module.n.01", "name": "command_module"}, + {"id": 6733, "synset": "commissary.n.01", "name": "commissary"}, + {"id": 6734, "synset": "commissary.n.02", "name": "commissary"}, + {"id": 6735, "synset": "commodity.n.01", "name": "commodity"}, + {"id": 6736, "synset": "common_ax.n.01", "name": "common_ax"}, + {"id": 6737, "synset": "common_room.n.01", "name": "common_room"}, + { + "id": 6738, + "synset": "communications_satellite.n.01", + "name": "communications_satellite", + }, + {"id": 6739, "synset": "communication_system.n.01", "name": "communication_system"}, + {"id": 6740, "synset": "community_center.n.01", "name": "community_center"}, + {"id": 6741, "synset": "commutator.n.01", "name": "commutator"}, + {"id": 6742, "synset": "commuter.n.01", "name": "commuter"}, + {"id": 6743, "synset": "compact.n.01", "name": "compact"}, + {"id": 6744, "synset": "compact.n.03", "name": "compact"}, + {"id": 6745, "synset": "compact_disk.n.01", "name": "compact_disk"}, + {"id": 6746, "synset": "compact-disk_burner.n.01", "name": "compact-disk_burner"}, + {"id": 6747, "synset": "companionway.n.01", "name": "companionway"}, + {"id": 6748, "synset": "compartment.n.02", "name": "compartment"}, + {"id": 6749, "synset": "compartment.n.01", "name": "compartment"}, + {"id": 6750, "synset": "compass.n.04", "name": "compass"}, + {"id": 6751, "synset": "compass_card.n.01", "name": "compass_card"}, + {"id": 6752, "synset": "compass_saw.n.01", "name": "compass_saw"}, + {"id": 6753, "synset": "compound.n.03", "name": "compound"}, + {"id": 6754, "synset": "compound_lens.n.01", "name": "compound_lens"}, + {"id": 6755, "synset": "compound_lever.n.01", "name": "compound_lever"}, + {"id": 6756, "synset": "compound_microscope.n.01", "name": "compound_microscope"}, + {"id": 6757, "synset": "compress.n.01", "name": "compress"}, + {"id": 6758, "synset": "compression_bandage.n.01", "name": "compression_bandage"}, + {"id": 6759, "synset": "compressor.n.01", "name": "compressor"}, + {"id": 6760, "synset": "computer.n.01", "name": "computer"}, + {"id": 6761, "synset": "computer_circuit.n.01", "name": "computer_circuit"}, + { + "id": 6762, + "synset": "computerized_axial_tomography_scanner.n.01", + "name": "computerized_axial_tomography_scanner", + }, + {"id": 6763, "synset": "computer_monitor.n.01", "name": "computer_monitor"}, + {"id": 6764, "synset": "computer_network.n.01", "name": "computer_network"}, + {"id": 6765, "synset": "computer_screen.n.01", "name": "computer_screen"}, + {"id": 6766, "synset": "computer_store.n.01", "name": "computer_store"}, + {"id": 6767, "synset": "computer_system.n.01", "name": "computer_system"}, + {"id": 6768, "synset": "concentration_camp.n.01", "name": "concentration_camp"}, + {"id": 6769, "synset": "concert_grand.n.01", "name": "concert_grand"}, + {"id": 6770, "synset": "concert_hall.n.01", "name": "concert_hall"}, + {"id": 6771, "synset": "concertina.n.02", "name": "concertina"}, + {"id": 6772, "synset": "concertina.n.01", "name": "concertina"}, + {"id": 6773, "synset": "concrete_mixer.n.01", "name": "concrete_mixer"}, + {"id": 6774, "synset": "condensation_pump.n.01", "name": "condensation_pump"}, + {"id": 6775, "synset": "condenser.n.04", "name": "condenser"}, + {"id": 6776, "synset": "condenser.n.03", "name": "condenser"}, + {"id": 6777, "synset": "condenser.n.02", "name": "condenser"}, + {"id": 6778, "synset": "condenser_microphone.n.01", "name": "condenser_microphone"}, + {"id": 6779, "synset": "condominium.n.02", "name": "condominium"}, + {"id": 6780, "synset": "condominium.n.01", "name": "condominium"}, + {"id": 6781, "synset": "conductor.n.04", "name": "conductor"}, + {"id": 6782, "synset": "cone_clutch.n.01", "name": "cone_clutch"}, + {"id": 6783, "synset": "confectionery.n.02", "name": "confectionery"}, + {"id": 6784, "synset": "conference_center.n.01", "name": "conference_center"}, + {"id": 6785, "synset": "conference_room.n.01", "name": "conference_room"}, + {"id": 6786, "synset": "conference_table.n.01", "name": "conference_table"}, + {"id": 6787, "synset": "confessional.n.01", "name": "confessional"}, + {"id": 6788, "synset": "conformal_projection.n.01", "name": "conformal_projection"}, + {"id": 6789, "synset": "congress_boot.n.01", "name": "congress_boot"}, + {"id": 6790, "synset": "conic_projection.n.01", "name": "conic_projection"}, + {"id": 6791, "synset": "connecting_rod.n.01", "name": "connecting_rod"}, + {"id": 6792, "synset": "connecting_room.n.01", "name": "connecting_room"}, + {"id": 6793, "synset": "connection.n.03", "name": "connection"}, + {"id": 6794, "synset": "conning_tower.n.02", "name": "conning_tower"}, + {"id": 6795, "synset": "conning_tower.n.01", "name": "conning_tower"}, + {"id": 6796, "synset": "conservatory.n.03", "name": "conservatory"}, + {"id": 6797, "synset": "conservatory.n.02", "name": "conservatory"}, + {"id": 6798, "synset": "console.n.03", "name": "console"}, + {"id": 6799, "synset": "console.n.02", "name": "console"}, + {"id": 6800, "synset": "console_table.n.01", "name": "console_table"}, + {"id": 6801, "synset": "consulate.n.01", "name": "consulate"}, + {"id": 6802, "synset": "contact.n.07", "name": "contact"}, + {"id": 6803, "synset": "contact.n.09", "name": "contact"}, + {"id": 6804, "synset": "container.n.01", "name": "container"}, + {"id": 6805, "synset": "container_ship.n.01", "name": "container_ship"}, + {"id": 6806, "synset": "containment.n.02", "name": "containment"}, + {"id": 6807, "synset": "contrabassoon.n.01", "name": "contrabassoon"}, + {"id": 6808, "synset": "control_center.n.01", "name": "control_center"}, + {"id": 6809, "synset": "control_circuit.n.01", "name": "control_circuit"}, + {"id": 6810, "synset": "control_key.n.01", "name": "control_key"}, + {"id": 6811, "synset": "control_panel.n.01", "name": "control_panel"}, + {"id": 6812, "synset": "control_rod.n.01", "name": "control_rod"}, + {"id": 6813, "synset": "control_room.n.01", "name": "control_room"}, + {"id": 6814, "synset": "control_system.n.01", "name": "control_system"}, + {"id": 6815, "synset": "control_tower.n.01", "name": "control_tower"}, + {"id": 6816, "synset": "convector.n.01", "name": "convector"}, + {"id": 6817, "synset": "convenience_store.n.01", "name": "convenience_store"}, + {"id": 6818, "synset": "convent.n.01", "name": "convent"}, + {"id": 6819, "synset": "conventicle.n.02", "name": "conventicle"}, + {"id": 6820, "synset": "converging_lens.n.01", "name": "converging_lens"}, + {"id": 6821, "synset": "converter.n.01", "name": "converter"}, + {"id": 6822, "synset": "conveyance.n.03", "name": "conveyance"}, + {"id": 6823, "synset": "conveyer_belt.n.01", "name": "conveyer_belt"}, + {"id": 6824, "synset": "cookfire.n.01", "name": "cookfire"}, + {"id": 6825, "synset": "cookhouse.n.02", "name": "cookhouse"}, + {"id": 6826, "synset": "cookie_cutter.n.01", "name": "cookie_cutter"}, + {"id": 6827, "synset": "cookie_jar.n.01", "name": "cookie_jar"}, + {"id": 6828, "synset": "cookie_sheet.n.01", "name": "cookie_sheet"}, + {"id": 6829, "synset": "cookstove.n.01", "name": "cookstove"}, + {"id": 6830, "synset": "coolant_system.n.01", "name": "coolant_system"}, + {"id": 6831, "synset": "cooling_system.n.02", "name": "cooling_system"}, + {"id": 6832, "synset": "cooling_system.n.01", "name": "cooling_system"}, + {"id": 6833, "synset": "cooling_tower.n.01", "name": "cooling_tower"}, + {"id": 6834, "synset": "coonskin_cap.n.01", "name": "coonskin_cap"}, + {"id": 6835, "synset": "cope.n.02", "name": "cope"}, + {"id": 6836, "synset": "coping_saw.n.01", "name": "coping_saw"}, + {"id": 6837, "synset": "copperware.n.01", "name": "copperware"}, + {"id": 6838, "synset": "copyholder.n.01", "name": "copyholder"}, + {"id": 6839, "synset": "coquille.n.02", "name": "coquille"}, + {"id": 6840, "synset": "coracle.n.01", "name": "coracle"}, + {"id": 6841, "synset": "corbel.n.01", "name": "corbel"}, + {"id": 6842, "synset": "corbel_arch.n.01", "name": "corbel_arch"}, + {"id": 6843, "synset": "corbel_step.n.01", "name": "corbel_step"}, + {"id": 6844, "synset": "corbie_gable.n.01", "name": "corbie_gable"}, + {"id": 6845, "synset": "cord.n.04", "name": "cord"}, + {"id": 6846, "synset": "cord.n.03", "name": "cord"}, + {"id": 6847, "synset": "cordage.n.02", "name": "cordage"}, + {"id": 6848, "synset": "cords.n.01", "name": "cords"}, + {"id": 6849, "synset": "core.n.10", "name": "core"}, + {"id": 6850, "synset": "core_bit.n.01", "name": "core_bit"}, + {"id": 6851, "synset": "core_drill.n.01", "name": "core_drill"}, + {"id": 6852, "synset": "corer.n.01", "name": "corer"}, + {"id": 6853, "synset": "corker.n.02", "name": "corker"}, + {"id": 6854, "synset": "corncrib.n.01", "name": "corncrib"}, + {"id": 6855, "synset": "corner.n.11", "name": "corner"}, + {"id": 6856, "synset": "corner.n.03", "name": "corner"}, + {"id": 6857, "synset": "corner_post.n.01", "name": "corner_post"}, + {"id": 6858, "synset": "cornice.n.03", "name": "cornice"}, + {"id": 6859, "synset": "cornice.n.02", "name": "cornice"}, + { + "id": 6860, + "synset": "correctional_institution.n.01", + "name": "correctional_institution", + }, + {"id": 6861, "synset": "corrugated_fastener.n.01", "name": "corrugated_fastener"}, + {"id": 6862, "synset": "corselet.n.01", "name": "corselet"}, + {"id": 6863, "synset": "cosmetic.n.01", "name": "cosmetic"}, + {"id": 6864, "synset": "cosmotron.n.01", "name": "cosmotron"}, + {"id": 6865, "synset": "costume.n.01", "name": "costume"}, + {"id": 6866, "synset": "costume.n.02", "name": "costume"}, + {"id": 6867, "synset": "costume.n.03", "name": "costume"}, + {"id": 6868, "synset": "cosy.n.01", "name": "cosy"}, + {"id": 6869, "synset": "cot.n.03", "name": "cot"}, + {"id": 6870, "synset": "cottage_tent.n.01", "name": "cottage_tent"}, + {"id": 6871, "synset": "cotter.n.03", "name": "cotter"}, + {"id": 6872, "synset": "cotter_pin.n.01", "name": "cotter_pin"}, + {"id": 6873, "synset": "cotton.n.02", "name": "cotton"}, + {"id": 6874, "synset": "cotton_flannel.n.01", "name": "cotton_flannel"}, + {"id": 6875, "synset": "cotton_mill.n.01", "name": "cotton_mill"}, + {"id": 6876, "synset": "couch.n.03", "name": "couch"}, + {"id": 6877, "synset": "couch.n.02", "name": "couch"}, + {"id": 6878, "synset": "couchette.n.01", "name": "couchette"}, + {"id": 6879, "synset": "coude_telescope.n.01", "name": "coude_telescope"}, + {"id": 6880, "synset": "counter.n.01", "name": "counter"}, + {"id": 6881, "synset": "counter.n.03", "name": "counter"}, + {"id": 6882, "synset": "counter.n.02", "name": "counter"}, + {"id": 6883, "synset": "counterbore.n.01", "name": "counterbore"}, + {"id": 6884, "synset": "counter_tube.n.01", "name": "counter_tube"}, + {"id": 6885, "synset": "country_house.n.01", "name": "country_house"}, + {"id": 6886, "synset": "country_store.n.01", "name": "country_store"}, + {"id": 6887, "synset": "coupe.n.01", "name": "coupe"}, + {"id": 6888, "synset": "coupling.n.02", "name": "coupling"}, + {"id": 6889, "synset": "court.n.10", "name": "court"}, + {"id": 6890, "synset": "court.n.04", "name": "court"}, + {"id": 6891, "synset": "court.n.02", "name": "court"}, + {"id": 6892, "synset": "court.n.09", "name": "court"}, + {"id": 6893, "synset": "courtelle.n.01", "name": "Courtelle"}, + {"id": 6894, "synset": "courthouse.n.02", "name": "courthouse"}, + {"id": 6895, "synset": "courthouse.n.01", "name": "courthouse"}, + {"id": 6896, "synset": "covered_bridge.n.01", "name": "covered_bridge"}, + {"id": 6897, "synset": "covered_couch.n.01", "name": "covered_couch"}, + {"id": 6898, "synset": "covered_wagon.n.01", "name": "covered_wagon"}, + {"id": 6899, "synset": "covering.n.02", "name": "covering"}, + {"id": 6900, "synset": "coverlet.n.01", "name": "coverlet"}, + {"id": 6901, "synset": "cover_plate.n.01", "name": "cover_plate"}, + {"id": 6902, "synset": "cowbarn.n.01", "name": "cowbarn"}, + {"id": 6903, "synset": "cowboy_boot.n.01", "name": "cowboy_boot"}, + {"id": 6904, "synset": "cowhide.n.03", "name": "cowhide"}, + {"id": 6905, "synset": "cowl.n.02", "name": "cowl"}, + {"id": 6906, "synset": "cow_pen.n.01", "name": "cow_pen"}, + {"id": 6907, "synset": "cpu_board.n.01", "name": "CPU_board"}, + {"id": 6908, "synset": "crackle.n.02", "name": "crackle"}, + {"id": 6909, "synset": "cradle.n.01", "name": "cradle"}, + {"id": 6910, "synset": "craft.n.02", "name": "craft"}, + {"id": 6911, "synset": "cramp.n.03", "name": "cramp"}, + {"id": 6912, "synset": "crampon.n.02", "name": "crampon"}, + {"id": 6913, "synset": "crampon.n.01", "name": "crampon"}, + {"id": 6914, "synset": "crane.n.04", "name": "crane"}, + {"id": 6915, "synset": "craniometer.n.01", "name": "craniometer"}, + {"id": 6916, "synset": "crank.n.04", "name": "crank"}, + {"id": 6917, "synset": "crankcase.n.01", "name": "crankcase"}, + {"id": 6918, "synset": "crankshaft.n.01", "name": "crankshaft"}, + {"id": 6919, "synset": "crash_barrier.n.01", "name": "crash_barrier"}, + {"id": 6920, "synset": "crash_helmet.n.01", "name": "crash_helmet"}, + {"id": 6921, "synset": "cravat.n.01", "name": "cravat"}, + {"id": 6922, "synset": "crazy_quilt.n.01", "name": "crazy_quilt"}, + {"id": 6923, "synset": "cream.n.03", "name": "cream"}, + {"id": 6924, "synset": "creche.n.01", "name": "creche"}, + {"id": 6925, "synset": "creche.n.02", "name": "creche"}, + {"id": 6926, "synset": "credenza.n.01", "name": "credenza"}, + {"id": 6927, "synset": "creel.n.01", "name": "creel"}, + {"id": 6928, "synset": "crematory.n.02", "name": "crematory"}, + {"id": 6929, "synset": "crematory.n.01", "name": "crematory"}, + {"id": 6930, "synset": "crepe.n.03", "name": "crepe"}, + {"id": 6931, "synset": "crepe_de_chine.n.01", "name": "crepe_de_Chine"}, + {"id": 6932, "synset": "crescent_wrench.n.01", "name": "crescent_wrench"}, + {"id": 6933, "synset": "cretonne.n.01", "name": "cretonne"}, + {"id": 6934, "synset": "crib.n.03", "name": "crib"}, + {"id": 6935, "synset": "cricket_ball.n.01", "name": "cricket_ball"}, + {"id": 6936, "synset": "cricket_bat.n.01", "name": "cricket_bat"}, + {"id": 6937, "synset": "cricket_equipment.n.01", "name": "cricket_equipment"}, + {"id": 6938, "synset": "cringle.n.01", "name": "cringle"}, + {"id": 6939, "synset": "crinoline.n.03", "name": "crinoline"}, + {"id": 6940, "synset": "crinoline.n.02", "name": "crinoline"}, + {"id": 6941, "synset": "crochet_needle.n.01", "name": "crochet_needle"}, + {"id": 6942, "synset": "crock_pot.n.01", "name": "Crock_Pot"}, + {"id": 6943, "synset": "crook.n.03", "name": "crook"}, + {"id": 6944, "synset": "crookes_radiometer.n.01", "name": "Crookes_radiometer"}, + {"id": 6945, "synset": "crookes_tube.n.01", "name": "Crookes_tube"}, + {"id": 6946, "synset": "croquet_ball.n.01", "name": "croquet_ball"}, + {"id": 6947, "synset": "croquet_equipment.n.01", "name": "croquet_equipment"}, + {"id": 6948, "synset": "croquet_mallet.n.01", "name": "croquet_mallet"}, + {"id": 6949, "synset": "cross.n.01", "name": "cross"}, + {"id": 6950, "synset": "crossbar.n.03", "name": "crossbar"}, + {"id": 6951, "synset": "crossbar.n.02", "name": "crossbar"}, + {"id": 6952, "synset": "crossbench.n.01", "name": "crossbench"}, + {"id": 6953, "synset": "cross_bit.n.01", "name": "cross_bit"}, + {"id": 6954, "synset": "crossbow.n.01", "name": "crossbow"}, + {"id": 6955, "synset": "crosscut_saw.n.01", "name": "crosscut_saw"}, + {"id": 6956, "synset": "crossjack.n.01", "name": "crossjack"}, + {"id": 6957, "synset": "crosspiece.n.02", "name": "crosspiece"}, + {"id": 6958, "synset": "crotchet.n.04", "name": "crotchet"}, + {"id": 6959, "synset": "croupier's_rake.n.01", "name": "croupier's_rake"}, + {"id": 6960, "synset": "crown.n.11", "name": "crown"}, + {"id": 6961, "synset": "crown_jewels.n.01", "name": "crown_jewels"}, + {"id": 6962, "synset": "crown_lens.n.01", "name": "crown_lens"}, + {"id": 6963, "synset": "crow's_nest.n.01", "name": "crow's_nest"}, + {"id": 6964, "synset": "crucible.n.01", "name": "crucible"}, + {"id": 6965, "synset": "cruet.n.01", "name": "cruet"}, + {"id": 6966, "synset": "cruet-stand.n.01", "name": "cruet-stand"}, + {"id": 6967, "synset": "cruise_control.n.01", "name": "cruise_control"}, + {"id": 6968, "synset": "cruise_missile.n.01", "name": "cruise_missile"}, + {"id": 6969, "synset": "cruiser.n.02", "name": "cruiser"}, + {"id": 6970, "synset": "crupper.n.01", "name": "crupper"}, + {"id": 6971, "synset": "cruse.n.01", "name": "cruse"}, + {"id": 6972, "synset": "crusher.n.01", "name": "crusher"}, + {"id": 6973, "synset": "cryometer.n.01", "name": "cryometer"}, + {"id": 6974, "synset": "cryoscope.n.01", "name": "cryoscope"}, + {"id": 6975, "synset": "cryostat.n.01", "name": "cryostat"}, + {"id": 6976, "synset": "crypt.n.01", "name": "crypt"}, + {"id": 6977, "synset": "crystal.n.06", "name": "crystal"}, + {"id": 6978, "synset": "crystal_detector.n.01", "name": "crystal_detector"}, + {"id": 6979, "synset": "crystal_microphone.n.01", "name": "crystal_microphone"}, + {"id": 6980, "synset": "crystal_oscillator.n.01", "name": "crystal_oscillator"}, + {"id": 6981, "synset": "crystal_set.n.01", "name": "crystal_set"}, + {"id": 6982, "synset": "cubitiere.n.01", "name": "cubitiere"}, + {"id": 6983, "synset": "cucking_stool.n.01", "name": "cucking_stool"}, + {"id": 6984, "synset": "cuckoo_clock.n.01", "name": "cuckoo_clock"}, + {"id": 6985, "synset": "cuddy.n.01", "name": "cuddy"}, + {"id": 6986, "synset": "cudgel.n.01", "name": "cudgel"}, + {"id": 6987, "synset": "cue.n.04", "name": "cue"}, + {"id": 6988, "synset": "cue_ball.n.01", "name": "cue_ball"}, + {"id": 6989, "synset": "cuff.n.01", "name": "cuff"}, + {"id": 6990, "synset": "cuirass.n.01", "name": "cuirass"}, + {"id": 6991, "synset": "cuisse.n.01", "name": "cuisse"}, + {"id": 6992, "synset": "cul.n.01", "name": "cul"}, + {"id": 6993, "synset": "culdoscope.n.01", "name": "culdoscope"}, + {"id": 6994, "synset": "cullis.n.01", "name": "cullis"}, + {"id": 6995, "synset": "culotte.n.01", "name": "culotte"}, + {"id": 6996, "synset": "cultivator.n.02", "name": "cultivator"}, + {"id": 6997, "synset": "culverin.n.02", "name": "culverin"}, + {"id": 6998, "synset": "culverin.n.01", "name": "culverin"}, + {"id": 6999, "synset": "culvert.n.01", "name": "culvert"}, + {"id": 7000, "synset": "cup_hook.n.01", "name": "cup_hook"}, + {"id": 7001, "synset": "cupola.n.02", "name": "cupola"}, + {"id": 7002, "synset": "cupola.n.01", "name": "cupola"}, + {"id": 7003, "synset": "curb.n.02", "name": "curb"}, + {"id": 7004, "synset": "curb_roof.n.01", "name": "curb_roof"}, + {"id": 7005, "synset": "curbstone.n.01", "name": "curbstone"}, + {"id": 7006, "synset": "curette.n.01", "name": "curette"}, + {"id": 7007, "synset": "currycomb.n.01", "name": "currycomb"}, + {"id": 7008, "synset": "cursor.n.01", "name": "cursor"}, + {"id": 7009, "synset": "customhouse.n.01", "name": "customhouse"}, + {"id": 7010, "synset": "cutaway.n.01", "name": "cutaway"}, + {"id": 7011, "synset": "cutlas.n.01", "name": "cutlas"}, + {"id": 7012, "synset": "cutoff.n.03", "name": "cutoff"}, + {"id": 7013, "synset": "cutout.n.01", "name": "cutout"}, + {"id": 7014, "synset": "cutter.n.06", "name": "cutter"}, + {"id": 7015, "synset": "cutter.n.05", "name": "cutter"}, + {"id": 7016, "synset": "cutting_implement.n.01", "name": "cutting_implement"}, + {"id": 7017, "synset": "cutting_room.n.01", "name": "cutting_room"}, + {"id": 7018, "synset": "cutty_stool.n.01", "name": "cutty_stool"}, + {"id": 7019, "synset": "cutwork.n.01", "name": "cutwork"}, + {"id": 7020, "synset": "cybercafe.n.01", "name": "cybercafe"}, + {"id": 7021, "synset": "cyclopean_masonry.n.01", "name": "cyclopean_masonry"}, + {"id": 7022, "synset": "cyclostyle.n.01", "name": "cyclostyle"}, + {"id": 7023, "synset": "cyclotron.n.01", "name": "cyclotron"}, + {"id": 7024, "synset": "cylinder.n.03", "name": "cylinder"}, + {"id": 7025, "synset": "cylinder_lock.n.01", "name": "cylinder_lock"}, + {"id": 7026, "synset": "dacha.n.01", "name": "dacha"}, + {"id": 7027, "synset": "dacron.n.01", "name": "Dacron"}, + {"id": 7028, "synset": "dado.n.02", "name": "dado"}, + {"id": 7029, "synset": "dado_plane.n.01", "name": "dado_plane"}, + {"id": 7030, "synset": "dairy.n.01", "name": "dairy"}, + {"id": 7031, "synset": "dais.n.01", "name": "dais"}, + {"id": 7032, "synset": "daisy_print_wheel.n.01", "name": "daisy_print_wheel"}, + {"id": 7033, "synset": "daisywheel_printer.n.01", "name": "daisywheel_printer"}, + {"id": 7034, "synset": "dam.n.01", "name": "dam"}, + {"id": 7035, "synset": "damask.n.02", "name": "damask"}, + {"id": 7036, "synset": "dampener.n.01", "name": "dampener"}, + {"id": 7037, "synset": "damper.n.02", "name": "damper"}, + {"id": 7038, "synset": "damper_block.n.01", "name": "damper_block"}, + {"id": 7039, "synset": "dark_lantern.n.01", "name": "dark_lantern"}, + {"id": 7040, "synset": "darkroom.n.01", "name": "darkroom"}, + {"id": 7041, "synset": "darning_needle.n.01", "name": "darning_needle"}, + {"id": 7042, "synset": "dart.n.02", "name": "dart"}, + {"id": 7043, "synset": "dart.n.01", "name": "dart"}, + {"id": 7044, "synset": "dashboard.n.02", "name": "dashboard"}, + {"id": 7045, "synset": "dashiki.n.01", "name": "dashiki"}, + {"id": 7046, "synset": "dash-pot.n.01", "name": "dash-pot"}, + {"id": 7047, "synset": "data_converter.n.01", "name": "data_converter"}, + {"id": 7048, "synset": "data_input_device.n.01", "name": "data_input_device"}, + {"id": 7049, "synset": "data_multiplexer.n.01", "name": "data_multiplexer"}, + {"id": 7050, "synset": "data_system.n.01", "name": "data_system"}, + {"id": 7051, "synset": "davenport.n.03", "name": "davenport"}, + {"id": 7052, "synset": "davenport.n.02", "name": "davenport"}, + {"id": 7053, "synset": "davit.n.01", "name": "davit"}, + {"id": 7054, "synset": "daybed.n.01", "name": "daybed"}, + {"id": 7055, "synset": "daybook.n.02", "name": "daybook"}, + {"id": 7056, "synset": "day_nursery.n.01", "name": "day_nursery"}, + {"id": 7057, "synset": "day_school.n.03", "name": "day_school"}, + {"id": 7058, "synset": "dead_axle.n.01", "name": "dead_axle"}, + {"id": 7059, "synset": "deadeye.n.02", "name": "deadeye"}, + {"id": 7060, "synset": "deadhead.n.02", "name": "deadhead"}, + {"id": 7061, "synset": "deanery.n.01", "name": "deanery"}, + {"id": 7062, "synset": "deathbed.n.02", "name": "deathbed"}, + {"id": 7063, "synset": "death_camp.n.01", "name": "death_camp"}, + {"id": 7064, "synset": "death_house.n.01", "name": "death_house"}, + {"id": 7065, "synset": "death_knell.n.02", "name": "death_knell"}, + {"id": 7066, "synset": "death_seat.n.01", "name": "death_seat"}, + {"id": 7067, "synset": "deck.n.02", "name": "deck"}, + {"id": 7068, "synset": "deck.n.04", "name": "deck"}, + {"id": 7069, "synset": "deck-house.n.01", "name": "deck-house"}, + {"id": 7070, "synset": "deckle.n.02", "name": "deckle"}, + {"id": 7071, "synset": "deckle_edge.n.01", "name": "deckle_edge"}, + {"id": 7072, "synset": "declinometer.n.01", "name": "declinometer"}, + {"id": 7073, "synset": "decoder.n.02", "name": "decoder"}, + {"id": 7074, "synset": "decolletage.n.01", "name": "decolletage"}, + {"id": 7075, "synset": "decoupage.n.01", "name": "decoupage"}, + { + "id": 7076, + "synset": "dedicated_file_server.n.01", + "name": "dedicated_file_server", + }, + {"id": 7077, "synset": "deep-freeze.n.01", "name": "deep-freeze"}, + {"id": 7078, "synset": "deerstalker.n.01", "name": "deerstalker"}, + {"id": 7079, "synset": "defense_system.n.01", "name": "defense_system"}, + {"id": 7080, "synset": "defensive_structure.n.01", "name": "defensive_structure"}, + {"id": 7081, "synset": "defibrillator.n.01", "name": "defibrillator"}, + {"id": 7082, "synset": "defilade.n.01", "name": "defilade"}, + {"id": 7083, "synset": "deflector.n.01", "name": "deflector"}, + {"id": 7084, "synset": "delayed_action.n.01", "name": "delayed_action"}, + {"id": 7085, "synset": "delay_line.n.01", "name": "delay_line"}, + {"id": 7086, "synset": "delft.n.01", "name": "delft"}, + {"id": 7087, "synset": "delicatessen.n.02", "name": "delicatessen"}, + {"id": 7088, "synset": "delivery_truck.n.01", "name": "delivery_truck"}, + {"id": 7089, "synset": "delta_wing.n.01", "name": "delta_wing"}, + {"id": 7090, "synset": "demijohn.n.01", "name": "demijohn"}, + {"id": 7091, "synset": "demitasse.n.02", "name": "demitasse"}, + {"id": 7092, "synset": "den.n.04", "name": "den"}, + {"id": 7093, "synset": "denim.n.02", "name": "denim"}, + {"id": 7094, "synset": "densimeter.n.01", "name": "densimeter"}, + {"id": 7095, "synset": "densitometer.n.01", "name": "densitometer"}, + {"id": 7096, "synset": "dental_appliance.n.01", "name": "dental_appliance"}, + {"id": 7097, "synset": "dental_implant.n.01", "name": "dental_implant"}, + {"id": 7098, "synset": "dentist's_drill.n.01", "name": "dentist's_drill"}, + {"id": 7099, "synset": "denture.n.01", "name": "denture"}, + {"id": 7100, "synset": "deodorant.n.01", "name": "deodorant"}, + {"id": 7101, "synset": "department_store.n.01", "name": "department_store"}, + {"id": 7102, "synset": "departure_lounge.n.01", "name": "departure_lounge"}, + {"id": 7103, "synset": "depilatory.n.02", "name": "depilatory"}, + {"id": 7104, "synset": "depressor.n.03", "name": "depressor"}, + {"id": 7105, "synset": "depth_finder.n.01", "name": "depth_finder"}, + {"id": 7106, "synset": "depth_gauge.n.01", "name": "depth_gauge"}, + {"id": 7107, "synset": "derrick.n.02", "name": "derrick"}, + {"id": 7108, "synset": "derrick.n.01", "name": "derrick"}, + {"id": 7109, "synset": "derringer.n.01", "name": "derringer"}, + {"id": 7110, "synset": "desk_phone.n.01", "name": "desk_phone"}, + {"id": 7111, "synset": "desktop_computer.n.01", "name": "desktop_computer"}, + {"id": 7112, "synset": "dessert_spoon.n.01", "name": "dessert_spoon"}, + {"id": 7113, "synset": "destroyer.n.01", "name": "destroyer"}, + {"id": 7114, "synset": "destroyer_escort.n.01", "name": "destroyer_escort"}, + {"id": 7115, "synset": "detached_house.n.01", "name": "detached_house"}, + {"id": 7116, "synset": "detector.n.01", "name": "detector"}, + {"id": 7117, "synset": "detector.n.03", "name": "detector"}, + {"id": 7118, "synset": "detention_home.n.01", "name": "detention_home"}, + {"id": 7119, "synset": "detonating_fuse.n.01", "name": "detonating_fuse"}, + {"id": 7120, "synset": "detonator.n.01", "name": "detonator"}, + {"id": 7121, "synset": "developer.n.02", "name": "developer"}, + {"id": 7122, "synset": "device.n.01", "name": "device"}, + {"id": 7123, "synset": "dewar_flask.n.01", "name": "Dewar_flask"}, + {"id": 7124, "synset": "dhoti.n.01", "name": "dhoti"}, + {"id": 7125, "synset": "dhow.n.01", "name": "dhow"}, + {"id": 7126, "synset": "dial.n.04", "name": "dial"}, + {"id": 7127, "synset": "dial.n.03", "name": "dial"}, + {"id": 7128, "synset": "dial.n.02", "name": "dial"}, + {"id": 7129, "synset": "dialog_box.n.01", "name": "dialog_box"}, + {"id": 7130, "synset": "dial_telephone.n.01", "name": "dial_telephone"}, + {"id": 7131, "synset": "dialyzer.n.01", "name": "dialyzer"}, + {"id": 7132, "synset": "diamante.n.02", "name": "diamante"}, + {"id": 7133, "synset": "diaper.n.02", "name": "diaper"}, + {"id": 7134, "synset": "diaphone.n.01", "name": "diaphone"}, + {"id": 7135, "synset": "diaphragm.n.01", "name": "diaphragm"}, + {"id": 7136, "synset": "diaphragm.n.04", "name": "diaphragm"}, + {"id": 7137, "synset": "diathermy_machine.n.01", "name": "diathermy_machine"}, + {"id": 7138, "synset": "dibble.n.01", "name": "dibble"}, + {"id": 7139, "synset": "dice_cup.n.01", "name": "dice_cup"}, + {"id": 7140, "synset": "dicer.n.01", "name": "dicer"}, + {"id": 7141, "synset": "dickey.n.02", "name": "dickey"}, + {"id": 7142, "synset": "dickey.n.01", "name": "dickey"}, + {"id": 7143, "synset": "dictaphone.n.01", "name": "Dictaphone"}, + {"id": 7144, "synset": "die.n.03", "name": "die"}, + {"id": 7145, "synset": "diesel.n.02", "name": "diesel"}, + { + "id": 7146, + "synset": "diesel-electric_locomotive.n.01", + "name": "diesel-electric_locomotive", + }, + { + "id": 7147, + "synset": "diesel-hydraulic_locomotive.n.01", + "name": "diesel-hydraulic_locomotive", + }, + {"id": 7148, "synset": "diesel_locomotive.n.01", "name": "diesel_locomotive"}, + {"id": 7149, "synset": "diestock.n.01", "name": "diestock"}, + { + "id": 7150, + "synset": "differential_analyzer.n.01", + "name": "differential_analyzer", + }, + {"id": 7151, "synset": "differential_gear.n.01", "name": "differential_gear"}, + {"id": 7152, "synset": "diffuser.n.02", "name": "diffuser"}, + {"id": 7153, "synset": "diffuser.n.01", "name": "diffuser"}, + {"id": 7154, "synset": "digester.n.01", "name": "digester"}, + {"id": 7155, "synset": "diggings.n.02", "name": "diggings"}, + { + "id": 7156, + "synset": "digital-analog_converter.n.01", + "name": "digital-analog_converter", + }, + {"id": 7157, "synset": "digital_audiotape.n.01", "name": "digital_audiotape"}, + {"id": 7158, "synset": "digital_camera.n.01", "name": "digital_camera"}, + {"id": 7159, "synset": "digital_clock.n.01", "name": "digital_clock"}, + {"id": 7160, "synset": "digital_computer.n.01", "name": "digital_computer"}, + {"id": 7161, "synset": "digital_display.n.01", "name": "digital_display"}, + { + "id": 7162, + "synset": "digital_subscriber_line.n.01", + "name": "digital_subscriber_line", + }, + {"id": 7163, "synset": "digital_voltmeter.n.01", "name": "digital_voltmeter"}, + {"id": 7164, "synset": "digital_watch.n.01", "name": "digital_watch"}, + {"id": 7165, "synset": "digitizer.n.01", "name": "digitizer"}, + {"id": 7166, "synset": "dilator.n.03", "name": "dilator"}, + {"id": 7167, "synset": "dildo.n.01", "name": "dildo"}, + {"id": 7168, "synset": "dimity.n.01", "name": "dimity"}, + {"id": 7169, "synset": "dimmer.n.01", "name": "dimmer"}, + {"id": 7170, "synset": "diner.n.03", "name": "diner"}, + {"id": 7171, "synset": "dinette.n.01", "name": "dinette"}, + {"id": 7172, "synset": "dining_area.n.01", "name": "dining_area"}, + {"id": 7173, "synset": "dining_car.n.01", "name": "dining_car"}, + {"id": 7174, "synset": "dining-hall.n.01", "name": "dining-hall"}, + {"id": 7175, "synset": "dining_room.n.01", "name": "dining_room"}, + { + "id": 7176, + "synset": "dining-room_furniture.n.01", + "name": "dining-room_furniture", + }, + {"id": 7177, "synset": "dining-room_table.n.01", "name": "dining-room_table"}, + {"id": 7178, "synset": "dinner_bell.n.01", "name": "dinner_bell"}, + {"id": 7179, "synset": "dinner_dress.n.01", "name": "dinner_dress"}, + {"id": 7180, "synset": "dinner_napkin.n.01", "name": "dinner_napkin"}, + {"id": 7181, "synset": "dinner_pail.n.01", "name": "dinner_pail"}, + {"id": 7182, "synset": "dinner_table.n.01", "name": "dinner_table"}, + {"id": 7183, "synset": "dinner_theater.n.01", "name": "dinner_theater"}, + {"id": 7184, "synset": "diode.n.02", "name": "diode"}, + {"id": 7185, "synset": "diode.n.01", "name": "diode"}, + {"id": 7186, "synset": "dip.n.07", "name": "dip"}, + {"id": 7187, "synset": "diplomatic_building.n.01", "name": "diplomatic_building"}, + {"id": 7188, "synset": "dipole.n.02", "name": "dipole"}, + {"id": 7189, "synset": "dipper.n.01", "name": "dipper"}, + {"id": 7190, "synset": "dipstick.n.01", "name": "dipstick"}, + {"id": 7191, "synset": "dip_switch.n.01", "name": "DIP_switch"}, + {"id": 7192, "synset": "directional_antenna.n.01", "name": "directional_antenna"}, + { + "id": 7193, + "synset": "directional_microphone.n.01", + "name": "directional_microphone", + }, + {"id": 7194, "synset": "direction_finder.n.01", "name": "direction_finder"}, + {"id": 7195, "synset": "dirk.n.01", "name": "dirk"}, + {"id": 7196, "synset": "dirndl.n.02", "name": "dirndl"}, + {"id": 7197, "synset": "dirndl.n.01", "name": "dirndl"}, + {"id": 7198, "synset": "dirty_bomb.n.01", "name": "dirty_bomb"}, + {"id": 7199, "synset": "discharge_lamp.n.01", "name": "discharge_lamp"}, + {"id": 7200, "synset": "discharge_pipe.n.01", "name": "discharge_pipe"}, + {"id": 7201, "synset": "disco.n.02", "name": "disco"}, + {"id": 7202, "synset": "discount_house.n.01", "name": "discount_house"}, + {"id": 7203, "synset": "discus.n.02", "name": "discus"}, + {"id": 7204, "synset": "disguise.n.02", "name": "disguise"}, + {"id": 7205, "synset": "dishpan.n.01", "name": "dishpan"}, + {"id": 7206, "synset": "dish_rack.n.01", "name": "dish_rack"}, + {"id": 7207, "synset": "disk.n.02", "name": "disk"}, + {"id": 7208, "synset": "disk_brake.n.01", "name": "disk_brake"}, + {"id": 7209, "synset": "disk_clutch.n.01", "name": "disk_clutch"}, + {"id": 7210, "synset": "disk_controller.n.01", "name": "disk_controller"}, + {"id": 7211, "synset": "disk_drive.n.01", "name": "disk_drive"}, + {"id": 7212, "synset": "diskette.n.01", "name": "diskette"}, + {"id": 7213, "synset": "disk_harrow.n.01", "name": "disk_harrow"}, + {"id": 7214, "synset": "dispatch_case.n.01", "name": "dispatch_case"}, + {"id": 7215, "synset": "dispensary.n.01", "name": "dispensary"}, + {"id": 7216, "synset": "display.n.06", "name": "display"}, + {"id": 7217, "synset": "display_adapter.n.01", "name": "display_adapter"}, + {"id": 7218, "synset": "display_panel.n.01", "name": "display_panel"}, + {"id": 7219, "synset": "display_window.n.01", "name": "display_window"}, + {"id": 7220, "synset": "disposal.n.04", "name": "disposal"}, + {"id": 7221, "synset": "disrupting_explosive.n.01", "name": "disrupting_explosive"}, + {"id": 7222, "synset": "distaff.n.02", "name": "distaff"}, + {"id": 7223, "synset": "distillery.n.01", "name": "distillery"}, + {"id": 7224, "synset": "distributor.n.04", "name": "distributor"}, + {"id": 7225, "synset": "distributor_cam.n.01", "name": "distributor_cam"}, + {"id": 7226, "synset": "distributor_cap.n.01", "name": "distributor_cap"}, + {"id": 7227, "synset": "distributor_housing.n.01", "name": "distributor_housing"}, + {"id": 7228, "synset": "distributor_point.n.01", "name": "distributor_point"}, + {"id": 7229, "synset": "ditch.n.01", "name": "ditch"}, + {"id": 7230, "synset": "ditch_spade.n.01", "name": "ditch_spade"}, + {"id": 7231, "synset": "ditty_bag.n.01", "name": "ditty_bag"}, + {"id": 7232, "synset": "divan.n.01", "name": "divan"}, + {"id": 7233, "synset": "divan.n.04", "name": "divan"}, + {"id": 7234, "synset": "dive_bomber.n.01", "name": "dive_bomber"}, + {"id": 7235, "synset": "diverging_lens.n.01", "name": "diverging_lens"}, + {"id": 7236, "synset": "divided_highway.n.01", "name": "divided_highway"}, + {"id": 7237, "synset": "divider.n.04", "name": "divider"}, + {"id": 7238, "synset": "diving_bell.n.01", "name": "diving_bell"}, + {"id": 7239, "synset": "divining_rod.n.01", "name": "divining_rod"}, + {"id": 7240, "synset": "diving_suit.n.01", "name": "diving_suit"}, + {"id": 7241, "synset": "dixie.n.02", "name": "dixie"}, + {"id": 7242, "synset": "dock.n.05", "name": "dock"}, + {"id": 7243, "synset": "doeskin.n.02", "name": "doeskin"}, + {"id": 7244, "synset": "dogcart.n.01", "name": "dogcart"}, + {"id": 7245, "synset": "doggie_bag.n.01", "name": "doggie_bag"}, + {"id": 7246, "synset": "dogsled.n.01", "name": "dogsled"}, + {"id": 7247, "synset": "dog_wrench.n.01", "name": "dog_wrench"}, + {"id": 7248, "synset": "doily.n.01", "name": "doily"}, + {"id": 7249, "synset": "dolly.n.02", "name": "dolly"}, + {"id": 7250, "synset": "dolman.n.02", "name": "dolman"}, + {"id": 7251, "synset": "dolman.n.01", "name": "dolman"}, + {"id": 7252, "synset": "dolman_sleeve.n.01", "name": "dolman_sleeve"}, + {"id": 7253, "synset": "dolmen.n.01", "name": "dolmen"}, + {"id": 7254, "synset": "dome.n.04", "name": "dome"}, + {"id": 7255, "synset": "dome.n.03", "name": "dome"}, + {"id": 7256, "synset": "domino.n.03", "name": "domino"}, + {"id": 7257, "synset": "dongle.n.01", "name": "dongle"}, + {"id": 7258, "synset": "donkey_jacket.n.01", "name": "donkey_jacket"}, + {"id": 7259, "synset": "door.n.01", "name": "door"}, + {"id": 7260, "synset": "door.n.05", "name": "door"}, + {"id": 7261, "synset": "door.n.04", "name": "door"}, + {"id": 7262, "synset": "doorbell.n.01", "name": "doorbell"}, + {"id": 7263, "synset": "doorframe.n.01", "name": "doorframe"}, + {"id": 7264, "synset": "doorjamb.n.01", "name": "doorjamb"}, + {"id": 7265, "synset": "doorlock.n.01", "name": "doorlock"}, + {"id": 7266, "synset": "doornail.n.01", "name": "doornail"}, + {"id": 7267, "synset": "doorplate.n.01", "name": "doorplate"}, + {"id": 7268, "synset": "doorsill.n.01", "name": "doorsill"}, + {"id": 7269, "synset": "doorstop.n.01", "name": "doorstop"}, + {"id": 7270, "synset": "doppler_radar.n.01", "name": "Doppler_radar"}, + {"id": 7271, "synset": "dormer.n.01", "name": "dormer"}, + {"id": 7272, "synset": "dormer_window.n.01", "name": "dormer_window"}, + {"id": 7273, "synset": "dormitory.n.01", "name": "dormitory"}, + {"id": 7274, "synset": "dormitory.n.02", "name": "dormitory"}, + {"id": 7275, "synset": "dosemeter.n.01", "name": "dosemeter"}, + {"id": 7276, "synset": "dossal.n.01", "name": "dossal"}, + {"id": 7277, "synset": "dot_matrix_printer.n.01", "name": "dot_matrix_printer"}, + {"id": 7278, "synset": "double_bed.n.01", "name": "double_bed"}, + {"id": 7279, "synset": "double-bitted_ax.n.01", "name": "double-bitted_ax"}, + {"id": 7280, "synset": "double_boiler.n.01", "name": "double_boiler"}, + { + "id": 7281, + "synset": "double-breasted_jacket.n.01", + "name": "double-breasted_jacket", + }, + {"id": 7282, "synset": "double-breasted_suit.n.01", "name": "double-breasted_suit"}, + {"id": 7283, "synset": "double_door.n.01", "name": "double_door"}, + {"id": 7284, "synset": "double_glazing.n.01", "name": "double_glazing"}, + {"id": 7285, "synset": "double-hung_window.n.01", "name": "double-hung_window"}, + {"id": 7286, "synset": "double_knit.n.01", "name": "double_knit"}, + {"id": 7287, "synset": "doubler.n.01", "name": "doubler"}, + {"id": 7288, "synset": "double_reed.n.02", "name": "double_reed"}, + { + "id": 7289, + "synset": "double-reed_instrument.n.01", + "name": "double-reed_instrument", + }, + {"id": 7290, "synset": "doublet.n.01", "name": "doublet"}, + {"id": 7291, "synset": "doubletree.n.01", "name": "doubletree"}, + {"id": 7292, "synset": "douche.n.01", "name": "douche"}, + {"id": 7293, "synset": "dovecote.n.01", "name": "dovecote"}, + {"id": 7294, "synset": "dover's_powder.n.01", "name": "Dover's_powder"}, + {"id": 7295, "synset": "dovetail.n.01", "name": "dovetail"}, + {"id": 7296, "synset": "dovetail_plane.n.01", "name": "dovetail_plane"}, + {"id": 7297, "synset": "dowel.n.01", "name": "dowel"}, + {"id": 7298, "synset": "downstage.n.01", "name": "downstage"}, + {"id": 7299, "synset": "drafting_instrument.n.01", "name": "drafting_instrument"}, + {"id": 7300, "synset": "drafting_table.n.01", "name": "drafting_table"}, + {"id": 7301, "synset": "dragunov.n.01", "name": "Dragunov"}, + {"id": 7302, "synset": "drainage_ditch.n.01", "name": "drainage_ditch"}, + {"id": 7303, "synset": "drainage_system.n.01", "name": "drainage_system"}, + {"id": 7304, "synset": "drain_basket.n.01", "name": "drain_basket"}, + {"id": 7305, "synset": "drainplug.n.01", "name": "drainplug"}, + {"id": 7306, "synset": "drape.n.03", "name": "drape"}, + {"id": 7307, "synset": "drapery.n.02", "name": "drapery"}, + {"id": 7308, "synset": "drawbar.n.01", "name": "drawbar"}, + {"id": 7309, "synset": "drawbridge.n.01", "name": "drawbridge"}, + {"id": 7310, "synset": "drawing_chalk.n.01", "name": "drawing_chalk"}, + {"id": 7311, "synset": "drawing_room.n.01", "name": "drawing_room"}, + {"id": 7312, "synset": "drawing_room.n.02", "name": "drawing_room"}, + {"id": 7313, "synset": "drawknife.n.01", "name": "drawknife"}, + {"id": 7314, "synset": "drawstring_bag.n.01", "name": "drawstring_bag"}, + {"id": 7315, "synset": "dray.n.01", "name": "dray"}, + {"id": 7316, "synset": "dreadnought.n.01", "name": "dreadnought"}, + {"id": 7317, "synset": "dredge.n.01", "name": "dredge"}, + {"id": 7318, "synset": "dredger.n.01", "name": "dredger"}, + {"id": 7319, "synset": "dredging_bucket.n.01", "name": "dredging_bucket"}, + {"id": 7320, "synset": "dress_blues.n.01", "name": "dress_blues"}, + {"id": 7321, "synset": "dressing.n.04", "name": "dressing"}, + {"id": 7322, "synset": "dressing_case.n.01", "name": "dressing_case"}, + {"id": 7323, "synset": "dressing_gown.n.01", "name": "dressing_gown"}, + {"id": 7324, "synset": "dressing_room.n.01", "name": "dressing_room"}, + {"id": 7325, "synset": "dressing_sack.n.01", "name": "dressing_sack"}, + {"id": 7326, "synset": "dressing_table.n.01", "name": "dressing_table"}, + {"id": 7327, "synset": "dress_rack.n.01", "name": "dress_rack"}, + {"id": 7328, "synset": "dress_shirt.n.01", "name": "dress_shirt"}, + {"id": 7329, "synset": "dress_uniform.n.01", "name": "dress_uniform"}, + {"id": 7330, "synset": "drift_net.n.01", "name": "drift_net"}, + {"id": 7331, "synset": "electric_drill.n.01", "name": "electric_drill"}, + {"id": 7332, "synset": "drilling_platform.n.01", "name": "drilling_platform"}, + {"id": 7333, "synset": "drill_press.n.01", "name": "drill_press"}, + {"id": 7334, "synset": "drill_rig.n.01", "name": "drill_rig"}, + {"id": 7335, "synset": "drinking_fountain.n.01", "name": "drinking_fountain"}, + {"id": 7336, "synset": "drinking_vessel.n.01", "name": "drinking_vessel"}, + {"id": 7337, "synset": "drip_loop.n.01", "name": "drip_loop"}, + {"id": 7338, "synset": "drip_mat.n.01", "name": "drip_mat"}, + {"id": 7339, "synset": "drip_pan.n.02", "name": "drip_pan"}, + {"id": 7340, "synset": "dripping_pan.n.01", "name": "dripping_pan"}, + {"id": 7341, "synset": "drip_pot.n.01", "name": "drip_pot"}, + {"id": 7342, "synset": "drive.n.02", "name": "drive"}, + {"id": 7343, "synset": "drive.n.10", "name": "drive"}, + {"id": 7344, "synset": "drive_line.n.01", "name": "drive_line"}, + {"id": 7345, "synset": "driver.n.05", "name": "driver"}, + {"id": 7346, "synset": "driveshaft.n.01", "name": "driveshaft"}, + {"id": 7347, "synset": "driveway.n.01", "name": "driveway"}, + {"id": 7348, "synset": "driving_iron.n.01", "name": "driving_iron"}, + {"id": 7349, "synset": "driving_wheel.n.01", "name": "driving_wheel"}, + {"id": 7350, "synset": "drogue.n.04", "name": "drogue"}, + {"id": 7351, "synset": "drogue_parachute.n.01", "name": "drogue_parachute"}, + {"id": 7352, "synset": "drone.n.05", "name": "drone"}, + {"id": 7353, "synset": "drop_arch.n.01", "name": "drop_arch"}, + {"id": 7354, "synset": "drop_cloth.n.02", "name": "drop_cloth"}, + {"id": 7355, "synset": "drop_curtain.n.01", "name": "drop_curtain"}, + {"id": 7356, "synset": "drop_forge.n.01", "name": "drop_forge"}, + {"id": 7357, "synset": "drop-leaf_table.n.01", "name": "drop-leaf_table"}, + {"id": 7358, "synset": "droshky.n.01", "name": "droshky"}, + {"id": 7359, "synset": "drove.n.03", "name": "drove"}, + {"id": 7360, "synset": "drugget.n.01", "name": "drugget"}, + {"id": 7361, "synset": "drugstore.n.01", "name": "drugstore"}, + {"id": 7362, "synset": "drum.n.04", "name": "drum"}, + {"id": 7363, "synset": "drum_brake.n.01", "name": "drum_brake"}, + {"id": 7364, "synset": "drumhead.n.01", "name": "drumhead"}, + {"id": 7365, "synset": "drum_printer.n.01", "name": "drum_printer"}, + {"id": 7366, "synset": "drum_sander.n.01", "name": "drum_sander"}, + {"id": 7367, "synset": "dry_battery.n.01", "name": "dry_battery"}, + {"id": 7368, "synset": "dry-bulb_thermometer.n.01", "name": "dry-bulb_thermometer"}, + {"id": 7369, "synset": "dry_cell.n.01", "name": "dry_cell"}, + {"id": 7370, "synset": "dry_dock.n.01", "name": "dry_dock"}, + {"id": 7371, "synset": "dryer.n.01", "name": "dryer"}, + {"id": 7372, "synset": "dry_fly.n.01", "name": "dry_fly"}, + {"id": 7373, "synset": "dry_kiln.n.01", "name": "dry_kiln"}, + {"id": 7374, "synset": "dry_masonry.n.01", "name": "dry_masonry"}, + {"id": 7375, "synset": "dry_point.n.02", "name": "dry_point"}, + {"id": 7376, "synset": "dry_wall.n.02", "name": "dry_wall"}, + {"id": 7377, "synset": "dual_scan_display.n.01", "name": "dual_scan_display"}, + {"id": 7378, "synset": "duck.n.04", "name": "duck"}, + {"id": 7379, "synset": "duckboard.n.01", "name": "duckboard"}, + {"id": 7380, "synset": "duckpin.n.01", "name": "duckpin"}, + {"id": 7381, "synset": "dudeen.n.01", "name": "dudeen"}, + {"id": 7382, "synset": "duffel.n.02", "name": "duffel"}, + {"id": 7383, "synset": "duffel_coat.n.01", "name": "duffel_coat"}, + {"id": 7384, "synset": "dugout.n.01", "name": "dugout"}, + {"id": 7385, "synset": "dugout_canoe.n.01", "name": "dugout_canoe"}, + {"id": 7386, "synset": "dulciana.n.01", "name": "dulciana"}, + {"id": 7387, "synset": "dulcimer.n.02", "name": "dulcimer"}, + {"id": 7388, "synset": "dulcimer.n.01", "name": "dulcimer"}, + {"id": 7389, "synset": "dumb_bomb.n.01", "name": "dumb_bomb"}, + {"id": 7390, "synset": "dumbwaiter.n.01", "name": "dumbwaiter"}, + {"id": 7391, "synset": "dumdum.n.01", "name": "dumdum"}, + {"id": 7392, "synset": "dumpcart.n.01", "name": "dumpcart"}, + {"id": 7393, "synset": "dump_truck.n.01", "name": "dump_truck"}, + {"id": 7394, "synset": "dumpy_level.n.01", "name": "Dumpy_level"}, + {"id": 7395, "synset": "dunce_cap.n.01", "name": "dunce_cap"}, + {"id": 7396, "synset": "dune_buggy.n.01", "name": "dune_buggy"}, + {"id": 7397, "synset": "dungeon.n.02", "name": "dungeon"}, + {"id": 7398, "synset": "duplex_apartment.n.01", "name": "duplex_apartment"}, + {"id": 7399, "synset": "duplex_house.n.01", "name": "duplex_house"}, + {"id": 7400, "synset": "duplicator.n.01", "name": "duplicator"}, + {"id": 7401, "synset": "dust_bag.n.01", "name": "dust_bag"}, + {"id": 7402, "synset": "dustcloth.n.01", "name": "dustcloth"}, + {"id": 7403, "synset": "dust_cover.n.03", "name": "dust_cover"}, + {"id": 7404, "synset": "dust_cover.n.02", "name": "dust_cover"}, + {"id": 7405, "synset": "dustmop.n.01", "name": "dustmop"}, + {"id": 7406, "synset": "dutch_oven.n.01", "name": "Dutch_oven"}, + {"id": 7407, "synset": "dutch_oven.n.02", "name": "Dutch_oven"}, + {"id": 7408, "synset": "dwelling.n.01", "name": "dwelling"}, + {"id": 7409, "synset": "dye-works.n.01", "name": "dye-works"}, + {"id": 7410, "synset": "dynamo.n.01", "name": "dynamo"}, + {"id": 7411, "synset": "dynamometer.n.01", "name": "dynamometer"}, + {"id": 7412, "synset": "eames_chair.n.01", "name": "Eames_chair"}, + {"id": 7413, "synset": "earflap.n.01", "name": "earflap"}, + {"id": 7414, "synset": "early_warning_radar.n.01", "name": "early_warning_radar"}, + {"id": 7415, "synset": "early_warning_system.n.01", "name": "early_warning_system"}, + {"id": 7416, "synset": "earmuff.n.01", "name": "earmuff"}, + {"id": 7417, "synset": "earplug.n.02", "name": "earplug"}, + {"id": 7418, "synset": "earthenware.n.01", "name": "earthenware"}, + {"id": 7419, "synset": "earthwork.n.01", "name": "earthwork"}, + {"id": 7420, "synset": "easy_chair.n.01", "name": "easy_chair"}, + {"id": 7421, "synset": "eaves.n.01", "name": "eaves"}, + { + "id": 7422, + "synset": "ecclesiastical_attire.n.01", + "name": "ecclesiastical_attire", + }, + {"id": 7423, "synset": "echinus.n.01", "name": "echinus"}, + {"id": 7424, "synset": "echocardiograph.n.01", "name": "echocardiograph"}, + {"id": 7425, "synset": "edger.n.02", "name": "edger"}, + {"id": 7426, "synset": "edge_tool.n.01", "name": "edge_tool"}, + {"id": 7427, "synset": "efficiency_apartment.n.01", "name": "efficiency_apartment"}, + {"id": 7428, "synset": "egg-and-dart.n.01", "name": "egg-and-dart"}, + {"id": 7429, "synset": "egg_timer.n.01", "name": "egg_timer"}, + {"id": 7430, "synset": "eiderdown.n.01", "name": "eiderdown"}, + {"id": 7431, "synset": "eight_ball.n.01", "name": "eight_ball"}, + {"id": 7432, "synset": "ejection_seat.n.01", "name": "ejection_seat"}, + {"id": 7433, "synset": "elastic.n.02", "name": "elastic"}, + {"id": 7434, "synset": "elastic_bandage.n.01", "name": "elastic_bandage"}, + {"id": 7435, "synset": "elastoplast.n.01", "name": "Elastoplast"}, + {"id": 7436, "synset": "elbow.n.04", "name": "elbow"}, + {"id": 7437, "synset": "elbow_pad.n.01", "name": "elbow_pad"}, + {"id": 7438, "synset": "electric.n.01", "name": "electric"}, + {"id": 7439, "synset": "electrical_cable.n.01", "name": "electrical_cable"}, + {"id": 7440, "synset": "electrical_contact.n.01", "name": "electrical_contact"}, + {"id": 7441, "synset": "electrical_converter.n.01", "name": "electrical_converter"}, + {"id": 7442, "synset": "electrical_device.n.01", "name": "electrical_device"}, + {"id": 7443, "synset": "electrical_system.n.02", "name": "electrical_system"}, + {"id": 7444, "synset": "electric_bell.n.01", "name": "electric_bell"}, + {"id": 7445, "synset": "electric_blanket.n.01", "name": "electric_blanket"}, + {"id": 7446, "synset": "electric_clock.n.01", "name": "electric_clock"}, + { + "id": 7447, + "synset": "electric-discharge_lamp.n.01", + "name": "electric-discharge_lamp", + }, + {"id": 7448, "synset": "electric_fan.n.01", "name": "electric_fan"}, + {"id": 7449, "synset": "electric_frying_pan.n.01", "name": "electric_frying_pan"}, + {"id": 7450, "synset": "electric_furnace.n.01", "name": "electric_furnace"}, + {"id": 7451, "synset": "electric_guitar.n.01", "name": "electric_guitar"}, + {"id": 7452, "synset": "electric_hammer.n.01", "name": "electric_hammer"}, + {"id": 7453, "synset": "electric_heater.n.01", "name": "electric_heater"}, + {"id": 7454, "synset": "electric_lamp.n.01", "name": "electric_lamp"}, + {"id": 7455, "synset": "electric_locomotive.n.01", "name": "electric_locomotive"}, + {"id": 7456, "synset": "electric_meter.n.01", "name": "electric_meter"}, + {"id": 7457, "synset": "electric_mixer.n.01", "name": "electric_mixer"}, + {"id": 7458, "synset": "electric_motor.n.01", "name": "electric_motor"}, + {"id": 7459, "synset": "electric_organ.n.01", "name": "electric_organ"}, + {"id": 7460, "synset": "electric_range.n.01", "name": "electric_range"}, + {"id": 7461, "synset": "electric_toothbrush.n.01", "name": "electric_toothbrush"}, + {"id": 7462, "synset": "electric_typewriter.n.01", "name": "electric_typewriter"}, + { + "id": 7463, + "synset": "electro-acoustic_transducer.n.01", + "name": "electro-acoustic_transducer", + }, + {"id": 7464, "synset": "electrode.n.01", "name": "electrode"}, + {"id": 7465, "synset": "electrodynamometer.n.01", "name": "electrodynamometer"}, + { + "id": 7466, + "synset": "electroencephalograph.n.01", + "name": "electroencephalograph", + }, + {"id": 7467, "synset": "electrograph.n.01", "name": "electrograph"}, + {"id": 7468, "synset": "electrolytic.n.01", "name": "electrolytic"}, + {"id": 7469, "synset": "electrolytic_cell.n.01", "name": "electrolytic_cell"}, + {"id": 7470, "synset": "electromagnet.n.01", "name": "electromagnet"}, + {"id": 7471, "synset": "electrometer.n.01", "name": "electrometer"}, + {"id": 7472, "synset": "electromyograph.n.01", "name": "electromyograph"}, + {"id": 7473, "synset": "electron_accelerator.n.01", "name": "electron_accelerator"}, + {"id": 7474, "synset": "electron_gun.n.01", "name": "electron_gun"}, + {"id": 7475, "synset": "electronic_balance.n.01", "name": "electronic_balance"}, + {"id": 7476, "synset": "electronic_converter.n.01", "name": "electronic_converter"}, + {"id": 7477, "synset": "electronic_device.n.01", "name": "electronic_device"}, + {"id": 7478, "synset": "electronic_equipment.n.01", "name": "electronic_equipment"}, + { + "id": 7479, + "synset": "electronic_fetal_monitor.n.01", + "name": "electronic_fetal_monitor", + }, + { + "id": 7480, + "synset": "electronic_instrument.n.01", + "name": "electronic_instrument", + }, + {"id": 7481, "synset": "electronic_voltmeter.n.01", "name": "electronic_voltmeter"}, + {"id": 7482, "synset": "electron_microscope.n.01", "name": "electron_microscope"}, + {"id": 7483, "synset": "electron_multiplier.n.01", "name": "electron_multiplier"}, + {"id": 7484, "synset": "electrophorus.n.01", "name": "electrophorus"}, + {"id": 7485, "synset": "electroscope.n.01", "name": "electroscope"}, + { + "id": 7486, + "synset": "electrostatic_generator.n.01", + "name": "electrostatic_generator", + }, + { + "id": 7487, + "synset": "electrostatic_printer.n.01", + "name": "electrostatic_printer", + }, + {"id": 7488, "synset": "elevator.n.01", "name": "elevator"}, + {"id": 7489, "synset": "elevator.n.02", "name": "elevator"}, + {"id": 7490, "synset": "elevator_shaft.n.01", "name": "elevator_shaft"}, + {"id": 7491, "synset": "embankment.n.01", "name": "embankment"}, + {"id": 7492, "synset": "embassy.n.01", "name": "embassy"}, + {"id": 7493, "synset": "embellishment.n.02", "name": "embellishment"}, + {"id": 7494, "synset": "emergency_room.n.01", "name": "emergency_room"}, + {"id": 7495, "synset": "emesis_basin.n.01", "name": "emesis_basin"}, + {"id": 7496, "synset": "emitter.n.01", "name": "emitter"}, + {"id": 7497, "synset": "empty.n.01", "name": "empty"}, + {"id": 7498, "synset": "emulsion.n.02", "name": "emulsion"}, + {"id": 7499, "synset": "enamel.n.04", "name": "enamel"}, + {"id": 7500, "synset": "enamel.n.03", "name": "enamel"}, + {"id": 7501, "synset": "enamelware.n.01", "name": "enamelware"}, + {"id": 7502, "synset": "encaustic.n.01", "name": "encaustic"}, + {"id": 7503, "synset": "encephalogram.n.02", "name": "encephalogram"}, + {"id": 7504, "synset": "enclosure.n.01", "name": "enclosure"}, + {"id": 7505, "synset": "endoscope.n.01", "name": "endoscope"}, + {"id": 7506, "synset": "energizer.n.02", "name": "energizer"}, + {"id": 7507, "synset": "engine.n.01", "name": "engine"}, + {"id": 7508, "synset": "engine.n.04", "name": "engine"}, + {"id": 7509, "synset": "engineering.n.03", "name": "engineering"}, + {"id": 7510, "synset": "enginery.n.01", "name": "enginery"}, + {"id": 7511, "synset": "english_horn.n.01", "name": "English_horn"}, + {"id": 7512, "synset": "english_saddle.n.01", "name": "English_saddle"}, + {"id": 7513, "synset": "enlarger.n.01", "name": "enlarger"}, + {"id": 7514, "synset": "ensemble.n.05", "name": "ensemble"}, + {"id": 7515, "synset": "ensign.n.03", "name": "ensign"}, + {"id": 7516, "synset": "entablature.n.01", "name": "entablature"}, + {"id": 7517, "synset": "entertainment_center.n.01", "name": "entertainment_center"}, + {"id": 7518, "synset": "entrenching_tool.n.01", "name": "entrenching_tool"}, + {"id": 7519, "synset": "entrenchment.n.01", "name": "entrenchment"}, + {"id": 7520, "synset": "envelope.n.02", "name": "envelope"}, + {"id": 7521, "synset": "envelope.n.06", "name": "envelope"}, + {"id": 7522, "synset": "eolith.n.01", "name": "eolith"}, + {"id": 7523, "synset": "epauliere.n.01", "name": "epauliere"}, + {"id": 7524, "synset": "epee.n.01", "name": "epee"}, + {"id": 7525, "synset": "epergne.n.01", "name": "epergne"}, + {"id": 7526, "synset": "epicyclic_train.n.01", "name": "epicyclic_train"}, + {"id": 7527, "synset": "epidiascope.n.01", "name": "epidiascope"}, + {"id": 7528, "synset": "epilating_wax.n.01", "name": "epilating_wax"}, + {"id": 7529, "synset": "equalizer.n.01", "name": "equalizer"}, + {"id": 7530, "synset": "equatorial.n.01", "name": "equatorial"}, + {"id": 7531, "synset": "equipment.n.01", "name": "equipment"}, + { + "id": 7532, + "synset": "erasable_programmable_read-only_memory.n.01", + "name": "erasable_programmable_read-only_memory", + }, + {"id": 7533, "synset": "erecting_prism.n.01", "name": "erecting_prism"}, + {"id": 7534, "synset": "erection.n.02", "name": "erection"}, + {"id": 7535, "synset": "erlenmeyer_flask.n.01", "name": "Erlenmeyer_flask"}, + {"id": 7536, "synset": "escape_hatch.n.01", "name": "escape_hatch"}, + {"id": 7537, "synset": "escapement.n.01", "name": "escapement"}, + {"id": 7538, "synset": "escape_wheel.n.01", "name": "escape_wheel"}, + {"id": 7539, "synset": "escarpment.n.02", "name": "escarpment"}, + {"id": 7540, "synset": "escutcheon.n.03", "name": "escutcheon"}, + {"id": 7541, "synset": "esophagoscope.n.01", "name": "esophagoscope"}, + {"id": 7542, "synset": "espadrille.n.01", "name": "espadrille"}, + {"id": 7543, "synset": "espalier.n.01", "name": "espalier"}, + {"id": 7544, "synset": "espresso_maker.n.01", "name": "espresso_maker"}, + {"id": 7545, "synset": "espresso_shop.n.01", "name": "espresso_shop"}, + {"id": 7546, "synset": "establishment.n.04", "name": "establishment"}, + {"id": 7547, "synset": "estaminet.n.01", "name": "estaminet"}, + {"id": 7548, "synset": "estradiol_patch.n.01", "name": "estradiol_patch"}, + {"id": 7549, "synset": "etagere.n.01", "name": "etagere"}, + {"id": 7550, "synset": "etamine.n.01", "name": "etamine"}, + {"id": 7551, "synset": "etching.n.02", "name": "etching"}, + {"id": 7552, "synset": "ethernet.n.01", "name": "ethernet"}, + {"id": 7553, "synset": "ethernet_cable.n.01", "name": "ethernet_cable"}, + {"id": 7554, "synset": "eton_jacket.n.01", "name": "Eton_jacket"}, + {"id": 7555, "synset": "etui.n.01", "name": "etui"}, + {"id": 7556, "synset": "eudiometer.n.01", "name": "eudiometer"}, + {"id": 7557, "synset": "euphonium.n.01", "name": "euphonium"}, + {"id": 7558, "synset": "evaporative_cooler.n.01", "name": "evaporative_cooler"}, + {"id": 7559, "synset": "evening_bag.n.01", "name": "evening_bag"}, + {"id": 7560, "synset": "exercise_bike.n.01", "name": "exercise_bike"}, + {"id": 7561, "synset": "exercise_device.n.01", "name": "exercise_device"}, + {"id": 7562, "synset": "exhaust.n.02", "name": "exhaust"}, + {"id": 7563, "synset": "exhaust_fan.n.01", "name": "exhaust_fan"}, + {"id": 7564, "synset": "exhaust_valve.n.01", "name": "exhaust_valve"}, + {"id": 7565, "synset": "exhibition_hall.n.01", "name": "exhibition_hall"}, + {"id": 7566, "synset": "exocet.n.01", "name": "Exocet"}, + {"id": 7567, "synset": "expansion_bit.n.01", "name": "expansion_bit"}, + {"id": 7568, "synset": "expansion_bolt.n.01", "name": "expansion_bolt"}, + { + "id": 7569, + "synset": "explosive_detection_system.n.01", + "name": "explosive_detection_system", + }, + {"id": 7570, "synset": "explosive_device.n.01", "name": "explosive_device"}, + { + "id": 7571, + "synset": "explosive_trace_detection.n.01", + "name": "explosive_trace_detection", + }, + {"id": 7572, "synset": "express.n.02", "name": "express"}, + {"id": 7573, "synset": "extension.n.10", "name": "extension"}, + {"id": 7574, "synset": "extension_cord.n.01", "name": "extension_cord"}, + { + "id": 7575, + "synset": "external-combustion_engine.n.01", + "name": "external-combustion_engine", + }, + {"id": 7576, "synset": "external_drive.n.01", "name": "external_drive"}, + {"id": 7577, "synset": "extractor.n.01", "name": "extractor"}, + {"id": 7578, "synset": "eyebrow_pencil.n.01", "name": "eyebrow_pencil"}, + {"id": 7579, "synset": "eyecup.n.01", "name": "eyecup"}, + {"id": 7580, "synset": "eyeliner.n.01", "name": "eyeliner"}, + {"id": 7581, "synset": "eyepiece.n.01", "name": "eyepiece"}, + {"id": 7582, "synset": "eyeshadow.n.01", "name": "eyeshadow"}, + {"id": 7583, "synset": "fabric.n.01", "name": "fabric"}, + {"id": 7584, "synset": "facade.n.01", "name": "facade"}, + {"id": 7585, "synset": "face_guard.n.01", "name": "face_guard"}, + {"id": 7586, "synset": "face_mask.n.01", "name": "face_mask"}, + {"id": 7587, "synset": "faceplate.n.01", "name": "faceplate"}, + {"id": 7588, "synset": "face_powder.n.01", "name": "face_powder"}, + {"id": 7589, "synset": "face_veil.n.01", "name": "face_veil"}, + {"id": 7590, "synset": "facing.n.03", "name": "facing"}, + {"id": 7591, "synset": "facing.n.01", "name": "facing"}, + {"id": 7592, "synset": "facing.n.02", "name": "facing"}, + {"id": 7593, "synset": "facsimile.n.02", "name": "facsimile"}, + {"id": 7594, "synset": "factory.n.01", "name": "factory"}, + {"id": 7595, "synset": "factory_ship.n.01", "name": "factory_ship"}, + {"id": 7596, "synset": "fagot.n.02", "name": "fagot"}, + {"id": 7597, "synset": "fagot_stitch.n.01", "name": "fagot_stitch"}, + { + "id": 7598, + "synset": "fahrenheit_thermometer.n.01", + "name": "Fahrenheit_thermometer", + }, + {"id": 7599, "synset": "faience.n.01", "name": "faience"}, + {"id": 7600, "synset": "faille.n.01", "name": "faille"}, + {"id": 7601, "synset": "fairlead.n.01", "name": "fairlead"}, + {"id": 7602, "synset": "fairy_light.n.01", "name": "fairy_light"}, + {"id": 7603, "synset": "falchion.n.01", "name": "falchion"}, + {"id": 7604, "synset": "fallboard.n.01", "name": "fallboard"}, + {"id": 7605, "synset": "fallout_shelter.n.01", "name": "fallout_shelter"}, + {"id": 7606, "synset": "false_face.n.01", "name": "false_face"}, + {"id": 7607, "synset": "false_teeth.n.01", "name": "false_teeth"}, + {"id": 7608, "synset": "family_room.n.01", "name": "family_room"}, + {"id": 7609, "synset": "fan_belt.n.01", "name": "fan_belt"}, + {"id": 7610, "synset": "fan_blade.n.01", "name": "fan_blade"}, + {"id": 7611, "synset": "fancy_dress.n.01", "name": "fancy_dress"}, + {"id": 7612, "synset": "fanion.n.01", "name": "fanion"}, + {"id": 7613, "synset": "fanlight.n.03", "name": "fanlight"}, + {"id": 7614, "synset": "fanjet.n.02", "name": "fanjet"}, + {"id": 7615, "synset": "fanjet.n.01", "name": "fanjet"}, + {"id": 7616, "synset": "fanny_pack.n.01", "name": "fanny_pack"}, + {"id": 7617, "synset": "fan_tracery.n.01", "name": "fan_tracery"}, + {"id": 7618, "synset": "fan_vaulting.n.01", "name": "fan_vaulting"}, + {"id": 7619, "synset": "farm_building.n.01", "name": "farm_building"}, + {"id": 7620, "synset": "farmer's_market.n.01", "name": "farmer's_market"}, + {"id": 7621, "synset": "farmhouse.n.01", "name": "farmhouse"}, + {"id": 7622, "synset": "farm_machine.n.01", "name": "farm_machine"}, + {"id": 7623, "synset": "farmplace.n.01", "name": "farmplace"}, + {"id": 7624, "synset": "farmyard.n.01", "name": "farmyard"}, + {"id": 7625, "synset": "farthingale.n.01", "name": "farthingale"}, + {"id": 7626, "synset": "fastener.n.02", "name": "fastener"}, + {"id": 7627, "synset": "fast_reactor.n.01", "name": "fast_reactor"}, + {"id": 7628, "synset": "fat_farm.n.01", "name": "fat_farm"}, + {"id": 7629, "synset": "fatigues.n.01", "name": "fatigues"}, + {"id": 7630, "synset": "fauld.n.01", "name": "fauld"}, + {"id": 7631, "synset": "fauteuil.n.01", "name": "fauteuil"}, + {"id": 7632, "synset": "feather_boa.n.01", "name": "feather_boa"}, + {"id": 7633, "synset": "featheredge.n.01", "name": "featheredge"}, + {"id": 7634, "synset": "feedback_circuit.n.01", "name": "feedback_circuit"}, + {"id": 7635, "synset": "feedlot.n.01", "name": "feedlot"}, + {"id": 7636, "synset": "fell.n.02", "name": "fell"}, + {"id": 7637, "synset": "felloe.n.01", "name": "felloe"}, + {"id": 7638, "synset": "felt.n.01", "name": "felt"}, + {"id": 7639, "synset": "felt-tip_pen.n.01", "name": "felt-tip_pen"}, + {"id": 7640, "synset": "felucca.n.01", "name": "felucca"}, + {"id": 7641, "synset": "fence.n.01", "name": "fence"}, + {"id": 7642, "synset": "fencing_mask.n.01", "name": "fencing_mask"}, + {"id": 7643, "synset": "fencing_sword.n.01", "name": "fencing_sword"}, + {"id": 7644, "synset": "fender.n.01", "name": "fender"}, + {"id": 7645, "synset": "fender.n.02", "name": "fender"}, + {"id": 7646, "synset": "ferrule.n.01", "name": "ferrule"}, + {"id": 7647, "synset": "ferule.n.01", "name": "ferule"}, + {"id": 7648, "synset": "festoon.n.01", "name": "festoon"}, + {"id": 7649, "synset": "fetoscope.n.01", "name": "fetoscope"}, + {"id": 7650, "synset": "fetter.n.01", "name": "fetter"}, + {"id": 7651, "synset": "fez.n.02", "name": "fez"}, + {"id": 7652, "synset": "fiber.n.05", "name": "fiber"}, + {"id": 7653, "synset": "fiber_optic_cable.n.01", "name": "fiber_optic_cable"}, + {"id": 7654, "synset": "fiberscope.n.01", "name": "fiberscope"}, + {"id": 7655, "synset": "fichu.n.01", "name": "fichu"}, + {"id": 7656, "synset": "fiddlestick.n.01", "name": "fiddlestick"}, + {"id": 7657, "synset": "field_artillery.n.01", "name": "field_artillery"}, + {"id": 7658, "synset": "field_coil.n.01", "name": "field_coil"}, + { + "id": 7659, + "synset": "field-effect_transistor.n.01", + "name": "field-effect_transistor", + }, + { + "id": 7660, + "synset": "field-emission_microscope.n.01", + "name": "field-emission_microscope", + }, + {"id": 7661, "synset": "field_glass.n.01", "name": "field_glass"}, + {"id": 7662, "synset": "field_hockey_ball.n.01", "name": "field_hockey_ball"}, + {"id": 7663, "synset": "field_hospital.n.01", "name": "field_hospital"}, + {"id": 7664, "synset": "field_house.n.01", "name": "field_house"}, + {"id": 7665, "synset": "field_lens.n.01", "name": "field_lens"}, + {"id": 7666, "synset": "field_magnet.n.01", "name": "field_magnet"}, + { + "id": 7667, + "synset": "field-sequential_color_television.n.01", + "name": "field-sequential_color_television", + }, + {"id": 7668, "synset": "field_tent.n.01", "name": "field_tent"}, + {"id": 7669, "synset": "fieldwork.n.01", "name": "fieldwork"}, + {"id": 7670, "synset": "fife.n.01", "name": "fife"}, + {"id": 7671, "synset": "fifth_wheel.n.02", "name": "fifth_wheel"}, + {"id": 7672, "synset": "fighting_chair.n.01", "name": "fighting_chair"}, + {"id": 7673, "synset": "fig_leaf.n.02", "name": "fig_leaf"}, + {"id": 7674, "synset": "figure_eight.n.01", "name": "figure_eight"}, + {"id": 7675, "synset": "figure_loom.n.01", "name": "figure_loom"}, + {"id": 7676, "synset": "figure_skate.n.01", "name": "figure_skate"}, + {"id": 7677, "synset": "filament.n.04", "name": "filament"}, + {"id": 7678, "synset": "filature.n.01", "name": "filature"}, + {"id": 7679, "synset": "file_folder.n.01", "name": "file_folder"}, + {"id": 7680, "synset": "file_server.n.01", "name": "file_server"}, + {"id": 7681, "synset": "filigree.n.01", "name": "filigree"}, + {"id": 7682, "synset": "filling.n.05", "name": "filling"}, + {"id": 7683, "synset": "film.n.03", "name": "film"}, + {"id": 7684, "synset": "film.n.05", "name": "film"}, + {"id": 7685, "synset": "film_advance.n.01", "name": "film_advance"}, + {"id": 7686, "synset": "filter.n.01", "name": "filter"}, + {"id": 7687, "synset": "filter.n.02", "name": "filter"}, + {"id": 7688, "synset": "finder.n.03", "name": "finder"}, + {"id": 7689, "synset": "finery.n.01", "name": "finery"}, + {"id": 7690, "synset": "fine-tooth_comb.n.01", "name": "fine-tooth_comb"}, + {"id": 7691, "synset": "finger.n.03", "name": "finger"}, + {"id": 7692, "synset": "fingerboard.n.03", "name": "fingerboard"}, + {"id": 7693, "synset": "finger_bowl.n.01", "name": "finger_bowl"}, + {"id": 7694, "synset": "finger_paint.n.01", "name": "finger_paint"}, + {"id": 7695, "synset": "finger-painting.n.01", "name": "finger-painting"}, + {"id": 7696, "synset": "finger_plate.n.01", "name": "finger_plate"}, + {"id": 7697, "synset": "fingerstall.n.01", "name": "fingerstall"}, + {"id": 7698, "synset": "finish_coat.n.02", "name": "finish_coat"}, + {"id": 7699, "synset": "finish_coat.n.01", "name": "finish_coat"}, + {"id": 7700, "synset": "finisher.n.05", "name": "finisher"}, + {"id": 7701, "synset": "fin_keel.n.01", "name": "fin_keel"}, + {"id": 7702, "synset": "fipple.n.01", "name": "fipple"}, + {"id": 7703, "synset": "fipple_flute.n.01", "name": "fipple_flute"}, + {"id": 7704, "synset": "fire.n.04", "name": "fire"}, + {"id": 7705, "synset": "firearm.n.01", "name": "firearm"}, + {"id": 7706, "synset": "fire_bell.n.01", "name": "fire_bell"}, + {"id": 7707, "synset": "fireboat.n.01", "name": "fireboat"}, + {"id": 7708, "synset": "firebox.n.01", "name": "firebox"}, + {"id": 7709, "synset": "firebrick.n.01", "name": "firebrick"}, + {"id": 7710, "synset": "fire_control_radar.n.01", "name": "fire_control_radar"}, + {"id": 7711, "synset": "fire_control_system.n.01", "name": "fire_control_system"}, + {"id": 7712, "synset": "fire_iron.n.01", "name": "fire_iron"}, + {"id": 7713, "synset": "fireman's_ax.n.01", "name": "fireman's_ax"}, + {"id": 7714, "synset": "fire_screen.n.01", "name": "fire_screen"}, + {"id": 7715, "synset": "fire_tongs.n.01", "name": "fire_tongs"}, + {"id": 7716, "synset": "fire_tower.n.01", "name": "fire_tower"}, + {"id": 7717, "synset": "firewall.n.02", "name": "firewall"}, + {"id": 7718, "synset": "firing_chamber.n.01", "name": "firing_chamber"}, + {"id": 7719, "synset": "firing_pin.n.01", "name": "firing_pin"}, + {"id": 7720, "synset": "firkin.n.02", "name": "firkin"}, + {"id": 7721, "synset": "firmer_chisel.n.01", "name": "firmer_chisel"}, + {"id": 7722, "synset": "first-aid_station.n.01", "name": "first-aid_station"}, + {"id": 7723, "synset": "first_base.n.01", "name": "first_base"}, + {"id": 7724, "synset": "first_class.n.03", "name": "first_class"}, + {"id": 7725, "synset": "fisherman's_bend.n.01", "name": "fisherman's_bend"}, + {"id": 7726, "synset": "fisherman's_knot.n.01", "name": "fisherman's_knot"}, + {"id": 7727, "synset": "fisherman's_lure.n.01", "name": "fisherman's_lure"}, + {"id": 7728, "synset": "fishhook.n.01", "name": "fishhook"}, + {"id": 7729, "synset": "fishing_boat.n.01", "name": "fishing_boat"}, + {"id": 7730, "synset": "fishing_gear.n.01", "name": "fishing_gear"}, + {"id": 7731, "synset": "fish_joint.n.01", "name": "fish_joint"}, + {"id": 7732, "synset": "fish_knife.n.01", "name": "fish_knife"}, + {"id": 7733, "synset": "fishnet.n.01", "name": "fishnet"}, + {"id": 7734, "synset": "fish_slice.n.01", "name": "fish_slice"}, + {"id": 7735, "synset": "fitment.n.01", "name": "fitment"}, + {"id": 7736, "synset": "fixative.n.02", "name": "fixative"}, + {"id": 7737, "synset": "fixer-upper.n.01", "name": "fixer-upper"}, + {"id": 7738, "synset": "flageolet.n.02", "name": "flageolet"}, + {"id": 7739, "synset": "flagon.n.01", "name": "flagon"}, + {"id": 7740, "synset": "flagship.n.02", "name": "flagship"}, + {"id": 7741, "synset": "flail.n.01", "name": "flail"}, + {"id": 7742, "synset": "flambeau.n.01", "name": "flambeau"}, + {"id": 7743, "synset": "flamethrower.n.01", "name": "flamethrower"}, + {"id": 7744, "synset": "flange.n.01", "name": "flange"}, + {"id": 7745, "synset": "flannel.n.03", "name": "flannel"}, + {"id": 7746, "synset": "flannelette.n.01", "name": "flannelette"}, + {"id": 7747, "synset": "flap.n.05", "name": "flap"}, + {"id": 7748, "synset": "flash.n.09", "name": "flash"}, + {"id": 7749, "synset": "flash_camera.n.01", "name": "flash_camera"}, + {"id": 7750, "synset": "flasher.n.02", "name": "flasher"}, + {"id": 7751, "synset": "flashlight_battery.n.01", "name": "flashlight_battery"}, + {"id": 7752, "synset": "flash_memory.n.01", "name": "flash_memory"}, + {"id": 7753, "synset": "flask.n.01", "name": "flask"}, + {"id": 7754, "synset": "flat_arch.n.01", "name": "flat_arch"}, + {"id": 7755, "synset": "flatbed.n.02", "name": "flatbed"}, + {"id": 7756, "synset": "flatbed_press.n.01", "name": "flatbed_press"}, + {"id": 7757, "synset": "flat_bench.n.01", "name": "flat_bench"}, + {"id": 7758, "synset": "flatcar.n.01", "name": "flatcar"}, + {"id": 7759, "synset": "flat_file.n.01", "name": "flat_file"}, + {"id": 7760, "synset": "flatlet.n.01", "name": "flatlet"}, + {"id": 7761, "synset": "flat_panel_display.n.01", "name": "flat_panel_display"}, + {"id": 7762, "synset": "flats.n.01", "name": "flats"}, + {"id": 7763, "synset": "flat_tip_screwdriver.n.01", "name": "flat_tip_screwdriver"}, + { + "id": 7764, + "synset": "fleet_ballistic_missile_submarine.n.01", + "name": "fleet_ballistic_missile_submarine", + }, + {"id": 7765, "synset": "fleur-de-lis.n.02", "name": "fleur-de-lis"}, + {"id": 7766, "synset": "flight_simulator.n.01", "name": "flight_simulator"}, + {"id": 7767, "synset": "flintlock.n.02", "name": "flintlock"}, + {"id": 7768, "synset": "flintlock.n.01", "name": "flintlock"}, + {"id": 7769, "synset": "float.n.05", "name": "float"}, + {"id": 7770, "synset": "floating_dock.n.01", "name": "floating_dock"}, + {"id": 7771, "synset": "floatplane.n.01", "name": "floatplane"}, + {"id": 7772, "synset": "flood.n.03", "name": "flood"}, + {"id": 7773, "synset": "floor.n.01", "name": "floor"}, + {"id": 7774, "synset": "floor.n.02", "name": "floor"}, + {"id": 7775, "synset": "floor.n.09", "name": "floor"}, + {"id": 7776, "synset": "floorboard.n.02", "name": "floorboard"}, + {"id": 7777, "synset": "floor_cover.n.01", "name": "floor_cover"}, + {"id": 7778, "synset": "floor_joist.n.01", "name": "floor_joist"}, + {"id": 7779, "synset": "floor_lamp.n.01", "name": "floor_lamp"}, + {"id": 7780, "synset": "flophouse.n.01", "name": "flophouse"}, + {"id": 7781, "synset": "florist.n.02", "name": "florist"}, + {"id": 7782, "synset": "floss.n.01", "name": "floss"}, + {"id": 7783, "synset": "flotsam.n.01", "name": "flotsam"}, + {"id": 7784, "synset": "flour_bin.n.01", "name": "flour_bin"}, + {"id": 7785, "synset": "flour_mill.n.01", "name": "flour_mill"}, + {"id": 7786, "synset": "flowerbed.n.01", "name": "flowerbed"}, + {"id": 7787, "synset": "flugelhorn.n.01", "name": "flugelhorn"}, + {"id": 7788, "synset": "fluid_drive.n.01", "name": "fluid_drive"}, + {"id": 7789, "synset": "fluid_flywheel.n.01", "name": "fluid_flywheel"}, + {"id": 7790, "synset": "flume.n.02", "name": "flume"}, + {"id": 7791, "synset": "fluorescent_lamp.n.01", "name": "fluorescent_lamp"}, + {"id": 7792, "synset": "fluoroscope.n.01", "name": "fluoroscope"}, + {"id": 7793, "synset": "flush_toilet.n.01", "name": "flush_toilet"}, + {"id": 7794, "synset": "flute.n.01", "name": "flute"}, + {"id": 7795, "synset": "flux_applicator.n.01", "name": "flux_applicator"}, + {"id": 7796, "synset": "fluxmeter.n.01", "name": "fluxmeter"}, + {"id": 7797, "synset": "fly.n.05", "name": "fly"}, + {"id": 7798, "synset": "flying_boat.n.01", "name": "flying_boat"}, + {"id": 7799, "synset": "flying_buttress.n.01", "name": "flying_buttress"}, + {"id": 7800, "synset": "flying_carpet.n.01", "name": "flying_carpet"}, + {"id": 7801, "synset": "flying_jib.n.01", "name": "flying_jib"}, + {"id": 7802, "synset": "fly_rod.n.01", "name": "fly_rod"}, + {"id": 7803, "synset": "fly_tent.n.01", "name": "fly_tent"}, + {"id": 7804, "synset": "flytrap.n.01", "name": "flytrap"}, + {"id": 7805, "synset": "flywheel.n.01", "name": "flywheel"}, + {"id": 7806, "synset": "fob.n.03", "name": "fob"}, + {"id": 7807, "synset": "foghorn.n.02", "name": "foghorn"}, + {"id": 7808, "synset": "foglamp.n.01", "name": "foglamp"}, + {"id": 7809, "synset": "foil.n.05", "name": "foil"}, + {"id": 7810, "synset": "fold.n.06", "name": "fold"}, + {"id": 7811, "synset": "folder.n.02", "name": "folder"}, + {"id": 7812, "synset": "folding_door.n.01", "name": "folding_door"}, + {"id": 7813, "synset": "folding_saw.n.01", "name": "folding_saw"}, + {"id": 7814, "synset": "food_court.n.01", "name": "food_court"}, + {"id": 7815, "synset": "food_hamper.n.01", "name": "food_hamper"}, + {"id": 7816, "synset": "foot.n.11", "name": "foot"}, + {"id": 7817, "synset": "footage.n.01", "name": "footage"}, + {"id": 7818, "synset": "football_stadium.n.01", "name": "football_stadium"}, + {"id": 7819, "synset": "footbath.n.01", "name": "footbath"}, + {"id": 7820, "synset": "foot_brake.n.01", "name": "foot_brake"}, + {"id": 7821, "synset": "footbridge.n.01", "name": "footbridge"}, + {"id": 7822, "synset": "foothold.n.02", "name": "foothold"}, + {"id": 7823, "synset": "footlocker.n.01", "name": "footlocker"}, + {"id": 7824, "synset": "foot_rule.n.01", "name": "foot_rule"}, + {"id": 7825, "synset": "footwear.n.02", "name": "footwear"}, + {"id": 7826, "synset": "footwear.n.01", "name": "footwear"}, + {"id": 7827, "synset": "forceps.n.01", "name": "forceps"}, + {"id": 7828, "synset": "force_pump.n.01", "name": "force_pump"}, + {"id": 7829, "synset": "fore-and-after.n.01", "name": "fore-and-after"}, + {"id": 7830, "synset": "fore-and-aft_sail.n.01", "name": "fore-and-aft_sail"}, + {"id": 7831, "synset": "forecastle.n.01", "name": "forecastle"}, + {"id": 7832, "synset": "forecourt.n.01", "name": "forecourt"}, + {"id": 7833, "synset": "foredeck.n.01", "name": "foredeck"}, + {"id": 7834, "synset": "fore_edge.n.01", "name": "fore_edge"}, + {"id": 7835, "synset": "foreground.n.02", "name": "foreground"}, + {"id": 7836, "synset": "foremast.n.01", "name": "foremast"}, + {"id": 7837, "synset": "fore_plane.n.01", "name": "fore_plane"}, + {"id": 7838, "synset": "foresail.n.01", "name": "foresail"}, + {"id": 7839, "synset": "forestay.n.01", "name": "forestay"}, + {"id": 7840, "synset": "foretop.n.01", "name": "foretop"}, + {"id": 7841, "synset": "fore-topmast.n.01", "name": "fore-topmast"}, + {"id": 7842, "synset": "fore-topsail.n.01", "name": "fore-topsail"}, + {"id": 7843, "synset": "forge.n.01", "name": "forge"}, + {"id": 7844, "synset": "fork.n.04", "name": "fork"}, + {"id": 7845, "synset": "formalwear.n.01", "name": "formalwear"}, + {"id": 7846, "synset": "formica.n.01", "name": "Formica"}, + {"id": 7847, "synset": "fortification.n.01", "name": "fortification"}, + {"id": 7848, "synset": "fortress.n.01", "name": "fortress"}, + {"id": 7849, "synset": "forty-five.n.01", "name": "forty-five"}, + {"id": 7850, "synset": "foucault_pendulum.n.01", "name": "Foucault_pendulum"}, + {"id": 7851, "synset": "foulard.n.01", "name": "foulard"}, + {"id": 7852, "synset": "foul-weather_gear.n.01", "name": "foul-weather_gear"}, + {"id": 7853, "synset": "foundation_garment.n.01", "name": "foundation_garment"}, + {"id": 7854, "synset": "foundry.n.01", "name": "foundry"}, + {"id": 7855, "synset": "fountain.n.01", "name": "fountain"}, + {"id": 7856, "synset": "fountain_pen.n.01", "name": "fountain_pen"}, + {"id": 7857, "synset": "four-in-hand.n.01", "name": "four-in-hand"}, + {"id": 7858, "synset": "four-poster.n.01", "name": "four-poster"}, + {"id": 7859, "synset": "four-pounder.n.01", "name": "four-pounder"}, + {"id": 7860, "synset": "four-stroke_engine.n.01", "name": "four-stroke_engine"}, + {"id": 7861, "synset": "four-wheel_drive.n.02", "name": "four-wheel_drive"}, + {"id": 7862, "synset": "four-wheel_drive.n.01", "name": "four-wheel_drive"}, + {"id": 7863, "synset": "four-wheeler.n.01", "name": "four-wheeler"}, + {"id": 7864, "synset": "fowling_piece.n.01", "name": "fowling_piece"}, + {"id": 7865, "synset": "foxhole.n.01", "name": "foxhole"}, + {"id": 7866, "synset": "fragmentation_bomb.n.01", "name": "fragmentation_bomb"}, + {"id": 7867, "synset": "frail.n.02", "name": "frail"}, + {"id": 7868, "synset": "fraise.n.02", "name": "fraise"}, + {"id": 7869, "synset": "frame.n.10", "name": "frame"}, + {"id": 7870, "synset": "frame.n.01", "name": "frame"}, + {"id": 7871, "synset": "frame_buffer.n.01", "name": "frame_buffer"}, + {"id": 7872, "synset": "framework.n.03", "name": "framework"}, + {"id": 7873, "synset": "francis_turbine.n.01", "name": "Francis_turbine"}, + {"id": 7874, "synset": "franking_machine.n.01", "name": "franking_machine"}, + {"id": 7875, "synset": "free_house.n.01", "name": "free_house"}, + {"id": 7876, "synset": "free-reed.n.01", "name": "free-reed"}, + {"id": 7877, "synset": "free-reed_instrument.n.01", "name": "free-reed_instrument"}, + {"id": 7878, "synset": "freewheel.n.01", "name": "freewheel"}, + {"id": 7879, "synset": "freight_elevator.n.01", "name": "freight_elevator"}, + {"id": 7880, "synset": "freight_liner.n.01", "name": "freight_liner"}, + {"id": 7881, "synset": "freight_train.n.01", "name": "freight_train"}, + {"id": 7882, "synset": "french_door.n.01", "name": "French_door"}, + {"id": 7883, "synset": "french_horn.n.01", "name": "French_horn"}, + {"id": 7884, "synset": "french_polish.n.02", "name": "French_polish"}, + {"id": 7885, "synset": "french_roof.n.01", "name": "French_roof"}, + {"id": 7886, "synset": "french_window.n.01", "name": "French_window"}, + {"id": 7887, "synset": "fresnel_lens.n.01", "name": "Fresnel_lens"}, + {"id": 7888, "synset": "fret.n.04", "name": "fret"}, + {"id": 7889, "synset": "friary.n.01", "name": "friary"}, + {"id": 7890, "synset": "friction_clutch.n.01", "name": "friction_clutch"}, + {"id": 7891, "synset": "frieze.n.02", "name": "frieze"}, + {"id": 7892, "synset": "frieze.n.01", "name": "frieze"}, + {"id": 7893, "synset": "frigate.n.02", "name": "frigate"}, + {"id": 7894, "synset": "frigate.n.01", "name": "frigate"}, + {"id": 7895, "synset": "frill.n.03", "name": "frill"}, + {"id": 7896, "synset": "frock.n.01", "name": "frock"}, + {"id": 7897, "synset": "frock_coat.n.01", "name": "frock_coat"}, + {"id": 7898, "synset": "frontlet.n.01", "name": "frontlet"}, + {"id": 7899, "synset": "front_porch.n.01", "name": "front_porch"}, + {"id": 7900, "synset": "front_projector.n.01", "name": "front_projector"}, + {"id": 7901, "synset": "fruit_machine.n.01", "name": "fruit_machine"}, + {"id": 7902, "synset": "fuel_filter.n.01", "name": "fuel_filter"}, + {"id": 7903, "synset": "fuel_gauge.n.01", "name": "fuel_gauge"}, + {"id": 7904, "synset": "fuel_injection.n.01", "name": "fuel_injection"}, + {"id": 7905, "synset": "fuel_system.n.01", "name": "fuel_system"}, + {"id": 7906, "synset": "full-dress_uniform.n.01", "name": "full-dress_uniform"}, + {"id": 7907, "synset": "full_metal_jacket.n.01", "name": "full_metal_jacket"}, + {"id": 7908, "synset": "full_skirt.n.01", "name": "full_skirt"}, + {"id": 7909, "synset": "fumigator.n.02", "name": "fumigator"}, + {"id": 7910, "synset": "funeral_home.n.01", "name": "funeral_home"}, + {"id": 7911, "synset": "funny_wagon.n.01", "name": "funny_wagon"}, + {"id": 7912, "synset": "fur.n.03", "name": "fur"}, + {"id": 7913, "synset": "fur_coat.n.01", "name": "fur_coat"}, + {"id": 7914, "synset": "fur_hat.n.01", "name": "fur_hat"}, + {"id": 7915, "synset": "furnace.n.01", "name": "furnace"}, + {"id": 7916, "synset": "furnace_lining.n.01", "name": "furnace_lining"}, + {"id": 7917, "synset": "furnace_room.n.01", "name": "furnace_room"}, + {"id": 7918, "synset": "furnishing.n.02", "name": "furnishing"}, + {"id": 7919, "synset": "furnishing.n.01", "name": "furnishing"}, + {"id": 7920, "synset": "furniture.n.01", "name": "furniture"}, + {"id": 7921, "synset": "fur-piece.n.01", "name": "fur-piece"}, + {"id": 7922, "synset": "furrow.n.01", "name": "furrow"}, + {"id": 7923, "synset": "fuse.n.01", "name": "fuse"}, + {"id": 7924, "synset": "fusee_drive.n.01", "name": "fusee_drive"}, + {"id": 7925, "synset": "fuselage.n.01", "name": "fuselage"}, + {"id": 7926, "synset": "fusil.n.01", "name": "fusil"}, + {"id": 7927, "synset": "fustian.n.02", "name": "fustian"}, + {"id": 7928, "synset": "gabardine.n.01", "name": "gabardine"}, + {"id": 7929, "synset": "gable.n.01", "name": "gable"}, + {"id": 7930, "synset": "gable_roof.n.01", "name": "gable_roof"}, + {"id": 7931, "synset": "gadgetry.n.01", "name": "gadgetry"}, + {"id": 7932, "synset": "gaff.n.03", "name": "gaff"}, + {"id": 7933, "synset": "gaff.n.02", "name": "gaff"}, + {"id": 7934, "synset": "gaff.n.01", "name": "gaff"}, + {"id": 7935, "synset": "gaffsail.n.01", "name": "gaffsail"}, + {"id": 7936, "synset": "gaff_topsail.n.01", "name": "gaff_topsail"}, + {"id": 7937, "synset": "gaiter.n.03", "name": "gaiter"}, + {"id": 7938, "synset": "gaiter.n.02", "name": "gaiter"}, + {"id": 7939, "synset": "galilean_telescope.n.01", "name": "Galilean_telescope"}, + {"id": 7940, "synset": "galleon.n.01", "name": "galleon"}, + {"id": 7941, "synset": "gallery.n.04", "name": "gallery"}, + {"id": 7942, "synset": "gallery.n.03", "name": "gallery"}, + {"id": 7943, "synset": "galley.n.04", "name": "galley"}, + {"id": 7944, "synset": "galley.n.03", "name": "galley"}, + {"id": 7945, "synset": "galley.n.02", "name": "galley"}, + {"id": 7946, "synset": "gallows.n.01", "name": "gallows"}, + {"id": 7947, "synset": "gallows_tree.n.01", "name": "gallows_tree"}, + {"id": 7948, "synset": "galvanometer.n.01", "name": "galvanometer"}, + {"id": 7949, "synset": "gambling_house.n.01", "name": "gambling_house"}, + {"id": 7950, "synset": "gambrel.n.01", "name": "gambrel"}, + {"id": 7951, "synset": "game.n.09", "name": "game"}, + {"id": 7952, "synset": "gamebag.n.01", "name": "gamebag"}, + {"id": 7953, "synset": "game_equipment.n.01", "name": "game_equipment"}, + {"id": 7954, "synset": "gaming_table.n.01", "name": "gaming_table"}, + {"id": 7955, "synset": "gamp.n.01", "name": "gamp"}, + {"id": 7956, "synset": "gangplank.n.01", "name": "gangplank"}, + {"id": 7957, "synset": "gangsaw.n.01", "name": "gangsaw"}, + {"id": 7958, "synset": "gangway.n.01", "name": "gangway"}, + {"id": 7959, "synset": "gantlet.n.04", "name": "gantlet"}, + {"id": 7960, "synset": "gantry.n.01", "name": "gantry"}, + {"id": 7961, "synset": "garage.n.01", "name": "garage"}, + {"id": 7962, "synset": "garage.n.02", "name": "garage"}, + {"id": 7963, "synset": "garand_rifle.n.01", "name": "Garand_rifle"}, + {"id": 7964, "synset": "garboard.n.01", "name": "garboard"}, + {"id": 7965, "synset": "garden.n.01", "name": "garden"}, + {"id": 7966, "synset": "garden.n.03", "name": "garden"}, + {"id": 7967, "synset": "garden_rake.n.01", "name": "garden_rake"}, + {"id": 7968, "synset": "garden_spade.n.01", "name": "garden_spade"}, + {"id": 7969, "synset": "garden_tool.n.01", "name": "garden_tool"}, + {"id": 7970, "synset": "garden_trowel.n.01", "name": "garden_trowel"}, + {"id": 7971, "synset": "gargoyle.n.01", "name": "gargoyle"}, + {"id": 7972, "synset": "garibaldi.n.02", "name": "garibaldi"}, + {"id": 7973, "synset": "garlic_press.n.01", "name": "garlic_press"}, + {"id": 7974, "synset": "garment.n.01", "name": "garment"}, + {"id": 7975, "synset": "garment_bag.n.01", "name": "garment_bag"}, + {"id": 7976, "synset": "garrison_cap.n.01", "name": "garrison_cap"}, + {"id": 7977, "synset": "garrote.n.01", "name": "garrote"}, + {"id": 7978, "synset": "garter.n.01", "name": "garter"}, + {"id": 7979, "synset": "garter_belt.n.01", "name": "garter_belt"}, + {"id": 7980, "synset": "garter_stitch.n.01", "name": "garter_stitch"}, + {"id": 7981, "synset": "gas_guzzler.n.01", "name": "gas_guzzler"}, + {"id": 7982, "synset": "gas_shell.n.01", "name": "gas_shell"}, + {"id": 7983, "synset": "gas_bracket.n.01", "name": "gas_bracket"}, + {"id": 7984, "synset": "gas_burner.n.01", "name": "gas_burner"}, + {"id": 7985, "synset": "gas-cooled_reactor.n.01", "name": "gas-cooled_reactor"}, + {"id": 7986, "synset": "gas-discharge_tube.n.01", "name": "gas-discharge_tube"}, + {"id": 7987, "synset": "gas_engine.n.01", "name": "gas_engine"}, + {"id": 7988, "synset": "gas_fixture.n.01", "name": "gas_fixture"}, + {"id": 7989, "synset": "gas_furnace.n.01", "name": "gas_furnace"}, + {"id": 7990, "synset": "gas_gun.n.01", "name": "gas_gun"}, + {"id": 7991, "synset": "gas_heater.n.01", "name": "gas_heater"}, + {"id": 7992, "synset": "gas_holder.n.01", "name": "gas_holder"}, + {"id": 7993, "synset": "gasket.n.01", "name": "gasket"}, + {"id": 7994, "synset": "gas_lamp.n.01", "name": "gas_lamp"}, + {"id": 7995, "synset": "gas_maser.n.01", "name": "gas_maser"}, + {"id": 7996, "synset": "gas_meter.n.01", "name": "gas_meter"}, + {"id": 7997, "synset": "gasoline_engine.n.01", "name": "gasoline_engine"}, + {"id": 7998, "synset": "gasoline_gauge.n.01", "name": "gasoline_gauge"}, + {"id": 7999, "synset": "gas_oven.n.02", "name": "gas_oven"}, + {"id": 8000, "synset": "gas_oven.n.01", "name": "gas_oven"}, + {"id": 8001, "synset": "gas_pump.n.01", "name": "gas_pump"}, + {"id": 8002, "synset": "gas_range.n.01", "name": "gas_range"}, + {"id": 8003, "synset": "gas_ring.n.01", "name": "gas_ring"}, + {"id": 8004, "synset": "gas_tank.n.01", "name": "gas_tank"}, + {"id": 8005, "synset": "gas_thermometer.n.01", "name": "gas_thermometer"}, + {"id": 8006, "synset": "gastroscope.n.01", "name": "gastroscope"}, + {"id": 8007, "synset": "gas_turbine.n.01", "name": "gas_turbine"}, + {"id": 8008, "synset": "gas-turbine_ship.n.01", "name": "gas-turbine_ship"}, + {"id": 8009, "synset": "gat.n.01", "name": "gat"}, + {"id": 8010, "synset": "gate.n.01", "name": "gate"}, + {"id": 8011, "synset": "gatehouse.n.01", "name": "gatehouse"}, + {"id": 8012, "synset": "gateleg_table.n.01", "name": "gateleg_table"}, + {"id": 8013, "synset": "gatepost.n.01", "name": "gatepost"}, + {"id": 8014, "synset": "gathered_skirt.n.01", "name": "gathered_skirt"}, + {"id": 8015, "synset": "gatling_gun.n.01", "name": "Gatling_gun"}, + {"id": 8016, "synset": "gauge.n.01", "name": "gauge"}, + {"id": 8017, "synset": "gauntlet.n.03", "name": "gauntlet"}, + {"id": 8018, "synset": "gauntlet.n.02", "name": "gauntlet"}, + {"id": 8019, "synset": "gauze.n.02", "name": "gauze"}, + {"id": 8020, "synset": "gauze.n.01", "name": "gauze"}, + {"id": 8021, "synset": "gavel.n.01", "name": "gavel"}, + {"id": 8022, "synset": "gazebo.n.01", "name": "gazebo"}, + {"id": 8023, "synset": "gear.n.01", "name": "gear"}, + {"id": 8024, "synset": "gear.n.04", "name": "gear"}, + {"id": 8025, "synset": "gear.n.03", "name": "gear"}, + {"id": 8026, "synset": "gearbox.n.01", "name": "gearbox"}, + {"id": 8027, "synset": "gearing.n.01", "name": "gearing"}, + {"id": 8028, "synset": "gearset.n.01", "name": "gearset"}, + {"id": 8029, "synset": "gearshift.n.01", "name": "gearshift"}, + {"id": 8030, "synset": "geiger_counter.n.01", "name": "Geiger_counter"}, + {"id": 8031, "synset": "geiger_tube.n.01", "name": "Geiger_tube"}, + {"id": 8032, "synset": "gene_chip.n.01", "name": "gene_chip"}, + {"id": 8033, "synset": "general-purpose_bomb.n.01", "name": "general-purpose_bomb"}, + {"id": 8034, "synset": "generator.n.01", "name": "generator"}, + {"id": 8035, "synset": "generator.n.04", "name": "generator"}, + {"id": 8036, "synset": "geneva_gown.n.01", "name": "Geneva_gown"}, + {"id": 8037, "synset": "geodesic_dome.n.01", "name": "geodesic_dome"}, + {"id": 8038, "synset": "georgette.n.01", "name": "georgette"}, + {"id": 8039, "synset": "gharry.n.01", "name": "gharry"}, + {"id": 8040, "synset": "ghat.n.01", "name": "ghat"}, + {"id": 8041, "synset": "ghetto_blaster.n.01", "name": "ghetto_blaster"}, + {"id": 8042, "synset": "gift_shop.n.01", "name": "gift_shop"}, + {"id": 8043, "synset": "gift_wrapping.n.01", "name": "gift_wrapping"}, + {"id": 8044, "synset": "gig.n.05", "name": "gig"}, + {"id": 8045, "synset": "gig.n.04", "name": "gig"}, + {"id": 8046, "synset": "gig.n.01", "name": "gig"}, + {"id": 8047, "synset": "gig.n.03", "name": "gig"}, + {"id": 8048, "synset": "gildhall.n.01", "name": "gildhall"}, + {"id": 8049, "synset": "gill_net.n.01", "name": "gill_net"}, + {"id": 8050, "synset": "gilt.n.01", "name": "gilt"}, + {"id": 8051, "synset": "gimbal.n.01", "name": "gimbal"}, + {"id": 8052, "synset": "gingham.n.01", "name": "gingham"}, + {"id": 8053, "synset": "girandole.n.01", "name": "girandole"}, + {"id": 8054, "synset": "girder.n.01", "name": "girder"}, + {"id": 8055, "synset": "glass.n.07", "name": "glass"}, + {"id": 8056, "synset": "glass_cutter.n.03", "name": "glass_cutter"}, + {"id": 8057, "synset": "glasses_case.n.01", "name": "glasses_case"}, + {"id": 8058, "synset": "glebe_house.n.01", "name": "glebe_house"}, + {"id": 8059, "synset": "glengarry.n.01", "name": "Glengarry"}, + {"id": 8060, "synset": "glider.n.01", "name": "glider"}, + { + "id": 8061, + "synset": "global_positioning_system.n.01", + "name": "Global_Positioning_System", + }, + {"id": 8062, "synset": "glockenspiel.n.01", "name": "glockenspiel"}, + {"id": 8063, "synset": "glory_hole.n.01", "name": "glory_hole"}, + {"id": 8064, "synset": "glove_compartment.n.01", "name": "glove_compartment"}, + {"id": 8065, "synset": "glow_lamp.n.01", "name": "glow_lamp"}, + {"id": 8066, "synset": "glow_tube.n.01", "name": "glow_tube"}, + {"id": 8067, "synset": "glyptic_art.n.01", "name": "glyptic_art"}, + {"id": 8068, "synset": "glyptics.n.01", "name": "glyptics"}, + {"id": 8069, "synset": "gnomon.n.01", "name": "gnomon"}, + {"id": 8070, "synset": "goal.n.03", "name": "goal"}, + {"id": 8071, "synset": "goalmouth.n.01", "name": "goalmouth"}, + {"id": 8072, "synset": "goalpost.n.01", "name": "goalpost"}, + {"id": 8073, "synset": "goblet.n.01", "name": "goblet"}, + {"id": 8074, "synset": "godown.n.01", "name": "godown"}, + {"id": 8075, "synset": "go-kart.n.01", "name": "go-kart"}, + {"id": 8076, "synset": "gold_plate.n.02", "name": "gold_plate"}, + {"id": 8077, "synset": "golf_bag.n.01", "name": "golf_bag"}, + {"id": 8078, "synset": "golf_ball.n.01", "name": "golf_ball"}, + {"id": 8079, "synset": "golf-club_head.n.01", "name": "golf-club_head"}, + {"id": 8080, "synset": "golf_equipment.n.01", "name": "golf_equipment"}, + {"id": 8081, "synset": "golf_glove.n.01", "name": "golf_glove"}, + {"id": 8082, "synset": "golliwog.n.01", "name": "golliwog"}, + {"id": 8083, "synset": "gong.n.01", "name": "gong"}, + {"id": 8084, "synset": "goniometer.n.01", "name": "goniometer"}, + {"id": 8085, "synset": "gordian_knot.n.02", "name": "Gordian_knot"}, + {"id": 8086, "synset": "gorget.n.01", "name": "gorget"}, + {"id": 8087, "synset": "gossamer.n.01", "name": "gossamer"}, + {"id": 8088, "synset": "gothic_arch.n.01", "name": "Gothic_arch"}, + {"id": 8089, "synset": "gouache.n.01", "name": "gouache"}, + {"id": 8090, "synset": "gouge.n.02", "name": "gouge"}, + {"id": 8091, "synset": "gourd.n.01", "name": "gourd"}, + {"id": 8092, "synset": "government_building.n.01", "name": "government_building"}, + {"id": 8093, "synset": "government_office.n.01", "name": "government_office"}, + {"id": 8094, "synset": "gown.n.01", "name": "gown"}, + {"id": 8095, "synset": "gown.n.05", "name": "gown"}, + {"id": 8096, "synset": "gown.n.04", "name": "gown"}, + {"id": 8097, "synset": "grab.n.01", "name": "grab"}, + {"id": 8098, "synset": "grab_bag.n.02", "name": "grab_bag"}, + {"id": 8099, "synset": "grab_bar.n.01", "name": "grab_bar"}, + {"id": 8100, "synset": "grace_cup.n.01", "name": "grace_cup"}, + {"id": 8101, "synset": "grade_separation.n.01", "name": "grade_separation"}, + {"id": 8102, "synset": "graduated_cylinder.n.01", "name": "graduated_cylinder"}, + {"id": 8103, "synset": "graffito.n.01", "name": "graffito"}, + {"id": 8104, "synset": "gramophone.n.01", "name": "gramophone"}, + {"id": 8105, "synset": "granary.n.01", "name": "granary"}, + {"id": 8106, "synset": "grandfather_clock.n.01", "name": "grandfather_clock"}, + {"id": 8107, "synset": "grand_piano.n.01", "name": "grand_piano"}, + {"id": 8108, "synset": "graniteware.n.01", "name": "graniteware"}, + {"id": 8109, "synset": "granny_knot.n.01", "name": "granny_knot"}, + {"id": 8110, "synset": "grape_arbor.n.01", "name": "grape_arbor"}, + {"id": 8111, "synset": "grapnel.n.02", "name": "grapnel"}, + {"id": 8112, "synset": "grapnel.n.01", "name": "grapnel"}, + {"id": 8113, "synset": "grass_skirt.n.01", "name": "grass_skirt"}, + {"id": 8114, "synset": "grate.n.01", "name": "grate"}, + {"id": 8115, "synset": "grate.n.03", "name": "grate"}, + {"id": 8116, "synset": "graver.n.01", "name": "graver"}, + {"id": 8117, "synset": "gravimeter.n.02", "name": "gravimeter"}, + {"id": 8118, "synset": "gravure.n.03", "name": "gravure"}, + {"id": 8119, "synset": "grey.n.06", "name": "grey"}, + {"id": 8120, "synset": "grease-gun.n.01", "name": "grease-gun"}, + {"id": 8121, "synset": "greasepaint.n.01", "name": "greasepaint"}, + {"id": 8122, "synset": "greasy_spoon.n.01", "name": "greasy_spoon"}, + {"id": 8123, "synset": "greatcoat.n.01", "name": "greatcoat"}, + {"id": 8124, "synset": "great_hall.n.01", "name": "great_hall"}, + {"id": 8125, "synset": "greave.n.01", "name": "greave"}, + {"id": 8126, "synset": "greengrocery.n.02", "name": "greengrocery"}, + {"id": 8127, "synset": "greenhouse.n.01", "name": "greenhouse"}, + {"id": 8128, "synset": "grenade.n.01", "name": "grenade"}, + {"id": 8129, "synset": "grid.n.05", "name": "grid"}, + {"id": 8130, "synset": "grille.n.02", "name": "grille"}, + {"id": 8131, "synset": "grillroom.n.01", "name": "grillroom"}, + {"id": 8132, "synset": "grinder.n.04", "name": "grinder"}, + {"id": 8133, "synset": "grinding_wheel.n.01", "name": "grinding_wheel"}, + {"id": 8134, "synset": "grindstone.n.01", "name": "grindstone"}, + {"id": 8135, "synset": "gripsack.n.01", "name": "gripsack"}, + {"id": 8136, "synset": "gristmill.n.01", "name": "gristmill"}, + {"id": 8137, "synset": "grocery_store.n.01", "name": "grocery_store"}, + {"id": 8138, "synset": "grogram.n.01", "name": "grogram"}, + {"id": 8139, "synset": "groined_vault.n.01", "name": "groined_vault"}, + {"id": 8140, "synset": "groover.n.01", "name": "groover"}, + {"id": 8141, "synset": "grosgrain.n.01", "name": "grosgrain"}, + {"id": 8142, "synset": "gros_point.n.01", "name": "gros_point"}, + {"id": 8143, "synset": "ground.n.09", "name": "ground"}, + {"id": 8144, "synset": "ground_bait.n.01", "name": "ground_bait"}, + {"id": 8145, "synset": "ground_control.n.01", "name": "ground_control"}, + {"id": 8146, "synset": "ground_floor.n.01", "name": "ground_floor"}, + {"id": 8147, "synset": "groundsheet.n.01", "name": "groundsheet"}, + {"id": 8148, "synset": "g-string.n.01", "name": "G-string"}, + {"id": 8149, "synset": "guard.n.03", "name": "guard"}, + {"id": 8150, "synset": "guard_boat.n.01", "name": "guard_boat"}, + {"id": 8151, "synset": "guardroom.n.02", "name": "guardroom"}, + {"id": 8152, "synset": "guardroom.n.01", "name": "guardroom"}, + {"id": 8153, "synset": "guard_ship.n.01", "name": "guard_ship"}, + {"id": 8154, "synset": "guard's_van.n.01", "name": "guard's_van"}, + {"id": 8155, "synset": "gueridon.n.01", "name": "gueridon"}, + {"id": 8156, "synset": "guarnerius.n.03", "name": "Guarnerius"}, + {"id": 8157, "synset": "guesthouse.n.01", "name": "guesthouse"}, + {"id": 8158, "synset": "guestroom.n.01", "name": "guestroom"}, + {"id": 8159, "synset": "guidance_system.n.01", "name": "guidance_system"}, + {"id": 8160, "synset": "guided_missile.n.01", "name": "guided_missile"}, + { + "id": 8161, + "synset": "guided_missile_cruiser.n.01", + "name": "guided_missile_cruiser", + }, + { + "id": 8162, + "synset": "guided_missile_frigate.n.01", + "name": "guided_missile_frigate", + }, + {"id": 8163, "synset": "guildhall.n.01", "name": "guildhall"}, + {"id": 8164, "synset": "guilloche.n.01", "name": "guilloche"}, + {"id": 8165, "synset": "guillotine.n.02", "name": "guillotine"}, + {"id": 8166, "synset": "guimpe.n.02", "name": "guimpe"}, + {"id": 8167, "synset": "guimpe.n.01", "name": "guimpe"}, + {"id": 8168, "synset": "guitar_pick.n.01", "name": "guitar_pick"}, + {"id": 8169, "synset": "gulag.n.01", "name": "gulag"}, + {"id": 8170, "synset": "gunboat.n.01", "name": "gunboat"}, + {"id": 8171, "synset": "gun_carriage.n.01", "name": "gun_carriage"}, + {"id": 8172, "synset": "gun_case.n.01", "name": "gun_case"}, + {"id": 8173, "synset": "gun_emplacement.n.01", "name": "gun_emplacement"}, + {"id": 8174, "synset": "gun_enclosure.n.01", "name": "gun_enclosure"}, + {"id": 8175, "synset": "gunlock.n.01", "name": "gunlock"}, + {"id": 8176, "synset": "gunnery.n.01", "name": "gunnery"}, + {"id": 8177, "synset": "gunnysack.n.01", "name": "gunnysack"}, + {"id": 8178, "synset": "gun_pendulum.n.01", "name": "gun_pendulum"}, + {"id": 8179, "synset": "gun_room.n.01", "name": "gun_room"}, + {"id": 8180, "synset": "gunsight.n.01", "name": "gunsight"}, + {"id": 8181, "synset": "gun_trigger.n.01", "name": "gun_trigger"}, + {"id": 8182, "synset": "gurney.n.01", "name": "gurney"}, + {"id": 8183, "synset": "gusher.n.01", "name": "gusher"}, + {"id": 8184, "synset": "gusset.n.03", "name": "gusset"}, + {"id": 8185, "synset": "gusset.n.02", "name": "gusset"}, + {"id": 8186, "synset": "guy.n.03", "name": "guy"}, + {"id": 8187, "synset": "gymnastic_apparatus.n.01", "name": "gymnastic_apparatus"}, + {"id": 8188, "synset": "gym_shoe.n.01", "name": "gym_shoe"}, + {"id": 8189, "synset": "gym_suit.n.01", "name": "gym_suit"}, + {"id": 8190, "synset": "gymslip.n.01", "name": "gymslip"}, + {"id": 8191, "synset": "gypsy_cab.n.01", "name": "gypsy_cab"}, + {"id": 8192, "synset": "gyrocompass.n.01", "name": "gyrocompass"}, + {"id": 8193, "synset": "gyroscope.n.01", "name": "gyroscope"}, + {"id": 8194, "synset": "gyrostabilizer.n.01", "name": "gyrostabilizer"}, + {"id": 8195, "synset": "habergeon.n.01", "name": "habergeon"}, + {"id": 8196, "synset": "habit.n.03", "name": "habit"}, + {"id": 8197, "synset": "habit.n.05", "name": "habit"}, + {"id": 8198, "synset": "hacienda.n.02", "name": "hacienda"}, + {"id": 8199, "synset": "hacksaw.n.01", "name": "hacksaw"}, + {"id": 8200, "synset": "haft.n.01", "name": "haft"}, + {"id": 8201, "synset": "haircloth.n.01", "name": "haircloth"}, + {"id": 8202, "synset": "hairdressing.n.01", "name": "hairdressing"}, + {"id": 8203, "synset": "hairpiece.n.01", "name": "hairpiece"}, + {"id": 8204, "synset": "hair_shirt.n.01", "name": "hair_shirt"}, + {"id": 8205, "synset": "hair_slide.n.01", "name": "hair_slide"}, + {"id": 8206, "synset": "hair_spray.n.01", "name": "hair_spray"}, + {"id": 8207, "synset": "hairspring.n.01", "name": "hairspring"}, + {"id": 8208, "synset": "hair_trigger.n.01", "name": "hair_trigger"}, + {"id": 8209, "synset": "halberd.n.01", "name": "halberd"}, + {"id": 8210, "synset": "half_binding.n.01", "name": "half_binding"}, + {"id": 8211, "synset": "half_hatchet.n.01", "name": "half_hatchet"}, + {"id": 8212, "synset": "half_hitch.n.01", "name": "half_hitch"}, + {"id": 8213, "synset": "half_track.n.01", "name": "half_track"}, + {"id": 8214, "synset": "hall.n.13", "name": "hall"}, + {"id": 8215, "synset": "hall.n.03", "name": "hall"}, + {"id": 8216, "synset": "hall.n.12", "name": "hall"}, + {"id": 8217, "synset": "hall_of_fame.n.01", "name": "Hall_of_Fame"}, + {"id": 8218, "synset": "hall_of_residence.n.01", "name": "hall_of_residence"}, + {"id": 8219, "synset": "hallstand.n.01", "name": "hallstand"}, + {"id": 8220, "synset": "halter.n.01", "name": "halter"}, + {"id": 8221, "synset": "hame.n.01", "name": "hame"}, + {"id": 8222, "synset": "hammer.n.07", "name": "hammer"}, + {"id": 8223, "synset": "hammer.n.05", "name": "hammer"}, + {"id": 8224, "synset": "hammerhead.n.02", "name": "hammerhead"}, + {"id": 8225, "synset": "hand.n.08", "name": "hand"}, + {"id": 8226, "synset": "handball.n.01", "name": "handball"}, + {"id": 8227, "synset": "handbarrow.n.01", "name": "handbarrow"}, + {"id": 8228, "synset": "handbell.n.01", "name": "handbell"}, + {"id": 8229, "synset": "handbow.n.01", "name": "handbow"}, + {"id": 8230, "synset": "hand_brake.n.01", "name": "hand_brake"}, + {"id": 8231, "synset": "hand_calculator.n.01", "name": "hand_calculator"}, + {"id": 8232, "synset": "handcar.n.01", "name": "handcar"}, + {"id": 8233, "synset": "hand_cream.n.01", "name": "hand_cream"}, + {"id": 8234, "synset": "hand_drill.n.01", "name": "hand_drill"}, + {"id": 8235, "synset": "hand_glass.n.02", "name": "hand_glass"}, + {"id": 8236, "synset": "hand_grenade.n.01", "name": "hand_grenade"}, + {"id": 8237, "synset": "hand-held_computer.n.01", "name": "hand-held_computer"}, + {"id": 8238, "synset": "handhold.n.01", "name": "handhold"}, + {"id": 8239, "synset": "handlebar.n.01", "name": "handlebar"}, + {"id": 8240, "synset": "handloom.n.01", "name": "handloom"}, + {"id": 8241, "synset": "hand_lotion.n.01", "name": "hand_lotion"}, + {"id": 8242, "synset": "hand_luggage.n.01", "name": "hand_luggage"}, + {"id": 8243, "synset": "hand-me-down.n.01", "name": "hand-me-down"}, + {"id": 8244, "synset": "hand_mower.n.01", "name": "hand_mower"}, + {"id": 8245, "synset": "hand_pump.n.01", "name": "hand_pump"}, + {"id": 8246, "synset": "handrest.n.01", "name": "handrest"}, + {"id": 8247, "synset": "handset.n.01", "name": "handset"}, + {"id": 8248, "synset": "hand_shovel.n.01", "name": "hand_shovel"}, + {"id": 8249, "synset": "handspike.n.01", "name": "handspike"}, + {"id": 8250, "synset": "handstamp.n.01", "name": "handstamp"}, + {"id": 8251, "synset": "hand_throttle.n.01", "name": "hand_throttle"}, + {"id": 8252, "synset": "hand_tool.n.01", "name": "hand_tool"}, + {"id": 8253, "synset": "hand_truck.n.01", "name": "hand_truck"}, + {"id": 8254, "synset": "handwear.n.01", "name": "handwear"}, + {"id": 8255, "synset": "handwheel.n.02", "name": "handwheel"}, + {"id": 8256, "synset": "handwheel.n.01", "name": "handwheel"}, + {"id": 8257, "synset": "hangar_queen.n.01", "name": "hangar_queen"}, + {"id": 8258, "synset": "hanger.n.02", "name": "hanger"}, + {"id": 8259, "synset": "hang_glider.n.02", "name": "hang_glider"}, + {"id": 8260, "synset": "hangman's_rope.n.01", "name": "hangman's_rope"}, + {"id": 8261, "synset": "hank.n.01", "name": "hank"}, + {"id": 8262, "synset": "hansom.n.01", "name": "hansom"}, + {"id": 8263, "synset": "harbor.n.02", "name": "harbor"}, + {"id": 8264, "synset": "hard_disc.n.01", "name": "hard_disc"}, + {"id": 8265, "synset": "hard_hat.n.02", "name": "hard_hat"}, + {"id": 8266, "synset": "hardtop.n.01", "name": "hardtop"}, + {"id": 8267, "synset": "hardware.n.02", "name": "hardware"}, + {"id": 8268, "synset": "hardware_store.n.01", "name": "hardware_store"}, + {"id": 8269, "synset": "harmonica.n.01", "name": "harmonica"}, + {"id": 8270, "synset": "harness.n.02", "name": "harness"}, + {"id": 8271, "synset": "harness.n.01", "name": "harness"}, + {"id": 8272, "synset": "harp.n.01", "name": "harp"}, + {"id": 8273, "synset": "harp.n.02", "name": "harp"}, + {"id": 8274, "synset": "harpoon.n.01", "name": "harpoon"}, + {"id": 8275, "synset": "harpoon_gun.n.01", "name": "harpoon_gun"}, + {"id": 8276, "synset": "harpoon_log.n.01", "name": "harpoon_log"}, + {"id": 8277, "synset": "harpsichord.n.01", "name": "harpsichord"}, + {"id": 8278, "synset": "harris_tweed.n.01", "name": "Harris_Tweed"}, + {"id": 8279, "synset": "harrow.n.01", "name": "harrow"}, + {"id": 8280, "synset": "harvester.n.02", "name": "harvester"}, + {"id": 8281, "synset": "hash_house.n.01", "name": "hash_house"}, + {"id": 8282, "synset": "hasp.n.01", "name": "hasp"}, + {"id": 8283, "synset": "hatch.n.03", "name": "hatch"}, + {"id": 8284, "synset": "hatchback.n.02", "name": "hatchback"}, + {"id": 8285, "synset": "hatchback.n.01", "name": "hatchback"}, + {"id": 8286, "synset": "hatchel.n.01", "name": "hatchel"}, + {"id": 8287, "synset": "hatchet.n.02", "name": "hatchet"}, + {"id": 8288, "synset": "hatpin.n.01", "name": "hatpin"}, + {"id": 8289, "synset": "hauberk.n.01", "name": "hauberk"}, + {"id": 8290, "synset": "hawaiian_guitar.n.01", "name": "Hawaiian_guitar"}, + {"id": 8291, "synset": "hawse.n.01", "name": "hawse"}, + {"id": 8292, "synset": "hawser.n.01", "name": "hawser"}, + {"id": 8293, "synset": "hawser_bend.n.01", "name": "hawser_bend"}, + {"id": 8294, "synset": "hay_bale.n.01", "name": "hay_bale"}, + {"id": 8295, "synset": "hayfork.n.01", "name": "hayfork"}, + {"id": 8296, "synset": "hayloft.n.01", "name": "hayloft"}, + {"id": 8297, "synset": "haymaker.n.01", "name": "haymaker"}, + {"id": 8298, "synset": "hayrack.n.02", "name": "hayrack"}, + {"id": 8299, "synset": "hayrack.n.01", "name": "hayrack"}, + {"id": 8300, "synset": "hazard.n.03", "name": "hazard"}, + {"id": 8301, "synset": "head.n.31", "name": "head"}, + {"id": 8302, "synset": "head.n.30", "name": "head"}, + {"id": 8303, "synset": "head.n.29", "name": "head"}, + {"id": 8304, "synset": "headdress.n.01", "name": "headdress"}, + {"id": 8305, "synset": "header.n.05", "name": "header"}, + {"id": 8306, "synset": "header.n.04", "name": "header"}, + {"id": 8307, "synset": "header.n.03", "name": "header"}, + {"id": 8308, "synset": "header.n.02", "name": "header"}, + {"id": 8309, "synset": "headfast.n.01", "name": "headfast"}, + {"id": 8310, "synset": "head_gasket.n.01", "name": "head_gasket"}, + {"id": 8311, "synset": "head_gate.n.02", "name": "head_gate"}, + {"id": 8312, "synset": "headgear.n.03", "name": "headgear"}, + {"id": 8313, "synset": "headpiece.n.02", "name": "headpiece"}, + {"id": 8314, "synset": "headpin.n.01", "name": "headpin"}, + {"id": 8315, "synset": "headquarters.n.01", "name": "headquarters"}, + {"id": 8316, "synset": "headrace.n.01", "name": "headrace"}, + {"id": 8317, "synset": "headrest.n.02", "name": "headrest"}, + {"id": 8318, "synset": "headsail.n.01", "name": "headsail"}, + {"id": 8319, "synset": "head_shop.n.01", "name": "head_shop"}, + {"id": 8320, "synset": "headstock.n.01", "name": "headstock"}, + {"id": 8321, "synset": "health_spa.n.01", "name": "health_spa"}, + {"id": 8322, "synset": "hearing_aid.n.02", "name": "hearing_aid"}, + {"id": 8323, "synset": "hearing_aid.n.01", "name": "hearing_aid"}, + {"id": 8324, "synset": "hearse.n.01", "name": "hearse"}, + {"id": 8325, "synset": "hearth.n.02", "name": "hearth"}, + {"id": 8326, "synset": "hearthrug.n.01", "name": "hearthrug"}, + {"id": 8327, "synset": "heart-lung_machine.n.01", "name": "heart-lung_machine"}, + {"id": 8328, "synset": "heat_engine.n.01", "name": "heat_engine"}, + {"id": 8329, "synset": "heat_exchanger.n.01", "name": "heat_exchanger"}, + {"id": 8330, "synset": "heating_pad.n.01", "name": "heating_pad"}, + {"id": 8331, "synset": "heat_lamp.n.01", "name": "heat_lamp"}, + {"id": 8332, "synset": "heat_pump.n.01", "name": "heat_pump"}, + {"id": 8333, "synset": "heat-seeking_missile.n.01", "name": "heat-seeking_missile"}, + {"id": 8334, "synset": "heat_shield.n.01", "name": "heat_shield"}, + {"id": 8335, "synset": "heat_sink.n.01", "name": "heat_sink"}, + {"id": 8336, "synset": "heaume.n.01", "name": "heaume"}, + {"id": 8337, "synset": "heaver.n.01", "name": "heaver"}, + { + "id": 8338, + "synset": "heavier-than-air_craft.n.01", + "name": "heavier-than-air_craft", + }, + {"id": 8339, "synset": "heckelphone.n.01", "name": "heckelphone"}, + {"id": 8340, "synset": "hectograph.n.01", "name": "hectograph"}, + {"id": 8341, "synset": "hedge.n.01", "name": "hedge"}, + {"id": 8342, "synset": "hedge_trimmer.n.01", "name": "hedge_trimmer"}, + {"id": 8343, "synset": "helicon.n.01", "name": "helicon"}, + {"id": 8344, "synset": "heliograph.n.01", "name": "heliograph"}, + {"id": 8345, "synset": "heliometer.n.01", "name": "heliometer"}, + {"id": 8346, "synset": "helm.n.01", "name": "helm"}, + {"id": 8347, "synset": "helmet.n.01", "name": "helmet"}, + {"id": 8348, "synset": "hematocrit.n.02", "name": "hematocrit"}, + {"id": 8349, "synset": "hemming-stitch.n.01", "name": "hemming-stitch"}, + {"id": 8350, "synset": "hemostat.n.01", "name": "hemostat"}, + {"id": 8351, "synset": "hemstitch.n.01", "name": "hemstitch"}, + {"id": 8352, "synset": "henroost.n.01", "name": "henroost"}, + {"id": 8353, "synset": "heraldry.n.02", "name": "heraldry"}, + {"id": 8354, "synset": "hermitage.n.01", "name": "hermitage"}, + {"id": 8355, "synset": "herringbone.n.01", "name": "herringbone"}, + {"id": 8356, "synset": "herringbone.n.02", "name": "herringbone"}, + { + "id": 8357, + "synset": "herschelian_telescope.n.01", + "name": "Herschelian_telescope", + }, + {"id": 8358, "synset": "hessian_boot.n.01", "name": "Hessian_boot"}, + {"id": 8359, "synset": "heterodyne_receiver.n.01", "name": "heterodyne_receiver"}, + {"id": 8360, "synset": "hibachi.n.01", "name": "hibachi"}, + {"id": 8361, "synset": "hideaway.n.02", "name": "hideaway"}, + {"id": 8362, "synset": "hi-fi.n.01", "name": "hi-fi"}, + {"id": 8363, "synset": "high_altar.n.01", "name": "high_altar"}, + {"id": 8364, "synset": "high-angle_gun.n.01", "name": "high-angle_gun"}, + {"id": 8365, "synset": "highball_glass.n.01", "name": "highball_glass"}, + {"id": 8366, "synset": "highboard.n.01", "name": "highboard"}, + {"id": 8367, "synset": "highboy.n.01", "name": "highboy"}, + {"id": 8368, "synset": "high_gear.n.01", "name": "high_gear"}, + {"id": 8369, "synset": "high-hat_cymbal.n.01", "name": "high-hat_cymbal"}, + {"id": 8370, "synset": "highlighter.n.02", "name": "highlighter"}, + {"id": 8371, "synset": "highlighter.n.01", "name": "highlighter"}, + {"id": 8372, "synset": "high-pass_filter.n.01", "name": "high-pass_filter"}, + {"id": 8373, "synset": "high-rise.n.01", "name": "high-rise"}, + {"id": 8374, "synset": "high_table.n.01", "name": "high_table"}, + {"id": 8375, "synset": "high-warp_loom.n.01", "name": "high-warp_loom"}, + {"id": 8376, "synset": "hijab.n.01", "name": "hijab"}, + {"id": 8377, "synset": "hinging_post.n.01", "name": "hinging_post"}, + {"id": 8378, "synset": "hip_boot.n.01", "name": "hip_boot"}, + {"id": 8379, "synset": "hipflask.n.01", "name": "hipflask"}, + {"id": 8380, "synset": "hip_pad.n.01", "name": "hip_pad"}, + {"id": 8381, "synset": "hip_pocket.n.01", "name": "hip_pocket"}, + {"id": 8382, "synset": "hippodrome.n.01", "name": "hippodrome"}, + {"id": 8383, "synset": "hip_roof.n.01", "name": "hip_roof"}, + {"id": 8384, "synset": "hitch.n.05", "name": "hitch"}, + {"id": 8385, "synset": "hitch.n.04", "name": "hitch"}, + {"id": 8386, "synset": "hitching_post.n.01", "name": "hitching_post"}, + {"id": 8387, "synset": "hitchrack.n.01", "name": "hitchrack"}, + {"id": 8388, "synset": "hob.n.03", "name": "hob"}, + {"id": 8389, "synset": "hobble_skirt.n.01", "name": "hobble_skirt"}, + {"id": 8390, "synset": "hockey_skate.n.01", "name": "hockey_skate"}, + {"id": 8391, "synset": "hod.n.01", "name": "hod"}, + {"id": 8392, "synset": "hodoscope.n.01", "name": "hodoscope"}, + {"id": 8393, "synset": "hoe.n.01", "name": "hoe"}, + {"id": 8394, "synset": "hoe_handle.n.01", "name": "hoe_handle"}, + {"id": 8395, "synset": "hogshead.n.02", "name": "hogshead"}, + {"id": 8396, "synset": "hoist.n.01", "name": "hoist"}, + {"id": 8397, "synset": "hold.n.07", "name": "hold"}, + {"id": 8398, "synset": "holder.n.01", "name": "holder"}, + {"id": 8399, "synset": "holding_cell.n.01", "name": "holding_cell"}, + {"id": 8400, "synset": "holding_device.n.01", "name": "holding_device"}, + {"id": 8401, "synset": "holding_pen.n.01", "name": "holding_pen"}, + {"id": 8402, "synset": "hollowware.n.01", "name": "hollowware"}, + {"id": 8403, "synset": "holster.n.01", "name": "holster"}, + {"id": 8404, "synset": "holster.n.02", "name": "holster"}, + {"id": 8405, "synset": "holy_of_holies.n.02", "name": "holy_of_holies"}, + {"id": 8406, "synset": "home.n.09", "name": "home"}, + {"id": 8407, "synset": "home_appliance.n.01", "name": "home_appliance"}, + {"id": 8408, "synset": "home_computer.n.01", "name": "home_computer"}, + {"id": 8409, "synset": "home_room.n.01", "name": "home_room"}, + {"id": 8410, "synset": "homespun.n.01", "name": "homespun"}, + {"id": 8411, "synset": "homestead.n.03", "name": "homestead"}, + {"id": 8412, "synset": "home_theater.n.01", "name": "home_theater"}, + {"id": 8413, "synset": "homing_torpedo.n.01", "name": "homing_torpedo"}, + {"id": 8414, "synset": "hone.n.01", "name": "hone"}, + {"id": 8415, "synset": "honeycomb.n.02", "name": "honeycomb"}, + {"id": 8416, "synset": "hood.n.09", "name": "hood"}, + {"id": 8417, "synset": "hood.n.08", "name": "hood"}, + {"id": 8418, "synset": "hood.n.07", "name": "hood"}, + {"id": 8419, "synset": "hood.n.05", "name": "hood"}, + {"id": 8420, "synset": "hood_latch.n.01", "name": "hood_latch"}, + {"id": 8421, "synset": "hook.n.04", "name": "hook"}, + {"id": 8422, "synset": "hook.n.01", "name": "hook"}, + {"id": 8423, "synset": "hook_and_eye.n.01", "name": "hook_and_eye"}, + {"id": 8424, "synset": "hookup.n.02", "name": "hookup"}, + {"id": 8425, "synset": "hookup.n.01", "name": "hookup"}, + {"id": 8426, "synset": "hook_wrench.n.01", "name": "hook_wrench"}, + {"id": 8427, "synset": "hoopskirt.n.01", "name": "hoopskirt"}, + {"id": 8428, "synset": "hoosegow.n.01", "name": "hoosegow"}, + {"id": 8429, "synset": "hoover.n.04", "name": "Hoover"}, + {"id": 8430, "synset": "hope_chest.n.01", "name": "hope_chest"}, + {"id": 8431, "synset": "hopper.n.01", "name": "hopper"}, + {"id": 8432, "synset": "hopsacking.n.01", "name": "hopsacking"}, + {"id": 8433, "synset": "horizontal_bar.n.01", "name": "horizontal_bar"}, + { + "id": 8434, + "synset": "horizontal_stabilizer.n.01", + "name": "horizontal_stabilizer", + }, + {"id": 8435, "synset": "horizontal_tail.n.01", "name": "horizontal_tail"}, + {"id": 8436, "synset": "horn.n.09", "name": "horn"}, + {"id": 8437, "synset": "horn.n.01", "name": "horn"}, + {"id": 8438, "synset": "horn.n.08", "name": "horn"}, + {"id": 8439, "synset": "horn_button.n.01", "name": "horn_button"}, + {"id": 8440, "synset": "hornpipe.n.03", "name": "hornpipe"}, + {"id": 8441, "synset": "horse.n.02", "name": "horse"}, + {"id": 8442, "synset": "horsebox.n.01", "name": "horsebox"}, + {"id": 8443, "synset": "horsecar.n.01", "name": "horsecar"}, + {"id": 8444, "synset": "horse_cart.n.01", "name": "horse_cart"}, + {"id": 8445, "synset": "horsecloth.n.01", "name": "horsecloth"}, + {"id": 8446, "synset": "horse-drawn_vehicle.n.01", "name": "horse-drawn_vehicle"}, + {"id": 8447, "synset": "horsehair.n.02", "name": "horsehair"}, + {"id": 8448, "synset": "horsehair_wig.n.01", "name": "horsehair_wig"}, + {"id": 8449, "synset": "horseless_carriage.n.01", "name": "horseless_carriage"}, + {"id": 8450, "synset": "horse_pistol.n.01", "name": "horse_pistol"}, + {"id": 8451, "synset": "horseshoe.n.02", "name": "horseshoe"}, + {"id": 8452, "synset": "horseshoe.n.01", "name": "horseshoe"}, + {"id": 8453, "synset": "horse-trail.n.01", "name": "horse-trail"}, + {"id": 8454, "synset": "horsewhip.n.01", "name": "horsewhip"}, + {"id": 8455, "synset": "hose.n.02", "name": "hose"}, + {"id": 8456, "synset": "hosiery.n.01", "name": "hosiery"}, + {"id": 8457, "synset": "hospice.n.01", "name": "hospice"}, + {"id": 8458, "synset": "hospital.n.01", "name": "hospital"}, + {"id": 8459, "synset": "hospital_bed.n.01", "name": "hospital_bed"}, + {"id": 8460, "synset": "hospital_room.n.01", "name": "hospital_room"}, + {"id": 8461, "synset": "hospital_ship.n.01", "name": "hospital_ship"}, + {"id": 8462, "synset": "hospital_train.n.01", "name": "hospital_train"}, + {"id": 8463, "synset": "hostel.n.02", "name": "hostel"}, + {"id": 8464, "synset": "hostel.n.01", "name": "hostel"}, + {"id": 8465, "synset": "hotel.n.01", "name": "hotel"}, + {"id": 8466, "synset": "hotel-casino.n.02", "name": "hotel-casino"}, + {"id": 8467, "synset": "hotel-casino.n.01", "name": "hotel-casino"}, + {"id": 8468, "synset": "hotel_room.n.01", "name": "hotel_room"}, + {"id": 8469, "synset": "hot_line.n.01", "name": "hot_line"}, + {"id": 8470, "synset": "hot_pants.n.02", "name": "hot_pants"}, + {"id": 8471, "synset": "hot_rod.n.01", "name": "hot_rod"}, + {"id": 8472, "synset": "hot_spot.n.03", "name": "hot_spot"}, + {"id": 8473, "synset": "hot_tub.n.01", "name": "hot_tub"}, + {"id": 8474, "synset": "hot-water_bottle.n.01", "name": "hot-water_bottle"}, + {"id": 8475, "synset": "houndstooth_check.n.01", "name": "houndstooth_check"}, + {"id": 8476, "synset": "hour_hand.n.01", "name": "hour_hand"}, + {"id": 8477, "synset": "house.n.01", "name": "house"}, + {"id": 8478, "synset": "house.n.12", "name": "house"}, + {"id": 8479, "synset": "houselights.n.01", "name": "houselights"}, + {"id": 8480, "synset": "house_of_cards.n.02", "name": "house_of_cards"}, + {"id": 8481, "synset": "house_of_correction.n.01", "name": "house_of_correction"}, + {"id": 8482, "synset": "house_paint.n.01", "name": "house_paint"}, + {"id": 8483, "synset": "housetop.n.01", "name": "housetop"}, + {"id": 8484, "synset": "housing.n.01", "name": "housing"}, + {"id": 8485, "synset": "hovel.n.01", "name": "hovel"}, + {"id": 8486, "synset": "hovercraft.n.01", "name": "hovercraft"}, + {"id": 8487, "synset": "howdah.n.01", "name": "howdah"}, + {"id": 8488, "synset": "huarache.n.01", "name": "huarache"}, + {"id": 8489, "synset": "hub-and-spoke.n.01", "name": "hub-and-spoke"}, + {"id": 8490, "synset": "hubcap.n.01", "name": "hubcap"}, + {"id": 8491, "synset": "huck.n.01", "name": "huck"}, + {"id": 8492, "synset": "hug-me-tight.n.01", "name": "hug-me-tight"}, + {"id": 8493, "synset": "hula-hoop.n.01", "name": "hula-hoop"}, + {"id": 8494, "synset": "hulk.n.02", "name": "hulk"}, + {"id": 8495, "synset": "hull.n.06", "name": "hull"}, + {"id": 8496, "synset": "humeral_veil.n.01", "name": "humeral_veil"}, + {"id": 8497, "synset": "humvee.n.01", "name": "Humvee"}, + {"id": 8498, "synset": "hunter.n.04", "name": "hunter"}, + {"id": 8499, "synset": "hunting_knife.n.01", "name": "hunting_knife"}, + {"id": 8500, "synset": "hurdle.n.01", "name": "hurdle"}, + {"id": 8501, "synset": "hurricane_deck.n.01", "name": "hurricane_deck"}, + {"id": 8502, "synset": "hurricane_lamp.n.01", "name": "hurricane_lamp"}, + {"id": 8503, "synset": "hut.n.01", "name": "hut"}, + {"id": 8504, "synset": "hutch.n.01", "name": "hutch"}, + {"id": 8505, "synset": "hutment.n.01", "name": "hutment"}, + {"id": 8506, "synset": "hydraulic_brake.n.01", "name": "hydraulic_brake"}, + {"id": 8507, "synset": "hydraulic_press.n.01", "name": "hydraulic_press"}, + {"id": 8508, "synset": "hydraulic_pump.n.01", "name": "hydraulic_pump"}, + {"id": 8509, "synset": "hydraulic_system.n.01", "name": "hydraulic_system"}, + { + "id": 8510, + "synset": "hydraulic_transmission.n.01", + "name": "hydraulic_transmission", + }, + { + "id": 8511, + "synset": "hydroelectric_turbine.n.01", + "name": "hydroelectric_turbine", + }, + {"id": 8512, "synset": "hydrofoil.n.02", "name": "hydrofoil"}, + {"id": 8513, "synset": "hydrofoil.n.01", "name": "hydrofoil"}, + {"id": 8514, "synset": "hydrogen_bomb.n.01", "name": "hydrogen_bomb"}, + {"id": 8515, "synset": "hydrometer.n.01", "name": "hydrometer"}, + {"id": 8516, "synset": "hygrodeik.n.01", "name": "hygrodeik"}, + {"id": 8517, "synset": "hygrometer.n.01", "name": "hygrometer"}, + {"id": 8518, "synset": "hygroscope.n.01", "name": "hygroscope"}, + {"id": 8519, "synset": "hyperbaric_chamber.n.01", "name": "hyperbaric_chamber"}, + {"id": 8520, "synset": "hypercoaster.n.01", "name": "hypercoaster"}, + {"id": 8521, "synset": "hypermarket.n.01", "name": "hypermarket"}, + {"id": 8522, "synset": "hypodermic_needle.n.01", "name": "hypodermic_needle"}, + {"id": 8523, "synset": "hypodermic_syringe.n.01", "name": "hypodermic_syringe"}, + {"id": 8524, "synset": "hypsometer.n.01", "name": "hypsometer"}, + {"id": 8525, "synset": "hysterosalpingogram.n.01", "name": "hysterosalpingogram"}, + {"id": 8526, "synset": "i-beam.n.01", "name": "I-beam"}, + {"id": 8527, "synset": "ice_ax.n.01", "name": "ice_ax"}, + {"id": 8528, "synset": "iceboat.n.02", "name": "iceboat"}, + {"id": 8529, "synset": "icebreaker.n.01", "name": "icebreaker"}, + {"id": 8530, "synset": "iced-tea_spoon.n.01", "name": "iced-tea_spoon"}, + {"id": 8531, "synset": "ice_hockey_rink.n.01", "name": "ice_hockey_rink"}, + {"id": 8532, "synset": "ice_machine.n.01", "name": "ice_machine"}, + {"id": 8533, "synset": "icepick.n.01", "name": "icepick"}, + {"id": 8534, "synset": "ice_rink.n.01", "name": "ice_rink"}, + {"id": 8535, "synset": "ice_tongs.n.01", "name": "ice_tongs"}, + {"id": 8536, "synset": "icetray.n.01", "name": "icetray"}, + {"id": 8537, "synset": "iconoscope.n.01", "name": "iconoscope"}, + {"id": 8538, "synset": "identikit.n.01", "name": "Identikit"}, + {"id": 8539, "synset": "idle_pulley.n.01", "name": "idle_pulley"}, + {"id": 8540, "synset": "igloo.n.01", "name": "igloo"}, + {"id": 8541, "synset": "ignition_coil.n.01", "name": "ignition_coil"}, + {"id": 8542, "synset": "ignition_key.n.01", "name": "ignition_key"}, + {"id": 8543, "synset": "ignition_switch.n.01", "name": "ignition_switch"}, + {"id": 8544, "synset": "imaret.n.01", "name": "imaret"}, + {"id": 8545, "synset": "immovable_bandage.n.01", "name": "immovable_bandage"}, + {"id": 8546, "synset": "impact_printer.n.01", "name": "impact_printer"}, + {"id": 8547, "synset": "impeller.n.01", "name": "impeller"}, + {"id": 8548, "synset": "implant.n.01", "name": "implant"}, + {"id": 8549, "synset": "implement.n.01", "name": "implement"}, + {"id": 8550, "synset": "impression.n.07", "name": "impression"}, + {"id": 8551, "synset": "imprint.n.05", "name": "imprint"}, + { + "id": 8552, + "synset": "improvised_explosive_device.n.01", + "name": "improvised_explosive_device", + }, + {"id": 8553, "synset": "impulse_turbine.n.01", "name": "impulse_turbine"}, + {"id": 8554, "synset": "in-basket.n.01", "name": "in-basket"}, + {"id": 8555, "synset": "incendiary_bomb.n.01", "name": "incendiary_bomb"}, + {"id": 8556, "synset": "incinerator.n.01", "name": "incinerator"}, + {"id": 8557, "synset": "inclined_plane.n.01", "name": "inclined_plane"}, + {"id": 8558, "synset": "inclinometer.n.02", "name": "inclinometer"}, + {"id": 8559, "synset": "inclinometer.n.01", "name": "inclinometer"}, + {"id": 8560, "synset": "incrustation.n.03", "name": "incrustation"}, + {"id": 8561, "synset": "incubator.n.01", "name": "incubator"}, + {"id": 8562, "synset": "index_register.n.01", "name": "index_register"}, + {"id": 8563, "synset": "indiaman.n.01", "name": "Indiaman"}, + {"id": 8564, "synset": "indian_club.n.01", "name": "Indian_club"}, + {"id": 8565, "synset": "indicator.n.03", "name": "indicator"}, + {"id": 8566, "synset": "induction_coil.n.01", "name": "induction_coil"}, + {"id": 8567, "synset": "inductor.n.01", "name": "inductor"}, + { + "id": 8568, + "synset": "industrial_watercourse.n.01", + "name": "industrial_watercourse", + }, + { + "id": 8569, + "synset": "inertial_guidance_system.n.01", + "name": "inertial_guidance_system", + }, + {"id": 8570, "synset": "inflater.n.01", "name": "inflater"}, + {"id": 8571, "synset": "injector.n.01", "name": "injector"}, + {"id": 8572, "synset": "ink_bottle.n.01", "name": "ink_bottle"}, + {"id": 8573, "synset": "ink_eraser.n.01", "name": "ink_eraser"}, + {"id": 8574, "synset": "ink-jet_printer.n.01", "name": "ink-jet_printer"}, + {"id": 8575, "synset": "inkle.n.01", "name": "inkle"}, + {"id": 8576, "synset": "inkstand.n.02", "name": "inkstand"}, + {"id": 8577, "synset": "inkwell.n.01", "name": "inkwell"}, + {"id": 8578, "synset": "inlay.n.01", "name": "inlay"}, + {"id": 8579, "synset": "inside_caliper.n.01", "name": "inside_caliper"}, + {"id": 8580, "synset": "insole.n.01", "name": "insole"}, + {"id": 8581, "synset": "instep.n.02", "name": "instep"}, + {"id": 8582, "synset": "instillator.n.01", "name": "instillator"}, + {"id": 8583, "synset": "institution.n.02", "name": "institution"}, + {"id": 8584, "synset": "instrument.n.01", "name": "instrument"}, + { + "id": 8585, + "synset": "instrument_of_punishment.n.01", + "name": "instrument_of_punishment", + }, + { + "id": 8586, + "synset": "instrument_of_torture.n.01", + "name": "instrument_of_torture", + }, + {"id": 8587, "synset": "intaglio.n.02", "name": "intaglio"}, + {"id": 8588, "synset": "intake_valve.n.01", "name": "intake_valve"}, + {"id": 8589, "synset": "integrated_circuit.n.01", "name": "integrated_circuit"}, + {"id": 8590, "synset": "integrator.n.01", "name": "integrator"}, + {"id": 8591, "synset": "intelnet.n.01", "name": "Intelnet"}, + {"id": 8592, "synset": "interceptor.n.01", "name": "interceptor"}, + {"id": 8593, "synset": "interchange.n.01", "name": "interchange"}, + { + "id": 8594, + "synset": "intercommunication_system.n.01", + "name": "intercommunication_system", + }, + { + "id": 8595, + "synset": "intercontinental_ballistic_missile.n.01", + "name": "intercontinental_ballistic_missile", + }, + {"id": 8596, "synset": "interface.n.04", "name": "interface"}, + {"id": 8597, "synset": "interferometer.n.01", "name": "interferometer"}, + {"id": 8598, "synset": "interior_door.n.01", "name": "interior_door"}, + { + "id": 8599, + "synset": "internal-combustion_engine.n.01", + "name": "internal-combustion_engine", + }, + {"id": 8600, "synset": "internal_drive.n.01", "name": "internal_drive"}, + {"id": 8601, "synset": "internet.n.01", "name": "internet"}, + {"id": 8602, "synset": "interphone.n.01", "name": "interphone"}, + {"id": 8603, "synset": "interrupter.n.01", "name": "interrupter"}, + {"id": 8604, "synset": "intersection.n.02", "name": "intersection"}, + {"id": 8605, "synset": "interstice.n.02", "name": "interstice"}, + {"id": 8606, "synset": "intraocular_lens.n.01", "name": "intraocular_lens"}, + { + "id": 8607, + "synset": "intravenous_pyelogram.n.01", + "name": "intravenous_pyelogram", + }, + {"id": 8608, "synset": "inverter.n.01", "name": "inverter"}, + {"id": 8609, "synset": "ion_engine.n.01", "name": "ion_engine"}, + {"id": 8610, "synset": "ionization_chamber.n.01", "name": "ionization_chamber"}, + {"id": 8611, "synset": "video_ipod.n.01", "name": "video_iPod"}, + {"id": 8612, "synset": "iron.n.02", "name": "iron"}, + {"id": 8613, "synset": "iron.n.03", "name": "iron"}, + {"id": 8614, "synset": "irons.n.01", "name": "irons"}, + {"id": 8615, "synset": "ironclad.n.01", "name": "ironclad"}, + {"id": 8616, "synset": "iron_foundry.n.01", "name": "iron_foundry"}, + {"id": 8617, "synset": "iron_horse.n.01", "name": "iron_horse"}, + {"id": 8618, "synset": "ironing.n.01", "name": "ironing"}, + {"id": 8619, "synset": "iron_lung.n.01", "name": "iron_lung"}, + {"id": 8620, "synset": "ironmongery.n.01", "name": "ironmongery"}, + {"id": 8621, "synset": "ironworks.n.01", "name": "ironworks"}, + {"id": 8622, "synset": "irrigation_ditch.n.01", "name": "irrigation_ditch"}, + {"id": 8623, "synset": "izar.n.01", "name": "izar"}, + {"id": 8624, "synset": "jabot.n.01", "name": "jabot"}, + {"id": 8625, "synset": "jack.n.10", "name": "jack"}, + {"id": 8626, "synset": "jack.n.07", "name": "jack"}, + {"id": 8627, "synset": "jack.n.06", "name": "jack"}, + {"id": 8628, "synset": "jack.n.05", "name": "jack"}, + {"id": 8629, "synset": "jacket.n.02", "name": "jacket"}, + {"id": 8630, "synset": "jacket.n.05", "name": "jacket"}, + {"id": 8631, "synset": "jack-in-the-box.n.01", "name": "jack-in-the-box"}, + {"id": 8632, "synset": "jack-o'-lantern.n.02", "name": "jack-o'-lantern"}, + {"id": 8633, "synset": "jack_plane.n.01", "name": "jack_plane"}, + {"id": 8634, "synset": "jacob's_ladder.n.02", "name": "Jacob's_ladder"}, + {"id": 8635, "synset": "jaconet.n.01", "name": "jaconet"}, + {"id": 8636, "synset": "jacquard_loom.n.01", "name": "Jacquard_loom"}, + {"id": 8637, "synset": "jacquard.n.02", "name": "jacquard"}, + {"id": 8638, "synset": "jag.n.03", "name": "jag"}, + {"id": 8639, "synset": "jail.n.01", "name": "jail"}, + {"id": 8640, "synset": "jalousie.n.02", "name": "jalousie"}, + {"id": 8641, "synset": "jamb.n.01", "name": "jamb"}, + {"id": 8642, "synset": "jammer.n.01", "name": "jammer"}, + {"id": 8643, "synset": "jampot.n.01", "name": "jampot"}, + {"id": 8644, "synset": "japan.n.04", "name": "japan"}, + {"id": 8645, "synset": "jarvik_heart.n.01", "name": "Jarvik_heart"}, + {"id": 8646, "synset": "jaunting_car.n.01", "name": "jaunting_car"}, + {"id": 8647, "synset": "javelin.n.02", "name": "javelin"}, + {"id": 8648, "synset": "jaw.n.03", "name": "jaw"}, + {"id": 8649, "synset": "jaws_of_life.n.01", "name": "Jaws_of_Life"}, + {"id": 8650, "synset": "jellaba.n.01", "name": "jellaba"}, + {"id": 8651, "synset": "jerkin.n.01", "name": "jerkin"}, + {"id": 8652, "synset": "jeroboam.n.02", "name": "jeroboam"}, + {"id": 8653, "synset": "jersey.n.04", "name": "jersey"}, + {"id": 8654, "synset": "jet_bridge.n.01", "name": "jet_bridge"}, + {"id": 8655, "synset": "jet_engine.n.01", "name": "jet_engine"}, + {"id": 8656, "synset": "jetliner.n.01", "name": "jetliner"}, + {"id": 8657, "synset": "jeweler's_glass.n.01", "name": "jeweler's_glass"}, + {"id": 8658, "synset": "jewelled_headdress.n.01", "name": "jewelled_headdress"}, + {"id": 8659, "synset": "jew's_harp.n.01", "name": "jew's_harp"}, + {"id": 8660, "synset": "jib.n.01", "name": "jib"}, + {"id": 8661, "synset": "jibboom.n.01", "name": "jibboom"}, + {"id": 8662, "synset": "jig.n.03", "name": "jig"}, + {"id": 8663, "synset": "jig.n.02", "name": "jig"}, + {"id": 8664, "synset": "jiggermast.n.01", "name": "jiggermast"}, + {"id": 8665, "synset": "jigsaw.n.02", "name": "jigsaw"}, + {"id": 8666, "synset": "jigsaw_puzzle.n.01", "name": "jigsaw_puzzle"}, + {"id": 8667, "synset": "jinrikisha.n.01", "name": "jinrikisha"}, + {"id": 8668, "synset": "jobcentre.n.01", "name": "jobcentre"}, + {"id": 8669, "synset": "jodhpurs.n.01", "name": "jodhpurs"}, + {"id": 8670, "synset": "jodhpur.n.01", "name": "jodhpur"}, + {"id": 8671, "synset": "joinery.n.01", "name": "joinery"}, + {"id": 8672, "synset": "joint.n.05", "name": "joint"}, + { + "id": 8673, + "synset": "joint_direct_attack_munition.n.01", + "name": "Joint_Direct_Attack_Munition", + }, + {"id": 8674, "synset": "jointer.n.01", "name": "jointer"}, + {"id": 8675, "synset": "joist.n.01", "name": "joist"}, + {"id": 8676, "synset": "jolly_boat.n.01", "name": "jolly_boat"}, + {"id": 8677, "synset": "jorum.n.01", "name": "jorum"}, + {"id": 8678, "synset": "joss_house.n.01", "name": "joss_house"}, + {"id": 8679, "synset": "journal_bearing.n.01", "name": "journal_bearing"}, + {"id": 8680, "synset": "journal_box.n.01", "name": "journal_box"}, + {"id": 8681, "synset": "jungle_gym.n.01", "name": "jungle_gym"}, + {"id": 8682, "synset": "junk.n.02", "name": "junk"}, + {"id": 8683, "synset": "jug.n.01", "name": "jug"}, + {"id": 8684, "synset": "jukebox.n.01", "name": "jukebox"}, + {"id": 8685, "synset": "jumbojet.n.01", "name": "jumbojet"}, + {"id": 8686, "synset": "jumper.n.07", "name": "jumper"}, + {"id": 8687, "synset": "jumper.n.06", "name": "jumper"}, + {"id": 8688, "synset": "jumper.n.05", "name": "jumper"}, + {"id": 8689, "synset": "jumper.n.04", "name": "jumper"}, + {"id": 8690, "synset": "jumper_cable.n.01", "name": "jumper_cable"}, + {"id": 8691, "synset": "jump_seat.n.01", "name": "jump_seat"}, + {"id": 8692, "synset": "jump_suit.n.02", "name": "jump_suit"}, + {"id": 8693, "synset": "junction.n.01", "name": "junction"}, + {"id": 8694, "synset": "junction.n.04", "name": "junction"}, + {"id": 8695, "synset": "junction_barrier.n.01", "name": "junction_barrier"}, + {"id": 8696, "synset": "junk_shop.n.01", "name": "junk_shop"}, + {"id": 8697, "synset": "jury_box.n.01", "name": "jury_box"}, + {"id": 8698, "synset": "jury_mast.n.01", "name": "jury_mast"}, + {"id": 8699, "synset": "kachina.n.03", "name": "kachina"}, + {"id": 8700, "synset": "kaffiyeh.n.01", "name": "kaffiyeh"}, + {"id": 8701, "synset": "kalansuwa.n.01", "name": "kalansuwa"}, + {"id": 8702, "synset": "kalashnikov.n.01", "name": "Kalashnikov"}, + {"id": 8703, "synset": "kameez.n.01", "name": "kameez"}, + {"id": 8704, "synset": "kanzu.n.01", "name": "kanzu"}, + {"id": 8705, "synset": "katharometer.n.01", "name": "katharometer"}, + {"id": 8706, "synset": "kazoo.n.01", "name": "kazoo"}, + {"id": 8707, "synset": "keel.n.03", "name": "keel"}, + {"id": 8708, "synset": "keelboat.n.01", "name": "keelboat"}, + {"id": 8709, "synset": "keelson.n.01", "name": "keelson"}, + {"id": 8710, "synset": "keep.n.02", "name": "keep"}, + {"id": 8711, "synset": "kepi.n.01", "name": "kepi"}, + {"id": 8712, "synset": "keratoscope.n.01", "name": "keratoscope"}, + {"id": 8713, "synset": "kerchief.n.01", "name": "kerchief"}, + {"id": 8714, "synset": "ketch.n.01", "name": "ketch"}, + {"id": 8715, "synset": "kettle.n.04", "name": "kettle"}, + {"id": 8716, "synset": "key.n.15", "name": "key"}, + {"id": 8717, "synset": "keyboard.n.01", "name": "keyboard"}, + {"id": 8718, "synset": "keyboard_buffer.n.01", "name": "keyboard_buffer"}, + {"id": 8719, "synset": "keyboard_instrument.n.01", "name": "keyboard_instrument"}, + {"id": 8720, "synset": "keyhole.n.01", "name": "keyhole"}, + {"id": 8721, "synset": "keyhole_saw.n.01", "name": "keyhole_saw"}, + {"id": 8722, "synset": "khadi.n.01", "name": "khadi"}, + {"id": 8723, "synset": "khaki.n.01", "name": "khaki"}, + {"id": 8724, "synset": "khakis.n.01", "name": "khakis"}, + {"id": 8725, "synset": "khimar.n.01", "name": "khimar"}, + {"id": 8726, "synset": "khukuri.n.01", "name": "khukuri"}, + {"id": 8727, "synset": "kick_pleat.n.01", "name": "kick_pleat"}, + {"id": 8728, "synset": "kicksorter.n.01", "name": "kicksorter"}, + {"id": 8729, "synset": "kickstand.n.01", "name": "kickstand"}, + {"id": 8730, "synset": "kick_starter.n.01", "name": "kick_starter"}, + {"id": 8731, "synset": "kid_glove.n.01", "name": "kid_glove"}, + {"id": 8732, "synset": "kiln.n.01", "name": "kiln"}, + {"id": 8733, "synset": "kinescope.n.01", "name": "kinescope"}, + {"id": 8734, "synset": "kinetoscope.n.01", "name": "Kinetoscope"}, + {"id": 8735, "synset": "king.n.10", "name": "king"}, + {"id": 8736, "synset": "king.n.08", "name": "king"}, + {"id": 8737, "synset": "kingbolt.n.01", "name": "kingbolt"}, + {"id": 8738, "synset": "king_post.n.01", "name": "king_post"}, + {"id": 8739, "synset": "kipp's_apparatus.n.01", "name": "Kipp's_apparatus"}, + {"id": 8740, "synset": "kirk.n.01", "name": "kirk"}, + {"id": 8741, "synset": "kirpan.n.01", "name": "kirpan"}, + {"id": 8742, "synset": "kirtle.n.02", "name": "kirtle"}, + {"id": 8743, "synset": "kirtle.n.01", "name": "kirtle"}, + {"id": 8744, "synset": "kit.n.02", "name": "kit"}, + {"id": 8745, "synset": "kit.n.01", "name": "kit"}, + {"id": 8746, "synset": "kitbag.n.01", "name": "kitbag"}, + {"id": 8747, "synset": "kitchen.n.01", "name": "kitchen"}, + {"id": 8748, "synset": "kitchen_appliance.n.01", "name": "kitchen_appliance"}, + {"id": 8749, "synset": "kitchenette.n.01", "name": "kitchenette"}, + {"id": 8750, "synset": "kitchen_utensil.n.01", "name": "kitchen_utensil"}, + {"id": 8751, "synset": "kitchenware.n.01", "name": "kitchenware"}, + {"id": 8752, "synset": "kite_balloon.n.01", "name": "kite_balloon"}, + {"id": 8753, "synset": "klaxon.n.01", "name": "klaxon"}, + {"id": 8754, "synset": "klieg_light.n.01", "name": "klieg_light"}, + {"id": 8755, "synset": "klystron.n.01", "name": "klystron"}, + {"id": 8756, "synset": "knee_brace.n.01", "name": "knee_brace"}, + {"id": 8757, "synset": "knee-high.n.01", "name": "knee-high"}, + {"id": 8758, "synset": "knee_piece.n.01", "name": "knee_piece"}, + {"id": 8759, "synset": "knife.n.02", "name": "knife"}, + {"id": 8760, "synset": "knife_blade.n.01", "name": "knife_blade"}, + {"id": 8761, "synset": "knight.n.02", "name": "knight"}, + {"id": 8762, "synset": "knit.n.01", "name": "knit"}, + {"id": 8763, "synset": "knitting_machine.n.01", "name": "knitting_machine"}, + {"id": 8764, "synset": "knitwear.n.01", "name": "knitwear"}, + {"id": 8765, "synset": "knob.n.01", "name": "knob"}, + {"id": 8766, "synset": "knob.n.04", "name": "knob"}, + {"id": 8767, "synset": "knobble.n.01", "name": "knobble"}, + {"id": 8768, "synset": "knobkerrie.n.01", "name": "knobkerrie"}, + {"id": 8769, "synset": "knot.n.02", "name": "knot"}, + {"id": 8770, "synset": "knuckle_joint.n.02", "name": "knuckle_joint"}, + {"id": 8771, "synset": "kohl.n.01", "name": "kohl"}, + {"id": 8772, "synset": "koto.n.01", "name": "koto"}, + {"id": 8773, "synset": "kraal.n.02", "name": "kraal"}, + {"id": 8774, "synset": "kremlin.n.02", "name": "kremlin"}, + {"id": 8775, "synset": "kris.n.01", "name": "kris"}, + {"id": 8776, "synset": "krummhorn.n.01", "name": "krummhorn"}, + {"id": 8777, "synset": "kundt's_tube.n.01", "name": "Kundt's_tube"}, + {"id": 8778, "synset": "kurdistan.n.02", "name": "Kurdistan"}, + {"id": 8779, "synset": "kurta.n.01", "name": "kurta"}, + {"id": 8780, "synset": "kylix.n.01", "name": "kylix"}, + {"id": 8781, "synset": "kymograph.n.01", "name": "kymograph"}, + {"id": 8782, "synset": "lab_bench.n.01", "name": "lab_bench"}, + {"id": 8783, "synset": "lace.n.02", "name": "lace"}, + {"id": 8784, "synset": "lacquer.n.02", "name": "lacquer"}, + {"id": 8785, "synset": "lacquerware.n.01", "name": "lacquerware"}, + {"id": 8786, "synset": "lacrosse_ball.n.01", "name": "lacrosse_ball"}, + {"id": 8787, "synset": "ladder-back.n.02", "name": "ladder-back"}, + {"id": 8788, "synset": "ladder-back.n.01", "name": "ladder-back"}, + {"id": 8789, "synset": "ladder_truck.n.01", "name": "ladder_truck"}, + {"id": 8790, "synset": "ladies'_room.n.01", "name": "ladies'_room"}, + {"id": 8791, "synset": "lady_chapel.n.01", "name": "lady_chapel"}, + {"id": 8792, "synset": "lagerphone.n.01", "name": "lagerphone"}, + {"id": 8793, "synset": "lag_screw.n.01", "name": "lag_screw"}, + {"id": 8794, "synset": "lake_dwelling.n.01", "name": "lake_dwelling"}, + {"id": 8795, "synset": "lally.n.01", "name": "lally"}, + {"id": 8796, "synset": "lamasery.n.01", "name": "lamasery"}, + {"id": 8797, "synset": "lambrequin.n.02", "name": "lambrequin"}, + {"id": 8798, "synset": "lame.n.02", "name": "lame"}, + { + "id": 8799, + "synset": "laminar_flow_clean_room.n.01", + "name": "laminar_flow_clean_room", + }, + {"id": 8800, "synset": "laminate.n.01", "name": "laminate"}, + {"id": 8801, "synset": "lamination.n.01", "name": "lamination"}, + {"id": 8802, "synset": "lamp.n.01", "name": "lamp"}, + {"id": 8803, "synset": "lamp_house.n.01", "name": "lamp_house"}, + {"id": 8804, "synset": "lanai.n.02", "name": "lanai"}, + {"id": 8805, "synset": "lancet_arch.n.01", "name": "lancet_arch"}, + {"id": 8806, "synset": "lancet_window.n.01", "name": "lancet_window"}, + {"id": 8807, "synset": "landau.n.02", "name": "landau"}, + {"id": 8808, "synset": "lander.n.02", "name": "lander"}, + {"id": 8809, "synset": "landing_craft.n.01", "name": "landing_craft"}, + {"id": 8810, "synset": "landing_flap.n.01", "name": "landing_flap"}, + {"id": 8811, "synset": "landing_gear.n.01", "name": "landing_gear"}, + {"id": 8812, "synset": "landing_net.n.01", "name": "landing_net"}, + {"id": 8813, "synset": "landing_skid.n.01", "name": "landing_skid"}, + {"id": 8814, "synset": "land_line.n.01", "name": "land_line"}, + {"id": 8815, "synset": "land_mine.n.01", "name": "land_mine"}, + {"id": 8816, "synset": "land_office.n.01", "name": "land_office"}, + {"id": 8817, "synset": "lanolin.n.02", "name": "lanolin"}, + {"id": 8818, "synset": "lanyard.n.01", "name": "lanyard"}, + {"id": 8819, "synset": "lap.n.03", "name": "lap"}, + {"id": 8820, "synset": "laparoscope.n.01", "name": "laparoscope"}, + {"id": 8821, "synset": "lapboard.n.01", "name": "lapboard"}, + {"id": 8822, "synset": "lapel.n.01", "name": "lapel"}, + {"id": 8823, "synset": "lap_joint.n.01", "name": "lap_joint"}, + {"id": 8824, "synset": "laryngoscope.n.01", "name": "laryngoscope"}, + {"id": 8825, "synset": "laser.n.01", "name": "laser"}, + {"id": 8826, "synset": "laser-guided_bomb.n.01", "name": "laser-guided_bomb"}, + {"id": 8827, "synset": "laser_printer.n.01", "name": "laser_printer"}, + {"id": 8828, "synset": "lash.n.02", "name": "lash"}, + {"id": 8829, "synset": "lashing.n.02", "name": "lashing"}, + {"id": 8830, "synset": "lasso.n.02", "name": "lasso"}, + {"id": 8831, "synset": "latch.n.01", "name": "latch"}, + {"id": 8832, "synset": "latchet.n.01", "name": "latchet"}, + {"id": 8833, "synset": "latchkey.n.01", "name": "latchkey"}, + {"id": 8834, "synset": "lateen.n.01", "name": "lateen"}, + {"id": 8835, "synset": "latex_paint.n.01", "name": "latex_paint"}, + {"id": 8836, "synset": "lath.n.01", "name": "lath"}, + {"id": 8837, "synset": "lathe.n.01", "name": "lathe"}, + {"id": 8838, "synset": "latrine.n.01", "name": "latrine"}, + {"id": 8839, "synset": "lattice.n.03", "name": "lattice"}, + {"id": 8840, "synset": "launch.n.01", "name": "launch"}, + {"id": 8841, "synset": "launcher.n.01", "name": "launcher"}, + {"id": 8842, "synset": "laundry.n.01", "name": "laundry"}, + {"id": 8843, "synset": "laundry_cart.n.01", "name": "laundry_cart"}, + {"id": 8844, "synset": "laundry_truck.n.01", "name": "laundry_truck"}, + {"id": 8845, "synset": "lavalava.n.01", "name": "lavalava"}, + {"id": 8846, "synset": "lavaliere.n.01", "name": "lavaliere"}, + {"id": 8847, "synset": "laver.n.02", "name": "laver"}, + {"id": 8848, "synset": "lawn_chair.n.01", "name": "lawn_chair"}, + {"id": 8849, "synset": "lawn_furniture.n.01", "name": "lawn_furniture"}, + {"id": 8850, "synset": "layette.n.01", "name": "layette"}, + {"id": 8851, "synset": "lead-acid_battery.n.01", "name": "lead-acid_battery"}, + {"id": 8852, "synset": "lead-in.n.02", "name": "lead-in"}, + {"id": 8853, "synset": "leading_rein.n.01", "name": "leading_rein"}, + {"id": 8854, "synset": "lead_pencil.n.01", "name": "lead_pencil"}, + {"id": 8855, "synset": "leaf_spring.n.01", "name": "leaf_spring"}, + {"id": 8856, "synset": "lean-to.n.01", "name": "lean-to"}, + {"id": 8857, "synset": "lean-to_tent.n.01", "name": "lean-to_tent"}, + {"id": 8858, "synset": "leash.n.01", "name": "leash"}, + {"id": 8859, "synset": "leatherette.n.01", "name": "leatherette"}, + {"id": 8860, "synset": "leather_strip.n.01", "name": "leather_strip"}, + {"id": 8861, "synset": "leclanche_cell.n.01", "name": "Leclanche_cell"}, + {"id": 8862, "synset": "lectern.n.01", "name": "lectern"}, + {"id": 8863, "synset": "lecture_room.n.01", "name": "lecture_room"}, + {"id": 8864, "synset": "lederhosen.n.01", "name": "lederhosen"}, + {"id": 8865, "synset": "ledger_board.n.01", "name": "ledger_board"}, + {"id": 8866, "synset": "leg.n.07", "name": "leg"}, + {"id": 8867, "synset": "leg.n.03", "name": "leg"}, + {"id": 8868, "synset": "leiden_jar.n.01", "name": "Leiden_jar"}, + {"id": 8869, "synset": "leisure_wear.n.01", "name": "leisure_wear"}, + {"id": 8870, "synset": "lens.n.01", "name": "lens"}, + {"id": 8871, "synset": "lens.n.05", "name": "lens"}, + {"id": 8872, "synset": "lens_cap.n.01", "name": "lens_cap"}, + {"id": 8873, "synset": "lens_implant.n.01", "name": "lens_implant"}, + {"id": 8874, "synset": "leotard.n.01", "name": "leotard"}, + {"id": 8875, "synset": "letter_case.n.01", "name": "letter_case"}, + {"id": 8876, "synset": "letter_opener.n.01", "name": "letter_opener"}, + {"id": 8877, "synset": "levee.n.03", "name": "levee"}, + {"id": 8878, "synset": "level.n.05", "name": "level"}, + {"id": 8879, "synset": "lever.n.01", "name": "lever"}, + {"id": 8880, "synset": "lever.n.03", "name": "lever"}, + {"id": 8881, "synset": "lever.n.02", "name": "lever"}, + {"id": 8882, "synset": "lever_lock.n.01", "name": "lever_lock"}, + {"id": 8883, "synset": "levi's.n.01", "name": "Levi's"}, + {"id": 8884, "synset": "liberty_ship.n.01", "name": "Liberty_ship"}, + {"id": 8885, "synset": "library.n.01", "name": "library"}, + {"id": 8886, "synset": "library.n.05", "name": "library"}, + {"id": 8887, "synset": "lid.n.02", "name": "lid"}, + {"id": 8888, "synset": "liebig_condenser.n.01", "name": "Liebig_condenser"}, + {"id": 8889, "synset": "lie_detector.n.01", "name": "lie_detector"}, + {"id": 8890, "synset": "lifeboat.n.01", "name": "lifeboat"}, + {"id": 8891, "synset": "life_office.n.01", "name": "life_office"}, + {"id": 8892, "synset": "life_preserver.n.01", "name": "life_preserver"}, + {"id": 8893, "synset": "life-support_system.n.02", "name": "life-support_system"}, + {"id": 8894, "synset": "life-support_system.n.01", "name": "life-support_system"}, + {"id": 8895, "synset": "lifting_device.n.01", "name": "lifting_device"}, + {"id": 8896, "synset": "lift_pump.n.01", "name": "lift_pump"}, + {"id": 8897, "synset": "ligament.n.02", "name": "ligament"}, + {"id": 8898, "synset": "ligature.n.03", "name": "ligature"}, + {"id": 8899, "synset": "light.n.02", "name": "light"}, + {"id": 8900, "synset": "light_arm.n.01", "name": "light_arm"}, + {"id": 8901, "synset": "light_circuit.n.01", "name": "light_circuit"}, + {"id": 8902, "synset": "light-emitting_diode.n.01", "name": "light-emitting_diode"}, + {"id": 8903, "synset": "lighter.n.02", "name": "lighter"}, + { + "id": 8904, + "synset": "lighter-than-air_craft.n.01", + "name": "lighter-than-air_craft", + }, + {"id": 8905, "synset": "light_filter.n.01", "name": "light_filter"}, + {"id": 8906, "synset": "lighting.n.02", "name": "lighting"}, + {"id": 8907, "synset": "light_machine_gun.n.01", "name": "light_machine_gun"}, + {"id": 8908, "synset": "light_meter.n.01", "name": "light_meter"}, + {"id": 8909, "synset": "light_microscope.n.01", "name": "light_microscope"}, + {"id": 8910, "synset": "light_pen.n.01", "name": "light_pen"}, + {"id": 8911, "synset": "lightship.n.01", "name": "lightship"}, + {"id": 8912, "synset": "lilo.n.01", "name": "Lilo"}, + {"id": 8913, "synset": "limber.n.01", "name": "limber"}, + {"id": 8914, "synset": "limekiln.n.01", "name": "limekiln"}, + {"id": 8915, "synset": "limiter.n.01", "name": "limiter"}, + {"id": 8916, "synset": "linear_accelerator.n.01", "name": "linear_accelerator"}, + {"id": 8917, "synset": "linen.n.01", "name": "linen"}, + {"id": 8918, "synset": "line_printer.n.01", "name": "line_printer"}, + {"id": 8919, "synset": "liner.n.04", "name": "liner"}, + {"id": 8920, "synset": "liner.n.03", "name": "liner"}, + {"id": 8921, "synset": "lingerie.n.01", "name": "lingerie"}, + {"id": 8922, "synset": "lining.n.01", "name": "lining"}, + {"id": 8923, "synset": "link.n.09", "name": "link"}, + {"id": 8924, "synset": "linkage.n.03", "name": "linkage"}, + {"id": 8925, "synset": "link_trainer.n.01", "name": "Link_trainer"}, + {"id": 8926, "synset": "linocut.n.02", "name": "linocut"}, + {"id": 8927, "synset": "linoleum_knife.n.01", "name": "linoleum_knife"}, + {"id": 8928, "synset": "linotype.n.01", "name": "Linotype"}, + {"id": 8929, "synset": "linsey-woolsey.n.01", "name": "linsey-woolsey"}, + {"id": 8930, "synset": "linstock.n.01", "name": "linstock"}, + {"id": 8931, "synset": "lion-jaw_forceps.n.01", "name": "lion-jaw_forceps"}, + {"id": 8932, "synset": "lip-gloss.n.01", "name": "lip-gloss"}, + {"id": 8933, "synset": "lipstick.n.01", "name": "lipstick"}, + {"id": 8934, "synset": "liqueur_glass.n.01", "name": "liqueur_glass"}, + { + "id": 8935, + "synset": "liquid_crystal_display.n.01", + "name": "liquid_crystal_display", + }, + {"id": 8936, "synset": "liquid_metal_reactor.n.01", "name": "liquid_metal_reactor"}, + {"id": 8937, "synset": "lisle.n.01", "name": "lisle"}, + {"id": 8938, "synset": "lister.n.03", "name": "lister"}, + {"id": 8939, "synset": "litterbin.n.01", "name": "litterbin"}, + {"id": 8940, "synset": "little_theater.n.01", "name": "little_theater"}, + {"id": 8941, "synset": "live_axle.n.01", "name": "live_axle"}, + {"id": 8942, "synset": "living_quarters.n.01", "name": "living_quarters"}, + {"id": 8943, "synset": "living_room.n.01", "name": "living_room"}, + {"id": 8944, "synset": "load.n.09", "name": "load"}, + {"id": 8945, "synset": "loafer.n.02", "name": "Loafer"}, + {"id": 8946, "synset": "loaner.n.02", "name": "loaner"}, + {"id": 8947, "synset": "lobe.n.04", "name": "lobe"}, + {"id": 8948, "synset": "lobster_pot.n.01", "name": "lobster_pot"}, + {"id": 8949, "synset": "local.n.01", "name": "local"}, + {"id": 8950, "synset": "local_area_network.n.01", "name": "local_area_network"}, + {"id": 8951, "synset": "local_oscillator.n.01", "name": "local_oscillator"}, + {"id": 8952, "synset": "lochaber_ax.n.01", "name": "Lochaber_ax"}, + {"id": 8953, "synset": "lock.n.01", "name": "lock"}, + {"id": 8954, "synset": "lock.n.05", "name": "lock"}, + {"id": 8955, "synset": "lock.n.04", "name": "lock"}, + {"id": 8956, "synset": "lock.n.03", "name": "lock"}, + {"id": 8957, "synset": "lockage.n.02", "name": "lockage"}, + {"id": 8958, "synset": "locker.n.02", "name": "locker"}, + {"id": 8959, "synset": "locker_room.n.01", "name": "locker_room"}, + {"id": 8960, "synset": "locket.n.01", "name": "locket"}, + {"id": 8961, "synset": "lock-gate.n.01", "name": "lock-gate"}, + {"id": 8962, "synset": "locking_pliers.n.01", "name": "locking_pliers"}, + {"id": 8963, "synset": "lockring.n.01", "name": "lockring"}, + {"id": 8964, "synset": "lockstitch.n.01", "name": "lockstitch"}, + {"id": 8965, "synset": "lockup.n.01", "name": "lockup"}, + {"id": 8966, "synset": "locomotive.n.01", "name": "locomotive"}, + {"id": 8967, "synset": "lodge.n.05", "name": "lodge"}, + {"id": 8968, "synset": "lodge.n.04", "name": "lodge"}, + {"id": 8969, "synset": "lodge.n.03", "name": "lodge"}, + {"id": 8970, "synset": "lodging_house.n.01", "name": "lodging_house"}, + {"id": 8971, "synset": "loft.n.02", "name": "loft"}, + {"id": 8972, "synset": "loft.n.04", "name": "loft"}, + {"id": 8973, "synset": "loft.n.01", "name": "loft"}, + {"id": 8974, "synset": "log_cabin.n.01", "name": "log_cabin"}, + {"id": 8975, "synset": "loggia.n.01", "name": "loggia"}, + {"id": 8976, "synset": "longbow.n.01", "name": "longbow"}, + {"id": 8977, "synset": "long_iron.n.01", "name": "long_iron"}, + {"id": 8978, "synset": "long_johns.n.01", "name": "long_johns"}, + {"id": 8979, "synset": "long_sleeve.n.01", "name": "long_sleeve"}, + {"id": 8980, "synset": "long_tom.n.01", "name": "long_tom"}, + {"id": 8981, "synset": "long_trousers.n.01", "name": "long_trousers"}, + {"id": 8982, "synset": "long_underwear.n.01", "name": "long_underwear"}, + {"id": 8983, "synset": "looking_glass.n.01", "name": "looking_glass"}, + {"id": 8984, "synset": "lookout.n.03", "name": "lookout"}, + {"id": 8985, "synset": "loom.n.01", "name": "loom"}, + {"id": 8986, "synset": "loop_knot.n.01", "name": "loop_knot"}, + {"id": 8987, "synset": "lorgnette.n.01", "name": "lorgnette"}, + {"id": 8988, "synset": "lorraine_cross.n.01", "name": "Lorraine_cross"}, + {"id": 8989, "synset": "lorry.n.02", "name": "lorry"}, + {"id": 8990, "synset": "lota.n.01", "name": "lota"}, + {"id": 8991, "synset": "lotion.n.01", "name": "lotion"}, + {"id": 8992, "synset": "lounge.n.02", "name": "lounge"}, + {"id": 8993, "synset": "lounger.n.03", "name": "lounger"}, + {"id": 8994, "synset": "lounging_jacket.n.01", "name": "lounging_jacket"}, + {"id": 8995, "synset": "lounging_pajama.n.01", "name": "lounging_pajama"}, + {"id": 8996, "synset": "loungewear.n.01", "name": "loungewear"}, + {"id": 8997, "synset": "loupe.n.01", "name": "loupe"}, + {"id": 8998, "synset": "louvered_window.n.01", "name": "louvered_window"}, + {"id": 8999, "synset": "love_knot.n.01", "name": "love_knot"}, + {"id": 9000, "synset": "loving_cup.n.01", "name": "loving_cup"}, + {"id": 9001, "synset": "lowboy.n.01", "name": "lowboy"}, + {"id": 9002, "synset": "low-pass_filter.n.01", "name": "low-pass_filter"}, + {"id": 9003, "synset": "low-warp-loom.n.01", "name": "low-warp-loom"}, + {"id": 9004, "synset": "lp.n.01", "name": "LP"}, + {"id": 9005, "synset": "l-plate.n.01", "name": "L-plate"}, + {"id": 9006, "synset": "lubber's_hole.n.01", "name": "lubber's_hole"}, + {"id": 9007, "synset": "lubricating_system.n.01", "name": "lubricating_system"}, + {"id": 9008, "synset": "luff.n.01", "name": "luff"}, + {"id": 9009, "synset": "lug.n.03", "name": "lug"}, + {"id": 9010, "synset": "luge.n.01", "name": "luge"}, + {"id": 9011, "synset": "luger.n.01", "name": "Luger"}, + {"id": 9012, "synset": "luggage_carrier.n.01", "name": "luggage_carrier"}, + {"id": 9013, "synset": "luggage_compartment.n.01", "name": "luggage_compartment"}, + {"id": 9014, "synset": "luggage_rack.n.01", "name": "luggage_rack"}, + {"id": 9015, "synset": "lugger.n.01", "name": "lugger"}, + {"id": 9016, "synset": "lugsail.n.01", "name": "lugsail"}, + {"id": 9017, "synset": "lug_wrench.n.01", "name": "lug_wrench"}, + {"id": 9018, "synset": "lumberjack.n.02", "name": "lumberjack"}, + {"id": 9019, "synset": "lumbermill.n.01", "name": "lumbermill"}, + { + "id": 9020, + "synset": "lunar_excursion_module.n.01", + "name": "lunar_excursion_module", + }, + {"id": 9021, "synset": "lunchroom.n.01", "name": "lunchroom"}, + {"id": 9022, "synset": "lunette.n.01", "name": "lunette"}, + {"id": 9023, "synset": "lungi.n.01", "name": "lungi"}, + {"id": 9024, "synset": "lunula.n.02", "name": "lunula"}, + {"id": 9025, "synset": "lusterware.n.01", "name": "lusterware"}, + {"id": 9026, "synset": "lute.n.02", "name": "lute"}, + {"id": 9027, "synset": "luxury_liner.n.01", "name": "luxury_liner"}, + {"id": 9028, "synset": "lyceum.n.02", "name": "lyceum"}, + {"id": 9029, "synset": "lychgate.n.01", "name": "lychgate"}, + {"id": 9030, "synset": "lyre.n.01", "name": "lyre"}, + {"id": 9031, "synset": "machete.n.01", "name": "machete"}, + {"id": 9032, "synset": "machicolation.n.01", "name": "machicolation"}, + {"id": 9033, "synset": "machine.n.01", "name": "machine"}, + {"id": 9034, "synset": "machine.n.04", "name": "machine"}, + {"id": 9035, "synset": "machine_bolt.n.01", "name": "machine_bolt"}, + {"id": 9036, "synset": "machinery.n.01", "name": "machinery"}, + {"id": 9037, "synset": "machine_screw.n.01", "name": "machine_screw"}, + {"id": 9038, "synset": "machine_tool.n.01", "name": "machine_tool"}, + {"id": 9039, "synset": "machinist's_vise.n.01", "name": "machinist's_vise"}, + {"id": 9040, "synset": "machmeter.n.01", "name": "machmeter"}, + {"id": 9041, "synset": "mackinaw.n.04", "name": "mackinaw"}, + {"id": 9042, "synset": "mackinaw.n.03", "name": "mackinaw"}, + {"id": 9043, "synset": "mackinaw.n.01", "name": "mackinaw"}, + {"id": 9044, "synset": "mackintosh.n.01", "name": "mackintosh"}, + {"id": 9045, "synset": "macrame.n.01", "name": "macrame"}, + {"id": 9046, "synset": "madras.n.03", "name": "madras"}, + {"id": 9047, "synset": "mae_west.n.02", "name": "Mae_West"}, + {"id": 9048, "synset": "magazine_rack.n.01", "name": "magazine_rack"}, + {"id": 9049, "synset": "magic_lantern.n.01", "name": "magic_lantern"}, + {"id": 9050, "synset": "magnetic_bottle.n.01", "name": "magnetic_bottle"}, + {"id": 9051, "synset": "magnetic_compass.n.01", "name": "magnetic_compass"}, + {"id": 9052, "synset": "magnetic_core_memory.n.01", "name": "magnetic_core_memory"}, + {"id": 9053, "synset": "magnetic_disk.n.01", "name": "magnetic_disk"}, + {"id": 9054, "synset": "magnetic_head.n.01", "name": "magnetic_head"}, + {"id": 9055, "synset": "magnetic_mine.n.01", "name": "magnetic_mine"}, + {"id": 9056, "synset": "magnetic_needle.n.01", "name": "magnetic_needle"}, + {"id": 9057, "synset": "magnetic_recorder.n.01", "name": "magnetic_recorder"}, + {"id": 9058, "synset": "magnetic_stripe.n.01", "name": "magnetic_stripe"}, + {"id": 9059, "synset": "magnetic_tape.n.01", "name": "magnetic_tape"}, + {"id": 9060, "synset": "magneto.n.01", "name": "magneto"}, + {"id": 9061, "synset": "magnetometer.n.01", "name": "magnetometer"}, + {"id": 9062, "synset": "magnetron.n.01", "name": "magnetron"}, + {"id": 9063, "synset": "magnifier.n.01", "name": "magnifier"}, + {"id": 9064, "synset": "magnum.n.01", "name": "magnum"}, + {"id": 9065, "synset": "magnus_hitch.n.01", "name": "magnus_hitch"}, + {"id": 9066, "synset": "mail.n.03", "name": "mail"}, + {"id": 9067, "synset": "mailbag.n.02", "name": "mailbag"}, + {"id": 9068, "synset": "mailbag.n.01", "name": "mailbag"}, + {"id": 9069, "synset": "mailboat.n.01", "name": "mailboat"}, + {"id": 9070, "synset": "mail_car.n.01", "name": "mail_car"}, + {"id": 9071, "synset": "maildrop.n.01", "name": "maildrop"}, + {"id": 9072, "synset": "mailer.n.04", "name": "mailer"}, + {"id": 9073, "synset": "maillot.n.02", "name": "maillot"}, + {"id": 9074, "synset": "maillot.n.01", "name": "maillot"}, + {"id": 9075, "synset": "mailsorter.n.01", "name": "mailsorter"}, + {"id": 9076, "synset": "mail_train.n.01", "name": "mail_train"}, + {"id": 9077, "synset": "mainframe.n.01", "name": "mainframe"}, + {"id": 9078, "synset": "mainmast.n.01", "name": "mainmast"}, + {"id": 9079, "synset": "main_rotor.n.01", "name": "main_rotor"}, + {"id": 9080, "synset": "mainsail.n.01", "name": "mainsail"}, + {"id": 9081, "synset": "mainspring.n.01", "name": "mainspring"}, + {"id": 9082, "synset": "main-topmast.n.01", "name": "main-topmast"}, + {"id": 9083, "synset": "main-topsail.n.01", "name": "main-topsail"}, + {"id": 9084, "synset": "main_yard.n.01", "name": "main_yard"}, + {"id": 9085, "synset": "maisonette.n.02", "name": "maisonette"}, + {"id": 9086, "synset": "majolica.n.01", "name": "majolica"}, + {"id": 9087, "synset": "makeup.n.01", "name": "makeup"}, + {"id": 9088, "synset": "maksutov_telescope.n.01", "name": "Maksutov_telescope"}, + {"id": 9089, "synset": "malacca.n.02", "name": "malacca"}, + {"id": 9090, "synset": "mallet.n.03", "name": "mallet"}, + {"id": 9091, "synset": "mallet.n.02", "name": "mallet"}, + {"id": 9092, "synset": "mammogram.n.01", "name": "mammogram"}, + {"id": 9093, "synset": "mandola.n.01", "name": "mandola"}, + {"id": 9094, "synset": "mandolin.n.01", "name": "mandolin"}, + {"id": 9095, "synset": "mangle.n.01", "name": "mangle"}, + {"id": 9096, "synset": "manhole_cover.n.01", "name": "manhole_cover"}, + {"id": 9097, "synset": "man-of-war.n.01", "name": "man-of-war"}, + {"id": 9098, "synset": "manometer.n.01", "name": "manometer"}, + {"id": 9099, "synset": "manor.n.01", "name": "manor"}, + {"id": 9100, "synset": "manor_hall.n.01", "name": "manor_hall"}, + {"id": 9101, "synset": "manpad.n.01", "name": "MANPAD"}, + {"id": 9102, "synset": "mansard.n.01", "name": "mansard"}, + {"id": 9103, "synset": "manse.n.02", "name": "manse"}, + {"id": 9104, "synset": "mansion.n.02", "name": "mansion"}, + {"id": 9105, "synset": "mantel.n.01", "name": "mantel"}, + {"id": 9106, "synset": "mantelet.n.02", "name": "mantelet"}, + {"id": 9107, "synset": "mantilla.n.01", "name": "mantilla"}, + {"id": 9108, "synset": "mao_jacket.n.01", "name": "Mao_jacket"}, + {"id": 9109, "synset": "maquiladora.n.01", "name": "maquiladora"}, + {"id": 9110, "synset": "maraca.n.01", "name": "maraca"}, + {"id": 9111, "synset": "marble.n.02", "name": "marble"}, + {"id": 9112, "synset": "marching_order.n.01", "name": "marching_order"}, + {"id": 9113, "synset": "marimba.n.01", "name": "marimba"}, + {"id": 9114, "synset": "marina.n.01", "name": "marina"}, + {"id": 9115, "synset": "marketplace.n.02", "name": "marketplace"}, + {"id": 9116, "synset": "marlinespike.n.01", "name": "marlinespike"}, + {"id": 9117, "synset": "marocain.n.01", "name": "marocain"}, + {"id": 9118, "synset": "marquee.n.02", "name": "marquee"}, + {"id": 9119, "synset": "marquetry.n.01", "name": "marquetry"}, + {"id": 9120, "synset": "marriage_bed.n.01", "name": "marriage_bed"}, + {"id": 9121, "synset": "martello_tower.n.01", "name": "martello_tower"}, + {"id": 9122, "synset": "martingale.n.01", "name": "martingale"}, + {"id": 9123, "synset": "mascara.n.01", "name": "mascara"}, + {"id": 9124, "synset": "maser.n.01", "name": "maser"}, + {"id": 9125, "synset": "mashie.n.01", "name": "mashie"}, + {"id": 9126, "synset": "mashie_niblick.n.01", "name": "mashie_niblick"}, + {"id": 9127, "synset": "masjid.n.01", "name": "masjid"}, + {"id": 9128, "synset": "mask.n.01", "name": "mask"}, + {"id": 9129, "synset": "masonite.n.01", "name": "Masonite"}, + {"id": 9130, "synset": "mason_jar.n.01", "name": "Mason_jar"}, + {"id": 9131, "synset": "masonry.n.01", "name": "masonry"}, + {"id": 9132, "synset": "mason's_level.n.01", "name": "mason's_level"}, + {"id": 9133, "synset": "massage_parlor.n.02", "name": "massage_parlor"}, + {"id": 9134, "synset": "massage_parlor.n.01", "name": "massage_parlor"}, + {"id": 9135, "synset": "mass_spectrograph.n.01", "name": "mass_spectrograph"}, + {"id": 9136, "synset": "mass_spectrometer.n.01", "name": "mass_spectrometer"}, + {"id": 9137, "synset": "mast.n.04", "name": "mast"}, + {"id": 9138, "synset": "mastaba.n.01", "name": "mastaba"}, + {"id": 9139, "synset": "master_bedroom.n.01", "name": "master_bedroom"}, + {"id": 9140, "synset": "masterpiece.n.01", "name": "masterpiece"}, + {"id": 9141, "synset": "mat.n.01", "name": "mat"}, + {"id": 9142, "synset": "match.n.01", "name": "match"}, + {"id": 9143, "synset": "match.n.03", "name": "match"}, + {"id": 9144, "synset": "matchboard.n.01", "name": "matchboard"}, + {"id": 9145, "synset": "matchbook.n.01", "name": "matchbook"}, + {"id": 9146, "synset": "matchlock.n.01", "name": "matchlock"}, + {"id": 9147, "synset": "match_plane.n.01", "name": "match_plane"}, + {"id": 9148, "synset": "matchstick.n.01", "name": "matchstick"}, + {"id": 9149, "synset": "material.n.04", "name": "material"}, + {"id": 9150, "synset": "materiel.n.01", "name": "materiel"}, + {"id": 9151, "synset": "maternity_hospital.n.01", "name": "maternity_hospital"}, + {"id": 9152, "synset": "maternity_ward.n.01", "name": "maternity_ward"}, + {"id": 9153, "synset": "matrix.n.06", "name": "matrix"}, + {"id": 9154, "synset": "matthew_walker.n.01", "name": "Matthew_Walker"}, + {"id": 9155, "synset": "matting.n.01", "name": "matting"}, + {"id": 9156, "synset": "mattock.n.01", "name": "mattock"}, + {"id": 9157, "synset": "mattress_cover.n.01", "name": "mattress_cover"}, + {"id": 9158, "synset": "maul.n.01", "name": "maul"}, + {"id": 9159, "synset": "maulstick.n.01", "name": "maulstick"}, + {"id": 9160, "synset": "mauser.n.02", "name": "Mauser"}, + {"id": 9161, "synset": "mausoleum.n.01", "name": "mausoleum"}, + {"id": 9162, "synset": "maxi.n.01", "name": "maxi"}, + {"id": 9163, "synset": "maxim_gun.n.01", "name": "Maxim_gun"}, + { + "id": 9164, + "synset": "maximum_and_minimum_thermometer.n.01", + "name": "maximum_and_minimum_thermometer", + }, + {"id": 9165, "synset": "maypole.n.01", "name": "maypole"}, + {"id": 9166, "synset": "maze.n.01", "name": "maze"}, + {"id": 9167, "synset": "mazer.n.01", "name": "mazer"}, + {"id": 9168, "synset": "means.n.02", "name": "means"}, + {"id": 9169, "synset": "measure.n.09", "name": "measure"}, + {"id": 9170, "synset": "measuring_instrument.n.01", "name": "measuring_instrument"}, + {"id": 9171, "synset": "meat_counter.n.01", "name": "meat_counter"}, + {"id": 9172, "synset": "meat_grinder.n.01", "name": "meat_grinder"}, + {"id": 9173, "synset": "meat_hook.n.01", "name": "meat_hook"}, + {"id": 9174, "synset": "meat_house.n.02", "name": "meat_house"}, + {"id": 9175, "synset": "meat_safe.n.01", "name": "meat_safe"}, + {"id": 9176, "synset": "meat_thermometer.n.01", "name": "meat_thermometer"}, + {"id": 9177, "synset": "mechanical_device.n.01", "name": "mechanical_device"}, + {"id": 9178, "synset": "mechanical_piano.n.01", "name": "mechanical_piano"}, + {"id": 9179, "synset": "mechanical_system.n.01", "name": "mechanical_system"}, + {"id": 9180, "synset": "mechanism.n.05", "name": "mechanism"}, + {"id": 9181, "synset": "medical_building.n.01", "name": "medical_building"}, + {"id": 9182, "synset": "medical_instrument.n.01", "name": "medical_instrument"}, + {"id": 9183, "synset": "medicine_ball.n.01", "name": "medicine_ball"}, + {"id": 9184, "synset": "medicine_chest.n.01", "name": "medicine_chest"}, + {"id": 9185, "synset": "medline.n.01", "name": "MEDLINE"}, + {"id": 9186, "synset": "megalith.n.01", "name": "megalith"}, + {"id": 9187, "synset": "megaphone.n.01", "name": "megaphone"}, + {"id": 9188, "synset": "memorial.n.03", "name": "memorial"}, + {"id": 9189, "synset": "memory.n.04", "name": "memory"}, + {"id": 9190, "synset": "memory_chip.n.01", "name": "memory_chip"}, + {"id": 9191, "synset": "memory_device.n.01", "name": "memory_device"}, + {"id": 9192, "synset": "menagerie.n.02", "name": "menagerie"}, + {"id": 9193, "synset": "mending.n.01", "name": "mending"}, + {"id": 9194, "synset": "menhir.n.01", "name": "menhir"}, + {"id": 9195, "synset": "menorah.n.02", "name": "menorah"}, + {"id": 9196, "synset": "menorah.n.01", "name": "Menorah"}, + {"id": 9197, "synset": "man's_clothing.n.01", "name": "man's_clothing"}, + {"id": 9198, "synset": "men's_room.n.01", "name": "men's_room"}, + { + "id": 9199, + "synset": "mercantile_establishment.n.01", + "name": "mercantile_establishment", + }, + {"id": 9200, "synset": "mercury_barometer.n.01", "name": "mercury_barometer"}, + {"id": 9201, "synset": "mercury_cell.n.01", "name": "mercury_cell"}, + {"id": 9202, "synset": "mercury_thermometer.n.01", "name": "mercury_thermometer"}, + {"id": 9203, "synset": "mercury-vapor_lamp.n.01", "name": "mercury-vapor_lamp"}, + {"id": 9204, "synset": "mercy_seat.n.02", "name": "mercy_seat"}, + {"id": 9205, "synset": "merlon.n.01", "name": "merlon"}, + {"id": 9206, "synset": "mess.n.05", "name": "mess"}, + {"id": 9207, "synset": "mess_jacket.n.01", "name": "mess_jacket"}, + {"id": 9208, "synset": "mess_kit.n.01", "name": "mess_kit"}, + {"id": 9209, "synset": "messuage.n.01", "name": "messuage"}, + {"id": 9210, "synset": "metal_detector.n.01", "name": "metal_detector"}, + {"id": 9211, "synset": "metallic.n.01", "name": "metallic"}, + {"id": 9212, "synset": "metal_screw.n.01", "name": "metal_screw"}, + {"id": 9213, "synset": "metal_wood.n.01", "name": "metal_wood"}, + { + "id": 9214, + "synset": "meteorological_balloon.n.01", + "name": "meteorological_balloon", + }, + {"id": 9215, "synset": "meter.n.02", "name": "meter"}, + {"id": 9216, "synset": "meterstick.n.01", "name": "meterstick"}, + {"id": 9217, "synset": "metronome.n.01", "name": "metronome"}, + {"id": 9218, "synset": "mezzanine.n.02", "name": "mezzanine"}, + {"id": 9219, "synset": "mezzanine.n.01", "name": "mezzanine"}, + {"id": 9220, "synset": "microbalance.n.01", "name": "microbalance"}, + {"id": 9221, "synset": "microbrewery.n.01", "name": "microbrewery"}, + {"id": 9222, "synset": "microfiche.n.01", "name": "microfiche"}, + {"id": 9223, "synset": "microfilm.n.01", "name": "microfilm"}, + {"id": 9224, "synset": "micrometer.n.02", "name": "micrometer"}, + {"id": 9225, "synset": "microprocessor.n.01", "name": "microprocessor"}, + {"id": 9226, "synset": "microtome.n.01", "name": "microtome"}, + { + "id": 9227, + "synset": "microwave_diathermy_machine.n.01", + "name": "microwave_diathermy_machine", + }, + { + "id": 9228, + "synset": "microwave_linear_accelerator.n.01", + "name": "microwave_linear_accelerator", + }, + {"id": 9229, "synset": "middy.n.01", "name": "middy"}, + {"id": 9230, "synset": "midiron.n.01", "name": "midiron"}, + {"id": 9231, "synset": "mihrab.n.02", "name": "mihrab"}, + {"id": 9232, "synset": "mihrab.n.01", "name": "mihrab"}, + {"id": 9233, "synset": "military_hospital.n.01", "name": "military_hospital"}, + {"id": 9234, "synset": "military_quarters.n.01", "name": "military_quarters"}, + {"id": 9235, "synset": "military_uniform.n.01", "name": "military_uniform"}, + {"id": 9236, "synset": "military_vehicle.n.01", "name": "military_vehicle"}, + {"id": 9237, "synset": "milk_bar.n.01", "name": "milk_bar"}, + {"id": 9238, "synset": "milk_float.n.01", "name": "milk_float"}, + {"id": 9239, "synset": "milking_machine.n.01", "name": "milking_machine"}, + {"id": 9240, "synset": "milking_stool.n.01", "name": "milking_stool"}, + {"id": 9241, "synset": "milk_wagon.n.01", "name": "milk_wagon"}, + {"id": 9242, "synset": "mill.n.04", "name": "mill"}, + {"id": 9243, "synset": "milldam.n.01", "name": "milldam"}, + {"id": 9244, "synset": "miller.n.05", "name": "miller"}, + {"id": 9245, "synset": "milliammeter.n.01", "name": "milliammeter"}, + {"id": 9246, "synset": "millinery.n.02", "name": "millinery"}, + {"id": 9247, "synset": "millinery.n.01", "name": "millinery"}, + {"id": 9248, "synset": "milling.n.01", "name": "milling"}, + {"id": 9249, "synset": "millivoltmeter.n.01", "name": "millivoltmeter"}, + {"id": 9250, "synset": "millstone.n.03", "name": "millstone"}, + {"id": 9251, "synset": "millstone.n.02", "name": "millstone"}, + {"id": 9252, "synset": "millwheel.n.01", "name": "millwheel"}, + {"id": 9253, "synset": "mimeograph.n.01", "name": "mimeograph"}, + {"id": 9254, "synset": "minaret.n.01", "name": "minaret"}, + {"id": 9255, "synset": "mincer.n.01", "name": "mincer"}, + {"id": 9256, "synset": "mine.n.02", "name": "mine"}, + {"id": 9257, "synset": "mine_detector.n.01", "name": "mine_detector"}, + {"id": 9258, "synset": "minelayer.n.01", "name": "minelayer"}, + {"id": 9259, "synset": "mineshaft.n.01", "name": "mineshaft"}, + {"id": 9260, "synset": "minibar.n.01", "name": "minibar"}, + {"id": 9261, "synset": "minibike.n.01", "name": "minibike"}, + {"id": 9262, "synset": "minibus.n.01", "name": "minibus"}, + {"id": 9263, "synset": "minicar.n.01", "name": "minicar"}, + {"id": 9264, "synset": "minicomputer.n.01", "name": "minicomputer"}, + {"id": 9265, "synset": "ministry.n.02", "name": "ministry"}, + {"id": 9266, "synset": "miniskirt.n.01", "name": "miniskirt"}, + {"id": 9267, "synset": "minisub.n.01", "name": "minisub"}, + {"id": 9268, "synset": "miniver.n.01", "name": "miniver"}, + {"id": 9269, "synset": "mink.n.02", "name": "mink"}, + {"id": 9270, "synset": "minster.n.01", "name": "minster"}, + {"id": 9271, "synset": "mint.n.06", "name": "mint"}, + {"id": 9272, "synset": "minute_hand.n.01", "name": "minute_hand"}, + {"id": 9273, "synset": "minuteman.n.02", "name": "Minuteman"}, + {"id": 9274, "synset": "missile.n.01", "name": "missile"}, + { + "id": 9275, + "synset": "missile_defense_system.n.01", + "name": "missile_defense_system", + }, + {"id": 9276, "synset": "miter_box.n.01", "name": "miter_box"}, + {"id": 9277, "synset": "miter_joint.n.01", "name": "miter_joint"}, + {"id": 9278, "synset": "mixer.n.03", "name": "mixer"}, + {"id": 9279, "synset": "mixing_bowl.n.01", "name": "mixing_bowl"}, + {"id": 9280, "synset": "mixing_faucet.n.01", "name": "mixing_faucet"}, + {"id": 9281, "synset": "mizzen.n.02", "name": "mizzen"}, + {"id": 9282, "synset": "mizzenmast.n.01", "name": "mizzenmast"}, + {"id": 9283, "synset": "mobcap.n.01", "name": "mobcap"}, + {"id": 9284, "synset": "mobile_home.n.01", "name": "mobile_home"}, + {"id": 9285, "synset": "moccasin.n.01", "name": "moccasin"}, + {"id": 9286, "synset": "mock-up.n.01", "name": "mock-up"}, + {"id": 9287, "synset": "mod_con.n.01", "name": "mod_con"}, + {"id": 9288, "synset": "model_t.n.01", "name": "Model_T"}, + {"id": 9289, "synset": "modem.n.01", "name": "modem"}, + {"id": 9290, "synset": "modillion.n.01", "name": "modillion"}, + {"id": 9291, "synset": "module.n.03", "name": "module"}, + {"id": 9292, "synset": "module.n.02", "name": "module"}, + {"id": 9293, "synset": "mohair.n.01", "name": "mohair"}, + {"id": 9294, "synset": "moire.n.01", "name": "moire"}, + {"id": 9295, "synset": "mold.n.02", "name": "mold"}, + {"id": 9296, "synset": "moldboard.n.01", "name": "moldboard"}, + {"id": 9297, "synset": "moldboard_plow.n.01", "name": "moldboard_plow"}, + {"id": 9298, "synset": "moleskin.n.01", "name": "moleskin"}, + {"id": 9299, "synset": "molotov_cocktail.n.01", "name": "Molotov_cocktail"}, + {"id": 9300, "synset": "monastery.n.01", "name": "monastery"}, + {"id": 9301, "synset": "monastic_habit.n.01", "name": "monastic_habit"}, + {"id": 9302, "synset": "moneybag.n.01", "name": "moneybag"}, + {"id": 9303, "synset": "money_belt.n.01", "name": "money_belt"}, + {"id": 9304, "synset": "monitor.n.06", "name": "monitor"}, + {"id": 9305, "synset": "monitor.n.05", "name": "monitor"}, + {"id": 9306, "synset": "monkey-wrench.n.01", "name": "monkey-wrench"}, + {"id": 9307, "synset": "monk's_cloth.n.01", "name": "monk's_cloth"}, + {"id": 9308, "synset": "monochrome.n.01", "name": "monochrome"}, + {"id": 9309, "synset": "monocle.n.01", "name": "monocle"}, + { + "id": 9310, + "synset": "monofocal_lens_implant.n.01", + "name": "monofocal_lens_implant", + }, + {"id": 9311, "synset": "monoplane.n.01", "name": "monoplane"}, + {"id": 9312, "synset": "monotype.n.02", "name": "monotype"}, + {"id": 9313, "synset": "monstrance.n.02", "name": "monstrance"}, + {"id": 9314, "synset": "mooring_tower.n.01", "name": "mooring_tower"}, + {"id": 9315, "synset": "moorish_arch.n.01", "name": "Moorish_arch"}, + {"id": 9316, "synset": "moped.n.01", "name": "moped"}, + {"id": 9317, "synset": "mop_handle.n.01", "name": "mop_handle"}, + {"id": 9318, "synset": "moquette.n.01", "name": "moquette"}, + {"id": 9319, "synset": "morgue.n.01", "name": "morgue"}, + {"id": 9320, "synset": "morion.n.01", "name": "morion"}, + {"id": 9321, "synset": "morning_dress.n.02", "name": "morning_dress"}, + {"id": 9322, "synset": "morning_dress.n.01", "name": "morning_dress"}, + {"id": 9323, "synset": "morning_room.n.01", "name": "morning_room"}, + {"id": 9324, "synset": "morris_chair.n.01", "name": "Morris_chair"}, + {"id": 9325, "synset": "mortar.n.01", "name": "mortar"}, + {"id": 9326, "synset": "mortar.n.03", "name": "mortar"}, + {"id": 9327, "synset": "mortarboard.n.02", "name": "mortarboard"}, + {"id": 9328, "synset": "mortise_joint.n.02", "name": "mortise_joint"}, + {"id": 9329, "synset": "mosaic.n.05", "name": "mosaic"}, + {"id": 9330, "synset": "mosque.n.01", "name": "mosque"}, + {"id": 9331, "synset": "mosquito_net.n.01", "name": "mosquito_net"}, + {"id": 9332, "synset": "motel.n.01", "name": "motel"}, + {"id": 9333, "synset": "motel_room.n.01", "name": "motel_room"}, + {"id": 9334, "synset": "mother_hubbard.n.01", "name": "Mother_Hubbard"}, + { + "id": 9335, + "synset": "motion-picture_camera.n.01", + "name": "motion-picture_camera", + }, + {"id": 9336, "synset": "motion-picture_film.n.01", "name": "motion-picture_film"}, + {"id": 9337, "synset": "motley.n.03", "name": "motley"}, + {"id": 9338, "synset": "motley.n.02", "name": "motley"}, + {"id": 9339, "synset": "motorboat.n.01", "name": "motorboat"}, + {"id": 9340, "synset": "motor_hotel.n.01", "name": "motor_hotel"}, + {"id": 9341, "synset": "motorized_wheelchair.n.01", "name": "motorized_wheelchair"}, + {"id": 9342, "synset": "mound.n.04", "name": "mound"}, + {"id": 9343, "synset": "mount.n.04", "name": "mount"}, + {"id": 9344, "synset": "mountain_bike.n.01", "name": "mountain_bike"}, + {"id": 9345, "synset": "mountain_tent.n.01", "name": "mountain_tent"}, + {"id": 9346, "synset": "mouse_button.n.01", "name": "mouse_button"}, + {"id": 9347, "synset": "mousetrap.n.01", "name": "mousetrap"}, + {"id": 9348, "synset": "mousse.n.03", "name": "mousse"}, + {"id": 9349, "synset": "mouthpiece.n.06", "name": "mouthpiece"}, + {"id": 9350, "synset": "mouthpiece.n.02", "name": "mouthpiece"}, + {"id": 9351, "synset": "mouthpiece.n.04", "name": "mouthpiece"}, + {"id": 9352, "synset": "movement.n.10", "name": "movement"}, + {"id": 9353, "synset": "movie_projector.n.01", "name": "movie_projector"}, + { + "id": 9354, + "synset": "moving-coil_galvanometer.n.01", + "name": "moving-coil_galvanometer", + }, + {"id": 9355, "synset": "moving_van.n.01", "name": "moving_van"}, + {"id": 9356, "synset": "mud_brick.n.01", "name": "mud_brick"}, + {"id": 9357, "synset": "mudguard.n.01", "name": "mudguard"}, + {"id": 9358, "synset": "mudhif.n.01", "name": "mudhif"}, + {"id": 9359, "synset": "muff.n.01", "name": "muff"}, + {"id": 9360, "synset": "muffle.n.01", "name": "muffle"}, + {"id": 9361, "synset": "muffler.n.02", "name": "muffler"}, + {"id": 9362, "synset": "mufti.n.02", "name": "mufti"}, + {"id": 9363, "synset": "mulch.n.01", "name": "mulch"}, + {"id": 9364, "synset": "mule.n.02", "name": "mule"}, + { + "id": 9365, + "synset": "multichannel_recorder.n.01", + "name": "multichannel_recorder", + }, + {"id": 9366, "synset": "multiengine_airplane.n.01", "name": "multiengine_airplane"}, + {"id": 9367, "synset": "multiplex.n.02", "name": "multiplex"}, + {"id": 9368, "synset": "multiplexer.n.01", "name": "multiplexer"}, + {"id": 9369, "synset": "multiprocessor.n.01", "name": "multiprocessor"}, + {"id": 9370, "synset": "multistage_rocket.n.01", "name": "multistage_rocket"}, + {"id": 9371, "synset": "munition.n.02", "name": "munition"}, + {"id": 9372, "synset": "murphy_bed.n.01", "name": "Murphy_bed"}, + {"id": 9373, "synset": "musette.n.01", "name": "musette"}, + {"id": 9374, "synset": "musette_pipe.n.01", "name": "musette_pipe"}, + {"id": 9375, "synset": "museum.n.01", "name": "museum"}, + {"id": 9376, "synset": "mushroom_anchor.n.01", "name": "mushroom_anchor"}, + {"id": 9377, "synset": "music_box.n.01", "name": "music_box"}, + {"id": 9378, "synset": "music_hall.n.01", "name": "music_hall"}, + {"id": 9379, "synset": "music_school.n.02", "name": "music_school"}, + {"id": 9380, "synset": "music_stand.n.01", "name": "music_stand"}, + {"id": 9381, "synset": "musket.n.01", "name": "musket"}, + {"id": 9382, "synset": "musket_ball.n.01", "name": "musket_ball"}, + {"id": 9383, "synset": "muslin.n.01", "name": "muslin"}, + {"id": 9384, "synset": "mustache_cup.n.01", "name": "mustache_cup"}, + {"id": 9385, "synset": "mustard_plaster.n.01", "name": "mustard_plaster"}, + {"id": 9386, "synset": "mute.n.02", "name": "mute"}, + {"id": 9387, "synset": "muzzle_loader.n.01", "name": "muzzle_loader"}, + {"id": 9388, "synset": "muzzle.n.03", "name": "muzzle"}, + {"id": 9389, "synset": "myelogram.n.01", "name": "myelogram"}, + {"id": 9390, "synset": "nacelle.n.01", "name": "nacelle"}, + {"id": 9391, "synset": "nail.n.02", "name": "nail"}, + {"id": 9392, "synset": "nailbrush.n.01", "name": "nailbrush"}, + {"id": 9393, "synset": "nailhead.n.02", "name": "nailhead"}, + {"id": 9394, "synset": "nailhead.n.01", "name": "nailhead"}, + {"id": 9395, "synset": "nail_polish.n.01", "name": "nail_polish"}, + {"id": 9396, "synset": "nainsook.n.01", "name": "nainsook"}, + {"id": 9397, "synset": "napier's_bones.n.01", "name": "Napier's_bones"}, + {"id": 9398, "synset": "nard.n.01", "name": "nard"}, + {"id": 9399, "synset": "narrowbody_aircraft.n.01", "name": "narrowbody_aircraft"}, + {"id": 9400, "synset": "narrow_wale.n.01", "name": "narrow_wale"}, + {"id": 9401, "synset": "narthex.n.02", "name": "narthex"}, + {"id": 9402, "synset": "narthex.n.01", "name": "narthex"}, + {"id": 9403, "synset": "nasotracheal_tube.n.01", "name": "nasotracheal_tube"}, + {"id": 9404, "synset": "national_monument.n.01", "name": "national_monument"}, + {"id": 9405, "synset": "nautilus.n.01", "name": "nautilus"}, + {"id": 9406, "synset": "navigational_system.n.01", "name": "navigational_system"}, + {"id": 9407, "synset": "naval_equipment.n.01", "name": "naval_equipment"}, + {"id": 9408, "synset": "naval_gun.n.01", "name": "naval_gun"}, + {"id": 9409, "synset": "naval_missile.n.01", "name": "naval_missile"}, + {"id": 9410, "synset": "naval_radar.n.01", "name": "naval_radar"}, + { + "id": 9411, + "synset": "naval_tactical_data_system.n.01", + "name": "naval_tactical_data_system", + }, + {"id": 9412, "synset": "naval_weaponry.n.01", "name": "naval_weaponry"}, + {"id": 9413, "synset": "nave.n.01", "name": "nave"}, + { + "id": 9414, + "synset": "navigational_instrument.n.01", + "name": "navigational_instrument", + }, + {"id": 9415, "synset": "nebuchadnezzar.n.02", "name": "nebuchadnezzar"}, + {"id": 9416, "synset": "neckband.n.01", "name": "neckband"}, + {"id": 9417, "synset": "neck_brace.n.01", "name": "neck_brace"}, + {"id": 9418, "synset": "neckcloth.n.01", "name": "neckcloth"}, + {"id": 9419, "synset": "necklet.n.01", "name": "necklet"}, + {"id": 9420, "synset": "neckline.n.01", "name": "neckline"}, + {"id": 9421, "synset": "neckpiece.n.01", "name": "neckpiece"}, + {"id": 9422, "synset": "neckwear.n.01", "name": "neckwear"}, + {"id": 9423, "synset": "needle.n.02", "name": "needle"}, + {"id": 9424, "synset": "needlenose_pliers.n.01", "name": "needlenose_pliers"}, + {"id": 9425, "synset": "needlework.n.01", "name": "needlework"}, + {"id": 9426, "synset": "negative.n.02", "name": "negative"}, + { + "id": 9427, + "synset": "negative_magnetic_pole.n.01", + "name": "negative_magnetic_pole", + }, + {"id": 9428, "synset": "negative_pole.n.01", "name": "negative_pole"}, + {"id": 9429, "synset": "negligee.n.01", "name": "negligee"}, + {"id": 9430, "synset": "neolith.n.01", "name": "neolith"}, + {"id": 9431, "synset": "neon_lamp.n.01", "name": "neon_lamp"}, + {"id": 9432, "synset": "nephoscope.n.01", "name": "nephoscope"}, + {"id": 9433, "synset": "nest.n.05", "name": "nest"}, + {"id": 9434, "synset": "nest_egg.n.02", "name": "nest_egg"}, + {"id": 9435, "synset": "net.n.06", "name": "net"}, + {"id": 9436, "synset": "net.n.02", "name": "net"}, + {"id": 9437, "synset": "net.n.05", "name": "net"}, + {"id": 9438, "synset": "net.n.04", "name": "net"}, + {"id": 9439, "synset": "network.n.05", "name": "network"}, + {"id": 9440, "synset": "network.n.04", "name": "network"}, + {"id": 9441, "synset": "neutron_bomb.n.01", "name": "neutron_bomb"}, + {"id": 9442, "synset": "newel.n.02", "name": "newel"}, + {"id": 9443, "synset": "newel_post.n.01", "name": "newel_post"}, + {"id": 9444, "synset": "newspaper.n.03", "name": "newspaper"}, + {"id": 9445, "synset": "newsroom.n.03", "name": "newsroom"}, + {"id": 9446, "synset": "newsroom.n.02", "name": "newsroom"}, + {"id": 9447, "synset": "newtonian_telescope.n.01", "name": "Newtonian_telescope"}, + {"id": 9448, "synset": "nib.n.01", "name": "nib"}, + {"id": 9449, "synset": "niblick.n.01", "name": "niblick"}, + {"id": 9450, "synset": "nicad.n.01", "name": "nicad"}, + {"id": 9451, "synset": "nickel-iron_battery.n.01", "name": "nickel-iron_battery"}, + {"id": 9452, "synset": "nicol_prism.n.01", "name": "Nicol_prism"}, + {"id": 9453, "synset": "night_bell.n.01", "name": "night_bell"}, + {"id": 9454, "synset": "nightcap.n.02", "name": "nightcap"}, + {"id": 9455, "synset": "nightgown.n.01", "name": "nightgown"}, + {"id": 9456, "synset": "night_latch.n.01", "name": "night_latch"}, + {"id": 9457, "synset": "night-light.n.01", "name": "night-light"}, + {"id": 9458, "synset": "nightshirt.n.01", "name": "nightshirt"}, + {"id": 9459, "synset": "ninepin.n.01", "name": "ninepin"}, + {"id": 9460, "synset": "ninepin_ball.n.01", "name": "ninepin_ball"}, + {"id": 9461, "synset": "ninon.n.01", "name": "ninon"}, + {"id": 9462, "synset": "nipple.n.02", "name": "nipple"}, + {"id": 9463, "synset": "nipple_shield.n.01", "name": "nipple_shield"}, + {"id": 9464, "synset": "niqab.n.01", "name": "niqab"}, + {"id": 9465, "synset": "nissen_hut.n.01", "name": "Nissen_hut"}, + {"id": 9466, "synset": "nogging.n.01", "name": "nogging"}, + {"id": 9467, "synset": "noisemaker.n.01", "name": "noisemaker"}, + {"id": 9468, "synset": "nonsmoker.n.02", "name": "nonsmoker"}, + {"id": 9469, "synset": "non-volatile_storage.n.01", "name": "non-volatile_storage"}, + {"id": 9470, "synset": "norfolk_jacket.n.01", "name": "Norfolk_jacket"}, + {"id": 9471, "synset": "noria.n.01", "name": "noria"}, + {"id": 9472, "synset": "nose_flute.n.01", "name": "nose_flute"}, + {"id": 9473, "synset": "nosewheel.n.01", "name": "nosewheel"}, + {"id": 9474, "synset": "notebook.n.02", "name": "notebook"}, + {"id": 9475, "synset": "nuclear-powered_ship.n.01", "name": "nuclear-powered_ship"}, + {"id": 9476, "synset": "nuclear_reactor.n.01", "name": "nuclear_reactor"}, + {"id": 9477, "synset": "nuclear_rocket.n.01", "name": "nuclear_rocket"}, + {"id": 9478, "synset": "nuclear_weapon.n.01", "name": "nuclear_weapon"}, + {"id": 9479, "synset": "nude.n.01", "name": "nude"}, + {"id": 9480, "synset": "numdah.n.01", "name": "numdah"}, + {"id": 9481, "synset": "nun's_habit.n.01", "name": "nun's_habit"}, + {"id": 9482, "synset": "nursery.n.01", "name": "nursery"}, + {"id": 9483, "synset": "nut_and_bolt.n.01", "name": "nut_and_bolt"}, + {"id": 9484, "synset": "nylon.n.02", "name": "nylon"}, + {"id": 9485, "synset": "nylons.n.01", "name": "nylons"}, + {"id": 9486, "synset": "oast.n.01", "name": "oast"}, + {"id": 9487, "synset": "oast_house.n.01", "name": "oast_house"}, + {"id": 9488, "synset": "obelisk.n.01", "name": "obelisk"}, + {"id": 9489, "synset": "object_ball.n.01", "name": "object_ball"}, + {"id": 9490, "synset": "objective.n.02", "name": "objective"}, + {"id": 9491, "synset": "oblique_bandage.n.01", "name": "oblique_bandage"}, + {"id": 9492, "synset": "oboe.n.01", "name": "oboe"}, + {"id": 9493, "synset": "oboe_da_caccia.n.01", "name": "oboe_da_caccia"}, + {"id": 9494, "synset": "oboe_d'amore.n.01", "name": "oboe_d'amore"}, + {"id": 9495, "synset": "observation_dome.n.01", "name": "observation_dome"}, + {"id": 9496, "synset": "observatory.n.01", "name": "observatory"}, + {"id": 9497, "synset": "obstacle.n.02", "name": "obstacle"}, + {"id": 9498, "synset": "obturator.n.01", "name": "obturator"}, + {"id": 9499, "synset": "ocarina.n.01", "name": "ocarina"}, + {"id": 9500, "synset": "octant.n.01", "name": "octant"}, + {"id": 9501, "synset": "odd-leg_caliper.n.01", "name": "odd-leg_caliper"}, + {"id": 9502, "synset": "odometer.n.01", "name": "odometer"}, + {"id": 9503, "synset": "oeil_de_boeuf.n.01", "name": "oeil_de_boeuf"}, + {"id": 9504, "synset": "office.n.01", "name": "office"}, + {"id": 9505, "synset": "office_building.n.01", "name": "office_building"}, + {"id": 9506, "synset": "office_furniture.n.01", "name": "office_furniture"}, + {"id": 9507, "synset": "officer's_mess.n.01", "name": "officer's_mess"}, + {"id": 9508, "synset": "off-line_equipment.n.01", "name": "off-line_equipment"}, + {"id": 9509, "synset": "ogee.n.01", "name": "ogee"}, + {"id": 9510, "synset": "ogee_arch.n.01", "name": "ogee_arch"}, + {"id": 9511, "synset": "ohmmeter.n.01", "name": "ohmmeter"}, + {"id": 9512, "synset": "oil.n.02", "name": "oil"}, + {"id": 9513, "synset": "oilcan.n.01", "name": "oilcan"}, + {"id": 9514, "synset": "oilcloth.n.01", "name": "oilcloth"}, + {"id": 9515, "synset": "oil_filter.n.01", "name": "oil_filter"}, + {"id": 9516, "synset": "oil_heater.n.01", "name": "oil_heater"}, + {"id": 9517, "synset": "oil_paint.n.01", "name": "oil_paint"}, + {"id": 9518, "synset": "oil_pump.n.01", "name": "oil_pump"}, + {"id": 9519, "synset": "oil_refinery.n.01", "name": "oil_refinery"}, + {"id": 9520, "synset": "oilskin.n.01", "name": "oilskin"}, + {"id": 9521, "synset": "oil_slick.n.01", "name": "oil_slick"}, + {"id": 9522, "synset": "oilstone.n.01", "name": "oilstone"}, + {"id": 9523, "synset": "oil_tanker.n.01", "name": "oil_tanker"}, + {"id": 9524, "synset": "old_school_tie.n.01", "name": "old_school_tie"}, + {"id": 9525, "synset": "olive_drab.n.03", "name": "olive_drab"}, + {"id": 9526, "synset": "olive_drab.n.02", "name": "olive_drab"}, + {"id": 9527, "synset": "olympian_zeus.n.01", "name": "Olympian_Zeus"}, + {"id": 9528, "synset": "omelet_pan.n.01", "name": "omelet_pan"}, + { + "id": 9529, + "synset": "omnidirectional_antenna.n.01", + "name": "omnidirectional_antenna", + }, + {"id": 9530, "synset": "omnirange.n.01", "name": "omnirange"}, + {"id": 9531, "synset": "onion_dome.n.01", "name": "onion_dome"}, + {"id": 9532, "synset": "open-air_market.n.01", "name": "open-air_market"}, + {"id": 9533, "synset": "open_circuit.n.01", "name": "open_circuit"}, + {"id": 9534, "synset": "open-end_wrench.n.01", "name": "open-end_wrench"}, + {"id": 9535, "synset": "opener.n.03", "name": "opener"}, + {"id": 9536, "synset": "open-hearth_furnace.n.01", "name": "open-hearth_furnace"}, + {"id": 9537, "synset": "openside_plane.n.01", "name": "openside_plane"}, + {"id": 9538, "synset": "open_sight.n.01", "name": "open_sight"}, + {"id": 9539, "synset": "openwork.n.01", "name": "openwork"}, + {"id": 9540, "synset": "opera.n.03", "name": "opera"}, + {"id": 9541, "synset": "opera_cloak.n.01", "name": "opera_cloak"}, + {"id": 9542, "synset": "operating_microscope.n.01", "name": "operating_microscope"}, + {"id": 9543, "synset": "operating_room.n.01", "name": "operating_room"}, + {"id": 9544, "synset": "operating_table.n.01", "name": "operating_table"}, + {"id": 9545, "synset": "ophthalmoscope.n.01", "name": "ophthalmoscope"}, + {"id": 9546, "synset": "optical_device.n.01", "name": "optical_device"}, + {"id": 9547, "synset": "optical_disk.n.01", "name": "optical_disk"}, + {"id": 9548, "synset": "optical_instrument.n.01", "name": "optical_instrument"}, + {"id": 9549, "synset": "optical_pyrometer.n.01", "name": "optical_pyrometer"}, + {"id": 9550, "synset": "optical_telescope.n.01", "name": "optical_telescope"}, + {"id": 9551, "synset": "orchestra_pit.n.01", "name": "orchestra_pit"}, + {"id": 9552, "synset": "ordinary.n.04", "name": "ordinary"}, + {"id": 9553, "synset": "organ.n.05", "name": "organ"}, + {"id": 9554, "synset": "organdy.n.01", "name": "organdy"}, + { + "id": 9555, + "synset": "organic_light-emitting_diode.n.01", + "name": "organic_light-emitting_diode", + }, + {"id": 9556, "synset": "organ_loft.n.01", "name": "organ_loft"}, + {"id": 9557, "synset": "organ_pipe.n.01", "name": "organ_pipe"}, + {"id": 9558, "synset": "organza.n.01", "name": "organza"}, + {"id": 9559, "synset": "oriel.n.01", "name": "oriel"}, + {"id": 9560, "synset": "oriflamme.n.02", "name": "oriflamme"}, + {"id": 9561, "synset": "o_ring.n.01", "name": "O_ring"}, + {"id": 9562, "synset": "orlon.n.01", "name": "Orlon"}, + {"id": 9563, "synset": "orlop_deck.n.01", "name": "orlop_deck"}, + {"id": 9564, "synset": "orphanage.n.02", "name": "orphanage"}, + {"id": 9565, "synset": "orphrey.n.01", "name": "orphrey"}, + {"id": 9566, "synset": "orrery.n.01", "name": "orrery"}, + {"id": 9567, "synset": "orthicon.n.01", "name": "orthicon"}, + {"id": 9568, "synset": "orthochromatic_film.n.01", "name": "orthochromatic_film"}, + {"id": 9569, "synset": "orthopter.n.01", "name": "orthopter"}, + {"id": 9570, "synset": "orthoscope.n.01", "name": "orthoscope"}, + {"id": 9571, "synset": "oscillograph.n.01", "name": "oscillograph"}, + {"id": 9572, "synset": "oscilloscope.n.01", "name": "oscilloscope"}, + {"id": 9573, "synset": "ossuary.n.01", "name": "ossuary"}, + {"id": 9574, "synset": "otoscope.n.01", "name": "otoscope"}, + {"id": 9575, "synset": "oubliette.n.01", "name": "oubliette"}, + {"id": 9576, "synset": "out-basket.n.01", "name": "out-basket"}, + {"id": 9577, "synset": "outboard_motor.n.01", "name": "outboard_motor"}, + {"id": 9578, "synset": "outboard_motorboat.n.01", "name": "outboard_motorboat"}, + {"id": 9579, "synset": "outbuilding.n.01", "name": "outbuilding"}, + {"id": 9580, "synset": "outerwear.n.01", "name": "outerwear"}, + {"id": 9581, "synset": "outfall.n.01", "name": "outfall"}, + {"id": 9582, "synset": "outfit.n.02", "name": "outfit"}, + {"id": 9583, "synset": "outfitter.n.02", "name": "outfitter"}, + {"id": 9584, "synset": "outhouse.n.01", "name": "outhouse"}, + {"id": 9585, "synset": "output_device.n.01", "name": "output_device"}, + {"id": 9586, "synset": "outrigger.n.01", "name": "outrigger"}, + {"id": 9587, "synset": "outrigger_canoe.n.01", "name": "outrigger_canoe"}, + {"id": 9588, "synset": "outside_caliper.n.01", "name": "outside_caliper"}, + {"id": 9589, "synset": "outside_mirror.n.01", "name": "outside_mirror"}, + {"id": 9590, "synset": "outwork.n.01", "name": "outwork"}, + {"id": 9591, "synset": "oven_thermometer.n.01", "name": "oven_thermometer"}, + {"id": 9592, "synset": "overall.n.02", "name": "overall"}, + {"id": 9593, "synset": "overcoat.n.02", "name": "overcoat"}, + {"id": 9594, "synset": "overdrive.n.02", "name": "overdrive"}, + {"id": 9595, "synset": "overgarment.n.01", "name": "overgarment"}, + {"id": 9596, "synset": "overhand_knot.n.01", "name": "overhand_knot"}, + {"id": 9597, "synset": "overhang.n.01", "name": "overhang"}, + {"id": 9598, "synset": "overhead_projector.n.01", "name": "overhead_projector"}, + {"id": 9599, "synset": "overmantel.n.01", "name": "overmantel"}, + {"id": 9600, "synset": "overnighter.n.02", "name": "overnighter"}, + {"id": 9601, "synset": "overpass.n.01", "name": "overpass"}, + {"id": 9602, "synset": "override.n.01", "name": "override"}, + {"id": 9603, "synset": "overshoe.n.01", "name": "overshoe"}, + {"id": 9604, "synset": "overskirt.n.01", "name": "overskirt"}, + {"id": 9605, "synset": "oxbow.n.03", "name": "oxbow"}, + {"id": 9606, "synset": "oxbridge.n.01", "name": "Oxbridge"}, + {"id": 9607, "synset": "oxcart.n.01", "name": "oxcart"}, + {"id": 9608, "synset": "oxeye.n.03", "name": "oxeye"}, + {"id": 9609, "synset": "oxford.n.04", "name": "oxford"}, + {"id": 9610, "synset": "oximeter.n.01", "name": "oximeter"}, + {"id": 9611, "synset": "oxyacetylene_torch.n.01", "name": "oxyacetylene_torch"}, + {"id": 9612, "synset": "oxygen_mask.n.01", "name": "oxygen_mask"}, + {"id": 9613, "synset": "oyster_bar.n.01", "name": "oyster_bar"}, + {"id": 9614, "synset": "oyster_bed.n.01", "name": "oyster_bed"}, + {"id": 9615, "synset": "pace_car.n.01", "name": "pace_car"}, + {"id": 9616, "synset": "pacemaker.n.03", "name": "pacemaker"}, + {"id": 9617, "synset": "pack.n.03", "name": "pack"}, + {"id": 9618, "synset": "pack.n.09", "name": "pack"}, + {"id": 9619, "synset": "pack.n.07", "name": "pack"}, + {"id": 9620, "synset": "package.n.02", "name": "package"}, + {"id": 9621, "synset": "package_store.n.01", "name": "package_store"}, + {"id": 9622, "synset": "packaging.n.03", "name": "packaging"}, + {"id": 9623, "synset": "packing_box.n.02", "name": "packing_box"}, + {"id": 9624, "synset": "packinghouse.n.02", "name": "packinghouse"}, + {"id": 9625, "synset": "packinghouse.n.01", "name": "packinghouse"}, + {"id": 9626, "synset": "packing_needle.n.01", "name": "packing_needle"}, + {"id": 9627, "synset": "packsaddle.n.01", "name": "packsaddle"}, + {"id": 9628, "synset": "paddle.n.02", "name": "paddle"}, + {"id": 9629, "synset": "paddle.n.01", "name": "paddle"}, + {"id": 9630, "synset": "paddle_box.n.01", "name": "paddle_box"}, + {"id": 9631, "synset": "paddle_steamer.n.01", "name": "paddle_steamer"}, + {"id": 9632, "synset": "paddlewheel.n.01", "name": "paddlewheel"}, + {"id": 9633, "synset": "paddock.n.01", "name": "paddock"}, + {"id": 9634, "synset": "page_printer.n.01", "name": "page_printer"}, + {"id": 9635, "synset": "paint.n.01", "name": "paint"}, + {"id": 9636, "synset": "paintball.n.01", "name": "paintball"}, + {"id": 9637, "synset": "paintball_gun.n.01", "name": "paintball_gun"}, + {"id": 9638, "synset": "paintbox.n.01", "name": "paintbox"}, + {"id": 9639, "synset": "paisley.n.01", "name": "paisley"}, + {"id": 9640, "synset": "pajama.n.01", "name": "pajama"}, + {"id": 9641, "synset": "palace.n.04", "name": "palace"}, + {"id": 9642, "synset": "palace.n.01", "name": "palace"}, + {"id": 9643, "synset": "palace.n.03", "name": "palace"}, + {"id": 9644, "synset": "palanquin.n.01", "name": "palanquin"}, + {"id": 9645, "synset": "paleolith.n.01", "name": "paleolith"}, + {"id": 9646, "synset": "palestra.n.01", "name": "palestra"}, + {"id": 9647, "synset": "palette_knife.n.01", "name": "palette_knife"}, + {"id": 9648, "synset": "palisade.n.01", "name": "palisade"}, + {"id": 9649, "synset": "pallet.n.03", "name": "pallet"}, + {"id": 9650, "synset": "pallette.n.01", "name": "pallette"}, + {"id": 9651, "synset": "pallium.n.04", "name": "pallium"}, + {"id": 9652, "synset": "pallium.n.03", "name": "pallium"}, + {"id": 9653, "synset": "pancake_turner.n.01", "name": "pancake_turner"}, + {"id": 9654, "synset": "panchromatic_film.n.01", "name": "panchromatic_film"}, + {"id": 9655, "synset": "panda_car.n.01", "name": "panda_car"}, + {"id": 9656, "synset": "paneling.n.01", "name": "paneling"}, + {"id": 9657, "synset": "panhandle.n.02", "name": "panhandle"}, + {"id": 9658, "synset": "panic_button.n.01", "name": "panic_button"}, + {"id": 9659, "synset": "pannier.n.02", "name": "pannier"}, + {"id": 9660, "synset": "pannier.n.01", "name": "pannier"}, + {"id": 9661, "synset": "pannikin.n.01", "name": "pannikin"}, + {"id": 9662, "synset": "panopticon.n.02", "name": "panopticon"}, + {"id": 9663, "synset": "panopticon.n.01", "name": "panopticon"}, + {"id": 9664, "synset": "panpipe.n.01", "name": "panpipe"}, + {"id": 9665, "synset": "pantaloon.n.03", "name": "pantaloon"}, + {"id": 9666, "synset": "pantechnicon.n.01", "name": "pantechnicon"}, + {"id": 9667, "synset": "pantheon.n.03", "name": "pantheon"}, + {"id": 9668, "synset": "pantheon.n.02", "name": "pantheon"}, + {"id": 9669, "synset": "pantie.n.01", "name": "pantie"}, + {"id": 9670, "synset": "panting.n.02", "name": "panting"}, + {"id": 9671, "synset": "pant_leg.n.01", "name": "pant_leg"}, + {"id": 9672, "synset": "pantograph.n.01", "name": "pantograph"}, + {"id": 9673, "synset": "pantry.n.01", "name": "pantry"}, + {"id": 9674, "synset": "pants_suit.n.01", "name": "pants_suit"}, + {"id": 9675, "synset": "panty_girdle.n.01", "name": "panty_girdle"}, + {"id": 9676, "synset": "panzer.n.01", "name": "panzer"}, + {"id": 9677, "synset": "paper_chain.n.01", "name": "paper_chain"}, + {"id": 9678, "synset": "paper_clip.n.01", "name": "paper_clip"}, + {"id": 9679, "synset": "paper_cutter.n.01", "name": "paper_cutter"}, + {"id": 9680, "synset": "paper_fastener.n.01", "name": "paper_fastener"}, + {"id": 9681, "synset": "paper_feed.n.01", "name": "paper_feed"}, + {"id": 9682, "synset": "paper_mill.n.01", "name": "paper_mill"}, + {"id": 9683, "synset": "parabolic_mirror.n.01", "name": "parabolic_mirror"}, + {"id": 9684, "synset": "parabolic_reflector.n.01", "name": "parabolic_reflector"}, + {"id": 9685, "synset": "parallel_bars.n.01", "name": "parallel_bars"}, + {"id": 9686, "synset": "parallel_circuit.n.01", "name": "parallel_circuit"}, + {"id": 9687, "synset": "parallel_interface.n.01", "name": "parallel_interface"}, + {"id": 9688, "synset": "parang.n.01", "name": "parang"}, + {"id": 9689, "synset": "parapet.n.02", "name": "parapet"}, + {"id": 9690, "synset": "parapet.n.01", "name": "parapet"}, + {"id": 9691, "synset": "parer.n.02", "name": "parer"}, + {"id": 9692, "synset": "parfait_glass.n.01", "name": "parfait_glass"}, + {"id": 9693, "synset": "pargeting.n.02", "name": "pargeting"}, + {"id": 9694, "synset": "pari-mutuel_machine.n.01", "name": "pari-mutuel_machine"}, + {"id": 9695, "synset": "park_bench.n.01", "name": "park_bench"}, + {"id": 9696, "synset": "parlor.n.01", "name": "parlor"}, + {"id": 9697, "synset": "parquet.n.01", "name": "parquet"}, + {"id": 9698, "synset": "parquetry.n.01", "name": "parquetry"}, + {"id": 9699, "synset": "parsonage.n.01", "name": "parsonage"}, + {"id": 9700, "synset": "parsons_table.n.01", "name": "Parsons_table"}, + {"id": 9701, "synset": "partial_denture.n.01", "name": "partial_denture"}, + {"id": 9702, "synset": "particle_detector.n.01", "name": "particle_detector"}, + {"id": 9703, "synset": "partition.n.01", "name": "partition"}, + {"id": 9704, "synset": "parts_bin.n.01", "name": "parts_bin"}, + {"id": 9705, "synset": "party_line.n.02", "name": "party_line"}, + {"id": 9706, "synset": "party_wall.n.01", "name": "party_wall"}, + {"id": 9707, "synset": "parvis.n.01", "name": "parvis"}, + {"id": 9708, "synset": "passenger_train.n.01", "name": "passenger_train"}, + {"id": 9709, "synset": "passenger_van.n.01", "name": "passenger_van"}, + {"id": 9710, "synset": "passe-partout.n.02", "name": "passe-partout"}, + { + "id": 9711, + "synset": "passive_matrix_display.n.01", + "name": "passive_matrix_display", + }, + {"id": 9712, "synset": "passkey.n.01", "name": "passkey"}, + {"id": 9713, "synset": "pass-through.n.01", "name": "pass-through"}, + {"id": 9714, "synset": "pastry_cart.n.01", "name": "pastry_cart"}, + {"id": 9715, "synset": "patch.n.03", "name": "patch"}, + {"id": 9716, "synset": "patchcord.n.01", "name": "patchcord"}, + {"id": 9717, "synset": "patchouli.n.02", "name": "patchouli"}, + {"id": 9718, "synset": "patch_pocket.n.01", "name": "patch_pocket"}, + {"id": 9719, "synset": "patchwork.n.02", "name": "patchwork"}, + {"id": 9720, "synset": "patent_log.n.01", "name": "patent_log"}, + {"id": 9721, "synset": "paternoster.n.02", "name": "paternoster"}, + {"id": 9722, "synset": "patina.n.01", "name": "patina"}, + {"id": 9723, "synset": "patio.n.01", "name": "patio"}, + {"id": 9724, "synset": "patisserie.n.01", "name": "patisserie"}, + {"id": 9725, "synset": "patka.n.01", "name": "patka"}, + {"id": 9726, "synset": "patrol_boat.n.01", "name": "patrol_boat"}, + {"id": 9727, "synset": "patty-pan.n.01", "name": "patty-pan"}, + {"id": 9728, "synset": "pave.n.01", "name": "pave"}, + {"id": 9729, "synset": "pavilion.n.01", "name": "pavilion"}, + {"id": 9730, "synset": "pavior.n.01", "name": "pavior"}, + {"id": 9731, "synset": "pavis.n.01", "name": "pavis"}, + {"id": 9732, "synset": "pawn.n.03", "name": "pawn"}, + {"id": 9733, "synset": "pawnbroker's_shop.n.01", "name": "pawnbroker's_shop"}, + {"id": 9734, "synset": "pay-phone.n.01", "name": "pay-phone"}, + {"id": 9735, "synset": "pc_board.n.01", "name": "PC_board"}, + {"id": 9736, "synset": "peach_orchard.n.01", "name": "peach_orchard"}, + {"id": 9737, "synset": "pea_jacket.n.01", "name": "pea_jacket"}, + {"id": 9738, "synset": "peavey.n.01", "name": "peavey"}, + {"id": 9739, "synset": "pectoral.n.02", "name": "pectoral"}, + {"id": 9740, "synset": "pedal.n.02", "name": "pedal"}, + {"id": 9741, "synset": "pedal_pusher.n.01", "name": "pedal_pusher"}, + {"id": 9742, "synset": "pedestal.n.03", "name": "pedestal"}, + {"id": 9743, "synset": "pedestal_table.n.01", "name": "pedestal_table"}, + {"id": 9744, "synset": "pedestrian_crossing.n.01", "name": "pedestrian_crossing"}, + {"id": 9745, "synset": "pedicab.n.01", "name": "pedicab"}, + {"id": 9746, "synset": "pediment.n.01", "name": "pediment"}, + {"id": 9747, "synset": "pedometer.n.01", "name": "pedometer"}, + {"id": 9748, "synset": "peep_sight.n.01", "name": "peep_sight"}, + {"id": 9749, "synset": "peg.n.01", "name": "peg"}, + {"id": 9750, "synset": "peg.n.06", "name": "peg"}, + {"id": 9751, "synset": "peg.n.05", "name": "peg"}, + {"id": 9752, "synset": "pelham.n.01", "name": "Pelham"}, + {"id": 9753, "synset": "pelican_crossing.n.01", "name": "pelican_crossing"}, + {"id": 9754, "synset": "pelisse.n.01", "name": "pelisse"}, + {"id": 9755, "synset": "pelvimeter.n.01", "name": "pelvimeter"}, + {"id": 9756, "synset": "penal_colony.n.01", "name": "penal_colony"}, + {"id": 9757, "synset": "penal_institution.n.01", "name": "penal_institution"}, + {"id": 9758, "synset": "penalty_box.n.01", "name": "penalty_box"}, + {"id": 9759, "synset": "pen-and-ink.n.01", "name": "pen-and-ink"}, + {"id": 9760, "synset": "pencil.n.04", "name": "pencil"}, + {"id": 9761, "synset": "pendant_earring.n.01", "name": "pendant_earring"}, + {"id": 9762, "synset": "pendulum_clock.n.01", "name": "pendulum_clock"}, + {"id": 9763, "synset": "pendulum_watch.n.01", "name": "pendulum_watch"}, + {"id": 9764, "synset": "penetration_bomb.n.01", "name": "penetration_bomb"}, + {"id": 9765, "synset": "penile_implant.n.01", "name": "penile_implant"}, + {"id": 9766, "synset": "penitentiary.n.01", "name": "penitentiary"}, + {"id": 9767, "synset": "penknife.n.01", "name": "penknife"}, + {"id": 9768, "synset": "penlight.n.01", "name": "penlight"}, + {"id": 9769, "synset": "pennant.n.03", "name": "pennant"}, + {"id": 9770, "synset": "pennywhistle.n.01", "name": "pennywhistle"}, + {"id": 9771, "synset": "penthouse.n.01", "name": "penthouse"}, + {"id": 9772, "synset": "pentode.n.01", "name": "pentode"}, + {"id": 9773, "synset": "peplos.n.01", "name": "peplos"}, + {"id": 9774, "synset": "peplum.n.01", "name": "peplum"}, + {"id": 9775, "synset": "pepper_shaker.n.01", "name": "pepper_shaker"}, + {"id": 9776, "synset": "pepper_spray.n.01", "name": "pepper_spray"}, + {"id": 9777, "synset": "percale.n.01", "name": "percale"}, + {"id": 9778, "synset": "percolator.n.01", "name": "percolator"}, + {"id": 9779, "synset": "percussion_cap.n.01", "name": "percussion_cap"}, + { + "id": 9780, + "synset": "percussion_instrument.n.01", + "name": "percussion_instrument", + }, + {"id": 9781, "synset": "perforation.n.01", "name": "perforation"}, + {"id": 9782, "synset": "perfumery.n.03", "name": "perfumery"}, + {"id": 9783, "synset": "perfumery.n.02", "name": "perfumery"}, + {"id": 9784, "synset": "perfumery.n.01", "name": "perfumery"}, + {"id": 9785, "synset": "peripheral.n.01", "name": "peripheral"}, + {"id": 9786, "synset": "periscope.n.01", "name": "periscope"}, + {"id": 9787, "synset": "peristyle.n.01", "name": "peristyle"}, + {"id": 9788, "synset": "periwig.n.01", "name": "periwig"}, + {"id": 9789, "synset": "permanent_press.n.01", "name": "permanent_press"}, + { + "id": 9790, + "synset": "perpetual_motion_machine.n.01", + "name": "perpetual_motion_machine", + }, + {"id": 9791, "synset": "personal_computer.n.01", "name": "personal_computer"}, + { + "id": 9792, + "synset": "personal_digital_assistant.n.01", + "name": "personal_digital_assistant", + }, + {"id": 9793, "synset": "personnel_carrier.n.01", "name": "personnel_carrier"}, + {"id": 9794, "synset": "pestle.n.03", "name": "pestle"}, + {"id": 9795, "synset": "pestle.n.02", "name": "pestle"}, + {"id": 9796, "synset": "petcock.n.01", "name": "petcock"}, + {"id": 9797, "synset": "petri_dish.n.01", "name": "Petri_dish"}, + {"id": 9798, "synset": "petrolatum_gauze.n.01", "name": "petrolatum_gauze"}, + {"id": 9799, "synset": "pet_shop.n.01", "name": "pet_shop"}, + {"id": 9800, "synset": "petticoat.n.01", "name": "petticoat"}, + {"id": 9801, "synset": "phial.n.01", "name": "phial"}, + {"id": 9802, "synset": "phillips_screw.n.01", "name": "Phillips_screw"}, + {"id": 9803, "synset": "phillips_screwdriver.n.01", "name": "Phillips_screwdriver"}, + {"id": 9804, "synset": "phonograph_needle.n.01", "name": "phonograph_needle"}, + {"id": 9805, "synset": "photocathode.n.01", "name": "photocathode"}, + {"id": 9806, "synset": "photocoagulator.n.01", "name": "photocoagulator"}, + {"id": 9807, "synset": "photocopier.n.01", "name": "photocopier"}, + { + "id": 9808, + "synset": "photographic_equipment.n.01", + "name": "photographic_equipment", + }, + {"id": 9809, "synset": "photographic_paper.n.01", "name": "photographic_paper"}, + {"id": 9810, "synset": "photometer.n.01", "name": "photometer"}, + {"id": 9811, "synset": "photomicrograph.n.01", "name": "photomicrograph"}, + {"id": 9812, "synset": "photostat.n.02", "name": "Photostat"}, + {"id": 9813, "synset": "photostat.n.01", "name": "photostat"}, + {"id": 9814, "synset": "physical_pendulum.n.01", "name": "physical_pendulum"}, + {"id": 9815, "synset": "piano_action.n.01", "name": "piano_action"}, + {"id": 9816, "synset": "piano_keyboard.n.01", "name": "piano_keyboard"}, + {"id": 9817, "synset": "piano_wire.n.01", "name": "piano_wire"}, + {"id": 9818, "synset": "piccolo.n.01", "name": "piccolo"}, + {"id": 9819, "synset": "pick.n.07", "name": "pick"}, + {"id": 9820, "synset": "pick.n.06", "name": "pick"}, + {"id": 9821, "synset": "pick.n.05", "name": "pick"}, + {"id": 9822, "synset": "pickelhaube.n.01", "name": "pickelhaube"}, + {"id": 9823, "synset": "picket_boat.n.01", "name": "picket_boat"}, + {"id": 9824, "synset": "picket_fence.n.01", "name": "picket_fence"}, + {"id": 9825, "synset": "picket_ship.n.01", "name": "picket_ship"}, + {"id": 9826, "synset": "pickle_barrel.n.01", "name": "pickle_barrel"}, + {"id": 9827, "synset": "picture_frame.n.01", "name": "picture_frame"}, + {"id": 9828, "synset": "picture_hat.n.01", "name": "picture_hat"}, + {"id": 9829, "synset": "picture_rail.n.01", "name": "picture_rail"}, + {"id": 9830, "synset": "picture_window.n.01", "name": "picture_window"}, + {"id": 9831, "synset": "piece_of_cloth.n.01", "name": "piece_of_cloth"}, + {"id": 9832, "synset": "pied-a-terre.n.01", "name": "pied-a-terre"}, + {"id": 9833, "synset": "pier.n.03", "name": "pier"}, + {"id": 9834, "synset": "pier.n.02", "name": "pier"}, + {"id": 9835, "synset": "pier_arch.n.01", "name": "pier_arch"}, + {"id": 9836, "synset": "pier_glass.n.01", "name": "pier_glass"}, + {"id": 9837, "synset": "pier_table.n.01", "name": "pier_table"}, + {"id": 9838, "synset": "pieta.n.01", "name": "pieta"}, + {"id": 9839, "synset": "piezometer.n.01", "name": "piezometer"}, + {"id": 9840, "synset": "pig_bed.n.01", "name": "pig_bed"}, + {"id": 9841, "synset": "piggery.n.01", "name": "piggery"}, + {"id": 9842, "synset": "pilaster.n.01", "name": "pilaster"}, + {"id": 9843, "synset": "pile.n.06", "name": "pile"}, + {"id": 9844, "synset": "pile_driver.n.01", "name": "pile_driver"}, + {"id": 9845, "synset": "pill_bottle.n.01", "name": "pill_bottle"}, + {"id": 9846, "synset": "pillbox.n.01", "name": "pillbox"}, + {"id": 9847, "synset": "pillion.n.01", "name": "pillion"}, + {"id": 9848, "synset": "pillory.n.01", "name": "pillory"}, + {"id": 9849, "synset": "pillow_block.n.01", "name": "pillow_block"}, + {"id": 9850, "synset": "pillow_lace.n.01", "name": "pillow_lace"}, + {"id": 9851, "synset": "pillow_sham.n.01", "name": "pillow_sham"}, + {"id": 9852, "synset": "pilot_bit.n.01", "name": "pilot_bit"}, + {"id": 9853, "synset": "pilot_boat.n.01", "name": "pilot_boat"}, + {"id": 9854, "synset": "pilot_burner.n.01", "name": "pilot_burner"}, + {"id": 9855, "synset": "pilot_cloth.n.01", "name": "pilot_cloth"}, + {"id": 9856, "synset": "pilot_engine.n.01", "name": "pilot_engine"}, + {"id": 9857, "synset": "pilothouse.n.01", "name": "pilothouse"}, + {"id": 9858, "synset": "pilot_light.n.02", "name": "pilot_light"}, + {"id": 9859, "synset": "pin.n.08", "name": "pin"}, + {"id": 9860, "synset": "pin.n.07", "name": "pin"}, + {"id": 9861, "synset": "pinata.n.01", "name": "pinata"}, + {"id": 9862, "synset": "pinball_machine.n.01", "name": "pinball_machine"}, + {"id": 9863, "synset": "pince-nez.n.01", "name": "pince-nez"}, + {"id": 9864, "synset": "pincer.n.01", "name": "pincer"}, + {"id": 9865, "synset": "pinch_bar.n.01", "name": "pinch_bar"}, + {"id": 9866, "synset": "pincurl_clip.n.01", "name": "pincurl_clip"}, + {"id": 9867, "synset": "pinfold.n.01", "name": "pinfold"}, + {"id": 9868, "synset": "pinhead.n.02", "name": "pinhead"}, + {"id": 9869, "synset": "pinion.n.01", "name": "pinion"}, + {"id": 9870, "synset": "pinnacle.n.01", "name": "pinnacle"}, + {"id": 9871, "synset": "pinprick.n.02", "name": "pinprick"}, + {"id": 9872, "synset": "pinstripe.n.03", "name": "pinstripe"}, + {"id": 9873, "synset": "pinstripe.n.02", "name": "pinstripe"}, + {"id": 9874, "synset": "pinstripe.n.01", "name": "pinstripe"}, + {"id": 9875, "synset": "pintle.n.01", "name": "pintle"}, + {"id": 9876, "synset": "pinwheel.n.02", "name": "pinwheel"}, + {"id": 9877, "synset": "tabor_pipe.n.01", "name": "tabor_pipe"}, + {"id": 9878, "synset": "pipe.n.04", "name": "pipe"}, + {"id": 9879, "synset": "pipe_bomb.n.01", "name": "pipe_bomb"}, + {"id": 9880, "synset": "pipe_cleaner.n.01", "name": "pipe_cleaner"}, + {"id": 9881, "synset": "pipe_cutter.n.01", "name": "pipe_cutter"}, + {"id": 9882, "synset": "pipefitting.n.01", "name": "pipefitting"}, + {"id": 9883, "synset": "pipet.n.01", "name": "pipet"}, + {"id": 9884, "synset": "pipe_vise.n.01", "name": "pipe_vise"}, + {"id": 9885, "synset": "pipe_wrench.n.01", "name": "pipe_wrench"}, + {"id": 9886, "synset": "pique.n.01", "name": "pique"}, + {"id": 9887, "synset": "pirate.n.03", "name": "pirate"}, + {"id": 9888, "synset": "piste.n.02", "name": "piste"}, + {"id": 9889, "synset": "pistol_grip.n.01", "name": "pistol_grip"}, + {"id": 9890, "synset": "piston.n.02", "name": "piston"}, + {"id": 9891, "synset": "piston_ring.n.01", "name": "piston_ring"}, + {"id": 9892, "synset": "piston_rod.n.01", "name": "piston_rod"}, + {"id": 9893, "synset": "pit.n.07", "name": "pit"}, + {"id": 9894, "synset": "pitching_wedge.n.01", "name": "pitching_wedge"}, + {"id": 9895, "synset": "pitch_pipe.n.01", "name": "pitch_pipe"}, + {"id": 9896, "synset": "pith_hat.n.01", "name": "pith_hat"}, + {"id": 9897, "synset": "piton.n.01", "name": "piton"}, + {"id": 9898, "synset": "pitot-static_tube.n.01", "name": "Pitot-static_tube"}, + {"id": 9899, "synset": "pitot_tube.n.01", "name": "Pitot_tube"}, + {"id": 9900, "synset": "pitsaw.n.01", "name": "pitsaw"}, + {"id": 9901, "synset": "pivot.n.02", "name": "pivot"}, + {"id": 9902, "synset": "pivoting_window.n.01", "name": "pivoting_window"}, + {"id": 9903, "synset": "pizzeria.n.01", "name": "pizzeria"}, + {"id": 9904, "synset": "place_of_business.n.01", "name": "place_of_business"}, + {"id": 9905, "synset": "place_of_worship.n.01", "name": "place_of_worship"}, + {"id": 9906, "synset": "placket.n.01", "name": "placket"}, + {"id": 9907, "synset": "planchet.n.01", "name": "planchet"}, + {"id": 9908, "synset": "plane.n.05", "name": "plane"}, + {"id": 9909, "synset": "plane.n.04", "name": "plane"}, + {"id": 9910, "synset": "plane_seat.n.01", "name": "plane_seat"}, + {"id": 9911, "synset": "planetarium.n.03", "name": "planetarium"}, + {"id": 9912, "synset": "planetarium.n.02", "name": "planetarium"}, + {"id": 9913, "synset": "planetarium.n.01", "name": "planetarium"}, + {"id": 9914, "synset": "planetary_gear.n.01", "name": "planetary_gear"}, + {"id": 9915, "synset": "plank-bed.n.01", "name": "plank-bed"}, + {"id": 9916, "synset": "planking.n.02", "name": "planking"}, + {"id": 9917, "synset": "planner.n.02", "name": "planner"}, + {"id": 9918, "synset": "plant.n.01", "name": "plant"}, + {"id": 9919, "synset": "planter.n.03", "name": "planter"}, + {"id": 9920, "synset": "plaster.n.05", "name": "plaster"}, + {"id": 9921, "synset": "plasterboard.n.01", "name": "plasterboard"}, + {"id": 9922, "synset": "plastering_trowel.n.01", "name": "plastering_trowel"}, + {"id": 9923, "synset": "plastic_bag.n.01", "name": "plastic_bag"}, + {"id": 9924, "synset": "plastic_bomb.n.01", "name": "plastic_bomb"}, + {"id": 9925, "synset": "plastic_laminate.n.01", "name": "plastic_laminate"}, + {"id": 9926, "synset": "plastic_wrap.n.01", "name": "plastic_wrap"}, + {"id": 9927, "synset": "plastron.n.03", "name": "plastron"}, + {"id": 9928, "synset": "plastron.n.02", "name": "plastron"}, + {"id": 9929, "synset": "plastron.n.01", "name": "plastron"}, + {"id": 9930, "synset": "plate.n.14", "name": "plate"}, + {"id": 9931, "synset": "plate.n.13", "name": "plate"}, + {"id": 9932, "synset": "plate.n.12", "name": "plate"}, + {"id": 9933, "synset": "platen.n.03", "name": "platen"}, + {"id": 9934, "synset": "platen.n.01", "name": "platen"}, + {"id": 9935, "synset": "plate_rack.n.01", "name": "plate_rack"}, + {"id": 9936, "synset": "plate_rail.n.01", "name": "plate_rail"}, + {"id": 9937, "synset": "platform.n.01", "name": "platform"}, + {"id": 9938, "synset": "platform.n.04", "name": "platform"}, + {"id": 9939, "synset": "platform.n.03", "name": "platform"}, + {"id": 9940, "synset": "platform_bed.n.01", "name": "platform_bed"}, + {"id": 9941, "synset": "platform_rocker.n.01", "name": "platform_rocker"}, + {"id": 9942, "synset": "plating.n.01", "name": "plating"}, + {"id": 9943, "synset": "playback.n.02", "name": "playback"}, + {"id": 9944, "synset": "playbox.n.01", "name": "playbox"}, + {"id": 9945, "synset": "playground.n.02", "name": "playground"}, + {"id": 9946, "synset": "playsuit.n.01", "name": "playsuit"}, + {"id": 9947, "synset": "plaza.n.02", "name": "plaza"}, + {"id": 9948, "synset": "pleat.n.01", "name": "pleat"}, + {"id": 9949, "synset": "plenum.n.02", "name": "plenum"}, + {"id": 9950, "synset": "plethysmograph.n.01", "name": "plethysmograph"}, + {"id": 9951, "synset": "pleximeter.n.01", "name": "pleximeter"}, + {"id": 9952, "synset": "plexor.n.01", "name": "plexor"}, + {"id": 9953, "synset": "plimsoll.n.02", "name": "plimsoll"}, + {"id": 9954, "synset": "plotter.n.04", "name": "plotter"}, + {"id": 9955, "synset": "plug.n.01", "name": "plug"}, + {"id": 9956, "synset": "plug.n.05", "name": "plug"}, + {"id": 9957, "synset": "plug_fuse.n.01", "name": "plug_fuse"}, + {"id": 9958, "synset": "plughole.n.01", "name": "plughole"}, + {"id": 9959, "synset": "plumb_bob.n.01", "name": "plumb_bob"}, + {"id": 9960, "synset": "plumb_level.n.01", "name": "plumb_level"}, + {"id": 9961, "synset": "plunger.n.03", "name": "plunger"}, + {"id": 9962, "synset": "plus_fours.n.01", "name": "plus_fours"}, + {"id": 9963, "synset": "plush.n.01", "name": "plush"}, + {"id": 9964, "synset": "plywood.n.01", "name": "plywood"}, + {"id": 9965, "synset": "pneumatic_drill.n.01", "name": "pneumatic_drill"}, + {"id": 9966, "synset": "p-n_junction.n.01", "name": "p-n_junction"}, + {"id": 9967, "synset": "p-n-p_transistor.n.01", "name": "p-n-p_transistor"}, + {"id": 9968, "synset": "poacher.n.02", "name": "poacher"}, + {"id": 9969, "synset": "pocket.n.01", "name": "pocket"}, + {"id": 9970, "synset": "pocket_battleship.n.01", "name": "pocket_battleship"}, + {"id": 9971, "synset": "pocketcomb.n.01", "name": "pocketcomb"}, + {"id": 9972, "synset": "pocket_flap.n.01", "name": "pocket_flap"}, + {"id": 9973, "synset": "pocket-handkerchief.n.01", "name": "pocket-handkerchief"}, + {"id": 9974, "synset": "pod.n.04", "name": "pod"}, + {"id": 9975, "synset": "pogo_stick.n.01", "name": "pogo_stick"}, + { + "id": 9976, + "synset": "point-and-shoot_camera.n.01", + "name": "point-and-shoot_camera", + }, + {"id": 9977, "synset": "pointed_arch.n.01", "name": "pointed_arch"}, + {"id": 9978, "synset": "pointing_trowel.n.01", "name": "pointing_trowel"}, + {"id": 9979, "synset": "point_lace.n.01", "name": "point_lace"}, + {"id": 9980, "synset": "polarimeter.n.01", "name": "polarimeter"}, + {"id": 9981, "synset": "polaroid.n.01", "name": "Polaroid"}, + {"id": 9982, "synset": "polaroid_camera.n.01", "name": "Polaroid_camera"}, + {"id": 9983, "synset": "pole.n.09", "name": "pole"}, + {"id": 9984, "synset": "poleax.n.02", "name": "poleax"}, + {"id": 9985, "synset": "poleax.n.01", "name": "poleax"}, + {"id": 9986, "synset": "police_boat.n.01", "name": "police_boat"}, + {"id": 9987, "synset": "police_van.n.01", "name": "police_van"}, + {"id": 9988, "synset": "polling_booth.n.01", "name": "polling_booth"}, + {"id": 9989, "synset": "polo_ball.n.01", "name": "polo_ball"}, + {"id": 9990, "synset": "polo_mallet.n.01", "name": "polo_mallet"}, + {"id": 9991, "synset": "polonaise.n.01", "name": "polonaise"}, + {"id": 9992, "synset": "polyester.n.03", "name": "polyester"}, + {"id": 9993, "synset": "polygraph.n.01", "name": "polygraph"}, + {"id": 9994, "synset": "pomade.n.01", "name": "pomade"}, + {"id": 9995, "synset": "pommel_horse.n.01", "name": "pommel_horse"}, + {"id": 9996, "synset": "pongee.n.01", "name": "pongee"}, + {"id": 9997, "synset": "poniard.n.01", "name": "poniard"}, + {"id": 9998, "synset": "pontifical.n.01", "name": "pontifical"}, + {"id": 9999, "synset": "pontoon.n.01", "name": "pontoon"}, + {"id": 10000, "synset": "pontoon_bridge.n.01", "name": "pontoon_bridge"}, + {"id": 10001, "synset": "pony_cart.n.01", "name": "pony_cart"}, + {"id": 10002, "synset": "pool_ball.n.01", "name": "pool_ball"}, + {"id": 10003, "synset": "poolroom.n.01", "name": "poolroom"}, + {"id": 10004, "synset": "poop_deck.n.01", "name": "poop_deck"}, + {"id": 10005, "synset": "poor_box.n.01", "name": "poor_box"}, + {"id": 10006, "synset": "poorhouse.n.01", "name": "poorhouse"}, + {"id": 10007, "synset": "pop_bottle.n.01", "name": "pop_bottle"}, + {"id": 10008, "synset": "popgun.n.01", "name": "popgun"}, + {"id": 10009, "synset": "poplin.n.01", "name": "poplin"}, + {"id": 10010, "synset": "popper.n.03", "name": "popper"}, + {"id": 10011, "synset": "poppet.n.01", "name": "poppet"}, + {"id": 10012, "synset": "pop_tent.n.01", "name": "pop_tent"}, + {"id": 10013, "synset": "porcelain.n.01", "name": "porcelain"}, + {"id": 10014, "synset": "porch.n.01", "name": "porch"}, + {"id": 10015, "synset": "porkpie.n.01", "name": "porkpie"}, + {"id": 10016, "synset": "porringer.n.01", "name": "porringer"}, + {"id": 10017, "synset": "portable.n.01", "name": "portable"}, + {"id": 10018, "synset": "portable_computer.n.01", "name": "portable_computer"}, + { + "id": 10019, + "synset": "portable_circular_saw.n.01", + "name": "portable_circular_saw", + }, + {"id": 10020, "synset": "portcullis.n.01", "name": "portcullis"}, + {"id": 10021, "synset": "porte-cochere.n.02", "name": "porte-cochere"}, + {"id": 10022, "synset": "porte-cochere.n.01", "name": "porte-cochere"}, + {"id": 10023, "synset": "portfolio.n.01", "name": "portfolio"}, + {"id": 10024, "synset": "porthole.n.01", "name": "porthole"}, + {"id": 10025, "synset": "portico.n.01", "name": "portico"}, + {"id": 10026, "synset": "portiere.n.01", "name": "portiere"}, + {"id": 10027, "synset": "portmanteau.n.02", "name": "portmanteau"}, + {"id": 10028, "synset": "portrait_camera.n.01", "name": "portrait_camera"}, + {"id": 10029, "synset": "portrait_lens.n.01", "name": "portrait_lens"}, + {"id": 10030, "synset": "positive_pole.n.02", "name": "positive_pole"}, + {"id": 10031, "synset": "positive_pole.n.01", "name": "positive_pole"}, + { + "id": 10032, + "synset": "positron_emission_tomography_scanner.n.01", + "name": "positron_emission_tomography_scanner", + }, + {"id": 10033, "synset": "post.n.04", "name": "post"}, + {"id": 10034, "synset": "postage_meter.n.01", "name": "postage_meter"}, + {"id": 10035, "synset": "post_and_lintel.n.01", "name": "post_and_lintel"}, + {"id": 10036, "synset": "post_chaise.n.01", "name": "post_chaise"}, + {"id": 10037, "synset": "postern.n.01", "name": "postern"}, + {"id": 10038, "synset": "post_exchange.n.01", "name": "post_exchange"}, + {"id": 10039, "synset": "posthole_digger.n.01", "name": "posthole_digger"}, + {"id": 10040, "synset": "post_horn.n.01", "name": "post_horn"}, + {"id": 10041, "synset": "posthouse.n.01", "name": "posthouse"}, + {"id": 10042, "synset": "potbelly.n.02", "name": "potbelly"}, + {"id": 10043, "synset": "potemkin_village.n.01", "name": "Potemkin_village"}, + {"id": 10044, "synset": "potential_divider.n.01", "name": "potential_divider"}, + {"id": 10045, "synset": "potentiometer.n.02", "name": "potentiometer"}, + {"id": 10046, "synset": "potentiometer.n.01", "name": "potentiometer"}, + {"id": 10047, "synset": "potpourri.n.03", "name": "potpourri"}, + {"id": 10048, "synset": "potsherd.n.01", "name": "potsherd"}, + {"id": 10049, "synset": "potter's_wheel.n.01", "name": "potter's_wheel"}, + {"id": 10050, "synset": "pottle.n.01", "name": "pottle"}, + {"id": 10051, "synset": "potty_seat.n.01", "name": "potty_seat"}, + {"id": 10052, "synset": "poultice.n.01", "name": "poultice"}, + {"id": 10053, "synset": "pound.n.13", "name": "pound"}, + {"id": 10054, "synset": "pound_net.n.01", "name": "pound_net"}, + {"id": 10055, "synset": "powder.n.03", "name": "powder"}, + {"id": 10056, "synset": "powder_and_shot.n.01", "name": "powder_and_shot"}, + {"id": 10057, "synset": "powdered_mustard.n.01", "name": "powdered_mustard"}, + {"id": 10058, "synset": "powder_horn.n.01", "name": "powder_horn"}, + {"id": 10059, "synset": "powder_keg.n.02", "name": "powder_keg"}, + {"id": 10060, "synset": "power_brake.n.01", "name": "power_brake"}, + {"id": 10061, "synset": "power_cord.n.01", "name": "power_cord"}, + {"id": 10062, "synset": "power_drill.n.01", "name": "power_drill"}, + {"id": 10063, "synset": "power_line.n.01", "name": "power_line"}, + {"id": 10064, "synset": "power_loom.n.01", "name": "power_loom"}, + {"id": 10065, "synset": "power_mower.n.01", "name": "power_mower"}, + {"id": 10066, "synset": "power_pack.n.01", "name": "power_pack"}, + {"id": 10067, "synset": "power_saw.n.01", "name": "power_saw"}, + {"id": 10068, "synset": "power_steering.n.01", "name": "power_steering"}, + {"id": 10069, "synset": "power_takeoff.n.01", "name": "power_takeoff"}, + {"id": 10070, "synset": "power_tool.n.01", "name": "power_tool"}, + {"id": 10071, "synset": "praetorium.n.01", "name": "praetorium"}, + {"id": 10072, "synset": "prayer_rug.n.01", "name": "prayer_rug"}, + {"id": 10073, "synset": "prayer_shawl.n.01", "name": "prayer_shawl"}, + {"id": 10074, "synset": "precipitator.n.01", "name": "precipitator"}, + {"id": 10075, "synset": "prefab.n.01", "name": "prefab"}, + {"id": 10076, "synset": "presbytery.n.01", "name": "presbytery"}, + {"id": 10077, "synset": "presence_chamber.n.01", "name": "presence_chamber"}, + {"id": 10078, "synset": "press.n.07", "name": "press"}, + {"id": 10079, "synset": "press.n.03", "name": "press"}, + {"id": 10080, "synset": "press.n.06", "name": "press"}, + {"id": 10081, "synset": "press_box.n.01", "name": "press_box"}, + {"id": 10082, "synset": "press_gallery.n.01", "name": "press_gallery"}, + {"id": 10083, "synset": "press_of_sail.n.01", "name": "press_of_sail"}, + {"id": 10084, "synset": "pressure_cabin.n.01", "name": "pressure_cabin"}, + {"id": 10085, "synset": "pressure_cooker.n.01", "name": "pressure_cooker"}, + {"id": 10086, "synset": "pressure_dome.n.01", "name": "pressure_dome"}, + {"id": 10087, "synset": "pressure_gauge.n.01", "name": "pressure_gauge"}, + { + "id": 10088, + "synset": "pressurized_water_reactor.n.01", + "name": "pressurized_water_reactor", + }, + {"id": 10089, "synset": "pressure_suit.n.01", "name": "pressure_suit"}, + {"id": 10090, "synset": "pricket.n.01", "name": "pricket"}, + {"id": 10091, "synset": "prie-dieu.n.01", "name": "prie-dieu"}, + {"id": 10092, "synset": "primary_coil.n.01", "name": "primary_coil"}, + {"id": 10093, "synset": "primus_stove.n.01", "name": "Primus_stove"}, + {"id": 10094, "synset": "prince_albert.n.02", "name": "Prince_Albert"}, + {"id": 10095, "synset": "print.n.06", "name": "print"}, + {"id": 10096, "synset": "print_buffer.n.01", "name": "print_buffer"}, + {"id": 10097, "synset": "printed_circuit.n.01", "name": "printed_circuit"}, + {"id": 10098, "synset": "printer.n.02", "name": "printer"}, + {"id": 10099, "synset": "printer_cable.n.01", "name": "printer_cable"}, + {"id": 10100, "synset": "priory.n.01", "name": "priory"}, + {"id": 10101, "synset": "prison.n.01", "name": "prison"}, + {"id": 10102, "synset": "prison_camp.n.01", "name": "prison_camp"}, + {"id": 10103, "synset": "privateer.n.02", "name": "privateer"}, + {"id": 10104, "synset": "private_line.n.01", "name": "private_line"}, + {"id": 10105, "synset": "privet_hedge.n.01", "name": "privet_hedge"}, + {"id": 10106, "synset": "probe.n.02", "name": "probe"}, + {"id": 10107, "synset": "proctoscope.n.01", "name": "proctoscope"}, + {"id": 10108, "synset": "prod.n.02", "name": "prod"}, + {"id": 10109, "synset": "production_line.n.01", "name": "production_line"}, + {"id": 10110, "synset": "projector.n.01", "name": "projector"}, + {"id": 10111, "synset": "prolonge.n.01", "name": "prolonge"}, + {"id": 10112, "synset": "prolonge_knot.n.01", "name": "prolonge_knot"}, + {"id": 10113, "synset": "prompter.n.02", "name": "prompter"}, + {"id": 10114, "synset": "prong.n.01", "name": "prong"}, + {"id": 10115, "synset": "propeller_plane.n.01", "name": "propeller_plane"}, + {"id": 10116, "synset": "propjet.n.01", "name": "propjet"}, + { + "id": 10117, + "synset": "proportional_counter_tube.n.01", + "name": "proportional_counter_tube", + }, + {"id": 10118, "synset": "propulsion_system.n.01", "name": "propulsion_system"}, + {"id": 10119, "synset": "proscenium.n.02", "name": "proscenium"}, + {"id": 10120, "synset": "proscenium_arch.n.01", "name": "proscenium_arch"}, + {"id": 10121, "synset": "prosthesis.n.01", "name": "prosthesis"}, + {"id": 10122, "synset": "protective_covering.n.01", "name": "protective_covering"}, + {"id": 10123, "synset": "protective_garment.n.01", "name": "protective_garment"}, + {"id": 10124, "synset": "proton_accelerator.n.01", "name": "proton_accelerator"}, + {"id": 10125, "synset": "protractor.n.01", "name": "protractor"}, + {"id": 10126, "synset": "pruner.n.02", "name": "pruner"}, + {"id": 10127, "synset": "pruning_knife.n.01", "name": "pruning_knife"}, + {"id": 10128, "synset": "pruning_saw.n.01", "name": "pruning_saw"}, + {"id": 10129, "synset": "pruning_shears.n.01", "name": "pruning_shears"}, + {"id": 10130, "synset": "psaltery.n.01", "name": "psaltery"}, + {"id": 10131, "synset": "psychrometer.n.01", "name": "psychrometer"}, + {"id": 10132, "synset": "pt_boat.n.01", "name": "PT_boat"}, + { + "id": 10133, + "synset": "public_address_system.n.01", + "name": "public_address_system", + }, + {"id": 10134, "synset": "public_house.n.01", "name": "public_house"}, + {"id": 10135, "synset": "public_toilet.n.01", "name": "public_toilet"}, + {"id": 10136, "synset": "public_transport.n.01", "name": "public_transport"}, + {"id": 10137, "synset": "public_works.n.01", "name": "public_works"}, + {"id": 10138, "synset": "puck.n.02", "name": "puck"}, + {"id": 10139, "synset": "pull.n.04", "name": "pull"}, + {"id": 10140, "synset": "pullback.n.01", "name": "pullback"}, + {"id": 10141, "synset": "pull_chain.n.01", "name": "pull_chain"}, + {"id": 10142, "synset": "pulley.n.01", "name": "pulley"}, + {"id": 10143, "synset": "pull-off.n.01", "name": "pull-off"}, + {"id": 10144, "synset": "pullman.n.01", "name": "Pullman"}, + {"id": 10145, "synset": "pullover.n.01", "name": "pullover"}, + {"id": 10146, "synset": "pull-through.n.01", "name": "pull-through"}, + {"id": 10147, "synset": "pulse_counter.n.01", "name": "pulse_counter"}, + {"id": 10148, "synset": "pulse_generator.n.01", "name": "pulse_generator"}, + { + "id": 10149, + "synset": "pulse_timing_circuit.n.01", + "name": "pulse_timing_circuit", + }, + {"id": 10150, "synset": "pump.n.01", "name": "pump"}, + {"id": 10151, "synset": "pump.n.03", "name": "pump"}, + {"id": 10152, "synset": "pump_action.n.01", "name": "pump_action"}, + {"id": 10153, "synset": "pump_house.n.01", "name": "pump_house"}, + {"id": 10154, "synset": "pump_room.n.01", "name": "pump_room"}, + {"id": 10155, "synset": "pump-type_pliers.n.01", "name": "pump-type_pliers"}, + {"id": 10156, "synset": "pump_well.n.01", "name": "pump_well"}, + {"id": 10157, "synset": "punchboard.n.01", "name": "punchboard"}, + {"id": 10158, "synset": "punch_bowl.n.01", "name": "punch_bowl"}, + {"id": 10159, "synset": "punching_bag.n.02", "name": "punching_bag"}, + {"id": 10160, "synset": "punch_pliers.n.01", "name": "punch_pliers"}, + {"id": 10161, "synset": "punch_press.n.01", "name": "punch_press"}, + {"id": 10162, "synset": "punnet.n.01", "name": "punnet"}, + {"id": 10163, "synset": "punt.n.02", "name": "punt"}, + {"id": 10164, "synset": "pup_tent.n.01", "name": "pup_tent"}, + {"id": 10165, "synset": "purdah.n.03", "name": "purdah"}, + {"id": 10166, "synset": "purifier.n.01", "name": "purifier"}, + {"id": 10167, "synset": "purl.n.02", "name": "purl"}, + {"id": 10168, "synset": "purse.n.03", "name": "purse"}, + {"id": 10169, "synset": "push-bike.n.01", "name": "push-bike"}, + {"id": 10170, "synset": "push_broom.n.01", "name": "push_broom"}, + {"id": 10171, "synset": "push_button.n.01", "name": "push_button"}, + {"id": 10172, "synset": "push-button_radio.n.01", "name": "push-button_radio"}, + {"id": 10173, "synset": "pusher.n.04", "name": "pusher"}, + {"id": 10174, "synset": "put-put.n.01", "name": "put-put"}, + {"id": 10175, "synset": "puttee.n.01", "name": "puttee"}, + {"id": 10176, "synset": "putter.n.02", "name": "putter"}, + {"id": 10177, "synset": "putty_knife.n.01", "name": "putty_knife"}, + {"id": 10178, "synset": "puzzle.n.02", "name": "puzzle"}, + {"id": 10179, "synset": "pylon.n.02", "name": "pylon"}, + {"id": 10180, "synset": "pylon.n.01", "name": "pylon"}, + {"id": 10181, "synset": "pyramidal_tent.n.01", "name": "pyramidal_tent"}, + {"id": 10182, "synset": "pyrograph.n.01", "name": "pyrograph"}, + {"id": 10183, "synset": "pyrometer.n.01", "name": "pyrometer"}, + {"id": 10184, "synset": "pyrometric_cone.n.01", "name": "pyrometric_cone"}, + {"id": 10185, "synset": "pyrostat.n.01", "name": "pyrostat"}, + {"id": 10186, "synset": "pyx.n.02", "name": "pyx"}, + {"id": 10187, "synset": "pyx.n.01", "name": "pyx"}, + {"id": 10188, "synset": "pyxis.n.03", "name": "pyxis"}, + {"id": 10189, "synset": "quad.n.04", "name": "quad"}, + {"id": 10190, "synset": "quadrant.n.04", "name": "quadrant"}, + {"id": 10191, "synset": "quadraphony.n.01", "name": "quadraphony"}, + {"id": 10192, "synset": "quartering.n.02", "name": "quartering"}, + {"id": 10193, "synset": "quarterstaff.n.01", "name": "quarterstaff"}, + {"id": 10194, "synset": "quartz_battery.n.01", "name": "quartz_battery"}, + {"id": 10195, "synset": "quartz_lamp.n.01", "name": "quartz_lamp"}, + {"id": 10196, "synset": "queen.n.08", "name": "queen"}, + {"id": 10197, "synset": "queen.n.07", "name": "queen"}, + {"id": 10198, "synset": "queen_post.n.01", "name": "queen_post"}, + {"id": 10199, "synset": "quern.n.01", "name": "quern"}, + {"id": 10200, "synset": "quill.n.01", "name": "quill"}, + {"id": 10201, "synset": "quilted_bedspread.n.01", "name": "quilted_bedspread"}, + {"id": 10202, "synset": "quilting.n.02", "name": "quilting"}, + {"id": 10203, "synset": "quipu.n.01", "name": "quipu"}, + {"id": 10204, "synset": "quirk_molding.n.01", "name": "quirk_molding"}, + {"id": 10205, "synset": "quirt.n.01", "name": "quirt"}, + {"id": 10206, "synset": "quiver.n.03", "name": "quiver"}, + {"id": 10207, "synset": "quoin.n.02", "name": "quoin"}, + {"id": 10208, "synset": "quoit.n.01", "name": "quoit"}, + {"id": 10209, "synset": "qwerty_keyboard.n.01", "name": "QWERTY_keyboard"}, + {"id": 10210, "synset": "rabbet.n.01", "name": "rabbet"}, + {"id": 10211, "synset": "rabbet_joint.n.01", "name": "rabbet_joint"}, + {"id": 10212, "synset": "rabbit_ears.n.01", "name": "rabbit_ears"}, + {"id": 10213, "synset": "rabbit_hutch.n.01", "name": "rabbit_hutch"}, + {"id": 10214, "synset": "raceabout.n.01", "name": "raceabout"}, + {"id": 10215, "synset": "raceway.n.01", "name": "raceway"}, + {"id": 10216, "synset": "racing_boat.n.01", "name": "racing_boat"}, + {"id": 10217, "synset": "racing_gig.n.01", "name": "racing_gig"}, + {"id": 10218, "synset": "racing_skiff.n.01", "name": "racing_skiff"}, + {"id": 10219, "synset": "rack.n.05", "name": "rack"}, + {"id": 10220, "synset": "rack.n.01", "name": "rack"}, + {"id": 10221, "synset": "rack.n.04", "name": "rack"}, + {"id": 10222, "synset": "rack_and_pinion.n.01", "name": "rack_and_pinion"}, + {"id": 10223, "synset": "racquetball.n.01", "name": "racquetball"}, + {"id": 10224, "synset": "radial.n.01", "name": "radial"}, + {"id": 10225, "synset": "radial_engine.n.01", "name": "radial_engine"}, + {"id": 10226, "synset": "radiation_pyrometer.n.01", "name": "radiation_pyrometer"}, + {"id": 10227, "synset": "radiator.n.02", "name": "radiator"}, + {"id": 10228, "synset": "radiator_cap.n.01", "name": "radiator_cap"}, + {"id": 10229, "synset": "radiator_hose.n.01", "name": "radiator_hose"}, + {"id": 10230, "synset": "radio.n.03", "name": "radio"}, + {"id": 10231, "synset": "radio_antenna.n.01", "name": "radio_antenna"}, + {"id": 10232, "synset": "radio_chassis.n.01", "name": "radio_chassis"}, + {"id": 10233, "synset": "radio_compass.n.01", "name": "radio_compass"}, + {"id": 10234, "synset": "radiogram.n.02", "name": "radiogram"}, + { + "id": 10235, + "synset": "radio_interferometer.n.01", + "name": "radio_interferometer", + }, + {"id": 10236, "synset": "radio_link.n.01", "name": "radio_link"}, + {"id": 10237, "synset": "radiometer.n.01", "name": "radiometer"}, + {"id": 10238, "synset": "radiomicrometer.n.01", "name": "radiomicrometer"}, + {"id": 10239, "synset": "radio-phonograph.n.01", "name": "radio-phonograph"}, + {"id": 10240, "synset": "radiotelegraph.n.02", "name": "radiotelegraph"}, + {"id": 10241, "synset": "radiotelephone.n.02", "name": "radiotelephone"}, + {"id": 10242, "synset": "radio_telescope.n.01", "name": "radio_telescope"}, + { + "id": 10243, + "synset": "radiotherapy_equipment.n.01", + "name": "radiotherapy_equipment", + }, + {"id": 10244, "synset": "radio_transmitter.n.01", "name": "radio_transmitter"}, + {"id": 10245, "synset": "radome.n.01", "name": "radome"}, + {"id": 10246, "synset": "rafter.n.01", "name": "rafter"}, + {"id": 10247, "synset": "raft_foundation.n.01", "name": "raft_foundation"}, + {"id": 10248, "synset": "rag.n.01", "name": "rag"}, + {"id": 10249, "synset": "ragbag.n.02", "name": "ragbag"}, + {"id": 10250, "synset": "raglan.n.01", "name": "raglan"}, + {"id": 10251, "synset": "raglan_sleeve.n.01", "name": "raglan_sleeve"}, + {"id": 10252, "synset": "rail.n.04", "name": "rail"}, + {"id": 10253, "synset": "rail_fence.n.01", "name": "rail_fence"}, + {"id": 10254, "synset": "railhead.n.01", "name": "railhead"}, + {"id": 10255, "synset": "railing.n.01", "name": "railing"}, + {"id": 10256, "synset": "railing.n.02", "name": "railing"}, + {"id": 10257, "synset": "railroad_bed.n.01", "name": "railroad_bed"}, + {"id": 10258, "synset": "railroad_tunnel.n.01", "name": "railroad_tunnel"}, + {"id": 10259, "synset": "rain_barrel.n.01", "name": "rain_barrel"}, + {"id": 10260, "synset": "rain_gauge.n.01", "name": "rain_gauge"}, + {"id": 10261, "synset": "rain_stick.n.01", "name": "rain_stick"}, + {"id": 10262, "synset": "rake.n.03", "name": "rake"}, + {"id": 10263, "synset": "rake_handle.n.01", "name": "rake_handle"}, + {"id": 10264, "synset": "ram_disk.n.01", "name": "RAM_disk"}, + {"id": 10265, "synset": "ramekin.n.02", "name": "ramekin"}, + {"id": 10266, "synset": "ramjet.n.01", "name": "ramjet"}, + {"id": 10267, "synset": "rammer.n.01", "name": "rammer"}, + {"id": 10268, "synset": "ramp.n.01", "name": "ramp"}, + {"id": 10269, "synset": "rampant_arch.n.01", "name": "rampant_arch"}, + {"id": 10270, "synset": "rampart.n.01", "name": "rampart"}, + {"id": 10271, "synset": "ramrod.n.01", "name": "ramrod"}, + {"id": 10272, "synset": "ramrod.n.03", "name": "ramrod"}, + {"id": 10273, "synset": "ranch.n.01", "name": "ranch"}, + {"id": 10274, "synset": "ranch_house.n.01", "name": "ranch_house"}, + { + "id": 10275, + "synset": "random-access_memory.n.01", + "name": "random-access_memory", + }, + {"id": 10276, "synset": "rangefinder.n.01", "name": "rangefinder"}, + {"id": 10277, "synset": "range_hood.n.01", "name": "range_hood"}, + {"id": 10278, "synset": "range_pole.n.01", "name": "range_pole"}, + {"id": 10279, "synset": "rapier.n.01", "name": "rapier"}, + {"id": 10280, "synset": "rariora.n.01", "name": "rariora"}, + {"id": 10281, "synset": "rasp.n.02", "name": "rasp"}, + {"id": 10282, "synset": "ratchet.n.01", "name": "ratchet"}, + {"id": 10283, "synset": "ratchet_wheel.n.01", "name": "ratchet_wheel"}, + {"id": 10284, "synset": "rathskeller.n.01", "name": "rathskeller"}, + {"id": 10285, "synset": "ratline.n.01", "name": "ratline"}, + {"id": 10286, "synset": "rat-tail_file.n.01", "name": "rat-tail_file"}, + {"id": 10287, "synset": "rattan.n.03", "name": "rattan"}, + {"id": 10288, "synset": "rattrap.n.03", "name": "rattrap"}, + {"id": 10289, "synset": "rayon.n.01", "name": "rayon"}, + {"id": 10290, "synset": "razor.n.01", "name": "razor"}, + { + "id": 10291, + "synset": "reaction-propulsion_engine.n.01", + "name": "reaction-propulsion_engine", + }, + {"id": 10292, "synset": "reaction_turbine.n.01", "name": "reaction_turbine"}, + {"id": 10293, "synset": "reactor.n.01", "name": "reactor"}, + {"id": 10294, "synset": "reading_lamp.n.01", "name": "reading_lamp"}, + {"id": 10295, "synset": "reading_room.n.01", "name": "reading_room"}, + {"id": 10296, "synset": "read-only_memory.n.01", "name": "read-only_memory"}, + { + "id": 10297, + "synset": "read-only_memory_chip.n.01", + "name": "read-only_memory_chip", + }, + {"id": 10298, "synset": "readout.n.03", "name": "readout"}, + {"id": 10299, "synset": "read/write_head.n.01", "name": "read/write_head"}, + {"id": 10300, "synset": "ready-to-wear.n.01", "name": "ready-to-wear"}, + {"id": 10301, "synset": "real_storage.n.01", "name": "real_storage"}, + {"id": 10302, "synset": "reamer.n.02", "name": "reamer"}, + {"id": 10303, "synset": "reaumur_thermometer.n.01", "name": "Reaumur_thermometer"}, + {"id": 10304, "synset": "rebozo.n.01", "name": "rebozo"}, + {"id": 10305, "synset": "receiver.n.01", "name": "receiver"}, + {"id": 10306, "synset": "receptacle.n.01", "name": "receptacle"}, + {"id": 10307, "synset": "reception_desk.n.01", "name": "reception_desk"}, + {"id": 10308, "synset": "reception_room.n.01", "name": "reception_room"}, + {"id": 10309, "synset": "recess.n.04", "name": "recess"}, + { + "id": 10310, + "synset": "reciprocating_engine.n.01", + "name": "reciprocating_engine", + }, + { + "id": 10311, + "synset": "reconnaissance_plane.n.01", + "name": "reconnaissance_plane", + }, + { + "id": 10312, + "synset": "reconnaissance_vehicle.n.01", + "name": "reconnaissance_vehicle", + }, + {"id": 10313, "synset": "record_changer.n.01", "name": "record_changer"}, + {"id": 10314, "synset": "recorder.n.01", "name": "recorder"}, + {"id": 10315, "synset": "recording.n.03", "name": "recording"}, + {"id": 10316, "synset": "recording_system.n.01", "name": "recording_system"}, + {"id": 10317, "synset": "record_sleeve.n.01", "name": "record_sleeve"}, + {"id": 10318, "synset": "recovery_room.n.01", "name": "recovery_room"}, + { + "id": 10319, + "synset": "recreational_vehicle.n.01", + "name": "recreational_vehicle", + }, + {"id": 10320, "synset": "recreation_room.n.01", "name": "recreation_room"}, + {"id": 10321, "synset": "recycling_bin.n.01", "name": "recycling_bin"}, + {"id": 10322, "synset": "recycling_plant.n.01", "name": "recycling_plant"}, + {"id": 10323, "synset": "redbrick_university.n.01", "name": "redbrick_university"}, + {"id": 10324, "synset": "red_carpet.n.01", "name": "red_carpet"}, + {"id": 10325, "synset": "redoubt.n.02", "name": "redoubt"}, + {"id": 10326, "synset": "redoubt.n.01", "name": "redoubt"}, + {"id": 10327, "synset": "reduction_gear.n.01", "name": "reduction_gear"}, + {"id": 10328, "synset": "reed_pipe.n.01", "name": "reed_pipe"}, + {"id": 10329, "synset": "reed_stop.n.01", "name": "reed_stop"}, + {"id": 10330, "synset": "reef_knot.n.01", "name": "reef_knot"}, + {"id": 10331, "synset": "reel.n.03", "name": "reel"}, + {"id": 10332, "synset": "reel.n.01", "name": "reel"}, + {"id": 10333, "synset": "refectory.n.01", "name": "refectory"}, + {"id": 10334, "synset": "refectory_table.n.01", "name": "refectory_table"}, + {"id": 10335, "synset": "refinery.n.01", "name": "refinery"}, + { + "id": 10336, + "synset": "reflecting_telescope.n.01", + "name": "reflecting_telescope", + }, + {"id": 10337, "synset": "reflectometer.n.01", "name": "reflectometer"}, + {"id": 10338, "synset": "reflex_camera.n.01", "name": "reflex_camera"}, + {"id": 10339, "synset": "reflux_condenser.n.01", "name": "reflux_condenser"}, + {"id": 10340, "synset": "reformatory.n.01", "name": "reformatory"}, + {"id": 10341, "synset": "reformer.n.02", "name": "reformer"}, + { + "id": 10342, + "synset": "refracting_telescope.n.01", + "name": "refracting_telescope", + }, + {"id": 10343, "synset": "refractometer.n.01", "name": "refractometer"}, + { + "id": 10344, + "synset": "refrigeration_system.n.01", + "name": "refrigeration_system", + }, + {"id": 10345, "synset": "refrigerator.n.01", "name": "refrigerator"}, + {"id": 10346, "synset": "refrigerator_car.n.01", "name": "refrigerator_car"}, + {"id": 10347, "synset": "refuge.n.03", "name": "refuge"}, + {"id": 10348, "synset": "regalia.n.01", "name": "regalia"}, + {"id": 10349, "synset": "regimentals.n.01", "name": "regimentals"}, + {"id": 10350, "synset": "regulator.n.01", "name": "regulator"}, + {"id": 10351, "synset": "rein.n.01", "name": "rein"}, + {"id": 10352, "synset": "relay.n.05", "name": "relay"}, + {"id": 10353, "synset": "release.n.08", "name": "release"}, + {"id": 10354, "synset": "religious_residence.n.01", "name": "religious_residence"}, + {"id": 10355, "synset": "reliquary.n.01", "name": "reliquary"}, + {"id": 10356, "synset": "remote_terminal.n.01", "name": "remote_terminal"}, + {"id": 10357, "synset": "removable_disk.n.01", "name": "removable_disk"}, + {"id": 10358, "synset": "rendering.n.05", "name": "rendering"}, + {"id": 10359, "synset": "rep.n.02", "name": "rep"}, + {"id": 10360, "synset": "repair_shop.n.01", "name": "repair_shop"}, + {"id": 10361, "synset": "repeater.n.04", "name": "repeater"}, + {"id": 10362, "synset": "repeating_firearm.n.01", "name": "repeating_firearm"}, + {"id": 10363, "synset": "repository.n.03", "name": "repository"}, + {"id": 10364, "synset": "reproducer.n.01", "name": "reproducer"}, + {"id": 10365, "synset": "rerebrace.n.01", "name": "rerebrace"}, + {"id": 10366, "synset": "rescue_equipment.n.01", "name": "rescue_equipment"}, + {"id": 10367, "synset": "research_center.n.01", "name": "research_center"}, + {"id": 10368, "synset": "reseau.n.02", "name": "reseau"}, + {"id": 10369, "synset": "reservoir.n.03", "name": "reservoir"}, + {"id": 10370, "synset": "reset.n.01", "name": "reset"}, + {"id": 10371, "synset": "reset_button.n.01", "name": "reset_button"}, + {"id": 10372, "synset": "residence.n.02", "name": "residence"}, + { + "id": 10373, + "synset": "resistance_pyrometer.n.01", + "name": "resistance_pyrometer", + }, + {"id": 10374, "synset": "resistor.n.01", "name": "resistor"}, + {"id": 10375, "synset": "resonator.n.03", "name": "resonator"}, + {"id": 10376, "synset": "resonator.n.01", "name": "resonator"}, + {"id": 10377, "synset": "resort_hotel.n.02", "name": "resort_hotel"}, + {"id": 10378, "synset": "respirator.n.01", "name": "respirator"}, + {"id": 10379, "synset": "restaurant.n.01", "name": "restaurant"}, + {"id": 10380, "synset": "rest_house.n.01", "name": "rest_house"}, + {"id": 10381, "synset": "restraint.n.06", "name": "restraint"}, + {"id": 10382, "synset": "resuscitator.n.01", "name": "resuscitator"}, + {"id": 10383, "synset": "retainer.n.03", "name": "retainer"}, + {"id": 10384, "synset": "retaining_wall.n.01", "name": "retaining_wall"}, + {"id": 10385, "synset": "reticle.n.01", "name": "reticle"}, + {"id": 10386, "synset": "reticulation.n.02", "name": "reticulation"}, + {"id": 10387, "synset": "reticule.n.01", "name": "reticule"}, + {"id": 10388, "synset": "retort.n.02", "name": "retort"}, + {"id": 10389, "synset": "retractor.n.01", "name": "retractor"}, + {"id": 10390, "synset": "return_key.n.01", "name": "return_key"}, + { + "id": 10391, + "synset": "reverberatory_furnace.n.01", + "name": "reverberatory_furnace", + }, + {"id": 10392, "synset": "revers.n.01", "name": "revers"}, + {"id": 10393, "synset": "reverse.n.02", "name": "reverse"}, + {"id": 10394, "synset": "reversible.n.01", "name": "reversible"}, + {"id": 10395, "synset": "revetment.n.02", "name": "revetment"}, + {"id": 10396, "synset": "revetment.n.01", "name": "revetment"}, + {"id": 10397, "synset": "revolver.n.01", "name": "revolver"}, + {"id": 10398, "synset": "revolving_door.n.02", "name": "revolving_door"}, + {"id": 10399, "synset": "rheometer.n.01", "name": "rheometer"}, + {"id": 10400, "synset": "rheostat.n.01", "name": "rheostat"}, + {"id": 10401, "synset": "rhinoscope.n.01", "name": "rhinoscope"}, + {"id": 10402, "synset": "rib.n.01", "name": "rib"}, + {"id": 10403, "synset": "riband.n.01", "name": "riband"}, + {"id": 10404, "synset": "ribbed_vault.n.01", "name": "ribbed_vault"}, + {"id": 10405, "synset": "ribbing.n.01", "name": "ribbing"}, + {"id": 10406, "synset": "ribbon_development.n.01", "name": "ribbon_development"}, + {"id": 10407, "synset": "rib_joint_pliers.n.01", "name": "rib_joint_pliers"}, + {"id": 10408, "synset": "ricer.n.01", "name": "ricer"}, + {"id": 10409, "synset": "riddle.n.02", "name": "riddle"}, + {"id": 10410, "synset": "ride.n.02", "name": "ride"}, + {"id": 10411, "synset": "ridge.n.06", "name": "ridge"}, + {"id": 10412, "synset": "ridge_rope.n.01", "name": "ridge_rope"}, + {"id": 10413, "synset": "riding_boot.n.01", "name": "riding_boot"}, + {"id": 10414, "synset": "riding_crop.n.01", "name": "riding_crop"}, + {"id": 10415, "synset": "riding_mower.n.01", "name": "riding_mower"}, + {"id": 10416, "synset": "rifle_ball.n.01", "name": "rifle_ball"}, + {"id": 10417, "synset": "rifle_grenade.n.01", "name": "rifle_grenade"}, + {"id": 10418, "synset": "rig.n.01", "name": "rig"}, + {"id": 10419, "synset": "rigger.n.02", "name": "rigger"}, + {"id": 10420, "synset": "rigger.n.04", "name": "rigger"}, + {"id": 10421, "synset": "rigging.n.01", "name": "rigging"}, + {"id": 10422, "synset": "rigout.n.01", "name": "rigout"}, + {"id": 10423, "synset": "ringlet.n.03", "name": "ringlet"}, + {"id": 10424, "synset": "rings.n.01", "name": "rings"}, + {"id": 10425, "synset": "rink.n.01", "name": "rink"}, + {"id": 10426, "synset": "riot_gun.n.01", "name": "riot_gun"}, + {"id": 10427, "synset": "ripcord.n.02", "name": "ripcord"}, + {"id": 10428, "synset": "ripcord.n.01", "name": "ripcord"}, + {"id": 10429, "synset": "ripping_bar.n.01", "name": "ripping_bar"}, + {"id": 10430, "synset": "ripping_chisel.n.01", "name": "ripping_chisel"}, + {"id": 10431, "synset": "ripsaw.n.01", "name": "ripsaw"}, + {"id": 10432, "synset": "riser.n.03", "name": "riser"}, + {"id": 10433, "synset": "riser.n.02", "name": "riser"}, + {"id": 10434, "synset": "ritz.n.03", "name": "Ritz"}, + {"id": 10435, "synset": "rivet.n.02", "name": "rivet"}, + {"id": 10436, "synset": "riveting_machine.n.01", "name": "riveting_machine"}, + {"id": 10437, "synset": "roach_clip.n.01", "name": "roach_clip"}, + {"id": 10438, "synset": "road.n.01", "name": "road"}, + {"id": 10439, "synset": "roadbed.n.01", "name": "roadbed"}, + {"id": 10440, "synset": "roadblock.n.02", "name": "roadblock"}, + {"id": 10441, "synset": "roadhouse.n.01", "name": "roadhouse"}, + {"id": 10442, "synset": "roadster.n.01", "name": "roadster"}, + {"id": 10443, "synset": "roadway.n.01", "name": "roadway"}, + {"id": 10444, "synset": "roaster.n.04", "name": "roaster"}, + {"id": 10445, "synset": "robotics_equipment.n.01", "name": "robotics_equipment"}, + {"id": 10446, "synset": "rochon_prism.n.01", "name": "Rochon_prism"}, + {"id": 10447, "synset": "rock_bit.n.01", "name": "rock_bit"}, + {"id": 10448, "synset": "rocker.n.07", "name": "rocker"}, + {"id": 10449, "synset": "rocker.n.05", "name": "rocker"}, + {"id": 10450, "synset": "rocker_arm.n.01", "name": "rocker_arm"}, + {"id": 10451, "synset": "rocket.n.02", "name": "rocket"}, + {"id": 10452, "synset": "rocket.n.01", "name": "rocket"}, + {"id": 10453, "synset": "rod.n.01", "name": "rod"}, + {"id": 10454, "synset": "rodeo.n.02", "name": "rodeo"}, + {"id": 10455, "synset": "roll.n.04", "name": "roll"}, + {"id": 10456, "synset": "roller.n.04", "name": "roller"}, + {"id": 10457, "synset": "roller.n.03", "name": "roller"}, + {"id": 10458, "synset": "roller_bandage.n.01", "name": "roller_bandage"}, + {"id": 10459, "synset": "in-line_skate.n.01", "name": "in-line_skate"}, + {"id": 10460, "synset": "roller_blind.n.01", "name": "roller_blind"}, + {"id": 10461, "synset": "roller_coaster.n.02", "name": "roller_coaster"}, + {"id": 10462, "synset": "roller_towel.n.01", "name": "roller_towel"}, + {"id": 10463, "synset": "roll_film.n.01", "name": "roll_film"}, + {"id": 10464, "synset": "rolling_hitch.n.01", "name": "rolling_hitch"}, + {"id": 10465, "synset": "rolling_mill.n.01", "name": "rolling_mill"}, + {"id": 10466, "synset": "rolling_stock.n.01", "name": "rolling_stock"}, + {"id": 10467, "synset": "roll-on.n.02", "name": "roll-on"}, + {"id": 10468, "synset": "roll-on.n.01", "name": "roll-on"}, + {"id": 10469, "synset": "roll-on_roll-off.n.01", "name": "roll-on_roll-off"}, + {"id": 10470, "synset": "rolodex.n.01", "name": "Rolodex"}, + {"id": 10471, "synset": "roman_arch.n.01", "name": "Roman_arch"}, + {"id": 10472, "synset": "roman_building.n.01", "name": "Roman_building"}, + {"id": 10473, "synset": "romper.n.02", "name": "romper"}, + {"id": 10474, "synset": "rood_screen.n.01", "name": "rood_screen"}, + {"id": 10475, "synset": "roof.n.01", "name": "roof"}, + {"id": 10476, "synset": "roof.n.02", "name": "roof"}, + {"id": 10477, "synset": "roofing.n.01", "name": "roofing"}, + {"id": 10478, "synset": "room.n.01", "name": "room"}, + {"id": 10479, "synset": "roomette.n.01", "name": "roomette"}, + {"id": 10480, "synset": "room_light.n.01", "name": "room_light"}, + {"id": 10481, "synset": "roost.n.01", "name": "roost"}, + {"id": 10482, "synset": "rope.n.01", "name": "rope"}, + {"id": 10483, "synset": "rope_bridge.n.01", "name": "rope_bridge"}, + {"id": 10484, "synset": "rope_tow.n.01", "name": "rope_tow"}, + {"id": 10485, "synset": "rose_water.n.01", "name": "rose_water"}, + {"id": 10486, "synset": "rose_window.n.01", "name": "rose_window"}, + {"id": 10487, "synset": "rosin_bag.n.01", "name": "rosin_bag"}, + {"id": 10488, "synset": "rotary_actuator.n.01", "name": "rotary_actuator"}, + {"id": 10489, "synset": "rotary_engine.n.01", "name": "rotary_engine"}, + {"id": 10490, "synset": "rotary_press.n.01", "name": "rotary_press"}, + {"id": 10491, "synset": "rotating_mechanism.n.01", "name": "rotating_mechanism"}, + {"id": 10492, "synset": "rotating_shaft.n.01", "name": "rotating_shaft"}, + {"id": 10493, "synset": "rotisserie.n.02", "name": "rotisserie"}, + {"id": 10494, "synset": "rotisserie.n.01", "name": "rotisserie"}, + {"id": 10495, "synset": "rotor.n.03", "name": "rotor"}, + {"id": 10496, "synset": "rotor.n.01", "name": "rotor"}, + {"id": 10497, "synset": "rotor.n.02", "name": "rotor"}, + {"id": 10498, "synset": "rotor_blade.n.01", "name": "rotor_blade"}, + {"id": 10499, "synset": "rotor_head.n.01", "name": "rotor_head"}, + {"id": 10500, "synset": "rotunda.n.02", "name": "rotunda"}, + {"id": 10501, "synset": "rotunda.n.01", "name": "rotunda"}, + {"id": 10502, "synset": "rouge.n.01", "name": "rouge"}, + {"id": 10503, "synset": "roughcast.n.02", "name": "roughcast"}, + {"id": 10504, "synset": "rouleau.n.02", "name": "rouleau"}, + {"id": 10505, "synset": "roulette.n.02", "name": "roulette"}, + {"id": 10506, "synset": "roulette_ball.n.01", "name": "roulette_ball"}, + {"id": 10507, "synset": "roulette_wheel.n.01", "name": "roulette_wheel"}, + {"id": 10508, "synset": "round.n.01", "name": "round"}, + {"id": 10509, "synset": "round_arch.n.01", "name": "round_arch"}, + {"id": 10510, "synset": "round-bottom_flask.n.01", "name": "round-bottom_flask"}, + {"id": 10511, "synset": "roundel.n.02", "name": "roundel"}, + {"id": 10512, "synset": "round_file.n.01", "name": "round_file"}, + {"id": 10513, "synset": "roundhouse.n.01", "name": "roundhouse"}, + {"id": 10514, "synset": "router.n.03", "name": "router"}, + {"id": 10515, "synset": "router_plane.n.01", "name": "router_plane"}, + {"id": 10516, "synset": "rowel.n.01", "name": "rowel"}, + {"id": 10517, "synset": "row_house.n.01", "name": "row_house"}, + {"id": 10518, "synset": "rowing_boat.n.01", "name": "rowing_boat"}, + {"id": 10519, "synset": "rowlock_arch.n.01", "name": "rowlock_arch"}, + {"id": 10520, "synset": "royal.n.01", "name": "royal"}, + {"id": 10521, "synset": "royal_mast.n.01", "name": "royal_mast"}, + {"id": 10522, "synset": "rubber_boot.n.01", "name": "rubber_boot"}, + {"id": 10523, "synset": "rubber_bullet.n.01", "name": "rubber_bullet"}, + {"id": 10524, "synset": "rubber_eraser.n.01", "name": "rubber_eraser"}, + {"id": 10525, "synset": "rudder.n.02", "name": "rudder"}, + {"id": 10526, "synset": "rudder.n.01", "name": "rudder"}, + {"id": 10527, "synset": "rudder_blade.n.01", "name": "rudder_blade"}, + {"id": 10528, "synset": "rug.n.01", "name": "rug"}, + {"id": 10529, "synset": "rugby_ball.n.01", "name": "rugby_ball"}, + {"id": 10530, "synset": "ruin.n.02", "name": "ruin"}, + {"id": 10531, "synset": "rule.n.12", "name": "rule"}, + {"id": 10532, "synset": "rumble.n.02", "name": "rumble"}, + {"id": 10533, "synset": "rumble_seat.n.01", "name": "rumble_seat"}, + {"id": 10534, "synset": "rummer.n.01", "name": "rummer"}, + {"id": 10535, "synset": "rumpus_room.n.01", "name": "rumpus_room"}, + {"id": 10536, "synset": "runcible_spoon.n.01", "name": "runcible_spoon"}, + {"id": 10537, "synset": "rundle.n.01", "name": "rundle"}, + {"id": 10538, "synset": "running_shoe.n.01", "name": "running_shoe"}, + {"id": 10539, "synset": "running_suit.n.01", "name": "running_suit"}, + {"id": 10540, "synset": "runway.n.04", "name": "runway"}, + {"id": 10541, "synset": "rushlight.n.01", "name": "rushlight"}, + {"id": 10542, "synset": "russet.n.01", "name": "russet"}, + {"id": 10543, "synset": "rya.n.01", "name": "rya"}, + {"id": 10544, "synset": "saber.n.01", "name": "saber"}, + {"id": 10545, "synset": "saber_saw.n.01", "name": "saber_saw"}, + {"id": 10546, "synset": "sable.n.04", "name": "sable"}, + {"id": 10547, "synset": "sable.n.01", "name": "sable"}, + {"id": 10548, "synset": "sable_coat.n.01", "name": "sable_coat"}, + {"id": 10549, "synset": "sabot.n.01", "name": "sabot"}, + {"id": 10550, "synset": "sachet.n.01", "name": "sachet"}, + {"id": 10551, "synset": "sack.n.05", "name": "sack"}, + {"id": 10552, "synset": "sackbut.n.01", "name": "sackbut"}, + {"id": 10553, "synset": "sackcloth.n.02", "name": "sackcloth"}, + {"id": 10554, "synset": "sackcloth.n.01", "name": "sackcloth"}, + {"id": 10555, "synset": "sack_coat.n.01", "name": "sack_coat"}, + {"id": 10556, "synset": "sacking.n.01", "name": "sacking"}, + {"id": 10557, "synset": "saddle_oxford.n.01", "name": "saddle_oxford"}, + {"id": 10558, "synset": "saddlery.n.02", "name": "saddlery"}, + {"id": 10559, "synset": "saddle_seat.n.01", "name": "saddle_seat"}, + {"id": 10560, "synset": "saddle_stitch.n.01", "name": "saddle_stitch"}, + {"id": 10561, "synset": "safe.n.01", "name": "safe"}, + {"id": 10562, "synset": "safe.n.02", "name": "safe"}, + {"id": 10563, "synset": "safe-deposit.n.01", "name": "safe-deposit"}, + {"id": 10564, "synset": "safe_house.n.01", "name": "safe_house"}, + {"id": 10565, "synset": "safety_arch.n.01", "name": "safety_arch"}, + {"id": 10566, "synset": "safety_belt.n.01", "name": "safety_belt"}, + {"id": 10567, "synset": "safety_bicycle.n.01", "name": "safety_bicycle"}, + {"id": 10568, "synset": "safety_bolt.n.01", "name": "safety_bolt"}, + {"id": 10569, "synset": "safety_curtain.n.01", "name": "safety_curtain"}, + {"id": 10570, "synset": "safety_fuse.n.01", "name": "safety_fuse"}, + {"id": 10571, "synset": "safety_lamp.n.01", "name": "safety_lamp"}, + {"id": 10572, "synset": "safety_match.n.01", "name": "safety_match"}, + {"id": 10573, "synset": "safety_net.n.02", "name": "safety_net"}, + {"id": 10574, "synset": "safety_rail.n.01", "name": "safety_rail"}, + {"id": 10575, "synset": "safety_razor.n.01", "name": "safety_razor"}, + {"id": 10576, "synset": "safety_valve.n.01", "name": "safety_valve"}, + {"id": 10577, "synset": "sail.n.03", "name": "sail"}, + {"id": 10578, "synset": "sailboat.n.01", "name": "sailboat"}, + {"id": 10579, "synset": "sailcloth.n.01", "name": "sailcloth"}, + {"id": 10580, "synset": "sailing_vessel.n.01", "name": "sailing_vessel"}, + {"id": 10581, "synset": "sailing_warship.n.01", "name": "sailing_warship"}, + {"id": 10582, "synset": "sailor_cap.n.01", "name": "sailor_cap"}, + {"id": 10583, "synset": "sailor_suit.n.01", "name": "sailor_suit"}, + {"id": 10584, "synset": "salad_bar.n.01", "name": "salad_bar"}, + {"id": 10585, "synset": "salad_bowl.n.02", "name": "salad_bowl"}, + {"id": 10586, "synset": "salinometer.n.01", "name": "salinometer"}, + {"id": 10587, "synset": "sallet.n.01", "name": "sallet"}, + {"id": 10588, "synset": "salon.n.03", "name": "salon"}, + {"id": 10589, "synset": "salon.n.01", "name": "salon"}, + {"id": 10590, "synset": "salon.n.02", "name": "salon"}, + {"id": 10591, "synset": "saltbox.n.01", "name": "saltbox"}, + {"id": 10592, "synset": "saltcellar.n.01", "name": "saltcellar"}, + {"id": 10593, "synset": "saltworks.n.01", "name": "saltworks"}, + {"id": 10594, "synset": "salver.n.01", "name": "salver"}, + {"id": 10595, "synset": "salwar.n.01", "name": "salwar"}, + {"id": 10596, "synset": "sam_browne_belt.n.01", "name": "Sam_Browne_belt"}, + {"id": 10597, "synset": "samisen.n.01", "name": "samisen"}, + {"id": 10598, "synset": "samite.n.01", "name": "samite"}, + {"id": 10599, "synset": "samovar.n.01", "name": "samovar"}, + {"id": 10600, "synset": "sampan.n.01", "name": "sampan"}, + {"id": 10601, "synset": "sandbag.n.01", "name": "sandbag"}, + {"id": 10602, "synset": "sandblaster.n.01", "name": "sandblaster"}, + {"id": 10603, "synset": "sandbox.n.01", "name": "sandbox"}, + {"id": 10604, "synset": "sandglass.n.01", "name": "sandglass"}, + {"id": 10605, "synset": "sand_wedge.n.01", "name": "sand_wedge"}, + {"id": 10606, "synset": "sandwich_board.n.01", "name": "sandwich_board"}, + {"id": 10607, "synset": "sanitary_napkin.n.01", "name": "sanitary_napkin"}, + {"id": 10608, "synset": "cling_film.n.01", "name": "cling_film"}, + {"id": 10609, "synset": "sarcenet.n.01", "name": "sarcenet"}, + {"id": 10610, "synset": "sarcophagus.n.01", "name": "sarcophagus"}, + {"id": 10611, "synset": "sari.n.01", "name": "sari"}, + {"id": 10612, "synset": "sarong.n.01", "name": "sarong"}, + {"id": 10613, "synset": "sash.n.01", "name": "sash"}, + {"id": 10614, "synset": "sash_fastener.n.01", "name": "sash_fastener"}, + {"id": 10615, "synset": "sash_window.n.01", "name": "sash_window"}, + {"id": 10616, "synset": "sateen.n.01", "name": "sateen"}, + {"id": 10617, "synset": "satellite.n.01", "name": "satellite"}, + {"id": 10618, "synset": "satellite_receiver.n.01", "name": "satellite_receiver"}, + { + "id": 10619, + "synset": "satellite_television.n.01", + "name": "satellite_television", + }, + { + "id": 10620, + "synset": "satellite_transmitter.n.01", + "name": "satellite_transmitter", + }, + {"id": 10621, "synset": "satin.n.01", "name": "satin"}, + { + "id": 10622, + "synset": "saturday_night_special.n.01", + "name": "Saturday_night_special", + }, + {"id": 10623, "synset": "saucepot.n.01", "name": "saucepot"}, + {"id": 10624, "synset": "sauna.n.01", "name": "sauna"}, + {"id": 10625, "synset": "savings_bank.n.02", "name": "savings_bank"}, + {"id": 10626, "synset": "saw.n.02", "name": "saw"}, + {"id": 10627, "synset": "sawed-off_shotgun.n.01", "name": "sawed-off_shotgun"}, + {"id": 10628, "synset": "sawmill.n.01", "name": "sawmill"}, + {"id": 10629, "synset": "saw_set.n.01", "name": "saw_set"}, + {"id": 10630, "synset": "saxhorn.n.01", "name": "saxhorn"}, + {"id": 10631, "synset": "scabbard.n.01", "name": "scabbard"}, + {"id": 10632, "synset": "scaffolding.n.01", "name": "scaffolding"}, + {"id": 10633, "synset": "scale.n.08", "name": "scale"}, + {"id": 10634, "synset": "scaler.n.01", "name": "scaler"}, + {"id": 10635, "synset": "scaling_ladder.n.01", "name": "scaling_ladder"}, + {"id": 10636, "synset": "scalpel.n.01", "name": "scalpel"}, + {"id": 10637, "synset": "scanner.n.04", "name": "scanner"}, + {"id": 10638, "synset": "scanner.n.03", "name": "scanner"}, + {"id": 10639, "synset": "scanner.n.02", "name": "scanner"}, + {"id": 10640, "synset": "scantling.n.01", "name": "scantling"}, + {"id": 10641, "synset": "scarf_joint.n.01", "name": "scarf_joint"}, + {"id": 10642, "synset": "scatter_rug.n.01", "name": "scatter_rug"}, + {"id": 10643, "synset": "scauper.n.01", "name": "scauper"}, + {"id": 10644, "synset": "schmidt_telescope.n.01", "name": "Schmidt_telescope"}, + {"id": 10645, "synset": "school.n.02", "name": "school"}, + {"id": 10646, "synset": "schoolbag.n.01", "name": "schoolbag"}, + {"id": 10647, "synset": "school_bell.n.01", "name": "school_bell"}, + {"id": 10648, "synset": "school_ship.n.01", "name": "school_ship"}, + {"id": 10649, "synset": "school_system.n.01", "name": "school_system"}, + {"id": 10650, "synset": "schooner.n.02", "name": "schooner"}, + {"id": 10651, "synset": "schooner.n.01", "name": "schooner"}, + { + "id": 10652, + "synset": "scientific_instrument.n.01", + "name": "scientific_instrument", + }, + {"id": 10653, "synset": "scimitar.n.01", "name": "scimitar"}, + { + "id": 10654, + "synset": "scintillation_counter.n.01", + "name": "scintillation_counter", + }, + {"id": 10655, "synset": "sclerometer.n.01", "name": "sclerometer"}, + {"id": 10656, "synset": "scoinson_arch.n.01", "name": "scoinson_arch"}, + {"id": 10657, "synset": "sconce.n.04", "name": "sconce"}, + {"id": 10658, "synset": "sconce.n.03", "name": "sconce"}, + {"id": 10659, "synset": "scoop.n.06", "name": "scoop"}, + {"id": 10660, "synset": "scooter.n.02", "name": "scooter"}, + {"id": 10661, "synset": "scouring_pad.n.01", "name": "scouring_pad"}, + {"id": 10662, "synset": "scow.n.02", "name": "scow"}, + {"id": 10663, "synset": "scow.n.01", "name": "scow"}, + {"id": 10664, "synset": "scratcher.n.03", "name": "scratcher"}, + {"id": 10665, "synset": "screen.n.05", "name": "screen"}, + {"id": 10666, "synset": "screen.n.04", "name": "screen"}, + {"id": 10667, "synset": "screen.n.09", "name": "screen"}, + {"id": 10668, "synset": "screen.n.03", "name": "screen"}, + {"id": 10669, "synset": "screen_door.n.01", "name": "screen_door"}, + {"id": 10670, "synset": "screening.n.02", "name": "screening"}, + {"id": 10671, "synset": "screw.n.04", "name": "screw"}, + {"id": 10672, "synset": "screw.n.03", "name": "screw"}, + {"id": 10673, "synset": "screw.n.02", "name": "screw"}, + {"id": 10674, "synset": "screw_eye.n.01", "name": "screw_eye"}, + {"id": 10675, "synset": "screw_key.n.01", "name": "screw_key"}, + {"id": 10676, "synset": "screw_thread.n.01", "name": "screw_thread"}, + {"id": 10677, "synset": "screwtop.n.01", "name": "screwtop"}, + {"id": 10678, "synset": "screw_wrench.n.01", "name": "screw_wrench"}, + {"id": 10679, "synset": "scriber.n.01", "name": "scriber"}, + {"id": 10680, "synset": "scrim.n.01", "name": "scrim"}, + {"id": 10681, "synset": "scrimshaw.n.01", "name": "scrimshaw"}, + {"id": 10682, "synset": "scriptorium.n.01", "name": "scriptorium"}, + {"id": 10683, "synset": "scrubber.n.03", "name": "scrubber"}, + {"id": 10684, "synset": "scrub_plane.n.01", "name": "scrub_plane"}, + {"id": 10685, "synset": "scuffer.n.01", "name": "scuffer"}, + {"id": 10686, "synset": "scuffle.n.02", "name": "scuffle"}, + {"id": 10687, "synset": "scull.n.02", "name": "scull"}, + {"id": 10688, "synset": "scull.n.01", "name": "scull"}, + {"id": 10689, "synset": "scullery.n.01", "name": "scullery"}, + {"id": 10690, "synset": "scuttle.n.01", "name": "scuttle"}, + {"id": 10691, "synset": "scyphus.n.01", "name": "scyphus"}, + {"id": 10692, "synset": "scythe.n.01", "name": "scythe"}, + {"id": 10693, "synset": "seabag.n.01", "name": "seabag"}, + {"id": 10694, "synset": "sea_boat.n.01", "name": "sea_boat"}, + {"id": 10695, "synset": "sea_chest.n.01", "name": "sea_chest"}, + {"id": 10696, "synset": "sealing_wax.n.01", "name": "sealing_wax"}, + {"id": 10697, "synset": "sealskin.n.02", "name": "sealskin"}, + {"id": 10698, "synset": "seam.n.01", "name": "seam"}, + {"id": 10699, "synset": "searchlight.n.01", "name": "searchlight"}, + {"id": 10700, "synset": "searing_iron.n.01", "name": "searing_iron"}, + {"id": 10701, "synset": "seat.n.04", "name": "seat"}, + {"id": 10702, "synset": "seat.n.03", "name": "seat"}, + {"id": 10703, "synset": "seat.n.09", "name": "seat"}, + {"id": 10704, "synset": "seat_belt.n.01", "name": "seat_belt"}, + {"id": 10705, "synset": "secateurs.n.01", "name": "secateurs"}, + {"id": 10706, "synset": "secondary_coil.n.01", "name": "secondary_coil"}, + {"id": 10707, "synset": "second_balcony.n.01", "name": "second_balcony"}, + {"id": 10708, "synset": "second_base.n.01", "name": "second_base"}, + {"id": 10709, "synset": "second_hand.n.02", "name": "second_hand"}, + {"id": 10710, "synset": "secretary.n.04", "name": "secretary"}, + {"id": 10711, "synset": "sectional.n.01", "name": "sectional"}, + {"id": 10712, "synset": "security_blanket.n.02", "name": "security_blanket"}, + {"id": 10713, "synset": "security_system.n.02", "name": "security_system"}, + {"id": 10714, "synset": "security_system.n.01", "name": "security_system"}, + {"id": 10715, "synset": "sedan.n.01", "name": "sedan"}, + {"id": 10716, "synset": "sedan.n.02", "name": "sedan"}, + {"id": 10717, "synset": "seeder.n.02", "name": "seeder"}, + {"id": 10718, "synset": "seeker.n.02", "name": "seeker"}, + {"id": 10719, "synset": "seersucker.n.01", "name": "seersucker"}, + {"id": 10720, "synset": "segmental_arch.n.01", "name": "segmental_arch"}, + {"id": 10721, "synset": "segway.n.01", "name": "Segway"}, + {"id": 10722, "synset": "seidel.n.01", "name": "seidel"}, + {"id": 10723, "synset": "seine.n.02", "name": "seine"}, + {"id": 10724, "synset": "seismograph.n.01", "name": "seismograph"}, + {"id": 10725, "synset": "selector.n.02", "name": "selector"}, + {"id": 10726, "synset": "selenium_cell.n.01", "name": "selenium_cell"}, + { + "id": 10727, + "synset": "self-propelled_vehicle.n.01", + "name": "self-propelled_vehicle", + }, + { + "id": 10728, + "synset": "self-registering_thermometer.n.01", + "name": "self-registering_thermometer", + }, + {"id": 10729, "synset": "self-starter.n.02", "name": "self-starter"}, + {"id": 10730, "synset": "selsyn.n.01", "name": "selsyn"}, + {"id": 10731, "synset": "selvage.n.02", "name": "selvage"}, + {"id": 10732, "synset": "semaphore.n.01", "name": "semaphore"}, + { + "id": 10733, + "synset": "semiautomatic_firearm.n.01", + "name": "semiautomatic_firearm", + }, + { + "id": 10734, + "synset": "semiautomatic_pistol.n.01", + "name": "semiautomatic_pistol", + }, + { + "id": 10735, + "synset": "semiconductor_device.n.01", + "name": "semiconductor_device", + }, + {"id": 10736, "synset": "semi-detached_house.n.01", "name": "semi-detached_house"}, + {"id": 10737, "synset": "semigloss.n.01", "name": "semigloss"}, + {"id": 10738, "synset": "semitrailer.n.01", "name": "semitrailer"}, + {"id": 10739, "synset": "sennit.n.01", "name": "sennit"}, + {"id": 10740, "synset": "sensitometer.n.01", "name": "sensitometer"}, + {"id": 10741, "synset": "sentry_box.n.01", "name": "sentry_box"}, + {"id": 10742, "synset": "separate.n.02", "name": "separate"}, + {"id": 10743, "synset": "septic_tank.n.01", "name": "septic_tank"}, + {"id": 10744, "synset": "sequence.n.03", "name": "sequence"}, + {"id": 10745, "synset": "sequencer.n.01", "name": "sequencer"}, + {"id": 10746, "synset": "serape.n.01", "name": "serape"}, + {"id": 10747, "synset": "serge.n.01", "name": "serge"}, + {"id": 10748, "synset": "serger.n.01", "name": "serger"}, + {"id": 10749, "synset": "serial_port.n.01", "name": "serial_port"}, + {"id": 10750, "synset": "serpent.n.03", "name": "serpent"}, + {"id": 10751, "synset": "serration.n.03", "name": "serration"}, + {"id": 10752, "synset": "server.n.04", "name": "server"}, + {"id": 10753, "synset": "server.n.03", "name": "server"}, + {"id": 10754, "synset": "service_club.n.02", "name": "service_club"}, + {"id": 10755, "synset": "serving_cart.n.01", "name": "serving_cart"}, + {"id": 10756, "synset": "serving_dish.n.01", "name": "serving_dish"}, + {"id": 10757, "synset": "servo.n.01", "name": "servo"}, + {"id": 10758, "synset": "set.n.13", "name": "set"}, + {"id": 10759, "synset": "set_gun.n.01", "name": "set_gun"}, + {"id": 10760, "synset": "setscrew.n.02", "name": "setscrew"}, + {"id": 10761, "synset": "setscrew.n.01", "name": "setscrew"}, + {"id": 10762, "synset": "set_square.n.01", "name": "set_square"}, + {"id": 10763, "synset": "settee.n.02", "name": "settee"}, + {"id": 10764, "synset": "settle.n.01", "name": "settle"}, + {"id": 10765, "synset": "settlement_house.n.01", "name": "settlement_house"}, + {"id": 10766, "synset": "seventy-eight.n.02", "name": "seventy-eight"}, + { + "id": 10767, + "synset": "seven_wonders_of_the_ancient_world.n.01", + "name": "Seven_Wonders_of_the_Ancient_World", + }, + { + "id": 10768, + "synset": "sewage_disposal_plant.n.01", + "name": "sewage_disposal_plant", + }, + {"id": 10769, "synset": "sewer.n.01", "name": "sewer"}, + {"id": 10770, "synset": "sewing_basket.n.01", "name": "sewing_basket"}, + {"id": 10771, "synset": "sewing_kit.n.01", "name": "sewing_kit"}, + {"id": 10772, "synset": "sewing_needle.n.01", "name": "sewing_needle"}, + {"id": 10773, "synset": "sewing_room.n.01", "name": "sewing_room"}, + {"id": 10774, "synset": "sextant.n.02", "name": "sextant"}, + {"id": 10775, "synset": "sgraffito.n.01", "name": "sgraffito"}, + {"id": 10776, "synset": "shackle.n.01", "name": "shackle"}, + {"id": 10777, "synset": "shackle.n.02", "name": "shackle"}, + {"id": 10778, "synset": "shade.n.03", "name": "shade"}, + {"id": 10779, "synset": "shadow_box.n.01", "name": "shadow_box"}, + {"id": 10780, "synset": "shaft.n.03", "name": "shaft"}, + {"id": 10781, "synset": "shag_rug.n.01", "name": "shag_rug"}, + {"id": 10782, "synset": "shank.n.04", "name": "shank"}, + {"id": 10783, "synset": "shank.n.03", "name": "shank"}, + {"id": 10784, "synset": "shantung.n.01", "name": "shantung"}, + {"id": 10785, "synset": "shaper.n.02", "name": "shaper"}, + {"id": 10786, "synset": "shaping_tool.n.01", "name": "shaping_tool"}, + {"id": 10787, "synset": "sharkskin.n.01", "name": "sharkskin"}, + {"id": 10788, "synset": "shaving_brush.n.01", "name": "shaving_brush"}, + {"id": 10789, "synset": "shaving_foam.n.01", "name": "shaving_foam"}, + {"id": 10790, "synset": "shawm.n.01", "name": "shawm"}, + {"id": 10791, "synset": "sheath.n.01", "name": "sheath"}, + {"id": 10792, "synset": "sheathing.n.01", "name": "sheathing"}, + {"id": 10793, "synset": "shed.n.01", "name": "shed"}, + {"id": 10794, "synset": "sheep_bell.n.01", "name": "sheep_bell"}, + {"id": 10795, "synset": "sheepshank.n.01", "name": "sheepshank"}, + {"id": 10796, "synset": "sheepskin_coat.n.01", "name": "sheepskin_coat"}, + {"id": 10797, "synset": "sheepwalk.n.01", "name": "sheepwalk"}, + {"id": 10798, "synset": "sheet.n.03", "name": "sheet"}, + {"id": 10799, "synset": "sheet_bend.n.01", "name": "sheet_bend"}, + {"id": 10800, "synset": "sheeting.n.01", "name": "sheeting"}, + {"id": 10801, "synset": "sheet_pile.n.01", "name": "sheet_pile"}, + {"id": 10802, "synset": "sheetrock.n.01", "name": "Sheetrock"}, + {"id": 10803, "synset": "shelf.n.01", "name": "shelf"}, + {"id": 10804, "synset": "shelf_bracket.n.01", "name": "shelf_bracket"}, + {"id": 10805, "synset": "shell.n.01", "name": "shell"}, + {"id": 10806, "synset": "shell.n.08", "name": "shell"}, + {"id": 10807, "synset": "shell.n.07", "name": "shell"}, + {"id": 10808, "synset": "shellac.n.02", "name": "shellac"}, + {"id": 10809, "synset": "shelter.n.01", "name": "shelter"}, + {"id": 10810, "synset": "shelter.n.02", "name": "shelter"}, + {"id": 10811, "synset": "shelter.n.05", "name": "shelter"}, + {"id": 10812, "synset": "sheltered_workshop.n.01", "name": "sheltered_workshop"}, + {"id": 10813, "synset": "sheraton.n.01", "name": "Sheraton"}, + {"id": 10814, "synset": "shield.n.01", "name": "shield"}, + {"id": 10815, "synset": "shielding.n.03", "name": "shielding"}, + {"id": 10816, "synset": "shift_key.n.01", "name": "shift_key"}, + {"id": 10817, "synset": "shillelagh.n.01", "name": "shillelagh"}, + {"id": 10818, "synset": "shim.n.01", "name": "shim"}, + {"id": 10819, "synset": "shingle.n.03", "name": "shingle"}, + {"id": 10820, "synset": "shin_guard.n.01", "name": "shin_guard"}, + {"id": 10821, "synset": "ship.n.01", "name": "ship"}, + {"id": 10822, "synset": "shipboard_system.n.01", "name": "shipboard_system"}, + {"id": 10823, "synset": "shipping.n.02", "name": "shipping"}, + {"id": 10824, "synset": "shipping_room.n.01", "name": "shipping_room"}, + { + "id": 10825, + "synset": "ship-towed_long-range_acoustic_detection_system.n.01", + "name": "ship-towed_long-range_acoustic_detection_system", + }, + {"id": 10826, "synset": "shipwreck.n.01", "name": "shipwreck"}, + {"id": 10827, "synset": "shirt_button.n.01", "name": "shirt_button"}, + {"id": 10828, "synset": "shirtdress.n.01", "name": "shirtdress"}, + {"id": 10829, "synset": "shirtfront.n.01", "name": "shirtfront"}, + {"id": 10830, "synset": "shirting.n.01", "name": "shirting"}, + {"id": 10831, "synset": "shirtsleeve.n.01", "name": "shirtsleeve"}, + {"id": 10832, "synset": "shirttail.n.02", "name": "shirttail"}, + {"id": 10833, "synset": "shirtwaist.n.01", "name": "shirtwaist"}, + {"id": 10834, "synset": "shiv.n.01", "name": "shiv"}, + {"id": 10835, "synset": "shock_absorber.n.01", "name": "shock_absorber"}, + {"id": 10836, "synset": "shoe.n.02", "name": "shoe"}, + {"id": 10837, "synset": "shoebox.n.02", "name": "shoebox"}, + {"id": 10838, "synset": "shoehorn.n.01", "name": "shoehorn"}, + {"id": 10839, "synset": "shoe_shop.n.01", "name": "shoe_shop"}, + {"id": 10840, "synset": "shoetree.n.01", "name": "shoetree"}, + {"id": 10841, "synset": "shofar.n.01", "name": "shofar"}, + {"id": 10842, "synset": "shoji.n.01", "name": "shoji"}, + {"id": 10843, "synset": "shooting_brake.n.01", "name": "shooting_brake"}, + {"id": 10844, "synset": "shooting_lodge.n.01", "name": "shooting_lodge"}, + {"id": 10845, "synset": "shooting_stick.n.01", "name": "shooting_stick"}, + {"id": 10846, "synset": "shop.n.01", "name": "shop"}, + {"id": 10847, "synset": "shop_bell.n.01", "name": "shop_bell"}, + {"id": 10848, "synset": "shopping_basket.n.01", "name": "shopping_basket"}, + {"id": 10849, "synset": "short_circuit.n.01", "name": "short_circuit"}, + {"id": 10850, "synset": "short_iron.n.01", "name": "short_iron"}, + {"id": 10851, "synset": "short_sleeve.n.01", "name": "short_sleeve"}, + { + "id": 10852, + "synset": "shortwave_diathermy_machine.n.01", + "name": "shortwave_diathermy_machine", + }, + {"id": 10853, "synset": "shot.n.12", "name": "shot"}, + {"id": 10854, "synset": "shotgun.n.01", "name": "shotgun"}, + {"id": 10855, "synset": "shotgun_shell.n.01", "name": "shotgun_shell"}, + {"id": 10856, "synset": "shot_tower.n.01", "name": "shot_tower"}, + {"id": 10857, "synset": "shoulder.n.04", "name": "shoulder"}, + {"id": 10858, "synset": "shouldered_arch.n.01", "name": "shouldered_arch"}, + {"id": 10859, "synset": "shoulder_holster.n.01", "name": "shoulder_holster"}, + {"id": 10860, "synset": "shoulder_pad.n.01", "name": "shoulder_pad"}, + {"id": 10861, "synset": "shoulder_patch.n.01", "name": "shoulder_patch"}, + {"id": 10862, "synset": "shovel.n.03", "name": "shovel"}, + {"id": 10863, "synset": "shovel_hat.n.01", "name": "shovel_hat"}, + {"id": 10864, "synset": "showboat.n.01", "name": "showboat"}, + {"id": 10865, "synset": "shower_room.n.01", "name": "shower_room"}, + {"id": 10866, "synset": "shower_stall.n.01", "name": "shower_stall"}, + {"id": 10867, "synset": "showroom.n.01", "name": "showroom"}, + {"id": 10868, "synset": "shrapnel.n.01", "name": "shrapnel"}, + {"id": 10869, "synset": "shrimper.n.01", "name": "shrimper"}, + {"id": 10870, "synset": "shrine.n.01", "name": "shrine"}, + {"id": 10871, "synset": "shrink-wrap.n.01", "name": "shrink-wrap"}, + {"id": 10872, "synset": "shunt.n.03", "name": "shunt"}, + {"id": 10873, "synset": "shunt.n.02", "name": "shunt"}, + {"id": 10874, "synset": "shunter.n.01", "name": "shunter"}, + {"id": 10875, "synset": "shutter.n.02", "name": "shutter"}, + {"id": 10876, "synset": "shutter.n.01", "name": "shutter"}, + {"id": 10877, "synset": "shuttle.n.03", "name": "shuttle"}, + {"id": 10878, "synset": "shuttle.n.02", "name": "shuttle"}, + {"id": 10879, "synset": "shuttle_bus.n.01", "name": "shuttle_bus"}, + {"id": 10880, "synset": "shuttlecock.n.01", "name": "shuttlecock"}, + {"id": 10881, "synset": "shuttle_helicopter.n.01", "name": "shuttle_helicopter"}, + {"id": 10882, "synset": "sibley_tent.n.01", "name": "Sibley_tent"}, + {"id": 10883, "synset": "sickbay.n.01", "name": "sickbay"}, + {"id": 10884, "synset": "sickbed.n.01", "name": "sickbed"}, + {"id": 10885, "synset": "sickle.n.01", "name": "sickle"}, + {"id": 10886, "synset": "sickroom.n.01", "name": "sickroom"}, + {"id": 10887, "synset": "sideboard.n.02", "name": "sideboard"}, + {"id": 10888, "synset": "sidecar.n.02", "name": "sidecar"}, + {"id": 10889, "synset": "side_chapel.n.01", "name": "side_chapel"}, + {"id": 10890, "synset": "sidelight.n.01", "name": "sidelight"}, + {"id": 10891, "synset": "sidesaddle.n.01", "name": "sidesaddle"}, + {"id": 10892, "synset": "sidewalk.n.01", "name": "sidewalk"}, + {"id": 10893, "synset": "sidewall.n.02", "name": "sidewall"}, + {"id": 10894, "synset": "side-wheeler.n.01", "name": "side-wheeler"}, + {"id": 10895, "synset": "sidewinder.n.02", "name": "sidewinder"}, + {"id": 10896, "synset": "sieve.n.01", "name": "sieve"}, + {"id": 10897, "synset": "sifter.n.01", "name": "sifter"}, + {"id": 10898, "synset": "sights.n.01", "name": "sights"}, + {"id": 10899, "synset": "sigmoidoscope.n.01", "name": "sigmoidoscope"}, + {"id": 10900, "synset": "signal_box.n.01", "name": "signal_box"}, + {"id": 10901, "synset": "signaling_device.n.01", "name": "signaling_device"}, + {"id": 10902, "synset": "silencer.n.02", "name": "silencer"}, + {"id": 10903, "synset": "silent_butler.n.01", "name": "silent_butler"}, + {"id": 10904, "synset": "silex.n.02", "name": "Silex"}, + {"id": 10905, "synset": "silk.n.01", "name": "silk"}, + {"id": 10906, "synset": "silks.n.01", "name": "silks"}, + {"id": 10907, "synset": "silver_plate.n.02", "name": "silver_plate"}, + {"id": 10908, "synset": "silverpoint.n.01", "name": "silverpoint"}, + {"id": 10909, "synset": "simple_pendulum.n.01", "name": "simple_pendulum"}, + {"id": 10910, "synset": "simulator.n.01", "name": "simulator"}, + {"id": 10911, "synset": "single_bed.n.01", "name": "single_bed"}, + { + "id": 10912, + "synset": "single-breasted_jacket.n.01", + "name": "single-breasted_jacket", + }, + { + "id": 10913, + "synset": "single-breasted_suit.n.01", + "name": "single-breasted_suit", + }, + {"id": 10914, "synset": "single_prop.n.01", "name": "single_prop"}, + { + "id": 10915, + "synset": "single-reed_instrument.n.01", + "name": "single-reed_instrument", + }, + { + "id": 10916, + "synset": "single-rotor_helicopter.n.01", + "name": "single-rotor_helicopter", + }, + {"id": 10917, "synset": "singlestick.n.01", "name": "singlestick"}, + {"id": 10918, "synset": "singlet.n.01", "name": "singlet"}, + {"id": 10919, "synset": "siren.n.04", "name": "siren"}, + {"id": 10920, "synset": "sister_ship.n.01", "name": "sister_ship"}, + {"id": 10921, "synset": "sitar.n.01", "name": "sitar"}, + {"id": 10922, "synset": "sitz_bath.n.01", "name": "sitz_bath"}, + {"id": 10923, "synset": "six-pack.n.01", "name": "six-pack"}, + {"id": 10924, "synset": "skate.n.01", "name": "skate"}, + {"id": 10925, "synset": "skeg.n.01", "name": "skeg"}, + {"id": 10926, "synset": "skein.n.01", "name": "skein"}, + {"id": 10927, "synset": "skeleton.n.04", "name": "skeleton"}, + {"id": 10928, "synset": "skeleton_key.n.01", "name": "skeleton_key"}, + {"id": 10929, "synset": "skep.n.02", "name": "skep"}, + {"id": 10930, "synset": "skep.n.01", "name": "skep"}, + {"id": 10931, "synset": "sketch.n.01", "name": "sketch"}, + {"id": 10932, "synset": "sketcher.n.02", "name": "sketcher"}, + {"id": 10933, "synset": "skew_arch.n.01", "name": "skew_arch"}, + {"id": 10934, "synset": "ski_binding.n.01", "name": "ski_binding"}, + {"id": 10935, "synset": "skibob.n.01", "name": "skibob"}, + {"id": 10936, "synset": "ski_cap.n.01", "name": "ski_cap"}, + {"id": 10937, "synset": "skidder.n.03", "name": "skidder"}, + {"id": 10938, "synset": "skid_lid.n.01", "name": "skid_lid"}, + {"id": 10939, "synset": "skiff.n.01", "name": "skiff"}, + {"id": 10940, "synset": "ski_jump.n.01", "name": "ski_jump"}, + {"id": 10941, "synset": "ski_lodge.n.01", "name": "ski_lodge"}, + {"id": 10942, "synset": "ski_mask.n.01", "name": "ski_mask"}, + {"id": 10943, "synset": "skimmer.n.02", "name": "skimmer"}, + {"id": 10944, "synset": "ski-plane.n.01", "name": "ski-plane"}, + {"id": 10945, "synset": "ski_rack.n.01", "name": "ski_rack"}, + {"id": 10946, "synset": "skirt.n.01", "name": "skirt"}, + {"id": 10947, "synset": "ski_tow.n.01", "name": "ski_tow"}, + {"id": 10948, "synset": "skivvies.n.01", "name": "Skivvies"}, + {"id": 10949, "synset": "skybox.n.01", "name": "skybox"}, + {"id": 10950, "synset": "skyhook.n.02", "name": "skyhook"}, + {"id": 10951, "synset": "skylight.n.01", "name": "skylight"}, + {"id": 10952, "synset": "skysail.n.01", "name": "skysail"}, + {"id": 10953, "synset": "skyscraper.n.01", "name": "skyscraper"}, + {"id": 10954, "synset": "skywalk.n.01", "name": "skywalk"}, + {"id": 10955, "synset": "slacks.n.01", "name": "slacks"}, + {"id": 10956, "synset": "slack_suit.n.01", "name": "slack_suit"}, + {"id": 10957, "synset": "slasher.n.02", "name": "slasher"}, + {"id": 10958, "synset": "slash_pocket.n.01", "name": "slash_pocket"}, + {"id": 10959, "synset": "slat.n.01", "name": "slat"}, + {"id": 10960, "synset": "slate.n.01", "name": "slate"}, + {"id": 10961, "synset": "slate_pencil.n.01", "name": "slate_pencil"}, + {"id": 10962, "synset": "slate_roof.n.01", "name": "slate_roof"}, + {"id": 10963, "synset": "sleeper.n.07", "name": "sleeper"}, + {"id": 10964, "synset": "sleeper.n.06", "name": "sleeper"}, + {"id": 10965, "synset": "sleeping_car.n.01", "name": "sleeping_car"}, + {"id": 10966, "synset": "sleeve.n.01", "name": "sleeve"}, + {"id": 10967, "synset": "sleeve.n.02", "name": "sleeve"}, + {"id": 10968, "synset": "sleigh_bed.n.01", "name": "sleigh_bed"}, + {"id": 10969, "synset": "sleigh_bell.n.01", "name": "sleigh_bell"}, + {"id": 10970, "synset": "slice_bar.n.01", "name": "slice_bar"}, + {"id": 10971, "synset": "slicer.n.03", "name": "slicer"}, + {"id": 10972, "synset": "slicer.n.02", "name": "slicer"}, + {"id": 10973, "synset": "slide.n.04", "name": "slide"}, + {"id": 10974, "synset": "slide_fastener.n.01", "name": "slide_fastener"}, + {"id": 10975, "synset": "slide_projector.n.01", "name": "slide_projector"}, + {"id": 10976, "synset": "slide_rule.n.01", "name": "slide_rule"}, + {"id": 10977, "synset": "slide_valve.n.01", "name": "slide_valve"}, + {"id": 10978, "synset": "sliding_door.n.01", "name": "sliding_door"}, + {"id": 10979, "synset": "sliding_seat.n.01", "name": "sliding_seat"}, + {"id": 10980, "synset": "sliding_window.n.01", "name": "sliding_window"}, + {"id": 10981, "synset": "sling.n.04", "name": "sling"}, + {"id": 10982, "synset": "slingback.n.01", "name": "slingback"}, + {"id": 10983, "synset": "slinger_ring.n.01", "name": "slinger_ring"}, + {"id": 10984, "synset": "slip_clutch.n.01", "name": "slip_clutch"}, + {"id": 10985, "synset": "slipcover.n.01", "name": "slipcover"}, + {"id": 10986, "synset": "slip-joint_pliers.n.01", "name": "slip-joint_pliers"}, + {"id": 10987, "synset": "slipknot.n.01", "name": "slipknot"}, + {"id": 10988, "synset": "slip-on.n.01", "name": "slip-on"}, + {"id": 10989, "synset": "slip_ring.n.01", "name": "slip_ring"}, + {"id": 10990, "synset": "slit_lamp.n.01", "name": "slit_lamp"}, + {"id": 10991, "synset": "slit_trench.n.01", "name": "slit_trench"}, + {"id": 10992, "synset": "sloop.n.01", "name": "sloop"}, + {"id": 10993, "synset": "sloop_of_war.n.01", "name": "sloop_of_war"}, + {"id": 10994, "synset": "slop_basin.n.01", "name": "slop_basin"}, + {"id": 10995, "synset": "slop_pail.n.01", "name": "slop_pail"}, + {"id": 10996, "synset": "slops.n.02", "name": "slops"}, + {"id": 10997, "synset": "slopshop.n.01", "name": "slopshop"}, + {"id": 10998, "synset": "slot.n.07", "name": "slot"}, + {"id": 10999, "synset": "slot_machine.n.01", "name": "slot_machine"}, + {"id": 11000, "synset": "sluice.n.01", "name": "sluice"}, + {"id": 11001, "synset": "smack.n.03", "name": "smack"}, + {"id": 11002, "synset": "small_boat.n.01", "name": "small_boat"}, + { + "id": 11003, + "synset": "small_computer_system_interface.n.01", + "name": "small_computer_system_interface", + }, + {"id": 11004, "synset": "small_ship.n.01", "name": "small_ship"}, + {"id": 11005, "synset": "small_stores.n.01", "name": "small_stores"}, + {"id": 11006, "synset": "smart_bomb.n.01", "name": "smart_bomb"}, + {"id": 11007, "synset": "smelling_bottle.n.01", "name": "smelling_bottle"}, + {"id": 11008, "synset": "smocking.n.01", "name": "smocking"}, + {"id": 11009, "synset": "smoke_bomb.n.01", "name": "smoke_bomb"}, + {"id": 11010, "synset": "smokehouse.n.01", "name": "smokehouse"}, + {"id": 11011, "synset": "smoker.n.03", "name": "smoker"}, + {"id": 11012, "synset": "smoke_screen.n.01", "name": "smoke_screen"}, + {"id": 11013, "synset": "smoking_room.n.01", "name": "smoking_room"}, + {"id": 11014, "synset": "smoothbore.n.01", "name": "smoothbore"}, + {"id": 11015, "synset": "smooth_plane.n.01", "name": "smooth_plane"}, + {"id": 11016, "synset": "snack_bar.n.01", "name": "snack_bar"}, + {"id": 11017, "synset": "snaffle.n.01", "name": "snaffle"}, + {"id": 11018, "synset": "snap.n.10", "name": "snap"}, + {"id": 11019, "synset": "snap_brim.n.01", "name": "snap_brim"}, + {"id": 11020, "synset": "snap-brim_hat.n.01", "name": "snap-brim_hat"}, + {"id": 11021, "synset": "snare.n.05", "name": "snare"}, + {"id": 11022, "synset": "snare_drum.n.01", "name": "snare_drum"}, + {"id": 11023, "synset": "snatch_block.n.01", "name": "snatch_block"}, + {"id": 11024, "synset": "snifter.n.01", "name": "snifter"}, + {"id": 11025, "synset": "sniper_rifle.n.01", "name": "sniper_rifle"}, + {"id": 11026, "synset": "snips.n.01", "name": "snips"}, + {"id": 11027, "synset": "sno-cat.n.01", "name": "Sno-cat"}, + {"id": 11028, "synset": "snood.n.01", "name": "snood"}, + {"id": 11029, "synset": "snorkel.n.02", "name": "snorkel"}, + {"id": 11030, "synset": "snorkel.n.01", "name": "snorkel"}, + {"id": 11031, "synset": "snowbank.n.01", "name": "snowbank"}, + {"id": 11032, "synset": "snowplow.n.01", "name": "snowplow"}, + {"id": 11033, "synset": "snowshoe.n.01", "name": "snowshoe"}, + {"id": 11034, "synset": "snowsuit.n.01", "name": "snowsuit"}, + {"id": 11035, "synset": "snow_thrower.n.01", "name": "snow_thrower"}, + {"id": 11036, "synset": "snuffbox.n.01", "name": "snuffbox"}, + {"id": 11037, "synset": "snuffer.n.01", "name": "snuffer"}, + {"id": 11038, "synset": "snuffers.n.01", "name": "snuffers"}, + {"id": 11039, "synset": "soapbox.n.01", "name": "soapbox"}, + {"id": 11040, "synset": "soap_dish.n.01", "name": "soap_dish"}, + {"id": 11041, "synset": "soap_dispenser.n.01", "name": "soap_dispenser"}, + {"id": 11042, "synset": "soap_pad.n.01", "name": "soap_pad"}, + {"id": 11043, "synset": "socket.n.02", "name": "socket"}, + {"id": 11044, "synset": "socket_wrench.n.01", "name": "socket_wrench"}, + {"id": 11045, "synset": "socle.n.01", "name": "socle"}, + {"id": 11046, "synset": "soda_can.n.01", "name": "soda_can"}, + {"id": 11047, "synset": "soda_fountain.n.02", "name": "soda_fountain"}, + {"id": 11048, "synset": "soda_fountain.n.01", "name": "soda_fountain"}, + {"id": 11049, "synset": "sod_house.n.01", "name": "sod_house"}, + {"id": 11050, "synset": "sodium-vapor_lamp.n.01", "name": "sodium-vapor_lamp"}, + {"id": 11051, "synset": "soffit.n.01", "name": "soffit"}, + {"id": 11052, "synset": "soft_pedal.n.01", "name": "soft_pedal"}, + {"id": 11053, "synset": "soil_pipe.n.01", "name": "soil_pipe"}, + {"id": 11054, "synset": "solar_cell.n.01", "name": "solar_cell"}, + {"id": 11055, "synset": "solar_dish.n.01", "name": "solar_dish"}, + {"id": 11056, "synset": "solar_heater.n.01", "name": "solar_heater"}, + {"id": 11057, "synset": "solar_house.n.01", "name": "solar_house"}, + {"id": 11058, "synset": "solar_telescope.n.01", "name": "solar_telescope"}, + { + "id": 11059, + "synset": "solar_thermal_system.n.01", + "name": "solar_thermal_system", + }, + {"id": 11060, "synset": "soldering_iron.n.01", "name": "soldering_iron"}, + {"id": 11061, "synset": "solenoid.n.01", "name": "solenoid"}, + {"id": 11062, "synset": "solleret.n.01", "name": "solleret"}, + {"id": 11063, "synset": "sonic_depth_finder.n.01", "name": "sonic_depth_finder"}, + {"id": 11064, "synset": "sonogram.n.01", "name": "sonogram"}, + {"id": 11065, "synset": "sonograph.n.01", "name": "sonograph"}, + {"id": 11066, "synset": "sorter.n.02", "name": "sorter"}, + {"id": 11067, "synset": "souk.n.01", "name": "souk"}, + {"id": 11068, "synset": "sound_bow.n.01", "name": "sound_bow"}, + {"id": 11069, "synset": "soundbox.n.01", "name": "soundbox"}, + {"id": 11070, "synset": "sound_camera.n.01", "name": "sound_camera"}, + {"id": 11071, "synset": "sounder.n.01", "name": "sounder"}, + {"id": 11072, "synset": "sound_film.n.01", "name": "sound_film"}, + {"id": 11073, "synset": "sounding_board.n.02", "name": "sounding_board"}, + {"id": 11074, "synset": "sounding_rocket.n.01", "name": "sounding_rocket"}, + {"id": 11075, "synset": "sound_recording.n.01", "name": "sound_recording"}, + {"id": 11076, "synset": "sound_spectrograph.n.01", "name": "sound_spectrograph"}, + {"id": 11077, "synset": "soup_ladle.n.01", "name": "soup_ladle"}, + { + "id": 11078, + "synset": "source_of_illumination.n.01", + "name": "source_of_illumination", + }, + {"id": 11079, "synset": "sourdine.n.02", "name": "sourdine"}, + {"id": 11080, "synset": "soutache.n.01", "name": "soutache"}, + {"id": 11081, "synset": "soutane.n.01", "name": "soutane"}, + {"id": 11082, "synset": "sou'wester.n.02", "name": "sou'wester"}, + {"id": 11083, "synset": "soybean_future.n.01", "name": "soybean_future"}, + {"id": 11084, "synset": "space_bar.n.01", "name": "space_bar"}, + {"id": 11085, "synset": "space_capsule.n.01", "name": "space_capsule"}, + {"id": 11086, "synset": "spacecraft.n.01", "name": "spacecraft"}, + {"id": 11087, "synset": "space_heater.n.01", "name": "space_heater"}, + {"id": 11088, "synset": "space_helmet.n.01", "name": "space_helmet"}, + {"id": 11089, "synset": "space_rocket.n.01", "name": "space_rocket"}, + {"id": 11090, "synset": "space_station.n.01", "name": "space_station"}, + {"id": 11091, "synset": "spacesuit.n.01", "name": "spacesuit"}, + {"id": 11092, "synset": "spade.n.02", "name": "spade"}, + {"id": 11093, "synset": "spade_bit.n.01", "name": "spade_bit"}, + {"id": 11094, "synset": "spaghetti_junction.n.01", "name": "spaghetti_junction"}, + {"id": 11095, "synset": "spandau.n.01", "name": "Spandau"}, + {"id": 11096, "synset": "spandex.n.01", "name": "spandex"}, + {"id": 11097, "synset": "spandrel.n.01", "name": "spandrel"}, + {"id": 11098, "synset": "spanker.n.02", "name": "spanker"}, + {"id": 11099, "synset": "spar.n.02", "name": "spar"}, + {"id": 11100, "synset": "sparge_pipe.n.01", "name": "sparge_pipe"}, + {"id": 11101, "synset": "spark_arrester.n.02", "name": "spark_arrester"}, + {"id": 11102, "synset": "spark_arrester.n.01", "name": "spark_arrester"}, + {"id": 11103, "synset": "spark_chamber.n.01", "name": "spark_chamber"}, + {"id": 11104, "synset": "spark_coil.n.01", "name": "spark_coil"}, + {"id": 11105, "synset": "spark_gap.n.01", "name": "spark_gap"}, + {"id": 11106, "synset": "spark_lever.n.01", "name": "spark_lever"}, + {"id": 11107, "synset": "spark_plug.n.01", "name": "spark_plug"}, + {"id": 11108, "synset": "sparkplug_wrench.n.01", "name": "sparkplug_wrench"}, + {"id": 11109, "synset": "spark_transmitter.n.01", "name": "spark_transmitter"}, + {"id": 11110, "synset": "spat.n.02", "name": "spat"}, + {"id": 11111, "synset": "spatula.n.01", "name": "spatula"}, + {"id": 11112, "synset": "speakerphone.n.01", "name": "speakerphone"}, + {"id": 11113, "synset": "speaking_trumpet.n.01", "name": "speaking_trumpet"}, + {"id": 11114, "synset": "spear.n.02", "name": "spear"}, + {"id": 11115, "synset": "specialty_store.n.01", "name": "specialty_store"}, + {"id": 11116, "synset": "specimen_bottle.n.01", "name": "specimen_bottle"}, + {"id": 11117, "synset": "spectacle.n.02", "name": "spectacle"}, + {"id": 11118, "synset": "spectator_pump.n.01", "name": "spectator_pump"}, + {"id": 11119, "synset": "spectrograph.n.01", "name": "spectrograph"}, + {"id": 11120, "synset": "spectrophotometer.n.01", "name": "spectrophotometer"}, + {"id": 11121, "synset": "spectroscope.n.01", "name": "spectroscope"}, + {"id": 11122, "synset": "speculum.n.02", "name": "speculum"}, + {"id": 11123, "synset": "speedboat.n.01", "name": "speedboat"}, + {"id": 11124, "synset": "speed_bump.n.01", "name": "speed_bump"}, + {"id": 11125, "synset": "speedometer.n.01", "name": "speedometer"}, + {"id": 11126, "synset": "speed_skate.n.01", "name": "speed_skate"}, + {"id": 11127, "synset": "spherometer.n.01", "name": "spherometer"}, + {"id": 11128, "synset": "sphygmomanometer.n.01", "name": "sphygmomanometer"}, + {"id": 11129, "synset": "spicemill.n.01", "name": "spicemill"}, + {"id": 11130, "synset": "spider.n.03", "name": "spider"}, + {"id": 11131, "synset": "spider_web.n.01", "name": "spider_web"}, + {"id": 11132, "synset": "spike.n.02", "name": "spike"}, + {"id": 11133, "synset": "spike.n.11", "name": "spike"}, + {"id": 11134, "synset": "spindle.n.04", "name": "spindle"}, + {"id": 11135, "synset": "spindle.n.03", "name": "spindle"}, + {"id": 11136, "synset": "spindle.n.02", "name": "spindle"}, + {"id": 11137, "synset": "spin_dryer.n.01", "name": "spin_dryer"}, + {"id": 11138, "synset": "spinet.n.02", "name": "spinet"}, + {"id": 11139, "synset": "spinet.n.01", "name": "spinet"}, + {"id": 11140, "synset": "spinnaker.n.01", "name": "spinnaker"}, + {"id": 11141, "synset": "spinner.n.03", "name": "spinner"}, + {"id": 11142, "synset": "spinning_frame.n.01", "name": "spinning_frame"}, + {"id": 11143, "synset": "spinning_jenny.n.01", "name": "spinning_jenny"}, + {"id": 11144, "synset": "spinning_machine.n.01", "name": "spinning_machine"}, + {"id": 11145, "synset": "spinning_rod.n.01", "name": "spinning_rod"}, + {"id": 11146, "synset": "spinning_wheel.n.01", "name": "spinning_wheel"}, + {"id": 11147, "synset": "spiral_bandage.n.01", "name": "spiral_bandage"}, + { + "id": 11148, + "synset": "spiral_ratchet_screwdriver.n.01", + "name": "spiral_ratchet_screwdriver", + }, + {"id": 11149, "synset": "spiral_spring.n.01", "name": "spiral_spring"}, + {"id": 11150, "synset": "spirit_lamp.n.01", "name": "spirit_lamp"}, + {"id": 11151, "synset": "spirit_stove.n.01", "name": "spirit_stove"}, + {"id": 11152, "synset": "spirometer.n.01", "name": "spirometer"}, + {"id": 11153, "synset": "spit.n.03", "name": "spit"}, + {"id": 11154, "synset": "spittoon.n.01", "name": "spittoon"}, + {"id": 11155, "synset": "splashboard.n.02", "name": "splashboard"}, + {"id": 11156, "synset": "splasher.n.01", "name": "splasher"}, + {"id": 11157, "synset": "splice.n.01", "name": "splice"}, + {"id": 11158, "synset": "splicer.n.03", "name": "splicer"}, + {"id": 11159, "synset": "splint.n.02", "name": "splint"}, + {"id": 11160, "synset": "split_rail.n.01", "name": "split_rail"}, + {"id": 11161, "synset": "spode.n.02", "name": "Spode"}, + {"id": 11162, "synset": "spoiler.n.05", "name": "spoiler"}, + {"id": 11163, "synset": "spoiler.n.04", "name": "spoiler"}, + {"id": 11164, "synset": "spoke.n.01", "name": "spoke"}, + {"id": 11165, "synset": "spokeshave.n.01", "name": "spokeshave"}, + {"id": 11166, "synset": "sponge_cloth.n.01", "name": "sponge_cloth"}, + {"id": 11167, "synset": "sponge_mop.n.01", "name": "sponge_mop"}, + {"id": 11168, "synset": "spoon.n.03", "name": "spoon"}, + {"id": 11169, "synset": "spork.n.01", "name": "Spork"}, + {"id": 11170, "synset": "sporran.n.01", "name": "sporran"}, + {"id": 11171, "synset": "sport_kite.n.01", "name": "sport_kite"}, + {"id": 11172, "synset": "sports_car.n.01", "name": "sports_car"}, + {"id": 11173, "synset": "sports_equipment.n.01", "name": "sports_equipment"}, + {"id": 11174, "synset": "sports_implement.n.01", "name": "sports_implement"}, + {"id": 11175, "synset": "sport_utility.n.01", "name": "sport_utility"}, + {"id": 11176, "synset": "spot.n.07", "name": "spot"}, + {"id": 11177, "synset": "spot_weld.n.01", "name": "spot_weld"}, + {"id": 11178, "synset": "spouter.n.02", "name": "spouter"}, + {"id": 11179, "synset": "sprag.n.01", "name": "sprag"}, + {"id": 11180, "synset": "spray_gun.n.01", "name": "spray_gun"}, + {"id": 11181, "synset": "spray_paint.n.01", "name": "spray_paint"}, + {"id": 11182, "synset": "spreader.n.01", "name": "spreader"}, + {"id": 11183, "synset": "sprig.n.02", "name": "sprig"}, + {"id": 11184, "synset": "spring.n.02", "name": "spring"}, + {"id": 11185, "synset": "spring_balance.n.01", "name": "spring_balance"}, + {"id": 11186, "synset": "springboard.n.01", "name": "springboard"}, + {"id": 11187, "synset": "sprinkler.n.01", "name": "sprinkler"}, + {"id": 11188, "synset": "sprinkler_system.n.01", "name": "sprinkler_system"}, + {"id": 11189, "synset": "sprit.n.01", "name": "sprit"}, + {"id": 11190, "synset": "spritsail.n.01", "name": "spritsail"}, + {"id": 11191, "synset": "sprocket.n.02", "name": "sprocket"}, + {"id": 11192, "synset": "sprocket.n.01", "name": "sprocket"}, + {"id": 11193, "synset": "spun_yarn.n.01", "name": "spun_yarn"}, + {"id": 11194, "synset": "spur.n.04", "name": "spur"}, + {"id": 11195, "synset": "spur_gear.n.01", "name": "spur_gear"}, + {"id": 11196, "synset": "sputnik.n.01", "name": "sputnik"}, + {"id": 11197, "synset": "spy_satellite.n.01", "name": "spy_satellite"}, + {"id": 11198, "synset": "squad_room.n.01", "name": "squad_room"}, + {"id": 11199, "synset": "square.n.08", "name": "square"}, + {"id": 11200, "synset": "square_knot.n.01", "name": "square_knot"}, + {"id": 11201, "synset": "square-rigger.n.01", "name": "square-rigger"}, + {"id": 11202, "synset": "square_sail.n.01", "name": "square_sail"}, + {"id": 11203, "synset": "squash_ball.n.01", "name": "squash_ball"}, + {"id": 11204, "synset": "squash_racket.n.01", "name": "squash_racket"}, + {"id": 11205, "synset": "squawk_box.n.01", "name": "squawk_box"}, + {"id": 11206, "synset": "squeegee.n.01", "name": "squeegee"}, + {"id": 11207, "synset": "squeezer.n.01", "name": "squeezer"}, + {"id": 11208, "synset": "squelch_circuit.n.01", "name": "squelch_circuit"}, + {"id": 11209, "synset": "squinch.n.01", "name": "squinch"}, + {"id": 11210, "synset": "stabilizer.n.03", "name": "stabilizer"}, + {"id": 11211, "synset": "stabilizer.n.02", "name": "stabilizer"}, + {"id": 11212, "synset": "stabilizer_bar.n.01", "name": "stabilizer_bar"}, + {"id": 11213, "synset": "stable.n.01", "name": "stable"}, + {"id": 11214, "synset": "stable_gear.n.01", "name": "stable_gear"}, + {"id": 11215, "synset": "stabling.n.01", "name": "stabling"}, + {"id": 11216, "synset": "stacks.n.02", "name": "stacks"}, + {"id": 11217, "synset": "staddle.n.01", "name": "staddle"}, + {"id": 11218, "synset": "stadium.n.01", "name": "stadium"}, + {"id": 11219, "synset": "stage.n.03", "name": "stage"}, + { + "id": 11220, + "synset": "stained-glass_window.n.01", + "name": "stained-glass_window", + }, + {"id": 11221, "synset": "stair-carpet.n.01", "name": "stair-carpet"}, + {"id": 11222, "synset": "stair-rod.n.01", "name": "stair-rod"}, + {"id": 11223, "synset": "stairwell.n.01", "name": "stairwell"}, + {"id": 11224, "synset": "stake.n.05", "name": "stake"}, + {"id": 11225, "synset": "stall.n.03", "name": "stall"}, + {"id": 11226, "synset": "stall.n.01", "name": "stall"}, + {"id": 11227, "synset": "stamp.n.08", "name": "stamp"}, + {"id": 11228, "synset": "stamp_mill.n.01", "name": "stamp_mill"}, + {"id": 11229, "synset": "stamping_machine.n.01", "name": "stamping_machine"}, + {"id": 11230, "synset": "stanchion.n.01", "name": "stanchion"}, + {"id": 11231, "synset": "stand.n.04", "name": "stand"}, + {"id": 11232, "synset": "standard.n.05", "name": "standard"}, + {"id": 11233, "synset": "standard_cell.n.01", "name": "standard_cell"}, + { + "id": 11234, + "synset": "standard_transmission.n.01", + "name": "standard_transmission", + }, + {"id": 11235, "synset": "standing_press.n.01", "name": "standing_press"}, + {"id": 11236, "synset": "stanhope.n.01", "name": "stanhope"}, + {"id": 11237, "synset": "stanley_steamer.n.01", "name": "Stanley_Steamer"}, + {"id": 11238, "synset": "staple.n.05", "name": "staple"}, + {"id": 11239, "synset": "staple.n.04", "name": "staple"}, + {"id": 11240, "synset": "staple_gun.n.01", "name": "staple_gun"}, + {"id": 11241, "synset": "starship.n.01", "name": "starship"}, + {"id": 11242, "synset": "starter.n.01", "name": "starter"}, + {"id": 11243, "synset": "starting_gate.n.01", "name": "starting_gate"}, + {"id": 11244, "synset": "stassano_furnace.n.01", "name": "Stassano_furnace"}, + {"id": 11245, "synset": "statehouse.n.01", "name": "Statehouse"}, + {"id": 11246, "synset": "stately_home.n.01", "name": "stately_home"}, + {"id": 11247, "synset": "state_prison.n.01", "name": "state_prison"}, + {"id": 11248, "synset": "stateroom.n.01", "name": "stateroom"}, + {"id": 11249, "synset": "static_tube.n.01", "name": "static_tube"}, + {"id": 11250, "synset": "station.n.01", "name": "station"}, + {"id": 11251, "synset": "stator.n.01", "name": "stator"}, + {"id": 11252, "synset": "stay.n.05", "name": "stay"}, + {"id": 11253, "synset": "staysail.n.01", "name": "staysail"}, + {"id": 11254, "synset": "steakhouse.n.01", "name": "steakhouse"}, + {"id": 11255, "synset": "stealth_aircraft.n.01", "name": "stealth_aircraft"}, + {"id": 11256, "synset": "stealth_bomber.n.01", "name": "stealth_bomber"}, + {"id": 11257, "synset": "stealth_fighter.n.01", "name": "stealth_fighter"}, + {"id": 11258, "synset": "steam_bath.n.01", "name": "steam_bath"}, + {"id": 11259, "synset": "steamboat.n.01", "name": "steamboat"}, + {"id": 11260, "synset": "steam_chest.n.01", "name": "steam_chest"}, + {"id": 11261, "synset": "steam_engine.n.01", "name": "steam_engine"}, + {"id": 11262, "synset": "steamer.n.03", "name": "steamer"}, + {"id": 11263, "synset": "steamer.n.02", "name": "steamer"}, + {"id": 11264, "synset": "steam_iron.n.01", "name": "steam_iron"}, + {"id": 11265, "synset": "steam_locomotive.n.01", "name": "steam_locomotive"}, + {"id": 11266, "synset": "steamroller.n.02", "name": "steamroller"}, + {"id": 11267, "synset": "steam_shovel.n.01", "name": "steam_shovel"}, + {"id": 11268, "synset": "steam_turbine.n.01", "name": "steam_turbine"}, + {"id": 11269, "synset": "steam_whistle.n.01", "name": "steam_whistle"}, + {"id": 11270, "synset": "steel.n.03", "name": "steel"}, + {"id": 11271, "synset": "steel_arch_bridge.n.01", "name": "steel_arch_bridge"}, + {"id": 11272, "synset": "steel_drum.n.01", "name": "steel_drum"}, + {"id": 11273, "synset": "steel_mill.n.01", "name": "steel_mill"}, + {"id": 11274, "synset": "steel-wool_pad.n.01", "name": "steel-wool_pad"}, + {"id": 11275, "synset": "steelyard.n.01", "name": "steelyard"}, + {"id": 11276, "synset": "steeple.n.01", "name": "steeple"}, + {"id": 11277, "synset": "steerage.n.01", "name": "steerage"}, + {"id": 11278, "synset": "steering_gear.n.01", "name": "steering_gear"}, + {"id": 11279, "synset": "steering_linkage.n.01", "name": "steering_linkage"}, + {"id": 11280, "synset": "steering_system.n.01", "name": "steering_system"}, + {"id": 11281, "synset": "stele.n.02", "name": "stele"}, + {"id": 11282, "synset": "stem-winder.n.01", "name": "stem-winder"}, + {"id": 11283, "synset": "stencil.n.01", "name": "stencil"}, + {"id": 11284, "synset": "sten_gun.n.01", "name": "Sten_gun"}, + {"id": 11285, "synset": "stenograph.n.02", "name": "stenograph"}, + {"id": 11286, "synset": "step.n.04", "name": "step"}, + { + "id": 11287, + "synset": "step-down_transformer.n.01", + "name": "step-down_transformer", + }, + {"id": 11288, "synset": "step-up_transformer.n.01", "name": "step-up_transformer"}, + {"id": 11289, "synset": "stereoscope.n.01", "name": "stereoscope"}, + {"id": 11290, "synset": "stern_chaser.n.01", "name": "stern_chaser"}, + {"id": 11291, "synset": "sternpost.n.01", "name": "sternpost"}, + {"id": 11292, "synset": "sternwheeler.n.01", "name": "sternwheeler"}, + {"id": 11293, "synset": "stethoscope.n.01", "name": "stethoscope"}, + {"id": 11294, "synset": "stewing_pan.n.01", "name": "stewing_pan"}, + {"id": 11295, "synset": "stick.n.01", "name": "stick"}, + {"id": 11296, "synset": "stick.n.07", "name": "stick"}, + {"id": 11297, "synset": "stick.n.03", "name": "stick"}, + {"id": 11298, "synset": "stick.n.06", "name": "stick"}, + {"id": 11299, "synset": "stile.n.01", "name": "stile"}, + {"id": 11300, "synset": "stiletto.n.01", "name": "stiletto"}, + {"id": 11301, "synset": "still.n.03", "name": "still"}, + {"id": 11302, "synset": "stillroom.n.01", "name": "stillroom"}, + {"id": 11303, "synset": "stillson_wrench.n.01", "name": "Stillson_wrench"}, + {"id": 11304, "synset": "stilt.n.02", "name": "stilt"}, + {"id": 11305, "synset": "stinger.n.03", "name": "Stinger"}, + {"id": 11306, "synset": "stink_bomb.n.01", "name": "stink_bomb"}, + {"id": 11307, "synset": "stirrup_pump.n.01", "name": "stirrup_pump"}, + {"id": 11308, "synset": "stob.n.01", "name": "stob"}, + {"id": 11309, "synset": "stock.n.03", "name": "stock"}, + {"id": 11310, "synset": "stockade.n.01", "name": "stockade"}, + {"id": 11311, "synset": "stockcar.n.01", "name": "stockcar"}, + {"id": 11312, "synset": "stock_car.n.02", "name": "stock_car"}, + {"id": 11313, "synset": "stockinet.n.01", "name": "stockinet"}, + {"id": 11314, "synset": "stocking.n.01", "name": "stocking"}, + {"id": 11315, "synset": "stock-in-trade.n.01", "name": "stock-in-trade"}, + {"id": 11316, "synset": "stockpot.n.01", "name": "stockpot"}, + {"id": 11317, "synset": "stockroom.n.01", "name": "stockroom"}, + {"id": 11318, "synset": "stocks.n.03", "name": "stocks"}, + {"id": 11319, "synset": "stock_saddle.n.01", "name": "stock_saddle"}, + {"id": 11320, "synset": "stockyard.n.01", "name": "stockyard"}, + {"id": 11321, "synset": "stole.n.01", "name": "stole"}, + {"id": 11322, "synset": "stomacher.n.01", "name": "stomacher"}, + {"id": 11323, "synset": "stomach_pump.n.01", "name": "stomach_pump"}, + {"id": 11324, "synset": "stone_wall.n.01", "name": "stone_wall"}, + {"id": 11325, "synset": "stoneware.n.01", "name": "stoneware"}, + {"id": 11326, "synset": "stonework.n.01", "name": "stonework"}, + {"id": 11327, "synset": "stoop.n.03", "name": "stoop"}, + {"id": 11328, "synset": "stop_bath.n.01", "name": "stop_bath"}, + {"id": 11329, "synset": "stopcock.n.01", "name": "stopcock"}, + {"id": 11330, "synset": "stopper_knot.n.01", "name": "stopper_knot"}, + {"id": 11331, "synset": "stopwatch.n.01", "name": "stopwatch"}, + {"id": 11332, "synset": "storage_battery.n.01", "name": "storage_battery"}, + {"id": 11333, "synset": "storage_cell.n.01", "name": "storage_cell"}, + {"id": 11334, "synset": "storage_ring.n.01", "name": "storage_ring"}, + {"id": 11335, "synset": "storage_space.n.01", "name": "storage_space"}, + {"id": 11336, "synset": "storeroom.n.01", "name": "storeroom"}, + {"id": 11337, "synset": "storm_cellar.n.01", "name": "storm_cellar"}, + {"id": 11338, "synset": "storm_door.n.01", "name": "storm_door"}, + {"id": 11339, "synset": "storm_window.n.01", "name": "storm_window"}, + {"id": 11340, "synset": "stoup.n.02", "name": "stoup"}, + {"id": 11341, "synset": "stoup.n.01", "name": "stoup"}, + {"id": 11342, "synset": "stove.n.02", "name": "stove"}, + {"id": 11343, "synset": "stove_bolt.n.01", "name": "stove_bolt"}, + {"id": 11344, "synset": "stovepipe.n.01", "name": "stovepipe"}, + {"id": 11345, "synset": "stovepipe_iron.n.01", "name": "stovepipe_iron"}, + {"id": 11346, "synset": "stradavarius.n.01", "name": "Stradavarius"}, + {"id": 11347, "synset": "straight_chair.n.01", "name": "straight_chair"}, + {"id": 11348, "synset": "straightedge.n.01", "name": "straightedge"}, + {"id": 11349, "synset": "straightener.n.01", "name": "straightener"}, + {"id": 11350, "synset": "straight_flute.n.01", "name": "straight_flute"}, + {"id": 11351, "synset": "straight_pin.n.01", "name": "straight_pin"}, + {"id": 11352, "synset": "straight_razor.n.01", "name": "straight_razor"}, + {"id": 11353, "synset": "straitjacket.n.02", "name": "straitjacket"}, + {"id": 11354, "synset": "strap.n.04", "name": "strap"}, + {"id": 11355, "synset": "strap_hinge.n.01", "name": "strap_hinge"}, + {"id": 11356, "synset": "strapless.n.01", "name": "strapless"}, + {"id": 11357, "synset": "streamer_fly.n.01", "name": "streamer_fly"}, + {"id": 11358, "synset": "streamliner.n.01", "name": "streamliner"}, + {"id": 11359, "synset": "street.n.01", "name": "street"}, + {"id": 11360, "synset": "street.n.02", "name": "street"}, + {"id": 11361, "synset": "streetcar.n.01", "name": "streetcar"}, + {"id": 11362, "synset": "street_clothes.n.01", "name": "street_clothes"}, + {"id": 11363, "synset": "stretcher.n.03", "name": "stretcher"}, + {"id": 11364, "synset": "stretcher.n.01", "name": "stretcher"}, + {"id": 11365, "synset": "stretch_pants.n.01", "name": "stretch_pants"}, + {"id": 11366, "synset": "strickle.n.02", "name": "strickle"}, + {"id": 11367, "synset": "strickle.n.01", "name": "strickle"}, + {"id": 11368, "synset": "stringed_instrument.n.01", "name": "stringed_instrument"}, + {"id": 11369, "synset": "stringer.n.04", "name": "stringer"}, + {"id": 11370, "synset": "stringer.n.03", "name": "stringer"}, + {"id": 11371, "synset": "string_tie.n.01", "name": "string_tie"}, + {"id": 11372, "synset": "strip.n.05", "name": "strip"}, + {"id": 11373, "synset": "strip_lighting.n.01", "name": "strip_lighting"}, + {"id": 11374, "synset": "strip_mall.n.01", "name": "strip_mall"}, + {"id": 11375, "synset": "stroboscope.n.01", "name": "stroboscope"}, + {"id": 11376, "synset": "strongbox.n.01", "name": "strongbox"}, + {"id": 11377, "synset": "stronghold.n.01", "name": "stronghold"}, + {"id": 11378, "synset": "strongroom.n.01", "name": "strongroom"}, + {"id": 11379, "synset": "strop.n.01", "name": "strop"}, + {"id": 11380, "synset": "structural_member.n.01", "name": "structural_member"}, + {"id": 11381, "synset": "structure.n.01", "name": "structure"}, + {"id": 11382, "synset": "student_center.n.01", "name": "student_center"}, + {"id": 11383, "synset": "student_lamp.n.01", "name": "student_lamp"}, + {"id": 11384, "synset": "student_union.n.01", "name": "student_union"}, + {"id": 11385, "synset": "stud_finder.n.01", "name": "stud_finder"}, + {"id": 11386, "synset": "studio_apartment.n.01", "name": "studio_apartment"}, + {"id": 11387, "synset": "studio_couch.n.01", "name": "studio_couch"}, + {"id": 11388, "synset": "study.n.05", "name": "study"}, + {"id": 11389, "synset": "study_hall.n.02", "name": "study_hall"}, + {"id": 11390, "synset": "stuffing_nut.n.01", "name": "stuffing_nut"}, + {"id": 11391, "synset": "stump.n.03", "name": "stump"}, + {"id": 11392, "synset": "stun_gun.n.01", "name": "stun_gun"}, + {"id": 11393, "synset": "stupa.n.01", "name": "stupa"}, + {"id": 11394, "synset": "sty.n.02", "name": "sty"}, + {"id": 11395, "synset": "stylus.n.01", "name": "stylus"}, + {"id": 11396, "synset": "sub-assembly.n.01", "name": "sub-assembly"}, + {"id": 11397, "synset": "subcompact.n.01", "name": "subcompact"}, + {"id": 11398, "synset": "submachine_gun.n.01", "name": "submachine_gun"}, + {"id": 11399, "synset": "submarine.n.01", "name": "submarine"}, + {"id": 11400, "synset": "submarine_torpedo.n.01", "name": "submarine_torpedo"}, + {"id": 11401, "synset": "submersible.n.02", "name": "submersible"}, + {"id": 11402, "synset": "submersible.n.01", "name": "submersible"}, + {"id": 11403, "synset": "subtracter.n.02", "name": "subtracter"}, + {"id": 11404, "synset": "subway_token.n.01", "name": "subway_token"}, + {"id": 11405, "synset": "subway_train.n.01", "name": "subway_train"}, + {"id": 11406, "synset": "suction_cup.n.01", "name": "suction_cup"}, + {"id": 11407, "synset": "suction_pump.n.01", "name": "suction_pump"}, + {"id": 11408, "synset": "sudatorium.n.01", "name": "sudatorium"}, + {"id": 11409, "synset": "suede_cloth.n.01", "name": "suede_cloth"}, + {"id": 11410, "synset": "sugar_refinery.n.01", "name": "sugar_refinery"}, + {"id": 11411, "synset": "sugar_spoon.n.01", "name": "sugar_spoon"}, + {"id": 11412, "synset": "suite.n.02", "name": "suite"}, + {"id": 11413, "synset": "suiting.n.01", "name": "suiting"}, + {"id": 11414, "synset": "sulky.n.01", "name": "sulky"}, + {"id": 11415, "synset": "summer_house.n.01", "name": "summer_house"}, + {"id": 11416, "synset": "sumo_ring.n.01", "name": "sumo_ring"}, + {"id": 11417, "synset": "sump.n.01", "name": "sump"}, + {"id": 11418, "synset": "sump_pump.n.01", "name": "sump_pump"}, + {"id": 11419, "synset": "sunbonnet.n.01", "name": "sunbonnet"}, + {"id": 11420, "synset": "sunday_best.n.01", "name": "Sunday_best"}, + {"id": 11421, "synset": "sun_deck.n.01", "name": "sun_deck"}, + {"id": 11422, "synset": "sundial.n.01", "name": "sundial"}, + {"id": 11423, "synset": "sundress.n.01", "name": "sundress"}, + {"id": 11424, "synset": "sundries.n.01", "name": "sundries"}, + {"id": 11425, "synset": "sun_gear.n.01", "name": "sun_gear"}, + {"id": 11426, "synset": "sunglass.n.01", "name": "sunglass"}, + {"id": 11427, "synset": "sunlamp.n.01", "name": "sunlamp"}, + {"id": 11428, "synset": "sun_parlor.n.01", "name": "sun_parlor"}, + {"id": 11429, "synset": "sunroof.n.01", "name": "sunroof"}, + {"id": 11430, "synset": "sunscreen.n.01", "name": "sunscreen"}, + {"id": 11431, "synset": "sunsuit.n.01", "name": "sunsuit"}, + {"id": 11432, "synset": "supercharger.n.01", "name": "supercharger"}, + {"id": 11433, "synset": "supercomputer.n.01", "name": "supercomputer"}, + { + "id": 11434, + "synset": "superconducting_supercollider.n.01", + "name": "superconducting_supercollider", + }, + {"id": 11435, "synset": "superhighway.n.02", "name": "superhighway"}, + {"id": 11436, "synset": "supermarket.n.01", "name": "supermarket"}, + {"id": 11437, "synset": "superstructure.n.01", "name": "superstructure"}, + {"id": 11438, "synset": "supertanker.n.01", "name": "supertanker"}, + {"id": 11439, "synset": "supper_club.n.01", "name": "supper_club"}, + {"id": 11440, "synset": "supplejack.n.01", "name": "supplejack"}, + {"id": 11441, "synset": "supply_chamber.n.01", "name": "supply_chamber"}, + {"id": 11442, "synset": "supply_closet.n.01", "name": "supply_closet"}, + {"id": 11443, "synset": "support.n.10", "name": "support"}, + {"id": 11444, "synset": "support.n.07", "name": "support"}, + {"id": 11445, "synset": "support_column.n.01", "name": "support_column"}, + {"id": 11446, "synset": "support_hose.n.01", "name": "support_hose"}, + { + "id": 11447, + "synset": "supporting_structure.n.01", + "name": "supporting_structure", + }, + {"id": 11448, "synset": "supporting_tower.n.01", "name": "supporting_tower"}, + {"id": 11449, "synset": "surcoat.n.02", "name": "surcoat"}, + {"id": 11450, "synset": "surface_gauge.n.01", "name": "surface_gauge"}, + {"id": 11451, "synset": "surface_lift.n.01", "name": "surface_lift"}, + { + "id": 11452, + "synset": "surface_search_radar.n.01", + "name": "surface_search_radar", + }, + {"id": 11453, "synset": "surface_ship.n.01", "name": "surface_ship"}, + { + "id": 11454, + "synset": "surface-to-air_missile.n.01", + "name": "surface-to-air_missile", + }, + { + "id": 11455, + "synset": "surface-to-air_missile_system.n.01", + "name": "surface-to-air_missile_system", + }, + {"id": 11456, "synset": "surfboat.n.01", "name": "surfboat"}, + {"id": 11457, "synset": "surcoat.n.01", "name": "surcoat"}, + {"id": 11458, "synset": "surgeon's_knot.n.01", "name": "surgeon's_knot"}, + {"id": 11459, "synset": "surgery.n.02", "name": "surgery"}, + {"id": 11460, "synset": "surge_suppressor.n.01", "name": "surge_suppressor"}, + {"id": 11461, "synset": "surgical_dressing.n.01", "name": "surgical_dressing"}, + {"id": 11462, "synset": "surgical_instrument.n.01", "name": "surgical_instrument"}, + {"id": 11463, "synset": "surgical_knife.n.01", "name": "surgical_knife"}, + {"id": 11464, "synset": "surplice.n.01", "name": "surplice"}, + {"id": 11465, "synset": "surrey.n.02", "name": "surrey"}, + {"id": 11466, "synset": "surtout.n.01", "name": "surtout"}, + {"id": 11467, "synset": "surveillance_system.n.01", "name": "surveillance_system"}, + { + "id": 11468, + "synset": "surveying_instrument.n.01", + "name": "surveying_instrument", + }, + {"id": 11469, "synset": "surveyor's_level.n.01", "name": "surveyor's_level"}, + {"id": 11470, "synset": "sushi_bar.n.01", "name": "sushi_bar"}, + {"id": 11471, "synset": "suspension.n.05", "name": "suspension"}, + {"id": 11472, "synset": "suspension_bridge.n.01", "name": "suspension_bridge"}, + {"id": 11473, "synset": "suspensory.n.01", "name": "suspensory"}, + {"id": 11474, "synset": "sustaining_pedal.n.01", "name": "sustaining_pedal"}, + {"id": 11475, "synset": "suture.n.02", "name": "suture"}, + {"id": 11476, "synset": "swab.n.01", "name": "swab"}, + {"id": 11477, "synset": "swaddling_clothes.n.01", "name": "swaddling_clothes"}, + {"id": 11478, "synset": "swag.n.03", "name": "swag"}, + {"id": 11479, "synset": "swage_block.n.01", "name": "swage_block"}, + {"id": 11480, "synset": "swagger_stick.n.01", "name": "swagger_stick"}, + {"id": 11481, "synset": "swallow-tailed_coat.n.01", "name": "swallow-tailed_coat"}, + {"id": 11482, "synset": "swamp_buggy.n.01", "name": "swamp_buggy"}, + {"id": 11483, "synset": "swan's_down.n.01", "name": "swan's_down"}, + {"id": 11484, "synset": "swathe.n.01", "name": "swathe"}, + {"id": 11485, "synset": "swatter.n.01", "name": "swatter"}, + {"id": 11486, "synset": "sweat_bag.n.01", "name": "sweat_bag"}, + {"id": 11487, "synset": "sweatband.n.01", "name": "sweatband"}, + {"id": 11488, "synset": "sweatshop.n.01", "name": "sweatshop"}, + {"id": 11489, "synset": "sweat_suit.n.01", "name": "sweat_suit"}, + {"id": 11490, "synset": "sweep.n.04", "name": "sweep"}, + {"id": 11491, "synset": "sweep_hand.n.01", "name": "sweep_hand"}, + {"id": 11492, "synset": "swimming_trunks.n.01", "name": "swimming_trunks"}, + {"id": 11493, "synset": "swing.n.02", "name": "swing"}, + {"id": 11494, "synset": "swing_door.n.01", "name": "swing_door"}, + {"id": 11495, "synset": "switch.n.01", "name": "switch"}, + {"id": 11496, "synset": "switchblade.n.01", "name": "switchblade"}, + {"id": 11497, "synset": "switch_engine.n.01", "name": "switch_engine"}, + {"id": 11498, "synset": "swivel.n.01", "name": "swivel"}, + {"id": 11499, "synset": "swivel_chair.n.01", "name": "swivel_chair"}, + {"id": 11500, "synset": "swizzle_stick.n.01", "name": "swizzle_stick"}, + {"id": 11501, "synset": "sword_cane.n.01", "name": "sword_cane"}, + {"id": 11502, "synset": "s_wrench.n.01", "name": "S_wrench"}, + {"id": 11503, "synset": "synagogue.n.01", "name": "synagogue"}, + {"id": 11504, "synset": "synchrocyclotron.n.01", "name": "synchrocyclotron"}, + {"id": 11505, "synset": "synchroflash.n.01", "name": "synchroflash"}, + {"id": 11506, "synset": "synchromesh.n.01", "name": "synchromesh"}, + { + "id": 11507, + "synset": "synchronous_converter.n.01", + "name": "synchronous_converter", + }, + {"id": 11508, "synset": "synchronous_motor.n.01", "name": "synchronous_motor"}, + {"id": 11509, "synset": "synchrotron.n.01", "name": "synchrotron"}, + {"id": 11510, "synset": "synchroscope.n.01", "name": "synchroscope"}, + {"id": 11511, "synset": "synthesizer.n.02", "name": "synthesizer"}, + {"id": 11512, "synset": "system.n.01", "name": "system"}, + {"id": 11513, "synset": "tabard.n.01", "name": "tabard"}, + {"id": 11514, "synset": "tabernacle.n.02", "name": "Tabernacle"}, + {"id": 11515, "synset": "tabi.n.01", "name": "tabi"}, + {"id": 11516, "synset": "tab_key.n.01", "name": "tab_key"}, + {"id": 11517, "synset": "table.n.03", "name": "table"}, + {"id": 11518, "synset": "tablefork.n.01", "name": "tablefork"}, + {"id": 11519, "synset": "table_knife.n.01", "name": "table_knife"}, + {"id": 11520, "synset": "table_saw.n.01", "name": "table_saw"}, + {"id": 11521, "synset": "tablespoon.n.02", "name": "tablespoon"}, + {"id": 11522, "synset": "tablet-armed_chair.n.01", "name": "tablet-armed_chair"}, + { + "id": 11523, + "synset": "table-tennis_racquet.n.01", + "name": "table-tennis_racquet", + }, + {"id": 11524, "synset": "tabletop.n.01", "name": "tabletop"}, + {"id": 11525, "synset": "tableware.n.01", "name": "tableware"}, + {"id": 11526, "synset": "tabor.n.01", "name": "tabor"}, + {"id": 11527, "synset": "taboret.n.01", "name": "taboret"}, + {"id": 11528, "synset": "tachistoscope.n.01", "name": "tachistoscope"}, + {"id": 11529, "synset": "tachograph.n.01", "name": "tachograph"}, + {"id": 11530, "synset": "tachymeter.n.01", "name": "tachymeter"}, + {"id": 11531, "synset": "tack.n.02", "name": "tack"}, + {"id": 11532, "synset": "tack_hammer.n.01", "name": "tack_hammer"}, + {"id": 11533, "synset": "taffeta.n.01", "name": "taffeta"}, + {"id": 11534, "synset": "taffrail.n.01", "name": "taffrail"}, + {"id": 11535, "synset": "tailgate.n.01", "name": "tailgate"}, + {"id": 11536, "synset": "tailor-made.n.01", "name": "tailor-made"}, + {"id": 11537, "synset": "tailor's_chalk.n.01", "name": "tailor's_chalk"}, + {"id": 11538, "synset": "tailpipe.n.01", "name": "tailpipe"}, + {"id": 11539, "synset": "tail_rotor.n.01", "name": "tail_rotor"}, + {"id": 11540, "synset": "tailstock.n.01", "name": "tailstock"}, + {"id": 11541, "synset": "take-up.n.01", "name": "take-up"}, + {"id": 11542, "synset": "talaria.n.01", "name": "talaria"}, + {"id": 11543, "synset": "talcum.n.02", "name": "talcum"}, + {"id": 11544, "synset": "tam.n.01", "name": "tam"}, + {"id": 11545, "synset": "tambour.n.02", "name": "tambour"}, + {"id": 11546, "synset": "tambour.n.01", "name": "tambour"}, + {"id": 11547, "synset": "tammy.n.01", "name": "tammy"}, + {"id": 11548, "synset": "tamp.n.01", "name": "tamp"}, + {"id": 11549, "synset": "tampax.n.01", "name": "Tampax"}, + {"id": 11550, "synset": "tampion.n.01", "name": "tampion"}, + {"id": 11551, "synset": "tampon.n.01", "name": "tampon"}, + {"id": 11552, "synset": "tandoor.n.01", "name": "tandoor"}, + {"id": 11553, "synset": "tangram.n.01", "name": "tangram"}, + {"id": 11554, "synset": "tankard.n.01", "name": "tankard"}, + {"id": 11555, "synset": "tank_car.n.01", "name": "tank_car"}, + {"id": 11556, "synset": "tank_destroyer.n.01", "name": "tank_destroyer"}, + {"id": 11557, "synset": "tank_engine.n.01", "name": "tank_engine"}, + {"id": 11558, "synset": "tanker_plane.n.01", "name": "tanker_plane"}, + {"id": 11559, "synset": "tank_shell.n.01", "name": "tank_shell"}, + {"id": 11560, "synset": "tannoy.n.01", "name": "tannoy"}, + {"id": 11561, "synset": "tap.n.06", "name": "tap"}, + {"id": 11562, "synset": "tapa.n.02", "name": "tapa"}, + {"id": 11563, "synset": "tape.n.02", "name": "tape"}, + {"id": 11564, "synset": "tape_deck.n.01", "name": "tape_deck"}, + {"id": 11565, "synset": "tape_drive.n.01", "name": "tape_drive"}, + {"id": 11566, "synset": "tape_player.n.01", "name": "tape_player"}, + {"id": 11567, "synset": "tape_recorder.n.01", "name": "tape_recorder"}, + {"id": 11568, "synset": "taper_file.n.01", "name": "taper_file"}, + {"id": 11569, "synset": "tappet.n.01", "name": "tappet"}, + {"id": 11570, "synset": "tap_wrench.n.01", "name": "tap_wrench"}, + {"id": 11571, "synset": "tare.n.05", "name": "tare"}, + {"id": 11572, "synset": "target.n.04", "name": "target"}, + { + "id": 11573, + "synset": "target_acquisition_system.n.01", + "name": "target_acquisition_system", + }, + {"id": 11574, "synset": "tarmacadam.n.02", "name": "tarmacadam"}, + {"id": 11575, "synset": "tasset.n.01", "name": "tasset"}, + {"id": 11576, "synset": "tattoo.n.02", "name": "tattoo"}, + {"id": 11577, "synset": "tavern.n.01", "name": "tavern"}, + {"id": 11578, "synset": "tawse.n.01", "name": "tawse"}, + {"id": 11579, "synset": "taximeter.n.01", "name": "taximeter"}, + {"id": 11580, "synset": "t-bar_lift.n.01", "name": "T-bar_lift"}, + {"id": 11581, "synset": "tea_bag.n.02", "name": "tea_bag"}, + {"id": 11582, "synset": "tea_ball.n.01", "name": "tea_ball"}, + {"id": 11583, "synset": "tea_cart.n.01", "name": "tea_cart"}, + {"id": 11584, "synset": "tea_chest.n.01", "name": "tea_chest"}, + {"id": 11585, "synset": "teaching_aid.n.01", "name": "teaching_aid"}, + {"id": 11586, "synset": "tea_gown.n.01", "name": "tea_gown"}, + {"id": 11587, "synset": "tea_maker.n.01", "name": "tea_maker"}, + {"id": 11588, "synset": "teashop.n.01", "name": "teashop"}, + {"id": 11589, "synset": "teaspoon.n.02", "name": "teaspoon"}, + {"id": 11590, "synset": "tea-strainer.n.01", "name": "tea-strainer"}, + {"id": 11591, "synset": "tea_table.n.01", "name": "tea_table"}, + {"id": 11592, "synset": "tea_tray.n.01", "name": "tea_tray"}, + {"id": 11593, "synset": "tea_urn.n.01", "name": "tea_urn"}, + {"id": 11594, "synset": "tee.n.03", "name": "tee"}, + {"id": 11595, "synset": "tee_hinge.n.01", "name": "tee_hinge"}, + {"id": 11596, "synset": "telecom_hotel.n.01", "name": "telecom_hotel"}, + { + "id": 11597, + "synset": "telecommunication_system.n.01", + "name": "telecommunication_system", + }, + {"id": 11598, "synset": "telegraph.n.01", "name": "telegraph"}, + {"id": 11599, "synset": "telegraph_key.n.01", "name": "telegraph_key"}, + {"id": 11600, "synset": "telemeter.n.01", "name": "telemeter"}, + {"id": 11601, "synset": "telephone_bell.n.01", "name": "telephone_bell"}, + {"id": 11602, "synset": "telephone_cord.n.01", "name": "telephone_cord"}, + {"id": 11603, "synset": "telephone_jack.n.01", "name": "telephone_jack"}, + {"id": 11604, "synset": "telephone_line.n.02", "name": "telephone_line"}, + {"id": 11605, "synset": "telephone_plug.n.01", "name": "telephone_plug"}, + {"id": 11606, "synset": "telephone_receiver.n.01", "name": "telephone_receiver"}, + {"id": 11607, "synset": "telephone_system.n.01", "name": "telephone_system"}, + {"id": 11608, "synset": "telephone_wire.n.01", "name": "telephone_wire"}, + {"id": 11609, "synset": "teleprompter.n.01", "name": "Teleprompter"}, + {"id": 11610, "synset": "telescope.n.01", "name": "telescope"}, + {"id": 11611, "synset": "telescopic_sight.n.01", "name": "telescopic_sight"}, + {"id": 11612, "synset": "telethermometer.n.01", "name": "telethermometer"}, + {"id": 11613, "synset": "teletypewriter.n.01", "name": "teletypewriter"}, + {"id": 11614, "synset": "television.n.02", "name": "television"}, + {"id": 11615, "synset": "television_antenna.n.01", "name": "television_antenna"}, + { + "id": 11616, + "synset": "television_equipment.n.01", + "name": "television_equipment", + }, + {"id": 11617, "synset": "television_monitor.n.01", "name": "television_monitor"}, + {"id": 11618, "synset": "television_room.n.01", "name": "television_room"}, + { + "id": 11619, + "synset": "television_transmitter.n.01", + "name": "television_transmitter", + }, + {"id": 11620, "synset": "telpher.n.01", "name": "telpher"}, + {"id": 11621, "synset": "telpherage.n.01", "name": "telpherage"}, + {"id": 11622, "synset": "tempera.n.01", "name": "tempera"}, + {"id": 11623, "synset": "temple.n.01", "name": "temple"}, + {"id": 11624, "synset": "temple.n.03", "name": "temple"}, + {"id": 11625, "synset": "temporary_hookup.n.01", "name": "temporary_hookup"}, + {"id": 11626, "synset": "tender.n.06", "name": "tender"}, + {"id": 11627, "synset": "tender.n.05", "name": "tender"}, + {"id": 11628, "synset": "tender.n.04", "name": "tender"}, + {"id": 11629, "synset": "tenement.n.01", "name": "tenement"}, + {"id": 11630, "synset": "tennis_camp.n.01", "name": "tennis_camp"}, + {"id": 11631, "synset": "tenon.n.01", "name": "tenon"}, + {"id": 11632, "synset": "tenor_drum.n.01", "name": "tenor_drum"}, + {"id": 11633, "synset": "tenoroon.n.01", "name": "tenoroon"}, + {"id": 11634, "synset": "tenpenny_nail.n.01", "name": "tenpenny_nail"}, + {"id": 11635, "synset": "tenpin.n.01", "name": "tenpin"}, + {"id": 11636, "synset": "tensimeter.n.01", "name": "tensimeter"}, + {"id": 11637, "synset": "tensiometer.n.03", "name": "tensiometer"}, + {"id": 11638, "synset": "tensiometer.n.02", "name": "tensiometer"}, + {"id": 11639, "synset": "tensiometer.n.01", "name": "tensiometer"}, + {"id": 11640, "synset": "tent.n.01", "name": "tent"}, + {"id": 11641, "synset": "tenter.n.01", "name": "tenter"}, + {"id": 11642, "synset": "tenterhook.n.01", "name": "tenterhook"}, + {"id": 11643, "synset": "tent-fly.n.01", "name": "tent-fly"}, + {"id": 11644, "synset": "tent_peg.n.01", "name": "tent_peg"}, + {"id": 11645, "synset": "tepee.n.01", "name": "tepee"}, + {"id": 11646, "synset": "terminal.n.02", "name": "terminal"}, + {"id": 11647, "synset": "terminal.n.04", "name": "terminal"}, + {"id": 11648, "synset": "terraced_house.n.01", "name": "terraced_house"}, + {"id": 11649, "synset": "terra_cotta.n.01", "name": "terra_cotta"}, + {"id": 11650, "synset": "terrarium.n.01", "name": "terrarium"}, + {"id": 11651, "synset": "terra_sigillata.n.01", "name": "terra_sigillata"}, + {"id": 11652, "synset": "terry.n.02", "name": "terry"}, + {"id": 11653, "synset": "tesla_coil.n.01", "name": "Tesla_coil"}, + {"id": 11654, "synset": "tessera.n.01", "name": "tessera"}, + {"id": 11655, "synset": "test_equipment.n.01", "name": "test_equipment"}, + {"id": 11656, "synset": "test_rocket.n.01", "name": "test_rocket"}, + {"id": 11657, "synset": "test_room.n.01", "name": "test_room"}, + {"id": 11658, "synset": "testudo.n.01", "name": "testudo"}, + {"id": 11659, "synset": "tetraskelion.n.01", "name": "tetraskelion"}, + {"id": 11660, "synset": "tetrode.n.01", "name": "tetrode"}, + {"id": 11661, "synset": "textile_machine.n.01", "name": "textile_machine"}, + {"id": 11662, "synset": "textile_mill.n.01", "name": "textile_mill"}, + {"id": 11663, "synset": "thatch.n.04", "name": "thatch"}, + {"id": 11664, "synset": "theater.n.01", "name": "theater"}, + {"id": 11665, "synset": "theater_curtain.n.01", "name": "theater_curtain"}, + {"id": 11666, "synset": "theater_light.n.01", "name": "theater_light"}, + {"id": 11667, "synset": "theodolite.n.01", "name": "theodolite"}, + {"id": 11668, "synset": "theremin.n.01", "name": "theremin"}, + {"id": 11669, "synset": "thermal_printer.n.01", "name": "thermal_printer"}, + {"id": 11670, "synset": "thermal_reactor.n.01", "name": "thermal_reactor"}, + {"id": 11671, "synset": "thermocouple.n.01", "name": "thermocouple"}, + { + "id": 11672, + "synset": "thermoelectric_thermometer.n.01", + "name": "thermoelectric_thermometer", + }, + {"id": 11673, "synset": "thermograph.n.02", "name": "thermograph"}, + {"id": 11674, "synset": "thermograph.n.01", "name": "thermograph"}, + {"id": 11675, "synset": "thermohydrometer.n.01", "name": "thermohydrometer"}, + {"id": 11676, "synset": "thermojunction.n.01", "name": "thermojunction"}, + { + "id": 11677, + "synset": "thermonuclear_reactor.n.01", + "name": "thermonuclear_reactor", + }, + {"id": 11678, "synset": "thermopile.n.01", "name": "thermopile"}, + {"id": 11679, "synset": "thigh_pad.n.01", "name": "thigh_pad"}, + {"id": 11680, "synset": "thill.n.01", "name": "thill"}, + {"id": 11681, "synset": "thinning_shears.n.01", "name": "thinning_shears"}, + {"id": 11682, "synset": "third_base.n.01", "name": "third_base"}, + {"id": 11683, "synset": "third_gear.n.01", "name": "third_gear"}, + {"id": 11684, "synset": "third_rail.n.01", "name": "third_rail"}, + {"id": 11685, "synset": "thong.n.03", "name": "thong"}, + {"id": 11686, "synset": "thong.n.02", "name": "thong"}, + {"id": 11687, "synset": "three-centered_arch.n.01", "name": "three-centered_arch"}, + {"id": 11688, "synset": "three-decker.n.02", "name": "three-decker"}, + { + "id": 11689, + "synset": "three-dimensional_radar.n.01", + "name": "three-dimensional_radar", + }, + {"id": 11690, "synset": "three-piece_suit.n.01", "name": "three-piece_suit"}, + { + "id": 11691, + "synset": "three-quarter_binding.n.01", + "name": "three-quarter_binding", + }, + {"id": 11692, "synset": "three-way_switch.n.01", "name": "three-way_switch"}, + {"id": 11693, "synset": "thresher.n.01", "name": "thresher"}, + {"id": 11694, "synset": "threshing_floor.n.01", "name": "threshing_floor"}, + {"id": 11695, "synset": "thriftshop.n.01", "name": "thriftshop"}, + {"id": 11696, "synset": "throat_protector.n.01", "name": "throat_protector"}, + {"id": 11697, "synset": "throne.n.01", "name": "throne"}, + {"id": 11698, "synset": "thrust_bearing.n.01", "name": "thrust_bearing"}, + {"id": 11699, "synset": "thruster.n.02", "name": "thruster"}, + {"id": 11700, "synset": "thumb.n.02", "name": "thumb"}, + {"id": 11701, "synset": "thumbhole.n.02", "name": "thumbhole"}, + {"id": 11702, "synset": "thumbscrew.n.02", "name": "thumbscrew"}, + {"id": 11703, "synset": "thumbstall.n.01", "name": "thumbstall"}, + {"id": 11704, "synset": "thunderer.n.02", "name": "thunderer"}, + {"id": 11705, "synset": "thwart.n.01", "name": "thwart"}, + {"id": 11706, "synset": "ticking.n.02", "name": "ticking"}, + {"id": 11707, "synset": "tickler_coil.n.01", "name": "tickler_coil"}, + {"id": 11708, "synset": "tie.n.04", "name": "tie"}, + {"id": 11709, "synset": "tie.n.08", "name": "tie"}, + {"id": 11710, "synset": "tie_rack.n.01", "name": "tie_rack"}, + {"id": 11711, "synset": "tie_rod.n.01", "name": "tie_rod"}, + {"id": 11712, "synset": "tile.n.01", "name": "tile"}, + {"id": 11713, "synset": "tile_cutter.n.01", "name": "tile_cutter"}, + {"id": 11714, "synset": "tile_roof.n.01", "name": "tile_roof"}, + {"id": 11715, "synset": "tiller.n.03", "name": "tiller"}, + {"id": 11716, "synset": "tilter.n.02", "name": "tilter"}, + {"id": 11717, "synset": "tilt-top_table.n.01", "name": "tilt-top_table"}, + {"id": 11718, "synset": "timber.n.02", "name": "timber"}, + {"id": 11719, "synset": "timber.n.03", "name": "timber"}, + {"id": 11720, "synset": "timber_hitch.n.01", "name": "timber_hitch"}, + {"id": 11721, "synset": "timbrel.n.01", "name": "timbrel"}, + {"id": 11722, "synset": "time_bomb.n.02", "name": "time_bomb"}, + {"id": 11723, "synset": "time_capsule.n.01", "name": "time_capsule"}, + {"id": 11724, "synset": "time_clock.n.01", "name": "time_clock"}, + { + "id": 11725, + "synset": "time-delay_measuring_instrument.n.01", + "name": "time-delay_measuring_instrument", + }, + {"id": 11726, "synset": "time-fuse.n.01", "name": "time-fuse"}, + {"id": 11727, "synset": "timepiece.n.01", "name": "timepiece"}, + {"id": 11728, "synset": "timer.n.03", "name": "timer"}, + {"id": 11729, "synset": "time-switch.n.01", "name": "time-switch"}, + {"id": 11730, "synset": "tin.n.02", "name": "tin"}, + {"id": 11731, "synset": "tinderbox.n.02", "name": "tinderbox"}, + {"id": 11732, "synset": "tine.n.01", "name": "tine"}, + {"id": 11733, "synset": "tippet.n.01", "name": "tippet"}, + {"id": 11734, "synset": "tire_chain.n.01", "name": "tire_chain"}, + {"id": 11735, "synset": "tire_iron.n.01", "name": "tire_iron"}, + {"id": 11736, "synset": "titfer.n.01", "name": "titfer"}, + {"id": 11737, "synset": "tithe_barn.n.01", "name": "tithe_barn"}, + {"id": 11738, "synset": "titrator.n.01", "name": "titrator"}, + {"id": 11739, "synset": "toasting_fork.n.01", "name": "toasting_fork"}, + {"id": 11740, "synset": "toastrack.n.01", "name": "toastrack"}, + {"id": 11741, "synset": "tobacco_pouch.n.01", "name": "tobacco_pouch"}, + {"id": 11742, "synset": "tobacco_shop.n.01", "name": "tobacco_shop"}, + {"id": 11743, "synset": "toboggan.n.01", "name": "toboggan"}, + {"id": 11744, "synset": "toby.n.01", "name": "toby"}, + {"id": 11745, "synset": "tocsin.n.02", "name": "tocsin"}, + {"id": 11746, "synset": "toe.n.02", "name": "toe"}, + {"id": 11747, "synset": "toecap.n.01", "name": "toecap"}, + {"id": 11748, "synset": "toehold.n.02", "name": "toehold"}, + {"id": 11749, "synset": "toga.n.01", "name": "toga"}, + {"id": 11750, "synset": "toga_virilis.n.01", "name": "toga_virilis"}, + {"id": 11751, "synset": "toggle.n.03", "name": "toggle"}, + {"id": 11752, "synset": "toggle_bolt.n.01", "name": "toggle_bolt"}, + {"id": 11753, "synset": "toggle_joint.n.01", "name": "toggle_joint"}, + {"id": 11754, "synset": "toggle_switch.n.01", "name": "toggle_switch"}, + {"id": 11755, "synset": "togs.n.01", "name": "togs"}, + {"id": 11756, "synset": "toilet.n.01", "name": "toilet"}, + {"id": 11757, "synset": "toilet_bag.n.01", "name": "toilet_bag"}, + {"id": 11758, "synset": "toilet_bowl.n.01", "name": "toilet_bowl"}, + {"id": 11759, "synset": "toilet_kit.n.01", "name": "toilet_kit"}, + {"id": 11760, "synset": "toilet_powder.n.01", "name": "toilet_powder"}, + {"id": 11761, "synset": "toiletry.n.01", "name": "toiletry"}, + {"id": 11762, "synset": "toilet_seat.n.01", "name": "toilet_seat"}, + {"id": 11763, "synset": "toilet_water.n.01", "name": "toilet_water"}, + {"id": 11764, "synset": "tokamak.n.01", "name": "tokamak"}, + {"id": 11765, "synset": "token.n.03", "name": "token"}, + {"id": 11766, "synset": "tollbooth.n.01", "name": "tollbooth"}, + {"id": 11767, "synset": "toll_bridge.n.01", "name": "toll_bridge"}, + {"id": 11768, "synset": "tollgate.n.01", "name": "tollgate"}, + {"id": 11769, "synset": "toll_line.n.01", "name": "toll_line"}, + {"id": 11770, "synset": "tomahawk.n.01", "name": "tomahawk"}, + {"id": 11771, "synset": "tommy_gun.n.01", "name": "Tommy_gun"}, + {"id": 11772, "synset": "tomograph.n.01", "name": "tomograph"}, + {"id": 11773, "synset": "tone_arm.n.01", "name": "tone_arm"}, + {"id": 11774, "synset": "toner.n.03", "name": "toner"}, + {"id": 11775, "synset": "tongue.n.07", "name": "tongue"}, + { + "id": 11776, + "synset": "tongue_and_groove_joint.n.01", + "name": "tongue_and_groove_joint", + }, + {"id": 11777, "synset": "tongue_depressor.n.01", "name": "tongue_depressor"}, + {"id": 11778, "synset": "tonometer.n.01", "name": "tonometer"}, + {"id": 11779, "synset": "tool.n.01", "name": "tool"}, + {"id": 11780, "synset": "tool_bag.n.01", "name": "tool_bag"}, + {"id": 11781, "synset": "toolshed.n.01", "name": "toolshed"}, + {"id": 11782, "synset": "tooth.n.02", "name": "tooth"}, + {"id": 11783, "synset": "tooth.n.05", "name": "tooth"}, + {"id": 11784, "synset": "top.n.10", "name": "top"}, + {"id": 11785, "synset": "topgallant.n.02", "name": "topgallant"}, + {"id": 11786, "synset": "topgallant.n.01", "name": "topgallant"}, + {"id": 11787, "synset": "topiary.n.01", "name": "topiary"}, + {"id": 11788, "synset": "topknot.n.01", "name": "topknot"}, + {"id": 11789, "synset": "topmast.n.01", "name": "topmast"}, + {"id": 11790, "synset": "topper.n.05", "name": "topper"}, + {"id": 11791, "synset": "topsail.n.01", "name": "topsail"}, + {"id": 11792, "synset": "toque.n.01", "name": "toque"}, + {"id": 11793, "synset": "torch.n.01", "name": "torch"}, + {"id": 11794, "synset": "torpedo.n.06", "name": "torpedo"}, + {"id": 11795, "synset": "torpedo.n.05", "name": "torpedo"}, + {"id": 11796, "synset": "torpedo.n.03", "name": "torpedo"}, + {"id": 11797, "synset": "torpedo_boat.n.01", "name": "torpedo_boat"}, + { + "id": 11798, + "synset": "torpedo-boat_destroyer.n.01", + "name": "torpedo-boat_destroyer", + }, + {"id": 11799, "synset": "torpedo_tube.n.01", "name": "torpedo_tube"}, + {"id": 11800, "synset": "torque_converter.n.01", "name": "torque_converter"}, + {"id": 11801, "synset": "torque_wrench.n.01", "name": "torque_wrench"}, + {"id": 11802, "synset": "torture_chamber.n.01", "name": "torture_chamber"}, + {"id": 11803, "synset": "totem_pole.n.01", "name": "totem_pole"}, + {"id": 11804, "synset": "touch_screen.n.01", "name": "touch_screen"}, + {"id": 11805, "synset": "toupee.n.01", "name": "toupee"}, + {"id": 11806, "synset": "touring_car.n.01", "name": "touring_car"}, + {"id": 11807, "synset": "tourist_class.n.01", "name": "tourist_class"}, + {"id": 11808, "synset": "toweling.n.01", "name": "toweling"}, + {"id": 11809, "synset": "towel_rail.n.01", "name": "towel_rail"}, + {"id": 11810, "synset": "tower.n.01", "name": "tower"}, + {"id": 11811, "synset": "town_hall.n.01", "name": "town_hall"}, + {"id": 11812, "synset": "towpath.n.01", "name": "towpath"}, + {"id": 11813, "synset": "toy_box.n.01", "name": "toy_box"}, + {"id": 11814, "synset": "toyshop.n.01", "name": "toyshop"}, + {"id": 11815, "synset": "trace_detector.n.01", "name": "trace_detector"}, + {"id": 11816, "synset": "track.n.09", "name": "track"}, + {"id": 11817, "synset": "track.n.08", "name": "track"}, + {"id": 11818, "synset": "trackball.n.01", "name": "trackball"}, + {"id": 11819, "synset": "tracked_vehicle.n.01", "name": "tracked_vehicle"}, + {"id": 11820, "synset": "tract_house.n.01", "name": "tract_house"}, + {"id": 11821, "synset": "tract_housing.n.01", "name": "tract_housing"}, + {"id": 11822, "synset": "traction_engine.n.01", "name": "traction_engine"}, + {"id": 11823, "synset": "tractor.n.02", "name": "tractor"}, + {"id": 11824, "synset": "trailer.n.04", "name": "trailer"}, + {"id": 11825, "synset": "trailer.n.03", "name": "trailer"}, + {"id": 11826, "synset": "trailer_camp.n.01", "name": "trailer_camp"}, + {"id": 11827, "synset": "trailing_edge.n.01", "name": "trailing_edge"}, + {"id": 11828, "synset": "tramline.n.01", "name": "tramline"}, + {"id": 11829, "synset": "trammel.n.02", "name": "trammel"}, + {"id": 11830, "synset": "tramp_steamer.n.01", "name": "tramp_steamer"}, + {"id": 11831, "synset": "tramway.n.01", "name": "tramway"}, + {"id": 11832, "synset": "transdermal_patch.n.01", "name": "transdermal_patch"}, + {"id": 11833, "synset": "transept.n.01", "name": "transept"}, + {"id": 11834, "synset": "transformer.n.01", "name": "transformer"}, + {"id": 11835, "synset": "transistor.n.01", "name": "transistor"}, + {"id": 11836, "synset": "transit_instrument.n.01", "name": "transit_instrument"}, + {"id": 11837, "synset": "transmission.n.05", "name": "transmission"}, + {"id": 11838, "synset": "transmission_shaft.n.01", "name": "transmission_shaft"}, + {"id": 11839, "synset": "transmitter.n.03", "name": "transmitter"}, + {"id": 11840, "synset": "transom.n.02", "name": "transom"}, + {"id": 11841, "synset": "transom.n.01", "name": "transom"}, + {"id": 11842, "synset": "transponder.n.01", "name": "transponder"}, + {"id": 11843, "synset": "transporter.n.02", "name": "transporter"}, + {"id": 11844, "synset": "transporter.n.01", "name": "transporter"}, + {"id": 11845, "synset": "transport_ship.n.01", "name": "transport_ship"}, + {"id": 11846, "synset": "trap.n.01", "name": "trap"}, + {"id": 11847, "synset": "trap_door.n.01", "name": "trap_door"}, + {"id": 11848, "synset": "trapeze.n.01", "name": "trapeze"}, + {"id": 11849, "synset": "trave.n.01", "name": "trave"}, + {"id": 11850, "synset": "travel_iron.n.01", "name": "travel_iron"}, + {"id": 11851, "synset": "trawl.n.02", "name": "trawl"}, + {"id": 11852, "synset": "trawl.n.01", "name": "trawl"}, + {"id": 11853, "synset": "trawler.n.02", "name": "trawler"}, + {"id": 11854, "synset": "tray_cloth.n.01", "name": "tray_cloth"}, + {"id": 11855, "synset": "tread.n.04", "name": "tread"}, + {"id": 11856, "synset": "tread.n.03", "name": "tread"}, + {"id": 11857, "synset": "treadmill.n.02", "name": "treadmill"}, + {"id": 11858, "synset": "treadmill.n.01", "name": "treadmill"}, + {"id": 11859, "synset": "treasure_chest.n.01", "name": "treasure_chest"}, + {"id": 11860, "synset": "treasure_ship.n.01", "name": "treasure_ship"}, + {"id": 11861, "synset": "treenail.n.01", "name": "treenail"}, + {"id": 11862, "synset": "trefoil_arch.n.01", "name": "trefoil_arch"}, + {"id": 11863, "synset": "trellis.n.01", "name": "trellis"}, + {"id": 11864, "synset": "trench.n.01", "name": "trench"}, + {"id": 11865, "synset": "trench_knife.n.01", "name": "trench_knife"}, + {"id": 11866, "synset": "trepan.n.02", "name": "trepan"}, + {"id": 11867, "synset": "trepan.n.01", "name": "trepan"}, + {"id": 11868, "synset": "trestle.n.02", "name": "trestle"}, + {"id": 11869, "synset": "trestle.n.01", "name": "trestle"}, + {"id": 11870, "synset": "trestle_bridge.n.01", "name": "trestle_bridge"}, + {"id": 11871, "synset": "trestle_table.n.01", "name": "trestle_table"}, + {"id": 11872, "synset": "trestlework.n.01", "name": "trestlework"}, + {"id": 11873, "synset": "trews.n.01", "name": "trews"}, + {"id": 11874, "synset": "trial_balloon.n.02", "name": "trial_balloon"}, + {"id": 11875, "synset": "triangle.n.04", "name": "triangle"}, + {"id": 11876, "synset": "triclinium.n.02", "name": "triclinium"}, + {"id": 11877, "synset": "triclinium.n.01", "name": "triclinium"}, + {"id": 11878, "synset": "tricorn.n.01", "name": "tricorn"}, + {"id": 11879, "synset": "tricot.n.01", "name": "tricot"}, + {"id": 11880, "synset": "trident.n.01", "name": "trident"}, + {"id": 11881, "synset": "trigger.n.02", "name": "trigger"}, + {"id": 11882, "synset": "trimaran.n.01", "name": "trimaran"}, + {"id": 11883, "synset": "trimmer.n.02", "name": "trimmer"}, + {"id": 11884, "synset": "trimmer_arch.n.01", "name": "trimmer_arch"}, + {"id": 11885, "synset": "triode.n.01", "name": "triode"}, + {"id": 11886, "synset": "triptych.n.01", "name": "triptych"}, + {"id": 11887, "synset": "trip_wire.n.02", "name": "trip_wire"}, + {"id": 11888, "synset": "trireme.n.01", "name": "trireme"}, + {"id": 11889, "synset": "triskelion.n.01", "name": "triskelion"}, + {"id": 11890, "synset": "triumphal_arch.n.01", "name": "triumphal_arch"}, + {"id": 11891, "synset": "trivet.n.02", "name": "trivet"}, + {"id": 11892, "synset": "trivet.n.01", "name": "trivet"}, + {"id": 11893, "synset": "troika.n.01", "name": "troika"}, + {"id": 11894, "synset": "troll.n.03", "name": "troll"}, + {"id": 11895, "synset": "trolleybus.n.01", "name": "trolleybus"}, + {"id": 11896, "synset": "trombone.n.01", "name": "trombone"}, + {"id": 11897, "synset": "troop_carrier.n.01", "name": "troop_carrier"}, + {"id": 11898, "synset": "troopship.n.01", "name": "troopship"}, + {"id": 11899, "synset": "trophy_case.n.01", "name": "trophy_case"}, + {"id": 11900, "synset": "trough.n.05", "name": "trough"}, + {"id": 11901, "synset": "trouser.n.02", "name": "trouser"}, + {"id": 11902, "synset": "trouser_cuff.n.01", "name": "trouser_cuff"}, + {"id": 11903, "synset": "trouser_press.n.01", "name": "trouser_press"}, + {"id": 11904, "synset": "trousseau.n.01", "name": "trousseau"}, + {"id": 11905, "synset": "trowel.n.01", "name": "trowel"}, + {"id": 11906, "synset": "trumpet_arch.n.01", "name": "trumpet_arch"}, + {"id": 11907, "synset": "truncheon.n.01", "name": "truncheon"}, + {"id": 11908, "synset": "trundle_bed.n.01", "name": "trundle_bed"}, + {"id": 11909, "synset": "trunk_hose.n.01", "name": "trunk_hose"}, + {"id": 11910, "synset": "trunk_lid.n.01", "name": "trunk_lid"}, + {"id": 11911, "synset": "trunk_line.n.02", "name": "trunk_line"}, + {"id": 11912, "synset": "truss.n.02", "name": "truss"}, + {"id": 11913, "synset": "truss_bridge.n.01", "name": "truss_bridge"}, + {"id": 11914, "synset": "try_square.n.01", "name": "try_square"}, + {"id": 11915, "synset": "t-square.n.01", "name": "T-square"}, + {"id": 11916, "synset": "tube.n.02", "name": "tube"}, + {"id": 11917, "synset": "tuck_box.n.01", "name": "tuck_box"}, + {"id": 11918, "synset": "tucker.n.04", "name": "tucker"}, + {"id": 11919, "synset": "tucker-bag.n.01", "name": "tucker-bag"}, + {"id": 11920, "synset": "tuck_shop.n.01", "name": "tuck_shop"}, + {"id": 11921, "synset": "tudor_arch.n.01", "name": "Tudor_arch"}, + {"id": 11922, "synset": "tudung.n.01", "name": "tudung"}, + {"id": 11923, "synset": "tugboat.n.01", "name": "tugboat"}, + {"id": 11924, "synset": "tulle.n.01", "name": "tulle"}, + {"id": 11925, "synset": "tumble-dryer.n.01", "name": "tumble-dryer"}, + {"id": 11926, "synset": "tumbler.n.02", "name": "tumbler"}, + {"id": 11927, "synset": "tumbrel.n.01", "name": "tumbrel"}, + {"id": 11928, "synset": "tun.n.01", "name": "tun"}, + {"id": 11929, "synset": "tunic.n.02", "name": "tunic"}, + {"id": 11930, "synset": "tuning_fork.n.01", "name": "tuning_fork"}, + {"id": 11931, "synset": "tupik.n.01", "name": "tupik"}, + {"id": 11932, "synset": "turbine.n.01", "name": "turbine"}, + {"id": 11933, "synset": "turbogenerator.n.01", "name": "turbogenerator"}, + {"id": 11934, "synset": "tureen.n.01", "name": "tureen"}, + {"id": 11935, "synset": "turkish_bath.n.01", "name": "Turkish_bath"}, + {"id": 11936, "synset": "turkish_towel.n.01", "name": "Turkish_towel"}, + {"id": 11937, "synset": "turk's_head.n.01", "name": "Turk's_head"}, + {"id": 11938, "synset": "turnbuckle.n.01", "name": "turnbuckle"}, + {"id": 11939, "synset": "turner.n.08", "name": "turner"}, + {"id": 11940, "synset": "turnery.n.01", "name": "turnery"}, + {"id": 11941, "synset": "turnpike.n.01", "name": "turnpike"}, + {"id": 11942, "synset": "turnspit.n.01", "name": "turnspit"}, + {"id": 11943, "synset": "turnstile.n.01", "name": "turnstile"}, + {"id": 11944, "synset": "turntable.n.01", "name": "turntable"}, + {"id": 11945, "synset": "turntable.n.02", "name": "turntable"}, + {"id": 11946, "synset": "turret.n.01", "name": "turret"}, + {"id": 11947, "synset": "turret_clock.n.01", "name": "turret_clock"}, + {"id": 11948, "synset": "tweed.n.01", "name": "tweed"}, + {"id": 11949, "synset": "tweeter.n.01", "name": "tweeter"}, + {"id": 11950, "synset": "twenty-two.n.02", "name": "twenty-two"}, + {"id": 11951, "synset": "twenty-two_pistol.n.01", "name": "twenty-two_pistol"}, + {"id": 11952, "synset": "twenty-two_rifle.n.01", "name": "twenty-two_rifle"}, + {"id": 11953, "synset": "twill.n.02", "name": "twill"}, + {"id": 11954, "synset": "twill.n.01", "name": "twill"}, + {"id": 11955, "synset": "twin_bed.n.01", "name": "twin_bed"}, + {"id": 11956, "synset": "twinjet.n.01", "name": "twinjet"}, + {"id": 11957, "synset": "twist_bit.n.01", "name": "twist_bit"}, + {"id": 11958, "synset": "two-by-four.n.01", "name": "two-by-four"}, + {"id": 11959, "synset": "two-man_tent.n.01", "name": "two-man_tent"}, + {"id": 11960, "synset": "two-piece.n.01", "name": "two-piece"}, + {"id": 11961, "synset": "typesetting_machine.n.01", "name": "typesetting_machine"}, + {"id": 11962, "synset": "typewriter_carriage.n.01", "name": "typewriter_carriage"}, + {"id": 11963, "synset": "typewriter_keyboard.n.01", "name": "typewriter_keyboard"}, + {"id": 11964, "synset": "tyrolean.n.02", "name": "tyrolean"}, + {"id": 11965, "synset": "uke.n.01", "name": "uke"}, + {"id": 11966, "synset": "ulster.n.02", "name": "ulster"}, + {"id": 11967, "synset": "ultracentrifuge.n.01", "name": "ultracentrifuge"}, + {"id": 11968, "synset": "ultramicroscope.n.01", "name": "ultramicroscope"}, + {"id": 11969, "synset": "ultrasuede.n.01", "name": "Ultrasuede"}, + {"id": 11970, "synset": "ultraviolet_lamp.n.01", "name": "ultraviolet_lamp"}, + {"id": 11971, "synset": "umbrella_tent.n.01", "name": "umbrella_tent"}, + {"id": 11972, "synset": "undercarriage.n.01", "name": "undercarriage"}, + {"id": 11973, "synset": "undercoat.n.01", "name": "undercoat"}, + {"id": 11974, "synset": "undergarment.n.01", "name": "undergarment"}, + {"id": 11975, "synset": "underpants.n.01", "name": "underpants"}, + {"id": 11976, "synset": "undies.n.01", "name": "undies"}, + { + "id": 11977, + "synset": "uneven_parallel_bars.n.01", + "name": "uneven_parallel_bars", + }, + {"id": 11978, "synset": "uniform.n.01", "name": "uniform"}, + {"id": 11979, "synset": "universal_joint.n.01", "name": "universal_joint"}, + {"id": 11980, "synset": "university.n.02", "name": "university"}, + {"id": 11981, "synset": "upholstery.n.01", "name": "upholstery"}, + {"id": 11982, "synset": "upholstery_material.n.01", "name": "upholstery_material"}, + {"id": 11983, "synset": "upholstery_needle.n.01", "name": "upholstery_needle"}, + {"id": 11984, "synset": "uplift.n.02", "name": "uplift"}, + {"id": 11985, "synset": "upper_berth.n.01", "name": "upper_berth"}, + {"id": 11986, "synset": "upright.n.02", "name": "upright"}, + {"id": 11987, "synset": "upset.n.04", "name": "upset"}, + {"id": 11988, "synset": "upstairs.n.01", "name": "upstairs"}, + {"id": 11989, "synset": "urceole.n.01", "name": "urceole"}, + {"id": 11990, "synset": "urn.n.02", "name": "urn"}, + {"id": 11991, "synset": "used-car.n.01", "name": "used-car"}, + {"id": 11992, "synset": "utensil.n.01", "name": "utensil"}, + {"id": 11993, "synset": "uzi.n.01", "name": "Uzi"}, + {"id": 11994, "synset": "vacation_home.n.01", "name": "vacation_home"}, + {"id": 11995, "synset": "vacuum_chamber.n.01", "name": "vacuum_chamber"}, + {"id": 11996, "synset": "vacuum_flask.n.01", "name": "vacuum_flask"}, + {"id": 11997, "synset": "vacuum_gauge.n.01", "name": "vacuum_gauge"}, + {"id": 11998, "synset": "valenciennes.n.02", "name": "Valenciennes"}, + {"id": 11999, "synset": "valise.n.01", "name": "valise"}, + {"id": 12000, "synset": "valve.n.03", "name": "valve"}, + {"id": 12001, "synset": "valve.n.02", "name": "valve"}, + { + "id": 12002, + "synset": "valve-in-head_engine.n.01", + "name": "valve-in-head_engine", + }, + {"id": 12003, "synset": "vambrace.n.01", "name": "vambrace"}, + {"id": 12004, "synset": "van.n.05", "name": "van"}, + {"id": 12005, "synset": "van.n.04", "name": "van"}, + {"id": 12006, "synset": "vane.n.02", "name": "vane"}, + {"id": 12007, "synset": "vaporizer.n.01", "name": "vaporizer"}, + { + "id": 12008, + "synset": "variable-pitch_propeller.n.01", + "name": "variable-pitch_propeller", + }, + {"id": 12009, "synset": "variometer.n.01", "name": "variometer"}, + {"id": 12010, "synset": "varnish.n.01", "name": "varnish"}, + {"id": 12011, "synset": "vault.n.03", "name": "vault"}, + {"id": 12012, "synset": "vault.n.02", "name": "vault"}, + {"id": 12013, "synset": "vaulting_horse.n.01", "name": "vaulting_horse"}, + {"id": 12014, "synset": "vehicle.n.01", "name": "vehicle"}, + {"id": 12015, "synset": "velcro.n.01", "name": "Velcro"}, + {"id": 12016, "synset": "velocipede.n.01", "name": "velocipede"}, + {"id": 12017, "synset": "velour.n.01", "name": "velour"}, + {"id": 12018, "synset": "velvet.n.01", "name": "velvet"}, + {"id": 12019, "synset": "velveteen.n.01", "name": "velveteen"}, + {"id": 12020, "synset": "veneer.n.01", "name": "veneer"}, + {"id": 12021, "synset": "venetian_blind.n.01", "name": "Venetian_blind"}, + {"id": 12022, "synset": "venn_diagram.n.01", "name": "Venn_diagram"}, + {"id": 12023, "synset": "ventilation.n.02", "name": "ventilation"}, + {"id": 12024, "synset": "ventilation_shaft.n.01", "name": "ventilation_shaft"}, + {"id": 12025, "synset": "ventilator.n.01", "name": "ventilator"}, + {"id": 12026, "synset": "veranda.n.01", "name": "veranda"}, + {"id": 12027, "synset": "verdigris.n.02", "name": "verdigris"}, + {"id": 12028, "synset": "vernier_caliper.n.01", "name": "vernier_caliper"}, + {"id": 12029, "synset": "vernier_scale.n.01", "name": "vernier_scale"}, + {"id": 12030, "synset": "vertical_file.n.01", "name": "vertical_file"}, + {"id": 12031, "synset": "vertical_stabilizer.n.01", "name": "vertical_stabilizer"}, + {"id": 12032, "synset": "vertical_tail.n.01", "name": "vertical_tail"}, + {"id": 12033, "synset": "very_pistol.n.01", "name": "Very_pistol"}, + {"id": 12034, "synset": "vessel.n.02", "name": "vessel"}, + {"id": 12035, "synset": "vessel.n.03", "name": "vessel"}, + {"id": 12036, "synset": "vestiture.n.01", "name": "vestiture"}, + {"id": 12037, "synset": "vestment.n.01", "name": "vestment"}, + {"id": 12038, "synset": "vest_pocket.n.01", "name": "vest_pocket"}, + {"id": 12039, "synset": "vestry.n.02", "name": "vestry"}, + {"id": 12040, "synset": "viaduct.n.01", "name": "viaduct"}, + {"id": 12041, "synset": "vibraphone.n.01", "name": "vibraphone"}, + {"id": 12042, "synset": "vibrator.n.02", "name": "vibrator"}, + {"id": 12043, "synset": "vibrator.n.01", "name": "vibrator"}, + {"id": 12044, "synset": "victrola.n.01", "name": "Victrola"}, + {"id": 12045, "synset": "vicuna.n.02", "name": "vicuna"}, + {"id": 12046, "synset": "videocassette.n.01", "name": "videocassette"}, + { + "id": 12047, + "synset": "videocassette_recorder.n.01", + "name": "videocassette_recorder", + }, + {"id": 12048, "synset": "videodisk.n.01", "name": "videodisk"}, + {"id": 12049, "synset": "video_recording.n.01", "name": "video_recording"}, + {"id": 12050, "synset": "videotape.n.02", "name": "videotape"}, + {"id": 12051, "synset": "vigil_light.n.01", "name": "vigil_light"}, + {"id": 12052, "synset": "villa.n.04", "name": "villa"}, + {"id": 12053, "synset": "villa.n.03", "name": "villa"}, + {"id": 12054, "synset": "villa.n.02", "name": "villa"}, + {"id": 12055, "synset": "viol.n.01", "name": "viol"}, + {"id": 12056, "synset": "viola.n.03", "name": "viola"}, + {"id": 12057, "synset": "viola_da_braccio.n.01", "name": "viola_da_braccio"}, + {"id": 12058, "synset": "viola_da_gamba.n.01", "name": "viola_da_gamba"}, + {"id": 12059, "synset": "viola_d'amore.n.01", "name": "viola_d'amore"}, + {"id": 12060, "synset": "virginal.n.01", "name": "virginal"}, + {"id": 12061, "synset": "viscometer.n.01", "name": "viscometer"}, + {"id": 12062, "synset": "viscose_rayon.n.01", "name": "viscose_rayon"}, + {"id": 12063, "synset": "vise.n.01", "name": "vise"}, + {"id": 12064, "synset": "visor.n.01", "name": "visor"}, + {"id": 12065, "synset": "visual_display_unit.n.01", "name": "visual_display_unit"}, + {"id": 12066, "synset": "vivarium.n.01", "name": "vivarium"}, + {"id": 12067, "synset": "viyella.n.01", "name": "Viyella"}, + {"id": 12068, "synset": "voile.n.01", "name": "voile"}, + {"id": 12069, "synset": "volleyball_net.n.01", "name": "volleyball_net"}, + {"id": 12070, "synset": "voltage_regulator.n.01", "name": "voltage_regulator"}, + {"id": 12071, "synset": "voltaic_cell.n.01", "name": "voltaic_cell"}, + {"id": 12072, "synset": "voltaic_pile.n.01", "name": "voltaic_pile"}, + {"id": 12073, "synset": "voltmeter.n.01", "name": "voltmeter"}, + {"id": 12074, "synset": "vomitory.n.01", "name": "vomitory"}, + {"id": 12075, "synset": "von_neumann_machine.n.01", "name": "von_Neumann_machine"}, + {"id": 12076, "synset": "voting_booth.n.01", "name": "voting_booth"}, + {"id": 12077, "synset": "voting_machine.n.01", "name": "voting_machine"}, + {"id": 12078, "synset": "voussoir.n.01", "name": "voussoir"}, + {"id": 12079, "synset": "vox_angelica.n.01", "name": "vox_angelica"}, + {"id": 12080, "synset": "vox_humana.n.01", "name": "vox_humana"}, + {"id": 12081, "synset": "waders.n.01", "name": "waders"}, + {"id": 12082, "synset": "wading_pool.n.01", "name": "wading_pool"}, + {"id": 12083, "synset": "wagon.n.04", "name": "wagon"}, + {"id": 12084, "synset": "wagon_tire.n.01", "name": "wagon_tire"}, + {"id": 12085, "synset": "wain.n.03", "name": "wain"}, + {"id": 12086, "synset": "wainscot.n.02", "name": "wainscot"}, + {"id": 12087, "synset": "wainscoting.n.01", "name": "wainscoting"}, + {"id": 12088, "synset": "waist_pack.n.01", "name": "waist_pack"}, + {"id": 12089, "synset": "walker.n.06", "name": "walker"}, + {"id": 12090, "synset": "walker.n.05", "name": "walker"}, + {"id": 12091, "synset": "walker.n.04", "name": "walker"}, + {"id": 12092, "synset": "walkie-talkie.n.01", "name": "walkie-talkie"}, + {"id": 12093, "synset": "walk-in.n.04", "name": "walk-in"}, + {"id": 12094, "synset": "walking_shoe.n.01", "name": "walking_shoe"}, + {"id": 12095, "synset": "walkman.n.01", "name": "Walkman"}, + {"id": 12096, "synset": "walk-up_apartment.n.01", "name": "walk-up_apartment"}, + {"id": 12097, "synset": "wall.n.01", "name": "wall"}, + {"id": 12098, "synset": "wall.n.07", "name": "wall"}, + {"id": 12099, "synset": "wall_tent.n.01", "name": "wall_tent"}, + {"id": 12100, "synset": "wall_unit.n.01", "name": "wall_unit"}, + {"id": 12101, "synset": "wand.n.01", "name": "wand"}, + {"id": 12102, "synset": "wankel_engine.n.01", "name": "Wankel_engine"}, + {"id": 12103, "synset": "ward.n.03", "name": "ward"}, + {"id": 12104, "synset": "wardroom.n.01", "name": "wardroom"}, + {"id": 12105, "synset": "warehouse.n.01", "name": "warehouse"}, + {"id": 12106, "synset": "warming_pan.n.01", "name": "warming_pan"}, + {"id": 12107, "synset": "war_paint.n.02", "name": "war_paint"}, + {"id": 12108, "synset": "warplane.n.01", "name": "warplane"}, + {"id": 12109, "synset": "war_room.n.01", "name": "war_room"}, + {"id": 12110, "synset": "warship.n.01", "name": "warship"}, + {"id": 12111, "synset": "wash.n.01", "name": "wash"}, + {"id": 12112, "synset": "wash-and-wear.n.01", "name": "wash-and-wear"}, + {"id": 12113, "synset": "washbasin.n.02", "name": "washbasin"}, + {"id": 12114, "synset": "washboard.n.02", "name": "washboard"}, + {"id": 12115, "synset": "washboard.n.01", "name": "washboard"}, + {"id": 12116, "synset": "washer.n.02", "name": "washer"}, + {"id": 12117, "synset": "washhouse.n.01", "name": "washhouse"}, + {"id": 12118, "synset": "washroom.n.01", "name": "washroom"}, + {"id": 12119, "synset": "washstand.n.01", "name": "washstand"}, + {"id": 12120, "synset": "washtub.n.01", "name": "washtub"}, + {"id": 12121, "synset": "wastepaper_basket.n.01", "name": "wastepaper_basket"}, + {"id": 12122, "synset": "watch_cap.n.01", "name": "watch_cap"}, + {"id": 12123, "synset": "watch_case.n.01", "name": "watch_case"}, + {"id": 12124, "synset": "watch_glass.n.01", "name": "watch_glass"}, + {"id": 12125, "synset": "watchtower.n.01", "name": "watchtower"}, + {"id": 12126, "synset": "water-base_paint.n.01", "name": "water-base_paint"}, + {"id": 12127, "synset": "water_bed.n.01", "name": "water_bed"}, + {"id": 12128, "synset": "water_butt.n.01", "name": "water_butt"}, + {"id": 12129, "synset": "water_cart.n.01", "name": "water_cart"}, + {"id": 12130, "synset": "water_chute.n.01", "name": "water_chute"}, + {"id": 12131, "synset": "water_closet.n.01", "name": "water_closet"}, + {"id": 12132, "synset": "watercolor.n.02", "name": "watercolor"}, + { + "id": 12133, + "synset": "water-cooled_reactor.n.01", + "name": "water-cooled_reactor", + }, + {"id": 12134, "synset": "water_filter.n.01", "name": "water_filter"}, + {"id": 12135, "synset": "water_gauge.n.01", "name": "water_gauge"}, + {"id": 12136, "synset": "water_glass.n.02", "name": "water_glass"}, + {"id": 12137, "synset": "water_hazard.n.01", "name": "water_hazard"}, + {"id": 12138, "synset": "watering_cart.n.01", "name": "watering_cart"}, + {"id": 12139, "synset": "water_jacket.n.01", "name": "water_jacket"}, + {"id": 12140, "synset": "water_jump.n.01", "name": "water_jump"}, + {"id": 12141, "synset": "water_level.n.04", "name": "water_level"}, + {"id": 12142, "synset": "water_meter.n.01", "name": "water_meter"}, + {"id": 12143, "synset": "water_mill.n.01", "name": "water_mill"}, + {"id": 12144, "synset": "waterproof.n.01", "name": "waterproof"}, + {"id": 12145, "synset": "waterproofing.n.02", "name": "waterproofing"}, + {"id": 12146, "synset": "water_pump.n.01", "name": "water_pump"}, + {"id": 12147, "synset": "waterspout.n.03", "name": "waterspout"}, + {"id": 12148, "synset": "water_wagon.n.01", "name": "water_wagon"}, + {"id": 12149, "synset": "waterwheel.n.02", "name": "waterwheel"}, + {"id": 12150, "synset": "waterwheel.n.01", "name": "waterwheel"}, + {"id": 12151, "synset": "water_wings.n.01", "name": "water_wings"}, + {"id": 12152, "synset": "waterworks.n.02", "name": "waterworks"}, + {"id": 12153, "synset": "wattmeter.n.01", "name": "wattmeter"}, + {"id": 12154, "synset": "waxwork.n.02", "name": "waxwork"}, + {"id": 12155, "synset": "ways.n.01", "name": "ways"}, + {"id": 12156, "synset": "weapon.n.01", "name": "weapon"}, + {"id": 12157, "synset": "weaponry.n.01", "name": "weaponry"}, + {"id": 12158, "synset": "weapons_carrier.n.01", "name": "weapons_carrier"}, + {"id": 12159, "synset": "weathercock.n.01", "name": "weathercock"}, + {"id": 12160, "synset": "weatherglass.n.01", "name": "weatherglass"}, + {"id": 12161, "synset": "weather_satellite.n.01", "name": "weather_satellite"}, + {"id": 12162, "synset": "weather_ship.n.01", "name": "weather_ship"}, + {"id": 12163, "synset": "web.n.02", "name": "web"}, + {"id": 12164, "synset": "web.n.06", "name": "web"}, + {"id": 12165, "synset": "webbing.n.03", "name": "webbing"}, + {"id": 12166, "synset": "wedge.n.06", "name": "wedge"}, + {"id": 12167, "synset": "wedge.n.05", "name": "wedge"}, + {"id": 12168, "synset": "wedgie.n.01", "name": "wedgie"}, + {"id": 12169, "synset": "wedgwood.n.02", "name": "Wedgwood"}, + {"id": 12170, "synset": "weeder.n.02", "name": "weeder"}, + {"id": 12171, "synset": "weeds.n.01", "name": "weeds"}, + {"id": 12172, "synset": "weekender.n.02", "name": "weekender"}, + {"id": 12173, "synset": "weighbridge.n.01", "name": "weighbridge"}, + {"id": 12174, "synset": "weight.n.02", "name": "weight"}, + {"id": 12175, "synset": "weir.n.01", "name": "weir"}, + {"id": 12176, "synset": "weir.n.02", "name": "weir"}, + {"id": 12177, "synset": "welcome_wagon.n.01", "name": "welcome_wagon"}, + {"id": 12178, "synset": "weld.n.03", "name": "weld"}, + {"id": 12179, "synset": "welder's_mask.n.01", "name": "welder's_mask"}, + {"id": 12180, "synset": "weldment.n.01", "name": "weldment"}, + {"id": 12181, "synset": "well.n.02", "name": "well"}, + {"id": 12182, "synset": "wellhead.n.02", "name": "wellhead"}, + {"id": 12183, "synset": "welt.n.02", "name": "welt"}, + {"id": 12184, "synset": "weston_cell.n.01", "name": "Weston_cell"}, + {"id": 12185, "synset": "wet_bar.n.01", "name": "wet_bar"}, + { + "id": 12186, + "synset": "wet-bulb_thermometer.n.01", + "name": "wet-bulb_thermometer", + }, + {"id": 12187, "synset": "wet_cell.n.01", "name": "wet_cell"}, + {"id": 12188, "synset": "wet_fly.n.01", "name": "wet_fly"}, + {"id": 12189, "synset": "whaleboat.n.01", "name": "whaleboat"}, + {"id": 12190, "synset": "whaler.n.02", "name": "whaler"}, + {"id": 12191, "synset": "whaling_gun.n.01", "name": "whaling_gun"}, + {"id": 12192, "synset": "wheel.n.04", "name": "wheel"}, + {"id": 12193, "synset": "wheel_and_axle.n.01", "name": "wheel_and_axle"}, + {"id": 12194, "synset": "wheeled_vehicle.n.01", "name": "wheeled_vehicle"}, + {"id": 12195, "synset": "wheelwork.n.01", "name": "wheelwork"}, + {"id": 12196, "synset": "wherry.n.02", "name": "wherry"}, + {"id": 12197, "synset": "wherry.n.01", "name": "wherry"}, + {"id": 12198, "synset": "whetstone.n.01", "name": "whetstone"}, + {"id": 12199, "synset": "whiffletree.n.01", "name": "whiffletree"}, + {"id": 12200, "synset": "whip.n.01", "name": "whip"}, + {"id": 12201, "synset": "whipcord.n.02", "name": "whipcord"}, + {"id": 12202, "synset": "whipping_post.n.01", "name": "whipping_post"}, + {"id": 12203, "synset": "whipstitch.n.01", "name": "whipstitch"}, + {"id": 12204, "synset": "whirler.n.02", "name": "whirler"}, + {"id": 12205, "synset": "whisk.n.02", "name": "whisk"}, + {"id": 12206, "synset": "whisk.n.01", "name": "whisk"}, + {"id": 12207, "synset": "whiskey_bottle.n.01", "name": "whiskey_bottle"}, + {"id": 12208, "synset": "whiskey_jug.n.01", "name": "whiskey_jug"}, + {"id": 12209, "synset": "whispering_gallery.n.01", "name": "whispering_gallery"}, + {"id": 12210, "synset": "whistle.n.04", "name": "whistle"}, + {"id": 12211, "synset": "white.n.11", "name": "white"}, + {"id": 12212, "synset": "white_goods.n.01", "name": "white_goods"}, + {"id": 12213, "synset": "whitewash.n.02", "name": "whitewash"}, + {"id": 12214, "synset": "whorehouse.n.01", "name": "whorehouse"}, + {"id": 12215, "synset": "wick.n.02", "name": "wick"}, + {"id": 12216, "synset": "wicker.n.02", "name": "wicker"}, + {"id": 12217, "synset": "wicker_basket.n.01", "name": "wicker_basket"}, + {"id": 12218, "synset": "wicket.n.02", "name": "wicket"}, + {"id": 12219, "synset": "wicket.n.01", "name": "wicket"}, + {"id": 12220, "synset": "wickiup.n.01", "name": "wickiup"}, + {"id": 12221, "synset": "wide-angle_lens.n.01", "name": "wide-angle_lens"}, + {"id": 12222, "synset": "widebody_aircraft.n.01", "name": "widebody_aircraft"}, + {"id": 12223, "synset": "wide_wale.n.01", "name": "wide_wale"}, + {"id": 12224, "synset": "widow's_walk.n.01", "name": "widow's_walk"}, + {"id": 12225, "synset": "wiffle.n.01", "name": "Wiffle"}, + {"id": 12226, "synset": "wigwam.n.01", "name": "wigwam"}, + {"id": 12227, "synset": "wilton.n.01", "name": "Wilton"}, + {"id": 12228, "synset": "wimple.n.01", "name": "wimple"}, + {"id": 12229, "synset": "wincey.n.01", "name": "wincey"}, + {"id": 12230, "synset": "winceyette.n.01", "name": "winceyette"}, + {"id": 12231, "synset": "winch.n.01", "name": "winch"}, + {"id": 12232, "synset": "winchester.n.02", "name": "Winchester"}, + {"id": 12233, "synset": "windbreak.n.01", "name": "windbreak"}, + {"id": 12234, "synset": "winder.n.02", "name": "winder"}, + {"id": 12235, "synset": "wind_instrument.n.01", "name": "wind_instrument"}, + {"id": 12236, "synset": "windjammer.n.01", "name": "windjammer"}, + {"id": 12237, "synset": "windmill.n.02", "name": "windmill"}, + {"id": 12238, "synset": "window.n.01", "name": "window"}, + {"id": 12239, "synset": "window.n.08", "name": "window"}, + {"id": 12240, "synset": "window_blind.n.01", "name": "window_blind"}, + {"id": 12241, "synset": "window_envelope.n.01", "name": "window_envelope"}, + {"id": 12242, "synset": "window_frame.n.01", "name": "window_frame"}, + {"id": 12243, "synset": "window_screen.n.01", "name": "window_screen"}, + {"id": 12244, "synset": "window_seat.n.01", "name": "window_seat"}, + {"id": 12245, "synset": "window_shade.n.01", "name": "window_shade"}, + {"id": 12246, "synset": "windowsill.n.01", "name": "windowsill"}, + {"id": 12247, "synset": "windshield.n.01", "name": "windshield"}, + {"id": 12248, "synset": "windsor_chair.n.01", "name": "Windsor_chair"}, + {"id": 12249, "synset": "windsor_knot.n.01", "name": "Windsor_knot"}, + {"id": 12250, "synset": "windsor_tie.n.01", "name": "Windsor_tie"}, + {"id": 12251, "synset": "wind_tee.n.01", "name": "wind_tee"}, + {"id": 12252, "synset": "wind_tunnel.n.01", "name": "wind_tunnel"}, + {"id": 12253, "synset": "wind_turbine.n.01", "name": "wind_turbine"}, + {"id": 12254, "synset": "wine_bar.n.01", "name": "wine_bar"}, + {"id": 12255, "synset": "wine_cask.n.01", "name": "wine_cask"}, + {"id": 12256, "synset": "winepress.n.01", "name": "winepress"}, + {"id": 12257, "synset": "winery.n.01", "name": "winery"}, + {"id": 12258, "synset": "wineskin.n.01", "name": "wineskin"}, + {"id": 12259, "synset": "wing.n.02", "name": "wing"}, + {"id": 12260, "synset": "wing_chair.n.01", "name": "wing_chair"}, + {"id": 12261, "synset": "wing_nut.n.02", "name": "wing_nut"}, + {"id": 12262, "synset": "wing_tip.n.02", "name": "wing_tip"}, + {"id": 12263, "synset": "wing_tip.n.01", "name": "wing_tip"}, + {"id": 12264, "synset": "wiper.n.02", "name": "wiper"}, + {"id": 12265, "synset": "wiper_motor.n.01", "name": "wiper_motor"}, + {"id": 12266, "synset": "wire.n.01", "name": "wire"}, + {"id": 12267, "synset": "wire.n.02", "name": "wire"}, + {"id": 12268, "synset": "wire_cloth.n.01", "name": "wire_cloth"}, + {"id": 12269, "synset": "wire_cutter.n.01", "name": "wire_cutter"}, + {"id": 12270, "synset": "wire_gauge.n.01", "name": "wire_gauge"}, + { + "id": 12271, + "synset": "wireless_local_area_network.n.01", + "name": "wireless_local_area_network", + }, + {"id": 12272, "synset": "wire_matrix_printer.n.01", "name": "wire_matrix_printer"}, + {"id": 12273, "synset": "wire_recorder.n.01", "name": "wire_recorder"}, + {"id": 12274, "synset": "wire_stripper.n.01", "name": "wire_stripper"}, + {"id": 12275, "synset": "wirework.n.01", "name": "wirework"}, + {"id": 12276, "synset": "wiring.n.01", "name": "wiring"}, + {"id": 12277, "synset": "wishing_cap.n.01", "name": "wishing_cap"}, + {"id": 12278, "synset": "witness_box.n.01", "name": "witness_box"}, + {"id": 12279, "synset": "woman's_clothing.n.01", "name": "woman's_clothing"}, + {"id": 12280, "synset": "wood.n.08", "name": "wood"}, + {"id": 12281, "synset": "woodcarving.n.01", "name": "woodcarving"}, + {"id": 12282, "synset": "wood_chisel.n.01", "name": "wood_chisel"}, + {"id": 12283, "synset": "woodenware.n.01", "name": "woodenware"}, + {"id": 12284, "synset": "woodscrew.n.01", "name": "woodscrew"}, + {"id": 12285, "synset": "woodshed.n.01", "name": "woodshed"}, + {"id": 12286, "synset": "wood_vise.n.01", "name": "wood_vise"}, + {"id": 12287, "synset": "woodwind.n.01", "name": "woodwind"}, + {"id": 12288, "synset": "woof.n.01", "name": "woof"}, + {"id": 12289, "synset": "woofer.n.01", "name": "woofer"}, + {"id": 12290, "synset": "wool.n.01", "name": "wool"}, + {"id": 12291, "synset": "workbasket.n.01", "name": "workbasket"}, + {"id": 12292, "synset": "workbench.n.01", "name": "workbench"}, + {"id": 12293, "synset": "work-clothing.n.01", "name": "work-clothing"}, + {"id": 12294, "synset": "workhouse.n.02", "name": "workhouse"}, + {"id": 12295, "synset": "workhouse.n.01", "name": "workhouse"}, + {"id": 12296, "synset": "workpiece.n.01", "name": "workpiece"}, + {"id": 12297, "synset": "workroom.n.01", "name": "workroom"}, + {"id": 12298, "synset": "works.n.04", "name": "works"}, + {"id": 12299, "synset": "work-shirt.n.01", "name": "work-shirt"}, + {"id": 12300, "synset": "workstation.n.01", "name": "workstation"}, + {"id": 12301, "synset": "worktable.n.01", "name": "worktable"}, + {"id": 12302, "synset": "workwear.n.01", "name": "workwear"}, + {"id": 12303, "synset": "world_wide_web.n.01", "name": "World_Wide_Web"}, + {"id": 12304, "synset": "worm_fence.n.01", "name": "worm_fence"}, + {"id": 12305, "synset": "worm_gear.n.01", "name": "worm_gear"}, + {"id": 12306, "synset": "worm_wheel.n.01", "name": "worm_wheel"}, + {"id": 12307, "synset": "worsted.n.01", "name": "worsted"}, + {"id": 12308, "synset": "worsted.n.02", "name": "worsted"}, + {"id": 12309, "synset": "wrap.n.01", "name": "wrap"}, + {"id": 12310, "synset": "wraparound.n.01", "name": "wraparound"}, + {"id": 12311, "synset": "wrapping.n.01", "name": "wrapping"}, + {"id": 12312, "synset": "wreck.n.04", "name": "wreck"}, + {"id": 12313, "synset": "wrestling_mat.n.01", "name": "wrestling_mat"}, + {"id": 12314, "synset": "wringer.n.01", "name": "wringer"}, + {"id": 12315, "synset": "wrist_pad.n.01", "name": "wrist_pad"}, + {"id": 12316, "synset": "wrist_pin.n.01", "name": "wrist_pin"}, + {"id": 12317, "synset": "wristwatch.n.01", "name": "wristwatch"}, + {"id": 12318, "synset": "writing_arm.n.01", "name": "writing_arm"}, + {"id": 12319, "synset": "writing_desk.n.02", "name": "writing_desk"}, + {"id": 12320, "synset": "writing_desk.n.01", "name": "writing_desk"}, + {"id": 12321, "synset": "writing_implement.n.01", "name": "writing_implement"}, + {"id": 12322, "synset": "xerographic_printer.n.01", "name": "xerographic_printer"}, + {"id": 12323, "synset": "xerox.n.02", "name": "Xerox"}, + {"id": 12324, "synset": "x-ray_film.n.01", "name": "X-ray_film"}, + {"id": 12325, "synset": "x-ray_machine.n.01", "name": "X-ray_machine"}, + {"id": 12326, "synset": "x-ray_tube.n.01", "name": "X-ray_tube"}, + {"id": 12327, "synset": "yacht_chair.n.01", "name": "yacht_chair"}, + {"id": 12328, "synset": "yagi.n.01", "name": "yagi"}, + {"id": 12329, "synset": "yard.n.09", "name": "yard"}, + {"id": 12330, "synset": "yard.n.08", "name": "yard"}, + {"id": 12331, "synset": "yardarm.n.01", "name": "yardarm"}, + {"id": 12332, "synset": "yard_marker.n.01", "name": "yard_marker"}, + {"id": 12333, "synset": "yardstick.n.02", "name": "yardstick"}, + {"id": 12334, "synset": "yarmulke.n.01", "name": "yarmulke"}, + {"id": 12335, "synset": "yashmak.n.01", "name": "yashmak"}, + {"id": 12336, "synset": "yataghan.n.01", "name": "yataghan"}, + {"id": 12337, "synset": "yawl.n.02", "name": "yawl"}, + {"id": 12338, "synset": "yawl.n.01", "name": "yawl"}, + {"id": 12339, "synset": "yoke.n.01", "name": "yoke"}, + {"id": 12340, "synset": "yoke.n.06", "name": "yoke"}, + {"id": 12341, "synset": "yurt.n.01", "name": "yurt"}, + {"id": 12342, "synset": "zamboni.n.01", "name": "Zamboni"}, + {"id": 12343, "synset": "zero.n.04", "name": "zero"}, + {"id": 12344, "synset": "ziggurat.n.01", "name": "ziggurat"}, + {"id": 12345, "synset": "zill.n.01", "name": "zill"}, + {"id": 12346, "synset": "zip_gun.n.01", "name": "zip_gun"}, + {"id": 12347, "synset": "zither.n.01", "name": "zither"}, + {"id": 12348, "synset": "zoot_suit.n.01", "name": "zoot_suit"}, + {"id": 12349, "synset": "shading.n.01", "name": "shading"}, + {"id": 12350, "synset": "grain.n.10", "name": "grain"}, + {"id": 12351, "synset": "wood_grain.n.01", "name": "wood_grain"}, + {"id": 12352, "synset": "graining.n.01", "name": "graining"}, + {"id": 12353, "synset": "marbleization.n.01", "name": "marbleization"}, + {"id": 12354, "synset": "light.n.07", "name": "light"}, + {"id": 12355, "synset": "aura.n.02", "name": "aura"}, + {"id": 12356, "synset": "sunniness.n.01", "name": "sunniness"}, + {"id": 12357, "synset": "glint.n.02", "name": "glint"}, + {"id": 12358, "synset": "opalescence.n.01", "name": "opalescence"}, + {"id": 12359, "synset": "polish.n.01", "name": "polish"}, + { + "id": 12360, + "synset": "primary_color_for_pigments.n.01", + "name": "primary_color_for_pigments", + }, + { + "id": 12361, + "synset": "primary_color_for_light.n.01", + "name": "primary_color_for_light", + }, + {"id": 12362, "synset": "colorlessness.n.01", "name": "colorlessness"}, + {"id": 12363, "synset": "mottle.n.01", "name": "mottle"}, + {"id": 12364, "synset": "achromia.n.01", "name": "achromia"}, + {"id": 12365, "synset": "shade.n.02", "name": "shade"}, + {"id": 12366, "synset": "chromatic_color.n.01", "name": "chromatic_color"}, + {"id": 12367, "synset": "black.n.01", "name": "black"}, + {"id": 12368, "synset": "coal_black.n.01", "name": "coal_black"}, + {"id": 12369, "synset": "alabaster.n.03", "name": "alabaster"}, + {"id": 12370, "synset": "bone.n.03", "name": "bone"}, + {"id": 12371, "synset": "gray.n.01", "name": "gray"}, + {"id": 12372, "synset": "ash_grey.n.01", "name": "ash_grey"}, + {"id": 12373, "synset": "charcoal.n.03", "name": "charcoal"}, + {"id": 12374, "synset": "sanguine.n.01", "name": "sanguine"}, + {"id": 12375, "synset": "turkey_red.n.01", "name": "Turkey_red"}, + {"id": 12376, "synset": "crimson.n.01", "name": "crimson"}, + {"id": 12377, "synset": "dark_red.n.01", "name": "dark_red"}, + {"id": 12378, "synset": "claret.n.01", "name": "claret"}, + {"id": 12379, "synset": "fuschia.n.01", "name": "fuschia"}, + {"id": 12380, "synset": "maroon.n.02", "name": "maroon"}, + {"id": 12381, "synset": "orange.n.02", "name": "orange"}, + {"id": 12382, "synset": "reddish_orange.n.01", "name": "reddish_orange"}, + {"id": 12383, "synset": "yellow.n.01", "name": "yellow"}, + {"id": 12384, "synset": "gamboge.n.02", "name": "gamboge"}, + {"id": 12385, "synset": "pale_yellow.n.01", "name": "pale_yellow"}, + {"id": 12386, "synset": "green.n.01", "name": "green"}, + {"id": 12387, "synset": "greenishness.n.01", "name": "greenishness"}, + {"id": 12388, "synset": "sea_green.n.01", "name": "sea_green"}, + {"id": 12389, "synset": "sage_green.n.01", "name": "sage_green"}, + {"id": 12390, "synset": "bottle_green.n.01", "name": "bottle_green"}, + {"id": 12391, "synset": "emerald.n.03", "name": "emerald"}, + {"id": 12392, "synset": "olive_green.n.01", "name": "olive_green"}, + {"id": 12393, "synset": "jade_green.n.01", "name": "jade_green"}, + {"id": 12394, "synset": "blue.n.01", "name": "blue"}, + {"id": 12395, "synset": "azure.n.01", "name": "azure"}, + {"id": 12396, "synset": "steel_blue.n.01", "name": "steel_blue"}, + {"id": 12397, "synset": "greenish_blue.n.01", "name": "greenish_blue"}, + {"id": 12398, "synset": "purplish_blue.n.01", "name": "purplish_blue"}, + {"id": 12399, "synset": "purple.n.01", "name": "purple"}, + {"id": 12400, "synset": "tyrian_purple.n.02", "name": "Tyrian_purple"}, + {"id": 12401, "synset": "indigo.n.03", "name": "indigo"}, + {"id": 12402, "synset": "lavender.n.02", "name": "lavender"}, + {"id": 12403, "synset": "reddish_purple.n.01", "name": "reddish_purple"}, + {"id": 12404, "synset": "pink.n.01", "name": "pink"}, + {"id": 12405, "synset": "carnation.n.02", "name": "carnation"}, + {"id": 12406, "synset": "rose.n.03", "name": "rose"}, + {"id": 12407, "synset": "chestnut.n.04", "name": "chestnut"}, + {"id": 12408, "synset": "chocolate.n.03", "name": "chocolate"}, + {"id": 12409, "synset": "light_brown.n.01", "name": "light_brown"}, + {"id": 12410, "synset": "tan.n.02", "name": "tan"}, + {"id": 12411, "synset": "beige.n.01", "name": "beige"}, + {"id": 12412, "synset": "reddish_brown.n.01", "name": "reddish_brown"}, + {"id": 12413, "synset": "brick_red.n.01", "name": "brick_red"}, + {"id": 12414, "synset": "copper.n.04", "name": "copper"}, + {"id": 12415, "synset": "indian_red.n.03", "name": "Indian_red"}, + {"id": 12416, "synset": "puce.n.01", "name": "puce"}, + {"id": 12417, "synset": "olive.n.05", "name": "olive"}, + {"id": 12418, "synset": "ultramarine.n.02", "name": "ultramarine"}, + {"id": 12419, "synset": "complementary_color.n.01", "name": "complementary_color"}, + {"id": 12420, "synset": "pigmentation.n.02", "name": "pigmentation"}, + {"id": 12421, "synset": "complexion.n.01", "name": "complexion"}, + {"id": 12422, "synset": "ruddiness.n.01", "name": "ruddiness"}, + {"id": 12423, "synset": "nonsolid_color.n.01", "name": "nonsolid_color"}, + { + "id": 12424, + "synset": "aposematic_coloration.n.01", + "name": "aposematic_coloration", + }, + {"id": 12425, "synset": "cryptic_coloration.n.01", "name": "cryptic_coloration"}, + {"id": 12426, "synset": "ring.n.01", "name": "ring"}, + {"id": 12427, "synset": "center_of_curvature.n.01", "name": "center_of_curvature"}, + {"id": 12428, "synset": "cadaver.n.01", "name": "cadaver"}, + {"id": 12429, "synset": "mandibular_notch.n.01", "name": "mandibular_notch"}, + {"id": 12430, "synset": "rib.n.05", "name": "rib"}, + {"id": 12431, "synset": "skin.n.01", "name": "skin"}, + {"id": 12432, "synset": "skin_graft.n.01", "name": "skin_graft"}, + {"id": 12433, "synset": "epidermal_cell.n.01", "name": "epidermal_cell"}, + {"id": 12434, "synset": "melanocyte.n.01", "name": "melanocyte"}, + {"id": 12435, "synset": "prickle_cell.n.01", "name": "prickle_cell"}, + {"id": 12436, "synset": "columnar_cell.n.01", "name": "columnar_cell"}, + {"id": 12437, "synset": "spongioblast.n.01", "name": "spongioblast"}, + {"id": 12438, "synset": "squamous_cell.n.01", "name": "squamous_cell"}, + {"id": 12439, "synset": "amyloid_plaque.n.01", "name": "amyloid_plaque"}, + {"id": 12440, "synset": "dental_plaque.n.01", "name": "dental_plaque"}, + {"id": 12441, "synset": "macule.n.01", "name": "macule"}, + {"id": 12442, "synset": "freckle.n.01", "name": "freckle"}, + {"id": 12443, "synset": "bouffant.n.01", "name": "bouffant"}, + {"id": 12444, "synset": "sausage_curl.n.01", "name": "sausage_curl"}, + {"id": 12445, "synset": "forelock.n.01", "name": "forelock"}, + {"id": 12446, "synset": "spit_curl.n.01", "name": "spit_curl"}, + {"id": 12447, "synset": "pigtail.n.01", "name": "pigtail"}, + {"id": 12448, "synset": "pageboy.n.02", "name": "pageboy"}, + {"id": 12449, "synset": "pompadour.n.02", "name": "pompadour"}, + {"id": 12450, "synset": "thatch.n.01", "name": "thatch"}, + {"id": 12451, "synset": "soup-strainer.n.01", "name": "soup-strainer"}, + {"id": 12452, "synset": "mustachio.n.01", "name": "mustachio"}, + {"id": 12453, "synset": "walrus_mustache.n.01", "name": "walrus_mustache"}, + {"id": 12454, "synset": "stubble.n.02", "name": "stubble"}, + {"id": 12455, "synset": "vandyke_beard.n.01", "name": "vandyke_beard"}, + {"id": 12456, "synset": "soul_patch.n.01", "name": "soul_patch"}, + {"id": 12457, "synset": "esophageal_smear.n.01", "name": "esophageal_smear"}, + {"id": 12458, "synset": "paraduodenal_smear.n.01", "name": "paraduodenal_smear"}, + {"id": 12459, "synset": "specimen.n.02", "name": "specimen"}, + {"id": 12460, "synset": "punctum.n.01", "name": "punctum"}, + {"id": 12461, "synset": "glenoid_fossa.n.02", "name": "glenoid_fossa"}, + {"id": 12462, "synset": "diastema.n.01", "name": "diastema"}, + {"id": 12463, "synset": "marrow.n.01", "name": "marrow"}, + {"id": 12464, "synset": "mouth.n.01", "name": "mouth"}, + {"id": 12465, "synset": "canthus.n.01", "name": "canthus"}, + {"id": 12466, "synset": "milk.n.02", "name": "milk"}, + {"id": 12467, "synset": "mother's_milk.n.01", "name": "mother's_milk"}, + {"id": 12468, "synset": "colostrum.n.01", "name": "colostrum"}, + {"id": 12469, "synset": "vein.n.01", "name": "vein"}, + {"id": 12470, "synset": "ganglion_cell.n.01", "name": "ganglion_cell"}, + {"id": 12471, "synset": "x_chromosome.n.01", "name": "X_chromosome"}, + {"id": 12472, "synset": "embryonic_cell.n.01", "name": "embryonic_cell"}, + {"id": 12473, "synset": "myeloblast.n.01", "name": "myeloblast"}, + {"id": 12474, "synset": "sideroblast.n.01", "name": "sideroblast"}, + {"id": 12475, "synset": "osteocyte.n.01", "name": "osteocyte"}, + {"id": 12476, "synset": "megalocyte.n.01", "name": "megalocyte"}, + {"id": 12477, "synset": "leukocyte.n.01", "name": "leukocyte"}, + {"id": 12478, "synset": "histiocyte.n.01", "name": "histiocyte"}, + {"id": 12479, "synset": "fixed_phagocyte.n.01", "name": "fixed_phagocyte"}, + {"id": 12480, "synset": "lymphocyte.n.01", "name": "lymphocyte"}, + {"id": 12481, "synset": "monoblast.n.01", "name": "monoblast"}, + {"id": 12482, "synset": "neutrophil.n.01", "name": "neutrophil"}, + {"id": 12483, "synset": "microphage.n.01", "name": "microphage"}, + {"id": 12484, "synset": "sickle_cell.n.01", "name": "sickle_cell"}, + {"id": 12485, "synset": "siderocyte.n.01", "name": "siderocyte"}, + {"id": 12486, "synset": "spherocyte.n.01", "name": "spherocyte"}, + {"id": 12487, "synset": "ootid.n.01", "name": "ootid"}, + {"id": 12488, "synset": "oocyte.n.01", "name": "oocyte"}, + {"id": 12489, "synset": "spermatid.n.01", "name": "spermatid"}, + {"id": 12490, "synset": "leydig_cell.n.01", "name": "Leydig_cell"}, + { + "id": 12491, + "synset": "striated_muscle_cell.n.01", + "name": "striated_muscle_cell", + }, + {"id": 12492, "synset": "smooth_muscle_cell.n.01", "name": "smooth_muscle_cell"}, + {"id": 12493, "synset": "ranvier's_nodes.n.01", "name": "Ranvier's_nodes"}, + {"id": 12494, "synset": "neuroglia.n.01", "name": "neuroglia"}, + {"id": 12495, "synset": "astrocyte.n.01", "name": "astrocyte"}, + { + "id": 12496, + "synset": "protoplasmic_astrocyte.n.01", + "name": "protoplasmic_astrocyte", + }, + {"id": 12497, "synset": "oligodendrocyte.n.01", "name": "oligodendrocyte"}, + {"id": 12498, "synset": "proprioceptor.n.01", "name": "proprioceptor"}, + {"id": 12499, "synset": "dendrite.n.01", "name": "dendrite"}, + {"id": 12500, "synset": "sensory_fiber.n.01", "name": "sensory_fiber"}, + {"id": 12501, "synset": "subarachnoid_space.n.01", "name": "subarachnoid_space"}, + {"id": 12502, "synset": "cerebral_cortex.n.01", "name": "cerebral_cortex"}, + {"id": 12503, "synset": "renal_cortex.n.01", "name": "renal_cortex"}, + {"id": 12504, "synset": "prepuce.n.02", "name": "prepuce"}, + {"id": 12505, "synset": "head.n.01", "name": "head"}, + {"id": 12506, "synset": "scalp.n.01", "name": "scalp"}, + {"id": 12507, "synset": "frontal_eminence.n.01", "name": "frontal_eminence"}, + {"id": 12508, "synset": "suture.n.01", "name": "suture"}, + {"id": 12509, "synset": "foramen_magnum.n.01", "name": "foramen_magnum"}, + { + "id": 12510, + "synset": "esophagogastric_junction.n.01", + "name": "esophagogastric_junction", + }, + {"id": 12511, "synset": "heel.n.02", "name": "heel"}, + {"id": 12512, "synset": "cuticle.n.01", "name": "cuticle"}, + {"id": 12513, "synset": "hangnail.n.01", "name": "hangnail"}, + {"id": 12514, "synset": "exoskeleton.n.01", "name": "exoskeleton"}, + {"id": 12515, "synset": "abdominal_wall.n.01", "name": "abdominal_wall"}, + {"id": 12516, "synset": "lemon.n.04", "name": "lemon"}, + {"id": 12517, "synset": "coordinate_axis.n.01", "name": "coordinate_axis"}, + {"id": 12518, "synset": "landscape.n.04", "name": "landscape"}, + {"id": 12519, "synset": "medium.n.01", "name": "medium"}, + {"id": 12520, "synset": "vehicle.n.02", "name": "vehicle"}, + {"id": 12521, "synset": "paper.n.04", "name": "paper"}, + {"id": 12522, "synset": "channel.n.01", "name": "channel"}, + {"id": 12523, "synset": "film.n.02", "name": "film"}, + {"id": 12524, "synset": "silver_screen.n.01", "name": "silver_screen"}, + {"id": 12525, "synset": "free_press.n.01", "name": "free_press"}, + {"id": 12526, "synset": "press.n.02", "name": "press"}, + {"id": 12527, "synset": "print_media.n.01", "name": "print_media"}, + {"id": 12528, "synset": "storage_medium.n.01", "name": "storage_medium"}, + { + "id": 12529, + "synset": "magnetic_storage_medium.n.01", + "name": "magnetic_storage_medium", + }, + {"id": 12530, "synset": "journalism.n.01", "name": "journalism"}, + {"id": 12531, "synset": "fleet_street.n.02", "name": "Fleet_Street"}, + {"id": 12532, "synset": "photojournalism.n.01", "name": "photojournalism"}, + {"id": 12533, "synset": "news_photography.n.01", "name": "news_photography"}, + {"id": 12534, "synset": "rotogravure.n.02", "name": "rotogravure"}, + {"id": 12535, "synset": "daily.n.01", "name": "daily"}, + {"id": 12536, "synset": "gazette.n.01", "name": "gazette"}, + {"id": 12537, "synset": "school_newspaper.n.01", "name": "school_newspaper"}, + {"id": 12538, "synset": "tabloid.n.02", "name": "tabloid"}, + {"id": 12539, "synset": "yellow_journalism.n.01", "name": "yellow_journalism"}, + {"id": 12540, "synset": "telecommunication.n.01", "name": "telecommunication"}, + {"id": 12541, "synset": "telephone.n.02", "name": "telephone"}, + {"id": 12542, "synset": "voice_mail.n.01", "name": "voice_mail"}, + {"id": 12543, "synset": "call.n.01", "name": "call"}, + {"id": 12544, "synset": "call-back.n.01", "name": "call-back"}, + {"id": 12545, "synset": "collect_call.n.01", "name": "collect_call"}, + {"id": 12546, "synset": "call_forwarding.n.01", "name": "call_forwarding"}, + {"id": 12547, "synset": "call-in.n.01", "name": "call-in"}, + {"id": 12548, "synset": "call_waiting.n.01", "name": "call_waiting"}, + {"id": 12549, "synset": "crank_call.n.01", "name": "crank_call"}, + {"id": 12550, "synset": "local_call.n.01", "name": "local_call"}, + {"id": 12551, "synset": "long_distance.n.01", "name": "long_distance"}, + {"id": 12552, "synset": "toll_call.n.01", "name": "toll_call"}, + {"id": 12553, "synset": "wake-up_call.n.02", "name": "wake-up_call"}, + {"id": 12554, "synset": "three-way_calling.n.01", "name": "three-way_calling"}, + {"id": 12555, "synset": "telegraphy.n.01", "name": "telegraphy"}, + {"id": 12556, "synset": "cable.n.01", "name": "cable"}, + {"id": 12557, "synset": "wireless.n.02", "name": "wireless"}, + {"id": 12558, "synset": "radiotelegraph.n.01", "name": "radiotelegraph"}, + {"id": 12559, "synset": "radiotelephone.n.01", "name": "radiotelephone"}, + {"id": 12560, "synset": "broadcasting.n.02", "name": "broadcasting"}, + {"id": 12561, "synset": "rediffusion.n.01", "name": "Rediffusion"}, + {"id": 12562, "synset": "multiplex.n.01", "name": "multiplex"}, + {"id": 12563, "synset": "radio.n.01", "name": "radio"}, + {"id": 12564, "synset": "television.n.01", "name": "television"}, + {"id": 12565, "synset": "cable_television.n.01", "name": "cable_television"}, + { + "id": 12566, + "synset": "high-definition_television.n.01", + "name": "high-definition_television", + }, + {"id": 12567, "synset": "reception.n.03", "name": "reception"}, + {"id": 12568, "synset": "signal_detection.n.01", "name": "signal_detection"}, + {"id": 12569, "synset": "hakham.n.01", "name": "Hakham"}, + {"id": 12570, "synset": "web_site.n.01", "name": "web_site"}, + {"id": 12571, "synset": "chat_room.n.01", "name": "chat_room"}, + {"id": 12572, "synset": "portal_site.n.01", "name": "portal_site"}, + {"id": 12573, "synset": "jotter.n.01", "name": "jotter"}, + {"id": 12574, "synset": "breviary.n.01", "name": "breviary"}, + {"id": 12575, "synset": "wordbook.n.01", "name": "wordbook"}, + {"id": 12576, "synset": "desk_dictionary.n.01", "name": "desk_dictionary"}, + {"id": 12577, "synset": "reckoner.n.02", "name": "reckoner"}, + {"id": 12578, "synset": "document.n.01", "name": "document"}, + {"id": 12579, "synset": "album.n.01", "name": "album"}, + {"id": 12580, "synset": "concept_album.n.01", "name": "concept_album"}, + {"id": 12581, "synset": "rock_opera.n.01", "name": "rock_opera"}, + {"id": 12582, "synset": "tribute_album.n.01", "name": "tribute_album"}, + {"id": 12583, "synset": "magazine.n.01", "name": "magazine"}, + {"id": 12584, "synset": "colour_supplement.n.01", "name": "colour_supplement"}, + {"id": 12585, "synset": "news_magazine.n.01", "name": "news_magazine"}, + {"id": 12586, "synset": "pulp.n.04", "name": "pulp"}, + {"id": 12587, "synset": "slick.n.02", "name": "slick"}, + {"id": 12588, "synset": "trade_magazine.n.01", "name": "trade_magazine"}, + {"id": 12589, "synset": "movie.n.01", "name": "movie"}, + {"id": 12590, "synset": "outtake.n.01", "name": "outtake"}, + {"id": 12591, "synset": "shoot-'em-up.n.01", "name": "shoot-'em-up"}, + {"id": 12592, "synset": "spaghetti_western.n.01", "name": "spaghetti_Western"}, + {"id": 12593, "synset": "encyclical.n.01", "name": "encyclical"}, + {"id": 12594, "synset": "crossword_puzzle.n.01", "name": "crossword_puzzle"}, + {"id": 12595, "synset": "sign.n.02", "name": "sign"}, + {"id": 12596, "synset": "swastika.n.01", "name": "swastika"}, + {"id": 12597, "synset": "concert.n.01", "name": "concert"}, + {"id": 12598, "synset": "artwork.n.01", "name": "artwork"}, + {"id": 12599, "synset": "lobe.n.03", "name": "lobe"}, + {"id": 12600, "synset": "book_jacket.n.01", "name": "book_jacket"}, + {"id": 12601, "synset": "cairn.n.01", "name": "cairn"}, + {"id": 12602, "synset": "three-day_event.n.01", "name": "three-day_event"}, + {"id": 12603, "synset": "comfort_food.n.01", "name": "comfort_food"}, + {"id": 12604, "synset": "comestible.n.01", "name": "comestible"}, + {"id": 12605, "synset": "tuck.n.01", "name": "tuck"}, + {"id": 12606, "synset": "course.n.07", "name": "course"}, + {"id": 12607, "synset": "dainty.n.01", "name": "dainty"}, + {"id": 12608, "synset": "dish.n.02", "name": "dish"}, + {"id": 12609, "synset": "fast_food.n.01", "name": "fast_food"}, + {"id": 12610, "synset": "finger_food.n.01", "name": "finger_food"}, + {"id": 12611, "synset": "ingesta.n.01", "name": "ingesta"}, + {"id": 12612, "synset": "kosher.n.01", "name": "kosher"}, + {"id": 12613, "synset": "fare.n.04", "name": "fare"}, + {"id": 12614, "synset": "diet.n.03", "name": "diet"}, + {"id": 12615, "synset": "diet.n.01", "name": "diet"}, + {"id": 12616, "synset": "dietary.n.01", "name": "dietary"}, + {"id": 12617, "synset": "balanced_diet.n.01", "name": "balanced_diet"}, + {"id": 12618, "synset": "bland_diet.n.01", "name": "bland_diet"}, + {"id": 12619, "synset": "clear_liquid_diet.n.01", "name": "clear_liquid_diet"}, + {"id": 12620, "synset": "diabetic_diet.n.01", "name": "diabetic_diet"}, + {"id": 12621, "synset": "dietary_supplement.n.01", "name": "dietary_supplement"}, + { + "id": 12622, + "synset": "carbohydrate_loading.n.01", + "name": "carbohydrate_loading", + }, + {"id": 12623, "synset": "fad_diet.n.01", "name": "fad_diet"}, + {"id": 12624, "synset": "gluten-free_diet.n.01", "name": "gluten-free_diet"}, + {"id": 12625, "synset": "high-protein_diet.n.01", "name": "high-protein_diet"}, + {"id": 12626, "synset": "high-vitamin_diet.n.01", "name": "high-vitamin_diet"}, + {"id": 12627, "synset": "light_diet.n.01", "name": "light_diet"}, + {"id": 12628, "synset": "liquid_diet.n.01", "name": "liquid_diet"}, + {"id": 12629, "synset": "low-calorie_diet.n.01", "name": "low-calorie_diet"}, + {"id": 12630, "synset": "low-fat_diet.n.01", "name": "low-fat_diet"}, + {"id": 12631, "synset": "low-sodium_diet.n.01", "name": "low-sodium_diet"}, + {"id": 12632, "synset": "macrobiotic_diet.n.01", "name": "macrobiotic_diet"}, + {"id": 12633, "synset": "reducing_diet.n.01", "name": "reducing_diet"}, + {"id": 12634, "synset": "soft_diet.n.01", "name": "soft_diet"}, + {"id": 12635, "synset": "vegetarianism.n.01", "name": "vegetarianism"}, + {"id": 12636, "synset": "menu.n.02", "name": "menu"}, + {"id": 12637, "synset": "chow.n.02", "name": "chow"}, + {"id": 12638, "synset": "board.n.04", "name": "board"}, + {"id": 12639, "synset": "mess.n.04", "name": "mess"}, + {"id": 12640, "synset": "ration.n.01", "name": "ration"}, + {"id": 12641, "synset": "field_ration.n.01", "name": "field_ration"}, + {"id": 12642, "synset": "k_ration.n.01", "name": "K_ration"}, + {"id": 12643, "synset": "c-ration.n.01", "name": "C-ration"}, + {"id": 12644, "synset": "foodstuff.n.02", "name": "foodstuff"}, + {"id": 12645, "synset": "starches.n.01", "name": "starches"}, + {"id": 12646, "synset": "breadstuff.n.02", "name": "breadstuff"}, + {"id": 12647, "synset": "coloring.n.01", "name": "coloring"}, + {"id": 12648, "synset": "concentrate.n.02", "name": "concentrate"}, + {"id": 12649, "synset": "tomato_concentrate.n.01", "name": "tomato_concentrate"}, + {"id": 12650, "synset": "meal.n.03", "name": "meal"}, + {"id": 12651, "synset": "kibble.n.01", "name": "kibble"}, + {"id": 12652, "synset": "farina.n.01", "name": "farina"}, + {"id": 12653, "synset": "matzo_meal.n.01", "name": "matzo_meal"}, + {"id": 12654, "synset": "oatmeal.n.02", "name": "oatmeal"}, + {"id": 12655, "synset": "pea_flour.n.01", "name": "pea_flour"}, + {"id": 12656, "synset": "roughage.n.01", "name": "roughage"}, + {"id": 12657, "synset": "bran.n.02", "name": "bran"}, + {"id": 12658, "synset": "flour.n.01", "name": "flour"}, + {"id": 12659, "synset": "plain_flour.n.01", "name": "plain_flour"}, + {"id": 12660, "synset": "wheat_flour.n.01", "name": "wheat_flour"}, + {"id": 12661, "synset": "whole_wheat_flour.n.01", "name": "whole_wheat_flour"}, + {"id": 12662, "synset": "soybean_meal.n.01", "name": "soybean_meal"}, + {"id": 12663, "synset": "semolina.n.01", "name": "semolina"}, + {"id": 12664, "synset": "corn_gluten_feed.n.01", "name": "corn_gluten_feed"}, + {"id": 12665, "synset": "nutriment.n.01", "name": "nutriment"}, + {"id": 12666, "synset": "commissariat.n.01", "name": "commissariat"}, + {"id": 12667, "synset": "larder.n.01", "name": "larder"}, + {"id": 12668, "synset": "frozen_food.n.01", "name": "frozen_food"}, + {"id": 12669, "synset": "canned_food.n.01", "name": "canned_food"}, + {"id": 12670, "synset": "canned_meat.n.01", "name": "canned_meat"}, + {"id": 12671, "synset": "spam.n.01", "name": "Spam"}, + {"id": 12672, "synset": "dehydrated_food.n.01", "name": "dehydrated_food"}, + {"id": 12673, "synset": "square_meal.n.01", "name": "square_meal"}, + {"id": 12674, "synset": "meal.n.01", "name": "meal"}, + {"id": 12675, "synset": "potluck.n.01", "name": "potluck"}, + {"id": 12676, "synset": "refection.n.01", "name": "refection"}, + {"id": 12677, "synset": "refreshment.n.01", "name": "refreshment"}, + {"id": 12678, "synset": "breakfast.n.01", "name": "breakfast"}, + { + "id": 12679, + "synset": "continental_breakfast.n.01", + "name": "continental_breakfast", + }, + {"id": 12680, "synset": "brunch.n.01", "name": "brunch"}, + {"id": 12681, "synset": "lunch.n.01", "name": "lunch"}, + {"id": 12682, "synset": "business_lunch.n.01", "name": "business_lunch"}, + {"id": 12683, "synset": "high_tea.n.01", "name": "high_tea"}, + {"id": 12684, "synset": "tea.n.02", "name": "tea"}, + {"id": 12685, "synset": "dinner.n.01", "name": "dinner"}, + {"id": 12686, "synset": "supper.n.01", "name": "supper"}, + {"id": 12687, "synset": "buffet.n.02", "name": "buffet"}, + {"id": 12688, "synset": "picnic.n.03", "name": "picnic"}, + {"id": 12689, "synset": "cookout.n.01", "name": "cookout"}, + {"id": 12690, "synset": "barbecue.n.02", "name": "barbecue"}, + {"id": 12691, "synset": "clambake.n.01", "name": "clambake"}, + {"id": 12692, "synset": "fish_fry.n.01", "name": "fish_fry"}, + {"id": 12693, "synset": "bite.n.04", "name": "bite"}, + {"id": 12694, "synset": "nosh.n.01", "name": "nosh"}, + {"id": 12695, "synset": "nosh-up.n.01", "name": "nosh-up"}, + {"id": 12696, "synset": "ploughman's_lunch.n.01", "name": "ploughman's_lunch"}, + {"id": 12697, "synset": "coffee_break.n.01", "name": "coffee_break"}, + {"id": 12698, "synset": "banquet.n.02", "name": "banquet"}, + {"id": 12699, "synset": "entree.n.01", "name": "entree"}, + {"id": 12700, "synset": "piece_de_resistance.n.02", "name": "piece_de_resistance"}, + {"id": 12701, "synset": "plate.n.08", "name": "plate"}, + {"id": 12702, "synset": "adobo.n.01", "name": "adobo"}, + {"id": 12703, "synset": "side_dish.n.01", "name": "side_dish"}, + {"id": 12704, "synset": "special.n.02", "name": "special"}, + {"id": 12705, "synset": "chicken_casserole.n.01", "name": "chicken_casserole"}, + {"id": 12706, "synset": "chicken_cacciatore.n.01", "name": "chicken_cacciatore"}, + {"id": 12707, "synset": "antipasto.n.01", "name": "antipasto"}, + {"id": 12708, "synset": "appetizer.n.01", "name": "appetizer"}, + {"id": 12709, "synset": "canape.n.01", "name": "canape"}, + {"id": 12710, "synset": "cocktail.n.02", "name": "cocktail"}, + {"id": 12711, "synset": "fruit_cocktail.n.01", "name": "fruit_cocktail"}, + {"id": 12712, "synset": "crab_cocktail.n.01", "name": "crab_cocktail"}, + {"id": 12713, "synset": "shrimp_cocktail.n.01", "name": "shrimp_cocktail"}, + {"id": 12714, "synset": "hors_d'oeuvre.n.01", "name": "hors_d'oeuvre"}, + {"id": 12715, "synset": "relish.n.02", "name": "relish"}, + {"id": 12716, "synset": "dip.n.04", "name": "dip"}, + {"id": 12717, "synset": "bean_dip.n.01", "name": "bean_dip"}, + {"id": 12718, "synset": "cheese_dip.n.01", "name": "cheese_dip"}, + {"id": 12719, "synset": "clam_dip.n.01", "name": "clam_dip"}, + {"id": 12720, "synset": "guacamole.n.01", "name": "guacamole"}, + {"id": 12721, "synset": "soup_du_jour.n.01", "name": "soup_du_jour"}, + {"id": 12722, "synset": "alphabet_soup.n.02", "name": "alphabet_soup"}, + {"id": 12723, "synset": "consomme.n.01", "name": "consomme"}, + {"id": 12724, "synset": "madrilene.n.01", "name": "madrilene"}, + {"id": 12725, "synset": "bisque.n.01", "name": "bisque"}, + {"id": 12726, "synset": "borsch.n.01", "name": "borsch"}, + {"id": 12727, "synset": "broth.n.02", "name": "broth"}, + {"id": 12728, "synset": "barley_water.n.01", "name": "barley_water"}, + {"id": 12729, "synset": "bouillon.n.01", "name": "bouillon"}, + {"id": 12730, "synset": "beef_broth.n.01", "name": "beef_broth"}, + {"id": 12731, "synset": "chicken_broth.n.01", "name": "chicken_broth"}, + {"id": 12732, "synset": "broth.n.01", "name": "broth"}, + {"id": 12733, "synset": "stock_cube.n.01", "name": "stock_cube"}, + {"id": 12734, "synset": "chicken_soup.n.01", "name": "chicken_soup"}, + {"id": 12735, "synset": "cock-a-leekie.n.01", "name": "cock-a-leekie"}, + {"id": 12736, "synset": "gazpacho.n.01", "name": "gazpacho"}, + {"id": 12737, "synset": "gumbo.n.04", "name": "gumbo"}, + {"id": 12738, "synset": "julienne.n.02", "name": "julienne"}, + {"id": 12739, "synset": "marmite.n.01", "name": "marmite"}, + {"id": 12740, "synset": "mock_turtle_soup.n.01", "name": "mock_turtle_soup"}, + {"id": 12741, "synset": "mulligatawny.n.01", "name": "mulligatawny"}, + {"id": 12742, "synset": "oxtail_soup.n.01", "name": "oxtail_soup"}, + {"id": 12743, "synset": "pea_soup.n.01", "name": "pea_soup"}, + {"id": 12744, "synset": "pepper_pot.n.01", "name": "pepper_pot"}, + {"id": 12745, "synset": "petite_marmite.n.01", "name": "petite_marmite"}, + {"id": 12746, "synset": "potage.n.01", "name": "potage"}, + {"id": 12747, "synset": "pottage.n.01", "name": "pottage"}, + {"id": 12748, "synset": "turtle_soup.n.01", "name": "turtle_soup"}, + {"id": 12749, "synset": "eggdrop_soup.n.01", "name": "eggdrop_soup"}, + {"id": 12750, "synset": "chowder.n.01", "name": "chowder"}, + {"id": 12751, "synset": "corn_chowder.n.01", "name": "corn_chowder"}, + {"id": 12752, "synset": "clam_chowder.n.01", "name": "clam_chowder"}, + { + "id": 12753, + "synset": "manhattan_clam_chowder.n.01", + "name": "Manhattan_clam_chowder", + }, + { + "id": 12754, + "synset": "new_england_clam_chowder.n.01", + "name": "New_England_clam_chowder", + }, + {"id": 12755, "synset": "fish_chowder.n.01", "name": "fish_chowder"}, + {"id": 12756, "synset": "won_ton.n.02", "name": "won_ton"}, + {"id": 12757, "synset": "split-pea_soup.n.01", "name": "split-pea_soup"}, + {"id": 12758, "synset": "green_pea_soup.n.01", "name": "green_pea_soup"}, + {"id": 12759, "synset": "lentil_soup.n.01", "name": "lentil_soup"}, + {"id": 12760, "synset": "scotch_broth.n.01", "name": "Scotch_broth"}, + {"id": 12761, "synset": "vichyssoise.n.01", "name": "vichyssoise"}, + {"id": 12762, "synset": "bigos.n.01", "name": "bigos"}, + {"id": 12763, "synset": "brunswick_stew.n.01", "name": "Brunswick_stew"}, + {"id": 12764, "synset": "burgoo.n.03", "name": "burgoo"}, + {"id": 12765, "synset": "burgoo.n.02", "name": "burgoo"}, + {"id": 12766, "synset": "olla_podrida.n.01", "name": "olla_podrida"}, + {"id": 12767, "synset": "mulligan_stew.n.01", "name": "mulligan_stew"}, + {"id": 12768, "synset": "purloo.n.01", "name": "purloo"}, + {"id": 12769, "synset": "goulash.n.01", "name": "goulash"}, + {"id": 12770, "synset": "hotchpotch.n.02", "name": "hotchpotch"}, + {"id": 12771, "synset": "hot_pot.n.01", "name": "hot_pot"}, + {"id": 12772, "synset": "beef_goulash.n.01", "name": "beef_goulash"}, + { + "id": 12773, + "synset": "pork-and-veal_goulash.n.01", + "name": "pork-and-veal_goulash", + }, + {"id": 12774, "synset": "porkholt.n.01", "name": "porkholt"}, + {"id": 12775, "synset": "irish_stew.n.01", "name": "Irish_stew"}, + {"id": 12776, "synset": "oyster_stew.n.01", "name": "oyster_stew"}, + {"id": 12777, "synset": "lobster_stew.n.01", "name": "lobster_stew"}, + {"id": 12778, "synset": "lobscouse.n.01", "name": "lobscouse"}, + {"id": 12779, "synset": "fish_stew.n.01", "name": "fish_stew"}, + {"id": 12780, "synset": "bouillabaisse.n.01", "name": "bouillabaisse"}, + {"id": 12781, "synset": "matelote.n.01", "name": "matelote"}, + {"id": 12782, "synset": "paella.n.01", "name": "paella"}, + {"id": 12783, "synset": "fricassee.n.01", "name": "fricassee"}, + {"id": 12784, "synset": "chicken_stew.n.01", "name": "chicken_stew"}, + {"id": 12785, "synset": "turkey_stew.n.01", "name": "turkey_stew"}, + {"id": 12786, "synset": "beef_stew.n.01", "name": "beef_stew"}, + {"id": 12787, "synset": "ragout.n.01", "name": "ragout"}, + {"id": 12788, "synset": "ratatouille.n.01", "name": "ratatouille"}, + {"id": 12789, "synset": "salmi.n.01", "name": "salmi"}, + {"id": 12790, "synset": "pot-au-feu.n.01", "name": "pot-au-feu"}, + {"id": 12791, "synset": "slumgullion.n.01", "name": "slumgullion"}, + {"id": 12792, "synset": "smorgasbord.n.02", "name": "smorgasbord"}, + {"id": 12793, "synset": "viand.n.01", "name": "viand"}, + {"id": 12794, "synset": "ready-mix.n.01", "name": "ready-mix"}, + {"id": 12795, "synset": "brownie_mix.n.01", "name": "brownie_mix"}, + {"id": 12796, "synset": "cake_mix.n.01", "name": "cake_mix"}, + {"id": 12797, "synset": "lemonade_mix.n.01", "name": "lemonade_mix"}, + {"id": 12798, "synset": "self-rising_flour.n.01", "name": "self-rising_flour"}, + {"id": 12799, "synset": "choice_morsel.n.01", "name": "choice_morsel"}, + {"id": 12800, "synset": "savory.n.04", "name": "savory"}, + {"id": 12801, "synset": "calf's-foot_jelly.n.01", "name": "calf's-foot_jelly"}, + {"id": 12802, "synset": "caramel.n.02", "name": "caramel"}, + {"id": 12803, "synset": "lump_sugar.n.01", "name": "lump_sugar"}, + {"id": 12804, "synset": "cane_sugar.n.02", "name": "cane_sugar"}, + {"id": 12805, "synset": "castor_sugar.n.01", "name": "castor_sugar"}, + {"id": 12806, "synset": "powdered_sugar.n.01", "name": "powdered_sugar"}, + {"id": 12807, "synset": "granulated_sugar.n.01", "name": "granulated_sugar"}, + {"id": 12808, "synset": "icing_sugar.n.01", "name": "icing_sugar"}, + {"id": 12809, "synset": "corn_sugar.n.02", "name": "corn_sugar"}, + {"id": 12810, "synset": "brown_sugar.n.01", "name": "brown_sugar"}, + {"id": 12811, "synset": "demerara.n.05", "name": "demerara"}, + {"id": 12812, "synset": "sweet.n.03", "name": "sweet"}, + {"id": 12813, "synset": "confectionery.n.01", "name": "confectionery"}, + {"id": 12814, "synset": "confiture.n.01", "name": "confiture"}, + {"id": 12815, "synset": "sweetmeat.n.01", "name": "sweetmeat"}, + {"id": 12816, "synset": "candy.n.01", "name": "candy"}, + {"id": 12817, "synset": "carob_bar.n.01", "name": "carob_bar"}, + {"id": 12818, "synset": "hardbake.n.01", "name": "hardbake"}, + {"id": 12819, "synset": "hard_candy.n.01", "name": "hard_candy"}, + {"id": 12820, "synset": "barley-sugar.n.01", "name": "barley-sugar"}, + {"id": 12821, "synset": "brandyball.n.01", "name": "brandyball"}, + {"id": 12822, "synset": "jawbreaker.n.01", "name": "jawbreaker"}, + {"id": 12823, "synset": "lemon_drop.n.01", "name": "lemon_drop"}, + {"id": 12824, "synset": "sourball.n.01", "name": "sourball"}, + {"id": 12825, "synset": "patty.n.03", "name": "patty"}, + {"id": 12826, "synset": "peppermint_patty.n.01", "name": "peppermint_patty"}, + {"id": 12827, "synset": "bonbon.n.01", "name": "bonbon"}, + {"id": 12828, "synset": "brittle.n.01", "name": "brittle"}, + {"id": 12829, "synset": "peanut_brittle.n.01", "name": "peanut_brittle"}, + {"id": 12830, "synset": "chewing_gum.n.01", "name": "chewing_gum"}, + {"id": 12831, "synset": "gum_ball.n.01", "name": "gum_ball"}, + {"id": 12832, "synset": "butterscotch.n.01", "name": "butterscotch"}, + {"id": 12833, "synset": "candied_fruit.n.01", "name": "candied_fruit"}, + {"id": 12834, "synset": "candied_apple.n.01", "name": "candied_apple"}, + {"id": 12835, "synset": "crystallized_ginger.n.01", "name": "crystallized_ginger"}, + {"id": 12836, "synset": "grapefruit_peel.n.01", "name": "grapefruit_peel"}, + {"id": 12837, "synset": "lemon_peel.n.02", "name": "lemon_peel"}, + {"id": 12838, "synset": "orange_peel.n.02", "name": "orange_peel"}, + {"id": 12839, "synset": "candied_citrus_peel.n.01", "name": "candied_citrus_peel"}, + {"id": 12840, "synset": "candy_corn.n.01", "name": "candy_corn"}, + {"id": 12841, "synset": "caramel.n.01", "name": "caramel"}, + {"id": 12842, "synset": "center.n.14", "name": "center"}, + {"id": 12843, "synset": "comfit.n.01", "name": "comfit"}, + {"id": 12844, "synset": "cotton_candy.n.01", "name": "cotton_candy"}, + {"id": 12845, "synset": "dragee.n.02", "name": "dragee"}, + {"id": 12846, "synset": "dragee.n.01", "name": "dragee"}, + {"id": 12847, "synset": "fondant.n.01", "name": "fondant"}, + {"id": 12848, "synset": "chocolate_fudge.n.01", "name": "chocolate_fudge"}, + {"id": 12849, "synset": "divinity.n.03", "name": "divinity"}, + {"id": 12850, "synset": "penuche.n.01", "name": "penuche"}, + {"id": 12851, "synset": "gumdrop.n.01", "name": "gumdrop"}, + {"id": 12852, "synset": "jujube.n.03", "name": "jujube"}, + {"id": 12853, "synset": "honey_crisp.n.01", "name": "honey_crisp"}, + {"id": 12854, "synset": "horehound.n.02", "name": "horehound"}, + {"id": 12855, "synset": "peppermint.n.03", "name": "peppermint"}, + {"id": 12856, "synset": "kiss.n.03", "name": "kiss"}, + {"id": 12857, "synset": "molasses_kiss.n.01", "name": "molasses_kiss"}, + {"id": 12858, "synset": "meringue_kiss.n.01", "name": "meringue_kiss"}, + {"id": 12859, "synset": "chocolate_kiss.n.01", "name": "chocolate_kiss"}, + {"id": 12860, "synset": "licorice.n.02", "name": "licorice"}, + {"id": 12861, "synset": "life_saver.n.01", "name": "Life_Saver"}, + {"id": 12862, "synset": "lozenge.n.01", "name": "lozenge"}, + {"id": 12863, "synset": "cachou.n.01", "name": "cachou"}, + {"id": 12864, "synset": "cough_drop.n.01", "name": "cough_drop"}, + {"id": 12865, "synset": "marshmallow.n.01", "name": "marshmallow"}, + {"id": 12866, "synset": "marzipan.n.01", "name": "marzipan"}, + {"id": 12867, "synset": "nougat.n.01", "name": "nougat"}, + {"id": 12868, "synset": "nougat_bar.n.01", "name": "nougat_bar"}, + {"id": 12869, "synset": "nut_bar.n.01", "name": "nut_bar"}, + {"id": 12870, "synset": "peanut_bar.n.01", "name": "peanut_bar"}, + {"id": 12871, "synset": "popcorn_ball.n.01", "name": "popcorn_ball"}, + {"id": 12872, "synset": "praline.n.01", "name": "praline"}, + {"id": 12873, "synset": "rock_candy.n.02", "name": "rock_candy"}, + {"id": 12874, "synset": "rock_candy.n.01", "name": "rock_candy"}, + {"id": 12875, "synset": "sugar_candy.n.01", "name": "sugar_candy"}, + {"id": 12876, "synset": "sugarplum.n.01", "name": "sugarplum"}, + {"id": 12877, "synset": "taffy.n.01", "name": "taffy"}, + {"id": 12878, "synset": "molasses_taffy.n.01", "name": "molasses_taffy"}, + {"id": 12879, "synset": "turkish_delight.n.01", "name": "Turkish_Delight"}, + {"id": 12880, "synset": "dessert.n.01", "name": "dessert"}, + {"id": 12881, "synset": "ambrosia.n.04", "name": "ambrosia"}, + {"id": 12882, "synset": "ambrosia.n.03", "name": "ambrosia"}, + {"id": 12883, "synset": "baked_alaska.n.01", "name": "baked_Alaska"}, + {"id": 12884, "synset": "blancmange.n.01", "name": "blancmange"}, + {"id": 12885, "synset": "charlotte.n.02", "name": "charlotte"}, + {"id": 12886, "synset": "compote.n.01", "name": "compote"}, + {"id": 12887, "synset": "dumpling.n.02", "name": "dumpling"}, + {"id": 12888, "synset": "flan.n.01", "name": "flan"}, + {"id": 12889, "synset": "frozen_dessert.n.01", "name": "frozen_dessert"}, + {"id": 12890, "synset": "junket.n.01", "name": "junket"}, + {"id": 12891, "synset": "mousse.n.02", "name": "mousse"}, + {"id": 12892, "synset": "mousse.n.01", "name": "mousse"}, + {"id": 12893, "synset": "pavlova.n.02", "name": "pavlova"}, + {"id": 12894, "synset": "peach_melba.n.01", "name": "peach_melba"}, + {"id": 12895, "synset": "whip.n.03", "name": "whip"}, + {"id": 12896, "synset": "prune_whip.n.01", "name": "prune_whip"}, + {"id": 12897, "synset": "pudding.n.03", "name": "pudding"}, + {"id": 12898, "synset": "pudding.n.02", "name": "pudding"}, + {"id": 12899, "synset": "syllabub.n.02", "name": "syllabub"}, + {"id": 12900, "synset": "tiramisu.n.01", "name": "tiramisu"}, + {"id": 12901, "synset": "trifle.n.01", "name": "trifle"}, + {"id": 12902, "synset": "tipsy_cake.n.01", "name": "tipsy_cake"}, + {"id": 12903, "synset": "jello.n.01", "name": "jello"}, + {"id": 12904, "synset": "apple_dumpling.n.01", "name": "apple_dumpling"}, + {"id": 12905, "synset": "ice.n.05", "name": "ice"}, + {"id": 12906, "synset": "water_ice.n.02", "name": "water_ice"}, + {"id": 12907, "synset": "ice-cream_cone.n.01", "name": "ice-cream_cone"}, + {"id": 12908, "synset": "chocolate_ice_cream.n.01", "name": "chocolate_ice_cream"}, + { + "id": 12909, + "synset": "neapolitan_ice_cream.n.01", + "name": "Neapolitan_ice_cream", + }, + {"id": 12910, "synset": "peach_ice_cream.n.01", "name": "peach_ice_cream"}, + { + "id": 12911, + "synset": "strawberry_ice_cream.n.01", + "name": "strawberry_ice_cream", + }, + {"id": 12912, "synset": "tutti-frutti.n.01", "name": "tutti-frutti"}, + {"id": 12913, "synset": "vanilla_ice_cream.n.01", "name": "vanilla_ice_cream"}, + {"id": 12914, "synset": "ice_milk.n.01", "name": "ice_milk"}, + {"id": 12915, "synset": "frozen_yogurt.n.01", "name": "frozen_yogurt"}, + {"id": 12916, "synset": "snowball.n.03", "name": "snowball"}, + {"id": 12917, "synset": "snowball.n.02", "name": "snowball"}, + {"id": 12918, "synset": "parfait.n.01", "name": "parfait"}, + {"id": 12919, "synset": "ice-cream_sundae.n.01", "name": "ice-cream_sundae"}, + {"id": 12920, "synset": "split.n.07", "name": "split"}, + {"id": 12921, "synset": "banana_split.n.01", "name": "banana_split"}, + {"id": 12922, "synset": "frozen_pudding.n.01", "name": "frozen_pudding"}, + {"id": 12923, "synset": "frozen_custard.n.01", "name": "frozen_custard"}, + {"id": 12924, "synset": "flummery.n.01", "name": "flummery"}, + {"id": 12925, "synset": "fish_mousse.n.01", "name": "fish_mousse"}, + {"id": 12926, "synset": "chicken_mousse.n.01", "name": "chicken_mousse"}, + {"id": 12927, "synset": "plum_pudding.n.01", "name": "plum_pudding"}, + {"id": 12928, "synset": "carrot_pudding.n.01", "name": "carrot_pudding"}, + {"id": 12929, "synset": "corn_pudding.n.01", "name": "corn_pudding"}, + {"id": 12930, "synset": "steamed_pudding.n.01", "name": "steamed_pudding"}, + {"id": 12931, "synset": "duff.n.01", "name": "duff"}, + {"id": 12932, "synset": "vanilla_pudding.n.01", "name": "vanilla_pudding"}, + {"id": 12933, "synset": "chocolate_pudding.n.01", "name": "chocolate_pudding"}, + {"id": 12934, "synset": "brown_betty.n.01", "name": "brown_Betty"}, + {"id": 12935, "synset": "nesselrode.n.01", "name": "Nesselrode"}, + {"id": 12936, "synset": "pease_pudding.n.01", "name": "pease_pudding"}, + {"id": 12937, "synset": "custard.n.01", "name": "custard"}, + {"id": 12938, "synset": "creme_caramel.n.01", "name": "creme_caramel"}, + {"id": 12939, "synset": "creme_anglais.n.01", "name": "creme_anglais"}, + {"id": 12940, "synset": "creme_brulee.n.01", "name": "creme_brulee"}, + {"id": 12941, "synset": "fruit_custard.n.01", "name": "fruit_custard"}, + {"id": 12942, "synset": "tapioca.n.01", "name": "tapioca"}, + {"id": 12943, "synset": "tapioca_pudding.n.01", "name": "tapioca_pudding"}, + {"id": 12944, "synset": "roly-poly.n.02", "name": "roly-poly"}, + {"id": 12945, "synset": "suet_pudding.n.01", "name": "suet_pudding"}, + {"id": 12946, "synset": "bavarian_cream.n.01", "name": "Bavarian_cream"}, + {"id": 12947, "synset": "maraschino.n.02", "name": "maraschino"}, + {"id": 12948, "synset": "nonpareil.n.02", "name": "nonpareil"}, + {"id": 12949, "synset": "zabaglione.n.01", "name": "zabaglione"}, + {"id": 12950, "synset": "garnish.n.01", "name": "garnish"}, + {"id": 12951, "synset": "pastry.n.01", "name": "pastry"}, + {"id": 12952, "synset": "turnover.n.02", "name": "turnover"}, + {"id": 12953, "synset": "apple_turnover.n.01", "name": "apple_turnover"}, + {"id": 12954, "synset": "knish.n.01", "name": "knish"}, + {"id": 12955, "synset": "pirogi.n.01", "name": "pirogi"}, + {"id": 12956, "synset": "samosa.n.01", "name": "samosa"}, + {"id": 12957, "synset": "timbale.n.01", "name": "timbale"}, + {"id": 12958, "synset": "puff_paste.n.01", "name": "puff_paste"}, + {"id": 12959, "synset": "phyllo.n.01", "name": "phyllo"}, + {"id": 12960, "synset": "puff_batter.n.01", "name": "puff_batter"}, + {"id": 12961, "synset": "ice-cream_cake.n.01", "name": "ice-cream_cake"}, + {"id": 12962, "synset": "fish_cake.n.01", "name": "fish_cake"}, + {"id": 12963, "synset": "fish_stick.n.01", "name": "fish_stick"}, + {"id": 12964, "synset": "conserve.n.01", "name": "conserve"}, + {"id": 12965, "synset": "apple_butter.n.01", "name": "apple_butter"}, + {"id": 12966, "synset": "chowchow.n.02", "name": "chowchow"}, + {"id": 12967, "synset": "lemon_curd.n.01", "name": "lemon_curd"}, + {"id": 12968, "synset": "strawberry_jam.n.01", "name": "strawberry_jam"}, + {"id": 12969, "synset": "jelly.n.02", "name": "jelly"}, + {"id": 12970, "synset": "apple_jelly.n.01", "name": "apple_jelly"}, + {"id": 12971, "synset": "crabapple_jelly.n.01", "name": "crabapple_jelly"}, + {"id": 12972, "synset": "grape_jelly.n.01", "name": "grape_jelly"}, + {"id": 12973, "synset": "marmalade.n.01", "name": "marmalade"}, + {"id": 12974, "synset": "orange_marmalade.n.01", "name": "orange_marmalade"}, + {"id": 12975, "synset": "gelatin_dessert.n.01", "name": "gelatin_dessert"}, + {"id": 12976, "synset": "buffalo_wing.n.01", "name": "buffalo_wing"}, + {"id": 12977, "synset": "barbecued_wing.n.01", "name": "barbecued_wing"}, + {"id": 12978, "synset": "mess.n.03", "name": "mess"}, + {"id": 12979, "synset": "mince.n.01", "name": "mince"}, + {"id": 12980, "synset": "puree.n.01", "name": "puree"}, + {"id": 12981, "synset": "barbecue.n.01", "name": "barbecue"}, + {"id": 12982, "synset": "biryani.n.01", "name": "biryani"}, + { + "id": 12983, + "synset": "escalope_de_veau_orloff.n.01", + "name": "escalope_de_veau_Orloff", + }, + {"id": 12984, "synset": "saute.n.01", "name": "saute"}, + {"id": 12985, "synset": "veal_parmesan.n.01", "name": "veal_parmesan"}, + {"id": 12986, "synset": "veal_cordon_bleu.n.01", "name": "veal_cordon_bleu"}, + {"id": 12987, "synset": "margarine.n.01", "name": "margarine"}, + {"id": 12988, "synset": "mincemeat.n.01", "name": "mincemeat"}, + {"id": 12989, "synset": "stuffing.n.01", "name": "stuffing"}, + {"id": 12990, "synset": "turkey_stuffing.n.01", "name": "turkey_stuffing"}, + {"id": 12991, "synset": "oyster_stuffing.n.01", "name": "oyster_stuffing"}, + {"id": 12992, "synset": "forcemeat.n.01", "name": "forcemeat"}, + {"id": 12993, "synset": "anadama_bread.n.01", "name": "anadama_bread"}, + {"id": 12994, "synset": "bap.n.01", "name": "bap"}, + {"id": 12995, "synset": "barmbrack.n.01", "name": "barmbrack"}, + {"id": 12996, "synset": "breadstick.n.01", "name": "breadstick"}, + {"id": 12997, "synset": "grissino.n.01", "name": "grissino"}, + {"id": 12998, "synset": "brown_bread.n.02", "name": "brown_bread"}, + {"id": 12999, "synset": "tea_bread.n.01", "name": "tea_bread"}, + {"id": 13000, "synset": "caraway_seed_bread.n.01", "name": "caraway_seed_bread"}, + {"id": 13001, "synset": "challah.n.01", "name": "challah"}, + {"id": 13002, "synset": "cinnamon_bread.n.01", "name": "cinnamon_bread"}, + {"id": 13003, "synset": "cracked-wheat_bread.n.01", "name": "cracked-wheat_bread"}, + {"id": 13004, "synset": "dark_bread.n.01", "name": "dark_bread"}, + {"id": 13005, "synset": "english_muffin.n.01", "name": "English_muffin"}, + {"id": 13006, "synset": "flatbread.n.01", "name": "flatbread"}, + {"id": 13007, "synset": "garlic_bread.n.01", "name": "garlic_bread"}, + {"id": 13008, "synset": "gluten_bread.n.01", "name": "gluten_bread"}, + {"id": 13009, "synset": "graham_bread.n.01", "name": "graham_bread"}, + {"id": 13010, "synset": "host.n.09", "name": "Host"}, + {"id": 13011, "synset": "flatbrod.n.01", "name": "flatbrod"}, + {"id": 13012, "synset": "bannock.n.01", "name": "bannock"}, + {"id": 13013, "synset": "chapatti.n.01", "name": "chapatti"}, + {"id": 13014, "synset": "loaf_of_bread.n.01", "name": "loaf_of_bread"}, + {"id": 13015, "synset": "french_loaf.n.01", "name": "French_loaf"}, + {"id": 13016, "synset": "matzo.n.01", "name": "matzo"}, + {"id": 13017, "synset": "nan.n.04", "name": "nan"}, + {"id": 13018, "synset": "onion_bread.n.01", "name": "onion_bread"}, + {"id": 13019, "synset": "raisin_bread.n.01", "name": "raisin_bread"}, + {"id": 13020, "synset": "quick_bread.n.01", "name": "quick_bread"}, + {"id": 13021, "synset": "banana_bread.n.01", "name": "banana_bread"}, + {"id": 13022, "synset": "date_bread.n.01", "name": "date_bread"}, + {"id": 13023, "synset": "date-nut_bread.n.01", "name": "date-nut_bread"}, + {"id": 13024, "synset": "nut_bread.n.01", "name": "nut_bread"}, + {"id": 13025, "synset": "oatcake.n.01", "name": "oatcake"}, + {"id": 13026, "synset": "irish_soda_bread.n.01", "name": "Irish_soda_bread"}, + {"id": 13027, "synset": "skillet_bread.n.01", "name": "skillet_bread"}, + {"id": 13028, "synset": "rye_bread.n.01", "name": "rye_bread"}, + {"id": 13029, "synset": "black_bread.n.01", "name": "black_bread"}, + {"id": 13030, "synset": "jewish_rye_bread.n.01", "name": "Jewish_rye_bread"}, + {"id": 13031, "synset": "limpa.n.01", "name": "limpa"}, + {"id": 13032, "synset": "swedish_rye_bread.n.01", "name": "Swedish_rye_bread"}, + {"id": 13033, "synset": "salt-rising_bread.n.01", "name": "salt-rising_bread"}, + {"id": 13034, "synset": "simnel.n.01", "name": "simnel"}, + {"id": 13035, "synset": "sour_bread.n.01", "name": "sour_bread"}, + {"id": 13036, "synset": "wafer.n.03", "name": "wafer"}, + {"id": 13037, "synset": "white_bread.n.01", "name": "white_bread"}, + {"id": 13038, "synset": "french_bread.n.01", "name": "French_bread"}, + {"id": 13039, "synset": "italian_bread.n.01", "name": "Italian_bread"}, + {"id": 13040, "synset": "corn_cake.n.01", "name": "corn_cake"}, + {"id": 13041, "synset": "skillet_corn_bread.n.01", "name": "skillet_corn_bread"}, + {"id": 13042, "synset": "ashcake.n.01", "name": "ashcake"}, + {"id": 13043, "synset": "hoecake.n.01", "name": "hoecake"}, + {"id": 13044, "synset": "cornpone.n.01", "name": "cornpone"}, + {"id": 13045, "synset": "corn_dab.n.01", "name": "corn_dab"}, + {"id": 13046, "synset": "hush_puppy.n.01", "name": "hush_puppy"}, + {"id": 13047, "synset": "johnnycake.n.01", "name": "johnnycake"}, + {"id": 13048, "synset": "shawnee_cake.n.01", "name": "Shawnee_cake"}, + {"id": 13049, "synset": "spoon_bread.n.01", "name": "spoon_bread"}, + {"id": 13050, "synset": "cinnamon_toast.n.01", "name": "cinnamon_toast"}, + {"id": 13051, "synset": "orange_toast.n.01", "name": "orange_toast"}, + {"id": 13052, "synset": "melba_toast.n.01", "name": "Melba_toast"}, + {"id": 13053, "synset": "zwieback.n.01", "name": "zwieback"}, + {"id": 13054, "synset": "frankfurter_bun.n.01", "name": "frankfurter_bun"}, + {"id": 13055, "synset": "hamburger_bun.n.01", "name": "hamburger_bun"}, + {"id": 13056, "synset": "bran_muffin.n.01", "name": "bran_muffin"}, + {"id": 13057, "synset": "corn_muffin.n.01", "name": "corn_muffin"}, + {"id": 13058, "synset": "yorkshire_pudding.n.01", "name": "Yorkshire_pudding"}, + {"id": 13059, "synset": "popover.n.01", "name": "popover"}, + {"id": 13060, "synset": "scone.n.01", "name": "scone"}, + {"id": 13061, "synset": "drop_scone.n.01", "name": "drop_scone"}, + {"id": 13062, "synset": "cross_bun.n.01", "name": "cross_bun"}, + {"id": 13063, "synset": "brioche.n.01", "name": "brioche"}, + {"id": 13064, "synset": "hard_roll.n.01", "name": "hard_roll"}, + {"id": 13065, "synset": "soft_roll.n.01", "name": "soft_roll"}, + {"id": 13066, "synset": "kaiser_roll.n.01", "name": "kaiser_roll"}, + {"id": 13067, "synset": "parker_house_roll.n.01", "name": "Parker_House_roll"}, + {"id": 13068, "synset": "clover-leaf_roll.n.01", "name": "clover-leaf_roll"}, + {"id": 13069, "synset": "onion_roll.n.01", "name": "onion_roll"}, + {"id": 13070, "synset": "bialy.n.01", "name": "bialy"}, + {"id": 13071, "synset": "sweet_roll.n.01", "name": "sweet_roll"}, + {"id": 13072, "synset": "bear_claw.n.01", "name": "bear_claw"}, + {"id": 13073, "synset": "cinnamon_roll.n.01", "name": "cinnamon_roll"}, + {"id": 13074, "synset": "honey_bun.n.01", "name": "honey_bun"}, + {"id": 13075, "synset": "pinwheel_roll.n.01", "name": "pinwheel_roll"}, + {"id": 13076, "synset": "danish.n.02", "name": "danish"}, + {"id": 13077, "synset": "onion_bagel.n.01", "name": "onion_bagel"}, + {"id": 13078, "synset": "biscuit.n.01", "name": "biscuit"}, + {"id": 13079, "synset": "rolled_biscuit.n.01", "name": "rolled_biscuit"}, + { + "id": 13080, + "synset": "baking-powder_biscuit.n.01", + "name": "baking-powder_biscuit", + }, + {"id": 13081, "synset": "buttermilk_biscuit.n.01", "name": "buttermilk_biscuit"}, + {"id": 13082, "synset": "shortcake.n.01", "name": "shortcake"}, + {"id": 13083, "synset": "hardtack.n.01", "name": "hardtack"}, + {"id": 13084, "synset": "saltine.n.01", "name": "saltine"}, + {"id": 13085, "synset": "soda_cracker.n.01", "name": "soda_cracker"}, + {"id": 13086, "synset": "oyster_cracker.n.01", "name": "oyster_cracker"}, + {"id": 13087, "synset": "water_biscuit.n.01", "name": "water_biscuit"}, + {"id": 13088, "synset": "graham_cracker.n.01", "name": "graham_cracker"}, + {"id": 13089, "synset": "soft_pretzel.n.01", "name": "soft_pretzel"}, + {"id": 13090, "synset": "sandwich_plate.n.01", "name": "sandwich_plate"}, + {"id": 13091, "synset": "butty.n.01", "name": "butty"}, + {"id": 13092, "synset": "ham_sandwich.n.01", "name": "ham_sandwich"}, + {"id": 13093, "synset": "chicken_sandwich.n.01", "name": "chicken_sandwich"}, + {"id": 13094, "synset": "club_sandwich.n.01", "name": "club_sandwich"}, + {"id": 13095, "synset": "open-face_sandwich.n.01", "name": "open-face_sandwich"}, + {"id": 13096, "synset": "cheeseburger.n.01", "name": "cheeseburger"}, + {"id": 13097, "synset": "tunaburger.n.01", "name": "tunaburger"}, + {"id": 13098, "synset": "hotdog.n.02", "name": "hotdog"}, + {"id": 13099, "synset": "sloppy_joe.n.01", "name": "Sloppy_Joe"}, + {"id": 13100, "synset": "bomber.n.03", "name": "bomber"}, + {"id": 13101, "synset": "gyro.n.01", "name": "gyro"}, + { + "id": 13102, + "synset": "bacon-lettuce-tomato_sandwich.n.01", + "name": "bacon-lettuce-tomato_sandwich", + }, + {"id": 13103, "synset": "reuben.n.02", "name": "Reuben"}, + {"id": 13104, "synset": "western.n.02", "name": "western"}, + {"id": 13105, "synset": "wrap.n.02", "name": "wrap"}, + {"id": 13106, "synset": "spaghetti.n.01", "name": "spaghetti"}, + {"id": 13107, "synset": "hasty_pudding.n.01", "name": "hasty_pudding"}, + {"id": 13108, "synset": "gruel.n.01", "name": "gruel"}, + {"id": 13109, "synset": "congee.n.01", "name": "congee"}, + {"id": 13110, "synset": "skilly.n.01", "name": "skilly"}, + {"id": 13111, "synset": "edible_fruit.n.01", "name": "edible_fruit"}, + {"id": 13112, "synset": "vegetable.n.01", "name": "vegetable"}, + {"id": 13113, "synset": "julienne.n.01", "name": "julienne"}, + {"id": 13114, "synset": "raw_vegetable.n.01", "name": "raw_vegetable"}, + {"id": 13115, "synset": "crudites.n.01", "name": "crudites"}, + {"id": 13116, "synset": "celery_stick.n.01", "name": "celery_stick"}, + {"id": 13117, "synset": "legume.n.03", "name": "legume"}, + {"id": 13118, "synset": "pulse.n.04", "name": "pulse"}, + {"id": 13119, "synset": "potherb.n.01", "name": "potherb"}, + {"id": 13120, "synset": "greens.n.01", "name": "greens"}, + {"id": 13121, "synset": "chop-suey_greens.n.02", "name": "chop-suey_greens"}, + { + "id": 13122, + "synset": "solanaceous_vegetable.n.01", + "name": "solanaceous_vegetable", + }, + {"id": 13123, "synset": "root_vegetable.n.01", "name": "root_vegetable"}, + {"id": 13124, "synset": "baked_potato.n.01", "name": "baked_potato"}, + {"id": 13125, "synset": "french_fries.n.01", "name": "french_fries"}, + {"id": 13126, "synset": "home_fries.n.01", "name": "home_fries"}, + {"id": 13127, "synset": "jacket_potato.n.01", "name": "jacket_potato"}, + {"id": 13128, "synset": "potato_skin.n.01", "name": "potato_skin"}, + {"id": 13129, "synset": "uruguay_potato.n.02", "name": "Uruguay_potato"}, + {"id": 13130, "synset": "yam.n.04", "name": "yam"}, + {"id": 13131, "synset": "yam.n.03", "name": "yam"}, + {"id": 13132, "synset": "snack_food.n.01", "name": "snack_food"}, + {"id": 13133, "synset": "corn_chip.n.01", "name": "corn_chip"}, + {"id": 13134, "synset": "tortilla_chip.n.01", "name": "tortilla_chip"}, + {"id": 13135, "synset": "nacho.n.01", "name": "nacho"}, + {"id": 13136, "synset": "pieplant.n.01", "name": "pieplant"}, + { + "id": 13137, + "synset": "cruciferous_vegetable.n.01", + "name": "cruciferous_vegetable", + }, + {"id": 13138, "synset": "mustard.n.03", "name": "mustard"}, + {"id": 13139, "synset": "cabbage.n.01", "name": "cabbage"}, + {"id": 13140, "synset": "kale.n.03", "name": "kale"}, + {"id": 13141, "synset": "collards.n.01", "name": "collards"}, + {"id": 13142, "synset": "chinese_cabbage.n.02", "name": "Chinese_cabbage"}, + {"id": 13143, "synset": "bok_choy.n.02", "name": "bok_choy"}, + {"id": 13144, "synset": "head_cabbage.n.02", "name": "head_cabbage"}, + {"id": 13145, "synset": "red_cabbage.n.02", "name": "red_cabbage"}, + {"id": 13146, "synset": "savoy_cabbage.n.02", "name": "savoy_cabbage"}, + {"id": 13147, "synset": "broccoli.n.02", "name": "broccoli"}, + {"id": 13148, "synset": "broccoli_rabe.n.02", "name": "broccoli_rabe"}, + {"id": 13149, "synset": "squash.n.02", "name": "squash"}, + {"id": 13150, "synset": "summer_squash.n.02", "name": "summer_squash"}, + {"id": 13151, "synset": "yellow_squash.n.02", "name": "yellow_squash"}, + {"id": 13152, "synset": "crookneck.n.01", "name": "crookneck"}, + {"id": 13153, "synset": "marrow.n.04", "name": "marrow"}, + {"id": 13154, "synset": "cocozelle.n.02", "name": "cocozelle"}, + {"id": 13155, "synset": "pattypan_squash.n.02", "name": "pattypan_squash"}, + {"id": 13156, "synset": "spaghetti_squash.n.02", "name": "spaghetti_squash"}, + {"id": 13157, "synset": "winter_squash.n.02", "name": "winter_squash"}, + {"id": 13158, "synset": "acorn_squash.n.02", "name": "acorn_squash"}, + {"id": 13159, "synset": "butternut_squash.n.02", "name": "butternut_squash"}, + {"id": 13160, "synset": "hubbard_squash.n.02", "name": "hubbard_squash"}, + {"id": 13161, "synset": "turban_squash.n.02", "name": "turban_squash"}, + {"id": 13162, "synset": "buttercup_squash.n.02", "name": "buttercup_squash"}, + {"id": 13163, "synset": "cushaw.n.02", "name": "cushaw"}, + { + "id": 13164, + "synset": "winter_crookneck_squash.n.02", + "name": "winter_crookneck_squash", + }, + {"id": 13165, "synset": "gherkin.n.02", "name": "gherkin"}, + {"id": 13166, "synset": "artichoke_heart.n.01", "name": "artichoke_heart"}, + {"id": 13167, "synset": "jerusalem_artichoke.n.03", "name": "Jerusalem_artichoke"}, + {"id": 13168, "synset": "bamboo_shoot.n.01", "name": "bamboo_shoot"}, + {"id": 13169, "synset": "sprout.n.02", "name": "sprout"}, + {"id": 13170, "synset": "bean_sprout.n.01", "name": "bean_sprout"}, + {"id": 13171, "synset": "alfalfa_sprout.n.01", "name": "alfalfa_sprout"}, + {"id": 13172, "synset": "beet.n.02", "name": "beet"}, + {"id": 13173, "synset": "beet_green.n.01", "name": "beet_green"}, + {"id": 13174, "synset": "sugar_beet.n.02", "name": "sugar_beet"}, + {"id": 13175, "synset": "mangel-wurzel.n.02", "name": "mangel-wurzel"}, + {"id": 13176, "synset": "chard.n.02", "name": "chard"}, + {"id": 13177, "synset": "pepper.n.04", "name": "pepper"}, + {"id": 13178, "synset": "sweet_pepper.n.02", "name": "sweet_pepper"}, + {"id": 13179, "synset": "green_pepper.n.01", "name": "green_pepper"}, + {"id": 13180, "synset": "globe_pepper.n.01", "name": "globe_pepper"}, + {"id": 13181, "synset": "pimento.n.02", "name": "pimento"}, + {"id": 13182, "synset": "hot_pepper.n.02", "name": "hot_pepper"}, + {"id": 13183, "synset": "jalapeno.n.02", "name": "jalapeno"}, + {"id": 13184, "synset": "chipotle.n.01", "name": "chipotle"}, + {"id": 13185, "synset": "cayenne.n.03", "name": "cayenne"}, + {"id": 13186, "synset": "tabasco.n.03", "name": "tabasco"}, + {"id": 13187, "synset": "onion.n.03", "name": "onion"}, + {"id": 13188, "synset": "bermuda_onion.n.01", "name": "Bermuda_onion"}, + {"id": 13189, "synset": "vidalia_onion.n.01", "name": "Vidalia_onion"}, + {"id": 13190, "synset": "spanish_onion.n.01", "name": "Spanish_onion"}, + {"id": 13191, "synset": "purple_onion.n.01", "name": "purple_onion"}, + {"id": 13192, "synset": "leek.n.02", "name": "leek"}, + {"id": 13193, "synset": "shallot.n.03", "name": "shallot"}, + {"id": 13194, "synset": "salad_green.n.01", "name": "salad_green"}, + {"id": 13195, "synset": "lettuce.n.03", "name": "lettuce"}, + {"id": 13196, "synset": "butterhead_lettuce.n.01", "name": "butterhead_lettuce"}, + {"id": 13197, "synset": "buttercrunch.n.01", "name": "buttercrunch"}, + {"id": 13198, "synset": "bibb_lettuce.n.01", "name": "Bibb_lettuce"}, + {"id": 13199, "synset": "boston_lettuce.n.01", "name": "Boston_lettuce"}, + {"id": 13200, "synset": "crisphead_lettuce.n.01", "name": "crisphead_lettuce"}, + {"id": 13201, "synset": "cos.n.02", "name": "cos"}, + {"id": 13202, "synset": "leaf_lettuce.n.02", "name": "leaf_lettuce"}, + {"id": 13203, "synset": "celtuce.n.02", "name": "celtuce"}, + {"id": 13204, "synset": "bean.n.01", "name": "bean"}, + {"id": 13205, "synset": "goa_bean.n.02", "name": "goa_bean"}, + {"id": 13206, "synset": "lentil.n.01", "name": "lentil"}, + {"id": 13207, "synset": "green_pea.n.01", "name": "green_pea"}, + {"id": 13208, "synset": "marrowfat_pea.n.01", "name": "marrowfat_pea"}, + {"id": 13209, "synset": "snow_pea.n.02", "name": "snow_pea"}, + {"id": 13210, "synset": "sugar_snap_pea.n.02", "name": "sugar_snap_pea"}, + {"id": 13211, "synset": "split-pea.n.01", "name": "split-pea"}, + {"id": 13212, "synset": "chickpea.n.03", "name": "chickpea"}, + {"id": 13213, "synset": "cajan_pea.n.02", "name": "cajan_pea"}, + {"id": 13214, "synset": "field_pea.n.03", "name": "field_pea"}, + {"id": 13215, "synset": "mushy_peas.n.01", "name": "mushy_peas"}, + {"id": 13216, "synset": "black-eyed_pea.n.03", "name": "black-eyed_pea"}, + {"id": 13217, "synset": "common_bean.n.02", "name": "common_bean"}, + {"id": 13218, "synset": "kidney_bean.n.02", "name": "kidney_bean"}, + {"id": 13219, "synset": "navy_bean.n.01", "name": "navy_bean"}, + {"id": 13220, "synset": "pinto_bean.n.01", "name": "pinto_bean"}, + {"id": 13221, "synset": "frijole.n.02", "name": "frijole"}, + {"id": 13222, "synset": "black_bean.n.01", "name": "black_bean"}, + {"id": 13223, "synset": "fresh_bean.n.01", "name": "fresh_bean"}, + {"id": 13224, "synset": "flageolet.n.01", "name": "flageolet"}, + {"id": 13225, "synset": "green_bean.n.01", "name": "green_bean"}, + {"id": 13226, "synset": "snap_bean.n.01", "name": "snap_bean"}, + {"id": 13227, "synset": "string_bean.n.01", "name": "string_bean"}, + {"id": 13228, "synset": "kentucky_wonder.n.01", "name": "Kentucky_wonder"}, + {"id": 13229, "synset": "scarlet_runner.n.03", "name": "scarlet_runner"}, + {"id": 13230, "synset": "haricot_vert.n.01", "name": "haricot_vert"}, + {"id": 13231, "synset": "wax_bean.n.02", "name": "wax_bean"}, + {"id": 13232, "synset": "shell_bean.n.02", "name": "shell_bean"}, + {"id": 13233, "synset": "lima_bean.n.03", "name": "lima_bean"}, + {"id": 13234, "synset": "fordhooks.n.01", "name": "Fordhooks"}, + {"id": 13235, "synset": "sieva_bean.n.02", "name": "sieva_bean"}, + {"id": 13236, "synset": "fava_bean.n.02", "name": "fava_bean"}, + {"id": 13237, "synset": "soy.n.04", "name": "soy"}, + {"id": 13238, "synset": "green_soybean.n.01", "name": "green_soybean"}, + {"id": 13239, "synset": "field_soybean.n.01", "name": "field_soybean"}, + {"id": 13240, "synset": "cardoon.n.02", "name": "cardoon"}, + {"id": 13241, "synset": "carrot.n.03", "name": "carrot"}, + {"id": 13242, "synset": "carrot_stick.n.01", "name": "carrot_stick"}, + {"id": 13243, "synset": "celery.n.02", "name": "celery"}, + {"id": 13244, "synset": "pascal_celery.n.01", "name": "pascal_celery"}, + {"id": 13245, "synset": "celeriac.n.02", "name": "celeriac"}, + {"id": 13246, "synset": "chicory.n.04", "name": "chicory"}, + {"id": 13247, "synset": "radicchio.n.01", "name": "radicchio"}, + {"id": 13248, "synset": "coffee_substitute.n.01", "name": "coffee_substitute"}, + {"id": 13249, "synset": "chicory.n.03", "name": "chicory"}, + {"id": 13250, "synset": "postum.n.01", "name": "Postum"}, + {"id": 13251, "synset": "chicory_escarole.n.01", "name": "chicory_escarole"}, + {"id": 13252, "synset": "belgian_endive.n.01", "name": "Belgian_endive"}, + {"id": 13253, "synset": "sweet_corn.n.02", "name": "sweet_corn"}, + {"id": 13254, "synset": "hominy.n.01", "name": "hominy"}, + {"id": 13255, "synset": "lye_hominy.n.01", "name": "lye_hominy"}, + {"id": 13256, "synset": "pearl_hominy.n.01", "name": "pearl_hominy"}, + {"id": 13257, "synset": "popcorn.n.02", "name": "popcorn"}, + {"id": 13258, "synset": "cress.n.02", "name": "cress"}, + {"id": 13259, "synset": "watercress.n.02", "name": "watercress"}, + {"id": 13260, "synset": "garden_cress.n.01", "name": "garden_cress"}, + {"id": 13261, "synset": "winter_cress.n.02", "name": "winter_cress"}, + {"id": 13262, "synset": "dandelion_green.n.02", "name": "dandelion_green"}, + {"id": 13263, "synset": "gumbo.n.03", "name": "gumbo"}, + {"id": 13264, "synset": "kohlrabi.n.02", "name": "kohlrabi"}, + {"id": 13265, "synset": "lamb's-quarter.n.01", "name": "lamb's-quarter"}, + {"id": 13266, "synset": "wild_spinach.n.03", "name": "wild_spinach"}, + {"id": 13267, "synset": "beefsteak_tomato.n.01", "name": "beefsteak_tomato"}, + {"id": 13268, "synset": "cherry_tomato.n.02", "name": "cherry_tomato"}, + {"id": 13269, "synset": "plum_tomato.n.02", "name": "plum_tomato"}, + {"id": 13270, "synset": "tomatillo.n.03", "name": "tomatillo"}, + {"id": 13271, "synset": "mushroom.n.05", "name": "mushroom"}, + {"id": 13272, "synset": "stuffed_mushroom.n.01", "name": "stuffed_mushroom"}, + {"id": 13273, "synset": "salsify.n.03", "name": "salsify"}, + {"id": 13274, "synset": "oyster_plant.n.03", "name": "oyster_plant"}, + {"id": 13275, "synset": "scorzonera.n.02", "name": "scorzonera"}, + {"id": 13276, "synset": "parsnip.n.03", "name": "parsnip"}, + {"id": 13277, "synset": "radish.n.01", "name": "radish"}, + {"id": 13278, "synset": "turnip.n.02", "name": "turnip"}, + {"id": 13279, "synset": "white_turnip.n.02", "name": "white_turnip"}, + {"id": 13280, "synset": "rutabaga.n.01", "name": "rutabaga"}, + {"id": 13281, "synset": "turnip_greens.n.01", "name": "turnip_greens"}, + {"id": 13282, "synset": "sorrel.n.04", "name": "sorrel"}, + {"id": 13283, "synset": "french_sorrel.n.02", "name": "French_sorrel"}, + {"id": 13284, "synset": "spinach.n.02", "name": "spinach"}, + {"id": 13285, "synset": "taro.n.03", "name": "taro"}, + {"id": 13286, "synset": "truffle.n.02", "name": "truffle"}, + {"id": 13287, "synset": "edible_nut.n.01", "name": "edible_nut"}, + {"id": 13288, "synset": "bunya_bunya.n.02", "name": "bunya_bunya"}, + {"id": 13289, "synset": "peanut.n.04", "name": "peanut"}, + {"id": 13290, "synset": "freestone.n.01", "name": "freestone"}, + {"id": 13291, "synset": "cling.n.01", "name": "cling"}, + {"id": 13292, "synset": "windfall.n.01", "name": "windfall"}, + {"id": 13293, "synset": "crab_apple.n.03", "name": "crab_apple"}, + {"id": 13294, "synset": "eating_apple.n.01", "name": "eating_apple"}, + {"id": 13295, "synset": "baldwin.n.03", "name": "Baldwin"}, + {"id": 13296, "synset": "cortland.n.01", "name": "Cortland"}, + {"id": 13297, "synset": "cox's_orange_pippin.n.01", "name": "Cox's_Orange_Pippin"}, + {"id": 13298, "synset": "delicious.n.01", "name": "Delicious"}, + {"id": 13299, "synset": "golden_delicious.n.01", "name": "Golden_Delicious"}, + {"id": 13300, "synset": "red_delicious.n.01", "name": "Red_Delicious"}, + {"id": 13301, "synset": "empire.n.05", "name": "Empire"}, + {"id": 13302, "synset": "grimes'_golden.n.01", "name": "Grimes'_golden"}, + {"id": 13303, "synset": "jonathan.n.01", "name": "Jonathan"}, + {"id": 13304, "synset": "mcintosh.n.01", "name": "McIntosh"}, + {"id": 13305, "synset": "macoun.n.01", "name": "Macoun"}, + {"id": 13306, "synset": "northern_spy.n.01", "name": "Northern_Spy"}, + {"id": 13307, "synset": "pearmain.n.01", "name": "Pearmain"}, + {"id": 13308, "synset": "pippin.n.01", "name": "Pippin"}, + {"id": 13309, "synset": "prima.n.01", "name": "Prima"}, + {"id": 13310, "synset": "stayman.n.01", "name": "Stayman"}, + {"id": 13311, "synset": "winesap.n.01", "name": "Winesap"}, + {"id": 13312, "synset": "stayman_winesap.n.01", "name": "Stayman_Winesap"}, + {"id": 13313, "synset": "cooking_apple.n.01", "name": "cooking_apple"}, + {"id": 13314, "synset": "bramley's_seedling.n.01", "name": "Bramley's_Seedling"}, + {"id": 13315, "synset": "granny_smith.n.01", "name": "Granny_Smith"}, + { + "id": 13316, + "synset": "lane's_prince_albert.n.01", + "name": "Lane's_Prince_Albert", + }, + {"id": 13317, "synset": "newtown_wonder.n.01", "name": "Newtown_Wonder"}, + {"id": 13318, "synset": "rome_beauty.n.01", "name": "Rome_Beauty"}, + {"id": 13319, "synset": "berry.n.01", "name": "berry"}, + {"id": 13320, "synset": "bilberry.n.03", "name": "bilberry"}, + {"id": 13321, "synset": "huckleberry.n.03", "name": "huckleberry"}, + {"id": 13322, "synset": "wintergreen.n.03", "name": "wintergreen"}, + {"id": 13323, "synset": "cranberry.n.02", "name": "cranberry"}, + {"id": 13324, "synset": "lingonberry.n.02", "name": "lingonberry"}, + {"id": 13325, "synset": "currant.n.01", "name": "currant"}, + {"id": 13326, "synset": "gooseberry.n.02", "name": "gooseberry"}, + {"id": 13327, "synset": "black_currant.n.02", "name": "black_currant"}, + {"id": 13328, "synset": "red_currant.n.02", "name": "red_currant"}, + {"id": 13329, "synset": "boysenberry.n.02", "name": "boysenberry"}, + {"id": 13330, "synset": "dewberry.n.02", "name": "dewberry"}, + {"id": 13331, "synset": "loganberry.n.02", "name": "loganberry"}, + {"id": 13332, "synset": "saskatoon.n.02", "name": "saskatoon"}, + {"id": 13333, "synset": "sugarberry.n.02", "name": "sugarberry"}, + {"id": 13334, "synset": "acerola.n.02", "name": "acerola"}, + {"id": 13335, "synset": "carambola.n.02", "name": "carambola"}, + {"id": 13336, "synset": "ceriman.n.02", "name": "ceriman"}, + {"id": 13337, "synset": "carissa_plum.n.01", "name": "carissa_plum"}, + {"id": 13338, "synset": "citrus.n.01", "name": "citrus"}, + {"id": 13339, "synset": "temple_orange.n.02", "name": "temple_orange"}, + {"id": 13340, "synset": "clementine.n.02", "name": "clementine"}, + {"id": 13341, "synset": "satsuma.n.02", "name": "satsuma"}, + {"id": 13342, "synset": "tangerine.n.02", "name": "tangerine"}, + {"id": 13343, "synset": "tangelo.n.02", "name": "tangelo"}, + {"id": 13344, "synset": "bitter_orange.n.02", "name": "bitter_orange"}, + {"id": 13345, "synset": "sweet_orange.n.01", "name": "sweet_orange"}, + {"id": 13346, "synset": "jaffa_orange.n.01", "name": "Jaffa_orange"}, + {"id": 13347, "synset": "navel_orange.n.01", "name": "navel_orange"}, + {"id": 13348, "synset": "valencia_orange.n.01", "name": "Valencia_orange"}, + {"id": 13349, "synset": "kumquat.n.02", "name": "kumquat"}, + {"id": 13350, "synset": "key_lime.n.01", "name": "key_lime"}, + {"id": 13351, "synset": "grapefruit.n.02", "name": "grapefruit"}, + {"id": 13352, "synset": "pomelo.n.02", "name": "pomelo"}, + {"id": 13353, "synset": "citrange.n.02", "name": "citrange"}, + {"id": 13354, "synset": "citron.n.01", "name": "citron"}, + {"id": 13355, "synset": "jordan_almond.n.02", "name": "Jordan_almond"}, + {"id": 13356, "synset": "nectarine.n.02", "name": "nectarine"}, + {"id": 13357, "synset": "pitahaya.n.02", "name": "pitahaya"}, + {"id": 13358, "synset": "plum.n.02", "name": "plum"}, + {"id": 13359, "synset": "damson.n.01", "name": "damson"}, + {"id": 13360, "synset": "greengage.n.01", "name": "greengage"}, + {"id": 13361, "synset": "beach_plum.n.02", "name": "beach_plum"}, + {"id": 13362, "synset": "sloe.n.03", "name": "sloe"}, + {"id": 13363, "synset": "victoria_plum.n.01", "name": "Victoria_plum"}, + {"id": 13364, "synset": "dried_fruit.n.01", "name": "dried_fruit"}, + {"id": 13365, "synset": "dried_apricot.n.01", "name": "dried_apricot"}, + {"id": 13366, "synset": "raisin.n.01", "name": "raisin"}, + {"id": 13367, "synset": "seedless_raisin.n.01", "name": "seedless_raisin"}, + {"id": 13368, "synset": "seeded_raisin.n.01", "name": "seeded_raisin"}, + {"id": 13369, "synset": "currant.n.03", "name": "currant"}, + {"id": 13370, "synset": "anchovy_pear.n.02", "name": "anchovy_pear"}, + {"id": 13371, "synset": "passion_fruit.n.01", "name": "passion_fruit"}, + {"id": 13372, "synset": "granadilla.n.04", "name": "granadilla"}, + {"id": 13373, "synset": "sweet_calabash.n.02", "name": "sweet_calabash"}, + {"id": 13374, "synset": "bell_apple.n.01", "name": "bell_apple"}, + {"id": 13375, "synset": "breadfruit.n.02", "name": "breadfruit"}, + {"id": 13376, "synset": "jackfruit.n.02", "name": "jackfruit"}, + {"id": 13377, "synset": "cacao_bean.n.01", "name": "cacao_bean"}, + {"id": 13378, "synset": "cocoa.n.02", "name": "cocoa"}, + {"id": 13379, "synset": "canistel.n.02", "name": "canistel"}, + {"id": 13380, "synset": "melon_ball.n.01", "name": "melon_ball"}, + {"id": 13381, "synset": "muskmelon.n.02", "name": "muskmelon"}, + {"id": 13382, "synset": "winter_melon.n.02", "name": "winter_melon"}, + {"id": 13383, "synset": "honeydew.n.01", "name": "honeydew"}, + {"id": 13384, "synset": "persian_melon.n.02", "name": "Persian_melon"}, + {"id": 13385, "synset": "net_melon.n.02", "name": "net_melon"}, + {"id": 13386, "synset": "casaba.n.01", "name": "casaba"}, + {"id": 13387, "synset": "sweet_cherry.n.02", "name": "sweet_cherry"}, + {"id": 13388, "synset": "bing_cherry.n.01", "name": "bing_cherry"}, + {"id": 13389, "synset": "heart_cherry.n.02", "name": "heart_cherry"}, + {"id": 13390, "synset": "blackheart.n.02", "name": "blackheart"}, + {"id": 13391, "synset": "capulin.n.02", "name": "capulin"}, + {"id": 13392, "synset": "sour_cherry.n.03", "name": "sour_cherry"}, + {"id": 13393, "synset": "amarelle.n.02", "name": "amarelle"}, + {"id": 13394, "synset": "morello.n.02", "name": "morello"}, + {"id": 13395, "synset": "cocoa_plum.n.02", "name": "cocoa_plum"}, + {"id": 13396, "synset": "gherkin.n.01", "name": "gherkin"}, + {"id": 13397, "synset": "fox_grape.n.02", "name": "fox_grape"}, + {"id": 13398, "synset": "concord_grape.n.01", "name": "Concord_grape"}, + {"id": 13399, "synset": "catawba.n.02", "name": "Catawba"}, + {"id": 13400, "synset": "muscadine.n.02", "name": "muscadine"}, + {"id": 13401, "synset": "scuppernong.n.01", "name": "scuppernong"}, + {"id": 13402, "synset": "slipskin_grape.n.01", "name": "slipskin_grape"}, + {"id": 13403, "synset": "vinifera_grape.n.02", "name": "vinifera_grape"}, + {"id": 13404, "synset": "emperor.n.02", "name": "emperor"}, + {"id": 13405, "synset": "muscat.n.04", "name": "muscat"}, + {"id": 13406, "synset": "ribier.n.01", "name": "ribier"}, + {"id": 13407, "synset": "sultana.n.01", "name": "sultana"}, + {"id": 13408, "synset": "tokay.n.02", "name": "Tokay"}, + {"id": 13409, "synset": "flame_tokay.n.01", "name": "flame_tokay"}, + {"id": 13410, "synset": "thompson_seedless.n.01", "name": "Thompson_Seedless"}, + {"id": 13411, "synset": "custard_apple.n.02", "name": "custard_apple"}, + {"id": 13412, "synset": "cherimoya.n.02", "name": "cherimoya"}, + {"id": 13413, "synset": "soursop.n.02", "name": "soursop"}, + {"id": 13414, "synset": "sweetsop.n.02", "name": "sweetsop"}, + {"id": 13415, "synset": "ilama.n.02", "name": "ilama"}, + {"id": 13416, "synset": "pond_apple.n.02", "name": "pond_apple"}, + {"id": 13417, "synset": "papaw.n.02", "name": "papaw"}, + {"id": 13418, "synset": "kai_apple.n.01", "name": "kai_apple"}, + {"id": 13419, "synset": "ketembilla.n.02", "name": "ketembilla"}, + {"id": 13420, "synset": "ackee.n.01", "name": "ackee"}, + {"id": 13421, "synset": "durian.n.02", "name": "durian"}, + {"id": 13422, "synset": "feijoa.n.02", "name": "feijoa"}, + {"id": 13423, "synset": "genip.n.02", "name": "genip"}, + {"id": 13424, "synset": "genipap.n.01", "name": "genipap"}, + {"id": 13425, "synset": "loquat.n.02", "name": "loquat"}, + {"id": 13426, "synset": "mangosteen.n.02", "name": "mangosteen"}, + {"id": 13427, "synset": "mango.n.02", "name": "mango"}, + {"id": 13428, "synset": "sapodilla.n.02", "name": "sapodilla"}, + {"id": 13429, "synset": "sapote.n.02", "name": "sapote"}, + {"id": 13430, "synset": "tamarind.n.02", "name": "tamarind"}, + {"id": 13431, "synset": "elderberry.n.02", "name": "elderberry"}, + {"id": 13432, "synset": "guava.n.03", "name": "guava"}, + {"id": 13433, "synset": "mombin.n.02", "name": "mombin"}, + {"id": 13434, "synset": "hog_plum.n.04", "name": "hog_plum"}, + {"id": 13435, "synset": "hog_plum.n.03", "name": "hog_plum"}, + {"id": 13436, "synset": "jaboticaba.n.02", "name": "jaboticaba"}, + {"id": 13437, "synset": "jujube.n.02", "name": "jujube"}, + {"id": 13438, "synset": "litchi.n.02", "name": "litchi"}, + {"id": 13439, "synset": "longanberry.n.02", "name": "longanberry"}, + {"id": 13440, "synset": "mamey.n.02", "name": "mamey"}, + {"id": 13441, "synset": "marang.n.02", "name": "marang"}, + {"id": 13442, "synset": "medlar.n.04", "name": "medlar"}, + {"id": 13443, "synset": "medlar.n.03", "name": "medlar"}, + {"id": 13444, "synset": "mulberry.n.02", "name": "mulberry"}, + {"id": 13445, "synset": "olive.n.04", "name": "olive"}, + {"id": 13446, "synset": "black_olive.n.01", "name": "black_olive"}, + {"id": 13447, "synset": "green_olive.n.01", "name": "green_olive"}, + {"id": 13448, "synset": "bosc.n.01", "name": "bosc"}, + {"id": 13449, "synset": "anjou.n.02", "name": "anjou"}, + {"id": 13450, "synset": "bartlett.n.03", "name": "bartlett"}, + {"id": 13451, "synset": "seckel.n.01", "name": "seckel"}, + {"id": 13452, "synset": "plantain.n.03", "name": "plantain"}, + {"id": 13453, "synset": "plumcot.n.02", "name": "plumcot"}, + {"id": 13454, "synset": "pomegranate.n.02", "name": "pomegranate"}, + {"id": 13455, "synset": "prickly_pear.n.02", "name": "prickly_pear"}, + {"id": 13456, "synset": "barbados_gooseberry.n.02", "name": "Barbados_gooseberry"}, + {"id": 13457, "synset": "quandong.n.04", "name": "quandong"}, + {"id": 13458, "synset": "quandong_nut.n.01", "name": "quandong_nut"}, + {"id": 13459, "synset": "quince.n.02", "name": "quince"}, + {"id": 13460, "synset": "rambutan.n.02", "name": "rambutan"}, + {"id": 13461, "synset": "pulasan.n.02", "name": "pulasan"}, + {"id": 13462, "synset": "rose_apple.n.02", "name": "rose_apple"}, + {"id": 13463, "synset": "sorb.n.01", "name": "sorb"}, + {"id": 13464, "synset": "sour_gourd.n.02", "name": "sour_gourd"}, + {"id": 13465, "synset": "edible_seed.n.01", "name": "edible_seed"}, + {"id": 13466, "synset": "pumpkin_seed.n.01", "name": "pumpkin_seed"}, + {"id": 13467, "synset": "betel_nut.n.01", "name": "betel_nut"}, + {"id": 13468, "synset": "beechnut.n.01", "name": "beechnut"}, + {"id": 13469, "synset": "walnut.n.01", "name": "walnut"}, + {"id": 13470, "synset": "black_walnut.n.02", "name": "black_walnut"}, + {"id": 13471, "synset": "english_walnut.n.02", "name": "English_walnut"}, + {"id": 13472, "synset": "brazil_nut.n.02", "name": "brazil_nut"}, + {"id": 13473, "synset": "butternut.n.02", "name": "butternut"}, + {"id": 13474, "synset": "souari_nut.n.02", "name": "souari_nut"}, + {"id": 13475, "synset": "cashew.n.02", "name": "cashew"}, + {"id": 13476, "synset": "chestnut.n.03", "name": "chestnut"}, + {"id": 13477, "synset": "chincapin.n.01", "name": "chincapin"}, + {"id": 13478, "synset": "hazelnut.n.02", "name": "hazelnut"}, + {"id": 13479, "synset": "coconut_milk.n.02", "name": "coconut_milk"}, + {"id": 13480, "synset": "grugru_nut.n.01", "name": "grugru_nut"}, + {"id": 13481, "synset": "hickory_nut.n.01", "name": "hickory_nut"}, + {"id": 13482, "synset": "cola_extract.n.01", "name": "cola_extract"}, + {"id": 13483, "synset": "macadamia_nut.n.02", "name": "macadamia_nut"}, + {"id": 13484, "synset": "pecan.n.03", "name": "pecan"}, + {"id": 13485, "synset": "pine_nut.n.01", "name": "pine_nut"}, + {"id": 13486, "synset": "pistachio.n.02", "name": "pistachio"}, + {"id": 13487, "synset": "sunflower_seed.n.01", "name": "sunflower_seed"}, + {"id": 13488, "synset": "anchovy_paste.n.01", "name": "anchovy_paste"}, + {"id": 13489, "synset": "rollmops.n.01", "name": "rollmops"}, + {"id": 13490, "synset": "feed.n.01", "name": "feed"}, + {"id": 13491, "synset": "cattle_cake.n.01", "name": "cattle_cake"}, + {"id": 13492, "synset": "creep_feed.n.01", "name": "creep_feed"}, + {"id": 13493, "synset": "fodder.n.02", "name": "fodder"}, + {"id": 13494, "synset": "feed_grain.n.01", "name": "feed_grain"}, + {"id": 13495, "synset": "eatage.n.01", "name": "eatage"}, + {"id": 13496, "synset": "silage.n.01", "name": "silage"}, + {"id": 13497, "synset": "oil_cake.n.01", "name": "oil_cake"}, + {"id": 13498, "synset": "oil_meal.n.01", "name": "oil_meal"}, + {"id": 13499, "synset": "alfalfa.n.02", "name": "alfalfa"}, + {"id": 13500, "synset": "broad_bean.n.03", "name": "broad_bean"}, + {"id": 13501, "synset": "hay.n.01", "name": "hay"}, + {"id": 13502, "synset": "timothy.n.03", "name": "timothy"}, + {"id": 13503, "synset": "stover.n.01", "name": "stover"}, + {"id": 13504, "synset": "grain.n.02", "name": "grain"}, + {"id": 13505, "synset": "grist.n.01", "name": "grist"}, + {"id": 13506, "synset": "groats.n.01", "name": "groats"}, + {"id": 13507, "synset": "millet.n.03", "name": "millet"}, + {"id": 13508, "synset": "barley.n.01", "name": "barley"}, + {"id": 13509, "synset": "pearl_barley.n.01", "name": "pearl_barley"}, + {"id": 13510, "synset": "buckwheat.n.02", "name": "buckwheat"}, + {"id": 13511, "synset": "bulgur.n.01", "name": "bulgur"}, + {"id": 13512, "synset": "wheat.n.02", "name": "wheat"}, + {"id": 13513, "synset": "cracked_wheat.n.01", "name": "cracked_wheat"}, + {"id": 13514, "synset": "stodge.n.01", "name": "stodge"}, + {"id": 13515, "synset": "wheat_germ.n.01", "name": "wheat_germ"}, + {"id": 13516, "synset": "oat.n.02", "name": "oat"}, + {"id": 13517, "synset": "rice.n.01", "name": "rice"}, + {"id": 13518, "synset": "brown_rice.n.01", "name": "brown_rice"}, + {"id": 13519, "synset": "white_rice.n.01", "name": "white_rice"}, + {"id": 13520, "synset": "wild_rice.n.02", "name": "wild_rice"}, + {"id": 13521, "synset": "paddy.n.03", "name": "paddy"}, + {"id": 13522, "synset": "slop.n.01", "name": "slop"}, + {"id": 13523, "synset": "mash.n.02", "name": "mash"}, + {"id": 13524, "synset": "chicken_feed.n.01", "name": "chicken_feed"}, + {"id": 13525, "synset": "cud.n.01", "name": "cud"}, + {"id": 13526, "synset": "bird_feed.n.01", "name": "bird_feed"}, + {"id": 13527, "synset": "petfood.n.01", "name": "petfood"}, + {"id": 13528, "synset": "dog_food.n.01", "name": "dog_food"}, + {"id": 13529, "synset": "cat_food.n.01", "name": "cat_food"}, + {"id": 13530, "synset": "canary_seed.n.01", "name": "canary_seed"}, + {"id": 13531, "synset": "tossed_salad.n.01", "name": "tossed_salad"}, + {"id": 13532, "synset": "green_salad.n.01", "name": "green_salad"}, + {"id": 13533, "synset": "caesar_salad.n.01", "name": "Caesar_salad"}, + {"id": 13534, "synset": "salmagundi.n.02", "name": "salmagundi"}, + {"id": 13535, "synset": "salad_nicoise.n.01", "name": "salad_nicoise"}, + {"id": 13536, "synset": "combination_salad.n.01", "name": "combination_salad"}, + {"id": 13537, "synset": "chef's_salad.n.01", "name": "chef's_salad"}, + {"id": 13538, "synset": "potato_salad.n.01", "name": "potato_salad"}, + {"id": 13539, "synset": "pasta_salad.n.01", "name": "pasta_salad"}, + {"id": 13540, "synset": "macaroni_salad.n.01", "name": "macaroni_salad"}, + {"id": 13541, "synset": "fruit_salad.n.01", "name": "fruit_salad"}, + {"id": 13542, "synset": "waldorf_salad.n.01", "name": "Waldorf_salad"}, + {"id": 13543, "synset": "crab_louis.n.01", "name": "crab_Louis"}, + {"id": 13544, "synset": "herring_salad.n.01", "name": "herring_salad"}, + {"id": 13545, "synset": "tuna_fish_salad.n.01", "name": "tuna_fish_salad"}, + {"id": 13546, "synset": "chicken_salad.n.01", "name": "chicken_salad"}, + {"id": 13547, "synset": "aspic.n.01", "name": "aspic"}, + {"id": 13548, "synset": "molded_salad.n.01", "name": "molded_salad"}, + {"id": 13549, "synset": "tabbouleh.n.01", "name": "tabbouleh"}, + {"id": 13550, "synset": "ingredient.n.03", "name": "ingredient"}, + {"id": 13551, "synset": "flavorer.n.01", "name": "flavorer"}, + {"id": 13552, "synset": "bouillon_cube.n.01", "name": "bouillon_cube"}, + {"id": 13553, "synset": "herb.n.02", "name": "herb"}, + {"id": 13554, "synset": "fines_herbes.n.01", "name": "fines_herbes"}, + {"id": 13555, "synset": "spice.n.02", "name": "spice"}, + {"id": 13556, "synset": "spearmint_oil.n.01", "name": "spearmint_oil"}, + {"id": 13557, "synset": "lemon_oil.n.01", "name": "lemon_oil"}, + {"id": 13558, "synset": "wintergreen_oil.n.01", "name": "wintergreen_oil"}, + {"id": 13559, "synset": "salt.n.02", "name": "salt"}, + {"id": 13560, "synset": "celery_salt.n.01", "name": "celery_salt"}, + {"id": 13561, "synset": "onion_salt.n.01", "name": "onion_salt"}, + {"id": 13562, "synset": "seasoned_salt.n.01", "name": "seasoned_salt"}, + {"id": 13563, "synset": "sour_salt.n.01", "name": "sour_salt"}, + {"id": 13564, "synset": "five_spice_powder.n.01", "name": "five_spice_powder"}, + {"id": 13565, "synset": "allspice.n.03", "name": "allspice"}, + {"id": 13566, "synset": "cinnamon.n.03", "name": "cinnamon"}, + {"id": 13567, "synset": "stick_cinnamon.n.01", "name": "stick_cinnamon"}, + {"id": 13568, "synset": "clove.n.04", "name": "clove"}, + {"id": 13569, "synset": "cumin.n.02", "name": "cumin"}, + {"id": 13570, "synset": "fennel.n.04", "name": "fennel"}, + {"id": 13571, "synset": "ginger.n.02", "name": "ginger"}, + {"id": 13572, "synset": "mace.n.03", "name": "mace"}, + {"id": 13573, "synset": "nutmeg.n.02", "name": "nutmeg"}, + {"id": 13574, "synset": "black_pepper.n.02", "name": "black_pepper"}, + {"id": 13575, "synset": "white_pepper.n.02", "name": "white_pepper"}, + {"id": 13576, "synset": "sassafras.n.02", "name": "sassafras"}, + {"id": 13577, "synset": "basil.n.03", "name": "basil"}, + {"id": 13578, "synset": "bay_leaf.n.01", "name": "bay_leaf"}, + {"id": 13579, "synset": "borage.n.02", "name": "borage"}, + {"id": 13580, "synset": "hyssop.n.02", "name": "hyssop"}, + {"id": 13581, "synset": "caraway.n.02", "name": "caraway"}, + {"id": 13582, "synset": "chervil.n.02", "name": "chervil"}, + {"id": 13583, "synset": "chives.n.02", "name": "chives"}, + {"id": 13584, "synset": "comfrey.n.02", "name": "comfrey"}, + {"id": 13585, "synset": "coriander.n.03", "name": "coriander"}, + {"id": 13586, "synset": "coriander.n.02", "name": "coriander"}, + {"id": 13587, "synset": "costmary.n.02", "name": "costmary"}, + {"id": 13588, "synset": "fennel.n.03", "name": "fennel"}, + {"id": 13589, "synset": "fennel.n.02", "name": "fennel"}, + {"id": 13590, "synset": "fennel_seed.n.01", "name": "fennel_seed"}, + {"id": 13591, "synset": "fenugreek.n.02", "name": "fenugreek"}, + {"id": 13592, "synset": "clove.n.03", "name": "clove"}, + {"id": 13593, "synset": "garlic_chive.n.02", "name": "garlic_chive"}, + {"id": 13594, "synset": "lemon_balm.n.02", "name": "lemon_balm"}, + {"id": 13595, "synset": "lovage.n.02", "name": "lovage"}, + {"id": 13596, "synset": "marjoram.n.02", "name": "marjoram"}, + {"id": 13597, "synset": "mint.n.04", "name": "mint"}, + {"id": 13598, "synset": "mustard_seed.n.01", "name": "mustard_seed"}, + {"id": 13599, "synset": "mustard.n.02", "name": "mustard"}, + {"id": 13600, "synset": "chinese_mustard.n.02", "name": "Chinese_mustard"}, + {"id": 13601, "synset": "nasturtium.n.03", "name": "nasturtium"}, + {"id": 13602, "synset": "parsley.n.02", "name": "parsley"}, + {"id": 13603, "synset": "salad_burnet.n.02", "name": "salad_burnet"}, + {"id": 13604, "synset": "rosemary.n.02", "name": "rosemary"}, + {"id": 13605, "synset": "rue.n.02", "name": "rue"}, + {"id": 13606, "synset": "sage.n.02", "name": "sage"}, + {"id": 13607, "synset": "clary_sage.n.02", "name": "clary_sage"}, + {"id": 13608, "synset": "savory.n.03", "name": "savory"}, + {"id": 13609, "synset": "summer_savory.n.02", "name": "summer_savory"}, + {"id": 13610, "synset": "winter_savory.n.02", "name": "winter_savory"}, + {"id": 13611, "synset": "sweet_woodruff.n.02", "name": "sweet_woodruff"}, + {"id": 13612, "synset": "sweet_cicely.n.03", "name": "sweet_cicely"}, + {"id": 13613, "synset": "tarragon.n.02", "name": "tarragon"}, + {"id": 13614, "synset": "thyme.n.02", "name": "thyme"}, + {"id": 13615, "synset": "turmeric.n.02", "name": "turmeric"}, + {"id": 13616, "synset": "caper.n.02", "name": "caper"}, + {"id": 13617, "synset": "catsup.n.01", "name": "catsup"}, + {"id": 13618, "synset": "cardamom.n.02", "name": "cardamom"}, + {"id": 13619, "synset": "chili_powder.n.01", "name": "chili_powder"}, + {"id": 13620, "synset": "chili_sauce.n.01", "name": "chili_sauce"}, + {"id": 13621, "synset": "chutney.n.01", "name": "chutney"}, + {"id": 13622, "synset": "steak_sauce.n.01", "name": "steak_sauce"}, + {"id": 13623, "synset": "taco_sauce.n.01", "name": "taco_sauce"}, + {"id": 13624, "synset": "mint_sauce.n.01", "name": "mint_sauce"}, + {"id": 13625, "synset": "cranberry_sauce.n.01", "name": "cranberry_sauce"}, + {"id": 13626, "synset": "curry_powder.n.01", "name": "curry_powder"}, + {"id": 13627, "synset": "curry.n.01", "name": "curry"}, + {"id": 13628, "synset": "lamb_curry.n.01", "name": "lamb_curry"}, + {"id": 13629, "synset": "duck_sauce.n.01", "name": "duck_sauce"}, + {"id": 13630, "synset": "horseradish.n.03", "name": "horseradish"}, + {"id": 13631, "synset": "marinade.n.01", "name": "marinade"}, + {"id": 13632, "synset": "paprika.n.02", "name": "paprika"}, + {"id": 13633, "synset": "spanish_paprika.n.01", "name": "Spanish_paprika"}, + {"id": 13634, "synset": "dill_pickle.n.01", "name": "dill_pickle"}, + { + "id": 13635, + "synset": "bread_and_butter_pickle.n.01", + "name": "bread_and_butter_pickle", + }, + {"id": 13636, "synset": "pickle_relish.n.01", "name": "pickle_relish"}, + {"id": 13637, "synset": "piccalilli.n.01", "name": "piccalilli"}, + {"id": 13638, "synset": "sweet_pickle.n.01", "name": "sweet_pickle"}, + {"id": 13639, "synset": "soy_sauce.n.01", "name": "soy_sauce"}, + {"id": 13640, "synset": "tomato_paste.n.01", "name": "tomato_paste"}, + {"id": 13641, "synset": "angelica.n.03", "name": "angelica"}, + {"id": 13642, "synset": "angelica.n.02", "name": "angelica"}, + {"id": 13643, "synset": "almond_extract.n.01", "name": "almond_extract"}, + {"id": 13644, "synset": "anise.n.02", "name": "anise"}, + {"id": 13645, "synset": "chinese_anise.n.02", "name": "Chinese_anise"}, + {"id": 13646, "synset": "juniper_berries.n.01", "name": "juniper_berries"}, + {"id": 13647, "synset": "saffron.n.02", "name": "saffron"}, + {"id": 13648, "synset": "sesame_seed.n.01", "name": "sesame_seed"}, + {"id": 13649, "synset": "caraway_seed.n.01", "name": "caraway_seed"}, + {"id": 13650, "synset": "poppy_seed.n.01", "name": "poppy_seed"}, + {"id": 13651, "synset": "dill.n.02", "name": "dill"}, + {"id": 13652, "synset": "dill_seed.n.01", "name": "dill_seed"}, + {"id": 13653, "synset": "celery_seed.n.01", "name": "celery_seed"}, + {"id": 13654, "synset": "lemon_extract.n.01", "name": "lemon_extract"}, + { + "id": 13655, + "synset": "monosodium_glutamate.n.01", + "name": "monosodium_glutamate", + }, + {"id": 13656, "synset": "vanilla_bean.n.01", "name": "vanilla_bean"}, + {"id": 13657, "synset": "cider_vinegar.n.01", "name": "cider_vinegar"}, + {"id": 13658, "synset": "wine_vinegar.n.01", "name": "wine_vinegar"}, + {"id": 13659, "synset": "sauce.n.01", "name": "sauce"}, + {"id": 13660, "synset": "anchovy_sauce.n.01", "name": "anchovy_sauce"}, + {"id": 13661, "synset": "hard_sauce.n.01", "name": "hard_sauce"}, + {"id": 13662, "synset": "horseradish_sauce.n.01", "name": "horseradish_sauce"}, + { + "id": 13663, + "synset": "bolognese_pasta_sauce.n.01", + "name": "bolognese_pasta_sauce", + }, + {"id": 13664, "synset": "carbonara.n.01", "name": "carbonara"}, + {"id": 13665, "synset": "tomato_sauce.n.01", "name": "tomato_sauce"}, + {"id": 13666, "synset": "tartare_sauce.n.01", "name": "tartare_sauce"}, + {"id": 13667, "synset": "wine_sauce.n.01", "name": "wine_sauce"}, + {"id": 13668, "synset": "marchand_de_vin.n.01", "name": "marchand_de_vin"}, + {"id": 13669, "synset": "bread_sauce.n.01", "name": "bread_sauce"}, + {"id": 13670, "synset": "plum_sauce.n.01", "name": "plum_sauce"}, + {"id": 13671, "synset": "peach_sauce.n.01", "name": "peach_sauce"}, + {"id": 13672, "synset": "apricot_sauce.n.01", "name": "apricot_sauce"}, + {"id": 13673, "synset": "pesto.n.01", "name": "pesto"}, + {"id": 13674, "synset": "ravigote.n.01", "name": "ravigote"}, + {"id": 13675, "synset": "remoulade_sauce.n.01", "name": "remoulade_sauce"}, + {"id": 13676, "synset": "dressing.n.01", "name": "dressing"}, + {"id": 13677, "synset": "sauce_louis.n.01", "name": "sauce_Louis"}, + { + "id": 13678, + "synset": "bleu_cheese_dressing.n.01", + "name": "bleu_cheese_dressing", + }, + { + "id": 13679, + "synset": "blue_cheese_dressing.n.01", + "name": "blue_cheese_dressing", + }, + {"id": 13680, "synset": "french_dressing.n.01", "name": "French_dressing"}, + {"id": 13681, "synset": "lorenzo_dressing.n.01", "name": "Lorenzo_dressing"}, + {"id": 13682, "synset": "anchovy_dressing.n.01", "name": "anchovy_dressing"}, + {"id": 13683, "synset": "italian_dressing.n.01", "name": "Italian_dressing"}, + { + "id": 13684, + "synset": "half-and-half_dressing.n.01", + "name": "half-and-half_dressing", + }, + {"id": 13685, "synset": "mayonnaise.n.01", "name": "mayonnaise"}, + {"id": 13686, "synset": "green_mayonnaise.n.01", "name": "green_mayonnaise"}, + {"id": 13687, "synset": "aioli.n.01", "name": "aioli"}, + {"id": 13688, "synset": "russian_dressing.n.01", "name": "Russian_dressing"}, + {"id": 13689, "synset": "salad_cream.n.01", "name": "salad_cream"}, + { + "id": 13690, + "synset": "thousand_island_dressing.n.01", + "name": "Thousand_Island_dressing", + }, + {"id": 13691, "synset": "barbecue_sauce.n.01", "name": "barbecue_sauce"}, + {"id": 13692, "synset": "hollandaise.n.01", "name": "hollandaise"}, + {"id": 13693, "synset": "bearnaise.n.01", "name": "bearnaise"}, + {"id": 13694, "synset": "bercy.n.01", "name": "Bercy"}, + {"id": 13695, "synset": "bordelaise.n.01", "name": "bordelaise"}, + {"id": 13696, "synset": "bourguignon.n.01", "name": "bourguignon"}, + {"id": 13697, "synset": "brown_sauce.n.02", "name": "brown_sauce"}, + {"id": 13698, "synset": "espagnole.n.01", "name": "Espagnole"}, + {"id": 13699, "synset": "chinese_brown_sauce.n.01", "name": "Chinese_brown_sauce"}, + {"id": 13700, "synset": "blanc.n.01", "name": "blanc"}, + {"id": 13701, "synset": "cheese_sauce.n.01", "name": "cheese_sauce"}, + {"id": 13702, "synset": "chocolate_sauce.n.01", "name": "chocolate_sauce"}, + {"id": 13703, "synset": "hot-fudge_sauce.n.01", "name": "hot-fudge_sauce"}, + {"id": 13704, "synset": "cocktail_sauce.n.01", "name": "cocktail_sauce"}, + {"id": 13705, "synset": "colbert.n.01", "name": "Colbert"}, + {"id": 13706, "synset": "white_sauce.n.01", "name": "white_sauce"}, + {"id": 13707, "synset": "cream_sauce.n.01", "name": "cream_sauce"}, + {"id": 13708, "synset": "mornay_sauce.n.01", "name": "Mornay_sauce"}, + {"id": 13709, "synset": "demiglace.n.01", "name": "demiglace"}, + {"id": 13710, "synset": "gravy.n.02", "name": "gravy"}, + {"id": 13711, "synset": "gravy.n.01", "name": "gravy"}, + {"id": 13712, "synset": "spaghetti_sauce.n.01", "name": "spaghetti_sauce"}, + {"id": 13713, "synset": "marinara.n.01", "name": "marinara"}, + {"id": 13714, "synset": "mole.n.03", "name": "mole"}, + {"id": 13715, "synset": "hunter's_sauce.n.01", "name": "hunter's_sauce"}, + {"id": 13716, "synset": "mushroom_sauce.n.01", "name": "mushroom_sauce"}, + {"id": 13717, "synset": "mustard_sauce.n.01", "name": "mustard_sauce"}, + {"id": 13718, "synset": "nantua.n.01", "name": "Nantua"}, + {"id": 13719, "synset": "hungarian_sauce.n.01", "name": "Hungarian_sauce"}, + {"id": 13720, "synset": "pepper_sauce.n.01", "name": "pepper_sauce"}, + {"id": 13721, "synset": "roux.n.01", "name": "roux"}, + {"id": 13722, "synset": "smitane.n.01", "name": "Smitane"}, + {"id": 13723, "synset": "soubise.n.01", "name": "Soubise"}, + {"id": 13724, "synset": "lyonnaise_sauce.n.01", "name": "Lyonnaise_sauce"}, + {"id": 13725, "synset": "veloute.n.01", "name": "veloute"}, + {"id": 13726, "synset": "allemande.n.01", "name": "allemande"}, + {"id": 13727, "synset": "caper_sauce.n.01", "name": "caper_sauce"}, + {"id": 13728, "synset": "poulette.n.01", "name": "poulette"}, + {"id": 13729, "synset": "curry_sauce.n.01", "name": "curry_sauce"}, + {"id": 13730, "synset": "worcester_sauce.n.01", "name": "Worcester_sauce"}, + {"id": 13731, "synset": "coconut_milk.n.01", "name": "coconut_milk"}, + {"id": 13732, "synset": "egg_white.n.01", "name": "egg_white"}, + {"id": 13733, "synset": "hard-boiled_egg.n.01", "name": "hard-boiled_egg"}, + {"id": 13734, "synset": "easter_egg.n.02", "name": "Easter_egg"}, + {"id": 13735, "synset": "easter_egg.n.01", "name": "Easter_egg"}, + {"id": 13736, "synset": "chocolate_egg.n.01", "name": "chocolate_egg"}, + {"id": 13737, "synset": "candy_egg.n.01", "name": "candy_egg"}, + {"id": 13738, "synset": "poached_egg.n.01", "name": "poached_egg"}, + {"id": 13739, "synset": "scrambled_eggs.n.01", "name": "scrambled_eggs"}, + {"id": 13740, "synset": "deviled_egg.n.01", "name": "deviled_egg"}, + {"id": 13741, "synset": "shirred_egg.n.01", "name": "shirred_egg"}, + {"id": 13742, "synset": "firm_omelet.n.01", "name": "firm_omelet"}, + {"id": 13743, "synset": "french_omelet.n.01", "name": "French_omelet"}, + {"id": 13744, "synset": "fluffy_omelet.n.01", "name": "fluffy_omelet"}, + {"id": 13745, "synset": "western_omelet.n.01", "name": "western_omelet"}, + {"id": 13746, "synset": "souffle.n.01", "name": "souffle"}, + {"id": 13747, "synset": "fried_egg.n.01", "name": "fried_egg"}, + {"id": 13748, "synset": "dairy_product.n.01", "name": "dairy_product"}, + {"id": 13749, "synset": "milk.n.04", "name": "milk"}, + {"id": 13750, "synset": "sour_milk.n.01", "name": "sour_milk"}, + {"id": 13751, "synset": "formula.n.06", "name": "formula"}, + {"id": 13752, "synset": "pasteurized_milk.n.01", "name": "pasteurized_milk"}, + {"id": 13753, "synset": "cows'_milk.n.01", "name": "cows'_milk"}, + {"id": 13754, "synset": "yak's_milk.n.01", "name": "yak's_milk"}, + {"id": 13755, "synset": "goats'_milk.n.01", "name": "goats'_milk"}, + {"id": 13756, "synset": "acidophilus_milk.n.01", "name": "acidophilus_milk"}, + {"id": 13757, "synset": "raw_milk.n.01", "name": "raw_milk"}, + {"id": 13758, "synset": "scalded_milk.n.01", "name": "scalded_milk"}, + {"id": 13759, "synset": "homogenized_milk.n.01", "name": "homogenized_milk"}, + {"id": 13760, "synset": "certified_milk.n.01", "name": "certified_milk"}, + {"id": 13761, "synset": "powdered_milk.n.01", "name": "powdered_milk"}, + {"id": 13762, "synset": "nonfat_dry_milk.n.01", "name": "nonfat_dry_milk"}, + {"id": 13763, "synset": "evaporated_milk.n.01", "name": "evaporated_milk"}, + {"id": 13764, "synset": "condensed_milk.n.01", "name": "condensed_milk"}, + {"id": 13765, "synset": "skim_milk.n.01", "name": "skim_milk"}, + {"id": 13766, "synset": "semi-skimmed_milk.n.01", "name": "semi-skimmed_milk"}, + {"id": 13767, "synset": "whole_milk.n.01", "name": "whole_milk"}, + {"id": 13768, "synset": "low-fat_milk.n.01", "name": "low-fat_milk"}, + {"id": 13769, "synset": "buttermilk.n.01", "name": "buttermilk"}, + {"id": 13770, "synset": "cream.n.02", "name": "cream"}, + {"id": 13771, "synset": "clotted_cream.n.01", "name": "clotted_cream"}, + {"id": 13772, "synset": "double_creme.n.01", "name": "double_creme"}, + {"id": 13773, "synset": "half-and-half.n.01", "name": "half-and-half"}, + {"id": 13774, "synset": "heavy_cream.n.01", "name": "heavy_cream"}, + {"id": 13775, "synset": "light_cream.n.01", "name": "light_cream"}, + {"id": 13776, "synset": "whipping_cream.n.01", "name": "whipping_cream"}, + {"id": 13777, "synset": "clarified_butter.n.01", "name": "clarified_butter"}, + {"id": 13778, "synset": "ghee.n.01", "name": "ghee"}, + {"id": 13779, "synset": "brown_butter.n.01", "name": "brown_butter"}, + {"id": 13780, "synset": "meuniere_butter.n.01", "name": "Meuniere_butter"}, + {"id": 13781, "synset": "blueberry_yogurt.n.01", "name": "blueberry_yogurt"}, + {"id": 13782, "synset": "raita.n.01", "name": "raita"}, + {"id": 13783, "synset": "whey.n.02", "name": "whey"}, + {"id": 13784, "synset": "curd.n.02", "name": "curd"}, + {"id": 13785, "synset": "curd.n.01", "name": "curd"}, + {"id": 13786, "synset": "clabber.n.01", "name": "clabber"}, + {"id": 13787, "synset": "cheese.n.01", "name": "cheese"}, + {"id": 13788, "synset": "paring.n.02", "name": "paring"}, + {"id": 13789, "synset": "cream_cheese.n.01", "name": "cream_cheese"}, + {"id": 13790, "synset": "double_cream.n.01", "name": "double_cream"}, + {"id": 13791, "synset": "mascarpone.n.01", "name": "mascarpone"}, + {"id": 13792, "synset": "triple_cream.n.01", "name": "triple_cream"}, + {"id": 13793, "synset": "cottage_cheese.n.01", "name": "cottage_cheese"}, + {"id": 13794, "synset": "process_cheese.n.01", "name": "process_cheese"}, + {"id": 13795, "synset": "bleu.n.01", "name": "bleu"}, + {"id": 13796, "synset": "stilton.n.01", "name": "Stilton"}, + {"id": 13797, "synset": "roquefort.n.01", "name": "Roquefort"}, + {"id": 13798, "synset": "gorgonzola.n.01", "name": "gorgonzola"}, + {"id": 13799, "synset": "danish_blue.n.01", "name": "Danish_blue"}, + {"id": 13800, "synset": "bavarian_blue.n.01", "name": "Bavarian_blue"}, + {"id": 13801, "synset": "brie.n.01", "name": "Brie"}, + {"id": 13802, "synset": "brick_cheese.n.01", "name": "brick_cheese"}, + {"id": 13803, "synset": "camembert.n.01", "name": "Camembert"}, + {"id": 13804, "synset": "cheddar.n.02", "name": "cheddar"}, + {"id": 13805, "synset": "rat_cheese.n.01", "name": "rat_cheese"}, + {"id": 13806, "synset": "cheshire_cheese.n.01", "name": "Cheshire_cheese"}, + {"id": 13807, "synset": "double_gloucester.n.01", "name": "double_Gloucester"}, + {"id": 13808, "synset": "edam.n.01", "name": "Edam"}, + {"id": 13809, "synset": "goat_cheese.n.01", "name": "goat_cheese"}, + {"id": 13810, "synset": "gouda.n.01", "name": "Gouda"}, + {"id": 13811, "synset": "grated_cheese.n.01", "name": "grated_cheese"}, + {"id": 13812, "synset": "hand_cheese.n.01", "name": "hand_cheese"}, + {"id": 13813, "synset": "liederkranz.n.01", "name": "Liederkranz"}, + {"id": 13814, "synset": "limburger.n.01", "name": "Limburger"}, + {"id": 13815, "synset": "mozzarella.n.01", "name": "mozzarella"}, + {"id": 13816, "synset": "muenster.n.01", "name": "Muenster"}, + {"id": 13817, "synset": "parmesan.n.01", "name": "Parmesan"}, + {"id": 13818, "synset": "quark_cheese.n.01", "name": "quark_cheese"}, + {"id": 13819, "synset": "ricotta.n.01", "name": "ricotta"}, + {"id": 13820, "synset": "swiss_cheese.n.01", "name": "Swiss_cheese"}, + {"id": 13821, "synset": "emmenthal.n.01", "name": "Emmenthal"}, + {"id": 13822, "synset": "gruyere.n.01", "name": "Gruyere"}, + {"id": 13823, "synset": "sapsago.n.01", "name": "sapsago"}, + {"id": 13824, "synset": "velveeta.n.01", "name": "Velveeta"}, + {"id": 13825, "synset": "nut_butter.n.01", "name": "nut_butter"}, + {"id": 13826, "synset": "marshmallow_fluff.n.01", "name": "marshmallow_fluff"}, + {"id": 13827, "synset": "onion_butter.n.01", "name": "onion_butter"}, + {"id": 13828, "synset": "pimento_butter.n.01", "name": "pimento_butter"}, + {"id": 13829, "synset": "shrimp_butter.n.01", "name": "shrimp_butter"}, + {"id": 13830, "synset": "lobster_butter.n.01", "name": "lobster_butter"}, + {"id": 13831, "synset": "yak_butter.n.01", "name": "yak_butter"}, + {"id": 13832, "synset": "spread.n.05", "name": "spread"}, + {"id": 13833, "synset": "cheese_spread.n.01", "name": "cheese_spread"}, + {"id": 13834, "synset": "anchovy_butter.n.01", "name": "anchovy_butter"}, + {"id": 13835, "synset": "fishpaste.n.01", "name": "fishpaste"}, + {"id": 13836, "synset": "garlic_butter.n.01", "name": "garlic_butter"}, + {"id": 13837, "synset": "miso.n.01", "name": "miso"}, + {"id": 13838, "synset": "wasabi.n.02", "name": "wasabi"}, + {"id": 13839, "synset": "snail_butter.n.01", "name": "snail_butter"}, + {"id": 13840, "synset": "pate.n.01", "name": "pate"}, + {"id": 13841, "synset": "duck_pate.n.01", "name": "duck_pate"}, + {"id": 13842, "synset": "foie_gras.n.01", "name": "foie_gras"}, + {"id": 13843, "synset": "tapenade.n.01", "name": "tapenade"}, + {"id": 13844, "synset": "tahini.n.01", "name": "tahini"}, + {"id": 13845, "synset": "sweetening.n.01", "name": "sweetening"}, + {"id": 13846, "synset": "aspartame.n.01", "name": "aspartame"}, + {"id": 13847, "synset": "saccharin.n.01", "name": "saccharin"}, + {"id": 13848, "synset": "sugar.n.01", "name": "sugar"}, + {"id": 13849, "synset": "syrup.n.01", "name": "syrup"}, + {"id": 13850, "synset": "sugar_syrup.n.01", "name": "sugar_syrup"}, + {"id": 13851, "synset": "molasses.n.01", "name": "molasses"}, + {"id": 13852, "synset": "sorghum.n.03", "name": "sorghum"}, + {"id": 13853, "synset": "treacle.n.01", "name": "treacle"}, + {"id": 13854, "synset": "grenadine.n.01", "name": "grenadine"}, + {"id": 13855, "synset": "maple_syrup.n.01", "name": "maple_syrup"}, + {"id": 13856, "synset": "corn_syrup.n.01", "name": "corn_syrup"}, + {"id": 13857, "synset": "miraculous_food.n.01", "name": "miraculous_food"}, + {"id": 13858, "synset": "dough.n.01", "name": "dough"}, + {"id": 13859, "synset": "bread_dough.n.01", "name": "bread_dough"}, + {"id": 13860, "synset": "pancake_batter.n.01", "name": "pancake_batter"}, + {"id": 13861, "synset": "fritter_batter.n.01", "name": "fritter_batter"}, + {"id": 13862, "synset": "coq_au_vin.n.01", "name": "coq_au_vin"}, + {"id": 13863, "synset": "chicken_provencale.n.01", "name": "chicken_provencale"}, + {"id": 13864, "synset": "chicken_and_rice.n.01", "name": "chicken_and_rice"}, + {"id": 13865, "synset": "moo_goo_gai_pan.n.01", "name": "moo_goo_gai_pan"}, + {"id": 13866, "synset": "arroz_con_pollo.n.01", "name": "arroz_con_pollo"}, + {"id": 13867, "synset": "bacon_and_eggs.n.02", "name": "bacon_and_eggs"}, + {"id": 13868, "synset": "barbecued_spareribs.n.01", "name": "barbecued_spareribs"}, + {"id": 13869, "synset": "beef_bourguignonne.n.01", "name": "beef_Bourguignonne"}, + {"id": 13870, "synset": "beef_wellington.n.01", "name": "beef_Wellington"}, + {"id": 13871, "synset": "bitok.n.01", "name": "bitok"}, + {"id": 13872, "synset": "boiled_dinner.n.01", "name": "boiled_dinner"}, + {"id": 13873, "synset": "boston_baked_beans.n.01", "name": "Boston_baked_beans"}, + {"id": 13874, "synset": "bubble_and_squeak.n.01", "name": "bubble_and_squeak"}, + {"id": 13875, "synset": "pasta.n.01", "name": "pasta"}, + {"id": 13876, "synset": "cannelloni.n.01", "name": "cannelloni"}, + {"id": 13877, "synset": "carbonnade_flamande.n.01", "name": "carbonnade_flamande"}, + {"id": 13878, "synset": "cheese_souffle.n.01", "name": "cheese_souffle"}, + {"id": 13879, "synset": "chicken_marengo.n.01", "name": "chicken_Marengo"}, + {"id": 13880, "synset": "chicken_cordon_bleu.n.01", "name": "chicken_cordon_bleu"}, + {"id": 13881, "synset": "maryland_chicken.n.01", "name": "Maryland_chicken"}, + {"id": 13882, "synset": "chicken_paprika.n.01", "name": "chicken_paprika"}, + {"id": 13883, "synset": "chicken_tetrazzini.n.01", "name": "chicken_Tetrazzini"}, + {"id": 13884, "synset": "tetrazzini.n.01", "name": "Tetrazzini"}, + {"id": 13885, "synset": "chicken_kiev.n.01", "name": "chicken_Kiev"}, + {"id": 13886, "synset": "chili.n.01", "name": "chili"}, + {"id": 13887, "synset": "chili_dog.n.01", "name": "chili_dog"}, + {"id": 13888, "synset": "chop_suey.n.01", "name": "chop_suey"}, + {"id": 13889, "synset": "chow_mein.n.01", "name": "chow_mein"}, + {"id": 13890, "synset": "codfish_ball.n.01", "name": "codfish_ball"}, + {"id": 13891, "synset": "coquille.n.01", "name": "coquille"}, + { + "id": 13892, + "synset": "coquilles_saint-jacques.n.01", + "name": "coquilles_Saint-Jacques", + }, + {"id": 13893, "synset": "croquette.n.01", "name": "croquette"}, + {"id": 13894, "synset": "cottage_pie.n.01", "name": "cottage_pie"}, + {"id": 13895, "synset": "rissole.n.01", "name": "rissole"}, + {"id": 13896, "synset": "dolmas.n.01", "name": "dolmas"}, + {"id": 13897, "synset": "egg_foo_yong.n.01", "name": "egg_foo_yong"}, + {"id": 13898, "synset": "eggs_benedict.n.01", "name": "eggs_Benedict"}, + {"id": 13899, "synset": "enchilada.n.01", "name": "enchilada"}, + {"id": 13900, "synset": "falafel.n.01", "name": "falafel"}, + {"id": 13901, "synset": "fish_and_chips.n.01", "name": "fish_and_chips"}, + {"id": 13902, "synset": "fondue.n.02", "name": "fondue"}, + {"id": 13903, "synset": "cheese_fondue.n.01", "name": "cheese_fondue"}, + {"id": 13904, "synset": "chocolate_fondue.n.01", "name": "chocolate_fondue"}, + {"id": 13905, "synset": "fondue.n.01", "name": "fondue"}, + {"id": 13906, "synset": "beef_fondue.n.01", "name": "beef_fondue"}, + {"id": 13907, "synset": "fried_rice.n.01", "name": "fried_rice"}, + {"id": 13908, "synset": "frittata.n.01", "name": "frittata"}, + {"id": 13909, "synset": "frog_legs.n.01", "name": "frog_legs"}, + {"id": 13910, "synset": "galantine.n.01", "name": "galantine"}, + {"id": 13911, "synset": "gefilte_fish.n.01", "name": "gefilte_fish"}, + {"id": 13912, "synset": "haggis.n.01", "name": "haggis"}, + {"id": 13913, "synset": "ham_and_eggs.n.01", "name": "ham_and_eggs"}, + {"id": 13914, "synset": "hash.n.01", "name": "hash"}, + {"id": 13915, "synset": "corned_beef_hash.n.01", "name": "corned_beef_hash"}, + {"id": 13916, "synset": "jambalaya.n.01", "name": "jambalaya"}, + {"id": 13917, "synset": "kabob.n.01", "name": "kabob"}, + {"id": 13918, "synset": "kedgeree.n.01", "name": "kedgeree"}, + {"id": 13919, "synset": "souvlaki.n.01", "name": "souvlaki"}, + {"id": 13920, "synset": "seafood_newburg.n.01", "name": "seafood_Newburg"}, + {"id": 13921, "synset": "lobster_newburg.n.01", "name": "lobster_Newburg"}, + {"id": 13922, "synset": "shrimp_newburg.n.01", "name": "shrimp_Newburg"}, + {"id": 13923, "synset": "newburg_sauce.n.01", "name": "Newburg_sauce"}, + {"id": 13924, "synset": "lobster_thermidor.n.01", "name": "lobster_thermidor"}, + {"id": 13925, "synset": "lutefisk.n.01", "name": "lutefisk"}, + {"id": 13926, "synset": "macaroni_and_cheese.n.01", "name": "macaroni_and_cheese"}, + {"id": 13927, "synset": "macedoine.n.01", "name": "macedoine"}, + {"id": 13928, "synset": "porcupine_ball.n.01", "name": "porcupine_ball"}, + {"id": 13929, "synset": "swedish_meatball.n.01", "name": "Swedish_meatball"}, + {"id": 13930, "synset": "meat_loaf.n.01", "name": "meat_loaf"}, + {"id": 13931, "synset": "moussaka.n.01", "name": "moussaka"}, + {"id": 13932, "synset": "osso_buco.n.01", "name": "osso_buco"}, + {"id": 13933, "synset": "marrow.n.03", "name": "marrow"}, + { + "id": 13934, + "synset": "pheasant_under_glass.n.01", + "name": "pheasant_under_glass", + }, + {"id": 13935, "synset": "pigs_in_blankets.n.01", "name": "pigs_in_blankets"}, + {"id": 13936, "synset": "pilaf.n.01", "name": "pilaf"}, + {"id": 13937, "synset": "bulgur_pilaf.n.01", "name": "bulgur_pilaf"}, + {"id": 13938, "synset": "sausage_pizza.n.01", "name": "sausage_pizza"}, + {"id": 13939, "synset": "pepperoni_pizza.n.01", "name": "pepperoni_pizza"}, + {"id": 13940, "synset": "cheese_pizza.n.01", "name": "cheese_pizza"}, + {"id": 13941, "synset": "anchovy_pizza.n.01", "name": "anchovy_pizza"}, + {"id": 13942, "synset": "sicilian_pizza.n.01", "name": "Sicilian_pizza"}, + {"id": 13943, "synset": "poi.n.01", "name": "poi"}, + {"id": 13944, "synset": "pork_and_beans.n.01", "name": "pork_and_beans"}, + {"id": 13945, "synset": "porridge.n.01", "name": "porridge"}, + {"id": 13946, "synset": "oatmeal.n.01", "name": "oatmeal"}, + {"id": 13947, "synset": "loblolly.n.01", "name": "loblolly"}, + {"id": 13948, "synset": "potpie.n.01", "name": "potpie"}, + {"id": 13949, "synset": "rijsttaffel.n.01", "name": "rijsttaffel"}, + {"id": 13950, "synset": "risotto.n.01", "name": "risotto"}, + {"id": 13951, "synset": "roulade.n.01", "name": "roulade"}, + {"id": 13952, "synset": "fish_loaf.n.01", "name": "fish_loaf"}, + {"id": 13953, "synset": "salmon_loaf.n.01", "name": "salmon_loaf"}, + {"id": 13954, "synset": "salisbury_steak.n.01", "name": "Salisbury_steak"}, + {"id": 13955, "synset": "sauerbraten.n.01", "name": "sauerbraten"}, + {"id": 13956, "synset": "sauerkraut.n.01", "name": "sauerkraut"}, + {"id": 13957, "synset": "scallopine.n.01", "name": "scallopine"}, + {"id": 13958, "synset": "veal_scallopini.n.01", "name": "veal_scallopini"}, + {"id": 13959, "synset": "scampi.n.01", "name": "scampi"}, + {"id": 13960, "synset": "scotch_egg.n.01", "name": "Scotch_egg"}, + {"id": 13961, "synset": "scotch_woodcock.n.01", "name": "Scotch_woodcock"}, + {"id": 13962, "synset": "scrapple.n.01", "name": "scrapple"}, + { + "id": 13963, + "synset": "spaghetti_and_meatballs.n.01", + "name": "spaghetti_and_meatballs", + }, + {"id": 13964, "synset": "spanish_rice.n.01", "name": "Spanish_rice"}, + {"id": 13965, "synset": "steak_tartare.n.01", "name": "steak_tartare"}, + {"id": 13966, "synset": "pepper_steak.n.02", "name": "pepper_steak"}, + {"id": 13967, "synset": "steak_au_poivre.n.01", "name": "steak_au_poivre"}, + {"id": 13968, "synset": "beef_stroganoff.n.01", "name": "beef_Stroganoff"}, + {"id": 13969, "synset": "stuffed_cabbage.n.01", "name": "stuffed_cabbage"}, + {"id": 13970, "synset": "kishke.n.01", "name": "kishke"}, + {"id": 13971, "synset": "stuffed_peppers.n.01", "name": "stuffed_peppers"}, + {"id": 13972, "synset": "stuffed_tomato.n.02", "name": "stuffed_tomato"}, + {"id": 13973, "synset": "stuffed_tomato.n.01", "name": "stuffed_tomato"}, + {"id": 13974, "synset": "succotash.n.01", "name": "succotash"}, + {"id": 13975, "synset": "sukiyaki.n.01", "name": "sukiyaki"}, + {"id": 13976, "synset": "sashimi.n.01", "name": "sashimi"}, + {"id": 13977, "synset": "swiss_steak.n.01", "name": "Swiss_steak"}, + {"id": 13978, "synset": "tamale.n.02", "name": "tamale"}, + {"id": 13979, "synset": "tamale_pie.n.01", "name": "tamale_pie"}, + {"id": 13980, "synset": "tempura.n.01", "name": "tempura"}, + {"id": 13981, "synset": "teriyaki.n.01", "name": "teriyaki"}, + {"id": 13982, "synset": "terrine.n.01", "name": "terrine"}, + {"id": 13983, "synset": "welsh_rarebit.n.01", "name": "Welsh_rarebit"}, + {"id": 13984, "synset": "schnitzel.n.01", "name": "schnitzel"}, + {"id": 13985, "synset": "chicken_taco.n.01", "name": "chicken_taco"}, + {"id": 13986, "synset": "beef_burrito.n.01", "name": "beef_burrito"}, + {"id": 13987, "synset": "tostada.n.01", "name": "tostada"}, + {"id": 13988, "synset": "bean_tostada.n.01", "name": "bean_tostada"}, + {"id": 13989, "synset": "refried_beans.n.01", "name": "refried_beans"}, + {"id": 13990, "synset": "beverage.n.01", "name": "beverage"}, + {"id": 13991, "synset": "wish-wash.n.01", "name": "wish-wash"}, + {"id": 13992, "synset": "concoction.n.01", "name": "concoction"}, + {"id": 13993, "synset": "mix.n.01", "name": "mix"}, + {"id": 13994, "synset": "filling.n.03", "name": "filling"}, + {"id": 13995, "synset": "lekvar.n.01", "name": "lekvar"}, + {"id": 13996, "synset": "potion.n.01", "name": "potion"}, + {"id": 13997, "synset": "elixir.n.03", "name": "elixir"}, + {"id": 13998, "synset": "elixir_of_life.n.01", "name": "elixir_of_life"}, + {"id": 13999, "synset": "philter.n.01", "name": "philter"}, + {"id": 14000, "synset": "proof_spirit.n.01", "name": "proof_spirit"}, + {"id": 14001, "synset": "home_brew.n.01", "name": "home_brew"}, + {"id": 14002, "synset": "hooch.n.01", "name": "hooch"}, + {"id": 14003, "synset": "kava.n.01", "name": "kava"}, + {"id": 14004, "synset": "aperitif.n.01", "name": "aperitif"}, + {"id": 14005, "synset": "brew.n.01", "name": "brew"}, + {"id": 14006, "synset": "beer.n.01", "name": "beer"}, + {"id": 14007, "synset": "draft_beer.n.01", "name": "draft_beer"}, + {"id": 14008, "synset": "suds.n.02", "name": "suds"}, + {"id": 14009, "synset": "munich_beer.n.01", "name": "Munich_beer"}, + {"id": 14010, "synset": "bock.n.01", "name": "bock"}, + {"id": 14011, "synset": "lager.n.02", "name": "lager"}, + {"id": 14012, "synset": "light_beer.n.01", "name": "light_beer"}, + {"id": 14013, "synset": "oktoberfest.n.01", "name": "Oktoberfest"}, + {"id": 14014, "synset": "pilsner.n.01", "name": "Pilsner"}, + {"id": 14015, "synset": "shebeen.n.01", "name": "shebeen"}, + {"id": 14016, "synset": "weissbier.n.01", "name": "Weissbier"}, + {"id": 14017, "synset": "weizenbock.n.01", "name": "Weizenbock"}, + {"id": 14018, "synset": "malt.n.03", "name": "malt"}, + {"id": 14019, "synset": "wort.n.02", "name": "wort"}, + {"id": 14020, "synset": "malt.n.02", "name": "malt"}, + {"id": 14021, "synset": "ale.n.01", "name": "ale"}, + {"id": 14022, "synset": "bitter.n.01", "name": "bitter"}, + {"id": 14023, "synset": "burton.n.03", "name": "Burton"}, + {"id": 14024, "synset": "pale_ale.n.01", "name": "pale_ale"}, + {"id": 14025, "synset": "porter.n.07", "name": "porter"}, + {"id": 14026, "synset": "stout.n.01", "name": "stout"}, + {"id": 14027, "synset": "guinness.n.02", "name": "Guinness"}, + {"id": 14028, "synset": "kvass.n.01", "name": "kvass"}, + {"id": 14029, "synset": "mead.n.03", "name": "mead"}, + {"id": 14030, "synset": "metheglin.n.01", "name": "metheglin"}, + {"id": 14031, "synset": "hydromel.n.01", "name": "hydromel"}, + {"id": 14032, "synset": "oenomel.n.01", "name": "oenomel"}, + {"id": 14033, "synset": "near_beer.n.01", "name": "near_beer"}, + {"id": 14034, "synset": "ginger_beer.n.01", "name": "ginger_beer"}, + {"id": 14035, "synset": "sake.n.02", "name": "sake"}, + {"id": 14036, "synset": "wine.n.01", "name": "wine"}, + {"id": 14037, "synset": "vintage.n.01", "name": "vintage"}, + {"id": 14038, "synset": "red_wine.n.01", "name": "red_wine"}, + {"id": 14039, "synset": "white_wine.n.01", "name": "white_wine"}, + {"id": 14040, "synset": "blush_wine.n.01", "name": "blush_wine"}, + {"id": 14041, "synset": "altar_wine.n.01", "name": "altar_wine"}, + {"id": 14042, "synset": "sparkling_wine.n.01", "name": "sparkling_wine"}, + {"id": 14043, "synset": "champagne.n.01", "name": "champagne"}, + {"id": 14044, "synset": "cold_duck.n.01", "name": "cold_duck"}, + {"id": 14045, "synset": "burgundy.n.02", "name": "Burgundy"}, + {"id": 14046, "synset": "beaujolais.n.01", "name": "Beaujolais"}, + {"id": 14047, "synset": "medoc.n.01", "name": "Medoc"}, + {"id": 14048, "synset": "canary_wine.n.01", "name": "Canary_wine"}, + {"id": 14049, "synset": "chablis.n.02", "name": "Chablis"}, + {"id": 14050, "synset": "montrachet.n.01", "name": "Montrachet"}, + {"id": 14051, "synset": "chardonnay.n.02", "name": "Chardonnay"}, + {"id": 14052, "synset": "pinot_noir.n.02", "name": "Pinot_noir"}, + {"id": 14053, "synset": "pinot_blanc.n.02", "name": "Pinot_blanc"}, + {"id": 14054, "synset": "bordeaux.n.02", "name": "Bordeaux"}, + {"id": 14055, "synset": "claret.n.02", "name": "claret"}, + {"id": 14056, "synset": "chianti.n.01", "name": "Chianti"}, + {"id": 14057, "synset": "cabernet.n.01", "name": "Cabernet"}, + {"id": 14058, "synset": "merlot.n.02", "name": "Merlot"}, + {"id": 14059, "synset": "sauvignon_blanc.n.02", "name": "Sauvignon_blanc"}, + {"id": 14060, "synset": "california_wine.n.01", "name": "California_wine"}, + {"id": 14061, "synset": "cotes_de_provence.n.01", "name": "Cotes_de_Provence"}, + {"id": 14062, "synset": "dessert_wine.n.01", "name": "dessert_wine"}, + {"id": 14063, "synset": "dubonnet.n.01", "name": "Dubonnet"}, + {"id": 14064, "synset": "jug_wine.n.01", "name": "jug_wine"}, + {"id": 14065, "synset": "macon.n.02", "name": "macon"}, + {"id": 14066, "synset": "moselle.n.01", "name": "Moselle"}, + {"id": 14067, "synset": "muscadet.n.02", "name": "Muscadet"}, + {"id": 14068, "synset": "plonk.n.01", "name": "plonk"}, + {"id": 14069, "synset": "retsina.n.01", "name": "retsina"}, + {"id": 14070, "synset": "rhine_wine.n.01", "name": "Rhine_wine"}, + {"id": 14071, "synset": "riesling.n.02", "name": "Riesling"}, + {"id": 14072, "synset": "liebfraumilch.n.01", "name": "liebfraumilch"}, + {"id": 14073, "synset": "rhone_wine.n.01", "name": "Rhone_wine"}, + {"id": 14074, "synset": "rioja.n.01", "name": "Rioja"}, + {"id": 14075, "synset": "sack.n.04", "name": "sack"}, + {"id": 14076, "synset": "saint_emilion.n.01", "name": "Saint_Emilion"}, + {"id": 14077, "synset": "soave.n.01", "name": "Soave"}, + {"id": 14078, "synset": "zinfandel.n.02", "name": "zinfandel"}, + {"id": 14079, "synset": "sauterne.n.01", "name": "Sauterne"}, + {"id": 14080, "synset": "straw_wine.n.01", "name": "straw_wine"}, + {"id": 14081, "synset": "table_wine.n.01", "name": "table_wine"}, + {"id": 14082, "synset": "tokay.n.01", "name": "Tokay"}, + {"id": 14083, "synset": "vin_ordinaire.n.01", "name": "vin_ordinaire"}, + {"id": 14084, "synset": "vermouth.n.01", "name": "vermouth"}, + {"id": 14085, "synset": "sweet_vermouth.n.01", "name": "sweet_vermouth"}, + {"id": 14086, "synset": "dry_vermouth.n.01", "name": "dry_vermouth"}, + {"id": 14087, "synset": "chenin_blanc.n.02", "name": "Chenin_blanc"}, + {"id": 14088, "synset": "verdicchio.n.02", "name": "Verdicchio"}, + {"id": 14089, "synset": "vouvray.n.01", "name": "Vouvray"}, + {"id": 14090, "synset": "yquem.n.01", "name": "Yquem"}, + {"id": 14091, "synset": "generic.n.01", "name": "generic"}, + {"id": 14092, "synset": "varietal.n.01", "name": "varietal"}, + {"id": 14093, "synset": "fortified_wine.n.01", "name": "fortified_wine"}, + {"id": 14094, "synset": "madeira.n.03", "name": "Madeira"}, + {"id": 14095, "synset": "malmsey.n.01", "name": "malmsey"}, + {"id": 14096, "synset": "port.n.02", "name": "port"}, + {"id": 14097, "synset": "sherry.n.01", "name": "sherry"}, + {"id": 14098, "synset": "marsala.n.01", "name": "Marsala"}, + {"id": 14099, "synset": "muscat.n.03", "name": "muscat"}, + {"id": 14100, "synset": "neutral_spirits.n.01", "name": "neutral_spirits"}, + {"id": 14101, "synset": "aqua_vitae.n.01", "name": "aqua_vitae"}, + {"id": 14102, "synset": "eau_de_vie.n.01", "name": "eau_de_vie"}, + {"id": 14103, "synset": "moonshine.n.02", "name": "moonshine"}, + {"id": 14104, "synset": "bathtub_gin.n.01", "name": "bathtub_gin"}, + {"id": 14105, "synset": "aquavit.n.01", "name": "aquavit"}, + {"id": 14106, "synset": "arrack.n.01", "name": "arrack"}, + {"id": 14107, "synset": "bitters.n.01", "name": "bitters"}, + {"id": 14108, "synset": "brandy.n.01", "name": "brandy"}, + {"id": 14109, "synset": "applejack.n.01", "name": "applejack"}, + {"id": 14110, "synset": "calvados.n.01", "name": "Calvados"}, + {"id": 14111, "synset": "armagnac.n.01", "name": "Armagnac"}, + {"id": 14112, "synset": "cognac.n.01", "name": "Cognac"}, + {"id": 14113, "synset": "grappa.n.01", "name": "grappa"}, + {"id": 14114, "synset": "kirsch.n.01", "name": "kirsch"}, + {"id": 14115, "synset": "slivovitz.n.01", "name": "slivovitz"}, + {"id": 14116, "synset": "gin.n.01", "name": "gin"}, + {"id": 14117, "synset": "sloe_gin.n.01", "name": "sloe_gin"}, + {"id": 14118, "synset": "geneva.n.02", "name": "geneva"}, + {"id": 14119, "synset": "grog.n.01", "name": "grog"}, + {"id": 14120, "synset": "ouzo.n.01", "name": "ouzo"}, + {"id": 14121, "synset": "rum.n.01", "name": "rum"}, + {"id": 14122, "synset": "demerara.n.04", "name": "demerara"}, + {"id": 14123, "synset": "jamaica_rum.n.01", "name": "Jamaica_rum"}, + {"id": 14124, "synset": "schnapps.n.01", "name": "schnapps"}, + {"id": 14125, "synset": "pulque.n.01", "name": "pulque"}, + {"id": 14126, "synset": "mescal.n.02", "name": "mescal"}, + {"id": 14127, "synset": "whiskey.n.01", "name": "whiskey"}, + {"id": 14128, "synset": "blended_whiskey.n.01", "name": "blended_whiskey"}, + {"id": 14129, "synset": "bourbon.n.02", "name": "bourbon"}, + {"id": 14130, "synset": "corn_whiskey.n.01", "name": "corn_whiskey"}, + {"id": 14131, "synset": "firewater.n.01", "name": "firewater"}, + {"id": 14132, "synset": "irish.n.02", "name": "Irish"}, + {"id": 14133, "synset": "poteen.n.01", "name": "poteen"}, + {"id": 14134, "synset": "rye.n.03", "name": "rye"}, + {"id": 14135, "synset": "scotch.n.02", "name": "Scotch"}, + {"id": 14136, "synset": "sour_mash.n.02", "name": "sour_mash"}, + {"id": 14137, "synset": "liqueur.n.01", "name": "liqueur"}, + {"id": 14138, "synset": "absinth.n.01", "name": "absinth"}, + {"id": 14139, "synset": "amaretto.n.01", "name": "amaretto"}, + {"id": 14140, "synset": "anisette.n.01", "name": "anisette"}, + {"id": 14141, "synset": "benedictine.n.02", "name": "benedictine"}, + {"id": 14142, "synset": "chartreuse.n.01", "name": "Chartreuse"}, + {"id": 14143, "synset": "coffee_liqueur.n.01", "name": "coffee_liqueur"}, + {"id": 14144, "synset": "creme_de_cacao.n.01", "name": "creme_de_cacao"}, + {"id": 14145, "synset": "creme_de_menthe.n.01", "name": "creme_de_menthe"}, + {"id": 14146, "synset": "creme_de_fraise.n.01", "name": "creme_de_fraise"}, + {"id": 14147, "synset": "drambuie.n.01", "name": "Drambuie"}, + {"id": 14148, "synset": "galliano.n.01", "name": "Galliano"}, + {"id": 14149, "synset": "orange_liqueur.n.01", "name": "orange_liqueur"}, + {"id": 14150, "synset": "curacao.n.02", "name": "curacao"}, + {"id": 14151, "synset": "triple_sec.n.01", "name": "triple_sec"}, + {"id": 14152, "synset": "grand_marnier.n.01", "name": "Grand_Marnier"}, + {"id": 14153, "synset": "kummel.n.01", "name": "kummel"}, + {"id": 14154, "synset": "maraschino.n.01", "name": "maraschino"}, + {"id": 14155, "synset": "pastis.n.01", "name": "pastis"}, + {"id": 14156, "synset": "pernod.n.01", "name": "Pernod"}, + {"id": 14157, "synset": "pousse-cafe.n.01", "name": "pousse-cafe"}, + {"id": 14158, "synset": "kahlua.n.01", "name": "Kahlua"}, + {"id": 14159, "synset": "ratafia.n.01", "name": "ratafia"}, + {"id": 14160, "synset": "sambuca.n.01", "name": "sambuca"}, + {"id": 14161, "synset": "mixed_drink.n.01", "name": "mixed_drink"}, + {"id": 14162, "synset": "cocktail.n.01", "name": "cocktail"}, + {"id": 14163, "synset": "dom_pedro.n.01", "name": "Dom_Pedro"}, + {"id": 14164, "synset": "highball.n.01", "name": "highball"}, + {"id": 14165, "synset": "mixer.n.02", "name": "mixer"}, + {"id": 14166, "synset": "bishop.n.02", "name": "bishop"}, + {"id": 14167, "synset": "bloody_mary.n.02", "name": "Bloody_Mary"}, + {"id": 14168, "synset": "virgin_mary.n.02", "name": "Virgin_Mary"}, + {"id": 14169, "synset": "bullshot.n.01", "name": "bullshot"}, + {"id": 14170, "synset": "cobbler.n.02", "name": "cobbler"}, + {"id": 14171, "synset": "collins.n.02", "name": "collins"}, + {"id": 14172, "synset": "cooler.n.02", "name": "cooler"}, + {"id": 14173, "synset": "refresher.n.02", "name": "refresher"}, + {"id": 14174, "synset": "daiquiri.n.01", "name": "daiquiri"}, + {"id": 14175, "synset": "strawberry_daiquiri.n.01", "name": "strawberry_daiquiri"}, + {"id": 14176, "synset": "nada_daiquiri.n.01", "name": "NADA_daiquiri"}, + {"id": 14177, "synset": "spritzer.n.01", "name": "spritzer"}, + {"id": 14178, "synset": "flip.n.02", "name": "flip"}, + {"id": 14179, "synset": "gimlet.n.01", "name": "gimlet"}, + {"id": 14180, "synset": "gin_and_tonic.n.01", "name": "gin_and_tonic"}, + {"id": 14181, "synset": "grasshopper.n.02", "name": "grasshopper"}, + {"id": 14182, "synset": "harvey_wallbanger.n.01", "name": "Harvey_Wallbanger"}, + {"id": 14183, "synset": "julep.n.01", "name": "julep"}, + {"id": 14184, "synset": "manhattan.n.02", "name": "manhattan"}, + {"id": 14185, "synset": "rob_roy.n.02", "name": "Rob_Roy"}, + {"id": 14186, "synset": "margarita.n.01", "name": "margarita"}, + {"id": 14187, "synset": "gin_and_it.n.01", "name": "gin_and_it"}, + {"id": 14188, "synset": "vodka_martini.n.01", "name": "vodka_martini"}, + {"id": 14189, "synset": "old_fashioned.n.01", "name": "old_fashioned"}, + {"id": 14190, "synset": "pink_lady.n.01", "name": "pink_lady"}, + {"id": 14191, "synset": "sazerac.n.01", "name": "Sazerac"}, + {"id": 14192, "synset": "screwdriver.n.02", "name": "screwdriver"}, + {"id": 14193, "synset": "sidecar.n.01", "name": "sidecar"}, + {"id": 14194, "synset": "scotch_and_soda.n.01", "name": "Scotch_and_soda"}, + {"id": 14195, "synset": "sling.n.01", "name": "sling"}, + {"id": 14196, "synset": "brandy_sling.n.01", "name": "brandy_sling"}, + {"id": 14197, "synset": "gin_sling.n.01", "name": "gin_sling"}, + {"id": 14198, "synset": "rum_sling.n.01", "name": "rum_sling"}, + {"id": 14199, "synset": "sour.n.01", "name": "sour"}, + {"id": 14200, "synset": "whiskey_sour.n.01", "name": "whiskey_sour"}, + {"id": 14201, "synset": "stinger.n.01", "name": "stinger"}, + {"id": 14202, "synset": "swizzle.n.01", "name": "swizzle"}, + {"id": 14203, "synset": "hot_toddy.n.01", "name": "hot_toddy"}, + {"id": 14204, "synset": "zombie.n.05", "name": "zombie"}, + {"id": 14205, "synset": "fizz.n.01", "name": "fizz"}, + {"id": 14206, "synset": "irish_coffee.n.01", "name": "Irish_coffee"}, + {"id": 14207, "synset": "cafe_au_lait.n.01", "name": "cafe_au_lait"}, + {"id": 14208, "synset": "cafe_noir.n.01", "name": "cafe_noir"}, + { + "id": 14209, + "synset": "decaffeinated_coffee.n.01", + "name": "decaffeinated_coffee", + }, + {"id": 14210, "synset": "drip_coffee.n.01", "name": "drip_coffee"}, + {"id": 14211, "synset": "espresso.n.01", "name": "espresso"}, + {"id": 14212, "synset": "caffe_latte.n.01", "name": "caffe_latte"}, + {"id": 14213, "synset": "iced_coffee.n.01", "name": "iced_coffee"}, + {"id": 14214, "synset": "instant_coffee.n.01", "name": "instant_coffee"}, + {"id": 14215, "synset": "mocha.n.03", "name": "mocha"}, + {"id": 14216, "synset": "mocha.n.02", "name": "mocha"}, + {"id": 14217, "synset": "cassareep.n.01", "name": "cassareep"}, + {"id": 14218, "synset": "turkish_coffee.n.01", "name": "Turkish_coffee"}, + {"id": 14219, "synset": "hard_cider.n.01", "name": "hard_cider"}, + {"id": 14220, "synset": "scrumpy.n.01", "name": "scrumpy"}, + {"id": 14221, "synset": "sweet_cider.n.01", "name": "sweet_cider"}, + {"id": 14222, "synset": "mulled_cider.n.01", "name": "mulled_cider"}, + {"id": 14223, "synset": "perry.n.04", "name": "perry"}, + {"id": 14224, "synset": "rotgut.n.01", "name": "rotgut"}, + {"id": 14225, "synset": "slug.n.05", "name": "slug"}, + {"id": 14226, "synset": "criollo.n.02", "name": "criollo"}, + {"id": 14227, "synset": "juice.n.01", "name": "juice"}, + {"id": 14228, "synset": "nectar.n.02", "name": "nectar"}, + {"id": 14229, "synset": "apple_juice.n.01", "name": "apple_juice"}, + {"id": 14230, "synset": "cranberry_juice.n.01", "name": "cranberry_juice"}, + {"id": 14231, "synset": "grape_juice.n.01", "name": "grape_juice"}, + {"id": 14232, "synset": "must.n.02", "name": "must"}, + {"id": 14233, "synset": "grapefruit_juice.n.01", "name": "grapefruit_juice"}, + {"id": 14234, "synset": "frozen_orange_juice.n.01", "name": "frozen_orange_juice"}, + {"id": 14235, "synset": "pineapple_juice.n.01", "name": "pineapple_juice"}, + {"id": 14236, "synset": "lemon_juice.n.01", "name": "lemon_juice"}, + {"id": 14237, "synset": "lime_juice.n.01", "name": "lime_juice"}, + {"id": 14238, "synset": "papaya_juice.n.01", "name": "papaya_juice"}, + {"id": 14239, "synset": "tomato_juice.n.01", "name": "tomato_juice"}, + {"id": 14240, "synset": "carrot_juice.n.01", "name": "carrot_juice"}, + {"id": 14241, "synset": "v-8_juice.n.01", "name": "V-8_juice"}, + {"id": 14242, "synset": "koumiss.n.01", "name": "koumiss"}, + {"id": 14243, "synset": "fruit_drink.n.01", "name": "fruit_drink"}, + {"id": 14244, "synset": "limeade.n.01", "name": "limeade"}, + {"id": 14245, "synset": "orangeade.n.01", "name": "orangeade"}, + {"id": 14246, "synset": "malted_milk.n.02", "name": "malted_milk"}, + {"id": 14247, "synset": "mate.n.09", "name": "mate"}, + {"id": 14248, "synset": "mulled_wine.n.01", "name": "mulled_wine"}, + {"id": 14249, "synset": "negus.n.01", "name": "negus"}, + {"id": 14250, "synset": "soft_drink.n.01", "name": "soft_drink"}, + {"id": 14251, "synset": "birch_beer.n.01", "name": "birch_beer"}, + {"id": 14252, "synset": "bitter_lemon.n.01", "name": "bitter_lemon"}, + {"id": 14253, "synset": "cola.n.02", "name": "cola"}, + {"id": 14254, "synset": "cream_soda.n.01", "name": "cream_soda"}, + {"id": 14255, "synset": "egg_cream.n.01", "name": "egg_cream"}, + {"id": 14256, "synset": "ginger_ale.n.01", "name": "ginger_ale"}, + {"id": 14257, "synset": "orange_soda.n.01", "name": "orange_soda"}, + {"id": 14258, "synset": "phosphate.n.02", "name": "phosphate"}, + {"id": 14259, "synset": "coca_cola.n.01", "name": "Coca_Cola"}, + {"id": 14260, "synset": "pepsi.n.01", "name": "Pepsi"}, + {"id": 14261, "synset": "sarsaparilla.n.02", "name": "sarsaparilla"}, + {"id": 14262, "synset": "tonic.n.01", "name": "tonic"}, + {"id": 14263, "synset": "coffee_bean.n.01", "name": "coffee_bean"}, + {"id": 14264, "synset": "coffee.n.01", "name": "coffee"}, + {"id": 14265, "synset": "cafe_royale.n.01", "name": "cafe_royale"}, + {"id": 14266, "synset": "fruit_punch.n.01", "name": "fruit_punch"}, + {"id": 14267, "synset": "milk_punch.n.01", "name": "milk_punch"}, + {"id": 14268, "synset": "mimosa.n.03", "name": "mimosa"}, + {"id": 14269, "synset": "pina_colada.n.01", "name": "pina_colada"}, + {"id": 14270, "synset": "punch.n.02", "name": "punch"}, + {"id": 14271, "synset": "cup.n.06", "name": "cup"}, + {"id": 14272, "synset": "champagne_cup.n.01", "name": "champagne_cup"}, + {"id": 14273, "synset": "claret_cup.n.01", "name": "claret_cup"}, + {"id": 14274, "synset": "wassail.n.01", "name": "wassail"}, + {"id": 14275, "synset": "planter's_punch.n.01", "name": "planter's_punch"}, + {"id": 14276, "synset": "white_russian.n.02", "name": "White_Russian"}, + {"id": 14277, "synset": "fish_house_punch.n.01", "name": "fish_house_punch"}, + {"id": 14278, "synset": "may_wine.n.01", "name": "May_wine"}, + {"id": 14279, "synset": "eggnog.n.01", "name": "eggnog"}, + {"id": 14280, "synset": "cassiri.n.01", "name": "cassiri"}, + {"id": 14281, "synset": "spruce_beer.n.01", "name": "spruce_beer"}, + {"id": 14282, "synset": "rickey.n.01", "name": "rickey"}, + {"id": 14283, "synset": "gin_rickey.n.01", "name": "gin_rickey"}, + {"id": 14284, "synset": "tea.n.05", "name": "tea"}, + {"id": 14285, "synset": "tea.n.01", "name": "tea"}, + {"id": 14286, "synset": "tea-like_drink.n.01", "name": "tea-like_drink"}, + {"id": 14287, "synset": "cambric_tea.n.01", "name": "cambric_tea"}, + {"id": 14288, "synset": "cuppa.n.01", "name": "cuppa"}, + {"id": 14289, "synset": "herb_tea.n.01", "name": "herb_tea"}, + {"id": 14290, "synset": "tisane.n.01", "name": "tisane"}, + {"id": 14291, "synset": "camomile_tea.n.01", "name": "camomile_tea"}, + {"id": 14292, "synset": "ice_tea.n.01", "name": "ice_tea"}, + {"id": 14293, "synset": "sun_tea.n.01", "name": "sun_tea"}, + {"id": 14294, "synset": "black_tea.n.01", "name": "black_tea"}, + {"id": 14295, "synset": "congou.n.01", "name": "congou"}, + {"id": 14296, "synset": "darjeeling.n.01", "name": "Darjeeling"}, + {"id": 14297, "synset": "orange_pekoe.n.01", "name": "orange_pekoe"}, + {"id": 14298, "synset": "souchong.n.01", "name": "souchong"}, + {"id": 14299, "synset": "green_tea.n.01", "name": "green_tea"}, + {"id": 14300, "synset": "hyson.n.01", "name": "hyson"}, + {"id": 14301, "synset": "oolong.n.01", "name": "oolong"}, + {"id": 14302, "synset": "water.n.06", "name": "water"}, + {"id": 14303, "synset": "bottled_water.n.01", "name": "bottled_water"}, + {"id": 14304, "synset": "branch_water.n.01", "name": "branch_water"}, + {"id": 14305, "synset": "spring_water.n.02", "name": "spring_water"}, + {"id": 14306, "synset": "sugar_water.n.01", "name": "sugar_water"}, + {"id": 14307, "synset": "drinking_water.n.01", "name": "drinking_water"}, + {"id": 14308, "synset": "ice_water.n.01", "name": "ice_water"}, + {"id": 14309, "synset": "soda_water.n.01", "name": "soda_water"}, + {"id": 14310, "synset": "mineral_water.n.01", "name": "mineral_water"}, + {"id": 14311, "synset": "seltzer.n.01", "name": "seltzer"}, + {"id": 14312, "synset": "vichy_water.n.01", "name": "Vichy_water"}, + {"id": 14313, "synset": "perishable.n.01", "name": "perishable"}, + {"id": 14314, "synset": "couscous.n.01", "name": "couscous"}, + {"id": 14315, "synset": "ramekin.n.01", "name": "ramekin"}, + {"id": 14316, "synset": "multivitamin.n.01", "name": "multivitamin"}, + {"id": 14317, "synset": "vitamin_pill.n.01", "name": "vitamin_pill"}, + {"id": 14318, "synset": "soul_food.n.01", "name": "soul_food"}, + {"id": 14319, "synset": "mold.n.06", "name": "mold"}, + {"id": 14320, "synset": "people.n.01", "name": "people"}, + {"id": 14321, "synset": "collection.n.01", "name": "collection"}, + {"id": 14322, "synset": "book.n.07", "name": "book"}, + {"id": 14323, "synset": "library.n.02", "name": "library"}, + {"id": 14324, "synset": "baseball_club.n.01", "name": "baseball_club"}, + {"id": 14325, "synset": "crowd.n.01", "name": "crowd"}, + {"id": 14326, "synset": "class.n.02", "name": "class"}, + {"id": 14327, "synset": "core.n.01", "name": "core"}, + {"id": 14328, "synset": "concert_band.n.01", "name": "concert_band"}, + {"id": 14329, "synset": "dance.n.02", "name": "dance"}, + {"id": 14330, "synset": "wedding.n.03", "name": "wedding"}, + {"id": 14331, "synset": "chain.n.01", "name": "chain"}, + {"id": 14332, "synset": "power_breakfast.n.01", "name": "power_breakfast"}, + {"id": 14333, "synset": "aerie.n.02", "name": "aerie"}, + {"id": 14334, "synset": "agora.n.02", "name": "agora"}, + {"id": 14335, "synset": "amusement_park.n.01", "name": "amusement_park"}, + {"id": 14336, "synset": "aphelion.n.01", "name": "aphelion"}, + {"id": 14337, "synset": "apron.n.02", "name": "apron"}, + { + "id": 14338, + "synset": "interplanetary_space.n.01", + "name": "interplanetary_space", + }, + {"id": 14339, "synset": "interstellar_space.n.01", "name": "interstellar_space"}, + {"id": 14340, "synset": "intergalactic_space.n.01", "name": "intergalactic_space"}, + {"id": 14341, "synset": "bush.n.02", "name": "bush"}, + {"id": 14342, "synset": "semidesert.n.01", "name": "semidesert"}, + {"id": 14343, "synset": "beam-ends.n.01", "name": "beam-ends"}, + {"id": 14344, "synset": "bridgehead.n.02", "name": "bridgehead"}, + {"id": 14345, "synset": "bus_stop.n.01", "name": "bus_stop"}, + {"id": 14346, "synset": "campsite.n.01", "name": "campsite"}, + {"id": 14347, "synset": "detention_basin.n.01", "name": "detention_basin"}, + {"id": 14348, "synset": "cemetery.n.01", "name": "cemetery"}, + {"id": 14349, "synset": "trichion.n.01", "name": "trichion"}, + {"id": 14350, "synset": "city.n.01", "name": "city"}, + {"id": 14351, "synset": "business_district.n.01", "name": "business_district"}, + {"id": 14352, "synset": "outskirts.n.01", "name": "outskirts"}, + {"id": 14353, "synset": "borough.n.01", "name": "borough"}, + {"id": 14354, "synset": "cow_pasture.n.01", "name": "cow_pasture"}, + {"id": 14355, "synset": "crest.n.01", "name": "crest"}, + {"id": 14356, "synset": "eparchy.n.02", "name": "eparchy"}, + {"id": 14357, "synset": "suburb.n.01", "name": "suburb"}, + {"id": 14358, "synset": "stockbroker_belt.n.01", "name": "stockbroker_belt"}, + {"id": 14359, "synset": "crawlspace.n.01", "name": "crawlspace"}, + {"id": 14360, "synset": "sheikdom.n.01", "name": "sheikdom"}, + {"id": 14361, "synset": "residence.n.01", "name": "residence"}, + {"id": 14362, "synset": "domicile.n.01", "name": "domicile"}, + {"id": 14363, "synset": "dude_ranch.n.01", "name": "dude_ranch"}, + {"id": 14364, "synset": "farmland.n.01", "name": "farmland"}, + {"id": 14365, "synset": "midfield.n.01", "name": "midfield"}, + {"id": 14366, "synset": "firebreak.n.01", "name": "firebreak"}, + {"id": 14367, "synset": "flea_market.n.01", "name": "flea_market"}, + {"id": 14368, "synset": "battlefront.n.01", "name": "battlefront"}, + {"id": 14369, "synset": "garbage_heap.n.01", "name": "garbage_heap"}, + {"id": 14370, "synset": "benthos.n.01", "name": "benthos"}, + {"id": 14371, "synset": "goldfield.n.01", "name": "goldfield"}, + {"id": 14372, "synset": "grainfield.n.01", "name": "grainfield"}, + {"id": 14373, "synset": "half-mast.n.01", "name": "half-mast"}, + {"id": 14374, "synset": "hemline.n.01", "name": "hemline"}, + {"id": 14375, "synset": "heronry.n.01", "name": "heronry"}, + {"id": 14376, "synset": "hipline.n.02", "name": "hipline"}, + {"id": 14377, "synset": "hipline.n.01", "name": "hipline"}, + {"id": 14378, "synset": "hole-in-the-wall.n.01", "name": "hole-in-the-wall"}, + {"id": 14379, "synset": "junkyard.n.01", "name": "junkyard"}, + {"id": 14380, "synset": "isoclinic_line.n.01", "name": "isoclinic_line"}, + {"id": 14381, "synset": "littoral.n.01", "name": "littoral"}, + {"id": 14382, "synset": "magnetic_pole.n.01", "name": "magnetic_pole"}, + {"id": 14383, "synset": "grassland.n.01", "name": "grassland"}, + {"id": 14384, "synset": "mecca.n.02", "name": "mecca"}, + {"id": 14385, "synset": "observer's_meridian.n.01", "name": "observer's_meridian"}, + {"id": 14386, "synset": "prime_meridian.n.01", "name": "prime_meridian"}, + {"id": 14387, "synset": "nombril.n.01", "name": "nombril"}, + {"id": 14388, "synset": "no-parking_zone.n.01", "name": "no-parking_zone"}, + {"id": 14389, "synset": "outdoors.n.01", "name": "outdoors"}, + {"id": 14390, "synset": "fairground.n.01", "name": "fairground"}, + {"id": 14391, "synset": "pasture.n.01", "name": "pasture"}, + {"id": 14392, "synset": "perihelion.n.01", "name": "perihelion"}, + {"id": 14393, "synset": "periselene.n.01", "name": "periselene"}, + {"id": 14394, "synset": "locus_of_infection.n.01", "name": "locus_of_infection"}, + {"id": 14395, "synset": "kasbah.n.01", "name": "kasbah"}, + {"id": 14396, "synset": "waterfront.n.01", "name": "waterfront"}, + {"id": 14397, "synset": "resort.n.01", "name": "resort"}, + {"id": 14398, "synset": "resort_area.n.01", "name": "resort_area"}, + {"id": 14399, "synset": "rough.n.01", "name": "rough"}, + {"id": 14400, "synset": "ashram.n.02", "name": "ashram"}, + {"id": 14401, "synset": "harborage.n.01", "name": "harborage"}, + {"id": 14402, "synset": "scrubland.n.01", "name": "scrubland"}, + {"id": 14403, "synset": "weald.n.01", "name": "weald"}, + {"id": 14404, "synset": "wold.n.01", "name": "wold"}, + {"id": 14405, "synset": "schoolyard.n.01", "name": "schoolyard"}, + {"id": 14406, "synset": "showplace.n.01", "name": "showplace"}, + {"id": 14407, "synset": "bedside.n.01", "name": "bedside"}, + {"id": 14408, "synset": "sideline.n.01", "name": "sideline"}, + {"id": 14409, "synset": "ski_resort.n.01", "name": "ski_resort"}, + {"id": 14410, "synset": "soil_horizon.n.01", "name": "soil_horizon"}, + {"id": 14411, "synset": "geological_horizon.n.01", "name": "geological_horizon"}, + {"id": 14412, "synset": "coal_seam.n.01", "name": "coal_seam"}, + {"id": 14413, "synset": "coalface.n.01", "name": "coalface"}, + {"id": 14414, "synset": "field.n.14", "name": "field"}, + {"id": 14415, "synset": "oilfield.n.01", "name": "oilfield"}, + {"id": 14416, "synset": "temperate_zone.n.01", "name": "Temperate_Zone"}, + {"id": 14417, "synset": "terreplein.n.01", "name": "terreplein"}, + {"id": 14418, "synset": "three-mile_limit.n.01", "name": "three-mile_limit"}, + {"id": 14419, "synset": "desktop.n.01", "name": "desktop"}, + {"id": 14420, "synset": "top.n.01", "name": "top"}, + {"id": 14421, "synset": "kampong.n.01", "name": "kampong"}, + {"id": 14422, "synset": "subtropics.n.01", "name": "subtropics"}, + {"id": 14423, "synset": "barrio.n.02", "name": "barrio"}, + {"id": 14424, "synset": "veld.n.01", "name": "veld"}, + {"id": 14425, "synset": "vertex.n.02", "name": "vertex"}, + {"id": 14426, "synset": "waterline.n.01", "name": "waterline"}, + {"id": 14427, "synset": "high-water_mark.n.01", "name": "high-water_mark"}, + {"id": 14428, "synset": "low-water_mark.n.02", "name": "low-water_mark"}, + {"id": 14429, "synset": "continental_divide.n.01", "name": "continental_divide"}, + {"id": 14430, "synset": "zodiac.n.01", "name": "zodiac"}, + {"id": 14431, "synset": "aegean_island.n.01", "name": "Aegean_island"}, + {"id": 14432, "synset": "sultanate.n.01", "name": "sultanate"}, + {"id": 14433, "synset": "swiss_canton.n.01", "name": "Swiss_canton"}, + {"id": 14434, "synset": "abyssal_zone.n.01", "name": "abyssal_zone"}, + {"id": 14435, "synset": "aerie.n.01", "name": "aerie"}, + {"id": 14436, "synset": "air_bubble.n.01", "name": "air_bubble"}, + {"id": 14437, "synset": "alluvial_flat.n.01", "name": "alluvial_flat"}, + {"id": 14438, "synset": "alp.n.01", "name": "alp"}, + {"id": 14439, "synset": "alpine_glacier.n.01", "name": "Alpine_glacier"}, + {"id": 14440, "synset": "anthill.n.01", "name": "anthill"}, + {"id": 14441, "synset": "aquifer.n.01", "name": "aquifer"}, + {"id": 14442, "synset": "archipelago.n.01", "name": "archipelago"}, + {"id": 14443, "synset": "arete.n.01", "name": "arete"}, + {"id": 14444, "synset": "arroyo.n.01", "name": "arroyo"}, + {"id": 14445, "synset": "ascent.n.01", "name": "ascent"}, + {"id": 14446, "synset": "asterism.n.02", "name": "asterism"}, + {"id": 14447, "synset": "asthenosphere.n.01", "name": "asthenosphere"}, + {"id": 14448, "synset": "atoll.n.01", "name": "atoll"}, + {"id": 14449, "synset": "bank.n.03", "name": "bank"}, + {"id": 14450, "synset": "bank.n.01", "name": "bank"}, + {"id": 14451, "synset": "bar.n.08", "name": "bar"}, + {"id": 14452, "synset": "barbecue_pit.n.01", "name": "barbecue_pit"}, + {"id": 14453, "synset": "barrier_reef.n.01", "name": "barrier_reef"}, + {"id": 14454, "synset": "baryon.n.01", "name": "baryon"}, + {"id": 14455, "synset": "basin.n.03", "name": "basin"}, + {"id": 14456, "synset": "beach.n.01", "name": "beach"}, + {"id": 14457, "synset": "honeycomb.n.01", "name": "honeycomb"}, + {"id": 14458, "synset": "belay.n.01", "name": "belay"}, + {"id": 14459, "synset": "ben.n.01", "name": "ben"}, + {"id": 14460, "synset": "berm.n.01", "name": "berm"}, + {"id": 14461, "synset": "bladder_stone.n.01", "name": "bladder_stone"}, + {"id": 14462, "synset": "bluff.n.01", "name": "bluff"}, + {"id": 14463, "synset": "borrow_pit.n.01", "name": "borrow_pit"}, + {"id": 14464, "synset": "brae.n.01", "name": "brae"}, + {"id": 14465, "synset": "bubble.n.01", "name": "bubble"}, + {"id": 14466, "synset": "burrow.n.01", "name": "burrow"}, + {"id": 14467, "synset": "butte.n.01", "name": "butte"}, + {"id": 14468, "synset": "caldera.n.01", "name": "caldera"}, + {"id": 14469, "synset": "canyon.n.01", "name": "canyon"}, + {"id": 14470, "synset": "canyonside.n.01", "name": "canyonside"}, + {"id": 14471, "synset": "cave.n.01", "name": "cave"}, + {"id": 14472, "synset": "cavern.n.02", "name": "cavern"}, + {"id": 14473, "synset": "chasm.n.01", "name": "chasm"}, + {"id": 14474, "synset": "cirque.n.01", "name": "cirque"}, + {"id": 14475, "synset": "cliff.n.01", "name": "cliff"}, + {"id": 14476, "synset": "cloud.n.02", "name": "cloud"}, + {"id": 14477, "synset": "coast.n.02", "name": "coast"}, + {"id": 14478, "synset": "coastland.n.01", "name": "coastland"}, + {"id": 14479, "synset": "col.n.01", "name": "col"}, + {"id": 14480, "synset": "collector.n.03", "name": "collector"}, + {"id": 14481, "synset": "comet.n.01", "name": "comet"}, + {"id": 14482, "synset": "continental_glacier.n.01", "name": "continental_glacier"}, + {"id": 14483, "synset": "coral_reef.n.01", "name": "coral_reef"}, + {"id": 14484, "synset": "cove.n.02", "name": "cove"}, + {"id": 14485, "synset": "crag.n.01", "name": "crag"}, + {"id": 14486, "synset": "crater.n.03", "name": "crater"}, + {"id": 14487, "synset": "cultivated_land.n.01", "name": "cultivated_land"}, + {"id": 14488, "synset": "dale.n.01", "name": "dale"}, + {"id": 14489, "synset": "defile.n.01", "name": "defile"}, + {"id": 14490, "synset": "delta.n.01", "name": "delta"}, + {"id": 14491, "synset": "descent.n.05", "name": "descent"}, + {"id": 14492, "synset": "diapir.n.01", "name": "diapir"}, + {"id": 14493, "synset": "divot.n.02", "name": "divot"}, + {"id": 14494, "synset": "divot.n.01", "name": "divot"}, + {"id": 14495, "synset": "down.n.04", "name": "down"}, + {"id": 14496, "synset": "downhill.n.01", "name": "downhill"}, + {"id": 14497, "synset": "draw.n.01", "name": "draw"}, + {"id": 14498, "synset": "drey.n.01", "name": "drey"}, + {"id": 14499, "synset": "drumlin.n.01", "name": "drumlin"}, + {"id": 14500, "synset": "dune.n.01", "name": "dune"}, + {"id": 14501, "synset": "escarpment.n.01", "name": "escarpment"}, + {"id": 14502, "synset": "esker.n.01", "name": "esker"}, + {"id": 14503, "synset": "fireball.n.03", "name": "fireball"}, + {"id": 14504, "synset": "flare_star.n.01", "name": "flare_star"}, + {"id": 14505, "synset": "floor.n.04", "name": "floor"}, + {"id": 14506, "synset": "fomite.n.01", "name": "fomite"}, + {"id": 14507, "synset": "foothill.n.01", "name": "foothill"}, + {"id": 14508, "synset": "footwall.n.01", "name": "footwall"}, + {"id": 14509, "synset": "foreland.n.02", "name": "foreland"}, + {"id": 14510, "synset": "foreshore.n.01", "name": "foreshore"}, + {"id": 14511, "synset": "gauge_boson.n.01", "name": "gauge_boson"}, + { + "id": 14512, + "synset": "geological_formation.n.01", + "name": "geological_formation", + }, + {"id": 14513, "synset": "geyser.n.01", "name": "geyser"}, + {"id": 14514, "synset": "glacier.n.01", "name": "glacier"}, + {"id": 14515, "synset": "glen.n.01", "name": "glen"}, + {"id": 14516, "synset": "gopher_hole.n.01", "name": "gopher_hole"}, + {"id": 14517, "synset": "gorge.n.01", "name": "gorge"}, + {"id": 14518, "synset": "grotto.n.01", "name": "grotto"}, + {"id": 14519, "synset": "growler.n.02", "name": "growler"}, + {"id": 14520, "synset": "gulch.n.01", "name": "gulch"}, + {"id": 14521, "synset": "gully.n.01", "name": "gully"}, + {"id": 14522, "synset": "hail.n.02", "name": "hail"}, + {"id": 14523, "synset": "highland.n.01", "name": "highland"}, + {"id": 14524, "synset": "hill.n.01", "name": "hill"}, + {"id": 14525, "synset": "hillside.n.01", "name": "hillside"}, + {"id": 14526, "synset": "hole.n.05", "name": "hole"}, + {"id": 14527, "synset": "hollow.n.02", "name": "hollow"}, + {"id": 14528, "synset": "hot_spring.n.01", "name": "hot_spring"}, + {"id": 14529, "synset": "iceberg.n.01", "name": "iceberg"}, + {"id": 14530, "synset": "icecap.n.01", "name": "icecap"}, + {"id": 14531, "synset": "ice_field.n.01", "name": "ice_field"}, + {"id": 14532, "synset": "ice_floe.n.01", "name": "ice_floe"}, + {"id": 14533, "synset": "ice_mass.n.01", "name": "ice_mass"}, + {"id": 14534, "synset": "inclined_fault.n.01", "name": "inclined_fault"}, + {"id": 14535, "synset": "ion.n.01", "name": "ion"}, + {"id": 14536, "synset": "isthmus.n.01", "name": "isthmus"}, + {"id": 14537, "synset": "kidney_stone.n.01", "name": "kidney_stone"}, + {"id": 14538, "synset": "knoll.n.01", "name": "knoll"}, + {"id": 14539, "synset": "kopje.n.01", "name": "kopje"}, + {"id": 14540, "synset": "kuiper_belt.n.01", "name": "Kuiper_belt"}, + {"id": 14541, "synset": "lake_bed.n.01", "name": "lake_bed"}, + {"id": 14542, "synset": "lakefront.n.01", "name": "lakefront"}, + {"id": 14543, "synset": "lakeside.n.01", "name": "lakeside"}, + {"id": 14544, "synset": "landfall.n.01", "name": "landfall"}, + {"id": 14545, "synset": "landfill.n.01", "name": "landfill"}, + {"id": 14546, "synset": "lather.n.04", "name": "lather"}, + {"id": 14547, "synset": "leak.n.01", "name": "leak"}, + {"id": 14548, "synset": "ledge.n.01", "name": "ledge"}, + {"id": 14549, "synset": "lepton.n.02", "name": "lepton"}, + {"id": 14550, "synset": "lithosphere.n.01", "name": "lithosphere"}, + {"id": 14551, "synset": "lowland.n.01", "name": "lowland"}, + {"id": 14552, "synset": "lunar_crater.n.01", "name": "lunar_crater"}, + {"id": 14553, "synset": "maar.n.01", "name": "maar"}, + {"id": 14554, "synset": "massif.n.01", "name": "massif"}, + {"id": 14555, "synset": "meander.n.01", "name": "meander"}, + {"id": 14556, "synset": "mesa.n.01", "name": "mesa"}, + {"id": 14557, "synset": "meteorite.n.01", "name": "meteorite"}, + {"id": 14558, "synset": "microfossil.n.01", "name": "microfossil"}, + {"id": 14559, "synset": "midstream.n.01", "name": "midstream"}, + {"id": 14560, "synset": "molehill.n.01", "name": "molehill"}, + {"id": 14561, "synset": "monocline.n.01", "name": "monocline"}, + {"id": 14562, "synset": "mountain.n.01", "name": "mountain"}, + {"id": 14563, "synset": "mountainside.n.01", "name": "mountainside"}, + {"id": 14564, "synset": "mouth.n.04", "name": "mouth"}, + {"id": 14565, "synset": "mull.n.01", "name": "mull"}, + {"id": 14566, "synset": "natural_depression.n.01", "name": "natural_depression"}, + {"id": 14567, "synset": "natural_elevation.n.01", "name": "natural_elevation"}, + {"id": 14568, "synset": "nullah.n.01", "name": "nullah"}, + {"id": 14569, "synset": "ocean.n.01", "name": "ocean"}, + {"id": 14570, "synset": "ocean_floor.n.01", "name": "ocean_floor"}, + {"id": 14571, "synset": "oceanfront.n.01", "name": "oceanfront"}, + {"id": 14572, "synset": "outcrop.n.01", "name": "outcrop"}, + {"id": 14573, "synset": "oxbow.n.01", "name": "oxbow"}, + {"id": 14574, "synset": "pallasite.n.01", "name": "pallasite"}, + {"id": 14575, "synset": "perforation.n.02", "name": "perforation"}, + {"id": 14576, "synset": "photosphere.n.01", "name": "photosphere"}, + {"id": 14577, "synset": "piedmont.n.02", "name": "piedmont"}, + {"id": 14578, "synset": "piedmont_glacier.n.01", "name": "Piedmont_glacier"}, + {"id": 14579, "synset": "pinetum.n.01", "name": "pinetum"}, + {"id": 14580, "synset": "plage.n.01", "name": "plage"}, + {"id": 14581, "synset": "plain.n.01", "name": "plain"}, + {"id": 14582, "synset": "point.n.11", "name": "point"}, + {"id": 14583, "synset": "polar_glacier.n.01", "name": "polar_glacier"}, + {"id": 14584, "synset": "pothole.n.01", "name": "pothole"}, + {"id": 14585, "synset": "precipice.n.01", "name": "precipice"}, + {"id": 14586, "synset": "promontory.n.01", "name": "promontory"}, + {"id": 14587, "synset": "ptyalith.n.01", "name": "ptyalith"}, + {"id": 14588, "synset": "pulsar.n.01", "name": "pulsar"}, + {"id": 14589, "synset": "quicksand.n.02", "name": "quicksand"}, + {"id": 14590, "synset": "rabbit_burrow.n.01", "name": "rabbit_burrow"}, + {"id": 14591, "synset": "radiator.n.01", "name": "radiator"}, + {"id": 14592, "synset": "rainbow.n.01", "name": "rainbow"}, + {"id": 14593, "synset": "range.n.04", "name": "range"}, + {"id": 14594, "synset": "rangeland.n.01", "name": "rangeland"}, + {"id": 14595, "synset": "ravine.n.01", "name": "ravine"}, + {"id": 14596, "synset": "reef.n.01", "name": "reef"}, + {"id": 14597, "synset": "ridge.n.01", "name": "ridge"}, + {"id": 14598, "synset": "ridge.n.04", "name": "ridge"}, + {"id": 14599, "synset": "rift_valley.n.01", "name": "rift_valley"}, + {"id": 14600, "synset": "riparian_forest.n.01", "name": "riparian_forest"}, + {"id": 14601, "synset": "ripple_mark.n.01", "name": "ripple_mark"}, + {"id": 14602, "synset": "riverbank.n.01", "name": "riverbank"}, + {"id": 14603, "synset": "riverbed.n.01", "name": "riverbed"}, + {"id": 14604, "synset": "rock.n.01", "name": "rock"}, + {"id": 14605, "synset": "roof.n.03", "name": "roof"}, + {"id": 14606, "synset": "saltpan.n.01", "name": "saltpan"}, + {"id": 14607, "synset": "sandbank.n.01", "name": "sandbank"}, + {"id": 14608, "synset": "sandbar.n.01", "name": "sandbar"}, + {"id": 14609, "synset": "sandpit.n.01", "name": "sandpit"}, + {"id": 14610, "synset": "sanitary_landfill.n.01", "name": "sanitary_landfill"}, + {"id": 14611, "synset": "sawpit.n.01", "name": "sawpit"}, + {"id": 14612, "synset": "scablands.n.01", "name": "scablands"}, + {"id": 14613, "synset": "seashore.n.01", "name": "seashore"}, + {"id": 14614, "synset": "seaside.n.01", "name": "seaside"}, + {"id": 14615, "synset": "seif_dune.n.01", "name": "seif_dune"}, + {"id": 14616, "synset": "shell.n.06", "name": "shell"}, + {"id": 14617, "synset": "shiner.n.02", "name": "shiner"}, + {"id": 14618, "synset": "shoal.n.01", "name": "shoal"}, + {"id": 14619, "synset": "shore.n.01", "name": "shore"}, + {"id": 14620, "synset": "shoreline.n.01", "name": "shoreline"}, + {"id": 14621, "synset": "sinkhole.n.01", "name": "sinkhole"}, + {"id": 14622, "synset": "ski_slope.n.01", "name": "ski_slope"}, + {"id": 14623, "synset": "sky.n.01", "name": "sky"}, + {"id": 14624, "synset": "slope.n.01", "name": "slope"}, + {"id": 14625, "synset": "snowcap.n.01", "name": "snowcap"}, + {"id": 14626, "synset": "snowdrift.n.01", "name": "snowdrift"}, + {"id": 14627, "synset": "snowfield.n.01", "name": "snowfield"}, + {"id": 14628, "synset": "soapsuds.n.01", "name": "soapsuds"}, + {"id": 14629, "synset": "spit.n.01", "name": "spit"}, + {"id": 14630, "synset": "spoor.n.01", "name": "spoor"}, + {"id": 14631, "synset": "spume.n.01", "name": "spume"}, + {"id": 14632, "synset": "star.n.03", "name": "star"}, + {"id": 14633, "synset": "steep.n.01", "name": "steep"}, + {"id": 14634, "synset": "steppe.n.01", "name": "steppe"}, + {"id": 14635, "synset": "strand.n.05", "name": "strand"}, + {"id": 14636, "synset": "streambed.n.01", "name": "streambed"}, + {"id": 14637, "synset": "sun.n.01", "name": "sun"}, + {"id": 14638, "synset": "supernova.n.01", "name": "supernova"}, + {"id": 14639, "synset": "swale.n.01", "name": "swale"}, + {"id": 14640, "synset": "swamp.n.01", "name": "swamp"}, + {"id": 14641, "synset": "swell.n.02", "name": "swell"}, + {"id": 14642, "synset": "tableland.n.01", "name": "tableland"}, + {"id": 14643, "synset": "talus.n.01", "name": "talus"}, + {"id": 14644, "synset": "tangle.n.01", "name": "tangle"}, + {"id": 14645, "synset": "tar_pit.n.01", "name": "tar_pit"}, + {"id": 14646, "synset": "terrace.n.02", "name": "terrace"}, + {"id": 14647, "synset": "tidal_basin.n.01", "name": "tidal_basin"}, + {"id": 14648, "synset": "tideland.n.01", "name": "tideland"}, + {"id": 14649, "synset": "tor.n.02", "name": "tor"}, + {"id": 14650, "synset": "tor.n.01", "name": "tor"}, + {"id": 14651, "synset": "trapezium.n.02", "name": "Trapezium"}, + {"id": 14652, "synset": "troposphere.n.01", "name": "troposphere"}, + {"id": 14653, "synset": "tundra.n.01", "name": "tundra"}, + {"id": 14654, "synset": "twinkler.n.01", "name": "twinkler"}, + {"id": 14655, "synset": "uphill.n.01", "name": "uphill"}, + {"id": 14656, "synset": "urolith.n.01", "name": "urolith"}, + {"id": 14657, "synset": "valley.n.01", "name": "valley"}, + { + "id": 14658, + "synset": "vehicle-borne_transmission.n.01", + "name": "vehicle-borne_transmission", + }, + {"id": 14659, "synset": "vein.n.04", "name": "vein"}, + {"id": 14660, "synset": "volcanic_crater.n.01", "name": "volcanic_crater"}, + {"id": 14661, "synset": "volcano.n.02", "name": "volcano"}, + {"id": 14662, "synset": "wadi.n.01", "name": "wadi"}, + {"id": 14663, "synset": "wall.n.05", "name": "wall"}, + {"id": 14664, "synset": "warren.n.03", "name": "warren"}, + {"id": 14665, "synset": "wasp's_nest.n.01", "name": "wasp's_nest"}, + {"id": 14666, "synset": "watercourse.n.01", "name": "watercourse"}, + {"id": 14667, "synset": "waterside.n.01", "name": "waterside"}, + {"id": 14668, "synset": "water_table.n.01", "name": "water_table"}, + {"id": 14669, "synset": "whinstone.n.01", "name": "whinstone"}, + {"id": 14670, "synset": "wormcast.n.02", "name": "wormcast"}, + {"id": 14671, "synset": "xenolith.n.01", "name": "xenolith"}, + {"id": 14672, "synset": "circe.n.01", "name": "Circe"}, + {"id": 14673, "synset": "gryphon.n.01", "name": "gryphon"}, + {"id": 14674, "synset": "spiritual_leader.n.01", "name": "spiritual_leader"}, + {"id": 14675, "synset": "messiah.n.01", "name": "messiah"}, + {"id": 14676, "synset": "rhea_silvia.n.01", "name": "Rhea_Silvia"}, + {"id": 14677, "synset": "number_one.n.01", "name": "number_one"}, + {"id": 14678, "synset": "adventurer.n.01", "name": "adventurer"}, + {"id": 14679, "synset": "anomaly.n.02", "name": "anomaly"}, + {"id": 14680, "synset": "appointee.n.02", "name": "appointee"}, + {"id": 14681, "synset": "argonaut.n.01", "name": "argonaut"}, + {"id": 14682, "synset": "ashkenazi.n.01", "name": "Ashkenazi"}, + {"id": 14683, "synset": "benefactor.n.01", "name": "benefactor"}, + {"id": 14684, "synset": "color-blind_person.n.01", "name": "color-blind_person"}, + {"id": 14685, "synset": "commoner.n.01", "name": "commoner"}, + {"id": 14686, "synset": "conservator.n.02", "name": "conservator"}, + {"id": 14687, "synset": "contrarian.n.01", "name": "contrarian"}, + {"id": 14688, "synset": "contadino.n.01", "name": "contadino"}, + {"id": 14689, "synset": "contestant.n.01", "name": "contestant"}, + {"id": 14690, "synset": "cosigner.n.01", "name": "cosigner"}, + {"id": 14691, "synset": "discussant.n.01", "name": "discussant"}, + {"id": 14692, "synset": "enologist.n.01", "name": "enologist"}, + {"id": 14693, "synset": "entertainer.n.01", "name": "entertainer"}, + {"id": 14694, "synset": "eulogist.n.01", "name": "eulogist"}, + {"id": 14695, "synset": "ex-gambler.n.01", "name": "ex-gambler"}, + {"id": 14696, "synset": "experimenter.n.01", "name": "experimenter"}, + {"id": 14697, "synset": "experimenter.n.02", "name": "experimenter"}, + {"id": 14698, "synset": "exponent.n.02", "name": "exponent"}, + {"id": 14699, "synset": "ex-president.n.01", "name": "ex-president"}, + {"id": 14700, "synset": "face.n.05", "name": "face"}, + {"id": 14701, "synset": "female.n.02", "name": "female"}, + {"id": 14702, "synset": "finisher.n.04", "name": "finisher"}, + {"id": 14703, "synset": "inhabitant.n.01", "name": "inhabitant"}, + {"id": 14704, "synset": "native.n.01", "name": "native"}, + {"id": 14705, "synset": "native.n.02", "name": "native"}, + {"id": 14706, "synset": "juvenile.n.01", "name": "juvenile"}, + {"id": 14707, "synset": "lover.n.01", "name": "lover"}, + {"id": 14708, "synset": "male.n.02", "name": "male"}, + {"id": 14709, "synset": "mediator.n.01", "name": "mediator"}, + {"id": 14710, "synset": "mediatrix.n.01", "name": "mediatrix"}, + {"id": 14711, "synset": "national.n.01", "name": "national"}, + {"id": 14712, "synset": "peer.n.01", "name": "peer"}, + {"id": 14713, "synset": "prize_winner.n.01", "name": "prize_winner"}, + {"id": 14714, "synset": "recipient.n.01", "name": "recipient"}, + {"id": 14715, "synset": "religionist.n.01", "name": "religionist"}, + {"id": 14716, "synset": "sensualist.n.01", "name": "sensualist"}, + {"id": 14717, "synset": "traveler.n.01", "name": "traveler"}, + {"id": 14718, "synset": "unwelcome_person.n.01", "name": "unwelcome_person"}, + {"id": 14719, "synset": "unskilled_person.n.01", "name": "unskilled_person"}, + {"id": 14720, "synset": "worker.n.01", "name": "worker"}, + {"id": 14721, "synset": "wrongdoer.n.01", "name": "wrongdoer"}, + {"id": 14722, "synset": "black_african.n.01", "name": "Black_African"}, + {"id": 14723, "synset": "afrikaner.n.01", "name": "Afrikaner"}, + {"id": 14724, "synset": "aryan.n.01", "name": "Aryan"}, + {"id": 14725, "synset": "black.n.05", "name": "Black"}, + {"id": 14726, "synset": "black_woman.n.01", "name": "Black_woman"}, + {"id": 14727, "synset": "mulatto.n.01", "name": "mulatto"}, + {"id": 14728, "synset": "white.n.01", "name": "White"}, + {"id": 14729, "synset": "circassian.n.01", "name": "Circassian"}, + {"id": 14730, "synset": "semite.n.01", "name": "Semite"}, + {"id": 14731, "synset": "chaldean.n.02", "name": "Chaldean"}, + {"id": 14732, "synset": "elamite.n.01", "name": "Elamite"}, + {"id": 14733, "synset": "white_man.n.01", "name": "white_man"}, + {"id": 14734, "synset": "wasp.n.01", "name": "WASP"}, + {"id": 14735, "synset": "gook.n.02", "name": "gook"}, + {"id": 14736, "synset": "mongol.n.01", "name": "Mongol"}, + {"id": 14737, "synset": "tatar.n.01", "name": "Tatar"}, + {"id": 14738, "synset": "nahuatl.n.01", "name": "Nahuatl"}, + {"id": 14739, "synset": "aztec.n.01", "name": "Aztec"}, + {"id": 14740, "synset": "olmec.n.01", "name": "Olmec"}, + {"id": 14741, "synset": "biloxi.n.01", "name": "Biloxi"}, + {"id": 14742, "synset": "blackfoot.n.01", "name": "Blackfoot"}, + {"id": 14743, "synset": "brule.n.01", "name": "Brule"}, + {"id": 14744, "synset": "caddo.n.01", "name": "Caddo"}, + {"id": 14745, "synset": "cheyenne.n.03", "name": "Cheyenne"}, + {"id": 14746, "synset": "chickasaw.n.01", "name": "Chickasaw"}, + {"id": 14747, "synset": "cocopa.n.01", "name": "Cocopa"}, + {"id": 14748, "synset": "comanche.n.01", "name": "Comanche"}, + {"id": 14749, "synset": "creek.n.02", "name": "Creek"}, + {"id": 14750, "synset": "delaware.n.02", "name": "Delaware"}, + {"id": 14751, "synset": "diegueno.n.01", "name": "Diegueno"}, + {"id": 14752, "synset": "esselen.n.01", "name": "Esselen"}, + {"id": 14753, "synset": "eyeish.n.01", "name": "Eyeish"}, + {"id": 14754, "synset": "havasupai.n.01", "name": "Havasupai"}, + {"id": 14755, "synset": "hunkpapa.n.01", "name": "Hunkpapa"}, + {"id": 14756, "synset": "iowa.n.01", "name": "Iowa"}, + {"id": 14757, "synset": "kalapooia.n.01", "name": "Kalapooia"}, + {"id": 14758, "synset": "kamia.n.01", "name": "Kamia"}, + {"id": 14759, "synset": "kekchi.n.01", "name": "Kekchi"}, + {"id": 14760, "synset": "kichai.n.01", "name": "Kichai"}, + {"id": 14761, "synset": "kickapoo.n.01", "name": "Kickapoo"}, + {"id": 14762, "synset": "kiliwa.n.01", "name": "Kiliwa"}, + {"id": 14763, "synset": "malecite.n.01", "name": "Malecite"}, + {"id": 14764, "synset": "maricopa.n.01", "name": "Maricopa"}, + {"id": 14765, "synset": "mohican.n.01", "name": "Mohican"}, + {"id": 14766, "synset": "muskhogean.n.01", "name": "Muskhogean"}, + {"id": 14767, "synset": "navaho.n.01", "name": "Navaho"}, + {"id": 14768, "synset": "nootka.n.01", "name": "Nootka"}, + {"id": 14769, "synset": "oglala.n.01", "name": "Oglala"}, + {"id": 14770, "synset": "osage.n.01", "name": "Osage"}, + {"id": 14771, "synset": "oneida.n.01", "name": "Oneida"}, + {"id": 14772, "synset": "paiute.n.01", "name": "Paiute"}, + {"id": 14773, "synset": "passamaquody.n.01", "name": "Passamaquody"}, + {"id": 14774, "synset": "penobscot.n.01", "name": "Penobscot"}, + {"id": 14775, "synset": "penutian.n.02", "name": "Penutian"}, + {"id": 14776, "synset": "potawatomi.n.01", "name": "Potawatomi"}, + {"id": 14777, "synset": "powhatan.n.02", "name": "Powhatan"}, + {"id": 14778, "synset": "kachina.n.02", "name": "kachina"}, + {"id": 14779, "synset": "salish.n.02", "name": "Salish"}, + {"id": 14780, "synset": "shahaptian.n.01", "name": "Shahaptian"}, + {"id": 14781, "synset": "shasta.n.01", "name": "Shasta"}, + {"id": 14782, "synset": "shawnee.n.01", "name": "Shawnee"}, + {"id": 14783, "synset": "sihasapa.n.01", "name": "Sihasapa"}, + {"id": 14784, "synset": "teton.n.01", "name": "Teton"}, + {"id": 14785, "synset": "taracahitian.n.01", "name": "Taracahitian"}, + {"id": 14786, "synset": "tarahumara.n.01", "name": "Tarahumara"}, + {"id": 14787, "synset": "tuscarora.n.01", "name": "Tuscarora"}, + {"id": 14788, "synset": "tutelo.n.01", "name": "Tutelo"}, + {"id": 14789, "synset": "yana.n.01", "name": "Yana"}, + {"id": 14790, "synset": "yavapai.n.01", "name": "Yavapai"}, + {"id": 14791, "synset": "yokuts.n.02", "name": "Yokuts"}, + {"id": 14792, "synset": "yuma.n.01", "name": "Yuma"}, + {"id": 14793, "synset": "gadaba.n.01", "name": "Gadaba"}, + {"id": 14794, "synset": "kolam.n.01", "name": "Kolam"}, + {"id": 14795, "synset": "kui.n.01", "name": "Kui"}, + {"id": 14796, "synset": "toda.n.01", "name": "Toda"}, + {"id": 14797, "synset": "tulu.n.01", "name": "Tulu"}, + {"id": 14798, "synset": "gujarati.n.01", "name": "Gujarati"}, + {"id": 14799, "synset": "kashmiri.n.01", "name": "Kashmiri"}, + {"id": 14800, "synset": "punjabi.n.01", "name": "Punjabi"}, + {"id": 14801, "synset": "slav.n.01", "name": "Slav"}, + {"id": 14802, "synset": "anabaptist.n.01", "name": "Anabaptist"}, + {"id": 14803, "synset": "adventist.n.01", "name": "Adventist"}, + {"id": 14804, "synset": "gentile.n.03", "name": "gentile"}, + {"id": 14805, "synset": "gentile.n.02", "name": "gentile"}, + {"id": 14806, "synset": "catholic.n.01", "name": "Catholic"}, + {"id": 14807, "synset": "old_catholic.n.01", "name": "Old_Catholic"}, + {"id": 14808, "synset": "uniat.n.01", "name": "Uniat"}, + {"id": 14809, "synset": "copt.n.02", "name": "Copt"}, + {"id": 14810, "synset": "jewess.n.01", "name": "Jewess"}, + {"id": 14811, "synset": "jihadist.n.01", "name": "Jihadist"}, + {"id": 14812, "synset": "buddhist.n.01", "name": "Buddhist"}, + {"id": 14813, "synset": "zen_buddhist.n.01", "name": "Zen_Buddhist"}, + {"id": 14814, "synset": "mahayanist.n.01", "name": "Mahayanist"}, + {"id": 14815, "synset": "swami.n.01", "name": "swami"}, + {"id": 14816, "synset": "hare_krishna.n.01", "name": "Hare_Krishna"}, + {"id": 14817, "synset": "shintoist.n.01", "name": "Shintoist"}, + {"id": 14818, "synset": "eurafrican.n.01", "name": "Eurafrican"}, + {"id": 14819, "synset": "eurasian.n.01", "name": "Eurasian"}, + {"id": 14820, "synset": "gael.n.01", "name": "Gael"}, + {"id": 14821, "synset": "frank.n.01", "name": "Frank"}, + {"id": 14822, "synset": "afghan.n.02", "name": "Afghan"}, + {"id": 14823, "synset": "albanian.n.01", "name": "Albanian"}, + {"id": 14824, "synset": "algerian.n.01", "name": "Algerian"}, + {"id": 14825, "synset": "altaic.n.01", "name": "Altaic"}, + {"id": 14826, "synset": "andorran.n.01", "name": "Andorran"}, + {"id": 14827, "synset": "angolan.n.01", "name": "Angolan"}, + {"id": 14828, "synset": "anguillan.n.01", "name": "Anguillan"}, + {"id": 14829, "synset": "austrian.n.01", "name": "Austrian"}, + {"id": 14830, "synset": "bahamian.n.01", "name": "Bahamian"}, + {"id": 14831, "synset": "bahraini.n.01", "name": "Bahraini"}, + {"id": 14832, "synset": "basotho.n.01", "name": "Basotho"}, + {"id": 14833, "synset": "herero.n.01", "name": "Herero"}, + {"id": 14834, "synset": "luba.n.01", "name": "Luba"}, + {"id": 14835, "synset": "barbadian.n.01", "name": "Barbadian"}, + {"id": 14836, "synset": "bolivian.n.01", "name": "Bolivian"}, + {"id": 14837, "synset": "bornean.n.01", "name": "Bornean"}, + {"id": 14838, "synset": "carioca.n.01", "name": "Carioca"}, + {"id": 14839, "synset": "tupi.n.01", "name": "Tupi"}, + {"id": 14840, "synset": "bruneian.n.01", "name": "Bruneian"}, + {"id": 14841, "synset": "bulgarian.n.01", "name": "Bulgarian"}, + {"id": 14842, "synset": "byelorussian.n.01", "name": "Byelorussian"}, + {"id": 14843, "synset": "cameroonian.n.01", "name": "Cameroonian"}, + {"id": 14844, "synset": "canadian.n.01", "name": "Canadian"}, + {"id": 14845, "synset": "french_canadian.n.01", "name": "French_Canadian"}, + {"id": 14846, "synset": "central_american.n.01", "name": "Central_American"}, + {"id": 14847, "synset": "chilean.n.01", "name": "Chilean"}, + {"id": 14848, "synset": "congolese.n.01", "name": "Congolese"}, + {"id": 14849, "synset": "cypriot.n.01", "name": "Cypriot"}, + {"id": 14850, "synset": "dane.n.01", "name": "Dane"}, + {"id": 14851, "synset": "djiboutian.n.01", "name": "Djiboutian"}, + {"id": 14852, "synset": "britisher.n.01", "name": "Britisher"}, + {"id": 14853, "synset": "english_person.n.01", "name": "English_person"}, + {"id": 14854, "synset": "englishwoman.n.01", "name": "Englishwoman"}, + {"id": 14855, "synset": "anglo-saxon.n.02", "name": "Anglo-Saxon"}, + {"id": 14856, "synset": "angle.n.03", "name": "Angle"}, + {"id": 14857, "synset": "west_saxon.n.01", "name": "West_Saxon"}, + {"id": 14858, "synset": "lombard.n.01", "name": "Lombard"}, + {"id": 14859, "synset": "limey.n.01", "name": "limey"}, + {"id": 14860, "synset": "cantabrigian.n.01", "name": "Cantabrigian"}, + {"id": 14861, "synset": "cornishman.n.01", "name": "Cornishman"}, + {"id": 14862, "synset": "cornishwoman.n.01", "name": "Cornishwoman"}, + {"id": 14863, "synset": "lancastrian.n.02", "name": "Lancastrian"}, + {"id": 14864, "synset": "lancastrian.n.01", "name": "Lancastrian"}, + {"id": 14865, "synset": "geordie.n.01", "name": "Geordie"}, + {"id": 14866, "synset": "oxonian.n.01", "name": "Oxonian"}, + {"id": 14867, "synset": "ethiopian.n.01", "name": "Ethiopian"}, + {"id": 14868, "synset": "amhara.n.01", "name": "Amhara"}, + {"id": 14869, "synset": "eritrean.n.01", "name": "Eritrean"}, + {"id": 14870, "synset": "finn.n.01", "name": "Finn"}, + {"id": 14871, "synset": "komi.n.01", "name": "Komi"}, + {"id": 14872, "synset": "livonian.n.01", "name": "Livonian"}, + {"id": 14873, "synset": "lithuanian.n.01", "name": "Lithuanian"}, + {"id": 14874, "synset": "selkup.n.01", "name": "Selkup"}, + {"id": 14875, "synset": "parisian.n.01", "name": "Parisian"}, + {"id": 14876, "synset": "parisienne.n.01", "name": "Parisienne"}, + {"id": 14877, "synset": "creole.n.02", "name": "Creole"}, + {"id": 14878, "synset": "creole.n.01", "name": "Creole"}, + {"id": 14879, "synset": "gabonese.n.01", "name": "Gabonese"}, + {"id": 14880, "synset": "greek.n.02", "name": "Greek"}, + {"id": 14881, "synset": "dorian.n.01", "name": "Dorian"}, + {"id": 14882, "synset": "athenian.n.01", "name": "Athenian"}, + {"id": 14883, "synset": "laconian.n.01", "name": "Laconian"}, + {"id": 14884, "synset": "guyanese.n.01", "name": "Guyanese"}, + {"id": 14885, "synset": "haitian.n.01", "name": "Haitian"}, + {"id": 14886, "synset": "malay.n.01", "name": "Malay"}, + {"id": 14887, "synset": "moro.n.01", "name": "Moro"}, + {"id": 14888, "synset": "netherlander.n.01", "name": "Netherlander"}, + {"id": 14889, "synset": "icelander.n.01", "name": "Icelander"}, + {"id": 14890, "synset": "iraqi.n.01", "name": "Iraqi"}, + {"id": 14891, "synset": "irishman.n.01", "name": "Irishman"}, + {"id": 14892, "synset": "irishwoman.n.01", "name": "Irishwoman"}, + {"id": 14893, "synset": "dubliner.n.01", "name": "Dubliner"}, + {"id": 14894, "synset": "italian.n.01", "name": "Italian"}, + {"id": 14895, "synset": "roman.n.01", "name": "Roman"}, + {"id": 14896, "synset": "sabine.n.02", "name": "Sabine"}, + {"id": 14897, "synset": "japanese.n.01", "name": "Japanese"}, + {"id": 14898, "synset": "jordanian.n.01", "name": "Jordanian"}, + {"id": 14899, "synset": "korean.n.01", "name": "Korean"}, + {"id": 14900, "synset": "kenyan.n.01", "name": "Kenyan"}, + {"id": 14901, "synset": "lao.n.01", "name": "Lao"}, + {"id": 14902, "synset": "lapp.n.01", "name": "Lapp"}, + {"id": 14903, "synset": "latin_american.n.01", "name": "Latin_American"}, + {"id": 14904, "synset": "lebanese.n.01", "name": "Lebanese"}, + {"id": 14905, "synset": "levantine.n.01", "name": "Levantine"}, + {"id": 14906, "synset": "liberian.n.01", "name": "Liberian"}, + {"id": 14907, "synset": "luxemburger.n.01", "name": "Luxemburger"}, + {"id": 14908, "synset": "macedonian.n.01", "name": "Macedonian"}, + {"id": 14909, "synset": "sabahan.n.01", "name": "Sabahan"}, + {"id": 14910, "synset": "mexican.n.01", "name": "Mexican"}, + {"id": 14911, "synset": "chicano.n.01", "name": "Chicano"}, + {"id": 14912, "synset": "mexican-american.n.01", "name": "Mexican-American"}, + {"id": 14913, "synset": "namibian.n.01", "name": "Namibian"}, + {"id": 14914, "synset": "nauruan.n.01", "name": "Nauruan"}, + {"id": 14915, "synset": "gurkha.n.02", "name": "Gurkha"}, + {"id": 14916, "synset": "new_zealander.n.01", "name": "New_Zealander"}, + {"id": 14917, "synset": "nicaraguan.n.01", "name": "Nicaraguan"}, + {"id": 14918, "synset": "nigerian.n.01", "name": "Nigerian"}, + {"id": 14919, "synset": "hausa.n.01", "name": "Hausa"}, + {"id": 14920, "synset": "north_american.n.01", "name": "North_American"}, + {"id": 14921, "synset": "nova_scotian.n.01", "name": "Nova_Scotian"}, + {"id": 14922, "synset": "omani.n.01", "name": "Omani"}, + {"id": 14923, "synset": "pakistani.n.01", "name": "Pakistani"}, + {"id": 14924, "synset": "brahui.n.01", "name": "Brahui"}, + { + "id": 14925, + "synset": "south_american_indian.n.01", + "name": "South_American_Indian", + }, + {"id": 14926, "synset": "carib.n.01", "name": "Carib"}, + {"id": 14927, "synset": "filipino.n.01", "name": "Filipino"}, + {"id": 14928, "synset": "polynesian.n.01", "name": "Polynesian"}, + {"id": 14929, "synset": "qatari.n.01", "name": "Qatari"}, + {"id": 14930, "synset": "romanian.n.01", "name": "Romanian"}, + {"id": 14931, "synset": "muscovite.n.02", "name": "Muscovite"}, + {"id": 14932, "synset": "georgian.n.02", "name": "Georgian"}, + {"id": 14933, "synset": "sarawakian.n.01", "name": "Sarawakian"}, + {"id": 14934, "synset": "scandinavian.n.01", "name": "Scandinavian"}, + {"id": 14935, "synset": "senegalese.n.01", "name": "Senegalese"}, + {"id": 14936, "synset": "slovene.n.01", "name": "Slovene"}, + {"id": 14937, "synset": "south_african.n.01", "name": "South_African"}, + {"id": 14938, "synset": "south_american.n.01", "name": "South_American"}, + {"id": 14939, "synset": "sudanese.n.01", "name": "Sudanese"}, + {"id": 14940, "synset": "syrian.n.01", "name": "Syrian"}, + {"id": 14941, "synset": "tahitian.n.01", "name": "Tahitian"}, + {"id": 14942, "synset": "tanzanian.n.01", "name": "Tanzanian"}, + {"id": 14943, "synset": "tibetan.n.02", "name": "Tibetan"}, + {"id": 14944, "synset": "togolese.n.01", "name": "Togolese"}, + {"id": 14945, "synset": "tuareg.n.01", "name": "Tuareg"}, + {"id": 14946, "synset": "turki.n.01", "name": "Turki"}, + {"id": 14947, "synset": "chuvash.n.01", "name": "Chuvash"}, + {"id": 14948, "synset": "turkoman.n.01", "name": "Turkoman"}, + {"id": 14949, "synset": "uzbek.n.01", "name": "Uzbek"}, + {"id": 14950, "synset": "ugandan.n.01", "name": "Ugandan"}, + {"id": 14951, "synset": "ukranian.n.01", "name": "Ukranian"}, + {"id": 14952, "synset": "yakut.n.01", "name": "Yakut"}, + {"id": 14953, "synset": "tungus.n.01", "name": "Tungus"}, + {"id": 14954, "synset": "igbo.n.01", "name": "Igbo"}, + {"id": 14955, "synset": "american.n.03", "name": "American"}, + {"id": 14956, "synset": "anglo-american.n.01", "name": "Anglo-American"}, + {"id": 14957, "synset": "alaska_native.n.01", "name": "Alaska_Native"}, + {"id": 14958, "synset": "arkansan.n.01", "name": "Arkansan"}, + {"id": 14959, "synset": "carolinian.n.01", "name": "Carolinian"}, + {"id": 14960, "synset": "coloradan.n.01", "name": "Coloradan"}, + {"id": 14961, "synset": "connecticuter.n.01", "name": "Connecticuter"}, + {"id": 14962, "synset": "delawarean.n.01", "name": "Delawarean"}, + {"id": 14963, "synset": "floridian.n.01", "name": "Floridian"}, + {"id": 14964, "synset": "german_american.n.01", "name": "German_American"}, + {"id": 14965, "synset": "illinoisan.n.01", "name": "Illinoisan"}, + {"id": 14966, "synset": "mainer.n.01", "name": "Mainer"}, + {"id": 14967, "synset": "marylander.n.01", "name": "Marylander"}, + {"id": 14968, "synset": "minnesotan.n.01", "name": "Minnesotan"}, + {"id": 14969, "synset": "nebraskan.n.01", "name": "Nebraskan"}, + {"id": 14970, "synset": "new_hampshirite.n.01", "name": "New_Hampshirite"}, + {"id": 14971, "synset": "new_jerseyan.n.01", "name": "New_Jerseyan"}, + {"id": 14972, "synset": "new_yorker.n.01", "name": "New_Yorker"}, + {"id": 14973, "synset": "north_carolinian.n.01", "name": "North_Carolinian"}, + {"id": 14974, "synset": "oregonian.n.01", "name": "Oregonian"}, + {"id": 14975, "synset": "pennsylvanian.n.02", "name": "Pennsylvanian"}, + {"id": 14976, "synset": "texan.n.01", "name": "Texan"}, + {"id": 14977, "synset": "utahan.n.01", "name": "Utahan"}, + {"id": 14978, "synset": "uruguayan.n.01", "name": "Uruguayan"}, + {"id": 14979, "synset": "vietnamese.n.01", "name": "Vietnamese"}, + {"id": 14980, "synset": "gambian.n.01", "name": "Gambian"}, + {"id": 14981, "synset": "east_german.n.01", "name": "East_German"}, + {"id": 14982, "synset": "berliner.n.01", "name": "Berliner"}, + {"id": 14983, "synset": "prussian.n.01", "name": "Prussian"}, + {"id": 14984, "synset": "ghanian.n.01", "name": "Ghanian"}, + {"id": 14985, "synset": "guinean.n.01", "name": "Guinean"}, + {"id": 14986, "synset": "papuan.n.01", "name": "Papuan"}, + {"id": 14987, "synset": "walloon.n.01", "name": "Walloon"}, + {"id": 14988, "synset": "yemeni.n.01", "name": "Yemeni"}, + {"id": 14989, "synset": "yugoslav.n.01", "name": "Yugoslav"}, + {"id": 14990, "synset": "serbian.n.01", "name": "Serbian"}, + {"id": 14991, "synset": "xhosa.n.01", "name": "Xhosa"}, + {"id": 14992, "synset": "zairese.n.01", "name": "Zairese"}, + {"id": 14993, "synset": "zimbabwean.n.01", "name": "Zimbabwean"}, + {"id": 14994, "synset": "zulu.n.01", "name": "Zulu"}, + {"id": 14995, "synset": "gemini.n.01", "name": "Gemini"}, + {"id": 14996, "synset": "sagittarius.n.01", "name": "Sagittarius"}, + {"id": 14997, "synset": "pisces.n.02", "name": "Pisces"}, + {"id": 14998, "synset": "abbe.n.01", "name": "abbe"}, + {"id": 14999, "synset": "abbess.n.01", "name": "abbess"}, + {"id": 15000, "synset": "abnegator.n.01", "name": "abnegator"}, + {"id": 15001, "synset": "abridger.n.01", "name": "abridger"}, + {"id": 15002, "synset": "abstractor.n.01", "name": "abstractor"}, + {"id": 15003, "synset": "absconder.n.01", "name": "absconder"}, + {"id": 15004, "synset": "absolver.n.01", "name": "absolver"}, + {"id": 15005, "synset": "abecedarian.n.01", "name": "abecedarian"}, + {"id": 15006, "synset": "aberrant.n.01", "name": "aberrant"}, + {"id": 15007, "synset": "abettor.n.01", "name": "abettor"}, + {"id": 15008, "synset": "abhorrer.n.01", "name": "abhorrer"}, + {"id": 15009, "synset": "abomination.n.01", "name": "abomination"}, + {"id": 15010, "synset": "abseiler.n.01", "name": "abseiler"}, + {"id": 15011, "synset": "abstainer.n.01", "name": "abstainer"}, + { + "id": 15012, + "synset": "academic_administrator.n.01", + "name": "academic_administrator", + }, + {"id": 15013, "synset": "academician.n.01", "name": "academician"}, + { + "id": 15014, + "synset": "accessory_before_the_fact.n.01", + "name": "accessory_before_the_fact", + }, + {"id": 15015, "synset": "companion.n.03", "name": "companion"}, + {"id": 15016, "synset": "accompanist.n.01", "name": "accompanist"}, + {"id": 15017, "synset": "accomplice.n.01", "name": "accomplice"}, + {"id": 15018, "synset": "account_executive.n.01", "name": "account_executive"}, + {"id": 15019, "synset": "accused.n.01", "name": "accused"}, + {"id": 15020, "synset": "accuser.n.01", "name": "accuser"}, + {"id": 15021, "synset": "acid_head.n.01", "name": "acid_head"}, + {"id": 15022, "synset": "acquaintance.n.03", "name": "acquaintance"}, + {"id": 15023, "synset": "acquirer.n.01", "name": "acquirer"}, + {"id": 15024, "synset": "aerialist.n.01", "name": "aerialist"}, + {"id": 15025, "synset": "action_officer.n.01", "name": "action_officer"}, + {"id": 15026, "synset": "active.n.03", "name": "active"}, + {"id": 15027, "synset": "active_citizen.n.01", "name": "active_citizen"}, + {"id": 15028, "synset": "actor.n.01", "name": "actor"}, + {"id": 15029, "synset": "actor.n.02", "name": "actor"}, + {"id": 15030, "synset": "addict.n.01", "name": "addict"}, + {"id": 15031, "synset": "adducer.n.01", "name": "adducer"}, + {"id": 15032, "synset": "adjuster.n.01", "name": "adjuster"}, + {"id": 15033, "synset": "adjutant.n.01", "name": "adjutant"}, + {"id": 15034, "synset": "adjutant_general.n.01", "name": "adjutant_general"}, + {"id": 15035, "synset": "admirer.n.03", "name": "admirer"}, + {"id": 15036, "synset": "adoptee.n.01", "name": "adoptee"}, + {"id": 15037, "synset": "adulterer.n.01", "name": "adulterer"}, + {"id": 15038, "synset": "adulteress.n.01", "name": "adulteress"}, + {"id": 15039, "synset": "advertiser.n.01", "name": "advertiser"}, + {"id": 15040, "synset": "advisee.n.01", "name": "advisee"}, + {"id": 15041, "synset": "advocate.n.01", "name": "advocate"}, + { + "id": 15042, + "synset": "aeronautical_engineer.n.01", + "name": "aeronautical_engineer", + }, + {"id": 15043, "synset": "affiliate.n.01", "name": "affiliate"}, + {"id": 15044, "synset": "affluent.n.01", "name": "affluent"}, + {"id": 15045, "synset": "aficionado.n.02", "name": "aficionado"}, + {"id": 15046, "synset": "buck_sergeant.n.01", "name": "buck_sergeant"}, + {"id": 15047, "synset": "agent-in-place.n.01", "name": "agent-in-place"}, + {"id": 15048, "synset": "aggravator.n.01", "name": "aggravator"}, + {"id": 15049, "synset": "agitator.n.01", "name": "agitator"}, + {"id": 15050, "synset": "agnostic.n.02", "name": "agnostic"}, + {"id": 15051, "synset": "agnostic.n.01", "name": "agnostic"}, + {"id": 15052, "synset": "agonist.n.02", "name": "agonist"}, + {"id": 15053, "synset": "agony_aunt.n.01", "name": "agony_aunt"}, + {"id": 15054, "synset": "agriculturist.n.01", "name": "agriculturist"}, + {"id": 15055, "synset": "air_attache.n.01", "name": "air_attache"}, + {"id": 15056, "synset": "air_force_officer.n.01", "name": "air_force_officer"}, + {"id": 15057, "synset": "airhead.n.01", "name": "airhead"}, + {"id": 15058, "synset": "air_traveler.n.01", "name": "air_traveler"}, + {"id": 15059, "synset": "alarmist.n.01", "name": "alarmist"}, + {"id": 15060, "synset": "albino.n.01", "name": "albino"}, + {"id": 15061, "synset": "alcoholic.n.01", "name": "alcoholic"}, + {"id": 15062, "synset": "alderman.n.01", "name": "alderman"}, + {"id": 15063, "synset": "alexic.n.01", "name": "alexic"}, + {"id": 15064, "synset": "alienee.n.01", "name": "alienee"}, + {"id": 15065, "synset": "alienor.n.01", "name": "alienor"}, + {"id": 15066, "synset": "aliterate.n.01", "name": "aliterate"}, + {"id": 15067, "synset": "algebraist.n.01", "name": "algebraist"}, + {"id": 15068, "synset": "allegorizer.n.01", "name": "allegorizer"}, + {"id": 15069, "synset": "alliterator.n.01", "name": "alliterator"}, + {"id": 15070, "synset": "almoner.n.01", "name": "almoner"}, + {"id": 15071, "synset": "alpinist.n.01", "name": "alpinist"}, + {"id": 15072, "synset": "altar_boy.n.01", "name": "altar_boy"}, + {"id": 15073, "synset": "alto.n.01", "name": "alto"}, + {"id": 15074, "synset": "ambassador.n.01", "name": "ambassador"}, + {"id": 15075, "synset": "ambassador.n.02", "name": "ambassador"}, + {"id": 15076, "synset": "ambusher.n.01", "name": "ambusher"}, + {"id": 15077, "synset": "amicus_curiae.n.01", "name": "amicus_curiae"}, + {"id": 15078, "synset": "amoralist.n.01", "name": "amoralist"}, + {"id": 15079, "synset": "amputee.n.01", "name": "amputee"}, + {"id": 15080, "synset": "analogist.n.01", "name": "analogist"}, + {"id": 15081, "synset": "analphabet.n.01", "name": "analphabet"}, + {"id": 15082, "synset": "analyst.n.01", "name": "analyst"}, + {"id": 15083, "synset": "industry_analyst.n.01", "name": "industry_analyst"}, + {"id": 15084, "synset": "market_strategist.n.01", "name": "market_strategist"}, + {"id": 15085, "synset": "anarchist.n.01", "name": "anarchist"}, + {"id": 15086, "synset": "anathema.n.01", "name": "anathema"}, + {"id": 15087, "synset": "ancestor.n.01", "name": "ancestor"}, + {"id": 15088, "synset": "anchor.n.03", "name": "anchor"}, + {"id": 15089, "synset": "ancient.n.02", "name": "ancient"}, + {"id": 15090, "synset": "anecdotist.n.01", "name": "anecdotist"}, + {"id": 15091, "synset": "angler.n.02", "name": "angler"}, + {"id": 15092, "synset": "animator.n.02", "name": "animator"}, + {"id": 15093, "synset": "animist.n.01", "name": "animist"}, + {"id": 15094, "synset": "annotator.n.01", "name": "annotator"}, + {"id": 15095, "synset": "announcer.n.02", "name": "announcer"}, + {"id": 15096, "synset": "announcer.n.01", "name": "announcer"}, + {"id": 15097, "synset": "anti.n.01", "name": "anti"}, + {"id": 15098, "synset": "anti-american.n.01", "name": "anti-American"}, + {"id": 15099, "synset": "anti-semite.n.01", "name": "anti-Semite"}, + {"id": 15100, "synset": "anzac.n.01", "name": "Anzac"}, + {"id": 15101, "synset": "ape-man.n.02", "name": "ape-man"}, + {"id": 15102, "synset": "aphakic.n.01", "name": "aphakic"}, + {"id": 15103, "synset": "appellant.n.01", "name": "appellant"}, + {"id": 15104, "synset": "appointee.n.01", "name": "appointee"}, + {"id": 15105, "synset": "apprehender.n.02", "name": "apprehender"}, + {"id": 15106, "synset": "april_fool.n.01", "name": "April_fool"}, + {"id": 15107, "synset": "aspirant.n.01", "name": "aspirant"}, + {"id": 15108, "synset": "appreciator.n.01", "name": "appreciator"}, + {"id": 15109, "synset": "appropriator.n.01", "name": "appropriator"}, + {"id": 15110, "synset": "arabist.n.01", "name": "Arabist"}, + {"id": 15111, "synset": "archaist.n.01", "name": "archaist"}, + {"id": 15112, "synset": "archbishop.n.01", "name": "archbishop"}, + {"id": 15113, "synset": "archer.n.01", "name": "archer"}, + {"id": 15114, "synset": "architect.n.01", "name": "architect"}, + {"id": 15115, "synset": "archivist.n.01", "name": "archivist"}, + {"id": 15116, "synset": "archpriest.n.01", "name": "archpriest"}, + {"id": 15117, "synset": "aristotelian.n.01", "name": "Aristotelian"}, + {"id": 15118, "synset": "armiger.n.02", "name": "armiger"}, + {"id": 15119, "synset": "army_attache.n.01", "name": "army_attache"}, + {"id": 15120, "synset": "army_engineer.n.01", "name": "army_engineer"}, + {"id": 15121, "synset": "army_officer.n.01", "name": "army_officer"}, + {"id": 15122, "synset": "arranger.n.02", "name": "arranger"}, + {"id": 15123, "synset": "arrival.n.03", "name": "arrival"}, + {"id": 15124, "synset": "arthritic.n.01", "name": "arthritic"}, + {"id": 15125, "synset": "articulator.n.01", "name": "articulator"}, + {"id": 15126, "synset": "artilleryman.n.01", "name": "artilleryman"}, + {"id": 15127, "synset": "artist's_model.n.01", "name": "artist's_model"}, + {"id": 15128, "synset": "assayer.n.01", "name": "assayer"}, + {"id": 15129, "synset": "assemblyman.n.01", "name": "assemblyman"}, + {"id": 15130, "synset": "assemblywoman.n.01", "name": "assemblywoman"}, + {"id": 15131, "synset": "assenter.n.01", "name": "assenter"}, + {"id": 15132, "synset": "asserter.n.01", "name": "asserter"}, + {"id": 15133, "synset": "assignee.n.01", "name": "assignee"}, + {"id": 15134, "synset": "assistant.n.01", "name": "assistant"}, + {"id": 15135, "synset": "assistant_professor.n.01", "name": "assistant_professor"}, + {"id": 15136, "synset": "associate.n.01", "name": "associate"}, + {"id": 15137, "synset": "associate.n.03", "name": "associate"}, + {"id": 15138, "synset": "associate_professor.n.01", "name": "associate_professor"}, + {"id": 15139, "synset": "astronaut.n.01", "name": "astronaut"}, + {"id": 15140, "synset": "cosmographer.n.01", "name": "cosmographer"}, + {"id": 15141, "synset": "atheist.n.01", "name": "atheist"}, + {"id": 15142, "synset": "athlete.n.01", "name": "athlete"}, + {"id": 15143, "synset": "attendant.n.01", "name": "attendant"}, + {"id": 15144, "synset": "attorney_general.n.01", "name": "attorney_general"}, + {"id": 15145, "synset": "auditor.n.02", "name": "auditor"}, + {"id": 15146, "synset": "augur.n.01", "name": "augur"}, + {"id": 15147, "synset": "aunt.n.01", "name": "aunt"}, + {"id": 15148, "synset": "au_pair_girl.n.01", "name": "au_pair_girl"}, + {"id": 15149, "synset": "authoritarian.n.01", "name": "authoritarian"}, + {"id": 15150, "synset": "authority.n.02", "name": "authority"}, + {"id": 15151, "synset": "authorizer.n.01", "name": "authorizer"}, + {"id": 15152, "synset": "automobile_mechanic.n.01", "name": "automobile_mechanic"}, + {"id": 15153, "synset": "aviator.n.01", "name": "aviator"}, + {"id": 15154, "synset": "aviatrix.n.01", "name": "aviatrix"}, + {"id": 15155, "synset": "ayah.n.01", "name": "ayah"}, + {"id": 15156, "synset": "babu.n.01", "name": "babu"}, + {"id": 15157, "synset": "baby.n.05", "name": "baby"}, + {"id": 15158, "synset": "baby.n.04", "name": "baby"}, + {"id": 15159, "synset": "baby_boomer.n.01", "name": "baby_boomer"}, + {"id": 15160, "synset": "baby_farmer.n.01", "name": "baby_farmer"}, + {"id": 15161, "synset": "back.n.04", "name": "back"}, + {"id": 15162, "synset": "backbencher.n.01", "name": "backbencher"}, + {"id": 15163, "synset": "backpacker.n.01", "name": "backpacker"}, + {"id": 15164, "synset": "backroom_boy.n.01", "name": "backroom_boy"}, + {"id": 15165, "synset": "backscratcher.n.01", "name": "backscratcher"}, + {"id": 15166, "synset": "bad_person.n.01", "name": "bad_person"}, + {"id": 15167, "synset": "baggage.n.02", "name": "baggage"}, + {"id": 15168, "synset": "bag_lady.n.01", "name": "bag_lady"}, + {"id": 15169, "synset": "bailee.n.01", "name": "bailee"}, + {"id": 15170, "synset": "bailiff.n.01", "name": "bailiff"}, + {"id": 15171, "synset": "bailor.n.01", "name": "bailor"}, + {"id": 15172, "synset": "bairn.n.01", "name": "bairn"}, + {"id": 15173, "synset": "baker.n.02", "name": "baker"}, + {"id": 15174, "synset": "balancer.n.01", "name": "balancer"}, + {"id": 15175, "synset": "balker.n.01", "name": "balker"}, + {"id": 15176, "synset": "ball-buster.n.01", "name": "ball-buster"}, + {"id": 15177, "synset": "ball_carrier.n.01", "name": "ball_carrier"}, + {"id": 15178, "synset": "ballet_dancer.n.01", "name": "ballet_dancer"}, + {"id": 15179, "synset": "ballet_master.n.01", "name": "ballet_master"}, + {"id": 15180, "synset": "ballet_mistress.n.01", "name": "ballet_mistress"}, + {"id": 15181, "synset": "balletomane.n.01", "name": "balletomane"}, + {"id": 15182, "synset": "ball_hawk.n.01", "name": "ball_hawk"}, + {"id": 15183, "synset": "balloonist.n.01", "name": "balloonist"}, + {"id": 15184, "synset": "ballplayer.n.01", "name": "ballplayer"}, + {"id": 15185, "synset": "bullfighter.n.01", "name": "bullfighter"}, + {"id": 15186, "synset": "banderillero.n.01", "name": "banderillero"}, + {"id": 15187, "synset": "matador.n.01", "name": "matador"}, + {"id": 15188, "synset": "picador.n.01", "name": "picador"}, + {"id": 15189, "synset": "bandsman.n.01", "name": "bandsman"}, + {"id": 15190, "synset": "banker.n.02", "name": "banker"}, + {"id": 15191, "synset": "bank_robber.n.01", "name": "bank_robber"}, + {"id": 15192, "synset": "bankrupt.n.01", "name": "bankrupt"}, + {"id": 15193, "synset": "bantamweight.n.01", "name": "bantamweight"}, + {"id": 15194, "synset": "barmaid.n.01", "name": "barmaid"}, + {"id": 15195, "synset": "baron.n.03", "name": "baron"}, + {"id": 15196, "synset": "baron.n.02", "name": "baron"}, + {"id": 15197, "synset": "baron.n.01", "name": "baron"}, + {"id": 15198, "synset": "bartender.n.01", "name": "bartender"}, + {"id": 15199, "synset": "baseball_coach.n.01", "name": "baseball_coach"}, + {"id": 15200, "synset": "base_runner.n.01", "name": "base_runner"}, + {"id": 15201, "synset": "basketball_player.n.01", "name": "basketball_player"}, + {"id": 15202, "synset": "basketweaver.n.01", "name": "basketweaver"}, + {"id": 15203, "synset": "basket_maker.n.01", "name": "Basket_Maker"}, + {"id": 15204, "synset": "bass.n.03", "name": "bass"}, + {"id": 15205, "synset": "bastard.n.02", "name": "bastard"}, + {"id": 15206, "synset": "bat_boy.n.01", "name": "bat_boy"}, + {"id": 15207, "synset": "bather.n.02", "name": "bather"}, + {"id": 15208, "synset": "batman.n.01", "name": "batman"}, + {"id": 15209, "synset": "baton_twirler.n.01", "name": "baton_twirler"}, + {"id": 15210, "synset": "bavarian.n.01", "name": "Bavarian"}, + {"id": 15211, "synset": "beadsman.n.01", "name": "beadsman"}, + {"id": 15212, "synset": "beard.n.03", "name": "beard"}, + {"id": 15213, "synset": "beatnik.n.01", "name": "beatnik"}, + {"id": 15214, "synset": "beauty_consultant.n.01", "name": "beauty_consultant"}, + {"id": 15215, "synset": "bedouin.n.01", "name": "Bedouin"}, + {"id": 15216, "synset": "bedwetter.n.01", "name": "bedwetter"}, + {"id": 15217, "synset": "beekeeper.n.01", "name": "beekeeper"}, + {"id": 15218, "synset": "beer_drinker.n.01", "name": "beer_drinker"}, + {"id": 15219, "synset": "beggarman.n.01", "name": "beggarman"}, + {"id": 15220, "synset": "beggarwoman.n.01", "name": "beggarwoman"}, + {"id": 15221, "synset": "beldam.n.02", "name": "beldam"}, + {"id": 15222, "synset": "theist.n.01", "name": "theist"}, + {"id": 15223, "synset": "believer.n.01", "name": "believer"}, + {"id": 15224, "synset": "bell_founder.n.01", "name": "bell_founder"}, + {"id": 15225, "synset": "benedick.n.01", "name": "benedick"}, + {"id": 15226, "synset": "berserker.n.01", "name": "berserker"}, + {"id": 15227, "synset": "besieger.n.01", "name": "besieger"}, + {"id": 15228, "synset": "best.n.02", "name": "best"}, + {"id": 15229, "synset": "betrothed.n.01", "name": "betrothed"}, + {"id": 15230, "synset": "big_brother.n.01", "name": "Big_Brother"}, + {"id": 15231, "synset": "bigot.n.01", "name": "bigot"}, + {"id": 15232, "synset": "big_shot.n.01", "name": "big_shot"}, + {"id": 15233, "synset": "big_sister.n.01", "name": "big_sister"}, + {"id": 15234, "synset": "billiard_player.n.01", "name": "billiard_player"}, + {"id": 15235, "synset": "biochemist.n.01", "name": "biochemist"}, + {"id": 15236, "synset": "biographer.n.01", "name": "biographer"}, + {"id": 15237, "synset": "bird_fancier.n.01", "name": "bird_fancier"}, + {"id": 15238, "synset": "birth.n.05", "name": "birth"}, + { + "id": 15239, + "synset": "birth-control_campaigner.n.01", + "name": "birth-control_campaigner", + }, + {"id": 15240, "synset": "bisexual.n.01", "name": "bisexual"}, + {"id": 15241, "synset": "black_belt.n.01", "name": "black_belt"}, + {"id": 15242, "synset": "blackmailer.n.01", "name": "blackmailer"}, + {"id": 15243, "synset": "black_muslim.n.01", "name": "Black_Muslim"}, + {"id": 15244, "synset": "blacksmith.n.01", "name": "blacksmith"}, + {"id": 15245, "synset": "blade.n.02", "name": "blade"}, + {"id": 15246, "synset": "blind_date.n.01", "name": "blind_date"}, + {"id": 15247, "synset": "bluecoat.n.01", "name": "bluecoat"}, + {"id": 15248, "synset": "bluestocking.n.01", "name": "bluestocking"}, + {"id": 15249, "synset": "boatbuilder.n.01", "name": "boatbuilder"}, + {"id": 15250, "synset": "boatman.n.01", "name": "boatman"}, + {"id": 15251, "synset": "boatswain.n.01", "name": "boatswain"}, + {"id": 15252, "synset": "bobby.n.01", "name": "bobby"}, + {"id": 15253, "synset": "bodyguard.n.01", "name": "bodyguard"}, + {"id": 15254, "synset": "boffin.n.01", "name": "boffin"}, + {"id": 15255, "synset": "bolshevik.n.01", "name": "Bolshevik"}, + {"id": 15256, "synset": "bolshevik.n.02", "name": "Bolshevik"}, + {"id": 15257, "synset": "bombshell.n.01", "name": "bombshell"}, + {"id": 15258, "synset": "bondman.n.01", "name": "bondman"}, + {"id": 15259, "synset": "bondwoman.n.02", "name": "bondwoman"}, + {"id": 15260, "synset": "bondwoman.n.01", "name": "bondwoman"}, + {"id": 15261, "synset": "bond_servant.n.01", "name": "bond_servant"}, + {"id": 15262, "synset": "book_agent.n.01", "name": "book_agent"}, + {"id": 15263, "synset": "bookbinder.n.01", "name": "bookbinder"}, + {"id": 15264, "synset": "bookkeeper.n.01", "name": "bookkeeper"}, + {"id": 15265, "synset": "bookmaker.n.01", "name": "bookmaker"}, + {"id": 15266, "synset": "bookworm.n.02", "name": "bookworm"}, + {"id": 15267, "synset": "booster.n.03", "name": "booster"}, + {"id": 15268, "synset": "bootblack.n.01", "name": "bootblack"}, + {"id": 15269, "synset": "bootlegger.n.01", "name": "bootlegger"}, + {"id": 15270, "synset": "bootmaker.n.01", "name": "bootmaker"}, + {"id": 15271, "synset": "borderer.n.01", "name": "borderer"}, + {"id": 15272, "synset": "border_patrolman.n.01", "name": "border_patrolman"}, + {"id": 15273, "synset": "botanist.n.01", "name": "botanist"}, + {"id": 15274, "synset": "bottom_feeder.n.01", "name": "bottom_feeder"}, + {"id": 15275, "synset": "boulevardier.n.01", "name": "boulevardier"}, + {"id": 15276, "synset": "bounty_hunter.n.02", "name": "bounty_hunter"}, + {"id": 15277, "synset": "bounty_hunter.n.01", "name": "bounty_hunter"}, + {"id": 15278, "synset": "bourbon.n.03", "name": "Bourbon"}, + {"id": 15279, "synset": "bowler.n.01", "name": "bowler"}, + {"id": 15280, "synset": "slugger.n.02", "name": "slugger"}, + {"id": 15281, "synset": "cub.n.02", "name": "cub"}, + {"id": 15282, "synset": "boy_scout.n.01", "name": "Boy_Scout"}, + {"id": 15283, "synset": "boy_scout.n.02", "name": "boy_scout"}, + {"id": 15284, "synset": "boy_wonder.n.01", "name": "boy_wonder"}, + {"id": 15285, "synset": "bragger.n.01", "name": "bragger"}, + {"id": 15286, "synset": "brahman.n.02", "name": "brahman"}, + {"id": 15287, "synset": "brawler.n.01", "name": "brawler"}, + {"id": 15288, "synset": "breadwinner.n.01", "name": "breadwinner"}, + {"id": 15289, "synset": "breaststroker.n.01", "name": "breaststroker"}, + {"id": 15290, "synset": "breeder.n.01", "name": "breeder"}, + {"id": 15291, "synset": "brick.n.02", "name": "brick"}, + {"id": 15292, "synset": "bride.n.03", "name": "bride"}, + {"id": 15293, "synset": "bridesmaid.n.01", "name": "bridesmaid"}, + {"id": 15294, "synset": "bridge_agent.n.01", "name": "bridge_agent"}, + { + "id": 15295, + "synset": "broadcast_journalist.n.01", + "name": "broadcast_journalist", + }, + {"id": 15296, "synset": "brother.n.05", "name": "Brother"}, + {"id": 15297, "synset": "brother-in-law.n.01", "name": "brother-in-law"}, + {"id": 15298, "synset": "browser.n.01", "name": "browser"}, + {"id": 15299, "synset": "brummie.n.01", "name": "Brummie"}, + {"id": 15300, "synset": "buddy.n.01", "name": "buddy"}, + {"id": 15301, "synset": "bull.n.06", "name": "bull"}, + {"id": 15302, "synset": "bully.n.02", "name": "bully"}, + {"id": 15303, "synset": "bunny.n.01", "name": "bunny"}, + {"id": 15304, "synset": "burglar.n.01", "name": "burglar"}, + {"id": 15305, "synset": "bursar.n.01", "name": "bursar"}, + {"id": 15306, "synset": "busboy.n.01", "name": "busboy"}, + {"id": 15307, "synset": "business_editor.n.01", "name": "business_editor"}, + {"id": 15308, "synset": "business_traveler.n.01", "name": "business_traveler"}, + {"id": 15309, "synset": "buster.n.04", "name": "buster"}, + {"id": 15310, "synset": "busybody.n.01", "name": "busybody"}, + {"id": 15311, "synset": "buttinsky.n.01", "name": "buttinsky"}, + {"id": 15312, "synset": "cabinetmaker.n.01", "name": "cabinetmaker"}, + {"id": 15313, "synset": "caddie.n.01", "name": "caddie"}, + {"id": 15314, "synset": "cadet.n.01", "name": "cadet"}, + {"id": 15315, "synset": "caller.n.04", "name": "caller"}, + {"id": 15316, "synset": "call_girl.n.01", "name": "call_girl"}, + {"id": 15317, "synset": "calligrapher.n.01", "name": "calligrapher"}, + {"id": 15318, "synset": "campaigner.n.01", "name": "campaigner"}, + {"id": 15319, "synset": "camper.n.01", "name": "camper"}, + {"id": 15320, "synset": "camp_follower.n.02", "name": "camp_follower"}, + {"id": 15321, "synset": "candidate.n.02", "name": "candidate"}, + {"id": 15322, "synset": "canonist.n.01", "name": "canonist"}, + {"id": 15323, "synset": "capitalist.n.01", "name": "capitalist"}, + {"id": 15324, "synset": "captain.n.07", "name": "captain"}, + {"id": 15325, "synset": "captain.n.06", "name": "captain"}, + {"id": 15326, "synset": "captain.n.01", "name": "captain"}, + {"id": 15327, "synset": "captain.n.05", "name": "captain"}, + {"id": 15328, "synset": "captive.n.02", "name": "captive"}, + {"id": 15329, "synset": "captive.n.03", "name": "captive"}, + {"id": 15330, "synset": "cardinal.n.01", "name": "cardinal"}, + {"id": 15331, "synset": "cardiologist.n.01", "name": "cardiologist"}, + {"id": 15332, "synset": "card_player.n.01", "name": "card_player"}, + {"id": 15333, "synset": "cardsharp.n.01", "name": "cardsharp"}, + {"id": 15334, "synset": "careerist.n.01", "name": "careerist"}, + {"id": 15335, "synset": "career_man.n.01", "name": "career_man"}, + {"id": 15336, "synset": "caregiver.n.02", "name": "caregiver"}, + {"id": 15337, "synset": "caretaker.n.01", "name": "caretaker"}, + {"id": 15338, "synset": "caretaker.n.02", "name": "caretaker"}, + {"id": 15339, "synset": "caricaturist.n.01", "name": "caricaturist"}, + {"id": 15340, "synset": "carillonneur.n.01", "name": "carillonneur"}, + {"id": 15341, "synset": "caroler.n.01", "name": "caroler"}, + {"id": 15342, "synset": "carpenter.n.01", "name": "carpenter"}, + {"id": 15343, "synset": "carper.n.01", "name": "carper"}, + {"id": 15344, "synset": "cartesian.n.01", "name": "Cartesian"}, + {"id": 15345, "synset": "cashier.n.02", "name": "cashier"}, + {"id": 15346, "synset": "casualty.n.02", "name": "casualty"}, + {"id": 15347, "synset": "casualty.n.01", "name": "casualty"}, + {"id": 15348, "synset": "casuist.n.01", "name": "casuist"}, + {"id": 15349, "synset": "catechist.n.01", "name": "catechist"}, + {"id": 15350, "synset": "catechumen.n.01", "name": "catechumen"}, + {"id": 15351, "synset": "caterer.n.01", "name": "caterer"}, + {"id": 15352, "synset": "catholicos.n.01", "name": "Catholicos"}, + {"id": 15353, "synset": "cat_fancier.n.01", "name": "cat_fancier"}, + {"id": 15354, "synset": "cavalier.n.02", "name": "Cavalier"}, + {"id": 15355, "synset": "cavalryman.n.02", "name": "cavalryman"}, + {"id": 15356, "synset": "caveman.n.01", "name": "caveman"}, + {"id": 15357, "synset": "celebrant.n.02", "name": "celebrant"}, + {"id": 15358, "synset": "celebrant.n.01", "name": "celebrant"}, + {"id": 15359, "synset": "celebrity.n.01", "name": "celebrity"}, + {"id": 15360, "synset": "cellist.n.01", "name": "cellist"}, + {"id": 15361, "synset": "censor.n.02", "name": "censor"}, + {"id": 15362, "synset": "censor.n.01", "name": "censor"}, + {"id": 15363, "synset": "centenarian.n.01", "name": "centenarian"}, + {"id": 15364, "synset": "centrist.n.01", "name": "centrist"}, + {"id": 15365, "synset": "centurion.n.01", "name": "centurion"}, + { + "id": 15366, + "synset": "certified_public_accountant.n.01", + "name": "certified_public_accountant", + }, + {"id": 15367, "synset": "chachka.n.01", "name": "chachka"}, + {"id": 15368, "synset": "chambermaid.n.01", "name": "chambermaid"}, + {"id": 15369, "synset": "chameleon.n.01", "name": "chameleon"}, + {"id": 15370, "synset": "champion.n.01", "name": "champion"}, + {"id": 15371, "synset": "chandler.n.02", "name": "chandler"}, + {"id": 15372, "synset": "prison_chaplain.n.01", "name": "prison_chaplain"}, + {"id": 15373, "synset": "charcoal_burner.n.01", "name": "charcoal_burner"}, + {"id": 15374, "synset": "charge_d'affaires.n.01", "name": "charge_d'affaires"}, + {"id": 15375, "synset": "charioteer.n.01", "name": "charioteer"}, + {"id": 15376, "synset": "charmer.n.02", "name": "charmer"}, + { + "id": 15377, + "synset": "chartered_accountant.n.01", + "name": "chartered_accountant", + }, + {"id": 15378, "synset": "chartist.n.02", "name": "chartist"}, + {"id": 15379, "synset": "charwoman.n.01", "name": "charwoman"}, + {"id": 15380, "synset": "male_chauvinist.n.01", "name": "male_chauvinist"}, + {"id": 15381, "synset": "cheapskate.n.01", "name": "cheapskate"}, + {"id": 15382, "synset": "chechen.n.01", "name": "Chechen"}, + {"id": 15383, "synset": "checker.n.02", "name": "checker"}, + {"id": 15384, "synset": "cheerer.n.01", "name": "cheerer"}, + {"id": 15385, "synset": "cheerleader.n.02", "name": "cheerleader"}, + {"id": 15386, "synset": "cheerleader.n.01", "name": "cheerleader"}, + {"id": 15387, "synset": "cheops.n.01", "name": "Cheops"}, + {"id": 15388, "synset": "chess_master.n.01", "name": "chess_master"}, + { + "id": 15389, + "synset": "chief_executive_officer.n.01", + "name": "chief_executive_officer", + }, + {"id": 15390, "synset": "chief_of_staff.n.01", "name": "chief_of_staff"}, + {"id": 15391, "synset": "chief_petty_officer.n.01", "name": "chief_petty_officer"}, + {"id": 15392, "synset": "chief_secretary.n.01", "name": "Chief_Secretary"}, + {"id": 15393, "synset": "child.n.01", "name": "child"}, + {"id": 15394, "synset": "child.n.02", "name": "child"}, + {"id": 15395, "synset": "child.n.03", "name": "child"}, + {"id": 15396, "synset": "child_prodigy.n.01", "name": "child_prodigy"}, + {"id": 15397, "synset": "chimneysweeper.n.01", "name": "chimneysweeper"}, + {"id": 15398, "synset": "chiropractor.n.01", "name": "chiropractor"}, + {"id": 15399, "synset": "chit.n.01", "name": "chit"}, + {"id": 15400, "synset": "choker.n.02", "name": "choker"}, + {"id": 15401, "synset": "choragus.n.01", "name": "choragus"}, + {"id": 15402, "synset": "choreographer.n.01", "name": "choreographer"}, + {"id": 15403, "synset": "chorus_girl.n.01", "name": "chorus_girl"}, + {"id": 15404, "synset": "chosen.n.01", "name": "chosen"}, + {"id": 15405, "synset": "cicerone.n.01", "name": "cicerone"}, + {"id": 15406, "synset": "cigar_smoker.n.01", "name": "cigar_smoker"}, + {"id": 15407, "synset": "cipher.n.04", "name": "cipher"}, + {"id": 15408, "synset": "circus_acrobat.n.01", "name": "circus_acrobat"}, + {"id": 15409, "synset": "citizen.n.01", "name": "citizen"}, + {"id": 15410, "synset": "city_editor.n.01", "name": "city_editor"}, + {"id": 15411, "synset": "city_father.n.01", "name": "city_father"}, + {"id": 15412, "synset": "city_man.n.01", "name": "city_man"}, + {"id": 15413, "synset": "city_slicker.n.01", "name": "city_slicker"}, + {"id": 15414, "synset": "civic_leader.n.01", "name": "civic_leader"}, + {"id": 15415, "synset": "civil_rights_leader.n.01", "name": "civil_rights_leader"}, + {"id": 15416, "synset": "cleaner.n.03", "name": "cleaner"}, + {"id": 15417, "synset": "clergyman.n.01", "name": "clergyman"}, + {"id": 15418, "synset": "cleric.n.01", "name": "cleric"}, + {"id": 15419, "synset": "clerk.n.01", "name": "clerk"}, + {"id": 15420, "synset": "clever_dick.n.01", "name": "clever_Dick"}, + {"id": 15421, "synset": "climatologist.n.01", "name": "climatologist"}, + {"id": 15422, "synset": "climber.n.04", "name": "climber"}, + {"id": 15423, "synset": "clinician.n.01", "name": "clinician"}, + {"id": 15424, "synset": "closer.n.02", "name": "closer"}, + {"id": 15425, "synset": "closet_queen.n.01", "name": "closet_queen"}, + {"id": 15426, "synset": "clown.n.02", "name": "clown"}, + {"id": 15427, "synset": "clown.n.01", "name": "clown"}, + {"id": 15428, "synset": "coach.n.02", "name": "coach"}, + {"id": 15429, "synset": "coach.n.01", "name": "coach"}, + {"id": 15430, "synset": "pitching_coach.n.01", "name": "pitching_coach"}, + {"id": 15431, "synset": "coachman.n.01", "name": "coachman"}, + {"id": 15432, "synset": "coal_miner.n.01", "name": "coal_miner"}, + {"id": 15433, "synset": "coastguardsman.n.01", "name": "coastguardsman"}, + {"id": 15434, "synset": "cobber.n.01", "name": "cobber"}, + {"id": 15435, "synset": "cobbler.n.01", "name": "cobbler"}, + {"id": 15436, "synset": "codger.n.01", "name": "codger"}, + {"id": 15437, "synset": "co-beneficiary.n.01", "name": "co-beneficiary"}, + {"id": 15438, "synset": "cog.n.01", "name": "cog"}, + { + "id": 15439, + "synset": "cognitive_neuroscientist.n.01", + "name": "cognitive_neuroscientist", + }, + {"id": 15440, "synset": "coiffeur.n.01", "name": "coiffeur"}, + {"id": 15441, "synset": "coiner.n.02", "name": "coiner"}, + {"id": 15442, "synset": "collaborator.n.03", "name": "collaborator"}, + {"id": 15443, "synset": "colleen.n.01", "name": "colleen"}, + {"id": 15444, "synset": "college_student.n.01", "name": "college_student"}, + {"id": 15445, "synset": "collegian.n.01", "name": "collegian"}, + {"id": 15446, "synset": "colonial.n.01", "name": "colonial"}, + {"id": 15447, "synset": "colonialist.n.01", "name": "colonialist"}, + {"id": 15448, "synset": "colonizer.n.01", "name": "colonizer"}, + {"id": 15449, "synset": "coloratura.n.01", "name": "coloratura"}, + {"id": 15450, "synset": "color_guard.n.01", "name": "color_guard"}, + {"id": 15451, "synset": "colossus.n.02", "name": "colossus"}, + {"id": 15452, "synset": "comedian.n.02", "name": "comedian"}, + {"id": 15453, "synset": "comedienne.n.02", "name": "comedienne"}, + {"id": 15454, "synset": "comer.n.01", "name": "comer"}, + {"id": 15455, "synset": "commander.n.03", "name": "commander"}, + {"id": 15456, "synset": "commander_in_chief.n.01", "name": "commander_in_chief"}, + {"id": 15457, "synset": "commanding_officer.n.01", "name": "commanding_officer"}, + {"id": 15458, "synset": "commissar.n.01", "name": "commissar"}, + { + "id": 15459, + "synset": "commissioned_officer.n.01", + "name": "commissioned_officer", + }, + { + "id": 15460, + "synset": "commissioned_military_officer.n.01", + "name": "commissioned_military_officer", + }, + {"id": 15461, "synset": "commissioner.n.01", "name": "commissioner"}, + {"id": 15462, "synset": "commissioner.n.02", "name": "commissioner"}, + {"id": 15463, "synset": "committee_member.n.01", "name": "committee_member"}, + {"id": 15464, "synset": "committeewoman.n.01", "name": "committeewoman"}, + {"id": 15465, "synset": "commodore.n.01", "name": "commodore"}, + {"id": 15466, "synset": "communicant.n.01", "name": "communicant"}, + {"id": 15467, "synset": "communist.n.02", "name": "communist"}, + {"id": 15468, "synset": "communist.n.01", "name": "Communist"}, + {"id": 15469, "synset": "commuter.n.02", "name": "commuter"}, + {"id": 15470, "synset": "compere.n.01", "name": "compere"}, + {"id": 15471, "synset": "complexifier.n.01", "name": "complexifier"}, + {"id": 15472, "synset": "compulsive.n.01", "name": "compulsive"}, + { + "id": 15473, + "synset": "computational_linguist.n.01", + "name": "computational_linguist", + }, + {"id": 15474, "synset": "computer_scientist.n.01", "name": "computer_scientist"}, + {"id": 15475, "synset": "computer_user.n.01", "name": "computer_user"}, + {"id": 15476, "synset": "comrade.n.02", "name": "Comrade"}, + {"id": 15477, "synset": "concert-goer.n.01", "name": "concert-goer"}, + {"id": 15478, "synset": "conciliator.n.01", "name": "conciliator"}, + {"id": 15479, "synset": "conductor.n.03", "name": "conductor"}, + {"id": 15480, "synset": "confectioner.n.01", "name": "confectioner"}, + {"id": 15481, "synset": "confederate.n.01", "name": "Confederate"}, + {"id": 15482, "synset": "confessor.n.01", "name": "confessor"}, + {"id": 15483, "synset": "confidant.n.01", "name": "confidant"}, + {"id": 15484, "synset": "confucian.n.01", "name": "Confucian"}, + {"id": 15485, "synset": "rep.n.01", "name": "rep"}, + {"id": 15486, "synset": "conqueror.n.01", "name": "conqueror"}, + {"id": 15487, "synset": "conservative.n.02", "name": "Conservative"}, + {"id": 15488, "synset": "nonconformist.n.01", "name": "Nonconformist"}, + {"id": 15489, "synset": "anglican.n.01", "name": "Anglican"}, + {"id": 15490, "synset": "consignee.n.01", "name": "consignee"}, + {"id": 15491, "synset": "consigner.n.01", "name": "consigner"}, + {"id": 15492, "synset": "constable.n.01", "name": "constable"}, + {"id": 15493, "synset": "constructivist.n.01", "name": "constructivist"}, + {"id": 15494, "synset": "contractor.n.01", "name": "contractor"}, + {"id": 15495, "synset": "contralto.n.01", "name": "contralto"}, + {"id": 15496, "synset": "contributor.n.02", "name": "contributor"}, + {"id": 15497, "synset": "control_freak.n.01", "name": "control_freak"}, + {"id": 15498, "synset": "convalescent.n.01", "name": "convalescent"}, + {"id": 15499, "synset": "convener.n.01", "name": "convener"}, + {"id": 15500, "synset": "convict.n.01", "name": "convict"}, + {"id": 15501, "synset": "copilot.n.01", "name": "copilot"}, + {"id": 15502, "synset": "copycat.n.01", "name": "copycat"}, + {"id": 15503, "synset": "coreligionist.n.01", "name": "coreligionist"}, + {"id": 15504, "synset": "cornerback.n.01", "name": "cornerback"}, + {"id": 15505, "synset": "corporatist.n.01", "name": "corporatist"}, + {"id": 15506, "synset": "correspondent.n.01", "name": "correspondent"}, + {"id": 15507, "synset": "cosmetician.n.01", "name": "cosmetician"}, + {"id": 15508, "synset": "cosmopolitan.n.01", "name": "cosmopolitan"}, + {"id": 15509, "synset": "cossack.n.01", "name": "Cossack"}, + {"id": 15510, "synset": "cost_accountant.n.01", "name": "cost_accountant"}, + {"id": 15511, "synset": "co-star.n.01", "name": "co-star"}, + {"id": 15512, "synset": "costumier.n.01", "name": "costumier"}, + {"id": 15513, "synset": "cotter.n.02", "name": "cotter"}, + {"id": 15514, "synset": "cotter.n.01", "name": "cotter"}, + {"id": 15515, "synset": "counselor.n.01", "name": "counselor"}, + {"id": 15516, "synset": "counterterrorist.n.01", "name": "counterterrorist"}, + {"id": 15517, "synset": "counterspy.n.01", "name": "counterspy"}, + {"id": 15518, "synset": "countess.n.01", "name": "countess"}, + {"id": 15519, "synset": "compromiser.n.01", "name": "compromiser"}, + {"id": 15520, "synset": "countrywoman.n.01", "name": "countrywoman"}, + {"id": 15521, "synset": "county_agent.n.01", "name": "county_agent"}, + {"id": 15522, "synset": "courtier.n.01", "name": "courtier"}, + {"id": 15523, "synset": "cousin.n.01", "name": "cousin"}, + {"id": 15524, "synset": "cover_girl.n.01", "name": "cover_girl"}, + {"id": 15525, "synset": "cow.n.03", "name": "cow"}, + {"id": 15526, "synset": "craftsman.n.03", "name": "craftsman"}, + {"id": 15527, "synset": "craftsman.n.02", "name": "craftsman"}, + {"id": 15528, "synset": "crapshooter.n.01", "name": "crapshooter"}, + {"id": 15529, "synset": "crazy.n.01", "name": "crazy"}, + {"id": 15530, "synset": "creature.n.02", "name": "creature"}, + {"id": 15531, "synset": "creditor.n.01", "name": "creditor"}, + {"id": 15532, "synset": "creep.n.01", "name": "creep"}, + {"id": 15533, "synset": "criminologist.n.01", "name": "criminologist"}, + {"id": 15534, "synset": "critic.n.02", "name": "critic"}, + {"id": 15535, "synset": "croesus.n.02", "name": "Croesus"}, + {"id": 15536, "synset": "cross-examiner.n.01", "name": "cross-examiner"}, + {"id": 15537, "synset": "crossover_voter.n.01", "name": "crossover_voter"}, + {"id": 15538, "synset": "croupier.n.01", "name": "croupier"}, + {"id": 15539, "synset": "crown_prince.n.01", "name": "crown_prince"}, + {"id": 15540, "synset": "crown_princess.n.01", "name": "crown_princess"}, + {"id": 15541, "synset": "cryptanalyst.n.01", "name": "cryptanalyst"}, + {"id": 15542, "synset": "cub_scout.n.01", "name": "Cub_Scout"}, + {"id": 15543, "synset": "cuckold.n.01", "name": "cuckold"}, + {"id": 15544, "synset": "cultist.n.02", "name": "cultist"}, + {"id": 15545, "synset": "curandera.n.01", "name": "curandera"}, + {"id": 15546, "synset": "curate.n.01", "name": "curate"}, + {"id": 15547, "synset": "curator.n.01", "name": "curator"}, + {"id": 15548, "synset": "customer_agent.n.01", "name": "customer_agent"}, + {"id": 15549, "synset": "cutter.n.02", "name": "cutter"}, + {"id": 15550, "synset": "cyberpunk.n.02", "name": "cyberpunk"}, + {"id": 15551, "synset": "cyborg.n.01", "name": "cyborg"}, + {"id": 15552, "synset": "cymbalist.n.01", "name": "cymbalist"}, + {"id": 15553, "synset": "cynic.n.02", "name": "Cynic"}, + {"id": 15554, "synset": "cytogeneticist.n.01", "name": "cytogeneticist"}, + {"id": 15555, "synset": "cytologist.n.01", "name": "cytologist"}, + {"id": 15556, "synset": "czar.n.02", "name": "czar"}, + {"id": 15557, "synset": "czar.n.01", "name": "czar"}, + {"id": 15558, "synset": "dad.n.01", "name": "dad"}, + {"id": 15559, "synset": "dairyman.n.02", "name": "dairyman"}, + {"id": 15560, "synset": "dalai_lama.n.01", "name": "Dalai_Lama"}, + {"id": 15561, "synset": "dallier.n.01", "name": "dallier"}, + {"id": 15562, "synset": "dancer.n.01", "name": "dancer"}, + {"id": 15563, "synset": "dancer.n.02", "name": "dancer"}, + {"id": 15564, "synset": "clog_dancer.n.01", "name": "clog_dancer"}, + {"id": 15565, "synset": "dancing-master.n.01", "name": "dancing-master"}, + {"id": 15566, "synset": "dark_horse.n.01", "name": "dark_horse"}, + {"id": 15567, "synset": "darling.n.01", "name": "darling"}, + {"id": 15568, "synset": "date.n.02", "name": "date"}, + {"id": 15569, "synset": "daughter.n.01", "name": "daughter"}, + {"id": 15570, "synset": "dawdler.n.01", "name": "dawdler"}, + {"id": 15571, "synset": "day_boarder.n.01", "name": "day_boarder"}, + {"id": 15572, "synset": "day_laborer.n.01", "name": "day_laborer"}, + {"id": 15573, "synset": "deacon.n.01", "name": "deacon"}, + {"id": 15574, "synset": "deaconess.n.01", "name": "deaconess"}, + {"id": 15575, "synset": "deadeye.n.01", "name": "deadeye"}, + {"id": 15576, "synset": "deipnosophist.n.01", "name": "deipnosophist"}, + {"id": 15577, "synset": "dropout.n.02", "name": "dropout"}, + {"id": 15578, "synset": "deadhead.n.01", "name": "deadhead"}, + {"id": 15579, "synset": "deaf_person.n.01", "name": "deaf_person"}, + {"id": 15580, "synset": "debtor.n.01", "name": "debtor"}, + {"id": 15581, "synset": "deckhand.n.01", "name": "deckhand"}, + {"id": 15582, "synset": "defamer.n.01", "name": "defamer"}, + {"id": 15583, "synset": "defense_contractor.n.01", "name": "defense_contractor"}, + {"id": 15584, "synset": "deist.n.01", "name": "deist"}, + {"id": 15585, "synset": "delegate.n.01", "name": "delegate"}, + {"id": 15586, "synset": "deliveryman.n.01", "name": "deliveryman"}, + {"id": 15587, "synset": "demagogue.n.01", "name": "demagogue"}, + {"id": 15588, "synset": "demigod.n.01", "name": "demigod"}, + {"id": 15589, "synset": "demographer.n.01", "name": "demographer"}, + {"id": 15590, "synset": "demonstrator.n.03", "name": "demonstrator"}, + {"id": 15591, "synset": "den_mother.n.02", "name": "den_mother"}, + {"id": 15592, "synset": "department_head.n.01", "name": "department_head"}, + {"id": 15593, "synset": "depositor.n.01", "name": "depositor"}, + {"id": 15594, "synset": "deputy.n.03", "name": "deputy"}, + {"id": 15595, "synset": "dermatologist.n.01", "name": "dermatologist"}, + {"id": 15596, "synset": "descender.n.01", "name": "descender"}, + {"id": 15597, "synset": "designated_hitter.n.01", "name": "designated_hitter"}, + {"id": 15598, "synset": "designer.n.04", "name": "designer"}, + {"id": 15599, "synset": "desk_clerk.n.01", "name": "desk_clerk"}, + {"id": 15600, "synset": "desk_officer.n.01", "name": "desk_officer"}, + {"id": 15601, "synset": "desk_sergeant.n.01", "name": "desk_sergeant"}, + {"id": 15602, "synset": "detainee.n.01", "name": "detainee"}, + {"id": 15603, "synset": "detective.n.01", "name": "detective"}, + {"id": 15604, "synset": "detective.n.02", "name": "detective"}, + {"id": 15605, "synset": "detractor.n.01", "name": "detractor"}, + {"id": 15606, "synset": "developer.n.01", "name": "developer"}, + {"id": 15607, "synset": "deviationist.n.01", "name": "deviationist"}, + {"id": 15608, "synset": "devisee.n.01", "name": "devisee"}, + {"id": 15609, "synset": "devisor.n.01", "name": "devisor"}, + {"id": 15610, "synset": "devourer.n.01", "name": "devourer"}, + {"id": 15611, "synset": "dialectician.n.01", "name": "dialectician"}, + {"id": 15612, "synset": "diarist.n.01", "name": "diarist"}, + {"id": 15613, "synset": "dietician.n.01", "name": "dietician"}, + {"id": 15614, "synset": "diocesan.n.01", "name": "diocesan"}, + {"id": 15615, "synset": "director.n.03", "name": "director"}, + {"id": 15616, "synset": "director.n.02", "name": "director"}, + {"id": 15617, "synset": "dirty_old_man.n.01", "name": "dirty_old_man"}, + {"id": 15618, "synset": "disbeliever.n.01", "name": "disbeliever"}, + {"id": 15619, "synset": "disk_jockey.n.01", "name": "disk_jockey"}, + {"id": 15620, "synset": "dispatcher.n.02", "name": "dispatcher"}, + {"id": 15621, "synset": "distortionist.n.01", "name": "distortionist"}, + {"id": 15622, "synset": "distributor.n.01", "name": "distributor"}, + {"id": 15623, "synset": "district_attorney.n.01", "name": "district_attorney"}, + {"id": 15624, "synset": "district_manager.n.01", "name": "district_manager"}, + {"id": 15625, "synset": "diver.n.02", "name": "diver"}, + {"id": 15626, "synset": "divorcee.n.01", "name": "divorcee"}, + {"id": 15627, "synset": "ex-wife.n.01", "name": "ex-wife"}, + {"id": 15628, "synset": "divorce_lawyer.n.01", "name": "divorce_lawyer"}, + {"id": 15629, "synset": "docent.n.01", "name": "docent"}, + {"id": 15630, "synset": "doctor.n.01", "name": "doctor"}, + {"id": 15631, "synset": "dodo.n.01", "name": "dodo"}, + {"id": 15632, "synset": "doge.n.01", "name": "doge"}, + {"id": 15633, "synset": "dog_in_the_manger.n.01", "name": "dog_in_the_manger"}, + {"id": 15634, "synset": "dogmatist.n.01", "name": "dogmatist"}, + {"id": 15635, "synset": "dolichocephalic.n.01", "name": "dolichocephalic"}, + {"id": 15636, "synset": "domestic_partner.n.01", "name": "domestic_partner"}, + {"id": 15637, "synset": "dominican.n.02", "name": "Dominican"}, + {"id": 15638, "synset": "dominus.n.01", "name": "dominus"}, + {"id": 15639, "synset": "don.n.03", "name": "don"}, + {"id": 15640, "synset": "donatist.n.01", "name": "Donatist"}, + {"id": 15641, "synset": "donna.n.01", "name": "donna"}, + {"id": 15642, "synset": "dosser.n.01", "name": "dosser"}, + {"id": 15643, "synset": "double.n.03", "name": "double"}, + {"id": 15644, "synset": "double-crosser.n.01", "name": "double-crosser"}, + {"id": 15645, "synset": "down-and-out.n.01", "name": "down-and-out"}, + {"id": 15646, "synset": "doyenne.n.01", "name": "doyenne"}, + {"id": 15647, "synset": "draftsman.n.02", "name": "draftsman"}, + {"id": 15648, "synset": "dramatist.n.01", "name": "dramatist"}, + {"id": 15649, "synset": "dreamer.n.01", "name": "dreamer"}, + {"id": 15650, "synset": "dressmaker.n.01", "name": "dressmaker"}, + {"id": 15651, "synset": "dressmaker's_model.n.01", "name": "dressmaker's_model"}, + {"id": 15652, "synset": "dribbler.n.02", "name": "dribbler"}, + {"id": 15653, "synset": "dribbler.n.01", "name": "dribbler"}, + {"id": 15654, "synset": "drinker.n.02", "name": "drinker"}, + {"id": 15655, "synset": "drinker.n.01", "name": "drinker"}, + {"id": 15656, "synset": "drug_addict.n.01", "name": "drug_addict"}, + {"id": 15657, "synset": "drug_user.n.01", "name": "drug_user"}, + {"id": 15658, "synset": "druid.n.01", "name": "Druid"}, + {"id": 15659, "synset": "drum_majorette.n.02", "name": "drum_majorette"}, + {"id": 15660, "synset": "drummer.n.01", "name": "drummer"}, + {"id": 15661, "synset": "drunk.n.02", "name": "drunk"}, + {"id": 15662, "synset": "drunkard.n.01", "name": "drunkard"}, + {"id": 15663, "synset": "druze.n.01", "name": "Druze"}, + {"id": 15664, "synset": "dry.n.01", "name": "dry"}, + {"id": 15665, "synset": "dry_nurse.n.01", "name": "dry_nurse"}, + {"id": 15666, "synset": "duchess.n.01", "name": "duchess"}, + {"id": 15667, "synset": "duke.n.01", "name": "duke"}, + {"id": 15668, "synset": "duffer.n.01", "name": "duffer"}, + {"id": 15669, "synset": "dunker.n.02", "name": "dunker"}, + {"id": 15670, "synset": "dutch_uncle.n.01", "name": "Dutch_uncle"}, + {"id": 15671, "synset": "dyspeptic.n.01", "name": "dyspeptic"}, + {"id": 15672, "synset": "eager_beaver.n.01", "name": "eager_beaver"}, + {"id": 15673, "synset": "earl.n.01", "name": "earl"}, + {"id": 15674, "synset": "earner.n.01", "name": "earner"}, + {"id": 15675, "synset": "eavesdropper.n.01", "name": "eavesdropper"}, + {"id": 15676, "synset": "eccentric.n.01", "name": "eccentric"}, + {"id": 15677, "synset": "eclectic.n.01", "name": "eclectic"}, + {"id": 15678, "synset": "econometrician.n.01", "name": "econometrician"}, + {"id": 15679, "synset": "economist.n.01", "name": "economist"}, + {"id": 15680, "synset": "ectomorph.n.01", "name": "ectomorph"}, + {"id": 15681, "synset": "editor.n.01", "name": "editor"}, + {"id": 15682, "synset": "egocentric.n.01", "name": "egocentric"}, + {"id": 15683, "synset": "egotist.n.01", "name": "egotist"}, + {"id": 15684, "synset": "ejaculator.n.01", "name": "ejaculator"}, + {"id": 15685, "synset": "elder.n.03", "name": "elder"}, + {"id": 15686, "synset": "elder_statesman.n.01", "name": "elder_statesman"}, + {"id": 15687, "synset": "elected_official.n.01", "name": "elected_official"}, + {"id": 15688, "synset": "electrician.n.01", "name": "electrician"}, + {"id": 15689, "synset": "elegist.n.01", "name": "elegist"}, + {"id": 15690, "synset": "elocutionist.n.01", "name": "elocutionist"}, + {"id": 15691, "synset": "emancipator.n.01", "name": "emancipator"}, + {"id": 15692, "synset": "embryologist.n.01", "name": "embryologist"}, + {"id": 15693, "synset": "emeritus.n.01", "name": "emeritus"}, + {"id": 15694, "synset": "emigrant.n.01", "name": "emigrant"}, + {"id": 15695, "synset": "emissary.n.01", "name": "emissary"}, + {"id": 15696, "synset": "empress.n.01", "name": "empress"}, + {"id": 15697, "synset": "employee.n.01", "name": "employee"}, + {"id": 15698, "synset": "employer.n.01", "name": "employer"}, + {"id": 15699, "synset": "enchantress.n.02", "name": "enchantress"}, + {"id": 15700, "synset": "enchantress.n.01", "name": "enchantress"}, + {"id": 15701, "synset": "encyclopedist.n.01", "name": "encyclopedist"}, + {"id": 15702, "synset": "endomorph.n.01", "name": "endomorph"}, + {"id": 15703, "synset": "enemy.n.02", "name": "enemy"}, + {"id": 15704, "synset": "energizer.n.01", "name": "energizer"}, + {"id": 15705, "synset": "end_man.n.02", "name": "end_man"}, + {"id": 15706, "synset": "end_man.n.01", "name": "end_man"}, + {"id": 15707, "synset": "endorser.n.02", "name": "endorser"}, + {"id": 15708, "synset": "enjoyer.n.01", "name": "enjoyer"}, + {"id": 15709, "synset": "enlisted_woman.n.01", "name": "enlisted_woman"}, + {"id": 15710, "synset": "enophile.n.01", "name": "enophile"}, + {"id": 15711, "synset": "entrant.n.04", "name": "entrant"}, + {"id": 15712, "synset": "entrant.n.03", "name": "entrant"}, + {"id": 15713, "synset": "entrepreneur.n.01", "name": "entrepreneur"}, + {"id": 15714, "synset": "envoy.n.01", "name": "envoy"}, + {"id": 15715, "synset": "enzymologist.n.01", "name": "enzymologist"}, + {"id": 15716, "synset": "eparch.n.01", "name": "eparch"}, + {"id": 15717, "synset": "epidemiologist.n.01", "name": "epidemiologist"}, + {"id": 15718, "synset": "epigone.n.01", "name": "epigone"}, + {"id": 15719, "synset": "epileptic.n.01", "name": "epileptic"}, + {"id": 15720, "synset": "episcopalian.n.01", "name": "Episcopalian"}, + {"id": 15721, "synset": "equerry.n.02", "name": "equerry"}, + {"id": 15722, "synset": "equerry.n.01", "name": "equerry"}, + {"id": 15723, "synset": "erotic.n.01", "name": "erotic"}, + {"id": 15724, "synset": "escapee.n.01", "name": "escapee"}, + {"id": 15725, "synset": "escapist.n.01", "name": "escapist"}, + {"id": 15726, "synset": "eskimo.n.01", "name": "Eskimo"}, + {"id": 15727, "synset": "espionage_agent.n.01", "name": "espionage_agent"}, + {"id": 15728, "synset": "esthetician.n.01", "name": "esthetician"}, + {"id": 15729, "synset": "etcher.n.01", "name": "etcher"}, + {"id": 15730, "synset": "ethnologist.n.01", "name": "ethnologist"}, + {"id": 15731, "synset": "etonian.n.01", "name": "Etonian"}, + {"id": 15732, "synset": "etymologist.n.01", "name": "etymologist"}, + {"id": 15733, "synset": "evangelist.n.01", "name": "evangelist"}, + {"id": 15734, "synset": "evangelist.n.02", "name": "Evangelist"}, + {"id": 15735, "synset": "event_planner.n.01", "name": "event_planner"}, + {"id": 15736, "synset": "examiner.n.02", "name": "examiner"}, + {"id": 15737, "synset": "examiner.n.01", "name": "examiner"}, + {"id": 15738, "synset": "exarch.n.03", "name": "exarch"}, + {"id": 15739, "synset": "executant.n.01", "name": "executant"}, + {"id": 15740, "synset": "executive_secretary.n.01", "name": "executive_secretary"}, + { + "id": 15741, + "synset": "executive_vice_president.n.01", + "name": "executive_vice_president", + }, + {"id": 15742, "synset": "executrix.n.01", "name": "executrix"}, + {"id": 15743, "synset": "exegete.n.01", "name": "exegete"}, + {"id": 15744, "synset": "exhibitor.n.01", "name": "exhibitor"}, + {"id": 15745, "synset": "exhibitionist.n.02", "name": "exhibitionist"}, + {"id": 15746, "synset": "exile.n.01", "name": "exile"}, + {"id": 15747, "synset": "existentialist.n.01", "name": "existentialist"}, + {"id": 15748, "synset": "exorcist.n.02", "name": "exorcist"}, + {"id": 15749, "synset": "ex-spouse.n.01", "name": "ex-spouse"}, + {"id": 15750, "synset": "extern.n.01", "name": "extern"}, + {"id": 15751, "synset": "extremist.n.01", "name": "extremist"}, + {"id": 15752, "synset": "extrovert.n.01", "name": "extrovert"}, + {"id": 15753, "synset": "eyewitness.n.01", "name": "eyewitness"}, + {"id": 15754, "synset": "facilitator.n.01", "name": "facilitator"}, + {"id": 15755, "synset": "fairy_godmother.n.01", "name": "fairy_godmother"}, + {"id": 15756, "synset": "falangist.n.01", "name": "falangist"}, + {"id": 15757, "synset": "falconer.n.01", "name": "falconer"}, + {"id": 15758, "synset": "falsifier.n.01", "name": "falsifier"}, + {"id": 15759, "synset": "familiar.n.01", "name": "familiar"}, + {"id": 15760, "synset": "fan.n.03", "name": "fan"}, + {"id": 15761, "synset": "fanatic.n.01", "name": "fanatic"}, + {"id": 15762, "synset": "fancier.n.01", "name": "fancier"}, + {"id": 15763, "synset": "farm_boy.n.01", "name": "farm_boy"}, + {"id": 15764, "synset": "farmer.n.01", "name": "farmer"}, + {"id": 15765, "synset": "farmhand.n.01", "name": "farmhand"}, + {"id": 15766, "synset": "fascist.n.01", "name": "fascist"}, + {"id": 15767, "synset": "fascista.n.01", "name": "fascista"}, + {"id": 15768, "synset": "fatalist.n.01", "name": "fatalist"}, + {"id": 15769, "synset": "father.n.01", "name": "father"}, + {"id": 15770, "synset": "father.n.03", "name": "Father"}, + {"id": 15771, "synset": "father-figure.n.01", "name": "father-figure"}, + {"id": 15772, "synset": "father-in-law.n.01", "name": "father-in-law"}, + {"id": 15773, "synset": "fauntleroy.n.01", "name": "Fauntleroy"}, + {"id": 15774, "synset": "fauve.n.01", "name": "Fauve"}, + {"id": 15775, "synset": "favorite_son.n.01", "name": "favorite_son"}, + {"id": 15776, "synset": "featherweight.n.03", "name": "featherweight"}, + {"id": 15777, "synset": "federalist.n.02", "name": "federalist"}, + {"id": 15778, "synset": "fellow_traveler.n.01", "name": "fellow_traveler"}, + {"id": 15779, "synset": "female_aristocrat.n.01", "name": "female_aristocrat"}, + {"id": 15780, "synset": "female_offspring.n.01", "name": "female_offspring"}, + {"id": 15781, "synset": "female_child.n.01", "name": "female_child"}, + {"id": 15782, "synset": "fence.n.02", "name": "fence"}, + {"id": 15783, "synset": "fiance.n.01", "name": "fiance"}, + {"id": 15784, "synset": "fielder.n.02", "name": "fielder"}, + {"id": 15785, "synset": "field_judge.n.01", "name": "field_judge"}, + {"id": 15786, "synset": "fighter_pilot.n.01", "name": "fighter_pilot"}, + {"id": 15787, "synset": "filer.n.01", "name": "filer"}, + {"id": 15788, "synset": "film_director.n.01", "name": "film_director"}, + {"id": 15789, "synset": "finder.n.01", "name": "finder"}, + {"id": 15790, "synset": "fire_chief.n.01", "name": "fire_chief"}, + {"id": 15791, "synset": "fire-eater.n.03", "name": "fire-eater"}, + {"id": 15792, "synset": "fire-eater.n.02", "name": "fire-eater"}, + {"id": 15793, "synset": "fireman.n.04", "name": "fireman"}, + {"id": 15794, "synset": "fire_marshall.n.01", "name": "fire_marshall"}, + {"id": 15795, "synset": "fire_walker.n.01", "name": "fire_walker"}, + {"id": 15796, "synset": "first_baseman.n.01", "name": "first_baseman"}, + {"id": 15797, "synset": "firstborn.n.01", "name": "firstborn"}, + {"id": 15798, "synset": "first_lady.n.02", "name": "first_lady"}, + {"id": 15799, "synset": "first_lieutenant.n.01", "name": "first_lieutenant"}, + {"id": 15800, "synset": "first_offender.n.01", "name": "first_offender"}, + {"id": 15801, "synset": "first_sergeant.n.01", "name": "first_sergeant"}, + {"id": 15802, "synset": "fishmonger.n.01", "name": "fishmonger"}, + {"id": 15803, "synset": "flagellant.n.02", "name": "flagellant"}, + {"id": 15804, "synset": "flag_officer.n.01", "name": "flag_officer"}, + {"id": 15805, "synset": "flak_catcher.n.01", "name": "flak_catcher"}, + {"id": 15806, "synset": "flanker_back.n.01", "name": "flanker_back"}, + {"id": 15807, "synset": "flapper.n.01", "name": "flapper"}, + {"id": 15808, "synset": "flatmate.n.01", "name": "flatmate"}, + {"id": 15809, "synset": "flatterer.n.01", "name": "flatterer"}, + {"id": 15810, "synset": "flibbertigibbet.n.01", "name": "flibbertigibbet"}, + {"id": 15811, "synset": "flight_surgeon.n.01", "name": "flight_surgeon"}, + {"id": 15812, "synset": "floorwalker.n.01", "name": "floorwalker"}, + {"id": 15813, "synset": "flop.n.02", "name": "flop"}, + {"id": 15814, "synset": "florentine.n.01", "name": "Florentine"}, + {"id": 15815, "synset": "flower_girl.n.02", "name": "flower_girl"}, + {"id": 15816, "synset": "flower_girl.n.01", "name": "flower_girl"}, + {"id": 15817, "synset": "flutist.n.01", "name": "flutist"}, + {"id": 15818, "synset": "fly-by-night.n.01", "name": "fly-by-night"}, + {"id": 15819, "synset": "flyweight.n.02", "name": "flyweight"}, + {"id": 15820, "synset": "flyweight.n.01", "name": "flyweight"}, + {"id": 15821, "synset": "foe.n.02", "name": "foe"}, + {"id": 15822, "synset": "folk_dancer.n.01", "name": "folk_dancer"}, + {"id": 15823, "synset": "folk_poet.n.01", "name": "folk_poet"}, + {"id": 15824, "synset": "follower.n.01", "name": "follower"}, + {"id": 15825, "synset": "football_hero.n.01", "name": "football_hero"}, + {"id": 15826, "synset": "football_player.n.01", "name": "football_player"}, + {"id": 15827, "synset": "footman.n.01", "name": "footman"}, + {"id": 15828, "synset": "forefather.n.01", "name": "forefather"}, + {"id": 15829, "synset": "foremother.n.01", "name": "foremother"}, + {"id": 15830, "synset": "foreign_agent.n.01", "name": "foreign_agent"}, + {"id": 15831, "synset": "foreigner.n.02", "name": "foreigner"}, + {"id": 15832, "synset": "boss.n.03", "name": "boss"}, + {"id": 15833, "synset": "foreman.n.02", "name": "foreman"}, + {"id": 15834, "synset": "forester.n.02", "name": "forester"}, + {"id": 15835, "synset": "forewoman.n.02", "name": "forewoman"}, + {"id": 15836, "synset": "forger.n.02", "name": "forger"}, + {"id": 15837, "synset": "forward.n.01", "name": "forward"}, + {"id": 15838, "synset": "foster-brother.n.01", "name": "foster-brother"}, + {"id": 15839, "synset": "foster-father.n.01", "name": "foster-father"}, + {"id": 15840, "synset": "foster-mother.n.01", "name": "foster-mother"}, + {"id": 15841, "synset": "foster-sister.n.01", "name": "foster-sister"}, + {"id": 15842, "synset": "foster-son.n.01", "name": "foster-son"}, + {"id": 15843, "synset": "founder.n.02", "name": "founder"}, + {"id": 15844, "synset": "foundress.n.01", "name": "foundress"}, + {"id": 15845, "synset": "four-minute_man.n.01", "name": "four-minute_man"}, + {"id": 15846, "synset": "framer.n.02", "name": "framer"}, + {"id": 15847, "synset": "francophobe.n.01", "name": "Francophobe"}, + {"id": 15848, "synset": "freak.n.01", "name": "freak"}, + {"id": 15849, "synset": "free_agent.n.02", "name": "free_agent"}, + {"id": 15850, "synset": "free_agent.n.01", "name": "free_agent"}, + {"id": 15851, "synset": "freedom_rider.n.01", "name": "freedom_rider"}, + {"id": 15852, "synset": "free-liver.n.01", "name": "free-liver"}, + {"id": 15853, "synset": "freeloader.n.01", "name": "freeloader"}, + {"id": 15854, "synset": "free_trader.n.01", "name": "free_trader"}, + {"id": 15855, "synset": "freudian.n.01", "name": "Freudian"}, + {"id": 15856, "synset": "friar.n.01", "name": "friar"}, + {"id": 15857, "synset": "monk.n.01", "name": "monk"}, + {"id": 15858, "synset": "frontierswoman.n.01", "name": "frontierswoman"}, + {"id": 15859, "synset": "front_man.n.01", "name": "front_man"}, + {"id": 15860, "synset": "frotteur.n.01", "name": "frotteur"}, + {"id": 15861, "synset": "fucker.n.02", "name": "fucker"}, + {"id": 15862, "synset": "fucker.n.01", "name": "fucker"}, + {"id": 15863, "synset": "fuddy-duddy.n.01", "name": "fuddy-duddy"}, + {"id": 15864, "synset": "fullback.n.01", "name": "fullback"}, + {"id": 15865, "synset": "funambulist.n.01", "name": "funambulist"}, + {"id": 15866, "synset": "fundamentalist.n.01", "name": "fundamentalist"}, + {"id": 15867, "synset": "fundraiser.n.01", "name": "fundraiser"}, + {"id": 15868, "synset": "futurist.n.01", "name": "futurist"}, + {"id": 15869, "synset": "gadgeteer.n.01", "name": "gadgeteer"}, + {"id": 15870, "synset": "gagman.n.02", "name": "gagman"}, + {"id": 15871, "synset": "gagman.n.01", "name": "gagman"}, + {"id": 15872, "synset": "gainer.n.01", "name": "gainer"}, + {"id": 15873, "synset": "gal.n.03", "name": "gal"}, + {"id": 15874, "synset": "galoot.n.01", "name": "galoot"}, + {"id": 15875, "synset": "gambist.n.01", "name": "gambist"}, + {"id": 15876, "synset": "gambler.n.01", "name": "gambler"}, + {"id": 15877, "synset": "gamine.n.02", "name": "gamine"}, + {"id": 15878, "synset": "garbage_man.n.01", "name": "garbage_man"}, + {"id": 15879, "synset": "gardener.n.02", "name": "gardener"}, + {"id": 15880, "synset": "garment_cutter.n.01", "name": "garment_cutter"}, + {"id": 15881, "synset": "garroter.n.01", "name": "garroter"}, + {"id": 15882, "synset": "gasman.n.01", "name": "gasman"}, + {"id": 15883, "synset": "gastroenterologist.n.01", "name": "gastroenterologist"}, + {"id": 15884, "synset": "gatherer.n.01", "name": "gatherer"}, + {"id": 15885, "synset": "gawker.n.01", "name": "gawker"}, + {"id": 15886, "synset": "gendarme.n.01", "name": "gendarme"}, + {"id": 15887, "synset": "general.n.01", "name": "general"}, + {"id": 15888, "synset": "generator.n.03", "name": "generator"}, + {"id": 15889, "synset": "geneticist.n.01", "name": "geneticist"}, + {"id": 15890, "synset": "genitor.n.01", "name": "genitor"}, + {"id": 15891, "synset": "gent.n.01", "name": "gent"}, + {"id": 15892, "synset": "geologist.n.01", "name": "geologist"}, + {"id": 15893, "synset": "geophysicist.n.01", "name": "geophysicist"}, + {"id": 15894, "synset": "ghostwriter.n.01", "name": "ghostwriter"}, + {"id": 15895, "synset": "gibson_girl.n.01", "name": "Gibson_girl"}, + {"id": 15896, "synset": "girl.n.01", "name": "girl"}, + {"id": 15897, "synset": "girlfriend.n.02", "name": "girlfriend"}, + {"id": 15898, "synset": "girlfriend.n.01", "name": "girlfriend"}, + {"id": 15899, "synset": "girl_wonder.n.01", "name": "girl_wonder"}, + {"id": 15900, "synset": "girondist.n.01", "name": "Girondist"}, + {"id": 15901, "synset": "gitano.n.01", "name": "gitano"}, + {"id": 15902, "synset": "gladiator.n.01", "name": "gladiator"}, + {"id": 15903, "synset": "glassblower.n.01", "name": "glassblower"}, + {"id": 15904, "synset": "gleaner.n.02", "name": "gleaner"}, + {"id": 15905, "synset": "goat_herder.n.01", "name": "goat_herder"}, + {"id": 15906, "synset": "godchild.n.01", "name": "godchild"}, + {"id": 15907, "synset": "godfather.n.01", "name": "godfather"}, + {"id": 15908, "synset": "godparent.n.01", "name": "godparent"}, + {"id": 15909, "synset": "godson.n.01", "name": "godson"}, + {"id": 15910, "synset": "gofer.n.01", "name": "gofer"}, + {"id": 15911, "synset": "goffer.n.01", "name": "goffer"}, + {"id": 15912, "synset": "goldsmith.n.01", "name": "goldsmith"}, + {"id": 15913, "synset": "golfer.n.01", "name": "golfer"}, + {"id": 15914, "synset": "gondolier.n.01", "name": "gondolier"}, + {"id": 15915, "synset": "good_guy.n.01", "name": "good_guy"}, + {"id": 15916, "synset": "good_old_boy.n.01", "name": "good_old_boy"}, + {"id": 15917, "synset": "good_samaritan.n.01", "name": "good_Samaritan"}, + {"id": 15918, "synset": "gossip_columnist.n.01", "name": "gossip_columnist"}, + {"id": 15919, "synset": "gouger.n.01", "name": "gouger"}, + {"id": 15920, "synset": "governor_general.n.01", "name": "governor_general"}, + {"id": 15921, "synset": "grabber.n.01", "name": "grabber"}, + {"id": 15922, "synset": "grader.n.01", "name": "grader"}, + {"id": 15923, "synset": "graduate_nurse.n.01", "name": "graduate_nurse"}, + {"id": 15924, "synset": "grammarian.n.01", "name": "grammarian"}, + {"id": 15925, "synset": "granddaughter.n.01", "name": "granddaughter"}, + {"id": 15926, "synset": "grande_dame.n.01", "name": "grande_dame"}, + {"id": 15927, "synset": "grandfather.n.01", "name": "grandfather"}, + {"id": 15928, "synset": "grand_inquisitor.n.01", "name": "Grand_Inquisitor"}, + {"id": 15929, "synset": "grandma.n.01", "name": "grandma"}, + {"id": 15930, "synset": "grandmaster.n.01", "name": "grandmaster"}, + {"id": 15931, "synset": "grandparent.n.01", "name": "grandparent"}, + {"id": 15932, "synset": "grantee.n.01", "name": "grantee"}, + {"id": 15933, "synset": "granter.n.01", "name": "granter"}, + {"id": 15934, "synset": "grass_widower.n.01", "name": "grass_widower"}, + {"id": 15935, "synset": "great-aunt.n.01", "name": "great-aunt"}, + {"id": 15936, "synset": "great_grandchild.n.01", "name": "great_grandchild"}, + {"id": 15937, "synset": "great_granddaughter.n.01", "name": "great_granddaughter"}, + {"id": 15938, "synset": "great_grandmother.n.01", "name": "great_grandmother"}, + {"id": 15939, "synset": "great_grandparent.n.01", "name": "great_grandparent"}, + {"id": 15940, "synset": "great_grandson.n.01", "name": "great_grandson"}, + {"id": 15941, "synset": "great-nephew.n.01", "name": "great-nephew"}, + {"id": 15942, "synset": "great-niece.n.01", "name": "great-niece"}, + {"id": 15943, "synset": "green_beret.n.01", "name": "Green_Beret"}, + {"id": 15944, "synset": "grenadier.n.01", "name": "grenadier"}, + {"id": 15945, "synset": "greeter.n.01", "name": "greeter"}, + {"id": 15946, "synset": "gringo.n.01", "name": "gringo"}, + {"id": 15947, "synset": "grinner.n.01", "name": "grinner"}, + {"id": 15948, "synset": "grocer.n.01", "name": "grocer"}, + {"id": 15949, "synset": "groom.n.03", "name": "groom"}, + {"id": 15950, "synset": "groom.n.01", "name": "groom"}, + {"id": 15951, "synset": "grouch.n.01", "name": "grouch"}, + {"id": 15952, "synset": "group_captain.n.01", "name": "group_captain"}, + {"id": 15953, "synset": "grunter.n.01", "name": "grunter"}, + {"id": 15954, "synset": "prison_guard.n.01", "name": "prison_guard"}, + {"id": 15955, "synset": "guard.n.01", "name": "guard"}, + {"id": 15956, "synset": "guesser.n.01", "name": "guesser"}, + {"id": 15957, "synset": "guest.n.01", "name": "guest"}, + {"id": 15958, "synset": "guest.n.03", "name": "guest"}, + {"id": 15959, "synset": "guest_of_honor.n.01", "name": "guest_of_honor"}, + {"id": 15960, "synset": "guest_worker.n.01", "name": "guest_worker"}, + {"id": 15961, "synset": "guide.n.02", "name": "guide"}, + {"id": 15962, "synset": "guitarist.n.01", "name": "guitarist"}, + {"id": 15963, "synset": "gunnery_sergeant.n.01", "name": "gunnery_sergeant"}, + {"id": 15964, "synset": "guru.n.01", "name": "guru"}, + {"id": 15965, "synset": "guru.n.03", "name": "guru"}, + {"id": 15966, "synset": "guvnor.n.01", "name": "guvnor"}, + {"id": 15967, "synset": "guy.n.01", "name": "guy"}, + {"id": 15968, "synset": "gymnast.n.01", "name": "gymnast"}, + {"id": 15969, "synset": "gym_rat.n.01", "name": "gym_rat"}, + {"id": 15970, "synset": "gynecologist.n.01", "name": "gynecologist"}, + {"id": 15971, "synset": "gypsy.n.02", "name": "Gypsy"}, + {"id": 15972, "synset": "hack.n.01", "name": "hack"}, + {"id": 15973, "synset": "hacker.n.02", "name": "hacker"}, + {"id": 15974, "synset": "haggler.n.01", "name": "haggler"}, + {"id": 15975, "synset": "hairdresser.n.01", "name": "hairdresser"}, + {"id": 15976, "synset": "hakim.n.02", "name": "hakim"}, + {"id": 15977, "synset": "hakka.n.01", "name": "Hakka"}, + {"id": 15978, "synset": "halberdier.n.01", "name": "halberdier"}, + {"id": 15979, "synset": "halfback.n.01", "name": "halfback"}, + {"id": 15980, "synset": "half_blood.n.01", "name": "half_blood"}, + {"id": 15981, "synset": "hand.n.10", "name": "hand"}, + {"id": 15982, "synset": "animal_trainer.n.01", "name": "animal_trainer"}, + {"id": 15983, "synset": "handyman.n.01", "name": "handyman"}, + {"id": 15984, "synset": "hang_glider.n.01", "name": "hang_glider"}, + {"id": 15985, "synset": "hardliner.n.01", "name": "hardliner"}, + {"id": 15986, "synset": "harlequin.n.01", "name": "harlequin"}, + {"id": 15987, "synset": "harmonizer.n.02", "name": "harmonizer"}, + {"id": 15988, "synset": "hash_head.n.01", "name": "hash_head"}, + {"id": 15989, "synset": "hatchet_man.n.01", "name": "hatchet_man"}, + {"id": 15990, "synset": "hater.n.01", "name": "hater"}, + {"id": 15991, "synset": "hatmaker.n.01", "name": "hatmaker"}, + {"id": 15992, "synset": "headman.n.02", "name": "headman"}, + {"id": 15993, "synset": "headmaster.n.01", "name": "headmaster"}, + {"id": 15994, "synset": "head_nurse.n.01", "name": "head_nurse"}, + {"id": 15995, "synset": "hearer.n.01", "name": "hearer"}, + {"id": 15996, "synset": "heartbreaker.n.01", "name": "heartbreaker"}, + {"id": 15997, "synset": "heathen.n.01", "name": "heathen"}, + {"id": 15998, "synset": "heavyweight.n.02", "name": "heavyweight"}, + {"id": 15999, "synset": "heavy.n.01", "name": "heavy"}, + {"id": 16000, "synset": "heckler.n.01", "name": "heckler"}, + {"id": 16001, "synset": "hedger.n.02", "name": "hedger"}, + {"id": 16002, "synset": "hedger.n.01", "name": "hedger"}, + {"id": 16003, "synset": "hedonist.n.01", "name": "hedonist"}, + {"id": 16004, "synset": "heir.n.01", "name": "heir"}, + {"id": 16005, "synset": "heir_apparent.n.01", "name": "heir_apparent"}, + {"id": 16006, "synset": "heiress.n.01", "name": "heiress"}, + {"id": 16007, "synset": "heir_presumptive.n.01", "name": "heir_presumptive"}, + {"id": 16008, "synset": "hellion.n.01", "name": "hellion"}, + {"id": 16009, "synset": "helmsman.n.01", "name": "helmsman"}, + {"id": 16010, "synset": "hire.n.01", "name": "hire"}, + {"id": 16011, "synset": "hematologist.n.01", "name": "hematologist"}, + {"id": 16012, "synset": "hemiplegic.n.01", "name": "hemiplegic"}, + {"id": 16013, "synset": "herald.n.01", "name": "herald"}, + {"id": 16014, "synset": "herbalist.n.01", "name": "herbalist"}, + {"id": 16015, "synset": "herder.n.02", "name": "herder"}, + {"id": 16016, "synset": "hermaphrodite.n.01", "name": "hermaphrodite"}, + {"id": 16017, "synset": "heroine.n.02", "name": "heroine"}, + {"id": 16018, "synset": "heroin_addict.n.01", "name": "heroin_addict"}, + {"id": 16019, "synset": "hero_worshiper.n.01", "name": "hero_worshiper"}, + {"id": 16020, "synset": "herr.n.01", "name": "Herr"}, + {"id": 16021, "synset": "highbinder.n.01", "name": "highbinder"}, + {"id": 16022, "synset": "highbrow.n.01", "name": "highbrow"}, + {"id": 16023, "synset": "high_commissioner.n.01", "name": "high_commissioner"}, + {"id": 16024, "synset": "highflier.n.01", "name": "highflier"}, + {"id": 16025, "synset": "highlander.n.02", "name": "Highlander"}, + {"id": 16026, "synset": "high-muck-a-muck.n.01", "name": "high-muck-a-muck"}, + {"id": 16027, "synset": "high_priest.n.01", "name": "high_priest"}, + {"id": 16028, "synset": "highjacker.n.01", "name": "highjacker"}, + {"id": 16029, "synset": "hireling.n.01", "name": "hireling"}, + {"id": 16030, "synset": "historian.n.01", "name": "historian"}, + {"id": 16031, "synset": "hitchhiker.n.01", "name": "hitchhiker"}, + {"id": 16032, "synset": "hitter.n.02", "name": "hitter"}, + {"id": 16033, "synset": "hobbyist.n.01", "name": "hobbyist"}, + {"id": 16034, "synset": "holdout.n.01", "name": "holdout"}, + {"id": 16035, "synset": "holdover.n.01", "name": "holdover"}, + {"id": 16036, "synset": "holdup_man.n.01", "name": "holdup_man"}, + {"id": 16037, "synset": "homeboy.n.02", "name": "homeboy"}, + {"id": 16038, "synset": "homeboy.n.01", "name": "homeboy"}, + {"id": 16039, "synset": "home_buyer.n.01", "name": "home_buyer"}, + {"id": 16040, "synset": "homegirl.n.01", "name": "homegirl"}, + {"id": 16041, "synset": "homeless.n.01", "name": "homeless"}, + {"id": 16042, "synset": "homeopath.n.01", "name": "homeopath"}, + {"id": 16043, "synset": "honest_woman.n.01", "name": "honest_woman"}, + {"id": 16044, "synset": "honor_guard.n.01", "name": "honor_guard"}, + {"id": 16045, "synset": "hooker.n.05", "name": "hooker"}, + {"id": 16046, "synset": "hoper.n.01", "name": "hoper"}, + {"id": 16047, "synset": "hornist.n.01", "name": "hornist"}, + {"id": 16048, "synset": "horseman.n.01", "name": "horseman"}, + {"id": 16049, "synset": "horse_trader.n.01", "name": "horse_trader"}, + {"id": 16050, "synset": "horsewoman.n.01", "name": "horsewoman"}, + {"id": 16051, "synset": "horse_wrangler.n.01", "name": "horse_wrangler"}, + {"id": 16052, "synset": "horticulturist.n.01", "name": "horticulturist"}, + {"id": 16053, "synset": "hospital_chaplain.n.01", "name": "hospital_chaplain"}, + {"id": 16054, "synset": "host.n.08", "name": "host"}, + {"id": 16055, "synset": "host.n.01", "name": "host"}, + {"id": 16056, "synset": "hostess.n.01", "name": "hostess"}, + {"id": 16057, "synset": "hotelier.n.01", "name": "hotelier"}, + {"id": 16058, "synset": "housekeeper.n.01", "name": "housekeeper"}, + {"id": 16059, "synset": "housemaster.n.01", "name": "housemaster"}, + {"id": 16060, "synset": "housemate.n.01", "name": "housemate"}, + {"id": 16061, "synset": "house_physician.n.01", "name": "house_physician"}, + {"id": 16062, "synset": "house_sitter.n.01", "name": "house_sitter"}, + { + "id": 16063, + "synset": "housing_commissioner.n.01", + "name": "housing_commissioner", + }, + {"id": 16064, "synset": "huckster.n.01", "name": "huckster"}, + {"id": 16065, "synset": "hugger.n.01", "name": "hugger"}, + {"id": 16066, "synset": "humanist.n.02", "name": "humanist"}, + {"id": 16067, "synset": "humanitarian.n.01", "name": "humanitarian"}, + {"id": 16068, "synset": "hunk.n.01", "name": "hunk"}, + {"id": 16069, "synset": "huntress.n.01", "name": "huntress"}, + {"id": 16070, "synset": "ex-husband.n.01", "name": "ex-husband"}, + {"id": 16071, "synset": "hydrologist.n.01", "name": "hydrologist"}, + {"id": 16072, "synset": "hyperope.n.01", "name": "hyperope"}, + {"id": 16073, "synset": "hypertensive.n.01", "name": "hypertensive"}, + {"id": 16074, "synset": "hypnotist.n.01", "name": "hypnotist"}, + {"id": 16075, "synset": "hypocrite.n.01", "name": "hypocrite"}, + {"id": 16076, "synset": "iceman.n.01", "name": "iceman"}, + {"id": 16077, "synset": "iconoclast.n.02", "name": "iconoclast"}, + {"id": 16078, "synset": "ideologist.n.01", "name": "ideologist"}, + {"id": 16079, "synset": "idol.n.02", "name": "idol"}, + {"id": 16080, "synset": "idolizer.n.01", "name": "idolizer"}, + {"id": 16081, "synset": "imam.n.01", "name": "imam"}, + {"id": 16082, "synset": "imperialist.n.01", "name": "imperialist"}, + {"id": 16083, "synset": "important_person.n.01", "name": "important_person"}, + {"id": 16084, "synset": "inamorato.n.01", "name": "inamorato"}, + {"id": 16085, "synset": "incumbent.n.01", "name": "incumbent"}, + {"id": 16086, "synset": "incurable.n.01", "name": "incurable"}, + {"id": 16087, "synset": "inductee.n.01", "name": "inductee"}, + {"id": 16088, "synset": "industrialist.n.01", "name": "industrialist"}, + {"id": 16089, "synset": "infanticide.n.01", "name": "infanticide"}, + {"id": 16090, "synset": "inferior.n.01", "name": "inferior"}, + {"id": 16091, "synset": "infernal.n.01", "name": "infernal"}, + {"id": 16092, "synset": "infielder.n.01", "name": "infielder"}, + {"id": 16093, "synset": "infiltrator.n.02", "name": "infiltrator"}, + {"id": 16094, "synset": "informer.n.01", "name": "informer"}, + {"id": 16095, "synset": "ingenue.n.02", "name": "ingenue"}, + {"id": 16096, "synset": "ingenue.n.01", "name": "ingenue"}, + {"id": 16097, "synset": "polymath.n.01", "name": "polymath"}, + {"id": 16098, "synset": "in-law.n.01", "name": "in-law"}, + {"id": 16099, "synset": "inquiry_agent.n.01", "name": "inquiry_agent"}, + {"id": 16100, "synset": "inspector.n.01", "name": "inspector"}, + {"id": 16101, "synset": "inspector_general.n.01", "name": "inspector_general"}, + {"id": 16102, "synset": "instigator.n.02", "name": "instigator"}, + {"id": 16103, "synset": "insurance_broker.n.01", "name": "insurance_broker"}, + {"id": 16104, "synset": "insurgent.n.01", "name": "insurgent"}, + { + "id": 16105, + "synset": "intelligence_analyst.n.01", + "name": "intelligence_analyst", + }, + {"id": 16106, "synset": "interior_designer.n.01", "name": "interior_designer"}, + {"id": 16107, "synset": "interlocutor.n.02", "name": "interlocutor"}, + {"id": 16108, "synset": "interlocutor.n.01", "name": "interlocutor"}, + { + "id": 16109, + "synset": "international_grandmaster.n.01", + "name": "International_Grandmaster", + }, + {"id": 16110, "synset": "internationalist.n.02", "name": "internationalist"}, + {"id": 16111, "synset": "internist.n.01", "name": "internist"}, + {"id": 16112, "synset": "interpreter.n.01", "name": "interpreter"}, + {"id": 16113, "synset": "interpreter.n.02", "name": "interpreter"}, + {"id": 16114, "synset": "intervenor.n.01", "name": "intervenor"}, + {"id": 16115, "synset": "introvert.n.01", "name": "introvert"}, + {"id": 16116, "synset": "invader.n.01", "name": "invader"}, + {"id": 16117, "synset": "invalidator.n.01", "name": "invalidator"}, + {"id": 16118, "synset": "investigator.n.02", "name": "investigator"}, + {"id": 16119, "synset": "investor.n.01", "name": "investor"}, + {"id": 16120, "synset": "invigilator.n.01", "name": "invigilator"}, + {"id": 16121, "synset": "irreligionist.n.01", "name": "irreligionist"}, + {"id": 16122, "synset": "ivy_leaguer.n.01", "name": "Ivy_Leaguer"}, + {"id": 16123, "synset": "jack_of_all_trades.n.01", "name": "Jack_of_all_trades"}, + {"id": 16124, "synset": "jacksonian.n.01", "name": "Jacksonian"}, + {"id": 16125, "synset": "jane_doe.n.01", "name": "Jane_Doe"}, + {"id": 16126, "synset": "janissary.n.01", "name": "janissary"}, + {"id": 16127, "synset": "jat.n.01", "name": "Jat"}, + {"id": 16128, "synset": "javanese.n.01", "name": "Javanese"}, + {"id": 16129, "synset": "jekyll_and_hyde.n.01", "name": "Jekyll_and_Hyde"}, + {"id": 16130, "synset": "jester.n.01", "name": "jester"}, + {"id": 16131, "synset": "jesuit.n.01", "name": "Jesuit"}, + {"id": 16132, "synset": "jezebel.n.02", "name": "jezebel"}, + {"id": 16133, "synset": "jilt.n.01", "name": "jilt"}, + {"id": 16134, "synset": "jobber.n.01", "name": "jobber"}, + {"id": 16135, "synset": "job_candidate.n.01", "name": "job_candidate"}, + {"id": 16136, "synset": "job's_comforter.n.01", "name": "Job's_comforter"}, + {"id": 16137, "synset": "jockey.n.01", "name": "jockey"}, + {"id": 16138, "synset": "john_doe.n.02", "name": "John_Doe"}, + {"id": 16139, "synset": "journalist.n.01", "name": "journalist"}, + {"id": 16140, "synset": "judge.n.01", "name": "judge"}, + {"id": 16141, "synset": "judge_advocate.n.01", "name": "judge_advocate"}, + {"id": 16142, "synset": "juggler.n.01", "name": "juggler"}, + {"id": 16143, "synset": "jungian.n.01", "name": "Jungian"}, + {"id": 16144, "synset": "junior.n.03", "name": "junior"}, + {"id": 16145, "synset": "junior.n.02", "name": "junior"}, + {"id": 16146, "synset": "junior.n.04", "name": "Junior"}, + {"id": 16147, "synset": "junior_lightweight.n.01", "name": "junior_lightweight"}, + {"id": 16148, "synset": "junior_middleweight.n.01", "name": "junior_middleweight"}, + {"id": 16149, "synset": "jurist.n.01", "name": "jurist"}, + {"id": 16150, "synset": "juror.n.01", "name": "juror"}, + { + "id": 16151, + "synset": "justice_of_the_peace.n.01", + "name": "justice_of_the_peace", + }, + {"id": 16152, "synset": "justiciar.n.01", "name": "justiciar"}, + {"id": 16153, "synset": "kachina.n.01", "name": "kachina"}, + {"id": 16154, "synset": "keyboardist.n.01", "name": "keyboardist"}, + {"id": 16155, "synset": "khedive.n.01", "name": "Khedive"}, + {"id": 16156, "synset": "kingmaker.n.02", "name": "kingmaker"}, + {"id": 16157, "synset": "king.n.02", "name": "king"}, + {"id": 16158, "synset": "king's_counsel.n.01", "name": "King's_Counsel"}, + { + "id": 16159, + "synset": "counsel_to_the_crown.n.01", + "name": "Counsel_to_the_Crown", + }, + {"id": 16160, "synset": "kin.n.01", "name": "kin"}, + {"id": 16161, "synset": "enate.n.01", "name": "enate"}, + {"id": 16162, "synset": "kink.n.03", "name": "kink"}, + {"id": 16163, "synset": "kinswoman.n.01", "name": "kinswoman"}, + {"id": 16164, "synset": "kisser.n.01", "name": "kisser"}, + {"id": 16165, "synset": "kitchen_help.n.01", "name": "kitchen_help"}, + {"id": 16166, "synset": "kitchen_police.n.01", "name": "kitchen_police"}, + {"id": 16167, "synset": "klansman.n.01", "name": "Klansman"}, + {"id": 16168, "synset": "kleptomaniac.n.01", "name": "kleptomaniac"}, + {"id": 16169, "synset": "kneeler.n.01", "name": "kneeler"}, + {"id": 16170, "synset": "knight.n.01", "name": "knight"}, + {"id": 16171, "synset": "knocker.n.01", "name": "knocker"}, + {"id": 16172, "synset": "knower.n.01", "name": "knower"}, + {"id": 16173, "synset": "know-it-all.n.01", "name": "know-it-all"}, + {"id": 16174, "synset": "kolkhoznik.n.01", "name": "kolkhoznik"}, + {"id": 16175, "synset": "kshatriya.n.01", "name": "Kshatriya"}, + {"id": 16176, "synset": "labor_coach.n.01", "name": "labor_coach"}, + {"id": 16177, "synset": "laborer.n.01", "name": "laborer"}, + {"id": 16178, "synset": "labourite.n.01", "name": "Labourite"}, + {"id": 16179, "synset": "lady.n.01", "name": "lady"}, + {"id": 16180, "synset": "lady-in-waiting.n.01", "name": "lady-in-waiting"}, + {"id": 16181, "synset": "lady's_maid.n.01", "name": "lady's_maid"}, + {"id": 16182, "synset": "lama.n.01", "name": "lama"}, + {"id": 16183, "synset": "lamb.n.04", "name": "lamb"}, + {"id": 16184, "synset": "lame_duck.n.01", "name": "lame_duck"}, + {"id": 16185, "synset": "lamplighter.n.01", "name": "lamplighter"}, + {"id": 16186, "synset": "land_agent.n.02", "name": "land_agent"}, + {"id": 16187, "synset": "landgrave.n.01", "name": "landgrave"}, + {"id": 16188, "synset": "landlubber.n.02", "name": "landlubber"}, + {"id": 16189, "synset": "landlubber.n.01", "name": "landlubber"}, + {"id": 16190, "synset": "landowner.n.01", "name": "landowner"}, + {"id": 16191, "synset": "landscape_architect.n.01", "name": "landscape_architect"}, + {"id": 16192, "synset": "langlaufer.n.01", "name": "langlaufer"}, + {"id": 16193, "synset": "languisher.n.01", "name": "languisher"}, + {"id": 16194, "synset": "lapidary.n.01", "name": "lapidary"}, + {"id": 16195, "synset": "lass.n.01", "name": "lass"}, + {"id": 16196, "synset": "latin.n.03", "name": "Latin"}, + {"id": 16197, "synset": "latin.n.02", "name": "Latin"}, + {"id": 16198, "synset": "latitudinarian.n.01", "name": "latitudinarian"}, + {"id": 16199, "synset": "jehovah's_witness.n.01", "name": "Jehovah's_Witness"}, + {"id": 16200, "synset": "law_agent.n.01", "name": "law_agent"}, + {"id": 16201, "synset": "lawgiver.n.01", "name": "lawgiver"}, + {"id": 16202, "synset": "lawman.n.01", "name": "lawman"}, + {"id": 16203, "synset": "law_student.n.01", "name": "law_student"}, + {"id": 16204, "synset": "lawyer.n.01", "name": "lawyer"}, + {"id": 16205, "synset": "lay_reader.n.01", "name": "lay_reader"}, + {"id": 16206, "synset": "lazybones.n.01", "name": "lazybones"}, + {"id": 16207, "synset": "leaker.n.01", "name": "leaker"}, + {"id": 16208, "synset": "leaseholder.n.01", "name": "leaseholder"}, + {"id": 16209, "synset": "lector.n.02", "name": "lector"}, + {"id": 16210, "synset": "lector.n.01", "name": "lector"}, + {"id": 16211, "synset": "lecturer.n.02", "name": "lecturer"}, + {"id": 16212, "synset": "left-hander.n.02", "name": "left-hander"}, + { + "id": 16213, + "synset": "legal_representative.n.01", + "name": "legal_representative", + }, + {"id": 16214, "synset": "legate.n.01", "name": "legate"}, + {"id": 16215, "synset": "legatee.n.01", "name": "legatee"}, + {"id": 16216, "synset": "legionnaire.n.02", "name": "legionnaire"}, + {"id": 16217, "synset": "letterman.n.01", "name": "letterman"}, + {"id": 16218, "synset": "liberator.n.01", "name": "liberator"}, + {"id": 16219, "synset": "licenser.n.01", "name": "licenser"}, + {"id": 16220, "synset": "licentiate.n.01", "name": "licentiate"}, + {"id": 16221, "synset": "lieutenant.n.01", "name": "lieutenant"}, + {"id": 16222, "synset": "lieutenant_colonel.n.01", "name": "lieutenant_colonel"}, + { + "id": 16223, + "synset": "lieutenant_commander.n.01", + "name": "lieutenant_commander", + }, + { + "id": 16224, + "synset": "lieutenant_junior_grade.n.01", + "name": "lieutenant_junior_grade", + }, + {"id": 16225, "synset": "life.n.08", "name": "life"}, + {"id": 16226, "synset": "lifeguard.n.01", "name": "lifeguard"}, + {"id": 16227, "synset": "life_tenant.n.01", "name": "life_tenant"}, + {"id": 16228, "synset": "light_flyweight.n.01", "name": "light_flyweight"}, + {"id": 16229, "synset": "light_heavyweight.n.03", "name": "light_heavyweight"}, + {"id": 16230, "synset": "light_heavyweight.n.01", "name": "light_heavyweight"}, + {"id": 16231, "synset": "light-o'-love.n.01", "name": "light-o'-love"}, + {"id": 16232, "synset": "lightweight.n.01", "name": "lightweight"}, + {"id": 16233, "synset": "lightweight.n.04", "name": "lightweight"}, + {"id": 16234, "synset": "lightweight.n.03", "name": "lightweight"}, + {"id": 16235, "synset": "lilliputian.n.01", "name": "lilliputian"}, + {"id": 16236, "synset": "limnologist.n.01", "name": "limnologist"}, + {"id": 16237, "synset": "lineman.n.01", "name": "lineman"}, + {"id": 16238, "synset": "line_officer.n.01", "name": "line_officer"}, + {"id": 16239, "synset": "lion-hunter.n.01", "name": "lion-hunter"}, + {"id": 16240, "synset": "lisper.n.01", "name": "lisper"}, + {"id": 16241, "synset": "lister.n.02", "name": "lister"}, + {"id": 16242, "synset": "literary_critic.n.01", "name": "literary_critic"}, + {"id": 16243, "synset": "literate.n.01", "name": "literate"}, + {"id": 16244, "synset": "litigant.n.01", "name": "litigant"}, + {"id": 16245, "synset": "litterer.n.01", "name": "litterer"}, + {"id": 16246, "synset": "little_brother.n.01", "name": "little_brother"}, + {"id": 16247, "synset": "little_sister.n.01", "name": "little_sister"}, + {"id": 16248, "synset": "lobbyist.n.01", "name": "lobbyist"}, + {"id": 16249, "synset": "locksmith.n.01", "name": "locksmith"}, + {"id": 16250, "synset": "locum_tenens.n.01", "name": "locum_tenens"}, + {"id": 16251, "synset": "lord.n.03", "name": "Lord"}, + {"id": 16252, "synset": "loser.n.03", "name": "loser"}, + {"id": 16253, "synset": "loser.n.01", "name": "loser"}, + {"id": 16254, "synset": "failure.n.04", "name": "failure"}, + {"id": 16255, "synset": "lothario.n.01", "name": "Lothario"}, + {"id": 16256, "synset": "loudmouth.n.01", "name": "loudmouth"}, + {"id": 16257, "synset": "lowerclassman.n.01", "name": "lowerclassman"}, + {"id": 16258, "synset": "lowlander.n.01", "name": "Lowlander"}, + {"id": 16259, "synset": "loyalist.n.01", "name": "loyalist"}, + {"id": 16260, "synset": "luddite.n.01", "name": "Luddite"}, + {"id": 16261, "synset": "lumberman.n.01", "name": "lumberman"}, + {"id": 16262, "synset": "lumper.n.02", "name": "lumper"}, + {"id": 16263, "synset": "bedlamite.n.01", "name": "bedlamite"}, + {"id": 16264, "synset": "pyromaniac.n.01", "name": "pyromaniac"}, + {"id": 16265, "synset": "lutist.n.01", "name": "lutist"}, + {"id": 16266, "synset": "lutheran.n.01", "name": "Lutheran"}, + {"id": 16267, "synset": "lyricist.n.01", "name": "lyricist"}, + {"id": 16268, "synset": "macebearer.n.01", "name": "macebearer"}, + {"id": 16269, "synset": "machinist.n.01", "name": "machinist"}, + {"id": 16270, "synset": "madame.n.01", "name": "madame"}, + {"id": 16271, "synset": "maenad.n.01", "name": "maenad"}, + {"id": 16272, "synset": "maestro.n.01", "name": "maestro"}, + {"id": 16273, "synset": "magdalen.n.01", "name": "magdalen"}, + {"id": 16274, "synset": "magician.n.01", "name": "magician"}, + {"id": 16275, "synset": "magus.n.01", "name": "magus"}, + {"id": 16276, "synset": "maharani.n.01", "name": "maharani"}, + {"id": 16277, "synset": "mahatma.n.01", "name": "mahatma"}, + {"id": 16278, "synset": "maid.n.02", "name": "maid"}, + {"id": 16279, "synset": "maid.n.01", "name": "maid"}, + {"id": 16280, "synset": "major.n.01", "name": "major"}, + {"id": 16281, "synset": "major.n.03", "name": "major"}, + {"id": 16282, "synset": "major-domo.n.01", "name": "major-domo"}, + {"id": 16283, "synset": "maker.n.01", "name": "maker"}, + {"id": 16284, "synset": "malahini.n.01", "name": "malahini"}, + {"id": 16285, "synset": "malcontent.n.01", "name": "malcontent"}, + {"id": 16286, "synset": "malik.n.01", "name": "malik"}, + {"id": 16287, "synset": "malingerer.n.01", "name": "malingerer"}, + {"id": 16288, "synset": "malthusian.n.01", "name": "Malthusian"}, + {"id": 16289, "synset": "adonis.n.01", "name": "adonis"}, + {"id": 16290, "synset": "man.n.03", "name": "man"}, + {"id": 16291, "synset": "man.n.05", "name": "man"}, + {"id": 16292, "synset": "manageress.n.01", "name": "manageress"}, + {"id": 16293, "synset": "mandarin.n.03", "name": "mandarin"}, + {"id": 16294, "synset": "maneuverer.n.01", "name": "maneuverer"}, + {"id": 16295, "synset": "maniac.n.02", "name": "maniac"}, + {"id": 16296, "synset": "manichaean.n.01", "name": "Manichaean"}, + {"id": 16297, "synset": "manicurist.n.01", "name": "manicurist"}, + {"id": 16298, "synset": "manipulator.n.02", "name": "manipulator"}, + {"id": 16299, "synset": "man-at-arms.n.01", "name": "man-at-arms"}, + {"id": 16300, "synset": "man_of_action.n.01", "name": "man_of_action"}, + {"id": 16301, "synset": "man_of_letters.n.01", "name": "man_of_letters"}, + {"id": 16302, "synset": "manufacturer.n.02", "name": "manufacturer"}, + {"id": 16303, "synset": "marcher.n.02", "name": "marcher"}, + {"id": 16304, "synset": "marchioness.n.02", "name": "marchioness"}, + {"id": 16305, "synset": "margrave.n.02", "name": "margrave"}, + {"id": 16306, "synset": "margrave.n.01", "name": "margrave"}, + {"id": 16307, "synset": "marine.n.01", "name": "Marine"}, + {"id": 16308, "synset": "marquess.n.02", "name": "marquess"}, + {"id": 16309, "synset": "marquis.n.02", "name": "marquis"}, + {"id": 16310, "synset": "marshal.n.02", "name": "marshal"}, + {"id": 16311, "synset": "martinet.n.01", "name": "martinet"}, + {"id": 16312, "synset": "masochist.n.01", "name": "masochist"}, + {"id": 16313, "synset": "mason.n.04", "name": "mason"}, + {"id": 16314, "synset": "masquerader.n.01", "name": "masquerader"}, + {"id": 16315, "synset": "masseur.n.01", "name": "masseur"}, + {"id": 16316, "synset": "masseuse.n.01", "name": "masseuse"}, + {"id": 16317, "synset": "master.n.04", "name": "master"}, + {"id": 16318, "synset": "master.n.07", "name": "master"}, + {"id": 16319, "synset": "master-at-arms.n.01", "name": "master-at-arms"}, + { + "id": 16320, + "synset": "master_of_ceremonies.n.01", + "name": "master_of_ceremonies", + }, + {"id": 16321, "synset": "masturbator.n.01", "name": "masturbator"}, + {"id": 16322, "synset": "matchmaker.n.01", "name": "matchmaker"}, + {"id": 16323, "synset": "mate.n.01", "name": "mate"}, + {"id": 16324, "synset": "mate.n.08", "name": "mate"}, + {"id": 16325, "synset": "mate.n.03", "name": "mate"}, + {"id": 16326, "synset": "mater.n.01", "name": "mater"}, + {"id": 16327, "synset": "material.n.05", "name": "material"}, + {"id": 16328, "synset": "materialist.n.02", "name": "materialist"}, + {"id": 16329, "synset": "matriarch.n.01", "name": "matriarch"}, + {"id": 16330, "synset": "matriarch.n.02", "name": "matriarch"}, + {"id": 16331, "synset": "matriculate.n.01", "name": "matriculate"}, + {"id": 16332, "synset": "matron.n.01", "name": "matron"}, + {"id": 16333, "synset": "mayor.n.01", "name": "mayor"}, + {"id": 16334, "synset": "mayoress.n.01", "name": "mayoress"}, + {"id": 16335, "synset": "mechanical_engineer.n.01", "name": "mechanical_engineer"}, + {"id": 16336, "synset": "medalist.n.02", "name": "medalist"}, + {"id": 16337, "synset": "medical_officer.n.01", "name": "medical_officer"}, + { + "id": 16338, + "synset": "medical_practitioner.n.01", + "name": "medical_practitioner", + }, + {"id": 16339, "synset": "medical_scientist.n.01", "name": "medical_scientist"}, + {"id": 16340, "synset": "medium.n.09", "name": "medium"}, + {"id": 16341, "synset": "megalomaniac.n.01", "name": "megalomaniac"}, + {"id": 16342, "synset": "melancholic.n.01", "name": "melancholic"}, + {"id": 16343, "synset": "melkite.n.01", "name": "Melkite"}, + {"id": 16344, "synset": "melter.n.01", "name": "melter"}, + {"id": 16345, "synset": "nonmember.n.01", "name": "nonmember"}, + {"id": 16346, "synset": "board_member.n.01", "name": "board_member"}, + {"id": 16347, "synset": "clansman.n.01", "name": "clansman"}, + {"id": 16348, "synset": "memorizer.n.01", "name": "memorizer"}, + {"id": 16349, "synset": "mendelian.n.01", "name": "Mendelian"}, + {"id": 16350, "synset": "mender.n.01", "name": "mender"}, + {"id": 16351, "synset": "mesoamerican.n.01", "name": "Mesoamerican"}, + {"id": 16352, "synset": "messmate.n.01", "name": "messmate"}, + {"id": 16353, "synset": "mestiza.n.01", "name": "mestiza"}, + {"id": 16354, "synset": "meteorologist.n.01", "name": "meteorologist"}, + {"id": 16355, "synset": "meter_maid.n.01", "name": "meter_maid"}, + {"id": 16356, "synset": "methodist.n.01", "name": "Methodist"}, + {"id": 16357, "synset": "metis.n.01", "name": "Metis"}, + {"id": 16358, "synset": "metropolitan.n.01", "name": "metropolitan"}, + {"id": 16359, "synset": "mezzo-soprano.n.01", "name": "mezzo-soprano"}, + {"id": 16360, "synset": "microeconomist.n.01", "name": "microeconomist"}, + {"id": 16361, "synset": "middle-aged_man.n.01", "name": "middle-aged_man"}, + {"id": 16362, "synset": "middlebrow.n.01", "name": "middlebrow"}, + {"id": 16363, "synset": "middleweight.n.01", "name": "middleweight"}, + {"id": 16364, "synset": "midwife.n.01", "name": "midwife"}, + {"id": 16365, "synset": "mikado.n.01", "name": "mikado"}, + {"id": 16366, "synset": "milanese.n.01", "name": "Milanese"}, + {"id": 16367, "synset": "miler.n.02", "name": "miler"}, + {"id": 16368, "synset": "miles_gloriosus.n.01", "name": "miles_gloriosus"}, + {"id": 16369, "synset": "military_attache.n.01", "name": "military_attache"}, + {"id": 16370, "synset": "military_chaplain.n.01", "name": "military_chaplain"}, + {"id": 16371, "synset": "military_leader.n.01", "name": "military_leader"}, + {"id": 16372, "synset": "military_officer.n.01", "name": "military_officer"}, + {"id": 16373, "synset": "military_policeman.n.01", "name": "military_policeman"}, + {"id": 16374, "synset": "mill_agent.n.01", "name": "mill_agent"}, + {"id": 16375, "synset": "mill-hand.n.01", "name": "mill-hand"}, + {"id": 16376, "synset": "millionairess.n.01", "name": "millionairess"}, + {"id": 16377, "synset": "millwright.n.01", "name": "millwright"}, + {"id": 16378, "synset": "minder.n.01", "name": "minder"}, + {"id": 16379, "synset": "mining_engineer.n.01", "name": "mining_engineer"}, + {"id": 16380, "synset": "minister.n.02", "name": "minister"}, + {"id": 16381, "synset": "ministrant.n.01", "name": "ministrant"}, + {"id": 16382, "synset": "minor_leaguer.n.01", "name": "minor_leaguer"}, + {"id": 16383, "synset": "minuteman.n.01", "name": "Minuteman"}, + {"id": 16384, "synset": "misanthrope.n.01", "name": "misanthrope"}, + {"id": 16385, "synset": "misfit.n.01", "name": "misfit"}, + {"id": 16386, "synset": "mistress.n.03", "name": "mistress"}, + {"id": 16387, "synset": "mistress.n.01", "name": "mistress"}, + {"id": 16388, "synset": "mixed-blood.n.01", "name": "mixed-blood"}, + {"id": 16389, "synset": "model.n.03", "name": "model"}, + {"id": 16390, "synset": "class_act.n.01", "name": "class_act"}, + {"id": 16391, "synset": "modeler.n.01", "name": "modeler"}, + {"id": 16392, "synset": "modifier.n.02", "name": "modifier"}, + {"id": 16393, "synset": "molecular_biologist.n.01", "name": "molecular_biologist"}, + {"id": 16394, "synset": "monegasque.n.01", "name": "Monegasque"}, + {"id": 16395, "synset": "monetarist.n.01", "name": "monetarist"}, + {"id": 16396, "synset": "moneygrubber.n.01", "name": "moneygrubber"}, + {"id": 16397, "synset": "moneymaker.n.01", "name": "moneymaker"}, + {"id": 16398, "synset": "mongoloid.n.01", "name": "Mongoloid"}, + {"id": 16399, "synset": "monolingual.n.01", "name": "monolingual"}, + {"id": 16400, "synset": "monologist.n.01", "name": "monologist"}, + {"id": 16401, "synset": "moonlighter.n.01", "name": "moonlighter"}, + {"id": 16402, "synset": "moralist.n.01", "name": "moralist"}, + {"id": 16403, "synset": "morosoph.n.01", "name": "morosoph"}, + {"id": 16404, "synset": "morris_dancer.n.01", "name": "morris_dancer"}, + {"id": 16405, "synset": "mortal_enemy.n.01", "name": "mortal_enemy"}, + {"id": 16406, "synset": "mortgagee.n.01", "name": "mortgagee"}, + {"id": 16407, "synset": "mortician.n.01", "name": "mortician"}, + {"id": 16408, "synset": "moss-trooper.n.01", "name": "moss-trooper"}, + {"id": 16409, "synset": "mother.n.01", "name": "mother"}, + {"id": 16410, "synset": "mother.n.04", "name": "mother"}, + {"id": 16411, "synset": "mother.n.03", "name": "mother"}, + {"id": 16412, "synset": "mother_figure.n.01", "name": "mother_figure"}, + {"id": 16413, "synset": "mother_hen.n.01", "name": "mother_hen"}, + {"id": 16414, "synset": "mother-in-law.n.01", "name": "mother-in-law"}, + {"id": 16415, "synset": "mother's_boy.n.01", "name": "mother's_boy"}, + {"id": 16416, "synset": "mother's_daughter.n.01", "name": "mother's_daughter"}, + {"id": 16417, "synset": "motorcycle_cop.n.01", "name": "motorcycle_cop"}, + {"id": 16418, "synset": "motorcyclist.n.01", "name": "motorcyclist"}, + {"id": 16419, "synset": "mound_builder.n.01", "name": "Mound_Builder"}, + {"id": 16420, "synset": "mountebank.n.01", "name": "mountebank"}, + {"id": 16421, "synset": "mourner.n.01", "name": "mourner"}, + {"id": 16422, "synset": "mouthpiece.n.03", "name": "mouthpiece"}, + {"id": 16423, "synset": "mover.n.03", "name": "mover"}, + {"id": 16424, "synset": "moviegoer.n.01", "name": "moviegoer"}, + {"id": 16425, "synset": "muffin_man.n.01", "name": "muffin_man"}, + {"id": 16426, "synset": "mugwump.n.02", "name": "mugwump"}, + {"id": 16427, "synset": "mullah.n.01", "name": "Mullah"}, + {"id": 16428, "synset": "muncher.n.01", "name": "muncher"}, + {"id": 16429, "synset": "murderess.n.01", "name": "murderess"}, + {"id": 16430, "synset": "murder_suspect.n.01", "name": "murder_suspect"}, + {"id": 16431, "synset": "musher.n.01", "name": "musher"}, + {"id": 16432, "synset": "musician.n.01", "name": "musician"}, + {"id": 16433, "synset": "musicologist.n.01", "name": "musicologist"}, + {"id": 16434, "synset": "music_teacher.n.01", "name": "music_teacher"}, + {"id": 16435, "synset": "musketeer.n.01", "name": "musketeer"}, + {"id": 16436, "synset": "muslimah.n.01", "name": "Muslimah"}, + {"id": 16437, "synset": "mutilator.n.01", "name": "mutilator"}, + {"id": 16438, "synset": "mutineer.n.01", "name": "mutineer"}, + {"id": 16439, "synset": "mute.n.01", "name": "mute"}, + {"id": 16440, "synset": "mutterer.n.01", "name": "mutterer"}, + {"id": 16441, "synset": "muzzler.n.01", "name": "muzzler"}, + {"id": 16442, "synset": "mycenaen.n.01", "name": "Mycenaen"}, + {"id": 16443, "synset": "mycologist.n.01", "name": "mycologist"}, + {"id": 16444, "synset": "myope.n.01", "name": "myope"}, + {"id": 16445, "synset": "myrmidon.n.01", "name": "myrmidon"}, + {"id": 16446, "synset": "mystic.n.01", "name": "mystic"}, + {"id": 16447, "synset": "mythologist.n.01", "name": "mythologist"}, + {"id": 16448, "synset": "naif.n.01", "name": "naif"}, + {"id": 16449, "synset": "nailer.n.01", "name": "nailer"}, + {"id": 16450, "synset": "namby-pamby.n.01", "name": "namby-pamby"}, + {"id": 16451, "synset": "name_dropper.n.01", "name": "name_dropper"}, + {"id": 16452, "synset": "namer.n.01", "name": "namer"}, + {"id": 16453, "synset": "nan.n.01", "name": "nan"}, + {"id": 16454, "synset": "nanny.n.01", "name": "nanny"}, + {"id": 16455, "synset": "narc.n.01", "name": "narc"}, + {"id": 16456, "synset": "narcissist.n.01", "name": "narcissist"}, + {"id": 16457, "synset": "nark.n.01", "name": "nark"}, + {"id": 16458, "synset": "nationalist.n.02", "name": "nationalist"}, + {"id": 16459, "synset": "nautch_girl.n.01", "name": "nautch_girl"}, + {"id": 16460, "synset": "naval_commander.n.01", "name": "naval_commander"}, + {"id": 16461, "synset": "navy_seal.n.01", "name": "Navy_SEAL"}, + {"id": 16462, "synset": "obstructionist.n.01", "name": "obstructionist"}, + {"id": 16463, "synset": "nazarene.n.02", "name": "Nazarene"}, + {"id": 16464, "synset": "nazarene.n.01", "name": "Nazarene"}, + {"id": 16465, "synset": "nazi.n.01", "name": "Nazi"}, + {"id": 16466, "synset": "nebbish.n.01", "name": "nebbish"}, + {"id": 16467, "synset": "necker.n.01", "name": "necker"}, + {"id": 16468, "synset": "neonate.n.01", "name": "neonate"}, + {"id": 16469, "synset": "nephew.n.01", "name": "nephew"}, + {"id": 16470, "synset": "neurobiologist.n.01", "name": "neurobiologist"}, + {"id": 16471, "synset": "neurologist.n.01", "name": "neurologist"}, + {"id": 16472, "synset": "neurosurgeon.n.01", "name": "neurosurgeon"}, + {"id": 16473, "synset": "neutral.n.01", "name": "neutral"}, + {"id": 16474, "synset": "neutralist.n.01", "name": "neutralist"}, + {"id": 16475, "synset": "newcomer.n.01", "name": "newcomer"}, + {"id": 16476, "synset": "newcomer.n.02", "name": "newcomer"}, + {"id": 16477, "synset": "new_dealer.n.01", "name": "New_Dealer"}, + {"id": 16478, "synset": "newspaper_editor.n.01", "name": "newspaper_editor"}, + {"id": 16479, "synset": "newsreader.n.01", "name": "newsreader"}, + {"id": 16480, "synset": "newtonian.n.01", "name": "Newtonian"}, + {"id": 16481, "synset": "niece.n.01", "name": "niece"}, + {"id": 16482, "synset": "niggard.n.01", "name": "niggard"}, + {"id": 16483, "synset": "night_porter.n.01", "name": "night_porter"}, + {"id": 16484, "synset": "night_rider.n.01", "name": "night_rider"}, + {"id": 16485, "synset": "nimby.n.01", "name": "NIMBY"}, + {"id": 16486, "synset": "niqaabi.n.01", "name": "niqaabi"}, + {"id": 16487, "synset": "nitpicker.n.01", "name": "nitpicker"}, + {"id": 16488, "synset": "nobelist.n.01", "name": "Nobelist"}, + {"id": 16489, "synset": "noc.n.01", "name": "NOC"}, + {"id": 16490, "synset": "noncandidate.n.01", "name": "noncandidate"}, + { + "id": 16491, + "synset": "noncommissioned_officer.n.01", + "name": "noncommissioned_officer", + }, + {"id": 16492, "synset": "nondescript.n.01", "name": "nondescript"}, + {"id": 16493, "synset": "nondriver.n.01", "name": "nondriver"}, + {"id": 16494, "synset": "nonparticipant.n.01", "name": "nonparticipant"}, + {"id": 16495, "synset": "nonperson.n.01", "name": "nonperson"}, + {"id": 16496, "synset": "nonresident.n.01", "name": "nonresident"}, + {"id": 16497, "synset": "nonsmoker.n.01", "name": "nonsmoker"}, + {"id": 16498, "synset": "northern_baptist.n.01", "name": "Northern_Baptist"}, + {"id": 16499, "synset": "noticer.n.01", "name": "noticer"}, + {"id": 16500, "synset": "novelist.n.01", "name": "novelist"}, + {"id": 16501, "synset": "novitiate.n.02", "name": "novitiate"}, + {"id": 16502, "synset": "nuclear_chemist.n.01", "name": "nuclear_chemist"}, + {"id": 16503, "synset": "nudger.n.01", "name": "nudger"}, + {"id": 16504, "synset": "nullipara.n.01", "name": "nullipara"}, + {"id": 16505, "synset": "number_theorist.n.01", "name": "number_theorist"}, + {"id": 16506, "synset": "nurse.n.01", "name": "nurse"}, + {"id": 16507, "synset": "nursling.n.01", "name": "nursling"}, + {"id": 16508, "synset": "nymph.n.03", "name": "nymph"}, + {"id": 16509, "synset": "nymphet.n.01", "name": "nymphet"}, + {"id": 16510, "synset": "nympholept.n.01", "name": "nympholept"}, + {"id": 16511, "synset": "nymphomaniac.n.01", "name": "nymphomaniac"}, + {"id": 16512, "synset": "oarswoman.n.01", "name": "oarswoman"}, + {"id": 16513, "synset": "oboist.n.01", "name": "oboist"}, + {"id": 16514, "synset": "obscurantist.n.01", "name": "obscurantist"}, + {"id": 16515, "synset": "observer.n.02", "name": "observer"}, + {"id": 16516, "synset": "obstetrician.n.01", "name": "obstetrician"}, + {"id": 16517, "synset": "occupier.n.02", "name": "occupier"}, + {"id": 16518, "synset": "occultist.n.01", "name": "occultist"}, + {"id": 16519, "synset": "wine_lover.n.01", "name": "wine_lover"}, + {"id": 16520, "synset": "offerer.n.01", "name": "offerer"}, + {"id": 16521, "synset": "office-bearer.n.01", "name": "office-bearer"}, + {"id": 16522, "synset": "office_boy.n.01", "name": "office_boy"}, + {"id": 16523, "synset": "officeholder.n.01", "name": "officeholder"}, + {"id": 16524, "synset": "officiant.n.01", "name": "officiant"}, + {"id": 16525, "synset": "federal.n.02", "name": "Federal"}, + {"id": 16526, "synset": "oilman.n.02", "name": "oilman"}, + {"id": 16527, "synset": "oil_tycoon.n.01", "name": "oil_tycoon"}, + {"id": 16528, "synset": "old-age_pensioner.n.01", "name": "old-age_pensioner"}, + {"id": 16529, "synset": "old_boy.n.02", "name": "old_boy"}, + {"id": 16530, "synset": "old_lady.n.01", "name": "old_lady"}, + {"id": 16531, "synset": "old_man.n.03", "name": "old_man"}, + {"id": 16532, "synset": "oldster.n.01", "name": "oldster"}, + {"id": 16533, "synset": "old-timer.n.02", "name": "old-timer"}, + {"id": 16534, "synset": "old_woman.n.01", "name": "old_woman"}, + {"id": 16535, "synset": "oligarch.n.01", "name": "oligarch"}, + {"id": 16536, "synset": "olympian.n.01", "name": "Olympian"}, + {"id": 16537, "synset": "omnivore.n.01", "name": "omnivore"}, + {"id": 16538, "synset": "oncologist.n.01", "name": "oncologist"}, + {"id": 16539, "synset": "onlooker.n.01", "name": "onlooker"}, + {"id": 16540, "synset": "onomancer.n.01", "name": "onomancer"}, + {"id": 16541, "synset": "operator.n.03", "name": "operator"}, + {"id": 16542, "synset": "opportunist.n.01", "name": "opportunist"}, + {"id": 16543, "synset": "optimist.n.01", "name": "optimist"}, + {"id": 16544, "synset": "orangeman.n.01", "name": "Orangeman"}, + {"id": 16545, "synset": "orator.n.01", "name": "orator"}, + {"id": 16546, "synset": "orderly.n.02", "name": "orderly"}, + {"id": 16547, "synset": "orderly.n.01", "name": "orderly"}, + {"id": 16548, "synset": "orderly_sergeant.n.01", "name": "orderly_sergeant"}, + {"id": 16549, "synset": "ordinand.n.01", "name": "ordinand"}, + {"id": 16550, "synset": "ordinary.n.03", "name": "ordinary"}, + {"id": 16551, "synset": "organ-grinder.n.01", "name": "organ-grinder"}, + {"id": 16552, "synset": "organist.n.01", "name": "organist"}, + {"id": 16553, "synset": "organization_man.n.01", "name": "organization_man"}, + {"id": 16554, "synset": "organizer.n.01", "name": "organizer"}, + {"id": 16555, "synset": "organizer.n.02", "name": "organizer"}, + {"id": 16556, "synset": "originator.n.01", "name": "originator"}, + {"id": 16557, "synset": "ornithologist.n.01", "name": "ornithologist"}, + {"id": 16558, "synset": "orphan.n.01", "name": "orphan"}, + {"id": 16559, "synset": "orphan.n.02", "name": "orphan"}, + {"id": 16560, "synset": "osteopath.n.01", "name": "osteopath"}, + {"id": 16561, "synset": "out-and-outer.n.01", "name": "out-and-outer"}, + {"id": 16562, "synset": "outdoorswoman.n.01", "name": "outdoorswoman"}, + {"id": 16563, "synset": "outfielder.n.02", "name": "outfielder"}, + {"id": 16564, "synset": "outfielder.n.01", "name": "outfielder"}, + {"id": 16565, "synset": "right_fielder.n.01", "name": "right_fielder"}, + { + "id": 16566, + "synset": "right-handed_pitcher.n.01", + "name": "right-handed_pitcher", + }, + {"id": 16567, "synset": "outlier.n.01", "name": "outlier"}, + {"id": 16568, "synset": "owner-occupier.n.01", "name": "owner-occupier"}, + {"id": 16569, "synset": "oyabun.n.01", "name": "oyabun"}, + {"id": 16570, "synset": "packrat.n.01", "name": "packrat"}, + {"id": 16571, "synset": "padrone.n.02", "name": "padrone"}, + {"id": 16572, "synset": "padrone.n.01", "name": "padrone"}, + {"id": 16573, "synset": "page.n.04", "name": "page"}, + {"id": 16574, "synset": "painter.n.02", "name": "painter"}, + {"id": 16575, "synset": "paleo-american.n.01", "name": "Paleo-American"}, + {"id": 16576, "synset": "paleontologist.n.01", "name": "paleontologist"}, + {"id": 16577, "synset": "pallbearer.n.01", "name": "pallbearer"}, + {"id": 16578, "synset": "palmist.n.01", "name": "palmist"}, + {"id": 16579, "synset": "pamperer.n.01", "name": "pamperer"}, + {"id": 16580, "synset": "panchen_lama.n.01", "name": "Panchen_Lama"}, + {"id": 16581, "synset": "panelist.n.01", "name": "panelist"}, + {"id": 16582, "synset": "panhandler.n.01", "name": "panhandler"}, + {"id": 16583, "synset": "paparazzo.n.01", "name": "paparazzo"}, + {"id": 16584, "synset": "paperboy.n.01", "name": "paperboy"}, + {"id": 16585, "synset": "paperhanger.n.02", "name": "paperhanger"}, + {"id": 16586, "synset": "paperhanger.n.01", "name": "paperhanger"}, + {"id": 16587, "synset": "papoose.n.01", "name": "papoose"}, + {"id": 16588, "synset": "pardoner.n.02", "name": "pardoner"}, + {"id": 16589, "synset": "paretic.n.01", "name": "paretic"}, + {"id": 16590, "synset": "parishioner.n.01", "name": "parishioner"}, + {"id": 16591, "synset": "park_commissioner.n.01", "name": "park_commissioner"}, + {"id": 16592, "synset": "parliamentarian.n.01", "name": "Parliamentarian"}, + {"id": 16593, "synset": "parliamentary_agent.n.01", "name": "parliamentary_agent"}, + {"id": 16594, "synset": "parodist.n.01", "name": "parodist"}, + {"id": 16595, "synset": "parricide.n.01", "name": "parricide"}, + {"id": 16596, "synset": "parrot.n.02", "name": "parrot"}, + {"id": 16597, "synset": "partaker.n.01", "name": "partaker"}, + {"id": 16598, "synset": "part-timer.n.01", "name": "part-timer"}, + {"id": 16599, "synset": "party.n.05", "name": "party"}, + {"id": 16600, "synset": "party_man.n.01", "name": "party_man"}, + {"id": 16601, "synset": "passenger.n.01", "name": "passenger"}, + {"id": 16602, "synset": "passer.n.03", "name": "passer"}, + {"id": 16603, "synset": "paster.n.01", "name": "paster"}, + {"id": 16604, "synset": "pater.n.01", "name": "pater"}, + {"id": 16605, "synset": "patient.n.01", "name": "patient"}, + {"id": 16606, "synset": "patriarch.n.04", "name": "patriarch"}, + {"id": 16607, "synset": "patriarch.n.03", "name": "patriarch"}, + {"id": 16608, "synset": "patriarch.n.02", "name": "patriarch"}, + {"id": 16609, "synset": "patriot.n.01", "name": "patriot"}, + {"id": 16610, "synset": "patron.n.03", "name": "patron"}, + {"id": 16611, "synset": "patternmaker.n.01", "name": "patternmaker"}, + {"id": 16612, "synset": "pawnbroker.n.01", "name": "pawnbroker"}, + {"id": 16613, "synset": "payer.n.01", "name": "payer"}, + {"id": 16614, "synset": "peacekeeper.n.01", "name": "peacekeeper"}, + {"id": 16615, "synset": "peasant.n.02", "name": "peasant"}, + {"id": 16616, "synset": "pedant.n.01", "name": "pedant"}, + {"id": 16617, "synset": "peddler.n.01", "name": "peddler"}, + {"id": 16618, "synset": "pederast.n.01", "name": "pederast"}, + {"id": 16619, "synset": "penologist.n.01", "name": "penologist"}, + {"id": 16620, "synset": "pentathlete.n.01", "name": "pentathlete"}, + {"id": 16621, "synset": "pentecostal.n.01", "name": "Pentecostal"}, + {"id": 16622, "synset": "percussionist.n.01", "name": "percussionist"}, + {"id": 16623, "synset": "periodontist.n.01", "name": "periodontist"}, + {"id": 16624, "synset": "peshmerga.n.01", "name": "peshmerga"}, + {"id": 16625, "synset": "personality.n.02", "name": "personality"}, + { + "id": 16626, + "synset": "personal_representative.n.01", + "name": "personal_representative", + }, + {"id": 16627, "synset": "personage.n.01", "name": "personage"}, + {"id": 16628, "synset": "persona_grata.n.01", "name": "persona_grata"}, + {"id": 16629, "synset": "persona_non_grata.n.01", "name": "persona_non_grata"}, + {"id": 16630, "synset": "personification.n.01", "name": "personification"}, + {"id": 16631, "synset": "perspirer.n.01", "name": "perspirer"}, + {"id": 16632, "synset": "pervert.n.01", "name": "pervert"}, + {"id": 16633, "synset": "pessimist.n.01", "name": "pessimist"}, + {"id": 16634, "synset": "pest.n.03", "name": "pest"}, + {"id": 16635, "synset": "peter_pan.n.01", "name": "Peter_Pan"}, + {"id": 16636, "synset": "petitioner.n.01", "name": "petitioner"}, + {"id": 16637, "synset": "petit_juror.n.01", "name": "petit_juror"}, + {"id": 16638, "synset": "pet_sitter.n.01", "name": "pet_sitter"}, + {"id": 16639, "synset": "petter.n.01", "name": "petter"}, + {"id": 16640, "synset": "pharaoh.n.01", "name": "Pharaoh"}, + {"id": 16641, "synset": "pharmacist.n.01", "name": "pharmacist"}, + {"id": 16642, "synset": "philanthropist.n.01", "name": "philanthropist"}, + {"id": 16643, "synset": "philatelist.n.01", "name": "philatelist"}, + {"id": 16644, "synset": "philosopher.n.02", "name": "philosopher"}, + {"id": 16645, "synset": "phonetician.n.01", "name": "phonetician"}, + {"id": 16646, "synset": "phonologist.n.01", "name": "phonologist"}, + {"id": 16647, "synset": "photojournalist.n.01", "name": "photojournalist"}, + {"id": 16648, "synset": "photometrist.n.01", "name": "photometrist"}, + {"id": 16649, "synset": "physical_therapist.n.01", "name": "physical_therapist"}, + {"id": 16650, "synset": "physicist.n.01", "name": "physicist"}, + {"id": 16651, "synset": "piano_maker.n.01", "name": "piano_maker"}, + {"id": 16652, "synset": "picker.n.01", "name": "picker"}, + {"id": 16653, "synset": "picnicker.n.01", "name": "picnicker"}, + {"id": 16654, "synset": "pilgrim.n.01", "name": "pilgrim"}, + {"id": 16655, "synset": "pill.n.03", "name": "pill"}, + {"id": 16656, "synset": "pillar.n.03", "name": "pillar"}, + {"id": 16657, "synset": "pill_head.n.01", "name": "pill_head"}, + {"id": 16658, "synset": "pilot.n.02", "name": "pilot"}, + {"id": 16659, "synset": "piltdown_man.n.01", "name": "Piltdown_man"}, + {"id": 16660, "synset": "pimp.n.01", "name": "pimp"}, + {"id": 16661, "synset": "pipe_smoker.n.01", "name": "pipe_smoker"}, + {"id": 16662, "synset": "pip-squeak.n.01", "name": "pip-squeak"}, + {"id": 16663, "synset": "pisser.n.01", "name": "pisser"}, + {"id": 16664, "synset": "pitcher.n.01", "name": "pitcher"}, + {"id": 16665, "synset": "pitchman.n.01", "name": "pitchman"}, + {"id": 16666, "synset": "placeman.n.01", "name": "placeman"}, + {"id": 16667, "synset": "placer_miner.n.01", "name": "placer_miner"}, + {"id": 16668, "synset": "plagiarist.n.01", "name": "plagiarist"}, + {"id": 16669, "synset": "plainsman.n.01", "name": "plainsman"}, + {"id": 16670, "synset": "planner.n.01", "name": "planner"}, + {"id": 16671, "synset": "planter.n.01", "name": "planter"}, + {"id": 16672, "synset": "plasterer.n.01", "name": "plasterer"}, + {"id": 16673, "synset": "platinum_blond.n.01", "name": "platinum_blond"}, + {"id": 16674, "synset": "platitudinarian.n.01", "name": "platitudinarian"}, + {"id": 16675, "synset": "playboy.n.01", "name": "playboy"}, + {"id": 16676, "synset": "player.n.01", "name": "player"}, + {"id": 16677, "synset": "playmate.n.01", "name": "playmate"}, + {"id": 16678, "synset": "pleaser.n.01", "name": "pleaser"}, + {"id": 16679, "synset": "pledger.n.01", "name": "pledger"}, + {"id": 16680, "synset": "plenipotentiary.n.01", "name": "plenipotentiary"}, + {"id": 16681, "synset": "plier.n.01", "name": "plier"}, + {"id": 16682, "synset": "plodder.n.03", "name": "plodder"}, + {"id": 16683, "synset": "plodder.n.02", "name": "plodder"}, + {"id": 16684, "synset": "plotter.n.02", "name": "plotter"}, + {"id": 16685, "synset": "plumber.n.01", "name": "plumber"}, + {"id": 16686, "synset": "pluralist.n.02", "name": "pluralist"}, + {"id": 16687, "synset": "pluralist.n.01", "name": "pluralist"}, + {"id": 16688, "synset": "poet.n.01", "name": "poet"}, + {"id": 16689, "synset": "pointsman.n.01", "name": "pointsman"}, + {"id": 16690, "synset": "point_woman.n.01", "name": "point_woman"}, + {"id": 16691, "synset": "policyholder.n.01", "name": "policyholder"}, + {"id": 16692, "synset": "political_prisoner.n.01", "name": "political_prisoner"}, + {"id": 16693, "synset": "political_scientist.n.01", "name": "political_scientist"}, + {"id": 16694, "synset": "politician.n.02", "name": "politician"}, + {"id": 16695, "synset": "politician.n.03", "name": "politician"}, + {"id": 16696, "synset": "pollster.n.01", "name": "pollster"}, + {"id": 16697, "synset": "polluter.n.01", "name": "polluter"}, + {"id": 16698, "synset": "pool_player.n.01", "name": "pool_player"}, + {"id": 16699, "synset": "portraitist.n.01", "name": "portraitist"}, + {"id": 16700, "synset": "poseuse.n.01", "name": "poseuse"}, + {"id": 16701, "synset": "positivist.n.01", "name": "positivist"}, + {"id": 16702, "synset": "postdoc.n.02", "name": "postdoc"}, + {"id": 16703, "synset": "poster_girl.n.01", "name": "poster_girl"}, + {"id": 16704, "synset": "postulator.n.02", "name": "postulator"}, + {"id": 16705, "synset": "private_citizen.n.01", "name": "private_citizen"}, + {"id": 16706, "synset": "problem_solver.n.01", "name": "problem_solver"}, + {"id": 16707, "synset": "pro-lifer.n.01", "name": "pro-lifer"}, + {"id": 16708, "synset": "prosthetist.n.01", "name": "prosthetist"}, + {"id": 16709, "synset": "postulant.n.01", "name": "postulant"}, + {"id": 16710, "synset": "potboy.n.01", "name": "potboy"}, + {"id": 16711, "synset": "poultryman.n.01", "name": "poultryman"}, + {"id": 16712, "synset": "power_user.n.01", "name": "power_user"}, + {"id": 16713, "synset": "power_worker.n.01", "name": "power_worker"}, + {"id": 16714, "synset": "practitioner.n.01", "name": "practitioner"}, + {"id": 16715, "synset": "prayer.n.05", "name": "prayer"}, + {"id": 16716, "synset": "preceptor.n.01", "name": "preceptor"}, + {"id": 16717, "synset": "predecessor.n.01", "name": "predecessor"}, + {"id": 16718, "synset": "preemptor.n.02", "name": "preemptor"}, + {"id": 16719, "synset": "preemptor.n.01", "name": "preemptor"}, + {"id": 16720, "synset": "premature_baby.n.01", "name": "premature_baby"}, + {"id": 16721, "synset": "presbyter.n.01", "name": "presbyter"}, + {"id": 16722, "synset": "presenter.n.02", "name": "presenter"}, + {"id": 16723, "synset": "presentist.n.01", "name": "presentist"}, + {"id": 16724, "synset": "preserver.n.03", "name": "preserver"}, + {"id": 16725, "synset": "president.n.03", "name": "president"}, + { + "id": 16726, + "synset": "president_of_the_united_states.n.01", + "name": "President_of_the_United_States", + }, + {"id": 16727, "synset": "president.n.05", "name": "president"}, + {"id": 16728, "synset": "press_agent.n.01", "name": "press_agent"}, + {"id": 16729, "synset": "press_photographer.n.01", "name": "press_photographer"}, + {"id": 16730, "synset": "priest.n.01", "name": "priest"}, + {"id": 16731, "synset": "prima_ballerina.n.01", "name": "prima_ballerina"}, + {"id": 16732, "synset": "prima_donna.n.02", "name": "prima_donna"}, + {"id": 16733, "synset": "prima_donna.n.01", "name": "prima_donna"}, + {"id": 16734, "synset": "primigravida.n.01", "name": "primigravida"}, + {"id": 16735, "synset": "primordial_dwarf.n.01", "name": "primordial_dwarf"}, + {"id": 16736, "synset": "prince_charming.n.01", "name": "prince_charming"}, + {"id": 16737, "synset": "prince_consort.n.01", "name": "prince_consort"}, + {"id": 16738, "synset": "princeling.n.01", "name": "princeling"}, + {"id": 16739, "synset": "prince_of_wales.n.01", "name": "Prince_of_Wales"}, + {"id": 16740, "synset": "princess.n.01", "name": "princess"}, + {"id": 16741, "synset": "princess_royal.n.01", "name": "princess_royal"}, + {"id": 16742, "synset": "principal.n.06", "name": "principal"}, + {"id": 16743, "synset": "principal.n.02", "name": "principal"}, + {"id": 16744, "synset": "print_seller.n.01", "name": "print_seller"}, + {"id": 16745, "synset": "prior.n.01", "name": "prior"}, + {"id": 16746, "synset": "private.n.01", "name": "private"}, + {"id": 16747, "synset": "probationer.n.01", "name": "probationer"}, + {"id": 16748, "synset": "processor.n.02", "name": "processor"}, + {"id": 16749, "synset": "process-server.n.01", "name": "process-server"}, + {"id": 16750, "synset": "proconsul.n.02", "name": "proconsul"}, + {"id": 16751, "synset": "proconsul.n.01", "name": "proconsul"}, + {"id": 16752, "synset": "proctologist.n.01", "name": "proctologist"}, + {"id": 16753, "synset": "proctor.n.01", "name": "proctor"}, + {"id": 16754, "synset": "procurator.n.02", "name": "procurator"}, + {"id": 16755, "synset": "procurer.n.02", "name": "procurer"}, + {"id": 16756, "synset": "profit_taker.n.01", "name": "profit_taker"}, + {"id": 16757, "synset": "programmer.n.01", "name": "programmer"}, + {"id": 16758, "synset": "promiser.n.01", "name": "promiser"}, + {"id": 16759, "synset": "promoter.n.01", "name": "promoter"}, + {"id": 16760, "synset": "promulgator.n.01", "name": "promulgator"}, + {"id": 16761, "synset": "propagandist.n.01", "name": "propagandist"}, + {"id": 16762, "synset": "propagator.n.02", "name": "propagator"}, + {"id": 16763, "synset": "property_man.n.01", "name": "property_man"}, + {"id": 16764, "synset": "prophetess.n.01", "name": "prophetess"}, + {"id": 16765, "synset": "prophet.n.02", "name": "prophet"}, + {"id": 16766, "synset": "prosecutor.n.01", "name": "prosecutor"}, + {"id": 16767, "synset": "prospector.n.01", "name": "prospector"}, + {"id": 16768, "synset": "protectionist.n.01", "name": "protectionist"}, + {"id": 16769, "synset": "protegee.n.01", "name": "protegee"}, + {"id": 16770, "synset": "protozoologist.n.01", "name": "protozoologist"}, + {"id": 16771, "synset": "provost_marshal.n.01", "name": "provost_marshal"}, + {"id": 16772, "synset": "pruner.n.01", "name": "pruner"}, + {"id": 16773, "synset": "psalmist.n.01", "name": "psalmist"}, + {"id": 16774, "synset": "psephologist.n.01", "name": "psephologist"}, + {"id": 16775, "synset": "psychiatrist.n.01", "name": "psychiatrist"}, + {"id": 16776, "synset": "psychic.n.01", "name": "psychic"}, + {"id": 16777, "synset": "psycholinguist.n.01", "name": "psycholinguist"}, + {"id": 16778, "synset": "psychophysicist.n.01", "name": "psychophysicist"}, + {"id": 16779, "synset": "publican.n.01", "name": "publican"}, + {"id": 16780, "synset": "pudge.n.01", "name": "pudge"}, + {"id": 16781, "synset": "puerpera.n.01", "name": "puerpera"}, + {"id": 16782, "synset": "punching_bag.n.01", "name": "punching_bag"}, + {"id": 16783, "synset": "punter.n.02", "name": "punter"}, + {"id": 16784, "synset": "punter.n.01", "name": "punter"}, + {"id": 16785, "synset": "puppeteer.n.01", "name": "puppeteer"}, + {"id": 16786, "synset": "puppy.n.02", "name": "puppy"}, + {"id": 16787, "synset": "purchasing_agent.n.01", "name": "purchasing_agent"}, + {"id": 16788, "synset": "puritan.n.02", "name": "puritan"}, + {"id": 16789, "synset": "puritan.n.01", "name": "Puritan"}, + {"id": 16790, "synset": "pursuer.n.02", "name": "pursuer"}, + {"id": 16791, "synset": "pusher.n.03", "name": "pusher"}, + {"id": 16792, "synset": "pusher.n.02", "name": "pusher"}, + {"id": 16793, "synset": "pusher.n.01", "name": "pusher"}, + {"id": 16794, "synset": "putz.n.01", "name": "putz"}, + {"id": 16795, "synset": "pygmy.n.02", "name": "Pygmy"}, + {"id": 16796, "synset": "qadi.n.01", "name": "qadi"}, + {"id": 16797, "synset": "quadriplegic.n.01", "name": "quadriplegic"}, + {"id": 16798, "synset": "quadruplet.n.02", "name": "quadruplet"}, + {"id": 16799, "synset": "quaker.n.02", "name": "quaker"}, + {"id": 16800, "synset": "quarter.n.11", "name": "quarter"}, + {"id": 16801, "synset": "quarterback.n.01", "name": "quarterback"}, + {"id": 16802, "synset": "quartermaster.n.01", "name": "quartermaster"}, + { + "id": 16803, + "synset": "quartermaster_general.n.01", + "name": "quartermaster_general", + }, + {"id": 16804, "synset": "quebecois.n.01", "name": "Quebecois"}, + {"id": 16805, "synset": "queen.n.02", "name": "queen"}, + {"id": 16806, "synset": "queen_of_england.n.01", "name": "Queen_of_England"}, + {"id": 16807, "synset": "queen.n.03", "name": "queen"}, + {"id": 16808, "synset": "queen.n.04", "name": "queen"}, + {"id": 16809, "synset": "queen_consort.n.01", "name": "queen_consort"}, + {"id": 16810, "synset": "queen_mother.n.01", "name": "queen_mother"}, + {"id": 16811, "synset": "queen's_counsel.n.01", "name": "Queen's_Counsel"}, + {"id": 16812, "synset": "question_master.n.01", "name": "question_master"}, + {"id": 16813, "synset": "quick_study.n.01", "name": "quick_study"}, + {"id": 16814, "synset": "quietist.n.01", "name": "quietist"}, + {"id": 16815, "synset": "quitter.n.01", "name": "quitter"}, + {"id": 16816, "synset": "rabbi.n.01", "name": "rabbi"}, + {"id": 16817, "synset": "racist.n.01", "name": "racist"}, + {"id": 16818, "synset": "radiobiologist.n.01", "name": "radiobiologist"}, + { + "id": 16819, + "synset": "radiologic_technologist.n.01", + "name": "radiologic_technologist", + }, + {"id": 16820, "synset": "radiologist.n.01", "name": "radiologist"}, + {"id": 16821, "synset": "rainmaker.n.02", "name": "rainmaker"}, + {"id": 16822, "synset": "raiser.n.01", "name": "raiser"}, + {"id": 16823, "synset": "raja.n.01", "name": "raja"}, + {"id": 16824, "synset": "rake.n.01", "name": "rake"}, + {"id": 16825, "synset": "ramrod.n.02", "name": "ramrod"}, + {"id": 16826, "synset": "ranch_hand.n.01", "name": "ranch_hand"}, + {"id": 16827, "synset": "ranker.n.01", "name": "ranker"}, + {"id": 16828, "synset": "ranter.n.01", "name": "ranter"}, + {"id": 16829, "synset": "rape_suspect.n.01", "name": "rape_suspect"}, + {"id": 16830, "synset": "rapper.n.01", "name": "rapper"}, + {"id": 16831, "synset": "rapporteur.n.01", "name": "rapporteur"}, + {"id": 16832, "synset": "rare_bird.n.01", "name": "rare_bird"}, + {"id": 16833, "synset": "ratepayer.n.01", "name": "ratepayer"}, + {"id": 16834, "synset": "raw_recruit.n.01", "name": "raw_recruit"}, + {"id": 16835, "synset": "reader.n.01", "name": "reader"}, + {"id": 16836, "synset": "reading_teacher.n.01", "name": "reading_teacher"}, + {"id": 16837, "synset": "realist.n.01", "name": "realist"}, + {"id": 16838, "synset": "real_estate_broker.n.01", "name": "real_estate_broker"}, + {"id": 16839, "synset": "rear_admiral.n.01", "name": "rear_admiral"}, + {"id": 16840, "synset": "receiver.n.05", "name": "receiver"}, + {"id": 16841, "synset": "reciter.n.01", "name": "reciter"}, + {"id": 16842, "synset": "recruit.n.02", "name": "recruit"}, + {"id": 16843, "synset": "recruit.n.01", "name": "recruit"}, + {"id": 16844, "synset": "recruiter.n.01", "name": "recruiter"}, + {"id": 16845, "synset": "recruiting-sergeant.n.01", "name": "recruiting-sergeant"}, + {"id": 16846, "synset": "redcap.n.01", "name": "redcap"}, + {"id": 16847, "synset": "redhead.n.01", "name": "redhead"}, + {"id": 16848, "synset": "redneck.n.01", "name": "redneck"}, + {"id": 16849, "synset": "reeler.n.02", "name": "reeler"}, + {"id": 16850, "synset": "reenactor.n.01", "name": "reenactor"}, + {"id": 16851, "synset": "referral.n.01", "name": "referral"}, + {"id": 16852, "synset": "referee.n.01", "name": "referee"}, + {"id": 16853, "synset": "refiner.n.01", "name": "refiner"}, + {"id": 16854, "synset": "reform_jew.n.01", "name": "Reform_Jew"}, + {"id": 16855, "synset": "registered_nurse.n.01", "name": "registered_nurse"}, + {"id": 16856, "synset": "registrar.n.01", "name": "registrar"}, + {"id": 16857, "synset": "regius_professor.n.01", "name": "Regius_professor"}, + {"id": 16858, "synset": "reliever.n.02", "name": "reliever"}, + {"id": 16859, "synset": "anchorite.n.01", "name": "anchorite"}, + {"id": 16860, "synset": "religious_leader.n.01", "name": "religious_leader"}, + {"id": 16861, "synset": "remover.n.02", "name": "remover"}, + {"id": 16862, "synset": "renaissance_man.n.01", "name": "Renaissance_man"}, + {"id": 16863, "synset": "renegade.n.01", "name": "renegade"}, + {"id": 16864, "synset": "rentier.n.01", "name": "rentier"}, + {"id": 16865, "synset": "repairman.n.01", "name": "repairman"}, + {"id": 16866, "synset": "reporter.n.01", "name": "reporter"}, + {"id": 16867, "synset": "newswoman.n.01", "name": "newswoman"}, + {"id": 16868, "synset": "representative.n.01", "name": "representative"}, + {"id": 16869, "synset": "reprobate.n.01", "name": "reprobate"}, + {"id": 16870, "synset": "rescuer.n.02", "name": "rescuer"}, + {"id": 16871, "synset": "reservist.n.01", "name": "reservist"}, + { + "id": 16872, + "synset": "resident_commissioner.n.01", + "name": "resident_commissioner", + }, + {"id": 16873, "synset": "respecter.n.01", "name": "respecter"}, + {"id": 16874, "synset": "restaurateur.n.01", "name": "restaurateur"}, + {"id": 16875, "synset": "restrainer.n.02", "name": "restrainer"}, + {"id": 16876, "synset": "retailer.n.01", "name": "retailer"}, + {"id": 16877, "synset": "retiree.n.01", "name": "retiree"}, + {"id": 16878, "synset": "returning_officer.n.01", "name": "returning_officer"}, + {"id": 16879, "synset": "revenant.n.01", "name": "revenant"}, + {"id": 16880, "synset": "revisionist.n.01", "name": "revisionist"}, + {"id": 16881, "synset": "revolutionist.n.01", "name": "revolutionist"}, + {"id": 16882, "synset": "rheumatologist.n.01", "name": "rheumatologist"}, + {"id": 16883, "synset": "rhodesian_man.n.01", "name": "Rhodesian_man"}, + {"id": 16884, "synset": "rhymer.n.01", "name": "rhymer"}, + {"id": 16885, "synset": "rich_person.n.01", "name": "rich_person"}, + {"id": 16886, "synset": "rider.n.03", "name": "rider"}, + {"id": 16887, "synset": "riding_master.n.01", "name": "riding_master"}, + {"id": 16888, "synset": "rifleman.n.02", "name": "rifleman"}, + {"id": 16889, "synset": "right-hander.n.02", "name": "right-hander"}, + {"id": 16890, "synset": "right-hand_man.n.01", "name": "right-hand_man"}, + {"id": 16891, "synset": "ringer.n.03", "name": "ringer"}, + {"id": 16892, "synset": "ringleader.n.01", "name": "ringleader"}, + {"id": 16893, "synset": "roadman.n.02", "name": "roadman"}, + {"id": 16894, "synset": "roarer.n.01", "name": "roarer"}, + {"id": 16895, "synset": "rocket_engineer.n.01", "name": "rocket_engineer"}, + {"id": 16896, "synset": "rocket_scientist.n.01", "name": "rocket_scientist"}, + {"id": 16897, "synset": "rock_star.n.01", "name": "rock_star"}, + {"id": 16898, "synset": "romanov.n.01", "name": "Romanov"}, + {"id": 16899, "synset": "romanticist.n.02", "name": "romanticist"}, + {"id": 16900, "synset": "ropemaker.n.01", "name": "ropemaker"}, + {"id": 16901, "synset": "roper.n.02", "name": "roper"}, + {"id": 16902, "synset": "roper.n.01", "name": "roper"}, + {"id": 16903, "synset": "ropewalker.n.01", "name": "ropewalker"}, + {"id": 16904, "synset": "rosebud.n.02", "name": "rosebud"}, + {"id": 16905, "synset": "rosicrucian.n.02", "name": "Rosicrucian"}, + {"id": 16906, "synset": "mountie.n.01", "name": "Mountie"}, + {"id": 16907, "synset": "rough_rider.n.01", "name": "Rough_Rider"}, + {"id": 16908, "synset": "roundhead.n.01", "name": "roundhead"}, + {"id": 16909, "synset": "civil_authority.n.01", "name": "civil_authority"}, + {"id": 16910, "synset": "runner.n.03", "name": "runner"}, + {"id": 16911, "synset": "runner.n.02", "name": "runner"}, + {"id": 16912, "synset": "runner.n.06", "name": "runner"}, + {"id": 16913, "synset": "running_back.n.01", "name": "running_back"}, + {"id": 16914, "synset": "rusher.n.02", "name": "rusher"}, + {"id": 16915, "synset": "rustic.n.01", "name": "rustic"}, + {"id": 16916, "synset": "saboteur.n.01", "name": "saboteur"}, + {"id": 16917, "synset": "sadist.n.01", "name": "sadist"}, + {"id": 16918, "synset": "sailing_master.n.01", "name": "sailing_master"}, + {"id": 16919, "synset": "sailor.n.01", "name": "sailor"}, + {"id": 16920, "synset": "salesgirl.n.01", "name": "salesgirl"}, + {"id": 16921, "synset": "salesman.n.01", "name": "salesman"}, + {"id": 16922, "synset": "salesperson.n.01", "name": "salesperson"}, + {"id": 16923, "synset": "salvager.n.01", "name": "salvager"}, + {"id": 16924, "synset": "sandwichman.n.01", "name": "sandwichman"}, + {"id": 16925, "synset": "sangoma.n.01", "name": "sangoma"}, + {"id": 16926, "synset": "sannup.n.01", "name": "sannup"}, + {"id": 16927, "synset": "sapper.n.02", "name": "sapper"}, + {"id": 16928, "synset": "sassenach.n.01", "name": "Sassenach"}, + {"id": 16929, "synset": "satrap.n.01", "name": "satrap"}, + {"id": 16930, "synset": "saunterer.n.01", "name": "saunterer"}, + {"id": 16931, "synset": "savoyard.n.01", "name": "Savoyard"}, + {"id": 16932, "synset": "sawyer.n.01", "name": "sawyer"}, + {"id": 16933, "synset": "scalper.n.01", "name": "scalper"}, + {"id": 16934, "synset": "scandalmonger.n.01", "name": "scandalmonger"}, + {"id": 16935, "synset": "scapegrace.n.01", "name": "scapegrace"}, + {"id": 16936, "synset": "scene_painter.n.02", "name": "scene_painter"}, + {"id": 16937, "synset": "schemer.n.01", "name": "schemer"}, + {"id": 16938, "synset": "schizophrenic.n.01", "name": "schizophrenic"}, + {"id": 16939, "synset": "schlemiel.n.01", "name": "schlemiel"}, + {"id": 16940, "synset": "schlockmeister.n.01", "name": "schlockmeister"}, + {"id": 16941, "synset": "scholar.n.01", "name": "scholar"}, + {"id": 16942, "synset": "scholiast.n.01", "name": "scholiast"}, + {"id": 16943, "synset": "schoolchild.n.01", "name": "schoolchild"}, + {"id": 16944, "synset": "schoolfriend.n.01", "name": "schoolfriend"}, + {"id": 16945, "synset": "schoolman.n.01", "name": "Schoolman"}, + {"id": 16946, "synset": "schoolmaster.n.02", "name": "schoolmaster"}, + {"id": 16947, "synset": "schoolmate.n.01", "name": "schoolmate"}, + {"id": 16948, "synset": "scientist.n.01", "name": "scientist"}, + {"id": 16949, "synset": "scion.n.01", "name": "scion"}, + {"id": 16950, "synset": "scoffer.n.02", "name": "scoffer"}, + {"id": 16951, "synset": "scofflaw.n.01", "name": "scofflaw"}, + {"id": 16952, "synset": "scorekeeper.n.01", "name": "scorekeeper"}, + {"id": 16953, "synset": "scorer.n.02", "name": "scorer"}, + {"id": 16954, "synset": "scourer.n.02", "name": "scourer"}, + {"id": 16955, "synset": "scout.n.03", "name": "scout"}, + {"id": 16956, "synset": "scoutmaster.n.01", "name": "scoutmaster"}, + {"id": 16957, "synset": "scrambler.n.01", "name": "scrambler"}, + {"id": 16958, "synset": "scratcher.n.02", "name": "scratcher"}, + {"id": 16959, "synset": "screen_actor.n.01", "name": "screen_actor"}, + {"id": 16960, "synset": "scrutineer.n.01", "name": "scrutineer"}, + {"id": 16961, "synset": "scuba_diver.n.01", "name": "scuba_diver"}, + {"id": 16962, "synset": "sculptor.n.01", "name": "sculptor"}, + {"id": 16963, "synset": "sea_scout.n.01", "name": "Sea_Scout"}, + {"id": 16964, "synset": "seasonal_worker.n.01", "name": "seasonal_worker"}, + {"id": 16965, "synset": "seasoner.n.01", "name": "seasoner"}, + {"id": 16966, "synset": "second_baseman.n.01", "name": "second_baseman"}, + {"id": 16967, "synset": "second_cousin.n.01", "name": "second_cousin"}, + {"id": 16968, "synset": "seconder.n.01", "name": "seconder"}, + {"id": 16969, "synset": "second_fiddle.n.01", "name": "second_fiddle"}, + {"id": 16970, "synset": "second-in-command.n.01", "name": "second-in-command"}, + {"id": 16971, "synset": "second_lieutenant.n.01", "name": "second_lieutenant"}, + {"id": 16972, "synset": "second-rater.n.01", "name": "second-rater"}, + {"id": 16973, "synset": "secretary.n.01", "name": "secretary"}, + { + "id": 16974, + "synset": "secretary_of_agriculture.n.01", + "name": "Secretary_of_Agriculture", + }, + { + "id": 16975, + "synset": "secretary_of_health_and_human_services.n.01", + "name": "Secretary_of_Health_and_Human_Services", + }, + {"id": 16976, "synset": "secretary_of_state.n.01", "name": "Secretary_of_State"}, + { + "id": 16977, + "synset": "secretary_of_the_interior.n.02", + "name": "Secretary_of_the_Interior", + }, + {"id": 16978, "synset": "sectarian.n.01", "name": "sectarian"}, + {"id": 16979, "synset": "section_hand.n.01", "name": "section_hand"}, + {"id": 16980, "synset": "secularist.n.01", "name": "secularist"}, + {"id": 16981, "synset": "security_consultant.n.01", "name": "security_consultant"}, + {"id": 16982, "synset": "seeded_player.n.01", "name": "seeded_player"}, + {"id": 16983, "synset": "seeder.n.01", "name": "seeder"}, + {"id": 16984, "synset": "seeker.n.01", "name": "seeker"}, + {"id": 16985, "synset": "segregate.n.01", "name": "segregate"}, + {"id": 16986, "synset": "segregator.n.01", "name": "segregator"}, + {"id": 16987, "synset": "selectman.n.01", "name": "selectman"}, + {"id": 16988, "synset": "selectwoman.n.01", "name": "selectwoman"}, + {"id": 16989, "synset": "selfish_person.n.01", "name": "selfish_person"}, + {"id": 16990, "synset": "self-starter.n.01", "name": "self-starter"}, + {"id": 16991, "synset": "seller.n.01", "name": "seller"}, + {"id": 16992, "synset": "selling_agent.n.01", "name": "selling_agent"}, + {"id": 16993, "synset": "semanticist.n.01", "name": "semanticist"}, + {"id": 16994, "synset": "semifinalist.n.01", "name": "semifinalist"}, + {"id": 16995, "synset": "seminarian.n.01", "name": "seminarian"}, + {"id": 16996, "synset": "senator.n.01", "name": "senator"}, + {"id": 16997, "synset": "sendee.n.01", "name": "sendee"}, + {"id": 16998, "synset": "senior.n.01", "name": "senior"}, + { + "id": 16999, + "synset": "senior_vice_president.n.01", + "name": "senior_vice_president", + }, + {"id": 17000, "synset": "separatist.n.01", "name": "separatist"}, + {"id": 17001, "synset": "septuagenarian.n.01", "name": "septuagenarian"}, + {"id": 17002, "synset": "serf.n.01", "name": "serf"}, + {"id": 17003, "synset": "spree_killer.n.01", "name": "spree_killer"}, + {"id": 17004, "synset": "serjeant-at-law.n.01", "name": "serjeant-at-law"}, + {"id": 17005, "synset": "server.n.02", "name": "server"}, + {"id": 17006, "synset": "serviceman.n.01", "name": "serviceman"}, + {"id": 17007, "synset": "settler.n.01", "name": "settler"}, + {"id": 17008, "synset": "settler.n.03", "name": "settler"}, + {"id": 17009, "synset": "sex_symbol.n.01", "name": "sex_symbol"}, + {"id": 17010, "synset": "sexton.n.02", "name": "sexton"}, + {"id": 17011, "synset": "shaheed.n.01", "name": "shaheed"}, + {"id": 17012, "synset": "shakespearian.n.01", "name": "Shakespearian"}, + {"id": 17013, "synset": "shanghaier.n.01", "name": "shanghaier"}, + {"id": 17014, "synset": "sharecropper.n.01", "name": "sharecropper"}, + {"id": 17015, "synset": "shaver.n.01", "name": "shaver"}, + {"id": 17016, "synset": "shavian.n.01", "name": "Shavian"}, + {"id": 17017, "synset": "sheep.n.02", "name": "sheep"}, + {"id": 17018, "synset": "sheik.n.01", "name": "sheik"}, + {"id": 17019, "synset": "shelver.n.01", "name": "shelver"}, + {"id": 17020, "synset": "shepherd.n.01", "name": "shepherd"}, + {"id": 17021, "synset": "ship-breaker.n.01", "name": "ship-breaker"}, + {"id": 17022, "synset": "shipmate.n.01", "name": "shipmate"}, + {"id": 17023, "synset": "shipowner.n.01", "name": "shipowner"}, + {"id": 17024, "synset": "shipping_agent.n.01", "name": "shipping_agent"}, + {"id": 17025, "synset": "shirtmaker.n.01", "name": "shirtmaker"}, + {"id": 17026, "synset": "shogun.n.01", "name": "shogun"}, + {"id": 17027, "synset": "shopaholic.n.01", "name": "shopaholic"}, + {"id": 17028, "synset": "shop_girl.n.01", "name": "shop_girl"}, + {"id": 17029, "synset": "shop_steward.n.01", "name": "shop_steward"}, + {"id": 17030, "synset": "shot_putter.n.01", "name": "shot_putter"}, + {"id": 17031, "synset": "shrew.n.01", "name": "shrew"}, + {"id": 17032, "synset": "shuffler.n.01", "name": "shuffler"}, + {"id": 17033, "synset": "shyster.n.01", "name": "shyster"}, + {"id": 17034, "synset": "sibling.n.01", "name": "sibling"}, + {"id": 17035, "synset": "sick_person.n.01", "name": "sick_person"}, + {"id": 17036, "synset": "sightreader.n.01", "name": "sightreader"}, + {"id": 17037, "synset": "signaler.n.01", "name": "signaler"}, + {"id": 17038, "synset": "signer.n.01", "name": "signer"}, + {"id": 17039, "synset": "signor.n.01", "name": "signor"}, + {"id": 17040, "synset": "signora.n.01", "name": "signora"}, + {"id": 17041, "synset": "signore.n.01", "name": "signore"}, + {"id": 17042, "synset": "signorina.n.01", "name": "signorina"}, + {"id": 17043, "synset": "silent_partner.n.01", "name": "silent_partner"}, + {"id": 17044, "synset": "addle-head.n.01", "name": "addle-head"}, + {"id": 17045, "synset": "simperer.n.01", "name": "simperer"}, + {"id": 17046, "synset": "singer.n.01", "name": "singer"}, + {"id": 17047, "synset": "sinologist.n.01", "name": "Sinologist"}, + {"id": 17048, "synset": "sipper.n.01", "name": "sipper"}, + {"id": 17049, "synset": "sirrah.n.01", "name": "sirrah"}, + {"id": 17050, "synset": "sister.n.02", "name": "Sister"}, + {"id": 17051, "synset": "sister.n.01", "name": "sister"}, + {"id": 17052, "synset": "waverer.n.01", "name": "waverer"}, + {"id": 17053, "synset": "sitar_player.n.01", "name": "sitar_player"}, + {"id": 17054, "synset": "sixth-former.n.01", "name": "sixth-former"}, + {"id": 17055, "synset": "skateboarder.n.01", "name": "skateboarder"}, + {"id": 17056, "synset": "skeptic.n.01", "name": "skeptic"}, + {"id": 17057, "synset": "sketcher.n.01", "name": "sketcher"}, + {"id": 17058, "synset": "skidder.n.02", "name": "skidder"}, + {"id": 17059, "synset": "skier.n.01", "name": "skier"}, + {"id": 17060, "synset": "skinny-dipper.n.01", "name": "skinny-dipper"}, + {"id": 17061, "synset": "skin-diver.n.01", "name": "skin-diver"}, + {"id": 17062, "synset": "skinhead.n.01", "name": "skinhead"}, + {"id": 17063, "synset": "slasher.n.01", "name": "slasher"}, + {"id": 17064, "synset": "slattern.n.02", "name": "slattern"}, + {"id": 17065, "synset": "sleeper.n.01", "name": "sleeper"}, + {"id": 17066, "synset": "sleeper.n.02", "name": "sleeper"}, + {"id": 17067, "synset": "sleeping_beauty.n.02", "name": "sleeping_beauty"}, + {"id": 17068, "synset": "sleuth.n.01", "name": "sleuth"}, + {"id": 17069, "synset": "slob.n.01", "name": "slob"}, + {"id": 17070, "synset": "sloganeer.n.01", "name": "sloganeer"}, + {"id": 17071, "synset": "slopseller.n.01", "name": "slopseller"}, + {"id": 17072, "synset": "smasher.n.02", "name": "smasher"}, + {"id": 17073, "synset": "smirker.n.01", "name": "smirker"}, + {"id": 17074, "synset": "smith.n.10", "name": "smith"}, + {"id": 17075, "synset": "smoothie.n.01", "name": "smoothie"}, + {"id": 17076, "synset": "smuggler.n.01", "name": "smuggler"}, + {"id": 17077, "synset": "sneezer.n.01", "name": "sneezer"}, + {"id": 17078, "synset": "snob.n.01", "name": "snob"}, + {"id": 17079, "synset": "snoop.n.01", "name": "snoop"}, + {"id": 17080, "synset": "snorer.n.01", "name": "snorer"}, + {"id": 17081, "synset": "sob_sister.n.01", "name": "sob_sister"}, + {"id": 17082, "synset": "soccer_player.n.01", "name": "soccer_player"}, + { + "id": 17083, + "synset": "social_anthropologist.n.01", + "name": "social_anthropologist", + }, + {"id": 17084, "synset": "social_climber.n.01", "name": "social_climber"}, + {"id": 17085, "synset": "socialist.n.01", "name": "socialist"}, + {"id": 17086, "synset": "socializer.n.01", "name": "socializer"}, + {"id": 17087, "synset": "social_scientist.n.01", "name": "social_scientist"}, + {"id": 17088, "synset": "social_secretary.n.01", "name": "social_secretary"}, + {"id": 17089, "synset": "socinian.n.01", "name": "Socinian"}, + {"id": 17090, "synset": "sociolinguist.n.01", "name": "sociolinguist"}, + {"id": 17091, "synset": "sociologist.n.01", "name": "sociologist"}, + {"id": 17092, "synset": "soda_jerk.n.01", "name": "soda_jerk"}, + {"id": 17093, "synset": "sodalist.n.01", "name": "sodalist"}, + {"id": 17094, "synset": "sodomite.n.01", "name": "sodomite"}, + {"id": 17095, "synset": "soldier.n.01", "name": "soldier"}, + {"id": 17096, "synset": "son.n.01", "name": "son"}, + {"id": 17097, "synset": "songster.n.02", "name": "songster"}, + {"id": 17098, "synset": "songstress.n.01", "name": "songstress"}, + {"id": 17099, "synset": "songwriter.n.01", "name": "songwriter"}, + {"id": 17100, "synset": "sorcerer.n.01", "name": "sorcerer"}, + {"id": 17101, "synset": "sorehead.n.01", "name": "sorehead"}, + {"id": 17102, "synset": "soul_mate.n.01", "name": "soul_mate"}, + {"id": 17103, "synset": "southern_baptist.n.01", "name": "Southern_Baptist"}, + {"id": 17104, "synset": "sovereign.n.01", "name": "sovereign"}, + {"id": 17105, "synset": "spacewalker.n.01", "name": "spacewalker"}, + {"id": 17106, "synset": "spanish_american.n.01", "name": "Spanish_American"}, + {"id": 17107, "synset": "sparring_partner.n.01", "name": "sparring_partner"}, + {"id": 17108, "synset": "spastic.n.01", "name": "spastic"}, + {"id": 17109, "synset": "speaker.n.01", "name": "speaker"}, + {"id": 17110, "synset": "native_speaker.n.01", "name": "native_speaker"}, + {"id": 17111, "synset": "speaker.n.03", "name": "Speaker"}, + {"id": 17112, "synset": "speechwriter.n.01", "name": "speechwriter"}, + {"id": 17113, "synset": "specialist.n.02", "name": "specialist"}, + {"id": 17114, "synset": "specifier.n.01", "name": "specifier"}, + {"id": 17115, "synset": "spectator.n.01", "name": "spectator"}, + {"id": 17116, "synset": "speech_therapist.n.01", "name": "speech_therapist"}, + {"id": 17117, "synset": "speedskater.n.01", "name": "speedskater"}, + {"id": 17118, "synset": "spellbinder.n.01", "name": "spellbinder"}, + {"id": 17119, "synset": "sphinx.n.01", "name": "sphinx"}, + {"id": 17120, "synset": "spinster.n.01", "name": "spinster"}, + {"id": 17121, "synset": "split_end.n.01", "name": "split_end"}, + {"id": 17122, "synset": "sport.n.05", "name": "sport"}, + {"id": 17123, "synset": "sport.n.03", "name": "sport"}, + {"id": 17124, "synset": "sporting_man.n.02", "name": "sporting_man"}, + {"id": 17125, "synset": "sports_announcer.n.01", "name": "sports_announcer"}, + {"id": 17126, "synset": "sports_editor.n.01", "name": "sports_editor"}, + {"id": 17127, "synset": "sprog.n.02", "name": "sprog"}, + {"id": 17128, "synset": "square_dancer.n.01", "name": "square_dancer"}, + {"id": 17129, "synset": "square_shooter.n.01", "name": "square_shooter"}, + {"id": 17130, "synset": "squatter.n.02", "name": "squatter"}, + {"id": 17131, "synset": "squire.n.02", "name": "squire"}, + {"id": 17132, "synset": "squire.n.01", "name": "squire"}, + {"id": 17133, "synset": "staff_member.n.01", "name": "staff_member"}, + {"id": 17134, "synset": "staff_sergeant.n.01", "name": "staff_sergeant"}, + {"id": 17135, "synset": "stage_director.n.01", "name": "stage_director"}, + {"id": 17136, "synset": "stainer.n.01", "name": "stainer"}, + {"id": 17137, "synset": "stakeholder.n.01", "name": "stakeholder"}, + {"id": 17138, "synset": "stalker.n.02", "name": "stalker"}, + {"id": 17139, "synset": "stalking-horse.n.01", "name": "stalking-horse"}, + {"id": 17140, "synset": "stammerer.n.01", "name": "stammerer"}, + {"id": 17141, "synset": "stamper.n.02", "name": "stamper"}, + {"id": 17142, "synset": "standee.n.01", "name": "standee"}, + {"id": 17143, "synset": "stand-in.n.01", "name": "stand-in"}, + {"id": 17144, "synset": "star.n.04", "name": "star"}, + {"id": 17145, "synset": "starlet.n.01", "name": "starlet"}, + {"id": 17146, "synset": "starter.n.03", "name": "starter"}, + {"id": 17147, "synset": "statesman.n.01", "name": "statesman"}, + {"id": 17148, "synset": "state_treasurer.n.01", "name": "state_treasurer"}, + {"id": 17149, "synset": "stationer.n.01", "name": "stationer"}, + {"id": 17150, "synset": "stenographer.n.01", "name": "stenographer"}, + {"id": 17151, "synset": "stentor.n.01", "name": "stentor"}, + {"id": 17152, "synset": "stepbrother.n.01", "name": "stepbrother"}, + {"id": 17153, "synset": "stepmother.n.01", "name": "stepmother"}, + {"id": 17154, "synset": "stepparent.n.01", "name": "stepparent"}, + {"id": 17155, "synset": "stevedore.n.01", "name": "stevedore"}, + {"id": 17156, "synset": "steward.n.01", "name": "steward"}, + {"id": 17157, "synset": "steward.n.03", "name": "steward"}, + {"id": 17158, "synset": "steward.n.02", "name": "steward"}, + {"id": 17159, "synset": "stickler.n.01", "name": "stickler"}, + {"id": 17160, "synset": "stiff.n.01", "name": "stiff"}, + {"id": 17161, "synset": "stifler.n.01", "name": "stifler"}, + {"id": 17162, "synset": "stipendiary.n.01", "name": "stipendiary"}, + {"id": 17163, "synset": "stitcher.n.01", "name": "stitcher"}, + {"id": 17164, "synset": "stockjobber.n.01", "name": "stockjobber"}, + {"id": 17165, "synset": "stock_trader.n.01", "name": "stock_trader"}, + {"id": 17166, "synset": "stockist.n.01", "name": "stockist"}, + {"id": 17167, "synset": "stoker.n.02", "name": "stoker"}, + {"id": 17168, "synset": "stooper.n.02", "name": "stooper"}, + {"id": 17169, "synset": "store_detective.n.01", "name": "store_detective"}, + {"id": 17170, "synset": "strafer.n.01", "name": "strafer"}, + {"id": 17171, "synset": "straight_man.n.01", "name": "straight_man"}, + {"id": 17172, "synset": "stranger.n.01", "name": "stranger"}, + {"id": 17173, "synset": "stranger.n.02", "name": "stranger"}, + {"id": 17174, "synset": "strategist.n.01", "name": "strategist"}, + {"id": 17175, "synset": "straw_boss.n.01", "name": "straw_boss"}, + {"id": 17176, "synset": "streetwalker.n.01", "name": "streetwalker"}, + {"id": 17177, "synset": "stretcher-bearer.n.01", "name": "stretcher-bearer"}, + {"id": 17178, "synset": "struggler.n.01", "name": "struggler"}, + {"id": 17179, "synset": "stud.n.01", "name": "stud"}, + {"id": 17180, "synset": "student.n.01", "name": "student"}, + {"id": 17181, "synset": "stumblebum.n.01", "name": "stumblebum"}, + {"id": 17182, "synset": "stylist.n.01", "name": "stylist"}, + {"id": 17183, "synset": "subaltern.n.01", "name": "subaltern"}, + {"id": 17184, "synset": "subcontractor.n.01", "name": "subcontractor"}, + {"id": 17185, "synset": "subduer.n.01", "name": "subduer"}, + {"id": 17186, "synset": "subject.n.06", "name": "subject"}, + {"id": 17187, "synset": "subordinate.n.01", "name": "subordinate"}, + {"id": 17188, "synset": "substitute.n.02", "name": "substitute"}, + {"id": 17189, "synset": "successor.n.03", "name": "successor"}, + {"id": 17190, "synset": "successor.n.01", "name": "successor"}, + {"id": 17191, "synset": "succorer.n.01", "name": "succorer"}, + {"id": 17192, "synset": "sufi.n.01", "name": "Sufi"}, + {"id": 17193, "synset": "suffragan.n.01", "name": "suffragan"}, + {"id": 17194, "synset": "suffragette.n.01", "name": "suffragette"}, + {"id": 17195, "synset": "sugar_daddy.n.01", "name": "sugar_daddy"}, + {"id": 17196, "synset": "suicide_bomber.n.01", "name": "suicide_bomber"}, + {"id": 17197, "synset": "suitor.n.01", "name": "suitor"}, + {"id": 17198, "synset": "sumo_wrestler.n.01", "name": "sumo_wrestler"}, + {"id": 17199, "synset": "sunbather.n.01", "name": "sunbather"}, + {"id": 17200, "synset": "sundowner.n.01", "name": "sundowner"}, + {"id": 17201, "synset": "super_heavyweight.n.01", "name": "super_heavyweight"}, + {"id": 17202, "synset": "superior.n.01", "name": "superior"}, + {"id": 17203, "synset": "supermom.n.01", "name": "supermom"}, + {"id": 17204, "synset": "supernumerary.n.02", "name": "supernumerary"}, + {"id": 17205, "synset": "supremo.n.01", "name": "supremo"}, + {"id": 17206, "synset": "surgeon.n.01", "name": "surgeon"}, + {"id": 17207, "synset": "surgeon_general.n.02", "name": "Surgeon_General"}, + {"id": 17208, "synset": "surgeon_general.n.01", "name": "Surgeon_General"}, + {"id": 17209, "synset": "surpriser.n.01", "name": "surpriser"}, + {"id": 17210, "synset": "surveyor.n.01", "name": "surveyor"}, + {"id": 17211, "synset": "surveyor.n.02", "name": "surveyor"}, + {"id": 17212, "synset": "survivor.n.01", "name": "survivor"}, + {"id": 17213, "synset": "sutler.n.01", "name": "sutler"}, + {"id": 17214, "synset": "sweeper.n.01", "name": "sweeper"}, + {"id": 17215, "synset": "sweetheart.n.01", "name": "sweetheart"}, + {"id": 17216, "synset": "swinger.n.02", "name": "swinger"}, + {"id": 17217, "synset": "switcher.n.01", "name": "switcher"}, + {"id": 17218, "synset": "swot.n.01", "name": "swot"}, + {"id": 17219, "synset": "sycophant.n.01", "name": "sycophant"}, + {"id": 17220, "synset": "sylph.n.01", "name": "sylph"}, + {"id": 17221, "synset": "sympathizer.n.02", "name": "sympathizer"}, + {"id": 17222, "synset": "symphonist.n.01", "name": "symphonist"}, + {"id": 17223, "synset": "syncopator.n.01", "name": "syncopator"}, + {"id": 17224, "synset": "syndic.n.01", "name": "syndic"}, + {"id": 17225, "synset": "tactician.n.01", "name": "tactician"}, + {"id": 17226, "synset": "tagger.n.02", "name": "tagger"}, + {"id": 17227, "synset": "tailback.n.01", "name": "tailback"}, + {"id": 17228, "synset": "tallyman.n.02", "name": "tallyman"}, + {"id": 17229, "synset": "tallyman.n.01", "name": "tallyman"}, + {"id": 17230, "synset": "tanker.n.02", "name": "tanker"}, + {"id": 17231, "synset": "tapper.n.04", "name": "tapper"}, + {"id": 17232, "synset": "tartuffe.n.01", "name": "Tartuffe"}, + {"id": 17233, "synset": "tarzan.n.01", "name": "Tarzan"}, + {"id": 17234, "synset": "taster.n.01", "name": "taster"}, + {"id": 17235, "synset": "tax_assessor.n.01", "name": "tax_assessor"}, + {"id": 17236, "synset": "taxer.n.01", "name": "taxer"}, + {"id": 17237, "synset": "taxi_dancer.n.01", "name": "taxi_dancer"}, + {"id": 17238, "synset": "taxonomist.n.01", "name": "taxonomist"}, + {"id": 17239, "synset": "teacher.n.01", "name": "teacher"}, + {"id": 17240, "synset": "teaching_fellow.n.01", "name": "teaching_fellow"}, + {"id": 17241, "synset": "tearaway.n.01", "name": "tearaway"}, + {"id": 17242, "synset": "technical_sergeant.n.01", "name": "technical_sergeant"}, + {"id": 17243, "synset": "technician.n.02", "name": "technician"}, + {"id": 17244, "synset": "ted.n.01", "name": "Ted"}, + {"id": 17245, "synset": "teetotaler.n.01", "name": "teetotaler"}, + {"id": 17246, "synset": "television_reporter.n.01", "name": "television_reporter"}, + {"id": 17247, "synset": "temporizer.n.01", "name": "temporizer"}, + {"id": 17248, "synset": "tempter.n.01", "name": "tempter"}, + {"id": 17249, "synset": "term_infant.n.01", "name": "term_infant"}, + {"id": 17250, "synset": "toiler.n.01", "name": "toiler"}, + {"id": 17251, "synset": "tenant.n.01", "name": "tenant"}, + {"id": 17252, "synset": "tenant.n.02", "name": "tenant"}, + {"id": 17253, "synset": "tenderfoot.n.01", "name": "tenderfoot"}, + {"id": 17254, "synset": "tennis_player.n.01", "name": "tennis_player"}, + {"id": 17255, "synset": "tennis_pro.n.01", "name": "tennis_pro"}, + {"id": 17256, "synset": "tenor_saxophonist.n.01", "name": "tenor_saxophonist"}, + {"id": 17257, "synset": "termer.n.01", "name": "termer"}, + {"id": 17258, "synset": "terror.n.02", "name": "terror"}, + {"id": 17259, "synset": "tertigravida.n.01", "name": "tertigravida"}, + {"id": 17260, "synset": "testator.n.01", "name": "testator"}, + {"id": 17261, "synset": "testatrix.n.01", "name": "testatrix"}, + {"id": 17262, "synset": "testee.n.01", "name": "testee"}, + {"id": 17263, "synset": "test-tube_baby.n.01", "name": "test-tube_baby"}, + {"id": 17264, "synset": "texas_ranger.n.01", "name": "Texas_Ranger"}, + {"id": 17265, "synset": "thane.n.02", "name": "thane"}, + {"id": 17266, "synset": "theatrical_producer.n.01", "name": "theatrical_producer"}, + {"id": 17267, "synset": "theologian.n.01", "name": "theologian"}, + {"id": 17268, "synset": "theorist.n.01", "name": "theorist"}, + {"id": 17269, "synset": "theosophist.n.01", "name": "theosophist"}, + {"id": 17270, "synset": "therapist.n.01", "name": "therapist"}, + {"id": 17271, "synset": "thessalonian.n.01", "name": "Thessalonian"}, + {"id": 17272, "synset": "thinker.n.01", "name": "thinker"}, + {"id": 17273, "synset": "thinker.n.02", "name": "thinker"}, + {"id": 17274, "synset": "thrower.n.02", "name": "thrower"}, + {"id": 17275, "synset": "thurifer.n.01", "name": "thurifer"}, + {"id": 17276, "synset": "ticket_collector.n.01", "name": "ticket_collector"}, + {"id": 17277, "synset": "tight_end.n.01", "name": "tight_end"}, + {"id": 17278, "synset": "tiler.n.01", "name": "tiler"}, + {"id": 17279, "synset": "timekeeper.n.01", "name": "timekeeper"}, + {"id": 17280, "synset": "timorese.n.01", "name": "Timorese"}, + {"id": 17281, "synset": "tinkerer.n.01", "name": "tinkerer"}, + {"id": 17282, "synset": "tinsmith.n.01", "name": "tinsmith"}, + {"id": 17283, "synset": "tinter.n.01", "name": "tinter"}, + {"id": 17284, "synset": "tippler.n.01", "name": "tippler"}, + {"id": 17285, "synset": "tipster.n.01", "name": "tipster"}, + {"id": 17286, "synset": "t-man.n.01", "name": "T-man"}, + {"id": 17287, "synset": "toastmaster.n.01", "name": "toastmaster"}, + {"id": 17288, "synset": "toast_mistress.n.01", "name": "toast_mistress"}, + {"id": 17289, "synset": "tobogganist.n.01", "name": "tobogganist"}, + {"id": 17290, "synset": "tomboy.n.01", "name": "tomboy"}, + {"id": 17291, "synset": "toolmaker.n.01", "name": "toolmaker"}, + {"id": 17292, "synset": "torchbearer.n.01", "name": "torchbearer"}, + {"id": 17293, "synset": "tory.n.01", "name": "Tory"}, + {"id": 17294, "synset": "tory.n.02", "name": "Tory"}, + {"id": 17295, "synset": "tosser.n.02", "name": "tosser"}, + {"id": 17296, "synset": "tosser.n.01", "name": "tosser"}, + {"id": 17297, "synset": "totalitarian.n.01", "name": "totalitarian"}, + {"id": 17298, "synset": "tourist.n.01", "name": "tourist"}, + {"id": 17299, "synset": "tout.n.02", "name": "tout"}, + {"id": 17300, "synset": "tout.n.01", "name": "tout"}, + {"id": 17301, "synset": "tovarich.n.01", "name": "tovarich"}, + {"id": 17302, "synset": "towhead.n.01", "name": "towhead"}, + {"id": 17303, "synset": "town_clerk.n.01", "name": "town_clerk"}, + {"id": 17304, "synset": "town_crier.n.01", "name": "town_crier"}, + {"id": 17305, "synset": "townsman.n.02", "name": "townsman"}, + {"id": 17306, "synset": "toxicologist.n.01", "name": "toxicologist"}, + {"id": 17307, "synset": "track_star.n.01", "name": "track_star"}, + {"id": 17308, "synset": "trader.n.01", "name": "trader"}, + {"id": 17309, "synset": "trade_unionist.n.01", "name": "trade_unionist"}, + {"id": 17310, "synset": "traditionalist.n.01", "name": "traditionalist"}, + {"id": 17311, "synset": "traffic_cop.n.01", "name": "traffic_cop"}, + {"id": 17312, "synset": "tragedian.n.02", "name": "tragedian"}, + {"id": 17313, "synset": "tragedian.n.01", "name": "tragedian"}, + {"id": 17314, "synset": "tragedienne.n.01", "name": "tragedienne"}, + {"id": 17315, "synset": "trail_boss.n.01", "name": "trail_boss"}, + {"id": 17316, "synset": "trainer.n.01", "name": "trainer"}, + {"id": 17317, "synset": "traitor.n.01", "name": "traitor"}, + {"id": 17318, "synset": "traitress.n.01", "name": "traitress"}, + {"id": 17319, "synset": "transactor.n.01", "name": "transactor"}, + {"id": 17320, "synset": "transcriber.n.03", "name": "transcriber"}, + {"id": 17321, "synset": "transfer.n.02", "name": "transfer"}, + {"id": 17322, "synset": "transferee.n.01", "name": "transferee"}, + {"id": 17323, "synset": "translator.n.01", "name": "translator"}, + {"id": 17324, "synset": "transvestite.n.01", "name": "transvestite"}, + {"id": 17325, "synset": "traveling_salesman.n.01", "name": "traveling_salesman"}, + {"id": 17326, "synset": "traverser.n.01", "name": "traverser"}, + {"id": 17327, "synset": "trawler.n.01", "name": "trawler"}, + {"id": 17328, "synset": "treasury.n.04", "name": "Treasury"}, + {"id": 17329, "synset": "trencher.n.01", "name": "trencher"}, + {"id": 17330, "synset": "trend-setter.n.01", "name": "trend-setter"}, + {"id": 17331, "synset": "tribesman.n.01", "name": "tribesman"}, + {"id": 17332, "synset": "trier.n.02", "name": "trier"}, + {"id": 17333, "synset": "trifler.n.01", "name": "trifler"}, + {"id": 17334, "synset": "trooper.n.02", "name": "trooper"}, + {"id": 17335, "synset": "trooper.n.03", "name": "trooper"}, + {"id": 17336, "synset": "trotskyite.n.01", "name": "Trotskyite"}, + {"id": 17337, "synset": "truant.n.01", "name": "truant"}, + {"id": 17338, "synset": "trumpeter.n.01", "name": "trumpeter"}, + {"id": 17339, "synset": "trusty.n.01", "name": "trusty"}, + {"id": 17340, "synset": "tudor.n.03", "name": "Tudor"}, + {"id": 17341, "synset": "tumbler.n.01", "name": "tumbler"}, + {"id": 17342, "synset": "tutee.n.01", "name": "tutee"}, + {"id": 17343, "synset": "twin.n.01", "name": "twin"}, + {"id": 17344, "synset": "two-timer.n.01", "name": "two-timer"}, + {"id": 17345, "synset": "tyke.n.01", "name": "Tyke"}, + {"id": 17346, "synset": "tympanist.n.01", "name": "tympanist"}, + {"id": 17347, "synset": "typist.n.01", "name": "typist"}, + {"id": 17348, "synset": "tyrant.n.01", "name": "tyrant"}, + {"id": 17349, "synset": "umpire.n.01", "name": "umpire"}, + {"id": 17350, "synset": "understudy.n.01", "name": "understudy"}, + {"id": 17351, "synset": "undesirable.n.01", "name": "undesirable"}, + {"id": 17352, "synset": "unicyclist.n.01", "name": "unicyclist"}, + {"id": 17353, "synset": "unilateralist.n.01", "name": "unilateralist"}, + {"id": 17354, "synset": "unitarian.n.01", "name": "Unitarian"}, + {"id": 17355, "synset": "arminian.n.01", "name": "Arminian"}, + {"id": 17356, "synset": "universal_donor.n.01", "name": "universal_donor"}, + {"id": 17357, "synset": "unix_guru.n.01", "name": "UNIX_guru"}, + {"id": 17358, "synset": "unknown_soldier.n.01", "name": "Unknown_Soldier"}, + {"id": 17359, "synset": "upsetter.n.01", "name": "upsetter"}, + {"id": 17360, "synset": "upstager.n.01", "name": "upstager"}, + {"id": 17361, "synset": "upstart.n.02", "name": "upstart"}, + {"id": 17362, "synset": "upstart.n.01", "name": "upstart"}, + {"id": 17363, "synset": "urchin.n.01", "name": "urchin"}, + {"id": 17364, "synset": "urologist.n.01", "name": "urologist"}, + {"id": 17365, "synset": "usherette.n.01", "name": "usherette"}, + {"id": 17366, "synset": "usher.n.02", "name": "usher"}, + {"id": 17367, "synset": "usurper.n.01", "name": "usurper"}, + {"id": 17368, "synset": "utility_man.n.01", "name": "utility_man"}, + {"id": 17369, "synset": "utilizer.n.01", "name": "utilizer"}, + {"id": 17370, "synset": "utopian.n.01", "name": "Utopian"}, + {"id": 17371, "synset": "uxoricide.n.01", "name": "uxoricide"}, + {"id": 17372, "synset": "vacationer.n.01", "name": "vacationer"}, + {"id": 17373, "synset": "valedictorian.n.01", "name": "valedictorian"}, + {"id": 17374, "synset": "valley_girl.n.01", "name": "valley_girl"}, + {"id": 17375, "synset": "vaulter.n.01", "name": "vaulter"}, + {"id": 17376, "synset": "vegetarian.n.01", "name": "vegetarian"}, + {"id": 17377, "synset": "vegan.n.01", "name": "vegan"}, + {"id": 17378, "synset": "venerator.n.01", "name": "venerator"}, + {"id": 17379, "synset": "venture_capitalist.n.01", "name": "venture_capitalist"}, + {"id": 17380, "synset": "venturer.n.01", "name": "venturer"}, + {"id": 17381, "synset": "vermin.n.01", "name": "vermin"}, + { + "id": 17382, + "synset": "very_important_person.n.01", + "name": "very_important_person", + }, + {"id": 17383, "synset": "vibist.n.01", "name": "vibist"}, + {"id": 17384, "synset": "vicar.n.01", "name": "vicar"}, + {"id": 17385, "synset": "vicar.n.03", "name": "vicar"}, + {"id": 17386, "synset": "vicar-general.n.01", "name": "vicar-general"}, + {"id": 17387, "synset": "vice_chancellor.n.01", "name": "vice_chancellor"}, + {"id": 17388, "synset": "vicegerent.n.01", "name": "vicegerent"}, + {"id": 17389, "synset": "vice_president.n.01", "name": "vice_president"}, + {"id": 17390, "synset": "vice-regent.n.01", "name": "vice-regent"}, + {"id": 17391, "synset": "victim.n.02", "name": "victim"}, + {"id": 17392, "synset": "victorian.n.01", "name": "Victorian"}, + {"id": 17393, "synset": "victualer.n.01", "name": "victualer"}, + {"id": 17394, "synset": "vigilante.n.01", "name": "vigilante"}, + {"id": 17395, "synset": "villager.n.01", "name": "villager"}, + {"id": 17396, "synset": "vintager.n.01", "name": "vintager"}, + {"id": 17397, "synset": "vintner.n.01", "name": "vintner"}, + {"id": 17398, "synset": "violator.n.02", "name": "violator"}, + {"id": 17399, "synset": "violator.n.01", "name": "violator"}, + {"id": 17400, "synset": "violist.n.01", "name": "violist"}, + {"id": 17401, "synset": "virago.n.01", "name": "virago"}, + {"id": 17402, "synset": "virologist.n.01", "name": "virologist"}, + {"id": 17403, "synset": "visayan.n.01", "name": "Visayan"}, + {"id": 17404, "synset": "viscountess.n.01", "name": "viscountess"}, + {"id": 17405, "synset": "viscount.n.01", "name": "viscount"}, + {"id": 17406, "synset": "visigoth.n.01", "name": "Visigoth"}, + {"id": 17407, "synset": "visionary.n.01", "name": "visionary"}, + {"id": 17408, "synset": "visiting_fireman.n.01", "name": "visiting_fireman"}, + {"id": 17409, "synset": "visiting_professor.n.01", "name": "visiting_professor"}, + {"id": 17410, "synset": "visualizer.n.01", "name": "visualizer"}, + {"id": 17411, "synset": "vixen.n.01", "name": "vixen"}, + {"id": 17412, "synset": "vizier.n.01", "name": "vizier"}, + {"id": 17413, "synset": "voicer.n.01", "name": "voicer"}, + {"id": 17414, "synset": "volunteer.n.02", "name": "volunteer"}, + {"id": 17415, "synset": "volunteer.n.01", "name": "volunteer"}, + {"id": 17416, "synset": "votary.n.02", "name": "votary"}, + {"id": 17417, "synset": "votary.n.01", "name": "votary"}, + {"id": 17418, "synset": "vouchee.n.01", "name": "vouchee"}, + {"id": 17419, "synset": "vower.n.01", "name": "vower"}, + {"id": 17420, "synset": "voyager.n.01", "name": "voyager"}, + {"id": 17421, "synset": "voyeur.n.01", "name": "voyeur"}, + {"id": 17422, "synset": "vulcanizer.n.01", "name": "vulcanizer"}, + {"id": 17423, "synset": "waffler.n.01", "name": "waffler"}, + {"id": 17424, "synset": "wagnerian.n.01", "name": "Wagnerian"}, + {"id": 17425, "synset": "waif.n.01", "name": "waif"}, + {"id": 17426, "synset": "wailer.n.01", "name": "wailer"}, + {"id": 17427, "synset": "waiter.n.01", "name": "waiter"}, + {"id": 17428, "synset": "waitress.n.01", "name": "waitress"}, + {"id": 17429, "synset": "walking_delegate.n.01", "name": "walking_delegate"}, + {"id": 17430, "synset": "walk-on.n.01", "name": "walk-on"}, + {"id": 17431, "synset": "wallah.n.01", "name": "wallah"}, + {"id": 17432, "synset": "wally.n.01", "name": "wally"}, + {"id": 17433, "synset": "waltzer.n.01", "name": "waltzer"}, + {"id": 17434, "synset": "wanderer.n.01", "name": "wanderer"}, + {"id": 17435, "synset": "wandering_jew.n.01", "name": "Wandering_Jew"}, + {"id": 17436, "synset": "wanton.n.01", "name": "wanton"}, + {"id": 17437, "synset": "warrantee.n.02", "name": "warrantee"}, + {"id": 17438, "synset": "warrantee.n.01", "name": "warrantee"}, + {"id": 17439, "synset": "washer.n.01", "name": "washer"}, + {"id": 17440, "synset": "washerman.n.01", "name": "washerman"}, + {"id": 17441, "synset": "washwoman.n.01", "name": "washwoman"}, + {"id": 17442, "synset": "wassailer.n.01", "name": "wassailer"}, + {"id": 17443, "synset": "wastrel.n.01", "name": "wastrel"}, + {"id": 17444, "synset": "wave.n.09", "name": "Wave"}, + {"id": 17445, "synset": "weatherman.n.01", "name": "weatherman"}, + {"id": 17446, "synset": "weekend_warrior.n.02", "name": "weekend_warrior"}, + {"id": 17447, "synset": "weeder.n.01", "name": "weeder"}, + {"id": 17448, "synset": "welder.n.01", "name": "welder"}, + {"id": 17449, "synset": "welfare_case.n.01", "name": "welfare_case"}, + {"id": 17450, "synset": "westerner.n.01", "name": "westerner"}, + {"id": 17451, "synset": "west-sider.n.01", "name": "West-sider"}, + {"id": 17452, "synset": "wetter.n.02", "name": "wetter"}, + {"id": 17453, "synset": "whaler.n.01", "name": "whaler"}, + {"id": 17454, "synset": "whig.n.02", "name": "Whig"}, + {"id": 17455, "synset": "whiner.n.01", "name": "whiner"}, + {"id": 17456, "synset": "whipper-in.n.01", "name": "whipper-in"}, + {"id": 17457, "synset": "whisperer.n.01", "name": "whisperer"}, + {"id": 17458, "synset": "whiteface.n.02", "name": "whiteface"}, + {"id": 17459, "synset": "carmelite.n.01", "name": "Carmelite"}, + {"id": 17460, "synset": "augustinian.n.01", "name": "Augustinian"}, + {"id": 17461, "synset": "white_hope.n.01", "name": "white_hope"}, + {"id": 17462, "synset": "white_supremacist.n.01", "name": "white_supremacist"}, + {"id": 17463, "synset": "whoremaster.n.02", "name": "whoremaster"}, + {"id": 17464, "synset": "whoremaster.n.01", "name": "whoremaster"}, + {"id": 17465, "synset": "widow.n.01", "name": "widow"}, + {"id": 17466, "synset": "wife.n.01", "name": "wife"}, + {"id": 17467, "synset": "wiggler.n.01", "name": "wiggler"}, + {"id": 17468, "synset": "wimp.n.01", "name": "wimp"}, + {"id": 17469, "synset": "wing_commander.n.01", "name": "wing_commander"}, + {"id": 17470, "synset": "winger.n.01", "name": "winger"}, + {"id": 17471, "synset": "winner.n.02", "name": "winner"}, + {"id": 17472, "synset": "winner.n.01", "name": "winner"}, + {"id": 17473, "synset": "window_dresser.n.01", "name": "window_dresser"}, + {"id": 17474, "synset": "winker.n.01", "name": "winker"}, + {"id": 17475, "synset": "wiper.n.01", "name": "wiper"}, + {"id": 17476, "synset": "wireman.n.01", "name": "wireman"}, + {"id": 17477, "synset": "wise_guy.n.01", "name": "wise_guy"}, + {"id": 17478, "synset": "witch_doctor.n.01", "name": "witch_doctor"}, + {"id": 17479, "synset": "withdrawer.n.05", "name": "withdrawer"}, + {"id": 17480, "synset": "withdrawer.n.01", "name": "withdrawer"}, + {"id": 17481, "synset": "woman.n.01", "name": "woman"}, + {"id": 17482, "synset": "woman.n.02", "name": "woman"}, + {"id": 17483, "synset": "wonder_boy.n.01", "name": "wonder_boy"}, + {"id": 17484, "synset": "wonderer.n.01", "name": "wonderer"}, + {"id": 17485, "synset": "working_girl.n.01", "name": "working_girl"}, + {"id": 17486, "synset": "workman.n.01", "name": "workman"}, + {"id": 17487, "synset": "workmate.n.01", "name": "workmate"}, + {"id": 17488, "synset": "worldling.n.01", "name": "worldling"}, + {"id": 17489, "synset": "worshiper.n.01", "name": "worshiper"}, + {"id": 17490, "synset": "worthy.n.01", "name": "worthy"}, + {"id": 17491, "synset": "wrecker.n.01", "name": "wrecker"}, + {"id": 17492, "synset": "wright.n.07", "name": "wright"}, + {"id": 17493, "synset": "write-in_candidate.n.01", "name": "write-in_candidate"}, + {"id": 17494, "synset": "writer.n.01", "name": "writer"}, + {"id": 17495, "synset": "wykehamist.n.01", "name": "Wykehamist"}, + {"id": 17496, "synset": "yakuza.n.01", "name": "yakuza"}, + {"id": 17497, "synset": "yard_bird.n.01", "name": "yard_bird"}, + {"id": 17498, "synset": "yardie.n.01", "name": "yardie"}, + {"id": 17499, "synset": "yardman.n.01", "name": "yardman"}, + {"id": 17500, "synset": "yardmaster.n.01", "name": "yardmaster"}, + {"id": 17501, "synset": "yenta.n.02", "name": "yenta"}, + {"id": 17502, "synset": "yogi.n.02", "name": "yogi"}, + {"id": 17503, "synset": "young_buck.n.01", "name": "young_buck"}, + {"id": 17504, "synset": "young_turk.n.02", "name": "young_Turk"}, + {"id": 17505, "synset": "young_turk.n.01", "name": "Young_Turk"}, + {"id": 17506, "synset": "zionist.n.01", "name": "Zionist"}, + {"id": 17507, "synset": "zoo_keeper.n.01", "name": "zoo_keeper"}, + {"id": 17508, "synset": "genet.n.01", "name": "Genet"}, + {"id": 17509, "synset": "kennan.n.01", "name": "Kennan"}, + {"id": 17510, "synset": "munro.n.01", "name": "Munro"}, + {"id": 17511, "synset": "popper.n.01", "name": "Popper"}, + {"id": 17512, "synset": "stoker.n.01", "name": "Stoker"}, + {"id": 17513, "synset": "townes.n.01", "name": "Townes"}, + {"id": 17514, "synset": "dust_storm.n.01", "name": "dust_storm"}, + {"id": 17515, "synset": "parhelion.n.01", "name": "parhelion"}, + {"id": 17516, "synset": "snow.n.01", "name": "snow"}, + {"id": 17517, "synset": "facula.n.01", "name": "facula"}, + {"id": 17518, "synset": "wave.n.08", "name": "wave"}, + {"id": 17519, "synset": "microflora.n.01", "name": "microflora"}, + {"id": 17520, "synset": "wilding.n.01", "name": "wilding"}, + {"id": 17521, "synset": "semi-climber.n.01", "name": "semi-climber"}, + {"id": 17522, "synset": "volva.n.01", "name": "volva"}, + {"id": 17523, "synset": "basidiocarp.n.01", "name": "basidiocarp"}, + {"id": 17524, "synset": "domatium.n.01", "name": "domatium"}, + {"id": 17525, "synset": "apomict.n.01", "name": "apomict"}, + {"id": 17526, "synset": "aquatic.n.01", "name": "aquatic"}, + {"id": 17527, "synset": "bryophyte.n.01", "name": "bryophyte"}, + {"id": 17528, "synset": "acrocarp.n.01", "name": "acrocarp"}, + {"id": 17529, "synset": "sphagnum.n.01", "name": "sphagnum"}, + {"id": 17530, "synset": "liverwort.n.01", "name": "liverwort"}, + {"id": 17531, "synset": "hepatica.n.02", "name": "hepatica"}, + {"id": 17532, "synset": "pecopteris.n.01", "name": "pecopteris"}, + {"id": 17533, "synset": "pteridophyte.n.01", "name": "pteridophyte"}, + {"id": 17534, "synset": "fern.n.01", "name": "fern"}, + {"id": 17535, "synset": "fern_ally.n.01", "name": "fern_ally"}, + {"id": 17536, "synset": "spore.n.01", "name": "spore"}, + {"id": 17537, "synset": "carpospore.n.01", "name": "carpospore"}, + {"id": 17538, "synset": "chlamydospore.n.01", "name": "chlamydospore"}, + {"id": 17539, "synset": "conidium.n.01", "name": "conidium"}, + {"id": 17540, "synset": "oospore.n.01", "name": "oospore"}, + {"id": 17541, "synset": "tetraspore.n.01", "name": "tetraspore"}, + {"id": 17542, "synset": "zoospore.n.01", "name": "zoospore"}, + {"id": 17543, "synset": "cryptogam.n.01", "name": "cryptogam"}, + {"id": 17544, "synset": "spermatophyte.n.01", "name": "spermatophyte"}, + {"id": 17545, "synset": "seedling.n.01", "name": "seedling"}, + {"id": 17546, "synset": "annual.n.01", "name": "annual"}, + {"id": 17547, "synset": "biennial.n.01", "name": "biennial"}, + {"id": 17548, "synset": "perennial.n.01", "name": "perennial"}, + {"id": 17549, "synset": "hygrophyte.n.01", "name": "hygrophyte"}, + {"id": 17550, "synset": "gymnosperm.n.01", "name": "gymnosperm"}, + {"id": 17551, "synset": "gnetum.n.01", "name": "gnetum"}, + {"id": 17552, "synset": "catha_edulis.n.01", "name": "Catha_edulis"}, + {"id": 17553, "synset": "ephedra.n.01", "name": "ephedra"}, + {"id": 17554, "synset": "mahuang.n.01", "name": "mahuang"}, + {"id": 17555, "synset": "welwitschia.n.01", "name": "welwitschia"}, + {"id": 17556, "synset": "cycad.n.01", "name": "cycad"}, + {"id": 17557, "synset": "sago_palm.n.02", "name": "sago_palm"}, + {"id": 17558, "synset": "false_sago.n.01", "name": "false_sago"}, + {"id": 17559, "synset": "zamia.n.01", "name": "zamia"}, + {"id": 17560, "synset": "coontie.n.01", "name": "coontie"}, + {"id": 17561, "synset": "ceratozamia.n.01", "name": "ceratozamia"}, + {"id": 17562, "synset": "dioon.n.01", "name": "dioon"}, + {"id": 17563, "synset": "encephalartos.n.01", "name": "encephalartos"}, + {"id": 17564, "synset": "kaffir_bread.n.01", "name": "kaffir_bread"}, + {"id": 17565, "synset": "macrozamia.n.01", "name": "macrozamia"}, + {"id": 17566, "synset": "burrawong.n.01", "name": "burrawong"}, + {"id": 17567, "synset": "pine.n.01", "name": "pine"}, + {"id": 17568, "synset": "pinon.n.01", "name": "pinon"}, + {"id": 17569, "synset": "nut_pine.n.01", "name": "nut_pine"}, + {"id": 17570, "synset": "pinon_pine.n.01", "name": "pinon_pine"}, + { + "id": 17571, + "synset": "rocky_mountain_pinon.n.01", + "name": "Rocky_mountain_pinon", + }, + {"id": 17572, "synset": "single-leaf.n.01", "name": "single-leaf"}, + {"id": 17573, "synset": "bishop_pine.n.01", "name": "bishop_pine"}, + { + "id": 17574, + "synset": "california_single-leaf_pinyon.n.01", + "name": "California_single-leaf_pinyon", + }, + {"id": 17575, "synset": "parry's_pinyon.n.01", "name": "Parry's_pinyon"}, + {"id": 17576, "synset": "spruce_pine.n.04", "name": "spruce_pine"}, + {"id": 17577, "synset": "black_pine.n.05", "name": "black_pine"}, + {"id": 17578, "synset": "pitch_pine.n.02", "name": "pitch_pine"}, + {"id": 17579, "synset": "pond_pine.n.01", "name": "pond_pine"}, + {"id": 17580, "synset": "stone_pine.n.01", "name": "stone_pine"}, + {"id": 17581, "synset": "swiss_pine.n.01", "name": "Swiss_pine"}, + {"id": 17582, "synset": "cembra_nut.n.01", "name": "cembra_nut"}, + {"id": 17583, "synset": "swiss_mountain_pine.n.01", "name": "Swiss_mountain_pine"}, + {"id": 17584, "synset": "ancient_pine.n.01", "name": "ancient_pine"}, + {"id": 17585, "synset": "white_pine.n.01", "name": "white_pine"}, + {"id": 17586, "synset": "american_white_pine.n.01", "name": "American_white_pine"}, + {"id": 17587, "synset": "western_white_pine.n.01", "name": "western_white_pine"}, + { + "id": 17588, + "synset": "southwestern_white_pine.n.01", + "name": "southwestern_white_pine", + }, + {"id": 17589, "synset": "limber_pine.n.01", "name": "limber_pine"}, + {"id": 17590, "synset": "whitebark_pine.n.01", "name": "whitebark_pine"}, + {"id": 17591, "synset": "yellow_pine.n.01", "name": "yellow_pine"}, + {"id": 17592, "synset": "ponderosa.n.01", "name": "ponderosa"}, + {"id": 17593, "synset": "jeffrey_pine.n.01", "name": "Jeffrey_pine"}, + {"id": 17594, "synset": "shore_pine.n.01", "name": "shore_pine"}, + { + "id": 17595, + "synset": "sierra_lodgepole_pine.n.01", + "name": "Sierra_lodgepole_pine", + }, + {"id": 17596, "synset": "loblolly_pine.n.01", "name": "loblolly_pine"}, + {"id": 17597, "synset": "jack_pine.n.01", "name": "jack_pine"}, + {"id": 17598, "synset": "swamp_pine.n.01", "name": "swamp_pine"}, + {"id": 17599, "synset": "longleaf_pine.n.01", "name": "longleaf_pine"}, + {"id": 17600, "synset": "shortleaf_pine.n.01", "name": "shortleaf_pine"}, + {"id": 17601, "synset": "red_pine.n.02", "name": "red_pine"}, + {"id": 17602, "synset": "scotch_pine.n.01", "name": "Scotch_pine"}, + {"id": 17603, "synset": "scrub_pine.n.01", "name": "scrub_pine"}, + {"id": 17604, "synset": "monterey_pine.n.01", "name": "Monterey_pine"}, + {"id": 17605, "synset": "bristlecone_pine.n.01", "name": "bristlecone_pine"}, + {"id": 17606, "synset": "table-mountain_pine.n.01", "name": "table-mountain_pine"}, + {"id": 17607, "synset": "knobcone_pine.n.01", "name": "knobcone_pine"}, + {"id": 17608, "synset": "japanese_red_pine.n.01", "name": "Japanese_red_pine"}, + {"id": 17609, "synset": "japanese_black_pine.n.01", "name": "Japanese_black_pine"}, + {"id": 17610, "synset": "torrey_pine.n.01", "name": "Torrey_pine"}, + {"id": 17611, "synset": "larch.n.02", "name": "larch"}, + {"id": 17612, "synset": "american_larch.n.01", "name": "American_larch"}, + {"id": 17613, "synset": "western_larch.n.01", "name": "western_larch"}, + {"id": 17614, "synset": "subalpine_larch.n.01", "name": "subalpine_larch"}, + {"id": 17615, "synset": "european_larch.n.01", "name": "European_larch"}, + {"id": 17616, "synset": "siberian_larch.n.01", "name": "Siberian_larch"}, + {"id": 17617, "synset": "golden_larch.n.01", "name": "golden_larch"}, + {"id": 17618, "synset": "fir.n.02", "name": "fir"}, + {"id": 17619, "synset": "silver_fir.n.01", "name": "silver_fir"}, + {"id": 17620, "synset": "amabilis_fir.n.01", "name": "amabilis_fir"}, + {"id": 17621, "synset": "european_silver_fir.n.01", "name": "European_silver_fir"}, + {"id": 17622, "synset": "white_fir.n.01", "name": "white_fir"}, + {"id": 17623, "synset": "balsam_fir.n.01", "name": "balsam_fir"}, + {"id": 17624, "synset": "fraser_fir.n.01", "name": "Fraser_fir"}, + {"id": 17625, "synset": "lowland_fir.n.01", "name": "lowland_fir"}, + {"id": 17626, "synset": "alpine_fir.n.01", "name": "Alpine_fir"}, + {"id": 17627, "synset": "santa_lucia_fir.n.01", "name": "Santa_Lucia_fir"}, + {"id": 17628, "synset": "cedar.n.03", "name": "cedar"}, + {"id": 17629, "synset": "cedar_of_lebanon.n.01", "name": "cedar_of_Lebanon"}, + {"id": 17630, "synset": "deodar.n.01", "name": "deodar"}, + {"id": 17631, "synset": "atlas_cedar.n.01", "name": "Atlas_cedar"}, + {"id": 17632, "synset": "spruce.n.02", "name": "spruce"}, + {"id": 17633, "synset": "norway_spruce.n.01", "name": "Norway_spruce"}, + {"id": 17634, "synset": "weeping_spruce.n.01", "name": "weeping_spruce"}, + {"id": 17635, "synset": "engelmann_spruce.n.01", "name": "Engelmann_spruce"}, + {"id": 17636, "synset": "white_spruce.n.01", "name": "white_spruce"}, + {"id": 17637, "synset": "black_spruce.n.01", "name": "black_spruce"}, + {"id": 17638, "synset": "siberian_spruce.n.01", "name": "Siberian_spruce"}, + {"id": 17639, "synset": "sitka_spruce.n.01", "name": "Sitka_spruce"}, + {"id": 17640, "synset": "oriental_spruce.n.01", "name": "oriental_spruce"}, + {"id": 17641, "synset": "colorado_spruce.n.01", "name": "Colorado_spruce"}, + {"id": 17642, "synset": "red_spruce.n.01", "name": "red_spruce"}, + {"id": 17643, "synset": "hemlock.n.04", "name": "hemlock"}, + {"id": 17644, "synset": "eastern_hemlock.n.01", "name": "eastern_hemlock"}, + {"id": 17645, "synset": "carolina_hemlock.n.01", "name": "Carolina_hemlock"}, + {"id": 17646, "synset": "mountain_hemlock.n.01", "name": "mountain_hemlock"}, + {"id": 17647, "synset": "western_hemlock.n.01", "name": "western_hemlock"}, + {"id": 17648, "synset": "douglas_fir.n.02", "name": "douglas_fir"}, + {"id": 17649, "synset": "green_douglas_fir.n.01", "name": "green_douglas_fir"}, + {"id": 17650, "synset": "big-cone_spruce.n.01", "name": "big-cone_spruce"}, + {"id": 17651, "synset": "cathaya.n.01", "name": "Cathaya"}, + {"id": 17652, "synset": "cedar.n.01", "name": "cedar"}, + {"id": 17653, "synset": "cypress.n.02", "name": "cypress"}, + {"id": 17654, "synset": "gowen_cypress.n.01", "name": "gowen_cypress"}, + {"id": 17655, "synset": "pygmy_cypress.n.01", "name": "pygmy_cypress"}, + {"id": 17656, "synset": "santa_cruz_cypress.n.01", "name": "Santa_Cruz_cypress"}, + {"id": 17657, "synset": "arizona_cypress.n.01", "name": "Arizona_cypress"}, + {"id": 17658, "synset": "guadalupe_cypress.n.01", "name": "Guadalupe_cypress"}, + {"id": 17659, "synset": "monterey_cypress.n.01", "name": "Monterey_cypress"}, + {"id": 17660, "synset": "mexican_cypress.n.01", "name": "Mexican_cypress"}, + {"id": 17661, "synset": "italian_cypress.n.01", "name": "Italian_cypress"}, + {"id": 17662, "synset": "king_william_pine.n.01", "name": "King_William_pine"}, + {"id": 17663, "synset": "chilean_cedar.n.01", "name": "Chilean_cedar"}, + {"id": 17664, "synset": "incense_cedar.n.02", "name": "incense_cedar"}, + { + "id": 17665, + "synset": "southern_white_cedar.n.01", + "name": "southern_white_cedar", + }, + {"id": 17666, "synset": "oregon_cedar.n.01", "name": "Oregon_cedar"}, + {"id": 17667, "synset": "yellow_cypress.n.01", "name": "yellow_cypress"}, + {"id": 17668, "synset": "japanese_cedar.n.01", "name": "Japanese_cedar"}, + {"id": 17669, "synset": "juniper_berry.n.01", "name": "juniper_berry"}, + {"id": 17670, "synset": "incense_cedar.n.01", "name": "incense_cedar"}, + {"id": 17671, "synset": "kawaka.n.01", "name": "kawaka"}, + {"id": 17672, "synset": "pahautea.n.01", "name": "pahautea"}, + {"id": 17673, "synset": "metasequoia.n.01", "name": "metasequoia"}, + {"id": 17674, "synset": "arborvitae.n.01", "name": "arborvitae"}, + {"id": 17675, "synset": "western_red_cedar.n.01", "name": "western_red_cedar"}, + {"id": 17676, "synset": "american_arborvitae.n.01", "name": "American_arborvitae"}, + {"id": 17677, "synset": "oriental_arborvitae.n.01", "name": "Oriental_arborvitae"}, + {"id": 17678, "synset": "hiba_arborvitae.n.01", "name": "hiba_arborvitae"}, + {"id": 17679, "synset": "keteleeria.n.01", "name": "keteleeria"}, + {"id": 17680, "synset": "wollemi_pine.n.01", "name": "Wollemi_pine"}, + {"id": 17681, "synset": "araucaria.n.01", "name": "araucaria"}, + {"id": 17682, "synset": "monkey_puzzle.n.01", "name": "monkey_puzzle"}, + {"id": 17683, "synset": "norfolk_island_pine.n.01", "name": "norfolk_island_pine"}, + {"id": 17684, "synset": "new_caledonian_pine.n.01", "name": "new_caledonian_pine"}, + {"id": 17685, "synset": "bunya_bunya.n.01", "name": "bunya_bunya"}, + {"id": 17686, "synset": "hoop_pine.n.01", "name": "hoop_pine"}, + {"id": 17687, "synset": "kauri_pine.n.01", "name": "kauri_pine"}, + {"id": 17688, "synset": "kauri.n.02", "name": "kauri"}, + {"id": 17689, "synset": "amboina_pine.n.01", "name": "amboina_pine"}, + {"id": 17690, "synset": "dundathu_pine.n.01", "name": "dundathu_pine"}, + {"id": 17691, "synset": "red_kauri.n.01", "name": "red_kauri"}, + {"id": 17692, "synset": "plum-yew.n.01", "name": "plum-yew"}, + {"id": 17693, "synset": "california_nutmeg.n.01", "name": "California_nutmeg"}, + {"id": 17694, "synset": "stinking_cedar.n.01", "name": "stinking_cedar"}, + {"id": 17695, "synset": "celery_pine.n.01", "name": "celery_pine"}, + {"id": 17696, "synset": "celery_top_pine.n.01", "name": "celery_top_pine"}, + {"id": 17697, "synset": "tanekaha.n.01", "name": "tanekaha"}, + {"id": 17698, "synset": "alpine_celery_pine.n.01", "name": "Alpine_celery_pine"}, + {"id": 17699, "synset": "yellowwood.n.02", "name": "yellowwood"}, + { + "id": 17700, + "synset": "gymnospermous_yellowwood.n.01", + "name": "gymnospermous_yellowwood", + }, + {"id": 17701, "synset": "podocarp.n.01", "name": "podocarp"}, + {"id": 17702, "synset": "yacca.n.01", "name": "yacca"}, + {"id": 17703, "synset": "brown_pine.n.01", "name": "brown_pine"}, + {"id": 17704, "synset": "cape_yellowwood.n.01", "name": "cape_yellowwood"}, + { + "id": 17705, + "synset": "south-african_yellowwood.n.01", + "name": "South-African_yellowwood", + }, + {"id": 17706, "synset": "alpine_totara.n.01", "name": "alpine_totara"}, + {"id": 17707, "synset": "totara.n.01", "name": "totara"}, + {"id": 17708, "synset": "common_yellowwood.n.01", "name": "common_yellowwood"}, + {"id": 17709, "synset": "kahikatea.n.01", "name": "kahikatea"}, + {"id": 17710, "synset": "rimu.n.01", "name": "rimu"}, + {"id": 17711, "synset": "tarwood.n.02", "name": "tarwood"}, + {"id": 17712, "synset": "common_sickle_pine.n.01", "name": "common_sickle_pine"}, + { + "id": 17713, + "synset": "yellow-leaf_sickle_pine.n.01", + "name": "yellow-leaf_sickle_pine", + }, + {"id": 17714, "synset": "tarwood.n.01", "name": "tarwood"}, + {"id": 17715, "synset": "westland_pine.n.01", "name": "westland_pine"}, + {"id": 17716, "synset": "huon_pine.n.01", "name": "huon_pine"}, + {"id": 17717, "synset": "chilean_rimu.n.01", "name": "Chilean_rimu"}, + {"id": 17718, "synset": "mountain_rimu.n.01", "name": "mountain_rimu"}, + {"id": 17719, "synset": "nagi.n.01", "name": "nagi"}, + {"id": 17720, "synset": "miro.n.01", "name": "miro"}, + {"id": 17721, "synset": "matai.n.01", "name": "matai"}, + {"id": 17722, "synset": "plum-fruited_yew.n.01", "name": "plum-fruited_yew"}, + {"id": 17723, "synset": "prince_albert_yew.n.01", "name": "Prince_Albert_yew"}, + {"id": 17724, "synset": "sundacarpus_amara.n.01", "name": "Sundacarpus_amara"}, + { + "id": 17725, + "synset": "japanese_umbrella_pine.n.01", + "name": "Japanese_umbrella_pine", + }, + {"id": 17726, "synset": "yew.n.02", "name": "yew"}, + {"id": 17727, "synset": "old_world_yew.n.01", "name": "Old_World_yew"}, + {"id": 17728, "synset": "pacific_yew.n.01", "name": "Pacific_yew"}, + {"id": 17729, "synset": "japanese_yew.n.01", "name": "Japanese_yew"}, + {"id": 17730, "synset": "florida_yew.n.01", "name": "Florida_yew"}, + {"id": 17731, "synset": "new_caledonian_yew.n.01", "name": "New_Caledonian_yew"}, + {"id": 17732, "synset": "white-berry_yew.n.01", "name": "white-berry_yew"}, + {"id": 17733, "synset": "ginkgo.n.01", "name": "ginkgo"}, + {"id": 17734, "synset": "angiosperm.n.01", "name": "angiosperm"}, + {"id": 17735, "synset": "dicot.n.01", "name": "dicot"}, + {"id": 17736, "synset": "monocot.n.01", "name": "monocot"}, + {"id": 17737, "synset": "floret.n.01", "name": "floret"}, + {"id": 17738, "synset": "flower.n.01", "name": "flower"}, + {"id": 17739, "synset": "bloomer.n.01", "name": "bloomer"}, + {"id": 17740, "synset": "wildflower.n.01", "name": "wildflower"}, + {"id": 17741, "synset": "apetalous_flower.n.01", "name": "apetalous_flower"}, + {"id": 17742, "synset": "inflorescence.n.02", "name": "inflorescence"}, + {"id": 17743, "synset": "rosebud.n.01", "name": "rosebud"}, + {"id": 17744, "synset": "gynostegium.n.01", "name": "gynostegium"}, + {"id": 17745, "synset": "pollinium.n.01", "name": "pollinium"}, + {"id": 17746, "synset": "pistil.n.01", "name": "pistil"}, + {"id": 17747, "synset": "gynobase.n.01", "name": "gynobase"}, + {"id": 17748, "synset": "gynophore.n.01", "name": "gynophore"}, + {"id": 17749, "synset": "stylopodium.n.01", "name": "stylopodium"}, + {"id": 17750, "synset": "carpophore.n.01", "name": "carpophore"}, + {"id": 17751, "synset": "cornstalk.n.01", "name": "cornstalk"}, + {"id": 17752, "synset": "petiolule.n.01", "name": "petiolule"}, + {"id": 17753, "synset": "mericarp.n.01", "name": "mericarp"}, + {"id": 17754, "synset": "micropyle.n.01", "name": "micropyle"}, + {"id": 17755, "synset": "germ_tube.n.01", "name": "germ_tube"}, + {"id": 17756, "synset": "pollen_tube.n.01", "name": "pollen_tube"}, + {"id": 17757, "synset": "gemma.n.01", "name": "gemma"}, + {"id": 17758, "synset": "galbulus.n.01", "name": "galbulus"}, + {"id": 17759, "synset": "nectary.n.01", "name": "nectary"}, + {"id": 17760, "synset": "pericarp.n.01", "name": "pericarp"}, + {"id": 17761, "synset": "epicarp.n.01", "name": "epicarp"}, + {"id": 17762, "synset": "mesocarp.n.01", "name": "mesocarp"}, + {"id": 17763, "synset": "pip.n.03", "name": "pip"}, + {"id": 17764, "synset": "silique.n.01", "name": "silique"}, + {"id": 17765, "synset": "cataphyll.n.01", "name": "cataphyll"}, + {"id": 17766, "synset": "perisperm.n.01", "name": "perisperm"}, + {"id": 17767, "synset": "monocarp.n.01", "name": "monocarp"}, + {"id": 17768, "synset": "sporophyte.n.01", "name": "sporophyte"}, + {"id": 17769, "synset": "gametophyte.n.01", "name": "gametophyte"}, + {"id": 17770, "synset": "megasporangium.n.01", "name": "megasporangium"}, + {"id": 17771, "synset": "microspore.n.01", "name": "microspore"}, + {"id": 17772, "synset": "microsporangium.n.01", "name": "microsporangium"}, + {"id": 17773, "synset": "microsporophyll.n.01", "name": "microsporophyll"}, + {"id": 17774, "synset": "archespore.n.01", "name": "archespore"}, + {"id": 17775, "synset": "bonduc_nut.n.01", "name": "bonduc_nut"}, + {"id": 17776, "synset": "job's_tears.n.01", "name": "Job's_tears"}, + {"id": 17777, "synset": "oilseed.n.01", "name": "oilseed"}, + {"id": 17778, "synset": "castor_bean.n.01", "name": "castor_bean"}, + {"id": 17779, "synset": "cottonseed.n.01", "name": "cottonseed"}, + {"id": 17780, "synset": "candlenut.n.02", "name": "candlenut"}, + {"id": 17781, "synset": "peach_pit.n.01", "name": "peach_pit"}, + {"id": 17782, "synset": "hypanthium.n.01", "name": "hypanthium"}, + {"id": 17783, "synset": "petal.n.01", "name": "petal"}, + {"id": 17784, "synset": "corolla.n.01", "name": "corolla"}, + {"id": 17785, "synset": "lip.n.02", "name": "lip"}, + {"id": 17786, "synset": "perianth.n.01", "name": "perianth"}, + {"id": 17787, "synset": "thistledown.n.01", "name": "thistledown"}, + {"id": 17788, "synset": "custard_apple.n.01", "name": "custard_apple"}, + {"id": 17789, "synset": "cherimoya.n.01", "name": "cherimoya"}, + {"id": 17790, "synset": "ilama.n.01", "name": "ilama"}, + {"id": 17791, "synset": "soursop.n.01", "name": "soursop"}, + {"id": 17792, "synset": "bullock's_heart.n.01", "name": "bullock's_heart"}, + {"id": 17793, "synset": "sweetsop.n.01", "name": "sweetsop"}, + {"id": 17794, "synset": "pond_apple.n.01", "name": "pond_apple"}, + {"id": 17795, "synset": "pawpaw.n.02", "name": "pawpaw"}, + {"id": 17796, "synset": "ilang-ilang.n.02", "name": "ilang-ilang"}, + {"id": 17797, "synset": "lancewood.n.02", "name": "lancewood"}, + {"id": 17798, "synset": "guinea_pepper.n.02", "name": "Guinea_pepper"}, + {"id": 17799, "synset": "barberry.n.01", "name": "barberry"}, + {"id": 17800, "synset": "american_barberry.n.01", "name": "American_barberry"}, + {"id": 17801, "synset": "common_barberry.n.01", "name": "common_barberry"}, + {"id": 17802, "synset": "japanese_barberry.n.01", "name": "Japanese_barberry"}, + {"id": 17803, "synset": "oregon_grape.n.02", "name": "Oregon_grape"}, + {"id": 17804, "synset": "oregon_grape.n.01", "name": "Oregon_grape"}, + {"id": 17805, "synset": "mayapple.n.01", "name": "mayapple"}, + {"id": 17806, "synset": "may_apple.n.01", "name": "May_apple"}, + {"id": 17807, "synset": "allspice.n.02", "name": "allspice"}, + {"id": 17808, "synset": "carolina_allspice.n.01", "name": "Carolina_allspice"}, + {"id": 17809, "synset": "spicebush.n.02", "name": "spicebush"}, + {"id": 17810, "synset": "katsura_tree.n.01", "name": "katsura_tree"}, + {"id": 17811, "synset": "laurel.n.01", "name": "laurel"}, + {"id": 17812, "synset": "true_laurel.n.01", "name": "true_laurel"}, + {"id": 17813, "synset": "camphor_tree.n.01", "name": "camphor_tree"}, + {"id": 17814, "synset": "cinnamon.n.02", "name": "cinnamon"}, + {"id": 17815, "synset": "cassia.n.03", "name": "cassia"}, + {"id": 17816, "synset": "cassia_bark.n.01", "name": "cassia_bark"}, + {"id": 17817, "synset": "saigon_cinnamon.n.01", "name": "Saigon_cinnamon"}, + {"id": 17818, "synset": "cinnamon_bark.n.01", "name": "cinnamon_bark"}, + {"id": 17819, "synset": "spicebush.n.01", "name": "spicebush"}, + {"id": 17820, "synset": "avocado.n.02", "name": "avocado"}, + {"id": 17821, "synset": "laurel-tree.n.01", "name": "laurel-tree"}, + {"id": 17822, "synset": "sassafras.n.01", "name": "sassafras"}, + {"id": 17823, "synset": "california_laurel.n.01", "name": "California_laurel"}, + {"id": 17824, "synset": "anise_tree.n.01", "name": "anise_tree"}, + {"id": 17825, "synset": "purple_anise.n.01", "name": "purple_anise"}, + {"id": 17826, "synset": "star_anise.n.02", "name": "star_anise"}, + {"id": 17827, "synset": "star_anise.n.01", "name": "star_anise"}, + {"id": 17828, "synset": "magnolia.n.02", "name": "magnolia"}, + {"id": 17829, "synset": "southern_magnolia.n.01", "name": "southern_magnolia"}, + {"id": 17830, "synset": "umbrella_tree.n.02", "name": "umbrella_tree"}, + { + "id": 17831, + "synset": "earleaved_umbrella_tree.n.01", + "name": "earleaved_umbrella_tree", + }, + {"id": 17832, "synset": "cucumber_tree.n.01", "name": "cucumber_tree"}, + { + "id": 17833, + "synset": "large-leaved_magnolia.n.01", + "name": "large-leaved_magnolia", + }, + {"id": 17834, "synset": "saucer_magnolia.n.01", "name": "saucer_magnolia"}, + {"id": 17835, "synset": "star_magnolia.n.01", "name": "star_magnolia"}, + {"id": 17836, "synset": "sweet_bay.n.01", "name": "sweet_bay"}, + {"id": 17837, "synset": "manglietia.n.01", "name": "manglietia"}, + {"id": 17838, "synset": "tulip_tree.n.01", "name": "tulip_tree"}, + {"id": 17839, "synset": "moonseed.n.01", "name": "moonseed"}, + {"id": 17840, "synset": "common_moonseed.n.01", "name": "common_moonseed"}, + {"id": 17841, "synset": "carolina_moonseed.n.01", "name": "Carolina_moonseed"}, + {"id": 17842, "synset": "nutmeg.n.01", "name": "nutmeg"}, + {"id": 17843, "synset": "water_nymph.n.02", "name": "water_nymph"}, + {"id": 17844, "synset": "european_white_lily.n.01", "name": "European_white_lily"}, + { + "id": 17845, + "synset": "southern_spatterdock.n.01", + "name": "southern_spatterdock", + }, + {"id": 17846, "synset": "lotus.n.01", "name": "lotus"}, + {"id": 17847, "synset": "water_chinquapin.n.01", "name": "water_chinquapin"}, + {"id": 17848, "synset": "water-shield.n.02", "name": "water-shield"}, + {"id": 17849, "synset": "water-shield.n.01", "name": "water-shield"}, + {"id": 17850, "synset": "peony.n.01", "name": "peony"}, + {"id": 17851, "synset": "buttercup.n.01", "name": "buttercup"}, + {"id": 17852, "synset": "meadow_buttercup.n.01", "name": "meadow_buttercup"}, + {"id": 17853, "synset": "water_crowfoot.n.01", "name": "water_crowfoot"}, + {"id": 17854, "synset": "lesser_celandine.n.01", "name": "lesser_celandine"}, + {"id": 17855, "synset": "lesser_spearwort.n.01", "name": "lesser_spearwort"}, + {"id": 17856, "synset": "greater_spearwort.n.01", "name": "greater_spearwort"}, + {"id": 17857, "synset": "western_buttercup.n.01", "name": "western_buttercup"}, + {"id": 17858, "synset": "creeping_buttercup.n.01", "name": "creeping_buttercup"}, + {"id": 17859, "synset": "cursed_crowfoot.n.01", "name": "cursed_crowfoot"}, + {"id": 17860, "synset": "aconite.n.01", "name": "aconite"}, + {"id": 17861, "synset": "monkshood.n.01", "name": "monkshood"}, + {"id": 17862, "synset": "wolfsbane.n.01", "name": "wolfsbane"}, + {"id": 17863, "synset": "baneberry.n.02", "name": "baneberry"}, + {"id": 17864, "synset": "baneberry.n.01", "name": "baneberry"}, + {"id": 17865, "synset": "red_baneberry.n.01", "name": "red_baneberry"}, + {"id": 17866, "synset": "pheasant's-eye.n.01", "name": "pheasant's-eye"}, + {"id": 17867, "synset": "anemone.n.01", "name": "anemone"}, + {"id": 17868, "synset": "alpine_anemone.n.01", "name": "Alpine_anemone"}, + {"id": 17869, "synset": "canada_anemone.n.01", "name": "Canada_anemone"}, + {"id": 17870, "synset": "thimbleweed.n.01", "name": "thimbleweed"}, + {"id": 17871, "synset": "wood_anemone.n.02", "name": "wood_anemone"}, + {"id": 17872, "synset": "wood_anemone.n.01", "name": "wood_anemone"}, + { + "id": 17873, + "synset": "longheaded_thimbleweed.n.01", + "name": "longheaded_thimbleweed", + }, + {"id": 17874, "synset": "snowdrop_anemone.n.01", "name": "snowdrop_anemone"}, + { + "id": 17875, + "synset": "virginia_thimbleweed.n.01", + "name": "Virginia_thimbleweed", + }, + {"id": 17876, "synset": "rue_anemone.n.01", "name": "rue_anemone"}, + {"id": 17877, "synset": "columbine.n.01", "name": "columbine"}, + {"id": 17878, "synset": "meeting_house.n.01", "name": "meeting_house"}, + {"id": 17879, "synset": "blue_columbine.n.01", "name": "blue_columbine"}, + {"id": 17880, "synset": "granny's_bonnets.n.01", "name": "granny's_bonnets"}, + {"id": 17881, "synset": "marsh_marigold.n.01", "name": "marsh_marigold"}, + {"id": 17882, "synset": "american_bugbane.n.01", "name": "American_bugbane"}, + {"id": 17883, "synset": "black_cohosh.n.01", "name": "black_cohosh"}, + {"id": 17884, "synset": "fetid_bugbane.n.01", "name": "fetid_bugbane"}, + {"id": 17885, "synset": "clematis.n.01", "name": "clematis"}, + {"id": 17886, "synset": "pine_hyacinth.n.01", "name": "pine_hyacinth"}, + {"id": 17887, "synset": "blue_jasmine.n.01", "name": "blue_jasmine"}, + {"id": 17888, "synset": "golden_clematis.n.01", "name": "golden_clematis"}, + {"id": 17889, "synset": "scarlet_clematis.n.01", "name": "scarlet_clematis"}, + {"id": 17890, "synset": "leather_flower.n.02", "name": "leather_flower"}, + {"id": 17891, "synset": "leather_flower.n.01", "name": "leather_flower"}, + {"id": 17892, "synset": "virgin's_bower.n.01", "name": "virgin's_bower"}, + {"id": 17893, "synset": "purple_clematis.n.01", "name": "purple_clematis"}, + {"id": 17894, "synset": "goldthread.n.01", "name": "goldthread"}, + {"id": 17895, "synset": "rocket_larkspur.n.01", "name": "rocket_larkspur"}, + {"id": 17896, "synset": "delphinium.n.01", "name": "delphinium"}, + {"id": 17897, "synset": "larkspur.n.01", "name": "larkspur"}, + {"id": 17898, "synset": "winter_aconite.n.01", "name": "winter_aconite"}, + {"id": 17899, "synset": "lenten_rose.n.01", "name": "lenten_rose"}, + {"id": 17900, "synset": "green_hellebore.n.01", "name": "green_hellebore"}, + {"id": 17901, "synset": "hepatica.n.01", "name": "hepatica"}, + {"id": 17902, "synset": "goldenseal.n.01", "name": "goldenseal"}, + {"id": 17903, "synset": "false_rue_anemone.n.01", "name": "false_rue_anemone"}, + {"id": 17904, "synset": "giant_buttercup.n.01", "name": "giant_buttercup"}, + {"id": 17905, "synset": "nigella.n.01", "name": "nigella"}, + {"id": 17906, "synset": "love-in-a-mist.n.03", "name": "love-in-a-mist"}, + {"id": 17907, "synset": "fennel_flower.n.01", "name": "fennel_flower"}, + {"id": 17908, "synset": "black_caraway.n.01", "name": "black_caraway"}, + {"id": 17909, "synset": "pasqueflower.n.01", "name": "pasqueflower"}, + {"id": 17910, "synset": "meadow_rue.n.01", "name": "meadow_rue"}, + {"id": 17911, "synset": "false_bugbane.n.01", "name": "false_bugbane"}, + {"id": 17912, "synset": "globeflower.n.01", "name": "globeflower"}, + {"id": 17913, "synset": "winter's_bark.n.02", "name": "winter's_bark"}, + {"id": 17914, "synset": "pepper_shrub.n.01", "name": "pepper_shrub"}, + {"id": 17915, "synset": "sweet_gale.n.01", "name": "sweet_gale"}, + {"id": 17916, "synset": "wax_myrtle.n.01", "name": "wax_myrtle"}, + {"id": 17917, "synset": "bay_myrtle.n.01", "name": "bay_myrtle"}, + {"id": 17918, "synset": "bayberry.n.02", "name": "bayberry"}, + {"id": 17919, "synset": "sweet_fern.n.02", "name": "sweet_fern"}, + {"id": 17920, "synset": "corkwood.n.01", "name": "corkwood"}, + {"id": 17921, "synset": "jointed_rush.n.01", "name": "jointed_rush"}, + {"id": 17922, "synset": "toad_rush.n.01", "name": "toad_rush"}, + {"id": 17923, "synset": "slender_rush.n.01", "name": "slender_rush"}, + {"id": 17924, "synset": "zebrawood.n.02", "name": "zebrawood"}, + {"id": 17925, "synset": "connarus_guianensis.n.01", "name": "Connarus_guianensis"}, + {"id": 17926, "synset": "legume.n.01", "name": "legume"}, + {"id": 17927, "synset": "peanut.n.01", "name": "peanut"}, + {"id": 17928, "synset": "granadilla_tree.n.01", "name": "granadilla_tree"}, + {"id": 17929, "synset": "arariba.n.01", "name": "arariba"}, + {"id": 17930, "synset": "tonka_bean.n.01", "name": "tonka_bean"}, + {"id": 17931, "synset": "courbaril.n.01", "name": "courbaril"}, + {"id": 17932, "synset": "melilotus.n.01", "name": "melilotus"}, + {"id": 17933, "synset": "darling_pea.n.01", "name": "darling_pea"}, + {"id": 17934, "synset": "smooth_darling_pea.n.01", "name": "smooth_darling_pea"}, + {"id": 17935, "synset": "clover.n.01", "name": "clover"}, + {"id": 17936, "synset": "alpine_clover.n.01", "name": "alpine_clover"}, + {"id": 17937, "synset": "hop_clover.n.02", "name": "hop_clover"}, + {"id": 17938, "synset": "crimson_clover.n.01", "name": "crimson_clover"}, + {"id": 17939, "synset": "red_clover.n.01", "name": "red_clover"}, + {"id": 17940, "synset": "buffalo_clover.n.02", "name": "buffalo_clover"}, + {"id": 17941, "synset": "white_clover.n.01", "name": "white_clover"}, + {"id": 17942, "synset": "mimosa.n.02", "name": "mimosa"}, + {"id": 17943, "synset": "acacia.n.01", "name": "acacia"}, + {"id": 17944, "synset": "shittah.n.01", "name": "shittah"}, + {"id": 17945, "synset": "wattle.n.03", "name": "wattle"}, + {"id": 17946, "synset": "black_wattle.n.01", "name": "black_wattle"}, + {"id": 17947, "synset": "gidgee.n.01", "name": "gidgee"}, + {"id": 17948, "synset": "catechu.n.02", "name": "catechu"}, + {"id": 17949, "synset": "silver_wattle.n.01", "name": "silver_wattle"}, + {"id": 17950, "synset": "huisache.n.01", "name": "huisache"}, + {"id": 17951, "synset": "lightwood.n.01", "name": "lightwood"}, + {"id": 17952, "synset": "golden_wattle.n.01", "name": "golden_wattle"}, + {"id": 17953, "synset": "fever_tree.n.04", "name": "fever_tree"}, + {"id": 17954, "synset": "coralwood.n.01", "name": "coralwood"}, + {"id": 17955, "synset": "albizzia.n.01", "name": "albizzia"}, + {"id": 17956, "synset": "silk_tree.n.01", "name": "silk_tree"}, + {"id": 17957, "synset": "siris.n.01", "name": "siris"}, + {"id": 17958, "synset": "rain_tree.n.01", "name": "rain_tree"}, + {"id": 17959, "synset": "calliandra.n.01", "name": "calliandra"}, + {"id": 17960, "synset": "conacaste.n.01", "name": "conacaste"}, + {"id": 17961, "synset": "inga.n.01", "name": "inga"}, + {"id": 17962, "synset": "ice-cream_bean.n.01", "name": "ice-cream_bean"}, + {"id": 17963, "synset": "guama.n.01", "name": "guama"}, + {"id": 17964, "synset": "lead_tree.n.01", "name": "lead_tree"}, + {"id": 17965, "synset": "wild_tamarind.n.02", "name": "wild_tamarind"}, + {"id": 17966, "synset": "sabicu.n.02", "name": "sabicu"}, + {"id": 17967, "synset": "nitta_tree.n.01", "name": "nitta_tree"}, + {"id": 17968, "synset": "parkia_javanica.n.01", "name": "Parkia_javanica"}, + {"id": 17969, "synset": "manila_tamarind.n.01", "name": "manila_tamarind"}, + {"id": 17970, "synset": "cat's-claw.n.01", "name": "cat's-claw"}, + {"id": 17971, "synset": "honey_mesquite.n.01", "name": "honey_mesquite"}, + {"id": 17972, "synset": "algarroba.n.03", "name": "algarroba"}, + {"id": 17973, "synset": "screw_bean.n.02", "name": "screw_bean"}, + {"id": 17974, "synset": "screw_bean.n.01", "name": "screw_bean"}, + {"id": 17975, "synset": "dogbane.n.01", "name": "dogbane"}, + {"id": 17976, "synset": "indian_hemp.n.03", "name": "Indian_hemp"}, + {"id": 17977, "synset": "bushman's_poison.n.01", "name": "bushman's_poison"}, + {"id": 17978, "synset": "impala_lily.n.01", "name": "impala_lily"}, + {"id": 17979, "synset": "allamanda.n.01", "name": "allamanda"}, + {"id": 17980, "synset": "common_allamanda.n.01", "name": "common_allamanda"}, + {"id": 17981, "synset": "dita.n.01", "name": "dita"}, + { + "id": 17982, + "synset": "nepal_trumpet_flower.n.01", + "name": "Nepal_trumpet_flower", + }, + {"id": 17983, "synset": "carissa.n.01", "name": "carissa"}, + {"id": 17984, "synset": "hedge_thorn.n.01", "name": "hedge_thorn"}, + {"id": 17985, "synset": "natal_plum.n.01", "name": "natal_plum"}, + {"id": 17986, "synset": "periwinkle.n.02", "name": "periwinkle"}, + {"id": 17987, "synset": "ivory_tree.n.01", "name": "ivory_tree"}, + {"id": 17988, "synset": "white_dipladenia.n.01", "name": "white_dipladenia"}, + {"id": 17989, "synset": "chilean_jasmine.n.01", "name": "Chilean_jasmine"}, + {"id": 17990, "synset": "oleander.n.01", "name": "oleander"}, + {"id": 17991, "synset": "frangipani.n.01", "name": "frangipani"}, + {"id": 17992, "synset": "west_indian_jasmine.n.01", "name": "West_Indian_jasmine"}, + {"id": 17993, "synset": "rauwolfia.n.02", "name": "rauwolfia"}, + {"id": 17994, "synset": "snakewood.n.01", "name": "snakewood"}, + {"id": 17995, "synset": "strophanthus_kombe.n.01", "name": "Strophanthus_kombe"}, + {"id": 17996, "synset": "yellow_oleander.n.01", "name": "yellow_oleander"}, + {"id": 17997, "synset": "myrtle.n.01", "name": "myrtle"}, + {"id": 17998, "synset": "large_periwinkle.n.01", "name": "large_periwinkle"}, + {"id": 17999, "synset": "arum.n.02", "name": "arum"}, + {"id": 18000, "synset": "cuckoopint.n.01", "name": "cuckoopint"}, + {"id": 18001, "synset": "black_calla.n.01", "name": "black_calla"}, + {"id": 18002, "synset": "calamus.n.02", "name": "calamus"}, + {"id": 18003, "synset": "alocasia.n.01", "name": "alocasia"}, + {"id": 18004, "synset": "giant_taro.n.01", "name": "giant_taro"}, + {"id": 18005, "synset": "amorphophallus.n.01", "name": "amorphophallus"}, + {"id": 18006, "synset": "pungapung.n.01", "name": "pungapung"}, + {"id": 18007, "synset": "devil's_tongue.n.01", "name": "devil's_tongue"}, + {"id": 18008, "synset": "anthurium.n.01", "name": "anthurium"}, + {"id": 18009, "synset": "flamingo_flower.n.01", "name": "flamingo_flower"}, + {"id": 18010, "synset": "jack-in-the-pulpit.n.01", "name": "jack-in-the-pulpit"}, + {"id": 18011, "synset": "friar's-cowl.n.01", "name": "friar's-cowl"}, + {"id": 18012, "synset": "caladium.n.01", "name": "caladium"}, + {"id": 18013, "synset": "caladium_bicolor.n.01", "name": "Caladium_bicolor"}, + {"id": 18014, "synset": "wild_calla.n.01", "name": "wild_calla"}, + {"id": 18015, "synset": "taro.n.02", "name": "taro"}, + {"id": 18016, "synset": "taro.n.01", "name": "taro"}, + {"id": 18017, "synset": "cryptocoryne.n.01", "name": "cryptocoryne"}, + {"id": 18018, "synset": "dracontium.n.01", "name": "dracontium"}, + {"id": 18019, "synset": "golden_pothos.n.01", "name": "golden_pothos"}, + {"id": 18020, "synset": "skunk_cabbage.n.02", "name": "skunk_cabbage"}, + {"id": 18021, "synset": "monstera.n.01", "name": "monstera"}, + {"id": 18022, "synset": "ceriman.n.01", "name": "ceriman"}, + {"id": 18023, "synset": "nephthytis.n.01", "name": "nephthytis"}, + {"id": 18024, "synset": "nephthytis_afzelii.n.01", "name": "Nephthytis_afzelii"}, + {"id": 18025, "synset": "arrow_arum.n.01", "name": "arrow_arum"}, + {"id": 18026, "synset": "green_arrow_arum.n.01", "name": "green_arrow_arum"}, + {"id": 18027, "synset": "philodendron.n.01", "name": "philodendron"}, + {"id": 18028, "synset": "pistia.n.01", "name": "pistia"}, + {"id": 18029, "synset": "pothos.n.01", "name": "pothos"}, + {"id": 18030, "synset": "spathiphyllum.n.01", "name": "spathiphyllum"}, + {"id": 18031, "synset": "skunk_cabbage.n.01", "name": "skunk_cabbage"}, + {"id": 18032, "synset": "yautia.n.01", "name": "yautia"}, + {"id": 18033, "synset": "calla_lily.n.01", "name": "calla_lily"}, + {"id": 18034, "synset": "pink_calla.n.01", "name": "pink_calla"}, + {"id": 18035, "synset": "golden_calla.n.01", "name": "golden_calla"}, + {"id": 18036, "synset": "duckweed.n.01", "name": "duckweed"}, + {"id": 18037, "synset": "common_duckweed.n.01", "name": "common_duckweed"}, + {"id": 18038, "synset": "star-duckweed.n.01", "name": "star-duckweed"}, + {"id": 18039, "synset": "great_duckweed.n.01", "name": "great_duckweed"}, + {"id": 18040, "synset": "watermeal.n.01", "name": "watermeal"}, + {"id": 18041, "synset": "common_wolffia.n.01", "name": "common_wolffia"}, + {"id": 18042, "synset": "aralia.n.01", "name": "aralia"}, + { + "id": 18043, + "synset": "american_angelica_tree.n.01", + "name": "American_angelica_tree", + }, + {"id": 18044, "synset": "american_spikenard.n.01", "name": "American_spikenard"}, + { + "id": 18045, + "synset": "bristly_sarsaparilla.n.01", + "name": "bristly_sarsaparilla", + }, + { + "id": 18046, + "synset": "japanese_angelica_tree.n.01", + "name": "Japanese_angelica_tree", + }, + {"id": 18047, "synset": "chinese_angelica.n.01", "name": "Chinese_angelica"}, + {"id": 18048, "synset": "ivy.n.01", "name": "ivy"}, + {"id": 18049, "synset": "puka.n.02", "name": "puka"}, + {"id": 18050, "synset": "ginseng.n.02", "name": "ginseng"}, + {"id": 18051, "synset": "ginseng.n.01", "name": "ginseng"}, + {"id": 18052, "synset": "umbrella_tree.n.01", "name": "umbrella_tree"}, + {"id": 18053, "synset": "birthwort.n.01", "name": "birthwort"}, + {"id": 18054, "synset": "dutchman's-pipe.n.01", "name": "Dutchman's-pipe"}, + {"id": 18055, "synset": "virginia_snakeroot.n.01", "name": "Virginia_snakeroot"}, + {"id": 18056, "synset": "canada_ginger.n.01", "name": "Canada_ginger"}, + {"id": 18057, "synset": "heartleaf.n.02", "name": "heartleaf"}, + {"id": 18058, "synset": "heartleaf.n.01", "name": "heartleaf"}, + {"id": 18059, "synset": "asarabacca.n.01", "name": "asarabacca"}, + { + "id": 18060, + "synset": "caryophyllaceous_plant.n.01", + "name": "caryophyllaceous_plant", + }, + {"id": 18061, "synset": "corn_cockle.n.01", "name": "corn_cockle"}, + {"id": 18062, "synset": "sandwort.n.03", "name": "sandwort"}, + {"id": 18063, "synset": "mountain_sandwort.n.01", "name": "mountain_sandwort"}, + { + "id": 18064, + "synset": "pine-barren_sandwort.n.01", + "name": "pine-barren_sandwort", + }, + {"id": 18065, "synset": "seabeach_sandwort.n.01", "name": "seabeach_sandwort"}, + {"id": 18066, "synset": "rock_sandwort.n.01", "name": "rock_sandwort"}, + { + "id": 18067, + "synset": "thyme-leaved_sandwort.n.01", + "name": "thyme-leaved_sandwort", + }, + {"id": 18068, "synset": "mouse-ear_chickweed.n.01", "name": "mouse-ear_chickweed"}, + {"id": 18069, "synset": "snow-in-summer.n.02", "name": "snow-in-summer"}, + {"id": 18070, "synset": "alpine_mouse-ear.n.01", "name": "Alpine_mouse-ear"}, + {"id": 18071, "synset": "pink.n.02", "name": "pink"}, + {"id": 18072, "synset": "sweet_william.n.01", "name": "sweet_William"}, + {"id": 18073, "synset": "china_pink.n.01", "name": "china_pink"}, + {"id": 18074, "synset": "japanese_pink.n.01", "name": "Japanese_pink"}, + {"id": 18075, "synset": "maiden_pink.n.01", "name": "maiden_pink"}, + {"id": 18076, "synset": "cheddar_pink.n.01", "name": "cheddar_pink"}, + {"id": 18077, "synset": "button_pink.n.01", "name": "button_pink"}, + {"id": 18078, "synset": "cottage_pink.n.01", "name": "cottage_pink"}, + {"id": 18079, "synset": "fringed_pink.n.02", "name": "fringed_pink"}, + {"id": 18080, "synset": "drypis.n.01", "name": "drypis"}, + {"id": 18081, "synset": "baby's_breath.n.01", "name": "baby's_breath"}, + {"id": 18082, "synset": "coral_necklace.n.01", "name": "coral_necklace"}, + {"id": 18083, "synset": "lychnis.n.01", "name": "lychnis"}, + {"id": 18084, "synset": "ragged_robin.n.01", "name": "ragged_robin"}, + {"id": 18085, "synset": "scarlet_lychnis.n.01", "name": "scarlet_lychnis"}, + {"id": 18086, "synset": "mullein_pink.n.01", "name": "mullein_pink"}, + {"id": 18087, "synset": "sandwort.n.02", "name": "sandwort"}, + {"id": 18088, "synset": "sandwort.n.01", "name": "sandwort"}, + {"id": 18089, "synset": "soapwort.n.01", "name": "soapwort"}, + {"id": 18090, "synset": "knawel.n.01", "name": "knawel"}, + {"id": 18091, "synset": "silene.n.01", "name": "silene"}, + {"id": 18092, "synset": "moss_campion.n.01", "name": "moss_campion"}, + {"id": 18093, "synset": "wild_pink.n.02", "name": "wild_pink"}, + {"id": 18094, "synset": "red_campion.n.01", "name": "red_campion"}, + {"id": 18095, "synset": "white_campion.n.01", "name": "white_campion"}, + {"id": 18096, "synset": "fire_pink.n.01", "name": "fire_pink"}, + {"id": 18097, "synset": "bladder_campion.n.01", "name": "bladder_campion"}, + {"id": 18098, "synset": "corn_spurry.n.01", "name": "corn_spurry"}, + {"id": 18099, "synset": "sand_spurry.n.01", "name": "sand_spurry"}, + {"id": 18100, "synset": "chickweed.n.01", "name": "chickweed"}, + {"id": 18101, "synset": "common_chickweed.n.01", "name": "common_chickweed"}, + {"id": 18102, "synset": "cowherb.n.01", "name": "cowherb"}, + {"id": 18103, "synset": "hottentot_fig.n.01", "name": "Hottentot_fig"}, + {"id": 18104, "synset": "livingstone_daisy.n.01", "name": "livingstone_daisy"}, + {"id": 18105, "synset": "fig_marigold.n.01", "name": "fig_marigold"}, + {"id": 18106, "synset": "ice_plant.n.01", "name": "ice_plant"}, + {"id": 18107, "synset": "new_zealand_spinach.n.01", "name": "New_Zealand_spinach"}, + {"id": 18108, "synset": "amaranth.n.02", "name": "amaranth"}, + {"id": 18109, "synset": "amaranth.n.01", "name": "amaranth"}, + {"id": 18110, "synset": "tumbleweed.n.04", "name": "tumbleweed"}, + {"id": 18111, "synset": "prince's-feather.n.02", "name": "prince's-feather"}, + {"id": 18112, "synset": "pigweed.n.02", "name": "pigweed"}, + {"id": 18113, "synset": "thorny_amaranth.n.01", "name": "thorny_amaranth"}, + {"id": 18114, "synset": "alligator_weed.n.01", "name": "alligator_weed"}, + {"id": 18115, "synset": "cockscomb.n.01", "name": "cockscomb"}, + {"id": 18116, "synset": "cottonweed.n.02", "name": "cottonweed"}, + {"id": 18117, "synset": "globe_amaranth.n.01", "name": "globe_amaranth"}, + {"id": 18118, "synset": "bloodleaf.n.01", "name": "bloodleaf"}, + {"id": 18119, "synset": "saltwort.n.02", "name": "saltwort"}, + {"id": 18120, "synset": "lamb's-quarters.n.01", "name": "lamb's-quarters"}, + {"id": 18121, "synset": "good-king-henry.n.01", "name": "good-king-henry"}, + {"id": 18122, "synset": "jerusalem_oak.n.01", "name": "Jerusalem_oak"}, + { + "id": 18123, + "synset": "oak-leaved_goosefoot.n.01", + "name": "oak-leaved_goosefoot", + }, + {"id": 18124, "synset": "sowbane.n.01", "name": "sowbane"}, + { + "id": 18125, + "synset": "nettle-leaved_goosefoot.n.01", + "name": "nettle-leaved_goosefoot", + }, + {"id": 18126, "synset": "red_goosefoot.n.01", "name": "red_goosefoot"}, + {"id": 18127, "synset": "stinking_goosefoot.n.01", "name": "stinking_goosefoot"}, + {"id": 18128, "synset": "orach.n.01", "name": "orach"}, + {"id": 18129, "synset": "saltbush.n.01", "name": "saltbush"}, + {"id": 18130, "synset": "garden_orache.n.01", "name": "garden_orache"}, + {"id": 18131, "synset": "desert_holly.n.01", "name": "desert_holly"}, + {"id": 18132, "synset": "quail_bush.n.01", "name": "quail_bush"}, + {"id": 18133, "synset": "beet.n.01", "name": "beet"}, + {"id": 18134, "synset": "beetroot.n.01", "name": "beetroot"}, + {"id": 18135, "synset": "chard.n.01", "name": "chard"}, + {"id": 18136, "synset": "mangel-wurzel.n.01", "name": "mangel-wurzel"}, + {"id": 18137, "synset": "winged_pigweed.n.01", "name": "winged_pigweed"}, + {"id": 18138, "synset": "halogeton.n.01", "name": "halogeton"}, + {"id": 18139, "synset": "glasswort.n.02", "name": "glasswort"}, + {"id": 18140, "synset": "saltwort.n.01", "name": "saltwort"}, + {"id": 18141, "synset": "russian_thistle.n.01", "name": "Russian_thistle"}, + {"id": 18142, "synset": "greasewood.n.01", "name": "greasewood"}, + {"id": 18143, "synset": "scarlet_musk_flower.n.01", "name": "scarlet_musk_flower"}, + {"id": 18144, "synset": "sand_verbena.n.01", "name": "sand_verbena"}, + {"id": 18145, "synset": "sweet_sand_verbena.n.01", "name": "sweet_sand_verbena"}, + {"id": 18146, "synset": "yellow_sand_verbena.n.01", "name": "yellow_sand_verbena"}, + {"id": 18147, "synset": "beach_pancake.n.01", "name": "beach_pancake"}, + {"id": 18148, "synset": "beach_sand_verbena.n.01", "name": "beach_sand_verbena"}, + {"id": 18149, "synset": "desert_sand_verbena.n.01", "name": "desert_sand_verbena"}, + { + "id": 18150, + "synset": "trailing_four_o'clock.n.01", + "name": "trailing_four_o'clock", + }, + {"id": 18151, "synset": "bougainvillea.n.01", "name": "bougainvillea"}, + {"id": 18152, "synset": "umbrellawort.n.01", "name": "umbrellawort"}, + {"id": 18153, "synset": "four_o'clock.n.01", "name": "four_o'clock"}, + {"id": 18154, "synset": "common_four-o'clock.n.01", "name": "common_four-o'clock"}, + { + "id": 18155, + "synset": "california_four_o'clock.n.01", + "name": "California_four_o'clock", + }, + {"id": 18156, "synset": "sweet_four_o'clock.n.01", "name": "sweet_four_o'clock"}, + {"id": 18157, "synset": "desert_four_o'clock.n.01", "name": "desert_four_o'clock"}, + { + "id": 18158, + "synset": "mountain_four_o'clock.n.01", + "name": "mountain_four_o'clock", + }, + {"id": 18159, "synset": "cockspur.n.02", "name": "cockspur"}, + {"id": 18160, "synset": "rattail_cactus.n.01", "name": "rattail_cactus"}, + {"id": 18161, "synset": "saguaro.n.01", "name": "saguaro"}, + { + "id": 18162, + "synset": "night-blooming_cereus.n.03", + "name": "night-blooming_cereus", + }, + {"id": 18163, "synset": "echinocactus.n.01", "name": "echinocactus"}, + {"id": 18164, "synset": "hedgehog_cactus.n.01", "name": "hedgehog_cactus"}, + { + "id": 18165, + "synset": "golden_barrel_cactus.n.01", + "name": "golden_barrel_cactus", + }, + {"id": 18166, "synset": "hedgehog_cereus.n.01", "name": "hedgehog_cereus"}, + {"id": 18167, "synset": "rainbow_cactus.n.01", "name": "rainbow_cactus"}, + {"id": 18168, "synset": "epiphyllum.n.01", "name": "epiphyllum"}, + {"id": 18169, "synset": "barrel_cactus.n.01", "name": "barrel_cactus"}, + { + "id": 18170, + "synset": "night-blooming_cereus.n.02", + "name": "night-blooming_cereus", + }, + {"id": 18171, "synset": "chichipe.n.01", "name": "chichipe"}, + {"id": 18172, "synset": "mescal.n.01", "name": "mescal"}, + {"id": 18173, "synset": "mescal_button.n.01", "name": "mescal_button"}, + {"id": 18174, "synset": "mammillaria.n.01", "name": "mammillaria"}, + {"id": 18175, "synset": "feather_ball.n.01", "name": "feather_ball"}, + {"id": 18176, "synset": "garambulla.n.01", "name": "garambulla"}, + {"id": 18177, "synset": "knowlton's_cactus.n.01", "name": "Knowlton's_cactus"}, + {"id": 18178, "synset": "nopal.n.02", "name": "nopal"}, + {"id": 18179, "synset": "prickly_pear.n.01", "name": "prickly_pear"}, + {"id": 18180, "synset": "cholla.n.01", "name": "cholla"}, + {"id": 18181, "synset": "nopal.n.01", "name": "nopal"}, + {"id": 18182, "synset": "tuna.n.01", "name": "tuna"}, + {"id": 18183, "synset": "barbados_gooseberry.n.01", "name": "Barbados_gooseberry"}, + {"id": 18184, "synset": "mistletoe_cactus.n.01", "name": "mistletoe_cactus"}, + {"id": 18185, "synset": "christmas_cactus.n.01", "name": "Christmas_cactus"}, + { + "id": 18186, + "synset": "night-blooming_cereus.n.01", + "name": "night-blooming_cereus", + }, + {"id": 18187, "synset": "crab_cactus.n.01", "name": "crab_cactus"}, + {"id": 18188, "synset": "pokeweed.n.01", "name": "pokeweed"}, + {"id": 18189, "synset": "indian_poke.n.02", "name": "Indian_poke"}, + {"id": 18190, "synset": "poke.n.01", "name": "poke"}, + {"id": 18191, "synset": "ombu.n.01", "name": "ombu"}, + {"id": 18192, "synset": "bloodberry.n.01", "name": "bloodberry"}, + {"id": 18193, "synset": "portulaca.n.01", "name": "portulaca"}, + {"id": 18194, "synset": "rose_moss.n.01", "name": "rose_moss"}, + {"id": 18195, "synset": "common_purslane.n.01", "name": "common_purslane"}, + {"id": 18196, "synset": "rock_purslane.n.01", "name": "rock_purslane"}, + {"id": 18197, "synset": "red_maids.n.01", "name": "red_maids"}, + { + "id": 18198, + "synset": "carolina_spring_beauty.n.01", + "name": "Carolina_spring_beauty", + }, + {"id": 18199, "synset": "spring_beauty.n.01", "name": "spring_beauty"}, + { + "id": 18200, + "synset": "virginia_spring_beauty.n.01", + "name": "Virginia_spring_beauty", + }, + {"id": 18201, "synset": "siskiyou_lewisia.n.01", "name": "siskiyou_lewisia"}, + {"id": 18202, "synset": "bitterroot.n.01", "name": "bitterroot"}, + {"id": 18203, "synset": "broad-leaved_montia.n.01", "name": "broad-leaved_montia"}, + {"id": 18204, "synset": "blinks.n.01", "name": "blinks"}, + {"id": 18205, "synset": "toad_lily.n.01", "name": "toad_lily"}, + {"id": 18206, "synset": "winter_purslane.n.01", "name": "winter_purslane"}, + {"id": 18207, "synset": "flame_flower.n.02", "name": "flame_flower"}, + {"id": 18208, "synset": "pigmy_talinum.n.01", "name": "pigmy_talinum"}, + {"id": 18209, "synset": "jewels-of-opar.n.01", "name": "jewels-of-opar"}, + {"id": 18210, "synset": "caper.n.01", "name": "caper"}, + {"id": 18211, "synset": "native_pomegranate.n.01", "name": "native_pomegranate"}, + {"id": 18212, "synset": "caper_tree.n.02", "name": "caper_tree"}, + {"id": 18213, "synset": "caper_tree.n.01", "name": "caper_tree"}, + {"id": 18214, "synset": "common_caper.n.01", "name": "common_caper"}, + {"id": 18215, "synset": "spiderflower.n.01", "name": "spiderflower"}, + { + "id": 18216, + "synset": "rocky_mountain_bee_plant.n.01", + "name": "Rocky_Mountain_bee_plant", + }, + {"id": 18217, "synset": "clammyweed.n.01", "name": "clammyweed"}, + {"id": 18218, "synset": "crucifer.n.01", "name": "crucifer"}, + {"id": 18219, "synset": "cress.n.01", "name": "cress"}, + {"id": 18220, "synset": "watercress.n.01", "name": "watercress"}, + {"id": 18221, "synset": "stonecress.n.01", "name": "stonecress"}, + {"id": 18222, "synset": "garlic_mustard.n.01", "name": "garlic_mustard"}, + {"id": 18223, "synset": "alyssum.n.01", "name": "alyssum"}, + {"id": 18224, "synset": "rose_of_jericho.n.02", "name": "rose_of_Jericho"}, + { + "id": 18225, + "synset": "arabidopsis_thaliana.n.01", + "name": "Arabidopsis_thaliana", + }, + {"id": 18226, "synset": "arabidopsis_lyrata.n.01", "name": "Arabidopsis_lyrata"}, + {"id": 18227, "synset": "rock_cress.n.01", "name": "rock_cress"}, + {"id": 18228, "synset": "sicklepod.n.02", "name": "sicklepod"}, + {"id": 18229, "synset": "tower_mustard.n.01", "name": "tower_mustard"}, + {"id": 18230, "synset": "horseradish.n.01", "name": "horseradish"}, + {"id": 18231, "synset": "winter_cress.n.01", "name": "winter_cress"}, + {"id": 18232, "synset": "yellow_rocket.n.01", "name": "yellow_rocket"}, + {"id": 18233, "synset": "hoary_alison.n.01", "name": "hoary_alison"}, + {"id": 18234, "synset": "buckler_mustard.n.01", "name": "buckler_mustard"}, + {"id": 18235, "synset": "wild_cabbage.n.01", "name": "wild_cabbage"}, + {"id": 18236, "synset": "cabbage.n.03", "name": "cabbage"}, + {"id": 18237, "synset": "head_cabbage.n.01", "name": "head_cabbage"}, + {"id": 18238, "synset": "savoy_cabbage.n.01", "name": "savoy_cabbage"}, + {"id": 18239, "synset": "brussels_sprout.n.01", "name": "brussels_sprout"}, + {"id": 18240, "synset": "cauliflower.n.01", "name": "cauliflower"}, + {"id": 18241, "synset": "collard.n.01", "name": "collard"}, + {"id": 18242, "synset": "kohlrabi.n.01", "name": "kohlrabi"}, + {"id": 18243, "synset": "turnip_plant.n.01", "name": "turnip_plant"}, + {"id": 18244, "synset": "rutabaga.n.02", "name": "rutabaga"}, + {"id": 18245, "synset": "broccoli_raab.n.01", "name": "broccoli_raab"}, + {"id": 18246, "synset": "mustard.n.01", "name": "mustard"}, + {"id": 18247, "synset": "chinese_mustard.n.01", "name": "chinese_mustard"}, + {"id": 18248, "synset": "bok_choy.n.01", "name": "bok_choy"}, + {"id": 18249, "synset": "rape.n.01", "name": "rape"}, + {"id": 18250, "synset": "rapeseed.n.01", "name": "rapeseed"}, + {"id": 18251, "synset": "shepherd's_purse.n.01", "name": "shepherd's_purse"}, + {"id": 18252, "synset": "lady's_smock.n.01", "name": "lady's_smock"}, + { + "id": 18253, + "synset": "coral-root_bittercress.n.01", + "name": "coral-root_bittercress", + }, + {"id": 18254, "synset": "crinkleroot.n.01", "name": "crinkleroot"}, + {"id": 18255, "synset": "american_watercress.n.01", "name": "American_watercress"}, + {"id": 18256, "synset": "spring_cress.n.01", "name": "spring_cress"}, + {"id": 18257, "synset": "purple_cress.n.01", "name": "purple_cress"}, + {"id": 18258, "synset": "wallflower.n.02", "name": "wallflower"}, + {"id": 18259, "synset": "prairie_rocket.n.02", "name": "prairie_rocket"}, + {"id": 18260, "synset": "scurvy_grass.n.01", "name": "scurvy_grass"}, + {"id": 18261, "synset": "sea_kale.n.01", "name": "sea_kale"}, + {"id": 18262, "synset": "tansy_mustard.n.01", "name": "tansy_mustard"}, + {"id": 18263, "synset": "draba.n.01", "name": "draba"}, + {"id": 18264, "synset": "wallflower.n.01", "name": "wallflower"}, + {"id": 18265, "synset": "prairie_rocket.n.01", "name": "prairie_rocket"}, + { + "id": 18266, + "synset": "siberian_wall_flower.n.01", + "name": "Siberian_wall_flower", + }, + {"id": 18267, "synset": "western_wall_flower.n.01", "name": "western_wall_flower"}, + {"id": 18268, "synset": "wormseed_mustard.n.01", "name": "wormseed_mustard"}, + {"id": 18269, "synset": "heliophila.n.01", "name": "heliophila"}, + {"id": 18270, "synset": "damask_violet.n.01", "name": "damask_violet"}, + {"id": 18271, "synset": "tansy-leaved_rocket.n.01", "name": "tansy-leaved_rocket"}, + {"id": 18272, "synset": "candytuft.n.01", "name": "candytuft"}, + {"id": 18273, "synset": "woad.n.02", "name": "woad"}, + {"id": 18274, "synset": "dyer's_woad.n.01", "name": "dyer's_woad"}, + {"id": 18275, "synset": "bladderpod.n.04", "name": "bladderpod"}, + {"id": 18276, "synset": "sweet_alyssum.n.01", "name": "sweet_alyssum"}, + {"id": 18277, "synset": "malcolm_stock.n.01", "name": "Malcolm_stock"}, + {"id": 18278, "synset": "virginian_stock.n.01", "name": "Virginian_stock"}, + {"id": 18279, "synset": "stock.n.12", "name": "stock"}, + {"id": 18280, "synset": "brompton_stock.n.01", "name": "brompton_stock"}, + {"id": 18281, "synset": "bladderpod.n.03", "name": "bladderpod"}, + {"id": 18282, "synset": "chamois_cress.n.01", "name": "chamois_cress"}, + {"id": 18283, "synset": "radish_plant.n.01", "name": "radish_plant"}, + {"id": 18284, "synset": "jointed_charlock.n.01", "name": "jointed_charlock"}, + {"id": 18285, "synset": "radish.n.04", "name": "radish"}, + {"id": 18286, "synset": "radish.n.02", "name": "radish"}, + {"id": 18287, "synset": "marsh_cress.n.01", "name": "marsh_cress"}, + {"id": 18288, "synset": "great_yellowcress.n.01", "name": "great_yellowcress"}, + {"id": 18289, "synset": "schizopetalon.n.01", "name": "schizopetalon"}, + {"id": 18290, "synset": "field_mustard.n.01", "name": "field_mustard"}, + {"id": 18291, "synset": "hedge_mustard.n.01", "name": "hedge_mustard"}, + {"id": 18292, "synset": "desert_plume.n.01", "name": "desert_plume"}, + {"id": 18293, "synset": "pennycress.n.01", "name": "pennycress"}, + {"id": 18294, "synset": "field_pennycress.n.01", "name": "field_pennycress"}, + {"id": 18295, "synset": "fringepod.n.01", "name": "fringepod"}, + {"id": 18296, "synset": "bladderpod.n.02", "name": "bladderpod"}, + {"id": 18297, "synset": "wasabi.n.01", "name": "wasabi"}, + {"id": 18298, "synset": "poppy.n.01", "name": "poppy"}, + {"id": 18299, "synset": "iceland_poppy.n.02", "name": "Iceland_poppy"}, + {"id": 18300, "synset": "western_poppy.n.01", "name": "western_poppy"}, + {"id": 18301, "synset": "prickly_poppy.n.02", "name": "prickly_poppy"}, + {"id": 18302, "synset": "iceland_poppy.n.01", "name": "Iceland_poppy"}, + {"id": 18303, "synset": "oriental_poppy.n.01", "name": "oriental_poppy"}, + {"id": 18304, "synset": "corn_poppy.n.01", "name": "corn_poppy"}, + {"id": 18305, "synset": "opium_poppy.n.01", "name": "opium_poppy"}, + {"id": 18306, "synset": "prickly_poppy.n.01", "name": "prickly_poppy"}, + {"id": 18307, "synset": "mexican_poppy.n.01", "name": "Mexican_poppy"}, + {"id": 18308, "synset": "bocconia.n.02", "name": "bocconia"}, + {"id": 18309, "synset": "celandine.n.02", "name": "celandine"}, + {"id": 18310, "synset": "corydalis.n.01", "name": "corydalis"}, + {"id": 18311, "synset": "climbing_corydalis.n.01", "name": "climbing_corydalis"}, + {"id": 18312, "synset": "california_poppy.n.01", "name": "California_poppy"}, + {"id": 18313, "synset": "horn_poppy.n.01", "name": "horn_poppy"}, + {"id": 18314, "synset": "golden_cup.n.01", "name": "golden_cup"}, + {"id": 18315, "synset": "plume_poppy.n.01", "name": "plume_poppy"}, + {"id": 18316, "synset": "blue_poppy.n.01", "name": "blue_poppy"}, + {"id": 18317, "synset": "welsh_poppy.n.01", "name": "Welsh_poppy"}, + {"id": 18318, "synset": "creamcups.n.01", "name": "creamcups"}, + {"id": 18319, "synset": "matilija_poppy.n.01", "name": "matilija_poppy"}, + {"id": 18320, "synset": "wind_poppy.n.01", "name": "wind_poppy"}, + {"id": 18321, "synset": "celandine_poppy.n.01", "name": "celandine_poppy"}, + {"id": 18322, "synset": "climbing_fumitory.n.01", "name": "climbing_fumitory"}, + {"id": 18323, "synset": "bleeding_heart.n.01", "name": "bleeding_heart"}, + {"id": 18324, "synset": "dutchman's_breeches.n.01", "name": "Dutchman's_breeches"}, + {"id": 18325, "synset": "squirrel_corn.n.01", "name": "squirrel_corn"}, + {"id": 18326, "synset": "composite.n.02", "name": "composite"}, + {"id": 18327, "synset": "compass_plant.n.02", "name": "compass_plant"}, + {"id": 18328, "synset": "everlasting.n.01", "name": "everlasting"}, + {"id": 18329, "synset": "achillea.n.01", "name": "achillea"}, + {"id": 18330, "synset": "yarrow.n.01", "name": "yarrow"}, + { + "id": 18331, + "synset": "pink-and-white_everlasting.n.01", + "name": "pink-and-white_everlasting", + }, + {"id": 18332, "synset": "white_snakeroot.n.01", "name": "white_snakeroot"}, + {"id": 18333, "synset": "ageratum.n.02", "name": "ageratum"}, + {"id": 18334, "synset": "common_ageratum.n.01", "name": "common_ageratum"}, + {"id": 18335, "synset": "sweet_sultan.n.03", "name": "sweet_sultan"}, + {"id": 18336, "synset": "ragweed.n.02", "name": "ragweed"}, + {"id": 18337, "synset": "common_ragweed.n.01", "name": "common_ragweed"}, + {"id": 18338, "synset": "great_ragweed.n.01", "name": "great_ragweed"}, + {"id": 18339, "synset": "western_ragweed.n.01", "name": "western_ragweed"}, + {"id": 18340, "synset": "ammobium.n.01", "name": "ammobium"}, + {"id": 18341, "synset": "winged_everlasting.n.01", "name": "winged_everlasting"}, + {"id": 18342, "synset": "pellitory.n.02", "name": "pellitory"}, + {"id": 18343, "synset": "pearly_everlasting.n.01", "name": "pearly_everlasting"}, + {"id": 18344, "synset": "andryala.n.01", "name": "andryala"}, + { + "id": 18345, + "synset": "plantain-leaved_pussytoes.n.01", + "name": "plantain-leaved_pussytoes", + }, + {"id": 18346, "synset": "field_pussytoes.n.01", "name": "field_pussytoes"}, + {"id": 18347, "synset": "solitary_pussytoes.n.01", "name": "solitary_pussytoes"}, + { + "id": 18348, + "synset": "mountain_everlasting.n.01", + "name": "mountain_everlasting", + }, + {"id": 18349, "synset": "mayweed.n.01", "name": "mayweed"}, + {"id": 18350, "synset": "yellow_chamomile.n.01", "name": "yellow_chamomile"}, + {"id": 18351, "synset": "corn_chamomile.n.01", "name": "corn_chamomile"}, + {"id": 18352, "synset": "woolly_daisy.n.01", "name": "woolly_daisy"}, + {"id": 18353, "synset": "burdock.n.01", "name": "burdock"}, + {"id": 18354, "synset": "great_burdock.n.01", "name": "great_burdock"}, + {"id": 18355, "synset": "african_daisy.n.03", "name": "African_daisy"}, + { + "id": 18356, + "synset": "blue-eyed_african_daisy.n.01", + "name": "blue-eyed_African_daisy", + }, + {"id": 18357, "synset": "marguerite.n.02", "name": "marguerite"}, + {"id": 18358, "synset": "silversword.n.01", "name": "silversword"}, + {"id": 18359, "synset": "arnica.n.02", "name": "arnica"}, + {"id": 18360, "synset": "heartleaf_arnica.n.01", "name": "heartleaf_arnica"}, + {"id": 18361, "synset": "arnica_montana.n.01", "name": "Arnica_montana"}, + {"id": 18362, "synset": "lamb_succory.n.01", "name": "lamb_succory"}, + {"id": 18363, "synset": "artemisia.n.01", "name": "artemisia"}, + {"id": 18364, "synset": "mugwort.n.01", "name": "mugwort"}, + {"id": 18365, "synset": "sweet_wormwood.n.01", "name": "sweet_wormwood"}, + {"id": 18366, "synset": "field_wormwood.n.01", "name": "field_wormwood"}, + {"id": 18367, "synset": "tarragon.n.01", "name": "tarragon"}, + {"id": 18368, "synset": "sand_sage.n.01", "name": "sand_sage"}, + {"id": 18369, "synset": "wormwood_sage.n.01", "name": "wormwood_sage"}, + {"id": 18370, "synset": "western_mugwort.n.01", "name": "western_mugwort"}, + {"id": 18371, "synset": "roman_wormwood.n.01", "name": "Roman_wormwood"}, + {"id": 18372, "synset": "bud_brush.n.01", "name": "bud_brush"}, + {"id": 18373, "synset": "common_mugwort.n.01", "name": "common_mugwort"}, + {"id": 18374, "synset": "aster.n.01", "name": "aster"}, + {"id": 18375, "synset": "wood_aster.n.01", "name": "wood_aster"}, + {"id": 18376, "synset": "whorled_aster.n.01", "name": "whorled_aster"}, + {"id": 18377, "synset": "heath_aster.n.02", "name": "heath_aster"}, + {"id": 18378, "synset": "heart-leaved_aster.n.01", "name": "heart-leaved_aster"}, + {"id": 18379, "synset": "white_wood_aster.n.01", "name": "white_wood_aster"}, + {"id": 18380, "synset": "bushy_aster.n.01", "name": "bushy_aster"}, + {"id": 18381, "synset": "heath_aster.n.01", "name": "heath_aster"}, + {"id": 18382, "synset": "white_prairie_aster.n.01", "name": "white_prairie_aster"}, + {"id": 18383, "synset": "stiff_aster.n.01", "name": "stiff_aster"}, + {"id": 18384, "synset": "goldilocks.n.01", "name": "goldilocks"}, + {"id": 18385, "synset": "large-leaved_aster.n.01", "name": "large-leaved_aster"}, + {"id": 18386, "synset": "new_england_aster.n.01", "name": "New_England_aster"}, + {"id": 18387, "synset": "michaelmas_daisy.n.01", "name": "Michaelmas_daisy"}, + {"id": 18388, "synset": "upland_white_aster.n.01", "name": "upland_white_aster"}, + {"id": 18389, "synset": "short's_aster.n.01", "name": "Short's_aster"}, + {"id": 18390, "synset": "sea_aster.n.01", "name": "sea_aster"}, + {"id": 18391, "synset": "prairie_aster.n.01", "name": "prairie_aster"}, + { + "id": 18392, + "synset": "annual_salt-marsh_aster.n.01", + "name": "annual_salt-marsh_aster", + }, + {"id": 18393, "synset": "aromatic_aster.n.01", "name": "aromatic_aster"}, + {"id": 18394, "synset": "arrow_leaved_aster.n.01", "name": "arrow_leaved_aster"}, + {"id": 18395, "synset": "azure_aster.n.01", "name": "azure_aster"}, + {"id": 18396, "synset": "bog_aster.n.01", "name": "bog_aster"}, + { + "id": 18397, + "synset": "crooked-stemmed_aster.n.01", + "name": "crooked-stemmed_aster", + }, + { + "id": 18398, + "synset": "eastern_silvery_aster.n.01", + "name": "Eastern_silvery_aster", + }, + { + "id": 18399, + "synset": "flat-topped_white_aster.n.01", + "name": "flat-topped_white_aster", + }, + {"id": 18400, "synset": "late_purple_aster.n.01", "name": "late_purple_aster"}, + {"id": 18401, "synset": "panicled_aster.n.01", "name": "panicled_aster"}, + { + "id": 18402, + "synset": "perennial_salt_marsh_aster.n.01", + "name": "perennial_salt_marsh_aster", + }, + { + "id": 18403, + "synset": "purple-stemmed_aster.n.01", + "name": "purple-stemmed_aster", + }, + {"id": 18404, "synset": "rough-leaved_aster.n.01", "name": "rough-leaved_aster"}, + {"id": 18405, "synset": "rush_aster.n.01", "name": "rush_aster"}, + {"id": 18406, "synset": "schreiber's_aster.n.01", "name": "Schreiber's_aster"}, + {"id": 18407, "synset": "small_white_aster.n.01", "name": "small_white_aster"}, + {"id": 18408, "synset": "smooth_aster.n.01", "name": "smooth_aster"}, + {"id": 18409, "synset": "southern_aster.n.01", "name": "southern_aster"}, + {"id": 18410, "synset": "starved_aster.n.01", "name": "starved_aster"}, + {"id": 18411, "synset": "tradescant's_aster.n.01", "name": "tradescant's_aster"}, + {"id": 18412, "synset": "wavy-leaved_aster.n.01", "name": "wavy-leaved_aster"}, + { + "id": 18413, + "synset": "western_silvery_aster.n.01", + "name": "Western_silvery_aster", + }, + {"id": 18414, "synset": "willow_aster.n.01", "name": "willow_aster"}, + {"id": 18415, "synset": "ayapana.n.01", "name": "ayapana"}, + {"id": 18416, "synset": "mule_fat.n.01", "name": "mule_fat"}, + {"id": 18417, "synset": "balsamroot.n.01", "name": "balsamroot"}, + {"id": 18418, "synset": "daisy.n.01", "name": "daisy"}, + {"id": 18419, "synset": "common_daisy.n.01", "name": "common_daisy"}, + {"id": 18420, "synset": "bur_marigold.n.01", "name": "bur_marigold"}, + {"id": 18421, "synset": "spanish_needles.n.02", "name": "Spanish_needles"}, + {"id": 18422, "synset": "tickseed_sunflower.n.01", "name": "tickseed_sunflower"}, + { + "id": 18423, + "synset": "european_beggar-ticks.n.01", + "name": "European_beggar-ticks", + }, + {"id": 18424, "synset": "slender_knapweed.n.01", "name": "slender_knapweed"}, + {"id": 18425, "synset": "false_chamomile.n.01", "name": "false_chamomile"}, + {"id": 18426, "synset": "swan_river_daisy.n.01", "name": "Swan_River_daisy"}, + {"id": 18427, "synset": "woodland_oxeye.n.01", "name": "woodland_oxeye"}, + {"id": 18428, "synset": "indian_plantain.n.01", "name": "Indian_plantain"}, + {"id": 18429, "synset": "calendula.n.01", "name": "calendula"}, + {"id": 18430, "synset": "common_marigold.n.01", "name": "common_marigold"}, + {"id": 18431, "synset": "china_aster.n.01", "name": "China_aster"}, + {"id": 18432, "synset": "thistle.n.01", "name": "thistle"}, + {"id": 18433, "synset": "welted_thistle.n.01", "name": "welted_thistle"}, + {"id": 18434, "synset": "musk_thistle.n.01", "name": "musk_thistle"}, + {"id": 18435, "synset": "carline_thistle.n.01", "name": "carline_thistle"}, + { + "id": 18436, + "synset": "stemless_carline_thistle.n.01", + "name": "stemless_carline_thistle", + }, + { + "id": 18437, + "synset": "common_carline_thistle.n.01", + "name": "common_carline_thistle", + }, + {"id": 18438, "synset": "safflower.n.01", "name": "safflower"}, + {"id": 18439, "synset": "safflower_seed.n.01", "name": "safflower_seed"}, + {"id": 18440, "synset": "catananche.n.01", "name": "catananche"}, + {"id": 18441, "synset": "blue_succory.n.01", "name": "blue_succory"}, + {"id": 18442, "synset": "centaury.n.02", "name": "centaury"}, + {"id": 18443, "synset": "dusty_miller.n.03", "name": "dusty_miller"}, + {"id": 18444, "synset": "cornflower.n.02", "name": "cornflower"}, + {"id": 18445, "synset": "star-thistle.n.01", "name": "star-thistle"}, + {"id": 18446, "synset": "knapweed.n.01", "name": "knapweed"}, + {"id": 18447, "synset": "sweet_sultan.n.02", "name": "sweet_sultan"}, + {"id": 18448, "synset": "great_knapweed.n.01", "name": "great_knapweed"}, + {"id": 18449, "synset": "barnaby's_thistle.n.01", "name": "Barnaby's_thistle"}, + {"id": 18450, "synset": "chamomile.n.01", "name": "chamomile"}, + {"id": 18451, "synset": "chaenactis.n.01", "name": "chaenactis"}, + {"id": 18452, "synset": "chrysanthemum.n.02", "name": "chrysanthemum"}, + {"id": 18453, "synset": "corn_marigold.n.01", "name": "corn_marigold"}, + {"id": 18454, "synset": "crown_daisy.n.01", "name": "crown_daisy"}, + {"id": 18455, "synset": "chop-suey_greens.n.01", "name": "chop-suey_greens"}, + {"id": 18456, "synset": "golden_aster.n.01", "name": "golden_aster"}, + { + "id": 18457, + "synset": "maryland_golden_aster.n.01", + "name": "Maryland_golden_aster", + }, + {"id": 18458, "synset": "goldenbush.n.02", "name": "goldenbush"}, + {"id": 18459, "synset": "rabbit_brush.n.01", "name": "rabbit_brush"}, + {"id": 18460, "synset": "chicory.n.02", "name": "chicory"}, + {"id": 18461, "synset": "endive.n.01", "name": "endive"}, + {"id": 18462, "synset": "chicory.n.01", "name": "chicory"}, + {"id": 18463, "synset": "plume_thistle.n.01", "name": "plume_thistle"}, + {"id": 18464, "synset": "canada_thistle.n.01", "name": "Canada_thistle"}, + {"id": 18465, "synset": "field_thistle.n.01", "name": "field_thistle"}, + {"id": 18466, "synset": "woolly_thistle.n.02", "name": "woolly_thistle"}, + { + "id": 18467, + "synset": "european_woolly_thistle.n.01", + "name": "European_woolly_thistle", + }, + {"id": 18468, "synset": "melancholy_thistle.n.01", "name": "melancholy_thistle"}, + {"id": 18469, "synset": "brook_thistle.n.01", "name": "brook_thistle"}, + {"id": 18470, "synset": "bull_thistle.n.01", "name": "bull_thistle"}, + {"id": 18471, "synset": "blessed_thistle.n.02", "name": "blessed_thistle"}, + {"id": 18472, "synset": "mistflower.n.01", "name": "mistflower"}, + {"id": 18473, "synset": "horseweed.n.02", "name": "horseweed"}, + {"id": 18474, "synset": "coreopsis.n.01", "name": "coreopsis"}, + {"id": 18475, "synset": "giant_coreopsis.n.01", "name": "giant_coreopsis"}, + {"id": 18476, "synset": "sea_dahlia.n.01", "name": "sea_dahlia"}, + {"id": 18477, "synset": "calliopsis.n.01", "name": "calliopsis"}, + {"id": 18478, "synset": "cosmos.n.02", "name": "cosmos"}, + {"id": 18479, "synset": "brass_buttons.n.01", "name": "brass_buttons"}, + {"id": 18480, "synset": "billy_buttons.n.01", "name": "billy_buttons"}, + {"id": 18481, "synset": "hawk's-beard.n.01", "name": "hawk's-beard"}, + {"id": 18482, "synset": "artichoke.n.01", "name": "artichoke"}, + {"id": 18483, "synset": "cardoon.n.01", "name": "cardoon"}, + {"id": 18484, "synset": "dahlia.n.01", "name": "dahlia"}, + {"id": 18485, "synset": "german_ivy.n.01", "name": "German_ivy"}, + { + "id": 18486, + "synset": "florist's_chrysanthemum.n.01", + "name": "florist's_chrysanthemum", + }, + {"id": 18487, "synset": "cape_marigold.n.01", "name": "cape_marigold"}, + {"id": 18488, "synset": "leopard's-bane.n.01", "name": "leopard's-bane"}, + {"id": 18489, "synset": "coneflower.n.03", "name": "coneflower"}, + {"id": 18490, "synset": "globe_thistle.n.01", "name": "globe_thistle"}, + {"id": 18491, "synset": "elephant's-foot.n.02", "name": "elephant's-foot"}, + {"id": 18492, "synset": "tassel_flower.n.01", "name": "tassel_flower"}, + {"id": 18493, "synset": "brittlebush.n.01", "name": "brittlebush"}, + {"id": 18494, "synset": "sunray.n.02", "name": "sunray"}, + {"id": 18495, "synset": "engelmannia.n.01", "name": "engelmannia"}, + {"id": 18496, "synset": "fireweed.n.02", "name": "fireweed"}, + {"id": 18497, "synset": "fleabane.n.02", "name": "fleabane"}, + {"id": 18498, "synset": "blue_fleabane.n.01", "name": "blue_fleabane"}, + {"id": 18499, "synset": "daisy_fleabane.n.01", "name": "daisy_fleabane"}, + {"id": 18500, "synset": "orange_daisy.n.01", "name": "orange_daisy"}, + {"id": 18501, "synset": "spreading_fleabane.n.01", "name": "spreading_fleabane"}, + {"id": 18502, "synset": "seaside_daisy.n.01", "name": "seaside_daisy"}, + { + "id": 18503, + "synset": "philadelphia_fleabane.n.01", + "name": "Philadelphia_fleabane", + }, + {"id": 18504, "synset": "robin's_plantain.n.01", "name": "robin's_plantain"}, + {"id": 18505, "synset": "showy_daisy.n.01", "name": "showy_daisy"}, + {"id": 18506, "synset": "woolly_sunflower.n.01", "name": "woolly_sunflower"}, + {"id": 18507, "synset": "golden_yarrow.n.01", "name": "golden_yarrow"}, + {"id": 18508, "synset": "dog_fennel.n.01", "name": "dog_fennel"}, + {"id": 18509, "synset": "joe-pye_weed.n.02", "name": "Joe-Pye_weed"}, + {"id": 18510, "synset": "boneset.n.02", "name": "boneset"}, + {"id": 18511, "synset": "joe-pye_weed.n.01", "name": "Joe-Pye_weed"}, + {"id": 18512, "synset": "blue_daisy.n.01", "name": "blue_daisy"}, + {"id": 18513, "synset": "kingfisher_daisy.n.01", "name": "kingfisher_daisy"}, + {"id": 18514, "synset": "cotton_rose.n.02", "name": "cotton_rose"}, + {"id": 18515, "synset": "herba_impia.n.01", "name": "herba_impia"}, + {"id": 18516, "synset": "gaillardia.n.01", "name": "gaillardia"}, + {"id": 18517, "synset": "gazania.n.01", "name": "gazania"}, + {"id": 18518, "synset": "treasure_flower.n.01", "name": "treasure_flower"}, + {"id": 18519, "synset": "african_daisy.n.02", "name": "African_daisy"}, + {"id": 18520, "synset": "barberton_daisy.n.01", "name": "Barberton_daisy"}, + {"id": 18521, "synset": "desert_sunflower.n.01", "name": "desert_sunflower"}, + {"id": 18522, "synset": "cudweed.n.01", "name": "cudweed"}, + {"id": 18523, "synset": "chafeweed.n.01", "name": "chafeweed"}, + {"id": 18524, "synset": "gumweed.n.01", "name": "gumweed"}, + {"id": 18525, "synset": "grindelia_robusta.n.01", "name": "Grindelia_robusta"}, + {"id": 18526, "synset": "curlycup_gumweed.n.01", "name": "curlycup_gumweed"}, + { + "id": 18527, + "synset": "little-head_snakeweed.n.01", + "name": "little-head_snakeweed", + }, + {"id": 18528, "synset": "rabbitweed.n.01", "name": "rabbitweed"}, + {"id": 18529, "synset": "broomweed.n.01", "name": "broomweed"}, + {"id": 18530, "synset": "velvet_plant.n.02", "name": "velvet_plant"}, + {"id": 18531, "synset": "goldenbush.n.01", "name": "goldenbush"}, + {"id": 18532, "synset": "camphor_daisy.n.01", "name": "camphor_daisy"}, + {"id": 18533, "synset": "yellow_spiny_daisy.n.01", "name": "yellow_spiny_daisy"}, + {"id": 18534, "synset": "hoary_golden_bush.n.01", "name": "hoary_golden_bush"}, + {"id": 18535, "synset": "sneezeweed.n.01", "name": "sneezeweed"}, + {"id": 18536, "synset": "orange_sneezeweed.n.01", "name": "orange_sneezeweed"}, + {"id": 18537, "synset": "rosilla.n.01", "name": "rosilla"}, + {"id": 18538, "synset": "swamp_sunflower.n.01", "name": "swamp_sunflower"}, + {"id": 18539, "synset": "common_sunflower.n.01", "name": "common_sunflower"}, + {"id": 18540, "synset": "giant_sunflower.n.01", "name": "giant_sunflower"}, + {"id": 18541, "synset": "showy_sunflower.n.01", "name": "showy_sunflower"}, + { + "id": 18542, + "synset": "maximilian's_sunflower.n.01", + "name": "Maximilian's_sunflower", + }, + {"id": 18543, "synset": "prairie_sunflower.n.01", "name": "prairie_sunflower"}, + {"id": 18544, "synset": "jerusalem_artichoke.n.02", "name": "Jerusalem_artichoke"}, + {"id": 18545, "synset": "jerusalem_artichoke.n.01", "name": "Jerusalem_artichoke"}, + {"id": 18546, "synset": "strawflower.n.03", "name": "strawflower"}, + {"id": 18547, "synset": "heliopsis.n.01", "name": "heliopsis"}, + {"id": 18548, "synset": "strawflower.n.02", "name": "strawflower"}, + {"id": 18549, "synset": "hairy_golden_aster.n.01", "name": "hairy_golden_aster"}, + {"id": 18550, "synset": "hawkweed.n.02", "name": "hawkweed"}, + {"id": 18551, "synset": "rattlesnake_weed.n.01", "name": "rattlesnake_weed"}, + {"id": 18552, "synset": "alpine_coltsfoot.n.01", "name": "alpine_coltsfoot"}, + {"id": 18553, "synset": "alpine_gold.n.01", "name": "alpine_gold"}, + {"id": 18554, "synset": "dwarf_hulsea.n.01", "name": "dwarf_hulsea"}, + {"id": 18555, "synset": "cat's-ear.n.02", "name": "cat's-ear"}, + {"id": 18556, "synset": "inula.n.01", "name": "inula"}, + {"id": 18557, "synset": "marsh_elder.n.01", "name": "marsh_elder"}, + {"id": 18558, "synset": "burweed_marsh_elder.n.01", "name": "burweed_marsh_elder"}, + {"id": 18559, "synset": "krigia.n.01", "name": "krigia"}, + {"id": 18560, "synset": "dwarf_dandelion.n.01", "name": "dwarf_dandelion"}, + {"id": 18561, "synset": "garden_lettuce.n.01", "name": "garden_lettuce"}, + {"id": 18562, "synset": "cos_lettuce.n.01", "name": "cos_lettuce"}, + {"id": 18563, "synset": "leaf_lettuce.n.01", "name": "leaf_lettuce"}, + {"id": 18564, "synset": "celtuce.n.01", "name": "celtuce"}, + {"id": 18565, "synset": "prickly_lettuce.n.01", "name": "prickly_lettuce"}, + {"id": 18566, "synset": "goldfields.n.01", "name": "goldfields"}, + {"id": 18567, "synset": "tidytips.n.01", "name": "tidytips"}, + {"id": 18568, "synset": "hawkbit.n.01", "name": "hawkbit"}, + {"id": 18569, "synset": "fall_dandelion.n.01", "name": "fall_dandelion"}, + {"id": 18570, "synset": "edelweiss.n.01", "name": "edelweiss"}, + {"id": 18571, "synset": "oxeye_daisy.n.02", "name": "oxeye_daisy"}, + {"id": 18572, "synset": "oxeye_daisy.n.01", "name": "oxeye_daisy"}, + {"id": 18573, "synset": "shasta_daisy.n.01", "name": "shasta_daisy"}, + {"id": 18574, "synset": "pyrenees_daisy.n.01", "name": "Pyrenees_daisy"}, + { + "id": 18575, + "synset": "north_island_edelweiss.n.01", + "name": "north_island_edelweiss", + }, + {"id": 18576, "synset": "blazing_star.n.02", "name": "blazing_star"}, + {"id": 18577, "synset": "dotted_gayfeather.n.01", "name": "dotted_gayfeather"}, + {"id": 18578, "synset": "dense_blazing_star.n.01", "name": "dense_blazing_star"}, + {"id": 18579, "synset": "texas_star.n.02", "name": "Texas_star"}, + {"id": 18580, "synset": "african_daisy.n.01", "name": "African_daisy"}, + {"id": 18581, "synset": "tahoka_daisy.n.01", "name": "tahoka_daisy"}, + {"id": 18582, "synset": "sticky_aster.n.01", "name": "sticky_aster"}, + {"id": 18583, "synset": "mojave_aster.n.01", "name": "Mojave_aster"}, + {"id": 18584, "synset": "tarweed.n.01", "name": "tarweed"}, + { + "id": 18585, + "synset": "sweet_false_chamomile.n.01", + "name": "sweet_false_chamomile", + }, + {"id": 18586, "synset": "pineapple_weed.n.01", "name": "pineapple_weed"}, + {"id": 18587, "synset": "climbing_hempweed.n.01", "name": "climbing_hempweed"}, + {"id": 18588, "synset": "mutisia.n.01", "name": "mutisia"}, + {"id": 18589, "synset": "rattlesnake_root.n.02", "name": "rattlesnake_root"}, + {"id": 18590, "synset": "white_lettuce.n.01", "name": "white_lettuce"}, + {"id": 18591, "synset": "daisybush.n.01", "name": "daisybush"}, + { + "id": 18592, + "synset": "new_zealand_daisybush.n.01", + "name": "New_Zealand_daisybush", + }, + {"id": 18593, "synset": "cotton_thistle.n.01", "name": "cotton_thistle"}, + {"id": 18594, "synset": "othonna.n.01", "name": "othonna"}, + {"id": 18595, "synset": "cascade_everlasting.n.01", "name": "cascade_everlasting"}, + {"id": 18596, "synset": "butterweed.n.02", "name": "butterweed"}, + {"id": 18597, "synset": "american_feverfew.n.01", "name": "American_feverfew"}, + {"id": 18598, "synset": "cineraria.n.01", "name": "cineraria"}, + {"id": 18599, "synset": "florest's_cineraria.n.01", "name": "florest's_cineraria"}, + {"id": 18600, "synset": "butterbur.n.01", "name": "butterbur"}, + {"id": 18601, "synset": "winter_heliotrope.n.01", "name": "winter_heliotrope"}, + {"id": 18602, "synset": "sweet_coltsfoot.n.01", "name": "sweet_coltsfoot"}, + {"id": 18603, "synset": "oxtongue.n.01", "name": "oxtongue"}, + {"id": 18604, "synset": "hawkweed.n.01", "name": "hawkweed"}, + {"id": 18605, "synset": "mouse-ear_hawkweed.n.01", "name": "mouse-ear_hawkweed"}, + {"id": 18606, "synset": "stevia.n.02", "name": "stevia"}, + {"id": 18607, "synset": "rattlesnake_root.n.01", "name": "rattlesnake_root"}, + {"id": 18608, "synset": "fleabane.n.01", "name": "fleabane"}, + {"id": 18609, "synset": "sheep_plant.n.01", "name": "sheep_plant"}, + {"id": 18610, "synset": "coneflower.n.02", "name": "coneflower"}, + {"id": 18611, "synset": "mexican_hat.n.01", "name": "Mexican_hat"}, + { + "id": 18612, + "synset": "long-head_coneflower.n.01", + "name": "long-head_coneflower", + }, + {"id": 18613, "synset": "prairie_coneflower.n.01", "name": "prairie_coneflower"}, + { + "id": 18614, + "synset": "swan_river_everlasting.n.01", + "name": "Swan_River_everlasting", + }, + {"id": 18615, "synset": "coneflower.n.01", "name": "coneflower"}, + {"id": 18616, "synset": "black-eyed_susan.n.03", "name": "black-eyed_Susan"}, + { + "id": 18617, + "synset": "cutleaved_coneflower.n.01", + "name": "cutleaved_coneflower", + }, + {"id": 18618, "synset": "golden_glow.n.01", "name": "golden_glow"}, + {"id": 18619, "synset": "lavender_cotton.n.01", "name": "lavender_cotton"}, + {"id": 18620, "synset": "creeping_zinnia.n.01", "name": "creeping_zinnia"}, + {"id": 18621, "synset": "golden_thistle.n.01", "name": "golden_thistle"}, + { + "id": 18622, + "synset": "spanish_oyster_plant.n.01", + "name": "Spanish_oyster_plant", + }, + {"id": 18623, "synset": "nodding_groundsel.n.01", "name": "nodding_groundsel"}, + {"id": 18624, "synset": "dusty_miller.n.02", "name": "dusty_miller"}, + {"id": 18625, "synset": "butterweed.n.01", "name": "butterweed"}, + {"id": 18626, "synset": "ragwort.n.01", "name": "ragwort"}, + {"id": 18627, "synset": "arrowleaf_groundsel.n.01", "name": "arrowleaf_groundsel"}, + {"id": 18628, "synset": "black_salsify.n.01", "name": "black_salsify"}, + {"id": 18629, "synset": "white-topped_aster.n.01", "name": "white-topped_aster"}, + { + "id": 18630, + "synset": "narrow-leaved_white-topped_aster.n.01", + "name": "narrow-leaved_white-topped_aster", + }, + {"id": 18631, "synset": "silver_sage.n.01", "name": "silver_sage"}, + {"id": 18632, "synset": "sea_wormwood.n.01", "name": "sea_wormwood"}, + {"id": 18633, "synset": "sawwort.n.01", "name": "sawwort"}, + {"id": 18634, "synset": "rosinweed.n.01", "name": "rosinweed"}, + {"id": 18635, "synset": "milk_thistle.n.02", "name": "milk_thistle"}, + {"id": 18636, "synset": "goldenrod.n.01", "name": "goldenrod"}, + {"id": 18637, "synset": "silverrod.n.01", "name": "silverrod"}, + {"id": 18638, "synset": "meadow_goldenrod.n.01", "name": "meadow_goldenrod"}, + {"id": 18639, "synset": "missouri_goldenrod.n.01", "name": "Missouri_goldenrod"}, + {"id": 18640, "synset": "alpine_goldenrod.n.01", "name": "alpine_goldenrod"}, + {"id": 18641, "synset": "grey_goldenrod.n.01", "name": "grey_goldenrod"}, + {"id": 18642, "synset": "blue_mountain_tea.n.01", "name": "Blue_Mountain_tea"}, + {"id": 18643, "synset": "dyer's_weed.n.01", "name": "dyer's_weed"}, + {"id": 18644, "synset": "seaside_goldenrod.n.01", "name": "seaside_goldenrod"}, + {"id": 18645, "synset": "narrow_goldenrod.n.01", "name": "narrow_goldenrod"}, + {"id": 18646, "synset": "boott's_goldenrod.n.01", "name": "Boott's_goldenrod"}, + {"id": 18647, "synset": "elliott's_goldenrod.n.01", "name": "Elliott's_goldenrod"}, + {"id": 18648, "synset": "ohio_goldenrod.n.01", "name": "Ohio_goldenrod"}, + { + "id": 18649, + "synset": "rough-stemmed_goldenrod.n.01", + "name": "rough-stemmed_goldenrod", + }, + {"id": 18650, "synset": "showy_goldenrod.n.01", "name": "showy_goldenrod"}, + {"id": 18651, "synset": "tall_goldenrod.n.01", "name": "tall_goldenrod"}, + {"id": 18652, "synset": "zigzag_goldenrod.n.01", "name": "zigzag_goldenrod"}, + {"id": 18653, "synset": "sow_thistle.n.01", "name": "sow_thistle"}, + {"id": 18654, "synset": "milkweed.n.02", "name": "milkweed"}, + {"id": 18655, "synset": "stevia.n.01", "name": "stevia"}, + {"id": 18656, "synset": "stokes'_aster.n.01", "name": "stokes'_aster"}, + {"id": 18657, "synset": "marigold.n.01", "name": "marigold"}, + {"id": 18658, "synset": "african_marigold.n.01", "name": "African_marigold"}, + {"id": 18659, "synset": "french_marigold.n.01", "name": "French_marigold"}, + {"id": 18660, "synset": "painted_daisy.n.01", "name": "painted_daisy"}, + {"id": 18661, "synset": "pyrethrum.n.02", "name": "pyrethrum"}, + {"id": 18662, "synset": "northern_dune_tansy.n.01", "name": "northern_dune_tansy"}, + {"id": 18663, "synset": "feverfew.n.01", "name": "feverfew"}, + {"id": 18664, "synset": "dusty_miller.n.01", "name": "dusty_miller"}, + {"id": 18665, "synset": "tansy.n.01", "name": "tansy"}, + {"id": 18666, "synset": "dandelion.n.01", "name": "dandelion"}, + {"id": 18667, "synset": "common_dandelion.n.01", "name": "common_dandelion"}, + {"id": 18668, "synset": "dandelion_green.n.01", "name": "dandelion_green"}, + {"id": 18669, "synset": "russian_dandelion.n.01", "name": "Russian_dandelion"}, + {"id": 18670, "synset": "stemless_hymenoxys.n.01", "name": "stemless_hymenoxys"}, + {"id": 18671, "synset": "mexican_sunflower.n.01", "name": "Mexican_sunflower"}, + {"id": 18672, "synset": "easter_daisy.n.01", "name": "Easter_daisy"}, + {"id": 18673, "synset": "yellow_salsify.n.01", "name": "yellow_salsify"}, + {"id": 18674, "synset": "salsify.n.02", "name": "salsify"}, + {"id": 18675, "synset": "meadow_salsify.n.01", "name": "meadow_salsify"}, + {"id": 18676, "synset": "scentless_camomile.n.01", "name": "scentless_camomile"}, + {"id": 18677, "synset": "turfing_daisy.n.01", "name": "turfing_daisy"}, + {"id": 18678, "synset": "coltsfoot.n.02", "name": "coltsfoot"}, + {"id": 18679, "synset": "ursinia.n.01", "name": "ursinia"}, + {"id": 18680, "synset": "crownbeard.n.01", "name": "crownbeard"}, + {"id": 18681, "synset": "wingstem.n.01", "name": "wingstem"}, + {"id": 18682, "synset": "cowpen_daisy.n.01", "name": "cowpen_daisy"}, + {"id": 18683, "synset": "gravelweed.n.01", "name": "gravelweed"}, + {"id": 18684, "synset": "virginia_crownbeard.n.01", "name": "Virginia_crownbeard"}, + {"id": 18685, "synset": "ironweed.n.01", "name": "ironweed"}, + {"id": 18686, "synset": "mule's_ears.n.01", "name": "mule's_ears"}, + { + "id": 18687, + "synset": "white-rayed_mule's_ears.n.01", + "name": "white-rayed_mule's_ears", + }, + {"id": 18688, "synset": "cocklebur.n.01", "name": "cocklebur"}, + {"id": 18689, "synset": "xeranthemum.n.01", "name": "xeranthemum"}, + {"id": 18690, "synset": "immortelle.n.01", "name": "immortelle"}, + {"id": 18691, "synset": "zinnia.n.01", "name": "zinnia"}, + {"id": 18692, "synset": "white_zinnia.n.01", "name": "white_zinnia"}, + { + "id": 18693, + "synset": "little_golden_zinnia.n.01", + "name": "little_golden_zinnia", + }, + {"id": 18694, "synset": "blazing_star.n.01", "name": "blazing_star"}, + {"id": 18695, "synset": "bartonia.n.01", "name": "bartonia"}, + {"id": 18696, "synset": "achene.n.01", "name": "achene"}, + {"id": 18697, "synset": "samara.n.01", "name": "samara"}, + {"id": 18698, "synset": "campanula.n.01", "name": "campanula"}, + {"id": 18699, "synset": "creeping_bellflower.n.01", "name": "creeping_bellflower"}, + {"id": 18700, "synset": "canterbury_bell.n.02", "name": "Canterbury_bell"}, + {"id": 18701, "synset": "tall_bellflower.n.01", "name": "tall_bellflower"}, + {"id": 18702, "synset": "marsh_bellflower.n.01", "name": "marsh_bellflower"}, + { + "id": 18703, + "synset": "clustered_bellflower.n.01", + "name": "clustered_bellflower", + }, + {"id": 18704, "synset": "peach_bells.n.01", "name": "peach_bells"}, + {"id": 18705, "synset": "chimney_plant.n.01", "name": "chimney_plant"}, + {"id": 18706, "synset": "rampion.n.01", "name": "rampion"}, + {"id": 18707, "synset": "tussock_bellflower.n.01", "name": "tussock_bellflower"}, + {"id": 18708, "synset": "orchid.n.01", "name": "orchid"}, + {"id": 18709, "synset": "orchis.n.01", "name": "orchis"}, + {"id": 18710, "synset": "male_orchis.n.01", "name": "male_orchis"}, + {"id": 18711, "synset": "butterfly_orchid.n.05", "name": "butterfly_orchid"}, + {"id": 18712, "synset": "showy_orchis.n.01", "name": "showy_orchis"}, + {"id": 18713, "synset": "aerides.n.01", "name": "aerides"}, + {"id": 18714, "synset": "angrecum.n.01", "name": "angrecum"}, + {"id": 18715, "synset": "jewel_orchid.n.01", "name": "jewel_orchid"}, + {"id": 18716, "synset": "puttyroot.n.01", "name": "puttyroot"}, + {"id": 18717, "synset": "arethusa.n.01", "name": "arethusa"}, + {"id": 18718, "synset": "bog_rose.n.01", "name": "bog_rose"}, + {"id": 18719, "synset": "bletia.n.01", "name": "bletia"}, + {"id": 18720, "synset": "bletilla_striata.n.01", "name": "Bletilla_striata"}, + {"id": 18721, "synset": "brassavola.n.01", "name": "brassavola"}, + {"id": 18722, "synset": "spider_orchid.n.03", "name": "spider_orchid"}, + {"id": 18723, "synset": "spider_orchid.n.02", "name": "spider_orchid"}, + {"id": 18724, "synset": "caladenia.n.01", "name": "caladenia"}, + {"id": 18725, "synset": "calanthe.n.01", "name": "calanthe"}, + {"id": 18726, "synset": "grass_pink.n.01", "name": "grass_pink"}, + {"id": 18727, "synset": "calypso.n.01", "name": "calypso"}, + {"id": 18728, "synset": "cattleya.n.01", "name": "cattleya"}, + {"id": 18729, "synset": "helleborine.n.03", "name": "helleborine"}, + {"id": 18730, "synset": "red_helleborine.n.01", "name": "red_helleborine"}, + {"id": 18731, "synset": "spreading_pogonia.n.01", "name": "spreading_pogonia"}, + {"id": 18732, "synset": "rosebud_orchid.n.01", "name": "rosebud_orchid"}, + {"id": 18733, "synset": "satyr_orchid.n.01", "name": "satyr_orchid"}, + {"id": 18734, "synset": "frog_orchid.n.02", "name": "frog_orchid"}, + {"id": 18735, "synset": "coelogyne.n.01", "name": "coelogyne"}, + {"id": 18736, "synset": "coral_root.n.01", "name": "coral_root"}, + {"id": 18737, "synset": "spotted_coral_root.n.01", "name": "spotted_coral_root"}, + {"id": 18738, "synset": "striped_coral_root.n.01", "name": "striped_coral_root"}, + {"id": 18739, "synset": "early_coral_root.n.01", "name": "early_coral_root"}, + {"id": 18740, "synset": "swan_orchid.n.01", "name": "swan_orchid"}, + {"id": 18741, "synset": "cymbid.n.01", "name": "cymbid"}, + {"id": 18742, "synset": "cypripedia.n.01", "name": "cypripedia"}, + {"id": 18743, "synset": "lady's_slipper.n.01", "name": "lady's_slipper"}, + {"id": 18744, "synset": "moccasin_flower.n.01", "name": "moccasin_flower"}, + { + "id": 18745, + "synset": "common_lady's-slipper.n.01", + "name": "common_lady's-slipper", + }, + {"id": 18746, "synset": "ram's-head.n.01", "name": "ram's-head"}, + { + "id": 18747, + "synset": "yellow_lady's_slipper.n.01", + "name": "yellow_lady's_slipper", + }, + { + "id": 18748, + "synset": "large_yellow_lady's_slipper.n.01", + "name": "large_yellow_lady's_slipper", + }, + { + "id": 18749, + "synset": "california_lady's_slipper.n.01", + "name": "California_lady's_slipper", + }, + { + "id": 18750, + "synset": "clustered_lady's_slipper.n.01", + "name": "clustered_lady's_slipper", + }, + { + "id": 18751, + "synset": "mountain_lady's_slipper.n.01", + "name": "mountain_lady's_slipper", + }, + {"id": 18752, "synset": "marsh_orchid.n.01", "name": "marsh_orchid"}, + { + "id": 18753, + "synset": "common_spotted_orchid.n.01", + "name": "common_spotted_orchid", + }, + {"id": 18754, "synset": "dendrobium.n.01", "name": "dendrobium"}, + {"id": 18755, "synset": "disa.n.01", "name": "disa"}, + {"id": 18756, "synset": "phantom_orchid.n.01", "name": "phantom_orchid"}, + {"id": 18757, "synset": "tulip_orchid.n.01", "name": "tulip_orchid"}, + {"id": 18758, "synset": "butterfly_orchid.n.04", "name": "butterfly_orchid"}, + {"id": 18759, "synset": "butterfly_orchid.n.03", "name": "butterfly_orchid"}, + {"id": 18760, "synset": "epidendron.n.01", "name": "epidendron"}, + {"id": 18761, "synset": "helleborine.n.02", "name": "helleborine"}, + { + "id": 18762, + "synset": "epipactis_helleborine.n.01", + "name": "Epipactis_helleborine", + }, + {"id": 18763, "synset": "stream_orchid.n.01", "name": "stream_orchid"}, + {"id": 18764, "synset": "tongueflower.n.01", "name": "tongueflower"}, + { + "id": 18765, + "synset": "rattlesnake_plantain.n.01", + "name": "rattlesnake_plantain", + }, + {"id": 18766, "synset": "fragrant_orchid.n.01", "name": "fragrant_orchid"}, + { + "id": 18767, + "synset": "short-spurred_fragrant_orchid.n.01", + "name": "short-spurred_fragrant_orchid", + }, + {"id": 18768, "synset": "fringed_orchis.n.01", "name": "fringed_orchis"}, + {"id": 18769, "synset": "frog_orchid.n.01", "name": "frog_orchid"}, + {"id": 18770, "synset": "rein_orchid.n.01", "name": "rein_orchid"}, + {"id": 18771, "synset": "bog_rein_orchid.n.01", "name": "bog_rein_orchid"}, + { + "id": 18772, + "synset": "white_fringed_orchis.n.01", + "name": "white_fringed_orchis", + }, + {"id": 18773, "synset": "elegant_habenaria.n.01", "name": "elegant_Habenaria"}, + { + "id": 18774, + "synset": "purple-fringed_orchid.n.02", + "name": "purple-fringed_orchid", + }, + {"id": 18775, "synset": "coastal_rein_orchid.n.01", "name": "coastal_rein_orchid"}, + {"id": 18776, "synset": "hooker's_orchid.n.01", "name": "Hooker's_orchid"}, + {"id": 18777, "synset": "ragged_orchid.n.01", "name": "ragged_orchid"}, + {"id": 18778, "synset": "prairie_orchid.n.01", "name": "prairie_orchid"}, + {"id": 18779, "synset": "snowy_orchid.n.01", "name": "snowy_orchid"}, + { + "id": 18780, + "synset": "round-leaved_rein_orchid.n.01", + "name": "round-leaved_rein_orchid", + }, + { + "id": 18781, + "synset": "purple_fringeless_orchid.n.01", + "name": "purple_fringeless_orchid", + }, + { + "id": 18782, + "synset": "purple-fringed_orchid.n.01", + "name": "purple-fringed_orchid", + }, + {"id": 18783, "synset": "alaska_rein_orchid.n.01", "name": "Alaska_rein_orchid"}, + {"id": 18784, "synset": "crested_coral_root.n.01", "name": "crested_coral_root"}, + {"id": 18785, "synset": "texas_purple_spike.n.01", "name": "Texas_purple_spike"}, + {"id": 18786, "synset": "lizard_orchid.n.01", "name": "lizard_orchid"}, + {"id": 18787, "synset": "laelia.n.01", "name": "laelia"}, + {"id": 18788, "synset": "liparis.n.01", "name": "liparis"}, + {"id": 18789, "synset": "twayblade.n.02", "name": "twayblade"}, + {"id": 18790, "synset": "fen_orchid.n.01", "name": "fen_orchid"}, + { + "id": 18791, + "synset": "broad-leaved_twayblade.n.01", + "name": "broad-leaved_twayblade", + }, + {"id": 18792, "synset": "lesser_twayblade.n.01", "name": "lesser_twayblade"}, + {"id": 18793, "synset": "twayblade.n.01", "name": "twayblade"}, + {"id": 18794, "synset": "green_adder's_mouth.n.01", "name": "green_adder's_mouth"}, + {"id": 18795, "synset": "masdevallia.n.01", "name": "masdevallia"}, + {"id": 18796, "synset": "maxillaria.n.01", "name": "maxillaria"}, + {"id": 18797, "synset": "pansy_orchid.n.01", "name": "pansy_orchid"}, + {"id": 18798, "synset": "odontoglossum.n.01", "name": "odontoglossum"}, + {"id": 18799, "synset": "oncidium.n.01", "name": "oncidium"}, + {"id": 18800, "synset": "bee_orchid.n.01", "name": "bee_orchid"}, + {"id": 18801, "synset": "fly_orchid.n.02", "name": "fly_orchid"}, + {"id": 18802, "synset": "spider_orchid.n.01", "name": "spider_orchid"}, + {"id": 18803, "synset": "early_spider_orchid.n.01", "name": "early_spider_orchid"}, + {"id": 18804, "synset": "venus'_slipper.n.01", "name": "Venus'_slipper"}, + {"id": 18805, "synset": "phaius.n.01", "name": "phaius"}, + {"id": 18806, "synset": "moth_orchid.n.01", "name": "moth_orchid"}, + {"id": 18807, "synset": "butterfly_plant.n.01", "name": "butterfly_plant"}, + {"id": 18808, "synset": "rattlesnake_orchid.n.01", "name": "rattlesnake_orchid"}, + { + "id": 18809, + "synset": "lesser_butterfly_orchid.n.01", + "name": "lesser_butterfly_orchid", + }, + { + "id": 18810, + "synset": "greater_butterfly_orchid.n.01", + "name": "greater_butterfly_orchid", + }, + { + "id": 18811, + "synset": "prairie_white-fringed_orchid.n.01", + "name": "prairie_white-fringed_orchid", + }, + {"id": 18812, "synset": "tangle_orchid.n.01", "name": "tangle_orchid"}, + {"id": 18813, "synset": "indian_crocus.n.01", "name": "Indian_crocus"}, + {"id": 18814, "synset": "pleurothallis.n.01", "name": "pleurothallis"}, + {"id": 18815, "synset": "pogonia.n.01", "name": "pogonia"}, + {"id": 18816, "synset": "butterfly_orchid.n.01", "name": "butterfly_orchid"}, + { + "id": 18817, + "synset": "psychopsis_krameriana.n.01", + "name": "Psychopsis_krameriana", + }, + {"id": 18818, "synset": "psychopsis_papilio.n.01", "name": "Psychopsis_papilio"}, + {"id": 18819, "synset": "helmet_orchid.n.01", "name": "helmet_orchid"}, + {"id": 18820, "synset": "foxtail_orchid.n.01", "name": "foxtail_orchid"}, + { + "id": 18821, + "synset": "orange-blossom_orchid.n.01", + "name": "orange-blossom_orchid", + }, + {"id": 18822, "synset": "sobralia.n.01", "name": "sobralia"}, + {"id": 18823, "synset": "ladies'_tresses.n.01", "name": "ladies'_tresses"}, + {"id": 18824, "synset": "screw_augur.n.01", "name": "screw_augur"}, + { + "id": 18825, + "synset": "hooded_ladies'_tresses.n.01", + "name": "hooded_ladies'_tresses", + }, + { + "id": 18826, + "synset": "western_ladies'_tresses.n.01", + "name": "western_ladies'_tresses", + }, + { + "id": 18827, + "synset": "european_ladies'_tresses.n.01", + "name": "European_ladies'_tresses", + }, + {"id": 18828, "synset": "stanhopea.n.01", "name": "stanhopea"}, + {"id": 18829, "synset": "stelis.n.01", "name": "stelis"}, + {"id": 18830, "synset": "fly_orchid.n.01", "name": "fly_orchid"}, + {"id": 18831, "synset": "vanda.n.01", "name": "vanda"}, + {"id": 18832, "synset": "blue_orchid.n.01", "name": "blue_orchid"}, + {"id": 18833, "synset": "vanilla.n.01", "name": "vanilla"}, + {"id": 18834, "synset": "vanilla_orchid.n.01", "name": "vanilla_orchid"}, + {"id": 18835, "synset": "yam.n.02", "name": "yam"}, + {"id": 18836, "synset": "yam.n.01", "name": "yam"}, + {"id": 18837, "synset": "white_yam.n.01", "name": "white_yam"}, + {"id": 18838, "synset": "cinnamon_vine.n.01", "name": "cinnamon_vine"}, + {"id": 18839, "synset": "elephant's-foot.n.01", "name": "elephant's-foot"}, + {"id": 18840, "synset": "wild_yam.n.01", "name": "wild_yam"}, + {"id": 18841, "synset": "cush-cush.n.01", "name": "cush-cush"}, + {"id": 18842, "synset": "black_bryony.n.01", "name": "black_bryony"}, + {"id": 18843, "synset": "primrose.n.01", "name": "primrose"}, + {"id": 18844, "synset": "english_primrose.n.01", "name": "English_primrose"}, + {"id": 18845, "synset": "cowslip.n.01", "name": "cowslip"}, + {"id": 18846, "synset": "oxlip.n.01", "name": "oxlip"}, + {"id": 18847, "synset": "chinese_primrose.n.01", "name": "Chinese_primrose"}, + {"id": 18848, "synset": "polyanthus.n.01", "name": "polyanthus"}, + {"id": 18849, "synset": "pimpernel.n.02", "name": "pimpernel"}, + {"id": 18850, "synset": "scarlet_pimpernel.n.01", "name": "scarlet_pimpernel"}, + {"id": 18851, "synset": "bog_pimpernel.n.01", "name": "bog_pimpernel"}, + {"id": 18852, "synset": "chaffweed.n.01", "name": "chaffweed"}, + {"id": 18853, "synset": "cyclamen.n.01", "name": "cyclamen"}, + {"id": 18854, "synset": "sowbread.n.01", "name": "sowbread"}, + {"id": 18855, "synset": "sea_milkwort.n.01", "name": "sea_milkwort"}, + {"id": 18856, "synset": "featherfoil.n.01", "name": "featherfoil"}, + {"id": 18857, "synset": "water_gillyflower.n.01", "name": "water_gillyflower"}, + {"id": 18858, "synset": "water_violet.n.01", "name": "water_violet"}, + {"id": 18859, "synset": "loosestrife.n.02", "name": "loosestrife"}, + { + "id": 18860, + "synset": "gooseneck_loosestrife.n.01", + "name": "gooseneck_loosestrife", + }, + {"id": 18861, "synset": "yellow_pimpernel.n.01", "name": "yellow_pimpernel"}, + {"id": 18862, "synset": "fringed_loosestrife.n.01", "name": "fringed_loosestrife"}, + {"id": 18863, "synset": "moneywort.n.01", "name": "moneywort"}, + {"id": 18864, "synset": "swamp_candles.n.01", "name": "swamp_candles"}, + {"id": 18865, "synset": "whorled_loosestrife.n.01", "name": "whorled_loosestrife"}, + {"id": 18866, "synset": "water_pimpernel.n.01", "name": "water_pimpernel"}, + {"id": 18867, "synset": "brookweed.n.02", "name": "brookweed"}, + {"id": 18868, "synset": "brookweed.n.01", "name": "brookweed"}, + {"id": 18869, "synset": "coralberry.n.02", "name": "coralberry"}, + {"id": 18870, "synset": "marlberry.n.01", "name": "marlberry"}, + {"id": 18871, "synset": "plumbago.n.02", "name": "plumbago"}, + {"id": 18872, "synset": "leadwort.n.01", "name": "leadwort"}, + {"id": 18873, "synset": "thrift.n.01", "name": "thrift"}, + {"id": 18874, "synset": "sea_lavender.n.01", "name": "sea_lavender"}, + {"id": 18875, "synset": "barbasco.n.01", "name": "barbasco"}, + {"id": 18876, "synset": "gramineous_plant.n.01", "name": "gramineous_plant"}, + {"id": 18877, "synset": "grass.n.01", "name": "grass"}, + {"id": 18878, "synset": "midgrass.n.01", "name": "midgrass"}, + {"id": 18879, "synset": "shortgrass.n.01", "name": "shortgrass"}, + {"id": 18880, "synset": "sword_grass.n.01", "name": "sword_grass"}, + {"id": 18881, "synset": "tallgrass.n.01", "name": "tallgrass"}, + {"id": 18882, "synset": "herbage.n.01", "name": "herbage"}, + {"id": 18883, "synset": "goat_grass.n.01", "name": "goat_grass"}, + {"id": 18884, "synset": "wheatgrass.n.01", "name": "wheatgrass"}, + {"id": 18885, "synset": "crested_wheatgrass.n.01", "name": "crested_wheatgrass"}, + {"id": 18886, "synset": "bearded_wheatgrass.n.01", "name": "bearded_wheatgrass"}, + {"id": 18887, "synset": "western_wheatgrass.n.01", "name": "western_wheatgrass"}, + { + "id": 18888, + "synset": "intermediate_wheatgrass.n.01", + "name": "intermediate_wheatgrass", + }, + {"id": 18889, "synset": "slender_wheatgrass.n.01", "name": "slender_wheatgrass"}, + {"id": 18890, "synset": "velvet_bent.n.01", "name": "velvet_bent"}, + {"id": 18891, "synset": "cloud_grass.n.01", "name": "cloud_grass"}, + {"id": 18892, "synset": "meadow_foxtail.n.01", "name": "meadow_foxtail"}, + {"id": 18893, "synset": "foxtail.n.01", "name": "foxtail"}, + {"id": 18894, "synset": "broom_grass.n.01", "name": "broom_grass"}, + {"id": 18895, "synset": "broom_sedge.n.01", "name": "broom_sedge"}, + {"id": 18896, "synset": "tall_oat_grass.n.01", "name": "tall_oat_grass"}, + {"id": 18897, "synset": "toetoe.n.02", "name": "toetoe"}, + {"id": 18898, "synset": "oat.n.01", "name": "oat"}, + {"id": 18899, "synset": "cereal_oat.n.01", "name": "cereal_oat"}, + {"id": 18900, "synset": "wild_oat.n.01", "name": "wild_oat"}, + {"id": 18901, "synset": "slender_wild_oat.n.01", "name": "slender_wild_oat"}, + {"id": 18902, "synset": "wild_red_oat.n.01", "name": "wild_red_oat"}, + {"id": 18903, "synset": "brome.n.01", "name": "brome"}, + {"id": 18904, "synset": "chess.n.01", "name": "chess"}, + {"id": 18905, "synset": "field_brome.n.01", "name": "field_brome"}, + {"id": 18906, "synset": "grama.n.01", "name": "grama"}, + {"id": 18907, "synset": "black_grama.n.01", "name": "black_grama"}, + {"id": 18908, "synset": "buffalo_grass.n.02", "name": "buffalo_grass"}, + {"id": 18909, "synset": "reed_grass.n.01", "name": "reed_grass"}, + {"id": 18910, "synset": "feather_reed_grass.n.01", "name": "feather_reed_grass"}, + { + "id": 18911, + "synset": "australian_reed_grass.n.01", + "name": "Australian_reed_grass", + }, + {"id": 18912, "synset": "burgrass.n.01", "name": "burgrass"}, + {"id": 18913, "synset": "buffel_grass.n.01", "name": "buffel_grass"}, + {"id": 18914, "synset": "rhodes_grass.n.01", "name": "Rhodes_grass"}, + {"id": 18915, "synset": "pampas_grass.n.01", "name": "pampas_grass"}, + {"id": 18916, "synset": "giant_star_grass.n.01", "name": "giant_star_grass"}, + {"id": 18917, "synset": "orchard_grass.n.01", "name": "orchard_grass"}, + {"id": 18918, "synset": "egyptian_grass.n.01", "name": "Egyptian_grass"}, + {"id": 18919, "synset": "crabgrass.n.01", "name": "crabgrass"}, + {"id": 18920, "synset": "smooth_crabgrass.n.01", "name": "smooth_crabgrass"}, + {"id": 18921, "synset": "large_crabgrass.n.01", "name": "large_crabgrass"}, + {"id": 18922, "synset": "barnyard_grass.n.01", "name": "barnyard_grass"}, + {"id": 18923, "synset": "japanese_millet.n.01", "name": "Japanese_millet"}, + {"id": 18924, "synset": "yardgrass.n.01", "name": "yardgrass"}, + {"id": 18925, "synset": "finger_millet.n.01", "name": "finger_millet"}, + {"id": 18926, "synset": "lyme_grass.n.01", "name": "lyme_grass"}, + {"id": 18927, "synset": "wild_rye.n.01", "name": "wild_rye"}, + {"id": 18928, "synset": "giant_ryegrass.n.01", "name": "giant_ryegrass"}, + {"id": 18929, "synset": "sea_lyme_grass.n.01", "name": "sea_lyme_grass"}, + {"id": 18930, "synset": "canada_wild_rye.n.01", "name": "Canada_wild_rye"}, + {"id": 18931, "synset": "teff.n.01", "name": "teff"}, + {"id": 18932, "synset": "weeping_love_grass.n.01", "name": "weeping_love_grass"}, + {"id": 18933, "synset": "plume_grass.n.01", "name": "plume_grass"}, + {"id": 18934, "synset": "ravenna_grass.n.01", "name": "Ravenna_grass"}, + {"id": 18935, "synset": "fescue.n.01", "name": "fescue"}, + {"id": 18936, "synset": "reed_meadow_grass.n.01", "name": "reed_meadow_grass"}, + {"id": 18937, "synset": "velvet_grass.n.01", "name": "velvet_grass"}, + {"id": 18938, "synset": "creeping_soft_grass.n.01", "name": "creeping_soft_grass"}, + {"id": 18939, "synset": "barleycorn.n.01", "name": "barleycorn"}, + {"id": 18940, "synset": "barley_grass.n.01", "name": "barley_grass"}, + {"id": 18941, "synset": "little_barley.n.01", "name": "little_barley"}, + {"id": 18942, "synset": "rye_grass.n.01", "name": "rye_grass"}, + {"id": 18943, "synset": "perennial_ryegrass.n.01", "name": "perennial_ryegrass"}, + {"id": 18944, "synset": "italian_ryegrass.n.01", "name": "Italian_ryegrass"}, + {"id": 18945, "synset": "darnel.n.01", "name": "darnel"}, + {"id": 18946, "synset": "nimblewill.n.01", "name": "nimblewill"}, + {"id": 18947, "synset": "cultivated_rice.n.01", "name": "cultivated_rice"}, + {"id": 18948, "synset": "ricegrass.n.01", "name": "ricegrass"}, + {"id": 18949, "synset": "smilo.n.01", "name": "smilo"}, + {"id": 18950, "synset": "switch_grass.n.01", "name": "switch_grass"}, + {"id": 18951, "synset": "broomcorn_millet.n.01", "name": "broomcorn_millet"}, + {"id": 18952, "synset": "goose_grass.n.03", "name": "goose_grass"}, + {"id": 18953, "synset": "dallisgrass.n.01", "name": "dallisgrass"}, + {"id": 18954, "synset": "bahia_grass.n.01", "name": "Bahia_grass"}, + {"id": 18955, "synset": "knotgrass.n.01", "name": "knotgrass"}, + {"id": 18956, "synset": "fountain_grass.n.01", "name": "fountain_grass"}, + {"id": 18957, "synset": "reed_canary_grass.n.01", "name": "reed_canary_grass"}, + {"id": 18958, "synset": "canary_grass.n.01", "name": "canary_grass"}, + {"id": 18959, "synset": "timothy.n.01", "name": "timothy"}, + {"id": 18960, "synset": "bluegrass.n.01", "name": "bluegrass"}, + {"id": 18961, "synset": "meadowgrass.n.01", "name": "meadowgrass"}, + {"id": 18962, "synset": "wood_meadowgrass.n.01", "name": "wood_meadowgrass"}, + {"id": 18963, "synset": "noble_cane.n.01", "name": "noble_cane"}, + {"id": 18964, "synset": "munj.n.01", "name": "munj"}, + {"id": 18965, "synset": "broom_beard_grass.n.01", "name": "broom_beard_grass"}, + {"id": 18966, "synset": "bluestem.n.01", "name": "bluestem"}, + {"id": 18967, "synset": "rye.n.02", "name": "rye"}, + {"id": 18968, "synset": "bristlegrass.n.01", "name": "bristlegrass"}, + {"id": 18969, "synset": "giant_foxtail.n.01", "name": "giant_foxtail"}, + {"id": 18970, "synset": "yellow_bristlegrass.n.01", "name": "yellow_bristlegrass"}, + {"id": 18971, "synset": "green_bristlegrass.n.01", "name": "green_bristlegrass"}, + {"id": 18972, "synset": "siberian_millet.n.01", "name": "Siberian_millet"}, + {"id": 18973, "synset": "german_millet.n.01", "name": "German_millet"}, + {"id": 18974, "synset": "millet.n.01", "name": "millet"}, + {"id": 18975, "synset": "rattan.n.02", "name": "rattan"}, + {"id": 18976, "synset": "malacca.n.01", "name": "malacca"}, + {"id": 18977, "synset": "reed.n.01", "name": "reed"}, + {"id": 18978, "synset": "sorghum.n.01", "name": "sorghum"}, + {"id": 18979, "synset": "grain_sorghum.n.01", "name": "grain_sorghum"}, + {"id": 18980, "synset": "durra.n.01", "name": "durra"}, + {"id": 18981, "synset": "feterita.n.01", "name": "feterita"}, + {"id": 18982, "synset": "hegari.n.01", "name": "hegari"}, + {"id": 18983, "synset": "kaoliang.n.01", "name": "kaoliang"}, + {"id": 18984, "synset": "milo.n.01", "name": "milo"}, + {"id": 18985, "synset": "shallu.n.01", "name": "shallu"}, + {"id": 18986, "synset": "broomcorn.n.01", "name": "broomcorn"}, + {"id": 18987, "synset": "cordgrass.n.01", "name": "cordgrass"}, + {"id": 18988, "synset": "salt_reed_grass.n.01", "name": "salt_reed_grass"}, + {"id": 18989, "synset": "prairie_cordgrass.n.01", "name": "prairie_cordgrass"}, + {"id": 18990, "synset": "smut_grass.n.01", "name": "smut_grass"}, + {"id": 18991, "synset": "sand_dropseed.n.01", "name": "sand_dropseed"}, + {"id": 18992, "synset": "rush_grass.n.01", "name": "rush_grass"}, + {"id": 18993, "synset": "st._augustine_grass.n.01", "name": "St._Augustine_grass"}, + {"id": 18994, "synset": "grain.n.08", "name": "grain"}, + {"id": 18995, "synset": "cereal.n.01", "name": "cereal"}, + {"id": 18996, "synset": "wheat.n.01", "name": "wheat"}, + {"id": 18997, "synset": "wheat_berry.n.01", "name": "wheat_berry"}, + {"id": 18998, "synset": "durum.n.01", "name": "durum"}, + {"id": 18999, "synset": "spelt.n.01", "name": "spelt"}, + {"id": 19000, "synset": "emmer.n.01", "name": "emmer"}, + {"id": 19001, "synset": "wild_wheat.n.01", "name": "wild_wheat"}, + {"id": 19002, "synset": "corn.n.01", "name": "corn"}, + {"id": 19003, "synset": "mealie.n.01", "name": "mealie"}, + {"id": 19004, "synset": "corn.n.02", "name": "corn"}, + {"id": 19005, "synset": "dent_corn.n.01", "name": "dent_corn"}, + {"id": 19006, "synset": "flint_corn.n.01", "name": "flint_corn"}, + {"id": 19007, "synset": "popcorn.n.01", "name": "popcorn"}, + {"id": 19008, "synset": "zoysia.n.01", "name": "zoysia"}, + {"id": 19009, "synset": "manila_grass.n.01", "name": "Manila_grass"}, + {"id": 19010, "synset": "korean_lawn_grass.n.01", "name": "Korean_lawn_grass"}, + {"id": 19011, "synset": "common_bamboo.n.01", "name": "common_bamboo"}, + {"id": 19012, "synset": "giant_bamboo.n.01", "name": "giant_bamboo"}, + {"id": 19013, "synset": "umbrella_plant.n.03", "name": "umbrella_plant"}, + {"id": 19014, "synset": "chufa.n.01", "name": "chufa"}, + {"id": 19015, "synset": "galingale.n.01", "name": "galingale"}, + {"id": 19016, "synset": "nutgrass.n.01", "name": "nutgrass"}, + {"id": 19017, "synset": "sand_sedge.n.01", "name": "sand_sedge"}, + {"id": 19018, "synset": "cypress_sedge.n.01", "name": "cypress_sedge"}, + {"id": 19019, "synset": "cotton_grass.n.01", "name": "cotton_grass"}, + {"id": 19020, "synset": "common_cotton_grass.n.01", "name": "common_cotton_grass"}, + {"id": 19021, "synset": "hardstem_bulrush.n.01", "name": "hardstem_bulrush"}, + {"id": 19022, "synset": "wool_grass.n.01", "name": "wool_grass"}, + {"id": 19023, "synset": "spike_rush.n.01", "name": "spike_rush"}, + {"id": 19024, "synset": "water_chestnut.n.02", "name": "water_chestnut"}, + {"id": 19025, "synset": "needle_spike_rush.n.01", "name": "needle_spike_rush"}, + {"id": 19026, "synset": "creeping_spike_rush.n.01", "name": "creeping_spike_rush"}, + {"id": 19027, "synset": "pandanus.n.02", "name": "pandanus"}, + {"id": 19028, "synset": "textile_screw_pine.n.01", "name": "textile_screw_pine"}, + {"id": 19029, "synset": "cattail.n.01", "name": "cattail"}, + {"id": 19030, "synset": "cat's-tail.n.01", "name": "cat's-tail"}, + {"id": 19031, "synset": "bur_reed.n.01", "name": "bur_reed"}, + {"id": 19032, "synset": "grain.n.07", "name": "grain"}, + {"id": 19033, "synset": "kernel.n.02", "name": "kernel"}, + {"id": 19034, "synset": "rye.n.01", "name": "rye"}, + {"id": 19035, "synset": "gourd.n.03", "name": "gourd"}, + {"id": 19036, "synset": "pumpkin.n.01", "name": "pumpkin"}, + {"id": 19037, "synset": "squash.n.01", "name": "squash"}, + {"id": 19038, "synset": "summer_squash.n.01", "name": "summer_squash"}, + {"id": 19039, "synset": "yellow_squash.n.01", "name": "yellow_squash"}, + {"id": 19040, "synset": "marrow.n.02", "name": "marrow"}, + {"id": 19041, "synset": "zucchini.n.01", "name": "zucchini"}, + {"id": 19042, "synset": "cocozelle.n.01", "name": "cocozelle"}, + {"id": 19043, "synset": "cymling.n.01", "name": "cymling"}, + {"id": 19044, "synset": "spaghetti_squash.n.01", "name": "spaghetti_squash"}, + {"id": 19045, "synset": "winter_squash.n.01", "name": "winter_squash"}, + {"id": 19046, "synset": "acorn_squash.n.01", "name": "acorn_squash"}, + {"id": 19047, "synset": "hubbard_squash.n.01", "name": "hubbard_squash"}, + {"id": 19048, "synset": "turban_squash.n.01", "name": "turban_squash"}, + {"id": 19049, "synset": "buttercup_squash.n.01", "name": "buttercup_squash"}, + {"id": 19050, "synset": "butternut_squash.n.01", "name": "butternut_squash"}, + {"id": 19051, "synset": "winter_crookneck.n.01", "name": "winter_crookneck"}, + {"id": 19052, "synset": "cushaw.n.01", "name": "cushaw"}, + {"id": 19053, "synset": "prairie_gourd.n.02", "name": "prairie_gourd"}, + {"id": 19054, "synset": "prairie_gourd.n.01", "name": "prairie_gourd"}, + {"id": 19055, "synset": "bryony.n.01", "name": "bryony"}, + {"id": 19056, "synset": "white_bryony.n.01", "name": "white_bryony"}, + {"id": 19057, "synset": "sweet_melon.n.01", "name": "sweet_melon"}, + {"id": 19058, "synset": "cantaloupe.n.01", "name": "cantaloupe"}, + {"id": 19059, "synset": "winter_melon.n.01", "name": "winter_melon"}, + {"id": 19060, "synset": "net_melon.n.01", "name": "net_melon"}, + {"id": 19061, "synset": "cucumber.n.01", "name": "cucumber"}, + {"id": 19062, "synset": "squirting_cucumber.n.01", "name": "squirting_cucumber"}, + {"id": 19063, "synset": "bottle_gourd.n.01", "name": "bottle_gourd"}, + {"id": 19064, "synset": "luffa.n.02", "name": "luffa"}, + {"id": 19065, "synset": "loofah.n.02", "name": "loofah"}, + {"id": 19066, "synset": "angled_loofah.n.01", "name": "angled_loofah"}, + {"id": 19067, "synset": "loofa.n.01", "name": "loofa"}, + {"id": 19068, "synset": "balsam_apple.n.01", "name": "balsam_apple"}, + {"id": 19069, "synset": "balsam_pear.n.01", "name": "balsam_pear"}, + {"id": 19070, "synset": "lobelia.n.01", "name": "lobelia"}, + {"id": 19071, "synset": "water_lobelia.n.01", "name": "water_lobelia"}, + {"id": 19072, "synset": "mallow.n.01", "name": "mallow"}, + {"id": 19073, "synset": "musk_mallow.n.02", "name": "musk_mallow"}, + {"id": 19074, "synset": "common_mallow.n.01", "name": "common_mallow"}, + {"id": 19075, "synset": "okra.n.02", "name": "okra"}, + {"id": 19076, "synset": "okra.n.01", "name": "okra"}, + {"id": 19077, "synset": "abelmosk.n.01", "name": "abelmosk"}, + {"id": 19078, "synset": "flowering_maple.n.01", "name": "flowering_maple"}, + {"id": 19079, "synset": "velvetleaf.n.02", "name": "velvetleaf"}, + {"id": 19080, "synset": "hollyhock.n.02", "name": "hollyhock"}, + {"id": 19081, "synset": "rose_mallow.n.02", "name": "rose_mallow"}, + {"id": 19082, "synset": "althea.n.01", "name": "althea"}, + {"id": 19083, "synset": "marsh_mallow.n.01", "name": "marsh_mallow"}, + {"id": 19084, "synset": "poppy_mallow.n.01", "name": "poppy_mallow"}, + { + "id": 19085, + "synset": "fringed_poppy_mallow.n.01", + "name": "fringed_poppy_mallow", + }, + {"id": 19086, "synset": "purple_poppy_mallow.n.01", "name": "purple_poppy_mallow"}, + { + "id": 19087, + "synset": "clustered_poppy_mallow.n.01", + "name": "clustered_poppy_mallow", + }, + {"id": 19088, "synset": "sea_island_cotton.n.01", "name": "sea_island_cotton"}, + {"id": 19089, "synset": "levant_cotton.n.01", "name": "Levant_cotton"}, + {"id": 19090, "synset": "upland_cotton.n.01", "name": "upland_cotton"}, + {"id": 19091, "synset": "peruvian_cotton.n.01", "name": "Peruvian_cotton"}, + {"id": 19092, "synset": "wild_cotton.n.01", "name": "wild_cotton"}, + {"id": 19093, "synset": "kenaf.n.02", "name": "kenaf"}, + {"id": 19094, "synset": "sorrel_tree.n.02", "name": "sorrel_tree"}, + {"id": 19095, "synset": "rose_mallow.n.01", "name": "rose_mallow"}, + {"id": 19096, "synset": "cotton_rose.n.01", "name": "cotton_rose"}, + {"id": 19097, "synset": "roselle.n.01", "name": "roselle"}, + {"id": 19098, "synset": "mahoe.n.01", "name": "mahoe"}, + {"id": 19099, "synset": "flower-of-an-hour.n.01", "name": "flower-of-an-hour"}, + {"id": 19100, "synset": "lacebark.n.01", "name": "lacebark"}, + {"id": 19101, "synset": "wild_hollyhock.n.02", "name": "wild_hollyhock"}, + {"id": 19102, "synset": "mountain_hollyhock.n.01", "name": "mountain_hollyhock"}, + {"id": 19103, "synset": "seashore_mallow.n.01", "name": "seashore_mallow"}, + {"id": 19104, "synset": "salt_marsh_mallow.n.01", "name": "salt_marsh_mallow"}, + {"id": 19105, "synset": "chaparral_mallow.n.01", "name": "chaparral_mallow"}, + {"id": 19106, "synset": "malope.n.01", "name": "malope"}, + {"id": 19107, "synset": "false_mallow.n.02", "name": "false_mallow"}, + {"id": 19108, "synset": "waxmallow.n.01", "name": "waxmallow"}, + {"id": 19109, "synset": "glade_mallow.n.01", "name": "glade_mallow"}, + {"id": 19110, "synset": "pavonia.n.01", "name": "pavonia"}, + {"id": 19111, "synset": "ribbon_tree.n.01", "name": "ribbon_tree"}, + {"id": 19112, "synset": "bush_hibiscus.n.01", "name": "bush_hibiscus"}, + {"id": 19113, "synset": "virginia_mallow.n.01", "name": "Virginia_mallow"}, + {"id": 19114, "synset": "queensland_hemp.n.01", "name": "Queensland_hemp"}, + {"id": 19115, "synset": "indian_mallow.n.01", "name": "Indian_mallow"}, + {"id": 19116, "synset": "checkerbloom.n.01", "name": "checkerbloom"}, + {"id": 19117, "synset": "globe_mallow.n.01", "name": "globe_mallow"}, + {"id": 19118, "synset": "prairie_mallow.n.01", "name": "prairie_mallow"}, + {"id": 19119, "synset": "tulipwood_tree.n.01", "name": "tulipwood_tree"}, + {"id": 19120, "synset": "portia_tree.n.01", "name": "portia_tree"}, + { + "id": 19121, + "synset": "red_silk-cotton_tree.n.01", + "name": "red_silk-cotton_tree", + }, + { + "id": 19122, + "synset": "cream-of-tartar_tree.n.01", + "name": "cream-of-tartar_tree", + }, + {"id": 19123, "synset": "baobab.n.01", "name": "baobab"}, + {"id": 19124, "synset": "kapok.n.02", "name": "kapok"}, + {"id": 19125, "synset": "durian.n.01", "name": "durian"}, + {"id": 19126, "synset": "montezuma.n.01", "name": "Montezuma"}, + {"id": 19127, "synset": "shaving-brush_tree.n.01", "name": "shaving-brush_tree"}, + {"id": 19128, "synset": "quandong.n.03", "name": "quandong"}, + {"id": 19129, "synset": "quandong.n.02", "name": "quandong"}, + {"id": 19130, "synset": "makomako.n.01", "name": "makomako"}, + {"id": 19131, "synset": "jamaican_cherry.n.01", "name": "Jamaican_cherry"}, + {"id": 19132, "synset": "breakax.n.01", "name": "breakax"}, + {"id": 19133, "synset": "sterculia.n.01", "name": "sterculia"}, + {"id": 19134, "synset": "panama_tree.n.01", "name": "Panama_tree"}, + {"id": 19135, "synset": "kalumpang.n.01", "name": "kalumpang"}, + {"id": 19136, "synset": "bottle-tree.n.01", "name": "bottle-tree"}, + {"id": 19137, "synset": "flame_tree.n.04", "name": "flame_tree"}, + {"id": 19138, "synset": "flame_tree.n.03", "name": "flame_tree"}, + {"id": 19139, "synset": "kurrajong.n.01", "name": "kurrajong"}, + { + "id": 19140, + "synset": "queensland_bottletree.n.01", + "name": "Queensland_bottletree", + }, + {"id": 19141, "synset": "kola.n.01", "name": "kola"}, + {"id": 19142, "synset": "kola_nut.n.01", "name": "kola_nut"}, + { + "id": 19143, + "synset": "chinese_parasol_tree.n.01", + "name": "Chinese_parasol_tree", + }, + {"id": 19144, "synset": "flannelbush.n.01", "name": "flannelbush"}, + {"id": 19145, "synset": "screw_tree.n.01", "name": "screw_tree"}, + { + "id": 19146, + "synset": "nut-leaved_screw_tree.n.01", + "name": "nut-leaved_screw_tree", + }, + {"id": 19147, "synset": "red_beech.n.02", "name": "red_beech"}, + {"id": 19148, "synset": "looking_glass_tree.n.01", "name": "looking_glass_tree"}, + {"id": 19149, "synset": "looking-glass_plant.n.01", "name": "looking-glass_plant"}, + {"id": 19150, "synset": "honey_bell.n.01", "name": "honey_bell"}, + {"id": 19151, "synset": "mayeng.n.01", "name": "mayeng"}, + {"id": 19152, "synset": "silver_tree.n.02", "name": "silver_tree"}, + {"id": 19153, "synset": "cacao.n.01", "name": "cacao"}, + {"id": 19154, "synset": "obeche.n.02", "name": "obeche"}, + {"id": 19155, "synset": "linden.n.02", "name": "linden"}, + {"id": 19156, "synset": "american_basswood.n.01", "name": "American_basswood"}, + {"id": 19157, "synset": "small-leaved_linden.n.01", "name": "small-leaved_linden"}, + {"id": 19158, "synset": "white_basswood.n.01", "name": "white_basswood"}, + {"id": 19159, "synset": "japanese_linden.n.01", "name": "Japanese_linden"}, + {"id": 19160, "synset": "silver_lime.n.01", "name": "silver_lime"}, + {"id": 19161, "synset": "corchorus.n.01", "name": "corchorus"}, + {"id": 19162, "synset": "african_hemp.n.02", "name": "African_hemp"}, + {"id": 19163, "synset": "herb.n.01", "name": "herb"}, + {"id": 19164, "synset": "protea.n.01", "name": "protea"}, + {"id": 19165, "synset": "honeypot.n.01", "name": "honeypot"}, + {"id": 19166, "synset": "honeyflower.n.02", "name": "honeyflower"}, + {"id": 19167, "synset": "banksia.n.01", "name": "banksia"}, + {"id": 19168, "synset": "honeysuckle.n.02", "name": "honeysuckle"}, + {"id": 19169, "synset": "smoke_bush.n.02", "name": "smoke_bush"}, + {"id": 19170, "synset": "chilean_firebush.n.01", "name": "Chilean_firebush"}, + {"id": 19171, "synset": "chilean_nut.n.01", "name": "Chilean_nut"}, + {"id": 19172, "synset": "grevillea.n.01", "name": "grevillea"}, + { + "id": 19173, + "synset": "red-flowered_silky_oak.n.01", + "name": "red-flowered_silky_oak", + }, + {"id": 19174, "synset": "silky_oak.n.01", "name": "silky_oak"}, + {"id": 19175, "synset": "beefwood.n.05", "name": "beefwood"}, + {"id": 19176, "synset": "cushion_flower.n.01", "name": "cushion_flower"}, + {"id": 19177, "synset": "rewa-rewa.n.01", "name": "rewa-rewa"}, + {"id": 19178, "synset": "honeyflower.n.01", "name": "honeyflower"}, + {"id": 19179, "synset": "silver_tree.n.01", "name": "silver_tree"}, + {"id": 19180, "synset": "lomatia.n.01", "name": "lomatia"}, + {"id": 19181, "synset": "macadamia.n.01", "name": "macadamia"}, + { + "id": 19182, + "synset": "macadamia_integrifolia.n.01", + "name": "Macadamia_integrifolia", + }, + {"id": 19183, "synset": "macadamia_nut.n.01", "name": "macadamia_nut"}, + {"id": 19184, "synset": "queensland_nut.n.01", "name": "Queensland_nut"}, + {"id": 19185, "synset": "prickly_ash.n.02", "name": "prickly_ash"}, + {"id": 19186, "synset": "geebung.n.01", "name": "geebung"}, + {"id": 19187, "synset": "wheel_tree.n.01", "name": "wheel_tree"}, + {"id": 19188, "synset": "scrub_beefwood.n.01", "name": "scrub_beefwood"}, + {"id": 19189, "synset": "waratah.n.02", "name": "waratah"}, + {"id": 19190, "synset": "waratah.n.01", "name": "waratah"}, + {"id": 19191, "synset": "casuarina.n.01", "name": "casuarina"}, + {"id": 19192, "synset": "she-oak.n.01", "name": "she-oak"}, + {"id": 19193, "synset": "beefwood.n.03", "name": "beefwood"}, + {"id": 19194, "synset": "australian_pine.n.01", "name": "Australian_pine"}, + {"id": 19195, "synset": "heath.n.01", "name": "heath"}, + {"id": 19196, "synset": "tree_heath.n.02", "name": "tree_heath"}, + {"id": 19197, "synset": "briarroot.n.01", "name": "briarroot"}, + {"id": 19198, "synset": "winter_heath.n.01", "name": "winter_heath"}, + {"id": 19199, "synset": "bell_heather.n.02", "name": "bell_heather"}, + {"id": 19200, "synset": "cornish_heath.n.01", "name": "Cornish_heath"}, + {"id": 19201, "synset": "spanish_heath.n.01", "name": "Spanish_heath"}, + { + "id": 19202, + "synset": "prince-of-wales'-heath.n.01", + "name": "Prince-of-Wales'-heath", + }, + {"id": 19203, "synset": "bog_rosemary.n.01", "name": "bog_rosemary"}, + {"id": 19204, "synset": "marsh_andromeda.n.01", "name": "marsh_andromeda"}, + {"id": 19205, "synset": "madrona.n.01", "name": "madrona"}, + {"id": 19206, "synset": "strawberry_tree.n.01", "name": "strawberry_tree"}, + {"id": 19207, "synset": "bearberry.n.03", "name": "bearberry"}, + {"id": 19208, "synset": "alpine_bearberry.n.01", "name": "alpine_bearberry"}, + {"id": 19209, "synset": "heartleaf_manzanita.n.01", "name": "heartleaf_manzanita"}, + {"id": 19210, "synset": "parry_manzanita.n.01", "name": "Parry_manzanita"}, + {"id": 19211, "synset": "spike_heath.n.01", "name": "spike_heath"}, + {"id": 19212, "synset": "bryanthus.n.01", "name": "bryanthus"}, + {"id": 19213, "synset": "leatherleaf.n.02", "name": "leatherleaf"}, + {"id": 19214, "synset": "connemara_heath.n.01", "name": "Connemara_heath"}, + {"id": 19215, "synset": "trailing_arbutus.n.01", "name": "trailing_arbutus"}, + {"id": 19216, "synset": "creeping_snowberry.n.01", "name": "creeping_snowberry"}, + {"id": 19217, "synset": "salal.n.01", "name": "salal"}, + {"id": 19218, "synset": "huckleberry.n.02", "name": "huckleberry"}, + {"id": 19219, "synset": "black_huckleberry.n.01", "name": "black_huckleberry"}, + {"id": 19220, "synset": "dangleberry.n.01", "name": "dangleberry"}, + {"id": 19221, "synset": "box_huckleberry.n.01", "name": "box_huckleberry"}, + {"id": 19222, "synset": "kalmia.n.01", "name": "kalmia"}, + {"id": 19223, "synset": "mountain_laurel.n.01", "name": "mountain_laurel"}, + {"id": 19224, "synset": "swamp_laurel.n.01", "name": "swamp_laurel"}, + {"id": 19225, "synset": "trapper's_tea.n.01", "name": "trapper's_tea"}, + {"id": 19226, "synset": "wild_rosemary.n.01", "name": "wild_rosemary"}, + {"id": 19227, "synset": "sand_myrtle.n.01", "name": "sand_myrtle"}, + {"id": 19228, "synset": "leucothoe.n.01", "name": "leucothoe"}, + {"id": 19229, "synset": "dog_laurel.n.01", "name": "dog_laurel"}, + {"id": 19230, "synset": "sweet_bells.n.01", "name": "sweet_bells"}, + {"id": 19231, "synset": "alpine_azalea.n.01", "name": "alpine_azalea"}, + {"id": 19232, "synset": "staggerbush.n.01", "name": "staggerbush"}, + {"id": 19233, "synset": "maleberry.n.01", "name": "maleberry"}, + {"id": 19234, "synset": "fetterbush.n.02", "name": "fetterbush"}, + {"id": 19235, "synset": "false_azalea.n.01", "name": "false_azalea"}, + {"id": 19236, "synset": "minniebush.n.01", "name": "minniebush"}, + {"id": 19237, "synset": "sorrel_tree.n.01", "name": "sorrel_tree"}, + {"id": 19238, "synset": "mountain_heath.n.01", "name": "mountain_heath"}, + {"id": 19239, "synset": "purple_heather.n.01", "name": "purple_heather"}, + {"id": 19240, "synset": "fetterbush.n.01", "name": "fetterbush"}, + {"id": 19241, "synset": "rhododendron.n.01", "name": "rhododendron"}, + {"id": 19242, "synset": "coast_rhododendron.n.01", "name": "coast_rhododendron"}, + {"id": 19243, "synset": "rosebay.n.01", "name": "rosebay"}, + {"id": 19244, "synset": "swamp_azalea.n.01", "name": "swamp_azalea"}, + {"id": 19245, "synset": "azalea.n.01", "name": "azalea"}, + {"id": 19246, "synset": "cranberry.n.01", "name": "cranberry"}, + {"id": 19247, "synset": "american_cranberry.n.01", "name": "American_cranberry"}, + {"id": 19248, "synset": "european_cranberry.n.01", "name": "European_cranberry"}, + {"id": 19249, "synset": "blueberry.n.01", "name": "blueberry"}, + {"id": 19250, "synset": "farkleberry.n.01", "name": "farkleberry"}, + {"id": 19251, "synset": "low-bush_blueberry.n.01", "name": "low-bush_blueberry"}, + {"id": 19252, "synset": "rabbiteye_blueberry.n.01", "name": "rabbiteye_blueberry"}, + {"id": 19253, "synset": "dwarf_bilberry.n.01", "name": "dwarf_bilberry"}, + {"id": 19254, "synset": "evergreen_blueberry.n.01", "name": "evergreen_blueberry"}, + { + "id": 19255, + "synset": "evergreen_huckleberry.n.01", + "name": "evergreen_huckleberry", + }, + {"id": 19256, "synset": "bilberry.n.02", "name": "bilberry"}, + {"id": 19257, "synset": "bilberry.n.01", "name": "bilberry"}, + {"id": 19258, "synset": "bog_bilberry.n.01", "name": "bog_bilberry"}, + {"id": 19259, "synset": "dryland_blueberry.n.01", "name": "dryland_blueberry"}, + {"id": 19260, "synset": "grouseberry.n.01", "name": "grouseberry"}, + {"id": 19261, "synset": "deerberry.n.01", "name": "deerberry"}, + {"id": 19262, "synset": "cowberry.n.01", "name": "cowberry"}, + {"id": 19263, "synset": "diapensia.n.01", "name": "diapensia"}, + {"id": 19264, "synset": "galax.n.01", "name": "galax"}, + {"id": 19265, "synset": "pyxie.n.01", "name": "pyxie"}, + {"id": 19266, "synset": "shortia.n.01", "name": "shortia"}, + {"id": 19267, "synset": "oconee_bells.n.01", "name": "oconee_bells"}, + {"id": 19268, "synset": "australian_heath.n.01", "name": "Australian_heath"}, + {"id": 19269, "synset": "epacris.n.01", "name": "epacris"}, + {"id": 19270, "synset": "common_heath.n.02", "name": "common_heath"}, + {"id": 19271, "synset": "common_heath.n.01", "name": "common_heath"}, + {"id": 19272, "synset": "port_jackson_heath.n.01", "name": "Port_Jackson_heath"}, + {"id": 19273, "synset": "native_cranberry.n.01", "name": "native_cranberry"}, + {"id": 19274, "synset": "pink_fivecorner.n.01", "name": "pink_fivecorner"}, + {"id": 19275, "synset": "wintergreen.n.01", "name": "wintergreen"}, + {"id": 19276, "synset": "false_wintergreen.n.01", "name": "false_wintergreen"}, + {"id": 19277, "synset": "lesser_wintergreen.n.01", "name": "lesser_wintergreen"}, + { + "id": 19278, + "synset": "wild_lily_of_the_valley.n.02", + "name": "wild_lily_of_the_valley", + }, + { + "id": 19279, + "synset": "wild_lily_of_the_valley.n.01", + "name": "wild_lily_of_the_valley", + }, + {"id": 19280, "synset": "pipsissewa.n.01", "name": "pipsissewa"}, + {"id": 19281, "synset": "love-in-winter.n.01", "name": "love-in-winter"}, + { + "id": 19282, + "synset": "one-flowered_wintergreen.n.01", + "name": "one-flowered_wintergreen", + }, + {"id": 19283, "synset": "indian_pipe.n.01", "name": "Indian_pipe"}, + {"id": 19284, "synset": "pinesap.n.01", "name": "pinesap"}, + {"id": 19285, "synset": "beech.n.01", "name": "beech"}, + {"id": 19286, "synset": "common_beech.n.01", "name": "common_beech"}, + {"id": 19287, "synset": "copper_beech.n.01", "name": "copper_beech"}, + {"id": 19288, "synset": "american_beech.n.01", "name": "American_beech"}, + {"id": 19289, "synset": "weeping_beech.n.01", "name": "weeping_beech"}, + {"id": 19290, "synset": "japanese_beech.n.01", "name": "Japanese_beech"}, + {"id": 19291, "synset": "chestnut.n.02", "name": "chestnut"}, + {"id": 19292, "synset": "american_chestnut.n.01", "name": "American_chestnut"}, + {"id": 19293, "synset": "european_chestnut.n.01", "name": "European_chestnut"}, + {"id": 19294, "synset": "chinese_chestnut.n.01", "name": "Chinese_chestnut"}, + {"id": 19295, "synset": "japanese_chestnut.n.01", "name": "Japanese_chestnut"}, + {"id": 19296, "synset": "allegheny_chinkapin.n.01", "name": "Allegheny_chinkapin"}, + {"id": 19297, "synset": "ozark_chinkapin.n.01", "name": "Ozark_chinkapin"}, + {"id": 19298, "synset": "oak_chestnut.n.01", "name": "oak_chestnut"}, + {"id": 19299, "synset": "giant_chinkapin.n.01", "name": "giant_chinkapin"}, + { + "id": 19300, + "synset": "dwarf_golden_chinkapin.n.01", + "name": "dwarf_golden_chinkapin", + }, + {"id": 19301, "synset": "tanbark_oak.n.01", "name": "tanbark_oak"}, + {"id": 19302, "synset": "japanese_oak.n.02", "name": "Japanese_oak"}, + {"id": 19303, "synset": "southern_beech.n.01", "name": "southern_beech"}, + {"id": 19304, "synset": "myrtle_beech.n.01", "name": "myrtle_beech"}, + {"id": 19305, "synset": "coigue.n.01", "name": "Coigue"}, + {"id": 19306, "synset": "new_zealand_beech.n.01", "name": "New_Zealand_beech"}, + {"id": 19307, "synset": "silver_beech.n.01", "name": "silver_beech"}, + {"id": 19308, "synset": "roble_beech.n.01", "name": "roble_beech"}, + {"id": 19309, "synset": "rauli_beech.n.01", "name": "rauli_beech"}, + {"id": 19310, "synset": "black_beech.n.01", "name": "black_beech"}, + {"id": 19311, "synset": "hard_beech.n.01", "name": "hard_beech"}, + {"id": 19312, "synset": "acorn.n.01", "name": "acorn"}, + {"id": 19313, "synset": "cupule.n.01", "name": "cupule"}, + {"id": 19314, "synset": "oak.n.02", "name": "oak"}, + {"id": 19315, "synset": "live_oak.n.01", "name": "live_oak"}, + {"id": 19316, "synset": "coast_live_oak.n.01", "name": "coast_live_oak"}, + {"id": 19317, "synset": "white_oak.n.01", "name": "white_oak"}, + {"id": 19318, "synset": "american_white_oak.n.01", "name": "American_white_oak"}, + {"id": 19319, "synset": "arizona_white_oak.n.01", "name": "Arizona_white_oak"}, + {"id": 19320, "synset": "swamp_white_oak.n.01", "name": "swamp_white_oak"}, + {"id": 19321, "synset": "european_turkey_oak.n.01", "name": "European_turkey_oak"}, + {"id": 19322, "synset": "canyon_oak.n.01", "name": "canyon_oak"}, + {"id": 19323, "synset": "scarlet_oak.n.01", "name": "scarlet_oak"}, + {"id": 19324, "synset": "jack_oak.n.02", "name": "jack_oak"}, + {"id": 19325, "synset": "red_oak.n.01", "name": "red_oak"}, + {"id": 19326, "synset": "southern_red_oak.n.01", "name": "southern_red_oak"}, + {"id": 19327, "synset": "oregon_white_oak.n.01", "name": "Oregon_white_oak"}, + {"id": 19328, "synset": "holm_oak.n.02", "name": "holm_oak"}, + {"id": 19329, "synset": "bear_oak.n.01", "name": "bear_oak"}, + {"id": 19330, "synset": "shingle_oak.n.01", "name": "shingle_oak"}, + {"id": 19331, "synset": "bluejack_oak.n.01", "name": "bluejack_oak"}, + { + "id": 19332, + "synset": "california_black_oak.n.01", + "name": "California_black_oak", + }, + {"id": 19333, "synset": "american_turkey_oak.n.01", "name": "American_turkey_oak"}, + {"id": 19334, "synset": "laurel_oak.n.01", "name": "laurel_oak"}, + { + "id": 19335, + "synset": "california_white_oak.n.01", + "name": "California_white_oak", + }, + {"id": 19336, "synset": "overcup_oak.n.01", "name": "overcup_oak"}, + {"id": 19337, "synset": "bur_oak.n.01", "name": "bur_oak"}, + {"id": 19338, "synset": "scrub_oak.n.01", "name": "scrub_oak"}, + {"id": 19339, "synset": "blackjack_oak.n.01", "name": "blackjack_oak"}, + {"id": 19340, "synset": "swamp_chestnut_oak.n.01", "name": "swamp_chestnut_oak"}, + {"id": 19341, "synset": "japanese_oak.n.01", "name": "Japanese_oak"}, + {"id": 19342, "synset": "chestnut_oak.n.01", "name": "chestnut_oak"}, + {"id": 19343, "synset": "chinquapin_oak.n.01", "name": "chinquapin_oak"}, + {"id": 19344, "synset": "myrtle_oak.n.01", "name": "myrtle_oak"}, + {"id": 19345, "synset": "water_oak.n.01", "name": "water_oak"}, + {"id": 19346, "synset": "nuttall_oak.n.01", "name": "Nuttall_oak"}, + {"id": 19347, "synset": "durmast.n.01", "name": "durmast"}, + {"id": 19348, "synset": "basket_oak.n.01", "name": "basket_oak"}, + {"id": 19349, "synset": "pin_oak.n.01", "name": "pin_oak"}, + {"id": 19350, "synset": "willow_oak.n.01", "name": "willow_oak"}, + {"id": 19351, "synset": "dwarf_chinkapin_oak.n.01", "name": "dwarf_chinkapin_oak"}, + {"id": 19352, "synset": "common_oak.n.01", "name": "common_oak"}, + {"id": 19353, "synset": "northern_red_oak.n.01", "name": "northern_red_oak"}, + {"id": 19354, "synset": "shumard_oak.n.01", "name": "Shumard_oak"}, + {"id": 19355, "synset": "post_oak.n.01", "name": "post_oak"}, + {"id": 19356, "synset": "cork_oak.n.01", "name": "cork_oak"}, + {"id": 19357, "synset": "spanish_oak.n.01", "name": "Spanish_oak"}, + {"id": 19358, "synset": "huckleberry_oak.n.01", "name": "huckleberry_oak"}, + {"id": 19359, "synset": "chinese_cork_oak.n.01", "name": "Chinese_cork_oak"}, + {"id": 19360, "synset": "black_oak.n.01", "name": "black_oak"}, + {"id": 19361, "synset": "southern_live_oak.n.01", "name": "southern_live_oak"}, + {"id": 19362, "synset": "interior_live_oak.n.01", "name": "interior_live_oak"}, + {"id": 19363, "synset": "mast.n.02", "name": "mast"}, + {"id": 19364, "synset": "birch.n.02", "name": "birch"}, + {"id": 19365, "synset": "yellow_birch.n.01", "name": "yellow_birch"}, + { + "id": 19366, + "synset": "american_white_birch.n.01", + "name": "American_white_birch", + }, + {"id": 19367, "synset": "grey_birch.n.01", "name": "grey_birch"}, + {"id": 19368, "synset": "silver_birch.n.01", "name": "silver_birch"}, + {"id": 19369, "synset": "downy_birch.n.01", "name": "downy_birch"}, + {"id": 19370, "synset": "black_birch.n.02", "name": "black_birch"}, + {"id": 19371, "synset": "sweet_birch.n.01", "name": "sweet_birch"}, + {"id": 19372, "synset": "yukon_white_birch.n.01", "name": "Yukon_white_birch"}, + {"id": 19373, "synset": "swamp_birch.n.01", "name": "swamp_birch"}, + { + "id": 19374, + "synset": "newfoundland_dwarf_birch.n.01", + "name": "Newfoundland_dwarf_birch", + }, + {"id": 19375, "synset": "alder.n.02", "name": "alder"}, + {"id": 19376, "synset": "common_alder.n.01", "name": "common_alder"}, + {"id": 19377, "synset": "grey_alder.n.01", "name": "grey_alder"}, + {"id": 19378, "synset": "seaside_alder.n.01", "name": "seaside_alder"}, + {"id": 19379, "synset": "white_alder.n.01", "name": "white_alder"}, + {"id": 19380, "synset": "red_alder.n.01", "name": "red_alder"}, + {"id": 19381, "synset": "speckled_alder.n.01", "name": "speckled_alder"}, + {"id": 19382, "synset": "smooth_alder.n.01", "name": "smooth_alder"}, + {"id": 19383, "synset": "green_alder.n.02", "name": "green_alder"}, + {"id": 19384, "synset": "green_alder.n.01", "name": "green_alder"}, + {"id": 19385, "synset": "hornbeam.n.01", "name": "hornbeam"}, + {"id": 19386, "synset": "european_hornbeam.n.01", "name": "European_hornbeam"}, + {"id": 19387, "synset": "american_hornbeam.n.01", "name": "American_hornbeam"}, + {"id": 19388, "synset": "hop_hornbeam.n.01", "name": "hop_hornbeam"}, + { + "id": 19389, + "synset": "old_world_hop_hornbeam.n.01", + "name": "Old_World_hop_hornbeam", + }, + { + "id": 19390, + "synset": "eastern_hop_hornbeam.n.01", + "name": "Eastern_hop_hornbeam", + }, + {"id": 19391, "synset": "hazelnut.n.01", "name": "hazelnut"}, + {"id": 19392, "synset": "american_hazel.n.01", "name": "American_hazel"}, + {"id": 19393, "synset": "cobnut.n.01", "name": "cobnut"}, + {"id": 19394, "synset": "beaked_hazelnut.n.01", "name": "beaked_hazelnut"}, + {"id": 19395, "synset": "centaury.n.01", "name": "centaury"}, + {"id": 19396, "synset": "rosita.n.01", "name": "rosita"}, + {"id": 19397, "synset": "lesser_centaury.n.01", "name": "lesser_centaury"}, + {"id": 19398, "synset": "seaside_centaury.n.01", "name": "seaside_centaury"}, + {"id": 19399, "synset": "slender_centaury.n.01", "name": "slender_centaury"}, + {"id": 19400, "synset": "prairie_gentian.n.01", "name": "prairie_gentian"}, + {"id": 19401, "synset": "persian_violet.n.01", "name": "Persian_violet"}, + {"id": 19402, "synset": "columbo.n.01", "name": "columbo"}, + {"id": 19403, "synset": "gentian.n.01", "name": "gentian"}, + {"id": 19404, "synset": "gentianella.n.02", "name": "gentianella"}, + {"id": 19405, "synset": "closed_gentian.n.02", "name": "closed_gentian"}, + {"id": 19406, "synset": "explorer's_gentian.n.01", "name": "explorer's_gentian"}, + {"id": 19407, "synset": "closed_gentian.n.01", "name": "closed_gentian"}, + { + "id": 19408, + "synset": "great_yellow_gentian.n.01", + "name": "great_yellow_gentian", + }, + {"id": 19409, "synset": "marsh_gentian.n.01", "name": "marsh_gentian"}, + {"id": 19410, "synset": "soapwort_gentian.n.01", "name": "soapwort_gentian"}, + {"id": 19411, "synset": "striped_gentian.n.01", "name": "striped_gentian"}, + {"id": 19412, "synset": "agueweed.n.01", "name": "agueweed"}, + {"id": 19413, "synset": "felwort.n.01", "name": "felwort"}, + {"id": 19414, "synset": "fringed_gentian.n.01", "name": "fringed_gentian"}, + { + "id": 19415, + "synset": "gentianopsis_crinita.n.01", + "name": "Gentianopsis_crinita", + }, + { + "id": 19416, + "synset": "gentianopsis_detonsa.n.01", + "name": "Gentianopsis_detonsa", + }, + { + "id": 19417, + "synset": "gentianopsid_procera.n.01", + "name": "Gentianopsid_procera", + }, + { + "id": 19418, + "synset": "gentianopsis_thermalis.n.01", + "name": "Gentianopsis_thermalis", + }, + {"id": 19419, "synset": "tufted_gentian.n.01", "name": "tufted_gentian"}, + {"id": 19420, "synset": "spurred_gentian.n.01", "name": "spurred_gentian"}, + {"id": 19421, "synset": "sabbatia.n.01", "name": "sabbatia"}, + {"id": 19422, "synset": "toothbrush_tree.n.01", "name": "toothbrush_tree"}, + {"id": 19423, "synset": "olive_tree.n.01", "name": "olive_tree"}, + {"id": 19424, "synset": "olive.n.02", "name": "olive"}, + {"id": 19425, "synset": "olive.n.01", "name": "olive"}, + {"id": 19426, "synset": "black_maire.n.01", "name": "black_maire"}, + {"id": 19427, "synset": "white_maire.n.01", "name": "white_maire"}, + {"id": 19428, "synset": "fringe_tree.n.01", "name": "fringe_tree"}, + {"id": 19429, "synset": "fringe_bush.n.01", "name": "fringe_bush"}, + {"id": 19430, "synset": "forestiera.n.01", "name": "forestiera"}, + {"id": 19431, "synset": "forsythia.n.01", "name": "forsythia"}, + {"id": 19432, "synset": "ash.n.02", "name": "ash"}, + {"id": 19433, "synset": "white_ash.n.02", "name": "white_ash"}, + {"id": 19434, "synset": "swamp_ash.n.01", "name": "swamp_ash"}, + {"id": 19435, "synset": "flowering_ash.n.03", "name": "flowering_ash"}, + {"id": 19436, "synset": "european_ash.n.01", "name": "European_ash"}, + {"id": 19437, "synset": "oregon_ash.n.01", "name": "Oregon_ash"}, + {"id": 19438, "synset": "black_ash.n.01", "name": "black_ash"}, + {"id": 19439, "synset": "manna_ash.n.01", "name": "manna_ash"}, + {"id": 19440, "synset": "red_ash.n.01", "name": "red_ash"}, + {"id": 19441, "synset": "green_ash.n.01", "name": "green_ash"}, + {"id": 19442, "synset": "blue_ash.n.01", "name": "blue_ash"}, + {"id": 19443, "synset": "mountain_ash.n.03", "name": "mountain_ash"}, + {"id": 19444, "synset": "pumpkin_ash.n.01", "name": "pumpkin_ash"}, + {"id": 19445, "synset": "arizona_ash.n.01", "name": "Arizona_ash"}, + {"id": 19446, "synset": "jasmine.n.01", "name": "jasmine"}, + {"id": 19447, "synset": "primrose_jasmine.n.01", "name": "primrose_jasmine"}, + {"id": 19448, "synset": "winter_jasmine.n.01", "name": "winter_jasmine"}, + {"id": 19449, "synset": "common_jasmine.n.01", "name": "common_jasmine"}, + {"id": 19450, "synset": "privet.n.01", "name": "privet"}, + {"id": 19451, "synset": "amur_privet.n.01", "name": "Amur_privet"}, + {"id": 19452, "synset": "japanese_privet.n.01", "name": "Japanese_privet"}, + { + "id": 19453, + "synset": "ligustrum_obtusifolium.n.01", + "name": "Ligustrum_obtusifolium", + }, + {"id": 19454, "synset": "common_privet.n.01", "name": "common_privet"}, + {"id": 19455, "synset": "devilwood.n.01", "name": "devilwood"}, + {"id": 19456, "synset": "mock_privet.n.01", "name": "mock_privet"}, + {"id": 19457, "synset": "lilac.n.01", "name": "lilac"}, + {"id": 19458, "synset": "himalayan_lilac.n.01", "name": "Himalayan_lilac"}, + {"id": 19459, "synset": "persian_lilac.n.02", "name": "Persian_lilac"}, + {"id": 19460, "synset": "japanese_tree_lilac.n.01", "name": "Japanese_tree_lilac"}, + {"id": 19461, "synset": "japanese_lilac.n.01", "name": "Japanese_lilac"}, + {"id": 19462, "synset": "common_lilac.n.01", "name": "common_lilac"}, + {"id": 19463, "synset": "bloodwort.n.01", "name": "bloodwort"}, + {"id": 19464, "synset": "kangaroo_paw.n.01", "name": "kangaroo_paw"}, + { + "id": 19465, + "synset": "virginian_witch_hazel.n.01", + "name": "Virginian_witch_hazel", + }, + {"id": 19466, "synset": "vernal_witch_hazel.n.01", "name": "vernal_witch_hazel"}, + {"id": 19467, "synset": "winter_hazel.n.01", "name": "winter_hazel"}, + {"id": 19468, "synset": "fothergilla.n.01", "name": "fothergilla"}, + {"id": 19469, "synset": "liquidambar.n.02", "name": "liquidambar"}, + {"id": 19470, "synset": "sweet_gum.n.03", "name": "sweet_gum"}, + {"id": 19471, "synset": "iron_tree.n.01", "name": "iron_tree"}, + {"id": 19472, "synset": "walnut.n.03", "name": "walnut"}, + { + "id": 19473, + "synset": "california_black_walnut.n.01", + "name": "California_black_walnut", + }, + {"id": 19474, "synset": "butternut.n.01", "name": "butternut"}, + {"id": 19475, "synset": "black_walnut.n.01", "name": "black_walnut"}, + {"id": 19476, "synset": "english_walnut.n.01", "name": "English_walnut"}, + {"id": 19477, "synset": "hickory.n.02", "name": "hickory"}, + {"id": 19478, "synset": "water_hickory.n.01", "name": "water_hickory"}, + {"id": 19479, "synset": "pignut.n.01", "name": "pignut"}, + {"id": 19480, "synset": "bitternut.n.01", "name": "bitternut"}, + {"id": 19481, "synset": "pecan.n.02", "name": "pecan"}, + {"id": 19482, "synset": "big_shellbark.n.01", "name": "big_shellbark"}, + {"id": 19483, "synset": "nutmeg_hickory.n.01", "name": "nutmeg_hickory"}, + {"id": 19484, "synset": "shagbark.n.01", "name": "shagbark"}, + {"id": 19485, "synset": "mockernut.n.01", "name": "mockernut"}, + {"id": 19486, "synset": "wing_nut.n.01", "name": "wing_nut"}, + {"id": 19487, "synset": "caucasian_walnut.n.01", "name": "Caucasian_walnut"}, + {"id": 19488, "synset": "dhawa.n.01", "name": "dhawa"}, + {"id": 19489, "synset": "combretum.n.01", "name": "combretum"}, + {"id": 19490, "synset": "hiccup_nut.n.01", "name": "hiccup_nut"}, + {"id": 19491, "synset": "bush_willow.n.02", "name": "bush_willow"}, + {"id": 19492, "synset": "bush_willow.n.01", "name": "bush_willow"}, + {"id": 19493, "synset": "button_tree.n.01", "name": "button_tree"}, + {"id": 19494, "synset": "white_mangrove.n.02", "name": "white_mangrove"}, + {"id": 19495, "synset": "oleaster.n.01", "name": "oleaster"}, + {"id": 19496, "synset": "water_milfoil.n.01", "name": "water_milfoil"}, + {"id": 19497, "synset": "anchovy_pear.n.01", "name": "anchovy_pear"}, + {"id": 19498, "synset": "brazil_nut.n.01", "name": "brazil_nut"}, + {"id": 19499, "synset": "loosestrife.n.01", "name": "loosestrife"}, + {"id": 19500, "synset": "purple_loosestrife.n.01", "name": "purple_loosestrife"}, + {"id": 19501, "synset": "grass_poly.n.01", "name": "grass_poly"}, + {"id": 19502, "synset": "crape_myrtle.n.01", "name": "crape_myrtle"}, + { + "id": 19503, + "synset": "queen's_crape_myrtle.n.01", + "name": "Queen's_crape_myrtle", + }, + {"id": 19504, "synset": "myrtaceous_tree.n.01", "name": "myrtaceous_tree"}, + {"id": 19505, "synset": "myrtle.n.02", "name": "myrtle"}, + {"id": 19506, "synset": "common_myrtle.n.01", "name": "common_myrtle"}, + {"id": 19507, "synset": "bayberry.n.01", "name": "bayberry"}, + {"id": 19508, "synset": "allspice.n.01", "name": "allspice"}, + {"id": 19509, "synset": "allspice_tree.n.01", "name": "allspice_tree"}, + {"id": 19510, "synset": "sour_cherry.n.02", "name": "sour_cherry"}, + {"id": 19511, "synset": "nakedwood.n.02", "name": "nakedwood"}, + {"id": 19512, "synset": "surinam_cherry.n.02", "name": "Surinam_cherry"}, + {"id": 19513, "synset": "rose_apple.n.01", "name": "rose_apple"}, + {"id": 19514, "synset": "feijoa.n.01", "name": "feijoa"}, + {"id": 19515, "synset": "jaboticaba.n.01", "name": "jaboticaba"}, + {"id": 19516, "synset": "guava.n.02", "name": "guava"}, + {"id": 19517, "synset": "guava.n.01", "name": "guava"}, + {"id": 19518, "synset": "cattley_guava.n.01", "name": "cattley_guava"}, + {"id": 19519, "synset": "brazilian_guava.n.01", "name": "Brazilian_guava"}, + {"id": 19520, "synset": "gum_tree.n.01", "name": "gum_tree"}, + {"id": 19521, "synset": "eucalyptus.n.02", "name": "eucalyptus"}, + {"id": 19522, "synset": "flooded_gum.n.01", "name": "flooded_gum"}, + {"id": 19523, "synset": "mallee.n.01", "name": "mallee"}, + {"id": 19524, "synset": "stringybark.n.01", "name": "stringybark"}, + {"id": 19525, "synset": "smoothbark.n.01", "name": "smoothbark"}, + {"id": 19526, "synset": "red_gum.n.03", "name": "red_gum"}, + {"id": 19527, "synset": "red_gum.n.02", "name": "red_gum"}, + {"id": 19528, "synset": "river_red_gum.n.01", "name": "river_red_gum"}, + {"id": 19529, "synset": "mountain_swamp_gum.n.01", "name": "mountain_swamp_gum"}, + {"id": 19530, "synset": "snow_gum.n.01", "name": "snow_gum"}, + {"id": 19531, "synset": "alpine_ash.n.01", "name": "alpine_ash"}, + {"id": 19532, "synset": "white_mallee.n.01", "name": "white_mallee"}, + {"id": 19533, "synset": "white_stringybark.n.01", "name": "white_stringybark"}, + {"id": 19534, "synset": "white_mountain_ash.n.01", "name": "white_mountain_ash"}, + {"id": 19535, "synset": "blue_gum.n.01", "name": "blue_gum"}, + {"id": 19536, "synset": "rose_gum.n.01", "name": "rose_gum"}, + {"id": 19537, "synset": "cider_gum.n.01", "name": "cider_gum"}, + {"id": 19538, "synset": "swamp_gum.n.01", "name": "swamp_gum"}, + {"id": 19539, "synset": "spotted_gum.n.01", "name": "spotted_gum"}, + {"id": 19540, "synset": "lemon-scented_gum.n.01", "name": "lemon-scented_gum"}, + {"id": 19541, "synset": "black_mallee.n.01", "name": "black_mallee"}, + {"id": 19542, "synset": "forest_red_gum.n.01", "name": "forest_red_gum"}, + {"id": 19543, "synset": "mountain_ash.n.02", "name": "mountain_ash"}, + {"id": 19544, "synset": "manna_gum.n.01", "name": "manna_gum"}, + {"id": 19545, "synset": "clove.n.02", "name": "clove"}, + {"id": 19546, "synset": "clove.n.01", "name": "clove"}, + {"id": 19547, "synset": "tupelo.n.02", "name": "tupelo"}, + {"id": 19548, "synset": "water_gum.n.01", "name": "water_gum"}, + {"id": 19549, "synset": "sour_gum.n.01", "name": "sour_gum"}, + { + "id": 19550, + "synset": "enchanter's_nightshade.n.01", + "name": "enchanter's_nightshade", + }, + {"id": 19551, "synset": "circaea_lutetiana.n.01", "name": "Circaea_lutetiana"}, + {"id": 19552, "synset": "willowherb.n.01", "name": "willowherb"}, + {"id": 19553, "synset": "fireweed.n.01", "name": "fireweed"}, + {"id": 19554, "synset": "california_fuchsia.n.01", "name": "California_fuchsia"}, + {"id": 19555, "synset": "fuchsia.n.01", "name": "fuchsia"}, + {"id": 19556, "synset": "lady's-eardrop.n.01", "name": "lady's-eardrop"}, + {"id": 19557, "synset": "evening_primrose.n.01", "name": "evening_primrose"}, + { + "id": 19558, + "synset": "common_evening_primrose.n.01", + "name": "common_evening_primrose", + }, + {"id": 19559, "synset": "sundrops.n.01", "name": "sundrops"}, + {"id": 19560, "synset": "missouri_primrose.n.01", "name": "Missouri_primrose"}, + {"id": 19561, "synset": "pomegranate.n.01", "name": "pomegranate"}, + {"id": 19562, "synset": "mangrove.n.01", "name": "mangrove"}, + {"id": 19563, "synset": "daphne.n.01", "name": "daphne"}, + {"id": 19564, "synset": "garland_flower.n.01", "name": "garland_flower"}, + {"id": 19565, "synset": "spurge_laurel.n.01", "name": "spurge_laurel"}, + {"id": 19566, "synset": "mezereon.n.01", "name": "mezereon"}, + {"id": 19567, "synset": "indian_rhododendron.n.01", "name": "Indian_rhododendron"}, + {"id": 19568, "synset": "medinilla_magnifica.n.01", "name": "Medinilla_magnifica"}, + {"id": 19569, "synset": "deer_grass.n.01", "name": "deer_grass"}, + {"id": 19570, "synset": "canna.n.01", "name": "canna"}, + {"id": 19571, "synset": "achira.n.01", "name": "achira"}, + {"id": 19572, "synset": "arrowroot.n.02", "name": "arrowroot"}, + {"id": 19573, "synset": "banana.n.01", "name": "banana"}, + {"id": 19574, "synset": "dwarf_banana.n.01", "name": "dwarf_banana"}, + {"id": 19575, "synset": "japanese_banana.n.01", "name": "Japanese_banana"}, + {"id": 19576, "synset": "plantain.n.02", "name": "plantain"}, + {"id": 19577, "synset": "edible_banana.n.01", "name": "edible_banana"}, + {"id": 19578, "synset": "abaca.n.02", "name": "abaca"}, + {"id": 19579, "synset": "abyssinian_banana.n.01", "name": "Abyssinian_banana"}, + {"id": 19580, "synset": "ginger.n.01", "name": "ginger"}, + {"id": 19581, "synset": "common_ginger.n.01", "name": "common_ginger"}, + {"id": 19582, "synset": "turmeric.n.01", "name": "turmeric"}, + {"id": 19583, "synset": "galangal.n.01", "name": "galangal"}, + {"id": 19584, "synset": "shellflower.n.02", "name": "shellflower"}, + {"id": 19585, "synset": "grains_of_paradise.n.01", "name": "grains_of_paradise"}, + {"id": 19586, "synset": "cardamom.n.01", "name": "cardamom"}, + {"id": 19587, "synset": "begonia.n.01", "name": "begonia"}, + { + "id": 19588, + "synset": "fibrous-rooted_begonia.n.01", + "name": "fibrous-rooted_begonia", + }, + {"id": 19589, "synset": "tuberous_begonia.n.01", "name": "tuberous_begonia"}, + {"id": 19590, "synset": "rhizomatous_begonia.n.01", "name": "rhizomatous_begonia"}, + {"id": 19591, "synset": "christmas_begonia.n.01", "name": "Christmas_begonia"}, + {"id": 19592, "synset": "angel-wing_begonia.n.01", "name": "angel-wing_begonia"}, + {"id": 19593, "synset": "beefsteak_begonia.n.01", "name": "beefsteak_begonia"}, + {"id": 19594, "synset": "star_begonia.n.01", "name": "star_begonia"}, + {"id": 19595, "synset": "rex_begonia.n.01", "name": "rex_begonia"}, + {"id": 19596, "synset": "wax_begonia.n.01", "name": "wax_begonia"}, + {"id": 19597, "synset": "socotra_begonia.n.01", "name": "Socotra_begonia"}, + { + "id": 19598, + "synset": "hybrid_tuberous_begonia.n.01", + "name": "hybrid_tuberous_begonia", + }, + {"id": 19599, "synset": "dillenia.n.01", "name": "dillenia"}, + {"id": 19600, "synset": "guinea_gold_vine.n.01", "name": "guinea_gold_vine"}, + {"id": 19601, "synset": "poon.n.02", "name": "poon"}, + {"id": 19602, "synset": "calaba.n.01", "name": "calaba"}, + {"id": 19603, "synset": "maria.n.02", "name": "Maria"}, + {"id": 19604, "synset": "laurelwood.n.01", "name": "laurelwood"}, + {"id": 19605, "synset": "alexandrian_laurel.n.01", "name": "Alexandrian_laurel"}, + {"id": 19606, "synset": "clusia.n.01", "name": "clusia"}, + {"id": 19607, "synset": "wild_fig.n.02", "name": "wild_fig"}, + {"id": 19608, "synset": "waxflower.n.02", "name": "waxflower"}, + {"id": 19609, "synset": "pitch_apple.n.01", "name": "pitch_apple"}, + {"id": 19610, "synset": "mangosteen.n.01", "name": "mangosteen"}, + {"id": 19611, "synset": "gamboge_tree.n.01", "name": "gamboge_tree"}, + {"id": 19612, "synset": "st_john's_wort.n.01", "name": "St_John's_wort"}, + { + "id": 19613, + "synset": "common_st_john's_wort.n.01", + "name": "common_St_John's_wort", + }, + { + "id": 19614, + "synset": "great_st_john's_wort.n.01", + "name": "great_St_John's_wort", + }, + { + "id": 19615, + "synset": "creeping_st_john's_wort.n.01", + "name": "creeping_St_John's_wort", + }, + { + "id": 19616, + "synset": "low_st_andrew's_cross.n.01", + "name": "low_St_Andrew's_cross", + }, + {"id": 19617, "synset": "klammath_weed.n.01", "name": "klammath_weed"}, + { + "id": 19618, + "synset": "shrubby_st_john's_wort.n.01", + "name": "shrubby_St_John's_wort", + }, + {"id": 19619, "synset": "st_peter's_wort.n.01", "name": "St_Peter's_wort"}, + { + "id": 19620, + "synset": "marsh_st-john's_wort.n.01", + "name": "marsh_St-John's_wort", + }, + {"id": 19621, "synset": "mammee_apple.n.01", "name": "mammee_apple"}, + {"id": 19622, "synset": "rose_chestnut.n.01", "name": "rose_chestnut"}, + {"id": 19623, "synset": "bower_actinidia.n.01", "name": "bower_actinidia"}, + {"id": 19624, "synset": "chinese_gooseberry.n.01", "name": "Chinese_gooseberry"}, + {"id": 19625, "synset": "silvervine.n.01", "name": "silvervine"}, + {"id": 19626, "synset": "wild_cinnamon.n.01", "name": "wild_cinnamon"}, + {"id": 19627, "synset": "papaya.n.01", "name": "papaya"}, + {"id": 19628, "synset": "souari.n.01", "name": "souari"}, + {"id": 19629, "synset": "rockrose.n.02", "name": "rockrose"}, + { + "id": 19630, + "synset": "white-leaved_rockrose.n.01", + "name": "white-leaved_rockrose", + }, + {"id": 19631, "synset": "common_gum_cistus.n.01", "name": "common_gum_cistus"}, + {"id": 19632, "synset": "frostweed.n.01", "name": "frostweed"}, + {"id": 19633, "synset": "dipterocarp.n.01", "name": "dipterocarp"}, + {"id": 19634, "synset": "red_lauan.n.02", "name": "red_lauan"}, + {"id": 19635, "synset": "governor's_plum.n.01", "name": "governor's_plum"}, + {"id": 19636, "synset": "kei_apple.n.01", "name": "kei_apple"}, + {"id": 19637, "synset": "ketembilla.n.01", "name": "ketembilla"}, + {"id": 19638, "synset": "chaulmoogra.n.01", "name": "chaulmoogra"}, + {"id": 19639, "synset": "wild_peach.n.01", "name": "wild_peach"}, + {"id": 19640, "synset": "candlewood.n.01", "name": "candlewood"}, + {"id": 19641, "synset": "boojum_tree.n.01", "name": "boojum_tree"}, + {"id": 19642, "synset": "bird's-eye_bush.n.01", "name": "bird's-eye_bush"}, + {"id": 19643, "synset": "granadilla.n.03", "name": "granadilla"}, + {"id": 19644, "synset": "granadilla.n.02", "name": "granadilla"}, + {"id": 19645, "synset": "granadilla.n.01", "name": "granadilla"}, + {"id": 19646, "synset": "maypop.n.01", "name": "maypop"}, + {"id": 19647, "synset": "jamaica_honeysuckle.n.01", "name": "Jamaica_honeysuckle"}, + { + "id": 19648, + "synset": "banana_passion_fruit.n.01", + "name": "banana_passion_fruit", + }, + {"id": 19649, "synset": "sweet_calabash.n.01", "name": "sweet_calabash"}, + {"id": 19650, "synset": "love-in-a-mist.n.01", "name": "love-in-a-mist"}, + {"id": 19651, "synset": "reseda.n.01", "name": "reseda"}, + {"id": 19652, "synset": "mignonette.n.01", "name": "mignonette"}, + {"id": 19653, "synset": "dyer's_rocket.n.01", "name": "dyer's_rocket"}, + {"id": 19654, "synset": "false_tamarisk.n.01", "name": "false_tamarisk"}, + {"id": 19655, "synset": "halophyte.n.01", "name": "halophyte"}, + {"id": 19656, "synset": "viola.n.01", "name": "viola"}, + {"id": 19657, "synset": "violet.n.01", "name": "violet"}, + {"id": 19658, "synset": "field_pansy.n.01", "name": "field_pansy"}, + {"id": 19659, "synset": "american_dog_violet.n.01", "name": "American_dog_violet"}, + {"id": 19660, "synset": "dog_violet.n.01", "name": "dog_violet"}, + {"id": 19661, "synset": "horned_violet.n.01", "name": "horned_violet"}, + {"id": 19662, "synset": "two-eyed_violet.n.01", "name": "two-eyed_violet"}, + {"id": 19663, "synset": "bird's-foot_violet.n.01", "name": "bird's-foot_violet"}, + {"id": 19664, "synset": "downy_yellow_violet.n.01", "name": "downy_yellow_violet"}, + {"id": 19665, "synset": "long-spurred_violet.n.01", "name": "long-spurred_violet"}, + {"id": 19666, "synset": "pale_violet.n.01", "name": "pale_violet"}, + {"id": 19667, "synset": "hedge_violet.n.01", "name": "hedge_violet"}, + {"id": 19668, "synset": "nettle.n.01", "name": "nettle"}, + {"id": 19669, "synset": "stinging_nettle.n.01", "name": "stinging_nettle"}, + {"id": 19670, "synset": "roman_nettle.n.01", "name": "Roman_nettle"}, + {"id": 19671, "synset": "ramie.n.01", "name": "ramie"}, + {"id": 19672, "synset": "wood_nettle.n.01", "name": "wood_nettle"}, + {"id": 19673, "synset": "australian_nettle.n.01", "name": "Australian_nettle"}, + { + "id": 19674, + "synset": "pellitory-of-the-wall.n.01", + "name": "pellitory-of-the-wall", + }, + {"id": 19675, "synset": "richweed.n.02", "name": "richweed"}, + {"id": 19676, "synset": "artillery_plant.n.01", "name": "artillery_plant"}, + {"id": 19677, "synset": "friendship_plant.n.01", "name": "friendship_plant"}, + { + "id": 19678, + "synset": "queensland_grass-cloth_plant.n.01", + "name": "Queensland_grass-cloth_plant", + }, + {"id": 19679, "synset": "pipturus_albidus.n.01", "name": "Pipturus_albidus"}, + {"id": 19680, "synset": "cannabis.n.01", "name": "cannabis"}, + {"id": 19681, "synset": "indian_hemp.n.01", "name": "Indian_hemp"}, + {"id": 19682, "synset": "mulberry.n.01", "name": "mulberry"}, + {"id": 19683, "synset": "white_mulberry.n.01", "name": "white_mulberry"}, + {"id": 19684, "synset": "black_mulberry.n.01", "name": "black_mulberry"}, + {"id": 19685, "synset": "red_mulberry.n.01", "name": "red_mulberry"}, + {"id": 19686, "synset": "osage_orange.n.01", "name": "osage_orange"}, + {"id": 19687, "synset": "breadfruit.n.01", "name": "breadfruit"}, + {"id": 19688, "synset": "jackfruit.n.01", "name": "jackfruit"}, + {"id": 19689, "synset": "marang.n.01", "name": "marang"}, + {"id": 19690, "synset": "fig_tree.n.01", "name": "fig_tree"}, + {"id": 19691, "synset": "fig.n.02", "name": "fig"}, + {"id": 19692, "synset": "caprifig.n.01", "name": "caprifig"}, + {"id": 19693, "synset": "golden_fig.n.01", "name": "golden_fig"}, + {"id": 19694, "synset": "banyan.n.01", "name": "banyan"}, + {"id": 19695, "synset": "pipal.n.01", "name": "pipal"}, + {"id": 19696, "synset": "india-rubber_tree.n.01", "name": "India-rubber_tree"}, + {"id": 19697, "synset": "mistletoe_fig.n.01", "name": "mistletoe_fig"}, + {"id": 19698, "synset": "port_jackson_fig.n.01", "name": "Port_Jackson_fig"}, + {"id": 19699, "synset": "sycamore.n.04", "name": "sycamore"}, + {"id": 19700, "synset": "paper_mulberry.n.01", "name": "paper_mulberry"}, + {"id": 19701, "synset": "trumpetwood.n.01", "name": "trumpetwood"}, + {"id": 19702, "synset": "elm.n.01", "name": "elm"}, + {"id": 19703, "synset": "winged_elm.n.01", "name": "winged_elm"}, + {"id": 19704, "synset": "american_elm.n.01", "name": "American_elm"}, + {"id": 19705, "synset": "smooth-leaved_elm.n.01", "name": "smooth-leaved_elm"}, + {"id": 19706, "synset": "cedar_elm.n.01", "name": "cedar_elm"}, + {"id": 19707, "synset": "witch_elm.n.01", "name": "witch_elm"}, + {"id": 19708, "synset": "dutch_elm.n.01", "name": "Dutch_elm"}, + {"id": 19709, "synset": "huntingdon_elm.n.01", "name": "Huntingdon_elm"}, + {"id": 19710, "synset": "water_elm.n.01", "name": "water_elm"}, + {"id": 19711, "synset": "chinese_elm.n.02", "name": "Chinese_elm"}, + {"id": 19712, "synset": "english_elm.n.01", "name": "English_elm"}, + {"id": 19713, "synset": "siberian_elm.n.01", "name": "Siberian_elm"}, + {"id": 19714, "synset": "slippery_elm.n.01", "name": "slippery_elm"}, + {"id": 19715, "synset": "jersey_elm.n.01", "name": "Jersey_elm"}, + {"id": 19716, "synset": "september_elm.n.01", "name": "September_elm"}, + {"id": 19717, "synset": "rock_elm.n.01", "name": "rock_elm"}, + {"id": 19718, "synset": "hackberry.n.01", "name": "hackberry"}, + {"id": 19719, "synset": "european_hackberry.n.01", "name": "European_hackberry"}, + {"id": 19720, "synset": "american_hackberry.n.01", "name": "American_hackberry"}, + {"id": 19721, "synset": "sugarberry.n.01", "name": "sugarberry"}, + {"id": 19722, "synset": "iridaceous_plant.n.01", "name": "iridaceous_plant"}, + {"id": 19723, "synset": "bearded_iris.n.01", "name": "bearded_iris"}, + {"id": 19724, "synset": "beardless_iris.n.01", "name": "beardless_iris"}, + {"id": 19725, "synset": "orrisroot.n.01", "name": "orrisroot"}, + {"id": 19726, "synset": "dwarf_iris.n.02", "name": "dwarf_iris"}, + {"id": 19727, "synset": "dutch_iris.n.02", "name": "Dutch_iris"}, + {"id": 19728, "synset": "florentine_iris.n.01", "name": "Florentine_iris"}, + {"id": 19729, "synset": "stinking_iris.n.01", "name": "stinking_iris"}, + {"id": 19730, "synset": "german_iris.n.02", "name": "German_iris"}, + {"id": 19731, "synset": "japanese_iris.n.01", "name": "Japanese_iris"}, + {"id": 19732, "synset": "german_iris.n.01", "name": "German_iris"}, + {"id": 19733, "synset": "dalmatian_iris.n.01", "name": "Dalmatian_iris"}, + {"id": 19734, "synset": "persian_iris.n.01", "name": "Persian_iris"}, + {"id": 19735, "synset": "dutch_iris.n.01", "name": "Dutch_iris"}, + {"id": 19736, "synset": "dwarf_iris.n.01", "name": "dwarf_iris"}, + {"id": 19737, "synset": "spanish_iris.n.01", "name": "Spanish_iris"}, + {"id": 19738, "synset": "blackberry-lily.n.01", "name": "blackberry-lily"}, + {"id": 19739, "synset": "crocus.n.01", "name": "crocus"}, + {"id": 19740, "synset": "saffron.n.01", "name": "saffron"}, + {"id": 19741, "synset": "corn_lily.n.01", "name": "corn_lily"}, + {"id": 19742, "synset": "blue-eyed_grass.n.01", "name": "blue-eyed_grass"}, + {"id": 19743, "synset": "wandflower.n.01", "name": "wandflower"}, + {"id": 19744, "synset": "amaryllis.n.01", "name": "amaryllis"}, + {"id": 19745, "synset": "salsilla.n.02", "name": "salsilla"}, + {"id": 19746, "synset": "salsilla.n.01", "name": "salsilla"}, + {"id": 19747, "synset": "blood_lily.n.01", "name": "blood_lily"}, + {"id": 19748, "synset": "cape_tulip.n.01", "name": "Cape_tulip"}, + {"id": 19749, "synset": "hippeastrum.n.01", "name": "hippeastrum"}, + {"id": 19750, "synset": "narcissus.n.01", "name": "narcissus"}, + {"id": 19751, "synset": "daffodil.n.01", "name": "daffodil"}, + {"id": 19752, "synset": "jonquil.n.01", "name": "jonquil"}, + {"id": 19753, "synset": "jonquil.n.02", "name": "jonquil"}, + {"id": 19754, "synset": "jacobean_lily.n.01", "name": "Jacobean_lily"}, + {"id": 19755, "synset": "liliaceous_plant.n.01", "name": "liliaceous_plant"}, + {"id": 19756, "synset": "mountain_lily.n.01", "name": "mountain_lily"}, + {"id": 19757, "synset": "canada_lily.n.01", "name": "Canada_lily"}, + {"id": 19758, "synset": "tiger_lily.n.02", "name": "tiger_lily"}, + {"id": 19759, "synset": "columbia_tiger_lily.n.01", "name": "Columbia_tiger_lily"}, + {"id": 19760, "synset": "tiger_lily.n.01", "name": "tiger_lily"}, + {"id": 19761, "synset": "easter_lily.n.01", "name": "Easter_lily"}, + {"id": 19762, "synset": "coast_lily.n.01", "name": "coast_lily"}, + {"id": 19763, "synset": "turk's-cap.n.02", "name": "Turk's-cap"}, + {"id": 19764, "synset": "michigan_lily.n.01", "name": "Michigan_lily"}, + {"id": 19765, "synset": "leopard_lily.n.01", "name": "leopard_lily"}, + {"id": 19766, "synset": "turk's-cap.n.01", "name": "Turk's-cap"}, + {"id": 19767, "synset": "african_lily.n.01", "name": "African_lily"}, + {"id": 19768, "synset": "colicroot.n.01", "name": "colicroot"}, + {"id": 19769, "synset": "ague_root.n.01", "name": "ague_root"}, + {"id": 19770, "synset": "yellow_colicroot.n.01", "name": "yellow_colicroot"}, + {"id": 19771, "synset": "alliaceous_plant.n.01", "name": "alliaceous_plant"}, + {"id": 19772, "synset": "hooker's_onion.n.01", "name": "Hooker's_onion"}, + {"id": 19773, "synset": "wild_leek.n.02", "name": "wild_leek"}, + {"id": 19774, "synset": "canada_garlic.n.01", "name": "Canada_garlic"}, + {"id": 19775, "synset": "keeled_garlic.n.01", "name": "keeled_garlic"}, + {"id": 19776, "synset": "shallot.n.02", "name": "shallot"}, + {"id": 19777, "synset": "nodding_onion.n.01", "name": "nodding_onion"}, + {"id": 19778, "synset": "welsh_onion.n.01", "name": "Welsh_onion"}, + {"id": 19779, "synset": "red-skinned_onion.n.01", "name": "red-skinned_onion"}, + {"id": 19780, "synset": "daffodil_garlic.n.01", "name": "daffodil_garlic"}, + {"id": 19781, "synset": "few-flowered_leek.n.01", "name": "few-flowered_leek"}, + {"id": 19782, "synset": "garlic.n.01", "name": "garlic"}, + {"id": 19783, "synset": "sand_leek.n.01", "name": "sand_leek"}, + {"id": 19784, "synset": "chives.n.01", "name": "chives"}, + {"id": 19785, "synset": "crow_garlic.n.01", "name": "crow_garlic"}, + {"id": 19786, "synset": "wild_garlic.n.01", "name": "wild_garlic"}, + {"id": 19787, "synset": "garlic_chive.n.01", "name": "garlic_chive"}, + {"id": 19788, "synset": "round-headed_leek.n.01", "name": "round-headed_leek"}, + {"id": 19789, "synset": "three-cornered_leek.n.01", "name": "three-cornered_leek"}, + {"id": 19790, "synset": "cape_aloe.n.01", "name": "cape_aloe"}, + {"id": 19791, "synset": "kniphofia.n.01", "name": "kniphofia"}, + {"id": 19792, "synset": "poker_plant.n.01", "name": "poker_plant"}, + {"id": 19793, "synset": "red-hot_poker.n.01", "name": "red-hot_poker"}, + {"id": 19794, "synset": "fly_poison.n.01", "name": "fly_poison"}, + {"id": 19795, "synset": "amber_lily.n.01", "name": "amber_lily"}, + {"id": 19796, "synset": "asparagus.n.01", "name": "asparagus"}, + {"id": 19797, "synset": "asparagus_fern.n.01", "name": "asparagus_fern"}, + {"id": 19798, "synset": "smilax.n.02", "name": "smilax"}, + {"id": 19799, "synset": "asphodel.n.01", "name": "asphodel"}, + {"id": 19800, "synset": "jacob's_rod.n.01", "name": "Jacob's_rod"}, + {"id": 19801, "synset": "aspidistra.n.01", "name": "aspidistra"}, + {"id": 19802, "synset": "coral_drops.n.01", "name": "coral_drops"}, + {"id": 19803, "synset": "christmas_bells.n.01", "name": "Christmas_bells"}, + {"id": 19804, "synset": "climbing_onion.n.01", "name": "climbing_onion"}, + {"id": 19805, "synset": "mariposa.n.01", "name": "mariposa"}, + {"id": 19806, "synset": "globe_lily.n.01", "name": "globe_lily"}, + {"id": 19807, "synset": "cat's-ear.n.01", "name": "cat's-ear"}, + {"id": 19808, "synset": "white_globe_lily.n.01", "name": "white_globe_lily"}, + {"id": 19809, "synset": "yellow_globe_lily.n.01", "name": "yellow_globe_lily"}, + {"id": 19810, "synset": "rose_globe_lily.n.01", "name": "rose_globe_lily"}, + {"id": 19811, "synset": "star_tulip.n.01", "name": "star_tulip"}, + { + "id": 19812, + "synset": "desert_mariposa_tulip.n.01", + "name": "desert_mariposa_tulip", + }, + { + "id": 19813, + "synset": "yellow_mariposa_tulip.n.01", + "name": "yellow_mariposa_tulip", + }, + { + "id": 19814, + "synset": "sagebrush_mariposa_tulip.n.01", + "name": "sagebrush_mariposa_tulip", + }, + {"id": 19815, "synset": "sego_lily.n.01", "name": "sego_lily"}, + {"id": 19816, "synset": "camas.n.01", "name": "camas"}, + {"id": 19817, "synset": "common_camas.n.01", "name": "common_camas"}, + {"id": 19818, "synset": "leichtlin's_camas.n.01", "name": "Leichtlin's_camas"}, + {"id": 19819, "synset": "wild_hyacinth.n.02", "name": "wild_hyacinth"}, + {"id": 19820, "synset": "dogtooth_violet.n.01", "name": "dogtooth_violet"}, + { + "id": 19821, + "synset": "white_dogtooth_violet.n.01", + "name": "white_dogtooth_violet", + }, + { + "id": 19822, + "synset": "yellow_adder's_tongue.n.01", + "name": "yellow_adder's_tongue", + }, + {"id": 19823, "synset": "european_dogtooth.n.01", "name": "European_dogtooth"}, + {"id": 19824, "synset": "fawn_lily.n.01", "name": "fawn_lily"}, + {"id": 19825, "synset": "glacier_lily.n.01", "name": "glacier_lily"}, + {"id": 19826, "synset": "avalanche_lily.n.01", "name": "avalanche_lily"}, + {"id": 19827, "synset": "fritillary.n.01", "name": "fritillary"}, + {"id": 19828, "synset": "mission_bells.n.02", "name": "mission_bells"}, + {"id": 19829, "synset": "mission_bells.n.01", "name": "mission_bells"}, + {"id": 19830, "synset": "stink_bell.n.01", "name": "stink_bell"}, + {"id": 19831, "synset": "crown_imperial.n.01", "name": "crown_imperial"}, + {"id": 19832, "synset": "white_fritillary.n.01", "name": "white_fritillary"}, + { + "id": 19833, + "synset": "snake's_head_fritillary.n.01", + "name": "snake's_head_fritillary", + }, + {"id": 19834, "synset": "adobe_lily.n.01", "name": "adobe_lily"}, + {"id": 19835, "synset": "scarlet_fritillary.n.01", "name": "scarlet_fritillary"}, + {"id": 19836, "synset": "tulip.n.01", "name": "tulip"}, + {"id": 19837, "synset": "dwarf_tulip.n.01", "name": "dwarf_tulip"}, + {"id": 19838, "synset": "lady_tulip.n.01", "name": "lady_tulip"}, + {"id": 19839, "synset": "tulipa_gesneriana.n.01", "name": "Tulipa_gesneriana"}, + {"id": 19840, "synset": "cottage_tulip.n.01", "name": "cottage_tulip"}, + {"id": 19841, "synset": "darwin_tulip.n.01", "name": "Darwin_tulip"}, + {"id": 19842, "synset": "gloriosa.n.01", "name": "gloriosa"}, + {"id": 19843, "synset": "lemon_lily.n.01", "name": "lemon_lily"}, + {"id": 19844, "synset": "common_hyacinth.n.01", "name": "common_hyacinth"}, + {"id": 19845, "synset": "roman_hyacinth.n.01", "name": "Roman_hyacinth"}, + {"id": 19846, "synset": "summer_hyacinth.n.01", "name": "summer_hyacinth"}, + {"id": 19847, "synset": "star-of-bethlehem.n.01", "name": "star-of-Bethlehem"}, + {"id": 19848, "synset": "bath_asparagus.n.01", "name": "bath_asparagus"}, + {"id": 19849, "synset": "grape_hyacinth.n.01", "name": "grape_hyacinth"}, + { + "id": 19850, + "synset": "common_grape_hyacinth.n.01", + "name": "common_grape_hyacinth", + }, + {"id": 19851, "synset": "tassel_hyacinth.n.01", "name": "tassel_hyacinth"}, + {"id": 19852, "synset": "scilla.n.01", "name": "scilla"}, + {"id": 19853, "synset": "spring_squill.n.01", "name": "spring_squill"}, + {"id": 19854, "synset": "false_asphodel.n.01", "name": "false_asphodel"}, + {"id": 19855, "synset": "scotch_asphodel.n.01", "name": "Scotch_asphodel"}, + {"id": 19856, "synset": "sea_squill.n.01", "name": "sea_squill"}, + {"id": 19857, "synset": "squill.n.01", "name": "squill"}, + {"id": 19858, "synset": "butcher's_broom.n.01", "name": "butcher's_broom"}, + {"id": 19859, "synset": "bog_asphodel.n.01", "name": "bog_asphodel"}, + { + "id": 19860, + "synset": "european_bog_asphodel.n.01", + "name": "European_bog_asphodel", + }, + { + "id": 19861, + "synset": "american_bog_asphodel.n.01", + "name": "American_bog_asphodel", + }, + {"id": 19862, "synset": "hellebore.n.01", "name": "hellebore"}, + {"id": 19863, "synset": "white_hellebore.n.01", "name": "white_hellebore"}, + {"id": 19864, "synset": "squaw_grass.n.01", "name": "squaw_grass"}, + {"id": 19865, "synset": "death_camas.n.01", "name": "death_camas"}, + {"id": 19866, "synset": "alkali_grass.n.01", "name": "alkali_grass"}, + {"id": 19867, "synset": "white_camas.n.01", "name": "white_camas"}, + {"id": 19868, "synset": "poison_camas.n.01", "name": "poison_camas"}, + {"id": 19869, "synset": "grassy_death_camas.n.01", "name": "grassy_death_camas"}, + {"id": 19870, "synset": "prairie_wake-robin.n.01", "name": "prairie_wake-robin"}, + { + "id": 19871, + "synset": "dwarf-white_trillium.n.01", + "name": "dwarf-white_trillium", + }, + {"id": 19872, "synset": "herb_paris.n.01", "name": "herb_Paris"}, + {"id": 19873, "synset": "sarsaparilla.n.01", "name": "sarsaparilla"}, + {"id": 19874, "synset": "bullbrier.n.01", "name": "bullbrier"}, + {"id": 19875, "synset": "rough_bindweed.n.01", "name": "rough_bindweed"}, + {"id": 19876, "synset": "clintonia.n.01", "name": "clintonia"}, + { + "id": 19877, + "synset": "false_lily_of_the_valley.n.02", + "name": "false_lily_of_the_valley", + }, + { + "id": 19878, + "synset": "false_lily_of_the_valley.n.01", + "name": "false_lily_of_the_valley", + }, + {"id": 19879, "synset": "solomon's-seal.n.01", "name": "Solomon's-seal"}, + { + "id": 19880, + "synset": "great_solomon's-seal.n.01", + "name": "great_Solomon's-seal", + }, + {"id": 19881, "synset": "bellwort.n.01", "name": "bellwort"}, + {"id": 19882, "synset": "strawflower.n.01", "name": "strawflower"}, + {"id": 19883, "synset": "pia.n.01", "name": "pia"}, + {"id": 19884, "synset": "agave.n.01", "name": "agave"}, + {"id": 19885, "synset": "american_agave.n.01", "name": "American_agave"}, + {"id": 19886, "synset": "sisal.n.02", "name": "sisal"}, + {"id": 19887, "synset": "maguey.n.02", "name": "maguey"}, + {"id": 19888, "synset": "maguey.n.01", "name": "maguey"}, + {"id": 19889, "synset": "agave_tequilana.n.01", "name": "Agave_tequilana"}, + {"id": 19890, "synset": "cabbage_tree.n.03", "name": "cabbage_tree"}, + {"id": 19891, "synset": "dracaena.n.01", "name": "dracaena"}, + {"id": 19892, "synset": "tuberose.n.01", "name": "tuberose"}, + {"id": 19893, "synset": "sansevieria.n.01", "name": "sansevieria"}, + { + "id": 19894, + "synset": "african_bowstring_hemp.n.01", + "name": "African_bowstring_hemp", + }, + { + "id": 19895, + "synset": "ceylon_bowstring_hemp.n.01", + "name": "Ceylon_bowstring_hemp", + }, + { + "id": 19896, + "synset": "mother-in-law's_tongue.n.01", + "name": "mother-in-law's_tongue", + }, + {"id": 19897, "synset": "spanish_bayonet.n.02", "name": "Spanish_bayonet"}, + {"id": 19898, "synset": "spanish_bayonet.n.01", "name": "Spanish_bayonet"}, + {"id": 19899, "synset": "joshua_tree.n.01", "name": "Joshua_tree"}, + {"id": 19900, "synset": "soapweed.n.01", "name": "soapweed"}, + {"id": 19901, "synset": "adam's_needle.n.01", "name": "Adam's_needle"}, + {"id": 19902, "synset": "bear_grass.n.02", "name": "bear_grass"}, + {"id": 19903, "synset": "spanish_dagger.n.01", "name": "Spanish_dagger"}, + {"id": 19904, "synset": "our_lord's_candle.n.01", "name": "Our_Lord's_candle"}, + {"id": 19905, "synset": "water_shamrock.n.01", "name": "water_shamrock"}, + {"id": 19906, "synset": "butterfly_bush.n.01", "name": "butterfly_bush"}, + {"id": 19907, "synset": "yellow_jasmine.n.01", "name": "yellow_jasmine"}, + {"id": 19908, "synset": "flax.n.02", "name": "flax"}, + {"id": 19909, "synset": "calabar_bean.n.01", "name": "calabar_bean"}, + {"id": 19910, "synset": "bonduc.n.02", "name": "bonduc"}, + {"id": 19911, "synset": "divi-divi.n.02", "name": "divi-divi"}, + {"id": 19912, "synset": "mysore_thorn.n.01", "name": "Mysore_thorn"}, + {"id": 19913, "synset": "brazilian_ironwood.n.01", "name": "brazilian_ironwood"}, + {"id": 19914, "synset": "bird_of_paradise.n.01", "name": "bird_of_paradise"}, + {"id": 19915, "synset": "shingle_tree.n.01", "name": "shingle_tree"}, + {"id": 19916, "synset": "mountain_ebony.n.01", "name": "mountain_ebony"}, + {"id": 19917, "synset": "msasa.n.01", "name": "msasa"}, + {"id": 19918, "synset": "cassia.n.01", "name": "cassia"}, + {"id": 19919, "synset": "golden_shower_tree.n.01", "name": "golden_shower_tree"}, + {"id": 19920, "synset": "pink_shower.n.01", "name": "pink_shower"}, + {"id": 19921, "synset": "rainbow_shower.n.01", "name": "rainbow_shower"}, + {"id": 19922, "synset": "horse_cassia.n.01", "name": "horse_cassia"}, + {"id": 19923, "synset": "carob.n.02", "name": "carob"}, + {"id": 19924, "synset": "carob.n.01", "name": "carob"}, + {"id": 19925, "synset": "paloverde.n.01", "name": "paloverde"}, + {"id": 19926, "synset": "royal_poinciana.n.01", "name": "royal_poinciana"}, + {"id": 19927, "synset": "locust_tree.n.01", "name": "locust_tree"}, + {"id": 19928, "synset": "water_locust.n.01", "name": "water_locust"}, + {"id": 19929, "synset": "honey_locust.n.01", "name": "honey_locust"}, + { + "id": 19930, + "synset": "kentucky_coffee_tree.n.01", + "name": "Kentucky_coffee_tree", + }, + {"id": 19931, "synset": "logwood.n.02", "name": "logwood"}, + {"id": 19932, "synset": "jerusalem_thorn.n.03", "name": "Jerusalem_thorn"}, + {"id": 19933, "synset": "palo_verde.n.01", "name": "palo_verde"}, + {"id": 19934, "synset": "dalmatian_laburnum.n.01", "name": "Dalmatian_laburnum"}, + {"id": 19935, "synset": "senna.n.01", "name": "senna"}, + {"id": 19936, "synset": "avaram.n.01", "name": "avaram"}, + {"id": 19937, "synset": "alexandria_senna.n.01", "name": "Alexandria_senna"}, + {"id": 19938, "synset": "wild_senna.n.01", "name": "wild_senna"}, + {"id": 19939, "synset": "sicklepod.n.01", "name": "sicklepod"}, + {"id": 19940, "synset": "coffee_senna.n.01", "name": "coffee_senna"}, + {"id": 19941, "synset": "tamarind.n.01", "name": "tamarind"}, + {"id": 19942, "synset": "false_indigo.n.03", "name": "false_indigo"}, + {"id": 19943, "synset": "false_indigo.n.02", "name": "false_indigo"}, + {"id": 19944, "synset": "hog_peanut.n.01", "name": "hog_peanut"}, + {"id": 19945, "synset": "angelim.n.01", "name": "angelim"}, + {"id": 19946, "synset": "cabbage_bark.n.01", "name": "cabbage_bark"}, + {"id": 19947, "synset": "kidney_vetch.n.01", "name": "kidney_vetch"}, + {"id": 19948, "synset": "groundnut.n.01", "name": "groundnut"}, + {"id": 19949, "synset": "rooibos.n.01", "name": "rooibos"}, + {"id": 19950, "synset": "milk_vetch.n.01", "name": "milk_vetch"}, + {"id": 19951, "synset": "alpine_milk_vetch.n.01", "name": "alpine_milk_vetch"}, + {"id": 19952, "synset": "purple_milk_vetch.n.01", "name": "purple_milk_vetch"}, + {"id": 19953, "synset": "camwood.n.01", "name": "camwood"}, + {"id": 19954, "synset": "wild_indigo.n.01", "name": "wild_indigo"}, + {"id": 19955, "synset": "blue_false_indigo.n.01", "name": "blue_false_indigo"}, + {"id": 19956, "synset": "white_false_indigo.n.01", "name": "white_false_indigo"}, + {"id": 19957, "synset": "indigo_broom.n.01", "name": "indigo_broom"}, + {"id": 19958, "synset": "dhak.n.01", "name": "dhak"}, + {"id": 19959, "synset": "pigeon_pea.n.01", "name": "pigeon_pea"}, + {"id": 19960, "synset": "sword_bean.n.01", "name": "sword_bean"}, + {"id": 19961, "synset": "pea_tree.n.01", "name": "pea_tree"}, + {"id": 19962, "synset": "siberian_pea_tree.n.01", "name": "Siberian_pea_tree"}, + {"id": 19963, "synset": "chinese_pea_tree.n.01", "name": "Chinese_pea_tree"}, + { + "id": 19964, + "synset": "moreton_bay_chestnut.n.01", + "name": "Moreton_Bay_chestnut", + }, + {"id": 19965, "synset": "butterfly_pea.n.03", "name": "butterfly_pea"}, + {"id": 19966, "synset": "judas_tree.n.01", "name": "Judas_tree"}, + {"id": 19967, "synset": "redbud.n.01", "name": "redbud"}, + {"id": 19968, "synset": "western_redbud.n.01", "name": "western_redbud"}, + {"id": 19969, "synset": "tagasaste.n.01", "name": "tagasaste"}, + {"id": 19970, "synset": "weeping_tree_broom.n.01", "name": "weeping_tree_broom"}, + {"id": 19971, "synset": "flame_pea.n.01", "name": "flame_pea"}, + {"id": 19972, "synset": "chickpea.n.02", "name": "chickpea"}, + {"id": 19973, "synset": "kentucky_yellowwood.n.01", "name": "Kentucky_yellowwood"}, + {"id": 19974, "synset": "glory_pea.n.01", "name": "glory_pea"}, + {"id": 19975, "synset": "desert_pea.n.01", "name": "desert_pea"}, + {"id": 19976, "synset": "parrot's_beak.n.01", "name": "parrot's_beak"}, + {"id": 19977, "synset": "butterfly_pea.n.02", "name": "butterfly_pea"}, + {"id": 19978, "synset": "blue_pea.n.01", "name": "blue_pea"}, + {"id": 19979, "synset": "telegraph_plant.n.01", "name": "telegraph_plant"}, + {"id": 19980, "synset": "bladder_senna.n.01", "name": "bladder_senna"}, + {"id": 19981, "synset": "axseed.n.01", "name": "axseed"}, + {"id": 19982, "synset": "crotalaria.n.01", "name": "crotalaria"}, + {"id": 19983, "synset": "guar.n.01", "name": "guar"}, + {"id": 19984, "synset": "white_broom.n.01", "name": "white_broom"}, + {"id": 19985, "synset": "common_broom.n.01", "name": "common_broom"}, + {"id": 19986, "synset": "rosewood.n.02", "name": "rosewood"}, + {"id": 19987, "synset": "indian_blackwood.n.01", "name": "Indian_blackwood"}, + {"id": 19988, "synset": "sissoo.n.01", "name": "sissoo"}, + {"id": 19989, "synset": "kingwood.n.02", "name": "kingwood"}, + {"id": 19990, "synset": "brazilian_rosewood.n.01", "name": "Brazilian_rosewood"}, + {"id": 19991, "synset": "cocobolo.n.01", "name": "cocobolo"}, + {"id": 19992, "synset": "blackwood.n.02", "name": "blackwood"}, + {"id": 19993, "synset": "bitter_pea.n.01", "name": "bitter_pea"}, + {"id": 19994, "synset": "derris.n.01", "name": "derris"}, + {"id": 19995, "synset": "derris_root.n.01", "name": "derris_root"}, + {"id": 19996, "synset": "prairie_mimosa.n.01", "name": "prairie_mimosa"}, + {"id": 19997, "synset": "tick_trefoil.n.01", "name": "tick_trefoil"}, + {"id": 19998, "synset": "beggarweed.n.01", "name": "beggarweed"}, + {"id": 19999, "synset": "australian_pea.n.01", "name": "Australian_pea"}, + {"id": 20000, "synset": "coral_tree.n.01", "name": "coral_tree"}, + {"id": 20001, "synset": "kaffir_boom.n.02", "name": "kaffir_boom"}, + {"id": 20002, "synset": "coral_bean_tree.n.01", "name": "coral_bean_tree"}, + {"id": 20003, "synset": "ceibo.n.01", "name": "ceibo"}, + {"id": 20004, "synset": "kaffir_boom.n.01", "name": "kaffir_boom"}, + {"id": 20005, "synset": "indian_coral_tree.n.01", "name": "Indian_coral_tree"}, + {"id": 20006, "synset": "cork_tree.n.02", "name": "cork_tree"}, + {"id": 20007, "synset": "goat's_rue.n.02", "name": "goat's_rue"}, + {"id": 20008, "synset": "poison_bush.n.01", "name": "poison_bush"}, + {"id": 20009, "synset": "spanish_broom.n.02", "name": "Spanish_broom"}, + {"id": 20010, "synset": "woodwaxen.n.01", "name": "woodwaxen"}, + {"id": 20011, "synset": "chanar.n.01", "name": "chanar"}, + {"id": 20012, "synset": "gliricidia.n.01", "name": "gliricidia"}, + {"id": 20013, "synset": "soy.n.01", "name": "soy"}, + {"id": 20014, "synset": "licorice.n.01", "name": "licorice"}, + {"id": 20015, "synset": "wild_licorice.n.02", "name": "wild_licorice"}, + {"id": 20016, "synset": "licorice_root.n.01", "name": "licorice_root"}, + { + "id": 20017, + "synset": "western_australia_coral_pea.n.01", + "name": "Western_Australia_coral_pea", + }, + {"id": 20018, "synset": "sweet_vetch.n.01", "name": "sweet_vetch"}, + {"id": 20019, "synset": "french_honeysuckle.n.02", "name": "French_honeysuckle"}, + {"id": 20020, "synset": "anil.n.02", "name": "anil"}, + {"id": 20021, "synset": "scarlet_runner.n.02", "name": "scarlet_runner"}, + {"id": 20022, "synset": "hyacinth_bean.n.01", "name": "hyacinth_bean"}, + {"id": 20023, "synset": "scotch_laburnum.n.01", "name": "Scotch_laburnum"}, + {"id": 20024, "synset": "vetchling.n.01", "name": "vetchling"}, + {"id": 20025, "synset": "wild_pea.n.01", "name": "wild_pea"}, + {"id": 20026, "synset": "everlasting_pea.n.01", "name": "everlasting_pea"}, + {"id": 20027, "synset": "beach_pea.n.01", "name": "beach_pea"}, + {"id": 20028, "synset": "grass_vetch.n.01", "name": "grass_vetch"}, + {"id": 20029, "synset": "marsh_pea.n.01", "name": "marsh_pea"}, + {"id": 20030, "synset": "common_vetchling.n.01", "name": "common_vetchling"}, + {"id": 20031, "synset": "grass_pea.n.01", "name": "grass_pea"}, + {"id": 20032, "synset": "tangier_pea.n.01", "name": "Tangier_pea"}, + {"id": 20033, "synset": "heath_pea.n.01", "name": "heath_pea"}, + {"id": 20034, "synset": "bicolor_lespediza.n.01", "name": "bicolor_lespediza"}, + {"id": 20035, "synset": "japanese_clover.n.01", "name": "japanese_clover"}, + {"id": 20036, "synset": "korean_lespedeza.n.01", "name": "Korean_lespedeza"}, + {"id": 20037, "synset": "sericea_lespedeza.n.01", "name": "sericea_lespedeza"}, + {"id": 20038, "synset": "lentil.n.03", "name": "lentil"}, + {"id": 20039, "synset": "lentil.n.02", "name": "lentil"}, + { + "id": 20040, + "synset": "prairie_bird's-foot_trefoil.n.01", + "name": "prairie_bird's-foot_trefoil", + }, + {"id": 20041, "synset": "bird's_foot_trefoil.n.02", "name": "bird's_foot_trefoil"}, + {"id": 20042, "synset": "winged_pea.n.02", "name": "winged_pea"}, + {"id": 20043, "synset": "lupine.n.01", "name": "lupine"}, + {"id": 20044, "synset": "white_lupine.n.01", "name": "white_lupine"}, + {"id": 20045, "synset": "tree_lupine.n.01", "name": "tree_lupine"}, + {"id": 20046, "synset": "wild_lupine.n.01", "name": "wild_lupine"}, + {"id": 20047, "synset": "bluebonnet.n.01", "name": "bluebonnet"}, + {"id": 20048, "synset": "texas_bluebonnet.n.01", "name": "Texas_bluebonnet"}, + {"id": 20049, "synset": "medic.n.01", "name": "medic"}, + {"id": 20050, "synset": "moon_trefoil.n.01", "name": "moon_trefoil"}, + {"id": 20051, "synset": "sickle_alfalfa.n.01", "name": "sickle_alfalfa"}, + {"id": 20052, "synset": "calvary_clover.n.01", "name": "Calvary_clover"}, + {"id": 20053, "synset": "black_medick.n.01", "name": "black_medick"}, + {"id": 20054, "synset": "alfalfa.n.01", "name": "alfalfa"}, + {"id": 20055, "synset": "millettia.n.01", "name": "millettia"}, + {"id": 20056, "synset": "mucuna.n.01", "name": "mucuna"}, + {"id": 20057, "synset": "cowage.n.02", "name": "cowage"}, + {"id": 20058, "synset": "tolu_tree.n.01", "name": "tolu_tree"}, + {"id": 20059, "synset": "peruvian_balsam.n.01", "name": "Peruvian_balsam"}, + {"id": 20060, "synset": "sainfoin.n.01", "name": "sainfoin"}, + {"id": 20061, "synset": "restharrow.n.02", "name": "restharrow"}, + {"id": 20062, "synset": "bead_tree.n.01", "name": "bead_tree"}, + {"id": 20063, "synset": "jumby_bead.n.01", "name": "jumby_bead"}, + {"id": 20064, "synset": "locoweed.n.01", "name": "locoweed"}, + {"id": 20065, "synset": "purple_locoweed.n.01", "name": "purple_locoweed"}, + {"id": 20066, "synset": "tumbleweed.n.01", "name": "tumbleweed"}, + {"id": 20067, "synset": "yam_bean.n.02", "name": "yam_bean"}, + {"id": 20068, "synset": "shamrock_pea.n.01", "name": "shamrock_pea"}, + {"id": 20069, "synset": "pole_bean.n.01", "name": "pole_bean"}, + {"id": 20070, "synset": "kidney_bean.n.01", "name": "kidney_bean"}, + {"id": 20071, "synset": "haricot.n.01", "name": "haricot"}, + {"id": 20072, "synset": "wax_bean.n.01", "name": "wax_bean"}, + {"id": 20073, "synset": "scarlet_runner.n.01", "name": "scarlet_runner"}, + {"id": 20074, "synset": "lima_bean.n.02", "name": "lima_bean"}, + {"id": 20075, "synset": "sieva_bean.n.01", "name": "sieva_bean"}, + {"id": 20076, "synset": "tepary_bean.n.01", "name": "tepary_bean"}, + {"id": 20077, "synset": "chaparral_pea.n.01", "name": "chaparral_pea"}, + {"id": 20078, "synset": "jamaica_dogwood.n.01", "name": "Jamaica_dogwood"}, + {"id": 20079, "synset": "pea.n.02", "name": "pea"}, + {"id": 20080, "synset": "garden_pea.n.01", "name": "garden_pea"}, + {"id": 20081, "synset": "edible-pod_pea.n.01", "name": "edible-pod_pea"}, + {"id": 20082, "synset": "sugar_snap_pea.n.01", "name": "sugar_snap_pea"}, + {"id": 20083, "synset": "field_pea.n.02", "name": "field_pea"}, + {"id": 20084, "synset": "field_pea.n.01", "name": "field_pea"}, + {"id": 20085, "synset": "common_flat_pea.n.01", "name": "common_flat_pea"}, + {"id": 20086, "synset": "quira.n.02", "name": "quira"}, + {"id": 20087, "synset": "roble.n.01", "name": "roble"}, + {"id": 20088, "synset": "panama_redwood_tree.n.01", "name": "Panama_redwood_tree"}, + {"id": 20089, "synset": "indian_beech.n.01", "name": "Indian_beech"}, + {"id": 20090, "synset": "winged_bean.n.01", "name": "winged_bean"}, + {"id": 20091, "synset": "breadroot.n.01", "name": "breadroot"}, + {"id": 20092, "synset": "bloodwood_tree.n.01", "name": "bloodwood_tree"}, + {"id": 20093, "synset": "kino.n.02", "name": "kino"}, + {"id": 20094, "synset": "red_sandalwood.n.02", "name": "red_sandalwood"}, + {"id": 20095, "synset": "kudzu.n.01", "name": "kudzu"}, + {"id": 20096, "synset": "bristly_locust.n.01", "name": "bristly_locust"}, + {"id": 20097, "synset": "black_locust.n.02", "name": "black_locust"}, + {"id": 20098, "synset": "clammy_locust.n.01", "name": "clammy_locust"}, + {"id": 20099, "synset": "carib_wood.n.01", "name": "carib_wood"}, + {"id": 20100, "synset": "colorado_river_hemp.n.01", "name": "Colorado_River_hemp"}, + { + "id": 20101, + "synset": "scarlet_wisteria_tree.n.01", + "name": "scarlet_wisteria_tree", + }, + { + "id": 20102, + "synset": "japanese_pagoda_tree.n.01", + "name": "Japanese_pagoda_tree", + }, + {"id": 20103, "synset": "mescal_bean.n.01", "name": "mescal_bean"}, + {"id": 20104, "synset": "kowhai.n.01", "name": "kowhai"}, + {"id": 20105, "synset": "jade_vine.n.01", "name": "jade_vine"}, + {"id": 20106, "synset": "hoary_pea.n.01", "name": "hoary_pea"}, + {"id": 20107, "synset": "bastard_indigo.n.01", "name": "bastard_indigo"}, + {"id": 20108, "synset": "catgut.n.01", "name": "catgut"}, + {"id": 20109, "synset": "bush_pea.n.01", "name": "bush_pea"}, + {"id": 20110, "synset": "false_lupine.n.01", "name": "false_lupine"}, + {"id": 20111, "synset": "carolina_lupine.n.01", "name": "Carolina_lupine"}, + {"id": 20112, "synset": "tipu.n.01", "name": "tipu"}, + {"id": 20113, "synset": "bird's_foot_trefoil.n.01", "name": "bird's_foot_trefoil"}, + {"id": 20114, "synset": "fenugreek.n.01", "name": "fenugreek"}, + {"id": 20115, "synset": "gorse.n.01", "name": "gorse"}, + {"id": 20116, "synset": "vetch.n.01", "name": "vetch"}, + {"id": 20117, "synset": "tufted_vetch.n.01", "name": "tufted_vetch"}, + {"id": 20118, "synset": "broad_bean.n.01", "name": "broad_bean"}, + {"id": 20119, "synset": "bitter_betch.n.01", "name": "bitter_betch"}, + {"id": 20120, "synset": "bush_vetch.n.01", "name": "bush_vetch"}, + {"id": 20121, "synset": "moth_bean.n.01", "name": "moth_bean"}, + {"id": 20122, "synset": "snailflower.n.01", "name": "snailflower"}, + {"id": 20123, "synset": "mung.n.01", "name": "mung"}, + {"id": 20124, "synset": "cowpea.n.02", "name": "cowpea"}, + {"id": 20125, "synset": "cowpea.n.01", "name": "cowpea"}, + {"id": 20126, "synset": "asparagus_bean.n.01", "name": "asparagus_bean"}, + {"id": 20127, "synset": "swamp_oak.n.01", "name": "swamp_oak"}, + {"id": 20128, "synset": "keurboom.n.02", "name": "keurboom"}, + {"id": 20129, "synset": "keurboom.n.01", "name": "keurboom"}, + {"id": 20130, "synset": "japanese_wistaria.n.01", "name": "Japanese_wistaria"}, + {"id": 20131, "synset": "chinese_wistaria.n.01", "name": "Chinese_wistaria"}, + {"id": 20132, "synset": "american_wistaria.n.01", "name": "American_wistaria"}, + {"id": 20133, "synset": "silky_wisteria.n.01", "name": "silky_wisteria"}, + {"id": 20134, "synset": "palm.n.03", "name": "palm"}, + {"id": 20135, "synset": "sago_palm.n.01", "name": "sago_palm"}, + {"id": 20136, "synset": "feather_palm.n.01", "name": "feather_palm"}, + {"id": 20137, "synset": "fan_palm.n.01", "name": "fan_palm"}, + {"id": 20138, "synset": "palmetto.n.01", "name": "palmetto"}, + {"id": 20139, "synset": "coyol.n.01", "name": "coyol"}, + {"id": 20140, "synset": "grugru.n.01", "name": "grugru"}, + {"id": 20141, "synset": "areca.n.01", "name": "areca"}, + {"id": 20142, "synset": "betel_palm.n.01", "name": "betel_palm"}, + {"id": 20143, "synset": "sugar_palm.n.01", "name": "sugar_palm"}, + {"id": 20144, "synset": "piassava_palm.n.01", "name": "piassava_palm"}, + {"id": 20145, "synset": "coquilla_nut.n.01", "name": "coquilla_nut"}, + {"id": 20146, "synset": "palmyra.n.01", "name": "palmyra"}, + {"id": 20147, "synset": "calamus.n.01", "name": "calamus"}, + {"id": 20148, "synset": "rattan.n.01", "name": "rattan"}, + {"id": 20149, "synset": "lawyer_cane.n.01", "name": "lawyer_cane"}, + {"id": 20150, "synset": "fishtail_palm.n.01", "name": "fishtail_palm"}, + {"id": 20151, "synset": "wine_palm.n.01", "name": "wine_palm"}, + {"id": 20152, "synset": "wax_palm.n.03", "name": "wax_palm"}, + {"id": 20153, "synset": "coconut.n.03", "name": "coconut"}, + {"id": 20154, "synset": "carnauba.n.02", "name": "carnauba"}, + {"id": 20155, "synset": "caranday.n.01", "name": "caranday"}, + {"id": 20156, "synset": "corozo.n.01", "name": "corozo"}, + {"id": 20157, "synset": "gebang_palm.n.01", "name": "gebang_palm"}, + {"id": 20158, "synset": "latanier.n.01", "name": "latanier"}, + {"id": 20159, "synset": "talipot.n.01", "name": "talipot"}, + {"id": 20160, "synset": "oil_palm.n.01", "name": "oil_palm"}, + {"id": 20161, "synset": "african_oil_palm.n.01", "name": "African_oil_palm"}, + {"id": 20162, "synset": "american_oil_palm.n.01", "name": "American_oil_palm"}, + {"id": 20163, "synset": "palm_nut.n.01", "name": "palm_nut"}, + {"id": 20164, "synset": "cabbage_palm.n.04", "name": "cabbage_palm"}, + {"id": 20165, "synset": "cabbage_palm.n.03", "name": "cabbage_palm"}, + {"id": 20166, "synset": "true_sago_palm.n.01", "name": "true_sago_palm"}, + {"id": 20167, "synset": "nipa_palm.n.01", "name": "nipa_palm"}, + {"id": 20168, "synset": "babassu.n.01", "name": "babassu"}, + {"id": 20169, "synset": "babassu_nut.n.01", "name": "babassu_nut"}, + {"id": 20170, "synset": "cohune_palm.n.01", "name": "cohune_palm"}, + {"id": 20171, "synset": "cohune_nut.n.01", "name": "cohune_nut"}, + {"id": 20172, "synset": "date_palm.n.01", "name": "date_palm"}, + {"id": 20173, "synset": "ivory_palm.n.01", "name": "ivory_palm"}, + {"id": 20174, "synset": "raffia_palm.n.01", "name": "raffia_palm"}, + {"id": 20175, "synset": "bamboo_palm.n.02", "name": "bamboo_palm"}, + {"id": 20176, "synset": "lady_palm.n.01", "name": "lady_palm"}, + {"id": 20177, "synset": "miniature_fan_palm.n.01", "name": "miniature_fan_palm"}, + {"id": 20178, "synset": "reed_rhapis.n.01", "name": "reed_rhapis"}, + {"id": 20179, "synset": "royal_palm.n.01", "name": "royal_palm"}, + {"id": 20180, "synset": "cabbage_palm.n.02", "name": "cabbage_palm"}, + {"id": 20181, "synset": "cabbage_palmetto.n.01", "name": "cabbage_palmetto"}, + {"id": 20182, "synset": "saw_palmetto.n.01", "name": "saw_palmetto"}, + {"id": 20183, "synset": "thatch_palm.n.01", "name": "thatch_palm"}, + {"id": 20184, "synset": "key_palm.n.01", "name": "key_palm"}, + {"id": 20185, "synset": "english_plantain.n.01", "name": "English_plantain"}, + { + "id": 20186, + "synset": "broad-leaved_plantain.n.02", + "name": "broad-leaved_plantain", + }, + {"id": 20187, "synset": "hoary_plantain.n.02", "name": "hoary_plantain"}, + {"id": 20188, "synset": "fleawort.n.01", "name": "fleawort"}, + {"id": 20189, "synset": "rugel's_plantain.n.01", "name": "rugel's_plantain"}, + {"id": 20190, "synset": "hoary_plantain.n.01", "name": "hoary_plantain"}, + {"id": 20191, "synset": "buckwheat.n.01", "name": "buckwheat"}, + {"id": 20192, "synset": "prince's-feather.n.01", "name": "prince's-feather"}, + {"id": 20193, "synset": "eriogonum.n.01", "name": "eriogonum"}, + {"id": 20194, "synset": "umbrella_plant.n.02", "name": "umbrella_plant"}, + {"id": 20195, "synset": "wild_buckwheat.n.01", "name": "wild_buckwheat"}, + {"id": 20196, "synset": "rhubarb.n.02", "name": "rhubarb"}, + {"id": 20197, "synset": "himalayan_rhubarb.n.01", "name": "Himalayan_rhubarb"}, + {"id": 20198, "synset": "pie_plant.n.01", "name": "pie_plant"}, + {"id": 20199, "synset": "chinese_rhubarb.n.01", "name": "Chinese_rhubarb"}, + {"id": 20200, "synset": "sour_dock.n.01", "name": "sour_dock"}, + {"id": 20201, "synset": "sheep_sorrel.n.01", "name": "sheep_sorrel"}, + {"id": 20202, "synset": "bitter_dock.n.01", "name": "bitter_dock"}, + {"id": 20203, "synset": "french_sorrel.n.01", "name": "French_sorrel"}, + {"id": 20204, "synset": "yellow-eyed_grass.n.01", "name": "yellow-eyed_grass"}, + {"id": 20205, "synset": "commelina.n.01", "name": "commelina"}, + {"id": 20206, "synset": "spiderwort.n.01", "name": "spiderwort"}, + {"id": 20207, "synset": "pineapple.n.01", "name": "pineapple"}, + {"id": 20208, "synset": "pipewort.n.01", "name": "pipewort"}, + {"id": 20209, "synset": "water_hyacinth.n.01", "name": "water_hyacinth"}, + {"id": 20210, "synset": "water_star_grass.n.01", "name": "water_star_grass"}, + {"id": 20211, "synset": "naiad.n.01", "name": "naiad"}, + {"id": 20212, "synset": "water_plantain.n.01", "name": "water_plantain"}, + { + "id": 20213, + "synset": "narrow-leaved_water_plantain.n.01", + "name": "narrow-leaved_water_plantain", + }, + {"id": 20214, "synset": "hydrilla.n.01", "name": "hydrilla"}, + {"id": 20215, "synset": "american_frogbit.n.01", "name": "American_frogbit"}, + {"id": 20216, "synset": "waterweed.n.01", "name": "waterweed"}, + {"id": 20217, "synset": "canadian_pondweed.n.01", "name": "Canadian_pondweed"}, + {"id": 20218, "synset": "tape_grass.n.01", "name": "tape_grass"}, + {"id": 20219, "synset": "pondweed.n.01", "name": "pondweed"}, + { + "id": 20220, + "synset": "curled_leaf_pondweed.n.01", + "name": "curled_leaf_pondweed", + }, + {"id": 20221, "synset": "loddon_pondweed.n.01", "name": "loddon_pondweed"}, + {"id": 20222, "synset": "frog's_lettuce.n.01", "name": "frog's_lettuce"}, + {"id": 20223, "synset": "arrow_grass.n.01", "name": "arrow_grass"}, + {"id": 20224, "synset": "horned_pondweed.n.01", "name": "horned_pondweed"}, + {"id": 20225, "synset": "eelgrass.n.01", "name": "eelgrass"}, + {"id": 20226, "synset": "rose.n.01", "name": "rose"}, + {"id": 20227, "synset": "hip.n.05", "name": "hip"}, + {"id": 20228, "synset": "banksia_rose.n.01", "name": "banksia_rose"}, + {"id": 20229, "synset": "damask_rose.n.01", "name": "damask_rose"}, + {"id": 20230, "synset": "sweetbrier.n.01", "name": "sweetbrier"}, + {"id": 20231, "synset": "cherokee_rose.n.01", "name": "Cherokee_rose"}, + {"id": 20232, "synset": "musk_rose.n.01", "name": "musk_rose"}, + {"id": 20233, "synset": "agrimonia.n.01", "name": "agrimonia"}, + {"id": 20234, "synset": "harvest-lice.n.01", "name": "harvest-lice"}, + {"id": 20235, "synset": "fragrant_agrimony.n.01", "name": "fragrant_agrimony"}, + {"id": 20236, "synset": "alderleaf_juneberry.n.01", "name": "alderleaf_Juneberry"}, + {"id": 20237, "synset": "flowering_quince.n.01", "name": "flowering_quince"}, + {"id": 20238, "synset": "japonica.n.02", "name": "japonica"}, + {"id": 20239, "synset": "coco_plum.n.01", "name": "coco_plum"}, + {"id": 20240, "synset": "cotoneaster.n.01", "name": "cotoneaster"}, + {"id": 20241, "synset": "cotoneaster_dammeri.n.01", "name": "Cotoneaster_dammeri"}, + { + "id": 20242, + "synset": "cotoneaster_horizontalis.n.01", + "name": "Cotoneaster_horizontalis", + }, + {"id": 20243, "synset": "parsley_haw.n.01", "name": "parsley_haw"}, + {"id": 20244, "synset": "scarlet_haw.n.01", "name": "scarlet_haw"}, + {"id": 20245, "synset": "blackthorn.n.02", "name": "blackthorn"}, + {"id": 20246, "synset": "cockspur_thorn.n.01", "name": "cockspur_thorn"}, + {"id": 20247, "synset": "mayhaw.n.01", "name": "mayhaw"}, + {"id": 20248, "synset": "red_haw.n.02", "name": "red_haw"}, + {"id": 20249, "synset": "red_haw.n.01", "name": "red_haw"}, + {"id": 20250, "synset": "quince.n.01", "name": "quince"}, + {"id": 20251, "synset": "mountain_avens.n.01", "name": "mountain_avens"}, + {"id": 20252, "synset": "loquat.n.01", "name": "loquat"}, + {"id": 20253, "synset": "beach_strawberry.n.01", "name": "beach_strawberry"}, + {"id": 20254, "synset": "virginia_strawberry.n.01", "name": "Virginia_strawberry"}, + {"id": 20255, "synset": "avens.n.01", "name": "avens"}, + {"id": 20256, "synset": "yellow_avens.n.02", "name": "yellow_avens"}, + {"id": 20257, "synset": "yellow_avens.n.01", "name": "yellow_avens"}, + {"id": 20258, "synset": "prairie_smoke.n.01", "name": "prairie_smoke"}, + {"id": 20259, "synset": "bennet.n.01", "name": "bennet"}, + {"id": 20260, "synset": "toyon.n.01", "name": "toyon"}, + {"id": 20261, "synset": "apple_tree.n.01", "name": "apple_tree"}, + {"id": 20262, "synset": "apple.n.02", "name": "apple"}, + {"id": 20263, "synset": "wild_apple.n.01", "name": "wild_apple"}, + {"id": 20264, "synset": "crab_apple.n.01", "name": "crab_apple"}, + {"id": 20265, "synset": "siberian_crab.n.01", "name": "Siberian_crab"}, + {"id": 20266, "synset": "wild_crab.n.01", "name": "wild_crab"}, + {"id": 20267, "synset": "american_crab_apple.n.01", "name": "American_crab_apple"}, + {"id": 20268, "synset": "oregon_crab_apple.n.01", "name": "Oregon_crab_apple"}, + {"id": 20269, "synset": "southern_crab_apple.n.01", "name": "Southern_crab_apple"}, + {"id": 20270, "synset": "iowa_crab.n.01", "name": "Iowa_crab"}, + {"id": 20271, "synset": "bechtel_crab.n.01", "name": "Bechtel_crab"}, + {"id": 20272, "synset": "medlar.n.02", "name": "medlar"}, + {"id": 20273, "synset": "cinquefoil.n.01", "name": "cinquefoil"}, + {"id": 20274, "synset": "silverweed.n.02", "name": "silverweed"}, + {"id": 20275, "synset": "salad_burnet.n.01", "name": "salad_burnet"}, + {"id": 20276, "synset": "plum.n.01", "name": "plum"}, + {"id": 20277, "synset": "wild_plum.n.01", "name": "wild_plum"}, + {"id": 20278, "synset": "allegheny_plum.n.01", "name": "Allegheny_plum"}, + {"id": 20279, "synset": "american_red_plum.n.01", "name": "American_red_plum"}, + {"id": 20280, "synset": "chickasaw_plum.n.01", "name": "chickasaw_plum"}, + {"id": 20281, "synset": "beach_plum.n.01", "name": "beach_plum"}, + {"id": 20282, "synset": "common_plum.n.01", "name": "common_plum"}, + {"id": 20283, "synset": "bullace.n.01", "name": "bullace"}, + {"id": 20284, "synset": "damson_plum.n.02", "name": "damson_plum"}, + {"id": 20285, "synset": "big-tree_plum.n.01", "name": "big-tree_plum"}, + {"id": 20286, "synset": "canada_plum.n.01", "name": "Canada_plum"}, + {"id": 20287, "synset": "plumcot.n.01", "name": "plumcot"}, + {"id": 20288, "synset": "apricot.n.01", "name": "apricot"}, + {"id": 20289, "synset": "japanese_apricot.n.01", "name": "Japanese_apricot"}, + {"id": 20290, "synset": "common_apricot.n.01", "name": "common_apricot"}, + {"id": 20291, "synset": "purple_apricot.n.01", "name": "purple_apricot"}, + {"id": 20292, "synset": "cherry.n.02", "name": "cherry"}, + {"id": 20293, "synset": "wild_cherry.n.02", "name": "wild_cherry"}, + {"id": 20294, "synset": "wild_cherry.n.01", "name": "wild_cherry"}, + {"id": 20295, "synset": "sweet_cherry.n.01", "name": "sweet_cherry"}, + {"id": 20296, "synset": "heart_cherry.n.01", "name": "heart_cherry"}, + {"id": 20297, "synset": "gean.n.01", "name": "gean"}, + {"id": 20298, "synset": "capulin.n.01", "name": "capulin"}, + {"id": 20299, "synset": "cherry_laurel.n.02", "name": "cherry_laurel"}, + {"id": 20300, "synset": "cherry_plum.n.01", "name": "cherry_plum"}, + {"id": 20301, "synset": "sour_cherry.n.01", "name": "sour_cherry"}, + {"id": 20302, "synset": "amarelle.n.01", "name": "amarelle"}, + {"id": 20303, "synset": "morello.n.01", "name": "morello"}, + {"id": 20304, "synset": "marasca.n.01", "name": "marasca"}, + {"id": 20305, "synset": "almond_tree.n.01", "name": "almond_tree"}, + {"id": 20306, "synset": "almond.n.01", "name": "almond"}, + {"id": 20307, "synset": "bitter_almond.n.01", "name": "bitter_almond"}, + {"id": 20308, "synset": "jordan_almond.n.01", "name": "jordan_almond"}, + { + "id": 20309, + "synset": "dwarf_flowering_almond.n.01", + "name": "dwarf_flowering_almond", + }, + {"id": 20310, "synset": "holly-leaved_cherry.n.01", "name": "holly-leaved_cherry"}, + {"id": 20311, "synset": "fuji.n.01", "name": "fuji"}, + {"id": 20312, "synset": "flowering_almond.n.02", "name": "flowering_almond"}, + {"id": 20313, "synset": "cherry_laurel.n.01", "name": "cherry_laurel"}, + {"id": 20314, "synset": "catalina_cherry.n.01", "name": "Catalina_cherry"}, + {"id": 20315, "synset": "bird_cherry.n.01", "name": "bird_cherry"}, + {"id": 20316, "synset": "hagberry_tree.n.01", "name": "hagberry_tree"}, + {"id": 20317, "synset": "hagberry.n.01", "name": "hagberry"}, + {"id": 20318, "synset": "pin_cherry.n.01", "name": "pin_cherry"}, + {"id": 20319, "synset": "peach.n.01", "name": "peach"}, + {"id": 20320, "synset": "nectarine.n.01", "name": "nectarine"}, + {"id": 20321, "synset": "sand_cherry.n.01", "name": "sand_cherry"}, + {"id": 20322, "synset": "japanese_plum.n.01", "name": "Japanese_plum"}, + {"id": 20323, "synset": "black_cherry.n.01", "name": "black_cherry"}, + {"id": 20324, "synset": "flowering_cherry.n.01", "name": "flowering_cherry"}, + {"id": 20325, "synset": "oriental_cherry.n.01", "name": "oriental_cherry"}, + { + "id": 20326, + "synset": "japanese_flowering_cherry.n.01", + "name": "Japanese_flowering_cherry", + }, + {"id": 20327, "synset": "sierra_plum.n.01", "name": "Sierra_plum"}, + {"id": 20328, "synset": "rosebud_cherry.n.01", "name": "rosebud_cherry"}, + {"id": 20329, "synset": "russian_almond.n.01", "name": "Russian_almond"}, + {"id": 20330, "synset": "flowering_almond.n.01", "name": "flowering_almond"}, + {"id": 20331, "synset": "chokecherry.n.02", "name": "chokecherry"}, + {"id": 20332, "synset": "chokecherry.n.01", "name": "chokecherry"}, + {"id": 20333, "synset": "western_chokecherry.n.01", "name": "western_chokecherry"}, + {"id": 20334, "synset": "pyracantha.n.01", "name": "Pyracantha"}, + {"id": 20335, "synset": "pear.n.02", "name": "pear"}, + {"id": 20336, "synset": "fruit_tree.n.01", "name": "fruit_tree"}, + {"id": 20337, "synset": "bramble_bush.n.01", "name": "bramble_bush"}, + {"id": 20338, "synset": "lawyerbush.n.01", "name": "lawyerbush"}, + {"id": 20339, "synset": "stone_bramble.n.01", "name": "stone_bramble"}, + {"id": 20340, "synset": "sand_blackberry.n.01", "name": "sand_blackberry"}, + {"id": 20341, "synset": "boysenberry.n.01", "name": "boysenberry"}, + {"id": 20342, "synset": "loganberry.n.01", "name": "loganberry"}, + {"id": 20343, "synset": "american_dewberry.n.02", "name": "American_dewberry"}, + {"id": 20344, "synset": "northern_dewberry.n.01", "name": "Northern_dewberry"}, + {"id": 20345, "synset": "southern_dewberry.n.01", "name": "Southern_dewberry"}, + {"id": 20346, "synset": "swamp_dewberry.n.01", "name": "swamp_dewberry"}, + {"id": 20347, "synset": "european_dewberry.n.01", "name": "European_dewberry"}, + {"id": 20348, "synset": "raspberry.n.01", "name": "raspberry"}, + {"id": 20349, "synset": "wild_raspberry.n.01", "name": "wild_raspberry"}, + {"id": 20350, "synset": "american_raspberry.n.01", "name": "American_raspberry"}, + {"id": 20351, "synset": "black_raspberry.n.01", "name": "black_raspberry"}, + {"id": 20352, "synset": "salmonberry.n.03", "name": "salmonberry"}, + {"id": 20353, "synset": "salmonberry.n.02", "name": "salmonberry"}, + {"id": 20354, "synset": "wineberry.n.01", "name": "wineberry"}, + {"id": 20355, "synset": "mountain_ash.n.01", "name": "mountain_ash"}, + {"id": 20356, "synset": "rowan.n.01", "name": "rowan"}, + {"id": 20357, "synset": "rowanberry.n.01", "name": "rowanberry"}, + { + "id": 20358, + "synset": "american_mountain_ash.n.01", + "name": "American_mountain_ash", + }, + { + "id": 20359, + "synset": "western_mountain_ash.n.01", + "name": "Western_mountain_ash", + }, + {"id": 20360, "synset": "service_tree.n.01", "name": "service_tree"}, + {"id": 20361, "synset": "wild_service_tree.n.01", "name": "wild_service_tree"}, + {"id": 20362, "synset": "spirea.n.02", "name": "spirea"}, + {"id": 20363, "synset": "bridal_wreath.n.02", "name": "bridal_wreath"}, + {"id": 20364, "synset": "madderwort.n.01", "name": "madderwort"}, + {"id": 20365, "synset": "indian_madder.n.01", "name": "Indian_madder"}, + {"id": 20366, "synset": "madder.n.01", "name": "madder"}, + {"id": 20367, "synset": "woodruff.n.02", "name": "woodruff"}, + {"id": 20368, "synset": "dagame.n.01", "name": "dagame"}, + {"id": 20369, "synset": "blolly.n.01", "name": "blolly"}, + {"id": 20370, "synset": "coffee.n.02", "name": "coffee"}, + {"id": 20371, "synset": "arabian_coffee.n.01", "name": "Arabian_coffee"}, + {"id": 20372, "synset": "liberian_coffee.n.01", "name": "Liberian_coffee"}, + {"id": 20373, "synset": "robusta_coffee.n.01", "name": "robusta_coffee"}, + {"id": 20374, "synset": "cinchona.n.02", "name": "cinchona"}, + {"id": 20375, "synset": "cartagena_bark.n.01", "name": "Cartagena_bark"}, + {"id": 20376, "synset": "calisaya.n.01", "name": "calisaya"}, + {"id": 20377, "synset": "cinchona_tree.n.01", "name": "cinchona_tree"}, + {"id": 20378, "synset": "cinchona.n.01", "name": "cinchona"}, + {"id": 20379, "synset": "bedstraw.n.01", "name": "bedstraw"}, + {"id": 20380, "synset": "sweet_woodruff.n.01", "name": "sweet_woodruff"}, + {"id": 20381, "synset": "northern_bedstraw.n.01", "name": "Northern_bedstraw"}, + {"id": 20382, "synset": "yellow_bedstraw.n.01", "name": "yellow_bedstraw"}, + {"id": 20383, "synset": "wild_licorice.n.01", "name": "wild_licorice"}, + {"id": 20384, "synset": "cleavers.n.01", "name": "cleavers"}, + {"id": 20385, "synset": "wild_madder.n.01", "name": "wild_madder"}, + {"id": 20386, "synset": "cape_jasmine.n.01", "name": "cape_jasmine"}, + {"id": 20387, "synset": "genipa.n.01", "name": "genipa"}, + {"id": 20388, "synset": "genipap_fruit.n.01", "name": "genipap_fruit"}, + {"id": 20389, "synset": "hamelia.n.01", "name": "hamelia"}, + {"id": 20390, "synset": "scarlet_bush.n.01", "name": "scarlet_bush"}, + {"id": 20391, "synset": "lemonwood.n.02", "name": "lemonwood"}, + {"id": 20392, "synset": "negro_peach.n.01", "name": "negro_peach"}, + {"id": 20393, "synset": "wild_medlar.n.01", "name": "wild_medlar"}, + {"id": 20394, "synset": "spanish_tamarind.n.01", "name": "Spanish_tamarind"}, + {"id": 20395, "synset": "abelia.n.01", "name": "abelia"}, + {"id": 20396, "synset": "bush_honeysuckle.n.02", "name": "bush_honeysuckle"}, + {"id": 20397, "synset": "american_twinflower.n.01", "name": "American_twinflower"}, + {"id": 20398, "synset": "honeysuckle.n.01", "name": "honeysuckle"}, + { + "id": 20399, + "synset": "american_fly_honeysuckle.n.01", + "name": "American_fly_honeysuckle", + }, + {"id": 20400, "synset": "italian_honeysuckle.n.01", "name": "Italian_honeysuckle"}, + {"id": 20401, "synset": "yellow_honeysuckle.n.01", "name": "yellow_honeysuckle"}, + {"id": 20402, "synset": "hairy_honeysuckle.n.01", "name": "hairy_honeysuckle"}, + { + "id": 20403, + "synset": "japanese_honeysuckle.n.01", + "name": "Japanese_honeysuckle", + }, + {"id": 20404, "synset": "hall's_honeysuckle.n.01", "name": "Hall's_honeysuckle"}, + { + "id": 20405, + "synset": "morrow's_honeysuckle.n.01", + "name": "Morrow's_honeysuckle", + }, + {"id": 20406, "synset": "woodbine.n.02", "name": "woodbine"}, + {"id": 20407, "synset": "trumpet_honeysuckle.n.01", "name": "trumpet_honeysuckle"}, + { + "id": 20408, + "synset": "european_fly_honeysuckle.n.01", + "name": "European_fly_honeysuckle", + }, + { + "id": 20409, + "synset": "swamp_fly_honeysuckle.n.01", + "name": "swamp_fly_honeysuckle", + }, + {"id": 20410, "synset": "snowberry.n.01", "name": "snowberry"}, + {"id": 20411, "synset": "coralberry.n.01", "name": "coralberry"}, + {"id": 20412, "synset": "blue_elder.n.01", "name": "blue_elder"}, + {"id": 20413, "synset": "dwarf_elder.n.01", "name": "dwarf_elder"}, + {"id": 20414, "synset": "american_red_elder.n.01", "name": "American_red_elder"}, + {"id": 20415, "synset": "european_red_elder.n.01", "name": "European_red_elder"}, + {"id": 20416, "synset": "feverroot.n.01", "name": "feverroot"}, + {"id": 20417, "synset": "cranberry_bush.n.01", "name": "cranberry_bush"}, + {"id": 20418, "synset": "wayfaring_tree.n.01", "name": "wayfaring_tree"}, + {"id": 20419, "synset": "guelder_rose.n.01", "name": "guelder_rose"}, + {"id": 20420, "synset": "arrow_wood.n.01", "name": "arrow_wood"}, + {"id": 20421, "synset": "black_haw.n.02", "name": "black_haw"}, + {"id": 20422, "synset": "weigela.n.01", "name": "weigela"}, + {"id": 20423, "synset": "teasel.n.01", "name": "teasel"}, + {"id": 20424, "synset": "common_teasel.n.01", "name": "common_teasel"}, + {"id": 20425, "synset": "fuller's_teasel.n.01", "name": "fuller's_teasel"}, + {"id": 20426, "synset": "wild_teasel.n.01", "name": "wild_teasel"}, + {"id": 20427, "synset": "scabious.n.01", "name": "scabious"}, + {"id": 20428, "synset": "sweet_scabious.n.01", "name": "sweet_scabious"}, + {"id": 20429, "synset": "field_scabious.n.01", "name": "field_scabious"}, + {"id": 20430, "synset": "jewelweed.n.01", "name": "jewelweed"}, + {"id": 20431, "synset": "geranium.n.01", "name": "geranium"}, + {"id": 20432, "synset": "cranesbill.n.01", "name": "cranesbill"}, + {"id": 20433, "synset": "wild_geranium.n.01", "name": "wild_geranium"}, + {"id": 20434, "synset": "meadow_cranesbill.n.01", "name": "meadow_cranesbill"}, + { + "id": 20435, + "synset": "richardson's_geranium.n.01", + "name": "Richardson's_geranium", + }, + {"id": 20436, "synset": "herb_robert.n.01", "name": "herb_robert"}, + {"id": 20437, "synset": "sticky_geranium.n.01", "name": "sticky_geranium"}, + { + "id": 20438, + "synset": "dove's_foot_geranium.n.01", + "name": "dove's_foot_geranium", + }, + {"id": 20439, "synset": "rose_geranium.n.01", "name": "rose_geranium"}, + {"id": 20440, "synset": "fish_geranium.n.01", "name": "fish_geranium"}, + {"id": 20441, "synset": "ivy_geranium.n.01", "name": "ivy_geranium"}, + {"id": 20442, "synset": "apple_geranium.n.01", "name": "apple_geranium"}, + {"id": 20443, "synset": "lemon_geranium.n.01", "name": "lemon_geranium"}, + {"id": 20444, "synset": "storksbill.n.01", "name": "storksbill"}, + {"id": 20445, "synset": "musk_clover.n.01", "name": "musk_clover"}, + {"id": 20446, "synset": "incense_tree.n.01", "name": "incense_tree"}, + {"id": 20447, "synset": "elephant_tree.n.01", "name": "elephant_tree"}, + {"id": 20448, "synset": "gumbo-limbo.n.01", "name": "gumbo-limbo"}, + {"id": 20449, "synset": "boswellia_carteri.n.01", "name": "Boswellia_carteri"}, + {"id": 20450, "synset": "salai.n.01", "name": "salai"}, + {"id": 20451, "synset": "balm_of_gilead.n.03", "name": "balm_of_gilead"}, + {"id": 20452, "synset": "myrrh_tree.n.01", "name": "myrrh_tree"}, + { + "id": 20453, + "synset": "protium_heptaphyllum.n.01", + "name": "Protium_heptaphyllum", + }, + {"id": 20454, "synset": "protium_guianense.n.01", "name": "Protium_guianense"}, + {"id": 20455, "synset": "water_starwort.n.01", "name": "water_starwort"}, + {"id": 20456, "synset": "barbados_cherry.n.01", "name": "barbados_cherry"}, + {"id": 20457, "synset": "mahogany.n.02", "name": "mahogany"}, + {"id": 20458, "synset": "chinaberry.n.02", "name": "chinaberry"}, + {"id": 20459, "synset": "neem.n.01", "name": "neem"}, + {"id": 20460, "synset": "neem_seed.n.01", "name": "neem_seed"}, + {"id": 20461, "synset": "spanish_cedar.n.01", "name": "Spanish_cedar"}, + {"id": 20462, "synset": "satinwood.n.03", "name": "satinwood"}, + { + "id": 20463, + "synset": "african_scented_mahogany.n.01", + "name": "African_scented_mahogany", + }, + {"id": 20464, "synset": "silver_ash.n.01", "name": "silver_ash"}, + {"id": 20465, "synset": "native_beech.n.01", "name": "native_beech"}, + {"id": 20466, "synset": "bunji-bunji.n.01", "name": "bunji-bunji"}, + {"id": 20467, "synset": "african_mahogany.n.01", "name": "African_mahogany"}, + {"id": 20468, "synset": "lanseh_tree.n.01", "name": "lanseh_tree"}, + {"id": 20469, "synset": "true_mahogany.n.01", "name": "true_mahogany"}, + {"id": 20470, "synset": "honduras_mahogany.n.01", "name": "Honduras_mahogany"}, + {"id": 20471, "synset": "philippine_mahogany.n.02", "name": "Philippine_mahogany"}, + {"id": 20472, "synset": "caracolito.n.01", "name": "caracolito"}, + {"id": 20473, "synset": "common_wood_sorrel.n.01", "name": "common_wood_sorrel"}, + {"id": 20474, "synset": "bermuda_buttercup.n.01", "name": "Bermuda_buttercup"}, + {"id": 20475, "synset": "creeping_oxalis.n.01", "name": "creeping_oxalis"}, + {"id": 20476, "synset": "goatsfoot.n.01", "name": "goatsfoot"}, + {"id": 20477, "synset": "violet_wood_sorrel.n.01", "name": "violet_wood_sorrel"}, + {"id": 20478, "synset": "oca.n.01", "name": "oca"}, + {"id": 20479, "synset": "carambola.n.01", "name": "carambola"}, + {"id": 20480, "synset": "bilimbi.n.01", "name": "bilimbi"}, + {"id": 20481, "synset": "milkwort.n.01", "name": "milkwort"}, + {"id": 20482, "synset": "senega.n.02", "name": "senega"}, + {"id": 20483, "synset": "orange_milkwort.n.01", "name": "orange_milkwort"}, + { + "id": 20484, + "synset": "flowering_wintergreen.n.01", + "name": "flowering_wintergreen", + }, + {"id": 20485, "synset": "seneca_snakeroot.n.01", "name": "Seneca_snakeroot"}, + {"id": 20486, "synset": "common_milkwort.n.01", "name": "common_milkwort"}, + {"id": 20487, "synset": "rue.n.01", "name": "rue"}, + {"id": 20488, "synset": "citrus.n.02", "name": "citrus"}, + {"id": 20489, "synset": "orange.n.03", "name": "orange"}, + {"id": 20490, "synset": "sour_orange.n.01", "name": "sour_orange"}, + {"id": 20491, "synset": "bergamot.n.01", "name": "bergamot"}, + {"id": 20492, "synset": "pomelo.n.01", "name": "pomelo"}, + {"id": 20493, "synset": "citron.n.02", "name": "citron"}, + {"id": 20494, "synset": "grapefruit.n.01", "name": "grapefruit"}, + {"id": 20495, "synset": "mandarin.n.01", "name": "mandarin"}, + {"id": 20496, "synset": "tangerine.n.01", "name": "tangerine"}, + {"id": 20497, "synset": "satsuma.n.01", "name": "satsuma"}, + {"id": 20498, "synset": "sweet_orange.n.02", "name": "sweet_orange"}, + {"id": 20499, "synset": "temple_orange.n.01", "name": "temple_orange"}, + {"id": 20500, "synset": "tangelo.n.01", "name": "tangelo"}, + {"id": 20501, "synset": "rangpur.n.01", "name": "rangpur"}, + {"id": 20502, "synset": "lemon.n.03", "name": "lemon"}, + {"id": 20503, "synset": "sweet_lemon.n.01", "name": "sweet_lemon"}, + {"id": 20504, "synset": "lime.n.04", "name": "lime"}, + {"id": 20505, "synset": "citrange.n.01", "name": "citrange"}, + {"id": 20506, "synset": "fraxinella.n.01", "name": "fraxinella"}, + {"id": 20507, "synset": "kumquat.n.01", "name": "kumquat"}, + {"id": 20508, "synset": "marumi.n.01", "name": "marumi"}, + {"id": 20509, "synset": "nagami.n.01", "name": "nagami"}, + {"id": 20510, "synset": "cork_tree.n.01", "name": "cork_tree"}, + {"id": 20511, "synset": "trifoliate_orange.n.01", "name": "trifoliate_orange"}, + {"id": 20512, "synset": "prickly_ash.n.01", "name": "prickly_ash"}, + {"id": 20513, "synset": "toothache_tree.n.01", "name": "toothache_tree"}, + {"id": 20514, "synset": "hercules'-club.n.01", "name": "Hercules'-club"}, + {"id": 20515, "synset": "bitterwood_tree.n.01", "name": "bitterwood_tree"}, + {"id": 20516, "synset": "marupa.n.01", "name": "marupa"}, + {"id": 20517, "synset": "paradise_tree.n.01", "name": "paradise_tree"}, + {"id": 20518, "synset": "ailanthus.n.01", "name": "ailanthus"}, + {"id": 20519, "synset": "tree_of_heaven.n.01", "name": "tree_of_heaven"}, + {"id": 20520, "synset": "wild_mango.n.01", "name": "wild_mango"}, + {"id": 20521, "synset": "pepper_tree.n.02", "name": "pepper_tree"}, + {"id": 20522, "synset": "jamaica_quassia.n.02", "name": "Jamaica_quassia"}, + {"id": 20523, "synset": "quassia.n.02", "name": "quassia"}, + {"id": 20524, "synset": "nasturtium.n.01", "name": "nasturtium"}, + {"id": 20525, "synset": "garden_nasturtium.n.01", "name": "garden_nasturtium"}, + {"id": 20526, "synset": "bush_nasturtium.n.01", "name": "bush_nasturtium"}, + {"id": 20527, "synset": "canarybird_flower.n.01", "name": "canarybird_flower"}, + {"id": 20528, "synset": "bean_caper.n.01", "name": "bean_caper"}, + {"id": 20529, "synset": "palo_santo.n.01", "name": "palo_santo"}, + {"id": 20530, "synset": "lignum_vitae.n.02", "name": "lignum_vitae"}, + {"id": 20531, "synset": "creosote_bush.n.01", "name": "creosote_bush"}, + {"id": 20532, "synset": "caltrop.n.01", "name": "caltrop"}, + {"id": 20533, "synset": "willow.n.01", "name": "willow"}, + {"id": 20534, "synset": "osier.n.02", "name": "osier"}, + {"id": 20535, "synset": "white_willow.n.01", "name": "white_willow"}, + {"id": 20536, "synset": "silver_willow.n.01", "name": "silver_willow"}, + {"id": 20537, "synset": "golden_willow.n.01", "name": "golden_willow"}, + {"id": 20538, "synset": "cricket-bat_willow.n.01", "name": "cricket-bat_willow"}, + {"id": 20539, "synset": "arctic_willow.n.01", "name": "arctic_willow"}, + {"id": 20540, "synset": "weeping_willow.n.01", "name": "weeping_willow"}, + { + "id": 20541, + "synset": "wisconsin_weeping_willow.n.01", + "name": "Wisconsin_weeping_willow", + }, + {"id": 20542, "synset": "pussy_willow.n.01", "name": "pussy_willow"}, + {"id": 20543, "synset": "sallow.n.01", "name": "sallow"}, + {"id": 20544, "synset": "goat_willow.n.01", "name": "goat_willow"}, + {"id": 20545, "synset": "peachleaf_willow.n.01", "name": "peachleaf_willow"}, + {"id": 20546, "synset": "almond_willow.n.01", "name": "almond_willow"}, + {"id": 20547, "synset": "hoary_willow.n.01", "name": "hoary_willow"}, + {"id": 20548, "synset": "crack_willow.n.01", "name": "crack_willow"}, + {"id": 20549, "synset": "prairie_willow.n.01", "name": "prairie_willow"}, + {"id": 20550, "synset": "dwarf_willow.n.01", "name": "dwarf_willow"}, + {"id": 20551, "synset": "grey_willow.n.01", "name": "grey_willow"}, + {"id": 20552, "synset": "arroyo_willow.n.01", "name": "arroyo_willow"}, + {"id": 20553, "synset": "shining_willow.n.01", "name": "shining_willow"}, + {"id": 20554, "synset": "swamp_willow.n.01", "name": "swamp_willow"}, + {"id": 20555, "synset": "bay_willow.n.01", "name": "bay_willow"}, + {"id": 20556, "synset": "purple_willow.n.01", "name": "purple_willow"}, + {"id": 20557, "synset": "balsam_willow.n.01", "name": "balsam_willow"}, + {"id": 20558, "synset": "creeping_willow.n.01", "name": "creeping_willow"}, + {"id": 20559, "synset": "sitka_willow.n.01", "name": "Sitka_willow"}, + {"id": 20560, "synset": "dwarf_grey_willow.n.01", "name": "dwarf_grey_willow"}, + {"id": 20561, "synset": "bearberry_willow.n.01", "name": "bearberry_willow"}, + {"id": 20562, "synset": "common_osier.n.01", "name": "common_osier"}, + {"id": 20563, "synset": "poplar.n.02", "name": "poplar"}, + {"id": 20564, "synset": "balsam_poplar.n.01", "name": "balsam_poplar"}, + {"id": 20565, "synset": "white_poplar.n.01", "name": "white_poplar"}, + {"id": 20566, "synset": "grey_poplar.n.01", "name": "grey_poplar"}, + {"id": 20567, "synset": "black_poplar.n.01", "name": "black_poplar"}, + {"id": 20568, "synset": "lombardy_poplar.n.01", "name": "Lombardy_poplar"}, + {"id": 20569, "synset": "cottonwood.n.01", "name": "cottonwood"}, + {"id": 20570, "synset": "eastern_cottonwood.n.01", "name": "Eastern_cottonwood"}, + {"id": 20571, "synset": "black_cottonwood.n.02", "name": "black_cottonwood"}, + {"id": 20572, "synset": "swamp_cottonwood.n.01", "name": "swamp_cottonwood"}, + {"id": 20573, "synset": "aspen.n.01", "name": "aspen"}, + {"id": 20574, "synset": "quaking_aspen.n.01", "name": "quaking_aspen"}, + { + "id": 20575, + "synset": "american_quaking_aspen.n.01", + "name": "American_quaking_aspen", + }, + {"id": 20576, "synset": "canadian_aspen.n.01", "name": "Canadian_aspen"}, + {"id": 20577, "synset": "sandalwood_tree.n.01", "name": "sandalwood_tree"}, + {"id": 20578, "synset": "quandong.n.01", "name": "quandong"}, + {"id": 20579, "synset": "rabbitwood.n.01", "name": "rabbitwood"}, + {"id": 20580, "synset": "loranthaceae.n.01", "name": "Loranthaceae"}, + {"id": 20581, "synset": "mistletoe.n.03", "name": "mistletoe"}, + {"id": 20582, "synset": "american_mistletoe.n.02", "name": "American_mistletoe"}, + {"id": 20583, "synset": "mistletoe.n.02", "name": "mistletoe"}, + {"id": 20584, "synset": "american_mistletoe.n.01", "name": "American_mistletoe"}, + {"id": 20585, "synset": "aalii.n.01", "name": "aalii"}, + {"id": 20586, "synset": "soapberry.n.01", "name": "soapberry"}, + {"id": 20587, "synset": "wild_china_tree.n.01", "name": "wild_China_tree"}, + {"id": 20588, "synset": "china_tree.n.01", "name": "China_tree"}, + {"id": 20589, "synset": "akee.n.01", "name": "akee"}, + {"id": 20590, "synset": "soapberry_vine.n.01", "name": "soapberry_vine"}, + {"id": 20591, "synset": "heartseed.n.01", "name": "heartseed"}, + {"id": 20592, "synset": "balloon_vine.n.01", "name": "balloon_vine"}, + {"id": 20593, "synset": "longan.n.01", "name": "longan"}, + {"id": 20594, "synset": "harpullia.n.01", "name": "harpullia"}, + {"id": 20595, "synset": "harpulla.n.01", "name": "harpulla"}, + { + "id": 20596, + "synset": "moreton_bay_tulipwood.n.01", + "name": "Moreton_Bay_tulipwood", + }, + {"id": 20597, "synset": "litchi.n.01", "name": "litchi"}, + {"id": 20598, "synset": "spanish_lime.n.01", "name": "Spanish_lime"}, + {"id": 20599, "synset": "rambutan.n.01", "name": "rambutan"}, + {"id": 20600, "synset": "pulasan.n.01", "name": "pulasan"}, + {"id": 20601, "synset": "pachysandra.n.01", "name": "pachysandra"}, + {"id": 20602, "synset": "allegheny_spurge.n.01", "name": "Allegheny_spurge"}, + {"id": 20603, "synset": "bittersweet.n.02", "name": "bittersweet"}, + {"id": 20604, "synset": "spindle_tree.n.01", "name": "spindle_tree"}, + {"id": 20605, "synset": "winged_spindle_tree.n.01", "name": "winged_spindle_tree"}, + {"id": 20606, "synset": "wahoo.n.02", "name": "wahoo"}, + {"id": 20607, "synset": "strawberry_bush.n.01", "name": "strawberry_bush"}, + { + "id": 20608, + "synset": "evergreen_bittersweet.n.01", + "name": "evergreen_bittersweet", + }, + {"id": 20609, "synset": "cyrilla.n.01", "name": "cyrilla"}, + {"id": 20610, "synset": "titi.n.01", "name": "titi"}, + {"id": 20611, "synset": "crowberry.n.01", "name": "crowberry"}, + {"id": 20612, "synset": "maple.n.02", "name": "maple"}, + {"id": 20613, "synset": "silver_maple.n.01", "name": "silver_maple"}, + {"id": 20614, "synset": "sugar_maple.n.01", "name": "sugar_maple"}, + {"id": 20615, "synset": "red_maple.n.01", "name": "red_maple"}, + {"id": 20616, "synset": "moosewood.n.01", "name": "moosewood"}, + {"id": 20617, "synset": "oregon_maple.n.01", "name": "Oregon_maple"}, + {"id": 20618, "synset": "dwarf_maple.n.01", "name": "dwarf_maple"}, + {"id": 20619, "synset": "mountain_maple.n.01", "name": "mountain_maple"}, + {"id": 20620, "synset": "vine_maple.n.01", "name": "vine_maple"}, + {"id": 20621, "synset": "hedge_maple.n.01", "name": "hedge_maple"}, + {"id": 20622, "synset": "norway_maple.n.01", "name": "Norway_maple"}, + {"id": 20623, "synset": "sycamore.n.03", "name": "sycamore"}, + {"id": 20624, "synset": "box_elder.n.01", "name": "box_elder"}, + { + "id": 20625, + "synset": "california_box_elder.n.01", + "name": "California_box_elder", + }, + {"id": 20626, "synset": "pointed-leaf_maple.n.01", "name": "pointed-leaf_maple"}, + {"id": 20627, "synset": "japanese_maple.n.02", "name": "Japanese_maple"}, + {"id": 20628, "synset": "japanese_maple.n.01", "name": "Japanese_maple"}, + {"id": 20629, "synset": "holly.n.01", "name": "holly"}, + {"id": 20630, "synset": "chinese_holly.n.01", "name": "Chinese_holly"}, + {"id": 20631, "synset": "bearberry.n.02", "name": "bearberry"}, + {"id": 20632, "synset": "inkberry.n.01", "name": "inkberry"}, + {"id": 20633, "synset": "mate.n.07", "name": "mate"}, + {"id": 20634, "synset": "american_holly.n.01", "name": "American_holly"}, + {"id": 20635, "synset": "low_gallberry_holly.n.01", "name": "low_gallberry_holly"}, + { + "id": 20636, + "synset": "tall_gallberry_holly.n.01", + "name": "tall_gallberry_holly", + }, + {"id": 20637, "synset": "yaupon_holly.n.01", "name": "yaupon_holly"}, + {"id": 20638, "synset": "deciduous_holly.n.01", "name": "deciduous_holly"}, + {"id": 20639, "synset": "juneberry_holly.n.01", "name": "juneberry_holly"}, + {"id": 20640, "synset": "largeleaf_holly.n.01", "name": "largeleaf_holly"}, + {"id": 20641, "synset": "geogia_holly.n.01", "name": "Geogia_holly"}, + { + "id": 20642, + "synset": "common_winterberry_holly.n.01", + "name": "common_winterberry_holly", + }, + { + "id": 20643, + "synset": "smooth_winterberry_holly.n.01", + "name": "smooth_winterberry_holly", + }, + {"id": 20644, "synset": "cashew.n.01", "name": "cashew"}, + {"id": 20645, "synset": "goncalo_alves.n.01", "name": "goncalo_alves"}, + {"id": 20646, "synset": "venetian_sumac.n.01", "name": "Venetian_sumac"}, + {"id": 20647, "synset": "laurel_sumac.n.01", "name": "laurel_sumac"}, + {"id": 20648, "synset": "mango.n.01", "name": "mango"}, + {"id": 20649, "synset": "pistachio.n.01", "name": "pistachio"}, + {"id": 20650, "synset": "terebinth.n.01", "name": "terebinth"}, + {"id": 20651, "synset": "mastic.n.03", "name": "mastic"}, + {"id": 20652, "synset": "australian_sumac.n.01", "name": "Australian_sumac"}, + {"id": 20653, "synset": "sumac.n.02", "name": "sumac"}, + {"id": 20654, "synset": "smooth_sumac.n.01", "name": "smooth_sumac"}, + {"id": 20655, "synset": "sugar-bush.n.01", "name": "sugar-bush"}, + {"id": 20656, "synset": "staghorn_sumac.n.01", "name": "staghorn_sumac"}, + {"id": 20657, "synset": "squawbush.n.01", "name": "squawbush"}, + {"id": 20658, "synset": "aroeira_blanca.n.01", "name": "aroeira_blanca"}, + {"id": 20659, "synset": "pepper_tree.n.01", "name": "pepper_tree"}, + { + "id": 20660, + "synset": "brazilian_pepper_tree.n.01", + "name": "Brazilian_pepper_tree", + }, + {"id": 20661, "synset": "hog_plum.n.01", "name": "hog_plum"}, + {"id": 20662, "synset": "mombin.n.01", "name": "mombin"}, + {"id": 20663, "synset": "poison_ash.n.01", "name": "poison_ash"}, + {"id": 20664, "synset": "poison_ivy.n.02", "name": "poison_ivy"}, + {"id": 20665, "synset": "western_poison_oak.n.01", "name": "western_poison_oak"}, + {"id": 20666, "synset": "eastern_poison_oak.n.01", "name": "eastern_poison_oak"}, + {"id": 20667, "synset": "varnish_tree.n.02", "name": "varnish_tree"}, + {"id": 20668, "synset": "horse_chestnut.n.01", "name": "horse_chestnut"}, + {"id": 20669, "synset": "buckeye.n.01", "name": "buckeye"}, + {"id": 20670, "synset": "sweet_buckeye.n.01", "name": "sweet_buckeye"}, + {"id": 20671, "synset": "ohio_buckeye.n.01", "name": "Ohio_buckeye"}, + {"id": 20672, "synset": "dwarf_buckeye.n.01", "name": "dwarf_buckeye"}, + {"id": 20673, "synset": "red_buckeye.n.01", "name": "red_buckeye"}, + { + "id": 20674, + "synset": "particolored_buckeye.n.01", + "name": "particolored_buckeye", + }, + {"id": 20675, "synset": "ebony.n.03", "name": "ebony"}, + {"id": 20676, "synset": "marblewood.n.02", "name": "marblewood"}, + {"id": 20677, "synset": "marblewood.n.01", "name": "marblewood"}, + {"id": 20678, "synset": "persimmon.n.01", "name": "persimmon"}, + {"id": 20679, "synset": "japanese_persimmon.n.01", "name": "Japanese_persimmon"}, + {"id": 20680, "synset": "american_persimmon.n.01", "name": "American_persimmon"}, + {"id": 20681, "synset": "date_plum.n.01", "name": "date_plum"}, + {"id": 20682, "synset": "buckthorn.n.02", "name": "buckthorn"}, + {"id": 20683, "synset": "southern_buckthorn.n.01", "name": "southern_buckthorn"}, + {"id": 20684, "synset": "false_buckthorn.n.01", "name": "false_buckthorn"}, + {"id": 20685, "synset": "star_apple.n.01", "name": "star_apple"}, + {"id": 20686, "synset": "satinleaf.n.01", "name": "satinleaf"}, + {"id": 20687, "synset": "balata.n.02", "name": "balata"}, + {"id": 20688, "synset": "sapodilla.n.01", "name": "sapodilla"}, + {"id": 20689, "synset": "gutta-percha_tree.n.02", "name": "gutta-percha_tree"}, + {"id": 20690, "synset": "gutta-percha_tree.n.01", "name": "gutta-percha_tree"}, + {"id": 20691, "synset": "canistel.n.01", "name": "canistel"}, + {"id": 20692, "synset": "marmalade_tree.n.01", "name": "marmalade_tree"}, + {"id": 20693, "synset": "sweetleaf.n.01", "name": "sweetleaf"}, + {"id": 20694, "synset": "asiatic_sweetleaf.n.01", "name": "Asiatic_sweetleaf"}, + {"id": 20695, "synset": "styrax.n.01", "name": "styrax"}, + {"id": 20696, "synset": "snowbell.n.01", "name": "snowbell"}, + {"id": 20697, "synset": "japanese_snowbell.n.01", "name": "Japanese_snowbell"}, + {"id": 20698, "synset": "texas_snowbell.n.01", "name": "Texas_snowbell"}, + {"id": 20699, "synset": "silver-bell_tree.n.01", "name": "silver-bell_tree"}, + {"id": 20700, "synset": "carnivorous_plant.n.01", "name": "carnivorous_plant"}, + {"id": 20701, "synset": "pitcher_plant.n.01", "name": "pitcher_plant"}, + { + "id": 20702, + "synset": "common_pitcher_plant.n.01", + "name": "common_pitcher_plant", + }, + { + "id": 20703, + "synset": "hooded_pitcher_plant.n.01", + "name": "hooded_pitcher_plant", + }, + {"id": 20704, "synset": "huntsman's_horn.n.01", "name": "huntsman's_horn"}, + { + "id": 20705, + "synset": "tropical_pitcher_plant.n.01", + "name": "tropical_pitcher_plant", + }, + {"id": 20706, "synset": "sundew.n.01", "name": "sundew"}, + {"id": 20707, "synset": "venus's_flytrap.n.01", "name": "Venus's_flytrap"}, + {"id": 20708, "synset": "waterwheel_plant.n.01", "name": "waterwheel_plant"}, + { + "id": 20709, + "synset": "drosophyllum_lusitanicum.n.01", + "name": "Drosophyllum_lusitanicum", + }, + {"id": 20710, "synset": "roridula.n.01", "name": "roridula"}, + { + "id": 20711, + "synset": "australian_pitcher_plant.n.01", + "name": "Australian_pitcher_plant", + }, + {"id": 20712, "synset": "sedum.n.01", "name": "sedum"}, + {"id": 20713, "synset": "stonecrop.n.01", "name": "stonecrop"}, + {"id": 20714, "synset": "rose-root.n.01", "name": "rose-root"}, + {"id": 20715, "synset": "orpine.n.01", "name": "orpine"}, + {"id": 20716, "synset": "pinwheel.n.01", "name": "pinwheel"}, + {"id": 20717, "synset": "christmas_bush.n.01", "name": "Christmas_bush"}, + {"id": 20718, "synset": "hortensia.n.01", "name": "hortensia"}, + { + "id": 20719, + "synset": "fall-blooming_hydrangea.n.01", + "name": "fall-blooming_hydrangea", + }, + {"id": 20720, "synset": "carpenteria.n.01", "name": "carpenteria"}, + {"id": 20721, "synset": "decumary.n.01", "name": "decumary"}, + {"id": 20722, "synset": "deutzia.n.01", "name": "deutzia"}, + {"id": 20723, "synset": "philadelphus.n.01", "name": "philadelphus"}, + {"id": 20724, "synset": "mock_orange.n.01", "name": "mock_orange"}, + {"id": 20725, "synset": "saxifrage.n.01", "name": "saxifrage"}, + { + "id": 20726, + "synset": "yellow_mountain_saxifrage.n.01", + "name": "yellow_mountain_saxifrage", + }, + {"id": 20727, "synset": "meadow_saxifrage.n.01", "name": "meadow_saxifrage"}, + {"id": 20728, "synset": "mossy_saxifrage.n.01", "name": "mossy_saxifrage"}, + {"id": 20729, "synset": "western_saxifrage.n.01", "name": "western_saxifrage"}, + {"id": 20730, "synset": "purple_saxifrage.n.01", "name": "purple_saxifrage"}, + {"id": 20731, "synset": "star_saxifrage.n.01", "name": "star_saxifrage"}, + {"id": 20732, "synset": "strawberry_geranium.n.01", "name": "strawberry_geranium"}, + {"id": 20733, "synset": "astilbe.n.01", "name": "astilbe"}, + {"id": 20734, "synset": "false_goatsbeard.n.01", "name": "false_goatsbeard"}, + {"id": 20735, "synset": "dwarf_astilbe.n.01", "name": "dwarf_astilbe"}, + {"id": 20736, "synset": "spirea.n.01", "name": "spirea"}, + {"id": 20737, "synset": "bergenia.n.01", "name": "bergenia"}, + {"id": 20738, "synset": "coast_boykinia.n.01", "name": "coast_boykinia"}, + {"id": 20739, "synset": "golden_saxifrage.n.01", "name": "golden_saxifrage"}, + {"id": 20740, "synset": "umbrella_plant.n.01", "name": "umbrella_plant"}, + {"id": 20741, "synset": "bridal_wreath.n.01", "name": "bridal_wreath"}, + {"id": 20742, "synset": "alumroot.n.01", "name": "alumroot"}, + {"id": 20743, "synset": "coralbells.n.01", "name": "coralbells"}, + { + "id": 20744, + "synset": "leatherleaf_saxifrage.n.01", + "name": "leatherleaf_saxifrage", + }, + {"id": 20745, "synset": "woodland_star.n.01", "name": "woodland_star"}, + {"id": 20746, "synset": "prairie_star.n.01", "name": "prairie_star"}, + {"id": 20747, "synset": "miterwort.n.01", "name": "miterwort"}, + { + "id": 20748, + "synset": "five-point_bishop's_cap.n.01", + "name": "five-point_bishop's_cap", + }, + {"id": 20749, "synset": "parnassia.n.01", "name": "parnassia"}, + {"id": 20750, "synset": "bog_star.n.01", "name": "bog_star"}, + { + "id": 20751, + "synset": "fringed_grass_of_parnassus.n.01", + "name": "fringed_grass_of_Parnassus", + }, + {"id": 20752, "synset": "false_alumroot.n.01", "name": "false_alumroot"}, + {"id": 20753, "synset": "foamflower.n.01", "name": "foamflower"}, + {"id": 20754, "synset": "false_miterwort.n.01", "name": "false_miterwort"}, + {"id": 20755, "synset": "pickaback_plant.n.01", "name": "pickaback_plant"}, + {"id": 20756, "synset": "currant.n.02", "name": "currant"}, + {"id": 20757, "synset": "black_currant.n.01", "name": "black_currant"}, + {"id": 20758, "synset": "white_currant.n.01", "name": "white_currant"}, + {"id": 20759, "synset": "gooseberry.n.01", "name": "gooseberry"}, + {"id": 20760, "synset": "plane_tree.n.01", "name": "plane_tree"}, + {"id": 20761, "synset": "london_plane.n.01", "name": "London_plane"}, + {"id": 20762, "synset": "american_sycamore.n.01", "name": "American_sycamore"}, + {"id": 20763, "synset": "oriental_plane.n.01", "name": "oriental_plane"}, + {"id": 20764, "synset": "california_sycamore.n.01", "name": "California_sycamore"}, + {"id": 20765, "synset": "arizona_sycamore.n.01", "name": "Arizona_sycamore"}, + {"id": 20766, "synset": "greek_valerian.n.01", "name": "Greek_valerian"}, + { + "id": 20767, + "synset": "northern_jacob's_ladder.n.01", + "name": "northern_Jacob's_ladder", + }, + {"id": 20768, "synset": "skunkweed.n.01", "name": "skunkweed"}, + {"id": 20769, "synset": "phlox.n.01", "name": "phlox"}, + {"id": 20770, "synset": "moss_pink.n.02", "name": "moss_pink"}, + {"id": 20771, "synset": "evening-snow.n.01", "name": "evening-snow"}, + {"id": 20772, "synset": "acanthus.n.01", "name": "acanthus"}, + {"id": 20773, "synset": "bear's_breech.n.01", "name": "bear's_breech"}, + {"id": 20774, "synset": "caricature_plant.n.01", "name": "caricature_plant"}, + {"id": 20775, "synset": "black-eyed_susan.n.01", "name": "black-eyed_Susan"}, + {"id": 20776, "synset": "catalpa.n.01", "name": "catalpa"}, + {"id": 20777, "synset": "catalpa_bignioides.n.01", "name": "Catalpa_bignioides"}, + {"id": 20778, "synset": "catalpa_speciosa.n.01", "name": "Catalpa_speciosa"}, + {"id": 20779, "synset": "desert_willow.n.01", "name": "desert_willow"}, + {"id": 20780, "synset": "calabash.n.02", "name": "calabash"}, + {"id": 20781, "synset": "calabash.n.01", "name": "calabash"}, + {"id": 20782, "synset": "borage.n.01", "name": "borage"}, + {"id": 20783, "synset": "common_amsinckia.n.01", "name": "common_amsinckia"}, + {"id": 20784, "synset": "anchusa.n.01", "name": "anchusa"}, + {"id": 20785, "synset": "bugloss.n.01", "name": "bugloss"}, + {"id": 20786, "synset": "cape_forget-me-not.n.02", "name": "cape_forget-me-not"}, + {"id": 20787, "synset": "cape_forget-me-not.n.01", "name": "cape_forget-me-not"}, + {"id": 20788, "synset": "spanish_elm.n.02", "name": "Spanish_elm"}, + {"id": 20789, "synset": "princewood.n.01", "name": "princewood"}, + { + "id": 20790, + "synset": "chinese_forget-me-not.n.01", + "name": "Chinese_forget-me-not", + }, + {"id": 20791, "synset": "hound's-tongue.n.02", "name": "hound's-tongue"}, + {"id": 20792, "synset": "hound's-tongue.n.01", "name": "hound's-tongue"}, + {"id": 20793, "synset": "blueweed.n.01", "name": "blueweed"}, + {"id": 20794, "synset": "beggar's_lice.n.01", "name": "beggar's_lice"}, + {"id": 20795, "synset": "gromwell.n.01", "name": "gromwell"}, + {"id": 20796, "synset": "puccoon.n.01", "name": "puccoon"}, + {"id": 20797, "synset": "virginia_bluebell.n.01", "name": "Virginia_bluebell"}, + { + "id": 20798, + "synset": "garden_forget-me-not.n.01", + "name": "garden_forget-me-not", + }, + {"id": 20799, "synset": "forget-me-not.n.01", "name": "forget-me-not"}, + {"id": 20800, "synset": "false_gromwell.n.01", "name": "false_gromwell"}, + {"id": 20801, "synset": "comfrey.n.01", "name": "comfrey"}, + {"id": 20802, "synset": "common_comfrey.n.01", "name": "common_comfrey"}, + {"id": 20803, "synset": "convolvulus.n.01", "name": "convolvulus"}, + {"id": 20804, "synset": "bindweed.n.01", "name": "bindweed"}, + {"id": 20805, "synset": "field_bindweed.n.01", "name": "field_bindweed"}, + {"id": 20806, "synset": "scammony.n.03", "name": "scammony"}, + {"id": 20807, "synset": "silverweed.n.01", "name": "silverweed"}, + {"id": 20808, "synset": "dodder.n.01", "name": "dodder"}, + {"id": 20809, "synset": "dichondra.n.01", "name": "dichondra"}, + {"id": 20810, "synset": "cypress_vine.n.01", "name": "cypress_vine"}, + {"id": 20811, "synset": "moonflower.n.01", "name": "moonflower"}, + {"id": 20812, "synset": "wild_potato_vine.n.01", "name": "wild_potato_vine"}, + {"id": 20813, "synset": "red_morning-glory.n.01", "name": "red_morning-glory"}, + {"id": 20814, "synset": "man-of-the-earth.n.01", "name": "man-of-the-earth"}, + {"id": 20815, "synset": "scammony.n.01", "name": "scammony"}, + { + "id": 20816, + "synset": "japanese_morning_glory.n.01", + "name": "Japanese_morning_glory", + }, + { + "id": 20817, + "synset": "imperial_japanese_morning_glory.n.01", + "name": "imperial_Japanese_morning_glory", + }, + {"id": 20818, "synset": "gesneriad.n.01", "name": "gesneriad"}, + {"id": 20819, "synset": "gesneria.n.01", "name": "gesneria"}, + {"id": 20820, "synset": "achimenes.n.01", "name": "achimenes"}, + {"id": 20821, "synset": "aeschynanthus.n.01", "name": "aeschynanthus"}, + {"id": 20822, "synset": "lace-flower_vine.n.01", "name": "lace-flower_vine"}, + {"id": 20823, "synset": "columnea.n.01", "name": "columnea"}, + {"id": 20824, "synset": "episcia.n.01", "name": "episcia"}, + {"id": 20825, "synset": "gloxinia.n.01", "name": "gloxinia"}, + {"id": 20826, "synset": "canterbury_bell.n.01", "name": "Canterbury_bell"}, + {"id": 20827, "synset": "kohleria.n.01", "name": "kohleria"}, + {"id": 20828, "synset": "african_violet.n.01", "name": "African_violet"}, + {"id": 20829, "synset": "streptocarpus.n.01", "name": "streptocarpus"}, + {"id": 20830, "synset": "cape_primrose.n.01", "name": "Cape_primrose"}, + {"id": 20831, "synset": "waterleaf.n.01", "name": "waterleaf"}, + {"id": 20832, "synset": "virginia_waterleaf.n.01", "name": "Virginia_waterleaf"}, + {"id": 20833, "synset": "yellow_bells.n.01", "name": "yellow_bells"}, + {"id": 20834, "synset": "yerba_santa.n.01", "name": "yerba_santa"}, + {"id": 20835, "synset": "nemophila.n.01", "name": "nemophila"}, + {"id": 20836, "synset": "baby_blue-eyes.n.01", "name": "baby_blue-eyes"}, + {"id": 20837, "synset": "five-spot.n.02", "name": "five-spot"}, + {"id": 20838, "synset": "scorpionweed.n.01", "name": "scorpionweed"}, + {"id": 20839, "synset": "california_bluebell.n.02", "name": "California_bluebell"}, + {"id": 20840, "synset": "california_bluebell.n.01", "name": "California_bluebell"}, + {"id": 20841, "synset": "fiddleneck.n.01", "name": "fiddleneck"}, + {"id": 20842, "synset": "fiesta_flower.n.01", "name": "fiesta_flower"}, + {"id": 20843, "synset": "basil_thyme.n.01", "name": "basil_thyme"}, + {"id": 20844, "synset": "giant_hyssop.n.01", "name": "giant_hyssop"}, + {"id": 20845, "synset": "yellow_giant_hyssop.n.01", "name": "yellow_giant_hyssop"}, + {"id": 20846, "synset": "anise_hyssop.n.01", "name": "anise_hyssop"}, + {"id": 20847, "synset": "mexican_hyssop.n.01", "name": "Mexican_hyssop"}, + {"id": 20848, "synset": "bugle.n.02", "name": "bugle"}, + {"id": 20849, "synset": "creeping_bugle.n.01", "name": "creeping_bugle"}, + {"id": 20850, "synset": "erect_bugle.n.01", "name": "erect_bugle"}, + {"id": 20851, "synset": "pyramid_bugle.n.01", "name": "pyramid_bugle"}, + {"id": 20852, "synset": "wood_mint.n.01", "name": "wood_mint"}, + {"id": 20853, "synset": "hairy_wood_mint.n.01", "name": "hairy_wood_mint"}, + {"id": 20854, "synset": "downy_wood_mint.n.01", "name": "downy_wood_mint"}, + {"id": 20855, "synset": "calamint.n.01", "name": "calamint"}, + {"id": 20856, "synset": "common_calamint.n.01", "name": "common_calamint"}, + { + "id": 20857, + "synset": "large-flowered_calamint.n.01", + "name": "large-flowered_calamint", + }, + {"id": 20858, "synset": "lesser_calamint.n.01", "name": "lesser_calamint"}, + {"id": 20859, "synset": "wild_basil.n.01", "name": "wild_basil"}, + {"id": 20860, "synset": "horse_balm.n.01", "name": "horse_balm"}, + {"id": 20861, "synset": "coleus.n.01", "name": "coleus"}, + {"id": 20862, "synset": "country_borage.n.01", "name": "country_borage"}, + {"id": 20863, "synset": "painted_nettle.n.01", "name": "painted_nettle"}, + { + "id": 20864, + "synset": "apalachicola_rosemary.n.01", + "name": "Apalachicola_rosemary", + }, + {"id": 20865, "synset": "dragonhead.n.01", "name": "dragonhead"}, + {"id": 20866, "synset": "elsholtzia.n.01", "name": "elsholtzia"}, + {"id": 20867, "synset": "hemp_nettle.n.01", "name": "hemp_nettle"}, + {"id": 20868, "synset": "ground_ivy.n.01", "name": "ground_ivy"}, + {"id": 20869, "synset": "pennyroyal.n.02", "name": "pennyroyal"}, + {"id": 20870, "synset": "hyssop.n.01", "name": "hyssop"}, + {"id": 20871, "synset": "dead_nettle.n.02", "name": "dead_nettle"}, + {"id": 20872, "synset": "white_dead_nettle.n.01", "name": "white_dead_nettle"}, + {"id": 20873, "synset": "henbit.n.01", "name": "henbit"}, + {"id": 20874, "synset": "english_lavender.n.01", "name": "English_lavender"}, + {"id": 20875, "synset": "french_lavender.n.02", "name": "French_lavender"}, + {"id": 20876, "synset": "spike_lavender.n.01", "name": "spike_lavender"}, + {"id": 20877, "synset": "dagga.n.01", "name": "dagga"}, + {"id": 20878, "synset": "lion's-ear.n.01", "name": "lion's-ear"}, + {"id": 20879, "synset": "motherwort.n.01", "name": "motherwort"}, + {"id": 20880, "synset": "pitcher_sage.n.02", "name": "pitcher_sage"}, + {"id": 20881, "synset": "bugleweed.n.01", "name": "bugleweed"}, + {"id": 20882, "synset": "water_horehound.n.01", "name": "water_horehound"}, + {"id": 20883, "synset": "gipsywort.n.01", "name": "gipsywort"}, + {"id": 20884, "synset": "origanum.n.01", "name": "origanum"}, + {"id": 20885, "synset": "oregano.n.01", "name": "oregano"}, + {"id": 20886, "synset": "sweet_marjoram.n.01", "name": "sweet_marjoram"}, + {"id": 20887, "synset": "horehound.n.01", "name": "horehound"}, + {"id": 20888, "synset": "common_horehound.n.01", "name": "common_horehound"}, + {"id": 20889, "synset": "lemon_balm.n.01", "name": "lemon_balm"}, + {"id": 20890, "synset": "corn_mint.n.01", "name": "corn_mint"}, + {"id": 20891, "synset": "water-mint.n.01", "name": "water-mint"}, + {"id": 20892, "synset": "bergamot_mint.n.02", "name": "bergamot_mint"}, + {"id": 20893, "synset": "horsemint.n.03", "name": "horsemint"}, + {"id": 20894, "synset": "peppermint.n.01", "name": "peppermint"}, + {"id": 20895, "synset": "spearmint.n.01", "name": "spearmint"}, + {"id": 20896, "synset": "apple_mint.n.01", "name": "apple_mint"}, + {"id": 20897, "synset": "pennyroyal.n.01", "name": "pennyroyal"}, + {"id": 20898, "synset": "yerba_buena.n.01", "name": "yerba_buena"}, + {"id": 20899, "synset": "molucca_balm.n.01", "name": "molucca_balm"}, + {"id": 20900, "synset": "monarda.n.01", "name": "monarda"}, + {"id": 20901, "synset": "bee_balm.n.02", "name": "bee_balm"}, + {"id": 20902, "synset": "horsemint.n.02", "name": "horsemint"}, + {"id": 20903, "synset": "bee_balm.n.01", "name": "bee_balm"}, + {"id": 20904, "synset": "lemon_mint.n.01", "name": "lemon_mint"}, + { + "id": 20905, + "synset": "plains_lemon_monarda.n.01", + "name": "plains_lemon_monarda", + }, + {"id": 20906, "synset": "basil_balm.n.01", "name": "basil_balm"}, + {"id": 20907, "synset": "mustang_mint.n.01", "name": "mustang_mint"}, + {"id": 20908, "synset": "catmint.n.01", "name": "catmint"}, + {"id": 20909, "synset": "basil.n.01", "name": "basil"}, + {"id": 20910, "synset": "beefsteak_plant.n.01", "name": "beefsteak_plant"}, + {"id": 20911, "synset": "phlomis.n.01", "name": "phlomis"}, + {"id": 20912, "synset": "jerusalem_sage.n.01", "name": "Jerusalem_sage"}, + {"id": 20913, "synset": "physostegia.n.01", "name": "physostegia"}, + {"id": 20914, "synset": "plectranthus.n.01", "name": "plectranthus"}, + {"id": 20915, "synset": "patchouli.n.01", "name": "patchouli"}, + {"id": 20916, "synset": "self-heal.n.01", "name": "self-heal"}, + {"id": 20917, "synset": "mountain_mint.n.01", "name": "mountain_mint"}, + {"id": 20918, "synset": "rosemary.n.01", "name": "rosemary"}, + {"id": 20919, "synset": "clary_sage.n.01", "name": "clary_sage"}, + {"id": 20920, "synset": "purple_sage.n.01", "name": "purple_sage"}, + {"id": 20921, "synset": "cancerweed.n.01", "name": "cancerweed"}, + {"id": 20922, "synset": "common_sage.n.01", "name": "common_sage"}, + {"id": 20923, "synset": "meadow_clary.n.01", "name": "meadow_clary"}, + {"id": 20924, "synset": "clary.n.01", "name": "clary"}, + {"id": 20925, "synset": "pitcher_sage.n.01", "name": "pitcher_sage"}, + {"id": 20926, "synset": "mexican_mint.n.01", "name": "Mexican_mint"}, + {"id": 20927, "synset": "wild_sage.n.01", "name": "wild_sage"}, + {"id": 20928, "synset": "savory.n.01", "name": "savory"}, + {"id": 20929, "synset": "summer_savory.n.01", "name": "summer_savory"}, + {"id": 20930, "synset": "winter_savory.n.01", "name": "winter_savory"}, + {"id": 20931, "synset": "skullcap.n.02", "name": "skullcap"}, + {"id": 20932, "synset": "blue_pimpernel.n.01", "name": "blue_pimpernel"}, + {"id": 20933, "synset": "hedge_nettle.n.02", "name": "hedge_nettle"}, + {"id": 20934, "synset": "hedge_nettle.n.01", "name": "hedge_nettle"}, + {"id": 20935, "synset": "germander.n.01", "name": "germander"}, + {"id": 20936, "synset": "american_germander.n.01", "name": "American_germander"}, + {"id": 20937, "synset": "cat_thyme.n.01", "name": "cat_thyme"}, + {"id": 20938, "synset": "wood_sage.n.01", "name": "wood_sage"}, + {"id": 20939, "synset": "thyme.n.01", "name": "thyme"}, + {"id": 20940, "synset": "common_thyme.n.01", "name": "common_thyme"}, + {"id": 20941, "synset": "wild_thyme.n.01", "name": "wild_thyme"}, + {"id": 20942, "synset": "blue_curls.n.01", "name": "blue_curls"}, + { + "id": 20943, + "synset": "turpentine_camphor_weed.n.01", + "name": "turpentine_camphor_weed", + }, + {"id": 20944, "synset": "bastard_pennyroyal.n.01", "name": "bastard_pennyroyal"}, + {"id": 20945, "synset": "bladderwort.n.01", "name": "bladderwort"}, + {"id": 20946, "synset": "butterwort.n.01", "name": "butterwort"}, + {"id": 20947, "synset": "genlisea.n.01", "name": "genlisea"}, + {"id": 20948, "synset": "martynia.n.01", "name": "martynia"}, + { + "id": 20949, + "synset": "common_unicorn_plant.n.01", + "name": "common_unicorn_plant", + }, + {"id": 20950, "synset": "sand_devil's_claw.n.01", "name": "sand_devil's_claw"}, + {"id": 20951, "synset": "sweet_unicorn_plant.n.01", "name": "sweet_unicorn_plant"}, + {"id": 20952, "synset": "figwort.n.01", "name": "figwort"}, + {"id": 20953, "synset": "snapdragon.n.01", "name": "snapdragon"}, + {"id": 20954, "synset": "white_snapdragon.n.01", "name": "white_snapdragon"}, + { + "id": 20955, + "synset": "yellow_twining_snapdragon.n.01", + "name": "yellow_twining_snapdragon", + }, + { + "id": 20956, + "synset": "mediterranean_snapdragon.n.01", + "name": "Mediterranean_snapdragon", + }, + {"id": 20957, "synset": "kitten-tails.n.01", "name": "kitten-tails"}, + {"id": 20958, "synset": "alpine_besseya.n.01", "name": "Alpine_besseya"}, + {"id": 20959, "synset": "false_foxglove.n.02", "name": "false_foxglove"}, + {"id": 20960, "synset": "false_foxglove.n.01", "name": "false_foxglove"}, + {"id": 20961, "synset": "calceolaria.n.01", "name": "calceolaria"}, + {"id": 20962, "synset": "indian_paintbrush.n.02", "name": "Indian_paintbrush"}, + {"id": 20963, "synset": "desert_paintbrush.n.01", "name": "desert_paintbrush"}, + { + "id": 20964, + "synset": "giant_red_paintbrush.n.01", + "name": "giant_red_paintbrush", + }, + { + "id": 20965, + "synset": "great_plains_paintbrush.n.01", + "name": "great_plains_paintbrush", + }, + {"id": 20966, "synset": "sulfur_paintbrush.n.01", "name": "sulfur_paintbrush"}, + {"id": 20967, "synset": "shellflower.n.01", "name": "shellflower"}, + { + "id": 20968, + "synset": "maiden_blue-eyed_mary.n.01", + "name": "maiden_blue-eyed_Mary", + }, + {"id": 20969, "synset": "blue-eyed_mary.n.01", "name": "blue-eyed_Mary"}, + {"id": 20970, "synset": "foxglove.n.01", "name": "foxglove"}, + {"id": 20971, "synset": "common_foxglove.n.01", "name": "common_foxglove"}, + {"id": 20972, "synset": "yellow_foxglove.n.01", "name": "yellow_foxglove"}, + {"id": 20973, "synset": "gerardia.n.01", "name": "gerardia"}, + {"id": 20974, "synset": "blue_toadflax.n.01", "name": "blue_toadflax"}, + {"id": 20975, "synset": "toadflax.n.01", "name": "toadflax"}, + { + "id": 20976, + "synset": "golden-beard_penstemon.n.01", + "name": "golden-beard_penstemon", + }, + {"id": 20977, "synset": "scarlet_bugler.n.01", "name": "scarlet_bugler"}, + { + "id": 20978, + "synset": "red_shrubby_penstemon.n.01", + "name": "red_shrubby_penstemon", + }, + { + "id": 20979, + "synset": "platte_river_penstemon.n.01", + "name": "Platte_River_penstemon", + }, + {"id": 20980, "synset": "hot-rock_penstemon.n.01", "name": "hot-rock_penstemon"}, + {"id": 20981, "synset": "jones'_penstemon.n.01", "name": "Jones'_penstemon"}, + {"id": 20982, "synset": "shrubby_penstemon.n.01", "name": "shrubby_penstemon"}, + { + "id": 20983, + "synset": "narrow-leaf_penstemon.n.01", + "name": "narrow-leaf_penstemon", + }, + {"id": 20984, "synset": "balloon_flower.n.01", "name": "balloon_flower"}, + {"id": 20985, "synset": "parry's_penstemon.n.01", "name": "Parry's_penstemon"}, + {"id": 20986, "synset": "rock_penstemon.n.01", "name": "rock_penstemon"}, + {"id": 20987, "synset": "rydberg's_penstemon.n.01", "name": "Rydberg's_penstemon"}, + {"id": 20988, "synset": "cascade_penstemon.n.01", "name": "cascade_penstemon"}, + {"id": 20989, "synset": "whipple's_penstemon.n.01", "name": "Whipple's_penstemon"}, + {"id": 20990, "synset": "moth_mullein.n.01", "name": "moth_mullein"}, + {"id": 20991, "synset": "white_mullein.n.01", "name": "white_mullein"}, + {"id": 20992, "synset": "purple_mullein.n.01", "name": "purple_mullein"}, + {"id": 20993, "synset": "common_mullein.n.01", "name": "common_mullein"}, + {"id": 20994, "synset": "veronica.n.01", "name": "veronica"}, + {"id": 20995, "synset": "field_speedwell.n.01", "name": "field_speedwell"}, + {"id": 20996, "synset": "brooklime.n.02", "name": "brooklime"}, + {"id": 20997, "synset": "corn_speedwell.n.01", "name": "corn_speedwell"}, + {"id": 20998, "synset": "brooklime.n.01", "name": "brooklime"}, + {"id": 20999, "synset": "germander_speedwell.n.01", "name": "germander_speedwell"}, + {"id": 21000, "synset": "water_speedwell.n.01", "name": "water_speedwell"}, + {"id": 21001, "synset": "common_speedwell.n.01", "name": "common_speedwell"}, + {"id": 21002, "synset": "purslane_speedwell.n.01", "name": "purslane_speedwell"}, + { + "id": 21003, + "synset": "thyme-leaved_speedwell.n.01", + "name": "thyme-leaved_speedwell", + }, + {"id": 21004, "synset": "nightshade.n.01", "name": "nightshade"}, + {"id": 21005, "synset": "horse_nettle.n.01", "name": "horse_nettle"}, + {"id": 21006, "synset": "african_holly.n.01", "name": "African_holly"}, + {"id": 21007, "synset": "potato_vine.n.02", "name": "potato_vine"}, + {"id": 21008, "synset": "garden_huckleberry.n.01", "name": "garden_huckleberry"}, + {"id": 21009, "synset": "naranjilla.n.01", "name": "naranjilla"}, + {"id": 21010, "synset": "potato_vine.n.01", "name": "potato_vine"}, + {"id": 21011, "synset": "potato_tree.n.01", "name": "potato_tree"}, + {"id": 21012, "synset": "belladonna.n.01", "name": "belladonna"}, + {"id": 21013, "synset": "bush_violet.n.01", "name": "bush_violet"}, + {"id": 21014, "synset": "lady-of-the-night.n.01", "name": "lady-of-the-night"}, + {"id": 21015, "synset": "angel's_trumpet.n.02", "name": "angel's_trumpet"}, + {"id": 21016, "synset": "angel's_trumpet.n.01", "name": "angel's_trumpet"}, + {"id": 21017, "synset": "red_angel's_trumpet.n.01", "name": "red_angel's_trumpet"}, + {"id": 21018, "synset": "cone_pepper.n.01", "name": "cone_pepper"}, + {"id": 21019, "synset": "bird_pepper.n.01", "name": "bird_pepper"}, + {"id": 21020, "synset": "day_jessamine.n.01", "name": "day_jessamine"}, + {"id": 21021, "synset": "night_jasmine.n.01", "name": "night_jasmine"}, + {"id": 21022, "synset": "tree_tomato.n.01", "name": "tree_tomato"}, + {"id": 21023, "synset": "thorn_apple.n.01", "name": "thorn_apple"}, + {"id": 21024, "synset": "jimsonweed.n.01", "name": "jimsonweed"}, + {"id": 21025, "synset": "pichi.n.01", "name": "pichi"}, + {"id": 21026, "synset": "henbane.n.01", "name": "henbane"}, + {"id": 21027, "synset": "egyptian_henbane.n.01", "name": "Egyptian_henbane"}, + {"id": 21028, "synset": "matrimony_vine.n.01", "name": "matrimony_vine"}, + { + "id": 21029, + "synset": "common_matrimony_vine.n.01", + "name": "common_matrimony_vine", + }, + {"id": 21030, "synset": "christmasberry.n.01", "name": "Christmasberry"}, + {"id": 21031, "synset": "plum_tomato.n.01", "name": "plum_tomato"}, + {"id": 21032, "synset": "mandrake.n.02", "name": "mandrake"}, + {"id": 21033, "synset": "mandrake_root.n.01", "name": "mandrake_root"}, + {"id": 21034, "synset": "apple_of_peru.n.01", "name": "apple_of_Peru"}, + {"id": 21035, "synset": "flowering_tobacco.n.01", "name": "flowering_tobacco"}, + {"id": 21036, "synset": "common_tobacco.n.01", "name": "common_tobacco"}, + {"id": 21037, "synset": "wild_tobacco.n.01", "name": "wild_tobacco"}, + {"id": 21038, "synset": "cupflower.n.02", "name": "cupflower"}, + {"id": 21039, "synset": "whitecup.n.01", "name": "whitecup"}, + {"id": 21040, "synset": "petunia.n.01", "name": "petunia"}, + {"id": 21041, "synset": "large_white_petunia.n.01", "name": "large_white_petunia"}, + { + "id": 21042, + "synset": "violet-flowered_petunia.n.01", + "name": "violet-flowered_petunia", + }, + {"id": 21043, "synset": "hybrid_petunia.n.01", "name": "hybrid_petunia"}, + {"id": 21044, "synset": "cape_gooseberry.n.01", "name": "cape_gooseberry"}, + {"id": 21045, "synset": "strawberry_tomato.n.01", "name": "strawberry_tomato"}, + {"id": 21046, "synset": "tomatillo.n.02", "name": "tomatillo"}, + {"id": 21047, "synset": "tomatillo.n.01", "name": "tomatillo"}, + {"id": 21048, "synset": "yellow_henbane.n.01", "name": "yellow_henbane"}, + {"id": 21049, "synset": "cock's_eggs.n.01", "name": "cock's_eggs"}, + {"id": 21050, "synset": "salpiglossis.n.01", "name": "salpiglossis"}, + {"id": 21051, "synset": "painted_tongue.n.01", "name": "painted_tongue"}, + {"id": 21052, "synset": "butterfly_flower.n.01", "name": "butterfly_flower"}, + {"id": 21053, "synset": "scopolia_carniolica.n.01", "name": "Scopolia_carniolica"}, + {"id": 21054, "synset": "chalice_vine.n.01", "name": "chalice_vine"}, + {"id": 21055, "synset": "verbena.n.01", "name": "verbena"}, + {"id": 21056, "synset": "lantana.n.01", "name": "lantana"}, + {"id": 21057, "synset": "black_mangrove.n.02", "name": "black_mangrove"}, + {"id": 21058, "synset": "white_mangrove.n.01", "name": "white_mangrove"}, + {"id": 21059, "synset": "black_mangrove.n.01", "name": "black_mangrove"}, + {"id": 21060, "synset": "teak.n.02", "name": "teak"}, + {"id": 21061, "synset": "spurge.n.01", "name": "spurge"}, + {"id": 21062, "synset": "sun_spurge.n.01", "name": "sun_spurge"}, + {"id": 21063, "synset": "petty_spurge.n.01", "name": "petty_spurge"}, + {"id": 21064, "synset": "medusa's_head.n.01", "name": "medusa's_head"}, + {"id": 21065, "synset": "wild_spurge.n.01", "name": "wild_spurge"}, + { + "id": 21066, + "synset": "snow-on-the-mountain.n.01", + "name": "snow-on-the-mountain", + }, + {"id": 21067, "synset": "cypress_spurge.n.01", "name": "cypress_spurge"}, + {"id": 21068, "synset": "leafy_spurge.n.01", "name": "leafy_spurge"}, + {"id": 21069, "synset": "hairy_spurge.n.01", "name": "hairy_spurge"}, + {"id": 21070, "synset": "poinsettia.n.01", "name": "poinsettia"}, + {"id": 21071, "synset": "japanese_poinsettia.n.01", "name": "Japanese_poinsettia"}, + { + "id": 21072, + "synset": "fire-on-the-mountain.n.01", + "name": "fire-on-the-mountain", + }, + {"id": 21073, "synset": "wood_spurge.n.01", "name": "wood_spurge"}, + {"id": 21074, "synset": "dwarf_spurge.n.01", "name": "dwarf_spurge"}, + {"id": 21075, "synset": "scarlet_plume.n.01", "name": "scarlet_plume"}, + {"id": 21076, "synset": "naboom.n.01", "name": "naboom"}, + {"id": 21077, "synset": "crown_of_thorns.n.02", "name": "crown_of_thorns"}, + {"id": 21078, "synset": "toothed_spurge.n.01", "name": "toothed_spurge"}, + { + "id": 21079, + "synset": "three-seeded_mercury.n.01", + "name": "three-seeded_mercury", + }, + {"id": 21080, "synset": "croton.n.02", "name": "croton"}, + {"id": 21081, "synset": "cascarilla.n.01", "name": "cascarilla"}, + {"id": 21082, "synset": "cascarilla_bark.n.01", "name": "cascarilla_bark"}, + {"id": 21083, "synset": "castor-oil_plant.n.01", "name": "castor-oil_plant"}, + {"id": 21084, "synset": "spurge_nettle.n.01", "name": "spurge_nettle"}, + {"id": 21085, "synset": "physic_nut.n.01", "name": "physic_nut"}, + {"id": 21086, "synset": "para_rubber_tree.n.01", "name": "Para_rubber_tree"}, + {"id": 21087, "synset": "cassava.n.03", "name": "cassava"}, + {"id": 21088, "synset": "bitter_cassava.n.01", "name": "bitter_cassava"}, + {"id": 21089, "synset": "cassava.n.02", "name": "cassava"}, + {"id": 21090, "synset": "sweet_cassava.n.01", "name": "sweet_cassava"}, + {"id": 21091, "synset": "candlenut.n.01", "name": "candlenut"}, + {"id": 21092, "synset": "tung_tree.n.01", "name": "tung_tree"}, + {"id": 21093, "synset": "slipper_spurge.n.01", "name": "slipper_spurge"}, + {"id": 21094, "synset": "candelilla.n.01", "name": "candelilla"}, + {"id": 21095, "synset": "jewbush.n.01", "name": "Jewbush"}, + {"id": 21096, "synset": "jumping_bean.n.01", "name": "jumping_bean"}, + {"id": 21097, "synset": "camellia.n.01", "name": "camellia"}, + {"id": 21098, "synset": "japonica.n.01", "name": "japonica"}, + {"id": 21099, "synset": "umbellifer.n.01", "name": "umbellifer"}, + {"id": 21100, "synset": "wild_parsley.n.01", "name": "wild_parsley"}, + {"id": 21101, "synset": "fool's_parsley.n.01", "name": "fool's_parsley"}, + {"id": 21102, "synset": "dill.n.01", "name": "dill"}, + {"id": 21103, "synset": "angelica.n.01", "name": "angelica"}, + {"id": 21104, "synset": "garden_angelica.n.01", "name": "garden_angelica"}, + {"id": 21105, "synset": "wild_angelica.n.01", "name": "wild_angelica"}, + {"id": 21106, "synset": "chervil.n.01", "name": "chervil"}, + {"id": 21107, "synset": "cow_parsley.n.01", "name": "cow_parsley"}, + {"id": 21108, "synset": "wild_celery.n.01", "name": "wild_celery"}, + {"id": 21109, "synset": "astrantia.n.01", "name": "astrantia"}, + {"id": 21110, "synset": "greater_masterwort.n.01", "name": "greater_masterwort"}, + {"id": 21111, "synset": "caraway.n.01", "name": "caraway"}, + {"id": 21112, "synset": "whorled_caraway.n.01", "name": "whorled_caraway"}, + {"id": 21113, "synset": "water_hemlock.n.01", "name": "water_hemlock"}, + {"id": 21114, "synset": "spotted_cowbane.n.01", "name": "spotted_cowbane"}, + {"id": 21115, "synset": "hemlock.n.02", "name": "hemlock"}, + {"id": 21116, "synset": "earthnut.n.02", "name": "earthnut"}, + {"id": 21117, "synset": "cumin.n.01", "name": "cumin"}, + {"id": 21118, "synset": "wild_carrot.n.01", "name": "wild_carrot"}, + {"id": 21119, "synset": "eryngo.n.01", "name": "eryngo"}, + {"id": 21120, "synset": "sea_holly.n.01", "name": "sea_holly"}, + {"id": 21121, "synset": "button_snakeroot.n.02", "name": "button_snakeroot"}, + {"id": 21122, "synset": "rattlesnake_master.n.01", "name": "rattlesnake_master"}, + {"id": 21123, "synset": "fennel.n.01", "name": "fennel"}, + {"id": 21124, "synset": "common_fennel.n.01", "name": "common_fennel"}, + {"id": 21125, "synset": "florence_fennel.n.01", "name": "Florence_fennel"}, + {"id": 21126, "synset": "cow_parsnip.n.01", "name": "cow_parsnip"}, + {"id": 21127, "synset": "lovage.n.01", "name": "lovage"}, + {"id": 21128, "synset": "sweet_cicely.n.01", "name": "sweet_cicely"}, + {"id": 21129, "synset": "water_fennel.n.01", "name": "water_fennel"}, + {"id": 21130, "synset": "parsnip.n.02", "name": "parsnip"}, + {"id": 21131, "synset": "cultivated_parsnip.n.01", "name": "cultivated_parsnip"}, + {"id": 21132, "synset": "wild_parsnip.n.01", "name": "wild_parsnip"}, + {"id": 21133, "synset": "parsley.n.01", "name": "parsley"}, + {"id": 21134, "synset": "italian_parsley.n.01", "name": "Italian_parsley"}, + {"id": 21135, "synset": "hamburg_parsley.n.01", "name": "Hamburg_parsley"}, + {"id": 21136, "synset": "anise.n.01", "name": "anise"}, + {"id": 21137, "synset": "sanicle.n.01", "name": "sanicle"}, + {"id": 21138, "synset": "purple_sanicle.n.01", "name": "purple_sanicle"}, + {"id": 21139, "synset": "european_sanicle.n.01", "name": "European_sanicle"}, + {"id": 21140, "synset": "water_parsnip.n.01", "name": "water_parsnip"}, + { + "id": 21141, + "synset": "greater_water_parsnip.n.01", + "name": "greater_water_parsnip", + }, + {"id": 21142, "synset": "skirret.n.01", "name": "skirret"}, + {"id": 21143, "synset": "dogwood.n.01", "name": "dogwood"}, + { + "id": 21144, + "synset": "common_white_dogwood.n.01", + "name": "common_white_dogwood", + }, + {"id": 21145, "synset": "red_osier.n.01", "name": "red_osier"}, + {"id": 21146, "synset": "silky_dogwood.n.02", "name": "silky_dogwood"}, + {"id": 21147, "synset": "silky_cornel.n.01", "name": "silky_cornel"}, + { + "id": 21148, + "synset": "common_european_dogwood.n.01", + "name": "common_European_dogwood", + }, + {"id": 21149, "synset": "bunchberry.n.01", "name": "bunchberry"}, + {"id": 21150, "synset": "cornelian_cherry.n.01", "name": "cornelian_cherry"}, + {"id": 21151, "synset": "puka.n.01", "name": "puka"}, + {"id": 21152, "synset": "kapuka.n.01", "name": "kapuka"}, + {"id": 21153, "synset": "valerian.n.01", "name": "valerian"}, + {"id": 21154, "synset": "common_valerian.n.01", "name": "common_valerian"}, + {"id": 21155, "synset": "common_corn_salad.n.01", "name": "common_corn_salad"}, + {"id": 21156, "synset": "red_valerian.n.01", "name": "red_valerian"}, + {"id": 21157, "synset": "filmy_fern.n.02", "name": "filmy_fern"}, + {"id": 21158, "synset": "bristle_fern.n.01", "name": "bristle_fern"}, + { + "id": 21159, + "synset": "hare's-foot_bristle_fern.n.01", + "name": "hare's-foot_bristle_fern", + }, + {"id": 21160, "synset": "killarney_fern.n.01", "name": "Killarney_fern"}, + {"id": 21161, "synset": "kidney_fern.n.01", "name": "kidney_fern"}, + {"id": 21162, "synset": "flowering_fern.n.02", "name": "flowering_fern"}, + {"id": 21163, "synset": "royal_fern.n.01", "name": "royal_fern"}, + {"id": 21164, "synset": "interrupted_fern.n.01", "name": "interrupted_fern"}, + {"id": 21165, "synset": "crape_fern.n.01", "name": "crape_fern"}, + {"id": 21166, "synset": "crepe_fern.n.01", "name": "crepe_fern"}, + {"id": 21167, "synset": "curly_grass.n.01", "name": "curly_grass"}, + {"id": 21168, "synset": "pine_fern.n.01", "name": "pine_fern"}, + {"id": 21169, "synset": "climbing_fern.n.01", "name": "climbing_fern"}, + {"id": 21170, "synset": "creeping_fern.n.01", "name": "creeping_fern"}, + {"id": 21171, "synset": "climbing_maidenhair.n.01", "name": "climbing_maidenhair"}, + {"id": 21172, "synset": "scented_fern.n.02", "name": "scented_fern"}, + {"id": 21173, "synset": "clover_fern.n.01", "name": "clover_fern"}, + {"id": 21174, "synset": "nardoo.n.01", "name": "nardoo"}, + {"id": 21175, "synset": "water_clover.n.01", "name": "water_clover"}, + {"id": 21176, "synset": "pillwort.n.01", "name": "pillwort"}, + {"id": 21177, "synset": "regnellidium.n.01", "name": "regnellidium"}, + {"id": 21178, "synset": "floating-moss.n.01", "name": "floating-moss"}, + {"id": 21179, "synset": "mosquito_fern.n.01", "name": "mosquito_fern"}, + {"id": 21180, "synset": "adder's_tongue.n.01", "name": "adder's_tongue"}, + {"id": 21181, "synset": "ribbon_fern.n.03", "name": "ribbon_fern"}, + {"id": 21182, "synset": "grape_fern.n.01", "name": "grape_fern"}, + { + "id": 21183, + "synset": "daisyleaf_grape_fern.n.01", + "name": "daisyleaf_grape_fern", + }, + {"id": 21184, "synset": "leathery_grape_fern.n.01", "name": "leathery_grape_fern"}, + {"id": 21185, "synset": "rattlesnake_fern.n.01", "name": "rattlesnake_fern"}, + {"id": 21186, "synset": "flowering_fern.n.01", "name": "flowering_fern"}, + {"id": 21187, "synset": "powdery_mildew.n.01", "name": "powdery_mildew"}, + {"id": 21188, "synset": "dutch_elm_fungus.n.01", "name": "Dutch_elm_fungus"}, + {"id": 21189, "synset": "ergot.n.02", "name": "ergot"}, + {"id": 21190, "synset": "rye_ergot.n.01", "name": "rye_ergot"}, + { + "id": 21191, + "synset": "black_root_rot_fungus.n.01", + "name": "black_root_rot_fungus", + }, + {"id": 21192, "synset": "dead-man's-fingers.n.01", "name": "dead-man's-fingers"}, + {"id": 21193, "synset": "sclerotinia.n.01", "name": "sclerotinia"}, + {"id": 21194, "synset": "brown_cup.n.01", "name": "brown_cup"}, + {"id": 21195, "synset": "earthball.n.01", "name": "earthball"}, + { + "id": 21196, + "synset": "scleroderma_citrinum.n.01", + "name": "Scleroderma_citrinum", + }, + { + "id": 21197, + "synset": "scleroderma_flavidium.n.01", + "name": "Scleroderma_flavidium", + }, + {"id": 21198, "synset": "scleroderma_bovista.n.01", "name": "Scleroderma_bovista"}, + {"id": 21199, "synset": "podaxaceae.n.01", "name": "Podaxaceae"}, + {"id": 21200, "synset": "stalked_puffball.n.02", "name": "stalked_puffball"}, + {"id": 21201, "synset": "stalked_puffball.n.01", "name": "stalked_puffball"}, + {"id": 21202, "synset": "false_truffle.n.01", "name": "false_truffle"}, + { + "id": 21203, + "synset": "rhizopogon_idahoensis.n.01", + "name": "Rhizopogon_idahoensis", + }, + { + "id": 21204, + "synset": "truncocolumella_citrina.n.01", + "name": "Truncocolumella_citrina", + }, + {"id": 21205, "synset": "mucor.n.01", "name": "mucor"}, + {"id": 21206, "synset": "rhizopus.n.01", "name": "rhizopus"}, + {"id": 21207, "synset": "bread_mold.n.01", "name": "bread_mold"}, + {"id": 21208, "synset": "slime_mold.n.01", "name": "slime_mold"}, + {"id": 21209, "synset": "true_slime_mold.n.01", "name": "true_slime_mold"}, + {"id": 21210, "synset": "cellular_slime_mold.n.01", "name": "cellular_slime_mold"}, + {"id": 21211, "synset": "dictostylium.n.01", "name": "dictostylium"}, + {"id": 21212, "synset": "pond-scum_parasite.n.01", "name": "pond-scum_parasite"}, + {"id": 21213, "synset": "potato_wart_fungus.n.01", "name": "potato_wart_fungus"}, + {"id": 21214, "synset": "white_fungus.n.01", "name": "white_fungus"}, + {"id": 21215, "synset": "water_mold.n.01", "name": "water_mold"}, + {"id": 21216, "synset": "downy_mildew.n.01", "name": "downy_mildew"}, + {"id": 21217, "synset": "blue_mold_fungus.n.01", "name": "blue_mold_fungus"}, + {"id": 21218, "synset": "onion_mildew.n.01", "name": "onion_mildew"}, + {"id": 21219, "synset": "tobacco_mildew.n.01", "name": "tobacco_mildew"}, + {"id": 21220, "synset": "white_rust.n.01", "name": "white_rust"}, + {"id": 21221, "synset": "pythium.n.01", "name": "pythium"}, + {"id": 21222, "synset": "damping_off_fungus.n.01", "name": "damping_off_fungus"}, + { + "id": 21223, + "synset": "phytophthora_citrophthora.n.01", + "name": "Phytophthora_citrophthora", + }, + { + "id": 21224, + "synset": "phytophthora_infestans.n.01", + "name": "Phytophthora_infestans", + }, + {"id": 21225, "synset": "clubroot_fungus.n.01", "name": "clubroot_fungus"}, + {"id": 21226, "synset": "geglossaceae.n.01", "name": "Geglossaceae"}, + {"id": 21227, "synset": "sarcosomataceae.n.01", "name": "Sarcosomataceae"}, + {"id": 21228, "synset": "rufous_rubber_cup.n.01", "name": "Rufous_rubber_cup"}, + {"id": 21229, "synset": "devil's_cigar.n.01", "name": "devil's_cigar"}, + {"id": 21230, "synset": "devil's_urn.n.01", "name": "devil's_urn"}, + {"id": 21231, "synset": "truffle.n.01", "name": "truffle"}, + {"id": 21232, "synset": "club_fungus.n.01", "name": "club_fungus"}, + {"id": 21233, "synset": "coral_fungus.n.01", "name": "coral_fungus"}, + {"id": 21234, "synset": "tooth_fungus.n.01", "name": "tooth_fungus"}, + {"id": 21235, "synset": "lichen.n.02", "name": "lichen"}, + {"id": 21236, "synset": "ascolichen.n.01", "name": "ascolichen"}, + {"id": 21237, "synset": "basidiolichen.n.01", "name": "basidiolichen"}, + {"id": 21238, "synset": "lecanora.n.01", "name": "lecanora"}, + {"id": 21239, "synset": "manna_lichen.n.01", "name": "manna_lichen"}, + {"id": 21240, "synset": "archil.n.02", "name": "archil"}, + {"id": 21241, "synset": "roccella.n.01", "name": "roccella"}, + {"id": 21242, "synset": "beard_lichen.n.01", "name": "beard_lichen"}, + {"id": 21243, "synset": "horsehair_lichen.n.01", "name": "horsehair_lichen"}, + {"id": 21244, "synset": "reindeer_moss.n.01", "name": "reindeer_moss"}, + {"id": 21245, "synset": "crottle.n.01", "name": "crottle"}, + {"id": 21246, "synset": "iceland_moss.n.01", "name": "Iceland_moss"}, + {"id": 21247, "synset": "fungus.n.01", "name": "fungus"}, + {"id": 21248, "synset": "promycelium.n.01", "name": "promycelium"}, + {"id": 21249, "synset": "true_fungus.n.01", "name": "true_fungus"}, + {"id": 21250, "synset": "basidiomycete.n.01", "name": "basidiomycete"}, + {"id": 21251, "synset": "mushroom.n.03", "name": "mushroom"}, + {"id": 21252, "synset": "agaric.n.02", "name": "agaric"}, + {"id": 21253, "synset": "mushroom.n.01", "name": "mushroom"}, + {"id": 21254, "synset": "toadstool.n.01", "name": "toadstool"}, + {"id": 21255, "synset": "horse_mushroom.n.01", "name": "horse_mushroom"}, + {"id": 21256, "synset": "meadow_mushroom.n.01", "name": "meadow_mushroom"}, + {"id": 21257, "synset": "shiitake.n.01", "name": "shiitake"}, + {"id": 21258, "synset": "scaly_lentinus.n.01", "name": "scaly_lentinus"}, + {"id": 21259, "synset": "royal_agaric.n.01", "name": "royal_agaric"}, + {"id": 21260, "synset": "false_deathcap.n.01", "name": "false_deathcap"}, + {"id": 21261, "synset": "fly_agaric.n.01", "name": "fly_agaric"}, + {"id": 21262, "synset": "death_cap.n.01", "name": "death_cap"}, + {"id": 21263, "synset": "blushing_mushroom.n.01", "name": "blushing_mushroom"}, + {"id": 21264, "synset": "destroying_angel.n.01", "name": "destroying_angel"}, + {"id": 21265, "synset": "chanterelle.n.01", "name": "chanterelle"}, + { + "id": 21266, + "synset": "floccose_chanterelle.n.01", + "name": "floccose_chanterelle", + }, + {"id": 21267, "synset": "pig's_ears.n.01", "name": "pig's_ears"}, + { + "id": 21268, + "synset": "cinnabar_chanterelle.n.01", + "name": "cinnabar_chanterelle", + }, + { + "id": 21269, + "synset": "jack-o-lantern_fungus.n.01", + "name": "jack-o-lantern_fungus", + }, + {"id": 21270, "synset": "inky_cap.n.01", "name": "inky_cap"}, + {"id": 21271, "synset": "shaggymane.n.01", "name": "shaggymane"}, + {"id": 21272, "synset": "milkcap.n.01", "name": "milkcap"}, + {"id": 21273, "synset": "fairy-ring_mushroom.n.01", "name": "fairy-ring_mushroom"}, + {"id": 21274, "synset": "fairy_ring.n.01", "name": "fairy_ring"}, + {"id": 21275, "synset": "oyster_mushroom.n.01", "name": "oyster_mushroom"}, + {"id": 21276, "synset": "olive-tree_agaric.n.01", "name": "olive-tree_agaric"}, + { + "id": 21277, + "synset": "pholiota_astragalina.n.01", + "name": "Pholiota_astragalina", + }, + {"id": 21278, "synset": "pholiota_aurea.n.01", "name": "Pholiota_aurea"}, + {"id": 21279, "synset": "pholiota_destruens.n.01", "name": "Pholiota_destruens"}, + {"id": 21280, "synset": "pholiota_flammans.n.01", "name": "Pholiota_flammans"}, + {"id": 21281, "synset": "pholiota_flavida.n.01", "name": "Pholiota_flavida"}, + {"id": 21282, "synset": "nameko.n.01", "name": "nameko"}, + { + "id": 21283, + "synset": "pholiota_squarrosa-adiposa.n.01", + "name": "Pholiota_squarrosa-adiposa", + }, + {"id": 21284, "synset": "pholiota_squarrosa.n.01", "name": "Pholiota_squarrosa"}, + { + "id": 21285, + "synset": "pholiota_squarrosoides.n.01", + "name": "Pholiota_squarrosoides", + }, + {"id": 21286, "synset": "stropharia_ambigua.n.01", "name": "Stropharia_ambigua"}, + { + "id": 21287, + "synset": "stropharia_hornemannii.n.01", + "name": "Stropharia_hornemannii", + }, + { + "id": 21288, + "synset": "stropharia_rugoso-annulata.n.01", + "name": "Stropharia_rugoso-annulata", + }, + {"id": 21289, "synset": "gill_fungus.n.01", "name": "gill_fungus"}, + {"id": 21290, "synset": "entoloma_lividum.n.01", "name": "Entoloma_lividum"}, + {"id": 21291, "synset": "entoloma_aprile.n.01", "name": "Entoloma_aprile"}, + { + "id": 21292, + "synset": "chlorophyllum_molybdites.n.01", + "name": "Chlorophyllum_molybdites", + }, + {"id": 21293, "synset": "lepiota.n.01", "name": "lepiota"}, + {"id": 21294, "synset": "parasol_mushroom.n.01", "name": "parasol_mushroom"}, + {"id": 21295, "synset": "poisonous_parasol.n.01", "name": "poisonous_parasol"}, + {"id": 21296, "synset": "lepiota_naucina.n.01", "name": "Lepiota_naucina"}, + {"id": 21297, "synset": "lepiota_rhacodes.n.01", "name": "Lepiota_rhacodes"}, + {"id": 21298, "synset": "american_parasol.n.01", "name": "American_parasol"}, + {"id": 21299, "synset": "lepiota_rubrotincta.n.01", "name": "Lepiota_rubrotincta"}, + {"id": 21300, "synset": "lepiota_clypeolaria.n.01", "name": "Lepiota_clypeolaria"}, + {"id": 21301, "synset": "onion_stem.n.01", "name": "onion_stem"}, + {"id": 21302, "synset": "pink_disease_fungus.n.01", "name": "pink_disease_fungus"}, + {"id": 21303, "synset": "bottom_rot_fungus.n.01", "name": "bottom_rot_fungus"}, + {"id": 21304, "synset": "potato_fungus.n.01", "name": "potato_fungus"}, + {"id": 21305, "synset": "coffee_fungus.n.01", "name": "coffee_fungus"}, + {"id": 21306, "synset": "blewits.n.01", "name": "blewits"}, + {"id": 21307, "synset": "sandy_mushroom.n.01", "name": "sandy_mushroom"}, + { + "id": 21308, + "synset": "tricholoma_pessundatum.n.01", + "name": "Tricholoma_pessundatum", + }, + { + "id": 21309, + "synset": "tricholoma_sejunctum.n.01", + "name": "Tricholoma_sejunctum", + }, + {"id": 21310, "synset": "man-on-a-horse.n.01", "name": "man-on-a-horse"}, + {"id": 21311, "synset": "tricholoma_venenata.n.01", "name": "Tricholoma_venenata"}, + {"id": 21312, "synset": "tricholoma_pardinum.n.01", "name": "Tricholoma_pardinum"}, + {"id": 21313, "synset": "tricholoma_vaccinum.n.01", "name": "Tricholoma_vaccinum"}, + { + "id": 21314, + "synset": "tricholoma_aurantium.n.01", + "name": "Tricholoma_aurantium", + }, + {"id": 21315, "synset": "volvaria_bombycina.n.01", "name": "Volvaria_bombycina"}, + { + "id": 21316, + "synset": "pluteus_aurantiorugosus.n.01", + "name": "Pluteus_aurantiorugosus", + }, + {"id": 21317, "synset": "pluteus_magnus.n.01", "name": "Pluteus_magnus"}, + {"id": 21318, "synset": "deer_mushroom.n.01", "name": "deer_mushroom"}, + {"id": 21319, "synset": "straw_mushroom.n.01", "name": "straw_mushroom"}, + { + "id": 21320, + "synset": "volvariella_bombycina.n.01", + "name": "Volvariella_bombycina", + }, + {"id": 21321, "synset": "clitocybe_clavipes.n.01", "name": "Clitocybe_clavipes"}, + {"id": 21322, "synset": "clitocybe_dealbata.n.01", "name": "Clitocybe_dealbata"}, + {"id": 21323, "synset": "clitocybe_inornata.n.01", "name": "Clitocybe_inornata"}, + {"id": 21324, "synset": "clitocybe_robusta.n.01", "name": "Clitocybe_robusta"}, + {"id": 21325, "synset": "clitocybe_irina.n.01", "name": "Clitocybe_irina"}, + { + "id": 21326, + "synset": "clitocybe_subconnexa.n.01", + "name": "Clitocybe_subconnexa", + }, + {"id": 21327, "synset": "winter_mushroom.n.01", "name": "winter_mushroom"}, + {"id": 21328, "synset": "mycelium.n.01", "name": "mycelium"}, + {"id": 21329, "synset": "sclerotium.n.02", "name": "sclerotium"}, + {"id": 21330, "synset": "sac_fungus.n.01", "name": "sac_fungus"}, + {"id": 21331, "synset": "ascomycete.n.01", "name": "ascomycete"}, + {"id": 21332, "synset": "clavicipitaceae.n.01", "name": "Clavicipitaceae"}, + {"id": 21333, "synset": "grainy_club.n.01", "name": "grainy_club"}, + {"id": 21334, "synset": "yeast.n.02", "name": "yeast"}, + {"id": 21335, "synset": "baker's_yeast.n.01", "name": "baker's_yeast"}, + {"id": 21336, "synset": "wine-maker's_yeast.n.01", "name": "wine-maker's_yeast"}, + { + "id": 21337, + "synset": "aspergillus_fumigatus.n.01", + "name": "Aspergillus_fumigatus", + }, + { + "id": 21338, + "synset": "brown_root_rot_fungus.n.01", + "name": "brown_root_rot_fungus", + }, + {"id": 21339, "synset": "discomycete.n.01", "name": "discomycete"}, + {"id": 21340, "synset": "leotia_lubrica.n.01", "name": "Leotia_lubrica"}, + {"id": 21341, "synset": "mitrula_elegans.n.01", "name": "Mitrula_elegans"}, + { + "id": 21342, + "synset": "sarcoscypha_coccinea.n.01", + "name": "Sarcoscypha_coccinea", + }, + {"id": 21343, "synset": "caloscypha_fulgens.n.01", "name": "Caloscypha_fulgens"}, + {"id": 21344, "synset": "aleuria_aurantia.n.01", "name": "Aleuria_aurantia"}, + {"id": 21345, "synset": "elf_cup.n.01", "name": "elf_cup"}, + {"id": 21346, "synset": "peziza_domicilina.n.01", "name": "Peziza_domicilina"}, + {"id": 21347, "synset": "blood_cup.n.01", "name": "blood_cup"}, + {"id": 21348, "synset": "urnula_craterium.n.01", "name": "Urnula_craterium"}, + {"id": 21349, "synset": "galiella_rufa.n.01", "name": "Galiella_rufa"}, + {"id": 21350, "synset": "jafnea_semitosta.n.01", "name": "Jafnea_semitosta"}, + {"id": 21351, "synset": "morel.n.01", "name": "morel"}, + {"id": 21352, "synset": "common_morel.n.01", "name": "common_morel"}, + {"id": 21353, "synset": "disciotis_venosa.n.01", "name": "Disciotis_venosa"}, + {"id": 21354, "synset": "verpa.n.01", "name": "Verpa"}, + {"id": 21355, "synset": "verpa_bohemica.n.01", "name": "Verpa_bohemica"}, + {"id": 21356, "synset": "verpa_conica.n.01", "name": "Verpa_conica"}, + {"id": 21357, "synset": "black_morel.n.01", "name": "black_morel"}, + {"id": 21358, "synset": "morchella_crassipes.n.01", "name": "Morchella_crassipes"}, + { + "id": 21359, + "synset": "morchella_semilibera.n.01", + "name": "Morchella_semilibera", + }, + {"id": 21360, "synset": "wynnea_americana.n.01", "name": "Wynnea_americana"}, + {"id": 21361, "synset": "wynnea_sparassoides.n.01", "name": "Wynnea_sparassoides"}, + {"id": 21362, "synset": "false_morel.n.01", "name": "false_morel"}, + {"id": 21363, "synset": "lorchel.n.01", "name": "lorchel"}, + {"id": 21364, "synset": "helvella.n.01", "name": "helvella"}, + {"id": 21365, "synset": "helvella_crispa.n.01", "name": "Helvella_crispa"}, + {"id": 21366, "synset": "helvella_acetabulum.n.01", "name": "Helvella_acetabulum"}, + {"id": 21367, "synset": "helvella_sulcata.n.01", "name": "Helvella_sulcata"}, + {"id": 21368, "synset": "discina.n.01", "name": "discina"}, + {"id": 21369, "synset": "gyromitra.n.01", "name": "gyromitra"}, + { + "id": 21370, + "synset": "gyromitra_californica.n.01", + "name": "Gyromitra_californica", + }, + { + "id": 21371, + "synset": "gyromitra_sphaerospora.n.01", + "name": "Gyromitra_sphaerospora", + }, + {"id": 21372, "synset": "gyromitra_esculenta.n.01", "name": "Gyromitra_esculenta"}, + {"id": 21373, "synset": "gyromitra_infula.n.01", "name": "Gyromitra_infula"}, + { + "id": 21374, + "synset": "gyromitra_fastigiata.n.01", + "name": "Gyromitra_fastigiata", + }, + {"id": 21375, "synset": "gyromitra_gigas.n.01", "name": "Gyromitra_gigas"}, + {"id": 21376, "synset": "gasteromycete.n.01", "name": "gasteromycete"}, + {"id": 21377, "synset": "stinkhorn.n.01", "name": "stinkhorn"}, + {"id": 21378, "synset": "common_stinkhorn.n.01", "name": "common_stinkhorn"}, + {"id": 21379, "synset": "phallus_ravenelii.n.01", "name": "Phallus_ravenelii"}, + {"id": 21380, "synset": "dog_stinkhorn.n.01", "name": "dog_stinkhorn"}, + {"id": 21381, "synset": "calostoma_lutescens.n.01", "name": "Calostoma_lutescens"}, + { + "id": 21382, + "synset": "calostoma_cinnabarina.n.01", + "name": "Calostoma_cinnabarina", + }, + {"id": 21383, "synset": "calostoma_ravenelii.n.01", "name": "Calostoma_ravenelii"}, + {"id": 21384, "synset": "stinky_squid.n.01", "name": "stinky_squid"}, + {"id": 21385, "synset": "puffball.n.01", "name": "puffball"}, + {"id": 21386, "synset": "giant_puffball.n.01", "name": "giant_puffball"}, + {"id": 21387, "synset": "earthstar.n.01", "name": "earthstar"}, + {"id": 21388, "synset": "geastrum_coronatum.n.01", "name": "Geastrum_coronatum"}, + { + "id": 21389, + "synset": "radiigera_fuscogleba.n.01", + "name": "Radiigera_fuscogleba", + }, + {"id": 21390, "synset": "astreus_pteridis.n.01", "name": "Astreus_pteridis"}, + { + "id": 21391, + "synset": "astreus_hygrometricus.n.01", + "name": "Astreus_hygrometricus", + }, + {"id": 21392, "synset": "bird's-nest_fungus.n.01", "name": "bird's-nest_fungus"}, + { + "id": 21393, + "synset": "gastrocybe_lateritia.n.01", + "name": "Gastrocybe_lateritia", + }, + { + "id": 21394, + "synset": "macowanites_americanus.n.01", + "name": "Macowanites_americanus", + }, + {"id": 21395, "synset": "polypore.n.01", "name": "polypore"}, + {"id": 21396, "synset": "bracket_fungus.n.01", "name": "bracket_fungus"}, + { + "id": 21397, + "synset": "albatrellus_dispansus.n.01", + "name": "Albatrellus_dispansus", + }, + {"id": 21398, "synset": "albatrellus_ovinus.n.01", "name": "Albatrellus_ovinus"}, + { + "id": 21399, + "synset": "neolentinus_ponderosus.n.01", + "name": "Neolentinus_ponderosus", + }, + { + "id": 21400, + "synset": "oligoporus_leucospongia.n.01", + "name": "Oligoporus_leucospongia", + }, + { + "id": 21401, + "synset": "polyporus_tenuiculus.n.01", + "name": "Polyporus_tenuiculus", + }, + {"id": 21402, "synset": "hen-of-the-woods.n.01", "name": "hen-of-the-woods"}, + {"id": 21403, "synset": "polyporus_squamosus.n.01", "name": "Polyporus_squamosus"}, + {"id": 21404, "synset": "beefsteak_fungus.n.01", "name": "beefsteak_fungus"}, + {"id": 21405, "synset": "agaric.n.01", "name": "agaric"}, + {"id": 21406, "synset": "bolete.n.01", "name": "bolete"}, + { + "id": 21407, + "synset": "boletus_chrysenteron.n.01", + "name": "Boletus_chrysenteron", + }, + {"id": 21408, "synset": "boletus_edulis.n.01", "name": "Boletus_edulis"}, + {"id": 21409, "synset": "frost's_bolete.n.01", "name": "Frost's_bolete"}, + {"id": 21410, "synset": "boletus_luridus.n.01", "name": "Boletus_luridus"}, + {"id": 21411, "synset": "boletus_mirabilis.n.01", "name": "Boletus_mirabilis"}, + {"id": 21412, "synset": "boletus_pallidus.n.01", "name": "Boletus_pallidus"}, + { + "id": 21413, + "synset": "boletus_pulcherrimus.n.01", + "name": "Boletus_pulcherrimus", + }, + { + "id": 21414, + "synset": "boletus_pulverulentus.n.01", + "name": "Boletus_pulverulentus", + }, + {"id": 21415, "synset": "boletus_roxanae.n.01", "name": "Boletus_roxanae"}, + { + "id": 21416, + "synset": "boletus_subvelutipes.n.01", + "name": "Boletus_subvelutipes", + }, + {"id": 21417, "synset": "boletus_variipes.n.01", "name": "Boletus_variipes"}, + {"id": 21418, "synset": "boletus_zelleri.n.01", "name": "Boletus_zelleri"}, + { + "id": 21419, + "synset": "fuscoboletinus_paluster.n.01", + "name": "Fuscoboletinus_paluster", + }, + { + "id": 21420, + "synset": "fuscoboletinus_serotinus.n.01", + "name": "Fuscoboletinus_serotinus", + }, + { + "id": 21421, + "synset": "leccinum_fibrillosum.n.01", + "name": "Leccinum_fibrillosum", + }, + {"id": 21422, "synset": "suillus_albivelatus.n.01", "name": "Suillus_albivelatus"}, + { + "id": 21423, + "synset": "old-man-of-the-woods.n.01", + "name": "old-man-of-the-woods", + }, + { + "id": 21424, + "synset": "boletellus_russellii.n.01", + "name": "Boletellus_russellii", + }, + {"id": 21425, "synset": "jelly_fungus.n.01", "name": "jelly_fungus"}, + {"id": 21426, "synset": "snow_mushroom.n.01", "name": "snow_mushroom"}, + {"id": 21427, "synset": "witches'_butter.n.01", "name": "witches'_butter"}, + {"id": 21428, "synset": "tremella_foliacea.n.01", "name": "Tremella_foliacea"}, + {"id": 21429, "synset": "tremella_reticulata.n.01", "name": "Tremella_reticulata"}, + {"id": 21430, "synset": "jew's-ear.n.01", "name": "Jew's-ear"}, + {"id": 21431, "synset": "rust.n.04", "name": "rust"}, + {"id": 21432, "synset": "aecium.n.01", "name": "aecium"}, + {"id": 21433, "synset": "flax_rust.n.01", "name": "flax_rust"}, + {"id": 21434, "synset": "blister_rust.n.02", "name": "blister_rust"}, + {"id": 21435, "synset": "wheat_rust.n.01", "name": "wheat_rust"}, + {"id": 21436, "synset": "apple_rust.n.01", "name": "apple_rust"}, + {"id": 21437, "synset": "smut.n.03", "name": "smut"}, + {"id": 21438, "synset": "covered_smut.n.01", "name": "covered_smut"}, + {"id": 21439, "synset": "loose_smut.n.02", "name": "loose_smut"}, + {"id": 21440, "synset": "cornsmut.n.01", "name": "cornsmut"}, + {"id": 21441, "synset": "boil_smut.n.01", "name": "boil_smut"}, + {"id": 21442, "synset": "sphacelotheca.n.01", "name": "Sphacelotheca"}, + {"id": 21443, "synset": "head_smut.n.01", "name": "head_smut"}, + {"id": 21444, "synset": "bunt.n.04", "name": "bunt"}, + {"id": 21445, "synset": "bunt.n.03", "name": "bunt"}, + {"id": 21446, "synset": "onion_smut.n.01", "name": "onion_smut"}, + {"id": 21447, "synset": "flag_smut_fungus.n.01", "name": "flag_smut_fungus"}, + {"id": 21448, "synset": "wheat_flag_smut.n.01", "name": "wheat_flag_smut"}, + {"id": 21449, "synset": "felt_fungus.n.01", "name": "felt_fungus"}, + {"id": 21450, "synset": "waxycap.n.01", "name": "waxycap"}, + { + "id": 21451, + "synset": "hygrocybe_acutoconica.n.01", + "name": "Hygrocybe_acutoconica", + }, + { + "id": 21452, + "synset": "hygrophorus_borealis.n.01", + "name": "Hygrophorus_borealis", + }, + { + "id": 21453, + "synset": "hygrophorus_caeruleus.n.01", + "name": "Hygrophorus_caeruleus", + }, + { + "id": 21454, + "synset": "hygrophorus_inocybiformis.n.01", + "name": "Hygrophorus_inocybiformis", + }, + { + "id": 21455, + "synset": "hygrophorus_kauffmanii.n.01", + "name": "Hygrophorus_kauffmanii", + }, + { + "id": 21456, + "synset": "hygrophorus_marzuolus.n.01", + "name": "Hygrophorus_marzuolus", + }, + { + "id": 21457, + "synset": "hygrophorus_purpurascens.n.01", + "name": "Hygrophorus_purpurascens", + }, + {"id": 21458, "synset": "hygrophorus_russula.n.01", "name": "Hygrophorus_russula"}, + { + "id": 21459, + "synset": "hygrophorus_sordidus.n.01", + "name": "Hygrophorus_sordidus", + }, + { + "id": 21460, + "synset": "hygrophorus_tennesseensis.n.01", + "name": "Hygrophorus_tennesseensis", + }, + { + "id": 21461, + "synset": "hygrophorus_turundus.n.01", + "name": "Hygrophorus_turundus", + }, + { + "id": 21462, + "synset": "neohygrophorus_angelesianus.n.01", + "name": "Neohygrophorus_angelesianus", + }, + { + "id": 21463, + "synset": "cortinarius_armillatus.n.01", + "name": "Cortinarius_armillatus", + }, + { + "id": 21464, + "synset": "cortinarius_atkinsonianus.n.01", + "name": "Cortinarius_atkinsonianus", + }, + { + "id": 21465, + "synset": "cortinarius_corrugatus.n.01", + "name": "Cortinarius_corrugatus", + }, + { + "id": 21466, + "synset": "cortinarius_gentilis.n.01", + "name": "Cortinarius_gentilis", + }, + { + "id": 21467, + "synset": "cortinarius_mutabilis.n.01", + "name": "Cortinarius_mutabilis", + }, + { + "id": 21468, + "synset": "cortinarius_semisanguineus.n.01", + "name": "Cortinarius_semisanguineus", + }, + { + "id": 21469, + "synset": "cortinarius_subfoetidus.n.01", + "name": "Cortinarius_subfoetidus", + }, + { + "id": 21470, + "synset": "cortinarius_violaceus.n.01", + "name": "Cortinarius_violaceus", + }, + { + "id": 21471, + "synset": "gymnopilus_spectabilis.n.01", + "name": "Gymnopilus_spectabilis", + }, + { + "id": 21472, + "synset": "gymnopilus_validipes.n.01", + "name": "Gymnopilus_validipes", + }, + { + "id": 21473, + "synset": "gymnopilus_ventricosus.n.01", + "name": "Gymnopilus_ventricosus", + }, + {"id": 21474, "synset": "mold.n.05", "name": "mold"}, + {"id": 21475, "synset": "mildew.n.02", "name": "mildew"}, + {"id": 21476, "synset": "verticillium.n.01", "name": "verticillium"}, + {"id": 21477, "synset": "monilia.n.01", "name": "monilia"}, + {"id": 21478, "synset": "candida.n.01", "name": "candida"}, + {"id": 21479, "synset": "candida_albicans.n.01", "name": "Candida_albicans"}, + {"id": 21480, "synset": "blastomycete.n.01", "name": "blastomycete"}, + {"id": 21481, "synset": "yellow_spot_fungus.n.01", "name": "yellow_spot_fungus"}, + {"id": 21482, "synset": "green_smut_fungus.n.01", "name": "green_smut_fungus"}, + {"id": 21483, "synset": "dry_rot.n.02", "name": "dry_rot"}, + {"id": 21484, "synset": "rhizoctinia.n.01", "name": "rhizoctinia"}, + {"id": 21485, "synset": "houseplant.n.01", "name": "houseplant"}, + {"id": 21486, "synset": "bedder.n.01", "name": "bedder"}, + {"id": 21487, "synset": "succulent.n.01", "name": "succulent"}, + {"id": 21488, "synset": "cultivar.n.01", "name": "cultivar"}, + {"id": 21489, "synset": "weed.n.01", "name": "weed"}, + {"id": 21490, "synset": "wort.n.01", "name": "wort"}, + {"id": 21491, "synset": "brier.n.02", "name": "brier"}, + {"id": 21492, "synset": "aril.n.01", "name": "aril"}, + {"id": 21493, "synset": "sporophyll.n.01", "name": "sporophyll"}, + {"id": 21494, "synset": "sporangium.n.01", "name": "sporangium"}, + {"id": 21495, "synset": "sporangiophore.n.01", "name": "sporangiophore"}, + {"id": 21496, "synset": "ascus.n.01", "name": "ascus"}, + {"id": 21497, "synset": "ascospore.n.01", "name": "ascospore"}, + {"id": 21498, "synset": "arthrospore.n.02", "name": "arthrospore"}, + {"id": 21499, "synset": "eusporangium.n.01", "name": "eusporangium"}, + {"id": 21500, "synset": "tetrasporangium.n.01", "name": "tetrasporangium"}, + {"id": 21501, "synset": "gametangium.n.01", "name": "gametangium"}, + {"id": 21502, "synset": "sorus.n.02", "name": "sorus"}, + {"id": 21503, "synset": "sorus.n.01", "name": "sorus"}, + {"id": 21504, "synset": "partial_veil.n.01", "name": "partial_veil"}, + {"id": 21505, "synset": "lignum.n.01", "name": "lignum"}, + {"id": 21506, "synset": "vascular_ray.n.01", "name": "vascular_ray"}, + {"id": 21507, "synset": "phloem.n.01", "name": "phloem"}, + {"id": 21508, "synset": "evergreen.n.01", "name": "evergreen"}, + {"id": 21509, "synset": "deciduous_plant.n.01", "name": "deciduous_plant"}, + {"id": 21510, "synset": "poisonous_plant.n.01", "name": "poisonous_plant"}, + {"id": 21511, "synset": "vine.n.01", "name": "vine"}, + {"id": 21512, "synset": "creeper.n.01", "name": "creeper"}, + {"id": 21513, "synset": "tendril.n.01", "name": "tendril"}, + {"id": 21514, "synset": "root_climber.n.01", "name": "root_climber"}, + {"id": 21515, "synset": "lignosae.n.01", "name": "lignosae"}, + {"id": 21516, "synset": "arborescent_plant.n.01", "name": "arborescent_plant"}, + {"id": 21517, "synset": "snag.n.02", "name": "snag"}, + {"id": 21518, "synset": "tree.n.01", "name": "tree"}, + {"id": 21519, "synset": "timber_tree.n.01", "name": "timber_tree"}, + {"id": 21520, "synset": "treelet.n.01", "name": "treelet"}, + {"id": 21521, "synset": "arbor.n.01", "name": "arbor"}, + {"id": 21522, "synset": "bean_tree.n.01", "name": "bean_tree"}, + {"id": 21523, "synset": "pollard.n.01", "name": "pollard"}, + {"id": 21524, "synset": "sapling.n.01", "name": "sapling"}, + {"id": 21525, "synset": "shade_tree.n.01", "name": "shade_tree"}, + {"id": 21526, "synset": "gymnospermous_tree.n.01", "name": "gymnospermous_tree"}, + {"id": 21527, "synset": "conifer.n.01", "name": "conifer"}, + {"id": 21528, "synset": "angiospermous_tree.n.01", "name": "angiospermous_tree"}, + {"id": 21529, "synset": "nut_tree.n.01", "name": "nut_tree"}, + {"id": 21530, "synset": "spice_tree.n.01", "name": "spice_tree"}, + {"id": 21531, "synset": "fever_tree.n.01", "name": "fever_tree"}, + {"id": 21532, "synset": "stump.n.01", "name": "stump"}, + {"id": 21533, "synset": "bonsai.n.01", "name": "bonsai"}, + {"id": 21534, "synset": "ming_tree.n.02", "name": "ming_tree"}, + {"id": 21535, "synset": "ming_tree.n.01", "name": "ming_tree"}, + {"id": 21536, "synset": "undershrub.n.01", "name": "undershrub"}, + {"id": 21537, "synset": "subshrub.n.01", "name": "subshrub"}, + {"id": 21538, "synset": "bramble.n.01", "name": "bramble"}, + {"id": 21539, "synset": "liana.n.01", "name": "liana"}, + {"id": 21540, "synset": "geophyte.n.01", "name": "geophyte"}, + {"id": 21541, "synset": "desert_plant.n.01", "name": "desert_plant"}, + {"id": 21542, "synset": "mesophyte.n.01", "name": "mesophyte"}, + {"id": 21543, "synset": "marsh_plant.n.01", "name": "marsh_plant"}, + {"id": 21544, "synset": "hemiepiphyte.n.01", "name": "hemiepiphyte"}, + {"id": 21545, "synset": "strangler.n.01", "name": "strangler"}, + {"id": 21546, "synset": "lithophyte.n.01", "name": "lithophyte"}, + {"id": 21547, "synset": "saprobe.n.01", "name": "saprobe"}, + {"id": 21548, "synset": "autophyte.n.01", "name": "autophyte"}, + {"id": 21549, "synset": "root.n.01", "name": "root"}, + {"id": 21550, "synset": "taproot.n.01", "name": "taproot"}, + {"id": 21551, "synset": "prop_root.n.01", "name": "prop_root"}, + {"id": 21552, "synset": "prophyll.n.01", "name": "prophyll"}, + {"id": 21553, "synset": "rootstock.n.02", "name": "rootstock"}, + {"id": 21554, "synset": "quickset.n.01", "name": "quickset"}, + {"id": 21555, "synset": "stolon.n.01", "name": "stolon"}, + {"id": 21556, "synset": "tuberous_plant.n.01", "name": "tuberous_plant"}, + {"id": 21557, "synset": "rhizome.n.01", "name": "rhizome"}, + {"id": 21558, "synset": "rachis.n.01", "name": "rachis"}, + {"id": 21559, "synset": "caudex.n.02", "name": "caudex"}, + {"id": 21560, "synset": "cladode.n.01", "name": "cladode"}, + {"id": 21561, "synset": "receptacle.n.02", "name": "receptacle"}, + {"id": 21562, "synset": "scape.n.01", "name": "scape"}, + {"id": 21563, "synset": "umbel.n.01", "name": "umbel"}, + {"id": 21564, "synset": "petiole.n.01", "name": "petiole"}, + {"id": 21565, "synset": "peduncle.n.02", "name": "peduncle"}, + {"id": 21566, "synset": "pedicel.n.01", "name": "pedicel"}, + {"id": 21567, "synset": "flower_cluster.n.01", "name": "flower_cluster"}, + {"id": 21568, "synset": "raceme.n.01", "name": "raceme"}, + {"id": 21569, "synset": "panicle.n.01", "name": "panicle"}, + {"id": 21570, "synset": "thyrse.n.01", "name": "thyrse"}, + {"id": 21571, "synset": "cyme.n.01", "name": "cyme"}, + {"id": 21572, "synset": "cymule.n.01", "name": "cymule"}, + {"id": 21573, "synset": "glomerule.n.01", "name": "glomerule"}, + {"id": 21574, "synset": "scorpioid_cyme.n.01", "name": "scorpioid_cyme"}, + {"id": 21575, "synset": "ear.n.05", "name": "ear"}, + {"id": 21576, "synset": "spadix.n.01", "name": "spadix"}, + {"id": 21577, "synset": "bulbous_plant.n.01", "name": "bulbous_plant"}, + {"id": 21578, "synset": "bulbil.n.01", "name": "bulbil"}, + {"id": 21579, "synset": "cormous_plant.n.01", "name": "cormous_plant"}, + {"id": 21580, "synset": "fruit.n.01", "name": "fruit"}, + {"id": 21581, "synset": "fruitlet.n.01", "name": "fruitlet"}, + {"id": 21582, "synset": "seed.n.01", "name": "seed"}, + {"id": 21583, "synset": "bean.n.02", "name": "bean"}, + {"id": 21584, "synset": "nut.n.01", "name": "nut"}, + {"id": 21585, "synset": "nutlet.n.01", "name": "nutlet"}, + {"id": 21586, "synset": "kernel.n.01", "name": "kernel"}, + {"id": 21587, "synset": "syconium.n.01", "name": "syconium"}, + {"id": 21588, "synset": "berry.n.02", "name": "berry"}, + {"id": 21589, "synset": "aggregate_fruit.n.01", "name": "aggregate_fruit"}, + {"id": 21590, "synset": "simple_fruit.n.01", "name": "simple_fruit"}, + {"id": 21591, "synset": "acinus.n.01", "name": "acinus"}, + {"id": 21592, "synset": "drupe.n.01", "name": "drupe"}, + {"id": 21593, "synset": "drupelet.n.01", "name": "drupelet"}, + {"id": 21594, "synset": "pome.n.01", "name": "pome"}, + {"id": 21595, "synset": "pod.n.02", "name": "pod"}, + {"id": 21596, "synset": "loment.n.01", "name": "loment"}, + {"id": 21597, "synset": "pyxidium.n.01", "name": "pyxidium"}, + {"id": 21598, "synset": "husk.n.02", "name": "husk"}, + {"id": 21599, "synset": "cornhusk.n.01", "name": "cornhusk"}, + {"id": 21600, "synset": "pod.n.01", "name": "pod"}, + {"id": 21601, "synset": "accessory_fruit.n.01", "name": "accessory_fruit"}, + {"id": 21602, "synset": "buckthorn.n.01", "name": "buckthorn"}, + {"id": 21603, "synset": "buckthorn_berry.n.01", "name": "buckthorn_berry"}, + {"id": 21604, "synset": "cascara_buckthorn.n.01", "name": "cascara_buckthorn"}, + {"id": 21605, "synset": "cascara.n.01", "name": "cascara"}, + {"id": 21606, "synset": "carolina_buckthorn.n.01", "name": "Carolina_buckthorn"}, + {"id": 21607, "synset": "coffeeberry.n.01", "name": "coffeeberry"}, + {"id": 21608, "synset": "redberry.n.01", "name": "redberry"}, + {"id": 21609, "synset": "nakedwood.n.01", "name": "nakedwood"}, + {"id": 21610, "synset": "jujube.n.01", "name": "jujube"}, + {"id": 21611, "synset": "christ's-thorn.n.01", "name": "Christ's-thorn"}, + {"id": 21612, "synset": "hazel.n.01", "name": "hazel"}, + {"id": 21613, "synset": "fox_grape.n.01", "name": "fox_grape"}, + {"id": 21614, "synset": "muscadine.n.01", "name": "muscadine"}, + {"id": 21615, "synset": "vinifera.n.01", "name": "vinifera"}, + {"id": 21616, "synset": "pinot_blanc.n.01", "name": "Pinot_blanc"}, + {"id": 21617, "synset": "sauvignon_grape.n.01", "name": "Sauvignon_grape"}, + {"id": 21618, "synset": "sauvignon_blanc.n.01", "name": "Sauvignon_blanc"}, + {"id": 21619, "synset": "muscadet.n.01", "name": "Muscadet"}, + {"id": 21620, "synset": "riesling.n.01", "name": "Riesling"}, + {"id": 21621, "synset": "zinfandel.n.01", "name": "Zinfandel"}, + {"id": 21622, "synset": "chenin_blanc.n.01", "name": "Chenin_blanc"}, + {"id": 21623, "synset": "malvasia.n.01", "name": "malvasia"}, + {"id": 21624, "synset": "verdicchio.n.01", "name": "Verdicchio"}, + {"id": 21625, "synset": "boston_ivy.n.01", "name": "Boston_ivy"}, + {"id": 21626, "synset": "virginia_creeper.n.01", "name": "Virginia_creeper"}, + {"id": 21627, "synset": "true_pepper.n.01", "name": "true_pepper"}, + {"id": 21628, "synset": "betel.n.01", "name": "betel"}, + {"id": 21629, "synset": "cubeb.n.01", "name": "cubeb"}, + {"id": 21630, "synset": "schizocarp.n.01", "name": "schizocarp"}, + {"id": 21631, "synset": "peperomia.n.01", "name": "peperomia"}, + {"id": 21632, "synset": "watermelon_begonia.n.01", "name": "watermelon_begonia"}, + {"id": 21633, "synset": "yerba_mansa.n.01", "name": "yerba_mansa"}, + {"id": 21634, "synset": "pinna.n.01", "name": "pinna"}, + {"id": 21635, "synset": "frond.n.01", "name": "frond"}, + {"id": 21636, "synset": "bract.n.01", "name": "bract"}, + {"id": 21637, "synset": "bracteole.n.01", "name": "bracteole"}, + {"id": 21638, "synset": "involucre.n.01", "name": "involucre"}, + {"id": 21639, "synset": "glume.n.01", "name": "glume"}, + {"id": 21640, "synset": "palmate_leaf.n.01", "name": "palmate_leaf"}, + {"id": 21641, "synset": "pinnate_leaf.n.01", "name": "pinnate_leaf"}, + {"id": 21642, "synset": "bijugate_leaf.n.01", "name": "bijugate_leaf"}, + {"id": 21643, "synset": "decompound_leaf.n.01", "name": "decompound_leaf"}, + {"id": 21644, "synset": "acuminate_leaf.n.01", "name": "acuminate_leaf"}, + {"id": 21645, "synset": "deltoid_leaf.n.01", "name": "deltoid_leaf"}, + {"id": 21646, "synset": "ensiform_leaf.n.01", "name": "ensiform_leaf"}, + {"id": 21647, "synset": "linear_leaf.n.01", "name": "linear_leaf"}, + {"id": 21648, "synset": "lyrate_leaf.n.01", "name": "lyrate_leaf"}, + {"id": 21649, "synset": "obtuse_leaf.n.01", "name": "obtuse_leaf"}, + {"id": 21650, "synset": "oblanceolate_leaf.n.01", "name": "oblanceolate_leaf"}, + {"id": 21651, "synset": "pandurate_leaf.n.01", "name": "pandurate_leaf"}, + {"id": 21652, "synset": "reniform_leaf.n.01", "name": "reniform_leaf"}, + {"id": 21653, "synset": "spatulate_leaf.n.01", "name": "spatulate_leaf"}, + {"id": 21654, "synset": "even-pinnate_leaf.n.01", "name": "even-pinnate_leaf"}, + {"id": 21655, "synset": "odd-pinnate_leaf.n.01", "name": "odd-pinnate_leaf"}, + {"id": 21656, "synset": "pedate_leaf.n.01", "name": "pedate_leaf"}, + {"id": 21657, "synset": "crenate_leaf.n.01", "name": "crenate_leaf"}, + {"id": 21658, "synset": "dentate_leaf.n.01", "name": "dentate_leaf"}, + {"id": 21659, "synset": "denticulate_leaf.n.01", "name": "denticulate_leaf"}, + {"id": 21660, "synset": "erose_leaf.n.01", "name": "erose_leaf"}, + {"id": 21661, "synset": "runcinate_leaf.n.01", "name": "runcinate_leaf"}, + {"id": 21662, "synset": "prickly-edged_leaf.n.01", "name": "prickly-edged_leaf"}, + {"id": 21663, "synset": "deadwood.n.01", "name": "deadwood"}, + {"id": 21664, "synset": "haulm.n.01", "name": "haulm"}, + {"id": 21665, "synset": "branchlet.n.01", "name": "branchlet"}, + {"id": 21666, "synset": "osier.n.01", "name": "osier"}, + { + "id": 21667, + "synset": "giant_scrambling_fern.n.01", + "name": "giant_scrambling_fern", + }, + {"id": 21668, "synset": "umbrella_fern.n.01", "name": "umbrella_fern"}, + {"id": 21669, "synset": "floating_fern.n.02", "name": "floating_fern"}, + {"id": 21670, "synset": "polypody.n.01", "name": "polypody"}, + {"id": 21671, "synset": "licorice_fern.n.01", "name": "licorice_fern"}, + {"id": 21672, "synset": "grey_polypody.n.01", "name": "grey_polypody"}, + {"id": 21673, "synset": "leatherleaf.n.01", "name": "leatherleaf"}, + {"id": 21674, "synset": "rock_polypody.n.01", "name": "rock_polypody"}, + {"id": 21675, "synset": "common_polypody.n.01", "name": "common_polypody"}, + {"id": 21676, "synset": "bear's-paw_fern.n.01", "name": "bear's-paw_fern"}, + {"id": 21677, "synset": "strap_fern.n.01", "name": "strap_fern"}, + {"id": 21678, "synset": "florida_strap_fern.n.01", "name": "Florida_strap_fern"}, + {"id": 21679, "synset": "basket_fern.n.02", "name": "basket_fern"}, + {"id": 21680, "synset": "snake_polypody.n.01", "name": "snake_polypody"}, + { + "id": 21681, + "synset": "climbing_bird's_nest_fern.n.01", + "name": "climbing_bird's_nest_fern", + }, + {"id": 21682, "synset": "golden_polypody.n.01", "name": "golden_polypody"}, + {"id": 21683, "synset": "staghorn_fern.n.01", "name": "staghorn_fern"}, + { + "id": 21684, + "synset": "south_american_staghorn.n.01", + "name": "South_American_staghorn", + }, + { + "id": 21685, + "synset": "common_staghorn_fern.n.01", + "name": "common_staghorn_fern", + }, + {"id": 21686, "synset": "felt_fern.n.01", "name": "felt_fern"}, + {"id": 21687, "synset": "potato_fern.n.02", "name": "potato_fern"}, + {"id": 21688, "synset": "myrmecophyte.n.01", "name": "myrmecophyte"}, + {"id": 21689, "synset": "grass_fern.n.01", "name": "grass_fern"}, + {"id": 21690, "synset": "spleenwort.n.01", "name": "spleenwort"}, + {"id": 21691, "synset": "black_spleenwort.n.01", "name": "black_spleenwort"}, + {"id": 21692, "synset": "bird's_nest_fern.n.01", "name": "bird's_nest_fern"}, + {"id": 21693, "synset": "ebony_spleenwort.n.01", "name": "ebony_spleenwort"}, + { + "id": 21694, + "synset": "black-stem_spleenwort.n.01", + "name": "black-stem_spleenwort", + }, + {"id": 21695, "synset": "walking_fern.n.01", "name": "walking_fern"}, + {"id": 21696, "synset": "green_spleenwort.n.01", "name": "green_spleenwort"}, + {"id": 21697, "synset": "mountain_spleenwort.n.01", "name": "mountain_spleenwort"}, + {"id": 21698, "synset": "lobed_spleenwort.n.01", "name": "lobed_spleenwort"}, + { + "id": 21699, + "synset": "lanceolate_spleenwort.n.01", + "name": "lanceolate_spleenwort", + }, + {"id": 21700, "synset": "hart's-tongue.n.02", "name": "hart's-tongue"}, + {"id": 21701, "synset": "scale_fern.n.01", "name": "scale_fern"}, + {"id": 21702, "synset": "scolopendrium.n.01", "name": "scolopendrium"}, + {"id": 21703, "synset": "deer_fern.n.01", "name": "deer_fern"}, + {"id": 21704, "synset": "doodia.n.01", "name": "doodia"}, + {"id": 21705, "synset": "chain_fern.n.01", "name": "chain_fern"}, + {"id": 21706, "synset": "virginia_chain_fern.n.01", "name": "Virginia_chain_fern"}, + {"id": 21707, "synset": "silver_tree_fern.n.01", "name": "silver_tree_fern"}, + {"id": 21708, "synset": "davallia.n.01", "name": "davallia"}, + {"id": 21709, "synset": "hare's-foot_fern.n.01", "name": "hare's-foot_fern"}, + { + "id": 21710, + "synset": "canary_island_hare's_foot_fern.n.01", + "name": "Canary_Island_hare's_foot_fern", + }, + { + "id": 21711, + "synset": "squirrel's-foot_fern.n.01", + "name": "squirrel's-foot_fern", + }, + {"id": 21712, "synset": "bracken.n.01", "name": "bracken"}, + {"id": 21713, "synset": "soft_tree_fern.n.01", "name": "soft_tree_fern"}, + {"id": 21714, "synset": "scythian_lamb.n.01", "name": "Scythian_lamb"}, + {"id": 21715, "synset": "false_bracken.n.01", "name": "false_bracken"}, + {"id": 21716, "synset": "thyrsopteris.n.01", "name": "thyrsopteris"}, + {"id": 21717, "synset": "shield_fern.n.01", "name": "shield_fern"}, + {"id": 21718, "synset": "broad_buckler-fern.n.01", "name": "broad_buckler-fern"}, + {"id": 21719, "synset": "fragrant_cliff_fern.n.01", "name": "fragrant_cliff_fern"}, + {"id": 21720, "synset": "goldie's_fern.n.01", "name": "Goldie's_fern"}, + {"id": 21721, "synset": "wood_fern.n.01", "name": "wood_fern"}, + {"id": 21722, "synset": "male_fern.n.01", "name": "male_fern"}, + {"id": 21723, "synset": "marginal_wood_fern.n.01", "name": "marginal_wood_fern"}, + {"id": 21724, "synset": "mountain_male_fern.n.01", "name": "mountain_male_fern"}, + {"id": 21725, "synset": "lady_fern.n.01", "name": "lady_fern"}, + {"id": 21726, "synset": "alpine_lady_fern.n.01", "name": "Alpine_lady_fern"}, + {"id": 21727, "synset": "silvery_spleenwort.n.02", "name": "silvery_spleenwort"}, + {"id": 21728, "synset": "holly_fern.n.02", "name": "holly_fern"}, + {"id": 21729, "synset": "bladder_fern.n.01", "name": "bladder_fern"}, + { + "id": 21730, + "synset": "brittle_bladder_fern.n.01", + "name": "brittle_bladder_fern", + }, + { + "id": 21731, + "synset": "mountain_bladder_fern.n.01", + "name": "mountain_bladder_fern", + }, + {"id": 21732, "synset": "bulblet_fern.n.01", "name": "bulblet_fern"}, + {"id": 21733, "synset": "silvery_spleenwort.n.01", "name": "silvery_spleenwort"}, + {"id": 21734, "synset": "oak_fern.n.01", "name": "oak_fern"}, + {"id": 21735, "synset": "limestone_fern.n.01", "name": "limestone_fern"}, + {"id": 21736, "synset": "ostrich_fern.n.01", "name": "ostrich_fern"}, + {"id": 21737, "synset": "hart's-tongue.n.01", "name": "hart's-tongue"}, + {"id": 21738, "synset": "sensitive_fern.n.01", "name": "sensitive_fern"}, + {"id": 21739, "synset": "christmas_fern.n.01", "name": "Christmas_fern"}, + {"id": 21740, "synset": "holly_fern.n.01", "name": "holly_fern"}, + {"id": 21741, "synset": "braun's_holly_fern.n.01", "name": "Braun's_holly_fern"}, + {"id": 21742, "synset": "western_holly_fern.n.01", "name": "western_holly_fern"}, + {"id": 21743, "synset": "soft_shield_fern.n.01", "name": "soft_shield_fern"}, + {"id": 21744, "synset": "leather_fern.n.02", "name": "leather_fern"}, + {"id": 21745, "synset": "button_fern.n.02", "name": "button_fern"}, + {"id": 21746, "synset": "indian_button_fern.n.01", "name": "Indian_button_fern"}, + {"id": 21747, "synset": "woodsia.n.01", "name": "woodsia"}, + {"id": 21748, "synset": "rusty_woodsia.n.01", "name": "rusty_woodsia"}, + {"id": 21749, "synset": "alpine_woodsia.n.01", "name": "Alpine_woodsia"}, + {"id": 21750, "synset": "smooth_woodsia.n.01", "name": "smooth_woodsia"}, + {"id": 21751, "synset": "boston_fern.n.01", "name": "Boston_fern"}, + {"id": 21752, "synset": "basket_fern.n.01", "name": "basket_fern"}, + {"id": 21753, "synset": "golden_fern.n.02", "name": "golden_fern"}, + {"id": 21754, "synset": "maidenhair.n.01", "name": "maidenhair"}, + {"id": 21755, "synset": "common_maidenhair.n.01", "name": "common_maidenhair"}, + { + "id": 21756, + "synset": "american_maidenhair_fern.n.01", + "name": "American_maidenhair_fern", + }, + {"id": 21757, "synset": "bermuda_maidenhair.n.01", "name": "Bermuda_maidenhair"}, + {"id": 21758, "synset": "brittle_maidenhair.n.01", "name": "brittle_maidenhair"}, + {"id": 21759, "synset": "farley_maidenhair.n.01", "name": "Farley_maidenhair"}, + {"id": 21760, "synset": "annual_fern.n.01", "name": "annual_fern"}, + {"id": 21761, "synset": "lip_fern.n.01", "name": "lip_fern"}, + {"id": 21762, "synset": "smooth_lip_fern.n.01", "name": "smooth_lip_fern"}, + {"id": 21763, "synset": "lace_fern.n.01", "name": "lace_fern"}, + {"id": 21764, "synset": "wooly_lip_fern.n.01", "name": "wooly_lip_fern"}, + { + "id": 21765, + "synset": "southwestern_lip_fern.n.01", + "name": "southwestern_lip_fern", + }, + {"id": 21766, "synset": "bamboo_fern.n.01", "name": "bamboo_fern"}, + {"id": 21767, "synset": "american_rock_brake.n.01", "name": "American_rock_brake"}, + { + "id": 21768, + "synset": "european_parsley_fern.n.01", + "name": "European_parsley_fern", + }, + {"id": 21769, "synset": "hand_fern.n.01", "name": "hand_fern"}, + {"id": 21770, "synset": "cliff_brake.n.01", "name": "cliff_brake"}, + {"id": 21771, "synset": "coffee_fern.n.01", "name": "coffee_fern"}, + {"id": 21772, "synset": "purple_rock_brake.n.01", "name": "purple_rock_brake"}, + {"id": 21773, "synset": "bird's-foot_fern.n.01", "name": "bird's-foot_fern"}, + {"id": 21774, "synset": "button_fern.n.01", "name": "button_fern"}, + {"id": 21775, "synset": "silver_fern.n.02", "name": "silver_fern"}, + {"id": 21776, "synset": "golden_fern.n.01", "name": "golden_fern"}, + {"id": 21777, "synset": "gold_fern.n.01", "name": "gold_fern"}, + {"id": 21778, "synset": "pteris_cretica.n.01", "name": "Pteris_cretica"}, + {"id": 21779, "synset": "spider_brake.n.01", "name": "spider_brake"}, + {"id": 21780, "synset": "ribbon_fern.n.01", "name": "ribbon_fern"}, + {"id": 21781, "synset": "potato_fern.n.01", "name": "potato_fern"}, + {"id": 21782, "synset": "angiopteris.n.01", "name": "angiopteris"}, + {"id": 21783, "synset": "skeleton_fork_fern.n.01", "name": "skeleton_fork_fern"}, + {"id": 21784, "synset": "horsetail.n.01", "name": "horsetail"}, + {"id": 21785, "synset": "common_horsetail.n.01", "name": "common_horsetail"}, + {"id": 21786, "synset": "swamp_horsetail.n.01", "name": "swamp_horsetail"}, + {"id": 21787, "synset": "scouring_rush.n.01", "name": "scouring_rush"}, + {"id": 21788, "synset": "marsh_horsetail.n.01", "name": "marsh_horsetail"}, + {"id": 21789, "synset": "wood_horsetail.n.01", "name": "wood_horsetail"}, + { + "id": 21790, + "synset": "variegated_horsetail.n.01", + "name": "variegated_horsetail", + }, + {"id": 21791, "synset": "club_moss.n.01", "name": "club_moss"}, + {"id": 21792, "synset": "shining_clubmoss.n.01", "name": "shining_clubmoss"}, + {"id": 21793, "synset": "alpine_clubmoss.n.01", "name": "alpine_clubmoss"}, + {"id": 21794, "synset": "fir_clubmoss.n.01", "name": "fir_clubmoss"}, + {"id": 21795, "synset": "ground_cedar.n.01", "name": "ground_cedar"}, + {"id": 21796, "synset": "ground_fir.n.01", "name": "ground_fir"}, + {"id": 21797, "synset": "foxtail_grass.n.01", "name": "foxtail_grass"}, + {"id": 21798, "synset": "spikemoss.n.01", "name": "spikemoss"}, + {"id": 21799, "synset": "meadow_spikemoss.n.01", "name": "meadow_spikemoss"}, + {"id": 21800, "synset": "desert_selaginella.n.01", "name": "desert_selaginella"}, + {"id": 21801, "synset": "resurrection_plant.n.01", "name": "resurrection_plant"}, + {"id": 21802, "synset": "florida_selaginella.n.01", "name": "florida_selaginella"}, + {"id": 21803, "synset": "quillwort.n.01", "name": "quillwort"}, + {"id": 21804, "synset": "earthtongue.n.01", "name": "earthtongue"}, + {"id": 21805, "synset": "snuffbox_fern.n.01", "name": "snuffbox_fern"}, + {"id": 21806, "synset": "christella.n.01", "name": "christella"}, + {"id": 21807, "synset": "mountain_fern.n.01", "name": "mountain_fern"}, + {"id": 21808, "synset": "new_york_fern.n.01", "name": "New_York_fern"}, + {"id": 21809, "synset": "massachusetts_fern.n.01", "name": "Massachusetts_fern"}, + {"id": 21810, "synset": "beech_fern.n.01", "name": "beech_fern"}, + {"id": 21811, "synset": "broad_beech_fern.n.01", "name": "broad_beech_fern"}, + {"id": 21812, "synset": "long_beech_fern.n.01", "name": "long_beech_fern"}, + {"id": 21813, "synset": "shoestring_fungus.n.01", "name": "shoestring_fungus"}, + {"id": 21814, "synset": "armillaria_caligata.n.01", "name": "Armillaria_caligata"}, + { + "id": 21815, + "synset": "armillaria_ponderosa.n.01", + "name": "Armillaria_ponderosa", + }, + {"id": 21816, "synset": "armillaria_zelleri.n.01", "name": "Armillaria_zelleri"}, + {"id": 21817, "synset": "honey_mushroom.n.01", "name": "honey_mushroom"}, + {"id": 21818, "synset": "milkweed.n.01", "name": "milkweed"}, + {"id": 21819, "synset": "white_milkweed.n.01", "name": "white_milkweed"}, + {"id": 21820, "synset": "poke_milkweed.n.01", "name": "poke_milkweed"}, + {"id": 21821, "synset": "swamp_milkweed.n.01", "name": "swamp_milkweed"}, + {"id": 21822, "synset": "mead's_milkweed.n.01", "name": "Mead's_milkweed"}, + {"id": 21823, "synset": "purple_silkweed.n.01", "name": "purple_silkweed"}, + {"id": 21824, "synset": "showy_milkweed.n.01", "name": "showy_milkweed"}, + {"id": 21825, "synset": "poison_milkweed.n.01", "name": "poison_milkweed"}, + {"id": 21826, "synset": "butterfly_weed.n.01", "name": "butterfly_weed"}, + {"id": 21827, "synset": "whorled_milkweed.n.01", "name": "whorled_milkweed"}, + {"id": 21828, "synset": "cruel_plant.n.01", "name": "cruel_plant"}, + {"id": 21829, "synset": "wax_plant.n.01", "name": "wax_plant"}, + {"id": 21830, "synset": "silk_vine.n.01", "name": "silk_vine"}, + {"id": 21831, "synset": "stapelia.n.01", "name": "stapelia"}, + {"id": 21832, "synset": "stapelias_asterias.n.01", "name": "Stapelias_asterias"}, + {"id": 21833, "synset": "stephanotis.n.01", "name": "stephanotis"}, + {"id": 21834, "synset": "madagascar_jasmine.n.01", "name": "Madagascar_jasmine"}, + {"id": 21835, "synset": "negro_vine.n.01", "name": "negro_vine"}, + {"id": 21836, "synset": "zygospore.n.01", "name": "zygospore"}, + {"id": 21837, "synset": "tree_of_knowledge.n.01", "name": "tree_of_knowledge"}, + {"id": 21838, "synset": "orangery.n.01", "name": "orangery"}, + {"id": 21839, "synset": "pocketbook.n.01", "name": "pocketbook"}, + {"id": 21840, "synset": "shit.n.04", "name": "shit"}, + {"id": 21841, "synset": "cordage.n.01", "name": "cordage"}, + {"id": 21842, "synset": "yard.n.01", "name": "yard"}, + {"id": 21843, "synset": "extremum.n.02", "name": "extremum"}, + {"id": 21844, "synset": "leaf_shape.n.01", "name": "leaf_shape"}, + {"id": 21845, "synset": "equilateral.n.01", "name": "equilateral"}, + {"id": 21846, "synset": "figure.n.06", "name": "figure"}, + {"id": 21847, "synset": "pencil.n.03", "name": "pencil"}, + {"id": 21848, "synset": "plane_figure.n.01", "name": "plane_figure"}, + {"id": 21849, "synset": "solid_figure.n.01", "name": "solid_figure"}, + {"id": 21850, "synset": "line.n.04", "name": "line"}, + {"id": 21851, "synset": "bulb.n.04", "name": "bulb"}, + {"id": 21852, "synset": "convex_shape.n.01", "name": "convex_shape"}, + {"id": 21853, "synset": "concave_shape.n.01", "name": "concave_shape"}, + {"id": 21854, "synset": "cylinder.n.01", "name": "cylinder"}, + {"id": 21855, "synset": "round_shape.n.01", "name": "round_shape"}, + {"id": 21856, "synset": "heart.n.07", "name": "heart"}, + {"id": 21857, "synset": "polygon.n.01", "name": "polygon"}, + {"id": 21858, "synset": "convex_polygon.n.01", "name": "convex_polygon"}, + {"id": 21859, "synset": "concave_polygon.n.01", "name": "concave_polygon"}, + {"id": 21860, "synset": "reentrant_polygon.n.01", "name": "reentrant_polygon"}, + {"id": 21861, "synset": "amorphous_shape.n.01", "name": "amorphous_shape"}, + {"id": 21862, "synset": "closed_curve.n.01", "name": "closed_curve"}, + {"id": 21863, "synset": "simple_closed_curve.n.01", "name": "simple_closed_curve"}, + {"id": 21864, "synset": "s-shape.n.01", "name": "S-shape"}, + {"id": 21865, "synset": "wave.n.07", "name": "wave"}, + {"id": 21866, "synset": "extrados.n.01", "name": "extrados"}, + {"id": 21867, "synset": "hook.n.02", "name": "hook"}, + {"id": 21868, "synset": "envelope.n.03", "name": "envelope"}, + {"id": 21869, "synset": "bight.n.02", "name": "bight"}, + {"id": 21870, "synset": "diameter.n.02", "name": "diameter"}, + {"id": 21871, "synset": "cone.n.02", "name": "cone"}, + {"id": 21872, "synset": "funnel.n.01", "name": "funnel"}, + {"id": 21873, "synset": "oblong.n.01", "name": "oblong"}, + {"id": 21874, "synset": "circle.n.01", "name": "circle"}, + {"id": 21875, "synset": "circle.n.03", "name": "circle"}, + {"id": 21876, "synset": "equator.n.02", "name": "equator"}, + {"id": 21877, "synset": "scallop.n.01", "name": "scallop"}, + {"id": 21878, "synset": "ring.n.02", "name": "ring"}, + {"id": 21879, "synset": "loop.n.02", "name": "loop"}, + {"id": 21880, "synset": "bight.n.01", "name": "bight"}, + {"id": 21881, "synset": "helix.n.01", "name": "helix"}, + {"id": 21882, "synset": "element_of_a_cone.n.01", "name": "element_of_a_cone"}, + { + "id": 21883, + "synset": "element_of_a_cylinder.n.01", + "name": "element_of_a_cylinder", + }, + {"id": 21884, "synset": "ellipse.n.01", "name": "ellipse"}, + {"id": 21885, "synset": "quadrate.n.02", "name": "quadrate"}, + {"id": 21886, "synset": "triangle.n.01", "name": "triangle"}, + {"id": 21887, "synset": "acute_triangle.n.01", "name": "acute_triangle"}, + {"id": 21888, "synset": "isosceles_triangle.n.01", "name": "isosceles_triangle"}, + {"id": 21889, "synset": "obtuse_triangle.n.01", "name": "obtuse_triangle"}, + {"id": 21890, "synset": "right_triangle.n.01", "name": "right_triangle"}, + {"id": 21891, "synset": "scalene_triangle.n.01", "name": "scalene_triangle"}, + {"id": 21892, "synset": "parallel.n.03", "name": "parallel"}, + {"id": 21893, "synset": "trapezoid.n.01", "name": "trapezoid"}, + {"id": 21894, "synset": "star.n.05", "name": "star"}, + {"id": 21895, "synset": "pentagon.n.03", "name": "pentagon"}, + {"id": 21896, "synset": "hexagon.n.01", "name": "hexagon"}, + {"id": 21897, "synset": "heptagon.n.01", "name": "heptagon"}, + {"id": 21898, "synset": "octagon.n.01", "name": "octagon"}, + {"id": 21899, "synset": "nonagon.n.01", "name": "nonagon"}, + {"id": 21900, "synset": "decagon.n.01", "name": "decagon"}, + {"id": 21901, "synset": "rhombus.n.01", "name": "rhombus"}, + {"id": 21902, "synset": "spherical_polygon.n.01", "name": "spherical_polygon"}, + {"id": 21903, "synset": "spherical_triangle.n.01", "name": "spherical_triangle"}, + {"id": 21904, "synset": "convex_polyhedron.n.01", "name": "convex_polyhedron"}, + {"id": 21905, "synset": "concave_polyhedron.n.01", "name": "concave_polyhedron"}, + {"id": 21906, "synset": "cuboid.n.01", "name": "cuboid"}, + {"id": 21907, "synset": "quadrangular_prism.n.01", "name": "quadrangular_prism"}, + {"id": 21908, "synset": "bell.n.05", "name": "bell"}, + {"id": 21909, "synset": "angular_distance.n.01", "name": "angular_distance"}, + {"id": 21910, "synset": "true_anomaly.n.01", "name": "true_anomaly"}, + {"id": 21911, "synset": "spherical_angle.n.01", "name": "spherical_angle"}, + {"id": 21912, "synset": "angle_of_refraction.n.01", "name": "angle_of_refraction"}, + {"id": 21913, "synset": "acute_angle.n.01", "name": "acute_angle"}, + {"id": 21914, "synset": "groove.n.01", "name": "groove"}, + {"id": 21915, "synset": "rut.n.01", "name": "rut"}, + {"id": 21916, "synset": "bulge.n.01", "name": "bulge"}, + {"id": 21917, "synset": "belly.n.03", "name": "belly"}, + {"id": 21918, "synset": "bow.n.05", "name": "bow"}, + {"id": 21919, "synset": "crescent.n.01", "name": "crescent"}, + {"id": 21920, "synset": "ellipsoid.n.01", "name": "ellipsoid"}, + {"id": 21921, "synset": "hypotenuse.n.01", "name": "hypotenuse"}, + {"id": 21922, "synset": "balance.n.04", "name": "balance"}, + {"id": 21923, "synset": "conformation.n.01", "name": "conformation"}, + {"id": 21924, "synset": "symmetry.n.02", "name": "symmetry"}, + {"id": 21925, "synset": "spheroid.n.01", "name": "spheroid"}, + {"id": 21926, "synset": "spherule.n.01", "name": "spherule"}, + {"id": 21927, "synset": "toroid.n.01", "name": "toroid"}, + {"id": 21928, "synset": "column.n.04", "name": "column"}, + {"id": 21929, "synset": "barrel.n.03", "name": "barrel"}, + {"id": 21930, "synset": "pipe.n.03", "name": "pipe"}, + {"id": 21931, "synset": "pellet.n.01", "name": "pellet"}, + {"id": 21932, "synset": "bolus.n.01", "name": "bolus"}, + {"id": 21933, "synset": "dewdrop.n.01", "name": "dewdrop"}, + {"id": 21934, "synset": "ridge.n.02", "name": "ridge"}, + {"id": 21935, "synset": "rim.n.01", "name": "rim"}, + {"id": 21936, "synset": "taper.n.01", "name": "taper"}, + {"id": 21937, "synset": "boundary.n.02", "name": "boundary"}, + {"id": 21938, "synset": "incisure.n.01", "name": "incisure"}, + {"id": 21939, "synset": "notch.n.01", "name": "notch"}, + {"id": 21940, "synset": "wrinkle.n.01", "name": "wrinkle"}, + {"id": 21941, "synset": "dermatoglyphic.n.01", "name": "dermatoglyphic"}, + {"id": 21942, "synset": "frown_line.n.01", "name": "frown_line"}, + {"id": 21943, "synset": "line_of_life.n.01", "name": "line_of_life"}, + {"id": 21944, "synset": "line_of_heart.n.01", "name": "line_of_heart"}, + {"id": 21945, "synset": "crevice.n.01", "name": "crevice"}, + {"id": 21946, "synset": "cleft.n.01", "name": "cleft"}, + {"id": 21947, "synset": "roulette.n.01", "name": "roulette"}, + {"id": 21948, "synset": "node.n.01", "name": "node"}, + {"id": 21949, "synset": "tree.n.02", "name": "tree"}, + {"id": 21950, "synset": "stemma.n.01", "name": "stemma"}, + {"id": 21951, "synset": "brachium.n.01", "name": "brachium"}, + {"id": 21952, "synset": "fork.n.03", "name": "fork"}, + {"id": 21953, "synset": "block.n.03", "name": "block"}, + {"id": 21954, "synset": "ovoid.n.01", "name": "ovoid"}, + {"id": 21955, "synset": "tetrahedron.n.01", "name": "tetrahedron"}, + {"id": 21956, "synset": "pentahedron.n.01", "name": "pentahedron"}, + {"id": 21957, "synset": "hexahedron.n.01", "name": "hexahedron"}, + {"id": 21958, "synset": "regular_polyhedron.n.01", "name": "regular_polyhedron"}, + {"id": 21959, "synset": "polyhedral_angle.n.01", "name": "polyhedral_angle"}, + {"id": 21960, "synset": "cube.n.01", "name": "cube"}, + {"id": 21961, "synset": "truncated_pyramid.n.01", "name": "truncated_pyramid"}, + {"id": 21962, "synset": "truncated_cone.n.01", "name": "truncated_cone"}, + {"id": 21963, "synset": "tail.n.03", "name": "tail"}, + {"id": 21964, "synset": "tongue.n.03", "name": "tongue"}, + {"id": 21965, "synset": "trapezohedron.n.01", "name": "trapezohedron"}, + {"id": 21966, "synset": "wedge.n.01", "name": "wedge"}, + {"id": 21967, "synset": "keel.n.01", "name": "keel"}, + {"id": 21968, "synset": "place.n.06", "name": "place"}, + {"id": 21969, "synset": "herpes.n.01", "name": "herpes"}, + {"id": 21970, "synset": "chlamydia.n.01", "name": "chlamydia"}, + {"id": 21971, "synset": "wall.n.04", "name": "wall"}, + {"id": 21972, "synset": "micronutrient.n.01", "name": "micronutrient"}, + {"id": 21973, "synset": "chyme.n.01", "name": "chyme"}, + {"id": 21974, "synset": "ragweed_pollen.n.01", "name": "ragweed_pollen"}, + {"id": 21975, "synset": "pina_cloth.n.01", "name": "pina_cloth"}, + { + "id": 21976, + "synset": "chlorobenzylidenemalononitrile.n.01", + "name": "chlorobenzylidenemalononitrile", + }, + {"id": 21977, "synset": "carbon.n.01", "name": "carbon"}, + {"id": 21978, "synset": "charcoal.n.01", "name": "charcoal"}, + {"id": 21979, "synset": "rock.n.02", "name": "rock"}, + {"id": 21980, "synset": "gravel.n.01", "name": "gravel"}, + {"id": 21981, "synset": "aflatoxin.n.01", "name": "aflatoxin"}, + {"id": 21982, "synset": "alpha-tocopheral.n.01", "name": "alpha-tocopheral"}, + {"id": 21983, "synset": "leopard.n.01", "name": "leopard"}, + {"id": 21984, "synset": "bricks_and_mortar.n.01", "name": "bricks_and_mortar"}, + {"id": 21985, "synset": "lagging.n.01", "name": "lagging"}, + {"id": 21986, "synset": "hydraulic_cement.n.01", "name": "hydraulic_cement"}, + {"id": 21987, "synset": "choline.n.01", "name": "choline"}, + {"id": 21988, "synset": "concrete.n.01", "name": "concrete"}, + {"id": 21989, "synset": "glass_wool.n.01", "name": "glass_wool"}, + {"id": 21990, "synset": "soil.n.02", "name": "soil"}, + {"id": 21991, "synset": "high_explosive.n.01", "name": "high_explosive"}, + {"id": 21992, "synset": "litter.n.02", "name": "litter"}, + {"id": 21993, "synset": "fish_meal.n.01", "name": "fish_meal"}, + {"id": 21994, "synset": "greek_fire.n.01", "name": "Greek_fire"}, + {"id": 21995, "synset": "culture_medium.n.01", "name": "culture_medium"}, + {"id": 21996, "synset": "agar.n.01", "name": "agar"}, + {"id": 21997, "synset": "blood_agar.n.01", "name": "blood_agar"}, + {"id": 21998, "synset": "hip_tile.n.01", "name": "hip_tile"}, + {"id": 21999, "synset": "hyacinth.n.01", "name": "hyacinth"}, + {"id": 22000, "synset": "hydroxide_ion.n.01", "name": "hydroxide_ion"}, + {"id": 22001, "synset": "ice.n.01", "name": "ice"}, + {"id": 22002, "synset": "inositol.n.01", "name": "inositol"}, + {"id": 22003, "synset": "linoleum.n.01", "name": "linoleum"}, + {"id": 22004, "synset": "lithia_water.n.01", "name": "lithia_water"}, + {"id": 22005, "synset": "lodestone.n.01", "name": "lodestone"}, + {"id": 22006, "synset": "pantothenic_acid.n.01", "name": "pantothenic_acid"}, + {"id": 22007, "synset": "paper.n.01", "name": "paper"}, + {"id": 22008, "synset": "papyrus.n.01", "name": "papyrus"}, + {"id": 22009, "synset": "pantile.n.01", "name": "pantile"}, + {"id": 22010, "synset": "blacktop.n.01", "name": "blacktop"}, + {"id": 22011, "synset": "tarmacadam.n.01", "name": "tarmacadam"}, + {"id": 22012, "synset": "paving.n.01", "name": "paving"}, + {"id": 22013, "synset": "plaster.n.01", "name": "plaster"}, + {"id": 22014, "synset": "poison_gas.n.01", "name": "poison_gas"}, + {"id": 22015, "synset": "ridge_tile.n.01", "name": "ridge_tile"}, + {"id": 22016, "synset": "roughcast.n.01", "name": "roughcast"}, + {"id": 22017, "synset": "sand.n.01", "name": "sand"}, + {"id": 22018, "synset": "spackle.n.01", "name": "spackle"}, + {"id": 22019, "synset": "render.n.01", "name": "render"}, + {"id": 22020, "synset": "wattle_and_daub.n.01", "name": "wattle_and_daub"}, + {"id": 22021, "synset": "stucco.n.01", "name": "stucco"}, + {"id": 22022, "synset": "tear_gas.n.01", "name": "tear_gas"}, + {"id": 22023, "synset": "linseed.n.01", "name": "linseed"}, + {"id": 22024, "synset": "vitamin.n.01", "name": "vitamin"}, + {"id": 22025, "synset": "fat-soluble_vitamin.n.01", "name": "fat-soluble_vitamin"}, + { + "id": 22026, + "synset": "water-soluble_vitamin.n.01", + "name": "water-soluble_vitamin", + }, + {"id": 22027, "synset": "vitamin_a.n.01", "name": "vitamin_A"}, + {"id": 22028, "synset": "vitamin_a1.n.01", "name": "vitamin_A1"}, + {"id": 22029, "synset": "vitamin_a2.n.01", "name": "vitamin_A2"}, + {"id": 22030, "synset": "b-complex_vitamin.n.01", "name": "B-complex_vitamin"}, + {"id": 22031, "synset": "vitamin_b1.n.01", "name": "vitamin_B1"}, + {"id": 22032, "synset": "vitamin_b12.n.01", "name": "vitamin_B12"}, + {"id": 22033, "synset": "vitamin_b2.n.01", "name": "vitamin_B2"}, + {"id": 22034, "synset": "vitamin_b6.n.01", "name": "vitamin_B6"}, + {"id": 22035, "synset": "vitamin_bc.n.01", "name": "vitamin_Bc"}, + {"id": 22036, "synset": "niacin.n.01", "name": "niacin"}, + {"id": 22037, "synset": "vitamin_d.n.01", "name": "vitamin_D"}, + {"id": 22038, "synset": "vitamin_e.n.01", "name": "vitamin_E"}, + {"id": 22039, "synset": "biotin.n.01", "name": "biotin"}, + {"id": 22040, "synset": "vitamin_k.n.01", "name": "vitamin_K"}, + {"id": 22041, "synset": "vitamin_k1.n.01", "name": "vitamin_K1"}, + {"id": 22042, "synset": "vitamin_k3.n.01", "name": "vitamin_K3"}, + {"id": 22043, "synset": "vitamin_p.n.01", "name": "vitamin_P"}, + {"id": 22044, "synset": "vitamin_c.n.01", "name": "vitamin_C"}, + {"id": 22045, "synset": "planking.n.01", "name": "planking"}, + {"id": 22046, "synset": "chipboard.n.01", "name": "chipboard"}, + {"id": 22047, "synset": "knothole.n.01", "name": "knothole"}, +] # noqa diff --git a/dimos/models/Detic/detic/data/datasets/lvis_v1.py b/dimos/models/Detic/detic/data/datasets/lvis_v1.py index 4b9b279f17..75d8bcc334 100644 --- a/dimos/models/Detic/detic/data/datasets/lvis_v1.py +++ b/dimos/models/Detic/detic/data/datasets/lvis_v1.py @@ -14,23 +14,22 @@ def custom_register_lvis_instances(name, metadata, json_file, image_root): - """ - """ - DatasetCatalog.register(name, lambda: custom_load_lvis_json( - json_file, image_root, name)) + """ """ + DatasetCatalog.register( + name, lambda: custom_load_lvis_json(json_file, image_root, name) + ) MetadataCatalog.get(name).set( - json_file=json_file, image_root=image_root, - evaluator_type="lvis", **metadata + json_file=json_file, image_root=image_root, evaluator_type="lvis", **metadata ) def custom_load_lvis_json(json_file, image_root, dataset_name=None): - ''' + """ Modifications: use `file_name` convert neg_category_ids add pos_category_ids - ''' + """ from lvis import LVIS json_file = PathManager.get_local_path(json_file) @@ -38,75 +37,88 @@ def custom_load_lvis_json(json_file, image_root, dataset_name=None): timer = Timer() lvis_api = LVIS(json_file) if timer.seconds() > 1: - logger.info("Loading {} takes {:.2f} seconds.".format( - json_file, timer.seconds())) - - catid2contid = {x['id']: i for i, x in enumerate( - sorted(lvis_api.dataset['categories'], key=lambda x: x['id']))} - if len(lvis_api.dataset['categories']) == 1203: - for x in lvis_api.dataset['categories']: - assert catid2contid[x['id']] == x['id'] - 1 + logger.info( + "Loading {} takes {:.2f} seconds.".format(json_file, timer.seconds()) + ) + + catid2contid = { + x["id"]: i + for i, x in enumerate( + sorted(lvis_api.dataset["categories"], key=lambda x: x["id"]) + ) + } + if len(lvis_api.dataset["categories"]) == 1203: + for x in lvis_api.dataset["categories"]: + assert catid2contid[x["id"]] == x["id"] - 1 img_ids = sorted(lvis_api.imgs.keys()) imgs = lvis_api.load_imgs(img_ids) anns = [lvis_api.img_ann_map[img_id] for img_id in img_ids] ann_ids = [ann["id"] for anns_per_image in anns for ann in anns_per_image] - assert len(set(ann_ids)) == len(ann_ids), \ + assert len(set(ann_ids)) == len(ann_ids), ( "Annotation ids in '{}' are not unique".format(json_file) + ) imgs_anns = list(zip(imgs, anns)) - logger.info("Loaded {} images in the LVIS v1 format from {}".format( - len(imgs_anns), json_file)) + logger.info( + "Loaded {} images in the LVIS v1 format from {}".format( + len(imgs_anns), json_file + ) + ) dataset_dicts = [] - for (img_dict, anno_dict_list) in imgs_anns: + for img_dict, anno_dict_list in imgs_anns: record = {} if "file_name" in img_dict: file_name = img_dict["file_name"] if img_dict["file_name"].startswith("COCO"): file_name = file_name[-16:] record["file_name"] = os.path.join(image_root, file_name) - elif 'coco_url' in img_dict: + elif "coco_url" in img_dict: # e.g., http://images.cocodataset.org/train2017/000000391895.jpg file_name = img_dict["coco_url"][30:] record["file_name"] = os.path.join(image_root, file_name) - elif 'tar_index' in img_dict: - record['tar_index'] = img_dict['tar_index'] - + elif "tar_index" in img_dict: + record["tar_index"] = img_dict["tar_index"] + record["height"] = img_dict["height"] record["width"] = img_dict["width"] record["not_exhaustive_category_ids"] = img_dict.get( - "not_exhaustive_category_ids", []) + "not_exhaustive_category_ids", [] + ) record["neg_category_ids"] = img_dict.get("neg_category_ids", []) # NOTE: modified by Xingyi: convert to 0-based record["neg_category_ids"] = [ - catid2contid[x] for x in record["neg_category_ids"]] - if 'pos_category_ids' in img_dict: - record['pos_category_ids'] = [ - catid2contid[x] for x in img_dict.get("pos_category_ids", [])] - if 'captions' in img_dict: - record['captions'] = img_dict['captions'] - if 'caption_features' in img_dict: - record['caption_features'] = img_dict['caption_features'] + catid2contid[x] for x in record["neg_category_ids"] + ] + if "pos_category_ids" in img_dict: + record["pos_category_ids"] = [ + catid2contid[x] for x in img_dict.get("pos_category_ids", []) + ] + if "captions" in img_dict: + record["captions"] = img_dict["captions"] + if "caption_features" in img_dict: + record["caption_features"] = img_dict["caption_features"] image_id = record["image_id"] = img_dict["id"] objs = [] for anno in anno_dict_list: assert anno["image_id"] == image_id - if anno.get('iscrowd', 0) > 0: + if anno.get("iscrowd", 0) > 0: continue obj = {"bbox": anno["bbox"], "bbox_mode": BoxMode.XYWH_ABS} - obj["category_id"] = catid2contid[anno['category_id']] - if 'segmentation' in anno: + obj["category_id"] = catid2contid[anno["category_id"]] + if "segmentation" in anno: segm = anno["segmentation"] - valid_segm = [poly for poly in segm \ - if len(poly) % 2 == 0 and len(poly) >= 6] + valid_segm = [ + poly for poly in segm if len(poly) % 2 == 0 and len(poly) >= 6 + ] # assert len(segm) == len( # valid_segm # ), "Annotation contains an invalid polygon with < 3 points" if not len(segm) == len(valid_segm): - print('Annotation contains an invalid polygon with < 3 points') + print("Annotation contains an invalid polygon with < 3 points") assert len(segm) > 0 obj["segmentation"] = segm objs.append(obj) @@ -115,6 +127,7 @@ def custom_load_lvis_json(json_file, image_root, dataset_name=None): return dataset_dicts + _CUSTOM_SPLITS_LVIS = { "lvis_v1_train+coco": ("coco/", "lvis/lvis_v1_train+coco_mask.json"), "lvis_v1_train_norare": ("coco/", "lvis/lvis_v1_train_norare.json"), @@ -132,16 +145,18 @@ def custom_load_lvis_json(json_file, image_root, dataset_name=None): def get_lvis_22k_meta(): from .lvis_22k_categories import CATEGORIES + cat_ids = [k["id"] for k in CATEGORIES] - assert min(cat_ids) == 1 and max(cat_ids) == len( - cat_ids - ), "Category ids are not in [1, #categories], as expected" + assert min(cat_ids) == 1 and max(cat_ids) == len(cat_ids), ( + "Category ids are not in [1, #categories], as expected" + ) # Ensure that the category list is sorted by id lvis_categories = sorted(CATEGORIES, key=lambda x: x["id"]) thing_classes = [k["name"] for k in lvis_categories] meta = {"thing_classes": thing_classes} return meta + _CUSTOM_SPLITS_LVIS_22K = { "lvis_v1_train_22k": ("coco/", "lvis/lvis_v1_train_lvis-22k.json"), } @@ -152,4 +167,4 @@ def get_lvis_22k_meta(): get_lvis_22k_meta(), os.path.join("datasets", json_file) if "://" not in json_file else json_file, os.path.join("datasets", image_root), - ) \ No newline at end of file + ) diff --git a/dimos/models/Detic/detic/data/datasets/objects365.py b/dimos/models/Detic/detic/data/datasets/objects365.py index b98128738b..05ef6158ce 100644 --- a/dimos/models/Detic/detic/data/datasets/objects365.py +++ b/dimos/models/Detic/detic/data/datasets/objects365.py @@ -370,395 +370,406 @@ # {'id': 365, 'name': 'Table Tennis '}, # ] -''' +""" The official Objects365 category names contains typos. Below is a manual fix. -''' +""" categories_v2_fix = [ - {'id': 1, 'name': 'Person'}, - {'id': 2, 'name': 'Sneakers'}, - {'id': 3, 'name': 'Chair'}, - {'id': 4, 'name': 'Other Shoes'}, - {'id': 5, 'name': 'Hat'}, - {'id': 6, 'name': 'Car'}, - {'id': 7, 'name': 'Lamp'}, - {'id': 8, 'name': 'Glasses'}, - {'id': 9, 'name': 'Bottle'}, - {'id': 10, 'name': 'Desk'}, - {'id': 11, 'name': 'Cup'}, - {'id': 12, 'name': 'Street Lights'}, - {'id': 13, 'name': 'Cabinet/shelf'}, - {'id': 14, 'name': 'Handbag/Satchel'}, - {'id': 15, 'name': 'Bracelet'}, - {'id': 16, 'name': 'Plate'}, - {'id': 17, 'name': 'Picture/Frame'}, - {'id': 18, 'name': 'Helmet'}, - {'id': 19, 'name': 'Book'}, - {'id': 20, 'name': 'Gloves'}, - {'id': 21, 'name': 'Storage box'}, - {'id': 22, 'name': 'Boat'}, - {'id': 23, 'name': 'Leather Shoes'}, - {'id': 24, 'name': 'Flower'}, - {'id': 25, 'name': 'Bench'}, - {'id': 26, 'name': 'Potted Plant'}, - {'id': 27, 'name': 'Bowl/Basin'}, - {'id': 28, 'name': 'Flag'}, - {'id': 29, 'name': 'Pillow'}, - {'id': 30, 'name': 'Boots'}, - {'id': 31, 'name': 'Vase'}, - {'id': 32, 'name': 'Microphone'}, - {'id': 33, 'name': 'Necklace'}, - {'id': 34, 'name': 'Ring'}, - {'id': 35, 'name': 'SUV'}, - {'id': 36, 'name': 'Wine Glass'}, - {'id': 37, 'name': 'Belt'}, - {'id': 38, 'name': 'Monitor/TV'}, - {'id': 39, 'name': 'Backpack'}, - {'id': 40, 'name': 'Umbrella'}, - {'id': 41, 'name': 'Traffic Light'}, - {'id': 42, 'name': 'Speaker'}, - {'id': 43, 'name': 'Watch'}, - {'id': 44, 'name': 'Tie'}, - {'id': 45, 'name': 'Trash bin Can'}, - {'id': 46, 'name': 'Slippers'}, - {'id': 47, 'name': 'Bicycle'}, - {'id': 48, 'name': 'Stool'}, - {'id': 49, 'name': 'Barrel/bucket'}, - {'id': 50, 'name': 'Van'}, - {'id': 51, 'name': 'Couch'}, - {'id': 52, 'name': 'Sandals'}, - {'id': 53, 'name': 'Basket'}, - {'id': 54, 'name': 'Drum'}, - {'id': 55, 'name': 'Pen/Pencil'}, - {'id': 56, 'name': 'Bus'}, - {'id': 57, 'name': 'Wild Bird'}, - {'id': 58, 'name': 'High Heels'}, - {'id': 59, 'name': 'Motorcycle'}, - {'id': 60, 'name': 'Guitar'}, - {'id': 61, 'name': 'Carpet'}, - {'id': 62, 'name': 'Cell Phone'}, - {'id': 63, 'name': 'Bread'}, - {'id': 64, 'name': 'Camera'}, - {'id': 65, 'name': 'Canned'}, - {'id': 66, 'name': 'Truck'}, - {'id': 67, 'name': 'Traffic cone'}, - {'id': 68, 'name': 'Cymbal'}, - {'id': 69, 'name': 'Lifesaver'}, - {'id': 70, 'name': 'Towel'}, - {'id': 71, 'name': 'Stuffed Toy'}, - {'id': 72, 'name': 'Candle'}, - {'id': 73, 'name': 'Sailboat'}, - {'id': 74, 'name': 'Laptop'}, - {'id': 75, 'name': 'Awning'}, - {'id': 76, 'name': 'Bed'}, - {'id': 77, 'name': 'Faucet'}, - {'id': 78, 'name': 'Tent'}, - {'id': 79, 'name': 'Horse'}, - {'id': 80, 'name': 'Mirror'}, - {'id': 81, 'name': 'Power outlet'}, - {'id': 82, 'name': 'Sink'}, - {'id': 83, 'name': 'Apple'}, - {'id': 84, 'name': 'Air Conditioner'}, - {'id': 85, 'name': 'Knife'}, - {'id': 86, 'name': 'Hockey Stick'}, - {'id': 87, 'name': 'Paddle'}, - {'id': 88, 'name': 'Pickup Truck'}, - {'id': 89, 'name': 'Fork'}, - {'id': 90, 'name': 'Traffic Sign'}, - {'id': 91, 'name': 'Ballon'}, - {'id': 92, 'name': 'Tripod'}, - {'id': 93, 'name': 'Dog'}, - {'id': 94, 'name': 'Spoon'}, - {'id': 95, 'name': 'Clock'}, - {'id': 96, 'name': 'Pot'}, - {'id': 97, 'name': 'Cow'}, - {'id': 98, 'name': 'Cake'}, - {'id': 99, 'name': 'Dining Table'}, - {'id': 100, 'name': 'Sheep'}, - {'id': 101, 'name': 'Hanger'}, - {'id': 102, 'name': 'Blackboard/Whiteboard'}, - {'id': 103, 'name': 'Napkin'}, - {'id': 104, 'name': 'Other Fish'}, - {'id': 105, 'name': 'Orange/Tangerine'}, - {'id': 106, 'name': 'Toiletry'}, - {'id': 107, 'name': 'Keyboard'}, - {'id': 108, 'name': 'Tomato'}, - {'id': 109, 'name': 'Lantern'}, - {'id': 110, 'name': 'Machinery Vehicle'}, - {'id': 111, 'name': 'Fan'}, - {'id': 112, 'name': 'Green Vegetables'}, - {'id': 113, 'name': 'Banana'}, - {'id': 114, 'name': 'Baseball Glove'}, - {'id': 115, 'name': 'Airplane'}, - {'id': 116, 'name': 'Mouse'}, - {'id': 117, 'name': 'Train'}, - {'id': 118, 'name': 'Pumpkin'}, - {'id': 119, 'name': 'Soccer'}, - {'id': 120, 'name': 'Skiboard'}, - {'id': 121, 'name': 'Luggage'}, - {'id': 122, 'name': 'Nightstand'}, - {'id': 123, 'name': 'Teapot'}, - {'id': 124, 'name': 'Telephone'}, - {'id': 125, 'name': 'Trolley'}, - {'id': 126, 'name': 'Head Phone'}, - {'id': 127, 'name': 'Sports Car'}, - {'id': 128, 'name': 'Stop Sign'}, - {'id': 129, 'name': 'Dessert'}, - {'id': 130, 'name': 'Scooter'}, - {'id': 131, 'name': 'Stroller'}, - {'id': 132, 'name': 'Crane'}, - {'id': 133, 'name': 'Remote'}, - {'id': 134, 'name': 'Refrigerator'}, - {'id': 135, 'name': 'Oven'}, - {'id': 136, 'name': 'Lemon'}, - {'id': 137, 'name': 'Duck'}, - {'id': 138, 'name': 'Baseball Bat'}, - {'id': 139, 'name': 'Surveillance Camera'}, - {'id': 140, 'name': 'Cat'}, - {'id': 141, 'name': 'Jug'}, - {'id': 142, 'name': 'Broccoli'}, - {'id': 143, 'name': 'Piano'}, - {'id': 144, 'name': 'Pizza'}, - {'id': 145, 'name': 'Elephant'}, - {'id': 146, 'name': 'Skateboard'}, - {'id': 147, 'name': 'Surfboard'}, - {'id': 148, 'name': 'Gun'}, - {'id': 149, 'name': 'Skating and Skiing shoes'}, - {'id': 150, 'name': 'Gas stove'}, - {'id': 151, 'name': 'Donut'}, - {'id': 152, 'name': 'Bow Tie'}, - {'id': 153, 'name': 'Carrot'}, - {'id': 154, 'name': 'Toilet'}, - {'id': 155, 'name': 'Kite'}, - {'id': 156, 'name': 'Strawberry'}, - {'id': 157, 'name': 'Other Balls'}, - {'id': 158, 'name': 'Shovel'}, - {'id': 159, 'name': 'Pepper'}, - {'id': 160, 'name': 'Computer Box'}, - {'id': 161, 'name': 'Toilet Paper'}, - {'id': 162, 'name': 'Cleaning Products'}, - {'id': 163, 'name': 'Chopsticks'}, - {'id': 164, 'name': 'Microwave'}, - {'id': 165, 'name': 'Pigeon'}, - {'id': 166, 'name': 'Baseball'}, - {'id': 167, 'name': 'Cutting/chopping Board'}, - {'id': 168, 'name': 'Coffee Table'}, - {'id': 169, 'name': 'Side Table'}, - {'id': 170, 'name': 'Scissors'}, - {'id': 171, 'name': 'Marker'}, - {'id': 172, 'name': 'Pie'}, - {'id': 173, 'name': 'Ladder'}, - {'id': 174, 'name': 'Snowboard'}, - {'id': 175, 'name': 'Cookies'}, - {'id': 176, 'name': 'Radiator'}, - {'id': 177, 'name': 'Fire Hydrant'}, - {'id': 178, 'name': 'Basketball'}, - {'id': 179, 'name': 'Zebra'}, - {'id': 180, 'name': 'Grape'}, - {'id': 181, 'name': 'Giraffe'}, - {'id': 182, 'name': 'Potato'}, - {'id': 183, 'name': 'Sausage'}, - {'id': 184, 'name': 'Tricycle'}, - {'id': 185, 'name': 'Violin'}, - {'id': 186, 'name': 'Egg'}, - {'id': 187, 'name': 'Fire Extinguisher'}, - {'id': 188, 'name': 'Candy'}, - {'id': 189, 'name': 'Fire Truck'}, - {'id': 190, 'name': 'Billards'}, - {'id': 191, 'name': 'Converter'}, - {'id': 192, 'name': 'Bathtub'}, - {'id': 193, 'name': 'Wheelchair'}, - {'id': 194, 'name': 'Golf Club'}, - {'id': 195, 'name': 'Briefcase'}, - {'id': 196, 'name': 'Cucumber'}, - {'id': 197, 'name': 'Cigar/Cigarette '}, - {'id': 198, 'name': 'Paint Brush'}, - {'id': 199, 'name': 'Pear'}, - {'id': 200, 'name': 'Heavy Truck'}, - {'id': 201, 'name': 'Hamburger'}, - {'id': 202, 'name': 'Extractor'}, - {'id': 203, 'name': 'Extension Cord'}, - {'id': 204, 'name': 'Tong'}, - {'id': 205, 'name': 'Tennis Racket'}, - {'id': 206, 'name': 'Folder'}, - {'id': 207, 'name': 'American Football'}, - {'id': 208, 'name': 'earphone'}, - {'id': 209, 'name': 'Mask'}, - {'id': 210, 'name': 'Kettle'}, - {'id': 211, 'name': 'Tennis'}, - {'id': 212, 'name': 'Ship'}, - {'id': 213, 'name': 'Swing'}, - {'id': 214, 'name': 'Coffee Machine'}, - {'id': 215, 'name': 'Slide'}, - {'id': 216, 'name': 'Carriage'}, - {'id': 217, 'name': 'Onion'}, - {'id': 218, 'name': 'Green beans'}, - {'id': 219, 'name': 'Projector'}, - {'id': 220, 'name': 'Frisbee'}, - {'id': 221, 'name': 'Washing Machine/Drying Machine'}, - {'id': 222, 'name': 'Chicken'}, - {'id': 223, 'name': 'Printer'}, - {'id': 224, 'name': 'Watermelon'}, - {'id': 225, 'name': 'Saxophone'}, - {'id': 226, 'name': 'Tissue'}, - {'id': 227, 'name': 'Toothbrush'}, - {'id': 228, 'name': 'Ice cream'}, - {'id': 229, 'name': 'Hot air balloon'}, - {'id': 230, 'name': 'Cello'}, - {'id': 231, 'name': 'French Fries'}, - {'id': 232, 'name': 'Scale'}, - {'id': 233, 'name': 'Trophy'}, - {'id': 234, 'name': 'Cabbage'}, - {'id': 235, 'name': 'Hot dog'}, - {'id': 236, 'name': 'Blender'}, - {'id': 237, 'name': 'Peach'}, - {'id': 238, 'name': 'Rice'}, - {'id': 239, 'name': 'Wallet/Purse'}, - {'id': 240, 'name': 'Volleyball'}, - {'id': 241, 'name': 'Deer'}, - {'id': 242, 'name': 'Goose'}, - {'id': 243, 'name': 'Tape'}, - {'id': 244, 'name': 'Tablet'}, - {'id': 245, 'name': 'Cosmetics'}, - {'id': 246, 'name': 'Trumpet'}, - {'id': 247, 'name': 'Pineapple'}, - {'id': 248, 'name': 'Golf Ball'}, - {'id': 249, 'name': 'Ambulance'}, - {'id': 250, 'name': 'Parking meter'}, - {'id': 251, 'name': 'Mango'}, - {'id': 252, 'name': 'Key'}, - {'id': 253, 'name': 'Hurdle'}, - {'id': 254, 'name': 'Fishing Rod'}, - {'id': 255, 'name': 'Medal'}, - {'id': 256, 'name': 'Flute'}, - {'id': 257, 'name': 'Brush'}, - {'id': 258, 'name': 'Penguin'}, - {'id': 259, 'name': 'Megaphone'}, - {'id': 260, 'name': 'Corn'}, - {'id': 261, 'name': 'Lettuce'}, - {'id': 262, 'name': 'Garlic'}, - {'id': 263, 'name': 'Swan'}, - {'id': 264, 'name': 'Helicopter'}, - {'id': 265, 'name': 'Green Onion'}, - {'id': 266, 'name': 'Sandwich'}, - {'id': 267, 'name': 'Nuts'}, - {'id': 268, 'name': 'Speed Limit Sign'}, - {'id': 269, 'name': 'Induction Cooker'}, - {'id': 270, 'name': 'Broom'}, - {'id': 271, 'name': 'Trombone'}, - {'id': 272, 'name': 'Plum'}, - {'id': 273, 'name': 'Rickshaw'}, - {'id': 274, 'name': 'Goldfish'}, - {'id': 275, 'name': 'Kiwi fruit'}, - {'id': 276, 'name': 'Router/modem'}, - {'id': 277, 'name': 'Poker Card'}, - {'id': 278, 'name': 'Toaster'}, - {'id': 279, 'name': 'Shrimp'}, - {'id': 280, 'name': 'Sushi'}, - {'id': 281, 'name': 'Cheese'}, - {'id': 282, 'name': 'Notepaper'}, - {'id': 283, 'name': 'Cherry'}, - {'id': 284, 'name': 'Pliers'}, - {'id': 285, 'name': 'CD'}, - {'id': 286, 'name': 'Pasta'}, - {'id': 287, 'name': 'Hammer'}, - {'id': 288, 'name': 'Cue'}, - {'id': 289, 'name': 'Avocado'}, - {'id': 290, 'name': 'Hami melon'}, - {'id': 291, 'name': 'Flask'}, - {'id': 292, 'name': 'Mushroom'}, - {'id': 293, 'name': 'Screwdriver'}, - {'id': 294, 'name': 'Soap'}, - {'id': 295, 'name': 'Recorder'}, - {'id': 296, 'name': 'Bear'}, - {'id': 297, 'name': 'Eggplant'}, - {'id': 298, 'name': 'Board Eraser'}, - {'id': 299, 'name': 'Coconut'}, - {'id': 300, 'name': 'Tape Measure/ Ruler'}, - {'id': 301, 'name': 'Pig'}, - {'id': 302, 'name': 'Showerhead'}, - {'id': 303, 'name': 'Globe'}, - {'id': 304, 'name': 'Chips'}, - {'id': 305, 'name': 'Steak'}, - {'id': 306, 'name': 'Crosswalk Sign'}, - {'id': 307, 'name': 'Stapler'}, - {'id': 308, 'name': 'Camel'}, - {'id': 309, 'name': 'Formula 1 '}, - {'id': 310, 'name': 'Pomegranate'}, - {'id': 311, 'name': 'Dishwasher'}, - {'id': 312, 'name': 'Crab'}, - {'id': 313, 'name': 'Hoverboard'}, - {'id': 314, 'name': 'Meatball'}, - {'id': 315, 'name': 'Rice Cooker'}, - {'id': 316, 'name': 'Tuba'}, - {'id': 317, 'name': 'Calculator'}, - {'id': 318, 'name': 'Papaya'}, - {'id': 319, 'name': 'Antelope'}, - {'id': 320, 'name': 'Parrot'}, - {'id': 321, 'name': 'Seal'}, - {'id': 322, 'name': 'Butterfly'}, - {'id': 323, 'name': 'Dumbbell'}, - {'id': 324, 'name': 'Donkey'}, - {'id': 325, 'name': 'Lion'}, - {'id': 326, 'name': 'Urinal'}, - {'id': 327, 'name': 'Dolphin'}, - {'id': 328, 'name': 'Electric Drill'}, - {'id': 329, 'name': 'Hair Dryer'}, - {'id': 330, 'name': 'Egg tart'}, - {'id': 331, 'name': 'Jellyfish'}, - {'id': 332, 'name': 'Treadmill'}, - {'id': 333, 'name': 'Lighter'}, - {'id': 334, 'name': 'Grapefruit'}, - {'id': 335, 'name': 'Game board'}, - {'id': 336, 'name': 'Mop'}, - {'id': 337, 'name': 'Radish'}, - {'id': 338, 'name': 'Baozi'}, - {'id': 339, 'name': 'Target'}, - {'id': 340, 'name': 'French'}, - {'id': 341, 'name': 'Spring Rolls'}, - {'id': 342, 'name': 'Monkey'}, - {'id': 343, 'name': 'Rabbit'}, - {'id': 344, 'name': 'Pencil Case'}, - {'id': 345, 'name': 'Yak'}, - {'id': 346, 'name': 'Red Cabbage'}, - {'id': 347, 'name': 'Binoculars'}, - {'id': 348, 'name': 'Asparagus'}, - {'id': 349, 'name': 'Barbell'}, - {'id': 350, 'name': 'Scallop'}, - {'id': 351, 'name': 'Noddles'}, - {'id': 352, 'name': 'Comb'}, - {'id': 353, 'name': 'Dumpling'}, - {'id': 354, 'name': 'Oyster'}, - {'id': 355, 'name': 'Table Tennis paddle'}, - {'id': 356, 'name': 'Cosmetics Brush/Eyeliner Pencil'}, - {'id': 357, 'name': 'Chainsaw'}, - {'id': 358, 'name': 'Eraser'}, - {'id': 359, 'name': 'Lobster'}, - {'id': 360, 'name': 'Durian'}, - {'id': 361, 'name': 'Okra'}, - {'id': 362, 'name': 'Lipstick'}, - {'id': 363, 'name': 'Cosmetics Mirror'}, - {'id': 364, 'name': 'Curling'}, - {'id': 365, 'name': 'Table Tennis '}, + {"id": 1, "name": "Person"}, + {"id": 2, "name": "Sneakers"}, + {"id": 3, "name": "Chair"}, + {"id": 4, "name": "Other Shoes"}, + {"id": 5, "name": "Hat"}, + {"id": 6, "name": "Car"}, + {"id": 7, "name": "Lamp"}, + {"id": 8, "name": "Glasses"}, + {"id": 9, "name": "Bottle"}, + {"id": 10, "name": "Desk"}, + {"id": 11, "name": "Cup"}, + {"id": 12, "name": "Street Lights"}, + {"id": 13, "name": "Cabinet/shelf"}, + {"id": 14, "name": "Handbag/Satchel"}, + {"id": 15, "name": "Bracelet"}, + {"id": 16, "name": "Plate"}, + {"id": 17, "name": "Picture/Frame"}, + {"id": 18, "name": "Helmet"}, + {"id": 19, "name": "Book"}, + {"id": 20, "name": "Gloves"}, + {"id": 21, "name": "Storage box"}, + {"id": 22, "name": "Boat"}, + {"id": 23, "name": "Leather Shoes"}, + {"id": 24, "name": "Flower"}, + {"id": 25, "name": "Bench"}, + {"id": 26, "name": "Potted Plant"}, + {"id": 27, "name": "Bowl/Basin"}, + {"id": 28, "name": "Flag"}, + {"id": 29, "name": "Pillow"}, + {"id": 30, "name": "Boots"}, + {"id": 31, "name": "Vase"}, + {"id": 32, "name": "Microphone"}, + {"id": 33, "name": "Necklace"}, + {"id": 34, "name": "Ring"}, + {"id": 35, "name": "SUV"}, + {"id": 36, "name": "Wine Glass"}, + {"id": 37, "name": "Belt"}, + {"id": 38, "name": "Monitor/TV"}, + {"id": 39, "name": "Backpack"}, + {"id": 40, "name": "Umbrella"}, + {"id": 41, "name": "Traffic Light"}, + {"id": 42, "name": "Speaker"}, + {"id": 43, "name": "Watch"}, + {"id": 44, "name": "Tie"}, + {"id": 45, "name": "Trash bin Can"}, + {"id": 46, "name": "Slippers"}, + {"id": 47, "name": "Bicycle"}, + {"id": 48, "name": "Stool"}, + {"id": 49, "name": "Barrel/bucket"}, + {"id": 50, "name": "Van"}, + {"id": 51, "name": "Couch"}, + {"id": 52, "name": "Sandals"}, + {"id": 53, "name": "Basket"}, + {"id": 54, "name": "Drum"}, + {"id": 55, "name": "Pen/Pencil"}, + {"id": 56, "name": "Bus"}, + {"id": 57, "name": "Wild Bird"}, + {"id": 58, "name": "High Heels"}, + {"id": 59, "name": "Motorcycle"}, + {"id": 60, "name": "Guitar"}, + {"id": 61, "name": "Carpet"}, + {"id": 62, "name": "Cell Phone"}, + {"id": 63, "name": "Bread"}, + {"id": 64, "name": "Camera"}, + {"id": 65, "name": "Canned"}, + {"id": 66, "name": "Truck"}, + {"id": 67, "name": "Traffic cone"}, + {"id": 68, "name": "Cymbal"}, + {"id": 69, "name": "Lifesaver"}, + {"id": 70, "name": "Towel"}, + {"id": 71, "name": "Stuffed Toy"}, + {"id": 72, "name": "Candle"}, + {"id": 73, "name": "Sailboat"}, + {"id": 74, "name": "Laptop"}, + {"id": 75, "name": "Awning"}, + {"id": 76, "name": "Bed"}, + {"id": 77, "name": "Faucet"}, + {"id": 78, "name": "Tent"}, + {"id": 79, "name": "Horse"}, + {"id": 80, "name": "Mirror"}, + {"id": 81, "name": "Power outlet"}, + {"id": 82, "name": "Sink"}, + {"id": 83, "name": "Apple"}, + {"id": 84, "name": "Air Conditioner"}, + {"id": 85, "name": "Knife"}, + {"id": 86, "name": "Hockey Stick"}, + {"id": 87, "name": "Paddle"}, + {"id": 88, "name": "Pickup Truck"}, + {"id": 89, "name": "Fork"}, + {"id": 90, "name": "Traffic Sign"}, + {"id": 91, "name": "Ballon"}, + {"id": 92, "name": "Tripod"}, + {"id": 93, "name": "Dog"}, + {"id": 94, "name": "Spoon"}, + {"id": 95, "name": "Clock"}, + {"id": 96, "name": "Pot"}, + {"id": 97, "name": "Cow"}, + {"id": 98, "name": "Cake"}, + {"id": 99, "name": "Dining Table"}, + {"id": 100, "name": "Sheep"}, + {"id": 101, "name": "Hanger"}, + {"id": 102, "name": "Blackboard/Whiteboard"}, + {"id": 103, "name": "Napkin"}, + {"id": 104, "name": "Other Fish"}, + {"id": 105, "name": "Orange/Tangerine"}, + {"id": 106, "name": "Toiletry"}, + {"id": 107, "name": "Keyboard"}, + {"id": 108, "name": "Tomato"}, + {"id": 109, "name": "Lantern"}, + {"id": 110, "name": "Machinery Vehicle"}, + {"id": 111, "name": "Fan"}, + {"id": 112, "name": "Green Vegetables"}, + {"id": 113, "name": "Banana"}, + {"id": 114, "name": "Baseball Glove"}, + {"id": 115, "name": "Airplane"}, + {"id": 116, "name": "Mouse"}, + {"id": 117, "name": "Train"}, + {"id": 118, "name": "Pumpkin"}, + {"id": 119, "name": "Soccer"}, + {"id": 120, "name": "Skiboard"}, + {"id": 121, "name": "Luggage"}, + {"id": 122, "name": "Nightstand"}, + {"id": 123, "name": "Teapot"}, + {"id": 124, "name": "Telephone"}, + {"id": 125, "name": "Trolley"}, + {"id": 126, "name": "Head Phone"}, + {"id": 127, "name": "Sports Car"}, + {"id": 128, "name": "Stop Sign"}, + {"id": 129, "name": "Dessert"}, + {"id": 130, "name": "Scooter"}, + {"id": 131, "name": "Stroller"}, + {"id": 132, "name": "Crane"}, + {"id": 133, "name": "Remote"}, + {"id": 134, "name": "Refrigerator"}, + {"id": 135, "name": "Oven"}, + {"id": 136, "name": "Lemon"}, + {"id": 137, "name": "Duck"}, + {"id": 138, "name": "Baseball Bat"}, + {"id": 139, "name": "Surveillance Camera"}, + {"id": 140, "name": "Cat"}, + {"id": 141, "name": "Jug"}, + {"id": 142, "name": "Broccoli"}, + {"id": 143, "name": "Piano"}, + {"id": 144, "name": "Pizza"}, + {"id": 145, "name": "Elephant"}, + {"id": 146, "name": "Skateboard"}, + {"id": 147, "name": "Surfboard"}, + {"id": 148, "name": "Gun"}, + {"id": 149, "name": "Skating and Skiing shoes"}, + {"id": 150, "name": "Gas stove"}, + {"id": 151, "name": "Donut"}, + {"id": 152, "name": "Bow Tie"}, + {"id": 153, "name": "Carrot"}, + {"id": 154, "name": "Toilet"}, + {"id": 155, "name": "Kite"}, + {"id": 156, "name": "Strawberry"}, + {"id": 157, "name": "Other Balls"}, + {"id": 158, "name": "Shovel"}, + {"id": 159, "name": "Pepper"}, + {"id": 160, "name": "Computer Box"}, + {"id": 161, "name": "Toilet Paper"}, + {"id": 162, "name": "Cleaning Products"}, + {"id": 163, "name": "Chopsticks"}, + {"id": 164, "name": "Microwave"}, + {"id": 165, "name": "Pigeon"}, + {"id": 166, "name": "Baseball"}, + {"id": 167, "name": "Cutting/chopping Board"}, + {"id": 168, "name": "Coffee Table"}, + {"id": 169, "name": "Side Table"}, + {"id": 170, "name": "Scissors"}, + {"id": 171, "name": "Marker"}, + {"id": 172, "name": "Pie"}, + {"id": 173, "name": "Ladder"}, + {"id": 174, "name": "Snowboard"}, + {"id": 175, "name": "Cookies"}, + {"id": 176, "name": "Radiator"}, + {"id": 177, "name": "Fire Hydrant"}, + {"id": 178, "name": "Basketball"}, + {"id": 179, "name": "Zebra"}, + {"id": 180, "name": "Grape"}, + {"id": 181, "name": "Giraffe"}, + {"id": 182, "name": "Potato"}, + {"id": 183, "name": "Sausage"}, + {"id": 184, "name": "Tricycle"}, + {"id": 185, "name": "Violin"}, + {"id": 186, "name": "Egg"}, + {"id": 187, "name": "Fire Extinguisher"}, + {"id": 188, "name": "Candy"}, + {"id": 189, "name": "Fire Truck"}, + {"id": 190, "name": "Billards"}, + {"id": 191, "name": "Converter"}, + {"id": 192, "name": "Bathtub"}, + {"id": 193, "name": "Wheelchair"}, + {"id": 194, "name": "Golf Club"}, + {"id": 195, "name": "Briefcase"}, + {"id": 196, "name": "Cucumber"}, + {"id": 197, "name": "Cigar/Cigarette "}, + {"id": 198, "name": "Paint Brush"}, + {"id": 199, "name": "Pear"}, + {"id": 200, "name": "Heavy Truck"}, + {"id": 201, "name": "Hamburger"}, + {"id": 202, "name": "Extractor"}, + {"id": 203, "name": "Extension Cord"}, + {"id": 204, "name": "Tong"}, + {"id": 205, "name": "Tennis Racket"}, + {"id": 206, "name": "Folder"}, + {"id": 207, "name": "American Football"}, + {"id": 208, "name": "earphone"}, + {"id": 209, "name": "Mask"}, + {"id": 210, "name": "Kettle"}, + {"id": 211, "name": "Tennis"}, + {"id": 212, "name": "Ship"}, + {"id": 213, "name": "Swing"}, + {"id": 214, "name": "Coffee Machine"}, + {"id": 215, "name": "Slide"}, + {"id": 216, "name": "Carriage"}, + {"id": 217, "name": "Onion"}, + {"id": 218, "name": "Green beans"}, + {"id": 219, "name": "Projector"}, + {"id": 220, "name": "Frisbee"}, + {"id": 221, "name": "Washing Machine/Drying Machine"}, + {"id": 222, "name": "Chicken"}, + {"id": 223, "name": "Printer"}, + {"id": 224, "name": "Watermelon"}, + {"id": 225, "name": "Saxophone"}, + {"id": 226, "name": "Tissue"}, + {"id": 227, "name": "Toothbrush"}, + {"id": 228, "name": "Ice cream"}, + {"id": 229, "name": "Hot air balloon"}, + {"id": 230, "name": "Cello"}, + {"id": 231, "name": "French Fries"}, + {"id": 232, "name": "Scale"}, + {"id": 233, "name": "Trophy"}, + {"id": 234, "name": "Cabbage"}, + {"id": 235, "name": "Hot dog"}, + {"id": 236, "name": "Blender"}, + {"id": 237, "name": "Peach"}, + {"id": 238, "name": "Rice"}, + {"id": 239, "name": "Wallet/Purse"}, + {"id": 240, "name": "Volleyball"}, + {"id": 241, "name": "Deer"}, + {"id": 242, "name": "Goose"}, + {"id": 243, "name": "Tape"}, + {"id": 244, "name": "Tablet"}, + {"id": 245, "name": "Cosmetics"}, + {"id": 246, "name": "Trumpet"}, + {"id": 247, "name": "Pineapple"}, + {"id": 248, "name": "Golf Ball"}, + {"id": 249, "name": "Ambulance"}, + {"id": 250, "name": "Parking meter"}, + {"id": 251, "name": "Mango"}, + {"id": 252, "name": "Key"}, + {"id": 253, "name": "Hurdle"}, + {"id": 254, "name": "Fishing Rod"}, + {"id": 255, "name": "Medal"}, + {"id": 256, "name": "Flute"}, + {"id": 257, "name": "Brush"}, + {"id": 258, "name": "Penguin"}, + {"id": 259, "name": "Megaphone"}, + {"id": 260, "name": "Corn"}, + {"id": 261, "name": "Lettuce"}, + {"id": 262, "name": "Garlic"}, + {"id": 263, "name": "Swan"}, + {"id": 264, "name": "Helicopter"}, + {"id": 265, "name": "Green Onion"}, + {"id": 266, "name": "Sandwich"}, + {"id": 267, "name": "Nuts"}, + {"id": 268, "name": "Speed Limit Sign"}, + {"id": 269, "name": "Induction Cooker"}, + {"id": 270, "name": "Broom"}, + {"id": 271, "name": "Trombone"}, + {"id": 272, "name": "Plum"}, + {"id": 273, "name": "Rickshaw"}, + {"id": 274, "name": "Goldfish"}, + {"id": 275, "name": "Kiwi fruit"}, + {"id": 276, "name": "Router/modem"}, + {"id": 277, "name": "Poker Card"}, + {"id": 278, "name": "Toaster"}, + {"id": 279, "name": "Shrimp"}, + {"id": 280, "name": "Sushi"}, + {"id": 281, "name": "Cheese"}, + {"id": 282, "name": "Notepaper"}, + {"id": 283, "name": "Cherry"}, + {"id": 284, "name": "Pliers"}, + {"id": 285, "name": "CD"}, + {"id": 286, "name": "Pasta"}, + {"id": 287, "name": "Hammer"}, + {"id": 288, "name": "Cue"}, + {"id": 289, "name": "Avocado"}, + {"id": 290, "name": "Hami melon"}, + {"id": 291, "name": "Flask"}, + {"id": 292, "name": "Mushroom"}, + {"id": 293, "name": "Screwdriver"}, + {"id": 294, "name": "Soap"}, + {"id": 295, "name": "Recorder"}, + {"id": 296, "name": "Bear"}, + {"id": 297, "name": "Eggplant"}, + {"id": 298, "name": "Board Eraser"}, + {"id": 299, "name": "Coconut"}, + {"id": 300, "name": "Tape Measure/ Ruler"}, + {"id": 301, "name": "Pig"}, + {"id": 302, "name": "Showerhead"}, + {"id": 303, "name": "Globe"}, + {"id": 304, "name": "Chips"}, + {"id": 305, "name": "Steak"}, + {"id": 306, "name": "Crosswalk Sign"}, + {"id": 307, "name": "Stapler"}, + {"id": 308, "name": "Camel"}, + {"id": 309, "name": "Formula 1 "}, + {"id": 310, "name": "Pomegranate"}, + {"id": 311, "name": "Dishwasher"}, + {"id": 312, "name": "Crab"}, + {"id": 313, "name": "Hoverboard"}, + {"id": 314, "name": "Meatball"}, + {"id": 315, "name": "Rice Cooker"}, + {"id": 316, "name": "Tuba"}, + {"id": 317, "name": "Calculator"}, + {"id": 318, "name": "Papaya"}, + {"id": 319, "name": "Antelope"}, + {"id": 320, "name": "Parrot"}, + {"id": 321, "name": "Seal"}, + {"id": 322, "name": "Butterfly"}, + {"id": 323, "name": "Dumbbell"}, + {"id": 324, "name": "Donkey"}, + {"id": 325, "name": "Lion"}, + {"id": 326, "name": "Urinal"}, + {"id": 327, "name": "Dolphin"}, + {"id": 328, "name": "Electric Drill"}, + {"id": 329, "name": "Hair Dryer"}, + {"id": 330, "name": "Egg tart"}, + {"id": 331, "name": "Jellyfish"}, + {"id": 332, "name": "Treadmill"}, + {"id": 333, "name": "Lighter"}, + {"id": 334, "name": "Grapefruit"}, + {"id": 335, "name": "Game board"}, + {"id": 336, "name": "Mop"}, + {"id": 337, "name": "Radish"}, + {"id": 338, "name": "Baozi"}, + {"id": 339, "name": "Target"}, + {"id": 340, "name": "French"}, + {"id": 341, "name": "Spring Rolls"}, + {"id": 342, "name": "Monkey"}, + {"id": 343, "name": "Rabbit"}, + {"id": 344, "name": "Pencil Case"}, + {"id": 345, "name": "Yak"}, + {"id": 346, "name": "Red Cabbage"}, + {"id": 347, "name": "Binoculars"}, + {"id": 348, "name": "Asparagus"}, + {"id": 349, "name": "Barbell"}, + {"id": 350, "name": "Scallop"}, + {"id": 351, "name": "Noddles"}, + {"id": 352, "name": "Comb"}, + {"id": 353, "name": "Dumpling"}, + {"id": 354, "name": "Oyster"}, + {"id": 355, "name": "Table Tennis paddle"}, + {"id": 356, "name": "Cosmetics Brush/Eyeliner Pencil"}, + {"id": 357, "name": "Chainsaw"}, + {"id": 358, "name": "Eraser"}, + {"id": 359, "name": "Lobster"}, + {"id": 360, "name": "Durian"}, + {"id": 361, "name": "Okra"}, + {"id": 362, "name": "Lipstick"}, + {"id": 363, "name": "Cosmetics Mirror"}, + {"id": 364, "name": "Curling"}, + {"id": 365, "name": "Table Tennis "}, ] def _get_builtin_metadata(): - id_to_name = {x['id']: x['name'] for x in categories_v2_fix} + id_to_name = {x["id"]: x["name"] for x in categories_v2_fix} thing_dataset_id_to_contiguous_id = { - x['id']: i for i, x in enumerate( - sorted(categories_v2_fix, key=lambda x: x['id']))} + x["id"]: i + for i, x in enumerate(sorted(categories_v2_fix, key=lambda x: x["id"])) + } thing_classes = [id_to_name[k] for k in sorted(id_to_name)] return { "thing_dataset_id_to_contiguous_id": thing_dataset_id_to_contiguous_id, - "thing_classes": thing_classes} + "thing_classes": thing_classes, + } _PREDEFINED_SPLITS_OBJECTS365 = { - "objects365_v2_train": ("objects365/train", "objects365/annotations/zhiyuan_objv2_train_fixname_fixmiss.json"), + "objects365_v2_train": ( + "objects365/train", + "objects365/annotations/zhiyuan_objv2_train_fixname_fixmiss.json", + ), # 80,000 images, 1,240,587 annotations - "objects365_v2_val": ("objects365/val", "objects365/annotations/zhiyuan_objv2_val_fixname.json"), - "objects365_v2_val_rare": ("objects365/val", "objects365/annotations/zhiyuan_objv2_val_fixname_rare.json"), + "objects365_v2_val": ( + "objects365/val", + "objects365/annotations/zhiyuan_objv2_val_fixname.json", + ), + "objects365_v2_val_rare": ( + "objects365/val", + "objects365/annotations/zhiyuan_objv2_val_fixname_rare.json", + ), } for key, (image_root, json_file) in _PREDEFINED_SPLITS_OBJECTS365.items(): @@ -767,4 +778,4 @@ def _get_builtin_metadata(): _get_builtin_metadata(), os.path.join("datasets", json_file) if "://" not in json_file else json_file, os.path.join("datasets", image_root), - ) \ No newline at end of file + ) diff --git a/dimos/models/Detic/detic/data/datasets/oid.py b/dimos/models/Detic/detic/data/datasets/oid.py index 90d7f8613e..d3a6fd14b2 100644 --- a/dimos/models/Detic/detic/data/datasets/oid.py +++ b/dimos/models/Detic/detic/data/datasets/oid.py @@ -4,516 +4,518 @@ import os categories = [ - {'id': 1, 'name': 'Infant bed', 'freebase_id': '/m/061hd_'}, - {'id': 2, 'name': 'Rose', 'freebase_id': '/m/06m11'}, - {'id': 3, 'name': 'Flag', 'freebase_id': '/m/03120'}, - {'id': 4, 'name': 'Flashlight', 'freebase_id': '/m/01kb5b'}, - {'id': 5, 'name': 'Sea turtle', 'freebase_id': '/m/0120dh'}, - {'id': 6, 'name': 'Camera', 'freebase_id': '/m/0dv5r'}, - {'id': 7, 'name': 'Animal', 'freebase_id': '/m/0jbk'}, - {'id': 8, 'name': 'Glove', 'freebase_id': '/m/0174n1'}, - {'id': 9, 'name': 'Crocodile', 'freebase_id': '/m/09f_2'}, - {'id': 10, 'name': 'Cattle', 'freebase_id': '/m/01xq0k1'}, - {'id': 11, 'name': 'House', 'freebase_id': '/m/03jm5'}, - {'id': 12, 'name': 'Guacamole', 'freebase_id': '/m/02g30s'}, - {'id': 13, 'name': 'Penguin', 'freebase_id': '/m/05z6w'}, - {'id': 14, 'name': 'Vehicle registration plate', 'freebase_id': '/m/01jfm_'}, - {'id': 15, 'name': 'Bench', 'freebase_id': '/m/076lb9'}, - {'id': 16, 'name': 'Ladybug', 'freebase_id': '/m/0gj37'}, - {'id': 17, 'name': 'Human nose', 'freebase_id': '/m/0k0pj'}, - {'id': 18, 'name': 'Watermelon', 'freebase_id': '/m/0kpqd'}, - {'id': 19, 'name': 'Flute', 'freebase_id': '/m/0l14j_'}, - {'id': 20, 'name': 'Butterfly', 'freebase_id': '/m/0cyf8'}, - {'id': 21, 'name': 'Washing machine', 'freebase_id': '/m/0174k2'}, - {'id': 22, 'name': 'Raccoon', 'freebase_id': '/m/0dq75'}, - {'id': 23, 'name': 'Segway', 'freebase_id': '/m/076bq'}, - {'id': 24, 'name': 'Taco', 'freebase_id': '/m/07crc'}, - {'id': 25, 'name': 'Jellyfish', 'freebase_id': '/m/0d8zb'}, - {'id': 26, 'name': 'Cake', 'freebase_id': '/m/0fszt'}, - {'id': 27, 'name': 'Pen', 'freebase_id': '/m/0k1tl'}, - {'id': 28, 'name': 'Cannon', 'freebase_id': '/m/020kz'}, - {'id': 29, 'name': 'Bread', 'freebase_id': '/m/09728'}, - {'id': 30, 'name': 'Tree', 'freebase_id': '/m/07j7r'}, - {'id': 31, 'name': 'Shellfish', 'freebase_id': '/m/0fbdv'}, - {'id': 32, 'name': 'Bed', 'freebase_id': '/m/03ssj5'}, - {'id': 33, 'name': 'Hamster', 'freebase_id': '/m/03qrc'}, - {'id': 34, 'name': 'Hat', 'freebase_id': '/m/02dl1y'}, - {'id': 35, 'name': 'Toaster', 'freebase_id': '/m/01k6s3'}, - {'id': 36, 'name': 'Sombrero', 'freebase_id': '/m/02jfl0'}, - {'id': 37, 'name': 'Tiara', 'freebase_id': '/m/01krhy'}, - {'id': 38, 'name': 'Bowl', 'freebase_id': '/m/04kkgm'}, - {'id': 39, 'name': 'Dragonfly', 'freebase_id': '/m/0ft9s'}, - {'id': 40, 'name': 'Moths and butterflies', 'freebase_id': '/m/0d_2m'}, - {'id': 41, 'name': 'Antelope', 'freebase_id': '/m/0czz2'}, - {'id': 42, 'name': 'Vegetable', 'freebase_id': '/m/0f4s2w'}, - {'id': 43, 'name': 'Torch', 'freebase_id': '/m/07dd4'}, - {'id': 44, 'name': 'Building', 'freebase_id': '/m/0cgh4'}, - {'id': 45, 'name': 'Power plugs and sockets', 'freebase_id': '/m/03bbps'}, - {'id': 46, 'name': 'Blender', 'freebase_id': '/m/02pjr4'}, - {'id': 47, 'name': 'Billiard table', 'freebase_id': '/m/04p0qw'}, - {'id': 48, 'name': 'Cutting board', 'freebase_id': '/m/02pdsw'}, - {'id': 49, 'name': 'Bronze sculpture', 'freebase_id': '/m/01yx86'}, - {'id': 50, 'name': 'Turtle', 'freebase_id': '/m/09dzg'}, - {'id': 51, 'name': 'Broccoli', 'freebase_id': '/m/0hkxq'}, - {'id': 52, 'name': 'Tiger', 'freebase_id': '/m/07dm6'}, - {'id': 53, 'name': 'Mirror', 'freebase_id': '/m/054_l'}, - {'id': 54, 'name': 'Bear', 'freebase_id': '/m/01dws'}, - {'id': 55, 'name': 'Zucchini', 'freebase_id': '/m/027pcv'}, - {'id': 56, 'name': 'Dress', 'freebase_id': '/m/01d40f'}, - {'id': 57, 'name': 'Volleyball', 'freebase_id': '/m/02rgn06'}, - {'id': 58, 'name': 'Guitar', 'freebase_id': '/m/0342h'}, - {'id': 59, 'name': 'Reptile', 'freebase_id': '/m/06bt6'}, - {'id': 60, 'name': 'Golf cart', 'freebase_id': '/m/0323sq'}, - {'id': 61, 'name': 'Tart', 'freebase_id': '/m/02zvsm'}, - {'id': 62, 'name': 'Fedora', 'freebase_id': '/m/02fq_6'}, - {'id': 63, 'name': 'Carnivore', 'freebase_id': '/m/01lrl'}, - {'id': 64, 'name': 'Car', 'freebase_id': '/m/0k4j'}, - {'id': 65, 'name': 'Lighthouse', 'freebase_id': '/m/04h7h'}, - {'id': 66, 'name': 'Coffeemaker', 'freebase_id': '/m/07xyvk'}, - {'id': 67, 'name': 'Food processor', 'freebase_id': '/m/03y6mg'}, - {'id': 68, 'name': 'Truck', 'freebase_id': '/m/07r04'}, - {'id': 69, 'name': 'Bookcase', 'freebase_id': '/m/03__z0'}, - {'id': 70, 'name': 'Surfboard', 'freebase_id': '/m/019w40'}, - {'id': 71, 'name': 'Footwear', 'freebase_id': '/m/09j5n'}, - {'id': 72, 'name': 'Bench', 'freebase_id': '/m/0cvnqh'}, - {'id': 73, 'name': 'Necklace', 'freebase_id': '/m/01llwg'}, - {'id': 74, 'name': 'Flower', 'freebase_id': '/m/0c9ph5'}, - {'id': 75, 'name': 'Radish', 'freebase_id': '/m/015x5n'}, - {'id': 76, 'name': 'Marine mammal', 'freebase_id': '/m/0gd2v'}, - {'id': 77, 'name': 'Frying pan', 'freebase_id': '/m/04v6l4'}, - {'id': 78, 'name': 'Tap', 'freebase_id': '/m/02jz0l'}, - {'id': 79, 'name': 'Peach', 'freebase_id': '/m/0dj6p'}, - {'id': 80, 'name': 'Knife', 'freebase_id': '/m/04ctx'}, - {'id': 81, 'name': 'Handbag', 'freebase_id': '/m/080hkjn'}, - {'id': 82, 'name': 'Laptop', 'freebase_id': '/m/01c648'}, - {'id': 83, 'name': 'Tent', 'freebase_id': '/m/01j61q'}, - {'id': 84, 'name': 'Ambulance', 'freebase_id': '/m/012n7d'}, - {'id': 85, 'name': 'Christmas tree', 'freebase_id': '/m/025nd'}, - {'id': 86, 'name': 'Eagle', 'freebase_id': '/m/09csl'}, - {'id': 87, 'name': 'Limousine', 'freebase_id': '/m/01lcw4'}, - {'id': 88, 'name': 'Kitchen & dining room table', 'freebase_id': '/m/0h8n5zk'}, - {'id': 89, 'name': 'Polar bear', 'freebase_id': '/m/0633h'}, - {'id': 90, 'name': 'Tower', 'freebase_id': '/m/01fdzj'}, - {'id': 91, 'name': 'Football', 'freebase_id': '/m/01226z'}, - {'id': 92, 'name': 'Willow', 'freebase_id': '/m/0mw_6'}, - {'id': 93, 'name': 'Human head', 'freebase_id': '/m/04hgtk'}, - {'id': 94, 'name': 'Stop sign', 'freebase_id': '/m/02pv19'}, - {'id': 95, 'name': 'Banana', 'freebase_id': '/m/09qck'}, - {'id': 96, 'name': 'Mixer', 'freebase_id': '/m/063rgb'}, - {'id': 97, 'name': 'Binoculars', 'freebase_id': '/m/0lt4_'}, - {'id': 98, 'name': 'Dessert', 'freebase_id': '/m/0270h'}, - {'id': 99, 'name': 'Bee', 'freebase_id': '/m/01h3n'}, - {'id': 100, 'name': 'Chair', 'freebase_id': '/m/01mzpv'}, - {'id': 101, 'name': 'Wood-burning stove', 'freebase_id': '/m/04169hn'}, - {'id': 102, 'name': 'Flowerpot', 'freebase_id': '/m/0fm3zh'}, - {'id': 103, 'name': 'Beaker', 'freebase_id': '/m/0d20w4'}, - {'id': 104, 'name': 'Oyster', 'freebase_id': '/m/0_cp5'}, - {'id': 105, 'name': 'Woodpecker', 'freebase_id': '/m/01dy8n'}, - {'id': 106, 'name': 'Harp', 'freebase_id': '/m/03m5k'}, - {'id': 107, 'name': 'Bathtub', 'freebase_id': '/m/03dnzn'}, - {'id': 108, 'name': 'Wall clock', 'freebase_id': '/m/0h8mzrc'}, - {'id': 109, 'name': 'Sports uniform', 'freebase_id': '/m/0h8mhzd'}, - {'id': 110, 'name': 'Rhinoceros', 'freebase_id': '/m/03d443'}, - {'id': 111, 'name': 'Beehive', 'freebase_id': '/m/01gllr'}, - {'id': 112, 'name': 'Cupboard', 'freebase_id': '/m/0642b4'}, - {'id': 113, 'name': 'Chicken', 'freebase_id': '/m/09b5t'}, - {'id': 114, 'name': 'Man', 'freebase_id': '/m/04yx4'}, - {'id': 115, 'name': 'Blue jay', 'freebase_id': '/m/01f8m5'}, - {'id': 116, 'name': 'Cucumber', 'freebase_id': '/m/015x4r'}, - {'id': 117, 'name': 'Balloon', 'freebase_id': '/m/01j51'}, - {'id': 118, 'name': 'Kite', 'freebase_id': '/m/02zt3'}, - {'id': 119, 'name': 'Fireplace', 'freebase_id': '/m/03tw93'}, - {'id': 120, 'name': 'Lantern', 'freebase_id': '/m/01jfsr'}, - {'id': 121, 'name': 'Missile', 'freebase_id': '/m/04ylt'}, - {'id': 122, 'name': 'Book', 'freebase_id': '/m/0bt_c3'}, - {'id': 123, 'name': 'Spoon', 'freebase_id': '/m/0cmx8'}, - {'id': 124, 'name': 'Grapefruit', 'freebase_id': '/m/0hqkz'}, - {'id': 125, 'name': 'Squirrel', 'freebase_id': '/m/071qp'}, - {'id': 126, 'name': 'Orange', 'freebase_id': '/m/0cyhj_'}, - {'id': 127, 'name': 'Coat', 'freebase_id': '/m/01xygc'}, - {'id': 128, 'name': 'Punching bag', 'freebase_id': '/m/0420v5'}, - {'id': 129, 'name': 'Zebra', 'freebase_id': '/m/0898b'}, - {'id': 130, 'name': 'Billboard', 'freebase_id': '/m/01knjb'}, - {'id': 131, 'name': 'Bicycle', 'freebase_id': '/m/0199g'}, - {'id': 132, 'name': 'Door handle', 'freebase_id': '/m/03c7gz'}, - {'id': 133, 'name': 'Mechanical fan', 'freebase_id': '/m/02x984l'}, - {'id': 134, 'name': 'Ring binder', 'freebase_id': '/m/04zwwv'}, - {'id': 135, 'name': 'Table', 'freebase_id': '/m/04bcr3'}, - {'id': 136, 'name': 'Parrot', 'freebase_id': '/m/0gv1x'}, - {'id': 137, 'name': 'Sock', 'freebase_id': '/m/01nq26'}, - {'id': 138, 'name': 'Vase', 'freebase_id': '/m/02s195'}, - {'id': 139, 'name': 'Weapon', 'freebase_id': '/m/083kb'}, - {'id': 140, 'name': 'Shotgun', 'freebase_id': '/m/06nrc'}, - {'id': 141, 'name': 'Glasses', 'freebase_id': '/m/0jyfg'}, - {'id': 142, 'name': 'Seahorse', 'freebase_id': '/m/0nybt'}, - {'id': 143, 'name': 'Belt', 'freebase_id': '/m/0176mf'}, - {'id': 144, 'name': 'Watercraft', 'freebase_id': '/m/01rzcn'}, - {'id': 145, 'name': 'Window', 'freebase_id': '/m/0d4v4'}, - {'id': 146, 'name': 'Giraffe', 'freebase_id': '/m/03bk1'}, - {'id': 147, 'name': 'Lion', 'freebase_id': '/m/096mb'}, - {'id': 148, 'name': 'Tire', 'freebase_id': '/m/0h9mv'}, - {'id': 149, 'name': 'Vehicle', 'freebase_id': '/m/07yv9'}, - {'id': 150, 'name': 'Canoe', 'freebase_id': '/m/0ph39'}, - {'id': 151, 'name': 'Tie', 'freebase_id': '/m/01rkbr'}, - {'id': 152, 'name': 'Shelf', 'freebase_id': '/m/0gjbg72'}, - {'id': 153, 'name': 'Picture frame', 'freebase_id': '/m/06z37_'}, - {'id': 154, 'name': 'Printer', 'freebase_id': '/m/01m4t'}, - {'id': 155, 'name': 'Human leg', 'freebase_id': '/m/035r7c'}, - {'id': 156, 'name': 'Boat', 'freebase_id': '/m/019jd'}, - {'id': 157, 'name': 'Slow cooker', 'freebase_id': '/m/02tsc9'}, - {'id': 158, 'name': 'Croissant', 'freebase_id': '/m/015wgc'}, - {'id': 159, 'name': 'Candle', 'freebase_id': '/m/0c06p'}, - {'id': 160, 'name': 'Pancake', 'freebase_id': '/m/01dwwc'}, - {'id': 161, 'name': 'Pillow', 'freebase_id': '/m/034c16'}, - {'id': 162, 'name': 'Coin', 'freebase_id': '/m/0242l'}, - {'id': 163, 'name': 'Stretcher', 'freebase_id': '/m/02lbcq'}, - {'id': 164, 'name': 'Sandal', 'freebase_id': '/m/03nfch'}, - {'id': 165, 'name': 'Woman', 'freebase_id': '/m/03bt1vf'}, - {'id': 166, 'name': 'Stairs', 'freebase_id': '/m/01lynh'}, - {'id': 167, 'name': 'Harpsichord', 'freebase_id': '/m/03q5t'}, - {'id': 168, 'name': 'Stool', 'freebase_id': '/m/0fqt361'}, - {'id': 169, 'name': 'Bus', 'freebase_id': '/m/01bjv'}, - {'id': 170, 'name': 'Suitcase', 'freebase_id': '/m/01s55n'}, - {'id': 171, 'name': 'Human mouth', 'freebase_id': '/m/0283dt1'}, - {'id': 172, 'name': 'Juice', 'freebase_id': '/m/01z1kdw'}, - {'id': 173, 'name': 'Skull', 'freebase_id': '/m/016m2d'}, - {'id': 174, 'name': 'Door', 'freebase_id': '/m/02dgv'}, - {'id': 175, 'name': 'Violin', 'freebase_id': '/m/07y_7'}, - {'id': 176, 'name': 'Chopsticks', 'freebase_id': '/m/01_5g'}, - {'id': 177, 'name': 'Digital clock', 'freebase_id': '/m/06_72j'}, - {'id': 178, 'name': 'Sunflower', 'freebase_id': '/m/0ftb8'}, - {'id': 179, 'name': 'Leopard', 'freebase_id': '/m/0c29q'}, - {'id': 180, 'name': 'Bell pepper', 'freebase_id': '/m/0jg57'}, - {'id': 181, 'name': 'Harbor seal', 'freebase_id': '/m/02l8p9'}, - {'id': 182, 'name': 'Snake', 'freebase_id': '/m/078jl'}, - {'id': 183, 'name': 'Sewing machine', 'freebase_id': '/m/0llzx'}, - {'id': 184, 'name': 'Goose', 'freebase_id': '/m/0dbvp'}, - {'id': 185, 'name': 'Helicopter', 'freebase_id': '/m/09ct_'}, - {'id': 186, 'name': 'Seat belt', 'freebase_id': '/m/0dkzw'}, - {'id': 187, 'name': 'Coffee cup', 'freebase_id': '/m/02p5f1q'}, - {'id': 188, 'name': 'Microwave oven', 'freebase_id': '/m/0fx9l'}, - {'id': 189, 'name': 'Hot dog', 'freebase_id': '/m/01b9xk'}, - {'id': 190, 'name': 'Countertop', 'freebase_id': '/m/0b3fp9'}, - {'id': 191, 'name': 'Serving tray', 'freebase_id': '/m/0h8n27j'}, - {'id': 192, 'name': 'Dog bed', 'freebase_id': '/m/0h8n6f9'}, - {'id': 193, 'name': 'Beer', 'freebase_id': '/m/01599'}, - {'id': 194, 'name': 'Sunglasses', 'freebase_id': '/m/017ftj'}, - {'id': 195, 'name': 'Golf ball', 'freebase_id': '/m/044r5d'}, - {'id': 196, 'name': 'Waffle', 'freebase_id': '/m/01dwsz'}, - {'id': 197, 'name': 'Palm tree', 'freebase_id': '/m/0cdl1'}, - {'id': 198, 'name': 'Trumpet', 'freebase_id': '/m/07gql'}, - {'id': 199, 'name': 'Ruler', 'freebase_id': '/m/0hdln'}, - {'id': 200, 'name': 'Helmet', 'freebase_id': '/m/0zvk5'}, - {'id': 201, 'name': 'Ladder', 'freebase_id': '/m/012w5l'}, - {'id': 202, 'name': 'Office building', 'freebase_id': '/m/021sj1'}, - {'id': 203, 'name': 'Tablet computer', 'freebase_id': '/m/0bh9flk'}, - {'id': 204, 'name': 'Toilet paper', 'freebase_id': '/m/09gtd'}, - {'id': 205, 'name': 'Pomegranate', 'freebase_id': '/m/0jwn_'}, - {'id': 206, 'name': 'Skirt', 'freebase_id': '/m/02wv6h6'}, - {'id': 207, 'name': 'Gas stove', 'freebase_id': '/m/02wv84t'}, - {'id': 208, 'name': 'Cookie', 'freebase_id': '/m/021mn'}, - {'id': 209, 'name': 'Cart', 'freebase_id': '/m/018p4k'}, - {'id': 210, 'name': 'Raven', 'freebase_id': '/m/06j2d'}, - {'id': 211, 'name': 'Egg', 'freebase_id': '/m/033cnk'}, - {'id': 212, 'name': 'Burrito', 'freebase_id': '/m/01j3zr'}, - {'id': 213, 'name': 'Goat', 'freebase_id': '/m/03fwl'}, - {'id': 214, 'name': 'Kitchen knife', 'freebase_id': '/m/058qzx'}, - {'id': 215, 'name': 'Skateboard', 'freebase_id': '/m/06_fw'}, - {'id': 216, 'name': 'Salt and pepper shakers', 'freebase_id': '/m/02x8cch'}, - {'id': 217, 'name': 'Lynx', 'freebase_id': '/m/04g2r'}, - {'id': 218, 'name': 'Boot', 'freebase_id': '/m/01b638'}, - {'id': 219, 'name': 'Platter', 'freebase_id': '/m/099ssp'}, - {'id': 220, 'name': 'Ski', 'freebase_id': '/m/071p9'}, - {'id': 221, 'name': 'Swimwear', 'freebase_id': '/m/01gkx_'}, - {'id': 222, 'name': 'Swimming pool', 'freebase_id': '/m/0b_rs'}, - {'id': 223, 'name': 'Drinking straw', 'freebase_id': '/m/03v5tg'}, - {'id': 224, 'name': 'Wrench', 'freebase_id': '/m/01j5ks'}, - {'id': 225, 'name': 'Drum', 'freebase_id': '/m/026t6'}, - {'id': 226, 'name': 'Ant', 'freebase_id': '/m/0_k2'}, - {'id': 227, 'name': 'Human ear', 'freebase_id': '/m/039xj_'}, - {'id': 228, 'name': 'Headphones', 'freebase_id': '/m/01b7fy'}, - {'id': 229, 'name': 'Fountain', 'freebase_id': '/m/0220r2'}, - {'id': 230, 'name': 'Bird', 'freebase_id': '/m/015p6'}, - {'id': 231, 'name': 'Jeans', 'freebase_id': '/m/0fly7'}, - {'id': 232, 'name': 'Television', 'freebase_id': '/m/07c52'}, - {'id': 233, 'name': 'Crab', 'freebase_id': '/m/0n28_'}, - {'id': 234, 'name': 'Microphone', 'freebase_id': '/m/0hg7b'}, - {'id': 235, 'name': 'Home appliance', 'freebase_id': '/m/019dx1'}, - {'id': 236, 'name': 'Snowplow', 'freebase_id': '/m/04vv5k'}, - {'id': 237, 'name': 'Beetle', 'freebase_id': '/m/020jm'}, - {'id': 238, 'name': 'Artichoke', 'freebase_id': '/m/047v4b'}, - {'id': 239, 'name': 'Jet ski', 'freebase_id': '/m/01xs3r'}, - {'id': 240, 'name': 'Stationary bicycle', 'freebase_id': '/m/03kt2w'}, - {'id': 241, 'name': 'Human hair', 'freebase_id': '/m/03q69'}, - {'id': 242, 'name': 'Brown bear', 'freebase_id': '/m/01dxs'}, - {'id': 243, 'name': 'Starfish', 'freebase_id': '/m/01h8tj'}, - {'id': 244, 'name': 'Fork', 'freebase_id': '/m/0dt3t'}, - {'id': 245, 'name': 'Lobster', 'freebase_id': '/m/0cjq5'}, - {'id': 246, 'name': 'Corded phone', 'freebase_id': '/m/0h8lkj8'}, - {'id': 247, 'name': 'Drink', 'freebase_id': '/m/0271t'}, - {'id': 248, 'name': 'Saucer', 'freebase_id': '/m/03q5c7'}, - {'id': 249, 'name': 'Carrot', 'freebase_id': '/m/0fj52s'}, - {'id': 250, 'name': 'Insect', 'freebase_id': '/m/03vt0'}, - {'id': 251, 'name': 'Clock', 'freebase_id': '/m/01x3z'}, - {'id': 252, 'name': 'Castle', 'freebase_id': '/m/0d5gx'}, - {'id': 253, 'name': 'Tennis racket', 'freebase_id': '/m/0h8my_4'}, - {'id': 254, 'name': 'Ceiling fan', 'freebase_id': '/m/03ldnb'}, - {'id': 255, 'name': 'Asparagus', 'freebase_id': '/m/0cjs7'}, - {'id': 256, 'name': 'Jaguar', 'freebase_id': '/m/0449p'}, - {'id': 257, 'name': 'Musical instrument', 'freebase_id': '/m/04szw'}, - {'id': 258, 'name': 'Train', 'freebase_id': '/m/07jdr'}, - {'id': 259, 'name': 'Cat', 'freebase_id': '/m/01yrx'}, - {'id': 260, 'name': 'Rifle', 'freebase_id': '/m/06c54'}, - {'id': 261, 'name': 'Dumbbell', 'freebase_id': '/m/04h8sr'}, - {'id': 262, 'name': 'Mobile phone', 'freebase_id': '/m/050k8'}, - {'id': 263, 'name': 'Taxi', 'freebase_id': '/m/0pg52'}, - {'id': 264, 'name': 'Shower', 'freebase_id': '/m/02f9f_'}, - {'id': 265, 'name': 'Pitcher', 'freebase_id': '/m/054fyh'}, - {'id': 266, 'name': 'Lemon', 'freebase_id': '/m/09k_b'}, - {'id': 267, 'name': 'Invertebrate', 'freebase_id': '/m/03xxp'}, - {'id': 268, 'name': 'Turkey', 'freebase_id': '/m/0jly1'}, - {'id': 269, 'name': 'High heels', 'freebase_id': '/m/06k2mb'}, - {'id': 270, 'name': 'Bust', 'freebase_id': '/m/04yqq2'}, - {'id': 271, 'name': 'Elephant', 'freebase_id': '/m/0bwd_0j'}, - {'id': 272, 'name': 'Scarf', 'freebase_id': '/m/02h19r'}, - {'id': 273, 'name': 'Barrel', 'freebase_id': '/m/02zn6n'}, - {'id': 274, 'name': 'Trombone', 'freebase_id': '/m/07c6l'}, - {'id': 275, 'name': 'Pumpkin', 'freebase_id': '/m/05zsy'}, - {'id': 276, 'name': 'Box', 'freebase_id': '/m/025dyy'}, - {'id': 277, 'name': 'Tomato', 'freebase_id': '/m/07j87'}, - {'id': 278, 'name': 'Frog', 'freebase_id': '/m/09ld4'}, - {'id': 279, 'name': 'Bidet', 'freebase_id': '/m/01vbnl'}, - {'id': 280, 'name': 'Human face', 'freebase_id': '/m/0dzct'}, - {'id': 281, 'name': 'Houseplant', 'freebase_id': '/m/03fp41'}, - {'id': 282, 'name': 'Van', 'freebase_id': '/m/0h2r6'}, - {'id': 283, 'name': 'Shark', 'freebase_id': '/m/0by6g'}, - {'id': 284, 'name': 'Ice cream', 'freebase_id': '/m/0cxn2'}, - {'id': 285, 'name': 'Swim cap', 'freebase_id': '/m/04tn4x'}, - {'id': 286, 'name': 'Falcon', 'freebase_id': '/m/0f6wt'}, - {'id': 287, 'name': 'Ostrich', 'freebase_id': '/m/05n4y'}, - {'id': 288, 'name': 'Handgun', 'freebase_id': '/m/0gxl3'}, - {'id': 289, 'name': 'Whiteboard', 'freebase_id': '/m/02d9qx'}, - {'id': 290, 'name': 'Lizard', 'freebase_id': '/m/04m9y'}, - {'id': 291, 'name': 'Pasta', 'freebase_id': '/m/05z55'}, - {'id': 292, 'name': 'Snowmobile', 'freebase_id': '/m/01x3jk'}, - {'id': 293, 'name': 'Light bulb', 'freebase_id': '/m/0h8l4fh'}, - {'id': 294, 'name': 'Window blind', 'freebase_id': '/m/031b6r'}, - {'id': 295, 'name': 'Muffin', 'freebase_id': '/m/01tcjp'}, - {'id': 296, 'name': 'Pretzel', 'freebase_id': '/m/01f91_'}, - {'id': 297, 'name': 'Computer monitor', 'freebase_id': '/m/02522'}, - {'id': 298, 'name': 'Horn', 'freebase_id': '/m/0319l'}, - {'id': 299, 'name': 'Furniture', 'freebase_id': '/m/0c_jw'}, - {'id': 300, 'name': 'Sandwich', 'freebase_id': '/m/0l515'}, - {'id': 301, 'name': 'Fox', 'freebase_id': '/m/0306r'}, - {'id': 302, 'name': 'Convenience store', 'freebase_id': '/m/0crjs'}, - {'id': 303, 'name': 'Fish', 'freebase_id': '/m/0ch_cf'}, - {'id': 304, 'name': 'Fruit', 'freebase_id': '/m/02xwb'}, - {'id': 305, 'name': 'Earrings', 'freebase_id': '/m/01r546'}, - {'id': 306, 'name': 'Curtain', 'freebase_id': '/m/03rszm'}, - {'id': 307, 'name': 'Grape', 'freebase_id': '/m/0388q'}, - {'id': 308, 'name': 'Sofa bed', 'freebase_id': '/m/03m3pdh'}, - {'id': 309, 'name': 'Horse', 'freebase_id': '/m/03k3r'}, - {'id': 310, 'name': 'Luggage and bags', 'freebase_id': '/m/0hf58v5'}, - {'id': 311, 'name': 'Desk', 'freebase_id': '/m/01y9k5'}, - {'id': 312, 'name': 'Crutch', 'freebase_id': '/m/05441v'}, - {'id': 313, 'name': 'Bicycle helmet', 'freebase_id': '/m/03p3bw'}, - {'id': 314, 'name': 'Tick', 'freebase_id': '/m/0175cv'}, - {'id': 315, 'name': 'Airplane', 'freebase_id': '/m/0cmf2'}, - {'id': 316, 'name': 'Canary', 'freebase_id': '/m/0ccs93'}, - {'id': 317, 'name': 'Spatula', 'freebase_id': '/m/02d1br'}, - {'id': 318, 'name': 'Watch', 'freebase_id': '/m/0gjkl'}, - {'id': 319, 'name': 'Lily', 'freebase_id': '/m/0jqgx'}, - {'id': 320, 'name': 'Kitchen appliance', 'freebase_id': '/m/0h99cwc'}, - {'id': 321, 'name': 'Filing cabinet', 'freebase_id': '/m/047j0r'}, - {'id': 322, 'name': 'Aircraft', 'freebase_id': '/m/0k5j'}, - {'id': 323, 'name': 'Cake stand', 'freebase_id': '/m/0h8n6ft'}, - {'id': 324, 'name': 'Candy', 'freebase_id': '/m/0gm28'}, - {'id': 325, 'name': 'Sink', 'freebase_id': '/m/0130jx'}, - {'id': 326, 'name': 'Mouse', 'freebase_id': '/m/04rmv'}, - {'id': 327, 'name': 'Wine', 'freebase_id': '/m/081qc'}, - {'id': 328, 'name': 'Wheelchair', 'freebase_id': '/m/0qmmr'}, - {'id': 329, 'name': 'Goldfish', 'freebase_id': '/m/03fj2'}, - {'id': 330, 'name': 'Refrigerator', 'freebase_id': '/m/040b_t'}, - {'id': 331, 'name': 'French fries', 'freebase_id': '/m/02y6n'}, - {'id': 332, 'name': 'Drawer', 'freebase_id': '/m/0fqfqc'}, - {'id': 333, 'name': 'Treadmill', 'freebase_id': '/m/030610'}, - {'id': 334, 'name': 'Picnic basket', 'freebase_id': '/m/07kng9'}, - {'id': 335, 'name': 'Dice', 'freebase_id': '/m/029b3'}, - {'id': 336, 'name': 'Cabbage', 'freebase_id': '/m/0fbw6'}, - {'id': 337, 'name': 'Football helmet', 'freebase_id': '/m/07qxg_'}, - {'id': 338, 'name': 'Pig', 'freebase_id': '/m/068zj'}, - {'id': 339, 'name': 'Person', 'freebase_id': '/m/01g317'}, - {'id': 340, 'name': 'Shorts', 'freebase_id': '/m/01bfm9'}, - {'id': 341, 'name': 'Gondola', 'freebase_id': '/m/02068x'}, - {'id': 342, 'name': 'Honeycomb', 'freebase_id': '/m/0fz0h'}, - {'id': 343, 'name': 'Doughnut', 'freebase_id': '/m/0jy4k'}, - {'id': 344, 'name': 'Chest of drawers', 'freebase_id': '/m/05kyg_'}, - {'id': 345, 'name': 'Land vehicle', 'freebase_id': '/m/01prls'}, - {'id': 346, 'name': 'Bat', 'freebase_id': '/m/01h44'}, - {'id': 347, 'name': 'Monkey', 'freebase_id': '/m/08pbxl'}, - {'id': 348, 'name': 'Dagger', 'freebase_id': '/m/02gzp'}, - {'id': 349, 'name': 'Tableware', 'freebase_id': '/m/04brg2'}, - {'id': 350, 'name': 'Human foot', 'freebase_id': '/m/031n1'}, - {'id': 351, 'name': 'Mug', 'freebase_id': '/m/02jvh9'}, - {'id': 352, 'name': 'Alarm clock', 'freebase_id': '/m/046dlr'}, - {'id': 353, 'name': 'Pressure cooker', 'freebase_id': '/m/0h8ntjv'}, - {'id': 354, 'name': 'Human hand', 'freebase_id': '/m/0k65p'}, - {'id': 355, 'name': 'Tortoise', 'freebase_id': '/m/011k07'}, - {'id': 356, 'name': 'Baseball glove', 'freebase_id': '/m/03grzl'}, - {'id': 357, 'name': 'Sword', 'freebase_id': '/m/06y5r'}, - {'id': 358, 'name': 'Pear', 'freebase_id': '/m/061_f'}, - {'id': 359, 'name': 'Miniskirt', 'freebase_id': '/m/01cmb2'}, - {'id': 360, 'name': 'Traffic sign', 'freebase_id': '/m/01mqdt'}, - {'id': 361, 'name': 'Girl', 'freebase_id': '/m/05r655'}, - {'id': 362, 'name': 'Roller skates', 'freebase_id': '/m/02p3w7d'}, - {'id': 363, 'name': 'Dinosaur', 'freebase_id': '/m/029tx'}, - {'id': 364, 'name': 'Porch', 'freebase_id': '/m/04m6gz'}, - {'id': 365, 'name': 'Human beard', 'freebase_id': '/m/015h_t'}, - {'id': 366, 'name': 'Submarine sandwich', 'freebase_id': '/m/06pcq'}, - {'id': 367, 'name': 'Screwdriver', 'freebase_id': '/m/01bms0'}, - {'id': 368, 'name': 'Strawberry', 'freebase_id': '/m/07fbm7'}, - {'id': 369, 'name': 'Wine glass', 'freebase_id': '/m/09tvcd'}, - {'id': 370, 'name': 'Seafood', 'freebase_id': '/m/06nwz'}, - {'id': 371, 'name': 'Racket', 'freebase_id': '/m/0dv9c'}, - {'id': 372, 'name': 'Wheel', 'freebase_id': '/m/083wq'}, - {'id': 373, 'name': 'Sea lion', 'freebase_id': '/m/0gd36'}, - {'id': 374, 'name': 'Toy', 'freebase_id': '/m/0138tl'}, - {'id': 375, 'name': 'Tea', 'freebase_id': '/m/07clx'}, - {'id': 376, 'name': 'Tennis ball', 'freebase_id': '/m/05ctyq'}, - {'id': 377, 'name': 'Waste container', 'freebase_id': '/m/0bjyj5'}, - {'id': 378, 'name': 'Mule', 'freebase_id': '/m/0dbzx'}, - {'id': 379, 'name': 'Cricket ball', 'freebase_id': '/m/02ctlc'}, - {'id': 380, 'name': 'Pineapple', 'freebase_id': '/m/0fp6w'}, - {'id': 381, 'name': 'Coconut', 'freebase_id': '/m/0djtd'}, - {'id': 382, 'name': 'Doll', 'freebase_id': '/m/0167gd'}, - {'id': 383, 'name': 'Coffee table', 'freebase_id': '/m/078n6m'}, - {'id': 384, 'name': 'Snowman', 'freebase_id': '/m/0152hh'}, - {'id': 385, 'name': 'Lavender', 'freebase_id': '/m/04gth'}, - {'id': 386, 'name': 'Shrimp', 'freebase_id': '/m/0ll1f78'}, - {'id': 387, 'name': 'Maple', 'freebase_id': '/m/0cffdh'}, - {'id': 388, 'name': 'Cowboy hat', 'freebase_id': '/m/025rp__'}, - {'id': 389, 'name': 'Goggles', 'freebase_id': '/m/02_n6y'}, - {'id': 390, 'name': 'Rugby ball', 'freebase_id': '/m/0wdt60w'}, - {'id': 391, 'name': 'Caterpillar', 'freebase_id': '/m/0cydv'}, - {'id': 392, 'name': 'Poster', 'freebase_id': '/m/01n5jq'}, - {'id': 393, 'name': 'Rocket', 'freebase_id': '/m/09rvcxw'}, - {'id': 394, 'name': 'Organ', 'freebase_id': '/m/013y1f'}, - {'id': 395, 'name': 'Saxophone', 'freebase_id': '/m/06ncr'}, - {'id': 396, 'name': 'Traffic light', 'freebase_id': '/m/015qff'}, - {'id': 397, 'name': 'Cocktail', 'freebase_id': '/m/024g6'}, - {'id': 398, 'name': 'Plastic bag', 'freebase_id': '/m/05gqfk'}, - {'id': 399, 'name': 'Squash', 'freebase_id': '/m/0dv77'}, - {'id': 400, 'name': 'Mushroom', 'freebase_id': '/m/052sf'}, - {'id': 401, 'name': 'Hamburger', 'freebase_id': '/m/0cdn1'}, - {'id': 402, 'name': 'Light switch', 'freebase_id': '/m/03jbxj'}, - {'id': 403, 'name': 'Parachute', 'freebase_id': '/m/0cyfs'}, - {'id': 404, 'name': 'Teddy bear', 'freebase_id': '/m/0kmg4'}, - {'id': 405, 'name': 'Winter melon', 'freebase_id': '/m/02cvgx'}, - {'id': 406, 'name': 'Deer', 'freebase_id': '/m/09kx5'}, - {'id': 407, 'name': 'Musical keyboard', 'freebase_id': '/m/057cc'}, - {'id': 408, 'name': 'Plumbing fixture', 'freebase_id': '/m/02pkr5'}, - {'id': 409, 'name': 'Scoreboard', 'freebase_id': '/m/057p5t'}, - {'id': 410, 'name': 'Baseball bat', 'freebase_id': '/m/03g8mr'}, - {'id': 411, 'name': 'Envelope', 'freebase_id': '/m/0frqm'}, - {'id': 412, 'name': 'Adhesive tape', 'freebase_id': '/m/03m3vtv'}, - {'id': 413, 'name': 'Briefcase', 'freebase_id': '/m/0584n8'}, - {'id': 414, 'name': 'Paddle', 'freebase_id': '/m/014y4n'}, - {'id': 415, 'name': 'Bow and arrow', 'freebase_id': '/m/01g3x7'}, - {'id': 416, 'name': 'Telephone', 'freebase_id': '/m/07cx4'}, - {'id': 417, 'name': 'Sheep', 'freebase_id': '/m/07bgp'}, - {'id': 418, 'name': 'Jacket', 'freebase_id': '/m/032b3c'}, - {'id': 419, 'name': 'Boy', 'freebase_id': '/m/01bl7v'}, - {'id': 420, 'name': 'Pizza', 'freebase_id': '/m/0663v'}, - {'id': 421, 'name': 'Otter', 'freebase_id': '/m/0cn6p'}, - {'id': 422, 'name': 'Office supplies', 'freebase_id': '/m/02rdsp'}, - {'id': 423, 'name': 'Couch', 'freebase_id': '/m/02crq1'}, - {'id': 424, 'name': 'Cello', 'freebase_id': '/m/01xqw'}, - {'id': 425, 'name': 'Bull', 'freebase_id': '/m/0cnyhnx'}, - {'id': 426, 'name': 'Camel', 'freebase_id': '/m/01x_v'}, - {'id': 427, 'name': 'Ball', 'freebase_id': '/m/018xm'}, - {'id': 428, 'name': 'Duck', 'freebase_id': '/m/09ddx'}, - {'id': 429, 'name': 'Whale', 'freebase_id': '/m/084zz'}, - {'id': 430, 'name': 'Shirt', 'freebase_id': '/m/01n4qj'}, - {'id': 431, 'name': 'Tank', 'freebase_id': '/m/07cmd'}, - {'id': 432, 'name': 'Motorcycle', 'freebase_id': '/m/04_sv'}, - {'id': 433, 'name': 'Accordion', 'freebase_id': '/m/0mkg'}, - {'id': 434, 'name': 'Owl', 'freebase_id': '/m/09d5_'}, - {'id': 435, 'name': 'Porcupine', 'freebase_id': '/m/0c568'}, - {'id': 436, 'name': 'Sun hat', 'freebase_id': '/m/02wbtzl'}, - {'id': 437, 'name': 'Nail', 'freebase_id': '/m/05bm6'}, - {'id': 438, 'name': 'Scissors', 'freebase_id': '/m/01lsmm'}, - {'id': 439, 'name': 'Swan', 'freebase_id': '/m/0dftk'}, - {'id': 440, 'name': 'Lamp', 'freebase_id': '/m/0dtln'}, - {'id': 441, 'name': 'Crown', 'freebase_id': '/m/0nl46'}, - {'id': 442, 'name': 'Piano', 'freebase_id': '/m/05r5c'}, - {'id': 443, 'name': 'Sculpture', 'freebase_id': '/m/06msq'}, - {'id': 444, 'name': 'Cheetah', 'freebase_id': '/m/0cd4d'}, - {'id': 445, 'name': 'Oboe', 'freebase_id': '/m/05kms'}, - {'id': 446, 'name': 'Tin can', 'freebase_id': '/m/02jnhm'}, - {'id': 447, 'name': 'Mango', 'freebase_id': '/m/0fldg'}, - {'id': 448, 'name': 'Tripod', 'freebase_id': '/m/073bxn'}, - {'id': 449, 'name': 'Oven', 'freebase_id': '/m/029bxz'}, - {'id': 450, 'name': 'Mouse', 'freebase_id': '/m/020lf'}, - {'id': 451, 'name': 'Barge', 'freebase_id': '/m/01btn'}, - {'id': 452, 'name': 'Coffee', 'freebase_id': '/m/02vqfm'}, - {'id': 453, 'name': 'Snowboard', 'freebase_id': '/m/06__v'}, - {'id': 454, 'name': 'Common fig', 'freebase_id': '/m/043nyj'}, - {'id': 455, 'name': 'Salad', 'freebase_id': '/m/0grw1'}, - {'id': 456, 'name': 'Marine invertebrates', 'freebase_id': '/m/03hl4l9'}, - {'id': 457, 'name': 'Umbrella', 'freebase_id': '/m/0hnnb'}, - {'id': 458, 'name': 'Kangaroo', 'freebase_id': '/m/04c0y'}, - {'id': 459, 'name': 'Human arm', 'freebase_id': '/m/0dzf4'}, - {'id': 460, 'name': 'Measuring cup', 'freebase_id': '/m/07v9_z'}, - {'id': 461, 'name': 'Snail', 'freebase_id': '/m/0f9_l'}, - {'id': 462, 'name': 'Loveseat', 'freebase_id': '/m/0703r8'}, - {'id': 463, 'name': 'Suit', 'freebase_id': '/m/01xyhv'}, - {'id': 464, 'name': 'Teapot', 'freebase_id': '/m/01fh4r'}, - {'id': 465, 'name': 'Bottle', 'freebase_id': '/m/04dr76w'}, - {'id': 466, 'name': 'Alpaca', 'freebase_id': '/m/0pcr'}, - {'id': 467, 'name': 'Kettle', 'freebase_id': '/m/03s_tn'}, - {'id': 468, 'name': 'Trousers', 'freebase_id': '/m/07mhn'}, - {'id': 469, 'name': 'Popcorn', 'freebase_id': '/m/01hrv5'}, - {'id': 470, 'name': 'Centipede', 'freebase_id': '/m/019h78'}, - {'id': 471, 'name': 'Spider', 'freebase_id': '/m/09kmb'}, - {'id': 472, 'name': 'Sparrow', 'freebase_id': '/m/0h23m'}, - {'id': 473, 'name': 'Plate', 'freebase_id': '/m/050gv4'}, - {'id': 474, 'name': 'Bagel', 'freebase_id': '/m/01fb_0'}, - {'id': 475, 'name': 'Personal care', 'freebase_id': '/m/02w3_ws'}, - {'id': 476, 'name': 'Apple', 'freebase_id': '/m/014j1m'}, - {'id': 477, 'name': 'Brassiere', 'freebase_id': '/m/01gmv2'}, - {'id': 478, 'name': 'Bathroom cabinet', 'freebase_id': '/m/04y4h8h'}, - {'id': 479, 'name': 'studio couch', 'freebase_id': '/m/026qbn5'}, - {'id': 480, 'name': 'Computer keyboard', 'freebase_id': '/m/01m2v'}, - {'id': 481, 'name': 'Table tennis racket', 'freebase_id': '/m/05_5p_0'}, - {'id': 482, 'name': 'Sushi', 'freebase_id': '/m/07030'}, - {'id': 483, 'name': 'Cabinetry', 'freebase_id': '/m/01s105'}, - {'id': 484, 'name': 'Street light', 'freebase_id': '/m/033rq4'}, - {'id': 485, 'name': 'Towel', 'freebase_id': '/m/0162_1'}, - {'id': 486, 'name': 'Nightstand', 'freebase_id': '/m/02z51p'}, - {'id': 487, 'name': 'Rabbit', 'freebase_id': '/m/06mf6'}, - {'id': 488, 'name': 'Dolphin', 'freebase_id': '/m/02hj4'}, - {'id': 489, 'name': 'Dog', 'freebase_id': '/m/0bt9lr'}, - {'id': 490, 'name': 'Jug', 'freebase_id': '/m/08hvt4'}, - {'id': 491, 'name': 'Wok', 'freebase_id': '/m/084rd'}, - {'id': 492, 'name': 'Fire hydrant', 'freebase_id': '/m/01pns0'}, - {'id': 493, 'name': 'Human eye', 'freebase_id': '/m/014sv8'}, - {'id': 494, 'name': 'Skyscraper', 'freebase_id': '/m/079cl'}, - {'id': 495, 'name': 'Backpack', 'freebase_id': '/m/01940j'}, - {'id': 496, 'name': 'Potato', 'freebase_id': '/m/05vtc'}, - {'id': 497, 'name': 'Paper towel', 'freebase_id': '/m/02w3r3'}, - {'id': 498, 'name': 'Lifejacket', 'freebase_id': '/m/054xkw'}, - {'id': 499, 'name': 'Bicycle wheel', 'freebase_id': '/m/01bqk0'}, - {'id': 500, 'name': 'Toilet', 'freebase_id': '/m/09g1w'}, + {"id": 1, "name": "Infant bed", "freebase_id": "/m/061hd_"}, + {"id": 2, "name": "Rose", "freebase_id": "/m/06m11"}, + {"id": 3, "name": "Flag", "freebase_id": "/m/03120"}, + {"id": 4, "name": "Flashlight", "freebase_id": "/m/01kb5b"}, + {"id": 5, "name": "Sea turtle", "freebase_id": "/m/0120dh"}, + {"id": 6, "name": "Camera", "freebase_id": "/m/0dv5r"}, + {"id": 7, "name": "Animal", "freebase_id": "/m/0jbk"}, + {"id": 8, "name": "Glove", "freebase_id": "/m/0174n1"}, + {"id": 9, "name": "Crocodile", "freebase_id": "/m/09f_2"}, + {"id": 10, "name": "Cattle", "freebase_id": "/m/01xq0k1"}, + {"id": 11, "name": "House", "freebase_id": "/m/03jm5"}, + {"id": 12, "name": "Guacamole", "freebase_id": "/m/02g30s"}, + {"id": 13, "name": "Penguin", "freebase_id": "/m/05z6w"}, + {"id": 14, "name": "Vehicle registration plate", "freebase_id": "/m/01jfm_"}, + {"id": 15, "name": "Bench", "freebase_id": "/m/076lb9"}, + {"id": 16, "name": "Ladybug", "freebase_id": "/m/0gj37"}, + {"id": 17, "name": "Human nose", "freebase_id": "/m/0k0pj"}, + {"id": 18, "name": "Watermelon", "freebase_id": "/m/0kpqd"}, + {"id": 19, "name": "Flute", "freebase_id": "/m/0l14j_"}, + {"id": 20, "name": "Butterfly", "freebase_id": "/m/0cyf8"}, + {"id": 21, "name": "Washing machine", "freebase_id": "/m/0174k2"}, + {"id": 22, "name": "Raccoon", "freebase_id": "/m/0dq75"}, + {"id": 23, "name": "Segway", "freebase_id": "/m/076bq"}, + {"id": 24, "name": "Taco", "freebase_id": "/m/07crc"}, + {"id": 25, "name": "Jellyfish", "freebase_id": "/m/0d8zb"}, + {"id": 26, "name": "Cake", "freebase_id": "/m/0fszt"}, + {"id": 27, "name": "Pen", "freebase_id": "/m/0k1tl"}, + {"id": 28, "name": "Cannon", "freebase_id": "/m/020kz"}, + {"id": 29, "name": "Bread", "freebase_id": "/m/09728"}, + {"id": 30, "name": "Tree", "freebase_id": "/m/07j7r"}, + {"id": 31, "name": "Shellfish", "freebase_id": "/m/0fbdv"}, + {"id": 32, "name": "Bed", "freebase_id": "/m/03ssj5"}, + {"id": 33, "name": "Hamster", "freebase_id": "/m/03qrc"}, + {"id": 34, "name": "Hat", "freebase_id": "/m/02dl1y"}, + {"id": 35, "name": "Toaster", "freebase_id": "/m/01k6s3"}, + {"id": 36, "name": "Sombrero", "freebase_id": "/m/02jfl0"}, + {"id": 37, "name": "Tiara", "freebase_id": "/m/01krhy"}, + {"id": 38, "name": "Bowl", "freebase_id": "/m/04kkgm"}, + {"id": 39, "name": "Dragonfly", "freebase_id": "/m/0ft9s"}, + {"id": 40, "name": "Moths and butterflies", "freebase_id": "/m/0d_2m"}, + {"id": 41, "name": "Antelope", "freebase_id": "/m/0czz2"}, + {"id": 42, "name": "Vegetable", "freebase_id": "/m/0f4s2w"}, + {"id": 43, "name": "Torch", "freebase_id": "/m/07dd4"}, + {"id": 44, "name": "Building", "freebase_id": "/m/0cgh4"}, + {"id": 45, "name": "Power plugs and sockets", "freebase_id": "/m/03bbps"}, + {"id": 46, "name": "Blender", "freebase_id": "/m/02pjr4"}, + {"id": 47, "name": "Billiard table", "freebase_id": "/m/04p0qw"}, + {"id": 48, "name": "Cutting board", "freebase_id": "/m/02pdsw"}, + {"id": 49, "name": "Bronze sculpture", "freebase_id": "/m/01yx86"}, + {"id": 50, "name": "Turtle", "freebase_id": "/m/09dzg"}, + {"id": 51, "name": "Broccoli", "freebase_id": "/m/0hkxq"}, + {"id": 52, "name": "Tiger", "freebase_id": "/m/07dm6"}, + {"id": 53, "name": "Mirror", "freebase_id": "/m/054_l"}, + {"id": 54, "name": "Bear", "freebase_id": "/m/01dws"}, + {"id": 55, "name": "Zucchini", "freebase_id": "/m/027pcv"}, + {"id": 56, "name": "Dress", "freebase_id": "/m/01d40f"}, + {"id": 57, "name": "Volleyball", "freebase_id": "/m/02rgn06"}, + {"id": 58, "name": "Guitar", "freebase_id": "/m/0342h"}, + {"id": 59, "name": "Reptile", "freebase_id": "/m/06bt6"}, + {"id": 60, "name": "Golf cart", "freebase_id": "/m/0323sq"}, + {"id": 61, "name": "Tart", "freebase_id": "/m/02zvsm"}, + {"id": 62, "name": "Fedora", "freebase_id": "/m/02fq_6"}, + {"id": 63, "name": "Carnivore", "freebase_id": "/m/01lrl"}, + {"id": 64, "name": "Car", "freebase_id": "/m/0k4j"}, + {"id": 65, "name": "Lighthouse", "freebase_id": "/m/04h7h"}, + {"id": 66, "name": "Coffeemaker", "freebase_id": "/m/07xyvk"}, + {"id": 67, "name": "Food processor", "freebase_id": "/m/03y6mg"}, + {"id": 68, "name": "Truck", "freebase_id": "/m/07r04"}, + {"id": 69, "name": "Bookcase", "freebase_id": "/m/03__z0"}, + {"id": 70, "name": "Surfboard", "freebase_id": "/m/019w40"}, + {"id": 71, "name": "Footwear", "freebase_id": "/m/09j5n"}, + {"id": 72, "name": "Bench", "freebase_id": "/m/0cvnqh"}, + {"id": 73, "name": "Necklace", "freebase_id": "/m/01llwg"}, + {"id": 74, "name": "Flower", "freebase_id": "/m/0c9ph5"}, + {"id": 75, "name": "Radish", "freebase_id": "/m/015x5n"}, + {"id": 76, "name": "Marine mammal", "freebase_id": "/m/0gd2v"}, + {"id": 77, "name": "Frying pan", "freebase_id": "/m/04v6l4"}, + {"id": 78, "name": "Tap", "freebase_id": "/m/02jz0l"}, + {"id": 79, "name": "Peach", "freebase_id": "/m/0dj6p"}, + {"id": 80, "name": "Knife", "freebase_id": "/m/04ctx"}, + {"id": 81, "name": "Handbag", "freebase_id": "/m/080hkjn"}, + {"id": 82, "name": "Laptop", "freebase_id": "/m/01c648"}, + {"id": 83, "name": "Tent", "freebase_id": "/m/01j61q"}, + {"id": 84, "name": "Ambulance", "freebase_id": "/m/012n7d"}, + {"id": 85, "name": "Christmas tree", "freebase_id": "/m/025nd"}, + {"id": 86, "name": "Eagle", "freebase_id": "/m/09csl"}, + {"id": 87, "name": "Limousine", "freebase_id": "/m/01lcw4"}, + {"id": 88, "name": "Kitchen & dining room table", "freebase_id": "/m/0h8n5zk"}, + {"id": 89, "name": "Polar bear", "freebase_id": "/m/0633h"}, + {"id": 90, "name": "Tower", "freebase_id": "/m/01fdzj"}, + {"id": 91, "name": "Football", "freebase_id": "/m/01226z"}, + {"id": 92, "name": "Willow", "freebase_id": "/m/0mw_6"}, + {"id": 93, "name": "Human head", "freebase_id": "/m/04hgtk"}, + {"id": 94, "name": "Stop sign", "freebase_id": "/m/02pv19"}, + {"id": 95, "name": "Banana", "freebase_id": "/m/09qck"}, + {"id": 96, "name": "Mixer", "freebase_id": "/m/063rgb"}, + {"id": 97, "name": "Binoculars", "freebase_id": "/m/0lt4_"}, + {"id": 98, "name": "Dessert", "freebase_id": "/m/0270h"}, + {"id": 99, "name": "Bee", "freebase_id": "/m/01h3n"}, + {"id": 100, "name": "Chair", "freebase_id": "/m/01mzpv"}, + {"id": 101, "name": "Wood-burning stove", "freebase_id": "/m/04169hn"}, + {"id": 102, "name": "Flowerpot", "freebase_id": "/m/0fm3zh"}, + {"id": 103, "name": "Beaker", "freebase_id": "/m/0d20w4"}, + {"id": 104, "name": "Oyster", "freebase_id": "/m/0_cp5"}, + {"id": 105, "name": "Woodpecker", "freebase_id": "/m/01dy8n"}, + {"id": 106, "name": "Harp", "freebase_id": "/m/03m5k"}, + {"id": 107, "name": "Bathtub", "freebase_id": "/m/03dnzn"}, + {"id": 108, "name": "Wall clock", "freebase_id": "/m/0h8mzrc"}, + {"id": 109, "name": "Sports uniform", "freebase_id": "/m/0h8mhzd"}, + {"id": 110, "name": "Rhinoceros", "freebase_id": "/m/03d443"}, + {"id": 111, "name": "Beehive", "freebase_id": "/m/01gllr"}, + {"id": 112, "name": "Cupboard", "freebase_id": "/m/0642b4"}, + {"id": 113, "name": "Chicken", "freebase_id": "/m/09b5t"}, + {"id": 114, "name": "Man", "freebase_id": "/m/04yx4"}, + {"id": 115, "name": "Blue jay", "freebase_id": "/m/01f8m5"}, + {"id": 116, "name": "Cucumber", "freebase_id": "/m/015x4r"}, + {"id": 117, "name": "Balloon", "freebase_id": "/m/01j51"}, + {"id": 118, "name": "Kite", "freebase_id": "/m/02zt3"}, + {"id": 119, "name": "Fireplace", "freebase_id": "/m/03tw93"}, + {"id": 120, "name": "Lantern", "freebase_id": "/m/01jfsr"}, + {"id": 121, "name": "Missile", "freebase_id": "/m/04ylt"}, + {"id": 122, "name": "Book", "freebase_id": "/m/0bt_c3"}, + {"id": 123, "name": "Spoon", "freebase_id": "/m/0cmx8"}, + {"id": 124, "name": "Grapefruit", "freebase_id": "/m/0hqkz"}, + {"id": 125, "name": "Squirrel", "freebase_id": "/m/071qp"}, + {"id": 126, "name": "Orange", "freebase_id": "/m/0cyhj_"}, + {"id": 127, "name": "Coat", "freebase_id": "/m/01xygc"}, + {"id": 128, "name": "Punching bag", "freebase_id": "/m/0420v5"}, + {"id": 129, "name": "Zebra", "freebase_id": "/m/0898b"}, + {"id": 130, "name": "Billboard", "freebase_id": "/m/01knjb"}, + {"id": 131, "name": "Bicycle", "freebase_id": "/m/0199g"}, + {"id": 132, "name": "Door handle", "freebase_id": "/m/03c7gz"}, + {"id": 133, "name": "Mechanical fan", "freebase_id": "/m/02x984l"}, + {"id": 134, "name": "Ring binder", "freebase_id": "/m/04zwwv"}, + {"id": 135, "name": "Table", "freebase_id": "/m/04bcr3"}, + {"id": 136, "name": "Parrot", "freebase_id": "/m/0gv1x"}, + {"id": 137, "name": "Sock", "freebase_id": "/m/01nq26"}, + {"id": 138, "name": "Vase", "freebase_id": "/m/02s195"}, + {"id": 139, "name": "Weapon", "freebase_id": "/m/083kb"}, + {"id": 140, "name": "Shotgun", "freebase_id": "/m/06nrc"}, + {"id": 141, "name": "Glasses", "freebase_id": "/m/0jyfg"}, + {"id": 142, "name": "Seahorse", "freebase_id": "/m/0nybt"}, + {"id": 143, "name": "Belt", "freebase_id": "/m/0176mf"}, + {"id": 144, "name": "Watercraft", "freebase_id": "/m/01rzcn"}, + {"id": 145, "name": "Window", "freebase_id": "/m/0d4v4"}, + {"id": 146, "name": "Giraffe", "freebase_id": "/m/03bk1"}, + {"id": 147, "name": "Lion", "freebase_id": "/m/096mb"}, + {"id": 148, "name": "Tire", "freebase_id": "/m/0h9mv"}, + {"id": 149, "name": "Vehicle", "freebase_id": "/m/07yv9"}, + {"id": 150, "name": "Canoe", "freebase_id": "/m/0ph39"}, + {"id": 151, "name": "Tie", "freebase_id": "/m/01rkbr"}, + {"id": 152, "name": "Shelf", "freebase_id": "/m/0gjbg72"}, + {"id": 153, "name": "Picture frame", "freebase_id": "/m/06z37_"}, + {"id": 154, "name": "Printer", "freebase_id": "/m/01m4t"}, + {"id": 155, "name": "Human leg", "freebase_id": "/m/035r7c"}, + {"id": 156, "name": "Boat", "freebase_id": "/m/019jd"}, + {"id": 157, "name": "Slow cooker", "freebase_id": "/m/02tsc9"}, + {"id": 158, "name": "Croissant", "freebase_id": "/m/015wgc"}, + {"id": 159, "name": "Candle", "freebase_id": "/m/0c06p"}, + {"id": 160, "name": "Pancake", "freebase_id": "/m/01dwwc"}, + {"id": 161, "name": "Pillow", "freebase_id": "/m/034c16"}, + {"id": 162, "name": "Coin", "freebase_id": "/m/0242l"}, + {"id": 163, "name": "Stretcher", "freebase_id": "/m/02lbcq"}, + {"id": 164, "name": "Sandal", "freebase_id": "/m/03nfch"}, + {"id": 165, "name": "Woman", "freebase_id": "/m/03bt1vf"}, + {"id": 166, "name": "Stairs", "freebase_id": "/m/01lynh"}, + {"id": 167, "name": "Harpsichord", "freebase_id": "/m/03q5t"}, + {"id": 168, "name": "Stool", "freebase_id": "/m/0fqt361"}, + {"id": 169, "name": "Bus", "freebase_id": "/m/01bjv"}, + {"id": 170, "name": "Suitcase", "freebase_id": "/m/01s55n"}, + {"id": 171, "name": "Human mouth", "freebase_id": "/m/0283dt1"}, + {"id": 172, "name": "Juice", "freebase_id": "/m/01z1kdw"}, + {"id": 173, "name": "Skull", "freebase_id": "/m/016m2d"}, + {"id": 174, "name": "Door", "freebase_id": "/m/02dgv"}, + {"id": 175, "name": "Violin", "freebase_id": "/m/07y_7"}, + {"id": 176, "name": "Chopsticks", "freebase_id": "/m/01_5g"}, + {"id": 177, "name": "Digital clock", "freebase_id": "/m/06_72j"}, + {"id": 178, "name": "Sunflower", "freebase_id": "/m/0ftb8"}, + {"id": 179, "name": "Leopard", "freebase_id": "/m/0c29q"}, + {"id": 180, "name": "Bell pepper", "freebase_id": "/m/0jg57"}, + {"id": 181, "name": "Harbor seal", "freebase_id": "/m/02l8p9"}, + {"id": 182, "name": "Snake", "freebase_id": "/m/078jl"}, + {"id": 183, "name": "Sewing machine", "freebase_id": "/m/0llzx"}, + {"id": 184, "name": "Goose", "freebase_id": "/m/0dbvp"}, + {"id": 185, "name": "Helicopter", "freebase_id": "/m/09ct_"}, + {"id": 186, "name": "Seat belt", "freebase_id": "/m/0dkzw"}, + {"id": 187, "name": "Coffee cup", "freebase_id": "/m/02p5f1q"}, + {"id": 188, "name": "Microwave oven", "freebase_id": "/m/0fx9l"}, + {"id": 189, "name": "Hot dog", "freebase_id": "/m/01b9xk"}, + {"id": 190, "name": "Countertop", "freebase_id": "/m/0b3fp9"}, + {"id": 191, "name": "Serving tray", "freebase_id": "/m/0h8n27j"}, + {"id": 192, "name": "Dog bed", "freebase_id": "/m/0h8n6f9"}, + {"id": 193, "name": "Beer", "freebase_id": "/m/01599"}, + {"id": 194, "name": "Sunglasses", "freebase_id": "/m/017ftj"}, + {"id": 195, "name": "Golf ball", "freebase_id": "/m/044r5d"}, + {"id": 196, "name": "Waffle", "freebase_id": "/m/01dwsz"}, + {"id": 197, "name": "Palm tree", "freebase_id": "/m/0cdl1"}, + {"id": 198, "name": "Trumpet", "freebase_id": "/m/07gql"}, + {"id": 199, "name": "Ruler", "freebase_id": "/m/0hdln"}, + {"id": 200, "name": "Helmet", "freebase_id": "/m/0zvk5"}, + {"id": 201, "name": "Ladder", "freebase_id": "/m/012w5l"}, + {"id": 202, "name": "Office building", "freebase_id": "/m/021sj1"}, + {"id": 203, "name": "Tablet computer", "freebase_id": "/m/0bh9flk"}, + {"id": 204, "name": "Toilet paper", "freebase_id": "/m/09gtd"}, + {"id": 205, "name": "Pomegranate", "freebase_id": "/m/0jwn_"}, + {"id": 206, "name": "Skirt", "freebase_id": "/m/02wv6h6"}, + {"id": 207, "name": "Gas stove", "freebase_id": "/m/02wv84t"}, + {"id": 208, "name": "Cookie", "freebase_id": "/m/021mn"}, + {"id": 209, "name": "Cart", "freebase_id": "/m/018p4k"}, + {"id": 210, "name": "Raven", "freebase_id": "/m/06j2d"}, + {"id": 211, "name": "Egg", "freebase_id": "/m/033cnk"}, + {"id": 212, "name": "Burrito", "freebase_id": "/m/01j3zr"}, + {"id": 213, "name": "Goat", "freebase_id": "/m/03fwl"}, + {"id": 214, "name": "Kitchen knife", "freebase_id": "/m/058qzx"}, + {"id": 215, "name": "Skateboard", "freebase_id": "/m/06_fw"}, + {"id": 216, "name": "Salt and pepper shakers", "freebase_id": "/m/02x8cch"}, + {"id": 217, "name": "Lynx", "freebase_id": "/m/04g2r"}, + {"id": 218, "name": "Boot", "freebase_id": "/m/01b638"}, + {"id": 219, "name": "Platter", "freebase_id": "/m/099ssp"}, + {"id": 220, "name": "Ski", "freebase_id": "/m/071p9"}, + {"id": 221, "name": "Swimwear", "freebase_id": "/m/01gkx_"}, + {"id": 222, "name": "Swimming pool", "freebase_id": "/m/0b_rs"}, + {"id": 223, "name": "Drinking straw", "freebase_id": "/m/03v5tg"}, + {"id": 224, "name": "Wrench", "freebase_id": "/m/01j5ks"}, + {"id": 225, "name": "Drum", "freebase_id": "/m/026t6"}, + {"id": 226, "name": "Ant", "freebase_id": "/m/0_k2"}, + {"id": 227, "name": "Human ear", "freebase_id": "/m/039xj_"}, + {"id": 228, "name": "Headphones", "freebase_id": "/m/01b7fy"}, + {"id": 229, "name": "Fountain", "freebase_id": "/m/0220r2"}, + {"id": 230, "name": "Bird", "freebase_id": "/m/015p6"}, + {"id": 231, "name": "Jeans", "freebase_id": "/m/0fly7"}, + {"id": 232, "name": "Television", "freebase_id": "/m/07c52"}, + {"id": 233, "name": "Crab", "freebase_id": "/m/0n28_"}, + {"id": 234, "name": "Microphone", "freebase_id": "/m/0hg7b"}, + {"id": 235, "name": "Home appliance", "freebase_id": "/m/019dx1"}, + {"id": 236, "name": "Snowplow", "freebase_id": "/m/04vv5k"}, + {"id": 237, "name": "Beetle", "freebase_id": "/m/020jm"}, + {"id": 238, "name": "Artichoke", "freebase_id": "/m/047v4b"}, + {"id": 239, "name": "Jet ski", "freebase_id": "/m/01xs3r"}, + {"id": 240, "name": "Stationary bicycle", "freebase_id": "/m/03kt2w"}, + {"id": 241, "name": "Human hair", "freebase_id": "/m/03q69"}, + {"id": 242, "name": "Brown bear", "freebase_id": "/m/01dxs"}, + {"id": 243, "name": "Starfish", "freebase_id": "/m/01h8tj"}, + {"id": 244, "name": "Fork", "freebase_id": "/m/0dt3t"}, + {"id": 245, "name": "Lobster", "freebase_id": "/m/0cjq5"}, + {"id": 246, "name": "Corded phone", "freebase_id": "/m/0h8lkj8"}, + {"id": 247, "name": "Drink", "freebase_id": "/m/0271t"}, + {"id": 248, "name": "Saucer", "freebase_id": "/m/03q5c7"}, + {"id": 249, "name": "Carrot", "freebase_id": "/m/0fj52s"}, + {"id": 250, "name": "Insect", "freebase_id": "/m/03vt0"}, + {"id": 251, "name": "Clock", "freebase_id": "/m/01x3z"}, + {"id": 252, "name": "Castle", "freebase_id": "/m/0d5gx"}, + {"id": 253, "name": "Tennis racket", "freebase_id": "/m/0h8my_4"}, + {"id": 254, "name": "Ceiling fan", "freebase_id": "/m/03ldnb"}, + {"id": 255, "name": "Asparagus", "freebase_id": "/m/0cjs7"}, + {"id": 256, "name": "Jaguar", "freebase_id": "/m/0449p"}, + {"id": 257, "name": "Musical instrument", "freebase_id": "/m/04szw"}, + {"id": 258, "name": "Train", "freebase_id": "/m/07jdr"}, + {"id": 259, "name": "Cat", "freebase_id": "/m/01yrx"}, + {"id": 260, "name": "Rifle", "freebase_id": "/m/06c54"}, + {"id": 261, "name": "Dumbbell", "freebase_id": "/m/04h8sr"}, + {"id": 262, "name": "Mobile phone", "freebase_id": "/m/050k8"}, + {"id": 263, "name": "Taxi", "freebase_id": "/m/0pg52"}, + {"id": 264, "name": "Shower", "freebase_id": "/m/02f9f_"}, + {"id": 265, "name": "Pitcher", "freebase_id": "/m/054fyh"}, + {"id": 266, "name": "Lemon", "freebase_id": "/m/09k_b"}, + {"id": 267, "name": "Invertebrate", "freebase_id": "/m/03xxp"}, + {"id": 268, "name": "Turkey", "freebase_id": "/m/0jly1"}, + {"id": 269, "name": "High heels", "freebase_id": "/m/06k2mb"}, + {"id": 270, "name": "Bust", "freebase_id": "/m/04yqq2"}, + {"id": 271, "name": "Elephant", "freebase_id": "/m/0bwd_0j"}, + {"id": 272, "name": "Scarf", "freebase_id": "/m/02h19r"}, + {"id": 273, "name": "Barrel", "freebase_id": "/m/02zn6n"}, + {"id": 274, "name": "Trombone", "freebase_id": "/m/07c6l"}, + {"id": 275, "name": "Pumpkin", "freebase_id": "/m/05zsy"}, + {"id": 276, "name": "Box", "freebase_id": "/m/025dyy"}, + {"id": 277, "name": "Tomato", "freebase_id": "/m/07j87"}, + {"id": 278, "name": "Frog", "freebase_id": "/m/09ld4"}, + {"id": 279, "name": "Bidet", "freebase_id": "/m/01vbnl"}, + {"id": 280, "name": "Human face", "freebase_id": "/m/0dzct"}, + {"id": 281, "name": "Houseplant", "freebase_id": "/m/03fp41"}, + {"id": 282, "name": "Van", "freebase_id": "/m/0h2r6"}, + {"id": 283, "name": "Shark", "freebase_id": "/m/0by6g"}, + {"id": 284, "name": "Ice cream", "freebase_id": "/m/0cxn2"}, + {"id": 285, "name": "Swim cap", "freebase_id": "/m/04tn4x"}, + {"id": 286, "name": "Falcon", "freebase_id": "/m/0f6wt"}, + {"id": 287, "name": "Ostrich", "freebase_id": "/m/05n4y"}, + {"id": 288, "name": "Handgun", "freebase_id": "/m/0gxl3"}, + {"id": 289, "name": "Whiteboard", "freebase_id": "/m/02d9qx"}, + {"id": 290, "name": "Lizard", "freebase_id": "/m/04m9y"}, + {"id": 291, "name": "Pasta", "freebase_id": "/m/05z55"}, + {"id": 292, "name": "Snowmobile", "freebase_id": "/m/01x3jk"}, + {"id": 293, "name": "Light bulb", "freebase_id": "/m/0h8l4fh"}, + {"id": 294, "name": "Window blind", "freebase_id": "/m/031b6r"}, + {"id": 295, "name": "Muffin", "freebase_id": "/m/01tcjp"}, + {"id": 296, "name": "Pretzel", "freebase_id": "/m/01f91_"}, + {"id": 297, "name": "Computer monitor", "freebase_id": "/m/02522"}, + {"id": 298, "name": "Horn", "freebase_id": "/m/0319l"}, + {"id": 299, "name": "Furniture", "freebase_id": "/m/0c_jw"}, + {"id": 300, "name": "Sandwich", "freebase_id": "/m/0l515"}, + {"id": 301, "name": "Fox", "freebase_id": "/m/0306r"}, + {"id": 302, "name": "Convenience store", "freebase_id": "/m/0crjs"}, + {"id": 303, "name": "Fish", "freebase_id": "/m/0ch_cf"}, + {"id": 304, "name": "Fruit", "freebase_id": "/m/02xwb"}, + {"id": 305, "name": "Earrings", "freebase_id": "/m/01r546"}, + {"id": 306, "name": "Curtain", "freebase_id": "/m/03rszm"}, + {"id": 307, "name": "Grape", "freebase_id": "/m/0388q"}, + {"id": 308, "name": "Sofa bed", "freebase_id": "/m/03m3pdh"}, + {"id": 309, "name": "Horse", "freebase_id": "/m/03k3r"}, + {"id": 310, "name": "Luggage and bags", "freebase_id": "/m/0hf58v5"}, + {"id": 311, "name": "Desk", "freebase_id": "/m/01y9k5"}, + {"id": 312, "name": "Crutch", "freebase_id": "/m/05441v"}, + {"id": 313, "name": "Bicycle helmet", "freebase_id": "/m/03p3bw"}, + {"id": 314, "name": "Tick", "freebase_id": "/m/0175cv"}, + {"id": 315, "name": "Airplane", "freebase_id": "/m/0cmf2"}, + {"id": 316, "name": "Canary", "freebase_id": "/m/0ccs93"}, + {"id": 317, "name": "Spatula", "freebase_id": "/m/02d1br"}, + {"id": 318, "name": "Watch", "freebase_id": "/m/0gjkl"}, + {"id": 319, "name": "Lily", "freebase_id": "/m/0jqgx"}, + {"id": 320, "name": "Kitchen appliance", "freebase_id": "/m/0h99cwc"}, + {"id": 321, "name": "Filing cabinet", "freebase_id": "/m/047j0r"}, + {"id": 322, "name": "Aircraft", "freebase_id": "/m/0k5j"}, + {"id": 323, "name": "Cake stand", "freebase_id": "/m/0h8n6ft"}, + {"id": 324, "name": "Candy", "freebase_id": "/m/0gm28"}, + {"id": 325, "name": "Sink", "freebase_id": "/m/0130jx"}, + {"id": 326, "name": "Mouse", "freebase_id": "/m/04rmv"}, + {"id": 327, "name": "Wine", "freebase_id": "/m/081qc"}, + {"id": 328, "name": "Wheelchair", "freebase_id": "/m/0qmmr"}, + {"id": 329, "name": "Goldfish", "freebase_id": "/m/03fj2"}, + {"id": 330, "name": "Refrigerator", "freebase_id": "/m/040b_t"}, + {"id": 331, "name": "French fries", "freebase_id": "/m/02y6n"}, + {"id": 332, "name": "Drawer", "freebase_id": "/m/0fqfqc"}, + {"id": 333, "name": "Treadmill", "freebase_id": "/m/030610"}, + {"id": 334, "name": "Picnic basket", "freebase_id": "/m/07kng9"}, + {"id": 335, "name": "Dice", "freebase_id": "/m/029b3"}, + {"id": 336, "name": "Cabbage", "freebase_id": "/m/0fbw6"}, + {"id": 337, "name": "Football helmet", "freebase_id": "/m/07qxg_"}, + {"id": 338, "name": "Pig", "freebase_id": "/m/068zj"}, + {"id": 339, "name": "Person", "freebase_id": "/m/01g317"}, + {"id": 340, "name": "Shorts", "freebase_id": "/m/01bfm9"}, + {"id": 341, "name": "Gondola", "freebase_id": "/m/02068x"}, + {"id": 342, "name": "Honeycomb", "freebase_id": "/m/0fz0h"}, + {"id": 343, "name": "Doughnut", "freebase_id": "/m/0jy4k"}, + {"id": 344, "name": "Chest of drawers", "freebase_id": "/m/05kyg_"}, + {"id": 345, "name": "Land vehicle", "freebase_id": "/m/01prls"}, + {"id": 346, "name": "Bat", "freebase_id": "/m/01h44"}, + {"id": 347, "name": "Monkey", "freebase_id": "/m/08pbxl"}, + {"id": 348, "name": "Dagger", "freebase_id": "/m/02gzp"}, + {"id": 349, "name": "Tableware", "freebase_id": "/m/04brg2"}, + {"id": 350, "name": "Human foot", "freebase_id": "/m/031n1"}, + {"id": 351, "name": "Mug", "freebase_id": "/m/02jvh9"}, + {"id": 352, "name": "Alarm clock", "freebase_id": "/m/046dlr"}, + {"id": 353, "name": "Pressure cooker", "freebase_id": "/m/0h8ntjv"}, + {"id": 354, "name": "Human hand", "freebase_id": "/m/0k65p"}, + {"id": 355, "name": "Tortoise", "freebase_id": "/m/011k07"}, + {"id": 356, "name": "Baseball glove", "freebase_id": "/m/03grzl"}, + {"id": 357, "name": "Sword", "freebase_id": "/m/06y5r"}, + {"id": 358, "name": "Pear", "freebase_id": "/m/061_f"}, + {"id": 359, "name": "Miniskirt", "freebase_id": "/m/01cmb2"}, + {"id": 360, "name": "Traffic sign", "freebase_id": "/m/01mqdt"}, + {"id": 361, "name": "Girl", "freebase_id": "/m/05r655"}, + {"id": 362, "name": "Roller skates", "freebase_id": "/m/02p3w7d"}, + {"id": 363, "name": "Dinosaur", "freebase_id": "/m/029tx"}, + {"id": 364, "name": "Porch", "freebase_id": "/m/04m6gz"}, + {"id": 365, "name": "Human beard", "freebase_id": "/m/015h_t"}, + {"id": 366, "name": "Submarine sandwich", "freebase_id": "/m/06pcq"}, + {"id": 367, "name": "Screwdriver", "freebase_id": "/m/01bms0"}, + {"id": 368, "name": "Strawberry", "freebase_id": "/m/07fbm7"}, + {"id": 369, "name": "Wine glass", "freebase_id": "/m/09tvcd"}, + {"id": 370, "name": "Seafood", "freebase_id": "/m/06nwz"}, + {"id": 371, "name": "Racket", "freebase_id": "/m/0dv9c"}, + {"id": 372, "name": "Wheel", "freebase_id": "/m/083wq"}, + {"id": 373, "name": "Sea lion", "freebase_id": "/m/0gd36"}, + {"id": 374, "name": "Toy", "freebase_id": "/m/0138tl"}, + {"id": 375, "name": "Tea", "freebase_id": "/m/07clx"}, + {"id": 376, "name": "Tennis ball", "freebase_id": "/m/05ctyq"}, + {"id": 377, "name": "Waste container", "freebase_id": "/m/0bjyj5"}, + {"id": 378, "name": "Mule", "freebase_id": "/m/0dbzx"}, + {"id": 379, "name": "Cricket ball", "freebase_id": "/m/02ctlc"}, + {"id": 380, "name": "Pineapple", "freebase_id": "/m/0fp6w"}, + {"id": 381, "name": "Coconut", "freebase_id": "/m/0djtd"}, + {"id": 382, "name": "Doll", "freebase_id": "/m/0167gd"}, + {"id": 383, "name": "Coffee table", "freebase_id": "/m/078n6m"}, + {"id": 384, "name": "Snowman", "freebase_id": "/m/0152hh"}, + {"id": 385, "name": "Lavender", "freebase_id": "/m/04gth"}, + {"id": 386, "name": "Shrimp", "freebase_id": "/m/0ll1f78"}, + {"id": 387, "name": "Maple", "freebase_id": "/m/0cffdh"}, + {"id": 388, "name": "Cowboy hat", "freebase_id": "/m/025rp__"}, + {"id": 389, "name": "Goggles", "freebase_id": "/m/02_n6y"}, + {"id": 390, "name": "Rugby ball", "freebase_id": "/m/0wdt60w"}, + {"id": 391, "name": "Caterpillar", "freebase_id": "/m/0cydv"}, + {"id": 392, "name": "Poster", "freebase_id": "/m/01n5jq"}, + {"id": 393, "name": "Rocket", "freebase_id": "/m/09rvcxw"}, + {"id": 394, "name": "Organ", "freebase_id": "/m/013y1f"}, + {"id": 395, "name": "Saxophone", "freebase_id": "/m/06ncr"}, + {"id": 396, "name": "Traffic light", "freebase_id": "/m/015qff"}, + {"id": 397, "name": "Cocktail", "freebase_id": "/m/024g6"}, + {"id": 398, "name": "Plastic bag", "freebase_id": "/m/05gqfk"}, + {"id": 399, "name": "Squash", "freebase_id": "/m/0dv77"}, + {"id": 400, "name": "Mushroom", "freebase_id": "/m/052sf"}, + {"id": 401, "name": "Hamburger", "freebase_id": "/m/0cdn1"}, + {"id": 402, "name": "Light switch", "freebase_id": "/m/03jbxj"}, + {"id": 403, "name": "Parachute", "freebase_id": "/m/0cyfs"}, + {"id": 404, "name": "Teddy bear", "freebase_id": "/m/0kmg4"}, + {"id": 405, "name": "Winter melon", "freebase_id": "/m/02cvgx"}, + {"id": 406, "name": "Deer", "freebase_id": "/m/09kx5"}, + {"id": 407, "name": "Musical keyboard", "freebase_id": "/m/057cc"}, + {"id": 408, "name": "Plumbing fixture", "freebase_id": "/m/02pkr5"}, + {"id": 409, "name": "Scoreboard", "freebase_id": "/m/057p5t"}, + {"id": 410, "name": "Baseball bat", "freebase_id": "/m/03g8mr"}, + {"id": 411, "name": "Envelope", "freebase_id": "/m/0frqm"}, + {"id": 412, "name": "Adhesive tape", "freebase_id": "/m/03m3vtv"}, + {"id": 413, "name": "Briefcase", "freebase_id": "/m/0584n8"}, + {"id": 414, "name": "Paddle", "freebase_id": "/m/014y4n"}, + {"id": 415, "name": "Bow and arrow", "freebase_id": "/m/01g3x7"}, + {"id": 416, "name": "Telephone", "freebase_id": "/m/07cx4"}, + {"id": 417, "name": "Sheep", "freebase_id": "/m/07bgp"}, + {"id": 418, "name": "Jacket", "freebase_id": "/m/032b3c"}, + {"id": 419, "name": "Boy", "freebase_id": "/m/01bl7v"}, + {"id": 420, "name": "Pizza", "freebase_id": "/m/0663v"}, + {"id": 421, "name": "Otter", "freebase_id": "/m/0cn6p"}, + {"id": 422, "name": "Office supplies", "freebase_id": "/m/02rdsp"}, + {"id": 423, "name": "Couch", "freebase_id": "/m/02crq1"}, + {"id": 424, "name": "Cello", "freebase_id": "/m/01xqw"}, + {"id": 425, "name": "Bull", "freebase_id": "/m/0cnyhnx"}, + {"id": 426, "name": "Camel", "freebase_id": "/m/01x_v"}, + {"id": 427, "name": "Ball", "freebase_id": "/m/018xm"}, + {"id": 428, "name": "Duck", "freebase_id": "/m/09ddx"}, + {"id": 429, "name": "Whale", "freebase_id": "/m/084zz"}, + {"id": 430, "name": "Shirt", "freebase_id": "/m/01n4qj"}, + {"id": 431, "name": "Tank", "freebase_id": "/m/07cmd"}, + {"id": 432, "name": "Motorcycle", "freebase_id": "/m/04_sv"}, + {"id": 433, "name": "Accordion", "freebase_id": "/m/0mkg"}, + {"id": 434, "name": "Owl", "freebase_id": "/m/09d5_"}, + {"id": 435, "name": "Porcupine", "freebase_id": "/m/0c568"}, + {"id": 436, "name": "Sun hat", "freebase_id": "/m/02wbtzl"}, + {"id": 437, "name": "Nail", "freebase_id": "/m/05bm6"}, + {"id": 438, "name": "Scissors", "freebase_id": "/m/01lsmm"}, + {"id": 439, "name": "Swan", "freebase_id": "/m/0dftk"}, + {"id": 440, "name": "Lamp", "freebase_id": "/m/0dtln"}, + {"id": 441, "name": "Crown", "freebase_id": "/m/0nl46"}, + {"id": 442, "name": "Piano", "freebase_id": "/m/05r5c"}, + {"id": 443, "name": "Sculpture", "freebase_id": "/m/06msq"}, + {"id": 444, "name": "Cheetah", "freebase_id": "/m/0cd4d"}, + {"id": 445, "name": "Oboe", "freebase_id": "/m/05kms"}, + {"id": 446, "name": "Tin can", "freebase_id": "/m/02jnhm"}, + {"id": 447, "name": "Mango", "freebase_id": "/m/0fldg"}, + {"id": 448, "name": "Tripod", "freebase_id": "/m/073bxn"}, + {"id": 449, "name": "Oven", "freebase_id": "/m/029bxz"}, + {"id": 450, "name": "Mouse", "freebase_id": "/m/020lf"}, + {"id": 451, "name": "Barge", "freebase_id": "/m/01btn"}, + {"id": 452, "name": "Coffee", "freebase_id": "/m/02vqfm"}, + {"id": 453, "name": "Snowboard", "freebase_id": "/m/06__v"}, + {"id": 454, "name": "Common fig", "freebase_id": "/m/043nyj"}, + {"id": 455, "name": "Salad", "freebase_id": "/m/0grw1"}, + {"id": 456, "name": "Marine invertebrates", "freebase_id": "/m/03hl4l9"}, + {"id": 457, "name": "Umbrella", "freebase_id": "/m/0hnnb"}, + {"id": 458, "name": "Kangaroo", "freebase_id": "/m/04c0y"}, + {"id": 459, "name": "Human arm", "freebase_id": "/m/0dzf4"}, + {"id": 460, "name": "Measuring cup", "freebase_id": "/m/07v9_z"}, + {"id": 461, "name": "Snail", "freebase_id": "/m/0f9_l"}, + {"id": 462, "name": "Loveseat", "freebase_id": "/m/0703r8"}, + {"id": 463, "name": "Suit", "freebase_id": "/m/01xyhv"}, + {"id": 464, "name": "Teapot", "freebase_id": "/m/01fh4r"}, + {"id": 465, "name": "Bottle", "freebase_id": "/m/04dr76w"}, + {"id": 466, "name": "Alpaca", "freebase_id": "/m/0pcr"}, + {"id": 467, "name": "Kettle", "freebase_id": "/m/03s_tn"}, + {"id": 468, "name": "Trousers", "freebase_id": "/m/07mhn"}, + {"id": 469, "name": "Popcorn", "freebase_id": "/m/01hrv5"}, + {"id": 470, "name": "Centipede", "freebase_id": "/m/019h78"}, + {"id": 471, "name": "Spider", "freebase_id": "/m/09kmb"}, + {"id": 472, "name": "Sparrow", "freebase_id": "/m/0h23m"}, + {"id": 473, "name": "Plate", "freebase_id": "/m/050gv4"}, + {"id": 474, "name": "Bagel", "freebase_id": "/m/01fb_0"}, + {"id": 475, "name": "Personal care", "freebase_id": "/m/02w3_ws"}, + {"id": 476, "name": "Apple", "freebase_id": "/m/014j1m"}, + {"id": 477, "name": "Brassiere", "freebase_id": "/m/01gmv2"}, + {"id": 478, "name": "Bathroom cabinet", "freebase_id": "/m/04y4h8h"}, + {"id": 479, "name": "studio couch", "freebase_id": "/m/026qbn5"}, + {"id": 480, "name": "Computer keyboard", "freebase_id": "/m/01m2v"}, + {"id": 481, "name": "Table tennis racket", "freebase_id": "/m/05_5p_0"}, + {"id": 482, "name": "Sushi", "freebase_id": "/m/07030"}, + {"id": 483, "name": "Cabinetry", "freebase_id": "/m/01s105"}, + {"id": 484, "name": "Street light", "freebase_id": "/m/033rq4"}, + {"id": 485, "name": "Towel", "freebase_id": "/m/0162_1"}, + {"id": 486, "name": "Nightstand", "freebase_id": "/m/02z51p"}, + {"id": 487, "name": "Rabbit", "freebase_id": "/m/06mf6"}, + {"id": 488, "name": "Dolphin", "freebase_id": "/m/02hj4"}, + {"id": 489, "name": "Dog", "freebase_id": "/m/0bt9lr"}, + {"id": 490, "name": "Jug", "freebase_id": "/m/08hvt4"}, + {"id": 491, "name": "Wok", "freebase_id": "/m/084rd"}, + {"id": 492, "name": "Fire hydrant", "freebase_id": "/m/01pns0"}, + {"id": 493, "name": "Human eye", "freebase_id": "/m/014sv8"}, + {"id": 494, "name": "Skyscraper", "freebase_id": "/m/079cl"}, + {"id": 495, "name": "Backpack", "freebase_id": "/m/01940j"}, + {"id": 496, "name": "Potato", "freebase_id": "/m/05vtc"}, + {"id": 497, "name": "Paper towel", "freebase_id": "/m/02w3r3"}, + {"id": 498, "name": "Lifejacket", "freebase_id": "/m/054xkw"}, + {"id": 499, "name": "Bicycle wheel", "freebase_id": "/m/01bqk0"}, + {"id": 500, "name": "Toilet", "freebase_id": "/m/09g1w"}, ] def _get_builtin_metadata(cats): - id_to_name = {x['id']: x['name'] for x in cats} + id_to_name = {x["id"]: x["name"] for x in cats} thing_dataset_id_to_contiguous_id = {i + 1: i for i in range(len(cats))} - thing_classes = [x['name'] for x in sorted(cats, key=lambda x: x['id'])] + thing_classes = [x["name"] for x in sorted(cats, key=lambda x: x["id"])] return { "thing_dataset_id_to_contiguous_id": thing_dataset_id_to_contiguous_id, - "thing_classes": thing_classes} + "thing_classes": thing_classes, + } + _PREDEFINED_SPLITS_OID = { # cat threshold: 500, 1500: r 170, c 151, f 179 @@ -521,8 +523,14 @@ def _get_builtin_metadata(cats): # "expanded" duplicates annotations to their father classes based on the official # hierarchy. This is used in the official evaulation protocol. # https://storage.googleapis.com/openimages/web/evaluation.html - "oid_val_expanded": ("oid/images/validation/", "oid/annotations/oid_challenge_2019_val_expanded.json"), - "oid_val_expanded_rare": ("oid/images/validation/", "oid/annotations/oid_challenge_2019_val_expanded_rare.json"), + "oid_val_expanded": ( + "oid/images/validation/", + "oid/annotations/oid_challenge_2019_val_expanded.json", + ), + "oid_val_expanded_rare": ( + "oid/images/validation/", + "oid/annotations/oid_challenge_2019_val_expanded_rare.json", + ), } @@ -532,4 +540,4 @@ def _get_builtin_metadata(cats): _get_builtin_metadata(categories), os.path.join("datasets", json_file) if "://" not in json_file else json_file, os.path.join("datasets", image_root), - ) \ No newline at end of file + ) diff --git a/dimos/models/Detic/detic/data/datasets/register_oid.py b/dimos/models/Detic/detic/data/datasets/register_oid.py index bd281f53f0..6ba843d2f5 100644 --- a/dimos/models/Detic/detic/data/datasets/register_oid.py +++ b/dimos/models/Detic/detic/data/datasets/register_oid.py @@ -1,19 +1,14 @@ # Copyright (c) Facebook, Inc. and its affiliates. # Modified by Xingyi Zhou from https://github.com/facebookresearch/detectron2/blob/master/detectron2/data/datasets/coco.py -import copy import io import logging import contextlib import os -import datetime -import json -import numpy as np -from PIL import Image from fvcore.common.timer import Timer -from fvcore.common.file_io import PathManager, file_lock -from detectron2.structures import BoxMode, PolygonMasks, Boxes +from fvcore.common.file_io import PathManager +from detectron2.structures import BoxMode from detectron2.data import DatasetCatalog, MetadataCatalog logger = logging.getLogger(__name__) @@ -25,13 +20,12 @@ __all__ = ["register_coco_instances", "register_coco_panoptic_separated"] - def register_oid_instances(name, metadata, json_file, image_root): - """ - """ + """ """ # 1. register a function which returns dicts - DatasetCatalog.register(name, lambda: load_coco_json_mem_efficient( - json_file, image_root, name)) + DatasetCatalog.register( + name, lambda: load_coco_json_mem_efficient(json_file, image_root, name) + ) # 2. Optionally, add metadata about this dataset, # since they might be useful in evaluation, visualization or logging @@ -40,7 +34,9 @@ def register_oid_instances(name, metadata, json_file, image_root): ) -def load_coco_json_mem_efficient(json_file, image_root, dataset_name=None, extra_annotation_keys=None): +def load_coco_json_mem_efficient( + json_file, image_root, dataset_name=None, extra_annotation_keys=None +): """ Actually not mem efficient """ @@ -51,7 +47,9 @@ def load_coco_json_mem_efficient(json_file, image_root, dataset_name=None, extra with contextlib.redirect_stdout(io.StringIO()): coco_api = COCO(json_file) if timer.seconds() > 1: - logger.info("Loading {} takes {:.2f} seconds.".format(json_file, timer.seconds())) + logger.info( + "Loading {} takes {:.2f} seconds.".format(json_file, timer.seconds()) + ) id_map = None if dataset_name is not None: @@ -88,9 +86,10 @@ def load_coco_json_mem_efficient(json_file, image_root, dataset_name=None, extra record["width"] = img_dict["width"] image_id = record["image_id"] = img_dict["id"] anno_dict_list = coco_api.imgToAnns[image_id] - if 'neg_category_ids' in img_dict: - record['neg_category_ids'] = \ - [id_map[x] for x in img_dict['neg_category_ids']] + if "neg_category_ids" in img_dict: + record["neg_category_ids"] = [ + id_map[x] for x in img_dict["neg_category_ids"] + ] objs = [] for anno in anno_dict_list: @@ -104,7 +103,9 @@ def load_coco_json_mem_efficient(json_file, image_root, dataset_name=None, extra if segm: # either list[list[float]] or dict(RLE) if not isinstance(segm, dict): # filter out invalid polygons (< 3 points) - segm = [poly for poly in segm if len(poly) % 2 == 0 and len(poly) >= 6] + segm = [ + poly for poly in segm if len(poly) % 2 == 0 and len(poly) >= 6 + ] if len(segm) == 0: num_instances_without_valid_segmentation += 1 continue # ignore this instance @@ -117,6 +118,6 @@ def load_coco_json_mem_efficient(json_file, image_root, dataset_name=None, extra objs.append(obj) record["annotations"] = objs dataset_dicts.append(record) - + del coco_api - return dataset_dicts \ No newline at end of file + return dataset_dicts diff --git a/dimos/models/Detic/detic/data/tar_dataset.py b/dimos/models/Detic/detic/data/tar_dataset.py index 0605ba3a96..1004cc6ff8 100644 --- a/dimos/models/Detic/detic/data/tar_dataset.py +++ b/dimos/models/Detic/detic/data/tar_dataset.py @@ -15,12 +15,15 @@ # UnidentifiedImageError isn't available in older versions of PIL unidentified_error_available = False + class DiskTarDataset(Dataset): - def __init__(self, - tarfile_path='dataset/imagenet/ImageNet-21k/metadata/tar_files.npy', - tar_index_dir='dataset/imagenet/ImageNet-21k/metadata/tarindex_npy', - preload=False, - num_synsets="all"): + def __init__( + self, + tarfile_path="dataset/imagenet/ImageNet-21k/metadata/tar_files.npy", + tar_index_dir="dataset/imagenet/ImageNet-21k/metadata/tarindex_npy", + preload=False, + num_synsets="all", + ): """ - preload (bool): Recommend to set preload to False when using - num_synsets (integer or string "all"): set to small number for debugging @@ -45,8 +48,10 @@ def __init__(self, labels = np.zeros(self.dataset_lens.sum(), dtype=np.int64) sI = 0 for k in range(len(self.dataset_lens)): - assert (sI+self.dataset_lens[k]) <= len(labels), f"{k} {sI+self.dataset_lens[k]} vs. {len(labels)}" - labels[sI:(sI+self.dataset_lens[k])] = k + assert (sI + self.dataset_lens[k]) <= len(labels), ( + f"{k} {sI + self.dataset_lens[k]} vs. {len(labels)}" + ) + labels[sI : (sI + self.dataset_lens[k])] = k sI += self.dataset_lens[k] self.labels = labels @@ -62,7 +67,9 @@ def __getitem__(self, index): if index in self.dataset_cumsums: d_index += 1 - assert d_index == self.labels[index], f"{d_index} vs. {self.labels[index]} mismatch for {index}" + assert d_index == self.labels[index], ( + f"{d_index} vs. {self.labels[index]} mismatch for {index}" + ) # change index to local dataset index if d_index == 0: @@ -70,11 +77,13 @@ def __getitem__(self, index): else: local_index = index - self.dataset_cumsums[d_index - 1] data_bytes = self.chunk_datasets[d_index][local_index] - exception_to_catch = UnidentifiedImageError if unidentified_error_available else Exception + exception_to_catch = ( + UnidentifiedImageError if unidentified_error_available else Exception + ) try: image = Image.open(data_bytes).convert("RGB") except exception_to_catch: - image = Image.fromarray(np.ones((224,224,3), dtype=np.uint8)*128) + image = Image.fromarray(np.ones((224, 224, 3), dtype=np.uint8) * 128) d_index = -1 # label is the dataset (synset) we indexed into @@ -84,8 +93,8 @@ def __repr__(self): st = f"DiskTarDataset(subdatasets={len(self.dataset_lens)},samples={self.num_samples})" return st -class _TarDataset(object): +class _TarDataset(object): def __init__(self, filename, npy_index_dir, preload=False): # translated from # fbcode/experimental/deeplearning/matthijs/comp_descs/tardataset.lua @@ -97,12 +106,11 @@ def __init__(self, filename, npy_index_dir, preload=False): self.num_samples = len(names) if preload: - self.data = np.memmap(filename, mode='r', dtype='uint8') + self.data = np.memmap(filename, mode="r", dtype="uint8") self.offsets = offsets else: self.data = None - def __len__(self): return self.num_samples @@ -115,24 +123,24 @@ def load_index(self): def __getitem__(self, idx): if self.data is None: - self.data = np.memmap(self.filename, mode='r', dtype='uint8') + self.data = np.memmap(self.filename, mode="r", dtype="uint8") _, self.offsets = self.load_index() ofs = self.offsets[idx] * 512 fsize = 512 * (self.offsets[idx + 1] - self.offsets[idx]) - data = self.data[ofs:ofs + fsize] + data = self.data[ofs : ofs + fsize] - if data[:13].tostring() == '././@LongLink': - data = data[3 * 512:] + if data[:13].tostring() == "././@LongLink": + data = data[3 * 512 :] else: data = data[512:] # just to make it more fun a few JPEGs are GZIP compressed... # catch this case - if tuple(data[:2]) == (0x1f, 0x8b): + if tuple(data[:2]) == (0x1F, 0x8B): s = io.BytesIO(data.tostring()) - g = gzip.GzipFile(None, 'r', 0, s) + g = gzip.GzipFile(None, "r", 0, s) sdata = g.read() else: sdata = data.tostring() - return io.BytesIO(sdata) \ No newline at end of file + return io.BytesIO(sdata) diff --git a/dimos/models/Detic/detic/data/transforms/custom_augmentation_impl.py b/dimos/models/Detic/detic/data/transforms/custom_augmentation_impl.py index 47bef39566..0b3a380e5f 100644 --- a/dimos/models/Detic/detic/data/transforms/custom_augmentation_impl.py +++ b/dimos/models/Detic/detic/data/transforms/custom_augmentation_impl.py @@ -1,18 +1,9 @@ # -*- coding: utf-8 -*- # Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved -# Part of the code is from https://github.com/rwightman/efficientdet-pytorch/blob/master/effdet/data/transforms.py +# Part of the code is from https://github.com/rwightman/efficientdet-pytorch/blob/master/effdet/data/transforms.py # Modified by Xingyi Zhou # The original code is under Apache-2.0 License import numpy as np -import sys -from fvcore.transforms.transform import ( - BlendTransform, - CropTransform, - HFlipTransform, - NoOpTransform, - Transform, - VFlipTransform, -) from PIL import Image from detectron2.data.transforms.augmentation import Augmentation @@ -22,17 +13,15 @@ "EfficientDetResizeCrop", ] + class EfficientDetResizeCrop(Augmentation): """ Scale the shorter edge to the given size, with a limit of `max_size` on the longer edge. If `max_size` is reached, then downscale so that the longer edge does not exceed max_size. """ - def __init__( - self, size, scale, interp=Image.BILINEAR - ): - """ - """ + def __init__(self, size, scale, interp=Image.BILINEAR): + """ """ super().__init__() self.target_size = (size, size) self.scale = scale @@ -57,4 +46,11 @@ def get_transform(self, img): offset_y = int(max(0.0, float(offset_y)) * np.random.uniform(0, 1)) offset_x = int(max(0.0, float(offset_x)) * np.random.uniform(0, 1)) return EfficientDetResizeCropTransform( - scaled_h, scaled_w, offset_y, offset_x, img_scale, self.target_size, self.interp) + scaled_h, + scaled_w, + offset_y, + offset_x, + img_scale, + self.target_size, + self.interp, + ) diff --git a/dimos/models/Detic/detic/data/transforms/custom_transform.py b/dimos/models/Detic/detic/data/transforms/custom_transform.py index 3cc28b6b31..857e4478af 100644 --- a/dimos/models/Detic/detic/data/transforms/custom_transform.py +++ b/dimos/models/Detic/detic/data/transforms/custom_transform.py @@ -1,17 +1,13 @@ # -*- coding: utf-8 -*- # Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved -# Part of the code is from https://github.com/rwightman/efficientdet-pytorch/blob/master/effdet/data/transforms.py +# Part of the code is from https://github.com/rwightman/efficientdet-pytorch/blob/master/effdet/data/transforms.py # Modified by Xingyi Zhou # The original code is under Apache-2.0 License import numpy as np import torch import torch.nn.functional as F from fvcore.transforms.transform import ( - CropTransform, - HFlipTransform, - NoOpTransform, Transform, - TransformList, ) from PIL import Image @@ -25,12 +21,20 @@ "EfficientDetResizeCropTransform", ] -class EfficientDetResizeCropTransform(Transform): - """ - """ - def __init__(self, scaled_h, scaled_w, offset_y, offset_x, img_scale, \ - target_size, interp=None): +class EfficientDetResizeCropTransform(Transform): + """ """ + + def __init__( + self, + scaled_h, + scaled_w, + offset_y, + offset_x, + img_scale, + target_size, + interp=None, + ): """ Args: h, w (int): original image size @@ -54,29 +58,33 @@ def apply_image(self, img, interp=None): right = min(self.scaled_w, self.offset_x + self.target_size[1]) lower = min(self.scaled_h, self.offset_y + self.target_size[0]) if len(ret.shape) <= 3: - ret = ret[self.offset_y: lower, self.offset_x: right] + ret = ret[self.offset_y : lower, self.offset_x : right] else: - ret = ret[..., self.offset_y: lower, self.offset_x: right, :] + ret = ret[..., self.offset_y : lower, self.offset_x : right, :] else: # PIL only supports uint8 img = torch.from_numpy(img) shape = list(img.shape) shape_4d = shape[:2] + [1] * (4 - len(shape)) + shape[2:] img = img.view(shape_4d).permute(2, 3, 0, 1) # hw(c) -> nchw - _PIL_RESIZE_TO_INTERPOLATE_MODE = {Image.BILINEAR: "bilinear", Image.BICUBIC: "bicubic"} + _PIL_RESIZE_TO_INTERPOLATE_MODE = { + Image.BILINEAR: "bilinear", + Image.BICUBIC: "bicubic", + } mode = _PIL_RESIZE_TO_INTERPOLATE_MODE[self.interp] - img = F.interpolate(img, (self.scaled_h, self.scaled_w), mode=mode, align_corners=False) + img = F.interpolate( + img, (self.scaled_h, self.scaled_w), mode=mode, align_corners=False + ) shape[:2] = (self.scaled_h, self.scaled_w) ret = img.permute(2, 3, 0, 1).view(shape).numpy() # nchw -> hw(c) right = min(self.scaled_w, self.offset_x + self.target_size[1]) lower = min(self.scaled_h, self.offset_y + self.target_size[0]) if len(ret.shape) <= 3: - ret = ret[self.offset_y: lower, self.offset_x: right] + ret = ret[self.offset_y : lower, self.offset_x : right] else: - ret = ret[..., self.offset_y: lower, self.offset_x: right, :] + ret = ret[..., self.offset_y : lower, self.offset_x : right, :] return ret - def apply_coords(self, coords): coords[:, 0] = coords[:, 0] * self.img_scale coords[:, 1] = coords[:, 1] * self.img_scale @@ -84,16 +92,13 @@ def apply_coords(self, coords): coords[:, 1] -= self.offset_y return coords - def apply_segmentation(self, segmentation): segmentation = self.apply_image(segmentation, interp=Image.NEAREST) return segmentation - def inverse(self): raise NotImplementedError - def inverse_apply_coords(self, coords): coords[:, 0] += self.offset_x coords[:, 1] += self.offset_y @@ -101,14 +106,12 @@ def inverse_apply_coords(self, coords): coords[:, 1] = coords[:, 1] / self.img_scale return coords - def inverse_apply_box(self, box: np.ndarray) -> np.ndarray: - """ - """ + """ """ idxs = np.array([(0, 1), (2, 1), (0, 3), (2, 3)]).flatten() coords = np.asarray(box).reshape(-1, 4)[:, idxs].reshape(-1, 2) coords = self.inverse_apply_coords(coords).reshape((-1, 4, 2)) minxy = coords.min(axis=1) maxxy = coords.max(axis=1) trans_boxes = np.concatenate((minxy, maxxy), axis=1) - return trans_boxes \ No newline at end of file + return trans_boxes diff --git a/dimos/models/Detic/detic/evaluation/custom_coco_eval.py b/dimos/models/Detic/detic/evaluation/custom_coco_eval.py index 2ea1d5e570..8eb4cd8e6f 100644 --- a/dimos/models/Detic/detic/evaluation/custom_coco_eval.py +++ b/dimos/models/Detic/detic/evaluation/custom_coco_eval.py @@ -1,36 +1,19 @@ # Copyright (c) Facebook, Inc. and its affiliates. -import contextlib -import copy -import io import itertools -import json -import logging import numpy as np -import os -import pickle -from collections import OrderedDict -import pycocotools.mask as mask_util -import torch -from pycocotools.coco import COCO -from pycocotools.cocoeval import COCOeval from tabulate import tabulate -import detectron2.utils.comm as comm -from detectron2.config import CfgNode -from detectron2.data import MetadataCatalog -from detectron2.data.datasets.coco import convert_to_coco_json from detectron2.evaluation.coco_evaluation import COCOEvaluator -from detectron2.structures import Boxes, BoxMode, pairwise_iou -from detectron2.utils.file_io import PathManager from detectron2.utils.logger import create_small_table from ..data.datasets.coco_zeroshot import categories_seen, categories_unseen + class CustomCOCOEvaluator(COCOEvaluator): def _derive_coco_results(self, coco_eval, iou_type, class_names=None): """ Additionally plot mAP for 'seen classes' and 'unseen classes' """ - + metrics = { "bbox": ["AP", "AP50", "AP75", "APs", "APm", "APl"], "segm": ["AP", "AP50", "AP75", "APs", "APm", "APl"], @@ -43,11 +26,14 @@ def _derive_coco_results(self, coco_eval, iou_type, class_names=None): # the standard metrics results = { - metric: float(coco_eval.stats[idx] * 100 if coco_eval.stats[idx] >= 0 else "nan") + metric: float( + coco_eval.stats[idx] * 100 if coco_eval.stats[idx] >= 0 else "nan" + ) for idx, metric in enumerate(metrics) } self._logger.info( - "Evaluation results for {}: \n".format(iou_type) + create_small_table(results) + "Evaluation results for {}: \n".format(iou_type) + + create_small_table(results) ) if not np.isfinite(sum(results.values())): self._logger.info("Some metrics cannot be computed and is shown as NaN.") @@ -60,8 +46,8 @@ def _derive_coco_results(self, coco_eval, iou_type, class_names=None): # precision has dims (iou, recall, cls, area range, max dets) assert len(class_names) == precisions.shape[2] - seen_names = set([x['name'] for x in categories_seen]) - unseen_names = set([x['name'] for x in categories_unseen]) + seen_names = set([x["name"] for x in categories_seen]) + unseen_names = set([x["name"] for x in categories_unseen]) results_per_category = [] results_per_category50 = [] results_per_category50_seen = [] @@ -85,7 +71,9 @@ def _derive_coco_results(self, coco_eval, iou_type, class_names=None): # tabulate it N_COLS = min(6, len(results_per_category) * 2) results_flatten = list(itertools.chain(*results_per_category)) - results_2d = itertools.zip_longest(*[results_flatten[i::N_COLS] for i in range(N_COLS)]) + results_2d = itertools.zip_longest( + *[results_flatten[i::N_COLS] for i in range(N_COLS)] + ) table = tabulate( results_2d, tablefmt="pipe", @@ -95,10 +83,11 @@ def _derive_coco_results(self, coco_eval, iou_type, class_names=None): ) self._logger.info("Per-category {} AP: \n".format(iou_type) + table) - N_COLS = min(6, len(results_per_category50) * 2) results_flatten = list(itertools.chain(*results_per_category50)) - results_2d = itertools.zip_longest(*[results_flatten[i::N_COLS] for i in range(N_COLS)]) + results_2d = itertools.zip_longest( + *[results_flatten[i::N_COLS] for i in range(N_COLS)] + ) table = tabulate( results_2d, tablefmt="pipe", @@ -111,14 +100,20 @@ def _derive_coco_results(self, coco_eval, iou_type, class_names=None): "Seen {} AP50: {}".format( iou_type, sum(results_per_category50_seen) / len(results_per_category50_seen), - )) + ) + ) self._logger.info( "Unseen {} AP50: {}".format( iou_type, sum(results_per_category50_unseen) / len(results_per_category50_unseen), - )) + ) + ) results.update({"AP-" + name: ap for name, ap in results_per_category}) - results["AP50-seen"] = sum(results_per_category50_seen) / len(results_per_category50_seen) - results["AP50-unseen"] = sum(results_per_category50_unseen) / len(results_per_category50_unseen) - return results \ No newline at end of file + results["AP50-seen"] = sum(results_per_category50_seen) / len( + results_per_category50_seen + ) + results["AP50-unseen"] = sum(results_per_category50_unseen) / len( + results_per_category50_unseen + ) + return results diff --git a/dimos/models/Detic/detic/evaluation/oideval.py b/dimos/models/Detic/detic/evaluation/oideval.py index e60125aec2..371337f86e 100644 --- a/dimos/models/Detic/detic/evaluation/oideval.py +++ b/dimos/models/Detic/detic/evaluation/oideval.py @@ -8,7 +8,7 @@ # The code is from https://github.com/xingyizhou/UniDet/blob/master/projects/UniDet/unidet/evaluation/oideval.py # The original code is under Apache-2.0 License # Copyright (c) Facebook, Inc. and its affiliates. -import os +import os import datetime import logging import itertools @@ -32,54 +32,61 @@ from detectron2.utils.logger import create_small_table from detectron2.evaluation import DatasetEvaluator + def compute_average_precision(precision, recall): - """Compute Average Precision according to the definition in VOCdevkit. - Precision is modified to ensure that it does not decrease as recall - decrease. - Args: - precision: A float [N, 1] numpy array of precisions - recall: A float [N, 1] numpy array of recalls - Raises: - ValueError: if the input is not of the correct format - Returns: - average_precison: The area under the precision recall curve. NaN if - precision and recall are None. - """ - if precision is None: - if recall is not None: - raise ValueError("If precision is None, recall must also be None") - return np.NAN - - if not isinstance(precision, np.ndarray) or not isinstance( - recall, np.ndarray): - raise ValueError("precision and recall must be numpy array") - if precision.dtype != np.float or recall.dtype != np.float: - raise ValueError("input must be float numpy array.") - if len(precision) != len(recall): - raise ValueError("precision and recall must be of the same size.") - if not precision.size: - return 0.0 - if np.amin(precision) < 0 or np.amax(precision) > 1: - raise ValueError("Precision must be in the range of [0, 1].") - if np.amin(recall) < 0 or np.amax(recall) > 1: - raise ValueError("recall must be in the range of [0, 1].") - if not all(recall[i] <= recall[i + 1] for i in range(len(recall) - 1)): - raise ValueError("recall must be a non-decreasing array") - - recall = np.concatenate([[0], recall, [1]]) - precision = np.concatenate([[0], precision, [0]]) - - for i in range(len(precision) - 2, -1, -1): - precision[i] = np.maximum(precision[i], precision[i + 1]) - indices = np.where(recall[1:] != recall[:-1])[0] + 1 - average_precision = np.sum( - (recall[indices] - recall[indices - 1]) * precision[indices]) - return average_precision + """Compute Average Precision according to the definition in VOCdevkit. + Precision is modified to ensure that it does not decrease as recall + decrease. + Args: + precision: A float [N, 1] numpy array of precisions + recall: A float [N, 1] numpy array of recalls + Raises: + ValueError: if the input is not of the correct format + Returns: + average_precison: The area under the precision recall curve. NaN if + precision and recall are None. + """ + if precision is None: + if recall is not None: + raise ValueError("If precision is None, recall must also be None") + return np.NAN + + if not isinstance(precision, np.ndarray) or not isinstance(recall, np.ndarray): + raise ValueError("precision and recall must be numpy array") + if precision.dtype != np.float or recall.dtype != np.float: + raise ValueError("input must be float numpy array.") + if len(precision) != len(recall): + raise ValueError("precision and recall must be of the same size.") + if not precision.size: + return 0.0 + if np.amin(precision) < 0 or np.amax(precision) > 1: + raise ValueError("Precision must be in the range of [0, 1].") + if np.amin(recall) < 0 or np.amax(recall) > 1: + raise ValueError("recall must be in the range of [0, 1].") + if not all(recall[i] <= recall[i + 1] for i in range(len(recall) - 1)): + raise ValueError("recall must be a non-decreasing array") + + recall = np.concatenate([[0], recall, [1]]) + precision = np.concatenate([[0], precision, [0]]) + + for i in range(len(precision) - 2, -1, -1): + precision[i] = np.maximum(precision[i], precision[i + 1]) + indices = np.where(recall[1:] != recall[:-1])[0] + 1 + average_precision = np.sum( + (recall[indices] - recall[indices - 1]) * precision[indices] + ) + return average_precision + class OIDEval: def __init__( - self, lvis_gt, lvis_dt, iou_type="bbox", expand_pred_label=False, - oid_hierarchy_path='./datasets/oid/annotations/challenge-2019-label500-hierarchy.json'): + self, + lvis_gt, + lvis_dt, + iou_type="bbox", + expand_pred_label=False, + oid_hierarchy_path="./datasets/oid/annotations/challenge-2019-label500-hierarchy.json", + ): """Constructor for OIDEval. Args: lvis_gt (LVIS class instance, or str containing path of annotation file) @@ -108,46 +115,49 @@ def __init__( raise TypeError("Unsupported type {} of lvis_dt.".format(lvis_dt)) if expand_pred_label: - oid_hierarchy = json.load(open(oid_hierarchy_path, 'r')) - cat_info = self.lvis_gt.dataset['categories'] - freebase2id = {x['freebase_id']: x['id'] for x in cat_info} - id2freebase = {x['id']: x['freebase_id'] for x in cat_info} - id2name = {x['id']: x['name'] for x in cat_info} - + oid_hierarchy = json.load(open(oid_hierarchy_path, "r")) + cat_info = self.lvis_gt.dataset["categories"] + freebase2id = {x["freebase_id"]: x["id"] for x in cat_info} + id2freebase = {x["id"]: x["freebase_id"] for x in cat_info} + id2name = {x["id"]: x["name"] for x in cat_info} + fas = defaultdict(set) + def dfs(hierarchy, cur_id): all_childs = set() all_keyed_child = {} - if 'Subcategory' in hierarchy: - for x in hierarchy['Subcategory']: - childs = dfs(x, freebase2id[x['LabelName']]) + if "Subcategory" in hierarchy: + for x in hierarchy["Subcategory"]: + childs = dfs(x, freebase2id[x["LabelName"]]) all_childs.update(childs) if cur_id != -1: for c in all_childs: fas[c].add(cur_id) all_childs.add(cur_id) return all_childs + dfs(oid_hierarchy, -1) - + expanded_pred = [] id_count = 0 - for d in self.lvis_dt.dataset['annotations']: - cur_id = d['category_id'] + for d in self.lvis_dt.dataset["annotations"]: + cur_id = d["category_id"] ids = [cur_id] + [x for x in fas[cur_id]] for cat_id in ids: new_box = copy.deepcopy(d) id_count = id_count + 1 - new_box['id'] = id_count - new_box['category_id'] = cat_id + new_box["id"] = id_count + new_box["category_id"] = cat_id expanded_pred.append(new_box) - print('Expanding original {} preds to {} preds'.format( - len(self.lvis_dt.dataset['annotations']), - len(expanded_pred) - )) - self.lvis_dt.dataset['annotations'] = expanded_pred + print( + "Expanding original {} preds to {} preds".format( + len(self.lvis_dt.dataset["annotations"]), len(expanded_pred) + ) + ) + self.lvis_dt.dataset["annotations"] = expanded_pred self.lvis_dt._create_index() - + # per-image per-category evaluation results self.eval_imgs = defaultdict(list) self.eval = {} # accumulated evaluation results @@ -199,7 +209,7 @@ def _prepare(self): # img_pl[ann["image_id"]].add(ann["category_id"]) assert ann["category_id"] in img_pl[ann["image_id"]] # print('check pos ids OK.') - + for dt in dts: img_id, cat_id = dt["image_id"], dt["category_id"] if cat_id not in img_nl[img_id] and cat_id not in img_pl[img_id]: @@ -230,7 +240,7 @@ def evaluate(self): } # loop through images, area range, max detection number - print('Evaluating ...') + print("Evaluating ...") self.eval_imgs = [ self.evaluate_img_google(img_id, cat_id, area_rng) for cat_id in cat_ids @@ -270,7 +280,7 @@ def compute_iou(self, img_id, cat_id): dt = [dt[i] for i in idx] # iscrowd = [int(False)] * len(gt) - iscrowd = [int('iscrowd' in g and g['iscrowd'] > 0) for g in gt] + iscrowd = [int("iscrowd" in g and g["iscrowd"] > 0) for g in gt] if self.params.iou_type == "segm": ann_type = "segmentation" @@ -290,7 +300,7 @@ def evaluate_img_google(self, img_id, cat_id, area_rng): gt, dt = self._get_gt_dt(img_id, cat_id) if len(gt) == 0 and len(dt) == 0: return None - + if len(dt) == 0: return { "image_id": img_id, @@ -300,13 +310,15 @@ def evaluate_img_google(self, img_id, cat_id, area_rng): "dt_matches": np.array([], dtype=np.int32).reshape(1, -1), "dt_scores": [], "dt_ignore": np.array([], dtype=np.int32).reshape(1, -1), - 'num_gt': len(gt) + "num_gt": len(gt), } - no_crowd_inds = [i for i, g in enumerate(gt) \ - if ('iscrowd' not in g) or g['iscrowd'] == 0] - crowd_inds = [i for i, g in enumerate(gt) \ - if 'iscrowd' in g and g['iscrowd'] == 1] + no_crowd_inds = [ + i for i, g in enumerate(gt) if ("iscrowd" not in g) or g["iscrowd"] == 0 + ] + crowd_inds = [ + i for i, g in enumerate(gt) if "iscrowd" in g and g["iscrowd"] == 1 + ] dt_idx = np.argsort([-d["score"] for d in dt], kind="mergesort") if len(self.ious[img_id, cat_id]) > 0: @@ -318,7 +330,7 @@ def evaluate_img_google(self, img_id, cat_id, area_rng): else: iou = np.zeros((len(dt_idx), 0)) ioa = np.zeros((len(dt_idx), 0)) - scores = np.array([dt[i]['score'] for i in dt_idx]) + scores = np.array([dt[i]["score"] for i in dt_idx]) num_detected_boxes = len(dt) tp_fp_labels = np.zeros(num_detected_boxes, dtype=bool) @@ -329,9 +341,11 @@ def compute_match_iou(iou): is_gt_detected = np.zeros(iou.shape[1], dtype=bool) for i in range(num_detected_boxes): gt_id = max_overlap_gt_ids[i] - is_evaluatable = (not tp_fp_labels[i] and - iou[i, gt_id] >= 0.5 and - not is_matched_to_group_of[i]) + is_evaluatable = ( + not tp_fp_labels[i] + and iou[i, gt_id] >= 0.5 + and not is_matched_to_group_of[i] + ) if is_evaluatable: if not is_gt_detected[gt_id]: tp_fp_labels[i] = True @@ -339,14 +353,15 @@ def compute_match_iou(iou): def compute_match_ioa(ioa): scores_group_of = np.zeros(ioa.shape[1], dtype=float) - tp_fp_labels_group_of = np.ones( - ioa.shape[1], dtype=float) + tp_fp_labels_group_of = np.ones(ioa.shape[1], dtype=float) max_overlap_group_of_gt_ids = np.argmax(ioa, axis=1) for i in range(num_detected_boxes): gt_id = max_overlap_group_of_gt_ids[i] - is_evaluatable = (not tp_fp_labels[i] and - ioa[i, gt_id] >= 0.5 and - not is_matched_to_group_of[i]) + is_evaluatable = ( + not tp_fp_labels[i] + and ioa[i, gt_id] >= 0.5 + and not is_matched_to_group_of[i] + ) if is_evaluatable: is_matched_to_group_of[i] = True scores_group_of[gt_id] = max(scores_group_of[gt_id], scores[i]) @@ -365,22 +380,23 @@ def compute_match_ioa(ioa): if ioa.shape[1] > 0: scores_box_group_of, tp_fp_labels_box_group_of = compute_match_ioa(ioa) - valid_entries = (~is_matched_to_group_of) + valid_entries = ~is_matched_to_group_of - scores = np.concatenate( - (scores[valid_entries], scores_box_group_of)) + scores = np.concatenate((scores[valid_entries], scores_box_group_of)) tp_fps = np.concatenate( - (tp_fp_labels[valid_entries].astype(float), - tp_fp_labels_box_group_of)) - + (tp_fp_labels[valid_entries].astype(float), tp_fp_labels_box_group_of) + ) + return { "image_id": img_id, "category_id": cat_id, "area_rng": area_rng, - "dt_matches": np.array([1 if x > 0 else 0 for x in tp_fps], dtype=np.int32).reshape(1, -1), + "dt_matches": np.array( + [1 if x > 0 else 0 for x in tp_fps], dtype=np.int32 + ).reshape(1, -1), "dt_scores": [x for x in scores], - "dt_ignore": np.array([0 for x in scores], dtype=np.int32).reshape(1, -1), - 'num_gt': len(gt) + "dt_ignore": np.array([0 for x in scores], dtype=np.int32).reshape(1, -1), + "num_gt": len(gt), } def accumulate(self): @@ -405,9 +421,7 @@ def accumulate(self): num_imgs = len(self.params.img_ids) # -1 for absent categories - precision = -np.ones( - (num_thrs, num_recalls, num_cats, num_area_rngs) - ) + precision = -np.ones((num_thrs, num_recalls, num_cats, num_area_rngs)) recall = -np.ones((num_thrs, num_cats, num_area_rngs)) # Initialize dt_pointers @@ -422,12 +436,9 @@ def accumulate(self): Nk = cat_idx * num_area_rngs * num_imgs for area_idx in range(num_area_rngs): Na = area_idx * num_imgs - E = [ - self.eval_imgs[Nk + Na + img_idx] - for img_idx in range(num_imgs) - ] + E = [self.eval_imgs[Nk + Na + img_idx] for img_idx in range(num_imgs)] # Remove elements which are None - E = [e for e in E if not e is None] + E = [e for e in E if e is not None] if len(E) == 0: continue @@ -437,7 +448,7 @@ def accumulate(self): dt_m = np.concatenate([e["dt_matches"] for e in E], axis=1)[:, dt_idx] dt_ig = np.concatenate([e["dt_ignore"] for e in E], axis=1)[:, dt_idx] - num_gt = sum([e['num_gt'] for e in E]) + num_gt = sum([e["num_gt"] for e in E]) if num_gt == 0: continue @@ -456,11 +467,9 @@ def accumulate(self): fp = np.array(fp) num_tp = len(tp) rc = tp / num_gt - + if num_tp: - recall[iou_thr_idx, cat_idx, area_idx] = rc[ - -1 - ] + recall[iou_thr_idx, cat_idx, area_idx] = rc[-1] else: recall[iou_thr_idx, cat_idx, area_idx] = 0 @@ -473,8 +482,9 @@ def accumulate(self): pr[i - 1] = pr[i] mAP = compute_average_precision( - np.array(pr, np.float).reshape(-1), - np.array(rc, np.float).reshape(-1)) + np.array(pr, np.float).reshape(-1), + np.array(rc, np.float).reshape(-1), + ) precision[iou_thr_idx, :, cat_idx, area_idx] = mAP self.eval = { @@ -501,7 +511,7 @@ def summarize(self): raise RuntimeError("Please run accumulate() first.") max_dets = self.params.max_dets - self.results["AP50"] = self._summarize('ap') + self.results["AP50"] = self._summarize("ap") def run(self): """Wrapper function which calculates the results.""" @@ -522,7 +532,7 @@ def print_results(self): _type = "(AR)" if len(key) > 2 and key[2].isdigit(): - iou_thr = (float(key[2:]) / 100) + iou_thr = float(key[2:]) / 100 iou = "{:0.2f}".format(iou_thr) else: iou = "{:0.2f}:{:0.2f}".format( @@ -532,7 +542,11 @@ def print_results(self): cat_group_name = "all" area_rng = "all" - print(template.format(title, _type, iou, area_rng, max_dets, cat_group_name, value)) + print( + template.format( + title, _type, iou, area_rng, max_dets, cat_group_name, value + ) + ) def get_results(self): if not self.results: @@ -555,7 +569,7 @@ def __init__(self, iou_type): self.max_dets = 1000 self.area_rng = [ - [0 ** 2, 1e5 ** 2], + [0**2, 1e5**2], ] self.area_rng_lbl = ["all"] self.use_cats = 1 @@ -587,7 +601,8 @@ def process(self, inputs, outputs): prediction = {"image_id": input["image_id"]} instances = output["instances"].to(self._cpu_device) prediction["instances"] = instances_to_coco_json( - instances, input["image_id"]) + instances, input["image_id"] + ) self._predictions.append(prediction) def evaluate(self): @@ -605,15 +620,15 @@ def evaluate(self): self._logger.info("Preparing results in the OID format ...") self._oid_results = list( - itertools.chain(*[x["instances"] for x in self._predictions])) + itertools.chain(*[x["instances"] for x in self._predictions]) + ) # unmap the category ids for LVIS (from 0-indexed to 1-indexed) for result in self._oid_results: result["category_id"] += 1 PathManager.mkdirs(self._output_dir) - file_path = os.path.join( - self._output_dir, "oid_instances_results.json") + file_path = os.path.join(self._output_dir, "oid_instances_results.json") self._logger.info("Saving results to {}".format(file_path)) with PathManager.open(file_path, "w") as f: f.write(json.dumps(self._oid_results)) @@ -631,37 +646,38 @@ def evaluate(self): eval_seg=self._mask_on, class_names=self._metadata.get("thing_classes"), ) - self._results['bbox'] = res + self._results["bbox"] = res mAP_out_path = os.path.join(self._output_dir, "oid_mAP.npy") - self._logger.info('Saving mAP to' + mAP_out_path) + self._logger.info("Saving mAP to" + mAP_out_path) np.save(mAP_out_path, mAP) return copy.deepcopy(self._results) + def _evaluate_predictions_on_oid( - oid_gt, oid_results_path, eval_seg=False, - class_names=None): + oid_gt, oid_results_path, eval_seg=False, class_names=None +): logger = logging.getLogger(__name__) metrics = ["AP50", "AP50_expand"] results = {} - oid_eval = OIDEval(oid_gt, oid_results_path, 'bbox', expand_pred_label=False) + oid_eval = OIDEval(oid_gt, oid_results_path, "bbox", expand_pred_label=False) oid_eval.run() oid_eval.print_results() results["AP50"] = oid_eval.get_results()["AP50"] if eval_seg: - oid_eval = OIDEval(oid_gt, oid_results_path, 'segm', expand_pred_label=False) + oid_eval = OIDEval(oid_gt, oid_results_path, "segm", expand_pred_label=False) oid_eval.run() oid_eval.print_results() results["AP50_segm"] = oid_eval.get_results()["AP50"] else: - oid_eval = OIDEval(oid_gt, oid_results_path, 'bbox', expand_pred_label=True) + oid_eval = OIDEval(oid_gt, oid_results_path, "bbox", expand_pred_label=True) oid_eval.run() oid_eval.print_results() results["AP50_expand"] = oid_eval.get_results()["AP50"] mAP = np.zeros(len(class_names)) - 1 - precisions = oid_eval.eval['precision'] + precisions = oid_eval.eval["precision"] assert len(class_names) == precisions.shape[2] results_per_category = [] id2apiid = sorted(oid_gt.get_cat_ids()) @@ -672,10 +688,17 @@ def _evaluate_predictions_on_oid( ap = np.mean(precision) if precision.size else float("nan") inst_num = len(oid_gt.get_ann_ids(cat_ids=[id2apiid[idx]])) if inst_num > 0: - results_per_category.append(("{} {}".format( - name.replace(' ', '_'), - inst_num if inst_num < 1000 else '{:.1f}k'.format(inst_num / 1000)), - float(ap * 100))) + results_per_category.append( + ( + "{} {}".format( + name.replace(" ", "_"), + inst_num + if inst_num < 1000 + else "{:.1f}k".format(inst_num / 1000), + ), + float(ap * 100), + ) + ) inst_aware_ap += inst_num * ap inst_count += inst_num mAP[idx] = ap @@ -683,7 +706,9 @@ def _evaluate_predictions_on_oid( inst_aware_ap = inst_aware_ap * 100 / inst_count N_COLS = min(6, len(results_per_category) * 2) results_flatten = list(itertools.chain(*results_per_category)) - results_2d = itertools.zip_longest(*[results_flatten[i::N_COLS] for i in range(N_COLS)]) + results_2d = itertools.zip_longest( + *[results_flatten[i::N_COLS] for i in range(N_COLS)] + ) table = tabulate( results_2d, tablefmt="pipe", @@ -691,9 +716,8 @@ def _evaluate_predictions_on_oid( headers=["category", "AP"] * (N_COLS // 2), numalign="left", ) - logger.info("Per-category {} AP: \n".format('bbox') + table) - logger.info("Instance-aware {} AP: {:.4f}".format('bbox', inst_aware_ap)) + logger.info("Per-category {} AP: \n".format("bbox") + table) + logger.info("Instance-aware {} AP: {:.4f}".format("bbox", inst_aware_ap)) - logger.info("Evaluation results for bbox: \n" + \ - create_small_table(results)) - return results, mAP \ No newline at end of file + logger.info("Evaluation results for bbox: \n" + create_small_table(results)) + return results, mAP diff --git a/dimos/models/Detic/detic/modeling/backbone/swintransformer.py b/dimos/models/Detic/detic/modeling/backbone/swintransformer.py index 21cabb37dd..e63d3983b4 100644 --- a/dimos/models/Detic/detic/modeling/backbone/swintransformer.py +++ b/dimos/models/Detic/detic/modeling/backbone/swintransformer.py @@ -25,10 +25,18 @@ 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.): +class Mlp(nn.Module): + """Multilayer perceptron.""" + + def __init__( + self, + in_features, + hidden_features=None, + out_features=None, + act_layer=nn.GELU, + drop=0.0, + ): super().__init__() out_features = out_features or in_features hidden_features = hidden_features or in_features @@ -56,7 +64,9 @@ def window_partition(x, window_size): """ 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) + windows = ( + x.permute(0, 1, 3, 2, 4, 5).contiguous().view(-1, window_size, window_size, C) + ) return windows @@ -71,13 +81,15 @@ def window_reverse(windows, window_size, H, W): 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 = 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. + """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. @@ -89,26 +101,39 @@ class WindowAttention(nn.Module): 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.): - + def __init__( + self, + dim, + window_size, + num_heads, + qkv_bias=True, + qk_scale=None, + attn_drop=0.0, + proj_drop=0.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 + 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 + 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 = ( + 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 @@ -120,30 +145,47 @@ def __init__(self, dim, window_size, num_heads, qkv_bias=True, qk_scale=None, at self.proj = nn.Linear(dim, dim) self.proj_drop = nn.Dropout(proj_drop) - trunc_normal_(self.relative_position_bias_table, std=.02) + trunc_normal_(self.relative_position_bias_table, std=0.02) self.softmax = nn.Softmax(dim=-1) def forward(self, x, mask=None): - """ Forward function. + """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) + 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 = 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(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: @@ -158,7 +200,7 @@ def forward(self, x, mask=None): class SwinTransformerBlock(nn.Module): - """ Swin Transformer Block. + """Swin Transformer Block. Args: dim (int): Number of input channels. num_heads (int): Number of attention heads. @@ -174,32 +216,57 @@ class SwinTransformerBlock(nn.Module): 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): + def __init__( + self, + dim, + num_heads, + window_size=7, + shift_size=0, + mlp_ratio=4.0, + qkv_bias=True, + qk_scale=None, + drop=0.0, + attn_drop=0.0, + drop_path=0.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" + 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() + 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.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.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. + """Forward function. Args: x: Input feature, tensor size (B, H*W, C). H, W: Spatial resolution of the input feature. @@ -222,18 +289,26 @@ def forward(self, x, mask_matrix): # cyclic shift if self.shift_size > 0: - shifted_x = torch.roll(x, shifts=(-self.shift_size, -self.shift_size), dims=(1, 2)) + 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 + 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 + 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) @@ -241,7 +316,9 @@ def forward(self, x, mask_matrix): # reverse cyclic shift if self.shift_size > 0: - x = torch.roll(shifted_x, shifts=(self.shift_size, self.shift_size), dims=(1, 2)) + x = torch.roll( + shifted_x, shifts=(self.shift_size, self.shift_size), dims=(1, 2) + ) else: x = shifted_x @@ -258,11 +335,12 @@ def forward(self, x, mask_matrix): class PatchMerging(nn.Module): - """ Patch Merging Layer + """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 @@ -270,7 +348,7 @@ def __init__(self, dim, norm_layer=nn.LayerNorm): self.norm = norm_layer(4 * dim) def forward(self, x, H, W): - """ Forward function. + """Forward function. Args: x: Input feature, tensor size (B, H*W, C). H, W: Spatial resolution of the input feature. @@ -299,7 +377,7 @@ def forward(self, x, H, W): class BasicLayer(nn.Module): - """ A basic Swin Transformer layer for one stage. + """A basic Swin Transformer layer for one stage. Args: dim (int): Number of feature channels depth (int): Depths of this stage. @@ -316,20 +394,22 @@ class BasicLayer(nn.Module): 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): + def __init__( + self, + dim, + depth, + num_heads, + window_size=7, + mlp_ratio=4.0, + qkv_bias=True, + qk_scale=None, + drop=0.0, + attn_drop=0.0, + drop_path=0.0, + norm_layer=nn.LayerNorm, + downsample=None, + use_checkpoint=False, + ): super().__init__() self.window_size = window_size self.shift_size = window_size // 2 @@ -337,20 +417,26 @@ def __init__(self, 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)]) + 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: @@ -359,7 +445,7 @@ def __init__(self, self.downsample = None def forward(self, x, H, W): - """ Forward function. + """Forward function. Args: x: Input feature, tensor size (B, H*W, C). H, W: Spatial resolution of the input feature. @@ -369,22 +455,30 @@ def forward(self, x, H, W): 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)) + 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 = 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)) + 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 @@ -401,7 +495,7 @@ def forward(self, x, H, W): class PatchEmbed(nn.Module): - """ Image to Patch Embedding + """Image to Patch Embedding Args: patch_size (int): Patch token size. Default: 4. in_chans (int): Number of input image channels. Default: 3. @@ -417,7 +511,9 @@ def __init__(self, patch_size=4, in_chans=3, embed_dim=96, norm_layer=None): 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) + 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: @@ -443,7 +539,7 @@ def forward(self, x): class SwinTransformer(Backbone): - """ Swin Transformer backbone. + """Swin Transformer backbone. A PyTorch impl of : `Swin Transformer: Hierarchical Vision Transformer using Shifted Windows` - https://arxiv.org/pdf/2103.14030 Args: @@ -470,26 +566,28 @@ class SwinTransformer(Backbone): 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): + 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.0, + qkv_bias=True, + qk_scale=None, + drop_rate=0.0, + attn_drop_rate=0.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 @@ -502,28 +600,38 @@ def __init__(self, # 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) + 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]] + 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.absolute_pos_embed = nn.Parameter( + torch.zeros(1, embed_dim, patches_resolution[0], patches_resolution[1]) + ) + trunc_normal_(self.absolute_pos_embed, std=0.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 + 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), + dim=int(embed_dim * 2**i_layer), depth=depths[i_layer], num_heads=num_heads[i_layer], window_size=window_size, @@ -532,32 +640,32 @@ def __init__(self, qk_scale=qk_scale, drop=drop_rate, attn_drop=attn_drop_rate, - drop_path=dpr[sum(depths[:i_layer]):sum(depths[:i_layer + 1])], + 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) + use_checkpoint=use_checkpoint, + ) self.layers.append(layer) - num_features = [int(embed_dim * 2 ** i) for i in range(self.num_layers)] + 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}' + 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_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 + "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 + "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() @@ -584,7 +692,7 @@ def init_weights(self, pretrained=None): def _init_weights(m): if isinstance(m, nn.Linear): - trunc_normal_(m.weight, std=.02) + trunc_normal_(m.weight, std=0.02) if isinstance(m, nn.Linear) and m.bias is not None: nn.init.constant_(m.bias, 0) elif isinstance(m, nn.LayerNorm): @@ -597,7 +705,7 @@ def _init_weights(m): elif pretrained is None: self.apply(_init_weights) else: - raise TypeError('pretrained must be a str or None') + raise TypeError("pretrained must be a str or None") def forward(self, x): """Forward function.""" @@ -606,7 +714,9 @@ def forward(self, 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') + 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) @@ -619,12 +729,16 @@ def forward(self, x): x_out, H, W, x, Wh, Ww = layer(x, Wh, Ww) if i in self.out_indices: - norm_layer = getattr(self, f'norm{i}') + 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() + 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 + outs["swin{}".format(i)] = out return outs @@ -633,90 +747,90 @@ def train(self, mode=True): 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' + "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' + "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": { + "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": { + "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' + "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": { + "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", }, - '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'], + 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 + use_checkpoint=cfg.MODEL.SWIN.USE_CHECKPOINT, ) # print('Initializing', config['pretrained']) - model.init_weights(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 @@ -733,8 +847,7 @@ def build_swintransformer_fpn_backbone(cfg, input_shape: ShapeSpec): @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( @@ -747,4 +860,4 @@ def build_swintransformer_bifpn_backbone(cfg, input_shape: ShapeSpec): num_bifpn=cfg.MODEL.BIFPN.NUM_BIFPN, separable_conv=cfg.MODEL.BIFPN.SEPARABLE_CONV, ) - return backbone \ No newline at end of file + return backbone diff --git a/dimos/models/Detic/detic/modeling/backbone/timm.py b/dimos/models/Detic/detic/modeling/backbone/timm.py index 1ac62cb5d9..097d4c5470 100644 --- a/dimos/models/Detic/detic/modeling/backbone/timm.py +++ b/dimos/models/Detic/detic/modeling/backbone/timm.py @@ -1,21 +1,16 @@ #!/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.layers.batch_norm import FrozenBatchNorm2d from detectron2.modeling.backbone import Backbone from timm import create_model @@ -29,22 +24,25 @@ @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' + 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, + 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) + **model_args, + ) return model + class CustomResNet(ResNet): def __init__(self, **kwargs): - self.out_indices = kwargs.pop('out_indices') + self.out_indices = kwargs.pop("out_indices") super().__init__(**kwargs) - def forward(self, x): x = self.conv1(x) x = self.bn1(x) @@ -61,40 +59,44 @@ def forward(self, 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']) + 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]), + "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 + 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, + CustomResNet, + variant, + pretrained, default_cfg=default_cfgs_resnet[variant], out_indices=out_indices, pretrained_custom_load=True, **params, - **kwargs) + **kwargs, + ) class LastLevelP6P7_P5(nn.Module): - """ - """ + """ """ + def __init__(self, in_channels, out_channels): super().__init__() self.num_levels = 2 @@ -111,8 +113,7 @@ def forward(self, c5): def freeze_module(x): - """ - """ + """ """ for p in x.parameters(): p.requires_grad = False FrozenBatchNorm2d.convert_frozen_batchnorm(x) @@ -120,54 +121,66 @@ def freeze_module(x): class TIMM(Backbone): - def __init__(self, base_name, out_levels, freeze_at=0, norm='FrozenBN', pretrained=False): + 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: + 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 + 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) + 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] + 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} + "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} + "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: + if "resnet" in base_name: self.freeze(freeze_at) - if norm == 'FrozenBN': + if norm == "FrozenBN": self = FrozenBatchNorm2d.convert_frozen_batchnorm(self) def freeze(self, freeze_at=0): - """ - """ + """ """ if freeze_at >= 1: - print('Frezing', self.base.conv1) + print("Frezing", self.base.conv1) self.base.conv1 = freeze_module(self.base.conv1) if freeze_at >= 2: - print('Frezing', self.base.layer1) + 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 @@ -176,7 +189,7 @@ def size_divisibility(self): @BACKBONE_REGISTRY.register() def build_timm_backbone(cfg, input_shape): model = TIMM( - cfg.MODEL.TIMM.BASE_NAME, + cfg.MODEL.TIMM.BASE_NAME, cfg.MODEL.TIMM.OUT_LEVELS, freeze_at=cfg.MODEL.TIMM.FREEZE_AT, norm=cfg.MODEL.TIMM.NORM, @@ -187,8 +200,7 @@ def build_timm_backbone(cfg, input_shape): @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 @@ -202,12 +214,12 @@ def build_p67_timm_fpn_backbone(cfg, input_shape): ) 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( @@ -218,4 +230,4 @@ def build_p35_timm_fpn_backbone(cfg, input_shape): top_block=None, fuse_type=cfg.MODEL.FPN.FUSE_TYPE, ) - return backbone \ No newline at end of file + return backbone diff --git a/dimos/models/Detic/detic/modeling/debug.py b/dimos/models/Detic/detic/modeling/debug.py index 9c7c442eb8..60de6ed695 100644 --- a/dimos/models/Detic/detic/modeling/debug.py +++ b/dimos/models/Detic/detic/modeling/debug.py @@ -5,24 +5,34 @@ 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) +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 + 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 - 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 + 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) @@ -32,10 +42,11 @@ def _blend_image_heatmaps(image, color_maps, a=0.7): 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 @@ -44,11 +55,13 @@ def _decompose_level(x, shapes_per_level, N): 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)) + 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] @@ -56,8 +69,7 @@ def _imagelist_to_tensor(images): 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 = [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 @@ -72,21 +84,28 @@ def _ind2il(ind, shapes_per_level, N): 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, + 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) + """ + 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] + 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)) @@ -96,30 +115,35 @@ def debug_train( 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_map = _get_color_image(gt_hms[l][i].detach().cpu().numpy()) color_maps.append(color_map) - cv2.imshow('gthm_{}'.format(l), 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, + blend, (int(bbox[0]), int(bbox[1])), (int(bbox[2]), int(bbox[3])), - (0, 0, 255), 3, cv2.LINE_AA) - + (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) - + 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: @@ -127,28 +151,42 @@ def debug_train( 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])] + bbox = [ + (loc[0] - ltrb[0]), + (loc[1] - ltrb[1]), + (loc[0] + ltrb[2]), + (loc[1] + ltrb[3]), + ] cv2.rectangle( - blend, + blend, (int(bbox[0]), int(bbox[1])), (int(bbox[2]), int(bbox[3])), - (255, 0, 0), 1, cv2.LINE_AA) + (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.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, + 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) @@ -159,81 +197,113 @@ def debug_test( 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]) + 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]) + 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_map = _get_color_image(logits_pred[l][i].detach().cpu().numpy()) color_maps.append(color_map) - cv2.imshow('predhm_{}'.format(l), 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] + 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 = ( + 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 + 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) + 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]) + 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) + (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) - + 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_) + 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.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): + +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: + if "COCO" in save_debug_path: from detectron2.data.datasets.builtin_meta import COCO_CATEGORIES - cat2name = [x['name'] for x in 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] + + 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() + 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'): + 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() @@ -247,40 +317,58 @@ def debug_second_stage(images, instances, proposals=None, vis_thresh=0.3, cl = COLORS[cats[j], 0, 0] cl = (int(cl[0]), int(cl[1]), int(cl[2])) cv2.rectangle( - image, + image, (int(bbox[0]), int(bbox[1])), (int(bbox[2]), int(bbox[3])), - cl, 2, cv2.LINE_AA) + cl, + 2, + cv2.LINE_AA, + ) if debug_show_name: cat = cats[j] - txt = '{}{:.1f}'.format( - cat2name[cat] if cat > 0 else '', - scores[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) + (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) + 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() + 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'): + 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'): + if proposals[i].has("selected"): selected = proposals[i].selected else: selected = [-1 for _ in range(len(bboxes))] @@ -290,45 +378,55 @@ def debug_second_stage(images, instances, proposals=None, vis_thresh=0.3, cl = (209, 159, 83) th = 2 if selected[j] >= 0: - cl = (0, 0, 0xa4) + cl = (0, 0, 0xA4) th = 4 cv2.rectangle( - proposal_image, + proposal_image, (int(bbox[0]), int(bbox[1])), (int(bbox[2]), int(bbox[3])), - cl, th, cv2.LINE_AA) + cl, + th, + cv2.LINE_AA, + ) if selected[j] >= 0 and debug_show_name: cat = selected[j].item() - txt = '{}'.format(cat2name[cat]) + 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) + (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) + 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) + 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) + 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' + save_name = save_name + "|{}".format(class_name) + save_name = save_name + ".jpg" cv2.imwrite(save_name, proposal_image) else: - cv2.imshow('image', image) + cv2.imshow("image", image) if proposals is not None: - cv2.imshow('proposals', proposal_image) - cv2.waitKey() \ No newline at end of file + cv2.imshow("proposals", proposal_image) + cv2.waitKey() diff --git a/dimos/models/Detic/detic/modeling/meta_arch/custom_rcnn.py b/dimos/models/Detic/detic/modeling/meta_arch/custom_rcnn.py index 9a5ac721d4..e2f989b9bd 100644 --- a/dimos/models/Detic/detic/modeling/meta_arch/custom_rcnn.py +++ b/dimos/models/Detic/detic/modeling/meta_arch/custom_rcnn.py @@ -1,45 +1,39 @@ # 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 +from detectron2.structures import Instances 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=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 @@ -50,9 +44,9 @@ def __init__( 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') + 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: @@ -61,29 +55,30 @@ def __init__( 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( + 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 + 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]], @@ -98,14 +93,13 @@ def inference( proposals, _ = self.proposal_generator(images, features, None) results, _ = self.roi_heads(images, features, proposals) if do_postprocess: - assert not torch.jit.is_scripting(), \ + assert not torch.jit.is_scripting(), ( "Scripting is not supported for postprocess." - return CustomRCNN._postprocess( - results, batched_inputs, images.image_sizes) + ) + 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 @@ -116,20 +110,20 @@ def forward(self, batched_inputs: List[Dict[str, torch.Tensor]]): images = self.preprocess_image(batched_inputs) - ann_type = 'box' + 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] + 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']: + if ann_type in ["prop", "proptag"]: for t in gt_instances: t.gt_classes *= 0 - - if self.fp16: # TODO (zhouxy): improve + + if self.fp16: # TODO (zhouxy): improve with autocast(): features = self.backbone(images.tensor.half()) features = {k: v.float() for k, v in features.items()} @@ -138,33 +132,47 @@ def forward(self, batched_inputs: List[Dict[str, torch.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)] + 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 + 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() + 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) + images, features, gt_instances + ) - if self.roi_head_name in ['StandardROIHeads', 'CascadeROIHeads']: + if self.roi_head_name in ["StandardROIHeads", "CascadeROIHeads"]: proposals, detector_losses = self.roi_heads( - images, features, proposals, gt_instances) + 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) - + 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: @@ -173,60 +181,63 @@ def forward(self, batched_inputs: List[Dict[str, torch.Tensor]]): losses = {} losses.update(detector_losses) if self.with_image_labels: - if ann_type in ['box', 'prop', 'proptag']: + if ann_type in ["box", "prop", "proptag"]: losses.update(proposal_losses) - else: # ignore proposal loss for non-bbox data + 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] + 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 + 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) + (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) + 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]) + 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]) + [ + 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) + 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)) + 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 + return inds, cls_id_map diff --git a/dimos/models/Detic/detic/modeling/meta_arch/d2_deformable_detr.py b/dimos/models/Detic/detic/modeling/meta_arch/d2_deformable_detr.py index 47ff220fc3..8d70644fff 100644 --- a/dimos/models/Detic/detic/modeling/meta_arch/d2_deformable_detr.py +++ b/dimos/models/Detic/detic/modeling/meta_arch/d2_deformable_detr.py @@ -1,16 +1,14 @@ -# Copyright (c) Facebook, Inc. and its affiliates. +# Copyright (c) Facebook, Inc. and its affiliates. import torch import torch.nn.functional as F from torch import nn -import math from detectron2.modeling import META_ARCH_REGISTRY, build_backbone from detectron2.structures import Boxes, Instances from ..utils import load_class_freq, get_fed_loss_inds from models.backbone import Joiner -from models.deformable_detr import DeformableDETR, SetCriterion, MLP -from models.deformable_detr import _get_clones +from models.deformable_detr import DeformableDETR, SetCriterion from models.matcher import HungarianMatcher from models.position_encoding import PositionEmbeddingSine from models.deformable_transformer import DeformableTransformer @@ -21,62 +19,88 @@ __all__ = ["DeformableDetr"] + class CustomSetCriterion(SetCriterion): - def __init__(self, num_classes, matcher, weight_dict, losses, \ - focal_alpha=0.25, use_fed_loss=False): + def __init__( + self, + num_classes, + matcher, + weight_dict, + losses, + focal_alpha=0.25, + use_fed_loss=False, + ): super().__init__(num_classes, matcher, weight_dict, losses, focal_alpha) self.use_fed_loss = use_fed_loss if self.use_fed_loss: - self.register_buffer( - 'fed_loss_weight', load_class_freq(freq_weight=0.5)) + self.register_buffer("fed_loss_weight", load_class_freq(freq_weight=0.5)) def loss_labels(self, outputs, targets, indices, num_boxes, log=True): """Classification loss (NLL) targets dicts must contain the key "labels" containing a tensor of dim [nb_target_boxes] """ - assert 'pred_logits' in outputs - src_logits = outputs['pred_logits'] + assert "pred_logits" in outputs + src_logits = outputs["pred_logits"] idx = self._get_src_permutation_idx(indices) - target_classes_o = torch.cat([t["labels"][J] for t, (_, J) in zip(targets, indices)]) - target_classes = torch.full(src_logits.shape[:2], self.num_classes, - dtype=torch.int64, device=src_logits.device) + target_classes_o = torch.cat( + [t["labels"][J] for t, (_, J) in zip(targets, indices)] + ) + target_classes = torch.full( + src_logits.shape[:2], + self.num_classes, + dtype=torch.int64, + device=src_logits.device, + ) target_classes[idx] = target_classes_o target_classes_onehot = torch.zeros( [src_logits.shape[0], src_logits.shape[1], src_logits.shape[2] + 1], - dtype=src_logits.dtype, layout=src_logits.layout, - device=src_logits.device) + dtype=src_logits.dtype, + layout=src_logits.layout, + device=src_logits.device, + ) target_classes_onehot.scatter_(2, target_classes.unsqueeze(-1), 1) - target_classes_onehot = target_classes_onehot[:,:,:-1] # B x N x C + target_classes_onehot = target_classes_onehot[:, :, :-1] # B x N x C if self.use_fed_loss: inds = get_fed_loss_inds( gt_classes=target_classes_o, num_sample_cats=50, weight=self.fed_loss_weight, - C=target_classes_onehot.shape[2]) - loss_ce = sigmoid_focal_loss( - src_logits[:, :, inds], - target_classes_onehot[:, :, inds], - num_boxes, - alpha=self.focal_alpha, - gamma=2) * src_logits.shape[1] + C=target_classes_onehot.shape[2], + ) + loss_ce = ( + sigmoid_focal_loss( + src_logits[:, :, inds], + target_classes_onehot[:, :, inds], + num_boxes, + alpha=self.focal_alpha, + gamma=2, + ) + * src_logits.shape[1] + ) else: - loss_ce = sigmoid_focal_loss( - src_logits, target_classes_onehot, num_boxes, - alpha=self.focal_alpha, - gamma=2) * src_logits.shape[1] - losses = {'loss_ce': loss_ce} + loss_ce = ( + sigmoid_focal_loss( + src_logits, + target_classes_onehot, + num_boxes, + alpha=self.focal_alpha, + gamma=2, + ) + * src_logits.shape[1] + ) + losses = {"loss_ce": loss_ce} if log: # TODO this should probably be a separate loss, not hacked in this one here - losses['class_error'] = 100 - accuracy(src_logits[idx], target_classes_o)[0] + losses["class_error"] = 100 - accuracy(src_logits[idx], target_classes_o)[0] return losses class MaskedBackbone(nn.Module): - """ This is a thin wrapper around D2's backbone to provide padding masking""" + """This is a thin wrapper around D2's backbone to provide padding masking""" def __init__(self, cfg): super().__init__() @@ -96,6 +120,7 @@ def forward(self, tensor_list: NestedTensor): out[name] = NestedTensor(x, mask) return out + @META_ARCH_REGISTRY.register() class DeformableDetr(nn.Module): """ @@ -148,10 +173,13 @@ def __init__(self, cfg): dec_n_points=4, enc_n_points=4, two_stage=two_stage, - two_stage_num_proposals=num_queries) + two_stage_num_proposals=num_queries, + ) self.detr = DeformableDETR( - backbone, transformer, num_classes=self.num_classes, + backbone, + transformer, + num_classes=self.num_classes, num_queries=num_queries, num_feature_levels=num_feature_levels, aux_loss=deep_supervision, @@ -160,10 +188,11 @@ def __init__(self, cfg): ) if self.mask_on: - assert 0, 'Mask is not supported yet :(' + assert 0, "Mask is not supported yet :(" matcher = HungarianMatcher( - cost_class=cls_weight, cost_bbox=l1_weight, cost_giou=giou_weight) + cost_class=cls_weight, cost_bbox=l1_weight, cost_giou=giou_weight + ) weight_dict = {"loss_ce": cls_weight, "loss_bbox": l1_weight} weight_dict["loss_giou"] = giou_weight if deep_supervision: @@ -171,21 +200,22 @@ def __init__(self, cfg): for i in range(dec_layers - 1): aux_weight_dict.update({k + f"_{i}": v for k, v in weight_dict.items()}) weight_dict.update(aux_weight_dict) - print('weight_dict', weight_dict) + print("weight_dict", weight_dict) losses = ["labels", "boxes", "cardinality"] if self.mask_on: losses += ["masks"] self.criterion = CustomSetCriterion( - self.num_classes, matcher=matcher, weight_dict=weight_dict, - focal_alpha=focal_alpha, + self.num_classes, + matcher=matcher, + weight_dict=weight_dict, + focal_alpha=focal_alpha, losses=losses, - use_fed_loss=cfg.MODEL.DETR.USE_FED_LOSS + use_fed_loss=cfg.MODEL.DETR.USE_FED_LOSS, ) pixel_mean = torch.Tensor(cfg.MODEL.PIXEL_MEAN).to(self.device).view(3, 1, 1) pixel_std = torch.Tensor(cfg.MODEL.PIXEL_STD).to(self.device).view(3, 1, 1) self.normalizer = lambda x: (x - pixel_mean) / pixel_std - def forward(self, batched_inputs): """ Args: @@ -204,53 +234,56 @@ def forward(self, batched_inputs): if k in weight_dict: loss_dict[k] *= weight_dict[k] if self.with_image_labels: - if batched_inputs[0]['ann_type'] in ['image', 'captiontag']: - loss_dict['loss_image'] = self.weak_weight * self._weak_loss( - output, batched_inputs) + if batched_inputs[0]["ann_type"] in ["image", "captiontag"]: + loss_dict["loss_image"] = self.weak_weight * self._weak_loss( + output, batched_inputs + ) else: - loss_dict['loss_image'] = images[0].new_zeros( - [1], dtype=torch.float32)[0] + loss_dict["loss_image"] = images[0].new_zeros( + [1], dtype=torch.float32 + )[0] # import pdb; pdb.set_trace() return loss_dict else: image_sizes = output["pred_boxes"].new_tensor( - [(t["height"], t["width"]) for t in batched_inputs]) + [(t["height"], t["width"]) for t in batched_inputs] + ) results = self.post_process(output, image_sizes) return results - def prepare_targets(self, targets): new_targets = [] for targets_per_image in targets: h, w = targets_per_image.image_size - image_size_xyxy = torch.as_tensor([w, h, w, h], dtype=torch.float, device=self.device) + image_size_xyxy = torch.as_tensor( + [w, h, w, h], dtype=torch.float, device=self.device + ) gt_classes = targets_per_image.gt_classes gt_boxes = targets_per_image.gt_boxes.tensor / image_size_xyxy gt_boxes = box_xyxy_to_cxcywh(gt_boxes) new_targets.append({"labels": gt_classes, "boxes": gt_boxes}) - if self.mask_on and hasattr(targets_per_image, 'gt_masks'): - assert 0, 'Mask is not supported yet :(' + if self.mask_on and hasattr(targets_per_image, "gt_masks"): + assert 0, "Mask is not supported yet :(" gt_masks = targets_per_image.gt_masks gt_masks = convert_coco_poly_to_mask(gt_masks.polygons, h, w) - new_targets[-1].update({'masks': gt_masks}) + new_targets[-1].update({"masks": gt_masks}) return new_targets - def post_process(self, outputs, target_sizes): - """ - """ - out_logits, out_bbox = outputs['pred_logits'], outputs['pred_boxes'] + """ """ + out_logits, out_bbox = outputs["pred_logits"], outputs["pred_boxes"] assert len(out_logits) == len(target_sizes) assert target_sizes.shape[1] == 2 prob = out_logits.sigmoid() topk_values, topk_indexes = torch.topk( - prob.view(out_logits.shape[0], -1), self.test_topk, dim=1) + prob.view(out_logits.shape[0], -1), self.test_topk, dim=1 + ) scores = topk_values topk_boxes = topk_indexes // out_logits.shape[2] labels = topk_indexes % out_logits.shape[2] boxes = box_cxcywh_to_xyxy(out_bbox) - boxes = torch.gather(boxes, 1, topk_boxes.unsqueeze(-1).repeat(1,1,4)) + boxes = torch.gather(boxes, 1, topk_boxes.unsqueeze(-1).repeat(1, 1, 4)) # and from relative [0, 1] to absolute [0, height] coordinates img_h, img_w = target_sizes.unbind(1) @@ -263,10 +296,9 @@ def post_process(self, outputs, target_sizes): r.pred_boxes = Boxes(b) r.scores = s r.pred_classes = l - results.append({'instances': r}) + results.append({"instances": r}) return results - def preprocess_image(self, batched_inputs): """ Normalize, pad and batch the input images. @@ -274,35 +306,35 @@ def preprocess_image(self, batched_inputs): images = [self.normalizer(x["image"].to(self.device)) for x in batched_inputs] return images - def _weak_loss(self, outputs, batched_inputs): loss = 0 for b, x in enumerate(batched_inputs): - labels = x['pos_category_ids'] - pred_logits = [outputs['pred_logits'][b]] - pred_boxes = [outputs['pred_boxes'][b]] - for xx in outputs['aux_outputs']: - pred_logits.append(xx['pred_logits'][b]) - pred_boxes.append(xx['pred_boxes'][b]) - pred_logits = torch.stack(pred_logits, dim=0) # L x N x C - pred_boxes = torch.stack(pred_boxes, dim=0) # L x N x 4 + labels = x["pos_category_ids"] + pred_logits = [outputs["pred_logits"][b]] + pred_boxes = [outputs["pred_boxes"][b]] + for xx in outputs["aux_outputs"]: + pred_logits.append(xx["pred_logits"][b]) + pred_boxes.append(xx["pred_boxes"][b]) + pred_logits = torch.stack(pred_logits, dim=0) # L x N x C + pred_boxes = torch.stack(pred_boxes, dim=0) # L x N x 4 for label in labels: - loss += self._max_size_loss( - pred_logits, pred_boxes, label) / len(labels) + loss += self._max_size_loss(pred_logits, pred_boxes, label) / len( + labels + ) loss = loss / len(batched_inputs) return loss - def _max_size_loss(self, logits, boxes, label): - ''' + """ Inputs: logits: L x N x C boxes: L x N x 4 - ''' + """ target = logits.new_zeros((logits.shape[0], logits.shape[2])) - target[:, label] = 1. - sizes = boxes[..., 2] * boxes[..., 3] # L x N - ind = sizes.argmax(dim=1) # L + target[:, label] = 1.0 + sizes = boxes[..., 2] * boxes[..., 3] # L x N + ind = sizes.argmax(dim=1) # L loss = F.binary_cross_entropy_with_logits( - logits[range(len(ind)), ind], target, reduction='sum') - return loss \ No newline at end of file + logits[range(len(ind)), ind], target, reduction="sum" + ) + return loss diff --git a/dimos/models/Detic/detic/modeling/roi_heads/detic_fast_rcnn.py b/dimos/models/Detic/detic/modeling/roi_heads/detic_fast_rcnn.py index 186822dd8f..294094ba03 100644 --- a/dimos/models/Detic/detic/modeling/roi_heads/detic_fast_rcnn.py +++ b/dimos/models/Detic/detic/modeling/roi_heads/detic_fast_rcnn.py @@ -1,9 +1,5 @@ # 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 @@ -11,15 +7,12 @@ 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.layers import ShapeSpec, cat, nonzero_tuple 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 @@ -29,33 +22,33 @@ class DeticFastRCNNOutputLayers(FastRCNNOutputLayers): @configurable def __init__( - self, + 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, + 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, + input_shape=input_shape, **kwargs, ) self.mult_proposal_score = mult_proposal_score @@ -76,31 +69,35 @@ def __init__( self.debug = debug if softmax_weak_loss: - assert image_label_loss in ['max_size'] + 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) + 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') + 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))] + [ + 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) - + 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 @@ -109,7 +106,7 @@ def __init__( self.bbox_pred = nn.Sequential( nn.Linear(input_size, input_size), nn.ReLU(inplace=True), - nn.Linear(input_size, 4) + 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) @@ -125,44 +122,51 @@ def __init__( 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) + 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, \ + def losses( + self, + predictions, + proposals, use_advanced_loss=True, - classifier_info=(None,None,None)): + 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) + 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: @@ -173,48 +177,63 @@ def losses(self, predictions, proposals, \ _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!" + 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], + [ + (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) + 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_cls": loss_cls, "loss_box_reg": self.box_reg_loss( - proposal_boxes, gt_boxes, proposal_deltas, gt_classes, - num_classes=num_classes) + 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. + 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 + 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 + + if self.use_fed_loss and (self.freq_weight is not None): # fedloss appeared = get_fed_loss_inds( - gt_classes, + gt_classes, num_sample_cats=self.fed_loss_num_cat, C=C, - weight=self.freq_weight) + weight=self.freq_weight, + ) appeared_mask = appeared.new_zeros(C + 1) - appeared_mask[appeared] = 1 # 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() @@ -224,11 +243,11 @@ def sigmoid_cross_entropy_loss(self, pred_class_logits, gt_classes): # 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 + 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 @@ -237,34 +256,36 @@ def softmax_cross_entropy_loss(self, pred_class_logits, gt_classes): 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 + 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 + 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, + gt_classes, num_sample_cats=self.fed_loss_num_cat, C=C, - weight=self.freq_weight) + weight=self.freq_weight, + ) appeared_mask = appeared.new_zeros(C + 1).float() - appeared_mask[appeared] = 1. # C + 1 - appeared_mask[C] = 1. + appeared_mask[appeared] = 1.0 # C + 1 + appeared_mask[C] = 1.0 loss = F.cross_entropy( - pred_class_logits, gt_classes, - weight=appeared_mask, reduction="mean") + pred_class_logits, gt_classes, weight=appeared_mask, reduction="mean" + ) else: - loss = F.cross_entropy( - pred_class_logits, gt_classes, reduction="mean") + 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): + self, proposal_boxes, gt_boxes, pred_deltas, gt_classes, num_classes=-1 + ): """ Allow custom background index """ @@ -303,9 +324,10 @@ def inference(self, predictions, proposals): 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)] + 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, @@ -316,7 +338,6 @@ def inference(self, predictions, proposals): self.test_topk_per_image, ) - def predict_probs(self, predictions, proposals): """ support sigmoid @@ -330,17 +351,22 @@ def predict_probs(self, predictions, proposals): 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'): - ''' + 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) + 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: @@ -354,38 +380,39 @@ def image_label_losses(self, predictions, proposals, image_labels, \ 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)): + 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: + if "caption" in ann_type: score, caption_loss_img = self._caption_loss( - score, classifier_info, idx, B) + score, classifier_info, idx, B + ) caption_loss += self.caption_weight * caption_loss_img - if ann_type == 'caption': + if ann_type == "caption": continue if self.debug: - p.selected = score.new_zeros( - (len(p),), dtype=torch.long) - 1 + 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) + 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']: + 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': + elif self.image_label_loss == "max_score": loss_i, ind = self._max_score_loss(score, label) - elif self.image_label_loss == 'max_size': + elif self.image_label_loss == "max_size": loss_i, ind = self._max_size_loss(score, label, p) - elif self.image_label_loss == 'first': + elif self.image_label_loss == "first": loss_i, ind = self._first_loss(score, label) - elif self.image_label_loss == 'image': + elif self.image_label_loss == "image": loss_i, ind = self._image_loss(score, label) - elif self.image_label_loss == 'min_loss': + elif self.image_label_loss == "min_loss": loss_i, ind = self._min_loss_loss(score, label) else: assert 0 @@ -397,43 +424,56 @@ def image_label_losses(self, predictions, proposals, image_labels, \ 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]) + 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] + 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: + 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()) + 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) + 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]} - + "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)): + 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) @@ -444,11 +484,11 @@ def forward(self, x, classifier_info=(None,None,None)): 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]) + 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) + 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: @@ -457,129 +497,125 @@ def forward(self, x, classifier_info=(None,None,None)): else: return scores, proposal_deltas - def _caption_loss(self, score, classifier_info, idx, B): - assert (classifier_info[2] is not None) + 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) + 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_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 + 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. + 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.0 else: assert caption_score.shape[1] == B - caption_target[:, idx] = 1. + caption_target[:, idx] = 1.0 caption_loss_img = F.binary_cross_entropy_with_logits( - caption_score, caption_target, reduction='none') + 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) + assert (fg_mask.sum().item() - 1.0) ** 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() + neg_loss = (caption_loss_img * (1.0 - 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) + 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. + 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.0 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. + target[label] = 1.0 ind = score[:, label].argmax().item() - loss += F.binary_cross_entropy_with_logits( - score[ind], target, reduction='sum') + 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. + target[:, label] = 1.0 with torch.no_grad(): - x = F.binary_cross_entropy_with_logits( - score, target, reduction='none').sum(dim=1) # n + 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') + 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. + target[label] = 1.0 ind = 0 - loss += F.binary_cross_entropy_with_logits( - score[ind], target, reduction='sum') + 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. + target[label] = 1.0 ind = score.shape[0] - 1 - loss = F.binary_cross_entropy_with_logits( - score[ind], target, reduction='sum') + 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. + target[label] = 1.0 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') + 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') + 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) + start=ht_min, end=ht_max, steps=num_classes + 1, dtype=torch.float32 + ) hist_params = dict( tag=hist_name, @@ -592,4 +628,4 @@ def put_label_distribution(storage, hist_name, hist_counts, num_classes): bucket_counts=hist_counts.tolist(), global_step=storage._iter, ) - storage._histograms.append(hist_params) \ No newline at end of file + storage._histograms.append(hist_params) diff --git a/dimos/models/Detic/detic/modeling/roi_heads/detic_roi_heads.py b/dimos/models/Detic/detic/modeling/roi_heads/detic_roi_heads.py index c87559359e..1d705b4118 100644 --- a/dimos/models/Detic/detic/modeling/roi_heads/detic_roi_heads.py +++ b/dimos/models/Detic/detic/modeling/roi_heads/detic_roi_heads.py @@ -1,29 +1,16 @@ # 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.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 fast_rcnn_inference -from detectron2.modeling.roi_heads.roi_heads import ROI_HEADS_REGISTRY, StandardROIHeads +from detectron2.modeling.roi_heads.roi_heads import ROI_HEADS_REGISTRY 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): @@ -54,48 +41,57 @@ def __init__( @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, - }) + 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'] + 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): + 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 + 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)): + 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] + 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] - + 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 @@ -104,40 +100,50 @@ def _forward_box(self, features, proposals, targets=None, 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, + 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) + (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': + if ann_type != "box": stage_losses = {} - if ann_type in ['image', 'caption', 'captiontag']: + if ann_type in ["image", "caption", "captiontag"]: image_labels = [x._pos_category_ids for x in targets] weak_losses = predictor.image_label_losses( - predictions, proposals, image_labels, + predictions, + proposals, + image_labels, classifier_info=classifier_info, - ann_type=ann_type) + ann_type=ann_type, + ) stage_losses.update(weak_losses) - else: # supervised + else: # supervised stage_losses = predictor.losses( - (predictions[0], predictions[1]), proposals, - classifier_info=classifier_info) + (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()}) + 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) @@ -147,13 +153,15 @@ def _forward_box(self, features, proposals, targets=None, 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)] + 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] + 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) + boxes = predictor.predict_boxes((predictions[0], predictions[1]), proposals) pred_instances, _ = fast_rcnn_inference( boxes, scores, @@ -164,50 +172,62 @@ def _forward_box(self, features, proposals, targets=None, ) return pred_instances - - def forward(self, images, features, proposals, targets=None, - ann_type='box', classifier_info=(None,None,None)): - ''' + 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) + 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'): + + 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({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)) + 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) + 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] + 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 @@ -215,31 +235,32 @@ def _add_image_box(self, p): 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)) + [ + w * (1.0 - f) / 2.0, + h * (1.0 - f) / 2.0, + w * (1.0 - (1.0 - f) / 2.0), + h * (1.0 - (1.0 - f) / 2.0), + ] + ).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]} + 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): + 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() @@ -251,9 +272,9 @@ def _create_proposals_from_boxes(self, boxes, image_sizes, logits): proposals.append(prop) return proposals - - def _run_stage(self, features, proposals, stage, \ - classifier_info=(None,None,None)): + def _run_stage( + self, features, proposals, stage, classifier_info=(None, None, None) + ): """ Support classifier_info and add_feature_to_prop """ @@ -262,10 +283,7 @@ def _run_stage(self, features, proposals, stage, \ 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) + 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) + return self.box_predictor[stage](box_features, classifier_info=classifier_info) diff --git a/dimos/models/Detic/detic/modeling/roi_heads/res5_roi_heads.py b/dimos/models/Detic/detic/modeling/roi_heads/res5_roi_heads.py index bab706999a..1df5bac181 100644 --- a/dimos/models/Detic/detic/modeling/roi_heads/res5_roi_heads.py +++ b/dimos/models/Detic/detic/modeling/roi_heads/res5_roi_heads.py @@ -1,35 +1,23 @@ # 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.layers import ShapeSpec +from detectron2.structures import Boxes, Instances -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') + cfg = kwargs.pop("cfg") super().__init__(**kwargs) - stage_channel_factor = 2 ** 3 + stage_channel_factor = 2**3 out_channels = cfg.MODEL.RESNETS.RES2_OUT_CHANNELS * stage_channel_factor self.with_image_labels = cfg.WITH_IMAGE_LABELS @@ -46,31 +34,43 @@ def __init__(self, **kwargs): 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') + 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 + ret["cfg"] = cfg return ret - def forward(self, images, features, proposals, targets=None, - ann_type='box', classifier_info=(None,None,None)): - ''' + 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) + if ann_type in ["box"]: + proposals = self.label_and_sample_proposals(proposals, targets) else: proposals = self.get_top_proposals(proposals) @@ -79,44 +79,51 @@ def forward(self, images, features, proposals, targets=None, [features[f] for f in self.in_features], proposal_boxes ) predictions = self.box_predictor( - box_features.mean(dim=[2, 3]), - classifier_info=classifier_info) - + 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) + [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'): + 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, + predictions, + proposals, + image_labels, classifier_info=classifier_info, - ann_type=ann_type) + ann_type=ann_type, + ) else: losses = self.box_predictor.losses( - (predictions[0], predictions[1]), proposals) + (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] + 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': + 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, + 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) + bgr=self.bgr, + ) return proposals, losses else: pred_instances, _ = self.box_predictor.inference(predictions, proposals) @@ -125,18 +132,20 @@ def forward(self, images, features, proposals, targets=None, denormalizer = lambda x: x * self.pixel_std + self.pixel_mean debug_second_stage( [denormalizer(x.clone()) for x in images], - pred_instances, proposals=proposals, + 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) + 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] + 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: @@ -151,23 +160,22 @@ def _add_image_box(self, p, use_score=False): 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)) + [ + w * (1.0 - f) / 2.0, + h * (1.0 - f) / 2.0, + w * (1.0 - (1.0 - f) / 2.0), + h * (1.0 - (1.0 - f) / 2.0), + ] + ).view(n, 4) + ) else: image_box.proposal_boxes = Boxes( - p.proposal_boxes.tensor.new_tensor( - [0, 0, w, h]).view(n, 4)) + 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) + 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 + image_box.objectness_logits = p.objectness_logits.new_ones(n) + return Instances.cat([p, image_box]) diff --git a/dimos/models/Detic/detic/modeling/roi_heads/zero_shot_classifier.py b/dimos/models/Detic/detic/modeling/roi_heads/zero_shot_classifier.py index edf217c6db..b38632ae9b 100644 --- a/dimos/models/Detic/detic/modeling/roi_heads/zero_shot_classifier.py +++ b/dimos/models/Detic/detic/modeling/roi_heads/zero_shot_classifier.py @@ -4,7 +4,8 @@ from torch import nn from torch.nn import functional as F from detectron2.config import configurable -from detectron2.layers import Linear, ShapeSpec +from detectron2.layers import ShapeSpec + class ZeroShotClassifier(nn.Module): @configurable @@ -15,14 +16,16 @@ def __init__( num_classes: int, zs_weight_path: str, zs_weight_dim: int = 512, - use_bias: float = 0.0, + 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) + 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 @@ -31,52 +34,54 @@ def __init__( self.cls_bias = nn.Parameter(torch.ones(1) * use_bias) self.linear = nn.Linear(input_size, zs_weight_dim) - - if zs_weight_path == 'rand': + + 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.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) - + [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': + + if zs_weight_path == "rand": self.zs_weight = nn.Parameter(zs_weight) else: - self.register_buffer('zs_weight', zs_weight) + 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, + "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 + 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: @@ -84,4 +89,4 @@ def forward(self, x, classifier=None): x = torch.mm(x, zs_weight) if self.use_bias: x = x + self.cls_bias - return x \ No newline at end of file + return x diff --git a/dimos/models/Detic/detic/modeling/text/text_encoder.py b/dimos/models/Detic/detic/modeling/text/text_encoder.py index 3ec5090c29..05aa2236db 100644 --- a/dimos/models/Detic/detic/modeling/text/text_encoder.py +++ b/dimos/models/Detic/detic/modeling/text/text_encoder.py @@ -6,7 +6,6 @@ from collections import OrderedDict import torch from torch import nn -import torch from clip.simple_tokenizer import SimpleTokenizer as _Tokenizer @@ -14,6 +13,7 @@ count = 0 + class LayerNorm(nn.LayerNorm): """Subclass torch's LayerNorm to handle fp16.""" @@ -34,16 +34,24 @@ def __init__(self, d_model: int, n_head: int, attn_mask: torch.Tensor = None): 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.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 + 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): @@ -53,29 +61,33 @@ def forward(self, x: torch.Tensor): class Transformer(nn.Module): - def __init__(self, width: int, layers: int, heads: int, attn_mask: torch.Tensor = None): + 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)]) + *[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 - ): + 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 @@ -83,12 +95,14 @@ def __init__(self, width=transformer_width, layers=transformer_layers, heads=transformer_heads, - attn_mask=self.build_attention_mask() + 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.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)) @@ -100,8 +114,10 @@ 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 + 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) @@ -110,7 +126,7 @@ def initialize_parameters(self): 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) + 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 @@ -128,26 +144,26 @@ def device(self): def dtype(self): return self.text_projection.dtype - def tokenize(self, - texts: Union[str, List[str]], \ - context_length: int = 77) -> torch.LongTensor: - """ - """ + 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] + 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] + 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) + result[i, : len(tokens)] = torch.tensor(tokens) return result @@ -163,11 +179,11 @@ def encode_text(self, text): 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 + """ + text = self.tokenize(captions).to(self.device) # B x L x D + features = self.encode_text(text) # B x D return features @@ -175,15 +191,19 @@ def build_text_encoder(pretrain=True): text_encoder = CLIPTEXT() if pretrain: import clip - pretrained_model, _ = clip.load("ViT-B/32", device='cpu') + + 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.')] + 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') + 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 + return text_encoder diff --git a/dimos/models/Detic/detic/modeling/utils.py b/dimos/models/Detic/detic/modeling/utils.py index 297fb469a0..35f24edfad 100644 --- a/dimos/models/Detic/detic/modeling/utils.py +++ b/dimos/models/Detic/detic/modeling/utils.py @@ -4,17 +4,20 @@ 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')) + 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'])]) + [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' + appeared = torch.unique(gt_classes) # C' prob = appeared.new_ones(C + 1).float() prob[-1] = 0 if len(appeared) < num_sample_cats: @@ -22,28 +25,29 @@ def get_fed_loss_inds(gt_classes, num_sample_cats, C, weight=None): prob[:C] = weight.float().clone() prob[appeared] = 0 more_appeared = torch.multinomial( - prob, num_sample_cats - len(appeared), - replacement=False) + 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 + 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) + [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 + model.roi_heads.box_predictor[k].cls_score.zs_weight = zs_weight diff --git a/dimos/models/Detic/detic/predictor.py b/dimos/models/Detic/detic/predictor.py index 318205acb9..7c43c33c66 100644 --- a/dimos/models/Detic/detic/predictor.py +++ b/dimos/models/Detic/detic/predictor.py @@ -14,31 +14,33 @@ from .modeling.utils import reset_cls_test -def get_clip_embeddings(vocabulary, prompt='a '): +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', + "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', + "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): + def __init__(self, cfg, args, instance_mode=ColorMode.IMAGE, parallel=False): """ Args: cfg (CfgNode): @@ -46,13 +48,12 @@ def __init__(self, cfg, args, parallel (bool): whether to run the model in different processes from visualization. Useful since the visualization logic can be slow. """ - if args.vocabulary == 'custom': + if args.vocabulary == "custom": self.metadata = MetadataCatalog.get("__unused") - self.metadata.thing_classes = args.custom_vocabulary.split(',') + 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]) + self.metadata = MetadataCatalog.get(BUILDIN_METADATA_PATH[args.vocabulary]) classifier = BUILDIN_CLASSIFIER[args.vocabulary] num_classes = len(self.metadata.thing_classes) @@ -128,7 +129,9 @@ def process_predictions(frame, predictions): ) elif "instances" in predictions: predictions = predictions["instances"].to(self.cpu_device) - vis_frame = video_visualizer.draw_instance_predictions(frame, predictions) + 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) diff --git a/dimos/models/Detic/lazy_train_net.py b/dimos/models/Detic/lazy_train_net.py index 2734befb0d..7dd2f49de2 100644 --- a/dimos/models/Detic/lazy_train_net.py +++ b/dimos/models/Detic/lazy_train_net.py @@ -9,6 +9,7 @@ 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 import sys @@ -26,14 +27,18 @@ from detectron2.engine.defaults import create_ddp_model from detectron2.evaluation import inference_on_dataset, print_csv_format from detectron2.utils import comm -sys.path.insert(0, 'third_party/CenterNet2/') -sys.path.insert(0, 'third_party/Deformable-DETR') + +sys.path.insert(0, "third_party/CenterNet2/") +sys.path.insert(0, "third_party/Deformable-DETR") 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) + model, + instantiate(cfg.dataloader.test), + instantiate(cfg.dataloader.evaluator), ) print_csv_format(ret) return ret @@ -69,7 +74,9 @@ def do_train(args, cfg): 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) + trainer = (AMPTrainer if cfg.train.amp.enabled else SimpleTrainer)( + model, train_loader, optim + ) checkpointer = DetectionCheckpointer( model, cfg.train.output_dir, @@ -126,4 +133,4 @@ def main(args): machine_rank=args.machine_rank, dist_url=args.dist_url, args=(args,), - ) \ No newline at end of file + ) diff --git a/dimos/models/Detic/predict.py b/dimos/models/Detic/predict.py index a0fa53bb15..62bcc686eb 100644 --- a/dimos/models/Detic/predict.py +++ b/dimos/models/Detic/predict.py @@ -12,34 +12,37 @@ from detectron2.data import MetadataCatalog # Detic libraries -sys.path.insert(0, 'third_party/CenterNet2/') +sys.path.insert(0, "third_party/CenterNet2/") from centernet.config import add_centernet_config from detic.config import add_detic_config from detic.modeling.utils import reset_cls_test from detic.modeling.text.text_encoder import build_text_encoder + class Predictor(cog.Predictor): def setup(self): cfg = get_cfg() add_centernet_config(cfg) add_detic_config(cfg) - cfg.merge_from_file("configs/Detic_LCOCOI21k_CLIP_SwinB_896b32_4x_ft4x_max-size.yaml") - cfg.MODEL.WEIGHTS = 'Detic_LCOCOI21k_CLIP_SwinB_896b32_4x_ft4x_max-size.pth' + cfg.merge_from_file( + "configs/Detic_LCOCOI21k_CLIP_SwinB_896b32_4x_ft4x_max-size.yaml" + ) + cfg.MODEL.WEIGHTS = "Detic_LCOCOI21k_CLIP_SwinB_896b32_4x_ft4x_max-size.pth" cfg.MODEL.ROI_HEADS.SCORE_THRESH_TEST = 0.5 # set threshold for this model - cfg.MODEL.ROI_BOX_HEAD.ZEROSHOT_WEIGHT_PATH = 'rand' + cfg.MODEL.ROI_BOX_HEAD.ZEROSHOT_WEIGHT_PATH = "rand" cfg.MODEL.ROI_HEADS.ONE_CLASS_PER_PROPOSAL = True self.predictor = DefaultPredictor(cfg) self.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', + "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", } self.BUILDIN_METADATA_PATH = { - 'lvis': 'lvis_v1_val', - 'objects365': 'objects365_v2_val', - 'openimages': 'oid_val_expanded', - 'coco': 'coco_2017_val', + "lvis": "lvis_v1_val", + "objects365": "objects365_v2_val", + "openimages": "oid_val_expanded", + "coco": "coco_2017_val", } @cog.input( @@ -50,8 +53,8 @@ def setup(self): @cog.input( "vocabulary", type=str, - default='lvis', - options=['lvis', 'objects365', 'openimages', 'coco', 'custom'], + default="lvis", + options=["lvis", "objects365", "openimages", "coco", "custom"], help="Choose vocabulary", ) @cog.input( @@ -62,24 +65,31 @@ def setup(self): ) def predict(self, image, vocabulary, custom_vocabulary): image = cv2.imread(str(image)) - if not vocabulary == 'custom': + if not vocabulary == "custom": metadata = MetadataCatalog.get(self.BUILDIN_METADATA_PATH[vocabulary]) classifier = self.BUILDIN_CLASSIFIER[vocabulary] num_classes = len(metadata.thing_classes) reset_cls_test(self.predictor.model, classifier, num_classes) else: - assert custom_vocabulary is not None and len(custom_vocabulary.split(',')) > 0, \ + assert ( + custom_vocabulary is not None and len(custom_vocabulary.split(",")) > 0 + ), ( "Please provide your own vocabularies when vocabulary is set to 'custom'." + ) metadata = MetadataCatalog.get(str(time.time())) - metadata.thing_classes = custom_vocabulary.split(',') + metadata.thing_classes = custom_vocabulary.split(",") classifier = get_clip_embeddings(metadata.thing_classes) num_classes = len(metadata.thing_classes) reset_cls_test(self.predictor.model, classifier, num_classes) # Reset visualization threshold output_score_threshold = 0.3 - for cascade_stages in range(len(self.predictor.model.roi_heads.box_predictor)): - self.predictor.model.roi_heads.box_predictor[cascade_stages].test_score_thresh = output_score_threshold + for cascade_stages in range( + len(self.predictor.model.roi_heads.box_predictor) + ): + self.predictor.model.roi_heads.box_predictor[ + cascade_stages + ].test_score_thresh = output_score_threshold outputs = self.predictor(image) v = Visualizer(image[:, :, ::-1], metadata) @@ -89,7 +99,7 @@ def predict(self, image, vocabulary, custom_vocabulary): return out_path -def get_clip_embeddings(vocabulary, prompt='a '): +def get_clip_embeddings(vocabulary, prompt="a "): text_encoder = build_text_encoder(pretrain=True) text_encoder.eval() texts = [prompt + x for x in vocabulary] diff --git a/dimos/models/Detic/third_party/CenterNet2/centernet/config.py b/dimos/models/Detic/third_party/CenterNet2/centernet/config.py index 82c44fa640..056d77b91e 100644 --- a/dimos/models/Detic/third_party/CenterNet2/centernet/config.py +++ b/dimos/models/Detic/third_party/CenterNet2/centernet/config.py @@ -1,5 +1,6 @@ from detectron2.config import CfgNode as CN + def add_centernet_config(cfg): _C = cfg @@ -21,21 +22,27 @@ def add_centernet_config(cfg): _C.MODEL.CENTERNET.NUM_CLS_CONVS = 4 _C.MODEL.CENTERNET.NUM_BOX_CONVS = 4 _C.MODEL.CENTERNET.NUM_SHARE_CONVS = 0 - _C.MODEL.CENTERNET.LOC_LOSS_TYPE = 'giou' + _C.MODEL.CENTERNET.LOC_LOSS_TYPE = "giou" _C.MODEL.CENTERNET.SIGMOID_CLAMP = 1e-4 _C.MODEL.CENTERNET.HM_MIN_OVERLAP = 0.8 _C.MODEL.CENTERNET.MIN_RADIUS = 4 - _C.MODEL.CENTERNET.SOI = [[0, 80], [64, 160], [128, 320], [256, 640], [512, 10000000]] - _C.MODEL.CENTERNET.POS_WEIGHT = 1. - _C.MODEL.CENTERNET.NEG_WEIGHT = 1. - _C.MODEL.CENTERNET.REG_WEIGHT = 2. + _C.MODEL.CENTERNET.SOI = [ + [0, 80], + [64, 160], + [128, 320], + [256, 640], + [512, 10000000], + ] + _C.MODEL.CENTERNET.POS_WEIGHT = 1.0 + _C.MODEL.CENTERNET.NEG_WEIGHT = 1.0 + _C.MODEL.CENTERNET.REG_WEIGHT = 2.0 _C.MODEL.CENTERNET.HM_FOCAL_BETA = 4 _C.MODEL.CENTERNET.HM_FOCAL_ALPHA = 0.25 _C.MODEL.CENTERNET.LOSS_GAMMA = 2.0 _C.MODEL.CENTERNET.WITH_AGN_HM = False _C.MODEL.CENTERNET.ONLY_PROPOSAL = False _C.MODEL.CENTERNET.AS_PROPOSAL = False - _C.MODEL.CENTERNET.IGNORE_HIGH_FP = -1. + _C.MODEL.CENTERNET.IGNORE_HIGH_FP = -1.0 _C.MODEL.CENTERNET.MORE_POS = False _C.MODEL.CENTERNET.MORE_POS_THRESH = 0.2 _C.MODEL.CENTERNET.MORE_POS_TOPK = 9 @@ -46,8 +53,7 @@ def add_centernet_config(cfg): _C.MODEL.ROI_BOX_HEAD.USE_SIGMOID_CE = False _C.MODEL.ROI_BOX_HEAD.PRIOR_PROB = 0.01 _C.MODEL.ROI_BOX_HEAD.USE_EQL_LOSS = False - _C.MODEL.ROI_BOX_HEAD.CAT_FREQ_PATH = \ - 'datasets/lvis/lvis_v1_train_cat_info.json' + _C.MODEL.ROI_BOX_HEAD.CAT_FREQ_PATH = "datasets/lvis/lvis_v1_train_cat_info.json" _C.MODEL.ROI_BOX_HEAD.EQL_FREQ_CAT = 200 _C.MODEL.ROI_BOX_HEAD.USE_FED_LOSS = False _C.MODEL.ROI_BOX_HEAD.FED_LOSS_NUM_CAT = 50 @@ -57,30 +63,30 @@ def add_centernet_config(cfg): _C.MODEL.BIFPN = CN() _C.MODEL.BIFPN.NUM_LEVELS = 5 _C.MODEL.BIFPN.NUM_BIFPN = 6 - _C.MODEL.BIFPN.NORM = 'GN' + _C.MODEL.BIFPN.NORM = "GN" _C.MODEL.BIFPN.OUT_CHANNELS = 160 _C.MODEL.BIFPN.SEPARABLE_CONV = False _C.MODEL.DLA = CN() - _C.MODEL.DLA.OUT_FEATURES = ['dla2'] + _C.MODEL.DLA.OUT_FEATURES = ["dla2"] _C.MODEL.DLA.USE_DLA_UP = True _C.MODEL.DLA.NUM_LAYERS = 34 _C.MODEL.DLA.MS_OUTPUT = False - _C.MODEL.DLA.NORM = 'BN' - _C.MODEL.DLA.DLAUP_IN_FEATURES = ['dla3', 'dla4', 'dla5'] - _C.MODEL.DLA.DLAUP_NODE = 'conv' + _C.MODEL.DLA.NORM = "BN" + _C.MODEL.DLA.DLAUP_IN_FEATURES = ["dla3", "dla4", "dla5"] + _C.MODEL.DLA.DLAUP_NODE = "conv" _C.SOLVER.RESET_ITER = False _C.SOLVER.TRAIN_ITER = -1 - _C.INPUT.CUSTOM_AUG = '' + _C.INPUT.CUSTOM_AUG = "" _C.INPUT.TRAIN_SIZE = 640 _C.INPUT.TEST_SIZE = 640 - _C.INPUT.SCALE_RANGE = (0.1, 2.) + _C.INPUT.SCALE_RANGE = (0.1, 2.0) # 'default' for fixed short/ long edge, 'square' for max size=INPUT.SIZE - _C.INPUT.TEST_INPUT_TYPE = 'default' + _C.INPUT.TEST_INPUT_TYPE = "default" _C.INPUT.NOT_CLAMP_BOX = False - + _C.DEBUG = False _C.SAVE_DEBUG = False _C.SAVE_PTH = False diff --git a/dimos/models/Detic/third_party/CenterNet2/centernet/data/custom_build_augmentation.py b/dimos/models/Detic/third_party/CenterNet2/centernet/data/custom_build_augmentation.py index 7d91f21edb..72e399fa40 100644 --- a/dimos/models/Detic/third_party/CenterNet2/centernet/data/custom_build_augmentation.py +++ b/dimos/models/Detic/third_party/CenterNet2/centernet/data/custom_build_augmentation.py @@ -1,24 +1,7 @@ -import logging -import numpy as np -import pycocotools.mask as mask_util -import torch -from fvcore.common.file_io import PathManager -from PIL import Image - -from detectron2.structures import ( - BitMasks, - Boxes, - BoxMode, - Instances, - Keypoints, - PolygonMasks, - RotatedBoxes, - polygons_to_bitmask, -) - from detectron2.data import transforms as T from .transforms.custom_augmentation_impl import EfficientDetResizeCrop + def build_custom_augmentation(cfg, is_train): """ Create a list of default :class:`Augmentation` from config. @@ -27,7 +10,7 @@ def build_custom_augmentation(cfg, is_train): Returns: list[Augmentation] """ - if cfg.INPUT.CUSTOM_AUG == 'ResizeShortestEdge': + if cfg.INPUT.CUSTOM_AUG == "ResizeShortestEdge": if is_train: min_size = cfg.INPUT.MIN_SIZE_TRAIN max_size = cfg.INPUT.MAX_SIZE_TRAIN @@ -37,7 +20,7 @@ def build_custom_augmentation(cfg, is_train): max_size = cfg.INPUT.MAX_SIZE_TEST sample_style = "choice" augmentation = [T.ResizeShortestEdge(min_size, max_size, sample_style)] - elif cfg.INPUT.CUSTOM_AUG == 'EfficientDetResizeCrop': + elif cfg.INPUT.CUSTOM_AUG == "EfficientDetResizeCrop": if is_train: scale = cfg.INPUT.SCALE_RANGE size = cfg.INPUT.TRAIN_SIZE @@ -56,4 +39,4 @@ def build_custom_augmentation(cfg, is_train): build_custom_transform_gen = build_custom_augmentation """ Alias for backward-compatibility. -""" \ No newline at end of file +""" diff --git a/dimos/models/Detic/third_party/CenterNet2/centernet/data/custom_dataset_dataloader.py b/dimos/models/Detic/third_party/CenterNet2/centernet/data/custom_dataset_dataloader.py index 4e9844c99b..b92fb0483c 100644 --- a/dimos/models/Detic/third_party/CenterNet2/centernet/data/custom_dataset_dataloader.py +++ b/dimos/models/Detic/third_party/CenterNet2/centernet/data/custom_dataset_dataloader.py @@ -1,32 +1,25 @@ # Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved -import copy import logging -import numpy as np -import operator import torch import torch.utils.data -import json -from detectron2.utils.comm import get_world_size -from detectron2.data import samplers -from torch.utils.data.sampler import BatchSampler, Sampler +from torch.utils.data.sampler import Sampler from detectron2.data.common import DatasetFromList, MapDataset -from detectron2.data.dataset_mapper import DatasetMapper from detectron2.data.build import get_detection_dataset_dicts, build_batch_data_loader from detectron2.data.samplers import TrainingSampler, RepeatFactorTrainingSampler -from detectron2.data.build import worker_init_reset_seed, print_instances_class_histogram +from detectron2.data.build import print_instances_class_histogram from detectron2.data.build import filter_images_with_only_crowd_annotations from detectron2.data.build import filter_images_with_few_keypoints from detectron2.data.build import check_metadata_consistency from detectron2.data.catalog import MetadataCatalog, DatasetCatalog from detectron2.utils import comm import itertools -import math from collections import defaultdict from typing import Optional # from .custom_build_augmentation import build_custom_augmentation + def build_custom_train_loader(cfg, mapper=None): """ Modified from detectron2.data.build.build_custom_train_loader, but supports @@ -40,12 +33,14 @@ def build_custom_train_loader(cfg, mapper=None): min_keypoints=cfg.MODEL.ROI_KEYPOINT_HEAD.MIN_KEYPOINTS_PER_IMAGE if cfg.MODEL.KEYPOINT_ON else 0, - proposal_files=cfg.DATASETS.PROPOSAL_FILES_TRAIN if cfg.MODEL.LOAD_PROPOSALS else None, + proposal_files=cfg.DATASETS.PROPOSAL_FILES_TRAIN + if cfg.MODEL.LOAD_PROPOSALS + else None, ) sizes = [0 for _ in range(len(cfg.DATASETS.TRAIN))] for d in dataset_dicts: - sizes[d['dataset_source']] += 1 - print('dataset sizes', sizes) + sizes[d["dataset_source"]] += 1 + print("dataset sizes", sizes) else: dataset_dicts = get_detection_dataset_dicts( cfg.DATASETS.TRAIN, @@ -53,7 +48,9 @@ def build_custom_train_loader(cfg, mapper=None): min_keypoints=cfg.MODEL.ROI_KEYPOINT_HEAD.MIN_KEYPOINTS_PER_IMAGE if cfg.MODEL.KEYPOINT_ON else 0, - proposal_files=cfg.DATASETS.PROPOSAL_FILES_TRAIN if cfg.MODEL.LOAD_PROPOSALS else None, + proposal_files=cfg.DATASETS.PROPOSAL_FILES_TRAIN + if cfg.MODEL.LOAD_PROPOSALS + else None, ) dataset = DatasetFromList(dataset_dicts, copy=False) @@ -72,8 +69,10 @@ def build_custom_train_loader(cfg, mapper=None): assert source_aware sampler = MultiDatasetSampler(cfg, sizes, dataset_dicts) elif sampler_name == "RepeatFactorTrainingSampler": - repeat_factors = RepeatFactorTrainingSampler.repeat_factors_from_category_frequency( - dataset_dicts, cfg.DATALOADER.REPEAT_THRESHOLD + repeat_factors = ( + RepeatFactorTrainingSampler.repeat_factors_from_category_frequency( + dataset_dicts, cfg.DATALOADER.REPEAT_THRESHOLD + ) ) sampler = RepeatFactorTrainingSampler(repeat_factors) elif sampler_name == "ClassAwareSampler": @@ -104,29 +103,27 @@ def __init__(self, dataset_dicts, seed: Optional[int] = None): if seed is None: seed = comm.shared_random_seed() self._seed = int(seed) - + self._rank = comm.get_rank() self._world_size = comm.get_world_size() self.weights = self._get_class_balance_factor(dataset_dicts) - def __iter__(self): start = self._rank yield from itertools.islice( - self._infinite_indices(), start, None, self._world_size) - + self._infinite_indices(), start, None, self._world_size + ) def _infinite_indices(self): g = torch.Generator() g.manual_seed(self._seed) while True: ids = torch.multinomial( - self.weights, self._size, generator=g, - replacement=True) + self.weights, self._size, generator=g, replacement=True + ) yield from ids - - def _get_class_balance_factor(self, dataset_dicts, l=1.): + def _get_class_balance_factor(self, dataset_dicts, l=1.0): # 1. For each category c, compute the fraction of images that contain it: f(c) ret = [] category_freq = defaultdict(int) @@ -136,8 +133,7 @@ def _get_class_balance_factor(self, dataset_dicts, l=1.): category_freq[cat_id] += 1 for i, dataset_dict in enumerate(dataset_dicts): cat_ids = {ann["category_id"] for ann in dataset_dict["annotations"]} - ret.append(sum( - [1. / (category_freq[cat_id] ** l) for cat_id in cat_ids])) + ret.append(sum([1.0 / (category_freq[cat_id] ** l) for cat_id in cat_ids])) return torch.tensor(ret).float() @@ -148,12 +144,13 @@ def get_detection_dataset_dicts_with_source( dataset_dicts = [DatasetCatalog.get(dataset_name) for dataset_name in dataset_names] for dataset_name, dicts in zip(dataset_names, dataset_dicts): assert len(dicts), "Dataset '{}' is empty!".format(dataset_name) - - for source_id, (dataset_name, dicts) in \ - enumerate(zip(dataset_names, dataset_dicts)): + + for source_id, (dataset_name, dicts) in enumerate( + zip(dataset_names, dataset_dicts) + ): assert len(dicts), "Dataset '{}' is empty!".format(dataset_name) for d in dicts: - d['dataset_source'] = source_id + d["dataset_source"] = source_id if "annotations" in dicts[0]: try: @@ -175,6 +172,7 @@ def get_detection_dataset_dicts_with_source( return dataset_dicts + class MultiDatasetSampler(Sampler): def __init__(self, cfg, sizes, dataset_dicts, seed: Optional[int] = None): """ @@ -187,22 +185,26 @@ def __init__(self, cfg, sizes, dataset_dicts, seed: Optional[int] = None): self.sizes = sizes dataset_ratio = cfg.DATALOADER.DATASET_RATIO self._batch_size = cfg.SOLVER.IMS_PER_BATCH - assert len(dataset_ratio) == len(sizes), \ - 'length of dataset ratio {} should be equal to number if dataset {}'.format( + assert len(dataset_ratio) == len(sizes), ( + "length of dataset ratio {} should be equal to number if dataset {}".format( len(dataset_ratio), len(sizes) ) + ) if seed is None: seed = comm.shared_random_seed() self._seed = int(seed) self._rank = comm.get_rank() self._world_size = comm.get_world_size() - + self._ims_per_gpu = self._batch_size // self._world_size - self.dataset_ids = torch.tensor( - [d['dataset_source'] for d in dataset_dicts], dtype=torch.long) + self.dataset_ids = torch.tensor( + [d["dataset_source"] for d in dataset_dicts], dtype=torch.long + ) - dataset_weight = [torch.ones(s) * max(sizes) / s * r / sum(dataset_ratio) \ - for i, (r, s) in enumerate(zip(dataset_ratio, sizes))] + dataset_weight = [ + torch.ones(s) * max(sizes) / s * r / sum(dataset_ratio) + for i, (r, s) in enumerate(zip(dataset_ratio, sizes)) + ] dataset_weight = torch.cat(dataset_weight) self.weights = dataset_weight self.sample_epoch_size = len(self.weights) @@ -210,20 +212,22 @@ def __init__(self, cfg, sizes, dataset_dicts, seed: Optional[int] = None): def __iter__(self): start = self._rank yield from itertools.islice( - self._infinite_indices(), start, None, self._world_size) - + self._infinite_indices(), start, None, self._world_size + ) def _infinite_indices(self): g = torch.Generator() g.manual_seed(self._seed) while True: ids = torch.multinomial( - self.weights, self.sample_epoch_size, generator=g, - replacement=True) - nums = [(self.dataset_ids[ids] == i).sum().int().item() \ - for i in range(len(self.sizes))] - print('_rank, len, nums', self._rank, len(ids), nums, flush=True) - # print('_rank, len, nums, self.dataset_ids[ids[:10]], ', - # self._rank, len(ids), nums, self.dataset_ids[ids[:10]], + self.weights, self.sample_epoch_size, generator=g, replacement=True + ) + nums = [ + (self.dataset_ids[ids] == i).sum().int().item() + for i in range(len(self.sizes)) + ] + print("_rank, len, nums", self._rank, len(ids), nums, flush=True) + # print('_rank, len, nums, self.dataset_ids[ids[:10]], ', + # self._rank, len(ids), nums, self.dataset_ids[ids[:10]], # flush=True) - yield from ids \ No newline at end of file + yield from ids diff --git a/dimos/models/Detic/third_party/CenterNet2/centernet/data/datasets/coco.py b/dimos/models/Detic/third_party/CenterNet2/centernet/data/datasets/coco.py index f8496aacf2..c2b3b45e80 100644 --- a/dimos/models/Detic/third_party/CenterNet2/centernet/data/datasets/coco.py +++ b/dimos/models/Detic/third_party/CenterNet2/centernet/data/datasets/coco.py @@ -14,8 +14,12 @@ def register_distill_coco_instances(name, metadata, json_file, image_root): assert isinstance(json_file, (str, os.PathLike)), json_file assert isinstance(image_root, (str, os.PathLike)), image_root # 1. register a function which returns dicts - DatasetCatalog.register(name, lambda: load_coco_json( - json_file, image_root, name, extra_annotation_keys=['score'])) + DatasetCatalog.register( + name, + lambda: load_coco_json( + json_file, image_root, name, extra_annotation_keys=["score"] + ), + ) # 2. Optionally, add metadata about this dataset, # since they might be useful in evaluation, visualization or logging @@ -25,25 +29,31 @@ def register_distill_coco_instances(name, metadata, json_file, image_root): _PREDEFINED_SPLITS_COCO = { - "coco_2017_unlabeled": ("coco/unlabeled2017", "coco/annotations/image_info_unlabeled2017.json"), + "coco_2017_unlabeled": ( + "coco/unlabeled2017", + "coco/annotations/image_info_unlabeled2017.json", + ), } for key, (image_root, json_file) in _PREDEFINED_SPLITS_COCO.items(): register_coco_instances( key, - _get_builtin_metadata('coco'), + _get_builtin_metadata("coco"), os.path.join("datasets", json_file) if "://" not in json_file else json_file, os.path.join("datasets", image_root), ) _PREDEFINED_SPLITS_DISTILL_COCO = { - "coco_un_yolov4_55_0.5": ("coco/unlabeled2017", "coco/annotations/yolov4_cocounlabeled_55_ann0.5.json"), + "coco_un_yolov4_55_0.5": ( + "coco/unlabeled2017", + "coco/annotations/yolov4_cocounlabeled_55_ann0.5.json", + ), } for key, (image_root, json_file) in _PREDEFINED_SPLITS_DISTILL_COCO.items(): register_distill_coco_instances( key, - _get_builtin_metadata('coco'), + _get_builtin_metadata("coco"), os.path.join("datasets", json_file) if "://" not in json_file else json_file, os.path.join("datasets", image_root), - ) \ No newline at end of file + ) diff --git a/dimos/models/Detic/third_party/CenterNet2/centernet/data/datasets/nuimages.py b/dimos/models/Detic/third_party/CenterNet2/centernet/data/datasets/nuimages.py index 52736e331c..22b80828c0 100644 --- a/dimos/models/Detic/third_party/CenterNet2/centernet/data/datasets/nuimages.py +++ b/dimos/models/Detic/third_party/CenterNet2/centernet/data/datasets/nuimages.py @@ -2,25 +2,28 @@ import os categories = [ - {'id': 0, 'name': 'car'}, - {'id': 1, 'name': 'truck'}, - {'id': 2, 'name': 'trailer'}, - {'id': 3, 'name': 'bus'}, - {'id': 4, 'name': 'construction_vehicle'}, - {'id': 5, 'name': 'bicycle'}, - {'id': 6, 'name': 'motorcycle'}, - {'id': 7, 'name': 'pedestrian'}, - {'id': 8, 'name': 'traffic_cone'}, - {'id': 9, 'name': 'barrier'}, + {"id": 0, "name": "car"}, + {"id": 1, "name": "truck"}, + {"id": 2, "name": "trailer"}, + {"id": 3, "name": "bus"}, + {"id": 4, "name": "construction_vehicle"}, + {"id": 5, "name": "bicycle"}, + {"id": 6, "name": "motorcycle"}, + {"id": 7, "name": "pedestrian"}, + {"id": 8, "name": "traffic_cone"}, + {"id": 9, "name": "barrier"}, ] + def _get_builtin_metadata(): - id_to_name = {x['id']: x['name'] for x in categories} + id_to_name = {x["id"]: x["name"] for x in categories} thing_dataset_id_to_contiguous_id = {i: i for i in range(len(categories))} thing_classes = [id_to_name[k] for k in sorted(id_to_name)] return { "thing_dataset_id_to_contiguous_id": thing_dataset_id_to_contiguous_id, - "thing_classes": thing_classes} + "thing_classes": thing_classes, + } + _PREDEFINED_SPLITS = { "nuimages_train": ("nuimages", "nuimages/annotations/nuimages_v1.0-train.json"), diff --git a/dimos/models/Detic/third_party/CenterNet2/centernet/data/datasets/objects365.py b/dimos/models/Detic/third_party/CenterNet2/centernet/data/datasets/objects365.py index 41395bdd53..1bb16d459a 100644 --- a/dimos/models/Detic/third_party/CenterNet2/centernet/data/datasets/objects365.py +++ b/dimos/models/Detic/third_party/CenterNet2/centernet/data/datasets/objects365.py @@ -2,393 +2,399 @@ import os categories_v1 = [ -{'id': 164, 'name': 'cutting/chopping board'} , -{'id': 49, 'name': 'tie'} , -{'id': 306, 'name': 'crosswalk sign'} , -{'id': 145, 'name': 'gun'} , -{'id': 14, 'name': 'street lights'} , -{'id': 223, 'name': 'bar soap'} , -{'id': 74, 'name': 'wild bird'} , -{'id': 219, 'name': 'ice cream'} , -{'id': 37, 'name': 'stool'} , -{'id': 25, 'name': 'storage box'} , -{'id': 153, 'name': 'giraffe'} , -{'id': 52, 'name': 'pen/pencil'} , -{'id': 61, 'name': 'high heels'} , -{'id': 340, 'name': 'mangosteen'} , -{'id': 22, 'name': 'bracelet'} , -{'id': 155, 'name': 'piano'} , -{'id': 162, 'name': 'vent'} , -{'id': 75, 'name': 'laptop'} , -{'id': 236, 'name': 'toaster'} , -{'id': 231, 'name': 'fire truck'} , -{'id': 42, 'name': 'basket'} , -{'id': 150, 'name': 'zebra'} , -{'id': 124, 'name': 'head phone'} , -{'id': 90, 'name': 'sheep'} , -{'id': 322, 'name': 'steak'} , -{'id': 39, 'name': 'couch'} , -{'id': 209, 'name': 'toothbrush'} , -{'id': 59, 'name': 'bicycle'} , -{'id': 336, 'name': 'red cabbage'} , -{'id': 228, 'name': 'golf ball'} , -{'id': 120, 'name': 'tomato'} , -{'id': 132, 'name': 'computer box'} , -{'id': 8, 'name': 'cup'} , -{'id': 183, 'name': 'basketball'} , -{'id': 298, 'name': 'butterfly'} , -{'id': 250, 'name': 'garlic'} , -{'id': 12, 'name': 'desk'} , -{'id': 141, 'name': 'microwave'} , -{'id': 171, 'name': 'strawberry'} , -{'id': 200, 'name': 'kettle'} , -{'id': 63, 'name': 'van'} , -{'id': 300, 'name': 'cheese'} , -{'id': 215, 'name': 'marker'} , -{'id': 100, 'name': 'blackboard/whiteboard'} , -{'id': 186, 'name': 'printer'} , -{'id': 333, 'name': 'bread/bun'} , -{'id': 243, 'name': 'penguin'} , -{'id': 364, 'name': 'iron'} , -{'id': 180, 'name': 'ladder'} , -{'id': 34, 'name': 'flag'} , -{'id': 78, 'name': 'cell phone'} , -{'id': 97, 'name': 'fan'} , -{'id': 224, 'name': 'scale'} , -{'id': 151, 'name': 'duck'} , -{'id': 319, 'name': 'flute'} , -{'id': 156, 'name': 'stop sign'} , -{'id': 290, 'name': 'rickshaw'} , -{'id': 128, 'name': 'sailboat'} , -{'id': 165, 'name': 'tennis racket'} , -{'id': 241, 'name': 'cigar'} , -{'id': 101, 'name': 'balloon'} , -{'id': 308, 'name': 'hair drier'} , -{'id': 167, 'name': 'skating and skiing shoes'} , -{'id': 237, 'name': 'helicopter'} , -{'id': 65, 'name': 'sink'} , -{'id': 129, 'name': 'tangerine'} , -{'id': 330, 'name': 'crab'} , -{'id': 320, 'name': 'measuring cup'} , -{'id': 260, 'name': 'fishing rod'} , -{'id': 346, 'name': 'saw'} , -{'id': 216, 'name': 'ship'} , -{'id': 46, 'name': 'coffee table'} , -{'id': 194, 'name': 'facial mask'} , -{'id': 281, 'name': 'stapler'} , -{'id': 118, 'name': 'refrigerator'} , -{'id': 40, 'name': 'belt'} , -{'id': 349, 'name': 'starfish'} , -{'id': 87, 'name': 'hanger'} , -{'id': 116, 'name': 'baseball glove'} , -{'id': 261, 'name': 'cherry'} , -{'id': 334, 'name': 'baozi'} , -{'id': 267, 'name': 'screwdriver'} , -{'id': 158, 'name': 'converter'} , -{'id': 335, 'name': 'lion'} , -{'id': 170, 'name': 'baseball'} , -{'id': 111, 'name': 'skis'} , -{'id': 136, 'name': 'broccoli'} , -{'id': 342, 'name': 'eraser'} , -{'id': 337, 'name': 'polar bear'} , -{'id': 139, 'name': 'shovel'} , -{'id': 193, 'name': 'extension cord'} , -{'id': 284, 'name': 'goldfish'} , -{'id': 174, 'name': 'pepper'} , -{'id': 138, 'name': 'stroller'} , -{'id': 328, 'name': 'yak'} , -{'id': 83, 'name': 'clock'} , -{'id': 235, 'name': 'tricycle'} , -{'id': 248, 'name': 'parking meter'} , -{'id': 274, 'name': 'trophy'} , -{'id': 324, 'name': 'binoculars'} , -{'id': 51, 'name': 'traffic light'} , -{'id': 314, 'name': 'donkey'} , -{'id': 45, 'name': 'barrel/bucket'} , -{'id': 292, 'name': 'pomegranate'} , -{'id': 13, 'name': 'handbag'} , -{'id': 262, 'name': 'tablet'} , -{'id': 68, 'name': 'apple'} , -{'id': 226, 'name': 'cabbage'} , -{'id': 23, 'name': 'flower'} , -{'id': 58, 'name': 'faucet'} , -{'id': 206, 'name': 'tong'} , -{'id': 291, 'name': 'trombone'} , -{'id': 160, 'name': 'carrot'} , -{'id': 172, 'name': 'bow tie'} , -{'id': 122, 'name': 'tent'} , -{'id': 163, 'name': 'cookies'} , -{'id': 115, 'name': 'remote'} , -{'id': 175, 'name': 'coffee machine'} , -{'id': 238, 'name': 'green beans'} , -{'id': 233, 'name': 'cello'} , -{'id': 28, 'name': 'wine glass'} , -{'id': 295, 'name': 'mushroom'} , -{'id': 344, 'name': 'scallop'} , -{'id': 125, 'name': 'lantern'} , -{'id': 123, 'name': 'shampoo/shower gel'} , -{'id': 285, 'name': 'meat balls'} , -{'id': 266, 'name': 'key'} , -{'id': 296, 'name': 'calculator'} , -{'id': 168, 'name': 'scissors'} , -{'id': 103, 'name': 'cymbal'} , -{'id': 6, 'name': 'bottle'} , -{'id': 264, 'name': 'nuts'} , -{'id': 234, 'name': 'notepaper'} , -{'id': 211, 'name': 'mango'} , -{'id': 287, 'name': 'toothpaste'} , -{'id': 196, 'name': 'chopsticks'} , -{'id': 140, 'name': 'baseball bat'} , -{'id': 244, 'name': 'hurdle'} , -{'id': 195, 'name': 'tennis ball'} , -{'id': 144, 'name': 'surveillance camera'} , -{'id': 271, 'name': 'volleyball'} , -{'id': 94, 'name': 'keyboard'} , -{'id': 339, 'name': 'seal'} , -{'id': 11, 'name': 'picture/frame'} , -{'id': 348, 'name': 'okra'} , -{'id': 191, 'name': 'sausage'} , -{'id': 166, 'name': 'candy'} , -{'id': 62, 'name': 'ring'} , -{'id': 311, 'name': 'dolphin'} , -{'id': 273, 'name': 'eggplant'} , -{'id': 84, 'name': 'drum'} , -{'id': 143, 'name': 'surfboard'} , -{'id': 288, 'name': 'antelope'} , -{'id': 204, 'name': 'clutch'} , -{'id': 207, 'name': 'slide'} , -{'id': 43, 'name': 'towel/napkin'} , -{'id': 352, 'name': 'durian'} , -{'id': 276, 'name': 'board eraser'} , -{'id': 315, 'name': 'electric drill'} , -{'id': 312, 'name': 'sushi'} , -{'id': 198, 'name': 'pie'} , -{'id': 106, 'name': 'pickup truck'} , -{'id': 176, 'name': 'bathtub'} , -{'id': 26, 'name': 'vase'} , -{'id': 133, 'name': 'elephant'} , -{'id': 256, 'name': 'sandwich'} , -{'id': 327, 'name': 'noodles'} , -{'id': 10, 'name': 'glasses'} , -{'id': 109, 'name': 'airplane'} , -{'id': 95, 'name': 'tripod'} , -{'id': 247, 'name': 'CD'} , -{'id': 121, 'name': 'machinery vehicle'} , -{'id': 365, 'name': 'flashlight'} , -{'id': 53, 'name': 'microphone'} , -{'id': 270, 'name': 'pliers'} , -{'id': 362, 'name': 'chainsaw'} , -{'id': 259, 'name': 'bear'} , -{'id': 197, 'name': 'electronic stove and gas stove'} , -{'id': 89, 'name': 'pot/pan'} , -{'id': 220, 'name': 'tape'} , -{'id': 338, 'name': 'lighter'} , -{'id': 177, 'name': 'snowboard'} , -{'id': 214, 'name': 'violin'} , -{'id': 217, 'name': 'chicken'} , -{'id': 2, 'name': 'sneakers'} , -{'id': 161, 'name': 'washing machine'} , -{'id': 131, 'name': 'kite'} , -{'id': 354, 'name': 'rabbit'} , -{'id': 86, 'name': 'bus'} , -{'id': 275, 'name': 'dates'} , -{'id': 282, 'name': 'camel'} , -{'id': 88, 'name': 'nightstand'} , -{'id': 179, 'name': 'grapes'} , -{'id': 229, 'name': 'pine apple'} , -{'id': 56, 'name': 'necklace'} , -{'id': 18, 'name': 'leather shoes'} , -{'id': 358, 'name': 'hoverboard'} , -{'id': 345, 'name': 'pencil case'} , -{'id': 359, 'name': 'pasta'} , -{'id': 157, 'name': 'radiator'} , -{'id': 201, 'name': 'hamburger'} , -{'id': 268, 'name': 'globe'} , -{'id': 332, 'name': 'barbell'} , -{'id': 329, 'name': 'mop'} , -{'id': 252, 'name': 'horn'} , -{'id': 350, 'name': 'eagle'} , -{'id': 169, 'name': 'folder'} , -{'id': 137, 'name': 'toilet'} , -{'id': 5, 'name': 'lamp'} , -{'id': 27, 'name': 'bench'} , -{'id': 249, 'name': 'swan'} , -{'id': 76, 'name': 'knife'} , -{'id': 341, 'name': 'comb'} , -{'id': 64, 'name': 'watch'} , -{'id': 105, 'name': 'telephone'} , -{'id': 3, 'name': 'chair'} , -{'id': 33, 'name': 'boat'} , -{'id': 107, 'name': 'orange'} , -{'id': 60, 'name': 'bread'} , -{'id': 147, 'name': 'cat'} , -{'id': 135, 'name': 'gas stove'} , -{'id': 307, 'name': 'papaya'} , -{'id': 227, 'name': 'router/modem'} , -{'id': 357, 'name': 'asparagus'} , -{'id': 73, 'name': 'motorcycle'} , -{'id': 77, 'name': 'traffic sign'} , -{'id': 67, 'name': 'fish'} , -{'id': 326, 'name': 'radish'} , -{'id': 213, 'name': 'egg'} , -{'id': 203, 'name': 'cucumber'} , -{'id': 17, 'name': 'helmet'} , -{'id': 110, 'name': 'luggage'} , -{'id': 80, 'name': 'truck'} , -{'id': 199, 'name': 'frisbee'} , -{'id': 232, 'name': 'peach'} , -{'id': 1, 'name': 'person'} , -{'id': 29, 'name': 'boots'} , -{'id': 310, 'name': 'chips'} , -{'id': 142, 'name': 'skateboard'} , -{'id': 44, 'name': 'slippers'} , -{'id': 4, 'name': 'hat'} , -{'id': 178, 'name': 'suitcase'} , -{'id': 24, 'name': 'tv'} , -{'id': 119, 'name': 'train'} , -{'id': 82, 'name': 'power outlet'} , -{'id': 245, 'name': 'swing'} , -{'id': 15, 'name': 'book'} , -{'id': 294, 'name': 'jellyfish'} , -{'id': 192, 'name': 'fire extinguisher'} , -{'id': 212, 'name': 'deer'} , -{'id': 181, 'name': 'pear'} , -{'id': 347, 'name': 'table tennis paddle'} , -{'id': 113, 'name': 'trolley'} , -{'id': 91, 'name': 'guitar'} , -{'id': 202, 'name': 'golf club'} , -{'id': 221, 'name': 'wheelchair'} , -{'id': 254, 'name': 'saxophone'} , -{'id': 117, 'name': 'paper towel'} , -{'id': 303, 'name': 'race car'} , -{'id': 240, 'name': 'carriage'} , -{'id': 246, 'name': 'radio'} , -{'id': 318, 'name': 'parrot'} , -{'id': 251, 'name': 'french fries'} , -{'id': 98, 'name': 'dog'} , -{'id': 112, 'name': 'soccer'} , -{'id': 355, 'name': 'french horn'} , -{'id': 79, 'name': 'paddle'} , -{'id': 283, 'name': 'lettuce'} , -{'id': 9, 'name': 'car'} , -{'id': 258, 'name': 'kiwi fruit'} , -{'id': 325, 'name': 'llama'} , -{'id': 187, 'name': 'billiards'} , -{'id': 210, 'name': 'facial cleanser'} , -{'id': 81, 'name': 'cow'} , -{'id': 331, 'name': 'microscope'} , -{'id': 148, 'name': 'lemon'} , -{'id': 302, 'name': 'pomelo'} , -{'id': 85, 'name': 'fork'} , -{'id': 154, 'name': 'pumpkin'} , -{'id': 289, 'name': 'shrimp'} , -{'id': 71, 'name': 'teddy bear'} , -{'id': 184, 'name': 'potato'} , -{'id': 102, 'name': 'air conditioner'} , -{'id': 208, 'name': 'hot dog'} , -{'id': 222, 'name': 'plum'} , -{'id': 316, 'name': 'spring rolls'} , -{'id': 230, 'name': 'crane'} , -{'id': 149, 'name': 'liquid soap'} , -{'id': 55, 'name': 'canned'} , -{'id': 35, 'name': 'speaker'} , -{'id': 108, 'name': 'banana'} , -{'id': 297, 'name': 'treadmill'} , -{'id': 99, 'name': 'spoon'} , -{'id': 104, 'name': 'mouse'} , -{'id': 182, 'name': 'american football'} , -{'id': 299, 'name': 'egg tart'} , -{'id': 127, 'name': 'cleaning products'} , -{'id': 313, 'name': 'urinal'} , -{'id': 286, 'name': 'medal'} , -{'id': 239, 'name': 'brush'} , -{'id': 96, 'name': 'hockey'} , -{'id': 279, 'name': 'dumbbell'} , -{'id': 32, 'name': 'umbrella'} , -{'id': 272, 'name': 'hammer'} , -{'id': 16, 'name': 'plate'} , -{'id': 21, 'name': 'potted plant'} , -{'id': 242, 'name': 'earphone'} , -{'id': 70, 'name': 'candle'} , -{'id': 185, 'name': 'paint brush'} , -{'id': 48, 'name': 'toy'} , -{'id': 130, 'name': 'pizza'} , -{'id': 255, 'name': 'trumpet'} , -{'id': 361, 'name': 'hotair balloon'} , -{'id': 188, 'name': 'fire hydrant'} , -{'id': 50, 'name': 'bed'} , -{'id': 253, 'name': 'avocado'} , -{'id': 293, 'name': 'coconut'} , -{'id': 257, 'name': 'cue'} , -{'id': 280, 'name': 'hamimelon'} , -{'id': 66, 'name': 'horse'} , -{'id': 173, 'name': 'pigeon'} , -{'id': 190, 'name': 'projector'} , -{'id': 69, 'name': 'camera'} , -{'id': 30, 'name': 'bowl'} , -{'id': 269, 'name': 'broom'} , -{'id': 343, 'name': 'pitaya'} , -{'id': 305, 'name': 'tuba'} , -{'id': 309, 'name': 'green onion'} , -{'id': 363, 'name': 'lobster'} , -{'id': 225, 'name': 'watermelon'} , -{'id': 47, 'name': 'suv'} , -{'id': 31, 'name': 'dining table'} , -{'id': 54, 'name': 'sandals'} , -{'id': 351, 'name': 'monkey'} , -{'id': 218, 'name': 'onion'} , -{'id': 36, 'name': 'trash bin/can'} , -{'id': 20, 'name': 'glove'} , -{'id': 277, 'name': 'rice'} , -{'id': 152, 'name': 'sports car'} , -{'id': 360, 'name': 'target'} , -{'id': 205, 'name': 'blender'} , -{'id': 19, 'name': 'pillow'} , -{'id': 72, 'name': 'cake'} , -{'id': 93, 'name': 'tea pot'} , -{'id': 353, 'name': 'game board'} , -{'id': 38, 'name': 'backpack'} , -{'id': 356, 'name': 'ambulance'} , -{'id': 146, 'name': 'life saver'} , -{'id': 189, 'name': 'goose'} , -{'id': 278, 'name': 'tape measure/ruler'} , -{'id': 92, 'name': 'traffic cone'} , -{'id': 134, 'name': 'toiletries'} , -{'id': 114, 'name': 'oven'} , -{'id': 317, 'name': 'tortoise/turtle'} , -{'id': 265, 'name': 'corn'} , -{'id': 126, 'name': 'donut'} , -{'id': 57, 'name': 'mirror'} , -{'id': 7, 'name': 'cabinet/shelf'} , -{'id': 263, 'name': 'green vegetables'} , -{'id': 159, 'name': 'tissue '} , -{'id': 321, 'name': 'shark'} , -{'id': 301, 'name': 'pig'} , -{'id': 41, 'name': 'carpet'} , -{'id': 304, 'name': 'rice cooker'} , -{'id': 323, 'name': 'poker card'} , + {"id": 164, "name": "cutting/chopping board"}, + {"id": 49, "name": "tie"}, + {"id": 306, "name": "crosswalk sign"}, + {"id": 145, "name": "gun"}, + {"id": 14, "name": "street lights"}, + {"id": 223, "name": "bar soap"}, + {"id": 74, "name": "wild bird"}, + {"id": 219, "name": "ice cream"}, + {"id": 37, "name": "stool"}, + {"id": 25, "name": "storage box"}, + {"id": 153, "name": "giraffe"}, + {"id": 52, "name": "pen/pencil"}, + {"id": 61, "name": "high heels"}, + {"id": 340, "name": "mangosteen"}, + {"id": 22, "name": "bracelet"}, + {"id": 155, "name": "piano"}, + {"id": 162, "name": "vent"}, + {"id": 75, "name": "laptop"}, + {"id": 236, "name": "toaster"}, + {"id": 231, "name": "fire truck"}, + {"id": 42, "name": "basket"}, + {"id": 150, "name": "zebra"}, + {"id": 124, "name": "head phone"}, + {"id": 90, "name": "sheep"}, + {"id": 322, "name": "steak"}, + {"id": 39, "name": "couch"}, + {"id": 209, "name": "toothbrush"}, + {"id": 59, "name": "bicycle"}, + {"id": 336, "name": "red cabbage"}, + {"id": 228, "name": "golf ball"}, + {"id": 120, "name": "tomato"}, + {"id": 132, "name": "computer box"}, + {"id": 8, "name": "cup"}, + {"id": 183, "name": "basketball"}, + {"id": 298, "name": "butterfly"}, + {"id": 250, "name": "garlic"}, + {"id": 12, "name": "desk"}, + {"id": 141, "name": "microwave"}, + {"id": 171, "name": "strawberry"}, + {"id": 200, "name": "kettle"}, + {"id": 63, "name": "van"}, + {"id": 300, "name": "cheese"}, + {"id": 215, "name": "marker"}, + {"id": 100, "name": "blackboard/whiteboard"}, + {"id": 186, "name": "printer"}, + {"id": 333, "name": "bread/bun"}, + {"id": 243, "name": "penguin"}, + {"id": 364, "name": "iron"}, + {"id": 180, "name": "ladder"}, + {"id": 34, "name": "flag"}, + {"id": 78, "name": "cell phone"}, + {"id": 97, "name": "fan"}, + {"id": 224, "name": "scale"}, + {"id": 151, "name": "duck"}, + {"id": 319, "name": "flute"}, + {"id": 156, "name": "stop sign"}, + {"id": 290, "name": "rickshaw"}, + {"id": 128, "name": "sailboat"}, + {"id": 165, "name": "tennis racket"}, + {"id": 241, "name": "cigar"}, + {"id": 101, "name": "balloon"}, + {"id": 308, "name": "hair drier"}, + {"id": 167, "name": "skating and skiing shoes"}, + {"id": 237, "name": "helicopter"}, + {"id": 65, "name": "sink"}, + {"id": 129, "name": "tangerine"}, + {"id": 330, "name": "crab"}, + {"id": 320, "name": "measuring cup"}, + {"id": 260, "name": "fishing rod"}, + {"id": 346, "name": "saw"}, + {"id": 216, "name": "ship"}, + {"id": 46, "name": "coffee table"}, + {"id": 194, "name": "facial mask"}, + {"id": 281, "name": "stapler"}, + {"id": 118, "name": "refrigerator"}, + {"id": 40, "name": "belt"}, + {"id": 349, "name": "starfish"}, + {"id": 87, "name": "hanger"}, + {"id": 116, "name": "baseball glove"}, + {"id": 261, "name": "cherry"}, + {"id": 334, "name": "baozi"}, + {"id": 267, "name": "screwdriver"}, + {"id": 158, "name": "converter"}, + {"id": 335, "name": "lion"}, + {"id": 170, "name": "baseball"}, + {"id": 111, "name": "skis"}, + {"id": 136, "name": "broccoli"}, + {"id": 342, "name": "eraser"}, + {"id": 337, "name": "polar bear"}, + {"id": 139, "name": "shovel"}, + {"id": 193, "name": "extension cord"}, + {"id": 284, "name": "goldfish"}, + {"id": 174, "name": "pepper"}, + {"id": 138, "name": "stroller"}, + {"id": 328, "name": "yak"}, + {"id": 83, "name": "clock"}, + {"id": 235, "name": "tricycle"}, + {"id": 248, "name": "parking meter"}, + {"id": 274, "name": "trophy"}, + {"id": 324, "name": "binoculars"}, + {"id": 51, "name": "traffic light"}, + {"id": 314, "name": "donkey"}, + {"id": 45, "name": "barrel/bucket"}, + {"id": 292, "name": "pomegranate"}, + {"id": 13, "name": "handbag"}, + {"id": 262, "name": "tablet"}, + {"id": 68, "name": "apple"}, + {"id": 226, "name": "cabbage"}, + {"id": 23, "name": "flower"}, + {"id": 58, "name": "faucet"}, + {"id": 206, "name": "tong"}, + {"id": 291, "name": "trombone"}, + {"id": 160, "name": "carrot"}, + {"id": 172, "name": "bow tie"}, + {"id": 122, "name": "tent"}, + {"id": 163, "name": "cookies"}, + {"id": 115, "name": "remote"}, + {"id": 175, "name": "coffee machine"}, + {"id": 238, "name": "green beans"}, + {"id": 233, "name": "cello"}, + {"id": 28, "name": "wine glass"}, + {"id": 295, "name": "mushroom"}, + {"id": 344, "name": "scallop"}, + {"id": 125, "name": "lantern"}, + {"id": 123, "name": "shampoo/shower gel"}, + {"id": 285, "name": "meat balls"}, + {"id": 266, "name": "key"}, + {"id": 296, "name": "calculator"}, + {"id": 168, "name": "scissors"}, + {"id": 103, "name": "cymbal"}, + {"id": 6, "name": "bottle"}, + {"id": 264, "name": "nuts"}, + {"id": 234, "name": "notepaper"}, + {"id": 211, "name": "mango"}, + {"id": 287, "name": "toothpaste"}, + {"id": 196, "name": "chopsticks"}, + {"id": 140, "name": "baseball bat"}, + {"id": 244, "name": "hurdle"}, + {"id": 195, "name": "tennis ball"}, + {"id": 144, "name": "surveillance camera"}, + {"id": 271, "name": "volleyball"}, + {"id": 94, "name": "keyboard"}, + {"id": 339, "name": "seal"}, + {"id": 11, "name": "picture/frame"}, + {"id": 348, "name": "okra"}, + {"id": 191, "name": "sausage"}, + {"id": 166, "name": "candy"}, + {"id": 62, "name": "ring"}, + {"id": 311, "name": "dolphin"}, + {"id": 273, "name": "eggplant"}, + {"id": 84, "name": "drum"}, + {"id": 143, "name": "surfboard"}, + {"id": 288, "name": "antelope"}, + {"id": 204, "name": "clutch"}, + {"id": 207, "name": "slide"}, + {"id": 43, "name": "towel/napkin"}, + {"id": 352, "name": "durian"}, + {"id": 276, "name": "board eraser"}, + {"id": 315, "name": "electric drill"}, + {"id": 312, "name": "sushi"}, + {"id": 198, "name": "pie"}, + {"id": 106, "name": "pickup truck"}, + {"id": 176, "name": "bathtub"}, + {"id": 26, "name": "vase"}, + {"id": 133, "name": "elephant"}, + {"id": 256, "name": "sandwich"}, + {"id": 327, "name": "noodles"}, + {"id": 10, "name": "glasses"}, + {"id": 109, "name": "airplane"}, + {"id": 95, "name": "tripod"}, + {"id": 247, "name": "CD"}, + {"id": 121, "name": "machinery vehicle"}, + {"id": 365, "name": "flashlight"}, + {"id": 53, "name": "microphone"}, + {"id": 270, "name": "pliers"}, + {"id": 362, "name": "chainsaw"}, + {"id": 259, "name": "bear"}, + {"id": 197, "name": "electronic stove and gas stove"}, + {"id": 89, "name": "pot/pan"}, + {"id": 220, "name": "tape"}, + {"id": 338, "name": "lighter"}, + {"id": 177, "name": "snowboard"}, + {"id": 214, "name": "violin"}, + {"id": 217, "name": "chicken"}, + {"id": 2, "name": "sneakers"}, + {"id": 161, "name": "washing machine"}, + {"id": 131, "name": "kite"}, + {"id": 354, "name": "rabbit"}, + {"id": 86, "name": "bus"}, + {"id": 275, "name": "dates"}, + {"id": 282, "name": "camel"}, + {"id": 88, "name": "nightstand"}, + {"id": 179, "name": "grapes"}, + {"id": 229, "name": "pine apple"}, + {"id": 56, "name": "necklace"}, + {"id": 18, "name": "leather shoes"}, + {"id": 358, "name": "hoverboard"}, + {"id": 345, "name": "pencil case"}, + {"id": 359, "name": "pasta"}, + {"id": 157, "name": "radiator"}, + {"id": 201, "name": "hamburger"}, + {"id": 268, "name": "globe"}, + {"id": 332, "name": "barbell"}, + {"id": 329, "name": "mop"}, + {"id": 252, "name": "horn"}, + {"id": 350, "name": "eagle"}, + {"id": 169, "name": "folder"}, + {"id": 137, "name": "toilet"}, + {"id": 5, "name": "lamp"}, + {"id": 27, "name": "bench"}, + {"id": 249, "name": "swan"}, + {"id": 76, "name": "knife"}, + {"id": 341, "name": "comb"}, + {"id": 64, "name": "watch"}, + {"id": 105, "name": "telephone"}, + {"id": 3, "name": "chair"}, + {"id": 33, "name": "boat"}, + {"id": 107, "name": "orange"}, + {"id": 60, "name": "bread"}, + {"id": 147, "name": "cat"}, + {"id": 135, "name": "gas stove"}, + {"id": 307, "name": "papaya"}, + {"id": 227, "name": "router/modem"}, + {"id": 357, "name": "asparagus"}, + {"id": 73, "name": "motorcycle"}, + {"id": 77, "name": "traffic sign"}, + {"id": 67, "name": "fish"}, + {"id": 326, "name": "radish"}, + {"id": 213, "name": "egg"}, + {"id": 203, "name": "cucumber"}, + {"id": 17, "name": "helmet"}, + {"id": 110, "name": "luggage"}, + {"id": 80, "name": "truck"}, + {"id": 199, "name": "frisbee"}, + {"id": 232, "name": "peach"}, + {"id": 1, "name": "person"}, + {"id": 29, "name": "boots"}, + {"id": 310, "name": "chips"}, + {"id": 142, "name": "skateboard"}, + {"id": 44, "name": "slippers"}, + {"id": 4, "name": "hat"}, + {"id": 178, "name": "suitcase"}, + {"id": 24, "name": "tv"}, + {"id": 119, "name": "train"}, + {"id": 82, "name": "power outlet"}, + {"id": 245, "name": "swing"}, + {"id": 15, "name": "book"}, + {"id": 294, "name": "jellyfish"}, + {"id": 192, "name": "fire extinguisher"}, + {"id": 212, "name": "deer"}, + {"id": 181, "name": "pear"}, + {"id": 347, "name": "table tennis paddle"}, + {"id": 113, "name": "trolley"}, + {"id": 91, "name": "guitar"}, + {"id": 202, "name": "golf club"}, + {"id": 221, "name": "wheelchair"}, + {"id": 254, "name": "saxophone"}, + {"id": 117, "name": "paper towel"}, + {"id": 303, "name": "race car"}, + {"id": 240, "name": "carriage"}, + {"id": 246, "name": "radio"}, + {"id": 318, "name": "parrot"}, + {"id": 251, "name": "french fries"}, + {"id": 98, "name": "dog"}, + {"id": 112, "name": "soccer"}, + {"id": 355, "name": "french horn"}, + {"id": 79, "name": "paddle"}, + {"id": 283, "name": "lettuce"}, + {"id": 9, "name": "car"}, + {"id": 258, "name": "kiwi fruit"}, + {"id": 325, "name": "llama"}, + {"id": 187, "name": "billiards"}, + {"id": 210, "name": "facial cleanser"}, + {"id": 81, "name": "cow"}, + {"id": 331, "name": "microscope"}, + {"id": 148, "name": "lemon"}, + {"id": 302, "name": "pomelo"}, + {"id": 85, "name": "fork"}, + {"id": 154, "name": "pumpkin"}, + {"id": 289, "name": "shrimp"}, + {"id": 71, "name": "teddy bear"}, + {"id": 184, "name": "potato"}, + {"id": 102, "name": "air conditioner"}, + {"id": 208, "name": "hot dog"}, + {"id": 222, "name": "plum"}, + {"id": 316, "name": "spring rolls"}, + {"id": 230, "name": "crane"}, + {"id": 149, "name": "liquid soap"}, + {"id": 55, "name": "canned"}, + {"id": 35, "name": "speaker"}, + {"id": 108, "name": "banana"}, + {"id": 297, "name": "treadmill"}, + {"id": 99, "name": "spoon"}, + {"id": 104, "name": "mouse"}, + {"id": 182, "name": "american football"}, + {"id": 299, "name": "egg tart"}, + {"id": 127, "name": "cleaning products"}, + {"id": 313, "name": "urinal"}, + {"id": 286, "name": "medal"}, + {"id": 239, "name": "brush"}, + {"id": 96, "name": "hockey"}, + {"id": 279, "name": "dumbbell"}, + {"id": 32, "name": "umbrella"}, + {"id": 272, "name": "hammer"}, + {"id": 16, "name": "plate"}, + {"id": 21, "name": "potted plant"}, + {"id": 242, "name": "earphone"}, + {"id": 70, "name": "candle"}, + {"id": 185, "name": "paint brush"}, + {"id": 48, "name": "toy"}, + {"id": 130, "name": "pizza"}, + {"id": 255, "name": "trumpet"}, + {"id": 361, "name": "hotair balloon"}, + {"id": 188, "name": "fire hydrant"}, + {"id": 50, "name": "bed"}, + {"id": 253, "name": "avocado"}, + {"id": 293, "name": "coconut"}, + {"id": 257, "name": "cue"}, + {"id": 280, "name": "hamimelon"}, + {"id": 66, "name": "horse"}, + {"id": 173, "name": "pigeon"}, + {"id": 190, "name": "projector"}, + {"id": 69, "name": "camera"}, + {"id": 30, "name": "bowl"}, + {"id": 269, "name": "broom"}, + {"id": 343, "name": "pitaya"}, + {"id": 305, "name": "tuba"}, + {"id": 309, "name": "green onion"}, + {"id": 363, "name": "lobster"}, + {"id": 225, "name": "watermelon"}, + {"id": 47, "name": "suv"}, + {"id": 31, "name": "dining table"}, + {"id": 54, "name": "sandals"}, + {"id": 351, "name": "monkey"}, + {"id": 218, "name": "onion"}, + {"id": 36, "name": "trash bin/can"}, + {"id": 20, "name": "glove"}, + {"id": 277, "name": "rice"}, + {"id": 152, "name": "sports car"}, + {"id": 360, "name": "target"}, + {"id": 205, "name": "blender"}, + {"id": 19, "name": "pillow"}, + {"id": 72, "name": "cake"}, + {"id": 93, "name": "tea pot"}, + {"id": 353, "name": "game board"}, + {"id": 38, "name": "backpack"}, + {"id": 356, "name": "ambulance"}, + {"id": 146, "name": "life saver"}, + {"id": 189, "name": "goose"}, + {"id": 278, "name": "tape measure/ruler"}, + {"id": 92, "name": "traffic cone"}, + {"id": 134, "name": "toiletries"}, + {"id": 114, "name": "oven"}, + {"id": 317, "name": "tortoise/turtle"}, + {"id": 265, "name": "corn"}, + {"id": 126, "name": "donut"}, + {"id": 57, "name": "mirror"}, + {"id": 7, "name": "cabinet/shelf"}, + {"id": 263, "name": "green vegetables"}, + {"id": 159, "name": "tissue "}, + {"id": 321, "name": "shark"}, + {"id": 301, "name": "pig"}, + {"id": 41, "name": "carpet"}, + {"id": 304, "name": "rice cooker"}, + {"id": 323, "name": "poker card"}, ] + def _get_builtin_metadata(version): - if version == 'v1': - id_to_name = {x['id']: x['name'] for x in categories_v1} + if version == "v1": + id_to_name = {x["id"]: x["name"] for x in categories_v1} else: assert 0, version thing_dataset_id_to_contiguous_id = {i + 1: i for i in range(365)} thing_classes = [id_to_name[k] for k in sorted(id_to_name)] return { "thing_dataset_id_to_contiguous_id": thing_dataset_id_to_contiguous_id, - "thing_classes": thing_classes} + "thing_classes": thing_classes, + } + _PREDEFINED_SPLITS_OBJECTS365 = { - "objects365_train": ("objects365/train", "objects365/annotations/objects365_train.json"), + "objects365_train": ( + "objects365/train", + "objects365/annotations/objects365_train.json", + ), "objects365_val": ("objects365/val", "objects365/annotations/objects365_val.json"), } for key, (image_root, json_file) in _PREDEFINED_SPLITS_OBJECTS365.items(): register_coco_instances( key, - _get_builtin_metadata('v1'), + _get_builtin_metadata("v1"), os.path.join("datasets", json_file) if "://" not in json_file else json_file, os.path.join("datasets", image_root), ) diff --git a/dimos/models/Detic/third_party/CenterNet2/centernet/data/transforms/custom_augmentation_impl.py b/dimos/models/Detic/third_party/CenterNet2/centernet/data/transforms/custom_augmentation_impl.py index 5a69e178a5..3e5a2bdb3b 100644 --- a/dimos/models/Detic/third_party/CenterNet2/centernet/data/transforms/custom_augmentation_impl.py +++ b/dimos/models/Detic/third_party/CenterNet2/centernet/data/transforms/custom_augmentation_impl.py @@ -4,16 +4,8 @@ """ Implement many useful :class:`Augmentation`. """ + import numpy as np -import sys -from fvcore.transforms.transform import ( - BlendTransform, - CropTransform, - HFlipTransform, - NoOpTransform, - Transform, - VFlipTransform, -) from PIL import Image from detectron2.data.transforms.augmentation import Augmentation @@ -30,9 +22,7 @@ class EfficientDetResizeCrop(Augmentation): If `max_size` is reached, then downscale so that the longer edge does not exceed max_size. """ - def __init__( - self, size, scale, interp=Image.BILINEAR - ): + def __init__(self, size, scale, interp=Image.BILINEAR): """ Args: """ @@ -60,4 +50,11 @@ def get_transform(self, img): offset_y = int(max(0.0, float(offset_y)) * np.random.uniform(0, 1)) offset_x = int(max(0.0, float(offset_x)) * np.random.uniform(0, 1)) return EfficientDetResizeCropTransform( - scaled_h, scaled_w, offset_y, offset_x, img_scale, self.target_size, self.interp) + scaled_h, + scaled_w, + offset_y, + offset_x, + img_scale, + self.target_size, + self.interp, + ) diff --git a/dimos/models/Detic/third_party/CenterNet2/centernet/data/transforms/custom_transform.py b/dimos/models/Detic/third_party/CenterNet2/centernet/data/transforms/custom_transform.py index 654d65d97d..9a3d8b47c0 100644 --- a/dimos/models/Detic/third_party/CenterNet2/centernet/data/transforms/custom_transform.py +++ b/dimos/models/Detic/third_party/CenterNet2/centernet/data/transforms/custom_transform.py @@ -7,11 +7,7 @@ import torch import torch.nn.functional as F from fvcore.transforms.transform import ( - CropTransform, - HFlipTransform, - NoOpTransform, Transform, - TransformList, ) from PIL import Image @@ -27,10 +23,18 @@ class EfficientDetResizeCropTransform(Transform): - """ - """ + """ """ - def __init__(self, scaled_h, scaled_w, offset_y, offset_x, img_scale, target_size, interp=None): + def __init__( + self, + scaled_h, + scaled_w, + offset_y, + offset_x, + img_scale, + target_size, + interp=None, + ): """ Args: h, w (int): original image size @@ -56,26 +60,31 @@ def apply_image(self, img, interp=None): lower = min(self.scaled_h, self.offset_y + self.target_size[0]) # img = img.crop((self.offset_x, self.offset_y, right, lower)) if len(ret.shape) <= 3: - ret = ret[self.offset_y: lower, self.offset_x: right] + ret = ret[self.offset_y : lower, self.offset_x : right] else: - ret = ret[..., self.offset_y: lower, self.offset_x: right, :] + ret = ret[..., self.offset_y : lower, self.offset_x : right, :] else: # PIL only supports uint8 img = torch.from_numpy(img) shape = list(img.shape) shape_4d = shape[:2] + [1] * (4 - len(shape)) + shape[2:] img = img.view(shape_4d).permute(2, 3, 0, 1) # hw(c) -> nchw - _PIL_RESIZE_TO_INTERPOLATE_MODE = {Image.BILINEAR: "bilinear", Image.BICUBIC: "bicubic"} + _PIL_RESIZE_TO_INTERPOLATE_MODE = { + Image.BILINEAR: "bilinear", + Image.BICUBIC: "bicubic", + } mode = _PIL_RESIZE_TO_INTERPOLATE_MODE[self.interp] - img = F.interpolate(img, (self.scaled_h, self.scaled_w), mode=mode, align_corners=False) + img = F.interpolate( + img, (self.scaled_h, self.scaled_w), mode=mode, align_corners=False + ) shape[:2] = (self.scaled_h, self.scaled_w) ret = img.permute(2, 3, 0, 1).view(shape).numpy() # nchw -> hw(c) right = min(self.scaled_w, self.offset_x + self.target_size[1]) lower = min(self.scaled_h, self.offset_y + self.target_size[0]) if len(ret.shape) <= 3: - ret = ret[self.offset_y: lower, self.offset_x: right] + ret = ret[self.offset_y : lower, self.offset_x : right] else: - ret = ret[..., self.offset_y: lower, self.offset_x: right, :] + ret = ret[..., self.offset_y : lower, self.offset_x : right, :] return ret def apply_coords(self, coords): @@ -91,4 +100,4 @@ def apply_segmentation(self, segmentation): def inverse(self): raise NotImplementedError - # return ResizeTransform(self.new_h, self.new_w, self.h, self.w, self.interp) \ No newline at end of file + # return ResizeTransform(self.new_h, self.new_w, self.h, self.w, self.interp) diff --git a/dimos/models/Detic/third_party/CenterNet2/centernet/modeling/backbone/bifpn.py b/dimos/models/Detic/third_party/CenterNet2/centernet/modeling/backbone/bifpn.py index 565e2940ad..bf1b4d70ab 100644 --- a/dimos/models/Detic/third_party/CenterNet2/centernet/modeling/backbone/bifpn.py +++ b/dimos/models/Detic/third_party/CenterNet2/centernet/modeling/backbone/bifpn.py @@ -1,16 +1,10 @@ # Modified from https://github.com/rwightman/efficientdet-pytorch/blob/master/effdet/efficientdet.py # The original file is under Apache-2.0 License import math -from os.path import join -import numpy as np from collections import OrderedDict -from typing import List 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.layers import ShapeSpec, Conv2d from detectron2.modeling.backbone.resnet import build_resnet_backbone @@ -19,27 +13,27 @@ from detectron2.modeling.backbone import Backbone from .dlafpn import dla34 + def get_fpn_config(base_reduction=8): """BiFPN config with sum.""" p = { - 'nodes': [ - {'reduction': base_reduction << 3, 'inputs_offsets': [3, 4]}, - {'reduction': base_reduction << 2, 'inputs_offsets': [2, 5]}, - {'reduction': base_reduction << 1, 'inputs_offsets': [1, 6]}, - {'reduction': base_reduction, 'inputs_offsets': [0, 7]}, - {'reduction': base_reduction << 1, 'inputs_offsets': [1, 7, 8]}, - {'reduction': base_reduction << 2, 'inputs_offsets': [2, 6, 9]}, - {'reduction': base_reduction << 3, 'inputs_offsets': [3, 5, 10]}, - {'reduction': base_reduction << 4, 'inputs_offsets': [4, 11]}, + "nodes": [ + {"reduction": base_reduction << 3, "inputs_offsets": [3, 4]}, + {"reduction": base_reduction << 2, "inputs_offsets": [2, 5]}, + {"reduction": base_reduction << 1, "inputs_offsets": [1, 6]}, + {"reduction": base_reduction, "inputs_offsets": [0, 7]}, + {"reduction": base_reduction << 1, "inputs_offsets": [1, 7, 8]}, + {"reduction": base_reduction << 2, "inputs_offsets": [2, 6, 9]}, + {"reduction": base_reduction << 3, "inputs_offsets": [3, 5, 10]}, + {"reduction": base_reduction << 4, "inputs_offsets": [4, 11]}, ], - 'weight_method': 'fastattn', + "weight_method": "fastattn", } return p def swish(x, inplace: bool = False): - """Swish - Described in: https://arxiv.org/abs/1710.05941 - """ + """Swish - Described in: https://arxiv.org/abs/1710.05941""" return x.mul_(x.sigmoid()) if inplace else x.mul(x.sigmoid()) @@ -74,14 +68,29 @@ def forward(self, x): class ConvBnAct2d(nn.Module): - def __init__(self, in_channels, out_channels, kernel_size, stride=1, dilation=1, padding='', bias=False, - norm='', act_layer=Swish): + def __init__( + self, + in_channels, + out_channels, + kernel_size, + stride=1, + dilation=1, + padding="", + bias=False, + norm="", + act_layer=Swish, + ): super(ConvBnAct2d, self).__init__() # self.conv = create_conv2d( # in_channels, out_channels, kernel_size, stride=stride, dilation=dilation, padding=padding, bias=bias) self.conv = Conv2d( - in_channels, out_channels, kernel_size=kernel_size, stride=stride, - padding=kernel_size // 2, bias=(norm == '')) + in_channels, + out_channels, + kernel_size=kernel_size, + stride=stride, + padding=kernel_size // 2, + bias=(norm == ""), + ) self.bn = get_norm(norm, out_channels) self.act = None if act_layer is None else act_layer(inplace=True) @@ -95,11 +104,22 @@ def forward(self, x): class SeparableConv2d(nn.Module): - """ Separable Conv - """ - def __init__(self, in_channels, out_channels, kernel_size=3, stride=1, dilation=1, padding='', bias=False, - channel_multiplier=1.0, pw_kernel_size=1, act_layer=Swish, - norm=''): + """Separable Conv""" + + def __init__( + self, + in_channels, + out_channels, + kernel_size=3, + stride=1, + dilation=1, + padding="", + bias=False, + channel_multiplier=1.0, + pw_kernel_size=1, + act_layer=Swish, + norm="", + ): super(SeparableConv2d, self).__init__() # self.conv_dw = create_conv2d( @@ -107,17 +127,26 @@ def __init__(self, in_channels, out_channels, kernel_size=3, stride=1, dilation= # stride=stride, dilation=dilation, padding=padding, depthwise=True) self.conv_dw = Conv2d( - in_channels, int(in_channels * channel_multiplier), - kernel_size=kernel_size, stride=stride, padding=kernel_size // 2, bias=bias, - groups=out_channels) - # print('conv_dw', kernel_size, stride) + in_channels, + int(in_channels * channel_multiplier), + kernel_size=kernel_size, + stride=stride, + padding=kernel_size // 2, + bias=bias, + groups=out_channels, + ) + # print('conv_dw', kernel_size, stride) # self.conv_pw = create_conv2d( # int(in_channels * channel_multiplier), out_channels, pw_kernel_size, padding=padding, bias=bias) - + self.conv_pw = Conv2d( - int(in_channels * channel_multiplier), out_channels, - kernel_size=pw_kernel_size, padding=pw_kernel_size // 2, bias=(norm=='')) - # print('conv_pw', pw_kernel_size) + int(in_channels * channel_multiplier), + out_channels, + kernel_size=pw_kernel_size, + padding=pw_kernel_size // 2, + bias=(norm == ""), + ) + # print('conv_pw', pw_kernel_size) self.bn = get_norm(norm, out_channels) self.act = None if act_layer is None else act_layer(inplace=True) @@ -133,11 +162,20 @@ def forward(self, x): class ResampleFeatureMap(nn.Sequential): - def __init__(self, in_channels, out_channels, reduction_ratio=1., pad_type='', pooling_type='max', - norm='', apply_bn=False, conv_after_downsample=False, - redundant_bias=False): + def __init__( + self, + in_channels, + out_channels, + reduction_ratio=1.0, + pad_type="", + pooling_type="max", + norm="", + apply_bn=False, + conv_after_downsample=False, + redundant_bias=False, + ): super(ResampleFeatureMap, self).__init__() - pooling_type = pooling_type or 'max' + pooling_type = pooling_type or "max" self.in_channels = in_channels self.out_channels = out_channels self.reduction_ratio = reduction_ratio @@ -146,35 +184,52 @@ def __init__(self, in_channels, out_channels, reduction_ratio=1., pad_type='', p conv = None if in_channels != out_channels: conv = ConvBnAct2d( - in_channels, out_channels, kernel_size=1, padding=pad_type, - norm=norm if apply_bn else '', - bias=not apply_bn or redundant_bias, act_layer=None) + in_channels, + out_channels, + kernel_size=1, + padding=pad_type, + norm=norm if apply_bn else "", + bias=not apply_bn or redundant_bias, + act_layer=None, + ) if reduction_ratio > 1: stride_size = int(reduction_ratio) if conv is not None and not self.conv_after_downsample: - self.add_module('conv', conv) + self.add_module("conv", conv) self.add_module( - 'downsample', + "downsample", # create_pool2d( # pooling_type, kernel_size=stride_size + 1, stride=stride_size, padding=pad_type) # nn.MaxPool2d(kernel_size=stride_size + 1, stride=stride_size, padding=pad_type) - nn.MaxPool2d(kernel_size=stride_size, stride=stride_size) - ) + nn.MaxPool2d(kernel_size=stride_size, stride=stride_size), + ) if conv is not None and self.conv_after_downsample: - self.add_module('conv', conv) + self.add_module("conv", conv) else: if conv is not None: - self.add_module('conv', conv) + self.add_module("conv", conv) if reduction_ratio < 1: scale = int(1 // reduction_ratio) - self.add_module('upsample', nn.UpsamplingNearest2d(scale_factor=scale)) + self.add_module("upsample", nn.UpsamplingNearest2d(scale_factor=scale)) class FpnCombine(nn.Module): - def __init__(self, feature_info, fpn_config, fpn_channels, inputs_offsets, target_reduction, pad_type='', - pooling_type='max', norm='', apply_bn_for_resampling=False, - conv_after_downsample=False, redundant_bias=False, weight_method='attn'): + def __init__( + self, + feature_info, + fpn_config, + fpn_channels, + inputs_offsets, + target_reduction, + pad_type="", + pooling_type="max", + norm="", + apply_bn_for_resampling=False, + conv_after_downsample=False, + redundant_bias=False, + weight_method="attn", + ): super(FpnCombine, self).__init__() self.inputs_offsets = inputs_offsets self.weight_method = weight_method @@ -183,22 +238,30 @@ def __init__(self, feature_info, fpn_config, fpn_channels, inputs_offsets, targe for idx, offset in enumerate(inputs_offsets): in_channels = fpn_channels if offset < len(feature_info): - in_channels = feature_info[offset]['num_chs'] - input_reduction = feature_info[offset]['reduction'] + in_channels = feature_info[offset]["num_chs"] + input_reduction = feature_info[offset]["reduction"] else: node_idx = offset - len(feature_info) # print('node_idx, len', node_idx, len(fpn_config['nodes'])) - input_reduction = fpn_config['nodes'][node_idx]['reduction'] + input_reduction = fpn_config["nodes"][node_idx]["reduction"] reduction_ratio = target_reduction / input_reduction self.resample[str(offset)] = ResampleFeatureMap( - in_channels, fpn_channels, reduction_ratio=reduction_ratio, pad_type=pad_type, - pooling_type=pooling_type, norm=norm, - apply_bn=apply_bn_for_resampling, conv_after_downsample=conv_after_downsample, - redundant_bias=redundant_bias) + in_channels, + fpn_channels, + reduction_ratio=reduction_ratio, + pad_type=pad_type, + pooling_type=pooling_type, + norm=norm, + apply_bn=apply_bn_for_resampling, + conv_after_downsample=conv_after_downsample, + redundant_bias=redundant_bias, + ) - if weight_method == 'attn' or weight_method == 'fastattn': + if weight_method == "attn" or weight_method == "fastattn": # WSM - self.edge_weights = nn.Parameter(torch.ones(len(inputs_offsets)), requires_grad=True) + self.edge_weights = nn.Parameter( + torch.ones(len(inputs_offsets)), requires_grad=True + ) else: self.edge_weights = None @@ -210,27 +273,44 @@ def forward(self, x): input_node = self.resample[str(offset)](input_node) nodes.append(input_node) - if self.weight_method == 'attn': + if self.weight_method == "attn": normalized_weights = torch.softmax(self.edge_weights.type(dtype), dim=0) x = torch.stack(nodes, dim=-1) * normalized_weights - elif self.weight_method == 'fastattn': + elif self.weight_method == "fastattn": edge_weights = nn.functional.relu(self.edge_weights.type(dtype)) weights_sum = torch.sum(edge_weights) x = torch.stack( - [(nodes[i] * edge_weights[i]) / (weights_sum + 0.0001) for i in range(len(nodes))], dim=-1) - elif self.weight_method == 'sum': + [ + (nodes[i] * edge_weights[i]) / (weights_sum + 0.0001) + for i in range(len(nodes)) + ], + dim=-1, + ) + elif self.weight_method == "sum": x = torch.stack(nodes, dim=-1) else: - raise ValueError('unknown weight_method {}'.format(self.weight_method)) + raise ValueError("unknown weight_method {}".format(self.weight_method)) x = torch.sum(x, dim=-1) return x class BiFpnLayer(nn.Module): - def __init__(self, feature_info, fpn_config, fpn_channels, num_levels=5, pad_type='', - pooling_type='max', norm='', act_layer=Swish, - apply_bn_for_resampling=False, conv_after_downsample=True, conv_bn_relu_pattern=False, - separable_conv=True, redundant_bias=False): + def __init__( + self, + feature_info, + fpn_config, + fpn_channels, + num_levels=5, + pad_type="", + pooling_type="max", + norm="", + act_layer=Swish, + apply_bn_for_resampling=False, + conv_after_downsample=True, + conv_bn_relu_pattern=False, + separable_conv=True, + redundant_bias=False, + ): super(BiFpnLayer, self).__init__() self.fpn_config = fpn_config self.num_levels = num_levels @@ -238,34 +318,53 @@ def __init__(self, feature_info, fpn_config, fpn_channels, num_levels=5, pad_typ self.feature_info = [] self.fnode = SequentialAppend() - for i, fnode_cfg in enumerate(fpn_config['nodes']): + for i, fnode_cfg in enumerate(fpn_config["nodes"]): # logging.debug('fnode {} : {}'.format(i, fnode_cfg)) # print('fnode {} : {}'.format(i, fnode_cfg)) fnode_layers = OrderedDict() # combine features - reduction = fnode_cfg['reduction'] - fnode_layers['combine'] = FpnCombine( - feature_info, fpn_config, fpn_channels, fnode_cfg['inputs_offsets'], target_reduction=reduction, - pad_type=pad_type, pooling_type=pooling_type, norm=norm, - apply_bn_for_resampling=apply_bn_for_resampling, conv_after_downsample=conv_after_downsample, - redundant_bias=redundant_bias, weight_method=fpn_config['weight_method']) + reduction = fnode_cfg["reduction"] + fnode_layers["combine"] = FpnCombine( + feature_info, + fpn_config, + fpn_channels, + fnode_cfg["inputs_offsets"], + target_reduction=reduction, + pad_type=pad_type, + pooling_type=pooling_type, + norm=norm, + apply_bn_for_resampling=apply_bn_for_resampling, + conv_after_downsample=conv_after_downsample, + redundant_bias=redundant_bias, + weight_method=fpn_config["weight_method"], + ) self.feature_info.append(dict(num_chs=fpn_channels, reduction=reduction)) # after combine ops after_combine = OrderedDict() if not conv_bn_relu_pattern: - after_combine['act'] = act_layer(inplace=True) + after_combine["act"] = act_layer(inplace=True) conv_bias = redundant_bias conv_act = None else: conv_bias = False conv_act = act_layer conv_kwargs = dict( - in_channels=fpn_channels, out_channels=fpn_channels, kernel_size=3, padding=pad_type, - bias=conv_bias, norm=norm, act_layer=conv_act) - after_combine['conv'] = SeparableConv2d(**conv_kwargs) if separable_conv else ConvBnAct2d(**conv_kwargs) - fnode_layers['after_combine'] = nn.Sequential(after_combine) + in_channels=fpn_channels, + out_channels=fpn_channels, + kernel_size=3, + padding=pad_type, + bias=conv_bias, + norm=norm, + act_layer=conv_act, + ) + after_combine["conv"] = ( + SeparableConv2d(**conv_kwargs) + if separable_conv + else ConvBnAct2d(**conv_kwargs) + ) + fnode_layers["after_combine"] = nn.Sequential(after_combine) self.fnode.add_module(str(i), nn.Sequential(fnode_layers)) @@ -273,17 +372,24 @@ def __init__(self, feature_info, fpn_config, fpn_channels, num_levels=5, pad_typ def forward(self, x): x = self.fnode(x) - return x[-self.num_levels::] + return x[-self.num_levels : :] class BiFPN(Backbone): def __init__( - self, cfg, bottom_up, in_features, out_channels, norm='', - num_levels=5, num_bifpn=4, separable_conv=False, + self, + cfg, + bottom_up, + in_features, + out_channels, + norm="", + num_levels=5, + num_bifpn=4, + separable_conv=False, ): super(BiFPN, self).__init__() assert isinstance(bottom_up, Backbone) - + # Feature map strides and channels from the bottom up network (e.g. ResNet) input_shapes = bottom_up.output_shape() in_strides = [input_shapes[f].stride for f in in_features] @@ -296,19 +402,20 @@ def __init__( self._size_divisibility = 128 levels = [int(math.log2(s)) for s in in_strides] self._out_feature_strides = { - "p{}".format(int(math.log2(s))): s for s in in_strides} + "p{}".format(int(math.log2(s))): s for s in in_strides + } if len(in_features) < num_levels: for l in range(num_levels - len(in_features)): s = l + levels[-1] self._out_feature_strides["p{}".format(s + 1)] = 2 ** (s + 1) self._out_features = list(sorted(self._out_feature_strides.keys())) self._out_feature_channels = {k: out_channels for k in self._out_features} - + # print('self._out_feature_strides', self._out_feature_strides) # print('self._out_feature_channels', self._out_feature_channels) - + feature_info = [ - {'num_chs': in_channels[level], 'reduction': in_strides[level]} \ + {"num_chs": in_channels[level], "reduction": in_strides[level]} for level in range(len(self.in_features)) ] # self.config = config @@ -316,22 +423,25 @@ def __init__( self.resample = SequentialAppendLast() for level in range(num_levels): if level < len(feature_info): - in_chs = in_channels[level] # feature_info[level]['num_chs'] - reduction = in_strides[level] # feature_info[level]['reduction'] + in_chs = in_channels[level] # feature_info[level]['num_chs'] + reduction = in_strides[level] # feature_info[level]['reduction'] else: # Adds a coarser level by downsampling the last feature map reduction_ratio = 2 - self.resample.add_module(str(level), ResampleFeatureMap( - in_channels=in_chs, - out_channels=out_channels, - pad_type='same', - pooling_type=None, - norm=norm, - reduction_ratio=reduction_ratio, - apply_bn=True, - conv_after_downsample=False, - redundant_bias=False, - )) + self.resample.add_module( + str(level), + ResampleFeatureMap( + in_channels=in_chs, + out_channels=out_channels, + pad_type="same", + pooling_type=None, + norm=norm, + reduction_ratio=reduction_ratio, + apply_bn=True, + conv_after_downsample=False, + redundant_bias=False, + ), + ) in_chs = out_channels reduction = int(reduction * reduction_ratio) feature_info.append(dict(num_chs=in_chs, reduction=reduction)) @@ -345,7 +455,7 @@ def __init__( fpn_config=fpn_config, fpn_channels=out_channels, num_levels=self.num_levels, - pad_type='same', + pad_type="same", pooling_type=None, norm=norm, act_layer=Swish, @@ -400,6 +510,7 @@ def build_resnet_bifpn_backbone(cfg, input_shape: ShapeSpec): ) return backbone + @BACKBONE_REGISTRY.register() def build_p37_dla_bifpn_backbone(cfg, input_shape: ShapeSpec): """ diff --git a/dimos/models/Detic/third_party/CenterNet2/centernet/modeling/backbone/bifpn_fcos.py b/dimos/models/Detic/third_party/CenterNet2/centernet/modeling/backbone/bifpn_fcos.py index 17f2904cca..26001016e7 100644 --- a/dimos/models/Detic/third_party/CenterNet2/centernet/modeling/backbone/bifpn_fcos.py +++ b/dimos/models/Detic/third_party/CenterNet2/centernet/modeling/backbone/bifpn_fcos.py @@ -29,10 +29,12 @@ def __init__(self, in_channels, out_channels, stride, norm=""): super(FeatureMapResampler, self).__init__() if in_channels != out_channels: self.reduction = Conv2d( - in_channels, out_channels, kernel_size=1, + in_channels, + out_channels, + kernel_size=1, bias=(norm == ""), norm=get_norm(norm, out_channels), - activation=None + activation=None, ) else: self.reduction = None @@ -46,8 +48,7 @@ def forward(self, x): if self.stride == 2: x = F.max_pool2d( - x, kernel_size=self.stride + 1, - stride=self.stride, padding=1 + x, kernel_size=self.stride + 1, stride=self.stride, padding=1 ) elif self.stride == 1: pass @@ -62,11 +63,17 @@ def __init__(self, backbone, out_channels, num_top_levels, norm=""): self.backbone = backbone backbone_output_shape = backbone.output_shape() - self._out_feature_channels = {name: shape.channels for name, shape in backbone_output_shape.items()} - self._out_feature_strides = {name: shape.stride for name, shape in backbone_output_shape.items()} + self._out_feature_channels = { + name: shape.channels for name, shape in backbone_output_shape.items() + } + self._out_feature_strides = { + name: shape.stride for name, shape in backbone_output_shape.items() + } self._out_features = list(self._out_feature_strides.keys()) - last_feature_name = max(self._out_feature_strides.keys(), key=lambda x: split_name(x)[1]) + last_feature_name = max( + self._out_feature_strides.keys(), key=lambda x: split_name(x)[1] + ) self.last_feature_name = last_feature_name self.num_top_levels = num_top_levels @@ -77,9 +84,9 @@ def __init__(self, backbone, out_channels, num_top_levels, norm=""): prev_channels = last_channels for i in range(num_top_levels): name = prefix + str(suffix + i + 1) - self.add_module(name, FeatureMapResampler( - prev_channels, out_channels, 2, norm - )) + self.add_module( + name, FeatureMapResampler(prev_channels, out_channels, 2, norm) + ) prev_channels = out_channels self._out_feature_channels[name] = out_channels @@ -106,9 +113,7 @@ class SingleBiFPN(Backbone): It creates pyramid features built on top of some input feature maps. """ - def __init__( - self, in_channels_list, out_channels, norm="" - ): + def __init__(self, in_channels_list, out_channels, norm=""): """ Args: bottom_up (Backbone): module representing the bottom up subnetwork. @@ -128,21 +133,21 @@ def __init__( # build 5-levels bifpn if len(in_channels_list) == 5: self.nodes = [ - {'feat_level': 3, 'inputs_offsets': [3, 4]}, - {'feat_level': 2, 'inputs_offsets': [2, 5]}, - {'feat_level': 1, 'inputs_offsets': [1, 6]}, - {'feat_level': 0, 'inputs_offsets': [0, 7]}, - {'feat_level': 1, 'inputs_offsets': [1, 7, 8]}, - {'feat_level': 2, 'inputs_offsets': [2, 6, 9]}, - {'feat_level': 3, 'inputs_offsets': [3, 5, 10]}, - {'feat_level': 4, 'inputs_offsets': [4, 11]}, + {"feat_level": 3, "inputs_offsets": [3, 4]}, + {"feat_level": 2, "inputs_offsets": [2, 5]}, + {"feat_level": 1, "inputs_offsets": [1, 6]}, + {"feat_level": 0, "inputs_offsets": [0, 7]}, + {"feat_level": 1, "inputs_offsets": [1, 7, 8]}, + {"feat_level": 2, "inputs_offsets": [2, 6, 9]}, + {"feat_level": 3, "inputs_offsets": [3, 5, 10]}, + {"feat_level": 4, "inputs_offsets": [4, 11]}, ] elif len(in_channels_list) == 3: self.nodes = [ - {'feat_level': 1, 'inputs_offsets': [1, 2]}, - {'feat_level': 0, 'inputs_offsets': [0, 3]}, - {'feat_level': 1, 'inputs_offsets': [1, 3, 4]}, - {'feat_level': 2, 'inputs_offsets': [2, 5]}, + {"feat_level": 1, "inputs_offsets": [1, 2]}, + {"feat_level": 0, "inputs_offsets": [0, 3]}, + {"feat_level": 1, "inputs_offsets": [1, 3, 4]}, + {"feat_level": 2, "inputs_offsets": [2, 5]}, ] else: raise NotImplementedError @@ -163,7 +168,7 @@ def __init__( in_channels, out_channels, kernel_size=1, - norm=get_norm(norm, out_channels) + norm=get_norm(norm, out_channels), ) self.add_module( "lateral_{}_f{}".format(input_offset, feat_level), lateral_conv @@ -173,21 +178,27 @@ def __init__( # generate attention weights name = "weights_f{}_{}".format(feat_level, inputs_offsets_str) - self.__setattr__(name, nn.Parameter( + self.__setattr__( + name, + nn.Parameter( torch.ones(len(inputs_offsets), dtype=torch.float32), - requires_grad=True - )) + requires_grad=True, + ), + ) # generate convolutions after combination name = "outputs_f{}_{}".format(feat_level, inputs_offsets_str) - self.add_module(name, Conv2d( - out_channels, - out_channels, - kernel_size=3, - padding=1, - norm=get_norm(norm, out_channels), - bias=(norm == "") - )) + self.add_module( + name, + Conv2d( + out_channels, + out_channels, + kernel_size=3, + padding=1, + norm=get_norm(norm, out_channels), + bias=(norm == ""), + ), + ) def forward(self, feats): """ @@ -226,15 +237,15 @@ def forward(self, feats): width_stride_size = int((w - 1) // target_w + 1) assert height_stride_size == width_stride_size == 2 input_node = F.max_pool2d( - input_node, kernel_size=(height_stride_size + 1, width_stride_size + 1), - stride=(height_stride_size, width_stride_size), padding=1 + input_node, + kernel_size=(height_stride_size + 1, width_stride_size + 1), + stride=(height_stride_size, width_stride_size), + padding=1, ) elif h <= target_h and w <= target_w: if h < target_h or w < target_w: input_node = F.interpolate( - input_node, - size=(target_h, target_w), - mode="nearest" + input_node, size=(target_h, target_w), mode="nearest" ) else: raise NotImplementedError() @@ -257,7 +268,7 @@ def forward(self, feats): output_feats = [] for idx in range(num_levels): for i, fnode in enumerate(reversed(self.nodes)): - if fnode['feat_level'] == idx: + if fnode["feat_level"] == idx: output_feats.append(feats[-1 - i]) break else: @@ -294,13 +305,12 @@ def __init__( # add extra feature levels (i.e., 6 and 7) self.bottom_up = BackboneWithTopLevels( - bottom_up, out_channels, - num_top_levels, norm + bottom_up, out_channels, num_top_levels, norm ) bottom_up_output_shapes = self.bottom_up.output_shape() in_features = sorted(in_features, key=lambda x: split_name(x)[1]) - self._size_divisibility = 128 #bottom_up_output_shapes[in_features[-1]].stride + self._size_divisibility = 128 # bottom_up_output_shapes[in_features[-1]].stride self.out_channels = out_channels self.min_level = split_name(in_features[0])[1] @@ -329,9 +339,9 @@ def __init__( in_channels_list = [ self._out_feature_channels[name] for name in self._out_features ] - self.repeated_bifpn.append(SingleBiFPN( - in_channels_list, out_channels, norm - )) + self.repeated_bifpn.append( + SingleBiFPN(in_channels_list, out_channels, norm) + ) @property def size_divisibility(self): @@ -353,7 +363,7 @@ def forward(self, x): feats = [bottom_up_features[f] for f in self.in_features] for bifpn in self.repeated_bifpn: - feats = bifpn(feats) + feats = bifpn(feats) return dict(zip(self._out_features, feats)) @@ -363,8 +373,8 @@ def _assert_strides_are_log2_contiguous(strides): Assert that each stride is 2x times its preceding stride, i.e. "contiguous in log2". """ for i, stride in enumerate(strides[1:], 1): - assert stride == 2 * strides[i - 1], "Strides {} {} are not log2 contiguous".format( - stride, strides[i - 1] + assert stride == 2 * strides[i - 1], ( + "Strides {} {} are not log2 contiguous".format(stride, strides[i - 1]) ) @@ -388,12 +398,11 @@ def build_fcos_resnet_bifpn_backbone(cfg, input_shape: ShapeSpec): out_channels=out_channels, num_top_levels=top_levels, num_repeats=num_repeats, - norm=cfg.MODEL.BIFPN.NORM + norm=cfg.MODEL.BIFPN.NORM, ) return backbone - @BACKBONE_REGISTRY.register() def build_p35_fcos_resnet_bifpn_backbone(cfg, input_shape: ShapeSpec): """ @@ -414,7 +423,7 @@ def build_p35_fcos_resnet_bifpn_backbone(cfg, input_shape: ShapeSpec): out_channels=out_channels, num_top_levels=top_levels, num_repeats=num_repeats, - norm=cfg.MODEL.BIFPN.NORM + norm=cfg.MODEL.BIFPN.NORM, ) return backbone @@ -439,10 +448,11 @@ def build_p35_fcos_dla_bifpn_backbone(cfg, input_shape: ShapeSpec): out_channels=out_channels, num_top_levels=top_levels, num_repeats=num_repeats, - norm=cfg.MODEL.BIFPN.NORM + norm=cfg.MODEL.BIFPN.NORM, ) return backbone + @BACKBONE_REGISTRY.register() def build_p37_fcos_dla_bifpn_backbone(cfg, input_shape: ShapeSpec): """ @@ -464,6 +474,6 @@ def build_p37_fcos_dla_bifpn_backbone(cfg, input_shape: ShapeSpec): out_channels=out_channels, num_top_levels=top_levels, num_repeats=num_repeats, - norm=cfg.MODEL.BIFPN.NORM + norm=cfg.MODEL.BIFPN.NORM, ) - return backbone \ No newline at end of file + return backbone diff --git a/dimos/models/Detic/third_party/CenterNet2/centernet/modeling/backbone/dla.py b/dimos/models/Detic/third_party/CenterNet2/centernet/modeling/backbone/dla.py index 9f15f84035..ccb4211993 100644 --- a/dimos/models/Detic/third_party/CenterNet2/centernet/modeling/backbone/dla.py +++ b/dimos/models/Detic/third_party/CenterNet2/centernet/modeling/backbone/dla.py @@ -8,11 +8,13 @@ import torch.utils.model_zoo as model_zoo from detectron2.modeling.backbone.resnet import ( - BasicStem, BottleneckBlock, DeformBottleneckBlock) + BasicStem, + BottleneckBlock, + DeformBottleneckBlock, +) from detectron2.layers import ( Conv2d, DeformConv, - FrozenBatchNorm2d, ModulatedDeformConv, ShapeSpec, get_norm, @@ -31,24 +33,38 @@ DCNV1 = False HASH = { - 34: 'ba72cf86', - 60: '24839fc4', + 34: "ba72cf86", + 60: "24839fc4", } + def get_model_url(data, name, hash): - return join('http://dl.yf.io/dla/models', data, '{}-{}.pth'.format(name, hash)) + return join("http://dl.yf.io/dla/models", data, "{}-{}.pth".format(name, hash)) + class BasicBlock(nn.Module): - def __init__(self, inplanes, planes, stride=1, dilation=1, norm='BN'): + def __init__(self, inplanes, planes, stride=1, dilation=1, norm="BN"): super(BasicBlock, self).__init__() - self.conv1 = nn.Conv2d(inplanes, planes, kernel_size=3, - stride=stride, padding=dilation, - bias=False, dilation=dilation) + self.conv1 = nn.Conv2d( + inplanes, + planes, + kernel_size=3, + stride=stride, + padding=dilation, + bias=False, + dilation=dilation, + ) self.bn1 = get_norm(norm, planes) self.relu = nn.ReLU(inplace=True) - self.conv2 = nn.Conv2d(planes, planes, kernel_size=3, - stride=1, padding=dilation, - bias=False, dilation=dilation) + self.conv2 = nn.Conv2d( + planes, + planes, + kernel_size=3, + stride=1, + padding=dilation, + bias=False, + dilation=dilation, + ) self.bn2 = get_norm(norm, planes) self.stride = stride @@ -68,22 +84,27 @@ def forward(self, x, residual=None): return out + class Bottleneck(nn.Module): expansion = 2 - def __init__(self, inplanes, planes, stride=1, dilation=1, norm='BN'): + def __init__(self, inplanes, planes, stride=1, dilation=1, norm="BN"): super(Bottleneck, self).__init__() expansion = Bottleneck.expansion bottle_planes = planes // expansion - self.conv1 = nn.Conv2d(inplanes, bottle_planes, - kernel_size=1, bias=False) + self.conv1 = nn.Conv2d(inplanes, bottle_planes, kernel_size=1, bias=False) self.bn1 = get_norm(norm, bottle_planes) - self.conv2 = nn.Conv2d(bottle_planes, bottle_planes, kernel_size=3, - stride=stride, padding=dilation, - bias=False, dilation=dilation) + self.conv2 = nn.Conv2d( + bottle_planes, + bottle_planes, + kernel_size=3, + stride=stride, + padding=dilation, + bias=False, + dilation=dilation, + ) self.bn2 = get_norm(norm, bottle_planes) - self.conv3 = nn.Conv2d(bottle_planes, planes, - kernel_size=1, bias=False) + self.conv3 = nn.Conv2d(bottle_planes, planes, kernel_size=1, bias=False) self.bn3 = get_norm(norm, planes) self.relu = nn.ReLU(inplace=True) self.stride = stride @@ -108,12 +129,18 @@ def forward(self, x, residual=None): return out + class Root(nn.Module): - def __init__(self, in_channels, out_channels, kernel_size, residual, norm='BN'): + def __init__(self, in_channels, out_channels, kernel_size, residual, norm="BN"): super(Root, self).__init__() self.conv = nn.Conv2d( - in_channels, out_channels, 1, - stride=1, bias=False, padding=(kernel_size - 1) // 2) + in_channels, + out_channels, + 1, + stride=1, + bias=False, + padding=(kernel_size - 1) // 2, + ) self.bn = get_norm(norm, out_channels) self.relu = nn.ReLU(inplace=True) self.residual = residual @@ -130,33 +157,60 @@ def forward(self, *x): class Tree(nn.Module): - def __init__(self, levels, block, in_channels, out_channels, stride=1, - level_root=False, root_dim=0, root_kernel_size=1, - dilation=1, root_residual=False, norm='BN'): + def __init__( + self, + levels, + block, + in_channels, + out_channels, + stride=1, + level_root=False, + root_dim=0, + root_kernel_size=1, + dilation=1, + root_residual=False, + norm="BN", + ): super(Tree, self).__init__() if root_dim == 0: root_dim = 2 * out_channels if level_root: root_dim += in_channels if levels == 1: - self.tree1 = block(in_channels, out_channels, stride, - dilation=dilation, norm=norm) - self.tree2 = block(out_channels, out_channels, 1, - dilation=dilation, norm=norm) + self.tree1 = block( + in_channels, out_channels, stride, dilation=dilation, norm=norm + ) + self.tree2 = block( + out_channels, out_channels, 1, dilation=dilation, norm=norm + ) else: - self.tree1 = Tree(levels - 1, block, in_channels, out_channels, - stride, root_dim=0, - root_kernel_size=root_kernel_size, - dilation=dilation, root_residual=root_residual, - norm=norm) - self.tree2 = Tree(levels - 1, block, out_channels, out_channels, - root_dim=root_dim + out_channels, - root_kernel_size=root_kernel_size, - dilation=dilation, root_residual=root_residual, - norm=norm) + self.tree1 = Tree( + levels - 1, + block, + in_channels, + out_channels, + stride, + root_dim=0, + root_kernel_size=root_kernel_size, + dilation=dilation, + root_residual=root_residual, + norm=norm, + ) + self.tree2 = Tree( + levels - 1, + block, + out_channels, + out_channels, + root_dim=root_dim + out_channels, + root_kernel_size=root_kernel_size, + dilation=dilation, + root_residual=root_residual, + norm=norm, + ) if levels == 1: - self.root = Root(root_dim, out_channels, root_kernel_size, - root_residual, norm=norm) + self.root = Root( + root_dim, out_channels, root_kernel_size, root_residual, norm=norm + ) self.level_root = level_root self.root_dim = root_dim self.downsample = None @@ -166,9 +220,10 @@ def __init__(self, levels, block, in_channels, out_channels, stride=1, self.downsample = nn.MaxPool2d(stride, stride=stride) if in_channels != out_channels: self.project = nn.Sequential( - nn.Conv2d(in_channels, out_channels, - kernel_size=1, stride=1, bias=False), - get_norm(norm, out_channels) + nn.Conv2d( + in_channels, out_channels, kernel_size=1, stride=1, bias=False + ), + get_norm(norm, out_channels), ) def forward(self, x, residual=None, children=None): @@ -186,9 +241,17 @@ def forward(self, x, residual=None, children=None): x = self.tree2(x1, children=children) return x + class DLA(nn.Module): - def __init__(self, num_layers, levels, channels, - block=BasicBlock, residual_root=False, norm='BN'): + def __init__( + self, + num_layers, + levels, + channels, + block=BasicBlock, + residual_root=False, + norm="BN", + ): """ Args: """ @@ -196,49 +259,91 @@ def __init__(self, num_layers, levels, channels, self.norm = norm self.channels = channels self.base_layer = nn.Sequential( - nn.Conv2d(3, channels[0], kernel_size=7, stride=1, - padding=3, bias=False), + nn.Conv2d(3, channels[0], kernel_size=7, stride=1, padding=3, bias=False), get_norm(self.norm, channels[0]), - nn.ReLU(inplace=True)) - self.level0 = self._make_conv_level( - channels[0], channels[0], levels[0]) + nn.ReLU(inplace=True), + ) + self.level0 = self._make_conv_level(channels[0], channels[0], levels[0]) self.level1 = self._make_conv_level( - channels[0], channels[1], levels[1], stride=2) - self.level2 = Tree(levels[2], block, channels[1], channels[2], 2, - level_root=False, - root_residual=residual_root, norm=norm) - self.level3 = Tree(levels[3], block, channels[2], channels[3], 2, - level_root=True, root_residual=residual_root, - norm=norm) - self.level4 = Tree(levels[4], block, channels[3], channels[4], 2, - level_root=True, root_residual=residual_root, - norm=norm) - self.level5 = Tree(levels[5], block, channels[4], channels[5], 2, - level_root=True, root_residual=residual_root, - norm=norm) + channels[0], channels[1], levels[1], stride=2 + ) + self.level2 = Tree( + levels[2], + block, + channels[1], + channels[2], + 2, + level_root=False, + root_residual=residual_root, + norm=norm, + ) + self.level3 = Tree( + levels[3], + block, + channels[2], + channels[3], + 2, + level_root=True, + root_residual=residual_root, + norm=norm, + ) + self.level4 = Tree( + levels[4], + block, + channels[3], + channels[4], + 2, + level_root=True, + root_residual=residual_root, + norm=norm, + ) + self.level5 = Tree( + levels[5], + block, + channels[4], + channels[5], + 2, + level_root=True, + root_residual=residual_root, + norm=norm, + ) self.load_pretrained_model( - data='imagenet', name='dla{}'.format(num_layers), - hash=HASH[num_layers]) + data="imagenet", name="dla{}".format(num_layers), hash=HASH[num_layers] + ) def load_pretrained_model(self, data, name, hash): model_url = get_model_url(data, name, hash) model_weights = model_zoo.load_url(model_url) num_classes = len(model_weights[list(model_weights.keys())[-1]]) self.fc = nn.Conv2d( - self.channels[-1], num_classes, - kernel_size=1, stride=1, padding=0, bias=True) - print('Loading pretrained') + self.channels[-1], + num_classes, + kernel_size=1, + stride=1, + padding=0, + bias=True, + ) + print("Loading pretrained") self.load_state_dict(model_weights, strict=False) def _make_conv_level(self, inplanes, planes, convs, stride=1, dilation=1): modules = [] for i in range(convs): - modules.extend([ - nn.Conv2d(inplanes, planes, kernel_size=3, - stride=stride if i == 0 else 1, - padding=dilation, bias=False, dilation=dilation), - get_norm(self.norm, planes), - nn.ReLU(inplace=True)]) + modules.extend( + [ + nn.Conv2d( + inplanes, + planes, + kernel_size=3, + stride=stride if i == 0 else 1, + padding=dilation, + bias=False, + dilation=dilation, + ), + get_norm(self.norm, planes), + nn.ReLU(inplace=True), + ] + ) inplanes = planes return nn.Sequential(*modules) @@ -246,7 +351,7 @@ def forward(self, x): y = [] x = self.base_layer(x) for i in range(6): - x = getattr(self, 'level{}'.format(i))(x) + x = getattr(self, "level{}".format(i))(x) y.append(x) return y @@ -254,39 +359,47 @@ def forward(self, x): def fill_up_weights(up): w = up.weight.data f = math.ceil(w.size(2) / 2) - c = (2 * f - 1 - f % 2) / (2. * f) + c = (2 * f - 1 - f % 2) / (2.0 * f) for i in range(w.size(2)): for j in range(w.size(3)): - w[0, 0, i, j] = \ - (1 - math.fabs(i / f - c)) * (1 - math.fabs(j / f - c)) + w[0, 0, i, j] = (1 - math.fabs(i / f - c)) * (1 - math.fabs(j / f - c)) for c in range(1, w.size(0)): w[c, 0, :, :] = w[0, 0, :, :] class _DeformConv(nn.Module): - def __init__(self, chi, cho, norm='BN'): + def __init__(self, chi, cho, norm="BN"): super(_DeformConv, self).__init__() - self.actf = nn.Sequential( - get_norm(norm, cho), - nn.ReLU(inplace=True) - ) + self.actf = nn.Sequential(get_norm(norm, cho), nn.ReLU(inplace=True)) if DCNV1: self.offset = Conv2d( - chi, 18, kernel_size=3, stride=1, - padding=1, dilation=1) + chi, 18, kernel_size=3, stride=1, padding=1, dilation=1 + ) self.conv = DeformConv( - chi, cho, kernel_size=(3,3), stride=1, padding=1, - dilation=1, deformable_groups=1) + chi, + cho, + kernel_size=(3, 3), + stride=1, + padding=1, + dilation=1, + deformable_groups=1, + ) else: self.offset = Conv2d( - chi, 27, kernel_size=3, stride=1, - padding=1, dilation=1) + chi, 27, kernel_size=3, stride=1, padding=1, dilation=1 + ) self.conv = ModulatedDeformConv( - chi, cho, kernel_size=3, stride=1, padding=1, - dilation=1, deformable_groups=1) + chi, + cho, + kernel_size=3, + stride=1, + padding=1, + dilation=1, + deformable_groups=1, + ) nn.init.constant_(self.offset.weight, 0) nn.init.constant_(self.offset.bias, 0) - + def forward(self, x): if DCNV1: offset = self.offset(x) @@ -302,35 +415,41 @@ def forward(self, x): class IDAUp(nn.Module): - def __init__(self, o, channels, up_f, norm='BN'): + def __init__(self, o, channels, up_f, norm="BN"): super(IDAUp, self).__init__() for i in range(1, len(channels)): c = channels[i] - f = int(up_f[i]) + f = int(up_f[i]) proj = _DeformConv(c, o, norm=norm) node = _DeformConv(o, o, norm=norm) - - up = nn.ConvTranspose2d(o, o, f * 2, stride=f, - padding=f // 2, output_padding=0, - groups=o, bias=False) + + up = nn.ConvTranspose2d( + o, + o, + f * 2, + stride=f, + padding=f // 2, + output_padding=0, + groups=o, + bias=False, + ) fill_up_weights(up) - setattr(self, 'proj_' + str(i), proj) - setattr(self, 'up_' + str(i), up) - setattr(self, 'node_' + str(i), node) - - + setattr(self, "proj_" + str(i), proj) + setattr(self, "up_" + str(i), up) + setattr(self, "node_" + str(i), node) + def forward(self, layers, startp, endp): for i in range(startp + 1, endp): - upsample = getattr(self, 'up_' + str(i - startp)) - project = getattr(self, 'proj_' + str(i - startp)) + upsample = getattr(self, "up_" + str(i - startp)) + project = getattr(self, "proj_" + str(i - startp)) layers[i] = upsample(project(layers[i])) - node = getattr(self, 'node_' + str(i - startp)) + node = getattr(self, "node_" + str(i - startp)) layers[i] = node(layers[i] + layers[i - 1]) class DLAUp(nn.Module): - def __init__(self, startp, channels, scales, in_channels=None, norm='BN'): + def __init__(self, startp, channels, scales, in_channels=None, norm="BN"): super(DLAUp, self).__init__() self.startp = startp if in_channels is None: @@ -340,56 +459,65 @@ def __init__(self, startp, channels, scales, in_channels=None, norm='BN'): scales = np.array(scales, dtype=int) for i in range(len(channels) - 1): j = -i - 2 - setattr(self, 'ida_{}'.format(i), - IDAUp(channels[j], in_channels[j:], - scales[j:] // scales[j], norm=norm)) - scales[j + 1:] = scales[j] - in_channels[j + 1:] = [channels[j] for _ in channels[j + 1:]] + setattr( + self, + "ida_{}".format(i), + IDAUp(channels[j], in_channels[j:], scales[j:] // scales[j], norm=norm), + ) + scales[j + 1 :] = scales[j] + in_channels[j + 1 :] = [channels[j] for _ in channels[j + 1 :]] def forward(self, layers): - out = [layers[-1]] # start with 32 + out = [layers[-1]] # start with 32 for i in range(len(layers) - self.startp - 1): - ida = getattr(self, 'ida_{}'.format(i)) - ida(layers, len(layers) -i - 2, len(layers)) + ida = getattr(self, "ida_{}".format(i)) + ida(layers, len(layers) - i - 2, len(layers)) out.insert(0, layers[-1]) return out + DLA_CONFIGS = { 34: ([1, 1, 1, 2, 2, 1], [16, 32, 64, 128, 256, 512], BasicBlock), - 60: ([1, 1, 1, 2, 3, 1], [16, 32, 128, 256, 512, 1024], Bottleneck) + 60: ([1, 1, 1, 2, 3, 1], [16, 32, 128, 256, 512, 1024], Bottleneck), } class DLASeg(Backbone): - def __init__(self, num_layers, out_features, use_dla_up=True, - ms_output=False, norm='BN'): + def __init__( + self, num_layers, out_features, use_dla_up=True, ms_output=False, norm="BN" + ): super(DLASeg, self).__init__() # depth = 34 levels, channels, Block = DLA_CONFIGS[num_layers] - self.base = DLA(num_layers=num_layers, - levels=levels, channels=channels, block=Block, norm=norm) + self.base = DLA( + num_layers=num_layers, + levels=levels, + channels=channels, + block=Block, + norm=norm, + ) down_ratio = 4 self.first_level = int(np.log2(down_ratio)) self.ms_output = ms_output self.last_level = 5 if not self.ms_output else 6 channels = self.base.channels - scales = [2 ** i for i in range(len(channels[self.first_level:]))] + scales = [2**i for i in range(len(channels[self.first_level :]))] self.use_dla_up = use_dla_up if self.use_dla_up: self.dla_up = DLAUp( - self.first_level, channels[self.first_level:], scales, - norm=norm) + self.first_level, channels[self.first_level :], scales, norm=norm + ) out_channel = channels[self.first_level] - if not self.ms_output: # stride 4 DLA + if not self.ms_output: # stride 4 DLA self.ida_up = IDAUp( - out_channel, channels[self.first_level:self.last_level], - [2 ** i for i in range(self.last_level - self.first_level)], - norm=norm) + out_channel, + channels[self.first_level : self.last_level], + [2**i for i in range(self.last_level - self.first_level)], + norm=norm, + ) self._out_features = out_features - self._out_feature_channels = { - 'dla{}'.format(i): channels[i] for i in range(6)} - self._out_feature_strides = { - 'dla{}'.format(i): 2 ** i for i in range(6)} + self._out_feature_channels = {"dla{}".format(i): channels[i] for i in range(6)} + self._out_feature_strides = {"dla{}".format(i): 2**i for i in range(6)} self._size_divisibility = 32 @property @@ -400,24 +528,24 @@ def forward(self, x): x = self.base(x) if self.use_dla_up: x = self.dla_up(x) - if not self.ms_output: # stride 4 dla + if not self.ms_output: # stride 4 dla y = [] for i in range(self.last_level - self.first_level): y.append(x[i].clone()) self.ida_up(y, 0, len(y)) ret = {} for i in range(self.last_level - self.first_level): - out_feature = 'dla{}'.format(i) + out_feature = "dla{}".format(i) if out_feature in self._out_features: ret[out_feature] = y[i] else: ret = {} st = self.first_level if self.use_dla_up else 0 for i in range(self.last_level - st): - out_feature = 'dla{}'.format(i + st) + out_feature = "dla{}".format(i + st) if out_feature in self._out_features: ret[out_feature] = x[i] - + return ret @@ -430,11 +558,13 @@ def build_dla_backbone(cfg, input_shape): ResNet: a :class:`ResNet` instance. """ return DLASeg( - out_features=cfg.MODEL.DLA.OUT_FEATURES, + out_features=cfg.MODEL.DLA.OUT_FEATURES, num_layers=cfg.MODEL.DLA.NUM_LAYERS, use_dla_up=cfg.MODEL.DLA.USE_DLA_UP, ms_output=cfg.MODEL.DLA.MS_OUTPUT, - norm=cfg.MODEL.DLA.NORM) + norm=cfg.MODEL.DLA.NORM, + ) + class LastLevelP6P7(nn.Module): """ @@ -456,6 +586,7 @@ def forward(self, c5): p7 = self.p7(F.relu(p6)) return [p6, p7] + @BACKBONE_REGISTRY.register() def build_retinanet_dla_fpn_backbone(cfg, input_shape: ShapeSpec): """ @@ -467,7 +598,7 @@ def build_retinanet_dla_fpn_backbone(cfg, input_shape: ShapeSpec): bottom_up = build_dla_backbone(cfg, input_shape) in_features = cfg.MODEL.FPN.IN_FEATURES out_channels = cfg.MODEL.FPN.OUT_CHANNELS - in_channels_p6p7 = bottom_up.output_shape()['dla5'].channels + in_channels_p6p7 = bottom_up.output_shape()["dla5"].channels backbone = FPN( bottom_up=bottom_up, in_features=in_features, diff --git a/dimos/models/Detic/third_party/CenterNet2/centernet/modeling/backbone/dlafpn.py b/dimos/models/Detic/third_party/CenterNet2/centernet/modeling/backbone/dlafpn.py index 2a33c66bf3..82d0878941 100644 --- a/dimos/models/Detic/third_party/CenterNet2/centernet/modeling/backbone/dlafpn.py +++ b/dimos/models/Detic/third_party/CenterNet2/centernet/modeling/backbone/dlafpn.py @@ -19,31 +19,43 @@ from detectron2.layers.batch_norm import get_norm from detectron2.modeling.backbone import Backbone -WEB_ROOT = 'http://dl.yf.io/dla/models' +WEB_ROOT = "http://dl.yf.io/dla/models" def get_model_url(data, name, hash): - return join( - 'http://dl.yf.io/dla/models', data, '{}-{}.pth'.format(name, hash)) + return join("http://dl.yf.io/dla/models", data, "{}-{}.pth".format(name, hash)) def conv3x3(in_planes, out_planes, stride=1): "3x3 convolution with padding" - return nn.Conv2d(in_planes, out_planes, kernel_size=3, stride=stride, - padding=1, bias=False) + return nn.Conv2d( + in_planes, out_planes, kernel_size=3, stride=stride, padding=1, bias=False + ) class BasicBlock(nn.Module): def __init__(self, cfg, inplanes, planes, stride=1, dilation=1): super(BasicBlock, self).__init__() - self.conv1 = nn.Conv2d(inplanes, planes, kernel_size=3, - stride=stride, padding=dilation, - bias=False, dilation=dilation) + self.conv1 = nn.Conv2d( + inplanes, + planes, + kernel_size=3, + stride=stride, + padding=dilation, + bias=False, + dilation=dilation, + ) self.bn1 = get_norm(cfg.MODEL.DLA.NORM, planes) self.relu = nn.ReLU(inplace=True) - self.conv2 = nn.Conv2d(planes, planes, kernel_size=3, - stride=1, padding=dilation, - bias=False, dilation=dilation) + self.conv2 = nn.Conv2d( + planes, + planes, + kernel_size=3, + stride=1, + padding=dilation, + bias=False, + dilation=dilation, + ) self.bn2 = get_norm(cfg.MODEL.DLA.NORM, planes) self.stride = stride @@ -71,15 +83,19 @@ def __init__(self, cfg, inplanes, planes, stride=1, dilation=1): super(Bottleneck, self).__init__() expansion = Bottleneck.expansion bottle_planes = planes // expansion - self.conv1 = nn.Conv2d(inplanes, bottle_planes, - kernel_size=1, bias=False) + self.conv1 = nn.Conv2d(inplanes, bottle_planes, kernel_size=1, bias=False) self.bn1 = get_norm(cfg.MODEL.DLA.NORM, bottle_planes) - self.conv2 = nn.Conv2d(bottle_planes, bottle_planes, kernel_size=3, - stride=stride, padding=dilation, - bias=False, dilation=dilation) + self.conv2 = nn.Conv2d( + bottle_planes, + bottle_planes, + kernel_size=3, + stride=stride, + padding=dilation, + bias=False, + dilation=dilation, + ) self.bn2 = get_norm(cfg.MODEL.DLA.NORM, bottle_planes) - self.conv3 = nn.Conv2d(bottle_planes, planes, - kernel_size=1, bias=False) + self.conv3 = nn.Conv2d(bottle_planes, planes, kernel_size=1, bias=False) self.bn3 = get_norm(cfg.MODEL.DLA.NORM, planes) self.relu = nn.ReLU(inplace=True) self.stride = stride @@ -109,8 +125,13 @@ class Root(nn.Module): def __init__(self, cfg, in_channels, out_channels, kernel_size, residual): super(Root, self).__init__() self.conv = nn.Conv2d( - in_channels, out_channels, kernel_size, - stride=1, bias=False, padding=(kernel_size - 1) // 2) + in_channels, + out_channels, + kernel_size, + stride=1, + bias=False, + padding=(kernel_size - 1) // 2, + ) self.bn = get_norm(cfg.MODEL.DLA.NORM, out_channels) self.relu = nn.ReLU(inplace=True) self.residual = residual @@ -127,31 +148,58 @@ def forward(self, *x): class Tree(nn.Module): - def __init__(self, cfg, levels, block, in_channels, out_channels, stride=1, - level_root=False, root_dim=0, root_kernel_size=1, - dilation=1, root_residual=False): + def __init__( + self, + cfg, + levels, + block, + in_channels, + out_channels, + stride=1, + level_root=False, + root_dim=0, + root_kernel_size=1, + dilation=1, + root_residual=False, + ): super(Tree, self).__init__() if root_dim == 0: root_dim = 2 * out_channels if level_root: root_dim += in_channels if levels == 1: - self.tree1 = block(cfg, in_channels, out_channels, stride, - dilation=dilation) - self.tree2 = block(cfg, out_channels, out_channels, 1, - dilation=dilation) + self.tree1 = block( + cfg, in_channels, out_channels, stride, dilation=dilation + ) + self.tree2 = block(cfg, out_channels, out_channels, 1, dilation=dilation) else: - self.tree1 = Tree(cfg, levels - 1, block, in_channels, out_channels, - stride, root_dim=0, - root_kernel_size=root_kernel_size, - dilation=dilation, root_residual=root_residual) - self.tree2 = Tree(cfg, levels - 1, block, out_channels, out_channels, - root_dim=root_dim + out_channels, - root_kernel_size=root_kernel_size, - dilation=dilation, root_residual=root_residual) + self.tree1 = Tree( + cfg, + levels - 1, + block, + in_channels, + out_channels, + stride, + root_dim=0, + root_kernel_size=root_kernel_size, + dilation=dilation, + root_residual=root_residual, + ) + self.tree2 = Tree( + cfg, + levels - 1, + block, + out_channels, + out_channels, + root_dim=root_dim + out_channels, + root_kernel_size=root_kernel_size, + dilation=dilation, + root_residual=root_residual, + ) if levels == 1: - self.root = Root(cfg, root_dim, out_channels, root_kernel_size, - root_residual) + self.root = Root( + cfg, root_dim, out_channels, root_kernel_size, root_residual + ) self.level_root = level_root self.root_dim = root_dim self.downsample = None @@ -161,9 +209,10 @@ def __init__(self, cfg, levels, block, in_channels, out_channels, stride=1, self.downsample = nn.MaxPool2d(stride, stride=stride) if in_channels != out_channels: self.project = nn.Sequential( - nn.Conv2d(in_channels, out_channels, - kernel_size=1, stride=1, bias=False), - get_norm(cfg.MODEL.DLA.NORM, out_channels) + nn.Conv2d( + in_channels, out_channels, kernel_size=1, stride=1, bias=False + ), + get_norm(cfg.MODEL.DLA.NORM, out_channels), ) def forward(self, x, residual=None, children=None): @@ -191,53 +240,94 @@ def __init__(self, cfg, levels, channels, block=BasicBlock, residual_root=False) self.channels = channels self._out_features = ["dla{}".format(i) for i in range(6)] - self._out_feature_channels = {k: channels[i] for i, k in enumerate(self._out_features)} - self._out_feature_strides = {k: 2 ** i for i, k in enumerate(self._out_features)} + self._out_feature_channels = { + k: channels[i] for i, k in enumerate(self._out_features) + } + self._out_feature_strides = {k: 2**i for i, k in enumerate(self._out_features)} self.base_layer = nn.Sequential( - nn.Conv2d(3, channels[0], kernel_size=7, stride=1, - padding=3, bias=False), + nn.Conv2d(3, channels[0], kernel_size=7, stride=1, padding=3, bias=False), get_norm(cfg.MODEL.DLA.NORM, channels[0]), - nn.ReLU(inplace=True)) - self.level0 = self._make_conv_level( - channels[0], channels[0], levels[0]) + nn.ReLU(inplace=True), + ) + self.level0 = self._make_conv_level(channels[0], channels[0], levels[0]) self.level1 = self._make_conv_level( - channels[0], channels[1], levels[1], stride=2) - self.level2 = Tree(cfg, levels[2], block, channels[1], channels[2], 2, - level_root=False, - root_residual=residual_root) - self.level3 = Tree(cfg, levels[3], block, channels[2], channels[3], 2, - level_root=True, root_residual=residual_root) - self.level4 = Tree(cfg, levels[4], block, channels[3], channels[4], 2, - level_root=True, root_residual=residual_root) - self.level5 = Tree(cfg, levels[5], block, channels[4], channels[5], 2, - level_root=True, root_residual=residual_root) + channels[0], channels[1], levels[1], stride=2 + ) + self.level2 = Tree( + cfg, + levels[2], + block, + channels[1], + channels[2], + 2, + level_root=False, + root_residual=residual_root, + ) + self.level3 = Tree( + cfg, + levels[3], + block, + channels[2], + channels[3], + 2, + level_root=True, + root_residual=residual_root, + ) + self.level4 = Tree( + cfg, + levels[4], + block, + channels[3], + channels[4], + 2, + level_root=True, + root_residual=residual_root, + ) + self.level5 = Tree( + cfg, + levels[5], + block, + channels[4], + channels[5], + 2, + level_root=True, + root_residual=residual_root, + ) for m in self.modules(): if isinstance(m, nn.Conv2d): n = m.kernel_size[0] * m.kernel_size[1] * m.out_channels - m.weight.data.normal_(0, math.sqrt(2. / n)) + m.weight.data.normal_(0, math.sqrt(2.0 / n)) - self.load_pretrained_model( - data='imagenet', name='dla34', hash='ba72cf86') + self.load_pretrained_model(data="imagenet", name="dla34", hash="ba72cf86") def load_pretrained_model(self, data, name, hash): model_url = get_model_url(data, name, hash) model_weights = model_zoo.load_url(model_url) - del model_weights['fc.weight'] - del model_weights['fc.bias'] - print('Loading pretrained DLA!') + del model_weights["fc.weight"] + del model_weights["fc.bias"] + print("Loading pretrained DLA!") self.load_state_dict(model_weights, strict=True) def _make_conv_level(self, inplanes, planes, convs, stride=1, dilation=1): modules = [] for i in range(convs): - modules.extend([ - nn.Conv2d(inplanes, planes, kernel_size=3, - stride=stride if i == 0 else 1, - padding=dilation, bias=False, dilation=dilation), - get_norm(self.cfg.MODEL.DLA.NORM, planes), - nn.ReLU(inplace=True)]) + modules.extend( + [ + nn.Conv2d( + inplanes, + planes, + kernel_size=3, + stride=stride if i == 0 else 1, + padding=dilation, + bias=False, + dilation=dilation, + ), + get_norm(self.cfg.MODEL.DLA.NORM, planes), + nn.ReLU(inplace=True), + ] + ) inplanes = planes return nn.Sequential(*modules) @@ -245,20 +335,19 @@ def forward(self, x): y = {} x = self.base_layer(x) for i in range(6): - name = 'level{}'.format(i) + name = "level{}".format(i) x = getattr(self, name)(x) - y['dla{}'.format(i)] = x + y["dla{}".format(i)] = x return y def fill_up_weights(up): w = up.weight.data f = math.ceil(w.size(2) / 2) - c = (2 * f - 1 - f % 2) / (2. * f) + c = (2 * f - 1 - f % 2) / (2.0 * f) for i in range(w.size(2)): for j in range(w.size(3)): - w[0, 0, i, j] = \ - (1 - math.fabs(i / f - c)) * (1 - math.fabs(j / f - c)) + w[0, 0, i, j] = (1 - math.fabs(i / f - c)) * (1 - math.fabs(j / f - c)) for c in range(1, w.size(0)): w[c, 0, :, :] = w[0, 0, :, :] @@ -269,8 +358,9 @@ def __init__(self, chi, cho, norm): self.conv = nn.Sequential( nn.Conv2d(chi, cho, kernel_size=1, stride=1, bias=False), get_norm(norm, cho), - nn.ReLU(inplace=True)) - + nn.ReLU(inplace=True), + ) + def forward(self, x): return self.conv(x) @@ -278,16 +368,17 @@ def forward(self, x): class DeformConv(nn.Module): def __init__(self, chi, cho, norm): super(DeformConv, self).__init__() - self.actf = nn.Sequential( - get_norm(norm, cho), - nn.ReLU(inplace=True) - ) - self.offset = Conv2d( - chi, 27, kernel_size=3, stride=1, - padding=1, dilation=1) + self.actf = nn.Sequential(get_norm(norm, cho), nn.ReLU(inplace=True)) + self.offset = Conv2d(chi, 27, kernel_size=3, stride=1, padding=1, dilation=1) self.conv = ModulatedDeformConv( - chi, cho, kernel_size=3, stride=1, padding=1, - dilation=1, deformable_groups=1) + chi, + cho, + kernel_size=3, + stride=1, + padding=1, + dilation=1, + deformable_groups=1, + ) nn.init.constant_(self.offset.weight, 0) nn.init.constant_(self.offset.bias, 0) @@ -302,58 +393,65 @@ def forward(self, x): class IDAUp(nn.Module): - def __init__(self, o, channels, up_f, norm='FrozenBN', node_type=Conv): + def __init__(self, o, channels, up_f, norm="FrozenBN", node_type=Conv): super(IDAUp, self).__init__() for i in range(1, len(channels)): c = channels[i] - f = int(up_f[i]) + f = int(up_f[i]) proj = node_type(c, o, norm) node = node_type(o, o, norm) - - up = nn.ConvTranspose2d(o, o, f * 2, stride=f, - padding=f // 2, output_padding=0, - groups=o, bias=False) + + up = nn.ConvTranspose2d( + o, + o, + f * 2, + stride=f, + padding=f // 2, + output_padding=0, + groups=o, + bias=False, + ) fill_up_weights(up) - setattr(self, 'proj_' + str(i), proj) - setattr(self, 'up_' + str(i), up) - setattr(self, 'node_' + str(i), node) - - + setattr(self, "proj_" + str(i), proj) + setattr(self, "up_" + str(i), up) + setattr(self, "node_" + str(i), node) + def forward(self, layers, startp, endp): for i in range(startp + 1, endp): - upsample = getattr(self, 'up_' + str(i - startp)) - project = getattr(self, 'proj_' + str(i - startp)) + upsample = getattr(self, "up_" + str(i - startp)) + project = getattr(self, "proj_" + str(i - startp)) layers[i] = upsample(project(layers[i])) - node = getattr(self, 'node_' + str(i - startp)) + node = getattr(self, "node_" + str(i - startp)) layers[i] = node(layers[i] + layers[i - 1]) DLAUP_NODE_MAP = { - 'conv': Conv, - 'dcn': DeformConv, + "conv": Conv, + "dcn": DeformConv, } + class DLAUP(Backbone): - def __init__(self, bottom_up, in_features, norm, dlaup_node='conv'): + def __init__(self, bottom_up, in_features, norm, dlaup_node="conv"): super(DLAUP, self).__init__() assert isinstance(bottom_up, Backbone) self.bottom_up = bottom_up input_shapes = bottom_up.output_shape() in_strides = [input_shapes[f].stride for f in in_features] - in_channels = [input_shapes[f].channels for f in in_features] + in_channels = [input_shapes[f].channels for f in in_features] in_levels = [int(math.log2(input_shapes[f].stride)) for f in in_features] self.in_features = in_features - out_features = ['dlaup{}'.format(l) for l in in_levels] + out_features = ["dlaup{}".format(l) for l in in_levels] self._out_features = out_features self._out_feature_channels = { - 'dlaup{}'.format(l): in_channels[i] for i, l in enumerate(in_levels)} - self._out_feature_strides = { - 'dlaup{}'.format(l): 2 ** l for l in in_levels} + "dlaup{}".format(l): in_channels[i] for i, l in enumerate(in_levels) + } + self._out_feature_strides = {"dlaup{}".format(l): 2**l for l in in_levels} - print('self._out_features', self._out_features) - print('self._out_feature_channels', self._out_feature_channels) - print('self._out_feature_strides', self._out_feature_strides) + print("self._out_features", self._out_features) + print("self._out_feature_channels", self._out_feature_channels) + print("self._out_feature_strides", self._out_feature_strides) self._size_divisibility = 32 node_type = DLAUP_NODE_MAP[dlaup_node] @@ -361,16 +459,22 @@ def __init__(self, bottom_up, in_features, norm, dlaup_node='conv'): self.startp = int(math.log2(in_strides[0])) self.channels = in_channels channels = list(in_channels) - scales = np.array([2 ** i for i in range(len(out_features))], dtype=int) + scales = np.array([2**i for i in range(len(out_features))], dtype=int) for i in range(len(channels) - 1): j = -i - 2 - setattr(self, 'ida_{}'.format(i), - IDAUp(channels[j], in_channels[j:], - scales[j:] // scales[j], - norm=norm, - node_type=node_type)) - scales[j + 1:] = scales[j] - in_channels[j + 1:] = [channels[j] for _ in channels[j + 1:]] + setattr( + self, + "ida_{}".format(i), + IDAUp( + channels[j], + in_channels[j:], + scales[j:] // scales[j], + norm=norm, + node_type=node_type, + ), + ) + scales[j + 1 :] = scales[j] + in_channels[j + 1 :] = [channels[j] for _ in channels[j + 1 :]] @property def size_divisibility(self): @@ -379,9 +483,9 @@ def size_divisibility(self): def forward(self, x): bottom_up_features = self.bottom_up(x) layers = [bottom_up_features[f] for f in self.in_features] - out = [layers[-1]] # start with 32 + out = [layers[-1]] # start with 32 for i in range(len(layers) - 1): - ida = getattr(self, 'ida_{}'.format(i)) + ida = getattr(self, "ida_{}".format(i)) ida(layers, len(layers) - i - 2, len(layers)) out.insert(0, layers[-1]) ret = {} @@ -392,9 +496,7 @@ def forward(self, x): def dla34(cfg, pretrained=None): # DLA-34 - model = DLA(cfg, [1, 1, 1, 2, 2, 1], - [16, 32, 64, 128, 256, 512], - block=BasicBlock) + model = DLA(cfg, [1, 1, 1, 2, 2, 1], [16, 32, 64, 128, 256, 512], block=BasicBlock) return model @@ -429,7 +531,7 @@ def build_dla_fpn3_backbone(cfg, input_shape: ShapeSpec): """ depth_to_creator = {"dla34": dla34} - bottom_up = depth_to_creator['dla{}'.format(cfg.MODEL.DLA.NUM_LAYERS)](cfg) + bottom_up = depth_to_creator["dla{}".format(cfg.MODEL.DLA.NUM_LAYERS)](cfg) in_features = cfg.MODEL.FPN.IN_FEATURES out_channels = cfg.MODEL.FPN.OUT_CHANNELS @@ -444,6 +546,7 @@ def build_dla_fpn3_backbone(cfg, input_shape: ShapeSpec): return backbone + @BACKBONE_REGISTRY.register() def build_dla_fpn5_backbone(cfg, input_shape: ShapeSpec): """ @@ -454,10 +557,10 @@ def build_dla_fpn5_backbone(cfg, input_shape: ShapeSpec): """ depth_to_creator = {"dla34": dla34} - bottom_up = depth_to_creator['dla{}'.format(cfg.MODEL.DLA.NUM_LAYERS)](cfg) + bottom_up = depth_to_creator["dla{}".format(cfg.MODEL.DLA.NUM_LAYERS)](cfg) in_features = cfg.MODEL.FPN.IN_FEATURES out_channels = cfg.MODEL.FPN.OUT_CHANNELS - in_channels_top = bottom_up.output_shape()['dla5'].channels + in_channels_top = bottom_up.output_shape()["dla5"].channels backbone = FPN( bottom_up=bottom_up, @@ -481,7 +584,7 @@ def build_dlaup_backbone(cfg, input_shape: ShapeSpec): """ depth_to_creator = {"dla34": dla34} - bottom_up = depth_to_creator['dla{}'.format(cfg.MODEL.DLA.NUM_LAYERS)](cfg) + bottom_up = depth_to_creator["dla{}".format(cfg.MODEL.DLA.NUM_LAYERS)](cfg) backbone = DLAUP( bottom_up=bottom_up, diff --git a/dimos/models/Detic/third_party/CenterNet2/centernet/modeling/backbone/fpn_p5.py b/dimos/models/Detic/third_party/CenterNet2/centernet/modeling/backbone/fpn_p5.py index e991f9c7be..228b822bbf 100644 --- a/dimos/models/Detic/third_party/CenterNet2/centernet/modeling/backbone/fpn_p5.py +++ b/dimos/models/Detic/third_party/CenterNet2/centernet/modeling/backbone/fpn_p5.py @@ -1,13 +1,11 @@ # Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved -import math import fvcore.nn.weight_init as weight_init import torch.nn.functional as F from torch import nn -from detectron2.layers import Conv2d, ShapeSpec, get_norm +from detectron2.layers import ShapeSpec -from detectron2.modeling.backbone import Backbone -from detectron2.modeling.backbone.fpn import FPN +from detectron2.modeling.backbone.fpn import FPN from detectron2.modeling.backbone.build import BACKBONE_REGISTRY from detectron2.modeling.backbone.resnet import build_resnet_backbone @@ -55,6 +53,7 @@ def build_p67_resnet_fpn_backbone(cfg, input_shape: ShapeSpec): ) return backbone + @BACKBONE_REGISTRY.register() def build_p35_resnet_fpn_backbone(cfg, input_shape: ShapeSpec): """ @@ -75,4 +74,4 @@ def build_p35_resnet_fpn_backbone(cfg, input_shape: ShapeSpec): top_block=None, fuse_type=cfg.MODEL.FPN.FUSE_TYPE, ) - return backbone \ No newline at end of file + return backbone diff --git a/dimos/models/Detic/third_party/CenterNet2/centernet/modeling/backbone/res2net.py b/dimos/models/Detic/third_party/CenterNet2/centernet/modeling/backbone/res2net.py index 1d0d40adb4..83ba0f4bae 100644 --- a/dimos/models/Detic/third_party/CenterNet2/centernet/modeling/backbone/res2net.py +++ b/dimos/models/Detic/third_party/CenterNet2/centernet/modeling/backbone/res2net.py @@ -17,7 +17,7 @@ ) from detectron2.modeling.backbone import Backbone -from detectron2.modeling.backbone.fpn import FPN +from detectron2.modeling.backbone.fpn import FPN from detectron2.modeling.backbone.build import BACKBONE_REGISTRY from .fpn_p5 import LastLevelP6P7_P5 from .bifpn import BiFPN @@ -124,7 +124,7 @@ def __init__( norm="BN", stride_in_1x1=False, dilation=1, - basewidth=26, + basewidth=26, scale=4, ): """ @@ -142,8 +142,12 @@ def __init__( if in_channels != out_channels: self.shortcut = nn.Sequential( - nn.AvgPool2d(kernel_size=stride, stride=stride, - ceil_mode=True, count_include_pad=False), + nn.AvgPool2d( + kernel_size=stride, + stride=stride, + ceil_mode=True, + count_include_pad=False, + ), Conv2d( in_channels, out_channels, @@ -151,7 +155,7 @@ def __init__( stride=1, bias=False, norm=get_norm(norm, out_channels), - ) + ), ) else: self.shortcut = None @@ -160,7 +164,7 @@ def __init__( # The subsequent fb.torch.resnet and Caffe2 ResNe[X]t implementations have # stride in the 3x3 conv stride_1x1, stride_3x3 = (stride, 1) if stride_in_1x1 else (1, stride) - width = bottleneck_channels//scale + width = bottleneck_channels // scale self.conv1 = Conv2d( in_channels, @@ -171,25 +175,27 @@ def __init__( norm=get_norm(norm, bottleneck_channels), ) if scale == 1: - self.nums = 1 + self.nums = 1 else: - self.nums = scale -1 - if self.in_channels!=self.out_channels and stride_3x3!=2: - self.pool = nn.AvgPool2d(kernel_size=3, stride = stride_3x3, padding=1) + self.nums = scale - 1 + if self.in_channels != self.out_channels and stride_3x3 != 2: + self.pool = nn.AvgPool2d(kernel_size=3, stride=stride_3x3, padding=1) convs = [] bns = [] for i in range(self.nums): - convs.append(nn.Conv2d( - width, - width, - kernel_size=3, - stride=stride_3x3, - padding=1 * dilation, - bias=False, - groups=num_groups, - dilation=dilation, - )) + convs.append( + nn.Conv2d( + width, + width, + kernel_size=3, + stride=stride_3x3, + padding=1 * dilation, + bias=False, + groups=num_groups, + dilation=dilation, + ) + ) bns.append(get_norm(norm, width)) self.convs = nn.ModuleList(convs) self.bns = nn.ModuleList(bns) @@ -213,7 +219,7 @@ def __init__( for layer in self.shortcut.modules(): if isinstance(layer, Conv2d): weight_init.c2_msra_fill(layer) - + for layer in self.convs: if layer is not None: # shortcut can be None weight_init.c2_msra_fill(layer) @@ -236,19 +242,19 @@ def forward(self, x): spx = torch.split(out, self.width, 1) for i in range(self.nums): - if i==0 or self.in_channels!=self.out_channels: + if i == 0 or self.in_channels != self.out_channels: sp = spx[i] else: sp = sp + spx[i] sp = self.convs[i](sp) sp = F.relu_(self.bns[i](sp)) - if i==0: + if i == 0: out = sp else: out = torch.cat((out, sp), 1) - if self.scale!=1 and self.stride_3x3==1: + if self.scale != 1 and self.stride_3x3 == 1: out = torch.cat((out, spx[self.nums]), 1) - elif self.scale != 1 and self.stride_3x3==2: + elif self.scale != 1 and self.stride_3x3 == 2: out = torch.cat((out, self.pool(spx[self.nums])), 1) out = self.conv3(out) @@ -282,7 +288,7 @@ def __init__( dilation=1, deform_modulated=False, deform_num_groups=1, - basewidth=26, + basewidth=26, scale=4, ): super().__init__(in_channels, out_channels, stride) @@ -298,8 +304,12 @@ def __init__( # norm=get_norm(norm, out_channels), # ) self.shortcut = nn.Sequential( - nn.AvgPool2d(kernel_size=stride, stride=stride, - ceil_mode=True, count_include_pad=False), + nn.AvgPool2d( + kernel_size=stride, + stride=stride, + ceil_mode=True, + count_include_pad=False, + ), Conv2d( in_channels, out_channels, @@ -307,13 +317,13 @@ def __init__( stride=1, bias=False, norm=get_norm(norm, out_channels), - ) + ), ) else: self.shortcut = None stride_1x1, stride_3x3 = (stride, 1) if stride_in_1x1 else (1, stride) - width = bottleneck_channels//scale + width = bottleneck_channels // scale self.conv1 = Conv2d( in_channels, @@ -325,11 +335,11 @@ def __init__( ) if scale == 1: - self.nums = 1 + self.nums = 1 else: - self.nums = scale -1 - if self.in_channels!=self.out_channels and stride_3x3!=2: - self.pool = nn.AvgPool2d(kernel_size=3, stride = stride_3x3, padding=1) + self.nums = scale - 1 + if self.in_channels != self.out_channels and stride_3x3 != 2: + self.pool = nn.AvgPool2d(kernel_size=3, stride=stride_3x3, padding=1) if deform_modulated: deform_conv_op = ModulatedDeformConv @@ -364,27 +374,31 @@ def __init__( convs = [] bns = [] for i in range(self.nums): - conv2_offsets.append(Conv2d( - width, - offset_channels * deform_num_groups, - kernel_size=3, - stride=stride_3x3, - padding=1 * dilation, - bias=False, - groups=num_groups, - dilation=dilation, - )) - convs.append(deform_conv_op( - width, - width, - kernel_size=3, - stride=stride_3x3, - padding=1 * dilation, - bias=False, - groups=num_groups, - dilation=dilation, - deformable_groups=deform_num_groups, - )) + conv2_offsets.append( + Conv2d( + width, + offset_channels * deform_num_groups, + kernel_size=3, + stride=stride_3x3, + padding=1 * dilation, + bias=False, + groups=num_groups, + dilation=dilation, + ) + ) + convs.append( + deform_conv_op( + width, + width, + kernel_size=3, + stride=stride_3x3, + padding=1 * dilation, + bias=False, + groups=num_groups, + dilation=dilation, + deformable_groups=deform_num_groups, + ) + ) bns.append(get_norm(norm, width)) self.conv2_offsets = nn.ModuleList(conv2_offsets) self.convs = nn.ModuleList(convs) @@ -415,7 +429,7 @@ def __init__( for layer in self.shortcut.modules(): if isinstance(layer, Conv2d): weight_init.c2_msra_fill(layer) - + for layer in self.convs: if layer is not None: # shortcut can be None weight_init.c2_msra_fill(layer) @@ -443,11 +457,11 @@ def forward(self, x): spx = torch.split(out, self.width, 1) for i in range(self.nums): - if i==0 or self.in_channels!=self.out_channels: + if i == 0 or self.in_channels != self.out_channels: sp = spx[i].contiguous() else: sp = sp + spx[i].contiguous() - + # sp = self.convs[i](sp) if self.deform_modulated: offset_mask = self.conv2_offsets[i](sp) @@ -459,13 +473,13 @@ def forward(self, x): offset = self.conv2_offsets[i](sp) sp = self.convs[i](sp, offset) sp = F.relu_(self.bns[i](sp)) - if i==0: + if i == 0: out = sp else: out = torch.cat((out, sp), 1) - if self.scale!=1 and self.stride_3x3==1: + if self.scale != 1 and self.stride_3x3 == 1: out = torch.cat((out, spx[self.nums]), 1) - elif self.scale != 1 and self.stride_3x3==2: + elif self.scale != 1 and self.stride_3x3 == 2: out = torch.cat((out, self.pool(spx[self.nums])), 1) out = self.conv3(out) @@ -480,7 +494,9 @@ def forward(self, x): return out -def make_stage(block_class, num_blocks, first_stride, *, in_channels, out_channels, **kwargs): +def make_stage( + block_class, num_blocks, first_stride, *, in_channels, out_channels, **kwargs +): """ Create a list of blocks just like those in a ResNet stage. Args: @@ -529,7 +545,7 @@ def __init__(self, in_channels=3, out_channels=64, norm="BN"): stride=2, padding=1, bias=False, - ), + ), get_norm(norm, 32), nn.ReLU(inplace=True), Conv2d( @@ -539,7 +555,7 @@ def __init__(self, in_channels=3, out_channels=64, norm="BN"): stride=1, padding=1, bias=False, - ), + ), get_norm(norm, 32), nn.ReLU(inplace=True), Conv2d( @@ -549,7 +565,7 @@ def __init__(self, in_channels=3, out_channels=64, norm="BN"): stride=1, padding=1, bias=False, - ), + ), ) self.bn1 = get_norm(norm, out_channels) @@ -619,7 +635,9 @@ def __init__(self, stem, stages, num_classes=None, out_features=None): assert len(self._out_features) children = [x[0] for x in self.named_children()] for out_feature in self._out_features: - assert out_feature in children, "Available children: {}".format(", ".join(children)) + assert out_feature in children, "Available children: {}".format( + ", ".join(children) + ) def forward(self, x): outputs = {} @@ -641,7 +659,8 @@ def forward(self, x): def output_shape(self): return { name: ShapeSpec( - channels=self._out_feature_channels[name], stride=self._out_feature_strides[name] + channels=self._out_feature_channels[name], + stride=self._out_feature_strides[name], ) for name in self._out_features } @@ -708,18 +727,24 @@ def build_res2net_backbone(cfg, input_shape): }[depth] if depth in [18, 34]: - assert out_channels == 64, "Must set MODEL.RESNETS.RES2_OUT_CHANNELS = 64 for R18/R34" - assert not any( - deform_on_per_stage - ), "MODEL.RESNETS.DEFORM_ON_PER_STAGE unsupported for R18/R34" - assert res5_dilation == 1, "Must set MODEL.RESNETS.RES5_DILATION = 1 for R18/R34" + assert out_channels == 64, ( + "Must set MODEL.RESNETS.RES2_OUT_CHANNELS = 64 for R18/R34" + ) + assert not any(deform_on_per_stage), ( + "MODEL.RESNETS.DEFORM_ON_PER_STAGE unsupported for R18/R34" + ) + assert res5_dilation == 1, ( + "Must set MODEL.RESNETS.RES5_DILATION = 1 for R18/R34" + ) assert num_groups == 1, "Must set MODEL.RESNETS.NUM_GROUPS = 1 for R18/R34" stages = [] # Avoid creating variables without gradients # It consumes extra memory and may cause allreduce to fail - out_stage_idx = [{"res2": 2, "res3": 3, "res4": 4, "res5": 5}[f] for f in out_features] + out_stage_idx = [ + {"res2": 2, "res3": 3, "res4": 4, "res5": 5}[f] for f in out_features + ] max_stage_idx = max(out_stage_idx) for idx, stage_idx in enumerate(range(2, max_stage_idx + 1)): dilation = res5_dilation if stage_idx == 5 else 1 @@ -799,4 +824,4 @@ def build_res2net_bifpn_backbone(cfg, input_shape: ShapeSpec): num_bifpn=cfg.MODEL.BIFPN.NUM_BIFPN, separable_conv=cfg.MODEL.BIFPN.SEPARABLE_CONV, ) - return backbone \ No newline at end of file + return backbone diff --git a/dimos/models/Detic/third_party/CenterNet2/centernet/modeling/debug.py b/dimos/models/Detic/third_party/CenterNet2/centernet/modeling/debug.py index 0a4437fb5a..66b385c5a4 100644 --- a/dimos/models/Detic/third_party/CenterNet2/centernet/modeling/debug.py +++ b/dimos/models/Detic/third_party/CenterNet2/centernet/modeling/debug.py @@ -3,24 +3,34 @@ import torch import torch.nn.functional as F -COLORS = ((np.random.rand(1300, 3) * 0.4 + 0.6) * 255).astype( - np.uint8).reshape(1300, 1, 1, 3) +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 + 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 - 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 + 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) @@ -30,10 +40,11 @@ def _blend_image_heatmaps(image, color_maps, a=0.7): 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 @@ -42,11 +53,13 @@ def _decompose_level(x, shapes_per_level, N): 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)) + 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] @@ -54,8 +67,7 @@ def _imagelist_to_tensor(images): 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 = [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 @@ -70,21 +82,28 @@ def _ind2il(ind, shapes_per_level, N): 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, + 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) + """ + 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] + 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)) @@ -94,30 +113,35 @@ def debug_train( 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_map = _get_color_image(gt_hms[l][i].detach().cpu().numpy()) color_maps.append(color_map) - cv2.imshow('gthm_{}'.format(l), 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, + blend, (int(bbox[0]), int(bbox[1])), (int(bbox[2]), int(bbox[3])), - (0, 0, 255), 3, cv2.LINE_AA) - + (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) - + 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: @@ -125,28 +149,42 @@ def debug_train( 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])] + bbox = [ + (loc[0] - ltrb[0]), + (loc[1] - ltrb[1]), + (loc[0] + ltrb[2]), + (loc[1] + ltrb[3]), + ] cv2.rectangle( - blend, + blend, (int(bbox[0]), int(bbox[1])), (int(bbox[2]), int(bbox[3])), - (255, 0, 0), 1, cv2.LINE_AA) + (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.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, + 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) @@ -157,73 +195,104 @@ def debug_test( 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]) + 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]) + 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_map = _get_color_image(logits_pred[l][i].detach().cpu().numpy()) color_maps.append(color_map) - cv2.imshow('predhm_{}'.format(l), 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] + 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 = ( + 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 + 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) + 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]) + 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) + (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) - + 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_) + 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.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): + +def debug_second_stage( + images, + instances, + proposals=None, + vis_thresh=0.3, + save_debug=False, + debug_show_name=False, +): images = _imagelist_to_tensor(images) if debug_show_name: from detectron2.data.datasets.lvis_v1_categories import LVIS_CATEGORIES - cat2name = [x['name'] for x in LVIS_CATEGORIES] + + cat2name = [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 instances[i].has('gt_boxes'): + image = ( + images[i].detach().cpu().numpy().transpose(1, 2, 0).astype(np.uint8).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() @@ -237,29 +306,47 @@ def debug_second_stage(images, instances, proposals=None, vis_thresh=0.3, cl = COLORS[cats[j], 0, 0] cl = (int(cl[0]), int(cl[1]), int(cl[2])) cv2.rectangle( - image, + image, (int(bbox[0]), int(bbox[1])), (int(bbox[2]), int(bbox[3])), - cl, 2, cv2.LINE_AA) + cl, + 2, + cv2.LINE_AA, + ) if debug_show_name: cat = cats[j] - txt = '{}{:.1f}'.format( - cat2name[cat] if cat > 0 else '', - scores[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) + (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) + 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() + proposal_image = ( + images[i] + .detach() + .cpu() + .numpy() + .transpose(1, 2, 0) + .astype(np.uint8) + .copy() + ) bboxes = proposals[i].proposal_boxes.tensor.cpu().numpy() - if proposals[i].has('scores'): + if proposals[i].has("scores"): scores = proposals[i].scores.cpu().numpy() else: scores = proposals[i].objectness_logits.sigmoid().cpu().numpy() @@ -268,16 +355,19 @@ def debug_second_stage(images, instances, proposals=None, vis_thresh=0.3, bbox = bboxes[j] cl = (209, 159, 83) cv2.rectangle( - proposal_image, + proposal_image, (int(bbox[0]), int(bbox[1])), (int(bbox[2]), int(bbox[3])), - cl, 2, cv2.LINE_AA) - - cv2.imshow('image', image) + cl, + 2, + cv2.LINE_AA, + ) + + cv2.imshow("image", image) if proposals is not None: - cv2.imshow('proposals', proposal_image) + cv2.imshow("proposals", proposal_image) if save_debug: global cnt cnt += 1 - cv2.imwrite('output/save_debug/{}.jpg'.format(cnt), proposal_image) - cv2.waitKey() \ No newline at end of file + cv2.imwrite("output/save_debug/{}.jpg".format(cnt), proposal_image) + cv2.waitKey() diff --git a/dimos/models/Detic/third_party/CenterNet2/centernet/modeling/dense_heads/centernet.py b/dimos/models/Detic/third_party/CenterNet2/centernet/modeling/dense_heads/centernet.py index aef02942ab..4d67fd6d33 100644 --- a/dimos/models/Detic/third_party/CenterNet2/centernet/modeling/dense_heads/centernet.py +++ b/dimos/models/Detic/third_party/CenterNet2/centernet/modeling/dense_heads/centernet.py @@ -1,17 +1,9 @@ - -import math -import json -import copy -from typing import List, Dict -import numpy as np import torch from torch import nn -from torch.nn import functional as F from detectron2.modeling.proposal_generator.build import PROPOSAL_GENERATOR_REGISTRY -from detectron2.layers import ShapeSpec, cat +from detectron2.layers import cat from detectron2.structures import Instances, Boxes -from detectron2.modeling import detector_postprocess from detectron2.utils.comm import get_world_size from detectron2.config import configurable @@ -27,10 +19,12 @@ INF = 100000000 + @PROPOSAL_GENERATOR_REGISTRY.register() class CenterNet(nn.Module): @configurable - def __init__(self, + def __init__( + self, # input_shape: Dict[str, ShapeSpec], in_channels=256, *, @@ -39,7 +33,7 @@ def __init__(self, strides=(8, 16, 32, 64, 128), score_thresh=0.05, hm_min_overlap=0.8, - loc_loss_type='giou', + loc_loss_type="giou", min_radius=4, hm_focal_alpha=0.25, hm_focal_beta=4, @@ -50,12 +44,12 @@ def __init__(self, only_proposal=False, as_proposal=False, not_nms=False, - pos_weight=1., - neg_weight=1., + pos_weight=1.0, + neg_weight=1.0, sigmoid_clamp=1e-4, - ignore_high_fp=-1., + ignore_high_fp=-1.0, center_nms=False, - sizes_of_interest=[[0,80],[64,160],[128,320],[256,640],[512,10000000]], + sizes_of_interest=[[0, 80], [64, 160], [128, 320], [256, 640], [512, 10000000]], more_pos=False, more_pos_thresh=0.2, more_pos_topk=9, @@ -69,9 +63,9 @@ def __init__(self, not_clamp_box=False, debug=False, vis_thresh=0.5, - pixel_mean=[103.530,116.280,123.675], - pixel_std=[1.0,1.0,1.0], - device='cuda', + pixel_mean=[103.530, 116.280, 123.675], + pixel_std=[1.0, 1.0, 1.0], + device="cuda", centernet_head=None, ): super().__init__() @@ -106,7 +100,7 @@ def __init__(self, self.nms_thresh_test = nms_thresh_test self.no_reduce = no_reduce self.not_clamp_box = not_clamp_box - + self.debug = debug self.vis_thresh = vis_thresh if self.center_nms: @@ -120,128 +114,157 @@ def __init__(self, in_channels=in_channels, num_levels=len(in_features), with_agn_hm=with_agn_hm, - only_proposal=only_proposal) + only_proposal=only_proposal, + ) else: self.centernet_head = centernet_head if self.debug: - pixel_mean = torch.Tensor(pixel_mean).to( - torch.device(device)).view(3, 1, 1) - pixel_std = torch.Tensor(pixel_std).to( - torch.device(device)).view(3, 1, 1) + pixel_mean = torch.Tensor(pixel_mean).to(torch.device(device)).view(3, 1, 1) + pixel_std = torch.Tensor(pixel_std).to(torch.device(device)).view(3, 1, 1) self.denormalizer = lambda x: x * pixel_std + pixel_mean @classmethod def from_config(cls, cfg, input_shape): ret = { # 'input_shape': input_shape, - 'in_channels': input_shape[ - cfg.MODEL.CENTERNET.IN_FEATURES[0]].channels, - 'num_classes': cfg.MODEL.CENTERNET.NUM_CLASSES, - 'in_features': cfg.MODEL.CENTERNET.IN_FEATURES, - 'strides': cfg.MODEL.CENTERNET.FPN_STRIDES, - 'score_thresh': cfg.MODEL.CENTERNET.INFERENCE_TH, - 'loc_loss_type': cfg.MODEL.CENTERNET.LOC_LOSS_TYPE, - 'hm_min_overlap': cfg.MODEL.CENTERNET.HM_MIN_OVERLAP, - 'min_radius': cfg.MODEL.CENTERNET.MIN_RADIUS, - 'hm_focal_alpha': cfg.MODEL.CENTERNET.HM_FOCAL_ALPHA, - 'hm_focal_beta': cfg.MODEL.CENTERNET.HM_FOCAL_BETA, - 'loss_gamma': cfg.MODEL.CENTERNET.LOSS_GAMMA, - 'reg_weight': cfg.MODEL.CENTERNET.REG_WEIGHT, - 'not_norm_reg': cfg.MODEL.CENTERNET.NOT_NORM_REG, - 'with_agn_hm': cfg.MODEL.CENTERNET.WITH_AGN_HM, - 'only_proposal': cfg.MODEL.CENTERNET.ONLY_PROPOSAL, - 'as_proposal': cfg.MODEL.CENTERNET.AS_PROPOSAL, - 'not_nms': cfg.MODEL.CENTERNET.NOT_NMS, - 'pos_weight': cfg.MODEL.CENTERNET.POS_WEIGHT, - 'neg_weight': cfg.MODEL.CENTERNET.NEG_WEIGHT, - 'sigmoid_clamp': cfg.MODEL.CENTERNET.SIGMOID_CLAMP, - 'ignore_high_fp': cfg.MODEL.CENTERNET.IGNORE_HIGH_FP, - 'center_nms': cfg.MODEL.CENTERNET.CENTER_NMS, - 'sizes_of_interest': cfg.MODEL.CENTERNET.SOI, - 'more_pos': cfg.MODEL.CENTERNET.MORE_POS, - 'more_pos_thresh': cfg.MODEL.CENTERNET.MORE_POS_THRESH, - 'more_pos_topk': cfg.MODEL.CENTERNET.MORE_POS_TOPK, - 'pre_nms_topk_train': cfg.MODEL.CENTERNET.PRE_NMS_TOPK_TRAIN, - 'pre_nms_topk_test': cfg.MODEL.CENTERNET.PRE_NMS_TOPK_TEST, - 'post_nms_topk_train': cfg.MODEL.CENTERNET.POST_NMS_TOPK_TRAIN, - 'post_nms_topk_test': cfg.MODEL.CENTERNET.POST_NMS_TOPK_TEST, - 'nms_thresh_train': cfg.MODEL.CENTERNET.NMS_TH_TRAIN, - 'nms_thresh_test': cfg.MODEL.CENTERNET.NMS_TH_TEST, - 'no_reduce': cfg.MODEL.CENTERNET.NO_REDUCE, - 'not_clamp_box': cfg.INPUT.NOT_CLAMP_BOX, - 'debug': cfg.DEBUG, - 'vis_thresh': cfg.VIS_THRESH, - 'pixel_mean': cfg.MODEL.PIXEL_MEAN, - 'pixel_std': cfg.MODEL.PIXEL_STD, - 'device': cfg.MODEL.DEVICE, - 'centernet_head': CenterNetHead( - cfg, [input_shape[f] for f in cfg.MODEL.CENTERNET.IN_FEATURES]), + "in_channels": input_shape[cfg.MODEL.CENTERNET.IN_FEATURES[0]].channels, + "num_classes": cfg.MODEL.CENTERNET.NUM_CLASSES, + "in_features": cfg.MODEL.CENTERNET.IN_FEATURES, + "strides": cfg.MODEL.CENTERNET.FPN_STRIDES, + "score_thresh": cfg.MODEL.CENTERNET.INFERENCE_TH, + "loc_loss_type": cfg.MODEL.CENTERNET.LOC_LOSS_TYPE, + "hm_min_overlap": cfg.MODEL.CENTERNET.HM_MIN_OVERLAP, + "min_radius": cfg.MODEL.CENTERNET.MIN_RADIUS, + "hm_focal_alpha": cfg.MODEL.CENTERNET.HM_FOCAL_ALPHA, + "hm_focal_beta": cfg.MODEL.CENTERNET.HM_FOCAL_BETA, + "loss_gamma": cfg.MODEL.CENTERNET.LOSS_GAMMA, + "reg_weight": cfg.MODEL.CENTERNET.REG_WEIGHT, + "not_norm_reg": cfg.MODEL.CENTERNET.NOT_NORM_REG, + "with_agn_hm": cfg.MODEL.CENTERNET.WITH_AGN_HM, + "only_proposal": cfg.MODEL.CENTERNET.ONLY_PROPOSAL, + "as_proposal": cfg.MODEL.CENTERNET.AS_PROPOSAL, + "not_nms": cfg.MODEL.CENTERNET.NOT_NMS, + "pos_weight": cfg.MODEL.CENTERNET.POS_WEIGHT, + "neg_weight": cfg.MODEL.CENTERNET.NEG_WEIGHT, + "sigmoid_clamp": cfg.MODEL.CENTERNET.SIGMOID_CLAMP, + "ignore_high_fp": cfg.MODEL.CENTERNET.IGNORE_HIGH_FP, + "center_nms": cfg.MODEL.CENTERNET.CENTER_NMS, + "sizes_of_interest": cfg.MODEL.CENTERNET.SOI, + "more_pos": cfg.MODEL.CENTERNET.MORE_POS, + "more_pos_thresh": cfg.MODEL.CENTERNET.MORE_POS_THRESH, + "more_pos_topk": cfg.MODEL.CENTERNET.MORE_POS_TOPK, + "pre_nms_topk_train": cfg.MODEL.CENTERNET.PRE_NMS_TOPK_TRAIN, + "pre_nms_topk_test": cfg.MODEL.CENTERNET.PRE_NMS_TOPK_TEST, + "post_nms_topk_train": cfg.MODEL.CENTERNET.POST_NMS_TOPK_TRAIN, + "post_nms_topk_test": cfg.MODEL.CENTERNET.POST_NMS_TOPK_TEST, + "nms_thresh_train": cfg.MODEL.CENTERNET.NMS_TH_TRAIN, + "nms_thresh_test": cfg.MODEL.CENTERNET.NMS_TH_TEST, + "no_reduce": cfg.MODEL.CENTERNET.NO_REDUCE, + "not_clamp_box": cfg.INPUT.NOT_CLAMP_BOX, + "debug": cfg.DEBUG, + "vis_thresh": cfg.VIS_THRESH, + "pixel_mean": cfg.MODEL.PIXEL_MEAN, + "pixel_std": cfg.MODEL.PIXEL_STD, + "device": cfg.MODEL.DEVICE, + "centernet_head": CenterNetHead( + cfg, [input_shape[f] for f in cfg.MODEL.CENTERNET.IN_FEATURES] + ), } return ret - def forward(self, images, features_dict, gt_instances): features = [features_dict[f] for f in self.in_features] - clss_per_level, reg_pred_per_level, agn_hm_pred_per_level = \ - self.centernet_head(features) + clss_per_level, reg_pred_per_level, agn_hm_pred_per_level = self.centernet_head( + features + ) grids = self.compute_grids(features) shapes_per_level = grids[0].new_tensor( - [(x.shape[2], x.shape[3]) for x in reg_pred_per_level]) - + [(x.shape[2], x.shape[3]) for x in reg_pred_per_level] + ) + if not self.training: return self.inference( - images, clss_per_level, reg_pred_per_level, - agn_hm_pred_per_level, grids) + images, clss_per_level, reg_pred_per_level, agn_hm_pred_per_level, grids + ) else: - pos_inds, labels, reg_targets, flattened_hms = \ - self._get_ground_truth( - grids, shapes_per_level, gt_instances) + pos_inds, labels, reg_targets, flattened_hms = self._get_ground_truth( + grids, shapes_per_level, gt_instances + ) # logits_pred: M x F, reg_pred: M x 4, agn_hm_pred: M logits_pred, reg_pred, agn_hm_pred = self._flatten_outputs( - clss_per_level, reg_pred_per_level, agn_hm_pred_per_level) + clss_per_level, reg_pred_per_level, agn_hm_pred_per_level + ) if self.more_pos: # add more pixels as positive if \ # 1. they are within the center3x3 region of an object # 2. their regression losses are small (= 0).squeeze(1) reg_pred = reg_pred[reg_inds] reg_targets_pos = reg_targets[reg_inds] reg_weight_map = flattened_hms.max(dim=1)[0] reg_weight_map = reg_weight_map[reg_inds] - reg_weight_map = reg_weight_map * 0 + 1 \ - if self.not_norm_reg else reg_weight_map + reg_weight_map = reg_weight_map * 0 + 1 if self.not_norm_reg else reg_weight_map if self.no_reduce: reg_norm = max(reg_weight_map.sum(), 1) else: reg_norm = max(reduce_sum(reg_weight_map.sum()).item() / num_gpus, 1) - - reg_loss = self.reg_weight * self.iou_loss( - reg_pred, reg_targets_pos, reg_weight_map, - reduction='sum') / reg_norm - losses['loss_centernet_loc'] = reg_loss + + reg_loss = ( + self.reg_weight + * self.iou_loss(reg_pred, reg_targets_pos, reg_weight_map, reduction="sum") + / reg_norm + ) + losses["loss_centernet_loc"] = reg_loss if self.with_agn_hm: - cat_agn_heatmap = flattened_hms.max(dim=1)[0] # M + cat_agn_heatmap = flattened_hms.max(dim=1)[0] # M agn_pos_loss, agn_neg_loss = binary_heatmap_focal_loss_jit( - agn_hm_pred.float(), cat_agn_heatmap.float(), pos_inds, - alpha=self.hm_focal_alpha, - beta=self.hm_focal_beta, + agn_hm_pred.float(), + cat_agn_heatmap.float(), + pos_inds, + alpha=self.hm_focal_alpha, + beta=self.hm_focal_beta, gamma=self.loss_gamma, sigmoid_clamp=self.sigmoid_clamp, ignore_high_fp=self.ignore_high_fp, ) agn_pos_loss = self.pos_weight * agn_pos_loss / num_pos_avg agn_neg_loss = self.neg_weight * agn_neg_loss / num_pos_avg - losses['loss_centernet_agn_pos'] = agn_pos_loss - losses['loss_centernet_agn_neg'] = agn_neg_loss - + losses["loss_centernet_agn_pos"] = agn_pos_loss + losses["loss_centernet_agn_neg"] = agn_neg_loss + if self.debug: - print('losses', losses) - print('total_num_pos', total_num_pos) + print("losses", losses) + print("total_num_pos", total_num_pos) return losses - def compute_grids(self, features): grids = [] for level, feature in enumerate(features): h, w = feature.size()[-2:] shifts_x = torch.arange( - 0, w * self.strides[level], + 0, + w * self.strides[level], step=self.strides[level], - dtype=torch.float32, device=feature.device) + dtype=torch.float32, + device=feature.device, + ) shifts_y = torch.arange( - 0, h * self.strides[level], + 0, + h * self.strides[level], step=self.strides[level], - dtype=torch.float32, device=feature.device) + dtype=torch.float32, + device=feature.device, + ) shift_y, shift_x = torch.meshgrid(shifts_y, shifts_x) shift_x = shift_x.reshape(-1) shift_y = shift_y.reshape(-1) - grids_per_level = torch.stack((shift_x, shift_y), dim=1) + \ - self.strides[level] // 2 + grids_per_level = ( + torch.stack((shift_x, shift_y), dim=1) + self.strides[level] // 2 + ) grids.append(grids_per_level) return grids - def _get_ground_truth(self, grids, shapes_per_level, gt_instances): - ''' + """ Input: grids: list of tensors [(hl x wl, 2)]_l shapes_per_level: list of tuples L x 2: @@ -352,202 +385,221 @@ def _get_ground_truth(self, grids, shapes_per_level, gt_instances): flattened_hms: M x C or M x 1 N: number of objects in all images M: number of pixels from all FPN levels - ''' + """ # get positive pixel index if not self.more_pos: - pos_inds, labels = self._get_label_inds( - gt_instances, shapes_per_level) + pos_inds, labels = self._get_label_inds(gt_instances, shapes_per_level) else: pos_inds, labels = None, None heatmap_channels = self.num_classes L = len(grids) num_loc_list = [len(loc) for loc in grids] - strides = torch.cat([ - shapes_per_level.new_ones(num_loc_list[l]) * self.strides[l] \ - for l in range(L)]).float() # M - reg_size_ranges = torch.cat([ - shapes_per_level.new_tensor(self.sizes_of_interest[l]).float().view( - 1, 2).expand(num_loc_list[l], 2) for l in range(L)]) # M x 2 - grids = torch.cat(grids, dim=0) # M x 2 + strides = torch.cat( + [ + shapes_per_level.new_ones(num_loc_list[l]) * self.strides[l] + for l in range(L) + ] + ).float() # M + reg_size_ranges = torch.cat( + [ + shapes_per_level.new_tensor(self.sizes_of_interest[l]) + .float() + .view(1, 2) + .expand(num_loc_list[l], 2) + for l in range(L) + ] + ) # M x 2 + grids = torch.cat(grids, dim=0) # M x 2 M = grids.shape[0] reg_targets = [] flattened_hms = [] - for i in range(len(gt_instances)): # images - boxes = gt_instances[i].gt_boxes.tensor # N x 4 - area = gt_instances[i].gt_boxes.area() # N - gt_classes = gt_instances[i].gt_classes # N in [0, self.num_classes] + for i in range(len(gt_instances)): # images + boxes = gt_instances[i].gt_boxes.tensor # N x 4 + area = gt_instances[i].gt_boxes.area() # N + gt_classes = gt_instances[i].gt_classes # N in [0, self.num_classes] N = boxes.shape[0] if N == 0: reg_targets.append(grids.new_zeros((M, 4)) - INF) flattened_hms.append( - grids.new_zeros(( - M, 1 if self.only_proposal else heatmap_channels))) + grids.new_zeros((M, 1 if self.only_proposal else heatmap_channels)) + ) continue - - l = grids[:, 0].view(M, 1) - boxes[:, 0].view(1, N) # M x N - t = grids[:, 1].view(M, 1) - boxes[:, 1].view(1, N) # M x N - r = boxes[:, 2].view(1, N) - grids[:, 0].view(M, 1) # M x N - b = boxes[:, 3].view(1, N) - grids[:, 1].view(M, 1) # M x N - reg_target = torch.stack([l, t, r, b], dim=2) # M x N x 4 - - centers = ((boxes[:, [0, 1]] + boxes[:, [2, 3]]) / 2) # N x 2 - centers_expanded = centers.view(1, N, 2).expand(M, N, 2) # M x N x 2 + + l = grids[:, 0].view(M, 1) - boxes[:, 0].view(1, N) # M x N + t = grids[:, 1].view(M, 1) - boxes[:, 1].view(1, N) # M x N + r = boxes[:, 2].view(1, N) - grids[:, 0].view(M, 1) # M x N + b = boxes[:, 3].view(1, N) - grids[:, 1].view(M, 1) # M x N + reg_target = torch.stack([l, t, r, b], dim=2) # M x N x 4 + + centers = (boxes[:, [0, 1]] + boxes[:, [2, 3]]) / 2 # N x 2 + centers_expanded = centers.view(1, N, 2).expand(M, N, 2) # M x N x 2 strides_expanded = strides.view(M, 1, 1).expand(M, N, 2) - centers_discret = ((centers_expanded / strides_expanded).int() * \ - strides_expanded).float() + strides_expanded / 2 # M x N x 2 - - is_peak = (((grids.view(M, 1, 2).expand(M, N, 2) - \ - centers_discret) ** 2).sum(dim=2) == 0) # M x N - is_in_boxes = reg_target.min(dim=2)[0] > 0 # M x N - is_center3x3 = self.get_center3x3( - grids, centers, strides) & is_in_boxes # M x N + centers_discret = ( + (centers_expanded / strides_expanded).int() * strides_expanded + ).float() + strides_expanded / 2 # M x N x 2 + + is_peak = ( + (grids.view(M, 1, 2).expand(M, N, 2) - centers_discret) ** 2 + ).sum(dim=2) == 0 # M x N + is_in_boxes = reg_target.min(dim=2)[0] > 0 # M x N + is_center3x3 = ( + self.get_center3x3(grids, centers, strides) & is_in_boxes + ) # M x N is_cared_in_the_level = self.assign_reg_fpn( - reg_target, reg_size_ranges) # M x N - reg_mask = is_center3x3 & is_cared_in_the_level # M x N + reg_target, reg_size_ranges + ) # M x N + reg_mask = is_center3x3 & is_cared_in_the_level # M x N - dist2 = ((grids.view(M, 1, 2).expand(M, N, 2) - \ - centers_expanded) ** 2).sum(dim=2) # M x N + dist2 = ((grids.view(M, 1, 2).expand(M, N, 2) - centers_expanded) ** 2).sum( + dim=2 + ) # M x N dist2[is_peak] = 0 - radius2 = self.delta ** 2 * 2 * area # N - radius2 = torch.clamp( - radius2, min=self.min_radius ** 2) - weighted_dist2 = dist2 / radius2.view(1, N).expand(M, N) # M x N + radius2 = self.delta**2 * 2 * area # N + radius2 = torch.clamp(radius2, min=self.min_radius**2) + weighted_dist2 = dist2 / radius2.view(1, N).expand(M, N) # M x N reg_target = self._get_reg_targets( - reg_target, weighted_dist2.clone(), reg_mask, area) # M x 4 + reg_target, weighted_dist2.clone(), reg_mask, area + ) # M x 4 if self.only_proposal: flattened_hm = self._create_agn_heatmaps_from_dist( - weighted_dist2.clone()) # M x 1 + weighted_dist2.clone() + ) # M x 1 else: flattened_hm = self._create_heatmaps_from_dist( - weighted_dist2.clone(), gt_classes, - channels=heatmap_channels) # M x C + weighted_dist2.clone(), gt_classes, channels=heatmap_channels + ) # M x C reg_targets.append(reg_target) flattened_hms.append(flattened_hm) - + # transpose im first training_targets to level first ones reg_targets = _transpose(reg_targets, num_loc_list) flattened_hms = _transpose(flattened_hms, num_loc_list) for l in range(len(reg_targets)): reg_targets[l] = reg_targets[l] / float(self.strides[l]) - reg_targets = cat([x for x in reg_targets], dim=0) # MB x 4 - flattened_hms = cat([x for x in flattened_hms], dim=0) # MB x C - - return pos_inds, labels, reg_targets, flattened_hms + reg_targets = cat([x for x in reg_targets], dim=0) # MB x 4 + flattened_hms = cat([x for x in flattened_hms], dim=0) # MB x C + return pos_inds, labels, reg_targets, flattened_hms def _get_label_inds(self, gt_instances, shapes_per_level): - ''' + """ Inputs: gt_instances: [n_i], sum n_i = N shapes_per_level: L x 2 [(h_l, w_l)]_L Returns: pos_inds: N' labels: N' - ''' + """ pos_inds = [] labels = [] L = len(self.strides) B = len(gt_instances) shapes_per_level = shapes_per_level.long() - loc_per_level = (shapes_per_level[:, 0] * shapes_per_level[:, 1]).long() # L + loc_per_level = (shapes_per_level[:, 0] * shapes_per_level[:, 1]).long() # L level_bases = [] s = 0 for l in range(L): level_bases.append(s) s = s + B * loc_per_level[l] - level_bases = shapes_per_level.new_tensor(level_bases).long() # L - strides_default = shapes_per_level.new_tensor(self.strides).float() # L + level_bases = shapes_per_level.new_tensor(level_bases).long() # L + strides_default = shapes_per_level.new_tensor(self.strides).float() # L for im_i in range(B): targets_per_im = gt_instances[im_i] - bboxes = targets_per_im.gt_boxes.tensor # n x 4 + bboxes = targets_per_im.gt_boxes.tensor # n x 4 n = bboxes.shape[0] - centers = ((bboxes[:, [0, 1]] + bboxes[:, [2, 3]]) / 2) # n x 2 + centers = (bboxes[:, [0, 1]] + bboxes[:, [2, 3]]) / 2 # n x 2 centers = centers.view(n, 1, 2).expand(n, L, 2).contiguous() if self.not_clamp_box: h, w = gt_instances[im_i]._image_size - centers[:, :, 0].clamp_(min=0).clamp_(max=w-1) - centers[:, :, 1].clamp_(min=0).clamp_(max=h-1) + centers[:, :, 0].clamp_(min=0).clamp_(max=w - 1) + centers[:, :, 1].clamp_(min=0).clamp_(max=h - 1) strides = strides_default.view(1, L, 1).expand(n, L, 2) - centers_inds = (centers / strides).long() # n x L x 2 + centers_inds = (centers / strides).long() # n x L x 2 Ws = shapes_per_level[:, 1].view(1, L).expand(n, L) - pos_ind = level_bases.view(1, L).expand(n, L) + \ - im_i * loc_per_level.view(1, L).expand(n, L) + \ - centers_inds[:, :, 1] * Ws + \ - centers_inds[:, :, 0] # n x L + pos_ind = ( + level_bases.view(1, L).expand(n, L) + + im_i * loc_per_level.view(1, L).expand(n, L) + + centers_inds[:, :, 1] * Ws + + centers_inds[:, :, 0] + ) # n x L is_cared_in_the_level = self.assign_fpn_level(bboxes) pos_ind = pos_ind[is_cared_in_the_level].view(-1) - label = targets_per_im.gt_classes.view( - n, 1).expand(n, L)[is_cared_in_the_level].view(-1) + label = ( + targets_per_im.gt_classes.view(n, 1) + .expand(n, L)[is_cared_in_the_level] + .view(-1) + ) - pos_inds.append(pos_ind) # n' - labels.append(label) # n' + pos_inds.append(pos_ind) # n' + labels.append(label) # n' pos_inds = torch.cat(pos_inds, dim=0).long() labels = torch.cat(labels, dim=0) - return pos_inds, labels # N, N - + return pos_inds, labels # N, N def assign_fpn_level(self, boxes): - ''' + """ Inputs: boxes: n x 4 size_ranges: L x 2 Return: is_cared_in_the_level: n x L - ''' - size_ranges = boxes.new_tensor( - self.sizes_of_interest).view(len(self.sizes_of_interest), 2) # L x 2 - crit = ((boxes[:, 2:] - boxes[:, :2]) **2).sum(dim=1) ** 0.5 / 2 # n + """ + size_ranges = boxes.new_tensor(self.sizes_of_interest).view( + len(self.sizes_of_interest), 2 + ) # L x 2 + crit = ((boxes[:, 2:] - boxes[:, :2]) ** 2).sum(dim=1) ** 0.5 / 2 # n n, L = crit.shape[0], size_ranges.shape[0] crit = crit.view(n, 1).expand(n, L) size_ranges_expand = size_ranges.view(1, L, 2).expand(n, L, 2) - is_cared_in_the_level = (crit >= size_ranges_expand[:, :, 0]) & \ - (crit <= size_ranges_expand[:, :, 1]) + is_cared_in_the_level = (crit >= size_ranges_expand[:, :, 0]) & ( + crit <= size_ranges_expand[:, :, 1] + ) return is_cared_in_the_level - def assign_reg_fpn(self, reg_targets_per_im, size_ranges): - ''' + """ TODO (Xingyi): merge it with assign_fpn_level Inputs: reg_targets_per_im: M x N x 4 size_ranges: M x 2 - ''' - crit = ((reg_targets_per_im[:, :, :2] + \ - reg_targets_per_im[:, :, 2:])**2).sum(dim=2) ** 0.5 / 2 # M x N - is_cared_in_the_level = (crit >= size_ranges[:, [0]]) & \ - (crit <= size_ranges[:, [1]]) + """ + crit = ((reg_targets_per_im[:, :, :2] + reg_targets_per_im[:, :, 2:]) ** 2).sum( + dim=2 + ) ** 0.5 / 2 # M x N + is_cared_in_the_level = (crit >= size_ranges[:, [0]]) & ( + crit <= size_ranges[:, [1]] + ) return is_cared_in_the_level - def _get_reg_targets(self, reg_targets, dist, mask, area): - ''' - reg_targets (M x N x 4): long tensor - dist (M x N) - is_*: M x N - ''' + """ + reg_targets (M x N x 4): long tensor + dist (M x N) + is_*: M x N + """ dist[mask == 0] = INF * 1.0 - min_dist, min_inds = dist.min(dim=1) # M + min_dist, min_inds = dist.min(dim=1) # M reg_targets_per_im = reg_targets[ - range(len(reg_targets)), min_inds] # M x N x 4 --> M x 4 - reg_targets_per_im[min_dist == INF] = - INF + range(len(reg_targets)), min_inds + ] # M x N x 4 --> M x 4 + reg_targets_per_im[min_dist == INF] = -INF return reg_targets_per_im - def _create_heatmaps_from_dist(self, dist, labels, channels): - ''' + """ dist: M x N labels: N return: heatmaps: M x C - ''' + """ heatmaps = dist.new_zeros((dist.shape[0], channels)) for c in range(channels): - inds = (labels == c) # N + inds = labels == c # N if inds.int().sum() == 0: continue heatmaps[:, c] = torch.exp(-dist[:, inds].min(dim=1)[0]) @@ -555,118 +607,139 @@ def _create_heatmaps_from_dist(self, dist, labels, channels): heatmaps[zeros, c] = 0 return heatmaps - def _create_agn_heatmaps_from_dist(self, dist): - ''' + """ TODO (Xingyi): merge it with _create_heatmaps_from_dist dist: M x N return: heatmaps: M x 1 - ''' + """ heatmaps = dist.new_zeros((dist.shape[0], 1)) heatmaps[:, 0] = torch.exp(-dist.min(dim=1)[0]) zeros = heatmaps < 1e-4 heatmaps[zeros] = 0 return heatmaps - def _flatten_outputs(self, clss, reg_pred, agn_hm_pred): # Reshape: (N, F, Hl, Wl) -> (N, Hl, Wl, F) -> (sum_l N*Hl*Wl, F) - clss = cat([x.permute(0, 2, 3, 1).reshape(-1, x.shape[1]) \ - for x in clss], dim=0) if clss[0] is not None else None - reg_pred = cat( - [x.permute(0, 2, 3, 1).reshape(-1, 4) for x in reg_pred], dim=0) - agn_hm_pred = cat([x.permute(0, 2, 3, 1).reshape(-1) \ - for x in agn_hm_pred], dim=0) if self.with_agn_hm else None + clss = ( + cat([x.permute(0, 2, 3, 1).reshape(-1, x.shape[1]) for x in clss], dim=0) + if clss[0] is not None + else None + ) + reg_pred = cat([x.permute(0, 2, 3, 1).reshape(-1, 4) for x in reg_pred], dim=0) + agn_hm_pred = ( + cat([x.permute(0, 2, 3, 1).reshape(-1) for x in agn_hm_pred], dim=0) + if self.with_agn_hm + else None + ) return clss, reg_pred, agn_hm_pred - def get_center3x3(self, locations, centers, strides): - ''' + """ Inputs: locations: M x 2 centers: N x 2 strides: M - ''' + """ M, N = locations.shape[0], centers.shape[0] - locations_expanded = locations.view(M, 1, 2).expand(M, N, 2) # M x N x 2 - centers_expanded = centers.view(1, N, 2).expand(M, N, 2) # M x N x 2 - strides_expanded = strides.view(M, 1, 1).expand(M, N, 2) # M x N - centers_discret = ((centers_expanded / strides_expanded).int() * \ - strides_expanded).float() + strides_expanded / 2 # M x N x 2 + locations_expanded = locations.view(M, 1, 2).expand(M, N, 2) # M x N x 2 + centers_expanded = centers.view(1, N, 2).expand(M, N, 2) # M x N x 2 + strides_expanded = strides.view(M, 1, 1).expand(M, N, 2) # M x N + centers_discret = ( + (centers_expanded / strides_expanded).int() * strides_expanded + ).float() + strides_expanded / 2 # M x N x 2 dist_x = (locations_expanded[:, :, 0] - centers_discret[:, :, 0]).abs() dist_y = (locations_expanded[:, :, 1] - centers_discret[:, :, 1]).abs() - return (dist_x <= strides_expanded[:, :, 0]) & \ - (dist_y <= strides_expanded[:, :, 0]) - + return (dist_x <= strides_expanded[:, :, 0]) & ( + dist_y <= strides_expanded[:, :, 0] + ) @torch.no_grad() - def inference(self, images, clss_per_level, reg_pred_per_level, - agn_hm_pred_per_level, grids): - logits_pred = [x.sigmoid() if x is not None else None \ - for x in clss_per_level] - agn_hm_pred_per_level = [x.sigmoid() if x is not None else None \ - for x in agn_hm_pred_per_level] + def inference( + self, images, clss_per_level, reg_pred_per_level, agn_hm_pred_per_level, grids + ): + logits_pred = [x.sigmoid() if x is not None else None for x in clss_per_level] + agn_hm_pred_per_level = [ + x.sigmoid() if x is not None else None for x in agn_hm_pred_per_level + ] if self.only_proposal: proposals = self.predict_instances( - grids, agn_hm_pred_per_level, reg_pred_per_level, - images.image_sizes, [None for _ in agn_hm_pred_per_level]) + grids, + agn_hm_pred_per_level, + reg_pred_per_level, + images.image_sizes, + [None for _ in agn_hm_pred_per_level], + ) else: proposals = self.predict_instances( - grids, logits_pred, reg_pred_per_level, - images.image_sizes, agn_hm_pred_per_level) + grids, + logits_pred, + reg_pred_per_level, + images.image_sizes, + agn_hm_pred_per_level, + ) if self.as_proposal or self.only_proposal: for p in range(len(proposals)): - proposals[p].proposal_boxes = proposals[p].get('pred_boxes') - proposals[p].objectness_logits = proposals[p].get('scores') - proposals[p].remove('pred_boxes') + proposals[p].proposal_boxes = proposals[p].get("pred_boxes") + proposals[p].objectness_logits = proposals[p].get("scores") + proposals[p].remove("pred_boxes") if self.debug: debug_test( - [self.denormalizer(x) for x in images], - logits_pred, reg_pred_per_level, - agn_hm_pred_per_level, preds=proposals, - vis_thresh=self.vis_thresh, - debug_show_name=False) + [self.denormalizer(x) for x in images], + logits_pred, + reg_pred_per_level, + agn_hm_pred_per_level, + preds=proposals, + vis_thresh=self.vis_thresh, + debug_show_name=False, + ) return proposals, {} - @torch.no_grad() def predict_instances( - self, grids, logits_pred, reg_pred, image_sizes, agn_hm_pred, - is_proposal=False): + self, grids, logits_pred, reg_pred, image_sizes, agn_hm_pred, is_proposal=False + ): sampled_boxes = [] for l in range(len(grids)): - sampled_boxes.append(self.predict_single_level( - grids[l], logits_pred[l], reg_pred[l] * self.strides[l], - image_sizes, agn_hm_pred[l], l, is_proposal=is_proposal)) + sampled_boxes.append( + self.predict_single_level( + grids[l], + logits_pred[l], + reg_pred[l] * self.strides[l], + image_sizes, + agn_hm_pred[l], + l, + is_proposal=is_proposal, + ) + ) boxlists = list(zip(*sampled_boxes)) boxlists = [Instances.cat(boxlist) for boxlist in boxlists] - boxlists = self.nms_and_topK( - boxlists, nms=not self.not_nms) + boxlists = self.nms_and_topK(boxlists, nms=not self.not_nms) return boxlists - @torch.no_grad() def predict_single_level( - self, grids, heatmap, reg_pred, image_sizes, agn_hm, level, - is_proposal=False): + self, grids, heatmap, reg_pred, image_sizes, agn_hm, level, is_proposal=False + ): N, C, H, W = heatmap.shape # put in the same format as grids if self.center_nms: - heatmap_nms = nn.functional.max_pool2d( - heatmap, (3, 3), stride=1, padding=1) + heatmap_nms = nn.functional.max_pool2d(heatmap, (3, 3), stride=1, padding=1) heatmap = heatmap * (heatmap_nms == heatmap).float() - heatmap = heatmap.permute(0, 2, 3, 1) # N x H x W x C - heatmap = heatmap.reshape(N, -1, C) # N x HW x C - box_regression = reg_pred.view(N, 4, H, W).permute(0, 2, 3, 1) # N x H x W x 4 + heatmap = heatmap.permute(0, 2, 3, 1) # N x H x W x C + heatmap = heatmap.reshape(N, -1, C) # N x HW x C + box_regression = reg_pred.view(N, 4, H, W).permute(0, 2, 3, 1) # N x H x W x 4 box_regression = box_regression.reshape(N, -1, 4) - candidate_inds = heatmap > self.score_thresh # 0.05 - pre_nms_top_n = candidate_inds.view(N, -1).sum(1) # N - pre_nms_topk = self.pre_nms_topk_train if self.training else self.pre_nms_topk_test - pre_nms_top_n = pre_nms_top_n.clamp(max=pre_nms_topk) # N + candidate_inds = heatmap > self.score_thresh # 0.05 + pre_nms_top_n = candidate_inds.view(N, -1).sum(1) # N + pre_nms_topk = ( + self.pre_nms_topk_train if self.training else self.pre_nms_topk_test + ) + pre_nms_top_n = pre_nms_top_n.clamp(max=pre_nms_topk) # N if agn_hm is not None: agn_hm = agn_hm.view(N, 1, H, W).permute(0, 2, 3, 1) @@ -675,118 +748,128 @@ def predict_single_level( results = [] for i in range(N): - per_box_cls = heatmap[i] # HW x C - per_candidate_inds = candidate_inds[i] # n - per_box_cls = per_box_cls[per_candidate_inds] # n + per_box_cls = heatmap[i] # HW x C + per_candidate_inds = candidate_inds[i] # n + per_box_cls = per_box_cls[per_candidate_inds] # n - per_candidate_nonzeros = per_candidate_inds.nonzero() # n - per_box_loc = per_candidate_nonzeros[:, 0] # n - per_class = per_candidate_nonzeros[:, 1] # n + per_candidate_nonzeros = per_candidate_inds.nonzero() # n + per_box_loc = per_candidate_nonzeros[:, 0] # n + per_class = per_candidate_nonzeros[:, 1] # n - per_box_regression = box_regression[i] # HW x 4 - per_box_regression = per_box_regression[per_box_loc] # n x 4 - per_grids = grids[per_box_loc] # n x 2 + per_box_regression = box_regression[i] # HW x 4 + per_box_regression = per_box_regression[per_box_loc] # n x 4 + per_grids = grids[per_box_loc] # n x 2 - per_pre_nms_top_n = pre_nms_top_n[i] # 1 + per_pre_nms_top_n = pre_nms_top_n[i] # 1 if per_candidate_inds.sum().item() > per_pre_nms_top_n.item(): - per_box_cls, top_k_indices = \ - per_box_cls.topk(per_pre_nms_top_n, sorted=False) + per_box_cls, top_k_indices = per_box_cls.topk( + per_pre_nms_top_n, sorted=False + ) per_class = per_class[top_k_indices] per_box_regression = per_box_regression[top_k_indices] per_grids = per_grids[top_k_indices] - - detections = torch.stack([ - per_grids[:, 0] - per_box_regression[:, 0], - per_grids[:, 1] - per_box_regression[:, 1], - per_grids[:, 0] + per_box_regression[:, 2], - per_grids[:, 1] + per_box_regression[:, 3], - ], dim=1) # n x 4 + + detections = torch.stack( + [ + per_grids[:, 0] - per_box_regression[:, 0], + per_grids[:, 1] - per_box_regression[:, 1], + per_grids[:, 0] + per_box_regression[:, 2], + per_grids[:, 1] + per_box_regression[:, 3], + ], + dim=1, + ) # n x 4 # avoid invalid boxes in RoI heads detections[:, 2] = torch.max(detections[:, 2], detections[:, 0] + 0.01) detections[:, 3] = torch.max(detections[:, 3], detections[:, 1] + 0.01) boxlist = Instances(image_sizes[i]) - boxlist.scores = torch.sqrt(per_box_cls) \ - if self.with_agn_hm else per_box_cls # n + boxlist.scores = ( + torch.sqrt(per_box_cls) if self.with_agn_hm else per_box_cls + ) # n # import pdb; pdb.set_trace() boxlist.pred_boxes = Boxes(detections) boxlist.pred_classes = per_class results.append(boxlist) return results - @torch.no_grad() def nms_and_topK(self, boxlists, nms=True): num_images = len(boxlists) results = [] for i in range(num_images): - nms_thresh = self.nms_thresh_train if self.training else \ - self.nms_thresh_test + nms_thresh = ( + self.nms_thresh_train if self.training else self.nms_thresh_test + ) result = ml_nms(boxlists[i], nms_thresh) if nms else boxlists[i] if self.debug: - print('#proposals before nms', len(boxlists[i])) - print('#proposals after nms', len(result)) + print("#proposals before nms", len(boxlists[i])) + print("#proposals after nms", len(result)) num_dets = len(result) - post_nms_topk = self.post_nms_topk_train if self.training else \ - self.post_nms_topk_test + post_nms_topk = ( + self.post_nms_topk_train if self.training else self.post_nms_topk_test + ) if num_dets > post_nms_topk: cls_scores = result.scores image_thresh, _ = torch.kthvalue( - cls_scores.float().cpu(), - num_dets - post_nms_topk + 1 + cls_scores.float().cpu(), num_dets - post_nms_topk + 1 ) keep = cls_scores >= image_thresh.item() keep = torch.nonzero(keep).squeeze(1) result = result[keep] if self.debug: - print('#proposals after filter', len(result)) + print("#proposals after filter", len(result)) results.append(result) return results - @torch.no_grad() def _add_more_pos(self, reg_pred, gt_instances, shapes_per_level): - labels, level_masks, c33_inds, c33_masks, c33_regs = \ - self._get_c33_inds(gt_instances, shapes_per_level) + labels, level_masks, c33_inds, c33_masks, c33_regs = self._get_c33_inds( + gt_instances, shapes_per_level + ) N, L, K = labels.shape[0], len(self.strides), 9 c33_inds[c33_masks == 0] = 0 - reg_pred_c33 = reg_pred[c33_inds].detach() # N x L x K + reg_pred_c33 = reg_pred[c33_inds].detach() # N x L x K invalid_reg = c33_masks == 0 c33_regs_expand = c33_regs.view(N * L * K, 4).clamp(min=0) if N > 0: with torch.no_grad(): - c33_reg_loss = self.iou_loss( - reg_pred_c33.view(N * L * K, 4), - c33_regs_expand, None, - reduction='none').view(N, L, K).detach() # N x L x K + c33_reg_loss = ( + self.iou_loss( + reg_pred_c33.view(N * L * K, 4), + c33_regs_expand, + None, + reduction="none", + ) + .view(N, L, K) + .detach() + ) # N x L x K else: c33_reg_loss = reg_pred_c33.new_zeros((N, L, K)).detach() - c33_reg_loss[invalid_reg] = INF # N x L x K - c33_reg_loss.view(N * L, K)[level_masks.view(N * L), 4] = 0 # real center + c33_reg_loss[invalid_reg] = INF # N x L x K + c33_reg_loss.view(N * L, K)[level_masks.view(N * L), 4] = 0 # real center c33_reg_loss = c33_reg_loss.view(N, L * K) if N == 0: loss_thresh = c33_reg_loss.new_ones((N)).float() else: - loss_thresh = torch.kthvalue( - c33_reg_loss, self.more_pos_topk, dim=1)[0] # N - loss_thresh[loss_thresh > self.more_pos_thresh] = self.more_pos_thresh # N - new_pos = c33_reg_loss.view(N, L, K) < \ - loss_thresh.view(N, 1, 1).expand(N, L, K) - pos_inds = c33_inds[new_pos].view(-1) # P + loss_thresh = torch.kthvalue(c33_reg_loss, self.more_pos_topk, dim=1)[ + 0 + ] # N + loss_thresh[loss_thresh > self.more_pos_thresh] = self.more_pos_thresh # N + new_pos = c33_reg_loss.view(N, L, K) < loss_thresh.view(N, 1, 1).expand(N, L, K) + pos_inds = c33_inds[new_pos].view(-1) # P labels = labels.view(N, 1, 1).expand(N, L, K)[new_pos].view(-1) return pos_inds, labels - - + @torch.no_grad() def _get_c33_inds(self, gt_instances, shapes_per_level): - ''' + """ TODO (Xingyi): The current implementation is ugly. Refactor. Get the center (and the 3x3 region near center) locations of each objects Inputs: gt_instances: [n_i], sum n_i = N shapes_per_level: L x 2 [(h_l, w_l)]_L - ''' + """ labels = [] level_masks = [] c33_inds = [] @@ -795,58 +878,61 @@ def _get_c33_inds(self, gt_instances, shapes_per_level): L = len(self.strides) B = len(gt_instances) shapes_per_level = shapes_per_level.long() - loc_per_level = (shapes_per_level[:, 0] * shapes_per_level[:, 1]).long() # L + loc_per_level = (shapes_per_level[:, 0] * shapes_per_level[:, 1]).long() # L level_bases = [] s = 0 for l in range(L): level_bases.append(s) s = s + B * loc_per_level[l] - level_bases = shapes_per_level.new_tensor(level_bases).long() # L - strides_default = shapes_per_level.new_tensor(self.strides).float() # L + level_bases = shapes_per_level.new_tensor(level_bases).long() # L + strides_default = shapes_per_level.new_tensor(self.strides).float() # L K = 9 dx = shapes_per_level.new_tensor([-1, 0, 1, -1, 0, 1, -1, 0, 1]).long() dy = shapes_per_level.new_tensor([-1, -1, -1, 0, 0, 0, 1, 1, 1]).long() for im_i in range(B): targets_per_im = gt_instances[im_i] - bboxes = targets_per_im.gt_boxes.tensor # n x 4 + bboxes = targets_per_im.gt_boxes.tensor # n x 4 n = bboxes.shape[0] if n == 0: continue - centers = ((bboxes[:, [0, 1]] + bboxes[:, [2, 3]]) / 2) # n x 2 + centers = (bboxes[:, [0, 1]] + bboxes[:, [2, 3]]) / 2 # n x 2 centers = centers.view(n, 1, 2).expand(n, L, 2) - strides = strides_default.view(1, L, 1).expand(n, L, 2) # - centers_inds = (centers / strides).long() # n x L x 2 - center_grids = centers_inds * strides + strides // 2# n x L x 2 + strides = strides_default.view(1, L, 1).expand(n, L, 2) # + centers_inds = (centers / strides).long() # n x L x 2 + center_grids = centers_inds * strides + strides // 2 # n x L x 2 l = center_grids[:, :, 0] - bboxes[:, 0].view(n, 1).expand(n, L) t = center_grids[:, :, 1] - bboxes[:, 1].view(n, 1).expand(n, L) r = bboxes[:, 2].view(n, 1).expand(n, L) - center_grids[:, :, 0] - b = bboxes[:, 3].view(n, 1).expand(n, L) - center_grids[:, :, 1] # n x L - reg = torch.stack([l, t, r, b], dim=2) # n x L x 4 + b = bboxes[:, 3].view(n, 1).expand(n, L) - center_grids[:, :, 1] # n x L + reg = torch.stack([l, t, r, b], dim=2) # n x L x 4 reg = reg / strides_default.view(1, L, 1).expand(n, L, 4).float() - + Ws = shapes_per_level[:, 1].view(1, L).expand(n, L) Hs = shapes_per_level[:, 0].view(1, L).expand(n, L) expand_Ws = Ws.view(n, L, 1).expand(n, L, K) expand_Hs = Hs.view(n, L, 1).expand(n, L, K) label = targets_per_im.gt_classes.view(n).clone() - mask = reg.min(dim=2)[0] >= 0 # n x L + mask = reg.min(dim=2)[0] >= 0 # n x L mask = mask & self.assign_fpn_level(bboxes) - labels.append(label) # n - level_masks.append(mask) # n x L + labels.append(label) # n + level_masks.append(mask) # n x L Dy = dy.view(1, 1, K).expand(n, L, K) Dx = dx.view(1, 1, K).expand(n, L, K) - c33_ind = level_bases.view(1, L, 1).expand(n, L, K) + \ - im_i * loc_per_level.view(1, L, 1).expand(n, L, K) + \ - (centers_inds[:, :, 1:2].expand(n, L, K) + Dy) * expand_Ws + \ - (centers_inds[:, :, 0:1].expand(n, L, K) + Dx) # n x L x K - - c33_mask = \ - ((centers_inds[:, :, 1:2].expand(n, L, K) + dy) < expand_Hs) & \ - ((centers_inds[:, :, 1:2].expand(n, L, K) + dy) >= 0) & \ - ((centers_inds[:, :, 0:1].expand(n, L, K) + dx) < expand_Ws) & \ - ((centers_inds[:, :, 0:1].expand(n, L, K) + dx) >= 0) + c33_ind = ( + level_bases.view(1, L, 1).expand(n, L, K) + + im_i * loc_per_level.view(1, L, 1).expand(n, L, K) + + (centers_inds[:, :, 1:2].expand(n, L, K) + Dy) * expand_Ws + + (centers_inds[:, :, 0:1].expand(n, L, K) + Dx) + ) # n x L x K + + c33_mask = ( + ((centers_inds[:, :, 1:2].expand(n, L, K) + dy) < expand_Hs) + & ((centers_inds[:, :, 1:2].expand(n, L, K) + dy) >= 0) + & ((centers_inds[:, :, 0:1].expand(n, L, K) + dx) < expand_Ws) + & ((centers_inds[:, :, 0:1].expand(n, L, K) + dx) >= 0) + ) # TODO (Xingyi): think about better way to implement this # Currently it hard codes the 3x3 region c33_reg = reg.view(n, L, 1, 4).expand(n, L, K, 4).clone() @@ -858,11 +944,11 @@ def _get_c33_inds(self, gt_instances, shapes_per_level): c33_reg[:, :, [0, 1, 2], 3] += 1 c33_reg[:, :, [6, 7, 8], 1] += 1 c33_reg[:, :, [6, 7, 8], 3] -= 1 - c33_mask = c33_mask & (c33_reg.min(dim=3)[0] >= 0) # n x L x K + c33_mask = c33_mask & (c33_reg.min(dim=3)[0] >= 0) # n x L x K c33_inds.append(c33_ind) c33_masks.append(c33_mask) c33_regs.append(c33_reg) - + if len(level_masks) > 0: labels = torch.cat(labels, dim=0) level_masks = torch.cat(level_masks, dim=0) @@ -875,4 +961,4 @@ def _get_c33_inds(self, gt_instances, shapes_per_level): c33_inds = shapes_per_level.new_zeros((0, L, K)).long() c33_regs = shapes_per_level.new_zeros((0, L, K, 4)).float() c33_masks = shapes_per_level.new_zeros((0, L, K)).bool() - return labels, level_masks, c33_inds, c33_masks, c33_regs # N x L, N x L x K + return labels, level_masks, c33_inds, c33_masks, c33_regs # N x L, N x L x K diff --git a/dimos/models/Detic/third_party/CenterNet2/centernet/modeling/dense_heads/centernet_head.py b/dimos/models/Detic/third_party/CenterNet2/centernet/modeling/dense_heads/centernet_head.py index 57e0960a57..e036b360f8 100644 --- a/dimos/models/Detic/third_party/CenterNet2/centernet/modeling/dense_heads/centernet_head.py +++ b/dimos/models/Detic/third_party/CenterNet2/centernet/modeling/dense_heads/centernet_head.py @@ -1,15 +1,15 @@ import math -from typing import List import torch from torch import nn from torch.nn import functional as F -from detectron2.layers import ShapeSpec, get_norm +from detectron2.layers import get_norm from detectron2.config import configurable from ..layers.deform_conv import DFConv2d __all__ = ["CenterNetHead"] + class Scale(nn.Module): def __init__(self, init_value=1.0): super(Scale, self).__init__() @@ -18,9 +18,11 @@ def __init__(self, init_value=1.0): def forward(self, input): return input * self.scale + class CenterNetHead(nn.Module): @configurable - def __init__(self, + def __init__( + self, # input_shape: List[ShapeSpec], in_channels, num_levels, @@ -28,12 +30,13 @@ def __init__(self, num_classes=80, with_agn_hm=False, only_proposal=False, - norm='GN', + norm="GN", num_cls_convs=4, num_box_convs=4, num_share_convs=0, use_deformable=False, - prior_prob=0.01): + prior_prob=0.01, + ): super().__init__() self.num_classes = num_classes self.with_agn_hm = with_agn_hm @@ -41,19 +44,19 @@ def __init__(self, self.out_kernel = 3 head_configs = { - "cls": (num_cls_convs if not self.only_proposal else 0, \ - use_deformable), + "cls": (num_cls_convs if not self.only_proposal else 0, use_deformable), "bbox": (num_box_convs, use_deformable), - "share": (num_share_convs, use_deformable)} + "share": (num_share_convs, use_deformable), + } # in_channels = [s.channels for s in input_shape] # assert len(set(in_channels)) == 1, \ # "Each level must have the same channel!" # in_channels = in_channels[0] channels = { - 'cls': in_channels, - 'bbox': in_channels, - 'share': in_channels, + "cls": in_channels, + "bbox": in_channels, + "share": in_channels, } for head in head_configs: tower = [] @@ -64,30 +67,36 @@ def __init__(self, conv_func = DFConv2d else: conv_func = nn.Conv2d - tower.append(conv_func( + tower.append( + conv_func( in_channels if i == 0 else channel, - channel, - kernel_size=3, stride=1, - padding=1, bias=True - )) - if norm == 'GN' and channel % 32 != 0: + channel, + kernel_size=3, + stride=1, + padding=1, + bias=True, + ) + ) + if norm == "GN" and channel % 32 != 0: tower.append(nn.GroupNorm(25, channel)) - elif norm != '': + elif norm != "": tower.append(get_norm(norm, channel)) tower.append(nn.ReLU()) - self.add_module('{}_tower'.format(head), - nn.Sequential(*tower)) + self.add_module("{}_tower".format(head), nn.Sequential(*tower)) self.bbox_pred = nn.Conv2d( - in_channels, 4, kernel_size=self.out_kernel, - stride=1, padding=self.out_kernel // 2 + in_channels, + 4, + kernel_size=self.out_kernel, + stride=1, + padding=self.out_kernel // 2, ) - self.scales = nn.ModuleList( - [Scale(init_value=1.0) for _ in range(num_levels)]) + self.scales = nn.ModuleList([Scale(init_value=1.0) for _ in range(num_levels)]) for modules in [ - self.cls_tower, self.bbox_tower, + self.cls_tower, + self.bbox_tower, self.share_tower, self.bbox_pred, ]: @@ -95,15 +104,18 @@ def __init__(self, if isinstance(l, nn.Conv2d): torch.nn.init.normal_(l.weight, std=0.01) torch.nn.init.constant_(l.bias, 0) - - torch.nn.init.constant_(self.bbox_pred.bias, 8.) + + torch.nn.init.constant_(self.bbox_pred.bias, 8.0) prior_prob = prior_prob bias_value = -math.log((1 - prior_prob) / prior_prob) if self.with_agn_hm: self.agn_hm = nn.Conv2d( - in_channels, 1, kernel_size=self.out_kernel, - stride=1, padding=self.out_kernel // 2 + in_channels, + 1, + kernel_size=self.out_kernel, + stride=1, + padding=self.out_kernel // 2, ) torch.nn.init.constant_(self.agn_hm.bias, bias_value) torch.nn.init.normal_(self.agn_hm.weight, std=0.01) @@ -111,8 +123,9 @@ def __init__(self, if not self.only_proposal: cls_kernel_size = self.out_kernel self.cls_logits = nn.Conv2d( - in_channels, self.num_classes, - kernel_size=cls_kernel_size, + in_channels, + self.num_classes, + kernel_size=cls_kernel_size, stride=1, padding=cls_kernel_size // 2, ) @@ -124,17 +137,17 @@ def __init__(self, def from_config(cls, cfg, input_shape): ret = { # 'input_shape': input_shape, - 'in_channels': [s.channels for s in input_shape][0], - 'num_levels': len(input_shape), - 'num_classes': cfg.MODEL.CENTERNET.NUM_CLASSES, - 'with_agn_hm': cfg.MODEL.CENTERNET.WITH_AGN_HM, - 'only_proposal': cfg.MODEL.CENTERNET.ONLY_PROPOSAL, - 'norm': cfg.MODEL.CENTERNET.NORM, - 'num_cls_convs': cfg.MODEL.CENTERNET.NUM_CLS_CONVS, - 'num_box_convs': cfg.MODEL.CENTERNET.NUM_BOX_CONVS, - 'num_share_convs': cfg.MODEL.CENTERNET.NUM_SHARE_CONVS, - 'use_deformable': cfg.MODEL.CENTERNET.USE_DEFORMABLE, - 'prior_prob': cfg.MODEL.CENTERNET.PRIOR_PROB, + "in_channels": [s.channels for s in input_shape][0], + "num_levels": len(input_shape), + "num_classes": cfg.MODEL.CENTERNET.NUM_CLASSES, + "with_agn_hm": cfg.MODEL.CENTERNET.WITH_AGN_HM, + "only_proposal": cfg.MODEL.CENTERNET.ONLY_PROPOSAL, + "norm": cfg.MODEL.CENTERNET.NORM, + "num_cls_convs": cfg.MODEL.CENTERNET.NUM_CLS_CONVS, + "num_box_convs": cfg.MODEL.CENTERNET.NUM_BOX_CONVS, + "num_share_convs": cfg.MODEL.CENTERNET.NUM_SHARE_CONVS, + "use_deformable": cfg.MODEL.CENTERNET.USE_DEFORMABLE, + "prior_prob": cfg.MODEL.CENTERNET.PRIOR_PROB, } return ret @@ -158,5 +171,5 @@ def forward(self, x): reg = self.bbox_pred(bbox_tower) reg = self.scales[l](reg) bbox_reg.append(F.relu(reg)) - - return clss, bbox_reg, agn_hms \ No newline at end of file + + return clss, bbox_reg, agn_hms diff --git a/dimos/models/Detic/third_party/CenterNet2/centernet/modeling/dense_heads/utils.py b/dimos/models/Detic/third_party/CenterNet2/centernet/modeling/dense_heads/utils.py index c9efa287fc..6777c268dd 100644 --- a/dimos/models/Detic/third_party/CenterNet2/centernet/modeling/dense_heads/utils.py +++ b/dimos/models/Detic/third_party/CenterNet2/centernet/modeling/dense_heads/utils.py @@ -1,31 +1,27 @@ -import cv2 import torch -from torch import nn from detectron2.utils.comm import get_world_size -from detectron2.structures import pairwise_iou, Boxes + # from .data import CenterNetCrop -import torch.nn.functional as F -import numpy as np -from detectron2.structures import Boxes, ImageList, Instances -__all__ = ['reduce_sum', '_transpose'] +__all__ = ["reduce_sum", "_transpose"] INF = 1000000000 + def _transpose(training_targets, num_loc_list): - ''' - This function is used to transpose image first training targets to + """ + This function is used to transpose image first training targets to level first ones :return: level first training targets - ''' + """ for im_i in range(len(training_targets)): training_targets[im_i] = torch.split( - training_targets[im_i], num_loc_list, dim=0) + training_targets[im_i], num_loc_list, dim=0 + ) targets_level_first = [] for targets_per_level in zip(*training_targets): - targets_level_first.append( - torch.cat(targets_per_level, dim=0)) + targets_level_first.append(torch.cat(targets_per_level, dim=0)) return targets_level_first @@ -35,4 +31,4 @@ def reduce_sum(tensor): return tensor tensor = tensor.clone() torch.distributed.all_reduce(tensor, op=torch.distributed.ReduceOp.SUM) - return tensor \ No newline at end of file + return tensor diff --git a/dimos/models/Detic/third_party/CenterNet2/centernet/modeling/layers/deform_conv.py b/dimos/models/Detic/third_party/CenterNet2/centernet/modeling/layers/deform_conv.py index e5650c4067..396aa9554a 100644 --- a/dimos/models/Detic/third_party/CenterNet2/centernet/modeling/layers/deform_conv.py +++ b/dimos/models/Detic/third_party/CenterNet2/centernet/modeling/layers/deform_conv.py @@ -18,18 +18,19 @@ def backward(ctx, grad): class DFConv2d(nn.Module): """Deformable convolutional layer""" + def __init__( - self, - in_channels, - out_channels, - with_modulated_dcn=True, - kernel_size=3, - stride=1, - groups=1, - dilation=1, - deformable_groups=1, - bias=False, - padding=None + self, + in_channels, + out_channels, + with_modulated_dcn=True, + kernel_size=3, + stride=1, + groups=1, + dilation=1, + deformable_groups=1, + bias=False, + padding=None, ): super(DFConv2d, self).__init__() if isinstance(kernel_size, (list, tuple)): @@ -40,7 +41,7 @@ def __init__( assert len(dilation) == 2 padding = ( dilation[0] * (kernel_size[0] - 1) // 2, - dilation[1] * (kernel_size[1] - 1) // 2 + dilation[1] * (kernel_size[1] - 1) // 2, ) offset_base_channels = kernel_size[0] * kernel_size[1] else: @@ -48,10 +49,12 @@ def __init__( offset_base_channels = kernel_size * kernel_size if with_modulated_dcn: from detectron2.layers.deform_conv import ModulatedDeformConv + offset_channels = offset_base_channels * 3 # default: 27 conv_block = ModulatedDeformConv else: from detectron2.layers.deform_conv import DeformConv + offset_channels = offset_base_channels * 2 # default: 18 conv_block = DeformConv self.offset = Conv2d( @@ -61,15 +64,15 @@ def __init__( stride=stride, padding=padding, groups=1, - dilation=dilation + dilation=dilation, ) nn.init.constant_(self.offset.weight, 0) nn.init.constant_(self.offset.bias, 0) - ''' + """ for l in [self.offset, ]: nn.init.kaiming_uniform_(l.weight, a=1) torch.nn.init.constant_(l.bias, 0.) - ''' + """ self.conv = conv_block( in_channels, out_channels, @@ -79,7 +82,7 @@ def __init__( dilation=dilation, groups=groups, deformable_groups=deformable_groups, - bias=bias + bias=bias, ) self.with_modulated_dcn = with_modulated_dcn self.kernel_size = kernel_size @@ -95,8 +98,8 @@ def forward(self, x, return_offset=False): x = self.conv(x, offset_mask) else: offset_mask = self.offset(x) - offset = offset_mask[:, :self.offset_split, :, :] - mask = offset_mask[:, self.offset_split:, :, :].sigmoid() + offset = offset_mask[:, : self.offset_split, :, :] + mask = offset_mask[:, self.offset_split :, :, :].sigmoid() x = self.conv(x, offset, mask) if return_offset: return x, offset_mask @@ -105,12 +108,8 @@ def forward(self, x, return_offset=False): output_shape = [ (i + 2 * p - (di * (k - 1) + 1)) // d + 1 for i, p, di, k, d in zip( - x.shape[-2:], - self.padding, - self.dilation, - self.kernel_size, - self.stride + x.shape[-2:], self.padding, self.dilation, self.kernel_size, self.stride ) ] output_shape = [x.shape[0], self.conv.weight.shape[0]] + output_shape - return _NewEmptyTensorOp.apply(x, output_shape) \ No newline at end of file + return _NewEmptyTensorOp.apply(x, output_shape) diff --git a/dimos/models/Detic/third_party/CenterNet2/centernet/modeling/layers/heatmap_focal_loss.py b/dimos/models/Detic/third_party/CenterNet2/centernet/modeling/layers/heatmap_focal_loss.py index 8c0c1be13d..893fd9ffab 100644 --- a/dimos/models/Detic/third_party/CenterNet2/centernet/modeling/layers/heatmap_focal_loss.py +++ b/dimos/models/Detic/third_party/CenterNet2/centernet/modeling/layers/heatmap_focal_loss.py @@ -1,5 +1,5 @@ import torch -from torch.nn import functional as F + # TODO: merge these two function def heatmap_focal_loss( @@ -10,9 +10,9 @@ def heatmap_focal_loss( alpha: float = -1, beta: float = 4, gamma: float = 2, - reduction: str = 'sum', + reduction: str = "sum", sigmoid_clamp: float = 1e-4, - ignore_high_fp: float = -1., + ignore_high_fp: float = -1.0, ): """ Loss used in RetinaNet for dense detection: https://arxiv.org/abs/1708.02002. @@ -24,9 +24,9 @@ def heatmap_focal_loss( Returns: Loss tensor with the reduction option applied. """ - pred = torch.clamp(inputs.sigmoid_(), min=sigmoid_clamp, max=1-sigmoid_clamp) + pred = torch.clamp(inputs.sigmoid_(), min=sigmoid_clamp, max=1 - sigmoid_clamp) neg_weights = torch.pow(1 - targets, beta) - pos_pred_pix = pred[pos_inds] # N x C + pos_pred_pix = pred[pos_inds] # N x C pos_pred = pos_pred_pix.gather(1, labels.unsqueeze(1)) pos_loss = torch.log(pos_pred) * torch.pow(1 - pos_pred, gamma) neg_loss = torch.log(1 - pred) * torch.pow(pred, gamma) * neg_weights @@ -43,11 +43,13 @@ def heatmap_focal_loss( pos_loss = alpha * pos_loss neg_loss = (1 - alpha) * neg_loss - return - pos_loss, - neg_loss + return -pos_loss, -neg_loss + heatmap_focal_loss_jit = torch.jit.script(heatmap_focal_loss) # heatmap_focal_loss_jit = heatmap_focal_loss + def binary_heatmap_focal_loss( inputs, targets, @@ -56,7 +58,7 @@ def binary_heatmap_focal_loss( beta: float = 4, gamma: float = 2, sigmoid_clamp: float = 1e-4, - ignore_high_fp: float = -1., + ignore_high_fp: float = -1.0, ): """ Args: @@ -66,17 +68,17 @@ def binary_heatmap_focal_loss( Returns: Loss tensor with the reduction option applied. """ - pred = torch.clamp(inputs.sigmoid_(), min=sigmoid_clamp, max=1-sigmoid_clamp) + pred = torch.clamp(inputs.sigmoid_(), min=sigmoid_clamp, max=1 - sigmoid_clamp) neg_weights = torch.pow(1 - targets, beta) - pos_pred = pred[pos_inds] # N + pos_pred = pred[pos_inds] # N pos_loss = torch.log(pos_pred) * torch.pow(1 - pos_pred, gamma) neg_loss = torch.log(1 - pred) * torch.pow(pred, gamma) * neg_weights if ignore_high_fp > 0: not_high_fp = (pred < ignore_high_fp).float() neg_loss = not_high_fp * neg_loss - pos_loss = - pos_loss.sum() - neg_loss = - neg_loss.sum() + pos_loss = -pos_loss.sum() + neg_loss = -neg_loss.sum() if alpha >= 0: pos_loss = alpha * pos_loss @@ -84,4 +86,5 @@ def binary_heatmap_focal_loss( return pos_loss, neg_loss -binary_heatmap_focal_loss_jit = torch.jit.script(binary_heatmap_focal_loss) \ No newline at end of file + +binary_heatmap_focal_loss_jit = torch.jit.script(binary_heatmap_focal_loss) diff --git a/dimos/models/Detic/third_party/CenterNet2/centernet/modeling/layers/iou_loss.py b/dimos/models/Detic/third_party/CenterNet2/centernet/modeling/layers/iou_loss.py index 6a02464651..29c653ed74 100644 --- a/dimos/models/Detic/third_party/CenterNet2/centernet/modeling/layers/iou_loss.py +++ b/dimos/models/Detic/third_party/CenterNet2/centernet/modeling/layers/iou_loss.py @@ -3,11 +3,11 @@ class IOULoss(nn.Module): - def __init__(self, loc_loss_type='iou'): + def __init__(self, loc_loss_type="iou"): super(IOULoss, self).__init__() self.loc_loss_type = loc_loss_type - def forward(self, pred, target, weight=None, reduction='sum'): + def forward(self, pred, target, weight=None, reduction="sum"): pred_left = pred[:, 0] pred_top = pred[:, 1] pred_right = pred[:, 2] @@ -18,20 +18,22 @@ def forward(self, pred, target, weight=None, reduction='sum'): target_right = target[:, 2] target_bottom = target[:, 3] - target_aera = (target_left + target_right) * \ - (target_top + target_bottom) - pred_aera = (pred_left + pred_right) * \ - (pred_top + pred_bottom) - - w_intersect = torch.min(pred_left, target_left) + \ - torch.min(pred_right, target_right) - h_intersect = torch.min(pred_bottom, target_bottom) + \ - torch.min(pred_top, target_top) - - g_w_intersect = torch.max(pred_left, target_left) + \ - torch.max(pred_right, target_right) - g_h_intersect = torch.max(pred_bottom, target_bottom) + \ - torch.max(pred_top, target_top) + target_aera = (target_left + target_right) * (target_top + target_bottom) + pred_aera = (pred_left + pred_right) * (pred_top + pred_bottom) + + w_intersect = torch.min(pred_left, target_left) + torch.min( + pred_right, target_right + ) + h_intersect = torch.min(pred_bottom, target_bottom) + torch.min( + pred_top, target_top + ) + + g_w_intersect = torch.max(pred_left, target_left) + torch.max( + pred_right, target_right + ) + g_h_intersect = torch.max(pred_bottom, target_bottom) + torch.max( + pred_top, target_top + ) ac_uion = g_w_intersect * g_h_intersect area_intersect = w_intersect * h_intersect @@ -39,11 +41,11 @@ def forward(self, pred, target, weight=None, reduction='sum'): ious = (area_intersect + 1.0) / (area_union + 1.0) gious = ious - (ac_uion - area_union) / ac_uion - if self.loc_loss_type == 'iou': + if self.loc_loss_type == "iou": losses = -torch.log(ious) - elif self.loc_loss_type == 'linear_iou': + elif self.loc_loss_type == "linear_iou": losses = 1 - ious - elif self.loc_loss_type == 'giou': + elif self.loc_loss_type == "giou": losses = 1 - gious else: raise NotImplementedError @@ -53,11 +55,11 @@ def forward(self, pred, target, weight=None, reduction='sum'): else: losses = losses - if reduction == 'sum': + if reduction == "sum": return losses.sum() - elif reduction == 'batch': + elif reduction == "batch": return losses.sum(dim=[1]) - elif reduction == 'none': + elif reduction == "none": return losses else: raise NotImplementedError @@ -118,4 +120,4 @@ def giou_loss( elif reduction == "sum": loss = loss.sum() - return loss \ No newline at end of file + return loss diff --git a/dimos/models/Detic/third_party/CenterNet2/centernet/modeling/layers/ml_nms.py b/dimos/models/Detic/third_party/CenterNet2/centernet/modeling/layers/ml_nms.py index 325d709a98..02f353e177 100644 --- a/dimos/models/Detic/third_party/CenterNet2/centernet/modeling/layers/ml_nms.py +++ b/dimos/models/Detic/third_party/CenterNet2/centernet/modeling/layers/ml_nms.py @@ -1,8 +1,9 @@ from detectron2.layers import batched_nms -def ml_nms(boxlist, nms_thresh, max_proposals=-1, - score_field="scores", label_field="labels"): +def ml_nms( + boxlist, nms_thresh, max_proposals=-1, score_field="scores", label_field="labels" +): """ Performs non-maximum suppression on a boxlist, with scores specified in a boxlist field via score_field. @@ -15,17 +16,18 @@ def ml_nms(boxlist, nms_thresh, max_proposals=-1, """ if nms_thresh <= 0: return boxlist - if boxlist.has('pred_boxes'): + if boxlist.has("pred_boxes"): boxes = boxlist.pred_boxes.tensor labels = boxlist.pred_classes else: boxes = boxlist.proposal_boxes.tensor labels = boxlist.proposal_boxes.tensor.new_zeros( - len(boxlist.proposal_boxes.tensor)) + len(boxlist.proposal_boxes.tensor) + ) scores = boxlist.scores - + keep = batched_nms(boxes, scores, labels, nms_thresh) if max_proposals > 0: - keep = keep[: max_proposals] + keep = keep[:max_proposals] boxlist = boxlist[keep] return boxlist diff --git a/dimos/models/Detic/third_party/CenterNet2/centernet/modeling/meta_arch/centernet_detector.py b/dimos/models/Detic/third_party/CenterNet2/centernet/modeling/meta_arch/centernet_detector.py index b7525c7b31..d3109d4167 100644 --- a/dimos/models/Detic/third_party/CenterNet2/centernet/modeling/meta_arch/centernet_detector.py +++ b/dimos/models/Detic/third_party/CenterNet2/centernet/modeling/meta_arch/centernet_detector.py @@ -1,6 +1,3 @@ -import math -import json -import numpy as np import torch from torch import nn @@ -9,19 +6,24 @@ from detectron2.modeling import detector_postprocess from detectron2.structures import ImageList + @META_ARCH_REGISTRY.register() class CenterNetDetector(nn.Module): def __init__(self, cfg): super().__init__() self.mean, self.std = cfg.MODEL.PIXEL_MEAN, cfg.MODEL.PIXEL_STD - self.register_buffer("pixel_mean", torch.Tensor(cfg.MODEL.PIXEL_MEAN).view(-1, 1, 1)) - self.register_buffer("pixel_std", torch.Tensor(cfg.MODEL.PIXEL_STD).view(-1, 1, 1)) - + self.register_buffer( + "pixel_mean", torch.Tensor(cfg.MODEL.PIXEL_MEAN).view(-1, 1, 1) + ) + self.register_buffer( + "pixel_std", torch.Tensor(cfg.MODEL.PIXEL_STD).view(-1, 1, 1) + ) + self.backbone = build_backbone(cfg) self.proposal_generator = build_proposal_generator( - cfg, self.backbone.output_shape()) # TODO: change to a more precise name - - + cfg, self.backbone.output_shape() + ) # TODO: change to a more precise name + def forward(self, batched_inputs): if not self.training: return self.inference(batched_inputs) @@ -29,16 +31,13 @@ def forward(self, batched_inputs): features = self.backbone(images.tensor) gt_instances = [x["instances"].to(self.device) for x in batched_inputs] - _, proposal_losses = self.proposal_generator( - images, features, gt_instances) + _, proposal_losses = self.proposal_generator(images, features, gt_instances) return proposal_losses - @property def device(self): return self.pixel_mean.device - @torch.no_grad() def inference(self, batched_inputs, do_postprocess=True): images = self.preprocess_image(batched_inputs) @@ -48,7 +47,8 @@ def inference(self, batched_inputs, do_postprocess=True): processed_results = [] for results_per_image, input_per_image, image_size in zip( - proposals, batched_inputs, images.image_sizes): + proposals, batched_inputs, images.image_sizes + ): if do_postprocess: height = input_per_image.get("height", image_size[0]) width = input_per_image.get("width", image_size[1]) diff --git a/dimos/models/Detic/third_party/CenterNet2/centernet/modeling/roi_heads/custom_fast_rcnn.py b/dimos/models/Detic/third_party/CenterNet2/centernet/modeling/roi_heads/custom_fast_rcnn.py index 1f0f430d0f..26e2187c68 100644 --- a/dimos/models/Detic/third_party/CenterNet2/centernet/modeling/roi_heads/custom_fast_rcnn.py +++ b/dimos/models/Detic/third_party/CenterNet2/centernet/modeling/roi_heads/custom_fast_rcnn.py @@ -1,51 +1,38 @@ # Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved # Part of the code is from https://github.com/tztztztztz/eql.detectron2/blob/master/projects/EQL/eql/fast_rcnn.py -import logging import math -import json -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 -from detectron2.config import configurable -from detectron2.layers import Linear, ShapeSpec, batched_nms, cat, nonzero_tuple -from detectron2.modeling.box_regression import Box2BoxTransform -from detectron2.structures import Boxes, Instances -from detectron2.utils.events import get_event_storage +from detectron2.layers import ShapeSpec, cat 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 detectron2.utils.comm import get_world_size from .fed_loss import load_class_freq, get_fed_loss_inds __all__ = ["CustomFastRCNNOutputLayers"] + class CustomFastRCNNOutputLayers(FastRCNNOutputLayers): - def __init__( - self, - cfg, - input_shape: ShapeSpec, - **kwargs - ): + def __init__(self, cfg, input_shape: ShapeSpec, **kwargs): super().__init__(cfg, input_shape, **kwargs) self.use_sigmoid_ce = cfg.MODEL.ROI_BOX_HEAD.USE_SIGMOID_CE if self.use_sigmoid_ce: prior_prob = cfg.MODEL.ROI_BOX_HEAD.PRIOR_PROB bias_value = -math.log((1 - prior_prob) / prior_prob) nn.init.constant_(self.cls_score.bias, bias_value) - + self.cfg = cfg self.use_fed_loss = cfg.MODEL.ROI_BOX_HEAD.USE_FED_LOSS if self.use_fed_loss: self.fed_loss_num_cat = cfg.MODEL.ROI_BOX_HEAD.FED_LOSS_NUM_CAT self.register_buffer( - 'freq_weight', + "freq_weight", load_class_freq( - cfg.MODEL.ROI_BOX_HEAD.CAT_FREQ_PATH, + cfg.MODEL.ROI_BOX_HEAD.CAT_FREQ_PATH, cfg.MODEL.ROI_BOX_HEAD.FED_LOSS_FREQ_WEIGHT, - ) + ), ) def losses(self, predictions, proposals): @@ -54,62 +41,76 @@ def losses(self, predictions, proposals): """ scores, proposal_deltas = predictions gt_classes = ( - cat([p.gt_classes for p in proposals], dim=0) if len(proposals) else torch.empty(0) + cat([p.gt_classes for p in proposals], dim=0) + if len(proposals) + else torch.empty(0) ) num_classes = self.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!" + 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], + [ + (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) + 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_cls": loss_cls, "loss_box_reg": self.box_reg_loss( - proposal_boxes, gt_boxes, proposal_deltas, gt_classes) + proposal_boxes, gt_boxes, proposal_deltas, gt_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. + 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 + 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 + if self.use_fed_loss and (self.freq_weight is not None): # fedloss appeared = get_fed_loss_inds( - gt_classes, + gt_classes, num_sample_cats=self.fed_loss_num_cat, C=C, - weight=self.freq_weight) + weight=self.freq_weight, + ) appeared_mask = appeared.new_zeros(C + 1) - appeared_mask[appeared] = 1 # 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() 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 + 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 @@ -120,22 +121,21 @@ def softmax_cross_entropy_loss(self, pred_class_logits, gt_classes): if self.use_fed_loss and (self.freq_weight is not None): C = pred_class_logits.shape[1] - 1 appeared = get_fed_loss_inds( - gt_classes, + gt_classes, num_sample_cats=self.fed_loss_num_cat, C=C, - weight=self.freq_weight) + weight=self.freq_weight, + ) appeared_mask = appeared.new_zeros(C + 1).float() - appeared_mask[appeared] = 1. # C + 1 - appeared_mask[C] = 1. + appeared_mask[appeared] = 1.0 # C + 1 + appeared_mask[C] = 1.0 loss = F.cross_entropy( - pred_class_logits, gt_classes, - weight=appeared_mask, reduction="mean") + pred_class_logits, gt_classes, weight=appeared_mask, reduction="mean" + ) else: - loss = F.cross_entropy( - pred_class_logits, gt_classes, reduction="mean") + loss = F.cross_entropy(pred_class_logits, gt_classes, reduction="mean") return loss - def inference(self, predictions, proposals): """ enable use proposal boxes @@ -143,9 +143,10 @@ def inference(self, predictions, proposals): boxes = self.predict_boxes(predictions, proposals) scores = self.predict_probs(predictions, proposals) if self.cfg.MODEL.ROI_BOX_HEAD.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)] + 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, @@ -156,7 +157,6 @@ def inference(self, predictions, proposals): self.test_topk_per_image, ) - def predict_probs(self, predictions, proposals): """ support sigmoid diff --git a/dimos/models/Detic/third_party/CenterNet2/centernet/modeling/roi_heads/custom_roi_heads.py b/dimos/models/Detic/third_party/CenterNet2/centernet/modeling/roi_heads/custom_roi_heads.py index 90fadf1a96..0148f400c1 100644 --- a/dimos/models/Detic/third_party/CenterNet2/centernet/modeling/roi_heads/custom_roi_heads.py +++ b/dimos/models/Detic/third_party/CenterNet2/centernet/modeling/roi_heads/custom_roi_heads.py @@ -1,21 +1,12 @@ # Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved -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 detectron2.layers import ShapeSpec -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 -from detectron2.modeling.roi_heads.box_head import build_box_head from .custom_fast_rcnn import CustomFastRCNNOutputLayers @@ -24,18 +15,25 @@ class CustomROIHeads(StandardROIHeads): @classmethod def _init_box_head(self, cfg, input_shape): ret = super()._init_box_head(cfg, input_shape) - del ret['box_predictor'] - ret['box_predictor'] = CustomFastRCNNOutputLayers( - cfg, ret['box_head'].output_shape) + del ret["box_predictor"] + ret["box_predictor"] = CustomFastRCNNOutputLayers( + cfg, ret["box_head"].output_shape + ) self.debug = cfg.DEBUG if self.debug: self.debug_show_name = cfg.DEBUG_SHOW_NAME self.save_debug = cfg.SAVE_DEBUG 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.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) + ) return ret def forward(self, images, features, proposals, targets=None): @@ -59,11 +57,14 @@ def forward(self, images, features, proposals, targets=None): pred_instances = self.forward_with_given_boxes(features, pred_instances) if self.debug: from ..debug import debug_second_stage + denormalizer = lambda x: x * self.pixel_std + self.pixel_mean debug_second_stage( [denormalizer(images[0].clone())], - pred_instances, proposals=proposals, - debug_show_name=self.debug_show_name) + pred_instances, + proposals=proposals, + debug_show_name=self.debug_show_name, + ) return pred_instances, {} @@ -73,51 +74,62 @@ class CustomCascadeROIHeads(CascadeROIHeads): def _init_box_head(self, cfg, input_shape): self.mult_proposal_score = cfg.MODEL.ROI_BOX_HEAD.MULT_PROPOSAL_SCORE ret = super()._init_box_head(cfg, input_shape) - del ret['box_predictors'] + 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): + for box_head, bbox_reg_weights in zip( + ret["box_heads"], cascade_bbox_reg_weights + ): box_predictors.append( CustomFastRCNNOutputLayers( - cfg, box_head.output_shape, - box2box_transform=Box2BoxTransform(weights=bbox_reg_weights) - )) - ret['box_predictors'] = box_predictors + cfg, + box_head.output_shape, + box2box_transform=Box2BoxTransform(weights=bbox_reg_weights), + ) + ) + ret["box_predictors"] = box_predictors self.debug = cfg.DEBUG if self.debug: self.debug_show_name = cfg.DEBUG_SHOW_NAME self.save_debug = cfg.SAVE_DEBUG 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.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) + ) return ret - def _forward_box(self, features, proposals, targets=None): """ Add mult proposal scores at testing """ 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] + 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] - + 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) + proposals = self._create_proposals_from_boxes( + prev_pred_boxes, image_sizes + ) if self.training: proposals = self._match_and_label_boxes(proposals, k, targets) predictions = self._run_stage(features, proposals, k) - prev_pred_boxes = self.box_predictor[k].predict_boxes(predictions, proposals) + prev_pred_boxes = self.box_predictor[k].predict_boxes( + predictions, proposals + ) head_outputs.append((self.box_predictor[k], predictions, proposals)) if self.training: @@ -126,7 +138,9 @@ def _forward_box(self, features, proposals, targets=None): for stage, (predictor, predictions, proposals) in enumerate(head_outputs): with storage.name_scope("stage{}".format(stage)): stage_losses = predictor.losses(predictions, proposals) - losses.update({k + "_stage{}".format(stage): v for k, v in stage_losses.items()}) + 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) @@ -135,10 +149,11 @@ def _forward_box(self, features, proposals, targets=None): 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)] + scores = [ + (s * ps[:, None]) ** 0.5 for s, ps in zip(scores, proposal_scores) + ] predictor, predictions, proposals = head_outputs[-1] boxes = predictor.predict_boxes(predictions, proposals) @@ -150,13 +165,13 @@ def _forward_box(self, features, proposals, targets=None): predictor.test_nms_thresh, predictor.test_topk_per_image, ) - + return pred_instances def forward(self, images, features, proposals, targets=None): - ''' + """ enable debug - ''' + """ if not self.debug: del images if self.training: @@ -173,13 +188,14 @@ def forward(self, images, features, proposals, targets=None): pred_instances = self.forward_with_given_boxes(features, pred_instances) if self.debug: from ..debug import debug_second_stage + denormalizer = lambda x: x * self.pixel_std + self.pixel_mean debug_second_stage( [denormalizer(x.clone()) for x in images], - pred_instances, proposals=proposals, + pred_instances, + proposals=proposals, save_debug=self.save_debug, debug_show_name=self.debug_show_name, - vis_thresh=self.vis_thresh) + vis_thresh=self.vis_thresh, + ) return pred_instances, {} - - diff --git a/dimos/models/Detic/third_party/CenterNet2/centernet/modeling/roi_heads/fed_loss.py b/dimos/models/Detic/third_party/CenterNet2/centernet/modeling/roi_heads/fed_loss.py index 290f0f0720..18c04d5512 100644 --- a/dimos/models/Detic/third_party/CenterNet2/centernet/modeling/roi_heads/fed_loss.py +++ b/dimos/models/Detic/third_party/CenterNet2/centernet/modeling/roi_heads/fed_loss.py @@ -1,21 +1,20 @@ import torch import json -import numpy as np -from torch.nn import functional as F -def load_class_freq( - path='datasets/lvis/lvis_v1_train_cat_info.json', - freq_weight=0.5): - cat_info = json.load(open(path, 'r')) + +def load_class_freq(path="datasets/lvis/lvis_v1_train_cat_info.json", freq_weight=0.5): + 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'])]) + [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=50, C=1203, \ - weight=None, fed_cls_inds=-1): - appeared = torch.unique(gt_classes) # C' + gt_classes, num_sample_cats=50, C=1203, weight=None, fed_cls_inds=-1 +): + appeared = torch.unique(gt_classes) # C' prob = appeared.new_ones(C + 1).float() prob[-1] = 0 if len(appeared) < num_sample_cats: @@ -25,7 +24,7 @@ def get_fed_loss_inds( if fed_cls_inds > 0: prob[fed_cls_inds:] = 0 more_appeared = torch.multinomial( - prob, num_sample_cats - len(appeared), - replacement=False) + prob, num_sample_cats - len(appeared), replacement=False + ) appeared = torch.cat([appeared, more_appeared]) - return appeared \ No newline at end of file + return appeared diff --git a/dimos/models/Detic/third_party/CenterNet2/demo.py b/dimos/models/Detic/third_party/CenterNet2/demo.py index 5213faf4d8..137224935f 100644 --- a/dimos/models/Detic/third_party/CenterNet2/demo.py +++ b/dimos/models/Detic/third_party/CenterNet2/demo.py @@ -13,13 +13,15 @@ from predictor import VisualizationDemo from centernet.config import add_centernet_config + # constants WINDOW_NAME = "CenterNet2 detections" from detectron2.utils.video_visualizer import VideoVisualizer -from detectron2.utils.visualizer import ColorMode, Visualizer +from detectron2.utils.visualizer import ColorMode from detectron2.data import MetadataCatalog + def setup_cfg(args): # load config from file and command-line arguments cfg = get_cfg() @@ -29,10 +31,12 @@ def setup_cfg(args): # Set score_threshold for builtin models cfg.MODEL.RETINANET.SCORE_THRESH_TEST = args.confidence_threshold cfg.MODEL.ROI_HEADS.SCORE_THRESH_TEST = args.confidence_threshold - if cfg.MODEL.META_ARCHITECTURE in ['ProposalNetwork', 'CenterNetDetector']: + if cfg.MODEL.META_ARCHITECTURE in ["ProposalNetwork", "CenterNetDetector"]: cfg.MODEL.CENTERNET.INFERENCE_TH = args.confidence_threshold cfg.MODEL.CENTERNET.NMS_TH = cfg.MODEL.ROI_HEADS.NMS_THRESH_TEST - cfg.MODEL.PANOPTIC_FPN.COMBINE.INSTANCES_CONFIDENCE_THRESH = args.confidence_threshold + cfg.MODEL.PANOPTIC_FPN.COMBINE.INSTANCES_CONFIDENCE_THRESH = ( + args.confidence_threshold + ) cfg.freeze() return cfg @@ -45,13 +49,16 @@ def get_parser(): metavar="FILE", help="path to config file", ) - parser.add_argument("--webcam", action="store_true", help="Take inputs from webcam.") + parser.add_argument( + "--webcam", action="store_true", help="Take inputs from webcam." + ) parser.add_argument("--video-input", help="Path to video file.") - parser.add_argument("--input", nargs="+", help="A list of space separated input images") + parser.add_argument( + "--input", nargs="+", help="A list of space separated input images" + ) parser.add_argument( "--output", - help="A file or directory to save output visualizations. " - "If not given, will show output in an OpenCV window.", + help="A file or directory to save output visualizations. If not given, will show output in an OpenCV window.", ) parser.add_argument( @@ -88,15 +95,17 @@ def get_parser(): visualizer = VideoVisualizer( MetadataCatalog.get( cfg.DATASETS.TEST[0] if len(cfg.DATASETS.TEST) else "__unused" - ), - instance_mode=ColorMode.IMAGE) + ), + instance_mode=ColorMode.IMAGE, + ) for path in tqdm.tqdm(args.input, disable=not args.output): # use PIL, to be consistent with evaluation img = read_image(path, format="BGR") start_time = time.time() predictions, visualized_output = demo.run_on_image( - img, visualizer=visualizer) - if 'instances' in predictions: + img, visualizer=visualizer + ) + if "instances" in predictions: logger.info( "{}: detected {} instances in {:.2f}s".format( path, len(predictions["instances"]), time.time() - start_time @@ -134,7 +143,7 @@ def get_parser(): else: # cv2.namedWindow(WINDOW_NAME, cv2.WINDOW_NORMAL) cv2.imshow(WINDOW_NAME, visualized_output.get_image()[:, :, ::-1]) - if cv2.waitKey(1 ) == 27: + if cv2.waitKey(1) == 27: break # esc to quit elif args.webcam: assert args.input is None, "Cannot have both --input and --webcam!" @@ -149,7 +158,7 @@ def get_parser(): video = cv2.VideoCapture(args.video_input) width = int(video.get(cv2.CAP_PROP_FRAME_WIDTH)) height = int(video.get(cv2.CAP_PROP_FRAME_HEIGHT)) - frames_per_second = 15 # video.get(cv2.CAP_PROP_FPS) + frames_per_second = 15 # video.get(cv2.CAP_PROP_FPS) num_frames = int(video.get(cv2.CAP_PROP_FRAME_COUNT)) basename = os.path.basename(args.video_input) diff --git a/dimos/models/Detic/third_party/CenterNet2/predictor.py b/dimos/models/Detic/third_party/CenterNet2/predictor.py index 8a036bde3f..c9fae282b8 100644 --- a/dimos/models/Detic/third_party/CenterNet2/predictor.py +++ b/dimos/models/Detic/third_party/CenterNet2/predictor.py @@ -51,7 +51,9 @@ def run_on_image(self, image, visualizer=None): use_video_vis = True if visualizer is None: use_video_vis = False - visualizer = Visualizer(image, self.metadata, instance_mode=self.instance_mode) + 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( @@ -66,9 +68,12 @@ def run_on_image(self, image, visualizer=None): instances = predictions["instances"].to(self.cpu_device) if use_video_vis: vis_output = visualizer.draw_instance_predictions( - image, predictions=instances) + image, predictions=instances + ) else: - vis_output = visualizer.draw_instance_predictions(predictions=instances) + vis_output = visualizer.draw_instance_predictions( + predictions=instances + ) elif "proposals" in predictions: instances = predictions["proposals"].to(self.cpu_device) instances.pred_boxes = instances.proposal_boxes @@ -76,9 +81,12 @@ def run_on_image(self, image, visualizer=None): instances.pred_classes[:] = -1 if use_video_vis: vis_output = visualizer.draw_instance_predictions( - image, predictions=instances) + image, predictions=instances + ) else: - vis_output = visualizer.draw_instance_predictions(predictions=instances) + vis_output = visualizer.draw_instance_predictions( + predictions=instances + ) return predictions, vis_output @@ -112,7 +120,9 @@ def process_predictions(frame, predictions): ) elif "instances" in predictions: predictions = predictions["instances"].to(self.cpu_device) - vis_frame = video_visualizer.draw_instance_predictions(frame, predictions) + 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) @@ -122,7 +132,9 @@ def process_predictions(frame, predictions): predictions.pred_boxes = predictions.proposal_boxes predictions.scores = predictions.objectness_logits predictions.pred_classes[:] = -1 - vis_frame = video_visualizer.draw_instance_predictions(frame, predictions) + vis_frame = video_visualizer.draw_instance_predictions( + frame, predictions + ) # Converts Matplotlib RGB format to OpenCV BGR format vis_frame = cv2.cvtColor(vis_frame.get_image(), cv2.COLOR_RGB2BGR) diff --git a/dimos/models/Detic/third_party/CenterNet2/tools/analyze_model.py b/dimos/models/Detic/third_party/CenterNet2/tools/analyze_model.py index 8e38f8b71e..afcf734d66 100755 --- a/dimos/models/Detic/third_party/CenterNet2/tools/analyze_model.py +++ b/dimos/models/Detic/third_party/CenterNet2/tools/analyze_model.py @@ -58,13 +58,17 @@ def do_flop(cfg): 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( + "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) + "Total GFlops: {:.1f}±{:.1f}".format( + np.mean(total_flops) / 1e9, np.std(total_flops) / 1e9 + ) ) @@ -141,8 +145,7 @@ def do_structure(cfg): "--num-inputs", default=100, type=int, - help="number of inputs used to compute statistics for flops/activations, " - "both are data dependent.", + help="number of inputs used to compute statistics for flops/activations, both are data dependent.", ) args = parser.parse_args() assert not args.eval_only diff --git a/dimos/models/Detic/third_party/CenterNet2/tools/benchmark.py b/dimos/models/Detic/third_party/CenterNet2/tools/benchmark.py index aaac564001..f4ce87ba0a 100755 --- a/dimos/models/Detic/third_party/CenterNet2/tools/benchmark.py +++ b/dimos/models/Detic/third_party/CenterNet2/tools/benchmark.py @@ -22,7 +22,13 @@ build_detection_train_loader, ) from detectron2.data.benchmark import DataLoaderBenchmark -from detectron2.engine import AMPTrainer, SimpleTrainer, default_argument_parser, hooks, launch +from detectron2.engine import ( + AMPTrainer, + SimpleTrainer, + default_argument_parser, + hooks, + launch, +) from detectron2.modeling import build_model from detectron2.solver import build_optimizer from detectron2.utils import comm @@ -62,7 +68,7 @@ def create_data_benchmark(cfg, args): def RAM_msg(): vram = psutil.virtual_memory() return "RAM Usage: {:.2f}/{:.2f} GB".format( - (vram.total - vram.available) / 1024 ** 3, vram.total / 1024 ** 3 + (vram.total - vram.available) / 1024**3, vram.total / 1024**3 ) @@ -117,13 +123,17 @@ def f(): yield from data max_iter = 400 - trainer = (AMPTrainer if cfg.SOLVER.AMP.ENABLED else SimpleTrainer)(model, f(), optimizer) + trainer = (AMPTrainer if cfg.SOLVER.AMP.ENABLED else SimpleTrainer)( + model, f(), optimizer + ) trainer.register_hooks( [ hooks.IterationTimer(), hooks.PeriodicWriter([CommonMetricPrinter(max_iter)]), hooks.TorchProfiler( - lambda trainer: trainer.iter == max_iter - 1, cfg.OUTPUT_DIR, save_tensorboard=True + lambda trainer: trainer.iter == max_iter - 1, + cfg.OUTPUT_DIR, + save_tensorboard=True, ), ] ) @@ -172,7 +182,9 @@ def f(): if __name__ == "__main__": parser = default_argument_parser() - parser.add_argument("--task", choices=["train", "eval", "data", "data_advanced"], required=True) + parser.add_argument( + "--task", choices=["train", "eval", "data", "data_advanced"], required=True + ) args = parser.parse_args() assert not args.eval_only @@ -194,4 +206,11 @@ def f(): f = benchmark_eval # only benchmark single-GPU inference. assert args.num_gpus == 1 and args.num_machines == 1 - launch(f, args.num_gpus, args.num_machines, args.machine_rank, args.dist_url, args=(args,)) + launch( + f, + args.num_gpus, + args.num_machines, + args.machine_rank, + args.dist_url, + args=(args,), + ) diff --git a/dimos/models/Detic/third_party/CenterNet2/tools/deploy/export_model.py b/dimos/models/Detic/third_party/CenterNet2/tools/deploy/export_model.py index bb1bcee632..a8d94b5fe4 100755 --- a/dimos/models/Detic/third_party/CenterNet2/tools/deploy/export_model.py +++ b/dimos/models/Detic/third_party/CenterNet2/tools/deploy/export_model.py @@ -11,7 +11,11 @@ from detectron2.config import get_cfg from detectron2.data import build_detection_test_loader, detection_utils from detectron2.evaluation import COCOEvaluator, inference_on_dataset, print_csv_format -from detectron2.export import TracingAdapter, dump_torchscript_IR, scripting_with_instances +from detectron2.export import ( + TracingAdapter, + dump_torchscript_IR, + scripting_with_instances, +) from detectron2.modeling import GeneralizedRCNN, RetinaNet, build_model from detectron2.modeling.postprocessing import detector_postprocess from detectron2.projects.point_rend import add_pointrend_config @@ -80,14 +84,18 @@ def __init__(self): if isinstance(torch_model, GeneralizedRCNN): class ScriptableAdapter(ScriptableAdapterBase): - def forward(self, inputs: Tuple[Dict[str, torch.Tensor]]) -> List[Dict[str, Tensor]]: + def forward( + self, inputs: Tuple[Dict[str, torch.Tensor]] + ) -> List[Dict[str, Tensor]]: instances = self.model.inference(inputs, do_postprocess=False) return [i.get_fields() for i in instances] else: class ScriptableAdapter(ScriptableAdapterBase): - def forward(self, inputs: Tuple[Dict[str, torch.Tensor]]) -> List[Dict[str, Tensor]]: + def forward( + self, inputs: Tuple[Dict[str, torch.Tensor]] + ) -> List[Dict[str, Tensor]]: instances = self.model(inputs) return [i.get_fields() for i in instances] @@ -139,7 +147,9 @@ def eval_wrapper(inputs): unused in deployment but needed for evaluation. We add it manually here. """ input = inputs[0] - instances = traceable_model.outputs_schema(ts_model(input["image"]))[0]["instances"] + instances = traceable_model.outputs_schema(ts_model(input["image"]))[0][ + "instances" + ] postprocessed = detector_postprocess(instances, input["height"], input["width"]) return [{"instances": postprocessed}] @@ -147,7 +157,6 @@ def eval_wrapper(inputs): def get_sample_inputs(args): - if args.sample_image is None: # get a first batch from dataset data_loader = build_detection_test_loader(cfg, cfg.DATASETS.TEST[0]) @@ -155,7 +164,9 @@ def get_sample_inputs(args): return first_batch else: # get a sample data - original_image = detection_utils.read_image(args.sample_image, format=cfg.INPUT.FORMAT) + original_image = detection_utils.read_image( + args.sample_image, format=cfg.INPUT.FORMAT + ) # Do same preprocessing as DefaultPredictor aug = T.ResizeShortestEdge( [cfg.INPUT.MIN_SIZE_TEST, cfg.INPUT.MIN_SIZE_TEST], cfg.INPUT.MAX_SIZE_TEST @@ -185,8 +196,12 @@ def get_sample_inputs(args): help="Method to export models", default="tracing", ) - parser.add_argument("--config-file", default="", metavar="FILE", help="path to config file") - parser.add_argument("--sample-image", default=None, type=str, help="sample image for input") + parser.add_argument( + "--config-file", default="", metavar="FILE", help="path to config file" + ) + parser.add_argument( + "--sample-image", default=None, type=str, help="sample image for input" + ) parser.add_argument("--run-eval", action="store_true") parser.add_argument("--output", help="output directory for the converted model") parser.add_argument( @@ -223,10 +238,11 @@ def get_sample_inputs(args): # run evaluation with the converted model if args.run_eval: assert exported_model is not None, ( - "Python inference is not yet implemented for " - f"export_method={args.export_method}, format={args.format}." + f"Python inference is not yet implemented for export_method={args.export_method}, format={args.format}." + ) + logger.info( + "Running evaluation ... this takes a long time if you export to CPU." ) - logger.info("Running evaluation ... this takes a long time if you export to CPU.") dataset = cfg.DATASETS.TEST[0] data_loader = build_detection_test_loader(cfg, dataset) # NOTE: hard-coded evaluator. change to the evaluator for your dataset diff --git a/dimos/models/Detic/third_party/CenterNet2/tools/lazyconfig_train_net.py b/dimos/models/Detic/third_party/CenterNet2/tools/lazyconfig_train_net.py index bb62d36c0c..2747232486 100755 --- a/dimos/models/Detic/third_party/CenterNet2/tools/lazyconfig_train_net.py +++ b/dimos/models/Detic/third_party/CenterNet2/tools/lazyconfig_train_net.py @@ -12,6 +12,7 @@ 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 @@ -35,7 +36,9 @@ def do_test(cfg, model): if "evaluator" in cfg.dataloader: ret = inference_on_dataset( - model, instantiate(cfg.dataloader.test), instantiate(cfg.dataloader.evaluator) + model, + instantiate(cfg.dataloader.test), + instantiate(cfg.dataloader.evaluator), ) print_csv_format(ret) return ret @@ -71,7 +74,9 @@ def do_train(args, cfg): 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) + trainer = (AMPTrainer if cfg.train.amp.enabled else SimpleTrainer)( + model, train_loader, optim + ) checkpointer = DetectionCheckpointer( model, cfg.train.output_dir, diff --git a/dimos/models/Detic/third_party/CenterNet2/tools/lightning_train_net.py b/dimos/models/Detic/third_party/CenterNet2/tools/lightning_train_net.py index f6734b566b..d99be881c1 100644 --- a/dimos/models/Detic/third_party/CenterNet2/tools/lightning_train_net.py +++ b/dimos/models/Detic/third_party/CenterNet2/tools/lightning_train_net.py @@ -65,7 +65,9 @@ def setup(self, stage: str): self.model, self.cfg.OUTPUT_DIR, ) - logger.info(f"Load model weights from checkpoint: {self.cfg.MODEL.WEIGHTS}.") + logger.info( + f"Load model weights from checkpoint: {self.cfg.MODEL.WEIGHTS}." + ) # Only load weights, use lightning checkpointing if you want to resume self.checkpointer.load(self.cfg.MODEL.WEIGHTS) @@ -94,7 +96,9 @@ def training_step(self, batch, batch_idx): opt = self.optimizers() self.storage.put_scalar( - "lr", opt.param_groups[self._best_param_group_id]["lr"], smoothing_hint=False + "lr", + opt.param_groups[self._best_param_group_id]["lr"], + smoothing_hint=False, ) self.iteration_timer.after_step() self.storage.step() @@ -149,8 +153,9 @@ def validation_epoch_end(self, _outputs): v = float(v) except Exception as e: raise ValueError( - "[EvalHook] eval_function should return a nested dict of float. " - "Got '{}: {}' instead.".format(k, v) + "[EvalHook] eval_function should return a nested dict of float. Got '{}: {}' instead.".format( + k, v + ) ) from e self.storage.put_scalars(**flattened_results, smoothing_hint=False) @@ -191,9 +196,11 @@ def train(cfg, args): trainer_params = { # training loop is bounded by max steps, use a large max_epochs to make # sure max_steps is met first - "max_epochs": 10 ** 8, + "max_epochs": 10**8, "max_steps": cfg.SOLVER.MAX_ITER, - "val_check_interval": cfg.TEST.EVAL_PERIOD if cfg.TEST.EVAL_PERIOD > 0 else 10 ** 8, + "val_check_interval": cfg.TEST.EVAL_PERIOD + if cfg.TEST.EVAL_PERIOD > 0 + else 10**8, "num_nodes": args.num_machines, "gpus": args.num_gpus, "num_sanity_val_steps": 0, @@ -208,7 +215,9 @@ def train(cfg, args): logger.info(f"Resuming training from checkpoint: {last_checkpoint}.") trainer = pl.Trainer(**trainer_params) - logger.info(f"start to train with {args.num_machines} nodes and {args.num_gpus} GPUs") + logger.info( + f"start to train with {args.num_machines} nodes and {args.num_gpus} GPUs" + ) module = TrainingModule(cfg) data_module = DataModule(cfg) diff --git a/dimos/models/Detic/third_party/CenterNet2/tools/plain_train_net.py b/dimos/models/Detic/third_party/CenterNet2/tools/plain_train_net.py index 4851a8398e..940edd99dc 100755 --- a/dimos/models/Detic/third_party/CenterNet2/tools/plain_train_net.py +++ b/dimos/models/Detic/third_party/CenterNet2/tools/plain_train_net.py @@ -33,7 +33,12 @@ build_detection_test_loader, build_detection_train_loader, ) -from detectron2.engine import default_argument_parser, default_setup, default_writers, launch +from detectron2.engine import ( + default_argument_parser, + default_setup, + default_writers, + launch, +) from detectron2.evaluation import ( CityscapesInstanceEvaluator, CityscapesSemSegEvaluator, @@ -77,14 +82,14 @@ def get_evaluator(cfg, dataset_name, output_folder=None): if evaluator_type == "coco_panoptic_seg": evaluator_list.append(COCOPanopticEvaluator(dataset_name, output_folder)) if evaluator_type == "cityscapes_instance": - assert ( - torch.cuda.device_count() > comm.get_rank() - ), "CityscapesEvaluator currently do not work with multiple machines." + assert torch.cuda.device_count() > comm.get_rank(), ( + "CityscapesEvaluator currently do not work with multiple machines." + ) return CityscapesInstanceEvaluator(dataset_name) if evaluator_type == "cityscapes_sem_seg": - assert ( - torch.cuda.device_count() > comm.get_rank() - ), "CityscapesEvaluator currently do not work with multiple machines." + assert torch.cuda.device_count() > comm.get_rank(), ( + "CityscapesEvaluator currently do not work with multiple machines." + ) return CityscapesSemSegEvaluator(dataset_name) if evaluator_type == "pascal_voc": return PascalVOCDetectionEvaluator(dataset_name) @@ -92,7 +97,9 @@ def get_evaluator(cfg, dataset_name, output_folder=None): 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) + "no Evaluator for the dataset {} with the type {}".format( + dataset_name, evaluator_type + ) ) if len(evaluator_list) == 1: return evaluator_list[0] @@ -125,7 +132,10 @@ def do_train(cfg, model, resume=False): model, cfg.OUTPUT_DIR, optimizer=optimizer, scheduler=scheduler ) start_iter = ( - checkpointer.resume_or_load(cfg.MODEL.WEIGHTS, resume=resume).get("iteration", -1) + 1 + checkpointer.resume_or_load(cfg.MODEL.WEIGHTS, resume=resume).get( + "iteration", -1 + ) + + 1 ) max_iter = cfg.SOLVER.MAX_ITER @@ -133,7 +143,9 @@ def do_train(cfg, model, resume=False): checkpointer, cfg.SOLVER.CHECKPOINT_PERIOD, max_iter=max_iter ) - writers = default_writers(cfg.OUTPUT_DIR, max_iter) if comm.is_main_process() else [] + 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 @@ -147,7 +159,9 @@ def do_train(cfg, model, resume=False): 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()} + 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) @@ -155,7 +169,9 @@ def do_train(cfg, model, resume=False): optimizer.zero_grad() losses.backward() optimizer.step() - storage.put_scalar("lr", optimizer.param_groups[0]["lr"], smoothing_hint=False) + storage.put_scalar( + "lr", optimizer.param_groups[0]["lr"], smoothing_hint=False + ) scheduler.step() if ( diff --git a/dimos/models/Detic/third_party/CenterNet2/tools/train_net.py b/dimos/models/Detic/third_party/CenterNet2/tools/train_net.py index 6ebf5f60a2..137a0df4b0 100755 --- a/dimos/models/Detic/third_party/CenterNet2/tools/train_net.py +++ b/dimos/models/Detic/third_party/CenterNet2/tools/train_net.py @@ -25,7 +25,13 @@ 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.engine import ( + DefaultTrainer, + default_argument_parser, + default_setup, + hooks, + launch, +) from detectron2.evaluation import ( CityscapesInstanceEvaluator, CityscapesSemSegEvaluator, @@ -64,14 +70,14 @@ def build_evaluator(cfg, dataset_name, output_folder=None): if evaluator_type == "coco_panoptic_seg": evaluator_list.append(COCOPanopticEvaluator(dataset_name, output_folder)) if evaluator_type == "cityscapes_instance": - assert ( - torch.cuda.device_count() > comm.get_rank() - ), "CityscapesEvaluator currently do not work with multiple machines." + assert torch.cuda.device_count() > comm.get_rank(), ( + "CityscapesEvaluator currently do not work with multiple machines." + ) return CityscapesInstanceEvaluator(dataset_name) if evaluator_type == "cityscapes_sem_seg": - assert ( - torch.cuda.device_count() > comm.get_rank() - ), "CityscapesEvaluator currently do not work with multiple machines." + assert torch.cuda.device_count() > comm.get_rank(), ( + "CityscapesEvaluator currently do not work with multiple machines." + ) return CityscapesSemSegEvaluator(dataset_name) elif evaluator_type == "pascal_voc": return PascalVOCDetectionEvaluator(dataset_name) @@ -79,7 +85,9 @@ def build_evaluator(cfg, dataset_name, output_folder=None): 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) + "no Evaluator for the dataset {} with the type {}".format( + dataset_name, evaluator_type + ) ) elif len(evaluator_list) == 1: return evaluator_list[0] diff --git a/dimos/models/Detic/third_party/CenterNet2/tools/visualize_data.py b/dimos/models/Detic/third_party/CenterNet2/tools/visualize_data.py index fd0ba8347b..5887710a20 100755 --- a/dimos/models/Detic/third_party/CenterNet2/tools/visualize_data.py +++ b/dimos/models/Detic/third_party/CenterNet2/tools/visualize_data.py @@ -7,7 +7,11 @@ import tqdm from detectron2.config import get_cfg -from detectron2.data import DatasetCatalog, MetadataCatalog, build_detection_train_loader +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 @@ -75,7 +79,9 @@ def output(vis, fname): 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"]] + 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), @@ -84,7 +90,9 @@ def output(vis, fname): ) output(vis, str(per_image["image_id"]) + ".jpg") else: - dicts = list(chain.from_iterable([DatasetCatalog.get(k) for k in cfg.DATASETS.TRAIN])) + 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): diff --git a/dimos/models/Detic/third_party/CenterNet2/tools/visualize_json_results.py b/dimos/models/Detic/third_party/CenterNet2/tools/visualize_json_results.py index 472190e0b3..accf34d339 100755 --- a/dimos/models/Detic/third_party/CenterNet2/tools/visualize_json_results.py +++ b/dimos/models/Detic/third_party/CenterNet2/tools/visualize_json_results.py @@ -42,10 +42,16 @@ def create_instances(predictions, image_size): 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( + "--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") + 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() diff --git a/dimos/models/Detic/third_party/CenterNet2/train_net.py b/dimos/models/Detic/third_party/CenterNet2/train_net.py index d903efde07..6f12713a9a 100644 --- a/dimos/models/Detic/third_party/CenterNet2/train_net.py +++ b/dimos/models/Detic/third_party/CenterNet2/train_net.py @@ -5,7 +5,6 @@ from torch.nn.parallel import DistributedDataParallel import time import datetime -import json from fvcore.common.timer import Timer import detectron2.utils.comm as comm @@ -40,34 +39,39 @@ logger = logging.getLogger("detectron2") + def do_test(cfg, model): results = OrderedDict() for dataset_name in cfg.DATASETS.TEST: - mapper = None if cfg.INPUT.TEST_INPUT_TYPE == 'default' else \ - DatasetMapper( - cfg, False, augmentations=build_custom_augmentation(cfg, False)) + mapper = ( + None + if cfg.INPUT.TEST_INPUT_TYPE == "default" + else DatasetMapper( + cfg, False, augmentations=build_custom_augmentation(cfg, False) + ) + ) data_loader = build_detection_test_loader(cfg, dataset_name, mapper=mapper) output_folder = os.path.join( - cfg.OUTPUT_DIR, "inference_{}".format(dataset_name)) + cfg.OUTPUT_DIR, "inference_{}".format(dataset_name) + ) evaluator_type = MetadataCatalog.get(dataset_name).evaluator_type if evaluator_type == "lvis": evaluator = LVISEvaluator(dataset_name, cfg, True, output_folder) - elif evaluator_type == 'coco': + elif evaluator_type == "coco": evaluator = COCOEvaluator(dataset_name, cfg, True, output_folder) else: assert 0, evaluator_type - - results[dataset_name] = inference_on_dataset( - model, data_loader, evaluator) + + results[dataset_name] = inference_on_dataset(model, data_loader, evaluator) if comm.is_main_process(): - logger.info("Evaluation results for {} in csv format:".format( - dataset_name)) + logger.info("Evaluation results for {} in csv format:".format(dataset_name)) print_csv_format(results[dataset_name]) 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) @@ -79,13 +83,17 @@ def do_train(cfg, model, resume=False): start_iter = ( checkpointer.resume_or_load( - cfg.MODEL.WEIGHTS, resume=resume, - ).get("iteration", -1) + 1 + cfg.MODEL.WEIGHTS, + resume=resume, + ).get("iteration", -1) + + 1 ) if cfg.SOLVER.RESET_ITER: - logger.info('Reset loaded iteration. Start training from iteration 0.') + logger.info("Reset loaded iteration. Start training from iteration 0.") start_iter = 0 - max_iter = cfg.SOLVER.MAX_ITER if cfg.SOLVER.TRAIN_ITER < 0 else cfg.SOLVER.TRAIN_ITER + max_iter = ( + cfg.SOLVER.MAX_ITER if cfg.SOLVER.TRAIN_ITER < 0 else cfg.SOLVER.TRAIN_ITER + ) periodic_checkpointer = PeriodicCheckpointer( checkpointer, cfg.SOLVER.CHECKPOINT_PERIOD, max_iter=max_iter @@ -101,15 +109,22 @@ def do_train(cfg, model, resume=False): else [] ) - - mapper = DatasetMapper(cfg, True) if cfg.INPUT.CUSTOM_AUG == '' else \ - DatasetMapper(cfg, True, augmentations=build_custom_augmentation(cfg, True)) - if cfg.DATALOADER.SAMPLER_TRAIN in ['TrainingSampler', 'RepeatFactorTrainingSampler']: + mapper = ( + DatasetMapper(cfg, True) + if cfg.INPUT.CUSTOM_AUG == "" + else DatasetMapper( + cfg, True, augmentations=build_custom_augmentation(cfg, True) + ) + ) + if cfg.DATALOADER.SAMPLER_TRAIN in [ + "TrainingSampler", + "RepeatFactorTrainingSampler", + ]: data_loader = build_detection_train_loader(cfg, mapper=mapper) else: - from centernet.data.custom_dataset_dataloader import build_custom_train_loader - data_loader = build_custom_train_loader(cfg, mapper=mapper) + from centernet.data.custom_dataset_dataloader import build_custom_train_loader + data_loader = build_custom_train_loader(cfg, mapper=mapper) logger.info("Starting training from iteration {}".format(start_iter)) with EventStorage(start_iter) as storage: @@ -124,23 +139,23 @@ def do_train(cfg, model, resume=False): storage.step() loss_dict = model(data) - losses = sum( - loss for k, loss in loss_dict.items()) + losses = sum(loss for k, loss in loss_dict.items()) assert torch.isfinite(losses).all(), loss_dict - loss_dict_reduced = {k: v.item() \ - for k, v in comm.reduce_dict(loss_dict).items()} + 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) + 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) + "lr", optimizer.param_groups[0]["lr"], smoothing_hint=False + ) step_time = step_timer.seconds() storage.put_scalars(time=step_time) @@ -155,8 +170,9 @@ def do_train(cfg, model, resume=False): do_test(cfg, model) comm.synchronize() - if iteration - start_iter > 5 and \ - (iteration % 20 == 0 or iteration == max_iter): + if iteration - start_iter > 5 and ( + iteration % 20 == 0 or iteration == max_iter + ): for writer in writers: writer.write() periodic_checkpointer.step(iteration) @@ -164,7 +180,10 @@ def do_train(cfg, model, resume=False): total_time = time.perf_counter() - start_time logger.info( "Total training time: {}".format( - str(datetime.timedelta(seconds=int(total_time))))) + str(datetime.timedelta(seconds=int(total_time))) + ) + ) + def setup(args): """ @@ -174,10 +193,10 @@ def setup(args): add_centernet_config(cfg) cfg.merge_from_file(args.config_file) cfg.merge_from_list(args.opts) - if '/auto' in cfg.OUTPUT_DIR: + if "/auto" in cfg.OUTPUT_DIR: file_name = os.path.basename(args.config_file)[:-5] - cfg.OUTPUT_DIR = cfg.OUTPUT_DIR.replace('/auto', '/{}'.format(file_name)) - logger.info('OUTPUT_DIR: {}'.format(cfg.OUTPUT_DIR)) + cfg.OUTPUT_DIR = cfg.OUTPUT_DIR.replace("/auto", "/{}".format(file_name)) + logger.info("OUTPUT_DIR: {}".format(cfg.OUTPUT_DIR)) cfg.freeze() default_setup(cfg, args) return cfg @@ -201,8 +220,10 @@ def main(args): distributed = comm.get_world_size() > 1 if distributed: model = DistributedDataParallel( - model, device_ids=[comm.get_local_rank()], broadcast_buffers=False, - find_unused_parameters=True + model, + device_ids=[comm.get_local_rank()], + broadcast_buffers=False, + find_unused_parameters=True, ) do_train(cfg, model, resume=args.resume) @@ -211,12 +232,13 @@ def main(args): if __name__ == "__main__": args = default_argument_parser() - args.add_argument('--manual_device', default='') + args.add_argument("--manual_device", default="") args = args.parse_args() - if args.manual_device != '': - os.environ['CUDA_VISIBLE_DEVICES'] = args.manual_device - args.dist_url = 'tcp://127.0.0.1:{}'.format( - torch.randint(11111, 60000, (1,))[0].item()) + if args.manual_device != "": + os.environ["CUDA_VISIBLE_DEVICES"] = args.manual_device + args.dist_url = "tcp://127.0.0.1:{}".format( + torch.randint(11111, 60000, (1,))[0].item() + ) print("Command Line Args:", args) launch( main, diff --git a/dimos/models/Detic/third_party/Deformable-DETR/benchmark.py b/dimos/models/Detic/third_party/Deformable-DETR/benchmark.py index 5919477899..a79eb49b2b 100644 --- a/dimos/models/Detic/third_party/Deformable-DETR/benchmark.py +++ b/dimos/models/Detic/third_party/Deformable-DETR/benchmark.py @@ -7,6 +7,7 @@ """ Benchmark inference speed of Deformable DETR. """ + import os import time import argparse @@ -20,11 +21,20 @@ def get_benckmark_arg_parser(): - parser = argparse.ArgumentParser('Benchmark inference speed of Deformable DETR.') - parser.add_argument('--num_iters', type=int, default=300, help='total iters to benchmark speed') - parser.add_argument('--warm_iters', type=int, default=5, help='ignore first several iters that are very slow') - parser.add_argument('--batch_size', type=int, default=1, help='batch size in inference') - parser.add_argument('--resume', type=str, help='load the pre-trained checkpoint') + parser = argparse.ArgumentParser("Benchmark inference speed of Deformable DETR.") + parser.add_argument( + "--num_iters", type=int, default=300, help="total iters to benchmark speed" + ) + parser.add_argument( + "--warm_iters", + type=int, + default=5, + help="ignore first several iters that are very slow", + ) + parser.add_argument( + "--batch_size", type=int, default=1, help="batch size in inference" + ) + parser.add_argument("--resume", type=str, help="load the pre-trained checkpoint") return parser @@ -38,7 +48,7 @@ def measure_average_inference_time(model, inputs, num_iters=100, warm_iters=5): torch.cuda.synchronize() t = time.perf_counter() - t_ if iter_ >= warm_iters: - ts.append(t) + ts.append(t) print(ts) return sum(ts) / len(ts) @@ -46,22 +56,25 @@ def measure_average_inference_time(model, inputs, num_iters=100, warm_iters=5): def benchmark(): args, _ = get_benckmark_arg_parser().parse_known_args() main_args = get_main_args_parser().parse_args(_) - assert args.warm_iters < args.num_iters and args.num_iters > 0 and args.warm_iters >= 0 + assert ( + args.warm_iters < args.num_iters and args.num_iters > 0 and args.warm_iters >= 0 + ) assert args.batch_size > 0 assert args.resume is None or os.path.exists(args.resume) - dataset = build_dataset('val', main_args) + dataset = build_dataset("val", main_args) model, _, _ = build_model(main_args) model.cuda() model.eval() if args.resume is not None: ckpt = torch.load(args.resume, map_location=lambda storage, loc: storage) - model.load_state_dict(ckpt['model']) - inputs = nested_tensor_from_tensor_list([dataset.__getitem__(0)[0].cuda() for _ in range(args.batch_size)]) + model.load_state_dict(ckpt["model"]) + inputs = nested_tensor_from_tensor_list( + [dataset.__getitem__(0)[0].cuda() for _ in range(args.batch_size)] + ) t = measure_average_inference_time(model, inputs, args.num_iters, args.warm_iters) return 1.0 / t * args.batch_size -if __name__ == '__main__': +if __name__ == "__main__": fps = benchmark() - print(f'Inference Speed: {fps:.1f} FPS') - + print(f"Inference Speed: {fps:.1f} FPS") diff --git a/dimos/models/Detic/third_party/Deformable-DETR/datasets/__init__.py b/dimos/models/Detic/third_party/Deformable-DETR/datasets/__init__.py index f5bd856992..d34b127147 100644 --- a/dimos/models/Detic/third_party/Deformable-DETR/datasets/__init__.py +++ b/dimos/models/Detic/third_party/Deformable-DETR/datasets/__init__.py @@ -24,10 +24,11 @@ def get_coco_api_from_dataset(dataset): def build_dataset(image_set, args): - if args.dataset_file == 'coco': + if args.dataset_file == "coco": return build_coco(image_set, args) - if args.dataset_file == 'coco_panoptic': + if args.dataset_file == "coco_panoptic": # to avoid making panopticapi required for coco from .coco_panoptic import build as build_coco_panoptic + return build_coco_panoptic(image_set, args) - raise ValueError(f'dataset {args.dataset_file} not supported') + raise ValueError(f"dataset {args.dataset_file} not supported") diff --git a/dimos/models/Detic/third_party/Deformable-DETR/datasets/coco.py b/dimos/models/Detic/third_party/Deformable-DETR/datasets/coco.py index 1be8308c84..f16c999316 100644 --- a/dimos/models/Detic/third_party/Deformable-DETR/datasets/coco.py +++ b/dimos/models/Detic/third_party/Deformable-DETR/datasets/coco.py @@ -12,6 +12,7 @@ Mostly copy-paste from https://github.com/pytorch/vision/blob/13b35ff/references/detection/coco_utils.py """ + from pathlib import Path import torch @@ -24,16 +25,30 @@ class CocoDetection(TvCocoDetection): - def __init__(self, img_folder, ann_file, transforms, return_masks, cache_mode=False, local_rank=0, local_size=1): - super(CocoDetection, self).__init__(img_folder, ann_file, - cache_mode=cache_mode, local_rank=local_rank, local_size=local_size) + def __init__( + self, + img_folder, + ann_file, + transforms, + return_masks, + cache_mode=False, + local_rank=0, + local_size=1, + ): + super(CocoDetection, self).__init__( + img_folder, + ann_file, + cache_mode=cache_mode, + local_rank=local_rank, + local_size=local_size, + ) self._transforms = transforms self.prepare = ConvertCocoPolysToMask(return_masks) def __getitem__(self, idx): img, target = super(CocoDetection, self).__getitem__(idx) image_id = self.ids[idx] - target = {'image_id': image_id, 'annotations': target} + target = {"image_id": image_id, "annotations": target} img, target = self.prepare(img, target) if self._transforms is not None: img, target = self._transforms(img, target) @@ -69,7 +84,7 @@ def __call__(self, image, target): anno = target["annotations"] - anno = [obj for obj in anno if 'iscrowd' not in obj or obj['iscrowd'] == 0] + anno = [obj for obj in anno if "iscrowd" not in obj or obj["iscrowd"] == 0] boxes = [obj["bbox"] for obj in anno] # guard against no boxes via resizing @@ -112,7 +127,9 @@ def __call__(self, image, target): # for conversion to coco api area = torch.tensor([obj["area"] for obj in anno]) - iscrowd = torch.tensor([obj["iscrowd"] if "iscrowd" in obj else 0 for obj in anno]) + iscrowd = torch.tensor( + [obj["iscrowd"] if "iscrowd" in obj else 0 for obj in anno] + ) target["area"] = area[keep] target["iscrowd"] = iscrowd[keep] @@ -123,47 +140,58 @@ def __call__(self, image, target): def make_coco_transforms(image_set): - - normalize = T.Compose([ - T.ToTensor(), - T.Normalize([0.485, 0.456, 0.406], [0.229, 0.224, 0.225]) - ]) + normalize = T.Compose( + [T.ToTensor(), T.Normalize([0.485, 0.456, 0.406], [0.229, 0.224, 0.225])] + ) scales = [480, 512, 544, 576, 608, 640, 672, 704, 736, 768, 800] - if image_set == 'train': - return T.Compose([ - T.RandomHorizontalFlip(), - T.RandomSelect( - T.RandomResize(scales, max_size=1333), - T.Compose([ - T.RandomResize([400, 500, 600]), - T.RandomSizeCrop(384, 600), + if image_set == "train": + return T.Compose( + [ + T.RandomHorizontalFlip(), + T.RandomSelect( T.RandomResize(scales, max_size=1333), - ]) - ), - normalize, - ]) - - if image_set == 'val': - return T.Compose([ - T.RandomResize([800], max_size=1333), - normalize, - ]) - - raise ValueError(f'unknown {image_set}') + T.Compose( + [ + T.RandomResize([400, 500, 600]), + T.RandomSizeCrop(384, 600), + T.RandomResize(scales, max_size=1333), + ] + ), + ), + normalize, + ] + ) + + if image_set == "val": + return T.Compose( + [ + T.RandomResize([800], max_size=1333), + normalize, + ] + ) + + raise ValueError(f"unknown {image_set}") def build(image_set, args): root = Path(args.coco_path) - assert root.exists(), f'provided COCO path {root} does not exist' - mode = 'instances' + assert root.exists(), f"provided COCO path {root} does not exist" + mode = "instances" PATHS = { - "train": (root / "train2017", root / "annotations" / f'{mode}_train2017.json'), - "val": (root / "val2017", root / "annotations" / f'{mode}_val2017.json'), + "train": (root / "train2017", root / "annotations" / f"{mode}_train2017.json"), + "val": (root / "val2017", root / "annotations" / f"{mode}_val2017.json"), } img_folder, ann_file = PATHS[image_set] - dataset = CocoDetection(img_folder, ann_file, transforms=make_coco_transforms(image_set), return_masks=args.masks, - cache_mode=args.cache_mode, local_rank=get_local_rank(), local_size=get_local_size()) + dataset = CocoDetection( + img_folder, + ann_file, + transforms=make_coco_transforms(image_set), + return_masks=args.masks, + cache_mode=args.cache_mode, + local_rank=get_local_rank(), + local_size=get_local_size(), + ) return dataset diff --git a/dimos/models/Detic/third_party/Deformable-DETR/datasets/coco_eval.py b/dimos/models/Detic/third_party/Deformable-DETR/datasets/coco_eval.py index 9a3ebe7e7d..6887ee5b14 100644 --- a/dimos/models/Detic/third_party/Deformable-DETR/datasets/coco_eval.py +++ b/dimos/models/Detic/third_party/Deformable-DETR/datasets/coco_eval.py @@ -14,6 +14,7 @@ The difference is that there is less copy-pasting from pycocotools in the end of the file, as python3 can suppress prints with contextlib """ + import os import contextlib import copy @@ -49,7 +50,7 @@ def update(self, predictions): results = self.prepare(predictions, iou_type) # suppress pycocotools prints - with open(os.devnull, 'w') as devnull: + with open(os.devnull, "w") as devnull: with contextlib.redirect_stdout(devnull): coco_dt = COCO.loadRes(self.coco_gt, results) if results else COCO() coco_eval = self.coco_eval[iou_type] @@ -63,7 +64,9 @@ def update(self, predictions): def synchronize_between_processes(self): for iou_type in self.iou_types: self.eval_imgs[iou_type] = np.concatenate(self.eval_imgs[iou_type], 2) - create_common_coco_eval(self.coco_eval[iou_type], self.img_ids, self.eval_imgs[iou_type]) + create_common_coco_eval( + self.coco_eval[iou_type], self.img_ids, self.eval_imgs[iou_type] + ) def accumulate(self): for coco_eval in self.coco_eval.values(): @@ -124,7 +127,9 @@ def prepare_for_coco_segmentation(self, predictions): labels = prediction["labels"].tolist() rles = [ - mask_util.encode(np.array(mask[0, :, :, np.newaxis], dtype=np.uint8, order="F"))[0] + mask_util.encode( + np.array(mask[0, :, :, np.newaxis], dtype=np.uint8, order="F") + )[0] for mask in masks ] for rle in rles: @@ -161,7 +166,7 @@ def prepare_for_coco_keypoint(self, predictions): { "image_id": original_id, "category_id": labels[k], - 'keypoints': keypoint, + "keypoints": keypoint, "score": scores[k], } for k, keypoint in enumerate(keypoints) @@ -214,17 +219,19 @@ def create_common_coco_eval(coco_eval, img_ids, eval_imgs): def evaluate(self): - ''' + """ Run per image evaluation on given images and store results (a list of dict) in self.evalImgs :return: None - ''' + """ # tic = time.time() # print('Running per image evaluation...') p = self.params # add backward compatibility if useSegm is specified in params if p.useSegm is not None: - p.iouType = 'segm' if p.useSegm == 1 else 'bbox' - print('useSegm (deprecated) is not None. Running {} evaluation'.format(p.iouType)) + p.iouType = "segm" if p.useSegm == 1 else "bbox" + print( + "useSegm (deprecated) is not None. Running {} evaluation".format(p.iouType) + ) # print('Evaluate annotation type *{}*'.format(p.iouType)) p.imgIds = list(np.unique(p.imgIds)) if p.useCats: @@ -236,14 +243,15 @@ def evaluate(self): # loop through images, area range, max detection number catIds = p.catIds if p.useCats else [-1] - if p.iouType == 'segm' or p.iouType == 'bbox': + if p.iouType == "segm" or p.iouType == "bbox": computeIoU = self.computeIoU - elif p.iouType == 'keypoints': + elif p.iouType == "keypoints": computeIoU = self.computeOks self.ious = { (imgId, catId): computeIoU(imgId, catId) for imgId in p.imgIds - for catId in catIds} + for catId in catIds + } evaluateImg = self.evaluateImg maxDet = p.maxDets[-1] @@ -260,6 +268,7 @@ def evaluate(self): # print('DONE (t={:0.2f}s).'.format(toc-tic)) return p.imgIds, evalImgs + ################################################################# # end of straight copy from pycocotools, just removing the prints ################################################################# diff --git a/dimos/models/Detic/third_party/Deformable-DETR/datasets/coco_panoptic.py b/dimos/models/Detic/third_party/Deformable-DETR/datasets/coco_panoptic.py index e856e49d84..a7ad20e157 100644 --- a/dimos/models/Detic/third_party/Deformable-DETR/datasets/coco_panoptic.py +++ b/dimos/models/Detic/third_party/Deformable-DETR/datasets/coco_panoptic.py @@ -21,17 +21,19 @@ class CocoPanoptic: - def __init__(self, img_folder, ann_folder, ann_file, transforms=None, return_masks=True): - with open(ann_file, 'r') as f: + def __init__( + self, img_folder, ann_folder, ann_file, transforms=None, return_masks=True + ): + with open(ann_file, "r") as f: self.coco = json.load(f) # sort 'images' field so that they are aligned with 'annotations' # i.e., in alphabetical order - self.coco['images'] = sorted(self.coco['images'], key=lambda x: x['id']) + self.coco["images"] = sorted(self.coco["images"], key=lambda x: x["id"]) # sanity check if "annotations" in self.coco: - for img, ann in zip(self.coco['images'], self.coco['annotations']): - assert img['file_name'][:-4] == ann['file_name'][:-4] + for img, ann in zip(self.coco["images"], self.coco["annotations"]): + assert img["file_name"][:-4] == ann["file_name"][:-4] self.img_folder = img_folder self.ann_folder = ann_folder @@ -40,35 +42,46 @@ def __init__(self, img_folder, ann_folder, ann_file, transforms=None, return_mas self.return_masks = return_masks def __getitem__(self, idx): - ann_info = self.coco['annotations'][idx] if "annotations" in self.coco else self.coco['images'][idx] - img_path = Path(self.img_folder) / ann_info['file_name'].replace('.png', '.jpg') - ann_path = Path(self.ann_folder) / ann_info['file_name'] - - img = Image.open(img_path).convert('RGB') + ann_info = ( + self.coco["annotations"][idx] + if "annotations" in self.coco + else self.coco["images"][idx] + ) + img_path = Path(self.img_folder) / ann_info["file_name"].replace(".png", ".jpg") + ann_path = Path(self.ann_folder) / ann_info["file_name"] + + img = Image.open(img_path).convert("RGB") w, h = img.size if "segments_info" in ann_info: masks = np.asarray(Image.open(ann_path), dtype=np.uint32) masks = rgb2id(masks) - ids = np.array([ann['id'] for ann in ann_info['segments_info']]) + ids = np.array([ann["id"] for ann in ann_info["segments_info"]]) masks = masks == ids[:, None, None] masks = torch.as_tensor(masks, dtype=torch.uint8) - labels = torch.tensor([ann['category_id'] for ann in ann_info['segments_info']], dtype=torch.int64) + labels = torch.tensor( + [ann["category_id"] for ann in ann_info["segments_info"]], + dtype=torch.int64, + ) target = {} - target['image_id'] = torch.tensor([ann_info['image_id'] if "image_id" in ann_info else ann_info["id"]]) + target["image_id"] = torch.tensor( + [ann_info["image_id"] if "image_id" in ann_info else ann_info["id"]] + ) if self.return_masks: - target['masks'] = masks - target['labels'] = labels + target["masks"] = masks + target["labels"] = labels target["boxes"] = masks_to_boxes(masks) - target['size'] = torch.as_tensor([int(h), int(w)]) - target['orig_size'] = torch.as_tensor([int(h), int(w)]) + target["size"] = torch.as_tensor([int(h), int(w)]) + target["orig_size"] = torch.as_tensor([int(h), int(w)]) if "segments_info" in ann_info: - for name in ['iscrowd', 'area']: - target[name] = torch.tensor([ann[name] for ann in ann_info['segments_info']]) + for name in ["iscrowd", "area"]: + target[name] = torch.tensor( + [ann[name] for ann in ann_info["segments_info"]] + ) if self.transforms is not None: img, target = self.transforms(img, target) @@ -76,32 +89,41 @@ def __getitem__(self, idx): return img, target def __len__(self): - return len(self.coco['images']) + return len(self.coco["images"]) def get_height_and_width(self, idx): - img_info = self.coco['images'][idx] - height = img_info['height'] - width = img_info['width'] + img_info = self.coco["images"][idx] + height = img_info["height"] + width = img_info["width"] return height, width def build(image_set, args): img_folder_root = Path(args.coco_path) ann_folder_root = Path(args.coco_panoptic_path) - assert img_folder_root.exists(), f'provided COCO path {img_folder_root} does not exist' - assert ann_folder_root.exists(), f'provided COCO path {ann_folder_root} does not exist' - mode = 'panoptic' + assert img_folder_root.exists(), ( + f"provided COCO path {img_folder_root} does not exist" + ) + assert ann_folder_root.exists(), ( + f"provided COCO path {ann_folder_root} does not exist" + ) + mode = "panoptic" PATHS = { - "train": ("train2017", Path("annotations") / f'{mode}_train2017.json'), - "val": ("val2017", Path("annotations") / f'{mode}_val2017.json'), + "train": ("train2017", Path("annotations") / f"{mode}_train2017.json"), + "val": ("val2017", Path("annotations") / f"{mode}_val2017.json"), } img_folder, ann_file = PATHS[image_set] img_folder_path = img_folder_root / img_folder - ann_folder = ann_folder_root / f'{mode}_{img_folder}' + ann_folder = ann_folder_root / f"{mode}_{img_folder}" ann_file = ann_folder_root / ann_file - dataset = CocoPanoptic(img_folder_path, ann_folder, ann_file, - transforms=make_coco_transforms(image_set), return_masks=args.masks) + dataset = CocoPanoptic( + img_folder_path, + ann_folder, + ann_file, + transforms=make_coco_transforms(image_set), + return_masks=args.masks, + ) return dataset diff --git a/dimos/models/Detic/third_party/Deformable-DETR/datasets/data_prefetcher.py b/dimos/models/Detic/third_party/Deformable-DETR/datasets/data_prefetcher.py index 7d28d9fdd7..21f7c4b1ac 100644 --- a/dimos/models/Detic/third_party/Deformable-DETR/datasets/data_prefetcher.py +++ b/dimos/models/Detic/third_party/Deformable-DETR/datasets/data_prefetcher.py @@ -6,12 +6,16 @@ import torch + def to_cuda(samples, targets, device): samples = samples.to(device, non_blocking=True) - targets = [{k: v.to(device, non_blocking=True) for k, v in t.items()} for t in targets] + targets = [ + {k: v.to(device, non_blocking=True) for k, v in t.items()} for t in targets + ] return samples, targets -class data_prefetcher(): + +class data_prefetcher: def __init__(self, loader, device, prefetch=True): self.loader = iter(loader) self.prefetch = prefetch @@ -35,7 +39,9 @@ def preload(self): # at the time we start copying to next_*: # self.stream.wait_stream(torch.cuda.current_stream()) with torch.cuda.stream(self.stream): - self.next_samples, self.next_targets = to_cuda(self.next_samples, self.next_targets, self.device) + self.next_samples, self.next_targets = to_cuda( + self.next_samples, self.next_targets, self.device + ) # more code for the alternative if record_stream() doesn't work: # copy_ will record the use of the pinned source tensor in this side stream. # self.next_input_gpu.copy_(self.next_input, non_blocking=True) diff --git a/dimos/models/Detic/third_party/Deformable-DETR/datasets/panoptic_eval.py b/dimos/models/Detic/third_party/Deformable-DETR/datasets/panoptic_eval.py index 0dabffdb58..ad606603a9 100644 --- a/dimos/models/Detic/third_party/Deformable-DETR/datasets/panoptic_eval.py +++ b/dimos/models/Detic/third_party/Deformable-DETR/datasets/panoptic_eval.py @@ -48,5 +48,10 @@ def summarize(self): predictions_json = os.path.join(self.output_dir, "predictions.json") with open(predictions_json, "w") as f: f.write(json.dumps(json_data)) - return pq_compute(self.gt_json, predictions_json, gt_folder=self.gt_folder, pred_folder=self.output_dir) + return pq_compute( + self.gt_json, + predictions_json, + gt_folder=self.gt_folder, + pred_folder=self.output_dir, + ) return None diff --git a/dimos/models/Detic/third_party/Deformable-DETR/datasets/samplers.py b/dimos/models/Detic/third_party/Deformable-DETR/datasets/samplers.py index 14c0af2f98..f88aae46f5 100644 --- a/dimos/models/Detic/third_party/Deformable-DETR/datasets/samplers.py +++ b/dimos/models/Detic/third_party/Deformable-DETR/datasets/samplers.py @@ -28,7 +28,15 @@ class DistributedSampler(Sampler): rank (optional): Rank of the current process within num_replicas. """ - def __init__(self, dataset, num_replicas=None, rank=None, local_rank=None, local_size=None, shuffle=True): + def __init__( + self, + dataset, + num_replicas=None, + rank=None, + local_rank=None, + local_size=None, + shuffle=True, + ): if num_replicas is None: if not dist.is_available(): raise RuntimeError("Requires distributed package to be available") @@ -87,7 +95,15 @@ class NodeDistributedSampler(Sampler): rank (optional): Rank of the current process within num_replicas. """ - def __init__(self, dataset, num_replicas=None, rank=None, local_rank=None, local_size=None, shuffle=True): + def __init__( + self, + dataset, + num_replicas=None, + rank=None, + local_rank=None, + local_size=None, + shuffle=True, + ): if num_replicas is None: if not dist.is_available(): raise RuntimeError("Requires distributed package to be available") @@ -97,9 +113,9 @@ def __init__(self, dataset, num_replicas=None, rank=None, local_rank=None, local raise RuntimeError("Requires distributed package to be available") rank = dist.get_rank() if local_rank is None: - local_rank = int(os.environ.get('LOCAL_RANK', 0)) + local_rank = int(os.environ.get("LOCAL_RANK", 0)) if local_size is None: - local_size = int(os.environ.get('LOCAL_SIZE', 1)) + local_size = int(os.environ.get("LOCAL_SIZE", 1)) self.dataset = dataset self.shuffle = shuffle self.num_replicas = num_replicas @@ -123,11 +139,14 @@ def __iter__(self): indices = [i for i in indices if i % self.num_parts == self.local_rank] # add extra samples to make it evenly divisible - indices += indices[:(self.total_size_parts - len(indices))] + indices += indices[: (self.total_size_parts - len(indices))] assert len(indices) == self.total_size_parts # subsample - indices = indices[self.rank // self.num_parts:self.total_size_parts:self.num_replicas // self.num_parts] + indices = indices[ + self.rank // self.num_parts : self.total_size_parts : self.num_replicas + // self.num_parts + ] assert len(indices) == self.num_samples return iter(indices) diff --git a/dimos/models/Detic/third_party/Deformable-DETR/datasets/torchvision_datasets/coco.py b/dimos/models/Detic/third_party/Deformable-DETR/datasets/torchvision_datasets/coco.py index 45b5f52fa9..9b2c4e8e57 100644 --- a/dimos/models/Detic/third_party/Deformable-DETR/datasets/torchvision_datasets/coco.py +++ b/dimos/models/Detic/third_party/Deformable-DETR/datasets/torchvision_datasets/coco.py @@ -9,6 +9,7 @@ """ Copy-Paste from torchvision, but add utility of caching images on memory """ + from torchvision.datasets.vision import VisionDataset from PIL import Image import os @@ -30,10 +31,22 @@ class CocoDetection(VisionDataset): and returns a transformed version. """ - def __init__(self, root, annFile, transform=None, target_transform=None, transforms=None, - cache_mode=False, local_rank=0, local_size=1): - super(CocoDetection, self).__init__(root, transforms, transform, target_transform) + def __init__( + self, + root, + annFile, + transform=None, + target_transform=None, + transforms=None, + cache_mode=False, + local_rank=0, + local_size=1, + ): + super(CocoDetection, self).__init__( + root, transforms, transform, target_transform + ) from pycocotools.coco import COCO + self.coco = COCO(annFile) self.ids = list(sorted(self.coco.imgs.keys())) self.cache_mode = cache_mode @@ -48,17 +61,17 @@ def cache_images(self): for index, img_id in zip(tqdm.trange(len(self.ids)), self.ids): if index % self.local_size != self.local_rank: continue - path = self.coco.loadImgs(img_id)[0]['file_name'] - with open(os.path.join(self.root, path), 'rb') as f: + path = self.coco.loadImgs(img_id)[0]["file_name"] + with open(os.path.join(self.root, path), "rb") as f: self.cache[path] = f.read() def get_image(self, path): if self.cache_mode: if path not in self.cache.keys(): - with open(os.path.join(self.root, path), 'rb') as f: + with open(os.path.join(self.root, path), "rb") as f: self.cache[path] = f.read() - return Image.open(BytesIO(self.cache[path])).convert('RGB') - return Image.open(os.path.join(self.root, path)).convert('RGB') + return Image.open(BytesIO(self.cache[path])).convert("RGB") + return Image.open(os.path.join(self.root, path)).convert("RGB") def __getitem__(self, index): """ @@ -72,7 +85,7 @@ def __getitem__(self, index): ann_ids = coco.getAnnIds(imgIds=img_id) target = coco.loadAnns(ann_ids) - path = coco.loadImgs(img_id)[0]['file_name'] + path = coco.loadImgs(img_id)[0]["file_name"] img = self.get_image(path) if self.transforms is not None: diff --git a/dimos/models/Detic/third_party/Deformable-DETR/datasets/transforms.py b/dimos/models/Detic/third_party/Deformable-DETR/datasets/transforms.py index 8f4baeb51c..1f69b681e5 100644 --- a/dimos/models/Detic/third_party/Deformable-DETR/datasets/transforms.py +++ b/dimos/models/Detic/third_party/Deformable-DETR/datasets/transforms.py @@ -10,6 +10,7 @@ """ Transforms and data augmentation for both image + bbox. """ + import random import PIL @@ -45,7 +46,7 @@ def crop(image, target, region): if "masks" in target: # FIXME should we update the area here if there are no boxes? - target['masks'] = target['masks'][:, i:i + h, j:j + w] + target["masks"] = target["masks"][:, i : i + h, j : j + w] fields.append("masks") # remove elements for which the boxes or masks that have zero area @@ -53,10 +54,10 @@ def crop(image, target, region): # favor boxes selection when defining which elements to keep # this is compatible with previous implementation if "boxes" in target: - cropped_boxes = target['boxes'].reshape(-1, 2, 2) + cropped_boxes = target["boxes"].reshape(-1, 2, 2) keep = torch.all(cropped_boxes[:, 1, :] > cropped_boxes[:, 0, :], dim=1) else: - keep = target['masks'].flatten(1).any(1) + keep = target["masks"].flatten(1).any(1) for field in fields: target[field] = target[field][keep] @@ -72,11 +73,13 @@ def hflip(image, target): target = target.copy() if "boxes" in target: boxes = target["boxes"] - boxes = boxes[:, [2, 1, 0, 3]] * torch.as_tensor([-1, 1, -1, 1]) + torch.as_tensor([w, 0, w, 0]) + boxes = boxes[:, [2, 1, 0, 3]] * torch.as_tensor( + [-1, 1, -1, 1] + ) + torch.as_tensor([w, 0, w, 0]) target["boxes"] = boxes if "masks" in target: - target['masks'] = target['masks'].flip(-1) + target["masks"] = target["masks"].flip(-1) return flipped_image, target @@ -116,13 +119,17 @@ def get_size(image_size, size, max_size=None): if target is None: return rescaled_image, None - ratios = tuple(float(s) / float(s_orig) for s, s_orig in zip(rescaled_image.size, image.size)) + ratios = tuple( + float(s) / float(s_orig) for s, s_orig in zip(rescaled_image.size, image.size) + ) ratio_width, ratio_height = ratios target = target.copy() if "boxes" in target: boxes = target["boxes"] - scaled_boxes = boxes * torch.as_tensor([ratio_width, ratio_height, ratio_width, ratio_height]) + scaled_boxes = boxes * torch.as_tensor( + [ratio_width, ratio_height, ratio_width, ratio_height] + ) target["boxes"] = scaled_boxes if "area" in target: @@ -134,8 +141,10 @@ def get_size(image_size, size, max_size=None): target["size"] = torch.tensor([h, w]) if "masks" in target: - target['masks'] = interpolate( - target['masks'][:, None].float(), size, mode="nearest")[:, 0] > 0.5 + target["masks"] = ( + interpolate(target["masks"][:, None].float(), size, mode="nearest")[:, 0] + > 0.5 + ) return rescaled_image, target @@ -149,7 +158,9 @@ def pad(image, target, padding): # should we do something wrt the original size? target["size"] = torch.tensor(padded_image[::-1]) if "masks" in target: - target['masks'] = torch.nn.functional.pad(target['masks'], (0, padding[0], 0, padding[1])) + target["masks"] = torch.nn.functional.pad( + target["masks"], (0, padding[0], 0, padding[1]) + ) return padded_image, target @@ -181,8 +192,8 @@ def __init__(self, size): def __call__(self, img, target): image_width, image_height = img.size crop_height, crop_width = self.size - crop_top = int(round((image_height - crop_height) / 2.)) - crop_left = int(round((image_width - crop_width) / 2.)) + crop_top = int(round((image_height - crop_height) / 2.0)) + crop_left = int(round((image_width - crop_width) / 2.0)) return crop(img, target, (crop_top, crop_left, crop_height, crop_width)) @@ -222,6 +233,7 @@ class RandomSelect(object): Randomly selects between transforms1 and transforms2, with probability p for transforms1 and (1 - p) for transforms2 """ + def __init__(self, transforms1, transforms2, p=0.5): self.transforms1 = transforms1 self.transforms2 = transforms2 @@ -239,7 +251,6 @@ def __call__(self, img, target): class RandomErasing(object): - def __init__(self, *args, **kwargs): self.eraser = T.RandomErasing(*args, **kwargs) diff --git a/dimos/models/Detic/third_party/Deformable-DETR/engine.py b/dimos/models/Detic/third_party/Deformable-DETR/engine.py index 1ae2ae9591..a0b85c0f10 100644 --- a/dimos/models/Detic/third_party/Deformable-DETR/engine.py +++ b/dimos/models/Detic/third_party/Deformable-DETR/engine.py @@ -10,6 +10,7 @@ """ Train and eval functions used in main.py """ + import math import os import sys @@ -22,16 +23,26 @@ from datasets.data_prefetcher import data_prefetcher -def train_one_epoch(model: torch.nn.Module, criterion: torch.nn.Module, - data_loader: Iterable, optimizer: torch.optim.Optimizer, - device: torch.device, epoch: int, max_norm: float = 0): +def train_one_epoch( + model: torch.nn.Module, + criterion: torch.nn.Module, + data_loader: Iterable, + optimizer: torch.optim.Optimizer, + device: torch.device, + epoch: int, + max_norm: float = 0, +): model.train() criterion.train() metric_logger = utils.MetricLogger(delimiter=" ") - metric_logger.add_meter('lr', utils.SmoothedValue(window_size=1, fmt='{value:.6f}')) - metric_logger.add_meter('class_error', utils.SmoothedValue(window_size=1, fmt='{value:.2f}')) - metric_logger.add_meter('grad_norm', utils.SmoothedValue(window_size=1, fmt='{value:.2f}')) - header = 'Epoch: [{}]'.format(epoch) + metric_logger.add_meter("lr", utils.SmoothedValue(window_size=1, fmt="{value:.6f}")) + metric_logger.add_meter( + "class_error", utils.SmoothedValue(window_size=1, fmt="{value:.2f}") + ) + metric_logger.add_meter( + "grad_norm", utils.SmoothedValue(window_size=1, fmt="{value:.2f}") + ) + header = "Epoch: [{}]".format(epoch) print_freq = 10 prefetcher = data_prefetcher(data_loader, device, prefetch=True) @@ -42,14 +53,20 @@ def train_one_epoch(model: torch.nn.Module, criterion: torch.nn.Module, outputs = model(samples) loss_dict = criterion(outputs, targets) weight_dict = criterion.weight_dict - losses = sum(loss_dict[k] * weight_dict[k] for k in loss_dict.keys() if k in weight_dict) + losses = sum( + loss_dict[k] * weight_dict[k] for k in loss_dict.keys() if k in weight_dict + ) # reduce losses over all GPUs for logging purposes loss_dict_reduced = utils.reduce_dict(loss_dict) - loss_dict_reduced_unscaled = {f'{k}_unscaled': v - for k, v in loss_dict_reduced.items()} - loss_dict_reduced_scaled = {k: v * weight_dict[k] - for k, v in loss_dict_reduced.items() if k in weight_dict} + loss_dict_reduced_unscaled = { + f"{k}_unscaled": v for k, v in loss_dict_reduced.items() + } + loss_dict_reduced_scaled = { + k: v * weight_dict[k] + for k, v in loss_dict_reduced.items() + if k in weight_dict + } losses_reduced_scaled = sum(loss_dict_reduced_scaled.values()) loss_value = losses_reduced_scaled.item() @@ -62,13 +79,17 @@ def train_one_epoch(model: torch.nn.Module, criterion: torch.nn.Module, optimizer.zero_grad() losses.backward() if max_norm > 0: - grad_total_norm = torch.nn.utils.clip_grad_norm_(model.parameters(), max_norm) + grad_total_norm = torch.nn.utils.clip_grad_norm_( + model.parameters(), max_norm + ) else: grad_total_norm = utils.get_total_grad_norm(model.parameters(), max_norm) optimizer.step() - metric_logger.update(loss=loss_value, **loss_dict_reduced_scaled, **loss_dict_reduced_unscaled) - metric_logger.update(class_error=loss_dict_reduced['class_error']) + metric_logger.update( + loss=loss_value, **loss_dict_reduced_scaled, **loss_dict_reduced_unscaled + ) + metric_logger.update(class_error=loss_dict_reduced["class_error"]) metric_logger.update(lr=optimizer.param_groups[0]["lr"]) metric_logger.update(grad_norm=grad_total_norm) @@ -80,20 +101,24 @@ def train_one_epoch(model: torch.nn.Module, criterion: torch.nn.Module, @torch.no_grad() -def evaluate(model, criterion, postprocessors, data_loader, base_ds, device, output_dir): +def evaluate( + model, criterion, postprocessors, data_loader, base_ds, device, output_dir +): model.eval() criterion.eval() metric_logger = utils.MetricLogger(delimiter=" ") - metric_logger.add_meter('class_error', utils.SmoothedValue(window_size=1, fmt='{value:.2f}')) - header = 'Test:' + metric_logger.add_meter( + "class_error", utils.SmoothedValue(window_size=1, fmt="{value:.2f}") + ) + header = "Test:" - iou_types = tuple(k for k in ('segm', 'bbox') if k in postprocessors.keys()) + iou_types = tuple(k for k in ("segm", "bbox") if k in postprocessors.keys()) coco_evaluator = CocoEvaluator(base_ds, iou_types) # coco_evaluator.coco_eval[iou_types[0]].params.iouThrs = [0, 0.1, 0.5, 0.75] panoptic_evaluator = None - if 'panoptic' in postprocessors.keys(): + if "panoptic" in postprocessors.keys(): panoptic_evaluator = PanopticEvaluator( data_loader.dataset.ann_file, data_loader.dataset.ann_folder, @@ -110,26 +135,39 @@ def evaluate(model, criterion, postprocessors, data_loader, base_ds, device, out # reduce losses over all GPUs for logging purposes loss_dict_reduced = utils.reduce_dict(loss_dict) - loss_dict_reduced_scaled = {k: v * weight_dict[k] - for k, v in loss_dict_reduced.items() if k in weight_dict} - loss_dict_reduced_unscaled = {f'{k}_unscaled': v - for k, v in loss_dict_reduced.items()} - metric_logger.update(loss=sum(loss_dict_reduced_scaled.values()), - **loss_dict_reduced_scaled, - **loss_dict_reduced_unscaled) - metric_logger.update(class_error=loss_dict_reduced['class_error']) + loss_dict_reduced_scaled = { + k: v * weight_dict[k] + for k, v in loss_dict_reduced.items() + if k in weight_dict + } + loss_dict_reduced_unscaled = { + f"{k}_unscaled": v for k, v in loss_dict_reduced.items() + } + metric_logger.update( + loss=sum(loss_dict_reduced_scaled.values()), + **loss_dict_reduced_scaled, + **loss_dict_reduced_unscaled, + ) + metric_logger.update(class_error=loss_dict_reduced["class_error"]) orig_target_sizes = torch.stack([t["orig_size"] for t in targets], dim=0) - results = postprocessors['bbox'](outputs, orig_target_sizes) - if 'segm' in postprocessors.keys(): + results = postprocessors["bbox"](outputs, orig_target_sizes) + if "segm" in postprocessors.keys(): target_sizes = torch.stack([t["size"] for t in targets], dim=0) - results = postprocessors['segm'](results, outputs, orig_target_sizes, target_sizes) - res = {target['image_id'].item(): output for target, output in zip(targets, results)} + results = postprocessors["segm"]( + results, outputs, orig_target_sizes, target_sizes + ) + res = { + target["image_id"].item(): output + for target, output in zip(targets, results) + } if coco_evaluator is not None: coco_evaluator.update(res) if panoptic_evaluator is not None: - res_pano = postprocessors["panoptic"](outputs, target_sizes, orig_target_sizes) + res_pano = postprocessors["panoptic"]( + outputs, target_sizes, orig_target_sizes + ) for i, target in enumerate(targets): image_id = target["image_id"].item() file_name = f"{image_id:012d}.png" @@ -155,12 +193,12 @@ def evaluate(model, criterion, postprocessors, data_loader, base_ds, device, out panoptic_res = panoptic_evaluator.summarize() stats = {k: meter.global_avg for k, meter in metric_logger.meters.items()} if coco_evaluator is not None: - if 'bbox' in postprocessors.keys(): - stats['coco_eval_bbox'] = coco_evaluator.coco_eval['bbox'].stats.tolist() - if 'segm' in postprocessors.keys(): - stats['coco_eval_masks'] = coco_evaluator.coco_eval['segm'].stats.tolist() + if "bbox" in postprocessors.keys(): + stats["coco_eval_bbox"] = coco_evaluator.coco_eval["bbox"].stats.tolist() + if "segm" in postprocessors.keys(): + stats["coco_eval_masks"] = coco_evaluator.coco_eval["segm"].stats.tolist() if panoptic_res is not None: - stats['PQ_all'] = panoptic_res["All"] - stats['PQ_th'] = panoptic_res["Things"] - stats['PQ_st'] = panoptic_res["Stuff"] + stats["PQ_all"] = panoptic_res["All"] + stats["PQ_th"] = panoptic_res["Things"] + stats["PQ_st"] = panoptic_res["Stuff"] return stats, coco_evaluator diff --git a/dimos/models/Detic/third_party/Deformable-DETR/main.py b/dimos/models/Detic/third_party/Deformable-DETR/main.py index fc6ccfac28..7466e95eb6 100644 --- a/dimos/models/Detic/third_party/Deformable-DETR/main.py +++ b/dimos/models/Detic/third_party/Deformable-DETR/main.py @@ -27,101 +27,179 @@ def get_args_parser(): - parser = argparse.ArgumentParser('Deformable DETR Detector', add_help=False) - parser.add_argument('--lr', default=2e-4, type=float) - parser.add_argument('--lr_backbone_names', default=["backbone.0"], type=str, nargs='+') - parser.add_argument('--lr_backbone', default=2e-5, type=float) - parser.add_argument('--lr_linear_proj_names', default=['reference_points', 'sampling_offsets'], type=str, nargs='+') - parser.add_argument('--lr_linear_proj_mult', default=0.1, type=float) - parser.add_argument('--batch_size', default=2, type=int) - parser.add_argument('--weight_decay', default=1e-4, type=float) - parser.add_argument('--epochs', default=50, type=int) - parser.add_argument('--lr_drop', default=40, type=int) - parser.add_argument('--lr_drop_epochs', default=None, type=int, nargs='+') - parser.add_argument('--clip_max_norm', default=0.1, type=float, - help='gradient clipping max norm') - - - parser.add_argument('--sgd', action='store_true') + parser = argparse.ArgumentParser("Deformable DETR Detector", add_help=False) + parser.add_argument("--lr", default=2e-4, type=float) + parser.add_argument( + "--lr_backbone_names", default=["backbone.0"], type=str, nargs="+" + ) + parser.add_argument("--lr_backbone", default=2e-5, type=float) + parser.add_argument( + "--lr_linear_proj_names", + default=["reference_points", "sampling_offsets"], + type=str, + nargs="+", + ) + parser.add_argument("--lr_linear_proj_mult", default=0.1, type=float) + parser.add_argument("--batch_size", default=2, type=int) + parser.add_argument("--weight_decay", default=1e-4, type=float) + parser.add_argument("--epochs", default=50, type=int) + parser.add_argument("--lr_drop", default=40, type=int) + parser.add_argument("--lr_drop_epochs", default=None, type=int, nargs="+") + parser.add_argument( + "--clip_max_norm", default=0.1, type=float, help="gradient clipping max norm" + ) + + parser.add_argument("--sgd", action="store_true") # Variants of Deformable DETR - parser.add_argument('--with_box_refine', default=False, action='store_true') - parser.add_argument('--two_stage', default=False, action='store_true') + parser.add_argument("--with_box_refine", default=False, action="store_true") + parser.add_argument("--two_stage", default=False, action="store_true") # Model parameters - parser.add_argument('--frozen_weights', type=str, default=None, - help="Path to the pretrained model. If set, only the mask head will be trained") + parser.add_argument( + "--frozen_weights", + type=str, + default=None, + help="Path to the pretrained model. If set, only the mask head will be trained", + ) # * Backbone - parser.add_argument('--backbone', default='resnet50', type=str, - help="Name of the convolutional backbone to use") - parser.add_argument('--dilation', action='store_true', - help="If true, we replace stride with dilation in the last convolutional block (DC5)") - parser.add_argument('--position_embedding', default='sine', type=str, choices=('sine', 'learned'), - help="Type of positional embedding to use on top of the image features") - parser.add_argument('--position_embedding_scale', default=2 * np.pi, type=float, - help="position / size * scale") - parser.add_argument('--num_feature_levels', default=4, type=int, help='number of feature levels') + parser.add_argument( + "--backbone", + default="resnet50", + type=str, + help="Name of the convolutional backbone to use", + ) + parser.add_argument( + "--dilation", + action="store_true", + help="If true, we replace stride with dilation in the last convolutional block (DC5)", + ) + parser.add_argument( + "--position_embedding", + default="sine", + type=str, + choices=("sine", "learned"), + help="Type of positional embedding to use on top of the image features", + ) + parser.add_argument( + "--position_embedding_scale", + default=2 * np.pi, + type=float, + help="position / size * scale", + ) + parser.add_argument( + "--num_feature_levels", default=4, type=int, help="number of feature levels" + ) # * Transformer - parser.add_argument('--enc_layers', default=6, type=int, - help="Number of encoding layers in the transformer") - parser.add_argument('--dec_layers', default=6, type=int, - help="Number of decoding layers in the transformer") - parser.add_argument('--dim_feedforward', default=1024, type=int, - help="Intermediate size of the feedforward layers in the transformer blocks") - parser.add_argument('--hidden_dim', default=256, type=int, - help="Size of the embeddings (dimension of the transformer)") - parser.add_argument('--dropout', default=0.1, type=float, - help="Dropout applied in the transformer") - parser.add_argument('--nheads', default=8, type=int, - help="Number of attention heads inside the transformer's attentions") - parser.add_argument('--num_queries', default=300, type=int, - help="Number of query slots") - parser.add_argument('--dec_n_points', default=4, type=int) - parser.add_argument('--enc_n_points', default=4, type=int) + parser.add_argument( + "--enc_layers", + default=6, + type=int, + help="Number of encoding layers in the transformer", + ) + parser.add_argument( + "--dec_layers", + default=6, + type=int, + help="Number of decoding layers in the transformer", + ) + parser.add_argument( + "--dim_feedforward", + default=1024, + type=int, + help="Intermediate size of the feedforward layers in the transformer blocks", + ) + parser.add_argument( + "--hidden_dim", + default=256, + type=int, + help="Size of the embeddings (dimension of the transformer)", + ) + parser.add_argument( + "--dropout", default=0.1, type=float, help="Dropout applied in the transformer" + ) + parser.add_argument( + "--nheads", + default=8, + type=int, + help="Number of attention heads inside the transformer's attentions", + ) + parser.add_argument( + "--num_queries", default=300, type=int, help="Number of query slots" + ) + parser.add_argument("--dec_n_points", default=4, type=int) + parser.add_argument("--enc_n_points", default=4, type=int) # * Segmentation - parser.add_argument('--masks', action='store_true', - help="Train segmentation head if the flag is provided") + parser.add_argument( + "--masks", + action="store_true", + help="Train segmentation head if the flag is provided", + ) # Loss - parser.add_argument('--no_aux_loss', dest='aux_loss', action='store_false', - help="Disables auxiliary decoding losses (loss at each layer)") + parser.add_argument( + "--no_aux_loss", + dest="aux_loss", + action="store_false", + help="Disables auxiliary decoding losses (loss at each layer)", + ) # * Matcher - parser.add_argument('--set_cost_class', default=2, type=float, - help="Class coefficient in the matching cost") - parser.add_argument('--set_cost_bbox', default=5, type=float, - help="L1 box coefficient in the matching cost") - parser.add_argument('--set_cost_giou', default=2, type=float, - help="giou box coefficient in the matching cost") + parser.add_argument( + "--set_cost_class", + default=2, + type=float, + help="Class coefficient in the matching cost", + ) + parser.add_argument( + "--set_cost_bbox", + default=5, + type=float, + help="L1 box coefficient in the matching cost", + ) + parser.add_argument( + "--set_cost_giou", + default=2, + type=float, + help="giou box coefficient in the matching cost", + ) # * Loss coefficients - parser.add_argument('--mask_loss_coef', default=1, type=float) - parser.add_argument('--dice_loss_coef', default=1, type=float) - parser.add_argument('--cls_loss_coef', default=2, type=float) - parser.add_argument('--bbox_loss_coef', default=5, type=float) - parser.add_argument('--giou_loss_coef', default=2, type=float) - parser.add_argument('--focal_alpha', default=0.25, type=float) + parser.add_argument("--mask_loss_coef", default=1, type=float) + parser.add_argument("--dice_loss_coef", default=1, type=float) + parser.add_argument("--cls_loss_coef", default=2, type=float) + parser.add_argument("--bbox_loss_coef", default=5, type=float) + parser.add_argument("--giou_loss_coef", default=2, type=float) + parser.add_argument("--focal_alpha", default=0.25, type=float) # dataset parameters - parser.add_argument('--dataset_file', default='coco') - parser.add_argument('--coco_path', default='./data/coco', type=str) - parser.add_argument('--coco_panoptic_path', type=str) - parser.add_argument('--remove_difficult', action='store_true') - - parser.add_argument('--output_dir', default='', - help='path where to save, empty for no saving') - parser.add_argument('--device', default='cuda', - help='device to use for training / testing') - parser.add_argument('--seed', default=42, type=int) - parser.add_argument('--resume', default='', help='resume from checkpoint') - parser.add_argument('--start_epoch', default=0, type=int, metavar='N', - help='start epoch') - parser.add_argument('--eval', action='store_true') - parser.add_argument('--num_workers', default=2, type=int) - parser.add_argument('--cache_mode', default=False, action='store_true', help='whether to cache images on memory') + parser.add_argument("--dataset_file", default="coco") + parser.add_argument("--coco_path", default="./data/coco", type=str) + parser.add_argument("--coco_panoptic_path", type=str) + parser.add_argument("--remove_difficult", action="store_true") + + parser.add_argument( + "--output_dir", default="", help="path where to save, empty for no saving" + ) + parser.add_argument( + "--device", default="cuda", help="device to use for training / testing" + ) + parser.add_argument("--seed", default=42, type=int) + parser.add_argument("--resume", default="", help="resume from checkpoint") + parser.add_argument( + "--start_epoch", default=0, type=int, metavar="N", help="start epoch" + ) + parser.add_argument("--eval", action="store_true") + parser.add_argument("--num_workers", default=2, type=int) + parser.add_argument( + "--cache_mode", + default=False, + action="store_true", + help="whether to cache images on memory", + ) return parser @@ -147,10 +225,10 @@ def main(args): model_without_ddp = model n_parameters = sum(p.numel() for p in model.parameters() if p.requires_grad) - print('number of params:', n_parameters) + print("number of params:", n_parameters) - dataset_train = build_dataset(image_set='train', args=args) - dataset_val = build_dataset(image_set='val', args=args) + dataset_train = build_dataset(image_set="train", args=args) + dataset_val = build_dataset(image_set="val", args=args) if args.distributed: if args.cache_mode: @@ -164,14 +242,25 @@ def main(args): sampler_val = torch.utils.data.SequentialSampler(dataset_val) batch_sampler_train = torch.utils.data.BatchSampler( - sampler_train, args.batch_size, drop_last=True) - - data_loader_train = DataLoader(dataset_train, batch_sampler=batch_sampler_train, - collate_fn=utils.collate_fn, num_workers=args.num_workers, - pin_memory=True) - data_loader_val = DataLoader(dataset_val, args.batch_size, sampler=sampler_val, - drop_last=False, collate_fn=utils.collate_fn, num_workers=args.num_workers, - pin_memory=True) + sampler_train, args.batch_size, drop_last=True + ) + + data_loader_train = DataLoader( + dataset_train, + batch_sampler=batch_sampler_train, + collate_fn=utils.collate_fn, + num_workers=args.num_workers, + pin_memory=True, + ) + data_loader_val = DataLoader( + dataset_val, + args.batch_size, + sampler=sampler_val, + drop_last=False, + collate_fn=utils.collate_fn, + num_workers=args.num_workers, + pin_memory=True, + ) # lr_backbone_names = ["backbone.0", "backbone.neck", "input_proj", "transformer.encoder"] def match_name_keywords(n, name_keywords): @@ -187,26 +276,40 @@ def match_name_keywords(n, name_keywords): param_dicts = [ { - "params": - [p for n, p in model_without_ddp.named_parameters() - if not match_name_keywords(n, args.lr_backbone_names) and not match_name_keywords(n, args.lr_linear_proj_names) and p.requires_grad], + "params": [ + p + for n, p in model_without_ddp.named_parameters() + if not match_name_keywords(n, args.lr_backbone_names) + and not match_name_keywords(n, args.lr_linear_proj_names) + and p.requires_grad + ], "lr": args.lr, }, { - "params": [p for n, p in model_without_ddp.named_parameters() if match_name_keywords(n, args.lr_backbone_names) and p.requires_grad], + "params": [ + p + for n, p in model_without_ddp.named_parameters() + if match_name_keywords(n, args.lr_backbone_names) and p.requires_grad + ], "lr": args.lr_backbone, }, { - "params": [p for n, p in model_without_ddp.named_parameters() if match_name_keywords(n, args.lr_linear_proj_names) and p.requires_grad], + "params": [ + p + for n, p in model_without_ddp.named_parameters() + if match_name_keywords(n, args.lr_linear_proj_names) and p.requires_grad + ], "lr": args.lr * args.lr_linear_proj_mult, - } + }, ] if args.sgd: - optimizer = torch.optim.SGD(param_dicts, lr=args.lr, momentum=0.9, - weight_decay=args.weight_decay) + optimizer = torch.optim.SGD( + param_dicts, lr=args.lr, momentum=0.9, weight_decay=args.weight_decay + ) else: - optimizer = torch.optim.AdamW(param_dicts, lr=args.lr, - weight_decay=args.weight_decay) + optimizer = torch.optim.AdamW( + param_dicts, lr=args.lr, weight_decay=args.weight_decay + ) lr_scheduler = torch.optim.lr_scheduler.StepLR(optimizer, args.lr_drop) if args.distributed: @@ -221,50 +324,82 @@ def match_name_keywords(n, name_keywords): base_ds = get_coco_api_from_dataset(dataset_val) if args.frozen_weights is not None: - checkpoint = torch.load(args.frozen_weights, map_location='cpu') - model_without_ddp.detr.load_state_dict(checkpoint['model']) + checkpoint = torch.load(args.frozen_weights, map_location="cpu") + model_without_ddp.detr.load_state_dict(checkpoint["model"]) output_dir = Path(args.output_dir) if args.resume: - if args.resume.startswith('https'): + if args.resume.startswith("https"): checkpoint = torch.hub.load_state_dict_from_url( - args.resume, map_location='cpu', check_hash=True) + args.resume, map_location="cpu", check_hash=True + ) else: - checkpoint = torch.load(args.resume, map_location='cpu') - missing_keys, unexpected_keys = model_without_ddp.load_state_dict(checkpoint['model'], strict=False) - unexpected_keys = [k for k in unexpected_keys if not (k.endswith('total_params') or k.endswith('total_ops'))] + checkpoint = torch.load(args.resume, map_location="cpu") + missing_keys, unexpected_keys = model_without_ddp.load_state_dict( + checkpoint["model"], strict=False + ) + unexpected_keys = [ + k + for k in unexpected_keys + if not (k.endswith("total_params") or k.endswith("total_ops")) + ] if len(missing_keys) > 0: - print('Missing Keys: {}'.format(missing_keys)) + print("Missing Keys: {}".format(missing_keys)) if len(unexpected_keys) > 0: - print('Unexpected Keys: {}'.format(unexpected_keys)) - if not args.eval and 'optimizer' in checkpoint and 'lr_scheduler' in checkpoint and 'epoch' in checkpoint: + print("Unexpected Keys: {}".format(unexpected_keys)) + if ( + not args.eval + and "optimizer" in checkpoint + and "lr_scheduler" in checkpoint + and "epoch" in checkpoint + ): import copy + p_groups = copy.deepcopy(optimizer.param_groups) - optimizer.load_state_dict(checkpoint['optimizer']) + optimizer.load_state_dict(checkpoint["optimizer"]) for pg, pg_old in zip(optimizer.param_groups, p_groups): - pg['lr'] = pg_old['lr'] - pg['initial_lr'] = pg_old['initial_lr'] + pg["lr"] = pg_old["lr"] + pg["initial_lr"] = pg_old["initial_lr"] print(optimizer.param_groups) - lr_scheduler.load_state_dict(checkpoint['lr_scheduler']) + lr_scheduler.load_state_dict(checkpoint["lr_scheduler"]) # todo: this is a hack for doing experiment that resume from checkpoint and also modify lr scheduler (e.g., decrease lr in advance). args.override_resumed_lr_drop = True if args.override_resumed_lr_drop: - print('Warning: (hack) args.override_resumed_lr_drop is set to True, so args.lr_drop would override lr_drop in resumed lr_scheduler.') + print( + "Warning: (hack) args.override_resumed_lr_drop is set to True, so args.lr_drop would override lr_drop in resumed lr_scheduler." + ) lr_scheduler.step_size = args.lr_drop - lr_scheduler.base_lrs = list(map(lambda group: group['initial_lr'], optimizer.param_groups)) + lr_scheduler.base_lrs = list( + map(lambda group: group["initial_lr"], optimizer.param_groups) + ) lr_scheduler.step(lr_scheduler.last_epoch) - args.start_epoch = checkpoint['epoch'] + 1 + args.start_epoch = checkpoint["epoch"] + 1 # check the resumed model if not args.eval: test_stats, coco_evaluator = evaluate( - model, criterion, postprocessors, data_loader_val, base_ds, device, args.output_dir + model, + criterion, + postprocessors, + data_loader_val, + base_ds, + device, + args.output_dir, ) - + if args.eval: - test_stats, coco_evaluator = evaluate(model, criterion, postprocessors, - data_loader_val, base_ds, device, args.output_dir) + test_stats, coco_evaluator = evaluate( + model, + criterion, + postprocessors, + data_loader_val, + base_ds, + device, + args.output_dir, + ) if args.output_dir: - utils.save_on_master(coco_evaluator.coco_eval["bbox"].eval, output_dir / "eval.pth") + utils.save_on_master( + coco_evaluator.coco_eval["bbox"].eval, output_dir / "eval.pth" + ) return print("Start training") @@ -273,30 +408,48 @@ def match_name_keywords(n, name_keywords): if args.distributed: sampler_train.set_epoch(epoch) train_stats = train_one_epoch( - model, criterion, data_loader_train, optimizer, device, epoch, args.clip_max_norm) + model, + criterion, + data_loader_train, + optimizer, + device, + epoch, + args.clip_max_norm, + ) lr_scheduler.step() if args.output_dir: - checkpoint_paths = [output_dir / 'checkpoint.pth'] + checkpoint_paths = [output_dir / "checkpoint.pth"] # extra checkpoint before LR drop and every 5 epochs if (epoch + 1) % args.lr_drop == 0 or (epoch + 1) % 5 == 0: - checkpoint_paths.append(output_dir / f'checkpoint{epoch:04}.pth') + checkpoint_paths.append(output_dir / f"checkpoint{epoch:04}.pth") for checkpoint_path in checkpoint_paths: - utils.save_on_master({ - 'model': model_without_ddp.state_dict(), - 'optimizer': optimizer.state_dict(), - 'lr_scheduler': lr_scheduler.state_dict(), - 'epoch': epoch, - 'args': args, - }, checkpoint_path) + utils.save_on_master( + { + "model": model_without_ddp.state_dict(), + "optimizer": optimizer.state_dict(), + "lr_scheduler": lr_scheduler.state_dict(), + "epoch": epoch, + "args": args, + }, + checkpoint_path, + ) test_stats, coco_evaluator = evaluate( - model, criterion, postprocessors, data_loader_val, base_ds, device, args.output_dir + model, + criterion, + postprocessors, + data_loader_val, + base_ds, + device, + args.output_dir, ) - log_stats = {**{f'train_{k}': v for k, v in train_stats.items()}, - **{f'test_{k}': v for k, v in test_stats.items()}, - 'epoch': epoch, - 'n_parameters': n_parameters} + log_stats = { + **{f"train_{k}": v for k, v in train_stats.items()}, + **{f"test_{k}": v for k, v in test_stats.items()}, + "epoch": epoch, + "n_parameters": n_parameters, + } if args.output_dir and utils.is_main_process(): with (output_dir / "log.txt").open("a") as f: @@ -304,22 +457,26 @@ def match_name_keywords(n, name_keywords): # for evaluation logs if coco_evaluator is not None: - (output_dir / 'eval').mkdir(exist_ok=True) + (output_dir / "eval").mkdir(exist_ok=True) if "bbox" in coco_evaluator.coco_eval: - filenames = ['latest.pth'] + filenames = ["latest.pth"] if epoch % 50 == 0: - filenames.append(f'{epoch:03}.pth') + filenames.append(f"{epoch:03}.pth") for name in filenames: - torch.save(coco_evaluator.coco_eval["bbox"].eval, - output_dir / "eval" / name) + torch.save( + coco_evaluator.coco_eval["bbox"].eval, + output_dir / "eval" / name, + ) total_time = time.time() - start_time total_time_str = str(datetime.timedelta(seconds=int(total_time))) - print('Training time {}'.format(total_time_str)) + print("Training time {}".format(total_time_str)) -if __name__ == '__main__': - parser = argparse.ArgumentParser('Deformable DETR training and evaluation script', parents=[get_args_parser()]) +if __name__ == "__main__": + parser = argparse.ArgumentParser( + "Deformable DETR training and evaluation script", parents=[get_args_parser()] + ) args = parser.parse_args() if args.output_dir: Path(args.output_dir).mkdir(parents=True, exist_ok=True) diff --git a/dimos/models/Detic/third_party/Deformable-DETR/models/__init__.py b/dimos/models/Detic/third_party/Deformable-DETR/models/__init__.py index 9a59c33484..46b898b988 100644 --- a/dimos/models/Detic/third_party/Deformable-DETR/models/__init__.py +++ b/dimos/models/Detic/third_party/Deformable-DETR/models/__init__.py @@ -12,4 +12,3 @@ def build_model(args): return build(args) - diff --git a/dimos/models/Detic/third_party/Deformable-DETR/models/backbone.py b/dimos/models/Detic/third_party/Deformable-DETR/models/backbone.py index 4bfe7053e9..9c47cba2d4 100644 --- a/dimos/models/Detic/third_party/Deformable-DETR/models/backbone.py +++ b/dimos/models/Detic/third_party/Deformable-DETR/models/backbone.py @@ -10,7 +10,6 @@ """ Backbone modules. """ -from collections import OrderedDict import torch import torch.nn.functional as F @@ -41,15 +40,29 @@ def __init__(self, n, eps=1e-5): self.register_buffer("running_var", torch.ones(n)) self.eps = eps - def _load_from_state_dict(self, state_dict, prefix, local_metadata, strict, - missing_keys, unexpected_keys, error_msgs): - num_batches_tracked_key = prefix + 'num_batches_tracked' + def _load_from_state_dict( + self, + state_dict, + prefix, + local_metadata, + strict, + missing_keys, + unexpected_keys, + error_msgs, + ): + num_batches_tracked_key = prefix + "num_batches_tracked" if num_batches_tracked_key in state_dict: del state_dict[num_batches_tracked_key] super(FrozenBatchNorm2d, self)._load_from_state_dict( - state_dict, prefix, local_metadata, strict, - missing_keys, unexpected_keys, error_msgs) + state_dict, + prefix, + local_metadata, + strict, + missing_keys, + unexpected_keys, + error_msgs, + ) def forward(self, x): # move reshapes to the beginning @@ -65,11 +78,17 @@ def forward(self, x): class BackboneBase(nn.Module): - - def __init__(self, backbone: nn.Module, train_backbone: bool, return_interm_layers: bool): + def __init__( + self, backbone: nn.Module, train_backbone: bool, return_interm_layers: bool + ): super().__init__() for name, parameter in backbone.named_parameters(): - if not train_backbone or 'layer2' not in name and 'layer3' not in name and 'layer4' not in name: + if ( + not train_backbone + or "layer2" not in name + and "layer3" not in name + and "layer4" not in name + ): parameter.requires_grad_(False) if return_interm_layers: # return_layers = {"layer1": "0", "layer2": "1", "layer3": "2", "layer4": "3"} @@ -77,7 +96,7 @@ def __init__(self, backbone: nn.Module, train_backbone: bool, return_interm_laye self.strides = [8, 16, 32] self.num_channels = [512, 1024, 2048] else: - return_layers = {'layer4': "0"} + return_layers = {"layer4": "0"} self.strides = [32] self.num_channels = [2048] self.body = IntermediateLayerGetter(backbone, return_layers=return_layers) @@ -95,15 +114,21 @@ def forward(self, tensor_list: NestedTensor): class Backbone(BackboneBase): """ResNet backbone with frozen BatchNorm.""" - def __init__(self, name: str, - train_backbone: bool, - return_interm_layers: bool, - dilation: bool): + + def __init__( + self, + name: str, + train_backbone: bool, + return_interm_layers: bool, + dilation: bool, + ): norm_layer = FrozenBatchNorm2d backbone = getattr(torchvision.models, name)( replace_stride_with_dilation=[False, False, dilation], - pretrained=is_main_process(), norm_layer=norm_layer) - assert name not in ('resnet18', 'resnet34'), "number of channels are hard coded" + pretrained=is_main_process(), + norm_layer=norm_layer, + ) + assert name not in ("resnet18", "resnet34"), "number of channels are hard coded" super().__init__(backbone, train_backbone, return_interm_layers) if dilation: self.strides[-1] = self.strides[-1] // 2 @@ -133,6 +158,8 @@ def build_backbone(args): position_embedding = build_position_encoding(args) train_backbone = args.lr_backbone > 0 return_interm_layers = args.masks or (args.num_feature_levels > 1) - backbone = Backbone(args.backbone, train_backbone, return_interm_layers, args.dilation) + backbone = Backbone( + args.backbone, train_backbone, return_interm_layers, args.dilation + ) model = Joiner(backbone, position_embedding) return model diff --git a/dimos/models/Detic/third_party/Deformable-DETR/models/deformable_detr.py b/dimos/models/Detic/third_party/Deformable-DETR/models/deformable_detr.py index f1415e8562..c8668e69c1 100644 --- a/dimos/models/Detic/third_party/Deformable-DETR/models/deformable_detr.py +++ b/dimos/models/Detic/third_party/Deformable-DETR/models/deformable_detr.py @@ -10,20 +10,32 @@ """ Deformable DETR model and criterion classes. """ + import torch import torch.nn.functional as F from torch import nn import math from util import box_ops -from util.misc import (NestedTensor, nested_tensor_from_tensor_list, - accuracy, get_world_size, interpolate, - is_dist_avail_and_initialized, inverse_sigmoid) +from util.misc import ( + NestedTensor, + nested_tensor_from_tensor_list, + accuracy, + get_world_size, + interpolate, + is_dist_avail_and_initialized, + inverse_sigmoid, +) from .backbone import build_backbone from .matcher import build_matcher -from .segmentation import (DETRsegm, PostProcessPanoptic, PostProcessSegm, - dice_loss, sigmoid_focal_loss) +from .segmentation import ( + DETRsegm, + PostProcessPanoptic, + PostProcessSegm, + dice_loss, + sigmoid_focal_loss, +) from .deformable_transformer import build_deforamble_transformer import copy @@ -33,10 +45,20 @@ def _get_clones(module, N): class DeformableDETR(nn.Module): - """ This is the Deformable DETR module that performs object detection """ - def __init__(self, backbone, transformer, num_classes, num_queries, num_feature_levels, - aux_loss=True, with_box_refine=False, two_stage=False): - """ Initializes the model. + """This is the Deformable DETR module that performs object detection""" + + def __init__( + self, + backbone, + transformer, + num_classes, + num_queries, + num_feature_levels, + aux_loss=True, + with_box_refine=False, + two_stage=False, + ): + """Initializes the model. Parameters: backbone: torch module of the backbone to be used. See backbone.py transformer: torch module of the transformer architecture. See transformer.py @@ -55,29 +77,38 @@ def __init__(self, backbone, transformer, num_classes, num_queries, num_feature_ self.bbox_embed = MLP(hidden_dim, hidden_dim, 4, 3) self.num_feature_levels = num_feature_levels if not two_stage: - self.query_embed = nn.Embedding(num_queries, hidden_dim*2) + self.query_embed = nn.Embedding(num_queries, hidden_dim * 2) if num_feature_levels > 1: num_backbone_outs = len(backbone.strides) input_proj_list = [] for _ in range(num_backbone_outs): in_channels = backbone.num_channels[_] - input_proj_list.append(nn.Sequential( - nn.Conv2d(in_channels, hidden_dim, kernel_size=1), - nn.GroupNorm(32, hidden_dim), - )) + input_proj_list.append( + nn.Sequential( + nn.Conv2d(in_channels, hidden_dim, kernel_size=1), + nn.GroupNorm(32, hidden_dim), + ) + ) for _ in range(num_feature_levels - num_backbone_outs): - input_proj_list.append(nn.Sequential( - nn.Conv2d(in_channels, hidden_dim, kernel_size=3, stride=2, padding=1), - nn.GroupNorm(32, hidden_dim), - )) + input_proj_list.append( + nn.Sequential( + nn.Conv2d( + in_channels, hidden_dim, kernel_size=3, stride=2, padding=1 + ), + nn.GroupNorm(32, hidden_dim), + ) + ) in_channels = hidden_dim self.input_proj = nn.ModuleList(input_proj_list) else: - self.input_proj = nn.ModuleList([ - nn.Sequential( - nn.Conv2d(backbone.num_channels[0], hidden_dim, kernel_size=1), - nn.GroupNorm(32, hidden_dim), - )]) + self.input_proj = nn.ModuleList( + [ + nn.Sequential( + nn.Conv2d(backbone.num_channels[0], hidden_dim, kernel_size=1), + nn.GroupNorm(32, hidden_dim), + ) + ] + ) self.backbone = backbone self.aux_loss = aux_loss self.with_box_refine = with_box_refine @@ -93,7 +124,11 @@ def __init__(self, backbone, transformer, num_classes, num_queries, num_feature_ nn.init.constant_(proj[0].bias, 0) # if two-stage, the last class_embed and bbox_embed is for region proposal generation - num_pred = (transformer.decoder.num_layers + 1) if two_stage else transformer.decoder.num_layers + num_pred = ( + (transformer.decoder.num_layers + 1) + if two_stage + else transformer.decoder.num_layers + ) if with_box_refine: self.class_embed = _get_clones(self.class_embed, num_pred) self.bbox_embed = _get_clones(self.bbox_embed, num_pred) @@ -102,7 +137,9 @@ def __init__(self, backbone, transformer, num_classes, num_queries, num_feature_ self.transformer.decoder.bbox_embed = self.bbox_embed else: nn.init.constant_(self.bbox_embed.layers[-1].bias.data[2:], -2.0) - self.class_embed = nn.ModuleList([self.class_embed for _ in range(num_pred)]) + self.class_embed = nn.ModuleList( + [self.class_embed for _ in range(num_pred)] + ) self.bbox_embed = nn.ModuleList([self.bbox_embed for _ in range(num_pred)]) self.transformer.decoder.bbox_embed = None if two_stage: @@ -112,19 +149,19 @@ def __init__(self, backbone, transformer, num_classes, num_queries, num_feature_ nn.init.constant_(box_embed.layers[-1].bias.data[2:], 0.0) def forward(self, samples: NestedTensor): - """ The forward expects a NestedTensor, which consists of: - - samples.tensor: batched images, of shape [batch_size x 3 x H x W] - - samples.mask: a binary mask of shape [batch_size x H x W], containing 1 on padded pixels - - It returns a dict with the following elements: - - "pred_logits": the classification logits (including no-object) for all queries. - Shape= [batch_size x num_queries x (num_classes + 1)] - - "pred_boxes": The normalized boxes coordinates for all queries, represented as - (center_x, center_y, height, width). These values are normalized in [0, 1], - relative to the size of each individual image (disregarding possible padding). - See PostProcess for information on how to retrieve the unnormalized bounding box. - - "aux_outputs": Optional, only returned when auxilary losses are activated. It is a list of - dictionnaries containing the two above keys for each decoder layer. + """The forward expects a NestedTensor, which consists of: + - samples.tensor: batched images, of shape [batch_size x 3 x H x W] + - samples.mask: a binary mask of shape [batch_size x H x W], containing 1 on padded pixels + + It returns a dict with the following elements: + - "pred_logits": the classification logits (including no-object) for all queries. + Shape= [batch_size x num_queries x (num_classes + 1)] + - "pred_boxes": The normalized boxes coordinates for all queries, represented as + (center_x, center_y, height, width). These values are normalized in [0, 1], + relative to the size of each individual image (disregarding possible padding). + See PostProcess for information on how to retrieve the unnormalized bounding box. + - "aux_outputs": Optional, only returned when auxilary losses are activated. It is a list of + dictionnaries containing the two above keys for each decoder layer. """ if not isinstance(samples, NestedTensor): samples = nested_tensor_from_tensor_list(samples) @@ -145,7 +182,9 @@ def forward(self, samples: NestedTensor): else: src = self.input_proj[l](srcs[-1]) m = samples.mask - mask = F.interpolate(m[None].float(), size=src.shape[-2:]).to(torch.bool)[0] + mask = F.interpolate(m[None].float(), size=src.shape[-2:]).to( + torch.bool + )[0] pos_l = self.backbone[1](NestedTensor(src, mask)).to(src.dtype) srcs.append(src) masks.append(mask) @@ -154,7 +193,13 @@ def forward(self, samples: NestedTensor): query_embeds = None if not self.two_stage: query_embeds = self.query_embed.weight - hs, init_reference, inter_references, enc_outputs_class, enc_outputs_coord_unact = self.transformer(srcs, masks, pos, query_embeds) + ( + hs, + init_reference, + inter_references, + enc_outputs_class, + enc_outputs_coord_unact, + ) = self.transformer(srcs, masks, pos, query_embeds) outputs_classes = [] outputs_coords = [] @@ -177,13 +222,16 @@ def forward(self, samples: NestedTensor): outputs_class = torch.stack(outputs_classes) outputs_coord = torch.stack(outputs_coords) - out = {'pred_logits': outputs_class[-1], 'pred_boxes': outputs_coord[-1]} + out = {"pred_logits": outputs_class[-1], "pred_boxes": outputs_coord[-1]} if self.aux_loss: - out['aux_outputs'] = self._set_aux_loss(outputs_class, outputs_coord) + out["aux_outputs"] = self._set_aux_loss(outputs_class, outputs_coord) if self.two_stage: enc_outputs_coord = enc_outputs_coord_unact.sigmoid() - out['enc_outputs'] = {'pred_logits': enc_outputs_class, 'pred_boxes': enc_outputs_coord} + out["enc_outputs"] = { + "pred_logits": enc_outputs_class, + "pred_boxes": enc_outputs_coord, + } return out @torch.jit.unused @@ -191,18 +239,21 @@ def _set_aux_loss(self, outputs_class, outputs_coord): # this is a workaround to make torchscript happy, as torchscript # doesn't support dictionary with non-homogeneous values, such # as a dict having both a Tensor and a list. - return [{'pred_logits': a, 'pred_boxes': b} - for a, b in zip(outputs_class[:-1], outputs_coord[:-1])] + return [ + {"pred_logits": a, "pred_boxes": b} + for a, b in zip(outputs_class[:-1], outputs_coord[:-1]) + ] class SetCriterion(nn.Module): - """ This class computes the loss for DETR. + """This class computes the loss for DETR. The process happens in two steps: 1) we compute hungarian assignment between ground truth boxes and the outputs of the model 2) we supervise each pair of matched ground-truth / prediction (supervise class and box) """ + def __init__(self, num_classes, matcher, weight_dict, losses, focal_alpha=0.25): - """ Create the criterion. + """Create the criterion. Parameters: num_classes: number of object categories, omitting the special no-object category matcher: module able to compute a matching between targets and proposals @@ -221,66 +272,92 @@ def loss_labels(self, outputs, targets, indices, num_boxes, log=True): """Classification loss (NLL) targets dicts must contain the key "labels" containing a tensor of dim [nb_target_boxes] """ - assert 'pred_logits' in outputs - src_logits = outputs['pred_logits'] + assert "pred_logits" in outputs + src_logits = outputs["pred_logits"] idx = self._get_src_permutation_idx(indices) - target_classes_o = torch.cat([t["labels"][J] for t, (_, J) in zip(targets, indices)]) - target_classes = torch.full(src_logits.shape[:2], self.num_classes, - dtype=torch.int64, device=src_logits.device) + target_classes_o = torch.cat( + [t["labels"][J] for t, (_, J) in zip(targets, indices)] + ) + target_classes = torch.full( + src_logits.shape[:2], + self.num_classes, + dtype=torch.int64, + device=src_logits.device, + ) target_classes[idx] = target_classes_o - target_classes_onehot = torch.zeros([src_logits.shape[0], src_logits.shape[1], src_logits.shape[2] + 1], - dtype=src_logits.dtype, layout=src_logits.layout, device=src_logits.device) + target_classes_onehot = torch.zeros( + [src_logits.shape[0], src_logits.shape[1], src_logits.shape[2] + 1], + dtype=src_logits.dtype, + layout=src_logits.layout, + device=src_logits.device, + ) target_classes_onehot.scatter_(2, target_classes.unsqueeze(-1), 1) - target_classes_onehot = target_classes_onehot[:,:,:-1] - loss_ce = sigmoid_focal_loss(src_logits, target_classes_onehot, num_boxes, alpha=self.focal_alpha, gamma=2) * src_logits.shape[1] - losses = {'loss_ce': loss_ce} + target_classes_onehot = target_classes_onehot[:, :, :-1] + loss_ce = ( + sigmoid_focal_loss( + src_logits, + target_classes_onehot, + num_boxes, + alpha=self.focal_alpha, + gamma=2, + ) + * src_logits.shape[1] + ) + losses = {"loss_ce": loss_ce} if log: # TODO this should probably be a separate loss, not hacked in this one here - losses['class_error'] = 100 - accuracy(src_logits[idx], target_classes_o)[0] + losses["class_error"] = 100 - accuracy(src_logits[idx], target_classes_o)[0] return losses @torch.no_grad() def loss_cardinality(self, outputs, targets, indices, num_boxes): - """ Compute the cardinality error, ie the absolute error in the number of predicted non-empty boxes + """Compute the cardinality error, ie the absolute error in the number of predicted non-empty boxes This is not really a loss, it is intended for logging purposes only. It doesn't propagate gradients """ - pred_logits = outputs['pred_logits'] + pred_logits = outputs["pred_logits"] device = pred_logits.device - tgt_lengths = torch.as_tensor([len(v["labels"]) for v in targets], device=device) + tgt_lengths = torch.as_tensor( + [len(v["labels"]) for v in targets], device=device + ) # Count the number of predictions that are NOT "no-object" (which is the last class) card_pred = (pred_logits.argmax(-1) != pred_logits.shape[-1] - 1).sum(1) card_err = F.l1_loss(card_pred.float(), tgt_lengths.float()) - losses = {'cardinality_error': card_err} + losses = {"cardinality_error": card_err} return losses def loss_boxes(self, outputs, targets, indices, num_boxes): """Compute the losses related to the bounding boxes, the L1 regression loss and the GIoU loss - targets dicts must contain the key "boxes" containing a tensor of dim [nb_target_boxes, 4] - The target boxes are expected in format (center_x, center_y, h, w), normalized by the image size. + targets dicts must contain the key "boxes" containing a tensor of dim [nb_target_boxes, 4] + The target boxes are expected in format (center_x, center_y, h, w), normalized by the image size. """ - assert 'pred_boxes' in outputs + assert "pred_boxes" in outputs idx = self._get_src_permutation_idx(indices) - src_boxes = outputs['pred_boxes'][idx] - target_boxes = torch.cat([t['boxes'][i] for t, (_, i) in zip(targets, indices)], dim=0) + src_boxes = outputs["pred_boxes"][idx] + target_boxes = torch.cat( + [t["boxes"][i] for t, (_, i) in zip(targets, indices)], dim=0 + ) - loss_bbox = F.l1_loss(src_boxes, target_boxes, reduction='none') + loss_bbox = F.l1_loss(src_boxes, target_boxes, reduction="none") losses = {} - losses['loss_bbox'] = loss_bbox.sum() / num_boxes - - loss_giou = 1 - torch.diag(box_ops.generalized_box_iou( - box_ops.box_cxcywh_to_xyxy(src_boxes), - box_ops.box_cxcywh_to_xyxy(target_boxes))) - losses['loss_giou'] = loss_giou.sum() / num_boxes + losses["loss_bbox"] = loss_bbox.sum() / num_boxes + + loss_giou = 1 - torch.diag( + box_ops.generalized_box_iou( + box_ops.box_cxcywh_to_xyxy(src_boxes), + box_ops.box_cxcywh_to_xyxy(target_boxes), + ) + ) + losses["loss_giou"] = loss_giou.sum() / num_boxes return losses def loss_masks(self, outputs, targets, indices, num_boxes): """Compute the losses related to the masks: the focal loss and the dice loss. - targets dicts must contain the key "masks" containing a tensor of dim [nb_target_boxes, h, w] + targets dicts must contain the key "masks" containing a tensor of dim [nb_target_boxes, h, w] """ assert "pred_masks" in outputs @@ -290,13 +367,19 @@ def loss_masks(self, outputs, targets, indices, num_boxes): src_masks = outputs["pred_masks"] # TODO use valid to mask invalid areas due to padding in loss - target_masks, valid = nested_tensor_from_tensor_list([t["masks"] for t in targets]).decompose() + target_masks, valid = nested_tensor_from_tensor_list( + [t["masks"] for t in targets] + ).decompose() target_masks = target_masks.to(src_masks) src_masks = src_masks[src_idx] # upsample predictions to the target size - src_masks = interpolate(src_masks[:, None], size=target_masks.shape[-2:], - mode="bilinear", align_corners=False) + src_masks = interpolate( + src_masks[:, None], + size=target_masks.shape[-2:], + mode="bilinear", + align_corners=False, + ) src_masks = src_masks[:, 0].flatten(1) target_masks = target_masks[tgt_idx].flatten(1) @@ -309,41 +392,51 @@ def loss_masks(self, outputs, targets, indices, num_boxes): def _get_src_permutation_idx(self, indices): # permute predictions following indices - batch_idx = torch.cat([torch.full_like(src, i) for i, (src, _) in enumerate(indices)]) + batch_idx = torch.cat( + [torch.full_like(src, i) for i, (src, _) in enumerate(indices)] + ) src_idx = torch.cat([src for (src, _) in indices]) return batch_idx, src_idx def _get_tgt_permutation_idx(self, indices): # permute targets following indices - batch_idx = torch.cat([torch.full_like(tgt, i) for i, (_, tgt) in enumerate(indices)]) + batch_idx = torch.cat( + [torch.full_like(tgt, i) for i, (_, tgt) in enumerate(indices)] + ) tgt_idx = torch.cat([tgt for (_, tgt) in indices]) return batch_idx, tgt_idx def get_loss(self, loss, outputs, targets, indices, num_boxes, **kwargs): loss_map = { - 'labels': self.loss_labels, - 'cardinality': self.loss_cardinality, - 'boxes': self.loss_boxes, - 'masks': self.loss_masks + "labels": self.loss_labels, + "cardinality": self.loss_cardinality, + "boxes": self.loss_boxes, + "masks": self.loss_masks, } - assert loss in loss_map, f'do you really want to compute {loss} loss?' + assert loss in loss_map, f"do you really want to compute {loss} loss?" return loss_map[loss](outputs, targets, indices, num_boxes, **kwargs) def forward(self, outputs, targets): - """ This performs the loss computation. + """This performs the loss computation. Parameters: outputs: dict of tensors, see the output specification of the model for the format targets: list of dicts, such that len(targets) == batch_size. The expected keys in each dict depends on the losses applied, see each loss' doc """ - outputs_without_aux = {k: v for k, v in outputs.items() if k != 'aux_outputs' and k != 'enc_outputs'} + outputs_without_aux = { + k: v + for k, v in outputs.items() + if k != "aux_outputs" and k != "enc_outputs" + } # Retrieve the matching between the outputs of the last layer and the targets indices = self.matcher(outputs_without_aux, targets) # Compute the average number of target boxes accross all nodes, for normalization purposes num_boxes = sum(len(t["labels"]) for t in targets) - num_boxes = torch.as_tensor([num_boxes], dtype=torch.float, device=next(iter(outputs.values())).device) + num_boxes = torch.as_tensor( + [num_boxes], dtype=torch.float, device=next(iter(outputs.values())).device + ) if is_dist_avail_and_initialized(): torch.distributed.all_reduce(num_boxes) num_boxes = torch.clamp(num_boxes / get_world_size(), min=1).item() @@ -352,88 +445,101 @@ def forward(self, outputs, targets): losses = {} for loss in self.losses: kwargs = {} - losses.update(self.get_loss(loss, outputs, targets, indices, num_boxes, **kwargs)) + losses.update( + self.get_loss(loss, outputs, targets, indices, num_boxes, **kwargs) + ) # In case of auxiliary losses, we repeat this process with the output of each intermediate layer. - if 'aux_outputs' in outputs: - for i, aux_outputs in enumerate(outputs['aux_outputs']): + if "aux_outputs" in outputs: + for i, aux_outputs in enumerate(outputs["aux_outputs"]): indices = self.matcher(aux_outputs, targets) for loss in self.losses: - if loss == 'masks': + if loss == "masks": # Intermediate masks losses are too costly to compute, we ignore them. continue kwargs = {} - if loss == 'labels': + if loss == "labels": # Logging is enabled only for the last layer - kwargs['log'] = False - l_dict = self.get_loss(loss, aux_outputs, targets, indices, num_boxes, **kwargs) - l_dict = {k + f'_{i}': v for k, v in l_dict.items()} + kwargs["log"] = False + l_dict = self.get_loss( + loss, aux_outputs, targets, indices, num_boxes, **kwargs + ) + l_dict = {k + f"_{i}": v for k, v in l_dict.items()} losses.update(l_dict) - if 'enc_outputs' in outputs: - enc_outputs = outputs['enc_outputs'] + if "enc_outputs" in outputs: + enc_outputs = outputs["enc_outputs"] bin_targets = copy.deepcopy(targets) for bt in bin_targets: - bt['labels'] = torch.zeros_like(bt['labels']) + bt["labels"] = torch.zeros_like(bt["labels"]) indices = self.matcher(enc_outputs, bin_targets) for loss in self.losses: - if loss == 'masks': + if loss == "masks": # Intermediate masks losses are too costly to compute, we ignore them. continue kwargs = {} - if loss == 'labels': + if loss == "labels": # Logging is enabled only for the last layer - kwargs['log'] = False - l_dict = self.get_loss(loss, enc_outputs, bin_targets, indices, num_boxes, **kwargs) - l_dict = {k + f'_enc': v for k, v in l_dict.items()} + kwargs["log"] = False + l_dict = self.get_loss( + loss, enc_outputs, bin_targets, indices, num_boxes, **kwargs + ) + l_dict = {k + "_enc": v for k, v in l_dict.items()} losses.update(l_dict) return losses class PostProcess(nn.Module): - """ This module converts the model's output into the format expected by the coco api""" + """This module converts the model's output into the format expected by the coco api""" @torch.no_grad() def forward(self, outputs, target_sizes): - """ Perform the computation + """Perform the computation Parameters: outputs: raw outputs of the model target_sizes: tensor of dimension [batch_size x 2] containing the size of each images of the batch For evaluation, this must be the original image size (before any data augmentation) For visualization, this should be the image size after data augment, but before padding """ - out_logits, out_bbox = outputs['pred_logits'], outputs['pred_boxes'] + out_logits, out_bbox = outputs["pred_logits"], outputs["pred_boxes"] assert len(out_logits) == len(target_sizes) assert target_sizes.shape[1] == 2 prob = out_logits.sigmoid() - topk_values, topk_indexes = torch.topk(prob.view(out_logits.shape[0], -1), 100, dim=1) + topk_values, topk_indexes = torch.topk( + prob.view(out_logits.shape[0], -1), 100, dim=1 + ) scores = topk_values topk_boxes = topk_indexes // out_logits.shape[2] labels = topk_indexes % out_logits.shape[2] boxes = box_ops.box_cxcywh_to_xyxy(out_bbox) - boxes = torch.gather(boxes, 1, topk_boxes.unsqueeze(-1).repeat(1,1,4)) + boxes = torch.gather(boxes, 1, topk_boxes.unsqueeze(-1).repeat(1, 1, 4)) # and from relative [0, 1] to absolute [0, height] coordinates img_h, img_w = target_sizes.unbind(1) scale_fct = torch.stack([img_w, img_h, img_w, img_h], dim=1) boxes = boxes * scale_fct[:, None, :] - results = [{'scores': s, 'labels': l, 'boxes': b} for s, l, b in zip(scores, labels, boxes)] + results = [ + {"scores": s, "labels": l, "boxes": b} + for s, l, b in zip(scores, labels, boxes) + ] return results class MLP(nn.Module): - """ Very simple multi-layer perceptron (also called FFN)""" + """Very simple multi-layer perceptron (also called FFN)""" def __init__(self, input_dim, hidden_dim, output_dim, num_layers): super().__init__() self.num_layers = num_layers h = [hidden_dim] * (num_layers - 1) - self.layers = nn.ModuleList(nn.Linear(n, k) for n, k in zip([input_dim] + h, h + [output_dim])) + self.layers = nn.ModuleList( + nn.Linear(n, k) for n, k in zip([input_dim] + h, h + [output_dim]) + ) def forward(self, x): for i, layer in enumerate(self.layers): @@ -442,7 +548,7 @@ def forward(self, x): def build(args): - num_classes = 20 if args.dataset_file != 'coco' else 91 + num_classes = 20 if args.dataset_file != "coco" else 91 if args.dataset_file == "coco_panoptic": num_classes = 250 device = torch.device(args.device) @@ -463,8 +569,8 @@ def build(args): if args.masks: model = DETRsegm(model, freeze_detr=(args.frozen_weights is not None)) matcher = build_matcher(args) - weight_dict = {'loss_ce': args.cls_loss_coef, 'loss_bbox': args.bbox_loss_coef} - weight_dict['loss_giou'] = args.giou_loss_coef + weight_dict = {"loss_ce": args.cls_loss_coef, "loss_bbox": args.bbox_loss_coef} + weight_dict["loss_giou"] = args.giou_loss_coef if args.masks: weight_dict["loss_mask"] = args.mask_loss_coef weight_dict["loss_dice"] = args.dice_loss_coef @@ -472,21 +578,25 @@ def build(args): if args.aux_loss: aux_weight_dict = {} for i in range(args.dec_layers - 1): - aux_weight_dict.update({k + f'_{i}': v for k, v in weight_dict.items()}) - aux_weight_dict.update({k + f'_enc': v for k, v in weight_dict.items()}) + 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) - losses = ['labels', 'boxes', 'cardinality'] + losses = ["labels", "boxes", "cardinality"] if args.masks: losses += ["masks"] # num_classes, matcher, weight_dict, losses, focal_alpha=0.25 - criterion = SetCriterion(num_classes, matcher, weight_dict, losses, focal_alpha=args.focal_alpha) + criterion = SetCriterion( + num_classes, matcher, weight_dict, losses, focal_alpha=args.focal_alpha + ) criterion.to(device) - postprocessors = {'bbox': PostProcess()} + postprocessors = {"bbox": PostProcess()} if args.masks: - postprocessors['segm'] = PostProcessSegm() + postprocessors["segm"] = PostProcessSegm() if args.dataset_file == "coco_panoptic": is_thing_map = {i: i <= 90 for i in range(201)} - postprocessors["panoptic"] = PostProcessPanoptic(is_thing_map, threshold=0.85) + postprocessors["panoptic"] = PostProcessPanoptic( + is_thing_map, threshold=0.85 + ) return model, criterion, postprocessors diff --git a/dimos/models/Detic/third_party/Deformable-DETR/models/deformable_transformer.py b/dimos/models/Detic/third_party/Deformable-DETR/models/deformable_transformer.py index 08ca377798..7620b31bef 100644 --- a/dimos/models/Detic/third_party/Deformable-DETR/models/deformable_transformer.py +++ b/dimos/models/Detic/third_party/Deformable-DETR/models/deformable_transformer.py @@ -8,24 +8,34 @@ # ------------------------------------------------------------------------ import copy -from typing import Optional, List import math import torch import torch.nn.functional as F -from torch import nn, Tensor -from torch.nn.init import xavier_uniform_, constant_, uniform_, normal_ +from torch import nn +from torch.nn.init import xavier_uniform_, constant_, normal_ from util.misc import inverse_sigmoid from models.ops.modules import MSDeformAttn class DeformableTransformer(nn.Module): - def __init__(self, d_model=256, nhead=8, - num_encoder_layers=6, num_decoder_layers=6, dim_feedforward=1024, dropout=0.1, - activation="relu", return_intermediate_dec=False, - num_feature_levels=4, dec_n_points=4, enc_n_points=4, - two_stage=False, two_stage_num_proposals=300): + def __init__( + self, + d_model=256, + nhead=8, + num_encoder_layers=6, + num_decoder_layers=6, + dim_feedforward=1024, + dropout=0.1, + activation="relu", + return_intermediate_dec=False, + num_feature_levels=4, + dec_n_points=4, + enc_n_points=4, + two_stage=False, + two_stage_num_proposals=300, + ): super().__init__() self.d_model = d_model @@ -33,15 +43,29 @@ def __init__(self, d_model=256, nhead=8, self.two_stage = two_stage self.two_stage_num_proposals = two_stage_num_proposals - encoder_layer = DeformableTransformerEncoderLayer(d_model, dim_feedforward, - dropout, activation, - num_feature_levels, nhead, enc_n_points) + encoder_layer = DeformableTransformerEncoderLayer( + d_model, + dim_feedforward, + dropout, + activation, + num_feature_levels, + nhead, + enc_n_points, + ) self.encoder = DeformableTransformerEncoder(encoder_layer, num_encoder_layers) - decoder_layer = DeformableTransformerDecoderLayer(d_model, dim_feedforward, - dropout, activation, - num_feature_levels, nhead, dec_n_points) - self.decoder = DeformableTransformerDecoder(decoder_layer, num_decoder_layers, return_intermediate_dec) + decoder_layer = DeformableTransformerDecoderLayer( + d_model, + dim_feedforward, + dropout, + activation, + num_feature_levels, + nhead, + dec_n_points, + ) + self.decoder = DeformableTransformerDecoder( + decoder_layer, num_decoder_layers, return_intermediate_dec + ) self.level_embed = nn.Parameter(torch.Tensor(num_feature_levels, d_model)) @@ -64,7 +88,7 @@ def _reset_parameters(self): m._reset_parameters() if not self.two_stage: xavier_uniform_(self.reference_points.weight.data, gain=1.0) - constant_(self.reference_points.bias.data, 0.) + constant_(self.reference_points.bias.data, 0.0) normal_(self.level_embed) def get_proposal_pos_embed(self, proposals): @@ -72,14 +96,18 @@ def get_proposal_pos_embed(self, proposals): temperature = 10000 scale = 2 * math.pi - dim_t = torch.arange(num_pos_feats, dtype=torch.float32, device=proposals.device) + dim_t = torch.arange( + num_pos_feats, dtype=torch.float32, device=proposals.device + ) dim_t = temperature ** (2 * (dim_t // 2) / num_pos_feats) # N, L, 4 proposals = proposals.sigmoid() * scale # N, L, 4, 128 pos = proposals[:, :, :, None] / dim_t # N, L, 4, 64, 2 - pos = torch.stack((pos[:, :, :, 0::2].sin(), pos[:, :, :, 1::2].cos()), dim=4).flatten(2) + pos = torch.stack( + (pos[:, :, :, 0::2].sin(), pos[:, :, :, 1::2].cos()), dim=4 + ).flatten(2) return pos def gen_encoder_output_proposals(self, memory, memory_padding_mask, spatial_shapes): @@ -88,28 +116,46 @@ def gen_encoder_output_proposals(self, memory, memory_padding_mask, spatial_shap proposals = [] _cur = 0 for lvl, (H_, W_) in enumerate(spatial_shapes): - mask_flatten_ = memory_padding_mask[:, _cur:(_cur + H_ * W_)].view(N_, H_, W_, 1) + mask_flatten_ = memory_padding_mask[:, _cur : (_cur + H_ * W_)].view( + N_, H_, W_, 1 + ) valid_H = torch.sum(~mask_flatten_[:, :, 0, 0], 1) valid_W = torch.sum(~mask_flatten_[:, 0, :, 0], 1) - grid_y, grid_x = torch.meshgrid(torch.linspace(0, H_ - 1, H_, dtype=torch.float32, device=memory.device), - torch.linspace(0, W_ - 1, W_, dtype=torch.float32, device=memory.device)) + grid_y, grid_x = torch.meshgrid( + torch.linspace( + 0, H_ - 1, H_, dtype=torch.float32, device=memory.device + ), + torch.linspace( + 0, W_ - 1, W_, dtype=torch.float32, device=memory.device + ), + ) grid = torch.cat([grid_x.unsqueeze(-1), grid_y.unsqueeze(-1)], -1) - scale = torch.cat([valid_W.unsqueeze(-1), valid_H.unsqueeze(-1)], 1).view(N_, 1, 1, 2) + scale = torch.cat([valid_W.unsqueeze(-1), valid_H.unsqueeze(-1)], 1).view( + N_, 1, 1, 2 + ) grid = (grid.unsqueeze(0).expand(N_, -1, -1, -1) + 0.5) / scale - wh = torch.ones_like(grid) * 0.05 * (2.0 ** lvl) + wh = torch.ones_like(grid) * 0.05 * (2.0**lvl) proposal = torch.cat((grid, wh), -1).view(N_, -1, 4) proposals.append(proposal) - _cur += (H_ * W_) + _cur += H_ * W_ output_proposals = torch.cat(proposals, 1) - output_proposals_valid = ((output_proposals > 0.01) & (output_proposals < 0.99)).all(-1, keepdim=True) + output_proposals_valid = ( + (output_proposals > 0.01) & (output_proposals < 0.99) + ).all(-1, keepdim=True) output_proposals = torch.log(output_proposals / (1 - output_proposals)) - output_proposals = output_proposals.masked_fill(memory_padding_mask.unsqueeze(-1), float('inf')) - output_proposals = output_proposals.masked_fill(~output_proposals_valid, float('inf')) + output_proposals = output_proposals.masked_fill( + memory_padding_mask.unsqueeze(-1), float("inf") + ) + output_proposals = output_proposals.masked_fill( + ~output_proposals_valid, float("inf") + ) output_memory = memory - output_memory = output_memory.masked_fill(memory_padding_mask.unsqueeze(-1), float(0)) + output_memory = output_memory.masked_fill( + memory_padding_mask.unsqueeze(-1), float(0) + ) output_memory = output_memory.masked_fill(~output_proposals_valid, float(0)) output_memory = self.enc_output_norm(self.enc_output(output_memory)) return output_memory, output_proposals @@ -145,29 +191,51 @@ def forward(self, srcs, masks, pos_embeds, query_embed=None): src_flatten = torch.cat(src_flatten, 1) mask_flatten = torch.cat(mask_flatten, 1) lvl_pos_embed_flatten = torch.cat(lvl_pos_embed_flatten, 1) - spatial_shapes = torch.as_tensor(spatial_shapes, dtype=torch.long, device=src_flatten.device) - level_start_index = torch.cat((spatial_shapes.new_zeros((1, )), spatial_shapes.prod(1).cumsum(0)[:-1])) + spatial_shapes = torch.as_tensor( + spatial_shapes, dtype=torch.long, device=src_flatten.device + ) + level_start_index = torch.cat( + (spatial_shapes.new_zeros((1,)), spatial_shapes.prod(1).cumsum(0)[:-1]) + ) valid_ratios = torch.stack([self.get_valid_ratio(m) for m in masks], 1) # encoder - memory = self.encoder(src_flatten, spatial_shapes, level_start_index, valid_ratios, lvl_pos_embed_flatten, mask_flatten) + memory = self.encoder( + src_flatten, + spatial_shapes, + level_start_index, + valid_ratios, + lvl_pos_embed_flatten, + mask_flatten, + ) # prepare input for decoder bs, _, c = memory.shape if self.two_stage: - output_memory, output_proposals = self.gen_encoder_output_proposals(memory, mask_flatten, spatial_shapes) + output_memory, output_proposals = self.gen_encoder_output_proposals( + memory, mask_flatten, spatial_shapes + ) # hack implementation for two-stage Deformable DETR - enc_outputs_class = self.decoder.class_embed[self.decoder.num_layers](output_memory) - enc_outputs_coord_unact = self.decoder.bbox_embed[self.decoder.num_layers](output_memory) + output_proposals + enc_outputs_class = self.decoder.class_embed[self.decoder.num_layers]( + output_memory + ) + enc_outputs_coord_unact = ( + self.decoder.bbox_embed[self.decoder.num_layers](output_memory) + + output_proposals + ) topk = self.two_stage_num_proposals topk_proposals = torch.topk(enc_outputs_class[..., 0], topk, dim=1)[1] - topk_coords_unact = torch.gather(enc_outputs_coord_unact, 1, topk_proposals.unsqueeze(-1).repeat(1, 1, 4)) + topk_coords_unact = torch.gather( + enc_outputs_coord_unact, 1, topk_proposals.unsqueeze(-1).repeat(1, 1, 4) + ) topk_coords_unact = topk_coords_unact.detach() reference_points = topk_coords_unact.sigmoid() init_reference_out = reference_points - pos_trans_out = self.pos_trans_norm(self.pos_trans(self.get_proposal_pos_embed(topk_coords_unact))) + pos_trans_out = self.pos_trans_norm( + self.pos_trans(self.get_proposal_pos_embed(topk_coords_unact)) + ) query_embed, tgt = torch.split(pos_trans_out, c, dim=2) else: query_embed, tgt = torch.split(query_embed, c, dim=1) @@ -177,20 +245,40 @@ def forward(self, srcs, masks, pos_embeds, query_embed=None): init_reference_out = reference_points # decoder - hs, inter_references = self.decoder(tgt, reference_points, memory, - spatial_shapes, level_start_index, valid_ratios, query_embed, mask_flatten) + hs, inter_references = self.decoder( + tgt, + reference_points, + memory, + spatial_shapes, + level_start_index, + valid_ratios, + query_embed, + mask_flatten, + ) inter_references_out = inter_references if self.two_stage: - return hs, init_reference_out, inter_references_out, enc_outputs_class, enc_outputs_coord_unact + return ( + hs, + init_reference_out, + inter_references_out, + enc_outputs_class, + enc_outputs_coord_unact, + ) return hs, init_reference_out, inter_references_out, None, None class DeformableTransformerEncoderLayer(nn.Module): - def __init__(self, - d_model=256, d_ffn=1024, - dropout=0.1, activation="relu", - n_levels=4, n_heads=8, n_points=4): + def __init__( + self, + d_model=256, + d_ffn=1024, + dropout=0.1, + activation="relu", + n_levels=4, + n_heads=8, + n_points=4, + ): super().__init__() # self attention @@ -216,9 +304,24 @@ def forward_ffn(self, src): src = self.norm2(src) return src - def forward(self, src, pos, reference_points, spatial_shapes, level_start_index, padding_mask=None): + def forward( + self, + src, + pos, + reference_points, + spatial_shapes, + level_start_index, + padding_mask=None, + ): # self attention - src2 = self.self_attn(self.with_pos_embed(src, pos), reference_points, src, spatial_shapes, level_start_index, padding_mask) + src2 = self.self_attn( + self.with_pos_embed(src, pos), + reference_points, + src, + spatial_shapes, + level_start_index, + padding_mask, + ) src = src + self.dropout1(src2) src = self.norm1(src) @@ -238,9 +341,10 @@ def __init__(self, encoder_layer, num_layers): def get_reference_points(spatial_shapes, valid_ratios, device): reference_points_list = [] for lvl, (H_, W_) in enumerate(spatial_shapes): - - ref_y, ref_x = torch.meshgrid(torch.linspace(0.5, H_ - 0.5, H_, dtype=torch.float32, device=device), - torch.linspace(0.5, W_ - 0.5, W_, dtype=torch.float32, device=device)) + ref_y, ref_x = torch.meshgrid( + torch.linspace(0.5, H_ - 0.5, H_, dtype=torch.float32, device=device), + torch.linspace(0.5, W_ - 0.5, W_, dtype=torch.float32, device=device), + ) ref_y = ref_y.reshape(-1)[None] / (valid_ratios[:, None, lvl, 1] * H_) ref_x = ref_x.reshape(-1)[None] / (valid_ratios[:, None, lvl, 0] * W_) ref = torch.stack((ref_x, ref_y), -1) @@ -249,19 +353,43 @@ def get_reference_points(spatial_shapes, valid_ratios, device): reference_points = reference_points[:, :, None] * valid_ratios[:, None] return reference_points - def forward(self, src, spatial_shapes, level_start_index, valid_ratios, pos=None, padding_mask=None): + def forward( + self, + src, + spatial_shapes, + level_start_index, + valid_ratios, + pos=None, + padding_mask=None, + ): output = src - reference_points = self.get_reference_points(spatial_shapes, valid_ratios, device=src.device) + reference_points = self.get_reference_points( + spatial_shapes, valid_ratios, device=src.device + ) for _, layer in enumerate(self.layers): - output = layer(output, pos, reference_points, spatial_shapes, level_start_index, padding_mask) + output = layer( + output, + pos, + reference_points, + spatial_shapes, + level_start_index, + padding_mask, + ) return output class DeformableTransformerDecoderLayer(nn.Module): - def __init__(self, d_model=256, d_ffn=1024, - dropout=0.1, activation="relu", - n_levels=4, n_heads=8, n_points=4): + def __init__( + self, + d_model=256, + d_ffn=1024, + dropout=0.1, + activation="relu", + n_levels=4, + n_heads=8, + n_points=4, + ): super().__init__() # cross attention @@ -292,17 +420,33 @@ def forward_ffn(self, tgt): tgt = self.norm3(tgt) return tgt - def forward(self, tgt, query_pos, reference_points, src, src_spatial_shapes, level_start_index, src_padding_mask=None): + def forward( + self, + tgt, + query_pos, + reference_points, + src, + src_spatial_shapes, + level_start_index, + src_padding_mask=None, + ): # self attention q = k = self.with_pos_embed(tgt, query_pos) - tgt2 = self.self_attn(q.transpose(0, 1), k.transpose(0, 1), tgt.transpose(0, 1))[0].transpose(0, 1) + tgt2 = self.self_attn( + q.transpose(0, 1), k.transpose(0, 1), tgt.transpose(0, 1) + )[0].transpose(0, 1) tgt = tgt + self.dropout2(tgt2) tgt = self.norm2(tgt) # cross attention - tgt2 = self.cross_attn(self.with_pos_embed(tgt, query_pos), - reference_points, - src, src_spatial_shapes, level_start_index, src_padding_mask) + tgt2 = self.cross_attn( + self.with_pos_embed(tgt, query_pos), + reference_points, + src, + src_spatial_shapes, + level_start_index, + src_padding_mask, + ) tgt = tgt + self.dropout1(tgt2) tgt = self.norm1(tgt) @@ -322,20 +466,41 @@ def __init__(self, decoder_layer, num_layers, return_intermediate=False): self.bbox_embed = None self.class_embed = None - def forward(self, tgt, reference_points, src, src_spatial_shapes, src_level_start_index, src_valid_ratios, - query_pos=None, src_padding_mask=None): + def forward( + self, + tgt, + reference_points, + src, + src_spatial_shapes, + src_level_start_index, + src_valid_ratios, + query_pos=None, + src_padding_mask=None, + ): output = tgt intermediate = [] intermediate_reference_points = [] for lid, layer in enumerate(self.layers): if reference_points.shape[-1] == 4: - reference_points_input = reference_points[:, :, None] \ - * torch.cat([src_valid_ratios, src_valid_ratios], -1)[:, None] + reference_points_input = ( + reference_points[:, :, None] + * torch.cat([src_valid_ratios, src_valid_ratios], -1)[:, None] + ) else: assert reference_points.shape[-1] == 2 - reference_points_input = reference_points[:, :, None] * src_valid_ratios[:, None] - output = layer(output, query_pos, reference_points_input, src, src_spatial_shapes, src_level_start_index, src_padding_mask) + reference_points_input = ( + reference_points[:, :, None] * src_valid_ratios[:, None] + ) + output = layer( + output, + query_pos, + reference_points_input, + src, + src_spatial_shapes, + src_level_start_index, + src_padding_mask, + ) # hack implementation for iterative bounding box refinement if self.bbox_embed is not None: @@ -346,7 +511,9 @@ def forward(self, tgt, reference_points, src, src_spatial_shapes, src_level_star else: assert reference_points.shape[-1] == 2 new_reference_points = tmp - new_reference_points[..., :2] = tmp[..., :2] + inverse_sigmoid(reference_points) + new_reference_points[..., :2] = tmp[..., :2] + inverse_sigmoid( + reference_points + ) new_reference_points = new_reference_points.sigmoid() reference_points = new_reference_points.detach() @@ -372,7 +539,7 @@ def _get_activation_fn(activation): return F.gelu if activation == "glu": return F.glu - raise RuntimeError(F"activation should be relu/gelu, not {activation}.") + raise RuntimeError(f"activation should be relu/gelu, not {activation}.") def build_deforamble_transformer(args): @@ -389,6 +556,5 @@ def build_deforamble_transformer(args): dec_n_points=args.dec_n_points, enc_n_points=args.enc_n_points, two_stage=args.two_stage, - two_stage_num_proposals=args.num_queries) - - + two_stage_num_proposals=args.num_queries, + ) diff --git a/dimos/models/Detic/third_party/Deformable-DETR/models/matcher.py b/dimos/models/Detic/third_party/Deformable-DETR/models/matcher.py index 63ef029425..93d3a73e94 100644 --- a/dimos/models/Detic/third_party/Deformable-DETR/models/matcher.py +++ b/dimos/models/Detic/third_party/Deformable-DETR/models/matcher.py @@ -10,6 +10,7 @@ """ Modules to compute the matching cost and solve the corresponding LSAP. """ + import torch from scipy.optimize import linear_sum_assignment from torch import nn @@ -25,10 +26,9 @@ class HungarianMatcher(nn.Module): while the others are un-matched (and thus treated as non-objects). """ - def __init__(self, - cost_class: float = 1, - cost_bbox: float = 1, - cost_giou: float = 1): + def __init__( + self, cost_class: float = 1, cost_bbox: float = 1, cost_giou: float = 1 + ): """Creates the matcher Params: @@ -40,10 +40,12 @@ def __init__(self, self.cost_class = cost_class self.cost_bbox = cost_bbox self.cost_giou = cost_giou - assert cost_class != 0 or cost_bbox != 0 or cost_giou != 0, "all costs cant be 0" + assert cost_class != 0 or cost_bbox != 0 or cost_giou != 0, ( + "all costs cant be 0" + ) def forward(self, outputs, targets): - """ Performs the matching + """Performs the matching Params: outputs: This is a dict that contains at least these entries: @@ -67,7 +69,9 @@ def forward(self, outputs, targets): # We flatten to compute the cost matrices in a batch out_prob = outputs["pred_logits"].flatten(0, 1).sigmoid() - out_bbox = outputs["pred_boxes"].flatten(0, 1) # [batch_size * num_queries, 4] + out_bbox = outputs["pred_boxes"].flatten( + 0, 1 + ) # [batch_size * num_queries, 4] # Also concat the target labels and boxes tgt_ids = torch.cat([v["labels"] for v in targets]) @@ -76,27 +80,46 @@ def forward(self, outputs, targets): # Compute the classification cost. alpha = 0.25 gamma = 2.0 - neg_cost_class = (1 - alpha) * (out_prob ** gamma) * (-(1 - out_prob + 1e-8).log()) - pos_cost_class = alpha * ((1 - out_prob) ** gamma) * (-(out_prob + 1e-8).log()) + neg_cost_class = ( + (1 - alpha) * (out_prob**gamma) * (-(1 - out_prob + 1e-8).log()) + ) + pos_cost_class = ( + alpha * ((1 - out_prob) ** gamma) * (-(out_prob + 1e-8).log()) + ) cost_class = pos_cost_class[:, tgt_ids] - neg_cost_class[:, tgt_ids] # Compute the L1 cost between boxes cost_bbox = torch.cdist(out_bbox, tgt_bbox, p=1) # Compute the giou cost betwen boxes - cost_giou = -generalized_box_iou(box_cxcywh_to_xyxy(out_bbox), - box_cxcywh_to_xyxy(tgt_bbox)) + cost_giou = -generalized_box_iou( + box_cxcywh_to_xyxy(out_bbox), box_cxcywh_to_xyxy(tgt_bbox) + ) # Final cost matrix - C = self.cost_bbox * cost_bbox + self.cost_class * cost_class + self.cost_giou * cost_giou + C = ( + self.cost_bbox * cost_bbox + + self.cost_class * cost_class + + self.cost_giou * cost_giou + ) C = C.view(bs, num_queries, -1).cpu() sizes = [len(v["boxes"]) for v in targets] - indices = [linear_sum_assignment(c[i]) for i, c in enumerate(C.split(sizes, -1))] - return [(torch.as_tensor(i, dtype=torch.int64), torch.as_tensor(j, dtype=torch.int64)) for i, j in indices] + indices = [ + linear_sum_assignment(c[i]) for i, c in enumerate(C.split(sizes, -1)) + ] + return [ + ( + torch.as_tensor(i, dtype=torch.int64), + torch.as_tensor(j, dtype=torch.int64), + ) + for i, j in indices + ] def build_matcher(args): - return HungarianMatcher(cost_class=args.set_cost_class, - cost_bbox=args.set_cost_bbox, - cost_giou=args.set_cost_giou) + return HungarianMatcher( + cost_class=args.set_cost_class, + cost_bbox=args.set_cost_bbox, + cost_giou=args.set_cost_giou, + ) diff --git a/dimos/models/Detic/third_party/Deformable-DETR/models/ops/functions/__init__.py b/dimos/models/Detic/third_party/Deformable-DETR/models/ops/functions/__init__.py index 8a2197bda3..c528f3c6cf 100644 --- a/dimos/models/Detic/third_party/Deformable-DETR/models/ops/functions/__init__.py +++ b/dimos/models/Detic/third_party/Deformable-DETR/models/ops/functions/__init__.py @@ -7,4 +7,3 @@ # ------------------------------------------------------------------------------------------------ from .ms_deform_attn_func import MSDeformAttnFunction - diff --git a/dimos/models/Detic/third_party/Deformable-DETR/models/ops/functions/ms_deform_attn_func.py b/dimos/models/Detic/third_party/Deformable-DETR/models/ops/functions/ms_deform_attn_func.py index 8c5df8cf5d..246ab136b5 100644 --- a/dimos/models/Detic/third_party/Deformable-DETR/models/ops/functions/ms_deform_attn_func.py +++ b/dimos/models/Detic/third_party/Deformable-DETR/models/ops/functions/ms_deform_attn_func.py @@ -20,25 +20,59 @@ class MSDeformAttnFunction(Function): @staticmethod - def forward(ctx, value, value_spatial_shapes, value_level_start_index, sampling_locations, attention_weights, im2col_step): + def forward( + ctx, + value, + value_spatial_shapes, + value_level_start_index, + sampling_locations, + attention_weights, + im2col_step, + ): ctx.im2col_step = im2col_step output = MSDA.ms_deform_attn_forward( - value, value_spatial_shapes, value_level_start_index, sampling_locations, attention_weights, ctx.im2col_step) - ctx.save_for_backward(value, value_spatial_shapes, value_level_start_index, sampling_locations, attention_weights) + value, + value_spatial_shapes, + value_level_start_index, + sampling_locations, + attention_weights, + ctx.im2col_step, + ) + ctx.save_for_backward( + value, + value_spatial_shapes, + value_level_start_index, + sampling_locations, + attention_weights, + ) return output @staticmethod @once_differentiable def backward(ctx, grad_output): - value, value_spatial_shapes, value_level_start_index, sampling_locations, attention_weights = ctx.saved_tensors - grad_value, grad_sampling_loc, grad_attn_weight = \ - MSDA.ms_deform_attn_backward( - value, value_spatial_shapes, value_level_start_index, sampling_locations, attention_weights, grad_output, ctx.im2col_step) + ( + value, + value_spatial_shapes, + value_level_start_index, + sampling_locations, + attention_weights, + ) = ctx.saved_tensors + grad_value, grad_sampling_loc, grad_attn_weight = MSDA.ms_deform_attn_backward( + value, + value_spatial_shapes, + value_level_start_index, + sampling_locations, + attention_weights, + grad_output, + ctx.im2col_step, + ) return grad_value, None, None, grad_sampling_loc, grad_attn_weight, None -def ms_deform_attn_core_pytorch(value, value_spatial_shapes, sampling_locations, attention_weights): +def ms_deform_attn_core_pytorch( + value, value_spatial_shapes, sampling_locations, attention_weights +): # for debug and test only, # need to use cuda version instead N_, S_, M_, D_ = value.shape @@ -48,14 +82,27 @@ def ms_deform_attn_core_pytorch(value, value_spatial_shapes, sampling_locations, sampling_value_list = [] for lid_, (H_, W_) in enumerate(value_spatial_shapes): # N_, H_*W_, M_, D_ -> N_, H_*W_, M_*D_ -> N_, M_*D_, H_*W_ -> N_*M_, D_, H_, W_ - value_l_ = value_list[lid_].flatten(2).transpose(1, 2).reshape(N_*M_, D_, H_, W_) + value_l_ = ( + value_list[lid_].flatten(2).transpose(1, 2).reshape(N_ * M_, D_, H_, W_) + ) # N_, Lq_, M_, P_, 2 -> N_, M_, Lq_, P_, 2 -> N_*M_, Lq_, P_, 2 sampling_grid_l_ = sampling_grids[:, :, :, lid_].transpose(1, 2).flatten(0, 1) # N_*M_, D_, Lq_, P_ - sampling_value_l_ = F.grid_sample(value_l_, sampling_grid_l_, - mode='bilinear', padding_mode='zeros', align_corners=False) + sampling_value_l_ = F.grid_sample( + value_l_, + sampling_grid_l_, + mode="bilinear", + padding_mode="zeros", + align_corners=False, + ) sampling_value_list.append(sampling_value_l_) # (N_, Lq_, M_, L_, P_) -> (N_, M_, Lq_, L_, P_) -> (N_, M_, 1, Lq_, L_*P_) - attention_weights = attention_weights.transpose(1, 2).reshape(N_*M_, 1, Lq_, L_*P_) - output = (torch.stack(sampling_value_list, dim=-2).flatten(-2) * attention_weights).sum(-1).view(N_, M_*D_, Lq_) + attention_weights = attention_weights.transpose(1, 2).reshape( + N_ * M_, 1, Lq_, L_ * P_ + ) + output = ( + (torch.stack(sampling_value_list, dim=-2).flatten(-2) * attention_weights) + .sum(-1) + .view(N_, M_ * D_, Lq_) + ) return output.transpose(1, 2).contiguous() diff --git a/dimos/models/Detic/third_party/Deformable-DETR/models/ops/modules/ms_deform_attn.py b/dimos/models/Detic/third_party/Deformable-DETR/models/ops/modules/ms_deform_attn.py index 663d64a3d2..494eb4648f 100644 --- a/dimos/models/Detic/third_party/Deformable-DETR/models/ops/modules/ms_deform_attn.py +++ b/dimos/models/Detic/third_party/Deformable-DETR/models/ops/modules/ms_deform_attn.py @@ -23,8 +23,10 @@ def _is_power_of_2(n): if (not isinstance(n, int)) or (n < 0): - raise ValueError("invalid input for _is_power_of_2: {} (type: {})".format(n, type(n))) - return (n & (n-1) == 0) and n != 0 + raise ValueError( + "invalid input for _is_power_of_2: {} (type: {})".format(n, type(n)) + ) + return (n & (n - 1) == 0) and n != 0 class MSDeformAttn(nn.Module): @@ -38,12 +40,18 @@ def __init__(self, d_model=256, n_levels=4, n_heads=8, n_points=4): """ super().__init__() if d_model % n_heads != 0: - raise ValueError('d_model must be divisible by n_heads, but got {} and {}'.format(d_model, n_heads)) + raise ValueError( + "d_model must be divisible by n_heads, but got {} and {}".format( + d_model, n_heads + ) + ) _d_per_head = d_model // n_heads # you'd better set _d_per_head to a power of 2 which is more efficient in our CUDA implementation if not _is_power_of_2(_d_per_head): - warnings.warn("You'd better set d_model in MSDeformAttn to make the dimension of each attention head a power of 2 " - "which is more efficient in our CUDA implementation.") + warnings.warn( + "You'd better set d_model in MSDeformAttn to make the dimension of each attention head a power of 2 " + "which is more efficient in our CUDA implementation." + ) self.im2col_step = 64 @@ -60,22 +68,36 @@ def __init__(self, d_model=256, n_levels=4, n_heads=8, n_points=4): self._reset_parameters() def _reset_parameters(self): - constant_(self.sampling_offsets.weight.data, 0.) - thetas = torch.arange(self.n_heads, dtype=torch.float32) * (2.0 * math.pi / self.n_heads) + constant_(self.sampling_offsets.weight.data, 0.0) + thetas = torch.arange(self.n_heads, dtype=torch.float32) * ( + 2.0 * math.pi / self.n_heads + ) grid_init = torch.stack([thetas.cos(), thetas.sin()], -1) - grid_init = (grid_init / grid_init.abs().max(-1, keepdim=True)[0]).view(self.n_heads, 1, 1, 2).repeat(1, self.n_levels, self.n_points, 1) + grid_init = ( + (grid_init / grid_init.abs().max(-1, keepdim=True)[0]) + .view(self.n_heads, 1, 1, 2) + .repeat(1, self.n_levels, self.n_points, 1) + ) for i in range(self.n_points): grid_init[:, :, i, :] *= i + 1 with torch.no_grad(): self.sampling_offsets.bias = nn.Parameter(grid_init.view(-1)) - constant_(self.attention_weights.weight.data, 0.) - constant_(self.attention_weights.bias.data, 0.) + constant_(self.attention_weights.weight.data, 0.0) + constant_(self.attention_weights.bias.data, 0.0) xavier_uniform_(self.value_proj.weight.data) - constant_(self.value_proj.bias.data, 0.) + constant_(self.value_proj.bias.data, 0.0) xavier_uniform_(self.output_proj.weight.data) - constant_(self.output_proj.bias.data, 0.) - - def forward(self, query, reference_points, input_flatten, input_spatial_shapes, input_level_start_index, input_padding_mask=None): + constant_(self.output_proj.bias.data, 0.0) + + def forward( + self, + query, + reference_points, + input_flatten, + input_spatial_shapes, + input_level_start_index, + input_padding_mask=None, + ): """ :param query (N, Length_{query}, C) :param reference_points (N, Length_{query}, n_levels, 2), range in [0, 1], top-left (0,0), bottom-right (1, 1), including padding area @@ -95,21 +117,45 @@ def forward(self, query, reference_points, input_flatten, input_spatial_shapes, if input_padding_mask is not None: value = value.masked_fill(input_padding_mask[..., None], float(0)) value = value.view(N, Len_in, self.n_heads, self.d_model // self.n_heads) - sampling_offsets = self.sampling_offsets(query).view(N, Len_q, self.n_heads, self.n_levels, self.n_points, 2) - attention_weights = self.attention_weights(query).view(N, Len_q, self.n_heads, self.n_levels * self.n_points) - attention_weights = F.softmax(attention_weights, -1).view(N, Len_q, self.n_heads, self.n_levels, self.n_points) + sampling_offsets = self.sampling_offsets(query).view( + N, Len_q, self.n_heads, self.n_levels, self.n_points, 2 + ) + attention_weights = self.attention_weights(query).view( + N, Len_q, self.n_heads, self.n_levels * self.n_points + ) + attention_weights = F.softmax(attention_weights, -1).view( + N, Len_q, self.n_heads, self.n_levels, self.n_points + ) # N, Len_q, n_heads, n_levels, n_points, 2 if reference_points.shape[-1] == 2: - offset_normalizer = torch.stack([input_spatial_shapes[..., 1], input_spatial_shapes[..., 0]], -1) - sampling_locations = reference_points[:, :, None, :, None, :] \ - + sampling_offsets / offset_normalizer[None, None, None, :, None, :] + offset_normalizer = torch.stack( + [input_spatial_shapes[..., 1], input_spatial_shapes[..., 0]], -1 + ) + sampling_locations = ( + reference_points[:, :, None, :, None, :] + + sampling_offsets / offset_normalizer[None, None, None, :, None, :] + ) elif reference_points.shape[-1] == 4: - sampling_locations = reference_points[:, :, None, :, None, :2] \ - + sampling_offsets / self.n_points * reference_points[:, :, None, :, None, 2:] * 0.5 + sampling_locations = ( + reference_points[:, :, None, :, None, :2] + + sampling_offsets + / self.n_points + * reference_points[:, :, None, :, None, 2:] + * 0.5 + ) else: raise ValueError( - 'Last dim of reference_points must be 2 or 4, but get {} instead.'.format(reference_points.shape[-1])) + "Last dim of reference_points must be 2 or 4, but get {} instead.".format( + reference_points.shape[-1] + ) + ) output = MSDeformAttnFunction.apply( - value, input_spatial_shapes, input_level_start_index, sampling_locations, attention_weights, self.im2col_step) + value, + input_spatial_shapes, + input_level_start_index, + sampling_locations, + attention_weights, + self.im2col_step, + ) output = self.output_proj(output) return output diff --git a/dimos/models/Detic/third_party/Deformable-DETR/models/ops/setup.py b/dimos/models/Detic/third_party/Deformable-DETR/models/ops/setup.py index a0131bc21c..7cf252f0cf 100644 --- a/dimos/models/Detic/third_party/Deformable-DETR/models/ops/setup.py +++ b/dimos/models/Detic/third_party/Deformable-DETR/models/ops/setup.py @@ -20,6 +20,7 @@ requirements = ["torch", "torchvision"] + def get_extensions(): this_dir = os.path.dirname(os.path.abspath(__file__)) extensions_dir = os.path.join(this_dir, "src") @@ -44,7 +45,7 @@ def get_extensions(): "-D__CUDA_NO_HALF2_OPERATORS__", ] else: - raise NotImplementedError('Cuda is not availabel') + raise NotImplementedError("Cuda is not availabel") sources = [os.path.join(extensions_dir, s) for s in sources] include_dirs = [extensions_dir] @@ -59,13 +60,19 @@ def get_extensions(): ] return ext_modules + setup( name="MultiScaleDeformableAttention", version="1.0", author="Weijie Su", url="https://github.com/fundamentalvision/Deformable-DETR", description="PyTorch Wrapper for CUDA Functions of Multi-Scale Deformable Attention", - packages=find_packages(exclude=("configs", "tests",)), + packages=find_packages( + exclude=( + "configs", + "tests", + ) + ), ext_modules=get_extensions(), cmdclass={"build_ext": torch.utils.cpp_extension.BuildExtension}, ) diff --git a/dimos/models/Detic/third_party/Deformable-DETR/models/ops/test.py b/dimos/models/Detic/third_party/Deformable-DETR/models/ops/test.py index 8dbf6d5547..bd085e3a39 100644 --- a/dimos/models/Detic/third_party/Deformable-DETR/models/ops/test.py +++ b/dimos/models/Detic/third_party/Deformable-DETR/models/ops/test.py @@ -10,19 +10,20 @@ from __future__ import print_function from __future__ import division -import time import torch -import torch.nn as nn from torch.autograd import gradcheck -from functions.ms_deform_attn_func import MSDeformAttnFunction, ms_deform_attn_core_pytorch +from functions.ms_deform_attn_func import ( + MSDeformAttnFunction, + ms_deform_attn_core_pytorch, +) N, M, D = 1, 2, 2 Lq, L, P = 2, 2, 2 shapes = torch.as_tensor([(6, 4), (3, 2)], dtype=torch.long).cuda() -level_start_index = torch.cat((shapes.new_zeros((1, )), shapes.prod(1).cumsum(0)[:-1])) -S = sum([(H*W).item() for H, W in shapes]) +level_start_index = torch.cat((shapes.new_zeros((1,)), shapes.prod(1).cumsum(0)[:-1])) +S = sum([(H * W).item() for H, W in shapes]) torch.manual_seed(3) @@ -35,13 +36,35 @@ def check_forward_equal_with_pytorch_double(): attention_weights = torch.rand(N, Lq, M, L, P).cuda() + 1e-5 attention_weights /= attention_weights.sum(-1, keepdim=True).sum(-2, keepdim=True) im2col_step = 2 - output_pytorch = ms_deform_attn_core_pytorch(value.double(), shapes, sampling_locations.double(), attention_weights.double()).detach().cpu() - output_cuda = MSDeformAttnFunction.apply(value.double(), shapes, level_start_index, sampling_locations.double(), attention_weights.double(), im2col_step).detach().cpu() + output_pytorch = ( + ms_deform_attn_core_pytorch( + value.double(), + shapes, + sampling_locations.double(), + attention_weights.double(), + ) + .detach() + .cpu() + ) + output_cuda = ( + MSDeformAttnFunction.apply( + value.double(), + shapes, + level_start_index, + sampling_locations.double(), + attention_weights.double(), + im2col_step, + ) + .detach() + .cpu() + ) fwdok = torch.allclose(output_cuda, output_pytorch) max_abs_err = (output_cuda - output_pytorch).abs().max() max_rel_err = ((output_cuda - output_pytorch).abs() / output_pytorch.abs()).max() - print(f'* {fwdok} check_forward_equal_with_pytorch_double: max_abs_err {max_abs_err:.2e} max_rel_err {max_rel_err:.2e}') + print( + f"* {fwdok} check_forward_equal_with_pytorch_double: max_abs_err {max_abs_err:.2e} max_rel_err {max_rel_err:.2e}" + ) @torch.no_grad() @@ -51,17 +74,37 @@ def check_forward_equal_with_pytorch_float(): attention_weights = torch.rand(N, Lq, M, L, P).cuda() + 1e-5 attention_weights /= attention_weights.sum(-1, keepdim=True).sum(-2, keepdim=True) im2col_step = 2 - output_pytorch = ms_deform_attn_core_pytorch(value, shapes, sampling_locations, attention_weights).detach().cpu() - output_cuda = MSDeformAttnFunction.apply(value, shapes, level_start_index, sampling_locations, attention_weights, im2col_step).detach().cpu() + output_pytorch = ( + ms_deform_attn_core_pytorch( + value, shapes, sampling_locations, attention_weights + ) + .detach() + .cpu() + ) + output_cuda = ( + MSDeformAttnFunction.apply( + value, + shapes, + level_start_index, + sampling_locations, + attention_weights, + im2col_step, + ) + .detach() + .cpu() + ) fwdok = torch.allclose(output_cuda, output_pytorch, rtol=1e-2, atol=1e-3) max_abs_err = (output_cuda - output_pytorch).abs().max() max_rel_err = ((output_cuda - output_pytorch).abs() / output_pytorch.abs()).max() - print(f'* {fwdok} check_forward_equal_with_pytorch_float: max_abs_err {max_abs_err:.2e} max_rel_err {max_rel_err:.2e}') + print( + f"* {fwdok} check_forward_equal_with_pytorch_float: max_abs_err {max_abs_err:.2e} max_rel_err {max_rel_err:.2e}" + ) -def check_gradient_numerical(channels=4, grad_value=True, grad_sampling_loc=True, grad_attn_weight=True): - +def check_gradient_numerical( + channels=4, grad_value=True, grad_sampling_loc=True, grad_attn_weight=True +): value = torch.rand(N, S, M, channels).cuda() * 0.01 sampling_locations = torch.rand(N, Lq, M, L, P, 2).cuda() attention_weights = torch.rand(N, Lq, M, L, P).cuda() + 1e-5 @@ -73,17 +116,24 @@ def check_gradient_numerical(channels=4, grad_value=True, grad_sampling_loc=True sampling_locations.requires_grad = grad_sampling_loc attention_weights.requires_grad = grad_attn_weight - gradok = gradcheck(func, (value.double(), shapes, level_start_index, sampling_locations.double(), attention_weights.double(), im2col_step)) + gradok = gradcheck( + func, + ( + value.double(), + shapes, + level_start_index, + sampling_locations.double(), + attention_weights.double(), + im2col_step, + ), + ) - print(f'* {gradok} check_gradient_numerical(D={channels})') + print(f"* {gradok} check_gradient_numerical(D={channels})") -if __name__ == '__main__': +if __name__ == "__main__": check_forward_equal_with_pytorch_double() check_forward_equal_with_pytorch_float() for channels in [30, 32, 64, 71, 1025, 2048, 3096]: check_gradient_numerical(channels, True, True, True) - - - diff --git a/dimos/models/Detic/third_party/Deformable-DETR/models/position_encoding.py b/dimos/models/Detic/third_party/Deformable-DETR/models/position_encoding.py index a92f0d36ae..db96ac7ad3 100644 --- a/dimos/models/Detic/third_party/Deformable-DETR/models/position_encoding.py +++ b/dimos/models/Detic/third_party/Deformable-DETR/models/position_encoding.py @@ -10,6 +10,7 @@ """ Various positional encodings for the transformer. """ + import math import torch from torch import nn @@ -22,7 +23,10 @@ class PositionEmbeddingSine(nn.Module): This is a more standard version of the position embedding, very similar to the one used by the Attention is all you need paper, generalized to work on images. """ - def __init__(self, num_pos_feats=64, temperature=10000, normalize=False, scale=None): + + def __init__( + self, num_pos_feats=64, temperature=10000, normalize=False, scale=None + ): super().__init__() self.num_pos_feats = num_pos_feats self.temperature = temperature @@ -50,8 +54,12 @@ def forward(self, tensor_list: NestedTensor): pos_x = x_embed[:, :, :, None] / dim_t pos_y = y_embed[:, :, :, None] / dim_t - pos_x = torch.stack((pos_x[:, :, :, 0::2].sin(), pos_x[:, :, :, 1::2].cos()), dim=4).flatten(3) - pos_y = torch.stack((pos_y[:, :, :, 0::2].sin(), pos_y[:, :, :, 1::2].cos()), dim=4).flatten(3) + pos_x = torch.stack( + (pos_x[:, :, :, 0::2].sin(), pos_x[:, :, :, 1::2].cos()), dim=4 + ).flatten(3) + pos_y = torch.stack( + (pos_y[:, :, :, 0::2].sin(), pos_y[:, :, :, 1::2].cos()), dim=4 + ).flatten(3) pos = torch.cat((pos_y, pos_x), dim=3).permute(0, 3, 1, 2) return pos @@ -60,6 +68,7 @@ class PositionEmbeddingLearned(nn.Module): """ Absolute pos embedding, learned. """ + def __init__(self, num_pos_feats=256): super().__init__() self.row_embed = nn.Embedding(50, num_pos_feats) @@ -77,19 +86,27 @@ def forward(self, tensor_list: NestedTensor): j = torch.arange(h, device=x.device) x_emb = self.col_embed(i) y_emb = self.row_embed(j) - pos = torch.cat([ - x_emb.unsqueeze(0).repeat(h, 1, 1), - y_emb.unsqueeze(1).repeat(1, w, 1), - ], dim=-1).permute(2, 0, 1).unsqueeze(0).repeat(x.shape[0], 1, 1, 1) + pos = ( + torch.cat( + [ + x_emb.unsqueeze(0).repeat(h, 1, 1), + y_emb.unsqueeze(1).repeat(1, w, 1), + ], + dim=-1, + ) + .permute(2, 0, 1) + .unsqueeze(0) + .repeat(x.shape[0], 1, 1, 1) + ) return pos def build_position_encoding(args): N_steps = args.hidden_dim // 2 - if args.position_embedding in ('v2', 'sine'): + if args.position_embedding in ("v2", "sine"): # TODO find a better way of exposing other arguments position_embedding = PositionEmbeddingSine(N_steps, normalize=True) - elif args.position_embedding in ('v3', 'learned'): + elif args.position_embedding in ("v3", "learned"): position_embedding = PositionEmbeddingLearned(N_steps) else: raise ValueError(f"not supported {args.position_embedding}") diff --git a/dimos/models/Detic/third_party/Deformable-DETR/models/segmentation.py b/dimos/models/Detic/third_party/Deformable-DETR/models/segmentation.py index c801c0eaad..85592dbd8b 100644 --- a/dimos/models/Detic/third_party/Deformable-DETR/models/segmentation.py +++ b/dimos/models/Detic/third_party/Deformable-DETR/models/segmentation.py @@ -10,6 +10,7 @@ """ This file provides the definition of the convolutional heads used to predict masks, as well as the losses """ + import io from collections import defaultdict @@ -38,7 +39,9 @@ def __init__(self, detr, freeze_detr=False): hidden_dim, nheads = detr.transformer.d_model, detr.transformer.nhead self.bbox_attention = MHAttentionMap(hidden_dim, hidden_dim, nheads, dropout=0) - self.mask_head = MaskHeadSmallConv(hidden_dim + nheads, [1024, 512, 256], hidden_dim) + self.mask_head = MaskHeadSmallConv( + hidden_dim + nheads, [1024, 512, 256], hidden_dim + ) def forward(self, samples: NestedTensor): if not isinstance(samples, NestedTensor): @@ -49,21 +52,30 @@ def forward(self, samples: NestedTensor): src, mask = features[-1].decompose() src_proj = self.detr.input_proj(src) - hs, memory = self.detr.transformer(src_proj, mask, self.detr.query_embed.weight, pos[-1]) + hs, memory = self.detr.transformer( + src_proj, mask, self.detr.query_embed.weight, pos[-1] + ) outputs_class = self.detr.class_embed(hs) outputs_coord = self.detr.bbox_embed(hs).sigmoid() out = {"pred_logits": outputs_class[-1], "pred_boxes": outputs_coord[-1]} if self.detr.aux_loss: out["aux_outputs"] = [ - {"pred_logits": a, "pred_boxes": b} for a, b in zip(outputs_class[:-1], outputs_coord[:-1]) + {"pred_logits": a, "pred_boxes": b} + for a, b in zip(outputs_class[:-1], outputs_coord[:-1]) ] # FIXME h_boxes takes the last one computed, keep this in mind bbox_mask = self.bbox_attention(hs[-1], memory, mask=mask) - seg_masks = self.mask_head(src_proj, bbox_mask, [features[2].tensors, features[1].tensors, features[0].tensors]) - outputs_seg_masks = seg_masks.view(bs, self.detr.num_queries, seg_masks.shape[-2], seg_masks.shape[-1]) + seg_masks = self.mask_head( + src_proj, + bbox_mask, + [features[2].tensors, features[1].tensors, features[0].tensors], + ) + outputs_seg_masks = seg_masks.view( + bs, self.detr.num_queries, seg_masks.shape[-2], seg_masks.shape[-1] + ) out["pred_masks"] = outputs_seg_masks return out @@ -78,7 +90,14 @@ class MaskHeadSmallConv(nn.Module): def __init__(self, dim, fpn_dims, context_dim): super().__init__() - inter_dims = [dim, context_dim // 2, context_dim // 4, context_dim // 8, context_dim // 16, context_dim // 64] + inter_dims = [ + dim, + context_dim // 2, + context_dim // 4, + context_dim // 8, + context_dim // 16, + context_dim // 64, + ] self.lay1 = torch.nn.Conv2d(dim, dim, 3, padding=1) self.gn1 = torch.nn.GroupNorm(8, dim) self.lay2 = torch.nn.Conv2d(dim, inter_dims[1], 3, padding=1) @@ -163,9 +182,19 @@ def __init__(self, query_dim, hidden_dim, num_heads, dropout=0, bias=True): def forward(self, q, k, mask=None): q = self.q_linear(q) - k = F.conv2d(k, self.k_linear.weight.unsqueeze(-1).unsqueeze(-1), self.k_linear.bias) - qh = q.view(q.shape[0], q.shape[1], self.num_heads, self.hidden_dim // self.num_heads) - kh = k.view(k.shape[0], self.num_heads, self.hidden_dim // self.num_heads, k.shape[-2], k.shape[-1]) + k = F.conv2d( + k, self.k_linear.weight.unsqueeze(-1).unsqueeze(-1), self.k_linear.bias + ) + qh = q.view( + q.shape[0], q.shape[1], self.num_heads, self.hidden_dim // self.num_heads + ) + kh = k.view( + k.shape[0], + self.num_heads, + self.hidden_dim // self.num_heads, + k.shape[-2], + k.shape[-1], + ) weights = torch.einsum("bqnc,bnchw->bqnhw", qh * self.normalize_fact, kh) if mask is not None: @@ -193,7 +222,9 @@ def dice_loss(inputs, targets, num_boxes): return loss.sum() / num_boxes -def sigmoid_focal_loss(inputs, targets, num_boxes, alpha: float = 0.25, gamma: float = 2): +def sigmoid_focal_loss( + inputs, targets, num_boxes, alpha: float = 0.25, gamma: float = 2 +): """ Loss used in RetinaNet for dense detection: https://arxiv.org/abs/1708.02002. Args: @@ -231,10 +262,14 @@ def forward(self, results, outputs, orig_target_sizes, max_target_sizes): assert len(orig_target_sizes) == len(max_target_sizes) max_h, max_w = max_target_sizes.max(0)[0].tolist() outputs_masks = outputs["pred_masks"].squeeze(2) - outputs_masks = F.interpolate(outputs_masks, size=(max_h, max_w), mode="bilinear", align_corners=False) + outputs_masks = F.interpolate( + outputs_masks, size=(max_h, max_w), mode="bilinear", align_corners=False + ) outputs_masks = (outputs_masks.sigmoid() > self.threshold).cpu() - for i, (cur_mask, t, tt) in enumerate(zip(outputs_masks, max_target_sizes, orig_target_sizes)): + for i, (cur_mask, t, tt) in enumerate( + zip(outputs_masks, max_target_sizes, orig_target_sizes) + ): img_h, img_w = t[0], t[1] results[i]["masks"] = cur_mask[:, :img_h, :img_w].unsqueeze(1) results[i]["masks"] = F.interpolate( @@ -246,7 +281,7 @@ def forward(self, results, outputs, orig_target_sizes, max_target_sizes): class PostProcessPanoptic(nn.Module): """This class converts the output of the model to the final panoptic result, in the format expected by the - coco panoptic API """ + coco panoptic API""" def __init__(self, is_thing_map, threshold=0.85): """ @@ -260,18 +295,22 @@ def __init__(self, is_thing_map, threshold=0.85): self.is_thing_map = is_thing_map def forward(self, outputs, processed_sizes, target_sizes=None): - """ This function computes the panoptic prediction from the model's predictions. + """This function computes the panoptic prediction from the model's predictions. Parameters: outputs: This is a dict coming directly from the model. See the model doc for the content. processed_sizes: This is a list of tuples (or torch tensors) of sizes of the images that were passed to the model, ie the size after data augmentation but before batching. target_sizes: This is a list of tuples (or torch tensors) corresponding to the requested final size of each prediction. If left to None, it will default to the processed_sizes - """ + """ if target_sizes is None: target_sizes = processed_sizes assert len(processed_sizes) == len(target_sizes) - out_logits, raw_masks, raw_boxes = outputs["pred_logits"], outputs["pred_masks"], outputs["pred_boxes"] + out_logits, raw_masks, raw_boxes = ( + outputs["pred_logits"], + outputs["pred_masks"], + outputs["pred_boxes"], + ) assert len(out_logits) == len(raw_masks) == len(target_sizes) preds = [] @@ -285,12 +324,16 @@ def to_tuple(tup): ): # we filter empty queries and detection below threshold scores, labels = cur_logits.softmax(-1).max(-1) - keep = labels.ne(outputs["pred_logits"].shape[-1] - 1) & (scores > self.threshold) + keep = labels.ne(outputs["pred_logits"].shape[-1] - 1) & ( + scores > self.threshold + ) cur_scores, cur_classes = cur_logits.softmax(-1).max(-1) cur_scores = cur_scores[keep] cur_classes = cur_classes[keep] cur_masks = cur_masks[keep] - cur_masks = interpolate(cur_masks[None], to_tuple(size), mode="bilinear").squeeze(0) + cur_masks = interpolate( + cur_masks[None], to_tuple(size), mode="bilinear" + ).squeeze(0) cur_boxes = box_ops.box_cxcywh_to_xyxy(cur_boxes[keep]) h, w = cur_masks.shape[-2:] @@ -326,10 +369,14 @@ def get_ids_area(masks, scores, dedup=False): final_h, final_w = to_tuple(target_size) seg_img = Image.fromarray(id2rgb(m_id.view(h, w).cpu().numpy())) - seg_img = seg_img.resize(size=(final_w, final_h), resample=Image.NEAREST) + seg_img = seg_img.resize( + size=(final_w, final_h), resample=Image.NEAREST + ) np_seg_img = ( - torch.ByteTensor(torch.ByteStorage.from_buffer(seg_img.tobytes())).view(final_h, final_w, 3).numpy() + torch.ByteTensor(torch.ByteStorage.from_buffer(seg_img.tobytes())) + .view(final_h, final_w, 3) + .numpy() ) m_id = torch.from_numpy(rgb2id(np_seg_img)) @@ -343,7 +390,9 @@ def get_ids_area(masks, scores, dedup=False): # We know filter empty masks as long as we find some while True: filtered_small = torch.as_tensor( - [area[i] <= 4 for i, c in enumerate(cur_classes)], dtype=torch.bool, device=keep.device + [area[i] <= 4 for i, c in enumerate(cur_classes)], + dtype=torch.bool, + device=keep.device, ) if filtered_small.any().item(): cur_scores = cur_scores[~filtered_small] @@ -359,11 +408,21 @@ def get_ids_area(masks, scores, dedup=False): segments_info = [] for i, a in enumerate(area): cat = cur_classes[i].item() - segments_info.append({"id": i, "isthing": self.is_thing_map[cat], "category_id": cat, "area": a}) + segments_info.append( + { + "id": i, + "isthing": self.is_thing_map[cat], + "category_id": cat, + "area": a, + } + ) del cur_classes with io.BytesIO() as out: seg_img.save(out, format="PNG") - predictions = {"png_string": out.getvalue(), "segments_info": segments_info} + predictions = { + "png_string": out.getvalue(), + "segments_info": segments_info, + } preds.append(predictions) return preds diff --git a/dimos/models/Detic/third_party/Deformable-DETR/tools/launch.py b/dimos/models/Detic/third_party/Deformable-DETR/tools/launch.py index 2b3ceaa7bc..c2fa5912f5 100644 --- a/dimos/models/Detic/third_party/Deformable-DETR/tools/launch.py +++ b/dimos/models/Detic/third_party/Deformable-DETR/tools/launch.py @@ -103,56 +103,72 @@ how things can go wrong if you don't do this correctly. """ - -import sys import subprocess import os -import socket from argparse import ArgumentParser, REMAINDER -import torch - def parse_args(): """ Helper function parsing the command line options @retval ArgumentParser """ - parser = ArgumentParser(description="PyTorch distributed training launch " - "helper utilty that will spawn up " - "multiple distributed processes") + parser = ArgumentParser( + description="PyTorch distributed training launch " + "helper utilty that will spawn up " + "multiple distributed processes" + ) # Optional arguments for the launch helper - parser.add_argument("--nnodes", type=int, default=1, - help="The number of nodes to use for distributed " - "training") - parser.add_argument("--node_rank", type=int, default=0, - help="The rank of the node for multi-node distributed " - "training") - parser.add_argument("--nproc_per_node", type=int, default=1, - help="The number of processes to launch on each node, " - "for GPU training, this is recommended to be set " - "to the number of GPUs in your system so that " - "each process can be bound to a single GPU.") - parser.add_argument("--master_addr", default="127.0.0.1", type=str, - help="Master node (rank 0)'s address, should be either " - "the IP address or the hostname of node 0, for " - "single node multi-proc training, the " - "--master_addr can simply be 127.0.0.1") - parser.add_argument("--master_port", default=29500, type=int, - help="Master node (rank 0)'s free port that needs to " - "be used for communciation during distributed " - "training") + parser.add_argument( + "--nnodes", + type=int, + default=1, + help="The number of nodes to use for distributed training", + ) + parser.add_argument( + "--node_rank", + type=int, + default=0, + help="The rank of the node for multi-node distributed training", + ) + parser.add_argument( + "--nproc_per_node", + type=int, + default=1, + help="The number of processes to launch on each node, " + "for GPU training, this is recommended to be set " + "to the number of GPUs in your system so that " + "each process can be bound to a single GPU.", + ) + parser.add_argument( + "--master_addr", + default="127.0.0.1", + type=str, + help="Master node (rank 0)'s address, should be either " + "the IP address or the hostname of node 0, for " + "single node multi-proc training, the " + "--master_addr can simply be 127.0.0.1", + ) + parser.add_argument( + "--master_port", + default=29500, + type=int, + help="Master node (rank 0)'s free port that needs to be used for communciation during distributed training", + ) # positional - parser.add_argument("training_script", type=str, - help="The full path to the single GPU training " - "program/script to be launched in parallel, " - "followed by all the arguments for the " - "training script") + parser.add_argument( + "training_script", + type=str, + help="The full path to the single GPU training " + "program/script to be launched in parallel, " + "followed by all the arguments for the " + "training script", + ) # rest from the training program - parser.add_argument('training_script_args', nargs=REMAINDER) + parser.add_argument("training_script_args", nargs=REMAINDER) return parser.parse_args() @@ -184,9 +200,10 @@ def main(): for process in processes: process.wait() if process.returncode != 0: - raise subprocess.CalledProcessError(returncode=process.returncode, - cmd=process.args) + raise subprocess.CalledProcessError( + returncode=process.returncode, cmd=process.args + ) if __name__ == "__main__": - main() \ No newline at end of file + main() diff --git a/dimos/models/Detic/third_party/Deformable-DETR/util/box_ops.py b/dimos/models/Detic/third_party/Deformable-DETR/util/box_ops.py index ca29592f80..5864b68d3b 100644 --- a/dimos/models/Detic/third_party/Deformable-DETR/util/box_ops.py +++ b/dimos/models/Detic/third_party/Deformable-DETR/util/box_ops.py @@ -10,21 +10,20 @@ """ Utilities for bounding box manipulation and GIoU. """ + import torch from torchvision.ops.boxes import box_area def box_cxcywh_to_xyxy(x): x_c, y_c, w, h = x.unbind(-1) - b = [(x_c - 0.5 * w), (y_c - 0.5 * h), - (x_c + 0.5 * w), (y_c + 0.5 * h)] + b = [(x_c - 0.5 * w), (y_c - 0.5 * h), (x_c + 0.5 * w), (y_c + 0.5 * h)] return torch.stack(b, dim=-1) def box_xyxy_to_cxcywh(x): x0, y0, x1, y1 = x.unbind(-1) - b = [(x0 + x1) / 2, (y0 + y1) / 2, - (x1 - x0), (y1 - y0)] + b = [(x0 + x1) / 2, (y0 + y1) / 2, (x1 - x0), (y1 - y0)] return torch.stack(b, dim=-1) @@ -85,11 +84,11 @@ def masks_to_boxes(masks): x = torch.arange(0, w, dtype=torch.float) y, x = torch.meshgrid(y, x) - x_mask = (masks * x.unsqueeze(0)) + x_mask = masks * x.unsqueeze(0) x_max = x_mask.flatten(1).max(-1)[0] x_min = x_mask.masked_fill(~(masks.bool()), 1e8).flatten(1).min(-1)[0] - y_mask = (masks * y.unsqueeze(0)) + y_mask = masks * y.unsqueeze(0) y_max = y_mask.flatten(1).max(-1)[0] y_min = y_mask.masked_fill(~(masks.bool()), 1e8).flatten(1).min(-1)[0] diff --git a/dimos/models/Detic/third_party/Deformable-DETR/util/misc.py b/dimos/models/Detic/third_party/Deformable-DETR/util/misc.py index 6d4d076720..4ceb8ba373 100644 --- a/dimos/models/Detic/third_party/Deformable-DETR/util/misc.py +++ b/dimos/models/Detic/third_party/Deformable-DETR/util/misc.py @@ -12,6 +12,7 @@ Mostly copy-paste from torchvision references. """ + import os import subprocess import time @@ -21,15 +22,16 @@ from typing import Optional, List import torch -import torch.nn as nn import torch.distributed as dist from torch import Tensor # needed due to empty tensor bug in pytorch and torchvision 0.5 import torchvision + if float(torchvision.__version__[:3]) < 0.5: import math from torchvision.ops.misc import _NewEmptyTensorOp + def _check_size_scale_factor(dim, size, scale_factor): # type: (int, Optional[List[int]], Optional[float]) -> None if size is None and scale_factor is None: @@ -38,9 +40,11 @@ def _check_size_scale_factor(dim, size, scale_factor): raise ValueError("only one of size or scale_factor should be defined") if not (scale_factor is not None and len(scale_factor) != dim): raise ValueError( - "scale_factor shape must match input shape. " - "Input is {}D, scale_factor size is {}".format(dim, len(scale_factor)) + "scale_factor shape must match input shape. Input is {}D, scale_factor size is {}".format( + dim, len(scale_factor) + ) ) + def _output_size(dim, input, size, scale_factor): # type: (int, Tensor, Optional[List[int]], Optional[float]) -> List[int] assert dim == 2 @@ -83,7 +87,7 @@ def synchronize_between_processes(self): """ if not is_dist_avail_and_initialized(): return - t = torch.tensor([self.count, self.total], dtype=torch.float64, device='cuda') + t = torch.tensor([self.count, self.total], dtype=torch.float64, device="cuda") dist.barrier() dist.all_reduce(t) t = t.tolist() @@ -118,7 +122,8 @@ def __str__(self): avg=self.avg, global_avg=self.global_avg, max=self.max, - value=self.value) + value=self.value, + ) def all_gather(data): @@ -152,7 +157,9 @@ def all_gather(data): for _ in size_list: tensor_list.append(torch.empty((max_size,), dtype=torch.uint8, device="cuda")) if local_size != max_size: - padding = torch.empty(size=(max_size - local_size,), dtype=torch.uint8, device="cuda") + padding = torch.empty( + size=(max_size - local_size,), dtype=torch.uint8, device="cuda" + ) tensor = torch.cat((tensor, padding), dim=0) dist.all_gather(tensor_list, tensor) @@ -208,15 +215,14 @@ def __getattr__(self, attr): return self.meters[attr] if attr in self.__dict__: return self.__dict__[attr] - raise AttributeError("'{}' object has no attribute '{}'".format( - type(self).__name__, attr)) + raise AttributeError( + "'{}' object has no attribute '{}'".format(type(self).__name__, attr) + ) def __str__(self): loss_str = [] for name, meter in self.meters.items(): - loss_str.append( - "{}: {}".format(name, str(meter)) - ) + loss_str.append("{}: {}".format(name, str(meter))) return self.delimiter.join(loss_str) def synchronize_between_processes(self): @@ -229,31 +235,35 @@ def add_meter(self, name, meter): def log_every(self, iterable, print_freq, header=None): i = 0 if not header: - header = '' + header = "" start_time = time.time() end = time.time() - iter_time = SmoothedValue(fmt='{avg:.4f}') - data_time = SmoothedValue(fmt='{avg:.4f}') - space_fmt = ':' + str(len(str(len(iterable)))) + 'd' + iter_time = SmoothedValue(fmt="{avg:.4f}") + data_time = SmoothedValue(fmt="{avg:.4f}") + space_fmt = ":" + str(len(str(len(iterable)))) + "d" if torch.cuda.is_available(): - log_msg = self.delimiter.join([ - header, - '[{0' + space_fmt + '}/{1}]', - 'eta: {eta}', - '{meters}', - 'time: {time}', - 'data: {data}', - 'max mem: {memory:.0f}' - ]) + log_msg = self.delimiter.join( + [ + header, + "[{0" + space_fmt + "}/{1}]", + "eta: {eta}", + "{meters}", + "time: {time}", + "data: {data}", + "max mem: {memory:.0f}", + ] + ) else: - log_msg = self.delimiter.join([ - header, - '[{0' + space_fmt + '}/{1}]', - 'eta: {eta}', - '{meters}', - 'time: {time}', - 'data: {data}' - ]) + log_msg = self.delimiter.join( + [ + header, + "[{0" + space_fmt + "}/{1}]", + "eta: {eta}", + "{meters}", + "time: {time}", + "data: {data}", + ] + ) MB = 1024.0 * 1024.0 for obj in iterable: data_time.update(time.time() - end) @@ -263,38 +273,54 @@ def log_every(self, iterable, print_freq, header=None): eta_seconds = iter_time.global_avg * (len(iterable) - i) eta_string = str(datetime.timedelta(seconds=int(eta_seconds))) if torch.cuda.is_available(): - print(log_msg.format( - i, len(iterable), eta=eta_string, - meters=str(self), - time=str(iter_time), data=str(data_time), - memory=torch.cuda.max_memory_allocated() / MB)) + print( + log_msg.format( + i, + len(iterable), + eta=eta_string, + meters=str(self), + time=str(iter_time), + data=str(data_time), + memory=torch.cuda.max_memory_allocated() / MB, + ) + ) else: - print(log_msg.format( - i, len(iterable), eta=eta_string, - meters=str(self), - time=str(iter_time), data=str(data_time))) + print( + log_msg.format( + i, + len(iterable), + eta=eta_string, + meters=str(self), + time=str(iter_time), + data=str(data_time), + ) + ) i += 1 end = time.time() total_time = time.time() - start_time total_time_str = str(datetime.timedelta(seconds=int(total_time))) - print('{} Total time: {} ({:.4f} s / it)'.format( - header, total_time_str, total_time / len(iterable))) + print( + "{} Total time: {} ({:.4f} s / it)".format( + header, total_time_str, total_time / len(iterable) + ) + ) def get_sha(): cwd = os.path.dirname(os.path.abspath(__file__)) def _run(command): - return subprocess.check_output(command, cwd=cwd).decode('ascii').strip() - sha = 'N/A' + return subprocess.check_output(command, cwd=cwd).decode("ascii").strip() + + sha = "N/A" diff = "clean" - branch = 'N/A' + branch = "N/A" try: - sha = _run(['git', 'rev-parse', 'HEAD']) - subprocess.check_output(['git', 'diff'], cwd=cwd) - diff = _run(['git', 'diff-index', 'HEAD']) + sha = _run(["git", "rev-parse", "HEAD"]) + subprocess.check_output(["git", "diff"], cwd=cwd) + diff = _run(["git", "diff-index", "HEAD"]) diff = "has uncommited changes" if diff else "clean" - branch = _run(['git', 'rev-parse', '--abbrev-ref', 'HEAD']) + branch = _run(["git", "rev-parse", "--abbrev-ref", "HEAD"]) except Exception: pass message = f"sha: {sha}, status: {diff}, branch: {branch}" @@ -330,9 +356,9 @@ def nested_tensor_from_tensor_list(tensor_list: List[Tensor]): mask = torch.ones((b, h, w), dtype=torch.bool, device=device) for img, pad_img, m in zip(tensor_list, tensor, mask): pad_img[: img.shape[0], : img.shape[1], : img.shape[2]].copy_(img) - m[: img.shape[1], :img.shape[2]] = False + m[: img.shape[1], : img.shape[2]] = False else: - raise ValueError('not supported') + raise ValueError("not supported") return NestedTensor(tensor, mask) @@ -369,10 +395,11 @@ def setup_for_distributed(is_master): This function disables printing when not in master process """ import builtins as __builtin__ + builtin_print = __builtin__.print def print(*args, **kwargs): - force = kwargs.pop('force', False) + force = kwargs.pop("force", False) if is_master or force: builtin_print(*args, **kwargs) @@ -402,13 +429,13 @@ def get_rank(): def get_local_size(): if not is_dist_avail_and_initialized(): return 1 - return int(os.environ['LOCAL_SIZE']) + return int(os.environ["LOCAL_SIZE"]) def get_local_rank(): if not is_dist_avail_and_initialized(): return 0 - return int(os.environ['LOCAL_RANK']) + return int(os.environ["LOCAL_RANK"]) def is_main_process(): @@ -421,42 +448,48 @@ def save_on_master(*args, **kwargs): def init_distributed_mode(args): - if 'RANK' in os.environ and 'WORLD_SIZE' in os.environ: + if "RANK" in os.environ and "WORLD_SIZE" in os.environ: args.rank = int(os.environ["RANK"]) - args.world_size = int(os.environ['WORLD_SIZE']) - args.gpu = int(os.environ['LOCAL_RANK']) - args.dist_url = 'env://' - os.environ['LOCAL_SIZE'] = str(torch.cuda.device_count()) - elif 'SLURM_PROCID' in os.environ: - proc_id = int(os.environ['SLURM_PROCID']) - ntasks = int(os.environ['SLURM_NTASKS']) - node_list = os.environ['SLURM_NODELIST'] + args.world_size = int(os.environ["WORLD_SIZE"]) + args.gpu = int(os.environ["LOCAL_RANK"]) + args.dist_url = "env://" + os.environ["LOCAL_SIZE"] = str(torch.cuda.device_count()) + elif "SLURM_PROCID" in os.environ: + proc_id = int(os.environ["SLURM_PROCID"]) + ntasks = int(os.environ["SLURM_NTASKS"]) + node_list = os.environ["SLURM_NODELIST"] num_gpus = torch.cuda.device_count() addr = subprocess.getoutput( - 'scontrol show hostname {} | head -n1'.format(node_list)) - os.environ['MASTER_PORT'] = os.environ.get('MASTER_PORT', '29500') - os.environ['MASTER_ADDR'] = addr - os.environ['WORLD_SIZE'] = str(ntasks) - os.environ['RANK'] = str(proc_id) - os.environ['LOCAL_RANK'] = str(proc_id % num_gpus) - os.environ['LOCAL_SIZE'] = str(num_gpus) - args.dist_url = 'env://' + "scontrol show hostname {} | head -n1".format(node_list) + ) + os.environ["MASTER_PORT"] = os.environ.get("MASTER_PORT", "29500") + os.environ["MASTER_ADDR"] = addr + os.environ["WORLD_SIZE"] = str(ntasks) + os.environ["RANK"] = str(proc_id) + os.environ["LOCAL_RANK"] = str(proc_id % num_gpus) + os.environ["LOCAL_SIZE"] = str(num_gpus) + args.dist_url = "env://" args.world_size = ntasks args.rank = proc_id args.gpu = proc_id % num_gpus else: - print('Not using distributed mode') + print("Not using distributed mode") args.distributed = False return args.distributed = True torch.cuda.set_device(args.gpu) - args.dist_backend = 'nccl' - print('| distributed init (rank {}): {}'.format( - args.rank, args.dist_url), flush=True) - torch.distributed.init_process_group(backend=args.dist_backend, init_method=args.dist_url, - world_size=args.world_size, rank=args.rank) + args.dist_backend = "nccl" + print( + "| distributed init (rank {}): {}".format(args.rank, args.dist_url), flush=True + ) + torch.distributed.init_process_group( + backend=args.dist_backend, + init_method=args.dist_url, + world_size=args.world_size, + rank=args.rank, + ) torch.distributed.barrier() setup_for_distributed(args.rank == 0) @@ -480,7 +513,9 @@ def accuracy(output, target, topk=(1,)): return res -def interpolate(input, size=None, scale_factor=None, mode="nearest", align_corners=None): +def interpolate( + input, size=None, scale_factor=None, mode="nearest", align_corners=None +): # type: (Tensor, Optional[List[int]], Optional[float], str, Optional[bool]) -> Tensor """ Equivalent to nn.functional.interpolate, but with support for empty batch sizes. @@ -499,20 +534,26 @@ class can go away. return _NewEmptyTensorOp.apply(input, output_shape) return _new_empty_tensor(input, output_shape) else: - return torchvision.ops.misc.interpolate(input, size, scale_factor, mode, align_corners) + return torchvision.ops.misc.interpolate( + input, size, scale_factor, mode, align_corners + ) def get_total_grad_norm(parameters, norm_type=2): parameters = list(filter(lambda p: p.grad is not None, parameters)) norm_type = float(norm_type) device = parameters[0].grad.device - total_norm = torch.norm(torch.stack([torch.norm(p.grad.detach(), norm_type).to(device) for p in parameters]), - norm_type) + total_norm = torch.norm( + torch.stack( + [torch.norm(p.grad.detach(), norm_type).to(device) for p in parameters] + ), + norm_type, + ) return total_norm + def inverse_sigmoid(x, eps=1e-5): x = x.clamp(min=0, max=1) x1 = x.clamp(min=eps) x2 = (1 - x).clamp(min=eps) - return torch.log(x1/x2) - + return torch.log(x1 / x2) diff --git a/dimos/models/Detic/third_party/Deformable-DETR/util/plot_utils.py b/dimos/models/Detic/third_party/Deformable-DETR/util/plot_utils.py index 759f34d252..0e852c1409 100644 --- a/dimos/models/Detic/third_party/Deformable-DETR/util/plot_utils.py +++ b/dimos/models/Detic/third_party/Deformable-DETR/util/plot_utils.py @@ -10,6 +10,7 @@ """ Plotting utilities to visualize training logs. """ + import torch import pandas as pd import seaborn as sns @@ -18,8 +19,13 @@ from pathlib import Path, PurePath -def plot_logs(logs, fields=('class_error', 'loss_bbox_unscaled', 'mAP'), ewm_col=0, log_name='log.txt'): - ''' +def plot_logs( + logs, + fields=("class_error", "loss_bbox_unscaled", "mAP"), + ewm_col=0, + log_name="log.txt", +): + """ Function to plot specific fields from training log(s). Plots both training and test results. :: Inputs - logs = list containing Path objects, each pointing to individual dir with a log file @@ -30,7 +36,7 @@ def plot_logs(logs, fields=('class_error', 'loss_bbox_unscaled', 'mAP'), ewm_col :: Outputs - matplotlib plots of results in fields, color coded for each log file. - solid lines are training results, dashed lines are test results. - ''' + """ func_name = "plot_utils.py::plot_logs" # verify logs is a list of Paths (list[Paths]) or single Pathlib object Path, @@ -39,15 +45,21 @@ def plot_logs(logs, fields=('class_error', 'loss_bbox_unscaled', 'mAP'), ewm_col if not isinstance(logs, list): if isinstance(logs, PurePath): logs = [logs] - print(f"{func_name} info: logs param expects a list argument, converted to list[Path].") + print( + f"{func_name} info: logs param expects a list argument, converted to list[Path]." + ) else: - raise ValueError(f"{func_name} - invalid argument for logs parameter.\n \ - Expect list[Path] or single Path obj, received {type(logs)}") + raise ValueError( + f"{func_name} - invalid argument for logs parameter.\n \ + Expect list[Path] or single Path obj, received {type(logs)}" + ) # verify valid dir(s) and that every item in list is Path object for i, dir in enumerate(logs): if not isinstance(dir, PurePath): - raise ValueError(f"{func_name} - non-Path object in logs argument of {type(dir)}: \n{dir}") + raise ValueError( + f"{func_name} - non-Path object in logs argument of {type(dir)}: \n{dir}" + ) if dir.exists(): continue raise ValueError(f"{func_name} - invalid directory in logs argument:\n{dir}") @@ -59,53 +71,57 @@ def plot_logs(logs, fields=('class_error', 'loss_bbox_unscaled', 'mAP'), ewm_col for df, color in zip(dfs, sns.color_palette(n_colors=len(logs))): for j, field in enumerate(fields): - if field == 'mAP': - coco_eval = pd.DataFrame(pd.np.stack(df.test_coco_eval.dropna().values)[:, 1]).ewm(com=ewm_col).mean() + if field == "mAP": + coco_eval = ( + pd.DataFrame(pd.np.stack(df.test_coco_eval.dropna().values)[:, 1]) + .ewm(com=ewm_col) + .mean() + ) axs[j].plot(coco_eval, c=color) else: df.interpolate().ewm(com=ewm_col).mean().plot( - y=[f'train_{field}', f'test_{field}'], + y=[f"train_{field}", f"test_{field}"], ax=axs[j], color=[color] * 2, - style=['-', '--'] + style=["-", "--"], ) for ax, field in zip(axs, fields): ax.legend([Path(p).name for p in logs]) ax.set_title(field) -def plot_precision_recall(files, naming_scheme='iter'): - if naming_scheme == 'exp_id': +def plot_precision_recall(files, naming_scheme="iter"): + if naming_scheme == "exp_id": # name becomes exp_id names = [f.parts[-3] for f in files] - elif naming_scheme == 'iter': + elif naming_scheme == "iter": names = [f.stem for f in files] else: - raise ValueError(f'not supported {naming_scheme}') + raise ValueError(f"not supported {naming_scheme}") fig, axs = plt.subplots(ncols=2, figsize=(16, 5)) - for f, color, name in zip(files, sns.color_palette("Blues", n_colors=len(files)), names): + for f, color, name in zip( + files, sns.color_palette("Blues", n_colors=len(files)), names + ): data = torch.load(f) # precision is n_iou, n_points, n_cat, n_area, max_det - precision = data['precision'] - recall = data['params'].recThrs - scores = data['scores'] + precision = data["precision"] + recall = data["params"].recThrs + scores = data["scores"] # take precision for all classes, all areas and 100 detections precision = precision[0, :, :, 0, -1].mean(1) scores = scores[0, :, :, 0, -1].mean(1) prec = precision.mean() - rec = data['recall'][0, :, 0, -1].mean() - print(f'{naming_scheme} {name}: mAP@50={prec * 100: 05.1f}, ' + - f'score={scores.mean():0.3f}, ' + - f'f1={2 * prec * rec / (prec + rec + 1e-8):0.3f}' - ) + rec = data["recall"][0, :, 0, -1].mean() + print( + f"{naming_scheme} {name}: mAP@50={prec * 100: 05.1f}, " + + f"score={scores.mean():0.3f}, " + + f"f1={2 * prec * rec / (prec + rec + 1e-8):0.3f}" + ) axs[0].plot(recall, precision, c=color) axs[1].plot(recall, scores, c=color) - axs[0].set_title('Precision / Recall') + axs[0].set_title("Precision / Recall") axs[0].legend(names) - axs[1].set_title('Scores / Recall') + axs[1].set_title("Scores / Recall") axs[1].legend(names) return fig, axs - - - diff --git a/dimos/models/Detic/tools/convert-thirdparty-pretrained-model-to-d2.py b/dimos/models/Detic/tools/convert-thirdparty-pretrained-model-to-d2.py index ec042b8ce4..6b24b5b260 100644 --- a/dimos/models/Detic/tools/convert-thirdparty-pretrained-model-to-d2.py +++ b/dimos/models/Detic/tools/convert-thirdparty-pretrained-model-to-d2.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved import argparse -import pickle +import pickle import torch """ @@ -19,21 +19,17 @@ if __name__ == "__main__": parser = argparse.ArgumentParser() - parser.add_argument('--path', default='') + parser.add_argument("--path", default="") args = parser.parse_args() - print('Loading', args.path) + 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) + 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/dimos/models/Detic/tools/create_imagenetlvis_json.py b/dimos/models/Detic/tools/create_imagenetlvis_json.py index 8f44f6221f..958affff6c 100644 --- a/dimos/models/Detic/tools/create_imagenetlvis_json.py +++ b/dimos/models/Detic/tools/create_imagenetlvis_json.py @@ -2,21 +2,23 @@ import argparse import json import os -import cv2 from nltk.corpus import wordnet from detectron2.data.detection_utils import read_image -if __name__ == '__main__': +if __name__ == "__main__": parser = argparse.ArgumentParser() - parser.add_argument('--imagenet_path', default='datasets/imagenet/ImageNet-LVIS') - 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') + parser.add_argument("--imagenet_path", default="datasets/imagenet/ImageNet-LVIS") + 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']} + 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 = {} @@ -24,31 +26,31 @@ for i, folder in enumerate(folders): class_path = args.imagenet_path + folder files = sorted(os.listdir(class_path)) - synset = wordnet.synset_from_pos_and_offset('n', int(folder[1:])).name() + synset = wordnet.synset_from_pos_and_offset("n", int(folder[1:])).name() cat = synset2cat[synset] - cat_id = cat['id'] - cat_name = cat['name'] + cat_id = cat["id"] + cat_name = cat["name"] cat_images = [] for file in files: count = count + 1 - file_name = '{}/{}'.format(folder, file) + file_name = "{}/{}".format(folder, file) # img = cv2.imread('{}/{}'.format(args.imagenet_path, file_name)) - img = read_image('{}/{}'.format(args.imagenet_path, file_name)) + img = read_image("{}/{}".format(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 + "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(i, 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')) + 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/dimos/models/Detic/tools/create_lvis_21k.py b/dimos/models/Detic/tools/create_lvis_21k.py index 3e6fe60a2d..dc69bd8c39 100644 --- a/dimos/models/Detic/tools/create_lvis_21k.py +++ b/dimos/models/Detic/tools/create_lvis_21k.py @@ -3,72 +3,76 @@ import copy import json -if __name__ == '__main__': +if __name__ == "__main__": parser = argparse.ArgumentParser() - parser.add_argument('--imagenet_path', default='datasets/imagenet/annotations/imagenet-21k_image_info.json') - parser.add_argument('--lvis_path', default='datasets/lvis/lvis_v1_train.json') - parser.add_argument('--save_categories', default='') - parser.add_argument('--not_save_imagenet', action='store_true') - parser.add_argument('--not_save_lvis', action='store_true') - parser.add_argument('--mark', default='lvis-21k') + parser.add_argument( + "--imagenet_path", + default="datasets/imagenet/annotations/imagenet-21k_image_info.json", + ) + parser.add_argument("--lvis_path", default="datasets/lvis/lvis_v1_train.json") + parser.add_argument("--save_categories", default="") + parser.add_argument("--not_save_imagenet", action="store_true") + parser.add_argument("--not_save_lvis", action="store_true") + parser.add_argument("--mark", default="lvis-21k") args = parser.parse_args() - print('Loading', args.imagenet_path) - in_data = json.load(open(args.imagenet_path, 'r')) - print('Loading', args.lvis_path) - lvis_data = json.load(open(args.lvis_path, 'r')) + print("Loading", args.imagenet_path) + in_data = json.load(open(args.imagenet_path, "r")) + print("Loading", args.lvis_path) + lvis_data = json.load(open(args.lvis_path, "r")) - categories = copy.deepcopy(lvis_data['categories']) - cat_count = max(x['id'] for x in categories) - synset2id = {x['synset']: x['id'] for x in categories} - name2id = {x['name']: x['id'] for x in categories} + categories = copy.deepcopy(lvis_data["categories"]) + cat_count = max(x["id"] for x in categories) + synset2id = {x["synset"]: x["id"] for x in categories} + name2id = {x["name"]: x["id"] for x in categories} in_id_map = {} - for x in in_data['categories']: - if x['synset'] in synset2id: - in_id_map[x['id']] = synset2id[x['synset']] - elif x['name'] in name2id: - in_id_map[x['id']] = name2id[x['name']] - x['id'] = name2id[x['name']] + for x in in_data["categories"]: + if x["synset"] in synset2id: + in_id_map[x["id"]] = synset2id[x["synset"]] + elif x["name"] in name2id: + in_id_map[x["id"]] = name2id[x["name"]] + x["id"] = name2id[x["name"]] else: cat_count = cat_count + 1 - name2id[x['name']] = cat_count - in_id_map[x['id']] = cat_count - x['id'] = cat_count + name2id[x["name"]] = cat_count + in_id_map[x["id"]] = cat_count + x["id"] = cat_count categories.append(x) - - print('lvis cats', len(lvis_data['categories'])) - print('imagenet cats', len(in_data['categories'])) - print('merge cats', len(categories)) + + print("lvis cats", len(lvis_data["categories"])) + print("imagenet cats", len(in_data["categories"])) + print("merge cats", len(categories)) filtered_images = [] - for x in in_data['images']: - x['pos_category_ids'] = [in_id_map[xx] for xx in x['pos_category_ids']] - x['pos_category_ids'] = [xx for xx in \ - sorted(set(x['pos_category_ids'])) if xx >= 0] - if len(x['pos_category_ids']) > 0: + for x in in_data["images"]: + x["pos_category_ids"] = [in_id_map[xx] for xx in x["pos_category_ids"]] + x["pos_category_ids"] = [ + xx for xx in sorted(set(x["pos_category_ids"])) if xx >= 0 + ] + if len(x["pos_category_ids"]) > 0: filtered_images.append(x) - in_data['categories'] = categories - lvis_data['categories'] = categories + in_data["categories"] = categories + lvis_data["categories"] = categories if not args.not_save_imagenet: - in_out_path = args.imagenet_path[:-5] + '_{}.json'.format(args.mark) + in_out_path = args.imagenet_path[:-5] + "_{}.json".format(args.mark) for k, v in in_data.items(): - print('imagenet', k, len(v)) - print('Saving Imagenet to', in_out_path) - json.dump(in_data, open(in_out_path, 'w')) - + print("imagenet", k, len(v)) + print("Saving Imagenet to", in_out_path) + json.dump(in_data, open(in_out_path, "w")) + if not args.not_save_lvis: - lvis_out_path = args.lvis_path[:-5] + '_{}.json'.format(args.mark) + lvis_out_path = args.lvis_path[:-5] + "_{}.json".format(args.mark) for k, v in lvis_data.items(): - print('lvis', k, len(v)) - print('Saving LVIS to', lvis_out_path) - json.dump(lvis_data, open(lvis_out_path, 'w')) + print("lvis", k, len(v)) + print("Saving LVIS to", lvis_out_path) + json.dump(lvis_data, open(lvis_out_path, "w")) - if args.save_categories != '': + if args.save_categories != "": for x in categories: - for k in ['image_count', 'instance_count', 'synonyms', 'def']: + for k in ["image_count", "instance_count", "synonyms", "def"]: if k in x: del x[k] CATEGORIES = repr(categories) + " # noqa" - open(args.save_categories, 'wt').write(f"CATEGORIES = {CATEGORIES}") + open(args.save_categories, "wt").write(f"CATEGORIES = {CATEGORIES}") diff --git a/dimos/models/Detic/tools/download_cc.py b/dimos/models/Detic/tools/download_cc.py index 3c43690a3c..d2cc3cfdb8 100644 --- a/dimos/models/Detic/tools/download_cc.py +++ b/dimos/models/Detic/tools/download_cc.py @@ -5,43 +5,42 @@ from PIL import Image import numpy as np -if __name__ == '__main__': +if __name__ == "__main__": parser = argparse.ArgumentParser() - parser.add_argument('--ann', default='datasets/cc3m/Train_GCC-training.tsv') - parser.add_argument('--save_image_path', default='datasets/cc3m/training/') - parser.add_argument('--cat_info', default='datasets/lvis/lvis_v1_val.json') - parser.add_argument('--out_path', default='datasets/cc3m/train_image_info.json') - parser.add_argument('--not_download_image', action='store_true') + parser.add_argument("--ann", default="datasets/cc3m/Train_GCC-training.tsv") + parser.add_argument("--save_image_path", default="datasets/cc3m/training/") + parser.add_argument("--cat_info", default="datasets/lvis/lvis_v1_val.json") + parser.add_argument("--out_path", default="datasets/cc3m/train_image_info.json") + parser.add_argument("--not_download_image", action="store_true") args = parser.parse_args() - categories = json.load(open(args.cat_info, 'r'))['categories'] + categories = json.load(open(args.cat_info, "r"))["categories"] images = [] if not os.path.exists(args.save_image_path): os.makedirs(args.save_image_path) f = open(args.ann) for i, line in enumerate(f): - cap, path = line[:-1].split('\t') + cap, path = line[:-1].split("\t") print(i, cap, path) if not args.not_download_image: - os.system( - 'wget {} -O {}/{}.jpg'.format( - path, args.save_image_path, i + 1)) + os.system("wget {} -O {}/{}.jpg".format(path, args.save_image_path, i + 1)) try: img = Image.open( - open('{}/{}.jpg'.format(args.save_image_path, i + 1), "rb")) + open("{}/{}.jpg".format(args.save_image_path, i + 1), "rb") + ) img = np.asarray(img.convert("RGB")) h, w = img.shape[:2] except: continue image_info = { - 'id': i + 1, - 'file_name': '{}.jpg'.format(i + 1), - 'height': h, - 'width': w, - 'captions': [cap], + "id": i + 1, + "file_name": "{}.jpg".format(i + 1), + "height": h, + "width": w, + "captions": [cap], } images.append(image_info) - data = {'categories': categories, 'images': images, 'annotations': []} + data = {"categories": categories, "images": images, "annotations": []} for k, v in data.items(): print(k, len(v)) - print('Saving to', args.out_path) - json.dump(data, open(args.out_path, 'w')) + print("Saving to", args.out_path) + json.dump(data, open(args.out_path, "w")) diff --git a/dimos/models/Detic/tools/dump_clip_features.py b/dimos/models/Detic/tools/dump_clip_features.py index 127f8c2a86..efc319b7be 100644 --- a/dimos/models/Detic/tools/dump_clip_features.py +++ b/dimos/models/Detic/tools/dump_clip_features.py @@ -5,96 +5,107 @@ import numpy as np import itertools from nltk.corpus import wordnet -import sys -if __name__ == '__main__': +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') + 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]: + 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'])] + [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'])] + 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] + 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) + 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': + + 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] + 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': + print( + "sentences_synonyms", + len(sentences_synonyms), + sum(len(x) for x in sentences_synonyms), + ) + if args.model == "clip": import clip - print('Loading 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)) + 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) + 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) + 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) + print("after stack", text_features.shape) text_features = text_features.cpu().numpy() - elif args.model in ['bert', 'roberta']: + 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' + + 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)) + print("flattened_sentences", len(sentences)) inputs = tokenizer(sentences, padding=True, return_tensors="pt") with torch.no_grad(): model_outputs = model(**inputs) @@ -105,12 +116,14 @@ 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) + print("after stack", text_features.shape) text_features = text_features.numpy() - print('text_features.shape', text_features.shape) + 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() + 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/dimos/models/Detic/tools/fix_o365_names.py b/dimos/models/Detic/tools/fix_o365_names.py index c6730eacec..aab7df0392 100644 --- a/dimos/models/Detic/tools/fix_o365_names.py +++ b/dimos/models/Detic/tools/fix_o365_names.py @@ -3,32 +3,38 @@ import json import copy -if __name__ == '__main__': +if __name__ == "__main__": parser = argparse.ArgumentParser() - parser.add_argument("--ann", default='datasets/objects365/annotations/zhiyuan_objv2_val.json') - parser.add_argument("--fix_name_map", default='datasets/metadata/Objects365_names_fix.csv') + parser.add_argument( + "--ann", default="datasets/objects365/annotations/zhiyuan_objv2_val.json" + ) + parser.add_argument( + "--fix_name_map", default="datasets/metadata/Objects365_names_fix.csv" + ) args = parser.parse_args() new_names = {} old_names = {} - with open(args.fix_name_map, 'r') as f: + with open(args.fix_name_map, "r") as f: for line in f: - tmp = line.strip().split(',') + tmp = line.strip().split(",") old_names[int(tmp[0])] = tmp[1] new_names[int(tmp[0])] = tmp[2] - data = json.load(open(args.ann, 'r')) + data = json.load(open(args.ann, "r")) + + cat_info = copy.deepcopy(data["categories"]) - cat_info = copy.deepcopy(data['categories']) - for x in cat_info: - if old_names[x['id']].strip() != x['name'].strip(): - print('{} {} {}'.format(x, old_names[x['id']], new_names[x['id']])) - import pdb; pdb.set_trace() - if old_names[x['id']] != new_names[x['id']]: - print('Renaming', x['id'], x['name'], new_names[x['id']]) - x['name'] = new_names[x['id']] - - data['categories'] = cat_info - out_name = args.ann[:-5] + '_fixname.json' - print('Saving to', out_name) - json.dump(data, open(out_name, 'w')) + if old_names[x["id"]].strip() != x["name"].strip(): + print("{} {} {}".format(x, old_names[x["id"]], new_names[x["id"]])) + import pdb + + pdb.set_trace() + if old_names[x["id"]] != new_names[x["id"]]: + print("Renaming", x["id"], x["name"], new_names[x["id"]]) + x["name"] = new_names[x["id"]] + + data["categories"] = cat_info + out_name = args.ann[:-5] + "_fixname.json" + print("Saving to", out_name) + json.dump(data, open(out_name, "w")) diff --git a/dimos/models/Detic/tools/fix_o365_path.py b/dimos/models/Detic/tools/fix_o365_path.py index 38716e56c4..12bcab57db 100644 --- a/dimos/models/Detic/tools/fix_o365_path.py +++ b/dimos/models/Detic/tools/fix_o365_path.py @@ -4,25 +4,28 @@ import path import os -if __name__ == '__main__': +if __name__ == "__main__": parser = argparse.ArgumentParser() - parser.add_argument("--ann", default='datasets/objects365/annotations/zhiyuan_objv2_train_fixname.json') - parser.add_argument("--img_dir", default='datasets/objects365/train/') + parser.add_argument( + "--ann", + default="datasets/objects365/annotations/zhiyuan_objv2_train_fixname.json", + ) + parser.add_argument("--img_dir", default="datasets/objects365/train/") args = parser.parse_args() - print('Loading', args.ann) - data = json.load(open(args.ann, 'r')) + print("Loading", args.ann) + data = json.load(open(args.ann, "r")) images = [] count = 0 - for x in data['images']: - path = '{}/{}'.format(args.img_dir, x['file_name']) + for x in data["images"]: + path = "{}/{}".format(args.img_dir, x["file_name"]) if os.path.exists(path): images.append(x) else: print(path) count = count + 1 - print('Missing', count, 'images') - data['images'] = images - out_name = args.ann[:-5] + '_fixmiss.json' - print('Saving to', out_name) - json.dump(data, open(out_name, 'w')) + print("Missing", count, "images") + data["images"] = images + out_name = args.ann[:-5] + "_fixmiss.json" + print("Saving to", out_name) + json.dump(data, open(out_name, "w")) diff --git a/dimos/models/Detic/tools/get_cc_tags.py b/dimos/models/Detic/tools/get_cc_tags.py index 570d236faa..af2b5561a5 100644 --- a/dimos/models/Detic/tools/get_cc_tags.py +++ b/dimos/models/Detic/tools/get_cc_tags.py @@ -90,106 +90,121 @@ {"synset": "toothbrush.n.01", "coco_cat_id": 90}, ] + def map_name(x): - x = x.replace('_', ' ') - if '(' in x: - x = x[:x.find('(')] + x = x.replace("_", " ") + if "(" in x: + x = x[: x.find("(")] return x.lower().strip() -if __name__ == '__main__': + +if __name__ == "__main__": parser = argparse.ArgumentParser() - parser.add_argument('--cc_ann', default='datasets/cc3m/train_image_info.json') - parser.add_argument('--out_path', default='datasets/cc3m/train_image_info_tags.json') - parser.add_argument('--keep_images', action='store_true') - parser.add_argument('--allcaps', action='store_true') - parser.add_argument('--cat_path', default='') - parser.add_argument('--convert_caption', action='store_true') + parser.add_argument("--cc_ann", default="datasets/cc3m/train_image_info.json") + parser.add_argument( + "--out_path", default="datasets/cc3m/train_image_info_tags.json" + ) + parser.add_argument("--keep_images", action="store_true") + parser.add_argument("--allcaps", action="store_true") + parser.add_argument("--cat_path", default="") + parser.add_argument("--convert_caption", action="store_true") # parser.add_argument('--lvis_ann', default='datasets/lvis/lvis_v1_val.json') args = parser.parse_args() # lvis_data = json.load(open(args.lvis_ann, 'r')) - cc_data = json.load(open(args.cc_ann, 'r')) + cc_data = json.load(open(args.cc_ann, "r")) if args.convert_caption: num_caps = 0 caps = defaultdict(list) - for x in cc_data['annotations']: - caps[x['image_id']].append(x['caption']) - for x in cc_data['images']: - x['captions'] = caps[x['id']] - num_caps += len(x['captions']) - print('# captions', num_caps) + for x in cc_data["annotations"]: + caps[x["image_id"]].append(x["caption"]) + for x in cc_data["images"]: + x["captions"] = caps[x["id"]] + num_caps += len(x["captions"]) + print("# captions", num_caps) - if args.cat_path != '': - print('Loading', args.cat_path) - cats = json.load(open(args.cat_path))['categories'] - if 'synonyms' not in cats[0]: - cocoid2synset = {x['coco_cat_id']: x['synset'] \ - for x in COCO_SYNSET_CATEGORIES} - synset2synonyms = {x['synset']: x['synonyms'] \ - for x in LVIS_CATEGORIES} + if args.cat_path != "": + print("Loading", args.cat_path) + cats = json.load(open(args.cat_path))["categories"] + if "synonyms" not in cats[0]: + cocoid2synset = { + x["coco_cat_id"]: x["synset"] for x in COCO_SYNSET_CATEGORIES + } + synset2synonyms = {x["synset"]: x["synonyms"] for x in LVIS_CATEGORIES} for x in cats: - synonyms = synset2synonyms[cocoid2synset[x['id']]] - x['synonyms'] = synonyms - x['frequency'] = 'f' - cc_data['categories'] = cats + synonyms = synset2synonyms[cocoid2synset[x["id"]]] + x["synonyms"] = synonyms + x["frequency"] = "f" + cc_data["categories"] = cats - id2cat = {x['id']: x for x in cc_data['categories']} - class_count = {x['id']: 0 for x in cc_data['categories']} - class_data = {x['id']: [' ' + map_name(xx) + ' ' for xx in x['synonyms']] \ - for x in cc_data['categories']} + id2cat = {x["id"]: x for x in cc_data["categories"]} + class_count = {x["id"]: 0 for x in cc_data["categories"]} + class_data = { + x["id"]: [" " + map_name(xx) + " " for xx in x["synonyms"]] + for x in cc_data["categories"] + } num_examples = 5 - examples = {x['id']: [] for x in cc_data['categories']} + examples = {x["id"]: [] for x in cc_data["categories"]} - print('class_data', class_data) + print("class_data", class_data) images = [] - for i, x in enumerate(cc_data['images']): + for i, x in enumerate(cc_data["images"]): if i % 10000 == 0: - print(i, len(cc_data['images'])) + print(i, len(cc_data["images"])) if args.allcaps: - caption = (' '.join(x['captions'])).lower() + caption = (" ".join(x["captions"])).lower() else: - caption = x['captions'][0].lower() - x['pos_category_ids'] = [] + caption = x["captions"][0].lower() + x["pos_category_ids"] = [] for cat_id, cat_names in class_data.items(): find = False for c in cat_names: - if c in caption or caption.startswith(c[1:]) \ - or caption.endswith(c[:-1]): + if ( + c in caption + or caption.startswith(c[1:]) + or caption.endswith(c[:-1]) + ): find = True break if find: - x['pos_category_ids'].append(cat_id) + x["pos_category_ids"].append(cat_id) class_count[cat_id] += 1 if len(examples[cat_id]) < num_examples: examples[cat_id].append(caption) - if len(x['pos_category_ids']) > 0 or args.keep_images: + if len(x["pos_category_ids"]) > 0 or args.keep_images: images.append(x) zero_class = [] for cat_id, count in class_count.items(): - print(id2cat[cat_id]['name'], count, end=', ') + print(id2cat[cat_id]["name"], count, end=", ") if count == 0: zero_class.append(id2cat[cat_id]) - print('==') - print('zero class', zero_class) + print("==") + print("zero class", zero_class) # for freq in ['r', 'c', 'f']: # print('#cats', freq, len([x for x in cc_data['categories'] \ # if x['frequency'] == freq] and class_count[x['id']] > 0)) - for freq in ['r', 'c', 'f']: - print('#Images', freq, sum([v for k, v in class_count.items() \ - if id2cat[k]['frequency'] == freq])) + for freq in ["r", "c", "f"]: + print( + "#Images", + freq, + sum([v for k, v in class_count.items() if id2cat[k]["frequency"] == freq]), + ) try: - out_data = {'images': images, 'categories': cc_data['categories'], \ - 'annotations': []} + out_data = { + "images": images, + "categories": cc_data["categories"], + "annotations": [], + } for k, v in out_data.items(): print(k, len(v)) - if args.keep_images and not args.out_path.endswith('_full.json'): - args.out_path = args.out_path[:-5] + '_full.json' - print('Writing to', args.out_path) - json.dump(out_data, open(args.out_path, 'w')) + if args.keep_images and not args.out_path.endswith("_full.json"): + args.out_path = args.out_path[:-5] + "_full.json" + print("Writing to", args.out_path) + json.dump(out_data, open(args.out_path, "w")) except: pass diff --git a/dimos/models/Detic/tools/get_coco_zeroshot_oriorder.py b/dimos/models/Detic/tools/get_coco_zeroshot_oriorder.py index ed6748be1f..05a35efb03 100644 --- a/dimos/models/Detic/tools/get_coco_zeroshot_oriorder.py +++ b/dimos/models/Detic/tools/get_coco_zeroshot_oriorder.py @@ -2,17 +2,22 @@ import argparse import json -if __name__ == '__main__': +if __name__ == "__main__": parser = argparse.ArgumentParser() - parser.add_argument('--data_path', default='datasets/coco/annotations/instances_val2017_unseen_2.json') - parser.add_argument('--cat_path', default='datasets/coco/annotations/instances_val2017.json') + parser.add_argument( + "--data_path", + default="datasets/coco/annotations/instances_val2017_unseen_2.json", + ) + parser.add_argument( + "--cat_path", default="datasets/coco/annotations/instances_val2017.json" + ) args = parser.parse_args() - print('Loading', args.cat_path) - cat = json.load(open(args.cat_path, 'r'))['categories'] + print("Loading", args.cat_path) + cat = json.load(open(args.cat_path, "r"))["categories"] - print('Loading', args.data_path) - data = json.load(open(args.data_path, 'r')) - data['categories'] = cat - out_path = args.data_path[:-5] + '_oriorder.json' - print('Saving to', out_path) - json.dump(data, open(out_path, 'w')) + print("Loading", args.data_path) + data = json.load(open(args.data_path, "r")) + data["categories"] = cat + out_path = args.data_path[:-5] + "_oriorder.json" + print("Saving to", out_path) + json.dump(data, open(out_path, "w")) diff --git a/dimos/models/Detic/tools/get_imagenet_21k_full_tar_json.py b/dimos/models/Detic/tools/get_imagenet_21k_full_tar_json.py index a5fc0a8ee3..d9dd4f6466 100644 --- a/dimos/models/Detic/tools/get_imagenet_21k_full_tar_json.py +++ b/dimos/models/Detic/tools/get_imagenet_21k_full_tar_json.py @@ -2,9 +2,6 @@ import argparse import json import numpy as np -import pickle -import io -import gzip import sys import time from nltk.corpus import wordnet @@ -12,47 +9,54 @@ import operator import torch -sys.path.insert(0, 'third_party/CenterNet2/') -sys.path.insert(0, 'third_party/Deformable-DETR') -from detic.data.tar_dataset import DiskTarDataset, _TarDataset +sys.path.insert(0, "third_party/CenterNet2/") +sys.path.insert(0, "third_party/Deformable-DETR") +from detic.data.tar_dataset import DiskTarDataset -if __name__ == '__main__': +if __name__ == "__main__": parser = argparse.ArgumentParser() - parser.add_argument("--imagenet_dir", default='datasets/imagenet/ImageNet-21k/') - parser.add_argument("--tarfile_path", default='datasets/imagenet/metadata-22k/tar_files.npy') - parser.add_argument("--tar_index_dir", default='datasets/imagenet/metadata-22k/tarindex_npy') - parser.add_argument("--out_path", default='datasets/imagenet/annotations/imagenet-22k_image_info.json') + parser.add_argument("--imagenet_dir", default="datasets/imagenet/ImageNet-21k/") + parser.add_argument( + "--tarfile_path", default="datasets/imagenet/metadata-22k/tar_files.npy" + ) + parser.add_argument( + "--tar_index_dir", default="datasets/imagenet/metadata-22k/tarindex_npy" + ) + parser.add_argument( + "--out_path", + default="datasets/imagenet/annotations/imagenet-22k_image_info.json", + ) parser.add_argument("--workers", default=16, type=int) args = parser.parse_args() - start_time = time.time() - print('Building dataset') + print("Building dataset") dataset = DiskTarDataset(args.tarfile_path, args.tar_index_dir) end_time = time.time() - print(f"Took {end_time-start_time} seconds to make the dataset.") + print(f"Took {end_time - start_time} seconds to make the dataset.") print(f"Have {len(dataset)} samples.") - print('dataset', dataset) - + print("dataset", dataset) tar_files = np.load(args.tarfile_path) categories = [] for i, tar_file in enumerate(tar_files): wnid = tar_file[-13:-4] - synset = wordnet.synset_from_pos_and_offset('n', int(wnid[1:])) + synset = wordnet.synset_from_pos_and_offset("n", int(wnid[1:])) synonyms = [x.name() for x in synset.lemmas()] category = { - 'id': i + 1, - 'synset': synset.name(), - 'name': synonyms[0], - 'def': synset.definition(), - 'synonyms': synonyms, + "id": i + 1, + "synset": synset.name(), + "name": synonyms[0], + "def": synset.definition(), + "synonyms": synonyms, } categories.append(category) - print('categories', len(categories)) + print("categories", len(categories)) data_loader = torch.utils.data.DataLoader( - dataset, batch_size=1, shuffle=False, + dataset, + batch_size=1, + shuffle=False, num_workers=args.workers, collate_fn=operator.itemgetter(0), ) @@ -61,21 +65,22 @@ if label == -1: continue image = { - 'id': int(index) + 1, - 'pos_category_ids': [int(label) + 1], - 'height': int(img.height), - 'width': int(img.width), - 'tar_index': int(index), + "id": int(index) + 1, + "pos_category_ids": [int(label) + 1], + "height": int(img.height), + "width": int(img.width), + "tar_index": int(index), } images.append(image) - - data = {'categories': categories, 'images': images, 'annotations': []} + + data = {"categories": categories, "images": images, "annotations": []} try: for k, v in data.items(): print(k, len(v)) - print('Saving to ', args.out_path) - json.dump(data, open(args.out_path, 'w')) + print("Saving to ", args.out_path) + json.dump(data, open(args.out_path, "w")) except: pass - import pdb; pdb.set_trace() - + import pdb + + pdb.set_trace() diff --git a/dimos/models/Detic/tools/get_lvis_cat_info.py b/dimos/models/Detic/tools/get_lvis_cat_info.py index 83f286983c..79d025300c 100644 --- a/dimos/models/Detic/tools/get_lvis_cat_info.py +++ b/dimos/models/Detic/tools/get_lvis_cat_info.py @@ -2,43 +2,42 @@ import argparse import json -if __name__ == '__main__': +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("--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) 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} - 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']} + 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} + 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']] + 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 + 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]) + 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']: + 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')) - + 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/dimos/models/Detic/tools/merge_lvis_coco.py b/dimos/models/Detic/tools/merge_lvis_coco.py index abc2b673a3..b32fbd9ba8 100644 --- a/dimos/models/Detic/tools/merge_lvis_coco.py +++ b/dimos/models/Detic/tools/merge_lvis_coco.py @@ -1,19 +1,18 @@ # Copyright (c) Facebook, Inc. and its affiliates. from collections import defaultdict import torch -import sys import json -import numpy as np from detectron2.structures import Boxes, pairwise_iou -COCO_PATH = 'datasets/coco/annotations/instances_train2017.json' -IMG_PATH = 'datasets/coco/train2017/' -LVIS_PATH = 'datasets/lvis/lvis_v1_train.json' + +COCO_PATH = "datasets/coco/annotations/instances_train2017.json" +IMG_PATH = "datasets/coco/train2017/" +LVIS_PATH = "datasets/lvis/lvis_v1_train.json" NO_SEG = False if NO_SEG: - SAVE_PATH = 'datasets/lvis/lvis_v1_train+coco_box.json' + SAVE_PATH = "datasets/lvis/lvis_v1_train+coco_box.json" else: - SAVE_PATH = 'datasets/lvis/lvis_v1_train+coco_mask.json' + SAVE_PATH = "datasets/lvis/lvis_v1_train+coco_mask.json" THRESH = 0.7 DEBUG = False @@ -105,60 +104,66 @@ def get_bbox(ann): - bbox = ann['bbox'] + bbox = ann["bbox"] return [bbox[0], bbox[1], bbox[0] + bbox[2], bbox[1] + bbox[3]] -if __name__ == '__main__': - file_name_key = 'file_name' if 'v0.5' in LVIS_PATH else 'coco_url' - coco_data = json.load(open(COCO_PATH, 'r')) - lvis_data = json.load(open(LVIS_PATH, 'r')) +if __name__ == "__main__": + file_name_key = "file_name" if "v0.5" in LVIS_PATH else "coco_url" + coco_data = json.load(open(COCO_PATH, "r")) + lvis_data = json.load(open(LVIS_PATH, "r")) - coco_cats = coco_data['categories'] - lvis_cats = lvis_data['categories'] + coco_cats = coco_data["categories"] + lvis_cats = lvis_data["categories"] num_find = 0 num_not_find = 0 num_twice = 0 coco2lviscats = {} - synset2lvisid = {x['synset']: x['id'] for x in lvis_cats} + synset2lvisid = {x["synset"]: x["id"] for x in lvis_cats} # cocoid2synset = {x['coco_cat_id']: x['synset'] for x in COCO_SYNSET_CATEGORIES} - coco2lviscats = {x['coco_cat_id']: synset2lvisid[x['synset']] \ - for x in COCO_SYNSET_CATEGORIES if x['synset'] in synset2lvisid} + coco2lviscats = { + x["coco_cat_id"]: synset2lvisid[x["synset"]] + for x in COCO_SYNSET_CATEGORIES + if x["synset"] in synset2lvisid + } print(len(coco2lviscats)) - - lvis_file2id = {x[file_name_key][-16:]: x['id'] for x in lvis_data['images']} - lvis_id2img = {x['id']: x for x in lvis_data['images']} - lvis_catid2name = {x['id']: x['name'] for x in lvis_data['categories']} + + lvis_file2id = {x[file_name_key][-16:]: x["id"] for x in lvis_data["images"]} + lvis_id2img = {x["id"]: x for x in lvis_data["images"]} + lvis_catid2name = {x["id"]: x["name"] for x in lvis_data["categories"]} coco_file2anns = {} - coco_id2img = {x['id']: x for x in coco_data['images']} + coco_id2img = {x["id"]: x for x in coco_data["images"]} coco_img2anns = defaultdict(list) - for ann in coco_data['annotations']: - coco_img = coco_id2img[ann['image_id']] - file_name = coco_img['file_name'][-16:] - if ann['category_id'] in coco2lviscats and \ - file_name in lvis_file2id: + for ann in coco_data["annotations"]: + coco_img = coco_id2img[ann["image_id"]] + file_name = coco_img["file_name"][-16:] + if ann["category_id"] in coco2lviscats and file_name in lvis_file2id: lvis_image_id = lvis_file2id[file_name] lvis_image = lvis_id2img[lvis_image_id] - lvis_cat_id = coco2lviscats[ann['category_id']] - if lvis_cat_id in lvis_image['neg_category_ids']: + lvis_cat_id = coco2lviscats[ann["category_id"]] + if lvis_cat_id in lvis_image["neg_category_ids"]: continue if DEBUG: import cv2 + img_path = IMG_PATH + file_name img = cv2.imread(img_path) print(lvis_catid2name[lvis_cat_id]) - print('neg', [lvis_catid2name[x] for x in lvis_image['neg_category_ids']]) - cv2.imshow('img', img) + print( + "neg", + [lvis_catid2name[x] for x in lvis_image["neg_category_ids"]], + ) + cv2.imshow("img", img) cv2.waitKey() - ann['category_id'] = lvis_cat_id - ann['image_id'] = lvis_image_id + ann["category_id"] = lvis_cat_id + ann["image_id"] = lvis_image_id coco_img2anns[file_name].append(ann) - + lvis_img2anns = defaultdict(list) - for ann in lvis_data['annotations']: - lvis_img = lvis_id2img[ann['image_id']] + for ann in lvis_data["annotations"]: + lvis_img = lvis_id2img[ann["image_id"]] file_name = lvis_img[file_name_key][-16:] lvis_img2anns[file_name].append(ann) @@ -168,35 +173,37 @@ def get_bbox(ann): coco_anns = coco_img2anns[file_name] lvis_anns = lvis_img2anns[file_name] ious = pairwise_iou( - Boxes(torch.tensor([get_bbox(x) for x in coco_anns])), - Boxes(torch.tensor([get_bbox(x) for x in lvis_anns])) + Boxes(torch.tensor([get_bbox(x) for x in coco_anns])), + Boxes(torch.tensor([get_bbox(x) for x in lvis_anns])), ) for ann in lvis_anns: ann_id_count = ann_id_count + 1 - ann['id'] = ann_id_count + ann["id"] = ann_id_count anns.append(ann) for i, ann in enumerate(coco_anns): if len(ious[i]) == 0 or ious[i].max() < THRESH: ann_id_count = ann_id_count + 1 - ann['id'] = ann_id_count + ann["id"] = ann_id_count anns.append(ann) else: duplicated = False for j in range(len(ious[i])): - if ious[i, j] >= THRESH and \ - coco_anns[i]['category_id'] == lvis_anns[j]['category_id']: + if ( + ious[i, j] >= THRESH + and coco_anns[i]["category_id"] == lvis_anns[j]["category_id"] + ): duplicated = True if not duplicated: ann_id_count = ann_id_count + 1 - ann['id'] = ann_id_count + ann["id"] = ann_id_count anns.append(ann) if NO_SEG: for ann in anns: - del ann['segmentation'] - lvis_data['annotations'] = anns - - print('# Images', len(lvis_data['images'])) - print('# Anns', len(lvis_data['annotations'])) - json.dump(lvis_data, open(SAVE_PATH, 'w')) + del ann["segmentation"] + lvis_data["annotations"] = anns + + print("# Images", len(lvis_data["images"])) + print("# Anns", len(lvis_data["annotations"])) + json.dump(lvis_data, open(SAVE_PATH, "w")) diff --git a/dimos/models/Detic/tools/preprocess_imagenet22k.py b/dimos/models/Detic/tools/preprocess_imagenet22k.py index 67795c209b..6a99c8b189 100644 --- a/dimos/models/Detic/tools/preprocess_imagenet22k.py +++ b/dimos/models/Detic/tools/preprocess_imagenet22k.py @@ -5,17 +5,15 @@ import numpy as np import sys -sys.path.insert(0, 'third_party/CenterNet2/') -sys.path.insert(0, 'third_party/Deformable-DETR') -from detic.data.tar_dataset import _TarDataset, DiskTarDataset -import pickle +sys.path.insert(0, "third_party/CenterNet2/") +sys.path.insert(0, "third_party/Deformable-DETR") +from detic.data.tar_dataset import _TarDataset import io import gzip import time class _RawTarDataset(object): - def __init__(self, filename, indexname, preload=False): self.filename = filename self.names = [] @@ -25,18 +23,18 @@ def __init__(self, filename, indexname, preload=False): ll = l.split() a, b, c = ll[:3] offset = int(b[:-1]) - if l.endswith('** Block of NULs **\n'): + if l.endswith("** Block of NULs **\n"): self.offsets.append(offset) break else: - if c.endswith('JPEG'): + if c.endswith("JPEG"): self.names.append(c) self.offsets.append(offset) else: # ignore directories pass if preload: - self.data = np.memmap(filename, mode='r', dtype='uint8') + self.data = np.memmap(filename, mode="r", dtype="uint8") else: self.data = None @@ -45,40 +43,39 @@ def __len__(self): def __getitem__(self, idx): if self.data is None: - self.data = np.memmap(self.filename, mode='r', dtype='uint8') + self.data = np.memmap(self.filename, mode="r", dtype="uint8") ofs = self.offsets[idx] * 512 fsize = 512 * (self.offsets[idx + 1] - self.offsets[idx]) - data = self.data[ofs:ofs + fsize] + data = self.data[ofs : ofs + fsize] - if data[:13].tostring() == '././@LongLink': - data = data[3 * 512:] + if data[:13].tostring() == "././@LongLink": + data = data[3 * 512 :] else: data = data[512:] # just to make it more fun a few JPEGs are GZIP compressed... # catch this case - if tuple(data[:2]) == (0x1f, 0x8b): + if tuple(data[:2]) == (0x1F, 0x8B): s = io.StringIO(data.tostring()) - g = gzip.GzipFile(None, 'r', 0, s) + g = gzip.GzipFile(None, "r", 0, s) sdata = g.read() else: sdata = data.tostring() return sdata - def preprocess(): # Follow https://github.com/Alibaba-MIIL/ImageNet21K/blob/main/dataset_preprocessing/processing_script.sh # Expect 12358684 samples with 11221 classes # ImageNet folder has 21841 classes (synsets) - i22kdir = '/datasets01/imagenet-22k/062717/' - i22ktarlogs = '/checkpoint/imisra/datasets/imagenet-22k/tarindex' - class_names_file = '/checkpoint/imisra/datasets/imagenet-22k/words.txt' + i22kdir = "/datasets01/imagenet-22k/062717/" + i22ktarlogs = "/checkpoint/imisra/datasets/imagenet-22k/tarindex" + class_names_file = "/checkpoint/imisra/datasets/imagenet-22k/words.txt" - output_dir = '/checkpoint/zhouxy/Datasets/ImageNet/metadata-22k/' - i22knpytarlogs = '/checkpoint/zhouxy/Datasets/ImageNet/metadata-22k/tarindex_npy' - print('Listing dir') + output_dir = "/checkpoint/zhouxy/Datasets/ImageNet/metadata-22k/" + i22knpytarlogs = "/checkpoint/zhouxy/Datasets/ImageNet/metadata-22k/tarindex_npy" + print("Listing dir") log_files = os.listdir(i22ktarlogs) log_files = [x for x in log_files if x.endswith(".tarlog")] log_files.sort() @@ -86,14 +83,16 @@ def preprocess(): dataset_lens = [] min_count = 0 create_npy_tarlogs = True - print('Creating folders') + print("Creating folders") if create_npy_tarlogs: os.makedirs(i22knpytarlogs, exist_ok=True) for log_file in log_files: syn = log_file.replace(".tarlog", "") - dataset = _RawTarDataset(os.path.join(i22kdir, syn + ".tar"), - os.path.join(i22ktarlogs, syn + ".tarlog"), - preload=False) + dataset = _RawTarDataset( + os.path.join(i22kdir, syn + ".tar"), + os.path.join(i22ktarlogs, syn + ".tarlog"), + preload=False, + ) names = np.array(dataset.names) offsets = np.array(dataset.offsets, dtype=np.int64) np.save(os.path.join(i22knpytarlogs, f"{syn}_names.npy"), names) @@ -112,7 +111,6 @@ def preprocess(): end_time = time.time() print(f"Time {end_time - start_time}") - dataset_lens = np.array(dataset_lens) dataset_valid = dataset_lens > min_count @@ -136,7 +134,9 @@ def preprocess(): tarlog_files = np.array(tarlog_files) tar_files = np.array(tar_files) class_names = np.array(class_names) - print(f"Have {len(class_names)} classes and {dataset_lens[dataset_valid].sum()} samples") + print( + f"Have {len(class_names)} classes and {dataset_lens[dataset_valid].sum()} samples" + ) np.save(os.path.join(output_dir, "tarlog_files.npy"), tarlog_files) np.save(os.path.join(output_dir, "tar_files.npy"), tar_files) diff --git a/dimos/models/Detic/tools/remove_lvis_rare.py b/dimos/models/Detic/tools/remove_lvis_rare.py index 06e4e881bf..2e1705d50c 100644 --- a/dimos/models/Detic/tools/remove_lvis_rare.py +++ b/dimos/models/Detic/tools/remove_lvis_rare.py @@ -2,19 +2,20 @@ import argparse import json -if __name__ == '__main__': +if __name__ == "__main__": parser = argparse.ArgumentParser() - parser.add_argument('--ann', default='datasets/lvis/lvis_v1_train.json') + 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')) + 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/dimos/models/Detic/tools/unzip_imagenet_lvis.py b/dimos/models/Detic/tools/unzip_imagenet_lvis.py index 56ccad1a90..d550db9980 100644 --- a/dimos/models/Detic/tools/unzip_imagenet_lvis.py +++ b/dimos/models/Detic/tools/unzip_imagenet_lvis.py @@ -2,18 +2,17 @@ import os import argparse -if __name__ == '__main__': +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') + 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) + 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) diff --git a/dimos/models/Detic/train_net.py b/dimos/models/Detic/train_net.py index ff1f570dd8..6c4fff7a8c 100644 --- a/dimos/models/Detic/train_net.py +++ b/dimos/models/Detic/train_net.py @@ -37,13 +37,13 @@ from detectron2.utils.logger import setup_logger from torch.cuda.amp import GradScaler -sys.path.insert(0, 'third_party/CenterNet2/') +sys.path.insert(0, "third_party/CenterNet2/") from centernet.config import add_centernet_config -sys.path.insert(0, 'third_party/Deformable-DETR') +sys.path.insert(0, "third_party/Deformable-DETR") from detic.config import add_detic_config from detic.data.custom_build_augmentation import build_custom_augmentation -from detic.data.custom_dataset_dataloader import build_custom_train_loader +from detic.data.custom_dataset_dataloader import build_custom_train_loader from detic.data.custom_dataset_mapper import CustomDatasetMapper, DetrDatasetMapper from detic.custom_solver import build_custom_optimizer from detic.evaluation.oideval import OIDEvaluator @@ -53,53 +53,57 @@ logger = logging.getLogger("detectron2") + def do_test(cfg, model): results = OrderedDict() for d, dataset_name in enumerate(cfg.DATASETS.TEST): if cfg.MODEL.RESET_CLS_TESTS: reset_cls_test( - model, - cfg.MODEL.TEST_CLASSIFIERS[d], - cfg.MODEL.TEST_NUM_CLASSES[d]) - mapper = None if cfg.INPUT.TEST_INPUT_TYPE == 'default' \ + model, cfg.MODEL.TEST_CLASSIFIERS[d], cfg.MODEL.TEST_NUM_CLASSES[d] + ) + mapper = ( + None + if cfg.INPUT.TEST_INPUT_TYPE == "default" else DatasetMapper( - cfg, False, augmentations=build_custom_augmentation(cfg, False)) + cfg, False, augmentations=build_custom_augmentation(cfg, False) + ) + ) data_loader = build_detection_test_loader(cfg, dataset_name, mapper=mapper) output_folder = os.path.join( - cfg.OUTPUT_DIR, "inference_{}".format(dataset_name)) + cfg.OUTPUT_DIR, "inference_{}".format(dataset_name) + ) evaluator_type = MetadataCatalog.get(dataset_name).evaluator_type if evaluator_type == "lvis" or cfg.GEN_PSEDO_LABELS: evaluator = LVISEvaluator(dataset_name, cfg, True, output_folder) - elif evaluator_type == 'coco': - if dataset_name == 'coco_generalized_zeroshot_val': + elif evaluator_type == "coco": + if dataset_name == "coco_generalized_zeroshot_val": # Additionally plot mAP for 'seen classes' and 'unseen classes' evaluator = CustomCOCOEvaluator(dataset_name, cfg, True, output_folder) else: evaluator = COCOEvaluator(dataset_name, cfg, True, output_folder) - elif evaluator_type == 'oid': + elif evaluator_type == "oid": evaluator = OIDEvaluator(dataset_name, cfg, True, output_folder) else: assert 0, evaluator_type - - results[dataset_name] = inference_on_dataset( - model, data_loader, evaluator) + + results[dataset_name] = inference_on_dataset(model, data_loader, evaluator) if comm.is_main_process(): - logger.info("Evaluation results for {} in csv format:".format( - dataset_name)) + logger.info("Evaluation results for {} in csv format:".format(dataset_name)) print_csv_format(results[dataset_name]) if len(results) == 1: results = list(results.values())[0] return results + def do_train(cfg, model, resume=False): model.train() if cfg.SOLVER.USE_CUSTOM_SOLVER: optimizer = build_custom_optimizer(cfg, model) else: - assert cfg.SOLVER.OPTIMIZER == 'SGD' - assert cfg.SOLVER.CLIP_GRADIENTS.CLIP_TYPE != 'full_model' - assert cfg.SOLVER.BACKBONE_MULTIPLIER == 1. + assert cfg.SOLVER.OPTIMIZER == "SGD" + assert cfg.SOLVER.CLIP_GRADIENTS.CLIP_TYPE != "full_model" + assert cfg.SOLVER.BACKBONE_MULTIPLIER == 1.0 optimizer = build_optimizer(cfg, model) scheduler = build_lr_scheduler(cfg, optimizer) @@ -107,11 +111,17 @@ def do_train(cfg, model, resume=False): model, cfg.OUTPUT_DIR, optimizer=optimizer, scheduler=scheduler ) - start_iter = checkpointer.resume_or_load( - cfg.MODEL.WEIGHTS, resume=resume).get("iteration", -1) + 1 + start_iter = ( + checkpointer.resume_or_load(cfg.MODEL.WEIGHTS, resume=resume).get( + "iteration", -1 + ) + + 1 + ) if not resume: start_iter = 0 - max_iter = cfg.SOLVER.MAX_ITER if cfg.SOLVER.TRAIN_ITER < 0 else cfg.SOLVER.TRAIN_ITER + max_iter = ( + cfg.SOLVER.MAX_ITER if cfg.SOLVER.TRAIN_ITER < 0 else cfg.SOLVER.TRAIN_ITER + ) periodic_checkpointer = PeriodicCheckpointer( checkpointer, cfg.SOLVER.CHECKPOINT_PERIOD, max_iter=max_iter @@ -129,10 +139,17 @@ def do_train(cfg, model, resume=False): use_custom_mapper = cfg.WITH_IMAGE_LABELS MapperClass = CustomDatasetMapper if use_custom_mapper else DatasetMapper - mapper = MapperClass(cfg, True) if cfg.INPUT.CUSTOM_AUG == '' else \ - DetrDatasetMapper(cfg, True) if cfg.INPUT.CUSTOM_AUG == 'DETR' else \ - MapperClass(cfg, True, augmentations=build_custom_augmentation(cfg, True)) - if cfg.DATALOADER.SAMPLER_TRAIN in ['TrainingSampler', 'RepeatFactorTrainingSampler']: + mapper = ( + MapperClass(cfg, True) + if cfg.INPUT.CUSTOM_AUG == "" + else DetrDatasetMapper(cfg, True) + if cfg.INPUT.CUSTOM_AUG == "DETR" + else MapperClass(cfg, True, augmentations=build_custom_augmentation(cfg, True)) + ) + if cfg.DATALOADER.SAMPLER_TRAIN in [ + "TrainingSampler", + "RepeatFactorTrainingSampler", + ]: data_loader = build_detection_train_loader(cfg, mapper=mapper) else: data_loader = build_custom_train_loader(cfg, mapper=mapper) @@ -153,16 +170,15 @@ def do_train(cfg, model, resume=False): storage.step() loss_dict = model(data) - losses = sum( - loss for k, loss in loss_dict.items()) + losses = sum(loss for k, loss in loss_dict.items()) assert torch.isfinite(losses).all(), loss_dict - loss_dict_reduced = {k: v.item() \ - for k, v in comm.reduce_dict(loss_dict).items()} + 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) + storage.put_scalars(total_loss=losses_reduced, **loss_dict_reduced) optimizer.zero_grad() if cfg.FP16: @@ -174,21 +190,25 @@ def do_train(cfg, model, resume=False): optimizer.step() storage.put_scalar( - "lr", optimizer.param_groups[0]["lr"], smoothing_hint=False) + "lr", optimizer.param_groups[0]["lr"], smoothing_hint=False + ) step_time = step_timer.seconds() storage.put_scalars(time=step_time) data_timer.reset() scheduler.step() - if (cfg.TEST.EVAL_PERIOD > 0 + if ( + cfg.TEST.EVAL_PERIOD > 0 and iteration % cfg.TEST.EVAL_PERIOD == 0 - and iteration != max_iter): + and iteration != max_iter + ): do_test(cfg, model) comm.synchronize() - if iteration - start_iter > 5 and \ - (iteration % 20 == 0 or iteration == max_iter): + if iteration - start_iter > 5 and ( + iteration % 20 == 0 or iteration == max_iter + ): for writer in writers: writer.write() periodic_checkpointer.step(iteration) @@ -196,7 +216,10 @@ def do_train(cfg, model, resume=False): total_time = time.perf_counter() - start_time logger.info( "Total training time: {}".format( - str(datetime.timedelta(seconds=int(total_time))))) + str(datetime.timedelta(seconds=int(total_time))) + ) + ) + def setup(args): """ @@ -207,14 +230,13 @@ def setup(args): add_detic_config(cfg) cfg.merge_from_file(args.config_file) cfg.merge_from_list(args.opts) - if '/auto' in cfg.OUTPUT_DIR: + if "/auto" in cfg.OUTPUT_DIR: file_name = os.path.basename(args.config_file)[:-5] - cfg.OUTPUT_DIR = cfg.OUTPUT_DIR.replace('/auto', '/{}'.format(file_name)) - logger.info('OUTPUT_DIR: {}'.format(cfg.OUTPUT_DIR)) + cfg.OUTPUT_DIR = cfg.OUTPUT_DIR.replace("/auto", "/{}".format(file_name)) + logger.info("OUTPUT_DIR: {}".format(cfg.OUTPUT_DIR)) cfg.freeze() default_setup(cfg, args) - setup_logger(output=cfg.OUTPUT_DIR, \ - distributed_rank=comm.get_rank(), name="detic") + setup_logger(output=cfg.OUTPUT_DIR, distributed_rank=comm.get_rank(), name="detic") return cfg @@ -233,8 +255,10 @@ def main(args): distributed = comm.get_world_size() > 1 if distributed: model = DistributedDataParallel( - model, device_ids=[comm.get_local_rank()], broadcast_buffers=False, - find_unused_parameters=cfg.FIND_UNUSED_PARAM + model, + device_ids=[comm.get_local_rank()], + broadcast_buffers=False, + find_unused_parameters=cfg.FIND_UNUSED_PARAM, ) do_train(cfg, model, resume=args.resume) @@ -245,19 +269,18 @@ def main(args): args = default_argument_parser() args = args.parse_args() if args.num_machines == 1: - args.dist_url = 'tcp://127.0.0.1:{}'.format( - torch.randint(11111, 60000, (1,))[0].item()) + args.dist_url = "tcp://127.0.0.1:{}".format( + torch.randint(11111, 60000, (1,))[0].item() + ) else: - if args.dist_url == 'host': - args.dist_url = 'tcp://{}:12345'.format( - os.environ['SLURM_JOB_NODELIST']) - elif not args.dist_url.startswith('tcp'): + if args.dist_url == "host": + args.dist_url = "tcp://{}:12345".format(os.environ["SLURM_JOB_NODELIST"]) + elif not args.dist_url.startswith("tcp"): tmp = os.popen( - 'echo $(scontrol show job {} | grep BatchHost)'.format( - args.dist_url) - ).read() - tmp = tmp[tmp.find('=') + 1: -1] - args.dist_url = 'tcp://{}:12345'.format(tmp) + "echo $(scontrol show job {} | grep BatchHost)".format(args.dist_url) + ).read() + tmp = tmp[tmp.find("=") + 1 : -1] + args.dist_url = "tcp://{}:12345".format(tmp) print("Command Line Args:", args) launch( main, diff --git a/dimos/models/depth/metric3d.py b/dimos/models/depth/metric3d.py index 3e5dd7cf2f..1e29218cbb 100644 --- a/dimos/models/depth/metric3d.py +++ b/dimos/models/depth/metric3d.py @@ -12,8 +12,6 @@ # See the License for the specific language governing permissions and # limitations under the License. -import os -import sys import torch from PIL import Image import cv2 @@ -27,23 +25,26 @@ class Metric3D: def __init__(self, gt_depth_scale=256.0): - #self.conf = get_config("zoedepth", "infer") - #self.depth_model = build_model(self.conf) - self.depth_model = torch.hub.load('yvanyin/metric3d', 'metric3d_vit_small', pretrain=True).cuda() + # self.conf = get_config("zoedepth", "infer") + # self.depth_model = build_model(self.conf) + self.depth_model = torch.hub.load( + "yvanyin/metric3d", "metric3d_vit_small", pretrain=True + ).cuda() if torch.cuda.device_count() > 1: print(f"Using {torch.cuda.device_count()} GPUs!") - #self.depth_model = torch.nn.DataParallel(self.depth_model) + # self.depth_model = torch.nn.DataParallel(self.depth_model) self.depth_model.eval() - self.intrinsic = [707.0493, 707.0493, 604.0814, 180.5066] + self.intrinsic = [707.0493, 707.0493, 604.0814, 180.5066] self.intrinsic_scaled = None - self.gt_depth_scale = gt_depth_scale # And this + self.gt_depth_scale = gt_depth_scale # And this self.pad_info = None self.rgb_origin = None - ''' + + """ Input: Single image in RGB format Output: Depth map - ''' + """ def update_intrinsic(self, intrinsic): """ @@ -51,7 +52,9 @@ def update_intrinsic(self, intrinsic): Ensure that the input intrinsic is valid. """ if len(intrinsic) != 4: - raise ValueError("Intrinsic must be a list or tuple with 4 values: [fx, fy, cx, cy]") + raise ValueError( + "Intrinsic must be a list or tuple with 4 values: [fx, fy, cx, cy]" + ) self.intrinsic = intrinsic print(f"Intrinsics updated to: {self.intrinsic}") @@ -71,18 +74,23 @@ def infer_depth(self, img, debug=False): img = self.rescale_input(img, self.rgb_origin) with torch.no_grad(): - pred_depth, confidence, output_dict = self.depth_model.inference({'input': img}) + pred_depth, confidence, output_dict = self.depth_model.inference( + {"input": img} + ) # Convert to PIL format depth_image = self.unpad_transform_depth(pred_depth) - out_16bit_numpy = (depth_image.squeeze().cpu().numpy() * self.gt_depth_scale).astype(np.uint16) + out_16bit_numpy = ( + depth_image.squeeze().cpu().numpy() * self.gt_depth_scale + ).astype(np.uint16) depth_map_pil = Image.fromarray(out_16bit_numpy) return depth_map_pil + def save_depth(self, pred_depth): # Save the depth map to a file pred_depth_np = pred_depth.cpu().numpy() - output_depth_file = 'output_depth_map.png' + output_depth_file = "output_depth_map.png" cv2.imwrite(output_depth_file, pred_depth_np) print(f"Depth map saved to {output_depth_file}") @@ -94,9 +102,16 @@ def rescale_input(self, rgb, rgb_origin): # input_size = (544, 1216) # for convnext model h, w = rgb_origin.shape[:2] scale = min(input_size[0] / h, input_size[1] / w) - rgb = cv2.resize(rgb_origin, (int(w * scale), int(h * scale)), interpolation=cv2.INTER_LINEAR) + rgb = cv2.resize( + rgb_origin, (int(w * scale), int(h * scale)), interpolation=cv2.INTER_LINEAR + ) # remember to scale intrinsic, hold depth - self.intrinsic_scaled = [self.intrinsic[0] * scale, self.intrinsic[1] * scale, self.intrinsic[2] * scale, self.intrinsic[3] * scale] + self.intrinsic_scaled = [ + self.intrinsic[0] * scale, + self.intrinsic[1] * scale, + self.intrinsic[2] * scale, + self.intrinsic[3] * scale, + ] # padding to input_size padding = [123.675, 116.28, 103.53] h, w = rgb.shape[:2] @@ -104,8 +119,15 @@ def rescale_input(self, rgb, rgb_origin): pad_w = input_size[1] - w pad_h_half = pad_h // 2 pad_w_half = pad_w // 2 - rgb = cv2.copyMakeBorder(rgb, pad_h_half, pad_h - pad_h_half, pad_w_half, pad_w - pad_w_half, - cv2.BORDER_CONSTANT, value=padding) + rgb = cv2.copyMakeBorder( + rgb, + pad_h_half, + pad_h - pad_h_half, + pad_w_half, + pad_w - pad_w_half, + cv2.BORDER_CONSTANT, + value=padding, + ) self.pad_info = [pad_h_half, pad_h - pad_h_half, pad_w_half, pad_w - pad_w_half] #### normalize @@ -115,25 +137,31 @@ def rescale_input(self, rgb, rgb_origin): rgb = torch.div((rgb - mean), std) rgb = rgb[None, :, :, :].cuda() return rgb + def unpad_transform_depth(self, pred_depth): # un pad pred_depth = pred_depth.squeeze() - pred_depth = pred_depth[self.pad_info[0]: pred_depth.shape[0] - self.pad_info[1], - self.pad_info[2]: pred_depth.shape[1] - self.pad_info[3]] + pred_depth = pred_depth[ + self.pad_info[0] : pred_depth.shape[0] - self.pad_info[1], + self.pad_info[2] : pred_depth.shape[1] - self.pad_info[3], + ] # upsample to original size - pred_depth = torch.nn.functional.interpolate(pred_depth[None, None, :, :], self.rgb_origin.shape[:2], - mode='bilinear').squeeze() + pred_depth = torch.nn.functional.interpolate( + pred_depth[None, None, :, :], self.rgb_origin.shape[:2], mode="bilinear" + ).squeeze() ###################### canonical camera space ###################### #### de-canonical transform - canonical_to_real_scale = self.intrinsic_scaled[0] / 1000.0 # 1000.0 is the focal length of canonical camera + canonical_to_real_scale = ( + self.intrinsic_scaled[0] / 1000.0 + ) # 1000.0 is the focal length of canonical camera pred_depth = pred_depth * canonical_to_real_scale # now the depth is metric pred_depth = torch.clamp(pred_depth, 0, 1000) return pred_depth - """Set new intrinsic value.""" + def update_intrinsic(self, intrinsic): self.intrinsic = intrinsic @@ -144,6 +172,8 @@ def eval_predicted_depth(self, depth_file, pred_depth): gt_depth = torch.from_numpy(gt_depth).float().cuda() assert gt_depth.shape == pred_depth.shape - mask = (gt_depth > 1e-8) - abs_rel_err = (torch.abs(pred_depth[mask] - gt_depth[mask]) / gt_depth[mask]).mean() - print('abs_rel_err:', abs_rel_err.item()) \ No newline at end of file + mask = gt_depth > 1e-8 + abs_rel_err = ( + torch.abs(pred_depth[mask] - gt_depth[mask]) / gt_depth[mask] + ).mean() + print("abs_rel_err:", abs_rel_err.item()) diff --git a/dimos/models/labels/llava-34b.py b/dimos/models/labels/llava-34b.py index 3290409950..c59a5c8aa9 100644 --- a/dimos/models/labels/llava-34b.py +++ b/dimos/models/labels/llava-34b.py @@ -21,31 +21,51 @@ from vqasynth.datasets.utils import image_to_base64_data_uri + class Llava: - def __init__(self, mmproj=f"{os.getcwd()}/models/mmproj-model-f16.gguf", model_path=f"{os.getcwd()}/models/llava-v1.6-34b.Q4_K_M.gguf", gpu=True): + def __init__( + self, + mmproj=f"{os.getcwd()}/models/mmproj-model-f16.gguf", + model_path=f"{os.getcwd()}/models/llava-v1.6-34b.Q4_K_M.gguf", + gpu=True, + ): chat_handler = Llava15ChatHandler(clip_model_path=mmproj, verbose=True) n_gpu_layers = 0 if gpu: - n_gpu_layers = -1 - self.llm = Llama(model_path=model_path, chat_handler=chat_handler, n_ctx=2048, logits_all=True, n_gpu_layers=n_gpu_layers) + n_gpu_layers = -1 + self.llm = Llama( + model_path=model_path, + chat_handler=chat_handler, + n_ctx=2048, + logits_all=True, + n_gpu_layers=n_gpu_layers, + ) def run_inference(self, image, prompt, return_json=True): data_uri = image_to_base64_data_uri(image) res = self.llm.create_chat_completion( - messages = [ - {"role": "system", "content": "You are an assistant who perfectly describes images."}, - { - "role": "user", - "content": [ - {"type": "image_url", "image_url": {"url": data_uri}}, - {"type" : "text", "text": prompt} - ] - } - ] - ) + messages=[ + { + "role": "system", + "content": "You are an assistant who perfectly describes images.", + }, + { + "role": "user", + "content": [ + {"type": "image_url", "image_url": {"url": data_uri}}, + {"type": "text", "text": prompt}, + ], + }, + ] + ) if return_json: - - return list(set(self.extract_descriptions_from_incomplete_json(res["choices"][0]["message"]["content"]))) + return list( + set( + self.extract_descriptions_from_incomplete_json( + res["choices"][0]["message"]["content"] + ) + ) + ) return res["choices"][0]["message"]["content"] @@ -53,15 +73,19 @@ def extract_descriptions_from_incomplete_json(self, json_like_str): last_object_idx = json_like_str.rfind(',"object') if last_object_idx != -1: - json_str = json_like_str[:last_object_idx] + '}' + json_str = json_like_str[:last_object_idx] + "}" else: json_str = json_like_str.strip() - if not json_str.endswith('}'): - json_str += '}' + if not json_str.endswith("}"): + json_str += "}" try: json_obj = json.loads(json_str) - descriptions = [details['description'].replace(".","") for key, details in json_obj.items() if 'description' in details] + descriptions = [ + details["description"].replace(".", "") + for key, details in json_obj.items() + if "description" in details + ] return descriptions except json.JSONDecodeError as e: diff --git a/dimos/models/pointcloud/pointcloud_utils.py b/dimos/models/pointcloud/pointcloud_utils.py index 54cbd5f319..1fa98acf0b 100644 --- a/dimos/models/pointcloud/pointcloud_utils.py +++ b/dimos/models/pointcloud/pointcloud_utils.py @@ -12,17 +12,18 @@ # See the License for the specific language governing permissions and # limitations under the License. -import pickle import numpy as np import open3d as o3d import random + def save_pointcloud(pcd, file_path): """ Save a point cloud to a file using Open3D. """ o3d.io.write_point_cloud(file_path, pcd) + def restore_pointclouds(pointcloud_paths): restored_pointclouds = [] for path in pointcloud_paths: @@ -34,20 +35,28 @@ def create_point_cloud_from_rgbd(rgb_image, depth_image, intrinsic_parameters): rgbd_image = o3d.geometry.RGBDImage.create_from_color_and_depth( o3d.geometry.Image(rgb_image), o3d.geometry.Image(depth_image), - depth_scale=0.125, #1000.0, - depth_trunc=10.0, #10.0, - convert_rgb_to_intensity=False + depth_scale=0.125, # 1000.0, + depth_trunc=10.0, # 10.0, + convert_rgb_to_intensity=False, ) intrinsic = o3d.camera.PinholeCameraIntrinsic() - intrinsic.set_intrinsics(intrinsic_parameters['width'], intrinsic_parameters['height'], - intrinsic_parameters['fx'], intrinsic_parameters['fy'], - intrinsic_parameters['cx'], intrinsic_parameters['cy']) + intrinsic.set_intrinsics( + intrinsic_parameters["width"], + intrinsic_parameters["height"], + intrinsic_parameters["fx"], + intrinsic_parameters["fy"], + intrinsic_parameters["cx"], + intrinsic_parameters["cy"], + ) pcd = o3d.geometry.PointCloud.create_from_rgbd_image(rgbd_image, intrinsic) return pcd + def canonicalize_point_cloud(pcd, canonicalize_threshold=0.3): # Segment the largest plane, assumed to be the floor - plane_model, inliers = pcd.segment_plane(distance_threshold=0.01, ransac_n=3, num_iterations=1000) + plane_model, inliers = pcd.segment_plane( + distance_threshold=0.01, ransac_n=3, num_iterations=1000 + ) canonicalized = False if len(inliers) / len(pcd.points) > canonicalize_threshold: @@ -75,9 +84,13 @@ def canonicalize_point_cloud(pcd, canonicalize_threshold=0.3): pcd.transform(transformation) # Additional 180-degree rotation around the Z-axis - rotation_z_180 = np.array([[np.cos(np.pi), -np.sin(np.pi), 0], - [np.sin(np.pi), np.cos(np.pi), 0], - [0, 0, 1]]) + rotation_z_180 = np.array( + [ + [np.cos(np.pi), -np.sin(np.pi), 0], + [np.sin(np.pi), np.cos(np.pi), 0], + [0, 0, 1], + ] + ) pcd.rotate(rotation_z_180, center=(0, 0, 0)) return pcd, canonicalized, transformation @@ -141,6 +154,7 @@ def human_like_distance(distance_meters): # Fallback to the last choice if something goes wrong return f"{choices[-1][0]} {choices[-1][1]}" + def calculate_distances_between_point_clouds(A, B): dist_pcd1_to_pcd2 = np.asarray(A.compute_point_cloud_distance(B)) dist_pcd2_to_pcd1 = np.asarray(B.compute_point_cloud_distance(A)) @@ -148,12 +162,14 @@ def calculate_distances_between_point_clouds(A, B): avg_dist = np.mean(combined_distances) return human_like_distance(avg_dist) + def calculate_centroid(pcd): """Calculate the centroid of a point cloud.""" points = np.asarray(pcd.points) centroid = np.mean(points, axis=0) return centroid + def calculate_relative_positions(centroids): """Calculate the relative positions between centroids of point clouds.""" num_centroids = len(centroids) @@ -164,14 +180,17 @@ def calculate_relative_positions(centroids): relative_vector = centroids[j] - centroids[i] distance = np.linalg.norm(relative_vector) - relative_positions_info.append({ - 'pcd_pair': (i, j), - 'relative_vector': relative_vector, - 'distance': distance - }) + relative_positions_info.append( + { + "pcd_pair": (i, j), + "relative_vector": relative_vector, + "distance": distance, + } + ) return relative_positions_info + def get_bounding_box_height(pcd): """ Compute the height of the bounding box for a given point cloud. @@ -185,6 +204,7 @@ def get_bounding_box_height(pcd): aabb = pcd.get_axis_aligned_bounding_box() return aabb.get_extent()[1] # Assuming the Y-axis is the up-direction + def compare_bounding_box_height(pcd_i, pcd_j): """ Compare the bounding box heights of two point clouds. diff --git a/dimos/models/qwen/video_query.py b/dimos/models/qwen/video_query.py index 9ba73dbece..e12a6eef1f 100644 --- a/dimos/models/qwen/video_query.py +++ b/dimos/models/qwen/video_query.py @@ -1,7 +1,6 @@ """Utility functions for one-off video frame queries using Qwen model.""" import os -import threading import numpy as np from typing import Optional from openai import OpenAI @@ -18,19 +17,19 @@ def query_single_frame_observable( video_observable: Observable, query: str, api_key: Optional[str] = None, - model_name: str = "qwen2.5-vl-72b-instruct" + model_name: str = "qwen2.5-vl-72b-instruct", ) -> Observable: """Process a single frame from a video observable with Qwen model. - + Args: video_observable: An observable that emits video frames query: The query to ask about the frame api_key: Alibaba API key. If None, will try to get from ALIBABA_API_KEY env var model_name: The Qwen model to use. Defaults to qwen2.5-vl-72b-instruct - + Returns: Observable: An observable that emits a single response string - + Example: ```python video_obs = video_provider.capture_video_as_observable() @@ -40,19 +39,21 @@ def query_single_frame_observable( ``` """ # Get API key from env if not provided - api_key = api_key or os.getenv('ALIBABA_API_KEY') + api_key = api_key or os.getenv("ALIBABA_API_KEY") if not api_key: - raise ValueError("Alibaba API key must be provided or set in ALIBABA_API_KEY environment variable") + raise ValueError( + "Alibaba API key must be provided or set in ALIBABA_API_KEY environment variable" + ) # Create Qwen client qwen_client = OpenAI( - base_url='https://dashscope-intl.aliyuncs.com/compatible-mode/v1', + base_url="https://dashscope-intl.aliyuncs.com/compatible-mode/v1", api_key=api_key, ) # Create response subject response_subject = Subject() - + # Create temporary agent for processing agent = OpenAIAgent( dev_name="QwenSingleFrameAgent", @@ -65,45 +66,41 @@ def query_single_frame_observable( ) # Take only first frame - single_frame = video_observable.pipe( - ops.take(1) - ) + single_frame = video_observable.pipe(ops.take(1)) # Subscribe to frame processing and forward response to our subject agent.subscribe_to_image_processing(single_frame) - + # Forward agent responses to our response subject agent.get_response_observable().subscribe( on_next=lambda x: response_subject.on_next(x), on_error=lambda e: response_subject.on_error(e), - on_completed=lambda: response_subject.on_completed() + on_completed=lambda: response_subject.on_completed(), ) # Clean up agent when response subject completes - response_subject.subscribe( - on_completed=lambda: agent.dispose_all() - ) + response_subject.subscribe(on_completed=lambda: agent.dispose_all()) - return response_subject + return response_subject def query_single_frame( - image: 'PIL.Image', - query: str = 'Return the center coordinates of the fridge handle as a tuple (x,y)', + image: "PIL.Image", + query: str = "Return the center coordinates of the fridge handle as a tuple (x,y)", api_key: Optional[str] = None, - model_name: str = "qwen2.5-vl-72b-instruct" + model_name: str = "qwen2.5-vl-72b-instruct", ) -> str: """Process a single PIL image with Qwen model. - + Args: image: A PIL Image to process query: The query to ask about the image api_key: Alibaba API key. If None, will try to get from ALIBABA_API_KEY env var model_name: The Qwen model to use. Defaults to qwen2.5-vl-72b-instruct - + Returns: str: The model's response - + Example: ```python from PIL import Image @@ -113,13 +110,15 @@ def query_single_frame( ``` """ # Get API key from env if not provided - api_key = api_key or os.getenv('ALIBABA_API_KEY') + api_key = api_key or os.getenv("ALIBABA_API_KEY") if not api_key: - raise ValueError("Alibaba API key must be provided or set in ALIBABA_API_KEY environment variable") + raise ValueError( + "Alibaba API key must be provided or set in ALIBABA_API_KEY environment variable" + ) # Create Qwen client qwen_client = OpenAI( - base_url='https://dashscope-intl.aliyuncs.com/compatible-mode/v1', + base_url="https://dashscope-intl.aliyuncs.com/compatible-mode/v1", api_key=api_key, ) @@ -136,40 +135,38 @@ def query_single_frame( # Convert PIL image to numpy array frame = np.array(image) - + # Create a Subject that will emit the image once frame_subject = Subject() - + # Subscribe to frame processing agent.subscribe_to_image_processing(frame_subject) - + # Create response observable response_observable = agent.get_response_observable() - + # Emit the image frame_subject.on_next(frame) frame_subject.on_completed() - + # Take first response and run synchronously - response = response_observable.pipe( - ops.take(1) - ).run() - + response = response_observable.pipe(ops.take(1)).run() + # Clean up agent.dispose_all() - + return response + def get_bbox_from_qwen( - video_stream: Observable, - object_name: Optional[str] = None + video_stream: Observable, object_name: Optional[str] = None ) -> Optional[list]: """Get bounding box coordinates from Qwen for a specific object or any object. - + Args: video_stream: Observable video stream object_name: Optional name of object to detect - + Returns: bbox: Bounding box as [x1, y1, x2, y2] or None if no detection """ @@ -179,35 +176,37 @@ def get_bbox_from_qwen( "where x1,y1 is the top-left and x2,y2 is the bottom-right corner of the bounding box. If not found, return None." ) - response = query_single_frame_observable(video_stream, prompt).pipe(ops.take(1)).run() + response = ( + query_single_frame_observable(video_stream, prompt).pipe(ops.take(1)).run() + ) try: # Extract JSON from response - start_idx = response.find('{') - end_idx = response.rfind('}') + 1 + start_idx = response.find("{") + end_idx = response.rfind("}") + 1 if start_idx >= 0 and end_idx > start_idx: json_str = response[start_idx:end_idx] result = json.loads(json_str) - + # Extract and validate bbox - if 'bbox' in result and len(result['bbox']) == 4: - return result['bbox'], result['size'] + if "bbox" in result and len(result["bbox"]) == 4: + return result["bbox"], result["size"] except Exception as e: print(f"Error parsing Qwen response: {e}") print(f"Raw response: {response}") return None + def get_bbox_from_qwen_frame( - frame, - object_name: Optional[str] = None + frame, object_name: Optional[str] = None ) -> Optional[tuple]: """Get bounding box coordinates from Qwen for a specific object or any object using a single frame. - + Args: frame: A single image frame (PIL Image or numpy array) object_name: Optional name of object to detect - + Returns: tuple: (bbox, size) where bbox is [x1, y1, x2, y2] or None if no detection and size is the estimated height in meters @@ -215,8 +214,9 @@ def get_bbox_from_qwen_frame( # Convert numpy array to PIL Image if needed if isinstance(frame, np.ndarray): from PIL import Image + frame = Image.fromarray(frame) - + prompt = ( f"Look at this image and find the {object_name if object_name else 'most prominent object'}. Estimate the approximate height of the subject." "Return ONLY a JSON object with format: {'name': 'object_name', 'bbox': [x1, y1, x2, y2], 'size': height_in_meters} " @@ -227,17 +227,17 @@ def get_bbox_from_qwen_frame( try: # Extract JSON from response - start_idx = response.find('{') - end_idx = response.rfind('}') + 1 + start_idx = response.find("{") + end_idx = response.rfind("}") + 1 if start_idx >= 0 and end_idx > start_idx: json_str = response[start_idx:end_idx] result = json.loads(json_str) - + # Extract and validate bbox - if 'bbox' in result and len(result['bbox']) == 4: - return result['bbox'], result['size'] + if "bbox" in result and len(result["bbox"]) == 4: + return result["bbox"], result["size"] except Exception as e: print(f"Error parsing Qwen response: {e}") print(f"Raw response: {response}") - return None \ No newline at end of file + return None diff --git a/dimos/models/segmentation/clipseg.py b/dimos/models/segmentation/clipseg.py index 34100dff52..043cd194b0 100644 --- a/dimos/models/segmentation/clipseg.py +++ b/dimos/models/segmentation/clipseg.py @@ -13,8 +13,7 @@ # limitations under the License. from transformers import AutoProcessor, CLIPSegForImageSegmentation -import torch -import numpy as np + class CLIPSeg: def __init__(self, model_name="CIDAS/clipseg-rd64-refined"): @@ -22,7 +21,12 @@ def __init__(self, model_name="CIDAS/clipseg-rd64-refined"): self.clipseg_model = CLIPSegForImageSegmentation.from_pretrained(model_name) def run_inference(self, image, text_descriptions): - inputs = self.clipseg_processor(text=text_descriptions, images=[image] * len(text_descriptions), padding=True, return_tensors="pt") + inputs = self.clipseg_processor( + text=text_descriptions, + images=[image] * len(text_descriptions), + padding=True, + return_tensors="pt", + ) outputs = self.clipseg_model(**inputs) logits = outputs.logits - return logits.detach().unsqueeze(1) \ No newline at end of file + return logits.detach().unsqueeze(1) diff --git a/dimos/models/segmentation/sam.py b/dimos/models/segmentation/sam.py index b1c41915c2..9525de1fb4 100644 --- a/dimos/models/segmentation/sam.py +++ b/dimos/models/segmentation/sam.py @@ -14,7 +14,7 @@ from transformers import SamModel, SamProcessor import torch -import numpy as np + class SAM: def __init__(self, model_name="facebook/sam-vit-huge", device="cuda"): @@ -23,7 +23,13 @@ def __init__(self, model_name="facebook/sam-vit-huge", device="cuda"): self.sam_processor = SamProcessor.from_pretrained(model_name) def run_inference_from_points(self, image, points): - sam_inputs = self.sam_processor(image, input_points=points, return_tensors="pt").to(self.device) + sam_inputs = self.sam_processor( + image, input_points=points, return_tensors="pt" + ).to(self.device) with torch.no_grad(): sam_outputs = self.sam_model(**sam_inputs) - return self.sam_processor.image_processor.post_process_masks(sam_outputs.pred_masks.cpu(), sam_inputs["original_sizes"].cpu(), sam_inputs["reshaped_input_sizes"].cpu()) + return self.sam_processor.image_processor.post_process_masks( + sam_outputs.pred_masks.cpu(), + sam_inputs["original_sizes"].cpu(), + sam_inputs["reshaped_input_sizes"].cpu(), + ) diff --git a/dimos/models/segmentation/segment_utils.py b/dimos/models/segmentation/segment_utils.py index 04f18f22a1..b883b699cb 100644 --- a/dimos/models/segmentation/segment_utils.py +++ b/dimos/models/segmentation/segment_utils.py @@ -15,6 +15,7 @@ import torch import numpy as np + def find_medoid_and_closest_points(points, num_closest=5): """ Find the medoid from a collection of points and the closest points to the medoid. @@ -27,14 +28,17 @@ def find_medoid_and_closest_points(points, num_closest=5): np.array: The medoid point. np.array: The closest points to the medoid. """ - distances = np.sqrt(((points[:, np.newaxis, :] - points[np.newaxis, :, :]) ** 2).sum(axis=-1)) + distances = np.sqrt( + ((points[:, np.newaxis, :] - points[np.newaxis, :, :]) ** 2).sum(axis=-1) + ) distance_sums = distances.sum(axis=1) medoid_idx = np.argmin(distance_sums) medoid = points[medoid_idx] sorted_indices = np.argsort(distances[medoid_idx]) - closest_indices = sorted_indices[1:num_closest + 1] + closest_indices = sorted_indices[1 : num_closest + 1] return medoid, points[closest_indices] + def sample_points_from_heatmap(heatmap, original_size, num_points=5, percentile=0.95): """ Sample points from the given heatmap, focusing on areas with higher values. @@ -46,7 +50,9 @@ def sample_points_from_heatmap(heatmap, original_size, num_points=5, percentile= attn = torch.sigmoid(heatmap) w = attn.shape[0] - sampled_indices = torch.multinomial(torch.tensor(probabilities.ravel()), num_points, replacement=True) + sampled_indices = torch.multinomial( + torch.tensor(probabilities.ravel()), num_points, replacement=True + ) sampled_coords = np.array(np.unravel_index(sampled_indices, attn.shape)).T medoid, sampled_coords = find_medoid_and_closest_points(sampled_coords) @@ -66,4 +72,4 @@ def apply_mask_to_image(image, mask): masked_image = image.copy() for c in range(masked_image.shape[2]): masked_image[:, :, c] = masked_image[:, :, c] * mask - return masked_image \ No newline at end of file + return masked_image diff --git a/dimos/perception/common/__init__.py b/dimos/perception/common/__init__.py index a4dd07c913..ad815d3f46 100644 --- a/dimos/perception/common/__init__.py +++ b/dimos/perception/common/__init__.py @@ -1,3 +1,3 @@ from .detection2d_tracker import target2dTracker, get_tracked_results from .cuboid_fit import * -from .ibvs import * \ No newline at end of file +from .ibvs import * diff --git a/dimos/perception/common/cuboid_fit.py b/dimos/perception/common/cuboid_fit.py index 8bf37be170..dbb173753b 100644 --- a/dimos/perception/common/cuboid_fit.py +++ b/dimos/perception/common/cuboid_fit.py @@ -2,19 +2,18 @@ from sklearn.decomposition import PCA import matplotlib.pyplot as plt import cv2 -import argparse -from pathlib import Path + def depth_to_point_cloud(depth_image, camera_matrix, subsample_factor=4): """ Convert depth image to point cloud using camera intrinsics. Subsamples points to reduce density. - + Args: depth_image: HxW depth image in meters camera_matrix: 3x3 camera intrinsic matrix subsample_factor: Factor to subsample points (higher = fewer points) - + Returns: Nx3 array of 3D points """ @@ -23,39 +22,41 @@ def depth_to_point_cloud(depth_image, camera_matrix, subsample_factor=4): fy = camera_matrix[1, 1] cx = camera_matrix[0, 2] cy = camera_matrix[1, 2] - + # Create pixel coordinate grid rows, cols = depth_image.shape - x_grid, y_grid = np.meshgrid(np.arange(0, cols, subsample_factor), - np.arange(0, rows, subsample_factor)) - + x_grid, y_grid = np.meshgrid( + np.arange(0, cols, subsample_factor), np.arange(0, rows, subsample_factor) + ) + # Flatten grid and depth x = x_grid.flatten() y = y_grid.flatten() z = depth_image[y_grid, x_grid].flatten() - + # Remove points with invalid depth valid = z > 0 x = x[valid] y = y[valid] z = z[valid] - + # Convert to 3D points X = (x - cx) * z / fx Y = (y - cy) * z / fy Z = z - + return np.column_stack([X, Y, Z]) + def fit_cuboid(points, n_iterations=5, inlier_thresh=2.0): """ Fit a cuboid to a point cloud using iteratively refined PCA. - + Args: points: Nx3 array of points n_iterations: Number of refinement iterations inlier_thresh: Threshold for inlier detection in standard deviations - + Returns: dict containing: - center: 3D center point @@ -66,126 +67,132 @@ def fit_cuboid(points, n_iterations=5, inlier_thresh=2.0): points = np.asarray(points) if len(points) < 4: return None - + # Initial center estimate using median for robustness - best_error = float('inf') + best_error = float("inf") best_params = None center = np.median(points, axis=0) current_points = points - center - + for iteration in range(n_iterations): if len(current_points) < 4: # Need at least 4 points for PCA break - + # Perform PCA pca = PCA(n_components=3) pca.fit(current_points) - + # Get rotation matrix from PCA rotation = pca.components_ - + # Transform points to PCA space local_points = current_points @ rotation.T - + # Initialize mask for this iteration inlier_mask = np.ones(len(current_points), dtype=bool) dimensions = np.zeros(3) - + # Filter points along each dimension for dim in range(3): points_1d = local_points[inlier_mask, dim] if len(points_1d) < 4: break - + median = np.median(points_1d) mad = np.median(np.abs(points_1d - median)) sigma = mad * 1.4826 # Convert MAD to standard deviation estimate - + # Avoid issues with constant values if sigma < 1e-6: continue - + # Update mask for this dimension dim_inliers = np.abs(points_1d - median) < (inlier_thresh * sigma) inlier_mask[inlier_mask] = dim_inliers - + # Calculate dimension based on robust statistics valid_points = points_1d[dim_inliers] if len(valid_points) > 0: dimensions[dim] = np.max(valid_points) - np.min(valid_points) - + # Skip if we don't have enough inliers if np.sum(inlier_mask) < 4: continue - + # Calculate error for this iteration # Mean squared distance from points to cuboid surface half_dims = dimensions / 2 dx = np.abs(local_points[:, 0]) - half_dims[0] dy = np.abs(local_points[:, 1]) - half_dims[1] dz = np.abs(local_points[:, 2]) - half_dims[2] - - outside_dist = np.sqrt(np.maximum(dx, 0)**2 + - np.maximum(dy, 0)**2 + - np.maximum(dz, 0)**2) + + outside_dist = np.sqrt( + np.maximum(dx, 0) ** 2 + np.maximum(dy, 0) ** 2 + np.maximum(dz, 0) ** 2 + ) inside_dist = np.minimum(np.maximum(np.maximum(dx, dy), dz), 0) distances = outside_dist + inside_dist error = np.mean(distances**2) - + if error < best_error: best_error = error best_params = { - 'center': center, - 'rotation': rotation, - 'dimensions': dimensions, - 'error': error + "center": center, + "rotation": rotation, + "dimensions": dimensions, + "error": error, } - + # Update points for next iteration current_points = current_points[inlier_mask] - + return best_params + def compute_fitting_error(local_points, dimensions): """Compute mean squared distance from points to cuboid surface.""" half_dims = dimensions / 2 dx = np.abs(local_points[:, 0]) - half_dims[0] dy = np.abs(local_points[:, 1]) - half_dims[1] dz = np.abs(local_points[:, 2]) - half_dims[2] - - outside_dist = np.sqrt(np.maximum(dx, 0)**2 + - np.maximum(dy, 0)**2 + - np.maximum(dz, 0)**2) + + outside_dist = np.sqrt( + np.maximum(dx, 0) ** 2 + np.maximum(dy, 0) ** 2 + np.maximum(dz, 0) ** 2 + ) inside_dist = np.minimum(np.maximum(np.maximum(dx, dy), dz), 0) - + distances = outside_dist + inside_dist return np.mean(distances**2) + def get_cuboid_corners(center, dimensions, rotation): """Get the 8 corners of a cuboid.""" half_dims = dimensions / 2 - corners_local = np.array([ - [-1, -1, -1], # 0: left bottom back - [-1, -1, 1], # 1: left bottom front - [-1, 1, -1], # 2: left top back - [-1, 1, 1], # 3: left top front - [ 1, -1, -1], # 4: right bottom back - [ 1, -1, 1], # 5: right bottom front - [ 1, 1, -1], # 6: right top back - [ 1, 1, 1] # 7: right top front - ]) * half_dims - + corners_local = ( + np.array( + [ + [-1, -1, -1], # 0: left bottom back + [-1, -1, 1], # 1: left bottom front + [-1, 1, -1], # 2: left top back + [-1, 1, 1], # 3: left top front + [1, -1, -1], # 4: right bottom back + [1, -1, 1], # 5: right bottom front + [1, 1, -1], # 6: right top back + [1, 1, 1], # 7: right top front + ] + ) + * half_dims + ) + return corners_local @ rotation + center + def visualize_fit(image, cuboid_params, camera_matrix, R=None, t=None): """ Draw the fitted cuboid on the image. """ # Get corners in world coordinates corners = get_cuboid_corners( - cuboid_params['center'], - cuboid_params['dimensions'], - cuboid_params['rotation'] + cuboid_params["center"], cuboid_params["dimensions"], cuboid_params["rotation"] ) # Transform corners if R and t are provided @@ -193,93 +200,128 @@ def visualize_fit(image, cuboid_params, camera_matrix, R=None, t=None): corners = (R @ corners.T).T + t # Project corners to image space - corners_img = cv2.projectPoints( - corners, - np.zeros(3), np.zeros(3), # Already in camera frame - camera_matrix, - None - )[0].reshape(-1, 2).astype(int) + corners_img = ( + cv2.projectPoints( + corners, + np.zeros(3), + np.zeros(3), # Already in camera frame + camera_matrix, + None, + )[0] + .reshape(-1, 2) + .astype(int) + ) # Define edges for visualization edges = [ # Bottom face - (0, 1), (1, 5), (5, 4), (4, 0), + (0, 1), + (1, 5), + (5, 4), + (4, 0), # Top face - (2, 3), (3, 7), (7, 6), (6, 2), + (2, 3), + (3, 7), + (7, 6), + (6, 2), # Vertical edges - (0, 2), (1, 3), (5, 7), (4, 6) + (0, 2), + (1, 3), + (5, 7), + (4, 6), ] # Draw edges vis_img = image.copy() for i, j in edges: - cv2.line(vis_img, - tuple(corners_img[i]), - tuple(corners_img[j]), - (0, 255, 0), 2) + cv2.line(vis_img, tuple(corners_img[i]), tuple(corners_img[j]), (0, 255, 0), 2) # Add text with dimensions - dims = cuboid_params['dimensions'] + dims = cuboid_params["dimensions"] dim_text = f"Dims: {dims[0]:.3f} x {dims[1]:.3f} x {dims[2]:.3f}" - cv2.putText(vis_img, dim_text, (10, 30), - cv2.FONT_HERSHEY_SIMPLEX, 0.7, (0, 255, 0), 2) + cv2.putText( + vis_img, dim_text, (10, 30), cv2.FONT_HERSHEY_SIMPLEX, 0.7, (0, 255, 0), 2 + ) return vis_img + def plot_3d_fit(points, cuboid_params, title="3D Cuboid Fit"): """Plot points and fitted cuboid in 3D.""" fig = plt.figure(figsize=(10, 10)) - ax = fig.add_subplot(111, projection='3d') - + ax = fig.add_subplot(111, projection="3d") + # Plot points - ax.scatter(points[:, 0], points[:, 1], points[:, 2], - c='b', marker='.', alpha=0.1, label='Points') - + ax.scatter( + points[:, 0], + points[:, 1], + points[:, 2], + c="b", + marker=".", + alpha=0.1, + label="Points", + ) + # Plot fitted cuboid corners = get_cuboid_corners( - cuboid_params['center'], - cuboid_params['dimensions'], - cuboid_params['rotation'] + cuboid_params["center"], cuboid_params["dimensions"], cuboid_params["rotation"] ) - + # Define edges edges = [ # Bottom face - (0, 1), (1, 5), (5, 4), (4, 0), + (0, 1), + (1, 5), + (5, 4), + (4, 0), # Top face - (2, 3), (3, 7), (7, 6), (6, 2), + (2, 3), + (3, 7), + (7, 6), + (6, 2), # Vertical edges - (0, 2), (1, 3), (5, 7), (4, 6) + (0, 2), + (1, 3), + (5, 7), + (4, 6), ] - + # Plot edges for i, j in edges: - ax.plot3D([corners[i,0], corners[j,0]], - [corners[i,1], corners[j,1]], - [corners[i,2], corners[j,2]], 'r-') - + ax.plot3D( + [corners[i, 0], corners[j, 0]], + [corners[i, 1], corners[j, 1]], + [corners[i, 2], corners[j, 2]], + "r-", + ) + # Set labels and title - ax.set_xlabel('X') - ax.set_ylabel('Y') - ax.set_zlabel('Z') + ax.set_xlabel("X") + ax.set_ylabel("Y") + ax.set_zlabel("Z") ax.set_title(title) - + # Make scaling uniform all_points = np.vstack([points, corners]) - max_range = np.array([ - all_points[:,0].max() - all_points[:,0].min(), - all_points[:,1].max() - all_points[:,1].min(), - all_points[:,2].max() - all_points[:,2].min() - ]).max() / 2.0 - - mid_x = (all_points[:,0].max() + all_points[:,0].min()) * 0.5 - mid_y = (all_points[:,1].max() + all_points[:,1].min()) * 0.5 - mid_z = (all_points[:,2].max() + all_points[:,2].min()) * 0.5 - + max_range = ( + np.array( + [ + all_points[:, 0].max() - all_points[:, 0].min(), + all_points[:, 1].max() - all_points[:, 1].min(), + all_points[:, 2].max() - all_points[:, 2].min(), + ] + ).max() + / 2.0 + ) + + mid_x = (all_points[:, 0].max() + all_points[:, 0].min()) * 0.5 + mid_y = (all_points[:, 1].max() + all_points[:, 1].min()) * 0.5 + mid_z = (all_points[:, 2].max() + all_points[:, 2].min()) * 0.5 + ax.set_xlim(mid_x - max_range, mid_x + max_range) ax.set_ylim(mid_y - max_range, mid_y + max_range) ax.set_zlim(mid_z - max_range, mid_z + max_range) - - ax.set_box_aspect([1,1,1]) + + ax.set_box_aspect([1, 1, 1]) plt.legend() return fig, ax diff --git a/dimos/perception/common/detection2d_tracker.py b/dimos/perception/common/detection2d_tracker.py index 62b465a4a9..86ff68770a 100644 --- a/dimos/perception/common/detection2d_tracker.py +++ b/dimos/perception/common/detection2d_tracker.py @@ -1,6 +1,7 @@ import numpy as np from collections import deque + def compute_iou(bbox1, bbox2): """ Compute Intersection over Union (IoU) of two bounding boxes. @@ -10,24 +11,25 @@ def compute_iou(bbox1, bbox2): y1 = max(bbox1[1], bbox2[1]) x2 = min(bbox1[2], bbox2[2]) y2 = min(bbox1[3], bbox2[3]) - + inter_area = max(0, x2 - x1) * max(0, y2 - y1) area1 = (bbox1[2] - bbox1[0]) * (bbox1[3] - bbox1[1]) area2 = (bbox2[2] - bbox2[0]) * (bbox2[3] - bbox2[1]) - + union_area = area1 + area2 - inter_area if union_area == 0: return 0 return inter_area / union_area + def get_tracked_results(tracked_targets): """ Extract tracked results from a list of target2d objects. - + Args: tracked_targets (list[target2d]): List of target2d objects (published targets) returned by the tracker's update() function. - + Returns: tuple: (tracked_masks, tracked_bboxes, tracked_track_ids, tracked_probs, tracked_names) where each is a list of the corresponding attribute from each target. @@ -37,7 +39,7 @@ def get_tracked_results(tracked_targets): tracked_track_ids = [] tracked_probs = [] tracked_names = [] - + for target in tracked_targets: # Extract the latest values stored in each target. tracked_masks.append(target.latest_mask) @@ -48,9 +50,14 @@ def get_tracked_results(tracked_targets): tracked_probs.append(target.score) # Use the stored name (if any). If not available, you can use a default value. tracked_names.append(target.name) - - return tracked_masks, tracked_bboxes, tracked_track_ids, tracked_probs, tracked_names + return ( + tracked_masks, + tracked_bboxes, + tracked_track_ids, + tracked_probs, + tracked_names, + ) class target2d: @@ -59,7 +66,18 @@ class target2d: Stores the latest bounding box and mask along with a short history of track IDs, detection probabilities, and computed texture values. """ - def __init__(self, initial_mask, initial_bbox, track_id, prob, name, texture_value, target_id, history_size=10): + + def __init__( + self, + initial_mask, + initial_bbox, + track_id, + prob, + name, + texture_value, + target_id, + history_size=10, + ): """ Args: initial_mask (torch.Tensor): Latest segmentation mask. @@ -76,13 +94,15 @@ def __init__(self, initial_mask, initial_bbox, track_id, prob, name, texture_val self.latest_bbox = initial_bbox self.name = name self.score = 1.0 - + self.track_id = track_id self.probs_history = deque(maxlen=history_size) self.texture_history = deque(maxlen=history_size) - - self.frame_count = deque(maxlen=history_size) # Total frames this target has been seen. - self.missed_frames = 0 # Consecutive frames when no detection was assigned. + + self.frame_count = deque( + maxlen=history_size + ) # Total frames this target has been seen. + self.missed_frames = 0 # Consecutive frames when no detection was assigned. self.history_size = history_size def update(self, mask, bbox, track_id, prob, name, texture_value): @@ -92,14 +112,14 @@ def update(self, mask, bbox, track_id, prob, name, texture_value): self.latest_mask = mask self.latest_bbox = bbox self.name = name - + self.track_id = track_id self.probs_history.append(prob) self.texture_history.append(texture_value) - + self.frame_count.append(1) self.missed_frames = 0 - + def mark_missed(self): """ Increment the count of consecutive frames where this target was not updated. @@ -107,35 +127,47 @@ def mark_missed(self): self.missed_frames += 1 self.frame_count.append(0) - def compute_score(self, frame_shape, min_area_ratio, max_area_ratio, - texture_range=(0.0, 1.0), border_safe_distance=50, - weights=None): + def compute_score( + self, + frame_shape, + min_area_ratio, + max_area_ratio, + texture_range=(0.0, 1.0), + border_safe_distance=50, + weights=None, + ): """ Compute a combined score for the target based on several factors. - + Factors: - **Detection probability:** Average over recent frames. - **Temporal stability:** How consistently the target has appeared. - **Texture quality:** Normalized using the provided min and max values. - **Border proximity:** Computed from the minimum distance from the bbox to the frame edges. - **Size:** How the object's area (relative to the frame) compares to acceptable bounds. - + Args: frame_shape (tuple): (height, width) of the frame. min_area_ratio (float): Minimum acceptable ratio (bbox area / frame area). max_area_ratio (float): Maximum acceptable ratio. texture_range (tuple): (min_texture, max_texture) expected values. border_safe_distance (float): Distance (in pixels) considered safe from the border. - weights (dict): Weights for each component. Expected keys: + weights (dict): Weights for each component. Expected keys: 'prob', 'temporal', 'texture', 'border', and 'size'. - + Returns: float: The combined (normalized) score in the range [0, 1]. """ # Default weights if none provided. if weights is None: - weights = {"prob": 1.0, "temporal": 1.0, "texture": 1.0, "border": 1.0, "size": 1.0} - + weights = { + "prob": 1.0, + "temporal": 1.0, + "texture": 1.0, + "border": 1.0, + "size": 1.0, + } + h, w = frame_shape x1, y1, x2, y2 = self.latest_bbox bbox_area = (x2 - x1) * (y2 - y1) @@ -152,7 +184,9 @@ def compute_score(self, frame_shape, min_area_ratio, max_area_ratio, if max_texture == min_texture: normalized_texture = avg_texture else: - normalized_texture = (avg_texture - min_texture) / (max_texture - min_texture) + normalized_texture = (avg_texture - min_texture) / ( + max_texture - min_texture + ) normalized_texture = max(0.0, min(normalized_texture, 1.0)) # Border factor: compute the minimum distance from the bbox to any frame edge. @@ -183,42 +217,51 @@ def compute_score(self, frame_shape, min_area_ratio, max_area_ratio, w_size = weights.get("size", 1.0) total_weight = w_prob + w_temporal + w_texture + w_border + w_size - #print(f"track_id: {self.target_id}, avg_prob: {avg_prob:.2f}, temporal_stability: {temporal_stability:.2f}, normalized_texture: {normalized_texture:.2f}, border_factor: {border_factor:.2f}, size_factor: {size_factor:.2f}") - - final_score = (w_prob * avg_prob + - w_temporal * temporal_stability + - w_texture * normalized_texture + - w_border * border_factor + - w_size * size_factor) / total_weight - + # print(f"track_id: {self.target_id}, avg_prob: {avg_prob:.2f}, temporal_stability: {temporal_stability:.2f}, normalized_texture: {normalized_texture:.2f}, border_factor: {border_factor:.2f}, size_factor: {size_factor:.2f}") + + final_score = ( + w_prob * avg_prob + + w_temporal * temporal_stability + + w_texture * normalized_texture + + w_border * border_factor + + w_size * size_factor + ) / total_weight + self.score = final_score - + return final_score + class target2dTracker: """ Tracker that maintains a history of targets across frames. New segmentation detections (frame, masks, bboxes, track_ids, probabilities, and computed texture values) are matched to existing targets or used to create new ones. - + The tracker uses a scoring system that incorporates: - **Detection probability** - **Temporal stability** - **Texture quality** (normalized within a specified range) - **Proximity to image borders** (a continuous penalty based on the distance) - **Object size** relative to the frame - + Targets are published if their score exceeds the start threshold and are removed if their score falls below the stop threshold or if they are missed for too many consecutive frames. """ - def __init__(self, history_size=10, - score_threshold_start=0.5, score_threshold_stop=0.3, - min_frame_count=10, - max_missed_frames=3, - min_area_ratio=0.001, max_area_ratio=0.1, - texture_range=(0.0, 1.0), - border_safe_distance=50, - weights=None): + + def __init__( + self, + history_size=10, + score_threshold_start=0.5, + score_threshold_stop=0.3, + min_frame_count=10, + max_missed_frames=3, + min_area_ratio=0.001, + max_area_ratio=0.1, + texture_range=(0.0, 1.0), + border_safe_distance=50, + weights=None, + ): """ Args: history_size (int): Maximum history length (number of frames) per target. @@ -244,16 +287,22 @@ def __init__(self, history_size=10, self.border_safe_distance = border_safe_distance # Default weights if none are provided. if weights is None: - weights = {"prob": 1.0, "temporal": 1.0, "texture": 1.0, "border": 1.0, "size": 1.0} + weights = { + "prob": 1.0, + "temporal": 1.0, + "texture": 1.0, + "border": 1.0, + "size": 1.0, + } self.weights = weights - + self.targets = {} # Dictionary mapping target_id -> target2d instance. self.next_target_id = 0 def update(self, frame, masks, bboxes, track_ids, probs, names, texture_values): """ Update the tracker with new detections from the current frame. - + Args: frame (np.ndarray): Current BGR frame. masks (list[torch.Tensor]): List of segmentation masks. @@ -262,7 +311,7 @@ def update(self, frame, masks, bboxes, track_ids, probs, names, texture_values): probs (list): List of detection probabilities. names (list): List of class names. texture_values (list): List of computed texture values. - + Returns: published_targets (list[target2d]): Targets that are active and have scores above the start threshold. @@ -271,7 +320,9 @@ def update(self, frame, masks, bboxes, track_ids, probs, names, texture_values): frame_shape = frame.shape[:2] # (height, width) # For each detection, try to match with an existing target. - for mask, bbox, det_tid, prob, name, texture in zip(masks, bboxes, track_ids, probs, names, texture_values): + for mask, bbox, det_tid, prob, name, texture in zip( + masks, bboxes, track_ids, probs, names, texture_values + ): matched_target = None # First, try matching by detection track ID if valid. @@ -295,7 +346,16 @@ def update(self, frame, masks, bboxes, track_ids, probs, names, texture_values): matched_target.update(mask, bbox, det_tid, prob, name, texture) updated_target_ids.add(matched_target.target_id) else: - new_target = target2d(mask, bbox, det_tid, prob, name, texture, self.next_target_id, self.history_size) + new_target = target2d( + mask, + bbox, + det_tid, + prob, + name, + texture, + self.next_target_id, + self.history_size, + ) self.targets[self.next_target_id] = new_target updated_target_ids.add(self.next_target_id) self.next_target_id += 1 @@ -308,23 +368,33 @@ def update(self, frame, masks, bboxes, track_ids, probs, names, texture_values): del self.targets[target_id] continue # Skip further checks for this target. # Remove targets whose score falls below the stop threshold. - score = target.compute_score(frame_shape, self.min_area_ratio, self.max_area_ratio, - texture_range=self.texture_range, - border_safe_distance=self.border_safe_distance, - weights=self.weights) + score = target.compute_score( + frame_shape, + self.min_area_ratio, + self.max_area_ratio, + texture_range=self.texture_range, + border_safe_distance=self.border_safe_distance, + weights=self.weights, + ) if score < self.score_threshold_stop: del self.targets[target_id] # Publish targets with scores above the start threshold. published_targets = [] for target in self.targets.values(): - score = target.compute_score(frame_shape, self.min_area_ratio, self.max_area_ratio, - texture_range=self.texture_range, - border_safe_distance=self.border_safe_distance, - weights=self.weights) - if score >= self.score_threshold_start and \ - sum(target.frame_count) >= self.min_frame_count and \ - target.missed_frames <= 5: + score = target.compute_score( + frame_shape, + self.min_area_ratio, + self.max_area_ratio, + texture_range=self.texture_range, + border_safe_distance=self.border_safe_distance, + weights=self.weights, + ) + if ( + score >= self.score_threshold_start + and sum(target.frame_count) >= self.min_frame_count + and target.missed_frames <= 5 + ): published_targets.append(target) return published_targets diff --git a/dimos/perception/common/export_tensorrt.py b/dimos/perception/common/export_tensorrt.py index cdc5663b5d..4c3ac60d88 100644 --- a/dimos/perception/common/export_tensorrt.py +++ b/dimos/perception/common/export_tensorrt.py @@ -1,22 +1,44 @@ import argparse from ultralytics import YOLO, FastSAM -from pathlib import Path + def parse_args(): - parser = argparse.ArgumentParser(description='Export YOLO/FastSAM models to different formats') - parser.add_argument('--model_path', type=str, required=True, help='Path to the model weights') - parser.add_argument('--model_type', type=str, choices=['yolo', 'fastsam'], required=True, help='Type of model to export') - parser.add_argument('--precision', type=str, choices=['fp32', 'fp16', 'int8'], default='fp32', help='Precision for export') - parser.add_argument('--format', type=str, choices=['onnx', 'engine'], default='onnx', help='Export format') + parser = argparse.ArgumentParser( + description="Export YOLO/FastSAM models to different formats" + ) + parser.add_argument( + "--model_path", type=str, required=True, help="Path to the model weights" + ) + parser.add_argument( + "--model_type", + type=str, + choices=["yolo", "fastsam"], + required=True, + help="Type of model to export", + ) + parser.add_argument( + "--precision", + type=str, + choices=["fp32", "fp16", "int8"], + default="fp32", + help="Precision for export", + ) + parser.add_argument( + "--format", + type=str, + choices=["onnx", "engine"], + default="onnx", + help="Export format", + ) return parser.parse_args() + def main(): args = parse_args() - half = args.precision == 'fp16' - int8 = args.precision == 'int8' + half = args.precision == "fp16" + int8 = args.precision == "int8" # Load the appropriate model - if args.model_type == 'yolo': - + if args.model_type == "yolo": model = YOLO(args.model_path) else: model = FastSAM(args.model_path) @@ -24,5 +46,6 @@ def main(): # Export the model model.export(format=args.format, half=half, int8=int8) -if __name__ == '__main__': - main() \ No newline at end of file + +if __name__ == "__main__": + main() diff --git a/dimos/perception/common/ibvs.py b/dimos/perception/common/ibvs.py index 040bd66799..6e5ff40cdd 100644 --- a/dimos/perception/common/ibvs.py +++ b/dimos/perception/common/ibvs.py @@ -1,10 +1,11 @@ import numpy as np + class PersonDistanceEstimator: def __init__(self, K, camera_pitch, camera_height): """ Initialize the distance estimator using ground plane constraint. - + Args: K: 3x3 Camera intrinsic matrix in OpenCV format (Assumed to be already for an undistorted image) @@ -14,26 +15,28 @@ def __init__(self, K, camera_pitch, camera_height): """ self.K = K self.camera_height = camera_height - + # Precompute the inverse intrinsic matrix self.K_inv = np.linalg.inv(K) - + # Transform from camera to robot frame (z-forward to x-forward) - self.T = np.array([[0, 0, 1], - [-1, 0, 0], - [0, -1, 0]]) - + self.T = np.array([[0, 0, 1], [-1, 0, 0], [0, -1, 0]]) + # Pitch rotation matrix (positive is upward) - theta = -camera_pitch # Negative since positive pitch is negative rotation about robot Y - self.R_pitch = np.array([ - [ np.cos(theta), 0, np.sin(theta)], - [ 0, 1, 0], - [-np.sin(theta), 0, np.cos(theta)] - ]) - + theta = ( + -camera_pitch + ) # Negative since positive pitch is negative rotation about robot Y + self.R_pitch = np.array( + [ + [np.cos(theta), 0, np.sin(theta)], + [0, 1, 0], + [-np.sin(theta), 0, np.cos(theta)], + ] + ) + # Combined transform from camera to robot frame self.A = self.R_pitch @ self.T - + # Store focal length and principal point for angle calculation self.fx = K[0, 0] self.cx = K[0, 2] @@ -41,79 +44,83 @@ def __init__(self, K, camera_pitch, camera_height): def estimate_distance_angle(self, bbox: tuple, robot_pitch: float = None): """ Estimate distance and angle to person using ground plane constraint. - + Args: bbox: tuple (x_min, y_min, x_max, y_max) where y_max represents the feet position robot_pitch: Current pitch of the robot body (in radians) If provided, this will be combined with the camera's fixed pitch - + Returns: depth: distance to person along camera's z-axis (meters) angle: horizontal angle in camera frame (radians, positive right) """ x_min, _, x_max, y_max = bbox - + # Get center point of feet u_c = (x_min + x_max) / 2.0 v_feet = y_max - + # Create homogeneous feet point and get ray direction p_feet = np.array([u_c, v_feet, 1.0]) d_feet_cam = self.K_inv @ p_feet - + # If robot_pitch is provided, recalculate the transformation matrix if robot_pitch is not None: # Combined pitch (fixed camera pitch + current robot pitch) - total_pitch = -camera_pitch - robot_pitch # Both negated for correct rotation direction - R_total_pitch = np.array([ - [ np.cos(total_pitch), 0, np.sin(total_pitch)], - [ 0, 1, 0], - [-np.sin(total_pitch), 0, np.cos(total_pitch)] - ]) + total_pitch = ( + -camera_pitch - robot_pitch + ) # Both negated for correct rotation direction + R_total_pitch = np.array( + [ + [np.cos(total_pitch), 0, np.sin(total_pitch)], + [0, 1, 0], + [-np.sin(total_pitch), 0, np.cos(total_pitch)], + ] + ) # Use the updated transformation matrix A = R_total_pitch @ self.T else: # Use the precomputed transformation matrix A = self.A - + # Convert ray to robot frame using appropriate transformation d_feet_robot = A @ d_feet_cam - + # Ground plane intersection (z=0) # camera_height + t * d_feet_robot[2] = 0 if abs(d_feet_robot[2]) < 1e-6: raise ValueError("Feet ray is parallel to ground plane") - + # Solve for scaling factor t t = -self.camera_height / d_feet_robot[2] - + # Get 3D feet position in robot frame p_feet_robot = t * d_feet_robot - + # Convert back to camera frame p_feet_cam = self.A.T @ p_feet_robot - + # Extract depth (z-coordinate in camera frame) depth = p_feet_cam[2] - + # Calculate horizontal angle from image center angle = np.arctan((u_c - self.cx) / self.fx) - + return depth, angle class ObjectDistanceEstimator: - """ Estimate distance to an object using the ground plane constraint. This class assumes the camera is mounted on a robot and uses the camera's intrinsic parameters to estimate the distance to a detected object. """ + def __init__(self, K, camera_pitch, camera_height): """ Initialize the distance estimator using ground plane constraint. - + Args: K: 3x3 Camera intrinsic matrix in OpenCV format (Assumed to be already for an undistorted image) @@ -123,26 +130,28 @@ def __init__(self, K, camera_pitch, camera_height): """ self.K = K self.camera_height = camera_height - + # Precompute the inverse intrinsic matrix self.K_inv = np.linalg.inv(K) - + # Transform from camera to robot frame (z-forward to x-forward) - self.T = np.array([[0, 0, 1], - [-1, 0, 0], - [0, -1, 0]]) - + self.T = np.array([[0, 0, 1], [-1, 0, 0], [0, -1, 0]]) + # Pitch rotation matrix (positive is upward) - theta = -camera_pitch # Negative since positive pitch is negative rotation about robot Y - self.R_pitch = np.array([ - [ np.cos(theta), 0, np.sin(theta)], - [ 0, 1, 0], - [-np.sin(theta), 0, np.cos(theta)] - ]) - + theta = ( + -camera_pitch + ) # Negative since positive pitch is negative rotation about robot Y + self.R_pitch = np.array( + [ + [np.cos(theta), 0, np.sin(theta)], + [0, 1, 0], + [-np.sin(theta), 0, np.cos(theta)], + ] + ) + # Combined transform from camera to robot frame self.A = self.R_pitch @ self.T - + # Store focal length and principal point for angle calculation self.fx = K[0, 0] self.fy = K[1, 1] @@ -152,30 +161,30 @@ def __init__(self, K, camera_pitch, camera_height): def estimate_object_size(self, bbox: tuple, distance: float): """ Estimate the physical size of an object based on its bbox and known distance. - + Args: bbox: tuple (x_min, y_min, x_max, y_max) bounding box in the image distance: Known distance to the object (in meters) robot_pitch: Current pitch of the robot body (in radians), if any - + Returns: estimated_size: Estimated physical height of the object (in meters) """ x_min, y_min, x_max, y_max = bbox - + # Calculate object height in pixels object_height_px = y_max - y_min - + # Calculate the physical height using the known distance and focal length estimated_size = object_height_px * distance / self.fy self.estimated_object_size = estimated_size - + return estimated_size - + def set_estimated_object_size(self, size: float): """ Set the estimated object size for future distance calculations. - + Args: size: Estimated physical size of the object (in meters) """ @@ -184,7 +193,7 @@ def set_estimated_object_size(self, size: float): def estimate_distance_angle(self, bbox: tuple): """ Estimate distance and angle to object using size-based estimation. - + Args: bbox: tuple (x_min, y_min, x_max, y_max) where y_max represents the bottom of the object @@ -192,7 +201,7 @@ def estimate_distance_angle(self, bbox: tuple): If provided, this will be combined with the camera's fixed pitch initial_distance: Initial distance estimate for the object (in meters) Used to calibrate object size if not previously known - + Returns: depth: distance to object along camera's z-axis (meters) angle: horizontal angle in camera frame (radians, positive right) @@ -202,45 +211,43 @@ def estimate_distance_angle(self, bbox: tuple): # we can't estimate the distance if self.estimated_object_size is None: return None, None - + x_min, y_min, x_max, y_max = bbox - + # Calculate center of the object for angle calculation u_c = (x_min + x_max) / 2.0 - + # If we have an initial distance estimate and no object size yet, # calculate and store the object size using the initial distance object_height_px = y_max - y_min depth = self.estimated_object_size * self.fy / object_height_px - + # Calculate horizontal angle from image center angle = np.arctan((u_c - self.cx) / self.fx) - + return depth, angle # Example usage: if __name__ == "__main__": # Example camera calibration - K = np.array([[600, 0, 320], - [ 0, 600, 240], - [ 0, 0, 1]], dtype=np.float32) - + K = np.array([[600, 0, 320], [0, 600, 240], [0, 0, 1]], dtype=np.float32) + # Camera mounted 1.2m high, pitched down 10 degrees camera_pitch = np.deg2rad(0) # negative for downward pitch camera_height = 1.0 # meters - + estimator = PersonDistanceEstimator(K, camera_pitch, camera_height) object_estimator = ObjectDistanceEstimator(K, camera_pitch, camera_height) - + # Example detection bbox = (300, 100, 380, 400) # x1, y1, x2, y2 - + depth, angle = estimator.estimate_distance_angle(bbox) # Estimate object size based on the known distance object_size = object_estimator.estimate_object_size(bbox, depth) depth_obj, angle_obj = object_estimator.estimate_distance_angle(bbox) - + print(f"Estimated person depth: {depth:.2f} m") print(f"Estimated person angle: {np.rad2deg(angle):.1f}°") print(f"Estimated object depth: {depth_obj:.2f} m") @@ -252,15 +259,15 @@ def estimate_distance_angle(self, bbox: tuple): height = y_max - y_min center_x = (x_min + x_max) // 2 center_y = (y_min + y_max) // 2 - + new_width = max(width - 20, 2) # Ensure width is at least 2 pixels new_height = max(height - 20, 2) # Ensure height is at least 2 pixels - + x_min = center_x - new_width // 2 x_max = center_x + new_width // 2 y_min = center_y - new_height // 2 y_max = center_y + new_height // 2 - + bbox = (x_min, y_min, x_max, y_max) # Re-estimate distance and angle with the new bbox @@ -270,4 +277,4 @@ def estimate_distance_angle(self, bbox: tuple): print(f"New estimated person depth: {depth:.2f} m") print(f"New estimated person angle: {np.rad2deg(angle):.1f}°") print(f"New estimated object depth: {depth_obj:.2f} m") - print(f"New estimated object angle: {np.rad2deg(angle_obj):.1f}°") \ No newline at end of file + print(f"New estimated object angle: {np.rad2deg(angle_obj):.1f}°") diff --git a/dimos/perception/detection2d/__init__.py b/dimos/perception/detection2d/__init__.py index 265f6982d9..a43c5da6ce 100644 --- a/dimos/perception/detection2d/__init__.py +++ b/dimos/perception/detection2d/__init__.py @@ -1,2 +1,2 @@ from .utils import * -from .yolo_2d_det import * \ No newline at end of file +from .yolo_2d_det import * diff --git a/dimos/perception/detection2d/detic_2d_det.py b/dimos/perception/detection2d/detic_2d_det.py index c320438325..29ea48b896 100644 --- a/dimos/perception/detection2d/detic_2d_det.py +++ b/dimos/perception/detection2d/detic_2d_det.py @@ -1,133 +1,137 @@ -import cv2 import numpy as np import os -import torch import sys -from pathlib import Path # Add Detic to Python path -detic_path = os.path.join(os.path.dirname(__file__), '..', '..', 'models', 'Detic') +detic_path = os.path.join(os.path.dirname(__file__), "..", "..", "models", "Detic") if detic_path not in sys.path: sys.path.append(detic_path) - sys.path.append(os.path.join(detic_path, 'third_party/CenterNet2')) + sys.path.append(os.path.join(detic_path, "third_party/CenterNet2")) # PIL patch for compatibility import PIL.Image -if not hasattr(PIL.Image, 'LINEAR') and hasattr(PIL.Image, 'BILINEAR'): + +if not hasattr(PIL.Image, "LINEAR") and hasattr(PIL.Image, "BILINEAR"): PIL.Image.LINEAR = PIL.Image.BILINEAR # Detectron2 imports from detectron2.config import get_cfg -from detectron2.utils.visualizer import Visualizer from detectron2.data import MetadataCatalog + # Simple tracking implementation class SimpleTracker: """Simple IOU-based tracker implementation without external dependencies""" - + def __init__(self, iou_threshold=0.3, max_age=5): self.iou_threshold = iou_threshold self.max_age = max_age self.next_id = 1 self.tracks = {} # id -> {bbox, class_id, age, etc} - + def _calculate_iou(self, bbox1, bbox2): """Calculate IoU between two bboxes in format [x1,y1,x2,y2]""" x1 = max(bbox1[0], bbox2[0]) y1 = max(bbox1[1], bbox2[1]) x2 = min(bbox1[2], bbox2[2]) y2 = min(bbox1[3], bbox2[3]) - + if x2 < x1 or y2 < y1: return 0.0 - + intersection = (x2 - x1) * (y2 - y1) area1 = (bbox1[2] - bbox1[0]) * (bbox1[3] - bbox1[1]) area2 = (bbox2[2] - bbox2[0]) * (bbox2[3] - bbox2[1]) union = area1 + area2 - intersection - + return intersection / union if union > 0 else 0 - + def update(self, detections): """Update tracker with new detections - + Args: detections: List of [x1,y1,x2,y2,score,class_id] - + Returns: List of [track_id, bbox, score, class_id] """ if len(detections) == 0: # Age existing tracks for track_id in list(self.tracks.keys()): - self.tracks[track_id]['age'] += 1 + self.tracks[track_id]["age"] += 1 # Remove old tracks - if self.tracks[track_id]['age'] > self.max_age: + if self.tracks[track_id]["age"] > self.max_age: del self.tracks[track_id] return [] - + # Convert to numpy for easier handling if not isinstance(detections, np.ndarray): detections = np.array(detections) - + result = [] matched_indices = set() - + # Update existing tracks for track_id, track in list(self.tracks.items()): - track['age'] += 1 - - if track['age'] > self.max_age: + track["age"] += 1 + + if track["age"] > self.max_age: del self.tracks[track_id] continue - + # Find best matching detection for this track best_iou = self.iou_threshold best_idx = -1 - + for i, det in enumerate(detections): if i in matched_indices: continue - + # Check class match - if det[5] != track['class_id']: + if det[5] != track["class_id"]: continue - - iou = self._calculate_iou(track['bbox'], det[:4]) + + iou = self._calculate_iou(track["bbox"], det[:4]) if iou > best_iou: best_iou = iou best_idx = i - + # If we found a match, update the track if best_idx >= 0: - self.tracks[track_id]['bbox'] = detections[best_idx][:4] - self.tracks[track_id]['score'] = detections[best_idx][4] - self.tracks[track_id]['age'] = 0 + self.tracks[track_id]["bbox"] = detections[best_idx][:4] + self.tracks[track_id]["score"] = detections[best_idx][4] + self.tracks[track_id]["age"] = 0 matched_indices.add(best_idx) - + # Add to results - result.append([track_id, detections[best_idx][:4], - detections[best_idx][4], int(detections[best_idx][5])]) - + result.append( + [ + track_id, + detections[best_idx][:4], + detections[best_idx][4], + int(detections[best_idx][5]), + ] + ) + # Create new tracks for unmatched detections for i, det in enumerate(detections): if i in matched_indices: continue - + # Create new track new_id = self.next_id self.next_id += 1 - + self.tracks[new_id] = { - 'bbox': det[:4], - 'score': det[4], - 'class_id': int(det[5]), - 'age': 0 + "bbox": det[:4], + "score": det[4], + "class_id": int(det[5]), + "age": 0, } - + # Add to results result.append([new_id, det[:4], det[4], int(det[5])]) - + return result @@ -135,7 +139,7 @@ class Detic2DDetector: def __init__(self, model_path=None, device="cuda", vocabulary=None, threshold=0.5): """ Initialize the Detic detector with open vocabulary support. - + Args: model_path (str): Path to a custom Detic model weights (optional) device (str): Device to run inference on ('cuda' or 'cpu') @@ -144,82 +148,94 @@ def __init__(self, model_path=None, device="cuda", vocabulary=None, threshold=0. """ self.device = device self.threshold = threshold - + # Set up Detic paths - already added to sys.path at module level - + # Import Detic modules from centernet.config import add_centernet_config from detic.config import add_detic_config from detic.modeling.utils import reset_cls_test from detic.modeling.text.text_encoder import build_text_encoder - + # Keep reference to these functions for later use self.reset_cls_test = reset_cls_test self.build_text_encoder = build_text_encoder - + # Setup model configuration self.cfg = get_cfg() add_centernet_config(self.cfg) add_detic_config(self.cfg) - + # Use default Detic config - self.cfg.merge_from_file(os.path.join( - detic_path, - "configs/Detic_LCOCOI21k_CLIP_SwinB_896b32_4x_ft4x_max-size.yaml" - )) - + self.cfg.merge_from_file( + os.path.join( + detic_path, + "configs/Detic_LCOCOI21k_CLIP_SwinB_896b32_4x_ft4x_max-size.yaml", + ) + ) + # Set default weights if not provided if model_path is None: - self.cfg.MODEL.WEIGHTS = 'https://dl.fbaipublicfiles.com/detic/Detic_LCOCOI21k_CLIP_SwinB_896b32_4x_ft4x_max-size.pth' + self.cfg.MODEL.WEIGHTS = "https://dl.fbaipublicfiles.com/detic/Detic_LCOCOI21k_CLIP_SwinB_896b32_4x_ft4x_max-size.pth" else: self.cfg.MODEL.WEIGHTS = model_path - + # Set device if device == "cpu": - self.cfg.MODEL.DEVICE = 'cpu' - + self.cfg.MODEL.DEVICE = "cpu" + # Set detection threshold self.cfg.MODEL.ROI_HEADS.SCORE_THRESH_TEST = threshold - self.cfg.MODEL.ROI_BOX_HEAD.ZEROSHOT_WEIGHT_PATH = 'rand' + self.cfg.MODEL.ROI_BOX_HEAD.ZEROSHOT_WEIGHT_PATH = "rand" self.cfg.MODEL.ROI_HEADS.ONE_CLASS_PER_PROPOSAL = True - + # Built-in datasets for Detic - use absolute paths with detic_path self.builtin_datasets = { - 'lvis': { - 'metadata': 'lvis_v1_val', - 'classifier': os.path.join(detic_path, 'datasets/metadata/lvis_v1_clip_a+cname.npy') + "lvis": { + "metadata": "lvis_v1_val", + "classifier": os.path.join( + detic_path, "datasets/metadata/lvis_v1_clip_a+cname.npy" + ), }, - 'objects365': { - 'metadata': 'objects365_v2_val', - 'classifier': os.path.join(detic_path, 'datasets/metadata/o365_clip_a+cnamefix.npy') + "objects365": { + "metadata": "objects365_v2_val", + "classifier": os.path.join( + detic_path, "datasets/metadata/o365_clip_a+cnamefix.npy" + ), }, - 'openimages': { - 'metadata': 'oid_val_expanded', - 'classifier': os.path.join(detic_path, 'datasets/metadata/oid_clip_a+cname.npy') + "openimages": { + "metadata": "oid_val_expanded", + "classifier": os.path.join( + detic_path, "datasets/metadata/oid_clip_a+cname.npy" + ), + }, + "coco": { + "metadata": "coco_2017_val", + "classifier": os.path.join( + detic_path, "datasets/metadata/coco_clip_a+cname.npy" + ), }, - 'coco': { - 'metadata': 'coco_2017_val', - 'classifier': os.path.join(detic_path, 'datasets/metadata/coco_clip_a+cname.npy') - } } - + # Override config paths to use absolute paths - self.cfg.MODEL.ROI_BOX_HEAD.CAT_FREQ_PATH = os.path.join(detic_path, 'datasets/metadata/lvis_v1_train_cat_info.json') - + self.cfg.MODEL.ROI_BOX_HEAD.CAT_FREQ_PATH = os.path.join( + detic_path, "datasets/metadata/lvis_v1_train_cat_info.json" + ) + # Initialize model self.predictor = None - + # Setup with initial vocabulary - vocabulary = vocabulary or 'lvis' + vocabulary = vocabulary or "lvis" self.setup_vocabulary(vocabulary) - + # Initialize our simple tracker self.tracker = SimpleTracker(iou_threshold=0.5, max_age=5) - + def setup_vocabulary(self, vocabulary): """ Setup the model's vocabulary. - + Args: vocabulary: Either a string ('lvis', 'objects365', 'openimages', 'coco') or a list of class names for custom vocabulary. @@ -227,13 +243,14 @@ def setup_vocabulary(self, vocabulary): if self.predictor is None: # Initialize the model from detectron2.engine import DefaultPredictor + self.predictor = DefaultPredictor(self.cfg) - + if isinstance(vocabulary, str) and vocabulary in self.builtin_datasets: # Use built-in dataset dataset = vocabulary - metadata = MetadataCatalog.get(self.builtin_datasets[dataset]['metadata']) - classifier = self.builtin_datasets[dataset]['classifier'] + metadata = MetadataCatalog.get(self.builtin_datasets[dataset]["metadata"]) + classifier = self.builtin_datasets[dataset]["classifier"] num_classes = len(metadata.thing_classes) self.class_names = metadata.thing_classes else: @@ -241,37 +258,37 @@ def setup_vocabulary(self, vocabulary): if isinstance(vocabulary, str): # If it's a string but not a built-in dataset, treat as a file try: - with open(vocabulary, 'r') as f: + with open(vocabulary, "r") as f: class_names = [line.strip() for line in f if line.strip()] except: # Default to LVIS if there's an issue print(f"Error loading vocabulary from {vocabulary}, using LVIS") - return self.setup_vocabulary('lvis') + return self.setup_vocabulary("lvis") else: # Assume it's a list of class names class_names = vocabulary - + # Create classifier from text embeddings metadata = MetadataCatalog.get("__unused") metadata.thing_classes = class_names self.class_names = class_names - + # Generate CLIP embeddings for custom vocabulary classifier = self._get_clip_embeddings(class_names) num_classes = len(class_names) - + # Reset model with new vocabulary self.reset_cls_test(self.predictor.model, classifier, num_classes) return self.class_names - - def _get_clip_embeddings(self, vocabulary, prompt='a '): + + def _get_clip_embeddings(self, vocabulary, prompt="a "): """ Generate CLIP embeddings for a vocabulary list. - + Args: vocabulary (list): List of class names prompt (str): Prompt prefix to use for CLIP - + Returns: torch.Tensor: Tensor of embeddings """ @@ -280,14 +297,14 @@ def _get_clip_embeddings(self, vocabulary, prompt='a '): texts = [prompt + x for x in vocabulary] emb = text_encoder(texts).detach().permute(1, 0).contiguous().cpu() return emb - + def process_image(self, image): """ Process an image and return detection results. - + Args: image: Input image in BGR format (OpenCV) - + Returns: tuple: (bboxes, track_ids, class_ids, confidences, names) - bboxes: list of [x1, y1, x2, y2] coordinates @@ -299,57 +316,67 @@ def process_image(self, image): # Run inference with Detic outputs = self.predictor(image) instances = outputs["instances"].to("cpu") - + # Extract bounding boxes, classes, and scores if len(instances) == 0: return [], [], [], [], [] - + boxes = instances.pred_boxes.tensor.numpy() class_ids = instances.pred_classes.numpy() scores = instances.scores.numpy() - + # Convert boxes to [x1, y1, x2, y2] format bboxes = [] for box in boxes: x1, y1, x2, y2 = box.tolist() bboxes.append([x1, y1, x2, y2]) - + # Get class names names = [self.class_names[class_id] for class_id in class_ids] - + # Apply tracking detections = [] for i, bbox in enumerate(bboxes): if scores[i] >= self.threshold: # Format for tracker: [x1, y1, x2, y2, score, class_id] detections.append(bbox + [scores[i], class_ids[i]]) - + if not detections: return [], [], [], [], [] - + # Update tracker with detections track_results = self.tracker.update(detections) - + # Process tracking results track_ids = [] tracked_bboxes = [] tracked_class_ids = [] tracked_scores = [] tracked_names = [] - + for track_id, bbox, score, class_id in track_results: track_ids.append(int(track_id)) - tracked_bboxes.append(bbox.tolist() if isinstance(bbox, np.ndarray) else bbox) + tracked_bboxes.append( + bbox.tolist() if isinstance(bbox, np.ndarray) else bbox + ) tracked_class_ids.append(int(class_id)) tracked_scores.append(score) tracked_names.append(self.class_names[int(class_id)]) - - return tracked_bboxes, track_ids, tracked_class_ids, tracked_scores, tracked_names - - def visualize_results(self, image, bboxes, track_ids, class_ids, confidences, names): + + return ( + tracked_bboxes, + track_ids, + tracked_class_ids, + tracked_scores, + tracked_names, + ) + + def visualize_results( + self, image, bboxes, track_ids, class_ids, confidences, names + ): """ Generate visualization of detection results. - + Args: image: Original input image bboxes: List of bounding boxes @@ -357,15 +384,15 @@ def visualize_results(self, image, bboxes, track_ids, class_ids, confidences, na class_ids: List of class indices confidences: List of detection confidences names: List of class names - + Returns: Image with visualized detections """ from dimos.perception.detection2d.utils import plot_results + return plot_results(image, bboxes, track_ids, class_ids, confidences, names) - + def cleanup(self): """Clean up resources.""" # Nothing specific to clean up for Detic pass - diff --git a/dimos/perception/detection2d/utils.py b/dimos/perception/detection2d/utils.py index ffe560b777..b9e251bd6b 100644 --- a/dimos/perception/detection2d/utils.py +++ b/dimos/perception/detection2d/utils.py @@ -3,11 +3,20 @@ from dimos.utils.ros_utils import distance_angle_to_goal_xy -def filter_detections(bboxes, track_ids, class_ids, confidences, names, - class_filter=None, name_filter=None, track_id_filter=None): + +def filter_detections( + bboxes, + track_ids, + class_ids, + confidences, + names, + class_filter=None, + name_filter=None, + track_id_filter=None, +): """ Filter detection results based on class IDs, names, and/or tracking IDs. - + Args: bboxes: List of bounding boxes [x1, y1, x2, y2] track_ids: List of tracking IDs @@ -17,9 +26,9 @@ def filter_detections(bboxes, track_ids, class_ids, confidences, names, class_filter: List/set of class IDs to keep, or None to keep all name_filter: List/set of class names to keep, or None to keep all track_id_filter: List/set of track IDs to keep, or None to keep all - + Returns: - tuple: (filtered_bboxes, filtered_track_ids, filtered_class_ids, + tuple: (filtered_bboxes, filtered_track_ids, filtered_class_ids, filtered_confidences, filtered_names) """ # Convert filters to sets for efficient lookup @@ -29,30 +38,30 @@ def filter_detections(bboxes, track_ids, class_ids, confidences, names, name_filter = set(name_filter) if track_id_filter is not None: track_id_filter = set(track_id_filter) - + # Initialize lists for filtered results filtered_bboxes = [] filtered_track_ids = [] filtered_class_ids = [] filtered_confidences = [] filtered_names = [] - + # Filter detections for bbox, track_id, class_id, conf, name in zip( - bboxes, track_ids, class_ids, confidences, names): - + bboxes, track_ids, class_ids, confidences, names + ): # Check if detection passes all specified filters keep = True - + if class_filter is not None: keep = keep and (class_id in class_filter) - + if name_filter is not None: keep = keep and (name in name_filter) - + if track_id_filter is not None: keep = keep and (track_id in track_id_filter) - + # If detection passes all filters, add it to results if keep: filtered_bboxes.append(bbox) @@ -60,20 +69,28 @@ def filter_detections(bboxes, track_ids, class_ids, confidences, names, filtered_class_ids.append(class_id) filtered_confidences.append(conf) filtered_names.append(name) - - return (filtered_bboxes, filtered_track_ids, filtered_class_ids, - filtered_confidences, filtered_names) -def extract_detection_results(result, class_filter=None, name_filter=None, track_id_filter=None): + return ( + filtered_bboxes, + filtered_track_ids, + filtered_class_ids, + filtered_confidences, + filtered_names, + ) + + +def extract_detection_results( + result, class_filter=None, name_filter=None, track_id_filter=None +): """ Extract and optionally filter detection information from a YOLO result object. - + Args: result: Ultralytics result object class_filter: List/set of class IDs to keep, or None to keep all name_filter: List/set of class names to keep, or None to keep all track_id_filter: List/set of track IDs to keep, or None to keep all - + Returns: tuple: (bboxes, track_ids, class_ids, confidences, names) - bboxes: list of [x1, y1, x2, y2] coordinates @@ -94,19 +111,19 @@ def extract_detection_results(result, class_filter=None, name_filter=None, track for box in result.boxes: # Extract bounding box coordinates x1, y1, x2, y2 = box.xyxy[0].tolist() - + # Extract tracking ID if available track_id = -1 - if hasattr(box, 'id') and box.id is not None: + if hasattr(box, "id") and box.id is not None: track_id = int(box.id[0].item()) - + # Extract class information cls_idx = int(box.cls[0]) name = result.names[cls_idx] - + # Extract confidence conf = float(box.conf[0]) - + # Check filters before adding to results keep = True if class_filter is not None: @@ -115,7 +132,7 @@ def extract_detection_results(result, class_filter=None, name_filter=None, track keep = keep and (name in name_filter) if track_id_filter is not None: keep = keep and (track_id in track_id_filter) - + if keep: bboxes.append([x1, y1, x2, y2]) track_ids.append(track_id) @@ -129,7 +146,7 @@ def extract_detection_results(result, class_filter=None, name_filter=None, track def plot_results(image, bboxes, track_ids, class_ids, confidences, names, alpha=0.5): """ Draw bounding boxes and labels on the image. - + Args: image: Original input image bboxes: List of bounding boxes [x1, y1, x2, y2] @@ -138,7 +155,7 @@ def plot_results(image, bboxes, track_ids, class_ids, confidences, names, alpha= confidences: List of detection confidences names: List of class names alpha: Transparency of the overlay - + Returns: Image with visualized detections """ @@ -152,7 +169,7 @@ def plot_results(image, bboxes, track_ids, class_ids, confidences, names, alpha= np.random.seed(hash(name) % 100000) color = np.random.randint(0, 255, (3,), dtype=np.uint8) np.random.seed(None) - + # Draw bounding box x1, y1, x2, y2 = map(int, bbox) cv2.rectangle(vis_img, (x1, y1), (x2, y2), color.tolist(), 2) @@ -164,45 +181,37 @@ def plot_results(image, bboxes, track_ids, class_ids, confidences, names, alpha= label = f"{name} {conf:.2f}" # Calculate text size for background rectangle - (text_w, text_h), _ = cv2.getTextSize( - label, - cv2.FONT_HERSHEY_SIMPLEX, - 0.5, - 1 - ) + (text_w, text_h), _ = cv2.getTextSize(label, cv2.FONT_HERSHEY_SIMPLEX, 0.5, 1) # Draw background rectangle for text cv2.rectangle( - vis_img, - (x1, y1-text_h-8), - (x1+text_w+4, y1), - color.tolist(), - -1 + vis_img, (x1, y1 - text_h - 8), (x1 + text_w + 4, y1), color.tolist(), -1 ) # Draw text with white color for better visibility cv2.putText( vis_img, label, - (x1+2, y1-5), + (x1 + 2, y1 - 5), cv2.FONT_HERSHEY_SIMPLEX, 0.5, (255, 255, 255), - 1 + 1, ) return vis_img + def calculate_depth_from_bbox(depth_model, frame, bbox): """ Calculate the average depth of an object within a bounding box. Uses the 25th to 75th percentile range to filter outliers. - + Args: depth_model: Depth model frame: The image frame bbox: Bounding box in format [x1, y1, x2, y2] - + Returns: float: Average depth in meters, or None if depth estimation fails """ @@ -210,117 +219,124 @@ def calculate_depth_from_bbox(depth_model, frame, bbox): # Get depth map for the entire frame depth_map = depth_model.infer_depth(frame) depth_map = np.array(depth_map) - + # Extract region of interest from the depth map x1, y1, x2, y2 = map(int, bbox) roi_depth = depth_map[y1:y2, x1:x2] - + if roi_depth.size == 0: return None - + # Calculate 25th and 75th percentile to filter outliers p25 = np.percentile(roi_depth, 25) p75 = np.percentile(roi_depth, 75) - + # Filter depth values within this range filtered_depth = roi_depth[(roi_depth >= p25) & (roi_depth <= p75)] - + # Calculate average depth (convert to meters) if filtered_depth.size > 0: return np.mean(filtered_depth) / 1000.0 # Convert mm to meters - + return None except Exception as e: print(f"Error calculating depth from bbox: {e}") return None + def calculate_distance_angle_from_bbox(bbox, depth, camera_intrinsics): """ Calculate distance and angle to object center based on bbox and depth. - + Args: bbox: Bounding box [x1, y1, x2, y2] depth: Depth value in meters camera_intrinsics: List [fx, fy, cx, cy] with camera parameters - + Returns: tuple: (distance, angle) in meters and radians """ if camera_intrinsics is None: raise ValueError("Camera intrinsics required for distance calculation") - + # Extract camera parameters fx, fy, cx, cy = camera_intrinsics - + # Calculate center of bounding box in pixels x1, y1, x2, y2 = bbox center_x = (x1 + x2) / 2 center_y = (y1 + y2) / 2 - + # Calculate normalized image coordinates x_norm = (center_x - cx) / fx - + # Calculate angle (positive to the right) angle = np.arctan(x_norm) - + # Calculate distance using depth and angle distance = depth / np.cos(angle) if np.cos(angle) != 0 else depth - + return distance, angle + def calculate_object_size_from_bbox(bbox, depth, camera_intrinsics): """ Estimate physical width and height of object in meters. - + Args: bbox: Bounding box [x1, y1, x2, y2] depth: Depth value in meters camera_intrinsics: List [fx, fy, cx, cy] with camera parameters - + Returns: tuple: (width, height) in meters """ if camera_intrinsics is None: return 0.0, 0.0 - + fx, fy, _, _ = camera_intrinsics - + # Calculate bbox dimensions in pixels x1, y1, x2, y2 = bbox width_px = x2 - x1 height_px = y2 - y1 - + # Convert to meters using similar triangles and depth width_m = (width_px * depth) / fx height_m = (height_px * depth) / fy - + return width_m, height_m + def calculate_position_rotation_from_bbox(bbox, depth, camera_intrinsics): """ - Calculate position (xyz) and rotation (roll, pitch, yaw) for an object + Calculate position (xyz) and rotation (roll, pitch, yaw) for an object based on its bounding box and depth. - + Args: bbox: Bounding box [x1, y1, x2, y2] depth: Depth value in meters camera_intrinsics: List [fx, fy, cx, cy] with camera parameters - + Returns: Tuple of (position_dict, rotation_dict) """ # Calculate distance and angle to object distance, angle = calculate_distance_angle_from_bbox(bbox, depth, camera_intrinsics) - + # Convert distance and angle to x,y coordinates (in camera frame) # Note: We negate the angle since positive angle means object is to the right, # but we want positive y to be to the left in the standard coordinate system x, y = distance_angle_to_goal_xy(distance, -angle) - + # For now, rotation is only in yaw (around z-axis) # We can use the negative of the angle as an estimate of the object's yaw # assuming objects tend to face the camera position = {"x": x, "y": y, "z": 0.0} # z=0 assuming objects are on the ground - rotation = {"roll": 0.0, "pitch": 0.0, "yaw": -angle} # Only yaw is meaningful with monocular camera - - return position, rotation \ No newline at end of file + rotation = { + "roll": 0.0, + "pitch": 0.0, + "yaw": -angle, + } # Only yaw is meaningful with monocular camera + + return position, rotation diff --git a/dimos/perception/detection2d/yolo_2d_det.py b/dimos/perception/detection2d/yolo_2d_det.py index 0c78e56950..54f8173722 100644 --- a/dimos/perception/detection2d/yolo_2d_det.py +++ b/dimos/perception/detection2d/yolo_2d_det.py @@ -1,7 +1,10 @@ import cv2 -import numpy as np from ultralytics import YOLO -from dimos.perception.detection2d.utils import extract_detection_results, plot_results, filter_detections +from dimos.perception.detection2d.utils import ( + extract_detection_results, + plot_results, + filter_detections, +) import os @@ -9,7 +12,7 @@ class Yolo2DDetector: def __init__(self, model_path="models/yolo11n.engine", device="cuda"): """ Initialize the YOLO detector. - + Args: model_path (str): Path to the YOLO model weights device (str): Device to run inference on ('cuda' or 'cpu') @@ -18,15 +21,15 @@ def __init__(self, model_path="models/yolo11n.engine", device="cuda"): self.model = YOLO(model_path) module_dir = os.path.dirname(__file__) - self.tracker_config = os.path.join(module_dir, 'config', 'custom_tracker.yaml') + self.tracker_config = os.path.join(module_dir, "config", "custom_tracker.yaml") def process_image(self, image): """ Process an image and return detection results. - + Args: image: Input image in BGR format (OpenCV) - + Returns: tuple: (bboxes, track_ids, class_ids, confidences, names) - bboxes: list of [x1, y1, x2, y2] coordinates @@ -42,20 +45,24 @@ def process_image(self, image): iou=0.6, persist=True, verbose=False, - tracker=self.tracker_config + tracker=self.tracker_config, ) if len(results) > 0: # Extract detection results - bboxes, track_ids, class_ids, confidences, names = extract_detection_results(results[0]) + bboxes, track_ids, class_ids, confidences, names = ( + extract_detection_results(results[0]) + ) return bboxes, track_ids, class_ids, confidences, names - + return [], [], [], [], [] - def visualize_results(self, image, bboxes, track_ids, class_ids, confidences, names): + def visualize_results( + self, image, bboxes, track_ids, class_ids, confidences, names + ): """ Generate visualization of detection results. - + Args: image: Original input image bboxes: List of bounding boxes @@ -63,7 +70,7 @@ def visualize_results(self, image, bboxes, track_ids, class_ids, confidences, na class_ids: List of class indices confidences: List of detection confidences names: List of class names - + Returns: Image with visualized detections """ @@ -74,7 +81,7 @@ def main(): """Example usage of the Yolo2DDetector class.""" # Initialize video capture cap = cv2.VideoCapture(0) - + # Initialize detector detector = Yolo2DDetector() @@ -87,31 +94,32 @@ def main(): break # Process frame - bboxes, track_ids, class_ids, confidences, names = detector.process_image(frame) - + bboxes, track_ids, class_ids, confidences, names = detector.process_image( + frame + ) + # Apply person filtering if enabled if enable_person_filter and len(bboxes) > 0: # Person is class_id 0 in COCO dataset bboxes, track_ids, class_ids, confidences, names = filter_detections( - bboxes, track_ids, class_ids, confidences, names, + bboxes, + track_ids, + class_ids, + confidences, + names, class_filter=[0], # 0 is the class_id for person - name_filter=['person'] + name_filter=["person"], ) - + # Visualize results if len(bboxes) > 0: frame = detector.visualize_results( - frame, - bboxes, - track_ids, - class_ids, - confidences, - names + frame, bboxes, track_ids, class_ids, confidences, names ) # Display results cv2.imshow("YOLO Detection", frame) - if cv2.waitKey(1) & 0xFF == ord('q'): + if cv2.waitKey(1) & 0xFF == ord("q"): break finally: @@ -120,4 +128,4 @@ def main(): if __name__ == "__main__": - main() \ No newline at end of file + main() diff --git a/dimos/perception/object_detection_stream.py b/dimos/perception/object_detection_stream.py index 0e4c4783b0..63ebb80371 100644 --- a/dimos/perception/object_detection_stream.py +++ b/dimos/perception/object_detection_stream.py @@ -9,11 +9,12 @@ from dimos.perception.detection2d.utils import ( calculate_depth_from_bbox, calculate_object_size_from_bbox, - calculate_position_rotation_from_bbox + calculate_position_rotation_from_bbox, ) from dimos.types.vector import Vector from typing import Optional, Union + class ObjectDetectionStream: """ A stream processor that: @@ -21,10 +22,10 @@ class ObjectDetectionStream: 2. Estimates depth using Metric3D 3. Calculates 3D position and dimensions using camera intrinsics 4. Transforms coordinates to map frame - + Provides a stream of structured object data with position and rotation information. """ - + def __init__( self, camera_intrinsics=None, # [fx, fy, cx, cy] @@ -34,11 +35,11 @@ def __init__( class_filter=None, # Optional list of class names to filter (e.g., ["person", "car"]) transform_to_map=None, # Optional function to transform coordinates to map frame detector: Optional[Union[Detic2DDetector, Yolo2DDetector]] = None, - video_stream: Observable = None + video_stream: Observable = None, ): """ Initialize the ObjectDetectionStream. - + Args: camera_intrinsics: List [fx, fy, cx, cy] with camera parameters device: Device to run inference on ("cuda" or "cpu") @@ -53,86 +54,99 @@ def __init__( self.class_filter = class_filter self.transform_to_map = transform_to_map # Initialize object detector - self.detector = detector or Detic2DDetector(vocabulary=None, threshold=min_confidence) - + self.detector = detector or Detic2DDetector( + vocabulary=None, threshold=min_confidence + ) + # Initialize depth estimation model self.depth_model = Metric3D(gt_depth_scale) - + # Set up camera intrinsics self.camera_intrinsics = camera_intrinsics if camera_intrinsics is not None: self.depth_model.update_intrinsic(camera_intrinsics) - + # Create 3x3 camera matrix for calculations fx, fy, cx, cy = camera_intrinsics - self.camera_matrix = np.array([ - [fx, 0, cx], - [0, fy, cy], - [0, 0, 1] - ], dtype=np.float32) + self.camera_matrix = np.array( + [[fx, 0, cx], [0, fy, cy], [0, 0, 1]], dtype=np.float32 + ) else: raise ValueError("camera_intrinsics must be provided") - + # If video_stream is provided, create and store the stream immediately self.stream = None if video_stream is not None: self.stream = self.create_stream(video_stream) - + def create_stream(self, video_stream: Observable) -> Observable: """ Create an Observable stream of object data from a video stream. - + Args: video_stream: Observable that emits video frames - + Returns: - Observable that emits dictionaries containing object data + Observable that emits dictionaries containing object data with position and rotation information """ + def process_frame(frame): # Detect objects - bboxes, track_ids, class_ids, confidences, names = self.detector.process_image(frame) - + bboxes, track_ids, class_ids, confidences, names = ( + self.detector.process_image(frame) + ) + # Create visualization viz_frame = frame.copy() - + # Process detections objects = [] - + for i, bbox in enumerate(bboxes): # Skip if confidence is too low if i < len(confidences) and confidences[i] < self.min_confidence: continue - + # Skip if class filter is active and class not in filter class_name = names[i] if i < len(names) else None if self.class_filter and class_name not in self.class_filter: continue - + # Get depth for this object depth = calculate_depth_from_bbox(self.depth_model, frame, bbox) if depth is None: # Skip objects with invalid depth continue - + # Calculate object position and rotation - position, rotation = calculate_position_rotation_from_bbox(bbox, depth, self.camera_intrinsics) - + position, rotation = calculate_position_rotation_from_bbox( + bbox, depth, self.camera_intrinsics + ) + # Get object dimensions - width, height = calculate_object_size_from_bbox(bbox, depth, self.camera_intrinsics) - + width, height = calculate_object_size_from_bbox( + bbox, depth, self.camera_intrinsics + ) + # Transform to map frame if a transform function is provided try: if self.transform_to_map: - position = Vector([position['x'], position['y'], position['z']]) - rotation = Vector([rotation['roll'], rotation['pitch'], rotation['yaw']]) - position, rotation = self.transform_to_map(position, rotation, source_frame="base_link") + position = Vector([position["x"], position["y"], position["z"]]) + rotation = Vector( + [rotation["roll"], rotation["pitch"], rotation["yaw"]] + ) + position, rotation = self.transform_to_map( + position, rotation, source_frame="base_link" + ) position = dict(x=position.x, y=position.y, z=position.z) - rotation = dict(roll=rotation.x, pitch=rotation.y, yaw=rotation.z) + rotation = dict( + roll=rotation.x, pitch=rotation.y, yaw=rotation.z + ) except Exception as e: print(f"Error transforming to map frame: {e}") position, rotation = position, rotation - + # Create object data dictionary object_data = { "object_id": track_ids[i] if i < len(track_ids) else -1, @@ -143,102 +157,122 @@ def process_frame(frame): "label": class_name, "position": position, "rotation": rotation, - "size": { - "width": width, - "height": height - } + "size": {"width": width, "height": height}, } - + objects.append(object_data) - + # Add visualization x1, y1, x2, y2 = map(int, bbox) color = (0, 255, 0) # Green for detected objects - + # Draw bounding box cv2.rectangle(viz_frame, (x1, y1), (x2, y2), color, 2) - + # Add text for class and position text = f"{class_name}: {depth:.2f}m" pos_text = f"Pos: ({position['x']:.2f}, {position['y']:.2f})" - + # Draw text background text_size = cv2.getTextSize(text, cv2.FONT_HERSHEY_SIMPLEX, 0.5, 2)[0] - cv2.rectangle(viz_frame, (x1, y1 - text_size[1] - 5), (x1 + text_size[0], y1), (0, 0, 0), -1) - + cv2.rectangle( + viz_frame, + (x1, y1 - text_size[1] - 5), + (x1 + text_size[0], y1), + (0, 0, 0), + -1, + ) + # Draw text - cv2.putText(viz_frame, text, (x1, y1 - 5), cv2.FONT_HERSHEY_SIMPLEX, 0.5, (255, 255, 255), 2) - + cv2.putText( + viz_frame, + text, + (x1, y1 - 5), + cv2.FONT_HERSHEY_SIMPLEX, + 0.5, + (255, 255, 255), + 2, + ) + # Position text below - cv2.putText(viz_frame, pos_text, (x1, y1 + 15), cv2.FONT_HERSHEY_SIMPLEX, 0.5, (255, 255, 255), 2) - - return { - "frame": frame, - "viz_frame": viz_frame, - "objects": objects - } - self.stream = video_stream.pipe( - ops.map(process_frame) - ) + cv2.putText( + viz_frame, + pos_text, + (x1, y1 + 15), + cv2.FONT_HERSHEY_SIMPLEX, + 0.5, + (255, 255, 255), + 2, + ) + + return {"frame": frame, "viz_frame": viz_frame, "objects": objects} + + self.stream = video_stream.pipe(ops.map(process_frame)) return self.stream - + def get_stream(self): """ Returns the current detection stream if available. Creates a new one with the provided video_stream if not already created. - + Returns: Observable: The reactive stream of detection results """ if self.stream is None: - raise ValueError("Stream not initialized. Either provide a video_stream during initialization or call create_stream first.") + raise ValueError( + "Stream not initialized. Either provide a video_stream during initialization or call create_stream first." + ) return self.stream - + def get_formatted_stream(self): """ Returns a formatted stream of object detection data for better readability. This is especially useful for LLMs like Claude that need structured text input. - + Returns: Observable: A stream of formatted string representations of object data """ if self.stream is None: - raise ValueError("Stream not initialized. Either provide a video_stream during initialization or call create_stream first.") - + raise ValueError( + "Stream not initialized. Either provide a video_stream during initialization or call create_stream first." + ) + def format_detection_data(result): # Extract objects from result objects = result.get("objects", []) if not objects: return "No objects detected." - + formatted_data = "[DETECTED OBJECTS]\n" - + for i, obj in enumerate(objects): pos = obj["position"] rot = obj["rotation"] size = obj["size"] bbox = obj["bbox"] - + # Format each object with a multiline f-string for better readability - bbox_str = f"[{int(bbox[0])}, {int(bbox[1])}, {int(bbox[2])}, {int(bbox[3])}]" - formatted_data += f"Object {i+1}: {obj['label']}\n"\ - f" ID: {obj['object_id']}\n"\ - f" Confidence: {obj['confidence']:.2f}\n"\ - f" Position: x={pos['x']:.2f}m, y={pos['y']:.2f}m, z={pos['z']:.2f}m\n"\ - f" Rotation: yaw={rot['yaw']:.2f} rad\n"\ - f" Size: width={size['width']:.2f}m, height={size['height']:.2f}m\n"\ - f" Depth: {obj['depth']:.2f}m\n"\ - f" Bounding box: {bbox_str}\n"\ - "----------------------------------\n" - + bbox_str = ( + f"[{int(bbox[0])}, {int(bbox[1])}, {int(bbox[2])}, {int(bbox[3])}]" + ) + formatted_data += ( + f"Object {i + 1}: {obj['label']}\n" + f" ID: {obj['object_id']}\n" + f" Confidence: {obj['confidence']:.2f}\n" + f" Position: x={pos['x']:.2f}m, y={pos['y']:.2f}m, z={pos['z']:.2f}m\n" + f" Rotation: yaw={rot['yaw']:.2f} rad\n" + f" Size: width={size['width']:.2f}m, height={size['height']:.2f}m\n" + f" Depth: {obj['depth']:.2f}m\n" + f" Bounding box: {bbox_str}\n" + "----------------------------------\n" + ) + return formatted_data - + # Return a new stream with the formatter applied - return self.stream.pipe( - ops.map(format_detection_data) - ) + return self.stream.pipe(ops.map(format_detection_data)) def cleanup(self): """Clean up resources.""" diff --git a/dimos/perception/object_tracker.py b/dimos/perception/object_tracker.py index 578208d148..c1ea117e47 100644 --- a/dimos/perception/object_tracker.py +++ b/dimos/perception/object_tracker.py @@ -5,12 +5,21 @@ from dimos.perception.common.ibvs import ObjectDistanceEstimator from dimos.models.depth.metric3d import Metric3D from dimos.perception.detection2d.utils import calculate_depth_from_bbox + + class ObjectTrackingStream: - def __init__(self, camera_intrinsics=None, camera_pitch=0.0, camera_height=1.0, - reid_threshold=5, reid_fail_tolerance=10, gt_depth_scale=1000.0): + def __init__( + self, + camera_intrinsics=None, + camera_pitch=0.0, + camera_height=1.0, + reid_threshold=5, + reid_fail_tolerance=10, + gt_depth_scale=1000.0, + ): """ Initialize an object tracking stream using OpenCV's CSRT tracker with ORB re-ID. - + Args: camera_intrinsics: List in format [fx, fy, cx, cy] where: - fx: Focal length in x direction (pixels) @@ -20,67 +29,63 @@ def __init__(self, camera_intrinsics=None, camera_pitch=0.0, camera_height=1.0, camera_pitch: Camera pitch angle in radians (positive is up) camera_height: Height of the camera from the ground in meters reid_threshold: Minimum good feature matches needed to confirm re-ID. - reid_fail_tolerance: Number of consecutive frames Re-ID can fail before + reid_fail_tolerance: Number of consecutive frames Re-ID can fail before tracking is stopped. gt_depth_scale: Ground truth depth scale factor for Metric3D model """ self.tracker = None - self.tracking_bbox = None # Stores (x, y, w, h) for tracker initialization + self.tracking_bbox = None # Stores (x, y, w, h) for tracker initialization self.tracking_initialized = False self.orb = cv2.ORB_create() self.bf = cv2.BFMatcher(cv2.NORM_HAMMING, crossCheck=False) - self.original_des = None # Store original ORB descriptors + self.original_des = None # Store original ORB descriptors self.reid_threshold = reid_threshold self.reid_fail_tolerance = reid_fail_tolerance - self.reid_fail_count = 0 # Counter for consecutive re-id failures - + self.reid_fail_count = 0 # Counter for consecutive re-id failures + # Initialize distance estimator if camera parameters are provided self.distance_estimator = None if camera_intrinsics is not None: # Convert [fx, fy, cx, cy] to 3x3 camera matrix fx, fy, cx, cy = camera_intrinsics - K = np.array([ - [fx, 0, cx], - [0, fy, cy], - [0, 0, 1] - ], dtype=np.float32) - + K = np.array([[fx, 0, cx], [0, fy, cy], [0, 0, 1]], dtype=np.float32) + self.distance_estimator = ObjectDistanceEstimator( - K=K, - camera_pitch=camera_pitch, - camera_height=camera_height + K=K, camera_pitch=camera_pitch, camera_height=camera_height ) - + # Initialize depth model self.depth_model = Metric3D(gt_depth_scale) if camera_intrinsics is not None: self.depth_model.update_intrinsic(camera_intrinsics) - + def track(self, bbox, frame=None, distance=None, size=None): """ Set the initial bounding box for tracking. Features are extracted later. - + Args: bbox: Bounding box in format [x1, y1, x2, y2] frame: Optional - Current frame for depth estimation and feature extraction distance: Optional - Known distance to object (meters) size: Optional - Known size of object (meters) - + Returns: bool: True if intention to track is set (bbox is valid) """ x1, y1, x2, y2 = map(int, bbox) w, h = x2 - x1, y2 - y1 if w <= 0 or h <= 0: - print(f"Warning: Invalid initial bbox provided: {bbox}. Tracking not started.") - self.stop_track() # Ensure clean state - return False - - self.tracking_bbox = (x1, y1, w, h) # Store in (x, y, w, h) format + print( + f"Warning: Invalid initial bbox provided: {bbox}. Tracking not started." + ) + self.stop_track() # Ensure clean state + return False + + self.tracking_bbox = (x1, y1, w, h) # Store in (x, y, w, h) format self.tracker = cv2.legacy.TrackerCSRT_create() - self.tracking_initialized = False # Reset flag - self.original_des = None # Clear previous descriptors - self.reid_fail_count = 0 # Reset counter on new track + self.tracking_initialized = False # Reset flag + self.original_des = None # Clear previous descriptors + self.reid_fail_count = 0 # Reset counter on new track print(f"Tracking target set with bbox: {self.tracking_bbox}") # Calculate depth only if distance and size not provided @@ -91,22 +96,26 @@ def track(self, bbox, frame=None, distance=None, size=None): # Update distance estimator if needed if self.distance_estimator is not None: - if size is not None: self.distance_estimator.set_estimated_object_size(size) - elif distance is not None: self.distance_estimator.estimate_object_size(bbox, distance) - elif depth_estimate is not None: self.distance_estimator.estimate_object_size(bbox, depth_estimate) - else: print("No distance or size provided. Cannot estimate object size.") + if size is not None: + self.distance_estimator.set_estimated_object_size(size) + elif distance is not None: + self.distance_estimator.estimate_object_size(bbox, distance) + elif depth_estimate is not None: + self.distance_estimator.estimate_object_size(bbox, depth_estimate) + else: + print("No distance or size provided. Cannot estimate object size.") + + return True # Indicate intention to track is set - return True # Indicate intention to track is set - def calculate_depth_from_bbox(self, frame, bbox): """ Calculate the average depth of an object within a bounding box. Uses the 25th to 75th percentile range to filter outliers. - + Args: frame: The image frame bbox: Bounding box in format [x1, y1, x2, y2] - + Returns: float: Average depth in meters, or None if depth estimation fails """ @@ -114,39 +123,42 @@ def calculate_depth_from_bbox(self, frame, bbox): # Get depth map for the entire frame depth_map = self.depth_model.infer_depth(frame) depth_map = np.array(depth_map) - + # Extract region of interest from the depth map x1, y1, x2, y2 = map(int, bbox) roi_depth = depth_map[y1:y2, x1:x2] - + if roi_depth.size == 0: return None - + # Calculate 25th and 75th percentile to filter outliers p25 = np.percentile(roi_depth, 25) p75 = np.percentile(roi_depth, 75) - + # Filter depth values within this range filtered_depth = roi_depth[(roi_depth >= p25) & (roi_depth <= p75)] - + # Calculate average depth (convert to meters) if filtered_depth.size > 0: return np.mean(filtered_depth) / 1000.0 # Convert mm to meters - + return None except Exception as e: print(f"Error calculating depth from bbox: {e}") return None - + def reid(self, frame, current_bbox) -> bool: """Check if features in current_bbox match stored original features.""" - if self.original_des is None: return True # Cannot re-id if no original features + if self.original_des is None: + return True # Cannot re-id if no original features x1, y1, x2, y2 = map(int, current_bbox) roi = frame[y1:y2, x1:x2] - if roi.size == 0: return False # Empty ROI cannot match + if roi.size == 0: + return False # Empty ROI cannot match _, des_current = self.orb.detectAndCompute(roi, None) - if des_current is None or len(des_current) < 2: return False # Need at least 2 descriptors for knnMatch + if des_current is None or len(des_current) < 2: + return False # Need at least 2 descriptors for knnMatch # Handle case where original_des has only 1 descriptor (cannot use knnMatch with k=2) if len(self.original_des) < 2: @@ -161,7 +173,7 @@ def reid(self, frame, current_bbox) -> bool: m, n = match_pair if m.distance < 0.75 * n.distance: good_matches += 1 - + # print(f"ReID: Good Matches={good_matches}, Threshold={self.reid_threshold}") # Debug return good_matches >= self.reid_threshold @@ -169,7 +181,7 @@ def stop_track(self): """ Stop tracking the current object. This resets the tracker and all tracking state. - + Returns: bool: True if tracking was successfully stopped """ @@ -177,126 +189,169 @@ def stop_track(self): self.tracking_bbox = None self.tracking_initialized = False self.original_des = None - self.reid_fail_count = 0 # Reset counter + self.reid_fail_count = 0 # Reset counter return True - + def create_stream(self, video_stream: Observable) -> Observable: """ Create an Observable stream of object tracking results from a video stream. - + Args: video_stream: Observable that emits video frames - + Returns: Observable that emits dictionaries containing tracking results and visualizations """ + def process_frame(frame): viz_frame = frame.copy() - tracker_succeeded = False # Success from tracker.update() - reid_confirmed_this_frame = False # Result of reid() call for this frame - final_success = False # Overall success considering re-id tolerance + tracker_succeeded = False # Success from tracker.update() + reid_confirmed_this_frame = False # Result of reid() call for this frame + final_success = False # Overall success considering re-id tolerance target_data = None - current_bbox_x1y1x2y2 = None # Store current bbox if tracking succeeds + current_bbox_x1y1x2y2 = None # Store current bbox if tracking succeeds if self.tracker is not None and self.tracking_bbox is not None: if not self.tracking_initialized: # Extract initial features and initialize tracker on first frame x_init, y_init, w_init, h_init = self.tracking_bbox - roi = frame[y_init:y_init+h_init, x_init:x_init+w_init] - + roi = frame[y_init : y_init + h_init, x_init : x_init + w_init] + if roi.size > 0: _, self.original_des = self.orb.detectAndCompute(roi, None) if self.original_des is None: - print("Warning: No ORB features found in initial ROI during stream processing.") + print( + "Warning: No ORB features found in initial ROI during stream processing." + ) else: - print(f"Initial ORB features extracted: {len(self.original_des)}") - + print( + f"Initial ORB features extracted: {len(self.original_des)}" + ) + # Initialize the tracker init_success = self.tracker.init(frame, self.tracking_bbox) if init_success: self.tracking_initialized = True tracker_succeeded = True - reid_confirmed_this_frame = True # Assume re-id true on init - current_bbox_x1y1x2y2 = [x_init, y_init, x_init + w_init, y_init + h_init] + reid_confirmed_this_frame = ( + True # Assume re-id true on init + ) + current_bbox_x1y1x2y2 = [ + x_init, + y_init, + x_init + w_init, + y_init + h_init, + ] print("Tracker initialized successfully.") else: print("Error: Tracker initialization failed in stream.") - self.stop_track() # Reset if init fails + self.stop_track() # Reset if init fails else: - print("Error: Empty ROI during tracker initialization in stream.") - self.stop_track() # Reset if ROI is bad - - else: # Tracker already initialized, perform update and re-id + print( + "Error: Empty ROI during tracker initialization in stream." + ) + self.stop_track() # Reset if ROI is bad + + else: # Tracker already initialized, perform update and re-id tracker_succeeded, bbox_cv = self.tracker.update(frame) if tracker_succeeded: x, y, w, h = map(int, bbox_cv) current_bbox_x1y1x2y2 = [x, y, x + w, y + h] # Perform re-ID check - reid_confirmed_this_frame = self.reid(frame, current_bbox_x1y1x2y2) + reid_confirmed_this_frame = self.reid( + frame, current_bbox_x1y1x2y2 + ) if reid_confirmed_this_frame: - self.reid_fail_count = 0 # Reset counter on success + self.reid_fail_count = 0 # Reset counter on success else: - self.reid_fail_count += 1 # Increment counter on failure - print(f"Re-ID failed ({self.reid_fail_count}/{self.reid_fail_tolerance}). Continuing track...") - - # --- Determine final success and stop tracking if needed --- + self.reid_fail_count += 1 # Increment counter on failure + print( + f"Re-ID failed ({self.reid_fail_count}/{self.reid_fail_tolerance}). Continuing track..." + ) + + # --- Determine final success and stop tracking if needed --- if tracker_succeeded: if self.reid_fail_count >= self.reid_fail_tolerance: - print(f"Re-ID failed consecutively {self.reid_fail_count} times. Target lost.") - final_success = False # Stop tracking + print( + f"Re-ID failed consecutively {self.reid_fail_count} times. Target lost." + ) + final_success = False # Stop tracking else: - final_success = True # Tracker ok, Re-ID ok or within tolerance - else: # Tracker update failed + final_success = True # Tracker ok, Re-ID ok or within tolerance + else: # Tracker update failed final_success = False if self.tracking_initialized: - print("Tracker update failed. Stopping track.") - - # --- Post-processing based on final_success --- + print("Tracker update failed. Stopping track.") + + # --- Post-processing based on final_success --- if final_success and current_bbox_x1y1x2y2 is not None: # Tracking is considered successful (tracker ok, re-id ok or within tolerance) x1, y1, x2, y2 = current_bbox_x1y1x2y2 # Visualize based on *this frame's* re-id result - viz_color = (0, 255, 0) if reid_confirmed_this_frame else (0, 165, 255) # Green if confirmed, Orange if failed but tolerated + viz_color = ( + (0, 255, 0) if reid_confirmed_this_frame else (0, 165, 255) + ) # Green if confirmed, Orange if failed but tolerated cv2.rectangle(viz_frame, (x1, y1), (x2, y2), viz_color, 2) - + target_data = { - "target_id": 0, "bbox": current_bbox_x1y1x2y2, "confidence": 1.0, - "reid_confirmed": reid_confirmed_this_frame # Report actual re-id status + "target_id": 0, + "bbox": current_bbox_x1y1x2y2, + "confidence": 1.0, + "reid_confirmed": reid_confirmed_this_frame, # Report actual re-id status } - + dist_text = "Object Tracking" - if not reid_confirmed_this_frame: dist_text += " (Re-ID Failed - Tolerated)" - - if self.distance_estimator is not None and self.distance_estimator.estimated_object_size is not None: - distance, angle = self.distance_estimator.estimate_distance_angle(current_bbox_x1y1x2y2) + if not reid_confirmed_this_frame: + dist_text += " (Re-ID Failed - Tolerated)" + + if ( + self.distance_estimator is not None + and self.distance_estimator.estimated_object_size is not None + ): + distance, angle = self.distance_estimator.estimate_distance_angle( + current_bbox_x1y1x2y2 + ) if distance is not None: target_data["distance"] = distance target_data["angle"] = angle - dist_text = f"Object: {distance:.2f}m, {np.rad2deg(angle):.1f} deg" - if not reid_confirmed_this_frame: dist_text += " (Re-ID Failed - Tolerated)" - - text_size = cv2.getTextSize(dist_text, cv2.FONT_HERSHEY_SIMPLEX, 0.5, 1)[0] + dist_text = ( + f"Object: {distance:.2f}m, {np.rad2deg(angle):.1f} deg" + ) + if not reid_confirmed_this_frame: + dist_text += " (Re-ID Failed - Tolerated)" + + text_size = cv2.getTextSize( + dist_text, cv2.FONT_HERSHEY_SIMPLEX, 0.5, 1 + )[0] label_bg_y = max(y1 - text_size[1] - 5, 0) - cv2.rectangle(viz_frame, (x1, label_bg_y), (x1 + text_size[0], y1), (0,0,0), -1) - cv2.putText(viz_frame, dist_text, (x1, y1 - 5), cv2.FONT_HERSHEY_SIMPLEX, 0.5, (255, 255, 255), 1) + cv2.rectangle( + viz_frame, (x1, label_bg_y), (x1 + text_size[0], y1), (0, 0, 0), -1 + ) + cv2.putText( + viz_frame, + dist_text, + (x1, y1 - 5), + cv2.FONT_HERSHEY_SIMPLEX, + 0.5, + (255, 255, 255), + 1, + ) + + elif self.tracking_initialized: # Tracking stopped this frame (either tracker fail or re-id tolerance exceeded) + self.stop_track() # Reset tracker state and counter - elif self.tracking_initialized: # Tracking stopped this frame (either tracker fail or re-id tolerance exceeded) - self.stop_track() # Reset tracker state and counter - # else: # Not tracking or initialization failed, do nothing, return empty result - # pass + # pass return { "frame": frame, "viz_frame": viz_frame, - "targets": [target_data] if target_data else [] + "targets": [target_data] if target_data else [], } - - return video_stream.pipe( - ops.map(process_frame) - ) - + + return video_stream.pipe(ops.map(process_frame)) + def cleanup(self): """Clean up resources.""" - self.stop_track() \ No newline at end of file + self.stop_track() diff --git a/dimos/perception/person_tracker.py b/dimos/perception/person_tracker.py index dd86e9d0ef..c1460b3b18 100644 --- a/dimos/perception/person_tracker.py +++ b/dimos/perception/person_tracker.py @@ -14,11 +14,11 @@ def __init__( device="cuda", camera_intrinsics=None, camera_pitch=0.0, - camera_height=1.0 + camera_height=1.0, ): """ Initialize a person tracking stream using Yolo2DDetector and PersonDistanceEstimator. - + Args: model_path: Path to the YOLO model file device: Computation device ("cuda" or "cpu") @@ -30,56 +30,61 @@ def __init__( camera_pitch: Camera pitch angle in radians (positive is up) camera_height: Height of the camera from the ground in meters """ - self.detector = Yolo2DDetector( - model_path=model_path, - device=device - ) - + self.detector = Yolo2DDetector(model_path=model_path, device=device) + # Initialize distance estimator if camera_intrinsics is None: raise ValueError("Camera intrinsics are required for distance estimation") - + # Validate camera intrinsics format [fx, fy, cx, cy] - if not isinstance(camera_intrinsics, (list, tuple, np.ndarray)) or len(camera_intrinsics) != 4: + if ( + not isinstance(camera_intrinsics, (list, tuple, np.ndarray)) + or len(camera_intrinsics) != 4 + ): raise ValueError("Camera intrinsics must be provided as [fx, fy, cx, cy]") - + # Convert [fx, fy, cx, cy] to 3x3 camera matrix fx, fy, cx, cy = camera_intrinsics - K = np.array([ - [fx, 0, cx], - [0, fy, cy], - [0, 0, 1] - ], dtype=np.float32) - + K = np.array([[fx, 0, cx], [0, fy, cy], [0, 0, 1]], dtype=np.float32) + self.distance_estimator = PersonDistanceEstimator( - K=K, - camera_pitch=camera_pitch, - camera_height=camera_height + K=K, camera_pitch=camera_pitch, camera_height=camera_height ) - + def create_stream(self, video_stream: Observable) -> Observable: """ Create an Observable stream of person tracking results from a video stream. - + Args: video_stream: Observable that emits video frames - + Returns: Observable that emits dictionaries containing tracking results and visualizations """ + def process_frame(frame): # Detect people in the frame - bboxes, track_ids, class_ids, confidences, names = self.detector.process_image(frame) - + bboxes, track_ids, class_ids, confidences, names = ( + self.detector.process_image(frame) + ) + # Filter to keep only person detections using filter_detections - filtered_bboxes, filtered_track_ids, filtered_class_ids, filtered_confidences, filtered_names = ( - filter_detections( - bboxes, track_ids, class_ids, confidences, names, - class_filter=[0], # 0 is the class_id for person - name_filter=['person'] - ) + ( + filtered_bboxes, + filtered_track_ids, + filtered_class_ids, + filtered_confidences, + filtered_names, + ) = filter_detections( + bboxes, + track_ids, + class_ids, + confidences, + names, + class_filter=[0], # 0 is the class_id for person + name_filter=["person"], ) - + # Create visualization viz_frame = self.detector.visualize_results( frame, @@ -87,58 +92,63 @@ def process_frame(frame): filtered_track_ids, filtered_class_ids, filtered_confidences, - filtered_names + filtered_names, ) - + # Calculate distance and angle for each person targets = [] for i, bbox in enumerate(filtered_bboxes): target_data = { - "target_id": filtered_track_ids[i] if i < len(filtered_track_ids) else -1, + "target_id": filtered_track_ids[i] + if i < len(filtered_track_ids) + else -1, "bbox": bbox, - "confidence": filtered_confidences[i] if i < len(filtered_confidences) else None, + "confidence": filtered_confidences[i] + if i < len(filtered_confidences) + else None, } - + distance, angle = self.distance_estimator.estimate_distance_angle(bbox) target_data["distance"] = distance target_data["angle"] = angle - + # Add text to visualization x1, y1, x2, y2 = map(int, bbox) dist_text = f"{distance:.2f}m, {np.rad2deg(angle):.1f} deg" - + # Add black background for better visibility - text_size = cv2.getTextSize(dist_text, cv2.FONT_HERSHEY_SIMPLEX, 0.5, 2)[0] + text_size = cv2.getTextSize( + dist_text, cv2.FONT_HERSHEY_SIMPLEX, 0.5, 2 + )[0] # Position at top-right corner cv2.rectangle( viz_frame, (x2 - text_size[0], y1 - text_size[1] - 5), (x2, y1), - (0, 0, 0), -1 + (0, 0, 0), + -1, ) - + # Draw text in white at top-right cv2.putText( - viz_frame, dist_text, + viz_frame, + dist_text, (x2 - text_size[0], y1 - 5), - cv2.FONT_HERSHEY_SIMPLEX, 0.5, (255, 255, 255), 2 + cv2.FONT_HERSHEY_SIMPLEX, + 0.5, + (255, 255, 255), + 2, ) - + targets.append(target_data) - + # Create the result dictionary - result = { - "frame": frame, - "viz_frame": viz_frame, - "targets": targets - } - + result = {"frame": frame, "viz_frame": viz_frame, "targets": targets} + return result - - return video_stream.pipe( - ops.map(process_frame) - ) - + + return video_stream.pipe(ops.map(process_frame)) + def cleanup(self): """Clean up resources.""" pass # No specific cleanup needed for now diff --git a/dimos/perception/segmentation/image_analyzer.py b/dimos/perception/segmentation/image_analyzer.py index 5371f178ae..db87212294 100644 --- a/dimos/perception/segmentation/image_analyzer.py +++ b/dimos/perception/segmentation/image_analyzer.py @@ -1,21 +1,23 @@ import base64 -import requests from openai import OpenAI import cv2 -import numpy as np import os -NORMAL_PROMPT = "What are in these images? Give a short word answer with at most two words, \ +NORMAL_PROMPT = ( + "What are in these images? Give a short word answer with at most two words, \ if not sure, give a description of its shape or color like 'small tube', 'blue item'. \" \ if does not look like an object, say 'unknown'. Export objects as a list of strings \ in this exact format '['object 1', 'object 2', '...']'." +) -RICH_PROMPT = "What are in these images? Give a detailed description of each item, the first n images will be \ +RICH_PROMPT = ( + "What are in these images? Give a detailed description of each item, the first n images will be \ cropped patches of the original image detected by the object detection model. \ The last image will be the original image. Use the last image only for context, \ do not describe objects in the last image. \ Export the objects as a list of strings in this exact format, '['description of object 1', '...', '...']', \ don't include anything else. " +) class ImageAnalyzer: @@ -53,7 +55,10 @@ def analyze_images(self, images, detail="auto", prompt_type="normal"): image_data = [ { "type": "image_url", - "image_url": {"url": f"data:image/jpeg;base64,{self.encode_image(img)}", "detail": detail}, + "image_url": { + "url": f"data:image/jpeg;base64,{self.encode_image(img)}", + "detail": detail, + }, } for img in images ] @@ -87,7 +92,7 @@ def main(): if not os.path.exists(cropped_images_dir): print(f"Directory '{cropped_images_dir}' does not exist.") return - + # Load all images from the directory images = [] for filename in os.listdir(cropped_images_dir): @@ -98,19 +103,19 @@ def main(): images.append(image) else: print(f"Warning: Could not read image {image_path}") - + if not images: print("No valid images found in the directory.") return - + # Initialize ImageAnalyzer analyzer = ImageAnalyzer() - + # Analyze images results = analyzer.analyze_images(images) - + # Split results into a list of items - object_list = [item.strip()[2:] for item in results.split('\n')] + object_list = [item.strip()[2:] for item in results.split("\n")] # Overlay text on images and display them for i, (img, obj) in enumerate(zip(images, object_list)): @@ -120,23 +125,31 @@ def main(): font_scale = 0.5 thickness = 2 text = obj.strip() - + # Get text size - (text_width, text_height), _ = cv2.getTextSize(text, font, font_scale, thickness) - + (text_width, text_height), _ = cv2.getTextSize( + text, font, font_scale, thickness + ) + # Position text at top of image x = 10 y = text_height + 10 - + # Add white background for text - cv2.rectangle(img, (x-5, y-text_height-5), (x+text_width+5, y+5), (255,255,255), -1) + cv2.rectangle( + img, + (x - 5, y - text_height - 5), + (x + text_width + 5, y + 5), + (255, 255, 255), + -1, + ) # Add text - cv2.putText(img, text, (x, y), font, font_scale, (0,0,0), thickness) - + cv2.putText(img, text, (x, y), font, font_scale, (0, 0, 0), thickness) + # Save or display the image cv2.imwrite(f"annotated_image_{i}.jpg", img) print(f"Detected object: {obj}") if __name__ == "__main__": - main() \ No newline at end of file + main() diff --git a/dimos/perception/segmentation/sam_2d_seg.py b/dimos/perception/segmentation/sam_2d_seg.py index 9a0437f910..524193c2f2 100644 --- a/dimos/perception/segmentation/sam_2d_seg.py +++ b/dimos/perception/segmentation/sam_2d_seg.py @@ -1,21 +1,32 @@ import cv2 -import numpy as np import time from ultralytics import FastSAM -from dimos.perception.segmentation.utils import extract_masks_bboxes_probs_names, \ - filter_segmentation_results, \ - plot_results, \ - crop_images_from_bboxes -from dimos.perception.common.detection2d_tracker import target2dTracker, get_tracked_results +from dimos.perception.segmentation.utils import ( + extract_masks_bboxes_probs_names, + filter_segmentation_results, + plot_results, + crop_images_from_bboxes, +) +from dimos.perception.common.detection2d_tracker import ( + target2dTracker, + get_tracked_results, +) from dimos.perception.segmentation.image_analyzer import ImageAnalyzer import os from collections import deque from concurrent.futures import ThreadPoolExecutor + class Sam2DSegmenter: - def __init__(self, model_path="FastSAM-s.pt", device="cuda", - min_analysis_interval=5.0, use_tracker=True, use_analyzer=True, - use_rich_labeling=False): + def __init__( + self, + model_path="FastSAM-s.pt", + device="cuda", + min_analysis_interval=5.0, + use_tracker=True, + use_analyzer=True, + use_rich_labeling=False, + ): # Core components self.device = device self.model = FastSAM(model_path) @@ -24,7 +35,7 @@ def __init__(self, model_path="FastSAM-s.pt", device="cuda", self.use_rich_labeling = use_rich_labeling module_dir = os.path.dirname(__file__) - self.tracker_config = os.path.join(module_dir, 'config', 'custom_tracker.yaml') + self.tracker_config = os.path.join(module_dir, "config", "custom_tracker.yaml") # Initialize tracker if enabled if self.use_tracker: @@ -38,9 +49,15 @@ def __init__(self, model_path="FastSAM-s.pt", device="cuda", max_area_ratio=0.4, texture_range=(0.0, 0.35), border_safe_distance=100, - weights={"prob": 1.0, "temporal": 3.0, "texture": 2.0, "border": 3.0, "size": 1.0} + weights={ + "prob": 1.0, + "temporal": 3.0, + "texture": 2.0, + "border": 3.0, + "size": 1.0, + }, ) - + # Initialize analyzer components if enabled if self.use_analyzer: self.image_analyzer = ImageAnalyzer() @@ -67,12 +84,22 @@ def process_image(self, image): if len(results) > 0: # Get initial segmentation results - masks, bboxes, track_ids, probs, names, areas = extract_masks_bboxes_probs_names(results[0]) - + masks, bboxes, track_ids, probs, names, areas = ( + extract_masks_bboxes_probs_names(results[0]) + ) + # Filter results - filtered_masks, filtered_bboxes, filtered_track_ids, filtered_probs, filtered_names, filtered_texture_values = \ - filter_segmentation_results(image, masks, bboxes, track_ids, probs, names, areas) - + ( + filtered_masks, + filtered_bboxes, + filtered_track_ids, + filtered_probs, + filtered_names, + filtered_texture_values, + ) = filter_segmentation_results( + image, masks, bboxes, track_ids, probs, names, areas + ) + if self.use_tracker: # Update tracker with filtered results tracked_targets = self.tracker.update( @@ -84,37 +111,71 @@ def process_image(self, image): filtered_names, filtered_texture_values, ) - + # Get tracked results - tracked_masks, tracked_bboxes, tracked_target_ids, tracked_probs, tracked_names = get_tracked_results(tracked_targets) - + ( + tracked_masks, + tracked_bboxes, + tracked_target_ids, + tracked_probs, + tracked_names, + ) = get_tracked_results(tracked_targets) + if self.use_analyzer: # Update analysis queue with tracked IDs target_id_set = set(tracked_target_ids) # Remove untracked objects from object_names all_target_ids = list(self.tracker.targets.keys()) - self.object_names = {track_id: name for track_id, name in self.object_names.items() - if track_id in all_target_ids} - + self.object_names = { + track_id: name + for track_id, name in self.object_names.items() + if track_id in all_target_ids + } + # Remove untracked objects from queue and results - self.to_be_analyzed = deque([track_id for track_id in self.to_be_analyzed - if track_id in target_id_set]) - + self.to_be_analyzed = deque( + [ + track_id + for track_id in self.to_be_analyzed + if track_id in target_id_set + ] + ) + # Filter out any IDs being analyzed from the to_be_analyzed queue if self.current_queue_ids: - self.to_be_analyzed = deque([tid for tid in self.to_be_analyzed - if tid not in self.current_queue_ids]) - + self.to_be_analyzed = deque( + [ + tid + for tid in self.to_be_analyzed + if tid not in self.current_queue_ids + ] + ) + # Add new track_ids to analysis queue for track_id in tracked_target_ids: - if track_id not in self.object_names and track_id not in self.to_be_analyzed: + if ( + track_id not in self.object_names + and track_id not in self.to_be_analyzed + ): self.to_be_analyzed.append(track_id) - - return tracked_masks, tracked_bboxes, tracked_target_ids, tracked_probs, tracked_names + + return ( + tracked_masks, + tracked_bboxes, + tracked_target_ids, + tracked_probs, + tracked_names, + ) else: # Return filtered results directly if tracker is disabled - return filtered_masks, filtered_bboxes, filtered_track_ids, filtered_probs, filtered_names + return ( + filtered_masks, + filtered_bboxes, + filtered_track_ids, + filtered_probs, + filtered_names, + ) return [], [], [], [], [] def check_analysis_status(self, tracked_target_ids): @@ -123,7 +184,7 @@ def check_analysis_status(self, tracked_target_ids): return None, None current_time = time.time() - + # Check if current queue analysis is complete if self.current_future and self.current_future.done(): try: @@ -140,12 +201,14 @@ def check_analysis_status(self, tracked_target_ids): self.last_analysis_time = current_time # If enough time has passed and we have items to analyze, start new analysis - if (not self.current_future and self.to_be_analyzed and - current_time - self.last_analysis_time >= self.min_analysis_interval): - + if ( + not self.current_future + and self.to_be_analyzed + and current_time - self.last_analysis_time >= self.min_analysis_interval + ): queue_indices = [] queue_ids = [] - + # Collect all valid track IDs from the queue while self.to_be_analyzed: track_id = self.to_be_analyzed[0] @@ -154,7 +217,7 @@ def check_analysis_status(self, tracked_target_ids): queue_indices.append(bbox_idx) queue_ids.append(track_id) self.to_be_analyzed.popleft() - + if queue_indices: return queue_indices, queue_ids return None, None @@ -177,20 +240,22 @@ def run_analysis(self, frame, tracked_bboxes, tracked_target_ids): cropped_images.append(frame) else: prompt_type = "normal" - + self.current_future = self.analysis_executor.submit( self.image_analyzer.analyze_images, cropped_images, - prompt_type=prompt_type + prompt_type=prompt_type, ) def get_object_names(self, track_ids, tracked_names): """Get object names for the given track IDs, falling back to tracked names.""" if not self.use_analyzer: return tracked_names - - return [self.object_names.get(track_id, tracked_name) - for track_id, tracked_name in zip(track_ids, tracked_names)] + + return [ + self.object_names.get(track_id, tracked_name) + for track_id, tracked_name in zip(track_ids, tracked_names) + ] def visualize_results(self, image, masks, bboxes, track_ids, probs, names): """Generate an overlay visualization with segmentation results and object names.""" @@ -205,21 +270,21 @@ def cleanup(self): def main(): # Example usage with different configurations cap = cv2.VideoCapture(0) - + # Example 1: Full functionality with rich labeling segmenter = Sam2DSegmenter( - min_analysis_interval=4.0, - use_tracker=True, + min_analysis_interval=4.0, + use_tracker=True, use_analyzer=True, - use_rich_labeling=True # Enable rich labeling + use_rich_labeling=True, # Enable rich labeling ) - + # Example 2: Full functionality with normal labeling # segmenter = Sam2DSegmenter(min_analysis_interval=4.0, use_tracker=True, use_analyzer=True) - + # Example 3: Tracker only (analyzer disabled) # segmenter = Sam2DSegmenter(use_analyzer=False) - + # Example 4: Basic segmentation only (both tracker and analyzer disabled) # segmenter = Sam2DSegmenter(use_tracker=False, use_analyzer=False) @@ -230,25 +295,20 @@ def main(): break start_time = time.time() - + # Process image and get results masks, bboxes, target_ids, probs, names = segmenter.process_image(frame) - + # Run analysis if enabled if segmenter.use_tracker and segmenter.use_analyzer: segmenter.run_analysis(frame, bboxes, target_ids) names = segmenter.get_object_names(target_ids, names) - #processing_time = time.time() - start_time - #print(f"Processing time: {processing_time:.2f}s") + # processing_time = time.time() - start_time + # print(f"Processing time: {processing_time:.2f}s") overlay = segmenter.visualize_results( - frame, - masks, - bboxes, - target_ids, - probs, - names + frame, masks, bboxes, target_ids, probs, names ) cv2.imshow("Segmentation", overlay) diff --git a/dimos/perception/segmentation/utils.py b/dimos/perception/segmentation/utils.py index cd9544928c..4b6ae09661 100644 --- a/dimos/perception/segmentation/utils.py +++ b/dimos/perception/segmentation/utils.py @@ -1,7 +1,6 @@ import numpy as np import cv2 import torch -import time class SimpleTracker: @@ -25,21 +24,27 @@ def update(self, track_ids): self.history.pop(0) # Consider only the latest `count_window` frames for counting - recent_history = self.history[-self.count_window:] + recent_history = self.history[-self.count_window :] all_tracks = np.concatenate(recent_history) if recent_history else np.array([]) - + # Compute occurrences efficiently using numpy unique_ids, counts = np.unique(all_tracks, return_counts=True) id_counts = dict(zip(unique_ids, counts)) - + # Update total counts but ensure it only contains IDs within the history size - total_tracked_ids = np.concatenate(self.history) if self.history else np.array([]) - unique_total_ids, total_counts = np.unique(total_tracked_ids, return_counts=True) + total_tracked_ids = ( + np.concatenate(self.history) if self.history else np.array([]) + ) + unique_total_ids, total_counts = np.unique( + total_tracked_ids, return_counts=True + ) self.total_counts = dict(zip(unique_total_ids, total_counts)) - + # Return IDs that appear often enough - return [track_id for track_id, count in id_counts.items() if count >= self.min_count] - + return [ + track_id for track_id, count in id_counts.items() if count >= self.min_count + ] + def get_total_counts(self): """Returns the total count of each tracking ID seen over time, limited to history size.""" return self.total_counts @@ -48,11 +53,11 @@ def get_total_counts(self): def extract_masks_bboxes_probs_names(result, max_size=0.7): """ Extracts masks, bounding boxes, probabilities, and class names from one Ultralytics result object. - + Parameters: result: Ultralytics result object max_size: float, maximum allowed size of object relative to image (0-1) - + Returns: tuple: (masks, bboxes, track_ids, probs, names, areas) """ @@ -65,7 +70,7 @@ def extract_masks_bboxes_probs_names(result, max_size=0.7): if result.masks is None: return masks, bboxes, track_ids, probs, names, areas - + total_area = result.masks.orig_shape[0] * result.masks.orig_shape[1] for box, mask_data in zip(result.boxes, result.masks.data): @@ -73,12 +78,12 @@ def extract_masks_bboxes_probs_names(result, max_size=0.7): # Extract bounding box x1, y1, x2, y2 = box.xyxy[0].tolist() - + # Extract track_id if available track_id = -1 # default if no tracking - if hasattr(box, 'id') and box.id is not None: + if hasattr(box, "id") and box.id is not None: track_id = int(box.id[0].item()) - + # Extract probability and class index conf = float(box.conf[0]) cls_idx = int(box.cls[0]) @@ -96,15 +101,16 @@ def extract_masks_bboxes_probs_names(result, max_size=0.7): return masks, bboxes, track_ids, probs, names, areas + def compute_texture_map(frame, blur_size=3): """ Compute texture map using gradient statistics. Returns high values for textured regions and low values for smooth regions. - + Parameters: frame: BGR image blur_size: Size of Gaussian blur kernel for pre-processing - + Returns: numpy array: Texture map with values normalized to [0,1] """ @@ -113,32 +119,44 @@ def compute_texture_map(frame, blur_size=3): gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) else: gray = frame - + # Pre-process with slight blur to reduce noise if blur_size > 0: gray = cv2.GaussianBlur(gray, (blur_size, blur_size), 0) - + # Compute gradients in x and y directions grad_x = cv2.Sobel(gray, cv2.CV_32F, 1, 0, ksize=3) grad_y = cv2.Sobel(gray, cv2.CV_32F, 0, 1, ksize=3) - + # Compute gradient magnitude and direction magnitude = np.sqrt(grad_x**2 + grad_y**2) - + # Compute local standard deviation of gradient magnitude texture_map = cv2.GaussianBlur(magnitude, (15, 15), 0) - + # Normalize to [0,1] - texture_map = (texture_map - texture_map.min()) / (texture_map.max() - texture_map.min() + 1e-8) - + texture_map = (texture_map - texture_map.min()) / ( + texture_map.max() - texture_map.min() + 1e-8 + ) + return texture_map -def filter_segmentation_results(frame, masks, bboxes, track_ids, probs, names, areas, texture_threshold=0.07, size_filter=800): +def filter_segmentation_results( + frame, + masks, + bboxes, + track_ids, + probs, + names, + areas, + texture_threshold=0.07, + size_filter=800, +): """ Filters segmentation results using both overlap and saliency detection. Uses mask_sum tensor for efficient overlap detection. - + Parameters: masks: list of torch.Tensor containing mask data bboxes: list of bounding boxes [x1, y1, x2, y2] @@ -149,38 +167,42 @@ def filter_segmentation_results(frame, masks, bboxes, track_ids, probs, names, a frame: BGR image for computing saliency texture_threshold: Average texture value required for mask to be kept size_filter: Minimum size of the object to be kept - + Returns: tuple: (filtered_masks, filtered_bboxes, filtered_track_ids, filtered_probs, filtered_names, filtered_texture_values, texture_map) """ if len(masks) <= 1: return masks, bboxes, track_ids, probs, names, [] - + # Compute texture map once and convert to tensor texture_map = compute_texture_map(frame) - + # Sort by area (smallest to largest) sorted_indices = torch.tensor(areas).argsort(descending=False) device = masks[0].device # Get the device of the first mask - + # Create mask_sum tensor where each pixel stores the index of the mask that claims it mask_sum = torch.zeros_like(masks[0], dtype=torch.int32) - - texture_map = torch.from_numpy(texture_map).to(device) # Convert texture_map to tensor and move to device - + + texture_map = torch.from_numpy(texture_map).to( + device + ) # Convert texture_map to tensor and move to device + filtered_texture_values = [] # List to store texture values of filtered masks - + for i, idx in enumerate(sorted_indices): mask = masks[idx] # Compute average texture value within mask texture_value = torch.mean(texture_map[mask > 0]) if torch.any(mask > 0) else 0 - + # Only claim pixels if mask passes texture threshold if texture_value >= texture_threshold: mask_sum[mask > 0] = i - filtered_texture_values.append(texture_value.item()) # Store the texture value as a Python float - + filtered_texture_values.append( + texture_value.item() + ) # Store the texture value as a Python float + # Get indices that appear in mask_sum (these are the masks we want to keep) keep_indices, counts = torch.unique(mask_sum[mask_sum > 0], return_counts=True) size_indices = counts > size_filter @@ -188,17 +210,24 @@ def filter_segmentation_results(frame, masks, bboxes, track_ids, probs, names, a sorted_indices = sorted_indices.cpu() keep_indices = keep_indices.cpu() - + # Map back to original indices and filter final_indices = sorted_indices[keep_indices].tolist() - + filtered_masks = [masks[i] for i in final_indices] filtered_bboxes = [bboxes[i] for i in final_indices] filtered_track_ids = [track_ids[i] for i in final_indices] filtered_probs = [probs[i] for i in final_indices] filtered_names = [names[i] for i in final_indices] - return filtered_masks, filtered_bboxes, filtered_track_ids, filtered_probs, filtered_names, filtered_texture_values + return ( + filtered_masks, + filtered_bboxes, + filtered_track_ids, + filtered_probs, + filtered_names, + filtered_texture_values, + ) def plot_results(image, masks, bboxes, track_ids, probs, names, alpha=0.5): @@ -215,7 +244,7 @@ def plot_results(image, masks, bboxes, track_ids, probs, names, alpha=0.5): mask = mask.cpu().numpy() mask_resized = cv2.resize(mask, (w, h), interpolation=cv2.INTER_LINEAR) - + # Generate consistent color based on track_id if track_id != -1: np.random.seed(track_id) @@ -223,7 +252,7 @@ def plot_results(image, masks, bboxes, track_ids, probs, names, alpha=0.5): np.random.seed(None) else: color = np.random.randint(0, 255, (3,), dtype=np.uint8) - + # Apply mask color overlay[mask_resized > 0.5] = color @@ -237,31 +266,22 @@ def plot_results(image, masks, bboxes, track_ids, probs, names, alpha=0.5): label += f" {name}" # Calculate text size for background rectangle - (text_w, text_h), _ = cv2.getTextSize( - label, - cv2.FONT_HERSHEY_SIMPLEX, - 0.5, - 1 - ) + (text_w, text_h), _ = cv2.getTextSize(label, cv2.FONT_HERSHEY_SIMPLEX, 0.5, 1) # Draw background rectangle for text cv2.rectangle( - overlay, - (x1, y1-text_h-8), - (x1+text_w+4, y1), - color.tolist(), - -1 + overlay, (x1, y1 - text_h - 8), (x1 + text_w + 4, y1), color.tolist(), -1 ) # Draw text with white color for better visibility cv2.putText( overlay, label, - (x1+2, y1-5), + (x1 + 2, y1 - 5), cv2.FONT_HERSHEY_SIMPLEX, 0.5, (255, 255, 255), # White text - 1 + 1, ) # Blend overlay with original image @@ -293,7 +313,7 @@ def crop_images_from_bboxes(image, bboxes, buffer=0): x2 = min(width, x2 + buffer) y2 = min(height, y2 + buffer) - cropped_image = image[int(y1):int(y2), int(x1):int(x2)] + cropped_image = image[int(y1) : int(y2), int(x1) : int(x2)] cropped_images.append(cropped_image) return cropped_images diff --git a/dimos/perception/semantic_seg.py b/dimos/perception/semantic_seg.py index 4f5a1b5b80..bf1c7d833c 100644 --- a/dimos/perception/semantic_seg.py +++ b/dimos/perception/semantic_seg.py @@ -24,17 +24,17 @@ class SemanticSegmentationStream: def __init__( - self, + self, model_path: str = "FastSAM-s.pt", device: str = "cuda", enable_mono_depth: bool = True, enable_rich_labeling: bool = True, camera_params: dict = None, - gt_depth_scale=256.0 + gt_depth_scale=256.0, ): """ Initialize a semantic segmentation stream using Sam2DSegmenter. - + Args: model_path: Path to the FastSAM model file device: Computation device ("cuda" or "cpu") @@ -50,65 +50,69 @@ def __init__( min_analysis_interval=5.0, use_tracker=True, use_analyzer=True, - use_rich_labeling=enable_rich_labeling + use_rich_labeling=enable_rich_labeling, ) - + self.enable_mono_depth = enable_mono_depth if enable_mono_depth: self.depth_model = Metric3D(gt_depth_scale) - + if camera_params: # Check if direct intrinsics are provided - if 'intrinsics' in camera_params: - intrinsics = camera_params['intrinsics'] + if "intrinsics" in camera_params: + intrinsics = camera_params["intrinsics"] if len(intrinsics) != 4: - raise ValueError("Intrinsics must be a list of 4 values: [fx, fy, cx, cy]") + raise ValueError( + "Intrinsics must be a list of 4 values: [fx, fy, cx, cy]" + ) self.depth_model.update_intrinsic(intrinsics) else: # Create camera object and calculate intrinsics from physical parameters self.camera = Camera( - resolution=camera_params.get('resolution'), - focal_length=camera_params.get('focal_length'), - sensor_size=camera_params.get('sensor_size') + resolution=camera_params.get("resolution"), + focal_length=camera_params.get("focal_length"), + sensor_size=camera_params.get("sensor_size"), ) intrinsics = self.camera.calculate_intrinsics() - self.depth_model.update_intrinsic([ - intrinsics['focal_length_x'], - intrinsics['focal_length_y'], - intrinsics['principal_point_x'], - intrinsics['principal_point_y'] - ]) + self.depth_model.update_intrinsic( + [ + intrinsics["focal_length_x"], + intrinsics["focal_length_y"], + intrinsics["principal_point_x"], + intrinsics["principal_point_y"], + ] + ) else: - raise ValueError("Camera parameters are required for monocular depth processing.") - + raise ValueError( + "Camera parameters are required for monocular depth processing." + ) + def create_stream(self, video_stream: Observable) -> Observable[SegmentationType]: """ Create an Observable stream of segmentation results from a video stream. - + Args: video_stream: Observable that emits video frames - + Returns: Observable that emits SegmentationType objects containing masks and metadata """ + def process_frame(frame): # Process image and get results - masks, bboxes, target_ids, probs, names = self.segmenter.process_image(frame) - + masks, bboxes, target_ids, probs, names = self.segmenter.process_image( + frame + ) + # Run analysis if enabled if self.segmenter.use_analyzer: self.segmenter.run_analysis(frame, bboxes, target_ids) names = self.segmenter.get_object_names(target_ids, names) viz_frame = self.segmenter.visualize_results( - frame, - masks, - bboxes, - target_ids, - probs, - names + frame, masks, bboxes, target_ids, probs, names ) - + # Process depth if enabled depth_viz = None object_depths = [] @@ -116,37 +120,48 @@ def process_frame(frame): # Get depth map depth_map = self.depth_model.infer_depth(frame) depth_map = np.array(depth_map) - + # Calculate average depth for each object object_depths = [] for mask in masks: # Convert mask to numpy if needed - mask_np = mask.cpu().numpy() if hasattr(mask, 'cpu') else mask + mask_np = mask.cpu().numpy() if hasattr(mask, "cpu") else mask # Get depth values where mask is True object_depth = depth_map[mask_np > 0.5] # Calculate average depth (in meters) avg_depth = np.mean(object_depth) if len(object_depth) > 0 else 0 - object_depths.append(avg_depth/1000) - + object_depths.append(avg_depth / 1000) + # Create colorized depth visualization depth_viz = self._create_depth_visualization(depth_map) - + # Overlay depth values on the visualization frame for bbox, depth in zip(bboxes, object_depths): x1, y1, x2, y2 = map(int, bbox) # Draw depth text at bottom left of bounding box depth_text = f"{depth:.2f}mm" # Add black background for better visibility - text_size = cv2.getTextSize(depth_text, cv2.FONT_HERSHEY_SIMPLEX, 0.5, 2)[0] - cv2.rectangle(viz_frame, - (x1, y2 - text_size[1] - 5), - (x1 + text_size[0], y2), - (0, 0, 0), -1) + text_size = cv2.getTextSize( + depth_text, cv2.FONT_HERSHEY_SIMPLEX, 0.5, 2 + )[0] + cv2.rectangle( + viz_frame, + (x1, y2 - text_size[1] - 5), + (x1 + text_size[0], y2), + (0, 0, 0), + -1, + ) # Draw text in white - cv2.putText(viz_frame, depth_text, - (x1, y2 - 5), - cv2.FONT_HERSHEY_SIMPLEX, 0.5, (255, 255, 255), 2) - + cv2.putText( + viz_frame, + depth_text, + (x1, y2 - 5), + cv2.FONT_HERSHEY_SIMPLEX, + 0.5, + (255, 255, 255), + 2, + ) + # Create metadata in the new requested format objects = [] for i in range(len(bboxes)): @@ -156,75 +171,88 @@ def process_frame(frame): "prob": probs[i] if i < len(probs) else None, "label": names[i] if i < len(names) else None, } - + # Add depth if available if self.enable_mono_depth and i < len(object_depths): obj_data["depth"] = object_depths[i] - + objects.append(obj_data) - + # Create the new metadata dictionary - metadata = { - "frame": frame, - "viz_frame": viz_frame, - "objects": objects - } - + metadata = {"frame": frame, "viz_frame": viz_frame, "objects": objects} + # Add depth visualization if available if depth_viz is not None: metadata["depth_viz"] = depth_viz - + # Convert masks to numpy arrays if they aren't already - numpy_masks = [mask.cpu().numpy() if hasattr(mask, 'cpu') else mask for mask in masks] - + numpy_masks = [ + mask.cpu().numpy() if hasattr(mask, "cpu") else mask for mask in masks + ] + return SegmentationType(masks=numpy_masks, metadata=metadata) - - return video_stream.pipe( - ops.map(process_frame) - ) - + + return video_stream.pipe(ops.map(process_frame)) + def _create_depth_visualization(self, depth_map): """ Create a colorized visualization of the depth map. - + Args: depth_map: Raw depth map in meters - + Returns: Colorized depth map visualization """ # Normalize depth map to 0-255 range for visualization depth_min = np.min(depth_map) depth_max = np.max(depth_map) - depth_normalized = ((depth_map - depth_min) / (depth_max - depth_min) * 255).astype(np.uint8) - + depth_normalized = ( + (depth_map - depth_min) / (depth_max - depth_min) * 255 + ).astype(np.uint8) + # Apply colormap (using JET colormap for better depth perception) depth_colored = cv2.applyColorMap(depth_normalized, cv2.COLORMAP_JET) - + # Add depth scale bar scale_height = 30 scale_width = depth_map.shape[1] # Match width with depth map scale_bar = np.zeros((scale_height, scale_width, 3), dtype=np.uint8) - + # Create gradient for scale bar for i in range(scale_width): - color = cv2.applyColorMap(np.array([[i * 255 // scale_width]], dtype=np.uint8), cv2.COLORMAP_JET) + color = cv2.applyColorMap( + np.array([[i * 255 // scale_width]], dtype=np.uint8), cv2.COLORMAP_JET + ) scale_bar[:, i] = color[0, 0] - + # Add depth values to scale bar - cv2.putText(scale_bar, f"{depth_min:.1f}mm", (5, 20), - cv2.FONT_HERSHEY_SIMPLEX, 0.5, (255, 255, 255), 1) - cv2.putText(scale_bar, f"{depth_max:.1f}mm", (scale_width-60, 20), - cv2.FONT_HERSHEY_SIMPLEX, 0.5, (255, 255, 255), 1) - + cv2.putText( + scale_bar, + f"{depth_min:.1f}mm", + (5, 20), + cv2.FONT_HERSHEY_SIMPLEX, + 0.5, + (255, 255, 255), + 1, + ) + cv2.putText( + scale_bar, + f"{depth_max:.1f}mm", + (scale_width - 60, 20), + cv2.FONT_HERSHEY_SIMPLEX, + 0.5, + (255, 255, 255), + 1, + ) + # Combine depth map and scale bar combined_viz = np.vstack((depth_colored, scale_bar)) - + return combined_viz - + def cleanup(self): """Clean up resources.""" self.segmenter.cleanup() if self.enable_mono_depth: del self.depth_model - diff --git a/dimos/perception/spatial_perception.py b/dimos/perception/spatial_perception.py index c689b07d07..95d8eb9fb6 100644 --- a/dimos/perception/spatial_perception.py +++ b/dimos/perception/spatial_perception.py @@ -16,19 +16,14 @@ Spatial Memory module for creating a semantic map of the environment. """ -import logging import uuid import time import os -import math -from typing import Dict, List, Tuple, Optional, Any, Union +from typing import Dict, List, Optional, Any import numpy as np -import cv2 from reactivex import Observable, disposable from reactivex import operators as ops -from reactivex.subject import Subject -from reactivex.disposable import CompositeDisposable from datetime import datetime from dimos.utils.logging_config import setup_logger @@ -40,34 +35,41 @@ logger = setup_logger("dimos.perception.spatial_memory") + class SpatialMemory: """ A class for building and querying Robot spatial memory. - + This class processes video frames from ROSControl, associates them with XY locations, and stores them in a vector database for later retrieval. It also maintains a list of named robot locations that can be queried by name. """ - + def __init__( self, collection_name: str = "spatial_memory", - embedding_model: str = "clip", + embedding_model: str = "clip", embedding_dimensions: int = 512, min_distance_threshold: float = 0.01, # Min distance in meters to store a new frame min_time_threshold: float = 1.0, # Min time in seconds to record a new frame db_path: Optional[str] = None, # Path for ChromaDB persistence - visual_memory_path: Optional[str] = None, # Path for saving/loading visual memory + visual_memory_path: Optional[ + str + ] = None, # Path for saving/loading visual memory new_memory: bool = False, # Whether to create a new memory from scratch output_dir: Optional[str] = None, # Directory for storing visual memory data chroma_client: Any = None, # Optional ChromaDB client for persistence - visual_memory: Optional['VisualMemory'] = None, # Optional VisualMemory instance for storing images + visual_memory: Optional[ + "VisualMemory" + ] = None, # Optional VisualMemory instance for storing images video_stream: Optional[Observable] = None, # Video stream to process - transform_provider: Optional[callable] = None, # Function that returns position and rotation + transform_provider: Optional[ + callable + ] = None, # Function that returns position and rotation ): """ Initialize the spatial perception system. - + Args: collection_name: Name of the vector database collection embedding_model: Model to use for image embeddings ("clip", "resnet", etc.) @@ -83,24 +85,25 @@ def __init__( self.embedding_dimensions = embedding_dimensions self.min_distance_threshold = min_distance_threshold self.min_time_threshold = min_time_threshold - + # Set up paths for persistence self.db_path = db_path self.visual_memory_path = visual_memory_path self.output_dir = output_dir - + # Setup ChromaDB client if not provided self._chroma_client = chroma_client if chroma_client is None and db_path is not None: # Create db directory if needed os.makedirs(db_path, exist_ok=True) - + # Clean up existing DB if creating new memory if new_memory and os.path.exists(db_path): try: - logger.info(f"Creating new ChromaDB database (new_memory=True)") + logger.info("Creating new ChromaDB database (new_memory=True)") # Try to delete any existing database files import shutil + for item in os.listdir(db_path): item_path = os.path.join(db_path, item) if os.path.isfile(item_path): @@ -110,14 +113,14 @@ def __init__( logger.info(f"Removed existing ChromaDB files from {db_path}") except Exception as e: logger.error(f"Error clearing ChromaDB directory: {e}") - + from chromadb.config import Settings import chromadb + self._chroma_client = chromadb.PersistentClient( - path=db_path, - settings=Settings(anonymized_telemetry=False) + path=db_path, settings=Settings(anonymized_telemetry=False) ) - + # Initialize or load visual memory self._visual_memory = visual_memory if visual_memory is None: @@ -126,96 +129,104 @@ def __init__( self._visual_memory = VisualMemory(output_dir=output_dir) else: try: - logger.info(f"Loading existing visual memory from {visual_memory_path}...") - self._visual_memory = VisualMemory.load(visual_memory_path, output_dir=output_dir) - logger.info(f"Loaded {self._visual_memory.count()} images from previous runs") + logger.info( + f"Loading existing visual memory from {visual_memory_path}..." + ) + self._visual_memory = VisualMemory.load( + visual_memory_path, output_dir=output_dir + ) + logger.info( + f"Loaded {self._visual_memory.count()} images from previous runs" + ) except Exception as e: logger.error(f"Error loading visual memory: {e}") self._visual_memory = VisualMemory(output_dir=output_dir) - + # Initialize vector database self.vector_db: SpatialVectorDB = SpatialVectorDB( collection_name=collection_name, chroma_client=self._chroma_client, - visual_memory=self._visual_memory + visual_memory=self._visual_memory, ) - + self.embedding_provider: ImageEmbeddingProvider = ImageEmbeddingProvider( - model_name=embedding_model, - dimensions=embedding_dimensions + model_name=embedding_model, dimensions=embedding_dimensions ) - + self.last_position: Optional[Vector] = None self.last_record_time: Optional[float] = None - + self.frame_count: int = 0 self.stored_frame_count: int = 0 - + # For tracking stream subscription self._subscription = None - + # List to store robot locations self.robot_locations: List[RobotLocation] = [] - + logger.info(f"SpatialMemory initialized with model {embedding_model}") - + # Start processing video stream if provided if video_stream is not None and transform_provider is not None: self.start_continuous_processing(video_stream, transform_provider) - - - def query_by_location(self, x: float, y: float, radius: float = 2.0, limit: int = 5) -> List[Dict]: + + def query_by_location( + self, x: float, y: float, radius: float = 2.0, limit: int = 5 + ) -> List[Dict]: """ Query the vector database for images near the specified location. - + Args: x: X coordinate y: Y coordinate radius: Search radius in meters limit: Maximum number of results to return - + Returns: List of results, each containing the image and its metadata """ return self.vector_db.query_by_location(x, y, radius, limit) - - def start_continuous_processing(self, video_stream: Observable, transform_provider: callable) -> disposable.Disposable: + + def start_continuous_processing( + self, video_stream: Observable, transform_provider: callable + ) -> disposable.Disposable: """ Start continuous processing of video frames from an Observable stream. - + Args: video_stream: Observable of video frames transform_provider: Callable that returns position and rotation for each frame - + Returns: Disposable subscription that can be used to stop processing """ # Stop any existing subscription self.stop_continuous_processing() - + # Map each video frame to include transform data combined_stream = video_stream.pipe( - ops.map(lambda video_frame: { - "frame": video_frame, - **transform_provider() - }), + ops.map(lambda video_frame: {"frame": video_frame, **transform_provider()}), # Filter out bad transforms - ops.filter(lambda data: data.get('position') is not None and data.get('rotation') is not None) + ops.filter( + lambda data: data.get("position") is not None + and data.get("rotation") is not None + ), ) - + # Process with spatial memory result_stream = self.process_stream(combined_stream) - + # Subscribe to the result stream self._subscription = result_stream.subscribe( on_next=self._on_frame_processed, on_error=lambda e: logger.error(f"Error in spatial memory stream: {e}"), - on_completed=lambda: logger.info("Spatial memory stream completed") + on_completed=lambda: logger.info("Spatial memory stream completed"), ) - + logger.info("Continuous spatial memory processing started") return self._subscription - + def stop_continuous_processing(self) -> None: """ Stop continuous processing of video frames. @@ -227,80 +238,90 @@ def stop_continuous_processing(self) -> None: logger.info("Stopped continuous spatial memory processing") except Exception as e: logger.error(f"Error stopping spatial memory processing: {e}") - + def _on_frame_processed(self, result: Dict[str, Any]) -> None: """ Handle updates from the spatial memory processing stream. """ # Log successful frame storage (if stored) - position = result.get('position') + position = result.get("position") if position is not None: - logger.debug(f"Spatial memory updated with frame at ({position[0]:.2f}, {position[1]:.2f}, {position[2]:.2f})") - + logger.debug( + f"Spatial memory updated with frame at ({position[0]:.2f}, {position[1]:.2f}, {position[2]:.2f})" + ) + # Periodically save visual memory to disk (e.g., every 100 frames) if self._visual_memory is not None and self.visual_memory_path is not None: if self.stored_frame_count % 100 == 0: self.save() - + def save(self) -> bool: """ Save the visual memory component to disk. - + Returns: True if memory was saved successfully, False otherwise """ if self._visual_memory is not None and self.visual_memory_path is not None: try: saved_path = self._visual_memory.save(self.visual_memory_path) - logger.info(f"Saved {self._visual_memory.count()} images to {saved_path}") + logger.info( + f"Saved {self._visual_memory.count()} images to {saved_path}" + ) return True except Exception as e: logger.error(f"Failed to save visual memory: {e}") return False - + def process_stream(self, combined_stream: Observable) -> Observable: """ Process a combined stream of video frames and positions. - + This method handles a stream where each item already contains both the frame and position, - such as the stream created by combining video and transform streams with the + such as the stream created by combining video and transform streams with the with_latest_from operator. - + Args: combined_stream: Observable stream of dictionaries containing 'frame' and 'position' - + Returns: Observable of processing results, including the stored frame and its metadata """ self.last_position = None self.last_record_time = None - + def process_combined_data(data): self.frame_count += 1 - - frame = data.get('frame') - position_vec = data.get('position') # Use .get() for consistency - rotation_vec = data.get('rotation') # Get rotation data if available - - + + frame = data.get("frame") + position_vec = data.get("position") # Use .get() for consistency + rotation_vec = data.get("rotation") # Get rotation data if available + if not position_vec or not rotation_vec: logger.info("No position or rotation data available, skipping frame") return None - - if self.last_position is not None and (self.last_position - position_vec).length() < self.min_distance_threshold: + + if ( + self.last_position is not None + and (self.last_position - position_vec).length() + < self.min_distance_threshold + ): logger.debug("Position has not moved, skipping frame") return None - if self.last_record_time is not None and (time.time() - self.last_record_time) < self.min_time_threshold: + if ( + self.last_record_time is not None + and (time.time() - self.last_record_time) < self.min_time_threshold + ): logger.debug("Time since last record too short, skipping frame") return None - + current_time = time.time() - + frame_embedding = self.embedding_provider.get_embedding(frame) - + frame_id = f"frame_{datetime.now().strftime('%Y%m%d_%H%M%S')}_{uuid.uuid4().hex[:8]}" - + # Create metadata dictionary with primitive types only metadata = { "pos_x": float(position_vec.x), @@ -310,104 +331,108 @@ def process_combined_data(data): "rot_y": float(rotation_vec.y), "rot_z": float(rotation_vec.z), "timestamp": current_time, - "frame_id": frame_id + "frame_id": frame_id, } - + self.vector_db.add_image_vector( vector_id=frame_id, image=frame, embedding=frame_embedding, - metadata=metadata + metadata=metadata, ) - + self.last_position = position_vec self.last_record_time = current_time self.stored_frame_count += 1 - - logger.info(f"Stored frame at position {position_vec}, rotation {rotation_vec})" - f" stored {self.stored_frame_count}/{self.frame_count} frames") - + + logger.info( + f"Stored frame at position {position_vec}, rotation {rotation_vec})" + f" stored {self.stored_frame_count}/{self.frame_count} frames" + ) + # Create return dictionary with primitive-compatible values return { "frame": frame, "position": (position_vec.x, position_vec.y, position_vec.z), "rotation": (rotation_vec.x, rotation_vec.y, rotation_vec.z), "frame_id": frame_id, - "timestamp": current_time + "timestamp": current_time, } - + return combined_stream.pipe( ops.map(process_combined_data), - ops.filter(lambda result: result is not None) + ops.filter(lambda result: result is not None), ) def query_by_image(self, image: np.ndarray, limit: int = 5) -> List[Dict]: """ Query the vector database for images similar to the provided image. - + Args: image: Query image limit: Maximum number of results to return - + Returns: List of results, each containing the image and its metadata """ embedding = self.embedding_provider.get_embedding(image) return self.vector_db.query_by_embedding(embedding, limit) - + def query_by_text(self, text: str, limit: int = 5) -> List[Dict]: """ Query the vector database for images matching the provided text description. - + This method uses CLIP's text-to-image matching capability to find images that semantically match the text query (e.g., "where is the kitchen"). - + Args: text: Text query to search for limit: Maximum number of results to return - + Returns: List of results, each containing the image, its metadata, and similarity score """ logger.info(f"Querying spatial memory with text: '{text}'") return self.vector_db.query_by_text(text, limit) - + def add_robot_location(self, location: RobotLocation) -> bool: """ Add a named robot location to spatial memory. - + Args: location: The RobotLocation object to add - + Returns: True if successfully added, False otherwise """ try: # Add to our list of robot locations self.robot_locations.append(location) - logger.info(f"Added robot location '{location.name}' at position {location.position}") + logger.info( + f"Added robot location '{location.name}' at position {location.position}" + ) return True - + except Exception as e: logger.error(f"Error adding robot location: {e}") return False - + def get_robot_locations(self) -> List[RobotLocation]: """ Get all stored robot locations. - + Returns: List of RobotLocation objects """ return self.robot_locations - + def find_robot_location(self, name: str) -> Optional[RobotLocation]: """ Find a robot location by name. - + Args: name: Name of the location to find - + Returns: RobotLocation object if found, None otherwise """ @@ -415,17 +440,19 @@ def find_robot_location(self, name: str) -> Optional[RobotLocation]: for location in self.robot_locations: if location.name.lower() == name.lower(): return location - + return None - + def cleanup(self): """Clean up resources.""" # Stop any ongoing processing self.stop_continuous_processing() - + # Save data if possible self.save() - + # Log cleanup if self.vector_db: - logger.info(f"Cleaning up SpatialMemory, stored {self.stored_frame_count} frames") + logger.info( + f"Cleaning up SpatialMemory, stored {self.stored_frame_count} frames" + ) diff --git a/dimos/perception/visual_servoing.py b/dimos/perception/visual_servoing.py index ba8883cc9d..24fd7d2036 100644 --- a/dimos/perception/visual_servoing.py +++ b/dimos/perception/visual_servoing.py @@ -30,28 +30,35 @@ def calculate_iou(box1, box2): y1 = max(box1[1], box2[1]) x2 = min(box1[2], box2[2]) y2 = min(box1[3], box2[3]) - + intersection = max(0, x2 - x1) * max(0, y2 - y1) area1 = (box1[2] - box1[0]) * (box1[3] - box1[1]) area2 = (box2[2] - box2[0]) * (box2[3] - box2[1]) union = area1 + area2 - intersection - + return intersection / union if union > 0 else 0 class VisualServoing: """ A class that performs visual servoing to track and follow a human target. - + The class will use the provided tracking stream to detect people and estimate their distance and angle, then use a VisualServoingController to generate appropriate velocity commands to track the target. """ - - def __init__(self, tracking_stream=None, max_linear_speed=0.8, max_angular_speed=1.5, - desired_distance=1.5, max_lost_frames=10000, iou_threshold=0.6): + + def __init__( + self, + tracking_stream=None, + max_linear_speed=0.8, + max_angular_speed=1.5, + desired_distance=1.5, + max_lost_frames=10000, + iou_threshold=0.6, + ): """Initialize the visual servoing. - + Args: tracking_stream: Observable tracking stream (must be already set up) max_linear_speed: Maximum linear speed in m/s @@ -66,65 +73,69 @@ def __init__(self, tracking_stream=None, max_linear_speed=0.8, max_angular_speed self.desired_distance = desired_distance self.max_lost_frames = max_lost_frames self.iou_threshold = iou_threshold - + # Initialize the controller with PID parameters tuned for slow-moving robot # Distance PID: (kp, ki, kd, output_limits, integral_limit, deadband, output_deadband) distance_pid_params = ( - 1.0, # kp: Moderate proportional gain for smooth approach - 0.2, # ki: Small integral gain to eliminate steady-state error - 0.1, # kd: Some damping for smooth motion + 1.0, # kp: Moderate proportional gain for smooth approach + 0.2, # ki: Small integral gain to eliminate steady-state error + 0.1, # kd: Some damping for smooth motion (-self.max_linear_speed, self.max_linear_speed), # output_limits - 0.5, # integral_limit: Prevent windup - 0.1, # deadband: Small deadband for distance control - 0.05, # output_deadband: Minimum output to overcome friction + 0.5, # integral_limit: Prevent windup + 0.1, # deadband: Small deadband for distance control + 0.05, # output_deadband: Minimum output to overcome friction ) - + # Angle PID: (kp, ki, kd, output_limits, integral_limit, deadband, output_deadband) angle_pid_params = ( - 1.4, # kp: Higher proportional gain for responsive turning - 0.1, # ki: Small integral gain - 0.05, # kd: Light damping to prevent oscillation + 1.4, # kp: Higher proportional gain for responsive turning + 0.1, # ki: Small integral gain + 0.05, # kd: Light damping to prevent oscillation (-self.max_angular_speed, self.max_angular_speed), # output_limits - 0.3, # integral_limit: Prevent windup - 0.1, # deadband: Small deadband for angle control - 0.1, # output_deadband: Minimum output to overcome friction + 0.3, # integral_limit: Prevent windup + 0.1, # deadband: Small deadband for angle control + 0.1, # output_deadband: Minimum output to overcome friction True, # Invert output for angular control ) - + # Initialize the visual servoing controller self.controller = VisualServoingController( - distance_pid_params=distance_pid_params, - angle_pid_params=angle_pid_params + distance_pid_params=distance_pid_params, angle_pid_params=angle_pid_params ) - + # Initialize tracking state self.last_control_time = time.time() self.running = False self.current_target = None # (target_id, bbox) self.target_lost_frames = 0 - + # Add variables to track current distance and angle self.current_distance = None self.current_angle = None - + # Stream subscription management self.subscription = None self.latest_result = None self.result_lock = threading.Lock() self.stop_event = threading.Event() - + # Subscribe to the tracking stream self._subscribe_to_tracking_stream() - - def start_tracking(self, desired_distance: int = None, point: Tuple[int, int] = None, timeout_wait_for_target: float = 20.0,) -> bool: + + def start_tracking( + self, + desired_distance: int = None, + point: Tuple[int, int] = None, + timeout_wait_for_target: float = 20.0, + ) -> bool: """ Start tracking a human target using visual servoing. - + Args: point: Optional tuple of (x, y) coordinates in image space. If provided, will find the target whose bounding box contains this point. If None, will track the closest person. - + Returns: bool: True if tracking was successfully started, False otherwise """ @@ -134,17 +145,19 @@ def start_tracking(self, desired_distance: int = None, point: Tuple[int, int] = if self.tracking_stream is None: self.running = False return False - + # Get the latest frame and targets from person tracker try: # Try getting the result multiple times with delays - for attempt in range(10): + for attempt in range(10): result = self._get_current_tracking_result() - + if result is not None: break - - logger.warning(f"Attempt {attempt + 1}: No tracking result, retrying in 1 second...") + + logger.warning( + f"Attempt {attempt + 1}: No tracking result, retrying in 1 second..." + ) time.sleep(3) # Wait 1 second between attempts if result is None: @@ -152,7 +165,7 @@ def start_tracking(self, desired_distance: int = None, point: Tuple[int, int] = return False targets = result.get("targets") - + # If bbox is provided, find matching target based on IOU if point is not None and not self.running: # Find the target with highest IOU to the provided bbox @@ -172,7 +185,7 @@ def start_tracking(self, desired_distance: int = None, point: Tuple[int, int] = else: # Already tracking return True - + if best_target: # Set as current target and reset lost counter target_id = best_target.get("target_id") @@ -181,7 +194,7 @@ def start_tracking(self, desired_distance: int = None, point: Tuple[int, int] = self.target_lost_frames = 0 self.running = True logger.info(f"Started tracking target ID: {target_id}") - + # Get distance and angle and compute control (store as initial control values) distance = best_target.get("distance") angle = best_target.get("angle") @@ -198,14 +211,14 @@ def start_tracking(self, desired_distance: int = None, point: Tuple[int, int] = logger.error(f"Error starting tracking: {e}") self.running = False return False - + def _find_target_by_point(self, point, targets): """Find the target whose bounding box contains the given point. - + Args: point: Tuple of (x, y) coordinates in image space targets: List of target dictionaries - + Returns: dict: The target whose bbox contains the point, or None if no match """ @@ -214,16 +227,16 @@ def _find_target_by_point(self, point, targets): bbox = target.get("bbox") if not bbox: continue - + x1, y1, x2, y2 = bbox if x1 <= x <= x2 and y1 <= y <= y2: return target return None - + def updateTracking(self) -> Dict[str, any]: """ Update tracking of current target. - + Returns: Dict with linear_vel, angular_vel, and running state """ @@ -232,17 +245,17 @@ def updateTracking(self) -> Dict[str, any]: self.current_distance = None self.current_angle = None return {"linear_vel": 0.0, "angular_vel": 0.0} - + # Get the latest tracking result result = self._get_current_tracking_result() - + # Get targets from result targets = result.get("targets") - + # Try to find current target by ID or IOU current_target_id, current_bbox = self.current_target target_found = False - + # First try to find by ID for target in targets: if target.get("target_id") == current_target_id: @@ -250,15 +263,17 @@ def updateTracking(self) -> Dict[str, any]: self.current_target = (current_target_id, target.get("bbox")) self.target_lost_frames = 0 target_found = True - + # Store current distance and angle self.current_distance = target.get("distance") self.current_angle = target.get("angle") - + # Compute control - control = self._compute_control(self.current_distance, self.current_angle) + control = self._compute_control( + self.current_distance, self.current_angle + ) return control - + # If not found by ID, try to find by IOU if not target_found and current_bbox is not None: best_target = self._find_best_target_by_iou(current_bbox, targets) @@ -269,115 +284,119 @@ def updateTracking(self) -> Dict[str, any]: self.current_target = (new_id, new_bbox) self.target_lost_frames = 0 logger.info(f"Target ID updated: {current_target_id} -> {new_id}") - + # Store current distance and angle self.current_distance = best_target.get("distance") self.current_angle = best_target.get("angle") - + # Compute control - control = self._compute_control(self.current_distance, self.current_angle) + control = self._compute_control( + self.current_distance, self.current_angle + ) return control - + # Target not found, increment lost counter if not target_found: self.target_lost_frames += 1 - logger.warning(f"Target lost: frame {self.target_lost_frames}/{self.max_lost_frames}") - + logger.warning( + f"Target lost: frame {self.target_lost_frames}/{self.max_lost_frames}" + ) + # Check if target is lost for too many frames if self.target_lost_frames >= self.max_lost_frames: logger.info("Target lost for too many frames, stopping tracking") self.stop_tracking() return {"linear_vel": 0.0, "angular_vel": 0.0, "running": False} - + return {"linear_vel": 0.0, "angular_vel": 0.0} - - + def _compute_control(self, distance: float, angle: float) -> Dict[str, float]: """ Compute control commands based on measured distance and angle. - + Args: distance: Measured distance to target in meters angle: Measured angle to target in radians - + Returns: Dict with linear_vel and angular_vel keys """ current_time = time.time() dt = current_time - self.last_control_time self.last_control_time = current_time - + # Compute control with visual servoing controller linear_vel, angular_vel = self.controller.compute_control( measured_distance=distance, measured_angle=angle, desired_distance=self.desired_distance, desired_angle=0.0, # Keep target centered - dt=dt + dt=dt, ) - + # Log control values for debugging logger.debug(f"Distance: {distance:.2f}m, Angle: {np.rad2deg(angle):.1f}°") - logger.debug(f"Control: linear={linear_vel:.2f}m/s, angular={angular_vel:.2f}rad/s") - - return { - "linear_vel": linear_vel, - "angular_vel": angular_vel - } - - def _find_best_target_by_iou(self, bbox: List[float], targets: List[Dict]) -> Optional[Dict]: + logger.debug( + f"Control: linear={linear_vel:.2f}m/s, angular={angular_vel:.2f}rad/s" + ) + + return {"linear_vel": linear_vel, "angular_vel": angular_vel} + + def _find_best_target_by_iou( + self, bbox: List[float], targets: List[Dict] + ) -> Optional[Dict]: """ Find the target with highest IOU to the given bbox. - + Args: bbox: Bounding box to match [x1, y1, x2, y2] targets: List of target dictionaries - + Returns: Best matching target or None if no match found """ if not targets: return None - + best_iou = self.iou_threshold best_target = None - + for target in targets: target_bbox = target.get("bbox") if target_bbox is None: continue - + iou = calculate_iou(bbox, target_bbox) if iou > best_iou: best_iou = iou best_target = target - + return best_target - + def _find_closest_target(self, targets: List[Dict]) -> Optional[Dict]: """ Find the target with shortest distance to the camera. - + Args: targets: List of target dictionaries - + Returns: The closest target or None if no targets available """ if not targets: return None - + closest_target = None - min_distance = float('inf') - + min_distance = float("inf") + for target in targets: distance = target.get("distance") if distance is not None and distance < min_distance: min_distance = distance closest_target = target - + return closest_target - + def _subscribe_to_tracking_stream(self): """ Subscribe to the already set up tracking stream. @@ -385,56 +404,56 @@ def _subscribe_to_tracking_stream(self): if self.tracking_stream is None: logger.warning("No tracking stream provided to subscribe to") return - + try: # Set up subscription to process frames self.subscription = self.tracking_stream.subscribe( on_next=self._on_tracking_result, on_error=self._on_tracking_error, - on_completed=self._on_tracking_completed + on_completed=self._on_tracking_completed, ) - + logger.info("Subscribed to tracking stream successfully") except Exception as e: logger.error(f"Error subscribing to tracking stream: {e}") - + def _on_tracking_result(self, result): """ Callback for tracking stream results. - + This updates the latest result for use by _get_current_tracking_result. - + Args: result: The result from the tracking stream """ if self.stop_event.is_set(): return - + # Update the latest result with self.result_lock: self.latest_result = result - + def _on_tracking_error(self, error): """ Callback for tracking stream errors. - + Args: error: The error from the tracking stream """ logger.error(f"Tracking stream error: {error}") self.stop_event.set() - + def _on_tracking_completed(self): """Callback for tracking stream completion.""" logger.info("Tracking stream completed") self.stop_event.set() - + def _get_current_tracking_result(self) -> Optional[Dict]: """ Get the current tracking result. - + Returns the latest result cached from the tracking stream subscription. - + Returns: Dict with 'frame' and 'targets' or None if not available """ @@ -450,32 +469,36 @@ def stop_tracking(self): self.current_distance = None self.current_angle = None return {"linear_vel": 0.0, "angular_vel": 0.0, "running": False} - + def is_goal_reached(self, distance_threshold=0.2, angle_threshold=0.1) -> bool: """ Check if the robot has reached the tracking goal (desired distance and angle). - + Args: distance_threshold: Maximum allowed difference between current and desired distance (meters) angle_threshold: Maximum allowed difference between current and desired angle (radians) - + Returns: bool: True if both distance and angle are within threshold of desired values """ if not self.running or self.current_target is None: return False - + # Use the stored distance and angle values if self.current_distance is None or self.current_angle is None: return False - + # Check if within thresholds distance_error = abs(self.current_distance - self.desired_distance) angle_error = abs(self.current_angle) # Desired angle is always 0 (centered) - - logger.debug(f"Goal check - Distance error: {distance_error:.2f}m, Angle error: {angle_error:.2f}rad") - - return (distance_error <= distance_threshold) and (angle_error <= angle_threshold) + + logger.debug( + f"Goal check - Distance error: {distance_error:.2f}m, Angle error: {angle_error:.2f}rad" + ) + + return (distance_error <= distance_threshold) and ( + angle_error <= angle_threshold + ) def cleanup(self): """Clean up all resources used by the visual servoing.""" diff --git a/dimos/robot/abstract_robot.py b/dimos/robot/abstract_robot.py index 4c6345f1b0..ffe69dde6d 100644 --- a/dimos/robot/abstract_robot.py +++ b/dimos/robot/abstract_robot.py @@ -6,60 +6,58 @@ """ from abc import ABC, abstractmethod -from typing import Any, Union, Optional from reactivex.observable import Observable -import numpy as np class AbstractRobot(ABC): """Abstract base class for all robot implementations. - + This class defines the minimal interface that all robot implementations must provide, regardless of whether they use ROS, WebRTC, or other communication protocols. """ - + @abstractmethod def connect(self) -> bool: """Establish a connection to the robot. - - This method should handle all necessary setup to establish + + This method should handle all necessary setup to establish communication with the robot hardware. - + Returns: bool: True if connection was successful, False otherwise. """ pass - + @abstractmethod def move(self, *args, **kwargs) -> bool: """Move the robot. - + This is a generic movement interface that should be implemented by all robot classes. The exact parameters will depend on the specific robot implementation. - + Returns: bool: True if movement command was successfully sent. """ pass - + @abstractmethod def get_video_stream(self, fps: int = 30) -> Observable: """Get a video stream from the robot's camera. - + Args: fps: Frames per second for the video stream. Defaults to 30. - + Returns: Observable: An observable stream of video frames. """ pass - + @abstractmethod def stop(self) -> None: """Clean up resources and stop the robot. - + This method should handle all necessary cleanup when shutting down the robot connection, including stopping any ongoing movements. """ diff --git a/dimos/robot/global_planner/algo.py b/dimos/robot/global_planner/algo.py index c553a5e659..8f76a87f29 100644 --- a/dimos/robot/global_planner/algo.py +++ b/dimos/robot/global_planner/algo.py @@ -8,20 +8,20 @@ def find_nearest_free_cell( - costmap: Costmap, - position: VectorLike, + costmap: Costmap, + position: VectorLike, cost_threshold: int = 90, - max_search_radius: int = 20 + max_search_radius: int = 20, ) -> Tuple[int, int]: """ Find the nearest unoccupied cell in the costmap using BFS. - + Args: costmap: Costmap object containing the environment position: Position to find nearest free cell from cost_threshold: Cost threshold above which a cell is considered an obstacle max_search_radius: Maximum search radius in cells - + Returns: Tuple of (x, y) in grid coordinates of the nearest free cell, or the original position if no free cell is found within max_search_radius @@ -29,43 +29,53 @@ def find_nearest_free_cell( # Convert world coordinates to grid coordinates grid_pos = costmap.world_to_grid(position) start_x, start_y = int(grid_pos.x), int(grid_pos.y) - + # If the cell is already free, return it if 0 <= start_x < costmap.width and 0 <= start_y < costmap.height: if costmap.grid[start_y, start_x] < cost_threshold: return (start_x, start_y) - + # BFS to find nearest free cell queue = deque([(start_x, start_y, 0)]) # (x, y, distance) visited = set([(start_x, start_y)]) - + # Possible movements (8-connected grid) directions = [ - (0, 1), (1, 0), (0, -1), (-1, 0), # horizontal/vertical - (1, 1), (1, -1), (-1, 1), (-1, -1) # diagonal + (0, 1), + (1, 0), + (0, -1), + (-1, 0), # horizontal/vertical + (1, 1), + (1, -1), + (-1, 1), + (-1, -1), # diagonal ] - + while queue: x, y, dist = queue.popleft() - + # Check if we've reached the maximum search radius if dist > max_search_radius: - print(f"Could not find free cell within {max_search_radius} cells of ({start_x}, {start_y})") + print( + f"Could not find free cell within {max_search_radius} cells of ({start_x}, {start_y})" + ) return (start_x, start_y) # Return original position if no free cell found - + # Check if this cell is valid and free if 0 <= x < costmap.width and 0 <= y < costmap.height: if costmap.grid[y, x] < cost_threshold: - print(f"Found free cell at ({x}, {y}), {dist} cells away from ({start_x}, {start_y})") + print( + f"Found free cell at ({x}, {y}), {dist} cells away from ({start_x}, {start_y})" + ) return (x, y) - + # Add neighbors to the queue for dx, dy in directions: nx, ny = x + dx, y + dy if (nx, ny) not in visited: visited.add((nx, ny)) queue.append((nx, ny, dist + 1)) - + # If the queue is empty and no free cell is found, return the original position return (start_x, start_y) @@ -93,38 +103,48 @@ def astar( # Convert world coordinates to grid coordinates directly using vector-like inputs start_vector = costmap.world_to_grid(start) goal_vector = costmap.world_to_grid(goal) - + # Store original positions for reference original_start = (int(start_vector.x), int(start_vector.y)) original_goal = (int(goal_vector.x), int(goal_vector.y)) - + adjusted_start = original_start adjusted_goal = original_goal # Check if start is out of bounds or in an obstacle - start_valid = (0 <= start_vector.x < costmap.width and - 0 <= start_vector.y < costmap.height) - + start_valid = ( + 0 <= start_vector.x < costmap.width and 0 <= start_vector.y < costmap.height + ) + start_in_obstacle = False if start_valid: - start_in_obstacle = costmap.grid[int(start_vector.y), int(start_vector.x)] >= cost_threshold - + start_in_obstacle = ( + costmap.grid[int(start_vector.y), int(start_vector.x)] >= cost_threshold + ) + if not start_valid or start_in_obstacle: - print("Start position is out of bounds or in an obstacle, finding nearest free cell") + print( + "Start position is out of bounds or in an obstacle, finding nearest free cell" + ) adjusted_start = find_nearest_free_cell(costmap, start, cost_threshold) # Update start_vector for later use start_vector = Vector(adjusted_start[0], adjusted_start[1]) # Check if goal is out of bounds or in an obstacle - goal_valid = (0 <= goal_vector.x < costmap.width and - 0 <= goal_vector.y < costmap.height) - + goal_valid = ( + 0 <= goal_vector.x < costmap.width and 0 <= goal_vector.y < costmap.height + ) + goal_in_obstacle = False if goal_valid: - goal_in_obstacle = costmap.grid[int(goal_vector.y), int(goal_vector.x)] >= cost_threshold - + goal_in_obstacle = ( + costmap.grid[int(goal_vector.y), int(goal_vector.x)] >= cost_threshold + ) + if not goal_valid or goal_in_obstacle: - print("Goal position is out of bounds or in an obstacle, finding nearest free cell") + print( + "Goal position is out of bounds or in an obstacle, finding nearest free cell" + ) adjusted_goal = find_nearest_free_cell(costmap, goal, cost_threshold) # Update goal_vector for later use goal_vector = Vector(adjusted_goal[0], adjusted_goal[1]) @@ -149,7 +169,9 @@ def astar( # Cost for each movement (straight vs diagonal) sc = 1.0 dc = 1.42 - movement_costs = [sc, sc, sc, sc, dc, dc, dc, dc] if allow_diagonal else [sc, sc, sc, sc] + movement_costs = ( + [sc, sc, sc, sc, dc, dc, dc, dc] if allow_diagonal else [sc, sc, sc, sc] + ) # A* algorithm implementation open_set = [] # Priority queue for nodes to explore @@ -168,7 +190,9 @@ def heuristic(x1, y1, x2, y2): return math.sqrt((x2 - x1) ** 2 + (y2 - y1) ** 2) # Start with the starting node - f_score = g_score[start_tuple] + heuristic(start_tuple[0], start_tuple[1], goal_tuple[0], goal_tuple[1]) + f_score = g_score[start_tuple] + heuristic( + start_tuple[0], start_tuple[1], goal_tuple[0], goal_tuple[1] + ) heapq.heappush(open_set, (f_score, start_tuple)) while open_set: @@ -197,7 +221,7 @@ def heuristic(x1, y1, x2, y2): if not waypoints or waypoints[-1].distance(goal_point) > 1e-5: waypoints.append(goal_point) - + # If we adjusted the goal, add the original goal as the final point if adjusted_goal != original_goal and goal_valid: original_goal_point = costmap.grid_to_world(original_goal) @@ -214,7 +238,9 @@ def heuristic(x1, y1, x2, y2): neighbor = (neighbor_x, neighbor_y) # Check if the neighbor is valid - if not (0 <= neighbor_x < costmap.width and 0 <= neighbor_y < costmap.height): + if not ( + 0 <= neighbor_x < costmap.width and 0 <= neighbor_y < costmap.height + ): continue # Check if the neighbor is already explored @@ -227,7 +253,11 @@ def heuristic(x1, y1, x2, y2): continue obstacle_proximity_penalty = costmap.grid[neighbor_y, neighbor_x] / 25 - tentative_g_score = g_score[current] + movement_costs[i] + (obstacle_proximity_penalty * movement_costs[i]) + tentative_g_score = ( + g_score[current] + + movement_costs[i] + + (obstacle_proximity_penalty * movement_costs[i]) + ) # Get the current g_score for the neighbor or set to infinity if not yet explored neighbor_g_score = g_score.get(neighbor, float("inf")) @@ -237,7 +267,9 @@ def heuristic(x1, y1, x2, y2): # Update the neighbor's scores and parent parents[neighbor] = current g_score[neighbor] = tentative_g_score - f_score = tentative_g_score + heuristic(neighbor_x, neighbor_y, goal_tuple[0], goal_tuple[1]) + f_score = tentative_g_score + heuristic( + neighbor_x, neighbor_y, goal_tuple[0], goal_tuple[1] + ) # Add the neighbor to the open set with its f_score heapq.heappush(open_set, (f_score, neighbor)) diff --git a/dimos/robot/global_planner/planner.py b/dimos/robot/global_planner/planner.py index 0a59428917..f4b5d17bc6 100644 --- a/dimos/robot/global_planner/planner.py +++ b/dimos/robot/global_planner/planner.py @@ -35,7 +35,10 @@ class Planner(Visualizable): def plan(self, goal: VectorLike) -> Path: ... def set_goal( - self, goal: VectorLike, goal_theta: Optional[float] = None, stop_event: Optional[threading.Event] = None + self, + goal: VectorLike, + goal_theta: Optional[float] = None, + stop_event: Optional[threading.Event] = None, ): path = self.plan(goal) if not path: diff --git a/dimos/robot/local_planner/__init__.py b/dimos/robot/local_planner/__init__.py index 72a7adea57..472b58dcd2 100644 --- a/dimos/robot/local_planner/__init__.py +++ b/dimos/robot/local_planner/__init__.py @@ -4,4 +4,4 @@ navigate_path_local, ) -from dimos.robot.local_planner.vfh_local_planner import VFHPurePursuitPlanner \ No newline at end of file +from dimos.robot.local_planner.vfh_local_planner import VFHPurePursuitPlanner diff --git a/dimos/robot/local_planner/local_planner.py b/dimos/robot/local_planner/local_planner.py index f32d8db81f..6e98ac0e50 100644 --- a/dimos/robot/local_planner/local_planner.py +++ b/dimos/robot/local_planner/local_planner.py @@ -2,7 +2,7 @@ import math import numpy as np -from typing import Dict, Tuple, Optional, List, Any, Callable, Protocol +from typing import Dict, Tuple, Optional, Callable from abc import ABC, abstractmethod import cv2 from reactivex import Observable @@ -12,46 +12,43 @@ import logging from collections import deque from dimos.utils.logging_config import setup_logger -from dimos.utils.ros_utils import ( - normalize_angle, - distance_angle_to_goal_xy -) +from dimos.utils.ros_utils import normalize_angle, distance_angle_to_goal_xy -from dimos.robot.robot import Robot from dimos.types.vector import VectorLike, Vector, to_tuple from dimos.types.path import Path -from dimos.types.costmap import Costmap -from dimos.robot.global_planner.algo import astar from nav_msgs.msg import OccupancyGrid logger = setup_logger("dimos.robot.unitree.local_planner", level=logging.DEBUG) + class BaseLocalPlanner(ABC): """ Abstract base class for local planners that handle obstacle avoidance and path following. - - This class defines the common interface and shared functionality that all local planners + + This class defines the common interface and shared functionality that all local planners must implement, regardless of the specific algorithm used. """ - - def __init__(self, - get_costmap: Callable[[], Optional[OccupancyGrid]], - transform: object, - move_vel_control: Callable[[float, float, float], None], - safety_threshold: float = 0.5, - max_linear_vel: float = 0.8, - max_angular_vel: float = 1.0, - lookahead_distance: float = 1.0, - goal_tolerance: float = 0.75, - angle_tolerance: float = 0.15, - robot_width: float = 0.5, - robot_length: float = 0.7, - visualization_size: int = 400, - control_frequency: float = 10.0, - safe_goal_distance: float = 1.5): # Control frequency in Hz + + def __init__( + self, + get_costmap: Callable[[], Optional[OccupancyGrid]], + transform: object, + move_vel_control: Callable[[float, float, float], None], + safety_threshold: float = 0.5, + max_linear_vel: float = 0.8, + max_angular_vel: float = 1.0, + lookahead_distance: float = 1.0, + goal_tolerance: float = 0.75, + angle_tolerance: float = 0.15, + robot_width: float = 0.5, + robot_length: float = 0.7, + visualization_size: int = 400, + control_frequency: float = 10.0, + safe_goal_distance: float = 1.5, + ): # Control frequency in Hz """ Initialize the base local planner. - + Args: get_costmap: Function to get the latest local costmap transform: Object with transform methods (transform_point, transform_rot, etc.) @@ -72,7 +69,7 @@ def __init__(self, self.get_costmap = get_costmap self.transform = transform self.move_vel_control = move_vel_control - + # Store parameters self.safety_threshold = safety_threshold self.max_linear_vel = max_linear_vel @@ -85,31 +82,53 @@ def __init__(self, self.visualization_size = visualization_size self.control_frequency = control_frequency self.control_period = 1.0 / control_frequency # Period in seconds - self.safe_goal_distance = safe_goal_distance # Distance to ignore obstacles at goal + self.safe_goal_distance = ( + safe_goal_distance # Distance to ignore obstacles at goal + ) self.ignore_obstacles = False # Flag for derived classes to check # Goal and Waypoint Tracking - self.goal_xy: Optional[Tuple[float, float]] = None # Current target for planning + self.goal_xy: Optional[Tuple[float, float]] = ( + None # Current target for planning + ) self.goal_theta: Optional[float] = None # Goal orientation in odom frame - self.position_reached: bool = False # Flag indicating if position goal is reached - self.waypoints: Optional[Path] = None # Full path if following waypoints - self.waypoints_in_odom: Optional[Path] = None # Full path in odom frame - self.waypoint_frame: Optional[str] = None # Frame of the waypoints - self.current_waypoint_index: int = 0 # Index of the next waypoint to reach - self.final_goal_reached: bool = False # Flag indicating if the final waypoint is reached + self.position_reached: bool = ( + False # Flag indicating if position goal is reached + ) + self.waypoints: Optional[Path] = None # Full path if following waypoints + self.waypoints_in_odom: Optional[Path] = None # Full path in odom frame + self.waypoint_frame: Optional[str] = None # Frame of the waypoints + self.current_waypoint_index: int = 0 # Index of the next waypoint to reach + self.final_goal_reached: bool = ( + False # Flag indicating if the final waypoint is reached + ) # Stuck detection - self.stuck_detection_window_seconds = 8.0 # Time window for stuck detection (seconds) - self.position_history_size = int(self.stuck_detection_window_seconds * control_frequency) - self.position_history = deque(maxlen=self.position_history_size) # History of recent positions - self.stuck_distance_threshold = 0.1 # Distance threshold for stuck detection (meters) - self.unstuck_distance_threshold = 0.5 # Distance threshold for unstuck detection (meters) + self.stuck_detection_window_seconds = ( + 8.0 # Time window for stuck detection (seconds) + ) + self.position_history_size = int( + self.stuck_detection_window_seconds * control_frequency + ) + self.position_history = deque( + maxlen=self.position_history_size + ) # History of recent positions + self.stuck_distance_threshold = ( + 0.1 # Distance threshold for stuck detection (meters) + ) + self.unstuck_distance_threshold = ( + 0.5 # Distance threshold for unstuck detection (meters) + ) self.stuck_time_threshold = 4.0 # Time threshold for stuck detection (seconds) self.is_recovery_active = False # Whether recovery behavior is active self.recovery_start_time = 0.0 # When recovery behavior started - self.recovery_duration = 8.0 # How long to run recovery before giving up (seconds) + self.recovery_duration = ( + 8.0 # How long to run recovery before giving up (seconds) + ) self.last_update_time = time.time() # Last time position was updated - self.navigation_failed = False # Flag indicating if navigation should be terminated + self.navigation_failed = ( + False # Flag indicating if navigation should be terminated + ) def reset(self): """ @@ -121,16 +140,21 @@ def reset(self): self.is_recovery_active = False self.recovery_start_time = 0.0 self.last_update_time = time.time() - + # Reset navigation state flags self.navigation_failed = False self.position_reached = False self.final_goal_reached = False self.ignore_obstacles = False - + logger.info("Local planner state has been reset") - def set_goal(self, goal_xy: VectorLike, frame: str = "odom", goal_theta: Optional[float] = None): + def set_goal( + self, + goal_xy: VectorLike, + frame: str = "odom", + goal_theta: Optional[float] = None, + ): """Set a single goal position, converting to odom frame if necessary. This clears any existing waypoints being followed. @@ -141,33 +165,45 @@ def set_goal(self, goal_xy: VectorLike, frame: str = "odom", goal_theta: Optiona """ # Reset all state variables self.reset() - + # Clear waypoint following state self.waypoints = None self.current_waypoint_index = 0 - self.goal_xy = None # Clear previous goal - self.goal_theta = None # Clear previous goal orientation + self.goal_xy = None # Clear previous goal + self.goal_theta = None # Clear previous goal orientation target_goal_xy: Optional[Tuple[float, float]] = None - target_goal_xy = self.transform.transform_point(goal_xy, source_frame=frame, target_frame="odom").to_tuple() + target_goal_xy = self.transform.transform_point( + goal_xy, source_frame=frame, target_frame="odom" + ).to_tuple() + + logger.info( + f"Goal set directly in odom frame: ({target_goal_xy[0]:.2f}, {target_goal_xy[1]:.2f})" + ) - logger.info(f"Goal set directly in odom frame: ({target_goal_xy[0]:.2f}, {target_goal_xy[1]:.2f})") - # Check if goal is valid (in bounds and not colliding) - if not self.is_goal_in_costmap_bounds(target_goal_xy) or self.check_goal_collision(target_goal_xy): - logger.warning("Goal is in collision or out of bounds. Adjusting goal to valid position.") + if not self.is_goal_in_costmap_bounds( + target_goal_xy + ) or self.check_goal_collision(target_goal_xy): + logger.warning( + "Goal is in collision or out of bounds. Adjusting goal to valid position." + ) self.goal_xy = self.adjust_goal_to_valid_position(target_goal_xy) else: - self.goal_xy = target_goal_xy # Set the adjusted or original valid goal - + self.goal_xy = target_goal_xy # Set the adjusted or original valid goal + # Set goal orientation if provided if goal_theta is not None: - transformed_rot = self.transform.transform_rot(Vector(0.0, 0.0, goal_theta), source_frame=frame, target_frame="odom") + transformed_rot = self.transform.transform_rot( + Vector(0.0, 0.0, goal_theta), source_frame=frame, target_frame="odom" + ) self.goal_theta = transformed_rot[2] - def set_goal_waypoints(self, waypoints: Path, frame: str = "map", goal_theta: Optional[float] = None): - """Sets a path of waypoints for the robot to follow. + def set_goal_waypoints( + self, waypoints: Path, frame: str = "map", goal_theta: Optional[float] = None + ): + """Sets a path of waypoints for the robot to follow. Args: waypoints: A list of waypoints to follow. Each waypoint is a tuple of (x, y) coordinates in odom frame. @@ -178,7 +214,9 @@ def set_goal_waypoints(self, waypoints: Path, frame: str = "map", goal_theta: Op self.reset() if not isinstance(waypoints, Path) or len(waypoints) == 0: - logger.warning("Invalid or empty path provided to set_goal_waypoints. Ignoring.") + logger.warning( + "Invalid or empty path provided to set_goal_waypoints. Ignoring." + ) self.waypoints = None self.waypoint_frame = None self.goal_xy = None @@ -192,25 +230,31 @@ def set_goal_waypoints(self, waypoints: Path, frame: str = "map", goal_theta: Op self.current_waypoint_index = 0 # Transform waypoints to odom frame - self.waypoints_in_odom = self.transform.transform_path(self.waypoints, source_frame=frame, target_frame="odom") - + self.waypoints_in_odom = self.transform.transform_path( + self.waypoints, source_frame=frame, target_frame="odom" + ) + # Set the initial target to the first waypoint, adjusting if necessary first_waypoint = self.waypoints_in_odom[0] - if not self.is_goal_in_costmap_bounds(first_waypoint) or self.check_goal_collision(first_waypoint): + if not self.is_goal_in_costmap_bounds( + first_waypoint + ) or self.check_goal_collision(first_waypoint): logger.warning("First waypoint is invalid. Adjusting...") self.goal_xy = self.adjust_goal_to_valid_position(first_waypoint) else: - self.goal_xy = to_tuple(first_waypoint) # Initial target - + self.goal_xy = to_tuple(first_waypoint) # Initial target + # Set goal orientation if provided if goal_theta is not None: - transformed_rot = self.transform.transform_rot(Vector(0.0, 0.0, goal_theta), source_frame=frame, target_frame="odom") + transformed_rot = self.transform.transform_rot( + Vector(0.0, 0.0, goal_theta), source_frame=frame, target_frame="odom" + ) self.goal_theta = transformed_rot[2] def _get_robot_pose(self) -> Tuple[Tuple[float, float], float]: """ Get the current robot position and orientation. - + Returns: Tuple containing: - position as (x, y) tuple @@ -218,11 +262,11 @@ def _get_robot_pose(self) -> Tuple[Tuple[float, float], float]: """ [pos, rot] = self.transform.transform_euler("base_link", "odom") return (pos[0], pos[1]), rot[2] - + def _get_final_goal_position(self) -> Optional[Tuple[float, float]]: """ Get the final goal position (either last waypoint or direct goal). - + Returns: Tuple (x, y) of the final goal, or None if no goal is set """ @@ -231,32 +275,37 @@ def _get_final_goal_position(self) -> Optional[Tuple[float, float]]: elif self.goal_xy is not None: return self.goal_xy return None - + def _distance_to_position(self, target_position: Tuple[float, float]) -> float: """ Calculate distance from the robot to a target position. - + Args: target_position: Target (x, y) position - + Returns: Distance in meters """ robot_pos, _ = self._get_robot_pose() - return np.linalg.norm([target_position[0] - robot_pos[0], - target_position[1] - robot_pos[1]]) - + return np.linalg.norm( + [target_position[0] - robot_pos[0], target_position[1] - robot_pos[1]] + ) + def plan(self) -> Dict[str, float]: """ Main planning method that computes velocity commands. This includes common planning logic like waypoint following, with algorithm-specific calculations delegated to subclasses. - + Returns: Dict[str, float]: Velocity commands with 'x_vel' and 'angular_vel' keys """ # If goal orientation is specified, rotate to match it - if self.position_reached and self.goal_theta is not None and not self._is_goal_orientation_reached(): + if ( + self.position_reached + and self.goal_theta is not None + and not self._is_goal_orientation_reached() + ): logger.info("Position goal reached. Rotating to target orientation.") return self._rotate_to_goal_orientation() @@ -264,86 +313,92 @@ def plan(self) -> Dict[str, float]: if self.check_if_stuck() and not self.position_reached: # Check if we're stuck but close to our goal final_goal_pos = self._get_final_goal_position() - + # If we have a goal position, check distance to it if final_goal_pos is not None: distance_to_goal = self._distance_to_position(final_goal_pos) - + # If we're stuck but within 2x safe_goal_distance of the goal, consider it a success if distance_to_goal < 2.0 * self.safe_goal_distance: - logger.info(f"Robot is stuck but within {distance_to_goal:.2f}m of goal (< {2.0 * self.safe_goal_distance:.2f}m). Considering navigation successful.") + logger.info( + f"Robot is stuck but within {distance_to_goal:.2f}m of goal (< {2.0 * self.safe_goal_distance:.2f}m). Considering navigation successful." + ) self.position_reached = True - return {'x_vel': 0.0, 'angular_vel': 0.0} - - # Otherwise, execute normal recovery behavior + return {"x_vel": 0.0, "angular_vel": 0.0} + + # Otherwise, execute normal recovery behavior logger.warning("Robot is stuck - executing recovery behavior") return self.execute_recovery_behavior() - + # Reset obstacle ignore flag self.ignore_obstacles = False - - # --- Waypoint Following Mode --- + + # --- Waypoint Following Mode --- if self.waypoints is not None: if self.final_goal_reached: logger.info("Final waypoint reached. Stopping.") - return {'x_vel': 0.0, 'angular_vel': 0.0} - + return {"x_vel": 0.0, "angular_vel": 0.0} + # Get current robot pose robot_pos, robot_theta = self._get_robot_pose() robot_pos_np = np.array(robot_pos) - + # Check if close to final waypoint if self.waypoints_in_odom is not None and len(self.waypoints_in_odom) > 0: final_waypoint = self.waypoints_in_odom[-1] dist_to_final = np.linalg.norm(robot_pos_np - final_waypoint) - + # If we're close to the final waypoint, adjust it and ignore obstacles if dist_to_final < self.safe_goal_distance: final_wp_tuple = to_tuple(final_waypoint) adjusted_goal = self.adjust_goal_to_valid_position(final_wp_tuple) # Create a new Path with the adjusted final waypoint - new_waypoints = self.waypoints_in_odom[:-1] # Get all but the last waypoint + new_waypoints = self.waypoints_in_odom[ + :-1 + ] # Get all but the last waypoint new_waypoints.append(adjusted_goal) # Append the adjusted goal self.waypoints_in_odom = new_waypoints self.ignore_obstacles = True - logger.debug(f"Within safe distance of final waypoint. Ignoring obstacles.") - + logger.debug( + "Within safe distance of final waypoint. Ignoring obstacles." + ) + # Update the target goal based on waypoint progression just_reached_final = self._update_waypoint_target(robot_pos_np) - + # If the helper indicates the final goal was just reached, stop immediately if just_reached_final: - return {'x_vel': 0.0, 'angular_vel': 0.0} + return {"x_vel": 0.0, "angular_vel": 0.0} - # --- Single Goal or Current Waypoint Target Set --- + # --- Single Goal or Current Waypoint Target Set --- if self.goal_xy is None: # If no goal is set (e.g., empty path or rejected goal), stop. - return {'x_vel': 0.0, 'angular_vel': 0.0} + return {"x_vel": 0.0, "angular_vel": 0.0} # Get necessary data for planning costmap = self.get_costmap() if costmap is None: logger.warning("Local costmap is None. Cannot plan.") - return {'x_vel': 0.0, 'angular_vel': 0.0} - + return {"x_vel": 0.0, "angular_vel": 0.0} + # Check if close to single goal mode goal if self.waypoints is None: # Get distance to goal goal_distance = self._distance_to_position(self.goal_xy) - + # If within safe distance of goal, adjust it and ignore obstacles if goal_distance < self.safe_goal_distance: self.goal_xy = self.adjust_goal_to_valid_position(self.goal_xy) self.ignore_obstacles = True - logger.debug(f"Within safe distance of goal. Ignoring obstacles.") - + logger.debug("Within safe distance of goal. Ignoring obstacles.") + # First check position if goal_distance < self.goal_tolerance or self.position_reached: self.position_reached = True else: self.position_reached = False - + # Call the algorithm-specific planning implementation return self._compute_velocity_commands() @@ -352,7 +407,7 @@ def _compute_velocity_commands(self) -> Dict[str, float]: """ Algorithm-specific method to compute velocity commands. Must be implemented by derived classes. - + Returns: Dict[str, float]: Velocity commands with 'x_vel' and 'angular_vel' keys """ @@ -360,78 +415,84 @@ def _compute_velocity_commands(self) -> Dict[str, float]: def _rotate_to_goal_orientation(self) -> Dict[str, float]: """Compute velocity commands to rotate to the goal orientation. - + Returns: Dict[str, float]: Velocity commands with zero linear velocity """ # Get current robot orientation _, robot_theta = self._get_robot_pose() - + # Calculate the angle difference angle_diff = normalize_angle(self.goal_theta - robot_theta) - + # Determine rotation direction and speed if abs(angle_diff) < self.angle_tolerance: # Already at correct orientation - return {'x_vel': 0.0, 'angular_vel': 0.0} - + return {"x_vel": 0.0, "angular_vel": 0.0} + # Calculate rotation speed - proportional to the angle difference # but capped at max_angular_vel direction = 1.0 if angle_diff > 0 else -1.0 angular_vel = direction * min(abs(angle_diff) * 2.0, self.max_angular_vel) - + # logger.debug(f"Rotating to goal orientation: angle_diff={angle_diff:.4f}, angular_vel={angular_vel:.4f}") - return {'x_vel': 0.0, 'angular_vel': angular_vel} + return {"x_vel": 0.0, "angular_vel": angular_vel} def _is_goal_orientation_reached(self) -> bool: """Check if the current robot orientation matches the goal orientation. - + Returns: bool: True if orientation is reached or no orientation goal is set """ if self.goal_theta is None: return True # No orientation goal set - + # Get current robot orientation _, robot_theta = self._get_robot_pose() - + # Calculate the angle difference and normalize angle_diff = abs(normalize_angle(self.goal_theta - robot_theta)) - - logger.debug(f"Orientation error: {angle_diff:.4f} rad, tolerance: {self.angle_tolerance:.4f} rad") + + logger.debug( + f"Orientation error: {angle_diff:.4f} rad, tolerance: {self.angle_tolerance:.4f} rad" + ) return angle_diff <= self.angle_tolerance def _update_waypoint_target(self, robot_pos_np: np.ndarray) -> bool: """Helper function to manage waypoint progression and update the target goal. - + Args: robot_pos_np: Current robot position as a numpy array [x, y]. - + Returns: bool: True if the final waypoint has just been reached, False otherwise. """ if self.waypoints is None or len(self.waypoints) == 0: return False # Not in waypoint mode or empty path - - self.waypoints_in_odom = self.transform.transform_path(self.waypoints, source_frame=self.waypoint_frame, target_frame="odom") + + self.waypoints_in_odom = self.transform.transform_path( + self.waypoints, source_frame=self.waypoint_frame, target_frame="odom" + ) # Check if final goal is reached final_waypoint = self.waypoints_in_odom[-1] dist_to_final = np.linalg.norm(robot_pos_np - final_waypoint) - + if dist_to_final < self.goal_tolerance: self.position_reached = True self.goal_xy = to_tuple(final_waypoint) - + # If goal orientation is not specified or achieved, consider fully reached if self.goal_theta is None or self._is_goal_orientation_reached(): self.final_goal_reached = True logger.info("Reached final waypoint with correct orientation.") return True else: - logger.info("Reached final waypoint position, rotating to target orientation.") + logger.info( + "Reached final waypoint position, rotating to target orientation." + ) return False - + # Always find the lookahead point lookahead_point = None for i in range(self.current_waypoint_index, len(self.waypoints_in_odom)): @@ -442,14 +503,16 @@ def _update_waypoint_target(self, robot_pos_np: np.ndarray) -> bool: # Update current waypoint index to this point self.current_waypoint_index = i break - + # If no point is far enough, target the final waypoint if lookahead_point is None: lookahead_point = self.waypoints_in_odom[-1] self.current_waypoint_index = len(self.waypoints_in_odom) - 1 - + # Set the lookahead point as the immediate target, adjusting if needed - if not self.is_goal_in_costmap_bounds(lookahead_point) or self.check_goal_collision(lookahead_point): + if not self.is_goal_in_costmap_bounds( + lookahead_point + ) or self.check_goal_collision(lookahead_point): logger.debug("Lookahead point is invalid. Adjusting...") adjusted_lookahead = self.adjust_goal_to_valid_position(lookahead_point) # Only update if adjustment didn't fail completely @@ -457,7 +520,7 @@ def _update_waypoint_target(self, robot_pos_np: np.ndarray) -> bool: self.goal_xy = adjusted_lookahead else: self.goal_xy = to_tuple(lookahead_point) - + return False # Final goal not reached in this update cycle @abstractmethod @@ -465,7 +528,7 @@ def update_visualization(self) -> np.ndarray: """ Generate visualization of the planning state. Must be implemented by derived classes. - + Returns: np.ndarray: Visualization image as numpy array """ @@ -474,46 +537,48 @@ def update_visualization(self) -> np.ndarray: def create_stream(self, frequency_hz: float = None) -> Observable: """ Create an Observable stream that emits the visualization image at a fixed frequency. - + Args: frequency_hz: Optional frequency override (defaults to 1/4 of control_frequency if None) - + Returns: Observable: Stream of visualization frames """ # Default to 1/4 of control frequency if not specified (to reduce CPU usage) if frequency_hz is None: frequency_hz = self.control_frequency / 4.0 - + subject = Subject() sleep_time = 1.0 / frequency_hz - + def frame_emitter(): while True: try: # Generate the frame using the updated method - frame = self.update_visualization() + frame = self.update_visualization() subject.on_next(frame) except Exception as e: logger.error(f"Error in frame emitter thread: {e}") # Optionally, emit an error frame or simply skip # subject.on_error(e) # This would terminate the stream time.sleep(sleep_time) - + emitter_thread = threading.Thread(target=frame_emitter, daemon=True) emitter_thread.start() - logger.info(f"Started visualization frame emitter thread at {frequency_hz:.1f} Hz") + logger.info( + f"Started visualization frame emitter thread at {frequency_hz:.1f} Hz" + ) return subject - + @abstractmethod def check_collision(self, direction: float) -> bool: """ Check if there's a collision in the given direction. Must be implemented by derived classes. - + Args: direction: Direction to check for collision in radians - + Returns: bool: True if collision detected, False otherwise """ @@ -527,34 +592,34 @@ def is_goal_reached(self) -> bool: else: # Single goal mode: check distance to the single goal and orientation if self.goal_xy is None: - return False # No goal set - + return False # No goal set + return self.position_reached and self._is_goal_orientation_reached() def check_goal_collision(self, goal_xy: VectorLike) -> bool: """Check if the current goal is in collision with obstacles in the costmap. - + Returns: bool: True if goal is in collision, False if goal is safe or cannot be checked """ - + costmap = self.get_costmap() if costmap is None: logger.warning("Cannot check collision: No costmap available") return False - + # Check if the position is occupied collision_threshold = 80 # Consider values above 80 as obstacles - + # Use Costmap's is_occupied method return costmap.is_occupied(goal_xy, threshold=collision_threshold) def is_goal_in_costmap_bounds(self, goal_xy: VectorLike) -> bool: """Check if the goal position is within the bounds of the costmap. - + Args: goal_xy: Goal position (x, y) in odom frame - + Returns: bool: True if the goal is within the costmap bounds, False otherwise """ @@ -562,33 +627,39 @@ def is_goal_in_costmap_bounds(self, goal_xy: VectorLike) -> bool: if costmap is None: logger.warning("Cannot check bounds: No costmap available") return False - + # Get goal position in grid coordinates goal_point = costmap.world_to_grid(goal_xy) goal_cell_x, goal_cell_y = goal_point.x, goal_point.y - + # Check if goal is within the costmap bounds - is_in_bounds = 0 <= goal_cell_x < costmap.width and 0 <= goal_cell_y < costmap.height - + is_in_bounds = ( + 0 <= goal_cell_x < costmap.width and 0 <= goal_cell_y < costmap.height + ) + if not is_in_bounds: - logger.warning(f"Goal ({goal_xy[0]:.2f}, {goal_xy[1]:.2f}) is outside costmap bounds") - + logger.warning( + f"Goal ({goal_xy[0]:.2f}, {goal_xy[1]:.2f}) is outside costmap bounds" + ) + return is_in_bounds - def adjust_goal_to_valid_position(self, goal_xy: VectorLike, clearance: float = 0.5) -> Tuple[float, float]: + def adjust_goal_to_valid_position( + self, goal_xy: VectorLike, clearance: float = 0.5 + ) -> Tuple[float, float]: """Find a valid (non-colliding) goal position by moving it towards the robot. - + Args: goal_xy: Original goal position (x, y) in odom frame clearance: Additional distance to move back from obstacles for better clearance (meters) - + Returns: Tuple[float, float]: A valid goal position, or the original goal if already valid - """ + """ [pos, rot] = self.transform.transform_euler("base_link", "odom") - + robot_x, robot_y = pos[0], pos[1] - + # Original goal goal_x, goal_y = to_tuple(goal_xy) @@ -598,192 +669,220 @@ def adjust_goal_to_valid_position(self, goal_xy: VectorLike, clearance: float = # Calculate vector from goal to robot dx = robot_x - goal_x dy = robot_y - goal_y - distance = np.sqrt(dx*dx + dy*dy) - + distance = np.sqrt(dx * dx + dy * dy) + if distance < 0.001: # Goal is at robot position return to_tuple(goal_xy) - + # Normalize direction vector dx /= distance dy /= distance - + # Step size step_size = 0.25 # meters - + # Move goal towards robot step by step current_x, current_y = goal_x, goal_y steps = 0 max_steps = 50 # Safety limit - + # Variables to store the first valid position found valid_found = False valid_x, valid_y = None, None - + while steps < max_steps: # Move towards robot current_x += dx * step_size current_y += dy * step_size steps += 1 - + # Check if we've reached or passed the robot - new_distance = np.sqrt((current_x - robot_x)**2 + (current_y - robot_y)**2) + new_distance = np.sqrt( + (current_x - robot_x) ** 2 + (current_y - robot_y) ** 2 + ) if new_distance < step_size: # We've reached the robot without finding a valid point # Move back one step from robot to avoid self-collision current_x = robot_x - dx * step_size current_y = robot_y - dy * step_size break - + # Check if this position is valid - if not self.check_goal_collision((current_x, current_y)) and self.is_goal_in_costmap_bounds((current_x, current_y)): + if not self.check_goal_collision( + (current_x, current_y) + ) and self.is_goal_in_costmap_bounds((current_x, current_y)): # Store the first valid position if not valid_found: valid_found = True valid_x, valid_y = current_x, current_y - + # If clearance is requested, continue searching for a better position if clearance > 0: continue - + # Calculate position with additional clearance if clearance > 0: - # Calculate clearance position clearance_x = current_x + dx * clearance clearance_y = current_y + dy * clearance - logger.info(f"Checking clearance position at ({clearance_x:.2f}, {clearance_y:.2f})") - + logger.info( + f"Checking clearance position at ({clearance_x:.2f}, {clearance_y:.2f})" + ) + # Check if the clearance position is also valid - if (not self.check_goal_collision((clearance_x, clearance_y)) and - self.is_goal_in_costmap_bounds((clearance_x, clearance_y))): - logger.info(f"Found valid goal with clearance at ({clearance_x:.2f}, {clearance_y:.2f})") + if not self.check_goal_collision( + (clearance_x, clearance_y) + ) and self.is_goal_in_costmap_bounds((clearance_x, clearance_y)): + logger.info( + f"Found valid goal with clearance at ({clearance_x:.2f}, {clearance_y:.2f})" + ) return (clearance_x, clearance_y) - + # Return the valid position without clearance logger.info(f"Found valid goal at ({current_x:.2f}, {current_y:.2f})") return (current_x, current_y) - + # If we found a valid position earlier but couldn't add clearance if valid_found: logger.info(f"Using valid goal found at ({valid_x:.2f}, {valid_y:.2f})") return (valid_x, valid_y) - - logger.warning(f"Could not find valid goal after {steps} steps, using closest point to robot") + + logger.warning( + f"Could not find valid goal after {steps} steps, using closest point to robot" + ) return (current_x, current_y) def check_if_stuck(self) -> bool: """ Check if the robot is stuck by analyzing movement history. - + Returns: bool: True if the robot is determined to be stuck, False otherwise """ # Get current position and time current_time = time.time() - + # Get current robot position [pos, _] = self.transform.transform_euler("base_link", "odom") current_position = (pos[0], pos[1], current_time) - + # Add current position to history (newest is appended at the end) self.position_history.append(current_position) - + # Need enough history to make a determination min_history_size = self.stuck_detection_window_seconds * self.control_frequency if len(self.position_history) < min_history_size: return False - + # Find positions within our detection window (positions are already in order from oldest to newest) window_start_time = current_time - self.stuck_detection_window_seconds window_positions = [] - + # Collect positions within the window (newest entries will be at the end) for pos_x, pos_y, timestamp in self.position_history: if timestamp >= window_start_time: window_positions.append((pos_x, pos_y, timestamp)) - + # Need at least a few positions in the window if len(window_positions) < 3: return False - + # Ensure correct order: oldest to newest window_positions.sort(key=lambda p: p[2]) - + # Get the oldest and newest positions in the window oldest_x, oldest_y, oldest_time = window_positions[0] newest_x, newest_y, newest_time = window_positions[-1] - + # Calculate time range in the window (should always be positive) time_range = newest_time - oldest_time - + # Calculate displacement from oldest to newest position - displacement = np.sqrt((newest_x - oldest_x)**2 + (newest_y - oldest_y)**2) - + displacement = np.sqrt((newest_x - oldest_x) ** 2 + (newest_y - oldest_y) ** 2) + # Check if we're stuck - moved less than threshold over minimum time # Only consider it if the time range makes sense (positive and sufficient) - is_currently_stuck = (time_range >= self.stuck_time_threshold and - time_range <= self.stuck_detection_window_seconds and - displacement < self.stuck_distance_threshold) - + is_currently_stuck = ( + time_range >= self.stuck_time_threshold + and time_range <= self.stuck_detection_window_seconds + and displacement < self.stuck_distance_threshold + ) + if is_currently_stuck: - logger.warning(f"Robot appears to be stuck! Displacement {displacement:.3f}m over {time_range:.1f}s") - + logger.warning( + f"Robot appears to be stuck! Displacement {displacement:.3f}m over {time_range:.1f}s" + ) + # Don't trigger recovery if it's already active if not self.is_recovery_active: self.is_recovery_active = True self.recovery_start_time = current_time return True - + # Check if we've been trying to recover for too long elif current_time - self.recovery_start_time > self.recovery_duration: - logger.error(f"Recovery behavior has been active for {self.recovery_duration}s without success") + logger.error( + f"Recovery behavior has been active for {self.recovery_duration}s without success" + ) # Reset recovery state - maybe a different behavior will work self.is_recovery_active = False self.recovery_start_time = current_time - + # If we've moved enough, we're not stuck anymore elif self.is_recovery_active and displacement > self.unstuck_distance_threshold: - logger.info(f"Robot has escaped from stuck state (moved {displacement:.3f}m)") + logger.info( + f"Robot has escaped from stuck state (moved {displacement:.3f}m)" + ) self.is_recovery_active = False - + return self.is_recovery_active - + def execute_recovery_behavior(self) -> Dict[str, float]: """ Execute a recovery behavior when the robot is stuck. - + Returns: Dict[str, float]: Velocity commands for the recovery behavior """ # Calculate how long we've been in recovery recovery_time = time.time() - self.recovery_start_time - + # Calculate recovery phases based on control frequency backup_phase_time = 3.0 # seconds rotate_phase_time = 2.0 # seconds - + # Simple recovery behavior state machine if recovery_time < backup_phase_time: # First try backing up logger.info("Recovery: backing up") - return {'x_vel': -0.2, 'angular_vel': 0.0} + return {"x_vel": -0.2, "angular_vel": 0.0} elif recovery_time < backup_phase_time + rotate_phase_time: # Then try rotating logger.info("Recovery: rotating to find new path") rotation_direction = 1.0 if np.random.random() > 0.5 else -1.0 - return {'x_vel': 0.0, 'angular_vel': rotation_direction * self.max_angular_vel * 0.7} + return { + "x_vel": 0.0, + "angular_vel": rotation_direction * self.max_angular_vel * 0.7, + } else: # If we're still stuck after backup and rotation, terminate navigation - logger.error("Recovery failed after backup and rotation. Navigation terminated.") + logger.error( + "Recovery failed after backup and rotation. Navigation terminated." + ) # Set a flag to indicate navigation should terminate self.navigation_failed = True # Stop the robot - return {'x_vel': 0.0, 'angular_vel': 0.0} + return {"x_vel": 0.0, "angular_vel": 0.0} + def navigate_to_goal_local( - robot, goal_xy_robot: Tuple[float, float], goal_theta: Optional[float] = None, distance: float = 0.0, timeout: float = 60.0, - stop_event: Optional[threading.Event] = None + robot, + goal_xy_robot: Tuple[float, float], + goal_theta: Optional[float] = None, + distance: float = 0.0, + timeout: float = 60.0, + stop_event: Optional[threading.Event] = None, ) -> bool: """ Navigates the robot to a goal specified in the robot's local frame @@ -801,40 +900,48 @@ def navigate_to_goal_local( Returns: bool: True if the goal was reached within the timeout, False otherwise. """ - logger.info(f"Starting navigation to local goal {goal_xy_robot} with distance {distance}m and timeout {timeout}s.") + logger.info( + f"Starting navigation to local goal {goal_xy_robot} with distance {distance}m and timeout {timeout}s." + ) goal_x, goal_y = goal_xy_robot - + # Calculate goal orientation to face the target if goal_theta is None: goal_theta = np.arctan2(goal_y, goal_x) - + # If distance is non-zero, adjust the goal to stop at the desired distance if distance > 0: # Calculate magnitude of the goal vector goal_distance = np.sqrt(goal_x**2 + goal_y**2) - + # Only adjust if goal is further than the desired distance if goal_distance > distance: - goal_x, goal_y = distance_angle_to_goal_xy(goal_distance - distance, goal_theta) - + goal_x, goal_y = distance_angle_to_goal_xy( + goal_distance - distance, goal_theta + ) + # Set the goal in the robot's frame with orientation to face the original target - robot.local_planner.set_goal((goal_x, goal_y), frame="base_link", goal_theta=goal_theta) - + robot.local_planner.set_goal( + (goal_x, goal_y), frame="base_link", goal_theta=goal_theta + ) + # Get control period from robot's local planner for consistent timing control_period = 1.0 / robot.local_planner.control_frequency - + start_time = time.time() goal_reached = False try: - while time.time() - start_time < timeout and not (stop_event and stop_event.is_set()): + while time.time() - start_time < timeout and not ( + stop_event and stop_event.is_set() + ): # Check if goal has been reached if robot.local_planner.is_goal_reached(): logger.info("Goal reached successfully.") goal_reached = True break - + # Check if navigation failed flag is set if robot.local_planner.navigation_failed: logger.error("Navigation aborted due to repeated recovery failures.") @@ -853,7 +960,9 @@ def navigate_to_goal_local( time.sleep(control_period) if not goal_reached: - logger.warning(f"Navigation timed out after {timeout} seconds before reaching goal.") + logger.warning( + f"Navigation timed out after {timeout} seconds before reaching goal." + ) except KeyboardInterrupt: logger.info("Navigation to local goal interrupted by user.") @@ -867,9 +976,13 @@ def navigate_to_goal_local( return goal_reached + def navigate_path_local( - robot, path: Path, timeout: float = 120.0, goal_theta: Optional[float] = None, - stop_event: Optional[threading.Event] = None + robot, + path: Path, + timeout: float = 120.0, + goal_theta: Optional[float] = None, + stop_event: Optional[threading.Event] = None, ) -> bool: """ Navigates the robot along a path of waypoints using the waypoint following capability @@ -885,25 +998,29 @@ def navigate_path_local( Returns: bool: True if the entire path was successfully followed, False otherwise """ - logger.info(f"Starting navigation along path with {len(path)} waypoints and timeout {timeout}s.") + logger.info( + f"Starting navigation along path with {len(path)} waypoints and timeout {timeout}s." + ) # Set the path in the local planner robot.local_planner.set_goal_waypoints(path, goal_theta=goal_theta) - + # Get control period from robot's local planner for consistent timing control_period = 1.0 / robot.local_planner.control_frequency - + start_time = time.time() path_completed = False try: - while time.time() - start_time < timeout and not (stop_event and stop_event.is_set()): + while time.time() - start_time < timeout and not ( + stop_event and stop_event.is_set() + ): # Check if the entire path has been traversed if robot.local_planner.is_goal_reached(): logger.info("Path traversed successfully.") path_completed = True break - + # Check if navigation failed flag is set if robot.local_planner.navigation_failed: logger.error("Navigation aborted due to repeated recovery failures.") @@ -922,7 +1039,9 @@ def navigate_path_local( time.sleep(control_period) if not path_completed: - logger.warning(f"Path following timed out after {timeout} seconds before completing the path.") + logger.warning( + f"Path following timed out after {timeout} seconds before completing the path." + ) except KeyboardInterrupt: logger.info("Path navigation interrupted by user.") @@ -936,25 +1055,26 @@ def navigate_path_local( return path_completed + def visualize_local_planner_state( - occupancy_grid: np.ndarray, - grid_resolution: float, - grid_origin: Tuple[float, float, float], - robot_pose: Tuple[float, float, float], - visualization_size: int = 400, - robot_width: float = 0.5, + occupancy_grid: np.ndarray, + grid_resolution: float, + grid_origin: Tuple[float, float, float], + robot_pose: Tuple[float, float, float], + visualization_size: int = 400, + robot_width: float = 0.5, robot_length: float = 0.7, map_size_meters: float = 10.0, - goal_xy: Optional[Tuple[float, float]] = None, + goal_xy: Optional[Tuple[float, float]] = None, goal_theta: Optional[float] = None, histogram: Optional[np.ndarray] = None, selected_direction: Optional[float] = None, - waypoints: Optional['Path'] = None, - current_waypoint_index: Optional[int] = None + waypoints: Optional["Path"] = None, + current_waypoint_index: Optional[int] = None, ) -> np.ndarray: """Generate a bird's eye view visualization of the local costmap. Optionally includes VFH histogram, selected direction, and waypoints path. - + Args: occupancy_grid: 2D numpy array of the occupancy grid grid_resolution: Resolution of the grid in meters/cell @@ -971,34 +1091,38 @@ def visualize_local_planner_state( waypoints: Optional Path object containing waypoints to visualize current_waypoint_index: Optional index of the current target waypoint """ - + robot_x, robot_y, robot_theta = robot_pose grid_origin_x, grid_origin_y, _ = grid_origin vis_size = visualization_size scale = vis_size / map_size_meters - + vis_img = np.ones((vis_size, vis_size, 3), dtype=np.uint8) * 255 center_x = vis_size // 2 center_y = vis_size // 2 - + grid_height, grid_width = occupancy_grid.shape - + # Calculate robot position relative to grid origin robot_rel_x = robot_x - grid_origin_x robot_rel_y = robot_y - grid_origin_y robot_cell_x = int(robot_rel_x / grid_resolution) robot_cell_y = int(robot_rel_y / grid_resolution) - + half_size_cells = int(map_size_meters / grid_resolution / 2) # Draw grid cells (using standard occupancy coloring) - for y in range(max(0, robot_cell_y - half_size_cells), - min(grid_height, robot_cell_y + half_size_cells)): - for x in range(max(0, robot_cell_x - half_size_cells), - min(grid_width, robot_cell_x + half_size_cells)): + for y in range( + max(0, robot_cell_y - half_size_cells), + min(grid_height, robot_cell_y + half_size_cells), + ): + for x in range( + max(0, robot_cell_x - half_size_cells), + min(grid_width, robot_cell_x + half_size_cells), + ): cell_rel_x_meters = (x - robot_cell_x) * grid_resolution cell_rel_y_meters = (y - robot_cell_y) * grid_resolution - + img_x = int(center_x + cell_rel_x_meters * scale) img_y = int(center_y - cell_rel_y_meters * scale) # Flip y-axis @@ -1012,12 +1136,15 @@ def visualize_local_planner_state( # Scale darkness based on occupancy value (0-100) darkness = 255 - int(155 * (cell_value / 100)) - 100 color = (darkness, darkness, darkness) # Shades of gray/black - + cell_size_px = max(1, int(grid_resolution * scale)) - cv2.rectangle(vis_img, - (img_x - cell_size_px//2, img_y - cell_size_px//2), - (img_x + cell_size_px//2, img_y + cell_size_px//2), - color, -1) + cv2.rectangle( + vis_img, + (img_x - cell_size_px // 2, img_y - cell_size_px // 2), + (img_x + cell_size_px // 2, img_y + cell_size_px // 2), + color, + -1, + ) # Draw waypoints path if provided if waypoints is not None and len(waypoints) > 0: @@ -1028,24 +1155,33 @@ def visualize_local_planner_state( wp_x, wp_y = waypoint[0], waypoint[1] wp_rel_x = wp_x - robot_x wp_rel_y = wp_y - robot_y - + wp_img_x = int(center_x + wp_rel_x * scale) wp_img_y = int(center_y - wp_rel_y * scale) # Flip y-axis - + if 0 <= wp_img_x < vis_size and 0 <= wp_img_y < vis_size: path_points.append((wp_img_x, wp_img_y)) - + # Draw each waypoint as a small circle - cv2.circle(vis_img, (wp_img_x, wp_img_y), 3, (0, 128, 0), -1) # Dark green dots - + cv2.circle( + vis_img, (wp_img_x, wp_img_y), 3, (0, 128, 0), -1 + ) # Dark green dots + # Highlight current target waypoint - if current_waypoint_index is not None and i == current_waypoint_index: - cv2.circle(vis_img, (wp_img_x, wp_img_y), 6, (0, 0, 255), 2) # Red circle - + if ( + current_waypoint_index is not None + and i == current_waypoint_index + ): + cv2.circle( + vis_img, (wp_img_x, wp_img_y), 6, (0, 0, 255), 2 + ) # Red circle + # Connect waypoints with lines to show the path if len(path_points) > 1: for i in range(len(path_points) - 1): - cv2.line(vis_img, path_points[i], path_points[i + 1], (0, 200, 0), 1) # Green line + cv2.line( + vis_img, path_points[i], path_points[i + 1], (0, 200, 0), 1 + ) # Green line except Exception as e: logger.error(f"Error drawing waypoints: {e}") @@ -1055,26 +1191,28 @@ def visualize_local_planner_state( # Find absolute maximum value (ignoring any negative debug values) abs_histogram = np.abs(histogram) max_hist_value = np.max(abs_histogram) if np.max(abs_histogram) > 0 else 1.0 - hist_scale = (vis_size / 2) * 0.8 # Scale histogram lines to 80% of half the viz size - + hist_scale = ( + vis_size / 2 + ) * 0.8 # Scale histogram lines to 80% of half the viz size + for i in range(num_bins): # Angle relative to robot's forward direction angle_relative_to_robot = (i / num_bins) * 2 * math.pi - math.pi # Angle in the visualization frame (relative to image +X axis) - vis_angle = angle_relative_to_robot + robot_theta - + vis_angle = angle_relative_to_robot + robot_theta + # Get the value and check if it's a special debug value (negative) hist_val = histogram[i] is_debug_value = hist_val < 0 - + # Use absolute value for line length normalized_val = min(1.0, abs(hist_val) / max_hist_value) line_length = normalized_val * hist_scale - + # Calculate endpoint using the visualization angle end_x = int(center_x + line_length * math.cos(vis_angle)) - end_y = int(center_y - line_length * math.sin(vis_angle)) # Flipped Y - + end_y = int(center_y - line_length * math.sin(vis_angle)) # Flipped Y + # Color based on value and whether it's a debug value if is_debug_value: # Use green for debug values (minimum cost bin) @@ -1084,31 +1222,46 @@ def visualize_local_planner_state( # Regular coloring for normal values (blue to red gradient based on obstacle density) blue = max(0, 255 - int(normalized_val * 255)) red = min(255, int(normalized_val * 255)) - color = (blue, 0, red) # BGR format: obstacles are redder, clear areas are bluer + color = ( + blue, + 0, + red, + ) # BGR format: obstacles are redder, clear areas are bluer line_width = 1 - + cv2.line(vis_img, (center_x, center_y), (end_x, end_y), color, line_width) # Draw robot robot_length_px = int(robot_length * scale) robot_width_px = int(robot_width * scale) - robot_pts = np.array([ - [-robot_length_px/2, -robot_width_px/2], [robot_length_px/2, -robot_width_px/2], - [robot_length_px/2, robot_width_px/2], [-robot_length_px/2, robot_width_px/2] - ], dtype=np.float32) - rotation_matrix = np.array([ - [math.cos(robot_theta), -math.sin(robot_theta)], - [math.sin(robot_theta), math.cos(robot_theta)] - ]) + robot_pts = np.array( + [ + [-robot_length_px / 2, -robot_width_px / 2], + [robot_length_px / 2, -robot_width_px / 2], + [robot_length_px / 2, robot_width_px / 2], + [-robot_length_px / 2, robot_width_px / 2], + ], + dtype=np.float32, + ) + rotation_matrix = np.array( + [ + [math.cos(robot_theta), -math.sin(robot_theta)], + [math.sin(robot_theta), math.cos(robot_theta)], + ] + ) robot_pts = np.dot(robot_pts, rotation_matrix.T) robot_pts[:, 0] += center_x robot_pts[:, 1] = center_y - robot_pts[:, 1] # Flip y-axis - cv2.fillPoly(vis_img, [robot_pts.reshape((-1, 1, 2)).astype(np.int32)], (0, 0, 255)) # Red robot + cv2.fillPoly( + vis_img, [robot_pts.reshape((-1, 1, 2)).astype(np.int32)], (0, 0, 255) + ) # Red robot # Draw robot direction line - front_x = int(center_x + (robot_length_px/2) * math.cos(robot_theta)) - front_y = int(center_y - (robot_length_px/2) * math.sin(robot_theta)) - cv2.line(vis_img, (center_x, center_y), (front_x, front_y), (255, 0, 0), 2) # Blue line + front_x = int(center_x + (robot_length_px / 2) * math.cos(robot_theta)) + front_y = int(center_y - (robot_length_px / 2) * math.sin(robot_theta)) + cv2.line( + vis_img, (center_x, center_y), (front_x, front_y), (255, 0, 0), 2 + ) # Blue line # Draw selected direction if selected_direction is not None: @@ -1117,12 +1270,16 @@ def visualize_local_planner_state( vis_angle_selected = selected_direction + robot_theta # Make slightly longer than max histogram line - sel_dir_line_length = (vis_size / 2) * 0.9 + sel_dir_line_length = (vis_size / 2) * 0.9 sel_end_x = int(center_x + sel_dir_line_length * math.cos(vis_angle_selected)) - sel_end_y = int(center_y - sel_dir_line_length * math.sin(vis_angle_selected)) # Flipped Y - - cv2.line(vis_img, (center_x, center_y), (sel_end_x, sel_end_y), (0, 165, 255), 2) # BGR for Orange + sel_end_y = int( + center_y - sel_dir_line_length * math.sin(vis_angle_selected) + ) # Flipped Y + + cv2.line( + vis_img, (center_x, center_y), (sel_end_x, sel_end_y), (0, 165, 255), 2 + ) # BGR for Orange # Draw goal if goal_xy is not None: @@ -1132,8 +1289,12 @@ def visualize_local_planner_state( goal_img_x = int(center_x + goal_rel_x_map * scale) goal_img_y = int(center_y - goal_rel_y_map * scale) # Flip y-axis if 0 <= goal_img_x < vis_size and 0 <= goal_img_y < vis_size: - cv2.circle(vis_img, (goal_img_x, goal_img_y), 5, (0, 255, 0), -1) # Green circle - cv2.circle(vis_img, (goal_img_x, goal_img_y), 8, (0, 0, 0), 1) # Black outline + cv2.circle( + vis_img, (goal_img_x, goal_img_y), 5, (0, 255, 0), -1 + ) # Green circle + cv2.circle( + vis_img, (goal_img_x, goal_img_y), 8, (0, 0, 0), 1 + ) # Black outline # Draw goal orientation if goal_theta is not None and goal_xy is not None: @@ -1145,32 +1306,51 @@ def visualize_local_planner_state( else: # Use the current goal position goal_x, goal_y = goal_xy - + goal_rel_x_map = goal_x - robot_x goal_rel_y_map = goal_y - robot_y goal_img_x = int(center_x + goal_rel_x_map * scale) goal_img_y = int(center_y - goal_rel_y_map * scale) # Flip y-axis - + # Calculate goal orientation vector direction in visualization frame # goal_theta is already in odom frame, need to adjust for visualization orientation goal_dir_length = 30 # Length of direction indicator in pixels goal_dir_end_x = int(goal_img_x + goal_dir_length * math.cos(goal_theta)) - goal_dir_end_y = int(goal_img_y - goal_dir_length * math.sin(goal_theta)) # Flip y-axis - + goal_dir_end_y = int( + goal_img_y - goal_dir_length * math.sin(goal_theta) + ) # Flip y-axis + # Draw goal orientation arrow if 0 <= goal_img_x < vis_size and 0 <= goal_img_y < vis_size: - cv2.arrowedLine(vis_img, (goal_img_x, goal_img_y), (goal_dir_end_x, goal_dir_end_y), - (255, 0, 255), 4) # Magenta arrow + cv2.arrowedLine( + vis_img, + (goal_img_x, goal_img_y), + (goal_dir_end_x, goal_dir_end_y), + (255, 0, 255), + 4, + ) # Magenta arrow # Add scale bar scale_bar_length_px = int(1.0 * scale) scale_bar_x = vis_size - scale_bar_length_px - 10 scale_bar_y = vis_size - 20 - cv2.line(vis_img, (scale_bar_x, scale_bar_y), - (scale_bar_x + scale_bar_length_px, scale_bar_y), (0, 0, 0), 2) - cv2.putText(vis_img, "1m", (scale_bar_x, scale_bar_y - 5), - cv2.FONT_HERSHEY_SIMPLEX, 0.4, (0, 0, 0), 1) - + cv2.line( + vis_img, + (scale_bar_x, scale_bar_y), + (scale_bar_x + scale_bar_length_px, scale_bar_y), + (0, 0, 0), + 2, + ) + cv2.putText( + vis_img, + "1m", + (scale_bar_x, scale_bar_y - 5), + cv2.FONT_HERSHEY_SIMPLEX, + 0.4, + (0, 0, 0), + 1, + ) + # Add status info status_text = [] if waypoints is not None: @@ -1178,11 +1358,12 @@ def visualize_local_planner_state( status_text.append(f"WP: {current_waypoint_index}/{len(waypoints)}") else: status_text.append(f"WPs: {len(waypoints)}") - + y_pos = 20 for text in status_text: - cv2.putText(vis_img, text, (10, y_pos), - cv2.FONT_HERSHEY_SIMPLEX, 0.5, (0, 0, 0), 1) + cv2.putText( + vis_img, text, (10, y_pos), cv2.FONT_HERSHEY_SIMPLEX, 0.5, (0, 0, 0), 1 + ) y_pos += 20 - return vis_img \ No newline at end of file + return vis_img diff --git a/dimos/robot/local_planner/planner.py b/dimos/robot/local_planner/planner.py new file mode 100644 index 0000000000..9879617bb0 --- /dev/null +++ b/dimos/robot/local_planner/planner.py @@ -0,0 +1,38 @@ +from dataclasses import dataclass +from abc import abstractmethod + +from typing import Callable, Optional +from dimos.types.path import Path +from dimos.types.costmap import Costmap +from dimos.types.vector import VectorLike, to_vector, Vector +from dimos.types.position import PositionLike, to_position, Position +from dimos.robot.global_planner.algo import astar +from dimos.utils.logging_config import setup_logger +from dimos.web.websocket_vis.helpers import Visualizable + + +def obstacles_from_costmap(costmap: Costmap) -> list[Vector]: + """Get the obstacle positions from the costmap.""" + obstacles = [] + for i in range(costmap.width): + for j in range(costmap.height): + if costmap[i, j] == 1: + obstacles.append(Vector(i, j)) + return obstacles + + +@dataclass +class LocalPlanner(Visualizable): + get_costmap: Callable[[], Costmap] + get_robot_pos: Callable[[], Position] + set_robot_vel: Callable[[Position], None] + + goal: Position + + def set_goal(self, goal: PositionLike): + self.goal = to_position(goal) + + @abstractmethod + def move(self, goal: PositionLike) -> bool: + ... + # calculate the most free direction given obstacles diff --git a/dimos/robot/local_planner/vfh/__init__.py b/dimos/robot/local_planner/vfh/__init__.py new file mode 100644 index 0000000000..472b58dcd2 --- /dev/null +++ b/dimos/robot/local_planner/vfh/__init__.py @@ -0,0 +1,7 @@ +from dimos.robot.local_planner.local_planner import ( + BaseLocalPlanner, + navigate_to_goal_local, + navigate_path_local, +) + +from dimos.robot.local_planner.vfh_local_planner import VFHPurePursuitPlanner diff --git a/dimos/robot/local_planner/vfh/local_planner.py b/dimos/robot/local_planner/vfh/local_planner.py new file mode 100644 index 0000000000..a58d004593 --- /dev/null +++ b/dimos/robot/local_planner/vfh/local_planner.py @@ -0,0 +1,1372 @@ +#!/usr/bin/env python3 + +import math +import numpy as np +from typing import Dict, Tuple, Optional, List, Any, Callable, Protocol +from abc import ABC, abstractmethod +import cv2 +from reactivex import Observable +from reactivex.subject import Subject +import threading +import time +import logging +from collections import deque +from dimos.utils.logging_config import setup_logger +from dimos.utils.ros_utils import normalize_angle, distance_angle_to_goal_xy + +from dimos.robot.robot import Robot +from dimos.types.vector import VectorLike, Vector, to_tuple +from dimos.types.path import Path +from dimos.types.costmap import Costmap +from dimos.robot.global_planner.algo import astar +from nav_msgs.msg import OccupancyGrid + +logger = setup_logger("dimos.robot.unitree.local_planner", level=logging.DEBUG) + + +class BaseLocalPlanner(ABC): + """ + Abstract base class for local planners that handle obstacle avoidance and path following. + + This class defines the common interface and shared functionality that all local planners + must implement, regardless of the specific algorithm used. + """ + + def __init__( + self, + get_costmap: Callable[[], Optional[OccupancyGrid]], + transform: object, + move_vel_control: Callable[[float, float, float], None], + safety_threshold: float = 0.5, + max_linear_vel: float = 0.8, + max_angular_vel: float = 1.0, + lookahead_distance: float = 1.0, + goal_tolerance: float = 0.75, + angle_tolerance: float = 0.15, + robot_width: float = 0.5, + robot_length: float = 0.7, + visualization_size: int = 400, + control_frequency: float = 10.0, + safe_goal_distance: float = 1.5, + ): # Control frequency in Hz + """ + Initialize the base local planner. + + Args: + get_costmap: Function to get the latest local costmap + transform: Object with transform methods (transform_point, transform_rot, etc.) + move_vel_control: Function to send velocity commands + safety_threshold: Distance to maintain from obstacles (meters) + max_linear_vel: Maximum linear velocity (m/s) + max_angular_vel: Maximum angular velocity (rad/s) + lookahead_distance: Lookahead distance for path following (meters) + goal_tolerance: Distance at which the goal is considered reached (meters) + angle_tolerance: Angle at which the goal orientation is considered reached (radians) + robot_width: Width of the robot for visualization (meters) + robot_length: Length of the robot for visualization (meters) + visualization_size: Size of the visualization image in pixels + control_frequency: Frequency at which the planner is called (Hz) + safe_goal_distance: Distance at which to adjust the goal and ignore obstacles (meters) + """ + # Store callables for robot interactions + self.get_costmap = get_costmap + self.transform = transform + self.move_vel_control = move_vel_control + + # Store parameters + self.safety_threshold = safety_threshold + self.max_linear_vel = max_linear_vel + self.max_angular_vel = max_angular_vel + self.lookahead_distance = lookahead_distance + self.goal_tolerance = goal_tolerance + self.angle_tolerance = angle_tolerance + self.robot_width = robot_width + self.robot_length = robot_length + self.visualization_size = visualization_size + self.control_frequency = control_frequency + self.control_period = 1.0 / control_frequency # Period in seconds + self.safe_goal_distance = ( + safe_goal_distance # Distance to ignore obstacles at goal + ) + self.ignore_obstacles = False # Flag for derived classes to check + + # Goal and Waypoint Tracking + self.goal_xy: Optional[Tuple[float, float]] = ( + None # Current target for planning + ) + self.goal_theta: Optional[float] = None # Goal orientation in odom frame + self.position_reached: bool = ( + False # Flag indicating if position goal is reached + ) + self.waypoints: Optional[Path] = None # Full path if following waypoints + self.waypoints_in_odom: Optional[Path] = None # Full path in odom frame + self.waypoint_frame: Optional[str] = None # Frame of the waypoints + self.current_waypoint_index: int = 0 # Index of the next waypoint to reach + self.final_goal_reached: bool = ( + False # Flag indicating if the final waypoint is reached + ) + + # Stuck detection + self.stuck_detection_window_seconds = ( + 8.0 # Time window for stuck detection (seconds) + ) + self.position_history_size = int( + self.stuck_detection_window_seconds * control_frequency + ) + self.position_history = deque( + maxlen=self.position_history_size + ) # History of recent positions + self.stuck_distance_threshold = ( + 0.1 # Distance threshold for stuck detection (meters) + ) + self.unstuck_distance_threshold = ( + 0.5 # Distance threshold for unstuck detection (meters) + ) + self.stuck_time_threshold = 4.0 # Time threshold for stuck detection (seconds) + self.is_recovery_active = False # Whether recovery behavior is active + self.recovery_start_time = 0.0 # When recovery behavior started + self.recovery_duration = ( + 8.0 # How long to run recovery before giving up (seconds) + ) + self.last_update_time = time.time() # Last time position was updated + self.navigation_failed = ( + False # Flag indicating if navigation should be terminated + ) + + def reset(self): + """ + Reset all navigation and state tracking variables. + Should be called whenever a new goal is set. + """ + # Reset stuck detection state + self.position_history.clear() + self.is_recovery_active = False + self.recovery_start_time = 0.0 + self.last_update_time = time.time() + + # Reset navigation state flags + self.navigation_failed = False + self.position_reached = False + self.final_goal_reached = False + self.ignore_obstacles = False + + logger.info("Local planner state has been reset") + + def set_goal( + self, + goal_xy: VectorLike, + frame: str = "odom", + goal_theta: Optional[float] = None, + ): + """Set a single goal position, converting to odom frame if necessary. + This clears any existing waypoints being followed. + + Args: + goal_xy: The goal position to set. + frame: The frame of the goal position. + goal_theta: Optional goal orientation in radians (in the specified frame) + """ + # Reset all state variables + self.reset() + + # Clear waypoint following state + self.waypoints = None + self.current_waypoint_index = 0 + self.goal_xy = None # Clear previous goal + self.goal_theta = None # Clear previous goal orientation + + target_goal_xy: Optional[Tuple[float, float]] = None + + target_goal_xy = self.transform.transform_point( + goal_xy, source_frame=frame, target_frame="odom" + ).to_tuple() + + logger.info( + f"Goal set directly in odom frame: ({target_goal_xy[0]:.2f}, {target_goal_xy[1]:.2f})" + ) + + # Check if goal is valid (in bounds and not colliding) + if not self.is_goal_in_costmap_bounds( + target_goal_xy + ) or self.check_goal_collision(target_goal_xy): + logger.warning( + "Goal is in collision or out of bounds. Adjusting goal to valid position." + ) + self.goal_xy = self.adjust_goal_to_valid_position(target_goal_xy) + else: + self.goal_xy = target_goal_xy # Set the adjusted or original valid goal + + # Set goal orientation if provided + if goal_theta is not None: + transformed_rot = self.transform.transform_rot( + Vector(0.0, 0.0, goal_theta), source_frame=frame, target_frame="odom" + ) + self.goal_theta = transformed_rot[2] + + def set_goal_waypoints( + self, waypoints: Path, frame: str = "map", goal_theta: Optional[float] = None + ): + """Sets a path of waypoints for the robot to follow. + + Args: + waypoints: A list of waypoints to follow. Each waypoint is a tuple of (x, y) coordinates in odom frame. + frame: The frame of the waypoints. + goal_theta: Optional final orientation in radians (in the specified frame) + """ + # Reset all state variables + self.reset() + + if not isinstance(waypoints, Path) or len(waypoints) == 0: + logger.warning( + "Invalid or empty path provided to set_goal_waypoints. Ignoring." + ) + self.waypoints = None + self.waypoint_frame = None + self.goal_xy = None + self.goal_theta = None + self.current_waypoint_index = 0 + return + + logger.info(f"Setting goal waypoints with {len(waypoints)} points.") + self.waypoints = waypoints + self.waypoint_frame = frame + self.current_waypoint_index = 0 + + # Transform waypoints to odom frame + self.waypoints_in_odom = self.transform.transform_path( + self.waypoints, source_frame=frame, target_frame="odom" + ) + + # Set the initial target to the first waypoint, adjusting if necessary + first_waypoint = self.waypoints_in_odom[0] + if not self.is_goal_in_costmap_bounds( + first_waypoint + ) or self.check_goal_collision(first_waypoint): + logger.warning("First waypoint is invalid. Adjusting...") + self.goal_xy = self.adjust_goal_to_valid_position(first_waypoint) + else: + self.goal_xy = to_tuple(first_waypoint) # Initial target + + # Set goal orientation if provided + if goal_theta is not None: + transformed_rot = self.transform.transform_rot( + Vector(0.0, 0.0, goal_theta), source_frame=frame, target_frame="odom" + ) + self.goal_theta = transformed_rot[2] + + def _get_robot_pose(self) -> Tuple[Tuple[float, float], float]: + """ + Get the current robot position and orientation. + + Returns: + Tuple containing: + - position as (x, y) tuple + - orientation (theta) in radians + """ + [pos, rot] = self.transform.transform_euler("base_link", "odom") + return (pos[0], pos[1]), rot[2] + + def _get_final_goal_position(self) -> Optional[Tuple[float, float]]: + """ + Get the final goal position (either last waypoint or direct goal). + + Returns: + Tuple (x, y) of the final goal, or None if no goal is set + """ + if self.waypoints_in_odom is not None and len(self.waypoints_in_odom) > 0: + return to_tuple(self.waypoints_in_odom[-1]) + elif self.goal_xy is not None: + return self.goal_xy + return None + + def _distance_to_position(self, target_position: Tuple[float, float]) -> float: + """ + Calculate distance from the robot to a target position. + + Args: + target_position: Target (x, y) position + + Returns: + Distance in meters + """ + robot_pos, _ = self._get_robot_pose() + return np.linalg.norm( + [target_position[0] - robot_pos[0], target_position[1] - robot_pos[1]] + ) + + def plan(self) -> Dict[str, float]: + """ + Main planning method that computes velocity commands. + This includes common planning logic like waypoint following, + with algorithm-specific calculations delegated to subclasses. + + Returns: + Dict[str, float]: Velocity commands with 'x_vel' and 'angular_vel' keys + """ + # If goal orientation is specified, rotate to match it + if ( + self.position_reached + and self.goal_theta is not None + and not self._is_goal_orientation_reached() + ): + logger.info("Position goal reached. Rotating to target orientation.") + return self._rotate_to_goal_orientation() + + # Check if the robot is stuck and handle accordingly + if self.check_if_stuck() and not self.position_reached: + # Check if we're stuck but close to our goal + final_goal_pos = self._get_final_goal_position() + + # If we have a goal position, check distance to it + if final_goal_pos is not None: + distance_to_goal = self._distance_to_position(final_goal_pos) + + # If we're stuck but within 2x safe_goal_distance of the goal, consider it a success + if distance_to_goal < 2.0 * self.safe_goal_distance: + logger.info( + f"Robot is stuck but within {distance_to_goal:.2f}m of goal (< {2.0 * self.safe_goal_distance:.2f}m). Considering navigation successful." + ) + self.position_reached = True + return {"x_vel": 0.0, "angular_vel": 0.0} + + # Otherwise, execute normal recovery behavior + logger.warning("Robot is stuck - executing recovery behavior") + return self.execute_recovery_behavior() + + # Reset obstacle ignore flag + self.ignore_obstacles = False + + # --- Waypoint Following Mode --- + if self.waypoints is not None: + if self.final_goal_reached: + logger.info("Final waypoint reached. Stopping.") + return {"x_vel": 0.0, "angular_vel": 0.0} + + # Get current robot pose + robot_pos, robot_theta = self._get_robot_pose() + robot_pos_np = np.array(robot_pos) + + # Check if close to final waypoint + if self.waypoints_in_odom is not None and len(self.waypoints_in_odom) > 0: + final_waypoint = self.waypoints_in_odom[-1] + dist_to_final = np.linalg.norm(robot_pos_np - final_waypoint) + + # If we're close to the final waypoint, adjust it and ignore obstacles + if dist_to_final < self.safe_goal_distance: + final_wp_tuple = to_tuple(final_waypoint) + adjusted_goal = self.adjust_goal_to_valid_position(final_wp_tuple) + # Create a new Path with the adjusted final waypoint + new_waypoints = self.waypoints_in_odom[ + :-1 + ] # Get all but the last waypoint + new_waypoints.append(adjusted_goal) # Append the adjusted goal + self.waypoints_in_odom = new_waypoints + self.ignore_obstacles = True + logger.debug( + f"Within safe distance of final waypoint. Ignoring obstacles." + ) + + # Update the target goal based on waypoint progression + just_reached_final = self._update_waypoint_target(robot_pos_np) + + # If the helper indicates the final goal was just reached, stop immediately + if just_reached_final: + return {"x_vel": 0.0, "angular_vel": 0.0} + + # --- Single Goal or Current Waypoint Target Set --- + if self.goal_xy is None: + # If no goal is set (e.g., empty path or rejected goal), stop. + return {"x_vel": 0.0, "angular_vel": 0.0} + + # Get necessary data for planning + costmap = self.get_costmap() + if costmap is None: + logger.warning("Local costmap is None. Cannot plan.") + return {"x_vel": 0.0, "angular_vel": 0.0} + + # Check if close to single goal mode goal + if self.waypoints is None: + # Get distance to goal + goal_distance = self._distance_to_position(self.goal_xy) + + # If within safe distance of goal, adjust it and ignore obstacles + if goal_distance < self.safe_goal_distance: + self.goal_xy = self.adjust_goal_to_valid_position(self.goal_xy) + self.ignore_obstacles = True + logger.debug(f"Within safe distance of goal. Ignoring obstacles.") + + # First check position + if goal_distance < self.goal_tolerance or self.position_reached: + self.position_reached = True + + else: + self.position_reached = False + + # Call the algorithm-specific planning implementation + return self._compute_velocity_commands() + + @abstractmethod + def _compute_velocity_commands(self) -> Dict[str, float]: + """ + Algorithm-specific method to compute velocity commands. + Must be implemented by derived classes. + + Returns: + Dict[str, float]: Velocity commands with 'x_vel' and 'angular_vel' keys + """ + pass + + def _rotate_to_goal_orientation(self) -> Dict[str, float]: + """Compute velocity commands to rotate to the goal orientation. + + Returns: + Dict[str, float]: Velocity commands with zero linear velocity + """ + # Get current robot orientation + _, robot_theta = self._get_robot_pose() + + # Calculate the angle difference + angle_diff = normalize_angle(self.goal_theta - robot_theta) + + # Determine rotation direction and speed + if abs(angle_diff) < self.angle_tolerance: + # Already at correct orientation + return {"x_vel": 0.0, "angular_vel": 0.0} + + # Calculate rotation speed - proportional to the angle difference + # but capped at max_angular_vel + direction = 1.0 if angle_diff > 0 else -1.0 + angular_vel = direction * min(abs(angle_diff) * 2.0, self.max_angular_vel) + + # logger.debug(f"Rotating to goal orientation: angle_diff={angle_diff:.4f}, angular_vel={angular_vel:.4f}") + return {"x_vel": 0.0, "angular_vel": angular_vel} + + def _is_goal_orientation_reached(self) -> bool: + """Check if the current robot orientation matches the goal orientation. + + Returns: + bool: True if orientation is reached or no orientation goal is set + """ + if self.goal_theta is None: + return True # No orientation goal set + + # Get current robot orientation + _, robot_theta = self._get_robot_pose() + + # Calculate the angle difference and normalize + angle_diff = abs(normalize_angle(self.goal_theta - robot_theta)) + + logger.debug( + f"Orientation error: {angle_diff:.4f} rad, tolerance: {self.angle_tolerance:.4f} rad" + ) + return angle_diff <= self.angle_tolerance + + def _update_waypoint_target(self, robot_pos_np: np.ndarray) -> bool: + """Helper function to manage waypoint progression and update the target goal. + + Args: + robot_pos_np: Current robot position as a numpy array [x, y]. + + Returns: + bool: True if the final waypoint has just been reached, False otherwise. + """ + if self.waypoints is None or len(self.waypoints) == 0: + return False # Not in waypoint mode or empty path + + self.waypoints_in_odom = self.transform.transform_path( + self.waypoints, source_frame=self.waypoint_frame, target_frame="odom" + ) + + # Check if final goal is reached + final_waypoint = self.waypoints_in_odom[-1] + dist_to_final = np.linalg.norm(robot_pos_np - final_waypoint) + + if dist_to_final < self.goal_tolerance: + self.position_reached = True + self.goal_xy = to_tuple(final_waypoint) + + # If goal orientation is not specified or achieved, consider fully reached + if self.goal_theta is None or self._is_goal_orientation_reached(): + self.final_goal_reached = True + logger.info("Reached final waypoint with correct orientation.") + return True + else: + logger.info( + "Reached final waypoint position, rotating to target orientation." + ) + return False + + # Always find the lookahead point + lookahead_point = None + for i in range(self.current_waypoint_index, len(self.waypoints_in_odom)): + wp = self.waypoints_in_odom[i] + dist_to_wp = np.linalg.norm(robot_pos_np - wp) + if dist_to_wp >= self.lookahead_distance: + lookahead_point = wp + # Update current waypoint index to this point + self.current_waypoint_index = i + break + + # If no point is far enough, target the final waypoint + if lookahead_point is None: + lookahead_point = self.waypoints_in_odom[-1] + self.current_waypoint_index = len(self.waypoints_in_odom) - 1 + + # Set the lookahead point as the immediate target, adjusting if needed + if not self.is_goal_in_costmap_bounds( + lookahead_point + ) or self.check_goal_collision(lookahead_point): + logger.debug("Lookahead point is invalid. Adjusting...") + adjusted_lookahead = self.adjust_goal_to_valid_position(lookahead_point) + # Only update if adjustment didn't fail completely + if adjusted_lookahead is not None: + self.goal_xy = adjusted_lookahead + else: + self.goal_xy = to_tuple(lookahead_point) + + return False # Final goal not reached in this update cycle + + @abstractmethod + def update_visualization(self) -> np.ndarray: + """ + Generate visualization of the planning state. + Must be implemented by derived classes. + + Returns: + np.ndarray: Visualization image as numpy array + """ + pass + + def create_stream(self, frequency_hz: float = None) -> Observable: + """ + Create an Observable stream that emits the visualization image at a fixed frequency. + + Args: + frequency_hz: Optional frequency override (defaults to 1/4 of control_frequency if None) + + Returns: + Observable: Stream of visualization frames + """ + # Default to 1/4 of control frequency if not specified (to reduce CPU usage) + if frequency_hz is None: + frequency_hz = self.control_frequency / 4.0 + + subject = Subject() + sleep_time = 1.0 / frequency_hz + + def frame_emitter(): + while True: + try: + # Generate the frame using the updated method + frame = self.update_visualization() + subject.on_next(frame) + except Exception as e: + logger.error(f"Error in frame emitter thread: {e}") + # Optionally, emit an error frame or simply skip + # subject.on_error(e) # This would terminate the stream + time.sleep(sleep_time) + + emitter_thread = threading.Thread(target=frame_emitter, daemon=True) + emitter_thread.start() + logger.info( + f"Started visualization frame emitter thread at {frequency_hz:.1f} Hz" + ) + return subject + + @abstractmethod + def check_collision(self, direction: float) -> bool: + """ + Check if there's a collision in the given direction. + Must be implemented by derived classes. + + Args: + direction: Direction to check for collision in radians + + Returns: + bool: True if collision detected, False otherwise + """ + pass + + def is_goal_reached(self) -> bool: + """Check if the final goal (single or last waypoint) is reached, including orientation.""" + if self.waypoints is not None: + # Waypoint mode: check if the final waypoint and orientation have been reached + return self.final_goal_reached + else: + # Single goal mode: check distance to the single goal and orientation + if self.goal_xy is None: + return False # No goal set + + return self.position_reached and self._is_goal_orientation_reached() + + def check_goal_collision(self, goal_xy: VectorLike) -> bool: + """Check if the current goal is in collision with obstacles in the costmap. + + Returns: + bool: True if goal is in collision, False if goal is safe or cannot be checked + """ + + costmap = self.get_costmap() + if costmap is None: + logger.warning("Cannot check collision: No costmap available") + return False + + # Check if the position is occupied + collision_threshold = 80 # Consider values above 80 as obstacles + + # Use Costmap's is_occupied method + return costmap.is_occupied(goal_xy, threshold=collision_threshold) + + def is_goal_in_costmap_bounds(self, goal_xy: VectorLike) -> bool: + """Check if the goal position is within the bounds of the costmap. + + Args: + goal_xy: Goal position (x, y) in odom frame + + Returns: + bool: True if the goal is within the costmap bounds, False otherwise + """ + costmap = self.get_costmap() + if costmap is None: + logger.warning("Cannot check bounds: No costmap available") + return False + + # Get goal position in grid coordinates + goal_point = costmap.world_to_grid(goal_xy) + goal_cell_x, goal_cell_y = goal_point.x, goal_point.y + + # Check if goal is within the costmap bounds + is_in_bounds = ( + 0 <= goal_cell_x < costmap.width and 0 <= goal_cell_y < costmap.height + ) + + if not is_in_bounds: + logger.warning( + f"Goal ({goal_xy[0]:.2f}, {goal_xy[1]:.2f}) is outside costmap bounds" + ) + + return is_in_bounds + + def adjust_goal_to_valid_position( + self, goal_xy: VectorLike, clearance: float = 0.5 + ) -> Tuple[float, float]: + """Find a valid (non-colliding) goal position by moving it towards the robot. + + Args: + goal_xy: Original goal position (x, y) in odom frame + clearance: Additional distance to move back from obstacles for better clearance (meters) + + Returns: + Tuple[float, float]: A valid goal position, or the original goal if already valid + """ + [pos, rot] = self.transform.transform_euler("base_link", "odom") + + robot_x, robot_y = pos[0], pos[1] + + # Original goal + goal_x, goal_y = to_tuple(goal_xy) + + if not self.check_goal_collision((goal_x, goal_y)): + return (goal_x, goal_y) + + # Calculate vector from goal to robot + dx = robot_x - goal_x + dy = robot_y - goal_y + distance = np.sqrt(dx * dx + dy * dy) + + if distance < 0.001: # Goal is at robot position + return to_tuple(goal_xy) + + # Normalize direction vector + dx /= distance + dy /= distance + + # Step size + step_size = 0.25 # meters + + # Move goal towards robot step by step + current_x, current_y = goal_x, goal_y + steps = 0 + max_steps = 50 # Safety limit + + # Variables to store the first valid position found + valid_found = False + valid_x, valid_y = None, None + + while steps < max_steps: + # Move towards robot + current_x += dx * step_size + current_y += dy * step_size + steps += 1 + + # Check if we've reached or passed the robot + new_distance = np.sqrt( + (current_x - robot_x) ** 2 + (current_y - robot_y) ** 2 + ) + if new_distance < step_size: + # We've reached the robot without finding a valid point + # Move back one step from robot to avoid self-collision + current_x = robot_x - dx * step_size + current_y = robot_y - dy * step_size + break + + # Check if this position is valid + if not self.check_goal_collision( + (current_x, current_y) + ) and self.is_goal_in_costmap_bounds((current_x, current_y)): + # Store the first valid position + if not valid_found: + valid_found = True + valid_x, valid_y = current_x, current_y + + # If clearance is requested, continue searching for a better position + if clearance > 0: + continue + + # Calculate position with additional clearance + if clearance > 0: + # Calculate clearance position + clearance_x = current_x + dx * clearance + clearance_y = current_y + dy * clearance + + logger.info( + f"Checking clearance position at ({clearance_x:.2f}, {clearance_y:.2f})" + ) + + # Check if the clearance position is also valid + if not self.check_goal_collision( + (clearance_x, clearance_y) + ) and self.is_goal_in_costmap_bounds((clearance_x, clearance_y)): + logger.info( + f"Found valid goal with clearance at ({clearance_x:.2f}, {clearance_y:.2f})" + ) + return (clearance_x, clearance_y) + + # Return the valid position without clearance + logger.info(f"Found valid goal at ({current_x:.2f}, {current_y:.2f})") + return (current_x, current_y) + + # If we found a valid position earlier but couldn't add clearance + if valid_found: + logger.info(f"Using valid goal found at ({valid_x:.2f}, {valid_y:.2f})") + return (valid_x, valid_y) + + logger.warning( + f"Could not find valid goal after {steps} steps, using closest point to robot" + ) + return (current_x, current_y) + + def check_if_stuck(self) -> bool: + """ + Check if the robot is stuck by analyzing movement history. + + Returns: + bool: True if the robot is determined to be stuck, False otherwise + """ + # Get current position and time + current_time = time.time() + + # Get current robot position + [pos, _] = self.transform.transform_euler("base_link", "odom") + current_position = (pos[0], pos[1], current_time) + + # Add current position to history (newest is appended at the end) + self.position_history.append(current_position) + + # Need enough history to make a determination + min_history_size = self.stuck_detection_window_seconds * self.control_frequency + if len(self.position_history) < min_history_size: + return False + + # Find positions within our detection window (positions are already in order from oldest to newest) + window_start_time = current_time - self.stuck_detection_window_seconds + window_positions = [] + + # Collect positions within the window (newest entries will be at the end) + for pos_x, pos_y, timestamp in self.position_history: + if timestamp >= window_start_time: + window_positions.append((pos_x, pos_y, timestamp)) + + # Need at least a few positions in the window + if len(window_positions) < 3: + return False + + # Ensure correct order: oldest to newest + window_positions.sort(key=lambda p: p[2]) + + # Get the oldest and newest positions in the window + oldest_x, oldest_y, oldest_time = window_positions[0] + newest_x, newest_y, newest_time = window_positions[-1] + + # Calculate time range in the window (should always be positive) + time_range = newest_time - oldest_time + + # Calculate displacement from oldest to newest position + displacement = np.sqrt((newest_x - oldest_x) ** 2 + (newest_y - oldest_y) ** 2) + + # Check if we're stuck - moved less than threshold over minimum time + # Only consider it if the time range makes sense (positive and sufficient) + is_currently_stuck = ( + time_range >= self.stuck_time_threshold + and time_range <= self.stuck_detection_window_seconds + and displacement < self.stuck_distance_threshold + ) + + if is_currently_stuck: + logger.warning( + f"Robot appears to be stuck! Displacement {displacement:.3f}m over {time_range:.1f}s" + ) + + # Don't trigger recovery if it's already active + if not self.is_recovery_active: + self.is_recovery_active = True + self.recovery_start_time = current_time + return True + + # Check if we've been trying to recover for too long + elif current_time - self.recovery_start_time > self.recovery_duration: + logger.error( + f"Recovery behavior has been active for {self.recovery_duration}s without success" + ) + # Reset recovery state - maybe a different behavior will work + self.is_recovery_active = False + self.recovery_start_time = current_time + + # If we've moved enough, we're not stuck anymore + elif self.is_recovery_active and displacement > self.unstuck_distance_threshold: + logger.info( + f"Robot has escaped from stuck state (moved {displacement:.3f}m)" + ) + self.is_recovery_active = False + + return self.is_recovery_active + + def execute_recovery_behavior(self) -> Dict[str, float]: + """ + Execute a recovery behavior when the robot is stuck. + + Returns: + Dict[str, float]: Velocity commands for the recovery behavior + """ + # Calculate how long we've been in recovery + recovery_time = time.time() - self.recovery_start_time + + # Calculate recovery phases based on control frequency + backup_phase_time = 3.0 # seconds + rotate_phase_time = 2.0 # seconds + + # Simple recovery behavior state machine + if recovery_time < backup_phase_time: + # First try backing up + logger.info("Recovery: backing up") + return {"x_vel": -0.2, "angular_vel": 0.0} + elif recovery_time < backup_phase_time + rotate_phase_time: + # Then try rotating + logger.info("Recovery: rotating to find new path") + rotation_direction = 1.0 if np.random.random() > 0.5 else -1.0 + return { + "x_vel": 0.0, + "angular_vel": rotation_direction * self.max_angular_vel * 0.7, + } + else: + # If we're still stuck after backup and rotation, terminate navigation + logger.error( + "Recovery failed after backup and rotation. Navigation terminated." + ) + # Set a flag to indicate navigation should terminate + self.navigation_failed = True + # Stop the robot + return {"x_vel": 0.0, "angular_vel": 0.0} + + +def navigate_to_goal_local( + robot, + goal_xy_robot: Tuple[float, float], + goal_theta: Optional[float] = None, + distance: float = 0.0, + timeout: float = 60.0, + stop_event: Optional[threading.Event] = None, +) -> bool: + """ + Navigates the robot to a goal specified in the robot's local frame + using the local planner. + + Args: + robot: Robot instance to control + goal_xy_robot: Tuple (x, y) representing the goal position relative + to the robot's current position and orientation. + distance: Desired distance to maintain from the goal in meters. + If non-zero, the robot will stop this far away from the goal. + timeout: Maximum time (in seconds) allowed to reach the goal. + stop_event: Optional threading.Event to signal when navigation should stop + + Returns: + bool: True if the goal was reached within the timeout, False otherwise. + """ + logger.info( + f"Starting navigation to local goal {goal_xy_robot} with distance {distance}m and timeout {timeout}s." + ) + + goal_x, goal_y = goal_xy_robot + + # Calculate goal orientation to face the target + if goal_theta is None: + goal_theta = np.arctan2(goal_y, goal_x) + + # If distance is non-zero, adjust the goal to stop at the desired distance + if distance > 0: + # Calculate magnitude of the goal vector + goal_distance = np.sqrt(goal_x**2 + goal_y**2) + + # Only adjust if goal is further than the desired distance + if goal_distance > distance: + goal_x, goal_y = distance_angle_to_goal_xy( + goal_distance - distance, goal_theta + ) + + # Set the goal in the robot's frame with orientation to face the original target + robot.local_planner.set_goal( + (goal_x, goal_y), frame="base_link", goal_theta=goal_theta + ) + + # Get control period from robot's local planner for consistent timing + control_period = 1.0 / robot.local_planner.control_frequency + + start_time = time.time() + goal_reached = False + + try: + while time.time() - start_time < timeout and not ( + stop_event and stop_event.is_set() + ): + # Check if goal has been reached + if robot.local_planner.is_goal_reached(): + logger.info("Goal reached successfully.") + goal_reached = True + break + + # Check if navigation failed flag is set + if robot.local_planner.navigation_failed: + logger.error("Navigation aborted due to repeated recovery failures.") + goal_reached = False + break + + # Get planned velocity towards the goal + vel_command = robot.local_planner.plan() + x_vel = vel_command.get("x_vel", 0.0) + angular_vel = vel_command.get("angular_vel", 0.0) + + # Send velocity command + robot.local_planner.move_vel_control(x=x_vel, y=0, yaw=angular_vel) + + # Control loop frequency - use robot's control frequency + time.sleep(control_period) + + if not goal_reached: + logger.warning( + f"Navigation timed out after {timeout} seconds before reaching goal." + ) + + except KeyboardInterrupt: + logger.info("Navigation to local goal interrupted by user.") + goal_reached = False # Consider interruption as failure + except Exception as e: + logger.error(f"Error during navigation to local goal: {e}") + goal_reached = False # Consider error as failure + finally: + logger.info("Stopping robot after navigation attempt.") + robot.local_planner.move_vel_control(0, 0, 0) # Stop the robot + + return goal_reached + + +def navigate_path_local( + robot, + path: Path, + timeout: float = 120.0, + goal_theta: Optional[float] = None, + stop_event: Optional[threading.Event] = None, +) -> bool: + """ + Navigates the robot along a path of waypoints using the waypoint following capability + of the local planner. + + Args: + robot: Robot instance to control + path: Path object containing waypoints in odom/map frame + timeout: Maximum time (in seconds) allowed to follow the complete path + goal_theta: Optional final orientation in radians + stop_event: Optional threading.Event to signal when navigation should stop + + Returns: + bool: True if the entire path was successfully followed, False otherwise + """ + logger.info( + f"Starting navigation along path with {len(path)} waypoints and timeout {timeout}s." + ) + + # Set the path in the local planner + robot.local_planner.set_goal_waypoints(path, goal_theta=goal_theta) + + # Get control period from robot's local planner for consistent timing + control_period = 1.0 / robot.local_planner.control_frequency + + start_time = time.time() + path_completed = False + + try: + while time.time() - start_time < timeout and not ( + stop_event and stop_event.is_set() + ): + # Check if the entire path has been traversed + if robot.local_planner.is_goal_reached(): + logger.info("Path traversed successfully.") + path_completed = True + break + + # Check if navigation failed flag is set + if robot.local_planner.navigation_failed: + logger.error("Navigation aborted due to repeated recovery failures.") + path_completed = False + break + + # Get planned velocity towards the current waypoint target + vel_command = robot.local_planner.plan() + x_vel = vel_command.get("x_vel", 0.0) + angular_vel = vel_command.get("angular_vel", 0.0) + + # Send velocity command + robot.local_planner.move_vel_control(x=x_vel, y=0, yaw=angular_vel) + + # Control loop frequency - use robot's control frequency + time.sleep(control_period) + + if not path_completed: + logger.warning( + f"Path following timed out after {timeout} seconds before completing the path." + ) + + except KeyboardInterrupt: + logger.info("Path navigation interrupted by user.") + path_completed = False + except Exception as e: + logger.error(f"Error during path navigation: {e}") + path_completed = False + finally: + logger.info("Stopping robot after path navigation attempt.") + robot.local_planner.move_vel_control(0, 0, 0) # Stop the robot + + return path_completed + + +def visualize_local_planner_state( + occupancy_grid: np.ndarray, + grid_resolution: float, + grid_origin: Tuple[float, float, float], + robot_pose: Tuple[float, float, float], + visualization_size: int = 400, + robot_width: float = 0.5, + robot_length: float = 0.7, + map_size_meters: float = 10.0, + goal_xy: Optional[Tuple[float, float]] = None, + goal_theta: Optional[float] = None, + histogram: Optional[np.ndarray] = None, + selected_direction: Optional[float] = None, + waypoints: Optional["Path"] = None, + current_waypoint_index: Optional[int] = None, +) -> np.ndarray: + """Generate a bird's eye view visualization of the local costmap. + Optionally includes VFH histogram, selected direction, and waypoints path. + + Args: + occupancy_grid: 2D numpy array of the occupancy grid + grid_resolution: Resolution of the grid in meters/cell + grid_origin: Tuple (x, y, theta) of the grid origin in the odom frame + robot_pose: Tuple (x, y, theta) of the robot pose in the odom frame + visualization_size: Size of the visualization image in pixels + robot_width: Width of the robot in meters + robot_length: Length of the robot in meters + map_size_meters: Size of the map to visualize in meters + goal_xy: Optional tuple (x, y) of the goal position in the odom frame + goal_theta: Optional goal orientation in radians (in odom frame) + histogram: Optional numpy array of the VFH histogram + selected_direction: Optional selected direction angle in radians + waypoints: Optional Path object containing waypoints to visualize + current_waypoint_index: Optional index of the current target waypoint + """ + + robot_x, robot_y, robot_theta = robot_pose + grid_origin_x, grid_origin_y, _ = grid_origin + vis_size = visualization_size + scale = vis_size / map_size_meters + + vis_img = np.ones((vis_size, vis_size, 3), dtype=np.uint8) * 255 + center_x = vis_size // 2 + center_y = vis_size // 2 + + grid_height, grid_width = occupancy_grid.shape + + # Calculate robot position relative to grid origin + robot_rel_x = robot_x - grid_origin_x + robot_rel_y = robot_y - grid_origin_y + robot_cell_x = int(robot_rel_x / grid_resolution) + robot_cell_y = int(robot_rel_y / grid_resolution) + + half_size_cells = int(map_size_meters / grid_resolution / 2) + + # Draw grid cells (using standard occupancy coloring) + for y in range( + max(0, robot_cell_y - half_size_cells), + min(grid_height, robot_cell_y + half_size_cells), + ): + for x in range( + max(0, robot_cell_x - half_size_cells), + min(grid_width, robot_cell_x + half_size_cells), + ): + cell_rel_x_meters = (x - robot_cell_x) * grid_resolution + cell_rel_y_meters = (y - robot_cell_y) * grid_resolution + + img_x = int(center_x + cell_rel_x_meters * scale) + img_y = int(center_y - cell_rel_y_meters * scale) # Flip y-axis + + if 0 <= img_x < vis_size and 0 <= img_y < vis_size: + cell_value = occupancy_grid[y, x] + if cell_value == -1: + color = (200, 200, 200) # Unknown (Light gray) + elif cell_value == 0: + color = (255, 255, 255) # Free (White) + else: # Occupied + # Scale darkness based on occupancy value (0-100) + darkness = 255 - int(155 * (cell_value / 100)) - 100 + color = (darkness, darkness, darkness) # Shades of gray/black + + cell_size_px = max(1, int(grid_resolution * scale)) + cv2.rectangle( + vis_img, + (img_x - cell_size_px // 2, img_y - cell_size_px // 2), + (img_x + cell_size_px // 2, img_y + cell_size_px // 2), + color, + -1, + ) + + # Draw waypoints path if provided + if waypoints is not None and len(waypoints) > 0: + try: + path_points = [] + for i, waypoint in enumerate(waypoints): + # Convert waypoint from odom frame to visualization frame + wp_x, wp_y = waypoint[0], waypoint[1] + wp_rel_x = wp_x - robot_x + wp_rel_y = wp_y - robot_y + + wp_img_x = int(center_x + wp_rel_x * scale) + wp_img_y = int(center_y - wp_rel_y * scale) # Flip y-axis + + if 0 <= wp_img_x < vis_size and 0 <= wp_img_y < vis_size: + path_points.append((wp_img_x, wp_img_y)) + + # Draw each waypoint as a small circle + cv2.circle( + vis_img, (wp_img_x, wp_img_y), 3, (0, 128, 0), -1 + ) # Dark green dots + + # Highlight current target waypoint + if ( + current_waypoint_index is not None + and i == current_waypoint_index + ): + cv2.circle( + vis_img, (wp_img_x, wp_img_y), 6, (0, 0, 255), 2 + ) # Red circle + + # Connect waypoints with lines to show the path + if len(path_points) > 1: + for i in range(len(path_points) - 1): + cv2.line( + vis_img, path_points[i], path_points[i + 1], (0, 200, 0), 1 + ) # Green line + except Exception as e: + logger.error(f"Error drawing waypoints: {e}") + + # Draw histogram + if histogram is not None: + num_bins = len(histogram) + # Find absolute maximum value (ignoring any negative debug values) + abs_histogram = np.abs(histogram) + max_hist_value = np.max(abs_histogram) if np.max(abs_histogram) > 0 else 1.0 + hist_scale = ( + vis_size / 2 + ) * 0.8 # Scale histogram lines to 80% of half the viz size + + for i in range(num_bins): + # Angle relative to robot's forward direction + angle_relative_to_robot = (i / num_bins) * 2 * math.pi - math.pi + # Angle in the visualization frame (relative to image +X axis) + vis_angle = angle_relative_to_robot + robot_theta + + # Get the value and check if it's a special debug value (negative) + hist_val = histogram[i] + is_debug_value = hist_val < 0 + + # Use absolute value for line length + normalized_val = min(1.0, abs(hist_val) / max_hist_value) + line_length = normalized_val * hist_scale + + # Calculate endpoint using the visualization angle + end_x = int(center_x + line_length * math.cos(vis_angle)) + end_y = int(center_y - line_length * math.sin(vis_angle)) # Flipped Y + + # Color based on value and whether it's a debug value + if is_debug_value: + # Use green for debug values (minimum cost bin) + color = (0, 255, 0) # Green + line_width = 2 # Thicker line for emphasis + else: + # Regular coloring for normal values (blue to red gradient based on obstacle density) + blue = max(0, 255 - int(normalized_val * 255)) + red = min(255, int(normalized_val * 255)) + color = ( + blue, + 0, + red, + ) # BGR format: obstacles are redder, clear areas are bluer + line_width = 1 + + cv2.line(vis_img, (center_x, center_y), (end_x, end_y), color, line_width) + + # Draw robot + robot_length_px = int(robot_length * scale) + robot_width_px = int(robot_width * scale) + robot_pts = np.array( + [ + [-robot_length_px / 2, -robot_width_px / 2], + [robot_length_px / 2, -robot_width_px / 2], + [robot_length_px / 2, robot_width_px / 2], + [-robot_length_px / 2, robot_width_px / 2], + ], + dtype=np.float32, + ) + rotation_matrix = np.array( + [ + [math.cos(robot_theta), -math.sin(robot_theta)], + [math.sin(robot_theta), math.cos(robot_theta)], + ] + ) + robot_pts = np.dot(robot_pts, rotation_matrix.T) + robot_pts[:, 0] += center_x + robot_pts[:, 1] = center_y - robot_pts[:, 1] # Flip y-axis + cv2.fillPoly( + vis_img, [robot_pts.reshape((-1, 1, 2)).astype(np.int32)], (0, 0, 255) + ) # Red robot + + # Draw robot direction line + front_x = int(center_x + (robot_length_px / 2) * math.cos(robot_theta)) + front_y = int(center_y - (robot_length_px / 2) * math.sin(robot_theta)) + cv2.line( + vis_img, (center_x, center_y), (front_x, front_y), (255, 0, 0), 2 + ) # Blue line + + # Draw selected direction + if selected_direction is not None: + # selected_direction is relative to robot frame + # Angle in the visualization frame (relative to image +X axis) + vis_angle_selected = selected_direction + robot_theta + + # Make slightly longer than max histogram line + sel_dir_line_length = (vis_size / 2) * 0.9 + + sel_end_x = int(center_x + sel_dir_line_length * math.cos(vis_angle_selected)) + sel_end_y = int( + center_y - sel_dir_line_length * math.sin(vis_angle_selected) + ) # Flipped Y + + cv2.line( + vis_img, (center_x, center_y), (sel_end_x, sel_end_y), (0, 165, 255), 2 + ) # BGR for Orange + + # Draw goal + if goal_xy is not None: + goal_x, goal_y = goal_xy + goal_rel_x_map = goal_x - robot_x + goal_rel_y_map = goal_y - robot_y + goal_img_x = int(center_x + goal_rel_x_map * scale) + goal_img_y = int(center_y - goal_rel_y_map * scale) # Flip y-axis + if 0 <= goal_img_x < vis_size and 0 <= goal_img_y < vis_size: + cv2.circle( + vis_img, (goal_img_x, goal_img_y), 5, (0, 255, 0), -1 + ) # Green circle + cv2.circle( + vis_img, (goal_img_x, goal_img_y), 8, (0, 0, 0), 1 + ) # Black outline + + # Draw goal orientation + if goal_theta is not None and goal_xy is not None: + # For waypoint mode, only draw orientation at the final waypoint + if waypoints is not None and len(waypoints) > 0: + # Use the final waypoint position + final_waypoint = waypoints[-1] + goal_x, goal_y = final_waypoint[0], final_waypoint[1] + else: + # Use the current goal position + goal_x, goal_y = goal_xy + + goal_rel_x_map = goal_x - robot_x + goal_rel_y_map = goal_y - robot_y + goal_img_x = int(center_x + goal_rel_x_map * scale) + goal_img_y = int(center_y - goal_rel_y_map * scale) # Flip y-axis + + # Calculate goal orientation vector direction in visualization frame + # goal_theta is already in odom frame, need to adjust for visualization orientation + goal_dir_length = 30 # Length of direction indicator in pixels + goal_dir_end_x = int(goal_img_x + goal_dir_length * math.cos(goal_theta)) + goal_dir_end_y = int( + goal_img_y - goal_dir_length * math.sin(goal_theta) + ) # Flip y-axis + + # Draw goal orientation arrow + if 0 <= goal_img_x < vis_size and 0 <= goal_img_y < vis_size: + cv2.arrowedLine( + vis_img, + (goal_img_x, goal_img_y), + (goal_dir_end_x, goal_dir_end_y), + (255, 0, 255), + 4, + ) # Magenta arrow + + # Add scale bar + scale_bar_length_px = int(1.0 * scale) + scale_bar_x = vis_size - scale_bar_length_px - 10 + scale_bar_y = vis_size - 20 + cv2.line( + vis_img, + (scale_bar_x, scale_bar_y), + (scale_bar_x + scale_bar_length_px, scale_bar_y), + (0, 0, 0), + 2, + ) + cv2.putText( + vis_img, + "1m", + (scale_bar_x, scale_bar_y - 5), + cv2.FONT_HERSHEY_SIMPLEX, + 0.4, + (0, 0, 0), + 1, + ) + + # Add status info + status_text = [] + if waypoints is not None: + if current_waypoint_index is not None: + status_text.append(f"WP: {current_waypoint_index}/{len(waypoints)}") + else: + status_text.append(f"WPs: {len(waypoints)}") + + y_pos = 20 + for text in status_text: + cv2.putText( + vis_img, text, (10, y_pos), cv2.FONT_HERSHEY_SIMPLEX, 0.5, (0, 0, 0), 1 + ) + y_pos += 20 + + return vis_img diff --git a/dimos/robot/local_planner/vfh/vfh_local_planner.py b/dimos/robot/local_planner/vfh/vfh_local_planner.py new file mode 100644 index 0000000000..1dab02f2a1 --- /dev/null +++ b/dimos/robot/local_planner/vfh/vfh_local_planner.py @@ -0,0 +1,447 @@ +#!/usr/bin/env python3 + +import math +import numpy as np +from typing import Dict, Tuple, Optional, Callable +import cv2 +import logging +import time + +from dimos.utils.logging_config import setup_logger +from dimos.utils.ros_utils import normalize_angle + +from dimos.robot.local_planner.local_planner import ( + BaseLocalPlanner, + visualize_local_planner_state, +) +from dimos.types.costmap import Costmap +from nav_msgs.msg import OccupancyGrid + +logger = setup_logger("dimos.robot.unitree.vfh_local_planner", level=logging.DEBUG) + + +class VFHPurePursuitPlanner(BaseLocalPlanner): + """ + A local planner that combines Vector Field Histogram (VFH) for obstacle avoidance + with Pure Pursuit for goal tracking. + """ + + def __init__( + self, + get_costmap: Callable[[], Optional[OccupancyGrid]], + transform: object, + move_vel_control: Callable[[float, float, float], None], + safety_threshold: float = 0.8, + histogram_bins: int = 144, + max_linear_vel: float = 0.8, + max_angular_vel: float = 1.0, + lookahead_distance: float = 1.0, + goal_tolerance: float = 0.2, + angle_tolerance: float = 0.1, # ~5.7 degrees + robot_width: float = 0.5, + robot_length: float = 0.7, + visualization_size: int = 400, + control_frequency: float = 10.0, + safe_goal_distance: float = 1.0, + ): + """ + Initialize the VFH + Pure Pursuit planner. + + Args: + get_costmap: Function to get the latest local costmap + transform: Object with transform methods (transform_point, transform_rot, etc.) + move_vel_control: Function to send velocity commands + safety_threshold: Distance to maintain from obstacles (meters) + histogram_bins: Number of directional bins in the polar histogram + max_linear_vel: Maximum linear velocity (m/s) + max_angular_vel: Maximum angular velocity (rad/s) + lookahead_distance: Lookahead distance for pure pursuit (meters) + goal_tolerance: Distance at which the goal is considered reached (meters) + angle_tolerance: Angle at which the goal orientation is considered reached (radians) + robot_width: Width of the robot for visualization (meters) + robot_length: Length of the robot for visualization (meters) + visualization_size: Size of the visualization image in pixels + control_frequency: Frequency at which the planner is called (Hz) + safe_goal_distance: Distance at which to adjust the goal and ignore obstacles (meters) + """ + # Initialize base class + super().__init__( + get_costmap=get_costmap, + transform=transform, + move_vel_control=move_vel_control, + safety_threshold=safety_threshold, + max_linear_vel=max_linear_vel, + max_angular_vel=max_angular_vel, + lookahead_distance=lookahead_distance, + goal_tolerance=goal_tolerance, + angle_tolerance=angle_tolerance, + robot_width=robot_width, + robot_length=robot_length, + visualization_size=visualization_size, + control_frequency=control_frequency, + safe_goal_distance=safe_goal_distance, + ) + + # VFH specific parameters + self.histogram_bins = histogram_bins + self.histogram = None + self.selected_direction = None + + # VFH tuning parameters + self.alpha = 0.2 # Histogram smoothing factor + self.obstacle_weight = 10.0 + self.goal_weight = 1.0 + self.prev_direction_weight = 0.5 + self.prev_selected_angle = 0.0 + self.prev_linear_vel = 0.0 + self.linear_vel_filter_factor = 0.4 + self.low_speed_nudge = 0.1 + + # Add after other initialization + self.angle_mapping = np.linspace( + -np.pi, np.pi, self.histogram_bins, endpoint=False + ) + self.smoothing_kernel = np.array([self.alpha, (1 - 2 * self.alpha), self.alpha]) + + def _compute_velocity_commands(self) -> Dict[str, float]: + """ + VFH + Pure Pursuit specific implementation of velocity command computation. + + Returns: + Dict[str, float]: Velocity commands with 'x_vel' and 'angular_vel' keys + """ + # Get necessary data for planning + costmap = self.get_costmap() + if costmap is None: + logger.warning("No costmap available for planning") + return {"x_vel": 0.0, "angular_vel": 0.0} + + [pos, rot] = self.transform.transform_euler("base_link", "odom") + robot_x, robot_y, robot_theta = pos[0], pos[1], rot[2] + robot_pose = (robot_x, robot_y, robot_theta) + + # Calculate goal-related parameters + goal_x, goal_y = self.goal_xy + dx = goal_x - robot_x + dy = goal_y - robot_y + goal_distance = np.linalg.norm([dx, dy]) + goal_direction = np.arctan2(dy, dx) - robot_theta + goal_direction = normalize_angle(goal_direction) + + self.histogram = self.build_polar_histogram(costmap, robot_pose) + + # If we're ignoring obstacles near the goal, zero out the histogram + if self.ignore_obstacles: + self.histogram = np.zeros_like(self.histogram) + + self.selected_direction = self.select_direction( + self.goal_weight, + self.obstacle_weight, + self.prev_direction_weight, + self.histogram, + goal_direction, + ) + + # Calculate Pure Pursuit Velocities + linear_vel, angular_vel = self.compute_pure_pursuit( + goal_distance, self.selected_direction + ) + + # Slow down when turning sharply + if abs(self.selected_direction) > 0.25: # ~15 degrees + # Scale from 1.0 (small turn) to 0.5 (sharp turn at 90 degrees or more) + turn_factor = max(0.25, 1.0 - (abs(self.selected_direction) / (np.pi / 2))) + linear_vel *= turn_factor + + # Apply Collision Avoidance Stop - skip if ignoring obstacles + if not self.ignore_obstacles and self.check_collision( + self.selected_direction, safety_threshold=0.5 + ): + # Re-select direction prioritizing obstacle avoidance if colliding + self.selected_direction = self.select_direction( + self.goal_weight * 0.2, + self.obstacle_weight, + self.prev_direction_weight * 0.2, + self.histogram, + goal_direction, + ) + linear_vel, angular_vel = self.compute_pure_pursuit( + goal_distance, self.selected_direction + ) + + if self.check_collision(0.0, safety_threshold=self.safety_threshold): + logger.warning("Collision detected ahead. Stopping.") + linear_vel = 0.0 + + self.prev_linear_vel = linear_vel + filtered_linear_vel = ( + self.prev_linear_vel * self.linear_vel_filter_factor + + linear_vel * (1 - self.linear_vel_filter_factor) + ) + + return {"x_vel": filtered_linear_vel, "angular_vel": angular_vel} + + def _smooth_histogram(self, histogram: np.ndarray) -> np.ndarray: + """ + Apply advanced smoothing to the polar histogram to better identify valleys + and reduce noise. + + Args: + histogram: Raw histogram to smooth + + Returns: + np.ndarray: Smoothed histogram + """ + # Apply a windowed average with variable width based on obstacle density + smoothed = np.zeros_like(histogram) + bins = len(histogram) + + # First pass: basic smoothing with a 5-point kernel + # This uses a wider window than the original 3-point smoother + for i in range(bins): + # Compute indices with wrap-around + indices = [(i + j) % bins for j in range(-2, 3)] + # Apply weighted average (more weight to the center) + weights = [0.1, 0.2, 0.4, 0.2, 0.1] # Sum = 1.0 + smoothed[i] = sum( + histogram[idx] * weight for idx, weight in zip(indices, weights) + ) + + # Second pass: peak and valley enhancement + enhanced = np.zeros_like(smoothed) + for i in range(bins): + # Check neighboring values + prev_idx = (i - 1) % bins + next_idx = (i + 1) % bins + + # Enhance valleys (low values) + if smoothed[i] < smoothed[prev_idx] and smoothed[i] < smoothed[next_idx]: + # It's a local minimum - make it even lower + enhanced[i] = smoothed[i] * 0.8 + # Enhance peaks (high values) + elif smoothed[i] > smoothed[prev_idx] and smoothed[i] > smoothed[next_idx]: + # It's a local maximum - make it even higher + enhanced[i] = min(1.0, smoothed[i] * 1.2) + else: + enhanced[i] = smoothed[i] + + return enhanced + + def build_polar_histogram( + self, costmap: Costmap, robot_pose: Tuple[float, float, float] + ): + """ + Build a polar histogram of obstacle densities around the robot. + + Args: + costmap: Costmap object with grid and metadata + robot_pose: Tuple (x, y, theta) of the robot pose in the odom frame + + Returns: + np.ndarray: Polar histogram of obstacle densities + """ + + # Get grid and find all obstacle cells + occupancy_grid = costmap.grid + y_indices, x_indices = np.where(occupancy_grid > 0) + if len(y_indices) == 0: # No obstacles + return np.zeros(self.histogram_bins) + + # Get robot position in grid coordinates + robot_x, robot_y, robot_theta = robot_pose + robot_point = costmap.world_to_grid((robot_x, robot_y)) + robot_cell_x, robot_cell_y = robot_point.x, robot_point.y + + # Vectorized distance and angle calculation + dx_cells = x_indices - robot_cell_x + dy_cells = y_indices - robot_cell_y + distances = np.sqrt(dx_cells**2 + dy_cells**2) * costmap.resolution + angles_grid = np.arctan2(dy_cells, dx_cells) + angles_robot = normalize_angle(angles_grid - robot_theta) + + # Convert to bin indices + bin_indices = ( + (angles_robot + np.pi) / (2 * np.pi) * self.histogram_bins + ).astype(int) % self.histogram_bins + + # Get obstacle values + obstacle_values = occupancy_grid[y_indices, x_indices] / 100.0 + + # Build histogram + histogram = np.zeros(self.histogram_bins) + mask = distances > 0 + # Weight obstacles by inverse square of distance and cell value + np.add.at( + histogram, bin_indices[mask], obstacle_values[mask] / (distances[mask] ** 2) + ) + + # Apply the enhanced smoothing + return self._smooth_histogram(histogram) + + def select_direction( + self, + goal_weight, + obstacle_weight, + prev_direction_weight, + histogram, + goal_direction, + ): + """ + Select best direction based on a simple weighted cost function. + + Args: + goal_weight: Weight for the goal direction component + obstacle_weight: Weight for the obstacle avoidance component + prev_direction_weight: Weight for previous direction consistency + histogram: Polar histogram of obstacle density + goal_direction: Desired direction to goal + + Returns: + float: Selected direction in radians + """ + # Normalize histogram if needed + if np.max(histogram) > 0: + histogram = histogram / np.max(histogram) + + # Calculate costs for each possible direction + angle_diffs = np.abs(normalize_angle(self.angle_mapping - goal_direction)) + prev_diffs = np.abs( + normalize_angle(self.angle_mapping - self.prev_selected_angle) + ) + + # Combine costs with weights + obstacle_costs = obstacle_weight * histogram + goal_costs = goal_weight * angle_diffs + prev_costs = prev_direction_weight * prev_diffs + + total_costs = obstacle_costs + goal_costs + prev_costs + + # Select direction with lowest cost + min_cost_idx = np.argmin(total_costs) + selected_angle = self.angle_mapping[min_cost_idx] + + # Update history for next iteration + self.prev_selected_angle = selected_angle + + return selected_angle + + def compute_pure_pursuit( + self, goal_distance: float, goal_direction: float + ) -> Tuple[float, float]: + """Compute pure pursuit velocities.""" + if goal_distance < self.goal_tolerance: + return 0.0, 0.0 + + lookahead = min(self.lookahead_distance, goal_distance) + linear_vel = min(self.max_linear_vel, goal_distance) + angular_vel = 2.0 * np.sin(goal_direction) / lookahead + angular_vel = max(-self.max_angular_vel, min(angular_vel, self.max_angular_vel)) + + return linear_vel, angular_vel + + def check_collision( + self, selected_direction: float, safety_threshold: float = 1.0 + ) -> bool: + """Check if there's an obstacle in the selected direction within safety threshold.""" + # Skip collision check if ignoring obstacles + if self.ignore_obstacles: + return False + + # Get the latest costmap and robot pose + costmap = self.get_costmap() + if costmap is None: + return False # No costmap available + + [pos, rot] = self.transform.transform_euler("base_link", "odom") + robot_x, robot_y, robot_theta = pos[0], pos[1], rot[2] + + # Direction in world frame + direction_world = robot_theta + selected_direction + + # Safety distance in cells + safety_cells = int(safety_threshold / costmap.resolution) + + # Get robot position in grid coordinates + robot_point = costmap.world_to_grid((robot_x, robot_y)) + robot_cell_x, robot_cell_y = robot_point.x, robot_point.y + + # Check for obstacles along the selected direction + for dist in range(1, safety_cells + 1): + # Calculate cell position + cell_x = robot_cell_x + int(dist * np.cos(direction_world)) + cell_y = robot_cell_y + int(dist * np.sin(direction_world)) + + # Check if cell is within grid bounds + if not (0 <= cell_x < costmap.width and 0 <= cell_y < costmap.height): + continue + + # Check if cell contains an obstacle (threshold at 50) + if costmap.grid[int(cell_y), int(cell_x)] > 50: + return True + + return False # No collision detected + + def update_visualization(self) -> np.ndarray: + """Generate visualization of the planning state.""" + try: + costmap = self.get_costmap() + if costmap is None: + raise ValueError("Costmap is None") + + [pos, rot] = self.transform.transform_euler("base_link", "odom") + robot_x, robot_y, robot_theta = pos[0], pos[1], rot[2] + robot_pose = (robot_x, robot_y, robot_theta) + + goal_xy = self.goal_xy # This could be a lookahead point or final goal + + # Get the latest histogram and selected direction, if available + histogram = getattr(self, "histogram", None) + selected_direction = getattr(self, "selected_direction", None) + + # Get waypoint data if in waypoint mode + waypoints_to_draw = self.waypoints_in_odom + current_wp_index_to_draw = ( + self.current_waypoint_index + if self.waypoints_in_odom is not None + else None + ) + # Ensure index is valid before passing + if waypoints_to_draw is not None and current_wp_index_to_draw is not None: + if not (0 <= current_wp_index_to_draw < len(waypoints_to_draw)): + current_wp_index_to_draw = None # Invalidate index if out of bounds + + return visualize_local_planner_state( + occupancy_grid=costmap.grid, + grid_resolution=costmap.resolution, + grid_origin=(costmap.origin.x, costmap.origin.y, costmap.origin_theta), + robot_pose=robot_pose, + goal_xy=goal_xy, # Current target (lookahead or final) + goal_theta=self.goal_theta, # Pass goal orientation if available + visualization_size=self.visualization_size, + robot_width=self.robot_width, + robot_length=self.robot_length, + histogram=histogram, + selected_direction=selected_direction, + waypoints=waypoints_to_draw, # Pass the full path + current_waypoint_index=current_wp_index_to_draw, # Pass the target index + ) + except Exception as e: + logger.error(f"Error during visualization update: {e}") + # Return a blank image with error text + blank = ( + np.ones( + (self.visualization_size, self.visualization_size, 3), + dtype=np.uint8, + ) + * 255 + ) + cv2.putText( + blank, + "Viz Error", + (self.visualization_size // 4, self.visualization_size // 2), + cv2.FONT_HERSHEY_SIMPLEX, + 1, + (0, 0, 0), + 2, + ) + return blank diff --git a/dimos/robot/local_planner/vfh_local_planner.py b/dimos/robot/local_planner/vfh_local_planner.py index 53d4588bf3..55fe88a8ec 100644 --- a/dimos/robot/local_planner/vfh_local_planner.py +++ b/dimos/robot/local_planner/vfh_local_planner.py @@ -1,46 +1,50 @@ #!/usr/bin/env python3 -import math import numpy as np from typing import Dict, Tuple, Optional, Callable import cv2 import logging -import time from dimos.utils.logging_config import setup_logger from dimos.utils.ros_utils import normalize_angle -from dimos.robot.local_planner.local_planner import BaseLocalPlanner, visualize_local_planner_state +from dimos.robot.local_planner.local_planner import ( + BaseLocalPlanner, + visualize_local_planner_state, +) from dimos.types.costmap import Costmap from nav_msgs.msg import OccupancyGrid logger = setup_logger("dimos.robot.unitree.vfh_local_planner", level=logging.DEBUG) + class VFHPurePursuitPlanner(BaseLocalPlanner): """ A local planner that combines Vector Field Histogram (VFH) for obstacle avoidance with Pure Pursuit for goal tracking. """ - - def __init__(self, - get_costmap: Callable[[], Optional[OccupancyGrid]], - transform: object, - move_vel_control: Callable[[float, float, float], None], - safety_threshold: float = 0.8, - histogram_bins: int = 144, - max_linear_vel: float = 0.8, - max_angular_vel: float = 1.0, - lookahead_distance: float = 1.0, - goal_tolerance: float = 0.2, - angle_tolerance: float = 0.1, # ~5.7 degrees - robot_width: float = 0.5, - robot_length: float = 0.7, - visualization_size: int = 400, - control_frequency: float = 10.0, - safe_goal_distance: float = 1.0): + + def __init__( + self, + get_costmap: Callable[[], Optional[OccupancyGrid]], + transform: object, + move_vel_control: Callable[[float, float, float], None], + safety_threshold: float = 0.8, + histogram_bins: int = 144, + max_linear_vel: float = 0.8, + max_angular_vel: float = 1.0, + lookahead_distance: float = 1.0, + goal_tolerance: float = 0.2, + angle_tolerance: float = 0.1, # ~5.7 degrees + robot_width: float = 0.5, + robot_length: float = 0.7, + visualization_size: int = 400, + control_frequency: float = 10.0, + safe_goal_distance: float = 1.0, + ): """ Initialize the VFH + Pure Pursuit planner. - + Args: get_costmap: Function to get the latest local costmap transform: Object with transform methods (transform_point, transform_rot, etc.) @@ -73,14 +77,14 @@ def __init__(self, robot_length=robot_length, visualization_size=visualization_size, control_frequency=control_frequency, - safe_goal_distance=safe_goal_distance + safe_goal_distance=safe_goal_distance, ) - + # VFH specific parameters self.histogram_bins = histogram_bins self.histogram = None self.selected_direction = None - + # VFH tuning parameters self.alpha = 0.2 # Histogram smoothing factor self.obstacle_weight = 10.0 @@ -92,13 +96,15 @@ def __init__(self, self.low_speed_nudge = 0.1 # Add after other initialization - self.angle_mapping = np.linspace(-np.pi, np.pi, self.histogram_bins, endpoint=False) - self.smoothing_kernel = np.array([self.alpha, (1-2*self.alpha), self.alpha]) + self.angle_mapping = np.linspace( + -np.pi, np.pi, self.histogram_bins, endpoint=False + ) + self.smoothing_kernel = np.array([self.alpha, (1 - 2 * self.alpha), self.alpha]) def _compute_velocity_commands(self) -> Dict[str, float]: """ VFH + Pure Pursuit specific implementation of velocity command computation. - + Returns: Dict[str, float]: Velocity commands with 'x_vel' and 'angular_vel' keys """ @@ -106,12 +112,12 @@ def _compute_velocity_commands(self) -> Dict[str, float]: costmap = self.get_costmap() if costmap is None: logger.warning("No costmap available for planning") - return {'x_vel': 0.0, 'angular_vel': 0.0} - + return {"x_vel": 0.0, "angular_vel": 0.0} + [pos, rot] = self.transform.transform_euler("base_link", "odom") robot_x, robot_y, robot_theta = pos[0], pos[1], rot[2] robot_pose = (robot_x, robot_y, robot_theta) - + # Calculate goal-related parameters goal_x, goal_y = self.goal_xy dx = goal_x - robot_x @@ -119,66 +125,75 @@ def _compute_velocity_commands(self) -> Dict[str, float]: goal_distance = np.linalg.norm([dx, dy]) goal_direction = np.arctan2(dy, dx) - robot_theta goal_direction = normalize_angle(goal_direction) - + self.histogram = self.build_polar_histogram(costmap, robot_pose) - + # If we're ignoring obstacles near the goal, zero out the histogram if self.ignore_obstacles: self.histogram = np.zeros_like(self.histogram) - + self.selected_direction = self.select_direction( self.goal_weight, self.obstacle_weight, self.prev_direction_weight, - self.histogram, + self.histogram, goal_direction, ) # Calculate Pure Pursuit Velocities - linear_vel, angular_vel = self.compute_pure_pursuit(goal_distance, self.selected_direction) + linear_vel, angular_vel = self.compute_pure_pursuit( + goal_distance, self.selected_direction + ) # Slow down when turning sharply if abs(self.selected_direction) > 0.25: # ~15 degrees # Scale from 1.0 (small turn) to 0.5 (sharp turn at 90 degrees or more) - turn_factor = max(0.25, 1.0 - (abs(self.selected_direction) / (np.pi/2))) + turn_factor = max(0.25, 1.0 - (abs(self.selected_direction) / (np.pi / 2))) linear_vel *= turn_factor # Apply Collision Avoidance Stop - skip if ignoring obstacles - if not self.ignore_obstacles and self.check_collision(self.selected_direction, safety_threshold=0.5): + if not self.ignore_obstacles and self.check_collision( + self.selected_direction, safety_threshold=0.5 + ): # Re-select direction prioritizing obstacle avoidance if colliding self.selected_direction = self.select_direction( self.goal_weight * 0.2, self.obstacle_weight, self.prev_direction_weight * 0.2, self.histogram, - goal_direction + goal_direction, + ) + linear_vel, angular_vel = self.compute_pure_pursuit( + goal_distance, self.selected_direction ) - linear_vel, angular_vel = self.compute_pure_pursuit(goal_distance, self.selected_direction) if self.check_collision(0.0, safety_threshold=self.safety_threshold): logger.warning("Collision detected ahead. Stopping.") linear_vel = 0.0 self.prev_linear_vel = linear_vel - filtered_linear_vel = self.prev_linear_vel * self.linear_vel_filter_factor + linear_vel * (1 - self.linear_vel_filter_factor) + filtered_linear_vel = ( + self.prev_linear_vel * self.linear_vel_filter_factor + + linear_vel * (1 - self.linear_vel_filter_factor) + ) + + return {"x_vel": filtered_linear_vel, "angular_vel": angular_vel} - return {'x_vel': filtered_linear_vel, 'angular_vel': angular_vel} - def _smooth_histogram(self, histogram: np.ndarray) -> np.ndarray: """ Apply advanced smoothing to the polar histogram to better identify valleys and reduce noise. - + Args: histogram: Raw histogram to smooth - + Returns: np.ndarray: Smoothed histogram """ # Apply a windowed average with variable width based on obstacle density smoothed = np.zeros_like(histogram) bins = len(histogram) - + # First pass: basic smoothing with a 5-point kernel # This uses a wider window than the original 3-point smoother for i in range(bins): @@ -186,15 +201,17 @@ def _smooth_histogram(self, histogram: np.ndarray) -> np.ndarray: indices = [(i + j) % bins for j in range(-2, 3)] # Apply weighted average (more weight to the center) weights = [0.1, 0.2, 0.4, 0.2, 0.1] # Sum = 1.0 - smoothed[i] = sum(histogram[idx] * weight for idx, weight in zip(indices, weights)) - + smoothed[i] = sum( + histogram[idx] * weight for idx, weight in zip(indices, weights) + ) + # Second pass: peak and valley enhancement enhanced = np.zeros_like(smoothed) for i in range(bins): # Check neighboring values prev_idx = (i - 1) % bins next_idx = (i + 1) % bins - + # Enhance valleys (low values) if smoothed[i] < smoothed[prev_idx] and smoothed[i] < smoothed[next_idx]: # It's a local minimum - make it even lower @@ -205,142 +222,161 @@ def _smooth_histogram(self, histogram: np.ndarray) -> np.ndarray: enhanced[i] = min(1.0, smoothed[i] * 1.2) else: enhanced[i] = smoothed[i] - + return enhanced - def build_polar_histogram(self, costmap: Costmap, robot_pose: Tuple[float, float, float]): + def build_polar_histogram( + self, costmap: Costmap, robot_pose: Tuple[float, float, float] + ): """ Build a polar histogram of obstacle densities around the robot. - + Args: costmap: Costmap object with grid and metadata robot_pose: Tuple (x, y, theta) of the robot pose in the odom frame - + Returns: np.ndarray: Polar histogram of obstacle densities """ - + # Get grid and find all obstacle cells occupancy_grid = costmap.grid y_indices, x_indices = np.where(occupancy_grid > 0) if len(y_indices) == 0: # No obstacles return np.zeros(self.histogram_bins) - + # Get robot position in grid coordinates robot_x, robot_y, robot_theta = robot_pose robot_point = costmap.world_to_grid((robot_x, robot_y)) robot_cell_x, robot_cell_y = robot_point.x, robot_point.y - + # Vectorized distance and angle calculation dx_cells = x_indices - robot_cell_x dy_cells = y_indices - robot_cell_y distances = np.sqrt(dx_cells**2 + dy_cells**2) * costmap.resolution angles_grid = np.arctan2(dy_cells, dx_cells) angles_robot = normalize_angle(angles_grid - robot_theta) - + # Convert to bin indices - bin_indices = ((angles_robot + np.pi) / (2 * np.pi) * self.histogram_bins).astype(int) % self.histogram_bins - + bin_indices = ( + (angles_robot + np.pi) / (2 * np.pi) * self.histogram_bins + ).astype(int) % self.histogram_bins + # Get obstacle values obstacle_values = occupancy_grid[y_indices, x_indices] / 100.0 - + # Build histogram histogram = np.zeros(self.histogram_bins) mask = distances > 0 # Weight obstacles by inverse square of distance and cell value - np.add.at(histogram, bin_indices[mask], obstacle_values[mask] / (distances[mask] ** 2)) - + np.add.at( + histogram, bin_indices[mask], obstacle_values[mask] / (distances[mask] ** 2) + ) + # Apply the enhanced smoothing return self._smooth_histogram(histogram) - - def select_direction(self, goal_weight, obstacle_weight, prev_direction_weight, histogram, goal_direction): + + def select_direction( + self, + goal_weight, + obstacle_weight, + prev_direction_weight, + histogram, + goal_direction, + ): """ Select best direction based on a simple weighted cost function. - + Args: goal_weight: Weight for the goal direction component obstacle_weight: Weight for the obstacle avoidance component prev_direction_weight: Weight for previous direction consistency histogram: Polar histogram of obstacle density goal_direction: Desired direction to goal - + Returns: float: Selected direction in radians """ # Normalize histogram if needed if np.max(histogram) > 0: histogram = histogram / np.max(histogram) - + # Calculate costs for each possible direction angle_diffs = np.abs(normalize_angle(self.angle_mapping - goal_direction)) - prev_diffs = np.abs(normalize_angle(self.angle_mapping - self.prev_selected_angle)) - + prev_diffs = np.abs( + normalize_angle(self.angle_mapping - self.prev_selected_angle) + ) + # Combine costs with weights obstacle_costs = obstacle_weight * histogram goal_costs = goal_weight * angle_diffs prev_costs = prev_direction_weight * prev_diffs - + total_costs = obstacle_costs + goal_costs + prev_costs - + # Select direction with lowest cost min_cost_idx = np.argmin(total_costs) selected_angle = self.angle_mapping[min_cost_idx] - + # Update history for next iteration self.prev_selected_angle = selected_angle - + return selected_angle - - def compute_pure_pursuit(self, goal_distance: float, goal_direction: float) -> Tuple[float, float]: - """ Compute pure pursuit velocities.""" + + def compute_pure_pursuit( + self, goal_distance: float, goal_direction: float + ) -> Tuple[float, float]: + """Compute pure pursuit velocities.""" if goal_distance < self.goal_tolerance: return 0.0, 0.0 - + lookahead = min(self.lookahead_distance, goal_distance) linear_vel = min(self.max_linear_vel, goal_distance) angular_vel = 2.0 * np.sin(goal_direction) / lookahead angular_vel = max(-self.max_angular_vel, min(angular_vel, self.max_angular_vel)) - + return linear_vel, angular_vel - - def check_collision(self, selected_direction: float, safety_threshold: float = 1.0) -> bool: + + def check_collision( + self, selected_direction: float, safety_threshold: float = 1.0 + ) -> bool: """Check if there's an obstacle in the selected direction within safety threshold.""" # Skip collision check if ignoring obstacles if self.ignore_obstacles: return False - + # Get the latest costmap and robot pose costmap = self.get_costmap() if costmap is None: return False # No costmap available - + [pos, rot] = self.transform.transform_euler("base_link", "odom") robot_x, robot_y, robot_theta = pos[0], pos[1], rot[2] - + # Direction in world frame direction_world = robot_theta + selected_direction - + # Safety distance in cells safety_cells = int(safety_threshold / costmap.resolution) - + # Get robot position in grid coordinates robot_point = costmap.world_to_grid((robot_x, robot_y)) robot_cell_x, robot_cell_y = robot_point.x, robot_point.y - + # Check for obstacles along the selected direction for dist in range(1, safety_cells + 1): # Calculate cell position cell_x = robot_cell_x + int(dist * np.cos(direction_world)) cell_y = robot_cell_y + int(dist * np.sin(direction_world)) - + # Check if cell is within grid bounds if not (0 <= cell_x < costmap.width and 0 <= cell_y < costmap.height): continue - + # Check if cell contains an obstacle (threshold at 50) if costmap.grid[int(cell_y), int(cell_x)] > 50: return True - + return False # No collision detected def update_visualization(self) -> np.ndarray: @@ -349,45 +385,61 @@ def update_visualization(self) -> np.ndarray: costmap = self.get_costmap() if costmap is None: raise ValueError("Costmap is None") - + [pos, rot] = self.transform.transform_euler("base_link", "odom") robot_x, robot_y, robot_theta = pos[0], pos[1], rot[2] robot_pose = (robot_x, robot_y, robot_theta) - - goal_xy = self.goal_xy # This could be a lookahead point or final goal - + + goal_xy = self.goal_xy # This could be a lookahead point or final goal + # Get the latest histogram and selected direction, if available - histogram = getattr(self, 'histogram', None) - selected_direction = getattr(self, 'selected_direction', None) - + histogram = getattr(self, "histogram", None) + selected_direction = getattr(self, "selected_direction", None) + # Get waypoint data if in waypoint mode waypoints_to_draw = self.waypoints_in_odom - current_wp_index_to_draw = self.current_waypoint_index if self.waypoints_in_odom is not None else None + current_wp_index_to_draw = ( + self.current_waypoint_index + if self.waypoints_in_odom is not None + else None + ) # Ensure index is valid before passing - if waypoints_to_draw is not None and current_wp_index_to_draw is not None: + if waypoints_to_draw is not None and current_wp_index_to_draw is not None: if not (0 <= current_wp_index_to_draw < len(waypoints_to_draw)): - current_wp_index_to_draw = None # Invalidate index if out of bounds + current_wp_index_to_draw = None # Invalidate index if out of bounds return visualize_local_planner_state( occupancy_grid=costmap.grid, grid_resolution=costmap.resolution, grid_origin=(costmap.origin.x, costmap.origin.y, costmap.origin_theta), robot_pose=robot_pose, - goal_xy=goal_xy, # Current target (lookahead or final) - goal_theta=self.goal_theta, # Pass goal orientation if available + goal_xy=goal_xy, # Current target (lookahead or final) + goal_theta=self.goal_theta, # Pass goal orientation if available visualization_size=self.visualization_size, robot_width=self.robot_width, robot_length=self.robot_length, - histogram=histogram, + histogram=histogram, selected_direction=selected_direction, - waypoints=waypoints_to_draw, # Pass the full path - current_waypoint_index=current_wp_index_to_draw # Pass the target index + waypoints=waypoints_to_draw, # Pass the full path + current_waypoint_index=current_wp_index_to_draw, # Pass the target index ) except Exception as e: logger.error(f"Error during visualization update: {e}") # Return a blank image with error text - blank = np.ones((self.visualization_size, self.visualization_size, 3), dtype=np.uint8) * 255 - cv2.putText(blank, "Viz Error", - (self.visualization_size // 4, self.visualization_size // 2), - cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 0, 0), 2) + blank = ( + np.ones( + (self.visualization_size, self.visualization_size, 3), + dtype=np.uint8, + ) + * 255 + ) + cv2.putText( + blank, + "Viz Error", + (self.visualization_size // 4, self.visualization_size // 2), + cv2.FONT_HERSHEY_SIMPLEX, + 1, + (0, 0, 0), + 2, + ) return blank diff --git a/dimos/robot/position_stream.py b/dimos/robot/position_stream.py index 9a59fe012a..c4aa24635d 100644 --- a/dimos/robot/position_stream.py +++ b/dimos/robot/position_stream.py @@ -19,12 +19,10 @@ """ import logging -import numpy as np -from typing import Tuple, Optional, Callable, Dict, Any +from typing import Tuple, Optional import time from reactivex import Subject, Observable from reactivex import operators as ops -import rclpy from rclpy.node import Node from geometry_msgs.msg import PoseStamped from nav_msgs.msg import Odometry @@ -33,24 +31,25 @@ logger = setup_logger("dimos.robot.position_stream", level=logging.INFO) + class PositionStreamProvider: """ A provider for streaming position updates from ROS. - + This class creates an Observable stream of position updates by subscribing to ROS odometry or pose topics. """ - + def __init__( self, ros_node: Node, odometry_topic: str = "/odom", pose_topic: Optional[str] = None, - use_odometry: bool = True + use_odometry: bool = True, ): """ Initialize the position stream provider. - + Args: ros_node: ROS node to use for subscriptions odometry_topic: Name of the odometry topic (if use_odometry is True) @@ -61,108 +60,105 @@ def __init__( self.odometry_topic = odometry_topic self.pose_topic = pose_topic self.use_odometry = use_odometry - + self._subject = Subject() - + self.last_position = None self.last_update_time = None - + self._create_subscription() - - logger.info(f"PositionStreamProvider initialized with " - f"{'odometry topic' if use_odometry else 'pose topic'}: " - f"{odometry_topic if use_odometry else pose_topic}") - + + logger.info( + f"PositionStreamProvider initialized with " + f"{'odometry topic' if use_odometry else 'pose topic'}: " + f"{odometry_topic if use_odometry else pose_topic}" + ) + def _create_subscription(self): """Create the appropriate ROS subscription based on configuration.""" if self.use_odometry: self.subscription = self.ros_node.create_subscription( - Odometry, - self.odometry_topic, - self._odometry_callback, - 10 + Odometry, self.odometry_topic, self._odometry_callback, 10 ) logger.info(f"Subscribed to odometry topic: {self.odometry_topic}") else: if not self.pose_topic: - raise ValueError("Pose topic must be specified when use_odometry is False") - + raise ValueError( + "Pose topic must be specified when use_odometry is False" + ) + self.subscription = self.ros_node.create_subscription( - PoseStamped, - self.pose_topic, - self._pose_callback, - 10 + PoseStamped, self.pose_topic, self._pose_callback, 10 ) logger.info(f"Subscribed to pose topic: {self.pose_topic}") - - + def _odometry_callback(self, msg: Odometry): """ Process odometry messages and extract position. - + Args: msg: Odometry message from ROS """ x = msg.pose.pose.position.x y = msg.pose.pose.position.y - + self._update_position(x, y) - + def _pose_callback(self, msg: PoseStamped): """ Process pose messages and extract position. - + Args: msg: PoseStamped message from ROS """ x = msg.pose.position.x y = msg.pose.position.y - + self._update_position(x, y) - + def _update_position(self, x: float, y: float): """ Update the current position and emit to subscribers. - + Args: x: X coordinate y: Y coordinate """ current_time = time.time() position = (x, y) - + if self.last_update_time: update_rate = 1.0 / (current_time - self.last_update_time) logger.debug(f"Position update rate: {update_rate:.1f} Hz") - + self.last_position = position self.last_update_time = current_time - + self._subject.on_next(position) logger.debug(f"Position updated: ({x:.2f}, {y:.2f})") - + def get_position_stream(self) -> Observable: """ Get an Observable stream of position updates. - + Returns: Observable that emits (x, y) tuples """ return self._subject.pipe( ops.share() # Share the stream among multiple subscribers ) - + def get_current_position(self) -> Optional[Tuple[float, float]]: """ Get the most recent position. - + Returns: Tuple of (x, y) coordinates, or None if no position has been received """ return self.last_position - + def cleanup(self): """Clean up resources.""" - if hasattr(self, 'subscription') and self.subscription: + if hasattr(self, "subscription") and self.subscription: self.ros_node.destroy_subscription(self.subscription) logger.info("Position subscription destroyed") diff --git a/dimos/robot/recorder.py b/dimos/robot/recorder.py index 8f5ccc9218..df17c86be5 100644 --- a/dimos/robot/recorder.py +++ b/dimos/robot/recorder.py @@ -17,9 +17,9 @@ import threading import time from queue import Queue -from typing import Any, Callable, Literal +from typing import Callable, Literal -#from dimos.data.recording import Recorder +# from dimos.data.recording import Recorder class RobotRecorder: @@ -125,7 +125,11 @@ def _process_queue(self) -> None: """Processes the recording queue asynchronously.""" while True: image, instruction, action, state = self.recording_queue.get() - self.recorder.record(observation={"image": image, "instruction": instruction}, action=action, state=state) + self.recorder.record( + observation={"image": image, "instruction": instruction}, + action=action, + state=state, + ) self.recording_queue.task_done() def record_current_state(self) -> None: @@ -154,4 +158,4 @@ def record_current_state(self) -> None: def record_last_state(self) -> None: """Records the final pose and image after the movement completes.""" - self.record_current_state() \ No newline at end of file + self.record_current_state() diff --git a/dimos/robot/robot.py b/dimos/robot/robot.py index ba1eb3cf58..51d15a7113 100644 --- a/dimos/robot/robot.py +++ b/dimos/robot/robot.py @@ -14,31 +14,25 @@ """Base module for all DIMOS robots. -This module provides the foundation for all DIMOS robots, including both physical -and simulated implementations, with common functionality for movement, control, +This module provides the foundation for all DIMOS robots, including both physical +and simulated implementations, with common functionality for movement, control, and video streaming. """ from abc import ABC import os -import logging -from typing import TYPE_CHECKING, Optional, Dict, Tuple, Any +from typing import TYPE_CHECKING, Optional -import chromadb from dimos.hardware.interface import HardwareInterface from dimos.perception.spatial_perception import SpatialMemory -from dimos.agents.memory.visual_memory import VisualMemory -from dimos.types.robot_location import RobotLocation from dimos.utils.logging_config import setup_logger if TYPE_CHECKING: from dimos.robot.ros_control import ROSControl else: - ROSControl = 'ROSControl' + ROSControl = "ROSControl" from dimos.skills.skills import SkillLibrary -from dimos.stream.frame_processor import FrameProcessor -from dimos.stream.video_operators import VideoOperators as vops from reactivex import Observable, operators as ops from reactivex.disposable import CompositeDisposable from reactivex.scheduler import ThreadPoolScheduler @@ -47,13 +41,14 @@ logger = setup_logger("dimos.robot.robot") + class Robot(ABC): """Base class for all DIMOS robots. - + This abstract base class defines the common interface and functionality for all DIMOS robots, whether physical or simulated. It provides methods for movement, rotation, video streaming, and hardware configuration management. - + Attributes: agent_config: Configuration for the robot's agent. hardware_interface: Interface to the robot's hardware components. @@ -63,17 +58,19 @@ class Robot(ABC): pool_scheduler: Thread pool scheduler for managing concurrent operations. """ - def __init__(self, - hardware_interface: HardwareInterface = None, - ros_control: ROSControl = None, - output_dir: str = os.path.join(os.getcwd(), "assets", "output"), - pool_scheduler: ThreadPoolScheduler = None, - skill_library: SkillLibrary = None, - spatial_memory_dir: str = None, - spatial_memory_collection: str = "spatial_memory", - new_memory: bool = False,): + def __init__( + self, + hardware_interface: HardwareInterface = None, + ros_control: ROSControl = None, + output_dir: str = os.path.join(os.getcwd(), "assets", "output"), + pool_scheduler: ThreadPoolScheduler = None, + skill_library: SkillLibrary = None, + spatial_memory_dir: str = None, + spatial_memory_collection: str = "spatial_memory", + new_memory: bool = False, + ): """Initialize a Robot instance. - + Args: hardware_interface: Interface to the robot's hardware. Defaults to None. ros_control: ROS-based control system. Defaults to None. @@ -96,42 +93,40 @@ def __init__(self, # Create output directory if it doesn't exist logger.info(f"Robot outputs will be saved to: {self.output_dir}") - + # Initialize spatial memory properties - self.spatial_memory_dir = spatial_memory_dir or os.path.join(self.output_dir, "spatial_memory") + self.spatial_memory_dir = spatial_memory_dir or os.path.join( + self.output_dir, "spatial_memory" + ) self.spatial_memory_collection = spatial_memory_collection self.db_path = os.path.join(self.spatial_memory_dir, "chromadb_data") - self.visual_memory_path = os.path.join(self.spatial_memory_dir, "visual_memory.pkl") - + self.visual_memory_path = os.path.join( + self.spatial_memory_dir, "visual_memory.pkl" + ) + # Create spatial memory directory os.makedirs(self.spatial_memory_dir, exist_ok=True) os.makedirs(self.db_path, exist_ok=True) - + # Import SpatialMemory here to avoid circular imports from dimos.perception.spatial_perception import SpatialMemory - + # Initialize spatial memory - this will be handled by SpatialMemory class video_stream = None transform_provider = None - + # Only create video stream if ROS control is available if self.ros_control is not None and self.ros_control.video_provider is not None: # Get video stream video_stream = self.get_ros_video_stream(fps=10) # Lower FPS for processing - + # Define transform provider def transform_provider(): position, rotation = self.ros_control.transform_euler("base_link") if position is None or rotation is None: - return { - "position": None, - "rotation": None - } - return { - "position": position, - "rotation": rotation - } - + return {"position": None, "rotation": None} + return {"position": position, "rotation": rotation} + # Create SpatialMemory instance - it will handle all initialization internally self._spatial_memory = SpatialMemory( collection_name=self.spatial_memory_collection, @@ -140,18 +135,18 @@ def transform_provider(): new_memory=new_memory, output_dir=self.spatial_memory_dir, video_stream=video_stream, - transform_provider=transform_provider + transform_provider=transform_provider, ) def get_ros_video_stream(self, fps: int = 30) -> Observable: """Get the ROS video stream with rate limiting and frame processing. - + Args: fps: Frames per second for the video stream. Defaults to 30. - + Returns: Observable: An observable stream of video frames. - + Raises: RuntimeError: If no ROS video provider is available. """ @@ -162,29 +157,30 @@ def get_ros_video_stream(self, fps: int = 30) -> Observable: # Get base stream from video provider video_stream = self.ros_control.video_provider.capture_video_as_observable( - fps=fps) + fps=fps + ) # Add minimal processing pipeline with proper thread handling processed_stream = video_stream.pipe( ops.subscribe_on(self.pool_scheduler), ops.observe_on(self.pool_scheduler), # Ensure thread safety - ops.share() # Share the stream + ops.share(), # Share the stream ) return processed_stream def move(self, distance: float, speed: float = 0.5) -> bool: """Move the robot using velocity commands. - + DEPRECATED: Use move_vel instead for direct velocity control. - + Args: distance: Distance to move forward in meters (must be positive). speed: Speed to move at in m/s. Defaults to 0.5. - + Returns: bool: True if movement succeeded. - + Raises: RuntimeError: If no ROS control interface is available. """ @@ -192,16 +188,16 @@ def move(self, distance: float, speed: float = 0.5) -> bool: def reverse(self, distance: float, speed: float = 0.5) -> bool: """Move the robot backward by a specified distance. - + DEPRECATED: Use move_vel with negative x value instead for direct velocity control. - + Args: distance: Distance to move backward in meters (must be positive). speed: Speed to move at in m/s. Defaults to 0.5. - + Returns: bool: True if movement succeeded. - + Raises: RuntimeError: If no ROS control interface is available. """ @@ -211,25 +207,32 @@ def spin(self, degrees: float, speed: float = 45.0) -> bool: """Rotate the robot by a specified angle. Args: - degrees: Angle to rotate in degrees (positive for counter-clockwise, + degrees: Angle to rotate in degrees (positive for counter-clockwise, negative for clockwise). speed: Angular speed in degrees/second. Defaults to 45.0. - + Returns: bool: True if rotation succeeded. - + Raises: RuntimeError: If no ROS control interface is available. """ if self.ros_control is None: - raise RuntimeError( - "No ROS control interface available for rotation") + raise RuntimeError("No ROS control interface available for rotation") return self.ros_control.spin(degrees, speed) - def webrtc_req(self, api_id: int, topic: str = None, parameter: str = '', - priority: int = 0, request_id: str = None, data=None, timeout: float = 1000.0) -> bool: + def webrtc_req( + self, + api_id: int, + topic: str = None, + parameter: str = "", + priority: int = 0, + request_id: str = None, + data=None, + timeout: float = 1000.0, + ) -> bool: """Send a WebRTC request command to the robot. - + Args: api_id: The API ID for the command. topic: The API topic to publish to. Defaults to ROSControl.webrtc_api_topic. @@ -240,7 +243,7 @@ def webrtc_req(self, api_id: int, topic: str = None, parameter: str = '', Returns: bool: True if command was sent successfully. - + Raises: RuntimeError: If no ROS control interface is available. @@ -248,45 +251,45 @@ def webrtc_req(self, api_id: int, topic: str = None, parameter: str = '', if self.ros_control is None: raise RuntimeError("No ROS control interface available for WebRTC commands") return self.ros_control.queue_webrtc_req( - api_id=api_id, + api_id=api_id, topic=topic, - parameter=parameter, + parameter=parameter, priority=priority, request_id=request_id, data=data, - timeout=timeout + timeout=timeout, ) def move_vel(self, x: float, y: float, yaw: float, duration: float = 0.0) -> bool: """Move the robot using direct movement commands. - + Args: x: Forward/backward velocity (m/s) y: Left/right velocity (m/s) yaw: Rotational velocity (rad/s) duration: How long to move (seconds). If 0, command is continuous - + Returns: bool: True if command was sent successfully - + Raises: RuntimeError: If no ROS control interface is available. """ if self.ros_control is None: raise RuntimeError("No ROS control interface available for movement") return self.ros_control.move_vel(x, y, yaw, duration) - + def pose_command(self, roll: float, pitch: float, yaw: float) -> bool: """Send a pose command to the robot. - + Args: roll: Roll angle in radians. pitch: Pitch angle in radians. yaw: Yaw angle in radians. - + Returns: bool: True if command was sent successfully. - + Raises: RuntimeError: If no ROS control interface is available. """ @@ -294,10 +297,9 @@ def pose_command(self, roll: float, pitch: float, yaw: float) -> bool: raise RuntimeError("No ROS control interface available for pose commands") return self.ros_control.pose_command(roll, pitch, yaw) - def update_hardware_interface(self, - new_hardware_interface: HardwareInterface): + def update_hardware_interface(self, new_hardware_interface: HardwareInterface): """Update the hardware interface with a new configuration. - + Args: new_hardware_interface: New hardware interface to use for the robot. """ @@ -305,10 +307,10 @@ def update_hardware_interface(self, def get_hardware_configuration(self): """Retrieve the current hardware configuration. - + Returns: The current hardware configuration from the hardware interface. - + Raises: AttributeError: If hardware_interface is None. """ @@ -316,32 +318,26 @@ def get_hardware_configuration(self): def set_hardware_configuration(self, configuration): """Set a new hardware configuration. - + Args: configuration: The new hardware configuration to set. - + Raises: AttributeError: If hardware_interface is None. """ self.hardware_interface.set_configuration(configuration) - - - - def get_spatial_memory(self) -> Optional[SpatialMemory]: """Simple getter for the spatial memory instance. - + Returns: The spatial memory instance or None if not set. """ return self._spatial_memory if self._spatial_memory else None - - def cleanup(self): """Clean up resources used by the robot. - + This method should be called when the robot is no longer needed to ensure proper release of resources such as ROS connections and subscriptions. @@ -349,11 +345,12 @@ def cleanup(self): # Dispose of resources if self.disposables: self.disposables.dispose() - + if self.ros_control: self.ros_control.cleanup() self.disposables.dispose() + class MockRobot(Robot): def __init__(self): super().__init__() @@ -362,4 +359,4 @@ def __init__(self): self.skill_library = SkillLibrary() def my_print(self): - print("Hello, world!") \ No newline at end of file + print("Hello, world!") diff --git a/dimos/robot/ros_command_queue.py b/dimos/robot/ros_command_queue.py index ca69e2419c..f80143301e 100644 --- a/dimos/robot/ros_command_queue.py +++ b/dimos/robot/ros_command_queue.py @@ -25,20 +25,23 @@ import uuid from enum import Enum, auto from queue import PriorityQueue, Empty -from typing import Callable, Optional, NamedTuple, Dict, Any, Tuple, List +from typing import Callable, Optional, NamedTuple, Dict, Any from dimos.utils.logging_config import setup_logger -import logging # Initialize logger for the ros command queue module logger = setup_logger("dimos.robot.ros_command_queue") + class CommandType(Enum): """Types of commands that can be queued""" + WEBRTC = auto() # WebRTC API requests - ACTION = auto() # Any action client or function call + ACTION = auto() # Any action client or function call + class WebRTCRequest(NamedTuple): """Class to represent a WebRTC request in the queue""" + id: str # Unique ID for tracking api_id: int # API ID for the command topic: str # Topic to publish to @@ -46,8 +49,10 @@ class WebRTCRequest(NamedTuple): priority: int # Priority level timeout: float # How long to wait for this request to complete + class ROSCommand(NamedTuple): """Class to represent a command in the queue""" + id: str # Unique ID for tracking cmd_type: CommandType # Type of command execute_func: Callable # Function to execute the command @@ -55,22 +60,25 @@ class ROSCommand(NamedTuple): priority: int # Priority level (lower is higher priority) timeout: float # How long to wait for this command to complete + class ROSCommandQueue: """ Manages a queue of commands for the robot. - + Commands are executed sequentially, with only one command being processed at a time. Commands are only executed when the robot is in the IDLE state. """ - - def __init__(self, - webrtc_func: Callable, - is_ready_func: Callable[[], bool] = None, - is_busy_func: Optional[Callable[[], bool]] = None, - debug: bool = True): + + def __init__( + self, + webrtc_func: Callable, + is_ready_func: Callable[[], bool] = None, + is_busy_func: Optional[Callable[[], bool]] = None, + debug: bool = True, + ): """ Initialize the ROSCommandQueue. - + Args: webrtc_func: Function to send WebRTC requests is_ready_func: Function to check if the robot is ready for a command @@ -81,69 +89,80 @@ def __init__(self, self._is_ready_func = is_ready_func or (lambda: True) self._is_busy_func = is_busy_func self._debug = debug - + # Queue of commands to process self._queue = PriorityQueue() self._current_command = None self._last_command_time = 0 - + # Last known robot state self._last_ready_state = None self._last_busy_state = None self._stuck_in_busy_since = None - + # Command execution status self._should_stop = False self._queue_thread = None - + # Stats self._command_count = 0 self._success_count = 0 self._failure_count = 0 self._command_history = [] - - self._max_queue_wait_time = 30.0 # Maximum time to wait for robot to be ready before forcing - + + self._max_queue_wait_time = ( + 30.0 # Maximum time to wait for robot to be ready before forcing + ) + logger.info("ROSCommandQueue initialized") - + def start(self): """Start the queue processing thread""" if self._queue_thread is not None and self._queue_thread.is_alive(): logger.warning("Queue processing thread already running") return - + self._should_stop = False self._queue_thread = threading.Thread(target=self._process_queue, daemon=True) self._queue_thread.start() logger.info("Queue processing thread started") - + def stop(self, timeout=2.0): """ Stop the queue processing thread - + Args: timeout: Maximum time to wait for the thread to stop """ if self._queue_thread is None or not self._queue_thread.is_alive(): logger.warning("Queue processing thread not running") return - + self._should_stop = True try: self._queue_thread.join(timeout=timeout) if self._queue_thread.is_alive(): - logger.warning(f"Queue processing thread did not stop within {timeout}s") + logger.warning( + f"Queue processing thread did not stop within {timeout}s" + ) else: logger.info("Queue processing thread stopped") except Exception as e: logger.error(f"Error stopping queue processing thread: {e}") - - def queue_webrtc_request(self, api_id: int, topic: str = None, parameter: str = '', - request_id: str = None, data: Dict[str, Any] = None, - priority: int = 0, timeout: float = 30.0) -> str: + + def queue_webrtc_request( + self, + api_id: int, + topic: str = None, + parameter: str = "", + request_id: str = None, + data: Dict[str, Any] = None, + priority: int = 0, + timeout: float = 30.0, + ) -> str: """ Queue a WebRTC request - + Args: api_id: API ID for the command topic: Topic to publish to @@ -152,55 +171,69 @@ def queue_webrtc_request(self, api_id: int, topic: str = None, parameter: str = data: Data to include in the request priority: Priority level (lower is higher priority) timeout: Maximum time to wait for the command to complete - + Returns: str: Unique ID for the request """ request_id = request_id or str(uuid.uuid4()) - + # Create a function that will execute this WebRTC request def execute_webrtc(): try: logger.info(f"Executing WebRTC request: {api_id} (ID: {request_id})") if self._debug: logger.debug(f"[WebRTC Queue] SENDING request: API ID {api_id}") - + result = self._webrtc_func( - api_id=api_id, + api_id=api_id, topic=topic, parameter=parameter, request_id=request_id, data=data, ) if not result: - logger.warning(f"WebRTC request failed: {api_id} (ID: {request_id})") + logger.warning( + f"WebRTC request failed: {api_id} (ID: {request_id})" + ) if self._debug: - logger.debug(f"[WebRTC Queue] Request API ID {api_id} FAILED to send") + logger.debug( + f"[WebRTC Queue] Request API ID {api_id} FAILED to send" + ) return False - + if self._debug: - logger.debug(f"[WebRTC Queue] Request API ID {api_id} sent SUCCESSFULLY") - + logger.debug( + f"[WebRTC Queue] Request API ID {api_id} sent SUCCESSFULLY" + ) + # Allow time for the robot to process the command start_time = time.time() stabilization_delay = 0.5 # Half-second delay for stabilization time.sleep(stabilization_delay) - + # Wait for the robot to complete the command (timeout check) while self._is_busy_func() and (time.time() - start_time) < timeout: - if self._debug and (time.time() - start_time) % 5 < 0.1: # Print every ~5 seconds - logger.debug(f"[WebRTC Queue] Still waiting on API ID {api_id} - elapsed: {time.time()-start_time:.1f}s") + if ( + self._debug and (time.time() - start_time) % 5 < 0.1 + ): # Print every ~5 seconds + logger.debug( + f"[WebRTC Queue] Still waiting on API ID {api_id} - elapsed: {time.time() - start_time:.1f}s" + ) time.sleep(0.1) - + # Check if we timed out if self._is_busy_func() and (time.time() - start_time) >= timeout: - logger.warning(f"WebRTC request timed out: {api_id} (ID: {request_id})") + logger.warning( + f"WebRTC request timed out: {api_id} (ID: {request_id})" + ) return False - + wait_time = time.time() - start_time if self._debug: - logger.debug(f"[WebRTC Queue] Request API ID {api_id} completed after {wait_time:.1f}s") - + logger.debug( + f"[WebRTC Queue] Request API ID {api_id} completed after {wait_time:.1f}s" + ) + logger.info(f"WebRTC request completed: {api_id} (ID: {request_id})") return True except Exception as e: @@ -208,201 +241,240 @@ def execute_webrtc(): if self._debug: logger.debug(f"[WebRTC Queue] ERROR processing request: {e}") return False - + # Create the command and queue it command = ROSCommand( id=request_id, cmd_type=CommandType.WEBRTC, execute_func=execute_webrtc, - params={'api_id': api_id, 'topic': topic, 'request_id': request_id}, + params={"api_id": api_id, "topic": topic, "request_id": request_id}, priority=priority, - timeout=timeout + timeout=timeout, ) - + # Queue the command self._queue.put((priority, self._command_count, command)) self._command_count += 1 if self._debug: - logger.debug(f"[WebRTC Queue] Added request ID {request_id} for API ID {api_id} - Queue size now: {self.queue_size}") - logger.info(f"Queued WebRTC request: {api_id} (ID: {request_id}, Priority: {priority})") - + logger.debug( + f"[WebRTC Queue] Added request ID {request_id} for API ID {api_id} - Queue size now: {self.queue_size}" + ) + logger.info( + f"Queued WebRTC request: {api_id} (ID: {request_id}, Priority: {priority})" + ) + return request_id - - def queue_action_client_request(self, action_name: str, execute_func: Callable, - priority: int = 0, timeout: float = 30.0, **kwargs) -> str: + + def queue_action_client_request( + self, + action_name: str, + execute_func: Callable, + priority: int = 0, + timeout: float = 30.0, + **kwargs, + ) -> str: """ Queue any action client request or function - + Args: action_name: Name of the action for logging/tracking execute_func: Function to execute the command priority: Priority level (lower is higher priority) timeout: Maximum time to wait for the command to complete **kwargs: Additional parameters to pass to the execute function - + Returns: str: Unique ID for the request """ request_id = str(uuid.uuid4()) - + # Create the command command = ROSCommand( id=request_id, cmd_type=CommandType.ACTION, execute_func=execute_func, - params={'action_name': action_name, **kwargs}, + params={"action_name": action_name, **kwargs}, priority=priority, - timeout=timeout + timeout=timeout, ) - + # Queue the command self._queue.put((priority, self._command_count, command)) self._command_count += 1 - - action_params = ', '.join([f"{k}={v}" for k, v in kwargs.items()]) - logger.info(f"Queued action request: {action_name} (ID: {request_id}, Priority: {priority}, Params: {action_params})") - + + action_params = ", ".join([f"{k}={v}" for k, v in kwargs.items()]) + logger.info( + f"Queued action request: {action_name} (ID: {request_id}, Priority: {priority}, Params: {action_params})" + ) + return request_id - + def _process_queue(self): """Process commands in the queue""" logger.info("Starting queue processing") logger.info("[WebRTC Queue] Processing thread started") - + while not self._should_stop: # Print queue status self._print_queue_status() - + # Check if we're ready to process a command if not self._queue.empty() and self._current_command is None: current_time = time.time() is_ready = self._is_ready_func() is_busy = self._is_busy_func() if self._is_busy_func else False - + if self._debug: - logger.debug(f"[WebRTC Queue] Status: {self.queue_size} requests waiting | Robot ready: {is_ready} | Robot busy: {is_busy}") - + logger.debug( + f"[WebRTC Queue] Status: {self.queue_size} requests waiting | Robot ready: {is_ready} | Robot busy: {is_busy}" + ) + # Track robot state changes if is_ready != self._last_ready_state: - logger.debug(f"Robot ready state changed: {self._last_ready_state} -> {is_ready}") + logger.debug( + f"Robot ready state changed: {self._last_ready_state} -> {is_ready}" + ) self._last_ready_state = is_ready - + if is_busy != self._last_busy_state: - logger.debug(f"Robot busy state changed: {self._last_busy_state} -> {is_busy}") + logger.debug( + f"Robot busy state changed: {self._last_busy_state} -> {is_busy}" + ) self._last_busy_state = is_busy - + # If the robot has transitioned to busy, record the time if is_busy: self._stuck_in_busy_since = current_time else: self._stuck_in_busy_since = None - + # Check if we've been waiting too long for the robot to be ready force_processing = False - if (not is_ready and is_busy and - self._stuck_in_busy_since is not None and - current_time - self._stuck_in_busy_since > self._max_queue_wait_time): + if ( + not is_ready + and is_busy + and self._stuck_in_busy_since is not None + and current_time - self._stuck_in_busy_since + > self._max_queue_wait_time + ): logger.warning( f"Robot has been busy for {current_time - self._stuck_in_busy_since:.1f}s, " f"forcing queue to continue" ) force_processing = True - + # Process the next command if ready or forcing if is_ready or force_processing: if self._debug and is_ready: logger.debug("[WebRTC Queue] Robot is READY for next command") - + try: # Get the next command _, _, command = self._queue.get(block=False) self._current_command = command self._last_command_time = current_time - + # Log the command cmd_info = f"ID: {command.id}, Type: {command.cmd_type.name}" if command.cmd_type == CommandType.WEBRTC: - api_id = command.params.get('api_id') + api_id = command.params.get("api_id") cmd_info += f", API: {api_id}" if self._debug: - logger.debug(f"[WebRTC Queue] DEQUEUED request: API ID {api_id}") + logger.debug( + f"[WebRTC Queue] DEQUEUED request: API ID {api_id}" + ) elif command.cmd_type == CommandType.ACTION: - action_name = command.params.get('action_name') + action_name = command.params.get("action_name") cmd_info += f", Action: {action_name}" if self._debug: - logger.debug(f"[WebRTC Queue] DEQUEUED action: {action_name}") - + logger.debug( + f"[WebRTC Queue] DEQUEUED action: {action_name}" + ) + forcing_str = " (FORCED)" if force_processing else "" logger.info(f"Processing command{forcing_str}: {cmd_info}") - + # Execute the command try: # Where command execution occurs success = command.execute_func() - + if success: self._success_count += 1 logger.info(f"Command succeeded: {cmd_info}") if self._debug: - logger.debug(f"[WebRTC Queue] Command {command.id} marked as COMPLETED") + logger.debug( + f"[WebRTC Queue] Command {command.id} marked as COMPLETED" + ) else: self._failure_count += 1 logger.warning(f"Command failed: {cmd_info}") if self._debug: - logger.debug(f"[WebRTC Queue] Command {command.id} FAILED") - + logger.debug( + f"[WebRTC Queue] Command {command.id} FAILED" + ) + # Record command history - self._command_history.append({ - 'id': command.id, - 'type': command.cmd_type.name, - 'params': command.params, - 'success': success, - 'time': time.time() - self._last_command_time - }) - + self._command_history.append( + { + "id": command.id, + "type": command.cmd_type.name, + "params": command.params, + "success": success, + "time": time.time() - self._last_command_time, + } + ) + except Exception as e: self._failure_count += 1 logger.error(f"Error executing command: {e}") if self._debug: - logger.debug(f"[WebRTC Queue] ERROR executing command: {e}") - + logger.debug( + f"[WebRTC Queue] ERROR executing command: {e}" + ) + # Mark the command as complete self._current_command = None if self._debug: - logger.debug("[WebRTC Queue] Adding 0.5s stabilization delay before next command") + logger.debug( + "[WebRTC Queue] Adding 0.5s stabilization delay before next command" + ) time.sleep(0.5) - + except Empty: pass - + # Sleep to avoid busy-waiting time.sleep(0.1) - + logger.info("Queue processing stopped") - + def _print_queue_status(self): """Print the current queue status""" current_time = time.time() - + # Only print once per second to avoid spamming the log - if current_time - self._last_command_time < 1.0 and self._current_command is None: + if ( + current_time - self._last_command_time < 1.0 + and self._current_command is None + ): return - + is_ready = self._is_ready_func() is_busy = self._is_busy_func() if self._is_busy_func else False queue_size = self.queue_size - + # Get information about the current command current_command_info = "None" if self._current_command is not None: current_command_info = f"{self._current_command.cmd_type.name}" if self._current_command.cmd_type == CommandType.WEBRTC: - api_id = self._current_command.params.get('api_id') + api_id = self._current_command.params.get("api_id") current_command_info += f" (API: {api_id})" elif self._current_command.cmd_type == CommandType.ACTION: - action_name = self._current_command.params.get('action_name') + action_name = self._current_command.params.get("action_name") current_command_info += f" (Action: {action_name})" - + # Print the status status = ( f"Queue: {queue_size} items | " @@ -410,17 +482,16 @@ def _print_queue_status(self): f"Current: {current_command_info} | " f"Stats: {self._success_count} OK, {self._failure_count} FAIL" ) - + logger.debug(status) self._last_command_time = current_time - + @property def queue_size(self) -> int: """Get the number of commands in the queue""" return self._queue.qsize() - + @property def current_command(self) -> Optional[ROSCommand]: """Get the current command being processed""" return self._current_command - \ No newline at end of file diff --git a/dimos/robot/ros_control.py b/dimos/robot/ros_control.py index 13f90d4c2e..80582963ad 100644 --- a/dimos/robot/ros_control.py +++ b/dimos/robot/ros_control.py @@ -24,7 +24,7 @@ from enum import Enum, auto import threading import time -from typing import Optional, Tuple, Dict, Any, Type +from typing import Optional, Dict, Any, Type from abc import ABC, abstractmethod from rclpy.qos import ( QoSProfile, @@ -35,7 +35,7 @@ from dimos.stream.ros_video_provider import ROSVideoProvider import math from builtin_interfaces.msg import Duration -from geometry_msgs.msg import Point, Vector3, Twist +from geometry_msgs.msg import Point, Vector3 from dimos.robot.ros_command_queue import ROSCommandQueue from dimos.utils.logging_config import setup_logger @@ -61,27 +61,31 @@ class RobotMode(Enum): MOVING = auto() ERROR = auto() + class ROSControl(ROSTransformAbility, ROSObservableTopicAbility, ABC): """Abstract base class for ROS-controlled robots""" - def __init__(self, - node_name: str, - camera_topics: Dict[str, str] = None, - max_linear_velocity: float = 1.0, - mock_connection: bool = False, - max_angular_velocity: float = 2.0, - state_topic: str = None, - imu_topic: str = None, - state_msg_type: Type = None, - imu_msg_type: Type = None, - webrtc_topic: str = None, - webrtc_api_topic: str = None, - webrtc_msg_type: Type = None, - move_vel_topic: str = None, - pose_topic: str = None, - odom_topic: str = '/odom', - global_costmap_topic: str = "map", - costmap_topic: str = '/local_costmap/costmap', - debug: bool = False): + + def __init__( + self, + node_name: str, + camera_topics: Dict[str, str] = None, + max_linear_velocity: float = 1.0, + mock_connection: bool = False, + max_angular_velocity: float = 2.0, + state_topic: str = None, + imu_topic: str = None, + state_msg_type: Type = None, + imu_msg_type: Type = None, + webrtc_topic: str = None, + webrtc_api_topic: str = None, + webrtc_msg_type: Type = None, + move_vel_topic: str = None, + pose_topic: str = None, + odom_topic: str = "/odom", + global_costmap_topic: str = "map", + costmap_topic: str = "/local_costmap/costmap", + debug: bool = False, + ): """ Initialize base ROS control interface Args: @@ -204,29 +208,29 @@ def __init__(self, ) self._subscriptions.append(self._imu_sub) else: - logger.warning("No IMU topic and/or message type provided - IMU data tracking will be unavailable") - + logger.warning( + "No IMU topic and/or message type provided - IMU data tracking will be unavailable" + ) + if self._odom_topic: self._odom_sub = self._node.create_subscription( - Odometry, - self._odom_topic, - self._odom_callback, - sensor_qos + Odometry, self._odom_topic, self._odom_callback, sensor_qos ) self._subscriptions.append(self._odom_sub) else: - logger.warning("No odometry topic provided - odometry data tracking will be unavailable") - + logger.warning( + "No odometry topic provided - odometry data tracking will be unavailable" + ) + if self._costmap_topic: self._costmap_sub = self._node.create_subscription( - OccupancyGrid, - self._costmap_topic, - self._costmap_callback, - sensor_qos + OccupancyGrid, self._costmap_topic, self._costmap_callback, sensor_qos ) self._subscriptions.append(self._costmap_sub) else: - logger.warning("No costmap topic provided - costmap data tracking will be unavailable") + logger.warning( + "No costmap topic provided - costmap data tracking will be unavailable" + ) # Nav2 Action Clients self._spin_client = ActionClient(self._node, Spin, "spin") @@ -255,13 +259,15 @@ def __init__(self, # Start the queue processing thread self._command_queue.start() else: - logger.warning("No WebRTC message type provided - WebRTC commands will be unavailable") - + logger.warning( + "No WebRTC message type provided - WebRTC commands will be unavailable" + ) + # Initialize TF Buffer and Listener for transform abilities self._tf_buffer = tf2_ros.Buffer() self._tf_listener = tf2_ros.TransformListener(self._tf_buffer, self._node) logger.info(f"TF Buffer and Listener initialized for {node_name}") - + # Start ROS spin in a background thread via the executor self._spin_thread = threading.Thread(target=self._ros_spin, daemon=True) self._spin_thread.start() @@ -295,12 +301,12 @@ def _imu_callback(self, msg): """Callback for IMU data""" self._imu_state = msg # Log IMU state (very verbose) - #logger.debug(f"IMU state updated: {self._imu_state}") + # logger.debug(f"IMU state updated: {self._imu_state}") def _odom_callback(self, msg): """Callback for odometry data""" self._odom_data = msg - + def _costmap_callback(self, msg): """Callback for costmap data""" self._costmap_data = msg @@ -374,27 +380,31 @@ def get_imu_state(self) -> Optional[Any]: def get_odometry(self) -> Optional[Odometry]: """ Get current odometry data - + Returns: Optional[Odometry]: Current odometry data or None if not available """ if not self._odom_topic: - logger.warning("No odometry topic provided - odometry data tracking will be unavailable") + logger.warning( + "No odometry topic provided - odometry data tracking will be unavailable" + ) return None return self._odom_data - + def get_costmap(self) -> Optional[OccupancyGrid]: """ Get current costmap data - + Returns: Optional[OccupancyGrid]: Current costmap data or None if not available """ if not self._costmap_topic: - logger.warning("No costmap topic provided - costmap data tracking will be unavailable") + logger.warning( + "No costmap topic provided - costmap data tracking will be unavailable" + ) return None return self._costmap_data - + def _image_callback(self, msg): """Convert ROS image to numpy array and push to data stream""" if self._video_provider and self._bridge: @@ -463,10 +473,10 @@ def _send_action_client_goal( logger.error(f"Action timed out after {time_allowance}s") return False elif self._action_success: - logger.info(f"Action succeeded") + logger.info("Action succeeded") return True else: - logger.error(f"Action failed") + logger.error("Action failed") return False def move( @@ -902,21 +912,21 @@ def pose_command(self, roll: float, pitch: float, yaw: float) -> bool: except Exception as e: logger.error(f"Failed to send pose command: {e}") return False - + def get_position_stream(self): """ Get a stream of position updates from ROS. - + Returns: Observable that emits (x, y) tuples representing the robot's position """ from dimos.robot.position_stream import PositionStreamProvider - + # Create a position stream provider position_provider = PositionStreamProvider( ros_node=self._node, odometry_topic="/odom", # Default odometry topic - use_odometry=True + use_odometry=True, ) - + return position_provider.get_position_stream() diff --git a/dimos/robot/ros_observable_topic.py b/dimos/robot/ros_observable_topic.py index 8826a894f4..c758089e3f 100644 --- a/dimos/robot/ros_observable_topic.py +++ b/dimos/robot/ros_observable_topic.py @@ -81,7 +81,9 @@ class ROSObservableTopicAbility: # ├──► observe_on(pool) ─► backpressure.latest ─► sub2 (slow) # └──► observe_on(pool) ─► backpressure.latest ─► sub3 (slower) # - def _maybe_conversion(self, msg_type: TopicType, callback) -> Callable[[TopicType], Any]: + def _maybe_conversion( + self, msg_type: TopicType, callback + ) -> Callable[[TopicType], Any]: if msg_type == Costmap: return lambda msg: callback(Costmap.from_msg(msg)) # just for test, not sure if this Vector auto-instantiation is used irl @@ -116,7 +118,10 @@ def topic( # upstream ROS callback def _on_subscribe(obs, _): ros_sub = self._node.create_subscription( - self._sub_msg_type(msg_type), topic_name, self._maybe_conversion(msg_type, obs.on_next), qos_profile + self._sub_msg_type(msg_type), + topic_name, + self._maybe_conversion(msg_type, obs.on_next), + qos_profile, ) return Disposable(lambda: self._node.destroy_subscription(ros_sub)) @@ -158,7 +163,13 @@ def _subscribe(observer, sch=None): # odom.dispose() # clean up the subscription # # see test_ros_observable_topic.py test_topic_latest for more details - def topic_latest(self, topic_name: str, msg_type: TopicType, timeout: float | None = 100.0, qos=QOS.SENSOR): + def topic_latest( + self, + topic_name: str, + msg_type: TopicType, + timeout: float | None = 100.0, + qos=QOS.SENSOR, + ): """ Blocks the current thread until the first message is received, then returns `reader()` (sync) and keeps one ROS subscription alive @@ -173,7 +184,9 @@ def topic_latest(self, topic_name: str, msg_type: TopicType, timeout: float | No conn = core.connect() # starts the ROS subscription immediately try: - first_val = core.pipe(ops.first(), *([ops.timeout(timeout)] if timeout is not None else [])).run() + first_val = core.pipe( + ops.first(), *([ops.timeout(timeout)] if timeout is not None else []) + ).run() except Exception: conn.dispose() msg = f"{topic_name} message not received after {timeout} seconds. Is robot connected?" @@ -204,7 +217,13 @@ def reader(): # odom.dispose() # clean up the subscription # # see test_ros_observable_topic.py test_topic_latest for more details - async def topic_latest_async(self, topic_name: str, msg_type: TopicType, qos=QOS.SENSOR, timeout: float = 30.0): + async def topic_latest_async( + self, + topic_name: str, + msg_type: TopicType, + qos=QOS.SENSOR, + timeout: float = 30.0, + ): loop = asyncio.get_running_loop() first = loop.create_future() cache = {"val": None} diff --git a/dimos/robot/ros_transform.py b/dimos/robot/ros_transform.py index 2fc7a7a2ba..8139b5deab 100644 --- a/dimos/robot/ros_transform.py +++ b/dimos/robot/ros_transform.py @@ -37,6 +37,7 @@ def to_euler_rot(msg: TransformStamped) -> [Vector, Vector]: def to_euler_pos(msg: TransformStamped) -> [Vector, Vector]: return Vector(msg.transform.translation).to_2d() + def to_euler(msg: TransformStamped) -> [Vector, Vector]: return [to_euler_pos(msg), to_euler_rot(msg)] @@ -53,13 +54,19 @@ def tf_buffer(self) -> Buffer: return self._tf_buffer - def transform_euler_pos(self, source_frame: str, target_frame: str = "map", timeout: float = 1.0): + def transform_euler_pos( + self, source_frame: str, target_frame: str = "map", timeout: float = 1.0 + ): return to_euler_pos(self.transform(source_frame, target_frame, timeout)) - def transform_euler_rot(self, source_frame: str, target_frame: str = "map", timeout: float = 1.0): + def transform_euler_rot( + self, source_frame: str, target_frame: str = "map", timeout: float = 1.0 + ): return to_euler_rot(self.transform(source_frame, target_frame, timeout)) - def transform_euler(self, source_frame: str, target_frame: str = "map", timeout: float = 1.0): + def transform_euler( + self, source_frame: str, target_frame: str = "map", timeout: float = 1.0 + ): res = self.transform(source_frame, target_frame, timeout) return to_euler(res) @@ -82,7 +89,13 @@ def transform( logger.error(f"Transform lookup failed: {e}") return None - def transform_point(self, point: Vector, source_frame: str, target_frame: str = "map", timeout: float = 1.0): + def transform_point( + self, + point: Vector, + source_frame: str, + target_frame: str = "map", + timeout: float = 1.0, + ): """Transform a point from source_frame to target_frame. Args: @@ -97,7 +110,10 @@ def transform_point(self, point: Vector, source_frame: str, target_frame: str = try: # Wait for transform to become available self.tf_buffer.can_transform( - target_frame, source_frame, rclpy.time.Time(), rclpy.duration.Duration(seconds=timeout) + target_frame, + source_frame, + rclpy.time.Time(), + rclpy.duration.Duration(seconds=timeout), ) # Create a PointStamped message @@ -109,20 +125,34 @@ def transform_point(self, point: Vector, source_frame: str, target_frame: str = ps.point.z = point[2] if len(point) > 2 else 0.0 # Transform point - transformed_ps = self.tf_buffer.transform(ps, target_frame, rclpy.duration.Duration(seconds=timeout)) + transformed_ps = self.tf_buffer.transform( + ps, target_frame, rclpy.duration.Duration(seconds=timeout) + ) # Return as Vector type if len(point) > 2: - return Vector(transformed_ps.point.x, transformed_ps.point.y, transformed_ps.point.z) + return Vector( + transformed_ps.point.x, + transformed_ps.point.y, + transformed_ps.point.z, + ) else: return Vector(transformed_ps.point.x, transformed_ps.point.y) - except (tf2_ros.LookupException, tf2_ros.ConnectivityException, tf2_ros.ExtrapolationException) as e: + except ( + tf2_ros.LookupException, + tf2_ros.ConnectivityException, + tf2_ros.ExtrapolationException, + ) as e: logger.error(f"Transform from {source_frame} to {target_frame} failed: {e}") return None - - - def transform_path(self, path: Path, source_frame: str, target_frame: str = "map", timeout: float = 1.0): + def transform_path( + self, + path: Path, + source_frame: str, + target_frame: str = "map", + timeout: float = 1.0, + ): """Transform a path from source_frame to target_frame. Args: @@ -136,12 +166,20 @@ def transform_path(self, path: Path, source_frame: str, target_frame: str = "map """ transformed_path = Path() for point in path: - transformed_point = self.transform_point(point, source_frame, target_frame, timeout) + transformed_point = self.transform_point( + point, source_frame, target_frame, timeout + ) if transformed_point is not None: transformed_path.append(transformed_point) return transformed_path - def transform_rot(self, rotation: Vector, source_frame: str, target_frame: str = "map", timeout: float = 1.0): + def transform_rot( + self, + rotation: Vector, + source_frame: str, + target_frame: str = "map", + timeout: float = 1.0, + ): """Transform a rotation from source_frame to target_frame. Args: @@ -156,36 +194,52 @@ def transform_rot(self, rotation: Vector, source_frame: str, target_frame: str = try: # Wait for transform to become available self.tf_buffer.can_transform( - target_frame, source_frame, rclpy.time.Time(), rclpy.duration.Duration(seconds=timeout) + target_frame, + source_frame, + rclpy.time.Time(), + rclpy.duration.Duration(seconds=timeout), ) - + # Create a rotation matrix from the input Euler angles - input_rotation = R.from_euler('xyz', rotation, degrees=False) - + input_rotation = R.from_euler("xyz", rotation, degrees=False) + # Get the transform from source to target frame transform = self.transform(source_frame, target_frame, timeout) if transform is None: return None - + # Extract the rotation from the transform q = transform.transform.rotation transform_rotation = R.from_quat([q.x, q.y, q.z, q.w]) - + # Compose the rotations # The resulting rotation is the composition of the transform rotation and input rotation result_rotation = transform_rotation * input_rotation - + # Convert back to Euler angles - euler_angles = result_rotation.as_euler('xyz', degrees=False) - + euler_angles = result_rotation.as_euler("xyz", degrees=False) + # Return as Vector type return Vector(euler_angles) - - except (tf2_ros.LookupException, tf2_ros.ConnectivityException, tf2_ros.ExtrapolationException) as e: - logger.error(f"Transform rotation from {source_frame} to {target_frame} failed: {e}") + + except ( + tf2_ros.LookupException, + tf2_ros.ConnectivityException, + tf2_ros.ExtrapolationException, + ) as e: + logger.error( + f"Transform rotation from {source_frame} to {target_frame} failed: {e}" + ) return None - def transform_pose(self, position: Vector, rotation: Vector, source_frame: str, target_frame: str = "map", timeout: float = 1.0): + def transform_pose( + self, + position: Vector, + rotation: Vector, + source_frame: str, + target_frame: str = "map", + timeout: float = 1.0, + ): """Transform a pose from source_frame to target_frame. Args: @@ -196,14 +250,18 @@ def transform_pose(self, position: Vector, rotation: Vector, source_frame: str, timeout: Time to wait for the transform to become available (seconds) Returns: - Tuple of (transformed_position, transformed_rotation) as Vectors, + Tuple of (transformed_position, transformed_rotation) as Vectors, or (None, None) if either transform failed """ # Transform position - transformed_position = self.transform_point(position, source_frame, target_frame, timeout) - + transformed_position = self.transform_point( + position, source_frame, target_frame, timeout + ) + # Transform rotation - transformed_rotation = self.transform_rot(rotation, source_frame, target_frame, timeout) - + transformed_rotation = self.transform_rot( + rotation, source_frame, target_frame, timeout + ) + # Return results (both might be None if transforms failed) - return transformed_position, transformed_rotation \ No newline at end of file + return transformed_position, transformed_rotation diff --git a/dimos/robot/test_ros_observable_topic.py b/dimos/robot/test_ros_observable_topic.py index dbac9ef11e..a394f1c23f 100644 --- a/dimos/robot/test_ros_observable_topic.py +++ b/dimos/robot/test_ros_observable_topic.py @@ -5,7 +5,6 @@ import pytest from dimos.robot.ros_observable_topic import ROSObservableTopicAbility from dimos.utils.logging_config import setup_logger -from dimos.types.costmap import Costmap from dimos.types.vector import Vector import asyncio @@ -93,10 +92,14 @@ def test_parallel_and_cleanup(): # [2, 3, 5, 2, 3, 5] # = for i in [3, 4, 6, 4, 5, 7]: - assert i in received_messages, f"Expected {i} in received messages, got {received_messages}" + assert i in received_messages, ( + f"Expected {i} in received messages, got {received_messages}" + ) # ensure that ROS end has only a single subscription - assert len(robot._node.subs) == 1, f"Expected 1 subscription, got {len(robot._node.subs)}: {robot._node.subs}" + assert len(robot._node.subs) == 1, ( + f"Expected 1 subscription, got {len(robot._node.subs)}: {robot._node.subs}" + ) subscription1.dispose() subscription2.dispose() @@ -148,8 +151,12 @@ def test_parallel_and_hog(): subscriber3_messages = [] subscription1 = obs1.subscribe(lambda x: subscriber1_messages.append(x)) - subscription2 = obs1.subscribe(lambda x: time.sleep(0.15) or subscriber2_messages.append(x)) - subscription3 = obs2.subscribe(lambda x: time.sleep(0.25) or subscriber3_messages.append(x)) + subscription2 = obs1.subscribe( + lambda x: time.sleep(0.15) or subscriber2_messages.append(x) + ) + subscription3 = obs2.subscribe( + lambda x: time.sleep(0.25) or subscriber3_messages.append(x) + ) assert len(robot._node.subs) == 1 diff --git a/dimos/robot/unitree/unitree_go2.py b/dimos/robot/unitree/unitree_go2.py index 54ba4c3327..52b7e2c549 100644 --- a/dimos/robot/unitree/unitree_go2.py +++ b/dimos/robot/unitree/unitree_go2.py @@ -21,20 +21,18 @@ from dimos.stream.video_providers.unitree import UnitreeVideoProvider from reactivex.disposable import CompositeDisposable import logging -import time -from dimos.robot.unitree.external.go2_webrtc_connect.go2_webrtc_driver.webrtc_driver import WebRTCConnectionMethod +from dimos.robot.unitree.external.go2_webrtc_connect.go2_webrtc_driver.webrtc_driver import ( + WebRTCConnectionMethod, +) import os from dimos.robot.unitree.unitree_ros_control import UnitreeROSControl from reactivex.scheduler import ThreadPoolScheduler -import threading from dimos.utils.logging_config import setup_logger from dimos.perception.person_tracker import PersonTrackingStream from dimos.perception.object_tracker import ObjectTrackingStream from dimos.robot.local_planner import VFHPurePursuitPlanner, navigate_path_local from dimos.robot.global_planner.planner import AstarPlanner -from dimos.types.path import Path from dimos.types.costmap import Costmap -from dimos.utils.reactive import backpressure # Set up logging logger = setup_logger("dimos.robot.unitree.unitree_go2", level=logging.DEBUG) @@ -78,14 +76,20 @@ def __init__( spatial_memory_collection: Name of the collection in the ChromaDB database. new_memory: If True, creates a new spatial memory from scratch. """ - print(f"Initializing UnitreeGo2 with use_ros: {use_ros} and use_webrtc: {use_webrtc}") + print( + f"Initializing UnitreeGo2 with use_ros: {use_ros} and use_webrtc: {use_webrtc}" + ) if not (use_ros ^ use_webrtc): # XOR operator ensures exactly one is True - raise ValueError("Exactly one video/control provider (ROS or WebRTC) must be enabled") + raise ValueError( + "Exactly one video/control provider (ROS or WebRTC) must be enabled" + ) # Initialize ros_control if it is not provided and use_ros is True if ros_control is None and use_ros: ros_control = UnitreeROSControl( - node_name="unitree_go2", disable_video_stream=disable_video_stream, mock_connection=mock_connection + node_name="unitree_go2", + disable_video_stream=disable_video_stream, + mock_connection=mock_connection, ) # Initialize skill library @@ -137,7 +141,9 @@ def __init__( dev_name="UnitreeGo2", connection_method=connection_method, serial_number=serial_number, - ip=self.ip if connection_method == WebRTCConnectionMethod.LocalSTA else None, + ip=self.ip + if connection_method == WebRTCConnectionMethod.LocalSTA + else None, ) else: self.video_stream = None @@ -155,15 +161,21 @@ def __init__( camera_pitch=self.camera_pitch, camera_height=self.camera_height, ) - person_tracking_stream = self.person_tracker.create_stream(self.video_stream_ros) - object_tracking_stream = self.object_tracker.create_stream(self.video_stream_ros) + person_tracking_stream = self.person_tracker.create_stream( + self.video_stream_ros + ) + object_tracking_stream = self.object_tracker.create_stream( + self.video_stream_ros + ) self.person_tracking_stream = person_tracking_stream self.object_tracking_stream = object_tracking_stream # Initialize the local planner and create BEV visualization stream self.local_planner = VFHPurePursuitPlanner( - get_costmap=self.ros_control.topic_latest("/local_costmap/costmap", Costmap), + get_costmap=self.ros_control.topic_latest( + "/local_costmap/costmap", Costmap + ), transform=self.ros_control, move_vel_control=self.ros_control.move_vel_control, robot_width=0.36, # Unitree Go2 width in meters @@ -175,13 +187,19 @@ def __init__( self.global_planner = AstarPlanner( conservativism=20, # how close to obstacles robot is allowed to path plan - set_local_nav=lambda path, stop_event=None, goal_theta=None: navigate_path_local(self, path, timeout=120.0, goal_theta=goal_theta, stop_event=stop_event), + set_local_nav=lambda path, + stop_event=None, + goal_theta=None: navigate_path_local( + self, path, timeout=120.0, goal_theta=goal_theta, stop_event=stop_event + ), get_costmap=self.ros_control.topic_latest("map", Costmap), get_robot_pos=lambda: self.ros_control.transform_euler_pos("base_link"), ) # Create the visualization stream at 5Hz - self.local_planner_viz_stream = self.local_planner.create_stream(frequency_hz=5.0) + self.local_planner_viz_stream = self.local_planner.create_stream( + frequency_hz=5.0 + ) def get_skills(self) -> Optional[SkillLibrary]: return self.skill_library @@ -189,7 +207,7 @@ def get_skills(self) -> Optional[SkillLibrary]: def get_pose(self) -> Tuple[Tuple[float, float, float], Tuple[float, float, float]]: """ Get the current pose (position and rotation) of the robot in the map frame. - + Returns: Tuple containing: - position: Tuple[float, float, float] (x, y, z) diff --git a/dimos/robot/unitree/unitree_ros_control.py b/dimos/robot/unitree/unitree_ros_control.py index 63bc622f8b..5289ff7391 100644 --- a/dimos/robot/unitree/unitree_ros_control.py +++ b/dimos/robot/unitree/unitree_ros_control.py @@ -14,74 +14,64 @@ from go2_interfaces.msg import Go2State, IMU from unitree_go.msg import WebRtcReq -from enum import Enum, auto -import threading -import time -from typing import Optional, Tuple, Dict, Any, Type -from abc import ABC, abstractmethod +from typing import Type from sensor_msgs.msg import Image, CompressedImage, CameraInfo from dimos.robot.ros_control import ROSControl, RobotMode from dimos.utils.logging_config import setup_logger logger = setup_logger("dimos.robot.unitree.unitree_ros_control") + class UnitreeROSControl(ROSControl): """Hardware interface for Unitree Go2 robot using ROS2""" - + # ROS Camera Topics CAMERA_TOPICS = { - 'raw': { - 'topic': 'camera/image_raw', - 'type': Image - }, - 'compressed': { - 'topic': 'camera/compressed', - 'type': CompressedImage - }, - 'info': { - 'topic': 'camera/camera_info', - 'type': CameraInfo - } + "raw": {"topic": "camera/image_raw", "type": Image}, + "compressed": {"topic": "camera/compressed", "type": CompressedImage}, + "info": {"topic": "camera/camera_info", "type": CameraInfo}, } # Hard coded ROS Message types and Topic names for Unitree Go2 DEFAULT_STATE_MSG_TYPE = Go2State DEFAULT_IMU_MSG_TYPE = IMU DEFAULT_WEBRTC_MSG_TYPE = WebRtcReq - DEFAULT_STATE_TOPIC = 'go2_states' - DEFAULT_IMU_TOPIC = 'imu' - DEFAULT_WEBRTC_TOPIC = 'webrtc_req' - DEFAULT_CMD_VEL_TOPIC = 'cmd_vel_out' - DEFAULT_POSE_TOPIC = 'pose_cmd' - DEFAULT_ODOM_TOPIC = 'odom' - DEFAULT_COSTMAP_TOPIC = 'local_costmap/costmap' + DEFAULT_STATE_TOPIC = "go2_states" + DEFAULT_IMU_TOPIC = "imu" + DEFAULT_WEBRTC_TOPIC = "webrtc_req" + DEFAULT_CMD_VEL_TOPIC = "cmd_vel_out" + DEFAULT_POSE_TOPIC = "pose_cmd" + DEFAULT_ODOM_TOPIC = "odom" + DEFAULT_COSTMAP_TOPIC = "local_costmap/costmap" DEFAULT_MAX_LINEAR_VELOCITY = 1.0 DEFAULT_MAX_ANGULAR_VELOCITY = 2.0 # Hard coded WebRTC API parameters for Unitree Go2 - DEFAULT_WEBRTC_API_TOPIC = 'rt/api/sport/request' - - def __init__(self, - node_name: str = "unitree_hardware_interface", - state_topic: str = None, - imu_topic: str = None, - webrtc_topic: str = None, - webrtc_api_topic: str = None, - move_vel_topic: str = None, - pose_topic: str = None, - odom_topic: str = None, - costmap_topic: str = None, - state_msg_type: Type = None, - imu_msg_type: Type = None, - webrtc_msg_type: Type = None, - max_linear_velocity: float = None, - max_angular_velocity: float = None, - use_raw: bool = False, - debug: bool = False, - disable_video_stream: bool = False, - mock_connection: bool = False): + DEFAULT_WEBRTC_API_TOPIC = "rt/api/sport/request" + + def __init__( + self, + node_name: str = "unitree_hardware_interface", + state_topic: str = None, + imu_topic: str = None, + webrtc_topic: str = None, + webrtc_api_topic: str = None, + move_vel_topic: str = None, + pose_topic: str = None, + odom_topic: str = None, + costmap_topic: str = None, + state_msg_type: Type = None, + imu_msg_type: Type = None, + webrtc_msg_type: Type = None, + max_linear_velocity: float = None, + max_angular_velocity: float = None, + use_raw: bool = False, + debug: bool = False, + disable_video_stream: bool = False, + mock_connection: bool = False, + ): """ Initialize Unitree ROS control interface with default values for Unitree Go2 - + Args: node_name: Name for the ROS node state_topic: ROS Topic name for robot state (defaults to DEFAULT_STATE_TOPIC) @@ -99,17 +89,17 @@ def __init__(self, use_raw: Whether to use raw camera topics (defaults to False) debug: Whether to enable debug logging disable_video_stream: Whether to run without video stream for testing. - mock_connection: Whether to run without active ActionClient servers for testing. + mock_connection: Whether to run without active ActionClient servers for testing. """ - + logger.info("Initializing Unitree ROS control interface") # Select which camera topics to use active_camera_topics = None if not disable_video_stream: active_camera_topics = { - 'main': self.CAMERA_TOPICS['raw' if use_raw else 'compressed'] + "main": self.CAMERA_TOPICS["raw" if use_raw else "compressed"] } - + # Use default values if not provided state_topic = state_topic or self.DEFAULT_STATE_TOPIC imu_topic = imu_topic or self.DEFAULT_IMU_TOPIC @@ -124,7 +114,7 @@ def __init__(self, webrtc_msg_type = webrtc_msg_type or self.DEFAULT_WEBRTC_MSG_TYPE max_linear_velocity = max_linear_velocity or self.DEFAULT_MAX_LINEAR_VELOCITY max_angular_velocity = max_angular_velocity or self.DEFAULT_MAX_ANGULAR_VELOCITY - + super().__init__( node_name=node_name, camera_topics=active_camera_topics, @@ -142,14 +132,14 @@ def __init__(self, costmap_topic=costmap_topic, max_linear_velocity=max_linear_velocity, max_angular_velocity=max_angular_velocity, - debug=debug + debug=debug, ) - + # Unitree-specific RobotMode State update conditons def _update_mode(self, msg: Go2State): """ Implementation of abstract method to update robot mode - + Logic: - If progress is 0 and mode is 1, then state is IDLE - If progress is 1 OR mode is NOT equal to 1, then state is MOVING @@ -157,7 +147,7 @@ def _update_mode(self, msg: Go2State): # Direct access to protected instance variables from the parent class mode = msg.mode progress = msg.progress - + if progress == 0 and mode == 1: self._mode = RobotMode.IDLE logger.debug("Robot mode set to IDLE (progress=0, mode=1)") @@ -166,4 +156,6 @@ def _update_mode(self, msg: Go2State): logger.debug(f"Robot mode set to MOVING (progress={progress}, mode={mode})") else: self._mode = RobotMode.UNKNOWN - logger.debug(f"Robot mode set to UNKNOWN (progress={progress}, mode={mode})") \ No newline at end of file + logger.debug( + f"Robot mode set to UNKNOWN (progress={progress}, mode={mode})" + ) diff --git a/dimos/robot/unitree/unitree_skills.py b/dimos/robot/unitree/unitree_skills.py index 9c2e406c97..9177d37411 100644 --- a/dimos/robot/unitree/unitree_skills.py +++ b/dimos/robot/unitree/unitree_skills.py @@ -14,159 +14,196 @@ from __future__ import annotations -from typing import TYPE_CHECKING, List, Optional, Tuple, Type, Union +from typing import TYPE_CHECKING, List, Optional, Tuple, Union import time from pydantic import Field -import threading if TYPE_CHECKING: from dimos.robot.robot import Robot, MockRobot else: - Robot = 'Robot' - MockRobot = 'MockRobot' + Robot = "Robot" + MockRobot = "MockRobot" from dimos.skills.skills import AbstractRobotSkill, AbstractSkill, SkillLibrary from dimos.types.constants import Colors -from inspect import signature, Parameter -from typing import Callable, Any, get_type_hints # Module-level constant for Unitree ROS control definitions UNITREE_ROS_CONTROLS: List[Tuple[str, int, str]] = [ - ("Damp", 1001, - "Lowers the robot to the ground fully." - ), - ("BalanceStand", 1002, - "Activates a mode that maintains the robot in a balanced standing position." - ), - ("StandUp", 1004, - "Commands the robot to transition from a sitting or prone position to a standing posture." - ), - ("StandDown", 1005, - "Instructs the robot to move from a standing position to a sitting or prone posture." - ), - ("RecoveryStand", 1006, - "Recovers the robot to a state from which it can take more commands. Useful to run after multiple dynamic commands like front flips." - ), - ("Euler", 1007, - "Adjusts the robot's orientation using Euler angles, providing precise control over its rotation." + ("Damp", 1001, "Lowers the robot to the ground fully."), + ( + "BalanceStand", + 1002, + "Activates a mode that maintains the robot in a balanced standing position.", + ), + ( + "StandUp", + 1004, + "Commands the robot to transition from a sitting or prone position to a standing posture.", + ), + ( + "StandDown", + 1005, + "Instructs the robot to move from a standing position to a sitting or prone posture.", + ), + ( + "RecoveryStand", + 1006, + "Recovers the robot to a state from which it can take more commands. Useful to run after multiple dynamic commands like front flips.", + ), + ( + "Euler", + 1007, + "Adjusts the robot's orientation using Euler angles, providing precise control over its rotation.", ), # ("Move", 1008, "Move the robot using velocity commands."), # Intentionally omitted - ("Sit", 1009, - "Commands the robot to sit down from a standing or moving stance."), - ("RiseSit", 1010, - "Commands the robot to rise back to a standing position from a sitting posture." - ), - ("SwitchGait", 1011, - "Switches the robot's walking pattern or style dynamically, suitable for different terrains or speeds." - ), - ("Trigger", 1012, - "Triggers a specific action or custom routine programmed into the robot."), - ("BodyHeight", 1013, - "Adjusts the height of the robot's body from the ground, useful for navigating various obstacles." - ), - ("FootRaiseHeight", 1014, - "Controls how high the robot lifts its feet during movement, which can be adjusted for different surfaces." - ), - ("SpeedLevel", 1015, - "Sets or adjusts the speed at which the robot moves, with various levels available for different operational needs." - ), - ("Hello", 1016, - "Performs a greeting action, which could involve a wave or other friendly gesture." - ), - ("Stretch", 1017, - "Engages the robot in a stretching routine." - ), - ("TrajectoryFollow", 1018, - "Directs the robot to follow a predefined trajectory, which could involve complex paths or maneuvers." - ), - ("ContinuousGait", 1019, - "Enables a mode for continuous walking or running, ideal for long-distance travel." - ), - ("Content", 1020, - "To display or trigger when the robot is happy." - ), - ("Wallow", 1021, - "The robot falls onto its back and rolls around." - ), - ("Dance1", 1022, - "Performs a predefined dance routine 1, programmed for entertainment or demonstration." - ), - ("Dance2", 1023, - "Performs another variant of a predefined dance routine 2."), - ("GetBodyHeight", 1024, - "Retrieves the current height of the robot's body from the ground."), - ("GetFootRaiseHeight", 1025, - "Retrieves the current height at which the robot's feet are being raised during movement." - ), - ("GetSpeedLevel", 1026, - "Returns the current speed level at which the robot is operating."), - ("SwitchJoystick", 1027, - "Toggles the control mode to joystick input, allowing for manual direction of the robot's movements." - ), - ("Pose", 1028, - "Directs the robot to take a specific pose or stance, which could be used for tasks or performances." - ), - ("Scrape", 1029, - "Robot falls to its hind legs and makes scraping motions with its front legs." - ), - ("FrontFlip", 1030, - "Executes a front flip, a complex and dynamic maneuver." - ), - ("FrontJump", 1031, - "Commands the robot to perform a forward jump." - ), - ("FrontPounce", 1032, - "Initiates a pouncing movement forward, mimicking animal-like pouncing behavior." - ), - ("WiggleHips", 1033, - "Causes the robot to wiggle its hips." - ), - ("GetState", 1034, - "Retrieves the current operational state of the robot, including status reports or diagnostic information." - ), - ("EconomicGait", 1035, - "Engages a more energy-efficient walking or running mode to conserve battery life." - ), - ("FingerHeart", 1036, - "Performs a finger heart gesture while on its hind legs." - ), - ("Handstand", 1301, - "Commands the robot to perform a handstand, demonstrating balance and control." - ), - ("CrossStep", 1302, - "Engages the robot in a cross-stepping routine, useful for complex locomotion or dance moves." - ), - ("OnesidedStep", 1303, - "Commands the robot to perform a stepping motion that predominantly uses one side." - ), - ("Bound", 1304, - "Initiates a bounding motion, similar to a light, repetitive hopping or leaping." - ), - ("LeadFollow", 1045, - "Engages follow-the-leader behavior, where the robot follows a designated leader or follows a signal." - ), - ("LeftFlip", 1042, - "Executes a flip towards the left side." - ), - ("RightFlip", 1043, - "Performs a flip towards the right side." - ), - ("Backflip", 1044, - "Executes a backflip, a complex and dynamic maneuver." - ) + ("Sit", 1009, "Commands the robot to sit down from a standing or moving stance."), + ( + "RiseSit", + 1010, + "Commands the robot to rise back to a standing position from a sitting posture.", + ), + ( + "SwitchGait", + 1011, + "Switches the robot's walking pattern or style dynamically, suitable for different terrains or speeds.", + ), + ( + "Trigger", + 1012, + "Triggers a specific action or custom routine programmed into the robot.", + ), + ( + "BodyHeight", + 1013, + "Adjusts the height of the robot's body from the ground, useful for navigating various obstacles.", + ), + ( + "FootRaiseHeight", + 1014, + "Controls how high the robot lifts its feet during movement, which can be adjusted for different surfaces.", + ), + ( + "SpeedLevel", + 1015, + "Sets or adjusts the speed at which the robot moves, with various levels available for different operational needs.", + ), + ( + "Hello", + 1016, + "Performs a greeting action, which could involve a wave or other friendly gesture.", + ), + ("Stretch", 1017, "Engages the robot in a stretching routine."), + ( + "TrajectoryFollow", + 1018, + "Directs the robot to follow a predefined trajectory, which could involve complex paths or maneuvers.", + ), + ( + "ContinuousGait", + 1019, + "Enables a mode for continuous walking or running, ideal for long-distance travel.", + ), + ("Content", 1020, "To display or trigger when the robot is happy."), + ("Wallow", 1021, "The robot falls onto its back and rolls around."), + ( + "Dance1", + 1022, + "Performs a predefined dance routine 1, programmed for entertainment or demonstration.", + ), + ("Dance2", 1023, "Performs another variant of a predefined dance routine 2."), + ( + "GetBodyHeight", + 1024, + "Retrieves the current height of the robot's body from the ground.", + ), + ( + "GetFootRaiseHeight", + 1025, + "Retrieves the current height at which the robot's feet are being raised during movement.", + ), + ( + "GetSpeedLevel", + 1026, + "Returns the current speed level at which the robot is operating.", + ), + ( + "SwitchJoystick", + 1027, + "Toggles the control mode to joystick input, allowing for manual direction of the robot's movements.", + ), + ( + "Pose", + 1028, + "Directs the robot to take a specific pose or stance, which could be used for tasks or performances.", + ), + ( + "Scrape", + 1029, + "Robot falls to its hind legs and makes scraping motions with its front legs.", + ), + ("FrontFlip", 1030, "Executes a front flip, a complex and dynamic maneuver."), + ("FrontJump", 1031, "Commands the robot to perform a forward jump."), + ( + "FrontPounce", + 1032, + "Initiates a pouncing movement forward, mimicking animal-like pouncing behavior.", + ), + ("WiggleHips", 1033, "Causes the robot to wiggle its hips."), + ( + "GetState", + 1034, + "Retrieves the current operational state of the robot, including status reports or diagnostic information.", + ), + ( + "EconomicGait", + 1035, + "Engages a more energy-efficient walking or running mode to conserve battery life.", + ), + ("FingerHeart", 1036, "Performs a finger heart gesture while on its hind legs."), + ( + "Handstand", + 1301, + "Commands the robot to perform a handstand, demonstrating balance and control.", + ), + ( + "CrossStep", + 1302, + "Engages the robot in a cross-stepping routine, useful for complex locomotion or dance moves.", + ), + ( + "OnesidedStep", + 1303, + "Commands the robot to perform a stepping motion that predominantly uses one side.", + ), + ( + "Bound", + 1304, + "Initiates a bounding motion, similar to a light, repetitive hopping or leaping.", + ), + ( + "LeadFollow", + 1045, + "Engages follow-the-leader behavior, where the robot follows a designated leader or follows a signal.", + ), + ("LeftFlip", 1042, "Executes a flip towards the left side."), + ("RightFlip", 1043, "Performs a flip towards the right side."), + ("Backflip", 1044, "Executes a backflip, a complex and dynamic maneuver."), ] # region MyUnitreeSkills + class MyUnitreeSkills(SkillLibrary): """My Unitree Skills.""" _robot: Optional[Robot] = None @classmethod - def register_skills(cls, skill_classes: Union['AbstractSkill', list['AbstractSkill']]): + def register_skills( + cls, skill_classes: Union["AbstractSkill", list["AbstractSkill"]] + ): """Add multiple skill classes as class attributes. - + Args: skill_classes: List of skill classes to add """ @@ -193,9 +230,11 @@ def initialize_skills(self): # Provide the robot instance to each skill for skill_class in self: - print(f"{Colors.GREEN_PRINT_COLOR}Creating instance for skill: {skill_class}{Colors.RESET_COLOR}") + print( + f"{Colors.GREEN_PRINT_COLOR}Creating instance for skill: {skill_class}{Colors.RESET_COLOR}" + ) self.create_instance(skill_class.__name__, robot=self._robot) - + # Refresh the class skills self.refresh_class_skills() @@ -214,7 +253,8 @@ def __call__(self): raise RuntimeError( f"{Colors.RED_PRINT_COLOR}" f"No App ID provided to {self.__class__.__name__} Skill" - f"{Colors.RESET_COLOR}") + f"{Colors.RESET_COLOR}" + ) else: self._robot.webrtc_req(api_id=self._app_id) string = f"{Colors.GREEN_PRINT_COLOR}{self.__class__.__name__} was successful: id={self._app_id}{Colors.RESET_COLOR}" @@ -226,61 +266,68 @@ def __call__(self): skill_class = type( name, # Name of the class (BaseUnitreeSkill,), # Base classes - { - '__doc__': description, - '_app_id': app_id - }) + {"__doc__": description, "_app_id": app_id}, + ) skills_classes.append(skill_class) return skills_classes # region Class-based Skills - + class Move(AbstractRobotSkill): """Move the robot using direct velocity commands. - + This skill works with both ROS and WebRTC robot implementations. """ x: float = Field(..., description="Forward velocity (m/s).") y: float = Field(default=0.0, description="Left/right velocity (m/s)") yaw: float = Field(default=0.0, description="Rotational velocity (rad/s)") - duration: float = Field(default=0.0, description="How long to move (seconds). If 0, command is continuous") + duration: float = Field( + default=0.0, + description="How long to move (seconds). If 0, command is continuous", + ) def __call__(self): super().__call__() - + from dimos.types.vector import Vector + vector = Vector(self.x, self.y, self.yaw) - + # Handle duration for continuous movement if self.duration > 0: import time import threading import asyncio - + # Create a stop event stop_event = threading.Event() - + # Function to continuously send movement commands async def continuous_move(): loop = asyncio.new_event_loop() asyncio.set_event_loop(loop) start_time = time.time() try: - while not stop_event.is_set() and (time.time() - start_time) < self.duration: + while ( + not stop_event.is_set() + and (time.time() - start_time) < self.duration + ): self._robot.move(vector) await asyncio.sleep(0.001) # Send commands at 1000Hz # Always stop at the end self._robot.move(Vector(0, 0, 0)) finally: loop.close() - + # Run movement in a separate thread with asyncio event loop - move_thread = threading.Thread(target=lambda: asyncio.run(continuous_move())) + move_thread = threading.Thread( + target=lambda: asyncio.run(continuous_move()) + ) move_thread.daemon = True move_thread.start() - + # Wait for the full duration time.sleep(self.duration) stop_event.set() @@ -292,49 +339,60 @@ async def continuous_move(): class Reverse(AbstractRobotSkill): """Reverse the robot using direct velocity commands. - + This skill works with both ROS and WebRTC robot implementations. """ - x: float = Field(..., description="Backward velocity (m/s). Positive values move backward.") + x: float = Field( + ..., description="Backward velocity (m/s). Positive values move backward." + ) y: float = Field(default=0.0, description="Left/right velocity (m/s)") yaw: float = Field(default=0.0, description="Rotational velocity (rad/s)") - duration: float = Field(default=0.0, description="How long to move (seconds). If 0, command is continuous") + duration: float = Field( + default=0.0, + description="How long to move (seconds). If 0, command is continuous", + ) def __call__(self): super().__call__() from dimos.types.vector import Vector + # Use negative x for backward movement vector = Vector(-self.x, self.y, self.yaw) - + # Handle duration for continuous movement if self.duration > 0: import time import threading import asyncio - + # Create a stop event stop_event = threading.Event() - + # Function to continuously send movement commands async def continuous_move(): loop = asyncio.new_event_loop() asyncio.set_event_loop(loop) start_time = time.time() try: - while not stop_event.is_set() and (time.time() - start_time) < self.duration: + while ( + not stop_event.is_set() + and (time.time() - start_time) < self.duration + ): self._robot.move(vector) await asyncio.sleep(0.001) # Send commands at 1000Hz # Always stop at the end self._robot.move(Vector(0, 0, 0)) finally: loop.close() - + # Run movement in a separate thread with asyncio event loop - move_thread = threading.Thread(target=lambda: asyncio.run(continuous_move())) + move_thread = threading.Thread( + target=lambda: asyncio.run(continuous_move()) + ) move_thread.daemon = True move_thread.start() - + # Wait for the full duration time.sleep(self.duration) stop_event.set() @@ -351,7 +409,9 @@ class SpinLeft(AbstractRobotSkill): def __call__(self): super().__call__() - return self._robot.spin(degrees=self.degrees) # Spinning left is positive degrees + return self._robot.spin( + degrees=self.degrees + ) # Spinning left is positive degrees class SpinRight(AbstractRobotSkill): """Spin the robot right using degree commands.""" @@ -360,7 +420,9 @@ class SpinRight(AbstractRobotSkill): def __call__(self): super().__call__() - return self._robot.spin(degrees=-self.degrees) # Spinning right is negative degrees + return self._robot.spin( + degrees=-self.degrees + ) # Spinning right is negative degrees class Wait(AbstractSkill): """Wait for a specified amount of time.""" @@ -368,5 +430,5 @@ class Wait(AbstractSkill): seconds: float = Field(..., description="Seconds to wait") def __call__(self): - time.sleep(self.seconds) + time.sleep(self.seconds) return f"Wait completed with length={self.seconds}s" diff --git a/dimos/robot/unitree_webrtc/connection.py b/dimos/robot/unitree_webrtc/connection.py index 48ea276883..2cf4e31c6d 100644 --- a/dimos/robot/unitree_webrtc/connection.py +++ b/dimos/robot/unitree_webrtc/connection.py @@ -41,7 +41,8 @@ async def async_connect(): self.conn.datachannel.set_decoder(decoder_type="native") await self.conn.datachannel.pub_sub.publish_request_new( - RTC_TOPIC["MOTION_SWITCHER"], {"api_id": 1002, "parameter": {"name": self.mode}} + RTC_TOPIC["MOTION_SWITCHER"], + {"api_id": 1002, "parameter": {"name": self.mode}}, ) self.connected_event.set() @@ -90,7 +91,11 @@ def raw_odom_stream(self) -> Subject[Position]: @functools.cache def lidar_stream(self) -> Subject[LidarMessage]: - return backpressure(self.raw_lidar_stream().pipe(ops.map(lambda raw_frame: LidarMessage.from_msg(raw_frame)))) + return backpressure( + self.raw_lidar_stream().pipe( + ops.map(lambda raw_frame: LidarMessage.from_msg(raw_frame)) + ) + ) @functools.cache def odom_stream(self) -> Subject[Position]: @@ -101,10 +106,14 @@ def lowstate_stream(self) -> Subject[LowStateMsg]: return backpressure(self.unitree_sub_stream(RTC_TOPIC["LOW_STATE"])) def standup_ai(self): - return self.publish_request(RTC_TOPIC["SPORT_MOD"], {"api_id": SPORT_CMD["BalanceStand"]}) + return self.publish_request( + RTC_TOPIC["SPORT_MOD"], {"api_id": SPORT_CMD["BalanceStand"]} + ) def standup_normal(self): - return self.publish_request(RTC_TOPIC["SPORT_MOD"], {"api_id": SPORT_CMD["StandUp"]}) + return self.publish_request( + RTC_TOPIC["SPORT_MOD"], {"api_id": SPORT_CMD["StandUp"]} + ) def standup(self): if self.mode == "ai": @@ -113,7 +122,9 @@ def standup(self): return self.standup_normal() def liedown(self): - return self.publish_request(RTC_TOPIC["SPORT_MOD"], {"api_id": SPORT_CMD["StandDown"]}) + return self.publish_request( + RTC_TOPIC["SPORT_MOD"], {"api_id": SPORT_CMD["StandDown"]} + ) async def handstand(self): return self.publish_request( diff --git a/dimos/robot/unitree_webrtc/test_tooling.py b/dimos/robot/unitree_webrtc/test_tooling.py index d8f6bc5cff..8374839f6b 100644 --- a/dimos/robot/unitree_webrtc/test_tooling.py +++ b/dimos/robot/unitree_webrtc/test_tooling.py @@ -15,6 +15,7 @@ @pytest.mark.tool def test_record_lidar(): from dimos.robot.unitree_webrtc.unitree_go2 import UnitreeGo2 + load_dotenv() robot = UnitreeGo2(ip=os.getenv("ROBOT_IP"), mode="ai") @@ -42,6 +43,7 @@ def test_record_lidar(): @pytest.mark.tool def test_replay_recording(): from dimos.robot.unitree_webrtc.type.odometry import position_from_odom + odom_stream = Multimock("athens_odom").stream().pipe(ops.map(position_from_odom)) odom_stream.subscribe(lambda x: print(x)) @@ -53,7 +55,9 @@ def lidarmsg(msg): return [map, map.costmap.smudge()] global_map_stream = Multimock("athens_lidar").stream().pipe(ops.map(lidarmsg)) - show3d_stream(global_map_stream.pipe(ops.map(lambda x: x[0])), clearframe=True).run() + show3d_stream( + global_map_stream.pipe(ops.map(lambda x: x[0])), clearframe=True + ).run() @pytest.mark.tool @@ -68,4 +72,6 @@ def lidarmsg(msg): return [map, map.costmap.smudge()] global_map_stream = Multimock("athens_lidar").stream().pipe(ops.map(lidarmsg)) - show3d_stream(global_map_stream.pipe(ops.map(lambda x: x[0])), clearframe=True).run() + show3d_stream( + global_map_stream.pipe(ops.map(lambda x: x[0])), clearframe=True + ).run() diff --git a/dimos/robot/unitree_webrtc/testing/helpers.py b/dimos/robot/unitree_webrtc/testing/helpers.py index 6f815abd56..e860fbc907 100644 --- a/dimos/robot/unitree_webrtc/testing/helpers.py +++ b/dimos/robot/unitree_webrtc/testing/helpers.py @@ -25,7 +25,12 @@ def benchmark(calls: int, targetf: Callable[[], Union[int, None]]) -> float: return (end - start + timemod) * 1000 / calls -O3dDrawable = o3d.geometry.Geometry | o3d.geometry.LineSet | o3d.geometry.TriangleMesh | o3d.geometry.PointCloud +O3dDrawable = ( + o3d.geometry.Geometry + | o3d.geometry.LineSet + | o3d.geometry.TriangleMesh + | o3d.geometry.PointCloud +) class ReturnsDrawable(Protocol): @@ -35,7 +40,9 @@ def o3d_geometry(self) -> O3dDrawable: ... Drawable = O3dDrawable | ReturnsDrawable -def show3d(*components: Iterable[Drawable], title: str = "open3d") -> o3d.visualization.Visualizer: +def show3d( + *components: Iterable[Drawable], title: str = "open3d" +) -> o3d.visualization.Visualizer: vis = o3d.visualization.Visualizer() vis.create_window(window_name=title) for component in components: diff --git a/dimos/robot/unitree_webrtc/testing/test_mock.py b/dimos/robot/unitree_webrtc/testing/test_mock.py index d30c38ec27..7e5acce7d1 100644 --- a/dimos/robot/unitree_webrtc/testing/test_mock.py +++ b/dimos/robot/unitree_webrtc/testing/test_mock.py @@ -4,6 +4,7 @@ from dimos.robot.unitree_webrtc.type.lidar import LidarMessage from dimos.robot.unitree_webrtc.testing.mock import Mock + @pytest.mark.needsdata def test_mock_load_cast(): mock = Mock("test") diff --git a/dimos/robot/unitree_webrtc/testing/test_multimock.py b/dimos/robot/unitree_webrtc/testing/test_multimock.py index 26e19d7f26..009ad4a681 100644 --- a/dimos/robot/unitree_webrtc/testing/test_multimock.py +++ b/dimos/robot/unitree_webrtc/testing/test_multimock.py @@ -12,10 +12,13 @@ from dimos.robot.unitree_webrtc.type.timeseries import to_datetime from dimos.robot.unitree_webrtc.testing.multimock import Multimock + @pytest.mark.needsdata @pytest.mark.vis def test_multimock_stream(): - backpressure(Multimock("athens_odom").stream().pipe(ops.map(Odometry.from_msg))).subscribe(lambda x: print(x)) + backpressure( + Multimock("athens_odom").stream().pipe(ops.map(Odometry.from_msg)) + ).subscribe(lambda x: print(x)) map = Map() def lidarmsg(msg): @@ -77,14 +80,20 @@ def test_webui_multistream(): websocket_vis.start() odom_stream = Multimock("athens_odom").stream().pipe(ops.map(Odometry.from_msg)) - lidar_stream = backpressure(Multimock("athens_lidar").stream().pipe(ops.map(LidarMessage.from_msg))) + lidar_stream = backpressure( + Multimock("athens_lidar").stream().pipe(ops.map(LidarMessage.from_msg)) + ) map = Map() map_stream = map.consume(lidar_stream) - costmap_stream = map_stream.pipe(ops.map(lambda x: ["costmap", map.costmap.smudge(preserve_unknown=False)])) + costmap_stream = map_stream.pipe( + ops.map(lambda x: ["costmap", map.costmap.smudge(preserve_unknown=False)]) + ) websocket_vis.connect(costmap_stream) - websocket_vis.connect(odom_stream.pipe(ops.map(lambda pos: ["robot_pos", pos.pos.to_2d()]))) + websocket_vis.connect( + odom_stream.pipe(ops.map(lambda pos: ["robot_pos", pos.pos.to_2d()])) + ) show3d_stream(lidar_stream, clearframe=True).run() diff --git a/dimos/robot/unitree_webrtc/type/costmap.py b/dimos/robot/unitree_webrtc/type/costmap.py index 49e600ab46..145aabe72c 100644 --- a/dimos/robot/unitree_webrtc/type/costmap.py +++ b/dimos/robot/unitree_webrtc/type/costmap.py @@ -65,7 +65,9 @@ def save_pickle(self, pickle_path: str): pickle.dump(self, f) @classmethod - def create_empty(cls, width: int = 100, height: int = 100, resolution: float = 0.1) -> "Costmap": + def create_empty( + cls, width: int = 100, height: int = 100, resolution: float = 0.1 + ) -> "Costmap": """Create an empty costmap with specified dimensions.""" return cls( grid=np.zeros((height, width), dtype=np.int8), @@ -171,7 +173,9 @@ def smudge( -kernel_size // 2 : kernel_size // 2 + 1, -kernel_size // 2 : kernel_size // 2 + 1, ] - kernel = (x * x + y * y <= (kernel_size // 2) * (kernel_size // 2)).astype(np.uint8) + kernel = (x * x + y * y <= (kernel_size // 2) * (kernel_size // 2)).astype( + np.uint8 + ) # Create distance map using dilation # Each iteration adds one 'ring' of cells around obstacles @@ -185,7 +189,9 @@ def smudge( for i in range(iterations): # Dilate the binary map - dilated = ndimage.binary_dilation(dilated_map > 0, structure=kernel, iterations=1).astype(np.uint8) + dilated = ndimage.binary_dilation( + dilated_map > 0, structure=kernel, iterations=1 + ).astype(np.uint8) # Calculate the new layer (cells that were just added in this iteration) new_layer = (dilated - (dilated_map > 0).astype(np.uint8)) * 100 @@ -263,7 +269,9 @@ def o3d_geometry(self): return self.pointcloud @property - def pointcloud(self, *, res: float = 0.25, origin=(0.0, 0.0), show_unknown: bool = False): + def pointcloud( + self, *, res: float = 0.25, origin=(0.0, 0.0), show_unknown: bool = False + ): """ Visualise a 2-D costmap (int8, −1…100) as an Open3D PointCloud. diff --git a/dimos/robot/unitree_webrtc/type/lidar.py b/dimos/robot/unitree_webrtc/type/lidar.py index 37a51b702a..ac39680e15 100644 --- a/dimos/robot/unitree_webrtc/type/lidar.py +++ b/dimos/robot/unitree_webrtc/type/lidar.py @@ -1,6 +1,10 @@ from dimos.robot.unitree_webrtc.testing.helpers import color from datetime import datetime -from dimos.robot.unitree_webrtc.type.timeseries import Timestamped, to_datetime, to_human_readable +from dimos.robot.unitree_webrtc.type.timeseries import ( + Timestamped, + to_datetime, + to_human_readable, +) from dimos.types.vector import Vector from dataclasses import dataclass, field from typing import List, TypedDict @@ -87,7 +91,9 @@ def __add__(self, other: "LidarMessage") -> "LidarMessage": def o3d_geometry(self): return self.pointcloud - def icp(self, other: "LidarMessage") -> o3d.pipelines.registration.RegistrationResult: + def icp( + self, other: "LidarMessage" + ) -> o3d.pipelines.registration.RegistrationResult: self.estimate_normals() other.estimate_normals() @@ -124,7 +130,9 @@ def icptransform(self, other): def estimate_normals(self) -> "LidarMessage": # Check if normals already exist by testing if the normals attribute has data if not self.pointcloud.has_normals() or len(self.pointcloud.normals) == 0: - self.pointcloud.estimate_normals(search_param=o3d.geometry.KDTreeSearchParamHybrid(radius=0.1, max_nn=30)) + self.pointcloud.estimate_normals( + search_param=o3d.geometry.KDTreeSearchParamHybrid(radius=0.1, max_nn=30) + ) return self def color(self, color_choice) -> "LidarMessage": diff --git a/dimos/robot/unitree_webrtc/type/map.py b/dimos/robot/unitree_webrtc/type/map.py index eef15bdeef..83c7e0970f 100644 --- a/dimos/robot/unitree_webrtc/type/map.py +++ b/dimos/robot/unitree_webrtc/type/map.py @@ -33,13 +33,17 @@ def o3d_geometry(self) -> o3d.geometry.PointCloud: @property def costmap(self) -> Costmap: """Return a fully inflated cost-map in a `Costmap` wrapper.""" - inflate_radius_m = 0.5 * self.voxel_size if self.voxel_size > self.cost_resolution else 0.0 + inflate_radius_m = ( + 0.5 * self.voxel_size if self.voxel_size > self.cost_resolution else 0.0 + ) grid, origin_xy = pointcloud_to_costmap( self.pointcloud, resolution=self.cost_resolution, inflate_radius_m=inflate_radius_m, ) - return Costmap(grid=grid, origin=[*origin_xy, 0.0], resolution=self.cost_resolution) + return Costmap( + grid=grid, origin=[*origin_xy, 0.0], resolution=self.cost_resolution + ) def splice_sphere( @@ -48,7 +52,9 @@ def splice_sphere( shrink: float = 0.95, ) -> o3d.geometry.PointCloud: center = patch_pcd.get_center() - radius = np.linalg.norm(np.asarray(patch_pcd.points) - center, axis=1).max() * shrink + radius = ( + np.linalg.norm(np.asarray(patch_pcd.points) - center, axis=1).max() * shrink + ) dists = np.linalg.norm(np.asarray(map_pcd.points) - center, axis=1) victims = np.nonzero(dists < radius)[0] survivors = map_pcd.select_by_index(victims, invert=True) @@ -77,15 +83,19 @@ def splice_cylinder( map_pts = np.asarray(map_pcd.points) planar_dists_map = np.linalg.norm(map_pts[:, axes] - center[axes], axis=1) - victims = np.nonzero((planar_dists_map < radius) & (map_pts[:, axis] >= axis_min) & (map_pts[:, axis] <= axis_max))[ - 0 - ] + victims = np.nonzero( + (planar_dists_map < radius) + & (map_pts[:, axis] >= axis_min) + & (map_pts[:, axis] <= axis_max) + )[0] survivors = map_pcd.select_by_index(victims, invert=True) return survivors + patch_pcd -def _inflate_lethal(costmap: np.ndarray, radius: int, lethal_val: int = 100) -> np.ndarray: +def _inflate_lethal( + costmap: np.ndarray, radius: int, lethal_val: int = 100 +) -> np.ndarray: """Return *costmap* with lethal cells dilated by *radius* grid steps (circular).""" if radius <= 0 or not np.any(costmap == lethal_val): return costmap diff --git a/dimos/robot/unitree_webrtc/type/odometry.py b/dimos/robot/unitree_webrtc/type/odometry.py index df10bd8d54..7bee9ce7c9 100644 --- a/dimos/robot/unitree_webrtc/type/odometry.py +++ b/dimos/robot/unitree_webrtc/type/odometry.py @@ -9,10 +9,18 @@ "type": "msg", "topic": "rt/utlidar/robot_pose", "data": { - "header": {"stamp": {"sec": 1746565669, "nanosec": 448350564}, "frame_id": "odom"}, + "header": { + "stamp": {"sec": 1746565669, "nanosec": 448350564}, + "frame_id": "odom", + }, "pose": { "position": {"x": 5.961965, "y": -2.916958, "z": 0.319509}, - "orientation": {"x": 0.002787, "y": -0.000902, "z": -0.970244, "w": -0.242112}, + "orientation": { + "x": 0.002787, + "y": -0.000902, + "z": -0.970244, + "w": -0.242112, + }, }, }, } diff --git a/dimos/robot/unitree_webrtc/type/test_lidar.py b/dimos/robot/unitree_webrtc/type/test_lidar.py index 65f102c580..0b860c9658 100644 --- a/dimos/robot/unitree_webrtc/type/test_lidar.py +++ b/dimos/robot/unitree_webrtc/type/test_lidar.py @@ -116,7 +116,10 @@ def test_downsample(): # framea_icp = framea.copy().icptransform(frameb) pcd = framea.copy().pointcloud newpcd, _, _ = pcd.voxel_down_sample_and_trace( - voxel_size=0.25, min_bound=pcd.get_min_bound(), max_bound=pcd.get_max_bound(), approximate_class=False + voxel_size=0.25, + min_bound=pcd.get_min_bound(), + max_bound=pcd.get_max_bound(), + approximate_class=False, ) multivis( diff --git a/dimos/robot/unitree_webrtc/type/test_map.py b/dimos/robot/unitree_webrtc/type/test_map.py index 25deccda00..c4c9b96013 100644 --- a/dimos/robot/unitree_webrtc/type/test_map.py +++ b/dimos/robot/unitree_webrtc/type/test_map.py @@ -18,7 +18,9 @@ def test_costmap_vis(): @pytest.mark.vis def test_reconstruction_with_realtime_vis(): - show3d_stream(Map().consume(Mock("office").stream(rate_hz=60.0)), clearframe=True).run() + show3d_stream( + Map().consume(Mock("office").stream(rate_hz=60.0)), clearframe=True + ).run() @pytest.mark.vis diff --git a/dimos/robot/unitree_webrtc/type/test_timeseries.py b/dimos/robot/unitree_webrtc/type/test_timeseries.py index 00f29c3202..b1f7144b85 100644 --- a/dimos/robot/unitree_webrtc/type/test_timeseries.py +++ b/dimos/robot/unitree_webrtc/type/test_timeseries.py @@ -1,5 +1,4 @@ from datetime import timedelta, datetime -from typing import TypeVar from dimos.robot.unitree_webrtc.type.timeseries import TEvent, TList @@ -7,7 +6,9 @@ start_event = TEvent(fixed_date, 1) end_event = TEvent(fixed_date + timedelta(seconds=10), 9) -sample_list = TList([start_event, TEvent(fixed_date + timedelta(seconds=2), 5), end_event]) +sample_list = TList( + [start_event, TEvent(fixed_date + timedelta(seconds=2), 5), end_event] +) def test_repr(): diff --git a/dimos/robot/unitree_webrtc/type/timeseries.py b/dimos/robot/unitree_webrtc/type/timeseries.py index 84d2910622..89f297a6d2 100644 --- a/dimos/robot/unitree_webrtc/type/timeseries.py +++ b/dimos/robot/unitree_webrtc/type/timeseries.py @@ -60,7 +60,9 @@ def __repr__(self) -> str: return f"TEvent(ts={self.ts}, data={self.data})" -EVENT = TypeVar("EVENT", bound=Timestamped) # any object that is a subclass of Timestamped +EVENT = TypeVar( + "EVENT", bound=Timestamped +) # any object that is a subclass of Timestamped class Timeseries(ABC, Generic[EVENT]): diff --git a/dimos/robot/unitree_webrtc/unitree_go2.py b/dimos/robot/unitree_webrtc/unitree_go2.py index f6e4c1b47c..011f320f54 100644 --- a/dimos/robot/unitree_webrtc/unitree_go2.py +++ b/dimos/robot/unitree_webrtc/unitree_go2.py @@ -1,17 +1,14 @@ -from dataclasses import dataclass -from dimos.types.path import Path from dimos.types.vector import Vector from typing import Union, Optional from dimos.robot.unitree_webrtc.type.map import Map from dimos.robot.unitree_webrtc.connection import WebRTCRobot from dimos.robot.global_planner.planner import AstarPlanner -from dimos.utils.reactive import backpressure from dimos.utils.reactive import getter_streaming from dimos.robot.unitree.unitree_skills import MyUnitreeSkills -from dimos.skills.skills import AbstractRobotSkill, AbstractSkill, SkillLibrary +from dimos.skills.skills import AbstractSkill, SkillLibrary import os from go2_webrtc_driver.constants import VUI_COLOR -from dimos.robot.local_planner import VFHPurePursuitPlanner, navigate_path_local +from dimos.robot.local_planner import navigate_path_local class Color(VUI_COLOR): ... @@ -33,7 +30,9 @@ def __init__( self.map_stream = self.map.consume(self.lidar_stream()) self.global_planner = AstarPlanner( - set_local_nav=lambda path, stop_event=None, goal_theta=None: navigate_path_local( + set_local_nav=lambda path, + stop_event=None, + goal_theta=None: navigate_path_local( self, path, timeout=120.0, goal_theta=goal_theta, stop_event=stop_event ), get_costmap=lambda: self.map.costmap, diff --git a/dimos/simulation/__init__.py b/dimos/simulation/__init__.py index 7b35329862..3d25363b30 100644 --- a/dimos/simulation/__init__.py +++ b/dimos/simulation/__init__.py @@ -12,9 +12,4 @@ GenesisSimulator = None # type: ignore GenesisStream = None # type: ignore -__all__ = [ - 'IsaacSimulator', - 'IsaacStream', - 'GenesisSimulator', - 'GenesisStream' -] \ No newline at end of file +__all__ = ["IsaacSimulator", "IsaacStream", "GenesisSimulator", "GenesisStream"] diff --git a/dimos/simulation/base/simulator_base.py b/dimos/simulation/base/simulator_base.py index 8fd048b026..717e8e1719 100644 --- a/dimos/simulation/base/simulator_base.py +++ b/dimos/simulation/base/simulator_base.py @@ -1,19 +1,19 @@ from typing import Optional, Union, List, Dict from abc import ABC, abstractmethod -from pathlib import Path + class SimulatorBase(ABC): """Base class for simulators.""" - + @abstractmethod def __init__( - self, + self, headless: bool = True, open_usd: Optional[str] = None, # Keep for Isaac compatibility - entities: Optional[List[Dict[str, Union[str, dict]]]] = None # Add for Genesis + entities: Optional[List[Dict[str, Union[str, dict]]]] = None, # Add for Genesis ): """Initialize the simulator. - + Args: headless: Whether to run without visualization open_usd: Path to USD file (for Isaac) @@ -22,13 +22,13 @@ def __init__( self.headless = headless self.open_usd = open_usd self.stage = None - + @abstractmethod def get_stage(self): """Get the current stage/scene.""" pass - + @abstractmethod def close(self): """Close the simulation.""" - pass \ No newline at end of file + pass diff --git a/dimos/simulation/base/stream_base.py b/dimos/simulation/base/stream_base.py index 6308207419..3fea3c54d9 100644 --- a/dimos/simulation/base/stream_base.py +++ b/dimos/simulation/base/stream_base.py @@ -3,12 +3,13 @@ from pathlib import Path import subprocess -AnnotatorType = Literal['rgb', 'normals', 'bounding_box_3d', 'motion_vectors'] -TransportType = Literal['tcp', 'udp'] +AnnotatorType = Literal["rgb", "normals", "bounding_box_3d", "motion_vectors"] +TransportType = Literal["tcp", "udp"] + class StreamBase(ABC): """Base class for simulation streaming.""" - + @abstractmethod def __init__( self, @@ -17,13 +18,13 @@ def __init__( height: int = 1080, fps: int = 60, camera_path: str = "/World/camera", - annotator_type: AnnotatorType = 'rgb', - transport: TransportType = 'tcp', + annotator_type: AnnotatorType = "rgb", + transport: TransportType = "tcp", rtsp_url: str = "rtsp://mediamtx:8554/stream", - usd_path: Optional[Union[str, Path]] = None + usd_path: Optional[Union[str, Path]] = None, ): """Initialize the stream. - + Args: simulator: Simulator instance width: Stream width in pixels @@ -44,48 +45,58 @@ def __init__( self.transport = transport self.rtsp_url = rtsp_url self.proc = None - + @abstractmethod def _load_stage(self, usd_path: Union[str, Path]): """Load stage from file.""" pass - + @abstractmethod def _setup_camera(self): """Setup and validate camera.""" pass - + def _setup_ffmpeg(self): """Setup FFmpeg process for streaming.""" command = [ - 'ffmpeg', - '-y', - '-f', 'rawvideo', - '-vcodec', 'rawvideo', - '-pix_fmt', 'bgr24', - '-s', f"{self.width}x{self.height}", - '-r', str(self.fps), - '-i', '-', - '-an', - '-c:v', 'h264_nvenc', - '-preset', 'fast', - '-f', 'rtsp', - '-rtsp_transport', self.transport, - self.rtsp_url + "ffmpeg", + "-y", + "-f", + "rawvideo", + "-vcodec", + "rawvideo", + "-pix_fmt", + "bgr24", + "-s", + f"{self.width}x{self.height}", + "-r", + str(self.fps), + "-i", + "-", + "-an", + "-c:v", + "h264_nvenc", + "-preset", + "fast", + "-f", + "rtsp", + "-rtsp_transport", + self.transport, + self.rtsp_url, ] self.proc = subprocess.Popen(command, stdin=subprocess.PIPE) - + @abstractmethod def _setup_annotator(self): """Setup annotator.""" pass - + @abstractmethod def stream(self): """Start streaming.""" pass - + @abstractmethod def cleanup(self): """Cleanup resources.""" - pass \ No newline at end of file + pass diff --git a/dimos/simulation/genesis/__init__.py b/dimos/simulation/genesis/__init__.py index f1d88ebc9f..5657d9167b 100644 --- a/dimos/simulation/genesis/__init__.py +++ b/dimos/simulation/genesis/__init__.py @@ -1,7 +1,4 @@ from .simulator import GenesisSimulator from .stream import GenesisStream -__all__ = [ - 'GenesisSimulator', - 'GenesisStream' -] \ No newline at end of file +__all__ = ["GenesisSimulator", "GenesisStream"] diff --git a/dimos/simulation/genesis/simulator.py b/dimos/simulation/genesis/simulator.py index 7982a9f810..fc3958f297 100644 --- a/dimos/simulation/genesis/simulator.py +++ b/dimos/simulation/genesis/simulator.py @@ -1,19 +1,19 @@ from typing import Optional, Union, List, Dict import genesis as gs # type: ignore -from pathlib import Path from ..base.simulator_base import SimulatorBase + class GenesisSimulator(SimulatorBase): """Genesis simulator implementation.""" - + def __init__( - self, + self, headless: bool = True, open_usd: Optional[str] = None, # Keep for compatibility - entities: Optional[List[Dict[str, Union[str, dict]]]] = None + entities: Optional[List[Dict[str, Union[str, dict]]]] = None, ): """Initialize the Genesis simulation. - + Args: headless: Whether to run without visualization open_usd: Path to USD file (for Isaac) @@ -23,10 +23,10 @@ def __init__( - params: dict (parameters for primitives or loading options) """ super().__init__(headless, open_usd, entities) - + # Initialize Genesis gs.init() - + # Create scene with viewer options self.scene = gs.Scene( show_viewer=not headless, @@ -47,98 +47,98 @@ def __init__( ), renderer=gs.renderers.Rasterizer(), ) - + # Handle USD parameter for compatibility if open_usd: print(f"[Warning] USD files not supported in Genesis. Ignoring: {open_usd}") - + # Load entities if provided if entities: self._load_entities(entities) - + # Don't build scene yet - let stream add camera first self.is_built = False - + def _load_entities(self, entities: List[Dict[str, Union[str, dict]]]): """Load multiple entities into the scene.""" for entity in entities: - entity_type = entity.get('type', '').lower() - path = entity.get('path', '') - params = entity.get('params', {}) - + entity_type = entity.get("type", "").lower() + path = entity.get("path", "") + params = entity.get("params", {}) + try: - if entity_type == 'mesh': + if entity_type == "mesh": mesh = gs.morphs.Mesh( file=path, # Explicit file argument - **params + **params, ) self.scene.add_entity(mesh) print(f"[Genesis] Added mesh from {path}") - - elif entity_type == 'urdf': + + elif entity_type == "urdf": robot = gs.morphs.URDF( file=path, # Explicit file argument - **params + **params, ) self.scene.add_entity(robot) print(f"[Genesis] Added URDF robot from {path}") - - elif entity_type == 'mjcf': + + elif entity_type == "mjcf": mujoco = gs.morphs.MJCF( file=path, # Explicit file argument - **params + **params, ) self.scene.add_entity(mujoco) print(f"[Genesis] Added MJCF model from {path}") - - elif entity_type == 'primitive': - shape_type = params.pop('shape', 'plane') - if shape_type == 'plane': + + elif entity_type == "primitive": + shape_type = params.pop("shape", "plane") + if shape_type == "plane": morph = gs.morphs.Plane(**params) - elif shape_type == 'box': + elif shape_type == "box": morph = gs.morphs.Box(**params) - elif shape_type == 'sphere': + elif shape_type == "sphere": morph = gs.morphs.Sphere(**params) else: raise ValueError(f"Unsupported primitive shape: {shape_type}") - + # Add position if not specified - if 'pos' not in params: - if shape_type == 'plane': + if "pos" not in params: + if shape_type == "plane": morph.pos = [0, 0, 0] else: morph.pos = [0, 0, 1] # Lift objects above ground - + self.scene.add_entity(morph) print(f"[Genesis] Added {shape_type} at position {morph.pos}") - + else: raise ValueError(f"Unsupported entity type: {entity_type}") - + except Exception as e: print(f"[Warning] Failed to load entity {entity}: {str(e)}") - - def add_entity(self, entity_type: str, path: str = '', **params): + + def add_entity(self, entity_type: str, path: str = "", **params): """Add a single entity to the scene. - + Args: entity_type: Type of entity ('mesh', 'urdf', 'mjcf', 'primitive') path: File path for mesh/urdf/mjcf entities **params: Additional parameters for entity creation """ - self._load_entities([{'type': entity_type, 'path': path, 'params': params}]) - + self._load_entities([{"type": entity_type, "path": path, "params": params}]) + def get_stage(self): """Get the current stage/scene.""" return self.scene - + def build(self): """Build the scene if not already built.""" if not self.is_built: self.scene.build() self.is_built = True - + def close(self): """Close the simulation.""" # Genesis handles cleanup automatically - pass \ No newline at end of file + pass diff --git a/dimos/simulation/genesis/stream.py b/dimos/simulation/genesis/stream.py index 7ff6b44f7f..b553f29fa2 100644 --- a/dimos/simulation/genesis/stream.py +++ b/dimos/simulation/genesis/stream.py @@ -1,14 +1,14 @@ import cv2 import numpy as np import time -import subprocess -from typing import Literal, Optional, Union +from typing import Optional, Union from pathlib import Path from ..base.stream_base import StreamBase, AnnotatorType, TransportType + class GenesisStream(StreamBase): """Genesis stream implementation.""" - + def __init__( self, simulator, @@ -16,10 +16,10 @@ def __init__( height: int = 1080, fps: int = 60, camera_path: str = "/camera", - annotator_type: AnnotatorType = 'rgb', - transport: TransportType = 'tcp', + annotator_type: AnnotatorType = "rgb", + transport: TransportType = "tcp", rtsp_url: str = "rtsp://mediamtx:8554/stream", - usd_path: Optional[Union[str, Path]] = None + usd_path: Optional[Union[str, Path]] = None, ): """Initialize the Genesis stream.""" super().__init__( @@ -31,26 +31,26 @@ def __init__( annotator_type=annotator_type, transport=transport, rtsp_url=rtsp_url, - usd_path=usd_path + usd_path=usd_path, ) - + self.scene = simulator.get_stage() - + # Initialize components if usd_path: self._load_stage(usd_path) self._setup_camera() self._setup_ffmpeg() self._setup_annotator() - + # Build scene after camera is set up simulator.build() - + def _load_stage(self, usd_path: Union[str, Path]): """Load stage from file.""" # Genesis handles stage loading through simulator pass - + def _setup_camera(self): """Setup and validate camera.""" self.camera = self.scene.add_camera( @@ -60,63 +60,65 @@ def _setup_camera(self): fov=30, GUI=False, ) - + def _setup_annotator(self): """Setup the specified annotator.""" # Genesis handles different render types through camera.render() pass - + def stream(self): """Start the streaming loop.""" try: print("[Stream] Starting Genesis camera stream...") frame_count = 0 start_time = time.time() - + while True: frame_start = time.time() - + # Step simulation and get frame step_start = time.time() self.scene.step() step_time = time.time() - step_start - print(f"[Stream] Simulation step took {step_time*1000:.2f}ms") + print(f"[Stream] Simulation step took {step_time * 1000:.2f}ms") # Get frame based on annotator type - if self.annotator_type == 'rgb': + if self.annotator_type == "rgb": frame, _, _, _ = self.camera.render(rgb=True) - elif self.annotator_type == 'normals': + elif self.annotator_type == "normals": _, _, _, frame = self.camera.render(normal=True) else: frame, _, _, _ = self.camera.render(rgb=True) # Default to RGB - + # Convert frame format if needed if isinstance(frame, np.ndarray): frame = cv2.cvtColor(frame, cv2.COLOR_RGB2BGR) - + # Write to FFmpeg self.proc.stdin.write(frame.tobytes()) self.proc.stdin.flush() - + # Log metrics frame_time = time.time() - frame_start - print(f"[Stream] Total frame processing took {frame_time*1000:.2f}ms") + print(f"[Stream] Total frame processing took {frame_time * 1000:.2f}ms") frame_count += 1 - + if frame_count % 100 == 0: elapsed_time = time.time() - start_time current_fps = frame_count / elapsed_time - print(f"[Stream] Processed {frame_count} frames | Current FPS: {current_fps:.2f}") - + print( + f"[Stream] Processed {frame_count} frames | Current FPS: {current_fps:.2f}" + ) + except KeyboardInterrupt: print("\n[Stream] Received keyboard interrupt, stopping stream...") finally: self.cleanup() - + def cleanup(self): """Cleanup resources.""" print("[Cleanup] Stopping FFmpeg process...") - if hasattr(self, 'proc'): + if hasattr(self, "proc"): self.proc.stdin.close() self.proc.wait() print("[Cleanup] Closing simulation...") @@ -124,4 +126,4 @@ def cleanup(self): self.simulator.close() except AttributeError: print("[Cleanup] Warning: Could not close simulator properly") - print("[Cleanup] Successfully cleaned up resources") \ No newline at end of file + print("[Cleanup] Successfully cleaned up resources") diff --git a/dimos/simulation/isaac/__init__.py b/dimos/simulation/isaac/__init__.py index 85e42aa9c1..2b9bdc082d 100644 --- a/dimos/simulation/isaac/__init__.py +++ b/dimos/simulation/isaac/__init__.py @@ -1,7 +1,4 @@ from .simulator import IsaacSimulator from .stream import IsaacStream -__all__ = [ - 'IsaacSimulator', - 'IsaacStream' -] \ No newline at end of file +__all__ = ["IsaacSimulator", "IsaacStream"] diff --git a/dimos/simulation/isaac/simulator.py b/dimos/simulation/isaac/simulator.py index 050c12c80b..99d23b4361 100644 --- a/dimos/simulation/isaac/simulator.py +++ b/dimos/simulation/isaac/simulator.py @@ -2,29 +2,28 @@ from isaacsim import SimulationApp from ..base.simulator_base import SimulatorBase + class IsaacSimulator(SimulatorBase): """Isaac Sim simulator implementation.""" - + def __init__( - self, - headless: bool = True, + self, + headless: bool = True, open_usd: Optional[str] = None, - entities: Optional[List[Dict[str, Union[str, dict]]]] = None # Add but ignore -): + entities: Optional[List[Dict[str, Union[str, dict]]]] = None, # Add but ignore + ): """Initialize the Isaac Sim simulation.""" super().__init__(headless, open_usd) - self.app = SimulationApp({ - "headless": headless, - "open_usd": open_usd - }) - + self.app = SimulationApp({"headless": headless, "open_usd": open_usd}) + def get_stage(self): """Get the current USD stage.""" import omni.usd + self.stage = omni.usd.get_context().get_stage() return self.stage - + def close(self): """Close the simulation.""" - if hasattr(self, 'app'): - self.app.close() \ No newline at end of file + if hasattr(self, "app"): + self.app.close() diff --git a/dimos/simulation/isaac/stream.py b/dimos/simulation/isaac/stream.py index b535b35608..44560783bd 100644 --- a/dimos/simulation/isaac/stream.py +++ b/dimos/simulation/isaac/stream.py @@ -12,17 +12,16 @@ # See the License for the specific language governing permissions and # limitations under the License. -from isaacsim import SimulationApp import cv2 -import numpy as np import time -from typing import Literal, Optional, Union +from typing import Optional, Union from pathlib import Path from ..base.stream_base import StreamBase, AnnotatorType, TransportType + class IsaacStream(StreamBase): """Isaac Sim stream implementation.""" - + def __init__( self, simulator, @@ -30,10 +29,10 @@ def __init__( height: int = 1080, fps: int = 60, camera_path: str = "/World/alfred_parent_prim/alfred_base_descr/chest_cam_rgb_camera_frame/chest_cam", - annotator_type: AnnotatorType = 'rgb', - transport: TransportType = 'tcp', + annotator_type: AnnotatorType = "rgb", + transport: TransportType = "tcp", rtsp_url: str = "rtsp://mediamtx:8554/stream", - usd_path: Optional[Union[str, Path]] = None + usd_path: Optional[Union[str, Path]] = None, ): """Initialize the Isaac Sim stream.""" super().__init__( @@ -45,90 +44,93 @@ def __init__( annotator_type=annotator_type, transport=transport, rtsp_url=rtsp_url, - usd_path=usd_path + usd_path=usd_path, ) - + # Import omni.replicator after SimulationApp initialization import omni.replicator.core as rep + self.rep = rep - + # Initialize components if usd_path: self._load_stage(usd_path) self._setup_camera() self._setup_ffmpeg() self._setup_annotator() - + def _load_stage(self, usd_path: Union[str, Path]): """Load USD stage from file.""" import omni.usd + abs_path = str(Path(usd_path).resolve()) omni.usd.get_context().open_stage(abs_path) self.stage = self.simulator.get_stage() if not self.stage: raise RuntimeError(f"Failed to load stage: {abs_path}") - + def _setup_camera(self): """Setup and validate camera.""" self.stage = self.simulator.get_stage() camera_prim = self.stage.GetPrimAtPath(self.camera_path) if not camera_prim: raise RuntimeError(f"Failed to find camera at path: {self.camera_path}") - + self.render_product = self.rep.create.render_product( - self.camera_path, - resolution=(self.width, self.height) + self.camera_path, resolution=(self.width, self.height) ) - + def _setup_annotator(self): """Setup the specified annotator.""" self.annotator = self.rep.AnnotatorRegistry.get_annotator(self.annotator_type) self.annotator.attach(self.render_product) - + def stream(self): """Start the streaming loop.""" try: print("[Stream] Starting camera stream loop...") frame_count = 0 start_time = time.time() - + while True: frame_start = time.time() - + # Step simulation and get frame step_start = time.time() self.rep.orchestrator.step() step_time = time.time() - step_start - print(f"[Stream] Simulation step took {step_time*1000:.2f}ms") - + print(f"[Stream] Simulation step took {step_time * 1000:.2f}ms") + frame = self.annotator.get_data() frame = cv2.cvtColor(frame, cv2.COLOR_RGBA2BGR) - + # Write to FFmpeg self.proc.stdin.write(frame.tobytes()) self.proc.stdin.flush() - + # Log metrics frame_time = time.time() - frame_start - print(f"[Stream] Total frame processing took {frame_time*1000:.2f}ms") + print(f"[Stream] Total frame processing took {frame_time * 1000:.2f}ms") frame_count += 1 - + if frame_count % 100 == 0: elapsed_time = time.time() - start_time current_fps = frame_count / elapsed_time - print(f"[Stream] Processed {frame_count} frames | Current FPS: {current_fps:.2f}") - + print( + f"[Stream] Processed {frame_count} frames | Current FPS: {current_fps:.2f}" + ) + except KeyboardInterrupt: print("\n[Stream] Received keyboard interrupt, stopping stream...") finally: self.cleanup() - + def cleanup(self): """Cleanup resources.""" print("[Cleanup] Stopping FFmpeg process...") - if hasattr(self, 'proc'): + if hasattr(self, "proc"): self.proc.stdin.close() self.proc.wait() print("[Cleanup] Closing simulation...") self.simulator.close() - print("[Cleanup] Successfully cleaned up resources") \ No newline at end of file + print("[Cleanup] Successfully cleaned up resources") diff --git a/dimos/skills/kill_skill.py b/dimos/skills/kill_skill.py index 1ca050484f..f7eb63e807 100644 --- a/dimos/skills/kill_skill.py +++ b/dimos/skills/kill_skill.py @@ -19,8 +19,7 @@ particularly those running in separate threads like the monitor skill. """ -import logging -from typing import Optional, Dict, Any, List +from typing import Optional from pydantic import Field from dimos.skills.skills import AbstractSkill, SkillLibrary @@ -28,35 +27,36 @@ logger = setup_logger("dimos.skills.kill_skill") + class KillSkill(AbstractSkill): """ A skill that terminates other running skills. - + This skill can be used to stop long-running or background skills like the monitor skill. It uses the centralized process management in the SkillLibrary to track and terminate skills. """ - + skill_name: str = Field(..., description="Name of the skill to terminate") - + def __init__(self, skill_library: Optional[SkillLibrary] = None, **data): """ Initialize the kill skill. - + Args: skill_library: The skill library instance **data: Additional data for configuration """ super().__init__(**data) self._skill_library = skill_library - + def __call__(self): """ Terminate the specified skill. - + Returns: A message indicating whether the skill was successfully terminated - """ + """ print("running skills", self._skill_library.get_running_skills()) # Terminate the skill using the skill library - return self._skill_library.terminate_skill(self.skill_name) \ No newline at end of file + return self._skill_library.terminate_skill(self.skill_name) diff --git a/dimos/skills/navigation.py b/dimos/skills/navigation.py index b4aea42416..7417c0c120 100644 --- a/dimos/skills/navigation.py +++ b/dimos/skills/navigation.py @@ -21,73 +21,71 @@ """ import os -import sys import time import threading -import logging -import numpy as np -import json -from typing import Optional, Dict, Tuple, Any +from typing import Optional, Tuple from dimos.utils.threadpool import get_scheduler -import chromadb from reactivex import operators as ops -from reactivex.subject import Subject from pydantic import Field from dimos.skills.skills import AbstractRobotSkill -from dimos.perception.spatial_perception import SpatialMemory -from dimos.agents.memory.visual_memory import VisualMemory from dimos.types.robot_location import RobotLocation -from dimos.utils.threadpool import get_scheduler from dimos.utils.logging_config import setup_logger from dimos.models.qwen.video_query import get_bbox_from_qwen_frame -from dimos.utils.generic_subscriber import GenericSubscriber from dimos.utils.ros_utils import distance_angle_to_goal_xy from dimos.robot.local_planner.local_planner import navigate_to_goal_local logger = setup_logger("dimos.skills.semantic_map_skills") + def get_dimos_base_path(): """ Get the DiMOS base path from DIMOS_PATH environment variable or default to user's home directory. - + Returns: Base path to use for DiMOS assets """ - dimos_path = os.environ.get('DIMOS_PATH') + dimos_path = os.environ.get("DIMOS_PATH") if dimos_path: return dimos_path # Get the current user's username - user = os.environ.get('USER', os.path.basename(os.path.expanduser('~'))) + user = os.environ.get("USER", os.path.basename(os.path.expanduser("~"))) return f"/home/{user}/dimos" class NavigateWithText(AbstractRobotSkill): """ A skill that queries an existing semantic map using natural language or tries to navigate to an object in view. - + This skill first attempts to locate an object in the robot's camera view using vision. - If the object is found, it navigates to it. If not, it falls back to querying the - semantic map for a location matching the description. For example, "Find the kitchen" - will first look for a kitchen in view, then check the semantic map coordinates where + If the object is found, it navigates to it. If not, it falls back to querying the + semantic map for a location matching the description. For example, "Find the kitchen" + will first look for a kitchen in view, then check the semantic map coordinates where a kitchen was previously observed. CALL THIS SKILL FOR ONE SUBJECT AT A TIME. For example: "Go to the person wearing a blue shirt in the living room", you should call this skill twice, once for the person wearing a blue shirt and once for the living room. """ - + query: str = Field("", description="Text query to search for in the semantic map") limit: int = Field(1, description="Maximum number of results to return") - distance: float = Field(1.0, description="Desired distance to maintain from object in meters") - timeout: float = Field(40.0, description="Maximum time to spend navigating in seconds") - similarity_threshold: float = Field(0.25, description="Minimum similarity score required for semantic map results to be considered valid") - + distance: float = Field( + 1.0, description="Desired distance to maintain from object in meters" + ) + timeout: float = Field( + 40.0, description="Maximum time to spend navigating in seconds" + ) + similarity_threshold: float = Field( + 0.25, + description="Minimum similarity score required for semantic map results to be considered valid", + ) + def __init__(self, robot=None, **data): """ Initialize the Navigate skill. - + Args: robot: The robot instance **data: Additional data for configuration @@ -96,80 +94,120 @@ def __init__(self, robot=None, **data): self._stop_event = threading.Event() self._spatial_memory = None self._scheduler = get_scheduler() # Use the shared DiMOS thread pool - self._navigation_disposable = None # Disposable returned by scheduler.schedule() + self._navigation_disposable = ( + None # Disposable returned by scheduler.schedule() + ) self._tracking_subscriber = None # For object tracking - + def _navigate_to_object(self): """ Helper method that attempts to navigate to an object visible in the camera view. - + Returns: dict: Result dictionary with success status and details """ # Stop any existing operation self._stop_event.clear() - + try: - logger.warning(f"Attempting to navigate to visible object: {self.query} with desired distance {self.distance}m, timeout {self.timeout} seconds...") - + logger.warning( + f"Attempting to navigate to visible object: {self.query} with desired distance {self.distance}m, timeout {self.timeout} seconds..." + ) + # Try to get a bounding box from Qwen - only try once bbox = None try: # Capture a single frame from the video stream frame = self._robot.get_ros_video_stream().pipe(ops.take(1)).run() # Use the frame-based function - bbox, object_size = get_bbox_from_qwen_frame(frame, object_name=self.query) + bbox, object_size = get_bbox_from_qwen_frame( + frame, object_name=self.query + ) except Exception as e: logger.error(f"Error querying Qwen: {e}") - return {"success": False, "failure_reason": "Perception", "error": f"Could not detect {self.query} in view: {e}"} - + return { + "success": False, + "failure_reason": "Perception", + "error": f"Could not detect {self.query} in view: {e}", + } + if bbox is None or self._stop_event.is_set(): logger.error(f"Failed to get bounding box for {self.query}") - return {"success": False, "failure_reason": "Perception", "error": f"Could not find {self.query} in view"} - + return { + "success": False, + "failure_reason": "Perception", + "error": f"Could not find {self.query} in view", + } + logger.info(f"Found {self.query} at {bbox} with size {object_size}") - + # Start the object tracker with the detected bbox self._robot.object_tracker.track(bbox, frame=frame) - + # Get the first tracking data with valid distance and angle start_time = time.time() target_acquired = False goal_x_robot = 0 goal_y_robot = 0 goal_angle = 0 - - while time.time() - start_time < 10.0 and not self._stop_event.is_set() and not target_acquired: + + while ( + time.time() - start_time < 10.0 + and not self._stop_event.is_set() + and not target_acquired + ): # Get the latest tracking data - tracking_data = self._robot.object_tracking_stream.pipe(ops.take(1)).run() - - if tracking_data and tracking_data.get("targets") and tracking_data["targets"]: + tracking_data = self._robot.object_tracking_stream.pipe( + ops.take(1) + ).run() + + if ( + tracking_data + and tracking_data.get("targets") + and tracking_data["targets"] + ): target = tracking_data["targets"][0] - + if "distance" in target and "angle" in target: # Convert target distance and angle to xy coordinates in robot frame - goal_distance = target["distance"] - self.distance # Subtract desired distance to stop short + goal_distance = ( + target["distance"] - self.distance + ) # Subtract desired distance to stop short goal_angle = -target["angle"] - logger.info(f"Target distance: {goal_distance}, Target angle: {goal_angle}") - - goal_x_robot, goal_y_robot = distance_angle_to_goal_xy(goal_distance, goal_angle) + logger.info( + f"Target distance: {goal_distance}, Target angle: {goal_angle}" + ) + + goal_x_robot, goal_y_robot = distance_angle_to_goal_xy( + goal_distance, goal_angle + ) target_acquired = True break else: - logger.warning(f"No valid target tracking data found. target: {target}") + logger.warning( + f"No valid target tracking data found. target: {target}" + ) else: - logger.warning(f"No valid target tracking data found. tracking_data: {tracking_data}") - + logger.warning( + f"No valid target tracking data found. tracking_data: {tracking_data}" + ) + time.sleep(0.1) - + if not target_acquired: logger.error("Failed to acquire valid target tracking data") - return {"success": False, "failure_reason": "Perception", "error": "Failed to track object"} - - logger.info(f"Navigating to target at local coordinates: ({goal_x_robot:.2f}, {goal_y_robot:.2f}), angle: {goal_angle:.2f}") - + return { + "success": False, + "failure_reason": "Perception", + "error": "Failed to track object", + } + + logger.info( + f"Navigating to target at local coordinates: ({goal_x_robot:.2f}, {goal_y_robot:.2f}), angle: {goal_angle:.2f}" + ) + # Use navigate_to_goal_local instead of directly controlling the local planner success = navigate_to_goal_local( robot=self._robot, @@ -177,104 +215,129 @@ def _navigate_to_object(self): goal_theta=goal_angle, distance=0.0, # We already accounted for desired distance timeout=self.timeout, - stop_event=self._stop_event + stop_event=self._stop_event, ) - + if success: logger.info(f"Successfully navigated to {self.query}") return { "success": True, "failure_reason": None, "query": self.query, - "message": f"Successfully navigated to {self.query} in view" + "message": f"Successfully navigated to {self.query} in view", } else: - logger.warning(f"Failed to reach {self.query} within timeout or operation was stopped") + logger.warning( + f"Failed to reach {self.query} within timeout or operation was stopped" + ) return { - "success": False, + "success": False, "failure_reason": "Navigation", - "error": f"Failed to reach {self.query} within timeout" + "error": f"Failed to reach {self.query} within timeout", } - + except Exception as e: logger.error(f"Error in navigate to object: {e}") - return {"success": False, "failure_reason": "Code Error", "error": f"Error: {e}"} + return { + "success": False, + "failure_reason": "Code Error", + "error": f"Error: {e}", + } finally: # Clean up self._robot.ros_control.stop() self._robot.object_tracker.cleanup() - + def _navigate_using_semantic_map(self): """ Helper method that attempts to navigate using the semantic map query. - + Returns: dict: Result dictionary with success status and details """ logger.info(f"Querying semantic map for: '{self.query}'") - + try: self._spatial_memory = self._robot.get_spatial_memory() - + # Run the query results = self._spatial_memory.query_by_text(self.query, limit=self.limit) - + if not results: logger.warning(f"No results found for query: '{self.query}'") return { "success": False, "query": self.query, - "error": "No matching location found in semantic map" + "error": "No matching location found in semantic map", } - + # Get the best match best_match = results[0] - metadata = best_match.get('metadata', {}) - + metadata = best_match.get("metadata", {}) + if isinstance(metadata, list) and metadata: metadata = metadata[0] - + # Extract coordinates from metadata - if isinstance(metadata, dict) and 'pos_x' in metadata and 'pos_y' in metadata and 'rot_z' in metadata: - pos_x = metadata.get('pos_x', 0) - pos_y = metadata.get('pos_y', 0) - theta = metadata.get('rot_z', 0) - + if ( + isinstance(metadata, dict) + and "pos_x" in metadata + and "pos_y" in metadata + and "rot_z" in metadata + ): + pos_x = metadata.get("pos_x", 0) + pos_y = metadata.get("pos_y", 0) + theta = metadata.get("rot_z", 0) + # Calculate similarity score (distance is inverse of similarity) - similarity = 1.0 - (best_match.get('distance', 0) if best_match.get('distance') is not None else 0) - - logger.info(f"Found match for '{self.query}' at ({pos_x:.2f}, {pos_y:.2f}, rotation {theta:.2f}) with similarity: {similarity:.4f}") - + similarity = 1.0 - ( + best_match.get("distance", 0) + if best_match.get("distance") is not None + else 0 + ) + + logger.info( + f"Found match for '{self.query}' at ({pos_x:.2f}, {pos_y:.2f}, rotation {theta:.2f}) with similarity: {similarity:.4f}" + ) + # Check if similarity is below the threshold if similarity < self.similarity_threshold: - logger.warning(f"Match found but similarity score ({similarity:.4f}) is below threshold ({self.similarity_threshold})") + logger.warning( + f"Match found but similarity score ({similarity:.4f}) is below threshold ({self.similarity_threshold})" + ) return { "success": False, "query": self.query, "position": (pos_x, pos_y), "rotation": theta, "similarity": similarity, - "error": f"Match found but similarity score ({similarity:.4f}) is below threshold ({self.similarity_threshold})" + "error": f"Match found but similarity score ({similarity:.4f}) is below threshold ({self.similarity_threshold})", } - + # Reset the stop event before starting navigation self._stop_event.clear() - + # The scheduler approach isn't working, switch to direct threading # Define a navigation function that will run on a separate thread def run_navigation(): skill_library = self._robot.get_skills() self.register_as_running("Navigate", skill_library) - + try: - logger.info(f"Starting navigation to ({pos_x:.2f}, {pos_y:.2f}) with rotation {theta:.2f}") + logger.info( + f"Starting navigation to ({pos_x:.2f}, {pos_y:.2f}) with rotation {theta:.2f}" + ) # Pass our stop_event to allow cancellation result = False try: - result = self._robot.global_planner.set_goal((pos_x, pos_y), goal_theta = theta, stop_event=self._stop_event) + result = self._robot.global_planner.set_goal( + (pos_x, pos_y), + goal_theta=theta, + stop_event=self._stop_event, + ) except Exception as e: logger.error(f"Error calling global_planner.set_goal: {e}") - + if result: logger.info("Navigation completed successfully") else: @@ -285,13 +348,13 @@ def run_navigation(): return False finally: self.stop() - + # Cancel any existing navigation before starting a new one # Signal stop to any running navigation self._stop_event.set() # Clear stop event for new navigation self._stop_event.clear() - + # Run the navigation in the main thread run_navigation() @@ -301,125 +364,136 @@ def run_navigation(): "position": (pos_x, pos_y), "rotation": theta, "similarity": similarity, - "metadata": metadata + "metadata": metadata, } else: - logger.warning(f"No valid position data found for query: '{self.query}'") + logger.warning( + f"No valid position data found for query: '{self.query}'" + ) return { "success": False, "query": self.query, - "error": "No valid position data found in semantic map" + "error": "No valid position data found in semantic map", } except Exception as e: logger.error(f"Error in semantic map navigation: {e}") return {"success": False, "error": f"Semantic map error: {e}"} - + def __call__(self): """ First attempts to navigate to an object in view, then falls back to querying the semantic map. - + Returns: A dictionary with the result of the navigation attempt """ super().__call__() - + if not self.query: error_msg = "No query provided to Navigate skill" logger.error(error_msg) return {"success": False, "error": error_msg} - + # First, try to find and navigate to the object in camera view - logger.info(f"First attempting to find and navigate to visible object: '{self.query}'") + logger.info( + f"First attempting to find and navigate to visible object: '{self.query}'" + ) object_result = self._navigate_to_object() - - if object_result and object_result['success']: + + if object_result and object_result["success"]: logger.info(f"Successfully navigated to {self.query} in view") return object_result - - elif object_result and object_result['failure_reason'] == "Navigation": - logger.info(f"Failed to navigate to {self.query} in view: {object_result.get('error', 'Unknown error')}") + + elif object_result and object_result["failure_reason"] == "Navigation": + logger.info( + f"Failed to navigate to {self.query} in view: {object_result.get('error', 'Unknown error')}" + ) return object_result # If object navigation failed, fall back to semantic map - logger.info(f"Object not found in view. Falling back to semantic map query for: '{self.query}'") - - return self._navigate_using_semantic_map() + logger.info( + f"Object not found in view. Falling back to semantic map query for: '{self.query}'" + ) + return self._navigate_using_semantic_map() def stop(self): """ Stop the navigation skill and clean up resources. - + Returns: A message indicating whether the navigation was stopped successfully """ logger.info("Stopping Navigate skill") - + # Signal any running processes to stop via the shared event self._stop_event.set() - + skill_library = self._robot.get_skills() self.unregister_as_running("Navigate", skill_library) - + # Dispose of any existing navigation task - if hasattr(self, '_navigation_disposable') and self._navigation_disposable: + if hasattr(self, "_navigation_disposable") and self._navigation_disposable: logger.info("Disposing navigation task") try: self._navigation_disposable.dispose() except Exception as e: logger.error(f"Error disposing navigation task: {e}") self._navigation_disposable = None - + # Clean up spatial memory if it exists - if hasattr(self, '_spatial_memory') and self._spatial_memory is not None: + if hasattr(self, "_spatial_memory") and self._spatial_memory is not None: logger.info("Cleaning up spatial memory") self._spatial_memory.cleanup() self._spatial_memory = None - + # Stop robot motion self._robot.ros_control.stop() - + return "Navigate skill stopped successfully." + class GetPose(AbstractRobotSkill): """ A skill that returns the current position and orientation of the robot. This skill is useful for getting the current pose of the robot in the map frame. You call this skill if you want to remember a location, for example, "remember this is where my favorite chair is" and then - call this skill to get the position and rotation of approximately where the chair is. You can then use + call this skill to get the position and rotation of approximately where the chair is. You can then use the position to navigate to the chair. - + When location_name is provided, this skill will also remember the current location with that name, allowing you to navigate back to it later using the Navigate skill. """ - - location_name: str = Field("", description="Optional name to assign to this location (e.g., 'kitchen', 'office')") - + + location_name: str = Field( + "", + description="Optional name to assign to this location (e.g., 'kitchen', 'office')", + ) + def __init__(self, robot=None, **data): """ Initialize the GetPose skill. - + Args: robot: The robot instance **data: Additional data for configuration """ super().__init__(robot=robot, **data) - + def __call__(self): """ Get the current pose of the robot. - + Returns: A dictionary containing the position and rotation of the robot """ super().__call__() - + if self._robot is None: error_msg = "No robot instance provided to GetPose skill" logger.error(error_msg) return {"success": False, "error": error_msg} - + try: # Get the current pose using the robot's get_pose method position, rotation = self._robot.get_pose() @@ -430,27 +504,25 @@ def __call__(self): "position": { "x": position[0], "y": position[1], - "z": position[2] if len(position) > 2 else 0.0 + "z": position[2] if len(position) > 2 else 0.0, }, "rotation": { "roll": rotation[0], "pitch": rotation[1], - "yaw": rotation[2] - } + "yaw": rotation[2], + }, } - + # If location_name is provided, remember this location if self.location_name: # Get the spatial memory instance spatial_memory = self._robot.get_spatial_memory() - + # Create a RobotLocation object location = RobotLocation( - name=self.location_name, - position=position, - rotation=rotation + name=self.location_name, position=position, rotation=rotation ) - + # Add to spatial memory if spatial_memory.add_robot_location(location): result["location_saved"] = True @@ -459,78 +531,86 @@ def __call__(self): else: result["location_saved"] = False logger.error(f"Failed to save location '{self.location_name}'") - + return result except Exception as e: error_msg = f"Error getting robot pose: {e}" logger.error(error_msg) return {"success": False, "error": error_msg} - + class NavigateToGoal(AbstractRobotSkill): """ A skill that navigates the robot to a specified position and orientation. - + This skill uses the global planner to generate a path to the target position and then uses navigate_path_local to follow that path, achieving the desired orientation at the goal position. """ - - position: Tuple[float, float] = Field((0.0, 0.0), description="Target position (x, y) in map frame") - rotation: Optional[float] = Field(None, description="Target orientation (yaw) in radians") - frame: str = Field("map", description="Reference frame for the position and rotation") - timeout: float = Field(120.0, description="Maximum time (in seconds) allowed for navigation") - + + position: Tuple[float, float] = Field( + (0.0, 0.0), description="Target position (x, y) in map frame" + ) + rotation: Optional[float] = Field( + None, description="Target orientation (yaw) in radians" + ) + frame: str = Field( + "map", description="Reference frame for the position and rotation" + ) + timeout: float = Field( + 120.0, description="Maximum time (in seconds) allowed for navigation" + ) + def __init__(self, robot=None, **data): """ Initialize the NavigateToGoal skill. - + Args: robot: The robot instance **data: Additional data for configuration """ super().__init__(robot=robot, **data) self._stop_event = threading.Event() - + def __call__(self): """ Navigate to the specified goal position and orientation. - + Returns: A dictionary containing the result of the navigation attempt """ super().__call__() - + if self._robot is None: error_msg = "No robot instance provided to NavigateToGoal skill" logger.error(error_msg) return {"success": False, "error": error_msg} - + # Reset stop event to make sure we don't immediately abort self._stop_event.clear() skill_library = self._robot.get_skills() self.register_as_running("NavigateToGoal", skill_library) - - logger.info(f"Starting navigation to position=({self.position[0]:.2f}, {self.position[1]:.2f}) " - f"with rotation={self.rotation if self.rotation is not None else 'None'} " - f"in frame={self.frame}") - + + logger.info( + f"Starting navigation to position=({self.position[0]:.2f}, {self.position[1]:.2f}) " + f"with rotation={self.rotation if self.rotation is not None else 'None'} " + f"in frame={self.frame}" + ) + try: # Use the global planner to set the goal and generate a path result = self._robot.global_planner.set_goal( - self.position, - goal_theta=self.rotation, - stop_event=self._stop_event + self.position, goal_theta=self.rotation, stop_event=self._stop_event ) - + if result: logger.info("Navigation completed successfully") return { "success": True, "position": self.position, "rotation": self.rotation, - "message": "Goal reached successfully" + "message": "Goal reached successfully", } else: logger.warning("Navigation did not complete successfully") @@ -538,9 +618,9 @@ def __call__(self): "success": False, "position": self.position, "rotation": self.rotation, - "message": "Goal could not be reached" + "message": "Goal could not be reached", } - + except Exception as e: error_msg = f"Error during navigation: {e}" logger.error(error_msg) @@ -548,16 +628,15 @@ def __call__(self): "success": False, "position": self.position, "rotation": self.rotation, - "error": error_msg + "error": error_msg, } finally: self.stop() - - + def stop(self): """ Stop the navigation. - + Returns: A message indicating that the navigation was stopped """ diff --git a/dimos/skills/observe_stream.py b/dimos/skills/observe_stream.py index e0e12e0b9f..622381f7c1 100644 --- a/dimos/skills/observe_stream.py +++ b/dimos/skills/observe_stream.py @@ -15,14 +15,13 @@ """ Observer skill for an agent. -This module provides a skill that periodically sends images from any +This module provides a skill that periodically sends images from any Robot Data Stream to an agent for inference. """ -import logging import time import threading -from typing import Optional, Any, Dict +from typing import Optional import base64 import cv2 import reactivex as rx @@ -36,24 +35,34 @@ logger = setup_logger("dimos.skills.observe_stream") + class ObserveStream(AbstractRobotSkill): """ A skill that periodically Observes a Robot Video Stream and sends images to current instance of an agent for context. - + This skill runs in a non-halting manner, allowing other skills to run concurrently. - It can be used for continuous perception and passive monitoring, such as waiting for a person to enter a room + It can be used for continuous perception and passive monitoring, such as waiting for a person to enter a room or to monitor changes in the environment. """ - - timestep: float = Field(60.0, description="Time interval in seconds between observation queries") - query_text: str = Field("What do you see in this image? Alert me if you see any people or important changes.", - description="Query text to send to agent with each image") - max_duration: float = Field(0.0, description="Maximum duration to run the observer in seconds (0 for indefinite)") - - def __init__(self, robot=None, agent: Optional[LLMAgent] = None, video_stream = None, **data): + + timestep: float = Field( + 60.0, description="Time interval in seconds between observation queries" + ) + query_text: str = Field( + "What do you see in this image? Alert me if you see any people or important changes.", + description="Query text to send to agent with each image", + ) + max_duration: float = Field( + 0.0, + description="Maximum duration to run the observer in seconds (0 for indefinite)", + ) + + def __init__( + self, robot=None, agent: Optional[LLMAgent] = None, video_stream=None, **data + ): """ Initialize the ObserveStream skill. - + Args: robot: The robot instance agent: The agent to send queries to @@ -72,54 +81,56 @@ def __init__(self, robot=None, agent: Optional[LLMAgent] = None, video_stream = if self._video_stream is None: logger.error("Failed to get video stream from robot") return - + def __call__(self): """ Start the observing process in a separate thread using the threadpool. - + Returns: A message indicating the observer has started """ super().__call__() - + if self._agent is None: error_msg = "No agent provided to ObserveStream" logger.error(error_msg) return error_msg - + if self._robot is None: error_msg = "No robot instance provided to ObserveStream" logger.error(error_msg) return error_msg - + self.stop() - + self._stop_event.clear() - + # Initialize start time for duration tracking self._start_time = time.time() - - interval_observable = rx.interval(self.timestep, scheduler=self._scheduler).pipe( - ops.take_while(lambda _: not self._stop_event.is_set()) - ) - + + interval_observable = rx.interval( + self.timestep, scheduler=self._scheduler + ).pipe(ops.take_while(lambda _: not self._stop_event.is_set())) + # Subscribe to the interval observable self._subscription = interval_observable.subscribe( on_next=self._monitor_iteration, on_error=lambda e: logger.error(f"Error in monitor observable: {e}"), - on_completed=lambda: logger.info("Monitor observable completed") + on_completed=lambda: logger.info("Monitor observable completed"), ) - + skill_library = self._robot.get_skills() self.register_as_running("ObserveStream", skill_library, self._subscription) - - logger.info(f"Observer started with timestep={self.timestep}s, query='{self.query_text}'") + + logger.info( + f"Observer started with timestep={self.timestep}s, query='{self.query_text}'" + ) return f"Observer started with timestep={self.timestep}s, query='{self.query_text}'" - + def _monitor_iteration(self, iteration): """ Execute a single observer iteration. - + Args: iteration: The iteration number (provided by rx.interval) """ @@ -127,94 +138,98 @@ def _monitor_iteration(self, iteration): if self.max_duration > 0: elapsed_time = time.time() - self._start_time if elapsed_time > self.max_duration: - logger.info(f"Observer reached maximum duration of {self.max_duration}s") + logger.info( + f"Observer reached maximum duration of {self.max_duration}s" + ) self.stop() return - + logger.info(f"Observer iteration {iteration} executing") - + # Get a frame from the video stream frame = self._get_frame_from_stream() - + if frame is not None: self._process_frame(frame) else: logger.warning("Failed to get frame from video stream") - + except Exception as e: logger.error(f"Error in monitor iteration {iteration}: {e}") - + def _get_frame_from_stream(self): """ Get a single frame from the video stream. - + Args: video_stream: The ROS video stream observable - + Returns: A single frame from the video stream, or None if no frame is available """ frame = None - + frame_subject = rx.subject.Subject() - + subscription = self._video_stream.pipe( ops.take(1) # Take just one frame ).subscribe( on_next=lambda x: frame_subject.on_next(x), - on_error=lambda e: logger.error(f"Error getting frame: {e}") + on_error=lambda e: logger.error(f"Error getting frame: {e}"), ) - + timeout = 5.0 # 5 seconds timeout start_time = time.time() - + def on_frame(f): nonlocal frame frame = f - + frame_subject.subscribe(on_frame) - + while frame is None and time.time() - start_time < timeout: time.sleep(0.1) - + subscription.dispose() - + return frame - + def _process_frame(self, frame): """ Process a frame with the Claude agent. - + Args: frame: The video frame to process """ logger.info("Processing frame with Claude agent") - + try: - _, buffer = cv2.imencode('.jpg', frame) - base64_image = base64.b64encode(buffer).decode('utf-8') - + _, buffer = cv2.imencode(".jpg", frame) + base64_image = base64.b64encode(buffer).decode("utf-8") + observable = self._agent.run_observable_query( f"{self.query_text}\n\nHere is the current camera view from the robot:", base64_image=base64_image, thinking_budget_tokens=0, ) - + # Simple subscription to make sure the query executes # The actual response content isn't important observable.subscribe( - on_next=lambda x: logger.info(f"Got response from _observable_query: {x}"), + on_next=lambda x: logger.info( + f"Got response from _observable_query: {x}" + ), on_error=lambda e: logger.error(f"Error: {e}"), - on_completed=lambda: logger.info("ObserveStream query completed") + on_completed=lambda: logger.info("ObserveStream query completed"), ) - + except Exception as e: logger.error(f"Error processing frame with agent: {e}") - + def stop(self): """ Stop the ObserveStream monitoring process. - + Returns: A message indicating the observer has stopped """ @@ -223,6 +238,6 @@ def stop(self): self._stop_event.set() self._subscription.dispose() self._subscription = None - + return "Observer stopped" return "Observer was not running" diff --git a/dimos/skills/rest/rest.py b/dimos/skills/rest/rest.py index a88429fba2..d052c3dd1b 100644 --- a/dimos/skills/rest/rest.py +++ b/dimos/skills/rest/rest.py @@ -14,11 +14,12 @@ import requests from dimos.skills.skills import AbstractSkill -from typing import Optional, Dict, Any from pydantic import Field import logging + logger = logging.getLogger(__name__) + class GenericRestSkill(AbstractSkill): """Performs a configurable REST API call. @@ -29,9 +30,10 @@ class GenericRestSkill(AbstractSkill): url: The target URL for the API call. method: The HTTP method (e.g., 'GET', 'POST'). Case-insensitive. timeout: Request timeout in seconds. - """ + """ + # TODO: Add query parameters, request body data (form-encoded or JSON), and headers. - #, query + # , query # parameters, request body data (form-encoded or JSON), and headers. # params: Optional dictionary of URL query parameters. # data: Optional dictionary for form-encoded request body data. @@ -46,7 +48,6 @@ class GenericRestSkill(AbstractSkill): # json_payload: Optional[Dict[str, Any]] = Field(default=None, alias="json", description="JSON request body.") # headers: Optional[Dict[str, str]] = Field(default=None, description="HTTP headers.") - def __call__(self) -> str: """Executes the configured REST API call. @@ -68,27 +69,35 @@ def __call__(self) -> str: try: logger.debug( f"Executing {self.method.upper()} request to {self.url} " - f"with timeout={self.timeout}" # , params={self.params}, " + f"with timeout={self.timeout}" # , params={self.params}, " # f"data={self.data}, json={self.json_payload}, headers={self.headers}" ) response = requests.request( - method=self.method.upper(), # Normalize method to uppercase + method=self.method.upper(), # Normalize method to uppercase url=self.url, # params=self.params, # data=self.data, # json=self.json_payload, # Use the attribute name defined in Pydantic # headers=self.headers, - timeout=self.timeout + timeout=self.timeout, ) response.raise_for_status() # Raises HTTPError for bad responses (4xx or 5xx) - logger.debug(f"Request successful. Status: {response.status_code}, Response: {response.text[:100]}...") - return response.text # Return text content directly + logger.debug( + f"Request successful. Status: {response.status_code}, Response: {response.text[:100]}..." + ) + return response.text # Return text content directly except requests.exceptions.HTTPError as http_err: - logger.error(f"HTTP error occurred: {http_err} - Status Code: {http_err.response.status_code}") + logger.error( + f"HTTP error occurred: {http_err} - Status Code: {http_err.response.status_code}" + ) return f"HTTP error making {self.method.upper()} request to {self.url}: {http_err.response.status_code} {http_err.response.reason}" except requests.exceptions.RequestException as req_err: logger.error(f"Request exception occurred: {req_err}") - return f"Error making {self.method.upper()} request to {self.url}: {req_err}" + return ( + f"Error making {self.method.upper()} request to {self.url}: {req_err}" + ) except Exception as e: - logger.exception(f"An unexpected error occurred: {e}") # Log the full traceback + logger.exception( + f"An unexpected error occurred: {e}" + ) # Log the full traceback return f"An unexpected error occurred: {type(e).__name__}: {e}" diff --git a/dimos/skills/skills.py b/dimos/skills/skills.py index 8ea7262229..9772b86b12 100644 --- a/dimos/skills/skills.py +++ b/dimos/skills/skills.py @@ -26,8 +26,8 @@ # region SkillLibrary -class SkillLibrary: +class SkillLibrary: # ==== Flat Skill Library ==== def __init__(self): @@ -36,7 +36,7 @@ def __init__(self): self._running_skills = {} # {skill_name: (instance, subscription)} self.init() - + def init(self): # Collect all skills from the parent class and update self.skills self.refresh_class_skills() @@ -46,28 +46,32 @@ def init(self): def get_class_skills(self) -> list["AbstractSkill"]: """Extract all AbstractSkill subclasses from a class. - + Returns: List of skill classes found within the class """ skills = [] - + # Loop through all attributes of the class for attr_name in dir(self.__class__): # Skip special/dunder attributes - if attr_name.startswith('__'): + if attr_name.startswith("__"): continue - + try: attr = getattr(self.__class__, attr_name) - + # Check if it's a class and inherits from AbstractSkill - if isinstance(attr, type) and issubclass(attr, AbstractSkill) and attr is not AbstractSkill: + if ( + isinstance(attr, type) + and issubclass(attr, AbstractSkill) + and attr is not AbstractSkill + ): skills.append(attr) except (AttributeError, TypeError): # Skip attributes that can't be accessed or aren't classes continue - + return skills def refresh_class_skills(self): @@ -97,24 +101,26 @@ def __len__(self) -> int: def __contains__(self, skill: "AbstractSkill") -> bool: return skill in self.registered_skills - + def __getitem__(self, index): return self.registered_skills[index] - + # ==== Calling a Function ==== - _instances: dict[str, dict] = {} + _instances: dict[str, dict] = {} def create_instance(self, name, **kwargs): # Key based only on the name key = name - + print(f"Preparing to create instance with name: {name} and args: {kwargs}") if key not in self._instances: # Instead of creating an instance, store the args for later use self._instances[key] = kwargs - print(f"Stored args for later instance creation: {name} with args: {kwargs}") + print( + f"Stored args for later instance creation: {name} with args: {kwargs}" + ) def call(self, name, **args): # Get the stored args if available; otherwise, use an empty dict @@ -135,26 +141,31 @@ def call(self, name, **args): # Initialize the instance with the merged arguments instance = skill_class(**complete_args) - print(f"Instance created and function called for: {name} with args: {complete_args}") - + print( + f"Instance created and function called for: {name} with args: {complete_args}" + ) + # Call the instance directly return instance() - + # ==== Tools ==== def get_tools(self) -> Any: - tools_json = self.get_list_of_skills_as_json(list_of_skills=self.registered_skills) + tools_json = self.get_list_of_skills_as_json( + list_of_skills=self.registered_skills + ) # print(f"{Colors.YELLOW_PRINT_COLOR}Tools JSON: {tools_json}{Colors.RESET_COLOR}") return tools_json - - def get_list_of_skills_as_json(self, list_of_skills: list["AbstractSkill"]) -> list[str]: + + def get_list_of_skills_as_json( + self, list_of_skills: list["AbstractSkill"] + ) -> list[str]: return list(map(pydantic_function_tool, list_of_skills)) - - + def register_running_skill(self, name: str, instance: Any, subscription=None): """ Register a running skill with its subscription. - + Args: name: Name of the skill (will be converted to lowercase) instance: Instance of the running skill @@ -163,14 +174,14 @@ def register_running_skill(self, name: str, instance: Any, subscription=None): name = name.lower() self._running_skills[name] = (instance, subscription) logger.info(f"Registered running skill: {name}") - + def unregister_running_skill(self, name: str): """ Unregister a running skill. - + Args: name: Name of the skill to remove (will be converted to lowercase) - + Returns: True if the skill was found and removed, False otherwise """ @@ -180,49 +191,55 @@ def unregister_running_skill(self, name: str): logger.info(f"Unregistered running skill: {name}") return True return False - + def get_running_skills(self): """ Get all running skills. - + Returns: A dictionary of running skill names and their (instance, subscription) tuples """ return self._running_skills.copy() - + def terminate_skill(self, name: str): """ Terminate a running skill. - + Args: name: Name of the skill to terminate (will be converted to lowercase) - + Returns: A message indicating whether the skill was successfully terminated """ name = name.lower() if name in self._running_skills: instance, subscription = self._running_skills[name] - + try: # Call the stop method if it exists - if hasattr(instance, 'stop') and callable(instance.stop): + if hasattr(instance, "stop") and callable(instance.stop): result = instance.stop() logger.info(f"Stopped skill: {name}") else: logger.warning(f"Skill {name} does not have a stop method") - + # Also dispose the subscription if it exists - if subscription is not None and hasattr(subscription, 'dispose') and callable(subscription.dispose): + if ( + subscription is not None + and hasattr(subscription, "dispose") + and callable(subscription.dispose) + ): subscription.dispose() logger.info(f"Disposed subscription for skill: {name}") elif subscription is not None: - logger.warning(f"Skill {name} has a subscription but it's not disposable") - + logger.warning( + f"Skill {name} has a subscription but it's not disposable" + ) + # unregister the skill self.unregister_running_skill(name) return f"Successfully terminated skill: {name}" - + except Exception as e: error_msg = f"Error terminating skill {name}: {e}" logger.error(error_msg) @@ -232,12 +249,13 @@ def terminate_skill(self, name: str): else: return f"No running skill found with name: {name}" + # endregion SkillLibrary # region AbstractSkill -class AbstractSkill(BaseModel): +class AbstractSkill(BaseModel): def __init__(self, *args, **kwargs): print("Initializing AbstractSkill Class") super().__init__(*args, **kwargs) @@ -247,23 +265,24 @@ def __init__(self, *args, **kwargs): def clone(self) -> "AbstractSkill": return AbstractSkill() - - - def register_as_running(self, name: str, skill_library: SkillLibrary, subscription=None): + + def register_as_running( + self, name: str, skill_library: SkillLibrary, subscription=None + ): """ Register this skill as running in the skill library. - + Args: name: Name of the skill (will be converted to lowercase) skill_library: The skill library to register with subscription: Optional subscription associated with the skill """ skill_library.register_running_skill(name, self, subscription) - + def unregister_as_running(self, name: str, skill_library: SkillLibrary): """ Unregister this skill from the skill library. - + Args: name: Name of the skill to remove (will be converted to lowercase) skill_library: The skill library to unregister from @@ -272,37 +291,43 @@ def unregister_as_running(self, name: str, skill_library: SkillLibrary): # ==== Tools ==== def get_tools(self) -> Any: - tools_json = self.get_list_of_skills_as_json(list_of_skills=self._list_of_skills) + tools_json = self.get_list_of_skills_as_json( + list_of_skills=self._list_of_skills + ) # print(f"Tools JSON: {tools_json}") return tools_json - def get_list_of_skills_as_json(self, list_of_skills: list["AbstractSkill"]) -> list[str]: + def get_list_of_skills_as_json( + self, list_of_skills: list["AbstractSkill"] + ) -> list[str]: return list(map(pydantic_function_tool, list_of_skills)) + # endregion AbstractSkill # region Abstract Robot Skill -from typing import Optional, TYPE_CHECKING +from typing import TYPE_CHECKING + if TYPE_CHECKING: from dimos.robot.robot import Robot else: - Robot = 'Robot' + Robot = "Robot" -class AbstractRobotSkill(AbstractSkill): +class AbstractRobotSkill(AbstractSkill): _robot: Robot = None - + def __init__(self, *args, robot: Optional[Robot] = None, **kwargs): super().__init__(*args, **kwargs) self._robot = robot - print(f"{Colors.BLUE_PRINT_COLOR}" - f"Robot Skill Initialized with Robot: {robot}" - f"{Colors.RESET_COLOR}") + print( + f"{Colors.BLUE_PRINT_COLOR}Robot Skill Initialized with Robot: {robot}{Colors.RESET_COLOR}" + ) def set_robot(self, robot: Robot) -> None: """Set the robot reference for this skills instance. - + Args: robot: The robot instance to associate with these skills. """ @@ -313,8 +338,12 @@ def __call__(self): raise RuntimeError( f"{Colors.RED_PRINT_COLOR}" f"No Robot instance provided to Robot Skill: {self.__class__.__name__}" - f"{Colors.RESET_COLOR}") + f"{Colors.RESET_COLOR}" + ) else: - print(f"{Colors.BLUE_PRINT_COLOR}Robot Instance provided to Robot Skill: {self.__class__.__name__}{Colors.RESET_COLOR}") - + print( + f"{Colors.BLUE_PRINT_COLOR}Robot Instance provided to Robot Skill: {self.__class__.__name__}{Colors.RESET_COLOR}" + ) + + # endregion Abstract Robot Skill diff --git a/dimos/skills/speak.py b/dimos/skills/speak.py index 4e3bbbac9b..54edfa3d25 100644 --- a/dimos/skills/speak.py +++ b/dimos/skills/speak.py @@ -1,6 +1,4 @@ from dimos.skills.skills import AbstractSkill -from dimos.stream.audio.pipelines import tts -from dimos.stream.audio.node_output import SounddeviceAudioOutput from pydantic import Field from reactivex import Subject from typing import Optional, Any, List @@ -23,18 +21,18 @@ def _process_audio_queue(): """Background thread to process audio requests sequentially""" global _queue_running - + while _queue_running: try: # Get the next queued audio task with a timeout task = _audio_queue.get(timeout=1.0) if task is None: # Sentinel value to stop the thread break - + # Execute the task (which is a function to be called) task() _audio_queue.task_done() - + except queue.Empty: # No tasks in queue, just continue waiting continue @@ -46,13 +44,11 @@ def _process_audio_queue(): def start_audio_queue_processor(): """Start the background thread for processing audio requests""" global _queue_processor_thread, _queue_running - + if _queue_processor_thread is None or not _queue_processor_thread.is_alive(): _queue_running = True _queue_processor_thread = threading.Thread( - target=_process_audio_queue, - daemon=True, - name="AudioQueueProcessor" + target=_process_audio_queue, daemon=True, name="AudioQueueProcessor" ) _queue_processor_thread.start() logger.info("Started audio queue processor thread") @@ -61,6 +57,7 @@ def start_audio_queue_processor(): # Start the queue processor when module is imported start_audio_queue_processor() + class Speak(AbstractSkill): """Speak text out loud to humans nearby or to other robots.""" @@ -77,10 +74,10 @@ def __call__(self): if not self._tts_node: logger.error("No TTS node provided to Speak skill") return "Error: No TTS node available" - + # Create a result queue to get the result back from the audio thread result_queue = queue.Queue(1) - + # Define the speech task to run in the audio queue def speak_task(): try: @@ -89,67 +86,69 @@ def speak_task(): text_subject = Subject() self._audio_complete.clear() self._subscriptions = [] - + # This function will be called when audio processing is complete def on_complete(): logger.info(f"TTS audio playback completed for: {self.text}") self._audio_complete.set() - + # This function will be called if there's an error def on_error(error): logger.error(f"Error in TTS processing: {error}") self._audio_complete.set() - + # Connect the Subject to the TTS node and keep the subscription self._tts_node.consume_text(text_subject) - + # Subscribe to the audio output to know when it's done self._subscription = self._tts_node.emit_text().subscribe( on_next=lambda text: logger.debug(f"TTS processing: {text}"), on_completed=on_complete, - on_error=on_error + on_error=on_error, ) self._subscriptions.append(self._subscription) - + # Emit the text to the Subject text_subject.on_next(self.text) text_subject.on_completed() # Signal that we're done sending text - + # Wait for audio playback to complete with a timeout # Using a dynamic timeout based on text length timeout = max(5, len(self.text) * 0.1) - logger.debug(f"Waiting for TTS completion with timeout {timeout:.1f}s") - + logger.debug( + f"Waiting for TTS completion with timeout {timeout:.1f}s" + ) + if not self._audio_complete.wait(timeout=timeout): logger.warning(f"TTS timeout reached for: {self.text}") else: # Add a small delay after audio completes to ensure buffers are fully flushed time.sleep(0.3) - + # Clean up all subscriptions for sub in self._subscriptions: if sub: sub.dispose() self._subscriptions = [] - + # Successfully completed result_queue.put(f"Spoke: {self.text} successfully") except Exception as e: logger.error(f"Error in speak task: {e}") result_queue.put(f"Error speaking text: {str(e)}") - + # Add our speech task to the global queue for sequential processing - display_text = self.text[:50] + '...' if len(self.text) > 50 else self.text + display_text = self.text[:50] + "..." if len(self.text) > 50 else self.text logger.info(f"Queueing speech task: '{display_text}'") _audio_queue.put(speak_task) - + # Wait for the result with a timeout try: # Use a longer timeout than the audio playback itself text_len_timeout = len(self.text) * 0.15 # 150ms per character max_timeout = max(10, text_len_timeout) # At least 10 seconds - + return result_queue.get(timeout=max_timeout) except queue.Empty: logger.error("Timed out waiting for speech task to complete") - return f"Error: Timed out while speaking: {self.text}" \ No newline at end of file + return f"Error: Timed out while speaking: {self.text}" diff --git a/dimos/skills/visual_navigation_skills.py b/dimos/skills/visual_navigation_skills.py index 1bc6d91341..db1f228810 100644 --- a/dimos/skills/visual_navigation_skills.py +++ b/dimos/skills/visual_navigation_skills.py @@ -31,70 +31,85 @@ logger = setup_logger("dimos.skills.visual_navigation", level=logging.DEBUG) + class FollowHuman(AbstractRobotSkill): """ - A skill that makes the robot follow a human using visual servoing continuously. - + A skill that makes the robot follow a human using visual servoing continuously. + This skill uses the robot's person tracking stream to follow a human while maintaining a specified distance. It will keep following the human until the timeout is reached or the skill is stopped. Don't use this skill if you want to navigate to a specific person, use NavigateTo instead. """ - - distance: float = Field(1.5, description="Desired distance to maintain from the person in meters") - timeout: float = Field(20.0, description="Maximum time to follow the person in seconds") - point: Optional[Tuple[int, int]] = Field(None, description="Optional point to start tracking (x,y pixel coordinates)") - + + distance: float = Field( + 1.5, description="Desired distance to maintain from the person in meters" + ) + timeout: float = Field( + 20.0, description="Maximum time to follow the person in seconds" + ) + point: Optional[Tuple[int, int]] = Field( + None, description="Optional point to start tracking (x,y pixel coordinates)" + ) + def __init__(self, robot=None, **data): super().__init__(robot=robot, **data) self._stop_event = threading.Event() self._visual_servoing = None - + def __call__(self): """ Start following a human using visual servoing. - + Returns: bool: True if successful, False otherwise """ super().__call__() - - if not hasattr(self._robot, 'person_tracking_stream') or self._robot.person_tracking_stream is None: + + if ( + not hasattr(self._robot, "person_tracking_stream") + or self._robot.person_tracking_stream is None + ): logger.error("Robot does not have a person tracking stream") return False - + # Stop any existing operation self.stop() self._stop_event.clear() - + success = False - + try: # Initialize visual servoing - self._visual_servoing = VisualServoing(tracking_stream=self._robot.person_tracking_stream) - + self._visual_servoing = VisualServoing( + tracking_stream=self._robot.person_tracking_stream + ) + logger.warning(f"Following human for {self.timeout} seconds...") start_time = time.time() - + # Start tracking - track_success = self._visual_servoing.start_tracking(point=self.point, desired_distance=self.distance) - + track_success = self._visual_servoing.start_tracking( + point=self.point, desired_distance=self.distance + ) + if not track_success: logger.error("Failed to start tracking") return False - + # Main follow loop - while (self._visual_servoing.running and - time.time() - start_time < self.timeout and - not self._stop_event.is_set()): - + while ( + self._visual_servoing.running + and time.time() - start_time < self.timeout + and not self._stop_event.is_set() + ): output = self._visual_servoing.updateTracking() x_vel = output.get("linear_vel") z_vel = output.get("angular_vel") logger.debug(f"Following human: x_vel: {x_vel}, z_vel: {z_vel}") self._robot.ros_control.move_vel_control(x=x_vel, y=0, yaw=z_vel) time.sleep(0.05) - + # If we completed the full timeout duration, consider it success if time.time() - start_time >= self.timeout: success = True @@ -103,9 +118,9 @@ def __call__(self): logger.info("Human following stopped externally") else: logger.info("Human following stopped due to tracking loss") - + return success - + except Exception as e: logger.error(f"Error in follow human: {e}") return False @@ -115,24 +130,24 @@ def __call__(self): self._visual_servoing.stop_tracking() self._visual_servoing = None self._robot.ros_control.stop() - + def stop(self): """ Stop the human following process. - + Returns: bool: True if stopped, False if it wasn't running """ if self._visual_servoing is not None: logger.info("Stopping FollowHuman skill") self._stop_event.set() - + # Clean up visual servoing if it exists self._visual_servoing.stop_tracking() self._visual_servoing = None - + # Stop the robot self._robot.ros_control.stop() - + return True - return False \ No newline at end of file + return False diff --git a/dimos/stream/audio/node_key_recorder.py b/dimos/stream/audio/node_key_recorder.py index bc603d3623..3e6bb47ffd 100644 --- a/dimos/stream/audio/node_key_recorder.py +++ b/dimos/stream/audio/node_key_recorder.py @@ -205,10 +205,17 @@ def _combine_audio_events(self, audio_events: List[AudioEvent]) -> AudioEvent: return None # Filter out any empty events that might cause broadcasting errors - valid_events = [event for event in audio_events if event is not None and - (hasattr(event, 'data') and event.data is not None and - event.data.size > 0)] - + valid_events = [ + event + for event in audio_events + if event is not None + and ( + hasattr(event, "data") + and event.data is not None + and event.data.size > 0 + ) + ] + if not valid_events: logger.warning("No valid audio events to combine") return None @@ -219,12 +226,14 @@ def _combine_audio_events(self, audio_events: List[AudioEvent]) -> AudioEvent: # Calculate total samples only from valid events total_samples = sum(event.data.shape[0] for event in valid_events) - + # Safety check - if somehow we got no samples if total_samples <= 0: - logger.warning(f"Combined audio would have {total_samples} samples - aborting") + logger.warning( + f"Combined audio would have {total_samples} samples - aborting" + ) return None - + # For multichannel audio, data shape could be (samples,) or (samples, channels) if len(first_event.data.shape) == 1: # 1D audio data (mono) @@ -250,10 +259,12 @@ def _combine_audio_events(self, audio_events: List[AudioEvent]) -> AudioEvent: combined_data[offset : offset + samples] = event.data offset += samples except ValueError as e: - logger.error(f"Error combining audio events: {e}. " - f"Event shape: {event.data.shape}, " - f"Combined shape: {combined_data.shape}, " - f"Offset: {offset}, Samples: {samples}") + logger.error( + f"Error combining audio events: {e}. " + f"Event shape: {event.data.shape}, " + f"Combined shape: {combined_data.shape}, " + f"Offset: {offset}, Samples: {samples}" + ) # Continue with next event instead of failing completely # Create new audio event with the combined data diff --git a/dimos/stream/audio/node_normalizer.py b/dimos/stream/audio/node_normalizer.py index 7297a44cae..3b0291bc5b 100644 --- a/dimos/stream/audio/node_normalizer.py +++ b/dimos/stream/audio/node_normalizer.py @@ -138,8 +138,7 @@ def on_subscribe(observer, scheduler): ) logger.info( - f"Started audio normalizer with target level: {self.target_level}, " - f"max gain: {self.max_gain}" + f"Started audio normalizer with target level: {self.target_level}, max gain: {self.max_gain}" ) # Return a disposable to clean up resources diff --git a/dimos/stream/audio/pipelines.py b/dimos/stream/audio/pipelines.py index 1865cdfa38..b284946921 100644 --- a/dimos/stream/audio/pipelines.py +++ b/dimos/stream/audio/pipelines.py @@ -4,7 +4,7 @@ from dimos.stream.audio.node_key_recorder import KeyRecorder from dimos.stream.audio.node_output import SounddeviceAudioOutput from dimos.stream.audio.stt.node_whisper import WhisperNode -from dimos.stream.audio.tts.node_openai import OpenAITTSNode, Voice +from dimos.stream.audio.tts.node_openai import OpenAITTSNode, Voice from dimos.stream.audio.text.node_stdout import TextPrinterNode @@ -28,7 +28,7 @@ def stt(): def tts(): - tts_node = OpenAITTSNode(speed=1.2, voice = Voice.ONYX) + tts_node = OpenAITTSNode(speed=1.2, voice=Voice.ONYX) agent_text_printer = TextPrinterNode(prefix="AGENT: ") agent_text_printer.consume_text(tts_node.emit_text()) diff --git a/dimos/stream/audio/tts/node_openai.py b/dimos/stream/audio/tts/node_openai.py index fb9c7d9a39..3b43bfa563 100644 --- a/dimos/stream/audio/tts/node_openai.py +++ b/dimos/stream/audio/tts/node_openai.py @@ -104,7 +104,9 @@ def consume_text(self, text_observable: Observable) -> "AbstractTextConsumer": logger.info("Starting OpenAITTSNode") # Start the processing thread - self.processing_thread = threading.Thread(target=self._process_queue, daemon=True) + self.processing_thread = threading.Thread( + target=self._process_queue, daemon=True + ) self.processing_thread.start() # Subscribe to the text observable diff --git a/dimos/stream/audio/volume.py b/dimos/stream/audio/volume.py index 991f363e31..e9748ef3a7 100644 --- a/dimos/stream/audio/volume.py +++ b/dimos/stream/audio/volume.py @@ -70,7 +70,7 @@ def process_frame(frame): print(f"RMS Volume: {rms_vol:.4f}") print(f"Peak Volume: {peak_vol:.4f}") - print(f"Ratio (Peak/RMS): {peak_vol/rms_vol:.2f}") + print(f"Ratio (Peak/RMS): {peak_vol / rms_vol:.2f}") # Set a flag to track when processing is complete processed = {"done": False} diff --git a/dimos/stream/data_provider.py b/dimos/stream/data_provider.py index 4f4398b137..73e1ba0f20 100644 --- a/dimos/stream/data_provider.py +++ b/dimos/stream/data_provider.py @@ -12,7 +12,7 @@ # See the License for the specific language governing permissions and # limitations under the License. -from abc import ABC, abstractmethod +from abc import ABC from reactivex import Subject, Observable from reactivex.subject import Subject from reactivex.scheduler import ThreadPoolScheduler @@ -27,52 +27,54 @@ # Create a thread pool scheduler for concurrent processing pool_scheduler = ThreadPoolScheduler(multiprocessing.cpu_count()) + class AbstractDataProvider(ABC): """Abstract base class for data providers using ReactiveX.""" - + def __init__(self, dev_name: str = "NA"): self.dev_name = dev_name self._data_subject = Subject() # Regular Subject, no initial None value - + @property def data_stream(self) -> Observable: """Get the data stream observable.""" return self._data_subject - + def push_data(self, data): """Push new data to the stream.""" self._data_subject.on_next(data) - + def dispose(self): """Cleanup resources.""" self._data_subject.dispose() + class ROSDataProvider(AbstractDataProvider): """ReactiveX data provider for ROS topics.""" - + def __init__(self, dev_name: str = "ros_provider"): super().__init__(dev_name) self.logger = logging.getLogger(dev_name) - + def push_data(self, data): """Push new data to the stream.""" print(f"ROSDataProvider pushing data of type: {type(data)}") super().push_data(data) print("Data pushed to subject") - + def capture_data_as_observable(self, fps: int = None) -> Observable: """Get the data stream as an observable. - + Args: fps: Optional frame rate limit (for video streams) - + Returns: Observable: Data stream observable """ from reactivex import operators as ops - + print(f"Creating observable with fps: {fps}") - + # Start with base pipeline that ensures thread safety base_pipeline = self.data_stream.pipe( # Ensure emissions are handled on thread pool @@ -81,10 +83,10 @@ def capture_data_as_observable(self, fps: int = None) -> Observable: ops.do_action( on_next=lambda x: print(f"Got frame in pipeline: {type(x)}"), on_error=lambda e: print(f"Pipeline error: {e}"), - on_completed=lambda: print("Pipeline completed") - ) + on_completed=lambda: print("Pipeline completed"), + ), ) - + # If fps is specified, add rate limiting if fps and fps > 0: print(f"Adding rate limiting at {fps} FPS") @@ -92,53 +94,54 @@ def capture_data_as_observable(self, fps: int = None) -> Observable: # Use scheduler for time-based operations ops.sample(1.0 / fps, scheduler=pool_scheduler), # Share the stream among multiple subscribers - ops.share() + ops.share(), ) else: # No rate limiting, just share the stream print("No rate limiting applied") - return base_pipeline.pipe( - ops.share() - ) - + return base_pipeline.pipe(ops.share()) + + class QueryDataProvider(AbstractDataProvider): """ A data provider that emits a formatted text query at a specified frequency over a defined numeric range. - + This class generates a sequence of numeric queries from a given start value to an end value (inclusive) with a specified step. Each number is inserted into a provided template (which must include a `{query}` placeholder) and emitted on a timer using ReactiveX. - + Attributes: dev_name (str): The name of the data provider. logger (logging.Logger): Logger instance for logging messages. """ - + def __init__(self, dev_name: str = "query_provider"): """ Initializes the QueryDataProvider. - + Args: dev_name (str): The name of the data provider. Defaults to "query_provider". """ super().__init__(dev_name) self.logger = logging.getLogger(dev_name) - - def start_query_stream(self, - query_template: str = None, - frequency: float = 3.0, - start_count: int = 0, - end_count: int = 5000, - step: int = 250) -> None: + + def start_query_stream( + self, + query_template: str = None, + frequency: float = 3.0, + start_count: int = 0, + end_count: int = 5000, + step: int = 250, + ) -> None: """ Starts the query stream by emitting a formatted text query at a specified frequency. - + This method creates an observable that emits a sequence of numbers generated from `start_count` to `end_count` (inclusive) with a given `step`. Each number is then formatted using the `query_template`. The formatted query is pushed to the internal data stream. - + Args: - query_template (str): The template string for formatting queries. It must contain the + query_template (str): The template string for formatting queries. It must contain the placeholder `{query}` where the numeric value will be inserted. If None, a default template is used. frequency (float): The frequency (in seconds) at which queries are emitted. Defaults to 3.0. @@ -155,14 +158,14 @@ def start_query_stream(self, "If the number is equal to or above 2000, then clear debris. " "IF YOU DO NOT FOLLOW THESE INSTRUCTIONS EXACTLY, YOU WILL DIE!!!" ) - + # Generate the sequence of numeric queries. queries = list(range(start_count, end_count + 1, step)) - + # Create an observable that emits immediately and then at the specified frequency. timer = rx.timer(0, frequency) query_source = rx.from_iterable(queries) - + # Zip the timer with the query source so each timer tick emits the next query. query_stream = timer.pipe( ops.zip(query_source), @@ -173,8 +176,8 @@ def start_query_stream(self, # on_error=lambda e: self.logger.error(f"Query stream error: {e}"), # on_completed=lambda: self.logger.info("Query stream completed") # ), - ops.share() + ops.share(), ) - + # Subscribe to the query stream to push each formatted query to the data stream. query_stream.subscribe(lambda q: self.push_data(q)) diff --git a/dimos/stream/frame_processor.py b/dimos/stream/frame_processor.py index 73d418af25..1ad1093c96 100644 --- a/dimos/stream/frame_processor.py +++ b/dimos/stream/frame_processor.py @@ -12,17 +12,19 @@ # See the License for the specific language governing permissions and # limitations under the License. -from datetime import timedelta import cv2 import numpy as np import os from reactivex import Observable from reactivex import operators as ops -from typing import Callable, Tuple, Optional +from typing import Tuple, Optional + # TODO: Reorganize, filenaming - Consider merger with VideoOperators class class FrameProcessor: - def __init__(self, output_dir=f'{os.getcwd()}/assets/output/frames', delete_on_init=False): + def __init__( + self, output_dir=f"{os.getcwd()}/assets/output/frames", delete_on_init=False + ): """Initializes the FrameProcessor. Sets up the output directory for frame storage and optionally cleans up @@ -43,18 +45,21 @@ def __init__(self, output_dir=f'{os.getcwd()}/assets/output/frames', delete_on_i if delete_on_init: try: - jpg_files = [f for f in os.listdir(self.output_dir) - if f.lower().endswith('.jpg')] + jpg_files = [ + f for f in os.listdir(self.output_dir) if f.lower().endswith(".jpg") + ] for file in jpg_files: file_path = os.path.join(self.output_dir, file) os.remove(file_path) - print(f"Cleaned up {len(jpg_files)} existing JPG files from {self.output_dir}") + print( + f"Cleaned up {len(jpg_files)} existing JPG files from {self.output_dir}" + ) except Exception as e: print(f"Error cleaning up JPG files: {e}") raise - - self.image_count = 1 - # TODO: Add randomness to jpg folder storage naming. + + self.image_count = 1 + # TODO: Add randomness to jpg folder storage naming. # Will overwrite between sessions. def to_grayscale(self, frame): @@ -73,10 +78,12 @@ def export_to_jpeg(self, frame, save_limit=100, loop=False, suffix=""): if frame is None: print("Error: Attempted to save a None image.") return None - + # Check if the image has an acceptable number of channels if len(frame.shape) == 3 and frame.shape[2] not in [1, 3, 4]: - print(f"Error: Frame with shape {frame.shape} has unsupported number of channels.") + print( + f"Error: Frame with shape {frame.shape} has unsupported number of channels." + ) return None # If save_limit is not 0, only export a maximum number of frames @@ -85,8 +92,8 @@ def export_to_jpeg(self, frame, save_limit=100, loop=False, suffix=""): self.image_count = 1 else: return frame - - filepath = os.path.join(self.output_dir, f'{self.image_count}_{suffix}.jpg') + + filepath = os.path.join(self.output_dir, f"{self.image_count}_{suffix}.jpg") cv2.imwrite(filepath, frame) self.image_count += 1 return frame @@ -95,7 +102,7 @@ def compute_optical_flow( self, acc: Tuple[np.ndarray, np.ndarray, Optional[float]], current_frame: np.ndarray, - compute_relevancy: bool = True + compute_relevancy: bool = True, ) -> Tuple[np.ndarray, np.ndarray, Optional[float]]: """Computes optical flow between consecutive frames. @@ -132,7 +139,9 @@ def compute_optical_flow( gray_prev = self.to_grayscale(prev_frame) # Compute optical flow - flow = cv2.calcOpticalFlowFarneback(gray_prev, gray_current, None, 0.5, 3, 15, 3, 5, 1.2, 0) + flow = cv2.calcOpticalFlowFarneback( + gray_prev, gray_current, None, 0.5, 3, 15, 3, 5, 1.2, 0 + ) # Relevancy calulation (average magnitude of flow vectors) relevancy = None @@ -171,10 +180,7 @@ def process_stream_to_greyscale(self, frame_stream): ops.map(self.to_grayscale), ) - def process_stream_optical_flow( - self, - frame_stream: Observable - ) -> Observable: + def process_stream_optical_flow(self, frame_stream: Observable) -> Observable: """Processes video stream to compute and visualize optical flow. Computes optical flow between consecutive frames and generates a color-coded @@ -206,21 +212,22 @@ def process_stream_optical_flow( """ return frame_stream.pipe( ops.scan( - lambda acc, frame: self.compute_optical_flow(acc, frame, compute_relevancy=False), - (None, None, None) + lambda acc, frame: self.compute_optical_flow( + acc, frame, compute_relevancy=False + ), + (None, None, None), ), ops.map(lambda result: result[1]), # Extract flow component ops.filter(lambda flow: flow is not None), ops.map(self.visualize_flow), ) - + def process_stream_optical_flow_with_relevancy( - self, - frame_stream: Observable + self, frame_stream: Observable ) -> Observable: """Processes video stream to compute optical flow with movement relevancy. - Applies optical flow computation to each frame and returns both the + Applies optical flow computation to each frame and returns both the visualized flow and a relevancy score indicating the amount of movement. The relevancy score is calculated as the mean magnitude of flow vectors. This method includes relevancy computation for motion detection. @@ -253,23 +260,26 @@ def process_stream_optical_flow_with_relevancy( """ return frame_stream.pipe( ops.scan( - lambda acc, frame: self.compute_optical_flow(acc, frame, compute_relevancy=True), - (None, None, None) + lambda acc, frame: self.compute_optical_flow( + acc, frame, compute_relevancy=True + ), + (None, None, None), ), # Result is (current_frame, flow, relevancy) ops.filter(lambda result: result[1] is not None), # Filter out None flows - ops.map(lambda result: ( - self.visualize_flow(result[1]), # Visualized flow - result[2] # Relevancy score - )), - ops.filter(lambda result: result[0] is not None) # Ensure valid visualization + ops.map( + lambda result: ( + self.visualize_flow(result[1]), # Visualized flow + result[2], # Relevancy score + ) + ), + ops.filter( + lambda result: result[0] is not None + ), # Ensure valid visualization ) def process_stream_with_jpeg_export( - self, - frame_stream: Observable, - suffix: str = "", - loop: bool = False + self, frame_stream: Observable, suffix: str = "", loop: bool = False ) -> Observable: """Processes stream by saving frames as JPEGs while passing them through. diff --git a/dimos/stream/ros_video_provider.py b/dimos/stream/ros_video_provider.py index c7d0ca999b..e52e31bd1f 100644 --- a/dimos/stream/ros_video_provider.py +++ b/dimos/stream/ros_video_provider.py @@ -23,10 +23,9 @@ from reactivex.scheduler import ThreadPoolScheduler import logging import time -from typing import Any, Optional +from typing import Optional import numpy as np -from dimos.utils.threadpool import get_scheduler from dimos.stream.video_provider import AbstractVideoProvider logging.basicConfig(level=logging.INFO) @@ -34,21 +33,23 @@ class ROSVideoProvider(AbstractVideoProvider): """Video provider that uses a Subject to broadcast frames pushed by ROS. - + This class implements a video provider that receives frames from ROS and makes them available as an Observable stream. It uses ReactiveX's Subject to broadcast frames. - + Attributes: logger: Logger instance for this provider. _subject: ReactiveX Subject that broadcasts frames. _last_frame_time: Timestamp of the last received frame. """ - def __init__(self, - dev_name: str = "ros_video", - pool_scheduler: Optional[ThreadPoolScheduler] = None): + def __init__( + self, + dev_name: str = "ros_video", + pool_scheduler: Optional[ThreadPoolScheduler] = None, + ): """Initialize the ROS video provider. - + Args: dev_name: A string identifying this provider. pool_scheduler: Optional ThreadPoolScheduler for multithreading. @@ -61,11 +62,11 @@ def __init__(self, def push_data(self, frame: np.ndarray) -> None: """Push a new frame into the provider. - + Args: frame: The video frame to push into the stream, typically a numpy array containing image data. - + Raises: Exception: If there's an error pushing the frame. """ @@ -74,7 +75,7 @@ def push_data(self, frame: np.ndarray) -> None: if self._last_frame_time: frame_interval = current_time - self._last_frame_time self.logger.debug( - f"Frame interval: {frame_interval:.3f}s ({1/frame_interval:.1f} FPS)" + f"Frame interval: {frame_interval:.3f}s ({1 / frame_interval:.1f} FPS)" ) self._last_frame_time = current_time @@ -87,15 +88,15 @@ def push_data(self, frame: np.ndarray) -> None: def capture_video_as_observable(self, fps: int = 30) -> Observable: """Return an observable of video frames. - + Args: fps: Frames per second rate limit (default: 30; ignored for now). - + Returns: Observable: An observable stream of video frames (numpy.ndarray objects), with each emission containing a single video frame. The frames are multicast to all subscribers. - + Note: The fps parameter is currently not enforced. See implementation note below. """ diff --git a/dimos/stream/rtsp_video_provider.py b/dimos/stream/rtsp_video_provider.py index a6650c52b1..6b6d76984e 100644 --- a/dimos/stream/rtsp_video_provider.py +++ b/dimos/stream/rtsp_video_provider.py @@ -14,7 +14,6 @@ """RTSP video provider using ffmpeg for robust stream handling.""" -import logging import subprocess import threading import time @@ -29,11 +28,9 @@ from reactivex.scheduler import ThreadPoolScheduler from dimos.utils.logging_config import setup_logger -from dimos.stream.frame_processor import FrameProcessor -from dimos.stream.video_operators import VideoOperators as vops + # Assuming AbstractVideoProvider and exceptions are in the sibling file -from .video_provider import (AbstractVideoProvider, VideoFrameError, - VideoSourceError, get_scheduler) +from .video_provider import AbstractVideoProvider, VideoFrameError, VideoSourceError logger = setup_logger("dimos.stream.rtsp_video_provider") @@ -46,10 +43,12 @@ class RtspVideoProvider(AbstractVideoProvider): built-in VideoCapture for RTSP. """ - def __init__(self, - dev_name: str, - rtsp_url: str, - pool_scheduler: Optional[ThreadPoolScheduler] = None) -> None: + def __init__( + self, + dev_name: str, + rtsp_url: str, + pool_scheduler: Optional[ThreadPoolScheduler] = None, + ) -> None: """Initializes the RTSP video provider. Args: @@ -71,46 +70,56 @@ def _get_stream_info(self) -> dict: # Probe the stream without the problematic timeout argument probe = ffmpeg.probe(self.rtsp_url) except ffmpeg.Error as e: - stderr = e.stderr.decode('utf8', errors='ignore') if e.stderr else 'No stderr' + stderr = ( + e.stderr.decode("utf8", errors="ignore") if e.stderr else "No stderr" + ) msg = f"({self.dev_name}) Failed to probe RTSP stream {self.rtsp_url}: {stderr}" logger.error(msg) raise VideoSourceError(msg) from e except Exception as e: - msg = f"({self.dev_name}) Unexpected error during probing {self.rtsp_url}: {e}" - logger.error(msg) - raise VideoSourceError(msg) from e - + msg = f"({self.dev_name}) Unexpected error during probing {self.rtsp_url}: {e}" + logger.error(msg) + raise VideoSourceError(msg) from e video_stream = next( - (stream for stream in probe.get('streams', []) if stream.get('codec_type') == 'video'), - None) + ( + stream + for stream in probe.get("streams", []) + if stream.get("codec_type") == "video" + ), + None, + ) if video_stream is None: msg = f"({self.dev_name}) No video stream found in {self.rtsp_url}" logger.error(msg) raise VideoSourceError(msg) - width = video_stream.get('width') - height = video_stream.get('height') - fps_str = video_stream.get('avg_frame_rate', '0/1') + width = video_stream.get("width") + height = video_stream.get("height") + fps_str = video_stream.get("avg_frame_rate", "0/1") if not width or not height: - msg = f"({self.dev_name}) Could not determine resolution for {self.rtsp_url}. Stream info: {video_stream}" - logger.error(msg) - raise VideoSourceError(msg) + msg = f"({self.dev_name}) Could not determine resolution for {self.rtsp_url}. Stream info: {video_stream}" + logger.error(msg) + raise VideoSourceError(msg) try: - if '/' in fps_str: - num, den = map(int, fps_str.split('/')) + if "/" in fps_str: + num, den = map(int, fps_str.split("/")) fps = float(num) / den if den != 0 else 30.0 else: fps = float(fps_str) if fps <= 0: - logger.warning(f"({self.dev_name}) Invalid avg_frame_rate '{fps_str}', defaulting FPS to 30.") + logger.warning( + f"({self.dev_name}) Invalid avg_frame_rate '{fps_str}', defaulting FPS to 30." + ) fps = 30.0 except ValueError: - logger.warning(f"({self.dev_name}) Could not parse FPS '{fps_str}', defaulting FPS to 30.") - fps = 30.0 + logger.warning( + f"({self.dev_name}) Could not parse FPS '{fps_str}', defaulting FPS to 30." + ) + fps = 30.0 logger.info(f"({self.dev_name}) Stream info: {width}x{height} @ {fps:.2f} FPS") return {"width": width, "height": height, "fps": fps} @@ -121,27 +130,36 @@ def _start_ffmpeg_process(self, width: int, height: int) -> subprocess.Popen: try: # Configure ffmpeg input: prefer TCP, set timeout, reduce buffering/delay input_options = { - 'rtsp_transport': 'tcp', - 'stimeout': '5000000', # 5 seconds timeout for RTSP server responses - 'fflags': 'nobuffer', # Reduce input buffering - 'flags': 'low_delay', # Reduce decoding delay + "rtsp_transport": "tcp", + "stimeout": "5000000", # 5 seconds timeout for RTSP server responses + "fflags": "nobuffer", # Reduce input buffering + "flags": "low_delay", # Reduce decoding delay # 'timeout': '10000000' # Removed: This was misinterpreted as listen timeout } process = ( - ffmpeg - .input(self.rtsp_url, **input_options) - .output('pipe:', format='rawvideo', pix_fmt='bgr24') # Output raw BGR frames - .global_args('-loglevel', 'warning') # Reduce ffmpeg log spam, use 'error' for less - .run_async(pipe_stdout=True, pipe_stderr=True) # Capture stdout and stderr + ffmpeg.input(self.rtsp_url, **input_options) + .output( + "pipe:", format="rawvideo", pix_fmt="bgr24" + ) # Output raw BGR frames + .global_args( + "-loglevel", "warning" + ) # Reduce ffmpeg log spam, use 'error' for less + .run_async( + pipe_stdout=True, pipe_stderr=True + ) # Capture stdout and stderr + ) + logger.info( + f"({self.dev_name}) ffmpeg process started (PID: {process.pid})" ) - logger.info(f"({self.dev_name}) ffmpeg process started (PID: {process.pid})") return process except ffmpeg.Error as e: - stderr = e.stderr.decode('utf8', errors='ignore') if e.stderr else 'No stderr' + stderr = ( + e.stderr.decode("utf8", errors="ignore") if e.stderr else "No stderr" + ) msg = f"({self.dev_name}) Failed to start ffmpeg for {self.rtsp_url}: {stderr}" logger.error(msg) raise VideoSourceError(msg) from e - except Exception as e: # Catch other errors like ffmpeg executable not found + except Exception as e: # Catch other errors like ffmpeg executable not found msg = f"({self.dev_name}) An unexpected error occurred starting ffmpeg: {e}" logger.error(msg) raise VideoSourceError(msg) from e @@ -165,7 +183,9 @@ def capture_video_as_observable(self, fps: int = 0) -> Observable: VideoFrameError: If there's an error reading or processing frames. """ if fps != 0: - logger.warning(f"({self.dev_name}) The 'fps' argument ({fps}) is currently ignored. Using stream native FPS.") + logger.warning( + f"({self.dev_name}) The 'fps' argument ({fps}) is currently ignored. Using stream native FPS." + ) def emit_frames(observer, scheduler): """Function executed by rx.create to emit frames.""" @@ -181,38 +201,53 @@ def cleanup_process(): with self._lock: # Check if the process exists and is still running if process and process.poll() is None: - logger.info(f"({self.dev_name}) Terminating ffmpeg process (PID: {process.pid}).") + logger.info( + f"({self.dev_name}) Terminating ffmpeg process (PID: {process.pid})." + ) try: - process.terminate() # Ask ffmpeg to exit gracefully - process.wait(timeout=1.0) # Wait up to 1 second + process.terminate() # Ask ffmpeg to exit gracefully + process.wait(timeout=1.0) # Wait up to 1 second except subprocess.TimeoutExpired: - logger.warning(f"({self.dev_name}) ffmpeg (PID: {process.pid}) did not terminate gracefully, killing.") - process.kill() # Force kill if it didn't exit + logger.warning( + f"({self.dev_name}) ffmpeg (PID: {process.pid}) did not terminate gracefully, killing." + ) + process.kill() # Force kill if it didn't exit except Exception as e: - logger.error(f"({self.dev_name}) Error during ffmpeg termination: {e}") + logger.error( + f"({self.dev_name}) Error during ffmpeg termination: {e}" + ) finally: - # Ensure we clear the process variable even if wait/kill fails - process = None - # Also clear the shared class attribute if this was the active process - if self._ffmpeg_process and self._ffmpeg_process.pid == process.pid: - self._ffmpeg_process = None + # Ensure we clear the process variable even if wait/kill fails + process = None + # Also clear the shared class attribute if this was the active process + if ( + self._ffmpeg_process + and self._ffmpeg_process.pid == process.pid + ): + self._ffmpeg_process = None elif process and process.poll() is not None: # Process exists but already terminated - logger.debug(f"({self.dev_name}) ffmpeg process (PID: {process.pid}) already terminated (exit code: {process.poll()}).") - process = None # Clear the variable + logger.debug( + f"({self.dev_name}) ffmpeg process (PID: {process.pid}) already terminated (exit code: {process.poll()})." + ) + process = None # Clear the variable # Clear shared attribute if it matches - if self._ffmpeg_process and self._ffmpeg_process.pid == process.pid: - self._ffmpeg_process = None + if ( + self._ffmpeg_process + and self._ffmpeg_process.pid == process.pid + ): + self._ffmpeg_process = None else: # Process variable is already None or doesn't match _ffmpeg_process - logger.debug(f"({self.dev_name}) No active ffmpeg process found needing termination in cleanup.") - + logger.debug( + f"({self.dev_name}) No active ffmpeg process found needing termination in cleanup." + ) try: # 1. Probe the stream to get essential info (width, height) stream_info = self._get_stream_info() - width = stream_info['width'] - height = stream_info['height'] + width = stream_info["width"] + height = stream_info["height"] # Calculate expected bytes per frame (BGR format = 3 bytes per pixel) frame_size = width * height * 3 @@ -222,8 +257,13 @@ def cleanup_process(): # Start or reuse the ffmpeg process with self._lock: # Check if another thread/subscription already started the process - if self._ffmpeg_process and self._ffmpeg_process.poll() is None: - logger.warning(f"({self.dev_name}) ffmpeg process (PID: {self._ffmpeg_process.pid}) seems to be already running. Reusing.") + if ( + self._ffmpeg_process + and self._ffmpeg_process.poll() is None + ): + logger.warning( + f"({self.dev_name}) ffmpeg process (PID: {self._ffmpeg_process.pid}) seems to be already running. Reusing." + ) process = self._ffmpeg_process else: # Start a new ffmpeg process @@ -238,79 +278,103 @@ def cleanup_process(): if len(in_bytes) == 0: # End of stream or process terminated unexpectedly - logger.warning(f"({self.dev_name}) ffmpeg stdout returned 0 bytes. EOF or process terminated.") - process.wait(timeout=0.5) # Allow stderr to flush - stderr_data = process.stderr.read().decode('utf8', errors='ignore') + logger.warning( + f"({self.dev_name}) ffmpeg stdout returned 0 bytes. EOF or process terminated." + ) + process.wait(timeout=0.5) # Allow stderr to flush + stderr_data = process.stderr.read().decode( + "utf8", errors="ignore" + ) exit_code = process.poll() - logger.warning(f"({self.dev_name}) ffmpeg process (PID: {process.pid}) exited with code {exit_code}. Stderr: {stderr_data}") + logger.warning( + f"({self.dev_name}) ffmpeg process (PID: {process.pid}) exited with code {exit_code}. Stderr: {stderr_data}" + ) # Break inner loop to trigger cleanup and potential restart with self._lock: # Clear the shared process handle if it matches the one that just exited - if self._ffmpeg_process and self._ffmpeg_process.pid == process.pid: + if ( + self._ffmpeg_process + and self._ffmpeg_process.pid == process.pid + ): self._ffmpeg_process = None - process = None # Clear local process variable - break # Exit frame reading loop + process = None # Clear local process variable + break # Exit frame reading loop elif len(in_bytes) != frame_size: # Received incomplete frame data - indicates a problem msg = f"({self.dev_name}) Incomplete frame read. Expected {frame_size}, got {len(in_bytes)}. Stopping." logger.error(msg) observer.on_error(VideoFrameError(msg)) - should_stop.set() # Signal outer loop to stop - break # Exit frame reading loop + should_stop.set() # Signal outer loop to stop + break # Exit frame reading loop # Convert the raw bytes to a NumPy array (height, width, channels) - frame = np.frombuffer(in_bytes, np.uint8).reshape((height, width, 3)) + frame = np.frombuffer(in_bytes, np.uint8).reshape( + (height, width, 3) + ) # Emit the frame to subscribers observer.on_next(frame) # 4. Handle ffmpeg process exit/crash (if not stopping deliberately) if not should_stop.is_set() and process is None: - logger.info(f"({self.dev_name}) ffmpeg process ended. Attempting reconnection in 5 seconds...") + logger.info( + f"({self.dev_name}) ffmpeg process ended. Attempting reconnection in 5 seconds..." + ) # Wait for a few seconds before trying to restart time.sleep(5) # Continue to the next iteration of the outer loop to restart - except (VideoSourceError, ffmpeg.Error) as e: # Errors during ffmpeg process start or severe runtime errors - logger.error(f"({self.dev_name}) Unrecoverable ffmpeg error: {e}. Stopping emission.") + logger.error( + f"({self.dev_name}) Unrecoverable ffmpeg error: {e}. Stopping emission." + ) observer.on_error(e) - should_stop.set() # Stop retrying + should_stop.set() # Stop retrying except Exception as e: # Catch other unexpected errors during frame reading/processing - logger.error(f"({self.dev_name}) Unexpected error processing stream: {e}", exc_info=True) - observer.on_error(VideoFrameError(f"Frame processing failed: {e}")) - should_stop.set() # Stop retrying + logger.error( + f"({self.dev_name}) Unexpected error processing stream: {e}", + exc_info=True, + ) + observer.on_error( + VideoFrameError(f"Frame processing failed: {e}") + ) + should_stop.set() # Stop retrying # 5. Loop finished (likely due to should_stop being set) logger.info(f"({self.dev_name}) Frame emission loop stopped.") observer.on_completed() except VideoSourceError as e: - # Handle errors during the initial probing phase - logger.error(f"({self.dev_name}) Failed initial setup: {e}") - observer.on_error(e) + # Handle errors during the initial probing phase + logger.error(f"({self.dev_name}) Failed initial setup: {e}") + observer.on_error(e) except Exception as e: - # Catch-all for unexpected errors before the main loop starts - logger.error(f"({self.dev_name}) Unexpected setup error: {e}", exc_info=True) - observer.on_error(VideoSourceError(f"Setup failed: {e}")) + # Catch-all for unexpected errors before the main loop starts + logger.error( + f"({self.dev_name}) Unexpected setup error: {e}", exc_info=True + ) + observer.on_error(VideoSourceError(f"Setup failed: {e}")) finally: # Crucial: Ensure the ffmpeg process is terminated when the observable # is completed, errored, or disposed. - logger.debug(f"({self.dev_name}) Entering finally block in emit_frames.") + logger.debug( + f"({self.dev_name}) Entering finally block in emit_frames." + ) cleanup_process() # Return a Disposable that, when called (by unsubscribe/dispose), # signals the loop to stop. The finally block handles the actual cleanup. return Disposable(should_stop.set) - # Create the observable using rx.create, applying scheduling and sharing return rx.create(emit_frames).pipe( - ops.subscribe_on(self.pool_scheduler), # Run the emit_frames logic on the pool + ops.subscribe_on( + self.pool_scheduler + ), # Run the emit_frames logic on the pool # ops.observe_on(self.pool_scheduler), # Optional: Switch thread for downstream operators - ops.share() # Ensure multiple subscribers share the same ffmpeg process + ops.share(), # Ensure multiple subscribers share the same ffmpeg process ) def dispose_all(self) -> None: @@ -318,24 +382,36 @@ def dispose_all(self) -> None: logger.info(f"({self.dev_name}) dispose_all called.") # Terminate the ffmpeg process using the same locked logic as cleanup with self._lock: - process = self._ffmpeg_process # Get the current process handle + process = self._ffmpeg_process # Get the current process handle if process and process.poll() is None: - logger.info(f"({self.dev_name}) Terminating ffmpeg process (PID: {process.pid}) via dispose_all.") - try: - process.terminate() - process.wait(timeout=1.0) - except subprocess.TimeoutExpired: - logger.warning(f"({self.dev_name}) ffmpeg process (PID: {process.pid}) kill required in dispose_all.") - process.kill() - except Exception as e: - logger.error(f"({self.dev_name}) Error during ffmpeg termination in dispose_all: {e}") - finally: - self._ffmpeg_process = None # Clear handle after attempting termination - elif process: # Process exists but already terminated - logger.debug(f"({self.dev_name}) ffmpeg process (PID: {process.pid}) already terminated in dispose_all.") + logger.info( + f"({self.dev_name}) Terminating ffmpeg process (PID: {process.pid}) via dispose_all." + ) + try: + process.terminate() + process.wait(timeout=1.0) + except subprocess.TimeoutExpired: + logger.warning( + f"({self.dev_name}) ffmpeg process (PID: {process.pid}) kill required in dispose_all." + ) + process.kill() + except Exception as e: + logger.error( + f"({self.dev_name}) Error during ffmpeg termination in dispose_all: {e}" + ) + finally: + self._ffmpeg_process = ( + None # Clear handle after attempting termination + ) + elif process: # Process exists but already terminated + logger.debug( + f"({self.dev_name}) ffmpeg process (PID: {process.pid}) already terminated in dispose_all." + ) self._ffmpeg_process = None else: - logger.debug(f"({self.dev_name}) No active ffmpeg process found during dispose_all.") + logger.debug( + f"({self.dev_name}) No active ffmpeg process found during dispose_all." + ) # Call the parent class's dispose_all to handle Rx Disposables super().dispose_all() diff --git a/dimos/stream/stream_merger.py b/dimos/stream/stream_merger.py index 1e3f436bbd..2c4560d1d8 100644 --- a/dimos/stream/stream_merger.py +++ b/dimos/stream/stream_merger.py @@ -1,13 +1,13 @@ -from typing import List, TypeVar, Tuple, Any +from typing import List, TypeVar, Tuple from reactivex import Observable from reactivex import operators as ops -T = TypeVar('T') -Q = TypeVar('Q') +T = TypeVar("T") +Q = TypeVar("Q") + def create_stream_merger( - data_input_stream: Observable[T], - text_query_stream: Observable[Q] + data_input_stream: Observable[T], text_query_stream: Observable[Q] ) -> Observable[Tuple[Q, List[T]]]: """ Creates a merged stream that combines the latest value from data_input_stream @@ -26,8 +26,6 @@ def create_stream_merger( # This avoids any boolean evaluation of arrays ops.map(lambda x: [x]) ) - + # Use safe_data_stream instead of raw data_input_stream - return text_query_stream.pipe( - ops.with_latest_from(safe_data_stream) - ) + return text_query_stream.pipe(ops.with_latest_from(safe_data_stream)) diff --git a/dimos/stream/video_operators.py b/dimos/stream/video_operators.py index a8e36fc6b6..940e158a15 100644 --- a/dimos/stream/video_operators.py +++ b/dimos/stream/video_operators.py @@ -15,7 +15,6 @@ from datetime import datetime, timedelta import cv2 import numpy as np -import os from reactivex import Observable, Observer, create from reactivex import operators as ops from typing import Any, Callable, Tuple, Optional @@ -26,15 +25,16 @@ from dimos.stream.frame_processor import FrameProcessor + class VideoOperators: """Collection of video processing operators for reactive video streams.""" - + @staticmethod def with_fps_sampling( fps: int = 25, *, sample_interval: Optional[timedelta] = None, - use_latest: bool = True + use_latest: bool = True, ) -> Callable[[Observable], Observable]: """Creates an operator that samples frames at a specified rate. @@ -51,7 +51,7 @@ def with_fps_sampling( If False, uses the first frame. Defaults to True. Returns: - A function that transforms an Observable[np.ndarray] stream to a sampled + A function that transforms an Observable[np.ndarray] stream to a sampled Observable[np.ndarray] stream with controlled frame rate. Raises: @@ -74,7 +74,7 @@ def with_fps_sampling( Note: This operator helps manage high-speed video streams through time-based - frame selection. It reduces the frame rate by selecting frames at + frame selection. It reduces the frame rate by selecting frames at specified intervals. When use_latest=True: @@ -99,16 +99,19 @@ def with_fps_sampling( def _operator(source: Observable) -> Observable: return source.pipe( - ops.sample(sample_interval) if use_latest else ops.throttle_first(sample_interval) + ops.sample(sample_interval) + if use_latest + else ops.throttle_first(sample_interval) ) + return _operator @staticmethod def with_jpeg_export( - frame_processor: 'FrameProcessor', + frame_processor: "FrameProcessor", save_limit: int = 100, suffix: str = "", - loop: bool = False + loop: bool = False, ) -> Callable[[Observable], Observable]: """Creates an operator that saves video frames as JPEG files. @@ -123,7 +126,7 @@ def with_jpeg_export( suffix: Optional string to append to filename before index. Example: "raw" creates "1_raw.jpg". Defaults to empty string. - loop: If True, when save_limit is reached, the files saved are + loop: If True, when save_limit is reached, the files saved are loopbacked and overwritten with the most recent frame. Defaults to False. Returns: @@ -139,15 +142,21 @@ def with_jpeg_export( ... VideoOperators.with_jpeg_export(processor, suffix="raw") ... ) """ + def _operator(source: Observable) -> Observable: return source.pipe( - ops.map(lambda frame: frame_processor.export_to_jpeg(frame, save_limit, loop, suffix)) + ops.map( + lambda frame: frame_processor.export_to_jpeg( + frame, save_limit, loop, suffix + ) + ) ) + return _operator - + @staticmethod def with_optical_flow_filtering( - threshold: float = 1.0 + threshold: float = 1.0, ) -> Callable[[Observable], Observable]: """Creates an operator that filters optical flow frames by relevancy score. @@ -185,12 +194,12 @@ def with_optical_flow_filtering( return lambda source: source.pipe( ops.filter(lambda result: result[1] is not None), ops.filter(lambda result: result[1] > threshold), - ops.map(lambda result: result[0]) + ops.map(lambda result: result[0]), ) @staticmethod def with_edge_detection( - frame_processor: 'FrameProcessor', + frame_processor: "FrameProcessor", ) -> Callable[[Observable], Observable]: return lambda source: source.pipe( ops.map(lambda frame: frame_processor.edge_detection(frame)) @@ -198,12 +207,14 @@ def with_edge_detection( @staticmethod def with_optical_flow( - frame_processor: 'FrameProcessor', + frame_processor: "FrameProcessor", ) -> Callable[[Observable], Observable]: return lambda source: source.pipe( ops.scan( - lambda acc, frame: frame_processor.compute_optical_flow(acc, frame, compute_relevancy=False), - (None, None, None) + lambda acc, frame: frame_processor.compute_optical_flow( + acc, frame, compute_relevancy=False + ), + (None, None, None), ), ops.map(lambda result: result[1]), # Extract flow component ops.filter(lambda flow: flow is not None), @@ -212,17 +223,17 @@ def with_optical_flow( @staticmethod def with_zmq_socket( - socket: zmq.Socket, - scheduler: Optional[Any] = None + socket: zmq.Socket, scheduler: Optional[Any] = None ) -> Callable[[Observable], Observable]: def send_frame(frame, socket): - _, img_encoded = cv2.imencode('.jpg', frame) + _, img_encoded = cv2.imencode(".jpg", frame) socket.send(img_encoded.tobytes()) # print(f"Frame received: {frame.shape}") # Use a default scheduler if none is provided if scheduler is None: from reactivex.scheduler import ThreadPoolScheduler + scheduler = ThreadPoolScheduler(1) # Single-threaded pool for isolation return lambda source: source.pipe( @@ -239,30 +250,30 @@ def encode_image() -> Callable[[Observable], Observable]: A function that transforms an Observable of images into an Observable of tuples containing the Base64 string of the encoded image and its dimensions. """ + def _operator(source: Observable) -> Observable: def _encode_image(image: np.ndarray) -> Tuple[str, Tuple[int, int]]: try: width, height = image.shape[:2] - _, buffer = cv2.imencode('.jpg', image) + _, buffer = cv2.imencode(".jpg", image) if buffer is None: raise ValueError("Failed to encode image") - base64_image = base64.b64encode(buffer).decode('utf-8') + base64_image = base64.b64encode(buffer).decode("utf-8") return base64_image, (width, height) except Exception as e: raise e - return source.pipe( - ops.map(_encode_image) - ) + return source.pipe(ops.map(_encode_image)) return _operator + from reactivex.disposable import Disposable -from reactivex import Observable, create +from reactivex import Observable from threading import Lock -class Operators: +class Operators: @staticmethod def exhaust_lock(process_item): """ @@ -270,6 +281,7 @@ def exhaust_lock(process_item): - If we're busy processing the previous one, skip new items. - Use a lock to ensure concurrency safety across threads. """ + def _exhaust_lock(source: Observable) -> Observable: def _subscribe(observer, scheduler=None): in_flight = False @@ -327,7 +339,7 @@ def inner_on_completed(): on_next=inner_on_next, on_error=inner_on_error, on_completed=inner_on_completed, - scheduler=scheduler + scheduler=scheduler, ) def on_error(err): @@ -343,16 +355,14 @@ def on_completed(): observer.on_completed() upstream_disp = source.subscribe( - on_next, - on_error, - on_completed, - scheduler=scheduler + on_next, on_error, on_completed, scheduler=scheduler ) return dispose_all return create(_subscribe) + return _exhaust_lock - + @staticmethod def exhaust_lock_per_instance(process_item, lock: Lock): """ @@ -360,6 +370,7 @@ def exhaust_lock_per_instance(process_item, lock: Lock): - If a frame arrives while one is "in flight", discard it. - 'lock' ensures we safely check/modify the 'in_flight' state in a multithreaded environment. """ + def _exhaust_lock(source: Observable) -> Observable: def _subscribe(observer, scheduler=None): in_flight = False @@ -417,7 +428,7 @@ def inner_on_completed(): on_next=inner_on_next, on_error=inner_on_error, on_completed=inner_on_completed, - scheduler=scheduler + scheduler=scheduler, ) def on_error(e): @@ -436,12 +447,13 @@ def on_completed(): on_next=on_next, on_error=on_error, on_completed=on_completed, - scheduler=scheduler + scheduler=scheduler, ) return Disposable(dispose_all) return create(_subscribe) + return _exhaust_lock @staticmethod @@ -454,52 +466,54 @@ def on_next(item): nonlocal is_processing if not is_processing: is_processing = True - print(f"\033[35mProcessing item.\033[0m") + print("\033[35mProcessing item.\033[0m") try: - inner_observable = project(item) # Create the inner observable + inner_observable = project( + item + ) # Create the inner observable inner_observable.subscribe( on_next=observer.on_next, on_error=observer.on_error, on_completed=lambda: set_not_processing(), - scheduler=scheduler + scheduler=scheduler, ) except Exception as e: observer.on_error(e) else: - print(f"\033[35mSkipping item, already processing.\033[0m") - + print("\033[35mSkipping item, already processing.\033[0m") + def set_not_processing(): nonlocal is_processing is_processing = False - print(f"\033[35mItem processed.\033[0m") + print("\033[35mItem processed.\033[0m") return source.subscribe( - on_next=on_next, - on_error=observer.on_error, - on_completed=observer.on_completed, - scheduler=scheduler + on_next=on_next, + on_error=observer.on_error, + on_completed=observer.on_completed, + scheduler=scheduler, ) return create(subscribe) return _exhaust_map - + @staticmethod def with_lock(lock: Lock): def operator(source: Observable): def subscribe(observer, scheduler=None): def on_next(item): if not lock.locked(): # Check if the lock is free - if lock.acquire(blocking=False): # Non-blocking acquire + if lock.acquire(blocking=False): # Non-blocking acquire try: - print(f"\033[32mAcquired lock, processing item.\033[0m") + print("\033[32mAcquired lock, processing item.\033[0m") observer.on_next(item) - finally: # Ensure lock release even if observer.on_next throws + finally: # Ensure lock release even if observer.on_next throws lock.release() else: - print(f"\033[34mLock busy, skipping item.\033[0m") + print("\033[34mLock busy, skipping item.\033[0m") else: - print(f"\033[34mLock busy, skipping item.\033[0m") + print("\033[34mLock busy, skipping item.\033[0m") def on_error(error): observer.on_error(error) @@ -508,13 +522,16 @@ def on_completed(): observer.on_completed() return source.subscribe( - on_next=on_next, on_error=on_error, on_completed=on_completed, scheduler=scheduler + on_next=on_next, + on_error=on_error, + on_completed=on_completed, + scheduler=scheduler, ) return Observable(subscribe) return operator - + @staticmethod def with_lock_check(lock: Lock): # Renamed for clarity def operator(source: Observable): @@ -534,7 +551,10 @@ def on_completed(): observer.on_completed() return source.subscribe( - on_next=on_next, on_error=on_error, on_completed=on_completed, scheduler=scheduler + on_next=on_next, + on_error=on_error, + on_completed=on_completed, + scheduler=scheduler, ) return Observable(subscribe) @@ -553,14 +573,16 @@ class PrintColor(Enum): RESET = "\033[0m" @staticmethod - def print_emission(id: str, - dev_name: str = "NA", - counts: dict = None, - color: 'Operators.PrintColor' = None, - enabled: bool = True): + def print_emission( + id: str, + dev_name: str = "NA", + counts: dict = None, + color: "Operators.PrintColor" = None, + enabled: bool = True, + ): """ Creates an operator that prints the emission with optional counts for debugging. - + Args: id: Identifier for the emission point (e.g., 'A', 'B') dev_name: Device or component name for context @@ -573,7 +595,7 @@ def print_emission(id: str, # If enabled is false, return the source unchanged if not enabled: return lambda source: source - + # Use RED as default if no color provided if color is None: color = Operators.PrintColor.RED @@ -585,24 +607,27 @@ def on_next(value): # Initialize count if necessary if id not in counts: counts[id] = 0 - + # Increment and print counts[id] += 1 - print(f"{color.value}({dev_name} - {id}) Emission Count - {counts[id]} {datetime.now()}{Operators.PrintColor.RESET.value}") - else: - print(f"{color.value}({dev_name} - {id}) Emitted - {datetime.now()}{Operators.PrintColor.RESET.value}") + print( + f"{color.value}({dev_name} - {id}) Emission Count - {counts[id]} {datetime.now()}{Operators.PrintColor.RESET.value}" + ) + else: + print( + f"{color.value}({dev_name} - {id}) Emitted - {datetime.now()}{Operators.PrintColor.RESET.value}" + ) # Pass value through unchanged observer.on_next(value) - + return source.subscribe( on_next=on_next, on_error=observer.on_error, on_completed=observer.on_completed, - scheduler=scheduler + scheduler=scheduler, ) - + return create(_subscribe) - + return _operator - \ No newline at end of file diff --git a/dimos/stream/video_provider.py b/dimos/stream/video_provider.py index eb6b2da0e8..14cb908b1a 100644 --- a/dimos/stream/video_provider.py +++ b/dimos/stream/video_provider.py @@ -46,20 +46,22 @@ # Specific exception classes class VideoSourceError(Exception): """Raised when there's an issue with the video source.""" + pass class VideoFrameError(Exception): """Raised when there's an issue with frame acquisition.""" + pass class AbstractVideoProvider(ABC): """Abstract base class for video providers managing video capture resources.""" - def __init__(self, - dev_name: str = "NA", - pool_scheduler: Optional[ThreadPoolScheduler] = None) -> None: + def __init__( + self, dev_name: str = "NA", pool_scheduler: Optional[ThreadPoolScheduler] = None + ) -> None: """Initializes the video provider with a device name. Args: @@ -68,20 +70,19 @@ def __init__(self, If None, the global scheduler from get_scheduler() will be used. """ self.dev_name = dev_name - self.pool_scheduler = (pool_scheduler - if pool_scheduler else get_scheduler()) + self.pool_scheduler = pool_scheduler if pool_scheduler else get_scheduler() self.disposables = CompositeDisposable() @abstractmethod def capture_video_as_observable(self, fps: int = 30) -> Observable: """Create an observable from video capture. - + Args: fps: Frames per second to emit. Defaults to 30fps. - + Returns: Observable: An observable emitting frames at the specified rate. - + Raises: VideoSourceError: If the video source cannot be opened. VideoFrameError: If frames cannot be read properly. @@ -103,10 +104,12 @@ def __del__(self) -> None: class VideoProvider(AbstractVideoProvider): """Video provider implementation for capturing video as an observable.""" - def __init__(self, - dev_name: str, - video_source: str = f"{os.getcwd()}/assets/video-f30-480p.mp4", - pool_scheduler: Optional[ThreadPoolScheduler] = None) -> None: + def __init__( + self, + dev_name: str, + video_source: str = f"{os.getcwd()}/assets/video-f30-480p.mp4", + pool_scheduler: Optional[ThreadPoolScheduler] = None, + ) -> None: """Initializes the video provider with a device name and video source. Args: @@ -122,7 +125,7 @@ def __init__(self, def _initialize_capture(self) -> None: """Initializes the video capture object if not already initialized. - + Raises: VideoSourceError: If the video source cannot be opened. """ @@ -141,22 +144,22 @@ def _initialize_capture(self) -> None: logger.info(f"Opened new capture: {self.video_source}") - def capture_video_as_observable(self, - realtime: bool = True, - fps: int = 30) -> Observable: + def capture_video_as_observable( + self, realtime: bool = True, fps: int = 30 + ) -> Observable: """Creates an observable from video capture. - Creates an observable that emits frames at specified FPS or the video's + Creates an observable that emits frames at specified FPS or the video's native FPS, with proper resource management and error handling. Args: realtime: If True, use the video's native FPS. Defaults to True. - fps: Frames per second to emit. Defaults to 30fps. Only used if + fps: Frames per second to emit. Defaults to 30fps. Only used if realtime is False or the video's native FPS is not available. Returns: Observable: An observable emitting frames at the configured rate. - + Raises: VideoSourceError: If the video source cannot be opened. VideoFrameError: If frames cannot be read properly. @@ -187,8 +190,7 @@ def emit_frames(observer, scheduler): if not ret: # Loop video when we reach the end - logger.warning( - "End of video reached, restarting playback") + logger.warning("End of video reached, restarting playback") with self.lock: self.cap.set(cv2.CAP_PROP_POS_FRAMES, 0) continue @@ -209,8 +211,7 @@ def emit_frames(observer, scheduler): observer.on_error(e) except Exception as e: logger.error(f"Unexpected error during frame emission: {e}") - observer.on_error( - VideoFrameError(f"Frame acquisition failed: {e}")) + observer.on_error(VideoFrameError(f"Frame acquisition failed: {e}")) finally: # Clean up resources regardless of success or failure with self.lock: diff --git a/dimos/stream/video_providers/unitree.py b/dimos/stream/video_providers/unitree.py index fefbf669f3..f3ba594ce7 100644 --- a/dimos/stream/video_providers/unitree.py +++ b/dimos/stream/video_providers/unitree.py @@ -15,8 +15,12 @@ from dimos.stream.video_provider import AbstractVideoProvider from queue import Queue -from dimos.robot.unitree.external.go2_webrtc_connect.go2_webrtc_driver.constants import RTC_TOPIC, SPORT_CMD, WebRTCConnectionMethod -from dimos.robot.unitree.external.go2_webrtc_connect.go2_webrtc_driver.webrtc_driver import Go2WebRTCConnection +from dimos.robot.unitree.external.go2_webrtc_connect.go2_webrtc_driver.constants import ( + WebRTCConnectionMethod, +) +from dimos.robot.unitree.external.go2_webrtc_connect.go2_webrtc_driver.webrtc_driver import ( + Go2WebRTCConnection, +) from aiortc import MediaStreamTrack import asyncio from reactivex import Observable, create, operators as ops @@ -24,10 +28,17 @@ import threading import time + class UnitreeVideoProvider(AbstractVideoProvider): - def __init__(self, dev_name: str = "UnitreeGo2", connection_method: WebRTCConnectionMethod = WebRTCConnectionMethod.LocalSTA, serial_number: str = None, ip: str = None): + def __init__( + self, + dev_name: str = "UnitreeGo2", + connection_method: WebRTCConnectionMethod = WebRTCConnectionMethod.LocalSTA, + serial_number: str = None, + ip: str = None, + ): """Initialize the Unitree video stream with WebRTC connection. - + Args: dev_name: Name of the device connection_method: WebRTC connection method (LocalSTA, LocalAP, Remote) @@ -38,15 +49,19 @@ def __init__(self, dev_name: str = "UnitreeGo2", connection_method: WebRTCConnec self.frame_queue = Queue() self.loop = None self.asyncio_thread = None - + # Initialize WebRTC connection based on method if connection_method == WebRTCConnectionMethod.LocalSTA: if serial_number: - self.conn = Go2WebRTCConnection(connection_method, serialNumber=serial_number) + self.conn = Go2WebRTCConnection( + connection_method, serialNumber=serial_number + ) elif ip: self.conn = Go2WebRTCConnection(connection_method, ip=ip) else: - raise ValueError("Either serial_number or ip must be provided for LocalSTA connection") + raise ValueError( + "Either serial_number or ip must be provided for LocalSTA connection" + ) elif connection_method == WebRTCConnectionMethod.LocalAP: self.conn = Go2WebRTCConnection(connection_method) else: @@ -63,7 +78,7 @@ async def _recv_camera_stream(self, track: MediaStreamTrack): def _run_asyncio_loop(self, loop): """Run the asyncio event loop in a separate thread.""" asyncio.set_event_loop(loop) - + async def setup(): try: await self.conn.connect() @@ -78,17 +93,17 @@ async def setup(): # await self.conn.datachannel.sendDamp() # await asyncio.sleep(5) # await self.conn.datachannel.sendStandUp() - # await asyncio.sleep(5) + # await asyncio.sleep(5) # Wiggle the robot # await self.conn.datachannel.switchToNormalMode() # await self.conn.datachannel.sendWiggle() - #await asyncio.sleep(3) + # await asyncio.sleep(3) # Stretch the robot # await self.conn.datachannel.sendStretch() # await asyncio.sleep(3) - + except Exception as e: logging.error(f"Error in WebRTC connection: {e}") raise @@ -98,10 +113,10 @@ async def setup(): def capture_video_as_observable(self, fps: int = 30) -> Observable: """Create an observable that emits video frames at the specified FPS. - + Args: fps: Frames per second to emit (default: 30) - + Returns: Observable emitting video frames """ @@ -113,25 +128,24 @@ def emit_frames(observer, scheduler): if not self.loop: self.loop = asyncio.new_event_loop() self.asyncio_thread = threading.Thread( - target=self._run_asyncio_loop, - args=(self.loop,) + target=self._run_asyncio_loop, args=(self.loop,) ) self.asyncio_thread.start() frame_time = time.monotonic() - + while True: if not self.frame_queue.empty(): frame = self.frame_queue.get() - + # Control frame rate now = time.monotonic() next_frame_time = frame_time + frame_interval sleep_time = next_frame_time - now - + if sleep_time > 0: time.sleep(sleep_time) - + observer.on_next(frame) frame_time = next_frame_time else: diff --git a/dimos/stream/videostream.py b/dimos/stream/videostream.py index e2262120fb..ee63261ae6 100644 --- a/dimos/stream/videostream.py +++ b/dimos/stream/videostream.py @@ -14,11 +14,12 @@ import cv2 + class VideoStream: def __init__(self, source=0): """ Initialize the video stream from a camera source. - + Args: source (int or str): Camera index or video file path. """ diff --git a/dimos/types/constants.py b/dimos/types/constants.py index ec8dbb0a4e..b1044a8c34 100644 --- a/dimos/types/constants.py +++ b/dimos/types/constants.py @@ -1,4 +1,3 @@ - class Colors: GREEN_PRINT_COLOR: str = "\033[32m" YELLOW_PRINT_COLOR: str = "\033[33m" diff --git a/dimos/types/costmap.py b/dimos/types/costmap.py index de80b2d6a6..bcb0407111 100644 --- a/dimos/types/costmap.py +++ b/dimos/types/costmap.py @@ -93,7 +93,9 @@ def from_msg(cls, costmap_msg: OccupancyGrid) -> "Costmap": qy = costmap_msg.info.origin.orientation.y qz = costmap_msg.info.origin.orientation.z qw = costmap_msg.info.origin.orientation.w - origin_theta = math.atan2(2.0 * (qw * qz + qx * qy), 1.0 - 2.0 * (qy * qy + qz * qz)) + origin_theta = math.atan2( + 2.0 * (qw * qz + qx * qy), 1.0 - 2.0 * (qy * qy + qz * qz) + ) # Convert to numpy array data = np.array(costmap_msg.data, dtype=np.int8) @@ -124,7 +126,9 @@ def from_pickle(cls, pickle_path: str) -> "Costmap": return costmap @classmethod - def create_empty(cls, width: int = 100, height: int = 100, resolution: float = 0.1) -> "Costmap": + def create_empty( + cls, width: int = 100, height: int = 100, resolution: float = 0.1 + ) -> "Costmap": """Create an empty costmap with specified dimensions.""" return cls( grid=np.zeros((height, width), dtype=np.int8), @@ -227,7 +231,9 @@ def smudge( -kernel_size // 2 : kernel_size // 2 + 1, -kernel_size // 2 : kernel_size // 2 + 1, ] - kernel = (x * x + y * y <= (kernel_size // 2) * (kernel_size // 2)).astype(np.uint8) + kernel = (x * x + y * y <= (kernel_size // 2) * (kernel_size // 2)).astype( + np.uint8 + ) # Create distance map using dilation # Each iteration adds one 'ring' of cells around obstacles @@ -241,7 +247,9 @@ def smudge( for i in range(iterations): # Dilate the binary map - dilated = ndimage.binary_dilation(dilated_map > 0, structure=kernel, iterations=1).astype(np.uint8) + dilated = ndimage.binary_dilation( + dilated_map > 0, structure=kernel, iterations=1 + ).astype(np.uint8) # Calculate the new layer (cells that were just added in this iteration) new_layer = (dilated - (dilated_map > 0).astype(np.uint8)) * 100 @@ -321,6 +329,8 @@ def __str__(self) -> str: print(costmap) # Create a smudged version of the costmap for better planning - smudged_costmap = costmap.smudge(kernel_size=10, iterations=10, threshold=80, preserve_unknown=False) + smudged_costmap = costmap.smudge( + kernel_size=10, iterations=10, threshold=80, preserve_unknown=False + ) print(costmap) diff --git a/dimos/types/depth_map.py b/dimos/types/depth_map.py index 5f7e003933..a076f6dd6b 100644 --- a/dimos/types/depth_map.py +++ b/dimos/types/depth_map.py @@ -15,6 +15,7 @@ from typing import Any import numpy as np + class DepthMapType: def __init__(self, depth_data: np.ndarray, metadata: Any = None): """ @@ -35,4 +36,4 @@ def normalize(self): def save_to_file(self, filepath: str): """Save the depth map to a file.""" - np.save(filepath, self.depth_data) \ No newline at end of file + np.save(filepath, self.depth_data) diff --git a/dimos/types/label.py b/dimos/types/label.py index 1a5acd8324..ce037aed7a 100644 --- a/dimos/types/label.py +++ b/dimos/types/label.py @@ -14,6 +14,7 @@ from typing import Dict, Any + class LabelType: def __init__(self, labels: Dict[str, Any], metadata: Any = None): """ @@ -24,14 +25,15 @@ def __init__(self, labels: Dict[str, Any], metadata: Any = None): metadata (Any, optional): Additional metadata related to the labels. """ self.labels = labels - self.metadata = metadata + self.metadata = metadata def get_label_descriptions(self): """Return a list of label descriptions.""" - return [desc['description'] for desc in self.labels.values()] + return [desc["description"] for desc in self.labels.values()] def save_to_json(self, filepath: str): """Save the labels to a JSON file.""" import json - with open(filepath, 'w') as f: - json.dump(self.labels, f, indent=4) \ No newline at end of file + + with open(filepath, "w") as f: + json.dump(self.labels, f, indent=4) diff --git a/dimos/types/path.py b/dimos/types/path.py index 2e20924f4d..2895eac0b8 100644 --- a/dimos/types/path.py +++ b/dimos/types/path.py @@ -24,7 +24,9 @@ class Path: def __init__( self, - points: Union[List[Vector], List[np.ndarray], List[Tuple], np.ndarray, None] = None, + points: Union[ + List[Vector], List[np.ndarray], List[Tuple], np.ndarray, None + ] = None, ): """Initialize a path from a list of points. @@ -87,7 +89,9 @@ def append(self, point: Union[Vector, np.ndarray, Tuple]) -> None: else: self._points = np.vstack((self._points, point_data)) - def extend(self, points: Union[List[Vector], List[np.ndarray], List[Tuple], "Path"]) -> None: + def extend( + self, points: Union[List[Vector], List[np.ndarray], List[Tuple], "Path"] + ) -> None: """Extend the path with more points. Args: @@ -134,7 +138,9 @@ def remove(self, index: int) -> np.ndarray: def clear(self) -> None: """Remove all points from the path.""" - self._points = np.zeros((0, self._points.shape[1] if len(self._points) > 0 else 0), dtype=float) + self._points = np.zeros( + (0, self._points.shape[1] if len(self._points) > 0 else 0), dtype=float + ) def length(self) -> float: """Calculate the total length of the path. @@ -286,7 +292,9 @@ def smooth(self: T, weight: float = 0.5, iterations: int = 1) -> T: # Apply weighted average to middle points for i in range(1, len(smoothed_points) - 1): neighbor_avg = 0.5 * (smoothed_points[i - 1] + smoothed_points[i + 1]) - new_points[i] = (1 - weight) * smoothed_points[i] + weight * neighbor_avg + new_points[i] = (1 - weight) * smoothed_points[ + i + ] + weight * neighbor_avg new_points[-1] = smoothed_points[-1] # Keep last point unchanged smoothed_points = new_points diff --git a/dimos/types/pointcloud.py b/dimos/types/pointcloud.py index 7fbdaa0203..55c1aebc4a 100644 --- a/dimos/types/pointcloud.py +++ b/dimos/types/pointcloud.py @@ -15,6 +15,7 @@ import open3d as o3d from typing import Any + class PointCloudType: def __init__(self, point_cloud: o3d.geometry.PointCloud, metadata: Any = None): """ @@ -25,7 +26,7 @@ def __init__(self, point_cloud: o3d.geometry.PointCloud, metadata: Any = None): metadata (Any, optional): Additional metadata related to the point cloud. """ self.point_cloud = point_cloud - self.metadata = metadata + self.metadata = metadata def downsample(self, voxel_size: float): """Downsample the point cloud using a voxel grid filter.""" @@ -33,4 +34,4 @@ def downsample(self, voxel_size: float): def save_to_file(self, filepath: str): """Save the point cloud to a file.""" - o3d.io.write_point_cloud(filepath, self.point_cloud) \ No newline at end of file + o3d.io.write_point_cloud(filepath, self.point_cloud) diff --git a/dimos/types/robot_location.py b/dimos/types/robot_location.py index 6a7796193c..c69d131a04 100644 --- a/dimos/types/robot_location.py +++ b/dimos/types/robot_location.py @@ -21,14 +21,15 @@ import time import uuid + @dataclass class RobotLocation: """ Represents a named location in the robot's spatial memory. - + This class stores the position, rotation, and descriptive metadata for locations that the robot can remember and navigate to. - + Attributes: name: Human-readable name of the location (e.g., "kitchen", "office") position: 3D position coordinates (x, y, z) @@ -38,6 +39,7 @@ class RobotLocation: location_id: Unique identifier for this location metadata: Additional metadata for the location """ + name: str position: Tuple[float, float, float] rotation: Tuple[float, float, float] @@ -45,7 +47,7 @@ class RobotLocation: timestamp: float = field(default_factory=time.time) location_id: str = field(default_factory=lambda: f"loc_{uuid.uuid4().hex[:8]}") metadata: Dict[str, Any] = field(default_factory=dict) - + def __post_init__(self): """Validate and normalize the position and rotation tuples.""" # Ensure position is a tuple of 3 floats @@ -53,17 +55,17 @@ def __post_init__(self): self.position = (self.position[0], self.position[1], 0.0) else: self.position = tuple(float(x) for x in self.position) - + # Ensure rotation is a tuple of 3 floats if len(self.rotation) == 1: self.rotation = (0.0, 0.0, self.rotation[0]) else: self.rotation = tuple(float(x) for x in self.rotation) - + def to_vector_metadata(self) -> Dict[str, Any]: """ Convert the location to metadata format for storing in a vector database. - + Returns: Dictionary with metadata fields compatible with vector DB storage """ @@ -78,17 +80,17 @@ def to_vector_metadata(self) -> Dict[str, Any]: "location_id": self.location_id, "frame_id": self.frame_id, "location_name": self.name, - "description": self.name # Makes it searchable by text + "description": self.name, # Makes it searchable by text } - + @classmethod - def from_vector_metadata(cls, metadata: Dict[str, Any]) -> 'RobotLocation': + def from_vector_metadata(cls, metadata: Dict[str, Any]) -> "RobotLocation": """ Create a RobotLocation object from vector database metadata. - + Args: metadata: Dictionary with metadata from vector database - + Returns: RobotLocation object """ @@ -97,18 +99,32 @@ def from_vector_metadata(cls, metadata: Dict[str, Any]) -> 'RobotLocation': position=( metadata.get("pos_x", 0.0), metadata.get("pos_y", 0.0), - metadata.get("pos_z", 0.0) + metadata.get("pos_z", 0.0), ), rotation=( metadata.get("rot_x", 0.0), metadata.get("rot_y", 0.0), - metadata.get("rot_z", 0.0) + metadata.get("rot_z", 0.0), ), frame_id=metadata.get("frame_id"), timestamp=metadata.get("timestamp", time.time()), location_id=metadata.get("location_id", f"loc_{uuid.uuid4().hex[:8]}"), - metadata={k: v for k, v in metadata.items() if k not in [ - "pos_x", "pos_y", "pos_z", "rot_x", "rot_y", "rot_z", - "timestamp", "location_id", "frame_id", "location_name", "description" - ]} + metadata={ + k: v + for k, v in metadata.items() + if k + not in [ + "pos_x", + "pos_y", + "pos_z", + "rot_x", + "rot_y", + "rot_z", + "timestamp", + "location_id", + "frame_id", + "location_name", + "description", + ] + }, ) diff --git a/dimos/types/sample.py b/dimos/types/sample.py index d21ae240c6..7e88ec5441 100644 --- a/dimos/types/sample.py +++ b/dimos/types/sample.py @@ -31,7 +31,9 @@ from mbodied.data.utils import to_features from mbodied.utils.import_utils import smart_import -Flattenable = Annotated[Literal["dict", "np", "pt", "list"], "Numpy, PyTorch, list, or dict"] +Flattenable = Annotated[ + Literal["dict", "np", "pt", "list"], "Numpy, PyTorch, list, or dict" +] class Sample(BaseModel): @@ -71,7 +73,9 @@ class Sample(BaseModel): Sample(x=1, y=2, z={'a': 3, 'b': 4}, extra_field=5) """ - __doc__ = "A base model class for serializing, recording, and manipulating arbitray data." + __doc__ = ( + "A base model class for serializing, recording, and manipulating arbitray data." + ) model_config: ConfigDict = ConfigDict( use_enum_values=False, @@ -186,7 +190,9 @@ def flatten_recursive(obj, path=""): else: accumulator.extend(flat_list) else: - if non_numerical == "ignore" and not isinstance(obj, int | float | bool): + if non_numerical == "ignore" and not isinstance( + obj, int | float | bool + ): return final_key = path[:-1] # Remove trailing slash if output_type == "dict": @@ -196,7 +202,9 @@ def flatten_recursive(obj, path=""): flatten_recursive(self) accumulator = accumulator.values() if output_type == "dict" else accumulator - if non_numerical == "forbid" and any(not isinstance(v, int | float | bool) for v in accumulator): + if non_numerical == "forbid" and any( + not isinstance(v, int | float | bool) for v in accumulator + ): raise ValueError("Non-numerical values found in flattened data.") if output_type == "np": return np.array(accumulator) @@ -216,7 +224,10 @@ def obj_to_schema(value: Any) -> Dict: dict: A simplified JSON schema representing the structure of the dictionary. """ if isinstance(value, dict): - return {"type": "object", "properties": {k: Sample.obj_to_schema(v) for k, v in value.items()}} + return { + "type": "object", + "properties": {k: Sample.obj_to_schema(v) for k, v in value.items()}, + } if isinstance(value, list | tuple | np.ndarray): if len(value) > 0: return {"type": "array", "items": Sample.obj_to_schema(value[0])} @@ -260,7 +271,9 @@ def schema(self, resolve_refs: bool = True, include_descriptions=False) -> Dict: if key not in properties: properties[key] = Sample.obj_to_schema(value) if isinstance(value, Sample): - properties[key] = value.schema(resolve_refs=resolve_refs, include_descriptions=include_descriptions) + properties[key] = value.schema( + resolve_refs=resolve_refs, include_descriptions=include_descriptions + ) else: properties[key] = Sample.obj_to_schema(value) return schema @@ -358,7 +371,10 @@ def space_for( if isinstance(value, Sample): value = value.dict() return spaces.Dict( - {k: Sample.space_for(v, max_text_length, info) for k, v in value.items()}, + { + k: Sample.space_for(v, max_text_length, info) + for k, v in value.items() + }, ) if isinstance(value, str): return spaces.Text(max_length=max_text_length) @@ -391,12 +407,20 @@ def space_for( logging.info(f"Could not convert value {value} to numpy array: {e}") if len(value) > 0 and isinstance(value[0], dict | Sample): return spaces.Tuple( - [spaces.Dict(cls.space_for(v, max_text_length, info)) for v in value], + [ + spaces.Dict(cls.space_for(v, max_text_length, info)) + for v in value + ], ) return spaces.Tuple( - [cls.space_for(value[0], max_text_length, info) for value in value[:1]], + [ + cls.space_for(value[0], max_text_length, info) + for value in value[:1] + ], ) - raise ValueError(f"Unsupported object {value} of type: {type(value)} for space generation") + raise ValueError( + f"Unsupported object {value} of type: {type(value)} for space generation" + ) @classmethod def init_from(cls, d: Any, pack=False) -> "Sample": @@ -410,12 +434,16 @@ def init_from(cls, d: Any, pack=False) -> "Sample": try: return cls.model_validate(d) except ValidationError as e: - logging.info(f" Unable to validate {d} as {cls} {e}. Attempting to unflatten.") + logging.info( + f" Unable to validate {d} as {cls} {e}. Attempting to unflatten." + ) try: return cls.unflatten(d) except Exception as e: - logging.info(f" Unable to unflatten {d} as {cls} {e}. Attempting to read.") + logging.info( + f" Unable to unflatten {d} as {cls} {e}. Attempting to read." + ) return cls.read(d) return cls(d) @@ -497,15 +525,25 @@ def unpack(self, to_dicts=False) -> List[Union["Sample", Dict]]: return [] # Ensure all attributes are lists and have the same length - list_sizes = {len(getattr(self, attr)) for attr in attributes if isinstance(getattr(self, attr), list)} + list_sizes = { + len(getattr(self, attr)) + for attr in attributes + if isinstance(getattr(self, attr), list) + } if len(list_sizes) != 1: raise ValueError("Not all attribute lists have the same length.") list_size = list_sizes.pop() if to_dicts: - return [{key: getattr(self, key)[i] for key in attributes} for i in range(list_size)] + return [ + {key: getattr(self, key)[i] for key in attributes} + for i in range(list_size) + ] - return [self.__class__(**{key: getattr(self, key)[i] for key in attributes}) for i in range(list_size)] + return [ + self.__class__(**{key: getattr(self, key)[i] for key in attributes}) + for i in range(list_size) + ] @classmethod def default_space(cls) -> spaces.Dict: @@ -543,7 +581,11 @@ def space(self) -> spaces.Dict: logging.debug("Generating space for key: '%s', value: %s", key, value) info = self.model_field_info(key) value = getattr(self, key) if hasattr(self, key) else value # noqa: PLW2901 - space_dict[key] = value.space() if isinstance(value, Sample) else self.space_for(value, info=info) + space_dict[key] = ( + value.space() + if isinstance(value, Sample) + else self.space_for(value, info=info) + ) return spaces.Dict(space_dict) def random_sample(self) -> "Sample": @@ -555,4 +597,4 @@ def random_sample(self) -> "Sample": if __name__ == "__main__": - sample = Sample(x=1, y=2, z={"a": 3, "b": 4}, extra_field=5) \ No newline at end of file + sample = Sample(x=1, y=2, z={"a": 3, "b": 4}, extra_field=5) diff --git a/dimos/types/segmentation.py b/dimos/types/segmentation.py index 4b2c53f3a4..5995f302f9 100644 --- a/dimos/types/segmentation.py +++ b/dimos/types/segmentation.py @@ -15,6 +15,7 @@ from typing import List, Any import numpy as np + class SegmentationType: def __init__(self, masks: List[np.ndarray], metadata: Any = None): """ @@ -25,7 +26,7 @@ def __init__(self, masks: List[np.ndarray], metadata: Any = None): metadata (Any, optional): Additional metadata related to the segmentations. """ self.masks = masks - self.metadata = metadata + self.metadata = metadata def combine_masks(self): """Combine all masks into a single mask.""" @@ -37,6 +38,7 @@ def combine_masks(self): def save_masks(self, directory: str): """Save each mask to a separate file.""" import os + os.makedirs(directory, exist_ok=True) for i, mask in enumerate(self.masks): - np.save(os.path.join(directory, f"mask_{i}.npy"), mask) \ No newline at end of file + np.save(os.path.join(directory, f"mask_{i}.npy"), mask) diff --git a/dimos/types/vector.py b/dimos/types/vector.py index e8bb5b8308..96ae591d7e 100644 --- a/dimos/types/vector.py +++ b/dimos/types/vector.py @@ -198,7 +198,9 @@ def distance_squared(self, other) -> float: def angle(self, other) -> float: """Compute the angle (in radians) between this vector and another.""" - if self.length() < 1e-10 or (isinstance(other, Vector) and other.length() < 1e-10): + if self.length() < 1e-10 or ( + isinstance(other, Vector) and other.length() < 1e-10 + ): return 0.0 if isinstance(other, Vector): @@ -207,7 +209,8 @@ def angle(self, other) -> float: other_data = np.array(other, dtype=float) cos_angle = np.clip( - np.dot(self._data, other_data) / (np.linalg.norm(self._data) * np.linalg.norm(other_data)), + np.dot(self._data, other_data) + / (np.linalg.norm(self._data) * np.linalg.norm(other_data)), -1.0, 1.0, ) @@ -571,8 +574,12 @@ def z(value: VectorLike) -> float: print("Testing VectorLike Protocol:") print(f"isinstance(Vector(1,2), VectorLike): {isinstance(vec2d, VectorLike)}") print(f"isinstance(np.array([1,2]), VectorLike): {isinstance(arr2d, VectorLike)}") - print(f"isinstance((1,2), VectorLike): {isinstance((1.0, 2.0), VectorLike)}") - print(f"isinstance([1,2], VectorLike): {isinstance([1.0, 2.0], VectorLike)}") + print( + f"isinstance((1,2), VectorLike): {isinstance((1.0, 2.0), VectorLike)}" + ) + print( + f"isinstance([1,2], VectorLike): {isinstance([1.0, 2.0], VectorLike)}" + ) print() # Test mixed operations using different vector types @@ -589,6 +596,10 @@ def midpoint(a, b): return (a_np + b_np) / 2 print("Mixed operations between different vector types:") - print(f"distance(Vector(1,2,3), [4,5,6]): {distance(vec3d, [4.0, 5.0, 6.0])}") - print(f"distance(np.array([1,2,3]), (4,5,6)): {distance(arr3d, (4.0, 5.0, 6.0))}") + print( + f"distance(Vector(1,2,3), [4,5,6]): {distance(vec3d, [4.0, 5.0, 6.0])}" + ) + print( + f"distance(np.array([1,2,3]), (4,5,6)): {distance(arr3d, (4.0, 5.0, 6.0))}" + ) print(f"midpoint(Vector(1,2,3), np.array([4,5,6])): {midpoint(vec3d, numpy_arr)}") diff --git a/dimos/utils/extract_frames.py b/dimos/utils/extract_frames.py index d5a564930e..90366136ee 100644 --- a/dimos/utils/extract_frames.py +++ b/dimos/utils/extract_frames.py @@ -13,10 +13,10 @@ # limitations under the License. import cv2 -import os import argparse from pathlib import Path + def extract_frames(video_path, output_dir, frame_rate): """ Extract frames from a video file at a specified frame rate. @@ -63,11 +63,24 @@ def extract_frames(video_path, output_dir, frame_rate): cap.release() print(f"Extracted {saved_frame_count} frames to {output_dir}") + if __name__ == "__main__": parser = argparse.ArgumentParser(description="Extract frames from a video file.") - parser.add_argument("video_path", type=str, help="Path to the input .mov or .mp4 video file.") - parser.add_argument("--output_dir", type=str, default="frames", help="Directory to save extracted frames.") - parser.add_argument("--frame_rate", type=float, default=1.0, help="Frame rate at which to extract frames (frames per second).") + parser.add_argument( + "video_path", type=str, help="Path to the input .mov or .mp4 video file." + ) + parser.add_argument( + "--output_dir", + type=str, + default="frames", + help="Directory to save extracted frames.", + ) + parser.add_argument( + "--frame_rate", + type=float, + default=1.0, + help="Frame rate at which to extract frames (frames per second).", + ) args = parser.parse_args() diff --git a/dimos/utils/generic_subscriber.py b/dimos/utils/generic_subscriber.py index fd0cb5841f..462a94fe5e 100644 --- a/dimos/utils/generic_subscriber.py +++ b/dimos/utils/generic_subscriber.py @@ -29,12 +29,12 @@ def __init__(self, stream: Observable): self._subscription = stream.subscribe( on_next=self._on_next, on_error=self._on_error, - on_completed=self._on_completed + on_completed=self._on_completed, ) logger.debug(f"Subscribed to stream {stream}") except Exception as e: logger.error(f"Error subscribing to stream {stream}: {e}") - self._stream_error = e # Store error if subscription fails immediately + self._stream_error = e # Store error if subscription fails immediately else: logger.warning("Initialized GenericSubscriber with a None stream.") @@ -49,7 +49,7 @@ def _on_error(self, error: Exception): logger.error(f"Stream error: {error}") with self._lock: self._stream_error = error - self._stream_completed.set() # Signal completion/error + self._stream_completed.set() # Signal completion/error def _on_completed(self): """Callback for stream completion.""" @@ -86,7 +86,7 @@ def dispose(self): self._subscription = None except Exception as e: logger.error(f"Error disposing subscription: {e}") - self._stream_completed.set() # Ensure completed flag is set on manual dispose + self._stream_completed.set() # Ensure completed flag is set on manual dispose def __del__(self): """Ensure cleanup on object deletion.""" diff --git a/dimos/utils/logging_config.py b/dimos/utils/logging_config.py index 66877658ef..a1e1a25ca4 100644 --- a/dimos/utils/logging_config.py +++ b/dimos/utils/logging_config.py @@ -25,7 +25,9 @@ logging.basicConfig(format="%(name)s - %(levelname)s - %(message)s") -def setup_logger(name: str, level: Optional[int] = None, log_format: Optional[str] = None) -> logging.Logger: +def setup_logger( + name: str, level: Optional[int] = None, log_format: Optional[str] = None +) -> logging.Logger: """Set up a logger with color output. Args: diff --git a/dimos/utils/reactive.py b/dimos/utils/reactive.py index 0a609dd23e..4836e18987 100644 --- a/dimos/utils/reactive.py +++ b/dimos/utils/reactive.py @@ -71,7 +71,9 @@ def getter_ondemand(observable: Observable[T], timeout: Optional[float] = 30.0) def getter(): try: # Wait for first value with optional timeout - value = observable.pipe(ops.first(), *([ops.timeout(timeout)] if timeout is not None else [])).run() + value = observable.pipe( + ops.first(), *([ops.timeout(timeout)] if timeout is not None else []) + ).run() return value except Exception as e: raise Exception(f"No value received after {timeout} seconds") from e diff --git a/dimos/utils/ros_utils.py b/dimos/utils/ros_utils.py index 9423dfe6a1..33f26e38fb 100644 --- a/dimos/utils/ros_utils.py +++ b/dimos/utils/ros_utils.py @@ -1,16 +1,15 @@ -import math import numpy as np from typing import Tuple -from scipy.spatial.transform import Rotation as R import logging logger = logging.getLogger(__name__) + def normalize_angle(angle: float) -> float: """Normalize angle to [-pi, pi] range""" return np.arctan2(np.sin(angle), np.cos(angle)) + def distance_angle_to_goal_xy(distance: float, angle: float) -> Tuple[float, float]: """Convert distance and angle to goal x, y in robot frame""" return distance * np.cos(angle), distance * np.sin(angle) - diff --git a/dimos/utils/s3_utils.py b/dimos/utils/s3_utils.py index efca0eb2fb..ee68c0f527 100644 --- a/dimos/utils/s3_utils.py +++ b/dimos/utils/s3_utils.py @@ -14,15 +14,16 @@ import boto3 import os -from io import BytesIO + try: import open3d as o3d except Exception as e: print(f"Open3D not importing, assuming to be running outside of docker. {e}") + class S3Utils: def __init__(self, bucket_name): - self.s3 = boto3.client('s3') + self.s3 = boto3.client("s3") self.bucket_name = bucket_name def download_file(self, s3_key, local_path): @@ -40,12 +41,13 @@ def upload_file(self, local_path, s3_key): print(f"Error uploading {local_path}: {e}") def save_pointcloud_to_s3(self, inlier_cloud, s3_key): - try: temp_pcd_file = "/tmp/temp_pointcloud.pcd" o3d.io.write_point_cloud(temp_pcd_file, inlier_cloud) - with open(temp_pcd_file, 'rb') as pcd_file: - self.s3.put_object(Bucket=self.bucket_name, Key=s3_key, Body=pcd_file.read()) + with open(temp_pcd_file, "rb") as pcd_file: + self.s3.put_object( + Bucket=self.bucket_name, Key=s3_key, Body=pcd_file.read() + ) os.remove(temp_pcd_file) print(f"Saved pointcloud to {s3_key}") except Exception as e: @@ -57,11 +59,11 @@ def restore_pointcloud_from_s3(self, pointcloud_paths): for path in pointcloud_paths: # Download the point cloud file from S3 to memory pcd_obj = self.s3.get_object(Bucket=self.bucket_name, Key=path) - pcd_data = pcd_obj['Body'].read() + pcd_data = pcd_obj["Body"].read() # Save the point cloud data to a temporary file temp_pcd_file = "/tmp/temp_pointcloud.pcd" - with open(temp_pcd_file, 'wb') as f: + with open(temp_pcd_file, "wb") as f: f.write(pcd_data) # Read the point cloud from the temporary file @@ -72,22 +74,23 @@ def restore_pointcloud_from_s3(self, pointcloud_paths): os.remove(temp_pcd_file) return restored_pointclouds + @staticmethod def upload_text_file(bucket_name, local_path, s3_key): - s3 = boto3.client('s3') + s3 = boto3.client("s3") try: - with open(local_path, 'r') as file: + with open(local_path, "r") as file: content = file.read() # Ensure the s3_key includes the file name - if not s3_key.endswith('/'): - s3_key = s3_key + '/' + if not s3_key.endswith("/"): + s3_key = s3_key + "/" # Extract the file name from the local_path - file_name = local_path.split('/')[-1] + file_name = local_path.split("/")[-1] full_s3_key = s3_key + file_name s3.put_object(Bucket=bucket_name, Key=full_s3_key, Body=content) print(f"Uploaded text file {local_path} to {full_s3_key}") except Exception as e: - print(f"Error uploading text file {local_path}: {e}") \ No newline at end of file + print(f"Error uploading text file {local_path}: {e}") diff --git a/dimos/utils/simple_controller.py b/dimos/utils/simple_controller.py index f2b2d8ba03..ee03a6bbb3 100644 --- a/dimos/utils/simple_controller.py +++ b/dimos/utils/simple_controller.py @@ -1,17 +1,29 @@ import math + def normalize_angle(angle): """Normalize angle to the range [-pi, pi].""" return math.atan2(math.sin(angle), math.cos(angle)) + # ---------------------------- # PID Controller Class # ---------------------------- class PIDController: - def __init__(self, kp, ki=0.0, kd=0.0, output_limits=(None, None), integral_limit=None, deadband=0.0, output_deadband=0.0, inverse_output=False): + def __init__( + self, + kp, + ki=0.0, + kd=0.0, + output_limits=(None, None), + integral_limit=None, + deadband=0.0, + output_deadband=0.0, + inverse_output=False, + ): """ Initialize the PID controller. - + Args: kp (float): Proportional gain. ki (float): Integral gain. @@ -38,8 +50,10 @@ def update(self, error, dt): # Update integral term with windup protection. self.integral += error * dt if self.integral_limit is not None: - self.integral = max(-self.integral_limit, min(self.integral, self.integral_limit)) - + self.integral = max( + -self.integral_limit, min(self.integral, self.integral_limit) + ) + # Compute derivative term. derivative = (error - self.prev_error) / dt if dt > 0 else 0.0 @@ -47,34 +61,34 @@ def update(self, error, dt): # Prevent integral windup by not increasing integral term when error is small. self.integral = 0.0 derivative = 0.0 - + # Compute raw output. output = self.kp * error + self.ki * self.integral + self.kd * derivative - + # Apply deadband compensation to the output output = self._apply_output_deadband_compensation(output) - + # Apply output limits if specified. if self.max_output is not None: output = min(self.max_output, output) if self.min_output is not None: output = max(self.min_output, output) - + self.prev_error = error if self.inverse_output: return -output return output - + def _apply_output_deadband_compensation(self, output): """ Apply deadband compensation to the output. - + This simply adds the deadband value to the magnitude of the output while preserving the sign, ensuring we overcome the physical deadband. """ if self.output_deadband == 0.0 or output == 0.0: return output - + if output > self.max_output * 0.05: # For positive output, add the deadband return output + self.output_deadband @@ -83,16 +97,17 @@ def _apply_output_deadband_compensation(self, output): return output - self.output_deadband else: return output - + def _apply_deadband_compensation(self, error): """ Apply deadband compensation to the error. - + This maintains the original error value, as the deadband compensation will be applied to the output, not the error. """ return error + # ---------------------------- # Visual Servoing Controller Class # ---------------------------- @@ -100,7 +115,7 @@ class VisualServoingController: def __init__(self, distance_pid_params, angle_pid_params): """ Initialize the visual servoing controller using enhanced PID controllers. - + Args: distance_pid_params (tuple): (kp, ki, kd, output_limits, integral_limit, deadband) for distance. angle_pid_params (tuple): (kp, ki, kd, output_limits, integral_limit, deadband) for angle. @@ -109,30 +124,32 @@ def __init__(self, distance_pid_params, angle_pid_params): self.angle_pid = PIDController(*angle_pid_params) self.prev_measured_angle = 0.0 # Used for angular feed-forward damping - def compute_control(self, measured_distance, measured_angle, desired_distance, desired_angle, dt): + def compute_control( + self, measured_distance, measured_angle, desired_distance, desired_angle, dt + ): """ Compute the forward (x) and angular (z) commands. - + Args: measured_distance (float): Current distance to target (from camera). measured_angle (float): Current angular offset to target (radians). desired_distance (float): Desired distance to target. desired_angle (float): Desired angular offset (e.g., 0 for centered). dt (float): Timestep. - + Returns: tuple: (forward_command, angular_command) """ # Compute the errors. error_distance = measured_distance - desired_distance error_angle = normalize_angle(measured_angle - desired_angle) - + # Get raw PID outputs. forward_command_raw = self.distance_pid.update(error_distance, dt) angular_command_raw = self.angle_pid.update(error_angle, dt) - #print("forward: {} angular: {}".format(forward_command_raw, angular_command_raw)) - + # print("forward: {} angular: {}".format(forward_command_raw, angular_command_raw)) + angular_command = angular_command_raw # Couple forward command to angular error: @@ -140,4 +157,4 @@ def compute_control(self, measured_distance, measured_angle, desired_distance, d scaling_factor = max(0.0, min(1.0, math.exp(-2.0 * abs(error_angle)))) forward_command = forward_command_raw * scaling_factor - return forward_command, angular_command \ No newline at end of file + return forward_command, angular_command diff --git a/dimos/utils/test_reactive.py b/dimos/utils/test_reactive.py index 977863826a..14db988879 100644 --- a/dimos/utils/test_reactive.py +++ b/dimos/utils/test_reactive.py @@ -5,7 +5,12 @@ from reactivex import operators as ops from typing import Callable, TypeVar, Any from reactivex.disposable import Disposable -from dimos.utils.reactive import backpressure, getter_streaming, getter_ondemand, callback_to_observable +from dimos.utils.reactive import ( + backpressure, + getter_streaming, + getter_ondemand, + callback_to_observable, +) def measure_time(func: Callable[[], Any], iterations: int = 1) -> float: @@ -16,18 +21,28 @@ def measure_time(func: Callable[[], Any], iterations: int = 1) -> float: return result, total_time -def assert_time(func: Callable[[], Any], assertion: Callable[[int], bool], assert_fail_msg=None) -> None: +def assert_time( + func: Callable[[], Any], assertion: Callable[[int], bool], assert_fail_msg=None +) -> None: [result, total_time] = measure_time(func) assert assertion(total_time), assert_fail_msg + f", took {round(total_time, 2)}s" return result -def min_time(func: Callable[[], Any], min_t: int, assert_fail_msg="Function returned too fast"): - return assert_time(func, (lambda t: t > min_t), assert_fail_msg + f", min: {min_t} seconds") +def min_time( + func: Callable[[], Any], min_t: int, assert_fail_msg="Function returned too fast" +): + return assert_time( + func, (lambda t: t > min_t), assert_fail_msg + f", min: {min_t} seconds" + ) -def max_time(func: Callable[[], Any], max_t: int, assert_fail_msg="Function took too long"): - return assert_time(func, (lambda t: t < max_t), assert_fail_msg + f", max: {max_t} seconds") +def max_time( + func: Callable[[], Any], max_t: int, assert_fail_msg="Function took too long" +): + return assert_time( + func, (lambda t: t < max_t), assert_fail_msg + f", max: {max_t} seconds" + ) T = TypeVar("T") @@ -56,7 +71,11 @@ def test_backpressure_handling(): received_fast = [] received_slow = [] # Create an observable that emits numpy arrays instead of integers - source = dispose_spy(rx.interval(0.1).pipe(ops.map(lambda i: np.array([i, i + 1, i + 2])), ops.take(50))) + source = dispose_spy( + rx.interval(0.1).pipe( + ops.map(lambda i: np.array([i, i + 1, i + 2])), ops.take(50) + ) + ) # Wrap with backpressure handling safe_source = backpressure(source) @@ -65,7 +84,9 @@ def test_backpressure_handling(): subscription1 = safe_source.subscribe(lambda x: received_fast.append(x)) # Slow sub (shouldn't block above) - subscription2 = safe_source.subscribe(lambda x: (time.sleep(0.25), received_slow.append(x))) + subscription2 = safe_source.subscribe( + lambda x: (time.sleep(0.25), received_slow.append(x)) + ) time.sleep(2.5) @@ -76,16 +97,26 @@ def test_backpressure_handling(): assert source.is_disposed(), "Observable should be disposed" # Check results - print("Fast observer received:", len(received_fast), [arr[0] for arr in received_fast]) - print("Slow observer received:", len(received_slow), [arr[0] for arr in received_slow]) + print( + "Fast observer received:", len(received_fast), [arr[0] for arr in received_fast] + ) + print( + "Slow observer received:", len(received_slow), [arr[0] for arr in received_slow] + ) # Fast observer should get all or nearly all items - assert len(received_fast) > 15, f"Expected fast observer to receive most items, got {len(received_fast)}" + assert len(received_fast) > 15, ( + f"Expected fast observer to receive most items, got {len(received_fast)}" + ) # Slow observer should get fewer items due to backpressure handling - assert len(received_slow) < len(received_fast), "Slow observer should receive fewer items than fast observer" + assert len(received_slow) < len(received_fast), ( + "Slow observer should receive fewer items than fast observer" + ) # Specifically, processing at 0.25s means ~4 items per second, so expect 8-10 items - assert 7 <= len(received_slow) <= 11, f"Expected 7-11 items, got {len(received_slow)}" + assert 7 <= len(received_slow) <= 11, ( + f"Expected 7-11 items, got {len(received_slow)}" + ) # The slow observer should skip items (not process them in sequence) # We test this by checking that the difference between consecutive arrays is sometimes > 1 @@ -98,11 +129,21 @@ def test_backpressure_handling(): def test_getter_streaming_blocking(): - source = dispose_spy(rx.interval(0.2).pipe(ops.map(lambda i: np.array([i, i + 1, i + 2])), ops.take(50))) + source = dispose_spy( + rx.interval(0.2).pipe( + ops.map(lambda i: np.array([i, i + 1, i + 2])), ops.take(50) + ) + ) assert source.is_disposed() - getter = min_time(lambda: getter_streaming(source), 0.2, "Latest getter needs to block until first msg is ready") - assert np.array_equal(getter(), np.array([0, 1, 2])), f"Expected to get the first array [0,1,2], got {getter()}" + getter = min_time( + lambda: getter_streaming(source), + 0.2, + "Latest getter needs to block until first msg is ready", + ) + assert np.array_equal(getter(), np.array([0, 1, 2])), ( + f"Expected to get the first array [0,1,2], got {getter()}" + ) time.sleep(0.5) assert getter()[0] >= 2, f"Expected array with first value >= 2, got {getter()}" @@ -125,7 +166,9 @@ def test_getter_streaming_nonblocking(): source = dispose_spy(rx.interval(0.2).pipe(ops.take(50))) getter = max_time( - lambda: getter_streaming(source, nonblocking=True), 0.1, "nonblocking getter init shouldn't block" + lambda: getter_streaming(source, nonblocking=True), + 0.1, + "nonblocking getter init shouldn't block", ) min_time(getter, 0.2, "Expected for first value call to block if cache is empty") assert getter() == 0 @@ -156,7 +199,9 @@ def test_getter_ondemand(): source = dispose_spy(rx.interval(0.1).pipe(ops.take(50))) getter = getter_ondemand(source) assert source.is_disposed(), "Observable should be disposed" - assert min_time(getter, 0.05) == 0, f"Expected to get the first value of 0, got {getter()}" + assert min_time(getter, 0.05) == 0, ( + f"Expected to get the first value of 0, got {getter()}" + ) assert source.is_disposed(), "Observable should be disposed" assert getter() == 0, f"Expected to get the first value of 0, got {getter()}" assert source.is_disposed(), "Observable should be disposed" diff --git a/dimos/utils/threadpool.py b/dimos/utils/threadpool.py index 53b6f0de1f..cd2e7b16e5 100644 --- a/dimos/utils/threadpool.py +++ b/dimos/utils/threadpool.py @@ -31,7 +31,7 @@ def get_max_workers() -> int: int: The number of workers, configurable via the DIMOS_MAX_WORKERS environment variable, defaulting to 4 times the CPU count. """ - env_value = os.getenv('DIMOS_MAX_WORKERS', '') + env_value = os.getenv("DIMOS_MAX_WORKERS", "") return int(env_value) if env_value.strip() else multiprocessing.cpu_count() * 4 @@ -57,6 +57,7 @@ def get_scheduler() -> ThreadPoolScheduler: """ return scheduler + def make_single_thread_scheduler() -> ThreadPoolScheduler: """Create a new ThreadPoolScheduler with a single worker. diff --git a/dimos/web/dimos_interface/__init__.py b/dimos/web/dimos_interface/__init__.py index d3aa928a0d..5ca28b30e5 100644 --- a/dimos/web/dimos_interface/__init__.py +++ b/dimos/web/dimos_interface/__init__.py @@ -4,4 +4,4 @@ from .api.server import FastAPIServer -__all__ = ['FastAPIServer'] +__all__ = ["FastAPIServer"] diff --git a/dimos/web/dimos_interface/api/server.py b/dimos/web/dimos_interface/api/server.py index 14007ca4f4..1cb9ac24fb 100644 --- a/dimos/web/dimos_interface/api/server.py +++ b/dimos/web/dimos_interface/api/server.py @@ -27,7 +27,7 @@ # Fast Api & Uvicorn import cv2 from dimos.web.edge_io import EdgeIO -from fastapi import FastAPI, Request, Response, Form, HTTPException +from fastapi import FastAPI, Request, Form, HTTPException from fastapi.responses import HTMLResponse, StreamingResponse, JSONResponse from sse_starlette.sse import EventSourceResponse from fastapi.templating import Jinja2Templates @@ -46,20 +46,19 @@ class FastAPIServer(EdgeIO): - - - - def __init__(self, - dev_name="FastAPI Server", - edge_type="Bidirectional", - host="0.0.0.0", - port=5555, - text_streams=None, - **streams): + def __init__( + self, + dev_name="FastAPI Server", + edge_type="Bidirectional", + host="0.0.0.0", + port=5555, + text_streams=None, + **streams, + ): print("Starting FastAPIServer initialization...") # Debug print super().__init__(dev_name, edge_type) self.app = FastAPI() - + # Add CORS middleware with more permissive settings for development self.app.add_middleware( CORSMiddleware, @@ -67,13 +66,13 @@ def __init__(self, allow_credentials=True, allow_methods=["*"], allow_headers=["*"], - expose_headers=["*"] + expose_headers=["*"], ) - + self.port = port self.host = host BASE_DIR = Path(__file__).resolve().parent - self.templates = Jinja2Templates(directory=str(BASE_DIR / 'templates')) + self.templates = Jinja2Templates(directory=str(BASE_DIR / "templates")) self.streams = streams self.active_streams = {} self.stream_locks = {key: Lock() for key in self.streams} @@ -93,17 +92,19 @@ def __init__(self, for key in self.streams: if self.streams[key] is not None: self.active_streams[key] = self.streams[key].pipe( - ops.map(self.process_frame_fastapi), ops.share()) + ops.map(self.process_frame_fastapi), ops.share() + ) # Set up text stream subscriptions for key, stream in self.text_streams.items(): if stream is not None: self.text_queues[key] = Queue(maxsize=100) disposable = stream.subscribe( - lambda text, k=key: self.text_queues[k].put(text) - if text is not None else None, + lambda text, k=key: self.text_queues[k].put(text) + if text is not None + else None, lambda e, k=key: self.text_queues[k].put(None), - lambda k=key: self.text_queues[k].put(None) + lambda k=key: self.text_queues[k].put(None), ) self.text_disposables[key] = disposable self.disposables.add(disposable) @@ -114,7 +115,7 @@ def __init__(self, def process_frame_fastapi(self, frame): """Convert frame to JPEG format for streaming.""" - _, buffer = cv2.imencode('.jpg', frame) + _, buffer = cv2.imencode(".jpg", frame) return buffer.tobytes() def stream_generator(self, key): @@ -145,9 +146,11 @@ def generate(): disposable.disposable = self.active_streams[key].subscribe( lambda frame: frame_queue.put(frame) - if frame is not None else None, + if frame is not None + else None, lambda e: frame_queue.put(None), - lambda: frame_queue.put(None)) + lambda: frame_queue.put(None), + ) try: while True: @@ -155,9 +158,11 @@ def generate(): frame = frame_queue.get(timeout=1) if frame is None: break - yield (b'--frame\r\n' - b'Content-Type: image/jpeg\r\n\r\n' + frame + - b'\r\n') + yield ( + b"--frame\r\nContent-Type: image/jpeg\r\n\r\n" + + frame + + b"\r\n" + ) except Empty: # Instead of breaking, continue waiting for new frames continue @@ -173,7 +178,8 @@ def create_video_feed_route(self, key): async def video_feed(): return StreamingResponse( self.stream_generator(key)(), - media_type="multipart/x-mixed-replace; boundary=frame") + media_type="multipart/x-mixed-replace; boundary=frame", + ) return video_feed @@ -181,22 +187,18 @@ async def text_stream_generator(self, key): """Generate SSE events for text stream.""" client_id = id(object()) self.text_clients.add(client_id) - + try: while True: if key not in self.text_queues: yield {"event": "ping", "data": ""} await asyncio.sleep(0.1) continue - + try: text = self.text_queues[key].get_nowait() if text is not None: - yield { - "event": "message", - "id": key, - "data": text - } + yield {"event": "message", "id": key, "data": text} else: break except Empty: @@ -222,12 +224,15 @@ async def get_text_streams(): async def index(request: Request): stream_keys = list(self.streams.keys()) text_stream_keys = list(self.text_streams.keys()) - return self.templates.TemplateResponse("index_fastapi.html", { - "request": request, - "stream_keys": stream_keys, - "text_stream_keys": text_stream_keys - }) - + return self.templates.TemplateResponse( + "index_fastapi.html", + { + "request": request, + "stream_keys": stream_keys, + "text_stream_keys": text_stream_keys, + }, + ) + @self.app.post("/submit_query") async def submit_query(query: str = Form(...)): # Using Form directly as a dependency ensures proper form handling @@ -235,29 +240,20 @@ async def submit_query(query: str = Form(...)): if query: # Emit the query through our Subject self.query_subject.on_next(query) - return JSONResponse({ - "success": True, - "message": "Query received" - }) - return JSONResponse({ - "success": False, - "message": "No query provided" - }) + return JSONResponse({"success": True, "message": "Query received"}) + return JSONResponse({"success": False, "message": "No query provided"}) except Exception as e: # Ensure we always return valid JSON even on error - return JSONResponse(status_code=500, - content={ - "success": False, - "message": f"Server error: {str(e)}" - }) + return JSONResponse( + status_code=500, + content={"success": False, "message": f"Server error: {str(e)}"}, + ) + # Unitree API endpoints @self.app.get("/unitree/status") async def unitree_status(): """Check the status of the Unitree API server""" - return JSONResponse({ - "status": "online", - "service": "unitree" - }) + return JSONResponse({"status": "online", "service": "unitree"}) @self.app.post("/unitree/command") async def unitree_command(request: Request): @@ -265,43 +261,45 @@ async def unitree_command(request: Request): try: data = await request.json() command_text = data.get("command", "") - + # Emit the command through the query_subject self.query_subject.on_next(command_text) - + response = { "success": True, "command": command_text, - "result": f"Processed command: {command_text}" + "result": f"Processed command: {command_text}", } - + return JSONResponse(response) except Exception as e: - print(f"Error processing command: {str(e)}") + print(f"Error processing command: {str(e)}") return JSONResponse( status_code=500, content={ "success": False, - "message": f"Error processing command: {str(e)}" - } + "message": f"Error processing command: {str(e)}", + }, ) @self.app.get("/text_stream/{key}") async def text_stream(key: str): if key not in self.text_streams: - raise HTTPException(status_code=404, detail=f"Text stream '{key}' not found") + raise HTTPException( + status_code=404, detail=f"Text stream '{key}' not found" + ) return EventSourceResponse(self.text_stream_generator(key)) - for key in self.streams: - self.app.get(f"/video_feed/{key}")( - self.create_video_feed_route(key)) + self.app.get(f"/video_feed/{key}")(self.create_video_feed_route(key)) def run(self): """Run the FastAPI server.""" - uvicorn.run(self.app, host=self.host, port=self.port - ) # TODO: Translate structure to enable in-built workers' - + uvicorn.run( + self.app, host=self.host, port=self.port + ) # TODO: Translate structure to enable in-built workers' + + if __name__ == "__main__": server = FastAPIServer() - server.run() \ No newline at end of file + server.run() diff --git a/dimos/web/edge_io.py b/dimos/web/edge_io.py index de17f0220f..8511df2ce3 100644 --- a/dimos/web/edge_io.py +++ b/dimos/web/edge_io.py @@ -14,8 +14,9 @@ from reactivex.disposable import CompositeDisposable -class EdgeIO(): - def __init__(self, dev_name:str="NA", edge_type:str="Base"): + +class EdgeIO: + def __init__(self, dev_name: str = "NA", edge_type: str = "Base"): self.dev_name = dev_name self.edge_type = edge_type self.disposables = CompositeDisposable() diff --git a/dimos/web/fastapi_server.py b/dimos/web/fastapi_server.py index d639510150..ccf22524f1 100644 --- a/dimos/web/fastapi_server.py +++ b/dimos/web/fastapi_server.py @@ -25,7 +25,7 @@ # Fast Api & Uvicorn import cv2 from dimos.web.edge_io import EdgeIO -from fastapi import FastAPI, Request, Response, Form, HTTPException +from fastapi import FastAPI, Request, Form, HTTPException from fastapi.responses import HTMLResponse, StreamingResponse, JSONResponse from sse_starlette.sse import EventSourceResponse from fastapi.templating import Jinja2Templates @@ -43,26 +43,27 @@ class FastAPIServer(EdgeIO): - - def __init__(self, - dev_name="FastAPI Server", - edge_type="Bidirectional", - host="0.0.0.0", - port=5555, - text_streams=None, - **streams): + def __init__( + self, + dev_name="FastAPI Server", + edge_type="Bidirectional", + host="0.0.0.0", + port=5555, + text_streams=None, + **streams, + ): super().__init__(dev_name, edge_type) self.app = FastAPI() self.port = port self.host = host BASE_DIR = Path(__file__).resolve().parent - self.templates = Jinja2Templates(directory=str(BASE_DIR / 'templates')) + self.templates = Jinja2Templates(directory=str(BASE_DIR / "templates")) self.streams = streams self.active_streams = {} self.stream_locks = {key: Lock() for key in self.streams} self.stream_queues = {} self.stream_disposables = {} - + # Initialize text streams self.text_streams = text_streams or {} self.text_queues = {} @@ -76,17 +77,19 @@ def __init__(self, for key in self.streams: if self.streams[key] is not None: self.active_streams[key] = self.streams[key].pipe( - ops.map(self.process_frame_fastapi), ops.share()) - + ops.map(self.process_frame_fastapi), ops.share() + ) + # Set up text stream subscriptions for key, stream in self.text_streams.items(): if stream is not None: self.text_queues[key] = Queue(maxsize=100) disposable = stream.subscribe( - lambda text, k=key: self.text_queues[k].put(text) - if text is not None else None, + lambda text, k=key: self.text_queues[k].put(text) + if text is not None + else None, lambda e, k=key: self.text_queues[k].put(None), - lambda k=key: self.text_queues[k].put(None) + lambda k=key: self.text_queues[k].put(None), ) self.text_disposables[key] = disposable self.disposables.add(disposable) @@ -95,7 +98,7 @@ def __init__(self, def process_frame_fastapi(self, frame): """Convert frame to JPEG format for streaming.""" - _, buffer = cv2.imencode('.jpg', frame) + _, buffer = cv2.imencode(".jpg", frame) return buffer.tobytes() def stream_generator(self, key): @@ -126,9 +129,11 @@ def generate(): disposable.disposable = self.active_streams[key].subscribe( lambda frame: frame_queue.put(frame) - if frame is not None else None, + if frame is not None + else None, lambda e: frame_queue.put(None), - lambda: frame_queue.put(None)) + lambda: frame_queue.put(None), + ) try: while True: @@ -136,9 +141,11 @@ def generate(): frame = frame_queue.get(timeout=1) if frame is None: break - yield (b'--frame\r\n' - b'Content-Type: image/jpeg\r\n\r\n' + frame + - b'\r\n') + yield ( + b"--frame\r\nContent-Type: image/jpeg\r\n\r\n" + + frame + + b"\r\n" + ) except Empty: # Instead of breaking, continue waiting for new frames continue @@ -154,7 +161,8 @@ def create_video_feed_route(self, key): async def video_feed(): return StreamingResponse( self.stream_generator(key)(), - media_type="multipart/x-mixed-replace; boundary=frame") + media_type="multipart/x-mixed-replace; boundary=frame", + ) return video_feed @@ -162,28 +170,21 @@ async def text_stream_generator(self, key): """Generate SSE events for text stream.""" client_id = id(object()) self.text_clients.add(client_id) - + try: while True: if key in self.text_queues: try: text = self.text_queues[key].get(timeout=1) if text is not None: - yield { - "event": "message", - "id": key, - "data": text - } + yield {"event": "message", "id": key, "data": text} except Empty: # Send a keep-alive comment - yield { - "event": "ping", - "data": "" - } + yield {"event": "ping", "data": ""} await asyncio.sleep(0.1) finally: self.text_clients.remove(client_id) - + def setup_routes(self): """Set up FastAPI routes.""" @@ -191,11 +192,14 @@ def setup_routes(self): async def index(request: Request): stream_keys = list(self.streams.keys()) text_stream_keys = list(self.text_streams.keys()) - return self.templates.TemplateResponse("index_fastapi.html", { - "request": request, - "stream_keys": stream_keys, - "text_stream_keys": text_stream_keys - }) + return self.templates.TemplateResponse( + "index_fastapi.html", + { + "request": request, + "stream_keys": stream_keys, + "text_stream_keys": text_stream_keys, + }, + ) @self.app.post("/submit_query") async def submit_query(query: str = Form(...)): @@ -204,33 +208,28 @@ async def submit_query(query: str = Form(...)): if query: # Emit the query through our Subject self.query_subject.on_next(query) - return JSONResponse({ - "success": True, - "message": "Query received" - }) - return JSONResponse({ - "success": False, - "message": "No query provided" - }) + return JSONResponse({"success": True, "message": "Query received"}) + return JSONResponse({"success": False, "message": "No query provided"}) except Exception as e: # Ensure we always return valid JSON even on error - return JSONResponse(status_code=500, - content={ - "success": False, - "message": f"Server error: {str(e)}" - }) + return JSONResponse( + status_code=500, + content={"success": False, "message": f"Server error: {str(e)}"}, + ) @self.app.get("/text_stream/{key}") async def text_stream(key: str): if key not in self.text_streams: - raise HTTPException(status_code=404, detail=f"Text stream '{key}' not found") + raise HTTPException( + status_code=404, detail=f"Text stream '{key}' not found" + ) return EventSourceResponse(self.text_stream_generator(key)) for key in self.streams: - self.app.get(f"/video_feed/{key}")( - self.create_video_feed_route(key)) + self.app.get(f"/video_feed/{key}")(self.create_video_feed_route(key)) def run(self): """Run the FastAPI server.""" - uvicorn.run(self.app, host=self.host, port=self.port - ) # TODO: Translate structure to enable in-built workers' + uvicorn.run( + self.app, host=self.host, port=self.port + ) # TODO: Translate structure to enable in-built workers' diff --git a/dimos/web/flask_server.py b/dimos/web/flask_server.py index a7a5c59acf..1c52aaa056 100644 --- a/dimos/web/flask_server.py +++ b/dimos/web/flask_server.py @@ -20,8 +20,11 @@ from dimos.web.edge_io import EdgeIO + class FlaskServer(EdgeIO): - def __init__(self, dev_name="Flask Server", edge_type="Bidirectional", port=5555, **streams): + def __init__( + self, dev_name="Flask Server", edge_type="Bidirectional", port=5555, **streams + ): super().__init__(dev_name, edge_type) self.app = Flask(__name__) self.port = port @@ -33,22 +36,23 @@ def __init__(self, dev_name="Flask Server", edge_type="Bidirectional", port=5555 if self.streams[key] is not None: # Apply share and ref_count to manage subscriptions self.active_streams[key] = self.streams[key].pipe( - ops.map(self.process_frame_flask), - ops.share() + ops.map(self.process_frame_flask), ops.share() ) self.setup_routes() - + def process_frame_flask(self, frame): """Convert frame to JPEG format for streaming.""" - _, buffer = cv2.imencode('.jpg', frame) + _, buffer = cv2.imencode(".jpg", frame) return buffer.tobytes() def setup_routes(self): - @self.app.route('/') + @self.app.route("/") def index(): - stream_keys = list(self.streams.keys()) # Get the keys from the streams dictionary - return render_template('index_flask.html', stream_keys=stream_keys) + stream_keys = list( + self.streams.keys() + ) # Get the keys from the streams dictionary + return render_template("index_flask.html", stream_keys=stream_keys) # Function to create a streaming response def stream_generator(key): @@ -59,9 +63,11 @@ def generate(): # Subscribe to the shared, ref-counted stream if key in self.active_streams: disposable.disposable = self.active_streams[key].subscribe( - lambda frame: frame_queue.put(frame) if frame is not None else None, + lambda frame: frame_queue.put(frame) + if frame is not None + else None, lambda e: frame_queue.put(None), - lambda: frame_queue.put(None) + lambda: frame_queue.put(None), ) try: @@ -69,24 +75,32 @@ def generate(): frame = frame_queue.get() if frame is None: break - yield (b'--frame\r\n' - b'Content-Type: image/jpeg\r\n\r\n' + frame + b'\r\n') + yield ( + b"--frame\r\nContent-Type: image/jpeg\r\n\r\n" + + frame + + b"\r\n" + ) finally: disposable.dispose() return generate - + def make_response_generator(key): def response_generator(): - return Response(stream_generator(key)(), mimetype='multipart/x-mixed-replace; boundary=frame') + return Response( + stream_generator(key)(), + mimetype="multipart/x-mixed-replace; boundary=frame", + ) + return response_generator # Dynamically adding routes using add_url_rule for key in self.streams: - endpoint = f'video_feed_{key}' + endpoint = f"video_feed_{key}" self.app.add_url_rule( - f'/video_feed/{key}', endpoint, view_func=make_response_generator(key)) + f"/video_feed/{key}", endpoint, view_func=make_response_generator(key) + ) - def run(self, host='0.0.0.0', port=5555, threaded=True): + def run(self, host="0.0.0.0", port=5555, threaded=True): self.port = port self.app.run(host=host, port=self.port, debug=False, threaded=threaded) diff --git a/dimos/web/robot_web_interface.py b/dimos/web/robot_web_interface.py index ea773994d9..72dcce9d29 100644 --- a/dimos/web/robot_web_interface.py +++ b/dimos/web/robot_web_interface.py @@ -17,14 +17,12 @@ Provides a clean interface to the dimensional-interface FastAPI server. """ -import os -import sys - from dimos.web.dimos_interface.api.server import FastAPIServer + class RobotWebInterface(FastAPIServer): """Wrapper class for the dimos-interface FastAPI server.""" - + def __init__(self, port=5555, text_streams=None, **streams): super().__init__( dev_name="Robot Web Interface", @@ -32,5 +30,5 @@ def __init__(self, port=5555, text_streams=None, **streams): host="0.0.0.0", port=port, text_streams=text_streams, - **streams - ) \ No newline at end of file + **streams, + ) diff --git a/dimos/web/websocket_vis/helpers.py b/dimos/web/websocket_vis/helpers.py index af77380c1a..4382de3fa1 100644 --- a/dimos/web/websocket_vis/helpers.py +++ b/dimos/web/websocket_vis/helpers.py @@ -1,8 +1,5 @@ -import threading -import time -from dataclasses import dataclass, field from abc import ABC -from typing import Tuple, Callable, Optional +from typing import Tuple, Callable from dimos.types.path import Path from dimos.types.vector import Vector @@ -30,7 +27,11 @@ def vis(self, name: str, drawable: Drawable) -> None: def vector_stream( - name: str, pos: Callable[[], Vector], update_interval=0.1, precision=0.25, history=10 + name: str, + pos: Callable[[], Vector], + update_interval=0.1, + precision=0.25, + history=10, ) -> Observable[Tuple[str, Drawable]]: return rx.interval(update_interval).pipe( ops.map(lambda _: pos()), @@ -41,5 +42,7 @@ def vector_stream( lambda hist, cur: hist.ipush(cur).iclip_tail(history), seed=Path(), ), - ops.flat_map(lambda path: rx.from_([(f"{name}_hst", path), (name, path.last())])), + ops.flat_map( + lambda path: rx.from_([(f"{name}_hst", path), (name, path.last())]) + ), ) diff --git a/dimos/web/websocket_vis/server.py b/dimos/web/websocket_vis/server.py index ea9fbb00d5..ad553257d9 100644 --- a/dimos/web/websocket_vis/server.py +++ b/dimos/web/websocket_vis/server.py @@ -72,7 +72,11 @@ def deep_merge(source, destination): Lists are replaced, not merged. """ for key, value in source.items(): - if key in destination and isinstance(destination[key], dict) and isinstance(value, dict): + if ( + key in destination + and isinstance(destination[key], dict) + and isinstance(value, dict) + ): # If both values are dictionaries, recursively deep merge them deep_merge(value, destination[key]) else: diff --git a/docker/dev/Dockerfile b/docker/dev/Dockerfile index 058221cfe1..73c3dab780 100644 --- a/docker/dev/Dockerfile +++ b/docker/dev/Dockerfile @@ -15,6 +15,9 @@ RUN apt-get install -y \ iputils-ping \ wget +COPY docker/dev/dev-requirements.txt /app/ +RUN --mount=type=cache,target=/root/.cache/pip pip install -r dev-requirements.txt + # Copy files and add version to motd COPY motd /etc/motd COPY /docker/dev/bash.sh /root/.bash.sh diff --git a/docker/dev/dev-requirements.txt b/docker/dev/dev-requirements.txt new file mode 100644 index 0000000000..965af4cc9d --- /dev/null +++ b/docker/dev/dev-requirements.txt @@ -0,0 +1,2 @@ +ruff==0.11.10 +mypy==1.15.0 diff --git a/pyproject.toml b/pyproject.toml index 1ffe5399bc..6d6dd776dd 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -8,6 +8,23 @@ description = "Powering agentive generalist robotics" [tool.ruff] line-length = 120 +exclude = [ + ".git", + ".pytest_cache", + ".ruff_cache", + ".venv", + ".vscode", + "__pypackages__", + "_build", + "build", + "dist", + "node_modules", + "site-packages", + "venv", + "libs", + "external", + "src" +] [tool.pytest.ini_options] testpaths = ["dimos/robot"]