【目标检测】Mask RCNN的训练数据集是什么?(含labelimg和labelme的讲解)

2023-10-30


在看完何凯明大神的Mask RCNN的时候,突然想到了一个问题,那就是Mask RCNN的训练数据集是什么?

一、训练数据集

Mask R-CNN是一种基于Faster R-CNN的目标检测算法,同时支持检测和语义分割任务。在训练Mask R-CNN模型时,需要提供带标注的图像数据集。

训练数据集需要包含以下内容:

  • 图像:训练数据集应包含一组用于训练模型的图像。这些图像应该包含各种尺度、角度和环境下的目标实例。通常,训练数据集包含数千张图像。
  • 标注信息:每张图像应该包含目标实例的标注信息。标注信息应该包含每个实例的边界框位置、类别标签和对应的掩码信息。掩码信息是指将目标实例的像素标记为前景(1)或背景(0)的二进制掩码图像。

在训练数据集中,可以使用多种方法来生成标注信息。例如,可以手动标注图像,或者使用自动标注工具(例如LabelImg或者labelme)来加速标注过程。另外,一些公开数据集(例如COCO和PASCAL VOC)提供了预先标注的图像数据,可以用于训练目标检测和语义分割模型。

总之,Mask R-CNN的训练数据集需要包含大量标注的图像数据和每个实例的详细标注信息。

二、标注工具介绍

2.1 labelimg介绍

LabelImg是一个图像标注工具,主要用于手动标注图像数据,用于机器学习、计算机视觉等领域的研究和开发。下面是LabelImg的每一步具体说明:

  1. 打开LabelImg:首先,需要打开LabelImg应用程序,然后点击“Open Dir”按钮打开一个包含需要标注的图像的文件夹。打开文件夹后,可以在左边的文件列表中看到所有的图像文件。
  2. 设置标签:在左下角的标签列表中,可以设置需要标注的目标的标签。可以添加、编辑或删除标签。
  3. 调整图像尺寸:如果需要调整图像尺寸,可以选择“Change Size”选项,然后输入需要调整的尺寸。
  4. 标注目标:在右边的画布区域,选择需要标注的图像,然后使用鼠标框选目标或者用鼠标单击绘制目标的轮廓。选择好目标后,在左边的标签列表中选择对应的标签,然后点击“Create
    RectBox”或“Create Polygon”按钮创建矩形或多边形框。
  5. 保存标注:在标注完图像后,可以点击“Save”按钮保存标注信息。LabelImg会将标注信息以XML格式保存在与图像文件同名的文件中。
  6. 导出标注:在完成整个文件夹中的图像标注后,可以选择“Save As”按钮将所有的标注信息导出成CSV或TXT格式。

注释以PASCAL VOC格式保存为XML文件,这是ImageNet使用的格式。此外,它还支持YOLO格式和 CreateML 格式。

在这里插入图片描述

总之,LabelImg是一个简单易用的图像标注工具,可以帮助用户快速高效地完成图像数据的标注工作。

2.2 labelme介绍

LabelMe是一个基于Web的图像标注工具,主要用于手动标注图像数据,用于机器学习、计算机视觉等领域的研究和开发。相比于LabelImg,LabelMe支持标注更加复杂的图像,可以标注多个对象、多个区域,支持多种标注工具和标注方式。

下面是LabelMe的主要特点和使用方法:

  1. 多种标注工具:LabelMe提供了多种标注工具,包括矩形、多边形、点等,可以满足不同类型的图像标注需求。
  2. 多种标注方式:LabelMe支持多种标注方式,包括手动标注、标注文件导入等。
  3. 标注对象分类:LabelMe支持对标注对象进行分类,可以创建多个对象分类,并为每个分类指定不同的颜色。
  4. 标注信息保存:LabelMe支持将标注信息以JSON格式保存,标注信息中包括对象类型、位置、形状、颜色等信息。
  5. 标注信息导入:LabelMe支持导入标注文件,可以将标注文件以JSON格式导入到LabelMe中,以便进行进一步的标注工作。
  6. 图像浏览:LabelMe提供了一个图像浏览器,可以方便地浏览所有标注过的图像,并对图像进行查找、筛选等操作。
  7. 标注项目管理:LabelMe支持标注项目的管理,可以创建多个标注项目,并为每个项目指定不同的标注任务。

