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

模型训练之数据标注-Labelme的使用教程

1. 背景

最近要开始搞模型训练,已经安装好了anaconda,并创建了对应的python环境。

最新开始准备训练集数据,并对训练集进行标注,本文主要讲解了如果对训练集的数据进行标注。

之前标注工具是labelimg,labelimg 只支持矩形标注,为了更精准的多边形标准,开始使用labelme。

接下来详细讲解如果安装使用labelme。

2. labelme安装

直接直接使用 pip 命令安装labelme。

由于前面我们已经安装好了anaconda,新建了一个环境隔离,后续标统一放到这个环境上进行。

conda create -n ai-label python=3.10
conda activate ai-label

前置条件:安装anaconda

打开Anaconda Prompt,切换到我们对应的环境上,输入以下命令,还是从清华源上下载(不知道为啥配置了conda的清华源镜像地址没有生效,知道的小伙伴支援一下)

pip install pyqt5 -i https://pypi.tuna.tsinghua.edu.cn/simple
pip install labelme -i https://pypi.tuna.tsinghua.edu.cn/simple

image-20250627135027090

这样labelme 我们就下载安装好了。

3. labelme使用

接下来输入labelme ,回车。就会弹出labelme 对应的界面。界面如下:

image-20250627135152425

可以更改文件输出路径、取消保存图像路径,设置自动保存等功能。

image-20250709105906749

可以在编辑里面选择我们需要标注的图形,更快的标注出我们需要的目标。

image-20250709101528903

点击打开目录,选择需要标注的文件夹就可以开始标注了。

image-20250709101313277

4. 格式转换

labelme默认输出的文件是json格式,如果仅需要目标检测需要转为YOLO(.txt)格式的可以使用下面工具类转换。

下面提供一个json2yolo的工具类,将其中的目录替换为你的目录即可。


import os
import json# labelme标注的json标签文件目录和保存生成的txt标签的文件夹
dir_json = r'D:/AI/license_plate/labels/'
dir_txt = r'D:/AI/license_plate/txt/'
# os.mkdir(dir_txt)classes2id = {}
num = 0
jsons = os.listdir(dir_json)
for i in jsons:json_path = os.path.join(dir_json, i)with open(json_path, 'r', encoding="utf-8") as f:json_data = json.load(f)# print(json_data['shapes'])for j in json_data['shapes']:if j['label'] not in classes2id:classes2id[j['label']] = numnum += 1
# 输出标签
print(classes2id)# 将json标签转换成txt标签
def json2txt(path_json, path_txt):  with open(path_json, 'r', encoding='utf-8') as path_json:jsonx = json.load(path_json)with open(path_txt, 'w+') as ftxt:shapes = jsonx['shapes']# 获取图片长和宽width = jsonx['imageWidth']height = jsonx['imageHeight']# print(shapes)cat=shapes[0]['label']cat=classes2id[cat]for shape in shapes:# 获取矩形框两个角点坐标x1 = shape['points'][0][0]y1 = shape['points'][0][1]x2 = shape['points'][1][0]y2 = shape['points'][1][1]# 转换为 YOLO 格式(归一化中心宽高)  dw = 1. / widthdh = 1. / heightx = dw * (x1 + x2) / 2y = dh * (y1 + y2) / 2w = dw * abs(x2 - x1)h = dh * abs(y2 - y1)yolo = f"{cat} {x} {y} {w} {h} \n"ftxt.writelines(yolo)list_json = os.listdir(dir_json)
for cnt, json_name in enumerate(list_json):if os.path.splitext(json_name)[-1] == ".json":path_json = dir_json + json_namepath_txt = dir_txt + json_name.replace('.json', '.txt')json2txt(path_json, path_txt)

YOLO格式解读:

YOLO格式的核心在于其标注文件规范,每个.txt文件对应一张图像的所有目标标注,每行表示一个目标实例。具体格式为:

<class_id> <x_center> <y_center> <width> <height>
  • class_id:整数,表示目标类别索引,从0开始计数。例如0表示plate,1表示car等。应与数据集配置文件中names列表顺序一致。

  • x_center/y_center:归一化后的边界框中心坐标,浮点数范围[0,1]。计算方式为:目标中心点x坐标/图像宽度,目标中心点y坐标/图像高度。

  • width/height:归一化后的边界框宽度和高度,范围[0,1]。计算方式为:目标宽度/图像宽度,目标高度/图像高度。

方框坐标必须是归一化的xywh格式(从0到1),意思就是说,将*.txt的文档的五个值都用 0 到 1来表示 ,至于怎么从得到每个数值,就要靠下面这个来算了。

那么是如何使得 坐标 归一化呢?

如果方框以像素为单位,请将x_center和width除以图像宽度,将y_center和height除以图像高度。

5. 本文总结

本文主要介绍了Labelme标注工具的安装使用过程,如果只是训练识别,标注矩形框,使用labelimg也是一个不错的选择,如果需要标注多边形,那么labelme的作用就体现出来了。

http://www.dtcms.com/a/272677.html

相关文章:

  • 5款工具高效制作插图,PPT设计新选择!
  • 货车车架和悬架设计cad【7张】+设计说明书
  • leetcode 3440. 重新安排会议得到最多空余时间 II 中等
  • 《PyQt6-3D:开启Python 3D编程新世界 2》
  • 【TCP/IP】8. 传输层协议
  • hive小文件问题
  • 二层环路避免-STP技术
  • Linux【大数据运维】下制作Redis绿色免安装包(一)
  • 企业网络安全的“金字塔”策略:构建全方位防护体系的核心思路
  • upload-labs靶场通关详解:第20关 /.绕过
  • 以下哪种类型在Golang中不是内置类型?
  • zookeeper etcd区别
  • Keepalived+LVS实现LNMP网站的高可用部署
  • 登录为图片验证时,selenium通过token直接进入页面操作
  • Java 导出word 实现饼状图导出--可编辑数据
  • CIEDE2000 色差公式C++及MATLAB实现
  • 【零基础学AI】第35讲:策略梯度方法 - 连续控制任务实战
  • Swift 图论实战:DFS 算法解锁 LeetCode 323 连通分量个数
  • 快速搭建服务器,fetch请求从服务器获取数据
  • ReentrantLock 与 Synchronized 的区别
  • 给MySQL做定时备份,一天3次
  • method_name字段是什么
  • 单片机基础(STM32-DAY2(GPIO))
  • Linux驱动06 --- UDP
  • 飞书AI技术体系
  • web 系统对接飞书三方登录完整步骤实战使用示例
  • 低温冷启动 高温热启动
  • OpenCV 图像进阶处理:特征提取与车牌识别深度解析
  • 醋酸镨:闪亮的稀土宝藏,掀开科技应用新篇章
  • Spring IoC 如何注入一些简单的值(比如配置文件里的字符串、数字)?