【保姆级教程】YOLOv8自动数据标注

news2024/7/4 6:19:54

一、YOLOV8环境准备

1.1 下载安装最新的YOLOv8代码

 仓库地址: https://github.com/ultralytics/ultralytics

1.2 配置环境

  pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple

1.3 安装labelme标注工具

 pip install labelme

二、半自动标注

2.1 下载预训练权重yolov8n.pt

仓库:https://github.com/ultralytics/ultralytics
在YOLOv8 github上下载预训练权重:yolov8n.pt,ultralytics\ultralytics\路径下,新建weights文件夹,预训练权重放入其中。
在这里插入图片描述

2.2 下载预训练权重ViT-B SAM model

仓库:https://github.com/facebookresearch/segment-anything?tab=readme-ov-file
在SAM github上下载预训练权重:ViT-B SAM model将下载的权重重命名为sam_b.pt(包括文件后缀),放入ultralytics\ultralytics\weights文件夹,预训练权重放入其中。
在这里插入图片描述

2.3 自动标注

执行下面代码:(建议使用绝对路径)

from ultralytics.data.annotator import auto_annotate

auto_annotate(data='D:/study/cnn/yolo/ultralytics/ultralytics/assets', det_model='D:/study/cnn/yolo/ultralytics/weights/yolov8n.pt', sam_model='D:/study/cnn/yolo/ultralytics/weights/sam_b.pt')

查看ultralytics\assets_auto_annotate_labels路径下,生成的txt格式标签
在这里插入图片描述

三、标签文件可视化

3.1 txt标签转json标签

执行下面代码:(建议使用绝对路径)
在这里插入图片描述

import torch
import numpy as np
import base64, os
from PIL import Image
import io
import json

def xyn2xyxy(x):
    # Convert nx4 boxes from [x, y, w, h] to [x1, y1, x2, y2] where xy1=top-left, xy2=bottom-right
    x = [ar.reshape(-1, 2) for ar in x]

    return x

def txt2points(txtfile_path):
    cls, xywh_list = [], []
    with open(txtfile_path, "r") as f:
        for line in f.readlines():
            line = line.strip('\n').split(' ')  # 去掉列表中每一个元素的换行符
            cls.append(line[0])
            xywh_list.append(line[1:])

    return cls, xywh_list


def savejson(points_list, clses_list, img_tmp, filename, save_dir, w, h):
    cur_json_dict = {
        "version": "5.1.1",
        "flags": {},
        "shapes": [
        ],
    }

    listbigoption = []
    for cls, points in zip(clses_list, points_list):
        points = np.array(points, dtype=float).reshape(-1, 2)
        points[:, 0] = points[:, 0] * w
        points[:, 1] = points[:, 1] * h

        cur_json_dict['shapes'].append(
            {"label": cls, "points": points.tolist(), "group_id": None,
             "shape_type": "polygon", "flags": {}})

    # A['imageData'] = base64encode_img(img_tmp)

    cur_json_dict["imageData"] = None
    cur_json_dict["imageHeight"] = h
    cur_json_dict["imageWidth"] = w
    
    # 图像文件的相对路径
    cur_json_dict['imagePath'] = "..//assets//" + filename

    suffix = os.path.splitext(filename)[-1]
    with open(save_dir + "/" + filename.replace(suffix, ".json"), 'w', encoding='utf-8') as f:
        f.write(json.dumps(cur_json_dict, indent=4, separators=(',', ':')))
        # json.dump(A, f, indent=2, ensure_ascii=False)


def txt2json_main():
    img_dir = r'D:/study/cnn/yolo/ultralytics/ultralytics/assets'
    txt_dir = r'D:/study/cnn/yolo/ultralytics/ultralytics/assets_auto_annotate_labels'
    save_dir = r'D:/study/cnn/yolo/ultralytics/ultralytics/assets'
    

    for imgfile in os.listdir(img_dir):
        print(imgfile)
        name, suffix = os.path.splitext(imgfile)
        txtfile = imgfile.replace(suffix, '.txt')
        txt_path = os.path.join(txt_dir, txtfile)
        if not os.path.isfile(txt_path):
            continue
        img_path = os.path.join(img_dir, imgfile)
        img = Image.open(img_path)
        w, h = img.size
        cls, xyxy = txt2points(txt_path)
        # print(cls)
        # print(xyxy)
        # print()
        savejson(xyxy, cls, img, imgfile, save_dir, w, h)
