当前位置: 首页 > news >正文

利用Grounding DINO进行自动标注——目标检测任务——YOLO格式

关于Grounding DINO的环境搭建可以参考我的以前的博客,链接如下所示

如何在Linux上离线部署Grounding DINO-CSDN博客

这个博客主要来介绍如何利用Grounding DINO这个项目去进行目标检测的自动化标注。并且给出了相关的代码已经实验验证。

1.数据集准备

 

 2. 开始实验

2.1 批量标注参考代码如下:

import os
import cv2
import torch
from torchvision.ops import box_convert
from groundingdino.util.inference import load_model, load_image, predict, annotate# 配置路径
MODEL_CONFIG_PATH = "groundingdino/config/GroundingDINO_SwinT_OGC.py"
MODEL_WEIGHTS_PATH = "weights/groundingdino_swint_ogc.pth"
PROJECT_ROOT="Auto_label/Project1/" # 自动检测的根路径
IMAGE_FOLDER = PROJECT_ROOT + "images"  # 输入图片文件夹
OUTPUT_FOLDER = PROJECT_ROOT + "detect_results"  # 输出标注图片的文件夹
LABELS_FOLDER = PROJECT_ROOT + "labels"  # 输出YOLO标签的文件夹
CLASSES_FILE = PROJECT_ROOT + "classes.txt"  # 类别文件# YOLO标签格式转换函数
def convert_to_yolo_format(xyxy, image_width, image_height):"""将 `xyxy` 坐标转换为 YOLO 格式的 `x_center, y_center, width, height`"""x_min, y_min, x_max, y_max = xyxyx_center = (x_min + x_max) / 2.0 / image_widthy_center = (y_min + y_max) / 2.0 / image_heightwidth = abs(x_max - x_min) / image_widthheight = abs(y_max - y_min) / image_heightreturn x_center, y_center, width, height# 加载类别文件
def load_classes(classes_file):with open(classes_file, "r") as f:return [line.strip() for line in f.readlines()]# 主检测与标签生成函数
def process_images(model, classes, image_folder, output_folder, labels_folder):os.makedirs(output_folder, exist_ok=True)os.makedirs(labels_folder, exist_ok=True)for image_file in os.listdir(image_folder):if not image_file.lower().endswith(('.png', '.jpg', '.jpeg')):continue# 加载图片image_path = os.path.join(image_folder, image_file)image_source, image = load_image(image_path)h, w, _ = image_source.shape# 推理检测boxes, logits, phrases = predict(model=model,image=image,# caption="car . coach . bus . truck . tricycle . person . twowheelsvehicle . taxi . license_plate . other_vehicles",caption="person . car . dog . cat",box_threshold=0.35, #0.35text_threshold=0.25 # 0.25)# 缩放坐标并转换为 `xyxy`yolo_boxes = boxes * torch.Tensor([w, h, w, h])xyxy_boxes = box_convert(boxes=yolo_boxes, in_fmt="cxcywh", out_fmt="xyxy").numpy()# 创建YOLO标签文件label_file = os.path.join(labels_folder, os.path.splitext(image_file)[0] + ".txt")with open(label_file, "w") as label_f:for xyxy, phrase in zip(xyxy_boxes, phrases):# 获取类别索引class_idx = classes.index(phrase) if phrase in classes else -1if class_idx == -1:continue  # 跳过不在类别文件中的目标# 转换坐标格式x_center, y_center, width, height = convert_to_yolo_format(xyxy, w, h)# 写入YOLO标签文件label_f.write(f"{class_idx} {x_center:.6f} {y_center:.6f} {width:.6f} {height:.6f}\n")# 标注图片并保存annotated_frame = annotate(image_source=image_source, boxes=boxes, logits=logits, phrases=phrases)output_image_path = os.path.join(output_folder, image_file)cv2.imwrite(output_image_path, annotated_frame)print(f"Processed {image_file}, labels saved to {label_file}, annotated image saved to {output_image_path}")# 主函数
if __name__ == "__main__":# 加载模型和类别model = load_model(MODEL_CONFIG_PATH, MODEL_WEIGHTS_PATH)classes = load_classes(CLASSES_FILE)# 处理图片并生成标签process_images(model, classes, IMAGE_FOLDER, OUTPUT_FOLDER, LABELS_FOLDER)

上面的注释非常详细了,就不过多赘述了。

主要根据自己的环境修改以下内容

  1. 配置路径
  2. 提示词

2.2 开始实验

我主要想检测,因此我的提升词设置如下:

caption="person . car . dog . cat",

检测结果

Auto_label/Project1/detect_results文件夹

 标签文件

Auto_label/Project1/labels文件夹

2.3 实验验证

分析获得标签是否正确,可以可视化标签,可视化标签代码可以参考我以前的博客,链接如下所示

目标检测-可视化YOLO格式标签_yolo标签可视化-CSDN博客

 非常的完美!!!

最近有更新了Grounding DINO-X,其效果更好,链接如下

GitHub - IDEA-Research/DINO-X-API: DINO-X: The World's Top-Performing Vision Model for Open-World Object Detection and Understanding

http://www.lryc.cn/news/498298.html

相关文章:

  • 网际协议(IP)与其三大配套协议(ARP、ICMP、IGMP)
  • uniapp 添加loading
  • cocotb pytest
  • docker run 设置启动命令
  • docker入门 自记录
  • css实现圆周运动效果
  • 【NoSQL数据库】MongoDB数据库——集合和文档的基本操作(创建、删除、更新、查询)
  • Dart 学习笔记(一)
  • 安防视频监控平台Liveweb视频汇聚管理系统管理方案
  • 十八(GIT)、GIT基本命令、axios别名方法、黑马就业数据平台(axios基地址、轻提示函数、注册及登录功能)
  • Linux查看系统基本信息
  • Word处理表格的一些宏
  • 将本地项目文件推送到Git仓库中
  • 2024-12-05OpenCV高级-滤波与增强
  • vue3中 axios 发送请求 刷新token 封装axios
  • aardio - 汉字笔顺处理 - json转sqlite转png
  • 数据结构学习笔记 双向链表
  • 深度学习作业十 BPTT
  • html+css+JavaScript实现轮播图
  • Python+onlyoffice 实现在线word编辑
  • PostgreSQLt二进制安装-contos7
  • Neo4j启动时指定JDK版本
  • kanzi3.6.10 窗口插件-美化绑定内容
  • 利用tablesaw库简化表格数据分析
  • 记录一下,解决js内存溢出npm ERR! code ELIFECYCLEnpm ERR! errno 134 以及 errno 9009
  • 【JavaWeb后端学习笔记】MySQL的数据查询语言(Data Query Language,DQL)
  • 360 最新Android面试题及参考答案
  • 《操作系统 - 清华大学》6 -3:局部页面置换算法:最近最久未使用算法 (LRU, Least Recently Used)
  • ES6新增了哪些特性(待更新)
  • 剖析一下自己的简历第二条