Github: github.com/CVHub520/X-…

简介

X-Anylabeling: 一款多SOTA深度学习模型集成的新一代自动标注工具

X-AnyLabeling 是一款全新的交互式主动标示东西,其依据AnyLabeling进行构建和二次开发,在此基础上扩展并支撑了许多的模型和功用,并凭借Segment AnythingYOLO等干流模型供给强大的 AI 支撑。无须任何复杂配置,下载即用,支撑自定义模型,极大提高用户标示功率!

AnyLabeling = LabelImg + Labelme + Improved UI + Auto-labeling

特性

目前第一版供给以下功用,后期计划参加多模态大模型,满意更广泛的需求:

  • 支撑多边形、矩形、圆形、直线和点的图画标示。
  • 支撑文本检测、辨认和KIE(要害信息提取)标示。
  • 支撑检测-分类级联模型进行细粒度分类。
  • 支撑一键人脸和要害点检测功用。
  • 支撑转换成标准的COCO-JSONVOC-XML以及YOLOv5-TXT文件格局。
  • 支撑PaddlePaddle、OpenMMLab、Pytorch-TIMM等干流深度学习结构。
  • 供给先进的检测器,包括YOLOv5YOLOv6YOLOv7YOLOv8YOLOX以及DETR系列模型。

X-Anylabeling: 一款多SOTA深度学习模型集成的新一代自动标注工具

X-Anylabeling: 一款多SOTA深度学习模型集成的新一代自动标注工具

X-Anylabeling: 一款多SOTA深度学习模型集成的新一代自动标注工具

装置

下载和运转可执行文件

整个装置及运用教程都很简单,目前已在Windows系统上编译成可执行软件,可直接在release页面直接下载运用。其他平台可依据以下指令自行打包即可:

  1. 装置 PyInstaller
pip install -r requirements-dev.txt
  1. 构建
bash build_executable.sh

请注意,在运转之前,请依据本地conda环境在anylabeling.spec文件中替换’pathex’。

  1. 移步至目录 dist/ 下检查输出。

源码编译

  1. 装置依靠包
pip install -r requirements.txt
  1. 生成资源
pyrcc5 -o anylabeling/resources/resources.py anylabeling/resources/resources.qrc
  1. 运转应用程序
python anylabeling/app.py

结构

添加模型推理是主动化符号使命的要害。AnyLabeling 的早期版别完结对 Segment Anything 模型的支撑。模型推理架构如下图所示:

X-Anylabeling: 一款多SOTA深度学习模型集成的新一代自动标注工具

AnyLabeling的架构中,LabelingWidget是任何功用的首要小部件。绘图区域由Canvas类处理。AutoLabelingWidget则作为主动符号功用和ModelManager的首要部件用于管理和运转 AI 模型。

SAM

SAM 是 Meta 的新细分模型。运用 11M 图画和 1B 切割掩码进行练习,它能够在不针对特定目标进行练习的情况下切割图画中的目标。出于这个原因,Segment Anything 是主动符号的一个很好的候选框,即使是从未见过的新目标。

优化点:

  1. 由于Encoder的核算是需求时刻的,所以咱们能够把结果缓存起来,也能够对Encoder在以后的图片上做预核算。这将削减用户等待编码器运转的时刻。

  2. 关于缓存,添加了一个 LRU 缓存来保存编码器的结果。图画保存在缓存中,键是标签途径。当缓存中存在图画嵌入时,不会再次运转编码器,这样能够节约很多时刻。缓存大小默以为 10 张图画。

  3. 关于预核算,创立一个线程来为下一个图画运转编码器。当加载新图画时,它将和下一张图画一同发送到作业线程进行编码器核算。之后,image embedding会缓存到上面的LRU缓存中。假如图画已经在缓存中,作业线程将跳过它。

运用过程

  1. 挑选左侧的Brain按钮以激活主动符号。
  2. 从下拉菜单Model中挑选Segment Anything Models类型的模型。模型精度和速度因模型而异。其间,Segment Anything Model (ViT-B)是最快的但精度不高。Segment Anything Model (ViT-H)是最慢和最精确的。Quant表示量化过的模型。
  3. 运用主动切割符号东西符号目标。
  • +Point:添加一个归于目标的点。
  • -Point:移除一个你想从目标中扫除的点。
  • +Rect:绘制一个包含目标的矩形。Segment Anything 将主动切割目标。
  • 清除:清除一切主动分段符号。
  • 完结目标(f):当完结当时符号后,咱们能够及时按下快捷键f,输入标签称号并保存目标。

注意事项

  • X-AnyLabeling 在第一次运转任何模型时,需求从服务器下载模型。因此,或许需求一段时刻,这具体取决于本地的网络速度。
  • 第一次 AI 推理也需求时刻。请耐心等待。
  • 后台使命正在运转以缓存 Segment Anything 模型的“编码器”。因此,在接下来的图画中主动切割作业需求时刻会缩短,无须担心。

集成方式

Segment Anything Model 分为两部分:一个很heavy的编码器和一个lightweight解码器。编码器从输入图画中提取图画嵌入。依据嵌入和输入提示(点、框、掩码),解码器生成输出掩码。解码器能够在单掩码或多掩码形式下运转。

X-Anylabeling: 一款多SOTA深度学习模型集成的新一代自动标注工具

