Label Studio结合YOLO模型实现数据集自动标注

背景

最近在尝试做图像目标检测相关的模型训练工作,但是如果想要实现一个模型的训练,数据集是至关重要,而目标检测数据集的制作相对于图像分类要复杂一些,因此需要一个简单易用的标注工具,对比了网上的一堆工具之后,最后选择了label studio,主要是一下原因:

  • 数据安全性:期望标注的数据可以只在自己内部使用,不希望暴露在外网
  • 便捷性:可以通过部署一个网页服务来实现标注,这样后面也可以方便其他同学一起标注
  • 自动/半自动标注:可以结合训练的模型来辅助标注实现自动/半自动标注,也可以可视化和验证训练模型的目标检测效果。 最后发现label studio是满足上面几个诉求,因此搭建了Label Studio标注工具,并且结合YOLO模型实现了数据集的自动/半自动标注,现将整个过程记录。

环境搭建

基本环境搭建

css 复制代码
> conda create -n label-studio python=3.10
> conda activate label-studio

前端服务

shell 复制代码
> cd /data/code/github/label-studio
# Run database migrations
> python label_studio/manage.py migrate
> python label_studio/manage.py collectstatic
# Start the server in development mode at http://localhost:8080
python label_studio/manage.py runserver
> python label_studio/server.py --host=0.0.0.0 --port=8081

数据保存路径如下:

javascript 复制代码
~/.local/share/label-studio/

如下所示

yaml 复制代码
(label-studio) # ls -lrt ~/.local/share/label-studio/
total 1212
drwxr-xr-x 2 xxxx xxxx    4096 Oct 20 10:36 test_data
drwxr-xr-x 4 xxxx xxxx    4096 Oct 20 11:02 media
drwxr-xr-x 2 xxxx xxxx    4096 Oct 20 12:05 export
-rw-r--r-- 1 xxxx xxxx 1228800 Oct 20 15:30 label_studio.sqlite3
  • 项目界面

  • 新建项目

  • 基本设置

Labeling Interface中可以设置标注的物体类型

  • 后端推理

Machine Learning可以设置后端推理服务来实现自动化标注,可以参考label-studio-ml-backend,如果使用了Yolov8来做检测的话,可以参考label-studio-yolov8-backend;如果结合SAM来做检测的话,可以参考分割一切?手把手教你部署SAM+LabelStudio实现自动标注

Retrieve predictions when loading a task automatically:会自动将导入的图片去调用预测服务

  • 最终效果

下面的数字是对应类型的快捷键

可以清理标注结果

  • Delete Tasks:删除图片和任务
  • Delete Annotations:删除手动标注结果
  • Delete Predictions:删除预测结果,需要接入了后端预测服务,如果对于预测结果不满意,希望重新预测的话,可以删除后,重新生成预测结果。

标注的数据code如下:

json 复制代码
{
  "id": 50,
  "data": {
    "image": "/data/upload/7/437ac54a-csm_eb24002_58f4fb61dd.jpg"
  },
  "annotations": [
    {
      "id": 5,
      "created_username": " xxxx@gmail.com, 2",
      "created_ago": "0 minutes",
      "completed_by": {
        "id": 2,
        "first_name": "",
        "last_name": "",
        "avatar": null,
        "email": "xxxxx@gmail.com",
        "initials": "li"
      },
      "result": [
        {
          "original_width": 1366,
          "original_height": 768,
          "image_rotation": 0,
          "value": {
            "x": 10.10689990281827,
            "y": 27.483448736637506,
            "width": 23.420796890184647,
            "height": 37.68170958859735,
            "rotation": 0,
            "rectanglelabels": [
              "Car"
            ]
          },
          "id": "8oMV4M5avz",
          "from_name": "label",
          "to_name": "image",
          "type": "rectanglelabels",
          "origin": "manual"
        }
      ],
      "was_cancelled": false,
      "ground_truth": false,
      "created_at": "2023-10-22T09:21:27.660411Z",
      "updated_at": "2023-10-22T09:21:27.660435Z",
      "draft_created_at": "2023-10-22T09:19:22.672990Z",
      "lead_time": 114.60199999999999,
      "import_id": null,
      "last_action": null,
      "task": 50,
      "project": 7,
      "updated_by": 2,
      "parent_prediction": null,
      "parent_annotation": null,
      "last_created_by": null
    }
  ],
  "predictions": []
}

