如何自制深度学习图像数据集:以X-Anylableing半自动标注目标检测为例

提示:


前言

提示:为什么你至少需要了解一下数据标注
基于深度学习神经网络模型的图像识别多采用有监督学习方法,即需要标注数据作为模型训练阶段时的输入,引导网络学习目标特征和评估模型性能结果。例如,使用YOLO模型完成目标检测、分割和姿态估计,会需要对应类型的标注数据集。

数据集及其制作方法,往往被很多入门的同学们所忽略。你是否遇见过以下问题:

  • 没有(公开的)数据集可用。或者公开数据集中的目标定义与你的需求不完全匹配。
    许多深度学习教程中通常都给出一个公开数据集,然后聚焦与深度学习框架、神经网络模型结构及训练方法。但实际应用场景往往和教程中的预设相差甚远。
  • 没钱请外包团队采集数据和标注
    据我了解,大型数据服务商(火山、百度等)不接几千个目标的小单子。某宝上一些个体户收费也不便宜,以最简单的标注形式检测框为例,标注一个收费 0.12~0.15元之间。单子小了,对面不接/不售后。单子大点,2万个目标(其实对目标检测应用来讲不算多)就要2400块。其余标注类型,例如分割或者一些自定义标注格式只会更昂贵。
  • 通过公开数据集训练的模型,在应用场景中效果不好。
    除了模型本身的性能(检测精度、泛化性)以外,另外一个原因是应用场景中的图像没有出现在训练集中。一般来讲,训练样本取自目标场景是增强该模型在目标应用中性能和鲁棒性最直接的方法。数据扩充、数据清洗在迭代模型中有着重要意义,这也是“学术派”和“工业派”在看模型调优上有明显区别的地方。
  • 标注费时费力。
    虽然道理大家都懂,人工智能,先有人工后有智能。但是标注本身在许多导师、领导眼里是一个“出工不出活儿”的业务,他们只关心最后模型是否好使。况且,标注本身也是一个劳动密集的事情,枯燥乏味。

本篇博客用于给大家系统性(非学术性地)了解数据集制作。顺便,以后我也不用再手把手教我带的学生/实习生了,文档扔给他们玛卡巴卡自己看吧。

在这里插入图片描述


一、准备工作

在标注前,你至少有以下几点需要做:

  1. 明确应用目标,收集原始图像。尽可能在你模型的应用场景中去直接取材。

我再说具体一点,你要做果蔬识别,你就去模型目标应用设备上针对目标品种去采集。在训练样本较少,模型等不健壮的条件下,不同摄像头拍照色调不同,会影响识别精度。你数据集全做的绿苹果,不带一张红苹果图像样本,你就想识别红苹果那我真的爱莫能助。

有同学又要问,如果目标设备和场景都不固定怎么办。那就用不同的设备在不同的场景都拍一点,说到底,你的训练数据(域)应该尽可能覆盖你的应用场景数据(域),缩小其中的差距(gap),利于模型训练收敛和提升预测效果。

  1. 明确数据集的标注形式和保存格式。

你的标注类型是 目标检测(一个矩形边界框包络目标),分割(像素点类别判断)还是关键点检测。大多数常见标注软件都支持这两种标注类型,可以相互导入和导出,不必担心。有过深度学习训练经验的,这一小节可以调过了。
在这里插入图片描述
以常见的目标检测为例,在一张1080p图像上,有一个矩形检测框 类别为1 中心点坐标为(320, 240),宽度为100,高度为150。

  • YOLO

通常是一个包含目标信息的文本文件(.txt),每一行对应一个目标,格式如下

# 目标类别的整数索引, 标注框中心点的x和y坐标, 标注框的宽度和高度(相对于图像宽度和高度进行归一化)。
<class_id> <x_center>  <y_center>  <width_>  <height_>
1 0.1667 0.2222 0.0521 0.1389
  • COCO:
    通常是一个JSON文件,包含图像和标注的详细信息。COCO的标注框信息存储在annotations字段中,格式如下
{
  "image_id": 1, #图像的唯一标识符。
  "category_id": 1, #目标类别的整数索引。
  "bbox": [x, y, width, height],  #标注框的左上角坐标(x, y),以及宽度和高度(未归一化,直接使用像素值)。
  "area": 15000, #标注框的面积(可选,通常为宽度乘以高度)。
  "iscrowd": 0
}

{
  "image_id": 1,
  "category_id": 1,
  "bbox": [270, 165, 100, 150],
  "area": 15000,
  "iscrowd": 0
}