总之,LabelMe是一个功能强大的图像标注工具,可以帮助用户快速高效地完成图像数据的标注工作,尤其适用于标注复杂多样的图像。

以下是使用Labelme的一般步骤和每个步骤的详细说明:

  1. 安装和启动Labelme

在使用Labelme之前,需要先安装并启动它。可以从官方网站下载并安装Labelme,并使用以下命令启动:

labelme
  1. 打开图像文件

在Labelme中,可以通过以下步骤打开图像文件:

  • 点击“File”菜单,选择“Open”选项,或者使用快捷键“Ctrl+O”。
  • 在弹出的“Open”对话框中选择要打开的图像文件。
  • 点击“Open”按钮。
  1. 添加标注

在打开图像文件之后,可以开始添加标注。可以通过以下步骤添加标注:

  • 点击“Create Polygons”工具按钮,或者使用快捷键“P”。
  • 在图像中点击鼠标左键,开始添加标注的第一个点。
  • 继续点击鼠标左键,依次添加标注的其他点。
  • 在最后一个点处,双击鼠标左键,完成标注的绘制。

可以使用“Create Rectangle”、“Create Circle”等其他工具绘制不同形状的标注。

  1. 编辑标注

在添加标注之后,可以使用以下方法编辑标注:

  • 选择要编辑的标注,使用鼠标左键单击该标注。
  • 拖动标注的顶点或边缘,调整标注的形状和大小。
  • 点击标注的顶点,添加新的顶点。
  • 按下“Delete”键,删除标注。
  1. 保存标注

完成标注之后,需要保存标注结果。可以通过以下步骤保存标注结果:

  • 点击“File”菜单,选择“Save”选项,或者使用快捷键“Ctrl+S”。
  • 在弹出的“Save As”对话框中选择要保存的文件夹和文件名。
  • 点击“Save”按钮。

可以将标注结果保存为JSON或者PNG格式。在保存为PNG格式时,标注结果将被叠加在原始图像上。

  1. 导出标注

在保存标注结果之后,可以将标注结果导出为其他格式。可以通过以下步骤导出标注结果:

  • 点击“File”菜单,选择“Export As”选项,或者使用快捷键“Ctrl+E”。
  • 在弹出的“Export As”对话框中选择要导出的文件格式。
  • 点击“Export”按钮。

可以将标注结果导出为JSON、CSV、VOC等格式。

2.3 两者的对比

LabelImg和LabelMe都是常用的图像标注工具,主要用于手动标注图像数据,用于机器学习、计算机视觉等领域的研究和开发。

它们的区别主要在于以下几个方面:

  1. 编写语言:LabelImg是使用Python编写的,而LabelMe是使用Javascript编写的。
  2. 使用环境:LabelImg需要安装Python和Qt库来使用,而LabelMe是一个基于浏览器的应用程序,可以直接在网页上使用。
  3. 支持的标注格式:LabelImg支持多种标注格式,例如Pascal VOC、YOLO等,而LabelMe只支持JSON格式。
  4. 功能和特性:LabelImg和LabelMe都提供了基本的图像标注功能,例如框选目标、绘制轮廓等。不过,它们的功能和特性有所不同,例如LabelMe支持标注多个不同的实例分割,而LabelImg不支持。
  5. 使用体验:LabelImg界面简洁,操作方便,快捷键也比较多,用户可以更快地完成标注。而LabelMe界面略显复杂,需要一些时间来适应操作。不过,LabelMe在一些特殊场景下,例如对复杂形状的标注,会更加方便。

