Skip to content

PaddleX图像分类任务模块数据标注教程

本文档将介绍如何使用Labelme标注工具完成图像分类相关单模型的数据标注。 点击上述链接,参考⾸⻚⽂档即可安装数据标注⼯具并查看详细使⽤流程。

1. Labelme 标注

1.1 Labelme 标注工具介绍

Labelme 是一个 python 语言编写,带有图形界面的图像标注软件。可用于图像分类、目标检测、图像分割等任务,在实例分割的标注任务中,标签存储为 JSON 文件。

1.2 Labelme 安装

为避免环境冲突,建议在 conda 环境下安装。.

conda create -n labelme python=3.10
conda activate labelme
pip install pyqt5
pip install labelme

1.3 Labelme 标注过程

1.3.1 准备待标注数据

  • 创建数据集根目录,如 pets
  • pets 中创建 images 目录(必须为images目录),并将待标注图片存储在 images 目录下,如下图所示:

alt text

  • pets 文件夹中创建待标注数据集的类别标签文件 flags.txt,并在 flags.txt 中按行写入待标注数据集的类别。以猫狗分类数据集的 flags.txt 为例,如下图所示:

alt text

1.3.2 启动 Labelme

终端进入到待标注数据集根目录,并启动 labelme 标注工具。

cd path/to/pets
labelme images --nodata --autosave --output annotations --flags flags.txt
* flags 为图像创建分类标签,传入标签路径。 * nodata 停止将图像数据存储到 JSON 文件。 * autosave 自动存储。 * ouput 标签文件存储路径。

1.3.3 开始图片标注

  • 启动 labelme 后如图所示:

alt text * 在 Flags 界面选择类别。

alt text

  • 标注好后点击存储。(若在启动 labelme 时未指定 output 字段,会在第一次存储时提示选择存储路径,若指定 autosave 字段使用自动保存,则无需点击存储按钮)。

alt text * 然后点击 Next Image 进行下一张图片的标注。

alt text

  • 完成全部图片的标注后,使用convert_to_imagenet.py脚本将标注好的数据集转换为 ImageNet-1k 数据集格式,生成 train.txtval.txtlabel.txt

python convert_to_imagenet.py --dataset_path /path/to/dataset
dataset_path为标注的 labelme 格式分类数据集。

  • 经过整理得到的最终目录结构如下:

alt text

2. 数据格式

  • PaddleX 针对图像分类任务定义的数据集,名称是 ClsDataset,组织结构和标注格式如下:

dataset_dir    # 数据集根目录,目录名称可以改变
├── images     # 图像的保存目录,目录名称可以改变,但要注意与train.txt、val.txt的内容对应
├── label.txt  # 标注id和类别名称的对应关系,文件名称不可改变。每行给出类别id和类别名称,内容举例:45 wallflower
├── train.txt  # 训练集标注文件,文件名称不可改变。每行给出图像路径和图像类别id,使用空格分隔,内容举例:images/image_06765.jpg 0
└── val.txt    # 验证集标注文件,文件名称不可改变。每行给出图像路径和图像类别id,使用空格分隔,内容举例:images/image_06767.jpg 10
* 如果您已有数据集且数据集格式为如下格式,但是没有标注文件,可以使用脚本将已有的数据集生成标注文件。

dataset_dir          # 数据集根目录,目录名称可以改变  
├── images           # 图像的保存目录,目录名称可以改变
   ├── train         # 训练集目录,目录名称可以改变
      ├── class0     # 类名字,最好是有意义的名字,否则生成的类别映射文件label.txt无意义
         ├── xxx.jpg # 图片,此处支持层级嵌套
         ├── xxx.jpg # 图片,此处支持层级嵌套
         ...  
      ├── class1     # 类名字,最好是有意义的名字,否则生成的类别映射文件label.txt无意义
      ...
   ├── val           # 验证集目录,目录名称可以改变
* 如果您使用的是 PaddleX 2.x版本的图像分类数据集,在经过训练集/验证集/测试集切分后,手动将 train_list.txtval_list.txttest_list.txt修改为train.txtval.txttest.txt,并且按照规则修改 label.txt 即可。

原版label.txt

classname1
classname2
classname3
...
修改后的label.txt

0 classname1
1 classname2
2 classname3
...