Labelme分割标注的使用(非常好)

news2024/9/30 19:35:15

博客转自于: Labelme分割标注软件使用

1. Labelme的使用

这里建议大家按照我提供的目录格式事先准备好数据,然后在该根目录下启动labelme(注意启动目录位子,因为标注json文件中存储的图片路径都是以该目录作为相对路径的)

├── img_data: 存放你要标注的所有图片
├── data_annotated: 存放后续标注好的所有json文件
└── label.txt: 所有类别信息

1.1 创建label标签文件

虽然在labelme中能够在标注时添加标签,但我个人强烈建议事先创建一个label.txt标签(放在上述位置中),然后启动labelme时直接读取。标签格式如下:

__ignore__
_background_
dog
cat

每一行代表一个类型的名称,前两行是固定格式__ignore__和_background_都加上,否则后续使用作者提供的转换脚本(转换成PASCAL VOC格式和MS COCO格式)时会报错。也就是从第三行开始就是我们需要分割的目标类别。这里以分割猫狗为例。

1.2 启动labelme

在创建好标签后,启动labelme并读取标签文件(注意启动根目录),其中--labels指定了标签文件的路径

labelme --labels label.txt

读取标签后,我们在界面右侧能够看到Label List中已经载入了刚刚我们自己创建的标签文件,并且不同类别用不同的颜色表示。
在这里插入图片描述

1.3 打开文件/文件夹

点击界面左侧的Open或OpenDir打开文件或文件夹,这里就选择我们刚刚说好的img_data(该文件夹中存储了所有后续需要标注的图片):
在这里插入图片描述

1.4 设置保存结果路径

养成良好习惯,先将保存路径设置好。

先点击左上角File,Change Output Dir设置标注结果的保存目录,这里就设置成前面说好的data_annotated。
建议将Save With Image Data取消掉,默认是选中的。如果选中,会在保存的标注结果中将图像数据也保存在.json文件中(个人觉得没必要,还占空间)。
在这里插入图片描述

1.5 标注目标

首先点击左侧的CreatePolygons按钮开始绘制多边形,然后用鼠标标记一个一个点把目标边界给标注出来(鼠标放置在第一个点上,点击一下会自动闭合边界)。标注后会弹出一个选择类别的选择框,选择对应类别即可。
如果标注完一个目标后想修改目标边界,可以点击工具左侧的EditPolygons按钮,然后选中要修改的目标,拖拉边界点即可进行微调。如果要在边界上新增点,把鼠标放在边界上点击鼠标右键选择Add Point to Edge即可新增边界点。如果要删除点,把鼠标放在边界点上点击鼠标右键选择Remove Selected Point即可删除边界点。

在这里插入图片描述
也可以直接在图片上反键选择其他的标注图形,除多边形Polygons外还有矩形Retangle、Circle圆形、Point点等。
在这里插入图片描述
标注完一张图片后,点击界面左侧的Save按钮即可保存标注结果,默认每张图片的标注信息都用一个json文件存储。

1.6 保存json文件格式

标注得到的json文件格式如下,将一张图片中的所有目标的坐标都保存在shapes列表中,列表中每个元素对应一个目标,其中label记录了该目标的类别名称。points记录了一个目标的左右坐标信息。其他信息不在赘述。根据以下信息,其实自己就可以写个脚本取读取目标信息了。

{
  "version": "4.5.9",
  "flags": {},
  "shapes": [
    {
      "label": "dog",
      "points": [
        [
          108.09090909090907,
          687.1818181818181
        ],
        ....
        [
          538.090909090909,
          668.090909090909
        ],
        [
          534.4545454545454,
          689.0
        ]
      ],
      "group_id": null,
      "shape_type": "polygon",
      "flags": {}
    }
  ],
  "imagePath": "../img_data/1.jpg",
  "imageData": null,
  "imageHeight": 690,
  "imageWidth": 690
}

2 格式转换

2.1 转换语义分割标签