如果你是制作数据集用于补充模型的训练集,请你更要注意标注格式。例如,原始数据集中 车和人的类别ID为0和1,那在你的数据集中, 车和人的类别ID也必须是0和1。否则模型将会陷入正负样本困惑(手持两张照片 看着左边的奔驰和右边的花园宝宝发懵),导致无法收敛。

  1. 选择并安装一款标注软件
    考虑到许多新手(甚至是完全不懂深度学习、Ubuntu、python)希望有一款开箱即(急)用的工具,我这里无脑推荐 X-anylabeling的win10 CPU版本。安装极其简单,有中文界面,支持AI标注。
    看清楚,是X-anylabeling,不是AnyLabeling。
    地址:官方发布页面 仓库地址 官方教程
    在这里插入图片描述
    这个版本可以在windows上直接运行,无需各种环境配置。除了这个软件icon神似某软件有点不利于工作场景以外,真的是很方便。

二、使用X-Anylableing进行半自动目标检测标注

本次讲解以YOLO格式为例

2.1 打开程序

右键以管理员身份运行X-anylabeling-cpu.exe,菜单栏选择为中文,并打开存放有待标注图像的文件夹
在这里插入图片描述
在这里插入图片描述

2.2 导入标注(如果没有跳过就可以)

使用这个软件产生的标注原始信息会存放在待标注数据的同文件夹下,下次打开会自动读取。
如果你希望将已有来自别处产生的数据集导入进来,流程也很简单。菜单栏选择导入,
在这里插入图片描述
首先你需要一个映射文件,你可以理解为一个模板标志着目标类别名和ID。在我的这个文件(classes.txt)中,类别是如下组织。代表person,ID为0; truck,ID为4

person
bike
car
bus
truck

在这里插入图片描述
紧接着,下一个弹窗打开存放标注的文件夹。这个窗口内是不显示具体文件的,你要做的是选择好文件夹。在这里插入图片描述
按一般规范来讲,标注文件和原图应该都是同名的,例如你的图片名为image.png,那image.txt就是对应的标注文件。多说一句,我们习惯把目标检测数据集按以下方式组织

delta_dataset_0801
|----- anno  #存放标注文件
|----- src	#存放RGB图像
|-----classes.txt #存放类别定义

其余格式,如COCO VOC 详见官方教程 4.1小节

2.3 借助大模型进行标注

,选择Segment anything模型(SAM),尽可能选最大的,然后等待模型完成下载。
(模型是从huggingface下载的,国内同学可能下载速度较慢。对此,我只能说,用手机热点下载试试。)
模型手动下载地址(https://github.com/CVHub520/X-AnyLabeling/blob/main/docs/en/model_zoo.md)
模型手动加载方法(https://github.com/CVHub520/X-AnyLabeling/issues/23)
如果看不懂,评论区踢我一脚后面我出个中文版手把手教程。
在这里插入图片描述
在这里插入图片描述
输出形式选矩形
在这里插入图片描述

标注过程其实就是以“点”,目标上面点正向点,非目标区域点否定点,当目标框成形,选择完成
在这里插入图片描述
相比传统的拉框方式会快很多。结合快捷键会更快。
如果你的画面都是连续,可以视情况考虑勾选“采用上一帧标注”和“保留注释”,下一帧标注只需要微调。也可以尝试基于提示词的自动标注,使用groundingDINO,输入car,就会出标注结果。这里就不多介绍了
**大模型也不是万能的,**个别场景需要手动标注,选择左侧工具列表中的矩形框,自己拉。别觉得工作量大,现在SAM模型已经能帮你搞定绝大部分了,你就偷着乐吧。这要搁四五年前,谁家初始数据集的框不是自己亲手拉的。

2.4 导出标注

在这里插入图片描述
在这里插入图片描述
同样,这里也需要选择一份映射文件。
就可以导出YOLO格式标注结果了。

来自AI的总结

数据标注的重要性:在深度学习模型的训练中,标注数据是不可或缺的。标注数据集不仅要涵盖模型应用场景,还需要保证标注格式与模型训练要求一致。
准备工作:

目标明确:根据应用场景收集原始图像,确保训练数据能够覆盖应用场景的多样性。
选择标注形式:目标检测、分割或关键点检测等,不同任务需要不同的标注形式。
选择标注工具:推荐使用X-AnyLabeling,特别是其Windows版本,便于新手使用。
使用X-AnyLabeling进行标注:

打开程序和导入数据:运行X-AnyLabeling并导入待标注图像和已有标注数据。
自动标注:利用Segment Anything模型(SAM)进行自动标注,显著提高标注效率。支持通过点选方式快速生成标注框。

手动标注:可以选择矩形框手动标注,适用于自动标注无法准确识别的场景。

导出标注结果:完成标注后,导出为YOLO等格式的数据文件,便于后续的模型训练。

工具优势:X-AnyLabelingCPU版本开箱即用,无需配置,支持多种标注格式的导入和导出,并提供AI辅助标注功能,极大地提高了标注效率。

  • 10
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值