如何使用 HumanSignal Label Studio 对自定义(图像)数据集进行标注

通过本地部署 Label Studio 并以可视化的形式对图像进行多边形标注,并最终导出为特定格式

由 Anawaert 于 2025-03-11 发布   

如何使用 HumanSignal Label Studio 对自定义(图像)数据集进行标注

前言

  这是一篇迟到的数据集标注博客文,原本是计划在去年年中的时候随那篇 如何配置Ultralytics - THU-MIG YOLOv10的环境 一同发布,但是因为种种原因最终导致文章写了一半然后废弃了。实际上,在 Anawaert 经手的往期工程项目中,大部分使用的是 Roboflow 这个平台进行在线标注,效果也还不错,并且导出相当方便,基本上就是傻瓜式的操作了。但可惜的是,Roboflow 现在对数据集的大小做出了严格的限制,因此那种 2000、3000 甚至上万的数据集就别想在 Roboflow 上免费进行托管和标注了。但显然,几百张的数据集并不能很好满足现代大部分计算机视觉深度学习算法的需求,过少的数据集往往会导致模型的过拟合,因此寻找可以标注大型数据集的(本地)标注软件就非常有必要了。

概述

  在常用的(本地)图像标注软件中,你大概率听过这些知名的软件:

  • LabelImg:这是一款由 HumanSignal 发行的开源图像标注软件,采用 PyQt 作为开发框架,支持 Windows/Linux/macOS 等多种操作系统。该软件相对而言历史比较久远,因而在传统的目标检测任务中应用较多,生态也比较健全,但是目前仓库已经被归档,因此无法获得更新。

  • labelme:这是一款由 Kentaro Wada 发行的开源图像标注软件,同样采用 PyQt 作为开发框架,该软件对多边形的标注支持较好,因而多用于语义分割或实例分割任务中,目前仓库还处于低活动状态。

  但是它们都有一些共同的问题:首先是界面比较老旧且功能都不是特别丰富,主要支持一些传统的视觉任务,比如说目标检测、多分类或者是简单的语义分割/实例分割;其次是它们对较新的网络模型的数据集制作支持度不佳,经常出现数据集转换出错的情况。

  而在前言中,我们也提到了 Roboflow,它的便利性和可拓展性的确不是 LabelImg 和 labelme 两款软件可以媲美的。那么,有没有像 Roboflow 一样标注和导出都很便捷,但是不用担心限额或者数据托管问题的软件呢,答案就是本文的主人公:Label Studio。

  Label Studio 是一款同样由 HumanSignal 开源发行的图像标注软件,它实际上是一个网站的前端,当使用本地部署时,在浏览器上的运行效果类似于 Roboflow 这样的在线标注网站,因此,接下来笔者将会在 Ubuntu 22.04.6 LTS 操作系统上,在 Python 3.10.12 环境中介绍 Label Studio 的安装、配置、数据导入、标注过程与数据导出。

安装

  Label Studio 的安装过程继承了 LabelImg 的简单风格,官方提供了三种主流的安装方式,分别是 Docker、pip 包管理器和 conda 包管理器。以笔者为例,在终端中使用 pip 包管理器安装的方式进行安装:

# bash
# 首先检查 Python 版本,需要 Python 3.8 及以上,使用 python 或 python3 命令
python3 --version
# 使用 pip 包管理器安装 Label Studio
pip install label-studio

Install Label Studio

  等待完成即可。需要注意的是截止目前(2025 年 3 月),Label Studio 会在您的当前 Python 环境中安装 NumPy 1.26,请注意系统中其它组件与 NumPy 建的依赖关系。经过笔者实测,NumPy 1.23.5 可以正常支持 Label Studio 的运行。

Installed Label Studio

环境变量配置

  实际上,Label Studio 还是对数据集图像的数量做了限制。笔者最早发现的时候觉得这比 Roboflow 还离谱 —— Label Studio 甚至将配额限制在了 100 张,这比给 OpenMV 用的模型都少。但实际上,通过配置环境变量,就能轻松解除这个限制,在终端中使用任何文本编辑器编辑当前用户的环境变量:

# bash
# 笔者此处使用 gedit 作为文本编辑器
gedit ~/.bashrc

  接着,在 .bashrc 中最后加入下面这行语句:

export DATA_UPLOAD_MAX_NUMBER_FILES=10000

Export Env Variable

  最后刷新环境变量,若终端中无错误报出,即说明环境变量导入成功:

source ~/.bashrc

Refresh Env Variable