原作者为了方便,也提供了一个脚本,帮我们方便的将json文件转换成PASCAL VOC的语义分割标签格式。示例项目链接:https://github.com/wkentaro/labelme/tree/master/examples/semantic_segmentation.
在该链接中有个labelme2voc.py脚本,将该脚本下载下来后,放在上述项目根目录下,执行以下指令即可(注意,执行脚本的根目录必须和刚刚启动labelme的根目录相同,否则会出现找不到图片的错误)。其中data_annotated是刚刚标注保存的json标签文件夹,data_dataset_voc是输出的PASCAL VOC`格式数据的目录。

python labelme2voc.py data_annotated data_dataset_voc --labels label.txt

执行后会生成如下目录:

- data_dataset_voc/JPEGImages
- data_dataset_voc/SegmentationClass
- data_dataset_voc/SegmentationClassPNG
- data_dataset_voc/SegmentationClassVisualization
- data_dataset_voc/class_names.txt

其中JPEGImages就和之前PASCAL VOC数据讲解中说的一样,就是存储原图像文件。而SegmentationClassPNG就是语义分割需要使用的PNG标签图片。
在这里插入图片描述

2.2 转换实例分割标签

原作者为了方便,这里提供了两个脚本,帮我们方便的将json文件转换成PASCAL VOC的实例分割标签格式以及MS COCO的实例分割标签格式。示例项目链接:https://github.com/wkentaro/labelme/tree/master/examples/instance_segmentation.
在该链接中有个labelme2voc.py脚本,将该脚本下载下来后,执行以下指令即可(注意,执行脚本的根目录必须和刚刚启动labelme的根目录相同,否则会出现找不到图片的错误)。其中data_annotated是刚刚标注保存的json标签文件夹,data_dataset_voc是生成PASCAL VOC数据的目录。

python labelme2voc.py data_annotated data_dataset_voc --labels label.txt

执行后会生成如下目录:

- data_dataset_voc/JPEGImages
- data_dataset_voc/SegmentationClass
- data_dataset_voc/SegmentationClassPNG
- data_dataset_voc/SegmentationClassVisualization
- data_dataset_voc/SegmentationObject
- data_dataset_voc/SegmentationObjectPNG
- data_dataset_voc/SegmentationObjectVisualization
- data_dataset_voc/class_names.txt

除了刚刚讲的语义分割文件夹外,还生成了针对实例分割的标签文件,主要就是SegmentationObjectPNG目录:
在这里插入图片描述
在该链接中有个labelme2coco.py脚本,将该脚本下载下来后,执行以下指令即可(注意,执行脚本的根目录必须和刚刚启动labelme的根目录相同,否则会出现找不到图片的错误)。其中data_annotated是刚刚标注保存的json标签文件夹,data_dataset_coco是生成MS COCO数据类型的目录。

python labelme2coco.py data_annotated data_dataset_coco --labels label.txt

如果执行中提示安装pycocotools包那么就pip安装下就行了。
Linux系统直接:

pip install pycocotools

Windows系统使用:

pip install pycocotools-windows

执行后会生成如下目录:

- data_dataset_coco/JPEGImages
- data_dataset_coco/annotations.json

其中annotations.json就是MS COCO的标签数据文件,如果不了解可以看下原作者之前写的MS COCO介绍

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

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

相关文章

Live800:降低客服成本,你必须了解的事

无论是售前咨询还是售后服务,咨询客服都是客户的“必经之路”,因此客服又被称为企业形象的“代言”、品牌美誉的“前台”、企业文化的一面“镜子”。 然而网友关于客服的吐槽,我们不时可以见到,有的客服答非所问,对产品…

一次明白 JDBC,ORM,JPA,SpringDataJPA 之间的关系

java持久层框架访问数据库一般有两种方式: 以SQL为核心,封装JDBC操作,如:MyBatis以java实体类为核心,将实体类和数据库表之间映射的ORM框架,比如:Spring Data JPA和Hibernate 接下来就是详细的…

blender指定地图影像数据作为背景

qgis导出一个层刚好温和 然后 切换到shading 默认只有表面化 bsdf 点击添加 图片纹理 选择图片,然后把那个颜色拦截到基础色就ok了,操作方法和ue类似 image.pnguv editing必须进入编辑模式 方可操作,如果要刚好铺满整个框,要开启那…

Django 学习 Day10

1.聚合查询 聚合查询是指对一个数据表中的一个字段的数据进行部分或全部的统计查询。差Book数据表中的全部书的平均价格、查询所有书的总数等都需要使用聚合查询。 聚合查询分为: (1)整表聚合 聚合函数的导入: from django.db.…

Qt QFileSystemModel类详解

文章目录一.QFileSystemModel类属性信号函数二.使用说明一.QFileSystemModel类 属性 nameFilterDisables : bool 此属性保存未通过名称筛选器的文件是隐藏还是禁用,默认值为trueoptions : Options 此属性包含影响模型的各种选项,默认情况下&#xff0c…

索引排序内部流程

select 查询字段是不是索引覆盖,覆盖到了就直接内存中排序,输出结果, 如果索引没有覆盖查询字段,计算select的字段释放超过单行所有字段总和限制,超过限制就进行双路排序,否则就使用单路排序 双路排序&…

裂缝波导天线

1. 裂缝波导天线波导裂缝天线属于阵列天线,如图1-1所示,在一根波导上开一系列裂缝可构成线阵天线,三种波导裂缝线阵(两种在宽边,一种在窄边)通过控制裂缝的偏置或倾角实现所要求的口径幅度分布。图1-1 波导…

钉钉的想象力,向企业服务第一平台进阶

作者 | 曾响铃 文 | 响铃说 时近年末,钉钉7.0版本在杭州重磅发布。 两年一个大版本,这一次钉钉正试图向更高的维度进化: 第一,在完成一家企业的组织数字化和业务数字化后,钉钉开始将重点突破到企业间,突…

如何获取完整、准确的用户需求?

1、成立专业且全面的综合项目组 想要获取完整且准确的用户需求,首先需要成立由技术人员、业务人员、测试人员等组成的项目组,项目组成员最好既懂技术又懂业务。这样的综合项目组有助于全面获取用户需求。 如何获取完整、准确的用户需求:专业全…

模拟前端的开关器件隔离度分析与优化

1、模拟开关的隔离程度 下图为一个模拟开关在 SiPM接收切换中的应用电路。 V1点的波形输入的信号下降沿为500ps,上升沿为10ns,波形如下图所示。 V2点的波形如下图所示,此时IN为低,应该是S1导通,S2断开的,此…

Unity 3D 导入资源包 || Unity 3D 导出资源包

项目中的一些资源具有复用性,只需要将资源导出,就能够重复使用。 导出资源包 执行 Assets → Select Dependencies 菜单命令,选中与导出资源相关的内容。接着执行 Assets→ Export Package 菜单命令。弹出的 Exporting Package 导出资源对话框…

大数据NiFi(一):什么是NiFi

文章目录 什么是NiFi 一、NiFi背景介绍

第5章 函数

🌞欢迎来到机器学习的世界 🌈博客主页:卿云阁 💌欢迎关注🎉点赞👍收藏⭐️留言📝 🌟本文由卿云阁原创! 🌠本阶段属于练气阶段,希望各位仙友顺利完…

软件测试复习

软件测试定义 什么是软件测试 使用人工或自动手段运行或测定某个系统的过程,其目的在于检验它是否满足规定的需求或是弄清预期结果与实际结果之间的差别。软件测试就是“验证”和“确认”活动构成的整体。 软件测试的作用 验证软件需求和功能是否得到完整实现验证软…

花房集团成功上市,构建互联互通的在线社交娱乐生态

近日,花房集团正式在香港联合交易所主板上市。对于花房集团而言,登陆港股市场是新的征程、新的起点。 可以看到,花房集团在稳固“直播社交”业务基本盘的同时,持续探索元宇宙领域,上市当日首次发布了最新的战略方向“娱…

Apriori算法的python实现

文章目录函数介绍实例Step1:整理数据Step2:挖掘频繁项集Step3:挖掘关联规则Step4:进一步筛选规则作者:李雪茸函数介绍 实现Apriori关联规则挖掘是借助mlxtend第三方包,使用步骤如下: 1、调用apriori算法挖掘频繁项集,apriori()中…

十一、通过程序向闪存文件系统写入信息

1、闪存 (1)每一个esp8266都配有一个闪存,闪存就类似于一个小硬盘。 (2)我们编译上传的程序就存储在闪存中。 (3)闪存的全称是Serial Peripheral Interface Flash File System(SPIFFS),串行外设接口Flash文件系统。 (4)闪存除…

docker高级篇-docker-compose容器编排介绍及实战

Docker-compose是什么?能干嘛?解决了哪些痛点? 是什么? Docker-compose是Docker官方推出 的一个工具软件,可以管理多个Docker容器组成的一个应用。你需要编写一个一个YAML格式的配置文件:docker-compose.yml。写好多个容器之间的调用关系。然后,只需要一个命令,就能…

嵌入式:ARM汇编语言程序设计基础教程

文章目录汇编语言程序设计的步骤顺序程序设计分支程序设计循环程序设计子程序设计寄存器传递参数方式存储区域传递参数方式堆栈传递参数方式汇编语言程序设计的步骤 ① 合理地分配存储器资源,将前述的目标系统‘数据结构模型’表示到各存储器单元。 ② CPU寄存器数…

pytorch集锦(4)-ResNet图像分类

目录加载训练好的模型下载模型权重图像预处理打开要预测的图像传递图像运行模型下载数据打开imagenet_classes.txt预测结果前5个最可能分类加载训练好的模型 pip3 install pillow>>> from torchvision import models >>> dir(models) [AlexNet, DenseNet, I…