在演示中,Meta 在服务器中运转编码器,而解码器能够在用户的浏览器中实时运转,如此一来用户便能够在其间输入点和框并立即接纳输出。在本项目中,咱们还为每个图画只运转一次编码器。之后,依据用户提示的变化(点、框),运转解码器以生成输出掩码。项目添加了后处理过程来查找概括并生成用于符号的形状(多边形、矩形等)。

文本 OCR 标签

文本 OCR 标签是许多标示项目中的一项常见使命,但惋惜的是在 LabelmeLabelImg 中仍然没有得到很好的支撑。AnyLabeling 中完美支撑了这一项新功用。

X-Anylabeling: 一款多SOTA深度学习模型集成的新一代自动标注工具

第一个版别支撑以下标签东西:

图画文本标签

用户能够切换到修正形式并更新图画的文本——能够是图画称号或图画描绘。

文本检测标签

当用户创立新目标并切换到修正形式时,能够更新目标的文本。

文本分组

幻想一下,当运用 KIE(键信息提取)时,需求将文本分组到不同的字段中,包含标题和值。在这种情况下,你能够运用文本分组功用。当创立一个新目标时,咱们同样能够经过挑选它们并按G将其与其他目标组合在一同。分组的目标将用相同的色彩符号。当然,也能够按快捷键U撤销组合。

注:标示的文本和分组信息将与其他标示保存在同一个 JSON 文件中。文本将保存在text目标的字段中,组信息将保存在字段中group_id

检测分类模型

这一块比较比较简单。咱们首要讲解下如何加载自定义模型,这将使你能够运用自己的模型进行主动符号。假如你有一个已依据自己的数据练习过的自定义模型并期望将其用于主动符号,这将十分有用。此外,还能够创立一个标签 – 练习循环来逐步改进私有模型。一般来说,笔者建议在项目初期阶段能够依据 SAM 利用点或矩阵提示快速完结数据标示,等后期达到必定数据量练习完一个初版模型后再依据检测或检测+分类模型进行一键主动标示。

准备模型文件

一般来说,咱们首要需求将练习好的模型一致转换成onnx文件格局,以下是第一版支撑的版别分支:

yolov5-v6.0+
yolov6-v0.4.0
yolov6Face-v0.4.0
yolov7-main
yolov8-main
yolox-main

假如你是依据以上分支练习并转换得到的onnx文件,能够直接进行后续过程,否则或许需求修正源码以进行相应的适配。

创立配置文件

config.yaml在与模型相同的文件夹中创立 YAML 格局的模型配置文件。配置文件需求遵从以下格局:

  • rtdetr_r50.yaml(目标检测)
type: rtdetr
name: rtdetr_r50-r20230520
display_name: RT-DETR (ResNet50) PaddleDetection
model_path: https://github.com/CVHub520/X-AnyLabeling/releases/download/v0.1.0/rtdetr_r50vd_6x_coco.onnx
input_width: 640
input_height: 640
score_threshold: 0.45
classes:
  - person
  - bicycle
  - car
  ...
  • yolov6lite_s_face.yaml(人脸及要害点检测)
type: yolov6_face
name: yolov6lite_s_face-r20230520
display_name: YOLOv6Lite_s-Face MeiTuan
model_path: https://github.com/CVHub520/X-AnyLabeling/releases/download/v0.1.0/yolov6lite_s_face.onnx
input_width: 320
input_height: 320
stride: 64
nms_threshold: 0.45
confidence_threshold: 0.4
classes:
  - face
five_key_points_classes:
  - left_eye
  - right_eye
  - nost_tip
  - left_mouth_corner
  - right_mouth_corner
  • yolov5s_resnet50.yaml(检测+分类级联)
type: yolov5_cls
name: yolov5s_resnet50-r20230520
display_name: YOLOv5s-ResNet50
det_model_path: https://github.com/CVHub520/X-AnyLabeling/releases/download/v0.1.0/yolov5s.onnx
cls_model_path: https://github.com/CVHub520/X-AnyLabeling/releases/download/v0.1.0/resnet50.onnx
det_input_width: 640
det_input_height: 640
cls_input_width: 224
cls_input_height: 224
cls_score_threshold: 0.5
stride: 32
nms_threshold: 0.45
confidence_threshold: 0.45
det_classes:
  - person
  - bicycle
  - car
  ...
cls_classes:
  0: tench
  1: goldfish
  2: great white shark
  3: tiger shark

需求注意的是,这儿检测+分类仅供给样例模板给我们,模型yolov5resnet中涉及到的类别分别是cocoimagenet上预练习得到的权重,我们需求依据本身使命重新练习新的模型进行替换。

敞开主动标示

  1. 新建一个文件夹,将上述转换好的onnx权重和对应的配置文件存放到同一目录下。(非必须,但方便管理)

  2. 将 yaml 文件中 model_path 字段设置为 onnx 模型所在的绝对途径。

  3. 在主动符号形式下,从主动下拉列表中挑选加载自定义模型,如图所示:

X-Anylabeling: 一款多SOTA深度学习模型集成的新一代自动标注工具

  1. 挑选相应的配置文件。

  2. 点击“运转”或按下快捷键i是实现一键标示功用。

X-Anylabeling: 一款多SOTA深度学习模型集成的新一代自动标注工具

总结

本文首要为我们介绍一款新颖实用的依据交互式的全主动标示东西——X-AnyLabeling,更多功用和特性可直接下载体验!

源码链接:github.com/CVHub520/X-…

视频教程:www.bilibili.com/video/BV1AV…