if __name__ == '__main__':
    txt2json_main()

查看生成结果
在这里插入图片描述

3.2 使用labelme工具进行可视化

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1546943.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

MATLAB 自定义生成直线点云(详细介绍) (47)

MATLAB 自定义生成直线点云 (详细介绍)(47) 一、算法介绍二、具体步骤二、算法实现1.代码2.效果一、算法介绍 通过这里的直线生成方法,可以生成模拟直线的点云数据,并通过调整起点、终点、数量和噪声水平等参数来探索不同类型的直线数据。这种方法可以用于测试、验证和开…

【考研数学】跟武忠祥,如何使用好《复习全书》和《高数辅导讲义》?

本人就是全程跟武忠祥老师高分上岸的! 高数辅导讲义建议在强化阶段再买就行 在基础阶段把基础篇吃透就ok 本人属于基础很差相当于是零基础的考研党,经过一年备考成功上岸 中间花费了很多时间在考研数学备考信息检索上,写下这篇希望能帮助…

H264码流结构介绍

H264的码流格式 一般有两种格式: 1、Annex B(字节流格式):由Network Abstraction Layer Units (NALU)组成,也被称为NAL。每个NALU包都可以被单独解析和处理。 2、MP4格式,也叫RTP包格式。MP4 格式没有起始…

Java Web-Maven

Maven是apache旗下的一个开源项目,是一款用于管理和构建java项目的工具 Maven的作用 1.依赖管理:方便快捷的管理项目依赖资源(jar包),避免版本冲突问题 我们有的项目需要大量的jar包,采用手动导包的方式非常繁琐,并且版本升级也…

睿眼(Realeye)视觉识别模型训练全流程心得分享

睿眼(Realeye)是一款集智能采集、识别、定位、抓取、视控全流程为一体的 AI 产品, 以其 AI 算法结合机械臂硬件实现对万事万物的定位抓取功能,能够实现对任意目标物从图 片采集、标注到模型训练和抓取。通过人性化的交互方式、易操…

深度剖析python的就业面

技术行业,一定要提升技术功底,丰富项目实战经验; 这对于你未来几年职业规划,以及测试技术掌握的深度非常有帮助。 WEB开发 尽管目前Python并不是做Web开发的首选,但这仍是一个比较热门的方向。 现如今有不少知名网…

【STL学习】(2)string的模拟实现

前言 本文将模拟实现string的一些常见功能,目的在于加深理解string与回顾类与对象的相关知识。 一、前置知识 string是表示可变长的字符序列的类string的底层是使用动态顺序表存储的string对象不以’\0’字符为终止算长度,而是以size有效字符的个数算长…

嵌入式开发过程中应该养成的习惯!

最近有一些读者来咨询:有什么需要注意的编程好习惯?给大家分享一下。 第一:多看官方文档 不要被这几个字吓到,官方文档其实都是宝藏。 一个成熟的技术诞生,可以没有博客没有书籍,但一定会有一个官方文档,毋庸置疑,它一定是最准确、最实时的资料。编写官方文档的人,…

【SAP2000】碰撞分析 Impact Analysis

碰撞分析 Impact Analysis CSI程序的动力分析功能非常广泛。一个例子是分析两个质量或结构之间碰撞效应的能力。 The possibilities of dynamic analysis with CSI programs are very extensive. An example of this is the ability to analyze the effects of collision bet…

Leetcode算法题笔记(2)

