GroundingDINO(一种开集目标检测算法)服务化,根据文本生成检测框

背景

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

将GroundingDINO服务化

为什么要服务化

原始的项目是一个python脚本,不适合单人使用,而不是和团队一起使用。服务化之后,其他人可以通过http请求的方式来访问,而不需要每个人都搭建环境,也便于批量处理数据。

如何服务化

最简单的是通过flask api把python脚本包装一层,这种方式实现简单,但扩展性不够,比如如果想要动态组batch,就需要自己写这部分逻辑。更好的方式是使用成熟的模型推理服务,TorchServe就是其中的一种,比较适合pytorch模型(其实其他格式比如onnx也可以),使用TorchServe,我们只用写好模型的预处理、推理和后处理逻辑,其他的比如实例扩展、动态batch、资源监控这些都不需要我们自己实现。我们有其他模型,也可以用同样的方式服务起来,而不需要为每个模型都写一个服务。因此本文选择TorchServe来作为模型的推理服务。

过程

克隆文末的项目后按顺序执行下面步骤:

1.下载模型

新建一个weights目录,并把下面的模型放入:

wget -q http://github.com/IDEA-Research/GroundingDINO/releases/download/v0.1.0-alpha/groundingdino_swint_ogc.pth

新建一个bert-base-uncased 目录,下载bert模型:
http://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 http://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-Service

本文来自博客园,作者:haoliuhust,转载请注明原文链接:http://www.cnblogs.com/haoliuhust/p/17435504.html

本文转载于网络 如有侵权请联系删除

