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


在看完何凯明大神的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,但都没关系,只要对应即可)

猜你喜欢

转载自blog.csdn.net/wzk4869/article/details/129830994