今天,我们将重点讲解 LabelMe,介绍其安装、标注流程及数据导出方法,并结合版面标注实例,展示如何建立标签和导出数据,并最终实现与飞桨模型的适配。这将帮助大家更好地理解如何利用 LabelMe 高效构建数据集,为后续模型训练打下坚实基础。
一、Labelme全面介绍
LabelMe 是由麻省理工学院(MIT)计算机科学与人工智能实验室(CSAIL)开发的强大开源图像标注工具,广泛应用于计算机视觉任务的数据标注。它支持多种标注类型,包括边界框、多边形、线段、关键点等,帮助用户高效地构建高质量的数据集。
1、Labelme的安装与使用
- 使用pip安装:这是推荐的安装方式,只需在命令行中输入 ‘pip install labelme’ 即可。
- 使用Anaconda安装:首先创建一个新的Python环境,然后激活该环境并安装Labelme。具体命令如下:
conda create --name=labelme python=3
conda activate labelme
pip install labelme
3. 从源码安装:如果需要进行二次开发或者希望获取最新的代码,可以从Labelme的GitHub仓库克隆代码并进行安装。具体步骤为:
git clone https://github.com/labelmeai/labelme
cd labelme
pip install -e .
无论选择哪种安装,安装完成后,可以通过命令行输入**labelme
启动Labelme的图形界面。**
2、Labelme的功能与标注方式
Labelme支持多种标注方式,包括但不限于多边形标注、矩形标注、圆形标注、线条标注和点标注。这些标注方式可以满足不同应用场景的需求。
- 多边形标注:适用于标注复杂的形状和轮廓,如人形、图章等。
- 矩形标注:适用于标注简单的矩形区域,如车辆、建筑物等。
- 圆形标注:适用于标注圆形物体,如车轮、果实等。
- 线条标注:适用于标注路径、轨迹等线性结构。
- 点标注:适用于标注关键点、特征点等。
此外,Labelme还支持图像级别标注,可以对整张图像进行分类标注。同时,Labelme还提供了自定义界面功能,用户可以根据需求预定义标签、设置自动保存等,实现界面定制。
3、能标注的场景
Labelme广泛应用于各种计算机视觉项目中,包括但不限于:
- 自动驾驶:标注道路、车辆、行人等目标,为自动驾驶系统提供训练数据。
- 医疗影像分析:标注病变区域、器官轮廓等,辅助医生进行诊断。
- 遥感图像处理:标注地物、建筑等,为遥感图像分析提供数据支持。
- 工业检测:标注产品缺陷、零件位置等,用于质量控制和故障预测。
- 文档解析:版面标注,用于对PDF、图片的结构化解析。
Labelme还支持对视频进行逐帧标注,适用于需要处理视频数据的场景。
4、标注结果的导出与格式转换
Labelme支持导出多种数据格式,如JSON、COCO、VOC等,方便与其他软件和框架进行集成和互操作。
需要注意的是,虽然Labelme本身不直接支持边界框标注,但可以通过多边形等标注方式间接实现目标检测数据集的标注。此外,对于特定的模型训练需求,可能需要进行数据格式的转换。例如,YOLO模型需要特定的标签格式,可以通过编写脚本将JSON格式的标注数据转换为YOLO模型可以解析的标签格式。
适配飞浆平台需要将Labelme标注版面数据使用工具类转换为COCO格式。
二、Labelme实际操作
下面我们就以版面标注为例,讲解一下Labelme标注版面训练数据的方法。
1、建立版面类别
一个中文文档版面基本类别至少要包含以下8个:
Text,正文
Title,标题
Figure,图片
Figure caption,图片标题
Table,表格
Table caption,表格标题
Header,页眉
Footer,页脚
如果你所在的行业文档中有更丰富的分析要求,并且文档中会出现除基础类别以外的类别,那你可以根据需要添加类别。
例如:
论文类文档,通常会添加“引用”类别和“公式”类别
- 引用,Reference
- 公式,Equation
2、选择合适的标注框进行标注
一般文档版面标注,我们会使用矩形框、正方形框、多边形框进行标注,下图是使用矩形框标注的示例,我们可以在图中看到几个区域,标注区域、标签列表、多边形标签。
其中,标签列表就是版面的分类,多边形标签就是当前这页文档所有标注后的类别,当前这页我标注了3个Title、2个Text、1个Header、1个Table、1个Table caption 。
标注完保存后,我们会在图片目录看到一个与图片文件同名的json文件,如下图所示:
选取其中一个图片,查看JSON文件内容如下:
{
"version": "5.5.0",
"flags": {},
"shapes": [
{
"label": "Header",
"points": [
[
529.2301587301587,
89.61904761904768
],
[
657.8015873015873,
105.49206349206355
]
],
"group_id": null,
"description": "",
"shape_type": "rectangle",
"flags": {},
"mask": null
},
{
"label": "Text",
"points": [
[
130.02380952380955,
155.49206349206355
],
[
1063.357142857143,
204.69841269841277
]
],
"group_id": null,
"description": "",
"shape_type": "rectangle",
"flags": {},
"mask": null
},
{
"label": "Title",
"points": [
[
168.91269841269846,
211.8412698412699
],
[
326.05555555555554,
231.68253968253975
]
],
"group_id": null,
"description": "",
"shape_type": "rectangle",
"flags": {},
"mask": null
},
{
"label": "Text",
"points": [
[
127.6428571428572,
237.2380952380953
],
[
1064.9444444444446,
315.01587301587307
]
],
"group_id": null,
"description": "",
"shape_type": "rectangle",
"flags": {},
"mask": null
},
{
"label": "Title",
"points": [
[
169.70634920634924,
320.5714285714286
],
[
283.9920634920635,
340.4126984126985
]
],
"group_id": null,
"description": "",
"shape_type": "rectangle",
"flags": {},
"mask": null
},
{
"label": "Text",
"points": [
[
126.84920634920636,
346.7619047619048
],
[
1064.1507936507937,
503.904761904762
]
],
"group_id": null,
"description": "",
"shape_type": "rectangle",
"flags": {},
"mask": null
},
{
"label": "Title",
"points": [
[
130.81746031746033,
542.0
],
[
213.35714285714286,
565.8095238095239
]
],
"group_id": null,
"description": "",
"shape_type": "rectangle",
"flags": {},
"mask": null
},
{
"label": "Text",
"points": [
[
127.6428571428572,
576.1269841269841
],
[
283.9920634920635,
598.3492063492064
]
],
"group_id": null,
"description": "",
"shape_type": "rectangle",
"flags": {},
"mask": null
},
{
"label": "Title",
"points": [
[
126.84920634920636,
635.6507936507936
],
[
1013.3571428571428,
662.6349206349206
]
],
"group_id": null,
"description": "",
"shape_type": "rectangle",
"flags": {},
"mask": null
},
{
"label": "Text",
"points": [
[
128.43650793650798,
669.7777777777778
],
[
285.57936507936506,
693.5873015873016
]
],
"group_id": null,
"description": "",
"shape_type": "rectangle",
"flags": {},
"mask": null
},
{
"label": "Footer",
"points": [
[
563.3571428571429,
1564.2222222222222
],
[
626.0555555555555,
1584.857142857143
]
],
"group_id": null,
"description": "",
"shape_type": "rectangle",
"flags": {},
"mask": null
}
],
"imagePath": "train_21.jpg",
"imageData": null,
"imageHeight": 1684,
"imageWidth": 1191
}
JSON文件核心内容如下:
- label, 表示分类
- points,表示左上角坐标和标注框的宽、高,也就是{x,y,w,h}的表示方式。
3、将JSON数据转换为COCO格式
使用labelme标注的版面训练集采用的JSON格式存储,需要转换为飞浆支持的COCO格式进行模型训练。
执行以下命令实现转换:
# train
python3 labelme2coco.py CDLA_dir/train train_save_path --labels labels.txt
# val
python3 labelme2coco.py CDLA_dir/val val_save_path --labels labels.txt
- CDLA_dir/train,为你的标注目录,里面是你的标注图片和JSON文件
- train_save_path,为转换后的的训练集存储地址
- –labels 是扩展参数,后面跟着labels.txt分类数据字典。
labels.txt内容如下:
Text
Title
Figure
Figure caption
Table
Table caption
Header
Footer
Reference
Equation
COCO数据结构介绍:
{
"images": [{
"file_name": "a9336d1f-train_5012.jpg",
"height": 601,
"width": 792,
"id": 0
}],
"annotations": [{
"id": 0,
"image_id": 0,
"category_id": 4,
"segmentation": [[528.0, 87.0, 658.0, 87.0, 658.0, 106.0, 528.0, 106.0]],
"bbox": [528.0, 87.0, 131.0, 20.0],
"ignore": 0,
"iscrowd": 0,
"area": 2620.0
}],
"categories": [
{"id": 0, "name": "Equation"},
{"id": 1, "name": "Figure"},
{"id": 2, "name": "Figure caption"},
{"id": 3, "name": "Footer"},
{"id": 4, "name": "Header"},
{"id": 5, "name": "Reference"},
{"id": 6, "name": "Table"},
{"id": 7, "name": "Table caption"},
{"id": 8, "name": "Text"},
{"id": 9, "name": "Title"}
]
}
标注格式包含以下信息:
info,表示标注文件info。
images,表示标注文件中图像信息列表,每个元素是一张图像的信息。如下为其中一张图像的信息:
file_name,表示目标图片的名称
height,表示目标图片的高度。
width,表示目标图片的宽度。
id,表示目标图片的id。
annotations,表示标注文件中目标物体的标注信息列表,每个元素是一个目标物体的标注信息。如下为其中一个目标物体的标注信息:
segmentation,表示目标物体的分割信息。
area,表示目标物体的面积。
iscrowd,表示目标物体是否为密集型,0为非密集,1为密集。
image_id,表示目标物体所属的图像id。
bbox,表示目标物体的边界框,格式为[x1,y1,w,h],此处为左上角坐标和宽高。
category_id,表示目标物体的类别id。
id,表示目标图片的id。
ignore, 表示目标物体是否为忽略的,0为否,1为是。
categories,版面数据字典
三、模型训练
转换成COCO的格式后,目录结构如下:
-rw-r--r-- 1 root root 1.2M Aug 31 03:54 annotations.json
drwxr-xr-x 2 root root 20K Aug 31 03:54 JPEGImages/
- annotations.json,为转化后的标注文件,格式参考[COCO数据结构介绍]
- JPEGImages/存放图片的目录
按照飞浆要求将转换后的标注文件与图片目录拷贝到相应的开发套件内,使用训练命令,即可完成标注文件的训练。
重点注意:训练集与验证集一定要使用同一个标注工具标注,保证导出后的标注文件格式中categories字典”数量“ 与 ”顺序“ 是一致的。
今天我们详细讲解了如何使用 LabelMe 进行版面标注,展示了它操作简便、易于上手的特点。LabelMe 强大的标注功能为各种复杂的视觉任务提供了良好的支持。
四、最后分享
AI大模型作为人工智能领域的重要技术突破,正成为推动各行各业创新和转型的关键力量。抓住AI大模型的风口,掌握AI大模型的知识和技能将变得越来越重要。
学习AI大模型是一个系统的过程,需要从基础开始,逐步深入到更高级的技术。
这里给大家精心整理了一份
全面的AI大模型学习资源
,包括:AI大模型全套学习路线图(从入门到实战)、精品AI大模型学习书籍手册、视频教程、实战学习、面试题等,资料免费分享
!
1. 成长路线图&学习规划
要学习一门新的技术,作为新手一定要先学习成长路线图,方向不对,努力白费。
这里,我们为新手和想要进一步提升的专业人士准备了一份详细的学习成长路线图和规划。可以说是最科学最系统的学习成长路线。
2. 大模型经典PDF书籍
书籍和学习文档资料是学习大模型过程中必不可少的,我们精选了一系列深入探讨大模型技术的书籍和学习文档,它们由领域内的顶尖专家撰写,内容全面、深入、详尽,为你学习大模型提供坚实的理论基础。(书籍含电子版PDF)
3. 大模型视频教程
对于很多自学或者没有基础的同学来说,书籍这些纯文字类的学习教材会觉得比较晦涩难以理解,因此,我们提供了丰富的大模型视频教程,以动态、形象的方式展示技术概念,帮助你更快、更轻松地掌握核心知识。
4. 2024行业报告
行业分析主要包括对不同行业的现状、趋势、问题、机会等进行系统地调研和评估,以了解哪些行业更适合引入大模型的技术和应用,以及在哪些方面可以发挥大模型的优势。
5. 大模型项目实战
学以致用 ,当你的理论知识积累到一定程度,就需要通过项目实战,在实际操作中检验和巩固你所学到的知识,同时为你找工作和职业发展打下坚实的基础。
6. 大模型面试题
面试不仅是技术的较量,更需要充分的准备。
在你已经掌握了大模型技术之后,就需要开始准备面试,我们将提供精心整理的大模型面试题库,涵盖当前面试中可能遇到的各种技术问题,让你在面试中游刃有余。
全套的AI大模型学习资源已经整理打包,有需要的小伙伴可以
微信扫描下方CSDN官方认证二维码
,免费领取【保证100%免费
】