目录 图论51. 岛屿数量解法一 52. 腐烂的橘子解法一 53. 课程表解法一 54. 实现 Trie (前缀树)解法一 回溯55. 全排列解法一 56. 子集解法一解法二 57. 电话号码的字母组合解法一 58. 组合总和解法一解法二 59. 括号生成解法一解法二 60. 单词搜索解法一 61. 分割回文串解法一 …

一文看懂什么是OpenHarmony流转架构

随着全场景多设备的生活方式不断深入,用户拥有的设备越来越多,不同设备都能在适合的场景下提供良好的体验,例如手表可以提供及时的信息查看能力,电视可以带来沉浸的观影体验。但是,每个设备也有使用场景的局限&#xf…

【Python】Data Science with Python 数据科学(1)环境搭建

一、操作系统 使用运行在Windows11主机上的Ubuntu 22.04虚拟机,虚拟化平台为Oracle VM VirtualBox。 二、PyCharm安装 有关PyCharm的安装和快捷方式创建,可分别参考我的博客 Ubuntu安装PyCharm、Ubuntu创建桌面快捷方式 ,以及Ubuntu创建桌…

systemd-journal(一)之journalctl命令详解

文章目录 写在前面概述描述不传递参数传递一个或多个匹配参数示例 源选项用法--system, --user-M, --machine-m, --merge-D DIR, --directoryDIR--fileGLOB--rootROOT--imageIMAGE--image-policypolicy--namespaceNAMESPACE 过滤选项用法-S, --since, -U, --until举例&#xff…

孙中茂:摸清自己的性格很重要,只要你的本事够了,在哪个地方都是都会发光的。

《程客有话说》是我们最新推出的一个访谈栏目,邀请了一些国内外有趣的程序员来分享他们的经验、观点与成长故事,我们尝试建立一个程序员交流与学习的平台,也欢迎大家推荐朋友或自己来参加我们的节目,一起加油。 本期我们邀请的程…

第四百二十六回

文章目录 1. 概念介绍2. 实现方法2.1 原生方式2.1 插件方式 3. 示例代码4. 内容总结 我们在上一章回中介绍了"如何修改程序的桌面图标"相关的内容,本章回中将介绍如何处理ListView中的事件冲突.闲话休提,让我们一起Talk Flutter吧。 1. 概念介…

YOLOv9有效改进专栏汇总|未来更新卷积、主干、检测头注意力机制、特征融合方式等创新![2024/3/23]

​ 专栏介绍:YOLOv9改进系列 | 包含深度学习最新创新,助力高效涨点!!! 专栏介绍 YOLOv9作为最新的YOLO系列模型,对于做目标检测的同学是必不可少的。本专栏将针对2024年最新推出的YOLOv9检测模型&#xff0…

NSCaching: Simple and Efficient NegativeSampling for Knowledge Graph Embedding

摘要 知识图嵌入是数据挖掘研究中的一个基本问题,在现实世界中有着广泛的应用。它的目的是将图中的实体和关系编码到低维向量空间中,以便后续算法使用。负抽样,即从训练数据中未观察到的负三元组中抽取负三元组,是KG嵌入的重要步…

Open CASCADE学习|显示文本

目录 1、修改代码 Viewer.h: Viewer.cpp: 2、显示文本 OpenCasCade 你好啊 霜吹花落 1、修改代码 在文章《Open CASCADE学习|显示模型》基础上,增加部分代码,实现对文本显示的支持,具体如下: Viewer…

随机链表的深拷贝

目录 一、何为深拷贝? 二、题目 三、思路 1.拷贝节点插入到原节点后面 2.控制拷贝节点的random 3.脱离原链表 : 尾插的思想 四、代码 五、附加 一、何为深拷贝? 一个引用对象一般来说由两个部分组成:一个具名的Handle,也就…

cinder学习小结

1 官方文档 翻译官方文档学习 链接Cinder Administration — cinder 22.1.0.dev97 documentation (openstack.org) 1.1 镜像压缩加速 在cinder.conf配allow_compression_on_image_upload True可打开开关 compression_format xxx可设置镜像压缩格式,可为gzip 1.2 …