综上所述,LabelImg和LabelMe都是优秀的图像标注工具,用户可以根据自己的需求来选择使用。如果用户需要支持多种标注格式,使用Python环境并且喜欢简洁的操作界面,可以选择LabelImg;如果用户需要标注复杂的实例分割,并且更喜欢网页应用的方式,可以选择LabelMe。

三、制作数据案例

参考博文:

https://blog.csdn.net/u013066730/article/details/101209325

由于我的数据标签是使用labelme方式得到的,但是为了能使得上面的代码有效运行,将我的数据都整理成如下形式:

在train文件夹下有三个子文件夹image,mask,yaml。

在这里插入图片描述
image当中保存的是rgb三通道的图像:

image1.png

image2.png

image3.png

...

mask当中保存的是npy文件,名字与image中相同,只是后缀不同:

image1.npy

image2.npy

image3.npy

...

yaml中保存的是yaml文件,名字与image中相同,只是后缀不同:

image1.yaml

image2.yaml

image3.yaml

...

针对image、mask和yaml的image1.png、image1.npy和image1.yaml进行具体介绍:

image1.png如图所示,图像尺寸为 513 × 604 513\times 604 513×604

在这里插入图片描述

image1.npy保存的是mask文件,本来是要保存png的,但是我防止我一副图片超过了255个物体,那么保存为灰度图像就有点不合理,不如直接保存为npy文件。

在这里插入图片描述

上面这张图并不是我npy中实际保存的,仅仅是为了方便显示。npy中具体保存了两个人的实例分割标记。比如红色的person1,在标签中就是数字1,也就是红色部分全是1;绿色的person2,在标签中就是数字2,区域就是绿色部分,又规定标签是单通道的,所以npy是一个513*604的矩阵,矩阵中保存了背景0,person1对应的1,person2对应的2。

image1.yaml的具体内容如下:

label_names:
- person1
- person2

只需要直到image1.yaml中的person1与图像中是person的区域对应即可(可能是图像中person2,也可能person1,但都没关系,只要对应即可)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【目标检测】Mask RCNN的训练数据集是什么?(含labelimg和labelme的讲解) 的相关文章

