1、数据标注格式

现在常用的目标检测数据格式其实有3种,一种是Pascal VOC格式,一种是COCO格式,最后一种是YOLO格式。数据标注格式对应训练框架的数据加载需求,例如:paddledetection、mmdetection支持COCO格式和Pascal VOC格式,yolo系列的目标检测框架则支持yolo格式的数据。

1.1.Pascal VOC格式

背景

Pascal VOC本身是一个竞赛,2005年开始,2012年最后一届。比赛的内容有物体分类,目标检测,物体分割,Human Layout,行为分类。其使用的数据集是Pascal VOC数据集,主要数据集是Pascal VOC2007和Pascal VOC2012。Pascal VOC数据集的组织形式我们称为Pascal VOC格式。

数据格式及数据示意

(1)Pascal VOC格式的数据由JPEGImages,Annotations,ImageSets/Main 三个文件夹组成。

(2)JPEGImages用于存放所有的图片; (3)Annotations中用于存放相应的标注文件(一张图片对应一个标注文件),通常为xml标注。注:在paddleseg框架中,做语义分割时,Annotations目录下存放的是png格式的图像标注; (4)ImageSets/Main中存放train.txt, val.txt, test.txt, trainval.txt (即对数据集的划分)。 (5)train.txt, val.txt, test.txt, trainval.txt 分别是指明了哪些图像用做训练集、验证集、测试集、训练验证集(训练集+验证集)。每个txt中,每一行都是一张图像的名字(无扩展名,如cat10086.jpg被选用为训练集,则train.txt中某一行就会是cat10086)

Xml中信息的格式如下图所示:

数据支持的框架

Mmdetection、paddledetection等主流目标检测框架

1.2.COCO格式

背景

COCO首先是是微软构建的一个目标检测大型基准数据集,其数据格式被称为coco格式。其支持检测、分割、关键点估计等任务。Coco数据集目前用的比较多的是COCO2017数据集,数据地址为COCO - Common Objects in Context (cocodataset.org)。 基本生成流程: 需要创建三个文件夹:train,val,annotations。其中,train和val分别存放训练图像和验证图像,annotations存放标注,不同于VOC一张图像对应一个标注文件,COCO的标注文件是一个子目录下的所有图像的标注都保存在一个json文件中(即数据集内所有数据的标签存在一个json文件中)。train2017下的所有图像对应一个instance_train.json, val下的所有图像对应一个instance_val.json 可以发现,如果直接标注成COCO格式,训练集、验证集必须在标注之前划分好。

数据格式及数据示意

后续补充

数据支持的框架

Mmdetection、paddledetection等主流目标检测框架

1.3.YOLO数据集格式

背景

YOLO数据集格式的出现主要是为了训练YOLO模型, ,因为可以通过修改模型的配置文件进行数据加载,唯一需要注意的是YOLO数据集的标注格式是将目标框的位置信息进行归一化处理(此处归一化指的是除以图片宽和高),

数据格式及数据示意

其文件格式没有固定的要求(通常情况下images存放原图;labels存放txt标签位置),基本数据格式如下图所示:

Txt标签的格式为,{目标类别id} {归一化后的目标中心点x坐标} {归一化后的目标中心点y坐标} {归一化后的目标框宽度w} {归一化后的目标框高度h}。与其他数据不同的是,yolo标签只有类别id,并无具体类别名称。此外,其以相对尺寸描述标注框的xywh信息,不受图像尺寸改变的影响。

数据支持的框架

Yolov5、yolov6、yolov7、yolov8等等yolo系列的目标检测框架

2、数据集标注工具

数据标注工具对应原始数据,通常数据标注工具所生成的标签文件与目标检测中的数据标注格式有所差异。目前常见的数据标注工具有:labelimg、labelme、anylabeling。

2.1 Labelimg

Labelimg是一款开源的数据标注工具,可以标注三种格式。其只能标注正矩形框数据,也就是说只能用于目标检测任务。该软件为python程序,需要在装有python环境的终端中执行安装与启动命令。

软件安装命令

进入装有python环境的终端,输入如下的命令: pip install labelimg -i https://pypi.tuna.tsinghua.edu.cn/simple

软件启动命令

labelimg 或 python -m labelimg

软件界面功能说明

软件界面如下图所示,在标注数据前需要先选择数据,然后点击Create RectBox。

其所标注的数据格式如下所示,与pascal voc格式严格保持一致。但需要自己划分数据集,形成txt文件。

2.2 labelme

Labelme 能够进行多种形式的图像数据标注(如:多边形,矩形,圆形,多段线,线段,点形式的标注 ),可用于目标检测,图像分割,等任务 。还可以对图像进行进行 flag 形式的标注(可用于图像分类 和 清理 任务)。Labelme 以 JSON 文件存储标注信息,不能直接应用于目标检测框架,需要自行编码转换。该软件为python程序,需要在装有python环境的终端中执行安装与启动命令。

软件安装命令

pip install labelme

软件启动命令

Labelme 或 python -m labelme

软件界面功能说明

软件界面如下图所示,在标注数据前需要先选择数据:

其标注的数据如下所示,为json文件,标注信息储存在shapes字段内(每一个元素对应一个标注信息,shape_type描述了标注的类型【多边形、矩形、线段】,label描述了标注的具体类别【人、车等物体类别】)。

2.3 anylabeling

anylabeling是一款基于深度学习模型的辅助标注软件,其支持多边形、矩形、圆、点、线等格式的数据标注。其辅助标注功能支持多边形标注(依赖SAM模型实现)、矩形框标注(依赖YOLO模型实现)。进行辅助标注时,要选择模型(软件会自动下载),运行模型时依赖onnxruntime库。其所生成的标注文件格式与labelme完全一样,为json格式,需要自行编程转换数据格式。

软件安装命令

pip install anylabeling

软件启动命令

anylabeling 或 python -m anylabeling.app

软件界面功能说明

进入软件默认手动标注,需要点击工具栏最底下的大脑才启动辅助标注功能。

其辅助标注功能的使用流程如下所示: 选择左侧的Brain按钮以激活自动标记。 从下拉菜单Model中选择Segment Anything Models类型的模型。模型精度和速度因模型而异。其中,Segment Anything Model (ViT-B)是最快的但精度不高。Segment Anything Model (ViT-H)是最慢和最准确的。Quant表示量化过的模型。第一次选择该模型时,要经过长时间的下载,请耐心等待。 使用自动分割标记工具标记对象。 +Point:添加一个属于对象的点。 -Point:移除一个你想从对象中排除的点。 +Rect:绘制一个包含对象的矩形。Segment Anything 将自动分割对象。 清除:清除所有自动分段标记。 完成对象(f):当完成当前标记后,及时按下快捷键f,输入标签名称并保存对象。 其所生成的json文件如下所示,与labelme完全一样。

参考链接

评论可见,请评论后查看内容,谢谢!!!评论后请刷新页面。