GroundingDINO(一种开集目标检测算法)服务化,根据文本生成检测框
背景
最近发现一个叫GroundingDINO的开集目标检测算法,所谓开集目标检测就是能检测的目标类别不局限于训练的类别,这个算法可以通过输入文本的prompt然后输出对应的目标框。可以用来做预标注或者其他应用,比如我们要训练某个细分场景的算法时,我们找不到足够的已经标注的数据,就可以先用这个算法预打标, 与SAM结合,还能做根据text去分割出物体。
GroundingDINO:https://github.com/IDEA-Research/GroundingDINO

将GroundingDINO服务化
为什么要服务化
原始的项目是一个python脚本,不适合单人使用,而不是和团队一起使用。服务化之后,其他人可以通过http请求的方式来访问,而不需要每个人都搭建环境,也便于批量处理数据。
如何服务化
最简单的是通过flask api把python脚本包装一层,这种方式实现简单,但扩展性不够,比如如果想要动态组batch,就需要自己写这部分逻辑。更好的方式是使用成熟的模型推理服务,TorchServe就是其中的一种,比较适合pytorch模型(其实其他格式比如onnx也可以),使用TorchServe,我们只用写好模型的预处理、推理和后处理逻辑,其他的比如实例扩展、动态batch、资源监控这些都不需要我们自己实现。我们有其他模型,也可以用同样的方式服务起来,而不需要为每个模型都写一个服务。因此本文选择TorchServe来作为模型的推理服务。
过程
克隆文末的项目后按顺序执行下面步骤:
1.下载模型
新建一个weights目录,并把下面的模型放入:
wget -q https://github.com/IDEA-Research/GroundingDINO/releases/download/v0.1.0-alpha/groundingdino_swint_ogc.pth
新建一个bert-base-uncased 目录,下载bert模型:
https://huggingface.co/bert-base-uncased/tree/main
config.json
pytorch_model.bin
tokenizer_config.json
tokenizer.json
vocab.txt
2.制作torchserve镜像
Dockerfile:
FROM pytorch/pytorch:2.0.1-cuda11.7-cudnn8-devel
ARG DEBIAN_FRONTEND=noninteractive
#for Chinese User, uncomment this line
# COPY sources.list /etc/apt/sources.list
RUN apt update && \
apt install openjdk-17-jdk -y
RUN apt install git -y
#install python packages
COPY requirements.txt /root/
RUN pip install -r /root/requirements.txt --no-cache -i https://repo.huaweicloud.com/repository/pypi/simple/
docker build -t torchserve:groundingdino .
3.转换模型
docker run --rm -it -v $(pwd):/data -w /data torchserve:groundingdino bash -c "torch-model-archiver --model-name groundingdino --version 1.0 --serialized-file weights/groundingdino_swint_ogc.pth --handler grounding_dino_handler.py --extra-files GroundingDINO_SwinT_OGC.py,bert-base-uncased/*"
执行完毕后,将得到一个groundingdino.mar文件。
4.开启服务
根据需要修改服务的配置
docker run -d --name groundingdino -v $(pwd)/model_store:/model_store -p 8080:8080 -p 8081:8081 -p 8082:8082 torchserve:groundingdino bash -c "torchserve --start --foreground --model-store /model_store --models groundingdino=groundingdino.mar"
5.调用服务
import requests
import base64
import time
# URL for the web service
url = "http://ip:8080/predictions/groundingdino"
headers = {"Content-Type": "application/json"}
# Input data
with open("test.jpg", "rb") as f:
image = f.read()
data = {
"image": base64.b64encode(image).decode("utf-8"), # base64 encoded image or BytesIO
"caption": "steel pipe", # text prompt, split by "." for multiple phrases
"box_threshold": 0.25, # threshold for object detection
"caption_threshold": 0.25 # threshold for text similarity
}
# Make the request and display the response
resp = requests.post(url=url, headers=headers, json=data)
outputs = resp.json()
'''
the outputs will be like:
{
"boxes": [[0.0, 0.0, 1.0, 1.0]], # list of bounding boxes in xyxy format
"scores": [0.9999998807907104], # list of object detection scores
"phrases": ["steel pipe"] # list of text phrases
}
'''
GroundingDINO(一种开集目标检测算法)服务化,根据文本生成检测框的更多相关文章
- Opencv+Yolov3算法实现社交距离安全检测讲解和实战(Social Distance Detector)
在我们进行交流谈话时,人与人之间总要保持一定的距离,尤其是在疫情的情况下,人与人之间更要保持一定的安全距离,今天给大家来介绍一个检测社交距离的项目,实现社交距离检测器. 社交距离(Social Dis ...
- 目标检测算法YOLO算法介绍
YOLO算法(You Only Look Once) 比如你输入图像是100x100,然后在图像上放一个网络,为了方便讲述,此处使用3x3网格,实际实现时会用更精细的网格(如19x19).基本思想是, ...
- 【深度学习】目标检测算法总结(R-CNN、Fast R-CNN、Faster R-CNN、FPN、YOLO、SSD、RetinaNet)
目标检测是很多计算机视觉任务的基础,不论我们需要实现图像与文字的交互还是需要识别精细类别,它都提供了可靠的信息.本文对目标检测进行了整体回顾,第一部分从RCNN开始介绍基于候选区域的目标检测器,包括F ...
- 目标检测算法(1)目标检测中的问题描述和R-CNN算法
目标检测(object detection)是计算机视觉中非常具有挑战性的一项工作,一方面它是其他很多后续视觉任务的基础,另一方面目标检测不仅需要预测区域,还要进行分类,因此问题更加复杂.最近的5年使 ...
- FAIR开源Detectron:整合全部顶尖目标检测算法
昨天,Facebook AI 研究院(FAIR)开源了 Detectron,业内最佳水平的目标检测平台. 昨天,Facebook AI 研究院(FAIR)开源了 Detectron,业内最佳水平的目标 ...
- AI SSD目标检测算法
Single Shot multibox Detector,简称SSD,是一种目标检测算法. Single Shot意味着SSD属于one stage方法,multibox表示多框预测. CNN 多尺 ...
- 第三十一节,目标检测算法之 Faster R-CNN算法详解
Ren, Shaoqing, et al. “Faster R-CNN: Towards real-time object detection with region proposal network ...
- 第二十九节,目标检测算法之R-CNN算法详解
Girshick, Ross, et al. “Rich feature hierarchies for accurate object detection and semantic segmenta ...
- 目标检测算法之R-CNN算法详解
R-CNN全称为Region-CNN,它可以说是第一个成功地将深度学习应用到目标检测上的算法.后面提到的Fast R-CNN.Faster R-CNN全部都是建立在R-CNN的基础上的. 传统目标检测 ...
- TLD(Tracking-Learning-Detection)一种目标跟踪算法
原文:http://blog.csdn.net/mysniper11/article/details/8726649 视频介绍网址:http://www.cvchina.info/2011/04/05 ...
随机推荐
- adb命令启动报错Error: unknown command '-start'怎么办
大家好,每天记录小问题.水滴石穿. 今天介绍一个从0开始启动app应用的app命令 adb shell am -start -w -n 包名/启动名 第一次运行时报错 怎么办呢, 这边使用的是雷电模拟 ...
- MySQL长时间不登录密码过期解决办法
MySql管理工具 Navicat for MySql的时候,弹出了一个1862 - MySql Your password has expired.To log in you must change ...
- .NetCore中使用分布式事务DTM的二阶段消息
一.概述 二阶段消息是DTM新提出的,可以完美代替现有的事务消息和本地消息表架构.无论从复杂度.性能.便利性还是代码量都是完胜现有的方案. 相比现有的消息架构借助于各种消息中间件比如RocketMQ等 ...
- Java——多线程(代码)
例子:创建三个窗口卖票,总票数为100张.使用实现Runnable接口的方式 * 1.卖票过程中出现重票.错票 --->出现了线程的安全问题 * 2.问题出现的原因:当某个线程操作车票的 ...
- QtDesigner第一个程序
用QTDesigner设计界面简单多了,而且更加直观.先看下效果图,是不是比我们用代码写的布局要美观多了 制作.ui界面 (1).打开Pycharm的界面设计工具QTDsigner Pycharm-& ...
- [数据库]MySQL之SQL查询
一 关系表的介绍 * 课程表 * 学生表 * 选课表 二 SQL查询语句格式 /* SQL查询的一般格式 SELECT [ALL | DISTINCT] [* | coulmnNameA,coulmn ...
- must be reducible node 错误
"must be reducible node"错误通常是由于使用了无法转换为表达式树的代码或表达式. 场景再现:在项目中使用GroupBy的时候,对字段进行了类型转换,接下来正常 ...
- Semantic Kernel 入门系列:💾Native Function
语义的归语义,语法的归语法. 基础定义 最基本的Native Function定义只需要在方法上添加 SKFunction 的特性即可. using Microsoft.SemanticKernel. ...
- WPF Window设置ResizeMode="NoResize"
WPF窗口设置属性ResizeMode="NoResize"时,回到桌面后,点击任意应用,都会将此窗口激活. 我们来看下详细操作: 1. WPF窗口设置属性ResizeMode 2 ...
- CS144 计算机网络 Lab4:TCP Connection
前言 经过前面几个实验的铺垫,终于到了将他们组合起来的时候了.Lab4 将实现 TCP Connection 功能,内部含有 TCPReceiver 和 TCPSender,可以与 TCP 连接的另一 ...