From d21112a189c8e60eef01652064f60a704250e418 Mon Sep 17 00:00:00 2001 From: Kanazawanaoaki Date: Thu, 12 Oct 2023 18:08:24 +0900 Subject: [PATCH 1/3] Add visual grounding with GroundingDINO --- jsk_perception/docker/Makefile | 9 +- jsk_perception/docker/dino/Dockerfile | 27 +++++ jsk_perception/docker/dino/server.py | 99 ++++++++++++++++ jsk_perception/docker/run_jsk_vil_api | 3 +- jsk_perception/launch/detection.launch | 24 ++++ jsk_perception/node_scripts/detection_node.py | 13 ++ .../sample/config/sample_ofa_config.rviz | 44 ++++++- .../jsk_perception/vil_inference_client.py | 111 +++++++++++++++++- jsk_recognition_msgs/CMakeLists.txt | 2 + .../action/DetectionTask.action | 8 ++ jsk_recognition_msgs/msg/DetectionResult.msg | 8 ++ 11 files changed, 336 insertions(+), 12 deletions(-) create mode 100644 jsk_perception/docker/dino/Dockerfile create mode 100644 jsk_perception/docker/dino/server.py create mode 100644 jsk_perception/launch/detection.launch create mode 100755 jsk_perception/node_scripts/detection_node.py create mode 100644 jsk_recognition_msgs/action/DetectionTask.action create mode 100644 jsk_recognition_msgs/msg/DetectionResult.msg diff --git a/jsk_perception/docker/Makefile b/jsk_perception/docker/Makefile index 83eb2800ab..43b3abec8b 100644 --- a/jsk_perception/docker/Makefile +++ b/jsk_perception/docker/Makefile @@ -5,9 +5,11 @@ # api directories OFAPROJECT = ofa CLIPPROJECT = clip +DINOPROJECT = dino # image names OFAIMAGE = jsk-ofa-server CLIPIMAGE = jsk-clip-server +DINOIMAGE = jsk-dino-server # commands BUILDIMAGE = docker build REMOVEIMAGE = docker rmi @@ -23,7 +25,7 @@ PARAMURLS = parameter_urls.txt # OFA parameters OFAPARAMFILES = $(foreach param, $(OFAPARAMS), $(PARAMDIR)/$(param)) -all: ofa clip +all: ofa clip dino # TODO check command wget exists, nvidia-driver version @@ -41,6 +43,9 @@ ofa: $(PARAMDIR)/.download clip: $(PARAMDIR)/.download $(BUILDIMAGE) $(CLIPPROJECT) -t $(CLIPIMAGE) -f $(CLIPPROJECT)/Dockerfile +dino: $(PARAMDIR)/.download + $(BUILDIMAGE) $(DINOPROJECT) -t $(DINOIMAGE) -f $(DINOPROJECT)/Dockerfile + # TODO add clip, glip clean: @$(REMOVEIMAGE) $(OFAIMAGE) @@ -48,4 +53,4 @@ clean: wipe: clean rm -fr $(PARAMDIR) -.PHONY: clean wipe ofa clip +.PHONY: clean wipe ofa clip dino diff --git a/jsk_perception/docker/dino/Dockerfile b/jsk_perception/docker/dino/Dockerfile new file mode 100644 index 0000000000..b5a18ef314 --- /dev/null +++ b/jsk_perception/docker/dino/Dockerfile @@ -0,0 +1,27 @@ +# FROM pytorch/pytorch:1.7.1-cuda11.0-cudnn8-devel +FROM pytorch/pytorch:1.9.1-cuda11.1-cudnn8-devel +# FROm pytorch/pytorch:1.13.1-cuda11.6-cudnn8-devel +ARG DEBIAN_FRONTEND=noninteractive +RUN apt -o Acquire::AllowInsecureRepositories=true update \ + && apt-get install -y \ + curl \ + git \ + libopencv-dev \ + wget \ + && apt-get clean \ + && rm -rf /var/lib/apt/lists/* +ENV CUDA_HOME /usr/local/cuda +ENV TORCH_CUDA_ARCH_LIST 8.0+PTX +RUN git clone https://github.com/IDEA-Research/GroundingDINO.git +RUN echo 'export CUDA_HOME=/usr/local/cuda' >> ~/.bashrc +RUN echo 'TORCH_CUDA_ARCH_LIST=8.0+PTX' >> ~/.bashrc +RUN pip install flask opencv-python \ + && pip install "numpy>=1.20" +RUN cd GroundingDINO \ + && pip install -r requirements.txt \ + && pip install -e . +RUN mkdir -p GroundingDINO/weights \ + && cd GroundingDINO/weights \ + && wget -q https://github.com/IDEA-Research/GroundingDINO/releases/download/v0.1.0-alpha/groundingdino_swint_ogc.pth +COPY server.py /workspace/GroundingDINO +ENTRYPOINT cd /workspace/GroundingDINO && python server.py \ No newline at end of file diff --git a/jsk_perception/docker/dino/server.py b/jsk_perception/docker/dino/server.py new file mode 100644 index 0000000000..84f9014dd4 --- /dev/null +++ b/jsk_perception/docker/dino/server.py @@ -0,0 +1,99 @@ +from groundingdino.util.inference import load_model, load_image, predict, annotate +import groundingdino.datasets.transforms as T +from torchvision.ops import box_convert + +import cv2 +import numpy as np +from PIL import Image as PLImage +import torch + +# web server +from flask import Flask, request, Response +import json +import base64 + + +def apply_half(t): + if t.dtype is torch.float32: + return t.to(dtype=torch.half) + return t + +class Inference: + def __init__(self, gpu_id=None): + self.gpu_id = gpu_id + self.device = "cuda" if torch.cuda.is_available() else "cpu" + self.model = load_model("groundingdino/config/GroundingDINO_SwinT_OGC.py", "weights/groundingdino_swint_ogc.pth") + self.BOX_TRESHOLD = 0.35 + self.TEXT_TRESHOLD = 0.25 + + def convert_to_string(self, input_list): + output_string = "" + for item in input_list: + output_string += item + " . " + return output_string.strip() + + def infer(self, img, texts): + # get cv2 image + # image = cv2.resize(img, dsize=(640, 480)) # NOTE forcely + # image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB) + image = cv2.cvtColor(img, cv2.COLOR_BGR2RGB) + image_source = PLImage.fromarray(image) + image = np.asarray(image_source) + transform = T.Compose( + [ + T.RandomResize([800], max_size=1333), + T.ToTensor(), + T.Normalize([0.485, 0.456, 0.406], [0.229, 0.224, 0.225]), + ] + ) + image_transformed, _ = transform(image_source, None) + + image_source = image + image = image_transformed + + TEXT_PROMPT = self.convert_to_string(texts) + + boxes, logits, phrases = predict( + model=self.model, + image=image, + caption=TEXT_PROMPT, + box_threshold=self.BOX_TRESHOLD, + text_threshold=self.TEXT_TRESHOLD, + device = self.device + ) + + h, w, _ = image_source.shape + boxes = boxes * torch.Tensor([w, h, w, h]) + xyxy = box_convert(boxes=boxes, in_fmt="cxcywh", out_fmt="xyxy").numpy() + + results = {} + for i in range(len(xyxy)): + box = xyxy[i].tolist() + logit = logits[i].item() + results[i] = {"box": box, "logit": logit, "phrase": phrases[i]} + + return results + +# run +if __name__ == "__main__": + app = Flask(__name__) + infer = Inference() + + @app.route("/detection", methods=['POST']) + def detection_request(): + data = request.data.decode("utf-8") + data_json = json.loads(data) + # process image + image_b = data_json['image'] + image_dec = base64.b64decode(image_b) + data_np = np.fromstring(image_dec, dtype='uint8') + img = cv2.imdecode(data_np, 1) + # get text + texts = data_json['queries'] + infer_results = infer.infer(img, texts) + results = [] + for i in range(len(infer_results)): + results.append({"id": i, "box": infer_results[i]["box"], "logit": infer_results[i]["logit"], "phrase": infer_results[i]["phrase"]}) + return Response(response=json.dumps({"results": results}), status=200) + + app.run("0.0.0.0", 8080, threaded=True) diff --git a/jsk_perception/docker/run_jsk_vil_api b/jsk_perception/docker/run_jsk_vil_api index acef636280..8c91444ef3 100755 --- a/jsk_perception/docker/run_jsk_vil_api +++ b/jsk_perception/docker/run_jsk_vil_api @@ -10,7 +10,8 @@ import subprocess import sys CONTAINERS = {"ofa": "jsk-ofa-server", - "clip": "jsk-clip-server"} + "clip": "jsk-clip-server", + "dino": "jsk-dino-server"} OFA_MODEL_SCALES = ["base", "large", "huge"] parser = argparse.ArgumentParser(description="JSK Vision and Language API runner") diff --git a/jsk_perception/launch/detection.launch b/jsk_perception/launch/detection.launch new file mode 100644 index 0000000000..4feec17522 --- /dev/null +++ b/jsk_perception/launch/detection.launch @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + host: $(arg host) + port: $(arg port) + model: $(arg model) + + + + + + diff --git a/jsk_perception/node_scripts/detection_node.py b/jsk_perception/node_scripts/detection_node.py new file mode 100755 index 0000000000..aada431e11 --- /dev/null +++ b/jsk_perception/node_scripts/detection_node.py @@ -0,0 +1,13 @@ +#!/usr/bin/env python + +import rospy +from jsk_perception.vil_inference_client import DINOClientNode + + +def main(): + rospy.init_node("dino") + node = DINOClientNode() + rospy.spin() + +if __name__ == "__main__": + main() diff --git a/jsk_perception/sample/config/sample_ofa_config.rviz b/jsk_perception/sample/config/sample_ofa_config.rviz index 458138e652..bdbdb70408 100644 --- a/jsk_perception/sample/config/sample_ofa_config.rviz +++ b/jsk_perception/sample/config/sample_ofa_config.rviz @@ -5,7 +5,7 @@ Panels: Property Tree Widget: Expanded: ~ Splitter Ratio: 0.4870370328426361 - Tree Height: 509 + Tree Height: 625 - Class: rviz/Selection Name: Selection - Class: rviz/Tool Properties @@ -113,6 +113,38 @@ Visualization Manager: text size: 12 top: 320 width: 512 + - Class: jsk_rviz_plugin/OverlayImage + Enabled: true + Name: ObjectDetection/Output/Image + Topic: /detection/output/image + Value: true + alpha: 0.800000011920929 + height: 128 + keep aspect ratio: true + left: 530 + overwrite alpha value: false + top: 10 + transport hint: raw + width: 320 + - Align Bottom: false + Background Alpha: 0.800000011920929 + Background Color: 0; 0; 0 + Class: jsk_rviz_plugin/String + Enabled: true + Foreground Alpha: 0.800000011920929 + Foreground Color: 255; 255; 255 + Name: ObjectDetection/Visualize + Overtake Color Properties: true + Overtake Position Properties: true + Topic: /detection/visualize + Value: true + font: DejaVu Sans Mono + height: 500 + left: 530 + line width: 2 + text size: 12 + top: 320 + width: 512 Enabled: true Global Options: Background Color: 48; 48; 48 @@ -164,10 +196,10 @@ Visualization Manager: Window Geometry: Displays: collapsed: false - Height: 1025 + Height: 1016 Hide Left Dock: false Hide Right Dock: true - QMainWindow State: 000000ff00000000fd00000004000000000000021e000002f7fc0200000008fb0000001200530065006c0065006300740069006f006e00000001e10000009b000000b100fffffffb0000001e0054006f006f006c002000500072006f007000650072007400690065007302000001ed000001df00000185000000b1fb000000120056006900650077007300200054006f006f02000001df000002110000018500000122fb000000200054006f006f006c002000500072006f0070006500720074006900650073003203000002880000011d000002210000017afb000000100044006900730070006c006100790073010000006f000002f70000018400fffffffb0000002000730065006c0065006300740069006f006e00200062007500660066006500720200000138000000aa0000023a00000294fb00000014005700690064006500530074006500720065006f02000000e6000000d2000003ee0000030bfb0000000c004b0069006e0065006300740200000186000001060000030c00000261000000010000010f0000037efc0200000003fb0000001e0054006f006f006c002000500072006f00700065007200740069006500730100000041000000780000000000000000fb0000000a00560069006500770073000000003d0000037e0000013500fffffffb0000001200530065006c0065006300740069006f006e010000025a000000b200000000000000000000000200000490000000a9fc0100000001fb0000000a00560069006500770073030000004e00000080000002e100000197000000030000078000000060fc0100000002fb0000000800540069006d0065010000000000000780000005cd00fffffffb0000000800540069006d0065010000000000000450000000000000000000000556000002f700000004000000040000000800000008fc0000000100000002000000010000000a0054006f006f006c00730100000000ffffffff0000000000000000 + QMainWindow State: 000000ff00000000fd00000004000000000000021e00000338fc0200000008fb0000001200530065006c0065006300740069006f006e00000001e10000009b0000005c00fffffffb0000001e0054006f006f006c002000500072006f007000650072007400690065007302000001ed000001df00000185000000b1fb000000120056006900650077007300200054006f006f02000001df000002110000018500000122fb000000200054006f006f006c002000500072006f0070006500720074006900650073003203000002880000011d000002210000017afb000000100044006900730070006c006100790073010000003d00000338000000c900fffffffb0000002000730065006c0065006300740069006f006e00200062007500660066006500720200000138000000aa0000023a00000294fb00000014005700690064006500530074006500720065006f02000000e6000000d2000003ee0000030bfb0000000c004b0069006e0065006300740200000186000001060000030c00000261000000010000010f0000037efc0200000003fb0000001e0054006f006f006c002000500072006f00700065007200740069006500730100000041000000780000000000000000fb0000000a00560069006500770073000000003d0000037e000000a400fffffffb0000001200530065006c0065006300740069006f006e010000025a000000b200000000000000000000000200000490000000a9fc0100000001fb0000000a00560069006500770073030000004e00000080000002e100000197000000030000073800000060fc0100000002fb0000000800540069006d0065010000000000000738000003bc00fffffffb0000000800540069006d00650100000000000004500000000000000000000005140000033800000004000000040000000800000008fc0000000100000002000000010000000a0054006f006f006c00730100000000ffffffff0000000000000000 Selection: collapsed: false Time: @@ -176,6 +208,6 @@ Window Geometry: collapsed: false Views: collapsed: true - Width: 1920 - X: 1440 - Y: 1096 + Width: 1848 + X: 72 + Y: 27 diff --git a/jsk_perception/src/jsk_perception/vil_inference_client.py b/jsk_perception/src/jsk_perception/vil_inference_client.py index e42948a2c7..8ff251bcc0 100644 --- a/jsk_perception/src/jsk_perception/vil_inference_client.py +++ b/jsk_perception/src/jsk_perception/vil_inference_client.py @@ -6,6 +6,9 @@ import actionlib import requests import rospy +import matplotlib +import matplotlib.cm +import numpy as np from cv_bridge import CvBridge from dynamic_reconfigure.server import Server from jsk_perception.cfg import ClassificationConfig, VQAConfig @@ -13,6 +16,11 @@ ClassificationTaskAction, ClassificationTaskFeedback, ClassificationTaskResult, + DetectionResult, + DetectionTaskAction, + DetectionTaskFeedback, + DetectionTaskResult, + Rect, RectArray, QuestionAndAnswerText, VQAResult, VQATaskAction, VQATaskFeedback, VQATaskResult) @@ -56,13 +64,18 @@ def __init__(self, action, self.reconfigure_server = Server(server_config, self.config_cb) self.action_server.start() - def ros_img_to_base(self, ros_img): + def ros_img_to_cv(self, ros_img, encoding="bgr8"): + # convert to cv2 if type(ros_img) is CompressedImage: - cv_img = self._bridge.compressed_imgmsg_to_cv2(ros_img, desired_encoding="bgr8") + cv_img = self._bridge.compressed_imgmsg_to_cv2(ros_img, desired_encoding=encoding) elif type(ros_img) is Image: - cv_img = self._bridge.imgmsg_to_cv2(ros_img, desired_encoding="bgr8") + cv_img = self._bridge.imgmsg_to_cv2(ros_img, desired_encoding=encoding) else: raise RuntimeError("Unknown type {}".format(type(ros_img))) + return cv_img + + def ros_img_to_base(self, ros_img): + cv_img = self.ros_img_to_cv(ros_img) # convert to base64 encimg = cv2.imencode(".png", cv_img)[1] img_str = encimg.tostring() @@ -189,6 +202,98 @@ def inference(self, img_msg, queries): msg.target_names = queries return msg +class DINOClientNode(DockerInferenceClientBase): + def __init__(self): + DockerInferenceClientBase.__init__(self, + DetectionTaskAction, + ClassificationConfig, + DetectionResult, + DetectionTaskFeedback, + DetectionTaskResult, + "detection") + self.pub_class = rospy.Publisher('~class', ClassificationResult, queue_size=1) + self.pub_rects = rospy.Publisher('~rects', RectArray, queue_size=1) + self.pub_image = rospy.Publisher('~output/image', Image, queue_size=1) + + def topic_cb(self, data): + if not self.config: rospy.logwarn("No queries"); return + if not self.config.queries: rospy.logwarn("No queries"); return + queries = self.config.queries.split(";") + try: + msg = self.inference(data, queries) + except Exception: return + # publish debug image + self.image_pub.publish(data) + # publish detection result + msg.header = data.header + self.result_pub.publish(msg) + # publish probabilities result as string + vis_msg = "" + for i, label in enumerate(msg.classification.label_names): + vis_msg += "{}: {:.2f}% ".format(label, msg.classification.probabilities[i]*100) + self.vis_pub.publish(vis_msg) + + def create_queries(self, goal): + return goal.queries + + def inference(self, img_msg, queries): + img_byte = self.ros_img_to_base(img_msg) + req = json.dumps({"image": img_byte, + "queries": queries}).encode("utf-8") + response = self.send_request(req) + result_dic = json.loads(response.text)["results"] + + boxes = [] + scores = [] + labels = [] + for r in result_dic: + boxes.append(r["box"]) + scores.append(r["logit"]) + labels.append(r["phrase"]) + classification_msg = ClassificationResult(header=img_msg.header) + classification_msg.labels = list(range(len(labels))) + classification_msg.label_names = labels + classification_msg.label_proba = scores # cosine similarities + classification_msg.probabilities = scores # sum(probabilities) is 1 + classification_msg.classifier = 'dino' + classification_msg.target_names = queries + self.pub_class.publish(classification_msg) + + rect_msg = RectArray(header=img_msg.header) + vis_img = self.ros_img_to_cv(img_msg, encoding="rgb8") + cmap = matplotlib.cm.get_cmap('hsv') + n = max(len(boxes) - 1, 10) + rects = [] + for i in range(len(boxes)): + box = boxes[i] + rgba = np.array(cmap(1. * i / n)) + color = rgba[:3] * 255 + label_text = '{}, {:.2f}'.format(labels[i], scores[i]) + x_min = max(int(box[0]), 0) + y_min = max(int(box[1]), 0) + x_max = min(int(box[2]), vis_img.shape[1]) + y_max = min(int(box[3]), vis_img.shape[0]) + cv2.rectangle( + vis_img, (x_min, y_min), (x_max, y_max), + color, thickness=3, lineType=cv2.LINE_AA) + cv2.putText( + vis_img, label_text, (x_min, max(y_min - 10, 0)), + cv2.FONT_HERSHEY_SIMPLEX, 0.7, color, + thickness=2, lineType=cv2.LINE_AA) + rect = Rect( + x=x_min, y=y_min, + width=x_max - x_min, height=y_max - y_min) + rect_msg.rects.append(rect) + + self.pub_rects.publish(rect_msg) + vis_msg = self._bridge.cv2_to_imgmsg(vis_img, 'rgb8') + vis_msg.header = img_msg.header + self.pub_image.publish(vis_msg) + + msg = self.result_topic_type() + msg.classification = classification_msg + msg.rects = rect_msg + return msg class OFAClientNode(DockerInferenceClientBase): def __init__(self): diff --git a/jsk_recognition_msgs/CMakeLists.txt b/jsk_recognition_msgs/CMakeLists.txt index 86e6164943..7603c95698 100644 --- a/jsk_recognition_msgs/CMakeLists.txt +++ b/jsk_recognition_msgs/CMakeLists.txt @@ -21,6 +21,7 @@ add_message_files( ColorHistogram.msg DepthCalibrationParameter.msg DepthErrorResult.msg + DetectionResult.msg ExifTags.msg ExifGPSInfo.msg HeightmapConfig.msg @@ -116,6 +117,7 @@ add_service_files(FILES add_action_files(FILES VQATask.action + DetectionTask.action ClassificationTask.action ) diff --git a/jsk_recognition_msgs/action/DetectionTask.action b/jsk_recognition_msgs/action/DetectionTask.action new file mode 100644 index 0000000000..09b589a3bf --- /dev/null +++ b/jsk_recognition_msgs/action/DetectionTask.action @@ -0,0 +1,8 @@ +sensor_msgs/Image image +sensor_msgs/CompressedImage compressed_image +string[] queries +--- +jsk_recognition_msgs/DetectionResult result +bool done +--- +string status diff --git a/jsk_recognition_msgs/msg/DetectionResult.msg b/jsk_recognition_msgs/msg/DetectionResult.msg new file mode 100644 index 0000000000..0fee48cd92 --- /dev/null +++ b/jsk_recognition_msgs/msg/DetectionResult.msg @@ -0,0 +1,8 @@ +# information about frame and timestamp +Header header + +# Classification results of detected objects +jsk_recognition_msgs/ClassificationResult classification + +# Rectangles of detected objects +jsk_recognition_msgs/RectArray rects From 9340be1bb2a71e9cb0caf09a4074082c3cbab9e0 Mon Sep 17 00:00:00 2001 From: Kanazawanaoaki Date: Sun, 15 Oct 2023 20:32:08 +0900 Subject: [PATCH 2/3] Add detection_node doc --- doc/jsk_perception/nodes/detection_node.md | 89 +++++++++++++++++++++ doc/jsk_perception/nodes/images/dino.png | Bin 0 -> 146343 bytes 2 files changed, 89 insertions(+) create mode 100644 doc/jsk_perception/nodes/detection_node.md create mode 100644 doc/jsk_perception/nodes/images/dino.png diff --git a/doc/jsk_perception/nodes/detection_node.md b/doc/jsk_perception/nodes/detection_node.md new file mode 100644 index 0000000000..e8846b8a12 --- /dev/null +++ b/doc/jsk_perception/nodes/detection_node.md @@ -0,0 +1,89 @@ +# detection_node.py + +![](images/dino.png) + +The ROS node for Open-Vocabulary Object Detection with GroundingDINO. + +## System Configuration +![](images/large_scale_vil_system.png) + +This node requires to work with the Docker Container for inference. Please build the container at first following Setup instruction. + +### Prerequisite +This node requires NVIDIA GPU and more than 4GB GRAM to work properly. +You have to install nvidia-container-toolkit for using GPU with docker. Please follow [official instruction](https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/install-guide.html). + +### Build the docker image +You have to build the docker image of GroundingDINO + +```shell +roscd jsk_perception/docker +make +``` + +## Subscribing topic +* `~image` (`sensor_msgs/Image`) + + Input image + +## Publishing topic +* `~output/image` (`sensor_msgs/Image`) + + Image drawing the detected bounding box + +* `~rects` (`jsk_recognition_msgs/RectArray`) + + Array of detected bounding box regions + +* `~result` (`jsk_recognition_msgs/DetectionResult`) + + Detection result + +* `~result/image` (`sensor_msgs/Image`) + + Images used for inference + +* `~visualize` (`std_msgs/String`) + + Detection result to visualize + +## Action topic +* `~inference_server/goal` (`jsk_recognition_msgs/DetectionTaskActionGoal`) + + Detection request with custom categories and image + +* `~inference_server/result` (`jsk_recognition_msgs/DetectionTaskActionResult`) + + Detection result of `~inference_server/goal` + +## Parameters +* `~host` (String, default: `localhost`) + + The host name or IP of inference container + +* `~port` (Integer, default: `8080`) + + The HTTP port of inference container + +## Dynamic Reconfigure Parameters +* `~queries` (string, default: `human;kettle;cup;glass`) + + Default categories used for subscribing image topic. + +### Run inference container on another host or another terminal +In the remote GPU machine, +```shell +cd jsk_recognition/jsk_perception/docker +./run_jsk_vil_api dino --port (Your vacant port) +``` + +In the ROS machine, +```shell +roslaunch jsk_perception detection.launch port:=(Your inference container port) host:=(Your inference container host) DETECTION_INPUT_IMAGE:=(Your image topic name) gui:=true +``` + + +### Run both inference container and ros node in single host +``` +roslaunch jsk_perception detection.launch run_api:=true DETECTION_INPUT_IMAGE:=(Your image topic name) gui:=true +``` \ No newline at end of file diff --git a/doc/jsk_perception/nodes/images/dino.png b/doc/jsk_perception/nodes/images/dino.png new file mode 100644 index 0000000000000000000000000000000000000000..b3c8159eacadb91753ea1b4065877519558468af GIT binary patch literal 146343 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 U%!tZxFu;$zjLMsGDbs-e0}lSf{r~^~ literal 0 HcmV?d00001 From cb948d9bc7e58706a925ef5c25e1d88a5321bcc7 Mon Sep 17 00:00:00 2001 From: Kanazawanaoaki Date: Sat, 14 Oct 2023 02:55:08 +0900 Subject: [PATCH 3/3] Add OFA detection --- jsk_perception/docker/ofa/server.py | 58 +++++++++++++++++-- .../jsk_perception/vil_inference_client.py | 3 +- 2 files changed, 56 insertions(+), 5 deletions(-) diff --git a/jsk_perception/docker/ofa/server.py b/jsk_perception/docker/ofa/server.py index 6c667e3328..82bb636486 100644 --- a/jsk_perception/docker/ofa/server.py +++ b/jsk_perception/docker/ofa/server.py @@ -61,7 +61,7 @@ def __init__(self, task, model_scale): utils.split_paths(param_path), arg_overrides=overrides) elif task == "refcoco": - tasks.register_task(self.task, RefcocoTask) + tasks.register_task(task, RefcocoTask) self.models, self.cfg, self.task = checkpoint_utils.load_model_ensemble_and_task( utils.split_paths(param_path), arg_overrides=overrides) @@ -140,6 +140,15 @@ def encode_text(self, text, length=None, append_bos=False, append_eos=False): s = torch.cat([s, eos_item]) return s + def convert_objects_to_text(self, text): + if len(text) == 1: + object_text = text[0] + elif len(text) >= 2: + object_text = ', '.join(text[:-1]) + f' or {text[-1]}' + else: + object_text = '' + return object_text + def construct_sample(self, image, text): if self.task_name == "caption" or self.task_name == "vqa_gen": patch_image = self.patch_resize_transform(image).unsqueeze(0) @@ -176,7 +185,8 @@ def construct_sample(self, image, text): h_resize_ratio = torch.tensor(patch_image_size / h).unsqueeze(0) patch_image = self.patch_resize_transform(image).unsqueeze(0) patch_mask = torch.tensor([True]) - src_text = self.encode_text(' which region does the text " {} " describe?'.format(text), append_bos=True, + object_text = self.convert_objects_to_text(text) + src_text = self.encode_text(' which region does the text " {} " describe?'.format(object_text), append_bos=True, append_eos=True).unsqueeze(0) src_length = torch.LongTensor([s.ne(self.pad_idx).long().sum() for s in src_text]) sample = { @@ -214,7 +224,24 @@ def infer(self, img, text): text = result[0]['answer'] return text elif self.task_name == "refcoco": - pass + # image = cv2.resize(img, dsize=(640, 480)) # NOTE forcely + # image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB) + image = cv2.cvtColor(img, cv2.COLOR_BGR2RGB) + image = Image.fromarray(image) + # Construct input sample & preprocess for GPU if cuda available for VG + sample = self.construct_sample(image, text) + sample = utils.move_to_cuda(sample) if self.use_cuda else sample + sample = utils.apply_to_sample(apply_half, sample) if self.use_fp16 else sample + with torch.no_grad(): + result, scores = eval_step(self.task, self.generator, self.models, sample) + results = {} + object_text = self.convert_objects_to_text(text) + for i in range(len(result)): + box = result[i]["box"] + logit = scores[i].item() + results[i] = {"box": box, "logit": logit, "phrase": object_text} + + return results # run if __name__ == "__main__": @@ -232,6 +259,9 @@ def infer(self, img, text): elif ofa_task == "vqa_gen": vqa_infer = Inference("vqa_gen", ofa_model_scale) + elif ofa_task == "detection": + detection_infer = Inference("refcoco", ofa_model_scale) + else: raise RuntimeError("No application is available") @@ -274,5 +304,25 @@ def vqa_request(): return Response(response=json.dumps({"results": results}), status=200) except NameError: print("Skipping create vqa_gen app") - + + try: + @app.route("/detection", methods=['POST']) + def detection_request(): + data = request.data.decode("utf-8") + data_json = json.loads(data) + # process image + image_b = data_json['image'] + image_dec = base64.b64decode(image_b) + data_np = np.fromstring(image_dec, dtype='uint8') + img = cv2.imdecode(data_np, 1) + # get text + texts = data_json['queries'] + infer_results = detection_infer.infer(img, texts) + results = [] + for i in range(len(infer_results)): + results.append({"id": i, "box": infer_results[i]["box"], "logit": infer_results[i]["logit"], "phrase": infer_results[i]["phrase"]}) + return Response(response=json.dumps({"results": results}), status=200) + except NameError: + print("Skipping create detection app") + app.run("0.0.0.0", 8080, threaded=True) diff --git a/jsk_perception/src/jsk_perception/vil_inference_client.py b/jsk_perception/src/jsk_perception/vil_inference_client.py index 8ff251bcc0..76233faf5f 100644 --- a/jsk_perception/src/jsk_perception/vil_inference_client.py +++ b/jsk_perception/src/jsk_perception/vil_inference_client.py @@ -211,6 +211,7 @@ def __init__(self): DetectionTaskFeedback, DetectionTaskResult, "detection") + self.model_name = rospy.get_param("~model", default="dino") self.pub_class = rospy.Publisher('~class', ClassificationResult, queue_size=1) self.pub_rects = rospy.Publisher('~rects', RectArray, queue_size=1) self.pub_image = rospy.Publisher('~output/image', Image, queue_size=1) @@ -255,7 +256,7 @@ def inference(self, img_msg, queries): classification_msg.label_names = labels classification_msg.label_proba = scores # cosine similarities classification_msg.probabilities = scores # sum(probabilities) is 1 - classification_msg.classifier = 'dino' + classification_msg.classifier = self.model_name classification_msg.target_names = queries self.pub_class.publish(classification_msg)