1231: g0plus dockerfile
Browse filesThis view is limited to 50 files because it contains too many changes. See raw diff
- .gitattributes +40 -0
- g0plus_dockerfile/.gitignore +3 -0
- g0plus_dockerfile/Dockerfile +122 -0
- g0plus_dockerfile/README.md +18 -0
- g0plus_dockerfile/docker-assets/code/Hierarchical_System/.gitignore +7 -0
- g0plus_dockerfile/docker-assets/code/Hierarchical_System/README.md +110 -0
- g0plus_dockerfile/docker-assets/code/Hierarchical_System/README.md.zh +111 -0
- g0plus_dockerfile/docker-assets/code/Hierarchical_System/src/g0_vlm_node/g0_vlm_node/__init__.py +0 -0
- g0plus_dockerfile/docker-assets/code/Hierarchical_System/src/g0_vlm_node/g0_vlm_node/utils/__init__.py +2 -0
- g0plus_dockerfile/docker-assets/code/Hierarchical_System/src/g0_vlm_node/g0_vlm_node/utils/utils_online.py +418 -0
- g0plus_dockerfile/docker-assets/code/Hierarchical_System/src/g0_vlm_node/g0_vlm_node/vlm_main.py +371 -0
- g0plus_dockerfile/docker-assets/code/Hierarchical_System/src/g0_vlm_node/package.xml +28 -0
- g0plus_dockerfile/docker-assets/code/Hierarchical_System/src/g0_vlm_node/resource/g0_vlm_node +0 -0
- g0plus_dockerfile/docker-assets/code/Hierarchical_System/src/g0_vlm_node/setup.cfg +4 -0
- g0plus_dockerfile/docker-assets/code/Hierarchical_System/src/g0_vlm_node/setup.py +30 -0
- g0plus_dockerfile/docker-assets/code/Hierarchical_System/src/g0_vlm_node/test/test_copyright.py +25 -0
- g0plus_dockerfile/docker-assets/code/Hierarchical_System/src/g0_vlm_node/test/test_flake8.py +25 -0
- g0plus_dockerfile/docker-assets/code/Hierarchical_System/src/g0_vlm_node/test/test_pep257.py +23 -0
- g0plus_dockerfile/docker-assets/code/Hierarchical_System/src/vla/CMakeLists.txt +21 -0
- g0plus_dockerfile/docker-assets/code/Hierarchical_System/src/vla/msg/VLAPromptEcho.msg +5 -0
- g0plus_dockerfile/docker-assets/code/Hierarchical_System/src/vla/package.xml +18 -0
- g0plus_dockerfile/docker-assets/code/Hierarchical_System/src/vla/srv/VLMInstruction.srv +4 -0
- g0plus_dockerfile/docker-assets/data/TensorRT-10.13.0.35/data/char-rnn/char-rnn.wts +3 -0
- g0plus_dockerfile/docker-assets/data/TensorRT-10.13.0.35/data/char-rnn/model/checkpoint +6 -0
- g0plus_dockerfile/docker-assets/data/TensorRT-10.13.0.35/data/char-rnn/model/model-20080.data-00000-of-00001 +3 -0
- g0plus_dockerfile/docker-assets/data/TensorRT-10.13.0.35/data/char-rnn/model/model-20080.index +0 -0
- g0plus_dockerfile/docker-assets/data/TensorRT-10.13.0.35/data/char-rnn/model/model-20080.meta +3 -0
- g0plus_dockerfile/docker-assets/data/TensorRT-10.13.0.35/data/int8_api/README.md +11 -0
- g0plus_dockerfile/docker-assets/data/TensorRT-10.13.0.35/data/int8_api/airliner.ppm +3 -0
- g0plus_dockerfile/docker-assets/data/TensorRT-10.13.0.35/data/int8_api/reference_labels.txt +1000 -0
- g0plus_dockerfile/docker-assets/data/TensorRT-10.13.0.35/data/int8_api/resnet50_per_tensor_dynamic_range.txt +183 -0
- g0plus_dockerfile/docker-assets/data/TensorRT-10.13.0.35/data/mnist/0.pgm +0 -0
- g0plus_dockerfile/docker-assets/data/TensorRT-10.13.0.35/data/mnist/1.pgm +0 -0
- g0plus_dockerfile/docker-assets/data/TensorRT-10.13.0.35/data/mnist/2.pgm +0 -0
- g0plus_dockerfile/docker-assets/data/TensorRT-10.13.0.35/data/mnist/3.pgm +0 -0
- g0plus_dockerfile/docker-assets/data/TensorRT-10.13.0.35/data/mnist/4.pgm +0 -0
- g0plus_dockerfile/docker-assets/data/TensorRT-10.13.0.35/data/mnist/5.pgm +0 -0
- g0plus_dockerfile/docker-assets/data/TensorRT-10.13.0.35/data/mnist/6.pgm +0 -0
- g0plus_dockerfile/docker-assets/data/TensorRT-10.13.0.35/data/mnist/7.pgm +0 -0
- g0plus_dockerfile/docker-assets/data/TensorRT-10.13.0.35/data/mnist/8.pgm +0 -0
- g0plus_dockerfile/docker-assets/data/TensorRT-10.13.0.35/data/mnist/9.pgm +4 -0
- g0plus_dockerfile/docker-assets/data/TensorRT-10.13.0.35/data/mnist/README.md +20 -0
- g0plus_dockerfile/docker-assets/data/TensorRT-10.13.0.35/data/mnist/mnist.onnx +3 -0
- g0plus_dockerfile/docker-assets/data/TensorRT-10.13.0.35/data/resnet50/README.md +13 -0
- g0plus_dockerfile/docker-assets/data/TensorRT-10.13.0.35/data/resnet50/ResNet50.onnx +3 -0
- g0plus_dockerfile/docker-assets/data/TensorRT-10.13.0.35/data/resnet50/airliner.ppm +3 -0
- g0plus_dockerfile/docker-assets/data/TensorRT-10.13.0.35/data/resnet50/binoculars.jpeg +3 -0
- g0plus_dockerfile/docker-assets/data/TensorRT-10.13.0.35/data/resnet50/class_labels.txt +1000 -0
- g0plus_dockerfile/docker-assets/data/TensorRT-10.13.0.35/data/resnet50/reflex_camera.jpeg +0 -0
- g0plus_dockerfile/docker-assets/data/TensorRT-10.13.0.35/data/resnet50/tabby_tiger_cat.jpg +3 -0
.gitattributes
CHANGED
|
@@ -922,3 +922,43 @@ G0Plus_Finetune_LeRobot_Datasets_Demo/BENCH_Pick_And_Place_20_Items57_Evenly_Dis
|
|
| 922 |
G0Plus_PP_CKPT/decode.fp16.engine filter=lfs diff=lfs merge=lfs -text
|
| 923 |
G0Plus_PP_CKPT/gemma_rmsnorm.so filter=lfs diff=lfs merge=lfs -text
|
| 924 |
G0Plus_PP_CKPT/prefill.fp16.engine filter=lfs diff=lfs merge=lfs -text
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 922 |
G0Plus_PP_CKPT/decode.fp16.engine filter=lfs diff=lfs merge=lfs -text
|
| 923 |
G0Plus_PP_CKPT/gemma_rmsnorm.so filter=lfs diff=lfs merge=lfs -text
|
| 924 |
G0Plus_PP_CKPT/prefill.fp16.engine filter=lfs diff=lfs merge=lfs -text
|
| 925 |
+
g0plus_dockerfile/docker-assets/data/TensorRT-10.13.0.35/data/char-rnn/char-rnn.wts filter=lfs diff=lfs merge=lfs -text
|
| 926 |
+
g0plus_dockerfile/docker-assets/data/TensorRT-10.13.0.35/data/char-rnn/model/model-20080.data-00000-of-00001 filter=lfs diff=lfs merge=lfs -text
|
| 927 |
+
g0plus_dockerfile/docker-assets/data/TensorRT-10.13.0.35/data/char-rnn/model/model-20080.meta filter=lfs diff=lfs merge=lfs -text
|
| 928 |
+
g0plus_dockerfile/docker-assets/data/TensorRT-10.13.0.35/data/int8_api/airliner.ppm filter=lfs diff=lfs merge=lfs -text
|
| 929 |
+
g0plus_dockerfile/docker-assets/data/TensorRT-10.13.0.35/data/resnet50/airliner.ppm filter=lfs diff=lfs merge=lfs -text
|
| 930 |
+
g0plus_dockerfile/docker-assets/data/TensorRT-10.13.0.35/data/resnet50/binoculars.jpeg filter=lfs diff=lfs merge=lfs -text
|
| 931 |
+
g0plus_dockerfile/docker-assets/data/TensorRT-10.13.0.35/data/resnet50/tabby_tiger_cat.jpg filter=lfs diff=lfs merge=lfs -text
|
| 932 |
+
g0plus_dockerfile/docker-assets/data/TensorRT-10.13.0.35/python/tensorrt_dispatch-10.13.0.35-cp310-none-linux_x86_64.whl filter=lfs diff=lfs merge=lfs -text
|
| 933 |
+
g0plus_dockerfile/docker-assets/data/TensorRT-10.13.0.35/python/tensorrt_dispatch-10.13.0.35-cp311-none-linux_x86_64.whl filter=lfs diff=lfs merge=lfs -text
|
| 934 |
+
g0plus_dockerfile/docker-assets/data/TensorRT-10.13.0.35/python/tensorrt_dispatch-10.13.0.35-cp312-none-linux_x86_64.whl filter=lfs diff=lfs merge=lfs -text
|
| 935 |
+
g0plus_dockerfile/docker-assets/data/TensorRT-10.13.0.35/python/tensorrt_dispatch-10.13.0.35-cp313-none-linux_x86_64.whl filter=lfs diff=lfs merge=lfs -text
|
| 936 |
+
g0plus_dockerfile/docker-assets/data/TensorRT-10.13.0.35/python/tensorrt_dispatch-10.13.0.35-cp38-none-linux_x86_64.whl filter=lfs diff=lfs merge=lfs -text
|
| 937 |
+
g0plus_dockerfile/docker-assets/data/TensorRT-10.13.0.35/python/tensorrt_dispatch-10.13.0.35-cp39-none-linux_x86_64.whl filter=lfs diff=lfs merge=lfs -text
|
| 938 |
+
g0plus_dockerfile/docker-assets/data/TensorRT-10.13.0.35/python/tensorrt_lean-10.13.0.35-cp310-none-linux_x86_64.whl filter=lfs diff=lfs merge=lfs -text
|
| 939 |
+
g0plus_dockerfile/docker-assets/data/TensorRT-10.13.0.35/python/tensorrt_lean-10.13.0.35-cp311-none-linux_x86_64.whl filter=lfs diff=lfs merge=lfs -text
|
| 940 |
+
g0plus_dockerfile/docker-assets/data/TensorRT-10.13.0.35/python/tensorrt_lean-10.13.0.35-cp312-none-linux_x86_64.whl filter=lfs diff=lfs merge=lfs -text
|
| 941 |
+
g0plus_dockerfile/docker-assets/data/TensorRT-10.13.0.35/python/tensorrt_lean-10.13.0.35-cp313-none-linux_x86_64.whl filter=lfs diff=lfs merge=lfs -text
|
| 942 |
+
g0plus_dockerfile/docker-assets/data/TensorRT-10.13.0.35/python/tensorrt_lean-10.13.0.35-cp38-none-linux_x86_64.whl filter=lfs diff=lfs merge=lfs -text
|
| 943 |
+
g0plus_dockerfile/docker-assets/data/TensorRT-10.13.0.35/python/tensorrt_lean-10.13.0.35-cp39-none-linux_x86_64.whl filter=lfs diff=lfs merge=lfs -text
|
| 944 |
+
g0plus_dockerfile/docker-assets/data/TensorRT-10.13.0.35/python/tensorrt-10.13.0.35-cp310-none-linux_x86_64.whl filter=lfs diff=lfs merge=lfs -text
|
| 945 |
+
g0plus_dockerfile/docker-assets/data/TensorRT-10.13.0.35/python/tensorrt-10.13.0.35-cp311-none-linux_x86_64.whl filter=lfs diff=lfs merge=lfs -text
|
| 946 |
+
g0plus_dockerfile/docker-assets/data/TensorRT-10.13.0.35/python/tensorrt-10.13.0.35-cp312-none-linux_x86_64.whl filter=lfs diff=lfs merge=lfs -text
|
| 947 |
+
g0plus_dockerfile/docker-assets/data/TensorRT-10.13.0.35/python/tensorrt-10.13.0.35-cp313-none-linux_x86_64.whl filter=lfs diff=lfs merge=lfs -text
|
| 948 |
+
g0plus_dockerfile/docker-assets/data/TensorRT-10.13.0.35/python/tensorrt-10.13.0.35-cp38-none-linux_x86_64.whl filter=lfs diff=lfs merge=lfs -text
|
| 949 |
+
g0plus_dockerfile/docker-assets/data/TensorRT-10.13.0.35/python/tensorrt-10.13.0.35-cp39-none-linux_x86_64.whl filter=lfs diff=lfs merge=lfs -text
|
| 950 |
+
g0plus_dockerfile/docker-assets/data/TensorRT-10.13.0.35/targets/x86_64-linux-gnu/bin/trtexec filter=lfs diff=lfs merge=lfs -text
|
| 951 |
+
g0plus_dockerfile/docker-assets/data/TensorRT-10.13.0.35/targets/x86_64-linux-gnu/lib/libnvinfer_builder_resource_win.so.10.13.0 filter=lfs diff=lfs merge=lfs -text
|
| 952 |
+
g0plus_dockerfile/docker-assets/data/TensorRT-10.13.0.35/targets/x86_64-linux-gnu/lib/libnvinfer_builder_resource.so.10.13.0 filter=lfs diff=lfs merge=lfs -text
|
| 953 |
+
g0plus_dockerfile/docker-assets/data/TensorRT-10.13.0.35/targets/x86_64-linux-gnu/lib/libnvinfer_dispatch_static.a filter=lfs diff=lfs merge=lfs -text
|
| 954 |
+
g0plus_dockerfile/docker-assets/data/TensorRT-10.13.0.35/targets/x86_64-linux-gnu/lib/libnvinfer_dispatch.so.10.13.0 filter=lfs diff=lfs merge=lfs -text
|
| 955 |
+
g0plus_dockerfile/docker-assets/data/TensorRT-10.13.0.35/targets/x86_64-linux-gnu/lib/libnvinfer_lean_static.a filter=lfs diff=lfs merge=lfs -text
|
| 956 |
+
g0plus_dockerfile/docker-assets/data/TensorRT-10.13.0.35/targets/x86_64-linux-gnu/lib/libnvinfer_lean.so.10.13.0 filter=lfs diff=lfs merge=lfs -text
|
| 957 |
+
g0plus_dockerfile/docker-assets/data/TensorRT-10.13.0.35/targets/x86_64-linux-gnu/lib/libnvinfer_plugin_static.a filter=lfs diff=lfs merge=lfs -text
|
| 958 |
+
g0plus_dockerfile/docker-assets/data/TensorRT-10.13.0.35/targets/x86_64-linux-gnu/lib/libnvinfer_plugin.so.10.13.0 filter=lfs diff=lfs merge=lfs -text
|
| 959 |
+
g0plus_dockerfile/docker-assets/data/TensorRT-10.13.0.35/targets/x86_64-linux-gnu/lib/libnvinfer_static.a filter=lfs diff=lfs merge=lfs -text
|
| 960 |
+
g0plus_dockerfile/docker-assets/data/TensorRT-10.13.0.35/targets/x86_64-linux-gnu/lib/libnvinfer_vc_plugin_static.a filter=lfs diff=lfs merge=lfs -text
|
| 961 |
+
g0plus_dockerfile/docker-assets/data/TensorRT-10.13.0.35/targets/x86_64-linux-gnu/lib/libnvinfer_vc_plugin.so.10.13.0 filter=lfs diff=lfs merge=lfs -text
|
| 962 |
+
g0plus_dockerfile/docker-assets/data/TensorRT-10.13.0.35/targets/x86_64-linux-gnu/lib/libnvinfer.so.10.13.0 filter=lfs diff=lfs merge=lfs -text
|
| 963 |
+
g0plus_dockerfile/docker-assets/data/TensorRT-10.13.0.35/targets/x86_64-linux-gnu/lib/libnvonnxparser_static.a filter=lfs diff=lfs merge=lfs -text
|
| 964 |
+
g0plus_dockerfile/docker-assets/data/TensorRT-10.13.0.35/targets/x86_64-linux-gnu/lib/libnvonnxparser.so.10.13.0 filter=lfs diff=lfs merge=lfs -text
|
g0plus_dockerfile/.gitignore
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
**/GalaxeaFM/*
|
| 2 |
+
**/EFMNode/*
|
| 3 |
+
docker-assets/data/*
|
g0plus_dockerfile/Dockerfile
ADDED
|
@@ -0,0 +1,122 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
FROM althack/ros2:humble-full AS base
|
| 2 |
+
|
| 3 |
+
# Switch to root for system operations
|
| 4 |
+
USER root
|
| 5 |
+
|
| 6 |
+
# Set timezone / locale if needed
|
| 7 |
+
ENV DEBIAN_FRONTEND=noninteractive
|
| 8 |
+
|
| 9 |
+
# Install necessary build tools
|
| 10 |
+
RUN apt-get update && \
|
| 11 |
+
apt-get install -y --no-install-recommends \
|
| 12 |
+
build-essential \
|
| 13 |
+
curl \
|
| 14 |
+
net-tools \
|
| 15 |
+
iputils-ping \
|
| 16 |
+
ros-${ROS_DISTRO}-rosbag2-storage-mcap \
|
| 17 |
+
ros-${ROS_DISTRO}-rosbridge-server \
|
| 18 |
+
git \
|
| 19 |
+
ca-certificates \
|
| 20 |
+
tmux \
|
| 21 |
+
vim \
|
| 22 |
+
&& \
|
| 23 |
+
rm -rf /var/lib/apt/lists/*
|
| 24 |
+
|
| 25 |
+
# TensorRT related setup
|
| 26 |
+
COPY docker-assets/data/TensorRT-10.13.0.35 /usr/TensorRT-10.13.0.35
|
| 27 |
+
|
| 28 |
+
# Ensure ros user owns home directory
|
| 29 |
+
RUN chown -R ros:ros /home/ros
|
| 30 |
+
|
| 31 |
+
# Switch to ros user
|
| 32 |
+
USER ros
|
| 33 |
+
WORKDIR /home/ros/g0plus_ros2
|
| 34 |
+
|
| 35 |
+
|
| 36 |
+
# ============================================
|
| 37 |
+
# Put in code folders
|
| 38 |
+
# ============================================
|
| 39 |
+
RUN --mount=type=secret,id=git_token,uid=1000,gid=1000 \
|
| 40 |
+
GIT_TOKEN=$(cat /run/secrets/git_token) && \
|
| 41 |
+
git clone https://${GIT_TOKEN}@github.com/OpenGalaxea/GalaxeaVLA.git -b features/opensource
|
| 42 |
+
RUN --mount=type=secret,id=git_token,uid=1000,gid=1000 \
|
| 43 |
+
GIT_TOKEN=$(cat /run/secrets/git_token) && \
|
| 44 |
+
git clone https://${GIT_TOKEN}@github.com/OpenGalaxea/EFMNode.git -b dev/pp_trt
|
| 45 |
+
COPY --chown=ros:ros docker-assets/code/Hierarchical_System /home/ros/g0plus_ros2/Hierarchical_System
|
| 46 |
+
|
| 47 |
+
|
| 48 |
+
# ============================================
|
| 49 |
+
# UV installation
|
| 50 |
+
# ============================================
|
| 51 |
+
WORKDIR /home/ros
|
| 52 |
+
ARG http_proxy
|
| 53 |
+
ARG https_proxy
|
| 54 |
+
|
| 55 |
+
RUN bash -c "\
|
| 56 |
+
curl -LsSf https://astral.sh/uv/install.sh | bash && \
|
| 57 |
+
~/.local/bin/uv --version \
|
| 58 |
+
"
|
| 59 |
+
ENV PATH="/home/ros/.local/bin:${PATH}"
|
| 60 |
+
|
| 61 |
+
# ============================================
|
| 62 |
+
# Complete G0plus setup
|
| 63 |
+
# ============================================
|
| 64 |
+
WORKDIR /home/ros/g0plus_ros2/GalaxeaVLA
|
| 65 |
+
|
| 66 |
+
ENV UV_DEFAULT_INDEX=https://mirrors.aliyun.com/pypi/simple/
|
| 67 |
+
ENV UV_PYTHON_INSTALL_MIRROR=https://gh-proxy.com/https://github.com/astral-sh/python-build-standalone/releases/download
|
| 68 |
+
ENV UV_HTTP_TIMEOUT=600
|
| 69 |
+
|
| 70 |
+
|
| 71 |
+
RUN uv sync --index-strategy unsafe-best-match
|
| 72 |
+
|
| 73 |
+
RUN VIRTUAL_ENV=.venv uv pip install -e .
|
| 74 |
+
|
| 75 |
+
RUN VIRTUAL_ENV=.venv uv pip install -e .[dev]
|
| 76 |
+
|
| 77 |
+
|
| 78 |
+
# ============================================
|
| 79 |
+
# Complete EFMNode, VLM and rosbridge setup
|
| 80 |
+
# ============================================
|
| 81 |
+
WORKDIR /home/ros/g0plus_ros2/GalaxeaVLA
|
| 82 |
+
|
| 83 |
+
RUN VIRTUAL_ENV=.venv uv pip install nvtx google-genai dashscope
|
| 84 |
+
|
| 85 |
+
RUN VIRTUAL_ENV=.venv uv pip install lark==1.3.1 empy==3.3.4 colcon-common-extensions==0.3.0
|
| 86 |
+
|
| 87 |
+
RUN VIRTUAL_ENV=.venv uv pip install setuptools==59.6.0
|
| 88 |
+
|
| 89 |
+
RUN VIRTUAL_ENV=.venv uv pip install tensorflow==2.15.0
|
| 90 |
+
|
| 91 |
+
RUN VIRTUAL_ENV=.venv uv pip install netifaces pymongo tornado cbor2
|
| 92 |
+
|
| 93 |
+
# ============================================
|
| 94 |
+
# Install TensorRT wheel
|
| 95 |
+
# ============================================
|
| 96 |
+
RUN VIRTUAL_ENV=.venv uv pip install /usr/TensorRT-10.13.0.35/python/tensorrt-10.13.0.35-cp310-none-linux_x86_64.whl
|
| 97 |
+
|
| 98 |
+
# ============================================
|
| 99 |
+
# Build the ROS2 workspace using conda env
|
| 100 |
+
# ============================================
|
| 101 |
+
WORKDIR /home/ros/g0plus_ros2/Hierarchical_System
|
| 102 |
+
|
| 103 |
+
RUN bash -c "\
|
| 104 |
+
source /opt/ros/humble/setup.bash && \
|
| 105 |
+
source /home/ros/g0plus_ros2/GalaxeaVLA/.venv/bin/activate && \
|
| 106 |
+
colcon build --symlink-install \
|
| 107 |
+
--cmake-args -DPython3_ROOT_DIR=${VIRTUAL_ENV} \
|
| 108 |
+
"
|
| 109 |
+
|
| 110 |
+
|
| 111 |
+
# ============================================
|
| 112 |
+
# Replace super xml and update ~/.bashrc
|
| 113 |
+
# ============================================
|
| 114 |
+
COPY --chown=ros:ros docker-assets/super_client_configuration_file.xml.tpl /home/ros/super_client_configuration_file.xml.tpl
|
| 115 |
+
|
| 116 |
+
RUN echo "source /home/ros/g0plus_ros2/GalaxeaVLA/.venv/bin/activate" >> /home/ros/.bashrc && \
|
| 117 |
+
echo "source /home/ros/g0plus_ros2/Hierarchical_System/install/setup.bash" >> /home/ros/.bashrc
|
| 118 |
+
|
| 119 |
+
# ============================================
|
| 120 |
+
# Final image settings
|
| 121 |
+
# ============================================
|
| 122 |
+
WORKDIR /home/ros
|
g0plus_dockerfile/README.md
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# Dockerfile for Hierarchical System
|
| 2 |
+
|
| 3 |
+
|
| 4 |
+
## 1- What we have
|
| 5 |
+
|
| 6 |
+
* Dockerfile: create a docker image around 16GB, with comprehensive function to run G0Plus hierarchical system
|
| 7 |
+
|
| 8 |
+
## 2- Usage
|
| 9 |
+
|
| 10 |
+
```
|
| 11 |
+
cd .
|
| 12 |
+
DOCKER_BUILDKIT=1 docker build \
|
| 13 |
+
--add-host=host.docker.internal:host-gateway \
|
| 14 |
+
--build-arg http_proxy=http://host.docker.internal:7897 \
|
| 15 |
+
--build-arg https_proxy=http://host.docker.internal:7897 \
|
| 16 |
+
--secret id=git_token,src=./github_token \
|
| 17 |
+
-t g0plus:ros2_v1-trt .
|
| 18 |
+
```
|
g0plus_dockerfile/docker-assets/code/Hierarchical_System/.gitignore
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
log/
|
| 2 |
+
install/
|
| 3 |
+
build/
|
| 4 |
+
**/wasted/
|
| 5 |
+
**/__pycache__/
|
| 6 |
+
*.jpg
|
| 7 |
+
.vscode/
|
g0plus_dockerfile/docker-assets/code/Hierarchical_System/README.md
ADDED
|
@@ -0,0 +1,110 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# Hierarchical System ROS2
|
| 2 |
+
|
| 3 |
+
## 0- Preface
|
| 4 |
+
|
| 5 |
+
### What we have
|
| 6 |
+
|
| 7 |
+
- The paths and names of the main logic (Python) folders and files are as follows:
|
| 8 |
+
|
| 9 |
+
```
|
| 10 |
+
src/
|
| 11 |
+
└── g0_vlm_node/
|
| 12 |
+
└── g0_vlm_node
|
| 13 |
+
├── utils/ # Stores functions related to Gemini API processing
|
| 14 |
+
└── vlm_main.py # Core logic for VLM service provision
|
| 15 |
+
```
|
| 16 |
+
- Note: In the above package:
|
| 17 |
+
- vlm_main.py
|
| 18 |
+
|
| 19 |
+
### Development Log
|
| 20 |
+
|
| 21 |
+
- VLM
|
| 22 |
+
1. Format the String so that the JSON string sent by EHI is converted into a structured string.
|
| 23 |
+
2. Support the cache switch for receiving repeated instruction from EHI.
|
| 24 |
+
3. Support parameterized startup, using `--use-qwen` and `--no-use-qwen` to control model usage, with Gemini as the default.
|
| 25 |
+
|
| 26 |
+
|
| 27 |
+
|
| 28 |
+
## 1- Install
|
| 29 |
+
|
| 30 |
+
1. Install Python dependencies
|
| 31 |
+
|
| 32 |
+
Refer to https://github.com/whitbrunn/G0
|
| 33 |
+
|
| 34 |
+
2. Compile the workspace
|
| 35 |
+
|
| 36 |
+
Clone the `src/` folder to the local workspace under `TO/YOUR/WORKSPACE/`, then run:
|
| 37 |
+
|
| 38 |
+
```
|
| 39 |
+
cd TO/YOUR/WORKSPACE/
|
| 40 |
+
colcon build --symlink-install --cmake-args -DPython3_ROOT_DIR=$CONDA_PREFIX
|
| 41 |
+
```
|
| 42 |
+
|
| 43 |
+
Note:
|
| 44 |
+
|
| 45 |
+
Use `ros2 pkg list | grep PACK_NAME` to check if the following ROS packages exist:
|
| 46 |
+
- `g0_vlm_node`
|
| 47 |
+
|
| 48 |
+
## 2- Usage
|
| 49 |
+
|
| 50 |
+
1. Set your VLM API key
|
| 51 |
+
|
| 52 |
+
```
|
| 53 |
+
export VLM_API_KEY=<YOUR_GEMINI_API_KEY>
|
| 54 |
+
export VLM_API_KEY_QWEN=<YOUR_QWEN_API_KEY>
|
| 55 |
+
```
|
| 56 |
+
|
| 57 |
+
2. Start the VLM Node
|
| 58 |
+
|
| 59 |
+
1.1 First configure the proxy according to the environment (necessary for Gemini, if using the qwen version, skip to 1.3)
|
| 60 |
+
|
| 61 |
+
|
| 62 |
+
```
|
| 63 |
+
export https_proxy=http://127.0.0.1:<PORT>
|
| 64 |
+
export http_proxy=http://127.0.0.1:<PORT>
|
| 65 |
+
export all_proxy=http://127.0.0.1:<PORT>
|
| 66 |
+
```
|
| 67 |
+
1.2 Verify if the external network is accessible
|
| 68 |
+
|
| 69 |
+
```
|
| 70 |
+
curl -I www.google.com
|
| 71 |
+
```
|
| 72 |
+
|
| 73 |
+
Expected output (partial):
|
| 74 |
+
|
| 75 |
+
```
|
| 76 |
+
HTTP/1.1 200 OK
|
| 77 |
+
Transfer-Encoding: chunked
|
| 78 |
+
Cache-Control: private
|
| 79 |
+
Connection: keep-alive
|
| 80 |
+
```
|
| 81 |
+
|
| 82 |
+
1.3 After confirming the above step is OK, start the VLM node
|
| 83 |
+
|
| 84 |
+
```
|
| 85 |
+
ros2 run g0_vlm_node vlm_main
|
| 86 |
+
```
|
| 87 |
+
|
| 88 |
+
*If using the qwen model inference:
|
| 89 |
+
```
|
| 90 |
+
unset http_proxy
|
| 91 |
+
unset https_proxy
|
| 92 |
+
unset all_proxy
|
| 93 |
+
ros2 run g0_vlm_node vlm_main -- --use-qwen
|
| 94 |
+
```
|
| 95 |
+
|
| 96 |
+
|
| 97 |
+
## 3- What you expect
|
| 98 |
+
|
| 99 |
+
- VLM receives a Send request output, e.g.,
|
| 100 |
+
|
| 101 |
+
```
|
| 102 |
+
2025-11-05 07:40:33.230 | INFO | g0_vlm_node.vlm_main:vlm_processor1:153 - One hp successfully processed: 将咖啡罐用右手放到托盘上 -> [Low]: Pick up the coffee can with the right hand and place it on the tray.!
|
| 103 |
+
```
|
| 104 |
+
|
| 105 |
+
- VLM receives a confirm request, e.g.,
|
| 106 |
+
|
| 107 |
+
```
|
| 108 |
+
2025-11-05 07:40:47.641 | INFO | g0_vlm_node.vlm_main:vlm_processor2:169 - One hp_ successfully sent to VLA: [Low]: Pick up the coffee can with the right hand and place it on the tray.!
|
| 109 |
+
```
|
| 110 |
+
|
g0plus_dockerfile/docker-assets/code/Hierarchical_System/README.md.zh
ADDED
|
@@ -0,0 +1,111 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# Hierarchical System ROS2
|
| 2 |
+
|
| 3 |
+
## 0- 前言
|
| 4 |
+
|
| 5 |
+
### What we have
|
| 6 |
+
|
| 7 |
+
- 主要逻辑(python)文件夹及文件的路径及命名如下
|
| 8 |
+
|
| 9 |
+
```
|
| 10 |
+
src/
|
| 11 |
+
└── g0_vlm_node/
|
| 12 |
+
└── g0_vlm_node
|
| 13 |
+
├── utils/ # 储存与Gemini api处理相关的func
|
| 14 |
+
└── vlm_main.py # VLM提供服务的核心逻辑
|
| 15 |
+
```
|
| 16 |
+
- 注:以上包内:
|
| 17 |
+
- vlm_main.py
|
| 18 |
+
|
| 19 |
+
### 开发说明
|
| 20 |
+
|
| 21 |
+
|
| 22 |
+
- VLM
|
| 23 |
+
1. 将String格式化,使得EHI发送的json字符串,改为结构化字符串
|
| 24 |
+
2. 支持接收EHI的缓存开关
|
| 25 |
+
3. 支持参数化启动,用`--use-qwen`和`--no-use-qwen`控制模型使用,默认是Gemini
|
| 26 |
+
|
| 27 |
+
|
| 28 |
+
## 1- Install
|
| 29 |
+
|
| 30 |
+
1. 安装Python依赖库
|
| 31 |
+
|
| 32 |
+
参考https://github.com/whitbrunn/G0
|
| 33 |
+
|
| 34 |
+
|
| 35 |
+
2. 编译工作空间
|
| 36 |
+
|
| 37 |
+
将`src/`文件夹clone到本地工作空间下`TO/YOUR/WORKSPACE/`,运行
|
| 38 |
+
|
| 39 |
+
```
|
| 40 |
+
cd TO/YOUR/WORKSPACE/
|
| 41 |
+
colcon build --symlink-install --cmake-args -DPython3_ROOT_DIR=$CONDA_PREFIX
|
| 42 |
+
```
|
| 43 |
+
|
| 44 |
+
Note:
|
| 45 |
+
|
| 46 |
+
用`ros2 pkg list | grep PACK_NAME` 检查是否有以下ROS包:
|
| 47 |
+
- `g0_vlm_node`
|
| 48 |
+
|
| 49 |
+
|
| 50 |
+
## 2- Usage
|
| 51 |
+
|
| 52 |
+
1. 设置api key
|
| 53 |
+
|
| 54 |
+
```
|
| 55 |
+
export API_KEY=<YOUR_GEMINI_API_KEY>
|
| 56 |
+
export API_KEY_QWEN=<YOUR_QWEN_API_KEY>
|
| 57 |
+
```
|
| 58 |
+
|
| 59 |
+
2. 启动VLM Node
|
| 60 |
+
|
| 61 |
+
1.1 先按所在环境配置代理(Gemini之必需,若使用qwen版,请跳到1.3)
|
| 62 |
+
|
| 63 |
+
```
|
| 64 |
+
export https_proxy=http://127.0.0.1:<PORT>
|
| 65 |
+
export http_proxy=http://127.0.0.1:<PORT>
|
| 66 |
+
export all_proxy=http://127.0.0.1:<PORT>
|
| 67 |
+
```
|
| 68 |
+
1.2 验证外网是否可通
|
| 69 |
+
|
| 70 |
+
```
|
| 71 |
+
curl -I www.google.com
|
| 72 |
+
```
|
| 73 |
+
|
| 74 |
+
预期显示(部分),
|
| 75 |
+
|
| 76 |
+
```
|
| 77 |
+
HTTP/1.1 200 OK
|
| 78 |
+
Transfer-Encoding: chunked
|
| 79 |
+
Cache-Control: private
|
| 80 |
+
Connection: keep-alive
|
| 81 |
+
```
|
| 82 |
+
|
| 83 |
+
1.3 确定上一步OK后,启动VLM节点
|
| 84 |
+
|
| 85 |
+
```
|
| 86 |
+
ros2 run g0_vlm_node vlm_main
|
| 87 |
+
```
|
| 88 |
+
|
| 89 |
+
*若使用qwen模型推理
|
| 90 |
+
```
|
| 91 |
+
unset http_proxy
|
| 92 |
+
unset https_proxy
|
| 93 |
+
unset all_proxy
|
| 94 |
+
ros2 run g0_vlm_node vlm_main -- --use-qwen
|
| 95 |
+
```
|
| 96 |
+
|
| 97 |
+
|
| 98 |
+
## 3- What you expect
|
| 99 |
+
|
| 100 |
+
- VLM收到Send请求输出,e.g.,
|
| 101 |
+
|
| 102 |
+
```
|
| 103 |
+
2025-11-05 07:40:33.230 | INFO | g0_vlm_node.vlm_main:vlm_processor1:153 - One hp successfully processed: 将咖啡罐用右手放到托盘上 -> [Low]: Pick up the coffee can with the right hand and place it on the tray.!
|
| 104 |
+
```
|
| 105 |
+
|
| 106 |
+
- VLM收到confirm请求,e.g.,
|
| 107 |
+
|
| 108 |
+
```
|
| 109 |
+
2025-11-05 07:40:47.641 | INFO | g0_vlm_node.vlm_main:vlm_processor2:169 - One hp_ successfully sent to VLA: [Low]: Pick up the coffee can with the right hand and place it on the tray.!
|
| 110 |
+
```
|
| 111 |
+
|
g0plus_dockerfile/docker-assets/code/Hierarchical_System/src/g0_vlm_node/g0_vlm_node/__init__.py
ADDED
|
File without changes
|
g0plus_dockerfile/docker-assets/code/Hierarchical_System/src/g0_vlm_node/g0_vlm_node/utils/__init__.py
ADDED
|
@@ -0,0 +1,2 @@
|
|
|
|
|
|
|
|
|
|
| 1 |
+
from .utils_online import call_gemini_for_bbox, call_gemini_for_translation, call_qwen_for_bbox, call_qwen_for_translation
|
| 2 |
+
from .utils_online import get_simple_vb_imgcv
|
g0plus_dockerfile/docker-assets/code/Hierarchical_System/src/g0_vlm_node/g0_vlm_node/utils/utils_online.py
ADDED
|
@@ -0,0 +1,418 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
import os
|
| 2 |
+
from google import genai
|
| 3 |
+
from google.genai import types
|
| 4 |
+
import re
|
| 5 |
+
import cv2 as cv
|
| 6 |
+
import time
|
| 7 |
+
import tensorflow as tf
|
| 8 |
+
import numpy as np
|
| 9 |
+
from typing import List, Dict, Any, Optional
|
| 10 |
+
import dashscope
|
| 11 |
+
from dashscope import MultiModalConversation, Generation
|
| 12 |
+
import base64
|
| 13 |
+
import json
|
| 14 |
+
|
| 15 |
+
def require_env(name: str) -> str:
|
| 16 |
+
value = os.getenv(name)
|
| 17 |
+
if not value:
|
| 18 |
+
raise RuntimeError(f"Required environment variable `{name}` is not set")
|
| 19 |
+
return value
|
| 20 |
+
|
| 21 |
+
|
| 22 |
+
MODEL_ID = "gemini-robotics-er-1.5-preview"
|
| 23 |
+
MODEL_ID_FOR_TRANS = "gemini-2.5-flash"
|
| 24 |
+
API_KEY = require_env("VLM_API_KEY")
|
| 25 |
+
client = genai.Client(api_key=API_KEY)
|
| 26 |
+
|
| 27 |
+
|
| 28 |
+
MODEL_ID_QWEN = 'qwen3-vl-plus'
|
| 29 |
+
MODEL_ID_FOR_TRANS_QWEN = 'qwen-flash'
|
| 30 |
+
API_KEY_QWEN = require_env("VLM_API_KEY_QWEN")
|
| 31 |
+
|
| 32 |
+
|
| 33 |
+
PROMPT_TEMPLATE = """
|
| 34 |
+
The robot is asked to {instruction}.
|
| 35 |
+
|
| 36 |
+
**CRITICAL SPATIAL CONSTRAINT**: If the instruction mentions "outside the [container]" (where container can be tray, plate, box, bowl, basket, etc.), you MUST ONLY detect objects that are clearly OUTSIDE that container's boundaries. Objects inside or on the container should be completely IGNORED.
|
| 37 |
+
|
| 38 |
+
Carefully analyze if the requested object is present in the CORRECT location (outside the container if specified).
|
| 39 |
+
If the object exists in the correct location and you are confident (confidence > 0.6), return its bounding box as a JSON array.
|
| 40 |
+
If the object is only found INSIDE the container when the instruction asks for objects OUTSIDE the container, you MUST return: {{"no_object": true, "reason": "Object found only inside the container, not outside as requested"}}
|
| 41 |
+
If you are not confident or the object is not present in the correct location, return: {{"no_object": true, "reason": "<brief explanation>"}}
|
| 42 |
+
|
| 43 |
+
Format for object found: [{{"box_2d": [x_min, y_min, x_max, y_max], "label": "<label>", "confidence": <0.0-1.0>}}]
|
| 44 |
+
Format for no object: {{"no_object": true, "reason": "<why object not found>"}}
|
| 45 |
+
|
| 46 |
+
Coordinates normalized to 0-1000. The values in box_2d must only be integers.
|
| 47 |
+
Only return the object that matches the instruction AND is in the correct spatial location.
|
| 48 |
+
|
| 49 |
+
"""
|
| 50 |
+
|
| 51 |
+
|
| 52 |
+
prompt_template = """
|
| 53 |
+
The robot is asked to {instruction}. Return bounding box of the first required interaction
|
| 54 |
+
object as a JSON array with labels. Only return bbox with the max likelihood. Never return masks or code fencing.
|
| 55 |
+
The format should be as follows: [{"box_2d": [ymin, xmin, ymax, xmax],
|
| 56 |
+
"label": <label for the object>}] normalized to 0-1000. The values in
|
| 57 |
+
box_2d must only be integers
|
| 58 |
+
"""
|
| 59 |
+
|
| 60 |
+
pt_for_translation1 = """
|
| 61 |
+
You are a professional robot instruction translation expert.
|
| 62 |
+
The robot is asked to translate a robot action instruction "{instruction}" from Chinese to English. Pay special attention to translate the object and hand side accurately and concisely, and do not add any explanations.
|
| 63 |
+
The format should be just ONE sentence with "[Low]: " in the FRONT and "." at the END as follows: "[Low]: Pick up the <object> with the <side> hand and place it on the tray."
|
| 64 |
+
"""
|
| 65 |
+
|
| 66 |
+
pt_for_translation2 = """
|
| 67 |
+
You are a professional robot instruction translation expert.
|
| 68 |
+
The robot is asked to translate a robot action instruction "{instruction}" from Chinese to English. Pay special attention to translate the object accurately and concisely, and do not add any explanations.
|
| 69 |
+
The format should be just ONE sentence with "." at the END as follows: "Pick up the <object> outside the tray and place them on the tray."
|
| 70 |
+
"""
|
| 71 |
+
|
| 72 |
+
|
| 73 |
+
# 优化后的翻译提示词模板,特别强调"outside the tray"条件
|
| 74 |
+
pt_for_translation2_qwen = """
|
| 75 |
+
你是一个专业的机器人指令翻译专家,专门处理pick-and-place场景的指令翻译。
|
| 76 |
+
|
| 77 |
+
原始中文指令: "{instruction}"
|
| 78 |
+
|
| 79 |
+
重要翻译要求:
|
| 80 |
+
1. **必须保留"outside the tray"(托盘外)这个关键空间关系**,这是最重要的条件
|
| 81 |
+
2. 准确识别要操作的物体
|
| 82 |
+
3. 严格遵循固定句式:"Pick up the <object> outside the tray and place them on the tray."
|
| 83 |
+
4. 只输出翻译后的英文句子,不要添加任何解释
|
| 84 |
+
5. 确保句子以句号结尾
|
| 85 |
+
|
| 86 |
+
翻译示例:
|
| 87 |
+
- "拿起托盘外的红色方块" → "Pick up the red cube outside the tray and place them on the tray."
|
| 88 |
+
- "把托盘外面的蓝色零件放进去" → "Pick up the blue part outside the tray and place them on the tray."
|
| 89 |
+
- "捡起托盘外的绿色积木" → "Pick up the green block outside the tray and place them on the tray."
|
| 90 |
+
|
| 91 |
+
特别注意:**绝对不能省略"outside the tray"这个关键条件**,即使原始指令中没有明确提到"外",也要根据上下文理解为托盘外的物体。
|
| 92 |
+
|
| 93 |
+
现在请翻译上面的原始指令:
|
| 94 |
+
"""
|
| 95 |
+
|
| 96 |
+
def retry(func, max_retries=3):
|
| 97 |
+
def wrapper(*args, **kwargs):
|
| 98 |
+
for attempt in range(max_retries):
|
| 99 |
+
try:
|
| 100 |
+
return func(*args, **kwargs)
|
| 101 |
+
except Exception as e:
|
| 102 |
+
print(f"Attempt {attempt + 1} failed: {str(e)}")
|
| 103 |
+
time.sleep(2)
|
| 104 |
+
raise Exception(f"All {max_retries} attempts failed")
|
| 105 |
+
return wrapper
|
| 106 |
+
|
| 107 |
+
|
| 108 |
+
def simple_visual_bbox(image_array, bbox, use_qwen=False, suffix=""):
|
| 109 |
+
x1, y1, x2, y2 = bbox
|
| 110 |
+
vis_image = image_array.copy()
|
| 111 |
+
cv.rectangle(vis_image, (x1, y1), (x2, y2), (0, 255, 0), 2)
|
| 112 |
+
if use_qwen:
|
| 113 |
+
filename = f"qwen_debug_bbox{suffix}.jpg"
|
| 114 |
+
cv.imwrite(filename, vis_image)
|
| 115 |
+
else:
|
| 116 |
+
cv.imwrite("gemini_debug_bbox.jpg", vis_image)
|
| 117 |
+
|
| 118 |
+
|
| 119 |
+
def get_simple_vb_imgcv(image_array, bbox, input_format="rgb"):
|
| 120 |
+
if input_format == "rgb":
|
| 121 |
+
image_array = cv.cvtColor(image_array, cv.COLOR_RGB2BGR)
|
| 122 |
+
else:
|
| 123 |
+
pass
|
| 124 |
+
x1, y1, x2, y2 = bbox
|
| 125 |
+
vis_image = image_array.copy()
|
| 126 |
+
cv.rectangle(vis_image, (x1, y1), (x2, y2), (0, 255, 0), 2)
|
| 127 |
+
return vis_image
|
| 128 |
+
|
| 129 |
+
|
| 130 |
+
@retry
|
| 131 |
+
def call_gemini_for_translation(instruction, ver=2):
|
| 132 |
+
if ver == 1:
|
| 133 |
+
prompt = pt_for_translation1.replace("{instruction}", instruction)
|
| 134 |
+
elif ver == 2:
|
| 135 |
+
prompt = pt_for_translation2.replace("{instruction}", instruction)
|
| 136 |
+
start_time = time.time()
|
| 137 |
+
print("start calling gemini, waiting...")
|
| 138 |
+
text_response = client.models.generate_content(
|
| 139 |
+
model=MODEL_ID_FOR_TRANS,
|
| 140 |
+
contents=[
|
| 141 |
+
prompt
|
| 142 |
+
],
|
| 143 |
+
config = types.GenerateContentConfig(
|
| 144 |
+
temperature=0.5,
|
| 145 |
+
thinking_config=types.ThinkingConfig(thinking_budget=0)
|
| 146 |
+
)
|
| 147 |
+
)
|
| 148 |
+
print(f"gemini inference time: {time.time() - start_time} seconds")
|
| 149 |
+
translation = text_response.text.strip()
|
| 150 |
+
# print(f"translation: {translation}")
|
| 151 |
+
return translation
|
| 152 |
+
|
| 153 |
+
@retry
|
| 154 |
+
def call_qwen_for_translation(instruction):
|
| 155 |
+
"""
|
| 156 |
+
使用千问大模型将中文机器人指令翻译成英文,特别强调"outside the tray"条件
|
| 157 |
+
"""
|
| 158 |
+
dashscope.api_key = API_KEY_QWEN
|
| 159 |
+
|
| 160 |
+
prompt = pt_for_translation2_qwen.replace("{instruction}", instruction)
|
| 161 |
+
|
| 162 |
+
start_time = time.time()
|
| 163 |
+
print("开始调用千问模型进行翻译,请稍候...")
|
| 164 |
+
|
| 165 |
+
response = Generation.call(
|
| 166 |
+
model=MODEL_ID_FOR_TRANS_QWEN,
|
| 167 |
+
prompt=prompt,
|
| 168 |
+
temperature=0.3,
|
| 169 |
+
top_p=0.7,
|
| 170 |
+
max_tokens=50
|
| 171 |
+
)
|
| 172 |
+
|
| 173 |
+
print(f"千问推理时间: {time.time() - start_time:.2f} 秒")
|
| 174 |
+
|
| 175 |
+
if response.status_code != 200:
|
| 176 |
+
raise ValueError(
|
| 177 |
+
f"千问API调用失败,状态码: {response.status_code}, "
|
| 178 |
+
f"错误信息: {getattr(response, 'message', '未知错误')}"
|
| 179 |
+
)
|
| 180 |
+
|
| 181 |
+
translation = response.output.text.strip()
|
| 182 |
+
|
| 183 |
+
translation = re.sub(r'^["\']|["\']$', '', translation)
|
| 184 |
+
translation = translation.split('\n')[0]
|
| 185 |
+
translation = translation.rstrip('.') + '.'
|
| 186 |
+
|
| 187 |
+
if "outside the" not in translation.lower():
|
| 188 |
+
print("警告: 翻译结果可能缺少'outside the'条件!")
|
| 189 |
+
|
| 190 |
+
print(f"翻译结果: {translation}")
|
| 191 |
+
return translation
|
| 192 |
+
|
| 193 |
+
|
| 194 |
+
|
| 195 |
+
@retry
|
| 196 |
+
def call_gemini_for_bbox(image_array, instruction):
|
| 197 |
+
image_array = cv.cvtColor(image_array, cv.COLOR_RGB2BGR)
|
| 198 |
+
h, w, _ = image_array.shape
|
| 199 |
+
_, image_bytes = cv.imencode('.jpg', image_array)
|
| 200 |
+
image_bytes = image_bytes.tobytes()
|
| 201 |
+
prompt = prompt_template.replace("{instruction}", instruction)
|
| 202 |
+
start_time = time.time()
|
| 203 |
+
print("start calling gemini, waiting...")
|
| 204 |
+
image_response = client.models.generate_content(
|
| 205 |
+
model=MODEL_ID,
|
| 206 |
+
contents=[
|
| 207 |
+
types.Part.from_bytes(
|
| 208 |
+
data=image_bytes,
|
| 209 |
+
mime_type='image/jpeg',
|
| 210 |
+
),
|
| 211 |
+
prompt
|
| 212 |
+
],
|
| 213 |
+
config = types.GenerateContentConfig(
|
| 214 |
+
temperature=0.5,
|
| 215 |
+
thinking_config=types.ThinkingConfig(thinking_budget=0)
|
| 216 |
+
)
|
| 217 |
+
)
|
| 218 |
+
print(f"gemini inference time: {time.time() - start_time} seconds")
|
| 219 |
+
bbox = image_response.text
|
| 220 |
+
bbox = re.findall(r'\{"box_2d": \[(\d+), (\d+), (\d+), (\d+)\], "label": "([^"]+)"\}', bbox)[0]
|
| 221 |
+
ymin, xmin, ymax, xmax, label = bbox
|
| 222 |
+
scaled_bboxes = [
|
| 223 |
+
int(int(xmin) / 1000 * w),
|
| 224 |
+
int(int(ymin) / 1000 * h),
|
| 225 |
+
int(int(xmax) / 1000 * w),
|
| 226 |
+
int(int(ymax) / 1000 * h),
|
| 227 |
+
]
|
| 228 |
+
print(f"xmin: {scaled_bboxes[0]}, y_min: {scaled_bboxes[1]}, \
|
| 229 |
+
x_max: {scaled_bboxes[2]}, y_max: {scaled_bboxes[3]}")
|
| 230 |
+
simple_visual_bbox(image_array, scaled_bboxes)
|
| 231 |
+
return scaled_bboxes
|
| 232 |
+
|
| 233 |
+
|
| 234 |
+
@retry
|
| 235 |
+
def call_qwen_for_bbox(
|
| 236 |
+
image_rgb: np.ndarray,
|
| 237 |
+
instruction: str,
|
| 238 |
+
save_visualization: bool = True,
|
| 239 |
+
suffix: str = ""
|
| 240 |
+
) -> List[float]:
|
| 241 |
+
dashscope.api_key = API_KEY_QWEN
|
| 242 |
+
|
| 243 |
+
height, width = image_rgb.shape[:2]
|
| 244 |
+
image_bgr = cv.cvtColor(image_rgb, cv.COLOR_RGB2BGR)
|
| 245 |
+
_, encoded_image = cv.imencode('.jpg', image_bgr)
|
| 246 |
+
image_data = base64.b64encode(encoded_image).decode('utf-8')
|
| 247 |
+
prompt_text = PROMPT_TEMPLATE.format(instruction=instruction)
|
| 248 |
+
|
| 249 |
+
messages = [
|
| 250 |
+
{
|
| 251 |
+
'role': 'user',
|
| 252 |
+
'content': [
|
| 253 |
+
{
|
| 254 |
+
'image': f'data:image/jpeg;base64,{image_data}'
|
| 255 |
+
},
|
| 256 |
+
{
|
| 257 |
+
'text': prompt_text
|
| 258 |
+
}
|
| 259 |
+
]
|
| 260 |
+
}
|
| 261 |
+
]
|
| 262 |
+
|
| 263 |
+
start_time = time.time()
|
| 264 |
+
print("start calling qwen, waiting...")
|
| 265 |
+
|
| 266 |
+
response = MultiModalConversation.call(
|
| 267 |
+
model=MODEL_ID_QWEN,
|
| 268 |
+
messages=messages,
|
| 269 |
+
top_p=0.8,
|
| 270 |
+
enable_thinking=True,
|
| 271 |
+
thinking_budget=512, # 320, #
|
| 272 |
+
temperature=0.1
|
| 273 |
+
)
|
| 274 |
+
print(f"qwen inference time: {time.time() - start_time} seconds")
|
| 275 |
+
|
| 276 |
+
if response.status_code != 200:
|
| 277 |
+
raise ValueError(
|
| 278 |
+
f"API调用失败,状态码: {response.status_code}, "
|
| 279 |
+
f"错误信息: {response.message}"
|
| 280 |
+
)
|
| 281 |
+
assistant_reply = response.output.choices[0].message.content[0].get('text', '')
|
| 282 |
+
|
| 283 |
+
match_with_confidence = re.findall(
|
| 284 |
+
r'\{\s*"b?box_2d"\s*:\s*\[\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*\]\s*,\s*"label"\s*:\s*"([^"]+)"\s*,\s*"confidence"\s*:\s*([\d.]+)\s*\}',
|
| 285 |
+
assistant_reply,
|
| 286 |
+
re.DOTALL
|
| 287 |
+
)
|
| 288 |
+
match_without_confidence = re.findall(
|
| 289 |
+
r'\{\s*"b?box_2d"\s*:\s*\[\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*\]\s*,\s*"label"\s*:\s*"([^"]+)"\s*\}',
|
| 290 |
+
assistant_reply,
|
| 291 |
+
re.DOTALL
|
| 292 |
+
)
|
| 293 |
+
if match_with_confidence:
|
| 294 |
+
bbox = match_with_confidence[0]
|
| 295 |
+
elif match_without_confidence:
|
| 296 |
+
bbox = match_without_confidence[0] + ('1.0',) # Add default confidence of 1.0
|
| 297 |
+
else:
|
| 298 |
+
raise ValueError(f"Could not parse bbox from Qwen response: {assistant_reply}")
|
| 299 |
+
# print(f"bbox regulated from Qwen: {bbox}")
|
| 300 |
+
xmin, ymin, xmax, ymax, *_ = bbox
|
| 301 |
+
scaled_bboxes = [
|
| 302 |
+
int(int(xmin) / 1000 * width),
|
| 303 |
+
int(int(ymin) / 1000 * height),
|
| 304 |
+
int(int(xmax) / 1000 * width),
|
| 305 |
+
int(int(ymax) / 1000 * height),
|
| 306 |
+
]
|
| 307 |
+
print(f"xmin: {scaled_bboxes[0]}, y_min: {scaled_bboxes[1]}, \
|
| 308 |
+
x_max: {scaled_bboxes[2]}, y_max: {scaled_bboxes[3]}")
|
| 309 |
+
|
| 310 |
+
if save_visualization:
|
| 311 |
+
simple_visual_bbox(image_bgr, scaled_bboxes, use_qwen=True, suffix=suffix)
|
| 312 |
+
|
| 313 |
+
return scaled_bboxes
|
| 314 |
+
|
| 315 |
+
|
| 316 |
+
def get_paligemma_box_instruction(image, bbox, target_image_size=224, scale=1024):
|
| 317 |
+
bbox = np.array(bbox)
|
| 318 |
+
h, w = image.shape[:2]
|
| 319 |
+
h_scale, w_scale = target_image_size / h, target_image_size / w
|
| 320 |
+
bbox = bbox * np.array([w_scale, h_scale, w_scale, h_scale])
|
| 321 |
+
image = cv.resize(image, (target_image_size, target_image_size))
|
| 322 |
+
simple_visual_bbox(cv.cvtColor(image, cv.COLOR_RGB2BGR), bbox) # simple resize for visualization here
|
| 323 |
+
bbox = np.clip(np.round(bbox / target_image_size * scale), 0, scale - 1).astype(np.int32)
|
| 324 |
+
rel_x1, rel_y1, rel_x2, rel_y2 = bbox
|
| 325 |
+
y_min = min(rel_y1, rel_y2)
|
| 326 |
+
x_min = min(rel_x1, rel_x2)
|
| 327 |
+
y_max = max(rel_y1, rel_y2)
|
| 328 |
+
x_max = max(rel_x1, rel_x2)
|
| 329 |
+
bbox = f"<loc{y_min}><loc{x_min}><loc{y_max}><loc{x_max}>"
|
| 330 |
+
return bbox
|
| 331 |
+
|
| 332 |
+
|
| 333 |
+
def get_bbox_image(rgb_head_image:np.ndarray,
|
| 334 |
+
bbox, target_height=224, target_width=224):
|
| 335 |
+
rgb_head_image = tf.convert_to_tensor(rgb_head_image)
|
| 336 |
+
rgb_head_image = tf.cast(rgb_head_image, tf.float32)
|
| 337 |
+
H, W, _ = rgb_head_image.shape
|
| 338 |
+
|
| 339 |
+
x1, y1, x2, y2 = bbox
|
| 340 |
+
bw, bh = x2 - x1, y2 - y1
|
| 341 |
+
side = tf.maximum(bw, bh)
|
| 342 |
+
cx, cy = x1 + bw / 2, y1 + bh / 2
|
| 343 |
+
|
| 344 |
+
# get square bbox
|
| 345 |
+
new_x1 = tf.cast(tf.floor(cx - side / 2), tf.int32)
|
| 346 |
+
new_y1 = tf.cast(tf.floor(cy - side / 2), tf.int32)
|
| 347 |
+
new_x2 = tf.cast(tf.math.ceil(cx + side / 2), tf.int32)
|
| 348 |
+
new_y2 = tf.cast(tf.math.ceil(cy + side / 2), tf.int32)
|
| 349 |
+
|
| 350 |
+
# padding origin image if out of bound
|
| 351 |
+
pad_left = tf.maximum(0, -new_x1)
|
| 352 |
+
pad_top = tf.maximum(0, -new_y1)
|
| 353 |
+
pad_right = tf.maximum(0, new_x2 - W)
|
| 354 |
+
pad_bottom = tf.maximum(0, new_y2 - H)
|
| 355 |
+
|
| 356 |
+
img_padded = tf.pad(
|
| 357 |
+
rgb_head_image,
|
| 358 |
+
paddings=[[pad_top, pad_bottom], [pad_left, pad_right], [0, 0]],
|
| 359 |
+
mode='CONSTANT',
|
| 360 |
+
constant_values=0
|
| 361 |
+
)
|
| 362 |
+
|
| 363 |
+
# update bbox
|
| 364 |
+
crop_x1 = new_x1 + pad_left
|
| 365 |
+
crop_y1 = new_y1 + pad_top
|
| 366 |
+
crop_x2 = new_x2 + pad_left
|
| 367 |
+
crop_y2 = new_y2 + pad_top
|
| 368 |
+
|
| 369 |
+
crop = img_padded[crop_y1:crop_y2, crop_x1:crop_x2, :]
|
| 370 |
+
crop_resized = tf.image.resize(crop, (target_height, target_width), method='bilinear')
|
| 371 |
+
crop_resized = tf.cast(crop_resized, tf.uint8).numpy()
|
| 372 |
+
|
| 373 |
+
cv.imwrite("debug_condition_image.png",
|
| 374 |
+
cv.cvtColor(crop_resized),
|
| 375 |
+
cv.COLOR_RGB2BGR)
|
| 376 |
+
|
| 377 |
+
return crop_resized
|
| 378 |
+
|
| 379 |
+
|
| 380 |
+
if __name__ == "__main__":
|
| 381 |
+
img_time = "20251105-161101"
|
| 382 |
+
image = cv.imread(img_time+".jpg")
|
| 383 |
+
image = cv.cvtColor(image, cv.COLOR_BGR2RGB)
|
| 384 |
+
|
| 385 |
+
use_lower_half = True # False #
|
| 386 |
+
if use_lower_half:
|
| 387 |
+
height = image.shape[0] #
|
| 388 |
+
height_to_use = height // 2
|
| 389 |
+
suffix2 = "_bottom_half" #
|
| 390 |
+
else:
|
| 391 |
+
height_to_use = 0 # full image
|
| 392 |
+
suffix2 = "_full" # "_bottom_half" #
|
| 393 |
+
image_bottom_half = image[height_to_use:, :, :]
|
| 394 |
+
|
| 395 |
+
instruction = "Pick up the bottles outside the container and place them on the container."
|
| 396 |
+
suffix1 = img_time+"-seed1-temp0d1-tb512-bottles-gemini-prompt-container"
|
| 397 |
+
|
| 398 |
+
suffix = suffix1 + suffix2
|
| 399 |
+
use_gemini = False # True #
|
| 400 |
+
if use_gemini:
|
| 401 |
+
bbox = call_gemini_for_bbox(image_bottom_half, instruction) #, suffix=suffix)
|
| 402 |
+
else:
|
| 403 |
+
suffix += "_qwen"
|
| 404 |
+
bbox = call_qwen_for_bbox(image_bottom_half, instruction, suffix=suffix)
|
| 405 |
+
print("Final bbox:", bbox)
|
| 406 |
+
|
| 407 |
+
# test Chinese translation
|
| 408 |
+
chinese_instruction = "拿起紫色物品放到托盘上"
|
| 409 |
+
english_translation_gemini = None
|
| 410 |
+
english_translation = call_qwen_for_translation(chinese_instruction)
|
| 411 |
+
if english_translation_gemini:
|
| 412 |
+
print(f"\n最终翻译结果 gemini: {english_translation_gemini}")
|
| 413 |
+
else:
|
| 414 |
+
print("翻译失败")
|
| 415 |
+
if english_translation:
|
| 416 |
+
print(f"\n最终翻译结果: {english_translation}")
|
| 417 |
+
else:
|
| 418 |
+
print("翻译失败")
|
g0plus_dockerfile/docker-assets/code/Hierarchical_System/src/g0_vlm_node/g0_vlm_node/vlm_main.py
ADDED
|
@@ -0,0 +1,371 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
import rclpy
|
| 2 |
+
import numpy as np
|
| 3 |
+
from collections import deque
|
| 4 |
+
|
| 5 |
+
from vla_msg.srv import VLMInstruction
|
| 6 |
+
from vla_msg.msg import VLAPromptEcho
|
| 7 |
+
from std_msgs.msg import String
|
| 8 |
+
from functools import partial
|
| 9 |
+
|
| 10 |
+
from cv_bridge import CvBridge
|
| 11 |
+
from sensor_msgs.msg import CompressedImage
|
| 12 |
+
import base64
|
| 13 |
+
|
| 14 |
+
import cv2
|
| 15 |
+
|
| 16 |
+
from g0_vlm_node.utils import call_gemini_for_translation, call_gemini_for_bbox, get_simple_vb_imgcv
|
| 17 |
+
from g0_vlm_node.utils import call_qwen_for_translation, call_qwen_for_bbox
|
| 18 |
+
|
| 19 |
+
import argparse
|
| 20 |
+
import time
|
| 21 |
+
import json
|
| 22 |
+
from loguru import logger
|
| 23 |
+
import tyro
|
| 24 |
+
|
| 25 |
+
|
| 26 |
+
class VLMNode:
|
| 27 |
+
def __init__(self,
|
| 28 |
+
reliabty_mode:str,
|
| 29 |
+
use_qwen: bool):
|
| 30 |
+
|
| 31 |
+
self.node = rclpy.create_node('g0_vlm_node')
|
| 32 |
+
self.ver = 2
|
| 33 |
+
self.head_camera_topic_n = "/hdas/camera_head/left_raw/image_raw_color/compressed"
|
| 34 |
+
self.server_name1 = 'hs/vlm_instruction_proc_service'
|
| 35 |
+
self.server_name2 = 'hs/vlm_instruction_cfm_service'
|
| 36 |
+
|
| 37 |
+
self.pub_for_ehi_topic_n = 'hs/vlm_out4ehi'
|
| 38 |
+
self.pub_to_vla_topic_n = 'hs/vlm_out2vla'
|
| 39 |
+
|
| 40 |
+
self.use_qwen = use_qwen
|
| 41 |
+
|
| 42 |
+
self.qos_profile_pub = self.create_qos_profile(reliabty_mode)
|
| 43 |
+
|
| 44 |
+
self.loop_num_for_ehi = 1
|
| 45 |
+
self.loop_num_to_vla = 1
|
| 46 |
+
|
| 47 |
+
self.pub_for_ehi = self.node.create_publisher(
|
| 48 |
+
VLAPromptEcho,
|
| 49 |
+
self.pub_for_ehi_topic_n,
|
| 50 |
+
self.qos_profile_pub
|
| 51 |
+
)
|
| 52 |
+
|
| 53 |
+
self.pub_to_vla = self.node.create_publisher(
|
| 54 |
+
String,
|
| 55 |
+
self.pub_to_vla_topic_n,
|
| 56 |
+
self.qos_profile_pub
|
| 57 |
+
)
|
| 58 |
+
|
| 59 |
+
self.vlm_proc_que_len = 5
|
| 60 |
+
self.vlm_proc_que = deque(
|
| 61 |
+
maxlen=self.vlm_proc_que_len
|
| 62 |
+
)
|
| 63 |
+
self.use_vlm_cache = False
|
| 64 |
+
|
| 65 |
+
self.br = CvBridge()
|
| 66 |
+
self.himg_que_len = 5
|
| 67 |
+
self.himg_que = deque(
|
| 68 |
+
maxlen=self.himg_que_len
|
| 69 |
+
)
|
| 70 |
+
self.himg_sub = self.node.create_subscription(
|
| 71 |
+
CompressedImage,
|
| 72 |
+
self.head_camera_topic_n,
|
| 73 |
+
partial(
|
| 74 |
+
self._vlm_camera_callback,
|
| 75 |
+
que=self.himg_que,
|
| 76 |
+
),
|
| 77 |
+
self.create_qos_profile("reliable")
|
| 78 |
+
)
|
| 79 |
+
|
| 80 |
+
self.hp_ = None
|
| 81 |
+
self.bbox_dict = {"bbox": [], "head_img_base64": ""}
|
| 82 |
+
|
| 83 |
+
|
| 84 |
+
|
| 85 |
+
def create_qos_profile(self, r_mode):
|
| 86 |
+
if r_mode in ["reliable", "r"]:
|
| 87 |
+
qos_profile_pub = rclpy.qos.QoSProfile(
|
| 88 |
+
reliability=rclpy.qos.ReliabilityPolicy.RELIABLE,
|
| 89 |
+
history=rclpy.qos.HistoryPolicy.KEEP_LAST,
|
| 90 |
+
depth=1,
|
| 91 |
+
durability=rclpy.qos.DurabilityPolicy.VOLATILE
|
| 92 |
+
)
|
| 93 |
+
elif r_mode in ["best_effort", "be"]:
|
| 94 |
+
qos_profile_pub = rclpy.qos.QoSProfile(
|
| 95 |
+
reliability=rclpy.qos.ReliabilityPolicy.BEST_EFFORT,
|
| 96 |
+
history=rclpy.qos.HistoryPolicy.KEEP_LAST,
|
| 97 |
+
depth=1,
|
| 98 |
+
durability=rclpy.qos.DurabilityPolicy.VOLATILE
|
| 99 |
+
)
|
| 100 |
+
else:
|
| 101 |
+
qos_profile_pub = None
|
| 102 |
+
logger.error("Invalid reliability mode specified. Use 'reliable' or 'best_effort'.")
|
| 103 |
+
raise ValueError("Invalid reliability mode specified.")
|
| 104 |
+
return qos_profile_pub
|
| 105 |
+
|
| 106 |
+
|
| 107 |
+
def _get_msg_time(self, msg):
|
| 108 |
+
return msg.header.stamp.sec + msg.header.stamp.nanosec * 1e-9
|
| 109 |
+
|
| 110 |
+
def _vlm_camera_callback(self, msg: CompressedImage, que: list):
|
| 111 |
+
img_cv_bgr = self.br.compressed_imgmsg_to_cv2(msg)
|
| 112 |
+
# logger.info(f"Here is camera callback, img_cv_bgr shape is {img_cv_bgr.shape}")
|
| 113 |
+
if len(img_cv_bgr.shape) == 3 and img_cv_bgr.shape[2] == 3:
|
| 114 |
+
img_cv = cv2.cvtColor(img_cv_bgr, cv2.COLOR_BGR2RGB)
|
| 115 |
+
elif len(img_cv_bgr.shape) == 3 and img_cv_bgr.shape[2] == 4:
|
| 116 |
+
img_cv = cv2.cvtColor(img_cv_bgr, cv2.COLOR_BGRA2RGBA)
|
| 117 |
+
else:
|
| 118 |
+
raise ValueError(f"Unexpected image format: {img_cv_bgr.shape}")
|
| 119 |
+
# if self.config.hardware == R1_LITE and "head" in topic:
|
| 120 |
+
# img = img_cv[:, :img_cv.shape[1] // 2]
|
| 121 |
+
img = img_cv
|
| 122 |
+
|
| 123 |
+
# logger.info(f"Here is camera callback, img shape is {img.shape}")
|
| 124 |
+
|
| 125 |
+
que.append(
|
| 126 |
+
dict(
|
| 127 |
+
data=img,
|
| 128 |
+
message_time=self._get_msg_time(msg),
|
| 129 |
+
)
|
| 130 |
+
)
|
| 131 |
+
|
| 132 |
+
|
| 133 |
+
def vlm_srv(self):
|
| 134 |
+
logger.info("Starting VLM Service...")
|
| 135 |
+
|
| 136 |
+
self.srv1 = self.node.create_service(
|
| 137 |
+
VLMInstruction,
|
| 138 |
+
self.server_name1,
|
| 139 |
+
self.vlm_processor1
|
| 140 |
+
)
|
| 141 |
+
self.node.get_logger().info("VLM Server1 started!")
|
| 142 |
+
|
| 143 |
+
self.srv2 = self.node.create_service(
|
| 144 |
+
VLMInstruction,
|
| 145 |
+
self.server_name2,
|
| 146 |
+
self.vlm_processor2
|
| 147 |
+
)
|
| 148 |
+
self.node.get_logger().info("VLM Server2 started!")
|
| 149 |
+
|
| 150 |
+
rclpy.spin(self.node)
|
| 151 |
+
|
| 152 |
+
def decode_img_from_base64(self, img_base64: str, output_format="rgb") -> np.ndarray:
|
| 153 |
+
img_data = base64.b64decode(img_base64)
|
| 154 |
+
# 将二进制数据转换为 numpy 数组
|
| 155 |
+
img_array = np.frombuffer(img_data, dtype=np.uint8)
|
| 156 |
+
# 使用 cv2.imdecode 将其恢复为图像
|
| 157 |
+
img_array = cv2.imdecode(img_array, cv2.IMREAD_COLOR)
|
| 158 |
+
if output_format == "rgb":
|
| 159 |
+
return cv2.cvtColor(img_array, cv2.COLOR_BGR2RGB)
|
| 160 |
+
else:
|
| 161 |
+
return img_array
|
| 162 |
+
|
| 163 |
+
|
| 164 |
+
def imencode_img_to_base64(self, img, input_format="rgb") -> str:
|
| 165 |
+
if input_format == "rgb":
|
| 166 |
+
img = cv2.cvtColor(img, cv2.COLOR_RGB2BGR)
|
| 167 |
+
else:
|
| 168 |
+
pass
|
| 169 |
+
_, buffer = cv2.imencode('.jpg', img)
|
| 170 |
+
# 将二进制数据转换为 base64 字符串
|
| 171 |
+
return base64.b64encode(buffer).decode('utf-8')
|
| 172 |
+
|
| 173 |
+
def publish_to_vla(self, hp_: str, bbox: list[int], head_img_base64: str):
|
| 174 |
+
ver = self.ver
|
| 175 |
+
msg = String()
|
| 176 |
+
json_to_vla = {}
|
| 177 |
+
|
| 178 |
+
json_to_vla["lower_prompt_list"] = [hp_]
|
| 179 |
+
json_to_vla["bbox"] = []
|
| 180 |
+
json_to_vla["head_img_base64"] = ""
|
| 181 |
+
if ver == 1:
|
| 182 |
+
logger.warning("Version 1 you are using, which does not support bbox publishing.")
|
| 183 |
+
elif ver == 2:
|
| 184 |
+
if bbox != [] and head_img_base64 != "":
|
| 185 |
+
json_to_vla["bbox"] = bbox
|
| 186 |
+
json_to_vla["head_img_base64"] = head_img_base64
|
| 187 |
+
|
| 188 |
+
msg.data = json.dumps(json_to_vla, ensure_ascii=False)
|
| 189 |
+
|
| 190 |
+
loop_num = self.loop_num_to_vla
|
| 191 |
+
for _ in range(loop_num):
|
| 192 |
+
self.pub_to_vla.publish(msg)
|
| 193 |
+
|
| 194 |
+
def publish_for_ehi(self, text, img, output_format="bgr"):
|
| 195 |
+
ver = self.ver
|
| 196 |
+
msg = VLAPromptEcho()
|
| 197 |
+
msg.role = "vlm"
|
| 198 |
+
msg.content = text
|
| 199 |
+
if ver == 1:
|
| 200 |
+
pass
|
| 201 |
+
elif ver == 2:
|
| 202 |
+
if output_format == "rgb":
|
| 203 |
+
img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
|
| 204 |
+
else:
|
| 205 |
+
pass
|
| 206 |
+
img_pub = CompressedImage()
|
| 207 |
+
img_pub.data = cv2.imencode('.jpg', img)[1].tobytes()
|
| 208 |
+
msg.image_compressed = img_pub
|
| 209 |
+
|
| 210 |
+
loop_num = self.loop_num_for_ehi
|
| 211 |
+
for _ in range(loop_num):
|
| 212 |
+
self.pub_for_ehi.publish(msg)
|
| 213 |
+
|
| 214 |
+
|
| 215 |
+
def hp_processor(self, higher_prompt: str) -> str:
|
| 216 |
+
hp_ = "NaN"
|
| 217 |
+
try:
|
| 218 |
+
if self.use_qwen:
|
| 219 |
+
hp_ = call_qwen_for_translation(higher_prompt)
|
| 220 |
+
else:
|
| 221 |
+
hp_ = call_gemini_for_translation(higher_prompt)
|
| 222 |
+
except Exception as e:
|
| 223 |
+
logger.info(f"[VLM Server1] Require Gemini for Translation fail! Detail:{str(e)}")
|
| 224 |
+
time.sleep(2)
|
| 225 |
+
return hp_
|
| 226 |
+
|
| 227 |
+
def bbox_processor(self, latest_head_rgb, hp_: str) -> list[int]:
|
| 228 |
+
bbox = []
|
| 229 |
+
try:
|
| 230 |
+
if self.use_qwen:
|
| 231 |
+
bbox = call_qwen_for_bbox(latest_head_rgb, hp_)
|
| 232 |
+
else:
|
| 233 |
+
bbox = call_gemini_for_bbox(latest_head_rgb, hp_)
|
| 234 |
+
except Exception as e:
|
| 235 |
+
model_n = "Qwen" if self.use_qwen else "Gemini"
|
| 236 |
+
logger.info(f"[VLM Server1] Require {model_n} for BBox fail! Detail:{str(e)}")
|
| 237 |
+
time.sleep(2)
|
| 238 |
+
if not isinstance(bbox, list) or len(bbox) != 4 or not all(isinstance(coord, int) for coord in bbox):
|
| 239 |
+
logger.warning(f"[VLM Server1] Invalid bbox format received: {bbox}. Expected a list of 4 integers.")
|
| 240 |
+
return bbox
|
| 241 |
+
|
| 242 |
+
|
| 243 |
+
def refine_hp(self, higher_prompt: str) -> str:
|
| 244 |
+
return higher_prompt.strip().lower()
|
| 245 |
+
|
| 246 |
+
|
| 247 |
+
def vlm_processor1(self, request, response):
|
| 248 |
+
ins_dict = json.loads(request.instruction)
|
| 249 |
+
higher_prompt = self.refine_hp(ins_dict["content"])
|
| 250 |
+
self.use_vlm_cache = True if ins_dict.get("use_vlm_cache", "false").lower() == "true" else False
|
| 251 |
+
hp_ = higher_prompt
|
| 252 |
+
|
| 253 |
+
response.success = False
|
| 254 |
+
|
| 255 |
+
if len(self.himg_que) == 0:
|
| 256 |
+
logger.info(f"[VLM Server1] No head image received!")
|
| 257 |
+
return response
|
| 258 |
+
latest_head_rgb = self.himg_que[-1]["data"]
|
| 259 |
+
|
| 260 |
+
|
| 261 |
+
if higher_prompt != "":
|
| 262 |
+
if higher_prompt == "reset":
|
| 263 |
+
self.publish_to_vla("reset", [], "")
|
| 264 |
+
self.hp_ = hp_
|
| 265 |
+
|
| 266 |
+
self.bbox_dict["bbox"] = []
|
| 267 |
+
self.bbox_dict["head_img_base64"] = ""
|
| 268 |
+
logger.info(f"[VLM Server1] Successfully processed instruction: {hp_}!")
|
| 269 |
+
response.success = True
|
| 270 |
+
elif higher_prompt == "stop":
|
| 271 |
+
self.hp_ = hp_
|
| 272 |
+
|
| 273 |
+
self.bbox_dict["bbox"] = []
|
| 274 |
+
self.bbox_dict["head_img_base64"] = ""
|
| 275 |
+
logger.info(f"[VLM Server1] Successfully processed instruction: {hp_}!")
|
| 276 |
+
response.success = True
|
| 277 |
+
else:
|
| 278 |
+
self.publish_to_vla("reset", [], "")
|
| 279 |
+
if self.use_vlm_cache:
|
| 280 |
+
for proc_dict in self.vlm_proc_que:
|
| 281 |
+
if higher_prompt in proc_dict:
|
| 282 |
+
hp_ = proc_dict[higher_prompt]["hp_"]
|
| 283 |
+
bbox = proc_dict[higher_prompt]["bbox"]
|
| 284 |
+
head_img_base64 = proc_dict[higher_prompt]["head_img_base64"]
|
| 285 |
+
logger.info(f"[VLM Server1] Found cached hp for the instruction: {higher_prompt} -> {hp_}!")
|
| 286 |
+
bbox_in_img_bgr = get_simple_vb_imgcv(self.decode_img_from_base64(head_img_base64, output_format="rgb"),
|
| 287 |
+
bbox, input_format="rgb")
|
| 288 |
+
self.publish_for_ehi(hp_, bbox_in_img_bgr)
|
| 289 |
+
|
| 290 |
+
|
| 291 |
+
self.hp_ = hp_
|
| 292 |
+
self.bbox_dict["bbox"] = bbox
|
| 293 |
+
self.bbox_dict["head_img_base64"] = head_img_base64
|
| 294 |
+
logger.info(f"[VLM Server1] Successfully processed instruction: {higher_prompt} -> {hp_} and bbox: {bbox}!")
|
| 295 |
+
response.success = True
|
| 296 |
+
self.use_vlm_cache = False
|
| 297 |
+
return response
|
| 298 |
+
|
| 299 |
+
|
| 300 |
+
logger.info(f"[VLM Server1] Processing instruction: {higher_prompt}!")
|
| 301 |
+
hp_ = self.hp_processor(higher_prompt)
|
| 302 |
+
|
| 303 |
+
if hp_ != "NaN":
|
| 304 |
+
bbox = self.bbox_processor(latest_head_rgb, hp_)
|
| 305 |
+
if bbox != []:
|
| 306 |
+
bbox_in_img_bgr = get_simple_vb_imgcv(latest_head_rgb, bbox, input_format="rgb")
|
| 307 |
+
self.publish_for_ehi(hp_, bbox_in_img_bgr)
|
| 308 |
+
|
| 309 |
+
self.hp_ = hp_
|
| 310 |
+
self.bbox_dict["bbox"] = bbox
|
| 311 |
+
head_img_base64 = self.imencode_img_to_base64(latest_head_rgb, input_format="rgb")
|
| 312 |
+
self.bbox_dict["head_img_base64"] = head_img_base64
|
| 313 |
+
|
| 314 |
+
if self.use_vlm_cache:
|
| 315 |
+
self.vlm_proc_que.append({higher_prompt:{
|
| 316 |
+
"hp_": hp_,
|
| 317 |
+
"bbox": bbox,
|
| 318 |
+
"head_img_base64": head_img_base64
|
| 319 |
+
}
|
| 320 |
+
})
|
| 321 |
+
|
| 322 |
+
logger.info(f"[VLM Server1] Successfully processed instruction: {higher_prompt} -> {hp_} and bbox: {bbox}!")
|
| 323 |
+
response.success = True
|
| 324 |
+
else:
|
| 325 |
+
logger.info(f"[VLM Server1] BBox process fail! Try again!")
|
| 326 |
+
else:
|
| 327 |
+
logger.info(f"[VLM Server1] Instruction process fail! Try again!")
|
| 328 |
+
|
| 329 |
+
self.use_vlm_cache = False
|
| 330 |
+
return response
|
| 331 |
+
|
| 332 |
+
def vlm_processor2(self, request, response):
|
| 333 |
+
hp_ = self.hp_
|
| 334 |
+
bbox_dict = self.bbox_dict
|
| 335 |
+
bbox = bbox_dict["bbox"]
|
| 336 |
+
head_img_base64 = bbox_dict["head_img_base64"]
|
| 337 |
+
|
| 338 |
+
if hp_ is None or bbox == []:
|
| 339 |
+
response.success = False
|
| 340 |
+
response.reserved = "No prompts & bbox sent to VLA"
|
| 341 |
+
else:
|
| 342 |
+
self.publish_to_vla(hp_, bbox, head_img_base64)
|
| 343 |
+
response.success = True
|
| 344 |
+
response.reserved = f"Prompts sent to VLA is {hp_}, Bbox is {bbox}. \nPart of head image is {head_img_base64[:50]}..."
|
| 345 |
+
|
| 346 |
+
logger.info(f"[VLM Server2] Successfully sent to VLA hp: {hp_}, bbox: {bbox} and head_img_base64!")
|
| 347 |
+
return response
|
| 348 |
+
|
| 349 |
+
|
| 350 |
+
|
| 351 |
+
def main(argv=None):
|
| 352 |
+
rclpy.init(args=argv)
|
| 353 |
+
parser = argparse.ArgumentParser()
|
| 354 |
+
parser.add_argument("--reliabty-mode", dest="reliabty_mode", type=str, default="reliable")
|
| 355 |
+
parser.add_argument('--use-qwen', dest='use_qwen', action='store_true',
|
| 356 |
+
help='Enable Qwen usage')
|
| 357 |
+
parser.add_argument('--no-use-qwen', dest='use_qwen', action='store_false',
|
| 358 |
+
help='Disable Qwen usage')
|
| 359 |
+
args, unknown = parser.parse_known_args(argv)
|
| 360 |
+
|
| 361 |
+
vlm_node = VLMNode(
|
| 362 |
+
reliabty_mode=args.reliabty_mode,
|
| 363 |
+
use_qwen=args.use_qwen
|
| 364 |
+
)
|
| 365 |
+
|
| 366 |
+
try:
|
| 367 |
+
logger.info('Beginning VLM Node, shut down with CTRL-C')
|
| 368 |
+
vlm_node.vlm_srv()
|
| 369 |
+
finally:
|
| 370 |
+
rclpy.shutdown()
|
| 371 |
+
|
g0plus_dockerfile/docker-assets/code/Hierarchical_System/src/g0_vlm_node/package.xml
ADDED
|
@@ -0,0 +1,28 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?xml version="1.0"?>
|
| 2 |
+
<?xml-model href="http://download.ros.org/schema/package_format3.xsd" schematypens="http://www.w3.org/2001/XMLSchema"?>
|
| 3 |
+
<package format="3">
|
| 4 |
+
<name>g0_vlm_node</name>
|
| 5 |
+
<version>0.0.0</version>
|
| 6 |
+
<description>TODO: Package description</description>
|
| 7 |
+
<maintainer email="jingyang.mai@galaxea.ai">user</maintainer>
|
| 8 |
+
<license>TODO: License declaration</license>
|
| 9 |
+
|
| 10 |
+
<depend>rclpy</depend>
|
| 11 |
+
<depend>std_msgs</depend>
|
| 12 |
+
|
| 13 |
+
<depend>sensor_msgs</depend>
|
| 14 |
+
<depend>g0_vlm_interface</depend>
|
| 15 |
+
<buildtool_depend>rosidl_default_generators</buildtool_depend>
|
| 16 |
+
<exec_depend>rosidl_default_runtime</exec_depend>
|
| 17 |
+
<member_of_group>rosidl_interface_packages</member_of_group>
|
| 18 |
+
|
| 19 |
+
|
| 20 |
+
<test_depend>ament_copyright</test_depend>
|
| 21 |
+
<test_depend>ament_flake8</test_depend>
|
| 22 |
+
<test_depend>ament_pep257</test_depend>
|
| 23 |
+
<test_depend>python3-pytest</test_depend>
|
| 24 |
+
|
| 25 |
+
<export>
|
| 26 |
+
<build_type>ament_python</build_type>
|
| 27 |
+
</export>
|
| 28 |
+
</package>
|
g0plus_dockerfile/docker-assets/code/Hierarchical_System/src/g0_vlm_node/resource/g0_vlm_node
ADDED
|
File without changes
|
g0plus_dockerfile/docker-assets/code/Hierarchical_System/src/g0_vlm_node/setup.cfg
ADDED
|
@@ -0,0 +1,4 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
[develop]
|
| 2 |
+
script_dir=$base/lib/g0_vlm_node
|
| 3 |
+
[install]
|
| 4 |
+
install_scripts=$base/lib/g0_vlm_node
|
g0plus_dockerfile/docker-assets/code/Hierarchical_System/src/g0_vlm_node/setup.py
ADDED
|
@@ -0,0 +1,30 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
from setuptools import find_packages, setup
|
| 2 |
+
|
| 3 |
+
package_name = 'g0_vlm_node'
|
| 4 |
+
|
| 5 |
+
setup(
|
| 6 |
+
name=package_name,
|
| 7 |
+
version='0.0.0',
|
| 8 |
+
packages=find_packages(exclude=['test']),
|
| 9 |
+
data_files=[
|
| 10 |
+
('share/ament_index/resource_index/packages',
|
| 11 |
+
['resource/' + package_name]),
|
| 12 |
+
('share/' + package_name, ['package.xml']),
|
| 13 |
+
],
|
| 14 |
+
install_requires=['setuptools'],
|
| 15 |
+
zip_safe=True,
|
| 16 |
+
maintainer='user',
|
| 17 |
+
maintainer_email='jingyang.mai@galaxea.ai',
|
| 18 |
+
description='TODO: Package description',
|
| 19 |
+
license='TODO: License declaration',
|
| 20 |
+
extras_require={
|
| 21 |
+
'test': [
|
| 22 |
+
'pytest',
|
| 23 |
+
],
|
| 24 |
+
},
|
| 25 |
+
entry_points={
|
| 26 |
+
'console_scripts': [
|
| 27 |
+
'vlm_main = g0_vlm_node.vlm_main:main'
|
| 28 |
+
],
|
| 29 |
+
},
|
| 30 |
+
)
|
g0plus_dockerfile/docker-assets/code/Hierarchical_System/src/g0_vlm_node/test/test_copyright.py
ADDED
|
@@ -0,0 +1,25 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# Copyright 2015 Open Source Robotics Foundation, Inc.
|
| 2 |
+
#
|
| 3 |
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
| 4 |
+
# you may not use this file except in compliance with the License.
|
| 5 |
+
# You may obtain a copy of the License at
|
| 6 |
+
#
|
| 7 |
+
# http://www.apache.org/licenses/LICENSE-2.0
|
| 8 |
+
#
|
| 9 |
+
# Unless required by applicable law or agreed to in writing, software
|
| 10 |
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
| 11 |
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
| 12 |
+
# See the License for the specific language governing permissions and
|
| 13 |
+
# limitations under the License.
|
| 14 |
+
|
| 15 |
+
from ament_copyright.main import main
|
| 16 |
+
import pytest
|
| 17 |
+
|
| 18 |
+
|
| 19 |
+
# Remove the `skip` decorator once the source file(s) have a copyright header
|
| 20 |
+
@pytest.mark.skip(reason='No copyright header has been placed in the generated source file.')
|
| 21 |
+
@pytest.mark.copyright
|
| 22 |
+
@pytest.mark.linter
|
| 23 |
+
def test_copyright():
|
| 24 |
+
rc = main(argv=['.', 'test'])
|
| 25 |
+
assert rc == 0, 'Found errors'
|
g0plus_dockerfile/docker-assets/code/Hierarchical_System/src/g0_vlm_node/test/test_flake8.py
ADDED
|
@@ -0,0 +1,25 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# Copyright 2017 Open Source Robotics Foundation, Inc.
|
| 2 |
+
#
|
| 3 |
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
| 4 |
+
# you may not use this file except in compliance with the License.
|
| 5 |
+
# You may obtain a copy of the License at
|
| 6 |
+
#
|
| 7 |
+
# http://www.apache.org/licenses/LICENSE-2.0
|
| 8 |
+
#
|
| 9 |
+
# Unless required by applicable law or agreed to in writing, software
|
| 10 |
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
| 11 |
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
| 12 |
+
# See the License for the specific language governing permissions and
|
| 13 |
+
# limitations under the License.
|
| 14 |
+
|
| 15 |
+
from ament_flake8.main import main_with_errors
|
| 16 |
+
import pytest
|
| 17 |
+
|
| 18 |
+
|
| 19 |
+
@pytest.mark.flake8
|
| 20 |
+
@pytest.mark.linter
|
| 21 |
+
def test_flake8():
|
| 22 |
+
rc, errors = main_with_errors(argv=[])
|
| 23 |
+
assert rc == 0, \
|
| 24 |
+
'Found %d code style errors / warnings:\n' % len(errors) + \
|
| 25 |
+
'\n'.join(errors)
|
g0plus_dockerfile/docker-assets/code/Hierarchical_System/src/g0_vlm_node/test/test_pep257.py
ADDED
|
@@ -0,0 +1,23 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# Copyright 2015 Open Source Robotics Foundation, Inc.
|
| 2 |
+
#
|
| 3 |
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
| 4 |
+
# you may not use this file except in compliance with the License.
|
| 5 |
+
# You may obtain a copy of the License at
|
| 6 |
+
#
|
| 7 |
+
# http://www.apache.org/licenses/LICENSE-2.0
|
| 8 |
+
#
|
| 9 |
+
# Unless required by applicable law or agreed to in writing, software
|
| 10 |
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
| 11 |
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
| 12 |
+
# See the License for the specific language governing permissions and
|
| 13 |
+
# limitations under the License.
|
| 14 |
+
|
| 15 |
+
from ament_pep257.main import main
|
| 16 |
+
import pytest
|
| 17 |
+
|
| 18 |
+
|
| 19 |
+
@pytest.mark.linter
|
| 20 |
+
@pytest.mark.pep257
|
| 21 |
+
def test_pep257():
|
| 22 |
+
rc = main(argv=['.', 'test'])
|
| 23 |
+
assert rc == 0, 'Found code style errors / warnings'
|
g0plus_dockerfile/docker-assets/code/Hierarchical_System/src/vla/CMakeLists.txt
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
cmake_minimum_required(VERSION 3.16)
|
| 2 |
+
project(vla_msg)
|
| 3 |
+
|
| 4 |
+
find_package(ament_cmake REQUIRED)
|
| 5 |
+
find_package(std_msgs REQUIRED)
|
| 6 |
+
|
| 7 |
+
find_package(sensor_msgs REQUIRED)
|
| 8 |
+
find_package(rosidl_default_generators REQUIRED)
|
| 9 |
+
|
| 10 |
+
file(GLOB msg_files LIST_DIRECTORIES false RELATIVE "${CMAKE_CURRENT_SOURCE_DIR}" "msg/*.msg")
|
| 11 |
+
file(GLOB srv_files LIST_DIRECTORIES false RELATIVE "${CMAKE_CURRENT_SOURCE_DIR}" "srv/*.srv")
|
| 12 |
+
|
| 13 |
+
rosidl_generate_interfaces(${PROJECT_NAME}
|
| 14 |
+
${msg_files}
|
| 15 |
+
${srv_files}
|
| 16 |
+
DEPENDENCIES std_msgs sensor_msgs
|
| 17 |
+
)
|
| 18 |
+
|
| 19 |
+
ament_export_dependencies(rosidl_default_runtime std_msgs sensor_msgs)
|
| 20 |
+
|
| 21 |
+
ament_package()
|
g0plus_dockerfile/docker-assets/code/Hierarchical_System/src/vla/msg/VLAPromptEcho.msg
ADDED
|
@@ -0,0 +1,5 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
std_msgs/Header header
|
| 2 |
+
string role
|
| 3 |
+
string content
|
| 4 |
+
sensor_msgs/CompressedImage image_compressed
|
| 5 |
+
string reserved
|
g0plus_dockerfile/docker-assets/code/Hierarchical_System/src/vla/package.xml
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?xml version="1.0"?>
|
| 2 |
+
<package format="3">
|
| 3 |
+
<name>vla_msg</name>
|
| 4 |
+
<version>0.1.0</version>
|
| 5 |
+
<description>The vla_msg package</description>
|
| 6 |
+
<member_of_group>rosidl_interface_packages</member_of_group>
|
| 7 |
+
<maintainer email="support@galaxea.ai">Galaxea AI</maintainer>
|
| 8 |
+
<license>TODO</license>
|
| 9 |
+
<buildtool_depend>ament_cmake</buildtool_depend>
|
| 10 |
+
<build_depend>rosidl_default_generators</build_depend>
|
| 11 |
+
<exec_depend>rosidl_default_runtime</exec_depend>
|
| 12 |
+
<depend>std_msgs</depend>
|
| 13 |
+
<depend>sensor_msgs</depend>
|
| 14 |
+
<depend>vision_msgs</depend>
|
| 15 |
+
<export>
|
| 16 |
+
<build_type>ament_cmake</build_type>
|
| 17 |
+
</export>
|
| 18 |
+
</package>
|
g0plus_dockerfile/docker-assets/code/Hierarchical_System/src/vla/srv/VLMInstruction.srv
ADDED
|
@@ -0,0 +1,4 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
string instruction
|
| 2 |
+
---
|
| 3 |
+
bool success
|
| 4 |
+
string reserved
|
g0plus_dockerfile/docker-assets/data/TensorRT-10.13.0.35/data/char-rnn/char-rnn.wts
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:8e3eea72440ca567a606df4a6023296b741c060092b66e0438bf65280ad0e97b
|
| 3 |
+
size 51181712
|
g0plus_dockerfile/docker-assets/data/TensorRT-10.13.0.35/data/char-rnn/model/checkpoint
ADDED
|
@@ -0,0 +1,6 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
model_checkpoint_path: "model-20080"
|
| 2 |
+
all_model_checkpoint_paths: "model-10040"
|
| 3 |
+
all_model_checkpoint_paths: "model-12048"
|
| 4 |
+
all_model_checkpoint_paths: "model-16064"
|
| 5 |
+
all_model_checkpoint_paths: "model-18072"
|
| 6 |
+
all_model_checkpoint_paths: "model-20080"
|
g0plus_dockerfile/docker-assets/data/TensorRT-10.13.0.35/data/char-rnn/model/model-20080.data-00000-of-00001
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:d237c223cb17cb956459de977e353714d49b585ef79cf1548d4c78e129062c03
|
| 3 |
+
size 51180336
|
g0plus_dockerfile/docker-assets/data/TensorRT-10.13.0.35/data/char-rnn/model/model-20080.index
ADDED
|
Binary file (1.21 kB). View file
|
|
|
g0plus_dockerfile/docker-assets/data/TensorRT-10.13.0.35/data/char-rnn/model/model-20080.meta
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:93e392adc47837ba41946df3d848dc4ba87b378620a722674821077c4f724bba
|
| 3 |
+
size 684877
|
g0plus_dockerfile/docker-assets/data/TensorRT-10.13.0.35/data/int8_api/README.md
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# Sample Int8 API
|
| 2 |
+
|
| 3 |
+
## resnet50
|
| 4 |
+
File: [airliner.ppm]
|
| 5 |
+
The input sample images used to do int8 calibration.
|
| 6 |
+
|
| 7 |
+
File: [reference_labels.txt]
|
| 8 |
+
The input reference labels used to do int8 calibration.
|
| 9 |
+
|
| 10 |
+
File: [resnet50_per_tensor_dynamic_range.txt]
|
| 11 |
+
The absolute max value for each tensor.
|
g0plus_dockerfile/docker-assets/data/TensorRT-10.13.0.35/data/int8_api/airliner.ppm
ADDED
|
|
Git LFS Details
|
g0plus_dockerfile/docker-assets/data/TensorRT-10.13.0.35/data/int8_api/reference_labels.txt
ADDED
|
@@ -0,0 +1,1000 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
tench
|
| 2 |
+
goldfish
|
| 3 |
+
great white shark
|
| 4 |
+
tiger shark
|
| 5 |
+
hammerhead
|
| 6 |
+
electric ray
|
| 7 |
+
stingray
|
| 8 |
+
cock
|
| 9 |
+
hen
|
| 10 |
+
ostrich
|
| 11 |
+
brambling
|
| 12 |
+
goldfinch
|
| 13 |
+
house finch
|
| 14 |
+
junco
|
| 15 |
+
indigo bunting
|
| 16 |
+
robin
|
| 17 |
+
bulbul
|
| 18 |
+
jay
|
| 19 |
+
magpie
|
| 20 |
+
chickadee
|
| 21 |
+
water ouzel
|
| 22 |
+
kite
|
| 23 |
+
bald eagle
|
| 24 |
+
vulture
|
| 25 |
+
great grey owl
|
| 26 |
+
European fire salamander
|
| 27 |
+
common newt
|
| 28 |
+
eft
|
| 29 |
+
spotted salamander
|
| 30 |
+
axolotl
|
| 31 |
+
bullfrog
|
| 32 |
+
tree frog
|
| 33 |
+
tailed frog
|
| 34 |
+
loggerhead
|
| 35 |
+
leatherback turtle
|
| 36 |
+
mud turtle
|
| 37 |
+
terrapin
|
| 38 |
+
box turtle
|
| 39 |
+
banded gecko
|
| 40 |
+
common iguana
|
| 41 |
+
American chameleon
|
| 42 |
+
whiptail
|
| 43 |
+
agama
|
| 44 |
+
frilled lizard
|
| 45 |
+
alligator lizard
|
| 46 |
+
Gila monster
|
| 47 |
+
green lizard
|
| 48 |
+
African chameleon
|
| 49 |
+
Komodo dragon
|
| 50 |
+
African crocodile
|
| 51 |
+
American alligator
|
| 52 |
+
triceratops
|
| 53 |
+
thunder snake
|
| 54 |
+
ringneck snake
|
| 55 |
+
hognose snake
|
| 56 |
+
green snake
|
| 57 |
+
king snake
|
| 58 |
+
garter snake
|
| 59 |
+
water snake
|
| 60 |
+
vine snake
|
| 61 |
+
night snake
|
| 62 |
+
boa constrictor
|
| 63 |
+
rock python
|
| 64 |
+
Indian cobra
|
| 65 |
+
green mamba
|
| 66 |
+
sea snake
|
| 67 |
+
horned viper
|
| 68 |
+
diamondback
|
| 69 |
+
sidewinder
|
| 70 |
+
trilobite
|
| 71 |
+
harvestman
|
| 72 |
+
scorpion
|
| 73 |
+
black and gold garden spider
|
| 74 |
+
barn spider
|
| 75 |
+
garden spider
|
| 76 |
+
black widow
|
| 77 |
+
tarantula
|
| 78 |
+
wolf spider
|
| 79 |
+
tick
|
| 80 |
+
centipede
|
| 81 |
+
black grouse
|
| 82 |
+
ptarmigan
|
| 83 |
+
ruffed grouse
|
| 84 |
+
prairie chicken
|
| 85 |
+
peacock
|
| 86 |
+
quail
|
| 87 |
+
partridge
|
| 88 |
+
African grey
|
| 89 |
+
macaw
|
| 90 |
+
sulphur-crested cockatoo
|
| 91 |
+
lorikeet
|
| 92 |
+
coucal
|
| 93 |
+
bee eater
|
| 94 |
+
hornbill
|
| 95 |
+
hummingbird
|
| 96 |
+
jacamar
|
| 97 |
+
toucan
|
| 98 |
+
drake
|
| 99 |
+
red-breasted merganser
|
| 100 |
+
goose
|
| 101 |
+
black swan
|
| 102 |
+
tusker
|
| 103 |
+
echidna
|
| 104 |
+
platypus
|
| 105 |
+
wallaby
|
| 106 |
+
koala
|
| 107 |
+
wombat
|
| 108 |
+
jellyfish
|
| 109 |
+
sea anemone
|
| 110 |
+
brain coral
|
| 111 |
+
flatworm
|
| 112 |
+
nematode
|
| 113 |
+
conch
|
| 114 |
+
snail
|
| 115 |
+
slug
|
| 116 |
+
sea slug
|
| 117 |
+
chiton
|
| 118 |
+
chambered nautilus
|
| 119 |
+
Dungeness crab
|
| 120 |
+
rock crab
|
| 121 |
+
fiddler crab
|
| 122 |
+
king crab
|
| 123 |
+
American lobster
|
| 124 |
+
spiny lobster
|
| 125 |
+
crayfish
|
| 126 |
+
hermit crab
|
| 127 |
+
isopod
|
| 128 |
+
white stork
|
| 129 |
+
black stork
|
| 130 |
+
spoonbill
|
| 131 |
+
flamingo
|
| 132 |
+
little blue heron
|
| 133 |
+
American egret
|
| 134 |
+
bittern
|
| 135 |
+
crane
|
| 136 |
+
limpkin
|
| 137 |
+
European gallinule
|
| 138 |
+
American coot
|
| 139 |
+
bustard
|
| 140 |
+
ruddy turnstone
|
| 141 |
+
red-backed sandpiper
|
| 142 |
+
redshank
|
| 143 |
+
dowitcher
|
| 144 |
+
oystercatcher
|
| 145 |
+
pelican
|
| 146 |
+
king penguin
|
| 147 |
+
albatross
|
| 148 |
+
grey whale
|
| 149 |
+
killer whale
|
| 150 |
+
dugong
|
| 151 |
+
sea lion
|
| 152 |
+
Chihuahua
|
| 153 |
+
Japanese spaniel
|
| 154 |
+
Maltese dog
|
| 155 |
+
Pekinese
|
| 156 |
+
Shih-Tzu
|
| 157 |
+
Blenheim spaniel
|
| 158 |
+
papillon
|
| 159 |
+
toy terrier
|
| 160 |
+
Rhodesian ridgeback
|
| 161 |
+
Afghan hound
|
| 162 |
+
basset
|
| 163 |
+
beagle
|
| 164 |
+
bloodhound
|
| 165 |
+
bluetick
|
| 166 |
+
black-and-tan coonhound
|
| 167 |
+
Walker hound
|
| 168 |
+
English foxhound
|
| 169 |
+
redbone
|
| 170 |
+
borzoi
|
| 171 |
+
Irish wolfhound
|
| 172 |
+
Italian greyhound
|
| 173 |
+
whippet
|
| 174 |
+
Ibizan hound
|
| 175 |
+
Norwegian elkhound
|
| 176 |
+
otterhound
|
| 177 |
+
Saluki
|
| 178 |
+
Scottish deerhound
|
| 179 |
+
Weimaraner
|
| 180 |
+
Staffordshire bullterrier
|
| 181 |
+
American Staffordshire terrier
|
| 182 |
+
Bedlington terrier
|
| 183 |
+
Border terrier
|
| 184 |
+
Kerry blue terrier
|
| 185 |
+
Irish terrier
|
| 186 |
+
Norfolk terrier
|
| 187 |
+
Norwich terrier
|
| 188 |
+
Yorkshire terrier
|
| 189 |
+
wire-haired fox terrier
|
| 190 |
+
Lakeland terrier
|
| 191 |
+
Sealyham terrier
|
| 192 |
+
Airedale
|
| 193 |
+
cairn
|
| 194 |
+
Australian terrier
|
| 195 |
+
Dandie Dinmont
|
| 196 |
+
Boston bull
|
| 197 |
+
miniature schnauzer
|
| 198 |
+
giant schnauzer
|
| 199 |
+
standard schnauzer
|
| 200 |
+
Scotch terrier
|
| 201 |
+
Tibetan terrier
|
| 202 |
+
silky terrier
|
| 203 |
+
soft-coated wheaten terrier
|
| 204 |
+
West Highland white terrier
|
| 205 |
+
Lhasa
|
| 206 |
+
flat-coated retriever
|
| 207 |
+
curly-coated retriever
|
| 208 |
+
golden retriever
|
| 209 |
+
Labrador retriever
|
| 210 |
+
Chesapeake Bay retriever
|
| 211 |
+
German short-haired pointer
|
| 212 |
+
vizsla
|
| 213 |
+
English setter
|
| 214 |
+
Irish setter
|
| 215 |
+
Gordon setter
|
| 216 |
+
Brittany spaniel
|
| 217 |
+
clumber
|
| 218 |
+
English springer
|
| 219 |
+
Welsh springer spaniel
|
| 220 |
+
cocker spaniel
|
| 221 |
+
Sussex spaniel
|
| 222 |
+
Irish water spaniel
|
| 223 |
+
kuvasz
|
| 224 |
+
schipperke
|
| 225 |
+
groenendael
|
| 226 |
+
malinois
|
| 227 |
+
briard
|
| 228 |
+
kelpie
|
| 229 |
+
komondor
|
| 230 |
+
Old English sheepdog
|
| 231 |
+
Shetland sheepdog
|
| 232 |
+
collie
|
| 233 |
+
Border collie
|
| 234 |
+
Bouvier des Flandres
|
| 235 |
+
Rottweiler
|
| 236 |
+
German shepherd
|
| 237 |
+
Doberman
|
| 238 |
+
miniature pinscher
|
| 239 |
+
Greater Swiss Mountain dog
|
| 240 |
+
Bernese mountain dog
|
| 241 |
+
Appenzeller
|
| 242 |
+
EntleBucher
|
| 243 |
+
boxer
|
| 244 |
+
bull mastiff
|
| 245 |
+
Tibetan mastiff
|
| 246 |
+
French bulldog
|
| 247 |
+
Great Dane
|
| 248 |
+
Saint Bernard
|
| 249 |
+
Eskimo dog
|
| 250 |
+
malamute
|
| 251 |
+
Siberian husky
|
| 252 |
+
dalmatian
|
| 253 |
+
affenpinscher
|
| 254 |
+
basenji
|
| 255 |
+
pug
|
| 256 |
+
Leonberg
|
| 257 |
+
Newfoundland
|
| 258 |
+
Great Pyrenees
|
| 259 |
+
Samoyed
|
| 260 |
+
Pomeranian
|
| 261 |
+
chow
|
| 262 |
+
keeshond
|
| 263 |
+
Brabancon griffon
|
| 264 |
+
Pembroke
|
| 265 |
+
Cardigan
|
| 266 |
+
toy poodle
|
| 267 |
+
miniature poodle
|
| 268 |
+
standard poodle
|
| 269 |
+
Mexican hairless
|
| 270 |
+
timber wolf
|
| 271 |
+
white wolf
|
| 272 |
+
red wolf
|
| 273 |
+
coyote
|
| 274 |
+
dingo
|
| 275 |
+
dhole
|
| 276 |
+
African hunting dog
|
| 277 |
+
hyena
|
| 278 |
+
red fox
|
| 279 |
+
kit fox
|
| 280 |
+
Arctic fox
|
| 281 |
+
grey fox
|
| 282 |
+
tabby
|
| 283 |
+
tiger cat
|
| 284 |
+
Persian cat
|
| 285 |
+
Siamese cat
|
| 286 |
+
Egyptian cat
|
| 287 |
+
cougar
|
| 288 |
+
lynx
|
| 289 |
+
leopard
|
| 290 |
+
snow leopard
|
| 291 |
+
jaguar
|
| 292 |
+
lion
|
| 293 |
+
tiger
|
| 294 |
+
cheetah
|
| 295 |
+
brown bear
|
| 296 |
+
American black bear
|
| 297 |
+
ice bear
|
| 298 |
+
sloth bear
|
| 299 |
+
mongoose
|
| 300 |
+
meerkat
|
| 301 |
+
tiger beetle
|
| 302 |
+
ladybug
|
| 303 |
+
ground beetle
|
| 304 |
+
long-horned beetle
|
| 305 |
+
leaf beetle
|
| 306 |
+
dung beetle
|
| 307 |
+
rhinoceros beetle
|
| 308 |
+
weevil
|
| 309 |
+
fly
|
| 310 |
+
bee
|
| 311 |
+
ant
|
| 312 |
+
grasshopper
|
| 313 |
+
cricket
|
| 314 |
+
walking stick
|
| 315 |
+
cockroach
|
| 316 |
+
mantis
|
| 317 |
+
cicada
|
| 318 |
+
leafhopper
|
| 319 |
+
lacewing
|
| 320 |
+
dragonfly
|
| 321 |
+
damselfly
|
| 322 |
+
admiral
|
| 323 |
+
ringlet
|
| 324 |
+
monarch
|
| 325 |
+
cabbage butterfly
|
| 326 |
+
sulphur butterfly
|
| 327 |
+
lycaenid
|
| 328 |
+
starfish
|
| 329 |
+
sea urchin
|
| 330 |
+
sea cucumber
|
| 331 |
+
wood rabbit
|
| 332 |
+
hare
|
| 333 |
+
Angora
|
| 334 |
+
hamster
|
| 335 |
+
porcupine
|
| 336 |
+
fox squirrel
|
| 337 |
+
marmot
|
| 338 |
+
beaver
|
| 339 |
+
guinea pig
|
| 340 |
+
sorrel
|
| 341 |
+
zebra
|
| 342 |
+
hog
|
| 343 |
+
wild boar
|
| 344 |
+
warthog
|
| 345 |
+
hippopotamus
|
| 346 |
+
ox
|
| 347 |
+
water buffalo
|
| 348 |
+
bison
|
| 349 |
+
ram
|
| 350 |
+
bighorn
|
| 351 |
+
ibex
|
| 352 |
+
hartebeest
|
| 353 |
+
impala
|
| 354 |
+
gazelle
|
| 355 |
+
Arabian camel
|
| 356 |
+
llama
|
| 357 |
+
weasel
|
| 358 |
+
mink
|
| 359 |
+
polecat
|
| 360 |
+
black-footed ferret
|
| 361 |
+
otter
|
| 362 |
+
skunk
|
| 363 |
+
badger
|
| 364 |
+
armadillo
|
| 365 |
+
three-toed sloth
|
| 366 |
+
orangutan
|
| 367 |
+
gorilla
|
| 368 |
+
chimpanzee
|
| 369 |
+
gibbon
|
| 370 |
+
siamang
|
| 371 |
+
guenon
|
| 372 |
+
patas
|
| 373 |
+
baboon
|
| 374 |
+
macaque
|
| 375 |
+
langur
|
| 376 |
+
colobus
|
| 377 |
+
proboscis monkey
|
| 378 |
+
marmoset
|
| 379 |
+
capuchin
|
| 380 |
+
howler monkey
|
| 381 |
+
titi
|
| 382 |
+
spider monkey
|
| 383 |
+
squirrel monkey
|
| 384 |
+
Madagascar cat
|
| 385 |
+
indri
|
| 386 |
+
Indian elephant
|
| 387 |
+
African elephant
|
| 388 |
+
lesser panda
|
| 389 |
+
giant panda
|
| 390 |
+
barracouta
|
| 391 |
+
eel
|
| 392 |
+
coho
|
| 393 |
+
rock beauty
|
| 394 |
+
anemone fish
|
| 395 |
+
sturgeon
|
| 396 |
+
gar
|
| 397 |
+
lionfish
|
| 398 |
+
puffer
|
| 399 |
+
abacus
|
| 400 |
+
abaya
|
| 401 |
+
academic gown
|
| 402 |
+
accordion
|
| 403 |
+
acoustic guitar
|
| 404 |
+
aircraft carrier
|
| 405 |
+
airliner
|
| 406 |
+
airship
|
| 407 |
+
altar
|
| 408 |
+
ambulance
|
| 409 |
+
amphibian
|
| 410 |
+
analog clock
|
| 411 |
+
apiary
|
| 412 |
+
apron
|
| 413 |
+
ashcan
|
| 414 |
+
assault rifle
|
| 415 |
+
backpack
|
| 416 |
+
bakery
|
| 417 |
+
balance beam
|
| 418 |
+
balloon
|
| 419 |
+
ballpoint
|
| 420 |
+
Band Aid
|
| 421 |
+
banjo
|
| 422 |
+
bannister
|
| 423 |
+
barbell
|
| 424 |
+
barber chair
|
| 425 |
+
barbershop
|
| 426 |
+
barn
|
| 427 |
+
barometer
|
| 428 |
+
barrel
|
| 429 |
+
barrow
|
| 430 |
+
baseball
|
| 431 |
+
basketball
|
| 432 |
+
bassinet
|
| 433 |
+
bassoon
|
| 434 |
+
bathing cap
|
| 435 |
+
bath towel
|
| 436 |
+
bathtub
|
| 437 |
+
beach wagon
|
| 438 |
+
beacon
|
| 439 |
+
beaker
|
| 440 |
+
bearskin
|
| 441 |
+
beer bottle
|
| 442 |
+
beer glass
|
| 443 |
+
bell cote
|
| 444 |
+
bib
|
| 445 |
+
bicycle-built-for-two
|
| 446 |
+
bikini
|
| 447 |
+
binder
|
| 448 |
+
binoculars
|
| 449 |
+
birdhouse
|
| 450 |
+
boathouse
|
| 451 |
+
bobsled
|
| 452 |
+
bolo tie
|
| 453 |
+
bonnet
|
| 454 |
+
bookcase
|
| 455 |
+
bookshop
|
| 456 |
+
bottlecap
|
| 457 |
+
bow
|
| 458 |
+
bow tie
|
| 459 |
+
brass
|
| 460 |
+
brassiere
|
| 461 |
+
breakwater
|
| 462 |
+
breastplate
|
| 463 |
+
broom
|
| 464 |
+
bucket
|
| 465 |
+
buckle
|
| 466 |
+
bulletproof vest
|
| 467 |
+
bullet train
|
| 468 |
+
butcher shop
|
| 469 |
+
cab
|
| 470 |
+
caldron
|
| 471 |
+
candle
|
| 472 |
+
cannon
|
| 473 |
+
canoe
|
| 474 |
+
can opener
|
| 475 |
+
cardigan
|
| 476 |
+
car mirror
|
| 477 |
+
carousel
|
| 478 |
+
carpenter's kit
|
| 479 |
+
carton
|
| 480 |
+
car wheel
|
| 481 |
+
cash machine
|
| 482 |
+
cassette
|
| 483 |
+
cassette player
|
| 484 |
+
castle
|
| 485 |
+
catamaran
|
| 486 |
+
CD player
|
| 487 |
+
cello
|
| 488 |
+
cellular telephone
|
| 489 |
+
chain
|
| 490 |
+
chainlink fence
|
| 491 |
+
chain mail
|
| 492 |
+
chain saw
|
| 493 |
+
chest
|
| 494 |
+
chiffonier
|
| 495 |
+
chime
|
| 496 |
+
china cabinet
|
| 497 |
+
Christmas stocking
|
| 498 |
+
church
|
| 499 |
+
cinema
|
| 500 |
+
cleaver
|
| 501 |
+
cliff dwelling
|
| 502 |
+
cloak
|
| 503 |
+
clog
|
| 504 |
+
cocktail shaker
|
| 505 |
+
coffee mug
|
| 506 |
+
coffeepot
|
| 507 |
+
coil
|
| 508 |
+
combination lock
|
| 509 |
+
computer keyboard
|
| 510 |
+
confectionery
|
| 511 |
+
container ship
|
| 512 |
+
convertible
|
| 513 |
+
corkscrew
|
| 514 |
+
cornet
|
| 515 |
+
cowboy boot
|
| 516 |
+
cowboy hat
|
| 517 |
+
cradle
|
| 518 |
+
crane
|
| 519 |
+
crash helmet
|
| 520 |
+
crate
|
| 521 |
+
crib
|
| 522 |
+
Crock Pot
|
| 523 |
+
croquet ball
|
| 524 |
+
crutch
|
| 525 |
+
cuirass
|
| 526 |
+
dam
|
| 527 |
+
desk
|
| 528 |
+
desktop computer
|
| 529 |
+
dial telephone
|
| 530 |
+
diaper
|
| 531 |
+
digital clock
|
| 532 |
+
digital watch
|
| 533 |
+
dining table
|
| 534 |
+
dishrag
|
| 535 |
+
dishwasher
|
| 536 |
+
disk brake
|
| 537 |
+
dock
|
| 538 |
+
dogsled
|
| 539 |
+
dome
|
| 540 |
+
doormat
|
| 541 |
+
drilling platform
|
| 542 |
+
drum
|
| 543 |
+
drumstick
|
| 544 |
+
dumbbell
|
| 545 |
+
Dutch oven
|
| 546 |
+
electric fan
|
| 547 |
+
electric guitar
|
| 548 |
+
electric locomotive
|
| 549 |
+
entertainment center
|
| 550 |
+
envelope
|
| 551 |
+
espresso maker
|
| 552 |
+
face powder
|
| 553 |
+
feather boa
|
| 554 |
+
file
|
| 555 |
+
fireboat
|
| 556 |
+
fire engine
|
| 557 |
+
fire screen
|
| 558 |
+
flagpole
|
| 559 |
+
flute
|
| 560 |
+
folding chair
|
| 561 |
+
football helmet
|
| 562 |
+
forklift
|
| 563 |
+
fountain
|
| 564 |
+
fountain pen
|
| 565 |
+
four-poster
|
| 566 |
+
freight car
|
| 567 |
+
French horn
|
| 568 |
+
frying pan
|
| 569 |
+
fur coat
|
| 570 |
+
garbage truck
|
| 571 |
+
gasmask
|
| 572 |
+
gas pump
|
| 573 |
+
goblet
|
| 574 |
+
go-kart
|
| 575 |
+
golf ball
|
| 576 |
+
golfcart
|
| 577 |
+
gondola
|
| 578 |
+
gong
|
| 579 |
+
gown
|
| 580 |
+
grand piano
|
| 581 |
+
greenhouse
|
| 582 |
+
grille
|
| 583 |
+
grocery store
|
| 584 |
+
guillotine
|
| 585 |
+
hair slide
|
| 586 |
+
hair spray
|
| 587 |
+
half track
|
| 588 |
+
hammer
|
| 589 |
+
hamper
|
| 590 |
+
hand blower
|
| 591 |
+
hand-held computer
|
| 592 |
+
handkerchief
|
| 593 |
+
hard disc
|
| 594 |
+
harmonica
|
| 595 |
+
harp
|
| 596 |
+
harvester
|
| 597 |
+
hatchet
|
| 598 |
+
holster
|
| 599 |
+
home theater
|
| 600 |
+
honeycomb
|
| 601 |
+
hook
|
| 602 |
+
hoopskirt
|
| 603 |
+
horizontal bar
|
| 604 |
+
horse cart
|
| 605 |
+
hourglass
|
| 606 |
+
iPod
|
| 607 |
+
iron
|
| 608 |
+
jack-o'-lantern
|
| 609 |
+
jean
|
| 610 |
+
jeep
|
| 611 |
+
jersey
|
| 612 |
+
jigsaw puzzle
|
| 613 |
+
jinrikisha
|
| 614 |
+
joystick
|
| 615 |
+
kimono
|
| 616 |
+
knee pad
|
| 617 |
+
knot
|
| 618 |
+
lab coat
|
| 619 |
+
ladle
|
| 620 |
+
lampshade
|
| 621 |
+
laptop
|
| 622 |
+
lawn mower
|
| 623 |
+
lens cap
|
| 624 |
+
letter opener
|
| 625 |
+
library
|
| 626 |
+
lifeboat
|
| 627 |
+
lighter
|
| 628 |
+
limousine
|
| 629 |
+
liner
|
| 630 |
+
lipstick
|
| 631 |
+
Loafer
|
| 632 |
+
lotion
|
| 633 |
+
loudspeaker
|
| 634 |
+
loupe
|
| 635 |
+
lumbermill
|
| 636 |
+
magnetic compass
|
| 637 |
+
mailbag
|
| 638 |
+
mailbox
|
| 639 |
+
maillot
|
| 640 |
+
maillot
|
| 641 |
+
manhole cover
|
| 642 |
+
maraca
|
| 643 |
+
marimba
|
| 644 |
+
mask
|
| 645 |
+
matchstick
|
| 646 |
+
maypole
|
| 647 |
+
maze
|
| 648 |
+
measuring cup
|
| 649 |
+
medicine chest
|
| 650 |
+
megalith
|
| 651 |
+
microphone
|
| 652 |
+
microwave
|
| 653 |
+
military uniform
|
| 654 |
+
milk can
|
| 655 |
+
minibus
|
| 656 |
+
miniskirt
|
| 657 |
+
minivan
|
| 658 |
+
missile
|
| 659 |
+
mitten
|
| 660 |
+
mixing bowl
|
| 661 |
+
mobile home
|
| 662 |
+
Model T
|
| 663 |
+
modem
|
| 664 |
+
monastery
|
| 665 |
+
monitor
|
| 666 |
+
moped
|
| 667 |
+
mortar
|
| 668 |
+
mortarboard
|
| 669 |
+
mosque
|
| 670 |
+
mosquito net
|
| 671 |
+
motor scooter
|
| 672 |
+
mountain bike
|
| 673 |
+
mountain tent
|
| 674 |
+
mouse
|
| 675 |
+
mousetrap
|
| 676 |
+
moving van
|
| 677 |
+
muzzle
|
| 678 |
+
nail
|
| 679 |
+
neck brace
|
| 680 |
+
necklace
|
| 681 |
+
nipple
|
| 682 |
+
notebook
|
| 683 |
+
obelisk
|
| 684 |
+
oboe
|
| 685 |
+
ocarina
|
| 686 |
+
odometer
|
| 687 |
+
oil filter
|
| 688 |
+
organ
|
| 689 |
+
oscilloscope
|
| 690 |
+
overskirt
|
| 691 |
+
oxcart
|
| 692 |
+
oxygen mask
|
| 693 |
+
packet
|
| 694 |
+
paddle
|
| 695 |
+
paddlewheel
|
| 696 |
+
padlock
|
| 697 |
+
paintbrush
|
| 698 |
+
pajama
|
| 699 |
+
palace
|
| 700 |
+
panpipe
|
| 701 |
+
paper towel
|
| 702 |
+
parachute
|
| 703 |
+
parallel bars
|
| 704 |
+
park bench
|
| 705 |
+
parking meter
|
| 706 |
+
passenger car
|
| 707 |
+
patio
|
| 708 |
+
pay-phone
|
| 709 |
+
pedestal
|
| 710 |
+
pencil box
|
| 711 |
+
pencil sharpener
|
| 712 |
+
perfume
|
| 713 |
+
Petri dish
|
| 714 |
+
photocopier
|
| 715 |
+
pick
|
| 716 |
+
pickelhaube
|
| 717 |
+
picket fence
|
| 718 |
+
pickup
|
| 719 |
+
pier
|
| 720 |
+
piggy bank
|
| 721 |
+
pill bottle
|
| 722 |
+
pillow
|
| 723 |
+
ping-pong ball
|
| 724 |
+
pinwheel
|
| 725 |
+
pirate
|
| 726 |
+
pitcher
|
| 727 |
+
plane
|
| 728 |
+
planetarium
|
| 729 |
+
plastic bag
|
| 730 |
+
plate rack
|
| 731 |
+
plow
|
| 732 |
+
plunger
|
| 733 |
+
Polaroid camera
|
| 734 |
+
pole
|
| 735 |
+
police van
|
| 736 |
+
poncho
|
| 737 |
+
pool table
|
| 738 |
+
pop bottle
|
| 739 |
+
pot
|
| 740 |
+
potter's wheel
|
| 741 |
+
power drill
|
| 742 |
+
prayer rug
|
| 743 |
+
printer
|
| 744 |
+
prison
|
| 745 |
+
projectile
|
| 746 |
+
projector
|
| 747 |
+
puck
|
| 748 |
+
punching bag
|
| 749 |
+
purse
|
| 750 |
+
quill
|
| 751 |
+
quilt
|
| 752 |
+
racer
|
| 753 |
+
racket
|
| 754 |
+
radiator
|
| 755 |
+
radio
|
| 756 |
+
radio telescope
|
| 757 |
+
rain barrel
|
| 758 |
+
recreational vehicle
|
| 759 |
+
reel
|
| 760 |
+
reflex camera
|
| 761 |
+
refrigerator
|
| 762 |
+
remote control
|
| 763 |
+
restaurant
|
| 764 |
+
revolver
|
| 765 |
+
rifle
|
| 766 |
+
rocking chair
|
| 767 |
+
rotisserie
|
| 768 |
+
rubber eraser
|
| 769 |
+
rugby ball
|
| 770 |
+
rule
|
| 771 |
+
running shoe
|
| 772 |
+
safe
|
| 773 |
+
safety pin
|
| 774 |
+
saltshaker
|
| 775 |
+
sandal
|
| 776 |
+
sarong
|
| 777 |
+
sax
|
| 778 |
+
scabbard
|
| 779 |
+
scale
|
| 780 |
+
school bus
|
| 781 |
+
schooner
|
| 782 |
+
scoreboard
|
| 783 |
+
screen
|
| 784 |
+
screw
|
| 785 |
+
screwdriver
|
| 786 |
+
seat belt
|
| 787 |
+
sewing machine
|
| 788 |
+
shield
|
| 789 |
+
shoe shop
|
| 790 |
+
shoji
|
| 791 |
+
shopping basket
|
| 792 |
+
shopping cart
|
| 793 |
+
shovel
|
| 794 |
+
shower cap
|
| 795 |
+
shower curtain
|
| 796 |
+
ski
|
| 797 |
+
ski mask
|
| 798 |
+
sleeping bag
|
| 799 |
+
slide rule
|
| 800 |
+
sliding door
|
| 801 |
+
slot
|
| 802 |
+
snorkel
|
| 803 |
+
snowmobile
|
| 804 |
+
snowplow
|
| 805 |
+
soap dispenser
|
| 806 |
+
soccer ball
|
| 807 |
+
sock
|
| 808 |
+
solar dish
|
| 809 |
+
sombrero
|
| 810 |
+
soup bowl
|
| 811 |
+
space bar
|
| 812 |
+
space heater
|
| 813 |
+
space shuttle
|
| 814 |
+
spatula
|
| 815 |
+
speedboat
|
| 816 |
+
spider web
|
| 817 |
+
spindle
|
| 818 |
+
sports car
|
| 819 |
+
spotlight
|
| 820 |
+
stage
|
| 821 |
+
steam locomotive
|
| 822 |
+
steel arch bridge
|
| 823 |
+
steel drum
|
| 824 |
+
stethoscope
|
| 825 |
+
stole
|
| 826 |
+
stone wall
|
| 827 |
+
stopwatch
|
| 828 |
+
stove
|
| 829 |
+
strainer
|
| 830 |
+
streetcar
|
| 831 |
+
stretcher
|
| 832 |
+
studio couch
|
| 833 |
+
stupa
|
| 834 |
+
submarine
|
| 835 |
+
suit
|
| 836 |
+
sundial
|
| 837 |
+
sunglass
|
| 838 |
+
sunglasses
|
| 839 |
+
sunscreen
|
| 840 |
+
suspension bridge
|
| 841 |
+
swab
|
| 842 |
+
sweatshirt
|
| 843 |
+
swimming trunks
|
| 844 |
+
swing
|
| 845 |
+
switch
|
| 846 |
+
syringe
|
| 847 |
+
table lamp
|
| 848 |
+
tank
|
| 849 |
+
tape player
|
| 850 |
+
teapot
|
| 851 |
+
teddy
|
| 852 |
+
television
|
| 853 |
+
tennis ball
|
| 854 |
+
thatch
|
| 855 |
+
theater curtain
|
| 856 |
+
thimble
|
| 857 |
+
thresher
|
| 858 |
+
throne
|
| 859 |
+
tile roof
|
| 860 |
+
toaster
|
| 861 |
+
tobacco shop
|
| 862 |
+
toilet seat
|
| 863 |
+
torch
|
| 864 |
+
totem pole
|
| 865 |
+
tow truck
|
| 866 |
+
toyshop
|
| 867 |
+
tractor
|
| 868 |
+
trailer truck
|
| 869 |
+
tray
|
| 870 |
+
trench coat
|
| 871 |
+
tricycle
|
| 872 |
+
trimaran
|
| 873 |
+
tripod
|
| 874 |
+
triumphal arch
|
| 875 |
+
trolleybus
|
| 876 |
+
trombone
|
| 877 |
+
tub
|
| 878 |
+
turnstile
|
| 879 |
+
typewriter keyboard
|
| 880 |
+
umbrella
|
| 881 |
+
unicycle
|
| 882 |
+
upright
|
| 883 |
+
vacuum
|
| 884 |
+
vase
|
| 885 |
+
vault
|
| 886 |
+
velvet
|
| 887 |
+
vending machine
|
| 888 |
+
vestment
|
| 889 |
+
viaduct
|
| 890 |
+
violin
|
| 891 |
+
volleyball
|
| 892 |
+
waffle iron
|
| 893 |
+
wall clock
|
| 894 |
+
wallet
|
| 895 |
+
wardrobe
|
| 896 |
+
warplane
|
| 897 |
+
washbasin
|
| 898 |
+
washer
|
| 899 |
+
water bottle
|
| 900 |
+
water jug
|
| 901 |
+
water tower
|
| 902 |
+
whiskey jug
|
| 903 |
+
whistle
|
| 904 |
+
wig
|
| 905 |
+
window screen
|
| 906 |
+
window shade
|
| 907 |
+
Windsor tie
|
| 908 |
+
wine bottle
|
| 909 |
+
wing
|
| 910 |
+
wok
|
| 911 |
+
wooden spoon
|
| 912 |
+
wool
|
| 913 |
+
worm fence
|
| 914 |
+
wreck
|
| 915 |
+
yawl
|
| 916 |
+
yurt
|
| 917 |
+
web site
|
| 918 |
+
comic book
|
| 919 |
+
crossword puzzle
|
| 920 |
+
street sign
|
| 921 |
+
traffic light
|
| 922 |
+
book jacket
|
| 923 |
+
menu
|
| 924 |
+
plate
|
| 925 |
+
guacamole
|
| 926 |
+
consomme
|
| 927 |
+
hot pot
|
| 928 |
+
trifle
|
| 929 |
+
ice cream
|
| 930 |
+
ice lolly
|
| 931 |
+
French loaf
|
| 932 |
+
bagel
|
| 933 |
+
pretzel
|
| 934 |
+
cheeseburger
|
| 935 |
+
hotdog
|
| 936 |
+
mashed potato
|
| 937 |
+
head cabbage
|
| 938 |
+
broccoli
|
| 939 |
+
cauliflower
|
| 940 |
+
zucchini
|
| 941 |
+
spaghetti squash
|
| 942 |
+
acorn squash
|
| 943 |
+
butternut squash
|
| 944 |
+
cucumber
|
| 945 |
+
artichoke
|
| 946 |
+
bell pepper
|
| 947 |
+
cardoon
|
| 948 |
+
mushroom
|
| 949 |
+
Granny Smith
|
| 950 |
+
strawberry
|
| 951 |
+
orange
|
| 952 |
+
lemon
|
| 953 |
+
fig
|
| 954 |
+
pineapple
|
| 955 |
+
banana
|
| 956 |
+
jackfruit
|
| 957 |
+
custard apple
|
| 958 |
+
pomegranate
|
| 959 |
+
hay
|
| 960 |
+
carbonara
|
| 961 |
+
chocolate sauce
|
| 962 |
+
dough
|
| 963 |
+
meat loaf
|
| 964 |
+
pizza
|
| 965 |
+
potpie
|
| 966 |
+
burrito
|
| 967 |
+
red wine
|
| 968 |
+
espresso
|
| 969 |
+
cup
|
| 970 |
+
eggnog
|
| 971 |
+
alp
|
| 972 |
+
bubble
|
| 973 |
+
cliff
|
| 974 |
+
coral reef
|
| 975 |
+
geyser
|
| 976 |
+
lakeside
|
| 977 |
+
promontory
|
| 978 |
+
sandbar
|
| 979 |
+
seashore
|
| 980 |
+
valley
|
| 981 |
+
volcano
|
| 982 |
+
ballplayer
|
| 983 |
+
groom
|
| 984 |
+
scuba diver
|
| 985 |
+
rapeseed
|
| 986 |
+
daisy
|
| 987 |
+
yellow lady's slipper
|
| 988 |
+
corn
|
| 989 |
+
acorn
|
| 990 |
+
hip
|
| 991 |
+
buckeye
|
| 992 |
+
coral fungus
|
| 993 |
+
agaric
|
| 994 |
+
gyromitra
|
| 995 |
+
stinkhorn
|
| 996 |
+
earthstar
|
| 997 |
+
hen-of-the-woods
|
| 998 |
+
bolete
|
| 999 |
+
ear
|
| 1000 |
+
toilet tissue
|
g0plus_dockerfile/docker-assets/data/TensorRT-10.13.0.35/data/int8_api/resnet50_per_tensor_dynamic_range.txt
ADDED
|
@@ -0,0 +1,183 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
gpu_0/data_0: 1.00024
|
| 2 |
+
gpu_0/conv1_1: 5.43116
|
| 3 |
+
gpu_0/res_conv1_bn_1: 8.69736
|
| 4 |
+
gpu_0/res_conv1_bn_2: 8.69736
|
| 5 |
+
gpu_0/pool1_1: 8.69736
|
| 6 |
+
gpu_0/res2_0_branch2a_1: 12.819
|
| 7 |
+
gpu_0/res2_0_branch2a_bn_1: 5.47741
|
| 8 |
+
gpu_0/res2_0_branch2a_bn_2: 5.58704
|
| 9 |
+
gpu_0/res2_0_branch2b_1: 5.27718
|
| 10 |
+
gpu_0/res2_0_branch2b_bn_1: 5.08003
|
| 11 |
+
gpu_0/res2_0_branch2b_bn_2: 5.08003
|
| 12 |
+
gpu_0/res2_0_branch2c_1: 2.33625
|
| 13 |
+
gpu_0/res2_0_branch2c_bn_1: 3.17859
|
| 14 |
+
gpu_0/res2_0_branch1_1: 6.10492
|
| 15 |
+
gpu_0/res2_0_branch1_bn_1: 5.63119
|
| 16 |
+
gpu_0/res2_0_branch2c_bn_2: 6.64099
|
| 17 |
+
gpu_0/res2_0_branch2c_bn_3: 4.85535
|
| 18 |
+
gpu_0/res2_1_branch2a_1: 3.55208
|
| 19 |
+
gpu_0/res2_1_branch2a_bn_1: 5.12617
|
| 20 |
+
gpu_0/res2_1_branch2a_bn_2: 3.54669
|
| 21 |
+
gpu_0/res2_1_branch2b_1: 5.56289
|
| 22 |
+
gpu_0/res2_1_branch2b_bn_1: 7.11808
|
| 23 |
+
gpu_0/res2_1_branch2b_bn_2: 6.92282
|
| 24 |
+
gpu_0/res2_1_branch2c_1: 2.19201
|
| 25 |
+
gpu_0/res2_1_branch2c_bn_1: 3.78733
|
| 26 |
+
gpu_0/res2_1_branch2c_bn_2: 4.60415
|
| 27 |
+
gpu_0/res2_1_branch2c_bn_3: 4.60415
|
| 28 |
+
gpu_0/res2_2_branch2a_1: 3.96808
|
| 29 |
+
gpu_0/res2_2_branch2a_bn_1: 4.94773
|
| 30 |
+
gpu_0/res2_2_branch2a_bn_2: 5.50565
|
| 31 |
+
gpu_0/res2_2_branch2b_1: 4.26613
|
| 32 |
+
gpu_0/res2_2_branch2b_bn_1: 6.0784
|
| 33 |
+
gpu_0/res2_2_branch2b_bn_2: 4.92818
|
| 34 |
+
gpu_0/res2_2_branch2c_1: 1.76282
|
| 35 |
+
gpu_0/res2_2_branch2c_bn_1: 3.52767
|
| 36 |
+
gpu_0/res2_2_branch2c_bn_2: 7.08883
|
| 37 |
+
gpu_0/res2_2_branch2c_bn_3: 6.83196
|
| 38 |
+
gpu_0/res3_0_branch2a_1: 6.04728
|
| 39 |
+
gpu_0/res3_0_branch2a_bn_1: 6.35389
|
| 40 |
+
gpu_0/res3_0_branch2a_bn_2: 5.32155
|
| 41 |
+
gpu_0/res3_0_branch2b_1: 4.82218
|
| 42 |
+
gpu_0/res3_0_branch2b_bn_1: 4.97589
|
| 43 |
+
gpu_0/res3_0_branch2b_bn_2: 5.15205
|
| 44 |
+
gpu_0/res3_0_branch2c_1: 2.51726
|
| 45 |
+
gpu_0/res3_0_branch2c_bn_1: 5.92965
|
| 46 |
+
gpu_0/res3_0_branch1_1: 5.16373
|
| 47 |
+
gpu_0/res3_0_branch1_bn_1: 8.38447
|
| 48 |
+
gpu_0/res3_0_branch2c_bn_2: 9.55529
|
| 49 |
+
gpu_0/res3_0_branch2c_bn_3: 9.55529
|
| 50 |
+
gpu_0/res3_1_branch2a_1: 8.36638
|
| 51 |
+
gpu_0/res3_1_branch2a_bn_1: 5.10129
|
| 52 |
+
gpu_0/res3_1_branch2a_bn_2: 6.53472
|
| 53 |
+
gpu_0/res3_1_branch2b_1: 8.96734
|
| 54 |
+
gpu_0/res3_1_branch2b_bn_1: 10.0194
|
| 55 |
+
gpu_0/res3_1_branch2b_bn_2: 7.34823
|
| 56 |
+
gpu_0/res3_1_branch2c_1: 3.2582
|
| 57 |
+
gpu_0/res3_1_branch2c_bn_1: 6.99684
|
| 58 |
+
gpu_0/res3_1_branch2c_bn_2: 10.1138
|
| 59 |
+
gpu_0/res3_1_branch2c_bn_3: 6.95004
|
| 60 |
+
gpu_0/res3_2_branch2a_1: 5.10651
|
| 61 |
+
gpu_0/res3_2_branch2a_bn_1: 6.64402
|
| 62 |
+
gpu_0/res3_2_branch2a_bn_2: 5.18487
|
| 63 |
+
gpu_0/res3_2_branch2b_1: 5.96782
|
| 64 |
+
gpu_0/res3_2_branch2b_bn_1: 7.1799
|
| 65 |
+
gpu_0/res3_2_branch2b_bn_2: 5.37818
|
| 66 |
+
gpu_0/res3_2_branch2c_1: 1.32356
|
| 67 |
+
gpu_0/res3_2_branch2c_bn_1: 3.33188
|
| 68 |
+
gpu_0/res3_2_branch2c_bn_2: 5.36147
|
| 69 |
+
gpu_0/res3_2_branch2c_bn_3: 5.36147
|
| 70 |
+
gpu_0/res3_3_branch2a_1: 4.85147
|
| 71 |
+
gpu_0/res3_3_branch2a_bn_1: 5.59218
|
| 72 |
+
gpu_0/res3_3_branch2a_bn_2: 4.86311
|
| 73 |
+
gpu_0/res3_3_branch2b_1: 3.96831
|
| 74 |
+
gpu_0/res3_3_branch2b_bn_1: 6.06881
|
| 75 |
+
gpu_0/res3_3_branch2b_bn_2: 4.00068
|
| 76 |
+
gpu_0/res3_3_branch2c_1: 0.921573
|
| 77 |
+
gpu_0/res3_3_branch2c_bn_1: 2.8969
|
| 78 |
+
gpu_0/res3_3_branch2c_bn_2: 5.85236
|
| 79 |
+
gpu_0/res3_3_branch2c_bn_3: 5.59852
|
| 80 |
+
gpu_0/res4_0_branch2a_1: 5.03899
|
| 81 |
+
gpu_0/res4_0_branch2a_bn_1: 7.45267
|
| 82 |
+
gpu_0/res4_0_branch2a_bn_2: 6.18469
|
| 83 |
+
gpu_0/res4_0_branch2b_1: 4.83455
|
| 84 |
+
gpu_0/res4_0_branch2b_bn_1: 6.04993
|
| 85 |
+
gpu_0/res4_0_branch2b_bn_2: 6.04993
|
| 86 |
+
gpu_0/res4_0_branch2c_1: 2.82144
|
| 87 |
+
gpu_0/res4_0_branch2c_bn_1: 5.38268
|
| 88 |
+
gpu_0/res4_0_branch1_1: 4.31843
|
| 89 |
+
gpu_0/res4_0_branch1_bn_1: 5.26767
|
| 90 |
+
gpu_0/res4_0_branch2c_bn_2: 7.62006
|
| 91 |
+
gpu_0/res4_0_branch2c_bn_3: 7.49355
|
| 92 |
+
gpu_0/res4_1_branch2a_1: 7.48333
|
| 93 |
+
gpu_0/res4_1_branch2a_bn_1: 5.23361
|
| 94 |
+
gpu_0/res4_1_branch2a_bn_2: 6.22436
|
| 95 |
+
gpu_0/res4_1_branch2b_1: 7.80429
|
| 96 |
+
gpu_0/res4_1_branch2b_bn_1: 5.02395
|
| 97 |
+
gpu_0/res4_1_branch2b_bn_2: 4.22194
|
| 98 |
+
gpu_0/res4_1_branch2c_1: 1.61523
|
| 99 |
+
gpu_0/res4_1_branch2c_bn_1: 5.06857
|
| 100 |
+
gpu_0/res4_1_branch2c_bn_2: 6.47686
|
| 101 |
+
gpu_0/res4_1_branch2c_bn_3: 6.47686
|
| 102 |
+
gpu_0/res4_2_branch2a_1: 3.87822
|
| 103 |
+
gpu_0/res4_2_branch2a_bn_1: 6.10799
|
| 104 |
+
gpu_0/res4_2_branch2a_bn_2: 4.31025
|
| 105 |
+
gpu_0/res4_2_branch2b_1: 4.03413
|
| 106 |
+
gpu_0/res4_2_branch2b_bn_1: 6.68894
|
| 107 |
+
gpu_0/res4_2_branch2b_bn_2: 5.0679
|
| 108 |
+
gpu_0/res4_2_branch2c_1: 1.26098
|
| 109 |
+
gpu_0/res4_2_branch2c_bn_1: 5.29023
|
| 110 |
+
gpu_0/res4_2_branch2c_bn_2: 6.20245
|
| 111 |
+
gpu_0/res4_2_branch2c_bn_3: 6.10486
|
| 112 |
+
gpu_0/res4_3_branch2a_1: 3.20987
|
| 113 |
+
gpu_0/res4_3_branch2a_bn_1: 4.39172
|
| 114 |
+
gpu_0/res4_3_branch2a_bn_2: 4.14733
|
| 115 |
+
gpu_0/res4_3_branch2b_1: 3.92574
|
| 116 |
+
gpu_0/res4_3_branch2b_bn_1: 4.55813
|
| 117 |
+
gpu_0/res4_3_branch2b_bn_2: 3.8462
|
| 118 |
+
gpu_0/res4_3_branch2c_1: 1.00342
|
| 119 |
+
gpu_0/res4_3_branch2c_bn_1: 4.34035
|
| 120 |
+
gpu_0/res4_3_branch2c_bn_2: 5.30305
|
| 121 |
+
gpu_0/res4_3_branch2c_bn_3: 5.30305
|
| 122 |
+
gpu_0/res4_4_branch2a_1: 3.05409
|
| 123 |
+
gpu_0/res4_4_branch2a_bn_1: 4.87153
|
| 124 |
+
gpu_0/res4_4_branch2a_bn_2: 3.2817
|
| 125 |
+
gpu_0/res4_4_branch2b_1: 2.60867
|
| 126 |
+
gpu_0/res4_4_branch2b_bn_1: 4.43434
|
| 127 |
+
gpu_0/res4_4_branch2b_bn_2: 3.89483
|
| 128 |
+
gpu_0/res4_4_branch2c_1: 1.83117
|
| 129 |
+
gpu_0/res4_4_branch2c_bn_1: 3.99871
|
| 130 |
+
gpu_0/res4_4_branch2c_bn_2: 5.77232
|
| 131 |
+
gpu_0/res4_4_branch2c_bn_3: 5.39331
|
| 132 |
+
gpu_0/res4_5_branch2a_1: 4.68277
|
| 133 |
+
gpu_0/res4_5_branch2a_bn_1: 6.16417
|
| 134 |
+
gpu_0/res4_5_branch2a_bn_2: 6.16333
|
| 135 |
+
gpu_0/res4_5_branch2b_1: 3.1276
|
| 136 |
+
gpu_0/res4_5_branch2b_bn_1: 7.00038
|
| 137 |
+
gpu_0/res4_5_branch2b_bn_2: 6.9702
|
| 138 |
+
gpu_0/res4_5_branch2c_1: 1.37766
|
| 139 |
+
gpu_0/res4_5_branch2c_bn_1: 3.93406
|
| 140 |
+
gpu_0/res4_5_branch2c_bn_2: 5.4295
|
| 141 |
+
gpu_0/res4_5_branch2c_bn_3: 5.4295
|
| 142 |
+
gpu_0/res5_0_branch2a_1: 2.65465
|
| 143 |
+
gpu_0/res5_0_branch2a_bn_1: 6.09584
|
| 144 |
+
gpu_0/res5_0_branch2a_bn_2: 3.38788
|
| 145 |
+
gpu_0/res5_0_branch2b_1: 2.74351
|
| 146 |
+
gpu_0/res5_0_branch2b_bn_1: 5.598
|
| 147 |
+
gpu_0/res5_0_branch2b_bn_2: 3.47276
|
| 148 |
+
gpu_0/res5_0_branch2c_1: 2.64331
|
| 149 |
+
gpu_0/res5_0_branch2c_bn_1: 12.3477
|
| 150 |
+
gpu_0/res5_0_branch1_1: 1.78121
|
| 151 |
+
gpu_0/res5_0_branch1_bn_1: 13.8335
|
| 152 |
+
gpu_0/res5_0_branch2c_bn_2: 18.1711
|
| 153 |
+
gpu_0/res5_0_branch2c_bn_3: 21.687
|
| 154 |
+
gpu_0/res5_1_branch2a_1: 8.10959
|
| 155 |
+
gpu_0/res5_1_branch2a_bn_1: 4.35337
|
| 156 |
+
gpu_0/res5_1_branch2a_bn_2: 2.78138
|
| 157 |
+
gpu_0/res5_1_branch2b_1: 3.10084
|
| 158 |
+
gpu_0/res5_1_branch2b_bn_1: 5.05929
|
| 159 |
+
gpu_0/res5_1_branch2b_bn_2: 2.5665
|
| 160 |
+
gpu_0/res5_1_branch2c_1: 0.996128
|
| 161 |
+
gpu_0/res5_1_branch2c_bn_1: 8.6475
|
| 162 |
+
gpu_0/res5_1_branch2c_bn_2: 16.7257
|
| 163 |
+
gpu_0/res5_1_branch2c_bn_3: 18.942
|
| 164 |
+
gpu_0/res5_2_branch2a_1: 10.8203
|
| 165 |
+
gpu_0/res5_2_branch2a_bn_1: 3.37798
|
| 166 |
+
gpu_0/res5_2_branch2a_bn_2: 2.80768
|
| 167 |
+
gpu_0/res5_2_branch2b_1: 2.15978
|
| 168 |
+
gpu_0/res5_2_branch2b_bn_1: 4.58982
|
| 169 |
+
gpu_0/res5_2_branch2b_bn_2: 3.21134
|
| 170 |
+
gpu_0/res5_2_branch2c_1: 0.586011
|
| 171 |
+
gpu_0/res5_2_branch2c_bn_1: 10.6795
|
| 172 |
+
gpu_0/res5_2_branch2c_bn_2: 20.6414
|
| 173 |
+
gpu_0/res5_2_branch2c_bn_3: 22.2285
|
| 174 |
+
gpu_0/pool5_1: 22.2285
|
| 175 |
+
OC2_DUMMY_0: 6.08994
|
| 176 |
+
(Unnamed Layer* 174) [Constant]_output: 0.443716
|
| 177 |
+
(Unnamed Layer* 175) [Fully Connected]_output: 6.40009
|
| 178 |
+
(Unnamed Layer* 176) [Constant]_output: 0.0365279
|
| 179 |
+
(Unnamed Layer* 177) [Shuffle]_output: 0.0365279
|
| 180 |
+
gpu_0/pred_1: 6.46343
|
| 181 |
+
(Unnamed Layer* 179) [Shuffle]_output: 6.46343
|
| 182 |
+
(Unnamed Layer* 180) [Softmax]_output: 0.0303731
|
| 183 |
+
gpu_0/softmax_1: 0.0303731
|
g0plus_dockerfile/docker-assets/data/TensorRT-10.13.0.35/data/mnist/0.pgm
ADDED
|
|
g0plus_dockerfile/docker-assets/data/TensorRT-10.13.0.35/data/mnist/1.pgm
ADDED
|
|
g0plus_dockerfile/docker-assets/data/TensorRT-10.13.0.35/data/mnist/2.pgm
ADDED
|
|
g0plus_dockerfile/docker-assets/data/TensorRT-10.13.0.35/data/mnist/3.pgm
ADDED
|
|
g0plus_dockerfile/docker-assets/data/TensorRT-10.13.0.35/data/mnist/4.pgm
ADDED
|
|
g0plus_dockerfile/docker-assets/data/TensorRT-10.13.0.35/data/mnist/5.pgm
ADDED
|
|
g0plus_dockerfile/docker-assets/data/TensorRT-10.13.0.35/data/mnist/6.pgm
ADDED
|
|
g0plus_dockerfile/docker-assets/data/TensorRT-10.13.0.35/data/mnist/7.pgm
ADDED
|
|
g0plus_dockerfile/docker-assets/data/TensorRT-10.13.0.35/data/mnist/8.pgm
ADDED
|
|
g0plus_dockerfile/docker-assets/data/TensorRT-10.13.0.35/data/mnist/9.pgm
ADDED
|
|
g0plus_dockerfile/docker-assets/data/TensorRT-10.13.0.35/data/mnist/README.md
ADDED
|
@@ -0,0 +1,20 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# Setting Up MNIST Samples
|
| 2 |
+
|
| 3 |
+
## Models
|
| 4 |
+
|
| 5 |
+
mnist.onnx: Opset 8, Retrieved from [ONNX Model Zoo](https://github.com/onnx/models/tree/master/vision/classification/mnist)
|
| 6 |
+
|
| 7 |
+
## Run ONNX model with trtexec
|
| 8 |
+
|
| 9 |
+
* FP32 precisons with fixed batch size 1
|
| 10 |
+
* `./trtexec --explicitBatch --onnx=mnist.onnx --workspace=1024`
|
| 11 |
+
* Other precisions
|
| 12 |
+
* Add `--fp16` for FP16 and `--int8` for INT8.
|
| 13 |
+
|
| 14 |
+
## Run safety ONNX model with sampleSafeMNIST
|
| 15 |
+
|
| 16 |
+
* Build safe engine
|
| 17 |
+
* `./sample_mnist_safe_build`
|
| 18 |
+
* Inference
|
| 19 |
+
* `./sample_mnist_safe_infer`
|
| 20 |
+
* See sample READEME for more details.
|
g0plus_dockerfile/docker-assets/data/TensorRT-10.13.0.35/data/mnist/mnist.onnx
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:2f06e72de813a8635c9bc0397ac447a601bdbfa7df4bebc278723b958831c9bf
|
| 3 |
+
size 26454
|
g0plus_dockerfile/docker-assets/data/TensorRT-10.13.0.35/data/resnet50/README.md
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# Models
|
| 2 |
+
|
| 3 |
+
## UFF
|
| 4 |
+
|
| 5 |
+
resnet50-infer-5.uff
|
| 6 |
+
- trained by NVidia, based on ResNet50 V1 model from [TF-Slim](https://github.com/tensorflow/models/tree/master/research/slim)
|
| 7 |
+
- converted to UFF using `convert-to-uff`
|
| 8 |
+
- `convert-to-uff <models>/resnet_all-nlayer_50__precision0_randominit.pb -o tf2trt_resnet50.uff -t -O spatial_avg`
|
| 9 |
+
|
| 10 |
+
## Caffe
|
| 11 |
+
|
| 12 |
+
ResNet50_N2.prototxt and ResNet50_fp32.caffemodel
|
| 13 |
+
- downloaded from https://github.com/KaimingHe/deep-residual-networks#models
|
g0plus_dockerfile/docker-assets/data/TensorRT-10.13.0.35/data/resnet50/ResNet50.onnx
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:78eecdb9354e71364b9df6f3b5824ecc48710938d5b4ea23724b9a2e9edbc4a6
|
| 3 |
+
size 102489423
|
g0plus_dockerfile/docker-assets/data/TensorRT-10.13.0.35/data/resnet50/airliner.ppm
ADDED
|
|
Git LFS Details
|
g0plus_dockerfile/docker-assets/data/TensorRT-10.13.0.35/data/resnet50/binoculars.jpeg
ADDED
|
Git LFS Details
|
g0plus_dockerfile/docker-assets/data/TensorRT-10.13.0.35/data/resnet50/class_labels.txt
ADDED
|
@@ -0,0 +1,1000 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
tench
|
| 2 |
+
goldfish
|
| 3 |
+
great white shark
|
| 4 |
+
tiger shark
|
| 5 |
+
hammerhead
|
| 6 |
+
electric ray
|
| 7 |
+
stingray
|
| 8 |
+
cock
|
| 9 |
+
hen
|
| 10 |
+
ostrich
|
| 11 |
+
brambling
|
| 12 |
+
goldfinch
|
| 13 |
+
house finch
|
| 14 |
+
junco
|
| 15 |
+
indigo bunting
|
| 16 |
+
robin
|
| 17 |
+
bulbul
|
| 18 |
+
jay
|
| 19 |
+
magpie
|
| 20 |
+
chickadee
|
| 21 |
+
water ouzel
|
| 22 |
+
kite
|
| 23 |
+
bald eagle
|
| 24 |
+
vulture
|
| 25 |
+
great grey owl
|
| 26 |
+
European fire salamander
|
| 27 |
+
common newt
|
| 28 |
+
eft
|
| 29 |
+
spotted salamander
|
| 30 |
+
axolotl
|
| 31 |
+
bullfrog
|
| 32 |
+
tree frog
|
| 33 |
+
tailed frog
|
| 34 |
+
loggerhead
|
| 35 |
+
leatherback turtle
|
| 36 |
+
mud turtle
|
| 37 |
+
terrapin
|
| 38 |
+
box turtle
|
| 39 |
+
banded gecko
|
| 40 |
+
common iguana
|
| 41 |
+
American chameleon
|
| 42 |
+
whiptail
|
| 43 |
+
agama
|
| 44 |
+
frilled lizard
|
| 45 |
+
alligator lizard
|
| 46 |
+
Gila monster
|
| 47 |
+
green lizard
|
| 48 |
+
African chameleon
|
| 49 |
+
Komodo dragon
|
| 50 |
+
African crocodile
|
| 51 |
+
American alligator
|
| 52 |
+
triceratops
|
| 53 |
+
thunder snake
|
| 54 |
+
ringneck snake
|
| 55 |
+
hognose snake
|
| 56 |
+
green snake
|
| 57 |
+
king snake
|
| 58 |
+
garter snake
|
| 59 |
+
water snake
|
| 60 |
+
vine snake
|
| 61 |
+
night snake
|
| 62 |
+
boa constrictor
|
| 63 |
+
rock python
|
| 64 |
+
Indian cobra
|
| 65 |
+
green mamba
|
| 66 |
+
sea snake
|
| 67 |
+
horned viper
|
| 68 |
+
diamondback
|
| 69 |
+
sidewinder
|
| 70 |
+
trilobite
|
| 71 |
+
harvestman
|
| 72 |
+
scorpion
|
| 73 |
+
black and gold garden spider
|
| 74 |
+
barn spider
|
| 75 |
+
garden spider
|
| 76 |
+
black widow
|
| 77 |
+
tarantula
|
| 78 |
+
wolf spider
|
| 79 |
+
tick
|
| 80 |
+
centipede
|
| 81 |
+
black grouse
|
| 82 |
+
ptarmigan
|
| 83 |
+
ruffed grouse
|
| 84 |
+
prairie chicken
|
| 85 |
+
peacock
|
| 86 |
+
quail
|
| 87 |
+
partridge
|
| 88 |
+
African grey
|
| 89 |
+
macaw
|
| 90 |
+
sulphur-crested cockatoo
|
| 91 |
+
lorikeet
|
| 92 |
+
coucal
|
| 93 |
+
bee eater
|
| 94 |
+
hornbill
|
| 95 |
+
hummingbird
|
| 96 |
+
jacamar
|
| 97 |
+
toucan
|
| 98 |
+
drake
|
| 99 |
+
red-breasted merganser
|
| 100 |
+
goose
|
| 101 |
+
black swan
|
| 102 |
+
tusker
|
| 103 |
+
echidna
|
| 104 |
+
platypus
|
| 105 |
+
wallaby
|
| 106 |
+
koala
|
| 107 |
+
wombat
|
| 108 |
+
jellyfish
|
| 109 |
+
sea anemone
|
| 110 |
+
brain coral
|
| 111 |
+
flatworm
|
| 112 |
+
nematode
|
| 113 |
+
conch
|
| 114 |
+
snail
|
| 115 |
+
slug
|
| 116 |
+
sea slug
|
| 117 |
+
chiton
|
| 118 |
+
chambered nautilus
|
| 119 |
+
Dungeness crab
|
| 120 |
+
rock crab
|
| 121 |
+
fiddler crab
|
| 122 |
+
king crab
|
| 123 |
+
American lobster
|
| 124 |
+
spiny lobster
|
| 125 |
+
crayfish
|
| 126 |
+
hermit crab
|
| 127 |
+
isopod
|
| 128 |
+
white stork
|
| 129 |
+
black stork
|
| 130 |
+
spoonbill
|
| 131 |
+
flamingo
|
| 132 |
+
little blue heron
|
| 133 |
+
American egret
|
| 134 |
+
bittern
|
| 135 |
+
crane
|
| 136 |
+
limpkin
|
| 137 |
+
European gallinule
|
| 138 |
+
American coot
|
| 139 |
+
bustard
|
| 140 |
+
ruddy turnstone
|
| 141 |
+
red-backed sandpiper
|
| 142 |
+
redshank
|
| 143 |
+
dowitcher
|
| 144 |
+
oystercatcher
|
| 145 |
+
pelican
|
| 146 |
+
king penguin
|
| 147 |
+
albatross
|
| 148 |
+
grey whale
|
| 149 |
+
killer whale
|
| 150 |
+
dugong
|
| 151 |
+
sea lion
|
| 152 |
+
Chihuahua
|
| 153 |
+
Japanese spaniel
|
| 154 |
+
Maltese dog
|
| 155 |
+
Pekinese
|
| 156 |
+
Shih-Tzu
|
| 157 |
+
Blenheim spaniel
|
| 158 |
+
papillon
|
| 159 |
+
toy terrier
|
| 160 |
+
Rhodesian ridgeback
|
| 161 |
+
Afghan hound
|
| 162 |
+
basset
|
| 163 |
+
beagle
|
| 164 |
+
bloodhound
|
| 165 |
+
bluetick
|
| 166 |
+
black-and-tan coonhound
|
| 167 |
+
Walker hound
|
| 168 |
+
English foxhound
|
| 169 |
+
redbone
|
| 170 |
+
borzoi
|
| 171 |
+
Irish wolfhound
|
| 172 |
+
Italian greyhound
|
| 173 |
+
whippet
|
| 174 |
+
Ibizan hound
|
| 175 |
+
Norwegian elkhound
|
| 176 |
+
otterhound
|
| 177 |
+
Saluki
|
| 178 |
+
Scottish deerhound
|
| 179 |
+
Weimaraner
|
| 180 |
+
Staffordshire bullterrier
|
| 181 |
+
American Staffordshire terrier
|
| 182 |
+
Bedlington terrier
|
| 183 |
+
Border terrier
|
| 184 |
+
Kerry blue terrier
|
| 185 |
+
Irish terrier
|
| 186 |
+
Norfolk terrier
|
| 187 |
+
Norwich terrier
|
| 188 |
+
Yorkshire terrier
|
| 189 |
+
wire-haired fox terrier
|
| 190 |
+
Lakeland terrier
|
| 191 |
+
Sealyham terrier
|
| 192 |
+
Airedale
|
| 193 |
+
cairn
|
| 194 |
+
Australian terrier
|
| 195 |
+
Dandie Dinmont
|
| 196 |
+
Boston bull
|
| 197 |
+
miniature schnauzer
|
| 198 |
+
giant schnauzer
|
| 199 |
+
standard schnauzer
|
| 200 |
+
Scotch terrier
|
| 201 |
+
Tibetan terrier
|
| 202 |
+
silky terrier
|
| 203 |
+
soft-coated wheaten terrier
|
| 204 |
+
West Highland white terrier
|
| 205 |
+
Lhasa
|
| 206 |
+
flat-coated retriever
|
| 207 |
+
curly-coated retriever
|
| 208 |
+
golden retriever
|
| 209 |
+
Labrador retriever
|
| 210 |
+
Chesapeake Bay retriever
|
| 211 |
+
German short-haired pointer
|
| 212 |
+
vizsla
|
| 213 |
+
English setter
|
| 214 |
+
Irish setter
|
| 215 |
+
Gordon setter
|
| 216 |
+
Brittany spaniel
|
| 217 |
+
clumber
|
| 218 |
+
English springer
|
| 219 |
+
Welsh springer spaniel
|
| 220 |
+
cocker spaniel
|
| 221 |
+
Sussex spaniel
|
| 222 |
+
Irish water spaniel
|
| 223 |
+
kuvasz
|
| 224 |
+
schipperke
|
| 225 |
+
groenendael
|
| 226 |
+
malinois
|
| 227 |
+
briard
|
| 228 |
+
kelpie
|
| 229 |
+
komondor
|
| 230 |
+
Old English sheepdog
|
| 231 |
+
Shetland sheepdog
|
| 232 |
+
collie
|
| 233 |
+
Border collie
|
| 234 |
+
Bouvier des Flandres
|
| 235 |
+
Rottweiler
|
| 236 |
+
German shepherd
|
| 237 |
+
Doberman
|
| 238 |
+
miniature pinscher
|
| 239 |
+
Greater Swiss Mountain dog
|
| 240 |
+
Bernese mountain dog
|
| 241 |
+
Appenzeller
|
| 242 |
+
EntleBucher
|
| 243 |
+
boxer
|
| 244 |
+
bull mastiff
|
| 245 |
+
Tibetan mastiff
|
| 246 |
+
French bulldog
|
| 247 |
+
Great Dane
|
| 248 |
+
Saint Bernard
|
| 249 |
+
Eskimo dog
|
| 250 |
+
malamute
|
| 251 |
+
Siberian husky
|
| 252 |
+
dalmatian
|
| 253 |
+
affenpinscher
|
| 254 |
+
basenji
|
| 255 |
+
pug
|
| 256 |
+
Leonberg
|
| 257 |
+
Newfoundland
|
| 258 |
+
Great Pyrenees
|
| 259 |
+
Samoyed
|
| 260 |
+
Pomeranian
|
| 261 |
+
chow
|
| 262 |
+
keeshond
|
| 263 |
+
Brabancon griffon
|
| 264 |
+
Pembroke
|
| 265 |
+
Cardigan
|
| 266 |
+
toy poodle
|
| 267 |
+
miniature poodle
|
| 268 |
+
standard poodle
|
| 269 |
+
Mexican hairless
|
| 270 |
+
timber wolf
|
| 271 |
+
white wolf
|
| 272 |
+
red wolf
|
| 273 |
+
coyote
|
| 274 |
+
dingo
|
| 275 |
+
dhole
|
| 276 |
+
African hunting dog
|
| 277 |
+
hyena
|
| 278 |
+
red fox
|
| 279 |
+
kit fox
|
| 280 |
+
Arctic fox
|
| 281 |
+
grey fox
|
| 282 |
+
tabby
|
| 283 |
+
tiger cat
|
| 284 |
+
Persian cat
|
| 285 |
+
Siamese cat
|
| 286 |
+
Egyptian cat
|
| 287 |
+
cougar
|
| 288 |
+
lynx
|
| 289 |
+
leopard
|
| 290 |
+
snow leopard
|
| 291 |
+
jaguar
|
| 292 |
+
lion
|
| 293 |
+
tiger
|
| 294 |
+
cheetah
|
| 295 |
+
brown bear
|
| 296 |
+
American black bear
|
| 297 |
+
ice bear
|
| 298 |
+
sloth bear
|
| 299 |
+
mongoose
|
| 300 |
+
meerkat
|
| 301 |
+
tiger beetle
|
| 302 |
+
ladybug
|
| 303 |
+
ground beetle
|
| 304 |
+
long-horned beetle
|
| 305 |
+
leaf beetle
|
| 306 |
+
dung beetle
|
| 307 |
+
rhinoceros beetle
|
| 308 |
+
weevil
|
| 309 |
+
fly
|
| 310 |
+
bee
|
| 311 |
+
ant
|
| 312 |
+
grasshopper
|
| 313 |
+
cricket
|
| 314 |
+
walking stick
|
| 315 |
+
cockroach
|
| 316 |
+
mantis
|
| 317 |
+
cicada
|
| 318 |
+
leafhopper
|
| 319 |
+
lacewing
|
| 320 |
+
dragonfly
|
| 321 |
+
damselfly
|
| 322 |
+
admiral
|
| 323 |
+
ringlet
|
| 324 |
+
monarch
|
| 325 |
+
cabbage butterfly
|
| 326 |
+
sulphur butterfly
|
| 327 |
+
lycaenid
|
| 328 |
+
starfish
|
| 329 |
+
sea urchin
|
| 330 |
+
sea cucumber
|
| 331 |
+
wood rabbit
|
| 332 |
+
hare
|
| 333 |
+
Angora
|
| 334 |
+
hamster
|
| 335 |
+
porcupine
|
| 336 |
+
fox squirrel
|
| 337 |
+
marmot
|
| 338 |
+
beaver
|
| 339 |
+
guinea pig
|
| 340 |
+
sorrel
|
| 341 |
+
zebra
|
| 342 |
+
hog
|
| 343 |
+
wild boar
|
| 344 |
+
warthog
|
| 345 |
+
hippopotamus
|
| 346 |
+
ox
|
| 347 |
+
water buffalo
|
| 348 |
+
bison
|
| 349 |
+
ram
|
| 350 |
+
bighorn
|
| 351 |
+
ibex
|
| 352 |
+
hartebeest
|
| 353 |
+
impala
|
| 354 |
+
gazelle
|
| 355 |
+
Arabian camel
|
| 356 |
+
llama
|
| 357 |
+
weasel
|
| 358 |
+
mink
|
| 359 |
+
polecat
|
| 360 |
+
black-footed ferret
|
| 361 |
+
otter
|
| 362 |
+
skunk
|
| 363 |
+
badger
|
| 364 |
+
armadillo
|
| 365 |
+
three-toed sloth
|
| 366 |
+
orangutan
|
| 367 |
+
gorilla
|
| 368 |
+
chimpanzee
|
| 369 |
+
gibbon
|
| 370 |
+
siamang
|
| 371 |
+
guenon
|
| 372 |
+
patas
|
| 373 |
+
baboon
|
| 374 |
+
macaque
|
| 375 |
+
langur
|
| 376 |
+
colobus
|
| 377 |
+
proboscis monkey
|
| 378 |
+
marmoset
|
| 379 |
+
capuchin
|
| 380 |
+
howler monkey
|
| 381 |
+
titi
|
| 382 |
+
spider monkey
|
| 383 |
+
squirrel monkey
|
| 384 |
+
Madagascar cat
|
| 385 |
+
indri
|
| 386 |
+
Indian elephant
|
| 387 |
+
African elephant
|
| 388 |
+
lesser panda
|
| 389 |
+
giant panda
|
| 390 |
+
barracouta
|
| 391 |
+
eel
|
| 392 |
+
coho
|
| 393 |
+
rock beauty
|
| 394 |
+
anemone fish
|
| 395 |
+
sturgeon
|
| 396 |
+
gar
|
| 397 |
+
lionfish
|
| 398 |
+
puffer
|
| 399 |
+
abacus
|
| 400 |
+
abaya
|
| 401 |
+
academic gown
|
| 402 |
+
accordion
|
| 403 |
+
acoustic guitar
|
| 404 |
+
aircraft carrier
|
| 405 |
+
airliner
|
| 406 |
+
airship
|
| 407 |
+
altar
|
| 408 |
+
ambulance
|
| 409 |
+
amphibian
|
| 410 |
+
analog clock
|
| 411 |
+
apiary
|
| 412 |
+
apron
|
| 413 |
+
ashcan
|
| 414 |
+
assault rifle
|
| 415 |
+
backpack
|
| 416 |
+
bakery
|
| 417 |
+
balance beam
|
| 418 |
+
balloon
|
| 419 |
+
ballpoint
|
| 420 |
+
Band Aid
|
| 421 |
+
banjo
|
| 422 |
+
bannister
|
| 423 |
+
barbell
|
| 424 |
+
barber chair
|
| 425 |
+
barbershop
|
| 426 |
+
barn
|
| 427 |
+
barometer
|
| 428 |
+
barrel
|
| 429 |
+
barrow
|
| 430 |
+
baseball
|
| 431 |
+
basketball
|
| 432 |
+
bassinet
|
| 433 |
+
bassoon
|
| 434 |
+
bathing cap
|
| 435 |
+
bath towel
|
| 436 |
+
bathtub
|
| 437 |
+
beach wagon
|
| 438 |
+
beacon
|
| 439 |
+
beaker
|
| 440 |
+
bearskin
|
| 441 |
+
beer bottle
|
| 442 |
+
beer glass
|
| 443 |
+
bell cote
|
| 444 |
+
bib
|
| 445 |
+
bicycle-built-for-two
|
| 446 |
+
bikini
|
| 447 |
+
binder
|
| 448 |
+
binoculars
|
| 449 |
+
birdhouse
|
| 450 |
+
boathouse
|
| 451 |
+
bobsled
|
| 452 |
+
bolo tie
|
| 453 |
+
bonnet
|
| 454 |
+
bookcase
|
| 455 |
+
bookshop
|
| 456 |
+
bottlecap
|
| 457 |
+
bow
|
| 458 |
+
bow tie
|
| 459 |
+
brass
|
| 460 |
+
brassiere
|
| 461 |
+
breakwater
|
| 462 |
+
breastplate
|
| 463 |
+
broom
|
| 464 |
+
bucket
|
| 465 |
+
buckle
|
| 466 |
+
bulletproof vest
|
| 467 |
+
bullet train
|
| 468 |
+
butcher shop
|
| 469 |
+
cab
|
| 470 |
+
caldron
|
| 471 |
+
candle
|
| 472 |
+
cannon
|
| 473 |
+
canoe
|
| 474 |
+
can opener
|
| 475 |
+
cardigan
|
| 476 |
+
car mirror
|
| 477 |
+
carousel
|
| 478 |
+
carpenter's kit
|
| 479 |
+
carton
|
| 480 |
+
car wheel
|
| 481 |
+
cash machine
|
| 482 |
+
cassette
|
| 483 |
+
cassette player
|
| 484 |
+
castle
|
| 485 |
+
catamaran
|
| 486 |
+
CD player
|
| 487 |
+
cello
|
| 488 |
+
cellular telephone
|
| 489 |
+
chain
|
| 490 |
+
chainlink fence
|
| 491 |
+
chain mail
|
| 492 |
+
chain saw
|
| 493 |
+
chest
|
| 494 |
+
chiffonier
|
| 495 |
+
chime
|
| 496 |
+
china cabinet
|
| 497 |
+
Christmas stocking
|
| 498 |
+
church
|
| 499 |
+
cinema
|
| 500 |
+
cleaver
|
| 501 |
+
cliff dwelling
|
| 502 |
+
cloak
|
| 503 |
+
clog
|
| 504 |
+
cocktail shaker
|
| 505 |
+
coffee mug
|
| 506 |
+
coffeepot
|
| 507 |
+
coil
|
| 508 |
+
combination lock
|
| 509 |
+
computer keyboard
|
| 510 |
+
confectionery
|
| 511 |
+
container ship
|
| 512 |
+
convertible
|
| 513 |
+
corkscrew
|
| 514 |
+
cornet
|
| 515 |
+
cowboy boot
|
| 516 |
+
cowboy hat
|
| 517 |
+
cradle
|
| 518 |
+
crane
|
| 519 |
+
crash helmet
|
| 520 |
+
crate
|
| 521 |
+
crib
|
| 522 |
+
Crock Pot
|
| 523 |
+
croquet ball
|
| 524 |
+
crutch
|
| 525 |
+
cuirass
|
| 526 |
+
dam
|
| 527 |
+
desk
|
| 528 |
+
desktop computer
|
| 529 |
+
dial telephone
|
| 530 |
+
diaper
|
| 531 |
+
digital clock
|
| 532 |
+
digital watch
|
| 533 |
+
dining table
|
| 534 |
+
dishrag
|
| 535 |
+
dishwasher
|
| 536 |
+
disk brake
|
| 537 |
+
dock
|
| 538 |
+
dogsled
|
| 539 |
+
dome
|
| 540 |
+
doormat
|
| 541 |
+
drilling platform
|
| 542 |
+
drum
|
| 543 |
+
drumstick
|
| 544 |
+
dumbbell
|
| 545 |
+
Dutch oven
|
| 546 |
+
electric fan
|
| 547 |
+
electric guitar
|
| 548 |
+
electric locomotive
|
| 549 |
+
entertainment center
|
| 550 |
+
envelope
|
| 551 |
+
espresso maker
|
| 552 |
+
face powder
|
| 553 |
+
feather boa
|
| 554 |
+
file
|
| 555 |
+
fireboat
|
| 556 |
+
fire engine
|
| 557 |
+
fire screen
|
| 558 |
+
flagpole
|
| 559 |
+
flute
|
| 560 |
+
folding chair
|
| 561 |
+
football helmet
|
| 562 |
+
forklift
|
| 563 |
+
fountain
|
| 564 |
+
fountain pen
|
| 565 |
+
four-poster
|
| 566 |
+
freight car
|
| 567 |
+
French horn
|
| 568 |
+
frying pan
|
| 569 |
+
fur coat
|
| 570 |
+
garbage truck
|
| 571 |
+
gasmask
|
| 572 |
+
gas pump
|
| 573 |
+
goblet
|
| 574 |
+
go-kart
|
| 575 |
+
golf ball
|
| 576 |
+
golfcart
|
| 577 |
+
gondola
|
| 578 |
+
gong
|
| 579 |
+
gown
|
| 580 |
+
grand piano
|
| 581 |
+
greenhouse
|
| 582 |
+
grille
|
| 583 |
+
grocery store
|
| 584 |
+
guillotine
|
| 585 |
+
hair slide
|
| 586 |
+
hair spray
|
| 587 |
+
half track
|
| 588 |
+
hammer
|
| 589 |
+
hamper
|
| 590 |
+
hand blower
|
| 591 |
+
hand-held computer
|
| 592 |
+
handkerchief
|
| 593 |
+
hard disc
|
| 594 |
+
harmonica
|
| 595 |
+
harp
|
| 596 |
+
harvester
|
| 597 |
+
hatchet
|
| 598 |
+
holster
|
| 599 |
+
home theater
|
| 600 |
+
honeycomb
|
| 601 |
+
hook
|
| 602 |
+
hoopskirt
|
| 603 |
+
horizontal bar
|
| 604 |
+
horse cart
|
| 605 |
+
hourglass
|
| 606 |
+
iPod
|
| 607 |
+
iron
|
| 608 |
+
jack-o'-lantern
|
| 609 |
+
jean
|
| 610 |
+
jeep
|
| 611 |
+
jersey
|
| 612 |
+
jigsaw puzzle
|
| 613 |
+
jinrikisha
|
| 614 |
+
joystick
|
| 615 |
+
kimono
|
| 616 |
+
knee pad
|
| 617 |
+
knot
|
| 618 |
+
lab coat
|
| 619 |
+
ladle
|
| 620 |
+
lampshade
|
| 621 |
+
laptop
|
| 622 |
+
lawn mower
|
| 623 |
+
lens cap
|
| 624 |
+
letter opener
|
| 625 |
+
library
|
| 626 |
+
lifeboat
|
| 627 |
+
lighter
|
| 628 |
+
limousine
|
| 629 |
+
liner
|
| 630 |
+
lipstick
|
| 631 |
+
Loafer
|
| 632 |
+
lotion
|
| 633 |
+
loudspeaker
|
| 634 |
+
loupe
|
| 635 |
+
lumbermill
|
| 636 |
+
magnetic compass
|
| 637 |
+
mailbag
|
| 638 |
+
mailbox
|
| 639 |
+
maillot
|
| 640 |
+
maillot
|
| 641 |
+
manhole cover
|
| 642 |
+
maraca
|
| 643 |
+
marimba
|
| 644 |
+
mask
|
| 645 |
+
matchstick
|
| 646 |
+
maypole
|
| 647 |
+
maze
|
| 648 |
+
measuring cup
|
| 649 |
+
medicine chest
|
| 650 |
+
megalith
|
| 651 |
+
microphone
|
| 652 |
+
microwave
|
| 653 |
+
military uniform
|
| 654 |
+
milk can
|
| 655 |
+
minibus
|
| 656 |
+
miniskirt
|
| 657 |
+
minivan
|
| 658 |
+
missile
|
| 659 |
+
mitten
|
| 660 |
+
mixing bowl
|
| 661 |
+
mobile home
|
| 662 |
+
Model T
|
| 663 |
+
modem
|
| 664 |
+
monastery
|
| 665 |
+
monitor
|
| 666 |
+
moped
|
| 667 |
+
mortar
|
| 668 |
+
mortarboard
|
| 669 |
+
mosque
|
| 670 |
+
mosquito net
|
| 671 |
+
motor scooter
|
| 672 |
+
mountain bike
|
| 673 |
+
mountain tent
|
| 674 |
+
mouse
|
| 675 |
+
mousetrap
|
| 676 |
+
moving van
|
| 677 |
+
muzzle
|
| 678 |
+
nail
|
| 679 |
+
neck brace
|
| 680 |
+
necklace
|
| 681 |
+
nipple
|
| 682 |
+
notebook
|
| 683 |
+
obelisk
|
| 684 |
+
oboe
|
| 685 |
+
ocarina
|
| 686 |
+
odometer
|
| 687 |
+
oil filter
|
| 688 |
+
organ
|
| 689 |
+
oscilloscope
|
| 690 |
+
overskirt
|
| 691 |
+
oxcart
|
| 692 |
+
oxygen mask
|
| 693 |
+
packet
|
| 694 |
+
paddle
|
| 695 |
+
paddlewheel
|
| 696 |
+
padlock
|
| 697 |
+
paintbrush
|
| 698 |
+
pajama
|
| 699 |
+
palace
|
| 700 |
+
panpipe
|
| 701 |
+
paper towel
|
| 702 |
+
parachute
|
| 703 |
+
parallel bars
|
| 704 |
+
park bench
|
| 705 |
+
parking meter
|
| 706 |
+
passenger car
|
| 707 |
+
patio
|
| 708 |
+
pay-phone
|
| 709 |
+
pedestal
|
| 710 |
+
pencil box
|
| 711 |
+
pencil sharpener
|
| 712 |
+
perfume
|
| 713 |
+
Petri dish
|
| 714 |
+
photocopier
|
| 715 |
+
pick
|
| 716 |
+
pickelhaube
|
| 717 |
+
picket fence
|
| 718 |
+
pickup
|
| 719 |
+
pier
|
| 720 |
+
piggy bank
|
| 721 |
+
pill bottle
|
| 722 |
+
pillow
|
| 723 |
+
ping-pong ball
|
| 724 |
+
pinwheel
|
| 725 |
+
pirate
|
| 726 |
+
pitcher
|
| 727 |
+
plane
|
| 728 |
+
planetarium
|
| 729 |
+
plastic bag
|
| 730 |
+
plate rack
|
| 731 |
+
plow
|
| 732 |
+
plunger
|
| 733 |
+
Polaroid camera
|
| 734 |
+
pole
|
| 735 |
+
police van
|
| 736 |
+
poncho
|
| 737 |
+
pool table
|
| 738 |
+
pop bottle
|
| 739 |
+
pot
|
| 740 |
+
potter's wheel
|
| 741 |
+
power drill
|
| 742 |
+
prayer rug
|
| 743 |
+
printer
|
| 744 |
+
prison
|
| 745 |
+
projectile
|
| 746 |
+
projector
|
| 747 |
+
puck
|
| 748 |
+
punching bag
|
| 749 |
+
purse
|
| 750 |
+
quill
|
| 751 |
+
quilt
|
| 752 |
+
racer
|
| 753 |
+
racket
|
| 754 |
+
radiator
|
| 755 |
+
radio
|
| 756 |
+
radio telescope
|
| 757 |
+
rain barrel
|
| 758 |
+
recreational vehicle
|
| 759 |
+
reel
|
| 760 |
+
reflex camera
|
| 761 |
+
refrigerator
|
| 762 |
+
remote control
|
| 763 |
+
restaurant
|
| 764 |
+
revolver
|
| 765 |
+
rifle
|
| 766 |
+
rocking chair
|
| 767 |
+
rotisserie
|
| 768 |
+
rubber eraser
|
| 769 |
+
rugby ball
|
| 770 |
+
rule
|
| 771 |
+
running shoe
|
| 772 |
+
safe
|
| 773 |
+
safety pin
|
| 774 |
+
saltshaker
|
| 775 |
+
sandal
|
| 776 |
+
sarong
|
| 777 |
+
sax
|
| 778 |
+
scabbard
|
| 779 |
+
scale
|
| 780 |
+
school bus
|
| 781 |
+
schooner
|
| 782 |
+
scoreboard
|
| 783 |
+
screen
|
| 784 |
+
screw
|
| 785 |
+
screwdriver
|
| 786 |
+
seat belt
|
| 787 |
+
sewing machine
|
| 788 |
+
shield
|
| 789 |
+
shoe shop
|
| 790 |
+
shoji
|
| 791 |
+
shopping basket
|
| 792 |
+
shopping cart
|
| 793 |
+
shovel
|
| 794 |
+
shower cap
|
| 795 |
+
shower curtain
|
| 796 |
+
ski
|
| 797 |
+
ski mask
|
| 798 |
+
sleeping bag
|
| 799 |
+
slide rule
|
| 800 |
+
sliding door
|
| 801 |
+
slot
|
| 802 |
+
snorkel
|
| 803 |
+
snowmobile
|
| 804 |
+
snowplow
|
| 805 |
+
soap dispenser
|
| 806 |
+
soccer ball
|
| 807 |
+
sock
|
| 808 |
+
solar dish
|
| 809 |
+
sombrero
|
| 810 |
+
soup bowl
|
| 811 |
+
space bar
|
| 812 |
+
space heater
|
| 813 |
+
space shuttle
|
| 814 |
+
spatula
|
| 815 |
+
speedboat
|
| 816 |
+
spider web
|
| 817 |
+
spindle
|
| 818 |
+
sports car
|
| 819 |
+
spotlight
|
| 820 |
+
stage
|
| 821 |
+
steam locomotive
|
| 822 |
+
steel arch bridge
|
| 823 |
+
steel drum
|
| 824 |
+
stethoscope
|
| 825 |
+
stole
|
| 826 |
+
stone wall
|
| 827 |
+
stopwatch
|
| 828 |
+
stove
|
| 829 |
+
strainer
|
| 830 |
+
streetcar
|
| 831 |
+
stretcher
|
| 832 |
+
studio couch
|
| 833 |
+
stupa
|
| 834 |
+
submarine
|
| 835 |
+
suit
|
| 836 |
+
sundial
|
| 837 |
+
sunglass
|
| 838 |
+
sunglasses
|
| 839 |
+
sunscreen
|
| 840 |
+
suspension bridge
|
| 841 |
+
swab
|
| 842 |
+
sweatshirt
|
| 843 |
+
swimming trunks
|
| 844 |
+
swing
|
| 845 |
+
switch
|
| 846 |
+
syringe
|
| 847 |
+
table lamp
|
| 848 |
+
tank
|
| 849 |
+
tape player
|
| 850 |
+
teapot
|
| 851 |
+
teddy
|
| 852 |
+
television
|
| 853 |
+
tennis ball
|
| 854 |
+
thatch
|
| 855 |
+
theater curtain
|
| 856 |
+
thimble
|
| 857 |
+
thresher
|
| 858 |
+
throne
|
| 859 |
+
tile roof
|
| 860 |
+
toaster
|
| 861 |
+
tobacco shop
|
| 862 |
+
toilet seat
|
| 863 |
+
torch
|
| 864 |
+
totem pole
|
| 865 |
+
tow truck
|
| 866 |
+
toyshop
|
| 867 |
+
tractor
|
| 868 |
+
trailer truck
|
| 869 |
+
tray
|
| 870 |
+
trench coat
|
| 871 |
+
tricycle
|
| 872 |
+
trimaran
|
| 873 |
+
tripod
|
| 874 |
+
triumphal arch
|
| 875 |
+
trolleybus
|
| 876 |
+
trombone
|
| 877 |
+
tub
|
| 878 |
+
turnstile
|
| 879 |
+
typewriter keyboard
|
| 880 |
+
umbrella
|
| 881 |
+
unicycle
|
| 882 |
+
upright
|
| 883 |
+
vacuum
|
| 884 |
+
vase
|
| 885 |
+
vault
|
| 886 |
+
velvet
|
| 887 |
+
vending machine
|
| 888 |
+
vestment
|
| 889 |
+
viaduct
|
| 890 |
+
violin
|
| 891 |
+
volleyball
|
| 892 |
+
waffle iron
|
| 893 |
+
wall clock
|
| 894 |
+
wallet
|
| 895 |
+
wardrobe
|
| 896 |
+
warplane
|
| 897 |
+
washbasin
|
| 898 |
+
washer
|
| 899 |
+
water bottle
|
| 900 |
+
water jug
|
| 901 |
+
water tower
|
| 902 |
+
whiskey jug
|
| 903 |
+
whistle
|
| 904 |
+
wig
|
| 905 |
+
window screen
|
| 906 |
+
window shade
|
| 907 |
+
Windsor tie
|
| 908 |
+
wine bottle
|
| 909 |
+
wing
|
| 910 |
+
wok
|
| 911 |
+
wooden spoon
|
| 912 |
+
wool
|
| 913 |
+
worm fence
|
| 914 |
+
wreck
|
| 915 |
+
yawl
|
| 916 |
+
yurt
|
| 917 |
+
web site
|
| 918 |
+
comic book
|
| 919 |
+
crossword puzzle
|
| 920 |
+
street sign
|
| 921 |
+
traffic light
|
| 922 |
+
book jacket
|
| 923 |
+
menu
|
| 924 |
+
plate
|
| 925 |
+
guacamole
|
| 926 |
+
consomme
|
| 927 |
+
hot pot
|
| 928 |
+
trifle
|
| 929 |
+
ice cream
|
| 930 |
+
ice lolly
|
| 931 |
+
French loaf
|
| 932 |
+
bagel
|
| 933 |
+
pretzel
|
| 934 |
+
cheeseburger
|
| 935 |
+
hotdog
|
| 936 |
+
mashed potato
|
| 937 |
+
head cabbage
|
| 938 |
+
broccoli
|
| 939 |
+
cauliflower
|
| 940 |
+
zucchini
|
| 941 |
+
spaghetti squash
|
| 942 |
+
acorn squash
|
| 943 |
+
butternut squash
|
| 944 |
+
cucumber
|
| 945 |
+
artichoke
|
| 946 |
+
bell pepper
|
| 947 |
+
cardoon
|
| 948 |
+
mushroom
|
| 949 |
+
Granny Smith
|
| 950 |
+
strawberry
|
| 951 |
+
orange
|
| 952 |
+
lemon
|
| 953 |
+
fig
|
| 954 |
+
pineapple
|
| 955 |
+
banana
|
| 956 |
+
jackfruit
|
| 957 |
+
custard apple
|
| 958 |
+
pomegranate
|
| 959 |
+
hay
|
| 960 |
+
carbonara
|
| 961 |
+
chocolate sauce
|
| 962 |
+
dough
|
| 963 |
+
meat loaf
|
| 964 |
+
pizza
|
| 965 |
+
potpie
|
| 966 |
+
burrito
|
| 967 |
+
red wine
|
| 968 |
+
espresso
|
| 969 |
+
cup
|
| 970 |
+
eggnog
|
| 971 |
+
alp
|
| 972 |
+
bubble
|
| 973 |
+
cliff
|
| 974 |
+
coral reef
|
| 975 |
+
geyser
|
| 976 |
+
lakeside
|
| 977 |
+
promontory
|
| 978 |
+
sandbar
|
| 979 |
+
seashore
|
| 980 |
+
valley
|
| 981 |
+
volcano
|
| 982 |
+
ballplayer
|
| 983 |
+
groom
|
| 984 |
+
scuba diver
|
| 985 |
+
rapeseed
|
| 986 |
+
daisy
|
| 987 |
+
yellow lady's slipper
|
| 988 |
+
corn
|
| 989 |
+
acorn
|
| 990 |
+
hip
|
| 991 |
+
buckeye
|
| 992 |
+
coral fungus
|
| 993 |
+
agaric
|
| 994 |
+
gyromitra
|
| 995 |
+
stinkhorn
|
| 996 |
+
earthstar
|
| 997 |
+
hen-of-the-woods
|
| 998 |
+
bolete
|
| 999 |
+
ear
|
| 1000 |
+
toilet tissue
|
g0plus_dockerfile/docker-assets/data/TensorRT-10.13.0.35/data/resnet50/reflex_camera.jpeg
ADDED
|
g0plus_dockerfile/docker-assets/data/TensorRT-10.13.0.35/data/resnet50/tabby_tiger_cat.jpg
ADDED
|
Git LFS Details
|