后端预测服务

可以部署后端预测服务来实现自动标注

shell 复制代码
> git clone https://github.com/HumanSignal/label-studio-ml-backend.git
> cd label-studio-ui-element-backend
> pip install -e .
# 环境验证
> label-studio-ml create env_verify
> label-studio-ml start env_verify -p 9091
  • 创建正式环境
css 复制代码
> label-studio-ml create ui_element
> label-studio-ml start ui_element -p 9091
> nohup label-studio-ml start ui_element -p 9091 > ./ui_element/label.log 2>&1 &
> nohup label-studio-ml start ui_element_sam -p 9092 > ./ui_element_sam/label.log 2>&1 &

导出标注结果

会导出来所有的标注结果,并且可以导出来不同的标注格式,比如用作YOLO训练的话,一般可以使用YOLO格式,当然也还有COCOVOC数据格式

目前还没法只导出来选中图片的标注结果。 比如导出来的YOLO数据格式如下:

  • images:标注的图片

  • labels:标注数据,使用txt后缀保存,每一行代表一条标注数据,包含5列

    • 第1列:标注的类别,和下面的classex.txt中的类别索引保持一致

    • 第2列:标注的矩形框的中心点x坐标(经过了归一化处理:坐标点/图片宽度)

    • 第3列:标注的矩形框的中心点y坐标(经过了归一化处理:坐标点/图片高度)

    • 第4列:标注的矩形框的宽度(经过了归一化处理:宽度/图片宽度)

    • 第5列:标注的矩形框的高度(经过了归一化处理:高度/图片高度)

      0 0.7914317925591883 0.3476714942329373 0.3066516347237879 0.1781053970456451
      0 0.7931228861330326 0.5379758910762293 0.30552423900789166 0.16834619720752755
      0 0.7931228861330328 0.7221807880206979 0.30777903043968435 0.1756655970861157

  • classes.txt: 保存标注的类型列表

参考

很详细的部署流程,有实现模型的自动标注到模型训练的闭环流程

官方文档,有比较详细的教程,让你如何实现一个自己的后端预测服务

相关推荐
radient几秒前
属于Agent的课本 - RAG
人工智能·后端·程序员
万粉变现经纪人1 分钟前
如何解决 pip install -r requirements.txt 子目录可编辑安装缺少 pyproject.toml 问题
开发语言·python·scrapy·beautifulsoup·scikit-learn·matplotlib·pip
程序员阿达4 分钟前
开题报告之基于SpringBoot框架的路面故障信息上报系统设计与实现
java·spring boot·后端
用户3421674905526 分钟前
鱼皮模拟面试,吊打面试官
后端
Blossom.1187 分钟前
把 AI“缝”进布里:生成式编织神经网络让布料自带摄像头
人工智能·python·单片机·深度学习·神经网络·目标检测·机器学习
程序猿小D14 分钟前
【完整源码+数据集+部署教程】【零售和消费品&存货】价格标签检测系统源码&数据集全套:改进yolo11-RFAConv
前端·yolo·计算机视觉·目标跟踪·数据集·yolo11·价格标签检测系统源码
滑水滑成滑头17 分钟前
**点云处理:发散创新,探索前沿技术**随着科技的飞速发展,点云处理技术在计算机视觉、自动驾驶、虚拟现实等领域的应用愈发广
java·python·科技·计算机视觉·自动驾驶
gc_229944 分钟前
学习Python中Selenium模块的基本用法(19:操作下拉框)
python·selenium
我是天龙_绍1 小时前
java 中的 Lombok
后端
hwangsy1 小时前
SpringCloud gateway偶发creationTime key must not be null
后端