启动 Label Studio 并创建新项目

  在终端中,运行下面的语句以启动 Label Studio:

label-studio start

Start Label Studio

  很快,系统中的浏览器弹了出来,并停留在这个界面:

Label Studio Login

  你可能会感到奇怪:怎么这软件还要登录的?不要担心,把 Label Studio 想成本地版的 Roboflow 就好了,我们先注册,点击下方的 Sign up 按钮进行注册即可。注册完毕后,即可登录 Label Studio:

Sign up

  当然,笔者此处已经创建过了一个 Label Studio 项目,所以下图中的主页或与各位有些不同。但是新建项目流程是一样的,点击右上角的 Create 按钮,创建一个新的 Label Studio 项目,在 Project Name 选项卡中,项目名及其描述可以自定义:

Main Page

Create New Project 1

  接下来就是导入图像数据。在上方选项卡中选择 Data Import,然后点击中央的蓝色区域,即可选择需要导入的图像,最后点击“打开”进行导入。以笔者为例,导入了用户目录下的 Temp 文件夹中的 10 张图像:

Create New Project Data Import

Create New Project Select Images

Created New Project Select Images

  最后,在上方选项卡中选择 Labeling Setup,然后在左边栏选择 Computer Vision,然后点击第一项“多边形的语义分割”。注意,本文以多边形标注作为标注示例,实际上传统目标检测及图像分类的标签配置方法与多边形标注类型,感兴趣的读者可以自行尝试:

Create New Project Labeling Setup

  最后的最后,就会进入下图所示的界面。在这里,我们可以定义自己的标签名称,为未来模型的输出提供一个人性化的标签名。以笔者为例,将原本的标签删掉了以后,在左侧输入框中输入红辣椒和绿辣椒对应的标签名,点击 Add 以加入标签名列表:

Create New Project Labeling Setup 2

Add Tags

Tags Added

  最后点击右上角 Save,即可进入正式标注页面:

Start Labeling

开始标注

  点击项目标注页面中的 Label All Tasks,开始对图像进行多边形标注:

Label All Tasks

  在跳转的新页面中,鼠标向下滚动,即可看到页面底下的两个刚才自定义的标签名。以笔者为例,当前图中的辣椒是青绿的线椒,所以点击“Green”,接着点击右边栏中的“放大”图标以放大图像:

Select Green Tag and Zoom In

  在放大的图像中用鼠标逐点绘制多边形,沿着辣椒的柄和果实的边缘进行绘制。若出现描点失误,可使用快捷键 Ctrl + Z 进行回退

Zoom In and Start Labeling

  最后,多边形应围绕辣椒一圈回到起点形成闭环,并且图中刚才的绘制的多边形区域将会使用标签名对应的颜色进行显示:

Zoom In and Start Labeling 2

  同理,再次点击下方的“Green”标签,将其它没有严重遮挡生长形态符合正常辣椒果实形态的辣椒依次使用该方法进行标注:

Zoom In and Label All Normal Objects

  该张图像标注完成后,点击右下角的 Submit 以提交本次标注结果。接着,页面会自动跳转至下一张图像标注页面,重复上述流程,直至所有图像标注完成:

Next Image to Label

All Finished

导出数据

  回到项目标注页面,点击右上角的 Export,在弹出的页面中选择 YOLO with Images,然后点击右下角 Export,浏览器将把导出的数据集下载至当前用户的“下载”文件夹。至此,我们成功地使用 Label Studio 制作了一个用于 Ultralytics YOLO 的实例分割数据集,未来即可使用这样的数据集进行模型的训练、验证及测试了。

Export Dataset

Select Export Format

Download Dataset

Dataset Preview

总结

  Label Studio 作为 LabelImg 的同门,功能性较先前的产品有了更大的提升,也的确更为易用且强大。从新建项目的菜单中就可以看出,Label Studio 想实现支持主流深度学习/机器学习任务的标注能力,而不仅仅在计算机视觉领域,因此,从现在开始学习这样一个“有野心”且好用的工具就非常有必要了。


  最后,附上一部分的多边形标注示例。标注时应遵守“标全而不标多”的原则,以辣椒为例,在果实/柄被叶片等非辣椒本体部位遮挡超过 50% 的情况应当舍弃;长相奇特明显为变异体的果实应当舍弃;果实本身腐烂或虫害严重情况应当舍弃;目标在图中过大时仅标注可辨识部分;过小时也应当舍弃……

Example 1

Example 2

Example 3

Example 4

Example 5

Example 6