Label Studio+Yolov5 实现目标检测预标注(一)

政采云技术团队.png

余笙.png

引言

目标检测作为机器学习的热门方向,广泛应用于视频监控和工业检测等诸多领域。想要训练出一个效果不错的模型通常需要大量的标记样本,其中人工标记样本是常用的方法。人工标记样本需要耗费大量时间,并且在一个样本存在多个检测目标时容易出现漏标的现象。因此,我们通过结合 Label Studio 标注平台和 Yolov5 目标检测模型来实现半自动标注,从而节省人力成本并且提升标记效果。

一.简介

Label Studio

Label Studio 是一个开源的数据标注平台, 它支持标记音频、文本、图像、视频和时间序列等数据类型,并导出为各种模型格式。它可以支持多人同时在线标注,并且支持机器学习模型作为后端实现预标注。

640.png

Yolov5

YOLO 是 “You only look once” 的首字母缩写词,是一种将图像划分为网格系统的对象检测算法。 网格中的每个单元都负责检测自身内部的对象。由于其速度和准确性,YOLO 是最著名的目标检测算法之一。Yolov5 是在 COCO 数据集上预训练的一系列对象检测架构和模型。Yolov5 各种各种模型性能如下图所示。

640 (1).png

二.环境安装配置

Label Studio 安装

Label Studio 有多种安装方式,详情可见github.com/heartexlabs… 。我们选择 pip 安装的方法,具体如下:

# Requires Python >=3.7 <=3.9
pip install label-studio

# Start the server at http://localhost:8080
label-studio

通过 pip 方式安装好 Label Studio 包后,在终端输入 label-studio 来启动服务,端口默认为 8080。启动成功后,可以打开Label Studio 标注平台,如下图所示。

640 (2).png

Yolov5 安装

yolov5 的 GitHub 地址为github.com/ultralytics…。安装方式如下:

git clone https://github.com/ultralytics/yolov5  # clone
cd yolov5
pip install -r requirements.txt  # install

Label Studio ML 安装

Label Studio ML 后端是一个 SDK,其功能是包装机器学习代码并将其转换为 Web 服务器。Label Studio ML 的 Github 地址为github.com/heartexlabs… 。具体安装方式如下:

git clone https://github.com/heartexlabs/label-studio-ml-backend  
cd label-studio-ml-backend

# Install label-studio-ml and its dependencies
pip install -U -e .

# Install example dependencies
pip install -r label_studio_ml/examples/requirements.txt

三.Label Studio 项目创建和管理

  1. 点击 Create 创建一个新的项目。

640 (3).png

  1. 选择 Project Name 填写项目名称和描述。

640 (4).png

  1. 选择 Data Import 上传准备标注的图片样本。

640 (5).png

  1. 选择 Labeling Setup 并选择目标检测标注模版 Object Derection。

640 (6).png

四.使用 Yolov5 训练自己的模型

Yolov5 的训练脚本如下所示。其中 --data 为数据集配置,--cfg 为模型超参数配置,接下来将具体介绍如何修改配置文件来训练自己的模型。

python train.py --data coco.yaml --cfg yolov5n.yaml --weights '' --batch-size 128
                                       yolov5s                                64
                                       yolov5m                                40
                                       yolov5l                                24
                                       yolov5x                                16

coco.yaml 修改

Yolov5 支持多种数据集格式,我们以 coco 数据集格式为例。

# YOLOv5 🚀 by Ultralytics, GPL-3.0 license
# COCO 2017 dataset http://cocodataset.org by Microsoft
# Example usage: python train.py --data coco.yaml
# parent
# ├── yolov5
# └── datasets
#     └── coco  ← downloads here (20.1 GB)


# Train/val/test sets as 1) dir: path/to/imgs, 2) file: path/to/imgs.txt, or 3) list: [path/to/imgs1, path/to/imgs2, ..]
path: ../datasets/coco  # dataset root dir
train: train2017.txt  # train images (relative to 'path') 118287 images
val: val2017.txt  # val images (relative to 'path') 5000 images
test: test-dev2017.txt  # 20288 of 40670 images, submit to https://competitions.codalab.org/competitions/20794

# Classes
nc: 80  # number of classes
names: ['person', 'bicycle', 'car', 'motorcycle', 'airplane', 'bus', 'train', 'truck', 'boat', 'traffic light',
        'fire hydrant', 'stop sign', 'parking meter', 'bench', 'bird', 'cat', 'dog', 'horse', 'sheep', 'cow',
        'elephant', 'bear', 'zebra', 'giraffe', 'backpack', 'umbrella', 'handbag', 'tie', 'suitcase', 'frisbee',
        'skis', 'snowboard', 'sports ball', 'kite', 'baseball bat', 'baseball glove', 'skateboard', 'surfboard',
        'tennis racket', 'bottle', 'wine glass', 'cup', 'fork', 'knife', 'spoon', 'bowl', 'banana', 'apple',
        'sandwich', 'orange', 'broccoli', 'carrot', 'hot dog', 'pizza', 'donut', 'cake', 'chair', 'couch',
        'potted plant', 'bed', 'dining table', 'toilet', 'tv', 'laptop', 'mouse', 'remote', 'keyboard', 'cell phone',
        'microwave', 'oven', 'toaster', 'sink', 'refrigerator', 'book', 'clock', 'vase', 'scissors', 'teddy bear',
        'hair drier', 'toothbrush']  # class names