随机推荐

  • 搞定VS中反复弹出 Enterprise Core Objects 注册的问题

    搞定VS中反复弹出 Enterprise Core Objects 注册的问题 参照 http blog vichamp com 2007 11 vs2008eco html http capableobjects com node 69
  • OKR概述

    OKR很难吗 用一张图告诉你OKR的定义 操作方法 谷歌实操步骤等 让你快速对OKR有一个全面了解 什么是OKR 中文是目标与关键结果法 是Object ives and Key Results的英文缩写 定义 这是一种由公司 团队和个人协
  • 解决微信自定义图文分享不成功

    首先用到微信开放平台的JS SDK 准备工作 1 用来绑定的微信公众号必须是已认证的 2 链接地址必须是域名 并且是备案过的 当然就得需要服务器了 配置工作 1 配置分享的JS接口安全域名 不然前端配分享时会报错 config invali
  • C++将OpenCV的Mat数据保存为本地.xyz格式,并重新读取为Mat格式

    一 问题 需要将一个OpenCV的Mat格式数据保存到本地为 xyz文件 可用记事本打开 其数据类型为64FC1 数据中包含NaN值 此外还需要将其重新读取为Mat 要求NaN值可以准确识别 二 代码 include
  • Java实现多附件的邮件发送

    叙 本文主要记述了 Springboot 中如何集成并实现多附件的邮件发送 以QQ邮箱的服务器为发送邮件的邮件服务器 Java实现多附件的邮件发送 1 前期准备 1 1 获取收发服务器地址及其端口号 1 2 授权码的获取 2 代码 2 1
  • QTCreator在Ubuntu安装及运行程序报错解决

    1 QT Creator安装 软件包下载 可以进入官网下载或者使用wget命令下载 个人使用wget命令安装如下 sudo wget http download qt io archive qt 5 12 5 12 9 qt opensou
  • VScode修改行间距

    在我们编码的过程中 由于显示字体和显示器的不同 会需要调整行间距 在vscode默认的选项中没有看到设定行间距的选项 不过 可以手动修改配置档达到目的 1 打开设置 2 打开配置档 手动进行设定 3 在选项中添加 editor lineHe
  • Kafka中Producer源码解读

    Producer源码解读 在 Kafka 中 我们把产生消息的一方称为 Producer 即 生产者 它是 Kafka 的核心组件之一 也是消息的来源所在 它的主要功能是将客户端的请求打包封装发送到 kafka 集群的某个 Topic 的某
  • Qt极简贪吃蛇实现

    持续修正更新该项目 环境 Qt 4 8 Qt5环境也可使用 全部文件传送门 部分重要模块代码 include snakegame h include ui snakegame h SnakeGame SnakeGame QWidget pa
  • 连接SQL Server 数据库

    目录 一 启动 SQL Server Management Studio 1 点击 SQL Server Management Studio 菜单进入 2 选择服务器和身份验证方式 3 点击连接进入数据库 二 新建数据库 1 数据库的概念
  • 6370小时时,在公司稳定兼职(4000/月)(2016年5月2日 PS:实际上并不是稳定兼职,没项目了就没钱了。)

    周六时 兼职的公司要去了我的工行卡号 以后每月打4000到我的卡里 我需要调整规划了 2016年5月2日 PS 实际上并不是稳定兼职 没项目了就没钱了
  • Linux C文件IO操作

    文件IO 在Linux中万物都为文件 普通文件 设备 socket 标准输入输出等等 常用接口 Method Parameters Descriptions Return H open char name int flags mode 打开
  • python学习3.1

    一 if 语句的使用 if 后的语句是否执行 也跟缩进有关 1 if else eg 输入 bands oasis the beatles eagles the who the kinks for band in bands if band
  • Alist搭建

    Alist简介 一个支持多种存储的文件列表程序 AList设计易于安装 可以在所有平台上使用 支持多个存储提供商 包括本地存储 阿里云盘 OneDrive Google Drive 等 且易于拓展 支持所有 WebDAV 存储 支持视频 音
  • Python tkinter如何把窗口在屏幕中央居中

    Python tkinter如何把窗口在屏幕中央居中 coding utf 8 import tkinter as tk 创建 Tkinter 窗口 root tk Tk 设置窗口大小 root geometry 400x300 获取屏幕宽
  • 企业微信消息多久可以撤回?企业微信怎么查看撤回的消息?

    大家都知道 个人微信是可以撤回两分钟以内的消息 超过两分钟就无法撤回了 那企业微信可以撤回发送了多久的消息呢 撤回的消息还能够查看吗 跟着企业微信服务商艾客scrm小编 一起来看看吧 其实 我们使用任何一个聊天工具聊天的过程中 撤回消息在所
  • Unity URP渲染管线与内置渲染管线的性能差别

    首先 我们来了解一下Unity的内置渲染管线 内置渲染管线是Unity较早版本中使用的默认渲染管线 它使用的是传统的图形渲染技术 内置渲染管线提供了一系列的渲染功能 如阴影 反射 抗锯齿等 但是 由于其较为庞大且复杂的设计 它的性能相对较低
  • qt动态显示当前时间如何实现

    Qt qt动态显示当前时间如何实现 vestinfo 1 票 182 include mainwindow h include ui mainwindow h include
  • Java面向对象编程

    第一章 类与对象 面向对象简介 面向过程指的是面对于一个问题的解决方案 更多情况下不会做出重用的设计 面向对象主要设计形式为模块化设计 可以进行重用配置 更多情p况下考虑的是标准 然后根据标准进行拼装 面向对象有三个主要特性 封装性 内部的
  • 【目标检测】Mask RCNN的训练数据集是什么?(含labelimg和labelme的讲解)

    文章目录 一 训练数据集 二 标注工具介绍 2 1 labelimg介绍 2 2 labelme介绍 2 3 两者的对比 三 制作数据案例 在看完何凯明大神的Mask RCNN的时候 突然想到了一个问题 那就是Mask RCNN的训练数据集