相关文章

  • DAnIEL:真菌数据分析平台及相互作用关系数据库

    网址:https://sbi.hki-jena.de/daniel DAnIEL是刚刚发表在Frontier上的真菌数据分析平台。DAnIEL:auser-friendlywebserverforfungalITSampliconsequencingdataDanielLoos,LuZhang,ChristineBeemelmanns,OliverKurzai,andGianniPanagiotouFrontiersinMicrobiology,doi:10.3389/fmicb.2021.720513输入原始数据,可进行质控,得到ASV/OTU以及后续一些统计分析。整个流程是把很多程序整合到了一起,可选的参数比较有限。浏览了一下,发现左边knowledgebase有两个数据库可能会更有用:Interaction里面汇总了1669个真菌之间明确的相互作用关系。Infections里收集了306个致病菌信息。

  • 内网渗透|Chisel内网穿透工具

    一、chisel工具介绍 Chisel可用来搭建内网隧道,类似于常用的frp和nps之类的工具。由于目前使用的人比较少,因此对于有些杀软还不能准确的识别出该工具。chisel可以进行端口转发、反向端口转发以及Socks流量代理,使用go语言编写,支持多个平台使用,是进行内网穿透的一个鲜为人知的好工具。二、chisel工具下载使用0x01chisel工具下载下载地址:https://github.com/jpillora/chisel/releases/tag/v1.7.4复制chisel工具是使用go语言进行编写的,可以适用于各个平台,也可以对源码进行编译,或者直接使用编译好的发行版。0x02chisel工具使用首先,chisel和frp、nps是不同的,没有所谓的服务器端和客户端,对于chisel,只有一个文件,可以通过执行这个文件,让其充当服务器端或者客户端。如下所示:(1):查看chisel工具的帮助./chisel-help复制(2):查看chisel服务器端的帮助./chiselserver-help复制(3):查看chisel客户端的帮助./chiselclient-hel

  • 史上最强Tomcat8性能优化

    对于Tomcat的优化,主要是从2个方面入手,一是Tomcat自身的配置,另一个是Tomcat所运行的jvm虚拟机的调优。服务器资源服务器所能提供CPU、内存、硬盘的性能对处理能力有决定性影响。硬件我们不说了,这个方面是钱越多越好是吧。Tomcat配置优化Linux环境安装运行Tomcat8具体的安装步骤可以参考Linux(CentOS7)安装Tomcat与设置Tomcat为开机启动项如果需要登录系统,必须配置tomcat用户,在安装完Tomcat后,进行如下操作在/conf/tomcat-users.xml文件中的<tomcat-users>标签里面添加如下内容<!--修改配置文件,配置tomcat的管理用户--> <rolerolename="manager"/> <rolerolename="manager-gui"/> <rolerolename="admin"/> <rolerolename="admin-gui"/> <

  • 从操作系统层面理解Linux下的网络IO模型

    I/O(INPUTOUTPUT),包括文件I/O、网络I/O。 计算机世界里的速度鄙视:内存读数据:纳秒级别。 千兆网卡读数据:微妙级别。1微秒=1000纳秒,网卡比内存慢了千倍。磁盘读数据:毫秒级别。1毫秒=10万纳秒,硬盘比内存慢了10万倍。CPU一个时钟周期1纳秒上下,内存算是比较接近CPU的,其他都等不起。CPU处理数据的速度远大于I/O准备数据的速度。任何编程语言都会遇到这种CPU处理速度和I/O速度不匹配的问题!在网络编程中如何进行网络I/O优化:怎么高效地利用CPU进行网络数据处理???一、相关概念从操作系统层面怎么理解网络I/O呢?计算机的世界有一套自己定义的概念。如果不明白这些概念,就无法真正明白技术的设计思路和本质。所以在我看来,这些概念是了解技术和计算机世界的基础。1.1同步与异步,阻塞与非阻塞理解网络I/O避不开的话题:同步与异步,阻塞与非阻塞。拿山治烧水举例来说,(山治的行为好比用户程序,烧水好比内核提供的系统调用),这两组概念翻译成大白话可以这么理解。同步/异步关注的是水烧开之后需不需要我来处理。阻塞/非阻塞关注的是在水烧开的这段时间是不是干了其他事。1.1

  • 如何在Ubuntu 16.04上使用mdadm管理RAID阵列

    介绍通过将各个磁盘组合到特定配置的虚拟存储设备中,RAID阵列可提供更高的性能和冗余。在Linux中,该mdadm实用程序可以轻松创建和管理软件RAID阵列。课程准备要完成本指南,您需要访问非root具有sudo权限的用户。没有服务器的同学可以在这里购买,不过我个人更推荐您使用免费的腾讯云开发者实验室进行试验,学会安装后再购买服务器。如上所述,本指南将介绍RAID阵列管理。在本指南开始之前,请按照腾讯云+社区中的相关指南,了解如何使用mdadm在Ubuntu16.04上创建RAID阵列以创建一个或多个阵列。本指南假设您有一个或多个要操作的阵列。查询有关RAID设备的信息正确管理的最基本要求之一是能够查找有关阵列的结构,组件设备和当前状态的信息。要获取有关RAID设备的详细信息,请使用-D或--detail选项将RAID设备传递给mdadm:sudomdadm-D/dev/md0复制下面将显示有关阵列的重要信息:Output/dev/md0: Version:1.2 CreationTime:MonAug821:19:062016 RaidLevel:raid10 ArraySize:2

  • 商家开发餐饮微信小程序的好处有哪些?错过就等于错失商机?

    随着中国不断的强大,随着居民消费水平的提高,餐饮的发展永远不会饱和,只需要有人去挖掘去创新,将各种新元素植入餐饮,带给餐饮新鲜活力,使餐饮企业呈现勃勃生机。餐饮行业,可以说是一个永久的行业,它的发展永不停息,它盈利的脚步也从来不会停!近年来,随着社会经济的高速发展,作为消费群体为广泛的行业,餐饮随着消费者生活水平的提高,它也在迅速的发展。尤其是近两年,互联网渗透之下,餐饮有了更大范围跟多模式的发展,可以说,这两年餐饮的发展已经达到全盛时期。「速成应用」打造A+级微信小程序的平台,可视化的操作拖拽组件快速搭建小程序,如果你对“小程序开发”感兴趣的话,可以注册体验。随着餐饮行业未来发展趋势,餐饮在进入2018年之后又会迎来大范围的变化,速成应用小程序特别总结以下几点,看完你就知道,未来餐饮为什么要开发小程序?还在考虑、犹豫不定的商户们,看不到未来小程序的发展趋势,那么这篇文章不要错过,会错过商机的!1、费用饿了么、美团、大众点评,这类平台,除了入驻费,还有每笔销售高达15%、甚至是20%的佣金。2、客户归属 饿了么、美团、大众点评上面来的客户,都是平台自己的,而不是商家的,这类客户都是哪里

  • ASP.NET Core单文件和多文件上传并保存到服务端

    前言:   在我们日常开发中,关于图片,视频,音频,文档等相关文件上传并保存到服务端中是非常常见的一个功能,今天主要是把自己在开发中常用的两种方式记录下来方便一下直接使用,并且希望能够帮助到有需要的同学! 一、配置ASP.NETCore中的静态文件: 简单概述:   在ASP.NETCore应用中静态资源文件需要进行相应的配置才能够提供给客户端直接使用。 详情描述请参考官方文档: https://docs.microsoft.com/zh-cn/aspnet/core/fundamentals/static-files?view=aspnetcore-3.1 简单配置,提供Web根目录内的文件: 调用Startup.Configure中的UseStaticFiles方法配置: publicvoidConfigure(IApplicationBuilderapp) { app.UseStaticFiles(); }复制 二、文件服务器和应用程序配置(IIS,Kestrel): 详情描述,请参考官方文档说明: https://docs.microsoft.com/zh-cn/as

  • C语言博客作业04--数组

    0.展示PTA总分(0----2)## 1.本章学习总结(2分)# 1.1学习内容总结## 数组中查找数据一般有顺序查找法和二分查找法。顺序查找法就是把数组中的每一个元素依次和要查找的数据相比较,二分查找法就是每次和中间的一个数据比较,逐渐缩小范围。 数组中插入数据 定义一个数组a,一个要插入的数x,数组的长度n,要插入的位置m。 输入一个数组 输入插入的数和位置 for(i=n;i>m;i--) a[i]=a[i-1]; endfor a[m]=x; 输出一个新的数组 复制 数组中删除数据 定义一个数组a,要删除的数据num,数组长度n。 输入一个数组 输入要删除的数据 for(i=0;i<n;i++) { if(a[i]==num) { for(j=i;j<n-1;j++) a[j]=a[j+1]; endfor n--; } endif } endfor 输出删除了num后的数组a 复制 数组中目前学到排序方法有冒泡排序法和选择排序法。冒泡排序法的思路是外循环经过n-1次循环,内循环主要是第一个和第二个数比较,第二个和第三个比较,以此类推

  • Emmagee—开源Android性能测试工具

    下载:https://github.com/NetEase/Emmagee/releases/download/V2.5/Emmagee.apk 1.Emmagee——Android性能测试工具 Emmagee是一款实用,方便的性能测试工具,适用于指定的AndroidApp,它可以监控CPU,内存,网络流量,电池电流和状态(某些设备不受支持),新功能,如顶级活动和堆大小(如果有根)(RootToast)可能会不断显示),最新版本也支持。此外,它还提供了一些很酷的功能,例如自定义收集数据的间隔,在浮动窗口中呈现实时进程状态等等。 2.我为什么要使用Emmagee? 与仅进行系统级监控的大多数其他性能测试工具不同,Emmagee提供监控任何单个应用程序的能力。优点: 开源 使用方便 特定于进程的监视,包括CPU,内存,网络流量,电池电流,启动时间和状态 浮动窗口,呈现实时进程状态 CSV格式报告,可以转换为您想要的任何其他格式 用户定义的收集间隔 支持Android2.2及更高版本(7.0及以上不支持) 3.Android版本限制 Android5.0及以上版本:不推荐使用getR

  • redis cluster介绍与gossip协议

    一、rediscluster介绍 自动将数据进行分片,每个master上放一部分数据 提供内置的高可用支持,部分master不可用时,还是可以继续工作的 rediscluster架构下的每个redis都要开放两个端口号,比如一个是6379,另一个就是加1w的端口号16379。 6379端口号就是redis服务器入口。 16379端口号是用来进行节点间通信的,也就是clusterbus的东西,clusterbus的通信,用来进行故障检测、配置更新、故障转移授权。clusterbus用的是一种叫gossip协议的二进制协议,用于节点间高效的数据交换,占用更少的网络带宽和处理时间。    二、节点间的内部通信机制 集群元数据的维护有两种方式:集中式、Gossip协议。rediscluster节点间采用gossip协议进行通信。 1.集中式 将集群元数据集中存储在一个节点上。典型代表是大数据领域的storm。它是分布式的大数据实时计算引擎,是集中式的元数据存储的结构,底层基于zookeeper对所有元数据进行存储维护。   优点 元数据的读取和更新时效性非常好,元数据的

  • PMP概略学习下--主体内容

    4 知识主体 4.1主要知识简介 PMP所有的知识围绕五大过程组和十大知识领域展开。五大过程组包括启动、规划、执行、监控、结尾。启动的内容主要是定义项目或阶段、获得授权以及正式开始;规划的内容主要是明确项目范围、优化目标和制定方案;执行的内容是完成计划工作以及满足项目规范;监控的内容是跟踪、审查、调整进展与绩效,识别变更,控制变更等;结尾的内容是正式结束项目或阶段。其中,规划、执行和监控应该是一个满足PDCA环的过程,是不断迭代进行的。 十大知识领域,包括整合、范围、进度、成本、质量、资源、沟通、风险、采购和相关方等项目管理内容。十大知识领域将5个过程组进行细化,分为47个过程组(第六版是49个)。知识领域和过程组构成过程组矩阵,也称为十五矩阵。每个过程组分为ITTO,也就是输入-技术和工具-输出。学习PMP主要就是学习这些内容。   4.2 十大知识领域概览 4.2.1整合 在项目管理中,“整合”兼具统一、合并、连接和一体化的性质,对完成项目、成功管理干系人期望和满足项目要求,都至关重要。项目整合管理包括选择资源分配方案、平衡相互竞争的目标和方案,以及管

  • MongoDB 相关

    1.安装MongoDB 2.安装robo3t(可视化工具) 3.引入jar包 <!--mongodb--> <dependency>   <groupId>org.springframework.boot</groupId>   <artifactId>spring-boot-starter-data-mongodb</artifactId> </dependency> 4.配置文件添加数据源 spring.data.mongodb.uri=mongodb://192.168.50.65:27017/ spring.data.mongodb.database=smj 5.使用MongoTemplate进行增删改查 /***单条插入*@paramproductDetail*/publicvoidsaveProductDetail(JfProductDetailproductDetail,StringconnectionName){  mongoTemplate.save(productDetail

  • 如何使用WinAuth算出US开头的暴雪战网安全令序列号

    WinAuth是一个Windows下的计算安全令的开源软件.项目地址:http://code.google.com/p/winauth/ 以下引用自官方介绍: WinAuthisaportable,open-sourceAuthenticatorforWindowsthatprovidesatime-basedRFC6238authenticatorandcommonimplementations,suchastheGoogleAuthenticator.WinAuthcanbeusedwithmanyBitcointradingwebsitesaswellassupportingBattle.net(WorldofWarcraft,Hearthstone,DiabloIII),GuildWars2,andRift.   相信很多人都知道,非国服的暴雪战网账号是不能绑定CN开头的安全令的.我美服的账号一直是用手机安全令算出来的外服序列号. 有些人喜欢用WinAuth来算号,但是如果使用Windows下的算号器WinAuth2.0以上来算号的话,会因为IP问题,算出CN开头的安

  • 虚拟机安装教程

      B站完整安装步骤 https://www.bilibili.com/video/BV1aJ411H7Ej?p=467

  • 考研拓扑排序

    typedefstructacrnode { intadjvex; structacrnode*nextarc; }arcnode; typedefstructvnode { acrnode*fristarc; intcount;//记入入度的值 }vnode; typedefstructGarph { vnodeadlist[maxSize]; intn,e; }Garph; inttopsort(Garphg) { intstract[maxSize]; inttop=-1; intflag=0; for(inti=0;i<g.n;i++) { if(g.adlist[i].count==0) stract[++top]=i; } while(top!=-1) { inttemp=stract[top--]; flag++; acrnode*p; p=g.adlist[temp].fristarc; while(p!=NULL) { intvex=p->adjvex; g.adlist[vex].count--; if(g.adlist[vex].count==0)

  • 使用VS2015调试Qt5.9.5源码

    调试的前提 1、Qt5.9.5源码。 2、Qt5.9.5对应VS2015版本的pdb文件。 前提1在安装Qt时勾选源代码选项即可,这样安装后的Qt目录会多出一个“Src”的目录,里面就是Qt的源码。 前提2需要到这个网站:http://download.qt.io/archive/qt/5.9/5.9.5/去下载pdb文件,如下图: 下载后打开压缩包: 因为我们使用的是VS2015,而且编译的程序是32位的,所以这里选择上图中红框中的压缩包。现在解压到当前文件夹: 然后打开这个压缩包,将其中所有内容解压到Qt安装路径,如我的电脑是“C:\Qt\Qt5.9.5\5.9.5\msvc2015”。解压后可以看到有许多pdb文件,如下图: 如何调试 1、配置VS全局符号路径 菜单栏-工具-选项-调试-符号,在右侧“符号文件位置”中新添加上Qt安装路径中bin文件夹路径,如“C:\Qt\Qt5.9.5\5.9.5\msvc2015\bin”。 2、配置VS全局源文件路径 切换至“属性管理器”视图,随便选择一个项目,展开后可以看到在“Debug-Win32”子项,继续展开后可以看到“Mi

  • 自然语言处理常用工具

    nlp常用工具 转自 http://www.cppblog.com/baby-fly/archive/2010/10/08/129003.html   *NLPToolbox  CLT http://complingone.georgetown.edu/~linguist/compling.html  GATE http://gate.ac.uk/  NaturalLanguageToolkit(NLTK) http://nltk.org  MALLET http://mallet.cs.umass.edu/index.php/Main_Page  OpenNLP http://opennlp.sourceforge.net/*EnglishStemmer  Snowball http://snowball.tartarus.org/*EnglishPOSTagger&

  • 3 跳转操作

    #跳转操作:redirect@app.route("/red")defred():returnredirect("/login")复制

  • 对于软件测试的印象

    我对软件测试的印象很差。 为了能将制作的游戏正常的运行,我总共测试了将近五百次。 用鼠标点击下面这个按钮,一直点到想吐。 我完全是靠着对游戏的热爱才继续下去的,一天中有6个小时都是在不断地测试,不断地发现问题,再不断的更改。 现在才发现,我的测试方式不科学,就像我制作的游戏,不是很科学。 以上都是我的吐槽,吐槽…… 其实我还没说完。   (´▽`)(´▽`)(´▽`)(´▽`)(´▽`)分割线(´▽`)(´▽`)(´▽`)(´▽`)(´▽`)   发现了从未发现的问题,才是一次成功的测试。 不论是哪个方面的开发者,都会需要测试,也正是因为越来越多的软件出现,从而导致软件测试变成了非常重要的一步,测试必须伴随着开发进行,而不能等开发结束后再进行测试。 接触了这门学科后我才知道,软件测试是专业的,是需要专门的方式和手段的。游戏开发的后期,测试中发现的bug也越来越多,我才发现我忽略了脚本的检查与测试,因为使用的脚本语言是Ruby,我对于Ruby不是很熟悉,所以在语法方面也出现了错误,而这样的错误,往往就是通篇的弄错(;´༎ຶД༎ຶ`)这为我增加了很多的工作量,也令我十

  • logback 日志存db表结构

    BEGIN; DROPTABLEIFEXISTSlogging_event_property; DROPTABLEIFEXISTSlogging_event_exception; DROPTABLEIFEXISTSlogging_event; COMMIT; BEGIN; CREATETABLElogging_event ( timestmpBIGINTNOTNULL, formatted_messageTEXTNOTNULL, logger_nameVARCHAR(254)NOTNULL, level_stringVARCHAR(254)NOTNULL, thread_nameVARCHAR(254), reference_flagSMALLINT, arg0VARCHAR(254), arg1VARCHAR(254), arg2VARCHAR(254), arg3VARCHAR(254), caller_filenameVARCHAR(254)NOTNULL, caller_classVARCHAR(254)NOTNULL, caller_methodVARCHAR(254)NO

  • Beta版本冲刺计划及安排

    Beta版本冲刺计划及安排   凡事预则立,在Beta开始前,以小组为单位,在敏捷冲刺前发布一篇博客,描述:   a.介绍小组新加入的成员,Ta担任的角色。     新加入成员:王震(201421123054)     自我介绍:我是网络1412的王震,原啊里码码小组的成员,现在到了爸爸说的都队,为人幽默活泼。     担任的角色:以前主要任务是对相关资料的查询,现在在我们小组担任Test角色。   b.下一阶段需要改进完善的功能,如果要大规模改变设计,请看DCR的内容。     下一阶段我们需要完善用户登录与注册功能以及APP界面。   c.下一阶段新增的功能     1.完成用户注册与登录功能。     2.完善界面。     3.增加多个数的加减乘除运算。   d.需要改进的团队分工(针对之前的不足,需要加强和改进团队协作和分工的地方)     1.在Alpha阶段,对代码与软件发布管理不到位,有时忘记在博客写上git地址,所以这次我们会相互提醒。     2.在Beta阶段我们会细化分工,以提高我们团队的工作效率。     3.在Alpha阶段,发现我们的小组队员间交流不够,不

相关推荐

推荐阅读