path需要更改为自己数据集的根目录,train、val和test分别为训练集、验证集和测试集的label位置。nc需要修改为自己数据集分类的数量,names需要修改成自己数据集种类的名字。

yolov5n.yaml 修改

yolov5n.yaml 只需要更改 nc 为自己数据集类别的个数。

# YOLOv5 🚀 by Ultralytics, GPL-3.0 license

# Parameters
nc: 80  # number of classes
depth_multiple: 0.33  # model depth multiple
width_multiple: 0.25  # layer channel multiple
anchors:
  - [10,13, 16,30, 33,23]  # P3/8
  - [30,61, 62,45, 59,119]  # P4/16
  - [116,90, 156,198, 373,326]  # P5/32

# YOLOv5 v6.0 backbone
backbone:
  # [from, number, module, args]
  [[-1, 1, Conv, [64, 6, 2, 2]],  # 0-P1/2
   [-1, 1, Conv, [128, 3, 2]],  # 1-P2/4
   [-1, 3, C3, [128]],
   [-1, 1, Conv, [256, 3, 2]],  # 3-P3/8
   [-1, 6, C3, [256]],
   [-1, 1, Conv, [512, 3, 2]],  # 5-P4/16
   [-1, 9, C3, [512]],
   [-1, 1, Conv, [1024, 3, 2]],  # 7-P5/32
   [-1, 3, C3, [1024]],
   [-1, 1, SPPF, [1024, 5]],  # 9
  ]

# YOLOv5 v6.0 head
head:
  [[-1, 1, Conv, [512, 1, 1]],
   [-1, 1, nn.Upsample, [None, 2, 'nearest']],
   [[-1, 6], 1, Concat, [1]],  # cat backbone P4
   [-1, 3, C3, [512, False]],  # 13

   [-1, 1, Conv, [256, 1, 1]],
   [-1, 1, nn.Upsample, [None, 2, 'nearest']],
   [[-1, 4], 1, Concat, [1]],  # cat backbone P3
   [-1, 3, C3, [256, False]],  # 17 (P3/8-small)

   [-1, 1, Conv, [256, 3, 2]],
   [[-1, 14], 1, Concat, [1]],  # cat head P4
   [-1, 3, C3, [512, False]],  # 20 (P4/16-medium)

   [-1, 1, Conv, [512, 3, 2]],
   [[-1, 10], 1, Concat, [1]],  # cat head P5
   [-1, 3, C3, [1024, False]],  # 23 (P5/32-large)

   [[17, 20, 23], 1, Detect, [nc, anchors]],  # Detect(P3, P4, P5)
  ]

总结

至此,我们已经创建好待标注的项目以及训练好针对自己数据集的 Yolov5 模型。下一篇我们将介绍通过继承 label_studio_ml.model.LabelStudioMLBase 类,来构造我们的后端预测模型类。

推荐阅读

业务交互网关洪峰应对之道

Flink checkpoint 算法(上)

从线上死锁分析到 Next-Key Lock 理解

深入理解 MyBatis

招贤纳士

政采云技术团队(Zero),一个富有激情、创造力和执行力的团队,Base 在风景如画的杭州。团队现有300多名研发小伙伴,既有来自阿里、华为、网易的“老”兵,也有来自浙大、中科大、杭电等校的新人。团队在日常业务开发之外,还分别在云原生、区块链、人工智能、低代码平台、中间件、大数据、物料体系、工程平台、性能体验、可视化等领域进行技术探索和实践,推动并落地了一系列的内部技术产品,持续探索技术的新边界。此外,团队还纷纷投身社区建设,目前已经是 google flutter、scikit-learn、Apache Dubbo、Apache Rocketmq、Apache Pulsar、CNCF Dapr、Apache DolphinScheduler、alibaba Seata 等众多优秀开源社区的贡献者。如果你想改变一直被事折腾,希望开始折腾事;如果你想改变一直被告诫需要多些想法,却无从破局;如果你想改变你有能力去做成那个结果,却不需要你;如果你想改变你想做成的事需要一个团队去支撑,但没你带人的位置;如果你想改变本来悟性不错,但总是有那一层窗户纸的模糊……如果你相信相信的力量,相信平凡人能成就非凡事,相信能遇到更好的自己。如果你希望参与到随着业务腾飞的过程,亲手推动一个有着深入的业务理解、完善的技术体系、技术创造价值、影响力外溢的技术团队的成长过程,我觉得我们该聊聊。任何时间,等着你写点什么,发给 zcy-tc@cai-inc.com

微信公众号

文章同步发布,政采云技术团队公众号,欢迎关注

政采云技术团队.png