grounded-sam官方demo本地部署,参照官方文档一步一步的操作发现还是有些问题,之后又参考了相关博客,基本已经能够运行,但有些细节还需指出。

安装包和依赖

123
在官方的github上安装部分的要求,python解释器版本3.8及以上,pytorch版本1.7及以上,torchvision为0.8及以上,确认好自己的版本能对上之后,开始安装相关包
在这里插入图片描述
再接着配置GPU环境,刚开始看到这的时候,我以为export是pycharm命令行能够直接识别的命令,发现没用后又直接cmd上输入还是不行,搜了一下才知道export好像是Linux命令,用于设置或显示环境变量的,我是windows系统,只好手动设置。而且这个第3个环境变量并不是直接复制,是要贴上自己的cuda安装路径,之前安装的cuda是在Anaconda的虚拟环境中,没法找到具体位置,又去官网下载cuda,这里选择的是cuda11.8。然后如果没有自己更改过安装位置的话,默认路径应该是:

C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.8

安装SAM和GroundingdDINO以及其他模型,在pycharm命令行中安装,根据需要选择安装,这里安装GroundingDINO时可能会有些许问题,用国内源时需要把梯子关了,并且还会有找不到下载文件的情况,换了几次源,最后换了阿里源下好了。
在这里插入图片描述
再安装一下必要的依赖:
在这里插入图片描述
预训练模型权重下载
SAM
可根据需求选择版本下载,默认选vit_h
GroundingDINO
以上两个权重文件下载后加入项目主目录下,之后下载编码器bert:
bert-base-uncased
这里HuggingFace没有提供像GitHub那样的一键打包下载(也可能是我没找到),所以按照它的层级目录建好分别下载单个文件,最后结果如下:
在这里插入图片描述

运行代码

先试下GroundingDINO,在项目主目录找到grounding_dino_demo.py文件,其中参数

IMAGE_PATH 为输入图片的路径
TEXT_PROMPT 为提示文本,可自行修改
在最后一行代码cv2.imwrite(“annotated_image.jpg”, annotated_frame)可修改输出图片路径

from groundingdino.util.inference import load_model, load_image, predict, annotate, Model
import cv2


CONFIG_PATH = "GroundingDINO/groundingdino/config/GroundingDINO_SwinT_OGC.py"
CHECKPOINT_PATH = "./groundingdino_swint_ogc.pth"
DEVICE = "cuda"
IMAGE_PATH = "assets/demo7.jpg"
TEXT_PROMPT = "Horse. Clouds. Grasses. Sky. Hill."
BOX_TRESHOLD = 0.35
TEXT_TRESHOLD = 0.25

image_source, image = load_image(IMAGE_PATH)
model = load_model(CONFIG_PATH, CHECKPOINT_PATH)

boxes, logits, phrases = predict(
    model=model,
    image=image,
    caption=TEXT_PROMPT,
    box_threshold=BOX_TRESHOLD,
    text_threshold=TEXT_TRESHOLD,
    device=DEVICE,
)

annotated_frame = annotate(image_source=image_source, boxes=boxes, logits=logits, phrases=phrases)
cv2.imwrite("annotated_image.jpg", annotated_frame)

这里就用它自带的文件夹下的demo7,提示文本也不变,输出路径改为自己建立的result_image文件夹下,运行结果如下:
在这里插入图片描述
再来试下GroundingDINO+SAM,先在项目主目录下建立输入图片文件夹input_image和输出图片文件夹output_image,再找到grounded_sam_demo.py文件找到text_prompt这一行,可在这修改提示文本:

parser.add_argument("--text_prompt", type=str, required=True, help="text prompt")
#改为下面
parser.add_argument("--text_prompt", type=str,default="你的文本提示信息(用英文)", required=False, help="text prompt")

剩下几个参数,可以在像上面一样在代码中修改,也可以直接在命令行中给出,我这里选择后者,在pycharm命令行中输入:

python grounded_sam_demo.py --config GroundingDINO/groundingdino/config/GroundingDINO_SwinT_OGC.py --grounded_checkpoint ./groundingdino_swint_ogc.pth --sam_version vit_h --sam_checkpoint ./sam_vit_h_4b8939.pth --input_image ./input_image/car.jpg  --o output_image

在"./input_image/“后填入你需要输入的图片名,其他不需要改变,这里我选的原图如下,提示文本是"dog.bench.”
在这里插入图片描述
结果如下:
在这里插入图片描述
目前只使用了GroundingDINO+SAM,剩下几种组合还没用到

参考文章

Grounded-SAM(最强Zero-Shot视觉应用):本地部署及各个模块的全网最详细使用教程!

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